[
  {
    "path": ".dockerignore",
    "content": "target\nbuild\n*.pdf\nnode_modules\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nend_of_line = lf\n"
  },
  {
    "path": ".envrc",
    "content": "use flake\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto eol=lf\nquill_simple.html linguist-generated\ngithub_textarea.html linguist-generated\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Platform**\nWhat platform has the issue? Is it in Obsidian, Neovim, Visual Studio Code, Chrome, or Firefox? Something else?\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/report-false-positive.md",
    "content": "---\nname: Report False Positive\nabout: Harper flagged something that's actually correct\ntitle: ''\nlabels: bug, harper-core, linting, false-positive\n---\n**What got flagged?**\nThe text that was incorrectly flagged.\n\n**Why is this incorrect?**\nBrief explanation.\n\n**Example of correct usage:**\n[Your example here]"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/report-grammatical-error.md",
    "content": "---\nname: Report Grammatical Error\nabout: Harper missed a grammatical error\ntitle: ''\nlabels: enhancement, harper-core, linting\n---\n**The Error**\nDescription of the error.\n\n**Examples (2-3):**\n1. \n2. \n\n**References**\nAny grammar rules or resources that support this.\n\n**Potential Edge Cases**\nWhen might this not apply?"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/suggest-a-feature.md",
    "content": "---\nname: Suggest a Feature\nabout: Propose a new feature\ntitle: ''\nlabels: enhancement\n---\n**What problem does this solve?**\nBrief description.\n\n**Proposed Solution**\nHow should it work?\n\n**Examples**\nShow, don't tell.\n\n**Component**\n- [ ] Core engine\n- [ ] Plugin/Extension\n- [ ] Other: _____\n\n**Additional Context**\nAny other relevant info."
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"cargo\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "# Issues \n<!-- Link any relevant GitHub issues here. -->\n<!-- If this PR resolves the issue(s), write closes/fixes/resolves before the issue number(s) (e.g. Fixes #____, closes #____). -->\n\n# Description\n<!-- Please include a summary of the change. -->\n<!-- Any details that you think are important to review this PR? -->\n<!-- Are there other PRs related to this one? -->\n\n# Demo\n<!-- Add a screenshot or a video demonstration when possible and necessary. -->\n\n# How Has This Been Tested?\n<!-- Please describe how you tested your changes. -->\n\n# Checklist\n<!-- Go over all the following points, and put an `x` in all the boxes that apply -->\n\n- [ ] I have performed a self-review of my own code\n- [ ] I have added tests to cover my changes\n"
  },
  {
    "path": ".github/workflows/binaries.yml",
    "content": "name: Binaries\n\non:\n  push:\n    branches: [\"master\"]\n    tags: [\"v*\"]\n  merge_group:\n\njobs:\n  binaries:\n    name: ${{ matrix.platform.project }} - ${{ matrix.platform.release_for }}\n    if: github.event.pull_request.draft == false\n    strategy:\n      matrix:\n        platform:\n          - release_for: Windows-x86_64\n            os: windows-latest\n            target: x86_64-pc-windows-msvc\n            project: harper-ls\n            bin: harper-ls.exe\n            name: harper-ls-x86_64-pc-windows-msvc.zip\n            command: build\n          - release_for: macOS-x86_64\n            os: macOS-latest\n            target: x86_64-apple-darwin\n            project: harper-ls\n            bin: harper-ls\n            name: harper-ls-x86_64-apple-darwin.tar.gz\n            command: build\n          - release_for: macOS-aarch64\n            os: macOS-latest\n            target: aarch64-apple-darwin\n            project: harper-ls\n            bin: harper-ls\n            name: harper-ls-aarch64-apple-darwin.tar.gz\n            command: build\n          - release_for: Linux-x86_64-GNU\n            os: ubuntu-latest\n            target: x86_64-unknown-linux-gnu\n            project: harper-ls\n            bin: harper-ls\n            name: harper-ls-x86_64-unknown-linux-gnu.tar.gz\n            command: build\n          - release_for: Linux-aarch64-GNU\n            os: ubuntu-latest\n            target: aarch64-unknown-linux-gnu\n            project: harper-ls\n            bin: harper-ls\n            name: harper-ls-aarch64-unknown-linux-gnu.tar.gz\n            command: build\n          - release_for: Linux-x86_64-musl\n            os: ubuntu-latest\n            target: x86_64-unknown-linux-musl\n            project: harper-ls\n            bin: harper-ls\n            name: harper-ls-x86_64-unknown-linux-musl.tar.gz\n            command: build\n          - release_for: Linux-aarch64-musl\n            os: ubuntu-latest\n            target: aarch64-unknown-linux-musl\n            project: harper-ls\n            bin: harper-ls\n            name: harper-ls-aarch64-unknown-linux-musl.tar.gz\n            command: build\n\n          - release_for: Windows-x86_64\n            os: windows-latest\n            target: x86_64-pc-windows-msvc\n            project: harper-cli\n            bin: harper-cli.exe\n            name: harper-cli-x86_64-pc-windows-msvc.zip\n            command: build\n          - release_for: macOS-x86_64\n            os: macOS-latest\n            target: x86_64-apple-darwin\n            project: harper-cli\n            bin: harper-cli\n            name: harper-cli-x86_64-apple-darwin.tar.gz\n            command: build\n          - release_for: macOS-aarch64\n            os: macOS-latest\n            target: aarch64-apple-darwin\n            project: harper-cli\n            bin: harper-cli\n            name: harper-cli-aarch64-apple-darwin.tar.gz\n            command: build\n          - release_for: Linux-x86_64-GNU\n            os: ubuntu-latest\n            target: x86_64-unknown-linux-gnu\n            project: harper-cli\n            bin: harper-cli\n            name: harper-cli-x86_64-unknown-linux-gnu.tar.gz\n            command: build\n          - release_for: Linux-aarch64-GNU\n            os: ubuntu-latest\n            target: aarch64-unknown-linux-gnu\n            project: harper-cli\n            bin: harper-cli\n            name: harper-cli-aarch64-unknown-linux-gnu.tar.gz\n            command: build\n          - release_for: Linux-x86_64-musl\n            os: ubuntu-latest\n            target: x86_64-unknown-linux-musl\n            project: harper-cli\n            bin: harper-cli\n            name: harper-cli-x86_64-unknown-linux-musl.tar.gz\n            command: build\n          - release_for: Linux-aarch64-musl\n            os: ubuntu-latest\n            target: aarch64-unknown-linux-musl\n            project: harper-cli\n            bin: harper-cli\n            name: harper-cli-aarch64-unknown-linux-musl.tar.gz\n            command: build\n\n    runs-on: ${{ matrix.platform.os }}\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Rust Cache\n        uses: Swatinem/rust-cache@v2.7.8\n      - name: Build binary\n        uses: houseabsolute/actions-rust-cross@v1\n        with:\n          command: ${{ matrix.platform.command }}\n          target: ${{ matrix.platform.target }}\n          args: \"--locked --release --bin ${{ matrix.platform.project }}\"\n          force-use-cross: ${{ matrix.platform.os == 'ubuntu-latest' }}\n          strip: true\n      - name: Package as archive\n        shell: bash\n        run: |\n          cd target/${{ matrix.platform.target }}/release\n          if [[ \"${{ matrix.platform.os }}\" == \"windows-latest\" ]]; then\n            7z a ../../../${{ matrix.platform.name }} ${{ matrix.platform.bin }}\n          else\n            tar czvf ../../../${{ matrix.platform.name }} ${{ matrix.platform.bin }}\n          fi\n          cd -\n      - name: Upload Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ matrix.platform.bin }}-${{ matrix.platform.target }}\n          path: ${{ matrix.platform.name }}\n\n      - name: Release artifacts\n        if: startsWith(github.ref, 'refs/tags/v')\n        uses: ncipollo/release-action@v1\n        with:\n          artifacts: ${{ matrix.platform.name }}\n          allowUpdates: true\n          draft: true\n"
  },
  {
    "path": ".github/workflows/build_web.yml",
    "content": "name: Build Web\n\non:\n  push:\n    branches: [\"master\", \"web-prod\"]\n  pull_request:\n    branches: [\"master\"]\n  merge_group:\n\njobs:\n  build-web:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - name: Setup node\n        uses: actions/setup-node@v4\n        with:\n          node-version-file: \".node-version\"\n      - name: Retrieve version after install\n        id: nodenv\n        run: echo \"node-version=$(node -v | sed 's/^v//')\" >> $GITHUB_OUTPUT\n      - uses: redhat-actions/buildah-build@v2\n        with:\n          image: web\n          containerfiles: |\n            Dockerfile\n          build-args: |\n            NODE_VERSION=${{ steps.nodenv.outputs.node-version }}-slim\n          extra-args: |\n            --ulimit nofile=65536:65536\n"
  },
  {
    "path": ".github/workflows/chrome_plugin.yml",
    "content": "name: Chrome Plugin\n\non:\n  push:\n    branches: [\"master\"]\n    tags: [\"v*\"]\n  pull_request:\n    branches: [\"master\"]\n  merge_group:\n\nenv:\n  CARGO_TERM_COLOR: always\n\njobs:\n  chrome-plugin:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: extractions/setup-just@v2\n      - uses: actions/setup-node@v4\n        with:\n          node-version-file: \".node-version\"\n      - name: Enable Corepack\n        run: corepack enable\n      - uses: cargo-bins/cargo-binstall@main\n      - name: Install `wasm-pack`\n        run: cargo binstall wasm-pack --force --no-confirm\n      - name: Build Chrome Plugin\n        run: just build-chrome-plugin\n      - name: Build Firefox Plugin\n        run: just build-firefox-plugin\n      - name: Upload Chrome extension\n        uses: actions/upload-artifact@v4\n        with:\n          name: harper-chrome-plugin.zip\n          path: \"packages/chrome-plugin/package/harper-chrome-plugin.zip\"\n      - name: Upload Firefox extension\n        uses: actions/upload-artifact@v4\n        with:\n          name: harper-firefox-plugin.zip\n          path: \"packages/chrome-plugin/package/harper-firefox-plugin.zip\"\n      - name: Release artifacts\n        uses: ncipollo/release-action@v1\n        if: startsWith(github.ref, 'refs/tags/v')\n        with:\n          artifacts: \"packages/chrome-plugin/package/*.zip\"\n          allowUpdates: true\n          draft: true\n"
  },
  {
    "path": ".github/workflows/just_checks.yml",
    "content": "name: Just Checks\n\non:\n  push:\n    branches: [\"master\", \"web-prod\"]\n  pull_request:\n    branches: [\"master\"]\n  merge_group:\n\nenv:\n  CARGO_TERM_COLOR: always\n\njobs:\n  just-checks:\n    runs-on: ubuntu-latest\n    name: just ${{ matrix.task }}\n    strategy:\n      matrix:\n        task:\n          [\n            check-rust,\n            check-js,\n            test-rust,\n            test-harperjs,\n            test-vscode,\n            test-chrome-plugin,\n            test-firefox-plugin,\n            test-obsidian,\n          ]\n    steps:\n      - uses: actions/checkout@v4\n      - uses: extractions/setup-just@v2\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n      - uses: actions-rust-lang/setup-rust-toolchain@v1\n        with:\n          components: rustfmt,clippy\n      - name: Install Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version-file: \".node-version\"\n      - name: Enable Corepack\n        run: corepack enable\n      - name: Rust Cache\n        uses: Swatinem/rust-cache@v2.7.8\n      - uses: cargo-bins/cargo-binstall@main\n      - name: Install `wasm-pack`\n        run: cargo binstall wasm-pack --force --no-confirm\n      - name: Install `cargo hack`\n        run: cargo binstall cargo-hack --force --no-confirm\n      - name: Run `${{ matrix.task }}`\n        run: just ${{ matrix.task }}\n"
  },
  {
    "path": ".github/workflows/stale.yml",
    "content": "# Adapted from [Jeff Geerling's Stale Workflow](https://github.com/geerlingguy/mac-dev-playbook/blob/719de3569804fcf4974fc3a14f46f3ebb92989b2/.github/workflows/stale.yml)\n\n---\nname: Close inactive issues\n\"on\":\n  schedule:\n    - cron: \"0 2 * * *\"\n\njobs:\n  close-issues:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n      pull-requests: write\n    steps:\n      - uses: actions/stale@v10\n        with:\n          days-before-stale: 60\n          days-before-close: 14\n          exempt-issue-labels: bug,pinned,security,planned\n          exempt-pr-labels: bug,pinned,security,planned\n          stale-issue-label: \"stale\"\n          stale-pr-label: \"stale\"\n          stale-issue-message: |\n            This issue has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 14 days. Thank you for your contribution!\n          close-issue-message: |\n            This issue has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details.\n          stale-pr-message: |\n            This pr has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 14 days. Thank you for your contribution!\n          close-pr-message: |\n            This pr has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details.\n          repo-token: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/vscode_plugin.yml",
    "content": "name: VS Code Plugin\n\non:\n  push:\n    branches: [\"master\"]\n    tags: [\"v*\"]\n  merge_group:\n\njobs:\n  vscode-plugin:\n    name: ${{ matrix.platform.code_target }}\n    if: github.event.pull_request.draft == false\n    strategy:\n      matrix:\n        platform:\n          - os: windows-latest\n            rust_target: x86_64-pc-windows-msvc\n            code_target: win32-x64\n          - os: windows-latest\n            rust_target: aarch64-pc-windows-msvc\n            code_target: win32-arm64\n          - os: macOS-latest\n            rust_target: x86_64-apple-darwin\n            code_target: darwin-x64\n          - os: macOS-latest\n            rust_target: aarch64-apple-darwin\n            code_target: darwin-arm64\n          - os: ubuntu-latest\n            rust_target: x86_64-unknown-linux-gnu\n            code_target: linux-x64\n          - os: ubuntu-latest\n            rust_target: aarch64-unknown-linux-gnu\n            code_target: linux-arm64\n          - os: ubuntu-latest\n            rust_target: armv7-unknown-linux-gnueabihf\n            code_target: linux-armhf\n          - os: ubuntu-latest\n            rust_target: x86_64-unknown-linux-musl\n            code_target: alpine-x64\n          - os: ubuntu-latest\n            rust_target: aarch64-unknown-linux-musl\n            code_target: alpine-arm64\n    runs-on: ${{ matrix.platform.os }}\n    steps:\n      - uses: actions/checkout@v4\n      - uses: extractions/setup-just@v2\n      - uses: actions/setup-node@v4\n        with:\n          node-version-file: \".node-version\"\n      - name: Enable Corepack\n        run: corepack enable\n      - name: Build harper-ls\n        uses: houseabsolute/actions-rust-cross@v1\n        with:\n          target: ${{ matrix.platform.rust_target }}\n          args: \"--locked --release --bin harper-ls\"\n          force-use-cross: ${{ matrix.platform.os == 'ubuntu-latest' }}\n          strip: true\n      - name: Package extension\n        id: package_extension\n        shell: bash\n        run: |\n          bin_dir=\"packages/vscode-plugin/bin\"\n          release_dir=\"target/${{ matrix.platform.rust_target }}/release\"\n\n          mkdir \"$bin_dir\"\n\n          if [[ \"${{ matrix.platform.os }}\" == \"windows-latest\" ]]; then\n            cp \"${release_dir}/harper-ls.exe\" \"$bin_dir\"\n          else\n            cp \"${release_dir}/harper-ls\" \"$bin_dir\"\n          fi\n\n          just package-vscode ${{ matrix.platform.code_target }}\n          echo artifact=$(echo packages/vscode-plugin/*.vsix) >> $GITHUB_OUTPUT\n      - name: Release artifacts\n        if: startsWith(github.ref, 'refs/tags/v')\n        uses: ncipollo/release-action@v1\n        with:\n          artifacts: \"./packages/vscode-plugin/*.vsix\"\n          allowUpdates: true\n          draft: true\n      - name: Publish to OpenVSX\n        if: startsWith(github.ref, 'refs/tags/v')\n        uses: HaaLeo/publish-vscode-extension@v1\n        with:\n          pat: ${{ secrets.OPEN_VSX_TOKEN }}\n          packagePath: \"./packages/vscode-plugin/\"\n          extensionFile: ${{ steps.package_extension.outputs.artifact }}\n          skipDuplicate: true\n      - name: Publish to the Visual Studio Marketplace\n        if: startsWith(github.ref, 'refs/tags/v')\n        uses: HaaLeo/publish-vscode-extension@v1\n        with:\n          pat: ${{ secrets.VS_MARKETPLACE_TOKEN }}\n          packagePath: \"./packages/vscode-plugin/\"\n          extensionFile: ${{ steps.package_extension.outputs.artifact }}\n          registryUrl: https://marketplace.visualstudio.com\n"
  },
  {
    "path": ".github/workflows/wp_plugin.yml",
    "content": "name: WordPress Plugin\n\non:\n  push:\n    branches: [\"master\"]\n    tags: [\"v*\"]\n  pull_request:\n    branches: [\"master\"]\n  merge_group:\n\nenv:\n  CARGO_TERM_COLOR: always\n\njobs:\n  wp-plugin:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: extractions/setup-just@v2\n      - uses: actions/setup-node@v4\n        with:\n          node-version-file: \".node-version\"\n      - name: Enable Corepack\n        run: corepack enable\n      - uses: cargo-bins/cargo-binstall@main\n      - name: Install wasm-pack\n        run: cargo binstall wasm-pack --force --no-confirm\n      - name: Build\n        run: just build-wp\n      - name: Upload artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: harper.zip\n          path: packages/wordpress-plugin/harper.zip\n      - name: Draft GitHub release\n        if: startsWith(github.ref, 'refs/tags/v')\n        uses: ncipollo/release-action@v1\n        with:\n          artifacts: packages/wordpress-plugin/harper.zip\n          allowUpdates: true\n          draft: true\n"
  },
  {
    "path": ".gitignore",
    "content": "target\nbuild\n.idea\n.vscode\n.DS_Store\n*.pdf\nnode_modules\nmariadb_data\n\n# Ignore direnv files\n.direnv/*\n"
  },
  {
    "path": ".node-version",
    "content": "lts/*"
  },
  {
    "path": ".npmrc",
    "content": "registry=https://registry.npmjs.org\n"
  },
  {
    "path": "AGENTS.md",
    "content": "# Harper Docs Map for Agents\n\nThis repository’s documentation site is powered by Vite + SvelteKit + SveltePress.\n\nUse `packages/web/vite.config.ts` as the source of truth for documentation scope:\n- Sidebar and important doc routes are defined in `packages/web/vite.config.ts`.\n- Route `/docs/...` maps to `packages/web/src/routes/docs/...`.\n- Most docs are in `+page.md`; some are `+page.svelte` or route helpers.\n\nIf you're working on the Harper repository itself, please pay special attention to the `contributors/*` pages.\nImportantly, all of the tools available in this repository are available via `just`. To learn more, run `just --list`.\n\n## Read First\n\n1. `packages/web/vite.config.ts`: Sidebar source of truth and canonical map of important docs routes.\n2. `packages/web/src/routes/docs/about/+page.md`: High-level product overview, privacy model, versioning policy, and ecosystem context.\n3. `packages/web/src/routes/docs/weir/+page.md`: Weir rule language reference with syntax, expression types, and examples.\n4. `packages/web/src/routes/docs/rules/+page.svelte`: Live/generated rule catalog (rule names, defaults, and descriptions).\n5. `packages/web/src/routes/docs/contributors/introduction/+page.md`: Entry point for contributors and links to deeper contributor docs.\n\n## Core Documentation Directories\n\n- `packages/web/src/routes/docs/about`\n- `packages/web/src/routes/docs/weir`\n- `packages/web/src/routes/docs/rules`\n- `packages/web/src/routes/docs/integrations`\n- `packages/web/src/routes/docs/harperjs`\n- `packages/web/src/routes/docs/contributors`\n\n## Route Prefix to File Prefix\n\n- `/docs/about` -> `packages/web/src/routes/docs/about/+page.md`\n- `/docs/weir` -> `packages/web/src/routes/docs/weir/+page.md`\n- `/docs/rules` -> `packages/web/src/routes/docs/rules/+page.svelte`\n- `/docs/integrations/*` -> `packages/web/src/routes/docs/integrations/*/+page.md`\n- `/docs/harperjs/*` -> `packages/web/src/routes/docs/harperjs/*/+page.md`\n- `/docs/contributors/*` -> `packages/web/src/routes/docs/contributors/*/+page.md`\n\n## Files Listed in the Sidebar (Local)\n\n- `packages/web/src/routes/docs/about/+page.md`: High-level product overview, privacy model, versioning policy, and ecosystem context.\n- `packages/web/src/routes/docs/weir/+page.md`: Weir rule language reference with syntax, expression types, and examples. Very important if you're asked to write a Weir rule.\n- `packages/web/src/routes/docs/rules/+page.svelte`: Live/generated rule catalog (rule names, defaults, and descriptions).\n- `packages/web/src/routes/docs/integrations/obsidian/+page.md`: Obsidian plugin overview, privacy/value comparison, installation, and support links.\n- `packages/web/src/routes/docs/integrations/chrome-extension/+page.md`: End-user Chrome extension overview and install link.\n- `packages/web/src/routes/docs/integrations/firefox-extension/+page.md`: End-user Firefox extension overview and install link.\n- `packages/web/src/routes/docs/integrations/wordpress/+page.md`: Current WordPress guidance, including migration recommendation to Chrome extension and legacy plugin status.\n- `packages/web/src/routes/docs/integrations/language-server/+page.md`: `harper-ls` install methods, dictionaries, code actions, ignore comments, and full configuration reference.\n- `packages/web/src/routes/docs/integrations/visual-studio-code/+page.md`: VS Code extension install, command list, and settings reference.\n- `packages/web/src/routes/docs/integrations/neovim/+page.md`: Neovim setup using `harper-ls`, plus optional and common config tweaks.\n- `packages/web/src/routes/docs/integrations/helix/+page.md`: Helix setup using `harper-ls`, plus optional and common config tweaks.\n- `packages/web/src/routes/docs/integrations/emacs/+page.md`: Emacs setup using `harper-ls`, plus optional and common config tweaks.\n- `packages/web/src/routes/docs/integrations/zed/+page.md`: Zed extension entry point and link to canonical extension README.\n- `packages/web/src/routes/docs/integrations/sublime-text/+page.md`: Sublime Text setup with `harper-ls` and LSP package configuration.\n- `packages/web/src/routes/docs/harperjs/introduction/+page.md`: `harper.js` mission, package overview, and installation starting point.\n- `packages/web/src/routes/docs/harperjs/linting/+page.md`: Core `harper.js` lint workflow and linter usage patterns.\n- `packages/web/src/routes/docs/harperjs/spans/+page.md`: Explains span objects and how to use them to locate/handle lint ranges.\n- `packages/web/src/routes/docs/harperjs/configurerules/+page.md`: How to programmatically read and set `LintConfig` to enable/disable rules.\n- `packages/web/src/routes/docs/harperjs/node/+page.md`: Node.js-specific usage notes, especially `LocalLinter` vs `WorkerLinter`.\n- `packages/web/src/routes/docs/harperjs/CDN/+page.md`: Browser/CDN usage via unpkg and ESM import patterns.\n- `packages/web/src/routes/docs/contributors/introduction/+page.md`: Contributor onboarding overview and links to architecture/testing/rule-authoring docs.\n- `packages/web/src/routes/docs/contributors/environment/+page.md`: Local development environment setup across Rust, Node/pnpm, and optional Nix shell.\n- `packages/web/src/routes/docs/contributors/committing/+page.md`: Commit message conventions and commit hygiene requirements.\n- `packages/web/src/routes/docs/contributors/architecture/+page.md`: System architecture and roles of core components like `harper-core`, `harper-ls`, and `harper.js`.\n- `packages/web/src/routes/docs/contributors/dictionary/+page.md`: Process for adding or updating curated dictionary entries.\n- `packages/web/src/routes/docs/contributors/tests/+page.md`: Test-suite strategy, quality/performance focus, and related testing references.\n- `packages/web/src/routes/docs/contributors/author-a-rule/+page.md`: Step-by-step workflow for implementing and testing new grammar rules.\n- `packages/web/src/routes/docs/contributors/visual-studio-code/+page.md`: How to run, debug, test, and package the VS Code extension locally.\n- `packages/web/src/routes/docs/contributors/chrome-extension/+page.md`: Internal architecture and local development notes for the browser extensions.\n- `packages/web/src/routes/docs/contributors/wordpress/+page.md`: How to build and run the WordPress plugin locally.\n- `packages/web/src/routes/docs/contributors/obsidian/+page.md`: Obsidian-plugin contributor workflow and plugin-specific constraints.\n- `packages/web/src/routes/docs/contributors/review/+page.md`: PR reviewer playbook, including ways to fetch artifacts and test patches locally.\n- `packages/web/src/routes/docs/contributors/local-stats/+page.md`: Local stats logging model, `stats.txt` format, locations, and privacy behavior.\n- `packages/web/src/routes/docs/contributors/brill/+page.md`: Brief explanation of Harper’s Brill-tagging approach and further reading link.\n- `packages/web/src/routes/docs/contributors/faq/+page.md`: Contributor FAQ for conceptual distinctions (for example `Linter` vs `PatternLinter`).\n\n## Documentation Route Helpers (Non-`+page.md`)\n\n- `packages/web/src/routes/docs/about/+page.ts`: Route behavior helper (`ssr = false`) for the About page.\n- `packages/web/src/routes/docs/harperjs/CDN/example/+server.ts`: Serves the HTML example used by the `harper.js` CDN documentation page.\n\n## External Sidebar Targets (No Local Source File)\n\n- `https://docs.rs/harper-core/latest/harper_core/`\n- `/docs/harperjs/ref/index.html` (generated API reference target)\n\n## Projects Contained in This Repository\n\n- `harper-core`: The core grammar checking engine. This is a dependency to pretty much everything related to Harper.\n- `harper-ls`: A Language Server compatible with a number of text editors, including Neovim, Zed, and Helix. See above linked documentation for more details.\n- `harper-cli`: A command-line binary for debugging Harper's core engine and markup language support.\n- `harper-comments`: Provides parsers for a number of programming languages to support linting their comments.\n- `harper-wasm`: The WebAssembly build target that powers browser and JavaScript integrations such as `harper.js`.\n- `packages/lint-framework`: A package containing the tooling necessary to read/write/highlight text on the web for the purpose of linting.\n- `packages/components`: Shared Svelte component package used by web-facing packages.\n- `packages/web`: The Harper website, including documentation and a live demo that uses the `lint-framework`.\n- `packages/harper.js`: The JavaScript package that uses `harper-wasm` to lint text from websites or Node.js processes.\n- `packages/chrome-plugin`: The Harper Chrome Extension - uses the `lint-framework`. Also support Firefox.\n- `packages/obsidian-plugin`\n- `packages/wordpress-plugin`\n- `packages/vscode-plugin`: The Harper Visual Studio Code plugin. Uses `harper-ls`.\n\nThere are of course projects in this repository not listed above. If relevant, feel free to poke around.\n\n## On Writing New Rules\n\nWhen asked to write a new rule, keep these guidelines in mind:\n\n- The user is almost always expecting you to write it to a file. Which file and where is up to you to find out.\n- You should include at least 15 total tests, covering a wide variety of cases. Cover false-positives, false negatives, true positives, and if relevant, true negatives.\n- You should run any and all tests to ensure that you do no break existing behavior and that your new rule runs the way you expect.\n- If the rule is related to a closed compound noun, see if you can just add an entry to the existing closed compound linter.\n\nUnless you are specifically requested to write the rule in a specific way, choose the language (Rust or Weir) and methodology that fits the task.\n\nALWAYS run extensive bullet tests with `cargo run --bin harper-cli --release -- lint <TEXT>` to make sure the new rule isn't already covered by Harper.\n\n## Workflow for Writing Weir Rules\n\n1. Draft the core expression\n- Encode the match with `expr main` using words, sequences, alternatives, filters, exceptions, POS tags, wildcards, or punctuation.\n- Keep the expression minimal but precise; avoid overmatching.\n- If a wordlist is needed, include it as its own expression, used with an expression reference.\n\n2. Add rule metadata\n- `let message`, `let description`, `let kind`, `let becomes` (and `let strategy` if needed).\n- Use `strategy \"Exact\"` when casing must be normalized; otherwise default behavior or `MatchCase` as appropriate.\n\n3. Add tests (required)\n- Include at least 15 tests.\n- Tests must cover: true positives, false positives, false negatives, and (if relevant) true negatives.\n- Prefer a mix of casing, punctuation, whitespace, and nearby-token variations.\n\n4. Sanity-check edge cases\n- Ensure exceptions do not block valid matches.\n- Ensure replacements are correct and not destructive.\n\n5. Run the tests.\n- Fix any issues that arise.\n\n### Output Format\n\nWrite a Weir rule to a new file with a name of your choosing, including `expr main`, `let` fields, and tests. Make sure it has the extension `.weir`.\n"
  },
  {
    "path": "ARCHITECTURE.md",
    "content": "# Harper's Architecture\n\nThis document has been moved to the [online documentation](https://writewithharper.com/docs/contributors/architecture).\n"
  },
  {
    "path": "COMPARISON.md",
    "content": "# Comparison to Other Grammar Checkers\n\n|              | Suggestion Time | License                  | LSP Support                                                                                          | Ruleset                                                                                   | Multi-Lingual/Multi-Dialect |\n| ------------ | --------------- | ------------------------ | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | --------------------------- |\n| Harper       | 10ms            | Apache-2.0               | ✅                                                                                                   | [Custom](https://github.com/automattic/harper/tree/master/harper-core/src/linting)     | ❌                          |\n| LanguageTool | 650ms           | LGPL-2.1                 | 🟨 Through [ltex-ls](https://github.com/valentjn/ltex-ls)                                            | [Custom](https://community.languagetool.org/rule/list?lang=en) + N-Gram Based + LLM Based | 🟨 Not simultaneously       |\n| hunspell     |                 | LGPL/GPL/MPL tri-license | ❌                                                                                                   | hunspell/MySpell                                                                          | 🟨 Not simultaneously       |\n| Grammarly    | 4000ms          | Proprietary              | 🟨 Through [grammarly-language-server](https://github.com/emacs-grammarly/grammarly-language-server) | Proprietary                                                                               | ❌                          |\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nThis page has been moved to [the main documentation](https://writewithharper.com/docs/contributors/introduction).\n"
  },
  {
    "path": "Cargo.toml",
    "content": "[workspace]\nmembers = [\"harper-cli\", \"harper-core\", \"harper-ls\", \"harper-comments\", \"harper-wasm\", \"harper-tree-sitter\", \"harper-html\", \"harper-literate-haskell\", \"harper-typst\", \"harper-stats\", \"harper-pos-utils\", \"harper-brill\", \"harper-ink\", \"harper-python\", \"harper-jjdescription\", \"harper-thesaurus\", \"harper-asciidoc\", \"fuzz\", \"harper-tex\"]\nresolver = \"2\"\n\n[profile.test]\nopt-level = 1\n\n[profile.test.package.\"*\"]\nopt-level = 3\n\n[profile.release]\nopt-level = 3\npanic = \"abort\"\nlto = \"fat\"\n# Stripping binaries triggers a bug in `wasm-opt`.\n# Disable it for now.\n# strip = true\n\n# Release profile with debug info.\n# Useful for debugging and profiling.\n[profile.release-debug]\ninherits = \"release\"\ndebug = 2\n"
  },
  {
    "path": "Dockerfile",
    "content": "# This Dockerfile is for the Harper website and web services.\n# You do not need it to use Harper.\n\nARG NODE_VERSION=24\n\nFROM rust:latest AS wasm-build\nRUN rustup toolchain install\nRUN apt-get update -y && apt-get install clang -y\n\nRUN mkdir -p /usr/build/\nWORKDIR /usr/build/\n\nRUN cargo install wasm-pack\n\nCOPY . .\n\nWORKDIR /usr/build/harper-wasm\nRUN wasm-pack build --target web\nRUN cargo clean\n\nFROM node:${NODE_VERSION} AS node-build\n\nRUN apt-get update && apt-get install git parallel -y\nRUN corepack enable\n\nRUN mkdir -p /usr/build/\nWORKDIR /usr/build/\n\nCOPY . .\nCOPY --from=wasm-build /usr/build/harper-wasm/pkg /usr/build/harper-wasm/pkg\n\nRUN pnpm install --engine-strict=false --shamefully-hoist\n\nWORKDIR /usr/build/packages/components\nRUN pnpm install --engine-strict=false --shamefully-hoist\nRUN pnpm build\n\nWORKDIR /usr/build/packages/harper.js\n\nRUN pnpm build && ./docs.sh\n\nWORKDIR /usr/build/packages/lint-framework\nRUN pnpm build\n\nWORKDIR /usr/build/packages/web\nRUN pnpm install --engine-strict=false --shamefully-hoist\nRUN pnpm build\n\nFROM node:${NODE_VERSION}\n\nCOPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules\nCOPY --from=node-build /usr/build/packages/web/build /usr/build/packages/web/build\nCOPY ./packages/web/drizzle /usr/build/packages/web/build/drizzle\nCOPY --from=node-build /usr/build/packages/web/package.json /usr/build/packages/web/package.json\n\nWORKDIR /usr/build/packages/web/build\n\nENV HOST=0.0.0.0\nENV PORT=3000\n\nENTRYPOINT [\"node\", \"index\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2024 Elijah Potter\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "<div id=\"header\" align=\"center\">\n    <img src=\"logo.svg\" width=\"400px\" />\n    <h1>Harper</h1>\n</div>\n\n[![Harper Binaries](https://github.com/automattic/harper/actions/workflows/binaries.yml/badge.svg)](https://github.com/automattic/harper/actions/workflows/binaries.yml)\n[![Website](https://github.com/automattic/harper/actions/workflows/build_web.yml/badge.svg)](https://github.com/automattic/harper/actions/workflows/build_web.yml)\n[![Checks](https://github.com/automattic/harper/actions/workflows/just_checks.yml/badge.svg)](https://github.com/automattic/harper/actions/workflows/just_checks.yml)\n[![Crates.io](https://img.shields.io/crates/v/harper-ls)](https://crates.io/crates/harper-ls)\n![NPM Version](https://img.shields.io/npm/v/harper.js)\n![Downloads](https://img.shields.io/github/downloads/automattic/harper/total?label=Binary+Downloads)\n![Obsidian Plugin Downloads](https://img.shields.io/github/downloads/automattic/harper-obsidian-plugin/total?label=Obsidian+Plugin+Downloads)\n\nHarper is an English grammar checker designed to be _just right._\nI created it after years of dealing with the shortcomings of the competition.\n\nGrammarly was too expensive and too overbearing.\nIts suggestions lacked context, and were often just plain _wrong_.\nNot to mention: it's a privacy nightmare.\nEverything you write with Grammarly is sent to their servers.\nTheir privacy policy claims they don't sell the data, but that doesn't mean they don't use it to train large language models and god knows what else.\nNot only that, but the round-trip-time of the network request makes revising your work all the more tedious.\n\nLanguageTool is great, if you have gigabytes of RAM to spare and are willing to download the ~16GB n-gram dataset.\nBesides the memory requirements, I found LanguageTool too slow: it would take several seconds to lint even a moderate-size document.\n\nThat's why I created Harper: it is the grammar checker that fits my needs.\nNot only does it take milliseconds to lint a document, take less than 1/50th of LanguageTool's memory footprint,\nbut it is also completely private.\n\nHarper is even small enough to load via [WebAssembly.](https://writewithharper.com)\n\n## Language Support\n\nHarper currently only supports English, but the core is extensible to support other languages, so we welcome contributions that allow for other language support.\n\n## Performance Issues\n\nWe consider long lint times bugs.\nIf you encounter any significant performance issues, please create an issue on the topic.\n\nIf you find a fix to any performance issue, we would appreciate the contribution.\nJust please make sure to read [our contribution guidelines first.](https://writewithharper.com/docs/contributors/introduction)\n\n## Links\n\n- [Frequently Asked Questions](https://writewithharper.com/#faqs)\n- [Obsidian Documentation](https://writewithharper.com/docs/integrations/obsidian)\n- [`harper-ls` Documentation](https://writewithharper.com/docs/integrations/language-server)\n- Supported Editors' Documentation\n  - [Visual Studio Code](https://writewithharper.com/docs/integrations/visual-studio-code)\n  - [Neovim](https://writewithharper.com/docs/integrations/neovim)\n  - [Helix](https://writewithharper.com/docs/integrations/helix)\n  - [Emacs](https://writewithharper.com/docs/integrations/emacs)\n  - [Zed](https://writewithharper.com/docs/integrations/zed)\n- [`harper.js` Documentation](https://writewithharper.com/docs/harperjs/introduction)\n- [Official Discord Server](https://discord.com/invite/JBqcAaKrzQ)\n\n## Huge Thanks\n\nThis project would not be possible without the hard work from those who [contribute](https://writewithharper.com/docs/contributors/introduction).\n\n<a href=\"https://github.com/automattic/harper/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=automattic/harper\" />\n</a>\n\nHarper's logo was designed by [Lukas Werner](https://lukaswerner.com/).\n"
  },
  {
    "path": "biome.json",
    "content": "{\n\t\"$schema\": \"https://biomejs.dev/schemas/2.3.3/schema.json\",\n\t\"vcs\": {\n\t\t\"enabled\": true,\n\t\t\"clientKind\": \"git\",\n\t\t\"useIgnoreFile\": true\n\t},\n\t\"files\": {\n\t\t\"ignoreUnknown\": true,\n\t\t\"includes\": [\n\t\t\t\"**/packages/**/*\",\n\t\t\t\"**/*.json\",\n\t\t\t\"!**/test-results\",\n\t\t\t\"!**/node_modules\",\n\t\t\t\"!**/mariadb_data\",\n\t\t\t\"!**/dist\",\n\t\t\t\"!**/target\",\n\t\t\t\"!**/build\",\n\t\t\t\"!**/temp\",\n\t\t\t\"!**/*.zip\",\n\t\t\t\"!**/*.rs\",\n\t\t\t\"!**/harper-wasm/pkg\",\n\t\t\t\"!**/.vscode-test\",\n\t\t\t\"!**/.svelte-kit\",\n\t\t\t\"!**/.sveltepress\",\n\t\t\t\"!**/packages/obsidian-plugin/main.js\",\n\t\t\t\"!**/pnpm-lock.yaml\",\n\t\t\t\"!**/package-lock.json\",\n\t\t\t\"!**/playwright-report\",\n\t\t\t\"!**/yarn.lock\"\n\t\t]\n\t},\n\t\"css\": {\n\t\t\"parser\": {\n\t\t\t\"tailwindDirectives\": true\n\t\t}\n\t},\n\t\"formatter\": {\n\t\t\"enabled\": true,\n\t\t\"lineWidth\": 100,\n\t\t\"indentStyle\": \"tab\",\n\t\t\"useEditorconfig\": true\n\t},\n\t\"assist\": {\n\t\t\"actions\": {\n\t\t\t\"source\": {\n\t\t\t\t\"organizeImports\": \"on\"\n\t\t\t}\n\t\t}\n\t},\n\t\"linter\": {\n\t\t\"enabled\": true,\n\t\t\"rules\": {\n\t\t\t\"recommended\": true,\n\t\t\t\"suspicious\": {\n\t\t\t\t\"noExplicitAny\": \"off\",\n\t\t\t\t\"noArrayIndexKey\": \"off\",\n\t\t\t\t\"noLabelVar\": \"warn\",\n\t\t\t\t\"noDoubleEquals\": \"off\"\n\t\t\t},\n\t\t\t\"a11y\": {\n\t\t\t\t\"noSvgWithoutTitle\": \"off\",\n\t\t\t\t\"useGenericFontNames\": \"warn\"\n\t\t\t},\n\t\t\t\"correctness\": {\n\t\t\t\t\"useExhaustiveDependencies\": \"off\",\n\t\t\t\t\"noUnusedVariables\": \"off\"\n\t\t\t},\n\t\t\t\"style\": {\n\t\t\t\t\"noParameterAssign\": \"off\",\n\t\t\t\t\"noNonNullAssertion\": \"off\",\n\t\t\t\t\"noUselessElse\": \"off\",\n\t\t\t\t\"useNodejsImportProtocol\": \"off\",\n\t\t\t\t\"useAsConstAssertion\": \"error\",\n\t\t\t\t\"useDefaultParameterLast\": \"error\",\n\t\t\t\t\"useEnumInitializers\": \"error\",\n\t\t\t\t\"useSelfClosingElements\": \"error\",\n\t\t\t\t\"useSingleVarDeclarator\": \"error\",\n\t\t\t\t\"noUnusedTemplateLiteral\": \"error\",\n\t\t\t\t\"useNumberNamespace\": \"error\",\n\t\t\t\t\"noInferrableTypes\": \"error\"\n\t\t\t},\n\t\t\t\"complexity\": {\n\t\t\t\t\"noForEach\": \"off\",\n\t\t\t\t\"noStaticOnlyClass\": \"off\",\n\t\t\t\t\"noThisInStatic\": \"off\",\n\t\t\t\t\"noArguments\": \"off\",\n\t\t\t\t\"noUselessFragments\": \"off\"\n\t\t\t}\n\t\t}\n\t},\n\t\"javascript\": {\n\t\t\"formatter\": {\n\t\t\t\"quoteStyle\": \"single\"\n\t\t}\n\t},\n\t\"overrides\": [\n\t\t{\n\t\t\t\"includes\": [\"**/*.svelte\", \"**/*.astro\", \"**/*.vue\"],\n\t\t\t\"linter\": {\n\t\t\t\t\"rules\": {\n\t\t\t\t\t\"correctness\": {\n\t\t\t\t\t\t\"noUnusedImports\": \"off\"\n\t\t\t\t\t},\n\t\t\t\t\t\"style\": {\n\t\t\t\t\t\t\"useConst\": \"off\",\n\t\t\t\t\t\t\"useImportType\": \"off\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "demo.md",
    "content": "There are some cases where the the standard grammar\ncheckers don't cut it. That;s where Harper comes in handy.\n\nHarper is an language checker for developers. It can detect\nimproper capitalization and misspellled words,\nas well as a number of other issues.\nLike if you break up words you shoul dn't.\nHarper can be an lifesaver when writing technical documents, \nemails or other formal forms of communication.\n\nHarper works everywhere, even when you're not online. Since your data\nnever leaves your device, you don't ned too worry aout us\nselling it or using it to train large language models.\n\nThe best part: Harper can give you feedback instantly.\nFor most documents, Harper can serve up suggestions in\nunder 10 ms, faster that Grammarly.\n"
  },
  {
    "path": "docker-compose.dev.yml",
    "content": "# This Docker compose file is for development of the Harper website and web services.\n# You do not need it to use Harper.\n\nservices:\n  db:\n    image: mariadb:lts\n    restart: always\n    environment:\n      MARIADB_ROOT_PASSWORD: password\n      MARIADB_DATABASE: harper\n      MARIADB_USER: devuser\n      MARIADB_PASSWORD: password\n    ports:\n      - \"3306:3306\"\n    volumes:\n      - ./mariadb_data:/var/lib/mysql\n    healthcheck:\n      test: [\"CMD\", \"mariadb-admin\", \"ping\", \"-h\", \"localhost\"]\n      interval: 5s\n      timeout: 5s\n      retries: 10\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "# This Docker compose file is for development of the Harper website and web services.\n# You do not need it to use Harper.\n\nservices:\n  site:\n    build:\n      dockerfile: Dockerfile\n    restart: always\n    ports:\n      - \"3000:3000\"\n    environment:\n      - ORIGIN=http://localhost:3000\n      - DATABASE_URL=mysql://devuser:password@db:3306/harper\n    depends_on:\n      db:\n        condition: service_healthy\n  db:\n    image: mariadb:lts\n    restart: always\n    environment:\n      MARIADB_ROOT_PASSWORD: password\n      MARIADB_DATABASE: harper\n      MARIADB_USER: devuser\n      MARIADB_PASSWORD: password\n    ports:\n      - \"3306:3306\"\n    volumes:\n      - ./mariadb_data:/var/lib/mysql\n    healthcheck:\n      test: [\"CMD\", \"mariadb-admin\", \"ping\", \"-h\", \"localhost\"]\n      interval: 5s\n      timeout: 5s\n      retries: 10\n"
  },
  {
    "path": "flake.nix",
    "content": "{\n  inputs = {\n    utils.url = \"github:numtide/flake-utils\";\n  };\n  outputs =\n    {\n      self,\n      nixpkgs,\n      utils,\n    }:\n    utils.lib.eachDefaultSystem (\n      system:\n      let\n        pkgs = import nixpkgs {\n          inherit system;\n        };\n      in\n      {\n        devShell =\n          with pkgs;\n          mkShell {\n            buildInputs = [\n              just\n              bash\n              parallel\n              rustup\n              gcc\n              pnpm\n              nodejs\n              wasm-pack\n              zip\n              wasm-bindgen-cli_0_2_100\n            ];\n\n            shellHook = ''\n              echo \"\n                                                                   YSOKGECAACDFIMRVZ               \n                                                                YQHAAAAABDFFDBAAAAABU              \n                                                              WKAAAFNTWZ      ZWTQNNY              \n                         ZTPMIFDCAAAAAEJPUZ                 ZKAADOX                                \n                      ZTJBAAABFHJMMMMLFAAAAGRZ             YFAAKZ                                  \n                     XDAAELSW          ZVQIAADQZ           QAAL                                    \n                     ZPNW                  VIAACOZ          VTZ                                    \n                          YPLIGDBBDFIKPY     VIABX                   YOKIFDABDGILPY                \n                        TJAAABEILLIFCAAAJT     WW                 ZSIAAACFIMLHEBAABKU              \n                      UEAADNW        XNEAADT                     SDAAEOX        WMDAAEV            \n                 YTTTNAACT              UDAAM                  ZLAAEV              TCAAOTTTY       \n                WBAAAAAFX                YGAAM                 KAAHY                XEAAAAACX      \n                YAAAAACZ                  ZEAAJMMMMMMIGIMMMMMMIAAFZ                  YBAAAAAZ      \n                YAAAAAK                    JAAAAAAAAAAAAAAAAAAAAAL                    IAAAAAZ      \n                 TNDAAT                    TAAAAAAAAAAAAAAAAAAAAAV                    RAAENU       \n                   KAAM                    NAAGTTTTTTRORTTTTTTFAAP                    KAAM         \n                   UAAC                    EAAU               RAAF                   ZBAAW         \n                    NAAHX                XIAAM                 KAAJY                WGAAO          \n                     OAABNX            XOBAAM                  ZLAACOY            XMAAAP           \n                      UEAAAGQVY    ZVQHAAAET                     SDAAAHRVZ    YVPGAAAFV            \n                        VNDAAAABEFBAAAADMV                         UMCAAAABFEBAAAAENW              \n                           VRPMKHHJMORV                               UROMJHHKMPRW\n              \"\n            '';\n          };\n      }\n    );\n}\n"
  },
  {
    "path": "fuzz/.gitignore",
    "content": "target\ncorpus\nartifacts\ncoverage\n"
  },
  {
    "path": "fuzz/Cargo.toml",
    "content": "[package]\nname = \"fuzz\"\nversion = \"0.0.0\"\npublish = false\nedition = \"2024\"\n\n[package.metadata]\ncargo-fuzz = true\n\n[dependencies]\nlibfuzzer-sys = \"0.4\"\n\nharper-core = { path = \"../harper-core\" }\nharper-typst = { path = \"../harper-typst\" }\nharper-literate-haskell = { path = \"../harper-literate-haskell\" }\nharper-html = { path = \"../harper-html\" }\nharper-comments = { path = \"../harper-comments\" }\n\n[[bin]]\nname = \"fuzz_harper_typst\"\npath = \"fuzz_targets/fuzz_harper_typst.rs\"\ntest = false\ndoc = false\nbench = false\n\n[[bin]]\nname = \"fuzz_harper_literate_haskell\"\npath = \"fuzz_targets/fuzz_harper_literate_haskell.rs\"\ntest = false\ndoc = false\nbench = false\n\n[[bin]]\nname = \"fuzz_harper_html\"\npath = \"fuzz_targets/fuzz_harper_html.rs\"\ntest = false\ndoc = false\nbench = false\n\n[[bin]]\nname = \"fuzz_harper_comment\"\npath = \"fuzz_targets/fuzz_harper_comment.rs\"\ntest = false\ndoc = false\nbench = false\n\n[[bin]]\nname = \"fuzz_harper_core_markdown\"\npath = \"fuzz_targets/fuzz_harper_core_markdown.rs\"\ntest = false\ndoc = false\nbench = false\n"
  },
  {
    "path": "fuzz/README.md",
    "content": "# cargo-fuzz targets\n\n## Setup\n\nFollow the rust-fuzz [setup guide](https://rust-fuzz.github.io/book/cargo-fuzz/setup.html).\nYou need a nightly toolchain and the cargo-fuzz plugin.\n\nSimple installation steps:\n\n- `rustup install nightly`\n- `cargo install cargo-fuzz`\n\n## Adding a new fuzzing target\n\nTo add a new target, run `cargo fuzz add $TARGET_NAME`\n\n## Doing a fuzzing run\n\nIf possible, prefill the `fuzz/corpus/$TARGET_NAME` directory with appropriate examples to speed up fuzzing.\nThe fuzzer should be coverage aware, so providing a well formed input document to fuzzing targets only expecting a string as input can speed things up a lot.\n\nThen, run `cargo +nightly fuzz run $TARGET_NAME -- -timeout=$TIMEOUT`\n\nThe timeout flag accepts a timeout in seconds, after which a long-running test case will be aborted.\nThis should be set to a low number to quickly report endless loops / deep recursion in parsers.\n\nThe normal fuzzing run will continue until a crash is found.\n\nAlternatively, if you want to run all the fuzzing targets at once: `cargo +nightly fuzz list | parallel -j0 cargo +nightly fuzz run {} -- -timeout=$TIMEOUT`\n\n## Minifying a test case\n\nOnce the fuzzer finds a crash, we probably want to minify the result.\nThis can be done with `CARGO_PROFILE_RELEASE_LTO=false cargo +nightly fuzz tmin $TARGET $TEST_CASE_PATH`\n"
  },
  {
    "path": "fuzz/fuzz_targets/fuzz_harper_comment.rs",
    "content": "#![no_main]\n\nuse harper_core::parsers::{MarkdownOptions, StrParser};\nuse libfuzzer_sys::arbitrary::{Arbitrary, Result, Unstructured};\nuse libfuzzer_sys::fuzz_target;\n\n#[derive(Debug)]\nstruct Language(String);\n\nconst LANGUAGES: [&str; 34] = [\n    \"cmake\",\n    \"cpp\",\n    \"csharp\",\n    \"c\",\n    \"dart\",\n    \"go\",\n    \"haskell\",\n    \"javascriptreact\",\n    \"javascript\",\n    \"java\",\n    \"kotlin\",\n    \"lua\",\n    \"nix\",\n    \"php\",\n    \"powershell\",\n    \"python\",\n    \"ruby\",\n    \"rust\",\n    \"scala\",\n    \"shellscript\",\n    \"solidity\",\n    \"swift\",\n    \"toml\",\n    \"typescriptreact\",\n    \"typescript\",\n    \"clojure\",\n    \"go\",\n    \"lua\",\n    \"java\",\n    \"javascriptreact\",\n    \"typescript\",\n    \"typescriptreact\",\n    \"solidity\",\n    \"zig\",\n];\n\nimpl<'a> Arbitrary<'a> for Language {\n    fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {\n        let &lang = u.choose(&LANGUAGES)?;\n        Ok(Language(lang.to_owned()))\n    }\n}\n\n#[derive(Debug)]\nstruct Input {\n    language: Language,\n    text: String,\n}\n\nimpl<'a> Arbitrary<'a> for Input {\n    fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {\n        let (language, text) = Arbitrary::arbitrary(u)?;\n        Ok(Input { language, text })\n    }\n\n    fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self> {\n        let (language, text) = Arbitrary::arbitrary_take_rest(u)?;\n        Ok(Input { language, text })\n    }\n}\n\nfuzz_target!(|data: Input| {\n    let opts = MarkdownOptions::default();\n    let parser = harper_comments::CommentParser::new_from_language_id(&data.language.0, opts);\n    if let Some(parser) = parser {\n        let _res = parser.parse_str(&data.text);\n    }\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/fuzz_harper_core_markdown.rs",
    "content": "#![no_main]\n\nuse harper_core::parsers::{Markdown, MarkdownOptions, StrParser};\nuse libfuzzer_sys::fuzz_target;\n\nfuzz_target!(|data: &str| {\n    let opts = MarkdownOptions::default();\n    let parser = Markdown::new(opts);\n    let _res = parser.parse_str(data);\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/fuzz_harper_html.rs",
    "content": "#![no_main]\n\nuse harper_core::parsers::StrParser;\nuse libfuzzer_sys::fuzz_target;\n\nfuzz_target!(|data: &str| {\n    let parser = harper_html::HtmlParser::default();\n    let _res = parser.parse_str(data);\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/fuzz_harper_literate_haskell.rs",
    "content": "#![no_main]\n\n// use harper_core::parsers::StrParser;\nuse libfuzzer_sys::fuzz_target;\n\nfuzz_target!(|_data: &str| {\n    // TODO: figure out how to create a literate haskell parser\n    // let _res = typst.parse_str(&data);\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/fuzz_harper_typst.rs",
    "content": "#![no_main]\n\nuse harper_core::parsers::StrParser;\nuse libfuzzer_sys::fuzz_target;\n\nfuzz_target!(|data: &str| {\n    let typst = harper_typst::Typst;\n    let _res = typst.parse_str(data);\n});\n"
  },
  {
    "path": "harper-asciidoc/Cargo.toml",
    "content": "[package]\nname = \"harper-asciidoc\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\nharper-tree-sitter = { path = \"../harper-tree-sitter\", version = \"1.0.0\" }\ntree-sitter-asciidoc = \"0.6.0\"\ntree-sitter = \"0.25.10\"\n\n[dev-dependencies]\npaste = \"1.0.15\"\n"
  },
  {
    "path": "harper-asciidoc/src/lib.rs",
    "content": "use harper_core::parsers::{self, Parser, PlainEnglish};\nuse harper_core::{Token, TokenKind};\nuse harper_tree_sitter::TreeSitterMasker;\nuse tree_sitter::Node;\n\npub struct AsciidocParser {\n    inner: parsers::Mask<TreeSitterMasker, PlainEnglish>,\n}\n\nimpl AsciidocParser {\n    fn node_condition(n: &Node) -> bool {\n        matches!(\n            n.kind(),\n            \"line\" | \"body\" | \"table_cell_content\" | \"author\" | \"ident_block_line\"\n        )\n    }\n}\n\nimpl Default for AsciidocParser {\n    fn default() -> Self {\n        Self {\n            inner: parsers::Mask::new(\n                TreeSitterMasker::new(tree_sitter_asciidoc::language(), Self::node_condition),\n                PlainEnglish,\n            ),\n        }\n    }\n}\n\nimpl Parser for AsciidocParser {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mut tokens = self.inner.parse(source);\n\n        for token in &mut tokens {\n            if let TokenKind::Space(v) = &mut token.kind {\n                *v = (*v).clamp(0, 1);\n            }\n        }\n\n        tokens\n    }\n}\n"
  },
  {
    "path": "harper-asciidoc/tests/asciidoc_tests.rs",
    "content": "use harper_asciidoc::AsciidocParser;\nuse harper_core::linting::{LintGroup, Linter};\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\n\n/// Creates a unit test checking Asciidoc source code parsing.\nmacro_rules! create_test {\n    ($filename:ident.$ext:ident, $correct_expected:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_$ext _ $filename _correctly>](){\n                 let source = include_str!(\n                    concat!(\n                        \"./test_sources/\",\n                        concat!(\n                        stringify!($filename), \".\", stringify!($ext))\n                    )\n                 );\n\n                 let parser = AsciidocParser::default();\n                 let dict = FstDictionary::curated();\n                 let document = Document::new(&source, &parser, &dict);\n\n                 let mut linter = LintGroup::new_curated(dict, Dialect::American);\n                 let lints = linter.lint(&document);\n\n                 dbg!(&lints);\n                 assert_eq!(lints.len(), $correct_expected);\n\n                 // Make sure that all generated tokens span real characters\n                 for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                 }\n            }\n        }\n    };\n}\n\ncreate_test!(basic.adoc, 2);\ncreate_test!(table.adoc, 1);\ncreate_test!(comment.adoc, 2);\ncreate_test!(comprehensive.adoc, 13);\n"
  },
  {
    "path": "harper-asciidoc/tests/test_sources/basic.adoc",
    "content": "= This is a titlle\n\nThis is a basic paragraph with a typo here: mstakes.\n"
  },
  {
    "path": "harper-asciidoc/tests/test_sources/comment.adoc",
    "content": "// This is a comment with a typo: spelll\n// Another line of the same comment.\n"
  },
  {
    "path": "harper-asciidoc/tests/test_sources/comprehensive.adoc",
    "content": "= Document Title\nAuthor Name <author@example.com>\n:revdate: 2026-01-01\n:custom-attr: Value with typpo.\n\nThis is a paragraph with a deliberate typpo.\n\n== Section Titlre\n\n* List item with errorr\n* Another item\n\n.Block Titlle\n[NOTE]\n====\nAdmonition with mistacke.\n====\n\n|===\n| Header with errorr | Header 2\n\n| Cell with typpo | Cell 1.2\n|===\n\n// Comment with mistacke.\n\n////\nBlock comment with errorr.\n////\n\nIndented block:\n    This has a typpo too.\n\nTerm with errorr::\n    Definition with mistacke.\n"
  },
  {
    "path": "harper-asciidoc/tests/test_sources/table.adoc",
    "content": "|===\n| Cell 1 | Cell 2, but with a typo: errorr\n|===\n"
  },
  {
    "path": "harper-brill/Cargo.toml",
    "content": "[package]\nname = \"harper-brill\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-pos-utils = { path = \"../harper-pos-utils/\", version = \"1.0.0\" }\nserde_json = \"1.0.149\"\n\n[build-dependencies]\nserde_json = \"1.0.149\"\n"
  },
  {
    "path": "harper-brill/finished_chunker/vocab.json",
    "content": "{\n\t\"kicked\": 8723,\n\t\"ADPL\": 12418,\n\t\"Stirling\": 4479,\n\t\"proper\": 1178,\n\t\"blond-haired\": 30464,\n\t\"unitary\": 14934,\n\t\"hyper\": 13552,\n\t\"Montenegro\": 16486,\n\t\"trying\": 2272,\n\t\"interrogations\": 20679,\n\t\"adopt\": 7874,\n\t\"500\": 12101,\n\t\"km\": 12102,\n\t\"DPA\": 18474,\n\t\"defund\": 14161,\n\t\"1829\": 14690,\n\t\"DeCook\": 21039,\n\t\"4641\": 24959,\n\t\"bondad\": 21405,\n\t\"03\": 22242,\n\t\"FROM\": 11799,\n\t\"Atkins\": 3803,\n\t\"sanctuary\": 19754,\n\t\"pillars\": 13167,\n\t\"spots\": 18825,\n\t\"wagon\": 19793,\n\t\"milky\": 27686,\n\t\"asparagus\": 28449,\n\t\"singular\": 15407,\n\t\"sampler\": 29347,\n\t\"Maulana\": 19098,\n\t\"Shaganon\": 11441,\n\t\"202.456.2461\": 24353,\n\t\"1614\": 25367,\n\t\"customer's\": 23511,\n\t\"purely\": 1717,\n\t\"Parties\": 14282,\n\t\"Clark\": 14445,\n\t\"Homeland\": 12110,\n\t\"Is\": 6490,\n\t\"lousy\": 6935,\n\t\"drag\": 9979,\n\t\"mosque\": 12267,\n\t\"Equity\": 14518,\n\t\"Friendliness\": 27506,\n\t\"glittering-eyed\": 31934,\n\t\"greenhouse\": 2176,\n\t\"legality\": 31337,\n\t\"Jo-Ann\": 31978,\n\t\"said\": 1772,\n\t\"tranquillity\": 14886,\n\t\"buckaroo\": 32363,\n\t\"SF\": 21175,\n\t\"tatters\": 9853,\n\t\"Zagros\": 16745,\n\t\"Marketing\": 21395,\n\t\"traceable\": 20672,\n\t\"General\": 3456,\n\t\"insect\": 9884,\n\t\"Change\": 13457,\n\t\"tombstone\": 5444,\n\t\"inspires\": 12190,\n\t\"Hilton’s\": 15109,\n\t\"Harkat\": 19617,\n\t\"Feagan\": 22533,\n\t\"instructors\": 18208,\n\t\"hacked\": 12791,\n\t\"sown\": 25214,\n\t\"disrepute\": 9127,\n\t\"Revenue\": 7961,\n\t\"Stefania\": 13223,\n\t\"hitting\": 4882,\n\t\"ARCHILOCHUS\": 25345,\n\t\"Toledo\": 19923,\n\t\"pros\": 10570,\n\t\"Hoston\": 22163,\n\t\"APPROVE\": 23047,\n\t\"pretext\": 12856,\n\t\"Base\": 11991,\n\t\"Full\": 10826,\n\t\"Dillard\": 8786,\n\t\"Rebecca\": 10730,\n\t\"adversaries\": 14327,\n\t\"J'\": 4052,\n\t\"entry\": 12114,\n\t\"evening's\": 31381,\n\t\"Honest\": 29051,\n\t\"ripping\": 24116,\n\t\"Morality\": 8279,\n\t\"1960s\": 4548,\n\t\"828-296-8466\": 24670,\n\t\"defunct\": 19576,\n\t\"magazine\": 12033,\n\t\"Siwu\": 1841,\n\t\"snobbery\": 32793,\n\t\"denote\": 24153,\n\t\"CAROLINA\": 24646,\n\t\"barely\": 8434,\n\t\"9/11\": 11046,\n\t\"(b)\": 2457,\n\t\"decrease\": 2174,\n\t\"Wu\": 3413,\n\t\"BEING\": 11845,\n\t\"incorrect\": 2335,\n\t\"http://travel.state.gov/travel/cis_pa_tw/cis/cis_1052.html\": 27123,\n\t\"–\": 504,\n\t\"insurance\": 7211,\n\t\"could\": 1930,\n\t\"perv\": 23908,\n\t\"Lynley\": 4215,\n\t\"sashimi\": 26939,\n\t\"Galen\": 23174,\n\t\"Corp\": 21364,\n\t\"Mississippi\": 17474,\n\t\"chapters\": 13755,\n\t\"Kitty\": 21768,\n\t\"any1\": 26210,\n\t\"acute\": 2197,\n\t\"outbid\": 24581,\n\t\"ridiculous\": 17366,\n\t\"reliable\": 1254,\n\t\"glitz\": 16947,\n\t\"Unlce\": 21998,\n\t\"Martinez@ENRON\": 23442,\n\t\"swivel\": 30301,\n\t\"independently\": 10732,\n\t\"Gin\": 32603,\n\t\"Fluff\": 18399,\n\t\"Workpapers\": 23313,\n\t\"remotely\": 10451,\n\t\"tries\": 8831,\n\t\"!!!\": 21469,\n\t\"subjects\": 2748,\n\t\"poisoning\": 18692,\n\t\"shelters\": 18762,\n\t\"Stl\": 23008,\n\t\"thats\": 23915,\n\t\"sentiment\": 4662,\n\t\"Glacier\": 15955,\n\t\"#descriptive\": 8009,\n\t\"effaced\": 31235,\n\t\"Manogue\": 23224,\n\t\"0400\": 25426,\n\t\"modulated\": 2780,\n\t\"diminishes\": 1252,\n\t\"announce\": 7801,\n\t\"jigsaw\": 32521,\n\t\"notable\": 3781,\n\t\"Holding\": 21125,\n\t\"associated\": 2273,\n\t\"cemented\": 25863,\n\t\"Chin\": 2472,\n\t\"heckuvalot\": 23648,\n\t\"geologists\": 10603,\n\t\"desperate\": 4672,\n\t\"cooked\": 18389,\n\t\"Cell\": 20985,\n\t\"Paradero\": 29314,\n\t\"mexican\": 28525,\n\t\"GEORGE\": 24347,\n\t\"arrested\": 12193,\n\t\"generative\": 3691,\n\t\"joy\": 14378,\n\t\"anticipated\": 3039,\n\t\"bite\": 18384,\n\t\"transform\": 243,\n\t\"1738\": 3131,\n\t\"candid\": 5878,\n\t\"37\": 7324,\n\t\"atty\": 23808,\n\t\"diarheya\": 27592,\n\t\"Motel's\": 3968,\n\t\"donkey\": 32012,\n\t\"stories\": 4608,\n\t\"sizzling\": 32113,\n\t\"Ben\": 6131,\n\t\"nationally\": 10884,\n\t\"litten\": 9418,\n\t\"satanic\": 20028,\n\t\"confessions\": 32517,\n\t\"shah\": 16770,\n\t\"Did\": 6355,\n\t\"Ana\": 5591,\n\t\"6400\": 15561,\n\t\"glove\": 20018,\n\t\"Leavenworth\": 20836,\n\t\"apps\": 2970,\n\t\"slavery\": 12354,\n\t\"seek\": 2539,\n\t\"alternated\": 30505,\n\t\"Beast\": 13635,\n\t\"upon\": 140,\n\t\"eggnog\": 8599,\n\t\"channelled\": 14266,\n\t\"Armenian\": 16748,\n\t\"stewardesses\": 30554,\n\t\"wakes\": 7023,\n\t\"neckless\": 32049,\n\t\"educated\": 4248,\n\t\"'S\": 11492,\n\t\"accountability\": 14167,\n\t\"ramifications\": 7274,\n\t\"Hwang\": 13076,\n\t\"Agassiz\": 3462,\n\t\"acknowledged\": 7633,\n\t\"Sinhala\": 18975,\n\t\"trans-European\": 31450,\n\t\"importing\": 17158,\n\t\"attaching\": 22283,\n\t\"overcooked\": 29488,\n\t\"ploys\": 30426,\n\t\"curating\": 20187,\n\t\"Vercellotti\": 19947,\n\t\"brack\": 27198,\n\t\"overcharges\": 23709,\n\t\"Re(a)d\": 2919,\n\t\"regarding\": 199,\n\t\"cawing\": 17926,\n\t\"Suarez\": 21076,\n\t\"entertained\": 29384,\n\t\"Double\": 4877,\n\t\"associate\": 13389,\n\t\"!!!!!!!!!!?\": 26330,\n\t\"exports\": 31519,\n\t\"Mohandas\": 15043,\n\t\"civic\": 13945,\n\t\"ANDREAE\": 10095,\n\t\"when's\": 16207,\n\t\"American\": 1266,\n\t\"republican\": 29025,\n\t\"Stojic's\": 22752,\n\t\"Attribution\": 8540,\n\t\"12/26/2000\": 23328,\n\t\"brook\": 32740,\n\t\"China\": 2718,\n\t\"premium\": 20990,\n\t\"Mental\": 13557,\n\t\"beverage\": 10478,\n\t\"http://farm3.static.flickr.com/2406/2527255596_db23df940f.jpg\": 26584,\n\t\"dente\": 18383,\n\t\"Cunard\": 32555,\n\t\"1954\": 3453,\n\t\"members'\": 12372,\n\t\"gathers\": 201,\n\t\"Abundance\": 25277,\n\t\"Seoul\": 22069,\n\t\"leprechauns\": 9889,\n\t\"lambs\": 28940,\n\t\"utilization\": 14545,\n\t\"Mann\": 8420,\n\t\"focuses\": 1595,\n\t\"Youngstown\": 28599,\n\t\"silver-mounted\": 31317,\n\t\"biogeochemistry\": 2553,\n\t\"sufferings\": 31957,\n\t\"Bhatia\": 24167,\n\t\"outrageously\": 21157,\n\t\"PHX\": 17104,\n\t\"apostrophe\": 30136,\n\t\"Sands\": 4913,\n\t\"x33907\": 22263,\n\t\"hierarchical\": 20294,\n\t\"walls\": 5054,\n\t\"dragons\": 10319,\n\t\"bursting\": 9098,\n\t\"weathered\": 9166,\n\t\"valet\": 28772,\n\t\"&amp;\": 30657,\n\t\"satire\": 10568,\n\t\"Afghanistan’s\": 19653,\n\t\"condition\": 3191,\n\t\"devotion\": 31022,\n\t\"DNA\": 10621,\n\t\"whisky\": 31613,\n\t\"Recognition\": 12079,\n\t\"muscle\": 9509,\n\t\"plunged\": 5139,\n\t\"1542\": 25467,\n\t\"hibernation\": 27681,\n\t\"DATE\": 24017,\n\t\"computer’s\": 7788,\n\t\"cocktail\": 10474,\n\t\"Messages\": 21372,\n\t\"Mandelstam\": 30772,\n\t\"forward\": 5072,\n\t\"1533\": 25462,\n\t\"30s\": 17090,\n\t\"preconditions\": 6611,\n\t\"clumsy\": 13037,\n\t\"den\": 31479,\n\t\"training\": 349,\n\t\"Sne\": 5928,\n\t\"Measure\": 23026,\n\t\"http://en.wikipedia.org/wiki/Bullfighting\": 28331,\n\t\"stranglehold\": 31453,\n\t\"Kwa\": 1842,\n\t\"Natsuko\": 4605,\n\t\"swirl\": 9736,\n\t\"Curry\": 18391,\n\t\"soprano\": 32624,\n\t\"spoiled\": 27942,\n\t\"planeful\": 32721,\n\t\"Ric\": 21203,\n\t\"60622\": 26915,\n\t\"Task\": 25938,\n\t\"Rawalpindi\": 20590,\n\t\"colonies\": 3566,\n\t\"oversees\": 24288,\n\t\"mileage\": 29193,\n\t\"reservoirs\": 17066,\n\t\"washing-up\": 32214,\n\t\"glowed\": 9973,\n\t\"plastic\": 7769,\n\t\"Beringia\": 15273,\n\t\"Shrodinger\": 24904,\n\t\"willow\": 25056,\n\t\"someplace\": 28428,\n\t\"6\": 469,\n\t\"hanging\": 7807,\n\t\"pasta\": 15771,\n\t\"towed\": 28777,\n\t\"$$\": 28013,\n\t\"Middle\": 7817,\n\t\"gangland\": 19913,\n\t\"Scheuer\": 20615,\n\t\"senatorial\": 4999,\n\t\"duty\": 12277,\n\t\"kidnapping\": 18496,\n\t\"historians\": 27098,\n\t\"Pemex\": 22293,\n\t\"Esna\": 5929,\n\t\"cigarette\": 7348,\n\t\"Georgia\": 14363,\n\t\"comprehension\": 14500,\n\t\"bronzy\": 16054,\n\t\"cave\": 17002,\n\t\"06:30\": 16609,\n\t\"mini-serial\": 4165,\n\t\"Doing\": 13844,\n\t\"tube\": 6836,\n\t\"consciously\": 14843,\n\t\"semi-empirical\": 2678,\n\t\"Popup\": 23595,\n\t\"smashed\": 13679,\n\t\"selective\": 1639,\n\t\"ashtrays\": 30268,\n\t\"FRIENDLY\": 29680,\n\t\"hose\": 3011,\n\t\"monies\": 24510,\n\t\"Dreamworks\": 13589,\n\t\"strangle\": 8618,\n\t\"waves\": 2428,\n\t\"Łódzkie\": 16860,\n\t\"adjusting\": 17930,\n\t\"Ravenna\": 31003,\n\t\"kitchens\": 29981,\n\t\"akin\": 22493,\n\t\"hour\": 10888,\n\t\"persuasion\": 20879,\n\t\"401.3\": 25982,\n\t\"homosexuals\": 25581,\n\t\"meetings\": 11419,\n\t\"BUSH\": 24349,\n\t\"bunioned\": 32358,\n\t\"hoping\": 14776,\n\t\"fools\": 31884,\n\t\"thanking\": 14472,\n\t\"Robinson\": 6169,\n\t\"Henga\": 16313,\n\t\"reporter\": 11103,\n\t\"freedom\": 6521,\n\t\"tranquilize\": 7066,\n\t\"BW\": 24960,\n\t\"billiard\": 25063,\n\t\"renamed\": 16917,\n\t\"eyed\": 7992,\n\t\"deem\": 15530,\n\t\"PAINT\": 25369,\n\t\"island\": 5018,\n\t\"reigon\": 28217,\n\t\"equilibrium\": 31489,\n\t\"94.40\": 26013,\n\t\"donating\": 18590,\n\t\"considers\": 2502,\n\t\"timetable\": 22601,\n\t\"learns\": 25466,\n\t\"emblem\": 9310,\n\t\"heights\": 4703,\n\t\"Thanksgiving\": 21965,\n\t\"encased\": 25894,\n\t\"Fucking\": 9665,\n\t\"symmetries\": 32646,\n\t\"celebrated\": 3963,\n\t\"Rapid\": 11518,\n\t\"Collingswood\": 28810,\n\t\"unfriendly\": 20536,\n\t\"amalgamation\": 10739,\n\t\"later\": 1189,\n\t\"Kuwait\": 16765,\n\t\"humming\": 20330,\n\t\"Alhaznawi\": 20781,\n\t\"McNealy\": 24212,\n\t\"had\": 1277,\n\t\"rebuild\": 11536,\n\t\"2021\": 12985,\n\t\"vols\": 4451,\n\t\"felt\": 4656,\n\t\"conveys\": 8205,\n\t\"1.3\": 14702,\n\t\"carrots\": 27443,\n\t\"Ayatollah\": 18923,\n\t\"Arrow\": 17464,\n\t\"wavered\": 31614,\n\t\"sulphur\": 31375,\n\t\"PPM\": 27885,\n\t\"ragamuffin\": 4673,\n\t\"dialed\": 30504,\n\t\"symbolized\": 6869,\n\t\"Distorted\": 8636,\n\t\"Activity\": 21956,\n\t\"nonviolent\": 15049,\n\t\"WASTE\": 24456,\n\t\"stretched\": 8608,\n\t\"admiral\": 4268,\n\t\"Caucasian\": 27250,\n\t\"snake's\": 27679,\n\t\"Stay\": 9567,\n\t\"whites\": 31783,\n\t\"Paper\": 10514,\n\t\"IRS\": 23573,\n\t\"experiment\": 10308,\n\t\"GM\": 21540,\n\t\"For\": 437,\n\t\"Contractual\": 23023,\n\t\"apathetic\": 30029,\n\t\"Imagine\": 4107,\n\t\"Gregg\": 21931,\n\t\"reserved\": 7571,\n\t\"masking\": 601,\n\t\"playground\": 9595,\n\t\"dismantled\": 31297,\n\t\"Eisenhower\": 14589,\n\t\"Kalkat\": 19034,\n\t\"Berkman\": 14556,\n\t\"widest\": 25932,\n\t\"disgustingly\": 27452,\n\t\"doesn’t\": 9503,\n\t\"Piaget’s\": 15029,\n\t\"NW\": 22804,\n\t\"conversational\": 1812,\n\t\"turn\": 1829,\n\t\"you'll\": 6506,\n\t\"international\": 10999,\n\t\"modestly\": 30231,\n\t\"ceases\": 25850,\n\t\"Intelligence\": 13969,\n\t\"mermaids\": 8999,\n\t\"stronger\": 10877,\n\t\"high-carrying\": 32704,\n\t\"recognition\": 732,\n\t\"draining\": 32406,\n\t\"f-\": 6038,\n\t\"remark\": 9668,\n\t\"obligated\": 22711,\n\t\"Vassar\": 29461,\n\t\"Specified\": 22045,\n\t\"Jubilee\": 10347,\n\t\"Contest\": 5731,\n\t\"enjambed\": 989,\n\t\"unilateral\": 14226,\n\t\"maddened\": 9410,\n\t\"Are\": 6509,\n\t\"BEFORE\": 28785,\n\t\"poses\": 19747,\n\t\"coming\": 6903,\n\t\"Who'll\": 31785,\n\t\"volatilities\": 22689,\n\t\"median\": 15638,\n\t\"doorknob\": 30244,\n\t\"Elie\": 30650,\n\t\"LSD\": 12430,\n\t\"preventive\": 20399,\n\t\"flirting\": 17962,\n\t\"Champagne\": 27010,\n\t\"Ben-Gurion\": 30721,\n\t\"dead\": 5056,\n\t\"fringed\": 31091,\n\t\"Eats\": 6682,\n\t\"curdle\": 17871,\n\t\"I/C\": 23642,\n\t\"Morse\": 31397,\n\t\"Importantly\": 226,\n\t\"threads\": 3060,\n\t\"municipalities\": 7631,\n\t\"stacked\": 28888,\n\t\"kidding\": 7116,\n\t\"staying\": 7064,\n\t\"turnover\": 28972,\n\t\"revolutionaries\": 14727,\n\t\"crosses\": 17288,\n\t\"trades\": 15373,\n\t\"losses\": 11605,\n\t\"MAGICAL\": 32346,\n\t\"macro\": 22595,\n\t\"vaccines\": 1394,\n\t\"2710\": 20924,\n\t\"commitments\": 11217,\n\t\"enviroment\": 26497,\n\t\"Yogi\": 24186,\n\t\"arises\": 11622,\n\t\"document's\": 30104,\n\t\"Mathias\": 10203,\n\t\"owl\": 30841,\n\t\"HATE\": 11901,\n\t\"crops\": 13445,\n\t\"stellar\": 29330,\n\t\"catalytic\": 21837,\n\t\"jungles\": 31014,\n\t\"fry\": 18390,\n\t\"miao\": 14890,\n\t\"Kaoshikii\": 24032,\n\t\"undertakes\": 3025,\n\t\"Stubley\": 23164,\n\t\"nuisance\": 31236,\n\t\"jack\": 26325,\n\t\"twins\": 32149,\n\t\"mid-town\": 17472,\n\t\"perhaps\": 1927,\n\t\"preaching\": 31020,\n\t\"picnics\": 11787,\n\t\"II\": 3155,\n\t\"metaphysics\": 3219,\n\t\"marae\": 16350,\n\t\"movie's\": 13624,\n\t\"cautiously\": 5071,\n\t\"N.Y.\": 11801,\n\t\"Marymegan\": 10587,\n\t\"Barn\": 27197,\n\t\"manager's\": 31315,\n\t\"health\": 1263,\n\t\"retardation\": 20042,\n\t\"controversially\": 1391,\n\t\"Boot\": 1550,\n\t\"713/853-5984\": 22976,\n\t\"styler\": 15926,\n\t\"met\": 3801,\n\t\"casual\": 26213,\n\t\"19/11/2004\": 24556,\n\t\"Period\": 21642,\n\t\"Terrell's\": 19400,\n\t\"lessen\": 7146,\n\t\"prominence\": 5404,\n\t\"Lionel\": 11409,\n\t\"1984\": 3095,\n\t\"hoorah\": 21853,\n\t\"sprayed\": 31709,\n\t\"Babe's\": 16560,\n\t\"Happiness\": 25295,\n\t\"asserted\": 5952,\n\t\"governs\": 23564,\n\t\"Unfortunately\": 2165,\n\t\"fried\": 28526,\n\t\"1694\": 14945,\n\t\"Marshall\": 23770,\n\t\"parliament\": 18551,\n\t\"apogee\": 27105,\n\t\"shrunken\": 32281,\n\t\"tug-boat\": 32376,\n\t\"Weil\": 20144,\n\t\"teacher's\": 27660,\n\t\"Looks\": 6478,\n\t\"extremely\": 1753,\n\t\"Merson\": 4903,\n\t\"jumps\": 13842,\n\t\"artworld\": 14900,\n\t\"mobiles\": 13436,\n\t\"Mackey\": 2417,\n\t\"diseases\": 13495,\n\t\"instruction\": 14836,\n\t\"Michelle\": 5453,\n\t\"Program\": 5713,\n\t\"activists\": 12477,\n\t\"Makos\": 13365,\n\t\"Baja\": 23293,\n\t\"counterweight\": 25827,\n\t\"Watson\": 28283,\n\t\"arrangements\": 8081,\n\t\"cigar\": 31623,\n\t\"pools\": 26548,\n\t\"interquartile\": 15659,\n\t\"instinct\": 14405,\n\t\"plummet\": 24590,\n\t\"Concerned\": 28899,\n\t\"crux\": 7369,\n\t\"pagefilename.bak.htm\": 30065,\n\t\"Grusendorf\": 21794,\n\t\"Zafra\": 25461,\n\t\"Govind\": 28557,\n\t\"quart\": 31304,\n\t\"allocation\": 11619,\n\t\"boulevard\": 25541,\n\t\"heat\": 6269,\n\t\"Rams\": 29445,\n\t\"deeply\": 5140,\n\t\"fyi\": 21213,\n\t\"pleased\": 13897,\n\t\"Terminals\": 17107,\n\t\"nematocysts\": 10650,\n\t\"181\": 24144,\n\t\"marketing\": 8209,\n\t\"plumbers\": 27310,\n\t\"pizzas\": 29640,\n\t\"Kingdom\": 21,\n\t\"AK\": 18575,\n\t\"http://bit.ly/kPlaylists\": 26540,\n\t\"Catholic\": 4290,\n\t\"commander\": 12867,\n\t\"HONKA\": 28650,\n\t\"nestling\": 32946,\n\t\"Lynch\": 23339,\n\t\"uncomprehendingly\": 9525,\n\t\"Bay\": 4935,\n\t\"CBD\": 26963,\n\t\"Brad\": 23086,\n\t\"rulers\": 18976,\n\t\"weather\": 6151,\n\t\"knick\": 8064,\n\t\"refute\": 22464,\n\t\"mayur...@yahoo.com\": 24222,\n\t\"your\": 4580,\n\t\"department's\": 27892,\n\t\"depopulated\": 31575,\n\t\"internalised\": 32837,\n\t\"herewith\": 23088,\n\t\"symbolic\": 20618,\n\t\"Renata\": 9505,\n\t\"horizontally\": 2769,\n\t\"examining\": 1868,\n\t\"quilling\": 29535,\n\t\"Plaskitt\": 14707,\n\t\"wheels\": 26421,\n\t\"AM\": 11127,\n\t\"excellant\": 28115,\n\t\"Breyer\": 26825,\n\t\"intensely\": 9997,\n\t\"OLE\": 23115,\n\t\"#technology\": 8257,\n\t\"matchup\": 12091,\n\t\"Schenectady\": 11800,\n\t\"Daphnia\": 27847,\n\t\"daily\": 1645,\n\t\"Fawn\": 12640,\n\t\"alternating\": 25271,\n\t\"prescribe\": 27613,\n\t\"dean\": 18518,\n\t\"9221\": 22243,\n\t\"pertains\": 19420,\n\t\"Blount\": 19800,\n\t\"steadily\": 9989,\n\t\"disrupt\": 19665,\n\t\"Crescent\": 22237,\n\t\"spiders\": 31739,\n\t\"autumn\": 26007,\n\t\"unify\": 24774,\n\t\"Jerusalem\": 20449,\n\t\"EEI\": 22180,\n\t\"Gianutto\": 25485,\n\t\"Finns\": 31952,\n\t\"predictors\": 8507,\n\t\"horse's\": 6389,\n\t\"amazed\": 9936,\n\t\"<\": 1688,\n\t\"tile\": 9717,\n\t\"stowed\": 25520,\n\t\"Eugene\": 5547,\n\t\"fenders\": 30647,\n\t\"Neuralink\": 8340,\n\t\"Keeper\": 18308,\n\t\"Romance\": 25281,\n\t\"Parthenon\": 32816,\n\t\"Genius\": 15252,\n\t\"flickering\": 10054,\n\t\"20006\": 22827,\n\t\"YE\": 21026,\n\t\"figure\": 2143,\n\t\"Around\": 3180,\n\t\"Concerning\": 6532,\n\t\"Launch\": 24792,\n\t\"Łódź's\": 16874,\n\t\"definition\": 1080,\n\t\"afresh\": 14091,\n\t\"Rickenbacker\": 11711,\n\t\"registered\": 14436,\n\t\"considerate\": 17289,\n\t\"saddened\": 28656,\n\t\"R&D\": 16420,\n\t\"little\": 861,\n\t\"Armaments\": 25757,\n\t\"OUT\": 26477,\n\t\"80435\": 23327,\n\t\"cascading\": 8932,\n\t\"S’pose\": 9908,\n\t\"tighten\": 9326,\n\t\"750,000\": 16955,\n\t\"accomdating\": 28128,\n\t\"Little\": 5733,\n\t\"talked\": 3882,\n\t\"fueled\": 16976,\n\t\"bows\": 30897,\n\t\"alienating\": 18869,\n\t\"involvement\": 1584,\n\t\"magickal\": 20226,\n\t\"infiltrators\": 18812,\n\t\"7.3\": 15047,\n\t\"Powder\": 21881,\n\t\"christmas\": 26391,\n\t\"shackled\": 26075,\n\t\"neighbour\": 31892,\n\t\"licked\": 32641,\n\t\"Anon\": 12719,\n\t\"Steel\": 23002,\n\t\"drawings\": 28477,\n\t\"713-853-1696\": 21702,\n\t\"characterized\": 12703,\n\t\"Jahan\": 16732,\n\t\"confirms\": 22540,\n\t\"1551\": 25476,\n\t\"Havelock\": 19540,\n\t\"Arts\": 10383,\n\t\"India\": 7311,\n\t\"tel\": 16557,\n\t\"cheques\": 26040,\n\t\"62\": 17015,\n\t\"Bartlesville\": 17405,\n\t\"Cap-\": 6733,\n\t\"lace\": 8351,\n\t\"Taffy\": 22030,\n\t\"inoperable\": 29925,\n\t\"upraised\": 24098,\n\t\"restructure\": 30071,\n\t\"skiing\": 29138,\n\t\"Chris\": 5716,\n\t\"TIBCO\": 21362,\n\t\"swarthy\": 32732,\n\t\"differential\": 23292,\n\t\"committee\": 14170,\n\t\"Mosul\": 4525,\n\t\"By\": 634,\n\t\"harmonisation\": 31458,\n\t\"tie\": 6505,\n\t\"gagged\": 25572,\n\t\"Stelle\": 13201,\n\t\"grounded\": 3072,\n\t\"depersonalizing\": 13681,\n\t\"spike\": 23711,\n\t\"...............\": 27385,\n\t\"Matisse\": 21176,\n\t\"exporters\": 31530,\n\t\"Republican\": 3978,\n\t\"hazy\": 11487,\n\t\"Vanguards\": 20566,\n\t\"exits\": 32725,\n\t\"Ouiji\": 7004,\n\t\"sequences\": 1141,\n\t\"child's\": 27469,\n\t\"Serbia\": 16495,\n\t\"pear\": 31794,\n\t\"Barber\": 28709,\n\t\"accommodating\": 32861,\n\t\"profit\": 1387,\n\t\"spraying\": 28272,\n\t\"thinker\": 7869,\n\t\"!!!!\": 24943,\n\t\"antisocialism\": 25699,\n\t\"AAAAAGGGHHHHHH\": 22117,\n\t\"asleep\": 6817,\n\t\"advise\": 16460,\n\t\"04:31\": 22040,\n\t\"SERVICE\": 28281,\n\t\"Proxy\": 29923,\n\t\"occasioned\": 3965,\n\t\"190\": 13314,\n\t\"hastened\": 14420,\n\t\"Alcala\": 25483,\n\t\"nowadays\": 2160,\n\t\"downside\": 23426,\n\t\"obscure\": 3887,\n\t\"trees\": 9168,\n\t\"Kat\": 15865,\n\t\"!?\": 26297,\n\t\"bs\": 29538,\n\t\"merry\": 31132,\n\t\"Devlin\": 2435,\n\t\"Morne\": 16678,\n\t\"Dudley's\": 32106,\n\t\"policy\": 10710,\n\t\"butter-hearted\": 32361,\n\t\"4.\": 1903,\n\t\"mix\": 18428,\n\t\"Unitary\": 24727,\n\t\"Occupation\": 5347,\n\t\"FORMAL\": 22873,\n\t\"pairing\": 383,\n\t\"Clouds\": 5499,\n\t\"Northumberland\": 17578,\n\t\"Dependant\": 24773,\n\t\"MYSTERYS\": 28764,\n\t\"Newton’s\": 15542,\n\t\"balconies\": 13936,\n\t\"front\": 5835,\n\t\"interactions\": 14808,\n\t\"moonshine\": 30984,\n\t\"man\": 4670,\n\t\"mop\": 27855,\n\t\"Peninsula\": 2063,\n\t\"Operation\": 12742,\n\t\"leaf\": 8898,\n\t\"Grenadines\": 16494,\n\t\"EDIT\": 26302,\n\t\"respectfully\": 7498,\n\t\"duh\": 6337,\n\t\"doubts\": 8387,\n\t\"reached\": 14215,\n\t\"Malaysian\": 12167,\n\t\"reduces\": 764,\n\t\"shrewdness\": 25526,\n\t\"populous\": 17030,\n\t\"scary\": 6757,\n\t\"Ichiyō\": 4597,\n\t\"eHow\": 10799,\n\t\"petsmart\": 26448,\n\t\"Albatross\": 17978,\n\t\"battlefield\": 25862,\n\t\"barbecue\": 27307,\n\t\"intruder\": 27694,\n\t\"commit\": 11219,\n\t\"protégé\": 4982,\n\t\"therapist\": 15725,\n\t\"contend\": 17615,\n\t\"keyword\": 14862,\n\t\"Kiss\": 8819,\n\t\"seeing\": 4621,\n\t\"cheung\": 12405,\n\t\"Nehru\": 19000,\n\t\"adult's\": 27875,\n\t\"unilevel\": 23996,\n\t\"kiln\": 26265,\n\t\"principle\": 3123,\n\t\"COVID\": 14172,\n\t\"geologically\": 30631,\n\t\"unquestionably\": 20065,\n\t\"eating\": 8199,\n\t\"cripple\": 25799,\n\t\"pays\": 20459,\n\t\"patents\": 5203,\n\t\"impasse\": 19062,\n\t\"Building\": 11346,\n\t\"Correspondents\": 19518,\n\t\"unexpected\": 10596,\n\t\"dilly\": 17935,\n\t\"harms\": 19362,\n\t\"ignore\": 3875,\n\t\"ANTHONY\": 25404,\n\t\"bland\": 27617,\n\t\"acted\": 13762,\n\t\"corporations\": 7974,\n\t\"climate\": 802,\n\t\"emotional\": 3082,\n\t\"Uncle\": 21981,\n\t\"priority\": 3848,\n\t\"finished\": 10563,\n\t\"professor\": 3209,\n\t\"Port\": 16332,\n\t\"detract\": 22091,\n\t\"Diagnostic\": 13554,\n\t\"locking\": 8083,\n\t\"dwellings\": 15417,\n\t\"FITNESS\": 28520,\n\t\"Tweed\": 23759,\n\t\"banished\": 31633,\n\t\"fisheries\": 25161,\n\t\"jolly\": 8626,\n\t\"Crawfish\": 22528,\n\t\"Visual\": 13265,\n\t\"programmatically\": 30041,\n\t\"worthwhile\": 4726,\n\t\"Items\": 30087,\n\t\"productively\": 18270,\n\t\"yoyos\": 30481,\n\t\"Cups\": 11006,\n\t\"Operations\": 21100,\n\t\"multiple\": 7634,\n\t\"Congolese\": 31869,\n\t\"tackling\": 13007,\n\t\"absorb\": 14408,\n\t\"Hutt\": 16333,\n\t\"gall\": 24083,\n\t\"hitched\": 32090,\n\t\":)\": 10654,\n\t\"repulsive\": 24217,\n\t\".......\": 18726,\n\t\"true\": 3885,\n\t\"inspire\": 8454,\n\t\"wails\": 8778,\n\t\"Admissions\": 22672,\n\t\"protecting\": 7440,\n\t\"towns\": 13020,\n\t\"Depth\": 17320,\n\t\"Nierman\": 6034,\n\t\"splashy\": 6053,\n\t\"Rond\": 3277,\n\t\"partition\": 19341,\n\t\"Lai\": 3485,\n\t\"attributable\": 21223,\n\t\"Damage\": 24443,\n\t\"distributed\": 488,\n\t\"TOO\": 27350,\n\t\"Sstaff\": 28169,\n\t\"snaking\": 31822,\n\t\"guqin\": 14881,\n\t\"insider\": 20900,\n\t\"Tire\": 28691,\n\t\"US's\": 20340,\n\t\"official\": 3531,\n\t\"noon\": 14411,\n\t\"steered\": 18201,\n\t\"Jeremy\": 12491,\n\t\"nonetheless\": 15185,\n\t\"retest\": 30186,\n\t\"Maarten\": 27497,\n\t\"stretching\": 9115,\n\t\"363-0555\": 16567,\n\t\"suitcases\": 29967,\n\t\"overseas\": 11000,\n\t\"Kumaratunga\": 19019,\n\t\"cockpits\": 9273,\n\t\"layout\": 16812,\n\t\"production\": 293,\n\t\"dilemma\": 15087,\n\t\"homemade\": 26262,\n\t\"01:14\": 22764,\n\t\"884\": 25353,\n\t\"might\": 435,\n\t\"tarpaulin\": 17309,\n\t\"Buffet\": 28720,\n\t\"Beautiful\": 19471,\n\t\"Tabennese\": 5905,\n\t\"fighters\": 9284,\n\t\"note\": 1437,\n\t\"bowls\": 8975,\n\t\"Barack\": 12194,\n\t\"stocking\": 18166,\n\t\"guardsmen\": 19216,\n\t\"laurie.ellis@enron.com\": 21418,\n\t\"pigs\": 15446,\n\t\"everyone's\": 13617,\n\t\"knowing\": 4637,\n\t\"hedging\": 23427,\n\t\"toddler\": 28993,\n\t\"romatic\": 29005,\n\t\"drenched\": 29396,\n\t\"bɛʁˈnʊli\": 3104,\n\t\"battling\": 16863,\n\t\"neo-colonialism\": 31958,\n\t\"leotard\": 17683,\n\t\"Parmesan's\": 25134,\n\t\"Wenders\": 5517,\n\t\"Entree\": 28603,\n\t\"creditors\": 22626,\n\t\"animal\": 10631,\n\t\"churchyards\": 9468,\n\t\"frightened\": 10140,\n\t\"formerly\": 5308,\n\t\"Control\": 20825,\n\t\"Pixel\": 26233,\n\t\"cultures’\": 15441,\n\t\"Chamber\": 14350,\n\t\"leaped\": 31305,\n\t\"Dishwasher\": 18416,\n\t\"blisters\": 32825,\n\t\"Cloud9\": 12578,\n\t\"finishing\": 10922,\n\t\"because\": 856,\n\t\"barbeque\": 17153,\n\t\"MASS\": 10105,\n\t\"guffaw\": 30463,\n\t\"tanned\": 30882,\n\t\"Tarahumara\": 5568,\n\t\"hindsight\": 16155,\n\t\"lit\": 9568,\n\t\"brand\": 2933,\n\t\"Turismo\": 17006,\n\t\"UW\": 28855,\n\t\"achieve\": 2726,\n\t\"master\": 6567,\n\t\"ft\": 17037,\n\t\"NEEEEEEEEEVERRRR\": 29089,\n\t\"tempting\": 6952,\n\t\"Tips\": 17888,\n\t\"dinosaur\": 2890,\n\t\"part-session\": 31388,\n\t\"topological\": 2348,\n\t\"other's\": 30903,\n\t\"Revisited\": 4123,\n\t\"Interconnect\": 23566,\n\t\"reconvene\": 15739,\n\t\"50th\": 15639,\n\t\"Rosemary's\": 25612,\n\t\"Louisiana's\": 24439,\n\t\"Chiang\": 12469,\n\t\"checked\": 15813,\n\t\"E@tG\": 20232,\n\t\"Bernardini\": 10293,\n\t\"groaned\": 32222,\n\t\"strenuous\": 19721,\n\t\"bidding\": 22733,\n\t\"katan\": 30535,\n\t\"hammocks\": 26868,\n\t\"dismiss\": 15248,\n\t\"http://www.infoukes.com/history/chornobyl/gregorovich/index.html\": 18703,\n\t\"bends\": 15621,\n\t\"holy\": 13156,\n\t\"gas\": 6263,\n\t\"Escaping\": 26473,\n\t\"646-8420\": 21417,\n\t\"friday\": 27958,\n\t\"trundling\": 32741,\n\t\"destruction\": 18244,\n\t\"breakdown\": 7207,\n\t\"valley\": 5440,\n\t\"Aesthetic\": 1,\n\t\"news\": 6746,\n\t\"---\": 23345,\n\t\"Stretching\": 17665,\n\t\"minute\": 4692,\n\t\"Leah\": 7091,\n\t\"liked\": 6093,\n\t\"staples\": 16146,\n\t\"frosting\": 17878,\n\t\"confirmations\": 9355,\n\t\"ethnically\": 25435,\n\t\"obviously\": 6646,\n\t\"ConnectionFile\": 30061,\n\t\"Fla.\": 11943,\n\t\"08/07/2001\": 23120,\n\t\"forwards\": 31457,\n\t\"XML-based\": 30097,\n\t\"premier\": 7335,\n\t\"weren't\": 6119,\n\t\"fell\": 4636,\n\t\"twist\": 15938,\n\t\"02:10\": 21648,\n\t\"Heisenberg\": 24903,\n\t\"furnished\": 27914,\n\t\"PROVIDED\": 27475,\n\t\"Rated\": 16374,\n\t\"1914\": 5550,\n\t\"Butterfly\": 16630,\n\t\"2018\": 2524,\n\t\"escalation\": 25753,\n\t\"barcoding\": 29306,\n\t\"complications\": 18684,\n\t\"Chalmers\": 9225,\n\t\"stranger\": 9625,\n\t\"electron\": 15580,\n\t\"syrupy\": 18449,\n\t\"asian\": 28207,\n\t\"hunts\": 15506,\n\t\"202.456.1111\": 24351,\n\t\"Lotf\": 16802,\n\t\"sliver\": 18899,\n\t\"persistence\": 1712,\n\t\"puns\": 3471,\n\t\"humanities\": 179,\n\t\"criterion\": 13222,\n\t\"Minchah\": 30588,\n\t\"Non\": 17324,\n\t\"pickup\": 29717,\n\t\"raw-potato\": 31715,\n\t\"refuse\": 13944,\n\t\"islets\": 17207,\n\t\"KNOW\": 21519,\n\t\"moss\": 10002,\n\t\"Emails\": 20658,\n\t\"Sussex\": 27131,\n\t\"wiring\": 9632,\n\t\"a-\": 6278,\n\t\"Aelius\": 5023,\n\t\"64.75\": 1694,\n\t\"USDA\": 20711,\n\t\"windows\": 5064,\n\t\"reneged\": 25922,\n\t\"cotton\": 13480,\n\t\"audiotape\": 20668,\n\t\"CT\": 24023,\n\t\"dotted\": 17586,\n\t\"layers\": 24045,\n\t\"utilitarianism\": 24876,\n\t\"people’s\": 1248,\n\t\"fill\": 6254,\n\t\"informed\": 2504,\n\t\"Capitol\": 15272,\n\t\"uterine\": 27059,\n\t\"yr\": 27907,\n\t\"hardware\": 628,\n\t\"leap\": 8920,\n\t\"NOV\": 28604,\n\t\"OMFG\": 28731,\n\t\"dally\": 17936,\n\t\"neglected\": 29879,\n\t\"bluntly\": 25890,\n\t\"Normalcy\": 5987,\n\t\"cards\": 8812,\n\t\"youre\": 26719,\n\t\"bobbed\": 32431,\n\t\"HOUSEMOTHER\": 11904,\n\t\"distrusted\": 14695,\n\t\"packages\": 17155,\n\t\"btw\": 26737,\n\t\"strengthen\": 13859,\n\t\"equipment\": 6342,\n\t\"Regenesis\": 26509,\n\t\"outsourcing\": 20060,\n\t\"relatively\": 2811,\n\t\"painted\": 8589,\n\t\"regular\": 1531,\n\t\"spoilers\": 3054,\n\t\"country\": 922,\n\t\"sore\": 6383,\n\t\"coughing\": 15806,\n\t\"boutiques\": 16615,\n\t\"pursuant\": 20801,\n\t\"JOYSTICK\": 26787,\n\t\"physicist\": 3110,\n\t\"dreaming\": 7993,\n\t\"sifted\": 17855,\n\t\"socio-political\": 20135,\n\t\"Muscovy\": 4398,\n\t\"budge\": 28223,\n\t\"insets\": 32889,\n\t\"fat\": 9501,\n\t\"experimented\": 3284,\n\t\"McConnell@ECT\": 21186,\n\t\"Unfair\": 27642,\n\t\"*~*~*~*~*~*~*~*~*~*\": 23078,\n\t\"306\": 25767,\n\t\"becouse\": 26755,\n\t\"Robogee\": 12131,\n\t\"haunt\": 23969,\n\t\"directives\": 31416,\n\t\"Conrad's\": 10911,\n\t\"Integrity\": 32578,\n\t\"Cities\": 16655,\n\t\"dangerously\": 8624,\n\t\"latitude\": 2329,\n\t\"mot\": 7754,\n\t\"restoring\": 14343,\n\t\"overflow\": 26671,\n\t\"preconception\": 13703,\n\t\"chambers\": 24863,\n\t\"BCE\": 15316,\n\t\"bashing\": 21343,\n\t\"Barbara\": 6719,\n\t\"vacuous\": 20298,\n\t\"napkin\": 28221,\n\t\"different\": 155,\n\t\"resource\": 7879,\n\t\"tracking\": 144,\n\t\"dangled\": 8554,\n\t\"biologists\": 10601,\n\t\"attributes\": 30127,\n\t\"level\": 588,\n\t\"6500\": 31521,\n\t\"unless\": 6909,\n\t\"Arabia\": 13155,\n\t\"buttering\": 32216,\n\t\"82\": 4812,\n\t\"laughed\": 9014,\n\t\"lawsuits\": 8573,\n\t\"governorates\": 19317,\n\t\"Shawnta\": 15912,\n\t\"Dupont\": 28122,\n\t\"strolling\": 31282,\n\t\"Cab\": 16225,\n\t\"Hour\": 5470,\n\t\"2:25\": 15860,\n\t\"Aksa\": 20493,\n\t\"dumbstruck\": 32165,\n\t\"rat\": 26481,\n\t\"Everything's\": 15991,\n\t\"un-ruly\": 28507,\n\t\"structure\": 753,\n\t\"excitement\": 2483,\n\t\"boasting\": 24159,\n\t\"telegram\": 11036,\n\t\"Universidade\": 1504,\n\t\"Pierre\": 3265,\n\t\"Buddy\": 6082,\n\t\"borders\": 8440,\n\t\"revolt\": 14726,\n\t\"relativism\": 15509,\n\t\":O\": 26395,\n\t\"uneasy\": 25556,\n\t\"calming\": 29789,\n\t\"cutoff\": 2700,\n\t\"motorway\": 16876,\n\t\"retaliation\": 18637,\n\t\"bourbon\": 17987,\n\t\"Kumar\": 10071,\n\t\"mother\": 4232,\n\t\"ANYTHING\": 27337,\n\t\"backing\": 15928,\n\t\"!!!!!!!!!!\": 28361,\n\t\"titles\": 10962,\n\t\"1825\": 3507,\n\t\"re-read\": 24857,\n\t\"373\": 5120,\n\t\"trails\": 8915,\n\t\"PASSWORD\": 23038,\n\t\"suffocate\": 27899,\n\t\"noone\": 23905,\n\t\"blackened\": 9181,\n\t\"vermiculite\": 17729,\n\t\"GCP\": 22034,\n\t\"illuminating\": 8375,\n\t\"Hats\": 28655,\n\t\"Limerick's\": 26152,\n\t\"Gulf\": 14238,\n\t\"TK\": 23600,\n\t\"pirate\": 31501,\n\t\"cutting\": 6886,\n\t\"obtaining\": 11614,\n\t\"elegance\": 17690,\n\t\"CANADA\": 26743,\n\t\"cheated\": 29181,\n\t\"buns\": 30309,\n\t\"useful\": 513,\n\t\"messages\": 5667,\n\t\"tanning\": 5220,\n\t\"tulips\": 15885,\n\t\"fires\": 24843,\n\t\"co-workers\": 21269,\n\t\"JOHN\": 10096,\n\t\"removal\": 12821,\n\t\"chromosome\": 15281,\n\t\"examine\": 15572,\n\t\"Kyle.Jones@ra\": 22024,\n\t\"Decision\": 14389,\n\t\"nosedive\": 8491,\n\t\"comeback\": 16392,\n\t\"occurs\": 1117,\n\t\"articles\": 1392,\n\t\"padded\": 13170,\n\t\"lengthy\": 13052,\n\t\"purporting\": 20848,\n\t\"resond\": 21292,\n\t\"advocate\": 1270,\n\t\"fringes\": 30518,\n\t\"beautifully\": 10154,\n\t\"Bearing\": 32918,\n\t\"Leaky\": 16100,\n\t\"lilac-coloured\": 32899,\n\t\"COM\": 31461,\n\t\"beadwork\": 31562,\n\t\"pins\": 7044,\n\t\"overdose\": 25611,\n\t\"concur\": 19316,\n\t\"Strasburgh\": 4454,\n\t\"Astros\": 4899,\n\t\"positioned\": 23983,\n\t\"Omar\": 19673,\n\t\"Game\": 2926,\n\t\"Sommer's\": 22779,\n\t\"http://www.beardeddragon.org/articles/caresheet/?page=1\": 27762,\n\t\"12:30\": 18255,\n\t\"afraid\": 6319,\n\t\"Yadavaran\": 25840,\n\t\"consumption\": 2084,\n\t\"DON'T\": 28398,\n\t\"===>\": 26514,\n\t\"rvs\": 29720,\n\t\"freeways\": 17455,\n\t\"tomb\": 4390,\n\t\"grabs\": 8789,\n\t\"Fragile\": 18147,\n\t\"316\": 14909,\n\t\"Torrey\": 22560,\n\t\"01/13/2001\": 22771,\n\t\"Mideast\": 25875,\n\t\"divisions\": 14387,\n\t\"Derrick\": 29861,\n\t\"Been\": 6495,\n\t\"11/29/00\": 22037,\n\t\"448-9499\": 22377,\n\t\"licensed\": 7140,\n\t\"damn\": 6078,\n\t\"muddle\": 31746,\n\t\"Palette\": 16069,\n\t\"FIRE\": 22947,\n\t\"contaminated\": 18674,\n\t\"shout\": 11071,\n\t\"endevour\": 28927,\n\t\"propose\": 1810,\n\t\"aggravated\": 19447,\n\t\"Member\": 11594,\n\t\"295870\": 23558,\n\t\"unbelievable\": 6872,\n\t\"maintaining\": 1588,\n\t\"quiz\": 18817,\n\t\"http://www.adventurehobbycraft.com/products/hobby_craft_supplies.html#metal\": 26846,\n\t\"Jeanne\": 5339,\n\t\"Defend\": 27707,\n\t\"Bosco\": 7316,\n\t\"OVER\": 28408,\n\t\"FREEDOM\": 25245,\n\t\"Sassanid\": 16813,\n\t\"pint\": 29354,\n\t\"disorders\": 13562,\n\t\"10:38\": 15851,\n\t\"effects\": 154,\n\t\"fate\": 6568,\n\t\"Marsha\": 2935,\n\t\"especially\": 1589,\n\t\"Abbey\": 4156,\n\t\"1584\": 25361,\n\t\"inferiors\": 17341,\n\t\"shewing\": 9476,\n\t\"Bud\": 29735,\n\t\"ponder\": 10185,\n\t\"gleaned\": 24770,\n\t\"p.m.\": 15565,\n\t\"test\": 1666,\n\t\"1831\": 3840,\n\t\"imperil\": 25843,\n\t\"Crystal\": 5822,\n\t\"resort\": 16073,\n\t\"43.6\": 26082,\n\t\"Carrasco\": 13099,\n\t\"diagnose\": 29058,\n\t\"profits\": 11654,\n\t\"asterisk\": 30180,\n\t\"WWW\": 22456,\n\t\"ConnectionString\": 30058,\n\t\"eldest\": 3535,\n\t\"steamer\": 31078,\n\t\"Heather\": 25650,\n\t\"blackmail\": 20486,\n\t\"Hikmetar\": 19676,\n\t\"HBS\": 23154,\n\t\"butterflies\": 10254,\n\t\"piloting\": 2513,\n\t\"probably\": 1896,\n\t\"Seized\": 5150,\n\t\"struggling\": 5874,\n\t\"contents\": 10844,\n\t\"pharmaceutical\": 1323,\n\t\"experimentation\": 5032,\n\t\"available\": 547,\n\t\"calmness\": 28680,\n\t\"Chicago\": 3778,\n\t\"bouncy\": 28990,\n\t\"Owls\": 4843,\n\t\"backup\": 9615,\n\t\"brick-dust\": 31703,\n\t\"wander\": 7748,\n\t\"Abd\": 4542,\n\t\"viewership\": 2948,\n\t\"Telugu\": 28505,\n\t\"filigree\": 16738,\n\t\"fetishism\": 18805,\n\t\"Joker\": 12555,\n\t\"Equipment\": 28724,\n\t\"Among\": 2671,\n\t\"Darren\": 22100,\n\t\"shark\": 29207,\n\t\"genius\": 28835,\n\t\"movement\": 658,\n\t\"ascetics\": 4997,\n\t\"1,095,000\": 15681,\n\t\"alley\": 32337,\n\t\"bout\": 19150,\n\t\"Infected\": 10224,\n\t\"14721\": 22790,\n\t\"view-only\": 30177,\n\t\"customers\": 10579,\n\t\"***********************************\": 23881,\n\t\"wouldnt\": 26369,\n\t\"VM\": 11391,\n\t\"badgers\": 17229,\n\t\"Khosla\": 24211,\n\t\"Quarter\": 4418,\n\t\"Thors\": 31469,\n\t\"blasting\": 31182,\n\t\"Centuries\": 948,\n\t\"convince\": 7777,\n\t\"http://news.yahoo.com/nestl-purina-releases-commercial-aimed-dogs-183443091.html\": 27204,\n\t\"tatty\": 32940,\n\t\"cautioned\": 25078,\n\t\"marshes\": 9427,\n\t\"safer\": 10715,\n\t\"Yoshiwara\": 4699,\n\t\"Malacca\": 19556,\n\t\"Counselor\": 7565,\n\t\"quo\": 10411,\n\t\"ld2d-#69397-1.DOC\": 22434,\n\t\"unturned\": 28074,\n\t\"murderer\": 20400,\n\t\"counsel\": 7353,\n\t\"Prompted\": 12715,\n\t\"Protection\": 13489,\n\t\"cab\": 6061,\n\t\"unable\": 2867,\n\t\"Putin\": 14668,\n\t\"declares\": 12720,\n\t\"deducted\": 7202,\n\t\"etc.\": 7797,\n\t\"freezer\": 8016,\n\t\"Israel\": 11170,\n\t\"DURING\": 11860,\n\t\"converter\": 21838,\n\t\"Bayley\": 31807,\n\t\"Cycle\": 23457,\n\t\"bassiana\": 10222,\n\t\"Mustapha\": 13136,\n\t\"daunting\": 16154,\n\t\"5,600\": 3066,\n\t\"sundry\": 30346,\n\t\"Nadereh\": 20076,\n\t\"collector\": 11338,\n\t\"Simone\": 20143,\n\t\"S@P\": 20972,\n\t\"Shankman\": 22534,\n\t\"Kenny\": 26064,\n\t\"Device\": 21073,\n\t\"Pyrenees\": 27529,\n\t\"Frost\": 17887,\n\t\"Tempe\": 17044,\n\t\"attendees\": 12559,\n\t\"Emergency\": 8864,\n\t\"Mitten\": 26275,\n\t\"345-8702\": 21146,\n\t\"Skittle\": 18430,\n\t\"specifics\": 13668,\n\t\"Braised\": 18392,\n\t\"Street\": 6304,\n\t\"CPUC\": 22390,\n\t\"prongs\": 27370,\n\t\"Barb\": 6725,\n\t\"radiant\": 30924,\n\t\"warranty\": 28343,\n\t\"cowboy\": 28862,\n\t\"therefore\": 933,\n\t\"apprehension\": 19076,\n\t\"Inter\": 19566,\n\t\"Political\": 10370,\n\t\"savagely\": 32107,\n\t\"coordinator\": 20946,\n\t\"wriggle\": 31889,\n\t\"Tiziano\": 12344,\n\t\"Healing\": 23952,\n\t\"learners\": 14548,\n\t\"manners\": 25658,\n\t\"multi-millionnaires\": 19757,\n\t\"daniel.smith2@durham.ac.uk\": 28,\n\t\"Swiss\": 3108,\n\t\"abundance\": 15372,\n\t\"A.M.\": 11484,\n\t\"Give\": 6804,\n\t\"fades\": 25275,\n\t\"bombs\": 18506,\n\t\"Boardroom\": 22971,\n\t\"Religious\": 14835,\n\t\"Tapping\": 8118,\n\t\"stomped\": 9746,\n\t\"mysteriously\": 19966,\n\t\"decides\": 25818,\n\t\"frontal\": 6855,\n\t\"Okmulgee\": 17443,\n\t\"deter\": 18635,\n\t\"We\": 160,\n\t\"claire.bailey-ross@port.ac.uk\": 15,\n\t\"process's\": 27384,\n\t\"motel\": 29466,\n\t\"Prabhakaran\": 19022,\n\t\"estimates\": 13519,\n\t\"panicked\": 9227,\n\t\"Circus\": 25591,\n\t\"subconsciously\": 7798,\n\t\"Nonpartisan\": 12488,\n\t\"house-elf\": 32128,\n\t\"developmental\": 9581,\n\t\"hurtling\": 24786,\n\t\"Justice\": 7219,\n\t\"twenty-year\": 32629,\n\t\"noodling\": 13749,\n\t\"shiny\": 31912,\n\t\"recurrent\": 4646,\n\t\"lifeguard\": 21248,\n\t\"stools\": 30302,\n\t\"Lolland\": 17244,\n\t\"Digimon's\": 12633,\n\t\"Civic\": 12393,\n\t\"goddamn\": 9766,\n\t\"seem\": 1926,\n\t\"richest\": 17184,\n\t\"Confidentiality\": 21003,\n\t\"UPI\": 24999,\n\t\"scatters\": 32388,\n\t\"EOL\": 21572,\n\t\"guides\": 27760,\n\t\"measuring\": 3296,\n\t\"iconic\": 8407,\n\t\"pagodas\": 9416,\n\t\"commend\": 14110,\n\t\"nachos\": 28349,\n\t\"80th\": 3668,\n\t\"LBJ\": 27728,\n\t\"Speaking\": 18604,\n\t\"ingenuity\": 14630,\n\t\"Agency\": 2577,\n\t\"chill\": 7465,\n\t\"coal-hole\": 32479,\n\t\"wardrobe\": 30242,\n\t\"reduction\": 2898,\n\t\"Dalmatia\": 4976,\n\t\"d'etat\": 19311,\n\t\"sometime\": 11744,\n\t\"opposed\": 10453,\n\t\"representative\": 122,\n\t\"Mukhabarat\": 20790,\n\t\"6565\": 23625,\n\t\"Trees\": 29022,\n\t\"Peoples\": 21937,\n\t\"20.00\": 1695,\n\t\"Tussauds\": 5198,\n\t\"planeloads\": 19881,\n\t\"Praying\": 5936,\n\t\"butterfly\": 10025,\n\t\"bordered\": 16523,\n\t\"They’re\": 9541,\n\t\"vaguer\": 32439,\n\t\"vinyl\": 32552,\n\t\"employs\": 26116,\n\t\"dysphoria\": 1305,\n\t\"excavations\": 17541,\n\t\"Woking\": 26123,\n\t\"Bargain\": 27347,\n\t\"Cheese\": 29353,\n\t\"braining\": 27674,\n\t\"Curtis\": 31959,\n\t\"strutting\": 32178,\n\t\"conscientious\": 8097,\n\t\"oceans\": 9387,\n\t\"18th\": 13104,\n\t\"Lansing\": 11995,\n\t\"installation\": 13413,\n\t\"shish\": 15557,\n\t\"submersion\": 17214,\n\t\"Muhammad\": 4520,\n\t\"Epis.\": 11752,\n\t\"Global's\": 21613,\n\t\"phosphorous\": 32600,\n\t\"OF\": 11513,\n\t\"mothers\": 20040,\n\t\"Because\": 496,\n\t\"dinginess\": 30495,\n\t\"zero\": 7125,\n\t\"Marrying\": 27374,\n\t\"THEY\": 27046,\n\t\"London\": 4486,\n\t\"writings\": 4981,\n\t\"TIRED\": 11876,\n\t\"01:00:51\": 22029,\n\t\"referral\": 22928,\n\t\"peru\": 25465,\n\t\"inquire\": 26445,\n\t\"RhodeRunner\": 27161,\n\t\"Connaught\": 27419,\n\t\"cope\": 29904,\n\t\"statistically\": 1686,\n\t\"enforcing\": 13877,\n\t\"1423\": 16889,\n\t\"1605\": 25386,\n\t\"demanded\": 6627,\n\t\"brick\": 14323,\n\t\"Mcdonald's\": 26331,\n\t\"07\": 28605,\n\t\"376-9004\": 23861,\n\t\"Significant\": 1934,\n\t\"seis\": 6315,\n\t\"lava\": 30840,\n\t\"post\": 882,\n\t\"bang\": 19907,\n\t\"Suck\": 28465,\n\t\"pre\": 23802,\n\t\"Expo\": 12525,\n\t\"trend\": 1096,\n\t\"fox\": 32633,\n\t\"commitment\": 13874,\n\t\"Tobias\": 14475,\n\t\"Anonymous\": 12687,\n\t\"shade\": 13567,\n\t\"ambush\": 30532,\n\t\"stranger's\": 30227,\n\t\"participant\": 1660,\n\t\"ministered\": 5567,\n\t\"reffered\": 29010,\n\t\"Dursley\": 32023,\n\t\"Brigade\": 20734,\n\t\"Enfranchising\": 8109,\n\t\"masculinity\": 10871,\n\t\"yourselves\": 21614,\n\t\"goo\": 9873,\n\t\"Domain\": 14708,\n\t\"nesting\": 25138,\n\t\"Reymont\": 16913,\n\t\"daytime\": 10890,\n\t\"x36709\": 23617,\n\t\"Builds\": 24007,\n\t\"shaggy\": 32809,\n\t\"expansion\": 1181,\n\t\"Review\": 14281,\n\t\"Value\": 25995,\n\t\"Thi$\": 26745,\n\t\"It's\": 6137,\n\t\"Highlighting\": 21955,\n\t\"dogma\": 6607,\n\t\"wildlife\": 17000,\n\t\"Douglas\": 4253,\n\t\"camper\": 21834,\n\t\"bill\": 7062,\n\t\"issues\": 60,\n\t\"gratitude\": 14155,\n\t\"hens\": 27130,\n\t\"speadsheet\": 21816,\n\t\"Bu\": 19328,\n\t\"http://www.time.com/time/daily/chernobyl/860901.accident.html\": 18707,\n\t\"stewardess\": 30564,\n\t\"smoothly\": 25287,\n\t\"mystical\": 25313,\n\t\"EMERCOM\": 18668,\n\t\"diety\": 13412,\n\t\"briefing\": 20682,\n\t\"particularized\": 31145,\n\t\"Rental\": 7303,\n\t\"Garcia@ENRON\": 21626,\n\t\"WITHOUT\": 29877,\n\t\"Tyler\": 8697,\n\t\"#1\": 17126,\n\t\"scrub\": 27062,\n\t\"memorable\": 5321,\n\t\"melanie.gray@weil.com\": 23821,\n\t\"shorter\": 2812,\n\t\"congestion\": 15820,\n\t\"cheerful\": 30592,\n\t\"cruel\": 17643,\n\t\"Wiltshire\": 31638,\n\t\"ranks\": 4280,\n\t\"aggregators\": 22428,\n\t\"breadth\": 10808,\n\t\"Photos\": 12265,\n\t\"N\": 2053,\n\t\"Bremen\": 16181,\n\t\"deductions\": 7201,\n\t\"must\": 794,\n\t\"whitehouse.gov\": 20271,\n\t\"sympathy\": 23910,\n\t\"mutate\": 13822,\n\t\"quesadillas\": 29165,\n\t\"64,500\": 15684,\n\t\"medicating\": 10196,\n\t\"True\": 20306,\n\t\"chubby\": 8773,\n\t\"Location\": 15629,\n\t\"hoarse\": 32204,\n\t\"Crim\": 28100,\n\t\"60's\": 20363,\n\t\"Novotel\": 29792,\n\t\"domestically\": 13952,\n\t\"keeping\": 10252,\n\t\"flavoring\": 17890,\n\t\"Cabalah\": 25638,\n\t\"unawares\": 3045,\n\t\"mid-thirties\": 30408,\n\t\"paired\": 1681,\n\t\"occupied\": 18958,\n\t\"3,500\": 21396,\n\t\"balding\": 27792,\n\t\"radio\": 2714,\n\t\"Leainne\": 26450,\n\t\"finding\": 1931,\n\t\"salespeople\": 28120,\n\t\"Elevator\": 5405,\n\t\"profession\": 1288,\n\t\"Cranmore\": 29211,\n\t\"Chapter\": 7573,\n\t\"Joyce\": 8867,\n\t\"Fusion\": 29362,\n\t\"favor\": 7268,\n\t\"Dry\": 21882,\n\t\"Shorty\": 22101,\n\t\"Laughter\": 31994,\n\t\"friends'\": 9283,\n\t\"Find\": 17685,\n\t\"ENERGY\": 23437,\n\t\"COSTS\": 29230,\n\t\"accommodation\": 7304,\n\t\"combed\": 9011,\n\t\"Effective\": 21550,\n\t\"Gabonese\": 12094,\n\t\"lonely\": 4667,\n\t\"tapping\": 8924,\n\t\"appetite\": 16164,\n\t\"enquiry\": 22593,\n\t\"Engineering\": 2060,\n\t\"GOD\": 25605,\n\t\"inked\": 25838,\n\t\"Mae\": 6346,\n\t\"heads\": 5821,\n\t\"Groningen\": 3133,\n\t\"Scipio\": 23974,\n\t\"versus\": 7129,\n\t\"Proposition\": 21030,\n\t\"gaming\": 13559,\n\t\"ounce\": 29300,\n\t\"backward\": 14701,\n\t\"offsite\": 21654,\n\t\"Awesome\": 15901,\n\t\"h=guys\": 26459,\n\t\"recovery\": 10653,\n\t\"II's\": 25397,\n\t\"remembering\": 14997,\n\t\"Sharq\": 18556,\n\t\"Westchester\": 16541,\n\t\"sanitation\": 32503,\n\t\"grappling\": 15714,\n\t\"Marilyn\": 13384,\n\t\"lagoon\": 16179,\n\t\"governmental\": 11634,\n\t\"Mission\": 13924,\n\t\"126\": 22235,\n\t\"Roger\": 29140,\n\t\"Discuss\": 15268,\n\t\"admit\": 1783,\n\t\"Berg\": 13069,\n\t\"youtube\": 26475,\n\t\"Augustin\": 3547,\n\t\"starvation\": 20525,\n\t\"heavenly\": 31048,\n\t\"specially\": 31745,\n\t\"installed\": 13173,\n\t\"Can't\": 22789,\n\t\"woo-\": 6219,\n\t\"company\": 8339,\n\t\"Olson\": 21807,\n\t\"remnants\": 9208,\n\t\"royally\": 20521,\n\t\"Effects\": 18653,\n\t\"firms\": 19901,\n\t\"PIP\": 31778,\n\t\"innovators\": 8100,\n\t\"That’s\": 9888,\n\t\"treatments\": 13580,\n\t\"Stillman's\": 30271,\n\t\"driveby\": 9807,\n\t\"4,489,109\": 17084,\n\t\"diplomacy\": 14252,\n\t\"Im\": 24231,\n\t\"83\": 25962,\n\t\"pantry\": 17904,\n\t\"depots\": 17513,\n\t\"nation's\": 12665,\n\t\"CPIM\": 23300,\n\t\"Tracy\": 22315,\n\t\"implementation\": 673,\n\t\"Feng\": 1546,\n\t\"soups\": 8026,\n\t\"Psychiatry\": 8530,\n\t\"neglect\": 16938,\n\t\"imprisonment\": 20808,\n\t\"sentimental\": 31030,\n\t\"privatly\": 29799,\n\t\"picture\": 6503,\n\t\"places\": 2323,\n\t\"parishioners\": 29049,\n\t\"1225\": 2476,\n\t\"bowlders\": 31172,\n\t\"their\": 347,\n\t\"team\": 4824,\n\t\"photojournalism\": 11113,\n\t\"engaged\": 1385,\n\t\"Panda\": 29845,\n\t\"Definitely\": 16045,\n\t\"Easter\": 8700,\n\t\"pears\": 32430,\n\t\"broadcast\": 7555,\n\t\"bartenders\": 29578,\n\t\"predicted\": 3706,\n\t\"transpired\": 23716,\n\t\"trotting\": 25236,\n\t\"dressing-table\": 32004,\n\t\"owe\": 23233,\n\t\"victim\": 3933,\n\t\"summons\": 14181,\n\t\"Goldbach\": 3232,\n\t\"interferes\": 13549,\n\t\"1.024\": 26667,\n\t\"flashlights\": 11826,\n\t\"4:30\": 22200,\n\t\"malignant\": 20528,\n\t\"Jeffs\": 19991,\n\t\"society\": 476,\n\t\"Kindly\": 20244,\n\t\"Lombardy\": 13203,\n\t\"SPM\": 2676,\n\t\"Star\": 2998,\n\t\"greetings\": 14084,\n\t\"shitting\": 15782,\n\t\"relaxation\": 24624,\n\t\"sweets\": 28209,\n\t\"predator\": 25034,\n\t\"surface\": 1925,\n\t\"embodies\": 14629,\n\t\"Championship\": 11004,\n\t\"blacksmithing\": 6396,\n\t\"08:30\": 16607,\n\t\"weakening\": 25696,\n\t\"microscopic\": 27871,\n\t\"called\": 210,\n\t\"dissemination\": 1354,\n\t\"Grammar\": 3697,\n\t\"complying\": 12694,\n\t\"bradley\": 28139,\n\t\"timing\": 17689,\n\t\"hairy\": 30531,\n\t\"uniform\": 14151,\n\t\"Spitfire\": 10996,\n\t\"Jersey\": 11050,\n\t\"rsjacobs@Encoreacq.com\": 23796,\n\t\"cat\": 11972,\n\t\"cropduster\": 20717,\n\t\"plotter\": 20802,\n\t\"Gibraltar\": 22513,\n\t\"mechanical\": 3270,\n\t\"Stolmy\": 4914,\n\t\"DOWN\": 29871,\n\t\"hairs\": 9845,\n\t\"chatter\": 30297,\n\t\"Algeria\": 20359,\n\t\"Eberhard\": 11375,\n\t\"waterfalls\": 16708,\n\t\"619-231-9449\": 23878,\n\t\"equalise\": 13091,\n\t\"religions\": 13521,\n\t\"Marin\": 27267,\n\t\"Bjerrebyvej\": 17297,\n\t\"revisions\": 21718,\n\t\"Kayani\": 19713,\n\t\"linchpin\": 2477,\n\t\"Alliance\": 18550,\n\t\"Higuchi's\": 4648,\n\t\"Given\": 1029,\n\t\"unconsciously\": 14841,\n\t\"balm\": 10190,\n\t\"Jaquier\": 12815,\n\t\"strategy\": 13890,\n\t\"Captured\": 17535,\n\t\"ASSISTANCE\": 24346,\n\t\"JUST\": 27482,\n\t\"intimidating\": 9321,\n\t\"http://herp-info.webs.com/beardeddragon.htm\": 27761,\n\t\"Waterproof\": 27821,\n\t\"gun-oil\": 31617,\n\t\"pleasantness\": 31969,\n\t\"Priorities\": 22463,\n\t\"Client\": 21414,\n\t\"Cj\": 28056,\n\t\"encrusted\": 9056,\n\t\"ways\": 74,\n\t\"Florida\": 12312,\n\t\"disagree\": 13728,\n\t\"poneh\": 28043,\n\t\"VPP\": 23391,\n\t\"alr-\": 6785,\n\t\"Jimmy\": 13645,\n\t\"platforms\": 21575,\n\t\"543\": 12860,\n\t\"glistening\": 9694,\n\t\"Élysées\": 16982,\n\t\"Saint\": 4972,\n\t\"unmistakable\": 9688,\n\t\"-_-\": 27087,\n\t\"Experimental\": 2815,\n\t\"Means\": 14469,\n\t\"moon\": 9364,\n\t\"descend\": 9452,\n\t\"fcking\": 29643,\n\t\"seeping\": 30395,\n\t\"acquaintance\": 18733,\n\t\"deliberate\": 14819,\n\t\"youngest\": 4238,\n\t\"Out\": 6689,\n\t\"militaries\": 12888,\n\t\"WTA\": 10849,\n\t\"Researchers\": 15292,\n\t\"exporter\": 24570,\n\t\"Giving\": 24707,\n\t\"Goodwill\": 8215,\n\t\"City\": 2066,\n\t\"subdued\": 11160,\n\t\"survive\": 2072,\n\t\"Default\": 23494,\n\t\"clinking\": 31183,\n\t\"decoupled\": 22646,\n\t\"mailto:galent@nepco.com\": 23184,\n\t\"MacGyver\": 5758,\n\t\"aggravation\": 22777,\n\t\"atheists\": 32573,\n\t\"economizing\": 11642,\n\t\"Enjoyed\": 28606,\n\t\"gives\": 1852,\n\t\"convience\": 23157,\n\t\"spread\": 4744,\n\t\"ownership\": 10461,\n\t\"hospitals\": 20407,\n\t\"Arms\": 5872,\n\t\"dispersal\": 20721,\n\t\"populated\": 15286,\n\t\"136\": 14980,\n\t\"gym\": 8843,\n\t\"extras\": 11755,\n\t\"flowed\": 21421,\n\t\"ethics\": 15141,\n\t\"MO\": 22605,\n\t\"Harpoon\": 25796,\n\t\"BOTHERED\": 28907,\n\t\"schema\": 30112,\n\t\"guideline\": 31546,\n\t\"attentions\": 31882,\n\t\"monarchy\": 19505,\n\t\"readings\": 11017,\n\t\"1835\": 14734,\n\t\"crafts\": 29536,\n\t\"uppercasing\": 24170,\n\t\"outcome\": 3063,\n\t\"felicity\": 1913,\n\t\"runaround\": 29420,\n\t\"Suspension\": 23987,\n\t\"recruit\": 19386,\n\t\"magnifying\": 6865,\n\t\"2.5\": 13934,\n\t\"2020\": 13815,\n\t\"conforms\": 30033,\n\t\"pizza\": 6971,\n\t\"jeju\": 26587,\n\t\"drafting\": 14769,\n\t\"integrated\": 1598,\n\t\"shopped\": 29192,\n\t\"Lebanon\": 20533,\n\t\"display\": 274,\n\t\"rehab\": 17990,\n\t\"tighter\": 28036,\n\t\"1588\": 25380,\n\t\"Zahā\": 4469,\n\t\"looming\": 9052,\n\t\"Félicie\": 3897,\n\t\"transcriptome\": 10624,\n\t\"1834\": 14757,\n\t\"Mars\": 23405,\n\t\"Empire\": 4406,\n\t\"outgrow\": 6742,\n\t\"Anthropologist\": 15492,\n\t\"crisis\": 2448,\n\t\"IMO\": 26869,\n\t\"lesser\": 7616,\n\t\"lets\": 8782,\n\t\"chiefs\": 19893,\n\t\"bakeries\": 29504,\n\t\"1562\": 15409,\n\t\"Employment\": 23084,\n\t\"laboratory\": 18066,\n\t\"locate\": 15554,\n\t\"Khinssacasnondelibreatenibever\": 18094,\n\t\"former\": 3599,\n\t\"ours\": 6513,\n\t\"Ft.\": 20691,\n\t\"shops\": 6163,\n\t\"edifices\": 15317,\n\t\"Disposable\": 19381,\n\t\"Cancer\": 25270,\n\t\"Walrus\": 25617,\n\t\"PC\": 12778,\n\t\"AREA'S\": 26155,\n\t\"initiator\": 1768,\n\t\"messengers\": 30955,\n\t\"distractions\": 7675,\n\t\"Jarrold\": 4119,\n\t\"1640\": 14880,\n\t\"impart\": 18372,\n\t\"EVERY\": 28733,\n\t\"Caron\": 3548,\n\t\"man's\": 5970,\n\t\"Push\": 17917,\n\t\"74419\": 23556,\n\t\"Trying\": 6904,\n\t\"shot\": 4021,\n\t\"accompany\": 23449,\n\t\"greed\": 24871,\n\t\"Biomed\": 13976,\n\t\"absoulutely\": 28552,\n\t\"Acedraz\": 25455,\n\t\"shave\": 28144,\n\t\"skytrain\": 17124,\n\t\"impatient\": 29603,\n\t\"hypnotizing\": 17823,\n\t\"Facility\": 22632,\n\t\"sheltering\": 9037,\n\t\"Anti-Israeli\": 18919,\n\t\"marched\": 14719,\n\t\"Herbert\": 24355,\n\t\"deteriorated\": 19524,\n\t\"rampaged\": 18868,\n\t\"prefer\": 11691,\n\t\"riots\": 4035,\n\t\"achieving\": 5649,\n\t\"forty\": 7069,\n\t\"email\": 7792,\n\t\"backside\": 5258,\n\t\"among\": 804,\n\t\"socialism\": 25200,\n\t\"和\": 14902,\n\t\"AMERICAS\": 22027,\n\t\"215\": 26018,\n\t\"anglo\": 27627,\n\t\"runflats\": 29739,\n\t\"lens\": 15510,\n\t\"1689\": 4369,\n\t\"commonplace\": 8305,\n\t\"analogy\": 11155,\n\t\"Future\": 1952,\n\t\"deadly\": 7785,\n\t\"manage\": 3015,\n\t\"happen\": 7638,\n\t\"Speaker’s\": 14105,\n\t\"creates\": 10819,\n\t\"clamps\": 26833,\n\t\"Jawaharlal\": 14000,\n\t\"5.87\": 26015,\n\t\"Earth's\": 24825,\n\t\"Sage\": 22048,\n\t\"Guess\": 6441,\n\t\"menus\": 32404,\n\t\"Northwestern\": 13326,\n\t\"Visitors'\": 16573,\n\t\"confine\": 7240,\n\t\"obsess\": 15727,\n\t\"purchased\": 16444,\n\t\"Floo\": 32227,\n\t\"usurp\": 30372,\n\t\"reliability\": 1343,\n\t\"atrophied\": 28003,\n\t\"BK\": 28668,\n\t\"beating\": 11039,\n\t\"gate\": 15733,\n\t\"fairly\": 17150,\n\t\"Highly\": 13811,\n\t\"Russian\": 3678,\n\t\"'Akkab\": 18525,\n\t\"distresses\": 25636,\n\t\"rudeness\": 28951,\n\t\"conquerors\": 31024,\n\t\"poach\": 13943,\n\t\"Navtej\": 7285,\n\t\"watered\": 9895,\n\t\"Lamonica\": 19455,\n\t\"deepening\": 13868,\n\t\"forestry\": 25048,\n\t\"national-level\": 31429,\n\t\"Vaisseau\": 11427,\n\t\"simply\": 1834,\n\t\"skydiving\": 18180,\n\t\"trams\": 16979,\n\t\"Hellada\": 28177,\n\t\"MYTHS\": 18657,\n\t\"Demante\": 3922,\n\t\"filed\": 7496,\n\t\"lump\": 7956,\n\t\"Visualisations\": 24598,\n\t\"Huver\": 23877,\n\t\"Statistical\": 13555,\n\t\"Africa\": 1978,\n\t\"Barstool\": 5226,\n\t\"wel\": 26207,\n\t\"cart\": 18171,\n\t\"Skype\": 7795,\n\t\"Rosalee\": 21760,\n\t\"Myanmar\": 12159,\n\t\"resounding\": 25238,\n\t\"qualitative\": 1622,\n\t\"shut\": 7738,\n\t\"needy\": 17997,\n\t\"Works\": 11572,\n\t\"topographic\": 15307,\n\t\"+852\": 20922,\n\t\"Unlike\": 11304,\n\t\"04:41\": 23206,\n\t\"Studies\": 2663,\n\t\"dip\": 28440,\n\t\"presumably\": 29458,\n\t\"electricity\": 2117,\n\t\"roadways\": 16552,\n\t\"5000\": 4758,\n\t\"evened\": 28328,\n\t\"incandescent\": 2162,\n\t\"bodies\": 1453,\n\t\"handsome\": 4669,\n\t\"ingested\": 10299,\n\t\"discovery\": 8747,\n\t\"squeaky\": 27205,\n\t\"EDU's\": 31524,\n\t\"quitter\": 14403,\n\t\"charities\": 10787,\n\t\"internship\": 10258,\n\t\"U.S.A\": 21555,\n\t\"audiences\": 315,\n\t\"Swift\": 19241,\n\t\"society's\": 3450,\n\t\"by\": 207,\n\t\"invention\": 7947,\n\t\"broaden\": 650,\n\t\"Stop\": 7758,\n\t\"colleague\": 8017,\n\t\"Gratification\": 15208,\n\t\"spool\": 30476,\n\t\"STAY\": 29274,\n\t\"Usage\": 29307,\n\t\"friendly\": 2223,\n\t\"mixer\": 17873,\n\t\"uncommon\": 13672,\n\t\"axis\": 15608,\n\t\"GOP\": 20059,\n\t\"#analysis\": 7660,\n\t\"overheated\": 31134,\n\t\"Upon\": 2018,\n\t\"source\": 2118,\n\t\"Most\": 482,\n\t\"Bearded\": 27734,\n\t\"fullness\": 14078,\n\t\"cm\": 17791,\n\t\"129\": 28202,\n\t\"loathing\": 17998,\n\t\"Claude\": 24585,\n\t\"religiously\": 25740,\n\t\"patronage\": 27101,\n\t\"Ranong\": 19594,\n\t\"Copan\": 15389,\n\t\"(c)\": 2459,\n\t\"Data\": 3822,\n\t\"x3-9890\": 22996,\n\t\"gerbil\": 27677,\n\t\"talks\": 10394,\n\t\"berth\": 30813,\n\t\"donors\": 13279,\n\t\"+44\": 20927,\n\t\"yielding\": 13059,\n\t\"Patriot\": 19382,\n\t\"d'état\": 4541,\n\t\"sir\": 7171,\n\t\"ignorance\": 8744,\n\t\"Visualization\": 24604,\n\t\"gasps\": 27653,\n\t\"revived\": 18646,\n\t\"665\": 24475,\n\t\"Ship\": 32583,\n\t\"label\": 327,\n\t\"Castagnola@ENRON_DEVELOPMENT\": 23208,\n\t\"Bond\": 23523,\n\t\"scrubby\": 9727,\n\t\"DEAL\": 28910,\n\t\"Can\": 7279,\n\t\"automatically\": 610,\n\t\"chunk\": 7919,\n\t\"Pandolfi\": 8006,\n\t\"freed\": 14793,\n\t\"unsure\": 1373,\n\t\"9866\": 20929,\n\t\"deciding\": 25279,\n\t\"Dynegy\": 22745,\n\t\"quid\": 10409,\n\t\"Waugh's\": 4121,\n\t\"tax\": 8395,\n\t\"Usmani\": 19674,\n\t\"Husband\": 32420,\n\t\"sinnel\": 27199,\n\t\"reside\": 3631,\n\t\"NEVER\": 11856,\n\t\"exhibit\": 13267,\n\t\"manned\": 24776,\n\t\"Hopper\": 13258,\n\t\"’ve\": 7721,\n\t\"juggling\": 27503,\n\t\"scandal\": 25902,\n\t\"Offices\": 23874,\n\t\"Jordanian\": 30754,\n\t\"Sabeer\": 24166,\n\t\"Exceptionally\": 15011,\n\t\"flavorful\": 18465,\n\t\"clump\": 31177,\n\t\"Garden\": 22530,\n\t\"Shakspere\": 25342,\n\t\"theatre\": 4236,\n\t\"delicately\": 29096,\n\t\"first\": 298,\n\t\"McDonald\": 17337,\n\t\"robes\": 32040,\n\t\"Chineese\": 28153,\n\t\"outreach\": 12220,\n\t\"creaks\": 32148,\n\t\"Kowloon\": 12470,\n\t\"Hein\": 1981,\n\t\"deep-rooted\": 31345,\n\t\"THEN\": 27872,\n\t\"Sellafield\": 31486,\n\t\"pollutant\": 1321,\n\t\"fit\": 6105,\n\t\"attempted\": 1478,\n\t\"Monde\": 30595,\n\t\"SSA\": 2675,\n\t\"futuristic\": 15078,\n\t\"sooner\": 7717,\n\t\"Share\": 8541,\n\t\"stinging\": 10648,\n\t\"Bend\": 29291,\n\t\"entirely\": 7737,\n\t\"embraced\": 14488,\n\t\"nearer\": 32265,\n\t\"withdrawn\": 12980,\n\t\"Abbotsford\": 22238,\n\t\"ANSI-92\": 30039,\n\t\"headlong\": 9980,\n\t\"Aster\": 27411,\n\t\"pall\": 32832,\n\t\"violence\": 9621,\n\t\"forms\": 359,\n\t\"Hood's\": 25001,\n\t\"disturb\": 26418,\n\t\"compression\": 28019,\n\t\"tortoise\": 30327,\n\t\"hot\": 6397,\n\t\"kind-faced\": 32199,\n\t\"inequalities\": 533,\n\t\"corking\": 28966,\n\t\"158,000\": 15671,\n\t\"345\": 13154,\n\t\"foot\": 4314,\n\t\"capacities\": 13861,\n\t\"Percentiles\": 15643,\n\t\"Kosovo\": 13920,\n\t\"delicacy\": 29996,\n\t\"spawning\": 27853,\n\t\"breeded\": 9437,\n\t\"directionless\": 32784,\n\t\"quinoa's\": 18376,\n\t\"blood-stained\": 32242,\n\t\"refuge\": 13040,\n\t\"abolishing\": 20499,\n\t\"Hedwig's\": 32079,\n\t\"flashlight\": 26730,\n\t\"rigorous\": 443,\n\t\"who’ve\": 10107,\n\t\"lanterns\": 12925,\n\t\"reservations\": 20932,\n\t\"Governor\": 14460,\n\t\"Exotic\": 22694,\n\t\"town’s\": 16545,\n\t\"levitated\": 32669,\n\t\"unreliable\": 1255,\n\t\"tantalising\": 9015,\n\t\"overstay\": 27378,\n\t\"Sehar\": 12243,\n\t\"informative\": 28271,\n\t\"spatial\": 2565,\n\t\"quinoa\": 18354,\n\t\"Jeremiah\": 30649,\n\t\"corruption\": 4343,\n\t\"website\": 1088,\n\t\"assailants\": 9653,\n\t\"shovel\": 21264,\n\t\"Holt\": 4768,\n\t\"giggling\": 8726,\n\t\"sheds\": 24842,\n\t\"937,000\": 17404,\n\t\"Nathaniel\": 25415,\n\t\"collaged\": 10123,\n\t\"scissored\": 32389,\n\t\"hollering\": 24404,\n\t\"gardens\": 12624,\n\t\"Sanctified\": 5910,\n\t\"mobilised\": 24441,\n\t\"2,500\": 11556,\n\t\"boisterous\": 29830,\n\t\"Mountain\": 8807,\n\t\"ascendance\": 14358,\n\t\"kicks\": 8103,\n\t\"Ivan\": 5455,\n\t\"descriptive\": 15199,\n\t\"Information\": 2229,\n\t\"24,000\": 24968,\n\t\"oven\": 17866,\n\t\"booth\": 12609,\n\t\"retiree’s\": 7934,\n\t\"Qtr3\": 30149,\n\t\"Table\": 20934,\n\t\"pension\": 32691,\n\t\"217\": 21079,\n\t\"pimple\": 15702,\n\t\"riddled\": 28717,\n\t\"Surrounded\": 15388,\n\t\"retroactive\": 11561,\n\t\"Moon\": 9361,\n\t\"Latino\": 14361,\n\t\"hike\": 15971,\n\t\"Karzai\": 19638,\n\t\"ended\": 3288,\n\t\"null\": 30062,\n\t\"kibbutznik\": 30779,\n\t\"Sons\": 273,\n\t\"sweeping\": 9942,\n\t\"Representatives\": 14102,\n\t\"Tulsa's\": 17510,\n\t\"Pax\": 13784,\n\t\"Cooper\": 12993,\n\t\"Barno\": 19693,\n\t\"Ugly\": 4088,\n\t\"Democrats\": 12446,\n\t\"11\": 505,\n\t\"Grand\": 3640,\n\t\"predecessors\": 6017,\n\t\"forgive\": 11567,\n\t\"Hydrogen\": 10230,\n\t\";)\": 24240,\n\t\"intolerance\": 4364,\n\t\"Spa\": 27509,\n\t\"Mohawk\": 22300,\n\t\"fluids\": 3281,\n\t\"garment\": 32787,\n\t\"Usenet\": 24334,\n\t\"cited\": 7618,\n\t\"grocerys\": 27601,\n\t\"Burroughs\": 12018,\n\t\"1890\": 16384,\n\t\"Epic\": 5273,\n\t\"unbearable\": 25309,\n\t\"Mails\": 25325,\n\t\"Jemaah\": 20724,\n\t\"Bengal\": 19586,\n\t\"Percell,\": 22903,\n\t\"anxieties\": 14182,\n\t\"Rem\": 4553,\n\t\"Atlantic\": 13901,\n\t\"existent\": 25713,\n\t\"=(\": 26301,\n\t\"Governor's\": 31929,\n\t\"noir\": 4126,\n\t\"enhancing\": 11637,\n\t\"handkerchief\": 9876,\n\t\"Bernoullis\": 3161,\n\t\"Mesa\": 17134,\n\t\"ALWAYS\": 21466,\n\t\"future\": 1966,\n\t\"parental\": 26546,\n\t\"faithless\": 31284,\n\t\"parameters\": 2550,\n\t\"invest\": 8511,\n\t\"LV\": 10978,\n\t\"subsidiary\": 24364,\n\t\"active\": 2581,\n\t\"Ferjani\": 13141,\n\t\"Shaikh\": 18468,\n\t\"CRA\": 552,\n\t\"i-\": 6114,\n\t\"appy\": 26194,\n\t\"co-ownership\": 7979,\n\t\"5th\": 20634,\n\t\"Tina\": 10985,\n\t\"gated\": 24293,\n\t\"Nacional\": 963,\n\t\"post-modern\": 13411,\n\t\"beckons\": 14028,\n\t\"Shahar\": 30610,\n\t\"Again\": 8438,\n\t\"Bradley\": 7546,\n\t\"Divine\": 10148,\n\t\"three\": 524,\n\t\"there'd\": 32820,\n\t\"helping\": 4387,\n\t\"voicing\": 18844,\n\t\"Libby\": 25959,\n\t\"gtee\": 23228,\n\t\"24\": 1396,\n\t\"sonnet\": 1086,\n\t\"2023\": 12953,\n\t\"Last\": 4732,\n\t\"disc\": 20601,\n\t\"Gon\": 6415,\n\t\"reward\": 11066,\n\t\"Carroll\": 9801,\n\t\"bestseller\": 10381,\n\t\"duplicity\": 22780,\n\t\"CDT\": 22970,\n\t\"furthering\": 14086,\n\t\"prejudices\": 11216,\n\t\"shrinking\": 32164,\n\t\"17\": 510,\n\t\"comment\": 3059,\n\t\"expecting\": 5849,\n\t\"hobby\": 10331,\n\t\"vowels\": 18116,\n\t\"Shamanism\": 20219,\n\t\"Box\": 21821,\n\t\"sorted\": 29339,\n\t\"vitalized\": 13855,\n\t\"athletes\": 10866,\n\t\"Chief\": 7218,\n\t\"concluding\": 19432,\n\t\"Fabio's\": 20166,\n\t\"Written\": 32223,\n\t\"concentration\": 7787,\n\t\"Visualizations\": 24594,\n\t\"80\": 10378,\n\t\"frankly\": 7302,\n\t\"pace\": 9952,\n\t\"Arthritis\": 24055,\n\t\"dozen\": 7700,\n\t\"u.k\": 26305,\n\t\"spay\": 29401,\n\t\"h\": 25730,\n\t\"Haas\": 22445,\n\t\"Spend\": 24602,\n\t\"Creativity\": 20011,\n\t\"Italy's\": 13358,\n\t\"runway\": 17156,\n\t\"Overpriced\": 28598,\n\t\"Sanders\": 23760,\n\t\"stipes\": 27791,\n\t\"mid-July\": 23522,\n\t\"Organization\": 8052,\n\t\"swallow\": 18017,\n\t\"silver\": 10989,\n\t\"gravitational\": 15543,\n\t\"binding\": 9857,\n\t\"Ladakh\": 19120,\n\t\"prompting\": 12939,\n\t\"Resource\": 23439,\n\t\"Shiraz\": 16220,\n\t\"Collaboration\": 2425,\n\t\"possible\": 467,\n\t\"WHO\": 11851,\n\t\"yea\": 27290,\n\t\"Taylors\": 22202,\n\t\"Gossip\": 30731,\n\t\"Landgraf\": 11380,\n\t\"----\": 21350,\n\t\"midterms\": 25900,\n\t\"persecution\": 3140,\n\t\"scam\": 27026,\n\t\"ideal\": 7976,\n\t\"mangers\": 29530,\n\t\"Egypt\": 5930,\n\t\"seasoned\": 27861,\n\t\"unorthodox\": 10661,\n\t\"Brook\": 3273,\n\t\"Yeo\": 13031,\n\t\"08/17/2000\": 22103,\n\t\"hugs\": 27950,\n\t\"http://www.petsathome.com/shop/combi-1-dwarf-hamster-cage-by-ferplast-15986\": 26488,\n\t\"Mongolian\": 28878,\n\t\"person\": 6590,\n\t\"reservoir\": 23401,\n\t\"Costs\": 23484,\n\t\".:\": 24906,\n\t\"Editor\": 30196,\n\t\"non-crumbly\": 27858,\n\t\"letting\": 6897,\n\t\"leader\": 3355,\n\t\"CONTACT\": 24757,\n\t\"glad\": 6234,\n\t\"Loch\": 23388,\n\t\"brainer\": 28344,\n\t\"$\": 5216,\n\t\"filtered\": 15022,\n\t\"bemused\": 31415,\n\t\"plenty\": 16548,\n\t\"job\": 7138,\n\t\"abuse\": 11668,\n\t\"spadework\": 20876,\n\t\"Peter's\": 30264,\n\t\"1810\": 23873,\n\t\"simplest\": 18330,\n\t\"milestone\": 10768,\n\t\"Cafasso's\": 16600,\n\t\"Higuchi\": 4598,\n\t\"rowing\": 32526,\n\t\"advisers\": 23705,\n\t\"functioning\": 1583,\n\t\"obligation\": 19218,\n\t\"Shop\": 28059,\n\t\"Duct\": 28824,\n\t\"attract\": 914,\n\t\"_report.xml\": 30125,\n\t\"Pian\": 3495,\n\t\"Tajik\": 19720,\n\t\"12:01\": 23543,\n\t\"street\": 8987,\n\t\"vastness\": 24614,\n\t\"ymsgr:sendIM?mayursha&__Hi+Mayur...\": 25329,\n\t\"handcuffed\": 12206,\n\t\"swapped\": 13630,\n\t\"Somebody\": 13528,\n\t\"chasers\": 18307,\n\t\"Child's\": 4704,\n\t\"PGT\": 21305,\n\t\"distort\": 15619,\n\t\"liquidation\": 22326,\n\t\"crumples\": 8833,\n\t\"???\": 21784,\n\t\"capabilities\": 8370,\n\t\"movie\": 5753,\n\t\"MUCK\": 11937,\n\t\"detected\": 25575,\n\t\"rhinoceros\": 32034,\n\t\"calculation\": 15692,\n\t\"Tanker\": 25776,\n\t\"crawl\": 17001,\n\t\"omnipotent\": 6650,\n\t\"torrents\": 8922,\n\t\"grade\": 9546,\n\t\"MUD\": 24246,\n\t\"119th\": 30397,\n\t\"legitimacy\": 1347,\n\t\"pleaded\": 5976,\n\t\"SPRING\": 11861,\n\t\"inspiration\": 15253,\n\t\"Hypnosis\": 17812,\n\t\"Sincerely\": 11676,\n\t\"disadvantages\": 10777,\n\t\"profilers\": 20673,\n\t\"lb.\": 21750,\n\t\"infield\": 30508,\n\t\"lends\": 15282,\n\t\"Tåsinge\": 17233,\n\t\"times\": 1371,\n\t\"geologist\": 4231,\n\t\"terrifying\": 19891,\n\t\"Walters\": 21508,\n\t\"Haim\": 20347,\n\t\"NCAA\": 4849,\n\t\"ERCOT\": 22870,\n\t\"1860s\": 17064,\n\t\"telephone\": 23835,\n\t\"accountant\": 29870,\n\t\"Hafijj\": 17145,\n\t\"01:09:32\": 23951,\n\t\"Ten\": 7030,\n\t\"Phone\": 21415,\n\t\"apron\": 27638,\n\t\"municipality\": 13978,\n\t\"suburban\": 16388,\n\t\"foster\": 27458,\n\t\"06:02\": 24506,\n\t\"pots\": 31561,\n\t\"Czechoslovakia\": 10430,\n\t\"origin\": 4270,\n\t\"strategies\": 596,\n\t\"Chatnam\": 16253,\n\t\"Eelam\": 19004,\n\t\"creams\": 26968,\n\t\"superb\": 10898,\n\t\"stategy\": 20992,\n\t\"debit\": 29031,\n\t\"Leno\": 13661,\n\t\"urgently\": 14383,\n\t\"industries\": 15060,\n\t\"dmetcalfe@cullenanddykman.com\": 21493,\n\t\"macadamia\": 17899,\n\t\"Exocets\": 25802,\n\t\"Nelson\": 14598,\n\t\"profitable\": 3609,\n\t\"notably\": 3941,\n\t\"Apa\": 5992,\n\t\"NO\": 19476,\n\t\"Alena\": 21972,\n\t\"Suzanne\": 28276,\n\t\"lieutenant\": 4355,\n\t\"horizontal\": 2632,\n\t\"pro-Zionist\": 18961,\n\t\"willed\": 31828,\n\t\"remodelling\": 17583,\n\t\"centimetre\": 24128,\n\t\"Magazine\": 10533,\n\t\"snowy\": 9703,\n\t\"zoo\": 21249,\n\t\"percentile\": 15636,\n\t\"promise\": 8410,\n\t\"vanishing\": 30891,\n\t\"Mozilla\": 12774,\n\t\"exclusive\": 11101,\n\t\"345-9945\": 21416,\n\t\"chloride\": 27895,\n\t\"Shot\": 18413,\n\t\"Kensington\": 31570,\n\t\"simplicity\": 10967,\n\t\"endemics\": 17186,\n\t\"souls\": 19974,\n\t\"yummy\": 29327,\n\t\"Riders\": 17509,\n\t\"reflected\": 830,\n\t\"buckled\": 9350,\n\t\"cinnamon\": 15888,\n\t\"literary\": 4658,\n\t\"welcoming\": 27276,\n\t\"facilities\": 7605,\n\t\"Ware\": 8236,\n\t\"awake\": 8601,\n\t\"Senate's\": 9301,\n\t\"armholes\": 8612,\n\t\"fascinates\": 15434,\n\t\"Admiral\": 17473,\n\t\"Fourth\": 7359,\n\t\"competence\": 14654,\n\t\"crest\": 9004,\n\t\"FIRST\": 12062,\n\t\"Bertrand\": 3375,\n\t\"Manchester\": 17522,\n\t\"575\": 22249,\n\t\"Parama\": 24099,\n\t\"lead\": 371,\n\t\"preserve\": 14245,\n\t\"sang\": 9007,\n\t\"Marbles's\": 5271,\n\t\"they’re\": 7814,\n\t\"activities\": 1599,\n\t\"plain\": 9818,\n\t\"kits\": 12656,\n\t\"All\": 890,\n\t\"Resilience\": 15216,\n\t\"100,000,000,000\": 24371,\n\t\"banners\": 20456,\n\t\"asceticism\": 32855,\n\t\"disposition\": 32492,\n\t\"Nuria_R_Ibarra@calpx.com\": 23814,\n\t\"Cause\": 6434,\n\t\"columns\": 7701,\n\t\"sensory\": 7752,\n\t\"pupils\": 16833,\n\t\"leg\": 10725,\n\t\"thugs\": 19353,\n\t\"beds\": 8936,\n\t\"Maya’s\": 15383,\n\t\"rabbi\": 14367,\n\t\"selectively\": 18144,\n\t\"Mapplethorpe\": 13394,\n\t\"article\": 2251,\n\t\"Length\": 26063,\n\t\"containing\": 2179,\n\t\"Episcopal\": 13237,\n\t\"successor\": 5912,\n\t\"obedience\": 5945,\n\t\"vodka\": 10516,\n\t\"economy\": 754,\n\t\"correspond\": 21677,\n\t\"Laughing\": 27982,\n\t\"sought\": 7401,\n\t\"barcodes\": 29308,\n\t\"designers'\": 30009,\n\t\"washing\": 4618,\n\t\"worries\": 24802,\n\t\"publications\": 1328,\n\t\"creations\": 2974,\n\t\"Maldives\": 14206,\n\t\"800.713.8600\": 23326,\n\t\"reconvened\": 14745,\n\t\"specks\": 31097,\n\t\"boiling\": 32579,\n\t\"categorization\": 3075,\n\t\"Wooh\": 16236,\n\t\"banishes\": 7449,\n\t\"fade\": 32684,\n\t\"picks\": 6488,\n\t\"Olympic\": 8405,\n\t\"Leslie\": 22877,\n\t\"afar\": 9450,\n\t\"<<\": 21063,\n\t\"stage\": 299,\n\t\"republic\": 24358,\n\t\"occasion\": 11058,\n\t\"schoolchildren\": 17368,\n\t\"guacamole\": 28489,\n\t\"levers\": 9940,\n\t\"#pathos\": 7824,\n\t\"collection\": 95,\n\t\"Residential\": 7184,\n\t\"carafe\": 32403,\n\t\"commissions\": 11417,\n\t\"innovation\": 7445,\n\t\"rediscover\": 14419,\n\t\"pjɛʁ\": 3503,\n\t\"compensate\": 17651,\n\t\"Roadhouse\": 29397,\n\t\"Revised\": 21032,\n\t\"briefcase\": 32791,\n\t\"pens\": 30483,\n\t\"Shires\": 6420,\n\t\"strolled\": 31201,\n\t\"lifestyles\": 15269,\n\t\"value\": 1915,\n\t\"biologically\": 17039,\n\t\"see\": 247,\n\t\"Seleznov\": 23087,\n\t\"edges\": 4008,\n\t\"Yannick\": 13098,\n\t\"CEC\": 22792,\n\t\"toothache\": 28254,\n\t\"Weekly\": 11149,\n\t\"Drink\": 10191,\n\t\"envelop\": 25886,\n\t\"mayor\": 7652,\n\t\"Megapixel\": 26223,\n\t\"Karachi\": 20743,\n\t\"She's\": 6125,\n\t\"08:22\": 23791,\n\t\"inconsiderable\": 32835,\n\t\"insisting\": 32329,\n\t\"holiday\": 16784,\n\t\"94\": 4653,\n\t\"carbs\": 16170,\n\t\"to-\": 6871,\n\t\"Derivatives\": 22517,\n\t\"Comex\": 19583,\n\t\"aging\": 2207,\n\t\"Chasers\": 18296,\n\t\"imposition\": 15467,\n\t\"heater\": 26712,\n\t\"Asset\": 29521,\n\t\"colossal\": 31089,\n\t\"unravel\": 32788,\n\t\"Earls\": 32897,\n\t\"rarely\": 1864,\n\t\"Enemy's\": 9240,\n\t\"peanutjak...@usa.com\": 24337,\n\t\"mormon\": 26454,\n\t\"semester\": 15528,\n\t\"Rise\": 21877,\n\t\"1)\": 10806,\n\t\"ache\": 32038,\n\t\"MfM\": 25371,\n\t\"god’s\": 10188,\n\t\"hooligans\": 14326,\n\t\"twenties\": 11019,\n\t\"Higher\": 19180,\n\t\"Glasgow\": 29636,\n\t\"vampires\": 9574,\n\t\"struck\": 6195,\n\t\"Galante\": 16644,\n\t\"subterfuge\": 20182,\n\t\"WOW\": 28419,\n\t\"Angelic\": 15908,\n\t\"pinkish\": 32185,\n\t\"imports\": 31527,\n\t\"inflation\": 14409,\n\t\"parade\": 12618,\n\t\"1950s\": 3454,\n\t\"Designed\": 19473,\n\t\"01:39:56\": 22919,\n\t\"Rocca\": 19117,\n\t\"weeks\": 1647,\n\t\"unprecedented\": 11213,\n\t\"sprays\": 15063,\n\t\"Nagin\": 24418,\n\t\"drum\": 8963,\n\t\"pacifically\": 30920,\n\t\"week\": 2855,\n\t\"satisfy\": 1211,\n\t\"expands\": 8114,\n\t\"void\": 20098,\n\t\"tutor\": 32839,\n\t\"noons\": 9198,\n\t\"rot\": 19954,\n\t\"guider\": 6895,\n\t\"Prom\": 11735,\n\t\"esimien@nisource.com\": 21928,\n\t\"scriptural\": 24690,\n\t\"curious\": 4748,\n\t\"creeping\": 9965,\n\t\"Cleveland\": 8563,\n\t\"Qaeda's\": 20625,\n\t\"Reports\": 12950,\n\t\"cactus\": 26368,\n\t\"fist\": 9652,\n\t\"fresh-faced\": 32463,\n\t\"Money\": 6132,\n\t\"s.hernandez@udc.es\": 2244,\n\t\"ensign\": 31121,\n\t\"point\": 1519,\n\t\"make\": 590,\n\t\"2009\": 1580,\n\t\"Global\": 12063,\n\t\"exploitation\": 2359,\n\t\"empire\": 9210,\n\t\"rescue\": 12186,\n\t\"inversion\": 20126,\n\t\"types\": 1161,\n\t\"http://www.playatmcd.com/en-us/Main/Gameboard\": 26341,\n\t\"Luxembourg\": 11435,\n\t\"thing\": 6359,\n\t\"EVEN\": 11834,\n\t\"AUD\": 22216,\n\t\"lent\": 6424,\n\t\"narcotic\": 9369,\n\t\"281-735-5919\": 23630,\n\t\"higher\": 1312,\n\t\"sighs\": 8872,\n\t\"faulty\": 4429,\n\t\"ashamed\": 9143,\n\t\"Gorman\": 14309,\n\t\"sanctions\": 24568,\n\t\"superiors\": 17342,\n\t\"Muttering\": 32276,\n\t\"jets\": 19204,\n\t\"gras\": 29490,\n\t\"UFOs\": 25022,\n\t\"supposedly\": 19897,\n\t\"research\": 174,\n\t\"REALLY\": 21518,\n\t\"THX\": 28868,\n\t\"McGrath\": 16006,\n\t\"Khan’s\": 19739,\n\t\"Sao\": 23195,\n\t\"mailing\": 12711,\n\t\"zoom\": 26219,\n\t\"Rae\": 6091,\n\t\"redeems\": 31029,\n\t\"Plantation\": 23240,\n\t\"Bob\": 14454,\n\t\"tuning\": 23549,\n\t\"Equine\": 26111,\n\t\"DO\": 11832,\n\t\"gulf\": 20079,\n\t\"relay\": 25931,\n\t\"firepower\": 27714,\n\t\"Thoroughly\": 28162,\n\t\"inspirational\": 9648,\n\t\"18:20\": 22629,\n\t\"large\": 416,\n\t\"1968\": 3705,\n\t\"amputated\": 32386,\n\t\"<UNK>\": 1,\n\t\"Class\": 4867,\n\t\"god\": 7006,\n\t\"concertina\": 30991,\n\t\"struggle\": 14044,\n\t\"transferable\": 23528,\n\t\"quadruplets\": 32717,\n\t\"Erebus\": 30944,\n\t\"Arakan\": 19510,\n\t\"affordable\": 14541,\n\t\"databases\": 23126,\n\t\"Makkai\": 21040,\n\t\"“\": 690,\n\t\"GOING\": 21521,\n\t\"Nowadays\": 2089,\n\t\"RTE\": 2687,\n\t\"elder\": 6004,\n\t\"Strasbourg\": 3196,\n\t\"Renton\": 28933,\n\t\"thinset\": 29559,\n\t\"Pimentel\": 4915,\n\t\"I’d\": 7715,\n\t\"Orissa\": 19588,\n\t\"eliminating\": 20909,\n\t\"Almost\": 15454,\n\t\"Juego\": 25454,\n\t\"Liz\": 22289,\n\t\"sorry\": 6811,\n\t\"clutches\": 32085,\n\t\"Yung\": 12443,\n\t\"mailto:amy.cornell@compaq.com\": 22140,\n\t\"conviction\": 19429,\n\t\"jade\": 15329,\n\t\"PDT\": 20270,\n\t\"optionality\": 21218,\n\t\"leaked\": 12977,\n\t\"1.877.999.3223\": 22813,\n\t\"Salsa\": 29220,\n\t\"Rodents\": 26569,\n\t\"watches\": 30834,\n\t\"pouch\": 6027,\n\t\"Shake\": 18062,\n\t\"earlier\": 2384,\n\t\"Remain\": 18184,\n\t\"extradite\": 27664,\n\t\"Stridon\": 4973,\n\t\"corns\": 26893,\n\t\"byproduct\": 10495,\n\t\"Constantine\": 17533,\n\t\"35\": 15113,\n\t\"groups\": 840,\n\t\"Liberia\": 19886,\n\t\"Hue\": 27721,\n\t\"http://i.imgur.com/S2MD2.jpg\": 27164,\n\t\"waitress\": 29156,\n\t\"Kit\": 30169,\n\t\"attitude\": 15256,\n\t\"fuck\": 13618,\n\t\"necks\": 30589,\n\t\"victory\": 12458,\n\t\"companies\": 1324,\n\t\"reminded\": 10020,\n\t\"lackluster\": 19573,\n\t\"probable\": 25749,\n\t\"DISCOURSE\": 14912,\n\t\"typo\": 27516,\n\t\"1/4\": 17862,\n\t\"topic\": 10242,\n\t\"barred\": 8415,\n\t\"buzzwords\": 13383,\n\t\"glorious\": 7680,\n\t\"promising\": 4684,\n\t\"nonconventional\": 20680,\n\t\"Lower\": 32187,\n\t\"Wat\": 17389,\n\t\"McNeally\": 21545,\n\t\"Instant\": 17950,\n\t\"Colonial\": 16973,\n\t\"alluded\": 6874,\n\t\"sci\": 5797,\n\t\"podcasts\": 2971,\n\t\"Draco\": 32082,\n\t\"performance\": 902,\n\t\"Bonacci\": 5472,\n\t\"191\": 13884,\n\t\"Crockett\": 14790,\n\t\"Parker\": 32607,\n\t\"au\": 5402,\n\t\"Wire\": 20766,\n\t\"frowning\": 31082,\n\t\"Henley\": 25640,\n\t\"Coeur\": 29334,\n\t\"Jerry's\": 21845,\n\t\"roughest\": 6066,\n\t\"bathe\": 18018,\n\t\"aggregate\": 548,\n\t\"raging\": 30859,\n\t\"alarmed\": 17943,\n\t\"sole\": 21495,\n\t\"disability\": 10869,\n\t\"NASA's\": 24492,\n\t\"leered\": 32288,\n\t\"aerated\": 10279,\n\t\"signage\": 28928,\n\t\"UNLIMITED\": 28521,\n\t\"TA\": 28795,\n\t\"family\": 3113,\n\t\"sink\": 7695,\n\t\"hadn’t\": 10174,\n\t\"scientology\": 12729,\n\t\"sour\": 18458,\n\t\"tail\": 2730,\n\t\"east\": 10413,\n\t\"BTA\": 27014,\n\t\"reasonable\": 1313,\n\t\"thouhgt\": 29553,\n\t\"Omnimax\": 16426,\n\t\"program's\": 24780,\n\t\"Cowpland\": 24156,\n\t\"9th\": 4954,\n\t\"Frontiers\": 1377,\n\t\"upright\": 15531,\n\t\"percentiles\": 15631,\n\t\"trains\": 20432,\n\t\"Asher\": 25663,\n\t\"Equality\": 24651,\n\t\"deadlines\": 15738,\n\t\"2004\": 1609,\n\t\"Arabic\": 4466,\n\t\"kicking\": 10463,\n\t\"yards\": 21510,\n\t\"HOAX\": 24449,\n\t\"divert\": 25506,\n\t\"dipping\": 9061,\n\t\"fidgeted\": 31272,\n\t\"ireland\": 26307,\n\t\"ONLINE\": 22484,\n\t\"04:13\": 21724,\n\t\"wagging\": 27702,\n\t\"prevalent\": 2997,\n\t\"freedoms\": 13873,\n\t\"Sat\": 16608,\n\t\"connections\": 6885,\n\t\"Walsingham\": 25362,\n\t\"Jackson\": 11016,\n\t\"Stony\": 8534,\n\t\"chart\": 10733,\n\t\"flunking\": 14799,\n\t\"Clifford\": 14824,\n\t\"emperor\": 18357,\n\t\"directors\": 5488,\n\t\"feelings\": 8754,\n\t\"clip\": 15823,\n\t\"toes\": 24053,\n\t\"amazes\": 28681,\n\t\"somewhere\": 6076,\n\t\"nigiri\": 29590,\n\t\"Hiring\": 10717,\n\t\"weirder\": 20096,\n\t\"Addressing\": 30605,\n\t\"Southwest\": 17031,\n\t\"has\": 128,\n\t\"wind\": 2650,\n\t\"dilemmas\": 20501,\n\t\"cozy\": 21980,\n\t\"pre-killed\": 27365,\n\t\"Capote\": 13342,\n\t\"repay\": 11555,\n\t\"VIP\": 12198,\n\t\"Centilli\": 22722,\n\t\"02:19\": 23840,\n\t\"valuable\": 566,\n\t\"Ed.\": 10950,\n\t\"herself\": 5290,\n\t\"F.R.S.\": 25391,\n\t\"thematically\": 27910,\n\t\"buys\": 28617,\n\t\"fireplace\": 15559,\n\t\"1750\": 3222,\n\t\"faithful\": 12051,\n\t\"Onion\": 11098,\n\t\"Natalie\": 24415,\n\t\"hauls\": 21241,\n\t\"Funny\": 20025,\n\t\"aunt\": 25228,\n\t\"balsa\": 26839,\n\t\"Doris\": 6680,\n\t\"bullshit\": 23904,\n\t\"figuring\": 6446,\n\t\"Mexican\": 6033,\n\t\"income\": 7837,\n\t\"es\": 18068,\n\t\"Amsterdam\": 16757,\n\t\"Ground\": 11052,\n\t\"Tough\": 23917,\n\t\"grown\": 8235,\n\t\"Estonian\": 12095,\n\t\"VI\": 14970,\n\t\"hostel\": 3901,\n\t\"essence\": 15250,\n\t\"hence\": 541,\n\t\"iis\": 22961,\n\t\"sincerely\": 14471,\n\t\"mathematically\": 7963,\n\t\"Asbestos\": 25958,\n\t\"Wide\": 614,\n\t\"Kong's\": 12461,\n\t\"satay\": 28482,\n\t\"easter\": 27201,\n\t\"aid\": 14265,\n\t\"Turkey\": 11242,\n\t\"criminologist\": 18052,\n\t\"1979\": 5358,\n\t\"liquor\": 16612,\n\t\"Nick's\": 28711,\n\t\"monumental\": 3436,\n\t\"contingencies\": 22651,\n\t\"presents\": 894,\n\t\"McCutchan\": 13288,\n\t\"implants\": 8384,\n\t\"phased\": 26050,\n\t\"posts\": 7704,\n\t\"Chambermaid\": 5509,\n\t\"81P/Wild\": 11301,\n\t\"struggles\": 5879,\n\t\"spotlights\": 32757,\n\t\"Heidenreich\": 264,\n\t\"overtopped\": 25557,\n\t\"César\": 5373,\n\t\"booked\": 13078,\n\t\"na\": 6048,\n\t\"grow\": 8123,\n\t\"partners\": 8512,\n\t\"worn\": 9526,\n\t\"lack\": 417,\n\t\"listed\": 12129,\n\t\"Baffin\": 24107,\n\t\"Trails\": 23576,\n\t\"amendmnets\": 22232,\n\t\"hanged\": 31158,\n\t\"12:21\": 21354,\n\t\"chimneys\": 9054,\n\t\"bravest\": 30767,\n\t\"preserving\": 8021,\n\t\"garage\": 8874,\n\t\"Caves\": 30750,\n\t\"challenging\": 2981,\n\t\"one's\": 6484,\n\t\"Mayko\": 26507,\n\t\"pretend\": 14978,\n\t\"reprioritised\": 22603,\n\t\"Hewlett\": 14576,\n\t\"experienced\": 11045,\n\t\"A-\": 11940,\n\t\"fearsome\": 9064,\n\t\"Ani\": 18470,\n\t\"awesome\": 14373,\n\t\"desparate\": 24516,\n\t\"downgrading\": 25926,\n\t\"laborers\": 17367,\n\t\"OLYMPUS\": 26202,\n\t\"Surgeon\": 28126,\n\t\"Hasht\": 16836,\n\t\"Label\": 18149,\n\t\"boom\": 16862,\n\t\"Nook\": 23949,\n\t\"variants\": 3770,\n\t\"left\": 3443,\n\t\"Lifetime\": 3670,\n\t\"operated\": 5193,\n\t\"coordinate\": 2309,\n\t\"liberals\": 7839,\n\t\"508\": 11500,\n\t\"Cheng\": 12390,\n\t\"Voters\": 12681,\n\t\"readers\": 7671,\n\t\"Fascist\": 24739,\n\t\"Alastair\": 24422,\n\t\"Break\": 27927,\n\t\"gutters\": 8949,\n\t\"Michel\": 26603,\n\t\"insolence\": 31265,\n\t\"geographic\": 2260,\n\t\"continuing\": 13910,\n\t\"faced\": 12086,\n\t\"macadam\": 30357,\n\t\"Newspaper\": 25977,\n\t\"Fabiani\": 1553,\n\t\"529999204044\": 17029,\n\t\"frothing\": 19919,\n\t\"Balard\": 26608,\n\t\"garbage\": 29572,\n\t\"kippers\": 32425,\n\t\"ambition\": 4674,\n\t\"omission\": 20383,\n\t\"analyst\": 20616,\n\t\"13279\": 20274,\n\t\"StoolLaLa\": 5228,\n\t\"Globe\": 12699,\n\t\"communicated\": 13628,\n\t\"normality\": 18955,\n\t\"Dems\": 19211,\n\t\"Genesis\": 11321,\n\t\"committment\": 22679,\n\t\"uninteresting\": 25069,\n\t\"Thats\": 29727,\n\t\"Atomic\": 18654,\n\t\"Simons\": 1552,\n\t\"probation\": 24304,\n\t\"Simon\": 3266,\n\t\"Diane\": 23105,\n\t\"28\": 1484,\n\t\"traitress\": 25569,\n\t\"WANT\": 28401,\n\t\"Sanders'\": 23811,\n\t\"No\": 6146,\n\t\"ITALIAN\": 32483,\n\t\"Split\": 28516,\n\t\"snap\": 13440,\n\t\"Appendix\": 2390,\n\t\"imagine\": 10034,\n\t\"approval\": 8179,\n\t\"ramp\": 19168,\n\t\"sledge\": 32640,\n\t\"mullah\": 25737,\n\t\"W3C\": 30103,\n\t\"NEXT\": 11896,\n\t\"Pawtucket\": 4921,\n\t\"thumbs\": 15999,\n\t\"unalterable\": 31260,\n\t\"soldier\": 4330,\n\t\"ENJOYABLE\": 29662,\n\t\"Together\": 3279,\n\t\"virtual\": 11387,\n\t\"Sustainable\": 14481,\n\t\"☏\": 17259,\n\t\"Netherlands\": 3134,\n\t\"Paramus\": 16504,\n\t\"racking\": 19215,\n\t\">>>\": 26619,\n\t\"hoax\": 24517,\n\t\"customer\": 10530,\n\t\"heel\": 24094,\n\t\"PEREGRINO\": 25409,\n\t\"Conclusions\": 2365,\n\t\"subsidies\": 26057,\n\t\"Limits\": 29522,\n\t\"Simien\": 21913,\n\t\"Voldemort\": 32059,\n\t\"Gebo\": 5526,\n\t\"yielded\": 20555,\n\t\"distorted\": 15584,\n\t\"over-prescriptive\": 31554,\n\t\"emphasized\": 14250,\n\t\"contentious\": 18771,\n\t\"fund\": 5888,\n\t\"Uh\": 6090,\n\t\"embrace\": 15158,\n\t\"intuitive\": 25311,\n\t\"Mouez\": 13133,\n\t\"imperialism\": 15466,\n\t\"frosts\": 27836,\n\t\"daughters\": 4207,\n\t\"umbilical\": 25744,\n\t\"neuro\": 15855,\n\t\"Breaking\": 1130,\n\t\"Wayne's\": 12564,\n\t\"decisive\": 6585,\n\t\"motions\": 3240,\n\t\"Region\": 26313,\n\t\"Langeland\": 17234,\n\t\"sporadically\": 29363,\n\t\"pyjama\": 31566,\n\t\"wrongful\": 32931,\n\t\"Technlogy\": 12080,\n\t\"Finally\": 653,\n\t\"moniker\": 16393,\n\t\"invovled\": 20031,\n\t\"Ruy\": 25460,\n\t\"Resign\": 14390,\n\t\"atrocities\": 19127,\n\t\"spelling\": 18111,\n\t\"dignitaries\": 12199,\n\t\"Pirates\": 4783,\n\t\"WHEN\": 11935,\n\t\"EST\": 18819,\n\t\"Linna\": 25227,\n\t\"cge\": 26764,\n\t\"pre-made\": 29501,\n\t\"Art.\": 11769,\n\t\"Bieber\": 16140,\n\t\"reminds\": 18491,\n\t\"Mormons\": 20239,\n\t\"structural\": 5687,\n\t\"linguists\": 3431,\n\t\"wire\": 17876,\n\t\"perks\": 2163,\n\t\"14:00\": 17024,\n\t\"bakery\": 27332,\n\t\"Dzida\": 28179,\n\t\"seventeen\": 6536,\n\t\"pilots\": 9266,\n\t\"skills\": 1536,\n\t\"militants\": 18614,\n\t\"Eden\": 13116,\n\t\"Ayman\": 18740,\n\t\"trademarked\": 24175,\n\t\"Nigel\": 28475,\n\t\"mischief\": 23649,\n\t\"Application\": 701,\n\t\"bitch\": 15755,\n\t\"allow\": 2173,\n\t\"removing\": 15073,\n\t\"caverns\": 30645,\n\t\"feast\": 5008,\n\t\"oneself\": 8570,\n\t\"eremites\": 5159,\n\t\"MBA\": 20944,\n\t\"naturalist\": 15160,\n\t\"Kyle\": 13139,\n\t\"Sevil\": 20955,\n\t\".04\": 21813,\n\t\"Baghdadis\": 18567,\n\t\"fanfics\": 2972,\n\t\"scenario\": 903,\n\t\"Mormonism\": 19989,\n\t\"swish\": 9709,\n\t\"Devil’s\": 26992,\n\t\"65\": 21017,\n\t\"SpreadingSantorum.com\": 10546,\n\t\"Flag\": 9616,\n\t\"pilgrams\": 13171,\n\t\"Toast\": 18373,\n\t\"dungarees\": 12028,\n\t\"veterans\": 3606,\n\t\"headspace\": 16153,\n\t\"yelled\": 29084,\n\t\"Professional\": 4863,\n\t\"picnickers\": 9806,\n\t\"Anthrax\": 20574,\n\t\"105\": 23889,\n\t\"Ham\": 28363,\n\t\"bag\": 6940,\n\t\"polishing\": 3878,\n\t\"Geri's\": 6123,\n\t\"10:07\": 23188,\n\t\"lovin'\": 28721,\n\t\"So\": 6135,\n\t\"lanky\": 17755,\n\t\"Guest\": 4187,\n\t\"51,516\": 12487,\n\t\"850\": 25041,\n\t\"REAAAALLY\": 28738,\n\t\"renal\": 27068,\n\t\"inwardness\": 30373,\n\t\"Holderness\": 29255,\n\t\"7.2\": 15019,\n\t\"compassionate\": 27655,\n\t\"06:20\": 22368,\n\t\"despite\": 1382,\n\t\"indicators\": 9941,\n\t\"trace\": 9962,\n\t\"huge\": 6474,\n\t\"depiction\": 25210,\n\t\"interesting\": 1961,\n\t\"inch\": 7379,\n\t\"Piaget\": 15030,\n\t\"maam\": 21455,\n\t\"resign\": 14410,\n\t\"teenager\": 12809,\n\t\"ISS\": 24479,\n\t\"beguiled\": 31326,\n\t\"Hence\": 5662,\n\t\"movies\": 4766,\n\t\"equating\": 18862,\n\t\"prankster\": 17911,\n\t\"inhabitants\": 15274,\n\t\"psychiatrists\": 26080,\n\t\"Gu'ud\": 19327,\n\t\"Richmond\": 28645,\n\t\"inclined\": 6892,\n\t\"foreigner\": 19139,\n\t\"bat\": 18328,\n\t\"collected\": 683,\n\t\"epistemologies\": 2538,\n\t\"Rick\": 10488,\n\t\"Rumsfeld\": 25974,\n\t\"hammered\": 32157,\n\t\"ANYWAY\": 28759,\n\t\"philosophy\": 3220,\n\t\"Sufaat\": 20646,\n\t\"1691\": 21090,\n\t\"حديد\": 4468,\n\t\"alchemical\": 20286,\n\t\"ROMs\": 26161,\n\t\"Valentin\": 10109,\n\t\"Plant\": 17733,\n\t\"buttery\": 15924,\n\t\"filler\": 28961,\n\t\"cooperating\": 13905,\n\t\"Boom\": 13794,\n\t\"pictures\": 1996,\n\t\"phobia\": 29215,\n\t\"Kermit\": 5335,\n\t\"Bush's\": 18846,\n\t\"detrimental\": 10302,\n\t\"go's\": 15941,\n\t\"Elite\": 29412,\n\t\"horizons\": 25299,\n\t\"10:39:03\": 21597,\n\t\"represents\": 2976,\n\t\"received\": 3648,\n\t\"Eurostar\": 22195,\n\t\"leisurely\": 11407,\n\t\"LLC\": 21101,\n\t\"tonic\": 17804,\n\t\"eis\": 26967,\n\t\"Winging\": 27884,\n\t\"scent\": 15936,\n\t\"bush\": 15979,\n\t\"Schadenfreude\": 13723,\n\t\"Aguilar\": 13084,\n\t\"Fedayeen\": 18572,\n\t\"reformer\": 6609,\n\t\"Wonderland\": 11273,\n\t\"Murders\": 19963,\n\t\"Philosophy\": 10372,\n\t\"inconvenienced\": 32950,\n\t\"effected\": 24892,\n\t\"preoccupied\": 30432,\n\t\"snitches\": 18335,\n\t\"LAST\": 29143,\n\t\"Presidents\": 14452,\n\t\"angels\": 5794,\n\t\"par\": 28713,\n\t\"traditional\": 3400,\n\t\"Hyatt\": 21562,\n\t\"BENEFIT\": 24531,\n\t\"Murfreesboro\": 29733,\n\t\"occupation\": 7627,\n\t\"unfortunately\": 2905,\n\t\"sarcastic\": 9909,\n\t\"repition\": 27541,\n\t\"revolution\": 4372,\n\t\"charmed\": 31068,\n\t\"reread\": 15260,\n\t\"man-about-town\": 31733,\n\t\"heavens\": 10145,\n\t\"suspension\": 14737,\n\t\"sheriff's\": 12338,\n\t\"million\": 2124,\n\t\"lawless\": 20512,\n\t\"ar\": 26365,\n\t\"circulation\": 8108,\n\t\"x34703\": 22664,\n\t\"smacked\": 13416,\n\t\"benches\": 32937,\n\t\"McFarlane\": 1608,\n\t\"substitutes\": 8039,\n\t\"Landfall\": 19512,\n\t\"snapping\": 32527,\n\t\"CAROLS\": 2664,\n\t\"chilly\": 31927,\n\t\"Sarah\": 20942,\n\t\"OpenAI\": 13691,\n\t\"7:40\": 11754,\n\t\"pregnancy\": 16150,\n\t\"sobriquet\": 25418,\n\t\"parking\": 9556,\n\t\"Qanooni\": 19723,\n\t\"boyfriend\": 5304,\n\t\"Xbox\": 8561,\n\t\"unruly\": 20062,\n\t\"Cherokee\": 15419,\n\t\"853-7557\": 23074,\n\t\"peak\": 1299,\n\t\"fucking\": 13608,\n\t\"Distances\": 25206,\n\t\"mountains\": 13951,\n\t\"admitting\": 29034,\n\t\"exist\": 1000,\n\t\"wikis\": 10825,\n\t\"peddle\": 28897,\n\t\"Unhunh\": 6922,\n\t\"bestowed\": 32727,\n\t\"strip\": 7461,\n\t\"fighter\": 9271,\n\t\"unprofessionalism\": 29856,\n\t\"VEGAN\": 24907,\n\t\"Minkin\": 23268,\n\t\"Maryam\": 20074,\n\t\"750\": 19628,\n\t\"melded\": 19829,\n\t\"1300\": 29054,\n\t\"10.0\": 23608,\n\t\"fraction\": 7106,\n\t\"Votaw\": 21378,\n\t\"gut\": 29204,\n\t\"downloading\": 28264,\n\t\"miniature\": 26826,\n\t\"TEN\": 18670,\n\t\"5.8\": 27886,\n\t\"verb\": 1145,\n\t\"lucky\": 6759,\n\t\"bills\": 8628,\n\t\"Sacred\": 18965,\n\t\"autonomy\": 8392,\n\t\"dinners\": 27931,\n\t\"thanks\": 6481,\n\t\"recognised\": 5001,\n\t\"tasted\": 17988,\n\t\"lorry\": 32394,\n\t\"appropriation\": 20287,\n\t\"passcode\": 21696,\n\t\"moll\": 5400,\n\t\"stink\": 8656,\n\t\"attacking\": 13095,\n\t\"RefLibPaths\": 30197,\n\t\"brimming\": 25314,\n\t\"Guys\": 15985,\n\t\"mm\": 22609,\n\t\"Officer\": 20838,\n\t\"03:20\": 23554,\n\t\"Day\": 4733,\n\t\"Pediatricians\": 1268,\n\t\"palette\": 16222,\n\t\"aa\": 29409,\n\t\"companion\": 2958,\n\t\"desirer\": 32665,\n\t\"wolf's\": 25032,\n\t\"hydrated\": 14814,\n\t\"delivering\": 20240,\n\t\"mitigated\": 21325,\n\t\"ADSL\": 26520,\n\t\"reckoning\": 14116,\n\t\"hippie\": 23902,\n\t\"killed\": 12248,\n\t\"Wagner's\": 32614,\n\t\"catholic\": 13189,\n\t\"tweet\": 12200,\n\t\"channels\": 10881,\n\t\"tens\": 17069,\n\t\"Road\": 15966,\n\t\"nitrogen\": 18029,\n\t\"cross-functional\": 23856,\n\t\"creativity\": 7457,\n\t\"hesitated\": 15497,\n\t\"seize\": 25254,\n\t\"Knudsen\": 23141,\n\t\"inconvenient\": 25283,\n\t\"PUCT\": 22852,\n\t\"apparatus\": 19839,\n\t\"Lopez's\": 25449,\n\t\"idols\": 9415,\n\t\"exhibition\": 13285,\n\t\"rambunctious\": 26858,\n\t\"seriousness\": 27630,\n\t\"Lemell\": 23552,\n\t\"Maize1_1017013\": 1848,\n\t\"Galois\": 3833,\n\t\"inhaling\": 13710,\n\t\"raffles\": 12597,\n\t\"Large\": 13697,\n\t\"hazards\": 26972,\n\t\"exceeds\": 28682,\n\t\"dirty\": 9758,\n\t\"Emminence\": 19269,\n\t\"assure\": 13209,\n\t\"77\": 16572,\n\t\"detectors\": 11373,\n\t\"Books\": 18131,\n\t\"shorthanded\": 30835,\n\t\"AUCTION\": 24532,\n\t\"01/26/2001\": 23383,\n\t\"blindfolds\": 26078,\n\t\"Discussing\": 12168,\n\t\"Agreements\": 23104,\n\t\"return\": 716,\n\t\"solstices\": 15320,\n\t\"percentage\": 8078,\n\t\"sweeper\": 25649,\n\t\"garnered\": 4114,\n\t\"Chrome\": 12777,\n\t\"artful\": 32655,\n\t\"word's\": 1720,\n\t\"Moloch\": 30627,\n\t\"Nixon\": 7850,\n\t\"Columbia\": 15992,\n\t\"Germany\": 4316,\n\t\"starring\": 5494,\n\t\"HICKENLOOPER\": 14356,\n\t\"5.37\": 21927,\n\t\"Adopts\": 23288,\n\t\"transition\": 14288,\n\t\"longitude\": 2330,\n\t\"doubtless\": 9226,\n\t\"Read\": 10755,\n\t\"vote\": 8144,\n\t\"poem\": 10957,\n\t\"structures\": 10619,\n\t\"surfaced\": 19052,\n\t\"1940s\": 3488,\n\t\"Cyprus\": 30800,\n\t\"Aren’t\": 9887,\n\t\"ld2d-#69334-1.DOC\": 22441,\n\t\"dunes\": 17182,\n\t\"use\": 998,\n\t\"swaying\": 9428,\n\t\"whenever\": 7075,\n\t\"orderd\": 29161,\n\t\"illness\": 3212,\n\t\"catagory\": 29417,\n\t\"aquavit\": 30794,\n\t\"Bernie\": 31516,\n\t\"CRACKDOWN\": 19976,\n\t\"713-793-2000\": 22145,\n\t\"Clyst\": 4245,\n\t\"Loved\": 28061,\n\t\"accompanied\": 5119,\n\t\"schedulers\": 23655,\n\t\"cleverly\": 19758,\n\t\"armchair\": 30277,\n\t\"jewelry\": 6162,\n\t\"Buy\": 16590,\n\t\"CA's\": 23270,\n\t\"Quaid\": 5773,\n\t\"collar\": 9847,\n\t\"invoiced\": 21908,\n\t\"withhold\": 23691,\n\t\"Nonna's\": 16120,\n\t\"Leisure\": 16413,\n\t\"testify\": 19406,\n\t\"Barger’s\": 15503,\n\t\"Marquis\": 3571,\n\t\"Greyhound\": 17121,\n\t\"Baluchistan\": 18763,\n\t\"WMDs\": 26106,\n\t\"Peach\": 5336,\n\t\"mailto:galen.torneby@nepco.com\": 23185,\n\t\"troubled\": 8745,\n\t\"Dranove\": 10388,\n\t\"Laidlaw\": 21731,\n\t\"memory's\": 15866,\n\t\"Whatever\": 3987,\n\t\"Resources\": 14498,\n\t\"commitee\": 22677,\n\t\"recognises\": 31432,\n\t\"copper\": 18042,\n\t\"federation\": 5917,\n\t\"curse\": 10170,\n\t\"paralegal\": 22058,\n\t\"doc\": 23225,\n\t\"heresy\": 5145,\n\t\"Mashhad\": 16763,\n\t\"hiatus\": 23520,\n\t\"Sunshine\": 23973,\n\t\"Walking\": 3002,\n\t\"fairest\": 11537,\n\t\"Elliott\": 5855,\n\t\"RVS\": 17424,\n\t\"assert\": 5977,\n\t\"menacingly\": 32398,\n\t\"radiative\": 2684,\n\t\"Shortstop\": 4772,\n\t\"Curr\": 21664,\n\t\"solved\": 13980,\n\t\"literal\": 13542,\n\t\"strikingly\": 19252,\n\t\"enovate\": 21942,\n\t\"Lisbon\": 27527,\n\t\"attendants\": 30560,\n\t\"Onward\": 20331,\n\t\"Rance@ENRON\": 23743,\n\t\"Intel\": 24173,\n\t\"dismissing\": 19504,\n\t\"assuage\": 29067,\n\t\"multiethnic\": 15370,\n\t\"Amen\": 21357,\n\t\"raise\": 9601,\n\t\"curly\": 29288,\n\t\"Gyanendra\": 19503,\n\t\"denounced\": 30729,\n\t\"joking\": 14820,\n\t\"mournful\": 30894,\n\t\"rumpled\": 30409,\n\t\"cabinets\": 29101,\n\t\"incentive\": 1464,\n\t\"accusing\": 20882,\n\t\"Colorado\": 13446,\n\t\"Awards\": 4097,\n\t\"Ranja\": 14496,\n\t\"uncover\": 20158,\n\t\"socio\": 20212,\n\t\"happens\": 885,\n\t\"predisposition\": 20887,\n\t\"Past\": 351,\n\t\"borritos\": 29164,\n\t\"Clem\": 11123,\n\t\"Greek\": 3372,\n\t\"retired\": 3813,\n\t\"lazy\": 10171,\n\t\"Picture\": 14809,\n\t\"redefined\": 15119,\n\t\"asians\": 27258,\n\t\"inspecting\": 30336,\n\t\"loyalty\": 14672,\n\t\"rally\": 19500,\n\t\"consumed\": 13385,\n\t\"prominent\": 3111,\n\t\"Crabs\": 17225,\n\t\"stamp\": 10836,\n\t\"chair\": 7346,\n\t\"Leonard\": 20826,\n\t\"Kiev\": 4352,\n\t\"ballads\": 32530,\n\t\"known\": 1210,\n\t\"whither\": 9390,\n\t\"repressed\": 25660,\n\t\"concerto\": 31655,\n\t\"sister\": 2506,\n\t\"activism\": 3847,\n\t\"IQ\": 10744,\n\t\"suppose\": 6662,\n\t\"dragged\": 18640,\n\t\"nail\": 16596,\n\t\"second\": 684,\n\t\"define\": 442,\n\t\"bugle\": 11041,\n\t\"murderous\": 20408,\n\t\"dialogue\": 14211,\n\t\"hypocrisy\": 20131,\n\t\"calf\": 27176,\n\t\"screwing\": 30823,\n\t\"Clutching\": 32278,\n\t\"hood\": 29744,\n\t\"Rook\": 9800,\n\t\"goodness\": 14345,\n\t\"usally\": 29795,\n\t\"fairness\": 11583,\n\t\"sharing\": 5212,\n\t\"Claudio\": 13225,\n\t\"dismembered\": 20395,\n\t\"Sheltered\": 31604,\n\t\"Martinis\": 32703,\n\t\"overlooked\": 10867,\n\t\"8.00\": 10527,\n\t\"travelguides\": 27405,\n\t\"closing-down\": 31485,\n\t\"rearrange\": 31684,\n\t\"gesturing\": 32695,\n\t\"hug\": 11090,\n\t\"https://www.nytimes.com/2017/04/16/technology/inside-the-hotel-industrys-plan-to-combat-airbnb.html\": 15138,\n\t\"BEE\": 11864,\n\t\"Cargo\": 32538,\n\t\"Schema\": 30114,\n\t\"motionless\": 9672,\n\t\"Ras\": 31895,\n\t\"Acupuncture\": 29510,\n\t\"Grounds\": 16326,\n\t\"obese\": 8625,\n\t\"lagged\": 16176,\n\t\"incompetence\": 19908,\n\t\"alerted\": 22709,\n\t\"Setoff\": 23513,\n\t\"readability\": 30139,\n\t\"protested\": 18928,\n\t\"hoss\": 22788,\n\t\"create\": 3334,\n\t\"classical\": 1106,\n\t\"utmost\": 30447,\n\t\"smacks\": 25051,\n\t\"arbitration\": 23742,\n\t\"alternative\": 1895,\n\t\"UAAR\": 13253,\n\t\"he’s\": 9767,\n\t\"1994\": 3814,\n\t\"scallop\": 29589,\n\t\"connotation\": 18115,\n\t\"DEMANDS\": 11938,\n\t\"Hambali's\": 20676,\n\t\"cared\": 26804,\n\t\"reinforcements\": 9685,\n\t\"communication\": 6882,\n\t\"bind\": 14090,\n\t\"Cafes\": 27330,\n\t\"provisions\": 11570,\n\t\"flannel\": 31074,\n\t\"exceed\": 25159,\n\t\"Scarne\": 10322,\n\t\"Cairo's\": 20866,\n\t\"Japanese\": 1734,\n\t\"Wildwood\": 28837,\n\t\"OER\": 14502,\n\t\"quoted\": 10555,\n\t\"software\": 1032,\n\t\"container\": 6256,\n\t\"Thorell\": 1576,\n\t\"Sit\": 7133,\n\t\"eat-e\": 31744,\n\t\"Merrist\": 26118,\n\t\"Kennedy\": 11140,\n\t\"Alberta\": 22355,\n\t\"Auster\": 30262,\n\t\"greasy\": 29751,\n\t\"equips\": 20463,\n\t\"unlikely\": 2001,\n\t\"puffs\": 29841,\n\t\"ev\": 11485,\n\t\"giraffe\": 26263,\n\t\"uprush\": 31594,\n\t\"spent\": 3651,\n\t\"Retiring\": 5960,\n\t\"represented\": 14247,\n\t\"balances\": 22585,\n\t\"airwaves\": 7925,\n\t\"Moor\": 30442,\n\t\"distortions\": 11296,\n\t\"dimensions\": 2453,\n\t\"jury\": 5529,\n\t\"Elinor\": 729,\n\t\"independent\": 4249,\n\t\"yowled\": 32410,\n\t\"Mr.\": 5270,\n\t\"diversification\": 20973,\n\t\"philipinos\": 27259,\n\t\"98011\": 23180,\n\t\"Islamiah\": 20725,\n\t\"RFI\": 2716,\n\t\"a.k.a\": 22085,\n\t\"Removes\": 24068,\n\t\"SERVICES\": 23438,\n\t\"garrison\": 12590,\n\t\"smuggled\": 19877,\n\t\"TRUST\": 29272,\n\t\"mankind\": 4002,\n\t\"concludes\": 31535,\n\t\"recieve\": 28141,\n\t\"Noble\": 22102,\n\t\"Lost\": 18216,\n\t\"necessities\": 24673,\n\t\"beach\": 9984,\n\t\"3/4\": 17844,\n\t\"realy\": 29608,\n\t\"villages\": 16999,\n\t\"apple\": 15827,\n\t\"Brings\": 9362,\n\t\"G.\": 6168,\n\t\"Could\": 6098,\n\t\"08:27:46\": 20269,\n\t\"irrigation\": 17068,\n\t\"dictate\": 17340,\n\t\"Levitt\": 21763,\n\t\"Michigan's\": 25010,\n\t\"inexhaustible\": 30233,\n\t\"et\": 252,\n\t\"Monday's\": 21012,\n\t\"Fang\": 3429,\n\t\"onesie\": 28634,\n\t\"embarrassed\": 18002,\n\t\"invitaion\": 23189,\n\t\"Limerick\": 26146,\n\t\"Soviet\": 10397,\n\t\"leaky\": 691,\n\t\"clarify\": 7490,\n\t\"oppression\": 10018,\n\t\"wordlessly\": 14853,\n\t\"Ranasinghe\": 19055,\n\t\"death-knell\": 31451,\n\t\"Beautifully\": 29063,\n\t\"harbor\": 17157,\n\t\"Davidson\": 6961,\n\t\"USAMRIID\": 20660,\n\t\"cooperate\": 14085,\n\t\"Whilst\": 27666,\n\t\"microcosm\": 3007,\n\t\"bullseye\": 25778,\n\t\"risking\": 8457,\n\t\"Charleston\": 3582,\n\t\"plot\": 3028,\n\t\"mistruth\": 14337,\n\t\"failure\": 7392,\n\t\"steppers\": 6925,\n\t\"MIT\": 10389,\n\t\"alcoholic\": 13578,\n\t\"explains\": 7209,\n\t\"fruit\": 8241,\n\t\"Moriaty\": 2532,\n\t\"litigation\": 23781,\n\t\"prognosis\": 24529,\n\t\"his\": 272,\n\t\"pouring\": 4004,\n\t\"Aafia\": 20741,\n\t\"gaze\": 21863,\n\t\"husbands\": 21509,\n\t\"toasting\": 30601,\n\t\"faltered\": 18826,\n\t\"monthly\": 11690,\n\t\"kosher-beef\": 30574,\n\t\"Apache\": 17052,\n\t\"businesses\": 8094,\n\t\"header\": 13090,\n\t\":-)\": 21266,\n\t\"Oberst\": 4423,\n\t\"Not\": 6143,\n\t\"non-realism\": 14939,\n\t\"monitor\": 2563,\n\t\"inspired\": 2839,\n\t\"insanity\": 6875,\n\t\".2\": 18036,\n\t\"Bailey\": 13,\n\t\"footpaths\": 30358,\n\t\"altered\": 9258,\n\t\"continuously\": 13547,\n\t\"strict\": 4305,\n\t\"begged\": 30609,\n\t\"humid\": 9371,\n\t\"greyness\": 9946,\n\t\"Canadians\": 16447,\n\t\"Should\": 6989,\n\t\"overplayed\": 19354,\n\t\"13\": 303,\n\t\"distinguish\": 1204,\n\t\"committments\": 22981,\n\t\"overtures\": 18903,\n\t\"loudspeaker\": 12869,\n\t\"22301\": 24764,\n\t\"wud\": 26220,\n\t\"although\": 1190,\n\t\"misinform\": 29183,\n\t\"MIND\": 28493,\n\t\"seamen\": 30969,\n\t\"fusions\": 29071,\n\t\"experiance\": 11790,\n\t\"hopping\": 2940,\n\t\"buried\": 4017,\n\t\"quoting\": 12839,\n\t\"hillside\": 31214,\n\t\"pencils\": 16043,\n\t\"Campaign\": 19824,\n\t\"Matthew\": 4077,\n\t\"flattered\": 32680,\n\t\"Indexed\": 21441,\n\t\"watching\": 6361,\n\t\"Disatisfied\": 29315,\n\t\"dark-panelled\": 32888,\n\t\"Poitiers\": 5111,\n\t\"branch\": 4276,\n\t\"shoe\": 6390,\n\t\"dismissed\": 8615,\n\t\"junkie\": 28986,\n\t\"Kenyatta\": 31805,\n\t\"http://www.antifraudcentre-centreantifraude.ca/english/home-eng.html\": 27037,\n\t\"dolomite\": 30632,\n\t\"Gentle\": 28260,\n\t\"re-routed\": 19903,\n\t\"vital\": 11580,\n\t\"christchurch\": 26964,\n\t\"drowned\": 31104,\n\t\"Romans\": 17525,\n\t\"Podcast\": 5307,\n\t\"origination\": 26518,\n\t\"Facebook\": 12195,\n\t\"unused\": 15121,\n\t\"head\": 4581,\n\t\"author\": 1016,\n\t\"Bridget's\": 25343,\n\t\"Calcutta\": 26437,\n\t\"SEATS\": 29664,\n\t\"arrogantly\": 25639,\n\t\"horsetail\": 15935,\n\t\"Polo\": 32699,\n\t\"tables\": 13425,\n\t\"caveat\": 2897,\n\t\"confluence\": 20284,\n\t\"Inca\": 15420,\n\t\"Rcommended\": 28267,\n\t\"Detrick\": 20692,\n\t\"ANDRILL\": 10602,\n\t\"Trek\": 13704,\n\t\"#ethos\": 7823,\n\t\"tavern\": 26698,\n\t\"7\": 481,\n\t\"slumbered\": 32374,\n\t\"artificially\": 2263,\n\t\"intersected\": 32756,\n\t\"outnumbered\": 14781,\n\t\"investigations\": 3264,\n\t\"merger\": 20868,\n\t\"Macrocosm\": 24048,\n\t\"GUESS\": 24914,\n\t\"kenneth.lay@enron.com\": 21796,\n\t\"Ye$\": 26742,\n\t\"exhausted-looking\": 31665,\n\t\"Shenzhou\": 24784,\n\t\"Deutsched\": 22064,\n\t\"domains\": 2274,\n\t\"Navarro\": 1070,\n\t\"Misha\": 5858,\n\t\"heck\": 15730,\n\t\"Israelis\": 18872,\n\t\"last\": 3903,\n\t\"cantons\": 31674,\n\t\"parents\": 1525,\n\t\"turned\": 3367,\n\t\"weaker\": 14666,\n\t\"every\": 1855,\n\t\"Washington\": 3512,\n\t\"invoked\": 19183,\n\t\"consulates\": 19641,\n\t\"Aloha\": 7552,\n\t\"Sadly\": 31392,\n\t\"ladies\": 14552,\n\t\"1928\": 3424,\n\t\"Being\": 14921,\n\t\"seal\": 18060,\n\t\"Ongoing\": 14568,\n\t\"likely\": 1279,\n\t\"Brumbley\": 24962,\n\t\"SA\": 8537,\n\t\"Pan\": 12431,\n\t\"diver\": 18243,\n\t\"BRADLEY\": 22832,\n\t\"renew\": 16468,\n\t\"hanks\": 9148,\n\t\"Ave.\": 17453,\n\t\"crude\": 23402,\n\t\"MORE\": 26430,\n\t\"Address\": 14003,\n\t\"elves\": 6438,\n\t\"Nat\": 13363,\n\t\"System\": 2266,\n\t\"Mohib\": 12075,\n\t\"ear\": 25957,\n\t\"constitution\": 869,\n\t\"spend\": 3839,\n\t\"Kenya\": 14485,\n\t\"Armed\": 18910,\n\t\"21,000\": 19486,\n\t\"K\": 20958,\n\t\"creepy\": 20262,\n\t\"dunny\": 32473,\n\t\"pipe\": 3287,\n\t\"Hold\": 15916,\n\t\"impressionist\": 21150,\n\t\"elites\": 827,\n\t\"Total\": 23604,\n\t\"Abourezk\": 11593,\n\t\"Section\": 21943,\n\t\"ultraefficient\": 30806,\n\t\"ornaments\": 15332,\n\t\"Purpose\": 25427,\n\t\"seething\": 25755,\n\t\"comedians\": 27504,\n\t\"Monaco\": 22185,\n\t\"Let’s\": 2478,\n\t\"toll\": 12272,\n\t\"authority\": 1251,\n\t\"Lol\": 27651,\n\t\"feeds\": 6681,\n\t\"promoting\": 792,\n\t\"chains\": 8105,\n\t\"died\": 3490,\n\t\"appears\": 1379,\n\t\"GRECO\": 25366,\n\t\"objection\": 27635,\n\t\"tariff\": 22389,\n\t\"com\": 28197,\n\t\"Giannini\": 13224,\n\t\"Εὐσέβιος\": 4963,\n\t\"arrives\": 13061,\n\t\"curbing\": 19683,\n\t\"virus\": 13801,\n\t\"indiscriminately\": 15513,\n\t\"retrial\": 20811,\n\t\"contraction\": 25143,\n\t\"cleric\": 18473,\n\t\"co.\": 29179,\n\t\"Plateau\": 17409,\n\t\"may\": 1066,\n\t\"potash\": 30807,\n\t\"permanently\": 5450,\n\t\"hijackers\": 20723,\n\t\"Automotive\": 29803,\n\t\"testosterone\": 13611,\n\t\"excursions\": 30370,\n\t\"launcher\": 26176,\n\t\"tanks\": 19134,\n\t\"bet\": 6327,\n\t\"greys\": 9043,\n\t\"impede\": 11610,\n\t\"appendices\": 22419,\n\t\"WARWICK\": 29949,\n\t\"co-starred\": 4221,\n\t\"credited\": 10373,\n\t\"superficial\": 5029,\n\t\"founder's\": 24155,\n\t\"sulky\": 31933,\n\t\"applied\": 654,\n\t\"home\": 2088,\n\t\"second-hand\": 32328,\n\t\"fiction\": 4627,\n\t\"efficient\": 616,\n\t\"Andrea\": 23203,\n\t\"hairdresser\": 29097,\n\t\"freelance\": 13798,\n\t\"unsweetened\": 17857,\n\t\"shopwindow\": 31659,\n\t\"prefers\": 6622,\n\t\"knows\": 9637,\n\t\"mid-20s\": 19860,\n\t\"1967\": 18901,\n\t\"Affairs\": 22825,\n\t\"picketing\": 23160,\n\t\"4.0\": 7670,\n\t\"minor\": 3530,\n\t\"Yak\": 15429,\n\t\"path\": 808,\n\t\"alternations\": 9954,\n\t\"sheik\": 20620,\n\t\"lineatus\": 27852,\n\t\"图\": 14869,\n\t\"scratchy\": 27213,\n\t\"hips\": 30258,\n\t\"overtaking\": 31035,\n\t\"errands\": 15008,\n\t\"Lattice\": 954,\n\t\"Yang\": 3395,\n\t\"Daisy\": 9701,\n\t\"Namibia\": 16487,\n\t\"overrun\": 19544,\n\t\"Andreae\": 10110,\n\t\"Principia\": 3262,\n\t\"Steak\": 20937,\n\t\"native\": 2029,\n\t\"Stage\": 23692,\n\t\"5.10\": 29385,\n\t\"artifacts\": 13300,\n\t\"shown\": 394,\n\t\"5.5\": 26026,\n\t\"livelihoods\": 14538,\n\t\"Sydfynske\": 17200,\n\t\"intractable\": 19033,\n\t\"Nordic\": 23257,\n\t\"Assault\": 12601,\n\t\"slave\": 14696,\n\t\"sniffing\": 27688,\n\t\"these\": 165,\n\t\"Len\": 3792,\n\t\"NX1\": 21281,\n\t\"Characters\": 18096,\n\t\"sneakers\": 16662,\n\t\"instructed\": 20662,\n\t\"Kendrick\": 12313,\n\t\"Irregularities\": 24058,\n\t\"children\": 1571,\n\t\"compounded\": 22636,\n\t\"Priests\": 19951,\n\t\"occur\": 864,\n\t\"screamed\": 11967,\n\t\"Bradford\": 22056,\n\t\"r\": 11489,\n\t\"subpoenas\": 23665,\n\t\"1528\": 25358,\n\t\".udl\": 30054,\n\t\"visits\": 12751,\n\t\"projectlondonmovie.com\": 13759,\n\t\"Ribs\": 28434,\n\t\"attacks\": 12748,\n\t\"I’ll\": 9785,\n\t\"evening\": 6526,\n\t\"Addition\": 27255,\n\t\"sensors\": 13948,\n\t\"30,858\": 26051,\n\t\"Economics\": 698,\n\t\"Assessment\": 25152,\n\t\"Caucus\": 14132,\n\t\"indefensible\": 31946,\n\t\"truths\": 8443,\n\t\"judicial\": 906,\n\t\"beat\": 8962,\n\t\"SPICES\": 27624,\n\t\"Ian\": 4948,\n\t\"whatsoever\": 7365,\n\t\"SE\": 23242,\n\t\"father\": 3162,\n\t\"exclude\": 1901,\n\t\"nobody\": 11209,\n\t\"ron.com\": 22020,\n\t\"any\": 602,\n\t\"slipped\": 8965,\n\t\"genetics\": 27135,\n\t\"targeted\": 14128,\n\t\"Stutenberg\": 2526,\n\t\"functions\": 1457,\n\t\"NASTY\": 28397,\n\t\"vapour\": 8914,\n\t\"craft\": 9358,\n\t\"patriot\": 7943,\n\t\"correctness\": 15176,\n\t\"winner\": 12546,\n\t\"vehemently\": 18927,\n\t\"mistook\": 1294,\n\t\"Heights\": 22531,\n\t\"DG\": 23102,\n\t\"O'clock\": 24147,\n\t\"ATE\": 28564,\n\t\"mary\": 28830,\n\t\"necklace\": 32270,\n\t\"pop...@spinach.eat\": 25723,\n\t\"indentured\": 14692,\n\t\"personaly\": 28180,\n\t\"stationed\": 3674,\n\t\"Bill\": 6666,\n\t\"ABBEY\": 11899,\n\t\"consolidation\": 23495,\n\t\"over\": 277,\n\t\"gloating\": 19378,\n\t\"Masters\": 21840,\n\t\"statutory\": 7223,\n\t\"#health\": 8471,\n\t\"spores\": 10303,\n\t\"feeder\": 27753,\n\t\"Haifa\": 30819,\n\t\"Hariri\": 25823,\n\t\"persuading\": 19688,\n\t\"tactic\": 20440,\n\t\"adoptive\": 14850,\n\t\"Porte\": 2403,\n\t\"patience\": 11197,\n\t\"assassinated\": 18520,\n\t\"thinned\": 2607,\n\t\"politician\": 12481,\n\t\"Mahady\": 14451,\n\t\"child’s\": 7926,\n\t\"tombs\": 30748,\n\t\"insurers\": 23782,\n\t\"Bray\": 31592,\n\t\"Eleanor\": 4211,\n\t\"intend\": 2370,\n\t\"Hawker\": 21275,\n\t\"Maitra\": 19509,\n\t\"KNOWS\": 29773,\n\t\"associations\": 1451,\n\t\"component\": 11625,\n\t\"sensitivity\": 2619,\n\t\"steps\": 7577,\n\t\"575,000\": 15679,\n\t\"touched\": 8435,\n\t\"Prices\": 15668,\n\t\"scatter\": 8134,\n\t\"Alzheimer\": 9518,\n\t\"handiwork\": 9593,\n\t\"Jenna\": 5174,\n\t\"DENISE\": 8262,\n\t\"mandated\": 24687,\n\t\"rebelling\": 3543,\n\t\"remote\": 2592,\n\t\"employers\": 5269,\n\t\"ration\": 19537,\n\t\"415.782.7822\": 23322,\n\t\"darker\": 8736,\n\t\"roughness\": 2642,\n\t\"aquatic\": 4492,\n\t\"helps\": 6377,\n\t\"Haven\": 19861,\n\t\"expropriation\": 892,\n\t\"originate\": 10736,\n\t\"Pop\": 12524,\n\t\"deer\": 10155,\n\t\"wiki\": 10750,\n\t\"spying\": 19745,\n\t\"Beardies\": 26374,\n\t\"distortion\": 15586,\n\t\"ranking\": 12306,\n\t\"agreed\": 2534,\n\t\"suspense\": 6295,\n\t\"row\": 9308,\n\t\"misery\": 25717,\n\t\"Oz\": 27667,\n\t\"Fitzsimons\": 31487,\n\t\"Goodbye\": 8596,\n\t\"freaky\": 20173,\n\t\"dependance\": 13569,\n\t\"Anne\": 13648,\n\t\"becuse\": 27964,\n\t\"exemplified\": 2995,\n\t\"introduction\": 5629,\n\t\"Tarsia\": 25504,\n\t\"scaring\": 23243,\n\t\"Presto\": 22869,\n\t\"They\": 1456,\n\t\"Moment\": 16068,\n\t\"pursed\": 31890,\n\t\"taxpayers'\": 19121,\n\t\"Soviets\": 24822,\n\t\"dialect\": 3386,\n\t\"racket\": 32848,\n\t\"Bending\": 24101,\n\t\"610\": 25349,\n\t\"rides\": 6067,\n\t\"Criminal\": 25997,\n\t\"Phyllis\": 23526,\n\t\"dissertation\": 3361,\n\t\"bow\": 9080,\n\t\"1576\": 25499,\n\t\"workers\": 1301,\n\t\"fumes\": 27301,\n\t\"Author\": 25489,\n\t\"amused\": 19284,\n\t\"forida\": 26269,\n\t\"block\": 12013,\n\t\"unsightly\": 32715,\n\t\"Fran\": 23750,\n\t\"panels\": 26831,\n\t\"Urban\": 16046,\n\t\"Stir\": 17870,\n\t\"Efrem\": 20880,\n\t\"fresco\": 27108,\n\t\"flooding\": 8152,\n\t\"simultaneously\": 1544,\n\t\"metallic\": 10044,\n\t\"reaffirms\": 7431,\n\t\"Current\": 21021,\n\t\"songwriter\": 13343,\n\t\"early\": 1105,\n\t\"begun\": 9345,\n\t\"Frontier\": 17113,\n\t\"Amin\": 12165,\n\t\"golfers\": 28316,\n\t\"santorum\": 10479,\n\t\"veto\": 12371,\n\t\"transmitted\": 15018,\n\t\"Partially\": 23044,\n\t\"warlord\": 19707,\n\t\"towing\": 28822,\n\t\"french\": 28555,\n\t\"bacteriologist\": 20740,\n\t\"Craig\": 11739,\n\t\"dodgy\": 32170,\n\t\"BEEN\": 27478,\n\t\"austere\": 18118,\n\t\"hullo\": 11703,\n\t\"Galway\": 32827,\n\t\"chamber\": 10173,\n\t\"Medicine\": 20728,\n\t\"Thur.\": 22182,\n\t\"Belgians\": 13107,\n\t\"paralyzed\": 18239,\n\t\"shaped\": 3601,\n\t\"Evangelicals\": 26107,\n\t\"aftershocks\": 26960,\n\t\"disagreed\": 30013,\n\t\"confidence-building\": 31353,\n\t\"misrepresentations\": 14162,\n\t\"ubiquitousness\": 8206,\n\t\"reasons\": 1093,\n\t\"USA\": 5613,\n\t\"aspen\": 25055,\n\t\"leaned\": 8548,\n\t\"IQA\": 18337,\n\t\"URSULA\": 22844,\n\t\"Modell's\": 29431,\n\t\"declining\": 7920,\n\t\"invaded\": 20071,\n\t\"extravagant\": 32808,\n\t\"repetitive\": 13571,\n\t\"Skittled\": 18415,\n\t\"Bruna\": 1508,\n\t\"Feel\": 18320,\n\t\"Waitangi\": 12670,\n\t\"Thanx\": 21277,\n\t\"extractive\": 835,\n\t\"St.\": 3206,\n\t\"shoer\": 6410,\n\t\"Tradename\": 23064,\n\t\"micron\": 11336,\n\t\"pamphlet\": 6530,\n\t\"rust\": 16399,\n\t\"hernia\": 24080,\n\t\"inventory\": 8086,\n\t\"Record\": 26091,\n\t\"tested\": 2369,\n\t\"ventures\": 5315,\n\t\"compound\": 3238,\n\t\"drooped\": 32028,\n\t\"UNLESS\": 12318,\n\t\"reiterate\": 22699,\n\t\"budgie\": 26279,\n\t\"races\": 6192,\n\t\"09/11/99\": 23248,\n\t\"worship's\": 25525,\n\t\"olympus\": 26209,\n\t\"GREEN\": 28575,\n\t\"mosquito\": 28039,\n\t\"bacon\": 32236,\n\t\"God\": 5136,\n\t\"regain\": 24362,\n\t\"friends\": 3919,\n\t\"Mango\": 8283,\n\t\"www.standfor.co.nz\": 12660,\n\t\"washed\": 597,\n\t\"calm\": 9405,\n\t\"defectors\": 12307,\n\t\"Evaluations\": 22842,\n\t\"11/7/08\": 28055,\n\t\"unacceptable\": 14240,\n\t\"energy\": 2087,\n\t\"Osage\": 17504,\n\t\"Bruyne's\": 13115,\n\t\"Polk's\": 20235,\n\t\"viewpoints\": 1273,\n\t\"550\": 23871,\n\t\"expose\": 18019,\n\t\"Conservatives\": 31340,\n\t\"raw\": 16925,\n\t\"Reception\": 21785,\n\t\".........\": 19475,\n\t\"receiver\": 26727,\n\t\"sewage\": 28858,\n\t\"archosaur\": 2764,\n\t\"Shrugging\": 30581,\n\t\"thaks\": 28359,\n\t\"responsive\": 14385,\n\t\"covering\": 1075,\n\t\"1981\": 3479,\n\t\"enemy\": 3953,\n\t\"objectively\": 15145,\n\t\"favoring\": 10441,\n\t\"WAITRESS\": 29678,\n\t\"circumcision\": 30523,\n\t\"latter\": 4138,\n\t\"serivce\": 29577,\n\t\"Saturdays\": 16103,\n\t\"92842\": 24952,\n\t\"gross\": 6830,\n\t\"cross-clause\": 1156,\n\t\"2:30\": 12523,\n\t\"throat\": 6549,\n\t\"Theoretical\": 699,\n\t\"magistrate\": 31754,\n\t\"Elimination\": 18665,\n\t\"GREEK\": 11922,\n\t\"surveyed\": 26019,\n\t\"expeditions\": 4370,\n\t\"pregnant\": 16148,\n\t\"dont\": 20230,\n\t\"ld2d-#69377-1.XLS\": 22436,\n\t\"valiant\": 18580,\n\t\"scaling\": 2807,\n\t\":(\": 26252,\n\t\"www.norcalfightingalliance.com\": 28547,\n\t\"few\": 283,\n\t\"UTC\": 29009,\n\t\"harbour\": 16304,\n\t\"Philip\": 20916,\n\t\"Branom\": 21144,\n\t\"neighbourhood\": 18570,\n\t\"widen\": 7985,\n\t\"tragic\": 24725,\n\t\"supervisory\": 31367,\n\t\"convenient\": 16551,\n\t\"Saddamites\": 18602,\n\t\"group's\": 19997,\n\t\"Technologically\": 8253,\n\t\"ingredients\": 10515,\n\t\"Sitara\": 21401,\n\t\"borenste@haas.berkeley.edu\": 22455,\n\t\"Oracle\": 24198,\n\t\"Girls\": 5703,\n\t\"Bruha\": 24308,\n\t\"epic\": 16093,\n\t\"calmest\": 16180,\n\t\"chipped\": 6864,\n\t\"distract\": 8799,\n\t\"Azov\": 4389,\n\t\"interaction\": 190,\n\t\"2100\": 2064,\n\t\"Spacecraft\": 11312,\n\t\"aisle\": 14159,\n\t\"bait\": 15787,\n\t\"foundations\": 16021,\n\t\"Indoor\": 26803,\n\t\"landmines\": 26010,\n\t\"epidemic\": 8489,\n\t\"pool\": 16848,\n\t\"inferiority\": 25665,\n\t\"Wood\": 22853,\n\t\"PPI\": 20906,\n\t\"immutability\": 30972,\n\t\"Chris.Germany@enron.com\": 21532,\n\t\"Atheists\": 13251,\n\t\"obeyed\": 31246,\n\t\"industrialist\": 4524,\n\t\"Suella\": 13017,\n\t\"regard\": 1989,\n\t\"ed\": 19145,\n\t\"acne\": 9587,\n\t\"Croucher\": 13503,\n\t\"briskly\": 30325,\n\t\"Japan's\": 4612,\n\t\"bought\": 6111,\n\t\"non-approved\": 22503,\n\t\"c\": 18109,\n\t\"36.2\": 5259,\n\t\"Bridgeline\": 23094,\n\t\"LISTEN\": 29952,\n\t\"showered\": 30240,\n\t\"ChangeCoordSys\": 2305,\n\t\"reader\": 1170,\n\t\"Bergère\": 5421,\n\t\"PERSON\": 29667,\n\t\"insistent\": 32868,\n\t\"device\": 2333,\n\t\"130\": 11689,\n\t\"1.2\": 15270,\n\t\"Anthropology\": 14830,\n\t\"lemony\": 17712,\n\t\"horn\": 27060,\n\t\"Bladder\": 27065,\n\t\"civilization\": 13849,\n\t\"Lovely\": 16246,\n\t\"baggy\": 17681,\n\t\"knee\": 2752,\n\t\"Koolhaas\": 4554,\n\t\"demonstrated\": 2594,\n\t\"ROWS\": 30051,\n\t\"self-contained\": 30260,\n\t\"Rest\": 18729,\n\t\"1655\": 4317,\n\t\"accents\": 27662,\n\t\"Educational\": 10840,\n\t\"Email\": 18126,\n\t\"hunt\": 20794,\n\t\"She’d\": 8579,\n\t\"Friedman\": 7849,\n\t\"859-7187\": 22014,\n\t\"21st\": 7815,\n\t\"camping\": 17151,\n\t\"Sharayu\": 28308,\n\t\"rate\": 6031,\n\t\"Institutional\": 697,\n\t\"generation's\": 20081,\n\t\"meditate\": 6527,\n\t\"ordering\": 15880,\n\t\"Founded\": 17032,\n\t\"attended\": 3402,\n\t\"Distant\": 942,\n\t\"plaintiffs\": 7535,\n\t\"shoot\": 12625,\n\t\"Component\": 30077,\n\t\"issued\": 1289,\n\t\"Gringotts\": 32295,\n\t\"\\\"\": 1108,\n\t\"compassion\": 28063,\n\t\"ur\": 26211,\n\t\"Absolute\": 28549,\n\t\"Pixar\": 13593,\n\t\"pub\": 20164,\n\t\"rescheduled\": 21007,\n\t\"onerous\": 10979,\n\t\"smail\": 24326,\n\t\"16.2\": 26980,\n\t\"Iguaçu\": 26997,\n\t\"about\": 80,\n\t\"transit\": 11629,\n\t\"Rude\": 6748,\n\t\"abandonment\": 8755,\n\t\"Mandil\": 24586,\n\t\"hung\": 9091,\n\t\"gauzy\": 30923,\n\t\"objects\": 1543,\n\t\"Obama’s\": 10438,\n\t\"migrants\": 12161,\n\t\"past\": 498,\n\t\"measly\": 11774,\n\t\"dangerous\": 7708,\n\t\"parish\": 4297,\n\t\"acquired\": 5027,\n\t\"bankruptcy\": 23635,\n\t\"Ajay\": 27401,\n\t\"stock\": 18379,\n\t\"inviting\": 14478,\n\t\"inner\": 18012,\n\t\"vingt\": 4061,\n\t\"Ebola\": 13838,\n\t\"Unique\": 16311,\n\t\"lodging\": 17141,\n\t\"Taiwanese\": 18832,\n\t\"Seaboard\": 25536,\n\t\"flea\": 29335,\n\t\"Fresh\": 17703,\n\t\"barking\": 32639,\n\t\"incompetent\": 20149,\n\t\"exchanged\": 3586,\n\t\"Luther\": 6519,\n\t\"California's\": 22470,\n\t\"AMERICANS\": 15305,\n\t\"attitudes\": 8494,\n\t\"Graduate\": 22666,\n\t\"vanilla\": 17851,\n\t\"McNamara\": 26947,\n\t\"messy\": 21975,\n\t\"Caracas\": 19374,\n\t\"Undeterred\": 32545,\n\t\"contest\": 3165,\n\t\"esp.\": 29196,\n\t\"1,000\": 7887,\n\t\"Work\": 7903,\n\t\"PS3\": 26778,\n\t\"505-625-8031\": 23584,\n\t\"u\": 3323,\n\t\"13.9\": 21340,\n\t\"envied\": 32519,\n\t\"diversity\": 360,\n\t\"locomotory\": 2733,\n\t\"Hunters\": 30954,\n\t\"Ca-\": 7149,\n\t\"Dando\": 31742,\n\t\"co\": 20198,\n\t\"gant\": 28000,\n\t\"wonderfully\": 20960,\n\t\"mouthed\": 9804,\n\t\"MKM's\": 22773,\n\t\"ones\": 6417,\n\t\"devout\": 20380,\n\t\"unde$tood\": 26753,\n\t\"nonessential\": 20910,\n\t\"pigeons\": 32880,\n\t\"boosted\": 24572,\n\t\"fakes\": 17400,\n\t\"trainer\": 27387,\n\t\"engineering\": 3611,\n\t\"grudge\": 3177,\n\t\"ensures\": 16870,\n\t\"01/19/01\": 21187,\n\t\"Tana.Jones@en\": 22019,\n\t\"copyright\": 7467,\n\t\"expects\": 12921,\n\t\"rs\": 27398,\n\t\"chock\": 16405,\n\t\"devour\": 7986,\n\t\"consulted\": 23714,\n\t\"Episcopalian\": 16542,\n\t\"Friedkin\": 5356,\n\t\"beak\": 17789,\n\t\"http://www.adorama.com/BLCBS.html\": 26538,\n\t\"Cinematic\": 3005,\n\t\"verge\": 5975,\n\t\"Go\": 7855,\n\t\"BPA\": 12472,\n\t\"Winking\": 14818,\n\t\"Ercot\": 22849,\n\t\"IM\": 7791,\n\t\"rental\": 11621,\n\t\"Halliburton\": 24376,\n\t\"notions\": 733,\n\t\"incubating\": 27860,\n\t\"Panera\": 29440,\n\t\"GOT\": 11939,\n\t\"unfold\": 7287,\n\t\"listen\": 9290,\n\t\"restaurants\": 16512,\n\t\"Description\": 21659,\n\t\"holdings\": 23301,\n\t\"admiration\": 9831,\n\t\"mugs\": 31764,\n\t\"technology\": 2321,\n\t\"Spread\": 18138,\n\t\"Especially\": 7761,\n\t\"Aberdeen\": 4446,\n\t\"kept\": 7617,\n\t\"impose\": 17599,\n\t\"Ōtsugomori\": 4731,\n\t\"assigned\": 18275,\n\t\"Kathryn\": 13297,\n\t\"Hoot's\": 22075,\n\t\"Construction\": 3748,\n\t\"colonials\": 3544,\n\t\"alphabet\": 31950,\n\t\"guilds\": 24254,\n\t\"salmon-pink\": 32114,\n\t\"kiosks\": 32883,\n\t\"purchase\": 11649,\n\t\"showing\": 6408,\n\t\"Airbnb’s\": 15115,\n\t\"366\": 5013,\n\t\"envelopes\": 8600,\n\t\"maddening\": 32396,\n\t\"reasoned\": 3084,\n\t\"belong\": 4730,\n\t\"Slower\": 9981,\n\t\"citation\": 5095,\n\t\"Poor\": 6947,\n\t\"evade\": 18318,\n\t\"ancestral\": 5438,\n\t\"counted\": 10291,\n\t\"Frequent\": 27063,\n\t\"ELectronics\": 24177,\n\t\"colder\": 15907,\n\t\"Hafs\": 18619,\n\t\"crazier\": 27806,\n\t\"nose\": 6835,\n\t\"Innovation\": 13970,\n\t\"VICTOR\": 11847,\n\t\"envision\": 22881,\n\t\"gained\": 10549,\n\t\"gates\": 27120,\n\t\"destiny\": 5938,\n\t\"http://www.bullatomsci.org/issues/1993/s93/s93Marples.html\": 18701,\n\t\"predestination\": 6606,\n\t\"fishes\": 27919,\n\t\"stall\": 6781,\n\t\"Saints\": 19987,\n\t\"immigeration\": 27074,\n\t\"--------------------------------------------------\": 26927,\n\t\"establishing\": 3738,\n\t\"indicated\": 2031,\n\t\"scoff\": 25826,\n\t\"jerks\": 29086,\n\t\"player\": 1603,\n\t\"skilled\": 13147,\n\t\"Cayman\": 27494,\n\t\"gimmicky\": 29646,\n\t\"Baron\": 288,\n\t\"drinkers\": 32668,\n\t\"permits\": 1055,\n\t\"Objectives\": 14989,\n\t\"899-4310\": 22012,\n\t\"Ursula\": 22831,\n\t\"broadcasts\": 12870,\n\t\"rum\": 6496,\n\t\"hysterical\": 20396,\n\t\"firmament\": 32411,\n\t\"acclaimed\": 4164,\n\t\"overall\": 1568,\n\t\"Resort\": 17130,\n\t\"Moxon\": 12314,\n\t\"EI.London\": 22204,\n\t\"Aner\": 11246,\n\t\"comfortable\": 12050,\n\t\"principal\": 4282,\n\t\"FABULOUS\": 28797,\n\t\"c-\": 6167,\n\t\"browse\": 14863,\n\t\"Beliefs\": 15181,\n\t\"fluid\": 3117,\n\t\"Ālī\": 16826,\n\t\"abusing\": 19270,\n\t\"2:00\": 22343,\n\t\"slots\": 26382,\n\t\"JOB\": 28070,\n\t\"Zhou\": 3483,\n\t\"Godiva\": 10524,\n\t\"built-in\": 30094,\n\t\"grieving\": 30790,\n\t\"4_28_00.doc\": 23819,\n\t\"boulevards\": 16741,\n\t\"underlying\": 3124,\n\t\"menaces\": 27535,\n\t\"blog\": 7703,\n\t\"gangly\": 28035,\n\t\"electrolyte\": 27615,\n\t\"FUTURE\": 1938,\n\t\"Nick\": 7172,\n\t\"I'ile\": 16631,\n\t\"boundary\": 7626,\n\t\"hazardous\": 18048,\n\t\"Advice\": 26500,\n\t\"M.D.\": 19091,\n\t\"botany\": 3199,\n\t\"security\": 7205,\n\t\"450\": 17269,\n\t\"five\": 1646,\n\t\"2015\": 2426,\n\t\"hoists\": 18814,\n\t\"Off\": 9795,\n\t\"conceptualizing\": 6588,\n\t\"Herzegovina\": 16478,\n\t\"high-speed\": 31401,\n\t\"stamps\": 24920,\n\t\"Journey\": 16098,\n\t\"*****\": 24980,\n\t\"Between\": 1150,\n\t\"dominos\": 29937,\n\t\"conform\": 15076,\n\t\"speculation\": 3888,\n\t\"emits\": 2191,\n\t\"suggestion\": 7648,\n\t\"reflection\": 2289,\n\t\"Likewise\": 17123,\n\t\"origins\": 3565,\n\t\"Village\": 6154,\n\t\"Abuse\": 19441,\n\t\"Chestney\": 29719,\n\t\"student's\": 1560,\n\t\"sundaes\": 11479,\n\t\"she's\": 6655,\n\t\"yawning\": 31876,\n\t\"bony\": 9145,\n\t\"Methodist\": 23624,\n\t\"Kumon\": 28508,\n\t\"desired\": 17277,\n\t\"this's\": 22329,\n\t\"breathe\": 6261,\n\t\"dunno\": 29642,\n\t\"Prominent\": 19830,\n\t\"Levine\": 23875,\n\t\"enables\": 14542,\n\t\"Terrorists\": 19875,\n\t\"Navarro’s\": 1069,\n\t\"Resume\": 22904,\n\t\"ebbed\": 9443,\n\t\"humans\": 14601,\n\t\"appreciation\": 131,\n\t\"Brazillian\": 12584,\n\t\"Grazie\": 16123,\n\t\"noctivagant\": 32378,\n\t\"Eastern\": 4881,\n\t\"Baltimore\": 14148,\n\t\"Of\": 789,\n\t\"WASHINGTON\": 18821,\n\t\"enacted\": 24474,\n\t\"commercial\": 1334,\n\t\"jury's\": 19926,\n\t\"Enoch\": 15179,\n\t\"St\": 4438,\n\t\"liquefied\": 25839,\n\t\"bisected\": 32871,\n\t\"Fontainbleu\": 22192,\n\t\"trademarks\": 22495,\n\t\"680\": 25992,\n\t\"hon\": 6485,\n\t\"doorway\": 32158,\n\t\"explore\": 180,\n\t\"commence\": 22655,\n\t\"gimp\": 26617,\n\t\"owners\": 10476,\n\t\"monday\": 27086,\n\t\"Aren't\": 20412,\n\t\"semantic\": 1899,\n\t\"intelligibility\": 5671,\n\t\"11831\": 23176,\n\t\"necessity\": 2082,\n\t\"submitted\": 4011,\n\t\"whoooooo\": 26300,\n\t\"Incredibly\": 28121,\n\t\"Requiring\": 11664,\n\t\"mirth\": 25234,\n\t\"al.\": 253,\n\t\"Ruse\": 15148,\n\t\"stayed\": 3902,\n\t\"COMp\": 24151,\n\t\"alterations\": 25144,\n\t\"machine-like\": 30279,\n\t\"Month\": 5457,\n\t\"equity\": 20969,\n\t\"refrigerators\": 17149,\n\t\"rigid\": 12628,\n\t\"drowning\": 17984,\n\t\"dark\": 5058,\n\t\"Mechanism\": 23299,\n\t\"Components\": 30068,\n\t\"97th\": 30363,\n\t\"Schwartzenburg@ENRON_DEVELOPMENT\": 21727,\n\t\"intrigued\": 13345,\n\t\"friends’\": 9560,\n\t\"Ethiopia\": 15519,\n\t\"eneedle\": 26363,\n\t\"Expect\": 18224,\n\t\"Atithi\": 27422,\n\t\"Grit\": 15217,\n\t\"conceding\": 7640,\n\t\"beatingsup\": 31780,\n\t\"Rgds\": 22995,\n\t\"flop\": 13686,\n\t\"thematic\": 3712,\n\t\"processed\": 15023,\n\t\"irish\": 26308,\n\t\"proto-language\": 18127,\n\t\"R.\": 3789,\n\t\"trove\": 17421,\n\t\"tome\": 10981,\n\t\"seals\": 25177,\n\t\"v-\": 6634,\n\t\"Islands\": 16252,\n\t\"WALKER\": 24348,\n\t\"Paje\": 991,\n\t\"remembers\": 19821,\n\t\"speeds\": 11397,\n\t\"west\": 7384,\n\t\"Thrace\": 5121,\n\t\"miserable\": 19520,\n\t\"mesh\": 18395,\n\t\"non-profit\": 10778,\n\t\"eavesdrop\": 17593,\n\t\"CDs\": 11027,\n\t\"consisted\": 1643,\n\t\"expresses\": 11056,\n\t\"Barbuda\": 16474,\n\t\"circled\": 6983,\n\t\"tyranny\": 30704,\n\t\"Maybe\": 2824,\n\t\"inequality\": 466,\n\t\"families\": 5000,\n\t\"shorthand\": 30132,\n\t\"Vomiting\": 27070,\n\t\"Victim\": 28366,\n\t\"tragedies\": 11290,\n\t\"bin\": 6942,\n\t\"infrastructure\": 2423,\n\t\"missed\": 13070,\n\t\"décor\": 28147,\n\t\"pp\": 24319,\n\t\"nautical\": 30899,\n\t\"mount\": 26720,\n\t\"Percy\": 32181,\n\t\"Atef\": 20659,\n\t\"shouldn’t\": 7743,\n\t\"buttressed\": 30667,\n\t\"contained\": 5648,\n\t\"Grether\": 22444,\n\t\"nests\": 10216,\n\t\"snored\": 31802,\n\t\"concentrate\": 26199,\n\t\"Republics\": 11597,\n\t\"skylight\": 28500,\n\t\"ROMANCE\": 10089,\n\t\"Grangers\": 32330,\n\t\"companies’\": 1333,\n\t\"query\": 18831,\n\t\"Stand\": 17931,\n\t\"Polaroid\": 13317,\n\t\"greater\": 367,\n\t\"tee\": 27187,\n\t\"welcomed\": 5946,\n\t\"Emperor\": 4457,\n\t\"Fame\": 5730,\n\t\"options\": 8213,\n\t\"MWh\": 22688,\n\t\"progression\": 14520,\n\t\"03:15\": 23329,\n\t\"Whole\": 29202,\n\t\"lolling\": 32733,\n\t\"sticking\": 3300,\n\t\"RADISON\": 29948,\n\t\"revocation\": 22633,\n\t\"fled\": 14231,\n\t\"1758\": 3533,\n\t\"Beto\": 5860,\n\t\"Spanish\": 4,\n\t\"Donaldson\": 26036,\n\t\"Wii\": 26783,\n\t\"Cornelissen's\": 31406,\n\t\"viewers\": 2951,\n\t\"emeritus\": 10371,\n\t\"unheeded\": 9679,\n\t\"appellation\": 20180,\n\t\"you’ve\": 7755,\n\t\"teaching\": 3412,\n\t\"Nimr\": 19329,\n\t\"apothecary's\": 32299,\n\t\"S&M\": 10693,\n\t\"genuinely\": 13653,\n\t\"sizing\": 18722,\n\t\"declared\": 3834,\n\t\"stilted\": 21982,\n\t\"intervening\": 7336,\n\t\"Singer\": 24875,\n\t\"antiquated\": 12762,\n\t\"Ipanema\": 28644,\n\t\"besides\": 1196,\n\t\"Solidarity\": 24306,\n\t\"Mayur\": 25324,\n\t\"volunteers\": 10770,\n\t\"employment\": 554,\n\t\"unpalatable\": 15166,\n\t\"phylogenetic\": 2888,\n\t\"Muni\": 18998,\n\t\"Populaire\": 5463,\n\t\"centuries\": 1023,\n\t\"SHU\": 28436,\n\t\"difference\": 1683,\n\t\"spinal\": 18240,\n\t\"What\": 888,\n\t\"lipstick\": 16000,\n\t\"poop\": 27451,\n\t\"hauled\": 9094,\n\t\"crustaceans\": 25168,\n\t\"1894\": 4714,\n\t\"SHOCKED\": 29573,\n\t\"era\": 928,\n\t\"Jiangsu\": 3342,\n\t\"Clara\": 958,\n\t\"Congressmen\": 11546,\n\t\"realize\": 1707,\n\t\"Comb\": 27151,\n\t\"cartoons\": 27912,\n\t\"childrens\": 28413,\n\t\"starched\": 32651,\n\t\"Edgewater\": 16524,\n\t\"Chiefs\": 21554,\n\t\"USB\": 26312,\n\t\"lungs\": 8858,\n\t\"chrisssake\": 29116,\n\t\"altar\": 5555,\n\t\"libido\": 14954,\n\t\"Yucatan\": 17008,\n\t\"fierce\": 31094,\n\t\"surplus\": 22768,\n\t\"elk\": 25053,\n\t\"Prepare\": 17724,\n\t\"'02\": 23646,\n\t\"Texan\": 25673,\n\t\"backpedalling\": 21361,\n\t\"Waterfalls\": 27002,\n\t\"Howard\": 29462,\n\t\"----------------------------------------------------------------\": 25419,\n\t\"formed\": 5885,\n\t\"888-422-7132\": 21387,\n\t\"Quimba\": 29546,\n\t\"tombed\": 30644,\n\t\"uncle\": 3926,\n\t\"imperfections\": 17621,\n\t\"evaluated\": 316,\n\t\"personable\": 29585,\n\t\"liability\": 23429,\n\t\"yellow-pale-yellow-yellow\": 32683,\n\t\"Nigeria\": 14490,\n\t\"Hagghier\": 17178,\n\t\"bees'\": 28512,\n\t\"prevenient\": 6584,\n\t\"belittle\": 21330,\n\t\"edible\": 28874,\n\t\"broke\": 4373,\n\t\"Giovannini\": 23452,\n\t\"businesslike\": 11153,\n\t\"Balochistan\": 19645,\n\t\"abnormal\": 27596,\n\t\"counter-terrorism\": 14271,\n\t\"small\": 838,\n\t\"fair\": 7421,\n\t\"Paragraph\": 21621,\n\t\"Broken\": 17463,\n\t\"strainer\": 18369,\n\t\"Directions\": 26910,\n\t\"DIRECTIONS\": 1939,\n\t\"th-\": 6177,\n\t\"loop\": 15968,\n\t\"Chatham\": 16251,\n\t\"scrap\": 12973,\n\t\"718-780-0046\": 21491,\n\t\"Locust\": 29957,\n\t\"grin\": 31207,\n\t\"Gala\": 31586,\n\t\"Simmer\": 18380,\n\t\"Locked\": 32146,\n\t\"Lieutenant\": 19835,\n\t\"seemed\": 3846,\n\t\"greatest\": 4392,\n\t\"01:04\": 21338,\n\t\"Tijuana\": 23076,\n\t\"jeff\": 19973,\n\t\"Klain\": 13836,\n\t\"annoyed\": 15484,\n\t\"Frontpage\": 3129,\n\t\"COwpland\": 24157,\n\t\"control\": 1661,\n\t\"Passive\": 2652,\n\t\"brilliantly\": 9974,\n\t\"EPM\": 27993,\n\t\"classics\": 5138,\n\t\"Murray\": 5780,\n\t\"thresholds\": 22209,\n\t\"Hubbard\": 12300,\n\t\"twisting\": 32293,\n\t\"solidarity\": 18594,\n\t\"Inspector\": 4216,\n\t\"skeptical\": 5100,\n\t\"disguise\": 25694,\n\t\"sunset\": 17099,\n\t\"lording\": 30312,\n\t\"Brieber\": 249,\n\t\"contribution\": 2704,\n\t\"market\": 7989,\n\t\"plaza\": 16964,\n\t\"HEATING\": 28463,\n\t\"reluctantly\": 19050,\n\t\"influence\": 1533,\n\t\"contacts\": 19412,\n\t\"Asking\": 17970,\n\t\"comfyy\": 26794,\n\t\"Arizona\": 5612,\n\t\"cites\": 7432,\n\t\"Luo\": 3427,\n\t\"horse\": 6191,\n\t\"nibble\": 8967,\n\t\"self-pity\": 30479,\n\t\"remaining\": 9289,\n\t\"neurological\": 28002,\n\t\"operandi\": 8312,\n\t\"nine\": 4682,\n\t\"Actually\": 6694,\n\t\"YEAR\": 11897,\n\t\"Site\": 16781,\n\t\"Lucky\": 29238,\n\t\"toward\": 432,\n\t\"priory\": 31574,\n\t\"itchy\": 26504,\n\t\"forgiveness\": 11576,\n\t\"RNR\": 23737,\n\t\"Professor\": 3463,\n\t\"3.30\": 23128,\n\t\"Valentines\": 29502,\n\t\"demise\": 18246,\n\t\"recieved\": 24502,\n\t\"unwatched\": 32515,\n\t\"basic\": 1535,\n\t\"léxico\": 1135,\n\t\"excel\": 22653,\n\t\"teh\": 22719,\n\t\"Adriana\": 25399,\n\t\"stylist\": 29287,\n\t\"Luckily\": 29725,\n\t\"coals\": 6398,\n\t\"Developer\": 22333,\n\t\"NMANNE@SusmanGodfrey.com\": 23732,\n\t\"Check\": 24242,\n\t\"Cimarron\": 17446,\n\t\"algae\": 26716,\n\t\"Correspondence\": 5654,\n\t\"maturity\": 8717,\n\t\"Late\": 3475,\n\t\"roundtable\": 24805,\n\t\"biased\": 20968,\n\t\"recruitment\": 594,\n\t\"Behari\": 19147,\n\t\"KONG\": 11805,\n\t\"elephant\": 17197,\n\t\"Committees\": 11585,\n\t\"termination\": 22173,\n\t\"skulking\": 31000,\n\t\"wrapping\": 2318,\n\t\"refused\": 3185,\n\t\"darkling\": 9960,\n\t\"Blumenfeld\": 22395,\n\t\"borrowings\": 2032,\n\t\"urination\": 27064,\n\t\"Race\": 17551,\n\t\"loom\": 25836,\n\t\"acrylic\": 16002,\n\t\"conditons\": 27044,\n\t\"veiled\": 30974,\n\t\"betta\": 26706,\n\t\"ruthless\": 20543,\n\t\"tea\": 6702,\n\t\"golden\": 9562,\n\t\"upwards\": 3337,\n\t\"bounces\": 26799,\n\t\"stabros\": 10083,\n\t\"POS\": 29305,\n\t\"snowstorm\": 25136,\n\t\"dedicated\": 3451,\n\t\"distain\": 28639,\n\t\"Wednesday\": 5230,\n\t\"clang\": 9707,\n\t\"Bruce\": 12563,\n\t\"whoo-hoo\": 15981,\n\t\"wine\": 9191,\n\t\"RAW\": 19646,\n\t\"Exocet\": 25801,\n\t\"Eulogic\": 28581,\n\t\"Smyth\": 8595,\n\t\"instructing\": 31775,\n\t\"Tsarevna\": 4378,\n\t\"pabloruizfabo@gmail.com\": 953,\n\t\"Festus's\": 31801,\n\t\"locust\": 29956,\n\t\"Cottage\": 5814,\n\t\"Raina's\": 28506,\n\t\"bad\": 1386,\n\t\"flatbread\": 9184,\n\t\"8000\": 12187,\n\t\"alt.consumers\": 25724,\n\t\"attracts\": 28958,\n\t\"Next\": 675,\n\t\"dope\": 20094,\n\t\"marketplace\": 16890,\n\t\"MAILING\": 24934,\n\t\"Burma\": 31532,\n\t\"THIS\": 11838,\n\t\"Senator\": 10487,\n\t\"revelations\": 8749,\n\t\"Guests\": 16318,\n\t\"40\": 1665,\n\t\"biases\": 2711,\n\t\"Evelyn\": 4120,\n\t\"Mohieddin\": 30681,\n\t\"emigration\": 16935,\n\t\"evaluate\": 24711,\n\t\"knees\": 6862,\n\t\"Anatole\": 5423,\n\t\"weirdness\": 20296,\n\t\"Nasser\": 30660,\n\t\"Exactly\": 31755,\n\t\"Kraków\": 16933,\n\t\"red-headed\": 32217,\n\t\",,\": 27364,\n\t\"telescope\": 14610,\n\t\"abdomen\": 4022,\n\t\"½\": 3321,\n\t\"LEARNING\": 15067,\n\t\"Desiring\": 32667,\n\t\"detained\": 20764,\n\t\"inserted\": 22227,\n\t\"scowl\": 9322,\n\t\"worsening\": 24398,\n\t\"francisco.pinto.leite@enron.com\": 22298,\n\t\"relevance\": 82,\n\t\"Needs\": 21854,\n\t\"shine\": 14622,\n\t\"comply\": 7411,\n\t\"wedged\": 31697,\n\t\"roaming\": 25042,\n\t\"Roland\": 31910,\n\t\"pricey\": 27546,\n\t\"concepts\": 734,\n\t\"Allawi's\": 19257,\n\t\"aren't\": 10332,\n\t\"hh\": 26977,\n\t\"intersect\": 17484,\n\t\"dig\": 17744,\n\t\"visual\": 158,\n\t\"oracional\": 1157,\n\t\"unwieldy\": 13042,\n\t\"glimpse\": 13380,\n\t\"1662\": 16817,\n\t\"luna\": 29710,\n\t\"declivity\": 31163,\n\t\"spacetime\": 15540,\n\t\"left-over\": 31771,\n\t\"VERIFIES\": 24975,\n\t\"Incorporated\": 23050,\n\t\"I’ve\": 7720,\n\t\"understandably\": 23058,\n\t\"Walked\": 5377,\n\t\"nerve\": 20850,\n\t\"Lavorato\": 21014,\n\t\"flowing\": 21425,\n\t\"vile\": 9486,\n\t\"comet\": 9958,\n\t\"Fyi\": 22482,\n\t\"Bonde\": 11686,\n\t\"Starbucks\": 13597,\n\t\"Nesbitt\": 21567,\n\t\"Hizbullah\": 18892,\n\t\"panting\": 30826,\n\t\"comics\": 12532,\n\t\"wise\": 10321,\n\t\"Woodinville\": 29134,\n\t\"goofy\": 20822,\n\t\"pyramids\": 15324,\n\t\"bearers\": 30956,\n\t\"Conseguences\": 18666,\n\t\"boundless\": 32800,\n\t\"Slope\": 7880,\n\t\"enterprises\": 11604,\n\t\"Puerto\": 16635,\n\t\"scholarly\": 433,\n\t\"cafe\": 10992,\n\t\"Paulo\": 23196,\n\t\"skyrocketing\": 23712,\n\t\"slowing\": 9977,\n\t\"Sounds\": 21742,\n\t\"Fayetteville\": 13378,\n\t\"framed\": 3090,\n\t\"Joachim\": 27116,\n\t\"allowed\": 2848,\n\t\"governing\": 5691,\n\t\"rocks\": 8998,\n\t\"Samoa\": 26014,\n\t\"spikes\": 23337,\n\t\"Drama\": 4188,\n\t\"barrister\": 13030,\n\t\"Visitors\": 16424,\n\t\"tour\": 2964,\n\t\"uncompleted\": 18084,\n\t\"SERIOUSLY\": 27358,\n\t\"1:1:19\": 1816,\n\t\"Appeal\": 18211,\n\t\"mah\": 9134,\n\t\"conceivable\": 26802,\n\t\"guitars\": 32417,\n\t\"UK's\": 4475,\n\t\"Birdie\": 11097,\n\t\"03:31\": 22819,\n\t\"files\": 15024,\n\t\"Daimler\": 23847,\n\t\"ruinin'\": 32300,\n\t\"Vij\": 19075,\n\t\"ENRONR~1.DOC\": 23441,\n\t\"wooden\": 8957,\n\t\"apology\": 30354,\n\t\"Project\": 12646,\n\t\"Gérald\": 13015,\n\t\"Conf\": 22973,\n\t\"competed\": 8417,\n\t\"conquering\": 9463,\n\t\"concerns\": 2450,\n\t\"Sanzio\": 25338,\n\t\"landmine\": 8647,\n\t\"!!!!!!\": 24991,\n\t\"dialects\": 1786,\n\t\"piece\": 4001,\n\t\"taxi-driver\": 32635,\n\t\"Trump's\": 12071,\n\t\"augmentations\": 8389,\n\t\"dialog\": 30194,\n\t\"Acquired\": 14827,\n\t\"suit\": 12568,\n\t\"sedentary\": 30970,\n\t\"$2,000\": 11569,\n\t\"castling\": 25480,\n\t\"UCSB\": 7142,\n\t\"overarching\": 15325,\n\t\"perspectives\": 387,\n\t\"Cheap\": 16717,\n\t\"Yassin\": 18929,\n\t\"Lorenzo\": 27110,\n\t\"workspace\": 30084,\n\t\"negligence\": 7412,\n\t\"cross-border\": 31471,\n\t\"Fridays\": 20070,\n\t\"sponge-bag\": 31693,\n\t\"elses\": 21974,\n\t\"embedding\": 3696,\n\t\"actresses\": 5386,\n\t\"http://www.ontario.ca/en/information_bundle/birthcertificates/119274.html\": 27473,\n\t\"keenly\": 19048,\n\t\"Haddo\": 4277,\n\t\"seller\": 3723,\n\t\"Rochester\": 5200,\n\t\"tugging\": 8840,\n\t\"Settlers\": 14686,\n\t\"tied\": 8981,\n\t\"fodder\": 8207,\n\t\"Handwritten\": 20623,\n\t\"cyanide\": 20849,\n\t\"advantage\": 1259,\n\t\"tiring\": 15874,\n\t\"stash\": 18176,\n\t\"Beirut\": 4550,\n\t\"filipinos\": 26140,\n\t\"Blvd.\": 23888,\n\t\"Willis\": 29846,\n\t\"unconsumables\": 25178,\n\t\"substrate\": 26885,\n\t\"enchanting\": 14916,\n\t\"Evil-looking\": 32243,\n\t\"06:15\": 22157,\n\t\"website’s\": 12733,\n\t\"barges\": 17252,\n\t\"Prejudice\": 10931,\n\t\"1380\": 17306,\n\t\"airline\": 16456,\n\t\"terrent\": 5081,\n\t\"Tikrit\": 18523,\n\t\"Maati\": 20775,\n\t\"wants\": 8801,\n\t\"billiards\": 25509,\n\t\"searched\": 30510,\n\t\"Does\": 6794,\n\t\"Coil's\": 20224,\n\t\"anti-democratic\": 20498,\n\t\"signifies\": 16145,\n\t\"jungle\": 12000,\n\t\"baleful\": 9388,\n\t\"autograph\": 11026,\n\t\"AWOL\": 19226,\n\t\"taxed\": 25750,\n\t\"Sabine\": 14721,\n\t\"raced\": 31820,\n\t\"charges\": 3982,\n\t\"correspondences\": 5684,\n\t\"officers\": 3600,\n\t\"bendings\": 9417,\n\t\"stimulating\": 758,\n\t\"adhering\": 22109,\n\t\"55\": 17206,\n\t\"Fountain\": 17053,\n\t\"Assassinate\": 18745,\n\t\"brothers\": 3153,\n\t\"already\": 2301,\n\t\"joined\": 3815,\n\t\"mares\": 27978,\n\t\"Producer\": 20926,\n\t\"protective\": 17639,\n\t\"torturing\": 24271,\n\t\"comparisons\": 10628,\n\t\"lacerating\": 30478,\n\t\"til\": 11069,\n\t\"Announce\": 17934,\n\t\"hamper\": 2645,\n\t\"evolves\": 20095,\n\t\"conflagration\": 23971,\n\t\"rectangle\": 9849,\n\t\"Congratulations\": 17959,\n\t\"neighborhood\": 4687,\n\t\"SUITABLE\": 11930,\n\t\"Nhut\": 19195,\n\t\"generic\": 2367,\n\t\"VOF\": 21139,\n\t\"PROCESS\": 28188,\n\t\"identifies\": 1036,\n\t\"helicopters\": 11205,\n\t\"Process\": 23113,\n\t\"wet\": 6248,\n\t\"Bourret\": 24954,\n\t\"vol.\": 14908,\n\t\"SCLED\": 2107,\n\t\"XIII\": 21944,\n\t\"proof\": 2282,\n\t\"clicked\": 22551,\n\t\"Chevy\": 6933,\n\t\"stuff\": 6084,\n\t\"overrides\": 31335,\n\t\"darkened\": 24881,\n\t\"ghetto\": 30797,\n\t\"Beginner\": 8330,\n\t\"reused\": 16972,\n\t\"Unit\": 23025,\n\t\"corrugated\": 10046,\n\t\"EVERYBODY\": 11908,\n\t\"Hizb\": 19679,\n\t\"polka\": 32553,\n\t\"apparently\": 5979,\n\t\"catering\": 27328,\n\t\"democrat\": 12432,\n\t\"peers\": 392,\n\t\"skull\": 27355,\n\t\"SiriusXM\": 5326,\n\t\"1896\": 3305,\n\t\"rubber\": 7338,\n\t\"whale’s\": 9086,\n\t\"jihadis\": 19110,\n\t\"thinks\": 8170,\n\t\"cufflinks\": 31900,\n\t\"torsional\": 2817,\n\t\"47\": 22767,\n\t\"Moses\": 30537,\n\t\"pains\": 14025,\n\t\"3s\": 18743,\n\t\"compete\": 8404,\n\t\"stairs\": 8953,\n\t\"guerilla\": 24314,\n\t\"passed\": 9083,\n\t\"matters\": 8352,\n\t\"DAD\": 21531,\n\t\"reputations\": 1492,\n\t\"caustic\": 17999,\n\t\"Numero\": 24771,\n\t\"jar\": 27873,\n\t\"Own\": 27962,\n\t\"51\": 17462,\n\t\"request\": 3603,\n\t\"Marine\": 10439,\n\t\"wiser\": 25310,\n\t\"psychedelic\": 6839,\n\t\"expertise\": 1224,\n\t\"ministries\": 13930,\n\t\"Approvals\": 22036,\n\t\"Kori\": 22098,\n\t\"Khan@TRANSREDES\": 22910,\n\t\"ruin\": 26815,\n\t\"chrome\": 26953,\n\t\"Feeling\": 32283,\n\t\"1575\": 25495,\n\t\"Eventually\": 4649,\n\t\"magistrates\": 31758,\n\t\"mound\": 32015,\n\t\"skinny\": 32054,\n\t\"Homer\": 1101,\n\t\"tricks\": 10318,\n\t\"hulk\": 31940,\n\t\"revise\": 22286,\n\t\"ya\": 11705,\n\t\"punished\": 32913,\n\t\"Claimed\": 28562,\n\t\"icicles\": 32522,\n\t\"Entrance\": 16701,\n\t\"sacred\": 14322,\n\t\"absorbing\": 24628,\n\t\"Edgar\": 18479,\n\t\"quad\": 27567,\n\t\"Anyway\": 9906,\n\t\"revealing\": 15197,\n\t\"Edison\": 15251,\n\t\"Sufaat's\": 20719,\n\t\"Law\": 7275,\n\t\"summary\": 567,\n\t\"WARNOCK\": 14353,\n\t\"monarchies\": 24369,\n\t\"wai'd\": 17345,\n\t\"misc.consumers.frugal-living\": 25726,\n\t\"smiled\": 9787,\n\t\"Liberty\": 4093,\n\t\"interfering\": 11618,\n\t\"DAUGHTERS\": 29685,\n\t\"realer\": 15735,\n\t\"sociologist\": 15450,\n\t\"jazz\": 17932,\n\t\"manipulated\": 1474,\n\t\"purportedly\": 20247,\n\t\"appreciative\": 32706,\n\t\"sunshield\": 14618,\n\t\"Paniotis's\": 32885,\n\t\"warm\": 6477,\n\t\"Burckhardt\": 27099,\n\t\"Biewener's\": 2771,\n\t\"Marvel\": 3004,\n\t\"Audit\": 21945,\n\t\"friend's\": 9612,\n\t\"resignation\": 5592,\n\t\"Alabama\": 15041,\n\t\"lust\": 9832,\n\t\"Others\": 20635,\n\t\"grab\": 8839,\n\t\"exper-\": 6907,\n\t\"Beth\": 6708,\n\t\"hole\": 6331,\n\t\"dearly\": 32094,\n\t\"exclamation\": 14834,\n\t\"Hamburger\": 6953,\n\t\"pleadings\": 23825,\n\t\"owner's\": 16904,\n\t\"complete\": 522,\n\t\"woodland\": 15289,\n\t\"Equilon's\": 23408,\n\t\"Password\": 22982,\n\t\"Bridge's\": 16503,\n\t\"Carribbean\": 26579,\n\t\"Curious\": 30539,\n\t\"Someone\": 12727,\n\t\"monastic\": 5916,\n\t\"showgirl\": 5398,\n\t\"stonework\": 16971,\n\t\"harmful\": 2097,\n\t\"of\": 17,\n\t\"desire\": 5151,\n\t\"Snyder\": 22308,\n\t\"Merry\": 8690,\n\t\"impotent\": 31144,\n\t\"vaunted\": 25815,\n\t\"survived\": 9119,\n\t\"checkerspot\": 25130,\n\t\"vertically\": 2621,\n\t\"equivalence\": 5552,\n\t\"waiver\": 20806,\n\t\"serpent\": 15355,\n\t\"angry\": 8960,\n\t\"inverted\": 19938,\n\t\"stealing\": 15164,\n\t\"misstated\": 22597,\n\t\"handfuls\": 32326,\n\t\"75th\": 15637,\n\t\"rejoice\": 14052,\n\t\"somberness\": 31113,\n\t\"Wedding\": 2920,\n\t\"Nobody\": 19658,\n\t\"functionalism\": 14928,\n\t\"subtlety\": 14887,\n\t\"ocean\": 2556,\n\t\"1925\": 3411,\n\t\"Lou\": 22761,\n\t\"mid-ocean\": 30783,\n\t\"translucent\": 9737,\n\t\"thought\": 2495,\n\t\"Knights\": 20812,\n\t\"Aberdeenshire\": 4263,\n\t\"rigger\": 18230,\n\t\"quidditch\": 18333,\n\t\"adaptations\": 10206,\n\t\"22:30\": 12520,\n\t\"conditionting\": 17147,\n\t\"ballot\": 12522,\n\t\"Hamilton\": 3627,\n\t\"not\": 232,\n\t\"da\": 2241,\n\t\"asexually\": 10671,\n\t\"Adnan\": 20773,\n\t\"Molten\": 27297,\n\t\"EAT\": 28798,\n\t\"brides\": 30007,\n\t\"eccentricity\": 32749,\n\t\"single\": 474,\n\t\"Roberts\": 7128,\n\t\"bird\": 2757,\n\t\"TOWNIES\": 11855,\n\t\"rebel\": 19023,\n\t\"modified\": 11395,\n\t\"prostitute\": 24297,\n\t\"reptile\": 26884,\n\t\"Increasingly\": 24584,\n\t\"onboard\": 11374,\n\t\"lapping\": 8955,\n\t\"Quinoa\": 18351,\n\t\"willows\": 25070,\n\t\"wand\": 16092,\n\t\"reportedly\": 12144,\n\t\"Sinners\": 5395,\n\t\"Muslims\": 12072,\n\t\"Merlot\": 16240,\n\t\"gardening\": 22641,\n\t\"Gosier\": 16660,\n\t\"hackles\": 20315,\n\t\"changes\": 646,\n\t\"501st\": 12591,\n\t\"visitors\": 10763,\n\t\"Alternatively\": 17569,\n\t\"Werner\": 5513,\n\t\"ago\": 6045,\n\t\"industry’s\": 15103,\n\t\"mold\": 17757,\n\t\"painting\": 4591,\n\t\"crystallizes\": 21762,\n\t\"sums\": 25847,\n\t\"disembarking\": 31718,\n\t\"gened\": 32611,\n\t\"tamed\": 27783,\n\t\"ebay\": 26875,\n\t\"producer\": 5328,\n\t\"graves\": 4075,\n\t\"Agel\": 23982,\n\t\"Baghdad\": 4516,\n\t\"distributing\": 7906,\n\t\"contain\": 2096,\n\t\"2.11\": 15658,\n\t\"combining\": 13335,\n\t\"analyzed\": 737,\n\t\"Med\": 16672,\n\t\"bureaucratically\": 20606,\n\t\"Isn’t\": 11212,\n\t\"35,000\": 20733,\n\t\"burning\": 7358,\n\t\"getting\": 4923,\n\t\"tasked\": 12820,\n\t\"vested\": 12832,\n\t\"Trading\": 21574,\n\t\"expect\": 1427,\n\t\"deterrent\": 10433,\n\t\"80s\": 5415,\n\t\"COS\": 23311,\n\t\"notification\": 23594,\n\t\"unstained\": 30922,\n\t\"irrelevant\": 7428,\n\t\"Somalia\": 18638,\n\t\"punches\": 24141,\n\t\"pleasantly\": 28635,\n\t\"smelling\": 15830,\n\t\"Hamburg\": 4319,\n\t\"Spang’s\": 1197,\n\t\"Katherine\": 5416,\n\t\"wouldn’t\": 7688,\n\t\"NEEDED\": 24342,\n\t\"Benzie\": 8237,\n\t\"Dems’\": 19210,\n\t\"Spirit\": 17111,\n\t\"launchers\": 19598,\n\t\"underestimate\": 20632,\n\t\"Pigeons\": 32939,\n\t\"prosthetic\": 8406,\n\t\"Ombre\": 5528,\n\t\"2017\": 688,\n\t\"counter-conference\": 10393,\n\t\"situated\": 14849,\n\t\"penn\": 18099,\n\t\"solemnly\": 32488,\n\t\"delegate\": 24804,\n\t\"there’s\": 7740,\n\t\"Errol's\": 32180,\n\t\"pudding\": 31773,\n\t\"Customers\": 15117,\n\t\"sirloin\": 29395,\n\t\"quaffle\": 18293,\n\t\"astronomer\": 32568,\n\t\"70\": 11678,\n\t\"dislocate\": 18198,\n\t\"fizzle\": 10471,\n\t\"wisdom\": 7237,\n\t\"Alexander\": 3626,\n\t\"Everyone\": 8770,\n\t\"forbidding\": 20557,\n\t\"submerged\": 24419,\n\t\"sheet\": 15600,\n\t\"95\": 12975,\n\t\"confirmation\": 23052,\n\t\"387,000\": 15676,\n\t\"likley\": 23907,\n\t\"civilizations\": 15267,\n\t\"Sun.\": 22188,\n\t\"judgment\": 6600,\n\t\"Scotland\": 4264,\n\t\"anasthesia\": 7063,\n\t\"Court\": 7413,\n\t\"Choose\": 17706,\n\t\"winging\": 32901,\n\t\"sublime\": 14892,\n\t\"Fabio\": 20160,\n\t\"CE\": 15367,\n\t\"inclusive\": 780,\n\t\"replication\": 2380,\n\t\"drawn\": 2339,\n\t\"lap\": 18085,\n\t\"sleeves\": 17360,\n\t\"crippled\": 25671,\n\t\"Carytown\": 29446,\n\t\"Republicans\": 14435,\n\t\"caves\": 10004,\n\t\"Anderson\": 12636,\n\t\"Servings\": 17838,\n\t\"mink\": 32421,\n\t\"11:57\": 23431,\n\t\"Keepers\": 18304,\n\t\"Paraíso\": 1005,\n\t\"sneaks\": 27283,\n\t\"cancel\": 21193,\n\t\"1940\": 3442,\n\t\"African\": 8399,\n\t\"personalized\": 28163,\n\t\"unconstrained\": 32737,\n\t\"nudes\": 26547,\n\t\"derivatives\": 22510,\n\t\"Using\": 2172,\n\t\"http://www.disinfo.com/archive/pages/dossier/id334/pg1/\": 19424,\n\t\"claque\": 32696,\n\t\"SoCal's\": 23657,\n\t\"sneeze\": 9862,\n\t\"spaghetti\": 17364,\n\t\"11:08\": 21360,\n\t\"‘cuz\": 11694,\n\t\"icon\": 20444,\n\t\"downtrodden\": 24269,\n\t\"Theodorus’\": 5931,\n\t\"Comfort\": 28165,\n\t\"lock\": 7390,\n\t\"bone\": 2798,\n\t\"laid\": 6517,\n\t\"Dumbledore\": 32247,\n\t\"Made\": 6859,\n\t\"Airways\": 17117,\n\t\"Brighton\": 5201,\n\t\"What's\": 6665,\n\t\"Maharishi\": 24184,\n\t\"aspire\": 27845,\n\t\"scholars\": 1064,\n\t\"blinks\": 14804,\n\t\"prizes\": 24548,\n\t\"confusing\": 22201,\n\t\"Abdel\": 20621,\n\t\"verdict\": 12675,\n\t\"featured\": 5244,\n\t\"Morocco\": 12132,\n\t\"SoCal\": 23613,\n\t\"activity\": 832,\n\t\"Dobby\": 32126,\n\t\"dept\": 23169,\n\t\"disarm\": 19043,\n\t\"generalizability\": 516,\n\t\"living\": 3509,\n\t\"Sapulpa\": 17494,\n\t\"bake\": 6457,\n\t\"pry\": 17974,\n\t\"braver\": 9662,\n\t\"Forensic\": 5718,\n\t\"jail\": 20841,\n\t\"3.75\": 29593,\n\t\"Kazimir\": 4595,\n\t\"Khinssa\": 18088,\n\t\"derailing\": 18886,\n\t\"fence\": 29962,\n\t\"complication\": 18075,\n\t\"newborn\": 26320,\n\t\"mustache\": 6173,\n\t\"longitudinal\": 8498,\n\t\"cool\": 8822,\n\t\"GUARDS\": 11850,\n\t\"Debbie's\": 7344,\n\t\"graduating\": 5564,\n\t\"Roomers\": 11782,\n\t\"16/10/2004\": 19756,\n\t\"Sandalwood\": 21843,\n\t\"Sympathy\": 25620,\n\t\"included\": 1947,\n\t\"vs.\": 5277,\n\t\"dubbed\": 12701,\n\t\"Tiberias\": 11250,\n\t\"Ordinarily\": 19847,\n\t\"211\": 17530,\n\t\"summarised\": 22650,\n\t\"exercising\": 2844,\n\t\"hm\": 7090,\n\t\"elapsed\": 15607,\n\t\"smuggle\": 19387,\n\t\"re-record\": 10954,\n\t\"knacks\": 8065,\n\t\"Ramtanu\": 19508,\n\t\"supplied\": 24368,\n\t\"diner\": 29770,\n\t\"injection\": 9540,\n\t\"captions\": 30086,\n\t\"missing\": 5825,\n\t\"Oh-ho\": 6928,\n\t\"17H\": 21123,\n\t\"Bro\": 21883,\n\t\"lasting\": 7938,\n\t\"info.\": 22720,\n\t\"cylinders\": 27312,\n\t\"Brandee\": 23109,\n\t\"predominated\": 32860,\n\t\"ecological\": 16998,\n\t\"daring\": 8918,\n\t\"Amanda\": 14308,\n\t\"lots\": 6160,\n\t\"recalled\": 4574,\n\t\"Drinks\": 16702,\n\t\"caloy\": 26137,\n\t\"affronted\": 30566,\n\t\"ignorant\": 14700,\n\t\"Tommy\": 16355,\n\t\"potato\": 28875,\n\t\"LED\": 2051,\n\t\"tongue\": 18105,\n\t\"BTW\": 27583,\n\t\"appointed\": 4350,\n\t\"ever\": 4564,\n\t\"Balochi\": 19644,\n\t\"defanged\": 18782,\n\t\"HIV\": 1399,\n\t\"tailor\": 18322,\n\t\"HollyŁódź\": 16946,\n\t\"regards\": 14941,\n\t\"doorstep\": 15962,\n\t\"Florence\": 17482,\n\t\"Fighting\": 5866,\n\t\"4193\": 22246,\n\t\"02/27/2001\": 21617,\n\t\"ground\": 2183,\n\t\"disjoint\": 489,\n\t\"06:07\": 21657,\n\t\"27.doc\": 23310,\n\t\"Mini\": 29729,\n\t\"roomful\": 29932,\n\t\"Fifth\": 7360,\n\t\"Haishen\": 24790,\n\t\"unhealthy\": 27225,\n\t\"1976\": 3720,\n\t\"arm\": 7100,\n\t\"Beach\": 17226,\n\t\"hotpot\": 29115,\n\t\"casing\": 20600,\n\t\"touted\": 8126,\n\t\"leaflets\": 20168,\n\t\"slobber\": 6828,\n\t\"Brian\": 12961,\n\t\"reacted\": 3868,\n\t\"functionality\": 22635,\n\t\"galleries\": 6164,\n\t\"is\": 55,\n\t\"drop-down\": 30150,\n\t\"whoever\": 11214,\n\t\"honking\": 30824,\n\t\"CVTS\": 29915,\n\t\"ld2d-#69381-1.DOC\": 22437,\n\t\"Mob\": 32461,\n\t\"Nazi\": 16915,\n\t\"Funen\": 17202,\n\t\"mausoleum\": 9105,\n\t\"pcs\": 28072,\n\t\"beared\": 23683,\n\t\"Inn\": 23369,\n\t\"school\": 1558,\n\t\"meters\": 15594,\n\t\"arbitrators\": 23739,\n\t\"regularity\": 21332,\n\t\"antiseptic\": 9533,\n\t\"Daly\": 10588,\n\t\"whitened\": 31843,\n\t\"afterward\": 17816,\n\t\"Lawyers\": 24264,\n\t\"twigs\": 30360,\n\t\"rehabilitate\": 25033,\n\t\"giraffes\": 26261,\n\t\"giggled\": 28719,\n\t\"dish\": 18405,\n\t\"nourishing\": 27865,\n\t\"wolves\": 25021,\n\t\"drugs\": 14651,\n\t\"whore\": 6621,\n\t\"creation\": 779,\n\t\"mouthpiece\": 24565,\n\t\"booklist\": 32347,\n\t\"Legion\": 12592,\n\t\"porch\": 8917,\n\t\"anywere\": 28358,\n\t\"Forester\": 5737,\n\t\"ex-cons\": 24275,\n\t\"gelatin\": 13281,\n\t\"Hormuz\": 25787,\n\t\"GoogleScholar\": 451,\n\t\"picturesque\": 16339,\n\t\"luminol\": 18038,\n\t\"expected\": 1309,\n\t\"ICU\": 21681,\n\t\"Cohen\": 2489,\n\t\"delights\": 7714,\n\t\"http://www.wikihow.com/wikiHow:Statistics\": 10827,\n\t\"GUYS\": 28071,\n\t\"Waters\": 4736,\n\t\"23rd\": 22619,\n\t\"gambling\": 13546,\n\t\"LibriVox\": 10905,\n\t\"Hacienda\": 29166,\n\t\"deposed\": 32677,\n\t\"Galantino\": 13239,\n\t\"chemist\": 5202,\n\t\"tiles\": 9033,\n\t\"58,825\": 12440,\n\t\"scheduling\": 21560,\n\t\"twenty-five\": 30580,\n\t\"Citation\": 10385,\n\t\"Up\": 4710,\n\t\"Wendy\": 23139,\n\t\"Canever\": 29373,\n\t\"DAYS\": 10092,\n\t\"Korean\": 12841,\n\t\"wreathed\": 25560,\n\t\"graffitied\": 32938,\n\t\"Fantoni\": 262,\n\t\"Military\": 3545,\n\t\"2007\": 1549,\n\t\"rearview\": 32930,\n\t\"wishes\": 9913,\n\t\"abolished\": 14758,\n\t\"skin\": 2200,\n\t\"Bought\": 12042,\n\t\"Crest\": 27150,\n\t\"wikiLove\": 10791,\n\t\"li\": 14883,\n\t\"recessive\": 27141,\n\t\"skittish\": 27433,\n\t\"operators\": 2253,\n\t\"Nullvalues\": 30161,\n\t\"Neo\": 12445,\n\t\"interest\": 853,\n\t\"SUPER\": 28744,\n\t\"universe\": 7946,\n\t\"remains\": 412,\n\t\"assertion\": 3966,\n\t\"Pittsburgh\": 4782,\n\t\"ABB\": 21736,\n\t\"taunts\": 9598,\n\t\"Spaghetti\": 28299,\n\t\"Wilson\": 6668,\n\t\"\\\"\\\"\": 22053,\n\t\"1.50\": 29975,\n\t\"Regulatory\": 23687,\n\t\"advertised\": 27668,\n\t\"structurally\": 1839,\n\t\"http://www.mikegigi.com/techspec.htm#SELCTEMP\": 27315,\n\t\"University's\": 4495,\n\t\"crimson\": 30839,\n\t\"Toys\": 6966,\n\t\"provision\": 11624,\n\t\"libertarian\": 26069,\n\t\"Strike\": 25810,\n\t\"repeat\": 11232,\n\t\"bozos\": 20174,\n\t\"suffices\": 30978,\n\t\"bay\": 20236,\n\t\"bicycle\": 16579,\n\t\"some\": 544,\n\t\"isn't\": 6404,\n\t\".!\": 27091,\n\t\"Colorful\": 12922,\n\t\"crisp\": 16143,\n\t\"land\": 2353,\n\t\"Tots\": 28133,\n\t\"extrudes\": 30544,\n\t\"Wouldn't\": 20410,\n\t\"burrowed\": 24301,\n\t\"Pat\": 16005,\n\t\"editorial\": 11110,\n\t\"spoil\": 28414,\n\t\"enthusiastically\": 25257,\n\t\"streamline\": 12974,\n\t\"Stock\": 21851,\n\t\"husband's\": 25653,\n\t\"No-8\": 31540,\n\t\"least\": 1380,\n\t\"lethargy\": 24069,\n\t\"loudly\": 17923,\n\t\"03/10/2000\": 22570,\n\t\"Trophy\": 4854,\n\t\"empowering\": 10794,\n\t\"107th\": 30294,\n\t\"lasciviousness\": 25712,\n\t\"heartbreaking\": 28026,\n\t\"aggregation\": 23295,\n\t\"Play\": 4705,\n\t\"CNRS\": 956,\n\t\"Jim\": 5410,\n\t\"dedication\": 10861,\n\t\"Beachcrofts\": 23787,\n\t\"Hephaestus\": 32412,\n\t\"operative\": 8293,\n\t\"Ip\": 12452,\n\t\"281-443-3744\": 22931,\n\t\"Spot\": 11974,\n\t\"anatomical\": 10665,\n\t\"increase\": 1954,\n\t\"interpretations\": 988,\n\t\"Contracts\": 22518,\n\t\"Hurricane\": 24392,\n\t\"0000108806\": 22921,\n\t\"attaining\": 6586,\n\t\"outraged\": 31193,\n\t\"1907\": 17491,\n\t\"viscosity\": 32870,\n\t\"Nordstrom\": 29150,\n\t\"physical\": 216,\n\t\"delays\": 11422,\n\t\"Alone\": 3766,\n\t\"enrongss.xls\": 21423,\n\t\"appearance\": 2017,\n\t\"sympathised\": 32644,\n\t\"uncontrolled\": 9583,\n\t\"wedding\": 3401,\n\t\"venality\": 4344,\n\t\"Petroleum\": 21790,\n\t\"sympathetic\": 19696,\n\t\"uncomfortably\": 30752,\n\t\"WITH\": 21522,\n\t\"major\": 2147,\n\t\"Bootham\": 17581,\n\t\"Yellow\": 2721,\n\t\"career\": 4515,\n\t\"CONFIRMIT\": 21371,\n\t\"Within\": 1139,\n\t\"330\": 2481,\n\t\"@POTUS\": 12235,\n\t\"08:00\": 17021,\n\t\"Avenue\": 15562,\n\t\"38\": 14888,\n\t\"Participants\": 23276,\n\t\"‘’\": 19649,\n\t\"pho\": 29029,\n\t\"historicism\": 14930,\n\t\"lung\": 25954,\n\t\"affect\": 66,\n\t\"Bridge\": 13158,\n\t\"accomodating\": 28280,\n\t\"unprofessional\": 29085,\n\t\"slightly\": 9511,\n\t\"blazed\": 32104,\n\t\"access\": 638,\n\t\"questions\": 577,\n\t\"combative\": 29069,\n\t\"statute\": 7284,\n\t\"originated\": 926,\n\t\"finger\": 9878,\n\t\"Chorus\": 13767,\n\t\"subcontinent\": 18838,\n\t\"I/S\": 21120,\n\t\"receptions\": 31844,\n\t\"Figuratively\": 20484,\n\t\"allocate\": 21612,\n\t\"solve\": 1890,\n\t\"Murph\": 19804,\n\t\"teenage\": 8741,\n\t\"dancing\": 5223,\n\t\"wizarding\": 18285,\n\t\"feathering\": 17820,\n\t\"seed\": 15920,\n\t\"Center's\": 20013,\n\t\"1936\": 5563,\n\t\"Lennon\": 25596,\n\t\"savage\": 31084,\n\t\"blade\": 11368,\n\t\"Pandorans\": 9300,\n\t\"trick\": 9886,\n\t\"nauseous\": 16174,\n\t\"Jazz\": 29292,\n\t\"Fully\": 14264,\n\t\"happiest\": 11950,\n\t\"Santa’s\": 8565,\n\t\"validate\": 23853,\n\t\"concentrating\": 24603,\n\t\"couples\": 24652,\n\t\"handy\": 21222,\n\t\"undertake\": 25745,\n\t\"saponins\": 18371,\n\t\"GEM\": 28919,\n\t\"jacks\": 26532,\n\t\"neo-conservatives\": 19742,\n\t\"roam\": 16843,\n\t\"uneven\": 28327,\n\t\"Yvette\": 12992,\n\t\"Clearwater\": 12816,\n\t\"largest\": 518,\n\t\"Orleans\": 24394,\n\t\"Guv\": 32369,\n\t\"Afternoon\": 21629,\n\t\"Dulaymi\": 19334,\n\t\"Evanston\": 13327,\n\t\"sociology\": 15478,\n\t\"responders\": 14153,\n\t\"CAME\": 29676,\n\t\"Champion\": 5522,\n\t\"interspersed\": 206,\n\t\"embers\": 31306,\n\t\"don't\": 6056,\n\t\"COMCAST\": 29763,\n\t\"Geno's\": 29961,\n\t\"Tanganyika\": 31855,\n\t\"extensions\": 12982,\n\t\"hardly\": 1431,\n\t\"improving\": 1534,\n\t\"Lipstick\": 16020,\n\t\"Flakes\": 27843,\n\t\"keys\": 6453,\n\t\"mailto:rosario.gonzales@compaq.com\": 22154,\n\t\"various\": 358,\n\t\"pack\": 8230,\n\t\"Motoko\": 8258,\n\t\"prosperous\": 809,\n\t\"batted\": 4789,\n\t\"Questar's\": 23580,\n\t\"braid\": 15940,\n\t\"Commissioner\": 12996,\n\t\"suggesting\": 1765,\n\t\"missionary's\": 31961,\n\t\"reptiles\": 27742,\n\t\"Catarin\": 1507,\n\t\"Uno\": 21970,\n\t\"outlets\": 8072,\n\t\"IAEA\": 18676,\n\t\"Border\": 12956,\n\t\"Kumaratunga's\": 18997,\n\t\"Aye\": 24229,\n\t\"ruins\": 6083,\n\t\"sake\": 8693,\n\t\"Covid\": 13808,\n\t\"Wakare\": 4737,\n\t\"omnibus\": 21651,\n\t\"Consciousness\": 24049,\n\t\"testified\": 13731,\n\t\"ADDRESS\": 29954,\n\t\"punctual\": 28946,\n\t\"formally\": 8318,\n\t\"presid...@whitehouse.gov\": 24390,\n\t\"outsider\": 31597,\n\t\"drunker\": 32458,\n\t\"exponential\": 32775,\n\t\"Para13\": 22313,\n\t\"Argentina\": 924,\n\t\"pets\": 25094,\n\t\"printed\": 4443,\n\t\"-FINAL.doc\": 21503,\n\t\"fairway\": 30965,\n\t\"streets\": 9158,\n\t\"70's\": 27265,\n\t\"Sasquatch\": 25023,\n\t\"nets\": 9441,\n\t\"choramine\": 27869,\n\t\"poorest\": 20420,\n\t\"reveals\": 1698,\n\t\"harsh\": 8245,\n\t\"graveyard\": 9223,\n\t\"backwards\": 9003,\n\t\"characteristics\": 328,\n\t\"naughty\": 8617,\n\t\"tales\": 9924,\n\t\"hurry\": 11408,\n\t\"ethicities\": 27263,\n\t\"re-purpose\": 14546,\n\t\"seclusion\": 27924,\n\t\"circumscribed\": 30329,\n\t\"buses\": 16521,\n\t\"3,800\": 2414,\n\t\"Cuz\": 16029,\n\t\"monk\": 5941,\n\t\"persuade\": 12765,\n\t\"soy\": 17843,\n\t\"attainment\": 15236,\n\t\"Lawrence\": 10915,\n\t\"residence\": 16840,\n\t\"immortalized\": 5293,\n\t\"Gerald\": 5708,\n\t\"subdomains\": 2505,\n\t\"ate\": 8750,\n\t\"Porch\": 21078,\n\t\"Useful\": 26384,\n\t\"Arthur's\": 10949,\n\t\"speculated\": 3967,\n\t\"Issues\": 29403,\n\t\"Older\": 8464,\n\t\"Hegelian\": 14915,\n\t\"Behavioral\": 3656,\n\t\"prolific\": 5414,\n\t\"fake\": 1339,\n\t\"Egyptian\": 20290,\n\t\"Reviews\": 2375,\n\t\"unenlightened\": 32915,\n\t\"Show\": 30030,\n\t\"processor\": 7685,\n\t\"deck\": 8811,\n\t\"alignment\": 14534,\n\t\"Tools\": 30195,\n\t\"raiser\": 24526,\n\t\"oral\": 31407,\n\t\"insane\": 10723,\n\t\"Islamists\": 19296,\n\t\"collapsible\": 30342,\n\t\"constructivist\": 3071,\n\t\"Emotion\": 15020,\n\t\"translations\": 5663,\n\t\"Albert\": 6054,\n\t\"dislike\": 9538,\n\t\"Knitters\": 7763,\n\t\"mimicked\": 10566,\n\t\"dough\": 21903,\n\t\"unfaithful\": 14397,\n\t\"earth\": 5053,\n\t\"3,000\": 7888,\n\t\"Small\": 19979,\n\t\"consequences\": 828,\n\t\"Deco\": 17417,\n\t\"illwill\": 14039,\n\t\"unexercised\": 20993,\n\t\"populace\": 30670,\n\t\"Paine’s\": 7970,\n\t\"testament\": 3991,\n\t\"BROWNING\": 11796,\n\t\"Odense\": 17240,\n\t\"inquisitive\": 19361,\n\t\"Denton\": 23539,\n\t\"ah\": 6309,\n\t\"4861\": 23073,\n\t\"SMSU\": 21743,\n\t\"Dutchman\": 11426,\n\t\"reapply\": 26465,\n\t\"dare\": 10141,\n\t\"reschedule\": 23215,\n\t\"Cultural\": 15423,\n\t\"IPA\": 29348,\n\t\"1851\": 4439,\n\t\"Aid\": 13424,\n\t\"sheesh\": 27769,\n\t\"D7000\": 27163,\n\t\"opener\": 19960,\n\t\"timeframes\": 22229,\n\t\"Examples\": 15597,\n\t\"Fisher\": 14553,\n\t\"centrally\": 27424,\n\t\"dealship\": 28853,\n\t\"lettuce\": 27438,\n\t\"ominously\": 30966,\n\t\"persistently\": 25004,\n\t\"protect\": 795,\n\t\"milks\": 26895,\n\t\"expertly\": 28921,\n\t\"lamb\": 29991,\n\t\"haven\": 8944,\n\t\"Historic\": 16324,\n\t\"implemented\": 815,\n\t\"Hayek\": 7847,\n\t\"fail\": 11266,\n\t\"grief\": 8712,\n\t\"shredded\": 9848,\n\t\"Flora\": 17219,\n\t\"Charm\": 32209,\n\t\"McCartney\": 25644,\n\t\"wash\": 9084,\n\t\"convulsed\": 25707,\n\t\"ipsa\": 5079,\n\t\"Delightful\": 28984,\n\t\"stirs\": 31013,\n\t\"Williamson\": 728,\n\t\"ans\": 4062,\n\t\"verbally\": 2010,\n\t\"cracking\": 9031,\n\t\"representations\": 183,\n\t\"fantasy\": 4194,\n\t\"currant\": 16229,\n\t\"1.1\": 15265,\n\t\"programs\": 15124,\n\t\"Election\": 12377,\n\t\"cocked\": 25887,\n\t\"Salinity\": 2548,\n\t\"Jacques\": 9224,\n\t\"volunteered\": 23454,\n\t\"Gapinski\": 20974,\n\t\"spells\": 32184,\n\t\"finance\": 4536,\n\t\"1355\": 16586,\n\t\"gesticulating\": 30521,\n\t\"leaps\": 7800,\n\t\"PLUS\": 29561,\n\t\"328\": 5947,\n\t\"excluded\": 18546,\n\t\"fingered\": 23352,\n\t\"Kreyol\": 16696,\n\t\"saviour\": 26108,\n\t\"unquantified\": 32590,\n\t\"Atwood\": 12540,\n\t\"commandment\": 32731,\n\t\"reconciliation\": 3176,\n\t\"arrange\": 17278,\n\t\"parallel\": 655,\n\t\"marine\": 2549,\n\t\"3.1\": 5186,\n\t\"possessed\": 3388,\n\t\"Ahmad\": 18547,\n\t\"Shawna\": 23359,\n\t\"observers\": 18537,\n\t\"Phet\": 29801,\n\t\"cries\": 27699,\n\t\"marry\": 20000,\n\t\"devils\": 31213,\n\t\"Coruña\": 2242,\n\t\"speculator\": 14787,\n\t\"tempers\": 22781,\n\t\"circulated\": 21327,\n\t\"terrorists\": 11189,\n\t\"procrastination\": 18250,\n\t\"supportive\": 396,\n\t\"Ukrops\": 29249,\n\t\"Experiment\": 17905,\n\t\"businessmen\": 11531,\n\t\"Declaration\": 13887,\n\t\"clink\": 31186,\n\t\"passing\": 3312,\n\t\"90s\": 19894,\n\t\"counter\": 6333,\n\t\"acquittal\": 3962,\n\t\"Hmm\": 6460,\n\t\"arc\": 15551,\n\t\"Ličen\": 10834,\n\t\"Lemon\": 6710,\n\t\"201\": 16558,\n\t\"Winning\": 11065,\n\t\"blinked\": 19927,\n\t\"enamel\": 32447,\n\t\"positing\": 17688,\n\t\"investigación\": 2239,\n\t\"undisputed\": 20398,\n\t\"rudely\": 28671,\n\t\"feature\": 850,\n\t\"interrogated\": 12288,\n\t\"02:42\": 22744,\n\t\"currency\": 8629,\n\t\"uncut\": 27844,\n\t\"Speed\": 17321,\n\t\"411507\": 21389,\n\t\"reduce\": 13049,\n\t\"Serve\": 18387,\n\t\"Cluster\": 23040,\n\t\"awkwardly\": 31692,\n\t\"typos\": 26462,\n\t\"Flourish\": 32340,\n\t\"colleges\": 15647,\n\t\"mooring\": 32777,\n\t\"mimic\": 1236,\n\t\"watering\": 8979,\n\t\"Larry\": 10960,\n\t\"equine\": 26120,\n\t\"Janell\": 23587,\n\t\"THAT'S\": 24992,\n\t\"resigned\": 12448,\n\t\"crusader\": 20664,\n\t\"Casinos\": 24428,\n\t\"slaves\": 14673,\n\t\"chop\": 15780,\n\t\"respective\": 13922,\n\t\"recreating\": 2910,\n\t\"offsets\": 10789,\n\t\"sunny\": 11455,\n\t\"Madame\": 5197,\n\t\"drained\": 17743,\n\t\"crane\": 12250,\n\t\"Pamplona\": 27525,\n\t\"didn't\": 6051,\n\t\"dispute\": 7176,\n\t\"cracker\": 29748,\n\t\"turgid\": 32735,\n\t\"fellas\": 32844,\n\t\"1853\": 4440,\n\t\"SALLY\": 11795,\n\t\"ARCO's\": 22561,\n\t\"headaches\": 4752,\n\t\"delegation\": 11473,\n\t\"Stuff\": 28866,\n\t\"amendments\": 31413,\n\t\"hiring\": 10699,\n\t\"compatibility\": 2219,\n\t\"estimated\": 7143,\n\t\"fruits\": 8056,\n\t\"disrepair\": 19854,\n\t\"i'll\": 26975,\n\t\"Mechanics\": 28998,\n\t\"Sizzle\": 15788,\n\t\"stakes\": 7458,\n\t\"http://www.flickr.com/photos/adamtolle/6094960940/in/set-72157627535453128/\": 26615,\n\t\"incensed\": 9141,\n\t\"bathing\": 29520,\n\t\"sky\": 8887,\n\t\"translator\": 5670,\n\t\"21,600\": 25764,\n\t\"befuddled\": 20151,\n\t\"mL\": 18412,\n\t\"out\": 598,\n\t\"stomach\": 9334,\n\t\"water-melon\": 32887,\n\t\"25.1\": 2950,\n\t\"Machina\": 8451,\n\t\"charitable\": 5887,\n\t\"scoured\": 9175,\n\t\"Re-evaluate\": 18256,\n\t\"USE\": 28399,\n\t\"realization\": 8758,\n\t\"violates\": 7451,\n\t\"burst\": 8946,\n\t\"administrator\": 14684,\n\t\"UCAS\": 26122,\n\t\"hoped\": 1336,\n\t\"institutions\": 717,\n\t\"Nacer\": 13119,\n\t\"I'm\": 5249,\n\t\"learned\": 5025,\n\t\"restraint\": 14242,\n\t\"type\": 685,\n\t\"injured\": 11037,\n\t\"entree\": 28819,\n\t\"brag\": 31001,\n\t\"Canada\": 10858,\n\t\"Rudolf\": 4453,\n\t\"endowment\": 14186,\n\t\"gallon\": 18424,\n\t\"Whereas\": 13706,\n\t\"Nasser's\": 30676,\n\t\"minimum\": 10824,\n\t\"Hooser\": 23771,\n\t\"exulting\": 30557,\n\t\"hesitate\": 22233,\n\t\"enrichment\": 847,\n\t\"livid\": 32086,\n\t\"integral\": 16713,\n\t\"pie\": 10584,\n\t\"discomfiture\": 30586,\n\t\"effacing\": 31596,\n\t\"View\": 12222,\n\t\"Single\": 4147,\n\t\"regret\": 14421,\n\t\"prolong\": 24847,\n\t\"gingerly\": 32239,\n\t\"hookless\": 27139,\n\t\"library\": 9838,\n\t\"Hambali\": 20650,\n\t\"Jurek\": 29615,\n\t\"hotheads\": 20417,\n\t\"Supporting\": 2392,\n\t\"l-\": 6272,\n\t\"argue\": 2907,\n\t\"nor\": 2189,\n\t\"prosecution\": 19408,\n\t\"connects\": 15460,\n\t\"lasping\": 30496,\n\t\"Marriott\": 15112,\n\t\"Robinson's\": 19945,\n\t\"Presentation\": 21191,\n\t\"dined\": 28894,\n\t\"faded\": 8759,\n\t\"Carriles\": 19343,\n\t\"Scampi\": 29797,\n\t\"compact\": 2050,\n\t\"connotations\": 8189,\n\t\"itty\": 6273,\n\t\"biologist\": 25028,\n\t\"neither\": 940,\n\t\"Denmark\": 17211,\n\t\"Answered\": 24457,\n\t\"Quebec\": 24105,\n\t\"rhetorical\": 5020,\n\t\"gouging\": 23336,\n\t\"perpetrated\": 12849,\n\t\"homer\": 4884,\n\t\"agrees\": 21366,\n\t\"Conference\": 11415,\n\t\"recommending\": 12976,\n\t\"affecting\": 25125,\n\t\"Nos\": 31382,\n\t\"Skip\": 28172,\n\t\"steel\": 6459,\n\t\"i'm\": 22556,\n\t\"Benin\": 16476,\n\t\"French\": 1730,\n\t\"Many\": 2666,\n\t\"assisting\": 5973,\n\t\"Lock\": 24013,\n\t\"blah\": 15741,\n\t\"deleterious\": 32953,\n\t\"maintains\": 7439,\n\t\"Guardian\": 4485,\n\t\"glut\": 9472,\n\t\"Corps\": 3558,\n\t\"murmured\": 31271,\n\t\"9\": 1442,\n\t\"Agencies\": 24730,\n\t\"Ultraviolet\": 2192,\n\t\"manufacturer\": 21216,\n\t\"bodyworker\": 28375,\n\t\"over-rated\": 28524,\n\t\"offs\": 25020,\n\t\"Cate\": 24669,\n\t\"07/30/2001\": 21070,\n\t\"R.I\": 24799,\n\t\"directly\": 346,\n\t\"Eleuthra\": 23238,\n\t\"association\": 13228,\n\t\"bodice\": 30014,\n\t\"Truth\": 19244,\n\t\"statutes\": 7620,\n\t\"Performance\": 21229,\n\t\"Dunn\": 23647,\n\t\"drving\": 30021,\n\t\"museums\": 7464,\n\t\"JMB\": 23260,\n\t\"abhorrent\": 14404,\n\t\"consuming\": 10658,\n\t\"apologetically\": 31698,\n\t\"rich\": 2980,\n\t\"abiding\": 19867,\n\t\"supposed\": 3925,\n\t\"anal\": 10496,\n\t\"Nomination\": 24703,\n\t\"regreted\": 28669,\n\t\"humanatarian\": 24520,\n\t\"Holocaust\": 14372,\n\t\"re-invest\": 8120,\n\t\"Turk\": 27499,\n\t\"expanding\": 426,\n\t\"bared\": 31968,\n\t\"bound\": 9578,\n\t\"http://dianacamera.com\": 26542,\n\t\"Nepal\": 19525,\n\t\"confiscated\": 7642,\n\t\"11:15:11\": 23816,\n\t\"Depression\": 25856,\n\t\"reinforces\": 10863,\n\t\"naw\": 6099,\n\t\"Para.\": 22301,\n\t\"Jagger\": 25624,\n\t\"smeared\": 8825,\n\t\"flavors\": 16190,\n\t\"c.l.h.warwick@durham.ac.uk\": 30,\n\t\"killie\": 27876,\n\t\"Controls\": 30214,\n\t\"owned\": 12804,\n\t\"de'\": 27111,\n\t\"Gran'\": 31106,\n\t\"Baking\": 32211,\n\t\"Burkes\": 32280,\n\t\"unspecified\": 25179,\n\t\"CDG\": 26600,\n\t\"freakin\": 27574,\n\t\"Lanka's\": 19077,\n\t\"Walloch\": 21142,\n\t\"pipefitters\": 23170,\n\t\"thundering\": 32632,\n\t\"lull\": 12886,\n\t\"borough\": 16583,\n\t\"account\": 3404,\n\t\"holocaust\": 20448,\n\t\"France\": 957,\n\t\"Le\": 28287,\n\t\"dais\": 31818,\n\t\"Package\": 28067,\n\t\"start\": 2175,\n\t\"Hassan\": 12227,\n\t\"Co-founder\": 12223,\n\t\"lest\": 9491,\n\t\"Overall\": 14891,\n\t\"earning\": 4139,\n\t\"lids\": 18063,\n\t\"relaxes\": 24631,\n\t\"Price\": 21643,\n\t\"quill\": 32327,\n\t\"protects\": 14166,\n\t\"xferring\": 21088,\n\t\"stranded\": 27716,\n\t\"moved\": 3144,\n\t\"Mm\": 6037,\n\t\"Tell\": 6210,\n\t\"Pointe\": 16657,\n\t\"hillocks\": 10029,\n\t\"Evangelical\": 5594,\n\t\"Fuji\": 26938,\n\t\"recipients\": 556,\n\t\"brings\": 171,\n\t\"jewel\": 17176,\n\t\"flicker\": 27214,\n\t\"mother’s\": 9528,\n\t\"dharmad...@gmail.com\": 24027,\n\t\"Invisible\": 6927,\n\t\"ritual\": 15312,\n\t\"chinatown\": 29028,\n\t\"1973\": 3487,\n\t\"04/04/2001\": 22572,\n\t\"smugglers\": 12177,\n\t\"391,000\": 17403,\n\t\"raft\": 8958,\n\t\"feared\": 15412,\n\t\"Corporation\": 12829,\n\t\"strawberries\": 8234,\n\t\"bdr\": 29610,\n\t\"public-relations\": 30655,\n\t\"REPORT\": 11493,\n\t\"Boiled\": 27621,\n\t\"At\": 1370,\n\t\"anti-India\": 19565,\n\t\"Azzam\": 20860,\n\t\"noise\": 7779,\n\t\"sofa\": 29827,\n\t\"abstinence\": 26068,\n\t\"distemper\": 7033,\n\t\"1251\": 22006,\n\t\"slick\": 9693,\n\t\"M-m\": 7046,\n\t\"03/02/2001\": 21594,\n\t\"Sh-\": 7025,\n\t\"Iraq's\": 19889,\n\t\"Navigating\": 8336,\n\t\"alma\": 26017,\n\t\"endanger\": 11192,\n\t\"duel\": 3883,\n\t\"Elaine\": 13333,\n\t\"condor\": 9451,\n\t\"Trump\": 12100,\n\t\"afore\": 25655,\n\t\"pollutes\": 30847,\n\t\"groupings\": 15025,\n\t\"Intelligencer\": 24317,\n\t\"sheik's\": 20842,\n\t\"Parliament\": 7256,\n\t\"disregard\": 15090,\n\t\"saluted\": 31848,\n\t\"sprawled\": 12533,\n\t\"Clauses\": 22231,\n\t\"chewed\": 28006,\n\t\"Sirae\": 19610,\n\t\"11-20-2000\": 23813,\n\t\"PR\": 23943,\n\t\"dinner's\": 32072,\n\t\"Mariner\": 27491,\n\t\"remember\": 6065,\n\t\"popes\": 25515,\n\t\"punch\": 11115,\n\t\"thy\": 20118,\n\t\"petrol\": 24563,\n\t\"heated\": 26883,\n\t\"calcium\": 27893,\n\t\"Barrett\": 14453,\n\t\"system\": 540,\n\t\"Khattab\": 18621,\n\t\"Southampton\": 32462,\n\t\"Twenty\": 6044,\n\t\"dusty\": 8900,\n\t\"startled\": 10085,\n\t\"Reactive\": 10296,\n\t\"Dessert\": 29168,\n\t\"Me\": 4108,\n\t\"Ryder\": 4116,\n\t\"Ahmadinejad\": 20248,\n\t\"Conquest\": 20567,\n\t\"oz\": 18436,\n\t\"fastened\": 30470,\n\t\"PSP\": 26782,\n\t\"Micro\": 24191,\n\t\"specific\": 41,\n\t\"Chu\": 12380,\n\t\"oak\": 11970,\n\t\"sustainable\": 16408,\n\t\"Twante\": 19604,\n\t\"sprits\": 30889,\n\t\"Announcing\": 14388,\n\t\"Often\": 5048,\n\t\"gorse\": 25574,\n\t\"safest\": 27223,\n\t\"neutral\": 7278,\n\t\"hoarier\": 30633,\n\t\"crests\": 9070,\n\t\"Adelle\": 11700,\n\t\"Beside\": 17174,\n\t\"NWP\": 21304,\n\t\"media's\": 19918,\n\t\"Shee\": 28027,\n\t\"Val\": 23550,\n\t\"wile\": 27579,\n\t\"unspeakably\": 25820,\n\t\"XP\": 12800,\n\t\"Surrey\": 26124,\n\t\"Distinguish\": 14991,\n\t\"March\": 2125,\n\t\"Ginger\": 21754,\n\t\"Mixed\": 28534,\n\t\"pavements\": 32658,\n\t\"securing\": 4394,\n\t\"1947\": 3457,\n\t\"70th\": 30246,\n\t\"exceptionally\": 14346,\n\t\"mountaineering\": 10021,\n\t\"rapacity\": 31289,\n\t\"Terrell\": 19383,\n\t\"http://www.chernobyl.info/en\": 18714,\n\t\"-2-F.doc\": 21506,\n\t\"girlfriend\": 8868,\n\t\"minicab\": 20763,\n\t\"Martyrs\": 20858,\n\t\"post-Chavez\": 19373,\n\t\"2,210\": 25816,\n\t\"flexibiltiy\": 22718,\n\t\"2/7/2005\": 23950,\n\t\"stared\": 31197,\n\t\"relatedness\": 2889,\n\t\"Napa\": 28674,\n\t\"Suilen\": 2230,\n\t\"Guilds\": 24252,\n\t\"preparations\": 18583,\n\t\"gun\": 9544,\n\t\"Credit's\": 22525,\n\t\"k\": 21018,\n\t\"settlers\": 14674,\n\t\"useless\": 9768,\n\t\"striking\": 1754,\n\t\"Sonya\": 21069,\n\t\"unfair\": 8414,\n\t\"furze\": 31704,\n\t\"theorized\": 12744,\n\t\"programmed\": 20246,\n\t\"Earthquakes\": 26959,\n\t\"Vienna\": 19144,\n\t\"blower\": 27316,\n\t\"lobbed\": 25897,\n\t\"571-9571\": 21082,\n\t\"law's\": 32803,\n\t\"Alfred\": 4047,\n\t\"shore\": 9406,\n\t\"Duncan\": 22799,\n\t\"standard\": 1691,\n\t\"Fabo\": 952,\n\t\"attachment\": 21227,\n\t\"opposites\": 32380,\n\t\"explicitly\": 13733,\n\t\"youngsters\": 18588,\n\t\"fifth\": 12946,\n\t\"icing\": 17834,\n\t\"misty\": 30981,\n\t\"basketball\": 10856,\n\t\"implant\": 9519,\n\t\"puppy\": 9742,\n\t\"poll\": 12677,\n\t\"penetrated\": 20401,\n\t\"wreck\": 29898,\n\t\"Ramadi\": 18627,\n\t\"QLD\": 24948,\n\t\"working\": 1512,\n\t\"Note\": 10767,\n\t\"Humans\": 14812,\n\t\"bellow\": 32159,\n\t\"cute\": 5764,\n\t\"widgets\": 8063,\n\t\"Aztecs\": 15357,\n\t\"Hyundai\": 29549,\n\t\"constructs\": 2541,\n\t\"agreeing\": 12298,\n\t\"PADILLA\": 14351,\n\t\"pairs\": 12087,\n\t\"yearning\": 14190,\n\t\"Freshly\": 18388,\n\t\"eThink\": 21541,\n\t\"popularly\": 24150,\n\t\"19:14\": 24469,\n\t\"desperately\": 8456,\n\t\"Transmission\": 21047,\n\t\"281-518-1081\": 22138,\n\t\"tame\": 26818,\n\t\"Write\": 5870,\n\t\"url\": 24893,\n\t\"revealed\": 5902,\n\t\"flabby\": 31215,\n\t\"SCREENS\": 11863,\n\t\"Cochin\": 4029,\n\t\"07/19/2001\": 22818,\n\t\"casting\": 7065,\n\t\"+1918584-4428\": 17450,\n\t\"positions\": 17661,\n\t\"acceptable\": 6578,\n\t\"organization\": 486,\n\t\"diachronic\": 1085,\n\t\"Islamic\": 12237,\n\t\"faction\": 20565,\n\t\"Comparison\": 26691,\n\t\"Diagram\": 15609,\n\t\"upstage\": 14348,\n\t\"Per\": 21109,\n\t\"television\": 2932,\n\t\"incessant\": 14031,\n\t\"fine\": 581,\n\t\"burden\": 7147,\n\t\"silk\": 8818,\n\t\"blasphemies\": 30452,\n\t\"recipient\": 5380,\n\t\"blogging\": 5222,\n\t\"dissolved\": 18426,\n\t\"spiraled\": 6858,\n\t\"bomb\": 12202,\n\t\"Curve\": 4879,\n\t\"OPENING\": 29696,\n\t\"scar\": 31226,\n\t\"sights\": 17248,\n\t\"Destiny\": 13999,\n\t\"veterans’\": 19247,\n\t\"machines\": 8355,\n\t\"cloak\": 20309,\n\t\"unset\": 26407,\n\t\"sleigh\": 32636,\n\t\"examination\": 3089,\n\t\"Oija\": 7002,\n\t\"Duran\": 13351,\n\t\"cenotaph\": 4071,\n\t\"day\": 2073,\n\t\"bundled\": 31666,\n\t\"Anything\": 6247,\n\t\"deceleration\": 30383,\n\t\"projectile\": 31126,\n\t\"Controller\": 21334,\n\t\"chases\": 27218,\n\t\"wastes\": 2178,\n\t\"above\": 1164,\n\t\"thrown\": 9904,\n\t\"Laird\": 22473,\n\t\"nasty\": 26134,\n\t\"SCIRI\": 25743,\n\t\"trooper\": 4281,\n\t\"pacifying\": 27708,\n\t\"onwards\": 3425,\n\t\"unawareness\": 32910,\n\t\"entire\": 623,\n\t\"memorized\": 21973,\n\t\"surest\": 25101,\n\t\"psychology\": 116,\n\t\"messing\": 12046,\n\t\"Temecula\": 28693,\n\t\"Hull\": 29170,\n\t\"III\": 14554,\n\t\"cycled\": 31585,\n\t\"Ward\": 29266,\n\t\"Beresford\": 23,\n\t\"voting\": 19255,\n\t\"9.3\": 26053,\n\t\"parentheses\": 23473,\n\t\"profundity\": 3999,\n\t\"Taking\": 3314,\n\t\"nation\": 6320,\n\t\"i'd\": 27584,\n\t\"Prints\": 13304,\n\t\"Charles\": 3501,\n\t\"OAS\": 30606,\n\t\"'ye\": 30987,\n\t\"company’s\": 10886,\n\t\"woodsmoke\": 31681,\n\t\"contraptions\": 31824,\n\t\"travelling\": 9927,\n\t\"lazers\": 26717,\n\t\"overheats\": 6779,\n\t\"cheapest\": 26632,\n\t\"Mutation\": 2225,\n\t\"versions\": 10106,\n\t\"instant\": 13433,\n\t\"Martin’s\": 3044,\n\t\"piping\": 26673,\n\t\"?????\": 20121,\n\t\"MSU\": 28037,\n\t\"laureate\": 16911,\n\t\"Cosmic\": 11344,\n\t\"jihad\": 19129,\n\t\"temperature's\": 15814,\n\t\"case-sensitive\": 30130,\n\t\"Print\": 24925,\n\t\"Cappelletto\": 22515,\n\t\"Complexities\": 22630,\n\t\"girl\": 5432,\n\t\"DRIVE\": 28760,\n\t\"Recent\": 12286,\n\t\"preferring\": 20791,\n\t\"0nside\": 26276,\n\t\"beginners\": 24599,\n\t\"529,000\": 15678,\n\t\"Insights\": 7,\n\t\"Serpent\": 15379,\n\t\"appreciate\": 15734,\n\t\"I’m\": 7728,\n\t\"portends\": 25099,\n\t\"LUCIO\": 25368,\n\t\"Keep\": 5865,\n\t\"reporter's\": 18816,\n\t\"robe\": 8613,\n\t\"512\": 28262,\n\t\"enemies\": 14430,\n\t\"proliferate\": 18952,\n\t\"disintegration\": 25597,\n\t\"suffix\": 18073,\n\t\"Czech\": 22506,\n\t\"noninteractive\": 30142,\n\t\"ahead\": 6340,\n\t\"florist\": 28091,\n\t\"stanza\": 11055,\n\t\"ally\": 18914,\n\t\"steep\": 28558,\n\t\"Lawman\": 26065,\n\t\"04:34\": 22021,\n\t\",\": 19,\n\t\"enlisted\": 4318,\n\t\"Legacy\": 13293,\n\t\"go-\": 6818,\n\t\"establishment\": 931,\n\t\"aerospace\": 16421,\n\t\"acrimony\": 18119,\n\t\"Webber\": 4252,\n\t\"irritates\": 18593,\n\t\"interviewing\": 23364,\n\t\"which\": 196,\n\t\"Kyle.Jones@radianz.com\": 21985,\n\t\"Lovers\": 5481,\n\t\"Alpha\": 20792,\n\t\"488,800\": 15680,\n\t\"http://www.loveallpeople.org/theonereasonwhy.txt\": 24755,\n\t\"CARREAU\": 24782,\n\t\"fecundity\": 31579,\n\t\"OPEC\": 25243,\n\t\"reclamation\": 31738,\n\t\"substituted\": 13071,\n\t\"historically\": 11176,\n\t\"contractor\": 7141,\n\t\"corpus\": 1037,\n\t\"LTTE's\": 19606,\n\t\"gaining\": 8177,\n\t\"crackling\": 30506,\n\t\"2000\": 979,\n\t\"acquisition\": 1944,\n\t\"manipulations\": 2816,\n\t\"sleeve\": 9507,\n\t\"closest\": 5680,\n\t\"FLY\": 29689,\n\t\"confessed\": 19449,\n\t\"House\": 4500,\n\t\"Mhm\": 6378,\n\t\"Bonosus\": 5015,\n\t\"encountered\": 10615,\n\t\"attain\": 23634,\n\t\"Majorca\": 32073,\n\t\"underpinned\": 29217,\n\t\"unbroken\": 32730,\n\t\"strongly\": 355,\n\t\"posing\": 19729,\n\t\"lichen\": 10003,\n\t\"pullback\": 20994,\n\t\"discomfort\": 7780,\n\t\"Hirsch\": 5466,\n\t\"John\": 7841,\n\t\"Jong\": 12864,\n\t\"correcting\": 17693,\n\t\"unique\": 94,\n\t\"curfew\": 18569,\n\t\"petco\": 26591,\n\t\"crafter\": 29539,\n\t\"ruling\": 7460,\n\t\"Gorbachev\": 10401,\n\t\"AFP\": 12162,\n\t\"enough\": 1948,\n\t\"blender\": 17779,\n\t\"Ocean\": 2661,\n\t\"free\": 6572,\n\t\"Quartiles\": 15632,\n\t\"neroli\": 17906,\n\t\"chisaya\": 18355,\n\t\"Campenni\": 19229,\n\t\"stabilization\": 23316,\n\t\"18:32\": 24464,\n\t\"deceit\": 1344,\n\t\"Obudu\": 27534,\n\t\"unhappy\": 3210,\n\t\"she’d\": 8651,\n\t\"Pediatrics\": 1303,\n\t\"stir\": 20016,\n\t\"Flynn\": 9340,\n\t\"envoy\": 19029,\n\t\"Drug\": 19788,\n\t\"fastest\": 25794,\n\t\"c'mon\": 28149,\n\t\"59,339\": 26062,\n\t\"Calculator\": 7042,\n\t\"REWARDED\": 26335,\n\t\"salatim\": 29986,\n\t\"show's\": 5834,\n\t\"Pervez\": 18747,\n\t\"batch\": 8073,\n\t\"Fate\": 32364,\n\t\"eatables\": 27917,\n\t\"Properly\": 17670,\n\t\"Interceptor\": 26003,\n\t\"phoned\": 22141,\n\t\"(\": 219,\n\t\"Milekic\": 268,\n\t\"Isle\": 25008,\n\t\"NASA’s\": 14631,\n\t\"Typically\": 10708,\n\t\"tempura\": 28539,\n\t\"Army\": 3553,\n\t\"motivation\": 15205,\n\t\"strap\": 18194,\n\t\"sapped\": 25864,\n\t\"Liquid\": 6251,\n\t\"CC\": 7668,\n\t\"Laos\": 1847,\n\t\"Guinea\": 27286,\n\t\"dandelions\": 25181,\n\t\"ambiguous\": 30183,\n\t\"NOTEBOOK\": 11925,\n\t\"olds\": 9559,\n\t\"taonga\": 16348,\n\t\"LITTLE\": 21523,\n\t\"mice\": 26249,\n\t\"canopy\": 18200,\n\t\"Tavern\": 28585,\n\t\"aloft\": 14059,\n\t\"Vilt\": 11317,\n\t\"feedback\": 12245,\n\t\"lazily\": 30915,\n\t\"achieved\": 3614,\n\t\"skewer\": 17885,\n\t\"bridges\": 9421,\n\t\"Canadian\": 8418,\n\t\"MEK\": 20064,\n\t\"seat\": 8862,\n\t\"musical\": 11280,\n\t\"Kelowna\": 21290,\n\t\"appliance\": 29317,\n\t\"Wife\": 4162,\n\t\"personified\": 30901,\n\t\"Spikes\": 4869,\n\t\"QuickenLoans\": 16430,\n\t\"blending\": 22691,\n\t\"miscellaneous\": 29544,\n\t\"storybooks\": 8756,\n\t\"REALY\": 28742,\n\t\"Nashville's\": 29740,\n\t\"Home\": 4786,\n\t\"butcher\": 20362,\n\t\"Fincher\": 23140,\n\t\"Emily\": 7666,\n\t\"bear\": 3167,\n\t\"corridor\": 16507,\n\t\"chiro\": 28009,\n\t\"reticence\": 32801,\n\t\"animal's\": 10639,\n\t\"Snbehnke\": 13306,\n\t\"Breakfast\": 10501,\n\t\"FOR\": 11894,\n\t\"forkfuls\": 29988,\n\t\"hacking\": 8290,\n\t\"Temperament\": 24716,\n\t\"search\": 5824,\n\t\"DS\": 26781,\n\t\"disappearance\": 11432,\n\t\"distress\": 32598,\n\t\"Berry's\": 20898,\n\t\"Filner\": 23343,\n\t\"participants\": 235,\n\t\"conced-\": 7609,\n\t\"Independence\": 14670,\n\t\"Ethnocentrism\": 15422,\n\t\"Pretty\": 8779,\n\t\"BUNCH\": 21453,\n\t\"filtering\": 5065,\n\t\"Binderman\": 251,\n\t\")\": 225,\n\t\"interviewed\": 10475,\n\t\"Assuming\": 7507,\n\t\"leaks\": 20897,\n\t\"09\": 25732,\n\t\"Room\": 276,\n\t\"Boston\": 4769,\n\t\"Heagle\": 13478,\n\t\"===================================================\": 21802,\n\t\"++++\": 28805,\n\t\"EXPERIENCES\": 29774,\n\t\"Trafalgar\": 32557,\n\t\"difficulty\": 1422,\n\t\"advantaged\": 26030,\n\t\"navigated\": 32516,\n\t\"broken\": 973,\n\t\"depression\": 5875,\n\t\"Britani\": 20653,\n\t\"bludgers\": 18294,\n\t\"08\": 14391,\n\t\"Clelia\": 32864,\n\t\"spanned\": 27095,\n\t\"mysticism\": 24050,\n\t\"http://v2.cache7.c.bigcache.googleapis.com/static.panoramio.com/photos/original/42661265.jpg?redirect_counter=2\": 26582,\n\t\"6TH\": 29683,\n\t\"'05\": 29713,\n\t\"Northeast\": 16372,\n\t\"1833\": 14703,\n\t\"dusk\": 30960,\n\t\"grog\": 32551,\n\t\"dazzling\": 31677,\n\t\"Thompson\": 13377,\n\t\"mood\": 13551,\n\t\"spared\": 17213,\n\t\"Bataan\": 2062,\n\t\"9:00\": 15801,\n\t\"Hooray\": 21852,\n\t\"4\": 402,\n\t\"government\": 851,\n\t\"Pyramid\": 15376,\n\t\"facilitating\": 29933,\n\t\"html\": 11360,\n\t\"disliked\": 4341,\n\t\"115\": 17094,\n\t\"Jill\": 29167,\n\t\"inalienable\": 24677,\n\t\"20s\": 5459,\n\t\"Powers\": 11421,\n\t\"intent\": 21323,\n\t\"harass\": 23801,\n\t\"Theravada\": 17398,\n\t\"chant\": 18926,\n\t\"Libro\": 25451,\n\t\"language\": 1738,\n\t\"Mobile\": 29338,\n\t\"poison\": 16079,\n\t\"singers\": 11429,\n\t\"causing\": 12685,\n\t\"Claiming\": 15167,\n\t\"Course\": 7008,\n\t\"inquiring\": 18835,\n\t\"03/04/2001\": 22579,\n\t\"reproducing\": 5689,\n\t\"Citizenship\": 26469,\n\t\"Pound\": 25086,\n\t\"CHRIS\": 28579,\n\t\"surgeon\": 18503,\n\t\"referee\": 13083,\n\t\"submit\": 3849,\n\t\"jersey\": 11094,\n\t\"blasted\": 6704,\n\t\"clips\": 28917,\n\t\"Ambassador\": 12073,\n\t\"Montana’s\": 15487,\n\t\"consensus\": 1296,\n\t\"ooze\": 9489,\n\t\"Módulo\": 17009,\n\t\"partial\": 18830,\n\t\"accumulated\": 2560,\n\t\"newsgroups\": 12707,\n\t\"others\": 1002,\n\t\"normally\": 11092,\n\t\"bulbous\": 30613,\n\t\"JANUARY\": 27092,\n\t\"Niklaus\": 3154,\n\t\"organizational\": 22119,\n\t\"Powersports\": 28471,\n\t\"decaying\": 31175,\n\t\"ported\": 26379,\n\t\"SPEECH\": 14300,\n\t\"positioning\": 17691,\n\t\"candidates\": 12387,\n\t\"multi-compartment\": 24809,\n\t\"Holinshed\": 25336,\n\t\"float\": 9025,\n\t\"http://www.netpetshop.co.uk/p-19500-savic-chichi-2-chinchilla-rat-degu-ferret-cage.aspx\": 26873,\n\t\"ministers\": 19261,\n\t\"1381\": 26913,\n\t\"streamed\": 27211,\n\t\"DKK\": 17264,\n\t\"ESTAR\": 2610,\n\t\"Jenkins\": 2939,\n\t\"definitive\": 3860,\n\t\"pages\": 12785,\n\t\"z\": 7114,\n\t\"VIETNAMESE\": 27723,\n\t\"Tikal\": 15390,\n\t\"calligraphic\": 16801,\n\t\"Mohammed's\": 20569,\n\t\"somber\": 30927,\n\t\"http://www.loveallpeople.org/theonereasonwhy.html\": 24754,\n\t\"breakneck\": 32321,\n\t\"certificates\": 14494,\n\t\"Environment\": 25916,\n\t\"prowess\": 16401,\n\t\"plump\": 32198,\n\t\"preparatory\": 31341,\n\t\"rises\": 14048,\n\t\"hibernate\": 27680,\n\t\"bras\": 27292,\n\t\"On\": 819,\n\t\"Reinvestment\": 24489,\n\t\"Allard\": 24806,\n\t\"windfall\": 25319,\n\t\"sternly\": 29972,\n\t\"insatiable\": 24557,\n\t\"goods\": 8151,\n\t\"durable\": 18170,\n\t\"rare\": 7727,\n\t\"abundant\": 15296,\n\t\"cross-breeded\": 16216,\n\t\"Lucas\": 25565,\n\t\"adulterated\": 25585,\n\t\"Thirteenth\": 4742,\n\t\"problem\": 694,\n\t\"rallied\": 27722,\n\t\"concerts\": 11018,\n\t\"walkie\": 27934,\n\t\"relief\": 7649,\n\t\"Climbing\": 32838,\n\t\"2500\": 17300,\n\t\"old-fashioned\": 30321,\n\t\"explicit\": 1865,\n\t\"inches\": 4808,\n\t\"Foundation\": 10780,\n\t\"profound\": 14415,\n\t\"caramel\": 15892,\n\t\"ARVN\": 18492,\n\t\"Opportunity\": 20578,\n\t\"transformations\": 3022,\n\t\"Broadcasting\": 12828,\n\t\"thankfully\": 26979,\n\t\"Christie\": 10932,\n\t\"surprising\": 2825,\n\t\"stupidly\": 30350,\n\t\"Opening\": 13266,\n\t\"unweaponized\": 20683,\n\t\"Them\": 24292,\n\t\"crazy\": 13432,\n\t\"Jorge\": 21625,\n\t\"campaigns\": 2665,\n\t\"parent\": 18690,\n\t\"Coffee\": 18466,\n\t\"older\": 5204,\n\t\"deficiency\": 20047,\n\t\"canon\": 26387,\n\t\"released\": 2182,\n\t\"preliminary\": 3086,\n\t\"It'll\": 6476,\n\t\"Pike\": 24817,\n\t\"scratching\": 9900,\n\t\"arresting\": 20430,\n\t\"Rabbi\": 30526,\n\t\"Hjalmar's\": 31735,\n\t\"content\": 1591,\n\t\"funnels\": 18026,\n\t\"Jérôme\": 5360,\n\t\"Rice@ENRON\": 21182,\n\t\"Freeman\": 24544,\n\t\"Primary\": 22439,\n\t\"Gillman\": 23818,\n\t\"oncoming\": 9005,\n\t\"secret\": 7745,\n\t\"Bowtie\": 29524,\n\t\"tumbled\": 31228,\n\t\"occasions\": 1439,\n\t\"Senator’s\": 10545,\n\t\"Landa\": 15411,\n\t\"brother\": 3534,\n\t\"transmit\": 21000,\n\t\"fulfils\": 1806,\n\t\"Livingston\": 4360,\n\t\"Unreported\": 19085,\n\t\"wellshaped\": 31915,\n\t\"appropriated\": 20193,\n\t\"publishing\": 1325,\n\t\"Fly\": 22198,\n\t\"Petersen\": 13928,\n\t\"Lakes\": 16369,\n\t\"determined\": 213,\n\t\"injure\": 26292,\n\t\"1930s\": 4531,\n\t\"inciting\": 20478,\n\t\"affective\": 193,\n\t\"2008\": 1555,\n\t\"Buddhism\": 17393,\n\t\"courtesy\": 25091,\n\t\"BECAUSE\": 29147,\n\t\"departs\": 30935,\n\t\"baring\": 31983,\n\t\"Spill\": 28088,\n\t\"drumming\": 8964,\n\t\"Sc.\": 25372,\n\t\"He'd\": 6958,\n\t\"fungus\": 10223,\n\t\"wins\": 817,\n\t\"paramilitary\": 18917,\n\t\"Throat\": 26993,\n\t\"lifelong\": 3352,\n\t\"Mix\": 17872,\n\t\"beaten\": 13725,\n\t\"HOUSE\": 11502,\n\t\"Percentage\": 25921,\n\t\"QUESTIONS\": 28394,\n\t\"2008's\": 5812,\n\t\"enemy's\": 12878,\n\t\"multiplied\": 21672,\n\t\"together\": 172,\n\t\"Altman\": 13730,\n\t\"gargling\": 15826,\n\t\"kidnappings\": 18499,\n\t\"Dont\": 27408,\n\t\"valve\": 29920,\n\t\"Autos\": 29337,\n\t\"Jeffrey\": 1403,\n\t\"Garten\": 21767,\n\t\"medicinal\": 31468,\n\t\"reproducibility\": 2460,\n\t\"equipped\": 12907,\n\t\"massacred\": 16274,\n\t\"internet\": 8366,\n\t\"identical\": 1840,\n\t\"prior\": 4046,\n\t\"TIS\": 21102,\n\t\"Diplomacy\": 24767,\n\t\"stratosphere\": 11355,\n\t\"skipper\": 31237,\n\t\"mantids\": 10255,\n\t\"Armies\": 11181,\n\t\"appointment\": 15810,\n\t\"Merseybeat\": 32375,\n\t\"halts\": 26442,\n\t\"warrant\": 18545,\n\t\"non-fiction\": 10382,\n\t\"1980s\": 5609,\n\t\"crumbs\": 6868,\n\t\"Cakes\": 29500,\n\t\"insisted\": 12030,\n\t\"lime\": 15894,\n\t\"web\": 492,\n\t\"sholids\": 6238,\n\t\"Judiciary's\": 7556,\n\t\"brandy\": 31787,\n\t\"Robert\": 4706,\n\t\"Another\": 849,\n\t\"Skull\": 26032,\n\t\"pyjamas\": 30788,\n\t\"emission\": 2668,\n\t\"Naqsh-e\": 16769,\n\t\"10:44\": 23545,\n\t\"Strynø\": 17255,\n\t\"Semantics\": 3719,\n\t\"nephews\": 6788,\n\t\"hills\": 9117,\n\t\"naivety\": 20554,\n\t\"Days\": 5367,\n\t\"dilapidation\": 16936,\n\t\"onshore\": 23410,\n\t\"Changzhou\": 3341,\n\t\"1868\": 4610,\n\t\"Bands\": 24549,\n\t\"event\": 3721,\n\t\"*ss\": 29757,\n\t\"Damasus\": 4984,\n\t\"discontent\": 14689,\n\t\"EnronOnLine\": 23041,\n\t\"Debi\": 28152,\n\t\"Prof.\": 10263,\n\t\"Lover\": 29357,\n\t\"childcare\": 23922,\n\t\"Never\": 6267,\n\t\"Forster\": 22164,\n\t\"Innate\": 14826,\n\t\"55,008\": 21043,\n\t\"trifurcation\": 19118,\n\t\"permission\": 4395,\n\t\"pleasantries\": 17972,\n\t\"Tens\": 24430,\n\t\"inhospitable\": 15301,\n\t\"Montague\": 21489,\n\t\"notebook\": 18257,\n\t\"acquainted\": 25403,\n\t\"conjunctions\": 32585,\n\t\"Assembly\": 13846,\n\t\"syntax\": 3662,\n\t\"treasure\": 16354,\n\t\"Phonologie\": 3440,\n\t\"You\": 4109,\n\t\"condemn\": 20451,\n\t\"pH\": 18016,\n\t\"Kroeker\": 2487,\n\t\"Working\": 18272,\n\t\"once\": 5129,\n\t\"intelligence's\": 19572,\n\t\"bottomless\": 31761,\n\t\"Specializing\": 4607,\n\t\"world’s\": 7875,\n\t\"thrashed\": 29102,\n\t\"Eat\": 16623,\n\t\"glazed\": 15883,\n\t\"Windsor\": 28030,\n\t\"Apart\": 18982,\n\t\"Wang\": 26718,\n\t\"aesthetics\": 7710,\n\t\"co-op\": 15745,\n\t\"Isfahan\": 16723,\n\t\"rips\": 32123,\n\t\"Talbott\": 19106,\n\t\"?!?\": 28904,\n\t\"Language\": 1034,\n\t\"yonder\": 10035,\n\t\"Starry\": 12504,\n\t\"marks\": 18123,\n\t\"increased\": 831,\n\t\"ballroom\": 13561,\n\t\"Alpine\": 5611,\n\t\"queerly\": 30630,\n\t\"policemen\": 32393,\n\t\"freeze\": 17089,\n\t\"allows\": 1317,\n\t\"clientelage\": 18549,\n\t\"Suite\": 21295,\n\t\"allegory\": 10150,\n\t\"sense\": 1208,\n\t\"Otters\": 17227,\n\t\"300\": 18444,\n\t\"Tre\": 27558,\n\t\"Principal\": 28859,\n\t\"peace\": 6911,\n\t\"ornamented\": 10047,\n\t\"Nawaz\": 18853,\n\t\"hygiene\": 27333,\n\t\"chairs\": 3218,\n\t\"armed\": 14237,\n\t\"Historically\": 16341,\n\t\"zone\": 10414,\n\t\"Basya\": 12149,\n\t\"ourselves\": 7241,\n\t\"determines\": 30207,\n\t\"summoned\": 31721,\n\t\"49th\": 14333,\n\t\"Utah\": 20003,\n\t\"commented\": 6552,\n\t\"differences\": 593,\n\t\"preparedness\": 19007,\n\t\"enron\": 22924,\n\t\"focal\": 920,\n\t\"searches\": 10548,\n\t\"Dorsey\": 22977,\n\t\"Deb\": 28282,\n\t\"nerf\": 21832,\n\t\"networking\": 27669,\n\t\"Diglipur\": 19541,\n\t\"antecedent\": 1151,\n\t\"Frisco\": 17486,\n\t\"rushing\": 18185,\n\t\"paper\": 88,\n\t\"finches\": 27782,\n\t\"blossoming\": 24047,\n\t\"organisation\": 4530,\n\t\"11:23\": 23211,\n\t\"Gobierno\": 17017,\n\t\"03:58\": 22123,\n\t\"Original\": 2341,\n\t\"grammars\": 3756,\n\t\"perfectly\": 2707,\n\t\"academia\": 1372,\n\t\"Tax\": 21095,\n\t\"manufacturers\": 25798,\n\t\"serotonin\": 13583,\n\t\"tooth\": 7012,\n\t\"Jessica\": 7527,\n\t\"Einstein’s\": 15537,\n\t\"mad\": 8837,\n\t\"Chloe\": 23235,\n\t\"we've\": 7043,\n\t\"evict\": 14715,\n\t\"UNIX\": 24213,\n\t\"muttering\": 31277,\n\t\"hmm\": 29483,\n\t\"Mathematically\": 3319,\n\t\"maid\": 11817,\n\t\"encircled\": 20537,\n\t\"Meditation\": 24183,\n\t\"modernizing\": 25779,\n\t\"1972\": 4551,\n\t\"JUI\": 19698,\n\t\"747\": 30528,\n\t\"Gemini\": 25266,\n\t\"astronomy\": 14628,\n\t\"Confirmations\": 21630,\n\t\"cocktails\": 18419,\n\t\"La.\": 19443,\n\t\"predictable\": 15086,\n\t\"fulfilled\": 5060,\n\t\"lacked\": 18813,\n\t\"Ramzi\": 20639,\n\t\"conned\": 27034,\n\t\"Lessons\": 18678,\n\t\"arterials\": 17466,\n\t\"SQL\": 24199,\n\t\"uncovered\": 1345,\n\t\"rums\": 16716,\n\t\"married\": 3971,\n\t\"scholastic\": 6538,\n\t\"Tournament\": 10997,\n\t\"PT\": 24020,\n\t\"conferred\": 31581,\n\t\"Anton\": 19027,\n\t\"Rusted\": 27224,\n\t\"seven\": 1669,\n\t\"thunder\": 32155,\n\t\"LTTE\": 18981,\n\t\"saw\": 6092,\n\t\"deducting\": 22692,\n\t\"diarrhea\": 27457,\n\t\"Transformation\": 30100,\n\t\"overwhelm\": 25860,\n\t\"Focus\": 18254,\n\t\"hospitality\": 14856,\n\t\"Elsevier’s\": 1351,\n\t\"peculiar\": 9944,\n\t\"flavor\": 8181,\n\t\"yours\": 12048,\n\t\"emancipate\": 27730,\n\t\"Parliament's\": 7255,\n\t\"Tzu\": 27386,\n\t\"Newcomer\": 4828,\n\t\"Upper\": 16508,\n\t\"corner\": 4584,\n\t\"frightens\": 17612,\n\t\"pleure\": 4049,\n\t\"chefs\": 8124,\n\t\"forbade\": 14733,\n\t\"….\": 10742,\n\t\"Øhav\": 17201,\n\t\"Synge\": 32823,\n\t\"3\": 382,\n\t\"targeting\": 22374,\n\t\"death-speckled\": 30761,\n\t\"restricting\": 870,\n\t\"wonderful\": 5442,\n\t\"dollars\": 6040,\n\t\"dyed\": 27904,\n\t\"9:46\": 15872,\n\t\"Mature\": 27041,\n\t\"cybernetic\": 8388,\n\t\"enjoys\": 16746,\n\t\"Gospel\": 5169,\n\t\"cockles\": 9058,\n\t\"Help\": 24011,\n\t\"antiquity\": 1098,\n\t\"Hom\": 29816,\n\t\"detour\": 32785,\n\t\"mischievous\": 17929,\n\t\"His\": 1186,\n\t\"Hydraulica\": 3173,\n\t\"Throughout\": 711,\n\t\"Same\": 21128,\n\t\"Consumption\": 2114,\n\t\"contemplate\": 18222,\n\t\"SAMPLE.DOC\": 21721,\n\t\"Holistic\": 23977,\n\t\"educational\": 7484,\n\t\"NOTICE\": 21686,\n\t\"granddaughter\": 9118,\n\t\"WAITING\": 29661,\n\t\"embarrassing\": 10074,\n\t\"blush\": 16064,\n\t\"beta\": 24247,\n\t\"unwilling\": 18218,\n\t\"officiate\": 24692,\n\t\"Jiabao\": 19175,\n\t\"enters\": 15583,\n\t\"Correct\": 6213,\n\t\"04:52\": 23000,\n\t\"Wolfson\": 30635,\n\t\"Beau\": 16697,\n\t\"Sinh\": 27547,\n\t\"shrugged\": 30292,\n\t\"Kazan\": 5510,\n\t\"girl's\": 15720,\n\t\"continuation\": 11240,\n\t\"Indonesian\": 12140,\n\t\"between\": 121,\n\t\"luxurious\": 17138,\n\t\"Bechtel\": 25993,\n\t\"pedantry\": 25684,\n\t\"winds\": 9009,\n\t\"solution\": 2101,\n\t\"Ærø\": 17313,\n\t\"stations\": 16599,\n\t\"assess\": 153,\n\t\"Leavy\": 18849,\n\t\"Financial\": 20977,\n\t\"causes\": 2362,\n\t\"extracts\": 842,\n\t\"sponsoring\": 24527,\n\t\"Eating\": 26814,\n\t\"designs\": 4501,\n\t\"butter\": 15923,\n\t\"1774\": 3526,\n\t\"KELLY\": 14355,\n\t\"917\": 22013,\n\t\"Prophet\": 20729,\n\t\"liars\": 20446,\n\t\"Horton@ENRON\": 22914,\n\t\"scapes\": 11287,\n\t\"Airborne\": 2658,\n\t\"Polykron\": 22281,\n\t\"mentality\": 17652,\n\t\"greatness\": 14344,\n\t\"ridden\": 6630,\n\t\"GPS\": 13669,\n\t\"salaries\": 15682,\n\t\"Olympus\": 26221,\n\t\"productive\": 11655,\n\t\"raid\": 20502,\n\t\"Really\": 6381,\n\t\"Gatorade\": 15839,\n\t\"misanthropy\": 25708,\n\t\"Ninevah\": 18497,\n\t\"arise\": 7271,\n\t\"shen\": 14889,\n\t\"serpentine\": 7380,\n\t\"fourteen\": 5925,\n\t\"purpose\": 111,\n\t\"Russians\": 4388,\n\t\"491,667\": 12502,\n\t\"local\": 8046,\n\t\"phone\": 8680,\n\t\"glided\": 31033,\n\t\"disentangle\": 8783,\n\t\"and's\": 29469,\n\t\"Fleck\": 15126,\n\t\"LLM\": 13709,\n\t\"covert\": 19393,\n\t\"sentimentality\": 32464,\n\t\"or\": 133,\n\t\"14.2\": 26985,\n\t\"atoms\": 18030,\n\t\"appointees\": 25927,\n\t\"broadly\": 7969,\n\t\"needles\": 29516,\n\t\"Jeju\": 26575,\n\t\"Bonté\": 10122,\n\t\"disorder\": 13560,\n\t\"discouraged\": 18889,\n\t\"Rich\": 23798,\n\t\"teething\": 6750,\n\t\"humanitarian\": 14262,\n\t\"UNSCEAR\": 18651,\n\t\"Slammed\": 6077,\n\t\"Cliffs\": 16526,\n\t\"histories\": 11198,\n\t\"platform\": 1668,\n\t\"badder\": 26371,\n\t\"master's\": 5585,\n\t\"Ferrous\": 22988,\n\t\"supermarkets\": 16591,\n\t\"Michi\": 4738,\n\t\"Tamils\": 18972,\n\t\"flowerbeds\": 32100,\n\t\"bars\": 12317,\n\t\"psychologist\": 10724,\n\t\"Enchantment\": 32210,\n\t\"deduce\": 9647,\n\t\"Outraged\": 14717,\n\t\"Fugitives\": 19994,\n\t\"minutes\": 2852,\n\t\"obsessed\": 13607,\n\t\"battleground\": 7321,\n\t\"overthrough\": 32676,\n\t\"Linguistics\": 3647,\n\t\"unfavorable\": 901,\n\t\"07/17/2000\": 22132,\n\t\"aimlessly\": 30235,\n\t\"bulbs\": 2052,\n\t\"emerged\": 2406,\n\t\"mortality\": 8616,\n\t\"Policy\": 14532,\n\t\"Dylan\": 19868,\n\t\"Seeker\": 18350,\n\t\"oil-fired\": 31555,\n\t\"Wolf\": 5784,\n\t\"unsustainable\": 13019,\n\t\"hiss\": 27698,\n\t\"DB\": 22054,\n\t\"weren’t\": 11147,\n\t\"Habit\": 27973,\n\t\"counteract\": 17610,\n\t\"WASN'T\": 29148,\n\t\"jeering\": 32089,\n\t\"Structuring\": 23765,\n\t\"infidels\": 18634,\n\t\"Barros\": 29073,\n\t\"Miri\": 8468,\n\t\"Jane\": 10929,\n\t\"Aleksei\": 4333,\n\t\"Bonn\": 31499,\n\t\"plentiful\": 11979,\n\t\"guarantee\": 781,\n\t\"instances\": 23920,\n\t\"ratify\": 25918,\n\t\"t'\": 31995,\n\t\"Cardinals\": 4929,\n\t\"Beaters\": 18298,\n\t\"sq\": 29557,\n\t\"underpinning\": 2451,\n\t\"collaborations\": 3808,\n\t\"Mam\": 10078,\n\t\"pebble\": 15620,\n\t\"untouched\": 19866,\n\t\"Company\": 21119,\n\t\"combinations\": 30119,\n\t\"pasture\": 21864,\n\t\"Shawntas\": 15905,\n\t\"rectified\": 29297,\n\t\"1593\": 25402,\n\t\"statistical\": 1680,\n\t\"2003\": 4820,\n\t\"Megumi\": 15879,\n\t\"rapid\": 208,\n\t\"Rachels\": 24870,\n\t\"solicitous\": 29594,\n\t\"Patterson's\": 23800,\n\t\"lopsided\": 28685,\n\t\"with\": 385,\n\t\"bombing\": 18484,\n\t\"91\": 7574,\n\t\"increasing\": 1466,\n\t\"Loss\": 26059,\n\t\"Pervaiz\": 18836,\n\t\"witnesses\": 19959,\n\t\"initiate\": 4037,\n\t\"ulterior\": 20150,\n\t\"Know\": 11082,\n\t\"Cruze\": 29368,\n\t\"bolt\": 32087,\n\t\"Cosplay\": 12613,\n\t\"accordingly\": 21683,\n\t\"Sweetser\": 3795,\n\t\"crows\": 11966,\n\t\"Nonna\": 16111,\n\t\"Constitutional\": 15052,\n\t\"OIR\": 1883,\n\t\"THEO\": 10099,\n\t\"Traffic\": 12749,\n\t\"Appreciation\": 2,\n\t\"accounted\": 12772,\n\t\"tibia\": 7059,\n\t\"Wilkins\": 13283,\n\t\"ringleader\": 20492,\n\t\"11/22/2000\": 22060,\n\t\"Tse\": 12489,\n\t\"Hibernation\": 27685,\n\t\"37th\": 14392,\n\t\"Jenny\": 20856,\n\t\"locks\": 9017,\n\t\"ZEE-no\": 15527,\n\t\"COMM\": 23436,\n\t\"Fragments\": 3905,\n\t\"suitcase\": 20784,\n\t\"malformed\": 12731,\n\t\"dots\": 32554,\n\t\"artificial\": 2729,\n\t\"assortment\": 29545,\n\t\"Imi\": 16346,\n\t\"beneficent\": 25293,\n\t\"uphill\": 9837,\n\t\"my\": 4065,\n\t\"Rotorua\": 26962,\n\t\"Younger\": 27966,\n\t\"Balazick\": 28905,\n\t\"HOTEL\": 29950,\n\t\"Sutcliffe\": 25598,\n\t\"Tenacity\": 25263,\n\t\"Pakistani\": 18749,\n\t\"self-definition\": 32794,\n\t\"Paula\": 20940,\n\t\"A64\": 17566,\n\t\"uncivil\": 31261,\n\t\"aphorisms\": 15249,\n\t\"Germans\": 16928,\n\t\"un\": 12865,\n\t\"thawed\": 24772,\n\t\"Saturday\": 10369,\n\t\"monetary\": 7151,\n\t\"institutionally\": 19972,\n\t\"rods\": 32401,\n\t\"himself\": 3679,\n\t\"Muffs\": 27146,\n\t\"politeness\": 31886,\n\t\"FuelCell\": 21225,\n\t\"http://www.nea.fr/html/rp/chernobyl/c01.html\": 18711,\n\t\"piteous\": 9734,\n\t\"Falernian\": 30994,\n\t\"Son\": 19194,\n\t\"SBA\": 11553,\n\t\"adjudicated\": 7293,\n\t\"pulling\": 9274,\n\t\"meet\": 4616,\n\t\"cheese\": 9186,\n\t\"Younis\": 19722,\n\t\"illusion\": 8391,\n\t\"sandals\": 17374,\n\t\"Stephanie's\": 28707,\n\t\"Mozart\": 31652,\n\t\"roughened\": 2709,\n\t\"attack\": 8068,\n\t\"Philonise\": 14173,\n\t\"circulating\": 19514,\n\t\"Wolności\": 16931,\n\t\"hissing\": 20123,\n\t\"backdated\": 3175,\n\t\"dingy\": 28347,\n\t\"took\": 3634,\n\t\"poetry\": 976,\n\t\"too\": 1986,\n\t\"defending\": 11178,\n\t\"BITCHING\": 11873,\n\t\"brought\": 4292,\n\t\"retirement\": 13208,\n\t\"Bien\": 19198,\n\t\"furious\": 24580,\n\t\"Saffavid\": 16789,\n\t\"Ken's\": 27559,\n\t\"jetty\": 31166,\n\t\"satellite\": 2574,\n\t\"bogus\": 25628,\n\t\"skewering\": 32426,\n\t\"Genevieve\": 5829,\n\t\"commuting\": 12940,\n\t\"footlight\": 32693,\n\t\"Constructions\": 3765,\n\t\"seive\": 18402,\n\t\"commands\": 19165,\n\t\"Corpse\": 20329,\n\t\"majestic\": 16578,\n\t\"Megumi's\": 15878,\n\t\"chasing\": 9725,\n\t\"textbook\": 5623,\n\t\"FREEMAN\": 24535,\n\t\"popularized\": 2937,\n\t\"inadvertently\": 6081,\n\t\"empathized\": 9619,\n\t\"spray\": 15976,\n\t\"FADEL\": 10100,\n\t\"pile\": 16024,\n\t\"dismay\": 29481,\n\t\"infected\": 10220,\n\t\"mumble\": 30353,\n\t\"Herodian\": 30755,\n\t\"mark.carr...@chron.com\": 24826,\n\t\"Namsan\": 26576,\n\t\"reap\": 29814,\n\t\"Independent\": 10236,\n\t\"Dance\": 17656,\n\t\"Dear\": 11401,\n\t\"vlogs\": 15781,\n\t\"acoustic\": 10907,\n\t\"Crossed\": 27157,\n\t\"capsules\": 10649,\n\t\"suffers\": 19796,\n\t\"Ways\": 4740,\n\t\"Gallie\": 11942,\n\t\"prosecutor\": 19942,\n\t\"IHOP\": 29438,\n\t\"Advanced\": 3655,\n\t\"Aside\": 30012,\n\t\"Western\": 10449,\n\t\"Comparing\": 4702,\n\t\"Huh\": 1766,\n\t\"unscreened\": 26024,\n\t\"showroom\": 28418,\n\t\"emptier\": 32874,\n\t\"Aceh\": 12146,\n\t\"Pakistan’s\": 19660,\n\t\"paris\": 26596,\n\t\"encroaches\": 30497,\n\t\"Jealousy\": 17601,\n\t\"Alphabet\": 18098,\n\t\"n-\": 6178,\n\t\"tastings\": 28137,\n\t\"flashing\": 24405,\n\t\"landed\": 5768,\n\t\"inspection\": 26025,\n\t\"Resolution\": 19042,\n\t\"armchairs\": 32799,\n\t\"samples\": 502,\n\t\"fitted\": 17671,\n\t\"04:28\": 22161,\n\t\"retention\": 595,\n\t\"Geneva\": 6608,\n\t\"Chuck\": 13393,\n\t\"community\": 369,\n\t\"**\": 24021,\n\t\"mighty\": 31061,\n\t\"Persians\": 16729,\n\t\"Without\": 6504,\n\t\"974-6721\": 21276,\n\t\"Caspian\": 25841,\n\t\"believer\": 20078,\n\t\"quarter\": 12678,\n\t\"bogging\": 18259,\n\t\"automatic\": 1045,\n\t\"endorse\": 19143,\n\t\"mingled\": 31868,\n\t\"MISS\": 11936,\n\t\"Manic\": 17977,\n\t\"mindlessness\": 30377,\n\t\"invariably\": 32764,\n\t\"coast\": 12141,\n\t\"diplomat\": 19680,\n\t\"sensible\": 11626,\n\t\"traitors\": 19309,\n\t\"wide\": 2965,\n\t\"713-819-2784\": 23631,\n\t\"utter\": 8731,\n\t\"highrise\": 16522,\n\t\"Manager\": 10854,\n\t\"look\": 34,\n\t\"Balanga\": 2065,\n\t\"OK'd\": 22219,\n\t\"shock\": 15479,\n\t\"Mimosas\": 29251,\n\t\"distinguishes\": 7625,\n\t\"łodzianin\": 16884,\n\t\"oath\": 14318,\n\t\"Michaels\": 13663,\n\t\"jaqamofino\": 24505,\n\t\"noting\": 13419,\n\t\"entrepreneurial\": 15058,\n\t\"boarding\": 4549,\n\t\"730\": 28478,\n\t\"were\": 866,\n\t\"NX3\": 21280,\n\t\"FY05\": 24480,\n\t\"fulfilling\": 20114,\n\t\"Banner\": 20813,\n\t\"ecumenical\": 5593,\n\t\"Chinatown\": 27251,\n\t\"nope\": 29246,\n\t\"forks\": 31913,\n\t\"altering\": 2383,\n\t\"SOLVE\": 28763,\n\t\"Satanists\": 20133,\n\t\"distantly\": 8031,\n\t\"dire\": 18864,\n\t\"Town\": 28226,\n\t\"Lawsuits\": 12710,\n\t\"Schmidt\": 2494,\n\t\"sunk\": 9107,\n\t\"chapel\": 19932,\n\t\"Saratoga\": 13322,\n\t\"Better\": 8463,\n\t\"concentrated\": 15587,\n\t\"rainy\": 15858,\n\t\"thumb\": 9850,\n\t\"nobler\": 15532,\n\t\"Shia\": 18598,\n\t\"worshippers\": 13506,\n\t\"11,000\": 13255,\n\t\"PEREGRINate\": 25413,\n\t\"interlopers\": 30952,\n\t\"explosives\": 19388,\n\t\"topics\": 125,\n\t\"improve\": 652,\n\t\"finds\": 7283,\n\t\"Mexico’s\": 14746,\n\t\"youths\": 25705,\n\t\"Bilboa\": 27524,\n\t\"slabs\": 32942,\n\t\"census\": 464,\n\t\"Accountant\": 30906,\n\t\"irregardles\": 11951,\n\t\"justification\": 15182,\n\t\"6:00\": 12818,\n\t\"Justin\": 16139,\n\t\"Side\": 18251,\n\t\"support\": 1775,\n\t\"Cory\": 7655,\n\t\"Melanie\": 21479,\n\t\"leporjj@selectenergy.com\": 23538,\n\t\"Slow\": 8091,\n\t\"Helpers\": 28114,\n\t\"imbecile\": 31288,\n\t\"Aziz\": 18630,\n\t\"reminder\": 1941,\n\t\"Campbell's\": 13421,\n\t\"Guerrillas\": 18494,\n\t\"fiftyfive\": 7960,\n\t\"Adams\": 13392,\n\t\"inject\": 579,\n\t\"PJM\": 21583,\n\t\"averse\": 3053,\n\t\"Arabia’s\": 14239,\n\t\"Reality\": 17619,\n\t\"binary\": 23994,\n\t\"project\": 92,\n\t\"Dependency\": 31756,\n\t\"boat\": 11430,\n\t\"bureaucratic\": 13050,\n\t\"Dior\": 32564,\n\t\"cheap\": 2048,\n\t\"Try\": 6825,\n\t\"kg\": 4813,\n\t\"thrives\": 17192,\n\t\"w/o\": 22043,\n\t\"grandchild\": 21749,\n\t\"Biblically\": 6577,\n\t\"toxic\": 2109,\n\t\"Selah\": 23946,\n\t\"pixie\": 9751,\n\t\"conceived\": 7870,\n\t\"Venetia\": 31589,\n\t\"stenosis\": 29921,\n\t\"resembled\": 12201,\n\t\"homework\": 7009,\n\t\"decks\": 28977,\n\t\"e-mailed\": 22146,\n\t\"anyhow\": 31223,\n\t\"agencies\": 11587,\n\t\"Computer\": 3817,\n\t\"telecommunications\": 13918,\n\t\"print\": 10961,\n\t\"fouling\": 11780,\n\t\"1937\": 5582,\n\t\"exterminator\": 14369,\n\t\"fruitless\": 14952,\n\t\"reproduce\": 2277,\n\t\"products\": 1335,\n\t\"Compositionally\": 27175,\n\t\"Target\": 16001,\n\t\"obligations\": 14080,\n\t\"Rowling\": 18284,\n\t\"junior\": 18552,\n\t\"stalls\": 6780,\n\t\"Theres\": 12724,\n\t\"waterproof\": 27830,\n\t\"glass\": 3301,\n\t\"livable\": 11522,\n\t\"buring\": 21902,\n\t\"blowdry\": 29011,\n\t\"trader\": 14788,\n\t\"Monti\": 13221,\n\t\"river-beds\": 31705,\n\t\"wrestle\": 32486,\n\t\"Jean\": 3275,\n\t\"polluted\": 1241,\n\t\"Hussein\": 18560,\n\t\"cooking\": 15556,\n\t\"rotting\": 31137,\n\t\"Beaches\": 27520,\n\t\"invade\": 20361,\n\t\"nineteenth\": 15257,\n\t\"O'Reilly's\": 10980,\n\t\"Sprague\": 5600,\n\t\"resolve\": 8455,\n\t\"Chardonnay\": 16196,\n\t\"subsides\": 23353,\n\t\"483\": 7332,\n\t\"1982\": 1012,\n\t\"runtime\": 30178,\n\t\"Horror\": 5075,\n\t\"campaign\": 2656,\n\t\"*\": 9261,\n\t\"Finals\": 15870,\n\t\"grad\": 20945,\n\t\"votes\": 12386,\n\t\"rein\": 15114,\n\t\"command\": 4351,\n\t\"unnatural\": 1120,\n\t\"merry-minded\": 30556,\n\t\"Pack\": 6978,\n\t\"LINK\": 15066,\n\t\"Bolshevik\": 30703,\n\t\"jams\": 17585,\n\t\"05:39\": 22568,\n\t\"bitter\": 14979,\n\t\"Warwick\": 29,\n\t\"Soleil\": 16698,\n\t\"soda\": 6249,\n\t\"http://www.arps.org.au/Chernobyl.htm\": 18715,\n\t\"Therefore\": 1869,\n\t\"cheek\": 9659,\n\t\"Viking\": 17539,\n\t\"Farewell\": 24898,\n\t\"boob\": 26635,\n\t\"Max's\": 28095,\n\t\"Oasis\": 25687,\n\t\"upside\": 17810,\n\t\"L'Enfant\": 3502,\n\t\"琴况\": 14879,\n\t\"Concepts\": 15014,\n\t\"craves\": 16171,\n\t\"positively\": 356,\n\t\"picannins\": 31931,\n\t\"booze\": 30787,\n\t\"Whipple\": 24995,\n\t\"MEN\": 11989,\n\t\"07:35\": 23777,\n\t\"likes\": 8516,\n\t\"VICE\": 14593,\n\t\"achievement\": 12058,\n\t\"Sistani\": 18933,\n\t\"recheck\": 7016,\n\t\"Provisions\": 21645,\n\t\"Ortega\": 31372,\n\t\"bella\": 28843,\n\t\"dreadful\": 8857,\n\t\"what’s\": 8367,\n\t\"J.\": 3644,\n\t\"Vergil\": 5074,\n\t\"luv\": 28845,\n\t\"standstill\": 30827,\n\t\"ebb\": 30957,\n\t\"Spaniard\": 25406,\n\t\"COMPANY\": 21528,\n\t\"obstacles\": 8155,\n\t\"grapefruit\": 11684,\n\t\"Asians\": 15280,\n\t\"Spouse(s)\": 5351,\n\t\"Brussels\": 5615,\n\t\"H-0218/97\": 31359,\n\t\"FDR\": 18806,\n\t\"718-780-0276\": 21492,\n\t\"accidental\": 26642,\n\t\"answers\": 9901,\n\t\"disarmament\": 14275,\n\t\"220\": 17273,\n\t\"bun\": 15857,\n\t\"SECOND\": 28754,\n\t\"Franklin\": 21457,\n\t\"Patience\": 26816,\n\t\"microcomputer\": 24209,\n\t\"milking\": 20053,\n\t\"inhabiting\": 5160,\n\t\"Cooker\": 18394,\n\t\"MSNBC\": 20694,\n\t\"4,000\": 16892,\n\t\"basic­ally\": 27811,\n\t\"Welling\": 5751,\n\t\"Mall\": 14314,\n\t\"Golf\": 30148,\n\t\"Across\": 14255,\n\t\"Shrii\": 24033,\n\t\"Stillman\": 30263,\n\t\"Clayton\": 15096,\n\t\"Kerry’s\": 19240,\n\t\"homeless\": 24277,\n\t\"China's\": 3408,\n\t\"Hui\": 12463,\n\t\"600\": 14467,\n\t\"forgetting\": 29157,\n\t\"EOS\": 26396,\n\t\"allegations\": 12830,\n\t\"audible\": 24896,\n\t\"85\": 26087,\n\t\"BLAST\": 27929,\n\t\"Secular\": 18947,\n\t\"righter\": 24827,\n\t\"restrictions\": 2349,\n\t\"Toby\": 22273,\n\t\"subvert\": 30257,\n\t\"77541\": 21890,\n\t\"reactions\": 182,\n\t\"comfort\": 9237,\n\t\"Harold\": 30848,\n\t\"33A\": 17028,\n\t\"stuffing\": 8569,\n\t\"visas\": 12068,\n\t\"observable\": 2544,\n\t\"Tmobile\": 28203,\n\t\"Coppergate\": 17540,\n\t\"12:33\": 21348,\n\t\"patterns\": 2806,\n\t\"Evan\": 22791,\n\t\"Sochi\": 10838,\n\t\"Iran\": 12123,\n\t\"Hopefully\": 11698,\n\t\"S&S\": 23227,\n\t\"unsuspecting\": 9217,\n\t\"Restaurant\": 29905,\n\t\"Authoring\": 30174,\n\t\"mimed\": 32722,\n\t\"blip\": 12783,\n\t\"index\": 10951,\n\t\"Communications\": 10848,\n\t\"stale\": 11960,\n\t\"bn\": 24444,\n\t\"phoenix\": 27756,\n\t\"willingness\": 15436,\n\t\"encounters\": 8505,\n\t\"whisked\": 32117,\n\t\"ME\": 7809,\n\t\"clinic\": 26637,\n\t\"ESAI\": 21585,\n\t\"Cocteau's\": 5473,\n\t\"Petite\": 16652,\n\t\"gingerbread\": 8654,\n\t\"lurid\": 10017,\n\t\"recommendations\": 2518,\n\t\"femora\": 2814,\n\t\"Wootch\": 16858,\n\t\"softener\": 18459,\n\t\"Autumn\": 27812,\n\t\"11/29/2000\": 21986,\n\t\"guz\": 26299,\n\t\"Lam\": 12433,\n\t\"quietly\": 19704,\n\t\"evacuated\": 12881,\n\t\"McGuire\": 10906,\n\t\"Seeing\": 23934,\n\t\"collapse\": 12251,\n\t\"145th\": 17476,\n\t\"Dining\": 27505,\n\t\"environmentalists\": 25939,\n\t\"Auster's\": 30238,\n\t\"examined\": 13460,\n\t\"alright\": 6201,\n\t\"footsteps\": 31187,\n\t\"strut\": 19377,\n\t\"statuette\": 4504,\n\t\"replacing\": 6674,\n\t\"U2\": 11354,\n\t\"Abdullah\": 18469,\n\t\"gamut\": 25192,\n\t\"merit\": 10860,\n\t\"Due\": 2887,\n\t\"pearls\": 16052,\n\t\"alt.animals.horses.breeding\": 24837,\n\t\"Jeez\": 7026,\n\t\"forma\": 22740,\n\t\"Scathalos\": 10080,\n\t\"Tourism\": 12926,\n\t\"students'\": 28727,\n\t\"20001\": 22805,\n\t\"gift\": 3389,\n\t\"advisable\": 9257,\n\t\"dangerous-loiterer\": 30638,\n\t\"430\": 16743,\n\t\"hunh\": 6432,\n\t\"rapidly\": 425,\n\t\"ugly\": 15715,\n\t\"attachments\": 21689,\n\t\"but\": 289,\n\t\"four\": 1677,\n\t\"1.428,000\": 16942,\n\t\"plotting\": 31328,\n\t\"occupancy\": 27237,\n\t\"AG\": 22065,\n\t\"MLB\": 4781,\n\t\"Phantome\": 11428,\n\t\"terrain\": 15606,\n\t\"patchwork\": 32186,\n\t\"Filtered\": 30147,\n\t\"Spiral\": 9774,\n\t\"Laws\": 2429,\n\t\"civilian\": 11047,\n\t\"Robbie\": 6964,\n\t\"saboteurs\": 18513,\n\t\"Buddha\": 31019,\n\t\"Malone\": 31517,\n\t\"Arrogant\": 17588,\n\t\"nonpartisan\": 12383,\n\t\"flicked\": 31793,\n\t\"lintels\": 31602,\n\t\"PA\": 22169,\n\t\"glories\": 31050,\n\t\"Sahhaf\": 18608,\n\t\"vaccine\": 7034,\n\t\"wield\": 24593,\n\t\">=\": 28334,\n\t\"commodity\": 21324,\n\t\"speeding\": 9280,\n\t\"11/8/2000\": 21623,\n\t\"Newton's\": 3259,\n\t\"Bogliasco\": 13197,\n\t\"particlular\": 29781,\n\t\"midnight\": 12819,\n\t\"Fleming\": 21782,\n\t\"Blanco\": 24402,\n\t\"pin\": 7070,\n\t\"purposes\": 2415,\n\t\"GNU\": 10820,\n\t\"haircuts\": 23653,\n\t\"Each\": 6879,\n\t\"Shuttle\": 24453,\n\t\"Zawahiri\": 18741,\n\t\"processing\": 245,\n\t\"Diebner@ECT\": 22039,\n\t\"calendar\": 15318,\n\t\"GMT\": 12739,\n\t\"credentials\": 1462,\n\t\"heartwarming\": 21507,\n\t\"Mob.\": 22247,\n\t\"STORE\": 28649,\n\t\"wife's\": 21155,\n\t\"bloody\": 9200,\n\t\"Boxes\": 18146,\n\t\"Chinese\": 3385,\n\t\"instincts\": 18860,\n\t\"Sheraton\": 29825,\n\t\"500.00\": 29617,\n\t\"sighed\": 9825,\n\t\"#IStandWithAhmed\": 12210,\n\t\"accused\": 18538,\n\t\"461-1776\": 16575,\n\t\"hooked\": 31313,\n\t\"Nuclear\": 14284,\n\t\"flaws\": 32952,\n\t\"body\": 1300,\n\t\"Pages\": 9852,\n\t\"representing\": 14023,\n\t\"compromising\": 23054,\n\t\"refold\": 28220,\n\t\"medicate\": 10210,\n\t\"137\": 14981,\n\t\"stunt\": 31813,\n\t\"shores\": 16367,\n\t\"fruit-cake\": 31611,\n\t\"bubbles\": 32689,\n\t\"tout\": 4055,\n\t\"backed\": 9689,\n\t\"Suddenly\": 9893,\n\t\"dolls\": 31672,\n\t\"mid-air\": 18049,\n\t\"harm\": 10137,\n\t\"warship\": 12152,\n\t\"avian\": 2862,\n\t\"borrowed\": 31874,\n\t\"adaptive\": 14960,\n\t\"oppressed\": 24679,\n\t\"Rooms\": 27404,\n\t\"incidentally\": 32716,\n\t\"GNP\": 11223,\n\t\"canopied\": 31817,\n\t\"nicks\": 26643,\n\t\"amphitheatre\": 31835,\n\t\"awhile\": 27456,\n\t\"godsend\": 21346,\n\t\"disappointment\": 28446,\n\t\"downs\": 25252,\n\t\"abou\": 29359,\n\t\"non-functional\": 18210,\n\t\"overcharge\": 29366,\n\t\"pill\": 16149,\n\t\"spokesperson\": 20695,\n\t\"course\": 790,\n\t\"Northfield\": 30492,\n\t\"96/96/EC\": 31424,\n\t\"bull\": 28329,\n\t\"alternately\": 4320,\n\t\"taller\": 26867,\n\t\"prestige\": 1338,\n\t\"childlike\": 30591,\n\t\"hospital\": 6735,\n\t\"govern\": 14609,\n\t\"chilling\": 16105,\n\t\"corporation\": 20345,\n\t\"Calvinist\": 4296,\n\t\"Whisk\": 17884,\n\t\"blackouts\": 23694,\n\t\"buddies\": 8556,\n\t\"220b\": 23098,\n\t\"mesmerized\": 16136,\n\t\"110\": 10839,\n\t\"proportion\": 13814,\n\t\"Marlow's\": 31040,\n\t\"IE's\": 12771,\n\t\"malfunction\": 18182,\n\t\"Nagaland\": 19528,\n\t\"Gass\": 2396,\n\t\"climb\": 25261,\n\t\"Tholt\": 21450,\n\t\"appartently\": 20146,\n\t\"non-lexical\": 1797,\n\t\"Tourist\": 17005,\n\t\"truck\": 18944,\n\t\"Mongolia\": 16485,\n\t\"unbeaten\": 12583,\n\t\"revolves\": 12911,\n\t\"junction\": 17562,\n\t\"investments\": 14254,\n\t\"Recuperation\": 18730,\n\t\"transaction\": 735,\n\t\"Michigan\": 3649,\n\t\"client\": 7408,\n\t\"sunbathing\": 17387,\n\t\"acquistion\": 21116,\n\t\"signified\": 30725,\n\t\"Chadli\": 13120,\n\t\"flashest\": 16305,\n\t\"stop\": 6292,\n\t\"exposed\": 18655,\n\t\"salvage\": 19032,\n\t\"PPL\": 28189,\n\t\"sly\": 30763,\n\t\"worrying\": 18877,\n\t\"Jose\": 6789,\n\t\"Poisonous\": 20851,\n\t\"Allowance\": 27017,\n\t\"forgot\": 6411,\n\t\"satirical\": 10498,\n\t\"Sub\": 23062,\n\t\"dusters\": 20643,\n\t\"disaster\": 11548,\n\t\"genome\": 10623,\n\t\"Joke\": 17980,\n\t\"involve\": 742,\n\t\"light\": 531,\n\t\"1987\": 13310,\n\t\"approve\": 21476,\n\t\"reminding\": 18607,\n\t\"gang\": 22073,\n\t\"5.1\": 22362,\n\t\"zeroes\": 30164,\n\t\"battleships\": 9247,\n\t\"Superb\": 29090,\n\t\"exhaustion\": 29388,\n\t\"lurch\": 9335,\n\t\"speculators\": 11653,\n\t\"Chanley\": 23583,\n\t\"Orient\": 30728,\n\t\"lalo\": 7522,\n\t\"superiority\": 14697,\n\t\"PEP\": 22840,\n\t\"reviewer\": 28710,\n\t\"variable\": 574,\n\t\"Washington's\": 3568,\n\t\"3.29\": 26011,\n\t\"technique\": 2261,\n\t\"Beckett\": 32822,\n\t\"chats\": 22379,\n\t\"perceived\": 2447,\n\t\"Library\": 25963,\n\t\"http://www.droidforums.net/forum/droid-news/181335-ereader-tablet-comparison-b-n-nook-tablet-b-n-nook-color-kindle-fire-htc-flyer.html\": 26694,\n\t\"Thailand\": 12174,\n\t\"Founder\": 24165,\n\t\"Thane\": 22846,\n\t\"Measuring\": 421,\n\t\"snorted\": 9824,\n\t\"droughts\": 13492,\n\t\"saleable\": 8090,\n\t\"Bunnell\": 24554,\n\t\"Saudis’\": 11224,\n\t\"15071\": 2243,\n\t\"deported\": 19513,\n\t\"copied\": 3907,\n\t\"Eboracum\": 17524,\n\t\"Yau\": 12479,\n\t\"repeated\": 2211,\n\t\"shinning\": 26994,\n\t\"Brothers\": 25089,\n\t\"mic\": 8678,\n\t\"proud\": 9151,\n\t\"renovated\": 16951,\n\t\"639,000\": 15673,\n\t\"lighthearted\": 17916,\n\t\"39938\": 22171,\n\t\"Geri\": 6122,\n\t\"democratic\": 13860,\n\t\"heavyweight\": 20516,\n\t\"1302\": 24970,\n\t\"shoddy\": 27992,\n\t\"sensed\": 24625,\n\t\"thinness\": 30287,\n\t\"loud\": 9714,\n\t\"EVERYONE\": 28341,\n\t\"Doc\": 23066,\n\t\"Prize\": 721,\n\t\"_\": 6242,\n\t\"Initially\": 7917,\n\t\"daisy\": 20055,\n\t\"dazzlingly\": 32353,\n\t\"Hilton\": 5781,\n\t\"consult\": 17722,\n\t\"Jgerma5@aol.com\": 21872,\n\t\"Excitement\": 16012,\n\t\"Phat\": 29004,\n\t\"exodus\": 12938,\n\t\"dressed\": 8635,\n\t\"optimized\": 9590,\n\t\"540,000\": 25761,\n\t\"No-46\": 31473,\n\t\"04:06:52\": 21917,\n\t\"study\": 150,\n\t\"Order\": 18772,\n\t\"waffle\": 29015,\n\t\"suspects\": 29565,\n\t\"non-prototypical\": 1801,\n\t\"non\": 1920,\n\t\"Everyone’s\": 8769,\n\t\"Selection\": 30154,\n\t\"sussex\": 27125,\n\t\"custom-house\": 31079,\n\t\"checkout\": 9839,\n\t\"Modern\": 23155,\n\t\"excitedly\": 31920,\n\t\"Lucy\": 11916,\n\t\"Tabors\": 22354,\n\t\"425-415-3052\": 23181,\n\t\"7:00\": 21564,\n\t\"offworlder's\": 10082,\n\t\"townhouse\": 28969,\n\t\"gambit\": 19859,\n\t\"features\": 1600,\n\t\"paperclips\": 13701,\n\t\"mailer's\": 20863,\n\t\"42,008\": 21045,\n\t\"03:33\": 23331,\n\t\"postcard\": 31676,\n\t\"connectedness\": 30371,\n\t\"Twitter\": 8349,\n\t\"Center\": 3654,\n\t\"1:00\": 22255,\n\t\"bungling\": 18908,\n\t\"Andres\": 2055,\n\t\"server\": 20962,\n\t\"Aeronautics\": 2585,\n\t\"manifestations\": 25674,\n\t\"STORM\": 22955,\n\t\"uncredited\": 5745,\n\t\"M.\": 7532,\n\t\"name\": 3120,\n\t\"painter\": 3520,\n\t\"thwart\": 14228,\n\t\"Bramen\": 29046,\n\t\"twirl\": 31789,\n\t\"Reza\": 16831,\n\t\"re-wiring\": 28377,\n\t\"Whither\": 14074,\n\t\"assuring\": 24386,\n\t\"jumbled\": 25519,\n\t\"clinging\": 9034,\n\t\"problems\": 1620,\n\t\"Runs\": 4788,\n\t\"Imam\": 16797,\n\t\"where-ever\": 27564,\n\t\"side-locks\": 30533,\n\t\"down\": 2188,\n\t\"Easiest\": 28696,\n\t\"Iron\": 29491,\n\t\"Squirrels\": 29525,\n\t\"carry\": 2346,\n\t\"42,000.00\": 24918,\n\t\"Hugo\": 8423,\n\t\"slithers\": 26887,\n\t\"plan\": 1706,\n\t\"complexities\": 6311,\n\t\"he'll\": 6692,\n\t\"obligates\": 22707,\n\t\"youngish\": 31628,\n\t\"recognize\": 1705,\n\t\"conscience\": 5039,\n\t\"railway-truck\": 31173,\n\t\"blackworms\": 27053,\n\t\"selfie\": 5294,\n\t\"Anastacio\": 1509,\n\t\"Operandi\": 20577,\n\t\"NOTE\": 15665,\n\t\"They'll\": 18453,\n\t\"Jolfa\": 16749,\n\t\"HONG\": 11804,\n\t\"citrus\": 10518,\n\t\"Mrs.\": 6456,\n\t\"prolonged\": 2210,\n\t\"evenings\": 16785,\n\t\"tonnes\": 20231,\n\t\"structured\": 1079,\n\t\"explorers\": 17543,\n\t\"exploding\": 4571,\n\t\"Braque\": 21164,\n\t\"longshoreman\": 29969,\n\t\"have\": 49,\n\t\"hurdles\": 13051,\n\t\"healthier\": 8523,\n\t\"pre-fab\": 24913,\n\t\"della\": 25486,\n\t\"sticks\": 9564,\n\t\"slipstream\": 18186,\n\t\"Akin@ECT\": 21383,\n\t\"approximates\": 480,\n\t\"hvae\": 26455,\n\t\"strangely\": 32873,\n\t\"scientists’\": 657,\n\t\"Possibilities\": 14634,\n\t\"tackle\": 14272,\n\t\"specification\": 30035,\n\t\"spirited\": 11142,\n\t\"Kohne\": 16792,\n\t\"endorsed\": 31541,\n\t\"fluffy\": 17836,\n\t\"manikins\": 26549,\n\t\"Acer\": 26317,\n\t\"fam\": 26900,\n\t\"hatch\": 27862,\n\t\"modifying\": 2316,\n\t\"Final\": 3829,\n\t\"clouds\": 9050,\n\t\"societies\": 642,\n\t\"Chelsea\": 7318,\n\t\"Immacolata\": 13213,\n\t\"activist\": 10366,\n\t\"miseries\": 20480,\n\t\"rattled\": 30291,\n\t\"people's\": 13347,\n\t\"unequipped\": 19553,\n\t\"engendered\": 3023,\n\t\"customs\": 14738,\n\t\"munching\": 25059,\n\t\"father's\": 3188,\n\t\"44\": 17433,\n\t\"rapacious\": 31217,\n\t\"Near\": 15377,\n\t\"grandma\": 25002,\n\t\"backlog\": 12971,\n\t\"instability\": 18879,\n\t\"opportune\": 16147,\n\t\"animators\": 13639,\n\t\"disruptions\": 15093,\n\t\"chants\": 20105,\n\t\"replacement\": 19968,\n\t\"drooling\": 6831,\n\t\"unavoidable\": 25905,\n\t\"Hartpury\": 26117,\n\t\"stupidity\": 14645,\n\t\"gelato\": 28303,\n\t\"Thursday's\": 23774,\n\t\"Dubai\": 16764,\n\t\"representation\": 457,\n\t\"Solids\": 27883,\n\t\"labor\": 661,\n\t\"include\": 1953,\n\t\"http://www.physics.isu.edu/radinf/chern.htm\": 18713,\n\t\"emigrated\": 3138,\n\t\"speeches\": 7707,\n\t\"aggressive\": 10426,\n\t\"dreamed\": 9550,\n\t\"04:44\": 21712,\n\t\"NBA\": 16431,\n\t\"banned\": 3170,\n\t\"geopolitics\": 19178,\n\t\"Fehl\": 22934,\n\t\"NetMeeting\": 21448,\n\t\"condiments\": 29987,\n\t\"Handy\": 28864,\n\t\"Margot's\": 31914,\n\t\"1922\": 3496,\n\t\"output\": 20225,\n\t\"http://www.equinecaninefeline.com/catalog/mamble-hamster-narrow-100cm-cage-p-12642.html\": 26870,\n\t\"particular\": 507,\n\t\"studymate\": 10251,\n\t\"soundtrack\": 13768,\n\t\"rising\": 4042,\n\t\"Ban\": 18845,\n\t\"Brain\": 23762,\n\t\"CONVENIENT\": 29194,\n\t\"Hindi\": 20652,\n\t\"mid-size\": 8116,\n\t\"math\": 7739,\n\t\"anxiously\": 32145,\n\t\"Personal\": 4204,\n\t\"clause\": 1155,\n\t\"measure\": 3311,\n\t\"university\": 336,\n\t\"sentencing\": 19944,\n\t\"sunglasses\": 27808,\n\t\"word\": 1131,\n\t\"lope\": 26195,\n\t\"Grant\": 24528,\n\t\"Love\": 5871,\n\t\"NFL\": 16434,\n\t\"Lawyer\": 14761,\n\t\"whipped\": 15335,\n\t\"winery\": 16183,\n\t\"MIUI\": 26162,\n\t\"purple-faced\": 32031,\n\t\"characterize\": 18841,\n\t\"wands\": 16095,\n\t\"bottle\": 6816,\n\t\"windmills\": 30449,\n\t\"patron\": 4995,\n\t\"intelligible\": 30616,\n\t\"intertwined\": 6853,\n\t\"skipped\": 10156,\n\t\"ECC\": 22541,\n\t\"waked\": 27179,\n\t\"relaxed\": 16742,\n\t\"Gamaa\": 20831,\n\t\"dat\": 26819,\n\t\"Richard\": 5352,\n\t\"discrepancy\": 21408,\n\t\"Lagrange's\": 3246,\n\t\"Shahid\": 16759,\n\t\"Beutel\": 24807,\n\t\"canoeing\": 24113,\n\t\"re-enlist\": 25866,\n\t\"sunlight\": 9174,\n\t\"107\": 12247,\n\t\"spiel\": 20243,\n\t\"McNuggets\": 26343,\n\t\"stressed\": 17822,\n\t\"http://www.squidoo.com/nook-tablet\": 26689,\n\t\"People\": 5233,\n\t\"innkeeper\": 29965,\n\t\"Clinical\": 8533,\n\t\"Bonnard\": 21160,\n\t\"pretty\": 6778,\n\t\"meek\": 21971,\n\t\"Pursuant\": 10720,\n\t\"knocking\": 11243,\n\t\"confirm\": 7570,\n\t\"DID\": 11869,\n\t\"midwife\": 16157,\n\t\"Pakistan's\": 18840,\n\t\"screened\": 25952,\n\t\"plight\": 4718,\n\t\"patriots\": 30689,\n\t\"blond\": 32052,\n\t\"accent\": 19828,\n\t\"Saintes\": 16645,\n\t\"slaughter\": 27329,\n\t\"Nellie\": 30872,\n\t\"engraved\": 12662,\n\t\"eastern\": 10000,\n\t\"decent\": 13775,\n\t\"mosquitoes\": 31713,\n\t\"persisting\": 14221,\n\t\"04/28/2000\": 23815,\n\t\"Methodius\": 25351,\n\t\"Dingle\": 27829,\n\t\"tracks\": 11364,\n\t\"occasional\": 11424,\n\t\"pure\": 15930,\n\t\"empirically\": 15168,\n\t\"symbol\": 6867,\n\t\"Wiki\": 12689,\n\t\"minarets\": 16807,\n\t\"850-748-0740\": 24698,\n\t\"Essex\": 25429,\n\t\"discoverer\": 11318,\n\t\"stunk\": 23354,\n\t\"Daughters\": 12066,\n\t\"happier\": 25274,\n\t\"4-5\": 30603,\n\t\"Mangold\": 22801,\n\t\"Digital\": 1495,\n\t\"inflammatory\": 20561,\n\t\"58369\": 23379,\n\t\"Widely\": 26989,\n\t\"tentatively\": 30413,\n\t\"wase\": 28355,\n\t\"packing\": 12136,\n\t\"Virtual\": 11358,\n\t\"Chasing\": 4092,\n\t\"accomplished\": 15221,\n\t\"reaping\": 25269,\n\t\"obsidian\": 15327,\n\t\"numb\": 9534,\n\t\"Qatar\": 4510,\n\t\"Yam\": 30802,\n\t\"dental\": 6946,\n\t\"',\": 26453,\n\t\"1341\": 24971,\n\t\"futurity\": 9943,\n\t\"ids\": 23106,\n\t\"2,300\": 14658,\n\t\"Diablo\": 26991,\n\t\"restricted\": 1742,\n\t\"flow\": 3012,\n\t\"FCE\": 21964,\n\t\"document\": 1955,\n\t\"checked-cloth\": 32399,\n\t\"Rock\": 11163,\n\t\"Buckeye\": 17120,\n\t\"result\": 900,\n\t\"blindman\": 30379,\n\t\"05:51\": 23049,\n\t\"influenced\": 357,\n\t\"Instead\": 7987,\n\t\"acquaintances\": 32922,\n\t\"urinary\": 26805,\n\t\"mines\": 21512,\n\t\"Sill\": 22234,\n\t\"cosmic\": 7000,\n\t\"clients\": 28159,\n\t\"certainly\": 7476,\n\t\"Applying\": 15247,\n\t\"screams\": 24123,\n\t\"Athene\": 32416,\n\t\"DELHI\": 18993,\n\t\"unhygienic\": 32459,\n\t\"scholars’\": 1063,\n\t\"affluent\": 4998,\n\t\"Panama's\": 13108,\n\t\"Police\": 12203,\n\t\"exciting\": 13796,\n\t\"spa\": 27510,\n\t\"Albergo\": 25543,\n\t\"Link\": 19755,\n\t\"tormented\": 24891,\n\t\"Bet\": 10079,\n\t\"singularity\": 13996,\n\t\"Marstal\": 17312,\n\t\"978\": 23860,\n\t\"boys\": 6726,\n\t\"Perle\": 25976,\n\t\"Administration\": 2586,\n\t\"Ba'athist\": 19276,\n\t\"misleading\": 1284,\n\t\"Bait\": 29554,\n\t\"Hind\": 30940,\n\t\"Sara's\": 22256,\n\t\"rotted\": 32824,\n\t\"slandered\": 31330,\n\t\"abstained\": 5137,\n\t\"Pasejo\": 16980,\n\t\"Cupcakes\": 17825,\n\t\"OOPS\": 22279,\n\t\"inadequate\": 5571,\n\t\"Chili\": 28531,\n\t\"Shrek\": 13596,\n\t\"rider\": 6631,\n\t\"polytheism\": 13524,\n\t\"Aeroméxico\": 17116,\n\t\"northward\": 19623,\n\t\"Creekside\": 29195,\n\t\"0800\": 24867,\n\t\"UPDATE\": 18648,\n\t\"inspectors\": 22658,\n\t\"Bumrungard\": 26638,\n\t\"neoformalism\": 14924,\n\t\"Warrants\": 31769,\n\t\"car\": 6073,\n\t\"WB\": 5785,\n\t\"placate\": 6008,\n\t\"weekday\": 9834,\n\t\"gesture\": 26812,\n\t\"Briggs\": 19416,\n\t\"pre-cut\": 26841,\n\t\"Recreational\": 16371,\n\t\"Congresswoman\": 14111,\n\t\"hit\": 4894,\n\t\"CLOSING\": 29697,\n\t\"350\": 17268,\n\t\"gearing\": 22341,\n\t\"crocodilians\": 2762,\n\t\"Wait\": 6444,\n\t\"believers\": 20307,\n\t\"omnipotence\": 30700,\n\t\"Penman\": 21932,\n\t\"befriend\": 30693,\n\t\"y-\": 6351,\n\t\"Ristorante\": 29006,\n\t\"appealed\": 7588,\n\t\"broccoli\": 27444,\n\t\"separation\": 7630,\n\t\"713-654-1281\": 20984,\n\t\"simulates\": 2312,\n\t\"Julie\": 22076,\n\t\"Guerra\": 29044,\n\t\"paste\": 24260,\n\t\"What’s\": 8060,\n\t\"hastag\": 12232,\n\t\"Croke\": 27189,\n\t\"Pros\": 28346,\n\t\"Supermechanized\": 30805,\n\t\"AUBREY\": 25390,\n\t\"festival\": 12910,\n\t\"Workers\": 29931,\n\t\"limerick\": 26156,\n\t\"Pachomius’\": 6014,\n\t\"operator\": 2302,\n\t\"prevent\": 10284,\n\t\"unlawful\": 19550,\n\t\"05:17\": 21071,\n\t\"queso\": 28494,\n\t\"Homes\": 28651,\n\t\"silliest\": 32766,\n\t\"Bagh\": 27415,\n\t\"diligent\": 15710,\n\t\"dated\": 19852,\n\t\"seated\": 7523,\n\t\"knocks\": 25268,\n\t\"player's\": 1672,\n\t\"cramp\": 31669,\n\t\"novellas\": 7706,\n\t\"ER\": 28340,\n\t\"cuttings\": 8980,\n\t\"kitchen\": 8130,\n\t\"shrine\": 32390,\n\t\"anemone\": 10589,\n\t\"baking\": 6455,\n\t\"adn\": 22559,\n\t\"Siméon\": 3830,\n\t\"Source\": 10815,\n\t\"Tourists\": 17154,\n\t\"downfall\": 8921,\n\t\"Shelia\": 23758,\n\t\"Nunzio\": 13238,\n\t\"glared\": 9959,\n\t\"motto\": 13904,\n\t\"wizards\": 32045,\n\t\"Cook\": 18378,\n\t\"insignias\": 3605,\n\t\"divides\": 19631,\n\t\"feet\": 4807,\n\t\"Plants\": 16620,\n\t\"crews\": 7187,\n\t\"dad's\": 13752,\n\t\"Mitchell\": 4170,\n\t\"1926\": 3414,\n\t\"reefs\": 16686,\n\t\"Murphy\": 23394,\n\t\"naked\": 6852,\n\t\"prepaid\": 23637,\n\t\"litterbox\": 27464,\n\t\"Weiss\": 3037,\n\t\"illumination\": 30983,\n\t\"scheduler\": 19820,\n\t\"outfitting\": 26004,\n\t\"banknote\": 4760,\n\t\"Malfoy\": 32083,\n\t\"predatory\": 871,\n\t\"stamping\": 9840,\n\t\"Mary\": 4246,\n\t\"Innovative\": 23984,\n\t\"pioneering\": 3118,\n\t\"cycling\": 9229,\n\t\"Assad\": 20364,\n\t\"VISA\": 27122,\n\t\"saga\": 21880,\n\t\"futures\": 11239,\n\t\"hui\": 18834,\n\t\"dials\": 9935,\n\t\"radiantly\": 24629,\n\t\"inky\": 9987,\n\t\"headboard\": 29888,\n\t\"cichlid\": 27048,\n\t\"Aphrodite\": 13517,\n\t\"Branford\": 28670,\n\t\"non-art\": 13387,\n\t\"Fallujan\": 18599,\n\t\"Aircraft\": 24455,\n\t\"Parents\": 28509,\n\t\"havn't\": 24241,\n\t\"Dempseys\": 27047,\n\t\"11.30\": 31420,\n\t\"anti-christ\": 12333,\n\t\"Elia\": 4555,\n\t\"shipment\": 19578,\n\t\"pepperoni\": 29711,\n\t\"Kitts\": 16490,\n\t\"synthetic\": 24642,\n\t\"noises\": 17925,\n\t\"Savage's\": 10483,\n\t\"Blount's\": 19803,\n\t\"Shane\": 5313,\n\t\"Letter\": 20852,\n\t\"Summit\": 13866,\n\t\"Dutton\": 14984,\n\t\"scratches\": 27453,\n\t\"gro\": 26138,\n\t\"thursday\": 21008,\n\t\"refiners\": 31348,\n\t\"alternatives\": 7645,\n\t\"abandoned\": 4023,\n\t\"inquiringly\": 32000,\n\t\"Sean.Cooper@ElPaso.com\": 21006,\n\t\"apprehensive\": 18581,\n\t\"Went\": 28559,\n\t\"Filipino\": 20735,\n\t\"includes\": 1159,\n\t\"cannot\": 1425,\n\t\"growing\": 1360,\n\t\"British\": 3824,\n\t\"invite\": 11207,\n\t\"busier\": 11416,\n\t\"dine\": 16996,\n\t\"could've\": 13144,\n\t\"Revolutionary\": 3540,\n\t\"gifts\": 6425,\n\t\"colleagues\": 1990,\n\t\"Furnishings\": 29893,\n\t\"York\": 3613,\n\t\"want\": 5255,\n\t\"Represent.com\": 5868,\n\t\"Iceland\": 25150,\n\t\"stereo\": 21830,\n\t\"hunks\": 23941,\n\t\"held\": 3217,\n\t\"Custom\": 19472,\n\t\"1920s\": 16975,\n\t\"displacing\": 2909,\n\t\"soulless\": 6913,\n\t\"blood\": 3282,\n\t\"runner\": 8403,\n\t\"cleaser\": 27447,\n\t\"stiffening\": 30637,\n\t\"Tenn\": 21515,\n\t\"toiling\": 31184,\n\t\"incentives\": 755,\n\t\"synonymous\": 9129,\n\t\"butt\": 9783,\n\t\"transactional\": 22587,\n\t\"tomorrow\": 6963,\n\t\"++++++\": 21684,\n\t\"multiplex\": 29523,\n\t\"Harley\": 6960,\n\t\"metabolism\": 27683,\n\t\"lightly\": 9536,\n\t\"rescinded\": 10422,\n\t\"supplier\": 19156,\n\t\"masks\": 26005,\n\t\"elaborately\": 30269,\n\t\"paths\": 1898,\n\t\"anyone\": 8169,\n\t\"placing\": 18398,\n\t\"exclusion\": 13553,\n\t\"remilitarization\": 10425,\n\t\"Canal\": 27248,\n\t\"paratexts\": 2986,\n\t\"personal\": 5297,\n\t\"Happy\": 15884,\n\t\"FEVER\": 22951,\n\t\"latin\": 27257,\n\t\"lemonade\": 27946,\n\t\"chips\": 11350,\n\t\"say\": 2929,\n\t\"scrumptious\": 28148,\n\t\"millions\": 1951,\n\t\"disdain\": 15461,\n\t\"revising\": 22288,\n\t\"Alexandria\": 24762,\n\t\"Yaay\": 16116,\n\t\"believe\": 771,\n\t\"Mon.\": 22189,\n\t\"heather\": 26192,\n\t\"nylon\": 9726,\n\t\"1986\": 5178,\n\t\"arrow\": 8684,\n\t\"Hispanic\": 17101,\n\t\"contradicting\": 19762,\n\t\"outfielder\": 4799,\n\t\"SHOCK\": 22945,\n\t\"dressing-case\": 31318,\n\t\"commercialize\": 13403,\n\t\"sacrifices\": 10805,\n\t\"repeating\": 14121,\n\t\"breeds\": 31765,\n\t\"weigh\": 15361,\n\t\"history\": 176,\n\t\"I\": 1438,\n\t\"graduation\": 4559,\n\t\"vibrated\": 9933,\n\t\"Former\": 19437,\n\t\"Solana\": 28828,\n\t\"inferred\": 2738,\n\t\"Cocoa\": 11992,\n\t\"boldness\": 14381,\n\t\"Sacramento\": 22373,\n\t\"Math\": 11722,\n\t\"rakau\": 16329,\n\t\"Emission\": 2098,\n\t\"artwork\": 77,\n\t\"Terrex\": 15961,\n\t\"Society\": 3226,\n\t\"entitlement\": 7596,\n\t\"indicate\": 2755,\n\t\"arguments\": 6593,\n\t\"craftsmen\": 16896,\n\t\"c'm\": 28150,\n\t\"Describe\": 14990,\n\t\"gossipy\": 17627,\n\t\"Bernhard\": 3434,\n\t\"importantly\": 8159,\n\t\"crooked\": 9137,\n\t\"Tomorrow\": 6943,\n\t\"tankmates\": 27043,\n\t\"Mar\": 21665,\n\t\"YES\": 29942,\n\t\"shortest\": 15548,\n\t\"shrewd\": 25523,\n\t\"worshiped\": 25685,\n\t\"Roly\": 31847,\n\t\"Sharing\": 32923,\n\t\"Buddakan\": 28957,\n\t\"farce\": 20255,\n\t\"blooming\": 17196,\n\t\"Skylight\": 28499,\n\t\"Directive\": 31365,\n\t\"visit\": 260,\n\t\"fragmentary\": 13525,\n\t\"railroad\": 17487,\n\t\"couches\": 9561,\n\t\"Harrison\": 22001,\n\t\"engage\": 2988,\n\t\"Outside\": 8997,\n\t\"wager\": 23727,\n\t\"folly\": 31219,\n\t\"deliciousness\": 29715,\n\t\"x-37097\": 22414,\n\t\"Fernandina\": 28259,\n\t\"wines\": 16206,\n\t\"kids\": 6652,\n\t\"discussed\": 911,\n\t\"Russia\": 4259,\n\t\"Passages\": 4441,\n\t\"Paganism\": 20220,\n\t\"Send\": 22082,\n\t\"MACS\": 22210,\n\t\"plagued\": 8386,\n\t\"clicker\": 27395,\n\t\"arent\": 27786,\n\t\"MAIN\": 24537,\n\t\"QFs\": 23652,\n\t\"miserably\": 32074,\n\t\"Antipasto\": 28297,\n\t\"Ridge\": 17129,\n\t\"Laplace\": 3267,\n\t\"Kurds\": 18801,\n\t\"JWVS\": 21739,\n\t\"brazen\": 19096,\n\t\"69\": 24320,\n\t\"Fenway\": 4937,\n\t\"Prophet's\": 20614,\n\t\"upstairs\": 8562,\n\t\"desultorily\": 31609,\n\t\"severed\": 30344,\n\t\"augmentation\": 8273,\n\t\"3.2\": 23572,\n\t\"climber\": 29387,\n\t\"journalist\": 4168,\n\t\"Having\": 5967,\n\t\"1776\": 14949,\n\t\"censored\": 26543,\n\t\"die\": 4066,\n\t\"Huffington\": 13465,\n\t\"Randy\": 22703,\n\t\"both\": 345,\n\t\"metro\": 16378,\n\t\"Truman\": 13341,\n\t\"Jackie\": 16050,\n\t\"bark\": 17190,\n\t\"slips\": 31080,\n\t\"kyle.jones@radianz.com\": 22015,\n\t\"reporting\": 1969,\n\t\"Mount\": 26722,\n\t\"pre-rinsed\": 18367,\n\t\"preposterous\": 20441,\n\t\"Enquirer\": 20821,\n\t\"eaiser\": 27787,\n\t\"undermine\": 14711,\n\t\"racketeers\": 30817,\n\t\"Implicated\": 19440,\n\t\"Casper\": 6997,\n\t\"neatly\": 9816,\n\t\"fruitcake\": 6497,\n\t\"Las\": 10344,\n\t\"Gameplay\": 12586,\n\t\"Chicken\": 17782,\n\t\"GUARANTEE\": 28409,\n\t\"GEMMA\": 8261,\n\t\"saplings\": 25057,\n\t\"Relief\": 11529,\n\t\"antichrist\": 25595,\n\t\"Wakes\": 27181,\n\t\"Kadhim\": 18515,\n\t\"pm\": 15802,\n\t\"Governments\": 20481,\n\t\"france\": 26599,\n\t\"Compression\": 22705,\n\t\"ceremonies\": 16849,\n\t\"250\": 278,\n\t\"proving\": 12135,\n\t\"Arrival\": 24259,\n\t\"sholder\": 27800,\n\t\"deposit\": 12084,\n\t\"pinkies\": 27671,\n\t\"itself\": 874,\n\t\"Alfa\": 18053,\n\t\"mailto:mayur...@yahoo.com\": 25327,\n\t\"FIT\": 29851,\n\t\"impossible\": 6663,\n\t\"developers\": 3149,\n\t\"avoid\": 500,\n\t\"WOMAN\": 21524,\n\t\"Farrier\": 6407,\n\t\"1\": 331,\n\t\"LEGAL\": 24942,\n\t\"green\": 8683,\n\t\"Nonna!\": 16131,\n\t\"eliminated\": 20524,\n\t\"Hotel\": 13182,\n\t\"bob\": 23158,\n\t\"spies\": 22774,\n\t\"curate\": 25505,\n\t\"fortnight\": 32064,\n\t\"53\": 21711,\n\t\"Jingū\": 4762,\n\t\"#kairos\": 7825,\n\t\"rush\": 12587,\n\t\"well\": 185,\n\t\"dash\": 11959,\n\t\"Yonhap\": 12837,\n\t\"celebrities\": 13339,\n\t\"condo\": 19346,\n\t\"Sainte\": 11464,\n\t\"sp\": 21472,\n\t\"dome\": 9968,\n\t\"Giverny\": 22193,\n\t\"Jordanians\": 30753,\n\t\"constructing\": 19607,\n\t\"empresario\": 14712,\n\t\"promotion\": 4893,\n\t\"Lau\": 7528,\n\t\"Widow\": 12632,\n\t\"Few\": 23318,\n\t\"Andover\": 11713,\n\t\"itll\": 26588,\n\t\"catastrophe\": 25885,\n\t\"stopped\": 4753,\n\t\"cuckoo\": 25121,\n\t\"Oliver\": 727,\n\t\"Cognition\": 15005,\n\t\"launched\": 5867,\n\t\"UofH\": 23448,\n\t\"statement\": 1290,\n\t\"pathological\": 13568,\n\t\"tattoos\": 28129,\n\t\"promises\": 7937,\n\t\"Montavano\": 23728,\n\t\"Cannes\": 5364,\n\t\"honesty\": 19433,\n\t\"awe\": 14376,\n\t\"separated\": 5449,\n\t\"hurts\": 7007,\n\t\"4600\": 17301,\n\t\"LOVE\": 26864,\n\t\"rep.\": 26306,\n\t\"multiply\": 7107,\n\t\"formalized\": 2287,\n\t\"Marquez\": 22291,\n\t\"per\": 2853,\n\t\"Noyce\": 24174,\n\t\"Complaint\": 20893,\n\t\"mechanicly\": 29416,\n\t\"webcomic\": 10503,\n\t\"swamp\": 31010,\n\t\"optional\": 8242,\n\t\"Jenks\": 17495,\n\t\"Kiwi\": 27560,\n\t\"live\": 1237,\n\t\"brunt\": 9753,\n\t\"togas\": 31829,\n\t\"dripping\": 9460,\n\t\"Christchurch\": 12649,\n\t\"Roosevelt\": 25805,\n\t\"claiming\": 7497,\n\t\"biological\": 14807,\n\t\"circumstances\": 6612,\n\t\"1500\": 29055,\n\t\"doctrine\": 6561,\n\t\"deficit\": 26045,\n\t\"Azzaman\": 18628,\n\t\"sailed\": 27490,\n\t\"codifies\": 31383,\n\t\"southern\": 4340,\n\t\"abrasive\": 29838,\n\t\"Chemical\": 10087,\n\t\"cardboard\": 30304,\n\t\"1715\": 3528,\n\t\"novelist\": 4625,\n\t\"10/31/2000\": 22400,\n\t\"discipline\": 619,\n\t\"Taliban\": 12107,\n\t\"inability\": 19494,\n\t\"rejection\": 3857,\n\t\"UNC\": 13340,\n\t\"formless\": 31136,\n\t\"squared\": 7081,\n\t\"180.9\": 23605,\n\t\"Tie\": 8816,\n\t\"elected\": 3223,\n\t\"Compson's\": 30711,\n\t\"increasingly\": 2984,\n\t\"it'll\": 7049,\n\t\"GTCs\": 23516,\n\t\"LOCKHART\": 32345,\n\t\"liquidations\": 22318,\n\t\"dancer\": 5419,\n\t\"hateful\": 9434,\n\t\"precedent\": 7429,\n\t\"bowl\": 6975,\n\t\"ring\": 4927,\n\t\"Factory\": 10468,\n\t\"daydreams\": 18269,\n\t\"guarentee\": 29823,\n\t\"pao\": 29840,\n\t\"Document\": 10821,\n\t\"Palacio\": 17012,\n\t\"responds\": 17973,\n\t\"travels\": 15547,\n\t\"Jamaica\": 20911,\n\t\"Theodorus\": 5904,\n\t\"Rat\": 26878,\n\t\"____________________________________________________\": 21494,\n\t\"relocating\": 29290,\n\t\"carol.st.clair@enron.com\": 23505,\n\t\"lid\": 17776,\n\t\"Arkham\": 12561,\n\t\"reporters\": 13278,\n\t\"Normale\": 3838,\n\t\"evalu-\": 6551,\n\t\"Ask\": 16530,\n\t\"arrv.\": 22196,\n\t\"Romanick\": 29602,\n\t\"YOU\": 19470,\n\t\"warn\": 20617,\n\t\"yell\": 6212,\n\t\"slapped\": 29103,\n\t\"Patricia\": 23817,\n\t\"contrasts\": 16960,\n\t\"-------------------\": 24905,\n\t\"twenty\": 4067,\n\t\"Inc\": 21115,\n\t\"boyhood\": 31056,\n\t\"chicken-processing\": 32840,\n\t\"checkups\": 16161,\n\t\"slip\": 17371,\n\t\"poring\": 30340,\n\t\"70,000\": 5889,\n\t\"Ted.Bockius@ivita.com\": 22131,\n\t\"chiropractric\": 29072,\n\t\"membership\": 478,\n\t\"detail\": 5664,\n\t\"SAP\": 21103,\n\t\"GIRL\": 27969,\n\t\"root\": 7080,\n\t\"drainage-pipes\": 31227,\n\t\"80119\": 17020,\n\t\"driest\": 27810,\n\t\"inheritance\": 7234,\n\t\"Souvlaki\": 32928,\n\t\"sub-division\": 29223,\n\t\"60s\": 26950,\n\t\"recording\": 10920,\n\t\"orally\": 22785,\n\t\"endeavor\": 2378,\n\t\"PUC\": 22462,\n\t\"appellants\": 7317,\n\t\"lasted\": 15397,\n\t\"ammonium\": 18045,\n\t\"Mandelstams\": 30768,\n\t\"Daniel\": 26,\n\t\"Tehran\": 16727,\n\t\"roadworthiness\": 31426,\n\t\"Magi\": 10353,\n\t\"doublethink\": 23954,\n\t\"dramatically\": 17753,\n\t\"Biloxi\": 24413,\n\t\"0.8\": 2624,\n\t\"kinematics\": 2737,\n\t\"bushy\": 17766,\n\t\"moderate\": 18932,\n\t\"103\": 980,\n\t\"infinite\": 1220,\n\t\"pass\": 7854,\n\t\"peas\": 8012,\n\t\"hybrids\": 25093,\n\t\"Rayburn\": 32450,\n\t\"presence\": 2079,\n\t\"Only\": 4044,\n\t\"ridiculed\": 20442,\n\t\"aways\": 26573,\n\t\"ocho\": 6317,\n\t\"JOHANN\": 10093,\n\t\"facing\": 11533,\n\t\"Architect\": 15271,\n\t\"itching\": 9869,\n\t\"procedural\": 23264,\n\t\"audibly\": 9657,\n\t\"Thus\": 69,\n\t\"Land\": 2662,\n\t\"Uncover\": 18385,\n\t\"Pi\": 13960,\n\t\"cauldron\": 25756,\n\t\"03/08/2000\": 22480,\n\t\"requests\": 12695,\n\t\"FRL3@pge.com\": 23272,\n\t\"afterlife\": 18223,\n\t\"dissatisfaction\": 11658,\n\t\"potable\": 25998,\n\t\"pince-nez\": 32256,\n\t\"rampant\": 13833,\n\t\"Karlgren's\": 3435,\n\t\"Funds\": 31503,\n\t\"invested\": 7928,\n\t\"°\": 16988,\n\t\"ps.\": 26965,\n\t\"proponents\": 2217,\n\t\"defendants\": 7386,\n\t\"Baseball\": 4801,\n\t\"Asansol\": 26436,\n\t\"destructive\": 14038,\n\t\"except\": 4803,\n\t\"robotics\": 12059,\n\t\"malfunctions\": 8393,\n\t\"reclining\": 26999,\n\t\"vault\": 32322,\n\t\"punctuated\": 8592,\n\t\"Shandao\": 12944,\n\t\"Maker\": 10127,\n\t\"hes\": 26857,\n\t\"Scriptures\": 6633,\n\t\"governed\": 30726,\n\t\"860-665-2368\": 23537,\n\t\"Andorra\": 27530,\n\t\"Lawmakers\": 23671,\n\t\"Budgies\": 26733,\n\t\"seaweed\": 9016,\n\t\"Callon\": 23396,\n\t\"attentive\": 28325,\n\t\"...........\": 27379,\n\t\"locomotion\": 2760,\n\t\"marketplaces\": 23857,\n\t\"Bush’s\": 19209,\n\t\"U$\": 26744,\n\t\"eatin\": 27738,\n\t\"8:00\": 19809,\n\t\"re-run\": 22105,\n\t\"Norwegian\": 19013,\n\t\"Cauldron\": 16101,\n\t\"Pending\": 22159,\n\t\"libeled\": 19184,\n\t\"incredulity\": 19313,\n\t\"Hedging\": 21573,\n\t\"Guadeloupean\": 16721,\n\t\"theirs\": 2842,\n\t\"deception\": 1230,\n\t\"Kaplan\": 22365,\n\t\"Dixie\": 22113,\n\t\"avenging\": 31296,\n\t\"PAY\": 29964,\n\t\"officials\": 4345,\n\t\"Venezuelan\": 19375,\n\t\"spiral\": 7050,\n\t\"http://www.bigeye.com/111003.htm\": 19434,\n\t\"thirty-eight\": 30864,\n\t\"P.A.\": 11789,\n\t\"Felicia\": 23752,\n\t\"Yellowstone\": 25012,\n\t\"retained\": 11608,\n\t\"Solutions\": 22003,\n\t\"resting\": 14030,\n\t\"Spacetoday.net\": 24491,\n\t\"nightclubs\": 5224,\n\t\"viability\": 15201,\n\t\"folder\": 30199,\n\t\"Fascinating\": 26663,\n\t\"Recovery\": 21888,\n\t\"looked\": 6148,\n\t\"Question\": 20089,\n\t\"attache\": 5608,\n\t\"Clause\": 6994,\n\t\"Approval\": 22417,\n\t\"TV\": 4085,\n\t\"gestures\": 19131,\n\t\"vanguard\": 29024,\n\t\"redesigning\": 3617,\n\t\"keyboard\": 7756,\n\t\"reclaim\": 7637,\n\t\"Prescott\": 19864,\n\t\"OFFICE\": 11503,\n\t\"smoking\": 7345,\n\t\"enormously\": 17088,\n\t\"civil\": 3610,\n\t\"supreme\": 12866,\n\t\"envisioned\": 10798,\n\t\"Kazakhstan\": 25842,\n\t\"Were\": 13025,\n\t\"willl\": 26765,\n\t\"executable\": 22225,\n\t\"Luncheonette\": 30299,\n\t\"governor's\": 23704,\n\t\"Shukrijumah\": 20597,\n\t\"beasts\": 10633,\n\t\"1,537,058\": 17083,\n\t\"mode\": 14564,\n\t\"http://www.calguard.ca.gov/ia/Chernobyl-15%20years.htm\": 18702,\n\t\"O\": 13932,\n\t\"Tonight\": 9292,\n\t\"pad\": 11329,\n\t\"provinces\": 22521,\n\t\"magnesium\": 27894,\n\t\"beetles\": 10253,\n\t\"formulate\": 10605,\n\t\"streamside\": 25066,\n\t\"Wookie\": 7549,\n\t\"SARS\": 13804,\n\t\"don\": 13431,\n\t\"crying\": 8740,\n\t\"Cars\": 29721,\n\t\"mpg\": 29369,\n\t\"Relatedly\": 15161,\n\t\"Bertone@ENRON_DEVELOPMENT\": 23204,\n\t\"matches\": 12576,\n\t\"Basil\": 15893,\n\t\"Great\": 4285,\n\t\"Hakim\": 16815,\n\t\"Dollars\": 21679,\n\t\"so\": 1182,\n\t\"unconscious\": 148,\n\t\"Respect\": 17332,\n\t\"passive\": 2582,\n\t\"remerged\": 30355,\n\t\"ii\": 22701,\n\t\"Besides\": 1163,\n\t\"OUTTA\": 28794,\n\t\"Isn't\": 6486,\n\t\"waved\": 9013,\n\t\"myopic\": 13785,\n\t\"coping\": 14925,\n\t\"Snow\": 32387,\n\t\"horseshoes\": 6413,\n\t\"bear's\": 24115,\n\t\"dog\": 1722,\n\t\"Mets\": 11014,\n\t\"organize\": 15003,\n\t\"objectless\": 31181,\n\t\"explain\": 6685,\n\t\"unconcious\": 20050,\n\t\"Decor\": 29616,\n\t\"Burrows\": 12652,\n\t\"Embassies\": 20546,\n\t\"fiancé\": 3927,\n\t\"Form\": 23532,\n\t\"Division\": 21122,\n\t\"Increases\": 24054,\n\t\"PHOTOS\": 28175,\n\t\"tablespoon\": 17840,\n\t\"eg\": 21376,\n\t\"stupid\": 10062,\n\t\"solutions\": 379,\n\t\"hypothetically\": 2766,\n\t\"orange\": 10517,\n\t\"rhaps\": 11986,\n\t\"E500's\": 21778,\n\t\"Stuart's\": 29813,\n\t\"cleanup\": 13496,\n\t\"Batting\": 4784,\n\t\"Morning\": 10500,\n\t\"entrée\": 18804,\n\t\"1,700\": 25966,\n\t\"momentary\": 9971,\n\t\"crunch\": 16134,\n\t\"Pasta\": 16168,\n\t\"frantic\": 30266,\n\t\"stonily\": 31198,\n\t\"debates\": 1282,\n\t\"doi:10.1037/0022-3514.92.6.1087\": 15244,\n\t\"bryer\": 26837,\n\t\"settler\": 31631,\n\t\"Volunteer\": 12594,\n\t\"indefinite\": 9930,\n\t\"polar\": 24106,\n\t\"intends\": 12674,\n\t\"maps\": 2614,\n\t\"YOU'LL\": 28922,\n\t\"Syria\": 5124,\n\t\"Jacobs\": 23795,\n\t\"lively\": 30590,\n\t\"ICT\": 13993,\n\t\"taunting\": 30477,\n\t\"transferring\": 4836,\n\t\"ld2d-#69396-1.DOC\": 22435,\n\t\"sooo\": 29853,\n\t\"Braunsberg\": 4302,\n\t\"Pik-wan\": 12476,\n\t\"nylons\": 11827,\n\t\"dairy\": 12003,\n\t\"weaknesses\": 571,\n\t\"basters\": 18027,\n\t\"Ma\": 21992,\n\t\"harshly\": 27391,\n\t\"Jacobsen\": 29868,\n\t\"hurling\": 19302,\n\t\"zinc\": 27296,\n\t\"shit\": 9675,\n\t\"morning's\": 30318,\n\t\"deadliest\": 13177,\n\t\"Nigorie\": 4734,\n\t\"persons\": 7516,\n\t\"can't\": 6064,\n\t\"vet\": 26254,\n\t\"1220\": 15650,\n\t\"mshames@ucan.org\": 23892,\n\t\"misc.consumers\": 24339,\n\t\"thi\": 7084,\n\t\"disciplines\": 455,\n\t\"prove\": 2025,\n\t\"Re\": 21920,\n\t\"environment\": 1238,\n\t\"Master\": 5208,\n\t\"Medical\": 20572,\n\t\"Nazis\": 16926,\n\t\"race\": 7628,\n\t\"opportunities\": 8115,\n\t\"Sassi\": 13142,\n\t\"GOODWYN\": 19815,\n\t\"panicking\": 26756,\n\t\"restfully\": 24621,\n\t\"Kibbutz\": 11248,\n\t\"combines\": 1621,\n\t\"blind\": 10309,\n\t\"40,000\": 5893,\n\t\"photographs\": 7513,\n\t\",?\": 22425,\n\t\"Displays\": 12589,\n\t\"Rod\": 29867,\n\t\"Rendy\": 28292,\n\t\"Arco\": 22557,\n\t\"Metropolitan\": 5843,\n\t\"Minster\": 17523,\n\t\"subscribe\": 15904,\n\t\"Arrv.\": 22183,\n\t\"o’clock\": 8576,\n\t\"0.70\": 27219,\n\t\"manipulating\": 2344,\n\t\"neurology\": 20750,\n\t\"fostering\": 8520,\n\t\"Slowest\": 28167,\n\t\"fleece\": 26865,\n\t\"age\": 1563,\n\t\"served\": 3374,\n\t\"Prague\": 20785,\n\t\"thou-\": 6050,\n\t\"ul\": 19618,\n\t\"addition\": 1701,\n\t\"maniacs\": 12846,\n\t\"caper\": 25031,\n\t\"white-blond\": 30274,\n\t\"assumptions\": 14847,\n\t\"loins\": 31189,\n\t\"Milton\": 7848,\n\t\"nearsightedness\": 9586,\n\t\"df\": 22747,\n\t\"XSL\": 30093,\n\t\"Marek\": 28178,\n\t\"tapering\": 2876,\n\t\"Shea\": 11062,\n\t\"advises\": 20768,\n\t\"Caucasians\": 27272,\n\t\"veranda\": 31276,\n\t\"footing\": 32908,\n\t\"congratulate\": 13850,\n\t\"immediate\": 5621,\n\t\"robbed\": 29180,\n\t\"underwear\": 8845,\n\t\"Bradenton\": 4871,\n\t\"enclosure\": 2847,\n\t\"beyond\": 8365,\n\t\"Perez\": 25433,\n\t\"railways\": 26447,\n\t\"Friendly\": 28103,\n\t\"bandage\": 7037,\n\t\"Chipotle\": 29441,\n\t\"uptown\": 30295,\n\t\"acquiring\": 20233,\n\t\"expostulation\": 30853,\n\t\"worked\": 5495,\n\t\"unparalleled\": 28978,\n\t\"feasible\": 2906,\n\t\"Nations\": 8050,\n\t\"125\": 17267,\n\t\"dismisses\": 19278,\n\t\"Barcelona\": 27243,\n\t\"volunteer\": 10817,\n\t\"adversary\": 32692,\n\t\"Sandwiches\": 29430,\n\t\"Eichelberger's\": 30677,\n\t\"arbitrariness\": 1746,\n\t\"Distractions\": 7665,\n\t\"Miles\": 30658,\n\t\"Margaritas\": 28490,\n\t\"Until\": 5518,\n\t\"ANY\": 26466,\n\t\"Mujahedeen\": 20067,\n\t\"Assam\": 19625,\n\t\"Cleveland's\": 16404,\n\t\"rode\": 9060,\n\t\"Toowoomba\": 24947,\n\t\"chlorination\": 27870,\n\t\"seeks\": 14487,\n\t\"Tobin\": 7840,\n\t\"TGIF\": 29113,\n\t\"washes\": 28896,\n\t\"situations\": 6625,\n\t\"lightbulb\": 29824,\n\t\"albums\": 2961,\n\t\"backtracked\": 30389,\n\t\"wit\": 4347,\n\t\"gilded\": 14188,\n\t\"Scalzo\": 1539,\n\t\"indignation\": 30569,\n\t\"variability\": 1921,\n\t\"ʃɑʁl\": 3504,\n\t\"sinks\": 19917,\n\t\"floor\": 6671,\n\t\"cheaper\": 15758,\n\t\"utensils\": 27327,\n\t\"draw\": 2519,\n\t\"shop-cum-post-office\": 31576,\n\t\"wop\": 30715,\n\t\"Party's\": 12399,\n\t\"fiasco\": 32168,\n\t\"dividend\": 7905,\n\t\"NWSC\": 12497,\n\t\"up\": 974,\n\t\"leak\": 13043,\n\t\"severe\": 2449,\n\t\"Curveball\": 20787,\n\t\"Senabre\": 1011,\n\t\"Where’s\": 8774,\n\t\"assertions\": 22469,\n\t\"Yemen\": 12125,\n\t\"ugliness\": 31923,\n\t\"video\": 2955,\n\t\"Visited\": 26774,\n\t\"Satanic\": 19939,\n\t\"Gus\": 29050,\n\t\"Te\": 16345,\n\t\"Provides\": 23281,\n\t\"facets\": 2915,\n\t\"Fi\": 8281,\n\t\"dreams\": 9376,\n\t\"Siegel\": 11157,\n\t\"constitutions\": 7595,\n\t\"disposed\": 2181,\n\t\"Mubarak\": 20809,\n\t\"privileges\": 859,\n\t\"Conservation\": 3315,\n\t\"binds\": 25304,\n\t\"fragile\": 18141,\n\t\":D\": 26339,\n\t\"IL\": 26914,\n\t\"assault\": 6537,\n\t\"undermining\": 19647,\n\t\"omitted\": 1090,\n\t\"beneficiary\": 19153,\n\t\"Department\": 2061,\n\t\"feb\": 24235,\n\t\"I'd\": 6183,\n\t\"monetize\": 7442,\n\t\"Southeast\": 17441,\n\t\"Except\": 17355,\n\t\"feisty\": 27670,\n\t\"insoles\": 32627,\n\t\"Serving\": 16409,\n\t\"dessert\": 10582,\n\t\"amends\": 22544,\n\t\"directions\": 6881,\n\t\"Neal\": 23730,\n\t\"they’ll\": 14633,\n\t\"complicated\": 10053,\n\t\"Cathedral\": 16959,\n\t\"shirts\": 5890,\n\t\"watchful\": 19982,\n\t\"Nathan\": 7089,\n\t\"BIG\": 26239,\n\t\"Patrizia\": 10264,\n\t\"10/23/2000\": 21933,\n\t\"accuses\": 19640,\n\t\"Rossi\": 22392,\n\t\"legislate\": 14384,\n\t\"constitute\": 19534,\n\t\"coop\": 27279,\n\t\"knight\": 32705,\n\t\"purchases\": 19898,\n\t\"accuracy\": 1642,\n\t\"3/03\": 21404,\n\t\"successful\": 2569,\n\t\"penne\": 15772,\n\t\"Cleaning\": 28825,\n\t\"disastrous\": 19777,\n\t\"Tho\": 27554,\n\t\"persuasive\": 25256,\n\t\"pecking\": 26662,\n\t\"WERE\": 27715,\n\t\"smakkecenter\": 17254,\n\t\"Stephen.Dyer@bakerbotts.com\": 22962,\n\t\"Faris\": 28099,\n\t\"icecream\": 31833,\n\t\"embolden\": 18121,\n\t\"silently\": 29376,\n\t\"Sr\": 22332,\n\t\"blur\": 27813,\n\t\"Terms\": 15415,\n\t\"we\": 138,\n\t\"TwenCen\": 9591,\n\t\"2.3\": 15222,\n\t\"Privacy\": 21002,\n\t\"Signs\": 27069,\n\t\"twinkies\": 21536,\n\t\"Closs\": 28849,\n\t\"COST\": 19477,\n\t\"Ventures\": 21143,\n\t\"Logic\": 25904,\n\t\"cross\": 11143,\n\t\"hydrogen\": 10227,\n\t\"detection\": 25811,\n\t\"investigation\": 2913,\n\t\"crust\": 16118,\n\t\"IGTS\": 21500,\n\t\"appetizing\": 29294,\n\t\"nodding\": 32917,\n\t\"Marie\": 3529,\n\t\"foisted\": 15150,\n\t\"Intrepid\": 27565,\n\t\"flatness\": 30892,\n\t\"Factor\": 7424,\n\t\"risk\": 8376,\n\t\"Problem\": 13545,\n\t\"chronic\": 2198,\n\t\"w/\": 23645,\n\t\"non-Mediterranean\": 31544,\n\t\"guess\": 6129,\n\t\"reddish\": 9996,\n\t\"Aeromexico\": 16497,\n\t\"Copies\": 22547,\n\t\"accomplishes\": 15261,\n\t\"Instagram\": 15868,\n\t\"developmentally\": 8781,\n\t\"hundredth\": 15646,\n\t\"helicopter\": 18579,\n\t\"Indivero\": 23165,\n\t\"demonstrating\": 1971,\n\t\"immigration\": 13029,\n\t\"winters\": 17087,\n\t\"Saucey's\": 28057,\n\t\"11.8\": 18434,\n\t\"neural\": 8343,\n\t\"retaking\": 22673,\n\t\"Alaskans’\": 7893,\n\t\"barber's\": 30450,\n\t\"Rank\": 26084,\n\t\"fanaticism\": 20376,\n\t\"Vandergrift\": 2398,\n\t\"Hall\": 3618,\n\t\"Maoists\": 19569,\n\t\"lamp\": 2167,\n\t\"Produce\": 8005,\n\t\"Rack\": 10590,\n\t\"Depends\": 27427,\n\t\"analyzing\": 2827,\n\t\"performers\": 21035,\n\t\"smells\": 16107,\n\t\"Patio\": 28241,\n\t\"conclusions\": 1988,\n\t\"NK\": 22913,\n\t\"Sigma\": 18055,\n\t\"myself\": 5049,\n\t\"Maeena\": 12270,\n\t\"partisan\": 30684,\n\t\"ensuring\": 5673,\n\t\"fascinating\": 7320,\n\t\"Humanities\": 10384,\n\t\"anti-shipping\": 25782,\n\t\"doubles\": 4956,\n\t\"Connolly\": 27825,\n\t\"thirties\": 30713,\n\t\"1988\": 1104,\n\t\"1780\": 3585,\n\t\"petshoppe\": 26595,\n\t\"convenience\": 14547,\n\t\"Bhutan\": 19526,\n\t\"Reinstein's\": 11472,\n\t\"1525\": 25438,\n\t\"71\": 1648,\n\t\"face\": 7679,\n\t\"oaks\": 12016,\n\t\"coating\": 26954,\n\t\"kayak\": 17246,\n\t\"hottie\": 27967,\n\t\"cleaner\": 15065,\n\t\"lotus-flower\": 31021,\n\t\"awarding\": 719,\n\t\"VS\": 27045,\n\t\"http://www.goldentriangleindia.com/delhi/hotels-in-delhi.html\": 27409,\n\t\"prototype\": 15036,\n\t\"Scene\": 25414,\n\t\"fucked\": 23906,\n\t\"Quixote's\": 30427,\n\t\"Ace\": 22820,\n\t\"Card\": 10323,\n\t\"Jupiter\": 25294,\n\t\"tails\": 2845,\n\t\"Rural\": 31492,\n\t\"hardcore\": 20297,\n\t\"shotgun\": 21579,\n\t\"breathless\": 32351,\n\t\"murdered\": 9699,\n\t\"Design\": 2224,\n\t\"Paschal\": 10132,\n\t\"learner\": 15210,\n\t\"afterwards\": 3447,\n\t\"Liberty's\": 27508,\n\t\"Hirsohima\": 18724,\n\t\"Association\": 551,\n\t\"Generic\": 15227,\n\t\"stealthy\": 31244,\n\t\"Vichy\": 5434,\n\t\"uprising\": 4038,\n\t\"bedding\": 26570,\n\t\"dumping\": 14647,\n\t\"unusual\": 1169,\n\t\"Yampa\": 28708,\n\t\"enhancements\": 8411,\n\t\"Bonafide\": 28380,\n\t\"Suitable\": 4219,\n\t\"Passion\": 12394,\n\t\"stand-ins\": 8174,\n\t\"stacks\": 9036,\n\t\"architecture\": 4481,\n\t\"immovable\": 30871,\n\t\"becoming\": 2996,\n\t\"relinquished\": 31894,\n\t\"panga\": 31930,\n\t\"starve\": 6693,\n\t\"radiators\": 9708,\n\t\"egg\": 6518,\n\t\"Mesoamerica\": 15298,\n\t\"Arctic\": 15496,\n\t\"nationals\": 19561,\n\t\"glittering\": 32544,\n\t\"shaded\": 32819,\n\t\"Liverpool\": 17574,\n\t\"Muggles\": 32046,\n\t\"lusty\": 31211,\n\t\"Crosstab\": 30072,\n\t\"galleon\": 9073,\n\t\"Sabunji\": 4546,\n\t\"oils\": 17901,\n\t\"courteous\": 24717,\n\t\"Mia's\": 29648,\n\t\"purged\": 15171,\n\t\"187\": 26102,\n\t\"sneaked\": 32350,\n\t\"RECORD\": 14296,\n\t\"Battery\": 32581,\n\t\"overlooking\": 15474,\n\t\"ceasefire\": 19017,\n\t\"Refugees\": 12997,\n\t\"rumbling\": 30462,\n\t\"pests\": 13494,\n\t\"frequent\": 3235,\n\t\"ROOMATES\": 11792,\n\t\"Fe\": 29313,\n\t\"G\": 1819,\n\t\"Steichen\": 13323,\n\t\"Shih\": 3354,\n\t\"7037686710\": 24765,\n\t\"cleansing\": 9773,\n\t\"Urinary\": 27066,\n\t\"officially\": 14578,\n\t\"a.m.\": 15732,\n\t\"non-veg\": 27289,\n\t\"pay\": 1383,\n\t\"stating\": 12737,\n\t\"depicts\": 14753,\n\t\"Forties\": 16262,\n\t\"orbit\": 4561,\n\t\"LAMP\": 11831,\n\t\"reverence\": 14377,\n\t\"observes\": 20458,\n\t\"NVA\": 27712,\n\t\"Summer\": 5581,\n\t\"herding\": 21587,\n\t\"correspondent\": 19250,\n\t\"melting\": 24608,\n\t\"inaccurate\": 10597,\n\t\"Solheim\": 19031,\n\t\"cellfone\": 24515,\n\t\"mellow\": 27656,\n\t\"investigated\": 321,\n\t\"Bit\": 29872,\n\t\"PATH\": 30204,\n\t\"bareback\": 26987,\n\t\"Geographic\": 2228,\n\t\"regional\": 2554,\n\t\"cultures\": 15287,\n\t\"Steeped\": 16263,\n\t\"litely\": 2279,\n\t\"overt\": 9620,\n\t\"toss\": 16114,\n\t\"Polish\": 4326,\n\t\"Sesame\": 6303,\n\t\"Access\": 16322,\n\t\"http://www.collectinghistory.net/chernobyl/\": 18699,\n\t\"perceive\": 1542,\n\t\"Crab\": 28431,\n\t\"Dillards\": 29035,\n\t\"glamour's\": 31052,\n\t\"PO\": 21820,\n\t\"Midnight\": 5504,\n\t\"peach\": 17893,\n\t\"seekers\": 12138,\n\t\"Missouri\": 17432,\n\t\"Horatio\": 25488,\n\t\"HTC\": 26692,\n\t\"sixties\": 13386,\n\t\"Aka\": 28628,\n\t\"T.\": 7537,\n\t\"DINING\": 29653,\n\t\"Exile\": 28954,\n\t\"frigidity\": 8490,\n\t\"pre-fabricated\": 24912,\n\t\"Category\": 24458,\n\t\"04/30/2001\": 22883,\n\t\"snoozing\": 7092,\n\t\"Rail\": 29199,\n\t\"collaborate\": 15050,\n\t\"smoke\": 7398,\n\t\"opossums\": 28033,\n\t\"A&E\": 29316,\n\t\"AT\": 24542,\n\t\"Route\": 17447,\n\t\"staffed\": 18912,\n\t\"REsearch\": 24158,\n\t\"romaine\": 27439,\n\t\"____________________________________________________________\": 22501,\n\t\"445\": 21209,\n\t\"Highness\": 30943,\n\t\"Act\": 7222,\n\t\"Kusal\": 28318,\n\t\"undeniable\": 28053,\n\t\"Purchase\": 21701,\n\t\"Sikkim\": 19176,\n\t\"customarily\": 14313,\n\t\"Wahhabis\": 18603,\n\t\"sociable\": 24880,\n\t\"finals\": 12577,\n\t\"ACPeds\": 1269,\n\t\"desks\": 13651,\n\t\"nationalities\": 11195,\n\t\"CORRECT\": 22338,\n\t\"coup-d'etat\": 30665,\n\t\"gallery\": 169,\n\t\"homo\": 28809,\n\t\"acquiesce\": 14974,\n\t\"national\": 5719,\n\t\"continental\": 107,\n\t\"banquets\": 31845,\n\t\"Heating\": 28457,\n\t\"fraying\": 8969,\n\t\"chose\": 10225,\n\t\"nationalists\": 18810,\n\t\"trusted\": 8146,\n\t\"Karim\": 4543,\n\t\"responses\": 1992,\n\t\"belidve\": 11984,\n\t\"LC\": 23527,\n\t\"sensations\": 25549,\n\t\"Scary\": 6758,\n\t\"choppy\": 8971,\n\t\"Thunder\": 13622,\n\t\"Dental\": 29212,\n\t\"connected\": 1118,\n\t\"publicity\": 10586,\n\t\"paternal\": 5437,\n\t\"caption\": 30216,\n\t\"app\": 16162,\n\t\"buttons\": 9354,\n\t\"swayed\": 9932,\n\t\"1782\": 3107,\n\t\"rushed\": 6007,\n\t\"BETTER\": 32482,\n\t\"urging\": 1481,\n\t\"unemployable\": 24274,\n\t\"unfrightened\": 32597,\n\t\"individuals\": 384,\n\t\"gstrathmann@mediaone.net\": 23839,\n\t\"pity\": 10901,\n\t\"Earl\": 4179,\n\t\"repaired\": 9594,\n\t\"Related\": 1957,\n\t\"Lunch\": 23222,\n\t\"resources\": 843,\n\t\"rabid\": 19305,\n\t\"corrupt\": 20370,\n\t\"unclear\": 2698,\n\t\"!!!!!!!!!!!!!!\": 28808,\n\t\"Returning\": 30719,\n\t\"Transit\": 17492,\n\t\"chapter\": 3773,\n\t\"differing\": 2042,\n\t\"LETTER\": 11510,\n\t\"argument\": 3853,\n\t\"Kane\": 6283,\n\t\"20.doc\": 21948,\n\t\"stolen\": 4847,\n\t\"domestic\": 12039,\n\t\"revolutionary\": 14464,\n\t\"can’t\": 8663,\n\t\"Opened\": 16344,\n\t\"Blotts\": 32341,\n\t\"mezza\": 29705,\n\t\"exhibited\": 13332,\n\t\"VERY\": 26227,\n\t\"delegations\": 31582,\n\t\"constructive\": 22872,\n\t\"favourable\": 23462,\n\t\"Chevron\": 24378,\n\t\"clockwork\": 26171,\n\t\"mid\": 21958,\n\t\"Registry\": 30198,\n\t\"bankrupt\": 20491,\n\t\"exposing\": 10290,\n\t\"prayer\": 5984,\n\t\"mouth\": 6834,\n\t\"Anti-Fraud\": 27036,\n\t\"damaged\": 9859,\n\t\"dissent\": 31536,\n\t\".\": 68,\n\t\"anemic\": 26652,\n\t\"anti-Luther\": 6529,\n\t\"vendor\": 29318,\n\t\"outlined\": 4007,\n\t\"Mason\": 32070,\n\t\"member\": 5579,\n\t\"stages\": 15031,\n\t\"hr\": 16321,\n\t\"Brave\": 24737,\n\t\"Qaeda\": 18632,\n\t\"shadow\": 9193,\n\t\"armored\": 25765,\n\t\"Acting\": 14599,\n\t\"Cocaine\": 19403,\n\t\"Technical\": 22002,\n\t\"endured\": 14024,\n\t\"Matthews\": 15238,\n\t\"airliners\": 20636,\n\t\"embarked\": 14612,\n\t\"application\": 1670,\n\t\"Cairo\": 30674,\n\t\"functionaries\": 30708,\n\t\"Restoration\": 28427,\n\t\"!!!.\": 28687,\n\t\"balance\": 7262,\n\t\"Treat\": 29777,\n\t\"brutal\": 14269,\n\t\"rout\": 31250,\n\t\"aggrieved\": 32765,\n\t\"Orwell's\": 23953,\n\t\"Computers\": 24146,\n\t\"cork\": 26838,\n\t\"TW\": 22717,\n\t\"translate\": 14565,\n\t\"Pedicures\": 28291,\n\t\"subtract\": 6268,\n\t\"ABOVE\": 19485,\n\t\"Argentine\": 702,\n\t\"OTC\": 22516,\n\t\"opinion\": 3861,\n\t\"hundredths\": 15644,\n\t\"mask\": 15805,\n\t\"viewed\": 5238,\n\t\"starfighter's\": 9230,\n\t\"Postal\": 24972,\n\t\"+++\": 28350,\n\t\"pressuring\": 29865,\n\t\"unhooked\": 31706,\n\t\"Christine\": 31474,\n\t\"Bredders\": 27049,\n\t\"components\": 5636,\n\t\"Youngblood\": 30509,\n\t\"Key\": 12667,\n\t\"Asi\": 18522,\n\t\"Montgomery@ENRON\": 23790,\n\t\"acting\": 5538,\n\t\"Tulsans\": 17427,\n\t\"vanished\": 9963,\n\t\"Toni\": 21483,\n\t\"developments\": 3029,\n\t\"detect\": 11377,\n\t\"Victory\": 18067,\n\t\"Crete\": 25364,\n\t\"Nancy\": 14101,\n\t\"feebly\": 31178,\n\t\"Idaho\": 5848,\n\t\"ISDAs\": 22282,\n\t\"kings\": 26894,\n\t\"LEAVE\": 11858,\n\t\"unprocessed\": 20689,\n\t\"sausages\": 32213,\n\t\"dot\": 24644,\n\t\"Whether\": 1402,\n\t\"kin\": 12484,\n\t\"wounds\": 14417,\n\t\"Imperial\": 9209,\n\t\"brim\": 18133,\n\t\"BLACKLINE\": 21504,\n\t\"regions\": 2562,\n\t\"grumble\": 19856,\n\t\"asks\": 8865,\n\t\"WD\": 23411,\n\t\"flourished\": 25040,\n\t\"publisher\": 1407,\n\t\"Veronique\": 10058,\n\t\"ABC's\": 4084,\n\t\"Guardsmen\": 14317,\n\t\"resided\": 3446,\n\t\"Plac\": 16930,\n\t\"tub\": 9705,\n\t\"dresses\": 17380,\n\t\"Dash\": 31066,\n\t\"rippled\": 8993,\n\t\"Anthony's\": 22220,\n\t\"commentaries\": 2389,\n\t\"thirst\": 25837,\n\t\"data\": 419,\n\t\"Sculpture\": 3538,\n\t\"laminated\": 23221,\n\t\"11.25\": 31419,\n\t\"Foolhardy\": 12862,\n\t\"doomed\": 11231,\n\t\"generals\": 19112,\n\t\"streams\": 8119,\n\t\"charms\": 17542,\n\t\"BooleanPolygonConstraint\": 2342,\n\t\"helpers\": 7152,\n\t\"susceptibility\": 9588,\n\t\"1995\": 8248,\n\t\"petroleum\": 18939,\n\t\"80's\": 11781,\n\t\"near\": 4247,\n\t\"Romelu\": 13096,\n\t\"barns\": 26823,\n\t\"disrupted\": 30326,\n\t\"Perold\": 16213,\n\t\"elongate\": 17667,\n\t\"Commission\": 10853,\n\t\"memos\": 23676,\n\t\"climbed\": 30245,\n\t\"ministry\": 13977,\n\t\"non-commercial\": 10976,\n\t\"?!\": 22023,\n\t\"chores\": 18265,\n\t\"evidenced\": 2618,\n\t\"en\": 9629,\n\t\"brochure\": 21058,\n\t\"Through\": 3074,\n\t\"affairs\": 5296,\n\t\"sandwiches\": 11474,\n\t\"prerequisite\": 7834,\n\t\"bottles\": 12011,\n\t\"Coco\": 15909,\n\t\"Wow\": 6475,\n\t\"venturing\": 11402,\n\t\"Presidency\": 14306,\n\t\"recourse\": 18207,\n\t\"crapfest\": 23901,\n\t\"Ted\": 9569,\n\t\"Senegal\": 14489,\n\t\"Tai\": 1845,\n\t\"Biologist\": 10193,\n\t\"sacristy\": 19930,\n\t\"pro-same\": 24657,\n\t\"Yousef\": 20803,\n\t\"Formica\": 10199,\n\t\"ashore\": 30995,\n\t\"campaigning\": 16943,\n\t\"Hainan\": 24824,\n\t\"#cognitivebias\": 7659,\n\t\"Terrestrial\": 15588,\n\t\"industrialized\": 8053,\n\t\"privatisation\": 31547,\n\t\"target\": 8525,\n\t\"Bohlin\": 1579,\n\t\"Fassbinder\": 5514,\n\t\"Salem\": 12239,\n\t\"Rulan\": 3494,\n\t\"Maximum\": 5329,\n\t\"handle\": 7188,\n\t\"underwrite\": 19049,\n\t\"statewide\": 19841,\n\t\"cooled\": 22782,\n\t\"Gibson\": 22778,\n\t\"Flooding\": 24407,\n\t\"lasts\": 8820,\n\t\"voices\": 9008,\n\t\"tendency\": 15220,\n\t\"bulrush\": 32359,\n\t\"Immanuel\": 14897,\n\t\"Resignation\": 31404,\n\t\"arrest\": 3863,\n\t\"crunched\": 9658,\n\t\"jitsu\": 28544,\n\t\"Mortons\": 26563,\n\t\"cuts\": 24576,\n\t\"hereby\": 21688,\n\t\"Scientology's\": 12684,\n\t\"socks\": 9024,\n\t\"ARCHIBALD\": 19844,\n\t\"MM\": 21599,\n\t\"whom\": 3928,\n\t\"Shimon\": 11172,\n\t\"suffering\": 4729,\n\t\"drain\": 9732,\n\t\"Seals\": 17228,\n\t\"Shag\": 11975,\n\t\"install\": 13953,\n\t\"Bases\": 2234,\n\t\"It’s\": 7709,\n\t\"floods\": 13491,\n\t\"habits\": 14851,\n\t\"signaled\": 4679,\n\t\"purchace\": 29371,\n\t\"bench\": 8710,\n\t\"35620\": 23212,\n\t\"participate\": 21356,\n\t\"strongest\": 8518,\n\t\"dehydrated\": 27228,\n\t\"Continually\": 15284,\n\t\"premised\": 7312,\n\t\"sate\": 27874,\n\t\"horses\": 6354,\n\t\"Measures\": 15628,\n\t\"gardneri\": 27889,\n\t\"tone\": 13619,\n\t\"Keeney\": 23768,\n\t\"refinery\": 23417,\n\t\"NBC\": 10882,\n\t\"peninsula\": 14286,\n\t\"muff\": 27147,\n\t\"insecure\": 904,\n\t\"hackneyed\": 11139,\n\t\"frontline\": 9241,\n\t\"Hughes\": 19426,\n\t\"owes\": 18794,\n\t\"zealous\": 17633,\n\t\"g0v\": 13931,\n\t\"counterparty\": 22068,\n\t\"supporting\": 2820,\n\t\"well-formed\": 30129,\n\t\"adding\": 10301,\n\t\"targetting\": 18609,\n\t\"unity\": 14341,\n\t\"Chateaux\": 16663,\n\t\"nissan\": 28852,\n\t\"lists\": 490,\n\t\"Bus\": 16531,\n\t\"sinuses\": 15818,\n\t\"recommendation\": 22927,\n\t\"Congrats\": 21653,\n\t\"Jeep\": 29800,\n\t\"GOOD\": 27081,\n\t\"icecreams\": 11482,\n\t\"typically\": 857,\n\t\"dragon's\": 17187,\n\t\"twin\": 18962,\n\t\"ambassadors\": 16850,\n\t\"teachers\": 1526,\n\t\"m\": 2680,\n\t\"Abbas\": 16752,\n\t\"melodramatic\": 27650,\n\t\"Suppose\": 15183,\n\t\"verify\": 21713,\n\t\"recite\": 11054,\n\t\"wanting\": 6184,\n\t\"discovers\": 14017,\n\t\"airport\": 16457,\n\t\"Caraibes\": 16691,\n\t\"Limited\": 21667,\n\t\"place\": 748,\n\t\"attend\": 5723,\n\t\"reveal\": 8378,\n\t\"defeat\": 12450,\n\t\"December\": 3596,\n\t\"Bench\": 31759,\n\t\"airing\": 32818,\n\t\"Judges\": 24263,\n\t\"afford\": 6985,\n\t\"Lao\": 1844,\n\t\"Información\": 17010,\n\t\"cod\": 25162,\n\t\"yeah\": 6232,\n\t\"capita\": 11669,\n\t\"phenotypic\": 2911,\n\t\"ontogeny\": 2731,\n\t\"Ackles\": 5787,\n\t\"Jonesy\": 13616,\n\t\"Moral\": 15139,\n\t\"Lancashire\": 5428,\n\t\"15th\": 1043,\n\t\"insulation\": 23942,\n\t\"imaginations\": 15613,\n\t\"Mahal\": 29023,\n\t\"signing\": 11025,\n\t\"realises\": 19318,\n\t\"Hunger\": 24873,\n\t\"huit\": 6322,\n\t\"diners\": 16626,\n\t\"quickest\": 17559,\n\t\"Diana\": 6510,\n\t\"cross-legged\": 30910,\n\t\"fixeded\": 28352,\n\t\"Protocol\": 23843,\n\t\"actively\": 2405,\n\t\"Elliotts\": 22264,\n\t\"Consumers'\": 23884,\n\t\"underlip\": 30543,\n\t\"ingesting\": 10294,\n\t\"proliferated\": 18913,\n\t\"swollen\": 6307,\n\t\"Yea\": 22787,\n\t\"Travelers\": 26494,\n\t\"cat's\": 24850,\n\t\"presume\": 7139,\n\t\"Kenyan\": 14536,\n\t\"Depot\": 20966,\n\t\"complex\": 57,\n\t\"Kilinochchi\": 19025,\n\t\"elderly\": 31841,\n\t\"hoods\": 29455,\n\t\"Growing\": 4709,\n\t\"Occasionally\": 30339,\n\t\"Iraq\": 4517,\n\t\"charge\": 5994,\n\t\"medical\": 7301,\n\t\"Hut\": 15988,\n\t\"Courtesy\": 29596,\n\t\"caffeine\": 15764,\n\t\"Kerry's\": 19759,\n\t\"Théâtre\": 5462,\n\t\"bade\": 9424,\n\t\"taking\": 1258,\n\t\"Californians\": 23710,\n\t\"eaters\": 8147,\n\t\"segueway\": 23919,\n\t\"flinched\": 30718,\n\t\"flames\": 31034,\n\t\"recruits\": 20870,\n\t\"adventurous\": 17139,\n\t\"11:48\": 22385,\n\t\"Kurdish\": 19292,\n\t\"eligible\": 16469,\n\t\"Lingard\": 13128,\n\t\"Hebrew\": 5163,\n\t\"extremes\": 32379,\n\t\"coat\": 10143,\n\t\"fresh\": 8040,\n\t\"newspaper\": 3973,\n\t\"couple\": 3406,\n\t\"11/2\": 22406,\n\t\"Op\": 8227,\n\t\"Services\": 19567,\n\t\"Hai\": 22316,\n\t\"Crosse\": 28092,\n\t\"winked\": 9890,\n\t\"influencing\": 19045,\n\t\"ward\": 9603,\n\t\"convinced\": 3988,\n\t\"formalin\": 10617,\n\t\"external\": 2797,\n\t\"Communion\": 5007,\n\t\"neighbours’\": 19748,\n\t\"VIC\": 22239,\n\t\"obscurity\": 25551,\n\t\"http://www.nsrl.ttu.edu/chernobyl/wildlifepreserve.htm\": 18695,\n\t\"magnificent\": 11470,\n\t\"cake-like\": 32754,\n\t\"praises\": 20075,\n\t\"kindness\": 27124,\n\t\"Schott\": 22990,\n\t\"Oxley\": 21046,\n\t\"SRD\": 28086,\n\t\"opossum\": 17808,\n\t\"unpacking\": 8382,\n\t\"http://www.compaq.com/products/notebooks/index.html\": 21779,\n\t\"Braverman\": 12954,\n\t\"ECT\": 21693,\n\t\"gloated\": 30596,\n\t\"Jāmé\": 16810,\n\t\"Walnut\": 29959,\n\t\"stones\": 8884,\n\t\"fireplaces\": 8571,\n\t\"f*ed\": 19307,\n\t\"bipedal\": 2759,\n\t\"17,000\": 7957,\n\t\"ratio\": 18427,\n\t\"July\": 3851,\n\t\"Caffasso’s\": 16592,\n\t\"Mecca's\": 12253,\n\t\"Bureau\": 16387,\n\t\"complaint\": 1524,\n\t\"1849\": 4437,\n\t\"evaporate\": 17749,\n\t\"Counter-Strike\": 12581,\n\t\"burrows\": 10627,\n\t\"PMA\": 28885,\n\t\"peacekeeping\": 18984,\n\t\"brooded\": 9957,\n\t\"biggest\": 5490,\n\t\"gud\": 26212,\n\t\"insular\": 13655,\n\t\"Albanian\": 13858,\n\t\"WMD\": 20795,\n\t\"Sensor\": 2654,\n\t\"Horsiesios\": 5993,\n\t\"Palmer@ENRON\": 23864,\n\t\"boston\": 7667,\n\t\"disrespect\": 17399,\n\t\"reassignment\": 1292,\n\t\"faceless\": 30253,\n\t\"Arbery\": 14142,\n\t\"ta\": 6043,\n\t\"reckon\": 32172,\n\t\"sale\": 21174,\n\t\"1000.00\": 24916,\n\t\"whitish\": 27841,\n\t\"demonstrate\": 2037,\n\t\"poisons\": 32258,\n\t\"humus\": 8912,\n\t\"wow\": 6448,\n\t\"1796\": 7941,\n\t\"windsheild\": 28915,\n\t\"Progressive\": 16427,\n\t\"endowments\": 11670,\n\t\"Taxi\": 16565,\n\t\"raises\": 15198,\n\t\"Westerners\": 17351,\n\t\"detectives\": 19450,\n\t\"rep\": 22539,\n\t\"friendlier\": 27802,\n\t\"page\": 5647,\n\t\"368\": 5907,\n\t\"CONSIDER\": 11932,\n\t\"Prod\": 21658,\n\t\"!?!\": 28903,\n\t\"utensil\": 18057,\n\t\"STUDYING\": 11843,\n\t\"murders\": 19971,\n\t\"converting\": 22687,\n\t\"Committee's\": 24476,\n\t\"lecturing\": 30594,\n\t\"eve.\": 23067,\n\t\"gains\": 745,\n\t\"Afghan\": 12055,\n\t\"Meiko\": 26508,\n\t\"formalism\": 14923,\n\t\"Su\": 17023,\n\t\"Poseidon\": 13516,\n\t\"senses\": 3466,\n\t\"fleets\": 30953,\n\t\"follow\": 5943,\n\t\"Cruse\": 3774,\n\t\"weakened\": 11560,\n\t\"We’re\": 15989,\n\t\"robber\": 24139,\n\t\"11:26\": 21963,\n\t\"14,000\": 20641,\n\t\"drivel\": 30480,\n\t\"praying\": 30585,\n\t\"loyal\": 25752,\n\t\"83N\": 21118,\n\t\"Kid\": 7095,\n\t\"arrived\": 3550,\n\t\"parasite\": 10208,\n\t\"sweat\": 24845,\n\t\"Algarve\": 27528,\n\t\"Compson\": 30716,\n\t\"John's\": 21084,\n\t\"Sr.\": 20952,\n\t\"16:29\": 22580,\n\t\"smallest\": 3698,\n\t\"Chapman's\": 13632,\n\t\"Finest\": 11100,\n\t\"Odara's\": 31947,\n\t\"negotiator\": 19026,\n\t\"capture\": 2299,\n\t\"servers\": 29284,\n\t\"wives\": 20037,\n\t\"Background\": 10497,\n\t\"ranging\": 7886,\n\t\"alcohol\": 13534,\n\t\"12/22/2000\": 23262,\n\t\"riso\": 28814,\n\t\"3:00\": 21761,\n\t\"trust\": 1249,\n\t\"Freemason\": 25528,\n\t\"ventilated\": 26282,\n\t\"Wed\": 11767,\n\t\"Peekaboo\": 12639,\n\t\"tonight\": 7022,\n\t\"swaps\": 22055,\n\t\"Jerusalem's\": 11252,\n\t\"EAST\": 23433,\n\t\"Mr\": 12669,\n\t\"reopen\": 19953,\n\t\"someone\": 1771,\n\t\"unstirred\": 32872,\n\t\"contacting\": 7651,\n\t\"HURRAH\": 32006,\n\t\"staves\": 31283,\n\t\"Gillette\": 15996,\n\t\"receipts\": 31537,\n\t\"572\": 19533,\n\t\"longed\": 9440,\n\t\"paw\": 9487,\n\t\"1991\": 992,\n\t\"atmospheric\": 2638,\n\t\"Saudi\": 12258,\n\t\"eradicate\": 32713,\n\t\"fluently\": 3370,\n\t\"ʒan\": 5361,\n\t\"closer\": 8058,\n\t\"Round\": 20933,\n\t\"Beginner’s\": 8329,\n\t\"Taulbee\": 558,\n\t\"Tuesday's\": 21010,\n\t\"moto\": 27562,\n\t\"half\": 712,\n\t\"Holley\": 14706,\n\t\"wished\": 4640,\n\t\"landowners\": 7962,\n\t\"Varanasi\": 27397,\n\t\"Contra\": 19385,\n\t\"rattling\": 19152,\n\t\"semi\": 15863,\n\t\"steers\": 21856,\n\t\"downloads\": 11363,\n\t\"all-night\": 31866,\n\t\"transmedia\": 2934,\n\t\"frequency\": 2611,\n\t\"waitstaff\": 29999,\n\t\"sexing\": 27850,\n\t\"Wenatchee\": 28999,\n\t\"watt\": 26897,\n\t\"stillness\": 31232,\n\t\"Ed\": 11741,\n\t\"DAKOTA\": 11499,\n\t\"soap\": 9723,\n\t\"rhythm\": 24103,\n\t\"Pinto\": 22295,\n\t\"living-room\": 31618,\n\t\"scones\": 32452,\n\t\"herpes\": 28620,\n\t\"1590\": 25363,\n\t\"work\": 127,\n\t\"H-0045/99\": 31482,\n\t\"affiliate\": 4868,\n\t\"accumulating\": 20263,\n\t\"mollified\": 18893,\n\t\"Oregon\": 25047,\n\t\"Hobbes\": 25379,\n\t\"darkroom\": 26534,\n\t\"bday\": 26899,\n\t\"muslin\": 18451,\n\t\"Nile\": 28040,\n\t\"Vehicle\": 24002,\n\t\"subdivide\": 8133,\n\t\"Gates\": 17110,\n\t\"compeltly\": 28661,\n\t\"Reserves\": 16325,\n\t\"equitable\": 14484,\n\t\"Blizzard\": 24232,\n\t\"sprinkle\": 17738,\n\t\"intermarrying\": 20045,\n\t\"red\": 4697,\n\t\"Bos\": 10194,\n\t\"chewing\": 6914,\n\t\"Axel\": 13121,\n\t\"magnitude\": 24385,\n\t\"Prime\": 12170,\n\t\"BUFFALO\": 29687,\n\t\"crew-cut\": 31964,\n\t\"You’ve\": 9764,\n\t\"tks\": 23258,\n\t\"geese\": 30553,\n\t\"twenty-four\": 31077,\n\t\"60.23\": 1693,\n\t\"Carroll's\": 9830,\n\t\"affinity\": 19111,\n\t\"trousers\": 19826,\n\t\"sites\": 10275,\n\t\"salary\": 20957,\n\t\"Rutgers\": 29464,\n\t\"Mike\": 11737,\n\t\"goggled\": 32131,\n\t\"MAKE\": 24909,\n\t\"countryside\": 15605,\n\t\"entertaining\": 7347,\n\t\"grizzly\": 15975,\n\t\"Wisteria\": 25563,\n\t\"threadbare\": 32898,\n\t\"arranging\": 20004,\n\t\"Thurber\": 32608,\n\t\"114,950\": 15674,\n\t\"Man\": 4137,\n\t\"realisation\": 14501,\n\t\"Paradises\": 16838,\n\t\"34.6\": 26056,\n\t\"boils\": 7177,\n\t\"DOOR\": 24543,\n\t\"alt.animals.cat\": 24831,\n\t\"Volume\": 10939,\n\t\"heightened\": 14234,\n\t\"audio\": 10953,\n\t\"peaks\": 25315,\n\t\"windy\": 15995,\n\t\"criticized\": 10561,\n\t\"surround\": 7858,\n\t\"relating\": 2454,\n\t\"beneath\": 9474,\n\t\"crazed\": 10167,\n\t\"doubling\": 26531,\n\t\"WELL\": 11870,\n\t\"rank\": 3562,\n\t\"none\": 8167,\n\t\"devastating\": 19808,\n\t\"report\": 139,\n\t\"mostly\": 7857,\n\t\"??????\": 21005,\n\t\"collusion\": 23689,\n\t\"Bonaire\": 12806,\n\t\"read\": 6522,\n\t\"verde\": 29158,\n\t\"lithos\": 21163,\n\t\"visibility\": 10857,\n\t\"grains\": 18356,\n\t\"exert\": 30375,\n\t\"trays\": 30587,\n\t\"grows\": 12920,\n\t\"Anasazi\": 15418,\n\t\"dividends\": 7877,\n\t\"chunked\": 11973,\n\t\"deathly\": 20125,\n\t\"ck\": 21904,\n\t\"unimportant\": 11201,\n\t\"simulation\": 22895,\n\t\"seasonings\": 18409,\n\t\"Comments\": 22472,\n\t\"RSS\": 7794,\n\t\"benefit\": 665,\n\t\"McGovern\": 7844,\n\t\"veined\": 9150,\n\t\"channel's\": 26620,\n\t\"employees\": 7144,\n\t\"coined\": 10481,\n\t\"scroll\": 24990,\n\t\"exacerbated\": 19368,\n\t\"stifled\": 19402,\n\t\"state’s\": 7897,\n\t\"AllowDeletions\": 30220,\n\t\"initiatives\": 13916,\n\t\"gushing\": 18005,\n\t\"renegotiate\": 11563,\n\t\"Walk\": 17270,\n\t\"Legislation\": 11552,\n\t\"Joyce's\": 30634,\n\t\"Instructions\": 19488,\n\t\"puppets\": 2014,\n\t\"cousins\": 8194,\n\t\"dancers\": 24092,\n\t\"Mexicana\": 22260,\n\t\"optimal\": 1879,\n\t\"1,922,000\": 23471,\n\t\"cherished\": 14049,\n\t\"wasting\": 7122,\n\t\"downsizing\": 23980,\n\t\"dependency\": 25247,\n\t\"crepe\": 28768,\n\t\"648\": 25346,\n\t\"thriving\": 17077,\n\t\"expire\": 16037,\n\t\"Fischer\": 21135,\n\t\"causal\": 7374,\n\t\"quarry\": 31221,\n\t\"2006\": 1014,\n\t\"76\": 13180,\n\t\"attic\": 8737,\n\t\"unexplored\": 2914,\n\t\"wasn’t\": 8951,\n\t\"packaging\": 16048,\n\t\"fills\": 6264,\n\t\"retraction\": 2750,\n\t\"confrontation\": 12823,\n\t\"Autobiography\": 3383,\n\t\"councillor\": 12486,\n\t\"magical\": 13415,\n\t\"rusty\": 31176,\n\t\"entrails\": 31253,\n\t\"Kolonaki\": 32936,\n\t\"ensconced\": 30310,\n\t\"U\": 26784,\n\t\"http://www.ontario.ca/en/information_bundle/birthcertificates/119275.html\": 27474,\n\t\"permissions\": 13722,\n\t\"vigorously\": 18448,\n\t\"trustee's\": 23831,\n\t\"Jemison\": 22671,\n\t\"v\": 24318,\n\t\"moonlit\": 32008,\n\t\"plates\": 16138,\n\t\"censuses\": 689,\n\t\"approximately\": 3065,\n\t\"Jerry\": 4912,\n\t\"BATCH\": 29694,\n\t\"rational\": 6616,\n\t\"TAKE\": 11890,\n\t\"ozs\": 22272,\n\t\"vindication\": 14407,\n\t\"mineral\": 8890,\n\t\"IMPOSSIBLE\": 26487,\n\t\"astrophysics\": 11343,\n\t\"Boil\": 22529,\n\t\"glue\": 26832,\n\t\"drinking\": 6716,\n\t\"713-546-5000\": 23836,\n\t\"8.25\": 28537,\n\t\"particularly\": 424,\n\t\"defend\": 24138,\n\t\"promotional\": 1341,\n\t\"winter\": 5131,\n\t\"reconfirm\": 21432,\n\t\"impenetrable\": 25550,\n\t\"common\": 1207,\n\t\"F%#king\": 29190,\n\t\"punishment\": 12218,\n\t\"Hamster\": 26415,\n\t\"ANYONE\": 20313,\n\t\"180\": 4810,\n\t\"mike\": 21178,\n\t\"Subject\": 21919,\n\t\"conservatory\": 5451,\n\t\"12/14/2000\": 22723,\n\t\"M18\": 17563,\n\t\"CLH\": 22197,\n\t\"E.g\": 26512,\n\t\"eater\": 24333,\n\t\"Wikipedia\": 10762,\n\t\"participatory\": 15494,\n\t\"Miharris\": 13270,\n\t\"Finishing\": 18261,\n\t\"Tradition\": 20283,\n\t\"LET\": 29144,\n\t\"Pour\": 17883,\n\t\"Singmaster\": 24316,\n\t\"ElPaso\": 21464,\n\t\"1943\": 5595,\n\t\"#proposal\": 7828,\n\t\"Hospitals\": 26646,\n\t\"round\": 4858,\n\t\"analgesic\": 32780,\n\t\"wobblers\": 28008,\n\t\"function\": 1448,\n\t\"IOTM\": 11308,\n\t\"unemployment\": 7210,\n\t\"changing\": 542,\n\t\"978-376-9004\": 23858,\n\t\"deplorable\": 30738,\n\t\"prune\": 17759,\n\t\"Movimento\": 13200,\n\t\"projected\": 8079,\n\t\"hobbies\": 17986,\n\t\"Executive\": 12236,\n\t\"gf\": 27169,\n\t\"fateful\": 14047,\n\t\"Exp.doc\": 22906,\n\t\"Allegheny\": 17470,\n\t\"sieze\": 20264,\n\t\"miraculous\": 14635,\n\t\"eighth\": 5192,\n\t\"Results\": 12378,\n\t\"bruises\": 25601,\n\t\"OVERVIEW\": 21050,\n\t\"Interviews\": 23368,\n\t\"SETI\": 11305,\n\t\"reputation\": 3521,\n\t\".....................\": 28536,\n\t\"residents\": 16380,\n\t\"mildly\": 10585,\n\t\"Libra\": 25291,\n\t\"crises\": 14253,\n\t\"Olmec\": 15337,\n\t\"12/21/2000\": 23273,\n\t\"Blimey\": 32220,\n\t\"Guidelines\": 14533,\n\t\"arterial\": 17580,\n\t\"tyrants\": 24678,\n\t\"injurious\": 25930,\n\t\"Pico\": 6563,\n\t\"grease\": 28390,\n\t\"burial\": 16680,\n\t\"sugared\": 32111,\n\t\"pretended\": 10075,\n\t\"Geertz\": 14825,\n\t\"uk\": 26113,\n\t\"Pho\": 27557,\n\t\"intelligent\": 15615,\n\t\"award\": 4478,\n\t\"clay\": 7767,\n\t\"fuss\": 20394,\n\t\"89\": 4566,\n\t\"Nidd\": 28476,\n\t\"832.676.3177\": 21459,\n\t\"BALLROOM\": 29258,\n\t\"house\": 1491,\n\t\"vibrating\": 3271,\n\t\"compass\": 17490,\n\t\"driver`s\": 21251,\n\t\"ends\": 3858,\n\t\"chaser\": 18302,\n\t\"turnout\": 12363,\n\t\"ROCKERS\": 22952,\n\t\"mussels\": 28582,\n\t\"Peggy\": 21725,\n\t\"anatomy\": 3198,\n\t\"Jeopardy\": 13620,\n\t\"Despite\": 407,\n\t\"wintertime\": 15906,\n\t\"baths\": 9756,\n\t\"713-793-1429\": 23628,\n\t\"Brampton\": 12603,\n\t\"Solent\": 12960,\n\t\"unrelated\": 1784,\n\t\"shouldn't\": 7400,\n\t\"2539\": 22447,\n\t\"thievery\": 24939,\n\t\"starfighters\": 9253,\n\t\"railway\": 26446,\n\t\"grudging\": 30856,\n\t\"Bonino\": 31411,\n\t\"evasion\": 31507,\n\t\"easy\": 810,\n\t\"Asia\": 5122,\n\t\"er\": 20116,\n\t\"athwart\": 31156,\n\t\"2001\": 17519,\n\t\"façades\": 16952,\n\t\"sniffed\": 19065,\n\t\"will\": 161,\n\t\"26\": 1413,\n\t\"millionth\": 11386,\n\t\"Warsaw\": 16873,\n\t\"http://www.sploid.com/news/2006/05/evil_priest_gui.php\": 20087,\n\t\"cross-section\": 12620,\n\t\"Boyles\": 29894,\n\t\"inhabits\": 8304,\n\t\"Joking\": 27654,\n\t\"idiot\": 6731,\n\t\"comprehend\": 28024,\n\t\"agility\": 7199,\n\t\"sword\": 10180,\n\t\"summertime\": 17055,\n\t\"Realtime\": 7782,\n\t\"Zacarias\": 20581,\n\t\"One\": 517,\n\t\"McGowan\": 23372,\n\t\"coordinated\": 22784,\n\t\"Temple\": 3943,\n\t\"rioted\": 31251,\n\t\"Okinawa\": 26929,\n\t\"finery\": 9101,\n\t\"deflated\": 18295,\n\t\"Mantar\": 27421,\n\t\"Indemnity\": 3346,\n\t\"sodomise\": 32707,\n\t\"Angeliki\": 32892,\n\t\"collasped\": 13185,\n\t\"Jkthom\": 13287,\n\t\"Solid\": 6228,\n\t\"punchline\": 30456,\n\t\"enveloping\": 30980,\n\t\"Lamb\": 10133,\n\t\"Tanabe\": 4624,\n\t\"awaiting\": 3184,\n\t\"Philipe\": 5465,\n\t\"Basalt\": 16310,\n\t\"Kinkade\": 5816,\n\t\"Islamiya\": 20832,\n\t\"SUSHI\": 28784,\n\t\"despotism\": 25683,\n\t\"Accidentally\": 15187,\n\t\"splendour\": 16800,\n\t\"clad\": 9309,\n\t\"behaviours\": 168,\n\t\"outdoors\": 12029,\n\t\"each\": 353,\n\t\"Stronger\": 24012,\n\t\"ignored\": 14678,\n\t\"ext.\": 22170,\n\t\"fineally\": 27085,\n\t\"hate\": 9363,\n\t\"mourning\": 25652,\n\t\"unveiled\": 5292,\n\t\"vent\": 27788,\n\t\"Sun\": 5847,\n\t\"descended\": 4271,\n\t\"Sonia\": 7525,\n\t\"Pearl\": 17460,\n\t\"apprised\": 22859,\n\t\"AutoFilter\": 30151,\n\t\"functional\": 2784,\n\t\"opening\": 6832,\n\t\"lanes\": 10445,\n\t\"Zaha\": 4460,\n\t\"fitting\": 1800,\n\t\"5:00\": 21764,\n\t\"Guild\": 24226,\n\t\"fiscal\": 24471,\n\t\"finalists\": 12221,\n\t\"intercept\": 19236,\n\t\"6.3\": 23478,\n\t\"quizzing\": 20169,\n\t\"running\": 5804,\n\t\"0\": 4957,\n\t\"11th\": 17059,\n\t\"listlessness\": 27071,\n\t\"organic\": 8233,\n\t\"advances\": 663,\n\t\"district\": 4698,\n\t\"orientations\": 5681,\n\t\"miles\": 6071,\n\t\"accident\": 1727,\n\t\"Olsens\": 5767,\n\t\"weekends\": 7746,\n\t\"duck\": 11759,\n\t\"Heels\": 17282,\n\t\"Scottsdale\": 17043,\n\t\"incomes\": 11611,\n\t\"BAFTA\": 5370,\n\t\"approaches\": 1624,\n\t\"Verde\": 17057,\n\t\"surveillance\": 20603,\n\t\"luncheon\": 23213,\n\t\"crucify\": 25635,\n\t\"Auerbach\": 30777,\n\t\"destabilize\": 14656,\n\t\"default\": 2007,\n\t\"cost\": 6109,\n\t\"gel-\": 6437,\n\t\"partners'\": 8515,\n\t\"CPCG\": 22136,\n\t\"Group\": 12602,\n\t\"Web\": 615,\n\t\"Blocks\": 23398,\n\t\"characteristic\": 15092,\n\t\"CDEC\": 22708,\n\t\"banquet\": 3964,\n\t\"demagogues\": 14198,\n\t\"Hudson\": 16515,\n\t\"12/27\": 23265,\n\t\"pretzel\": 19794,\n\t\"intercourse\": 25668,\n\t\"changeable\": 27826,\n\t\"Console\": 28345,\n\t\"outage\": 22363,\n\t\"unwanted\": 18461,\n\t\"cite\": 1482,\n\t\"armaments\": 25759,\n\t\"processional\": 31719,\n\t\"07:48:44\": 23249,\n\t\"banked-over\": 31637,\n\t\"bathtub\": 9722,\n\t\"SEQUENCE\": 29260,\n\t\"perfumed\": 31711,\n\t\"’m\": 7729,\n\t\"percentages\": 23744,\n\t\"whether\": 317,\n\t\"premise\": 2535,\n\t\"Discipline\": 15055,\n\t\"202-828-3372\": 22829,\n\t\"Stretch\": 17664,\n\t\"youth\": 5957,\n\t\"departure\": 16449,\n\t\"receipt\": 13027,\n\t\"Whore\": 20209,\n\t\"cravings\": 29511,\n\t\"virtues\": 5934,\n\t\"featuring\": 5882,\n\t\"elegant\": 16961,\n\t\"Managing\": 29304,\n\t\"beer\": 10971,\n\t\"polytheistic\": 15310,\n\t\"resentful\": 8739,\n\t\"APPROVAL\": 23028,\n\t\"Revenues\": 23602,\n\t\"speaker\": 1818,\n\t\"Baker\": 2434,\n\t\"preparing\": 9809,\n\t\"pedicures\": 29322,\n\t\"admirers\": 4747,\n\t\"Fake\": 5281,\n\t\"Rina\": 23440,\n\t\"soo\": 26793,\n\t\"adjusted\": 22322,\n\t\"gals\": 10706,\n\t\"Alternative\": 18203,\n\t\"WHDH\": 18828,\n\t\"ENJOYS\": 28570,\n\t\"non-smokers\": 29104,\n\t\"put-on\": 32625,\n\t\"Exhibit\": 13434,\n\t\"Name\": 16879,\n\t\"relocate\": 17080,\n\t\"Hitwise\": 12752,\n\t\"guerrillas\": 18500,\n\t\"approving\": 31493,\n\t\"verbs\": 1167,\n\t\"multiplying\": 2696,\n\t\"transporting\": 8150,\n\t\"Prologue\": 9203,\n\t\"steadfast\": 15051,\n\t\"Milan\": 13190,\n\t\"That\": 5225,\n\t\"Fireflies\": 9575,\n\t\"fog\": 12908,\n\t\"Hussein's\": 18935,\n\t\"Empty\": 30131,\n\t\"Lloyd\": 22394,\n\t\"Update\": 29793,\n\t\"Shin-Wook\": 13067,\n\t\"Desert\": 5146,\n\t\"Wentzes\": 31991,\n\t\"Chapman\": 13626,\n\t\"shots\": 13348,\n\t\"Dress\": 17348,\n\t\"http://www.irisdatabase.org\": 2411,\n\t\"T2i\": 26397,\n\t\"created\": 4403,\n\t\"trim\": 6353,\n\t\"Harry\": 3000,\n\t\"412\": 17440,\n\t\"pls\": 22746,\n\t\"alt.animals.ethics.vegetarian\": 24832,\n\t\"Meanwhile\": 19921,\n\t\"That's\": 6358,\n\t\"Frame\": 3718,\n\t\"Vice-President\": 31405,\n\t\"answer\": 2008,\n\t\"ham\": 8590,\n\t\"hunter\": 17329,\n\t\"murals\": 16855,\n\t\"accusations\": 1486,\n\t\"e-visit\": 15811,\n\t\"disband\": 14744,\n\t\"GRILL\": 28792,\n\t\"triage\": 28854,\n\t\"repugnant\": 7466,\n\t\"Strobe\": 19105,\n\t\"drunken\": 29451,\n\t\"98.7\": 15815,\n\t\"Elena\": 5603,\n\t\"gem\": 28631,\n\t\"Da\": 19196,\n\t\"stylers\": 15927,\n\t\"anti-Semitism\": 30745,\n\t\"editors\": 4633,\n\t\"rarefied\": 10022,\n\t\"Corbyn\": 13741,\n\t\"Be\": 10056,\n\t\"wording\": 21200,\n\t\"moderator\": 24329,\n\t\"Olbina\": 28256,\n\t\"!!!!!!!!!!!!!!!!!!\": 29142,\n\t\"Dixam\": 17166,\n\t\"calculate\": 15640,\n\t\"culture\": 324,\n\t\"hormonal\": 15706,\n\t\"stirred\": 8412,\n\t\"whatnot\": 26463,\n\t\"Dursleys\": 32027,\n\t\"nightdress\": 32218,\n\t\"Longer\": 2832,\n\t\"Baathist\": 18512,\n\t\"declined\": 13500,\n\t\"jolt\": 32769,\n\t\"Peels\": 26342,\n\t\"chocked\": 16044,\n\t\"burned\": 15414,\n\t\"Eye\": 9,\n\t\"glaces\": 11480,\n\t\"draping\": 8791,\n\t\"Kamaow\": 18080,\n\t\"Naturalis\": 3261,\n\t\"Persian\": 16724,\n\t\"sociodemographic\": 8510,\n\t\"Archipelago\": 17203,\n\t\"infringing\": 7493,\n\t\"eReader\": 26690,\n\t\"selectiveness\": 1748,\n\t\"fandom\": 2979,\n\t\"Meiring's\": 19363,\n\t\"jargon\": 10244,\n\t\"wooing\": 18003,\n\t\"Lind's\": 30740,\n\t\"fulfilment\": 13853,\n\t\"adjoining\": 19931,\n\t\"Ogden\": 26911,\n\t\"LIBERTY\": 22953,\n\t\"rosario.gonzales@compaq.com\": 22153,\n\t\"lengthening\": 30493,\n\t\"caster\": 17860,\n\t\"unheeding\": 9934,\n\t\"13339\": 20275,\n\t\"inevitable\": 11234,\n\t\"photographed\": 26001,\n\t\"Protestants\": 27183,\n\t\"placement\": 534,\n\t\"315-460-3349\": 22307,\n\t\"roadshows\": 12648,\n\t\"189\": 13274,\n\t\"dragon\": 26355,\n\t\"crown\": 9479,\n\t\"AWESOME\": 28970,\n\t\"grips\": 8272,\n\t\"canvas\": 7250,\n\t\"Dame\": 4462,\n\t\"38.\": 14901,\n\t\"communist\": 24795,\n\t\"chauvinisms\": 25686,\n\t\"drastic\": 30367,\n\t\"deteriorate\": 8482,\n\t\"developer\": 22640,\n\t\"retail\": 16506,\n\t\"modes\": 26621,\n\t\"harshest\": 19910,\n\t\"sheltered\": 16338,\n\t\"long\": 286,\n\t\"Worse\": 18930,\n\t\"settings\": 11696,\n\t\"masters\": 8321,\n\t\"reasonably\": 1426,\n\t\"Support\": 14095,\n\t\"e\": 16731,\n\t\"Troubled\": 4735,\n\t\"Albania's\": 13869,\n\t\"outrages\": 18784,\n\t\"HISTORY\": 11924,\n\t\"Fairy\": 9923,\n\t\"vapor\": 27746,\n\t\"badge\": 3597,\n\t\"serves\": 1940,\n\t\"footage\": 9246,\n\t\"Seriously\": 30015,\n\t\"scandals\": 20260,\n\t\"unemployed\": 5266,\n\t\"ornament\": 28014,\n\t\"sappy\": 18000,\n\t\"Operating\": 10684,\n\t\"spayed\": 27058,\n\t\"healing\": 10189,\n\t\"04\": 18875,\n\t\"unfreeze\": 22552,\n\t\"kernel\": 30979,\n\t\"cockpit\": 9236,\n\t\"LOCATION\": 24019,\n\t\"righ-\": 6813,\n\t\"Boothbay\": 28376,\n\t\"anti-Americanism\": 19701,\n\t\"BEER\": 10102,\n\t\"Eunice\": 12442,\n\t\"reigning\": 19671,\n\t\"dealership\": 28697,\n\t\"dialogical\": 7290,\n\t\"1983\": 1007,\n\t\"dismal\": 10030,\n\t\"-Stip\": 21505,\n\t\"co-parenting\": 7699,\n\t\"stouter\": 2813,\n\t\"month\": 7702,\n\t\"phillies\": 29128,\n\t\"sat\": 6699,\n\t\"condemnation\": 17648,\n\t\"stated\": 5248,\n\t\"demanding\": 6003,\n\t\"human\": 1513,\n\t\"Northwest\": 18761,\n\t\"KNEW\": 28901,\n\t\"liturgy\": 32724,\n\t\"rockjumbled\": 30618,\n\t\"Polmar\": 4159,\n\t\"amidst\": 9426,\n\t\"parliamentary\": 13908,\n\t\"effort\": 3387,\n\t\"Greenwalt\": 28049,\n\t\"Libya\": 12124,\n\t\"yourself\": 5070,\n\t\"tease\": 8452,\n\t\"integrate\": 15002,\n\t\"tonight's\": 32110,\n\t\"irritable\": 31270,\n\t\"Mom\": 6429,\n\t\"Starting\": 17699,\n\t\"bored\": 26434,\n\t\"subduing\": 27731,\n\t\"g-\": 6229,\n\t\"girlfriends\": 32813,\n\t\"symbolism\": 20857,\n\t\"disconnected\": 26523,\n\t\"Madhlum\": 19333,\n\t\"Australian\": 4135,\n\t\"feather\": 26859,\n\t\"Italy\": 10352,\n\t\"Affair\": 10935,\n\t\"grateful\": 14146,\n\t\"armadilla\": 11977,\n\t\"People’s\": 14287,\n\t\"scramble\": 23726,\n\t\"black-red\": 31641,\n\t\"tasteful\": 16351,\n\t\"considerations\": 14402,\n\t\"modernity\": 11191,\n\t\"Darunta\": 20869,\n\t\"decline\": 8195,\n\t\"00:20\": 23465,\n\t\"Rohingya\": 12156,\n\t\"02:18\": 22125,\n\t\"pre-war\": 20532,\n\t\"Those\": 860,\n\t\"internationally\": 5491,\n\t\"Gaul\": 5103,\n\t\"CENTER\": 29943,\n\t\"tempest\": 14068,\n\t\"Spinal\": 24078,\n\t\"academic\": 525,\n\t\"Angel\": 12547,\n\t\"Denial\": 24684,\n\t\"Savannah\": 3576,\n\t\"Grail\": 32584,\n\t\"Need\": 18288,\n\t\"bleach\": 32506,\n\t\"1918\": 3360,\n\t\"p.m\": 21680,\n\t\"Wajiha\": 4545,\n\t\"plat\": 17489,\n\t\"mingle\": 28980,\n\t\"technically\": 13806,\n\t\"Estimates\": 11521,\n\t\"CP\": 22212,\n\t\"upsizing\": 30043,\n\t\"boss\": 24732,\n\t\"Bantu\": 1946,\n\t\"MOVING\": 28400,\n\t\"adult\": 1907,\n\t\"confer.\": 11729,\n\t\"receptive\": 10879,\n\t\"AllowEdits\": 30221,\n\t\"Jungwook\": 7548,\n\t\"System32\": 30202,\n\t\"stunning\": 14607,\n\t\"ROOMING\": 11913,\n\t\"begin\": 670,\n\t\"Enough\": 26881,\n\t\"editing\": 10832,\n\t\"47th\": 17481,\n\t\"traced\": 20194,\n\t\"minority\": 12158,\n\t\"peeing\": 27061,\n\t\"blowout\": 29732,\n\t\"104\": 22939,\n\t\"ethnic\": 362,\n\t\"anyways\": 6812,\n\t\"mouthful\": 31770,\n\t\"custody\": 19347,\n\t\"grouped\": 2131,\n\t\"Or\": 6259,\n\t\"Analysts\": 22837,\n\t\"Grow\": 17697,\n\t\"inquired\": 23171,\n\t\"hesitant\": 10813,\n\t\"ridiculized\": 25632,\n\t\"carless\": 29088,\n\t\"province\": 3343,\n\t\"clamoring\": 11958,\n\t\"Byron\": 19249,\n\t\"wang\": 26721,\n\t\"scientist\": 6841,\n\t\"Chalcis\": 5155,\n\t\"Lab\": 955,\n\t\"wa\": 21172,\n\t\"Satanism\": 25692,\n\t\"IoT\": 13937,\n\t\"Ryan\": 4861,\n\t\"Philly\": 26696,\n\t\"Alta\": 28833,\n\t\"Santorum’s\": 10567,\n\t\"white\": 6374,\n\t\"accounts\": 7300,\n\t\"only\": 104,\n\t\"marbled\": 8916,\n\t\"Development\": 13888,\n\t\"appreciable\": 31379,\n\t\"80,000\": 7933,\n\t\"U.K\": 22512,\n\t\"Gay\": 27371,\n\t\"celebration\": 3667,\n\t\"breezes\": 16992,\n\t\"info@smakkecenter.dk\": 17262,\n\t\"outnumber\": 24722,\n\t\"Maritain\": 30744,\n\t\"Gen.\": 18746,\n\t\"hams\": 32424,\n\t\"northeast\": 7342,\n\t\"scoop\": 18455,\n\t\"flew\": 19189,\n\t\"Sony\": 24202,\n\t\"top-of-the-range\": 32041,\n\t\"Rangott\": 19543,\n\t\"Gabriel\": 3921,\n\t\"didn’t\": 8425,\n\t\"curving\": 15578,\n\t\"Jules\": 5409,\n\t\"slimy\": 28444,\n\t\"HOT\": 28734,\n\t\"eligibility\": 23217,\n\t\"Utility\": 23883,\n\t\"Economist\": 26099,\n\t\"Italiano\": 28842,\n\t\"costumed\": 12626,\n\t\"foe\": 25861,\n\t\"bothered\": 11076,\n\t\"repetition\": 1822,\n\t\"1962\": 5411,\n\t\"Bechtolsheim\": 24208,\n\t\"underwater\": 32433,\n\t\"Medium\": 14510,\n\t\"tumor\": 20529,\n\t\"wore\": 25672,\n\t\"Additionally\": 393,\n\t\"functionally\": 20227,\n\t\"Localist\": 12493,\n\t\"blue\": 8886,\n\t\"inscription\": 4421,\n\t\"causation\": 7370,\n\t\"Honor\": 7499,\n\t\"Herald\": 12650,\n\t\"wholly\": 14006,\n\t\"Diagon\": 16090,\n\t\"http://www.world-nuclear.org/info/chernobyl/inf07.htm\": 18709,\n\t\"trusty\": 19155,\n\t\"yoke\": 27897,\n\t\"taint\": 31287,\n\t\"ominous\": 18857,\n\t\"FAX\": 24352,\n\t\"companions\": 5127,\n\t\"likewise\": 18800,\n\t\"Volaris\": 17118,\n\t\"rolled\": 7164,\n\t\"Ka-ki\": 12397,\n\t\"ratchet\": 18790,\n\t\"microphone\": 8672,\n\t\"counterparty's\": 23053,\n\t\"zouk\": 16704,\n\t\"Rebellion\": 21878,\n\t\"sodium\": 18039,\n\t\"reviews\": 1194,\n\t\"authorised\": 31551,\n\t\"multimillions\": 20034,\n\t\"environment-friendly\": 31350,\n\t\"stripes\": 27789,\n\t\"procure\": 21734,\n\t\"settled\": 5104,\n\t\"wal\": 29550,\n\t\"indefinitely\": 19162,\n\t\"caching\": 8025,\n\t\"Brittan\": 31496,\n\t\"Alondra\": 14600,\n\t\"stationery\": 4689,\n\t\"Meiring\": 19360,\n\t\"Karaite\": 30628,\n\t\"humankind\": 10187,\n\t\"critters\": 25072,\n\t\"With\": 1528,\n\t\"terraces\": 32876,\n\t\"bazaar\": 16777,\n\t\"economists\": 11598,\n\t\"angles\": 2627,\n\t\"cookie\": 8800,\n\t\"Watch\": 15068,\n\t\"Festival\": 5365,\n\t\"Whosoever\": 6637,\n\t\"primary\": 5668,\n\t\"SELECT\": 30179,\n\t\"Mazirat\": 5439,\n\t\"dramatization\": 7478,\n\t\"Lie\": 19764,\n\t\"rope\": 9090,\n\t\"Abu\": 18618,\n\t\"Leibman@ENRON\": 22399,\n\t\"groom\": 26984,\n\t\"Andes\": 15300,\n\t\"claim\": 1776,\n\t\"sprouts\": 17740,\n\t\"Indo\": 18978,\n\t\"embassies\": 27121,\n\t\"Repsitun\": 27750,\n\t\"spiked\": 32244,\n\t\"tug\": 7694,\n\t\"CRUEL\": 29916,\n\t\"slopes\": 30749,\n\t\"Biden\": 14168,\n\t\"Five\": 6305,\n\t\"girdle\": 8681,\n\t\"8th\": 19418,\n\t\"Map\": 16656,\n\t\"Astr\": 23611,\n\t\"undersized\": 25876,\n\t\"repeal\": 18770,\n\t\"Anaheim\": 4924,\n\t\"Said\": 20438,\n\t\"recreated\": 2895,\n\t\"Thinking\": 5235,\n\t\"honest\": 14448,\n\t\"scholarship\": 287,\n\t\"multi-national\": 20351,\n\t\"simultaneous\": 25988,\n\t\"13389\": 20277,\n\t\"Flight\": 5770,\n\t\"pepper\": 15842,\n\t\"Centre\": 4449,\n\t\"scissors\": 27578,\n\t\"bee-keeping\": 31389,\n\t\"architect\": 3616,\n\t\"LOTS\": 26852,\n\t\"bandwidth\": 24227,\n\t\"Four\": 947,\n\t\"anachronistic\": 13591,\n\t\"receive\": 2334,\n\t\"spreading\": 13781,\n\t\"Conversations\": 15729,\n\t\"herbs\": 15934,\n\t\"publishes\": 18970,\n\t\"ninth\": 4857,\n\t\"newsletter\": 21313,\n\t\"2.1.\": 704,\n\t\"Buck\": 19398,\n\t\"Charity\": 21315,\n\t\"you’ll\": 11220,\n\t\"warrants\": 29716,\n\t\"Quickly\": 5948,\n\t\"06/01/2001\": 23553,\n\t\"roughhousing\": 8873,\n\t\"brighter\": 9993,\n\t\"limbs\": 2833,\n\t\"Macaulay\": 10937,\n\t\"reactor\": 18660,\n\t\"quasi\": 12836,\n\t\"similar\": 1804,\n\t\"number\": 839,\n\t\"calico\": 27057,\n\t\"tape\": 6980,\n\t\"sourcing\": 8142,\n\t\"milling\": 12931,\n\t\"Museum\": 4497,\n\t\"Navigator\": 27937,\n\t\"tightly\": 18064,\n\t\"Presented\": 2245,\n\t\"Council\": 12108,\n\t\"Enver\": 13046,\n\t\"polygamous\": 19980,\n\t\"17547490\": 15246,\n\t\"Endo\": 29080,\n\t\"revved\": 32141,\n\t\"partially\": 2885,\n\t\"trends\": 543,\n\t\"Tom\": 5750,\n\t\"match\": 1095,\n\t\"itinerary\": 6236,\n\t\"delight\": 9157,\n\t\"forwarded\": 22203,\n\t\"Roosters\": 27285,\n\t\"abused\": 19322,\n\t\"resembles\": 2884,\n\t\"Faretta\": 2525,\n\t\"deemed\": 2542,\n\t\"Place\": 17479,\n\t\"Detailed\": 31528,\n\t\"churchy\": 29117,\n\t\"Chennai\": 28066,\n\t\"uninsured\": 24276,\n\t\"cosmetics\": 16009,\n\t\"overflowed\": 8930,\n\t\"succinctly\": 19082,\n\t\"^_^\": 26580,\n\t\"220a\": 23101,\n\t\"morale\": 23938,\n\t\"Procrastinating\": 18247,\n\t\"Pests\": 32226,\n\t\"Residual\": 24001,\n\t\"sandbags\": 24411,\n\t\"ranch\": 26093,\n\t\"Medina\": 31371,\n\t\"evidently\": 32905,\n\t\"unfunny\": 11165,\n\t\"7/26/08\": 29647,\n\t\"--\": 7231,\n\t\"Co\": 8226,\n\t\"spaciously\": 27923,\n\t\"during\": 2280,\n\t\"subsequently\": 5732,\n\t\"Devraj\": 18991,\n\t\"plywood\": 26840,\n\t\"giving\": 981,\n\t\"reflects\": 929,\n\t\"urethra\": 24065,\n\t\"recent\": 1476,\n\t\"bug\": 15071,\n\t\"sculpture\": 15342,\n\t\"strangers\": 18103,\n\t\"skies\": 26190,\n\t\"earthworms\": 27054,\n\t\"invincible\": 31294,\n\t\"Theory\": 14987,\n\t\"just\": 624,\n\t\"Lora\": 22816,\n\t\"ill\": 4695,\n\t\"Landscape\": 12516,\n\t\"deserve\": 7096,\n\t\"considering\": 2826,\n\t\"clashing\": 31832,\n\t\"Wong\": 12475,\n\t\"tremor\": 31774,\n\t\"Croft\": 3775,\n\t\"eastgardens\": 28214,\n\t\"Pen\": 23370,\n\t\"experimenter\": 10310,\n\t\"Climb\": 26937,\n\t\"breathing\": 10013,\n\t\"Pewter\": 27303,\n\t\"unprepossessingly\": 32711,\n\t\"key\": 291,\n\t\"Hundreds\": 9294,\n\t\"Preserves\": 23291,\n\t\"fallibility\": 19493,\n\t\"caked\": 9139,\n\t\".odc\": 30053,\n\t\"46093\": 21722,\n\t\"PEOPLE\": 11512,\n\t\"ability\": 1541,\n\t\"Mezza\": 29702,\n\t\"embassy\": 16461,\n\t\"encouragingly\": 32206,\n\t\"authoritative\": 18650,\n\t\"preorder\": 24233,\n\t\"kinds\": 1215,\n\t\"Annual\": 23482,\n\t\"re-schedule\": 28266,\n\t\"unsteady\": 27572,\n\t\"Graham\": 15451,\n\t\"localist\": 12388,\n\t\"hookers\": 26132,\n\t\"27\": 2145,\n\t\"deffly\": 29707,\n\t\"puzzles\": 10153,\n\t\"flotsam\": 30347,\n\t\"input\": 17623,\n\t\"peasants\": 14076,\n\t\"SLFMR\": 2612,\n\t\"threshold\": 2679,\n\t\"unthinking\": 13038,\n\t\"foreign\": 9124,\n\t\"stretch\": 6880,\n\t\"dimension\": 15569,\n\t\"uploaded\": 24861,\n\t\"CONCLUSION\": 15195,\n\t\"BRETT\": 28569,\n\t\"Title\": 9856,\n\t\"contouring\": 32650,\n\t\"TALK\": 28758,\n\t\"Brawler\": 29349,\n\t\"constitutional\": 7309,\n\t\"Akin\": 21392,\n\t\"intifada\": 18888,\n\t\"allege\": 23672,\n\t\"Associated\": 10541,\n\t\"A/73/PV.6\": 14203,\n\t\"Born\": 3338,\n\t\"clerks\": 31100,\n\t\"cabbages\": 32301,\n\t\"titts\": 26735,\n\t\"Toll\": 14457,\n\t\"Picasa\": 26626,\n\t\"labeled\": 2511,\n\t\"grave\": 4018,\n\t\"send\": 7021,\n\t\"Les\": 5482,\n\t\"4434\": 22409,\n\t\"bays\": 16649,\n\t\"licking\": 8952,\n\t\"wounding\": 12256,\n\t\"pedestrian\": 17428,\n\t\"Psalms\": 5113,\n\t\"customize\": 27231,\n\t\"engines\": 10551,\n\t\"Major\": 3554,\n\t\"sulfate\": 18043,\n\t\"Amiriya\": 19300,\n\t\"stipend\": 7959,\n\t\"intentions\": 15462,\n\t\"preferable\": 17357,\n\t\"bless\": 24523,\n\t\"Can’t\": 8633,\n\t\"real\": 1972,\n\t\"Aryan\": 20009,\n\t\"restrain\": 19689,\n\t\"10,694\": 12508,\n\t\"irritation\": 27609,\n\t\"unambiguously\": 7430,\n\t\"translating\": 5650,\n\t\"manoeuvring\": 31417,\n\t\"unstable\": 935,\n\t\"scraps\": 27280,\n\t\"diapers\": 26284,\n\t\"BALLET\": 29263,\n\t\"Panjsheri\": 19724,\n\t\"sub\": 28712,\n\t\"CRY\": 28402,\n\t\"similarities\": 1778,\n\t\"hierarchies\": 25706,\n\t\"fire's\": 7368,\n\t\"ODIHR\": 13913,\n\t\"America’s\": 7997,\n\t\"motorist\": 15603,\n\t\"UEComm\": 22215,\n\t\"sets\": 1517,\n\t\"Get-A-Free-House.com\": 19490,\n\t\"enthusiasm\": 14479,\n\t\"curb\": 18129,\n\t\"Match\": 4105,\n\t\"sit\": 6678,\n\t\"grandparents\": 29374,\n\t\"Explain\": 14993,\n\t\"Pew\": 25124,\n\t\"Quilis’\": 1195,\n\t\"polygons\": 2360,\n\t\"#langu\": 7663,\n\t\"skeleton\": 6369,\n\t\"pals\": 27636,\n\t\"masterpieces\": 16799,\n\t\"coupons\": 6972,\n\t\"October\": 3577,\n\t\"scope\": 10470,\n\t\"Heil\": 2530,\n\t\"alphabetical\": 17467,\n\t\"fitters\": 23161,\n\t\"thigh\": 27587,\n\t\"basalt\": 9478,\n\t\"bowel\": 29003,\n\t\"Comets\": 22938,\n\t\"pixels\": 26236,\n\t\"Anacapa\": 7183,\n\t\"scribbles\": 31645,\n\t\"Leo\": 25276,\n\t\"duration\": 11667,\n\t\"ENW_GCP\": 22997,\n\t\"barrel\": 16228,\n\t\"worship\": 13382,\n\t\"Gem\": 28284,\n\t\"Junlong\": 24788,\n\t\"breathed\": 5089,\n\t\"CHINESE\": 28453,\n\t\"Valencia\": 27523,\n\t\"Forbes\": 8465,\n\t\"receives\": 17410,\n\t\"MEPs\": 31384,\n\t\"seemingly\": 19958,\n\t\"Mesoamerica’s\": 15381,\n\t\"Belize\": 15384,\n\t\"grueling\": 25758,\n\t\"curled\": 9641,\n\t\"pathogens\": 26028,\n\t\"remainder\": 3588,\n\t\"folded\": 9817,\n\t\"children's\": 3500,\n\t\"almanac\": 17723,\n\t\"HOW\": 19479,\n\t\"Earthworms\": 8937,\n\t\"who've\": 17783,\n\t\"conventions\": 13776,\n\t\"Deep\": 19838,\n\t\"tickled\": 6802,\n\t\"Xu\": 14873,\n\t\"Jihad's\": 20631,\n\t\"dears\": 26251,\n\t\"Kinect\": 26780,\n\t\"house-elves\": 32171,\n\t\"No.\": 3638,\n\t\"flaring\": 32262,\n\t\"anti-Pyongyang\": 12871,\n\t\"streaming\": 9844,\n\t\"posthumously\": 4503,\n\t\"Islamism\": 18867,\n\t\"Ames\": 20655,\n\t\"portal\": 16819,\n\t\"Brickell\": 29040,\n\t\"Ashley\": 5760,\n\t\"Leicester\": 25431,\n\t\"prototypes\": 14992,\n\t\"Antwerp\": 3137,\n\t\"D:\": 26298,\n\t\"Chewing\": 6916,\n\t\"plotted\": 15612,\n\t\"Claire\": 12,\n\t\"Snitch\": 18332,\n\t\"Bandera\": 29909,\n\t\"Svendborg\": 17237,\n\t\"Alaskan\": 25145,\n\t\"UCAN\": 23880,\n\t\"meadowlarks\": 25187,\n\t\"Feather\": 27137,\n\t\"Chandeliers\": 28422,\n\t\"Sagittarius\": 25301,\n\t\"glow\": 10612,\n\t\"Joe's\": 29201,\n\t\"Aha\": 32485,\n\t\"ghostly\": 25695,\n\t\"scorpion\": 17942,\n\t\"Releases\": 21502,\n\t\"pastry\": 32884,\n\t\"non-Indians\": 19633,\n\t\"Kirk\": 6730,\n\t\"reappropriation\": 20207,\n\t\"Club\": 3050,\n\t\"potentially\": 13487,\n\t\"irreconcilable\": 23956,\n\t\"sadly\": 1410,\n\t\"stipulation\": 13316,\n\t\"Hansen@ENRON\": 22160,\n\t\"saem_aero\": 24499,\n\t\"Patent\": 22158,\n\t\"farcical\": 28640,\n\t\"patients\": 3298,\n\t\"validity\": 679,\n\t\"16,900\": 21842,\n\t\"12/28\": 23266,\n\t\"nap\": 18279,\n\t\"constituencies\": 12369,\n\t\"senate\": 19798,\n\t\"Chimes\": 5503,\n\t\"flip\": 9351,\n\t\"reconfigured\": 15105,\n\t\"nails\": 9812,\n\t\"organization’s\": 1295,\n\t\"IS\": 11844,\n\t\"vial\": 13592,\n\t\"Evolutionary\": 15193,\n\t\"blogs\": 13637,\n\t\"lofts\": 16869,\n\t\"sufficiently\": 3854,\n\t\"Shanna\": 23144,\n\t\"dishonors\": 24693,\n\t\"embracing\": 15514,\n\t\"pot\": 6208,\n\t\"circumference\": 12923,\n\t\"amendment\": 22536,\n\t\"lifting\": 23698,\n\t\"napkins\": 28616,\n\t\"Tunisia's\": 13131,\n\t\"suggest\": 1530,\n\t\"blanket\": 9195,\n\t\"Starr\": 28959,\n\t\"overflowing\": 24401,\n\t\"sorting\": 30225,\n\t\"Tindi\": 31858,\n\t\"STOA\": 31374,\n\t\"give\": 1125,\n\t\"handles\": 11348,\n\t\"slinking\": 9492,\n\t\"dealt\": 12336,\n\t\"Missile\": 11994,\n\t\"grinder\": 29558,\n\t\"incompletely\": 27158,\n\t\"trillion\": 14657,\n\t\"dial\": 9937,\n\t\"day’s\": 7749,\n\t\"seventeenth\": 31974,\n\t\"bleak\": 8034,\n\t\"collapsed\": 10400,\n\t\"Nothing\": 4567,\n\t\"Causes\": 14770,\n\t\"Ojala\": 31338,\n\t\"general\": 896,\n\t\"shift\": 2756,\n\t\"aphids\": 10235,\n\t\"Smutney\": 23713,\n\t\"Petitions\": 31390,\n\t\"+4533330040\": 17298,\n\t\"Larbalestier\": 9921,\n\t\"isn’t\": 7891,\n\t\"filled\": 9306,\n\t\"ICDC\": 18578,\n\t\"racial\": 363,\n\t\"necessarily\": 6618,\n\t\"notice\": 7587,\n\t\"l'\": 5527,\n\t\"Bert\": 11410,\n\t\"PAL\": 26314,\n\t\"pelvic\": 2865,\n\t\"TEST\": 23030,\n\t\"menacing\": 9320,\n\t\"Linda\": 18736,\n\t\"muse\": 7731,\n\t\"lapped\": 8973,\n\t\"perched\": 32192,\n\t\"Grocery\": 29301,\n\t\"cable\": 10887,\n\t\"ammount\": 29241,\n\t\"marvelled\": 16398,\n\t\"Put\": 9690,\n\t\"cheaply\": 18145,\n\t\"unproven\": 15088,\n\t\"well-to-do\": 32659,\n\t\"paid\": 5215,\n\t\"Adelphi\": 29771,\n\t\"office\": 6130,\n\t\"benedict\": 28831,\n\t\"Herrick\": 10746,\n\t\"anemone's\": 10681,\n\t\"besoin\": 4054,\n\t\"presently\": 11554,\n\t\"Gai-Hinnom\": 30624,\n\t\"Boris\": 12987,\n\t\"savagery\": 31012,\n\t\"Everything\": 9515,\n\t\"flies\": 16279,\n\t\"Googol\": 24160,\n\t\"recitals\": 31452,\n\t\"shedload\": 13711,\n\t\"cosmetic\": 18502,\n\t\"founds\": 7267,\n\t\"comp.\": 11726,\n\t\"swings\": 8838,\n\t\"Lan\": 26517,\n\t\"chicken\": 6970,\n\t\"reconcilable\": 6580,\n\t\"col\": 27202,\n\t\"space\": 1092,\n\t\"encouragement\": 27437,\n\t\"muzzles\": 31123,\n\t\"Boulder\": 24998,\n\t\"faint\": 9687,\n\t\"Nineteen\": 32274,\n\t\"conciliatory\": 19101,\n\t\"inflate\": 1461,\n\t\"robotic\": 8396,\n\t\"pounded\": 29902,\n\t\"drool\": 21180,\n\t\"Add\": 6265,\n\t\"ACCIDENT\": 18669,\n\t\"brothers’\": 5950,\n\t\"inca\": 25464,\n\t\"chi\": 27544,\n\t\"Karla\": 28944,\n\t\"cafes\": 27319,\n\t\"Hoop\": 10442,\n\t\"headquarters\": 6015,\n\t\"embarrased\": 21976,\n\t\"RA\": 4465,\n\t\"Ebay\": 26877,\n\t\"Year\": 4134,\n\t\"irritated\": 8848,\n\t\"experiments\": 1123,\n\t\"nameless\": 9433,\n\t\"smudge\": 18143,\n\t\"incur\": 31444,\n\t\"Position\": 17696,\n\t\"appreciated\": 4614,\n\t\"pastures\": 25183,\n\t\"LEONARDO\": 25468,\n\t\"mermaid\": 9079,\n\t\"Monks\": 17392,\n\t\"NZ\": 12676,\n\t\"varied\": 10232,\n\t\"Sommer\": 22772,\n\t\"Majesty's\": 31976,\n\t\"Springs\": 10341,\n\t\"expense\": 11595,\n\t\"Superheroes\": 12631,\n\t\"animated\": 27911,\n\t\"exposure\": 2212,\n\t\"Gonzales\": 14765,\n\t\"Color\": 16038,\n\t\"Welles\": 5501,\n\t\"Realism\": 14940,\n\t\"expired\": 10958,\n\t\"tourism\": 16281,\n\t\"reputable\": 24356,\n\t\"conveniences\": 32951,\n\t\"Workshops\": 21059,\n\t\"embryo\": 27898,\n\t\"DECENT\": 28577,\n\t\"Sushi\": 21306,\n\t\"Gino's\": 6790,\n\t\"EPA's\": 25915,\n\t\"Zionist\": 20199,\n\t\"retreat\": 5995,\n\t\"tropical\": 16987,\n\t\"forelimb\": 2900,\n\t\"Einstein\": 6905,\n\t\"Alaska\": 7867,\n\t\"Freedom\": 12304,\n\t\"realizing\": 14815,\n\t\"lottery\": 24921,\n\t\"under\": 865,\n\t\"SD\": 22965,\n\t\"div.\": 5355,\n\t\"everywhere\": 6110,\n\t\"programmes\": 13878,\n\t\"exposures\": 26237,\n\t\"recomend\": 29611,\n\t\"infrastructures\": 7973,\n\t\"Styler\": 15917,\n\t\"humanity’s\": 14611,\n\t\"knot\": 18104,\n\t\"underway\": 10166,\n\t\"victims\": 11171,\n\t\"occupations\": 18963,\n\t\"recalls\": 20829,\n\t\"pull\": 8810,\n\t\"Airlines\": 17106,\n\t\"primaries\": 22735,\n\t\"Kapor\": 24180,\n\t\"Horace\": 12456,\n\t\"silentia\": 5080,\n\t\"Lindsey\": 7071,\n\t\"REAL\": 20119,\n\t\"damnation\": 6604,\n\t\"stays\": 8107,\n\t\"disappear\": 10028,\n\t\"lucrative\": 19163,\n\t\"restocked\": 17296,\n\t\"upheaval\": 20357,\n\t\"S.D.\": 22474,\n\t\"florence\": 26544,\n\t\"thereabouts\": 31120,\n\t\"qua\": 32663,\n\t\"explaining\": 11584,\n\t\"Extracurricular\": 14838,\n\t\"Ms.\": 7491,\n\t\"12:42\": 22911,\n\t\"schemes\": 18767,\n\t\"gymnasiums\": 29456,\n\t\"deafening\": 32231,\n\t\"01/25/2002\": 21533,\n\t\"guns\": 19551,\n\t\"Superior\": 25011,\n\t\"suggests\": 1597,\n\t\"tempests\": 30998,\n\t\"LOI\": 21214,\n\t\"Poisson's\": 3862,\n\t\"leave\": 5575,\n\t\"undervalued\": 25851,\n\t\"shapes\": 23970,\n\t\"tense\": 10063,\n\t\"Strongid\": 28038,\n\t\"10.99\": 26425,\n\t\"recruiting\": 18793,\n\t\"Adam\": 5276,\n\t\"hamster\": 26428,\n\t\"REFUNDABLE\": 29619,\n\t\"user\": 2295,\n\t\"EATTING\": 28787,\n\t\"workout\": 15746,\n\t\"potty\": 6721,\n\t\"CARE\": 29575,\n\t\"Meagan\": 21314,\n\t\"unit\": 972,\n\t\"malfunctioned\": 18190,\n\t\"relate\": 659,\n\t\"Regina\": 12451,\n\t\"escalator\": 23289,\n\t\"Augustine\": 21847,\n\t\"Supper\": 27109,\n\t\"Scientist\": 6848,\n\t\"38,000\": 21644,\n\t\"afternoon\": 7041,\n\t\"setoff\": 23500,\n\t\"Tang\": 13318,\n\t\"stoop\": 30334,\n\t\"Changes\": 30499,\n\t\"indifference\": 31200,\n\t\"evil\": 6592,\n\t\"air\": 1342,\n\t\"rhythmically\": 24089,\n\t\"Michael's\": 6787,\n\t\"take-out\": 30319,\n\t\"qualifications\": 10862,\n\t\"entitled\": 3362,\n\t\"Krueger\": 8467,\n\t\"stood\": 9099,\n\t\"Oatmeal\": 26353,\n\t\"offerings\": 23854,\n\t\"marrying\": 3393,\n\t\"interfaces\": 8303,\n\t\"Posselt\": 4433,\n\t\"auto\": 26943,\n\t\"churning\": 32237,\n\t\"unveiling\": 14595,\n\t\"transcendence\": 24597,\n\t\"pillagings\": 9102,\n\t\"cimartinez@flog.uned.es\": 961,\n\t\"executions\": 19784,\n\t\"PG&E's\": 23277,\n\t\"Ellison\": 24196,\n\t\"Juggernaut\": 25207,\n\t\"Chilis\": 29439,\n\t\"secure\": 6910,\n\t\"Moreau's\": 5426,\n\t\"other\": 483,\n\t\"Realists\": 19104,\n\t\"membrane\": 27905,\n\t\"medium\": 7477,\n\t\"protesting\": 11190,\n\t\"preservation\": 10664,\n\t\"notices\": 32907,\n\t\"Malevich\": 4596,\n\t\"yelling\": 29612,\n\t\"gloves\": 18014,\n\t\"Ide\": 2491,\n\t\"pun\": 10240,\n\t\"aim\": 1611,\n\t\"Rip\": 28913,\n\t\"affiliates\": 21804,\n\t\"Fidelity\": 29176,\n\t\"Kawashima\": 7562,\n\t\"#44\": 17128,\n\t\"Instructor\": 29380,\n\t\"compiling\": 1860,\n\t\"yucky\": 6979,\n\t\"Slovenian\": 10852,\n\t\"AGAIN\": 11914,\n\t\"aeroplane\": 3332,\n\t\"1977\": 5357,\n\t\"northwest\": 8214,\n\t\"Liu\": 2528,\n\t\"PINKERTON\": 11849,\n\t\"client's\": 7403,\n\t\"propelled\": 19596,\n\t\"207\": 29966,\n\t\"assurance\": 22644,\n\t\"locomotor\": 2805,\n\t\"Aids\": 26067,\n\t\"regroup\": 22381,\n\t\"Jehosaphat\": 30747,\n\t\"Facts\": 15140,\n\t\"PRICED\": 29245,\n\t\"sand\": 9432,\n\t\"1.5\": 14795,\n\t\"Speaker\": 14100,\n\t\"Yekaterinburg\": 4258,\n\t\"2\": 381,\n\t\"sabotaging\": 29753,\n\t\"backyard\": 15700,\n\t\"considerable\": 530,\n\t\"cried\": 9142,\n\t\"wears\": 21260,\n\t\"rebels\": 6009,\n\t\"WA\": 23179,\n\t\"nn\": 30050,\n\t\"disclosed\": 20579,\n\t\"artists'\": 7441,\n\t\"Mh\": 15899,\n\t\"swivels\": 27388,\n\t\"brute\": 31025,\n\t\"outwards\": 17762,\n\t\"Ruby\": 5833,\n\t\"being\": 848,\n\t\"secretions\": 24062,\n\t\"neighbor\": 15698,\n\t\"Freeport\": 21889,\n\t\"medal\": 12061,\n\t\"mildew\": 29979,\n\t\"re-use\": 18175,\n\t\"Brazosport\": 21885,\n\t\"Rican\": 30303,\n\t\"Darla\": 21402,\n\t\"solo\": 10945,\n\t\"86th\": 5190,\n\t\"Wholesale\": 21735,\n\t\"brumation\": 27682,\n\t\"Chatillon\": 26610,\n\t\"breakfasts\": 28592,\n\t\"Main\": 16544,\n\t\"findings\": 1084,\n\t\"Frustrated\": 30664,\n\t\"Jared\": 5695,\n\t\"insecticide\": 31712,\n\t\"faculty\": 337,\n\t\"Benengali\": 30438,\n\t\"folks\": 6198,\n\t\"dth\": 23285,\n\t\"shuttle\": 21865,\n\t\"Taub\": 22134,\n\t\"FAIR\": 28803,\n\t\"Come\": 6296,\n\t\"arena\": 7292,\n\t\"Antony\": 4175,\n\t\"06:28\": 23263,\n\t\"warming\": 13443,\n\t\"Shikibu\": 4765,\n\t\"First\": 572,\n\t\"Caring\": 17701,\n\t\"agglomeration\": 16941,\n\t\"Similarly\": 20288,\n\t\"Clare\": 24662,\n\t\"hideous\": 9366,\n\t\"vacancy\": 24708,\n\t\"360\": 5012,\n\t\"parched\": 8883,\n\t\"India's\": 19036,\n\t\"robbery\": 31027,\n\t\"coolness\": 17640,\n\t\"Lund\": 23093,\n\t\"Tennessee\": 10357,\n\t\"practise\": 31410,\n\t\"stroked\": 32679,\n\t\"mosques\": 16775,\n\t\"omelettes\": 30482,\n\t\"pixies\": 9729,\n\t\"geographical\": 2327,\n\t\"stint\": 19801,\n\t\"Dentistry\": 28261,\n\t\"Baltic\": 17208,\n\t\"shrines\": 26933,\n\t\"prearranged\": 25567,\n\t\"aswered\": 28624,\n\t\"exploded\": 20425,\n\t\"emphatically\": 23348,\n\t\"materializes\": 14050,\n\t\"Step\": 17961,\n\t\"dim\": 9484,\n\t\"Reserve\": 16315,\n\t\"shone\": 9368,\n\t\"yields\": 13458,\n\t\"quartile\": 15633,\n\t\"refund\": 18174,\n\t\"who’s\": 8298,\n\t\"Earth\": 10065,\n\t\"influx\": 16905,\n\t\"Ambitious\": 25979,\n\t\"sustain\": 1709,\n\t\"http://www.romancescam.com/forum/viewtopic.php?t=7231\": 27027,\n\t\"values\": 11199,\n\t\"screwed\": 13627,\n\t\"KABUL\": 19655,\n\t\"arrogance\": 17594,\n\t\"region's\": 17034,\n\t\"tweed\": 32886,\n\t\"Gotschal\": 21486,\n\t\"Safari\": 12782,\n\t\"beaver\": 25067,\n\t\"trait\": 15219,\n\t\"sercvice\": 28411,\n\t\"Big\": 6171,\n\t\"legitimate\": 1260,\n\t\"truer\": 8141,\n\t\"muggles\": 18323,\n\t\"pig\": 12906,\n\t\"marriages\": 20005,\n\t\"54,000\": 15685,\n\t\"Bremmer's\": 20424,\n\t\"mma\": 28545,\n\t\"secular\": 5134,\n\t\"antique\": 28420,\n\t\"10:46\": 21595,\n\t\"thyme\": 31664,\n\t\"hagiography\": 5922,\n\t\"Achilles\": 11288,\n\t\"Yeung\": 12425,\n\t\"hubristic\": 17649,\n\t\"http://i.imgur.com/T2zff.jpg\": 27165,\n\t\"flirty\": 27949,\n\t\"Shahshahan\": 16793,\n\t\"crumbling\": 6860,\n\t\"Muqrin\": 18631,\n\t\"OSTRICH\": 28943,\n\t\"Folies\": 5420,\n\t\"boxing\": 18274,\n\t\"SHOWS\": 28736,\n\t\"EXCELS\": 29444,\n\t\"Hoffman\": 14450,\n\t\"Michaelis\": 3785,\n\t\"lil\": 26372,\n\t\"Sky\": 4192,\n\t\"invented\": 6844,\n\t\"rumours\": 18582,\n\t\"Styles\": 10936,\n\t\"Atop\": 28976,\n\t\"EnronEAuction\": 22499,\n\t\"Min-Woo\": 13074,\n\t\"HIGHLY\": 24343,\n\t\"Consent\": 24709,\n\t\"Venta\": 15345,\n\t\"you'd\": 6392,\n\t\"tag\": 10657,\n\t\"SUN\": 24207,\n\t\"Merchanting\": 22574,\n\t\"153B09\": 22151,\n\t\"fixed\": 6673,\n\t\"4632\": 24963,\n\t\"entertainment\": 7373,\n\t\"freighters\": 30799,\n\t\"Discourse\": 2922,\n\t\"snowscape\": 8643,\n\t\"Yemenia\": 17169,\n\t\"plaudits\": 31393,\n\t\"um\": 6362,\n\t\"negotiate\": 2983,\n\t\"collectors\": 2005,\n\t\"throwing\": 13799,\n\t\"02:21\": 22133,\n\t\"Bourdain\": 15437,\n\t\"dealers\": 20500,\n\t\"Barese\": 28301,\n\t\"quieter\": 26772,\n\t\"chatted\": 30836,\n\t\"Tallulah\": 29769,\n\t\"numbers\": 546,\n\t\"calls\": 1179,\n\t\"households\": 2119,\n\t\"[\": 375,\n\t\"embroidered\": 9846,\n\t\"whereby\": 13060,\n\t\"granting\": 14741,\n\t\"pic\": 27168,\n\t\"Account\": 20975,\n\t\"bat-like\": 32119,\n\t\"woven\": 15330,\n\t\"Transcendental\": 24182,\n\t\"Ken\": 15400,\n\t\"him\": 3182,\n\t\"almost\": 1363,\n\t\"sepulchres\": 5041,\n\t\"Crossing\": 12530,\n\t\"contested\": 7132,\n\t\"demurrage\": 30815,\n\t\"computer\": 429,\n\t\"Beeline\": 17444,\n\t\"healthy\": 6589,\n\t\"adhear\": 20333,\n\t\"hell\": 5047,\n\t\"package\": 11544,\n\t\"extradition\": 20688,\n\t\"Sherri\": 5709,\n\t\"theological\": 5106,\n\t\"chartered\": 3641,\n\t\"comp.sources.d\": 24331,\n\t\"herring\": 25165,\n\t\"Attorney\": 20758,\n\t\"LATIN\": 29259,\n\t\"task\": 501,\n\t\"TAU\": 22364,\n\t\"582\": 23400,\n\t\"builder\": 32065,\n\t\"continue\": 2427,\n\t\"project's\": 12654,\n\t\"computational\": 3798,\n\t\"arteries\": 3303,\n\t\"transforms\": 14135,\n\t\"highline\": 15970,\n\t\"voiced\": 19900,\n\t\"Superdome\": 24399,\n\t\"Potidea\": 25389,\n\t\"potentiality\": 24077,\n\t\"Ulster\": 27195,\n\t\"flat\": 2708,\n\t\"Americans\": 6108,\n\t\"Giants\": 9103,\n\t\"deaths\": 9281,\n\t\"Yes\": 6237,\n\t\"Comic\": 5895,\n\t\"Najib\": 12172,\n\t\"23\": 592,\n\t\"bruise\": 9782,\n\t\"bolder\": 18573,\n\t\"compulsion\": 14811,\n\t\"overseeing\": 20804,\n\t\"sounded\": 6752,\n\t\"Tuesday\": 10198,\n\t\"Rick's\": 22868,\n\t\"cognitive\": 192,\n\t\"enslaved\": 16275,\n\t\"Mesoamerican\": 15336,\n\t\"Portugese\": 25439,\n\t\"example\": 106,\n\t\"sterile\": 29326,\n\t\"lieutenants\": 31899,\n\t\"Uncharacteristically\": 32407,\n\t\"Baptist\": 5597,\n\t\"christened\": 24190,\n\t\"tolerant\": 17334,\n\t\"moored\": 32774,\n\t\"Recall\": 15645,\n\t\"readily\": 8092,\n\t\"Procurement\": 23297,\n\t\"squirelled\": 20026,\n\t\"Evidently\": 22323,\n\t\"micro-fiber\": 26286,\n\t\"shaft\": 26728,\n\t\"camp's\": 12389,\n\t\"represent\": 2990,\n\t\"dissipated\": 31130,\n\t\"Allen's\": 4104,\n\t\"migrant\": 15290,\n\t\"Jūsan'ya\": 4741,\n\t\"flying\": 8358,\n\t\"Photography\": 26613,\n\t\"deal\": 6097,\n\t\"headed\": 4400,\n\t\"Character\": 11256,\n\t\"Witches\": 4197,\n\t\"relax\": 9781,\n\t\"Pole\": 31051,\n\t\"Terrified\": 14794,\n\t\"230,500\": 15670,\n\t\"specialist\": 20956,\n\t\"senseless\": 20148,\n\t\"HBO\": 2931,\n\t\"glitter\": 31093,\n\t\"spanning\": 1022,\n\t\"trespass\": 7619,\n\t\"Directors\": 22794,\n\t\"defector\": 12285,\n\t\"http://www.consumerreports.org/health/healthy-living/beauty-personal-care/hair-loss-10-08/hair-loss.htm\": 29784,\n\t\"THINGS\": 11917,\n\t\"markings\": 29389,\n\t\"Absalom's\": 30756,\n\t\"deceptive\": 1355,\n\t\"cast\": 5735,\n\t\"thrashing\": 30359,\n\t\"Cold\": 8000,\n\t\"Leaders\": 24655,\n\t\"photographic\": 13277,\n\t\"risen\": 30568,\n\t\"Saltillo\": 14685,\n\t\"260\": 29562,\n\t\"Quilis\": 1003,\n\t\"menace\": 18907,\n\t\"observant\": 30733,\n\t\"Particles\": 11353,\n\t\"tough\": 11519,\n\t\"Thx\": 26616,\n\t\"impressive\": 5389,\n\t\"seriously\": 5128,\n\t\"Interviewers\": 23371,\n\t\"Ichor\": 9750,\n\t\"X37047\": 22490,\n\t\"overland\": 24582,\n\t\"Libyan\": 20366,\n\t\"detached\": 32745,\n\t\"piled\": 16514,\n\t\"grape\": 16187,\n\t\"spoon\": 26654,\n\t\"specials\": 28155,\n\t\"WPO\": 21797,\n\t\"ordination\": 32831,\n\t\"Harvest\": 8002,\n\t\"fuckwad\": 9696,\n\t\"alarms\": 7404,\n\t\"Vessels\": 16297,\n\t\"Madam\": 14107,\n\t\"Industries\": 8217,\n\t\"role\": 340,\n\t\"bother\": 6700,\n\t\"neat\": 13718,\n\t\"Investigators\": 19933,\n\t\"imported\": 25025,\n\t\"Freeze\": 17777,\n\t\"diary\": 4426,\n\t\"K/psu\": 2625,\n\t\"hurtle\": 9285,\n\t\"---------\": 19208,\n\t\"-------------------------------------------------------------------\": 25458,\n\t\"meddlesome\": 32257,\n\t\"Media\": 10847,\n\t\"making\": 65,\n\t\"cage\": 26479,\n\t\"no\": 126,\n\t\"renewed\": 14212,\n\t\"equivalent\": 2870,\n\t\"proves\": 6626,\n\t\"KINDY\": 23662,\n\t\"vanish\": 9439,\n\t\"export\": 13987,\n\t\"artery\": 21704,\n\t\"dictators\": 20375,\n\t\"jars\": 32428,\n\t\"couldn’t\": 4585,\n\t\"Zenghelis\": 4556,\n\t\"protests\": 10391,\n\t\"breeder\": 26321,\n\t\"Playstation\": 12588,\n\t\"slats\": 26842,\n\t\"45,756\": 13004,\n\t\"MICROcomputer\": 24188,\n\t\"usually\": 506,\n\t\"self\": 2510,\n\t\"SECTIONS\": 11927,\n\t\"tempted\": 11643,\n\t\"Pump\": 29447,\n\t\"warmth\": 8711,\n\t\"budgets\": 24280,\n\t\"studio\": 6087,\n\t\"gnaw\": 9471,\n\t\"Fischler\": 31463,\n\t\"failed\": 2828,\n\t\"auction\": 11646,\n\t\"Venezuela\": 14230,\n\t\"falters\": 24589,\n\t\"eleventh\": 30405,\n\t\"troubling\": 15191,\n\t\"crackdown\": 19691,\n\t\"DOUBLE\": 27246,\n\t\"YouTubers\": 5311,\n\t\"nascent\": 32944,\n\t\"46th\": 14332,\n\t\"College\": 1267,\n\t\"wrote\": 3268,\n\t\"significantly\": 2644,\n\t\"dispossesed\": 24270,\n\t\"voluntarily\": 25912,\n\t\"Return\": 22025,\n\t\"Structure\": 916,\n\t\"Horribly\": 27972,\n\t\"twentieth\": 15570,\n\t\"trash\": 18266,\n\t\"enrolled\": 29066,\n\t\"random\": 10927,\n\t\"451\": 21891,\n\t\"Logan\": 29592,\n\t\"develops\": 189,\n\t\"truth\": 1914,\n\t\"extent\": 2462,\n\t\"socially\": 1271,\n\t\"addressed\": 9288,\n\t\"sisal\": 16978,\n\t\"thieves\": 19308,\n\t\"Circumstances\": 31464,\n\t\"Mauer\": 13315,\n\t\"doers\": 19787,\n\t\"francs\": 31153,\n\t\"connection\": 1719,\n\t\"Sexual\": 13539,\n\t\"Make\": 9295,\n\t\"gravity\": 15538,\n\t\"monitoring\": 1616,\n\t\"fundamentalist\": 18758,\n\t\"Wells\": 21759,\n\t\"heartedly\": 18278,\n\t\"religious\": 4363,\n\t\"psychotherapist\": 6797,\n\t\"Frames\": 3828,\n\t\"Tibet\": 15432,\n\t\"investigating\": 23685,\n\t\"preside\": 13851,\n\t\"anticipates\": 23296,\n\t\"Lava\": 28304,\n\t\"gee\": 28511,\n\t\"Billing\": 29309,\n\t\"scrummy\": 29645,\n\t\"mimicry\": 1242,\n\t\"Spiritually\": 16327,\n\t\"rallying\": 18809,\n\t\"antiques\": 11523,\n\t\"EES's\": 21434,\n\t\"'60's\": 8495,\n\t\"stack\": 18134,\n\t\"strikes\": 7329,\n\t\"Carolyn\": 6717,\n\t\"meditation\": 8332,\n\t\"buzzers\": 9771,\n\t\"denominator\": 7105,\n\t\"airlines\": 16446,\n\t\"laces\": 8344,\n\t\"Veronica\": 23746,\n\t\"syntactic\": 971,\n\t\"Christopher\": 3786,\n\t\"Houseman\": 6565,\n\t\"Generally\": 17165,\n\t\"servings\": 18432,\n\t\"deliveries\": 23939,\n\t\"satisfaction\": 9660,\n\t\"counterattacked\": 27720,\n\t\"gin\": 32395,\n\t\"earned\": 3197,\n\t\"establish\": 352,\n\t\"cue\": 19356,\n\t\"post-production\": 13751,\n\t\"Callum\": 26295,\n\t\"Orange\": 5280,\n\t\"impediment\": 7786,\n\t\"43\": 4840,\n\t\"standup\": 13664,\n\t\"coroner\": 18050,\n\t\"Comparative\": 2921,\n\t\"recollected\": 668,\n\t\"describe\": 2254,\n\t\"secretaries\": 19093,\n\t\"ultimately\": 3970,\n\t\"Redwood\": 23283,\n\t\"Separated\": 27864,\n\t\"worst\": 7686,\n\t\"Jawaharal\": 18999,\n\t\"Peas\": 29171,\n\t\"statehood\": 14748,\n\t\"aviatio\": 18083,\n\t\"credible\": 14216,\n\t\"Whisky\": 28089,\n\t\"talking\": 6422,\n\t\"driven\": 2758,\n\t\"swept\": 11983,\n\t\"Napier\": 16278,\n\t\"circles\": 17274,\n\t\"furs\": 10061,\n\t\"fire\": 3010,\n\t\"bring\": 9374,\n\t\"glowing\": 9969,\n\t\"Cozumel\": 27495,\n\t\"telegraphic\": 23024,\n\t\"exclusively\": 6579,\n\t\"ach\": 31960,\n\t\"Boy\": 6302,\n\t\"Evergreen\": 28652,\n\t\"slope\": 2672,\n\t\"Rats\": 11702,\n\t\"Jason\": 12346,\n\t\"misfortunes\": 14016,\n\t\"Virgo\": 25286,\n\t\"Newbies\": 3055,\n\t\"Haven't\": 22079,\n\t\"smack\": 19818,\n\t\"gears\": 29342,\n\t\"monastery\": 5926,\n\t\"MAJOR\": 27536,\n\t\"Afshari\": 20077,\n\t\"paranoid\": 26973,\n\t\"deposited\": 12328,\n\t\"points\": 7355,\n\t\"pies\": 29639,\n\t\"minerals\": 23990,\n\t\"AirBox\": 13954,\n\t\"Dawson\": 5314,\n\t\"Advance\": 22887,\n\t\"handling\": 12022,\n\t\";P\": 26958,\n\t\"minister\": 4535,\n\t\"explanations\": 15163,\n\t\"TBH\": 27369,\n\t\"2022\": 4512,\n\t\"Needles\": 22742,\n\t\"Neptune\": 28437,\n\t\"insipid\": 31083,\n\t\"713-853-4743\": 21910,\n\t\"ould\": 27361,\n\t\"CHRISTIAN\": 29141,\n\t\"brainwash\": 20082,\n\t\"bisexual\": 26734,\n\t\"arriving\": 13021,\n\t\"Cordially\": 21624,\n\t\"dslr\": 26229,\n\t\"germs\": 6776,\n\t\"Changing\": 30044,\n\t\"decision's\": 19922,\n\t\"PHONE\": 21467,\n\t\"gnawed\": 9858,\n\t\"transferability\": 23562,\n\t\"complacent\": 32409,\n\t\"slowly\": 7111,\n\t\"vocals\": 24852,\n\t\"Pigs\": 25003,\n\t\"AWAY\": 29275,\n\t\"regulated\": 13732,\n\t\"imbued\": 20223,\n\t\"chien\": 1731,\n\t\"unilaterally\": 13729,\n\t\"mullahs\": 19697,\n\t\"holding\": 5900,\n\t\"Biology\": 10257,\n\t\"breast\": 9311,\n\t\"Vogelaviatiolaps\": 18072,\n\t\"visibly\": 30546,\n\t\"crooks\": 20523,\n\t\"When\": 198,\n\t\"Travelled\": 27403,\n\t\"nutrients\": 8196,\n\t\"Charlie\": 5752,\n\t\"Martin's\": 20959,\n\t\"permissive\": 10965,\n\t\"wires\": 25733,\n\t\"heartless\": 28250,\n\t\"promised\": 9663,\n\t\"recrudescence\": 31168,\n\t\"submarine\": 19608,\n\t\"GWB\": 20176,\n\t\"UltraSonic\": 23643,\n\t\"heebee\": 28510,\n\t\"Shrimp\": 28538,\n\t\"studying\": 227,\n\t\"straight\": 6393,\n\t\"Hutcheson\": 14944,\n\t\"Belief\": 14709,\n\t\"WebLogic\": 21368,\n\t\"diverted\": 10472,\n\t\"evacuate\": 16571,\n\t\"IBM\": 21358,\n\t\"sincere\": 31462,\n\t\"conceptualize\": 24313,\n\t\"contempt\": 31924,\n\t\"eliminate\": 3952,\n\t\"Malle\": 5408,\n\t\"knife\": 6376,\n\t\"days\": 2854,\n\t\"Toyota\": 28550,\n\t\"4,700\": 25829,\n\t\"strike\": 10424,\n\t\"Subway\": 29429,\n\t\"Bolivar\": 25531,\n\t\"organizations\": 12542,\n\t\"lash\": 16072,\n\t\"miscalculation\": 14241,\n\t\"Watt\": 21307,\n\t\"produce\": 395,\n\t\"Kiyani\": 19712,\n\t\"Printing\": 28387,\n\t\"Umoregi\": 4677,\n\t\"candidate\": 5710,\n\t\"majors\": 4901,\n\t\"Menger\": 21204,\n\t\"superior\": 15525,\n\t\"bread\": 6454,\n\t\"5249025\": 24901,\n\t\"comprising\": 17205,\n\t\"Litzmannstadt\": 16918,\n\t\"Kaminski\": 20918,\n\t\"ingrown\": 29404,\n\t\"Yelp\": 29435,\n\t\"MUUUUUUM\": 32093,\n\t\"hat\": 25888,\n\t\"irresistible\": 32620,\n\t\"sh-\": 6658,\n\t\"Michelangelo\": 5496,\n\t\"chem\": 15854,\n\t\"arsenic\": 26253,\n\t\"DOCTOR\": 29515,\n\t\"Edwardsiella\": 10669,\n\t\"fluttered\": 9396,\n\t\".432\": 4897,\n\t\"thoroughly\": 6124,\n\t\"4350\": 24949,\n\t\"Inspection\": 22657,\n\t\"dodging\": 30548,\n\t\"hierarchy\": 2041,\n\t\"leaves\": 1831,\n\t\"Santorum\": 10473,\n\t\"you’re\": 7759,\n\t\"contracts\": 807,\n\t\"Shippers\": 23601,\n\t\"endure\": 14328,\n\t\"Calgary\": 21278,\n\t\"fevers\": 6768,\n\t\"Pasquallie\": 21818,\n\t\"bent\": 8631,\n\t\"TROUBLE\": 28403,\n\t\"houseware\": 18169,\n\t\"ankle\": 17378,\n\t\"stickhandle\": 13532,\n\t\"postponed\": 4043,\n\t\"numbness\": 17673,\n\t\"pewter\": 8988,\n\t\"clarified\": 2702,\n\t\"motifs\": 16835,\n\t\"Algerians\": 20360,\n\t\"frothy\": 10491,\n\t\"upload\": 13939,\n\t\"Abused\": 19950,\n\t\"º\": 17315,\n\t\"gamers\": 12574,\n\t\"Steamboat\": 28705,\n\t\"tobacco\": 31649,\n\t\"chills\": 15812,\n\t\"pan-democratic\": 12411,\n\t\"accessing\": 14567,\n\t\"obstructions\": 18202,\n\t\"win\": 1606,\n\t\"third\": 3033,\n\t\"who's\": 6515,\n\t\"measurement\": 31565,\n\t\"Houston\": 4898,\n\t\"innovate\": 8460,\n\t\"713-853-3098\": 23575,\n\t\"countless\": 1592,\n\t\"perturbation\": 2674,\n\t\"Christianity\": 5097,\n\t\"guaranteeing\": 20488,\n\t\"render\": 3433,\n\t\"surprised\": 5898,\n\t\"pebbles\": 6386,\n\t\"promoted\": 3590,\n\t\"carvings\": 16312,\n\t\"tell\": 6095,\n\t\"Lindqvist\": 1577,\n\t\"postponement\": 18959,\n\t\"soften\": 23515,\n\t\"saxon\": 27628,\n\t\"brunaanastacio@hotmail.com\": 1510,\n\t\"Maureen\": 20902,\n\t\"playoffs\": 11083,\n\t\"lovable\": 29537,\n\t\"jumble\": 32193,\n\t\"towel\": 8669,\n\t\"service\": 3522,\n\t\"intensity\": 8714,\n\t\"confided\": 3913,\n\t\"meal\": 7742,\n\t\"attempt\": 5161,\n\t\"whiskered\": 9019,\n\t\"merely\": 14884,\n\t\"SOLAS\": 26920,\n\t\"cookin'\": 24547,\n\t\"Goals\": 13889,\n\t\"Safavid\": 16782,\n\t\"....\": 18686,\n\t\"cuz\": 13666,\n\t\"honro\": 21431,\n\t\"Velupillai\": 19021,\n\t\"celery\": 27441,\n\t\"Gryffindor\": 32248,\n\t\"derived\": 1897,\n\t\"ST\": 5645,\n\t\"litgation\": 23780,\n\t\"Auto\": 28820,\n\t\"Network\": 19949,\n\t\"hooves\": 6344,\n\t\"incrementally\": 7249,\n\t\"Gérard\": 5464,\n\t\"inhibitors\": 13585,\n\t\"station\": 12339,\n\t\"Socotra's\": 17193,\n\t\"addendum\": 22897,\n\t\"Indianapolis\": 4887,\n\t\"988,000\": 17406,\n\t\"sophisticated\": 14661,\n\t\"Association's\": 23851,\n\t\"Plains\": 13150,\n\t\"gray\": 8878,\n\t\"sick\": 5250,\n\t\"Gardens\": 16851,\n\t\"EBS\": 21085,\n\t\"T.V.\": 27210,\n\t\"Wave\": 5485,\n\t\"Challenges\": 24487,\n\t\"important\": 258,\n\t\"property\": 767,\n\t\"sexual\": 5031,\n\t\"whatever\": 6255,\n\t\"Antarctica\": 10591,\n\t\"http://www.un.org/ha/chernobyl/\": 18704,\n\t\"Portrait\": 13257,\n\t\"08:15\": 23207,\n\t\"nebulous\": 13707,\n\t\"formidable\": 15082,\n\t\"roughly\": 631,\n\t\"Arab\": 11226,\n\t\"forum\": 1283,\n\t\"asking\": 10737,\n\t\"chairpersons\": 19837,\n\t\"tricycles\": 31834,\n\t\"coding\": 2514,\n\t\"judge\": 3855,\n\t\"carried\": 2871,\n\t\"Austria\": 22504,\n\t\"Z1\": 21922,\n\t\"Garganta\": 26990,\n\t\"eyedropper\": 27902,\n\t\"Dong\": 28443,\n\t\"Bistro\": 29768,\n\t\"treatment\": 2402,\n\t\"canes\": 8934,\n\t\"X940\": 26203,\n\t\"newcomers\": 12437,\n\t\"Hedwig\": 32048,\n\t\"Ron\": 12299,\n\t\"homage\": 14089,\n\t\"snipers\": 18611,\n\t\"honorific\": 15046,\n\t\"Dark\": 11285,\n\t\"Stones\": 13129,\n\t\"demonstrations\": 24813,\n\t\"guidelines\": 18107,\n\t\"wavenumber\": 2701,\n\t\"journey\": 4311,\n\t\"Turkish\": 25734,\n\t\"spacecraft\": 11372,\n\t\"CIC\": 27031,\n\t\"Guthrie\": 23574,\n\t\"werewolf\": 26185,\n\t\"Definite\": 29512,\n\t\"Live\": 10343,\n\t\"Nitrogen\": 29355,\n\t\"License\": 8543,\n\t\"gristle-studded\": 30306,\n\t\"Anybody\": 31953,\n\t\"narcotics\": 9589,\n\t\"inevitably\": 18953,\n\t\"color\": 6138,\n\t\"Afterwards\": 10288,\n\t\"spark\": 7372,\n\t\"Vvedenskoye\": 4391,\n\t\"supplementary\": 31484,\n\t\"Mekong\": 27543,\n\t\"150301\": 22150,\n\t\"Payment\": 21639,\n\t\"Expires\": 24465,\n\t\"6.00\": 24919,\n\t\"unfamiliar\": 3043,\n\t\"Mediterranean\": 27008,\n\t\"employees'\": 30025,\n\t\"anthrax\": 20570,\n\t\"dismantle\": 14321,\n\t\"declaring\": 3852,\n\t\"175\": 29271,\n\t\"watchfully\": 31161,\n\t\"Create\": 18252,\n\t\"torso\": 12629,\n\t\"Actual\": 25989,\n\t\"honored\": 12056,\n\t\"Yahoo\": 24221,\n\t\"cup\": 15757,\n\t\"0.4\": 2623,\n\t\"Chubby\": 8787,\n\t\"indicates\": 1417,\n\t\"Antioch\": 5125,\n\t\"soothing\": 18649,\n\t\"SARA\": 23246,\n\t\"☎\": 17018,\n\t\"observe\": 1805,\n\t\"surrounded\": 8959,\n\t\"04:03\": 21691,\n\t\"happening\": 11053,\n\t\"pulse\": 25112,\n\t\"RAFFLE\": 24533,\n\t\"Melon\": 16065,\n\t\"blogger\": 12718,\n\t\"Gentilz\": 14797,\n\t\"ravines\": 32761,\n\t\"grit\": 15206,\n\t\"unsettling\": 15483,\n\t\"vitamin\": 2204,\n\t\"Pennsylvania\": 10486,\n\t\"VCU\": 29443,\n\t\"Feb.\": 11693,\n\t\"legislation\": 11540,\n\t\"houston\": 28495,\n\t\"jihadi\": 19123,\n\t\"Hernan\": 13124,\n\t\"dissecting\": 10638,\n\t\"aye\": 23447,\n\t\"summit\": 13870,\n\t\"Purple\": 17713,\n\t\"2050\": 13449,\n\t\"Duo\": 5720,\n\t\"temperment\": 28613,\n\t\"clapped\": 32029,\n\t\"sycamore\": 32446,\n\t\"cheers\": 15984,\n\t\"Golden\": 1073,\n\t\"modest\": 7734,\n\t\"years'\": 16233,\n\t\"sequential\": 1891,\n\t\"sped\": 32317,\n\t\"NOTES\": 11929,\n\t\"given\": 1740,\n\t\"alumni\": 25928,\n\t\"Issac\": 6786,\n\t\"solitude\": 5985,\n\t\"awards\": 4793,\n\t\"pedagogical\": 3755,\n\t\"leant\": 8968,\n\t\"tempered\": 14311,\n\t\"saithe\": 25164,\n\t\"obvious\": 7482,\n\t\"Male\": 4100,\n\t\"Joys\": 26792,\n\t\"eee\": 15753,\n\t\"Bundy\": 9570,\n\t\"rec.\": 27142,\n\t\"Tool\": 30175,\n\t\"insert\": 16008,\n\t\"probing\": 22864,\n\t\"divorce\": 7233,\n\t\"reversal\": 21511,\n\t\"microwaved\": 28249,\n\t\"keywords\": 24335,\n\t\"inu\": 1735,\n\t\"Crimea\": 4371,\n\t\"TUL\": 17422,\n\t\"plate\": 21454,\n\t\"Drew\": 22758,\n\t\"witnessed\": 715,\n\t\"whereas\": 8200,\n\t\"pans\": 8650,\n\t\"model\": 2635,\n\t\"whil\": 11413,\n\t\"regularly\": 5338,\n\t\"bombed\": 13683,\n\t\"rivers\": 31057,\n\t\"paradigmatic\": 7435,\n\t\"monsoon\": 17162,\n\t\"11/13/2000\": 23822,\n\t\"flag-stones\": 31612,\n\t\"carribean\": 26666,\n\t\"unruffled\": 30931,\n\t\"Underage\": 32080,\n\t\"Hunter\": 22878,\n\t\"Replication\": 2372,\n\t\"lb\": 8074,\n\t\"Balances\": 24706,\n\t\"screws\": 18160,\n\t\"ECP\": 23487,\n\t\"sketch\": 13658,\n\t\"conferenced\": 22349,\n\t\"shedding\": 8184,\n\t\"biology\": 25126,\n\t\"An\": 3707,\n\t\"TOOK\": 29699,\n\t\"unloading\": 8585,\n\t\"fingernail\": 17677,\n\t\"Montrouge\": 26611,\n\t\"commission\": 6086,\n\t\"Edwards'\": 18870,\n\t\"ho\": 8614,\n\t\"EESI\": 23488,\n\t\"Gabin\": 5397,\n\t\"countries\": 8054,\n\t\"Neil\": 19542,\n\t\"existence\": 7598,\n\t\"politically\": 7980,\n\t\"Hazim\": 19273,\n\t\"serenity\": 30918,\n\t\"psychological\": 12876,\n\t\"stemmed\": 4994,\n\t\"basement\": 8735,\n\t\"blobs\": 31980,\n\t\"competitive\": 21053,\n\t\"Bella\": 28294,\n\t\"think\": 6279,\n\t\"referendums\": 12658,\n\t\"Panama\": 13063,\n\t\"guidebook\": 17290,\n\t\"1,200\": 18983,\n\t\"Personality\": 10718,\n\t\"resisted\": 19752,\n\t\"Cork\": 32660,\n\t\"monuments\": 10183,\n\t\"a)\": 12351,\n\t\"nonsense\": 6546,\n\t\"justice\": 11675,\n\t\"Holland\": 3636,\n\t\"systemic\": 14138,\n\t\"Bankman\": 13735,\n\t\"inaugural\": 14340,\n\t\"cares\": 21004,\n\t\"Completed\": 17275,\n\t\"Caparrós\": 978,\n\t\"non-Moslem\": 20356,\n\t\"Althea\": 5598,\n\t\"pink\": 9121,\n\t\"bragging\": 20736,\n\t\"threat\": 9655,\n\t\"Iris\": 20963,\n\t\"979\": 21894,\n\t\"snatched\": 32156,\n\t\"leather\": 29154,\n\t\"bourgeois\": 30403,\n\t\"E\": 1820,\n\t\"amassed\": 10325,\n\t\"presenter\": 4239,\n\t\"nukes\": 19157,\n\t\"mid-nineties\": 19331,\n\t\"d-\": 6281,\n\t\"pitch\": 18339,\n\t\"Ngoc\": 23117,\n\t\"hockey\": 18327,\n\t\"Scotsman\": 27824,\n\t\"hippies\": 27262,\n\t\"refreshing\": 28589,\n\t\"stench\": 9464,\n\t\"fascination\": 13390,\n\t\"inexpensive\": 6115,\n\t\"delightfully\": 32914,\n\t\"Bar\": 7306,\n\t\"MSA\": 22388,\n\t\"whips\": 10041,\n\t\"toured\": 17328,\n\t\"wavy\": 28439,\n\t\"Tien\": 12400,\n\t\"cautious\": 14766,\n\t\"meanest\": 28664,\n\t\"defining\": 2772,\n\t\"Iguazu\": 26988,\n\t\"disk\": 20629,\n\t\"arancini\": 28812,\n\t\"bits\": 9162,\n\t\"spite\": 6020,\n\t\"Jobs\": 7818,\n\t\"honor\": 7181,\n\t\"Algonquin\": 32605,\n\t\"Gray's\": 31767,\n\t\"mental\": 3729,\n\t\"wearies\": 18876,\n\t\"rewrote\": 11557,\n\t\"triumphs\": 14019,\n\t\"transitional\": 26732,\n\t\"replicate\": 2480,\n\t\"cross-sectional\": 2803,\n\t\"harbouring\": 13026,\n\t\"Volgograd\": 13126,\n\t\"06:16\": 23734,\n\t\"spouting\": 9049,\n\t\"deviating\": 15624,\n\t\"jolts\": 8334,\n\t\"parole\": 12113,\n\t\"triggered\": 25064,\n\t\"circa\": 30003,\n\t\"copyright's\": 7455,\n\t\"barrels\": 8947,\n\t\"Wine\": 28135,\n\t\"Wentz\": 31728,\n\t\"travelers\": 15107,\n\t\"Carol\": 7057,\n\t\"Combat\": 15137,\n\t\"extensively\": 996,\n\t\"Indiana\": 13269,\n\t\"Budd\": 10364,\n\t\"digress\": 11333,\n\t\"outta\": 28253,\n\t\"Medusa\": 23393,\n\t\"sewn\": 31675,\n\t\"1955\": 30659,\n\t\"pissed\": 6106,\n\t\"Software\": 26098,\n\t\"belonged\": 22917,\n\t\"Boat\": 19242,\n\t\"Hawaiʻi\": 7519,\n\t\"Horomona\": 16357,\n\t\"woudn't\": 21993,\n\t\"Nope\": 26464,\n\t\"3926\": 22532,\n\t\"Newer\": 26726,\n\t\"conjecture\": 3918,\n\t\"interrupted\": 21335,\n\t\"Mehraban\": 12090,\n\t\"Asus\": 26318,\n\t\"disorderly\": 31827,\n\t\"flows\": 662,\n\t\"manuscripts\": 3877,\n\t\"bouts\": 5036,\n\t\"resorted\": 26813,\n\t\"grass\": 8899,\n\t\"simplistically\": 20799,\n\t\"physicians\": 3294,\n\t\"Minor\": 4864,\n\t\"05:59\": 21384,\n\t\"quixotic\": 19114,\n\t\"REMEMBER\": 24974,\n\t\"glibness\": 31626,\n\t\"OBSF\": 22586,\n\t\"Steakhouse\": 26553,\n\t\"extending\": 11179,\n\t\"900\": 12137,\n\t\"literate\": 27100,\n\t\"pubs\": 28117,\n\t\"story\": 4628,\n\t\"packed\": 9182,\n\t\"acknowledges\": 20386,\n\t\"reaches\": 8061,\n\t\"crept\": 9296,\n\t\"enabling\": 1024,\n\t\"strawberry\": 16201,\n\t\"burglars\": 29818,\n\t\"drawers\": 29889,\n\t\"nuclear\": 10415,\n\t\"Thebaid\": 5158,\n\t\"384\": 4985,\n\t\"Agreement\": 21031,\n\t\"Alright\": 6197,\n\t\"touch\": 6714,\n\t\"admirals\": 30951,\n\t\"devised\": 13540,\n\t\"Tablet's\": 26688,\n\t\"sucks\": 15069,\n\t\"Kim\": 7550,\n\t\"top\": 7108,\n\t\"scented\": 9712,\n\t\"Booker\": 12545,\n\t\"workplace\": 15013,\n\t\"1101\": 15243,\n\t\"thousand\": 6039,\n\t\"pact\": 25621,\n\t\"Montana\": 15482,\n\t\"goodbye\": 12768,\n\t\"Failed\": 15258,\n\t\"confines\": 22896,\n\t\"donuts\": 15881,\n\t\"maple\": 8591,\n\t\"Officials\": 12983,\n\t\"relentlessly\": 32779,\n\t\"defended\": 13055,\n\t\"trauma\": 15721,\n\t\"fearless\": 16718,\n\t\"W.\": 3156,\n\t\"faintly\": 32812,\n\t\"biochemical\": 20613,\n\t\"stripe\": 16685,\n\t\"Absolutely\": 10329,\n\t\"earnest\": 4683,\n\t\"bipartisan\": 14179,\n\t\"outing\": 29390,\n\t\"hehehe\": 29221,\n\t\"network\": 2985,\n\t\"mist\": 6837,\n\t\"Affirmative\": 23151,\n\t\"Soon\": 3293,\n\t\"Salad\": 28602,\n\t\"Synopsis\": 5619,\n\t\"densely\": 19547,\n\t\"Caffasso\": 16593,\n\t\"Security\": 7911,\n\t\"tolerable\": 21841,\n\t\"sinking\": 9457,\n\t\"Oversite\": 9502,\n\t\"10\": 1761,\n\t\"numbered\": 17108,\n\t\"chaps\": 25202,\n\t\"luxerious\": 17146,\n\t\"coils\": 7382,\n\t\"Referee\": 18343,\n\t\"Memon\": 12244,\n\t\"houses\": 3621,\n\t\"ovr\": 26360,\n\t\"ASWERING\": 28908,\n\t\"assimilate\": 32718,\n\t\"ratings\": 5811,\n\t\"www.juancole.com\": 18964,\n\t\"Financially\": 25308,\n\t\"would\": 863,\n\t\"systematic\": 1759,\n\t\"Making\": 8003,\n\t\"nerds\": 13638,\n\t\"requisite\": 31280,\n\t\"array\": 2608,\n\t\"Experts\": 3052,\n\t\"prosperity\": 7990,\n\t\"melts\": 27304,\n\t\"bustling\": 16914,\n\t\"admire\": 27393,\n\t\"athlete\": 8400,\n\t\"Yoga\": 27576,\n\t\"P\": 3324,\n\t\"ragga\": 16703,\n\t\"DAILY\": 18968,\n\t\"Castano@EES\": 23506,\n\t\"zones\": 2340,\n\t\"dominated\": 9239,\n\t\"summaries\": 15262,\n\t\"enriched\": 15918,\n\t\"Wim\": 5516,\n\t\"1594\": 25408,\n\t\"plane\": 3313,\n\t\"societal\": 7273,\n\t\"pleasure\": 8519,\n\t\"scratch\": 12622,\n\t\"Ireland\": 18871,\n\t\"rags\": 31188,\n\t\"Marbles\": 5175,\n\t\"0590883899\": 16670,\n\t\"majority\": 8487,\n\t\"Visibility\": 30514,\n\t\"1665\": 4334,\n\t\"religion\": 8732,\n\t\"Whi-\": 6870,\n\t\"maternal\": 29783,\n\t\"Cardenas\": 5717,\n\t\"Ressam\": 20779,\n\t\"Cheryl\": 23063,\n\t\"Goose's\": 28636,\n\t\"footer\": 30215,\n\t\"mature\": 4713,\n\t\"Leasing\": 29177,\n\t\"prefere\": 26502,\n\t\"interjection\": 1779,\n\t\"Sigh\": 29234,\n\t\"costumes\": 12544,\n\t\"Annie\": 13399,\n\t\"0448\": 21893,\n\t\"Vanilla\": 17826,\n\t\"Oomen-Ruijten\": 31386,\n\t\"http://www.mikegigi.com/meltmetl.htm\": 27317,\n\t\"waitresses\": 29579,\n\t\"contributed\": 731,\n\t\"batteries\": 25788,\n\t\"sisters\": 14070,\n\t\"payoff\": 27943,\n\t\"chute\": 18192,\n\t\"You'd\": 6464,\n\t\"exacting\": 32604,\n\t\"rear\": 4267,\n\t\"MMA\": 18760,\n\t\"BE\": 27777,\n\t\"ai\": 4053,\n\t\"CANNOT\": 28004,\n\t\"Cheers\": 15994,\n\t\"Where\": 6428,\n\t\"massacring\": 20358,\n\t\"proverbial\": 20352,\n\t\"substitute\": 7559,\n\t\"44th\": 17125,\n\t\"Falls\": 15993,\n\t\"niece\": 31853,\n\t\"stifle\": 7054,\n\t\"army\": 4332,\n\t\"Gloucestershire\": 26129,\n\t\"configures\": 30167,\n\t\"Nicaragua\": 25475,\n\t\"fingers\": 7778,\n\t\"allowing\": 2880,\n\t\"Devon\": 4229,\n\t\"photography\": 13295,\n\t\"Columbus\": 3687,\n\t\"Rule\": 7323,\n\t\"deeper\": 8288,\n\t\"ordinarily\": 19848,\n\t\"Misalette\": 11749,\n\t\"hostages\": 20504,\n\t\"org\": 21715,\n\t\"Filo\": 24219,\n\t\"slice\": 11366,\n\t\"Elisha\": 5776,\n\t\"Rinascimento\": 27102,\n\t\"cavies\": 27435,\n\t\"notepad\": 24987,\n\t\"CO\": 9303,\n\t\"Cowboys\": 13401,\n\t\"Expired\": 16042,\n\t\"roaches\": 21978,\n\t\"mindset\": 15077,\n\t\"Marino\": 20163,\n\t\"Murillo\": 13110,\n\t\"method\": 1851,\n\t\"analysts\": 19142,\n\t\"users\": 10818,\n\t\"Sunlight\": 9843,\n\t\"Kaho\": 4623,\n\t\"1280\": 14103,\n\t\"meticulously\": 32869,\n\t\"innovator’s\": 15094,\n\t\"Children's\": 18727,\n\t\"T&D\": 23512,\n\t\"http://www.blueoakstables.com/breyerhorsebarns_barn003.asp\": 26844,\n\t\"compulsive\": 13544,\n\t\"jokingly\": 16945,\n\t\"Shelf\": 10674,\n\t\"Lanka\": 18974,\n\t\"fiance's\": 29724,\n\t\"magnification\": 10640,\n\t\"abstaining\": 27186,\n\t\"Nostromo\": 25535,\n\t\"eaves\": 8948,\n\t\"14\": 739,\n\t\"chasers'\": 18306,\n\t\"Gelceuticals\": 23985,\n\t\"full\": 463,\n\t\"HATES\": 26429,\n\t\"farming\": 15062,\n\t\"sevenyear-old\": 32630,\n\t\"Brent\": 21326,\n\t\"Enterprise\": 15582,\n\t\"Living\": 14852,\n\t\"Hoecker\": 22378,\n\t\"ecologist\": 25105,\n\t\"necessary\": 2170,\n\t\"peer\": 1330,\n\t\"opiate\": 9397,\n\t\"Cave\": 12567,\n\t\"graze\": 25018,\n\t\"Olsen\": 5761,\n\t\"Brought\": 28430,\n\t\"application's\": 30190,\n\t\"rut\": 31491,\n\t\"Gwadloup\": 16628,\n\t\"Ahali\": 4528,\n\t\"columnist\": 10482,\n\t\"journals\": 1332,\n\t\"1483\": 25376,\n\t\"Hadid\": 4461,\n\t\"Babington\": 10938,\n\t\"fists\": 9691,\n\t\"hopeful\": 11575,\n\t\"pillow\": 26366,\n\t\"generated\": 2152,\n\t\"Clay\": 5820,\n\t\"Peanutjake\": 24336,\n\t\"prefect\": 31007,\n\t\"biasing\": 16221,\n\t\"1678\": 4349,\n\t\"loosing\": 26810,\n\t\"fino\": 27571,\n\t\"negro\": 31263,\n\t\"Computing\": 549,\n\t\"1960\": 3458,\n\t\"Flourishing\": 15338,\n\t\"hey\": 15761,\n\t\"slurped\": 32336,\n\t\"Furthermore\": 1632,\n\t\"we're\": 6345,\n\t\"six\": 1906,\n\t\"Wi940\": 18675,\n\t\"alleyway\": 32279,\n\t\"Scientific\": 18652,\n\t\"TEXAS\": 22665,\n\t\"adverse\": 19714,\n\t\"Socialists\": 20186,\n\t\"complain\": 22851,\n\t\"interprets\": 30105,\n\t\"medals\": 3624,\n\t\"Than\": 26956,\n\t\"indignity\": 23968,\n\t\"Glove\": 4853,\n\t\"Careful\": 29831,\n\t\"sun's\": 16366,\n\t\"prevention\": 13966,\n\t\"202-466-9142\": 22828,\n\t\"skating\": 32738,\n\t\"macho\": 13609,\n\t\"1704\": 3518,\n\t\"Cester\": 21447,\n\t\"champagne\": 30602,\n\t\"WebSphere\": 21367,\n\t\"fancied\": 31254,\n\t\"born\": 3132,\n\t\"Saddam\": 18559,\n\t\"s-\": 6121,\n\t\"greens\": 8023,\n\t\"repainted\": 32103,\n\t\"feeling\": 8738,\n\t\"Rhodesia\": 30598,\n\t\"delhi\": 27410,\n\t\"unto\": 14069,\n\t\"Common\": 7996,\n\t\"innocents\": 20611,\n\t\"singer\": 5363,\n\t\"guitarist\": 25622,\n\t\"Lane\": 21823,\n\t\"lawn\": 8931,\n\t\"C\": 11731,\n\t\"philosopher\": 10367,\n\t\"sunday\": 21192,\n\t\"hammy\": 26493,\n\t\"trigger\": 1050,\n\t\"prohibition\": 14676,\n\t\"partying\": 18034,\n\t\"ole\": 19405,\n\t\"he’d\": 15499,\n\t\"drags\": 18238,\n\t\"stuffed\": 31621,\n\t\"tin-billy\": 32533,\n\t\"neonatal\": 18685,\n\t\"MAIDEN\": 14299,\n\t\"A1M\": 17565,\n\t\"Lorie\": 21692,\n\t\"Cemetery\": 4069,\n\t\"LE\": 11414,\n\t\"combination\": 2040,\n\t\"13381\": 20276,\n\t\"consultants\": 23855,\n\t\"rodents\": 26482,\n\t\"`s\": 21240,\n\t\"occupies\": 7799,\n\t\"Downton\": 4155,\n\t\"alt.religion.scientology\": 12708,\n\t\"restrained\": 20592,\n\t\"Respectfully\": 22930,\n\t\"Kingsman\": 4201,\n\t\"adapts\": 2800,\n\t\"e-reader\": 26682,\n\t\"food\": 8020,\n\t\"conveyed\": 14840,\n\t\"superintendant\": 28313,\n\t\"Sdot\": 30801,\n\t\"martyrs\": 5042,\n\t\"hover\": 30349,\n\t\"rebellion\": 25704,\n\t\"Lighting\": 2083,\n\t\"console\": 26777,\n\t\"Brigades\": 18622,\n\t\"mid-2004\": 26048,\n\t\"literaly\": 20325,\n\t\"canceling\": 29858,\n\t\"evzone\": 31671,\n\t\"XoveTIC\": 2247,\n\t\"Lectures\": 3734,\n\t\"towels\": 17774,\n\t\"naturalism\": 15157,\n\t\"Constitution\": 7224,\n\t\"Shiite\": 18510,\n\t\"that\": 230,\n\t\"speed\": 342,\n\t\"Compare\": 15108,\n\t\"hers\": 26420,\n\t\"monotonous\": 20139,\n\t\"fifteen\": 4299,\n\t\"pressurized\": 27298,\n\t\"sized\": 7890,\n\t\"P.S.\": 11707,\n\t\"President's\": 14129,\n\t\"Doyon\": 24125,\n\t\"Wheel\": 26417,\n\t\"jokes\": 3470,\n\t\"Evolution\": 10209,\n\t\"quarters\": 15642,\n\t\"Winckelmann\": 27117,\n\t\"minuscule\": 18226,\n\t\"verification\": 2347,\n\t\"Sullivan@ENRON\": 22817,\n\t\"urged\": 14401,\n\t\"airfare\": 13779,\n\t\"silicone\": 16055,\n\t\"uniquely\": 4425,\n\t\"respectful\": 17343,\n\t\"Valerie\": 23546,\n\t\"CISCO\": 24148,\n\t\"conferees\": 19141,\n\t\"Camera\": 26224,\n\t\"legalised\": 25971,\n\t\"Fallen\": 19873,\n\t\"Jews\": 7244,\n\t\"emerges\": 1956,\n\t\"Detail\": 30085,\n\t\"&amp;apos;\": 30135,\n\t\"Messenger\": 20872,\n\t\"Fistfights\": 19286,\n\t\"cheesecloth\": 18450,\n\t\"stalled\": 32736,\n\t\"famously\": 3930,\n\t\"poster\": 6840,\n\t\"conjointly\": 3252,\n\t\"Parachute\": 18179,\n\t\"OLMEC\": 15306,\n\t\"Kohoutek\": 32567,\n\t\"streaked\": 9537,\n\t\"banks\": 9393,\n\t\"penalty\": 13082,\n\t\"Bondad\": 21410,\n\t\"averted\": 23696,\n\t\"Luminol\": 18013,\n\t\"Wise\": 10057,\n\t\"Christ’s\": 10151,\n\t\"Hilgert\": 23375,\n\t\"imam\": 16771,\n\t\"roadway\": 17438,\n\t\"Hours\": 17817,\n\t\"Jerome\": 4958,\n\t\"condone\": 18847,\n\t\"ve\": 26183,\n\t\"Cyprian\": 31856,\n\t\"Tripura\": 19529,\n\t\"4.99\": 29498,\n\t\"covers\": 2351,\n\t\"praise\": 4115,\n\t\"M.Sc.\": 10259,\n\t\"Anglo\": 14682,\n\t\"robotically\": 9342,\n\t\"Rumor\": 25026,\n\t\"queueing\": 31812,\n\t\"spel\": 21286,\n\t\"catacombs\": 5044,\n\t\"incorporates\": 22486,\n\t\"aft\": 30911,\n\t\"heave\": 32032,\n\t\"deluded\": 25647,\n\t\"institutional\": 763,\n\t\"Students\": 1674,\n\t\"Ottley\": 12020,\n\t\"Hoax\": 24769,\n\t\"struggled\": 8940,\n\t\"UN\": 13941,\n\t\"Datasheet\": 30078,\n\t\"calendars\": 21201,\n\t\"referring\": 15459,\n\t\"ESA\": 2578,\n\t\"disruption\": 25874,\n\t\"congested\": 17571,\n\t\"tight\": 9059,\n\t\"Gone\": 29233,\n\t\"diameter\": 11389,\n\t\"Shinza\": 31777,\n\t\"Successful\": 12611,\n\t\"publish\": 1362,\n\t\"talent\": 9829,\n\t\"solemn\": 14010,\n\t\"massage\": 9165,\n\t\"colours\": 24611,\n\t\"Fuel\": 21215,\n\t\"sculpted\": 26264,\n\t\"undeclared\": 20387,\n\t\"adopted\": 812,\n\t\"babe\": 6443,\n\t\"Husbands\": 20039,\n\t\"Sugarbowl\": 11477,\n\t\"Bear\": 7889,\n\t\"Model\": 13698,\n\t\"discourteous\": 28047,\n\t\"1.00\": 24936,\n\t\"Zeitgeist\": 13410,\n\t\"anchorage\": 16340,\n\t\"1520\": 25377,\n\t\"lifestyle\": 12303,\n\t\"brains\": 7010,\n\t\"Kamen\": 12081,\n\t\"DC\": 4129,\n\t\"selected\": 8286,\n\t\"Stacey\": 22324,\n\t\"Plucker\": 2443,\n\t\"Federal\": 1505,\n\t\"jangling\": 32332,\n\t\"hehe\": 27515,\n\t\"Neuendorffer\": 25578,\n\t\"novelty\": 3998,\n\t\"ha\": 9097,\n\t\"docks\": 9161,\n\t\"creators\": 18316,\n\t\"tributaries\": 23964,\n\t\"237\": 25985,\n\t\"Possibly\": 7994,\n\t\"Gilbert\": 17048,\n\t\"Stepping\": 30793,\n\t\"snow-white\": 32294,\n\t\"mimicking\": 1329,\n\t\"Talal\": 18516,\n\t\"certificated\": 32574,\n\t\"devil\": 12930,\n\t\"collect\": 11314,\n\t\"advisors\": 20965,\n\t\"distinct\": 1773,\n\t\"Sand\": 17493,\n\t\"precise\": 1866,\n\t\"privy\": 32550,\n\t\"fauna\": 17218,\n\t\"Ive\": 26769,\n\t\"Such\": 563,\n\t\"Hong\": 12361,\n\t\"around\": 473,\n\t\"far\": 1183,\n\t\"baseman\": 4771,\n\t\"mornings\": 16990,\n\t\"Leonardos\": 27107,\n\t\"men\": 7200,\n\t\"Platt's\": 23414,\n\t\"ghost\": 8300,\n\t\"origami\": 29533,\n\t\"sulphuric\": 16641,\n\t\"belch\": 32026,\n\t\"correction\": 2648,\n\t\"mansions\": 17420,\n\t\"03:13:58\": 21534,\n\t\"morph\": 23156,\n\t\"BILL\": 29700,\n\t\"Lives\": 14119,\n\t\"hatred\": 14336,\n\t\"Nickelodean\": 6973,\n\t\"Montgomery\": 15040,\n\t\"Probing\": 23659,\n\t\"Types\": 23042,\n\t\"Californian\": 28485,\n\t\"admonished\": 25633,\n\t\"half-hesitant\": 32744,\n\t\"Philippines\": 2067,\n\t\"Ἱερώνυμος\": 4965,\n\t\"1881\": 4763,\n\t\"389,950\": 15669,\n\t\"Datamanager\": 23001,\n\t\"strengths\": 175,\n\t\"approach\": 319,\n\t\"P&I\": 22697,\n\t\"Coordinator\": 23380,\n\t\"Byargeon\": 23387,\n\t\"THERE\": 26768,\n\t\"Hawaii\": 27519,\n\t\"foundational\": 3700,\n\t\"surv\": 24885,\n\t\"happily\": 10157,\n\t\"stylists\": 29864,\n\t\"Methodology\": 3024,\n\t\"destroyed\": 10406,\n\t\"spaces\": 8131,\n\t\"Vigor\": 28324,\n\t\"Jasny\": 2471,\n\t\"Enrique\": 25583,\n\t\"Fired\": 11008,\n\t\"Rehabilitation\": 12825,\n\t\"1892\": 4620,\n\t\"Beats\": 28412,\n\t\"growth\": 833,\n\t\"Butter\": 15430,\n\t\"aimless\": 30332,\n\t\"astonishing\": 15165,\n\t\"Martin\": 2431,\n\t\"rapists\": 14652,\n\t\"guys\": 5252,\n\t\"Count\": 4404,\n\t\"VA\": 24763,\n\t\"emergent\": 3087,\n\t\"deduction\": 7162,\n\t\"Utilization\": 2044,\n\t\"Prearranged\": 27239,\n\t\"methods\": 1243,\n\t\"Liberation\": 19002,\n\t\"realise\": 19682,\n\t\"beauty\": 11263,\n\t\"condemnations\": 20509,\n\t\"planks\": 8956,\n\t\"1580\": 14875,\n\t\"backgrounds\": 17631,\n\t\"nicknamed\": 10268,\n\t\"Cry\": 5783,\n\t\"suggested\": 1111,\n\t\"Writing\": 7653,\n\t\"deformity\": 14977,\n\t\"HIS\": 28752,\n\t\"decided\": 1405,\n\t\"wagin\": 27606,\n\t\"distant\": 1025,\n\t\"caterers\": 16617,\n\t\"Tintman\": 28110,\n\t\"1908\": 24758,\n\t\"Gaza\": 18787,\n\t\"revolutions\": 25530,\n\t\"shura\": 20686,\n\t\"0590854959\": 16675,\n\t\"son's\": 20171,\n\t\"Meraux\": 23416,\n\t\"center's\": 29082,\n\t\"possibility\": 1673,\n\t\"Dustin\": 28458,\n\t\"words\": 769,\n\t\"atop\": 9249,\n\t\"astronauts\": 23929,\n\t\"labyrinth\": 29123,\n\t\"contours\": 17512,\n\t\"Raspberry\": 13959,\n\t\"downwelling\": 2703,\n\t\"reprisals\": 19710,\n\t\"200,987.33\": 22729,\n\t\"bustle\": 29427,\n\t\"200,000,000,000\": 24372,\n\t\"toil\": 31114,\n\t\"unchanged\": 30870,\n\t\"priest\": 4033,\n\t\"pounds\": 4811,\n\t\"CAEM\": 22793,\n\t\"redesign\": 8129,\n\t\"Lemoine\": 16556,\n\t\"slacked\": 19802,\n\t\"Tracking\": 11,\n\t\"1701\": 4407,\n\t\"overawing\": 31731,\n\t\"February\": 3105,\n\t\"supplements\": 7892,\n\t\"matchsticks\": 31796,\n\t\"gave\": 3187,\n\t\"pollutants\": 13474,\n\t\"Honda\": 28560,\n\t\"5.\": 2033,\n\t\"RELEASES\": 14587,\n\t\"symbolizes\": 12914,\n\t\"Beheshti\": 16760,\n\t\"7.5\": 23284,\n\t\"Telescope\": 14583,\n\t\"balloon\": 6286,\n\t\"Sarah's\": 20951,\n\t\"epistemology\": 15177,\n\t\"Vice\": 14307,\n\t\"Iris'\": 20964,\n\t\"weakness\": 31026,\n\t\"Browsing\": 10952,\n\t\"Methods\": 17698,\n\t\"effectually\": 31331,\n\t\"MRS.\": 11902,\n\t\"throes\": 14316,\n\t\"Blood\": 9677,\n\t\"creole\": 16629,\n\t\"carpets\": 16737,\n\t\"rigor\": 3856,\n\t\"lifted\": 8670,\n\t\"stateless\": 12157,\n\t\"restored\": 11578,\n\t\"bushes\": 17719,\n\t\"convict\": 24295,\n\t\"physios\": 28321,\n\t\"Illinois\": 13328,\n\t\"qualification\": 32841,\n\t\"specialty\": 16614,\n\t\"DPR\": 22610,\n\t\"defender\": 13138,\n\t\"Yoshida\": 8327,\n\t\"DISTRICT\": 11497,\n\t\"Flagship\": 29914,\n\t\"Ignore\": 26736,\n\t\"11:32\": 21941,\n\t\"triple\": 4906,\n\t\"spin\": 19212,\n\t\"incorrectly\": 21288,\n\t\"application’s\": 2337,\n\t\"fascinated\": 31065,\n\t\"fray\": 20279,\n\t\"Ralph\": 4213,\n\t\"Rhodes\": 13350,\n\t\"nikon\": 26228,\n\t\"crystal\": 9378,\n\t\"denied\": 5923,\n\t\"housed\": 2849,\n\t\"blocks\": 11946,\n\t\"AAA\": 23807,\n\t\"slower\": 9951,\n\t\"Roberto\": 13233,\n\t\"Manson\": 28626,\n\t\"debating\": 10454,\n\t\"Wikimedia\": 10779,\n\t\"money\": 1470,\n\t\"Helmut\": 13395,\n\t\"Shell\": 8250,\n\t\"Rocks\": 11349,\n\t\"CRAZY\": 11874,\n\t\"preschoolers\": 27939,\n\t\"TB\": 26982,\n\t\"D\": 2205,\n\t\"allegation\": 19271,\n\t\"stopping\": 9554,\n\t\"proposition\": 30578,\n\t\"i've\": 26460,\n\t\"june\": 2138,\n\t\"congratulations\": 22268,\n\t\"siesta\": 16991,\n\t\"tryed\": 27598,\n\t\"Sheikh\": 16795,\n\t\"trembling\": 9743,\n\t\"bomber\": 19357,\n\t\"refurbish\": 31376,\n\t\"ATTENTION\": 24341,\n\t\"Fraction\": 7104,\n\t\"Ulistic\": 29808,\n\t\"Antigone\": 5447,\n\t\"feathered\": 11962,\n\t\"Hazara\": 19727,\n\t\"tele\": 27552,\n\t\"mechanics\": 2916,\n\t\"optimization\": 22888,\n\t\"Mark\": 4916,\n\t\"terrific\": 10902,\n\t\"provides\": 322,\n\t\"Cheveux\": 29075,\n\t\"Percell\": 22885,\n\t\"Colombo\": 19001,\n\t\"Une\": 10120,\n\t\"POV\": 11325,\n\t\"pennies\": 7909,\n\t\"world's\": 1737,\n\t\"eikon\": 9481,\n\t\"Matte\": 16019,\n\t\"unwittingly\": 18481,\n\t\"Stuart\": 4324,\n\t\"Salary\": 21022,\n\t\"trade\": 11603,\n\t\"payers\": 24508,\n\t\"Dinners\": 21991,\n\t\"Minimum\": 25986,\n\t\"Ltd\": 28112,\n\t\"salad\": 17770,\n\t\"Fernley\": 21310,\n\t\".xsl\": 30126,\n\t\"Stromboli\": 30838,\n\t\"chanting\": 9096,\n\t\"dimly\": 7863,\n\t\"cheerfully\": 32333,\n\t\"Maya\": 15353,\n\t\"ß\": 18097,\n\t\"Bowen\": 22121,\n\t\"smokers\": 29107,\n\t\"1951\": 4904,\n\t\"d'Enfer\": 16684,\n\t\"Farm\": 8218,\n\t\"soup\": 9759,\n\t\"complicit\": 19461,\n\t\"......\": 19487,\n\t\"Connecticut\": 10947,\n\t\"quantitatively\": 20391,\n\t\"spitting\": 19239,\n\t\"dies\": 25352,\n\t\"HD\": 26679,\n\t\"fries\": 26344,\n\t\"Chow\": 12506,\n\t\"postal\": 24665,\n\t\"Translation\": 5553,\n\t\"replete\": 7581,\n\t\"tomorrow's\": 23325,\n\t\"halos\": 30982,\n\t\"seriograph\": 6187,\n\t\"Rating\": 21028,\n\t\"prey\": 17807,\n\t\"standards\": 883,\n\t\"needle\": 30997,\n\t\"tray\": 17868,\n\t\"Moretti\": 1027,\n\t\"Ew\": 16039,\n\t\"Owners\": 32275,\n\t\"sickly\": 5978,\n\t\"combat\": 25768,\n\t\"6,000\": 5897,\n\t\"Anyhow\": 29785,\n\t\"Listen\": 16133,\n\t\"Julfa\": 16750,\n\t\"Phnoum\": 5996,\n\t\"Sova\": 7547,\n\t\"Jensen\": 5786,\n\t\"Took\": 6088,\n\t\"Deputy\": 19439,\n\t\"CTRL–V\": 30158,\n\t\"Croatia\": 22505,\n\t\"Aww\": 16137,\n\t\"warred\": 32511,\n\t\"healthiest\": 15990,\n\t\"homey\": 29468,\n\t\"launder\": 12047,\n\t\"nausea\": 27597,\n\t\"Fishing\": 26770,\n\t\"Rauschenberg\": 10510,\n\t\"€\": 16443,\n\t\"apathy\": 14157,\n\t\"stil\": 26524,\n\t\"Nakarai\": 4635,\n\t\"requires\": 762,\n\t\"essential\": 868,\n\t\"C.V\": 22262,\n\t\"fragrant\": 17710,\n\t\"radiographs\": 27612,\n\t\"dries\": 26410,\n\t\"Hermione\": 32076,\n\t\"snack\": 15697,\n\t\"land's\": 17511,\n\t\"nuanced\": 2918,\n\t\"google\": 27477,\n\t\"Thelema\": 20202,\n\t\"chronicler\": 30433,\n\t\"Kriste\": 23071,\n\t\"temptations\": 17394,\n\t\"divergent\": 15072,\n\t\"boiler\": 9770,\n\t\"showcase\": 26932,\n\t\"Thrones\": 2927,\n\t\"Oryana\": 8224,\n\t\"Crown\": 4183,\n\t\"Nagaski\": 18725,\n\t\"Abnormal\": 17819,\n\t\"logistical\": 20738,\n\t\"hasn't\": 6703,\n\t\"advancing\": 4870,\n\t\"shorts\": 8844,\n\t\"trimmed\": 9811,\n\t\"Topack\": 22741,\n\t\"frolicking\": 8970,\n\t\"babinos\": 6784,\n\t\"interacts\": 2194,\n\t\"Fort\": 4774,\n\t\"Body\": 15832,\n\t\"Boswell\": 13036,\n\t\"1965\": 3703,\n\t\"IRC\": 11309,\n\t\"EXCEPT\": 26530,\n\t\"listened\": 14189,\n\t\"downpour\": 9038,\n\t\"bpd\": 23403,\n\t\"are\": 305,\n\t\"tripartite\": 19686,\n\t\"mentioned\": 3924,\n\t\"checking\": 2314,\n\t\"'M\": 11892,\n\t\"Airport\": 16445,\n\t\"doesn't\": 6470,\n\t\"foodies\": 8037,\n\t\"Endless\": 5744,\n\t\"guarantor\": 10446,\n\t\"bond\": 14368,\n\t\"writhing\": 8942,\n\t\"baker\": 27323,\n\t\"Quaint\": 29078,\n\t\"mentoring\": 404,\n\t\"ventilation\": 27764,\n\t\"muscular\": 30639,\n\t\"hide-out\": 32495,\n\t\"Hazard's\": 13117,\n\t\"Warning\": 23201,\n\t\"unlisted\": 30390,\n\t\"standardized\": 14858,\n\t\"thickness\": 23012,\n\t\"nun\": 19934,\n\t\"treating\": 20056,\n\t\"absent-mindedly\": 32088,\n\t\"Datos\": 2235,\n\t\"stumping\": 25241,\n\t\"deceiving\": 1256,\n\t\"Pritzker\": 4473,\n\t\"an\": 50,\n\t\"heavier\": 17894,\n\t\"louder\": 32142,\n\t\"Teams\": 4791,\n\t\"gladly\": 9496,\n\t\"immensity\": 30921,\n\t\"1717\": 23886,\n\t\"Hong-Kong\": 31344,\n\t\"chickens\": 2734,\n\t\"http://www.canadavisa.com/canadian-immigration-faq-skilled-workers.html\": 27082,\n\t\"Surveying\": 12514,\n\t\"Industry\": 15136,\n\t\"Malle's\": 5480,\n\t\"preferred\": 14399,\n\t\"jester\": 20445,\n\t\"Pescheux\": 3958,\n\t\"onions\": 16125,\n\t\"pearl\": 32621,\n\t\"women's\": 10987,\n\t\"Amused\": 30570,\n\t\"latest\": 7914,\n\t\"controversial\": 13543,\n\t\"terror\": 5090,\n\t\"version\": 5818,\n\t\"Co.\": 21089,\n\t\"starting\": 4955,\n\t\"Olympics\": 4494,\n\t\"straightened\": 25229,\n\t\"Armatho\": 25400,\n\t\"mobile\": 2320,\n\t\"CBS\": 4160,\n\t\"Priscilla\": 12471,\n\t\"L\": 2599,\n\t\"dhin\": 24090,\n\t\"plans\": 4036,\n\t\"sharers\": 14073,\n\t\"seaports\": 31539,\n\t\"Katie\": 15133,\n\t\"dresser\": 29890,\n\t\"Sherry\": 6709,\n\t\"confronted\": 15476,\n\t\"pony's\": 28941,\n\t\"development\": 2281,\n\t\"strictly\": 10964,\n\t\"Bradley's\": 25113,\n\t\"staffs\": 28171,\n\t\"ice\": 6205,\n\t\"yelped\": 9670,\n\t\"Chong\": 2473,\n\t\"berths\": 17319,\n\t\"Chaharbagh\": 16786,\n\t\"imposingly\": 27921,\n\t\"sanitary\": 18058,\n\t\"mover\": 30695,\n\t\"jumbo\": 25232,\n\t\"countrymen's\": 31984,\n\t\"dissembling\": 31624,\n\t\"biochemist\": 20644,\n\t\"discharged\": 3594,\n\t\"waterfront\": 9131,\n\t\"Senate\": 5862,\n\t\"amazing\": 8860,\n\t\"GB\": 13018,\n\t\"Sotoun\": 16825,\n\t\"Chase\": 6934,\n\t\"risky\": 8095,\n\t\"leagues\": 4865,\n\t\"!!!!!\": 28048,\n\t\"Stainless\": 6458,\n\t\"whose\": 477,\n\t\"illegally\": 13022,\n\t\"stuttering\": 18858,\n\t\"named\": 4832,\n\t\"Clinic\": 29214,\n\t\"MAPS\": 11928,\n\t\"Radiation\": 2100,\n\t\"marching\": 32196,\n\t\"shrill\": 19275,\n\t\"loudspeakers\": 12885,\n\t\"OFFER\": 11933,\n\t\"administrations\": 13210,\n\t\"11/27/2000\": 23809,\n\t\"collages\": 26112,\n\t\"eyelids\": 25559,\n\t\"i',\": 26452,\n\t\"BASIC\": 27028,\n\t\"short\": 664,\n\t\"Reasonable\": 28274,\n\t\"Spoken\": 11022,\n\t\"Ã³l\": 19464,\n\t\"hedge\": 20970,\n\t\"planting\": 11956,\n\t\"plateau\": 17180,\n\t\"Nowheresville\": 28629,\n\t\"certification\": 14550,\n\t\"Junction\": 4148,\n\t\"tights\": 6493,\n\t\"actions\": 938,\n\t\"payer\": 24509,\n\t\"correlation\": 20971,\n\t\"asylum\": 8320,\n\t\"tooted\": 31179,\n\t\"kerosene\": 31436,\n\t\"Hash\": 26347,\n\t\"meetups\": 10784,\n\t\"toda\": 28554,\n\t\"Chicks\": 22114,\n\t\"ferries\": 17235,\n\t\"considered\": 1049,\n\t\"meowing\": 27692,\n\t\"Toronto\": 12526,\n\t\"eighties\": 24361,\n\t\"Th-\": 6180,\n\t\"Citing\": 12120,\n\t\"Bush\": 10403,\n\t\"delightedly\": 32956,\n\t\"Viral\": 23978,\n\t\"Sierra\": 29286,\n\t\"alternatively\": 18303,\n\t\"Sandi\": 22477,\n\t\"introduces\": 1320,\n\t\"Primetime\": 4184,\n\t\"ROV\": 10613,\n\t\"46C1\": 23130,\n\t\"nestled\": 29428,\n\t\"meatball\": 29111,\n\t\"eSpeakers\": 21543,\n\t\"why\": 1803,\n\t\"Albeit\": 2035,\n\t\"hovers\": 8788,\n\t\"statistic\": 14665,\n\t\"intellectuals\": 20371,\n\t\"won\": 4928,\n\t\"Mecole\": 23136,\n\t\"Right's\": 18796,\n\t\"713/871-5119\": 21801,\n\t\"measures\": 1638,\n\t\"scaly\": 9001,\n\t\"Eva\": 11294,\n\t\"personally\": 7692,\n\t\"Defence\": 18663,\n\t\"NOT\": 21086,\n\t\"x\": 7017,\n\t\"A59\": 17572,\n\t\"wallet\": 17245,\n\t\"dying\": 13818,\n\t\"1S9\": 21297,\n\t\"permissible\": 1276,\n\t\"Poibeau\": 969,\n\t\"LNG\": 23466,\n\t\"Wrocław\": 16934,\n\t\"Wenner\": 13353,\n\t\"voyage\": 30781,\n\t\"mutt\": 27134,\n\t\"Kinnock\": 31514,\n\t\"Evaluation\": 22835,\n\t\"bands\": 13428,\n\t\"U-haul\": 18173,\n\t\"Jake\": 16428,\n\t\"labs\": 20697,\n\t\"tattoo\": 28060,\n\t\"rewards\": 3183,\n\t\"harming\": 27798,\n\t\"deliverance\": 30484,\n\t\"Kindle\": 26681,\n\t\"Tschumi\": 4558,\n\t\"algebra\": 3843,\n\t\"After\": 1817,\n\t\"hardliners\": 19732,\n\t\"well-mannered\": 31880,\n\t\"erect\": 30963,\n\t\"circling\": 9964,\n\t\"continuity\": 31342,\n\t\"1938\": 3445,\n\t\"Akropolis\": 32814,\n\t\"anesthetic\": 29225,\n\t\"Barbados\": 16475,\n\t\"initiation\": 1780,\n\t\"1996\": 5383,\n\t\"initiative\": 14259,\n\t\"Caroline\": 21592,\n\t\"Transport\": 27229,\n\t\"collars\": 31734,\n\t\"Auchleuchries\": 4261,\n\t\"Corel\": 24154,\n\t\"build\": 7770,\n\t\"trembled\": 9449,\n\t\"touch-ups\": 16061,\n\t\"Becky\": 22875,\n\t\"roofs\": 9459,\n\t\"economies\": 11600,\n\t\"migrates\": 17222,\n\t\"insured\": 17067,\n\t\"mytouch\": 26178,\n\t\"2016\": 1071,\n\t\"Towers\": 12327,\n\t\"MONEY\": 28909,\n\t\"koran\": 20661,\n\t\"Peachstate\": 28470,\n\t\"OBSERVATION\": 23335,\n\t\"firmly\": 9545,\n\t\":/\": 27590,\n\t\"Anahuac\": 14760,\n\t\"XF\": 29718,\n\t\"reccomend\": 28556,\n\t\"dung\": 25527,\n\t\"Sports\": 5227,\n\t\"11.5\": 15654,\n\t\"McLean\": 29079,\n\t\"Re-interviewed\": 28609,\n\t\"Piotrkowska\": 16919,\n\t\"bore\": 6542,\n\t\"inter-animation\": 5646,\n\t\"shape\": 6240,\n\t\"enhancement\": 14529,\n\t\"moments\": 2834,\n\t\"grabbed\": 7099,\n\t\"Below\": 14104,\n\t\"Lepore\": 23534,\n\t\"Masjid\": 13183,\n\t\"payed\": 29606,\n\t\"alleged\": 2452,\n\t\"Cara’s\": 8832,\n\t\"Sputnik\": 31989,\n\t\"Lexical\": 1129,\n\t\"C.\": 15237,\n\t\"Gansu\": 24785,\n\t\"Enron\": 20961,\n\t\"Grant's\": 30399,\n\t\"Scribners\": 11952,\n\t\"maximized\": 23991,\n\t\"varying\": 1875,\n\t\"Alice\": 11272,\n\t\"consist\": 7288,\n\t\"passages\": 6635,\n\t\"Lankan\": 18995,\n\t\"determine\": 752,\n\t\"brand-new\": 32469,\n\t\"tip\": 8436,\n\t\"thesis\": 22096,\n\t\"Bockius\": 22130,\n\t\"Shopping\": 27416,\n\t\"May\": 3221,\n\t\"Morton\": 26564,\n\t\"aspirational\": 23849,\n\t\"swords\": 12929,\n\t\"explosions\": 8572,\n\t\"lemelpe@NU.COM\": 23529,\n\t\"Sheriff's\": 12324,\n\t\"European\": 2575,\n\t\"equal\": 825,\n\t\"Anglican\": 5006,\n\t\"State’s\": 708,\n\t\"State\": 709,\n\t\"gentle\": 10012,\n\t\"became\": 2020,\n\t\"cross-sectoral\": 13984,\n\t\"stars\": 4191,\n\t\"They're\": 6179,\n\t\"LYNX\": 22958,\n\t\"ANSWERS\": 27357,\n\t\"AllowAdditions\": 30219,\n\t\"cornflakes\": 30503,\n\t\"fortune\": 4331,\n\t\"Google's\": 10557,\n\t\"cleaned\": 15959,\n\t\"fraught\": 25883,\n\t\"Crust\": 28237,\n\t\"prepare\": 12845,\n\t\"Granger's\": 32313,\n\t\"everything\": 5057,\n\t\"reducing\": 4583,\n\t\"http://www.newsday.com/news/opinion/ny-vpnasa054135614feb05,0,5979821.story?coll=ny-editorials-headlines\": 23926,\n\t\"distilleries\": 16711,\n\t\"suggestions\": 17976,\n\t\"warmly\": 24261,\n\t\"mart\": 29551,\n\t\"mythical\": 19154,\n\t\"Transmutation\": 25298,\n\t\"Tori\": 21758,\n\t\"waning\": 11211,\n\t\"Detroit\": 17452,\n\t\"tankers\": 19557,\n\t\"hikes\": 23660,\n\t\"inland\": 24435,\n\t\"Choate\": 21037,\n\t\"Actress\": 5348,\n\t\"downfalls\": 25199,\n\t\"ploughing\": 17236,\n\t\"gone\": 5014,\n\t\"tribes\": 14740,\n\t\"commate\": 11814,\n\t\"Satan\": 13161,\n\t\"scrambled\": 9055,\n\t\"scattered\": 9220,\n\t\"LAGESSE\": 22754,\n\t\"topline\": 28001,\n\t\"pardon\": 29764,\n\t\"practically\": 16899,\n\t\"strode\": 32310,\n\t\"Ford\": 14412,\n\t\"David\": 10360,\n\t\"anarchy\": 12726,\n\t\"fault\": 6803,\n\t\"click\": 7677,\n\t\"dynamics\": 423,\n\t\"http://isc.enron.com/site\": 23114,\n\t\"highlights\": 4792,\n\t\"Regent\": 4377,\n\t\"Grammatical\": 3764,\n\t\"emphasis\": 984,\n\t\"refusing\": 4031,\n\t\"Stewart\": 28981,\n\t\"unpleasantly\": 28675,\n\t\"Stylesheet\": 30099,\n\t\"Chapelle\": 11465,\n\t\"tips\": 17293,\n\t\"fashion\": 9929,\n\t\"coastline\": 17181,\n\t\"brainwashing\": 20129,\n\t\"GE\": 21539,\n\t\"pickups\": 29236,\n\t\"unwooded\": 16195,\n\t\"converts\": 30163,\n\t\"leads\": 1858,\n\t\"Teterboro\": 16539,\n\t\"layman\": 17397,\n\t\"socialization\": 27462,\n\t\"prejudice\": 23972,\n\t\"sides\": 5087,\n\t\"watchers\": 25140,\n\t\"wouldn't\": 6687,\n\t\"businessperson\": 13402,\n\t\"Trey\": 5762,\n\t\"pinky\": 27672,\n\t\"Disney\": 5741,\n\t\"Clap\": 17800,\n\t\"Disabilities\": 10878,\n\t\"Everland\": 26578,\n\t\"non-avian\": 2739,\n\t\"Rachels'\": 24897,\n\t\"woollies\": 27809,\n\t\"We're\": 6348,\n\t\"militarism\": 10427,\n\t\"compress\": 11357,\n\t\"awkward\": 15699,\n\t\"handing\": 20167,\n\t\"serious\": 4641,\n\t\"regardless\": 7624,\n\t\"Lt.\": 19692,\n\t\"gear\": 28356,\n\t\"extraction\": 24360,\n\t\"ONSI\": 21226,\n\t\"Princeton\": 20609,\n\t\"simple\": 2782,\n\t\"saucepan\": 18374,\n\t\"territory's\": 31861,\n\t\"Images\": 12204,\n\t\"breakout\": 5467,\n\t\"distinguished\": 3135,\n\t\"Greece\": 14208,\n\t\"Cheney's\": 25937,\n\t\"fuel\": 17159,\n\t\"25,000\": 27646,\n\t\"communities\": 2027,\n\t\"critically\": 4163,\n\t\"Kaminski@ECT\": 22882,\n\t\"flashy\": 28887,\n\t\"traits\": 15311,\n\t\"WarpSpeed\": 21117,\n\t\"obstruction\": 27625,\n\t\"distributor\": 8062,\n\t\"tanker\": 24379,\n\t\"hybrid\": 23517,\n\t\"arose\": 5999,\n\t\"goddesses\": 20291,\n\t\"California\": 3459,\n\t\"willing\": 6894,\n\t\"worth\": 8390,\n\t\"flour\": 17846,\n\t\"appear\": 1369,\n\t\"we'd\": 6399,\n\t\"benefits\": 8513,\n\t\"dredge\": 30419,\n\t\"Turnpike\": 17435,\n\t\"detention\": 20619,\n\t\"Warm\": 17075,\n\t\"Mc\": 22496,\n\t\"serenely\": 24620,\n\t\"project’s\": 1087,\n\t\"graphic\": 2956,\n\t\"Reservation\": 26441,\n\t\"Traveller\": 27020,\n\t\"Observatory\": 14632,\n\t\"yyone\": 11486,\n\t\"Turbine\": 21700,\n\t\"violet\": 32169,\n\t\"Chaman\": 19694,\n\t\"Auditorium\": 14588,\n\t\"Humpty\": 8676,\n\t\"Lauralee\": 7529,\n\t\"dear\": 9092,\n\t\"tenth\": 11340,\n\t\"3:30\": 21011,\n\t\"impeccable\": 28219,\n\t\"younger\": 3160,\n\t\"mothy\": 31646,\n\t\"published\": 1348,\n\t\"strides\": 30494,\n\t\"kale\": 27772,\n\t\"http://www.radianz.com\": 22016,\n\t\"Accomodating\": 28278,\n\t\"ripe\": 13438,\n\t\"stooping\": 32250,\n\t\"Here's\": 6920,\n\t\"embowered\": 9392,\n\t\"grain\": 14621,\n\t\"Rusk\": 19094,\n\t\"flank\": 19571,\n\t\"Attached\": 21302,\n\t\"Lara\": 22398,\n\t\"Solis\": 23753,\n\t\"ABSOLUTELY\": 24941,\n\t\"refunds\": 23338,\n\t\"condemns\": 6594,\n\t\"congressman\": 14771,\n\t\"pulled\": 5262,\n\t\"ruby\": 9323,\n\t\"inequities\": 24685,\n\t\"Caleb\": 13745,\n\t\"appreciates\": 13921,\n\t\"Endowment\": 24511,\n\t\"interface\": 2311,\n\t\"galaxies\": 14626,\n\t\"Judge\": 7409,\n\t\"repairs\": 28138,\n\t\"appropriations\": 20800,\n\t\"licenses\": 10959,\n\t\"cookies\": 29508,\n\t\"Andamans\": 19517,\n\t\"Tana\": 21988,\n\t\"impulse\": 5141,\n\t\"suprematist\": 4594,\n\t\"anemones\": 10606,\n\t\"marvellous\": 31584,\n\t\"intranet\": 22880,\n\t\"evidentary\": 27468,\n\t\"Tozzini\": 23194,\n\t\"kinetic\": 3317,\n\t\"mh\": 15890,\n\t\"Dartmouth\": 27321,\n\t\"IMPLICATION\": 23350,\n\t\"ballad\": 25634,\n\t\"visible\": 9985,\n\t\"Connections\": 22972,\n\t\"hostess\": 29083,\n\t\"Rap\": 5274,\n\t\"quickly\": 609,\n\t\"islands'\": 19555,\n\t\"richly\": 30267,\n\t\"english\": 20770,\n\t\"http://www.sonic.net/~fsjob/TragiCore-TheCivetCat.mp3\": 24894,\n\t\"significance\": 186,\n\t\"hunkering\": 15737,\n\t\"buffet\": 16676,\n\t\"Delainey@ECT\": 21336,\n\t\"Nida\": 5548,\n\t\"mathematics\": 3116,\n\t\"Sure\": 7074,\n\t\"Desk\": 22567,\n\t\"eighteen\": 6012,\n\t\"proprietary\": 10801,\n\t\"navel\": 9775,\n\t\"genetically\": 14828,\n\t\"contradicts\": 7453,\n\t\"patently\": 20318,\n\t\"Cat\": 24855,\n\t\"ecosystem\": 7789,\n\t\"freshly\": 28715,\n\t\"discouraging\": 759,\n\t\"capers\": 31298,\n\t\"Dinner\": 29796,\n\t\"punishments\": 32909,\n\t\"referred\": 16882,\n\t\"Sherrar\": 21876,\n\t\"61,000,000,000\": 24366,\n\t\"crunching\": 32143,\n\t\"psycholical\": 27737,\n\t\"favourites\": 32261,\n\t\"UK\": 105,\n\t\"accord\": 19051,\n\t\"imperceptible\": 30929,\n\t\"financial\": 1463,\n\t\"Local\": 12932,\n\t\"Ikhbariya\": 12263,\n\t\"vintaged\": 23282,\n\t\"http://www.bumrungrad.com/en/patient-services/clinics-and-centers/plastic-surgery-thailand-bangkok/breast-augmentation-ba\": 26645,\n\t\"elevated\": 29242,\n\t\"Power\": 12429,\n\t\"suppressed\": 14009,\n\t\"carries\": 10450,\n\t\"disrupting\": 19690,\n\t\"hilltop\": 32817,\n\t\"phases\": 18234,\n\t\"cools\": 26409,\n\t\"initial\": 1917,\n\t\"measurable\": 13863,\n\t\"googlenut\": 24468,\n\t\"comp.sources.unix\": 24327,\n\t\"violent\": 9894,\n\t\"results\": 676,\n\t\"themed\": 10477,\n\t\"Brooms\": 18290,\n\t\"Veterans\": 19243,\n\t\"SAM\": 23250,\n\t\"48\": 7899,\n\t\"202.582.1234\": 22806,\n\t\"successors\": 20468,\n\t\"374\": 5132,\n\t\"Ross\": 14,\n\t\"EBIC\": 21137,\n\t\"History\": 3420,\n\t\"CoM\": 2743,\n\t\"fide\": 8111,\n\t\"Isoza\": 31737,\n\t\"viewing\": 54,\n\t\"Way\": 6749,\n\t\"Brick\": 28194,\n\t\"Nella\": 22350,\n\t\"beneficial\": 1975,\n\t\"ADMISSION\": 24540,\n\t\"granadilla\": 31772,\n\t\"postmaster\": 19833,\n\t\"]\": 376,\n\t\"Teen\": 4095,\n\t\"eggshells\": 11085,\n\t\"cataloging\": 6900,\n\t\"high-octave\": 32623,\n\t\"technical\": 1824,\n\t\"Dec.\": 18541,\n\t\"Apostle\": 29048,\n\t\"mills\": 16740,\n\t\"swabs\": 9532,\n\t\"committing\": 18636,\n\t\"lies\": 11517,\n\t\"litter\": 26274,\n\t\"JBennett@GMSSR.com\": 23261,\n\t\"Degu\": 27434,\n\t\"chemically\": 10630,\n\t\"EPI\": 21129,\n\t\"divinity\": 25642,\n\t\"mind\": 4309,\n\t\"semifreddo\": 29998,\n\t\"crypto\": 13737,\n\t\"require\": 936,\n\t\"Debaathification\": 18543,\n\t\"Kioka\": 24406,\n\t\"winks\": 14857,\n\t\"expression\": 7443,\n\t\"immersed\": 8453,\n\t\"Straits\": 12211,\n\t\"queues\": 12521,\n\t\"mercury\": 2095,\n\t\"trenchant\": 31240,\n\t\"troops\": 4374,\n\t\"transvestite\": 32422,\n\t\"Weasleys\": 32162,\n\t\"mishap\": 30382,\n\t\"poverty\": 7898,\n\t\"spotted\": 10219,\n\t\"hypothesized\": 1905,\n\t\"believes\": 12160,\n\t\"fabric\": 15577,\n\t\"Inspired\": 8342,\n\t\"plunder\": 19539,\n\t\"Tigers'\": 19063,\n\t\"brilliant\": 9173,\n\t\"cognitively\": 20147,\n\t\"practitioners\": 3017,\n\t\"shields\": 20497,\n\t\"approx.\": 1038,\n\t\"one’s\": 13039,\n\t\"POLYGAMY\": 19977,\n\t\"wipe\": 8826,\n\t\"influenza\": 13824,\n\t\"lip\": 9744,\n\t\"respecting\": 14274,\n\t\"Nalapat\": 19092,\n\t\"Shona\": 21328,\n\t\"bulletin\": 20602,\n\t\"semi-pelagianism\": 6583,\n\t\"foreigner's\": 26440,\n\t\"indefinable\": 31243,\n\t\"telling\": 6324,\n\t\"runs\": 4787,\n\t\"Norwegians\": 19046,\n\t\"extremist\": 13902,\n\t\"Andy\": 13264,\n\t\"Ozone\": 13497,\n\t\"unfolding\": 14616,\n\t\"bitterness\": 14418,\n\t\"Kristof\": 20890,\n\t\"Subscription\": 22542,\n\t\"Called\": 7056,\n\t\"remembered\": 3115,\n\t\"ex-pat\": 27563,\n\t\"grey-bearded\": 32916,\n\t\"HCC\": 28315,\n\t\"Titman\": 22669,\n\t\"granddaughters\": 21753,\n\t\"Otto\": 11449,\n\t\"veils\": 20558,\n\t\"beam\": 15579,\n\t\"Diligence\": 25264,\n\t\"sanctioned\": 20612,\n\t\"studied\": 1881,\n\t\"Team\": 4851,\n\t\"ETA_revision0307.doc\": 22565,\n\t\"raids\": 32254,\n\t\"Atal\": 19146,\n\t\"watched\": 9282,\n\t\"EGM\": 23450,\n\t\"43228\": 24964,\n\t\"company's\": 25645,\n\t\"string\": 4101,\n\t\"Glass\": 28368,\n\t\"Filled\": 28584,\n\t\"L.P\": 25718,\n\t\"flood\": 11532,\n\t\"Breonna\": 14140,\n\t\"Ok\": 19182,\n\t\"contingent\": 1378,\n\t\"woke\": 7020,\n\t\"Newman\": 10249,\n\t\"abolition\": 14691,\n\t\"1800s\": 16974,\n\t\"morning\": 4020,\n\t\"classmates\": 20112,\n\t\"computing\": 458,\n\t\"immigrants\": 16511,\n\t\"Linda's\": 25651,\n\t\"seventy\": 6166,\n\t\"Conservative\": 25844,\n\t\"balloting\": 19254,\n\t\"Insurance\": 23769,\n\t\"Rufinus\": 5108,\n\t\"untreated\": 27067,\n\t\"insurgency\": 12717,\n\t\"Taurus\": 25262,\n\t\"joint\": 5886,\n\t\"Eddie\": 12379,\n\t\"Troubles\": 24063,\n\t\"olfactory\": 15825,\n\t\"Qapu\": 16823,\n\t\"Weight\": 24879,\n\t\"paranormal\": 5790,\n\t\"drew\": 4576,\n\t\"coed\": 11760,\n\t\"TRAVEL\": 27029,\n\t\"guests\": 5312,\n\t\"hissy\": 20337,\n\t\"Holga\": 26533,\n\t\"irony\": 9667,\n\t\"plumber\": 27311,\n\t\"old\": 1653,\n\t\"Meira\": 22331,\n\t\"bereaved\": 20462,\n\t\"Lady\": 5375,\n\t\"rumor\": 20587,\n\t\"Flowers\": 17751,\n\t\"IATA\": 16761,\n\t\"mid-2003\": 26079,\n\t\"Radison\": 29940,\n\t\"listings\": 639,\n\t\"http://haas.berkeley.edu/~borenste\": 22457,\n\t\"savages\": 15471,\n\t\"passes\": 11568,\n\t\"thirty-five\": 30230,\n\t\"Vintage\": 28424,\n\t\"bursts\": 8597,\n\t\"underneath\": 6494,\n\t\"admin\": 16466,\n\t\"driving\": 1859,\n\t\"Glowstick\": 18007,\n\t\"Labat\": 19454,\n\t\"disperse\": 20604,\n\t\"definately\": 20256,\n\t\"Dignitaries\": 20461,\n\t\"Chess\": 25456,\n\t\"preference\": 1704,\n\t\"possibly\": 5117,\n\t\"Bourg\": 4014,\n\t\"tenpound\": 32312,\n\t\"swallowed\": 9883,\n\t\"Deutsche\": 22052,\n\t\"civilize\": 31049,\n\t\"rid\": 9892,\n\t\"ego\": 25648,\n\t\"Udorn\": 19200,\n\t\"PX\": 11476,\n\t\"Yorkshire\": 17518,\n\t\"bumped\": 13772,\n\t\"CAMERA\": 26205,\n\t\"selections\": 28632,\n\t\"administered\": 6013,\n\t\"cells\": 18476,\n\t\"adorable\": 27785,\n\t\"haggle\": 32263,\n\t\"FANTASTIC\": 28648,\n\t\"re-code\": 8310,\n\t\"Questions\": 13054,\n\t\"BNA\": 29235,\n\t\"rotorua\": 26974,\n\t\"It\": 280,\n\t\"L'instant\": 16690,\n\t\"partly\": 10966,\n\t\"astonishment\": 32904,\n\t\"Mormon\": 20241,\n\t\"citadel\": 14302,\n\t\"employ\": 7186,\n\t\"bioweaponeer\": 20698,\n\t\"amend\": 22638,\n\t\"Bernoulli's\": 3122,\n\t\"LWs\": 22107,\n\t\"静\": 14903,\n\t\"delete\": 21497,\n\t\"yawl\": 30874,\n\t\"transcendent\": 20228,\n\t\"Standards\": 31439,\n\t\"infamous\": 3934,\n\t\"sergeant\": 20878,\n\t\"Siete\": 6321,\n\t\"40.\": 14971,\n\t\"pureed\": 17889,\n\t\"deworming\": 27460,\n\t\"Channing\": 22448,\n\t\"discusses\": 10245,\n\t\"equation\": 2686,\n\t\"techniques\": 145,\n\t\"Legato\": 11281,\n\t\"sculptures\": 15343,\n\t\"Wilson's\": 19428,\n\t\"Peterson\": 9329,\n\t\"defects\": 23936,\n\t\"guts\": 27697,\n\t\"9000\": 29370,\n\t\"MoI\": 18477,\n\t\"umbrella\": 27823,\n\t\"Times\": 5245,\n\t\"slept\": 9802,\n\t\"aware\": 6436,\n\t\"walkin\": 27605,\n\t\"misinformation\": 29186,\n\t\"worshipers\": 30626,\n\t\"blend\": 16239,\n\t\"celebrations\": 12919,\n\t\"THRIVE\": 28665,\n\t\"straw\": 3289,\n\t\"raining\": 15862,\n\t\"fact\": 1222,\n\t\"lyrics\": 24895,\n\t\"Foundations\": 700,\n\t\"Poterin\": 3898,\n\t\"Awarding\": 14492,\n\t\"opponent\": 3954,\n\t\"abusers\": 20027,\n\t\"understood\": 296,\n\t\"SALOON\": 24539,\n\t\"talented\": 8294,\n\t\"Persia\": 16734,\n\t\"meanwhile\": 25100,\n\t\"establishes\": 811,\n\t\"fashionable\": 32891,\n\t\"Vossen\": 2490,\n\t\"overdue\": 20939,\n\t\"Rittenhouse\": 29941,\n\t\"Special\": 7266,\n\t\"flag-pole\": 31103,\n\t\"(collapsible|expandable)\": 30095,\n\t\"bathroom\": 9716,\n\t\"loot\": 18589,\n\t\"Louisiana\": 19444,\n\t\"Cute\": 27989,\n\t\"d'\": 26605,\n\t\"East\": 2722,\n\t\"ADOX\": 30040,\n\t\"Gehenna\": 30625,\n\t\"instead\": 487,\n\t\"Importing\": 30188,\n\t\"treated\": 4645,\n\t\"unmarried\": 5639,\n\t\"flustered\": 19677,\n\t\"senior\": 4835,\n\t\"balanced\": 10537,\n\t\"hates\": 13601,\n\t\"1.800.233.1234\": 22807,\n\t\"Dick\": 14446,\n\t\"1877\": 4420,\n\t\"subsequent\": 3806,\n\t\"rolls\": 29588,\n\t\"defendant\": 14681,\n\t\"No-6\": 31357,\n\t\"commerce\": 14751,\n\t\"AN\": 11508,\n\t\"civility\": 10792,\n\t\"inertia\": 2879,\n\t\"Central\": 8240,\n\t\"THOUSANDS\": 24910,\n\t\">>\": 21064,\n\t\"Berlin\": 5531,\n\t\"Grilled\": 29352,\n\t\"diplomatic\": 5607,\n\t\"Travis\": 14762,\n\t\"easiest\": 15027,\n\t\"associates\": 27768,\n\t\"Brushing\": 30821,\n\t\"sesame\": 15919,\n\t\"3143C\": 21699,\n\t\"drop\": 13685,\n\t\"Fred\": 22226,\n\t\"Louisianna\": 19436,\n\t\"Victoria\": 10984,\n\t\"resulting\": 2363,\n\t\"shan't\": 32657,\n\t\"forcing\": 30256,\n\t\"conventional\": 1788,\n\t\"Rhinegold\": 32613,\n\t\"design-time\": 30171,\n\t\"anti-trust\": 23869,\n\t\"fall\": 3079,\n\t\"Halal\": 27320,\n\t\"Europe’s\": 15468,\n\t\"86M\": 21107,\n\t\"puzzled\": 9953,\n\t\"hearts\": 14026,\n\t\"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\": 28806,\n\t\"Bombs\": 30866,\n\t\"Maps\": 17102,\n\t\"10030\": 22899,\n\t\"Croall's\": 23173,\n\t\"beaches\": 9430,\n\t\"Arnold\": 22535,\n\t\"nuts\": 11475,\n\t\"century\": 714,\n\t\"opposite\": 1346,\n\t\"Siu-lai\": 12478,\n\t\"naturally\": 1871,\n\t\"shrimp\": 25170,\n\t\"prevailing\": 7192,\n\t\"MSDN\": 30176,\n\t\"Ebert\": 2533,\n\t\"baffled\": 13598,\n\t\"ranges\": 2024,\n\t\"vegetarians\": 18360,\n\t\"MVB\": 27745,\n\t\"Tate\": 14449,\n\t\"cruises\": 2559,\n\t\"a.m\": 22865,\n\t\"Herat\": 12103,\n\t\"much\": 1304,\n\t\"motherland\": 14087,\n\t\"Appellants\": 7586,\n\t\"independents\": 7191,\n\t\"fend\": 29745,\n\t\"mountain\": 11454,\n\t\"roaring\": 32230,\n\t\"danced\": 24095,\n\t\"800\": 5217,\n\t\"Gout\": 24057,\n\t\"grill\": 27313,\n\t\"rugger-square\": 32443,\n\t\"Wayne\": 13640,\n\t\"slap\": 7101,\n\t\"America\": 561,\n\t\"sits\": 8197,\n\t\"Reporters\": 22821,\n\t\"influential\": 1408,\n\t\"couldnt\": 27600,\n\t\"Sonoran\": 17040,\n\t\"erected\": 4073,\n\t\"favourite\": 10923,\n\t\"HTML\": 12789,\n\t\"rentals\": 11639,\n\t\"bounds\": 17488,\n\t\"Behesht\": 16837,\n\t\"wheelchair\": 10855,\n\t\"Coase\": 726,\n\t\"enjoy\": 1226,\n\t\"doctors\": 1265,\n\t\"scenes\": 9365,\n\t\"phobic\": 13574,\n\t\"abstraction\": 19791,\n\t\"crowd\": 12282,\n\t\"Caramel\": 15891,\n\t\"jugular\": 24135,\n\t\"erupted\": 8638,\n\t\"Sunak's\": 12969,\n\t\"Emergencies\": 18664,\n\t\"Mat\": 18077,\n\t\"grotesque\": 9420,\n\t\"phlox\": 25119,\n\t\"Herpes\": 23967,\n\t\"catapult\": 9286,\n\t\"Miyako\": 4680,\n\t\"SEA\": 26949,\n\t\"Rivers\": 14724,\n\t\"EASTHAMPTON\": 10104,\n\t\"Hatfill\": 20709,\n\t\"foul\": 13079,\n\t\"tend\": 11130,\n\t\"realised\": 3318,\n\t\"trail\": 8611,\n\t\"Ann\": 12468,\n\t\"Ansems\": 24957,\n\t\"hormones\": 15717,\n\t\"gourmet\": 16616,\n\t\"#valuesbased\": 8008,\n\t\"prising\": 9085,\n\t\"contemplating\": 15007,\n\t\"Shinza's\": 31898,\n\t\"snug\": 17672,\n\t\"offspring\": 26327,\n\t\"hats\": 28659,\n\t\"normal\": 2199,\n\t\"confess\": 31483,\n\t\"Miniseries\": 4171,\n\t\"Bothell\": 23178,\n\t\"co-creators\": 13989,\n\t\"drafts\": 11112,\n\t\"gearbox\": 29341,\n\t\"jeopardised\": 13041,\n\t\"irrigate\": 15347,\n\t\"Terrace\": 16574,\n\t\"Waziristan\": 19700,\n\t\"edit\": 3432,\n\t\"he's\": 6433,\n\t\"Palm\": 5384,\n\t\"visualizations\": 24596,\n\t\"pelt\": 32563,\n\t\"Fossum\": 22759,\n\t\"Rent\": 22074,\n\t\"Cómbita\": 1566,\n\t\"glamour\": 16948,\n\t\"Historian\": 25384,\n\t\"ice-creams\": 32098,\n\t\"stumps\": 10217,\n\t\"elephants\": 11202,\n\t\"titled\": 5756,\n\t\"meaningless\": 30364,\n\t\"160\": 17880,\n\t\"limp\": 24622,\n\t\"Voltage\": 13696,\n\t\"Diego's\": 23868,\n\t\"underfoot\": 31707,\n\t\"drives\": 12295,\n\t\"Pay\": 7819,\n\t\"Hz\": 27212,\n\t\"apparition\": 32468,\n\t\"20,000\": 11565,\n\t\"renegade\": 25027,\n\t\"Chanukah\": 23803,\n\t\"verbal\": 7157,\n\t\"Parks\": 6156,\n\t\"battles\": 11237,\n\t\"doing\": 4009,\n\t\"culturally\": 14932,\n\t\"lone\": 20608,\n\t\"Parts\": 28468,\n\t\"copying\": 18112,\n\t\"sensitive\": 10716,\n\t\"cure\": 24038,\n\t\"cc\": 21918,\n\t\"Reggie\": 21859,\n\t\"Estimated\": 2153,\n\t\"swinging\": 6954,\n\t\"Lyons\": 4707,\n\t\"clues\": 23717,\n\t\"pre-organised\": 16288,\n\t\"Transportation\": 21458,\n\t\"Bloody\": 29250,\n\t\"country’s\": 921,\n\t\"Juste\": 25558,\n\t\"rewriting\": 30189,\n\t\"sensing\": 2593,\n\t\"Lifestyle\": 12753,\n\t\"asked\": 3189,\n\t\"limitless\": 11222,\n\t\"quarterly\": 19637,\n\t\"defect\": 21803,\n\t\"downtown\": 12045,\n\t\"whim\": 23332,\n\t\"graduate\": 6364,\n\t\"manages\": 23779,\n\t\"crapload\": 27093,\n\t\"tiers\": 31815,\n\t\"frock\": 32617,\n\t\"axial\": 2794,\n\t\"01:58\": 22992,\n\t\"riiight\": 30026,\n\t\"on\": 45,\n\t\"Equator\": 31053,\n\t\"overalls\": 32456,\n\t\"scooping\": 27455,\n\t\"Area\": 17050,\n\t\"medieval\": 13595,\n\t\"Hasid\": 30540,\n\t\"re-enactments\": 16576,\n\t\"improperly\": 2180,\n\t\"ottle-\": 6863,\n\t\"languid\": 31112,\n\t\"dignity\": 6581,\n\t\"chimichangas\": 29162,\n\t\"dragging\": 22070,\n\t\"water\": 2184,\n\t\"weed\": 31610,\n\t\"designed\": 3333,\n\t\"looters\": 24426,\n\t\"cooperation\": 803,\n\t\"yams\": 8582,\n\t\"HMC\": 12958,\n\t\"applicant\": 22983,\n\t\"JUNO\": 28807,\n\t\"rinsed\": 27856,\n\t\"fixtures\": 28421,\n\t\"H-0209/99\": 31518,\n\t\"Phoebe\": 23234,\n\t\"purported\": 7603,\n\t\"Westphal\": 11297,\n\t\"lieu\": 27938,\n\t\"M.S.\": 19289,\n\t\"detain\": 30229,\n\t\"l/c\": 23229,\n\t\"NORTH\": 24645,\n\t\"commandant\": 10440,\n\t\"Hatzidakis\": 31478,\n\t\"liberalisation\": 31548,\n\t\"NIGHT\": 11888,\n\t\"assigning\": 13816,\n\t\"sacrifice\": 10807,\n\t\"spokesman\": 12150,\n\t\"spurt\": 26983,\n\t\"laden\": 8938,\n\t\"care\": 1264,\n\t\"nasa\": 24497,\n\t\"seductive\": 30261,\n\t\"01/25/2001\": 23385,\n\t\"arch-murderer\": 20506,\n\t\"destinations\": 16707,\n\t\"DISPOSAL\": 29227,\n\t\"¢\": 11765,\n\t\"&\": 265,\n\t\"Donatus\": 5024,\n\t\"Blown\": 12290,\n\t\"cross-linguistic\": 1943,\n\t\"Harp\": 20757,\n\t\"Vagabond\": 17284,\n\t\"thinner\": 2838,\n\t\"judgement\": 13248,\n\t\"tomatoes\": 15349,\n\t\"yrs\": 26361,\n\t\"Hair\": 28212,\n\t\"Basel\": 3145,\n\t\"football\": 6189,\n\t\"many\": 290,\n\t\"Collections\": 13296,\n\t\"galleryfurniture.com\": 21195,\n\t\"Dorsey@ENRON_DEVELOPMENT\": 22967,\n\t\"O&M\": 22684,\n\t\"WAIT\": 27382,\n\t\"chased\": 11059,\n\t\"quotes\": 5322,\n\t\"peaceful\": 6908,\n\t\"350,000\": 25762,\n\t\"adequate\": 918,\n\t\"exchanges\": 2308,\n\t\"distaste\": 31762,\n\t\"Notional\": 21640,\n\t\"prudence\": 31205,\n\t\"wrap\": 7768,\n\t\"68,500\": 15687,\n\t\"bon\": 7753,\n\t\"London's\": 4251,\n\t\"unvocal\": 9435,\n\t\"Terme\": 11254,\n\t\"Interplanetary\": 11352,\n\t\"Nina\": 25104,\n\t\"Kobeys\": 28078,\n\t\"merging\": 24626,\n\t\"Leadership\": 10841,\n\t\"conquered\": 25387,\n\t\"aesthetic\": 85,\n\t\"stints\": 17991,\n\t\"enhanced\": 436,\n\t\"Behind\": 24005,\n\t\"worm\": 9027,\n\t\"favorites\": 21156,\n\t\"Errors\": 31336,\n\t\"Beschta\": 25050,\n\t\"Zuckerberg\": 12196,\n\t\"blinking\": 9948,\n\t\"perfectionist\": 29281,\n\t\"22s\": 24298,\n\t\"colored\": 10144,\n\t\"wildflowers\": 26193,\n\t\"Sooner\": 11193,\n\t\"Plus\": 16379,\n\t\"cpys\": 22550,\n\t\"broadline\": 8127,\n\t\"Assistance\": 27021,\n\t\"tricky\": 28504,\n\t\"Infinite\": 24635,\n\t\"dissatisfied\": 28662,\n\t\"MicroMega\": 13246,\n\t\"code\": 13961,\n\t\"Impossible\": 27220,\n\t\"hostesses\": 30555,\n\t\"rats\": 26256,\n\t\"Religion\": 12754,\n\t\"Poulenc\": 31620,\n\t\"harness\": 18195,\n\t\"presentation\": 21016,\n\t\"predicts\": 8522,\n\t\"severely\": 16282,\n\t\"effectively\": 8309,\n\t\"Laity\": 7831,\n\t\"compliant\": 30036,\n\t\"stubble\": 31689,\n\t\"1992\": 5379,\n\t\"fatal\": 3884,\n\t\"Dumas\": 3956,\n\t\"HARRIS\": 14304,\n\t\"%\": 2150,\n\t\"abstract\": 1078,\n\t\"Penn\": 15128,\n\t\"adolescents\": 18681,\n\t\"Silver\": 4852,\n\t\"illnesses\": 5130,\n\t\"fisherman\": 12151,\n\t\"those\": 660,\n\t\"stand\": 8875,\n\t\"Pacific\": 10505,\n\t\"volley\": 13106,\n\t\"assumes\": 14416,\n\t\"Cut\": 17763,\n\t\"uncongenial\": 31325,\n\t\"fuzzy\": 31606,\n\t\"05/30/2001\": 23507,\n\t\"burdens\": 14055,\n\t\"Qaim\": 18472,\n\t\"tsetse\": 31714,\n\t\"means\": 1244,\n\t\"Giovanni\": 5147,\n\t\"Cheuk\": 12413,\n\t\"pandemic\": 13813,\n\t\"1000\": 1042,\n\t\"Acphillips\": 13271,\n\t\"viruses\": 13803,\n\t\"-ll\": 28232,\n\t\"http://www.equinecaninefeline.com/catalog/savic-freddy-cage-free-delivery-p-6750.html\": 26872,\n\t\"certainty\": 17614,\n\t\"Insofar\": 1306,\n\t\"Woody\": 4103,\n\t\"Biblical\": 14374,\n\t\"******************************************************************\": 21463,\n\t\"Doves\": 26592,\n\t\"Borenstein\": 22442,\n\t\"I.B.\": 18966,\n\t\"Bodhi\": 29629,\n\t\"Balance\": 18139,\n\t\"workforce\": 420,\n\t\"interviews\": 1628,\n\t\"who\": 1229,\n\t\"Instruments\": 2407,\n\t\"clubhouse\": 28593,\n\t\"restoration\": 4325,\n\t\"observation\": 1626,\n\t\"RecentChangesCamp\": 10748,\n\t\"FTU\": 12485,\n\t\"celebrating\": 32601,\n\t\"Broadway\": 11167,\n\t\"pivotal\": 1856,\n\t\"Oldham\": 5427,\n\t\"ushering\": 8043,\n\t\"Director-General\": 31907,\n\t\"ROS\": 10295,\n\t\"Insurgency\": 12688,\n\t\"indispensable\": 15174,\n\t\"judges\": 24720,\n\t\"bags\": 18442,\n\t\"also\": 643,\n\t\"grandmother's\": 32451,\n\t\"accelerate\": 11396,\n\t\"BAD\": 28181,\n\t\"electric\": 13422,\n\t\"brigadier\": 4402,\n\t\"fixture\": 27170,\n\t\"textures\": 15849,\n\t\"Władysław\": 16912,\n\t\"Chronicle\": 5099,\n\t\"gnocchi\": 28892,\n\t\"someday\": 13797,\n\t\"fore-and-aft\": 30513,\n\t\"Soup\": 7433,\n\t\"wharf\": 16302,\n\t\"Degus\": 27428,\n\t\"YPF\": 893,\n\t\"coz\": 26788,\n\t\"toolbar\": 30141,\n\t\"downstream\": 22986,\n\t\"cd\": 21270,\n\t\"Erith\": 30948,\n\t\"Fear\": 24073,\n\t\"swallows\": 25137,\n\t\"Over-rated\": 28523,\n\t\"Radio's\": 19806,\n\t\"Ass't.\": 21393,\n\t\"shard\": 30337,\n\t\"exercised\": 7307,\n\t\"killings\": 14125,\n\t\"dissolves\": 18456,\n\t\"events\": 3041,\n\t\"manipulate\": 20737,\n\t\"Zone\": 28166,\n\t\"mid-day\": 20457,\n\t\"wasent\": 28354,\n\t\"MISSISSIPPI\": 28571,\n\t\"wear\": 6465,\n\t\"11:30\": 21282,\n\t\"reminisced\": 32924,\n\t\"can-teen\": 9192,\n\t\"Hebrews\": 5172,\n\t\"annex\": 21605,\n\t\"symptoms\": 15799,\n\t\"0.10\": 23468,\n\t\"fed\": 27340,\n\t\"Furniture\": 29884,\n\t\"asap\": 22748,\n\t\"LLMs\": 13700,\n\t\"honour\": 4072,\n\t\"thrifty\": 27890,\n\t\"audacity\": 29226,\n\t\"table\": 6204,\n\t\"volleyball\": 18347,\n\t\"packs\": 25039,\n\t\"residing\": 29772,\n\t\"buildings\": 4506,\n\t\"Considering\": 1581,\n\t\"Crowleyan\": 20201,\n\t\"EL\": 25365,\n\t\"Example\": 10292,\n\t\"loves\": 24721,\n\t\"retaliate\": 25812,\n\t\"broader\": 1307,\n\t\"flops\": 17373,\n\t\"Carlo\": 13356,\n\t\"Yeah\": 6069,\n\t\"politest\": 30414,\n\t\"Titanic\": 25580,\n\t\"expectedly\": 19262,\n\t\"finally\": 1887,\n\t\"styles\": 6126,\n\t\"obeying\": 20030,\n\t\"accept\": 5557,\n\t\"-------------------------------------------------------------\": 25333,\n\t\"Reporting\": 14559,\n\t\"correspondence\": 5166,\n\t\"wagged\": 31190,\n\t\"genealogy\": 20242,\n\t\"rivalries\": 17645,\n\t\"http://www.ibiblio.org/expo/soviet.exhibit/chernobyl.html\": 18693,\n\t\"Sheepdog\": 8804,\n\t\"Goode\": 4078,\n\t\"Jamaican\": 29017,\n\t\"be-all\": 32849,\n\t\"grasped\": 27944,\n\t\"interact\": 8380,\n\t\"los\": 19468,\n\t\"assassin\": 25625,\n\t\"darkness\": 5069,\n\t\"11030\": 20273,\n\t\"Kar\": 28702,\n\t\"rewarded\": 14184,\n\t\"Compact\": 2092,\n\t\"developed\": 1031,\n\t\"participating\": 1629,\n\t\"sudden\": 10134,\n\t\"shallac\": 28289,\n\t\"cages\": 2851,\n\t\"high\": 587,\n\t\"acknowledge\": 3704,\n\t\"Rib\": 26562,\n\t\"editorship\": 4444,\n\t\"Alvin\": 12424,\n\t\"Lockhart's\": 32225,\n\t\"close\": 3201,\n\t\"Options\": 22695,\n\t\"episodes\": 2946,\n\t\"precipitation\": 17411,\n\t\"Schonwetter\": 14476,\n\t\"analytical\": 11161,\n\t\"Services.DOC\": 23103,\n\t\"through\": 203,\n\t\"businessmen's\": 31904,\n\t\"precaution\": 25564,\n\t\"Jintao\": 19173,\n\t\"repair\": 1767,\n\t\"mini\": 26684,\n\t\"esp\": 28597,\n\t\"Toph\": 8823,\n\t\"complexion\": 30913,\n\t\"http://youtube.com/watch?v=d46_ctqDmI4\": 20153,\n\t\"Nadu\": 18987,\n\t\"1783\": 3592,\n\t\"vulnerable\": 8307,\n\t\"Expectations\": 18065,\n\t\"pullers\": 26378,\n\t\"thinking\": 374,\n\t\"USS\": 25803,\n\t\"tourist\": 11581,\n\t\"indicating\": 20637,\n\t\"Musharraf\": 18748,\n\t\"Niagara\": 22299,\n\t\"Food\": 8047,\n\t\"Weiner\": 10504,\n\t\"descent\": 5429,\n\t\"UPI's\": 25061,\n\t\"http://www.UnitaryExecutive.net\": 24750,\n\t\"martial\": 8961,\n\t\"translates\": 12217,\n\t\"non-locals\": 16403,\n\t\"Nov\": 23833,\n\t\"Says\": 26880,\n\t\"cutlery\": 27331,\n\t\"PARTY\": 11885,\n\t\"manliness\": 25664,\n\t\"Mills\": 11125,\n\t\"http://www.InternetchurchOfChrist.org\": 24753,\n\t\"IRR\": 16766,\n\t\"ties\": 15382,\n\t\"lengthens\": 30156,\n\t\"closing\": 7351,\n\t\"splattered\": 9680,\n\t\"precipitous\": 8191,\n\t\"secured\": 29737,\n\t\"vessels\": 19591,\n\t\"LIVE\": 26767,\n\t\"wading\": 27941,\n\t\"decor\": 26555,\n\t\"daughter's\": 31588,\n\t\"exfoliating\": 9740,\n\t\"67.70\": 12041,\n\t\"pair\": 5844,\n\t\"Razak\": 12173,\n\t\"extremity\": 31143,\n\t\"she\": 3969,\n\t\"J.doc\": 22845,\n\t\"Keck\": 20342,\n\t\"Stanley\": 4169,\n\t\"Exporting\": 30111,\n\t\"837\": 14870,\n\t\"co-founded\": 4526,\n\t\"chemicals\": 2110,\n\t\"Dakota\": 15998,\n\t\"liturgical\": 24691,\n\t\"coated\": 8657,\n\t\"Pacquiao\": 26130,\n\t\"typologies\": 1192,\n\t\"decipher\": 30444,\n\t\"Marches\": 27190,\n\t\"relations\": 3713,\n\t\"stadium\": 11080,\n\t\"hungry\": 13783,\n\t\"Ofra\": 16025,\n\t\"guest\": 5832,\n\t\"duct\": 28827,\n\t\"co-operate\": 24388,\n\t\"Hood\": 25052,\n\t\"Ingram\": 12698,\n\t\"Panel\": 20591,\n\t\"enforcement\": 909,\n\t\"dioxide\": 13486,\n\t\"lifespan\": 8528,\n\t\"Marcelo\": 22330,\n\t\"torch\": 14060,\n\t\"jellies\": 15954,\n\t\"emergency\": 6751,\n\t\"accidentally\": 7356,\n\t\"tenants\": 29106,\n\t\"extension\": 1352,\n\t\"cafeteria\": 29019,\n\t\"Steps\": 17592,\n\t\"Victor\": 19905,\n\t\"tests\": 10626,\n\t\"creditor\": 22584,\n\t\"summarily\": 25440,\n\t\"Esp.\": 28486,\n\t\"social\": 397,\n\t\"ocnversation\": 21997,\n\t\"zeros\": 24161,\n\t\"two-day\": 30410,\n\t\"Compaq.com\": 21780,\n\t\"Operator\": 2306,\n\t\"née\": 5417,\n\t\"irrational\": 13572,\n\t\"CI\": 13967,\n\t\"disgust\": 9875,\n\t\"fortress\": 17526,\n\t\"ICC\": 23563,\n\t\"luminescence\": 10634,\n\t\"Petersburg\": 3207,\n\t\"DAUGHTER\": 29686,\n\t\"30\": 2689,\n\t\"Figure\": 1863,\n\t\"donned\": 12543,\n\t\"franchise\": 23245,\n\t\"Friday\": 5819,\n\t\"confessor\": 4969,\n\t\"tactical\": 3083,\n\t\"drivers\": 16719,\n\t\"Eight\": 6298,\n\t\"Księży\": 16877,\n\t\"Turner\": 17445,\n\t\"normall\": 26311,\n\t\"quiet\": 5968,\n\t\"12.45\": 22270,\n\t\"violators\": 806,\n\t\"prerogative\": 6599,\n\t\"liquid\": 6253,\n\t\"animation\": 13633,\n\t\"accepts\": 15649,\n\t\"jam\": 15925,\n\t\"Plaster\": 26408,\n\t\"bounded\": 1138,\n\t\"completely\": 3056,\n\t\"sonus\": 24203,\n\t\"mecca\": 16342,\n\t\"justifies\": 24883,\n\t\"Consider\": 1446,\n\t\"snakes\": 26891,\n\t\"rearing\": 2843,\n\t\"Benedetti\": 13357,\n\t\"employer\": 7163,\n\t\"pin-heads\": 31098,\n\t\"bile-coloured\": 32878,\n\t\"observatories\": 15395,\n\t\"carburetor\": 3125,\n\t\"Courtois\": 13112,\n\t\"highlight\": 16071,\n\t\"window-sill\": 32154,\n\t\"Nightwing\": 12570,\n\t\"diesel\": 31349,\n\t\"overwhelmingly\": 18509,\n\t\"saltiness\": 15848,\n\t\"MYSTIC\": 11802,\n\t\"tastes\": 6701,\n\t\"Luna\": 29703,\n\t\"contemporaries\": 19235,\n\t\"oppositon\": 23832,\n\t\"enduring\": 18824,\n\t\"assaulted\": 8422,\n\t\"Kelly's\": 22753,\n\t\"Carnival\": 10356,\n\t\"hotspots\": 16411,\n\t\"gathering\": 8901,\n\t\"Rico\": 16636,\n\t\"hahahaahh\": 27794,\n\t\"spotlight\": 12241,\n\t\"Wellington\": 12666,\n\t\"comers\": 25448,\n\t\"enrollment\": 7907,\n\t\"Like\": 6745,\n\t\"Jones\": 4177,\n\t\"Petrarch\": 25354,\n\t\"Khymberly\": 23134,\n\t\"goats\": 28939,\n\t\"hacker\": 8295,\n\t\"Aplocheilus\": 27851,\n\t\"Leap\": 4133,\n\t\"Contemplate\": 18220,\n\t\"1949\": 5354,\n\t\"flickered\": 32752,\n\t\"paragraph\": 6614,\n\t\"mb\": 23785,\n\t\"GYM\": 28519,\n\t\"trampled\": 13179,\n\t\"ep\": 9697,\n\t\"2002\": 4083,\n\t\"core\": 2466,\n\t\"tide\": 9026,\n\t\"Magazine’s\": 11135,\n\t\"commentators\": 2469,\n\t\"1957\": 32609,\n\t\"760,000\": 16940,\n\t\"step\": 431,\n\t\"simulate\": 11398,\n\t\"stabilise\": 19731,\n\t\"tensions\": 18791,\n\t\"Autofiltering\": 30146,\n\t\"delusions\": 30430,\n\t\"subscribed\": 5191,\n\t\"Dizzy\": 32238,\n\t\"Hilary\": 5109,\n\t\"nationalist\": 18948,\n\t\"memorializes\": 22738,\n\t\"publication\": 1349,\n\t\"Graydon\": 25906,\n\t\"fanatic\": 20409,\n\t\"switching\": 29564,\n\t\"encounter\": 10234,\n\t\"decoration\": 17714,\n\t\"farmer\": 4026,\n\t\"into\": 147,\n\t\"counter-propaganda\": 20526,\n\t\"counteractions\": 12879,\n\t\"Goldsmith's\": 7419,\n\t\"presidential\": 14432,\n\t\"can\": 78,\n\t\"Clarke\": 2432,\n\t\"Irony\": 20134,\n\t\"Number\": 25909,\n\t\"damp\": 17746,\n\t\"There've\": 31729,\n\t\"diminish\": 25160,\n\t\"Philadelphia\": 14431,\n\t\"unanimous\": 11539,\n\t\"Select\": 23535,\n\t\"humanists\": 3021,\n\t\"pilgrimage\": 12273,\n\t\"judgments\": 1418,\n\t\"investigator\": 12325,\n\t\"chiros\": 28323,\n\t\"d\": 26568,\n\t\"timer\": 18273,\n\t\"appropriators\": 20205,\n\t\"dialague\": 22680,\n\t\"nabbed\": 20751,\n\t\"debate\": 1047,\n\t\"Rhodesian\": 31865,\n\t\"analyse\": 13442,\n\t\"Calzolari\": 2492,\n\t\"converted\": 5101,\n\t\"Welfare\": 12511,\n\t\"intoxication\": 18463,\n\t\"Philipines\": 26131,\n\t\"locals\": 16309,\n\t\"Roberts'\": 7174,\n\t\"Windermere\": 25208,\n\t\"tennis\": 13370,\n\t\"gipsy\": 31972,\n\t\"Answer\": 20892,\n\t\"pricy\": 12329,\n\t\"epistemological\": 15192,\n\t\"inwards\": 20485,\n\t\"Garcia\": 25571,\n\t\"315\": 17881,\n\t\"monologue\": 13644,\n\t\"snails\": 27877,\n\t\"USUAL\": 23036,\n\t\"islamists\": 20573,\n\t\"series\": 204,\n\t\"Reducing\": 17801,\n\t\"abroad\": 14406,\n\t\"pharmacy\": 29465,\n\t\"Marc\": 12212,\n\t\"Purus'a\": 24100,\n\t\"mush\": 29493,\n\t\"bath-stool\": 32690,\n\t\"Modus\": 20576,\n\t\"hardship\": 14338,\n\t\"ninety\": 15254,\n\t\"digs\": 8854,\n\t\"telephones\": 11630,\n\t\"^\": 11762,\n\t\"YOUR\": 11866,\n\t\"rated\": 12795,\n\t\"Anticipating\": 30563,\n\t\"Must\": 21898,\n\t\"nessasary\": 26714,\n\t\"Worst\": 28025,\n\t\"settlements\": 14736,\n\t\"morphological\": 2783,\n\t\"Oppose\": 24702,\n\t\"Seekers\": 18309,\n\t\"281-518-9526\": 22137,\n\t\"acronym\": 24149,\n\t\"NCLAN\": 13476,\n\t\"garlic\": 8580,\n\t\"Tacoma\": 28863,\n\t\"Hand\": 25681,\n\t\"workshop\": 29340,\n\t\"!!!!!!!\": 22266,\n\t\"Fahrenheit\": 6225,\n\t\"7/16\": 23521,\n\t\"collapsing\": 5918,\n\t\"http://www.ebay.co.uk/itm/250927098564?var=550057729382&ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1438.l2649#ht_\": 26863,\n\t\"curl\": 15943,\n\t\"leisure\": 14855,\n\t\"mean\": 1690,\n\t\"maw\": 9051,\n\t\"Forget\": 7774,\n\t\"cicada\": 10246,\n\t\"dishwasher\": 18447,\n\t\"Maintains\": 23279,\n\t\"Tropic\": 13621,\n\t\"prideful\": 17637,\n\t\"profited\": 23355,\n\t\"Craving\": 29509,\n\t\"screen\": 3031,\n\t\"garret\": 31449,\n\t\"memories\": 238,\n\t\"distal\": 2859,\n\t\"Tristan\": 5697,\n\t\"montparnasse\": 26598,\n\t\"STAR\": 18969,\n\t\"Second\": 586,\n\t\"Sooners\": 21181,\n\t\"flips\": 28660,\n\t\"Ticket\": 23585,\n\t\"sorta\": 6028,\n\t\"gamble\": 13548,\n\t\"Craft\": 29532,\n\t\"nutrition\": 8182,\n\t\"stoning\": 13160,\n\t\"tremble\": 14375,\n\t\"restore\": 25195,\n\t\"electrical\": 2086,\n\t\"phenomenal\": 10408,\n\t\"irresistibly\": 31837,\n\t\"Vegetarianism\": 24878,\n\t\"things\": 5678,\n\t\"Attitudes\": 26085,\n\t\"telephony\": 23590,\n\t\"fussy\": 28889,\n\t\"when\": 886,\n\t\"Union\": 10399,\n\t\"225-5185\": 11507,\n\t\"fingerprints\": 31893,\n\t\"presented\": 4502,\n\t\"1990s\": 3797,\n\t\"hing\": 12507,\n\t\"Fried\": 13736,\n\t\"shabby-looking\": 32282,\n\t\"subscribers\": 5189,\n\t\"Banks\": 8347,\n\t\"spends\": 25981,\n\t\"http://www-formal.stanford.edu/jmc/progress/chernobyl.html\": 18716,\n\t\"liner\": 21833,\n\t\"REMARK\": 14914,\n\t\"Tranekær\": 17286,\n\t\"Jammu\": 19119,\n\t\"lapses\": 19559,\n\t\"64.2\": 26103,\n\t\"Spay\": 29399,\n\t\"what'd\": 30986,\n\t\"Wasn't\": 6929,\n\t\"Countless\": 32077,\n\t\"heart\": 8325,\n\t\"veg\": 16173,\n\t\"SCBA\": 7305,\n\t\"2030\": 14486,\n\t\"culminating\": 31045,\n\t\"fee\": 1365,\n\t\"boast\": 20066,\n\t\"CPI\": 20905,\n\t\"Pluto\": 25303,\n\t\"Editorial\": 11121,\n\t\"Shiites\": 18799,\n\t\"stable\": 7053,\n\t\"Pete's\": 26705,\n\t\"breed\": 19831,\n\t\"puffy\": 9469,\n\t\"NEPCO\": 23159,\n\t\"plays\": 2148,\n\t\"ideate\": 24617,\n\t\"understanding\": 167,\n\t\"1789\": 3635,\n\t\"Livorno\": 13195,\n\t\"crosstab\": 30070,\n\t\"discuss\": 162,\n\t\"Jai\": 21274,\n\t\"plunderers\": 32260,\n\t\"GPA\": 15231,\n\t\"whir\": 29364,\n\t\"instruments\": 2660,\n\t\"1891\": 4630,\n\t\"viral\": 5267,\n\t\"Wake\": 17798,\n\t\"saddle\": 9928,\n\t\"meat\": 15443,\n\t\"Bosnia\": 16477,\n\t\"citations\": 7606,\n\t\"Chalabi\": 18548,\n\t\"popularize\": 10569,\n\t\"Labrador\": 31799,\n\t\"Mikhail\": 11596,\n\t\"Bonus\": 24009,\n\t\"declines\": 8503,\n\t\"leapt\": 32290,\n\t\"Proletariat\": 12482,\n\t\"Addiction\": 13564,\n\t\"priorities\": 8506,\n\t\"printers\": 28382,\n\t\"Marae\": 16286,\n\t\"03/15/2001\": 21690,\n\t\"amphibious\": 25771,\n\t\"=)\": 26699,\n\t\"Manne\": 23731,\n\t\"Raleigh\": 24667,\n\t\"DEFINITELY\": 28461,\n\t\"it\": 72,\n\t\"cupcake\": 17831,\n\t\"Rohatgi\": 7263,\n\t\"rooms\": 10689,\n\t\"70s\": 27274,\n\t\"lot\": 6042,\n\t\"Gallows\": 5406,\n\t\"rescheduling\": 28902,\n\t\"relation\": 1700,\n\t\"roots\": 7117,\n\t\"noticeable\": 15625,\n\t\"Eco\": 23461,\n\t\"sordid\": 31109,\n\t\"Levi\": 28473,\n\t\"Sera\": 22975,\n\t\"11/8/00\": 22057,\n\t\"browsers\": 11362,\n\t\"constitutes\": 18205,\n\t\"11201\": 21490,\n\t\"354\": 16377,\n\t\"Lay's\": 21757,\n\t\"truely\": 29007,\n\t\"filthy\": 29568,\n\t\"Kayak\": 17266,\n\t\"oxygen\": 18031,\n\t\"sex\": 7286,\n\t\"281-514-3183\": 22152,\n\t\"freaked\": 6756,\n\t\"reprinted\": 11073,\n\t\"unmolested\": 25054,\n\t\"hegemonic\": 25848,\n\t\"penalties\": 25934,\n\t\"pesticides\": 28273,\n\t\"weaken\": 19570,\n\t\"mommy\": 23914,\n\t\"A19\": 17576,\n\t\"pleasing\": 27640,\n\t\"Munk\": 23091,\n\t\"Domínguez\": 977,\n\t\"3rd\": 4941,\n\t\"shouting\": 8637,\n\t\"d'Alembert\": 3278,\n\t\"416-865-3700\": 21298,\n\t\"Institute\": 3419,\n\t\"D’Alesandro\": 14149,\n\t\"Iranians\": 19744,\n\t\"District\": 4822,\n\t\"copyrights\": 7495,\n\t\"utterly\": 20245,\n\t\"proprietors\": 28982,\n\t\"Kenyans\": 14539,\n\t\"Youngspiration's\": 12435,\n\t\"Advertising\": 30106,\n\t\"trading-post\": 31329,\n\t\"538\": 23399,\n\t\"cdg\": 26597,\n\t\"http://www.binkyswoodworking.com/HorseStable.php\": 26843,\n\t\"fixes\": 6696,\n\t\"intellectual\": 7972,\n\t\"Arabian\": 17177,\n\t\"Determine\": 17636,\n\t\"Panamal\": 27247,\n\t\"deepest\": 9040,\n\t\"defence\": 19892,\n\t\"Calculater\": 26879,\n\t\"FANFUCKINGTASTIC\": 29632,\n\t\"cloth\": 10289,\n\t\"sequence\": 1826,\n\t\"mapped\": 17247,\n\t\"cannibals\": 20519,\n\t\"gases\": 25919,\n\t\"OSU\": 17506,\n\t\"woman\": 3893,\n\t\"provoked\": 3929,\n\t\"somethin\": 29423,\n\t\"surprise\": 1893,\n\t\"jelly\": 15944,\n\t\"1%P701!.doc\": 23269,\n\t\"foam\": 2643,\n\t\"scorn\": 23966,\n\t\"candle\": 15833,\n\t\"visualisations\": 24601,\n\t\"cuticles\": 29323,\n\t\"fervent\": 30584,\n\t\"examples\": 1060,\n\t\"inauguration\": 14312,\n\t\"Tried\": 15080,\n\t\"capability\": 15835,\n\t\"underage\": 18464,\n\t\"http://www.LoveAllPeople.org\": 24752,\n\t\"buzzing\": 26522,\n\t\"anti-establishment\": 12366,\n\t\"Kuykendall\": 22553,\n\t\"scream\": 10024,\n\t\"kids'\": 27928,\n\t\"acupuncturist\": 28010,\n\t\"mislabeled\": 29248,\n\t\"Rivertrail\": 17501,\n\t\"XMAS\": 21983,\n\t\"horror\": 5068,\n\t\"formation\": 11617,\n\t\"using\": 181,\n\t\"Goodwyn\": 19813,\n\t\"Scots\": 4358,\n\t\"NEW\": 18992,\n\t\"american\": 26697,\n\t\"here's\": 6514,\n\t\"Steve's\": 22387,\n\t\"me$$age\": 26754,\n\t\"pleasant\": 6150,\n\t\"delirious\": 7681,\n\t\"dentist\": 27999,\n\t\"borderline\": 1376,\n\t\"Huguenots\": 3141,\n\t\"repercussions\": 22856,\n\t\"Convention\": 10350,\n\t\"Prompt\": 28102,\n\t\"legs\": 7055,\n\t\"lakes\": 31058,\n\t\"teen\": 20041,\n\t\"basils\": 17716,\n\t\"Sf\": 29120,\n\t\"yarn\": 7764,\n\t\"asbestos\": 12822,\n\t\"620-294-3000\": 24015,\n\t\"postural\": 2732,\n\t\"man’s\": 9075,\n\t\"Hershey\": 16013,\n\t\"ripped\": 24119,\n\t\"snaffle\": 26385,\n\t\"photoscape\": 26631,\n\t\"routed\": 12320,\n\t\"tasting\": 10535,\n\t\"Hamill\": 12538,\n\t\"Palace\": 16808,\n\t\"majeure\": 23514,\n\t\"unequally\": 7949,\n\t\"discounts\": 29531,\n\t\"superstores\": 18164,\n\t\"refining\": 7722,\n\t\"appeal\": 86,\n\t\"act\": 6636,\n\t\"Transwestern\": 22712,\n\t\"tarantula\": 17940,\n\t\"Foods\": 8225,\n\t\"behaves\": 17617,\n\t\"password\": 21580,\n\t\"recitation\": 1185,\n\t\"inhalable\": 20704,\n\t\"sharpest\": 20647,\n\t\"Exeter\": 4228,\n\t\"upholding\": 13848,\n\t\"club\": 5253,\n\t\"ET\": 19810,\n\t\"reforms\": 12373,\n\t\"EU\": 13716,\n\t\"bath\": 6246,\n\t\"accommodate\": 8132,\n\t\"5:55\": 11745,\n\t\"doesnt\": 23918,\n\t\"flapping\": 9000,\n\t\"Silkies\": 27138,\n\t\"RESTAURANT\": 28454,\n\t\"10:16\": 23199,\n\t\"BBC's\": 24421,\n\t\"soft-looking\": 31891,\n\t\"Christian\": 4287,\n\t\"Hyperion\": 21104,\n\t\"late-\": 6487,\n\t\"sugarcane\": 9739,\n\t\"Harris\": 14169,\n\t\"Test\": 1637,\n\t\"Whitmore\": 12334,\n\t\"Catch\": 19482,\n\t\"Accordingly\": 23741,\n\t\"epithet\": 25416,\n\t\"Campbell\": 6430,\n\t\"Particularly\": 23735,\n\t\"George's\": 14176,\n\t\"flags\": 13740,\n\t\"empirical\": 2547,\n\t\"Janeiro\": 26998,\n\t\"perform\": 10333,\n\t\"Blanc\": 16185,\n\t\"Gracee\": 28945,\n\t\"Alto\": 28962,\n\t\"Branson\": 13747,\n\t\"Bering\": 15277,\n\t\"02/22/2001\": 23361,\n\t\"sacrificed\": 15380,\n\t\"licensing\": 7508,\n\t\"indistinguishable\": 17968,\n\t\"consenting\": 24689,\n\t\"Rob\": 11156,\n\t\"kinect\": 26796,\n\t\"sheets\": 26289,\n\t\"identified\": 1162,\n\t\"Practice\": 18113,\n\t\"barometers\": 25102,\n\t\"Nicholas\": 8469,\n\t\"2)\": 10809,\n\t\"hasn’t\": 11779,\n\t\"Jorvik\": 17537,\n\t\"Sheffield\": 13447,\n\t\"thermal\": 23940,\n\t\"rabbits\": 11976,\n\t\"Badr\": 18916,\n\t\"425-415-3098\": 23183,\n\t\"ALEX\": 14360,\n\t\"plume\": 32734,\n\t\"Lope\": 26200,\n\t\"guss\": 27985,\n\t\"own\": 846,\n\t\"continent\": 14505,\n\t\"10:34\": 22756,\n\t\"sprinting\": 32304,\n\t\"circulations\": 2552,\n\t\"weak\": 6000,\n\t\"reaffirm\": 7469,\n\t\"Yankee\": 10948,\n\t\"vigor\": 11982,\n\t\"old-maid\": 31749,\n\t\"tribulation\": 32543,\n\t\"Gives\": 24066,\n\t\"Gomez\": 8584,\n\t\"puppies\": 28611,\n\t\"Mann@ENRON\": 21205,\n\t\"tasteless\": 28445,\n\t\"strengthened\": 14613,\n\t\"09:24\": 22916,\n\t\"contemplated\": 20585,\n\t\"sorority\": 15769,\n\t\"Dad's\": 21855,\n\t\"Dealbench\": 23089,\n\t\"Parisian\": 25540,\n\t\"dwarfs\": 26492,\n\t\"incited\": 20416,\n\t\"room\": 6502,\n\t\"Seth\": 28515,\n\t\"reject\": 7295,\n\t\"focused\": 117,\n\t\"smackers\": 11775,\n\t\"diminishing\": 18253,\n\t\"Hare\": 23048,\n\t\"12-20-00.doc\": 23308,\n\t\"Dissolved\": 27882,\n\t\"60,000\": 10786,\n\t\"cartoony\": 13615,\n\t\"fathom\": 14627,\n\t\"listening\": 8577,\n\t\"Mexico's\": 14675,\n\t\"sweaters\": 30762,\n\t\"Shackleton@ECT\": 23190,\n\t\"watch\": 5964,\n\t\"shorten\": 27833,\n\t\"composing\": 3990,\n\t\"Eng.\": 11719,\n\t\"finest\": 14649,\n\t\"bobbing\": 17933,\n\t\"nt\": 19466,\n\t\"chewy\": 29993,\n\t\"Tropical\": 25139,\n\t\"ppm\": 31378,\n\t\"obliged\": 25511,\n\t\"field\": 427,\n\t\"enlist\": 3539,\n\t\"shitty\": 11810,\n\t\"northern\": 5123,\n\t\"participated\": 1664,\n\t\"Nadler\": 14134,\n\t\"senator\": 19863,\n\t\"elude\": 30328,\n\t\"Meats\": 29496,\n\t\"addicts\": 24273,\n\t\"vacated\": 25081,\n\t\"pallor\": 30285,\n\t\"THEM\": 28393,\n\t\"Tree\": 17199,\n\t\"look-out\": 31605,\n\t\"neighbours\": 19650,\n\t\"Moyross\": 26149,\n\t\"broached\": 19851,\n\t\"relapse\": 28045,\n\t\"awash\": 20052,\n\t\"guidance\": 5164,\n\t\"evoke\": 3821,\n\t\"Index\": 10386,\n\t\"sieve\": 18396,\n\t\"shrapnel\": 19767,\n\t\"buck\": 28337,\n\t\"troubles\": 3914,\n\t\"Granqvist\": 13088,\n\t\"1996-1997\": 31391,\n\t\"pushing\": 18262,\n\t\"MERCURY\": 22957,\n\t\"maids\": 16549,\n\t\"Minute\": 5704,\n\t\"artifact\": 30469,\n\t\"river\": 8986,\n\t\"03:43\": 23823,\n\t\"HyperLink\": 10754,\n\t\"polished\": 8904,\n\t\"zooming\": 15718,\n\t\"postings\": 24323,\n\t\"Dujail\": 18562,\n\t\"applicants\": 31552,\n\t\"Walmart\": 18165,\n\t\"throughout\": 3418,\n\t\"Tana's\": 23055,\n\t\".5\": 18044,\n\t\"dissolving\": 8992,\n\t\"Notre\": 11459,\n\t\"Entity\": 30134,\n\t\"END\": 9917,\n\t\"02:34\": 22165,\n\t\"”\": 693,\n\t\"Gonzaga\": 13188,\n\t\"queries-views\": 30123,\n\t\"Continue\": 6899,\n\t\"smugness\": 17596,\n\t\"Sanborn\": 23110,\n\t\"Teaching\": 13319,\n\t\"encampment\": 16569,\n\t\"Uecomm's\": 22217,\n\t\"syntheses\": 2439,\n\t\"Midwest\": 10346,\n\t\"yes\": 1994,\n\t\"Ohh\": 16141,\n\t\"Exercises\": 3231,\n\t\"Yucatán\": 15399,\n\t\"monstrous\": 9482,\n\t\"rusting\": 30648,\n\t\"valued\": 15504,\n\t\"1929\": 1100,\n\t\"consumers\": 3098,\n\t\"Belgium\": 5616,\n\t\"…\": 7235,\n\t\"alarm\": 18280,\n\t\"Moonlight\": 32132,\n\t\"wrinkled\": 31763,\n\t\"selecting\": 12680,\n\t\"Repubblica\": 13359,\n\t\"09:40\": 23386,\n\t\"IE9\": 12759,\n\t\"E-mail\": 25096,\n\t\"descriptions\": 2000,\n\t\"sheep\": 25013,\n\t\"sox\": 29127,\n\t\"28th\": 13073,\n\t\"glimpses\": 32235,\n\t\"amended\": 7322,\n\t\"Combine\": 18021,\n\t\"there'll\": 6800,\n\t\"1490s\": 27106,\n\t\"relative\": 1154,\n\t\"blinding\": 31167,\n\t\"masses\": 20311,\n\t\"examines\": 25175,\n\t\"Myself\": 29723,\n\t\"Crawford\": 24136,\n\t\"guerrilla\": 25817,\n\t\"ordinary\": 1247,\n\t\"Edwards’s\": 14725,\n\t\"volcano\": 16642,\n\t\"Vetri\": 28891,\n\t\"goyish\": 30722,\n\t\"shame\": 3168,\n\t\"foliage\": 9373,\n\t\"Frankly\": 11571,\n\t\"longest\": 5126,\n\t\"1790\": 3629,\n\t\"employed\": 4408,\n\t\"Marines\": 18615,\n\t\"nomination\": 4094,\n\t\"strong\": 1987,\n\t\"aphid\": 10214,\n\t\"drumsticks\": 32418,\n\t\"Car\": 28850,\n\t\"separately\": 3069,\n\t\"Vespers\": 11743,\n\t\"blaming\": 14040,\n\t\"smartly\": 17963,\n\t\"ascertain\": 2540,\n\t\"mutilation\": 15518,\n\t\"Shep\": 5853,\n\t\"geez\": 13788,\n\t\"wig\": 13430,\n\t\"rectify\": 15522,\n\t\"Let's\": 6294,\n\t\"warps\": 15576,\n\t\"suffer\": 569,\n\t\"Bronze\": 28886,\n\t\"procrastinator\": 18248,\n\t\"Rather\": 15212,\n\t\"detoured\": 11456,\n\t\"£\": 16463,\n\t\"sail\": 27233,\n\t\"vigilantly\": 31157,\n\t\"variety's\": 27759,\n\t\"pitiless\": 31218,\n\t\"Its\": 10045,\n\t\"warms\": 27820,\n\t\"kinsman\": 4455,\n\t\"1721\": 3200,\n\t\"good-hearted\": 30545,\n\t\"mumbled\": 31590,\n\t\"House's\": 26105,\n\t\"Lensey\": 3499,\n\t\"flung\": 31105,\n\t\"Moritz\": 4432,\n\t\"15,000\": 18915,\n\t\"140\": 25967,\n\t\"transportation\": 12933,\n\t\"thorough\": 5628,\n\t\"Reform\": 21792,\n\t\"companion’s\": 14822,\n\t\"Pettigrew's\": 31963,\n\t\"Eritrea\": 12967,\n\t\"deputies\": 13199,\n\t\"29th\": 11772,\n\t\"tearful\": 19946,\n\t\"fo\": 27790,\n\t\"drifting\": 30883,\n\t\"casually\": 5034,\n\t\"Jurisdictions\": 22509,\n\t\"shortcut\": 18114,\n\t\"civilized\": 20495,\n\t\"BROUGHT\": 29675,\n\t\"oyster\": 32622,\n\t\"ballerina\": 20513,\n\t\"desk\": 7810,\n\t\"repeatedly\": 8724,\n\t\"profanity\": 8558,\n\t\"negotiation\": 3081,\n\t\"Interpretation\": 5721,\n\t\"comma\": 23491,\n\t\"ascetic\": 5152,\n\t\"photoshop\": 26627,\n\t\"Toes\": 27156,\n\t\"spectator\": 31838,\n\t\"crumpled\": 8627,\n\t\"Looking\": 5237,\n\t\"Moldovan\": 19885,\n\t\"ascending\": 9346,\n\t\"30,0\": 17317,\n\t\"idea\": 2821,\n\t\"depending\": 2132,\n\t\"insults\": 9626,\n\t\"encyclopedic\": 24714,\n\t\"temp\": 27056,\n\t\"BOARD\": 27479,\n\t\"mowed\": 32099,\n\t\"harrowing\": 9339,\n\t\"carbonyl\": 11393,\n\t\"1985\": 16362,\n\t\"everbody\": 27607,\n\t\"strife\": 18994,\n\t\"midway\": 9233,\n\t\"Exclaim\": 17937,\n\t\"especial\": 31472,\n\t\"nominated\": 14414,\n\t\"terminated\": 24200,\n\t\"horrors\": 9473,\n\t\"grossly\": 19552,\n\t\"Depending\": 10711,\n\t\"8:30\": 21765,\n\t\"disgruntled\": 25747,\n\t\"planet\": 4560,\n\t\"premises\": 12012,\n\t\"Gianna\": 14177,\n\t\"gleams\": 30887,\n\t\"worker\": 21289,\n\t\"elements\": 40,\n\t\"TRANSPARENT\": 30017,\n\t\"worldly\": 27518,\n\t\"wanderer\": 30968,\n\t\"pelts\": 32810,\n\t\"portions\": 3908,\n\t\"sulfur\": 23407,\n\t\"paddled\": 24132,\n\t\"Montmartre\": 5343,\n\t\"Hamill's\": 12552,\n\t\"yah\": 18110,\n\t\"Furnace\": 28456,\n\t\"Abymes\": 16689,\n\t\"sexually\": 8488,\n\t\"favors\": 12035,\n\t\"Sixth\": 17528,\n\t\"snub\": 19684,\n\t\"ideas\": 3172,\n\t\"Cavalcade\": 10358,\n\t\"patties\": 29018,\n\t\"section\": 11079,\n\t\"pastries\": 29475,\n\t\"atmosphere\": 7775,\n\t\"populate\": 25223,\n\t\"absurdity\": 19766,\n\t\"cry\": 4064,\n\t\"Forgot\": 6035,\n\t\"Who's\": 6783,\n\t\"Creator\": 7945,\n\t\"vacation\": 11681,\n\t\"subsection\": 15573,\n\t\"Oats\": 24197,\n\t\"trainable\": 27429,\n\t\"Regularity\": 3762,\n\t\"exponentially\": 9337,\n\t\"judged\": 3997,\n\t\"Mysterious\": 10934,\n\t\"shrubs\": 9414,\n\t\"Danny_Jones%ENRON@eott.com\": 22918,\n\t\"neighbourhoods\": 18568,\n\t\"fleshy\": 32763,\n\t\"twos\": 7113,\n\t\"bonded\": 27230,\n\t\"Internet\": 7678,\n\t\"Kente\": 31857,\n\t\"headache\": 15819,\n\t\"Racing\": 17549,\n\t\"occurrence\": 11005,\n\t\"mock\": 31849,\n\t\"bleeding\": 24129,\n\t\"denny's\": 26902,\n\t\"reference\": 17241,\n\t\"Euler\": 3204,\n\t\"vicious\": 20426,\n\t\"horrifying\": 20487,\n\t\"cattle\": 17251,\n\t\"retreats\": 25321,\n\t\"Alatorre@ENRON\": 21656,\n\t\"Macedonia\": 14209,\n\t\"Pratt\": 1548,\n\t\"ROW\": 23579,\n\t\"steadied\": 31657,\n\t\"Laboratory\": 20727,\n\t\"一葉\": 4600,\n\t\"hauling\": 9002,\n\t\"son\": 3147,\n\t\"!\": 4051,\n\t\"ripples\": 9381,\n\t\"team's\": 11010,\n\t\"roadside\": 25814,\n\t\"Ghost’s\": 8381,\n\t\"friendships\": 17625,\n\t\"apocalyptic\": 20007,\n\t\"map\": 2338,\n\t\"Hoping\": 12215,\n\t\"agriculture\": 13475,\n\t\"Danny\": 10248,\n\t\"shreds\": 25804,\n\t\"Yer\": 32296,\n\t\"firewalls\": 24238,\n\t\"guide\": 1217,\n\t\"clustered\": 16546,\n\t\"rewrite\": 30187,\n\t\"hoa\": 28622,\n\t\"Oil\": 17402,\n\t\"competent\": 11701,\n\t\"pragmatic\": 1912,\n\t\"palatial\": 16968,\n\t\"wildest\": 31877,\n\t\"42,000\": 15689,\n\t\"r.\": 22222,\n\t\"dusting\": 20638,\n\t\"Deacon\": 24661,\n\t\"Jordan\": 18943,\n\t\"broadcasting\": 10883,\n\t\"Abby\": 24522,\n\t\"ppl\": 26150,\n\t\"reneging\": 14759,\n\t\"athletic\": 10899,\n\t\"Panamanian\": 13123,\n\t\"automotive\": 16396,\n\t\"regimen\": 28016,\n\t\"trailhead\": 15969,\n\t\"Sharjah\": 17172,\n\t\"TAOM\": 10348,\n\t\"purse\": 29155,\n\t\"potatoes\": 8652,\n\t\"Phbow\": 5961,\n\t\"Laodicea\": 5143,\n\t\"Sauvignon\": 16184,\n\t\"seeds\": 17707,\n\t\"Plenty\": 26909,\n\t\"plaster\": 26405,\n\t\"terrorism\": 14222,\n\t\"neighbors\": 11999,\n\t\"Pride\": 10930,\n\t\"pointer\": 30168,\n\t\"hair\": 8877,\n\t\"Cleopatra\": 11206,\n\t\"unaffected\": 6736,\n\t\"Collecting\": 11650,\n\t\"reverent\": 14088,\n\t\"hatched\": 6520,\n\t\"Freight\": 16295,\n\t\"Nida's\": 5640,\n\t\"Phoenix\": 5771,\n\t\"grouping\": 1950,\n\t\"deportation\": 31768,\n\t\"philippine\": 2139,\n\t\"strait\": 15279,\n\t\"09819602175\": 25328,\n\t\"sitcom\": 29377,\n\t\"Bilbray\": 23344,\n\t\"phenological\": 25109,\n\t\"aviation\": 16422,\n\t\"forget-me-not\": 32354,\n\t\"e-mails\": 23675,\n\t\"concert\": 12904,\n\t\"Communication\": 14575,\n\t\"Borgin's\": 32253,\n\t\"Hopelessness\": 24075,\n\t\"RER\": 26602,\n\t\"contemptuously\": 31152,\n\t\"FREAK\": 26476,\n\t\"Enpower\": 23557,\n\t\"nighstand\": 29891,\n\t\"TomiPilates\": 28158,\n\t\"Winton\": 19799,\n\t\"pangs\": 30829,\n\t\"fought\": 14783,\n\t\"Engineers\": 3559,\n\t\"serve\": 2381,\n\t\"Slovenia\": 10845,\n\t\"slowed\": 6335,\n\t\"revision\": 21485,\n\t\"ton\": 21826,\n\t\"Empowerment\": 25302,\n\t\"brewery\": 29346,\n\t\"broad\": 460,\n\t\"L.I.T\": 26148,\n\t\"Cinnamon\": 15889,\n\t\"agar\": 10307,\n\t\"outer\": 11825,\n\t\"fever\": 6760,\n\t\"processors\": 8082,\n\t\"Inwood\": 16587,\n\t\"busted\": 2045,\n\t\"despair\": 20419,\n\t\"!!\": 21319,\n\t\"crawler\": 608,\n\t\"Ferry\": 17311,\n\t\"non-life-threatening\": 18227,\n\t\"Medieval\": 27096,\n\t\"state\": 791,\n\t\"been\": 129,\n\t\"quartet\": 30439,\n\t\"shook\": 30488,\n\t\"dislikes\": 8517,\n\t\"trivial\": 10652,\n\t\"aint\": 19465,\n\t\"magnet\": 27932,\n\t\"Details\": 30121,\n\t\"cautionary\": 13605,\n\t\"penetration\": 14563,\n\t\"Hands\": 19874,\n\t\"def\": 26226,\n\t\"mud\": 9108,\n\t\"Bevernondelibreatekin\": 18093,\n\t\"marking\": 12918,\n\t\"Ildefonso\": 16957,\n\t\"assist\": 7280,\n\t\"hopefully\": 6291,\n\t\"touristic\": 16643,\n\t\"confounded\": 31072,\n\t\"Grey\": 15428,\n\t\"Ruse’s\": 15156,\n\t\"larger\": 1018,\n\t\"Nizhny\": 13065,\n\t\"Gordon's\": 4384,\n\t\"asthma\": 8798,\n\t\"bloodied\": 12266,\n\t\"naturalistic\": 1970,\n\t\"commonly\": 2090,\n\t\"06/04/01\": 23560,\n\t\"pointe\": 16682,\n\t\"complements\": 1068,\n\t\"Sex\": 8461,\n\t\"Vere's\": 25360,\n\t\"Marriage\": 7221,\n\t\"Tagesthemen\": 19460,\n\t\"self-righteously\": 31748,\n\t\"adapted\": 618,\n\t\"brutality\": 14118,\n\t\"dancewear\": 28234,\n\t\"façade\": 31601,\n\t\"Bottles\": 18414,\n\t\"bean\": 26957,\n\t\"split\": 1051,\n\t\"culture’s\": 15439,\n\t\"laundromats\": 29569,\n\t\"environmental\": 8138,\n\t\"JI\": 20726,\n\t\"executive\": 5300,\n\t\"x35172\": 21096,\n\t\"Delhi\": 19079,\n\t\"19th\": 1044,\n\t\"counterfeit\": 1441,\n\t\"fluid's\": 3292,\n\t\"Friedrich\": 7846,\n\t\"rinse\": 18368,\n\t\"inducted\": 10336,\n\t\"enlarging\": 18721,\n\t\"arguing\": 7367,\n\t\"Island\": 12453,\n\t\"vinegar\": 15829,\n\t\"During\": 2861,\n\t\"magicians\": 10330,\n\t\"favoured\": 12679,\n\t\"Huble@ENRON\": 23419,\n\t\"Hot\": 23003,\n\t\"theres\": 26630,\n\t\"sentry\": 9617,\n\t\"m-\": 6384,\n\t\"neon\": 28987,\n\t\"L.L.C\": 21953,\n\t\"urgent\": 8084,\n\t\"IPN\": 25158,\n\t\"intermediate\": 27007,\n\t\"imagination\": 7968,\n\t\"http://www.wikihow.com/wikiHow:Right-to-Fork\": 10812,\n\t\"loading\": 2788,\n\t\"publishers\": 1424,\n\t\"Rummy\": 19458,\n\t\"sheeting\": 27819,\n\t\"snows\": 28594,\n\t\"proteins\": 10636,\n\t\"Sumatra\": 19629,\n\t\"Field\": 2377,\n\t\"still\": 1188,\n\t\"2029\": 18820,\n\t\"cake\": 27200,\n\t\"20th\": 713,\n\t\"empty\": 8709,\n\t\"CANT\": 28192,\n\t\"d'Ettorre\": 10265,\n\t\"windscreen\": 32444,\n\t\"his.\": 11768,\n\t\"Chevrolet\": 14644,\n\t\"reaching\": 14427,\n\t\"alphabets\": 18095,\n\t\"unhesitantly\": 9497,\n\t\"unleavened\": 10130,\n\t\"legacy\": 3779,\n\t\"unrealistic\": 29930,\n\t\"direct\": 256,\n\t\"pediatricians\": 1298,\n\t\"Incas\": 18353,\n\t\"Hobbit\": 13771,\n\t\"1/30/10\": 29547,\n\t\"bodyguards\": 20006,\n\t\"Want\": 5242,\n\t\"Essie's\": 21093,\n\t\"someone's\": 29897,\n\t\"glob\": 29992,\n\t\"admiring\": 9821,\n\t\"underpin\": 30666,\n\t\"bus\": 13164,\n\t\".xml\": 30118,\n\t\"passion\": 13349,\n\t\"GSP\": 31533,\n\t\"There\": 1261,\n\t\"bodyless\": 30562,\n\t\"56\": 12773,\n\t\"Arp\": 21165,\n\t\"i.e\": 27241,\n\t\"Nicktendo64\": 10271,\n\t\"unnamed\": 19536,\n\t\"Run\": 28370,\n\t\"aught\": 6416,\n\t\"Tor\": 24946,\n\t\"respondents\": 8186,\n\t\"margins\": 15120,\n\t\"Applications\": 23056,\n\t\"Pete\": 9863,\n\t\"C&IC\": 26470,\n\t\"cooler\": 27684,\n\t\"oysters\": 32719,\n\t\"Midwesterners\": 17079,\n\t\"Pilot\": 20599,\n\t\"trumpets\": 10164,\n\t\"undermines\": 7454,\n\t\"Larson\": 28105,\n\t\"kosher\": 30565,\n\t\"candy\": 18425,\n\t\"t-\": 6906,\n\t\"Gordon\": 4257,\n\t\"Video\": 12637,\n\t\"Meen\": 4241,\n\t\"im\": 26182,\n\t\"adopting\": 2882,\n\t\"Inuit\": 15495,\n\t\"entering\": 3163,\n\t\"transfer\": 2685,\n\t\"Though\": 9277,\n\t\"Abbassi\": 16832,\n\t\"Manyema\": 31935,\n\t\"pierce\": 9325,\n\t\"Peer\": 23146,\n\t\"Olgletree\": 23163,\n\t\"delicous\": 28218,\n\t\"offensive\": 10421,\n\t\"divide\": 13949,\n\t\"yesterday\": 6669,\n\t\"Kristin\": 13282,\n\t\"denoted\": 1729,\n\t\"05/03/2001\": 21916,\n\t\"nigger\": 31307,\n\t\"companie$\": 26751,\n\t\"assessment\": 10556,\n\t\"week's\": 24808,\n\t\"canape's\": 29484,\n\t\"buster\": 24800,\n\t\"Offer\": 27348,\n\t\"300,000\": 14434,\n\t\"Iraqis\": 18555,\n\t\"parts\": 4315,\n\t\"eighteenth\": 31971,\n\t\"Jessen\": 13927,\n\t\"bitty\": 6274,\n\t\"announcing\": 20867,\n\t\"assisted\": 9514,\n\t\"beers\": 15986,\n\t\"resonate\": 8211,\n\t\"RTO\": 21055,\n\t\"brokered\": 19018,\n\t\"Deptford\": 30946,\n\t\"PS\": 21194,\n\t\"Am\": 7077,\n\t\"Gate\": 9779,\n\t\"birthdate\": 27033,\n\t\"sidestepped\": 11662,\n\t\"Sharon\": 15162,\n\t\"stroll\": 16994,\n\t\"Kinga\": 23799,\n\t\"Baath\": 18544,\n\t\"Israeli\": 11245,\n\t\"shortness\": 15798,\n\t\"loaded\": 4661,\n\t\"enterprise\": 21773,\n\t\"Phy\": 23006,\n\t\"Block\": 13325,\n\t\"tryst\": 14004,\n\t\"FAMILY\": 29480,\n\t\"usage\": 2159,\n\t\"McBride\": 10338,\n\t\"incomprehensible\": 3835,\n\t\"Socky\": 13793,\n\t\"Oct.\": 22181,\n\t\"cord\": 27172,\n\t\"swam\": 9006,\n\t\"crossing\": 13005,\n\t\"73\": 20996,\n\t\"holidays\": 23267,\n\t\"myths\": 18659,\n\t\"disgusting\": 29109,\n\t\"Award\": 3672,\n\t\"400\": 15340,\n\t\"curved\": 15549,\n\t\"bar\": 1450,\n\t\"CC-BY\": 15228,\n\t\"breakfast\": 6325,\n\t\"cheque\": 24163,\n\t\"Your\": 6667,\n\t\"Say\": 6937,\n\t\"Eau\": 11941,\n\t\"peanut\": 13481,\n\t\"quietness\": 24607,\n\t\"Rotarua\": 26961,\n\t\"Jantar\": 27420,\n\t\"Galveston\": 25224,\n\t\"hummus\": 29990,\n\t\"1754\": 3506,\n\t\"Kramer\": 1551,\n\t\"interplay\": 12109,\n\t\"sender\": 20847,\n\t\"Yahoos\": 28022,\n\t\"openness\": 30617,\n\t\"frankness\": 32666,\n\t\"330i\": 29736,\n\t\"grist\": 27906,\n\t\"dice\": 31006,\n\t\"famous\": 3992,\n\t\"technologically\": 8275,\n\t\"slung\": 8621,\n\t\"277\": 12793,\n\t\"tired\": 5251,\n\t\"Dead\": 3003,\n\t\"remnant\": 25007,\n\t\"qualify\": 27083,\n\t\"EARTHHHHHHH\": 28782,\n\t\"tolls\": 29605,\n\t\"lawful\": 31356,\n\t\"hold\": 6657,\n\t\"department\": 16634,\n\t\"Freezing\": 8162,\n\t\"ridiculing\": 25411,\n\t\"topped\": 10523,\n\t\"yeaa\": 26392,\n\t\"shanks\": 27149,\n\t\"Manual\": 13556,\n\t\"Institutions\": 13912,\n\t\"pickles\": 32429,\n\t\"injected\": 31600,\n\t\"thrilled\": 11292,\n\t\"Flirt\": 17949,\n\t\"U.T.\": 22071,\n\t\"adw\": 26177,\n\t\"Katsof\": 21808,\n\t\"Fernández\": 1015,\n\t\"saint\": 5002,\n\t\"faster\": 8567,\n\t\"dual\": 5468,\n\t\"shipped\": 12799,\n\t\"olive\": 17903,\n\t\"halibut\": 25173,\n\t\"1?!?!?\": 28123,\n\t\"maker\": 16129,\n\t\"baggage\": 17279,\n\t\"argumentative\": 28950,\n\t\"Rhodesians\": 30599,\n\t\"de\": 964,\n\t\"resale\": 11652,\n\t\"PATROL\": 11852,\n\t\"aristocrat\": 31316,\n\t\"despective\": 25676,\n\t\"manifested\": 32423,\n\t\"infielder\": 4802,\n\t\"routes\": 7402,\n\t\"feat\": 7967,\n\t\"conflating\": 7632,\n\t\"workforce’s\": 645,\n\t\"States\": 1297,\n\t\"appearances\": 5319,\n\t\"kinesiologist\": 21869,\n\t\"Ocho\": 6312,\n\t\"factor\": 2697,\n\t\"Sea\": 5378,\n\t\"Stanislavsky\": 5532,\n\t\"defrosted\": 27863,\n\t\"admittedly\": 29832,\n\t\"twelfth\": 11461,\n\t\"Enclosed\": 22205,\n\t\"weight\": 1315,\n\t\"Bird\": 18070,\n\t\"stormy\": 9039,\n\t\"sensation\": 10019,\n\t\"shampoo\": 29976,\n\t\"hitch\": 19221,\n\t\"applying\": 2255,\n\t\"Philology\": 3421,\n\t\"Beauty\": 13634,\n\t\"angel\": 18214,\n\t\"Pounds\": 22211,\n\t\"hedgehog\": 32010,\n\t\"comfty\": 28553,\n\t\"Corp.\": 21294,\n\t\"IMMEDIATE\": 24340,\n\t\"Perspective\": 25731,\n\t\"Fuck\": 23911,\n\t\"KIMBERLY\": 23661,\n\t\"turntable\": 32471,\n\t\"Inaugural\": 14002,\n\t\"shunted\": 25240,\n\t\"ordained\": 5596,\n\t\"agents\": 770,\n\t\"boiled\": 27602,\n\t\"accomplish\": 10795,\n\t\"metrics\": 1480,\n\t\"12th\": 2857,\n\t\"Indonesia\": 12147,\n\t\"workpapers\": 23303,\n\t\"professionally\": 7690,\n\t\"put\": 1445,\n\t\"Countdown\": 12764,\n\t\"Vera\": 28930,\n\t\"grassy\": 9419,\n\t\"EVER\": 11857,\n\t\"crucible\": 27308,\n\t\"Orders\": 19882,\n\t\"Aplo.\": 27878,\n\t\"Barton\": 23342,\n\t\"1348\": 25375,\n\t\"circulatory\": 21706,\n\t\"kill\": 6775,\n\t\"ENRON.XLS\": 21422,\n\t\"Magic\": 10314,\n\t\"shallow\": 9377,\n\t\"wishing\": 32176,\n\t\"yu\": 12501,\n\t\"speaker’s\": 14833,\n\t\"grandmother\": 8698,\n\t\"imitation\": 30239,\n\t\"Wikinews\": 10195,\n\t\"Light\": 2094,\n\t\"exhaust\": 28460,\n\t\"Waves\": 8972,\n\t\"www.caem.org\": 22797,\n\t\"ʻŌlelo\": 7557,\n\t\"appraisal\": 11551,\n\t\"even\": 84,\n\t\"comb\": 27153,\n\t\"CHANGE\": 28187,\n\t\"AI\": 8274,\n\t\"whittle\": 11108,\n\t\"nonbondad\": 21429,\n\t\"reconcile\": 15521,\n\t\"gotten\": 6724,\n\t\"Expressway\": 17459,\n\t\"Lexus\": 28694,\n\t\"peopled\": 30932,\n\t\"desisted\": 27180,\n\t\"maniac\": 25882,\n\t\"Semaine\": 10121,\n\t\"responding\": 7257,\n\t\"intense\": 8361,\n\t\"picked\": 2015,\n\t\">----------------------------------------------------------------------------|\": 22022,\n\t\"Vernon\": 24760,\n\t\"transplant\": 17741,\n\t\"feminism\": 25703,\n\t\"Thuma\": 1984,\n\t\"Ali\": 16822,\n\t\"Nang\": 19197,\n\t\"vests\": 24283,\n\t\"Programs\": 23362,\n\t\"Roussos\": 32934,\n\t\"Calculation\": 21635,\n\t\"Minh\": 27545,\n\t\"to\": 152,\n\t\"blankly\": 32958,\n\t\"life\": 3097,\n\t\"START\": 14277,\n\t\"waving\": 10042,\n\t\"involves\": 2262,\n\t\"eh\": 31309,\n\t\"Gravesend\": 30893,\n\t\"bulb\": 2091,\n\t\"Turística\": 17011,\n\t\"recognising\": 13193,\n\t\"Col.\": 19228,\n\t\"Python\": 27351,\n\t\"TIME\": 24018,\n\t\"linen\": 9110,\n\t\"Crime\": 24279,\n\t\"Conditional\": 30152,\n\t\"municipal\": 13218,\n\t\"realistic\": 10760,\n\t\"Amants\": 5483,\n\t\"Lantern\": 12889,\n\t\"Latin\": 3373,\n\t\"farewell\": 12551,\n\t\"Rorschach\": 9572,\n\t\"succeeded\": 18778,\n\t\"lobster\": 25169,\n\t\"11:36\": 23443,\n\t\"comedy\": 4091,\n\t\"panko\": 29591,\n\t\"favour\": 4376,\n\t\"flutter\": 30876,\n\t\"zeitgeist\": 11131,\n\t\"transformed\": 14920,\n\t\"––\": 17604,\n\t\"armies\": 18883,\n\t\"reversed\": 29408,\n\t\"5,500,000\": 15675,\n\t\"tax-gatherer\": 31008,\n\t\"deed\": 21284,\n\t\"BED\": 11867,\n\t\"unforgivable\": 18613,\n\t\"SCHEDULE\": 22310,\n\t\"Disgusting\": 28672,\n\t\"phrases\": 5659,\n\t\"cosplayer\": 12623,\n\t\"geyser\": 16688,\n\t\"1590's\": 25428,\n\t\"spine\": 9855,\n\t\"SAC-D\": 2580,\n\t\"procedure\": 7150,\n\t\"Gerry\": 23837,\n\t\"passionately\": 30795,\n\t\"3.5\": 22412,\n\t\"Ortiz\": 22294,\n\t\"Assurance\": 27022,\n\t\"plague\": 25374,\n\t\"sun-dial\": 32686,\n\t\"decentralized\": 13301,\n\t\"Noori\": 12099,\n\t\"LIKE\": 11868,\n\t\"Laser\": 26723,\n\t\"blinds\": 8137,\n\t\"Jack\": 4902,\n\t\"acrid\": 9153,\n\t\"Kabul\": 12104,\n\t\"Andreas\": 13087,\n\t\"visiting\": 5944,\n\t\"warping\": 15539,\n\t\"1,650,000\": 23470,\n\t\"thrilling\": 31870,\n\t\"Engine\": 29809,\n\t\"clarity\": 14608,\n\t\"'scopes\": 10651,\n\t\"1600's\": 17657,\n\t\"knives\": 25570,\n\t\"XSD\": 30115,\n\t\"Consumers\": 23885,\n\t\"denying\": 12119,\n\t\"cheating\": 18011,\n\t\"Series\": 4189,\n\t\"referendum\": 12671,\n\t\"rotating\": 12905,\n\t\"companion's\": 18199,\n\t\"Breakout\": 4098,\n\t\"Communist\": 10943,\n\t\"rationale\": 12668,\n\t\"limes\": 16204,\n\t\"exceeded\": 9360,\n\t\"repository\": 2410,\n\t\"motion\": 3239,\n\t\"Natsu\": 4603,\n\t\"Kedourie's\": 30651,\n\t\"experiencing\": 10114,\n\t\"Fagan\": 22352,\n\t\"unapologetic\": 29651,\n\t\"gorgeous\": 10637,\n\t\"Houson\": 21650,\n\t\"/\": 123,\n\t\"2003's\": 5747,\n\t\"compensation\": 7213,\n\t\"blooded\": 16359,\n\t\"evaluating\": 647,\n\t\"eyewitness\": 18558,\n\t\"overweight\": 32497,\n\t\"Chocolate\": 17827,\n\t\"parchment\": 32255,\n\t\"e-mail\": 11075,\n\t\"ball\": 9674,\n\t\"coordinator's\": 20948,\n\t\"joystick\": 26790,\n\t\"precedence\": 31257,\n\t\"TASTES\": 32481,\n\t\"storefronts\": 16513,\n\t\"besieged\": 14779,\n\t\"financially\": 12279,\n\t\"routinely\": 14677,\n\t\"Lucia\": 16492,\n\t\"Electricity\": 21065,\n\t\"Blaine@ENRON_DEVELOPMENT\": 23776,\n\t\"object\": 1056,\n\t\"who'd\": 27253,\n\t\"list\": 1160,\n\t\"tiptoe\": 31821,\n\t\"laboring\": 14596,\n\t\"94720-5180\": 22450,\n\t\"Church's\": 12735,\n\t\"Valley\": 3569,\n\t\"infant\": 28084,\n\t\"mechanism\": 910,\n\t\"satisfied\": 7436,\n\t\"Pitt\": 16265,\n\t\"magnetic\": 5493,\n\t\"Alamo\": 14777,\n\t\"extant\": 2763,\n\t\"Motherwell\": 21168,\n\t\"Pool\": 21810,\n\t\"portrayed\": 4174,\n\t\"866\": 17536,\n\t\"Kermie\": 5316,\n\t\"subway\": 12936,\n\t\"Doctorow\": 7656,\n\t\"spontaneously\": 31851,\n\t\"Princess\": 16130,\n\t\"0590854950\": 16673,\n\t\"Bosnian\": 19895,\n\t\"align\": 14526,\n\t\"constraints\": 19070,\n\t\"misogyny\": 25709,\n\t\"expressionless\": 25553,\n\t\"lugubrious\": 31128,\n\t\"Knowledge\": 10797,\n\t\"Guangzhou\": 4498,\n\t\"radicals\": 18811,\n\t\"splash\": 6244,\n\t\"Time\": 8125,\n\t\"Hubble\": 14604,\n\t\"Caesarea\": 30778,\n\t\"flora\": 17217,\n\t\"interpret\": 7272,\n\t\"MARCH\": 14098,\n\t\"Yiu-chung\": 12496,\n\t\"harp\": 31653,\n\t\"utilise\": 16353,\n\t\"ex-husband\": 12813,\n\t\"markets\": 10804,\n\t\"Nasim\": 22909,\n\t\"revenge\": 13600,\n\t\"Mauritania\": 20368,\n\t\"scanning\": 1641,\n\t\"Miriam\": 3788,\n\t\"heifers\": 21857,\n\t\"horribly\": 9401,\n\t\"http://www.adiccp.org/home/default.asp\": 18728,\n\t\"O'Rourke\": 5861,\n\t\"Reilly\": 24307,\n\t\"smash-up\": 31230,\n\t\"Java\": 2288,\n\t\"PUTS\": 22328,\n\t\"McCullough\": 23755,\n\t\"sandalled\": 32501,\n\t\"behave\": 15489,\n\t\"gist\": 15574,\n\t\"revoke\": 20266,\n\t\"picket\": 23162,\n\t\"ENE\": 20988,\n\t\"servant\": 19355,\n\t\"wedges\": 28876,\n\t\"Music\": 3498,\n\t\"road\": 6231,\n\t\"11:05\": 23508,\n\t\"Accountabilities\": 23620,\n\t\"http://www.wikihow.com/wikiHow:Carbon-Neutral\": 10790,\n\t\"diplomats\": 19669,\n\t\"Fernandel\": 5391,\n\t\"Decoud\": 25537,\n\t\"http://www.equinecaninefeline.com/catalog/abode-large-metal-cage-liberta-free-delivery-p-6679.html\": 26871,\n\t\"sacking\": 27113,\n\t\"deployments\": 25865,\n\t\"Paniotis\": 32867,\n\t\"posting\": 12683,\n\t\"resolutions\": 14224,\n\t\"Connection\": 25821,\n\t\"Seidensticker\": 4712,\n\t\"supercuts\": 28667,\n\t\"patio\": 9126,\n\t\"damaging\": 13490,\n\t\"Wear\": 17370,\n\t\"millet\": 27796,\n\t\"king's\": 16841,\n\t\"A1\": 17575,\n\t\"citizenship\": 27476,\n\t\"discussion\": 2517,\n\t\"Capital\": 8229,\n\t\"Delight\": 29842,\n\t\"pc\": 26310,\n\t\"EXACTLY\": 24929,\n\t\"Vietnamese\": 26506,\n\t\"María\": 5602,\n\t\"punishing\": 18540,\n\t\"mole\": 28487,\n\t\"slippers\": 17669,\n\t\"fool\": 17786,\n\t\"coalition\": 18759,\n\t\"grained\": 582,\n\t\"Hmmm\": 11159,\n\t\"attributing\": 21349,\n\t\"postacetabular\": 2869,\n\t\"Seinfeld\": 29378,\n\t\"appropriate\": 2156,\n\t\"overview\": 1001,\n\t\"morelias\": 28496,\n\t\"luckily\": 31954,\n\t\"Ages\": 27103,\n\t\"divorces\": 25586,\n\t\"western\": 12848,\n\t\"exempt\": 31433,\n\t\"P&L\": 22319,\n\t\"Sharif's\": 18854,\n\t\"inherited\": 14829,\n\t\"Storm\": 20346,\n\t\"remission\": 28044,\n\t\"lavatory\": 30551,\n\t\"Hana\": 4681,\n\t\"legalizing\": 10543,\n\t\"registrar's\": 27470,\n\t\"Luis\": 5507,\n\t\"Obligation\": 24874,\n\t\"NYMEX\": 21009,\n\t\"authorizing\": 22284,\n\t\"farms\": 8093,\n\t\"concept\": 1724,\n\t\"compounds\": 15375,\n\t\"socialising\": 32895,\n\t\"blackline\": 21719,\n\t\"Strambler\": 23749,\n\t\"numerous\": 1949,\n\t\"Katrina's\": 24440,\n\t\"gunpowder\": 26952,\n\t\"twines\": 16983,\n\t\"Just\": 6449,\n\t\"canadian\": 26740,\n\t\"revive\": 19016,\n\t\"producers\": 8077,\n\t\"rebirth\": 16410,\n\t\"humour\": 28679,\n\t\"Laureate\": 25868,\n\t\"engine\": 12811,\n\t\"Cereal\": 10502,\n\t\"fiercely\": 14784,\n\t\"predetermined\": 19067,\n\t\"eyewitnesses\": 19763,\n\t\"Fedexed\": 23226,\n\t\"matter\": 6402,\n\t\"503/464-7927\": 21391,\n\t\"OK\": 9882,\n\t\"Least\": 19481,\n\t\"spell\": 22099,\n\t\"Truly\": 15844,\n\t\"Pinot\": 16197,\n\t\"parakeet\": 26278,\n\t\"sliding\": 7388,\n\t\"lamps\": 30869,\n\t\"Registrar\": 27471,\n\t\"litttle\": 28630,\n\t\"interval\": 1667,\n\t\"plazas\": 16995,\n\t\"oblivious\": 19699,\n\t\"wrapped\": 6857,\n\t\"parrot\": 27209,\n\t\"hiking\": 15956,\n\t\"weedy\": 9500,\n\t\"08/16/2000\": 22115,\n\t\"expansive\": 32776,\n\t\"Dykman\": 21478,\n\t\"probably've\": 6755,\n\t\"skincare\": 15712,\n\t\"Inner\": 17582,\n\t\"contemplates\": 14951,\n\t\"230\": 29240,\n\t\"Hamma\": 20365,\n\t\"kiss\": 29756,\n\t\"ceremony\": 3398,\n\t\"Funkhouser\": 23145,\n\t\"Sunday\": 6152,\n\t\"lol\": 24239,\n\t\"#review\": 8256,\n\t\"Cyanogen\": 26163,\n\t\"DVD\": 27575,\n\t\"folders\": 30201,\n\t\"Hôpital\": 4028,\n\t\"1910\": 3348,\n\t\"Action\": 14249,\n\t\"madness\": 30428,\n\t\"Sweat\": 18404,\n\t\"Cake\": 28305,\n\t\"microns\": 11388,\n\t\"accelerations\": 15545,\n\t\"couldn't\": 6656,\n\t\"Specialist\": 21025,\n\t\"appologized\": 29137,\n\t\"fold\": 12750,\n\t\"dominoes\": 30907,\n\t\"organizing\": 4409,\n\t\"urge\": 11588,\n\t\"adorned\": 13426,\n\t\"Aeron\": 22766,\n\t\"overcrowded\": 26324,\n\t\"orchestra\": 16415,\n\t\"PM\": 13933,\n\t\"year\": 3397,\n\t\"personality\": 5181,\n\t\"http://www.thetruthseeker.co.uk/article.asp?id=4503\": 20249,\n\t\"hovered\": 30272,\n\t\"Lego\": 17945,\n\t\"reformulated\": 13829,\n\t\"out-house\": 32455,\n\t\"Introduction\": 332,\n\t\"contracted\": 19883,\n\t\"Methylene\": 27903,\n\t\"41\": 14961,\n\t\"Heald\": 13464,\n\t\"scale\": 1019,\n\t\"risotto\": 28815,\n\t\"spartan\": 24286,\n\t\"loan\": 11534,\n\t\"squeal\": 32219,\n\t\"Hoof\": 27965,\n\t\"garden\": 8881,\n\t\"Tu\": 14867,\n\t\"addressee\": 3731,\n\t\"http://pageturnpro2.com.s3-website-us-east-1.amazonaws.com/Publications/201803/15/83956/PDF/131668002208352000_CPBJ033018WEB.pdf\": 15132,\n\t\"nurture\": 24680,\n\t\"PST\": 23079,\n\t\"Headley\": 12291,\n\t\"there’ll\": 11776,\n\t\"valid\": 13694,\n\t\"flanks\": 30941,\n\t\"26th\": 22348,\n\t\"Martha\": 6718,\n\t\"Low\": 16102,\n\t\"regrets\": 20917,\n\t\"consented\": 5981,\n\t\"fleshing\": 23319,\n\t\"recycling\": 2222,\n\t\"Quinn\": 30228,\n\t\"vacant\": 31694,\n\t\"Darius\": 25388,\n\t\"permeate\": 20282,\n\t\"protections\": 7622,\n\t\"Petruck\": 3791,\n\t\"snacks\": 18155,\n\t\"helmets\": 9275,\n\t\"genre\": 5799,\n\t\"Green\": 14433,\n\t\"paves\": 14927,\n\t\"toenail\": 29405,\n\t\"disciples\": 6638,\n\t\"idol\": 30914,\n\t\"Strategy\": 22416,\n\t\"sealing-wax\": 31267,\n\t\"Outfielder\": 4773,\n\t\"crashes\": 26159,\n\t\"handlebar\": 6172,\n\t\"hindered\": 25305,\n\t\"vocabulary\": 13654,\n\t\"!.\": 28054,\n\t\"deregulation\": 22179,\n\t\"curtain\": 27173,\n\t\"noisy\": 3399,\n\t\"relinquish\": 32781,\n\t\"integration\": 13857,\n\t\"hypnotic\": 17803,\n\t\"punish\": 8757,\n\t\"ceiling\": 4582,\n\t\"beginner\": 26707,\n\t\"Skidmore\": 13321,\n\t\"rule\": 1758,\n\t\"discharge\": 3680,\n\t\"Sketchy\": 29875,\n\t\"sarcastically\": 29926,\n\t\"seasons\": 2944,\n\t\"this\": 137,\n\t\"variation\": 1699,\n\t\"classified\": 14936,\n\t\"wordy\": 24636,\n\t\"celebrates\": 10956,\n\t\"dignitary\": 20510,\n\t\"filing\": 20648,\n\t\"polution\": 25246,\n\t\"absenting\": 19797,\n\t\"49\": 13471,\n\t\"SW\": 21430,\n\t\"review\": 1452,\n\t\"Castle\": 103,\n\t\"Parry\": 1099,\n\t\"Loretta\": 22465,\n\t\"emphasize\": 7175,\n\t\"Weapons\": 14285,\n\t\"Goonewardena\": 28319,\n\t\"Serotonin\": 15762,\n\t\"Objects\": 14969,\n\t\"Désirade\": 16650,\n\t\"Samuel\": 22989,\n\t\"Stéphanie\": 3896,\n\t\"detach\": 27363,\n\t\"Kerry\": 12179,\n\t\"anyones\": 29486,\n\t\"rows\": 21710,\n\t\"vomiting\": 27608,\n\t\"farm\": 8121,\n\t\"Liquidweb\": 28881,\n\t\"actor\": 4081,\n\t\"errors\": 2265,\n\t\"Subcommittee\": 11573,\n\t\"fingernails\": 32287,\n\t\"Nord\": 29332,\n\t\"flown\": 9475,\n\t\"valuing\": 22685,\n\t\"specimens\": 10616,\n\t\"UTH\": 26892,\n\t\"CUISINE\": 28568,\n\t\"freak\": 6801,\n\t\"Klimberg\": 23773,\n\t\"shoreless\": 30860,\n\t\"motor\": 15123,\n\t\"Mom’s\": 8851,\n\t\"cartoon\": 6847,\n\t\"1710\": 3525,\n\t\"attracted\": 3844,\n\t\"ran\": 9318,\n\t\"pale\": 8038,\n\t\"spaceflight\": 24777,\n\t\"pursue\": 1894,\n\t\"embedded\": 7851,\n\t\"SSD\": 23097,\n\t\"soul\": 5091,\n\t\"pegged\": 18301,\n\t\"floors\": 16828,\n\t\"Daniela\": 1500,\n\t\"Credit\": 15224,\n\t\"metres\": 24118,\n\t\"fleeting\": 25024,\n\t\"addresses\": 22391,\n\t\"addicting\": 28522,\n\t\"sectors\": 2130,\n\t\"laundry\": 21318,\n\t\"softly\": 31916,\n\t\"Earlier\": 15056,\n\t\"interviewer\": 23367,\n\t\"hooking\": 18197,\n\t\"poised\": 30412,\n\t\"RI\": 19876,\n\t\"THING\": 27025,\n\t\"musicians\": 11024,\n\t\"pollution\": 1199,\n\t\"gloss\": 5688,\n\t\"externals\": 30374,\n\t\"fantasies\": 30699,\n\t\"Arguably\": 14860,\n\t\"bell\": 8659,\n\t\"updating\": 30057,\n\t\"BRAWLER\": 29360,\n\t\"prodded\": 32920,\n\t\"Suerat\": 21162,\n\t\"Hugh\": 5774,\n\t\"ants\": 10197,\n\t\"Kittie\": 11708,\n\t\"Above\": 14235,\n\t\"accented\": 28658,\n\t\"University\": 16,\n\t\"poems\": 11038,\n\t\"screw\": 18161,\n\t\"11:00\": 15731,\n\t\"flirtatious\": 17996,\n\t\"Gilmore\": 5702,\n\t\"tears\": 11091,\n\t\"Pamphlets\": 17292,\n\t\"Window\": 28108,\n\t\"three–day\": 3664,\n\t\"eager\": 4651,\n\t\"intensified\": 31245,\n\t\"Fits\": 6500,\n\t\"lunch\": 6679,\n\t\"practical\": 7954,\n\t\"baseline\": 10735,\n\t\"lightest\": 21777,\n\t\"bookshop\": 32342,\n\t\"ribbons\": 26658,\n\t\"Universe\": 3006,\n\t\"direction\": 212,\n\t\"predisposed\": 9585,\n\t\"澹\": 14907,\n\t\"Distance\": 15611,\n\t\"Parra\": 23747,\n\t\"compose\": 29833,\n\t\"PRS\": 22866,\n\t\"delivery\": 14521,\n\t\"Notes\": 10924,\n\t\"glamorous\": 10893,\n\t\"Jude\": 18215,\n\t\"sent\": 3604,\n\t\"Y\": 10277,\n\t\"threatens\": 14227,\n\t\"grenade\": 19597,\n\t\"Worm\": 5317,\n\t\"bottleneck\": 13166,\n\t\"07:55\": 21188,\n\t\"Solomon\": 13047,\n\t\"cap\": 23684,\n\t\"Stoker\": 4149,\n\t\"observed\": 1710,\n\t\"one-sided\": 31440,\n\t\"attractive\": 16335,\n\t\"McVeigh\": 24416,\n\t\"mould\": 29299,\n\t\"sympathizer\": 20649,\n\t\"fracture\": 7051,\n\t\"loosely\": 9531,\n\t\"interceptor\": 19191,\n\t\"ships\": 9238,\n\t\"Clinton\": 10418,\n\t\"storage\": 7604,\n\t\"Business\": 15129,\n\t\"lingua\": 10066,\n\t\"correctly\": 7579,\n\t\"missions\": 11313,\n\t\"delegates\": 11439,\n\t\"virtuous\": 10830,\n\t\"Dario\": 13125,\n\t\"genocide\": 19086,\n\t\"Obscurity\": 4678,\n\t\"-----------------------------------------------\": 24595,\n\t\"Prudential\": 28704,\n\t\"birthdays\": 31975,\n\t\"feel\": 1168,\n\t\"Max\": 10118,\n\t\"APPLICATIONS\": 23031,\n\t\"surrendering\": 30698,\n\t\"probe\": 19888,\n\t\"Floridian\": 20772,\n\t\"Talk\": 5243,\n\t\"miracle\": 8566,\n\t\"disclose\": 22502,\n\t\"Flirting\": 17964,\n\t\"Critics\": 4143,\n\t\"experimental\": 177,\n\t\"stands\": 5660,\n\t\"endorsements\": 26090,\n\t\"periodizing\": 27104,\n\t\"petting\": 28938,\n\t\"military's\": 18852,\n\t\"Mertens's\": 13103,\n\t\"invisible\": 30288,\n\t\"reputed\": 14491,\n\t\"slack\": 19772,\n\t\"steak\": 26554,\n\t\"bias\": 580,\n\t\"Hee-Chan\": 13077,\n\t\"Dwibbling\": 6823,\n\t\"Apps\": 28601,\n\t\"Davis\": 7526,\n\t\"firstly\": 4452,\n\t\"swift\": 14463,\n\t\"honors\": 4834,\n\t\"Byrne\": 14458,\n\t\"approximate\": 28625,\n\t\"Examining\": 10182,\n\t\"depend\": 233,\n\t\"Adolf\": 16920,\n\t\"troupe\": 5461,\n\t\"hermit\": 5017,\n\t\"sun\": 9955,\n\t\"Angie\": 22402,\n\t\"websites\": 10814,\n\t\"detailed\": 997,\n\t\"groomed\": 28326,\n\t\"Minutes\": 19187,\n\t\"prayed\": 24315,\n\t\"Nowhere\": 8140,\n\t\"brass\": 19072,\n\t\"Odaras\": 31990,\n\t\"demographic\": 23152,\n\t\"Rev.\": 19924,\n\t\"Ernest\": 3979,\n\t\"Deemed\": 22258,\n\t\"Mama`s\": 21238,\n\t\"sage\": 7236,\n\t\"raising\": 2467,\n\t\"inquiry\": 14899,\n\t\"abandoning\": 18977,\n\t\"succint\": 20252,\n\t\"beginning\": 195,\n\t\"trademarking\": 22498,\n\t\"handicapped\": 25666,\n\t\"WORRY\": 11836,\n\t\"nations\": 11599,\n\t\"traditions\": 14193,\n\t\"literature\": 1046,\n\t\"hand\": 484,\n\t\"CIS\": 16479,\n\t\"carrying\": 2520,\n\t\"thousands\": 6157,\n\t\"Beijing\": 16779,\n\t\"Mother\": 21322,\n\t\"blows\": 9604,\n\t\"adapt\": 15512,\n\t\"certificate\": 25444,\n\t\"annexation\": 18957,\n\t\"tire\": 28692,\n\t\"outfits\": 12617,\n\t\"Freewinds\": 12805,\n\t\"seized\": 12714,\n\t\"nmemdrft8-7-01\": 22311,\n\t\"terms\": 1134,\n\t\"stride\": 26196,\n\t\"319\": 17496,\n\t\"procession\": 10165,\n\t\"causality\": 591,\n\t\"Husseiniyas\": 19299,\n\t\"creases\": 9140,\n\t\"payout\": 23428,\n\t\"GREEDY\": 24848,\n\t\"HIM\": 27953,\n\t\"Brazilian\": 27000,\n\t\"Pag's\": 9639,\n\t\"commemorated\": 3121,\n\t\"Charmaz\": 3073,\n\t\"Roy\": 11403,\n\t\"laptop\": 20624,\n\t\"destined\": 12635,\n\t\"drums\": 11040,\n\t\"Bernoulli\": 3101,\n\t\"scrubbed\": 32207,\n\t\"commanded\": 19781,\n\t\"dynamic\": 5551,\n\t\"Libertarian\": 10376,\n\t\"rankings\": 1467,\n\t\"trillions\": 24514,\n\t\"pigsty\": 32190,\n\t\"curves\": 15575,\n\t\"Evening\": 12025,\n\t\"Hasidim\": 30515,\n\t\"F.O.B.\": 23015,\n\t\"sump\": 26669,\n\t\"oregano\": 29641,\n\t\"Łódź\": 16856,\n\t\"worldwide\": 13450,\n\t\"Angostura\": 10521,\n\t\"Death\": 25999,\n\t\"Amazon\": 15302,\n\t\"Ingredients\": 17837,\n\t\"observations\": 2590,\n\t\"meant\": 649,\n\t\"stressful\": 16088,\n\t\"seminal\": 3695,\n\t\"BACK\": 29677,\n\t\"Follow\": 1963,\n\t\"bladder\": 24064,\n\t\"sloping\": 10007,\n\t\"artistically\": 7691,\n\t\"dwindled\": 12947,\n\t\"apply\": 2283,\n\t\"Fairway\": 16594,\n\t\"subreports\": 30213,\n\t\"pagan\": 13520,\n\t\"back-to-nature\": 32954,\n\t\"nonexistent\": 28949,\n\t\"behaviors\": 3100,\n\t\"networks\": 2941,\n\t\"Pager\": 21461,\n\t\"1,613\": 25763,\n\t\"comments\": 3067,\n\t\"stringing\": 27632,\n\t\"Tyler’s\": 8704,\n\t\"doubled\": 13114,\n\t\"Tsar's\": 4356,\n\t\"Computational\": 3673,\n\t\"treacherous\": 9494,\n\t\"CONFIDENTIALITY\": 21685,\n\t\"disappeared\": 8888,\n\t\"saved\": 7927,\n\t\"Breathing\": 6833,\n\t\"Convicts\": 31906,\n\t\"Architecture\": 4474,\n\t\"robot\": 12092,\n\t\"silverware\": 28614,\n\t\"material\": 3030,\n\t\"Critical\": 23596,\n\t\"dozens\": 12884,\n\t\"exercises\": 5630,\n\t\"Natural\": 1033,\n\t\"poetic\": 1112,\n\t\"Olsens'\": 5766,\n\t\"poet\": 4631,\n\t\"shipping\": 8156,\n\t\"3.\": 2364,\n\t\"complained\": 11964,\n\t\"context\": 1559,\n\t\"Daddy\": 14178,\n\t\"rules\": 750,\n\t\"respectively\": 738,\n\t\"carcinoma\": 18672,\n\t\"understands\": 19172,\n\t\"customizing\": 30079,\n\t\"scuffling\": 32881,\n\t\"apologizing\": 31683,\n\t\"expiration\": 16036,\n\t\"Mare\": 27976,\n\t\"melted\": 15276,\n\t\"blindly\": 20072,\n\t\"Habits\": 21549,\n\t\"finesse\": 23357,\n\t\"#finances\": 7829,\n\t\"engagement\": 5827,\n\t\"mouths\": 26380,\n\t\"hopefuls\": 12966,\n\t\"V\": 8603,\n\t\"corresponding\": 5657,\n\t\"M1\": 17560,\n\t\"Magicians\": 10313,\n\t\"Faster\": 23992,\n\t\"curator\": 13284,\n\t\"enormous\": 1739,\n\t\"mob\": 14319,\n\t\"202.785.0786\": 22814,\n\t\"fart\": 30502,\n\t\"Heritage\": 16780,\n\t\"Cummings\": 30712,\n\t\"OCD\": 13588,\n\t\"starship\": 15581,\n\t\"oblivion\": 28871,\n\t\"offense\": 17346,\n\t\"Zócalo\": 16958,\n\t\"Thurday\": 11440,\n\t\"scruff\": 27696,\n\t\"sorts\": 13565,\n\t\"19.5\": 5188,\n\t\"Agrarian\": 7942,\n\t\"legit\": 24253,\n\t\"Search\": 24496,\n\t\"Ellon\": 4274,\n\t\"Pioneers\": 26041,\n\t\"prolly\": 29708,\n\t\"夏子\": 4606,\n\t\"Beghe\": 12347,\n\t\"Disclaimer\": 23498,\n\t\"restless\": 30520,\n\t\"Overtures\": 11284,\n\t\"pickling\": 19789,\n\t\"Lihaib\": 19337,\n\t\"kidney\": 24082,\n\t\"damage\": 6763,\n\t\"appointing\": 31753,\n\t\"unmarked\": 32532,\n\t\"breakthroughs\": 8362,\n\t\"carbon\": 7922,\n\t\"exams\": 9899,\n\t\"irritate\": 12015,\n\t\"远\": 14905,\n\t\"flatten\": 26484,\n\t\"confidence\": 1428,\n\t\"pip\": 31795,\n\t\"FRIES\": 28573,\n\t\"woods\": 31011,\n\t\"helmet\": 9312,\n\t\"NPP\": 12421,\n\t\"BTS\": 15876,\n\t\"backcloth\": 31110,\n\t\"worms\": 9470,\n\t\"Baileys\": 10519,\n\t\"99\": 19878,\n\t\"Gut\": 32645,\n\t\"Razaq\": 19325,\n\t\"suspected\": 5144,\n\t\"Stormtroopers\": 12612,\n\t\"Kickstarter\": 13773,\n\t\"deprecating\": 17993,\n\t\"repurposed\": 16867,\n\t\"compelled\": 4657,\n\t\"rise\": 982,\n\t\"Turgenev's\": 5456,\n\t\"Kobey\": 28079,\n\t\"Hemisphere\": 15299,\n\t\"jitney\": 16529,\n\t\"turkey\": 21967,\n\t\"lying\": 10059,\n\t\"categorically\": 7427,\n\t\"capped\": 17359,\n\t\"setups\": 10267,\n\t\"Cara\": 8776,\n\t\"conceptual\": 2545,\n\t\"Won't\": 32419,\n\t\"sponoring\": 24519,\n\t\"Th-thank\": 32124,\n\t\"testimony\": 20777,\n\t\"responsible\": 799,\n\t\"bulk\": 10702,\n\t\"TERM\": 11862,\n\t\"salinity\": 2561,\n\t\"headset\": 8553,\n\t\"Ihara\": 4720,\n\t\"stimuli\": 1964,\n\t\"priced\": 10526,\n\t\"smartest\": 27517,\n\t\"Botero\": 2531,\n\t\"landmark\": 15973,\n\t\"Mahault\": 16693,\n\t\"Ghaza\": 13181,\n\t\"Recommend\": 28373,\n\t\"Christians\": 5168,\n\t\"424\": 12483,\n\t\"Switchboard\": 24389,\n\t\"Endangered\": 25910,\n\t\"recreational\": 16376,\n\t\"aching\": 32109,\n\t\"linking\": 1393,\n\t\"P.M.\": 14591,\n\t\"Klingberg\": 1575,\n\t\"cultural\": 1979,\n\t\"Armstrong\": 4176,\n\t\"twilight\": 9956,\n\t\"haven't\": 9823,\n\t\"mirrors\": 17692,\n\t\"extinction\": 9972,\n\t\"from\": 8,\n\t\"bank\": 7299,\n\t\"netting\": 21647,\n\t\"reconciling\": 22599,\n\t\"Richardson\": 23610,\n\t\"Raw\": 20024,\n\t\"grandsons\": 21752,\n\t\"Gazing\": 31627,\n\t\"Cargill\": 21598,\n\t\"rebuilding\": 11541,\n\t\"Ministry\": 13153,\n\t\"testifying\": 13734,\n\t\"over-priced\": 28960,\n\t\"http://news.bbc.co.uk/2/hi/programmes/this_world/4446342.stm\": 20157,\n\t\"drones\": 13955,\n\t\"07/18/2000\": 22176,\n\t\"899-4425\": 22011,\n\t\"investment\": 13907,\n\t\"brianp@aiglincoln.com\": 23794,\n\t\"thx\": 27779,\n\t\"84,121\": 12385,\n\t\"Driving\": 17579,\n\t\"virginia\": 26273,\n\t\"aboard\": 9095,\n\t\"announced\": 5831,\n\t\"chances\": 11550,\n\t\"5C\": 9763,\n\t\"http://www.cic.gc.ca/english/contacts/index.asp\": 27032,\n\t\"Shankbone\": 11126,\n\t\"transports\": 21705,\n\t\"hid\": 9278,\n\t\"Kubler\": 18233,\n\t\"passage\": 5939,\n\t\"Practicing\": 15511,\n\t\"Warming\": 25205,\n\t\"deceive\": 25693,\n\t\"non-proliferation\": 14246,\n\t\"backbiting\": 31327,\n\t\"Sudan\": 12122,\n\t\"Judiciary\": 14109,\n\t\"losing\": 8458,\n\t\"Klingon\": 12600,\n\t\"gibbering\": 32140,\n\t\"Mrs\": 28848,\n\t\"paraphernalia\": 20170,\n\t\"perishable\": 8085,\n\t\"am\": 3932,\n\t\"segment\": 5287,\n\t\"4.5\": 19057,\n\t\"collisions\": 24558,\n\t\"Babalon\": 20210,\n\t\"staircases\": 4575,\n\t\"bright\": 9120,\n\t\"perseverance\": 10874,\n\t\"Currency\": 21670,\n\t\"Hosanna\": 19451,\n\t\"Subforms\": 30212,\n\t\"crystal-clear\": 31513,\n\t\"travelled\": 5102,\n\t\"Start\": 15887,\n\t\"re-embarking\": 4310,\n\t\"quivered\": 31196,\n\t\"careers\": 20885,\n\t\"thereby\": 600,\n\t\"Alito\": 24704,\n\t\"sumo\": 26934,\n\t\"Siege\": 3575,\n\t\"Whenever\": 18264,\n\t\"layer\": 24043,\n\t\"turbines\": 13956,\n\t\"Goldsmith\": 7415,\n\t\"wielding\": 24140,\n\t\"quote\": 5085,\n\t\"redundant\": 15154,\n\t\"jejudo\": 26586,\n\t\"sushi\": 26936,\n\t\"Ballroom\": 29267,\n\t\"Unfortunalty\": 29628,\n\t\"coax\": 7776,\n\t\"./\": 23656,\n\t\"Visas\": 26467,\n\t\"parma\": 32643,\n\t\"stem\": 1440,\n\t\"TCO\": 21812,\n\t\"manoeuvre\": 25715,\n\t\"Vikings\": 16436,\n\t\"Cintra\": 23193,\n\t\"skyscrapers\": 15589,\n\t\"22\": 585,\n\t\"marginalized\": 8036,\n\t\"Nashua\": 25218,\n\t\"McCallum\": 26034,\n\t\"Forthwith\": 30930,\n\t\"Tatum\": 17132,\n\t\"broomstick\": 32044,\n\t\"Aug.\": 24137,\n\t\"bodytalk\": 28052,\n\t\"????\": 28193,\n\t\"There's\": 6277,\n\t\"orbiting\": 14623,\n\t\"lawlessness\": 19614,\n\t\"funerals\": 29093,\n\t\"Beware\": 28307,\n\t\"Yanhee\": 26639,\n\t\"321\": 14910,\n\t\"COURT\": 25721,\n\t\"Trail\": 17503,\n\t\"Adidas\": 15960,\n\t\"http://i.imgur.com/Xytex.jpg\": 27166,\n\t\"5/18\": 20935,\n\t\"town's\": 24436,\n\t\"conveniently\": 26908,\n\t\"basically\": 6270,\n\t\"whereabouts\": 19351,\n\t\"Winter\": 10355,\n\t\"Enforcement\": 14163,\n\t\"niche\": 29806,\n\t\"generally\": 1945,\n\t\"oldest\": 14625,\n\t\"F\": 5683,\n\t\"lived\": 2846,\n\t\"permutations\": 31881,\n\t\"Mmm\": 6766,\n\t\"Driver's\": 10822,\n\t\"MAY\": 29939,\n\t\"combating\": 31430,\n\t\"gullibility\": 30446,\n\t\"hop\": 26986,\n\t\"Leon's\": 28196,\n\t\"JFK\": 16540,\n\t\"excite\": 14963,\n\t\"Skin\": 2206,\n\t\"Patty\": 8593,\n\t\"Tigers\": 19003,\n\t\"governor\": 7866,\n\t\"policing\": 14136,\n\t\"aftermath\": 16923,\n\t\"caught\": 4754,\n\t\"all\": 441,\n\t\"Dasovich\": 21347,\n\t\"Grab\": 18100,\n\t\"yan\": 12414,\n\t\"ill-placed\": 32373,\n\t\"Adriatic\": 5019,\n\t\"efficacy\": 603,\n\t\"la\": 3439,\n\t\"televised\": 10880,\n\t\"Strasse\": 16922,\n\t\"SELL\": 11921,\n\t\"I.=\": 16804,\n\t\"such\": 491,\n\t\"healed\": 7068,\n\t\"bubble\": 18140,\n\t\"precisely\": 19103,\n\t\"Night\": 4743,\n\t\"logging\": 10274,\n\t\"red-haired\": 32135,\n\t\"Jehad\": 19619,\n\t\"divorcing\": 7608,\n\t\"North\": 560,\n\t\"extreme\": 8149,\n\t\"passionate\": 4643,\n\t\"otherwise\": 1756,\n\t\"unfolds\": 8313,\n\t\"needs\": 1942,\n\t\"tumbling\": 9205,\n\t\"|--------+----------------------->\": 22017,\n\t\"lied\": 29182,\n\t\"wage\": 7156,\n\t\"demonstrates\": 678,\n\t\"Umm\": 20088,\n\t\"Range\": 28106,\n\t\"insight\": 229,\n\t\"coincidence\": 1782,\n\t\"confident\": 14440,\n\t\"snags\": 12054,\n\t\"vice\": 7719,\n\t\"grazing\": 28979,\n\t\"portrayal\": 11134,\n\t\"botanicals\": 15933,\n\t\"http://www.thekcrachannel.com/news/4503872/detail.html\": 19435,\n\t\"multi\": 26729,\n\t\"noted\": 1165,\n\t\"HE\": 28750,\n\t\"Joe_Lardy@cargill.com\": 21596,\n\t\"OPEN\": 11509,\n\t\"subject\": 573,\n\t\"picnic\": 16783,\n\t\"innovator\": 15095,\n\t\"channeled\": 20470,\n\t\"accumulation\": 25846,\n\t\"François\": 5412,\n\t\"Government\": 11579,\n\t\"lever\": 9733,\n\t\"Owwww\": 9896,\n\t\"premiering\": 13790,\n\t\"refrig.\": 11687,\n\t\"erase\": 14137,\n\t\"understandable\": 20563,\n\t\"Repair\": 28426,\n\t\"Vo\": 27732,\n\t\"re-trained\": 29580,\n\t\"entered\": 4300,\n\t\"Americas\": 15263,\n\t\"you're\": 6202,\n\t\"GOVERNMENT\": 24452,\n\t\"Thoughts\": 29175,\n\t\"dorm\": 15560,\n\t\"guarantees\": 766,\n\t\"gloom\": 16156,\n\t\"mild\": 9874,\n\t\"'n\": 29571,\n\t\"gleaming\": 9431,\n\t\"Che\": 12404,\n\t\"7.64\": 1656,\n\t\"Blue\": 15756,\n\t\"Enjoy\": 16234,\n\t\"tops\": 17362,\n\t\"motorcycle\": 18644,\n\t\"Feet\": 9333,\n\t\"vistas\": 9413,\n\t\"Efforts\": 4615,\n\t\"24.2\": 15533,\n\t\"crowds\": 12941,\n\t\"basing\": 18081,\n\t\"LIPA\": 23775,\n\t\"gratified\": 14465,\n\t\"Standard\": 10506,\n\t\"Claudia\": 12473,\n\t\"plying\": 31525,\n\t\"blaze\": 30985,\n\t\"Balkans\": 30844,\n\t\"Shiu\": 12509,\n\t\"Attitude\": 28210,\n\t\"diagram\": 15610,\n\t\"vomited\": 28498,\n\t\"Somehow\": 6774,\n\t\"#istandwithahmed\": 12216,\n\t\"lost\": 3986,\n\t\"plunge\": 17967,\n\t\"inform\": 79,\n\t\"commanding\": 9287,\n\t\"3/8/00\": 22526,\n\t\"topical\": 607,\n\t\"Her\": 4491,\n\t\"BY\": 8015,\n\t\"Santos\": 2393,\n\t\"adjust\": 2881,\n\t\"Palaces\": 16821,\n\t\"markup\": 12788,\n\t\"HANDLE\": 21525,\n\t\"BP\": 21578,\n\t\"armament\": 25791,\n\t\"debuted\": 4922,\n\t\"emissions\": 2177,\n\t\"gravel\": 26708,\n\t\"castle\": 13612,\n\t\"Jacob\": 100,\n\t\"plowed\": 9113,\n\t\"formal\": 5634,\n\t\"uncoiled\": 31063,\n\t\"wicked\": 17828,\n\t\"Paperback\": 28385,\n\t\"stampedes\": 13176,\n\t\"Arabs\": 11187,\n\t\"shocks\": 30576,\n\t\"sony\": 26208,\n\t\"sugar\": 13535,\n\t\"negligent\": 7410,\n\t\"autism\": 1395,\n\t\"invoke\": 7503,\n\t\"courses\": 14549,\n\t\"impact\": 51,\n\t\"916\": 22376,\n\t\"mergers\": 22549,\n\t\"Bland\": 27623,\n\t\"stamina\": 24037,\n\t\"inspiring\": 28474,\n\t\"smirking\": 32268,\n\t\"Awaiting\": 23043,\n\t\"hydrocele\": 24081,\n\t\"Dinghies\": 17250,\n\t\"outlier\": 15662,\n\t\"blandness\": 31903,\n\t\"RELIGIOUS\": 24647,\n\t\"penultimate\": 3032,\n\t\"guilty\": 15465,\n\t\"prints\": 13268,\n\t\"Directorate\": 19654,\n\t\"KilliFish\": 27838,\n\t\"luna's\": 29706,\n\t\"operate\": 19515,\n\t\"bones\": 2790,\n\t\"wavelength\": 13754,\n\t\"positive\": 408,\n\t\"Brendler\": 6523,\n\t\"deserves\": 12863,\n\t\"beige\": 16166,\n\t\"robust\": 1757,\n\t\"Into\": 5234,\n\t\"60,760\": 12454,\n\t\"Today\": 2070,\n\t\"Sempra\": 23609,\n\t\"amalgam\": 25739,\n\t\"innocently\": 31926,\n\t\"Hits\": 5327,\n\t\"Cabernet\": 16226,\n\t\"enlargement\": 2901,\n\t\"consideration\": 5669,\n\t\"Inch\": 32151,\n\t\"false\": 8761,\n\t\"politely\": 21355,\n\t\"420072\": 24467,\n\t\"MILF\": 20685,\n\t\"soldier's\": 26002,\n\t\"additive\": 28029,\n\t\"stain\": 29153,\n\t\"moans\": 9898,\n\t\"reluctant\": 23636,\n\t\"Well\": 6030,\n\t\"dog’s\": 8976,\n\t\"Kusanagi\": 8259,\n\t\"Tycoon\": 5511,\n\t\"reads\": 13010,\n\t\"retaliated\": 12883,\n\t\"Entities\": 22046,\n\t\"handily\": 25447,\n\t\"Papacy\": 6543,\n\t\"offline\": 25330,\n\t\"atrophy\": 28005,\n\t\"birdy\": 26854,\n\t\"windier\": 27835,\n\t\"Conservatoire\": 5346,\n\t\"sideways\": 9881,\n\t\"Colors\": 16035,\n\t\"puffing\": 23933,\n\t\"Languages\": 2408,\n\t\"Symbiote\": 12606,\n\t\"penny\": 28452,\n\t\"departures\": 16498,\n\t\"Queen\": 4487,\n\t\"JPL\": 11327,\n\t\"Yiddish\": 30538,\n\t\"Oklahoma\": 5554,\n\t\"drying\": 20796,\n\t\"Phenology\": 25110,\n\t\"categorizing\": 15026,\n\t\"US\": 3444,\n\t\"cayenne\": 15841,\n\t\"(:\": 26340,\n\t\"bta\": 27013,\n\t\"Hanged\": 31159,\n\t\"tees\": 20107,\n\t\"artist's\": 6089,\n\t\"Ariel\": 18881,\n\t\"statements\": 7193,\n\t\"Minister\": 12171,\n\t\"Teco\": 22683,\n\t\"Stadium\": 4509,\n\t\"reproduction\": 5692,\n\t\"determiner\": 24801,\n\t\"408\": 25913,\n\t\"Armada\": 21769,\n\t\"retain\": 11673,\n\t\"trafficking\": 12176,\n\t\"http://digon_va.tripod.com/Chernobyl.htm\": 18697,\n\t\"IV\": 20913,\n\t\"Appel\": 21154,\n\t\"Mind\": 24616,\n\t\"programme\": 20920,\n\t\"eMachines\": 26319,\n\t\"justices\": 7560,\n\t\"temporarily\": 19538,\n\t\"Pea\": 27154,\n\t\"islands\": 16256,\n\t\"pagen\": 29125,\n\t\"sings\": 13765,\n\t\"habitation\": 19087,\n\t\"Stevens\": 28563,\n\t\"laying\": 7097,\n\t\"Yack\": 6977,\n\t\"simplified\": 2319,\n\t\"WORTH\": 28906,\n\t\"Julien\": 5305,\n\t\"expressed\": 2028,\n\t\"process\": 1522,\n\t\"Thank\": 6306,\n\t\"Conditions\": 23022,\n\t\"yorkedness\": 29644,\n\t\"SAID\": 29691,\n\t\"Excel\": 29817,\n\t\"We’ve\": 8814,\n\t\"ARe\": 29958,\n\t\"height\": 3290,\n\t\"Specifically\": 20002,\n\t\"hardest\": 10705,\n\t\"stress\": 17815,\n\t\"Diwaniya\": 19288,\n\t\"fourth\": 4589,\n\t\"retracted\": 28314,\n\t\"cyborg\": 8292,\n\t\"successive\": 14509,\n\t\"career-wise\": 25259,\n\t\"distracting\": 15705,\n\t\"August\": 2126,\n\t\"purposefully\": 15211,\n\t\"universal\": 1752,\n\t\"uncertainly\": 10036,\n\t\"759933\": 21428,\n\t\"Casualty\": 23784,\n\t\"mixed\": 7385,\n\t\"mid-August\": 17163,\n\t\"reciprocate\": 17344,\n\t\"sunburn\": 2203,\n\t\"podcasters\": 10910,\n\t\"waggled\": 31986,\n\t\"Aerogel\": 11365,\n\t\"Jenna's\": 5263,\n\t\"roads\": 11628,\n\t\"pipette\": 27901,\n\t\"dilated\": 31195,\n\t\"Ibrahim\": 19136,\n\t\"keen\": 17642,\n\t\"Brideshead\": 4122,\n\t\"Garibaldi\": 25546,\n\t\"divorced\": 27970,\n\t\"Content\": 10973,\n\t\"ambiance\": 16986,\n\t\"Lysa\": 21382,\n\t\"records\": 9938,\n\t\"Microscope\": 11359,\n\t\"AS\": 13477,\n\t\"frenzy\": 18268,\n\t\"teeth\": 7013,\n\t\"Brown\": 9331,\n\t\"todays\": 28912,\n\t\"holes\": 17354,\n\t\"#'s\": 22320,\n\t\"!!!!!!!!!!!!!!!!!!!!!\": 26328,\n\t\"Auckland\": 102,\n\t\"CONTAINING\": 11926,\n\t\"Bank\": 18786,\n\t\"Use\": 1493,\n\t\"Guatemala\": 15386,\n\t\"acceptance\": 4724,\n\t\"chaotic\": 13652,\n\t\"landlocked\": 19656,\n\t\"curated\": 682,\n\t\"Relleno\": 28532,\n\t\"greeted\": 14441,\n\t\"poetically\": 32499,\n\t\"W\": 16564,\n\t\"turkistan\": 27757,\n\t\"pr-\": 6754,\n\t\"cacao\": 15333,\n\t\"Murungi\": 14558,\n\t\"courts\": 7414,\n\t\"patent\": 7923,\n\t\"patron’s\": 15458,\n\t\"revolve\": 17609,\n\t\"jingle\": 8658,\n\t\"jet\": 16175,\n\t\"inning\": 4885,\n\t\"Il\": 25470,\n\t\"Irish\": 4450,\n\t\"prevented\": 14428,\n\t\"FFFF\": 10359,\n\t\"they'll\": 6798,\n\t\"right\": 782,\n\t\"Pet\": 26422,\n\t\"Russell's\": 3376,\n\t\"avenue\": 16790,\n\t\"Burnell\": 12962,\n\t\"specimen\": 10663,\n\t\"SALAD\": 29671,\n\t\"Carrano\": 2770,\n\t\"warfare\": 12877,\n\t\"texting\": 26145,\n\t\"confidants\": 30675,\n\t\"Miranda\": 5605,\n\t\"wizard's\": 32240,\n\t\"elf\": 32130,\n\t\"Democrat\": 14438,\n\t\"substantiating\": 22662,\n\t\"game\": 751,\n\t\"BAY\": 28576,\n\t\"A'nandamu'rti\": 24034,\n\t\"resemblance\": 29994,\n\t\"gooseberry\": 16189,\n\t\"whistleblowing\": 19401,\n\t\"Corn\": 15314,\n\t\"Bexar\": 29908,\n\t\"awareness\": 4728,\n\t\"hund\": 1733,\n\t\"angst\": 8430,\n\t\"Kinsler\": 4949,\n\t\"Dreams\": 24003,\n\t\"despondently\": 31202,\n\t\"disciplined\": 14056,\n\t\"Robin\": 16289,\n\t\"reborn\": 17062,\n\t\"Disaster\": 11528,\n\t\"ruts\": 8335,\n\t\"fundamentally\": 1876,\n\t\"extend\": 2371,\n\t\"113\": 26037,\n\t\"Galleries\": 13290,\n\t\"defied\": 23673,\n\t\"19\": 527,\n\t\"leon.branom@enron.com\": 21147,\n\t\"earmuffs\": 26077,\n\t\"sea-going\": 31148,\n\t\"sticky\": 31987,\n\t\"Dr\": 4431,\n\t\"nearest\": 16536,\n\t\"intuition\": 24641,\n\t\"privilege\": 14425,\n\t\"2543\": 24761,\n\t\"Wolak\": 23347,\n\t\"construe\": 7265,\n\t\"hustle\": 15784,\n\t\"interferometers\": 2604,\n\t\"Bilmes\": 25867,\n\t\"US$\": 12293,\n\t\"toys\": 2968,\n\t\"overhead\": 32105,\n\t\"940\": 26222,\n\t\"product\": 10564,\n\t\"fabolous\": 28215,\n\t\"diffuse\": 15326,\n\t\"Eve\": 3794,\n\t\"objective\": 2355,\n\t\"intial\": 21198,\n\t\"Huber\": 22762,\n\t\"45r.p.m.\": 32472,\n\t\"enfurates\": 20032,\n\t\"silhouette\": 11433,\n\t\"foxes\": 26660,\n\t\"1505\": 5149,\n\t\"Denmark's\": 17209,\n\t\"disputes\": 19161,\n\t\"Morrell\": 26126,\n\t\"Kate\": 5759,\n\t\"Receipt\": 22026,\n\t\"CruiseCompete\": 27234,\n\t\"chartering\": 16287,\n\t\"cook\": 16128,\n\t\"Bobby\": 20827,\n\t\"how's\": 31897,\n\t\"patriotic\": 11043,\n\t\"Goddard\": 22488,\n\t\"revalue\": 20915,\n\t\"treaty\": 20816,\n\t\"Huskers\": 21179,\n\t\"thierry.poibeau@ens.fr\": 970,\n\t\"Cashion\": 23137,\n\t\"mutant\": 2269,\n\t\"congratulated\": 15502,\n\t\"deadline\": 12981,\n\t\"Chevalier\": 3873,\n\t\"leitmotivs\": 16953,\n\t\"Grille\": 26560,\n\t\"defuses\": 13708,\n\t\"Alibek\": 20699,\n\t\"melt\": 27291,\n\t\"Risk\": 20919,\n\t\"272,000\": 23467,\n\t\"atm\": 26499,\n\t\"confined\": 24882,\n\t\"quitting\": 28925,\n\t\"eluded\": 30454,\n\t\"posterity\": 24675,\n\t\"Agenda\": 31505,\n\t\"'07\": 29361,\n\t\"herb\": 17704,\n\t\"guild\": 24257,\n\t\"relates\": 7391,\n\t\"done\": 1602,\n\t\"RBIs\": 4841,\n\t\"Charge\": 28201,\n\t\"gardeners\": 16622,\n\t\"analyses\": 583,\n\t\"sidewalk\": 7614,\n\t\"boss's\": 27570,\n\t\"Saw\": 16059,\n\t\"removed\": 7643,\n\t\"knit\": 14035,\n\t\"discrimination\": 27268,\n\t\"McDonalds\": 17436,\n\t\"rooftops\": 8991,\n\t\"hydration\": 27619,\n\t\"lobbyist\": 19115,\n\t\"offers\": 228,\n\t\"mid-January\": 21321,\n\t\"devotional\": 134,\n\t\"GO\": 11878,\n\t\"toy\": 26855,\n\t\"exhausting\": 12937,\n\t\"blotted\": 32854,\n\t\"23,000\": 25819,\n\t\"memoir\": 3250,\n\t\"americans\": 27119,\n\t\"seventh\": 13892,\n\t\"below\": 1933,\n\t\"Lynne\": 6347,\n\t\"Trivia\": 22097,\n\t\"coats\": 28080,\n\t\"Glenn\": 16423,\n\t\"thriller\": 5769,\n\t\"notes\": 5171,\n\t\"CNS\": 31460,\n\t\"defendant’s\": 14680,\n\t\"wisely\": 18342,\n\t\"Europe\": 3295,\n\t\"Mapping\": 26234,\n\t\"ROLLS\": 28802,\n\t\"narrator\": 11291,\n\t\"ideologized\": 13242,\n\t\"diaper\": 18168,\n\t\"newly\": 5884,\n\t\"peg\": 18299,\n\t\"Bangladesh\": 19126,\n\t\"corrections\": 2637,\n\t\"Petri\": 13845,\n\t\"asset\": 19384,\n\t\"vs\": 14938,\n\t\"vegan\": 5333,\n\t\"oversight\": 13636,\n\t\"intoxicating\": 20142,\n\t\"Rainer\": 5512,\n\t\"Notice\": 20998,\n\t\"CSIS\": 25772,\n\t\"Interface\": 26786,\n\t\"SUCKS\": 28663,\n\t\"continues\": 3780,\n\t\"flagship\": 14522,\n\t\"2014\": 250,\n\t\"run\": 4883,\n\t\"loss\": 858,\n\t\"Canyon\": 23397,\n\t\"Idiot\": 9902,\n\t\"Jet\": 11990,\n\t\"2nd\": 2246,\n\t\"topple\": 27724,\n\t\"thirds\": 7085,\n\t\"Hermann\": 3995,\n\t\"boil\": 6215,\n\t\"consume\": 2144,\n\t\"57\": 26066,\n\t\"menu\": 15456,\n\t\"L'espalier\": 28222,\n\t\"Vet's\": 29630,\n\t\"11:25\": 23797,\n\t\"650\": 25831,\n\t\"Projected\": 26046,\n\t\"Wherever\": 20671,\n\t\"Aries\": 25249,\n\t\"discreet\": 4644,\n\t\"dreary\": 30300,\n\t\"reliance\": 21496,\n\t\"chorion\": 27896,\n\t\"Levico\": 11253,\n\t\"BJs\": 29282,\n\t\"shoulders\": 8836,\n\t\"sleepers\": 20875,\n\t\"callum\": 26303,\n\t\"formatted\": 21714,\n\t\"pup\": 27390,\n\t\"interactivity\": 30165,\n\t\"jiffy\": 7912,\n\t\"college\": 1285,\n\t\"Sells\": 7314,\n\t\"#systemanalysis\": 7658,\n\t\"Cancun\": 16453,\n\t\"Duchatelet\": 3980,\n\t\"poker\": 23706,\n\t\"Hammond’s\": 7878,\n\t\"mmbtu\": 21397,\n\t\"frazzled\": 7723,\n\t\"take\": 747,\n\t\"formalisms\": 3751,\n\t\"attached\": 2858,\n\t\"nightclub\": 16694,\n\t\"grandpa\": 6819,\n\t\"420\": 4968,\n\t\"Preheat\": 17865,\n\t\"outrunners\": 10081,\n\t\"scents\": 15937,\n\t\"Travelling\": 27235,\n\t\"hooting\": 32024,\n\t\"em\": 6158,\n\t\"launch\": 2570,\n\t\"Bellini\": 5148,\n\t\"incapacitated\": 9624,\n\t\"Tenured\": 333,\n\t\"cynangon\": 26169,\n\t\"dischord\": 23962,\n\t\"span\": 1561,\n\t\"Paine\": 7944,\n\t\"spilled\": 32771,\n\t\"etiquette\": 15426,\n\t\"veer\": 32783,\n\t\"54th\": 13109,\n\t\"evolve\": 7253,\n\t\"http://www.wyndham.com/Washington_DC/default.cfm\": 22815,\n\t\"timings\": 29279,\n\t\"need\": 1030,\n\t\"habitat\": 16269,\n\t\"stockpiles\": 18904,\n\t\"Art\": 5,\n\t\"wanton\": 31229,\n\t\"Guantanamo\": 26073,\n\t\"outlines\": 9982,\n\t\"hype\": 29621,\n\t\"Ca\": 8634,\n\t\"10:45\": 15852,\n\t\"07/14/2000\": 22122,\n\t\"Fujairah\": 26766,\n\t\"LOW\": 28407,\n\t\"mauling\": 24120,\n\t\"paving\": 20562,\n\t\"burger\": 26703,\n\t\"instantaneously\": 29216,\n\t\"cum\": 5561,\n\t\"identification\": 10593,\n\t\"aversions\": 16165,\n\t\"fan\": 2973,\n\t\"Shots\": 5542,\n\t\"metaphysical\": 15159,\n\t\"nurtured\": 19616,\n\t\"republics\": 20538,\n\t\"Cruden\": 4298,\n\t\"goblin-driven\": 32315,\n\t\"6.1\": 23475,\n\t\"stretchy\": 15747,\n\t\"steer\": 14523,\n\t\"somewhat\": 6021,\n\t\"rubble\": 6861,\n\t\"starchy\": 16169,\n\t\"Dogwood\": 29351,\n\t\"flexed\": 17674,\n\t\"CDEC's\": 22710,\n\t\"sentences\": 3811,\n\t\"pieces\": 4573,\n\t\"bullet\": 7354,\n\t\"collections\": 132,\n\t\"favorite\": 5836,\n\t\"interpreting\": 15322,\n\t\"Feathered\": 15378,\n\t\"Universal\": 16085,\n\t\"upset\": 8847,\n\t\"unravelling\": 19457,\n\t\"Theft\": 29722,\n\t\"star's\": 32003,\n\t\"POINTS\": 26329,\n\t\"wheat\": 13451,\n\t\"Incitement\": 20452,\n\t\"479,000\": 15672,\n\t\"WILLING\": 11920,\n\t\"lacks\": 15089,\n\t\"Gravity\": 15535,\n\t\"steamboats\": 31067,\n\t\"rites\": 13162,\n\t\"Smiling\": 30252,\n\t\"4G\": 26158,\n\t\"committed\": 11265,\n\t\"harmony\": 14885,\n\t\"MOVE\": 28405,\n\t\"Vestry\": 24659,\n\t\"media\": 2433,\n\t\"nightlife\": 16661,\n\t\"apricot\": 17892,\n\t\"Iraqiya\": 19258,\n\t\"instinctively\": 9638,\n\t\"E.T.\": 22443,\n\t\"3d\": 26828,\n\t\"outlived\": 12801,\n\t\"41.\": 14982,\n\t\"Wandering\": 30376,\n\t\"disabled\": 10868,\n\t\"INSULTING\": 27356,\n\t\"insurgents\": 18600,\n\t\"Birkholm\": 17310,\n\t\"Comeback\": 16390,\n\t\"Lautrec\": 21161,\n\t\"02\": 22342,\n\t\"TC\": 26443,\n\t\"hooded\": 32688,\n\t\"beads\": 31295,\n\t\"ti\": 29552,\n\t\"accomplishments\": 5540,\n\t\"Atahualpa\": 25463,\n\t\"defense\": 7349,\n\t\"Orla\": 26154,\n\t\"furnishings\": 28653,\n\t\"www.designofashion.com\": 29812,\n\t\"James\": 4401,\n\t\"Spokesperson\": 12184,\n\t\"night-owl\": 30317,\n\t\"50\": 2386,\n\t\"Arosa\": 11727,\n\t\"misinterpretation\": 576,\n\t\"escaped\": 8314,\n\t\"song\": 17989,\n\t\"introduce\": 2286,\n\t\"http://tong.visitkorea.or.kr/cms/resource/81/188181_image2_1.jpg\": 26583,\n\t\"bagels\": 28096,\n\t\"NDI\": 29135,\n\t\"Done\": 21267,\n\t\"Ebor\": 17550,\n\t\"02:02\": 23460,\n\t\"restaurant\": 11438,\n\t\"dealing\": 5795,\n\t\"iii\": 23253,\n\t\"Fahim\": 19706,\n\t\"2301\": 21884,\n\t\"Ant\": 15616,\n\t\"---------------------------------------------------------------------------\": 24321,\n\t\"7034\": 21897,\n\t\"declarations\": 19068,\n\t\"Bangladeshi\": 19497,\n\t\"lv.\": 22199,\n\t\"masquerade\": 25654,\n\t\"ancestry\": 3340,\n\t\"Rough\": 27407,\n\t\"supply\": 8158,\n\t\"alert\": 12844,\n\t\"mailings\": 20605,\n\t\"Apr\": 21930,\n\t\"rock\": 6227,\n\t\"WalMart\": 27513,\n\t\"Ghirlandaio\": 5084,\n\t\"USI\": 13263,\n\t\"moustache\": 32050,\n\t\"Legit\": 24250,\n\t\"Started\": 12916,\n\t\"rail\": 17133,\n\t\"unofficial\": 19545,\n\t\"catches\": 18312,\n\t\"Merseyside-Egypt\": 32662,\n\t\"Vol.\": 25422,\n\t\"Posted\": 23947,\n\t\"extends\": 25857,\n\t\"Humanistic\": 6560,\n\t\"resolved\": 14210,\n\t\"monitored\": 22577,\n\t\"modem\": 26526,\n\t\"Festus\": 31743,\n\t\"employee\": 20712,\n\t\"identity\": 3984,\n\t\"brink\": 19009,\n\t\"cucumbers\": 27442,\n\t\"Magazines\": 10709,\n\t\"purple\": 11471,\n\t\"inflating\": 1245,\n\t\"Mourvèdre\": 16249,\n\t\"Monet's\": 22194,\n\t\"geography\": 8136,\n\t\"weights\": 22278,\n\t\"Entrepreneurial\": 15053,\n\t\"Wen\": 19174,\n\t\"Harbor\": 17103,\n\t\"pluralism\": 855,\n\t\"Uranus\": 25318,\n\t\"Eusebius\": 4960,\n\t\"comforts\": 27913,\n\t\"Thibaut\": 13111,\n\t\"Aztec\": 15288,\n\t\"squares\": 10282,\n\t\"suited\": 10970,\n\t\"Eng\": 11766,\n\t\"identities\": 30391,\n\t\"trackless\": 14012,\n\t\"opens\": 8291,\n\t\"Cure\": 26232,\n\t\"limb\": 2773,\n\t\"fallen\": 6032,\n\t\"Listed\": 4806,\n\t\"shelf\": 627,\n\t\"engineer\": 3511,\n\t\"revenue\": 7913,\n\t\"lawyers\": 19928,\n\t\"trinity\": 6297,\n\t\"PLATE\": 21530,\n\t\"industry\": 3018,\n\t\"ABOUT\": 11837,\n\t\"Nationally\": 7904,\n\t\"album\": 8746,\n\t\"Kent\": 11738,\n\t\"cleared\": 12004,\n\t\"alcoholics\": 13527,\n\t\"0.3\": 18046,\n\t\"COB\": 22375,\n\t\"bolted\": 32115,\n\t\"Brittany\": 29383,\n\t\"articulating\": 21846,\n\t\"packer\": 27550,\n\t\"superlative\": 9608,\n\t\"rosewater\": 17907,\n\t\"Jelly\": 15947,\n\t\"ideation\": 24097,\n\t\"confront\": 11295,\n\t\"amnesty\": 12988,\n\t\"tall\": 6851,\n\t\"funding\": 18781,\n\t\"GET\": 11918,\n\t\"Finland\": 10276,\n\t\"bartending\": 5219,\n\t\"welfare\": 7859,\n\t\"Aldo\": 25106,\n\t\"counselor\": 28934,\n\t\"chopping\": 11954,\n\t\"estimation\": 13473,\n\t\"regrettable\": 20896,\n\t\"Analyst\": 21145,\n\t\"intruders\": 29819,\n\t\"Hiroshima\": 24431,\n\t\"non-violence\": 20334,\n\t\"pipes\": 30314,\n\t\"http://www.cic.gc.ca/english/immigrate/skilled/assess/index.asp\": 27076,\n\t\"Friends\": 11516,\n\t\"Noel\": 22854,\n\t\"11/1/01\": 21439,\n\t\"QE2's\": 32561,\n\t\"semi-automatic\": 26725,\n\t\"Mandros\": 19943,\n\t\"RAPHAEL\": 25335,\n\t\"Presidential\": 5711,\n\t\"glory\": 5980,\n\t\"mainstreamed\": 14537,\n\t\"Human\": 6628,\n\t\"Paul\": 3744,\n\t\"duties\": 13023,\n\t\"Puree\": 17780,\n\t\"Quebecker\": 24104,\n\t\"acutely\": 18880,\n\t\"interim\": 5588,\n\t\"emerge\": 12358,\n\t\"Rosemont\": 23638,\n\t\"dom.\": 27143,\n\t\"yorkshire\": 26184,\n\t\"Tires\": 28695,\n\t\"Beyond\": 2404,\n\t\"Oscar\": 8401,\n\t\"echo\": 9213,\n\t\"Places\": 16373,\n\t\"withdrawal\": 19312,\n\t\"yacht\": 30916,\n\t\"separates\": 15651,\n\t\"oozes\": 17191,\n\t\"pottery\": 15341,\n\t\"Volumes\": 21435,\n\t\"Ideation\": 24096,\n\t\"adherent\": 20200,\n\t\"Misto\": 28298,\n\t\"joints\": 24056,\n\t\"Missed\": 29087,\n\t\"improved\": 372,\n\t\"Black\": 9796,\n\t\"corrected\": 2683,\n\t\"exploited\": 3331,\n\t\"sirremático\": 1148,\n\t\"Feed\": 6690,\n\t\"liberation\": 16927,\n\t\"Premadasa\": 19056,\n\t\"Shannon\": 28374,\n\t\"hadn't\": 9609,\n\t\"hindrance\": 18291,\n\t\"symbiosis\": 8354,\n\t\"vision\": 4570,\n\t\"Damascus\": 14218,\n\t\"vain\": 19376,\n\t\"seaward\": 30898,\n\t\"quarrel\": 31826,\n\t\"statue\": 6850,\n\t\"x.x\": 26850,\n\t\"ITS\": 29669,\n\t\"immensely\": 18985,\n\t\"graduates\": 31936,\n\t\"constructed\": 15374,\n\t\"slapping\": 32233,\n\t\"bettering\": 15724,\n\t\"off-\": 13649,\n\t\"totalling\": 29609,\n\t\"doctor's\": 16159,\n\t\"bye\": 7076,\n\t\"reintroduction\": 25044,\n\t\"Boi\": 25493,\n\t\"Alia\": 12238,\n\t\"survivors\": 14191,\n\t\"Supreme\": 7518,\n\t\"ALONE\": 29442,\n\t\"practice\": 170,\n\t\"simplifies\": 30056,\n\t\"Hera\": 13515,\n\t\"http://www.speedtest.net/result/1155244347.png\": 28200,\n\t\"Andrei\": 30774,\n\t\"Yvan\": 22698,\n\t\"mercy\": 6602,\n\t\"Vincenti\": 13226,\n\t\"myTouch\": 26157,\n\t\"craziest\": 29436,\n\t\"euros\": 13216,\n\t\"scraping\": 30501,\n\t\"hurting\": 6944,\n\t\"Weasley\": 32075,\n\t\"Pachomius\": 5913,\n\t\"Interiors\": 7131,\n\t\"fatigue\": 31944,\n\t\"adage\": 11230,\n\t\"requirement\": 19233,\n\t\"Treaty\": 14278,\n\t\"vegetable\": 17850,\n\t\"Federation\": 18662,\n\t\"MDGs\": 14530,\n\t\"ringed\": 9167,\n\t\"Moussaoui's\": 20582,\n\t\"America's\": 11099,\n\t\"continuous\": 620,\n\t\"LaGrange\": 28472,\n\t\"segmented\": 2049,\n\t\"Matters\": 11286,\n\t\"self-questioning\": 31625,\n\t\"Lung\": 12897,\n\t\"instilling\": 24300,\n\t\"cunclude\": 26393,\n\t\"youthful\": 24039,\n\t\"Moreau\": 5340,\n\t\"reluctance\": 14728,\n\t\"2019\": 2250,\n\t\"Dari\": 22775,\n\t\"Sunburn\": 25793,\n\t\"baseball\": 4797,\n\t\"•\": 14585,\n\t\"november\": 26389,\n\t\"door\": 6079,\n\t\"Wonder\": 27837,\n\t\"comparability\": 1880,\n\t\"surrounding\": 1415,\n\t\"bypass\": 23287,\n\t\"generalized\": 3747,\n\t\"crow\": 9147,\n\t\"12:45\": 23541,\n\t\"visitor\": 329,\n\t\"shove\": 13714,\n\t\"trips\": 11001,\n\t\"screener\": 13778,\n\t\"gauge\": 17605,\n\t\"shied\": 32001,\n\t\"month's\": 21588,\n\t\"Committee\": 11012,\n\t\"minorities\": 13879,\n\t\"spicy\": 16223,\n\t\"Nato\": 19899,\n\t\"chinese\": 27252,\n\t\"interracial\": 24682,\n\t\"kosas\": 24046,\n\t\"ambitious\": 5983,\n\t\"reclusive\": 19020,\n\t\"bidders\": 22732,\n\t\"volcanic\": 16268,\n\t\"friend(s)\": 18106,\n\t\"vaulted\": 24794,\n\t\"packet\": 13657,\n\t\"Fixtures\": 28417,\n\t\"rugs\": 31558,\n\t\"Jafar\": 20598,\n\t\"barbers\": 31918,\n\t\"responded\": 1991,\n\t\"regulators\": 23702,\n\t\"Winchester\": 5699,\n\t\"renewing\": 14260,\n\t\"uncommitted\": 25948,\n\t\"crashing\": 30381,\n\t\"1/31\": 23392,\n\t\"tasty\": 17756,\n\t\"aiming\": 18241,\n\t\"monotony\": 28992,\n\t\"undergoing\": 12276,\n\t\"today's\": 6912,\n\t\"ALL\": 24740,\n\t\"Porpoise\": 17232,\n\t\"clapping\": 17799,\n\t\"council\": 12374,\n\t\"Mandir\": 27418,\n\t\"legitimated\": 30668,\n\t\"@jasthenurse\": 15794,\n\t\"Talked\": 21320,\n\t\"Barclays\": 22622,\n\t\"Muskogee\": 17442,\n\t\"indirectly\": 348,\n\t\"Madrid\": 5614,\n\t\"designing\": 2284,\n\t\"compliment\": 12001,\n\t\"co-star\": 5828,\n\t\"muddy\": 15958,\n\t\"10:56\": 22116,\n\t\"headcount\": 22607,\n\t\"713-790-2605\": 23632,\n\t\"canapés\": 32467,\n\t\"Litterarum\": 27649,\n\t\"negotiated\": 19069,\n\t\"letter\": 3870,\n\t\"William\": 4079,\n\t\"Additional\": 2011,\n\t\"unknowns\": 13375,\n\t\"institutionalism\": 14929,\n\t\"Hoped\": 26585,\n\t\"Reynolds\": 15223,\n\t\"unwillingness\": 20015,\n\t\"cohesive\": 24291,\n\t\"SPARKS\": 22946,\n\t\"fulfil\": 24102,\n\t\"multipolar\": 14294,\n\t\"Horrible\": 28666,\n\t\"wether\": 20326,\n\t\"triggering\": 1119,\n\t\"1492\": 15264,\n\t\"terrible\": 5035,\n\t\"Philippine\": 19369,\n\t\"lane\": 28098,\n\t\"vividly\": 30547,\n\t\"situ\": 110,\n\t\"notch\": 19234,\n\t\"retrieval\": 2634,\n\t\"08:23\": 21618,\n\t\"sizable\": 7918,\n\t\"biked\": 9835,\n\t\"Baffled\": 28146,\n\t\"spider\": 9910,\n\t\"Streett\": 11813,\n\t\"reverie\": 9713,\n\t\"starved\": 16937,\n\t\"skittles\": 18446,\n\t\"airway\": 26491,\n\t\"Moussaoui\": 20633,\n\t\"federal\": 7594,\n\t\"anesthesia\": 7031,\n\t\"day's\": 29310,\n\t\"displaying\": 10362,\n\t\"reaffirmed\": 25289,\n\t\"Sat.\": 11740,\n\t\"way\": 257,\n\t\"outside\": 8644,\n\t\"forming\": 17682,\n\t\"creep\": 17958,\n\t\"Webb\": 14582,\n\t\"shrug\": 19352,\n\t\"tracked\": 19587,\n\t\"recorder\": 6094,\n\t\"05/17/99\": 23209,\n\t\"Kettner\": 23887,\n\t\"gash\": 24134,\n\t\"fusion\": 27215,\n\t\"pillowcase\": 32122,\n\t\"reserve\": 7330,\n\t\"Steven\": 6936,\n\t\"theropod\": 2874,\n\t\"Moslems\": 20381,\n\t\"aside\": 5133,\n\t\"proclaimers\": 25697,\n\t\"anyone’s\": 9566,\n\t\"10:05\": 22104,\n\t\"coupled\": 14566,\n\t\"differently\": 14379,\n\t\"NCRC4ME\": 24654,\n\t\"1Q\": 23404,\n\t\"Cranston\": 24311,\n\t\"Bahamas\": 27496,\n\t\"Vic\": 29372,\n\t\"Rights\": 706,\n\t\"Rewind\": 5288,\n\t\"perp\": 20865,\n\t\"videotape\": 18737,\n\t\"exhibits\": 889,\n\t\"advised\": 17388,\n\t\"deviation\": 1692,\n\t\"Dagger\": 19190,\n\t\"Alexandre\": 3955,\n\t\"extermination\": 25015,\n\t\"motives\": 3886,\n\t\"integrates\": 1612,\n\t\"signatures\": 13256,\n\t\"lauding\": 9649,\n\t\"Gustavo\": 29043,\n\t\"endangering\": 31427,\n\t\"Royale\": 25009,\n\t\"Burrito\": 29767,\n\t\"Tame\": 8821,\n\t\"housing\": 12182,\n\t\"Papa\": 32513,\n\t\"sanded\": 25542,\n\t\"CITIC\": 2240,\n\t\"ain't\": 7119,\n\t\"stomachs\": 16722,\n\t\"footprints\": 9747,\n\t\"Paralympic\": 10837,\n\t\"interests\": 3366,\n\t\"BRINGS\": 28751,\n\t\"Bonanza\": 29556,\n\t\"pushed\": 3336,\n\t\"comforting\": 29790,\n\t\"time\": 71,\n\t\"man-\": 6582,\n\t\"Ramsay\": 15779,\n\t\"f*ck\": 27700,\n\t\"blankets\": 10060,\n\t\"equivalents\": 5679,\n\t\"ding\": 17922,\n\t\"dropping\": 18689,\n\t\"explanatorily\": 15153,\n\t\"migrations\": 25116,\n\t\"1797\": 14896,\n\t\"Demand\": 21815,\n\t\"stuck\": 9650,\n\t\"bending\": 2795,\n\t\"gentile\": 30558,\n\t\"163\": 12126,\n\t\"appealing\": 7981,\n\t\"Pants\": 17356,\n\t\"targets\": 18485,\n\t\"Parmesan\": 25128,\n\t\"oppose\": 854,\n\t\"Radianz\": 22005,\n\t\"Hal\": 13705,\n\t\"24.7\": 15602,\n\t\"Annoy\": 17909,\n\t\"autobiography\": 3474,\n\t\"commenced\": 17063,\n\t\"pruned\": 32101,\n\t\"albeit\": 25038,\n\t\"whiting\": 25166,\n\t\"online?u=mayursha&m=g&t=1\": 25331,\n\t\"DOING\": 24856,\n\t\"Barbaric\": 31412,\n\t\"equaling\": 24381,\n\t\"footwear\": 27822,\n\t\"cauliflower\": 27445,\n\t\"Sixties\": 25579,\n\t\"Chips\": 15824,\n\t\"spouses\": 21212,\n\t\"message\": 5666,\n\t\"karol\": 27412,\n\t\"rightholder\": 31454,\n\t\"Frankfurt\": 3143,\n\t\"appellees\": 7536,\n\t\"residences\": 16901,\n\t\"W2\": 7145,\n\t\"particle\": 11339,\n\t\"uncontroversial\": 13727,\n\t\"Transformational\": 29036,\n\t\"expunging\": 31803,\n\t\"foresaw\": 27299,\n\t\"obs-\": 6559,\n\t\"intents\": 27725,\n\t\"Management\": 10842,\n\t\"Figured\": 23654,\n\t\"Talking\": 5241,\n\t\"progress\": 344,\n\t\"Johnson@ENRON\": 23360,\n\t\"§\": 14967,\n\t\"Zawahiri's\": 20626,\n\t\"Lords\": 7216,\n\t\"09:37\": 23423,\n\t\"remarkably\": 1857,\n\t\"studios\": 25675,\n\t\"Nylon\": 22280,\n\t\"interpreted\": 7277,\n\t\"TIMES\": 28566,\n\t\"concede\": 7610,\n\t\"ticket\": 11086,\n\t\"212\": 22010,\n\t\"baksheesh\": 30737,\n\t\"Rains\": 3034,\n\t\"Nicobar\": 19535,\n\t\"criticising\": 19666,\n\t\"hello\": 8689,\n\t\"mid-February\": 20840,\n\t\"collaborators\": 30691,\n\t\"carved\": 10281,\n\t\"grams\": 18037,\n\t\"thank\": 6323,\n\t\"wood\": 9749,\n\t\"Cookie\": 27804,\n\t\"barclays\": 22588,\n\t\"hallway\": 8994,\n\t\"anchor\": 30875,\n\t\"clash\": 24578,\n\t\"overtook\": 24571,\n\t\"World\": 613,\n\t\"laughing\": 8649,\n\t\"Dividends\": 7915,\n\t\"Beverly\": 16032,\n\t\"Somewhere\": 29625,\n\t\"straightforward\": 17687,\n\t\"chew\": 27206,\n\t\"codex\": 15408,\n\t\"freighter\": 19582,\n\t\"myriad\": 7674,\n\t\"Secondly\": 14935,\n\t\"Flex\": 25292,\n\t\"dived\": 32160,\n\t\"Swiffer\": 26285,\n\t\"planing\": 22162,\n\t\"Also\": 10968,\n\t\"Ice\": 10673,\n\t\"93\": 8500,\n\t\"opt\": 10781,\n\t\"120,000\": 15690,\n\t\"silky\": 31556,\n\t\"exact\": 1882,\n\t\"cancer\": 2208,\n\t\"Plague\": 25497,\n\t\"owed\": 31395,\n\t\"handed\": 4815,\n\t\"Pomper\": 29852,\n\t\"statues\": 15393,\n\t\"Phillips\": 23142,\n\t\"winding\": 19230,\n\t\"redistribution\": 7860,\n\t\"reopened\": 19965,\n\t\"07:24\": 21189,\n\t\"Transplant\": 17742,\n\t\"totes\": 29970,\n\t\"centers\": 4989,\n\t\"Chalmers'\": 9305,\n\t\"unavailable\": 1411,\n\t\"Guantánamo\": 26071,\n\t\"Architectural\": 4552,\n\t\"concern\": 4717,\n\t\"pirates\": 20429,\n\t\"synthesis\": 2509,\n\t\"Rose\": 4212,\n\t\"olives\": 9185,\n\t\"herring's\": 32437,\n\t\"Impact\": 25151,\n\t\"tunnel\": 10287,\n\t\"provider\": 26739,\n\t\"planets\": 9298,\n\t\"hyperbole\": 13690,\n\t\"Brass\": 27306,\n\t\"adjustments\": 22321,\n\t\"He\": 3114,\n\t\"###\": 24756,\n\t\"until\": 3178,\n\t\"mid-September\": 16163,\n\t\"Formal\": 5682,\n\t\"Soldier\": 30250,\n\t\"Beings\": 13995,\n\t\"12:00\": 22980,\n\t\"vaults\": 32314,\n\t\"gazing\": 9819,\n\t\"Sinyavskys\": 30769,\n\t\"YEARS\": 18671,\n\t\"line\": 1115,\n\t\"beards\": 30516,\n\t\"forbid\": 27334,\n\t\"Environmental\": 13488,\n\t\"misrepresent\": 29184,\n\t\"coauthor\": 13462,\n\t\"contagious\": 9128,\n\t\"absurd\": 12855,\n\t\"Steady\": 19611,\n\t\"brushed\": 30394,\n\t\"Joby\": 27968,\n\t\"belongs\": 7950,\n\t\"species\": 10212,\n\t\"boycott\": 20527,\n\t\"interpolated\": 3939,\n\t\"parochial\": 22643,\n\t\"Crowds\": 27816,\n\t\"Exercitationes\": 3230,\n\t\"gods\": 13513,\n\t\"22nd\": 12528,\n\t\"90th\": 13118,\n\t\"Self\": 25317,\n\t\"spinning\": 30486,\n\t\"Islamophobia\": 12233,\n\t\"deploying\": 14617,\n\t\"negating\": 9313,\n\t\"marker\": 32542,\n\t\"guesswork\": 13823,\n\t\"Rolling\": 13354,\n\t\"Wisconsin\": 25182,\n\t\"needing\": 22627,\n\t\"waiters\": 29001,\n\t\"6:30\": 11747,\n\t\"'71\": 11783,\n\t\"strips\": 25516,\n\t\"ps\": 21652,\n\t\"2030’s\": 14527,\n\t\"Stranger\": 9792,\n\t\"original\": 1823,\n\t\"expectancy\": 8527,\n\t\"unpriced\": 22661,\n\t\"nutritive\": 8202,\n\t\"Draw\": 17795,\n\t\"Shapiro\": 23729,\n\t\"beckoning\": 32514,\n\t\"outbreaks\": 24425,\n\t\"Citizen\": 6282,\n\t\"summer\": 5211,\n\t\"Open\": 2419,\n\t\"members’\": 8243,\n\t\"biographical\": 4182,\n\t\"perpetual\": 10006,\n\t\"summarized\": 15585,\n\t\"supported\": 1919,\n\t\"karma\": 9784,\n\t\"Certeau\": 3094,\n\t\"Arafat\": 13151,\n\t\"Attack\": 25727,\n\t\"Chechnya\": 18829,\n\t\"Foot\": 27980,\n\t\"trendy\": 17074,\n\t\"hostilities\": 24583,\n\t\"gastric\": 24084,\n\t\"forums\": 24225,\n\t\"Suggestion\": 24924,\n\t\"Weyl\": 3996,\n\t\"transport\": 12178,\n\t\"Polaroids\": 13261,\n\t\"Square\": 7088,\n\t\"behind\": 2445,\n\t\"disease\": 13827,\n\t\"Thou\": 25521,\n\t\"bolstered\": 7896,\n\t\"onion\": 15775,\n\t\"flaxen\": 30286,\n\t\"Flames\": 31032,\n\t\"kissed\": 9827,\n\t\"Yoko\": 25629,\n\t\"prepayments\": 23641,\n\t\"thei\": 26419,\n\t\"Caution\": 32272,\n\t\"democratically\": 18848,\n\t\"delusion\": 31115,\n\t\"Filed\": 24555,\n\t\"Mak\": 12407,\n\t\"Users\": 11674,\n\t\"faltering\": 21849,\n\t\"scripts\": 11985,\n\t\"cans\": 6939,\n\t\"n.d.\": 14872,\n\t\"crinkly\": 31667,\n\t\"gain\": 1605,\n\t\"pony\": 26978,\n\t\"HO\": 11798,\n\t\"blurring\": 27177,\n\t\"hunches\": 8834,\n\t\"indomitable\": 11592,\n\t\"extended\": 14279,\n\t\"stalk\": 17761,\n\t\"iw\": 27360,\n\t\"drive\": 5788,\n\t\"Director\": 10846,\n\t\"chairman\": 12653,\n\t\"Assh@%$e\": 29191,\n\t\"Colin\": 3254,\n\t\"Japan\": 3675,\n\t\"908\": 14871,\n\t\"bitmaps\": 30218,\n\t\"rendered\": 24734,\n\t\"chalk\": 13566,\n\t\"Texans'\": 14755,\n\t\"waterway\": 30878,\n\t\"Zeus\": 13514,\n\t\"Adhamiya\": 18566,\n\t\"bolting\": 17754,\n\t\"intermediary\": 24383,\n\t\"OWNER\": 29627,\n\t\"Para\": 23571,\n\t\"Ossendrecht\": 24961,\n\t\"applicable\": 3699,\n\t\"co-owned\": 10508,\n\t\"ridiculously\": 13828,\n\t\"ease\": 14029,\n\t\"Thousands\": 14637,\n\t\"Clarkson\": 29712,\n\t\"leering\": 9493,\n\t\"Allen\": 6996,\n\t\"Going\": 14846,\n\t\"projects\": 10655,\n\t\"Burke\": 14894,\n\t\"TERRIFIED\": 27342,\n\t\"Snap\": 9911,\n\t\"ONE\": 11871,\n\t\"mug\": 15427,\n\t\"@Ryan\": 27644,\n\t\"Instep\": 28235,\n\t\"prioritised\": 22617,\n\t\"Hogwarts\": 16099,\n\t\"over-generalizations\": 20304,\n\t\"Rio\": 14722,\n\t\"Proposal.xls\": 23315,\n\t\"Remington\": 32547,\n\t\"Air\": 13499,\n\t\"1e\": 26058,\n\t\"1999\": 5728,\n\t\"staccato\": 8923,\n\t\"Thirdly\": 26763,\n\t\"hull\": 9995,\n\t\"Hypnotize\": 17781,\n\t\"973-2776\": 23306,\n\t\"surveys\": 564,\n\t\"revitalization\": 16391,\n\t\"wondered\": 9684,\n\t\"gladdened\": 10158,\n\t\"Photographic\": 13292,\n\t\"regulatory\": 21051,\n\t\"crowns\": 28257,\n\t\"unmatched\": 32448,\n\t\"formats\": 30052,\n\t\"Nikon\": 27162,\n\t\"Deffner\": 23761,\n\t\"radius\": 2331,\n\t\"astronomical\": 15394,\n\t\"feathers\": 6769,\n\t\"write\": 7112,\n\t\"Moro\": 20684,\n\t\"sin\": 6562,\n\t\"actins\": 23778,\n\t\"feed\": 6684,\n\t\"kinda\": 6360,\n\t\"135th\": 10765,\n\t\"Sri\": 18973,\n\t\"http://www.dailykos.com/story/2006/5/12/232746/857\": 20261,\n\t\"murdering\": 25587,\n\t\"earliest\": 3228,\n\t\"nervous\": 9279,\n\t\"scene\": 218,\n\t\"complementary\": 1191,\n\t\"holdup\": 30816,\n\t\"STREET\": 24538,\n\t\"Trip\": 27566,\n\t\"plo-\": 7153,\n\t\"collecting\": 622,\n\t\"Disappointed\": 28673,\n\t\"deputy\": 18530,\n\t\"Gwen\": 12605,\n\t\"Foster\": 9330,\n\t\"BJ\": 29283,\n\t\"ideology\": 13241,\n\t\"turned-up\": 31162,\n\t\"Average\": 23481,\n\t\"secessionists\": 19562,\n\t\"Gatineau\": 24109,\n\t\"Oxygen\": 10297,\n\t\"waste\": 7687,\n\t\"it'd\": 13726,\n\t\"Socio-economic\": 14517,\n\t\"interrupting\": 29650,\n\t\"Confer\": 11734,\n\t\"choose\": 1202,\n\t\"fired\": 12857,\n\t\"celebrate\": 14018,\n\t\"wary\": 14731,\n\t\"1:45\": 15873,\n\t\"Petunias\": 32129,\n\t\"surviving\": 13526,\n\t\"lusted\": 32672,\n\t\"retiree\": 7935,\n\t\"Christian’s\": 10108,\n\t\"electoral\": 12673,\n\t\"swim\": 17003,\n\t\"funnel\": 18047,\n\t\"mainly\": 11261,\n\t\"non-social\": 19413,\n\t\"scrape\": 24844,\n\t\"tipped\": 9382,\n\t\"Wai-keung\": 12455,\n\t\"fated\": 18859,\n\t\"rocking\": 8978,\n\t\"destroy\": 12875,\n\t\"magician's\": 20183,\n\t\"campaigner\": 13034,\n\t\"Denis\": 14983,\n\t\"Already\": 3365,\n\t\"tiger\": 32201,\n\t\"blocked\": 18553,\n\t\"extradited\": 19359,\n\t\"Less\": 11963,\n\t\"Negro\": 12021,\n\t\"Carnegie\": 5537,\n\t\"festivals\": 12917,\n\t\"grant\": 1469,\n\t\"Production\": 23039,\n\t\"Moines\": 21445,\n\t\"Parish\": 19453,\n\t\"tuberculosis\": 4755,\n\t\"recommends\": 29927,\n\t\"coincidental\": 20895,\n\t\"CONGRESSMAN\": 11491,\n\t\"spacefaring\": 24796,\n\t\"tundra\": 25146,\n\t\"modicum\": 18954,\n\t\"Ismail\": 19708,\n\t\"03:11\": 23059,\n\t\"basil\": 15897,\n\t\"’’\": 19648,\n\t\"bron-\": 6739,\n\t\"Gilderoy\": 32224,\n\t\"flourishing\": 2436,\n\t\"jalapeno\": 29163,\n\t\"believable\": 8760,\n\t\"taxes\": 7861,\n\t\"Piccadilla\": 25593,\n\t\"artistic\": 7459,\n\t\"Forty-eight\": 32842,\n\t\"geographically\": 32932,\n\t\"interstellar\": 9222,\n\t\"dread\": 32457,\n\t\"oil\": 7881,\n\t\"Palestine\": 14229,\n\t\"studies\": 115,\n\t\"back\": 4312,\n\t\"javascript\": 11361,\n\t\"undertaken\": 2464,\n\t\"recreation\": 11577,\n\t\"walnut\": 17898,\n\t\"Canibal\": 20328,\n\t\"10016\": 22008,\n\t\"Correction\": 21537,\n\t\"Dharma\": 24031,\n\t\"Helps\": 24076,\n\t\"thickened\": 31138,\n\t\"form\": 1113,\n\t\"self-will\": 32805,\n\t\"tendencies\": 7983,\n\t\"Stan\": 10509,\n\t\"Airbnb\": 15100,\n\t\"Kalikhola\": 19624,\n\t\"sunless\": 8642,\n\t\"smiling\": 9523,\n\t\"defibrillator\": 8427,\n\t\"non-compete\": 23095,\n\t\"mistrust\": 31248,\n\t\"Loop\": 22144,\n\t\"Trick\": 5232,\n\t\"b)\": 12356,\n\t\"Milligan\": 22031,\n\t\"L/C\": 23223,\n\t\"hmmm\": 29997,\n\t\"Realty\": 28706,\n\t\"narratives\": 2989,\n\t\"Talley\": 28725,\n\t\"wait\": 6349,\n\t\"She’s\": 8780,\n\t\"resides\": 5856,\n\t\"Chelan\": 28627,\n\t\"Cayuga\": 29320,\n\t\"happy\": 6743,\n\t\"bmil\": 29928,\n\t\"Borgin\": 32252,\n\t\"arid\": 17085,\n\t\"5:19\": 15768,\n\t\"VP\": 23377,\n\t\"equals\": 7102,\n\t\"yamwhatiyam\": 25722,\n\t\"employable\": 27658,\n\t\"saves\": 6597,\n\t\"ID\": 22985,\n\t\"JUNE\": 24536,\n\t\"undoubtedly\": 7259,\n\t\"payroll\": 7189,\n\t\"exploiting\": 13028,\n\t\"wholesome\": 16113,\n\t\"sweated\": 14641,\n\t\"Salah\": 19338,\n\t\"tower\": 2649,\n\t\"39\": 12794,\n\t\"Bangs\": 25060,\n\t\"tickets\": 16087,\n\t\"d.\": 5422,\n\t\"Premier\": 3482,\n\t\"Coil\": 20216,\n\t\"14:14\": 21309,\n\t\"woman's\": 30255,\n\t\"mistress\": 30976,\n\t\"Sophia\": 4379,\n\t\"Virgil\": 5086,\n\t\"birthday\": 3669,\n\t\"Outstanding\": 4186,\n\t\"Elements\": 13417,\n\t\"dull\": 9970,\n\t\"TikToks\": 15836,\n\t\"swiftly\": 19715,\n\t\"secretive\": 13509,\n\t\"think-\": 6412,\n\t\"!!!!!!!!!!!!!!!\": 27801,\n\t\"saints\": 31334,\n\t\"slacks\": 12044,\n\t\"subjected\": 17748,\n\t\"Captain\": 6729,\n\t\"relearned\": 30281,\n\t\"Ever\": 8252,\n\t\"agreeable\": 21604,\n\t\"velocity\": 3327,\n\t\"Boyish\": 30784,\n\t\"120\": 7501,\n\t\"graphics\": 24244,\n\t\"videos\": 5264,\n\t\"mum\": 11680,\n\t\"echoing\": 8348,\n\t\"Abramo@ENRON\": 21593,\n\t\"1661\": 4328,\n\t\"Lavan\": 7597,\n\t\"suddenly\": 8602,\n\t\"adhered\": 24927,\n\t\"coworkers\": 28093,\n\t\"threatening\": 10460,\n\t\"Islam's\": 12274,\n\t\"Adam's\": 22964,\n\t\"burnt\": 9207,\n\t\"Chop\": 13792,\n\t\"worksheet\": 22206,\n\t\"Modrian\": 21167,\n\t\"immaculately\": 28920,\n\t\"digest\": 27282,\n\t\"wardrobes\": 32866,\n\t\"People's\": 12444,\n\t\"caution\": 2781,\n\t\"Sadr\": 18565,\n\t\"Comédie\": 5387,\n\t\"BS\": 20154,\n\t\"F&AM\": 3639,\n\t\"earthquake\": 13965,\n\t\"PGE\": 21436,\n\t\"crafting\": 24299,\n\t\"swamped\": 12935,\n\t\"Hidden\": 23948,\n\t\"1.888.509.3736\": 21462,\n\t\"p&l\": 22611,\n\t\"operational\": 22637,\n\t\"funny\": 6403,\n\t\"NB\": 1815,\n\t\"panic\": 16929,\n\t\"Hydor\": 26674,\n\t\"Mahatma\": 15045,\n\t\"pulls\": 9506,\n\t\"vans\": 16308,\n\t\"youngster\": 24206,\n\t\"availability\": 666,\n\t\"neologism\": 10480,\n\t\"splitting\": 14290,\n\t\"charger\": 29836,\n\t\"rejuvenate\": 27925,\n\t\"TAGG\": 22067,\n\t\"completly\": 29159,\n\t\"Devocht\": 12308,\n\t\"initials\": 3975,\n\t\"blacked\": 12326,\n\t\"bottled\": 18154,\n\t\"dressage\": 27577,\n\t\"MEAN\": 28737,\n\t\"VBA\": 22652,\n\t\"FusionRetail\": 29302,\n\t\"Wentz's\": 31938,\n\t\"Bever\": 18089,\n\t\"justly\": 11663,\n\t\"grissini\": 32402,\n\t\"i-Nick\": 10270,\n\t\"curiosity\": 17544,\n\t\"addiction\": 5876,\n\t\"Portland\": 21949,\n\t\"massages\": 15754,\n\t\"77.92\": 26016,\n\t\"du\": 3899,\n\t\"rifle\": 8598,\n\t\"defeated\": 12419,\n\t\"Shakespearean\": 23668,\n\t\"powerful\": 852,\n\t\"fights\": 28330,\n\t\"clinical\": 8526,\n\t\"fields\": 438,\n\t\"Mon\": 16605,\n\t\"Circle\": 4144,\n\t\"Copyright\": 24783,\n\t\"persistent\": 2185,\n\t\"919819602175\": 24224,\n\t\"pyramid\": 15344,\n\t\"trireme\": 30988,\n\t\"Entry\": 20999,\n\t\"Virtually\": 18393,\n\t\"D2\": 1636,\n\t\"headset’s\": 8671,\n\t\"projecting\": 9999,\n\t\"hated\": 9791,\n\t\"TIGER\": 28462,\n\t\"Theories\": 5617,\n\t\"510-642-3689\": 22451,\n\t\"Mlle.\": 3912,\n\t\"Command\": 19522,\n\t\"Islamist\": 18765,\n\t\"63\": 17016,\n\t\"Culture\": 3356,\n\t\"pro-Palestinian\": 18920,\n\t\"penitentiary\": 12349,\n\t\"condominium\": 20730,\n\t\"Carried\": 24454,\n\t\"consistently\": 8481,\n\t\"donut\": 15900,\n\t\"crevices\": 32760,\n\t\"fraud\": 1487,\n\t\"elimination\": 7327,\n\t\"marionette\": 30284,\n\t\"Em-enro2.doc\": 23202,\n\t\"Waiting\": 31720,\n\t\"Systems\": 1473,\n\t\"ilk\": 20203,\n\t\"unwrap\": 8813,\n\t\"Cassation\": 13192,\n\t\"tong\": 10278,\n\t\"brooms\": 18292,\n\t\"9800\": 20930,\n\t\"زها\": 4467,\n\t\"Aquiriums\": 26490,\n\t\"corpses\": 30646,\n\t\"marvels\": 14603,\n\t\"mounting\": 23678,\n\t\"entery\": 27217,\n\t\"accouterments\": 10690,\n\t\"buyer\": 3724,\n\t\"circularisation\": 22618,\n\t\"EU's\": 31399,\n\t\"Hear\": 7515,\n\t\"satellites\": 15595,\n\t\"pranks\": 17914,\n\t\"Sometimes\": 10076,\n\t\"caucasian\": 27261,\n\t\"canister\": 28916,\n\t\"insanely\": 16108,\n\t\"33rd\": 5530,\n\t\"Processing\": 1035,\n\t\"browser\": 12760,\n\t\"proliferation\": 25773,\n\t\"http://nigeria.usembassy.gov/scams.html\": 27040,\n\t\"corporate\": 16429,\n\t\"non-scientific\": 10243,\n\t\"intending\": 10604,\n\t\"Idiomaticity\": 3763,\n\t\"spit\": 6826,\n\t\"Slate\": 10532,\n\t\"naming\": 5989,\n\t\"HoTMaiL\": 24169,\n\t\"billing\": 23509,\n\t\"Reason\": 24701,\n\t\"greek\": 28953,\n\t\"eHow's\": 10810,\n\t\"shutters\": 14620,\n\t\"shake\": 15079,\n\t\"migrate\": 23108,\n\t\"kind\": 284,\n\t\"volition\": 31798,\n\t\"wealth\": 7902,\n\t\"re-elected\": 12447,\n\t\"asylee\": 12965,\n\t\"discrediting\": 19390,\n\t\"epilepsy\": 9698,\n\t\"Cash\": 23085,\n\t\"Neuroscience\": 15850,\n\t\"restaurateur\": 5425,\n\t\"united\": 9547,\n\t\"enlightenment\": 20084,\n\t\"buddy\": 9614,\n\t\"beginnings\": 16407,\n\t\"futile\": 31274,\n\t\"chocolate\": 8824,\n\t\"whhich\": 26486,\n\t\"effortful\": 32743,\n\t\"vessel\": 12957,\n\t\"sprang\": 25568,\n\t\"Savier\": 21471,\n\t\"chain-gang\": 31208,\n\t\"cleaning\": 16015,\n\t\"specialized\": 13894,\n\t\"predefined\": 30083,\n\t\"excellence\": 14859,\n\t\"chef's\": 30305,\n\t\"pockets\": 12357,\n\t\"Calaria\": 25472,\n\t\"Chung\": 12391,\n\t\"mouthing\": 8793,\n\t\"generates\": 2304,\n\t\"musk\": 24887,\n\t\"neck\": 8555,\n\t\"Stephen\": 11137,\n\t\"reinforcing\": 13469,\n\t\"superboys\": 9643,\n\t\"Rishi\": 12968,\n\t\"Prestige\": 28883,\n\t\"wheezed\": 32477,\n\t\"Shore\": 17224,\n\t\"critical\": 373,\n\t\"complaints\": 22850,\n\t\"square\": 7079,\n\t\"SI\": 1908,\n\t\"silent\": 14126,\n\t\"induced\": 10428,\n\t\"Pho-nomenal\": 29027,\n\t\"Ouse\": 17527,\n\t\"progressive\": 14077,\n\t\"underground\": 20029,\n\t\"ga\": 24462,\n\t\"Liwei\": 24793,\n\t\"flame\": 31125,\n\t\"dove\": 26589,\n\t\"understaffing\": 29582,\n\t\"DANGER\": 11840,\n\t\"roar\": 8928,\n\t\"4:00\": 21591,\n\t\"voters\": 12364,\n\t\"cheered\": 31002,\n\t\"cherries\": 16232,\n\t\"attendance\": 13331,\n\t\"Herman\": 14456,\n\t\"renaissance\": 27097,\n\t\"Lorne\": 13662,\n\t\"kosa\": 24042,\n\t\"lo\": 26541,\n\t\"MORALITY\": 20120,\n\t\"12:35\": 22915,\n\t\"Experienced\": 28948,\n\t\"No-15\": 31370,\n\t\"prohibited\": 14774,\n\t\"lexicography\": 3799,\n\t\"updo\": 16053,\n\t\"Build\": 17944,\n\t\"knots\": 9202,\n\t\"Silly\": 29758,\n\t\"overcharged\": 29804,\n\t\"well-kept\": 30401,\n\t\"stocks\": 8027,\n\t\"Garment\": 29151,\n\t\"performances\": 5390,\n\t\"Kueck\": 28723,\n\t\"handbag\": 29805,\n\t\"mute\": 31085,\n\t\"update\": 12766,\n\t\"ANSI-89\": 30032,\n\t\"lakefront\": 16381,\n\t\"tanins\": 16219,\n\t\"diversion\": 25510,\n\t\"majestically\": 31917,\n\t\"sidewalks\": 7602,\n\t\"Simply\": 15000,\n\t\"264\": 24945,\n\t\"wages\": 7197,\n\t\"Arc\": 5838,\n\t\"personnel\": 13175,\n\t\"Expressions\": 30223,\n\t\"fix\": 4588,\n\t\"Recently\": 21786,\n\t\"hunting\": 5789,\n\t\"indirect\": 1235,\n\t\"Freud\": 9557,\n\t\"Stiglitz\": 25869,\n\t\"Hermes\": 10186,\n\t\"Makel\": 2442,\n\t\"polly\": 9600,\n\t\"med\": 13975,\n\t\"11:42\": 23455,\n\t\"interference\": 2715,\n\t\"Tablet\": 26678,\n\t\"starters\": 24860,\n\t\"vibrant\": 10908,\n\t\"TAP\": 29264,\n\t\"Febuary\": 24234,\n\t\"Chair\": 14106,\n\t\"new\": 323,\n\t\"sic\": 12725,\n\t\"dammit\": 9745,\n\t\"Shetland\": 8803,\n\t\"blame\": 1432,\n\t\"Abbot\": 11712,\n\t\"devoid\": 29635,\n\t\"pricing\": 21057,\n\t\"))\": 21197,\n\t\"serried\": 32859,\n\t\"Vulgate\": 4979,\n\t\"pavement\": 30333,\n\t\"superhero\": 4127,\n\t\"coincides\": 8360,\n\t\"multilateral\": 13899,\n\t\"battery\": 2446,\n\t\"Coahuila\": 14742,\n\t\"des\": 4435,\n\t\"sweatshirts\": 6468,\n\t\"sweep\": 7650,\n\t\"alias\": 20877,\n\t\"bed\": 7098,\n\t\"Barclay\": 26561,\n\t\"largely\": 2503,\n\t\"Almanac\": 16375,\n\t\"scant\": 3938,\n\t\"castration\": 7073,\n\t\"Stillmans\": 30392,\n\t\"distribute\": 8231,\n\t\"tune\": 8583,\n\t\"tap\": 11044,\n\t\"heeded\": 14325,\n\t\"deeping\": 9067,\n\t\"pawn\": 23912,\n\t\"Saying\": 29068,\n\t\"Mayor\": 7541,\n\t\"scientific\": 343,\n\t\"incident\": 3947,\n\t\"Gazette\": 12271,\n\t\"welcomes\": 31553,\n\t\"logic\": 19765,\n\t\"Motel\": 3900,\n\t\"bites\": 26849,\n\t\"illustrated\": 10098,\n\t\"annuals\": 17718,\n\t\"failures\": 11078,\n\t\"Thing\": 27709,\n\t\"hip-bath\": 32580,\n\t\"retarded\": 8772,\n\t\"Bishop\": 15410,\n\t\"chili\": 28529,\n\t\"summarising\": 31543,\n\t\"Pizza\": 15987,\n\t\"Wilbur\": 32790,\n\t\"flu\": 13812,\n\t\"halves\": 15652,\n\t\"INTegrated\": 24176,\n\t\"colonialism\": 31945,\n\t\"yawned\": 32221,\n\t\"Unable\": 32465,\n\t\"Amr\": 12262,\n\t\"comfy\": 15748,\n\t\"stockings\": 31708,\n\t\"5.2\": 25920,\n\t\"stores\": 16520,\n\t\"Ruiz\": 951,\n\t\"Daily\": 10680,\n\t\"Jasmine\": 15792,\n\t\"Teheran\": 20507,\n\t\"stumble\": 29907,\n\t\"Reich\": 1982,\n\t\"disintegrate\": 30620,\n\t\"Good\": 4161,\n\t\"charlatans\": 1206,\n\t\"plug\": 32229,\n\t\"expulse\": 26142,\n\t\"Marx\": 10940,\n\t\"tablets\": 1644,\n\t\"ligaments\": 6370,\n\t\"portion\": 1743,\n\t\"Arrange\": 18401,\n\t\"screaming\": 9343,\n\t\"2D\": 11496,\n\t\"deliteful\": 27005,\n\t\"Rekohu\": 16254,\n\t\"interrogative\": 12321,\n\t\"waiting\": 7696,\n\t\"shop\": 13774,\n\t\"grapples\": 8276,\n\t\"counteracts\": 15953,\n\t\"cowered\": 32203,\n\t\"SOL\": 22944,\n\t\"Beall’s\": 1416,\n\t\"boulders\": 15360,\n\t\"subjective\": 239,\n\t\"mindful\": 7247,\n\t\"Johar\": 7298,\n\t\"pdf\": 17294,\n\t\"Post–Revolutionary\": 3607,\n\t\"Rockin\": 24521,\n\t\"Yorker\": 29633,\n\t\"Farouk\": 13135,\n\t\"Representative\": 13929,\n\t\"warranted\": 16306,\n\t\"preceded\": 19012,\n\t\"flyer\": 24524,\n\t\"exactly\": 6991,\n\t\"Lipton\": 5763,\n\t\"extremism\": 14273,\n\t\"1830s\": 16893,\n\t\"velvet\": 30276,\n\t\"unspoken\": 19379,\n\t\"thinnest\": 27817,\n\t\"ld2d-#69336-1.XLS\": 22438,\n\t\"7:15\": 15957,\n\t\"Elsewhere\": 30619,\n\t\"Load\": 22727,\n\t\"exam\": 9810,\n\t\"rubbish\": 29209,\n\t\"EVERYTHING\": 26529,\n\t\"Emeritus\": 12651,\n\t\"bitters\": 10522,\n\t\"01/19/2001\": 21184,\n\t\"Here\": 605,\n\t\"ironies\": 30746,\n\t\"nonsensical\": 19291,\n\t\"Molly\": 22523,\n\t\"grim\": 4686,\n\t\"Producers\": 23715,\n\t\"legal\": 785,\n\t\"Zach\": 6999,\n\t\"rain\": 8882,\n\t\"uncultured\": 15470,\n\t\"Posada's\": 19350,\n\t\"worry\": 9661,\n\t\"J\": 11145,\n\t\"hint\": 3911,\n\t\"AD\": 5009,\n\t\"untidy\": 32056,\n\t\"Carbet\": 16709,\n\t\"2.\": 695,\n\t\"spirituality\": 20285,\n\t\"GTC\": 23486,\n\t\"emphasizing\": 1711,\n\t\"Powell's\": 19130,\n\t\"satanism\": 20128,\n\t\"artless\": 32656,\n\t\"engulfed\": 9029,\n\t\"forwarding\": 17280,\n\t\"Asian\": 3497,\n\t\"Quadra\": 24006,\n\t\"Pakistanis\": 18757,\n\t\"predicated\": 10607,\n\t\"seafood\": 29497,\n\t\"you\": 4578,\n\t\"husband\": 9106,\n\t\"ballet\": 11434,\n\t\"re-writing\": 8299,\n\t\"blatantly\": 25533,\n\t\"goggling\": 32133,\n\t\"Plaza\": 16562,\n\t\"despairingly\": 9399,\n\t\"humanistic\": 6557,\n\t\"macbook\": 26629,\n\t\"series’\": 3046,\n\t\"compares\": 15449,\n\t\"imparting\": 30706,\n\t\"exurbs\": 17051,\n\t\"Bwana\": 32009,\n\t\"emotionally\": 15785,\n\t\"Type\": 23007,\n\t\"Luest\": 24950,\n\t\"Joule\": 28383,\n\t\"speech\": 14443,\n\t\"gullible\": 20057,\n\t\"specifies\": 15566,\n\t\"Nourished\": 15911,\n\t\"legislative\": 7260,\n\t\"royal\": 16806,\n\t\"comfortably\": 20489,\n\t\"ass\": 21242,\n\t\"Nemec\": 22725,\n\t\"undiscovered\": 10594,\n\t\"bonds\": 8477,\n\t\"there\": 304,\n\t\"devastation\": 31165,\n\t\"totally\": 6569,\n\t\"Rinse\": 17768,\n\t\"Administration's\": 19909,\n\t\"yep\": 28351,\n\t\"Iranian\": 10435,\n\t\"aura\": 8767,\n\t\"tribal\": 15501,\n\t\"merchants\": 16897,\n\t\"capacity\": 1253,\n\t\"Chris'\": 26565,\n\t\"grasses\": 32748,\n\t\"Peacekeeping\": 14258,\n\t\"Osama\": 19177,\n\t\"Ineos.xls\": 22213,\n\t\"LOL\": 26294,\n\t\"STEAK\": 28567,\n\t\"music\": 3368,\n\t\"stony\": 19925,\n\t\"area\": 2725,\n\t\"quartiles\": 15630,\n\t\"Mailing\": 22960,\n\t\"combine\": 11269,\n\t\"bookstands\": 32833,\n\t\"referenced\": 21607,\n\t\"bypasses\": 17456,\n\t\"anytime\": 25209,\n\t\"indexing\": 31437,\n\t\"plied\": 12330,\n\t\"perpetuates\": 18773,\n\t\"lighter\": 9918,\n\t\"sins\": 12350,\n\t\"Positioning\": 15592,\n\t\"spectrum\": 2695,\n\t\"violating\": 5965,\n\t\"Wicca\": 13522,\n\t\"daycare\": 28684,\n\t\"materials\": 2220,\n\t\"Dan\": 6439,\n\t\"medalist\": 10991,\n\t\"ncfa\": 28546,\n\t\"Geofences\": 2325,\n\t\"resultant\": 15371,\n\t\"WILL\": 27936,\n\t\"7.15\": 31488,\n\t\"intended\": 1280,\n\t\"Junius\": 12409,\n\t\"items\": 1929,\n\t\"sinus\": 6949,\n\t\"Ahab\": 13599,\n\t\"electrostatic\": 20700,\n\t\"receptionist\": 25680,\n\t\"condescending\": 29060,\n\t\"reactionary\": 11129,\n\t\"crack\": 11152,\n\t\"SCUD\": 25833,\n\t\"overs\": 26143,\n\t\"http://www.natureandtech.com/?page_id=2200\": 26847,\n\t\"midget\": 25785,\n\t\"Party\": 4534,\n\t\"weekend\": 9805,\n\t\"compliance\": 877,\n\t\"rescued\": 12139,\n\t\"Seems\": 20208,\n\t\"settlement\": 15304,\n\t\"durations\": 17171,\n\t\"Warhol\": 7486,\n\t\"sustained\": 1640,\n\t\"Look\": 6442,\n\t\"president\": 3449,\n\t\"baling\": 6676,\n\t\"cellar\": 16208,\n\t\"violations\": 25942,\n\t\"STILL\": 29881,\n\t\"slush\": 9711,\n\t\"Girl\": 30251,\n\t\"http://www.justcages.co.uk/ferret-cages/ferplast-furet-plus-ferret-cage#v_431\": 26874,\n\t\"weeping\": 5937,\n\t\"Er\": 32127,\n\t\"sorcerer\": 32058,\n\t\"HORRIBLE\": 28548,\n\t\"appearing\": 4153,\n\t\"conversation\": 7802,\n\t\"berries\": 8022,\n\t\"illustrate\": 8429,\n\t\"Damned\": 9728,\n\t\"aisles\": 30549,\n\t\"began\": 3415,\n\t\"Rubell\": 13361,\n\t\"U.\": 29459,\n\t\"Olivia\": 31573,\n\t\"sweared\": 18623,\n\t\"bestiality\": 10544,\n\t\"chap\": 31043,\n\t\"partner’s\": 8817,\n\t\"midden\": 32475,\n\t\"headline\": 11104,\n\t\"Appropriations\": 20805,\n\t\"victories\": 14643,\n\t\"ablest\": 3159,\n\t\"regalia\": 14754,\n\t\"12:12\": 21934,\n\t\"08:38\": 23561,\n\t\"driver\": 6062,\n\t\"Glen\": 21141,\n\t\"roms\": 26167,\n\t\"http://www.cic.gc.ca/english/index.asp\": 26471,\n\t\"Lonely\": 26941,\n\t\"Ginny\": 8665,\n\t\"Accord\": 19037,\n\t\"whistle\": 27436,\n\t\"strive\": 11632,\n\t\"python\": 27336,\n\t\"wight\": 27582,\n\t\"enjoying\": 13724,\n\t\"Alfaro\": 21738,\n\t\"zebra\": 27781,\n\t\"Wildernest\": 28974,\n\t\"literalist\": 20305,\n\t\"error\": 2313,\n\t\"bundle\": 25677,\n\t\"pinkness\": 32011,\n\t\"modification\": 1837,\n\t\"Games\": 1496,\n\t\"bully\": 5746,\n\t\"January\": 2137,\n\t\"walkway\": 29208,\n\t\"platter\": 16235,\n\t\"incarceration\": 12219,\n\t\"bearing\": 20108,\n\t\"Amoxi\": 7039,\n\t\"Ukraine\": 16480,\n\t\"milkshakes\": 11478,\n\t\"Spelling\": 15234,\n\t\"modern\": 2896,\n\t\"slanted\": 9319,\n\t\"miners\": 31730,\n\t\"Qāpū\": 16827,\n\t\"meaning\": 1721,\n\t\"categories\": 3080,\n\t\"wandering\": 9555,\n\t\"clogs\": 17658,\n\t\"prayerful\": 14154,\n\t\"three-day\": 32566,\n\t\"simulating\": 15617,\n\t\"Holly\": 5545,\n\t\"AT&T\": 22974,\n\t\"Bateman\": 28501,\n\t\"Blinking\": 14810,\n\t\"sign\": 1747,\n\t\"theme\": 4647,\n\t\"Oprah\": 21551,\n\t\"revenues\": 23606,\n\t\"penetrates\": 24612,\n\t\"NATO\": 10390,\n\t\"consumes\": 2149,\n\t\"praised\": 11981,\n\t\"Chiara\": 20162,\n\t\"Kurdistan\": 18495,\n\t\"cadres\": 30690,\n\t\"ETA\": 22168,\n\t\"nutritious\": 8089,\n\t\"Georges\": 16668,\n\t\"Gulfport\": 24434,\n\t\"reopening\": 19961,\n\t\"squashed\": 10647,\n\t\"rounded\": 32068,\n\t\"capitalism\": 7984,\n\t\"ca\": 8664,\n\t\"Pelosi\": 14092,\n\t\"baked\": 26175,\n\t\"Lot\": 6139,\n\t\"Potty\": 27542,\n\t\"terrors\": 5046,\n\t\"Flap\": 18087,\n\t\"actualy\": 29604,\n\t\"illustrating\": 3076,\n\t\"FBI\": 18478,\n\t\"Relations\": 11733,\n\t\"mightily\": 11072,\n\t\"1520s\": 15401,\n\t\"DAB's\": 12401,\n\t\"friendship\": 17629,\n\t\"Tronicus\": 20281,\n\t\"Kahneman\": 15004,\n\t\"Anastasia\": 16031,\n\t\"NCRC4ME’s\": 24653,\n\t\"starter\": 19858,\n\t\"Barry\": 27957,\n\t\"presidency\": 31498,\n\t\"knickers\": 32510,\n\t\"12\": 307,\n\t\"#research\": 8470,\n\t\"unthinkable\": 6120,\n\t\"Dominique\": 16067,\n\t\"outgrowth\": 22876,\n\t\"icq\": 24899,\n\t\"parakeets\": 26283,\n\t\"manual\": 10751,\n\t\"post-call\": 22380,\n\t\"patrons\": 11074,\n\t\"specifications\": 23581,\n\t\"Sear's\": 30019,\n\t\"dʒəˈroʊm\": 4959,\n\t\"AA\": 22594,\n\t\"Decay\": 16047,\n\t\"sometimes\": 1835,\n\t\"72nd\": 30290,\n\t\"electronic-warfare\": 30791,\n\t\"God-forsaken\": 31102,\n\t\"colorful\": 8707,\n\t\"sequel\": 7480,\n\t\"Bring\": 20254,\n\t\"COUPLE\": 28565,\n\t\"imposters\": 20181,\n\t\"Mogadishu\": 18641,\n\t\"RAC's\": 22700,\n\t\"her\": 3906,\n\t\"prepares\": 21649,\n\t\"Miss\": 11710,\n\t\"statistics\": 568,\n\t\"Down\": 6308,\n\t\"debts\": 23981,\n\t\"info@vagabondtours.dk\": 17299,\n\t\"FWS\": 25082,\n\t\"Survival\": 10380,\n\t\"evil-smelling\": 32449,\n\t\"02:49\": 22724,\n\t\"Okabayashi\": 21732,\n\t\"defined\": 749,\n\t\"Dhaka\": 19501,\n\t\"Harbour\": 17231,\n\t\"insights\": 142,\n\t\"artillery\": 3961,\n\t\"backbone\": 16227,\n\t\"swirls\": 24630,\n\t\"Galois'\": 3832,\n\t\"antiquities\": 26187,\n\t\"juncture\": 14551,\n\t\"unheard\": 17091,\n\t\"roommate\": 15555,\n\t\"raised\": 4412,\n\t\"cliff\": 15416,\n\t\"Kennebunkport\": 26094,\n\t\"disco\": 13360,\n\t\"Winfrey\": 21552,\n\t\"wafer\": 10131,\n\t\"dvd\": 27573,\n\t\"cameras\": 13174,\n\t\"likelihood\": 1751,\n\t\"Schedule\": 21608,\n\t\"Vicki\": 23720,\n\t\"paperweight\": 15626,\n\t\"genital\": 15517,\n\t\"grasping\": 31668,\n\t\"breath\": 8892,\n\t\"reality\": 5807,\n\t\"Arun\": 17390,\n\t\"Confessions\": 4087,\n\t\"stroke\": 14007,\n\t\"utterances\": 32857,\n\t\"gumball\": 13427,\n\t\"eternally\": 14422,\n\t\"fun\": 1518,\n\t\"noggins\": 9891,\n\t\"unclipped\": 8679,\n\t\"German\": 1732,\n\t\"partnership\": 13915,\n\t\"weals\": 32509,\n\t\"simpering\": 32067,\n\t\"Obina\": 28255,\n\t\"1179\": 21132,\n\t\"102\": 4896,\n\t\"designated\": 8319,\n\t\"Araujo\": 23192,\n\t\"Politically\": 23903,\n\t\"media’s\": 11133,\n\t\"empires\": 30959,\n\t\"Disorders\": 13558,\n\t\"ling\": 20938,\n\t\"compartmentalize\": 20295,\n\t\"stagger\": 30378,\n\t\"blow\": 9656,\n\t\"Guided\": 11993,\n\t\"unknowledgeable\": 26496,\n\t\"Wed.\": 11692,\n\t\"supersonic\": 19205,\n\t\"Clair\": 23501,\n\t\"year's\": 11665,\n\t\"Shakespeare\": 25420,\n\t\"fare\": 15440,\n\t\"crunchy\": 16135,\n\t\"bookkeeping\": 10704,\n\t\"hardened\": 32616,\n\t\"2/3\": 17859,\n\t\"learning\": 400,\n\t\"Battles\": 5275,\n\t\"Bergen\": 16502,\n\t\"refusal\": 31402,\n\t\"animals\": 2746,\n\t\"Apollo\": 11319,\n\t\"Owen\": 19395,\n\t\"Britannica\": 32852,\n\t\"Force\": 12826,\n\t\"sixty\": 6222,\n\t\"guiding\": 6893,\n\t\"Scientology.org\": 12746,\n\t\"Paris's\": 12814,\n\t\"adversity\": 11032,\n\t\"reparcelling\": 2354,\n\t\"Company's\": 31169,\n\t\"repoire\": 28041,\n\t\"DANCING\": 29262,\n\t\"Toccafondi\": 13230,\n\t\"36,000,000,000\": 24367,\n\t\"tallith\": 30534,\n\t\"Pompey\": 25370,\n\t\"NHS\": 16158,\n\t\"anonymous\": 10782,\n\t\"popped\": 6330,\n\t\"unease\": 32947,\n\t\"Ruddy\": 32302,\n\t\"jacket\": 19827,\n\t\"Gasping\": 32308,\n\t\"suck\": 23894,\n\t\"archives\": 24328,\n\t\"Iván\": 4918,\n\t\"Gross\": 6824,\n\t\"Caribbean\": 16633,\n\t\"centres\": 16868,\n\t\"twiddled\": 32183,\n\t\"save\": 7179,\n\t\"1859\": 4447,\n\t\"chest\": 7378,\n\t\"orderly\": 12002,\n\t\"Tints\": 28109,\n\t\"Noam\": 3689,\n\t\"Orchestra\": 16416,\n\t\"Membership\": 31351,\n\t\"http://3.bp.blogspot.com/-X_e2uwT6wPw/Tkj_7UVTw6I/AAAAAAAAAGs/e_hICAdYPYI/s1600/lotte_world_from_high_up.jpg\": 26581,\n\t\"==\": 20265,\n\t\"REVOKE\": 30046,\n\t\"peacefully\": 6024,\n\t\"journal\": 1375,\n\t\"NON\": 29618,\n\t\"Triple\": 4886,\n\t\"Puppet\": 8297,\n\t\"Thessaloniki\": 32925,\n\t\"computer's\": 24986,\n\t\"opportunity\": 1228,\n\t\"Sanwiches\": 29110,\n\t\"whoa\": 13753,\n\t\"McGinnis\": 24699,\n\t\"superseding\": 7337,\n\t\"twisted\": 9206,\n\t\"aerial\": 20720,\n\t\"subsume\": 25903,\n\t\"uphold\": 31455,\n\t\"Firm\": 28513,\n\t\"Dymoke\": 4206,\n\t\"Kristen\": 13294,\n\t\"sticker\": 28699,\n\t\"o\": 7087,\n\t\"absolute\": 5661,\n\t\"Trade\": 20622,\n\t\"Non-Proliferation\": 14283,\n\t\"agency\": 12838,\n\t\"4th\": 16518,\n\t\"benefited\": 7712,\n\t\"young\": 405,\n\t\"processes\": 149,\n\t\"incarcerated\": 24303,\n\t\"Article\": 22361,\n\t\"debut\": 4082,\n\t\"Term\": 14511,\n\t\"provoking\": 31264,\n\t\"Coogan\": 20137,\n\t\"nonenforcement\": 23828,\n\t\"dthat\": 21446,\n\t\"URGENT\": 24345,\n\t\"duality\": 23957,\n\t\"novella\": 13744,\n\t\"genteel\": 31732,\n\t\"crusty\": 16027,\n\t\"trip\": 9628,\n\t\"92\": 15241,\n\t\"bachelors\": 27659,\n\t\"degree\": 465,\n\t\"shooting\": 10086,\n\t\"killers\": 19170,\n\t\"dangers\": 25892,\n\t\"fundraising\": 12596,\n\t\"ch-\": 6917,\n\t\"Patrick\": 4256,\n\t\"tidbit\": 11020,\n\t\"stampede\": 13149,\n\t\"Hills\": 16033,\n\t\"Crepes\": 28770,\n\t\"2005\": 254,\n\t\"find\": 1764,\n\t\"preserved\": 108,\n\t\"salutatory\": 30234,\n\t\"Amendment\": 7468,\n\t\"dream\": 9551,\n\t\"delicious\": 10565,\n\t\"lick\": 13576,\n\t\"Nirmal\": 19073,\n\t\"LOT\": 21520,\n\t\"wilderness\": 30996,\n\t\"able\": 6713,\n\t\"Y-\": 6233,\n\t\"Coconut\": 17902,\n\t\"displays\": 10562,\n\t\"Kashmir\": 18776,\n\t\"philosophers\": 1225,\n\t\"1.6\": 24478,\n\t\"degrees\": 3642,\n\t\"Ready\": 15974,\n\t\"soles\": 15963,\n\t\"Achievement\": 3671,\n\t\"possessions\": 7600,\n\t\"Verizon\": 28119,\n\t\"increments\": 30323,\n\t\"discretion\": 7248,\n\t\".adp\": 30117,\n\t\"NSU\": 17508,\n\t\"Sandbanks\": 30992,\n\t\"Islami\": 19620,\n\t\"foremost\": 12185,\n\t\"frame\": 445,\n\t\"borne\": 2728,\n\t\"yarns\": 30904,\n\t\"Termination\": 23011,\n\t\"aka\": 8296,\n\t\"wholegrains\": 32828,\n\t\"drilled\": 10286,\n\t\"Irving\": 12192,\n\t\"improvement\": 630,\n\t\"Tanya\": 12465,\n\t\"pizzerias\": 16624,\n\t\"affirms\": 24676,\n\t\"Afghanistan\": 12117,\n\t\"havoc\": 25789,\n\t\"Austin\": 5852,\n\t\"conquistador\": 16969,\n\t\"POP\": 26403,\n\t\"cus\": 29709,\n\t\"twenty-six\": 31879,\n\t\"Lookout\": 4146,\n\t\"comprise\": 19627,\n\t\"shorn\": 30343,\n\t\"followed\": 1082,\n\t\"Continuity\": 3363,\n\t\".doc\": 22312,\n\t\"COME\": 11910,\n\t\"Twist\": 16132,\n\t\"looking\": 6866,\n\t\"looks\": 6926,\n\t\"downright\": 17590,\n\t\"ambulances\": 18610,\n\t\"prompt\": 21959,\n\t\"11608\": 22336,\n\t\"shady\": 27763,\n\t\"boggles\": 20312,\n\t\"32\": 2712,\n\t\"blames\": 19246,\n\t\"identify\": 1020,\n\t\"designation\": 17480,\n\t\"Ba'athists\": 18601,\n\t\"Marcia\": 6055,\n\t\"karen\": 11797,\n\t\"wont\": 21566,\n\t\"slanting\": 10026,\n\t\"suppliers\": 22426,\n\t\"Ghostbusters\": 12599,\n\t\"imperiled\": 25880,\n\t\"played\": 4214,\n\t\"perceptions\": 1630,\n\t\"antifreeze\": 10611,\n\t\"clue\": 14669,\n\t\"mutated\": 2300,\n\t\"bombast\": 25401,\n\t\"envelops\": 25871,\n\t\"Pannonia\": 4977,\n\t\"consecutive\": 13893,\n\t\"Nehru's\": 14001,\n\t\"opera\": 30232,\n\t\"coarse\": 31722,\n\t\"Copenhagen\": 10237,\n\t\"against\": 4337,\n\t\"register\": 22500,\n\t\"Grigorenko\": 1985,\n\t\"izakaya\": 26940,\n\t\"relied\": 30654,\n\t\"1964\": 1004,\n\t\"Database\": 30042,\n\t\"nervously\": 32264,\n\t\"Kant's\": 24888,\n\t\"builds\": 24640,\n\t\"WTC\": 20681,\n\t\"fearing\": 32525,\n\t\"earthly\": 24623,\n\t\"However\": 1017,\n\t\"preferably\": 17695,\n\t\"Towing\": 28821,\n\t\"Hammer\": 26259,\n\t\"Dory\": 11812,\n\t\"fans\": 2982,\n\t\"license\": 7487,\n\t\"elevation\": 17035,\n\t\"participants’\": 234,\n\t\"GIVE\": 28406,\n\t\"Spirito\": 13212,\n\t\"112\": 19223,\n\t\"glyphs\": 15403,\n\t\"coiled\": 27747,\n\t\"organism's\": 25111,\n\t\"universally\": 18949,\n\t\"Cuyahoga\": 16370,\n\t\"Vs\": 21173,\n\t\"murder\": 12569,\n\t\"selling\": 5892,\n\t\"Louis\": 3245,\n\t\"inconsiderate\": 29033,\n\t\"amorphous\": 9194,\n\t\"buying\": 10712,\n\t\"Mommism\": 23924,\n\t\"Pisa\": 3800,\n\t\"pre-arrest\": 20748,\n\t\"sidelocks\": 30517,\n\t\"members\": 3455,\n\t\"exaggeration\": 2928,\n\t\"commissioners\": 22848,\n\t\"95,000\": 23415,\n\t\"dungeon\": 10683,\n\t\"Half\": 15653,\n\t\"delightful\": 31059,\n\t\"Animal\": 27594,\n\t\"invoices\": 22663,\n\t\"Smosh\": 5291,\n\t\"Forty\": 16844,\n\t\"Municipal\": 17013,\n\t\"Investment\": 21887,\n\t\"清\": 14904,\n\t\"intersection\": 1516,\n\t\"blowback\": 13530,\n\t\"November\": 3587,\n\t\"tortilla\": 28488,\n\t\"SCAP-22-368\": 7524,\n\t\"touchstones\": 13381,\n\t\"burrowing\": 26890,\n\t\"super\": 9769,\n\t\"menstruation\": 24059,\n\t\"alt.animals.felines.snowleopards\": 24838,\n\t\"endangered\": 16270,\n\t\"survey\": 559,\n\t\"skip\": 6613,\n\t\"uh\": 6059,\n\t\"microscope\": 6878,\n\t\"exchange\": 746,\n\t\"researcher\": 8419,\n\t\"cloud\": 6260,\n\t\"profile\": 10728,\n\t\"Donohue\": 21484,\n\t\"undertook\": 5583,\n\t\"Nashville\": 27521,\n\t\"london\": 26186,\n\t\"Country’s\": 14508,\n\t\"deathlike\": 31199,\n\t\"creator\": 7474,\n\t\"Moher\": 27828,\n\t\"dubia\": 27758,\n\t\"rosemary\": 15949,\n\t\"hooks\": 11824,\n\t\"tolerance\": 15032,\n\t\"something\": 6057,\n\t\"frost\": 17721,\n\t\"fitful\": 30280,\n\t\"Favorite\": 28836,\n\t\"pray\": 12049,\n\t\"flats\": 17727,\n\t\"Pin\": 21388,\n\t\"enable\": 8364,\n\t\"scavenging\": 30348,\n\t\"Cream\": 10520,\n\t\"trimmer\": 6409,\n\t\"spires\": 9445,\n\t\"tucked\": 8605,\n\t\"Foz\": 26996,\n\t\"Implications\": 30210,\n\t\"Romania\": 22508,\n\t\"additional\": 1968,\n\t\"wellington\": 32194,\n\t\"Musharraf's\": 18777,\n\t\"18T\": 21098,\n\t\"Popo\": 31108,\n\t\"Journal\": 15130,\n\t\"Siri\": 9695,\n\t\"recordings\": 1870,\n\t\"ex-members\": 19999,\n\t\"multisite\": 2521,\n\t\"intolerant\": 17589,\n\t\"prophetic\": 32906,\n\t\"madly\": 30825,\n\t\"hellish\": 9488,\n\t\"variables\": 1678,\n\t\"Woods\": 22468,\n\t\"giants\": 9136,\n\t\"Thierry\": 968,\n\t\"Moreton\": 26125,\n\t\"2.2.\": 915,\n\t\"clusters\": 30884,\n\t\"Reflection\": 2292,\n\t\"widely\": 1209,\n\t\"generators\": 13957,\n\t\"throats\": 18597,\n\t\"elucidate\": 656,\n\t\"legislature\": 14688,\n\t\"15\": 776,\n\t\"Further\": 447,\n\t\"handlers\": 8316,\n\t\"chance\": 1781,\n\t\"altogether\": 7450,\n\t\"flinching\": 30717,\n\t\"Elviña\": 2237,\n\t\"Arya\": 23133,\n\t\"again\": 1367,\n\t\"asserting\": 5655,\n\t\"Immigrants\": 13033,\n\t\"outline\": 22602,\n\t\"watery\": 8879,\n\t\"ethnocentrism\": 15447,\n\t\"whilst\": 9391,\n\t\"ETS\": 22929,\n\t\"1214\": 16601,\n\t\"gunfire\": 8560,\n\t\"Kosher\": 27335,\n\t\"steamed\": 29843,\n\t\"Blvd\": 16566,\n\t\"Teng\": 18833,\n\t\"Rahman\": 19100,\n\t\"martyr\": 20460,\n\t\"amongst\": 9265,\n\t\"Nicco\": 8007,\n\t\"Hamas\": 18780,\n\t\"inspected\": 9871,\n\t\"relaxing\": 15752,\n\t\"Achieving\": 777,\n\t\"swarming\": 9254,\n\t\"cropping\": 32013,\n\t\"emphasizes\": 10859,\n\t\"mama\": 15983,\n\t\"summers\": 17086,\n\t\"goddess\": 18212,\n\t\"preservatives\": 10662,\n\t\"excepted\": 25907,\n\t\"Ram\": 21825,\n\t\"shattered\": 27726,\n\t\"upward\": 30155,\n\t\"Nor\": 4639,\n\t\"non-European\": 31409,\n\t\"5\": 461,\n\t\"Immortals\": 12579,\n\t\"6.5\": 27051,\n\t\"rations\": 32520,\n\t\"Wish\": 12593,\n\t\"Demosisto\": 12467,\n\t\"ISI\": 19568,\n\t\"Confirmation\": 22566,\n\t\"alt.animals\": 24830,\n\t\"meter\": 11341,\n\t\"fork\": 10811,\n\t\"Maurer\": 13312,\n\t\"everyone\": 6734,\n\t\"Jump\": 16084,\n\t\"coup\": 4540,\n\t\"attracting\": 1471,\n\t\"Humanpixel\": 24228,\n\t\"mustaches\": 31300,\n\t\"Iowa\": 28447,\n\t\"shortly\": 4291,\n\t\"Namaskar\": 24028,\n\t\"understand\": 244,\n\t\"401\": 5808,\n\t\"Preston\": 10983,\n\t\"1787\": 3519,\n\t\"05/01/2001\": 22933,\n\t\"foothills\": 16744,\n\t\"traded\": 4908,\n\t\"honey\": 6711,\n\t\"pilgrims\": 12252,\n\t\"typifies\": 5686,\n\t\"{\": 21646,\n\t\"frayed\": 30425,\n\t\"ludicrous\": 30429,\n\t\"League\": 4800,\n\t\"Melted\": 16018,\n\t\"advert\": 27208,\n\t\"Melbourne\": 10994,\n\t\"rumors\": 25092,\n\t\"Questar\": 23567,\n\t\"dried\": 8550,\n\t\"availed\": 29570,\n\t\"1933\": 16360,\n\t\"Sensations\": 15021,\n\t\"overloaded\": 32768,\n\t\"motivations\": 20310,\n\t\"dumbly\": 30289,\n\t\"journalism\": 11102,\n\t\"impugned\": 19185,\n\t\"Clinton's\": 26054,\n\t\"recognise\": 32804,\n\t\"idle\": 14466,\n\t\"Envoy\": 14217,\n\t\"Khan\": 19709,\n\t\"featurelessness\": 32798,\n\t\"twists\": 23669,\n\t\"alt.animals.tiger\": 24834,\n\t\"terminate\": 22413,\n\t\"rejects\": 12989,\n\t\"Bart's\": 21221,\n\t\"veteran\": 12359,\n\t\"navigate\": 8398,\n\t\"Nivine\": 28213,\n\t\"rosé\": 16200,\n\t\"belive\": 27963,\n\t\"mill\": 21610,\n\t\"Contrary\": 31466,\n\t\"CURSE\": 25606,\n\t\"Delta\": 17112,\n\t\"folding\": 15405,\n\t\"position\": 2883,\n\t\"170\": 3304,\n\t\"Ronn\": 22670,\n\t\"OPINION\": 29698,\n\t\"Bender\": 20828,\n\t\"Fernandez\": 5604,\n\t\"TX\": 22118,\n\t\"chip\": 9542,\n\t\"diminished\": 1353,\n\t\"Zakaria\": 30680,\n\t\"desperation\": 32846,\n\t\"eCommerce\": 23841,\n\t\"negotiating\": 3078,\n\t\"NEST\": 11865,\n\t\"comforter\": 5951,\n\t\"Talbot\": 4154,\n\t\"2.7\": 23612,\n\t\"2010\": 269,\n\t\"softened\": 32215,\n\t\"rapporteur's\": 31414,\n\t\"novel\": 141,\n\t\"infinity\": 26230,\n\t\"locution\": 30237,\n\t\"show\": 1777,\n\t\"Fortier\": 24108,\n\t\"qualified\": 5991,\n\t\"Holofernes\": 25410,\n\t\"outcrops\": 16267,\n\t\"insists\": 19746,\n\t\"classiest\": 28991,\n\t\"Watched\": 8442,\n\t\"Spears\": 11120,\n\t\"Transfer\": 17886,\n\t\"http://www.solutions.com/jump.jsp?itemID=1361&itemType=PRODUCT&path=1%2C3%2C477&iProductID=1361\": 26290,\n\t\"possesses\": 6591,\n\t\"16.4\": 24493,\n\t\"Harry's\": 15783,\n\t\"58\": 12365,\n\t\"groaning\": 9078,\n\t\"trashed\": 6945,\n\t\"McCAFE\": 26345,\n\t\"lower\": 3335,\n\t\"Pam\": 29218,\n\t\"sills\": 31603,\n\t\"eyebrows\": 32746,\n\t\"grifter\": 13738,\n\t\"Product\": 21661,\n\t\"pumpkin\": 29432,\n\t\"spices\": 29492,\n\t\"flash\": 9915,\n\t\"Tarawa\": 25808,\n\t\"terribly\": 13817,\n\t\"Chanel\": 32391,\n\t\"mainstream\": 10539,\n\t\"Best\": 4140,\n\t\"reestablish\": 25030,\n\t\"indulgences\": 6545,\n\t\"demons\": 5793,\n\t\"chatting\": 21984,\n\t\"disturbed\": 30842,\n\t\"Ex\": 8450,\n\t\"England's\": 17545,\n\t\"stadiums\": 25222,\n\t\"rssc.com\": 27512,\n\t\"Alaska’s\": 7872,\n\t\"FAQ\": 20859,\n\t\"Iroq\": 21516,\n\t\"shows\": 366,\n\t\".322\": 4895,\n\t\"Bachelor\": 5206,\n\t\"carve\": 7803,\n\t\"wetter\": 27834,\n\t\"Downtown\": 16963,\n\t\"coach\": 12088,\n\t\"Analytics\": 10764,\n\t\"SamChawk@aol.com\": 23247,\n\t\"415\": 23305,\n\t\"archival\": 3891,\n\t\"******\": 28130,\n\t\"taut\": 8729,\n\t\"baptized\": 5011,\n\t\"requested\": 12348,\n\t\"Thankfully\": 13819,\n\t\"tutorial\": 26622,\n\t\"Education\": 1650,\n\t\"knights\": 29129,\n\t\"follows\": 669,\n\t\"festoons\": 9447,\n\t\"daddy\": 19213,\n\t\"Part\": 17662,\n\t\"tech\": 8377,\n\t\"97\": 30185,\n\t\"Thousand\": 32043,\n\t\"hack\": 8368,\n\t\"39.\": 14962,\n\t\"appointments\": 29479,\n\t\"pre-existing\": 2978,\n\t\"www.risk-conferences.com/risk2001aus\": 20931,\n\t\"dawn\": 14011,\n\t\"experice\": 27011,\n\t\"world\": 285,\n\t\"minds\": 3730,\n\t\"THE\": 9916,\n\t\"case\": 891,\n\t\"Mama\": 21239,\n\t\"RODERIGO\": 25436,\n\t\"Bohéme\": 31448,\n\t\"eastbound\": 17564,\n\t\"as\": 184,\n\t\"jug\": 9190,\n\t\"policeman\": 16300,\n\t\"having\": 640,\n\t\"resturant\": 29794,\n\t\"glancing\": 30265,\n\t\"lifetime\": 5381,\n\t\"Hunh\": 6727,\n\t\"storing\": 8163,\n\t\"2545\": 20923,\n\t\"Palestinians\": 11186,\n\t\"asthmatic\": 6737,\n\t\"16s\": 26948,\n\t\"FTW\": 29704,\n\t\"Touchdown\": 32188,\n\t\"Narrative\": 2373,\n\t\"He's\": 4113,\n\t\"ups\": 25251,\n\t\"lightning-shaped\": 32057,\n\t\"engaging\": 10900,\n\t\"http://www.utrechtart.com/Craft-Supplies/Woodworking%20Supplies/\": 26848,\n\t\"No-44\": 31515,\n\t\"529999420000\": 17019,\n\t\"drilling\": 23389,\n\t\"e-commerce\": 22563,\n\t\"marble\": 9104,\n\t\"laugh\": 10580,\n\t\"commissioned\": 3556,\n\t\"juice\": 15838,\n\t\"Jubur\": 18529,\n\t\"genres\": 12531,\n\t\"booths\": 13397,\n\t\"incompatible\": 14158,\n\t\"separatists\": 19511,\n\t\"hornet's\": 20017,\n\t\"Object\": 23116,\n\t\"minimunm\": 27075,\n\t\"you-ll\": 28231,\n\t\"pigmy\": 12734,\n\t\"Mimmy\": 28956,\n\t\"Rate\": 29114,\n\t\"LIMITATIONS\": 1936,\n\t\"hotly\": 3064,\n\t\"Surgery\": 29278,\n\t\"BRINGING\": 29668,\n\t\"catacomb\": 31135,\n\t\"exquisitely\": 32797,\n\t\"Civil\": 11035,\n\t\"Conflict\": 19041,\n\t\"-\": 10,\n\t\"rounds\": 12575,\n\t\"sham\": 25748,\n\t\"responsibility\": 1213,\n\t\"Sciences\": 3657,\n\t\"coloured\": 9375,\n\t\"relativity\": 15591,\n\t\"Grecian\": 16051,\n\t\"surfing\": 17164,\n\t\"predicting\": 25155,\n\t\"Spongy\": 28248,\n\t\"Leaving\": 12352,\n\t\"Log\": 24498,\n\t\"mortal\": 19769,\n\t\"Freezer\": 8219,\n\t\"policymaking\": 917,\n\t\"Reward\": 25973,\n\t\"revenue-raising\": 31545,\n\t\"News\": 5247,\n\t\"listing\": 440,\n\t\"innovative\": 14543,\n\t\"entourage\": 20789,\n\t\"phenophases\": 25114,\n\t\"BOWL\": 26240,\n\t\"careful\": 2016,\n\t\"perfect\": 2908,\n\t\"blackberry\": 15895,\n\t\"Ditch\": 9922,\n\t\"theraphy\": 21451,\n\t\"motley\": 29543,\n\t\"antiwar\": 27729,\n\t\"Roofing\": 28730,\n\t\"fertile\": 15364,\n\t\"officer\": 5301,\n\t\"tosses\": 27540,\n\t\"Hoover\": 18480,\n\t\"foraging\": 10218,\n\t\"verticalization\": 2836,\n\t\"blamed\": 9752,\n\t\"equivalant\": 22522,\n\t\"bunk\": 32863,\n\t\"maintained\": 5955,\n\t\"Interesting\": 16202,\n\t\"pectoral\": 2904,\n\t\"stigma\": 8183,\n\t\"displace\": 15099,\n\t\"illustrator\": 12549,\n\t\"utters\": 1821,\n\t\"bankruptcies\": 26042,\n\t\"highest\": 1923,\n\t\"=\": 1655,\n\t\"voted\": 10490,\n\t\"Cockroaches\": 31788,\n\t\"Sox\": 4770,\n\t\"Wars\": 2999,\n\t\"mumbling\": 8632,\n\t\"Pastor\": 19438,\n\t\"admired\": 32795,\n\t\"Murasaki\": 4764,\n\t\"polluters\": 25933,\n\t\"sourced\": 8032,\n\t\"postive\": 28134,\n\t\"09/03/99\": 23218,\n\t\"Register\": 23663,\n\t\"sleepy\": 16984,\n\t\"Incentive\": 23298,\n\t\"Turano\": 266,\n\t\"y'\": 7103,\n\t\"奈津\": 4604,\n\t\"leadership\": 12449,\n\t\"DPRK\": 12847,\n\t\"1946\": 11400,\n\t\"Mention\": 17644,\n\t\"prescriptive\": 23333,\n\t\"devices\": 13938,\n\t\"iv\": 26358,\n\t\"mechanic\": 29057,\n\t\"classes\": 2294,\n\t\"surprisingly\": 10419,\n\t\"Twice\": 17737,\n\t\"intertextualities\": 2942,\n\t\"Hybrid\": 10774,\n\t\"cabin\": 26272,\n\t\"rib\": 31191,\n\t\"hottest\": 17093,\n\t\"Films\": 8277,\n\t\"dock\": 26924,\n\t\"Walker\": 13140,\n\t\"playfully\": 13418,\n\t\"tandem\": 18788,\n\t\"yard\": 7185,\n\t\"burn\": 7381,\n\t\"proponent\": 3688,\n\t\"strain\": 12990,\n\t\"lighted\": 14061,\n\t\"STEP\": 24932,\n\t\"Timothy\": 31859,\n\t\"Grimm\": 25090,\n\t\"knitting\": 7765,\n\t\"26/09/2000\": 21308,\n\t\"1711\": 14948,\n\t\"glance\": 16939,\n\t\"heard\": 1770,\n\t\"Cresson\": 31511,\n\t\"Ladies\": 14506,\n\t\"cyber\": 8397,\n\t\"climates\": 398,\n\t\"whisper\": 9905,\n\t\"engineered\": 9642,\n\t\"op\": 11697,\n\t\"ABBOT\": 11903,\n\t\"hairpins\": 32565,\n\t\"—\": 873,\n\t\"Dust\": 11345,\n\t\"schedule\": 7733,\n\t\"fattening\": 11756,\n\t\"cups\": 17842,\n\t\"11/10/2000\": 21337,\n\t\"VISIT\": 11912,\n\t\"lawyer\": 5606,\n\t\"01810\": 11714,\n\t\"conservative\": 1272,\n\t\"physics\": 3349,\n\t\"superpower\": 25849,\n\t\"eaten\": 26322,\n\t\"mainland\": 16272,\n\t\"Aditya\": 27423,\n\t\"SHE\": 21465,\n\t\"barre\": 17694,\n\t\"Feith\": 20844,\n\t\"nationality\": 10865,\n\t\"greyhound\": 32649,\n\t\"mentions\": 22714,\n\t\"Free\": 6533,\n\t\"CUC\": 16442,\n\t\"arrangement\": 18277,\n\t\"Soft\": 15915,\n\t\"moves\": 15259,\n\t\"bunker\": 25754,\n\t\"SEEMS\": 28790,\n\t\"hope\": 6471,\n\t\"bugs\": 15070,\n\t\"psycho-spiritual\": 24035,\n\t\"slant\": 27226,\n\t\"flexibility\": 17659,\n\t\"CHEF\": 28800,\n\t\"uphi-\": 15977,\n\t\"Smack\": 17249,\n\t\"Rhino\": 28466,\n\t\"concentrates\": 30776,\n\t\"cases\": 1177,\n\t\"181,000\": 17520,\n\t\"smelled\": 9170,\n\t\"Band\": 24550,\n\t\"IE6\": 12761,\n\t\"snow\": 17416,\n\t\"archaeological\": 16997,\n\t\"cubist\": 21171,\n\t\"Skiatook\": 17507,\n\t\"High\": 4817,\n\t\"06/01/2000\": 21235,\n\t\"unmanned\": 29747,\n\t\"rationally\": 1201,\n\t\"sniffling\": 8852,\n\t\"fringe\": 8192,\n\t\"unhappiness\": 32490,\n\t\"FYI\": 20941,\n\t\"galloping\": 26659,\n\t\"Odara\": 31860,\n\t\"mistreatment\": 24884,\n\t\"beats\": 25496,\n\t\"Manufacturing\": 13840,\n\t\"61\": 10317,\n\t\"Parent\": 22984,\n\t\"Janet\": 21961,\n\t\"shelling\": 31119,\n\t\"scammer\": 27018,\n\t\"deployed\": 12153,\n\t\"forcefully\": 14382,\n\t\"dreaded\": 3040,\n\t\"bicycling\": 17515,\n\t\"Placid\": 25552,\n\t\"Advisory\": 20349,\n\t\"blouses\": 17358,\n\t\"Blackberry\": 15896,\n\t\"firing\": 12851,\n\t\"Elsevier\": 1327,\n\t\"pitched\": 27207,\n\t\"Stardust\": 11298,\n\t\"peaked\": 30886,\n\t\"Memphis\": 23237,\n\t\"unrestrained\": 24736,\n\t\"STOP\": 28786,\n\t\"manner\": 5796,\n\t\"oracle\": 32675,\n\t\"legislators\": 7873,\n\t\"grunt\": 1796,\n\t\"Variety\": 14966,\n\t\"Tollis\": 20161,\n\t\"unsurprising\": 3866,\n\t\"fragment\": 31324,\n\t\"theeth\": 27997,\n\t\"Posada\": 19342,\n\t\"thoughts\": 1586,\n\t\"waterfall\": 15967,\n\t\"Wildlife\": 25037,\n\t\"Canned\": 26650,\n\t\"psychic\": 25312,\n\t\"Pinotage\": 16211,\n\t\"text\": 5644,\n\t\"WEEK\": 25607,\n\t\"Enron's\": 21954,\n\t\"must've\": 6155,\n\t\"retriever\": 9563,\n\t\"Vietnam\": 10375,\n\t\"fortunate\": 8212,\n\t\"calender\": 24237,\n\t\"PRICE\": 11931,\n\t\"->\": 23859,\n\t\"unsolved\": 2692,\n\t\".324\": 4831,\n\t\"goodies\": 6976,\n\t\"speckled\": 9087,\n\t\"piles\": 24079,\n\t\"4101\": 22244,\n\t\"Hello\": 15859,\n\t\"submission\": 5998,\n\t\"567.77\": 22769,\n\t\"deliverd\": 28113,\n\t\"Science\": 2420,\n\t\"Representation\": 22538,\n\t\"reflector\": 27735,\n\t\"seldom\": 20874,\n\t\"desert\": 5154,\n\t\"flipped\": 26235,\n\t\"abate\": 9232,\n\t\"plum\": 16218,\n\t\"thief\": 19279,\n\t\"warmonger\": 18856,\n\t\"Lets\": 22351,\n\t\"forearm\": 12627,\n\t\"Retired\": 20678,\n\t\"Havana\": 16501,\n\t\"lodge\": 16319,\n\t\"characterizing\": 12332,\n\t\"sided\": 23220,\n\t\"stirrups\": 27580,\n\t\"arbitrary\": 1718,\n\t\"educators\": 21793,\n\t\"disconnect\": 12808,\n\t\"startling\": 19574,\n\t\"everyone’s\": 17918,\n\t\"Cathy\": 3759,\n\t\"M.P.\": 31632,\n\t\"shrunk\": 6473,\n\t\"Unemployent\": 24287,\n\t\"Amnesty\": 19887,\n\t\"Eichelberger\": 30672,\n\t\"geographer\": 11451,\n\t\"towers\": 9458,\n\t\"Vision\": 9925,\n\t\"Technology\": 8278,\n\t\"describing\": 11586,\n\t\"squawk\": 9715,\n\t\"terrorist\": 18475,\n\t\"Friday's\": 18873,\n\t\"boats\": 11049,\n\t\"horrific\": 19957,\n\t\"pause\": 1110,\n\t\"Davy\": 14789,\n\t\"Dew\": 8808,\n\t\"upcoming\": 16589,\n\t\"mom’s\": 8784,\n\t\"łodzianka\": 16885,\n\t\"T'ho\": 16967,\n\t\"advisory\": 20343,\n\t\"Zurbarán’s\": 270,\n\t\"Compensation\": 23993,\n\t\"UGLY\": 28743,\n\t\"saaaaaam\": 26296,\n\t\"markers\": 1223,\n\t\"depredations\": 31522,\n\t\"host\": 5805,\n\t\"Ubisoft\": 12556,\n\t\"shrieked\": 9490,\n\t\"impostor\": 31075,\n\t\"wearing\": 12205,\n\t\"scenicly\": 16334,\n\t\"12.99\": 26426,\n\t\"tasking\": 21733,\n\t\"peanut-butter\": 32335,\n\t\"racked\": 27663,\n\t\"TRIPPED\": 28861,\n\t\"clerk\": 28718,\n\t\"Katy\": 17502,\n\t\"Jellicoh\": 9833,\n\t\"withstanding\": 19530,\n\t\"territories\": 20535,\n\t\"owner\": 2358,\n\t\"Yikes\": 16040,\n\t\"while\": 1515,\n\t\"toned\": 29021,\n\t\"regulars\": 29112,\n\t\"e.g.\": 220,\n\t\"timely\": 22582,\n\t\"undue\": 17622,\n\t\"Creating\": 8350,\n\t\"commentary\": 5112,\n\t\"Palk\": 19078,\n\t\"Underwear\": 27974,\n\t\"McManus\": 2529,\n\t\"Include\": 18151,\n\t\"INSULTED\": 28391,\n\t\"May's\": 11307,\n\t\"Assume\": 7505,\n\t\"EXPERIENCE\": 28404,\n\t\"rejuvenating\": 27909,\n\t\"enforcement's\": 19996,\n\t\"neo\": 4125,\n\t\"gotta\": 6891,\n\t\"galaxy\": 9214,\n\t\"formula\": 7900,\n\t\"Superstars\": 13338,\n\t\"surley\": 28595,\n\t\"Dempsey\": 24695,\n\t\"Express\": 21403,\n\t\"suspended\": 25996,\n\t\"obesity\": 24087,\n\t\"loose\": 6257,\n\t\"Prussia\": 4303,\n\t\"touting\": 25244,\n\t\"journal’s\": 1374,\n\t\"DeJesús\": 4919,\n\t\"imprisoned\": 3981,\n\t\"aspects\": 292,\n\t\"aligned\": 3070,\n\t\"polarization\": 2633,\n\t\"merchant\": 19558,\n\t\"Suez\": 27244,\n\t\"Slacks\": 11709,\n\t\"insulting\": 9885,\n\t\"Sam's\": 23051,\n\t\"Williams@ENRON_DEVELOPMENT\": 23805,\n\t\"feels\": 8431,\n\t\"analysis\": 446,\n\t\"Albania\": 12995,\n\t\"outperformed\": 20467,\n\t\"gda\": 21426,\n\t\"CLEMENT's\": 25350,\n\t\"Chad\": 5778,\n\t\"cursed\": 9389,\n\t\"insignia\": 3625,\n\t\"recently\": 1359,\n\t\"EU/US\": 31500,\n\t\"SCAMMERS\": 27038,\n\t\"Mellon\": 29463,\n\t\"stabbed\": 19937,\n\t\"straightening\": 8790,\n\t\"800-553-3119\": 20981,\n\t\"trios\": 27431,\n\t\"nearly\": 521,\n\t\"Hammond\": 7865,\n\t\"individually\": 2850,\n\t\"Vivien\": 31806,\n\t\"20\": 536,\n\t\"Mahesh\": 24185,\n\t\"scraped\": 9199,\n\t\"anything\": 1364,\n\t\"hock\": 7060,\n\t\"contract\": 12297,\n\t\"accumulate\": 19217,\n\t\"Ash\": 11715,\n\t\"thailand\": 26634,\n\t\"Sharon's\": 18783,\n\t\"negates\": 15116,\n\t\"privatized\": 19912,\n\t\"semi-sketchiness\": 29876,\n\t\"empowerment\": 20083,\n\t\"photographing\": 12031,\n\t\"cramped\": 17913,\n\t\"batter\": 8655,\n\t\"Cinsault\": 16217,\n\t\"2.2\": 15202,\n\t\"tools\": 7784,\n\t\"SMALL\": 10101,\n\t\"mediation\": 14251,\n\t\"generosity\": 32535,\n\t\"New\": 696,\n\t\"discussions\": 3807,\n\t\"tension\": 8428,\n\t\"schoolgirls\": 31629,\n\t\"authentic\": 18336,\n\t\"sadistic\": 19782,\n\t\"Metcalfe\": 21487,\n\t\"coerce\": 24688,\n\t\"accommodated\": 29973,\n\t\"emigrate\": 30723,\n\t\"Hotels\": 26501,\n\t\"grew\": 4243,\n\t\"traveler\": 9144,\n\t\"Walt\": 11033,\n\t\"Con\": 5896,\n\t\"campus\": 12376,\n\t\"Along\": 12595,\n\t\"egress\": 7395,\n\t\"supporters\": 13243,\n\t\"laffa\": 29989,\n\t\"Dillard’s\": 8785,\n\t\"cycles\": 12913,\n\t\"nigh\": 7520,\n\t\"postcards\": 29414,\n\t\"administration\": 10404,\n\t\"Reading\": 30709,\n\t\"margin\": 10015,\n\t\"polo\": 17379,\n\t\"+4550981306\": 17260,\n\t\"revolted\": 25201,\n\t\"intervention\": 1635,\n\t\"accomplishing\": 28826,\n\t\"introspection\": 20136,\n\t\"Module\": 17026,\n\t\"develop\": 821,\n\t\"AIDS\": 1400,\n\t\"Regency\": 21563,\n\t\"Cedar\": 21822,\n\t\"rrly\": 29778,\n\t\"Doctor\": 5003,\n\t\"CST\": 21698,\n\t\"dropout\": 15233,\n\t\"planes\": 19589,\n\t\"Protestant\": 5430,\n\t\"withheld\": 14185,\n\t\"averaging\": 599,\n\t\"Chairman\": 14171,\n\t\"assumption\": 15146,\n\t\"483.00\": 29407,\n\t\"reflective\": 13684,\n\t\"appropriating\": 20204,\n\t\"downgrade\": 25083,\n\t\"meadows\": 31615,\n\t\"MacKenzie\": 8473,\n\t\"Recommendations\": 2376,\n\t\"Chichen\": 15391,\n\t\"Holdings\": 22304,\n\t\"fails\": 7471,\n\t\"order\": 801,\n\t\"Orr\": 29453,\n\t\"neighbour's\": 32758,\n\t\"elbows\": 9023,\n\t\"pantomine\": 30467,\n\t\"ankles\": 32593,\n\t\"Potential\": 15664,\n\t\"Benjamin\": 309,\n\t\"UT\": 22675,\n\t\"Principles\": 5653,\n\t\"Nimbus\": 32042,\n\t\"silkie\": 27126,\n\t\"disbanded\": 3595,\n\t\"barons\": 17418,\n\t\"Territories\": 12382,\n\t\"subparagraph\": 22546,\n\t\"Trustee\": 23830,\n\t\"Hormel's\": 28530,\n\t\"+\": 1143,\n\t\"thingy\": 16178,\n\t\"phenomena\": 3743,\n\t\"non-philosophers\": 15147,\n\t\"11222\": 24956,\n\t\"UTH's\": 26889,\n\t\"lovers\": 16621,\n\t\"react\": 6740,\n\t\"1686\": 4367,\n\t\"Archive\": 4427,\n\t\"Sam\": 5698,\n\t\"Mingo\": 17458,\n\t\"Rhee\": 23374,\n\t\"construction\": 3754,\n\t\"Faced\": 16017,\n\t\"recognized\": 3771,\n\t\"comedian\": 5183,\n\t\"Indirectly\": 30491,\n\t\"unending\": 10448,\n\t\"obesium\": 17195,\n\t\"conceded\": 13081,\n\t\"284\": 21475,\n\t\"Polaroid's\": 13398,\n\t\"Mosque\": 12254,\n\t\"MAYA\": 15363,\n\t\"knew\": 3923,\n\t\"BDSM\": 10682,\n\t\"demonstration\": 12560,\n\t\"2470\": 16555,\n\t\"philosophies\": 20008,\n\t\"outsiders\": 24779,\n\t\"unexpectedly\": 25320,\n\t\"jamming\": 26955,\n\t\"Inside\": 5734,\n\t\"elections\": 12517,\n\t\"Alain\": 24121,\n\t\"Might\": 27995,\n\t\"Secretary\": 12180,\n\t\"wodges\": 27023,\n\t\"JOKE\": 29244,\n\t\"electioneering\": 31364,\n\t\"collaboration\": 2424,\n\t\"Pitch\": 8049,\n\t\"Frederick\": 12416,\n\t\"09/15/99\": 23205,\n\t\"Iraqi\": 4472,\n\t\"remain\": 4629,\n\t\"AMI\": 20820,\n\t\"Knockturn\": 32286,\n\t\"mentally\": 15722,\n\t\"bald\": 25062,\n\t\"enmities\": 17647,\n\t\"expanded\": 4892,\n\t\"instigated\": 22616,\n\t\"mid-October\": 25972,\n\t\"4-12\": 22440,\n\t\"Janice\": 21740,\n\t\"aspirin\": 21246,\n\t\"convictions\": 24694,\n\t\"stewardship\": 8098,\n\t\"forged\": 19188,\n\t\"warehouse\": 16706,\n\t\"Walter\": 30673,\n\t\"Drafting\": 11420,\n\t\"traveled\": 12311,\n\t\"proudly\": 14144,\n\t\"freezing\": 8076,\n\t\"grandeur\": 14014,\n\t\"Sinhalese\": 18989,\n\t\"immunity\": 20520,\n\t\"choice\": 2699,\n\t\"diet\": 5572,\n\t\"1,350\": 24410,\n\t\"linked\": 3810,\n\t\"DESPERATE\": 11919,\n\t\"argues\": 740,\n\t\"economically\": 14646,\n\t\"Currently\": 11251,\n\t\"notifications\": 2336,\n\t\"fewer\": 14798,\n\t\"cuisine\": 15442,\n\t\"Shakespeare's\": 4224,\n\t\"Growers\": 8080,\n\t\"microwave\": 2603,\n\t\"Poland's\": 16859,\n\t\"permanent\": 15297,\n\t\"Sistani's\": 19267,\n\t\"difficult\": 414,\n\t\"intentional\": 19272,\n\t\"Specifications\": 19474,\n\t\"'60s\": 29119,\n\t\"enjoyed\": 10833,\n\t\"AKMA\": 10914,\n\t\"mechanisms\": 878,\n\t\"Smakkecenter\": 17257,\n\t\"UDCs\": 23722,\n\t\"Henry\": 2938,\n\t\"Quat\": 12422,\n\t\"pinning\": 22111,\n\t\"Covey\": 21548,\n\t\"plated\": 10305,\n\t\"solar\": 11316,\n\t\"Teresa\": 23092,\n\t\"sponge\": 26711,\n\t\"Acapulco\": 6188,\n\t\"1602\": 16772,\n\t\"invencion\": 25452,\n\t\"garner\": 25896,\n\t\"h-\": 6815,\n\t\"told\": 6214,\n\t\"meals\": 11437,\n\t\"Woods'\": 22467,\n\t\"creative\": 378,\n\t\"Academy\": 1302,\n\t\"1939\": 5587,\n\t\"unclenched\": 9692,\n\t\"counting\": 6287,\n\t\"colonialists\": 31955,\n\t\"puny\": 32685,\n\t\"Crew\": 24481,\n\t\"gets\": 6512,\n\t\"tussock\": 25184,\n\t\"marionettes\": 25716,\n\t\"owning\": 28997,\n\t\"York's\": 5842,\n\t\"Commodity\": 21133,\n\t\"’s\": 271,\n\t\"Danelia\": 21966,\n\t\"learnt\": 1789,\n\t\"Gary\": 12441,\n\t\"bass\": 8559,\n\t\"Vindebyørevej\": 17302,\n\t\"Metis\": 32674,\n\t\"extraterrestrial\": 11320,\n\t\"swung\": 8722,\n\t\"V-legged\": 32493,\n\t\"Tha-\": 7126,\n\t\"musician\": 12343,\n\t\"charming\": 27960,\n\t\"technician\": 30023,\n\t\"bona\": 8110,\n\t\"sell\": 3725,\n\t\"yen\": 4759,\n\t\"cross-cultural\": 1958,\n\t\"Ya\": 6889,\n\t\"convey\": 7418,\n\t\"threatened\": 8728,\n\t\"De\": 3092,\n\t\"suspicion\": 13536,\n\t\"frowned\": 8727,\n\t\"QUESO\": 28491,\n\t\"Blowback\": 25738,\n\t\"DOORS\": 29695,\n\t\"kebabs\": 15558,\n\t\"1865\": 16894,\n\t\"Steffes\": 22460,\n\t\"Mister\": 6732,\n\t\"transmission\": 21052,\n\t\"Non-Bondad\": 21412,\n\t\"Leithead\": 24423,\n\t\"operations\": 2345,\n\t\"Attention\": 1499,\n\t\"assertive\": 6016,\n\t\"inscriptions\": 10163,\n\t\"United\": 20,\n\t\"Horse\": 17548,\n\t\"ABC\": 5246,\n\t\"expensive\": 7048,\n\t\"nagged\": 27345,\n\t\"Turn\": 22252,\n\t\"1998\": 5714,\n\t\"A\": 760,\n\t\"bookings\": 13650,\n\t\"uneducated\": 15463,\n\t\"RAFAEL\": 14362,\n\t\"Oven\": 18400,\n\t\"queer\": 31071,\n\t\"FERC's\": 21054,\n\t\"Yep\": 6461,\n\t\"gasped\": 14114,\n\t\"UGH\": 28714,\n\t\"vigilant\": 15711,\n\t\"rather\": 1350,\n\t\"walk\": 4693,\n\t\"teach\": 3192,\n\t\"waiing\": 17347,\n\t\"aimed\": 3749,\n\t\"gandalf\": 19463,\n\t\"anybody's\": 14639,\n\t\"styrofoam\": 27859,\n\t\"pioneer\": 5618,\n\t\"skill\": 26776,\n\t\"slides\": 10644,\n\t\"oily\": 8896,\n\t\"ventured\": 10534,\n\t\"1560\": 25443,\n\t\"parenthetically\": 11324,\n\t\"grenades\": 25813,\n\t\"reeds\": 9429,\n\t\"01:47\": 23210,\n\t\"lighting\": 2075,\n\t\"multiplayer\": 24243,\n\t\"Moments\": 9357,\n\t\"Shalev\": 11247,\n\t\"Dante\": 10147,\n\t\"FERC\": 21345,\n\t\"Papeluna\": 29426,\n\t\"notional\": 23418,\n\t\"paradox\": 6648,\n\t\"I.S.C.\": 23111,\n\t\"Mademoiselle\": 3895,\n\t\"5.3\": 5239,\n\t\"hidden\": 8379,\n\t\"Interior\": 13152,\n\t\"jodud...@aol.com\": 24671,\n\t\"steward\": 5958,\n\t\"havens\": 20473,\n\t\"Counselors\": 24266,\n\t\"facilitate\": 403,\n\t\"ARD\": 19459,\n\t\"auditioned\": 5754,\n\t\"enchilada\": 28528,\n\t\"Flow\": 21839,\n\t\"nullified\": 14716,\n\t\"outward\": 17797,\n\t\"gender\": 364,\n\t\"sturdy\": 18132,\n\t\"eviction\": 7590,\n\t\"regulate\": 14976,\n\t\"suburbs\": 16659,\n\t\"CLEAN\": 27383,\n\t\"ll\": 11068,\n\t\"sailing\": 14470,\n\t\"elastic\": 31567,\n\t\"Tighten\": 26731,\n\t\"September\": 2249,\n\t\".mdb\": 30116,\n\t\"conservation\": 2104,\n\t\"descends\": 25348,\n\t\"__________________________________________________\": 22081,\n\t\"ordeal\": 30028,\n\t\"Tco\": 21809,\n\t\"Seats\": 22941,\n\t\"nightly\": 15480,\n\t\"delectable\": 28296,\n\t\"joyous\": 8557,\n\t\"Cesar\": 28540,\n\t\"post-season\": 11084,\n\t\"Dulaim\": 18527,\n\t\"Surface\": 32850,\n\t\"LONGER\": 11881,\n\t\"investigative\": 23666,\n\t\"internally\": 24637,\n\t\"pushy\": 29152,\n\t\"memory\": 63,\n\t\"Ranger\": 22087,\n\t\"b-\": 6326,\n\t\"rays\": 7018,\n\t\"Rider\": 13260,\n\t\"Ants\": 10261,\n\t\"Greensboro\": 13330,\n\t\"peculiarly\": 32372,\n\t\"18:11\": 24500,\n\t\"definable\": 2543,\n\t\"owls\": 16094,\n\t\"ensured\": 17076,\n\t\"flattened\": 31740,\n\t\"originality\": 2484,\n\t\"venue\": 4511,\n\t\"Jove\": 31292,\n\t\"Shek\": 12894,\n\t\"switched\": 8677,\n\t\"handcraft\": 28586,\n\t\"phenomenon\": 1368,\n\t\"concerning\": 2102,\n\t\"knowledgable\": 28381,\n\t\"bights\": 31192,\n\t\"quartered\": 25441,\n\t\"assume\": 7506,\n\t\"communicate\": 6002,\n\t\"explained\": 2886,\n\t\"Kwik\": 28701,\n\t\"cuisines\": 15433,\n\t\"Tel\": 20921,\n\t\"meager\": 20369,\n\t\"boring\": 17975,\n\t\"Islamabad\": 19132,\n\t\"Emona\": 4974,\n\t\"w-\": 6221,\n\t\"’73\": 19232,\n\t\"flimsy\": 32392,\n\t\"pager\": 23320,\n\t\"Cuban\": 16458,\n\t\"full-length\": 32698,\n\t\"04:49\": 22033,\n\t\"Manakau\": 16364,\n\t\"Cortese\": 5830,\n\t\"Pictures\": 26824,\n\t\"HERE\": 11886,\n\t\"longevity\": 23998,\n\t\"flogging\": 25233,\n\t\"banner\": 11081,\n\t\"Tale\": 14442,\n\t\"runners\": 19563,\n\t\"Julian\": 4117,\n\t\"ailment\": 25432,\n\t\"grisbi\": 5403,\n\t\"Wyndham\": 22798,\n\t\"1:30\": 21386,\n\t\"Meiji\": 4609,\n\t\"lizards\": 27765,\n\t\"mins\": 26773,\n\t\"re-\": 6645,\n\t\"vendors\": 12536,\n\t\"drove\": 4951,\n\t\"cities\": 9297,\n\t\"filters\": 26225,\n\t\"incumbent\": 1436,\n\t\"craftsmanship\": 12614,\n\t\"closet\": 10686,\n\t\"proxy\": 2775,\n\t\"unimpeded\": 12949,\n\t\"crush\": 13172,\n\t\"lipsticks\": 16003,\n\t\"squeaks\": 26432,\n\t\"http://www.wikihow.com/wikiHow:Contributions-to-Charity\": 10788,\n\t\"farmland\": 9114,\n\t\"intervals\": 18334,\n\t\"sickness\": 9926,\n\t\"adjustment\": 22317,\n\t\"poles\": 17276,\n\t\"avoiding\": 9611,\n\t\"lines\": 975,\n\t\"bringing\": 1468,\n\t\"West\": 4411,\n\t\"Smith\": 27,\n\t\"frowns\": 8775,\n\t\"sorghum\": 13483,\n\t\"ramshackle\": 18905,\n\t\"Bullet\": 24282,\n\t\"inflated\": 24588,\n\t\"safeguards\": 13169,\n\t\"conduct\": 3416,\n\t\"Ibn\": 18620,\n\t\"dangerou-\": 6761,\n\t\"followings\": 27487,\n\t\"directive\": 24403,\n\t\"communalism\": 14081,\n\t\"Study\": 3364,\n\t\"handled\": 23070,\n\t\"vying\": 17521,\n\t\"deposition\": 18563,\n\t\"virile\": 25667,\n\t\"unpretentious\": 29776,\n\t\"offsetting\": 13468,\n\t\"C.I.A.\": 30682,\n\t\"rephrasing\": 30857,\n\t\"man-of-war\": 31118,\n\t\"notion\": 3753,\n\t\"Decrease\": 29513,\n\t\"happenstance\": 14842,\n\t\"sing\": 17924,\n\t\"missile's\": 25797,\n\t\"Getting\": 17663,\n\t\"behavior\": 756,\n\t\"Heian\": 4655,\n\t\"guy's\": 6080,\n\t\"governance\": 15472,\n\t\"metabolically\": 10629,\n\t\"paperwork\": 18163,\n\t\"Husayn\": 4523,\n\t\"emptiness\": 8768,\n\t\"Walton\": 7533,\n\t\"group’s\": 12728,\n\t\"LGBTQ\": 7297,\n\t\"Visualize\": 24610,\n\t\"Coach\": 29037,\n\t\"replied\": 18837,\n\t\"unorganized\": 28952,\n\t\"1960's\": 29393,\n\t\"coronavirus\": 13802,\n\t\"Viola\": 25545,\n\t\"theft\": 12337,\n\t\"Grill\": 26907,\n\t\"BAC\": 28333,\n\t\"moreso\": 24262,\n\t\"garnishes\": 28890,\n\t\"deity\": 18219,\n\t\"succession\": 9949,\n\t\"Nix\": 14455,\n\t\"frying\": 32096,\n\t\"hesitantly\": 9602,\n\t\"2;30\": 26458,\n\t\"disclaim\": 31242,\n\t\"taken\": 772,\n\t\"1959\": 5484,\n\t\"Digi\": 12634,\n\t\"Twister\": 17947,\n\t\"wish\": 2297,\n\t\"unselfish\": 31031,\n\t\"Bazar\": 19603,\n\t\"Lutheran\": 5005,\n\t\"joyfully\": 32167,\n\t\"move\": 3715,\n\t\"Renee\": 21737,\n\t\"Afghans\": 12097,\n\t\"21/03/2001\": 22628,\n\t\"impolite\": 20607,\n\t\"eight\": 5810,\n\t\"Altoona\": 4878,\n\t\"Cherry\": 8228,\n\t\"metropolitan\": 16382,\n\t\"Fisheries\": 16301,\n\t\"fainting\": 17813,\n\t\"Karine\": 1501,\n\t\".?\": 21791,\n\t\"ambitiously\": 19038,\n\t\"Patrick’s\": 27815,\n\t\"Rhonda\": 23533,\n\t\"jiu\": 28543,\n\t\"Failing\": 30669,\n\t\"Gas\": 6262,\n\t\"Rodaba\": 12098,\n\t\"noun\": 1142,\n\t\"Uniformity\": 14965,\n\t\"brothel\": 25592,\n\t\"Parking\": 29728,\n\t\"acts\": 907,\n\t\"Zoning\": 23168,\n\t\"louise\": 26976,\n\t\"robots\": 12083,\n\t\"Wanted\": 19993,\n\t\"alternate\": 22734,\n\t\"touts\": 29980,\n\t\"outbreak\": 1361,\n\t\"Mohammad\": 4463,\n\t\"authors\": 999,\n\t\"Deploy\": 18196,\n\t\"Winston\": 17468,\n\t\"Snake's\": 27349,\n\t\"ads\": 10692,\n\t\"yr.\": 11791,\n\t\"blacks\": 31782,\n\t\"Subsequently\": 19605,\n\t\"04/16/2001\": 22999,\n\t\"steal\": 27035,\n\t\"scrutiny\": 19492,\n\t\"Tricks\": 10324,\n\t\"Francisco\": 9776,\n\t\"8.3\": 15656,\n\t\"Godspeed\": 32592,\n\t\"powerhead\": 26668,\n\t\"undergo\": 31425,\n\t\"Systematic\": 2374,\n\t\"gradually\": 11276,\n\t\"OFOs\": 23658,\n\t\"stooge\": 19280,\n\t\"Today’s\": 2069,\n\t\"Judd\": 13641,\n\t\"17:32\": 24466,\n\t\"clamped\": 13826,\n\t\"stronghold\": 19024,\n\t\"fulltime\": 23456,\n\t\"mirror\": 9820,\n\t\"rowdy\": 30831,\n\t\"GCP_London\": 22994,\n\t\"encourage\": 12082,\n\t\"essentials\": 18150,\n\t\"SHOULD\": 24741,\n\t\"GI\": 25978,\n\t\"haircut\": 28142,\n\t\"twenty-thousand-dollar\": 30812,\n\t\"overly\": 17679,\n\t\"MOON\": 24447,\n\t\"ponies\": 6421,\n\t\"currently\": 4190,\n\t\"somehow\": 3881,\n\t\"loo\": 18069,\n\t\"UNESCO\": 10851,\n\t\"stops\": 8201,\n\t\"corpora\": 3812,\n\t\"behold\": 20238,\n\t\"NASA\": 2587,\n\t\"investors\": 11660,\n\t\"s...@sonic.net\": 24869,\n\t\"S-\": 6314,\n\t\"unstaunched\": 32875,\n\t\"preconceptions\": 20776,\n\t\"Newton\": 13396,\n\t\"boozy\": 30296,\n\t\"staind\": 11467,\n\t\"livestock\": 25088,\n\t\"variant\": 16273,\n\t\"attendant\": 22923,\n\t\"equally\": 7951,\n\t\"KEVALAM\": 24634,\n\t\"bank's\": 32319,\n\t\"Faulkner\": 30720,\n\t\"triviality\": 19920,\n\t\"person's\": 8484,\n\t\"reversing\": 9939,\n\t\"potted\": 32631,\n\t\"fulfill\": 14032,\n\t\"Usually\": 12780,\n\t\"iguana\": 6957,\n\t\"joinery\": 4587,\n\t\"K.\": 23072,\n\t\"ambulance\": 20505,\n\t\"farthest\": 31044,\n\t\"Rumanian\": 30575,\n\t\"hinges\": 6547,\n\t\"separate\": 3057,\n\t\"AntyScience\": 10239,\n\t\"upgrade\": 8394,\n\t\"clan\": 18526,\n\t\"POA\": 21609,\n\t\"childhood\": 8715,\n\t\"5:30\": 19849,\n\t\"discovered\": 3308,\n\t\"Mmkay\": 6951,\n\t\"allowance\": 17350,\n\t\"Bat\": 12566,\n\t\"McMasters\": 9762,\n\t\"Marianne\": 16056,\n\t\"Pass\": 19480,\n\t\"schoolboy\": 5028,\n\t\"rocket\": 11326,\n\t\"238\": 12257,\n\t\"Brock\": 4767,\n\t\"w\": 22221,\n\t\"credence\": 8178,\n\t\"forehead\": 9483,\n\t\"Ruhollah\": 18924,\n\t\"boost\": 1479,\n\t\"singles\": 11808,\n\t\"sleek\": 9020,\n\t\"Kunst\": 20190,\n\t\"plagiarized\": 3171,\n\t\"confession\": 20687,\n\t\"holders\": 4272,\n\t\"train\": 6356,\n\t\"charged\": 11638,\n\t\"betray\": 32710,\n\t\"pursued\": 18894,\n\t\"allotted\": 18276,\n\t\"progresses\": 25265,\n\t\"lowly\": 32575,\n\t\"tmesis\": 1136,\n\t\"Marauders\": 4872,\n\t\"me\": 1381,\n\t\"Tyburn\": 25442,\n\t\"exquisite\": 10722,\n\t\"PD\": 19970,\n\t\"Kingdom's\": 12643,\n\t\"SOUND\": 25381,\n\t\"Aldrich\": 18056,\n\t\"Glandular\": 24061,\n\t\"Cruise\": 12693,\n\t\"Steal\": 31333,\n\t\"Kingel\": 24248,\n\t\"arms\": 6856,\n\t\"rotation\": 3242,\n\t\"02:17\": 22405,\n\t\"shirt\": 5881,\n\t\"resident\": 7885,\n\t\"Evansville\": 13272,\n\t\"tissue\": 9870,\n\t\"tat\": 12495,\n\t\"whipping\": 32163,\n\t\"recover\": 15491,\n\t\"Floyd\": 14096,\n\t\"power\": 836,\n\t\"broker\": 19047,\n\t\"unmediated\": 10115,\n\t\"degu\": 27426,\n\t\"metrical\": 1072,\n\t\"deterring\": 19008,\n\t\"workshops\": 23278,\n\t\"anime\": 8266,\n\t\"soaring\": 24561,\n\t\"tattoed\": 30311,\n\t\"25/01/2001\": 23464,\n\t\"Joseph\": 3244,\n\t\"peacekeepers\": 14256,\n\t\"GROOM\": 19823,\n\t\"Anouilh's\": 5446,\n\t\"rangoon\": 28479,\n\t\"software's\": 26612,\n\t\"pointing\": 8830,\n\t\"CONN.\": 11803,\n\t\"reported\": 1703,\n\t\"gradual\": 2877,\n\t\"Extracts\": 1838,\n\t\"hindering\": 15209,\n\t\"lovely\": 15877,\n\t\"Dollar\": 21678,\n\t\"shy\": 25225,\n\t\"pastor\": 5589,\n\t\"Heineken\": 26918,\n\t\"........\": 27926,\n\t\"abstractedly\": 30416,\n\t\"prosecutors\": 19956,\n\t\"familia\": 28841,\n\t\"1971\": 3661,\n\t\"Boutique\": 28633,\n\t\"brushes\": 15708,\n\t\"Aviation\": 19590,\n\t\"PoP\": 26404,\n\t\"forces\": 2796,\n\t\"Orthodox\": 5004,\n\t\"Members\": 12302,\n\t\"wireless\": 8341,\n\t\"excess\": 18370,\n\t\"dab\": 19819,\n\t\"TW's\": 23616,\n\t\"http://gimpedblog.blogspot.com/2011/09/gimp-video-tutorial-how-to-convert.html\": 26623,\n\t\"CANNON\": 11501,\n\t\"Spalding\": 4445,\n\t\"ordered\": 15641,\n\t\"conquer\": 11182,\n\t\"Christiane\": 27639,\n\t\"benefiting\": 24036,\n\t\"securely\": 18136,\n\t\"post-Saddam\": 18950,\n\t\"Dealer\": 28851,\n\t\"labels\": 48,\n\t\"passengers\": 16294,\n\t\"linens\": 29826,\n\t\"....................\": 20101,\n\t\"size\": 1928,\n\t\"whirl\": 32232,\n\t\"oja\": 7001,\n\t\"unpack\": 18156,\n\t\"petit\": 28288,\n\t\"reclaimed\": 15352,\n\t\"affectionate\": 27353,\n\t\"embarrass\": 9543,\n\t\"visa\": 12053,\n\t\"cereal\": 16104,\n\t\"Scientists\": 13441,\n\t\"plantains\": 29473,\n\t\"17,100\": 11525,\n\t\"100\": 13291,\n\t\"freckle-faced\": 32134,\n\t\"sorrrow\": 14027,\n\t\"Provide\": 26323,\n\t\"confirmed\": 4288,\n\t\"locally\": 1798,\n\t\"Passion's\": 12494,\n\t\"meds\": 28051,\n\t\"01/24/2001\": 23420,\n\t\"perfection\": 23492,\n\t\"16\": 508,\n\t\"CRRA\": 21224,\n\t\"simplifications\": 22598,\n\t\"RAPED\": 29146,\n\t\"flirt\": 17952,\n\t\"4TH\": 29684,\n\t\"rosters\": 4891,\n\t\"KAMALA\": 14303,\n\t\":.\": 24908,\n\t\"heaven's\": 31563,\n\t\"Penny\": 28448,\n\t\"made\": 1520,\n\t\"Chet\": 11122,\n\t\"Catbird\": 12548,\n\t\"pilot\": 91,\n\t\"kiddies\": 29122,\n\t\"spot\": 7512,\n\t\"ribs\": 9644,\n\t\"Odette\": 5854,\n\t\"sample\": 444,\n\t\"fixing\": 11945,\n\t\"ante\": 881,\n\t\":\": 6,\n\t\"horrible\": 7036,\n\t\"radios\": 12014,\n\t\"Mommies\": 23921,\n\t\"Brotherhood\": 10312,\n\t\"remind\": 5045,\n\t\"pitcher\": 4804,\n\t\"0590920648\": 16700,\n\t\"ammonia\": 26571,\n\t\"Asked\": 24460,\n\t\"nicest\": 28116,\n\t\"Caprese\": 17769,\n\t\"instigate\": 18764,\n\t\"Ambiguity\": 17611,\n\t\"Azerbaijan\": 20630,\n\t\"breakaway\": 23995,\n\t\"Frisbee\": 18348,\n\t\"notte\": 5498,\n\t\"27th\": 5533,\n\t\"typical\": 2141,\n\t\"leaning\": 9864,\n\t\"conditioned\": 29098,\n\t\"outfit\": 9813,\n\t\"quantitative\": 1623,\n\t\"games’\": 1631,\n\t\"6th\": 2856,\n\t\"succintly\": 20251,\n\t\"calculating\": 22172,\n\t\"LAURA\": 25355,\n\t\"muttered\": 30417,\n\t\"solicit\": 24359,\n\t\"Conversation\": 8536,\n\t\"2.4\": 26083,\n\t\"LeRoy\": 6141,\n\t\"confidently\": 29903,\n\t\"29\": 2688,\n\t\"You’re\": 8619,\n\t\"stubborn\": 17323,\n\t\"looser\": 19659,\n\t\"6/14\": 21789,\n\t\"Conversion\": 5096,\n\t\"$ometime$\": 26750,\n\t\"Ghassemlou\": 29065,\n\t\"Aquarius\": 2579,\n\t\"Forest\": 28132,\n\t\"tarred\": 9076,\n\t\"Cursed\": 32273,\n\t\"plots\": 4659,\n\t\"Requests\": 13196,\n\t\"Quixote\": 25513,\n\t\"pride\": 15435,\n\t\"filmed\": 15736,\n\t\"elbow\": 31018,\n\t\"Johnelle\": 20713,\n\t\"showdown\": 12610,\n\t\"Naha's\": 26942,\n\t\"reprimand\": 5966,\n\t\"http://www.caribbean-cruising.net\": 26926,\n\t\"parachutes\": 18181,\n\t\"continued\": 3194,\n\t\"enthusiasts\": 17161,\n\t\"migrains\": 32826,\n\t\"subpar\": 8033,\n\t\"intuitively\": 24638,\n\t\"Doesn’t\": 9861,\n\t\"misunderstanding\": 5674,\n\t\"dramatic\": 532,\n\t\"Sunni\": 18536,\n\t\"basket\": 8977,\n\t\"good\": 2080,\n\t\"Amount\": 21637,\n\t\"go\": 5061,\n\t\"importance\": 1582,\n\t\"rocky\": 16266,\n\t\"grey\": 13702,\n\t\"psychologists\": 15012,\n\t\"creating\": 875,\n\t\"Stark\": 22908,\n\t\"perfecting\": 17686,\n\t\"Looming\": 25728,\n\t\"recession\": 26043,\n\t\"MVP\": 4880,\n\t\"bastard\": 30845,\n\t\"us's\": 31993,\n\t\"catastrophic\": 19125,\n\t\"indivisible\": 14036,\n\t\"carpet\": 7137,\n\t\"Approximate\": 25929,\n\t\"distorts\": 15622,\n\t\"jumper\": 18191,\n\t\"Pellegrino\": 16109,\n\t\"Ellis\": 21413,\n\t\"heels\": 8575,\n\t\"laborer\": 31070,\n\t\"meal-times\": 31255,\n\t\"62,500\": 21042,\n\t\"obscured\": 32383,\n\t\"manifold\": 29053,\n\t\"Mackinaw\": 29631,\n\t\"uttermost\": 30933,\n\t\"uncrowded\": 12268,\n\t\"doltish\": 25522,\n\t\"Topless\": 17386,\n\t\"airless\": 31682,\n\t\"militant\": 10458,\n\t\"duster\": 26281,\n\t\"CONTEMPORARY\": 14911,\n\t\"Quaffle\": 18346,\n\t\"resubstantiation\": 22656,\n\t\"peroxide\": 10228,\n\t\"FOUR\": 24988,\n\t\"natives\": 15413,\n\t\"hideouts\": 20472,\n\t\"vocal\": 1736,\n\t\"revisited\": 11463,\n\t\"MERS\": 13805,\n\t\"groove\": 9317,\n\t\"salesman\": 13404,\n\t\"screening\": 26022,\n\t\"skinned\": 9146,\n\t\"frightening\": 10464,\n\t\"Tues.\": 11724,\n\t\"explosive\": 17082,\n\t\"vera\": 15950,\n\t\"numbing\": 23896,\n\t\"documented\": 8101,\n\t\"AREA\": 11515,\n\t\"snowboard\": 28050,\n\t\"claimed\": 6011,\n\t\"1978\": 4080,\n\t\"Grizzly\": 28467,\n\t\"Hapupu\": 16323,\n\t\"dih\": 6339,\n\t\"museum\": 47,\n\t\"RELEASE\": 14099,\n\t\"tripping\": 18177,\n\t\"stare\": 25554,\n\t\"throbbing\": 32030,\n\t\"prompted\": 3915,\n\t\"handful\": 19306,\n\t\"01:09\": 23061,\n\t\"cherry-\": 31559,\n\t\"Separating\": 27866,\n\t\"Increased\": 24562,\n\t\"narrowly\": 23695,\n\t\"Italia\": 28295,\n\t\"lauded\": 23346,\n\t\"RUDE\": 28396,\n\t\"conducting\": 3804,\n\t\"Appreciate\": 20987,\n\t\"10/31/00\": 22404,\n\t\"Riding\": 25000,\n\t\"phoebe\": 25118,\n\t\"club's\": 4856,\n\t\"09:01\": 23525,\n\t\"Harvard\": 3359,\n\t\"Daniels\": 9328,\n\t\"03:51\": 22555,\n\t\"dynamically\": 30074,\n\t\"Pioneer\": 26038,\n\t\"Afraid\": 19869,\n\t\"temple\": 14330,\n\t\"society’s\": 8326,\n\t\"planning\": 8071,\n\t\"flock\": 12928,\n\t\"clinched\": 11089,\n\t\"p\": 1687,\n\t\"sailor\": 30832,\n\t\"Possible\": 25881,\n\t\"FOURTH\": 10159,\n\t\"madrasas\": 20477,\n\t\"proceeded\": 12315,\n\t\"laser\": 12909,\n\t\"apprenticed\": 27954,\n\t\"astronomers\": 15321,\n\t\"rack\": 17877,\n\t\"manor\": 12565,\n\t\"thump\": 9718,\n\t\"Juan\": 18874,\n\t\"disturbing\": 18843,\n\t\"A1237\": 17568,\n\t\"rudest\": 29613,\n\t\"Dandenong\": 28884,\n\t\"Interim\": 13923,\n\t\"images\": 10162,\n\t\"Links\": 24749,\n\t\"captains\": 30950,\n\t\"hindlimb\": 2891,\n\t\"Compaq\": 21202,\n\t\"Travellers\": 27019,\n\t\"shines\": 7811,\n\t\"Maine\": 26095,\n\t\"hoop\": 30512,\n\t\"earthy\": 31133,\n\t\"Vernon's\": 32066,\n\t\"turquoise\": 32137,\n\t\"guardian\": 18213,\n\t\"Hotline\": 23591,\n\t\"datasheet\": 30073,\n\t\"NICER\": 30016,\n\t\"strictures\": 30384,\n\t\"wolf\": 25005,\n\t\"proceed\": 7567,\n\t\"ratty\": 26866,\n\t\"bunch\": 6890,\n\t\"predestined\": 6649,\n\t\"N'T\": 11833,\n\t\"brief\": 3142,\n\t\"ie\": 21339,\n\t\"boot\": 27581,\n\t\"driver's\": 27221,\n\t\"exemptions\": 31443,\n\t\"Determined\": 13864,\n\t\"WHY\": 21083,\n\t\"Ercot's\": 22863,\n\t\"democracy\": 12395,\n\t\"timeframe\": 22613,\n\t\"illusionless\": 30694,\n\t\"swap\": 6103,\n\t\"Shemin\": 21468,\n\t\"blades\": 8409,\n\t\"Chandler\": 17047,\n\t\"Here’s\": 7732,\n\t\"Delete\": 23483,\n\t\"Dampen\": 17731,\n\t\"143\": 23409,\n\t\"asymmetric\": 905,\n\t\"unearthed\": 15723,\n\t\"sleeping\": 9408,\n\t\"Feasts\": 32212,\n\t\"fur\": 24127,\n\t\"playing\": 2023,\n\t\"1969\": 11716,\n\t\"Cheer\": 11070,\n\t\"MTPs\": 14513,\n\t\"wee\": 19770,\n\t\"Bowes\": 23846,\n\t\"eather\": 29607,\n\t\"diaphanous\": 30926,\n\t\"cranium\": 18245,\n\t\"principles\": 1745,\n\t\"fading\": 10184,\n\t\"connecting\": 15101,\n\t\"mystery\": 8733,\n\t\"seasonal\": 21582,\n\t\"Travels\": 24216,\n\t\"wall\": 3286,\n\t\"complimented\": 29076,\n\t\"Introduces\": 25482,\n\t\"lure\": 9412,\n\t\"Maviglio\": 23677,\n\t\"Bojinka\": 20675,\n\t\"Unfriendly\": 28168,\n\t\"Spare\": 28433,\n\t\"Nz\": 30162,\n\t\"boxwood\": 31644,\n\t\"fairer\": 7975,\n\t\"relationship\": 2507,\n\t\"fleeing\": 4362,\n\t\"Whoa\": 14636,\n\t\"planners\": 20475,\n\t\"Calle\": 17014,\n\t\"t.\": 22223,\n\t\"integrity\": 24930,\n\t\"consumer\": 3020,\n\t\"6:13\": 14590,\n\t\"routines\": 15035,\n\t\"contains\": 4000,\n\t\"HOPE\": 11898,\n\t\"Qaeda’s\": 20595,\n\t\"oaths\": 14305,\n\t\"Messaging\": 17951,\n\t\"abuses\": 19303,\n\t\"arrayed\": 25786,\n\t\"MANAGER\": 29690,\n\t\"Spacetime\": 15534,\n\t\"heedless\": 9409,\n\t\"egalitarian\": 15516,\n\t\"planned\": 5722,\n\t\"ages\": 8499,\n\t\"sunroom\": 28240,\n\t\"reedy\": 17767,\n\t\"enviably\": 5949,\n\t\"Top\": 18366,\n\t\"adjusts\": 6624,\n\t\"peanuts\": 21250,\n\t\"Student\": 12242,\n\t\"before\": 1633,\n\t\"Buwei\": 3396,\n\t\"thick\": 8835,\n\t\"secondary\": 14573,\n\t\"Judicial\": 24715,\n\t\"12:36\": 23121,\n\t\"Tucson\": 28252,\n\t\"Kut\": 18505,\n\t\"theta\": 3714,\n\t\"thin\": 4660,\n\t\"attorney\": 7169,\n\t\"fish\": 8815,\n\t\"whistling\": 30472,\n\t\"counterintelligence\": 19392,\n\t\"deadness\": 30614,\n\t\"Adorned\": 16347,\n\t\"smacking\": 9730,\n\t\"Campus\": 2236,\n\t\"611\": 26741,\n\t\"let's\": 6216,\n\t\"electronic\": 20479,\n\t\"Roaring\": 16261,\n\t\"apologetic\": 29880,\n\t\"Hamdullah\": 12074,\n\t\"surely\": 1275,\n\t\"ISO\": 22871,\n\t\"intersects\": 2350,\n\t\"Sophie\": 4205,\n\t\"meritocratically\": 12984,\n\t\"consequential\": 14347,\n\t\"Publications\": 20861,\n\t\"regarded\": 14861,\n\t\"Kerrigan\": 23763,\n\t\"sharp\": 10008,\n\t\"oddly\": 13614,\n\t\"hectic\": 25273,\n\t\"consciousness\": 8333,\n\t\"Hotmail\": 24164,\n\t\"Book\": 28386,\n\t\"Deals\": 28225,\n\t\"Pettigrew\": 31979,\n\t\"constituted\": 32789,\n\t\"Australia\": 4145,\n\t\"timbers\": 9077,\n\t\"bruised\": 29934,\n\t\"japanese\": 26133,\n\t\"YouTube\": 5180,\n\t\"Padmasana\": 24181,\n\t\"hesitating\": 31038,\n\t\"walks\": 11257,\n\t\"soot\": 9149,\n\t\"petard\": 18815,\n\t\"DOJ\": 20774,\n\t\"casualty\": 20833,\n\t\"Thanh\": 26513,\n\t\"Boxer\": 3345,\n\t\"smuggling\": 19380,\n\t\"miscreants\": 29822,\n\t\"Kendel\": 24553,\n\t\"upscale\": 27245,\n\t\"03/21/2001\": 22991,\n\t\"Esports\": 12573,\n\t\"AIM\": 17955,\n\t\"COMES\": 28749,\n\t\"quashed\": 14756,\n\t\"storms\": 8153,\n\t\"Democratic\": 4533,\n\t\"cell\": 8661,\n\t\"by-and-by\": 31004,\n\t\"Perfect\": 16126,\n\t\"dentists\": 28258,\n\t\"behaving\": 31302,\n\t\"Broad\": 4496,\n\t\"CHICK\": 28735,\n\t\"!!!!!!!!!!!\": 26336,\n\t\"p.\": 2475,\n\t\"exploration\": 159,\n\t\"jewels\": 9100,\n\t\"horseshoe\": 6400,\n\t\"DUMB\": 28739,\n\t\"make-shift\": 32595,\n\t\"Deeper\": 32618,\n\t\"controls\": 2551,\n\t\"Quantcast\": 10766,\n\t\"Aaron\": 19446,\n\t\"How\": 31,\n\t\"cynical\": 20428,\n\t\"Patel\": 22038,\n\t\"methodically\": 30356,\n\t\"Basically\": 11330,\n\t\"DECOR\": 29622,\n\t\"fluttering\": 10027,\n\t\"book\": 2400,\n\t\"narrative\": 2501,\n\t\"Sibley\": 22857,\n\t\"Leads\": 23131,\n\t\"nineteen-forties\": 31973,\n\t\"Alarcos\": 1009,\n\t\"Aesar\": 18054,\n\t\"Signoffs\": 22035,\n\t\"Spreading\": 30663,\n\t\"Ernie\": 21911,\n\t\"torture\": 24859,\n\t\"central\": 439,\n\t\"wilted\": 30308,\n\t\"lean\": 11971,\n\t\"chattering\": 30550,\n\t\"wats\": 17377,\n\t\"Buis\": 22403,\n\t\"vlogger\": 5182,\n\t\"great-grandfather\": 31640,\n\t\"debutans\": 13102,\n\t\"Investments\": 32558,\n\t\"tranquil\": 30445,\n\t\"Baggio\": 12436,\n\t\"lemon\": 6698,\n\t\"disenfranchisement\": 8160,\n\t\"heavy\": 6660,\n\t\"fairy\": 9867,\n\t\"Bee\": 15235,\n\t\"969's\": 21066,\n\t\"quantifying\": 410,\n\t\"Polat\": 1538,\n\t\"Lone\": 22086,\n\t\"Enemy\": 9252,\n\t\"Parvovirus\": 27611,\n\t\"billion\": 5187,\n\t\"Listening\": 23644,\n\t\"Flickr\": 15226,\n\t\"impersonal\": 31598,\n\t\"Leach\": 21811,\n\t\"dadaniela@gmail.com\": 1503,\n\t\"biodiversity\": 17136,\n\t\"resilience\": 8165,\n\t\"Buxton\": 10351,\n\t\"C.DTF\": 23804,\n\t\"Fruit\": 26351,\n\t\"behaviour\": 330,\n\t\"recoil\": 20564,\n\t\"اصفهان\": 16725,\n\t\"07:50\": 23274,\n\t\"miss\": 10176,\n\t\"Right\": 4780,\n\t\"Lotfollah\": 16796,\n\t\"SENATE\": 14297,\n\t\"hay\": 6677,\n\t\"lookout\": 18511,\n\t\"since\": 1097,\n\t\"thereafter\": 19219,\n\t\"golf\": 13372,\n\t\"stalked\": 10043,\n\t\"relative's\": 20765,\n\t\"saxons\": 27629,\n\t\"aortic\": 29919,\n\t\"Neither\": 23700,\n\t\"perceiving\": 14996,\n\t\"Stories\": 26807,\n\t\"theatrical\": 5385,\n\t\"Terminal\": 17109,\n\t\"colonization\": 18785,\n\t\"rekindle\": 23945,\n\t\"downloaded\": 24976,\n\t\"stitch\": 32786,\n\t\"farrier\": 27947,\n\t\"Age\": 1074,\n\t\"identifying\": 8716,\n\t\"!!!!!!!!!!!!\": 26246,\n\t\"scrambling\": 9272,\n\t\"Waxman\": 25987,\n\t\"Outback\": 28918,\n\t\"Certain\": 30037,\n\t\"streamlined\": 12951,\n\t\"Refusing\": 6001,\n\t\"1920\": 3380,\n\t\"towering\": 15599,\n\t\"etc\": 224,\n\t\"jumpy\": 32284,\n\t\"Brava\": 16121,\n\t\"Checks\": 24010,\n\t\"arrive\": 12280,\n\t\"luck\": 12915,\n\t\"http://www.chernobyl.org.uk/page2.htm\": 18706,\n\t\"Sacre\": 29333,\n\t\"forgave\": 5986,\n\t\"biographers\": 3940,\n\t\"traces\": 20545,\n\t\"updates\": 21452,\n\t\"so-called\": 31751,\n\t\"Koran\": 25347,\n\t\"padlocked\": 32047,\n\t\"Differences\": 2786,\n\t\"plaque\": 10181,\n\t\"archeological\": 13507,\n\t\"Veterinary\": 20571,\n\t\"shell\": 12858,\n\t\"flirts\": 17960,\n\t\"boards\": 7005,\n\t\"Nottingham\": 25204,\n\t\"Staccato\": 11282,\n\t\"Incidentally\": 16847,\n\t\"HBO’s\": 2930,\n\t\"ANTONIO\": 25393,\n\t\"cult\": 20035,\n\t\"brightly\": 7812,\n\t\"Hm\": 6499,\n\t\"Edit\": 26928,\n\t\"Pilates\": 28157,\n\t\"audio-visual\": 31396,\n\t\"secluded\": 20001,\n\t\"CHILL\": 26761,\n\t\"Sophronius\": 4961,\n\t\"diagnosed\": 21244,\n\t\"CCA-15\": 22149,\n\t\"outro\": 15790,\n\t\"insufficient\": 1960,\n\t\"Goldberg\": 3783,\n\t\"sleeps\": 14008,\n\t\"Kowalke\": 23592,\n\t\"renewal\": 14342,\n\t\"Europe's\": 16866,\n\t\"friendliness\": 29791,\n\t\"Kelly\": 15239,\n\t\"vitamins\": 15929,\n\t\"Oglethorpe\": 21905,\n\t\"signers\": 24666,\n\t\"stereotype\": 17413,\n\t\"bonus\": 26808,\n\t\"Buckingham\": 28967,\n\t\"Antarctic\": 10675,\n\t\"expires\": 16028,\n\t\"God's\": 31160,\n\t\"09:22\": 21729,\n\t\"PLAN\": 22874,\n\t\"megawatt\": 23681,\n\t\"offer\": 325,\n\t\"mutually\": 21603,\n\t\"figures\": 15362,\n\t\"courtyard\": 9179,\n\t\"wiped\": 8668,\n\t\"Sorry\": 8694,\n\t\"Victory's\": 11061,\n\t\"Settlement\": 21662,\n\t\"6.25\": 21925,\n\t\"deepen\": 8478,\n\t\"avenues\": 2912,\n\t\"rabble\": 24290,\n\t\"manufacturing\": 16400,\n\t\"TMS\": 23598,\n\t\"invited\": 3476,\n\t\"AS400\": 22590,\n\t\"weighed\": 6659,\n\t\"rendering\": 11311,\n\t\"PALS\": 2655,\n\t\"several\": 191,\n\t\"restful\": 25272,\n\t\"’d\": 7716,\n\t\"transact\": 23057,\n\t\"wa-\": 6796,\n\t\"extraordinarily\": 28236,\n\t\"Centro\": 2238,\n\t\"swelling\": 9510,\n\t\"Image\": 10202,\n\t\"08:50\": 22167,\n\t\"cardiac\": 20747,\n\t\"messaging\": 17957,\n\t\"shrink\": 25603,\n\t\"Carlos\": 21655,\n\t\"belly\": 8607,\n\t\"Euro\": 13900,\n\t\"gentleman\": 14108,\n\t\"MT\": 24022,\n\t\"Spang\": 1006,\n\t\"10,000\": 8075,\n\t\"Dave\": 14462,\n\t\"improves\": 2157,\n\t\"flower\": 8935,\n\t\"fraternity\": 7310,\n\t\"alternates\": 22736,\n\t\"neighboring\": 17042,\n\t\"o.k.\": 21795,\n\t\"Cheney\": 24375,\n\t\"Gaining\": 26809,\n\t\"Collateral\": 23490,\n\t\"comparable\": 10452,\n\t\"compost\": 12006,\n\t\"6/1/01\": 23544,\n\t\"Rules\": 29759,\n\t\"1952\": 3461,\n\t\"equations\": 3850,\n\t\"harmonious\": 32772,\n\t\"ultra\": 21771,\n\t\"Chi-wai\": 12490,\n\t\"documentation\": 13379,\n\t\"capitalization\": 15110,\n\t\"Secunia.com\": 12792,\n\t\"generations\": 11188,\n\t\"Kevin\": 6777,\n\t\"taxpayers\": 19122,\n\t\"potatos\": 27446,\n\t\"queen\": 29252,\n\t\"Babylon\": 20211,\n\t\"unformatted\": 30144,\n\t\"WiFi\": 26749,\n\t\"XV\": 3524,\n\t\"Explorer's\": 12769,\n\t\"reviewers\": 28623,\n\t\"DIGITAL\": 26204,\n\t\"theory\": 2537,\n\t\"52\": 8059,\n\t\"borrow\": 6341,\n\t\"dressing\": 8171,\n\t\"usefulness\": 12802,\n\t\"2.975\": 21398,\n\t\"Structural\": 31502,\n\t\"ON\": 11879,\n\t\"axe\": 31241,\n\t\"tethered\": 7364,\n\t\"unfixed\": 32487,\n\t\"encouraged\": 318,\n\t\"blended\": 16199,\n\t\"court's\": 13247,\n\t\"sport\": 10843,\n\t\"SORRY\": 29692,\n\t\"retrieve\": 12154,\n\t\".lpk\": 30173,\n\t\"redownload\": 15869,\n\t\".348\": 4839,\n\t\"propane\": 27309,\n\t\"sofas\": 17423,\n\t\"’ll\": 8374,\n\t\"Sussman\": 28778,\n\t\"genetic\": 9582,\n\t\"refers\": 2461,\n\t\"vlog\": 15696,\n\t\"ale\": 27945,\n\t\"Q\": 15634,\n\t\"strategically\": 8028,\n\t\"1527\": 27112,\n\t\"that'd\": 7204,\n\t\"outright\": 11645,\n\t\"Pitney\": 23845,\n\t\"D-\": 6501,\n\t\"'70's\": 8496,\n\t\"Over\": 2646,\n\t\"technological\": 8287,\n\t\"Jarrold’s\": 4118,\n\t\"marvelous\": 20141,\n\t\"monetized\": 7965,\n\t\"enabled\": 686,\n\t\"Etudes\": 3437,\n\t\"deep\": 5051,\n\t\"Shortages\": 24575,\n\t\"opals\": 32271,\n\t\"believing\": 30000,\n\t\"underlined\": 31943,\n\t\"buoys\": 2558,\n\t\"lush\": 16639,\n\t\"substantially\": 7251,\n\t\"ten\": 3652,\n\t\"B2B\": 23852,\n\t\"http://judiciary.senate.gov/testimony.cfm?id=1725&wit_id=4905\": 24747,\n\t\"congregation\": 20132,\n\t\"cooperated\": 12319,\n\t\"browning\": 17875,\n\t\"motivated\": 12310,\n\t\"equip\": 21774,\n\t\"owns\": 5802,\n\t\"Love's\": 25398,\n\t\"Moreover\": 876,\n\t\"rights\": 768,\n\t\"STUFF\": 27483,\n\t\"alive\": 7838,\n\t\"Shindand\": 19735,\n\t\"kindergarten\": 28083,\n\t\"ethnocentric\": 15455,\n\t\"maintain\": 5643,\n\t\"delinquent\": 10921,\n\t\"danger\": 11607,\n\t\"Gore\": 18839,\n\t\"bit\": 6382,\n\t\"teams\": 11002,\n\t\"253\": 15151,\n\t\"JPY\": 21666,\n\t\"Civet\": 24840,\n\t\"kitten\": 26268,\n\t\"clearly\": 1769,\n\t\"dashed\": 9720,\n\t\"cantering\": 26655,\n\t\"quantification\": 13586,\n\t\"mentor\": 4642,\n\t\"navigation\": 26925,\n\t\"beaten-up\": 32397,\n\t\"billions\": 9215,\n\t\"spawn\": 19169,\n\t\"apprentice\": 25700,\n\t\"transactions\": 741,\n\t\"cults\": 20033,\n\t\"AFTER\": 11841,\n\t\"Sept\": 11399,\n\t\"welch\": 21538,\n\t\"RIGHT\": 29657,\n\t\"Housing\": 31571,\n\t\"diode\": 2106,\n\t\"strobe\": 29598,\n\t\"SS\": 23125,\n\t\"Ḥadīd\": 4470,\n\t\"insects\": 10207,\n\t\"we’ll\": 8866,\n\t\"02/13/2001\": 21723,\n\t\"rented\": 19853,\n\t\"boots\": 15965,\n\t\"stalemated\": 19005,\n\t\"union\": 7282,\n\t\"conclusion\": 12309,\n\t\"regading\": 21611,\n\t\"Restored\": 28994,\n\t\"wallowing\": 31171,\n\t\"47's\": 18576,\n\t\"delta\": 9116,\n\t\"Bali\": 20397,\n\t\"MUNI\": 27269,\n\t\"tenet\": 1715,\n\t\"EXPECTING\": 28578,\n\t\"Hamid\": 18524,\n\t\"Kr\": 17291,\n\t\"easing\": 14263,\n\t\"Rice\": 4837,\n\t\"carotid\": 21703,\n\t\"20005\": 22811,\n\t\"inexperienced\": 29061,\n\t\"shrouded\": 10608,\n\t\"fruity\": 16248,\n\t\"delicate\": 26375,\n\t\"more\": 377,\n\t\"illegal\": 7463,\n\t\"abt\": 26215,\n\t\"frustration\": 9201,\n\t\"====================================================\": 21806,\n\t\"Credibility\": 707,\n\t\"1733\": 3213,\n\t\"09/20/2000\": 21206,\n\t\"incredibly\": 11323,\n\t\"anti-essentialist\": 14926,\n\t\"sporadic\": 29874,\n\t\"Movement\": 3357,\n\t\"doses\": 13841,\n\t\"emirate\": 24363,\n\t\"completes\": 17678,\n\t\"silence\": 5088,\n\t\"encircle\": 20540,\n\t\"bewildering\": 32896,\n\t\"Edinburgh\": 27009,\n\t\"empathy\": 9646,\n\t\"moorland\": 26191,\n\t\"Sjöstedt\": 31369,\n\t\"decade\": 2568,\n\t\"flexion\": 2753,\n\t\"territorial\": 24560,\n\t\"extinct\": 2776,\n\t\"Calvary\": 5590,\n\t\"SOO\": 14577,\n\t\"Christina\": 19116,\n\t\"Wontons\": 28432,\n\t\"battled\": 11063,\n\t\"nerves\": 8870,\n\t\"Mako\": 16075,\n\t\"disarming\": 19039,\n\t\"Sally\": 4240,\n\t\"depraved\": 6570,\n\t\"blessings\": 18735,\n\t\"Substantive\": 22660,\n\t\"Greater\": 17049,\n\t\"staff\": 1465,\n\t\"ranked\": 16383,\n\t\"non-interference\": 19668,\n\t\"detonation\": 31180,\n\t\"sweet\": 10536,\n\t\"boarders\": 29788,\n\t\"Quinn's\": 30278,\n\t\"handsomely\": 20418,\n\t\"Streets\": 30398,\n\t\"excused\": 30460,\n\t\"speak\": 2465,\n\t\"standpoint\": 29421,\n\t\"reddest\": 13739,\n\t\"Finished\": 17879,\n\t\"entities\": 14994,\n\t\"Hollywood\": 6170,\n\t\"09:14\": 21185,\n\t\"7,000\": 25806,\n\t\"NEPOOL\": 21584,\n\t\"Gracie\": 28541,\n\t\"Fallujah\": 18591,\n\t\"trickle\": 7978,\n\t\"Release\": 24472,\n\t\"constraint\": 3750,\n\t\"ungainly\": 10048,\n\t\"hundreds\": 1021,\n\t\"subform\": 30224,\n\t\"coach's\": 18341,\n\t\"goal\": 7456,\n\t\"Warwickshire\": 26128,\n\t\"copyrighted\": 10800,\n\t\"coastal\": 2615,\n\t\"amuse\": 29485,\n\t\"success\": 4622,\n\t\"Mick\": 25623,\n\t\"GIMP\": 26614,\n\t\"Osip\": 30771,\n\t\"awaited\": 9270,\n\t\"surounded\": 27294,\n\t\"WHAT\": 21075,\n\t\"Watergate\": 14393,\n\t\"balloons\": 6271,\n\t\"Equals\": 7120,\n\t\"generate\": 2196,\n\t\"AK47's\": 20022,\n\t\"answetred\": 28689,\n\t\"falling\": 6005,\n\t\"Øhavet's\": 17253,\n\t\"intake\": 10233,\n\t\"FLOOD\": 11514,\n\t\"ancestors\": 16330,\n\t\"415.621.8317\": 23323,\n\t\"works\": 119,\n\t\"supervision\": 10262,\n\t\"uin\": 24900,\n\t\"Vodka\": 18411,\n\t\"drama\": 4110,\n\t\"graveyards\": 9112,\n\t\"acidity\": 16193,\n\t\"opinons\": 26888,\n\t\"amy.cornell@compaq.com\": 22139,\n\t\"01:02\": 23421,\n\t\"people-smugglers\": 31523,\n\t\"Was\": 6930,\n\t\"Buyer\": 23019,\n\t\"enchiladas\": 28497,\n\t\"sorrows\": 17985,\n\t\"run-time\": 30170,\n\t\"beside\": 4074,\n\t\"shelter\": 14267,\n\t\"answered\": 1993,\n\t\"laudable\": 19795,\n\t\"workload\": 7730,\n\t\"Sign\": 24664,\n\t\"Commanders\": 12872,\n\t\"briefed\": 19681,\n\t\"evolved\": 3717,\n\t\"drill\": 26922,\n\t\"Bogaerts\": 4940,\n\t\"ribbon\": 29828,\n\t\"within\": 368,\n\t\"Emam\": 16774,\n\t\"Googlenut\": 24495,\n\t\"toiletries\": 18152,\n\t\"perils\": 2164,\n\t\"Maynard\": 8255,\n\t\"Dye\": 1545,\n\t\"ivory\": 31286,\n\t\"waht\": 23909,\n\t\"pesto\": 15770,\n\t\"713-853-3044\": 23599,\n\t\"texts\": 10975,\n\t\"Prideful\": 17628,\n\t\"clergy\": 24686,\n\t\"10:55\": 11785,\n\t\"help\": 2074,\n\t\"childish\": 20435,\n\t\"Strait\": 15278,\n\t\"endow\": 1340,\n\t\"basking\": 24609,\n\t\"eleven\": 6224,\n\t\"trunk\": 32150,\n\t\"reorganisation\": 32560,\n\t\"Beatty\": 14133,\n\t\"Broadband\": 21113,\n\t\"fear\": 9411,\n\t\"occurred\": 941,\n\t\"42.65\": 1696,\n\t\"yheggy\": 24461,\n\t\"pondered\": 32802,\n\t\"wired\": 7908,\n\t\"mom\": 6948,\n\t\"sauce\": 16119,\n\t\"buffer\": 8508,\n\t\"winking\": 14806,\n\t\"booster\": 8861,\n\t\"hoops\": 18297,\n\t\"111\": 31534,\n\t\"league's\": 4827,\n\t\"Jesus\": 4993,\n\t\"non-Arab\": 20355,\n\t\"Edwards\": 14714,\n\t\"term\": 1825,\n\t\"conundrum\": 20213,\n\t\"Cliffside\": 16527,\n\t\"Orwellian\": 20464,\n\t\"201-592-4699\": 16588,\n\t\"limit\": 937,\n\t\"Edge\": 4167,\n\t\"emitted\": 32357,\n\t\"T\": 2057,\n\t\"greeting\": 17338,\n\t\"pyrimidal\": 20308,\n\t\"ohm\": 29285,\n\t\"hampered\": 2713,\n\t\"Keywords\": 2259,\n\t\"E.g.\": 15178,\n\t\"won't\": 6712,\n\t\"predominantly\": 20353,\n\t\"Opus\": 11279,\n\t\"Gel\": 23986,\n\t\"S’\": 9868,\n\t\"bombings\": 18498,\n\t\"Warren\": 19990,\n\t\"venture\": 15061,\n\t\"hangout\": 27569,\n\t\"useing\": 26760,\n\t\"Till\": 10139,\n\t\"bumping\": 20783,\n\t\"turd\": 30362,\n\t\"remake\": 6932,\n\t\"Chihuahua\": 5569,\n\t\"Hawijah\": 18528,\n\t\"Ismat\": 20761,\n\t\"makeup\": 15707,\n\t\"descendant\": 14371,\n\t\"uhh\": 16115,\n\t\"Pike's\": 24823,\n\t\"rubbing\": 27951,\n\t\"rapporteurs\": 31550,\n\t\"Dow\": 21850,\n\t\"augment\": 390,\n\t\"van\": 29886,\n\t\"No-59\": 31481,\n\t\"ant’s\": 15623,\n\t\"booking\": 13787,\n\t\"Disabled\": 10873,\n\t\"load\": 12005,\n\t\"refreshment\": 13420,\n\t\"Fraser\": 23373,\n\t\"distinguishing\": 8762,\n\t\"detector\": 20403,\n\t\"chords\": 25690,\n\t\"cehf\": 29779,\n\t\"decide\": 2296,\n\t\"Xishan\": 14876,\n\t\"pitiful\": 31046,\n\t\"#currentevents\": 7826,\n\t\".227\": 4826,\n\t\"Rove\": 25898,\n\t\"1656\": 16816,\n\t\"Texans\": 14710,\n\t\"Jr.\": 4920,\n\t\"SlimSkim\": 26675,\n\t\"Ne\": 4048,\n\t\"BURNT\": 28186,\n\t\"shoots\": 8910,\n\t\"Sheila\": 23138,\n\t\"Katrina\": 24393,\n\t\"Casnondelibreaten\": 18091,\n\t\"bystander\": 18324,\n\t\"02920\": 24312,\n\t\"questionnaire\": 12952,\n\t\"atrocity\": 20508,\n\t\"etter\": 27604,\n\t\"11:45\": 22340,\n\t\"responsibly\": 8371,\n\t\"comp.mail.maps\": 24324,\n\t\"bediener\": 30561,\n\t\"linguist\": 3646,\n\t\"exemption\": 31435,\n\t\"focusing\": 93,\n\t\"BRENNER\": 22843,\n\t\"Nearly\": 14704,\n\t\"270\": 25949,\n\t\"remained\": 4293,\n\t\"obliterating\": 22095,\n\t\"MOO\": 28435,\n\t\"Drizzle\": 18375,\n\t\"Fet\": 18079,\n\t\"PROGRAMS\": 23029,\n\t\"avenger\": 25566,\n\t\"Bye\": 15791,\n\t\"NAM\": 24633,\n\t\"bid\": 19015,\n\t\"MISTAKE\": 28873,\n\t\"Weekends\": 28170,\n\t\"brightness\": 223,\n\t\"comps.\": 11728,\n\t\"sandpit\": 31222,\n\t\"Instinct\": 10578,\n\t\"pan-democrats'\": 12512,\n\t\"Taiwan\": 12891,\n\t\"leading\": 2129,\n\t\"mongrel\": 9599,\n\t\"Would\": 6683,\n\t\"'nt\": 13766,\n\t\"Potters\": 7766,\n\t\"Subscribe\": 15903,\n\t\"narrowed\": 20696,\n\t\"standing\": 2745,\n\t\"apologised\": 24564,\n\t\"Fall\": 14796,\n\t\"CLUSTER\": 23033,\n\t\"scold\": 27392,\n\t\"definitions\": 20156,\n\t\"dividing\": 17478,\n\t\"ShakataGaNai\": 10749,\n\t\"whispering\": 31086,\n\t\"’72\": 19231,\n\t\"party\": 7134,\n\t\"departments\": 495,\n\t\"details\": 1089,\n\t\"carefully\": 2992,\n\t\"protected\": 7481,\n\t\"perspective\": 3091,\n\t\"partridge\": 31616,\n\t\"fresh-water\": 31039,\n\t\"organisations\": 24442,\n\t\"recited\": 30773,\n\t\"interested\": 1357,\n\t\"flawless\": 9513,\n\t\"raindrops\": 31998,\n\t\"Counsel\": 7366,\n\t\"EXPERIENCED\": 29062,\n\t\"conference\": 3665,\n\t\"press\": 9353,\n\t\"proposals\": 2366,\n\t\"#causalargument\": 7827,\n\t\"IT\": 13992,\n\t\"Office\": 7540,\n\t\"languages\": 1749,\n\t\"attraction\": 16331,\n\t\"²\": 17322,\n\t\"barrier\": 27264,\n\t\"sandwich\": 8871,\n\t\"Mukalla\": 17168,\n\t\"adjustable\": 23290,\n\t\"halted\": 9966,\n\t\"cologne\": 31699,\n\t\"starts\": 6241,\n\t\"non-human\": 24877,\n\t\"bare\": 9508,\n\t\"92101\": 23890,\n\t\"printing\": 28384,\n\t\"Rosebud\": 6284,\n\t\"rotten\": 6675,\n\t\"trimester\": 16152,\n\t\"conservationists\": 25080,\n\t\"irritable-looking\": 32356,\n\t\"orthographic\": 26829,\n\t\"illegals\": 27270,\n\t\"112th\": 30298,\n\t\"gaps\": 8699,\n\t\"wrath\": 26433,\n\t\"Believe\": 25213,\n\t\"labour\": 12831,\n\t\"Hikmetyar\": 19678,\n\t\"dualities\": 23958,\n\t\"annual\": 557,\n\t\"piano\": 32548,\n\t\"conduit\": 19532,\n\t\"Corey\": 22106,\n\t\"safeguard\": 8096,\n\t\"Before\": 9686,\n\t\"Liau\": 29518,\n\t\"Teach\": 18101,\n\t\"Montejo\": 16970,\n\t\"conjunction\": 22795,\n\t\"pipelines\": 10444,\n\t\"breaking\": 1140,\n\t\"Twelve\": 6986,\n\t\"knotted\": 9089,\n\t\"DSL's\": 28199,\n\t\"hailstorm\": 28503,\n\t\"readership\": 10761,\n\t\"abstain\": 19790,\n\t\"Margot\": 31911,\n\t\"developing\": 2047,\n\t\"forgo\": 20989,\n\t\"Earth’s\": 14606,\n\t\"forced\": 5574,\n\t\"invoicing\": 21399,\n\t\"landscape\": 8285,\n\t\"parents'\": 9828,\n\t\"scenic\": 17210,\n\t\"mcallister's\": 26451,\n\t\"trailor\": 23897,\n\t\"date\": 519,\n\t\"reestablished\": 18937,\n\t\"Corpus\": 3825,\n\t\"stature\": 19916,\n\t\"Itinerary\": 27493,\n\t\"thumpstar\": 28353,\n\t\"warmer\": 16192,\n\t\"station's\": 31258,\n\t\"couter-cultural\": 20130,\n\t\"dispersion\": 1697,\n\t\"carts\": 32316,\n\t\"collaboratively\": 13979,\n\t\"count\": 6276,\n\t\"smash\": 4579,\n\t\"cling\": 25300,\n\t\"forest\": 10001,\n\t\"concessions\": 31380,\n\t\"Nice\": 7135,\n\t\"pendulum\": 19113,\n\t\"business\": 526,\n\t\"Exploration\": 24482,\n\t\"Oxford\": 29634,\n\t\"world-wide\": 31423,\n\t\"Artist's\": 11310,\n\t\"remarked\": 10513,\n\t\"re\": 21499,\n\t\"forges\": 32911,\n\t\"claws\": 10037,\n\t\"Rangers\": 26104,\n\t\"ty\": 26601,\n\t\"norms\": 7276,\n\t\"Leung\": 12403,\n\t\"66\": 17448,\n\t\"transfers\": 20690,\n\t\"assumed\": 4286,\n\t\"cigarette-making\": 31814,\n\t\"came\": 3136,\n\t\"Icky\": 11770,\n\t\"Sinatra\": 5536,\n\t\"adorns\": 4757,\n\t\"Chathams\": 16276,\n\t\"OWN\": 29701,\n\t\"XSLT\": 30101,\n\t\"___________________________________________\": 23200,\n\t\"blindfolded\": 18340,\n\t\"environmentally\": 28270,\n\t\"Reuters\": 21675,\n\t\"writing\": 2413,\n\t\"Blogging\": 24417,\n\t\"Terrible\": 25503,\n\t\"educating\": 19268,\n\t\"Chittagong\": 19621,\n\t\"aspiring\": 25260,\n\t\"Wal\": 25853,\n\t\"sketchbook\": 13748,\n\t\"Hay\": 18616,\n\t\"Machine\": 5475,\n\t\"Rolls\": 21138,\n\t\"MEALS\": 29655,\n\t\"EEFTL\": 21668,\n\t\"dockworkers\": 9133,\n\t\"partnerships\": 13985,\n\t\"Tern\": 17221,\n\t\"redirect\": 20206,\n\t\"Sandra\": 23149,\n\t\"Comprehensive\": 14248,\n\t\"accession\": 31362,\n\t\"Ernst\": 10119,\n\t\"breasts\": 31194,\n\t\"Edmund\": 14893,\n\t\"anyting\": 21287,\n\t\"Continental\": 3552,\n\t\"Carter\": 23754,\n\t\"moist\": 17736,\n\t\"ASK\": 28392,\n\t\"tho\": 29130,\n\t\"stair\": 6924,\n\t\"else\": 3972,\n\t\"county's\": 7584,\n\t\"call\": 5556,\n\t\"safe\": 8708,\n\t\"pedicure\": 28441,\n\t\"Cool\": 6196,\n\t\"nights\": 9549,\n\t\"misrepresenting\": 12833,\n\t\"Cooperation\": 13876,\n\t\"providers\": 22424,\n\t\"Meeting\": 17552,\n\t\"sled\": 6285,\n\t\"urges\": 13541,\n\t\"Guard\": 19186,\n\t\"accessed\": 16534,\n\t\"Finnish\": 31470,\n\t\"ululating\": 31831,\n\t\"28,000\": 13299,\n\t\"lunatics\": 25582,\n\t\"crepey\": 9529,\n\t\"retake\": 22676,\n\t\"CFL\": 2046,\n\t\"Date\": 16257,\n\t\"crispy\": 29995,\n\t\"vegetation\": 9998,\n\t\"verified\": 20250,\n\t\"Uncannily\": 30275,\n\t\"dirtier\": 26951,\n\t\"Palestinian\": 18885,\n\t\"excited\": 10595,\n\t\"site's\": 10753,\n\t\"registration\": 22485,\n\t\"Parole\": 20837,\n\t\"archipelago\": 17271,\n\t\"reworded\": 23479,\n\t\"template\": 30091,\n\t\"passenger\": 17426,\n\t\"overlook\": 20819,\n\t\"1/2\": 14413,\n\t\"202.637.4781\": 22808,\n\t\"political\": 471,\n\t\"Korea\": 12835,\n\t\"navy\": 12166,\n\t\"passports\": 16448,\n\t\"refugees\": 12127,\n\t\"1611\": 25396,\n\t\"conglomerate\": 20551,\n\t\"Distraction\": 7654,\n\t\"stimulate\": 1067,\n\t\"forgotten\": 6144,\n\t\"panics\": 26851,\n\t\"cement\": 25990,\n\t\"staunch\": 14364,\n\t\"Lihaibi\": 19340,\n\t\"Ostrom\": 730,\n\t\"dances\": 21243,\n\t\"videoconference\": 22344,\n\t\"flowers\": 9370,\n\t\"Microsoft's\": 12758,\n\t\"TM\": 22491,\n\t\"propped\": 32269,\n\t\"forty-foot\": 32773,\n\t\".xsd\": 30120,\n\t\"uncertainty\": 757,\n\t\"Jesuit\": 4301,\n\t\"zither\": 14882,\n\t\"Neighborhood\": 24488,\n\t\"special\": 339,\n\t\"separating\": 16022,\n\t\"scored\": 4846,\n\t\"draws\": 7629,\n\t\"TFs\": 15853,\n\t\"Cassandra\": 12638,\n\t\"Verdot\": 16244,\n\t\"libel\": 20889,\n\t\"teammate\": 4860,\n\t\"Supposedly\": 30027,\n\t\"twenty-mile\": 31239,\n\t\"drug\": 8587,\n\t\"Cloth\": 26288,\n\t\"hoeing\": 11980,\n\t\"wii\": 26797,\n\t\"FHS\": 29454,\n\t\"fifths\": 7123,\n\t\"chat\": 7804,\n\t\"blossoms\": 9395,\n\t\"chicks\": 27136,\n\t\"undertakings\": 31531,\n\t\"expulsion\": 3836,\n\t\"messed\": 9640,\n\t\"waging\": 12706,\n\t\"tripadvisor\": 27406,\n\t\"bachelor\": 5637,\n\t\"warlords\": 14199,\n\t\"symptom\": 15800,\n\t\"inclusion\": 4829,\n\t\"10:30\": 21517,\n\t\"violets\": 32112,\n\t\"wealthy\": 3622,\n\t\"Avoid\": 5240,\n\t\"75\": 8185,\n\t\"Qa'ida\": 25961,\n\t\"Cures\": 24070,\n\t\"postdigital\": 3014,\n\t\"explanation\": 12978,\n\t\"Swap\": 21632,\n\t\"pwople\": 26456,\n\t\"Devolution\": 14516,\n\t\"designer\": 13373,\n\t\"derivative\": 7473,\n\t\"finalizing\": 14219,\n\t\"supervised\": 20651,\n\t\"SMOS\": 2573,\n\t\"loaves\": 9183,\n\t\"Venice\": 16756,\n\t\"midmarket\": 23510,\n\t\"Other\": 1556,\n\t\"Σωφρόνιος\": 4964,\n\t\"stocky\": 31908,\n\t\"possession\": 7572,\n\t\"clothes\": 9187,\n\t\"Alike\": 8542,\n\t\"pour\": 4058,\n\t\"trailer\": 27227,\n\t\"San\": 5706,\n\t\"appliances\": 2136,\n\t\"bump\": 30352,\n\t\"palms\": 12017,\n\t\"glimpsed\": 32847,\n\t\"including\": 361,\n\t\"paintings\": 99,\n\t\"firm\": 3612,\n\t\"merge\": 24615,\n\t\"G&G\": 29802,\n\t\"PMID\": 15245,\n\t\"drinks\": 6806,\n\t\"adviser\": 14461,\n\t\"Ill\": 23016,\n\t\"disown\": 32792,\n\t\"forecast\": 21303,\n\t\"ask\": 6209,\n\t\"blackness\": 9988,\n\t\"facts\": 15143,\n\t\"Nov.\": 18564,\n\t\"essay\": 5652,\n\t\"resumption\": 14739,\n\t\"Aging\": 8474,\n\t\"pretense\": 1246,\n\t\"collaborative\": 90,\n\t\"genuine\": 1205,\n\t\"Plays\": 17555,\n\t\"interconnected\": 17499,\n\t\"distilled\": 18024,\n\t\"journalistic\": 19206,\n\t\"ihop\": 26903,\n\t\"theologian\": 4970,\n\t\"manuscript\": 4010,\n\t\"dispossesses\": 11613,\n\t\"degenerate\": 20185,\n\t\"daydreaming\": 8018,\n\t\"that's\": 6193,\n\t\"adds\": 11114,\n\t\"mossy\": 32289,\n\t\"kilometres\": 19737,\n\t\"conflicting\": 3983,\n\t\"Physios\": 28320,\n\t\"Van\": 20756,\n\t\"Rahman's\": 20839,\n\t\"One's\": 4193,\n\t\"vocalist\": 5534,\n\t\"$ome\": 26752,\n\t\"farmlands\": 26189,\n\t\"http://www.csmonitor.com/2006/0509/p02s01-ussc.html?s=t5\": 20020,\n\t\"valuation\": 20907,\n\t\"ROADHOUSE\": 29654,\n\t\"screenwriter\": 5349,\n\t\"Sociologists\": 15520,\n\t\"enjoyment\": 22092,\n\t\"SNAP\": 19952,\n\t\"evolving\": 539,\n\t\"jogs\": 16259,\n\t\"vacations\": 5436,\n\t\"Parsi\": 7242,\n\t\"Midtown\": 17135,\n\t\"investor\": 24162,\n\t\"overpriced\": 28246,\n\t\"sad-feeling\": 31578,\n\t\"pressure\": 3283,\n\t\"Previous\": 241,\n\t\"le\": 3276,\n\t\"rape\": 19448,\n\t\"neighbouring\": 18661,\n\t\"theocratic\": 18921,\n\t\"tolerating\": 28657,\n\t\"Gauls\": 30989,\n\t\"whoopsie\": 20054,\n\t\"unresolved\": 14225,\n\t\"Manzano\": 19207,\n\t\"virtuoso\": 20547,\n\t\"slices\": 10641,\n\t\"Coined\": 24187,\n\t\"McDermott\": 21233,\n\t\"destinies\": 23960,\n\t\"jaws\": 27362,\n\t\"mutation\": 2252,\n\t\"Golan\": 18617,\n\t\"gosh\": 6318,\n\t\"mega\": 26216,\n\t\"Yor-vik\": 17538,\n\t\"flavour\": 18437,\n\t\"Manuscript\": 10660,\n\t\"gifted\": 19108,\n\t\"OFF\": 29658,\n\t\"freely\": 11601,\n\t\"morocco\": 31642,\n\t\"Plans\": 14512,\n\t\"Child\": 6838,\n\t\"co-ordinated\": 13148,\n\t\"Forsyth\": 31736,\n\t\"sons\": 18533,\n\t\"becomes\": 2819,\n\t\"mocking\": 11969,\n\t\"Repeat\": 17792,\n\t\"SCIENTIST\": 28747,\n\t\"Xander\": 4939,\n\t\"impending\": 3989,\n\t\"sunken\": 9448,\n\t\"disobedience\": 15037,\n\t\"discounted\": 28229,\n\t\"Robsart\": 25445,\n\t\"Olivia's\": 31557,\n\t\"defensive\": 4833,\n\t\"girlie\": 22078,\n\t\"clambered\": 9032,\n\t\"masts\": 9074,\n\t\"fridge\": 15778,\n\t\".292\": 4905,\n\t\"instructor\": 13409,\n\t\"Establish\": 18325,\n\t\"view\": 589,\n\t\"totalitarian\": 23955,\n\t\"proficient\": 8475,\n\t\"embarrassment\": 15085,\n\t\"THAI\": 26241,\n\t\"Fillmore's\": 3732,\n\t\"refuses\": 23230,\n\t\"lose\": 8730,\n\t\"Dekalb\": 19964,\n\t\"edmonton\": 28097,\n\t\"Easterners\": 17078,\n\t\"Hmmmmmm\": 20100,\n\t\"GREAT\": 28069,\n\t\"713-646-3393\": 23504,\n\t\"they’ve\": 14821,\n\t\"yield\": 7930,\n\t\"Hypnotizing\": 17787,\n\t\"excerpts\": 18679,\n\t\"private\": 774,\n\t\"decisively\": 7447,\n\t\"delay\": 11718,\n\t\"1956\": 16820,\n\t\"clings\": 14045,\n\t\"intrigue\": 23670,\n\t\"dozed\": 31695,\n\t\"‘\": 1725,\n\t\"alt.animals.dog\": 24836,\n\t\"hurtled\": 9219,\n\t\"intimately\": 19670,\n\t\"shirtsleeves\": 27807,\n\t\"furry\": 31791,\n\t\"peppery\": 16224,\n\t\"mess-room\": 31259,\n\t\"Montparnasse\": 4068,\n\t\"O.J.\": 10740,\n\t\"achievements\": 4393,\n\t\"answering\": 11241,\n\t\"łódź\": 16881,\n\t\"concession\": 7641,\n\t\"et.\": 24268,\n\t\"killies\": 27854,\n\t\"auxiliary\": 1147,\n\t\"shoes\": 6401,\n\t\"enclosing\": 20823,\n\t\"Style\": 27115,\n\t\"electromagnetic\": 7924,\n\t\"202.739.0134\": 22800,\n\t\"frustrating\": 27538,\n\t\"HND\": 26121,\n\t\"Sergey\": 12224,\n\t\"M62\": 17573,\n\t\"provoke\": 3916,\n\t\"Turks\": 4338,\n\t\"voice\": 7805,\n\t\"teens\": 27481,\n\t\"plugs\": 28914,\n\t\"notify\": 16299,\n\t\"kingston\": 20048,\n\t\"Glorious\": 31702,\n\t\"Mum's\": 32175,\n\t\"he\": 3174,\n\t\"KCNA\": 12842,\n\t\"mentioning\": 15152,\n\t\"T's\": 28829,\n\t\"debt\": 7931,\n\t\"Cavaliers\": 16432,\n\t\"SDG&E\": 23725,\n\t\"nigeria\": 27533,\n\t\"mannered\": 24718,\n\t\"Gram\": 9504,\n\t\"Ideally\": 2903,\n\t\"Vogel\": 18082,\n\t\"SUM-DISTINCT-Price\": 30048,\n\t\"BOTH\": 27480,\n\t\"energetic\": 14386,\n\t\"abyss\": 25555,\n\t\"headmaster\": 32441,\n\t\"delighted\": 21744,\n\t\"warped\": 15544,\n\t\"Gallup\": 22704,\n\t\"hirier\": 26457,\n\t\"peacetime\": 14468,\n\t\"aquarium\": 26478,\n\t\"services\": 450,\n\t\"guitar\": 25689,\n\t\"Alaskans\": 7894,\n\t\"pee\": 16058,\n\t\"venerable\": 30934,\n\t\"Belgian\": 15898,\n\t\"177\": 16532,\n\t\"back-and-forth\": 30679,\n\t\"sweety\": 21861,\n\t\"Riverside\": 17425,\n\t\"50,818\": 12459,\n\t\"OS\": 24214,\n\t\"Medal\": 4483,\n\t\"camels\": 28942,\n\t\"hawkish\": 19102,\n\t\"CityGate\": 21437,\n\t\"Hum.\": 11732,\n\t\"Exit\": 26912,\n\t\"masterminds\": 20855,\n\t\"mints\": 32700,\n\t\"TRYING\": 11893,\n\t\"Failure\": 11060,\n\t\"conscious\": 7291,\n\t\"creational\": 11277,\n\t\"Fairchild\": 28703,\n\t\"serviced\": 16293,\n\t\"spy\": 18051,\n\t\"foods\": 8035,\n\t\"deserts\": 8161,\n\t\"filming\": 4199,\n\t\"professional\": 475,\n\t\"Schwa\": 6707,\n\t\"16,000,000,000\": 24370,\n\t\"Uecomm\": 22228,\n\t\"depth\": 8720,\n\t\"relics\": 9592,\n\t\"pesky\": 19358,\n\t\"setup\": 2872,\n\t\"Genova\": 13198,\n\t\"dipped\": 9082,\n\t\"colonizers\": 13988,\n\t\"na-na-na-na-za-ba-da\": 6799,\n\t\"newsprint\": 18142,\n\t\"McMahon\": 23150,\n\t\"9:30\": 22867,\n\t\"issuing\": 12963,\n\t\"Enjambment\": 945,\n\t\"moaned\": 9673,\n\t\"matures\": 17760,\n\t\"coal\": 24574,\n\t\"grimness\": 31088,\n\t\"Liquidweb.com\": 28879,\n\t\"torrance\": 26904,\n\t\"logs\": 8966,\n\t\"b****\": 28971,\n\t\"Dazzling\": 5469,\n\t\"Finish\": 18258,\n\t\"subdue\": 19044,\n\t\"challenge\": 3008,\n\t\"hoisted\": 31203,\n\t\"resented\": 14687,\n\t\"passport\": 12810,\n\t\"cater\": 27001,\n\t\"Commissioners\": 22862,\n\t\"-s\": 28228,\n\t\"hill\": 9250,\n\t\"meditating\": 10138,\n\t\"pasted\": 24849,\n\t\"invasion\": 18906,\n\t\"Fancy\": 29092,\n\t\"paternalist\": 31752,\n\t\"based\": 493,\n\t\"anger\": 17606,\n\t\"tripped\": 13165,\n\t\"closed\": 4414,\n\t\"antennae\": 31790,\n\t\"Vladimir\": 25889,\n\t\"Chomsky's\": 3690,\n\t\"wound\": 19768,\n\t\"collateral\": 4875,\n\t\"liking\": 8705,\n\t\"Appeals\": 24713,\n\t\"bottoms\": 18159,\n\t\"Laundry\": 29566,\n\t\"outweigh\": 744,\n\t\"continually\": 11128,\n\t\"shares\": 8244,\n\t\"Lights\": 10129,\n\t\"Marval\": 23198,\n\t\"exposition\": 30851,\n\t\"Reagan\": 18807,\n\t\"969\": 21067,\n\t\"wikipedia\": 20102,\n\t\"diademed\": 31997,\n\t\"bridge\": 4593,\n\t\"Scenic\": 16314,\n\t\"NPR\": 19811,\n\t\"MSN\": 17954,\n\t\"Diary\": 4442,\n\t\"169\": 17429,\n\t\"Apollinaris\": 5142,\n\t\"Survey\": 2115,\n\t\"April\": 3560,\n\t\"wangs\": 26724,\n\t\"transformation\": 13994,\n\t\"like\": 428,\n\t\"YouTuber\": 5334,\n\t\"Understandably\": 20752,\n\t\"Wool\": 26503,\n\t\"subset\": 30082,\n\t\"Panting\": 32144,\n\t\"wine-growing\": 31494,\n\t\"philosophical\": 5021,\n\t\"hopes\": 10592,\n\t\"braced\": 23693,\n\t\"Admin\": 20947,\n\t\"alt.animals.lion\": 24833,\n\t\"Egg\": 26348,\n\t\"Grissom\": 29741,\n\t\"properly\": 2868,\n\t\"avoidance\": 20560,\n\t\"involving\": 59,\n\t\"Dietrich\": 23518,\n\t\"1872\": 4601,\n\t\"signs\": 10457,\n\t\"jealous\": 21867,\n\t\"liabilities\": 21105,\n\t\"Mackie\": 31564,\n\t\"rosette\": 29482,\n\t\"reachable\": 28591,\n\t\"attach\": 21217,\n\t\"milder\": 17216,\n\t\"Assignments\": 22430,\n\t\"persistency\": 30743,\n\t\"Authority\": 12260,\n\t\"someon\": 28989,\n\t\"presciently\": 8356,\n\t\"crawling\": 9682,\n\t\"60,008\": 21044,\n\t\"dump\": 7921,\n\t\"enclosed\": 21433,\n\t\"Poles\": 31862,\n\t\"WWII\": 27254,\n\t\"Titan\": 32673,\n\t\"GRRRRRRR\": 21535,\n\t\"Municipality\": 13194,\n\t\"open\": 1827,\n\t\"Automatic\": 944,\n\t\"duress\": 18866,\n\t\"acquire\": 1590,\n\t\"disruptive\": 15098,\n\t\"squadrons\": 19192,\n\t\"icy-wet\": 31662,\n\t\"lube\": 10493,\n\t\"trance\": 30243,\n\t\"Chickie\": 26704,\n\t\"contenders\": 19662,\n\t\"Obviously\": 7294,\n\t\"Excellent\": 6288,\n\t\"revert\": 30066,\n\t\"apologized\": 30415,\n\t\"Bunny\": 5337,\n\t\"lee\": 16550,\n\t\"salt\": 9010,\n\t\"cop\": 13529,\n\t\"BBQ\": 27832,\n\t\"blonde\": 29862,\n\t\"policies\": 604,\n\t\"nicety\": 31279,\n\t\"Freese\": 24797,\n\t\"resentment\": 31757,\n\t\"rivalry\": 19639,\n\t\"substantiation\": 22576,\n\t\"equalising\": 13143,\n\t\"cra.org/resources/taulbee-survey\": 562,\n\t\"Motion\": 11023,\n\t\"Lord\": 7217,\n\t\"Epstein\": 25608,\n\t\"oilskin\": 32476,\n\t\"1900\": 4900,\n\t\"administer\": 13831,\n\t\"Women\": 17395,\n\t\"Onomatopoeia\": 18086,\n\t\"actully\": 24518,\n\t\"subtle\": 3469,\n\t\"electrons\": 18035,\n\t\"outcomes\": 2013,\n\t\"portents\": 32571,\n\t\"jure\": 19035,\n\t\"staring\": 9251,\n\t\"Liars\": 29367,\n\t\"education\": 2441,\n\t\"SUCH\": 27024,\n\t\"CHS\": 24658,\n\t\"china\": 32014,\n\t\"mon\": 4056,\n\t\"Meidan\": 16773,\n\t\"solemnities\": 31819,\n\t\"sixteen\": 6535,\n\t\"chai\": 15759,\n\t\"executing\": 19786,\n\t\"Proposed\": 23309,\n\t\"Tks\": 22063,\n\t\"hooptie\": 28698,\n\t\"parachute\": 18232,\n\t\"glandular\": 18719,\n\t\"decompose\": 25149,\n\t\"christen\": 32438,\n\t\"beloved\": 7376,\n\t\"drunkest\": 28988,\n\t\"sketchy\": 29873,\n\t\"legionaries\": 30990,\n\t\"photograph\": 7420,\n\t\"Haram\": 13184,\n\t\"LOCUST\": 29953,\n\t\"compelling\": 8766,\n\t\"escape\": 3139,\n\t\"provocation\": 10431,\n\t\"sez\": 22478,\n\t\"untrained\": 29555,\n\t\"inspector\": 11811,\n\t\"sleeved\": 17382,\n\t\"plant's\": 17765,\n\t\"enrich\": 31447,\n\t\"airports\": 16451,\n\t\"tv\": 18626,\n\t\"accidents\": 20390,\n\t\"Shadow\": 6931,\n\t\"fatalities\": 10231,\n\t\"Santa\": 1506,\n\t\"experiences\": 4329,\n\t\"Obama\": 10437,\n\t\"schedules\": 10659,\n\t\"Refugee\": 13045,\n\t\"wasted\": 8055,\n\t\"600-480\": 22408,\n\t\"Russ\": 23792,\n\t\"talkshow\": 21553,\n\t\"scholar\": 10387,\n\t\"yellow-brown\": 31937,\n\t\"BOX\": 26779,\n\t\"summa\": 5560,\n\t\"set\": 528,\n\t\"Alan\": 21556,\n\t\"Separate\": 4739,\n\t\"aberrations\": 25714,\n\t\"grinned\": 23682,\n\t\"1100\": 17036,\n\t\"reservation\": 26439,\n\t\"populations\": 15291,\n\t\"bullfights\": 28332,\n\t\"Legal\": 11442,\n\t\"MEAT\": 29656,\n\t\"ratification\": 31361,\n\t\"Filippini\": 261,\n\t\"methodological\": 2043,\n\t\"never\": 2186,\n\t\"mantelpiece\": 32208,\n\t\"obliterated\": 3910,\n\t\"roofing\": 28729,\n\t\"applications\": 2258,\n\t\"initially\": 5092,\n\t\"originally\": 2693,\n\t\"crossbred\": 27133,\n\t\"long-nosed\": 32136,\n\t\"NAME\": 24966,\n\t\"mollifying\": 18802,\n\t\"meditative\": 30917,\n\t\"stances\": 13719,\n\t\"KS\": 17431,\n\t\"Pricing\": 22359,\n\t\"HAD\": 29670,\n\t\"Reps.\": 23593,\n\t\"Altho\": 11469,\n\t\"Miyuki\": 15886,\n\t\"Bible\": 4978,\n\t\"post-accident\": 18687,\n\t\"resolution\": 2566,\n\t\"Relevant\": 8251,\n\t\"NY\": 22007,\n\t\"Mudo\": 28840,\n\t\"aliases\": 30191,\n\t\"6.8\": 15655,\n\t\"Rangatira\": 16291,\n\t\"players\": 6190,\n\t\"Broek\": 31480,\n\t\"Permits\": 26468,\n\t\"dissenting\": 19319,\n\t\"shutter\": 11695,\n\t\"Coming\": 27377,\n\t\"Siberia\": 30770,\n\t\"strippers\": 20093,\n\t\"port\": 16553,\n\t\"marvelously\": 27916,\n\t\"Normally\": 32750,\n\t\"decidely\": 21351,\n\t\"Johnette\": 29136,\n\t\"rave\": 18033,\n\t\"persevere\": 14394,\n\t\"decorated\": 27915,\n\t\"interplanetary\": 11331,\n\t\"B&B\": 29312,\n\t\"Halston\": 13374,\n\t\"Pachomian\": 5940,\n\t\"FL\": 24697,\n\t\"Old\": 5374,\n\t\"architectural\": 4477,\n\t\"it’s\": 7711,\n\t\"Bearkadette\": 21316,\n\t\"HH\": 29576,\n\t\"likable\": 8869,\n\t\"transformational\": 3692,\n\t\"urinals\": 19088,\n\t\"m.\": 5353,\n\t\"Viva\": 5371,\n\t\"tab\": 7684,\n\t\"consortium\": 20550,\n\t\"Stellenbosch\": 16214,\n\t\"WA.\": 28932,\n\t\"Geekseekers\": 13789,\n\t\"managing\": 3009,\n\t\"bike\": 9836,\n\t\"deliver\": 11051,\n\t\"1980\": 13501,\n\t\"instructive\": 22386,\n\t\"Super\": 12498,\n\t\"05/02/2001\": 22968,\n\t\"DELL\": 26316,\n\t\"DISTINCT\": 30047,\n\t\"polls\": 10511,\n\t\"Jefferson\": 30687,\n\t\"reverted\": 9976,\n\t\"crystallize\": 10917,\n\t\"dishonest\": 14699,\n\t\"punching\": 9597,\n\t\"Descriptive\": 5625,\n\t\"clans\": 10073,\n\t\"Structuralism\": 5627,\n\t\"blink\": 14813,\n\t\"Click\": 19203,\n\t\"autonomous\": 23959,\n\t\"luncheons\": 31846,\n\t\"Syria's\": 25825,\n\t\"blew\": 10135,\n\t\"toasted\": 31981,\n\t\"attaches\": 7607,\n\t\"Vinita\": 17439,\n\t\"gap\": 2500,\n\t\"billionaire\": 32708,\n\t\"DSLR\": 26398,\n\t\"121\": 7502,\n\t\"discourse\": 3027,\n\t\"prayerfully\": 14150,\n\t\"Workshop\": 22894,\n\t\"inscrutable\": 30977,\n\t\"Strange\": 13563,\n\t\"cents\": 7160,\n\t\"hassle\": 28378,\n\t\"choosing\": 2166,\n\t\"Their\": 3767,\n\t\"talkie\": 27935,\n\t\"spacewalks\": 24812,\n\t\"illustrations\": 10124,\n\t\"Men's\": 17369,\n\t\"dispersing\": 20586,\n\t\"Close\": 5740,\n\t\"Remove\": 17739,\n\t\"古\": 14906,\n\t\"substantive\": 7371,\n\t\"uni\": 27637,\n\t\"defendants'\": 7545,\n\t\"way's\": 17638,\n\t\"21\": 584,\n\t\"Laura\": 3784,\n\t\"behalf\": 3917,\n\t\"pre-Columbian\": 15366,\n\t\"precision\": 13947,\n\t\"followers\": 14063,\n\t\"founding\": 5577,\n\t\"region\": 1976,\n\t\"cheat\": 11275,\n\t\"falls\": 3330,\n\t\"decking\": 28118,\n\t\"Entrepreneurs\": 15075,\n\t\"defenders\": 14782,\n\t\"accommodations\": 17142,\n\t\"professors\": 10260,\n\t\"anchored\": 30809,\n\t\"rescoped\": 22604,\n\t\"makes\": 1741,\n\t\"southwestern\": 19981,\n\t\"Naha\": 26930,\n\t\"butt-headed\": 32360,\n\t\"pan-democrat\": 12384,\n\t\"centerpiece\": 12903,\n\t\"roosters\": 27284,\n\t\"nutrition-wise\": 16172,\n\t\"$ervice\": 26746,\n\t\"acoustically\": 10918,\n\t\"breached\": 24409,\n\t\"80Y\": 21112,\n\t\"Aegean\": 31663,\n\t\"confiscation\": 19595,\n\t\"manure\": 32108,\n\t\"dominant\": 14291,\n\t\"Preparing\": 30140,\n\t\"Pakistan\": 18742,\n\t\"Server\": 21363,\n\t\"magic\": 10316,\n\t\"CAMPUS\": 11853,\n\t\"Water\": 8945,\n\t\"humane\": 10793,\n\t\"reviewed\": 1331,\n\t\"prisons\": 24285,\n\t\"adventures\": 30434,\n\t\"Ashkenazi\": 30734,\n\t\"superfine\": 17861,\n\t\"1832\": 3880,\n\t\"FORGOT\": 29673,\n\t\"extraordinary\": 20705,\n\t\"READ\": 30004,\n\t\"thirty\": 1862,\n\t\"rideable\": 28015,\n\t\"bewitched\": 31285,\n\t\"Scripture\": 6647,\n\t\"arte\": 25453,\n\t\"Exercise\": 26424,\n\t\"banks'\": 20967,\n\t\"fluorescent\": 2161,\n\t\"routine\": 14999,\n\t\"Papillon\": 16632,\n\t\"MHC\": 23068,\n\t\"minimums\": 27080,\n\t\"suppleness\": 32654,\n\t\"SMS\": 24223,\n\t\"Valverde's\": 31512,\n\t\"sees\": 8842,\n\t\"Leonia\": 16528,\n\t\"fi\": 5798,\n\t\"Sicilian\": 28844,\n\t\"2.8\": 25994,\n\t\"Comedy\": 10149,\n\t\"WORST\": 32020,\n\t\"idly\": 10161,\n\t\"instrumentation\": 23639,\n\t\"pancreatitis\": 27595,\n\t\"Soper\": 24112,\n\t\"sill\": 31797,\n\t\"closely\": 2873,\n\t\"contributes\": 3016,\n\t\"oriented\": 2291,\n\t\"modifiable\": 8524,\n\t\"Wakrah\": 4508,\n\t\"spare\": 15102,\n\t\"assured\": 7836,\n\t\"economical\": 2108,\n\t\"lethal\": 20392,\n\t\"Hassen\": 13134,\n\t\"costs\": 736,\n\t\"city\": 2962,\n\t\"sipping\": 9132,\n\t\"EXPENSIVE\": 29239,\n\t\"suppressive\": 12812,\n\t\"Uses\": 15207,\n\t\"55,7\": 17316,\n\t\"sell-out\": 32572,\n\t\"12:48\": 23384,\n\t\"manged\": 29526,\n\t\"provisional\": 22155,\n\t\"eastward\": 9986,\n\t\"Worthy\": 23764,\n\t\"REPORTED\": 11846,\n\t\"Royal\": 3225,\n\t\"cosplay\": 8260,\n\t\"Garibaldi's\": 25532,\n\t\"Mo\": 12474,\n\t\"Sending\": 32179,\n\t\"courage\": 4057,\n\t\"camel\": 17175,\n\t\"males\": 10872,\n\t\"wrong\": 6808,\n\t\"Gregory\": 4222,\n\t\"interviewers\": 23366,\n\t\"mid-evenings\": 19846,\n\t\"Actor\": 4141,\n\t\"erythema\": 2202,\n\t\"Dominica\": 16482,\n\t\"nursery\": 13207,\n\t\"coolly\": 30868,\n\t\"Following\": 3608,\n\t\"therapy\": 15719,\n\t\"gardened\": 31608,\n\t\"AWFUL\": 30018,\n\t\"03/09/2000\": 22554,\n\t\"248\": 27549,\n\t\"affection\": 24674,\n\t\"NOOK\": 26677,\n\t\"cutaneous\": 20782,\n\t\"contemporary\": 3013,\n\t\"button\": 8682,\n\t\"voided\": 26165,\n\t\"sources\": 468,\n\t\"puts\": 7423,\n\t\"outliers\": 15661,\n\t\"Riggins\": 22142,\n\t\"persue\": 22925,\n\t\"bicycles\": 32877,\n\t\"bd\": 16667,\n\t\"02-05-02.doc\": 23577,\n\t\"quantity\": 2440,\n\t\"Polio\": 2395,\n\t\"surroundings\": 113,\n\t\"they've\": 6843,\n\t\"Savage\": 10485,\n\t\"reiteration\": 19040,\n\t\"Miracle\": 26287,\n\t\"150,000\": 13006,\n\t\"sporting\": 16618,\n\t\"logo\": 22487,\n\t\"vegetarian\": 15777,\n\t\"WINNT\": 30203,\n\t\"p-\": 6615,\n\t\"toxins\": 27073,\n\t\"11/30/2000\": 22049,\n\t\"Trent\": 7035,\n\t\"ρ\": 3322,\n\t\"cascades\": 26995,\n\t\"commercially\": 1356,\n\t\"designers\": 30010,\n\t\"verifies\": 27039,\n\t\"matched\": 8509,\n\t\"classmate\": 3351,\n\t\"womanizer\": 4638,\n\t\"Every\": 5443,\n\t\"Hieronymus\": 4962,\n\t\"Aquileia\": 5118,\n\t\"BEST\": 26244,\n\t\"Nail\": 27959,\n\t\"SHIT\": 28765,\n\t\"preventing\": 5914,\n\t\"EQUALITY\": 24650,\n\t\"05\": 24236,\n\t\"Thai\": 17365,\n\t\"Cyprian's\": 31888,\n\t\"practised\": 17339,\n\t\"Parmigiana\": 28302,\n\t\"mistresses\": 10719,\n\t\"distracted\": 7672,\n\t\"GRAIL\": 29638,\n\t\"starfighter\": 9218,\n\t\"displeases\": 20038,\n\t\"4g\": 26179,\n\t\"overage\": 29652,\n\t\"'72\": 19850,\n\t\"insoluble\": 11671,\n\t\"Zealander\": 12672,\n\t\"Nonetheless\": 2902,\n\t\"Taj\": 17144,\n\t\"JK\": 18283,\n\t\"argued\": 7948,\n\t\"acidic\": 16186,\n\t\"contribute\": 3099,\n\t\"pumps\": 23412,\n\t\"visited\": 3379,\n\t\"Pink\": 16066,\n\t\"None\": 22737,\n\t\"present\": 606,\n\t\"Fest\": 10354,\n\t\"glass-fronted\": 32427,\n\t\"8:35\": 22475,\n\t\"Medici\": 25501,\n\t\"offend\": 27633,\n\t\"episode\": 2952,\n\t\"TOMORROW\": 11887,\n\t\"825\": 17265,\n\t\"detainees\": 26072,\n\t\"ears\": 9268,\n\t\"3067\": 22240,\n\t\"Sacks\": 23548,\n\t\"dining\": 8751,\n\t\"Apartments\": 28588,\n\t\"outermost\": 30217,\n\t\"Freud’s\": 14953,\n\t\"Andrzej\": 16908,\n\t\"conflicts\": 1433,\n\t\"shaking\": 31956,\n\t\"roast\": 21968,\n\t\"mistakes\": 9212,\n\t\"Petsmart\": 27752,\n\t\"wept\": 30608,\n\t\"23.6\": 18443,\n\t\"socialize\": 13346,\n\t\"Glad\": 15982,\n\t\"Take\": 6245,\n\t\"Scientology\": 12284,\n\t\"displacement\": 2742,\n\t\"jimmy\": 29418,\n\t\"intact\": 9178,\n\t\"illustration\": 30075,\n\t\"Valdes\": 21041,\n\t\"mass\": 2774,\n\t\"Butcher\": 23069,\n\t\"neuroscience\": 15861,\n\t\"alt.animals.rights.promotion\": 24829,\n\t\"DONATIONS\": 24541,\n\t\"noho\": 7521,\n\t\"parody\": 10499,\n\t\"Angeles\": 5725,\n\t\"displaced\": 7052,\n\t\"Unbelievably\": 29074,\n\t\"depart\": 16470,\n\t\"Google\": 5265,\n\t\"proclaimed\": 17534,\n\t\"sizes\": 18167,\n\t\"Saddam's\": 20423,\n\t\"Cantón\": 960,\n\t\"recorded\": 15404,\n\t\"Khaza'il\": 19287,\n\t\"Ghana\": 1843,\n\t\"merest\": 30322,\n\t\"Wax\": 5705,\n\t\"intellectually\": 6888,\n\t\"mortification\": 15500,\n\t\"Warhol's\": 7416,\n\t\"sub-Saharan\": 1977,\n\t\"super-human\": 8306,\n\t\"Mecca\": 12249,\n\t\"bravery\": 15726,\n\t\"GOD'S\": 25604,\n\t\"Shanks\": 27148,\n\t\"viable\": 761,\n\t\"spectral\": 9367,\n\t\"impulses\": 15017,\n\t\"upholstered\": 25614,\n\t\"bicuspid\": 29918,\n\t\"Pitre\": 16658,\n\t\"disagreement\": 31346,\n\t\"reflect\": 879,\n\t\"factors\": 259,\n\t\"Superfund\": 25947,\n\t\"informal\": 1873,\n\t\"township\": 29946,\n\t\"strings\": 3272,\n\t\"ignited\": 14115,\n\t\"refer\": 16160,\n\t\"detentions\": 20677,\n\t\"installing\": 7136,\n\t\"Centennial\": 24486,\n\t\"heartily\": 6550,\n\t\"10/20/2000\": 21940,\n\t\"trusts\": 9565,\n\t\"meats\": 29494,\n\t\"shining\": 9548,\n\t\"aghast\": 32912,\n\t\"EDT\": 14592,\n\t\"analysed\": 13448,\n\t\"Beethoven\": 4112,\n\t\"SOUTH\": 11498,\n\t\"practices\": 5093,\n\t\"Rajavis\": 20080,\n\t\"Ulysses\": 11371,\n\t\"Don\": 19201,\n\t\"Attn.\": 22993,\n\t\"runflat\": 29738,\n\t\"Eaton\": 8466,\n\t\"quit\": 13232,\n\t\"200,000\": 16767,\n\t\"Supernatural\": 5700,\n\t\"beavers\": 25073,\n\t\"half-embarrassed\": 31840,\n\t\"We've\": 11815,\n\t\"benign\": 19983,\n\t\"blundered\": 31210,\n\t\"Limit\": 27454,\n\t\"treat\": 8805,\n\t\"eight-inch\": 31124,\n\t\"Meteorites\": 11351,\n\t\"brainstorm\": 11109,\n\t\"nation-making\": 30701,\n\t\"sector\": 2154,\n\t\"Antiques\": 28423,\n\t\"payment\": 7148,\n\t\"habit\": 7744,\n\t\"Yay\": 15789,\n\t\"journeying\": 4313,\n\t\"expressive\": 4490,\n\t\"Electronic\": 25421,\n\t\"compromise\": 20891,\n\t\"distances\": 11185,\n\t\"'cuz\": 11748,\n\t\"gene\": 20043,\n\t\"mid-May\": 25120,\n\t\"voluntary\": 14569,\n\t\"Cambodia\": 19580,\n\t\"destination\": 16471,\n\t\"117th\": 14339,\n\t\"abomination\": 23895,\n\t\"Willie\": 27275,\n\t\"Naval\": 9243,\n\t\"abundantly\": 19749,\n\t\"obtained\": 1685,\n\t\"aerogel\": 11356,\n\t\"Praise\": 20097,\n\t\"Both\": 3465,\n\t\"Dunn's\": 23680,\n\t\"HDS\": 29885,\n\t\"uninterrupted\": 25108,\n\t\"seas\": 9372,\n\t\"Quilis’s\": 1133,\n\t\"representationalism\": 14922,\n\t\"Evans\": 10315,\n\t\"coughed\": 32153,\n\t\"swigs\": 32531,\n\t\"(country|region)\": 30181,\n\t\"Truffaut's\": 5489,\n\t\"anti\": 25702,\n\t\"Kwong\": 12499,\n\t\"randomly\": 17618,\n\t\"competitiveness\": 14525,\n\t\"???????????????\": 21013,\n\t\"freshness\": 8024,\n\t\"Couple\": 8472,\n\t\"candies\": 18417,\n\t\"airborne\": 2598,\n\t\"coverage\": 8564,\n\t\"inferior\": 15464,\n\t\"Press\": 10542,\n\t\"612-205-9814\": 24024,\n\t\"writhe\": 31142,\n\t\"gestalt\": 6795,\n\t\"Wesleyan\": 11682,\n\t\"700\": 12143,\n\t\"Feb\": 21924,\n\t\"Builders\": 7130,\n\t\"Abbudi\": 19265,\n\t\"highlighted\": 242,\n\t\"sovereign\": 6651,\n\t\"rename\": 30067,\n\t\"waited\": 8893,\n\t\"pronouncements\": 6576,\n\t\"peril\": 25884,\n\t\"http://www.environmentalchemistry.com/yogi/hazmat/articles/chernobyl1.html\": 18696,\n\t\"Valdiviesco\": 25474,\n\t\"park's\": 25068,\n\t\"drip\": 29600,\n\t\"DIY\": 26539,\n\t\"Kiara\": 13406,\n\t\"gonna\": 6046,\n\t\"Eid\": 23107,\n\t\"misfortune\": 9579,\n\t\"conciliation\": 31538,\n\t\"Sheik\": 20674,\n\t\"Thirty\": 7019,\n\t\"accessories\": 28654,\n\t\"socials\": 15793,\n\t\"09:46\": 23806,\n\t\"worthless\": 27657,\n\t\"flexible\": 16296,\n\t\"mid-1980s\": 16389,\n\t\"Greenspan\": 21557,\n\t\"Sinyavsky\": 30775,\n\t\"valise\": 30786,\n\t\"Shouldn't\": 22337,\n\t\"Aunt\": 25230,\n\t\"banning\": 13009,\n\t\"Tan\": 19193,\n\t\"destabilizing\": 14398,\n\t\"anwser\": 21912,\n\t\"appetizers\": 26247,\n\t\"Mary's\": 15978,\n\t\"cold\": 6220,\n\t\"postage\": 11764,\n\t\"campsites\": 17152,\n\t\"reconciled\": 22614,\n\t\"Motorola\": 24192,\n\t\"Pull\": 6334,\n\t\"updated\": 14917,\n\t\"Giap\": 27733,\n\t\"forth\": 5665,\n\t\"radiation\": 2193,\n\t\"criticised\": 12164,\n\t\"stethoscope\": 32494,\n\t\"multi-nation\": 20344,\n\t\"Bell\": 3944,\n\t\"coreligionists\": 18938,\n\t\"handcuffs\": 19929,\n\t\"mast\": 30843,\n\t\"hide\": 18313,\n\t\"breeding\": 20374,\n\t\"halt\": 9865,\n\t\"ca.\": 1041,\n\t\"Sometime\": 5576,\n\t\"Mirror\": 19871,\n\t\"Browncover\": 23603,\n\t\"10,000.00\": 24917,\n\t\"hire\": 10691,\n\t\"Firefox\": 12775,\n\t\"haphazard\": 30330,\n\t\"divine\": 6598,\n\t\"sect\": 19984,\n\t\"World's\": 12779,\n\t\"microtome\": 10642,\n\t\"shivering\": 8909,\n\t\"student\": 4590,\n\t\"Life\": 3472,\n\t\"eventually\": 3716,\n\t\"Shaykh\": 18755,\n\t\"Pentagon\": 19914,\n\t\"titer\": 28007,\n\t\"neurobiology\": 13579,\n\t\"provocative\": 18808,\n\t\"Prensky\": 1610,\n\t\"SST\": 2629,\n\t\"Hodge\": 21936,\n\t\"sigh\": 27089,\n\t\"MUST\": 27380,\n\t\"seizure\": 26798,\n\t\"pretends\": 20522,\n\t\"scratched\": 26536,\n\t\"Tsinghua\": 3410,\n\t\"abilities\": 391,\n\t\"ship's\": 12824,\n\t\"Hoog\": 23422,\n\t\"Although\": 512,\n\t\"Cup\": 4514,\n\t\"trials\": 13830,\n\t\"Meowing\": 24851,\n\t\"Defining\": 15914,\n\t\"Icon\": 5920,\n\t\"fabrications\": 20436,\n\t\"rescuers\": 24396,\n\t\"http://www.cruisecompete.com/specials/regions/world/1\": 27232,\n\t\"instrument\": 2515,\n\t\"prisoners\": 26074,\n\t\"ala\": 20127,\n\t\"annoying\": 17915,\n\t\"Heres\": 27780,\n\t\"two\": 570,\n\t\"incitement\": 20377,\n\t\"aperture\": 26231,\n\t\"luminous\": 30881,\n\t\"used\": 297,\n\t\"Um\": 6482,\n\t\"turning\": 6919,\n\t\"ink\": 11177,\n\t\"machine\": 8302,\n\t\"Gulbuddin\": 19675,\n\t\"crocodile\": 16083,\n\t\"Success\": 25267,\n\t\"yrs.\": 23446,\n\t\"rearranged\": 32957,\n\t\"factions\": 3951,\n\t\"pathalias\": 24325,\n\t\"flavorless\": 29160,\n\t\"justifying\": 23703,\n\t\"hashtag\": 12209,\n\t\"zip\": 12296,\n\t\"hairstyling\": 28371,\n\t\"713\": 21081,\n\t\"Tape\": 18135,\n\t\"charging\": 19410,\n\t\"Seville\": 27522,\n\t\"Westmoreland\": 27705,\n\t\"gay\": 9446,\n\t\"manhood\": 13613,\n\t\"questioningly\": 17919,\n\t\"340\": 19220,\n\t\"Destroy\": 27706,\n\t\"operation\": 1833,\n\t\"ouster\": 19740,\n\t\"competitions\": 10896,\n\t\"Illyrian\": 5010,\n\t\"censor\": 20300,\n\t\"Pursuing\": 25278,\n\t\"deeds\": 6574,\n\t\"Associate\": 22346,\n\t\"UVR\": 2201,\n\t\"http://www.restaurant.com\": 26248,\n\t\"http://www.mikegigi.com/castgobl.htm\": 27314,\n\t\"refugee\": 12128,\n\t\"KSM's\": 20843,\n\t\"Sandeep\": 27425,\n\t\"svce\": 28676,\n\t\"cinnabara\": 17189,\n\t\"predecessor\": 31421,\n\t\"Revocation\": 20278,\n\t\"us\": 1853,\n\t\"4-ever\": 28846,\n\t\"distinction\": 7615,\n\t\"operatives\": 18756,\n\t\"always\": 6450,\n\t\"16th\": 15795,\n\t\"8:15\": 15742,\n\t\"GTC's\": 22314,\n\t\"Morris\": 29780,\n\t\"Mostly\": 17684,\n\t\"7:35\": 23444,\n\t\"thoughtful\": 30643,\n\t\"Talmy\": 3793,\n\t\"choir\": 6230,\n\t\"Syrian\": 5157,\n\t\"crusade\": 6842,\n\t\"alludes\": 3889,\n\t\"Brin\": 12225,\n\t\"GUI\": 8268,\n\t\"rival\": 12776,\n\t\"fullest\": 15834,\n\t\"grandfather\": 29375,\n\t\"interpersonal\": 23621,\n\t\"invitees\": 22861,\n\t\"Bloom\": 28514,\n\t\"skirts\": 17381,\n\t\"unconnected\": 19685,\n\t\"uncanny\": 30489,\n\t\"Important\": 20257,\n\t\"kibbutz\": 30803,\n\t\"Prosecutor\": 31776,\n\t\"crushing\": 9407,\n\t\"Blakemore\": 19890,\n\t\"treats\": 27394,\n\t\"successes\": 11077,\n\t\"xray\": 18723,\n\t\"powerless\": 31017,\n\t\"announcement\": 14800,\n\t\"polling\": 12518,\n\t\"executives\": 22890,\n\t\"flourish\": 17081,\n\t\"Someone's\": 32173,\n\t\"Where's\": 7118,\n\t\"Danette\": 32470,\n\t\"abide\": 14729,\n\t\"Leigh\": 13324,\n\t\"dialing\": 22410,\n\t\"belt\": 8622,\n\t\"Batman\": 6992,\n\t\"inhalation\": 7399,\n\t\"GAVE\": 29693,\n\t\"Kong\": 12362,\n\t\"faxed\": 21482,\n\t\"unfinished\": 14310,\n\t\"questionable\": 1412,\n\t\"pluralistic\": 867,\n\t\"5.6\": 14664,\n\t\"sentence\": 5685,\n\t\"roof\": 8925,\n\t\"ubique\": 5076,\n\t\"merged\": 17041,\n\t\"Andaman\": 19491,\n\t\"excesses\": 5924,\n\t\"Archibald\": 19805,\n\t\"missiles\": 10436,\n\t\"cloudy\": 16177,\n\t\"grandson\": 19862,\n\t\"BA\": 23197,\n\t\"gentlemanly\": 31311,\n\t\"mansion\": 14041,\n\t\"LOC\": 23530,\n\t\"halter\": 31332,\n\t\"plutocracy\": 7988,\n\t\"realism\": 14937,\n\t\"anti-Bush\": 19224,\n\t\"strands\": 31723,\n\t\"Xiaoping\": 3478,\n\t\"Real\": 11042,\n\t\"infections\": 26641,\n\t\"administration's\": 13837,\n\t\"Inferno\": 31231,\n\t\"EPC\": 21219,\n\t\"thicker\": 28686,\n\t\"threw\": 9088,\n\t\"wonder\": 14602,\n\t\"oh\": 6194,\n\t\"acd\": 19222,\n\t\"mircles\": 29786,\n\t\"DAB\": 12439,\n\t\"starfish\": 31741,\n\t\"justify\": 14396,\n\t\"interview\": 1702,\n\t\"Tours\": 17285,\n\t\"torn\": 9071,\n\t\"inter-caste\": 7230,\n\t\"04:17\": 21694,\n\t\"girls\": 3683,\n\t\"SCAM\": 24911,\n\t\"founder\": 5919,\n\t\"dubious\": 15169,\n\t\"Turns\": 29365,\n\t\"paused\": 8891,\n\t\"Country\": 5458,\n\t\"midst\": 9636,\n\t\"Camp\": 5565,\n\t\"Markets\": 22397,\n\t\"sidelines\": 19667,\n\t\"Draft\": 4859,\n\t\"snippets\": 10688,\n\t\"Douglass\": 724,\n\t\"heavily\": 1239,\n\t\"Ramos\": 1502,\n\t\"briefly\": 10757,\n\t\"P.\": 19422,\n\t\"questionnaires\": 8501,\n\t\"1579\": 21121,\n\t\"gobbled\": 19095,\n\t\"vaguely\": 8734,\n\t\"Meydan\": 16791,\n\t\"luxury\": 19345,\n\t\"Cal\": 22396,\n\t\"SWG\": 21411,\n\t\"sagotra\": 7232,\n\t\"longing\": 31016,\n\t\"mummified\": 31836,\n\t\"17th\": 96,\n\t\"scare\": 19158,\n\t\"laws\": 11549,\n\t\"brakes\": 26640,\n\t\"1945\": 3448,\n\t\"sensor\": 2640,\n\t\"corn\": 13484,\n\t\"charts\": 30088,\n\t\"police\": 3949,\n\t\"holidaying\": 27908,\n\t\"Mandy\": 4226,\n\t\"Greenfield\": 29649,\n\t\"Mathematics\": 3946,\n\t\"Possessions\": 18128,\n\t\"Maria\": 5372,\n\t\"11:02\": 21380,\n\t\"skyline\": 16517,\n\t\"O'Connell\": 22059,\n\t\"yuor\": 19467,\n\t\"Wow-eee\": 16124,\n\t\"cleavage\": 32626,\n\t\"clubs\": 27551,\n\t\"forty-one\": 32687,\n\t\"low\": 2497,\n\t\"bmc...@patriot.net\": 24700,\n\t\"swatch\": 16007,\n\t\"03:00\": 16610,\n\t\"OTHER\": 28741,\n\t\"compatible\": 13909,\n\t\"beard\": 25627,\n\t\"linguistic\": 1716,\n\t\"Cookies\": 29499,\n\t\"durability\": 12797,\n\t\"Revell\": 19399,\n\t\"Observed\": 25122,\n\t\"CO2\": 25148,\n\t\"pelham\": 26381,\n\t\"relishes\": 32720,\n\t\"HATING\": 27449,\n\t\"1002`s\": 21262,\n\t\"destroyer\": 25800,\n\t\"Braysmith\": 13388,\n\t\"vehicles\": 14660,\n\t\"Adding\": 22044,\n\t\"Needless\": 22077,\n\t\"Cynthia\": 13376,\n\t\"Steve\": 6955,\n\t\"performing\": 9276,\n\t\"Sales\": 29042,\n\t\"Kedourie\": 30661,\n\t\"Clydesdales\": 6419,\n\t\"relevant\": 1421,\n\t\"CopyrightX\": 14493,\n\t\"Halloween\": 16041,\n\t\"pausing\": 30324,\n\t\"B.A.\": 17465,\n\t\"1-800-991-9019\": 21695,\n\t\"recruited\": 3546,\n\t\"Broadcasting's\": 5727,\n\t\"Agatha\": 10933,\n\t\"Sense\": 14968,\n\t\"misnamed\": 19133,\n\t\"McKenzie\": 10986,\n\t\"immune\": 6771,\n\t\"Implant\": 29213,\n\t\"Have\": 6653,\n\t\"Tuscany\": 13214,\n\t\"approached\": 7161,\n\t\"knock\": 20515,\n\t\"copy\": 310,\n\t\"rift\": 19733,\n\t\"Report\": 8449,\n\t\"balls\": 12085,\n\t\"Stress\": 17802,\n\t\"hiding\": 9757,\n\t\"H-0237/97\": 31373,\n\t\"Shield\": 29406,\n\t\"hard\": 6226,\n\t\"yellow\": 6472,\n\t\"isolated\": 14037,\n\t\"Policing\": 14097,\n\t\"else's\": 14648,\n\t\"http://en.wikipedia.org/wiki/Aerocom\": 20104,\n\t\"Rebecca's\": 31992,\n\t\"Spidey\": 12607,\n\t\"Saving\": 30206,\n\t\"Occupancy\": 21253,\n\t\"saying\": 6469,\n\t\"levels\": 7198,\n\t\"Oriental\": 3464,\n\t\"joke\": 9860,\n\t\"cashout\": 21901,\n\t\"broth\": 18361,\n\t\"inconsistency\": 22591,\n\t\"proviso\": 23474,\n\t\"assailant\": 24142,\n\t\"timed\": 18267,\n\t\"prime\": 10891,\n\t\"Mantia\": 25487,\n\t\"stock-still\": 31648,\n\t\"avocado\": 15766,\n\t\"Managers\": 23458,\n\t\"Postdoctoral\": 8529,\n\t\"village\": 4244,\n\t\"Parakeet\": 27803,\n\t\"Buñuel\": 5508,\n\t\"theaters\": 20406,\n\t\"Ham's\": 28365,\n\t\"Pathways\": 14515,\n\t\"lulling\": 30366,\n\t\"Comics\": 4131,\n\t\"Departments\": 12111,\n\t\"clinics\": 15809,\n\t\"Mesoamericans\": 15309,\n\t\"Forgotten\": 6181,\n\t\"CHESS\": 25507,\n\t\"RIP\": 28364,\n\t\"Sheikhs\": 19320,\n\t\"Johann\": 3148,\n\t\"d'Herbinville\": 3959,\n\t\"Pacheco\": 22166,\n\t\"recognizes\": 22855,\n\t\"rates\": 448,\n\t\"lawsuit\": 23870,\n\t\"Stipulation\": 21481,\n\t\"CEV\": 24483,\n\t\"temperance\": 27185,\n\t\"globe\": 1785,\n\t\"checks\": 7178,\n\t\"collaborator\": 13675,\n\t\"fishing\": 17327,\n\t\"residual\": 23999,\n\t\"busiest\": 16989,\n\t\"evacuees\": 24420,\n\t\"trainers\": 27998,\n\t\"in\": 109,\n\t\"fossil\": 14200,\n\t\"etings\": 11436,\n\t\"widespread\": 1227,\n\t\"unnecessary\": 8188,\n\t\"Tangipahoa\": 19452,\n\t\"Ifa\": 29189,\n\t\"efforts\": 354,\n\t\"Cotillion\": 21317,\n\t\"armature\": 26267,\n\t\"Tiffany's\": 32652,\n\t\"glanced\": 9235,\n\t\"anthropologist\": 10067,\n\t\"sunshine\": 11488,\n\t\"bathed\": 24627,\n\t\"silver-nailed\": 31962,\n\t\"jaw\": 24126,\n\t\"orchestras\": 30862,\n\t\"COFFEE\": 28182,\n\t\"suspiciously\": 32092,\n\t\"l'eau\": 16679,\n\t\"101\": 15816,\n\t\"Authorities\": 19349,\n\t\"themselves\": 4361,\n\t\"revolutionizing\": 10374,\n\t\"Greenland\": 25172,\n\t\"lexicographic\": 3805,\n\t\"knowingly\": 19431,\n\t\"reorg\": 21111,\n\t\"Agip\": 23395,\n\t\"eve\": 32921,\n\t\"waking\": 15006,\n\t\"spectacle\": 31839,\n\t\"No-49\": 31526,\n\t\"Agnostics\": 13252,\n\t\"frighten\": 24117,\n\t\"improv\": 13674,\n\t\"pole\": 12663,\n\t\"832.676.1329\": 21460,\n\t\"lay\": 4723,\n\t\"multitude\": 10903,\n\t\"publicly\": 11644,\n\t\"dwell\": 14042,\n\t\"blunder\": 19324,\n\t\"alacrity\": 31204,\n\t\"haddock\": 25163,\n\t\"downward\": 18242,\n\t\"wing\": 3127,\n\t\"Luv\": 11915,\n\t\"ROMAN\": 11923,\n\t\"everybody\": 6275,\n\t\"invent\": 11267,\n\t\"avail\": 24577,\n\t\"shatter\": 25872,\n\t\"manually\": 22625,\n\t\"evenly\": 18406,\n\t\"Seed\": 26594,\n\t\"Download\": 25332,\n\t\"HealthSpace\": 16419,\n\t\"absolutely\": 10721,\n\t\"classroom\": 1596,\n\t\"admits\": 26070,\n\t\"Lee\": 12412,\n\t\"Cage\": 26474,\n\t\"Things\": 9793,\n\t\"stoats\": 17230,\n\t\"thread\": 3061,\n\t\"MY\": 11872,\n\t\"challenged\": 27711,\n\t\"Makes\": 16023,\n\t\"tenure\": 334,\n\t\"KDP\": 19294,\n\t\"Jr\": 21819,\n\t\"http://www.ebay.co.uk/itm/250927098564?var=550057729382&ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1438.l2649#ht_2079wt_893\": 26861,\n\t\"written\": 156,\n\t\"Watching\": 15875,\n\t\"excellently\": 23334,\n\t\"STANDING\": 29682,\n\t\"Leahy's\": 20886,\n\t\"linguistics\": 3702,\n\t\"bedrooms\": 15122,\n\t\"inserts\": 29560,\n\t\"toilets\": 24400,\n\t\"Perhaps\": 6554,\n\t\"Pahl\": 19935,\n\t\"wriggled\": 8939,\n\t\"CAP\": 31490,\n\t\"contrast\": 986,\n\t\"attacked\": 12305,\n\t\"gel\": 13750,\n\t\"sophomore\": 4830,\n\t\"graceful\": 26657,\n\t\"iPad\": 26680,\n\t\"constant\": 3325,\n\t\"fumarase\": 20046,\n\t\"Haiti\": 27501,\n\t\"here\": 1091,\n\t\"Metro.us\": 10575,\n\t\"Babies\": 22267,\n\t\"objections\": 13715,\n\t\"modalities\": 14562,\n\t\"easier\": 10714,\n\t\"Clothing\": 10685,\n\t\"Booth\": 23135,\n\t\"Festivals\": 17546,\n\t\"Donald\": 12070,\n\t\"45\": 11384,\n\t\"Belzer\": 30525,\n\t\"insist\": 11443,\n\t\"UNMIK\": 13925,\n\t\"taxis\": 9710,\n\t\"Sara\": 20943,\n\t\"searching\": 10272,\n\t\"Scordia\": 28838,\n\t\"execution\": 897,\n\t\"amplified\": 20385,\n\t\"Products\": 22558,\n\t\"Patel@ENRON\": 22032,\n\t\"Joel\": 4910,\n\t\"Ugh\": 9788,\n\t\"362416\": 21390,\n\t\"Surely\": 30270,\n\t\"overproduction\": 31465,\n\t\"CFTC\": 22178,\n\t\"reflecting\": 19718,\n\t\"10/27/2000\": 22367,\n\t\"airholes\": 27367,\n\t\"Guaranty\": 23565,\n\t\"STORY\": 29754,\n\t\"Guy\": 27987,\n\t\"lowers\": 17806,\n\t\"punk\": 28955,\n\t\"band\": 2600,\n\t\"dictatorship\": 18774,\n\t\"mutual\": 14243,\n\t\"763736\": 21406,\n\t\"+1\": 22009,\n\t\"sinister\": 9404,\n\t\"Trustee's\": 23827,\n\t\"Rationalist\": 13250,\n\t\"McMuffin\": 26349,\n\t\"Joint\": 13032,\n\t\"tree\": 8688,\n\t\"study’s\": 2382,\n\t\"MARRIAGE\": 24649,\n\t\"Victors\": 5523,\n\t\"Built\": 16798,\n\t\"01/12/2001\": 22755,\n\t\"flatfish\": 25167,\n\t\"Hearing\": 27216,\n\t\"poorly\": 25691,\n\t\"Early\": 3128,\n\t\"supremacy\": 20542,\n\t\"<3\": 28094,\n\t\"formaldehyde\": 10618,\n\t\"Maw\": 21873,\n\t\"-%\": 31520,\n\t\"signoff\": 22578,\n\t\"inattentive\": 32442,\n\t\"pro\": 10410,\n\t\"welded\": 30880,\n\t\"solemnity\": 25561,\n\t\"Cover\": 17735,\n\t\"Protect\": 20405,\n\t\"proclaiming\": 25631,\n\t\"eye\": 143,\n\t\"Kukulkan\": 15359,\n\t\"this'll\": 6431,\n\t\"Forbidden\": 16097,\n\t\"Carly\": 13344,\n\t\"tints\": 28111,\n\t\"mid-season\": 8087,\n\t\"reconstruction\": 16568,\n\t\"vanity\": 31887,\n\t\"Louise\": 21716,\n\t\"agreement\": 2616,\n\t\"kido\": 26401,\n\t\"writer's\": 13656,\n\t\"bio\": 13974,\n\t\"wasp\": 28269,\n\t\"Joux\": 19584,\n\t\"PJC\": 28161,\n\t\"affair\": 3890,\n\t\"548\": 21896,\n\t\"1904\": 24143,\n\t\"wintering\": 28031,\n\t\"mein\": 29844,\n\t\"Gotta\": 22000,\n\t\"amending\": 30858,\n\t\"puppet\": 1995,\n\t\"proposing\": 1124,\n\t\"County\": 302,\n\t\"croissants\": 29328,\n\t\"accounting\": 22596,\n\t\"texture\": 222,\n\t\"Newark\": 16537,\n\t\"Powell\": 19097,\n\t\"hijacker\": 20780,\n\t\"sponsors\": 20548,\n\t\"toilet\": 18153,\n\t\"Quick\": 23254,\n\t\"smirk\": 25235,\n\t\"dabbling\": 32615,\n\t\"shells\": 12853,\n\t\"says\": 6723,\n\t\"Berez\": 2486,\n\t\"dryer\": 18460,\n\t\"Erik\": 19030,\n\t\"NGO's\": 20482,\n\t\"encabalgamiento\": 1109,\n\t\"database\": 1613,\n\t\"devilishly\": 32445,\n\t\"mathematician\": 3109,\n\t\"commended\": 13867,\n\t\"672,000\": 16907,\n\t\"interconnect\": 23569,\n\t\"equality\": 787,\n\t\"regretted\": 24387,\n\t\"flux\": 11378,\n\t\"makke\": 12040,\n\t\"irate\": 29452,\n\t\"Analysis\": 2923,\n\t\"stiffly\": 31883,\n\t\"Tralee\": 32821,\n\t\"Tajiks\": 19725,\n\t\"Wycliffe\": 5566,\n\t\"Hopkinson@ENRON_DEVELOPMENT\": 23186,\n\t\"differed\": 2841,\n\t\"Fundamentals\": 22879,\n\t\"RBI\": 4907,\n\t\"setback\": 20588,\n\t\"temperate\": 16747,\n\t\"Ceron\": 25494,\n\t\"lined\": 5055,\n\t\"Hey\": 6956,\n\t\"evidence\": 1062,\n\t\"wheel\": 9866,\n\t\"palace\": 16776,\n\t\"Regular\": 16467,\n\t\"Jaffa\": 30863,\n\t\"http://www.mikegigi.com/castgobl.htm#LGGOBPROJ\": 26413,\n\t\"fleshed\": 13671,\n\t\"trumpet\": 30760,\n\t\"conduits\": 19613,\n\t\"belongings\": 7592,\n\t\"grandly\": 31967,\n\t\"jeans\": 21259,\n\t\"countersignature\": 22042,\n\t\"Extremely\": 28046,\n\t\"422,000\": 13215,\n\t\"injury\": 4873,\n\t\"unpopular\": 18986,\n\t\"excuses\": 28700,\n\t\"palpitating\": 9945,\n\t\"10/26/2000\": 21950,\n\t\"contrary\": 6617,\n\t\"Fortune\": 32365,\n\t\"deleted\": 15867,\n\t\"DISCO\": 22796,\n\t\"13th\": 308,\n\t\"exceedingly\": 413,\n\t\"3889\": 23502,\n\t\"penetrate\": 18490,\n\t\"Esfahan\": 16726,\n\t\"introduced\": 2315,\n\t\"Los\": 5724,\n\t\"ba.consumers\": 25725,\n\t\"experts\": 1203,\n\t\"nightmare\": 24839,\n\t\"Undersecretary\": 13229,\n\t\"oozing\": 24284,\n\t\"cupcakes\": 17839,\n\t\"Poitiers'\": 5110,\n\t\"857-771\": 22411,\n\t\"shoving\": 18010,\n\t\"15:11\": 12738,\n\t\"undocking\": 24815,\n\t\"turtle\": 11289,\n\t\"Always\": 5864,\n\t\"collided\": 31809,\n\t\"dwarfed\": 16543,\n\t\"Shall\": 20299,\n\t\"Witness\": 5739,\n\t\"SDGs\": 13981,\n\t\"instrumental\": 19687,\n\t\"accessibility\": 21682,\n\t\"carters\": 10040,\n\t\"pain\": 1219,\n\t\"period\": 1077,\n\t\"Gómez\": 1103,\n\t\"initiated\": 1828,\n\t\"thorny\": 22562,\n\t\"Century\": 97,\n\t\"Chomsky\": 10368,\n\t\"Bitmap\": 21074,\n\t\"docs\": 23232,\n\t\"she'd\": 6695,\n\t\"RusAmArts@aol.com\": 23430,\n\t\"signalling\": 1808,\n\t\"favorably\": 12038,\n\t\"Taxpayers\": 24267,\n\t\"gravy\": 26647,\n\t\"tofu\": 28480,\n\t\"Pursuit\": 22094,\n\t\"Haug\": 31508,\n\t\"Seconds\": 32245,\n\t\"nightcase\": 32453,\n\t\"6:23\": 15564,\n\t\"adenium\": 17194,\n\t\"Father\": 10128,\n\t\"peddles\": 28898,\n\t\"Margaret\": 12539,\n\t\"moaning\": 9681,\n\t\"one\": 58,\n\t\"descendants\": 16361,\n\t\"grid\": 17454,\n\t\"vets\": 19760,\n\t\"ting\": 12434,\n\t\"tuna\": 27676,\n\t\"tends\": 28372,\n\t\"PEREZ'\": 25417,\n\t\"a.m.beresford@durham.ac.uk\": 24,\n\t\"Academia\": 3422,\n\t\"brase\": 27588,\n\t\"This\": 87,\n\t\"plausible\": 7735,\n\t\"snitch\": 18310,\n\t\"lights\": 2215,\n\t\"Exchange\": 21674,\n\t\"indescriminately\": 20111,\n\t\"donations\": 10783,\n\t\"87\": 2121,\n\t\"inherent\": 8446,\n\t\"gentlemen\": 14507,\n\t\"issue\": 459,\n\t\"they’d\": 7929,\n\t\"quicker\": 10172,\n\t\"CD\": 10283,\n\t\"tags\": 30090,\n\t\"Originally\": 4416,\n\t\"warrenty\": 26166,\n\t\"Tosui\": 4634,\n\t\"Massoud\": 20073,\n\t\"carrier\": 9264,\n\t\"throws\": 4816,\n\t\"incubation\": 15074,\n\t\"Eurasia\": 24587,\n\t\"Congressman\": 19834,\n\t\"photos\": 7334,\n\t\"occasionally\": 11118,\n\t\"sandbox\": 9613,\n\t\"audience\": 300,\n\t\"gentel\": 28618,\n\t\"magazines\": 7514,\n\t\"lax\": 908,\n\t\"AND\": 1937,\n\t\"girls'\": 3682,\n\t\"pythons\": 27338,\n\t\"pluralist\": 822,\n\t\"walking\": 2754,\n\t\"recall\": 8713,\n\t\"forbidden\": 19632,\n\t\"Underwriting\": 20912,\n\t\"mopped\": 32305,\n\t\"Shepherd\": 2953,\n\t\"oz.\": 21751,\n\t\"84\": 31529,\n\t\"unpleasant\": 9789,\n\t\"smelly\": 32062,\n\t\"troughs\": 9068,\n\t\"fixable\": 28042,\n\t\"that'll\": 27344,\n\t\"locusts\": 9255,\n\t\"cube\": 26830,\n\t\"inscribed\": 16852,\n\t\"Campos\": 8424,\n\t\"elects\": 12462,\n\t\"crease\": 9822,\n\t\"kaplan@iepa.com\": 22366,\n\t\"credit\": 7444,\n\t\"Qualified\": 22519,\n\t\"Arby\": 28011,\n\t\"complexes\": 24074,\n\t\"Trenerry\": 22236,\n\t\"Breakthrough\": 24004,\n\t\"Mishkenot\": 30621,\n\t\"format\": 1910,\n\t\"costly\": 9211,\n\t\"Peru\": 18352,\n\t\"But\": 537,\n\t\"bundling\": 26039,\n\t\"Optimization\": 29810,\n\t\"biodefense\": 20710,\n\t\"Judging\": 26687,\n\t\"Foreman\": 5521,\n\t\"hangman's\": 32267,\n\t\"proposal\": 19066,\n\t\"Wonderful\": 28856,\n\t\"get\": 6085,\n\t\"informally\": 22339,\n\t\"Remedies\": 23496,\n\t\"polluter\": 25945,\n\t\"Restaurants\": 29906,\n\t\"distinctiveness\": 4722,\n\t\"PRESIDENT\": 14594,\n\t\"turismo@merida.gob.mx\": 17007,\n\t\"palces\": 28389,\n\t\"activates\": 30789,\n\t\"vice-president\": 24374,\n\t\"partner\": 5715,\n\t\"Birds\": 2810,\n\t\"endemic\": 17185,\n\t\"blown-up\": 31875,\n\t\"besocked\": 32500,\n\t\"worldview\": 17600,\n\t\"tsar\": 26052,\n\t\"Wyoming\": 15997,\n\t\"mitigating\": 7644,\n\t\"McDonald's\": 22494,\n\t\"Qalansia\": 17173,\n\t\"shippers\": 22423,\n\t\"Skittles\": 18410,\n\t\"Paralympics\": 10835,\n\t\"Sarhid\": 18532,\n\t\"Arabiya\": 19282,\n\t\"voluptuous\": 30259,\n\t\"resembling\": 31062,\n\t\"morphology\": 2822,\n\t\"maybe\": 6116,\n\t\"France's\": 13013,\n\t\"Civilization\": 20378,\n\t\"ceramic\": 18025,\n\t\"nurse\": 4234,\n\t\"recommended\": 11328,\n\t\"Brokerage\": 22647,\n\t\"Gold\": 4482,\n\t\"assegais\": 31321,\n\t\"bail\": 12294,\n\t\"chemistries\": 27879,\n\t\"Contributions\": 1498,\n\t\"Morphology\": 5624,\n\t\"Krumbholz\": 10204,\n\t\"cider\": 15828,\n\t\"mat\": 17948,\n\t\"Apostles\": 5043,\n\t\"viciously\": 32069,\n\t\"ROBERT\": 22834,\n\t\"Okay\": 6175,\n\t\"fours\": 9683,\n\t\"17,500\": 11566,\n\t\"popcorn\": 28205,\n\t\"injustice\": 14117,\n\t\"Vicsandra\": 21092,\n\t\"preacher\": 18471,\n\t\"rehearing\": 22751,\n\t\"Sean\": 11124,\n\t\"vulnerabilities\": 12790,\n\t\"dogwood\": 32653,\n\t\"universities\": 1449,\n\t\"correspondances\": 3628,\n\t\"exiled\": 5982,\n\t\"moreover\": 18850,\n\t\"050901.doc\": 22357,\n\t\"airlift\": 24391,\n\t\"Willow\": 28642,\n\t\"Mistake\": 11233,\n\t\"BU\": 29460,\n\t\"displeased\": 32893,\n\t\"Kethlan\": 9204,\n\t\"mishandling\": 18148,\n\t\"firstborn\": 30524,\n\t\"ekrapels@esaibos.com\": 21568,\n\t\"implicit\": 25873,\n\t\"oozed\": 9160,\n\t\"pl\": 28310,\n\t\"conformity\": 23738,\n\t\"Kirriemuir\": 1607,\n\t\"Nutcrackers\": 8662,\n\t\"shortage\": 7939,\n\t\"Chandrika\": 18996,\n\t\"intensive\": 17072,\n\t\"premonition\": 31647,\n\t\"Guesthouse\": 27402,\n\t\"devise\": 13990,\n\t\"worshipped\": 15354,\n\t\"JetBlue\": 17115,\n\t\"Dentist\": 28857,\n\t\"Mueller\": 20760,\n\t\"them\": 1128,\n\t\"If\": 813,\n\t\"Austen\": 10928,\n\t\"PETSMART\": 26427,\n\t\"clawing\": 27463,\n\t\"introductions\": 29929,\n\t\"BIRTHDAY\": 32021,\n\t\"exclaimed\": 3931,\n\t\"Consulate\": 16462,\n\t\"Thought\": 22112,\n\t\"Stinebower\": 11404,\n\t\"LIST\": 24935,\n\t\"Whom\": 23122,\n\t\"astonished\": 21576,\n\t\"skillsets\": 386,\n\t\"applies\": 20384,\n\t\"throw\": 9259,\n\t\"lighten\": 20991,\n\t\"Opera\": 4499,\n\t\"Saikaku\": 4721,\n\t\"348\": 5988,\n\t\"Mirroring\": 15170,\n\t\"renovation\": 28455,\n\t\"tragedy\": 14213,\n\t\"gale\": 30850,\n\t\"tended\": 499,\n\t\"valueless\": 30341,\n\t\"RUTH\": 11793,\n\t\"antivaxxers\": 13820,\n\t\"0.05\": 1689,\n\t\"asymptotic\": 11258,\n\t\"roles\": 3711,\n\t\"premiums\": 29187,\n\t\"satisfying\": 8521,\n\t\"oppress\": 15716,\n\t\"thrusting\": 31823,\n\t\"don’t\": 7813,\n\t\"localities\": 10676,\n\t\"Windows\": 10466,\n\t\"K.C.\": 13311,\n\t\"HAND\": 28755,\n\t\"protection\": 7462,\n\t\"rewind\": 7109,\n\t\"Grace\": 25960,\n\t\"televising\": 31400,\n\t\"bikes\": 27568,\n\t\"mid-cities\": 26545,\n\t\"Boleyn\": 25588,\n\t\"U.K.\": 22514,\n\t\"drafted\": 4855,\n\t\"Renaissance\": 27094,\n\t\"adjacent\": 16317,\n\t\"78\": 25953,\n\t\"lamentation\": 30758,\n\t\"racing\": 8408,\n\t\"Hydrodynamica\": 3130,\n\t\"Susan's\": 22757,\n\t\"SSS\": 2589,\n\t\"inhuman\": 20427,\n\t\"Decide\": 27465,\n\t\"goggle\": 30542,\n\t\"BONES\": 29659,\n\t\"Holocaust-esque\": 24862,\n\t\"Wheeler\": 13746,\n\t\"nipped\": 8996,\n\t\"broiled\": 32518,\n\t\"Des\": 21444,\n\t\"lobby\": 12340,\n\t\"fps\": 28872,\n\t\"experimentally\": 2894,\n\t\"escapades\": 5030,\n\t\"glaze\": 8551,\n\t\"approves\": 28973,\n\t\"boxes\": 8974,\n\t\"detailing\": 671,\n\t\"crossroads\": 16875,\n\t\"Saturday's\": 29381,\n\t\"candidate’s\": 19245,\n\t\"Prince\": 7417,\n\t\"jumping\": 15713,\n\t\"dongle\": 26309,\n\t\"overstatements\": 29983,\n\t\"placid\": 9383,\n\t\"slight\": 1836,\n\t\"Linkages\": 15552,\n\t\"banking\": 22682,\n\t\"buckling\": 32432,\n\t\"-ECT-KEDNE\": 21498,\n\t\"WestJet\": 17119,\n\t\"beseech\": 24380,\n\t\"grandchildren\": 20762,\n\t\"self-esteem\": 32594,\n\t\"English\": 1723,\n\t\"debated\": 6540,\n\t\"untalented\": 25688,\n\t\"SUT\": 2268,\n\t\"reserves\": 8164,\n\t\"sections\": 677,\n\t\"20:00\": 17022,\n\t\"barriers\": 24412,\n\t\"hypnotised\": 32671,\n\t\"prisoner\": 3579,\n\t\"Counseling\": 5210,\n\t\"Wrecking\": 5286,\n\t\"unaware\": 10756,\n\t\"Wall\": 20666,\n\t\"monkey\": 10335,\n\t\"bucket\": 21831,\n\t\"**********\": 23834,\n\t\"yearly\": 545,\n\t\"ethink@enron.com\": 21559,\n\t\"http://www.railroadredux.com/tag/northwest-shortline/\": 26845,\n\t\"enjambment\": 994,\n\t\"technologies\": 2270,\n\t\"compared\": 2216,\n\t\"non-stop\": 18571,\n\t\"Novgorod\": 13066,\n\t\"berthage\": 16303,\n\t\"boasted\": 16414,\n\t\"Kay\": 3745,\n\t\"Blogshares\": 20090,\n\t\"norm\": 17092,\n\t\"sitting\": 7806,\n\t\"Amelia\": 23239,\n\t\"expedited\": 27472,\n\t\"bevelled\": 32890,\n\t\"Came\": 11007,\n\t\"wiffle\": 18329,\n\t\"assembling\": 497,\n\t\"resurrection\": 10152,\n\t\"encourages\": 1318,\n\t\"Skinner\": 10328,\n\t\"effect\": 1171,\n\t\"Strain\": 18439,\n\t\"59\": 4842,\n\t\"implying\": 19164,\n\t\"unite\": 13982,\n\t\"harmless\": 22713,\n\t\"caps\": 19995,\n\t\"remodel\": 7195,\n\t\"20,000,000\": 21606,\n\t\"opponents\": 4024,\n\t\"Erasmus\": 6516,\n\t\"moveable\": 4385,\n\t\"wake\": 9028,\n\t\"sag\": 15627,\n\t\"velvet-draped\": 31816,\n\t\"Topic\": 22461,\n\t\"film\": 4086,\n\t\"soon\": 4307,\n\t\"oppressive\": 20293,\n\t\"Richards\": 21134,\n\t\"Empress\": 4761,\n\t\"nineteen\": 3960,\n\t\"Guide\": 8331,\n\t\"provide\": 565,\n\t\"indicator\": 10743,\n\t\"fuels\": 14201,\n\t\"hero\": 10084,\n\t\"Maori\": 16271,\n\t\"veins\": 17717,\n\t\"buffeting\": 32007,\n\t\"grasp\": 14021,\n\t\"sommelier\": 28965,\n\t\"Visit\": 24989,\n\t\"T-\": 6511,\n\t\"neighborhoods\": 17098,\n\t\"Easy\": 13259,\n\t\"slime\": 31139,\n\t\"N.O.\": 23236,\n\t\"OPPOSE\": 24742,\n\t\"notebook.url\": 21781,\n\t\"Murillo's\": 25573,\n\t\"EB\": 21097,\n\t\"Thirteen\": 6987,\n\t\"Tianjin\": 3339,\n\t\"Petit\": 16243,\n\t\"transparent\": 7977,\n\t\"ENA's\": 21341,\n\t\"S1\": 2391,\n\t\"islamist\": 20610,\n\t\"lifeboats\": 26919,\n\t\"Identity\": 8289,\n\t\"preachers\": 20476,\n\t\"tasks\": 380,\n\t\"Yugoslavia\": 19138,\n\t\"release\": 3879,\n\t\"global\": 2555,\n\t\"Brethren\": 10192,\n\t\"coordinating\": 23551,\n\t\"pixies’\": 9754,\n\t\"Gallop\": 28017,\n\t\"luggage\": 13163,\n\t\"convoys\": 18592,\n\t\"Transaction\": 21663,\n\t\"beg\": 26505,\n\t\"untitled\": 30938,\n\t\"straps\": 17363,\n\t\"Station\": 10679,\n\t\"districts\": 18488,\n\t\"ALITO\": 24745,\n\t\"Cast\": 24551,\n\t\"looting\": 18585,\n\t\"Sectarian\": 19298,\n\t\"Kim's\": 29077,\n\t\"tubing\": 32726,\n\t\"ok\": 21419,\n\t\"Coffeyville\": 17430,\n\t\"licks\": 26648,\n\t\"plotters\": 20722,\n\t\"Lange\": 29394,\n\t\"gaiety\": 31872,\n\t\"chemical\": 10610,\n\t\"Slovakia\": 16489,\n\t\"trephena\": 30577,\n\t\"box-like\": 32862,\n\t\"01:50\": 22497,\n\t\"doll\": 8620,\n\t\"fetched\": 18228,\n\t\"02:28\": 22884,\n\t\"ANSI\": 30031,\n\t\"overslept\": 10175,\n\t\"PaineWebber\": 20978,\n\t\"EES\": 21365,\n\t\"versa\": 17475,\n\t\"uncenturied\": 32589,\n\t\"harvesting\": 8198,\n\t\"enshrined\": 13875,\n\t\"relationships\": 2785,\n\t\"favours\": 27373,\n\t\"703.729.2710\": 22802,\n\t\"Meadowrun\": 28590,\n\t\"bounding\": 32195,\n\t\"richard\": 23618,\n\t\"program\": 8220,\n\t\"Christensen\": 15097,\n\t\"compare\": 20950,\n\t\"http://www.ukrainianweb.com/chernobyl_ukraine.htm\": 18700,\n\t\"neuroimaging\": 13587,\n\t\"Johnson\": 3787,\n\t\"rewinding\": 30475,\n\t\"for-profit\": 10775,\n\t\"More\": 1358,\n\t\"great\": 2218,\n\t\"assorted\": 7705,\n\t\"spoilage\": 26651,\n\t\"pressing\": 30692,\n\t\"Michael\": 5779,\n\t\"exotic\": 25538,\n\t\"longitudinally\": 644,\n\t\"TO\": 11511,\n\t\"Whie\": 20317,\n\t\"EnronOnline\": 22127,\n\t\"Parkway\": 23177,\n\t\"matrix\": 23997,\n\t\"Permanent\": 7883,\n\t\"phonology\": 1877,\n\t\"275\": 17854,\n\t\"Montalvo\": 12289,\n\t\"clearer\": 15196,\n\t\"Rothko\": 21158,\n\t\"fortunes\": 16895,\n\t\"nailed\": 22739,\n\t\"canoes\": 24131,\n\t\"PIECES\": 26334,\n\t\"V.\": 24953,\n\t\"Fifty\": 9242,\n\t\"shyness\": 30465,\n\t\"Andrews\": 13631,\n\t\"ironically\": 20894,\n\t\"gunmen\": 18534,\n\t\"Wholes\": 27981,\n\t\"symbols\": 5658,\n\t\"toi\": 6706,\n\t\"waist\": 8623,\n\t\"metascience\": 2437,\n\t\"Whitman\": 11034,\n\t\"contributions\": 1529,\n\t\"airlifted\": 24133,\n\t\"alone\": 636,\n\t\"hub\": 14524,\n\t\"carpenter\": 6670,\n\t\"sympathizers\": 18752,\n\t\"budgeted\": 26027,\n\t\"Chrysler\": 23848,\n\t\"amazingly\": 29506,\n\t\"subfolders\": 30205,\n\t\"Converting\": 30184,\n\t\"Owner\": 28012,\n\t\"Union's\": 31343,\n\t\"tarmac\": 31679,\n\t\"Save\": 7816,\n\t\"blues\": 9042,\n\t\"tonne\": 19879,\n\t\"reinterred\": 4419,\n\t\"A4-0072/97\": 31339,\n\t\"Challenger\": 23932,\n\t\"Jonathan\": 6715,\n\t\"reaped\": 24504,\n\t\"poisonous\": 32285,\n\t\"Metroplex\": 25216,\n\t\"Buchanan\": 23597,\n\t\"W's\": 20253,\n\t\"breaks\": 2187,\n\t\"sailors\": 9093,\n\t\"stubbornness\": 32610,\n\t\"kaffee\": 26966,\n\t\"trouble\": 1886,\n\t\"0832\": 25423,\n\t\"cooker\": 18397,\n\t\"grapple\": 24643,\n\t\"insomnia\": 24071,\n\t\"pedestal\": 29587,\n\t\"center\": 6605,\n\t\"pledges\": 14033,\n\t\"Sylvia\": 32959,\n\t\"yahoos\": 24220,\n\t\"bizarre\": 10112,\n\t\"eternal\": 10014,\n\t\"Eurasia's\": 24592,\n\t\"Giorgio\": 25544,\n\t\"Cunard's\": 32562,\n\t\"poured\": 10573,\n\t\"really\": 1997,\n\t\"option\": 7246,\n\t\"Hero\": 25548,\n\t\"TCA\": 22353,\n\t\"tomatos\": 27440,\n\t\"Padalecki's\": 5826,\n\t\"love\": 3468,\n\t\"Ineos\": 22207,\n\t\"Maguire\": 4223,\n\t\"inquiries\": 20583,\n\t\"Terror\": 19365,\n\t\"zodiac\": 12912,\n\t\"lora.sullivan@enron.com\": 22830,\n\t\"dates\": 17517,\n\t\"wars\": 4336,\n\t\"actors\": 775,\n\t\"202.456.1414\": 24350,\n\t\"witnessing\": 5962,\n\t\"premature\": 25940,\n\t\"airbase\": 19736,\n\t\"shall\": 6447,\n\t\"glowsticks\": 18059,\n\t\"implement\": 7955,\n\t\"1950\": 4471,\n\t\"3801A\": 22257,\n\t\"interfere\": 14439,\n\t\"Archives\": 3632,\n\t\"18\": 511,\n\t\"AA's\": 22634,\n\t\"newer\": 12763,\n\t\"slowest\": 19792,\n\t\"loops\": 30107,\n\t\"wider\": 1076,\n\t\"+++++\": 21687,\n\t\"supporter\": 18851,\n\t\"Indeed\": 2468,\n\t\"Majoos\": 19304,\n\t\"absence\": 4382,\n\t\"accelerated\": 13843,\n\t\"shrieks\": 32292,\n\t\"evolutionary\": 2899,\n\t\"andrillae\": 10670,\n\t\"Coast\": 10889,\n\t\"fot\": 28869,\n\t\"prospective\": 5675,\n\t\"okay\": 6280,\n\t\"rabbit\": 27277,\n\t\"Rosa\": 15038,\n\t\"competition\": 11011,\n\t\"SUPPOSEDLY\": 30005,\n\t\"Story\": 5506,\n\t\"purgatory\": 6544,\n\t\"Marco\": 8013,\n\t\"Tonto\": 22084,\n\t\"Arbitration\": 23850,\n\t\"seams\": 32523,\n\t\"nowhere\": 9627,\n\t\"Survivors\": 19948,\n\t\"4.98\": 21926,\n\t\"79,000\": 22731,\n\t\"Numbers\": 2026,\n\t\"Underground\": 10925,\n\t\"faces\": 5883,\n\t\"auspices\": 20372,\n\t\"Vince\": 19396,\n\t\"vomit\": 27593,\n\t\"Why\": 6969,\n\t\"semiautomatic\": 26944,\n\t\"mess\": 7015,\n\t\"Joo-Ho\": 13072,\n\t\"strapped\": 32723,\n\t\"司空\": 14868,\n\t\"ltake\": 29437,\n\t\"weaklings\": 9635,\n\t\"ph\": 26521,\n\t\"coarsely\": 32747,\n\t\"pipeline\": 692,\n\t\"insensate\": 32811,\n\t\"alcalde\": 14683,\n\t\"Baie\": 16692,\n\t\"slammed\": 8983,\n\t\"extracurricular\": 22667,\n\t\"cats\": 13575,\n\t\"Cyd\": 12466,\n\t\"discriminatory\": 24683,\n\t\"Delainey\": 21342,\n\t\"push\": 7762,\n\t\"engineer's\": 30782,\n\t\"geometries\": 2343,\n\t\"Continent\": 31069,\n\t\"regime\": 18936,\n\t\"Din\": 19339,\n\t\"fellows\": 20085,\n\t\"criminals\": 14320,\n\t\"shuffled\": 31155,\n\t\"Islam\": 18633,\n\t\"Systematically\": 1058,\n\t\"Ideas\": 14964,\n\t\"cagey\": 30855,\n\t\"expressing\": 15438,\n\t\"Thais\": 17333,\n\t\"Istanbul\": 13865,\n\t\"Gels\": 15942,\n\t\"galore\": 15704,\n\t\"birth\": 5851,\n\t\"faith\": 13168,\n\t\"creaking\": 9030,\n\t\"agonizing\": 24854,\n\t\"kick\": 13137,\n\t\"rude\": 15485,\n\t\"desserts\": 28451,\n\t\"election\": 5863,\n\t\"pail\": 31301,\n\t\"veggies\": 27281,\n\t\"Muang\": 19202,\n\t\"blank\": 22838,\n\t\"Dando's\": 31760,\n\t\"loved\": 6136,\n\t\"Fantastic\": 28090,\n\t\"expressions\": 16902,\n\t\"1912\": 4611,\n\t\"Danish\": 17204,\n\t\"grades\": 11807,\n\t\"porky\": 32053,\n\t\"completing\": 14424,\n\t\"xeno\": 15526,\n\t\"Lucille\": 5599,\n\t\"dug\": 5052,\n\t\"estimate\": 2690,\n\t\"Olive\": 18362,\n\t\"fairs\": 16898,\n\t\"farther\": 11819,\n\t\"Once\": 1366,\n\t\"description\": 1008,\n\t\"Flores\": 1102,\n\t\"GRF\": 2793,\n\t\"Jesse\": 13127,\n\t\"stamped\": 23925,\n\t\"Chumley\": 23745,\n\t\"excellent\": 11648,\n\t\"Sub-cultures\": 20320,\n\t\"Basic\": 1649,\n\t\"siphoned\": 19902,\n\t\"Moves\": 13048,\n\t\"eat\": 6688,\n\t\"CIAC\": 23570,\n\t\"signalled\": 31909,\n\t\"UNITED\": 24996,\n\t\"fifteenth\": 24384,\n\t\"at\": 35,\n\t\"eclipse\": 11228,\n\t\"IN\": 10090,\n\t\"please\": 2004,\n\t\"MKM\": 22783,\n\t\"Fillmore\": 3645,\n\t\"streaks\": 26590,\n\t\"campsite\": 29450,\n\t\"registering\": 2322,\n\t\"accurate\": 617,\n\t\"McCombs\": 7319,\n\t\"arrears\": 13217,\n\t\"S.A.\": 22261,\n\t\"smiley\": 18006,\n\t\"wrinkles\": 8552,\n\t\"Julia\": 22372,\n\t\"cruelty\": 4675,\n\t\"Chi-fung\": 12464,\n\t\"Thanksgiv8ing\": 21990,\n\t\"Quantity\": 21641,\n\t\"scammers\": 27015,\n\t\"Bringing\": 8210,\n\t\"sciencem...@upi.com\": 25097,\n\t\"wild\": 7991,\n\t\"Mertens\": 13101,\n\t\"belts\": 25253,\n\t\"flavored\": 17833,\n\t\"citing\": 25950,\n\t\"sliced\": 27324,\n\t\"assemble\": 611,\n\t\"Iran's\": 18922,\n\t\"INDEPENDENCE\": 32005,\n\t\"entrance\": 12927,\n\t\"henequen\": 16977,\n\t\"Please\": 6235,\n\t\"chambermaid\": 29971,\n\t\"lady\": 11520,\n\t\"Adele\": 3782,\n\t\"Kansas\": 15604,\n\t\"Trinidadian\": 29016,\n\t\"Picasso\": 21170,\n\t\"Catedral\": 16956,\n\t\"publicized\": 16499,\n\t\"Had\": 6026,\n\t\"privacy\": 12121,\n\t\"howled\": 9897,\n\t\"drought\": 15396,\n\t\"massacre\": 18561,\n\t\"prettier\": 16106,\n\t\"Groom\": 19817,\n\t\"shoppers\": 25852,\n\t\"http://www.tecsoc.org/pubs/history/2002/apr26.htm\": 18705,\n\t\"utilize\": 1216,\n\t\"Jan\": 19014,\n\t\"salted\": 8581,\n\t\"contradict\": 17634,\n\t\"assistant\": 5298,\n\t\"meanings\": 5656,\n\t\"Court's\": 7568,\n\t\"Velvet\": 13429,\n\t\"Basis\": 21442,\n\t\"EACH\": 24937,\n\t\"highlighting\": 1617,\n\t\"Atlanta\": 19962,\n\t\"WHERE\": 21077,\n\t\"veggie\": 29169,\n\t\"mutilating\": 18624,\n\t\"Texas’s\": 14750,\n\t\"rediculous\": 20319,\n\t\"donning\": 30441,\n\t\"marked\": 4716,\n\t\"DH\": 27888,\n\t\"31\": 1663,\n\t\"secretly\": 18493,\n\t\"sends\": 14180,\n\t\"concluded\": 7580,\n\t\"grocers\": 8223,\n\t\"reaction\": 2792,\n\t\"circular\": 16829,\n\t\"clamouring\": 32334,\n\t\"Microsystems\": 21546,\n\t\"voicemail\": 13594,\n\t\"releases\": 25147,\n\t\"reproachfully\": 31800,\n\t\"tolerate\": 4304,\n\t\"Agence\": 18971,\n\t\"Brenda\": 13625,\n\t\"interminable\": 30757,\n\t\"sombre\": 4306,\n\t\"Jennifer\": 4233,\n\t\"erred\": 7575,\n\t\"progressively\": 13862,\n\t\"Animals\": 24889,\n\t\"Us\": 6967,\n\t\"Que.\": 24110,\n\t\"tides\": 3251,\n\t\"pan-democrats\": 12503,\n\t\"exceptional\": 19238,\n\t\"purchasing\": 20715,\n\t\"congress\": 19975,\n\t\"eczema\": 32504,\n\t\"adventurers\": 30949,\n\t\"lift\": 18137,\n\t\"flashpoints\": 19159,\n\t\"hav\": 26206,\n\t\"Britney\": 11119,\n\t\"whack\": 27368,\n\t\"coffeehouses\": 11021,\n\t\"cracked\": 12175,\n\t\"SPAR\": 24868,\n\t\"Justine\": 9919,\n\t\"eras\": 12621,\n\t\"bridal\": 26901,\n\t\"siege\": 19778,\n\t\"keep\": 1489,\n\t\"imposing\": 800,\n\t\"theatres\": 29529,\n\t\"squash\": 15348,\n\t\"Drop\": 17734,\n\t\"listeners\": 20229,\n\t\"packaged\": 13786,\n\t\"nevertheless\": 18183,\n\t\"ta'\": 24091,\n\t\"Mass\": 15553,\n\t\"Beauveria\": 10221,\n\t\"shades\": 16070,\n\t\"Pauvre\": 11458,\n\t\"eloquent\": 25255,\n\t\"homosexual\": 25669,\n\t\"Catholics\": 27184,\n\t\"honestly\": 17920,\n\t\"beware\": 29105,\n\t\"pants\": 8606,\n\t\"productivity\": 535,\n\t\"Nicole\": 5176,\n\t\"art\": 37,\n\t\"Tyneside\": 17577,\n\t\"circle\": 10831,\n\t\"husk\": 30385,\n\t\"pursuers\": 9260,\n\t\"tossed\": 24172,\n\t\"box\": 6974,\n\t\"moors\": 26180,\n\t\"ad\": 10694,\n\t\"ray\": 11591,\n\t\"Socialist\": 10377,\n\t\"retraced\": 30293,\n\t\"defiled\": 18642,\n\t\"Motivated\": 15203,\n\t\"202.429.1700\": 22812,\n\t\"Chart\": 30153,\n\t\"going\": 6072,\n\t\"then\": 816,\n\t\"Kinder\": 2936,\n\t\"bulging\": 32120,\n\t\"page's\": 30060,\n\t\"Jacoby@ECT\": 21231,\n\t\"missive\": 20846,\n\t\"UNCARING\": 29917,\n\t\"Swifties\": 19248,\n\t\"Scholarship\": 3347,\n\t\"undergrowth\": 31716,\n\t\"Photo\": 7830,\n\t\"aforementioned\": 2213,\n\t\"burdensome\": 23424,\n\t\"changer\": 7999,\n\t\"so's\": 10745,\n\t\"Hens\": 17818,\n\t\"broomsticks\": 18321,\n\t\"rightholders\": 31441,\n\t\"osteos\": 28322,\n\t\"swimming\": 8943,\n\t\"L.A.\": 12341,\n\t\"crouches\": 8849,\n\t\"Crickets\": 27755,\n\t\"latte\": 15760,\n\t\"opinon\": 29232,\n\t\"beliefs\": 237,\n\t\"ranger\": 25095,\n\t\"Labour's\": 12991,\n\t\"BABA\": 19822,\n\t\"marshmallow\": 31982,\n\t\"dealer\": 8588,\n\t\"accomplices\": 20382,\n\t\"Manifesto\": 10944,\n\t\"loses\": 7621,\n\t\"pleaure\": 30453,\n\t\"actually\": 306,\n\t\"palm\": 9912,\n\t\"Williams\": 2527,\n\t\"till\": 6350,\n\t\"hay-carts\": 32767,\n\t\"WORKERS\": 29681,\n\t\"across\": 454,\n\t\"Breslau\": 22041,\n\t\"Prior\": 13508,\n\t\"Conclusion\": 2034,\n\t\"blurred\": 21957,\n\t\"SMART\": 28745,\n\t\"preening\": 17821,\n\t\"boxer\": 20517,\n\t\"SMAP\": 2583,\n\t\"Dozen\": 5749,\n\t\"setting\": 6528,\n\t\"30.00\": 29850,\n\t\"slacken\": 32524,\n\t\"profoundly\": 14145,\n\t\"saving\": 14268,\n\t\"713-654-0365\": 20980,\n\t\"signature\": 20830,\n\t\"warranties\": 23499,\n\t\"Claim\": 5729,\n\t\"DISHES\": 28793,\n\t\"planted\": 17071,\n\t\"concentrations\": 10304,\n\t\"Saviour\": 5559,\n\t\"sips\": 16237,\n\t\"reprisal\": 25751,\n\t\"Filter\": 18429,\n\t\"bugless\": 26174,\n\t\"conditioning\": 29847,\n\t\"mate\": 27042,\n\t\"Mouhamad\": 20437,\n\t\"SAMUEL\": 24744,\n\t\"servants\": 14693,\n\t\"hip\": 2761,\n\t\"Anbar\": 19323,\n\t\"horizon\": 9967,\n\t\"tissues\": 29296,\n\t\"Bludgers\": 18345,\n\t\"WHOLESALE\": 23434,\n\t\"strange\": 9386,\n\t\"longs\": 19281,\n\t\"corners\": 12534,\n\t\"economic\": 718,\n\t\"induces\": 2710,\n\t\"diocese\": 5927,\n\t\"writers'\": 13673,\n\t\"JR\": 22833,\n\t\"sacramental\": 7229,\n\t\"TDS\": 27881,\n\t\"homeland\": 19548,\n\t\"therein\": 9438,\n\t\"Mosques\": 16794,\n\t\"gelatos\": 26969,\n\t\"movements\": 209,\n\t\"infectious\": 13809,\n\t\"memorial\": 4012,\n\t\"chaos\": 14202,\n\t\"Chehel\": 16824,\n\t\"Cafe\": 27548,\n\t\"spaced\": 17745,\n\t\"cleaners\": 15009,\n\t\"Will\": 4931,\n\t\"Anyone\": 10334,\n\t\"retrospect\": 10823,\n\t\"minted\": 25879,\n\t\"TELEPHONE\": 11505,\n\t\"wartime\": 12868,\n\t\"woodpeckers\": 26661,\n\t\"Lambala-speaking\": 31779,\n\t\"piers\": 32549,\n\t\"citizens\": 939,\n\t\"Shoo\": 9719,\n\t\"pariah\": 24567,\n\t\"Analytique\": 3248,\n\t\"Tower\": 14638,\n\t\"councillors\": 12423,\n\t\"copper-brown\": 30785,\n\t\"Experience\": 10339,\n\t\"baby\": 14848,\n\t\"novels\": 5331,\n\t\"Fluorescent\": 2093,\n\t\"Plan\": 3516,\n\t\"pro-Beijing\": 12375,\n\t\"Bik\": 16695,\n\t\"heyday\": 16949,\n\t\"320\": 17858,\n\t\"blanco\": 21427,\n\t\"Mweta\": 31569,\n\t\"elaborated\": 5651,\n\t\"evaluations\": 22841,\n\t\"donated\": 13262,\n\t\"podiobooks.com\": 10969,\n\t\"splish\": 6243,\n\t\"Explorer\": 12757,\n\t\"Dynamite\": 30867,\n\t\"UNESCO’s\": 14497,\n\t\"alroot\": 6200,\n\t\"Market\": 16595,\n\t\"''\": 20068,\n\t\"though\": 2002,\n\t\"professionals\": 1419,\n\t\"forget\": 2977,\n\t\"Liechtenstein\": 16484,\n\t\"Josalyn\": 26449,\n\t\"pre-meeting\": 21569,\n\t\"Indicators\": 29811,\n\t\"downstairs\": 28583,\n\t\"Hjalmar\": 31727,\n\t\"Touchez\": 5401,\n\t\"carbonate\": 18040,\n\t\"mortars\": 18574,\n\t\"Rome\": 4990,\n\t\"fees\": 13231,\n\t\"COMMUNICATIONS\": 21183,\n\t\"newsgroup\": 12747,\n\t\"sound\": 797,\n\t\"jobs\": 4619,\n\t\"fashioned\": 6133,\n\t\"SS-N-22\": 25792,\n\t\"filter\": 18440,\n\t\"specify\": 23358,\n\t\"MGr...@usa.pipeline.com\": 25424,\n\t\"blossom\": 17908,\n\t\"unproductive\": 18260,\n\t\"squirm\": 29623,\n\t\"surgical\": 26076,\n\t\"Gustafon\": 13334,\n\t\"Weed\": 17758,\n\t\"perfume\": 9462,\n\t\"kc\": 29126,\n\t\"gather\": 1184,\n\t\"Nickinator\": 10269,\n\t\"comparing\": 681,\n\t\"Monsoon\": 17095,\n\t\"B-\": 11723,\n\t\"evident\": 14395,\n\t\"Husain\": 18517,\n\t\"surgeons\": 26633,\n\t\"inn\": 28975,\n\t\"Grog-blossom\": 32534,\n\t\"raspberry\": 8933,\n\t\"Escola\": 1614,\n\t\"IFN\": 16762,\n\t\"divided\": 1659,\n\t\"Mullah\": 19672,\n\t\"Proceedings\": 25107,\n\t\"SEO\": 29807,\n\t\"Mace\": 30766,\n\t\"likeness\": 4756,\n\t\"Kuwaiti\": 21513,\n\t\"sea-reach\": 30877,\n\t\"ensemble\": 29457,\n\t\"remuneration\": 31456,\n\t\"athlete's\": 32508,\n\t\"generation\": 2071,\n\t\"orginals\": 28728,\n\t\"Provided\": 19489,\n\t\"Pag\": 9596,\n\t\"would've\": 6445,\n\t\"WHICH\": 27775,\n\t\"Sweden's\": 13093,\n\t\"permit\": 11562,\n\t\"Texas\": 4776,\n\t\"anybody\": 6343,\n\t\"loving\": 11524,\n\t\"VAN\": 28762,\n\t\"balcony\": 21862,\n\t\"hosted\": 18734,\n\t\"Floor\": 14093,\n\t\"shopping\": 16582,\n\t\"teaspoon\": 17849,\n\t\"what\": 884,\n\t\"Vincent\": 16493,\n\t\"guided\": 13903,\n\t\"newfound\": 12240,\n\t\"16.379\": 24470,\n\t\"realm\": 25858,\n\t\"fellow\": 4357,\n\t\"Electoral\": 18542,\n\t\"Beall\": 1404,\n\t\"Saudis\": 11225,\n\t\"1-800-238-5355\": 24944,\n\t\"unconvincing\": 17809,\n\t\"twelve\": 6174,\n\t\"ReportML\": 30122,\n\t\"U.S\": 10402,\n\t\"comic\": 13743,\n\t\"Beatles\": 17979,\n\t\"scan\": 197,\n\t\"truly\": 9465,\n\t\"detective\": 12323,\n\t\"guard\": 18305,\n\t\"earnestly\": 31131,\n\t\"bust\": 4255,\n\t\"rocked\": 28429,\n\t\"Six\": 6310,\n\t\"Robot\": 12065,\n\t\"raisers\": 26101,\n\t\"audit\": 21938,\n\t\"medial\": 4874,\n\t\"severly\": 27614,\n\t\"latitudes\": 25115,\n\t\"strangled\": 19936,\n\t\"Horton\": 22920,\n\t\"slumber\": 14043,\n\t\"disagreements\": 814,\n\t\"scarf\": 6962,\n\t\"breathtaking\": 16516,\n\t\"mediocre\": 28600,\n\t\"Gulliver's\": 24215,\n\t\"10.6\": 27887,\n\t\"platted\": 17485,\n\t\"annoy\": 17912,\n\t\"flakes\": 10525,\n\t\"Raymond\": 12428,\n\t\"impartial\": 784,\n\t\"Nazareth\": 20178,\n\t\"transformative\": 7422,\n\t\"Annoying\": 5279,\n\t\"Susan\": 20234,\n\t\"(d)\": 2508,\n\t\"Skylab\": 2597,\n\t\"Mindset\": 15054,\n\t\"cigars\": 30315,\n\t\"IQR\": 15660,\n\t\"vulnerability\": 17597,\n\t\"alcoholism\": 13533,\n\t\"essentially\": 1813,\n\t\"attributed\": 2767,\n\t\"interactive\": 16096,\n\t\"classic\": 7472,\n\t\"06:00:56\": 21236,\n\t\"moral\": 4987,\n\t\"Lockhart\": 32348,\n\t\"tin\": 12010,\n\t\"spills\": 29760,\n\t\"allegedly\": 8421,\n\t\"Two\": 3233,\n\t\"conducive\": 11620,\n\t\"embodying\": 14058,\n\t\"referrals\": 23376,\n\t\"Hub\": 22686,\n\t\"Pig\": 27432,\n\t\"side\": 3542,\n\t\"differentiate\": 1176,\n\t\"sonny\": 24204,\n\t\"arrests\": 11218,\n\t\"exmearden\": 20268,\n\t\"Smart\": 13971,\n\t\"sun-yellowed\": 31724,\n\t\"Iran’s\": 19730,\n\t\"Topics\": 5309,\n\t\"isolating\": 18779,\n\t\"webpage\": 24501,\n\t\"heed\": 29620,\n\t\"Gosh\": 6467,\n\t\"specializing\": 11411,\n\t\"interns\": 23365,\n\t\"INS\": 25969,\n\t\"Too\": 16016,\n\t\"1.78\": 4809,\n\t\"Claus\": 8544,\n\t\"Saintly\": 29899,\n\t\"fishermen\": 12142,\n\t\"Suwayrah\": 18504,\n\t\"Emmy\": 4185,\n\t\"HCC's\": 28311,\n\t\"MTLE\": 21676,\n\t\"Gliders\": 10988,\n\t\"relativist\": 15515,\n\t\"Mayes\": 23751,\n\t\"Congo\": 14207,\n\t\"suspicious\": 6619,\n\t\"40,500\": 15691,\n\t\"shuffling\": 6019,\n\t\"dodge\": 18331,\n\t\"LEAST\": 28799,\n\t\"insidious\": 23923,\n\t\"tying\": 3164,\n\t\"brush\": 32309,\n\t\"250,000\": 14619,\n\t\"peaking\": 17215,\n\t\"Thames\": 25641,\n\t\"governments\": 841,\n\t\"along\": 4909,\n\t\"Tamil\": 18979,\n\t\"SEP\": 12034,\n\t\"females\": 24030,\n\t\"fervor\": 20411,\n\t\"absorption\": 23989,\n\t\"decision\": 64,\n\t\"Boulevard\": 16787,\n\t\"reform\": 7225,\n\t\"~\": 26390,\n\t\"charred\": 9163,\n\t\"minimal\": 17607,\n\t\"Bailey's\": 10571,\n\t\"northbound\": 17561,\n\t\"enculturation\": 14831,\n\t\"prison\": 3865,\n\t\"Mt\": 24759,\n\t\"dependable\": 28610,\n\t\"92,000\": 12970,\n\t\"Dispatch\": 23021,\n\t\"Alexandra\": 30529,\n\t\"tupperwear\": 27366,\n\t\"limelight\": 14931,\n\t\"slum\": 18584,\n\t\"nerd\": 28870,\n\t\"Ride\": 5330,\n\t\"speakers\": 21558,\n\t\"Forum\": 21798,\n\t\"Clairmont\": 4198,\n\t\"deployment\": 9263,\n\t\"uneasiness\": 25661,\n\t\"condensed\": 25637,\n\t\"Darmanin\": 13016,\n\t\"limits\": 18462,\n\t\"depths\": 11031,\n\t\"1307\": 21136,\n\t\"MIRACLE\": 22956,\n\t\"Chitonga\": 2030,\n\t\"timelessness\": 32586,\n\t\"Wajda's\": 16909,\n\t\"Appraisal\": 25157,\n\t\"twice\": 9021,\n\t\"sullen\": 9444,\n\t\"SPECIAL\": 28801,\n\t\"greenery\": 16570,\n\t\"Hobbes'\": 25378,\n\t\"WSI\": 21581,\n\t\"1687\": 4368,\n\t\"Jann\": 13352,\n\t\"hormone\": 17752,\n\t\"negotiations\": 13871,\n\t\"Malardians\": 13757,\n\t\"humiliate\": 19941,\n\t\"dysentery\": 24086,\n\t\"decades\": 2647,\n\t\"Tons\": 25944,\n\t\"happened\": 6329,\n\t\"pursuit\": 14570,\n\t\"pillowcases\": 15709,\n\t\"barnacles\": 9057,\n\t\"sewers\": 11631,\n\t\"zealot\": 25895,\n\t\"overload\": 12730,\n\t\"airtight\": 17775,\n\t\"president’s\": 19214,\n\t\"dregs\": 24289,\n\t\"individual\": 118,\n\t\"obstacle\": 15083,\n\t\"Yet\": 1384,\n\t\"honorable\": 7517,\n\t\"Kaufman@ECT\": 21381,\n\t\"pester\": 27343,\n\t\"dictating\": 7583,\n\t\"average\": 2947,\n\t\"CFLs\": 2171,\n\t\"rice\": 13452,\n\t\"Yiu\": 12513,\n\t\"j-\": 6918,\n\t\"splashed\": 8995,\n\t\"reconnaissance\": 20422,\n\t\"05/25/2001\": 23540,\n\t\"realized\": 9790,\n\t\"orders\": 21001,\n\t\"THREE\": 24967,\n\t\"neon-lit\": 32882,\n\t\"formality\": 21272,\n\t\"righteousness\": 20099,\n\t\"---->===}*{===<----\": 25193,\n\t\"thirty-six\": 32782,\n\t\"vowel\": 18117,\n\t\"AR\": 22648,\n\t\"THINK\": 28757,\n\t\"Gratton\": 1554,\n\t\"liberated\": 4489,\n\t\"clones\": 10672,\n\t\"barrack-like\": 31170,\n\t\"meticulous\": 24719,\n\t\"Nevis\": 16491,\n\t\"Shebaa\": 18897,\n\t\"Commitment\": 710,\n\t\"Hackers\": 12682,\n\t\"contamination\": 18452,\n\t\"airliner\": 19462,\n\t\"successfully\": 2613,\n\t\"Mayors\": 26020,\n\t\"tacos\": 29761,\n\t\"heritage\": 11666,\n\t\"DONE\": 28176,\n\t\"Later\": 2298,\n\t\"Gets\": 8462,\n\t\"reimbursable\": 23568,\n\t\"produces\": 1884,\n\t\"tender\": 9607,\n\t\"implied\": 15786,\n\t\"forefinger\": 9851,\n\t\"analyze\": 21056,\n\t\"detractors\": 25203,\n\t\"basics\": 17660,\n\t\"annotated\": 3826,\n\t\"creatures\": 24858,\n\t\"ensuing\": 8323,\n\t\"Policemen\": 24265,\n\t\"Touching\": 24639,\n\t\"Alireza\": 12089,\n\t\"Yasushi\": 19058,\n\t\"permeated\": 7623,\n\t\"gait\": 31151,\n\t\"disseminate\": 13302,\n\t\"Sleep\": 29595,\n\t\"1600s\": 16753,\n\t\"liberties\": 20496,\n\t\"glimmering\": 31925,\n\t\"unfavourable\": 26089,\n\t\"pop\": 5324,\n\t\"Reminder\": 22253,\n\t\"Dispute\": 23842,\n\t\"intercompany\": 22589,\n\t\"baldness\": 29782,\n\t\"Iraqiyah\": 18625,\n\t\"perspiration\": 15255,\n\t\"Clearly\": 23937,\n\t\"disasters\": 8154,\n\t\"ultimate\": 11028,\n\t\"Inc.\": 20979,\n\t\"earn\": 13677,\n\t\"previews\": 29528,\n\t\"Null\": 30159,\n\t\"Klenk\": 15194,\n\t\"Lottery\": 24973,\n\t\"carton\": 21256,\n\t\"weapon\": 10434,\n\t\"pledged\": 19664,\n\t\"stimulant\": 31599,\n\t\"Frank\": 5535,\n\t\"surprises\": 11268,\n\t\"Cornell\": 3350,\n\t\"weaponize\": 20656,\n\t\"ORDERS\": 28804,\n\t\"Ozark\": 17408,\n\t\"Yo\": 21237,\n\t\"splendidly\": 31303,\n\t\"Shit\": 6104,\n\t\"expand\": 10412,\n\t\"beefing\": 10420,\n\t\"Drove\": 28469,\n\t\"upper\": 4518,\n\t\"Sec.\": 24969,\n\t\"mantra\": 17995,\n\t\"Terry\": 11136,\n\t\".....\": 23252,\n\t\"its\": 81,\n\t\"critic\": 12741,\n\t\"depress\": 11659,\n\t\"wai\": 17336,\n\t\"Barzanti\": 31445,\n\t\"Do@ENRON_DEVELOPMENT\": 23119,\n\t\"existing\": 765,\n\t\"Socotra\": 17137,\n\t\"Monopoly\": 7852,\n\t\"Matter\": 14120,\n\t\"sixth\": 15563,\n\t\"Ikea\": 28195,\n\t\"Congress\": 2248,\n\t\"aggressively\": 19743,\n\t\"335\": 17038,\n\t\"a\": 56,\n\t\"response\": 575,\n\t\"Lihabi\": 19336,\n\t\"Tokyo's\": 4694,\n\t\"models\": 2669,\n\t\"contorted\": 31140,\n\t\"coordination\": 14473,\n\t\"freckled\": 31700,\n\t\"childbirth\": 24040,\n\t\"outlandish\": 15084,\n\t\"ammunition\": 19579,\n\t\"Taikoo\": 12519,\n\t\"slaveholders\": 14694,\n\t\"finances\": 8476,\n\t\"wisecracks\": 30604,\n\t\".203\": 4925,\n\t\"GILDEROY\": 32344,\n\t\"forceful\": 20553,\n\t\"Stravinsky\": 31619,\n\t\"Don't\": 4063,\n\t\"codes\": 20854,\n\t\"convertible\": 11602,\n\t\"screeching\": 31308,\n\t\"infantry\": 19842,\n\t\"undesirable\": 26135,\n\t\"Charlotte\": 27004,\n\t\"yoyo\": 30466,\n\t\"240\": 21254,\n\t\"Post\": 12026,\n\t\"FBI's\": 19992,\n\t\"succeed\": 11168,\n\t\"Mathematical\": 3227,\n\t\"Collection\": 13305,\n\t\"secrets\": 9442,\n\t\"Don'ts\": 17992,\n\t\"tabs\": 21473,\n\t\"Ka-chun\": 12510,\n\t\"Naples\": 30808,\n\t\"Uzbekistan\": 16481,\n\t\"dick\": 13610,\n\t\"Shanlyn\": 7561,\n\t\"prized\": 19135,\n\t\"Vegas\": 10345,\n\t\"Spec.\": 20953,\n\t\"Pete’s\": 9879,\n\t\"nightmares\": 31147,\n\t\"harbours\": 16298,\n\t\"correlates\": 2829,\n\t\"hutch\": 27278,\n\t\"HAVE\": 19483,\n\t\"falsehoods\": 29834,\n\t\"potpourri\": 29542,\n\t\"chief\": 3243,\n\t\"commonsense\": 19310,\n\t\"exploit\": 19370,\n\t\"accuracies\": 2727,\n\t\"Ninth\": 7612,\n\t\"seating\": 27930,\n\t\"incremental\": 7239,\n\t\"12-20-2000\": 23314,\n\t\"Nuremberg\": 5098,\n\t\"substantial\": 2482,\n\t\"threaten\": 23688,\n\t\"Alley\": 16091,\n\t\"genes\": 10667,\n\t\"Maximilien\": 4040,\n\t\"farriers\": 6405,\n\t\"Dos\": 17965,\n\t\"advancements\": 25284,\n\t\"enhance\": 8019,\n\t\"insure\": 30096,\n\t\"structuring\": 21730,\n\t\"beings\": 11235,\n\t\"Shared\": 31385,\n\t\"Uh-oh\": 6466,\n\t\"Brendan\": 11771,\n\t\"72,000\": 15686,\n\t\"ride\": 6068,\n\t\"grimace-smile\": 31966,\n\t\"supposition\": 25512,\n\t\"constituencies'\": 12368,\n\t\"Tet\": 27703,\n\t\"unfolded\": 14204,\n\t\"wings\": 28206,\n\t\"humor\": 3467,\n\t\"Vanves\": 26607,\n\t\"bouquet\": 7296,\n\t\"roll\": 479,\n\t\"stray\": 9553,\n\t\"Israel's\": 11229,\n\t\"ECCL\": 22051,\n\t\"pattern\": 8480,\n\t\"944-6800\": 16563,\n\t\"knowledge\": 919,\n\t\"Orson\": 5500,\n\t\"Erin\": 21359,\n\t\"infertility\": 29325,\n\t\"undecided\": 20215,\n\t\"Satellite\": 4173,\n\t\"antipasti\": 28893,\n\t\"90\": 4568,\n\t\"wisconsin\": 29402,\n\t\"Wila\": 11704,\n\t\"script\": 12019,\n\t\"encouraging\": 3859,\n\t\"1934\": 10116,\n\t\"buzzy\": 8859,\n\t\"ive\": 24886,\n\t\"Presciently\": 7964,\n\t\"differ\": 5676,\n\t\"perfected\": 15387,\n\t\"Biologists\": 17784,\n\t\"sleep\": 7741,\n\t\"springer\": 23900,\n\t\"Wishes\": 24993,\n\t\"Self/less\": 4152,\n\t\"Lomas\": 31363,\n\t\"cars\": 11751,\n\t\"LOPEZ\": 25437,\n\t\"Patterson\": 5332,\n\t\"provided\": 146,\n\t\"IT'S\": 29912,\n\t\"celebrations'll\": 31593,\n\t\"unwonted\": 9380,\n\t\"SJ\": 21409,\n\t\"ducked\": 9671,\n\t\"Suleiman\": 12261,\n\t\"stability\": 1679,\n\t\"criminal\": 12972,\n\t\"Wazed\": 19499,\n\t\"Province\": 16728,\n\t\"cram\": 18130,\n\t\"blogosphere\": 20091,\n\t\"seperate\": 19314,\n\t\"Oct\": 21947,\n\t\"jointly\": 21952,\n\t\"LOGIN\": 23037,\n\t\"combs\": 27152,\n\t\"Uneasiness\": 31247,\n\t\"alt.animals.felines.diseases\": 24835,\n\t\"M-mm\": 6661,\n\t\"spattering\": 8907,\n\t\"LIMIT\": 30049,\n\t\"Zion\": 30623,\n\t\"Developing\": 8369,\n\t\"biz\": 21601,\n\t\"Phuket\": 19581,\n\t\"Pro-Beijing\": 12438,\n\t\"connect\": 4632,\n\t\"cycle\": 101,\n\t\"starving\": 6159,\n\t\"intercepted\": 3676,\n\t\"complaining\": 4342,\n\t\"teacher\": 10064,\n\t\"markedly\": 2779,\n\t\"emulate\": 14571,\n\t\"Remarkably\": 21230,\n\t\"Wolves\": 25079,\n\t\"Portugal\": 22507,\n\t\"startup\": 10695,\n\t\"county\": 19836,\n\t\"simpler\": 17160,\n\t\"Jack-s\": 28227,\n\t\"warmed\": 28075,\n\t\"drawer\": 29892,\n\t\"01:57\": 23219,\n\t\"Cynagon\": 26172,\n\t\"Jafari\": 12231,\n\t\"River\": 16397,\n\t\"Davio's\": 26556,\n\t\"Borgias\": 32405,\n\t\"cargo\": 23472,\n\t\"nested\": 30133,\n\t\"Significantly\": 14773,\n\t\"Reply\": 24766,\n\t\"11:35\": 21375,\n\t\"budgies\": 27784,\n\t\"Conroy\": 12553,\n\t\"maximum\": 15694,\n\t\"Baba\": 19816,\n\t\"traveling\": 5932,\n\t\"jurisdictions\": 13983,\n\t\"buds\": 15822,\n\t\"divined\": 20788,\n\t\"Marcie\": 11706,\n\t\"707-885-2508\": 22453,\n\t\"savings\": 20908,\n\t\"wholesale\": 20474,\n\t\"radiometry\": 2601,\n\t\"legendary\": 3390,\n\t\"screens\": 9356,\n\t\"fragrance\": 26291,\n\t\"lacking\": 8718,\n\t\"lowered\": 1429,\n\t\"guaranteed\": 17835,\n\t\"Family\": 7832,\n\t\"impression\": 1319,\n\t\"jongg\": 9135,\n\t\"Recruiting\": 22347,\n\t\"acknowledging\": 7639,\n\t\"copies\": 11405,\n\t\"Org\": 12287,\n\t\"ceased\": 9961,\n\t\"compressor\": 22728,\n\t\"epitome\": 28983,\n\t\"10:25\": 23810,\n\t\"manipulation\": 1475,\n\t\"reintroduced\": 24656,\n\t\"Millennium\": 13886,\n\t\"transforming\": 14480,\n\t\"Morton's\": 26566,\n\t\"Cheapest\": 26636,\n\t\"swearing\": 14349,\n\t\"lavatories\": 31690,\n\t\"Tristram\": 9841,\n\t\"non-representative\": 124,\n\t\"led\": 4844,\n\t\"smug\": 17602,\n\t\"foundation\": 7492,\n\t\"trunks\": 10273,\n\t\"reins\": 26383,\n\t\"express\": 11259,\n\t\"Educación\": 965,\n\t\"guy\": 6036,\n\t\"Khomeini\": 18925,\n\t\"Burger\": 10327,\n\t\"Matt\": 28379,\n\t\"ethical\": 8441,\n\t\"Spencer\": 8828,\n\t\"proven\": 15081,\n\t\"capitals\": 19564,\n\t\"Khaled\": 12269,\n\t\"eclipses\": 15319,\n\t\"posture\": 2736,\n\t\"imaginary\": 8765,\n\t\"payers'\": 24507,\n\t\"Lynda\": 28062,\n\t\"goers\": 13435,\n\t\"Fellowship\": 5382,\n\t\"soak\": 8653,\n\t\"Norma\": 22763,\n\t\"institution\": 793,\n\t\"Australasian\": 18656,\n\t\"devolving\": 862,\n\t\"Chudnov\": 4322,\n\t\"authoritarian\": 18861,\n\t\"mumbo\": 25231,\n\t\"Messiah's\": 30759,\n\t\"colonial\": 927,\n\t\"certified\": 18229,\n\t\"Recommended\": 28677,\n\t\"Oops\": 27984,\n\t\"94720-1900\": 22449,\n\t\"papers\": 3269,\n\t\"tons\": 12009,\n\t\"transparency\": 13721,\n\t\"Hasidic\": 30579,\n\t\"Dilworth\": 14447,\n\t\"solid\": 6239,\n\t\"moisturizing\": 15922,\n\t\"impassively\": 30316,\n\t\"SAYS\": 11909,\n\t\"puke\": 25248,\n\t\"Seizures\": 27072,\n\t\"http://www.quantcast.com/wikihow.com\": 10828,\n\t\"respects\": 10771,\n\t\"consists\": 12067,\n\t\"guessing\": 6293,\n\t\"rictus-like\": 32902,\n\t\"annoyances\": 17646,\n\t\"Rueda\": 1564,\n\t\"crimes\": 19364,\n\t\"administrative\": 20949,\n\t\"ECS\": 22706,\n\t\";\": 194,\n\t\"Larbalestier’s\": 9920,\n\t\"stay-at-home\": 30971,\n\t\"hourly\": 7155,\n\t\"10:57:32\": 25425,\n\t\"pre-screened\": 29319,\n\t\"cussing\": 29960,\n\t\"meaningfully\": 5690,\n\t\"Skies\": 25941,\n\t\"hemispheres\": 31054,\n\t\"bridles\": 30641,\n\t\"quarrels\": 31256,\n\t\"Ponce\": 2058,\n\t\"AP\": 22649,\n\t\"fluted\": 30471,\n\t\"co-founder\": 4532,\n\t\"x54667\": 23147,\n\t\"editor\": 10773,\n\t\"Holden\": 12505,\n\t\"trailers\": 27222,\n\t\"deliberately\": 1240,\n\t\"become\": 2591,\n\t\"session\": 1909,\n\t\"orientation\": 2787,\n\t\"Goal\": 14482,\n\t\"caters\": 17635,\n\t\"kilometers\": 17223,\n\t\"sea\": 2588,\n\t\"helped\": 6720,\n\t\"tongues\": 24278,\n\t\"Decisions\": 24733,\n\t\"Thi\": 26515,\n\t\"Alpharetta\": 28285,\n\t\"Moscow\": 4266,\n\t\"prosecution's\": 19414,\n\t\"dime\": 26021,\n\t\"proposed\": 1193,\n\t\"weird\": 8771,\n\t\"Watchmen\": 4128,\n\t\"obeys\": 6632,\n\t\"Jay\": 7864,\n\t\"3.7\": 25936,\n\t\"Galaxy\": 11322,\n\t\"unbound\": 30211,\n\t\"#argument\": 7657,\n\t\"Freighters\": 16290,\n\t\"bluff\": 19090,\n\t\"decreasing\": 13459,\n\t\"anyway\": 6074,\n\t\"Diatribe\": 6531,\n\t\"generalizations\": 25077,\n\t\"Net\": 10577,\n\t\"Theirs\": 23582,\n\t\"heaven\": 8692,\n\t\"sectarian\": 19301,\n\t\"Helsinki\": 10205,\n\t\"screech\": 31127,\n\t\"Marlow\": 30909,\n\t\"Fund\": 7884,\n\t\"Under\": 2267,\n\t\"mid-shaft\": 2823,\n\t\"restrictive\": 7264,\n\t\"COALITION\": 24648,\n\t\"1504\": 22143,\n\t\"Smoker\": 29100,\n\t\"LINE\": 29261,\n\t\"Line\": 16258,\n\t\"lifeboat\": 26923,\n\t\"COULD\": 28746,\n\t\"Degree\": 19630,\n\t\"Yang's\": 24803,\n\t\"tidal\": 9978,\n\t\"PUT\": 24933,\n\t\"Plonsky\": 2418,\n\t\"pupil\": 4563,\n\t\"recreate\": 20568,\n\t\"discretionary\": 7697,\n\t\"pocket\": 8630,\n\t\"Aquarium\": 29210,\n\t\"ruddy\": 32307,\n\t\"honorary\": 3777,\n\t\"executed\": 14791,\n\t\"+1602275-4958\": 17105,\n\t\"southeastern\": 18508,\n\t\"tilt\": 22716,\n\t\"advertisers\": 10803,\n\t\"08/01/2001\": 21914,\n\t\"sonnets\": 1040,\n\t\"Psalmist's\": 5059,\n\t\"datasheets\": 30076,\n\t\"romance\": 4195,\n\t\"metropolis\": 930,\n\t\"tours\": 16712,\n\t\"Mitch\": 24179,\n\t\"geometrically\": 24978,\n\t\"Don’t\": 7772,\n\t\"modernization\": 25780,\n\t\"strength\": 8719,\n\t\"Molly's\": 32306,\n\t\"ratepayer\": 22420,\n\t\"Points\": 23127,\n\t\"concerted\": 23674,\n\t\"proved\": 19726,\n\t\"march\": 7998,\n\t\"Catarina\": 1651,\n\t\"Space\": 2576,\n\t\"non-fixed\": 10701,\n\t\"Imaginary\": 20138,\n\t\"defeats\": 23065,\n\t\"desires\": 27532,\n\t\"lable\": 20321,\n\t\"ACIA\": 25153,\n\t\"unanimously\": 14400,\n\t\"sustenance\": 15294,\n\t\"bouild\": 26757,\n\t\"Kivu\": 14192,\n\t\"vintage\": 16194,\n\t\"muni\": 23425,\n\t\"'CAUSE\": 11875,\n\t\"crop\": 8070,\n\t\"5.30\": 23129,\n\t\"Welch\": 21544,\n\t\"paragraphs\": 25914,\n\t\"guessed\": 8648,\n\t\"begs\": 20044,\n\t\"walked\": 6165,\n\t\"Vancouver\": 28277,\n\t\"huh\": 1792,\n\t\"grapes\": 16210,\n\t\"romantic\": 3894,\n\t\"Incredible\": 29798,\n\t\"sued\": 23783,\n\t\"leverage\": 1337,\n\t\"saltimboca\": 28817,\n\t\"Movie\": 4099,\n\t\"USI's\": 13273,\n\t\"Lamarque's\": 4041,\n\t\"cathedral\": 17516,\n\t\"waaaaaaaaaaaaay\": 20155,\n\t\"erosion\": 25058,\n\t\"MULES\": 11988,\n\t\"Sort\": 30421,\n\t\"Ah\": 6289,\n\t\"utility\": 680,\n\t\"base\": 1308,\n\t\"pressures\": 1460,\n\t\"shower\": 15740,\n\t\"Mourey\": 5177,\n\t\"faculties\": 11460,\n\t\"Atta's\": 20580,\n\t\"kaoshikii\": 24029,\n\t\"nationalism\": 19140,\n\t\"reigned\": 3527,\n\t\"Gonna\": 6414,\n\t\"3:29\": 18818,\n\t\"11:16:58\": 22892,\n\t\"Elena's\": 18643,\n\t\"polarized\": 2622,\n\t\"Fortunately\": 8176,\n\t\"definitely\": 12945,\n\t\"warrior\": 25980,\n\t\"Ltd.\": 21633,\n\t\"idleness\": 31111,\n\t\"nagging\": 8173,\n\t\"farmers\": 8088,\n\t\"cellular\": 24503,\n\t\"wholeheartedly\": 28823,\n\t\"royalist\": 3950,\n\t\"refusals\": 13206,\n\t\"bees\": 28268,\n\t\"skulls\": 32249,\n\t\"Commander\": 24731,\n\t\"ND\": 8264,\n\t\"specified\": 27376,\n\t\"lithograph\": 21151,\n\t\"Chapel\": 13337,\n\t\"Nutley\": 1578,\n\t\"should\": 1126,\n\t\"economics\": 26775,\n\t\"Amerithrax\": 20753,\n\t\"brave\": 10142,\n\t\"archive\": 9245,\n\t\"Felipe\": 14768,\n\t\"peeling\": 29298,\n\t\"Abramoff\": 25901,\n\t\"Dog\": 9798,\n\t\"Based\": 2111,\n\t\"Castillo\": 15398,\n\t\"AV\": 3049,\n\t\"pleasurable\": 7718,\n\t\"Investors\": 23651,\n\t\"reverse\": 7470,\n\t\"Impacts\": 25123,\n\t\"aromatic\": 16203,\n\t\"outlet\": 27174,\n\t\"Lopez\": 11144,\n\t\"bats\": 4814,\n\t\"tumbledown\": 32189,\n\t\"11/01/01\": 21860,\n\t\"Donations\": 24552,\n\t\"Amid\": 24397,\n\t\"stored\": 3827,\n\t\"flirted\": 27971,\n\t\"bricks\": 30387,\n\t\"locker\": 29857,\n\t\"Ferguson\": 29910,\n\t\"920\": 22250,\n\t\"Farmer\": 28081,\n\t\"Felix\": 17170,\n\t\"HUGE\": 11337,\n\t\"jurisdiction\": 7576,\n\t\"pound\": 25087,\n\t\"vacature\": 7591,\n\t\"alike\": 6211,\n\t\"arrogant\": 17591,\n\t\"actionable\": 19703,\n\t\"3/10/00\": 22571,\n\t\"drank\": 15843,\n\t\"ENRON\": 22309,\n\t\"Taft\": 12036,\n\t\"fl\": 18435,\n\t\"glances\": 31810,\n\t\"bathtub’s\": 9731,\n\t\"pekin\": 27127,\n\t\"jet-black\": 32055,\n\t\"claimants\": 13011,\n\t\"aversion\": 11661,\n\t\"Resting\": 5342,\n\t\"M5S\": 13202,\n\t\"revised\": 21480,\n\t\"theology\": 6539,\n\t\"leakage\": 29270,\n\t\"pragmatics\": 3739,\n\t\"Shipping\": 32540,\n\t\"smorgasbord\": 29541,\n\t\"Lukaku\": 13097,\n\t\"established\": 173,\n\t\"groceries\": 12043,\n\t\"Iraqi's\": 20793,\n\t\"pigeon\": 26593,\n\t\"hamsters\": 26483,\n\t\"sprung\": 31996,\n\t\"festivities\": 27814,\n\t\"illustrates\": 8357,\n\t\"ginger\": 15840,\n\t\"Petunia\": 32025,\n\t\"Hearts\": 20862,\n\t\"bold\": 14079,\n\t\"suffered\": 4654,\n\t\"XVII\": 12702,\n\t\"total\": 2151,\n\t\"Active\": 2653,\n\t\"fantastic\": 6877,\n\t\"herd\": 8792,\n\t\"Jana\": 23451,\n\t\"mixes\": 18438,\n\t\"D.C.\": 3513,\n\t\"Jezebel\": 10574,\n\t\"Film\": 4142,\n\t\"signatory\": 13885,\n\t\"puff\": 26370,\n\t\"unusually\": 17709,\n\t\"flowery\": 18004,\n\t\"Nobel\": 720,\n\t\"leaving\": 2498,\n\t\"Dr.\": 7214,\n\t\"recognizing\": 7446,\n\t\"10:40\": 23866,\n\t\"Landing\": 24768,\n\t\"artist\": 4547,\n\t\"th\": 29849,\n\t\"parks\": 6149,\n\t\"formations\": 32941,\n\t\"squawking\": 17793,\n\t\"tearing\": 6451,\n\t\"collects\": 1625,\n\t\"speck\": 30386,\n\t\"Zurbarán\": 98,\n\t\"These\": 826,\n\t\"irrigated\": 17073,\n\t\"sounds\": 1744,\n\t\"Eureka\": 10340,\n\t\"×\": 15663,\n\t\"1871\": 17033,\n\t\"meets\": 1787,\n\t\"Al\": 4507,\n\t\"amount\": 2456,\n\t\"Kathy\": 6654,\n\t\"Der\": 25735,\n\t\"co$t\": 26747,\n\t\"NSA\": 24332,\n\t\"opinions\": 1311,\n\t\"Snacks\": 29977,\n\t\"straining\": 30418,\n\t\"politisized\": 30683,\n\t\"patronized\": 19124,\n\t\"dill\": 31656,\n\t\"Mysteries\": 4218,\n\t\"applaud\": 14572,\n\t\"flares\": 32599,\n\t\"obtain\": 2293,\n\t\"defaults\": 22047,\n\t\"Shaw's\": 5477,\n\t\"Inspiration\": 12078,\n\t\"Uhhh\": 8829,\n\t\"toying\": 25646,\n\t\"flight\": 9262,\n\t\"EIGHT\": 10091,\n\t\"Nacogdoches\": 14718,\n\t\"demand\": 2127,\n\t\"urban\": 7289,\n\t\"risks\": 17811,\n\t\"Kadai\": 1846,\n\t\"Englishman\": 31595,\n\t\"redeploying\": 27719,\n\t\"SIAM\": 22893,\n\t\"Tagebuch\": 4434,\n\t\"cursor\": 24985,\n\t\"healthcare\": 24513,\n\t\"flee\": 27645,\n\t\"Unfinished\": 30420,\n\t\"illusions\": 20511,\n\t\"stove\": 27305,\n\t\"controlled\": 12106,\n\t\"bobber\": 27857,\n\t\"withered\": 32241,\n\t\"representatives\": 723,\n\t\"depends\": 2078,\n\t\"pitches\": 8042,\n\t\"Fair\": 8232,\n\t\"Malaysia's\": 12169,\n\t\"t3i\": 26388,\n\t\"Honduras\": 15385,\n\t\"Analysis_0712\": 22360,\n\t\"hypothesis\": 1918,\n\t\"tangible\": 19060,\n\t\"busybodies\": 19089,\n\t\"Mathematica\": 3263,\n\t\"coin\": 18338,\n\t\"mining\": 25924,\n\t\"Nevertheless\": 4626,\n\t\"vacuum\": 15064,\n\t\"seperates\": 29030,\n\t\"practicing\": 15902,\n\t\"Row\": 22940,\n\t\"sculpting\": 26406,\n\t\"centre\": 4493,\n\t\"understan-\": 6793,\n\t\"capsule\": 11300,\n\t\"marginal\": 11636,\n\t\"odds\": 7437,\n\t\"Career\": 3392,\n\t\"excuse\": 3214,\n\t\"s\": 2681,\n\t\"tract\": 26806,\n\t\"fireworks\": 16519,\n\t\"Buddhists\": 7245,\n\t\"Ferte\": 30765,\n\t\"retreated\": 8984,\n\t\"giant\": 1326,\n\t\"Agents\": 1200,\n\t\"commonwealths\": 30958,\n\t\"density\": 3326,\n\t\"www.weathereffects.com\": 21571,\n\t\"satin-wood\": 31560,\n\t\"suites\": 29896,\n\t\"brightest\": 32569,\n\t\"Wolens\": 22858,\n\t\"capelin\": 25171,\n\t\"Services.doc\": 23100,\n\t\"starless\": 9992,\n\t\"seeded\": 13298,\n\t\"colony\": 6107,\n\t\"Namath\": 6186,\n\t\"decreased\": 2751,\n\t\"beast\": 17938,\n\t\"DSL\": 26528,\n\t\"Founders\": 24218,\n\t\"trotters\": 28034,\n\t\"appropriately\": 15490,\n\t\"hopeless\": 25290,\n\t\"Mystery\": 17554,\n\t\"President\": 3776,\n\t\"grammarian\": 5022,\n\t\"transcripts\": 22822,\n\t\"67\": 4845,\n\t\"Elevators\": 17910,\n\t\"Benefits\": 24051,\n\t\"extensive\": 301,\n\t\"goalkeeper\": 13132,\n\t\"Koinonia\": 5935,\n\t\"@\": 11299,\n\t\"cabins\": 27236,\n\t\"deserted\": 6639,\n\t\"purposely\": 30022,\n\t\"coconut\": 15921,\n\t\"77415-0027\": 21824,\n\t\"rag\": 31122,\n\t\"malaria\": 31951,\n\t\"Uneasy\": 30865,\n\t\"halal\": 27326,\n\t\"Various\": 12541,\n\t\"Pashtuns\": 19750,\n\t\"Household\": 2112,\n\t\"Switzerland\": 3146,\n\t\"..\": 11278,\n\t\"tank\": 17361,\n\t\"Combined\": 2657,\n\t\"founded\": 10599,\n\t\"FUCKING\": 28732,\n\t\"glaciers\": 15275,\n\t\"Wild\": 11302,\n\t\"Ripple\": 25049,\n\t\"F'ers\": 29936,\n\t\"flopping\": 27589,\n\t\"hissed\": 27689,\n\t\"JAZZ\": 29265,\n\t\"Sadat\": 20815,\n\t\"petrified\": 32440,\n\t\"manicure\": 28290,\n\t\"Dallas\": 10349,\n\t\"interior\": 13014,\n\t\"Filet\": 26346,\n\t\"Wessex\": 28774,\n\t\"oclock\": 11953,\n\t\"vacationed\": 25217,\n\t\"coins\": 3623,\n\t\"Tue.\": 22190,\n\t\"Vajpayee\": 19148,\n\t\"HEAVEN\": 28781,\n\t\"AMAZE\": 28791,\n\t\"Korea's\": 12840,\n\t\"caused\": 2496,\n\t\"Everett\": 21799,\n\t\"Carolina\": 3584,\n\t\"There’d\": 16078,\n\t\"metaethical\": 15142,\n\t\"buffs\": 16343,\n\t\"R\": 2056,\n\t\"actress\": 5184,\n\t\"6871082#\": 21697,\n\t\"Antichrist\": 25626,\n\t\"nationwide\": 13896,\n\t\"Anneal\": 10070,\n\t\"Engels\": 10942,\n\t\"popular\": 3752,\n\t\"greeter\": 29379,\n\t\"non-Muslim\": 12246,\n\t\"Bolivia\": 10247,\n\t\"controversy\": 1414,\n\t\"condemned\": 11809,\n\t\"Greetings\": 22370,\n\t\"Copeland\": 21756,\n\t\"offered\": 3643,\n\t\"southwest\": 22476,\n\t\"SNY\": 11093,\n\t\"easily\": 6290,\n\t\"golfing\": 21291,\n\t\"Manhattan\": 9704,\n\t\"JULY\": 14584,\n\t\"red-eyed\": 31212,\n\t\"STEALING\": 30008,\n\t\"fieldwork\": 3417,\n\t\"eSpeak\": 21542,\n\t\"sobriety\": 30404,\n\t\"germinate\": 17732,\n\t\"composition\": 422,\n\t\"Nissan\": 29052,\n\t\"distraction\": 7698,\n\t\"preparation\": 9012,\n\t\"ADVANTAGE\": 11891,\n\t\"Page\": 23629,\n\t\"Dad\": 6357,\n\t\"earnings\": 7895,\n\t\"aqueducts\": 15346,\n\t\"Gov.\": 18823,\n\t\"armour\": 26009,\n\t\"comes\": 5260,\n\t\"ld2d-#69345-1.DOC\": 22433,\n\t\"agent\": 3708,\n\t\"clothing\": 15331,\n\t\"dads\": 26110,\n\t\"affirmed\": 19266,\n\t\"emotions\": 1587,\n\t\"Jewish\": 5167,\n\t\"Bastien\": 5840,\n\t\"procedures\": 2379,\n\t\"Door\": 29133,\n\t\"0308.doc\": 22251,\n\t\"conjectures\": 11262,\n\t\"hogtied\": 18775,\n\t\"counseling\": 28929,\n\t\"CONV_050815c_03.10\": 1849,\n\t\"54\": 13362,\n\t\"prudent\": 23351,\n\t\"redlined\": 22358,\n\t\"Lodge\": 3637,\n\t\"grasps\": 9522,\n\t\"awkwardness\": 17969,\n\t\"temptation\": 12024,\n\t\"Annesley\": 20925,\n\t\"lengths\": 2802,\n\t\"prudish\": 26551,\n\t\"cough\": 27665,\n\t\"File\": 7646,\n\t\"Dean\": 5736,\n\t\"assistance\": 13895,\n\t\"sentiments\": 8041,\n\t\"1.8\": 23614,\n\t\"protestants\": 27194,\n\t\"beardies\": 26359,\n\t\"addressing\": 14152,\n\t\"She\": 4458,\n\t\"CSAs\": 8238,\n\t\"Parkhill\": 20954,\n\t\"darkest\": 9041,\n\t\"Biography\": 5921,\n\t\"Climate\": 13456,\n\t\"Stone\": 13355,\n\t\"M&M\": 8806,\n\t\"infuse\": 18418,\n\t\"Platter\": 28438,\n\t\"war-paint\": 32628,\n\t\"paradise\": 20670,\n\t\"dumbfounded\": 31273,\n\t\"Sheer\": 8135,\n\t\"supplies\": 10447,\n\t\"let’s\": 14359,\n\t\"twitched\": 9669,\n\t\"0.6\": 2631,\n\t\"rage\": 18960,\n\t\"nudging\": 9022,\n\t\"Itza\": 15392,\n\t\"1746\": 14946,\n\t\"calories\": 8145,\n\t\"motorways\": 17558,\n\t\"patch\": 9065,\n\t\"Dharmadeva\": 24026,\n\t\"While\": 114,\n\t\"cognition\": 1514,\n\t\"We'll\": 6990,\n\t\"weapons\": 10416,\n\t\"optogenetics\": 8363,\n\t\"humility\": 14067,\n\t\"Internal\": 24382,\n\t\"misinterpreted\": 30137,\n\t\"killer\": 3985,\n\t\"smarter\": 27159,\n\t\"spring\": 16014,\n\t\"buildup\": 19612,\n\t\"shadows\": 30247,\n\t\"pressed-down\": 31636,\n\t\"select\": 15214,\n\t\"expelling\": 20556,\n\t\"static\": 26527,\n\t\"unplaced\": 9466,\n\t\"Weathermen\": 18482,\n\t\"Deseret\": 12208,\n\t\"dos\": 29303,\n\t\"Deng\": 3477,\n\t\"enquiries\": 22600,\n\t\"subcontractor's\": 7203,\n\t\"outshone\": 29094,\n\t\"cover\": 2368,\n\t\"limitations\": 1932,\n\t\"Preparedness\": 25859,\n\t\"objectives\": 778,\n\t\"filth\": 10558,\n\t\"cleanest\": 21600,\n\t\"portable\": 21772,\n\t\"calculations\": 30160,\n\t\"deffenitly\": 29012,\n\t\"conclave\": 11965,\n\t\"K-\": 6147,\n\t\"Hagrid\": 32291,\n\t\"Hasina\": 19498,\n\t\"Assistant\": 8532,\n\t\"TGPL\": 21921,\n\t\"storefront\": 29081,\n\t\"Gliding\": 30671,\n\t\"offended\": 6642,\n\t\"libraries\": 30192,\n\t\"1699\": 4265,\n\t\"imperative\": 5672,\n\t\"offworlders\": 10068,\n\t\"Collins\": 5859,\n\t\"physiology\": 14955,\n\t\"scanned\": 2606,\n\t\"novelists\": 13763,\n\t\"imitated\": 32546,\n\t\"confirming\": 13085,\n\t\"1683\": 4354,\n\t\"monarch\": 4538,\n\t\"mousse\": 28818,\n\t\"appalled\": 25197,\n\t\"payable\": 21638,\n\t\"weary\": 31146,\n\t\"NECESSARY\": 21529,\n\t\"cloaca\": 32529,\n\t\"quick\": 5062,\n\t\"implements\": 18359,\n\t\"http://im.yahoo.com/\": 22083,\n\t\"659,000\": 15677,\n\t\"Basse\": 16637,\n\t\"Siddiqui\": 20742,\n\t\"architecturally\": 30908,\n\t\"squire\": 30437,\n\t\"ops\": 8578,\n\t\"opposition\": 5641,\n\t\"absorbed\": 14854,\n\t\"Roman\": 4289,\n\t\"Nazarenes\": 5173,\n\t\"dilute\": 27144,\n\t\"Braden\": 17471,\n\t\"Hickory\": 29883,\n\t\"comparative\": 3026,\n\t\"addicted\": 13531,\n\t\"Networks\": 21124,\n\t\"heartening\": 31431,\n\t\"utilising\": 22624,\n\t\"03:48\": 22401,\n\t\"sails\": 9072,\n\t\"Englishwoman\": 31639,\n\t\"sweating\": 9269,\n\t\"mates\": 27399,\n\t\"lunchboxes\": 17891,\n\t\"counterparties\": 22062,\n\t\"pickle\": 15837,\n\t\"Condominiums\": 28968,\n\t\"Guiness\": 29356,\n\t\"record-player\": 32480,\n\t\"Hawaiian\": 17114,\n\t\"contractors\": 7190,\n\t\"senselessly\": 14143,\n\t\"Vigie\": 16683,\n\t\"Sikong\": 14866,\n\t\"Detect\": 17587,\n\t\"learn\": 5162,\n\t\"file-persistent\": 30055,\n\t\"make-up\": 31347,\n\t\"luminol's\": 18028,\n\t\"cornerstones\": 14504,\n\t\"shelves\": 25855,\n\t\"Cons\": 29172,\n\t\"Zubayda\": 18753,\n\t\"Scheffer\": 10443,\n\t\"ONLY\": 11839,\n\t\"khaki\": 9815,\n\t\"Btwn\": 28238,\n\t\"glinted\": 32739,\n\t\"emitting\": 2105,\n\t\"Welcome\": 9780,\n\t\"AIR\": 28464,\n\t\"buzzer\": 30406,\n\t\"realities\": 8246,\n\t\"implanted\": 8301,\n\t\"Antonioni\": 5497,\n\t\"thrive\": 20431,\n\t\"member's\": 29039,\n\t\"Degenerate\": 20191,\n\t\"princess\": 28415,\n\t\"steaks\": 28608,\n\t\"furnace\": 27293,\n\t\"prelude\": 24566,\n\t\"380\": 23241,\n\t\"Alter\": 16585,\n\t\"pederasty\": 5094,\n\t\"essays\": 30236,\n\t\"withdrew\": 18890,\n\t\"Native\": 17058,\n\t\"Baudelaire\": 20301,\n\t\"SEC\": 26035,\n\t\"NYE\": 29293,\n\t\"Consequently\": 4381,\n\t\"lately\": 9610,\n\t\"silvered\": 32016,\n\t\"McInnis\": 29032,\n\t\"main\": 722,\n\t\"bettas\": 26709,\n\t\"FAR\": 29276,\n\t\"X33098\": 23589,\n\t\"Executives\": 14164,\n\t\"antibiotics\": 7029,\n\t\"angle\": 15728,\n\t\"Against\": 8270,\n\t\"writes\": 6541,\n\t\"smsll\": 11448,\n\t\"hotels\": 15104,\n\t\"mirrored\": 32865,\n\t\"tiling\": 16733,\n\t\"hysteria\": 24072,\n\t\"mac\": 15847,\n\t\"discarded\": 2723,\n\t\"communications\": 7783,\n\t\"Daschle\": 20797,\n\t\"amounted\": 31635,\n\t\"Leite\": 22296,\n\t\"Matilda\": 4208,\n\t\"Nabil\": 13145,\n\t\"segregationists\": 14365,\n\t\"Hino\": 28882,\n\t\"impatiently\": 29581,\n\t\"added\": 4727,\n\t\"sorrowstricken\": 14053,\n\t\"corps\": 18751,\n\t\"canal\": 17061,\n\t\"train-tracks\": 32318,\n\t\"frisked\": 30511,\n\t\"1778\": 3563,\n\t\"often\": 389,\n\t\"reassurance\": 19657,\n\t\"seared\": 28450,\n\t\"propensity\": 15091,\n\t\"Tampa\": 4934,\n\t\"EXTRA\": 26332,\n\t\"signaling\": 19160,\n\t\"FIFA\": 4513,\n\t\"online\": 635,\n\t\"squeeze\": 15598,\n\t\"Chances\": 18271,\n\t\"10/29/2000\": 22384,\n\t\"Agriculture\": 8051,\n\t\"varie$\": 26748,\n\t\"up-river\": 31266,\n\t\"sampling\": 16715,\n\t\"fitfully\": 32753,\n\t\"QE2\": 32559,\n\t\"Throw\": 16117,\n\t\"ostensibly\": 1257,\n\t\"undo\": 7047,\n\t\"Twain\": 10946,\n\t\"Kill\": 20109,\n\t\"Painting\": 3537,\n\t\"crushed\": 9338,\n\t\"Na\": 7027,\n\t\"soundless\": 30455,\n\t\"Maaloul\": 13146,\n\t\"Mexicans\": 14698,\n\t\"Batawi\": 18531,\n\t\"oilfield\": 24569,\n\t\"THEIR\": 28740,\n\t\"Thuy\": 26516,\n\t\"cured\": 24060,\n\t\"sourness\": 18457,\n\t\"Spores\": 20703,\n\t\"Studio\": 11162,\n\t\"ancient\": 3371,\n\t\"Complex\": 8254,\n\t\"funniest\": 13687,\n\t\"4:50\": 29734,\n\t\"Sullivan's\": 20936,\n\t\"pro-India\": 19496,\n\t\"Kopinga\": 16285,\n\t\"preschool\": 1562,\n\t\"Hajj\": 4522,\n\t\"Spider\": 12604,\n\t\"aiding\": 25891,\n\t\"two-hours-and-a-bit\": 31580,\n\t\"Skirts\": 32370,\n\t\"chattels\": 7611,\n\t\"lik\": 26362,\n\t\"chase\": 19593,\n\t\"deduct\": 7154,\n\t\"slim\": 32648,\n\t\"Left\": 4778,\n\t\"225\": 17263,\n\t\"apologize\": 20303,\n\t\"Legend\": 32582,\n\t\"hospitalize\": 6765,\n\t\"feild\": 22926,\n\t\"rent\": 5218,\n\t\"adverb\": 1146,\n\t\"Cans\": 7434,\n\t\"mediated\": 10894,\n\t\"brats\": 23913,\n\t\"intercom\": 30407,\n\t\"augmented\": 8385,\n\t\"spending\": 5435,\n\t\"Hampshire\": 25219,\n\t\"partnered\": 5880,\n\t\"question\": 1594,\n\t\"tuck\": 16142,\n\t\"Entreat\": 18188,\n\t\"prediction\": 6025,\n\t\"paradigm\": 20115,\n\t\"trot\": 25239,\n\t\"overcast\": 15972,\n\t\"?\": 38,\n\t\"sa-\": 6524,\n\t\"semantics\": 3663,\n\t\"weeds\": 11955,\n\t\"rom\": 26173,\n\t\"mujahidin\": 18768,\n\t\"Understand\": 15541,\n\t\"famed\": 4696,\n\t\"PDF\": 13758,\n\t\"clearing\": 28032,\n\t\"ceremonious\": 7773,\n\t\"injuries\": 12880,\n\t\"Dictatorship\": 24738,\n\t\"gaunt\": 32900,\n\t\"spoken\": 1762,\n\t\"Gleason\": 11996,\n\t\"commonest\": 30822,\n\t\"league\": 4890,\n\t\"rap\": 2960,\n\t\"feeding\": 8148,\n\t\"posited\": 1916,\n\t\"Corey's\": 22090,\n\t\"Shreveport\": 21196,\n\t\"simul\": 5078,\n\t\"banana\": 5278,\n\t\"'LL\": 28923,\n\t\"sold\": 5891,\n\t\"DeVries\": 21299,\n\t\"featureless\": 31087,\n\t\"theropods\": 2808,\n\t\"intriguing\": 10609,\n\t\"insult\": 17653,\n\t\"Learner\": 15204,\n\t\"spice\": 17708,\n\t\"doctor\": 3307,\n\t\"disappointed\": 6640,\n\t\"monks\": 5963,\n\t\"dysfunctional\": 20367,\n\t\"assets\": 19998,\n\t\"envelope\": 24938,\n\t\"240,000\": 12901,\n\t\"Benefit\": 24525,\n\t\"mini-MMPI\": 10729,\n\t\"ledger\": 13940,\n\t\"Anse\": 16681,\n\t\"operating\": 2135,\n\t\"does\": 231,\n\t\"the\": 70,\n\t\"Bones\": 26033,\n\t\"grimaced\": 32927,\n\t\"mark\": 1892,\n\t\"participation\": 651,\n\t\"welcome\": 7558,\n\t\"TNA\": 18980,\n\t\"800/711-8000\": 23080,\n\t\"generalize\": 17598,\n\t\"sheisters\": 29415,\n\t\"CI.taiwan.gov.tw\": 13963,\n\t\"lopez\": 25502,\n\t\"Englishwoman's\": 31650,\n\t\"2.0\": 8265,\n\t\"77030-2707\": 23627,\n\t\"Seattle\": 22954,\n\t\"Rosencreutz\": 10088,\n\t\"eerie\": 19251,\n\t\"treasures\": 16349,\n\t\"postpone\": 21190,\n\t\"973-3634\": 23307,\n\t\"demands\": 14747,\n\t\"wink\": 14817,\n\t\"Fannin\": 23626,\n\t\"tires\": 28224,\n\t\"inherently\": 17632,\n\t\"fliers\": 24811,\n\t\"renting\": 13712,\n\t\"CITY\": 29944,\n\t\"ant\": 10211,\n\t\"Dominion\": 21470,\n\t\"King\": 3523,\n\t\"colonists\": 31023,\n\t\"Which\": 39,\n\t\"elementary\": 1570,\n\t\"Detection\": 946,\n\t\"Tunisia\": 13064,\n\t\"Chambers\": 2493,\n\t\"heap\": 9180,\n\t\"hints\": 11816,\n\t\"1555\": 25478,\n\t\"flooring\": 26860,\n\t\"PAT\": 28085,\n\t\"Dries\": 13100,\n\t\"serrated\": 8685,\n\t\"Jazeera\": 18605,\n\t\"pompously\": 31252,\n\t\"08:58\": 22177,\n\t\"rural\": 15481,\n\t\"STATEMENTS\": 14586,\n\t\"HOWEVER\": 27077,\n\t\"localized\": 25131,\n\t\"announces\": 14803,\n\t\"calling\": 5448,\n\t\"performed\": 1122,\n\t\"touches\": 8324,\n\t\"convicts\": 24272,\n\t\"dress\": 9122,\n\t\"mater\": 5345,\n\t\"overnight\": 17097,\n\t\"naval\": 19554,\n\t\"Puttino\": 25471,\n\t\"submits\": 9524,\n\t\"interjections\": 1791,\n\t\"thanx\": 26905,\n\t\"Kingerski\": 23330,\n\t\"wedge\": 32414,\n\t\"dizzy\": 32367,\n\t\"anticipating\": 10632,\n\t\"liq\": 22325,\n\t\"Loose\": 20021,\n\t\"x365\": 20982,\n\t\"bloodletting\": 15313,\n\t\"did\": 1998,\n\t\"Zealand's\": 12655,\n\t\"preached\": 5933,\n\t\"thir\": 7083,\n\t\"Point\": 4106,\n\t\"immense\": 7971,\n\t\"timid\": 14380,\n\t\"09/16/99\": 23187,\n\t\"redwings\": 25188,\n\t\"UNTRUE\": 29064,\n\t\"sprites\": 9778,\n\t\"2.9\": 5272,\n\t\"sodden\": 9854,\n\t\"Luján\": 1013,\n\t\"se\": 12037,\n\t\"Russia's\": 24579,\n\t\"operas\": 20455,\n\t\"nature\": 1794,\n\t\"pics\": 27129,\n\t\"Wunderbar\": 28947,\n\t\"Brewery\": 29344,\n\t\"individual's\": 12979,\n\t\"Minnesota\": 8531,\n\t\"buttered\": 27341,\n\t\"exchanging\": 31696,\n\t\"petty\": 11777,\n\t\"dutifully\": 8856,\n\t\"co-stars\": 5857,\n\t\"suspect\": 10560,\n\t\"Birmingham\": 4250,\n\t\"clean\": 6375,\n\t\"travel\": 8568,\n\t\"loosen\": 17666,\n\t\"Spier\": 16245,\n\t\"Beards\": 27145,\n\t\"WINDOWS\": 11859,\n\t\"IPS\": 19010,\n\t\"hairpin\": 32147,\n\t\"clothes-careless\": 32498,\n\t\"methodology\": 2012,\n\t\"manifests\": 14864,\n\t\"replies\": 22659,\n\t\"exists\": 11151,\n\t\"ideals\": 14015,\n\t\"Hm-m\": 6491,\n\t\"suitable\": 10666,\n\t\"convincing\": 12316,\n\t\"Winter's\": 23701,\n\t\"marketers\": 22422,\n\t\"Flexibility\": 25250,\n\t\"dispatch\": 20450,\n\t\"vengeance\": 24890,\n\t\"re-election\": 26100,\n\t\"controllers\": 19896,\n\t\"Broome\": 24955,\n\t\"curtains\": 28900,\n\t\"thwarted\": 14195,\n\t\"Lina\": 16112,\n\t\"bombers\": 18483,\n\t\"Wednesday's\": 19870,\n\t\"utilities'\": 23707,\n\t\"Hawk\": 25746,\n\t\"condos\": 28275,\n\t\"tentative\": 23931,\n\t\"electronically\": 2605,\n\t\"canada\": 26738,\n\t\"Meghalaya\": 19626,\n\t\"lifetimes\": 12301,\n\t\"offices\": 4032,\n\t\"Kline\": 21159,\n\t\"Moroz\": 8673,\n\t\"aged\": 1652,\n\t\"n’t\": 4586,\n\t\"undernourishment\": 13470,\n\t\"MYSTICS\": 22949,\n\t\"Englewood\": 16525,\n\t\"southeast\": 5156,\n\t\"erratic\": 19775,\n\t\"winger\": 20888,\n\t\"sway\": 8168,\n\t\"shallows\": 9499,\n\t\"gloomy\": 15744,\n\t\"Filtering\": 30145,\n\t\"About\": 2120,\n\t\"workable\": 7226,\n\t\"reassigns\": 20036,\n\t\"Copy\": 8674,\n\t\"Radio\": 2659,\n\t\"ample\": 17668,\n\t\"teenagers\": 12060,\n\t\"spirit\": 8703,\n\t\"Metals\": 22575,\n\t\"Yesterday\": 12197,\n\t\"ending\": 14034,\n\t\"dart\": 8919,\n\t\"Employees\": 28243,\n\t\"consistent\": 2735,\n\t\"Andre\": 20903,\n\t\"carriers\": 25878,\n\t\"king\": 10168,\n\t\"30th\": 11784,\n\t\"off\": 626,\n\t\"fast\": 6807,\n\t\"Sa-\": 6440,\n\t\"Guruswamy\": 7215,\n\t\"surpassed\": 29392,\n\t\"Taco\": 29766,\n\t\"2011\": 267,\n\t\"child\": 1274,\n\t\"Call\": 20997,\n\t\"Remarks\": 14579,\n\t\"territory\": 12105,\n\t\"femoral\": 2749,\n\t\"suits\": 15215,\n\t\"Fri\": 16606,\n\t\"YUMMY\": 28767,\n\t\"courtroom\": 7564,\n\t\"distance\": 9623,\n\t\"tow\": 21835,\n\t\"Smartwolves\": 20335,\n\t\"Deb's\": 21449,\n\t\"Witchcraft\": 32036,\n\t\"Walls\": 24408,\n\t\"milk\": 6250,\n\t\"showed\": 2768,\n\t\"needed\": 1965,\n\t\"innermost\": 24044,\n\t\"Edwin\": 19421,\n\t\"attest\": 30001,\n\t\"expenses\": 11688,\n\t\"Baby\": 6827,\n\t\"componential\": 5635,\n\t\"ivy\": 16080,\n\t\"triplets\": 22269,\n\t\"dishes\": 9760,\n\t\"Potter\": 3001,\n\t\"audiobooks\": 10919,\n\t\"prevalence\": 10554,\n\t\"proficiency\": 19237,\n\t\"Scottish\": 4269,\n\t\"non-Hodgkin\": 24545,\n\t\"teachings\": 4986,\n\t\"Bacon\": 5283,\n\t\"CASH\": 24979,\n\t\"troublesome\": 25781,\n\t\"nephew\": 3151,\n\t\"Changpei\": 3428,\n\t\"Beginning\": 29382,\n\t\"trimmers\": 29222,\n\t\"Thanks\": 6480,\n\t\"keystone\": 25045,\n\t\"foolish\": 9156,\n\t\"totaling\": 25830,\n\t\"Cho\": 27561,\n\t\"boasts\": 16337,\n\t\"Jen\": 13800,\n\t\"Wispy\": 8913,\n\t\"Bienvenue\": 26606,\n\t\"quite\": 1750,\n\t\"12,000\": 12964,\n\t\"alt\": 7683,\n\t\"however\": 409,\n\t\"Pomodoro\": 15864,\n\t\"Salafi\": 18946,\n\t\"harvest\": 8122,\n\t\"Ra-Ra\": 32661,\n\t\"debtors\": 22583,\n\t\"Bissen\": 7538,\n\t\"Consistantly\": 28638,\n\t\"Convert\": 30063,\n\t\"exception\": 1755,\n\t\"restrict\": 7363,\n\t\"dupes\": 3936,\n\t\"got\": 4650,\n\t\"court\": 3532,\n\t\"Jito\": 6782,\n\t\"it's\": 6100,\n\t\"#advice\": 7662,\n\t\"assignment\": 22912,\n\t\"You'll\": 10955,\n\t\"faithfully\": 22110,\n\t\"disputed\": 6534,\n\t\"sealed\": 24940,\n\t\"Smartwolf\": 20175,\n\t\"Calvin\": 6610,\n\t\"resonates\": 14544,\n\t\"carport\": 7387,\n\t\"Operational\": 23619,\n\t\"UPS\": 11761,\n\t\"documents\": 553,\n\t\"Sept.\": 19128,\n\t\"Privet\": 32022,\n\t\"solving\": 1619,\n\t\"shifting\": 6022,\n\t\"nutritional\": 8193,\n\t\"privileged\": 14535,\n\t\"picky\": 6489,\n\t\"groped\": 27956,\n\t\"hears\": 29206,\n\t\"aggression\": 10398,\n\t\"guaranty\": 22292,\n\t\"carbons\": 11406,\n\t\"stooped\": 30361,\n\t\"Padalecki\": 5696,\n\t\"roared\": 32161,\n\t\"Offensive\": 12582,\n\t\"determining\": 341,\n\t\"Channel\": 5742,\n\t\"NET\": 21474,\n\t\"Jolla\": 28865,\n\t\"Greenwich\": 30947,\n\t\"combined\": 11623,\n\t\"Joe\": 6185,\n\t\"end\": 1114,\n\t\"light-inflected\": 32759,\n\t\"unpredictable\": 25323,\n\t\"provocations\": 18795,\n\t\"BURGER\": 28572,\n\t\"Ranjit\": 18990,\n\t\"allot\": 26444,\n\t\"recommend\": 10581,\n\t\"Voivodship\": 16861,\n\t\"Musk\": 8338,\n\t\"clumps\": 20702,\n\t\"Auguste\": 3872,\n\t\"Photographs\": 13303,\n\t\"CHILD\": 29145,\n\t\"conditional\": 30109,\n\t\"Jihad\": 18487,\n\t\"endlessly\": 14995,\n\t\"http://www.mikegigi.com/firehole.htm\": 27318,\n\t\"Vitas\": 13368,\n\t\"establishments\": 17376,\n\t\"broom\": 18289,\n\t\"traffic\": 11150,\n\t\"mattered\": 29280,\n\t\"inseparable\": 20172,\n\t\"horrendous\": 28683,\n\t\"spheres\": 9316,\n\t\"Guantanamo's\": 26081,\n\t\"Teruya\": 7543,\n\t\"parcel\": 11763,\n\t\"Numbered\": 17477,\n\t\"concerned\": 5268,\n\t\"nite\": 11725,\n\t\"allies\": 14614,\n\t\"salty\": 15845,\n\t\"Prove\": 27346,\n\t\"Coventry\": 26127,\n\t\"Ashton\": 16030,\n\t\"36\": 12852,\n\t\"normative\": 15200,\n\t\"MURPH\": 19843,\n\t\"schoolrooms\": 30751,\n\t\"defines\": 8432,\n\t\"acres\": 17070,\n\t\"Castling\": 25479,\n\t\"fluent\": 18102,\n\t\"areas\": 2324,\n\t\"3,200\": 25766,\n\t\"reception\": 21788,\n\t\"letters\": 3892,\n\t\"accelerator\": 11394,\n\t\"intimacy\": 25405,\n\t\"Metro\": 12529,\n\t\"familiar\": 3051,\n\t\"33\": 2724,\n\t\"chutes\": 18189,\n\t\"reconsider\": 19753,\n\t\"Karate\": 7094,\n\t\"Daniel's\": 3169,\n\t\"succeeding\": 14065,\n\t\"pilot's\": 30810,\n\t\"Thu\": 24865,\n\t\"fatally\": 18209,\n\t\"Thursday\": 5231,\n\t\"Outdated\": 29013,\n\t\"lolled\": 32097,\n\t\"deadbolt\": 7389,\n\t\"decouple\": 2706,\n\t\"advance\": 9291,\n\t\"ChatGPT\": 13692,\n\t\"chilliness\": 32681,\n\t\"steam\": 6207,\n\t\"[...]\": 13467,\n\t\"shaved\": 30241,\n\t\"Meier\": 22382,\n\t\"involved\": 1322,\n\t\"await\": 14020,\n\t\"merits\": 3768,\n\t\"Roll\": 16402,\n\t\"loafing\": 31047,\n\t\"pose\": 12608,\n\t\"fax\": 16674,\n\t\"Mod\": 26164,\n\t\"disinfectant\": 32454,\n\t\"season\": 2949,\n\t\"financing\": 11627,\n\t\"credibility\": 15283,\n\t\"Querelle\": 5515,\n\t\"M300\": 21776,\n\t\"streak\": 19783,\n\t\"modulate\": 21353,\n\t\"Honestly\": 27795,\n\t\"arranged\": 3249,\n\t\"Buckley\": 5418,\n\t\"namely\": 326,\n\t\"attorneys\": 21514,\n\t\"arnt\": 26364,\n\t\"Wood's\": 23341,\n\t\"smile\": 26402,\n\t\"hotmail\": 24168,\n\t\"location\": 2328,\n\t\"2012\": 1567,\n\t\"aloe\": 15948,\n\t\"parties'\": 23824,\n\t\"legally\": 8426,\n\t\"students\": 1472,\n\t\"addictive\": 19774,\n\t\"+4588304520\": 17304,\n\t\"69,000\": 15688,\n\t\"worthy\": 14174,\n\t\"three-legged\": 30962,\n\t\"Leave\": 7757,\n\t\"greet\": 24256,\n\t\"NEWS\": 24982,\n\t\"unlimited\": 16900,\n\t\"Code\": 7227,\n\t\"breyers\": 26821,\n\t\"ashes\": 11750,\n\t\"http://www.nea.fr/html/rp/chernobyl/conclusions5.html\": 18710,\n\t\"shivered\": 10031,\n\t\"polite\": 2006,\n\t\"centralize\": 21130,\n\t\"approx\": 17853,\n\t\"rouge\": 9138,\n\t\"slow\": 1485,\n\t\"magician\": 10320,\n\t\"1.75\": 18422,\n\t\"hall\": 9721,\n\t\"281-435-0295\": 20986,\n\t\"Cap\": 21501,\n\t\"As\": 365,\n\t\"abnormality\": 15666,\n\t\"pointed\": 3234,\n\t\"killing\": 11238,\n\t\"plagues\": 2485,\n\t\"denial\": 12745,\n\t\"Lebanese\": 18891,\n\t\"dg\": 23099,\n\t\"crucial\": 430,\n\t\"decisions\": 895,\n\t\"anti-ship\": 25783,\n\t\"Trial\": 5502,\n\t\"spoke\": 3369,\n\t\"middle\": 4676,\n\t\"Salt\": 16144,\n\t\"rubbed\": 16026,\n\t\"VisaCuba\": 16465,\n\t\"adopts\": 820,\n\t\"theatre's\": 5460,\n\t\"Levis\": 21257,\n\t\"Gaming\": 24251,\n\t\"ULGG\": 24258,\n\t\"proposes\": 25481,\n\t\"than\": 1174,\n\t\"Mohamed\": 12189,\n\t\"precautions\": 27302,\n\t\"fighting\": 5792,\n\t\"Sancho\": 25518,\n\t\"primitive\": 11315,\n\t\"playstation\": 26795,\n\t\"intertexts\": 2987,\n\t\"Nightmare\": 29866,\n\t\"started\": 3818,\n\t\"dwarf\": 15596,\n\t\"Leeds\": 17570,\n\t\"Gentle's\": 21311,\n\t\"do\": 32,\n\t\"tourists\": 9808,\n\t\"Extensible\": 30098,\n\t\"impress\": 19865,\n\t\"Proposal\": 21033,\n\t\"Moving\": 18020,\n\t\"download\": 10972,\n\t\"Robbi\": 22214,\n\t\"Dumbest\": 29935,\n\t\"profiles\": 10738,\n\t\"insecurities\": 8743,\n\t\"headlines\": 11116,\n\t\"Jaime\": 21871,\n\t\"drink\": 6805,\n\t\"percent\": 2122,\n\t\"Mweta's\": 31583,\n\t\"extinctions\": 25132,\n\t\"HELP\": 26114,\n\t\"insides\": 18431,\n\t\"Fereder\": 18078,\n\t\"spreadsheet-like\": 30124,\n\t\"1535\": 25395,\n\t\"Sen.\": 23667,\n\t\"Tulsa\": 17401,\n\t\"SPRDOPT\": 22693,\n\t\"Gallery\": 13320,\n\t\"enchladas\": 28527,\n\t\"figurehead\": 31939,\n\t\"Wishing\": 26702,\n\t\"men's\": 31970,\n\t\"job-with-prospects\": 32576,\n\t\"rapids\": 31164,\n\t\"occupying\": 7578,\n\t\"toga\": 31005,\n\t\"record\": 523,\n\t\"Motive\": 20575,\n\t\"countertop\": 29749,\n\t\"Ay\": 25524,\n\t\"diving\": 8687,\n\t\"Grimy\": 29422,\n\t\"Salazar\": 27352,\n\t\"climaxed\": 8926,\n\t\"craving\": 29514,\n\t\"taxied\": 9359,\n\t\"radical\": 18863,\n\t\"bureau\": 29752,\n\t\"broadcasters\": 10895,\n\t\"Cannistaro\": 19397,\n\t\"vehicle\": 5392,\n\t\"contexts\": 10875,\n\t\"treasurer\": 13313,\n\t\"pacify\": 27704,\n\t\"comforted\": 30369,\n\t\"11/09/2000\": 21374,\n\t\"darkening\": 30440,\n\t\"scared\": 6379,\n\t\"won’t\": 9520,\n\t\"Planet\": 24994,\n\t\"FAST\": 28077,\n\t\"flavor(s)\": 18433,\n\t\"Hindu\": 7220,\n\t\"apologies\": 29601,\n\t\"mathematicians\": 3112,\n\t\"MTV's\": 5806,\n\t\"seizures\": 9622,\n\t\"Columbine\": 20110,\n\t\"RP\": 26293,\n\t\"crumbles\": 30498,\n\t\"coffins\": 26000,\n\t\"north\": 11468,\n\t\"Benner\": 15134,\n\t\"04:11\": 21708,\n\t\"reimbursed\": 24977,\n\t\"Laurel\": 21631,\n\t\"ruining\": 27450,\n\t\"Heathrow\": 30519,\n\t\"horse-faced\": 32051,\n\t\"wizard\": 32035,\n\t\"zipped\": 21874,\n\t\"樋口\": 4599,\n\t\"Mumbai\": 19171,\n\t\"riders\": 17514,\n\t\"✉\": 17261,\n\t\"314\": 5906,\n\t\"10:00\": 16182,\n\t\"undergraduate\": 23363,\n\t\"succulent\": 30002,\n\t\"exercise\": 1618,\n\t\"arsenal\": 14667,\n\t\"Friscos\": 26558,\n\t\"WHITE\": 27622,\n\t\"numero\": 24820,\n\t\"frozen\": 8011,\n\t\"Stove\": 18365,\n\t\"Used\": 26377,\n\t\"depressed\": 26277,\n\t\"annexed\": 18900,\n\t\"outlining\": 3993,\n\t\"dysfunction\": 14289,\n\t\"realists\": 15155,\n\t\"hyperbolic\": 29985,\n\t\"ironic\": 11030,\n\t\"Tiger's\": 23231,\n\t\"returned\": 3215,\n\t\"useability\": 22592,\n\t\"Spring\": 20596,\n\t\"MEH-risk\": 21946,\n\t\"Strathmann\": 23838,\n\t\"bravely\": 24305,\n\t\"muscles\": 10646,\n\t\"Animated\": 12554,\n\t\"forger\": 25609,\n\t\"MXN\": 16454,\n\t\"NICE\": 28788,\n\t\"unreal\": 31293,\n\t\"bow-ties\": 32118,\n\t\"renowned\": 16418,\n\t\"Cervantes\": 30443,\n\t\"smithy\": 32413,\n\t\"Rs\": 27400,\n\t\"etcetera\": 11196,\n\t\"blacklined\": 21619,\n\t\"Seven\": 5366,\n\t\"flesh\": 9467,\n\t\"Thurs.\": 11717,\n\t\"range\": 1310,\n\t\"wildland\": 25075,\n\t\"probabilities\": 30388,\n\t\"anywhere\": 6406,\n\t\"aided\": 17396,\n\t\"Tropez\": 22187,\n\t\"polish\": 9741,\n\t\"artworks\": 42,\n\t\"risked\": 19771,\n\t\"Get\": 6492,\n\t\"erupts\": 14802,\n\t\"detachment\": 32697,\n\t\"1777\": 3551,\n\t\"nags\": 30640,\n\t\"tellers\": 31042,\n\t\"Previously\": 3480,\n\t\"Equivalence\": 5632,\n\t\"Friar\": 25678,\n\t\"Saltford\": 28926,\n\t\"slamming\": 30458,\n\t\"assessed\": 1234,\n\t\"Kwok\": 12396,\n\t\"brokerage\": 22285,\n\t\"benefactor\": 4399,\n\t\"raiding\": 11968,\n\t\"aspirations\": 12134,\n\t\"authored\": 20196,\n\t\"balancing\": 7425,\n\t\"Gakuru\": 14474,\n\t\"4.319\": 24477,\n\t\"grabbing\": 8846,\n\t\"CW\": 5801,\n\t\"quickening\": 30380,\n\t\"growled\": 32303,\n\t\"blak\": 26618,\n\t\"dazed\": 32385,\n\t\"snatches\": 18319,\n\t\"Nicklaus\": 13371,\n\t\"stained\": 10645,\n\t\"H2O-esque\": 16076,\n\t\"assessing\": 1423,\n\t\"Alvarado\": 2232,\n\t\"competing\": 8416,\n\t\"dumb\": 11818,\n\t\"WAY\": 29398,\n\t\"requiring\": 22621,\n\t\"housewife\": 14370,\n\t\"fritters\": 28816,\n\t\"lie\": 7676,\n\t\"Nedwick\": 1962,\n\t\"podcast\": 5303,\n\t\"hesitations\": 28690,\n\t\"1480\": 5082,\n\t\"60\": 2945,\n\t\"KPA\": 12854,\n\t\"didnt\": 27599,\n\t\"cuddly\": 26817,\n\t\"inquires\": 28239,\n\t\"mail\": 8502,\n\t\"character\": 3867,\n\t\"literally\": 4701,\n\t\"Camps\": 16352,\n\t\"demotion\": 5974,\n\t\"IMPORTANT\": 24926,\n\t\"handicap\": 27643,\n\t\"2:300\": 21570,\n\t\"translation\": 3241,\n\t\"anti-Indian\": 19615,\n\t\"defective\": 26008,\n\t\"songs\": 22088,\n\t\"FLDS\": 19988,\n\t\"Dwarf\": 26414,\n\t\"modify\": 13245,\n\t\"ship\": 9081,\n\t\"Athena\": 13518,\n\t\"impacts\": 8143,\n\t\"!!!?\": 26115,\n\t\"Infernale\": 5476,\n\t\"Mérida\": 16954,\n\t\"28/10/2004\": 19181,\n\t\"Kuei\": 3430,\n\t\"devote\": 5135,\n\t\"Demis\": 32933,\n\t\"evictees\": 29743,\n\t\"status\": 7269,\n\t\"remodeled\": 29253,\n\t\"equinox\": 9765,\n\t\"undersung\": 8044,\n\t\"5,000\": 7916,\n\t\"intellect\": 24712,\n\t\"'RE\": 11883,\n\t\"2000s\": 5701,\n\t\"vastly\": 24728,\n\t\"numerical\": 22889,\n\t\"shouted\": 9664,\n\t\"patches\": 15703,\n\t\"Baathists\": 18489,\n\t\"connoisseur\": 29020,\n\t\"CPA\": 29869,\n\t\"Homeopath\": 23975,\n\t\"Professors\": 22668,\n\t\"funded\": 7194,\n\t\"hilltops\": 17212,\n\t\"4.7\": 25991,\n\t\"Nicki\": 23445,\n\t\"intrusion\": 24559,\n\t\"flatter\": 31028,\n\t\"Stella\": 32368,\n\t\"visually\": 75,\n\t\"Cox's\": 19602,\n\t\"26.1\": 7326,\n\t\"ALONG\": 21527,\n\t\"disclosure\": 22126,\n\t\"secession\": 19081,\n\t\"uhm\": 15856,\n\t\"hospitalized\": 27618,\n\t\"nonprofit\": 7483,\n\t\"energy-intensive\": 31434,\n\t\"13011\": 20267,\n\t\"Dale\": 5546,\n\t\"SCE\": 23724,\n\t\"urine\": 26572,\n\t\"creatively\": 7689,\n\t\"Bad\": 13695,\n\t\"foie\": 29489,\n\t\"undersigned\": 11677,\n\t\"Amy\": 7313,\n\t\"bronchitis\": 6738,\n\t\"deadbolted\": 7406,\n\t\"springs\": 16062,\n\t\"NPR's\": 19812,\n\t\"starred\": 4132,\n\t\"cross-examination\": 19407,\n\t\"consider\": 1967,\n\t\"7484\": 20928,\n\t\"Travel\": 16412,\n\t\"approximation\": 2673,\n\t\"cosmopolitan\": 4988,\n\t\"window\": 7165,\n\t\"Arrangements\": 29091,\n\t\"Hibbs\": 12032,\n\t\"Saleh\": 19652,\n\t\"Discovery\": 4196,\n\t\"3-5297\": 23793,\n\t\"TWO\": 24965,\n\t\"Seas\": 27492,\n\t\"Motors\": 16307,\n\t\"crossings\": 13002,\n\t\"non-personal\": 16464,\n\t\"mei\": 14865,\n\t\"taught\": 3409,\n\t\"refinement\": 2536,\n\t\"smiles\": 8795,\n\t\"perception\": 61,\n\t\"poked\": 9738,\n\t\"THAT\": 11906,\n\t\"12:03\": 22969,\n\t\"tai\": 12392,\n\t\"mandatory\": 6363,\n\t\"Creel\": 24437,\n\t\"canan\": 26394,\n\t\"stratagems\": 30351,\n\t\"observing\": 2626,\n\t\"Britain\": 17529,\n\t\"Argentina’s\": 923,\n\t\"comm-\": 6883,\n\t\"grove\": 31233,\n\t\"leash\": 8315,\n\t\"tendrils\": 8911,\n\t\"bombarding\": 12722,\n\t\"Queen's\": 30942,\n\t\"Steffes'\": 22823,\n\t\"huddled\": 32637,\n\t\"hurled\": 24429,\n\t\"6/4/11\": 29041,\n\t\"populist\": 18951,\n\t\"Sages\": 30612,\n\t\"Whoever\": 14662,\n\t\"artesian\": 11948,\n\t\"Finkelstein\": 13364,\n\t\"heaven’s\": 8691,\n\t\"mosaic\": 8641,\n\t\"ey\": 11978,\n\t\"Stationery\": 29424,\n\t\"erroneous\": 2332,\n\t\"themes\": 135,\n\t\"1963\": 3694,\n\t\"momentum\": 7747,\n\t\"banging\": 20327,\n\t\"Acriflaven\": 27900,\n\t\"moderates\": 19734,\n\t\"vibe\": 13590,\n\t\"alot\": 27586,\n\t\"fountain\": 10178,\n\t\"UCC\": 23497,\n\t\"retailers\": 16619,\n\t\"max\": 15695,\n\t\"crouched\": 31234,\n\t\"presses\": 30615,\n\t\"Singh\": 19167,\n\t\"angeles\": 19469,\n\t\"officer's\": 21211,\n\t\"Arlington\": 12229,\n\t\"muster\": 13756,\n\t\"Heard\": 22290,\n\t\"regenerate\": 25322,\n\t\"Playhouse\": 16417,\n\t\"principally\": 25741,\n\t\"clashes\": 19053,\n\t\"implies\": 10598,\n\t\"pit\": 26141,\n\t\"Poland\": 4279,\n\t\"According\": 3727,\n\t\"she’s\": 8809,\n\t\"determination\": 2705,\n\t\"monster\": 30424,\n\t\"Abba\": 5908,\n\t\"financials\": 21110,\n\t\"Ghanaians\": 31863,\n\t\"confidante\": 20657,\n\t\"floated\": 8982,\n\t\"exterminated\": 25006,\n\t\"Pond\": 312,\n\t\"Rye\": 9332,\n\t\"border\": 4975,\n\t\"2254\": 14214,\n\t\"AKA\": 15776,\n\t\"retrofitting\": 20716,\n\t\"thanked\": 21344,\n\t\"Memorial\": 12895,\n\t\"Ro-\": 7173,\n\t\"04:37\": 22760,\n\t\"overlap\": 2352,\n\t\"countdown\": 5325,\n\t\"shaken\": 10572,\n\t\"cakes\": 17829,\n\t\"7th\": 15871,\n\t\"grrrrrrrreeeaaat\": 29548,\n\t\"Choice\": 4096,\n\t\"Desperation\": 20421,\n\t\"pancake\": 26485,\n\t\"channel\": 5185,\n\t\"MK\": 22749,\n\t\"fancy\": 16004,\n\t\"aims\": 1889,\n\t\"o'clock\": 4027,\n\t\"Nature\": 13455,\n\t\"}\": 25373,\n\t\"witch\": 6821,\n\t\"disclosures\": 7325,\n\t\"tremendous\": 10796,\n\t\"honeymoon\": 21747,\n\t\"percell@swbell.net\": 22891,\n\t\"Tiffany\": 7315,\n\t\"ravine\": 31225,\n\t\"Moi\": 6705,\n\t\"Forever\": 6993,\n\t\"bypassing\": 20061,\n\t\"trophy\": 17654,\n\t\"potent\": 20389,\n\t\"maritime\": 12834,\n\t\"12.48\": 22276,\n\t\"humble\": 4746,\n\t\"PAQ\": 24152,\n\t\"snorkeling\": 26771,\n\t\"Tokyo\": 4745,\n\t\"Durham\": 25,\n\t\"drunk\": 8889,\n\t\"remarks\": 9877,\n\t\"racism\": 14139,\n\t\"ASAP\": 21019,\n\t\"1600\": 632,\n\t\"Willett\": 9702,\n\t\"medalled\": 31830,\n\t\"Solomita\": 5306,\n\t\"incorporated\": 16916,\n\t\"Grandmother\": 32381,\n\t\"Ozymandias\": 4124,\n\t\"Luan\": 23118,\n\t\"witting\": 1231,\n\t\"current\": 1057,\n\t\"http://www.nea.fr/html/rp/chernobyl/c05.html\": 18712,\n\t\"lands\": 2357,\n\t\"----------------------------------------------------------------------\": 25341,\n\t\"custom\": 26160,\n\t\"Fire\": 26683,\n\t\"Trio's\": 29295,\n\t\"it’ll\": 8373,\n\t\"finch\": 27774,\n\t\"Ashraf\": 20069,\n\t\"abolish\": 23697,\n\t\"hearing\": 1809,\n\t\"GitHub\": 13958,\n\t\"Intellectual\": 14555,\n\t\"penalizing\": 805,\n\t\"circulates\": 15807,\n\t\"Hezbollah\": 20549,\n\t\"catfish\": 29173,\n\t\"algorithms\": 9633,\n\t\"resisting\": 31209,\n\t\"female\": 4996,\n\t\"hired\": 13659,\n\t\"pet\": 15457,\n\t\"mauled\": 24111,\n\t\"extrapolate\": 10311,\n\t\"authorization\": 22765,\n\t\"crew\": 19601,\n\t\"Devil\": 6623,\n\t\"optimistic\": 11582,\n\t\"obtuse\": 27727,\n\t\"liver\": 24088,\n\t\"LIKED\": 27484,\n\t\"Research\": 550,\n\t\"diverse\": 8447,\n\t\"estuary\": 30902,\n\t\"7.22\": 26047,\n\t\"Kevalam\": 24619,\n\t\"imperfection\": 17613,\n\t\"dropped\": 9398,\n\t\"biting\": 7180,\n\t\"check\": 7124,\n\t\"http://www.ebay.co.uk/itm/130589513308?var=430034792128&ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1438.l2648#ht_1500wt_660\": 26862,\n\t\"commonion\": 11753,\n\t\"outstanding\": 4562,\n\t\"miracles\": 29787,\n\t\"Lamont\": 12213,\n\t\"notoriously\": 25899,\n\t\"schooling\": 3181,\n\t\"pimply\": 30541,\n\t\"grammar\": 1878,\n\t\"guardians\": 13883,\n\t\"Kids\": 23893,\n\t\"bronze\": 10990,\n\t\"veterinarian\": 27620,\n\t\"contentedly\": 31073,\n\t\"Carl\": 5520,\n\t\"documenting\": 6902,\n\t\"Mountains\": 17183,\n\t\"what's\": 7485,\n\t\"Raging\": 29765,\n\t\"workmen\": 31825,\n\t\"monopoly\": 20336,\n\t\"unbeatable\": 28125,\n\t\"hi\": 15701,\n\t\"perimeter\": 31804,\n\t\"haha\": 15750,\n\t\"inversions\": 32949,\n\t\"1990\": 2602,\n\t\"trial\": 7341,\n\t\"myth\": 6873,\n\t\"superstition\": 32489,\n\t\"Consideration\": 12645,\n\t\"Adds\": 24067,\n\t\"guilt\": 5037,\n\t\"painful\": 3309,\n\t\"gulping\": 8841,\n\t\"ballistic\": 14280,\n\t\"hunger\": 7781,\n\t\"ex\": 880,\n\t\"Gibbs\": 23789,\n\t\"MTM\": 21108,\n\t\"Cavern\": 25670,\n\t\"existed\": 10395,\n\t\"gaily\": 9724,\n\t\"beans\": 15334,\n\t\"awarded\": 3257,\n\t\"1970\": 16385,\n\t\"yogurt\": 16598,\n\t\"filmmaker\": 19225,\n\t\"hospitable\": 28985,\n\t\"complement\": 388,\n\t\"June\": 3489,\n\t\"authorities\": 16459,\n\t\"Fee\": 22545,\n\t\"scattering\": 32197,\n\t\"THANK\": 26337,\n\t\"Young\": 5757,\n\t\"professionalized\": 5295,\n\t\"Definition\": 10974,\n\t\"Amusing\": 30642,\n\t\"fight\": 6772,\n\t\"log\": 21989,\n\t\"constituency\": 12381,\n\t\"refrigerator\": 17772,\n\t\"Portsmouth\": 18,\n\t\"disenfranchised\": 19321,\n\t\"01\": 21407,\n\t\"Northern\": 12571,\n\t\"Equant\": 22028,\n\t\"width\": 23013,\n\t\"viewer\": 200,\n\t\"colonized\": 15469,\n\t\"Kai\": 12893,\n\t\"Safety\": 26921,\n\t\"Carrol\": 11271,\n\t\"glasses\": 9189,\n\t\"Idea\": 12093,\n\t\"prestigious\": 4476,\n\t\"trapped\": 24357,\n\t\"Since\": 1233,\n\t\"Revolution\": 3589,\n\t\"government's\": 12644,\n\t\"11:34\": 23772,\n\t\"hippy\": 27266,\n\t\"1722\": 16736,\n\t\"al\": 4521,\n\t\"Hell\": 5063,\n\t\"crucially\": 3722,\n\t\"tenacious\": 32362,\n\t\"egregious\": 1262,\n\t\"fifty\": 6118,\n\t\"lame\": 6380,\n\t\"flipping\": 22327,\n\t\"qualities\": 14958,\n\t\"pumping\": 9267,\n\t\"spore\": 20701,\n\t\"weak-eyed\": 31216,\n\t\"meander\": 16320,\n\t\"rebuilt\": 16755,\n\t\"Whence\": 30707,\n\t\"Tiger\": 19054,\n\t\"ash\": 32228,\n\t\"respected\": 887,\n\t\"morbidity\": 18688,\n\t\"r-\": 6328,\n\t\"delis\": 16625,\n\t\"threats\": 12796,\n\t\"cheeks\": 27983,\n\t\"exploring\": 76,\n\t\"ml\": 17841,\n\t\"manhunt\": 20755,\n\t\"GRANT\": 30045,\n\t\"moderately\": 18231,\n\t\"disorientation\": 15477,\n\t\"Davies\": 23143,\n\t\"double-chinned\": 31941,\n\t\"Aw\": 6479,\n\t\"Francis\": 14943,\n\t\"junctions\": 17584,\n\t\"worht\": 29002,\n\t\"dispatched\": 12874,\n\t\"couch\": 7383,\n\t\"views\": 1314,\n\t\"confidential\": 20754,\n\t\"Proposes\": 23294,\n\t\"Amneh\": 12230,\n\t\"Asiaweek\": 19577,\n\t\"develope\": 20322,\n\t\"brain’s\": 14998,\n\t\"addict\": 24296,\n\t\"driveway\": 8863,\n\t\"con\": 30818,\n\t\"lyrical\": 31902,\n\t\"Starroute\": 20145,\n\t\"Energyphiles\": 23867,\n\t\"Robbie's\": 6959,\n\t\"abaut\": 11452,\n\t\"rampart\": 4386,\n\t\"previous\": 2039,\n\t\"loads\": 2818,\n\t\"phonies\": 20179,\n\t\"Dublin\": 27827,\n\t\"route\": 9630,\n\t\"Hiller\": 18827,\n\t\"signifcant\": 2831,\n\t\"emulating\": 14561,\n\t\"framework\": 674,\n\t\"Fisht\": 13094,\n\t\"bred\": 15350,\n\t\"Leahy\": 20693,\n\t\"waned\": 3845,\n\t\"perlite\": 17728,\n\t\"honourable\": 31477,\n\t\"persists\": 31680,\n\t\"shared\": 1807,\n\t\"orchestral\": 2963,\n\t\"1700\": 3106,\n\t\"347\": 4967,\n\t\"clods\": 6387,\n\t\"Linking\": 30059,\n\t\"1846\": 14705,\n\t\"regulations\": 13502,\n\t\"Stokes\": 29197,\n\t\"Checa\": 1565,\n\t\"Rabin\": 30736,\n\t\"Prototypes\": 15015,\n\t\"batting\": 4825,\n\t\"Disasters\": 18667,\n\t\"Franc\": 16241,\n\t\"Kano\": 31678,\n\t\"vary\": 453,\n\t\"address\": 1802,\n\t\"spur\": 26198,\n\t\"failing\": 5971,\n\t\"http://www.the-dslr-photographer.com/2009/11/which-dslr-to-buy/\": 26400,\n\t\"cooling\": 2134,\n\t\"spectacular\": 4569,\n\t\"Wiggle\": 17788,\n\t\"putting\": 7394,\n\t\"snake\": 17941,\n\t\"7:30\": 22943,\n\t\"re-type\": 24984,\n\t\"undercurrents\": 19661,\n\t\"Santo\": 13211,\n\t\"guinea\": 15444,\n\t\"uncertain\": 11385,\n\t\"remedies\": 23829,\n\t\"begins\": 2499,\n\t\"whiff\": 31290,\n\t\"Reagan's\": 25983,\n\t\"daughter\": 3493,\n\t\"rained\": 8880,\n\t\"Couldn't\": 30593,\n\t\"prevail\": 14331,\n\t\"puttagenius\": 26136,\n\t\"clarification\": 2546,\n\t\"well-healed\": 32712,\n\t\"Devil's\": 25589,\n\t\"cushion\": 30905,\n\t\"Pubs\": 26695,\n\t\"years\": 279,\n\t\"bartender\": 10528,\n\t\"halfway\": 8610,\n\t\"H-0002/99\": 31476,\n\t\"modeling\": 22886,\n\t\"formatting\": 23096,\n\t\"Parenteau\": 24122,\n\t\"Pope\": 4983,\n\t\"05:07\": 21987,\n\t\"SARS-CoV-2\": 13807,\n\t\"Vinod\": 24210,\n\t\"pediatric\": 1287,\n\t\"Abraham\": 16212,\n\t\"jackets\": 27831,\n\t\"holds\": 2412,\n\t\"1.65\": 23459,\n\t\"brooding\": 30895,\n\t\"speaking\": 2036,\n\t\"vampire\": 32371,\n\t\"niches\": 16830,\n\t\"Waiters\": 30820,\n\t\"navy's\": 19521,\n\t\"deregulate\": 22471,\n\t\"http://en.wikipedia.org/wiki/John_Balance\": 20217,\n\t\"granted\": 12112,\n\t\"prize\": 3256,\n\t\"jumped\": 10077,\n\t\"interestingness\": 83,\n\t\"treaties\": 13882,\n\t\"lowering\": 17349,\n\t\"syrup\": 17896,\n\t\"revival\": 10456,\n\t\"Colbert\": 11138,\n\t\"Ashfaq\": 19711,\n\t\"whispered\": 9423,\n\t\"neocons\": 20177,\n\t\"KSM\": 20589,\n\t\"Plt\": 23009,\n\t\"lidocaine\": 9535,\n\t\"PROTECT\": 11854,\n\t\"Rogers\": 17434,\n\t\"conspiracy\": 5310,\n\t\"1550\": 25473,\n\t\"peremptory\": 7328,\n\t\"assassination\": 18539,\n\t\"extrcurricular\": 22678,\n\t\"redefine\": 23944,\n\t\"clattering\": 30457,\n\t\"politics\": 932,\n\t\"upsetting\": 29750,\n\t\"fins\": 26710,\n\t\"id\": 22335,\n\t\"resumed\": 14735,\n\t\"volunteering\": 27466,\n\t\"Anime\": 8249,\n\t\"CONGRESSIONAL\": 14295,\n\t\"Tanglewood\": 28587,\n\t\"lease\": 21977,\n\t\"Rockies\": 25043,\n\t\"poor\": 1999,\n\t\"Hill\": 12214,\n\t\"nest\": 10256,\n\t\"IEP\": 22371,\n\t\"FrontPage\": 30143,\n\t\"without\": 462,\n\t\"spawned\": 2954,\n\t\"DOG\": 28753,\n\t\"AMES\": 28773,\n\t\"changed\": 4308,\n\t\"fusca\": 10200,\n\t\"meeting\": 11444,\n\t\"anticipate\": 11369,\n\t\"Fan\": 2924,\n\t\"249\": 23708,\n\t\"Writers\": 11117,\n\t\"disabilities\": 14127,\n\t\"http://www.ucei.berkeley.edu/ucei\": 22454,\n\t\"Ron's\": 32139,\n\t\"entreaty\": 23736,\n\t\"ailments\": 25955,\n\t\"upbringing\": 27012,\n\t\"Sardines\": 32602,\n\t\"Folly\": 25729,\n\t\"sparks\": 30473,\n\t\"reef\": 9453,\n\t\"citizen\": 3452,\n\t\"let\": 3769,\n\t\"coldn't\": 28357,\n\t\"proximity\": 16872,\n\t\"half-dressed\": 31850,\n\t\"SNAP's\": 19955,\n\t\"burnings\": 31781,\n\t\"roses\": 32102,\n\t\"542\": 12859,\n\t\"Infocus\": 20731,\n\t\"gallivanting\": 17335,\n\t\"4153030\": 23082,\n\t\"refurb\": 28160,\n\t\"Laboratorio\": 2233,\n\t\"Celsius\": 25098,\n\t\"SUV\": 29730,\n\t\"capes\": 18344,\n\t\"breyer\": 26820,\n\t\"branches\": 6884,\n\t\"jostling\": 32343,\n\t\"tear\": 9634,\n\t\"Bassam\": 31107,\n\t\"Oakley\": 13400,\n\t\"renigged\": 29922,\n\t\"growers\": 8117,\n\t\"scooped\": 9700,\n\t\"unlocked\": 14429,\n\t\"unsociable\": 22606,\n\t\"Guernica\": 27526,\n\t\"uncapped\": 30411,\n\t\"Pinch\": 17750,\n\t\"intelligence\": 1569,\n\t\"FX\": 20904,\n\t\"Hi\": 7058,\n\t\"flyers\": 28124,\n\t\"Objectively\": 18217,\n\t\"calculated\": 15657,\n\t\"Contemporary\": 28425,\n\t\"due\": 415,\n\t\"mountainous\": 16640,\n\t\"glide\": 30973,\n\t\"Academic\": 11720,\n\t\"ECU\": 31352,\n\t\"Cooking\": 18364,\n\t\"stems\": 8902,\n\t\"stirring\": 10010,\n\t\"Sanskrit\": 24041,\n\t\"conversos\": 25434,\n\t\"Functional\": 5633,\n\t\"sixteenth\": 11462,\n\t\"resorts\": 29467,\n\t\"Msaccess.exe\": 30200,\n\t\"Mooney\": 23547,\n\t\"Davison\": 11742,\n\t\"reign\": 13854,\n\t\"Seis\": 6313,\n\t\"stately\": 17419,\n\t\"Strong\": 19371,\n\t\"Tatars\": 4339,\n\t\"http://www.guardian.co.uk/obituaries/story/0,3604,1371372,00.html\": 20218,\n\t\"Now\": 2140,\n\t\"PEANUTS\": 29665,\n\t\"NRC\": 24490,\n\t\"nutrient\": 15931,\n\t\"Erie\": 16368,\n\t\"Care\": 23112,\n\t\"gyrations\": 31885,\n\t\"reproductive\": 14959,\n\t\"Dragon\": 25339,\n\t\"taxi\": 16554,\n\t\"doled\": 7693,\n\t\"DAY\": 10160,\n\t\"1598\": 16735,\n\t\"Compared\": 31549,\n\t\"___________\": 21766,\n\t\"offshore\": 2717,\n\t\"invading\": 27695,\n\t\"Caffe\": 28293,\n\t\"Translators\": 5580,\n\t\"Transatlantic\": 27242,\n\t\"IP\": 18577,\n\t\"Worms\": 27846,\n\t\"conveyor\": 26935,\n\t\"questi\": 11987,\n\t\"manufacture\": 13946,\n\t\"knights-errant\": 30939,\n\t\"Wizardry\": 32037,\n\t\"Hit\": 4794,\n\t\"1801\": 3630,\n\t\"asymmetrical\": 18884,\n\t\"militarize\": 24281,\n\t\"aerosol\": 16077,\n\t\"evaluation\": 1083,\n\t\"propaganda\": 9645,\n\t\"Theseus\": 9573,\n\t\"Xenocentrism\": 15524,\n\t\"pick\": 3384,\n\t\"slipping\": 12770,\n\t\"Relativism\": 15424,\n\t\"5107\": 24016,\n\t\"1997\": 2397,\n\t\"Bellevue\": 28931,\n\t\"Dulaym\": 19330,\n\t\"Mute\": 31654,\n\t\"soldiers\": 8045,\n\t\"puzzling\": 30705,\n\t\"grassroots\": 13780,\n\t\"abandon\": 3871,\n\t\"renewable\": 22479,\n\t\"rascally\": 31206,\n\t\"Fiona\": 29505,\n\t\"dark-green\": 31090,\n\t\"rogue\": 19411,\n\t\"alliance\": 10396,\n\t\"moths\": 31607,\n\t\"aptly\": 8328,\n\t\"NVQ\": 26119,\n\t\"cease\": 9425,\n\t\"Maroni\": 13234,\n\t\"Memoirs\": 30652,\n\t\"apartment\": 5214,\n\t\"C-\": 6744,\n\t\"Sweden\": 4278,\n\t\"talk\": 1885,\n\t\"dempsey\": 26326,\n\t\"Defense\": 7361,\n\t\"unzipped\": 24124,\n\t\"Shandy\": 9842,\n\t\"wildly\": 26800,\n\t\"aprons\": 31670,\n\t\"Dux\": 27648,\n\t\"temperature\": 2620,\n\t\"mango\": 29474,\n\t\"Hamas's\": 18789,\n\t\"PROD\": 23034,\n\t\"blown\": 10136,\n\t\"Witsel\": 13122,\n\t\"dimensional\": 1973,\n\t\"Scholars\": 5712,\n\t\"biding\": 30365,\n\t\"questioned\": 9455,\n\t\"brutalizing\": 31905,\n\t\"Maui\": 7539,\n\t\"``\": 11221,\n\t\"concentric\": 20471,\n\t\"CONGRATULATIONS\": 22265,\n\t\"chineze\": 29131,\n\t\"noticed\": 3758,\n\t\"activated\": 7405,\n\t\"lymphoma\": 24546,\n\t\"harder\": 6773,\n\t\"another\": 1483,\n\t\"Only.doc\": 22905,\n\t\"perked\": 30459,\n\t\"burp\": 6809,\n\t\"kills\": 13832,\n\t\"harmonize\": 13847,\n\t\"Sorta\": 7206,\n\t\"terminal\": 18221,\n\t\"criticism\": 12115,\n\t\"hostility\": 12118,\n\t\"required\": 633,\n\t\"Torneby\": 23175,\n\t\"inside\": 2195,\n\t\"smoother\": 29358,\n\t\"hurried\": 9176,\n\t\"SACRAMENTO\": 23664,\n\t\"germ\": 18381,\n\t\"itemized\": 29228,\n\t\"expert\": 1250,\n\t\"http://www.rawstory.com/news/2006/US_outsourcing_special_operations_intelligence_gathering_0413.html\": 20063,\n\t\"STARZZ\": 22948,\n\t\"puncturing\": 3285,\n\t\"Wade\": 5782,\n\t\"Preview\": 14581,\n\t\"lisp\": 20124,\n\t\"anxious\": 16151,\n\t\"amusing\": 19283,\n\t\"enfiladed\": 30530,\n\t\"credential\": 1455,\n\t\"pre-owned\": 29268,\n\t\"·\": 24000,\n\t\"Ave\": 16602,\n\t\"manufactured\": 8753,\n\t\"Level\": 30034,\n\t\"gathered\": 3823,\n\t\"Banks’\": 8346,\n\t\"squeak\": 9735,\n\t\"resistless\": 9384,\n\t\"loomed\": 9248,\n\t\"DoD\": 15225,\n\t\"Naturalisation\": 25968,\n\t\"object's\": 30209,\n\t\"responsibilities\": 14054,\n\t\"Maple\": 26352,\n\t\"Simultaneously\": 19109,\n\t\"judging\": 15448,\n\t\"Jiuquan\": 24791,\n\t\"50's\": 18718,\n\t\"Ph.\": 22241,\n\t\"unneccesary\": 29056,\n\t\"firsthand\": 13629,\n\t\"prophecy\": 30854,\n\t\"Rays\": 4936,\n\t\"Greendale\": 20864,\n\t\"varies\": 10696,\n\t\"Alzheimer’s\": 9517,\n\t\"alarmingly\": 32770,\n\t\"Cérebro\": 1615,\n\t\"blindness\": 27748,\n\t\"focus\": 44,\n\t\"72\": 23014,\n\t\"survivor\": 14792,\n\t\"trashy\": 29614,\n\t\"illustrious\": 32556,\n\t\"arisen\": 13834,\n\t\"intimate\": 15571,\n\t\"Allier\": 5441,\n\t\"Athens\": 31660,\n\t\"millennium\": 20778,\n\t\"kimberwick\": 26376,\n\t\"mia\": 8850,\n\t\"Silkie\": 27132,\n\t\"Courtney\": 21377,\n\t\"425-922-0475\": 23182,\n\t\"sluts\": 27641,\n\t\"Creek\": 17054,\n\t\"1830\": 14732,\n\t\"womanish\": 25656,\n\t\"erased\": 31643,\n\t\"eyes\": 4415,\n\t\"replica\": 26827,\n\t\"Essex'\": 25430,\n\t\"hackable\": 8383,\n\t\"cunning\": 32084,\n\t\"Entartete\": 20189,\n\t\"BEN\": 27084,\n\t\"patient\": 3709,\n\t\"Ray\": 23304,\n\t\"tweezers\": 27678,\n\t\"fancies\": 27634,\n\t\"Dancing\": 4166,\n\t\"dominate\": 3757,\n\t\"traditionally\": 19719,\n\t\"grants\": 6595,\n\t\"laptops\": 21775,\n\t\"ready\": 7566,\n\t\"indices\": 24330,\n\t\"Health\": 1390,\n\t\"elsewise\": 21969,\n\t\"QuikTrip\": 28140,\n\t\"untrue\": 7182,\n\t\"intention\": 14778,\n\t\"Pastorino\": 13205,\n\t\"whelped\": 32377,\n\t\"Pronounced\": 16857,\n\t\"seeker\": 18315,\n\t\"resist\": 15175,\n\t\"interruption\": 7790,\n\t\"ferry\": 11048,\n\t\"Coarse\": 15946,\n\t\"11/28/2000\": 23733,\n\t\"helium\": 13414,\n\t\"Aerocom\": 19904,\n\t\"tweeted\": 12234,\n\t\"Conan\": 13660,\n\t\"860\": 16260,\n\t\"kitty\": 7072,\n\t\"Lindh\": 23271,\n\t\"Floating\": 21636,\n\t\"customise\": 27238,\n\t\"Pisces\": 25316,\n\t\"Either\": 21962,\n\t\"01/11/2001\": 22743,\n\t\"Rates\": 23312,\n\t\"screem\": 27797,\n\t\"chalked\": 27996,\n\t\"Afghanistan's\": 12076,\n\t\"Flying\": 11425,\n\t\"for\": 248,\n\t\"Teddie\": 4210,\n\t\"bagh\": 27413,\n\t\"paint\": 3572,\n\t\"gangs\": 13001,\n\t\"labelled\": 12686,\n\t\"Fernando\": 12426,\n\t\"know\": 1214,\n\t\"opened\": 4688,\n\t\"02:39:27\": 24866,\n\t\"Putting\": 13678,\n\t\"razor\": 6548,\n\t\"counterparts\": 8175,\n\t\"clock\": 8203,\n\t\"He'll\": 10731,\n\t\"orphans\": 26511,\n\t\"Concern\": 23123,\n\t\"wasn't\": 6810,\n\t\"redeeming\": 31281,\n\t\"Weston\": 21152,\n\t\"brocade\": 9125,\n\t\"bosom\": 30567,\n\t\"knocked\": 15765,\n\t\"Tend\": 6664,\n\t\"Teotihuacan\": 15368,\n\t\"advertising\": 10700,\n\t\"noses\": 11208,\n\t\"reassured\": 21868,\n\t\"optinal\": 26713,\n\t\"O'Reilly\": 10963,\n\t\"misunderstood\": 31651,\n\t\"Tårs\": 17243,\n\t\"Vermeer's\": 30249,\n\t\"Troy\": 10531,\n\t\"Pirker\": 31358,\n\t\"impacted\": 7011,\n\t\"upends\": 7448,\n\t\"EI\": 21099,\n\t\"pen\": 4602,\n\t\"sus\": 20338,\n\t\"646-5847\": 23075,\n\t\"submarines\": 25769,\n\t\"berry\": 25074,\n\t\"Knowing\": 9256,\n\t\"JA\": 7500,\n\t\"workday\": 13647,\n\t\"5/1/01\": 23542,\n\t\"Melancon\": 4917,\n\t\"CAN\": 19478,\n\t\"Lessig's\": 10916,\n\t\"Wigner\": 24902,\n\t\"ghosts\": 8459,\n\t\"intrudes\": 17620,\n\t\"scenery\": 16664,\n\t\"amnesties\": 27922,\n\t\"aroused\": 31686,\n\t\"related\": 1166,\n\t\"Responses\": 2925,\n\t\"dwells\": 11215,\n\t\"bludger\": 18300,\n\t\"pronoun\": 1152,\n\t\"hours\": 625,\n\t\"blueprint\": 32714,\n\t\"joining\": 3659,\n\t\"Tupperware\": 32460,\n\t\"doom\": 9336,\n\t\"hits\": 7339,\n\t\"ousting\": 19738,\n\t\"cause\": 2169,\n\t\"mistaken\": 20706,\n\t\"sort\": 6747,\n\t\"citral\": 17711,\n\t\"philanthropic\": 31224,\n\t\"tommorow\": 21232,\n\t\"chops\": 13665,\n\t\"forecasts\": 21586,\n\t\"impunity\": 31403,\n\t\"E.\": 10677,\n\t\"motorized\": 16580,\n\t\"heartbroken\": 27986,\n\t\"endeavour\": 14075,\n\t\"Zora\": 12052,\n\t\"Sha'lan\": 19274,\n\t\"Probably\": 6452,\n\t\"False\": 30222,\n\t\"Circuit\": 7426,\n\t\"shocking\": 9480,\n\t\"09:56\": 23820,\n\t\"perpendicular\": 2799,\n\t\"Woud\": 26525,\n\t\"receiving\": 3685,\n\t\"Tenet\": 20594,\n\t\"Planning\": 12515,\n\t\"Alekseyevna\": 4380,\n\t\"Voldemort's\": 32061,\n\t\"cash\": 11538,\n\t\"interweave\": 2303,\n\t\"CEI\": 13236,\n\t\"Hitler\": 16921,\n\t\"tsunami\": 19516,\n\t\"generating\": 2256,\n\t\"regretting\": 9826,\n\t\"Shah\": 16751,\n\t\"seeming\": 9324,\n\t\"jermeier@earthlink.net\": 22383,\n\t\"doors\": 11244,\n\t\"Customizing\": 30081,\n\t\"outlook\": 15218,\n\t\"Pirates'\": 4866,\n\t\"phoneering\": 11949,\n\t\"Brovej\": 17258,\n\t\"researching\": 10250,\n\t\"pertinent\": 23214,\n\t\"Commission's\": 23317,\n\t\"burners\": 6391,\n\t\"Karen\": 14112,\n\t\"Driftwood\": 21844,\n\t\"supplement\": 23390,\n\t\"second-class\": 31919,\n\t\"supper\": 32116,\n\t\"1739\": 4459,\n\t\"SAME\": 28637,\n\t\"Bottom\": 26896,\n\t\"scientists\": 406,\n\t\"clog\": 17375,\n\t\"optimize\": 14574,\n\t\"nonmaterial\": 15507,\n\t\"bathrooms\": 16074,\n\t\"Hu\": 3353,\n\t\"gon\": 6047,\n\t\"Osler\": 23167,\n\t\"Battle\": 4321,\n\t\"Garage\": 28619,\n\t\"Kyoto\": 3684,\n\t\"Asahe\": 31896,\n\t\"darn\": 26686,\n\t\"Cruz\": 3733,\n\t\"doorknobs\": 30402,\n\t\"ageless\": 11200,\n\t\"viveurs\": 32466,\n\t\"ices\": 11481,\n\t\"depictions\": 1974,\n\t\"11:07\": 21951,\n\t\"saws\": 26834,\n\t\"Unless\": 11823,\n\t\"Sheet\": 22631,\n\t\"Extract\": 1814,\n\t\"mama`s\": 21252,\n\t\"Fri.\": 22184,\n\t\"Apparently\": 3874,\n\t\"kung\": 29839,\n\t\"capitalizing\": 16944,\n\t\"Dealt\": 27994,\n\t\"Katherinator\": 12616,\n\t\"Settlements\": 23536,\n\t\"budget\": 10266,\n\t\"journalists\": 19263,\n\t\"coquette\": 3935,\n\t\"Squeege\": 28101,\n\t\"Masonic\": 25534,\n\t\"mid-afternoon\": 29829,\n\t\"seasonally\": 16277,\n\t\"winded\": 32033,\n\t\"facet\": 7308,\n\t\"mistake\": 9302,\n\t\"Store\": 16604,\n\t\"Zahav\": 29984,\n\t\"lou\": 22770,\n\t\"genotype\": 9584,\n\t\"industrial\": 16395,\n\t\"nothing\": 6573,\n\t\"posed\": 3088,\n\t\"Lindsay\": 2430,\n\t\"stay\": 5116,\n\t\"multiplier\": 8102,\n\t\"join\": 10405,\n\t\"units\": 1048,\n\t\"smithjones@ev1.net\": 22932,\n\t\"balaclava\": 32384,\n\t\"Oilskin\": 32701,\n\t\"combatants\": 25770,\n\t\"obstinate\": 31747,\n\t\"Friedrichstrasse\": 13191,\n\t\"draped\": 19940,\n\t\"Surprisingly\": 7940,\n\t\"Ensure\": 14483,\n\t\"regionally\": 10885,\n\t\"cretins\": 23898,\n\t\"south\": 5433,\n\t\"OVERALL\": 27485,\n\t\"hail\": 24249,\n\t\"Inclusive\": 824,\n\t\"aromas\": 16188,\n\t\"Snowdon\": 4180,\n\t\"cinema\": 25682,\n\t\"mɔʁo\": 5362,\n\t\"JAMES\": 11494,\n\t\"triumph\": 9154,\n\t\"pea\": 27155,\n\t\"podium\": 25198,\n\t\"foil\": 18408,\n\t\"immobility\": 17805,\n\t\"PLEASE\": 24928,\n\t\"anyone's\": 27771,\n\t\"incorporate\": 783,\n\t\"donor\": 13275,\n\t\"Aesthetics\": 28722,\n\t\"selection\": 1218,\n\t\"sugary\": 18420,\n\t\"resumes\": 26461,\n\t\"Insert\": 32259,\n\t\"implicate\": 19456,\n\t\"startlingly\": 31278,\n\t\"dinosaurs\": 2740,\n\t\"petition\": 13254,\n\t\"200\": 12145,\n\t\"transnational\": 8104,\n\t\"shaper\": 30697,\n\t\"wondering\": 6203,\n\t\"Dewhurst\": 21787,\n\t\"Honey\": 15882,\n\t\"interacting\": 13667,\n\t\"CHURCH\": 24450,\n\t\"mustn't\": 30572,\n\t\"https://osf.io\": 2422,\n\t\"Cross-clause\": 1149,\n\t\"Pools\": 8929,\n\t\"spears\": 31320,\n\t\"345-3436\": 22334,\n\t\"exalted\": 6620,\n\t\"Regardless\": 18314,\n\t\"secessionist\": 19531,\n\t\"Agra\": 27396,\n\t\"GPL\": 10816,\n\t\"50,000th\": 10752,\n\t\"lesion\": 18720,\n\t\"half-a-crown\": 31811,\n\t\"substituting\": 17897,\n\t\"Guadeloupe's\": 16714,\n\t\"cousin\": 3920,\n\t\"Marriott’s\": 15111,\n\t\"lo9nger\": 27988,\n\t\"column\": 10484,\n\t\"storm\": 12255,\n\t\"grammatical\": 5693,\n\t\"safety\": 2103,\n\t\"dollar\": 6102,\n\t\"Fallon\": 13646,\n\t\"Chaos\": 3473,\n\t\"Hannah\": 22275,\n\t\"universals\": 15425,\n\t\"therapies\": 28021,\n\t\"locked\": 7061,\n\t\"rested\": 23699,\n\t\"Sha'ananim\": 30622,\n\t\"DA\": 23721,\n\t\"crocheting\": 9196,\n\t\"swear\": 11957,\n\t\"wht\": 26214,\n\t\"244\": 17457,\n\t\"215,000\": 25828,\n\t\"physician\": 3394,\n\t\"Hospital\": 12943,\n\t\"attending\": 5445,\n\t\"Perry@ENRON_DEVELOPMENT\": 23463,\n\t\"Mussolini-jaw\": 31901,\n\t\"conquests\": 30945,\n\t\"Tha\": 32435,\n\t\"roughhouse\": 27693,\n\t\"LA.\": 23216,\n\t\"S65\": 14298,\n\t\"PRESS\": 10103,\n\t\"Warnings\": 18235,\n\t\"Nepool\": 21589,\n\t\"Interestingly\": 2830,\n\t\"Compounding\": 25834,\n\t\"Installing\": 30166,\n\t\"mixture\": 10492,\n\t\"Belle\": 4150,\n\t\"incredible\": 15184,\n\t\"Oslo\": 18887,\n\t\"2300\": 29887,\n\t\"implications\": 164,\n\t\"nieces\": 31622,\n\t\"Emma\": 15125,\n\t\"incurred\": 22730,\n\t\"Mohaqeq\": 19728,\n\t\"price\": 2168,\n\t\"phrase\": 985,\n\t\"CSS\": 30092,\n\t\"edited\": 4430,\n\t\"anniversary\": 13309,\n\t\"enthusiastic\": 23844,\n\t\"Springfield\": 28279,\n\t\"tugs\": 30811,\n\t\"Argument\": 7551,\n\t\"Regarding\": 10512,\n\t\"Heaven\": 20413,\n\t\"SO\": 27948,\n\t\"Finn\": 4158,\n\t\"referencing\": 10241,\n\t\"Mansoor\": 23633,\n\t\"yacks\": 9903,\n\t\"Smokers\": 29099,\n\t\"Piccadilly\": 25590,\n\t\"fewest\": 30686,\n\t\"symphony\": 30861,\n\t\"quadrant\": 7343,\n\t\"commercialish\": 10977,\n\t\"Blessings\": 24751,\n\t\"Michele\": 20165,\n\t\"Britannia\": 17531,\n\t\"testing\": 1980,\n\t\"earthquakes\": 9777,\n\t\"tractor\": 21858,\n\t\"landing\": 18225,\n\t\"http://lllreptile.com/store/catalog/reptile-supplies/uvb-fluorescent-lights-mercury-vapor-bulbs/-/zoo-med-24-repti-sun-100-fluorescent-bulb/\": 27751,\n\t\"divans\": 31873,\n\t\"cere\": 27793,\n\t\"UVA\": 27736,\n\t\"innkeepers\": 29968,\n\t\"Catholicism\": 5431,\n\t\"crafted\": 15328,\n\t\"D.\": 3976,\n\t\"There’s\": 7833,\n\t\"3:15\": 29597,\n\t\"remoras\": 32647,\n\t\"riches\": 16406,\n\t\"RUY\": 25446,\n\t\"unloaded\": 30814,\n\t\"Nationwide\": 26012,\n\t\"Africans\": 30600,\n\t\"1989\": 2394,\n\t\"onto\": 4005,\n\t\"Rees\": 21755,\n\t\"2013\": 263,\n\t\"sub-categories\": 3085,\n\t\"Happen\": 9794,\n\t\"emails\": 11293,\n\t\"(a)\": 2455,\n\t\"Balasingham\": 19028,\n\t\"Electric\": 22860,\n\t\"23.8\": 26086,\n\t\"Comfortable\": 29329,\n\t\"combo\": 29837,\n\t\"laude\": 5562,\n\t\"Swedish\": 13086,\n\t\"accelerating\": 14499,\n\t\"Located\": 16818,\n\t\":P\": 27805,\n\t\"catalogue\": 28518,\n\t\"encompassing\": 485,\n\t\"Fung\": 12417,\n\t\"Sidenote\": 26559,\n\t\"cloyingly\": 31710,\n\t\"CLASS\": 28688,\n\t\"1660\": 4323,\n\t\"charcoal\": 8989,\n\t\"salsa\": 16671,\n\t\"Cats\": 13577,\n\t\"Horizon\": 19585,\n\t\"Direct\": 22129,\n\t\"inappropriately\": 27461,\n\t\"Tsar\": 4284,\n\t\"1836\": 14772,\n\t\"Oliveira\": 5525,\n\t\"item\": 1793,\n\t\"metabolome\": 10625,\n\t\"Mac\": 16063,\n\t\"attainable\": 14540,\n\t\"List\": 16853,\n\t\"reprimands\": 5954,\n\t\"sonic\": 28388,\n\t\"Pueblo\": 15421,\n\t\"Fries\": 26333,\n\t\"archeologist\": 30335,\n\t\"Dictator\": 24735,\n\t\"1572\": 25490,\n\t\"dandy\": 25539,\n\t\"mounds\": 26188,\n\t\"irrespective\": 22642,\n\t\"stepped\": 8646,\n\t\"Drake\": 30937,\n\t\"thermometer\": 27770,\n\t\"refreshed\": 30688,\n\t\"Terre\": 16638,\n\t\"angered\": 30928,\n\t\"likened\": 11158,\n\t\"possess\": 6629,\n\t\"salads\": 28348,\n\t\"approachable\": 28935,\n\t\"hurrying\": 32638,\n\t\"altitude\": 5573,\n\t\"infiltrate\": 27718,\n\t\"sock\": 18311,\n\t\"madea\": 23916,\n\t\"via\": 10829,\n\t\"water-men\": 32536,\n\t\"southward\": 15285,\n\t\"turns\": 8876,\n\t\"badly\": 7936,\n\t\"performer\": 13676,\n\t\"Case\": 703,\n\t\"belittling\": 29859,\n\t\"academics\": 1420,\n\t\"incipient\": 32619,\n\t\"Lewis\": 11270,\n\t\"HAS\": 21263,\n\t\"properties\": 217,\n\t\"innovations\": 13986,\n\t\"riding\": 9069,\n\t\"less\": 1172,\n\t\"o-\": 6792,\n\t\"prickly\": 26367,\n\t\"ALLOWANCE\": 27030,\n\t\"caucasians\": 27260,\n\t\"womenfolk\": 30573,\n\t\"overcome\": 7407,\n\t\"prodigious\": 9947,\n\t\"jog\": 26201,\n\t\"Dude\": 28832,\n\t\"authorized\": 19419,\n\t\"survival\": 7835,\n\t\"cosy\": 31871,\n\t\"alerts\": 7793,\n\t\"TroubleFunk\": 20280,\n\t\"link\": 1398,\n\t\"doctorate\": 3686,\n\t\"remedy\": 31398,\n\t\"laughter\": 28678,\n\t\"Simpson\": 10741,\n\t\"charter\": 5578,\n\t\"Bats\": 4777,\n\t\"references\": 2388,\n\t\"Satisfied\": 21547,\n\t\"VC\": 27710,\n\t\"OMG\": 29000,\n\t\"268\": 24484,\n\t\"Justified\": 15180,\n\t\"Quidditch\": 18282,\n\t\"cockatiel's\": 26811,\n\t\"petri\": 10306,\n\t\"Fury\": 30710,\n\t\"Ballet\": 17655,\n\t\"stricken\": 25215,\n\t\"giddy\": 23930,\n\t\"Causey\": 21331,\n\t\"seconds\": 4025,\n\t\"ladder\": 9347,\n\t\"Bowie\": 14785,\n\t\"Khalid\": 18754,\n\t\"Skilling\": 23153,\n\t\"SUNY\": 8535,\n\t\"czar\": 13839,\n\t\"b/t\": 23872,\n\t\"mangroves\": 31141,\n\t\"appeared\": 3761,\n\t\"Labadee\": 27500,\n\t\"laurels\": 22431,\n\t\"element\": 2791,\n\t\"dracaena\": 17188,\n\t\"wildcard\": 30038,\n\t\"searchability\": 13742,\n\t\"Unity\": 14519,\n\t\"Antonio\": 5707,\n\t\"there's\": 6332,\n\t\"recalculation\": 22623,\n\t\"Sir\": 24354,\n\t\"Peking\": 29231,\n\t\"Transition\": 21049,\n\t\"explored\": 2993,\n\t\"freshman\": 4821,\n\t\"Ridiculousness\": 5289,\n\t\"serving\": 14270,\n\t\"Theyre\": 26373,\n\t\"coupon\": 28244,\n\t\"CNN\": 18822,\n\t\"ROM\": 26168,\n\t\"Paris\": 3166,\n\t\"organised\": 28211,\n\t\"Cindy\": 20914,\n\t\"171\": 4790,\n\t\"trademark\": 4665,\n\t\"4A\": 4823,\n\t\"night\": 2077,\n\t\"witness\": 7166,\n\t\"disgrace\": 27767,\n\t\"aunte\": 29121,\n\t\"LFTD\": 28082,\n\t\"lexicon\": 3819,\n\t\"Nano\": 26676,\n\t\"cookbook\": 28867,\n\t\"convention\": 12527,\n\t\"4.1.\": 1935,\n\t\"chandelier\": 19855,\n\t\"crawled\": 13821,\n\t\"Judy\": 6423,\n\t\"CHERNOBYL\": 18658,\n\t\"malls\": 16962,\n\t\"22,600\": 26023,\n\t\"championship\": 4926,\n\t\"shrouds\": 9111,\n\t\"Even\": 6575,\n\t\"nearby\": 15567,\n\t\"Testing\": 2227,\n\t\"IF\": 11829,\n\t\"appease\": 5038,\n\t\"internal\": 12709,\n\t\"spew\": 30448,\n\t\"captained\": 11003,\n\t\"geometry\": 2310,\n\t\"stream\": 9379,\n\t\"reactionaries\": 30597,\n\t\"ideological\": 13240,\n\t\"televisions\": 17148,\n\t\"goals\": 214,\n\t\"Confirmed\": 21561,\n\t\"Seventeen\": 9558,\n\t\"googled\": 28533,\n\t\"Adorn\": 28151,\n\t\"Mexico\": 5570,\n\t\"107's\": 7452,\n\t\"rim\": 9477,\n\t\"outs\": 15939,\n\t\"ENA\": 21210,\n\t\">:(\": 27359,\n\t\"brinkmanship\": 18865,\n\t\"leaderships\": 19315,\n\t\"Bryant\": 20714,\n\t\"molding\": 26411,\n\t\"righty\": 6814,\n\t\"undersecretary\": 13227,\n\t\"n'\": 5282,\n\t\"Antigua\": 16473,\n\t\"Excuse\": 6767,\n\t\"textile\": 16739,\n\t\"iron\": 6394,\n\t\"exporting\": 30110,\n\t\"contrasted\": 19285,\n\t\"departing\": 16452,\n\t\"Hee-Chan's\": 13089,\n\t\"aquarist's\": 27891,\n\t\"ATM\": 16500,\n\t\"homeowners\": 11530,\n\t\"wanted\": 3186,\n\t\"stone\": 6849,\n\t\"repaid\": 11543,\n\t\"frustrated\": 19061,\n\t\"metastasis\": 25643,\n\t\"analyzes\": 3068,\n\t\"arthritis\": 21271,\n\t\"uncle's\": 20769,\n\t\"cons\": 26147,\n\t\"flecked\": 9044,\n\t\"hotter\": 6223,\n\t\"objectivity\": 15149,\n\t\"`\": 19430,\n\t\"situation\": 2214,\n\t\"captured\": 11381,\n\t\"bloodying\": 27675,\n\t\"Sighing\": 32588,\n\t\"awful\": 15803,\n\t\"distractors\": 1593,\n\t\"slang\": 24205,\n\t\"Generals\": 4436,\n\t\"Packard\": 24171,\n\t\"sufficient\": 1054,\n\t\"infrequently\": 30804,\n\t\"expectation\": 10600,\n\t\"L2\": 2387,\n\t\"emerging\": 2991,\n\t\"Lynn\": 19425,\n\t\"tress\": 23961,\n\t\"previous-version\": 30064,\n\t\"1596\": 16788,\n\t\"wax\": 5195,\n\t\"Leonardo\": 6182,\n\t\"convert\": 7901,\n\t\"raided\": 12712,\n\t\"ingredient\": 20434,\n\t\"rifles\": 19599,\n\t\"patiently\": 31037,\n\t\"Khincasnonbever\": 18092,\n\t\"theater\": 7479,\n\t\"wields\": 18934,\n\t\"popularity\": 5969,\n\t\"National\": 2584,\n\t\"inappropriate\": 17385,\n\t\"suffrage\": 7995,\n\t\"prequel\": 4202,\n\t\"anti-American\": 18878,\n\t\"cigarettes\": 30313,\n\t\"Outcome\": 30208,\n\t\"methodical\": 28726,\n\t\"mountaintop\": 25943,\n\t\"steering\": 30024,\n\t\"0491\": 21892,\n\t\"strengthening\": 13914,\n\t\"efficiently\": 19773,\n\t\"biolab\": 20786,\n\t\"Public\": 1389,\n\t\"lurks\": 7682,\n\t\"effective\": 399,\n\t\"financed\": 11641,\n\t\"invitation\": 3481,\n\t\"sauces\": 29495,\n\t\"conducted\": 434,\n\t\"Restructuring\": 22415,\n\t\"Voice\": 10713,\n\t\"Mum\": 11758,\n\t\"either\": 3909,\n\t\"we’ve\": 8433,\n\t\"shaky\": 28312,\n\t\"96\": 4715,\n\t\"toys'\": 5318,\n\t\"vitality\": 31117,\n\t\"T1\": 22128,\n\t\"safely\": 13000,\n\t\"double\": 987,\n\t\"irene\": 26139,\n\t\"DEALER\": 29273,\n\t\"chasms\": 25174,\n\t\".265\": 4785,\n\t\"break\": 1127,\n\t\"Lakoff\": 3746,\n\t\"Grove\": 24951,\n\t\"carrot\": 26758,\n\t\"Oh\": 6145,\n\t\"deals\": 13058,\n\t\"haste\": 24723,\n\t\"containers\": 17725,\n\t\"amiable\": 30552,\n\t\"affords\": 22492,\n\t\"wherein\": 18731,\n\t\"Whats\": 26535,\n\t\"-----------------------------------------------------------------------\": 25344,\n\t\"reckless\": 12850,\n\t\"spines\": 26356,\n\t\"charm\": 16950,\n\t\"painless\": 29178,\n\t\"highly\": 934,\n\t\"WISE\": 2651,\n\t\"accomplishment\": 22429,\n\t\"self-transformation\": 32830,\n\t\"Silent\": 5738,\n\t\"jihadist\": 20663,\n\t\"Testament\": 5586,\n\t\"Harvesting\": 17702,\n\t\"water-coloured\": 31942,\n\t\"bedlam\": 25186,\n\t\"Soren\": 13926,\n\t\"303-294-4499\": 23862,\n\t\"FOOD\": 26242,\n\t\"glowstick\": 18009,\n\t\"dashboard\": 32182,\n\t\"Long\": 275,\n\t\"Frick\": 30248,\n\t\"Mayan\": 15402,\n\t\"There're\": 32002,\n\t\"worried\": 6741,\n\t\"rapporteur\": 31377,\n\t\"violate\": 23690,\n\t\"Mandel\": 16669,\n\t\"lawmakers\": 20019,\n\t\"doorbell\": 16010,\n\t\"inconclusive\": 31041,\n\t\"kennels\": 28847,\n\t\"Chao\": 3344,\n\t\"stylistic\": 983,\n\t\"NEA\": 24512,\n\t\"Nights\": 5369,\n\t\"elevator\": 12562,\n\t\"Aakrosh\": 19636,\n\t\"noiseless\": 26431,\n\t\"1-877-331-6867\": 22407,\n\t\"enlace\": 1180,\n\t\"unpaid\": 19857,\n\t\"Forge\": 3570,\n\t\"overcoming\": 18249,\n\t\"tick\": 26197,\n\t\"returns\": 15529,\n\t\"lightning\": 17096,\n\t\"Duke\": 13336,\n\t\"Jaffna\": 18988,\n\t\"surf\": 31092,\n\t\"instantly\": 19149,\n\t\"White\": 4950,\n\t\"nomenclature\": 20465,\n\t\"dueled\": 21836,\n\t\"debutants\": 13062,\n\t\"944-3737\": 16559,\n\t\"hairstylist\": 29008,\n\t\"ensure\": 796,\n\t\"06:05\": 22061,\n\t\"Geofence\": 2326,\n\t\"Rolled\": 23004,\n\t\"Calif\": 27273,\n\t\"absent\": 14315,\n\t\"XML-like\": 30089,\n\t\"Anthony\": 4230,\n\t\"rebuttal\": 7331,\n\t\"woollens\": 32382,\n\t\"plaintiffs'\": 7534,\n\t\"divinely\": 6603,\n\t\"Fox\": 5726,\n\t\"Essentially\": 1850,\n\t\"mare\": 27979,\n\t\"Kurtz\": 31269,\n\t\"shocked\": 3062,\n\t\"shortened\": 18326,\n\t\"segments\": 27240,\n\t\"Dostoyevsky\": 10926,\n\t\"Galleon\": 32324,\n\t\"Gigaloader\": 12721,\n\t\"traightening\": 12023,\n\t\"commendable\": 11606,\n\t\"immortal\": 17981,\n\t\"big\": 6418,\n\t\"6.2.1\": 23477,\n\t\"plover\": 25190,\n\t\"1.12\": 1658,\n\t\"incite\": 20539,\n\t\"advisor\": 4283,\n\t\"reassemble\": 18162,\n\t\"SPLOID.com\": 20086,\n\t\"Cullen\": 21477,\n\t\"ruler\": 26836,\n\t\"switches\": 9352,\n\t\"Vignieri\": 2474,\n\t\"notified\": 4045,\n\t\"mmmm\": 29472,\n\t\"Fei\": 24787,\n\t\"1729\": 14895,\n\t\"Hannibal\": 11203,\n\t\"exuberant\": 12630,\n\t\"Faaborg\": 17239,\n\t\"educate\": 10897,\n\t\"NT\": 28184,\n\t\"meantime\": 13057,\n\t\"Broke\": 21131,\n\t\"LW\": 22108,\n\t\"saber-toothed\": 32200,\n\t\"uno\": 24821,\n\t\"pitfalls\": 29563,\n\t\"shoved\": 32325,\n\t\"Faithful\": 25547,\n\t\"bitterly\": 32063,\n\t\"Invictus\": 6566,\n\t\"temporary\": 3211,\n\t\"VIII\": 25584,\n\t\"API\": 23406,\n\t\"Bohai\": 2720,\n\t\"laced\": 10226,\n\t\"Bass\": 14113,\n\t\"Several\": 4664,\n\t\"chimed\": 8660,\n\t\"Indonesians\": 26088,\n\t\"translated\": 1132,\n\t\"Armenia\": 12096,\n\t\"Jeanne's\": 5452,\n\t\"crawls\": 27673,\n\t\"Barnes\": 7820,\n\t\"ResearchGate\": 452,\n\t\"1775\": 22826,\n\t\"sessions\": 7750,\n\t\"Gray\": 21080,\n\t\"Coronas\": 26917,\n\t\"journeys\": 30331,\n\t\"flick\": 9018,\n\t\"effectiveness\": 648,\n\t\"68.4\": 25908,\n\t\"Motor\": 21828,\n\t\"smooth\": 7771,\n\t\"completed\": 130,\n\t\"BRING\": 29674,\n\t\"Has\": 8695,\n\t\"execute\": 7589,\n\t\"Attachment\": 23302,\n\t\"Foreigner's\": 26438,\n\t\"201-224-7900\": 16603,\n\t\"rails\": 17505,\n\t\"33,000\": 15683,\n\t\"improvements\": 1708,\n\t\"Learn\": 17624,\n\t\"Huge\": 20469,\n\t\"Hu's\": 3403,\n\t\"quitted\": 31630,\n\t\"curve\": 4488,\n\t\"Ispat\": 22259,\n\t\"went\": 3205,\n\t\"symphonies\": 32858,\n\t\"sexuality\": 8486,\n\t\"Website\": 21671,\n\t\"Virginia\": 21148,\n\t\"416-865-3704\": 21301,\n\t\"bulge\": 32903,\n\t\"covariation\": 13472,\n\t\"POSSIBLE\": 29277,\n\t\"EIR\": 19635,\n\t\"obsession\": 12716,\n\t\"mend\": 31009,\n\t\"writer\": 4613,\n\t\"1561\": 25450,\n\t\"punctuation\": 14832,\n\t\"empiricists\": 14942,\n\t\"recap\": 16238,\n\t\"seems\": 2081,\n\t\"Months\": 32408,\n\t\"turista\": 16441,\n\t\"Indian\": 9991,\n\t\"chimney\": 9035,\n\t\"LOVED\": 28776,\n\t\"Architects\": 4484,\n\t\"Otago\": 27661,\n\t\"pinch\": 8157,\n\t\"church's\": 12807,\n\t\"links\": 13761,\n\t\"Soldiers\": 20332,\n\t\"Messina\": 11013,\n\t\"tubes\": 3302,\n\t\"pucker\": 10538,\n\t\"Income\": 19484,\n\t\"skimmer\": 26670,\n\t\"25th\": 15635,\n\t\"Contains\": 16854,\n\t\"Armenians\": 16754,\n\t\"Lots\": 9872,\n\t\"Surrealist\": 10117,\n\t\"3750\": 1039,\n\t\"Passcode\": 23081,\n\t\"Updating\": 22548,\n\t\"Bigger\": 24008,\n\t\"http://www.country-couples.co.uk/datingtips/basic-travel-allowance-bta-dating-scam/\": 27016,\n\t\"WAS\": 27717,\n\t\"prescient\": 8271,\n\t\"anew\": 14046,\n\t\"Hams\": 28362,\n\t\"eggs\": 17830,\n\t\"DONT\": 28183,\n\t\"Luca\": 13204,\n\t\"according\": 4410,\n\t\"tale\": 13606,\n\t\"gyroscope\": 30487,\n\t\"manager\": 5299,\n\t\"Customer\": 15118,\n\t\"collage\": 27514,\n\t\"'\": 3299,\n\t\"boy\": 5765,\n\t\"stretches\": 32807,\n\t\"Hannon\": 22935,\n\t\"frontiersman\": 14786,\n\t\"Sunnis\": 18803,\n\t\"emergencies\": 27940,\n\t\"Lee's\": 16581,\n\t\"refilled\": 31786,\n\t\"co-signing\": 22066,\n\t\"Sullivan\": 22824,\n\t\"permitted\": 7228,\n\t\"endless\": 15016,\n\t\"sounding\": 15796,\n\t\"people\": 33,\n\t\"rightfully\": 16394,\n\t\"liter\": 18023,\n\t\"neo-Nazi\": 20010,\n\t\"deny\": 7258,\n\t\"Monroe\": 17982,\n\t\"251\": 12861,\n\t\"heroes\": 14147,\n\t\"buy\": 3726,\n\t\"newspapers\": 3405,\n\t\"virtually\": 4375,\n\t\"Verch\": 8014,\n\t\"Pace\": 13289,\n\t\"Mustansiriyah\": 18519,\n\t\"contributing\": 11107,\n\t\"Vengeance\": 4220,\n\t\"Lipids\": 27848,\n\t\"shuddering\": 32664,\n\t\"aspect\": 2290,\n\t\"whirred\": 32478,\n\t\"mitigate\": 22715,\n\t\"crab\": 10032,\n\t\"creature\": 10033,\n\t\"cradled\": 15308,\n\t\"jobsite\": 23166,\n\t\"whasssup\": 22750,\n\t\"uncomfortable\": 30742,\n\t\"Menzies\": 4359,\n\t\"Forces\": 9244,\n\t\"spinoff\": 12690,\n\t\"drops\": 8204,\n\t\"claims\": 1065,\n\t\"typology\": 1187,\n\t\"Well-formed\": 30128,\n\t\"Signature\": 16209,\n\t\"Rt\": 28191,\n\t\"Service\": 13504,\n\t\"Buddhist\": 3681,\n\t\"microscopically\": 11303,\n\t\"spinach\": 27773,\n\t\"bisquits\": 32755,\n\t\"dangling\": 30474,\n\t\"Syntactic\": 1094,\n\t\"soapy\": 32095,\n\t\"re-purposing\": 14503,\n\t\"assembly\": 24816,\n\t\"Fish\": 25036,\n\t\"Sequences\": 1854,\n\t\"camera\": 5539,\n\t\"donation\": 13307,\n\t\"GIS\": 2276,\n\t\"soaked\": 17747,\n\t\"law\": 3320,\n\t\"46\": 13485,\n\t\"detonated\": 18507,\n\t\"Response\": 18769,\n\t\"1669\": 16839,\n\t\"Meurtres\": 5393,\n\t\"Pashtun\": 19695,\n\t\"neighbourly\": 13917,\n\t\"panel\": 5899,\n\t\"avoided\": 10229,\n\t\"Tejanos\": 14775,\n\t\"Del\": 26557,\n\t\"reve-\": 7159,\n\t\"iterations\": 30108,\n\t\"Mirandela\": 6564,\n\t\"FRENCH\": 11895,\n\t\"Bin\": 18738,\n\t\"delvery\": 21438,\n\t\"Amore\": 28811,\n\t\"LME\": 21660,\n\t\"谿山\": 14878,\n\t\"scheme\": 13012,\n\t\"here’s\": 7982,\n\t\"silkies\": 27128,\n\t\"Indians\": 4888,\n\t\"generous\": 9803,\n\t\"Gandhi\": 15044,\n\t\"http://www.infoukes.com/history/chornobyl/elg/\": 18708,\n\t\"MP3\": 24600,\n\t\"Rabbits\": 27288,\n\t\"reposted\": 12207,\n\t\"grandmas\": 26270,\n\t\"Taylor\": 3274,\n\t\"substances\": 18032,\n\t\"sexy\": 17994,\n\t\"prayers\": 10125,\n\t\"champion\": 4795,\n\t\"tent\": 17308,\n\t\"RAC\": 22702,\n\t\"grilles\": 32017,\n\t\"Italian\": 3306,\n\t\"fives\": 25508,\n\t\"longer\": 2835,\n\t\"worlds\": 11264,\n\t\"Spiritual\": 23623,\n\t\"ConEd\": 22254,\n\t\"broadband\": 26315,\n\t\"Abstract\": 2068,\n\t\"cluttered\": 30423,\n\t\"Tauris\": 18967,\n\t\"consistency\": 5694,\n\t\"Still\": 8906,\n\t\"scramblers\": 9571,\n\t\"slighter\": 31921,\n\t\"IMU\": 13220,\n\t\"dinasaurs\": 26144,\n\t\"Private\": 22681,\n\t\"Abdul\": 18629,\n\t\"Hwy\": 17461,\n\t\"surrender\": 3581,\n\t\"Haley\": 24432,\n\t\"overwhelming\": 11527,\n\t\"Bugs\": 29731,\n\t\"Janis\": 5543,\n\t\"nicely\": 6525,\n\t\"tells\": 6427,\n\t\"Nails\": 27961,\n\t\"Lennon's\": 25600,\n\t\"hut\": 31275,\n\t\"coded\": 3677,\n\t\"climbing\": 8954,\n\t\"Briefing\": 14580,\n\t\"phase\": 3693,\n\t\"Odd\": 31076,\n\t\"1970s\": 2596,\n\t\"remarkable\": 7966,\n\t\"06\": 25340,\n\t\"Dunno\": 30468,\n\t\"forefront\": 13689,\n\t\"found\": 1861,\n\t\"conditioner\": 14640,\n\t\"beef\": 19006,\n\t\"intrusted\": 31323,\n\t\"devoted\": 4992,\n\t\"Word\": 23090,\n\t\"re-secured\": 24365,\n\t\"Spinner\": 26423,\n\t\"sponsored\": 11545,\n\t\"Quetzalcoatl\": 15358,\n\t\"epistemic\": 1212,\n\t\"Consultation\": 14767,\n\t\"chemistry\": 10622,\n\t\"Detective\": 30393,\n\t\"photographers\": 12948,\n\t\"memoirs\": 3253,\n\t\"specialists\": 13764,\n\t\"reading\": 1026,\n\t\"Tour\": 10850,\n\t\"Then\": 1081,\n\t\"jump\": 13680,\n\t\"paved\": 17500,\n\t\"downhill\": 21352,\n\t\"Sana'a\": 17167,\n\t\"713/853-6197\": 22959,\n\t\"http://loveallpeople.org/usconstitutiona.txt\": 24710,\n\t\"1540s\": 16966,\n\t\"reeks\": 29108,\n\t\"Phrase\": 1137,\n\t\"Universidad\": 962,\n\t\"legend\": 4003,\n\t\"RE\": 21783,\n\t\"meteorological\": 13962,\n\t\"spree\": 18586,\n\t\"quest\": 1604,\n\t\"rating\": 24494,\n\t\"refineries\": 25242,\n\t\"liquidweb.com\": 28880,\n\t\"unexplained\": 32434,\n\t\"amusement\": 15590,\n\t\"Flyers\": 29413,\n\t\"should've\": 14655,\n\t\"yet\": 294,\n\t\"wheeler\": 21899,\n\t\"Preseason\": 22942,\n\t\"info\": 7724,\n\t\"defiance\": 9606,\n\t\"pilgrimages\": 12283,\n\t\"withdrawing\": 24606,\n\t\"Morgan\": 2522,\n\t\"10.1\": 18445,\n\t\"florescent\": 10635,\n\t\"Dorothy\": 32606,\n\t\"Oddy\": 31475,\n\t\"Scot\": 28087,\n\t\"they're\": 6217,\n\t\"PROCEED\": 23035,\n\t\"diagrams\": 15601,\n\t\"Michael.McDermott@spectrongroup.com\": 21234,\n\t\"orthodontist\": 24114,\n\t\"hesitation\": 11064,\n\t\"cliffy\": 16651,\n\t\"Rosenberg\": 30849,\n\t\"brown-pink\": 32642,\n\t\"Ramon\": 9761,\n\t\"RETURNED\": 29855,\n\t\"play\": 338,\n\t\"european\": 26574,\n\t\"Payne\": 23172,\n\t\"Suffolk\": 5205,\n\t\"pictured\": 28517,\n\t\"Barger\": 15493,\n\t\"202\": 11506,\n\t\"www.kaffeeeis.co.nz\": 26970,\n\t\"gruffly\": 32297,\n\t\"Weatherspoon\": 13329,\n\t\"...\": 5368,\n\t\"solely\": 1454,\n\t\"Scientologist\": 12692,\n\t\"Industry’s\": 15135,\n\t\"Dennis\": 5772,\n\t\"kidnapped\": 18501,\n\t\"fluff\": 18386,\n\t\"Rugova\": 19137,\n\t\"exile\": 30999,\n\t\"aired\": 32502,\n\t\"Anna\": 5471,\n\t\"desirability\": 3236,\n\t\"Dudley\": 24668,\n\t\"family’s\": 15033,\n\t\"The\": 53,\n\t\"hilarious\": 9152,\n\t\"Brooklyn\": 10507,\n\t\"seaman's\": 30798,\n\t\"upland\": 25189,\n\t\"cenobitic\": 5915,\n\t\"marketed\": 6845,\n\t\"modus\": 8311,\n\t\"Swede\": 31149,\n\t\"1679\": 4353,\n\t\"promptly\": 28068,\n\t\"landlord\": 11997,\n\t\"1791\": 3517,\n\t\"particles\": 11335,\n\t\"Legislative\": 12460,\n\t\"Quinto\": 13367,\n\t\"Martínez\": 959,\n\t\"Gillies\": 29219,\n\t\"B.\": 7530,\n\t\"coffee\": 8752,\n\t\"grounds\": 11947,\n\t\"Got\": 6507,\n\t\"alarming\": 14236,\n\t\"Versailles\": 22191,\n\t\"rosy\": 25180,\n\t\"HOME\": 29672,\n\t\"waits\": 12756,\n\t\"automated\": 11342,\n\t\"Companies\": 21127,\n\t\"promote\": 786,\n\t\"Television\": 4172,\n\t\"Quaddaffi\": 19409,\n\t\"anxiety\": 9231,\n\t\"powder\": 17848,\n\t\"How's\": 22120,\n\t\"storeys\": 32191,\n\t\"BROKERS\": 28911,\n\t\"ARES\": 11347,\n\t\"arched\": 9402,\n\t\"Shorts\": 17383,\n\t\"gloriously\": 31060,\n\t\"Gothic\": 32491,\n\t\"critics\": 4749,\n\t\"FTU's\": 12406,\n\t\"CIA\": 19277,\n\t\"betrayed\": 14051,\n\t\"04:50\": 23256,\n\t\"carnival\": 27486,\n\t\"distally\": 2875,\n\t\"rainbow\": 18421,\n\t\"cottages\": 31577,\n\t\"KB\": 28076,\n\t\"Wyatt\": 4796,\n\t\"CA\": 11877,\n\t\"uniformity\": 14950,\n\t\"Stai-\": 6462,\n\t\"Beaumarchais\": 3549,\n\t\"collaborated\": 3426,\n\t\"portrait\": 3573,\n\t\"Sonnets\": 949,\n\t\"OBL\": 20665,\n\t\"cutter\": 26049,\n\t\"Maclaurin\": 3255,\n\t\"plurals\": 18074,\n\t\"CONFIDENTIAL\": 24344,\n\t\"good-naturedly\": 31999,\n\t\"conflict\": 1459,\n\t\"ENOUGH\": 29663,\n\t\"presumed\": 1790,\n\t\"Jew\": 5165,\n\t\"perfectionism\": 32955,\n\t\"Finley\": 4157,\n\t\"friend\": 3202,\n\t\"molded\": 17869,\n\t\"Much\": 3937,\n\t\"crap\": 11822,\n\t\"conquest\": 20534,\n\t\"insensitive\": 15189,\n\t\"sank\": 9349,\n\t\"http://www.21stcenturysciencetech.com/articles/chernobyl.html\": 18717,\n\t\"Worker\": 19825,\n\t\"emit\": 27744,\n\t\"prawns\": 27920,\n\t\"Pred\": 7040,\n\t\"idk\": 27003,\n\t\"simulated\": 32834,\n\t\"elite\": 509,\n\t\"http://www.cic.gc.ca/english/immigrate/index.asp\": 27375,\n\t\"maintenance\": 10703,\n\t\"Hermeticism\": 20221,\n\t\"criteria\": 1053,\n\t\"experimenting\": 6901,\n\t\"fathers\": 11175,\n\t\"ebullient\": 18120,\n\t\"mailed\": 20834,\n\t\"PEREZ\": 25394,\n\t\"ringing\": 30226,\n\t\"airplane\": 3126,\n\t\"charity\": 7953,\n\t\"needless\": 11656,\n\t\"tougher\": 31368,\n\t\"liberalize\": 30662,\n\t\"Henderson's\": 23083,\n\t\"prices\": 11635,\n\t\"mod\": 26170,\n\t\"Solicitor\": 7281,\n\t\"Nixon's\": 19832,\n\t\"Brit\": 4505,\n\t\"discussing\": 13688,\n\t\"Nam\": 24618,\n\t\"Spencer’s\": 8827,\n\t\"unarguable\": 27191,\n\t\"t\": 1682,\n\t\"gpa\": 26304,\n\t\"slenderness\": 30490,\n\t\"205\": 26061,\n\t\"indifferent\": 23723,\n\t\"Domenico\": 5083,\n\t\"peoples\": 10072,\n\t\"BT\": 29775,\n\t\"Brazil\": 12580,\n\t\"convening\": 14220,\n\t\"Origination\": 21709,\n\t\"pre-season\": 8069,\n\t\"swell\": 10011,\n\t\"credentialing\": 1447,\n\t\"badges\": 31673,\n\t\"RDBMS\": 24201,\n\t\"transferred\": 12817,\n\t\"Binalshibh\": 20640,\n\t\"muffin\": 17867,\n\t\"bares\": 9527,\n\t\"nosy\": 17626,\n\t\"08:50:01\": 22963,\n\t\"8\": 503,\n\t\"prevents\": 10620,\n\t\"Barbour\": 24433,\n\t\"Grande\": 14723,\n\t\"pursuing\": 20807,\n\t\"node\": 19366,\n\t\"composed\": 16646,\n\t\"payments\": 7853,\n\t\"prop\": 26882,\n\t\"proceedings\": 23786,\n\t\"redvepco.doc\": 21720,\n\t\"lips\": 9422,\n\t\"predictions\": 25156,\n\t\"GROUPS\": 24983,\n\t\"speaks\": 1286,\n\t\"nurses\": 28336,\n\t\"Poverty\": 20012,\n\t\"1200\": 15339,\n\t\"Extensive\": 28204,\n\t\"Deal\": 23555,\n\t\"unnecessarily\": 11609,\n\t\"Biewener\": 2840,\n\t\"Operators\": 2226,\n\t\"hastily\": 12873,\n\t\"École\": 3837,\n\t\"paws\": 27701,\n\t\"further\": 2516,\n\t\"unimaginative\": 30735,\n\t\"stinking\": 9498,\n\t\"GMAT\": 22674,\n\t\"paedophilia\": 25710,\n\t\"Alma\": 5344,\n\t\"regulation\": 1585,\n\t\"consulting\": 22898,\n\t\"unreachable\": 12736,\n\t\"independence\": 14730,\n\t\"monument\": 12664,\n\t\"Denver\": 17498,\n\t\"Kandahar\": 19642,\n\t\"Europeans\": 31965,\n\t\"pills\": 9188,\n\t\"Muggle\": 18281,\n\t\"A&K\": 23826,\n\t\"wikiHow\": 10747,\n\t\"You've\": 25307,\n\t\"newest\": 12787,\n\t\"communicating\": 22847,\n\t\"interpretative\": 7238,\n\t\"shortstop\": 4798,\n\t\"Foreign\": 4417,\n\t\"Mobilising\": 24438,\n\t\"Marsden\": 2416,\n\t\"systems\": 1444,\n\t\"lifehood\": 12353,\n\t\"openly\": 5953,\n\t\"radiometer\": 2609,\n\t\"grip\": 15964,\n\t\"sleepless\": 31036,\n\t\"activate\": 31394,\n\t\"Vogelaviatiolap\": 18071,\n\t\"evolution\": 2863,\n\t\"taste\": 12355,\n\t\"regimes\": 2789,\n\t\"patients'\": 3297,\n\t\"Crisp\": 16247,\n\t\"Galvin\": 24193,\n\t\"Mohammed\": 4519,\n\t\"------------------------------------------------------------------\": 25562,\n\t\"Bea\": 28484,\n\t\"CSA\": 22224,\n\t\"grayish-whitish\": 31096,\n\t\"620-294-4000\": 24014,\n\t\"forty-eight\": 31948,\n\t\"yoga\": 9772,\n\t\"minors\": 4889,\n\t\"Vaughn's\": 4200,\n\t\"thunderous\": 8927,\n\t\"toast\": 16167,\n\t\"momentous\": 14426,\n\t\"now\": 1409,\n\t\"FREE\": 28339,\n\t\"vine\": 31495,\n\t\"PS4\": 26785,\n\t\"Marly\": 22483,\n\t\"wed\": 25296,\n\t\"Minority\": 8448,\n\t\"Qasim\": 4544,\n\t\"parties\": 11788,\n\t\"rolling\": 17412,\n\t\"Centres\": 26029,\n\t\"unknown\": 4019,\n\t\"Ballerina\": 28233,\n\t\"prep\": 11889,\n\t\"clippings\": 3974,\n\t\"Fellow\": 3224,\n\t\"-----\": 24322,\n\t\"Testimony\": 24746,\n\t\"150\": 15106,\n\t\"comprised\": 16509,\n\t\"completion\": 11423,\n\t\"exaggerated\": 4006,\n\t\"politicians\": 12360,\n\t\"adjective\": 1144,\n\t\"Rachel\": 9799,\n\t\"crowded\": 12892,\n\t\"Ontario\": 12598,\n\t\"declare\": 13717,\n\t\"certain\": 6555,\n\t\"divy\": 21900,\n\t\"Farms\": 18898,\n\t\"vented\": 22776,\n\t\"shoulder\": 6372,\n\t\"Cheaper\": 5748,\n\t\"circulate\": 21935,\n\t\"McAuliffe\": 19227,\n\t\"penned\": 13643,\n\t\"takes\": 73,\n\t\"propping\": 26886,\n\t\"Massachusetts\": 3492,\n\t\"Colton\": 5850,\n\t\"03/28/2001\": 23060,\n\t\"burrow\": 10668,\n\t\"Fuad\": 12148,\n\t\"bush's\": 20259,\n\t\"Banshee\": 32349,\n\t\"entertain\": 32778,\n\t\"31,000\": 25084,\n\t\"cache\": 19880,\n\t\"Alford\": 23766,\n\t\"psu\": 2617,\n\t\"boundaries\": 14071,\n\t\"schtick\": 25237,\n\t\"Accident\": 18090,\n\t\"Pettigrews\": 31988,\n\t\"09:45\": 22481,\n\t\"infused\": 7511,\n\t\"hare\": 17331,\n\t\"signal\": 14957,\n\t\"Thailand's\": 12181,\n\t\"tablet\": 26685,\n\t\"unjustified\": 15190,\n\t\"Cost\": 10055,\n\t\"cannon\": 27203,\n\t\"HARRIS’\": 14357,\n\t\"21.0\": 2123,\n\t\"reach\": 3864,\n\t\"Muslim\": 7243,\n\t\"sunrise\": 17100,\n\t\"fully\": 295,\n\t\"first-class\": 31310,\n\t\"mourir\": 4059,\n\t\"HAMSTERS\": 26567,\n\t\"investigate\": 314,\n\t\"AVOID\": 29229,\n\t\"Estonia\": 12133,\n\t\"respect\": 898,\n\t\"0417\": 22248,\n\t\"retiring\": 19423,\n\t\"hairnets\": 31688,\n\t\"Thamir\": 19332,\n\t\"produced\": 2209,\n\t\"reviewing\": 14531,\n\t\"coupling\": 32728,\n\t\"inferences\": 2892,\n\t\"relies\": 11306,\n\t\"sunflower\": 17863,\n\t\"Microbiologist\": 20744,\n\t\"pediatrician\": 6764,\n\t\"lover\": 28442,\n\t\"Tomb\": 30400,\n\t\"regress\": 1221,\n\t\"instance\": 456,\n\t\"Immortal\": 5505,\n\t\"England\": 4327,\n\t\"Harari\": 20348,\n\t\"thankful\": 21741,\n\t\"pawing\": 27691,\n\t\"llo\": 18108,\n\t\"Auchintoul\": 4456,\n\t\"synodis\": 5115,\n\t\"EPA\": 25935,\n\t\"accenting\": 32694,\n\t\"paradoxically\": 27818,\n\t\"halls\": 12619,\n\t\"ew\": 6829,\n\t\"Tear\": 24705,\n\t\"Manmohan\": 19166,\n\t\"sadness\": 14175,\n\t\"Englishman's\": 31591,\n\t\"hurt\": 7014,\n\t\";-)\": 27467,\n\t\"communicator\": 29815,\n\t\"ambitions\": 20541,\n\t\"palaces\": 16814,\n\t\"pro-establishment\": 12408,\n\t\"jeopardy\": 31268,\n\t\"SAT\": 15648,\n\t\"doubt\": 7115,\n\t\"From\": 1713,\n\t\"Mid\": 23531,\n\t\"bumfluff\": 32935,\n\t\"LATER\": 11934,\n\t\"Confidential\": 23275,\n\t\"FrameNet\": 3796,\n\t\"Do\": 46,\n\t\"Nesf\": 16730,\n\t\"resourceful\": 32436,\n\t\"Guards\": 18918,\n\t\"supervisor\": 19969,\n\t\"thus\": 514,\n\t\"Stars\": 28131,\n\t\"3.4\": 14805,\n\t\"U.S.\": 3515,\n\t\"forthcoming\": 13056,\n\t\"ecology\": 25046,\n\t\"procreating\": 23899,\n\t\"PlayStation\": 12557,\n\t\"carcass\": 31174,\n\t\"Sport\": 5209,\n\t\"conferences\": 12647,\n\t\"science\": 411,\n\t\"hosting\": 12697,\n\t\"iceberg\": 8437,\n\t\"lions\": 25085,\n\t\"birthright\": 7952,\n\t\"collective\": 13964,\n\t\"łodzianie\": 16886,\n\t\"Inferior\": 17532,\n\t\"ethnicity\": 10864,\n\t\"chnages\": 23559,\n\t\"4chan\": 12691,\n\t\"supports\": 5873,\n\t\"shed\": 529,\n\t\"probabition\": 11721,\n\t\"#writinglife\": 7664,\n\t\"cenote\": 17004,\n\t\"1st\": 4178,\n\t\"Linguistic\": 3382,\n\t\"battle\": 5903,\n\t\"factory\": 10462,\n\t\"trek\": 17287,\n\t\"Peters\": 21279,\n\t\"crum\": 11730,\n\t\"Frozen\": 8004,\n\t\"male\": 5638,\n\t\"adequately\": 11640,\n\t\"astride\": 25775,\n\t\"Truffaut\": 5413,\n\t\"someone’s\": 2076,\n\t\"Ichiyo\": 4652,\n\t\"possibilities\": 12007,\n\t\"basso\": 30461,\n\t\"thought-nourishing\": 30611,\n\t\"apart\": 6006,\n\t\"Dog’s\": 9797,\n\t\"donate\": 10785,\n\t\"HR\": 21370,\n\t\"burgers\": 23244,\n\t\"producing\": 10802,\n\t\"Syracuse\": 11683,\n\t\"homogeneous\": 14933,\n\t\"cascade\": 8748,\n\t\"explosion\": 17927,\n\t\"My\": 3381,\n\t\"arts\": 246,\n\t\"U.N.\": 12228,\n\t\"guiltily\": 30583,\n\t\"MARK\": 24781,\n\t\"Nava\": 4952,\n\t\"9.95\": 21923,\n\t\"Strzalka\": 29913,\n\t\"flowered\": 25117,\n\t\"neoconservative\": 18882,\n\t\"Deer\": 17131,\n\t\"queries\": 29311,\n\t\"’re\": 7760,\n\t\"duplicate\": 22608,\n\t\"shipyard\": 19609,\n\t\"inception\": 3047,\n\t\"virulent\": 13810,\n\t\"plus\": 6041,\n\t\"Customs\": 11183,\n\t\"precious\": 29624,\n\t\"1087\": 15242,\n\t\"swirling\": 9400,\n\t\"biceps\": 9512,\n\t\"pantheons\": 15356,\n\t\"co-ordination\": 22620,\n\t\"Fill\": 17726,\n\t\"massive\": 12798,\n\t\"Mart\": 25854,\n\t\"shaker\": 30696,\n\t\"relieved\": 5067,\n\t\"Electrical\": 2059,\n\t\"FY04\": 24473,\n\t\"Framework\": 2421,\n\t\"fame\": 3615,\n\t\"touching\": 5257,\n\t\"Scorpio\": 25297,\n\t\"Seince\": 27603,\n\t\"delayed\": 7396,\n\t\"reccommend\": 28360,\n\t\"peppers\": 15774,\n\t\"discount\": 1435,\n\t\"Sailing\": 25807,\n\t\"Deixis\": 3735,\n\t\"Levantine\": 30730,\n\t\"directed\": 5407,\n\t\"emotion\": 67,\n\t\"recognizable\": 15042,\n\t\"Immigration\": 19348,\n\t\"stub\": 20103,\n\t\"snarl\": 30828,\n\t\"Set\": 16316,\n\t\"Europass\": 27531,\n\t\"becca\": 26357,\n\t\"http://www.amazon.ca/exec/obidos/ASIN/0915765381/701-3377456-8181939\": 19389,\n\t\"narrow\": 14082,\n\t\"resistance\": 13186,\n\t\"Awsat\": 18557,\n\t\"MMPI\": 10734,\n\t\"Sahaf\": 19290,\n\t\"Expansion\": 21048,\n\t\"n\": 1662,\n\t\"EDGE\": 10576,\n\t\"draft\": 11446,\n\t\"adults\": 8485,\n\t\"admins\": 10772,\n\t\"best\": 3728,\n\t\"elsewhere\": 7613,\n\t\"Browns\": 16433,\n\t\"Discount\": 28895,\n\t\"drawing\": 12069,\n\t\"Stephanie\": 22987,\n\t\"TOWNSHIP\": 29955,\n\t\"inordinate\": 30741,\n\t\"He’s\": 8696,\n\t\"genders\": 18076,\n\t\"expectations\": 10904,\n\t\"Granger\": 29911,\n\t\"scoring\": 13075,\n\t\"Fifteen\": 18677,\n\t\"fabulous\": 26906,\n\t\"warning\": 4946,\n\t\"Lisa\": 23756,\n\t\"trap\": 26255,\n\t\"Third\": 7357,\n\t\"soya\": 32829,\n\t\"Breeding\": 27839,\n\t\"Dumb\": 28612,\n\t\"fro\": 8941,\n\t\"Stendhal's\": 30764,\n\t\"suburb\": 10995,\n\t\"communicative\": 29882,\n\t\"compel\": 18895,\n\t\"Tim\": 6995,\n\t\"affected\": 2361,\n\t\"Champs\": 16981,\n\t\"inks\": 18942,\n\t\"Nordau\": 20195,\n\t\"O'Toole\": 5817,\n\t\"shameful\": 24681,\n\t\"irons\": 27585,\n\t\"Plate\": 23005,\n\t\"bounce\": 20995,\n\t\"christian\": 20314,\n\t\"assembled\": 520,\n\t\"Goldmann\": 22302,\n\t\"feeble\": 25711,\n\t\"1932\": 4529,\n\t\"Hope\": 12130,\n\t\"historical\": 1726,\n\t\"limbo\": 29895,\n\t\"glaring\": 19506,\n\t\"interception\": 19592,\n\t\"OOTD\": 15749,\n\t\"tried\": 3280,\n\t\"Scott\": 7542,\n\t\"non-nylon\": 32512,\n\t\"BC\": 22537,\n\t\"Offers\": 23280,\n\t\"whiteboard\": 27933,\n\t\"unworthy\": 14062,\n\t\"leaders\": 4039,\n\t\"Associates\": 22836,\n\t\"Machines\": 14196,\n\t\"foresee\": 19495,\n\t\"09:52\": 23863,\n\t\"wan\": 6366,\n\t\"Kenneth\": 7842,\n\t\"town\": 4070,\n\t\"impressed\": 4943,\n\t\"emailed\": 10909,\n\t\"Workmanship\": 29963,\n\t\"penines\": 26181,\n\t\"Bing\": 10552,\n\t\"batches\": 8222,\n\t\"Inad\": 19326,\n\t\"military\": 3510,\n\t\"corridors\": 13906,\n\t\"Malbec\": 16242,\n\t\"@W.a.b.b.y\": 27647,\n\t\"Corell\": 25154,\n\t\"applause\": 30607,\n\t\"followup\": 28338,\n\t\"Hermitage\": 16215,\n\t\"seeking\": 4365,\n\t\"prehistoric\": 30338,\n\t\"CEO\": 13044,\n\t\"84838389593\": 27553,\n\t\"Monday\": 11106,\n\t\"Trust\": 28230,\n\t\"Mulberry\": 28771,\n\t\"PivotTable\": 30069,\n\t\"freight\": 23018,\n\t\"mozzarella\": 17771,\n\t\"Johnnie\": 12550,\n\t\"vast\": 629,\n\t\"imagined\": 8640,\n\t\"AMAZINGLY\": 28766,\n\t\"waiter\": 27507,\n\t\"PhD\": 555,\n\t\"Turkmenistan\": 16496,\n\t\"asshole\": 8547,\n\t\"L.\": 3790,\n\t\"Seller's\": 23020,\n\t\"Cyrus\": 5285,\n\t\"Yeoncheon\": 12882,\n\t\"Kingston\": 29257,\n\t\"adaptation\": 2957,\n\t\"Bethesda\": 29425,\n\t\"***\": 19297,\n\t\"_______\": 22979,\n\t\"Overhead\": 9990,\n\t\"Delivery\": 11944,\n\t\"Joan\": 5837,\n\t\"La\": 5474,\n\t\"hubs\": 12934,\n\t\"Berkeley's\": 3660,\n\t\"3611\": 21886,\n\t\"hardness\": 27880,\n\t\"accepting\": 17616,\n\t\"be\": 281,\n\t\"sweater\": 6483,\n\t\"hoodie\": 27430,\n\t\"peat\": 17730,\n\t\"soaking\": 26412,\n\t\"advantages\": 10776,\n\t\"fecal\": 10494,\n\t\"civet\": 24872,\n\t\"Noise\": 26416,\n\t\"Ironically\": 17630,\n\t\"Zero\": 7127,\n\t\"funds\": 5869,\n\t\"Petronios\": 5990,\n\t\"defamation\": 20559,\n\t\"biking\": 27555,\n\t\"keeps\": 9552,\n\t\"1574\": 25492,\n\t\"justified\": 20531,\n\t\"variety\": 2966,\n\t\"Billy\": 22966,\n\t\"Peace\": 11174,\n\t\"apartments\": 28775,\n\t\"attempting\": 2003,\n\t\"dressers\": 17353,\n\t\"built\": 112,\n\t\"worse\": 6753,\n\t\"Newport\": 24798,\n\t\"soared\": 16891,\n\t\"Danly\": 4708,\n\t\"counties\": 12924,\n\t\"household\": 2085,\n\t\"centered\": 5492,\n\t\"Lines\": 17449,\n\t\"Drive\": 22186,\n\t\"graduated\": 4818,\n\t\"mathematical\": 3229,\n\t\"ought\": 14973,\n\t\"carters’\": 10039,\n\t\"stuffs\": 28247,\n\t\"unhappily\": 14072,\n\t\"Outer\": 17567,\n\t\"happiness\": 24632,\n\t\"Madison\": 30254,\n\t\"occupy\": 7582,\n\t\"stole\": 29726,\n\t\"Foulkesstraat\": 24958,\n\t\"playful\": 17983,\n\t\"cancelled\": 11490,\n\t\"reproduced\": 2463,\n\t\"04:18\": 21207,\n\t\"Levi`s\": 21261,\n\t\"colour\": 221,\n\t\"HECS\": 2116,\n\t\"today\": 2146,\n\t\"over-simplifying\": 27118,\n\t\"Waste\": 8048,\n\t\"unresponsive\": 26250,\n\t\"recovered\": 3578,\n\t\"sneak\": 18172,\n\t\"Lotus\": 24178,\n\t\"Cay\": 27498,\n\t\"crate\": 27537,\n\t\"angrily\": 31985,\n\t\"Stepsister\": 4089,\n\t\"domestication\": 15293,\n\t\"1.\": 1774,\n\t\"Bard\": 13693,\n\t\"beams\": 15546,\n\t\"trilby\": 32634,\n\t\"fixations\": 205,\n\t\"888.916.7184\": 23321,\n\t\"Bumrungrad\": 26644,\n\t\"conclude\": 1714,\n\t\"Nation’s\": 14334,\n\t\"Wolfowitz\": 25975,\n\t\"transcend\": 8439,\n\t\"|\": 22018,\n\t\"mastery\": 8479,\n\t\"hypnotized\": 17794,\n\t\"Far\": 10023,\n\t\"Certeau’s\": 3093,\n\t\"rough\": 2667,\n\t\"100,000\": 13511,\n\t\"Scallops\": 29487,\n\t\"liberty\": 3593,\n\t\"contact\": 7167,\n\t\"Chan\": 12402,\n\t\"Westfield\": 28190,\n\t\"www.veraakulov.com\": 28937,\n\t\"calculus\": 3150,\n\t\"cultivating\": 13276,\n\t\"salesperson\": 28561,\n\t\"reassure\": 26498,\n\t\"proceeding\": 7554,\n\t\"Angels\": 17547,\n\t\"62nd\": 13080,\n\t\"drawstring\": 17675,\n\t\"coherence\": 32596,\n\t\"realms\": 8180,\n\t\"delivers\": 28963,\n\t\"retailing\": 31750,\n\t\"helpful\": 1061,\n\t\"hearings\": 11574,\n\t\"respond\": 2009,\n\t\"catch\": 4945,\n\t\"Justifies\": 6596,\n\t\"SSRIs\": 13582,\n\t\"Sinica\": 3423,\n\t\"nodes\": 13942,\n\t\"Phillip\": 14495,\n\t\"Perseverance\": 15240,\n\t\"highlands\": 15365,\n\t\"14th\": 16888,\n\t\"nut\": 17900,\n\t\"repeatable\": 22615,\n\t\"Cambridge\": 3491,\n\t\"Targets\": 26092,\n\t\"gracious\": 24373,\n\t\"3,202.61\": 23812,\n\t\"Bottle\": 6820,\n\t\"Agent\": 10913,\n\t\"Mail\": 12700,\n\t\"Guadeloupe\": 16627,\n\t\"713/345-7942\": 22297,\n\t\"Parisians\": 27006,\n\t\"Cards\": 29433,\n\t\"indolence\": 32929,\n\t\"rooting\": 19295,\n\t\"Cypriots\": 31355,\n\t\"ESSG\": 22148,\n\t\"affects\": 8497,\n\t\"professionalism\": 28073,\n\t\"how\": 52,\n\t\"Trader\": 29200,\n\t\"Wolstein\": 16435,\n\t\"Xmas\": 21999,\n\t\"rob\": 4947,\n\t\"Blair\": 9341,\n\t\"legato\": 11283,\n\t\"Kaufman\": 21385,\n\t\"Ummmm\": 27977,\n\t\"References\": 30193,\n\t\"women\": 4719,\n\t\"IRIS\": 2409,\n\t\"settle\": 19549,\n\t\"herein\": 10111,\n\t\"ornithology\": 17220,\n\t\"resurrect\": 23718,\n\t\"bearded\": 26354,\n\t\"Blank\": 31446,\n\t\"reorganization\": 2864,\n\t\"mission\": 4335,\n\t\"Southern\": 5584,\n\t\"#logos\": 7822,\n\t\"Betty’s\": 8639,\n\t\"teaspoons\": 17847,\n\t\"caches\": 19575,\n\t\"96/23\": 31366,\n\t\"16.3\": 26981,\n\t\"queue\": 10656,\n\t\"Buying\": 26399,\n\t\"haphazardly\": 32018,\n\t\"boyfriend's\": 29517,\n\t\"grand\": 12331,\n\t\"humiliation\": 18639,\n\t\"Freemasonry\": 3633,\n\t\"ceremoniously\": 12898,\n\t\"Basing\": 18124,\n\t\"fused\": 29070,\n\t\"conservatives\": 7845,\n\t\"outcast\": 20414,\n\t\"To\": 1175,\n\t\"bilateral\": 13898,\n\t\"submovements\": 30282,\n\t\"gently\": 8777,\n\t\"theories\": 3701,\n\t\"2,000\": 13935,\n\t\"Preamble\": 25191,\n\t\"prepayment\": 23615,\n\t\"Ruth\": 11806,\n\t\"Learning\": 14988,\n\t\"OR\": 11848,\n\t\"Problems\": 30678,\n\t\"snooty\": 27090,\n\t\"ld2d-#69366-1.DOC\": 22432,\n\t\"consequence\": 3328,\n\t\"gangster's\": 5399,\n\t\"state's\": 20014,\n\t\"dance\": 5254,\n\t\"posters\": 12704,\n\t\"King's\": 4203,\n\t\"morbidly\": 32943,\n\t\"Supporters\": 24663,\n\t\"http://www.laweekly.com/general/features/satan-loves-you/13454/\": 20092,\n\t\"Naji\": 19264,\n\t\"Janell's\": 23588,\n\t\"Hohokam\": 17060,\n\t\"replications\": 2512,\n\t\"Approx\": 29848,\n\t\"somebody\": 6352,\n\t\"Fostering\": 27448,\n\t\"Coffman\": 23767,\n\t\"Rover\": 28107,\n\t\"lecture\": 6367,\n\t\"moisture\": 2572,\n\t\"Trouble\": 19507,\n\t\"Strategic\": 25760,\n\t\"dings\": 27867,\n\t\"incrustation\": 10016,\n\t\"Severin\": 11457,\n\t\"Valeska\": 12803,\n\t\"chromatograph\": 23640,\n\t\"edging\": 32125,\n\t\"months\": 3904,\n\t\"striving\": 14013,\n\t\"Désiré\": 5424,\n\t\"Ono\": 25630,\n\t\"lectures\": 5610,\n\t\"skater\": 20514,\n\t\"uncontaminated\": 18732,\n\t\"catcher\": 4805,\n\t\"wounded\": 3574,\n\t\"probability\": 3119,\n\t\"’\": 236,\n\t\"thru\": 21443,\n\t\"wave\": 2682,\n\t\"our\": 166,\n\t\"sice\": 29132,\n\t\"Park\": 4938,\n\t\"0.2\": 2630,\n\t\"moonlight\": 9485,\n\t\"Camille\": 25127,\n\t\"pretending\": 14975,\n\t\"temperatures\": 2628,\n\t\"Sussexs\": 27140,\n\t\"Stan's\": 22936,\n\t\"Netflix\": 4181,\n\t\"segregation\": 15039,\n\t\"attempts\": 1443,\n\t\"touristy\": 16665,\n\t\"Wash\": 17773,\n\t\"Trivial\": 22093,\n\t\"Shady\": 29059,\n\t\"Poet\": 11015,\n\t\"Sausage\": 26350,\n\t\"Killifish\": 27840,\n\t\"swindles\": 30732,\n\t\"bowed\": 32121,\n\t\"excluding\": 20901,\n\t\"musculature\": 2866,\n\t\"Kushnick\": 23381,\n\t\"Heidelberg\": 3195,\n\t\"Woo\": 6266,\n\t\"dudes\": 21879,\n\t\"anticipation\": 31685,\n\t\"Regards\": 21091,\n\t\"Cortese's\": 5845,\n\t\"García\": 990,\n\t\"Akashi\": 19059,\n\t\"willingly\": 18514,\n\t\"manifest\": 25701,\n\t\"lemons\": 16205,\n\t\"ski\": 20490,\n\t\"SOFTware\": 24189,\n\t\"tugged\": 9063,\n\t\"energetics\": 2917,\n\t\"dah\": 6338,\n\t\"agony\": 14123,\n\t\"wife\": 3486,\n\t\"Eric\": 3942,\n\t\"midterm\": 26097,\n\t\"grinning\": 32166,\n\t\"WNBA\": 22937,\n\t\"inhaler\": 8855,\n\t\"contacted\": 7168,\n\t\"clanged\": 32246,\n\t\"consequently\": 2804,\n\t\"forests\": 30993,\n\t\"510-642-5145\": 22452,\n\t\"trading\": 16292,\n\t\"doldrums\": 8269,\n\t\"LIFE\": 11907,\n\t\"Moriori\": 16255,\n\t\"wantons\": 28877,\n\t\"uniformed\": 30559,\n\t\"shop-window\": 31064,\n\t\"gripped\": 20159,\n\t\"Banczak\": 21726,\n\t\"Factors\": 26096,\n\t\"Tattoo\": 28058,\n\t\"semicolon\": 23476,\n\t\"patrol\": 25784,\n\t\"Considered\": 19807,\n\t\"rip\": 13769,\n\t\"tarjeta\": 16439,\n\t\"Hanrahan\": 4911,\n\t\"Joy\": 21800,\n\t\"uniforms\": 18535,\n\t\"loopy\": 16086,\n\t\"enigma\": 31081,\n\t\"ruined\": 27178,\n\t\"recurring\": 1523,\n\t\"Pygmalion\": 5478,\n\t\"muddying\": 1281,\n\t\"Sci\": 8280,\n\t\"humanity\": 8353,\n\t\"you've\": 6029,\n\t\"?!?!?\": 20023,\n\t\"armatures\": 26266,\n\t\"WEEKS\": 27955,\n\t\"Kelley\": 22072,\n\t\"rightly\": 7270,\n\t\"dec\": 7647,\n\t\"panorama\": 16720,\n\t\"mysterious\": 25334,\n\t\"Automotives\": 30020,\n\t\"Regional\": 4850,\n\t\"pillar\": 13159,\n\t\"Community\": 14477,\n\t\"virtue\": 14844,\n\t\"PRC\": 21027,\n\t\"matching\": 21817,\n\t\"sogged\": 30345,\n\t\"haze\": 30890,\n\t\"logically\": 31442,\n\t\"(countries|regions)\": 30182,\n\t\"storyworld\": 2943,\n\t\"ALSO\": 11900,\n\t\"medicine\": 3190,\n\t\"Tam\": 12492,\n\t\"Clear\": 15945,\n\t\"489\": 26044,\n\t\"psychoanalysis\": 11274,\n\t\"swiffer\": 26280,\n\t\"Demosisto's\": 12457,\n\t\"floating\": 6258,\n\t\"See\": 3619,\n\t\"conditions\": 788,\n\t\"Reine\": 4015,\n\t\"gigantic\": 9456,\n\t\"tart\": 15846,\n\t\"postseason\": 4930,\n\t\"Mécanique\": 3247,\n\t\"Hume\": 14947,\n\t\"Anwar\": 20814,\n\t\"belief\": 8894,\n\t\"brigade\": 20494,\n\t\"facility\": 12535,\n\t\"dissolve\": 18454,\n\t\"to's\": 26701,\n\t\"Today's\": 7553,\n\t\"Lugli\": 12345,\n\t\"traffickers\": 14197,\n\t\"Publishing\": 8284,\n\t\"juvenile\": 27739,\n\t\"BRIEF\": 14913,\n\t\"innocent\": 9216,\n\t\"Sent\": 7038,\n\t\"deterioration\": 18683,\n\t\"conceivably\": 25824,\n\t\"PRICES\": 29660,\n\t\"galloped\": 9045,\n\t\"configurations\": 993,\n\t\"palps\": 10052,\n\t\"haemorrhage\": 25599,\n\t\"clear\": 2021,\n\t\"DF\": 22721,\n\t\"dissipation\": 25698,\n\t\"shanties\": 31949,\n\t\"camps\": 16284,\n\t\"drills\": 26835,\n\t\"Perkins\": 13407,\n\t\"Hard\": 8001,\n\t\"correct\": 2155,\n\t\"56A\": 17027,\n\t\"varietal\": 28964,\n\t\"slid\": 32152,\n\t\"veritable\": 25065,\n\t\"Interview\": 10365,\n\t\"Civilized\": 20433,\n\t\"harangue\": 30852,\n\t\"Yahoo!\": 10553,\n\t\"El\": 12226,\n\t\"Nepalese\": 19502,\n\t\"Tiananmen\": 16778,\n\t\"Guaranties\": 22303,\n\t\"theoretically\": 3820,\n\t\"shavings\": 16231,\n\t\"Disease\": 20824,\n\t\"geometric\": 2801,\n\t\"Annex\": 22230,\n\t\"offering\": 3019,\n\t\"postdoctoral\": 10238,\n\t\"snotty\": 31932,\n\t\"---------------------------\": 24672,\n\t\"GA\": 22459,\n\t\"3-1663\": 21283,\n\t\"SMOKE\": 28756,\n\t\"Salon\": 29243,\n\t\"gateway\": 16450,\n\t\"brigades\": 20669,\n\t\"---------------------------------------------------------------------\": 25392,\n\t\"non-violent\": 29746,\n\t\"streetlamps\": 32879,\n\t\"rings\": 7796,\n\t\"11/08/2000\": 21379,\n\t\"post-war\": 18909,\n\t\"forethought\": 8029,\n\t\"PHILLY\": 29945,\n\t\"facilitated\": 19705,\n\t\"Touch\": 29584,\n\t\"Gawker.com\": 12696,\n\t\"delivered\": 3736,\n\t\"Securities\": 22520,\n\t\"sheer\": 25285,\n\t\"capital\": 3514,\n\t\"gatherings\": 29224,\n\t\"buyers\": 25226,\n\t\"public\": 612,\n\t\"unanimity\": 31510,\n\t\"reports\": 11820,\n\t\"Globalflash\": 21312,\n\t\"Quality\": 8166,\n\t\"style\": 6553,\n\t\"RASER\": 11794,\n\t\"Pottstown\": 29947,\n\t\"endeavors\": 15059,\n\t\"makers\": 5479,\n\t\"logical\": 8067,\n\t\"depot\": 17122,\n\t\"79\": 19600,\n\t\"retrieved\": 22839,\n\t\"77042-2016\": 22901,\n\t\"surge\": 12784,\n\t\"dependent\": 19560,\n\t\"20's\": 27626,\n\t\"sad\": 8764,\n\t\"clung\": 9931,\n\t\"Malaysia\": 1477,\n\t\"NC\": 8263,\n\t\"Bio\": 13972,\n\t\"Astronomy\": 24459,\n\t\"interventions\": 1627,\n\t\"Cincinnati\": 3598,\n\t\"Front\": 14301,\n\t\"interruptions\": 4751,\n\t\"lantern\": 12900,\n\t\"confronting\": 18855,\n\t\"junk\": 6140,\n\t\"glands\": 24052,\n\t\"Chester\": 28265,\n\t\"dispose\": 11647,\n\t\"Kindopp\": 24591,\n\t\"Signac\": 21149,\n\t\"ENRONONLINE\": 23032,\n\t\"traumas\": 25662,\n\t\"lounge\": 29345,\n\t\"Leopold\": 4260,\n\t\"culinary\": 8112,\n\t\"nipping\": 8574,\n\t\"20515\": 11590,\n\t\"located\": 5199,\n\t\"spirits\": 10179,\n\t\"stables\": 26822,\n\t\"Lounge\": 28643,\n\t\"observer\": 215,\n\t\"agenda\": 14276,\n\t\"Theodore\": 5909,\n\t\"migration\": 13008,\n\t\"clicking\": 21060,\n\t\"same\": 255,\n\t\"Method\": 17705,\n\t\"Cannon\": 11589,\n\t\"coursed\": 9678,\n\t\"group\": 370,\n\t\"previously\": 1028,\n\t\"troop\": 14261,\n\t\"returning\": 21748,\n\t\"final\": 818,\n\t\"Bascom\": 29198,\n\t\"coincidentally\": 15186,\n\t\"advice\": 3876,\n\t\"realtion\": 26759,\n\t\"hisses\": 27690,\n\t\"Midas\": 29583,\n\t\"transplants\": 16510,\n\t\"promulgate\": 10547,\n\t\"Nairobi\": 14560,\n\t\"natural\": 1728,\n\t\"Deteriorating\": 19523,\n\t\"Condoleeza\": 24377,\n\t\"youngsteers\": 29742,\n\t\"inequity\": 11657,\n\t\"pixel\": 26217,\n\t\"1975\": 3737,\n\t\"Staff\": 20593,\n\t\"Spock\": 6728,\n\t\"minimizing\": 23286,\n\t\"recount\": 10529,\n\t\"advising\": 29901,\n\t\"2.00\": 24463,\n\t\"prospects\": 11547,\n\t\"hush\": 32729,\n\t\"scoreboard\": 13105,\n\t\"encompasses\": 15001,\n\t\"Birdman\": 11096,\n\t\"highway\": 17238,\n\t\"add\": 1406,\n\t\"nicer\": 27631,\n\t\"souvenirs\": 27556,\n\t\"onpeak\": 21590,\n\t\"Tryst\": 13998,\n\t\"1,426\": 13178,\n\t\"prevailed\": 14324,\n\t\"belonging\": 19335,\n\t\"@Hatmanone\": 27652,\n\t\"furniture\": 3620,\n\t\"sub-par\": 27991,\n\t\"ADA\": 29599,\n\t\"Readers\": 3038,\n\t\"practiced\": 5997,\n\t\"Imitation\": 4151,\n\t\"Gruen\": 11376,\n\t\"Syntax\": 5620,\n\t\"interferences\": 14223,\n\t\"Humvees\": 14659,\n\t\"Senators\": 14354,\n\t\"challenges\": 1601,\n\t\"plains\": 17415,\n\t\"Ph.D.\": 3358,\n\t\"Secret\": 10912,\n\t\"battered\": 9748,\n\t\"Colette\": 13463,\n\t\"homepage\": 12723,\n\t\"Owing\": 16865,\n\t\"tuned\": 20454,\n\t\"Ouija\": 7003,\n\t\"Otherwise\": 6691,\n\t\"sustains\": 8066,\n\t\"Rathke\": 12183,\n\t\"treatise\": 5114,\n\t\"plurality\": 13997,\n\t\"alchemy\": 32591,\n\t\"cruising\": 30873,\n\t\"Core\": 11821,\n\t\"Cucumber\": 17198,\n\t\"hammie\": 26762,\n\t\"Cremona\": 25498,\n\t\"arsenals\": 25832,\n\t\"BRAY\": 31691,\n\t\"Nie\": 24789,\n\t\"expanse\": 31099,\n\t\"overthrow\": 4537,\n\t\"WE\": 11882,\n\t\"MILNET\": 25774,\n\t\"forever\": 5972,\n\t\"surpassing\": 25870,\n\t\"Arrogance\": 17595,\n\t\"night's\": 31717,\n\t\"Amrullah\": 19651,\n\t\"recipe\": 17832,\n\t\"Chavez\": 19372,\n\t\"spacious\": 26489,\n\t\"Records\": 23686,\n\t\"Epistemic\": 1198,\n\t\"Didn't\": 6644,\n\t\"country's\": 12843,\n\t\"frequencies\": 2694,\n\t\"resume\": 21285,\n\t\"smoothing\": 32251,\n\t\"FRS\": 3102,\n\t\"mash\": 26653,\n\t\"presenting\": 13024,\n\t\"Munafò\": 2438,\n\t\"cent\": 13891,\n\t\"Noir\": 16198,\n\t\"uninhabited\": 16653,\n\t\"nonjudgmental\": 28936,\n\t\"occurring\": 1872,\n\t\"heating\": 2133,\n\t\"trained\": 6722,\n\t\"soil\": 2571,\n\t\"dwibbling\": 6822,\n\t\"affirming\": 14423,\n\t\"singing\": 8706,\n\t\"indigenous\": 13950,\n\t\"feathery\": 26853,\n\t\"outdated\": 29014,\n\t\"transported\": 19622,\n\t\"Miller\": 1572,\n\t\"Latter\": 19986,\n\t\"dislocated\": 18237,\n\t\"edged\": 8686,\n\t\"civilisation\": 16264,\n\t\"milliliters\": 18022,\n\t\"Cuthbert\": 5777,\n\t\"wherever\": 6063,\n\t\"a.k.a.\": 25469,\n\t\"curiously\": 31842,\n\t\"Gerulaitis\": 13369,\n\t\"species'\": 25129,\n\t\"scheduled\": 11418,\n\t\"Mazda\": 29835,\n\t\"pas\": 4050,\n\t\"Kos\": 20258,\n\t\"specifically\": 1557,\n\t\"Hungarians\": 31864,\n\t\"indication\": 2385,\n\t\"sponsered\": 25529,\n\t\"Nguyen\": 26510,\n\t\"woken\": 29449,\n\t\"Tagesspiegel\": 25736,\n\t\"theoretical\": 2670,\n\t\"uploads\": 5229,\n\t\"Disinformation\": 20439,\n\t\"carnations\": 32400,\n\t\"Haut\": 16647,\n\t\"squish\": 6941,\n\t\"xxx\": 11757,\n\t\"winning\": 7475,\n\t\"Yards\": 29343,\n\t\"TRUE\": 29755,\n\t\"rnb\": 16705,\n\t\"division\": 14335,\n\t\"LaGuardia\": 16538,\n\t\"IE\": 12767,\n\t\"mushrooms\": 18403,\n\t\"Microsoft\": 8267,\n\t\"BUT\": 11905,\n\t\"Lists\": 24931,\n\t\"Who\": 5376,\n\t\"camp\": 12367,\n\t\"ticks\": 27192,\n\t\"gratefully\": 25016,\n\t\"lives\": 4991,\n\t\"attractions\": 16425,\n\t\"info@travelheels.dk\": 17305,\n\t\"aficionados\": 27488,\n\t\"Hadibo\": 17143,\n\t\"dogs\": 5320,\n\t\"counts\": 14459,\n\t\"bans\": 25477,\n\t\"seen\": 6128,\n\t\"missile\": 10429,\n\t\"advancement\": 25280,\n\t\"stout\": 31299,\n\t\"08:55\": 23191,\n\t\"DI\": 24255,\n\t\"module\": 24810,\n\t\"privately\": 3193,\n\t\"very\": 282,\n\t\"commemorate\": 16363,\n\t\"eg.\": 21036,\n\t\"Lucius\": 32311,\n\t\"underdog\": 9651,\n\t\"Remember\": 7340,\n\t\"Colonel\": 4424,\n\t\"Talkboys\": 6982,\n\t\"stick\": 6395,\n\t\"Listing\": 2307,\n\t\"amoung\": 24245,\n\t\"goes\": 2190,\n\t\"thyroid\": 18673,\n\t\"demo\": 11390,\n\t\"Congressional\": 14131,\n\t\"pumped\": 27295,\n\t\"Pennysaver\": 28245,\n\t\"i.e.\": 2719,\n\t\"democrats\": 20818,\n\t\"Lafayette\": 3555,\n\t\"ABBY\": 24534,\n\t\"expositions\": 25619,\n\t\"levy\": 31101,\n\t\"C4-0497/98-98/0126\": 31459,\n\t\"pan\": 6206,\n\t\"schizophrenic\": 25616,\n\t\"Laurie\": 5775,\n\t\"overshadowed\": 11029,\n\t\"overtime\": 25258,\n\t\"cemetery\": 4013,\n\t\"bottom\": 4953,\n\t\"biomed.taiwan\": 13973,\n\t\"XML\": 10982,\n\t\"calibration\": 9234,\n\t\"fears\": 8413,\n\t\"you’d\": 9914,\n\t\".???\": 26238,\n\t\"FDI\": 913,\n\t\"OSCE\": 13911,\n\t\"Dawa\": 25742,\n\t\"bases\": 4848,\n\t\"Dragging\": 31701,\n\t\"brushing\": 32298,\n\t\"tradition\": 1107,\n\t\"Cross\": 2399,\n\t\"PivotChart\": 30080,\n\t\"??\": 22135,\n\t\"SOMEthing\": 11828,\n\t\"Psychology\": 5207,\n\t\"HIGH\": 25720,\n\t\"building\": 8445,\n\t\"1930\": 15048,\n\t\"emperors\": 25514,\n\t\"director\": 4237,\n\t\"that’s\": 7726,\n\t\"mousey\": 29863,\n\t\"bale\": 6686,\n\t\"Confused\": 20214,\n\t\"fond\": 28367,\n\t\"death\": 3179,\n\t\"recklessness\": 32537,\n\t\"In\": 136,\n\t\"vineyards\": 9197,\n\t\"motivating\": 3742,\n\t\"16's\": 26946,\n\t\"Viognier\": 16250,\n\t\"entity\": 8322,\n\t\"Fishman\": 23679,\n\t\"We’ll\": 11132,\n\t\"refine\": 15028,\n\t\"Mickey\": 12615,\n\t\"dinging\": 17921,\n\t\"colada\": 29471,\n\t\"ballast\": 30846,\n\t\"Kind\": 13623,\n\t\"ban\": 12116,\n\t\"described\": 995,\n\t\"preach\": 5956,\n\t\"Untied\": 12163,\n\t\"Metal\": 21673,\n\t\"perfumes\": 9436,\n\t\"Giuliana\": 16122,\n\t\"Norway\": 22511,\n\t\"NOW\": 24923,\n\t\"Christmas\": 5813,\n\t\"triangular\": 4666,\n\t\"morality\": 14837,\n\t\"sight\": 8905,\n\t\"plural\": 16887,\n\t\"salvation\": 6587,\n\t\"1.25\": 25221,\n\t\"DURER\": 25357,\n\t\"tooling\": 27300,\n\t\"Ghazaliyah\": 18486,\n\t\"Statue\": 16356,\n\t\"reps\": 23489,\n\t\"Jalalabad\": 19643,\n\t\"Sound\": 20835,\n\t\"ot\": 27799,\n\t\"Zimbalist\": 20881,\n\t\"dry\": 9169,\n\t\"Visa\": 16438,\n\t\"pinpointed\": 15568,\n\t\"indicative\": 9950,\n\t\"signatories\": 22418,\n\t\"GLAD\": 29519,\n\t\"ufc\": 28542,\n\t\"1779\": 3561,\n\t\"spurned\": 8172,\n\t\"Orr's\": 29448,\n\t\"meaningful\": 14918,\n\t\"Lichtenstein\": 21153,\n\t\"predators\": 5791,\n\t\"reacts\": 21228,\n\t\"debris\": 9164,\n\t\"inhaled\": 13713,\n\t\"salons\": 16597,\n\t\"P.M\": 11786,\n\t\"1400\": 22810,\n\t\"arrival\": 2019,\n\t\"sending\": 14650,\n\t\"chef\": 26624,\n\t\"utterance\": 3740,\n\t\"culprit\": 23349,\n\t\"drug-out\": 32507,\n\t\"force\": 2444,\n\t\"Figures\": 13003,\n\t\"Capitalize\": 23480,\n\t\"Ring\": 5743,\n\t\"Gospels\": 4980,\n\t\"Apple\": 24145,\n\t\"untamed\": 16654,\n\t\"bewildered\": 9516,\n\t\"calmly\": 14801,\n\t\"ohh\": 26109,\n\t\"skydivers\": 18206,\n\t\"wandered\": 6161,\n\t\"unfathomable\": 32587,\n\t\"Amazing\": 15951,\n\t\"Suicide\": 20388,\n\t\"DPC's\": 23788,\n\t\"signals\": 1830,\n\t\"Wok\": 28154,\n\t\"palate\": 16191,\n\t\"action\": 872,\n\t\"relying\": 8030,\n\t\"Zoomed's\": 27749,\n\t\"resulted\": 1959,\n\t\"non-essential\": 24427,\n\t\"lighthouse\": 30961,\n\t\"crossword\": 9706,\n\t\"omelets\": 29476,\n\t\"1696\": 4383,\n\t\"launches\": 24775,\n\t\"lingering\": 15797,\n\t\"Pablo\": 950,\n\t\"sightseeing\": 16871,\n\t\"candles\": 5901,\n\t\"proceeds\": 7882,\n\t\"Duckworth\": 15230,\n\t\"1.4\": 14752,\n\t\"PG&E\": 21634,\n\t\"Nah\": 7121,\n\t\"managers\": 11672,\n\t\"Exact\": 26876,\n\t\"colourful\": 27842,\n\t\"biosphere\": 25103,\n\t\"620-294-1909\": 24025,\n\t\"Traditionally\": 17352,\n\t\"genitals\": 24846,\n\t\"Queso\": 28492,\n\t\"digital\": 178,\n\t\"amounts\": 1059,\n\t\"barbershops\": 28145,\n\t\"Nephew\": 19845,\n\t\"cardinal\": 1922,\n\t\"prosecute\": 18554,\n\t\"incoherent\": 25618,\n\t\"Affordable\": 28065,\n\t\"implicated\": 7488,\n\t\"perceives\": 14972,\n\t\"population\": 845,\n\t\"conversations\": 1874,\n\t\"1635\": 4262,\n\t\"m.nordstrom@pecorp.com\": 21939,\n\t\"overcoat\": 30320,\n\t\"dreading\": 19253,\n\t\"Empirical\": 25133,\n\t\"strategic\": 10432,\n\t\"George\": 3567,\n\t\"teaches\": 8221,\n\t\"pledge\": 10423,\n\t\"Edward\": 4711,\n\t\"appropriateness\": 31509,\n\t\"Mathematician\": 3994,\n\t\"late\": 2595,\n\t\"Flip\": 17372,\n\t\"settlement’s\": 15369,\n\t\"elaborate\": 20544,\n\t\"Peter\": 3508,\n\t\"Shelby\": 8802,\n\t\"Haden\": 14713,\n\t\"Priest\": 17127,\n\t\"kittens\": 27287,\n\t\"mins.\": 29324,\n\t\"sharply\": 30885,\n\t\"Summers\": 17414,\n\t\"Census\": 16386,\n\t\"information\": 202,\n\t\"Trier\": 5105,\n\t\"eats\": 10213,\n\t\"bounced\": 8897,\n\t\"ye\": 6643,\n\t\"Peres\": 11173,\n\t\"Miami\": 19344,\n\t\"Skilled\": 27078,\n\t\"unfortunate\": 1278,\n\t\"frontier\": 11447,\n\t\"Steinberg\": 23876,\n\t\"finish\": 6252,\n\t\"Bout's\": 19906,\n\t\"mid-80s\": 27271,\n\t\"replaced\": 11180,\n\t\"Mom's\": 18157,\n\t\"brilliance\": 30919,\n\t\"photo\": 6508,\n\t\"ignoring\": 14816,\n\t\"2075\": 17307,\n\t\"surgically\": 20530,\n\t\"UCAN's\": 23879,\n\t\"QUIETEST\": 27778,\n\t\"vista\": 32742,\n\t\"FURY\": 25382,\n\t\"church\": 4397,\n\t\"stardom\": 25602,\n\t\"Transmedia\": 2994,\n\t\"chicken's\": 17796,\n\t\"Rosario\": 22147,\n\t\"Died\": 5341,\n\t\"Ahmaud\": 14141,\n\t\"temples\": 15323,\n\t\"crypts\": 5050,\n\t\"Churches\": 16758,\n\t\"eco\": 17140,\n\t\"Poisson\": 3831,\n\t\"mandate\": 14187,\n\t\"foreground\": 11431,\n\t\"fragments\": 5170,\n\t\"Tyrannius\": 5107,\n\t\"Salikh\": 18521,\n\t\"GenCon\": 13777,\n\t\"morose\": 31150,\n\t\"End\": 5519,\n\t\"warned\": 19717,\n\t\"ABOUREZK\": 11495,\n\t\"UV\": 2099,\n\t\"incomplete\": 4428,\n\t\"Haedicke\": 22175,\n\t\"Columns\": 16845,\n\t\"Cognitive\": 1494,\n\t\"Curl\": 15913,\n\t\"staggered\": 11088,\n\t\"STUDY\": 11830,\n\t\"Ferrari\": 28996,\n\t\"glitch\": 29188,\n\t\"aristocratic\": 3564,\n\t\"alter\": 2639,\n\t\"bloke\": 27990,\n\t\"change\": 1900,\n\t\"bosses\": 10049,\n\t\"noticing\": 15821,\n\t\"Rathbun\": 12292,\n\t\"Greeks\": 13512,\n\t\"Hong’s\": 14874,\n\t\"problematic\": 15188,\n\t\"Secretive\": 24778,\n\t\"crieth\": 32484,\n\t\"pf-\": 6846,\n\t\"Acquisition\": 21114,\n\t\"wilt\": 20152,\n\t\"Groups\": 24338,\n\t\"imbalances\": 27616,\n\t\"shovelling\": 32528,\n\t\"landings\": 18236,\n\t\"unwitting\": 1232,\n\t\"CS5\": 26628,\n\t\"noticeably\": 10758,\n\t\"tending\": 20798,\n\t\"dealerships\": 28551,\n\t\"panes\": 28369,\n\t\"war\": 3580,\n\t\"staircase\": 4577,\n\t\"continents\": 1763,\n\t\"black\": 5073,\n\t\"alongside\": 5396,\n\t\"Completely\": 7158,\n\t\"Auschwitz\": 31977,\n\t\"Warner\": 29478,\n\t\"username\": 17971,\n\t\"metaphors\": 20324,\n\t\"measured\": 1676,\n\t\"captain\": 3557,\n\t\"BackWeb\": 21369,\n\t\"sympathize\": 13604,\n\t\"cows\": 15445,\n\t\"Budweiser\": 13092,\n\t\"smell\": 9159,\n\t\"prepared\": 11057,\n\t\"spill\": 18792,\n\t\"Mitchell's\": 7208,\n\t\"revisit\": 11009,\n\t\"Crazy\": 11736,\n\t\"prematurely\": 25135,\n\t\"paraded\": 27196,\n\t\"Amendments\": 20272,\n\t\"protein\": 15351,\n\t\"visualization\": 1671,\n\t\"hoaxes\": 18008,\n\t\"Encyclopedia\": 32851,\n\t\"Instituto\": 13187,\n\t\"imprint\": 14066,\n\t\"moving\": 3316,\n\t\"Ordered\": 14743,\n\t\"queenly\": 31878,\n\t\"Bake\": 17874,\n\t\"crackpot\": 18766,\n\t\"Y!A\": 28023,\n\t\"Victrola\": 24194,\n\t\"cupboard\": 31792,\n\t\"ultrasonic\": 11367,\n\t\"Fax\": 20983,\n\t\"stickies\": 17680,\n\t\"stepping\": 19967,\n\t\"encompass\": 7509,\n\t\"M\": 1654,\n\t\"vexation\": 4348,\n\t\"Kinneret\": 11249,\n\t\"Searcher\": 12959,\n\t\"Zombie\": 9348,\n\t\"Chat\": 17956,\n\t\"Reliant\": 23340,\n\t\"Młyn\": 16878,\n\t\"alreet\": 6199,\n\t\"chirping\": 16081,\n\t\"grindstone\": 25288,\n\t\"Movies\": 8282,\n\t\"Corporate\": 21094,\n\t\"w/out\": 23356,\n\t\"escaping\": 10285,\n\t\"Herbalist\": 23976,\n\t\"ports\": 16336,\n\t\"crash\": 12732,\n\t\"TRACTOR\": 21526,\n\t\"Pheasant\": 17330,\n\t\"Chernobyl\": 18645,\n\t\"corssing\": 27249,\n\t\"WINGS\": 29688,\n\t\"Pinching\": 17764,\n\t\"Salama\": 20627,\n\t\"greatly\": 2777,\n\t\"ASIAN\": 26243,\n\t\"Pure\": 28156,\n\t\"Jeff\": 10337,\n\t\"monasteries\": 5959,\n\t\"swing\": 15523,\n\t\"Bangkok\": 17391,\n\t\"speedily\": 9975,\n\t\"Conf.\": 23077,\n\t\"kb\": 28263,\n\t\"Mate\": 24230,\n\t\"varnished\": 30888,\n\t\"philly\": 26700,\n\t\"Street’s\": 15173,\n\t\"bucks\": 6134,\n\t\"withdraw\": 18896,\n\t\"docking\": 24814,\n\t\"intra-day\": 22690,\n\t\"femur\": 2744,\n\t\"chosen\": 9814,\n\t\"kike\": 30714,\n\t\"min\": 15693,\n\t\"Stephenville\": 4819,\n\t\"heady\": 9172,\n\t\"Wan\": 12398,\n\t\"collectively\": 6117,\n\t\"holiest\": 12275,\n\t\"caribou\": 15505,\n\t\"films\": 4102,\n\t\"blessed\": 16365,\n\t\"wooded\": 30925,\n\t\"ecosystems\": 25076,\n\t\"Invalides\": 26609,\n\t\"Welling's\": 5755,\n\t\"coincided\": 13308,\n\t\"chlorine\": 27868,\n\t\"sucked\": 29205,\n\t\"mall\": 8796,\n\t\"two-hundred-year\": 30724,\n\t\"programmer\": 2285,\n\t\"better\": 1574,\n\t\"cock\": 25185,\n\t\"styled\": 29289,\n\t\"Thomas\": 5815,\n\t\"dose\": 13581,\n\t\"fleet\": 25790,\n\t\"Prevent\": 26472,\n\t\"counter-measures\": 13235,\n\t\"bakers\": 27322,\n\t\"card\": 6075,\n\t\"peeled\": 9066,\n\t\"deleting\": 27167,\n\t\"Arena\": 12572,\n\t\"desolate\": 9983,\n\t\"lexical\": 1052,\n\t\"Clambake\": 12743,\n\t\"tendons\": 6371,\n\t\"symptomatic\": 15808,\n\t\"mere\": 1795,\n\t\"Smith's\": 23719,\n\t\".4\": 18041,\n\t\"courthouse\": 7563,\n\t\"Doug\": 21907,\n\t\"breakthrough\": 4090,\n\t\"25\": 1401,\n\t\"indeed\": 10892,\n\t\"Moab\": 30796,\n\t\"fort\": 14763,\n\t\"lessons\": 14839,\n\t\"rains\": 11483,\n\t\"Stu\": 7170,\n\t\"Huston\": 19427,\n\t\"baskets\": 31185,\n\t\"where\": 743,\n\t\"Social\": 7910,\n\t\"locations\": 3710,\n\t\"enlarge\": 12281,\n\t\"1974\": 7868,\n\t\"interpretation\": 157,\n\t\"UP\": 11911,\n\t\"edition\": 4448,\n\t\"inventor\": 4565,\n\t\"Charter\": 13872,\n\t\"most\": 1867,\n\t\"Newsday.com\": 23927,\n\t\"88\": 25956,\n\t\"spans\": 17437,\n\t\"hammer\": 29821,\n\t\"fugitives\": 20746,\n\t\"Text\": 17966,\n\t\"Dec\": 21906,\n\t\"Stow\": 25385,\n\t\"BMW\": 29269,\n\t\"holocausts\": 30833,\n\t\"Panza\": 30436,\n\t\"tablespoons\": 17864,\n\t\"<-\": 21247,\n\t\"Navy\": 12077,\n\t\"brevet\": 3591,\n\t\"Lo\": 11146,\n\t\"contented\": 31784,\n\t\"713-853-3989\": 23503,\n\t\"vivid\": 7751,\n\t\"chomping\": 13770,\n\t\"prospect\": 19785,\n\t\"concurrently\": 4663,\n\t\"damned\": 9299,\n\t\"à\": 4060,\n\t\"aquasafe\": 26715,\n\t\"scapular\": 30536,\n\t\"http://gimpedblog.blogspot.com/2011/09/how-to-use-gimp-for-beginners-lesson-4.html\": 26625,\n\t\"suicide\": 5877,\n\t\"Spodsbjerg\": 17242,\n\t\"------------------------------------------------------\": 25577,\n\t\"assign\": 11111,\n\t\"takeover\": 18842,\n\t\"TECHNOLOGY\": 24451,\n\t\"innings\": 30507,\n\t\"marriage\": 3407,\n\t\"needlework\": 4617,\n\t\"tore\": 31238,\n\t\"Sandy\": 28306,\n\t\"succumbing\": 18691,\n\t\"Kathleen\": 21707,\n\t\"cancellations\": 29900,\n\t\"desecrated\": 14329,\n\t\"South\": 3583,\n\t\"heading\": 1153,\n\t\"hugging\": 6854,\n\t\"O'Connor\": 3760,\n\t\"Personally\": 13782,\n\t\"Hillegonds\": 23519,\n\t\"paler\": 32945,\n\t\"Christ\": 5558,\n\t\"WOULD\": 27776,\n\t\"Rocky\": 25035,\n\t\"Multicultural\": 17553,\n\t\"ascended\": 32836,\n\t\"contracting\": 22564,\n\t\"acuity\": 3391,\n\t\"seats\": 12370,\n\t\"Booz\": 30656,\n\t\"babies\": 6770,\n\t\"stumbled\": 11746,\n\t\"Qwest\": 28198,\n\t\"adventure\": 4366,\n\t\"Dawn\": 21293,\n\t\"Descriptions\": 24748,\n\t\"Berkeley\": 3460,\n\t\"tycoons\": 16903,\n\t\"try\": 1488,\n\t\"Promised\": 16910,\n\t\"twenty-two\": 31634,\n\t\"P.O.\": 24309,\n\t\"misstatements\": 22612,\n\t\"Aires\": 21746,\n\t\"casualties\": 12264,\n\t\"innovating\": 2221,\n\t\"Progress\": 32577,\n\t\"'09\": 29714,\n\t\"HOSTESS\": 29679,\n\t\"comparison\": 1760,\n\t\"1893\": 4685,\n\t\"subcommission\": 11445,\n\t\"Dante’s\": 10146,\n\t\"Souffleur\": 16687,\n\t\"avert\": 14293,\n\t\"fabulously\": 28286,\n\t\"E-meter\": 12322,\n\t\"cheekbones\": 31725,\n\t\"cropped\": 32019,\n\t\"sawdust\": 32474,\n\t\"quality\": 2458,\n\t\"Middlebrooks\": 4932,\n\t\"reason\": 1434,\n\t\"youll\": 11067,\n\t\"maize\": 13453,\n\t\"25.00\": 24915,\n\t\"Heavy\": 8895,\n\t\"wailing\": 8797,\n\t\"entrenched\": 31428,\n\t\">\": 21062,\n\t\"bilked\": 29411,\n\t\"appartment\": 21996,\n\t\"computers\": 12713,\n\t\"lisenced\": 29038,\n\t\"U.C.\": 22446,\n\t\"they\": 43,\n\t\"Seeds\": 17700,\n\t\"CEM\": 22458,\n\t\"Quit\": 29982,\n\t\"Adamson\": 31568,\n\t\"Hadith\": 20871,\n\t\"Haight\": 27256,\n\t\"riddle\": 32612,\n\t\"invitations\": 29434,\n\t\"ORACLE\": 24195,\n\t\"GDP\": 14663,\n\t\"riverboatmen\": 9109,\n\t\"Dee\": 21615,\n\t\"everyday\": 3096,\n\t\"Guthe\": 11450,\n\t\"Administrator\": 14597,\n\t\"undisclosed\": 7333,\n\t\"declaration\": 19417,\n\t\"Edmark\": 28104,\n\t\"Caitlin\": 13035,\n\t\"Lay\": 17946,\n\t\"interrupt\": 32894,\n\t\"actual\": 1832,\n\t\"tortured\": 8721,\n\t\"pronounced\": 1173,\n\t\"Jan.\": 11679,\n\t\"breeze\": 18263,\n\t\"uninspired\": 29978,\n\t\"breakers\": 10009,\n\t\"y\": 14749,\n\t\"contributor\": 19634,\n\t\"Everybody\": 6301,\n\t\"condemning\": 1291,\n\t\"salon\": 5221,\n\t\"molecules\": 6336,\n\t\"Smyth’s\": 8594,\n\t\"Nation\": 14057,\n\t\"aspiration\": 13856,\n\t\"civilians\": 14257,\n\t\"banishing\": 32856,\n\t\"centralized\": 823,\n\t\"VR\": 12558,\n\t\"Allow\": 7254,\n\t\"Men\": 3945,\n\t\"enjoyable\": 10113,\n\t\"moment\": 2878,\n\t\"Fazlur\": 19099,\n\t\"ambassador\": 25965,\n\t\"estate\": 4273,\n\t\"Ponchatoula\": 19445,\n\t\"confused\": 6299,\n\t\"site\": 1158,\n\t\"sadistically\": 11169,\n\t\"UBS\": 21456,\n\t\"funeral\": 4034,\n\t\"and\": 3,\n\t\"unanticipated\": 15488,\n\t\"requirements\": 16280,\n\t\"Def\": 28483,\n\t\"offing\": 30879,\n\t\"enraged\": 17608,\n\t\"hmmmm\": 20122,\n\t\"Paradise\": 20873,\n\t\"Qinkuang\": 14877,\n\t\"splitter\": 26519,\n\t\"caged\": 25029,\n\t\"Degeneration\": 20197,\n\t\"cottonwoods\": 25071,\n\t\"nano\": 26664,\n\t\"Let\": 2479,\n\t\"Arkansas\": 10342,\n\t\"AMAZING\": 28641,\n\t\"allergic\": 32505,\n\t\"digging\": 13699,\n\t\"Contact\": 22907,\n\t\"undershirt\": 8604,\n\t\"Coalition\": 19256,\n\t\"Three\": 5394,\n\t\"standings\": 25220,\n\t\"punchlines\": 13670,\n\t\"smoked\": 29626,\n\t\"24.8\": 15618,\n\t\"affirm\": 15144,\n\t\"Judaism\": 20379,\n\t\"sleeveless\": 17384,\n\t\"Apatow\": 13642,\n\t\"respectable\": 8247,\n\t\"finalize\": 23324,\n\t\"score\": 1684,\n\t\"losers\": 24841,\n\t\"forsyth\": 29477,\n\t\"picking\": 8549,\n\t\"leftist\": 30727,\n\t\"captive\": 11154,\n\t\"coursing\": 15763,\n\t\"Alex\": 8545,\n\t\"Bashers\": 25196,\n\t\"fallout\": 18647,\n\t\"Bandar\": 25964,\n\t\"reunify\": 2356,\n\t\"launching\": 14528,\n\t\"overwhelmed\": 7673,\n\t\"anti-army\": 19702,\n\t\"steady\": 9228,\n\t\"Amman\": 18945,\n\t\"Ruona\": 28924,\n\t\"Finding\": 9155,\n\t\"cellphones\": 29527,\n\t\"Adorama\": 26537,\n\t\"Bright\": 28064,\n\t\"Galileo\": 11370,\n\t\"Basin\": 15303,\n\t\"unattended\": 7601,\n\t\"rely\": 641,\n\t\"www.flag.govt.nz\": 12659,\n\t\"Copying\": 4111,\n\t\"mother's\": 4242,\n\t\"hugged\": 32071,\n\t\"thes\": 26945,\n\t\"filling\": 18061,\n\t\"grimace\": 32845,\n\t\"Allawi\": 19260,\n\t\"migrated\": 14671,\n\t\"wanna\": 6365,\n\t\"crime\": 12342,\n\t\"NJ\": 16505,\n\t\"distribution\": 13493,\n\t\"founders\": 3772,\n\t\"detestable\": 31015,\n\t\"enter\": 11194,\n\t\"814014\": 21394,\n\t\"Providence\": 8239,\n\t\"50,000\": 12585,\n\t\"BOTHER\": 28185,\n\t\"repositioning\": 16864,\n\t\"Our\": 188,\n\t\"states\": 7261,\n\t\"poke\": 9907,\n\t\"bloodworms\": 27052,\n\t\"sure\": 1902,\n\t\"gold\": 2470,\n\t\"marketers'\": 23650,\n\t\"kaplan\": 22369,\n\t\"envy\": 25282,\n\t\"mayonnaise\": 21245,\n\t\"Magnum\": 21827,\n\t\"Doliver\": 22900,\n\t\"UC\": 3666,\n\t\"grandure\": 29118,\n\t\"International\": 3816,\n\t\"713/646-6505\": 22978,\n\t\"ext\": 23378,\n\t\"accurately\": 3977,\n\t\"synch\": 23963,\n\t\"Kia\": 28779,\n\t\"School\": 1497,\n\t\"agreements\": 12998,\n\t\"spellbooks\": 32039,\n\t\"optical\": 26218,\n\t\"Glase\": 31387,\n\t\"muggle\": 18317,\n\t\"design\": 672,\n\t\"opted\": 5942,\n\t\"Hopelessly\": 14780,\n\t\"staggering\": 8190,\n\t\"ICI\": 13219,\n\t\"programming\": 2278,\n\t\"jerk\": 20302,\n\t\"Negligence\": 25951,\n\t\"315-460-3344\": 22306,\n\t\"parked\": 29237,\n\t\"listless\": 10069,\n\t\"favorable\": 11998,\n\t\"160.00\": 29410,\n\t\"Commons\": 8539,\n\t\"Chander\": 19074,\n\t\"Branch\": 24729,\n\t\"cut\": 1121,\n\t\"righ...@sonic.net\": 24828,\n\t\"Shows\": 27502,\n\t\"Speech\": 14094,\n\t\"Beatle\": 25610,\n\t\"Newsweek\": 19780,\n\t\"Mansour\": 18606,\n\t\"frequented\": 16710,\n\t\"Cannot\": 28174,\n\t\"05:37\": 22524,\n\t\"burglar\": 25576,\n\t\"baldish\": 31726,\n\t\"Sardica\": 5016,\n\t\"Mabruk\": 20628,\n\t\"gasp\": 20899,\n\t\"honeydew\": 10215,\n\t\"Strip\": 18902,\n\t\"gazed\": 8985,\n\t\"Masjed-e\": 16809,\n\t\"extremists\": 19663,\n\t\"05/31/2001\": 23524,\n\t\"drifted\": 31928,\n\t\"dwelling\": 4691,\n\t\"asses\": 10727,\n\t\"Cox\": 31438,\n\t\"ninety-nine\": 6984,\n\t\"untouchable\": 19915,\n\t\"paying\": 7876,\n\t\"Fundamentalist\": 19985,\n\t\"Something\": 9618,\n\t\"deliciously\": 27918,\n\t\"Mares\": 27975,\n\t\"Ansel\": 13391,\n\t\"hoof\": 6373,\n\t\"CROWLEY\": 10097,\n\t\"Mechaincs\": 28995,\n\t\"0590258046\": 16699,\n\t\"disquiet\": 14194,\n\t\"Shackleton\": 21616,\n\t\"Cope\": 18178,\n\t\"pointless\": 20552,\n\t\"Distancia\": 966,\n\t\"Gamers\": 13795,\n\t\"Doors\": 10467,\n\t\"Tub\": 29567,\n\t\"grace\": 6571,\n\t\"Patrons\": 21255,\n\t\"cashier\": 8794,\n\t\"pictographs\": 18125,\n\t\"suite\": 21979,\n\t\"invasive\": 26257,\n\t\"underscore\": 20817,\n\t\"hostile\": 10407,\n\t\"attackers\": 9605,\n\t\"Sunak\": 12955,\n\t\"PLACE\": 26245,\n\t\"powers\": 18286,\n\t\"hight\": 27188,\n\t\"memo\": 20667,\n\t\"farmer's\": 20237,\n\t\"unlocking\": 32078,\n\t\"Kronos\": 32678,\n\t\"avant\": 5486,\n\t\"Alps\": 11204,\n\t\"Sufficient\": 25141,\n\t\"Ho\": 12410,\n\t\"witches\": 32060,\n\t\"dude\": 27339,\n\t\"recoils\": 30571,\n\t\"Shucks\": 21875,\n\t\"loans\": 11542,\n\t\"rests\": 14022,\n\t\"liters\": 18423,\n\t\"gusts\": 30273,\n\t\"Ball\": 3158,\n\t\"ruled\": 6023,\n\t\"watermelon\": 6112,\n\t\"AK47s\": 19872,\n\t\"Mary.Ellenberger@enron.com\": 21915,\n\t\"Arthur\": 311,\n\t\"wheezing\": 8853,\n\t\"busy\": 8701,\n\t\"tribe\": 15508,\n\t\"convergence\": 2893,\n\t\"Ollie\": 19394,\n\t\"celebrity\": 12537,\n\t\"Elon\": 8337,\n\t\"Children\": 5359,\n\t\"secretary’s\": 8666,\n\t\"416-865-3703\": 21300,\n\t\"cropdusters\": 20584,\n\t\"brunch\": 26898,\n\t\"writers\": 3048,\n\t\"midlife\": 7932,\n\t\"come\": 1458,\n\t\"Discussion\": 1904,\n\t\"Arm\": 26258,\n\t\"#\": 12781,\n\t\"overfed\": 31262,\n\t\"funneled\": 18956,\n\t\"crappy\": 27952,\n\t\"How'd\": 16127,\n\t\"Locate\": 15266,\n\t\"soft\": 6385,\n\t\"Trento\": 11255,\n\t\"utilities\": 22427,\n\t\"influences\": 10326,\n\t\"Laurent\": 21020,\n\t\"slumped\": 31687,\n\t\"whole\": 187,\n\t\"registrar\": 31808,\n\t\"salmon\": 28607,\n\t\"whelmed\": 7725,\n\t\"Suttle\": 22218,\n\t\"indoors\": 17720,\n\t\"conspirator\": 20642,\n\t\"Fraiser's\": 28647,\n\t\"dad\": 6981,\n\t\"paramount\": 14165,\n\t\"Philosophiae\": 3260,\n\t\"measurements\": 2567,\n\t\"Takekurabe\": 4700,\n\t\"Manipal\": 19179,\n\t\"Gino\": 6791,\n\t\"resell\": 29854,\n\t\"Hostel\": 29336,\n\t\"Politics\": 19404,\n\t\"Elizabeth\": 4480,\n\t\"games\": 1511,\n\t\"wierd\": 21994,\n\t\"rejected\": 12986,\n\t\"And\": 6060,\n\t\"snowshoe\": 15498,\n\t\"ventilator\": 29924,\n\t\"Emery\": 20976,\n\t\"shuttles\": 23935,\n\t\"placed\": 8504,\n\t\"constitutionally\": 7599,\n\t\"M5J\": 21296,\n\t\"Va.\": 24818,\n\t\"Neoplatonic\": 25337,\n\t\"virility\": 25659,\n\t\"bleary\": 31658,\n\t\"an-\": 7028,\n\t\"tournament\": 10998,\n\t\"ignoramus\": 26552,\n\t\"lapse\": 14156,\n\t\"del\": 16440,\n\t\"Traveler\": 26495,\n\t\"Forster@ENRON\": 22156,\n\t\"gentrified\": 24294,\n\t\"star\": 5194,\n\t\"cloudless\": 8885,\n\t\"monocot\": 13482,\n\t\"divest\": 19107,\n\t\"WORLD\": 28796,\n\t\"Glock\": 8586,\n\t\"dwellers\": 16883,\n\t\"researchers\": 350,\n\t\"advocates\": 22421,\n\t\"FLOOR\": 29666,\n\t\"individualized\": 15034,\n\t\"pseudonym\": 5179,\n\t\"predict\": 10469,\n\t\"TED\": 14985,\n\t\"t...@sonic.net\": 24864,\n\t\"arising\": 21805,\n\t\"mcclelland\": 28216,\n\t\"spontaneity\": 30283,\n\t\"nondescript\": 28646,\n\t\"surname\": 5261,\n\t\"gels\": 15952,\n\t\"fundamentalists\": 18941,\n\t\"winker\": 14823,\n\t\"ligament\": 4876,\n\t\"LIGHTS\": 11842,\n\t\"feverishly\": 28459,\n\t\"Chamberlain\": 29256,\n\t\"isda\": 21602,\n\t\"tactics\": 3077,\n\t\"Betty\": 8546,\n\t\"Names\": 12661,\n\t\"cant\": 26480,\n\t\"N-\": 6316,\n\t\"1/8\": 11535,\n\t\"squeezed\": 28780,\n\t\"illuminated\": 3741,\n\t\"hypnosis\": 17785,\n\t\"releasing\": 13791,\n\t\"Clough\": 31854,\n\t\"1530\": 25459,\n\t\"Ciao\": 16110,\n\t\"User\": 22654,\n\t\"pump\": 9304,\n\t\"http://en.wikipedia.org/wiki/Degenerate_art\": 20192,\n\t\"basin\": 30451,\n\t\"Bayleys\": 31852,\n\t\"Bath\": 15831,\n\t\"marquee\": 31867,\n\t\"photographer\": 12027,\n\t\"puree\": 17778,\n\t\"Coke\": 6938,\n\t\"lowest\": 22277,\n\t\"****\": 27088,\n\t\"Needed\": 15127,\n\t\"Simple\": 23979,\n\t\"travellers\": 17557,\n\t\"advanced\": 3842,\n\t\"Allah\": 16803,\n\t\"surrendered\": 14764,\n\t\"Refrigerate\": 18441,\n\t\"12.46\": 22274,\n\t\"murderers\": 20393,\n\t\"..........\": 24922,\n\t\"Fleet\": 30830,\n\t\"rents\": 10697,\n\t\"discontinued\": 5809,\n\t\"preview\": 13760,\n\t\"Breeze\": 24696,\n\t\"constituent\": 5622,\n\t\"exit\": 7397,\n\t\"chatterbox\": 17641,\n\t\"dictionary\": 3809,\n\t\"Tensions\": 14233,\n\t\"Lack\": 18204,\n\t\"surgery\": 1293,\n\t\"facto\": 6010,\n\t\"operates\": 14845,\n\t\"management\": 7585,\n\t\"Creative\": 8538,\n\t\"NYC\": 20654,\n\t\"satisfactory\": 21034,\n\t\"earrings\": 29534,\n\t\"caring\": 24530,\n\t\"60th\": 10392,\n\t\"symmetry\": 11260,\n\t\"Cone\": 23251,\n\t\"Any\": 7045,\n\t\"sworn\": 14366,\n\t\"birdie\": 22080,\n\t\"Mach\": 25795,\n\t\"committees\": 13881,\n\t\"2.15\": 15667,\n\t\"aircraft\": 3310,\n\t\"tread\": 8372,\n\t\"immediately\": 4942,\n\t\"purveyed\": 10559,\n\t\"signed\": 15743,\n\t\"gestured\": 30422,\n\t\"smaller\": 1316,\n\t\"chain\": 7375,\n\t\"states'\": 11227,\n\t\"Rafik\": 25822,\n\t\"fetch\": 27539,\n\t\"Imperium\": 9293,\n\t\"nutty\": 18377,\n\t\"Property\": 705,\n\t\"penance\": 5153,\n\t\"optionally\": 30113,\n\t\"frequently\": 667,\n\t\"sunscreen\": 17056,\n\t\"net\": 8106,\n\t\"Canon\": 15980,\n\t\"842\": 16811,\n\t\"Karol\": 27414,\n\t\"allocated\": 7569,\n\t\"Yazid\": 20645,\n\t\"FRANCE\": 28769,\n\t\"Export\": 22356,\n\t\"Years\": 5350,\n\t\"rug\": 27171,\n\t\"medication\": 27459,\n\t\"Marina\": 17314,\n\t\"usual\": 10126,\n\t\"2051\": 8317,\n\t\"CFC\": 21140,\n\t\"Hegemony\": 10379,\n\t\"Engineer\": 22004,\n\t\"Contract\": 22726,\n\t\"Think\": 6113,\n\t\"Sunjay\": 23132,\n\t\"DBE\": 4464,\n\t\"momori\": 16328,\n\t\"Mediawiki\": 10769,\n\t\"Firstly\": 14919,\n\t\"dunderheads\": 6556,\n\t\"excessive\": 2860,\n\t\"residential\": 2128,\n\t\"accepted\": 2636,\n\t\"L'Americano\": 16666,\n\t\"Borders\": 16611,\n\t\"brainwashed\": 20113,\n\t\"mud-flat\": 30964,\n\t\"cuban\": 29470,\n\t\"vegetables\": 8057,\n\t\"165.9\": 23607,\n\t\"coil\": 32266,\n\t\"Allton\": 13408,\n\t\"stabilize\": 15817,\n\t\"periodically\": 13880,\n\t\"PONCHATOULA\": 19442,\n\t\"neuter\": 29400,\n\t\"Yale\": 17469,\n\t\"aloud\": 32339,\n\t\"she`s\": 21265,\n\t\"books\": 2959,\n\t\"mercenaries\": 19779,\n\t\"NOMINATION\": 24743,\n\t\"furnaces\": 24853,\n\t\"34\": 15131,\n\t\"MONARCHS\": 22950,\n\t\"Jamarat\": 13157,\n\t\"flush\": 27354,\n\t\"phonne\": 22786,\n\t\"TYPE\": 28580,\n\t\"Technologies\": 20732,\n\t\"A.\": 5549,\n\t\"anymore\": 7093,\n\t\"Debbie\": 7350,\n\t\"HAVING\": 11884,\n\t\"milieu\": 20443,\n\t\"managed\": 3948,\n\t\"entie\": 28502,\n\t\"foreigners\": 17326,\n\t\"Fine\": 18158,\n\t\"forgiven\": 11564,\n\t\"pressured\": 29203,\n\t\"Diego\": 5894,\n\t\"hands\": 4413,\n\t\"Manson's\": 20106,\n\t\"board\": 1430,\n\t\"advertise\": 10707,\n\t\"hickies\": 21866,\n\t\"Antique\": 28416,\n\t\"Andrew\": 22,\n\t\"tunnels\": 32320,\n\t\"garments\": 25517,\n\t\"tranced\": 32670,\n\t\"1724\": 3208,\n\t\"Hellenic\": 13523,\n\t\"ac-\": 6876,\n\t\"mortgage\": 11526,\n\t\"GlobalSecurity.org\": 24819,\n\t\"spooky\": 26656,\n\t\"Braman\": 29045,\n\t\"pencil\": 16230,\n\t\"waters\": 9046,\n\t\"metal\": 9221,\n\t\"slash\": 16049,\n\t\"lion\": 10177,\n\t\"Robertson\": 1573,\n\t\"mouse\": 23046,\n\t\"Neiman\": 6142,\n\t\"misconception\": 10687,\n\t\"Orlando\": 16057,\n\t\"folds\": 8903,\n\t\"succumbed\": 24302,\n\t\"spoilt\": 26153,\n\t\"vertical\": 2747,\n\t\"store\": 4690,\n\t\"Moda\": 28834,\n\t\"primarily\": 320,\n\t\"confidentiality\": 21220,\n\t\"polluting\": 24573,\n\t\"Cape\": 29860,\n\t\"MUCH\": 11880,\n\t\"open-necked\": 32709,\n\t\"persuaded\": 7871,\n\t\"commanders\": 18744,\n\t\"Chinoise\": 3441,\n\t\"Darfur\": 11236,\n\t\"twe-\": 6049,\n\t\"track\": 335,\n\t\"sparkling\": 9123,\n\t\"homosexuality\": 10489,\n\t\"definite\": 17895,\n\t\"di\": 28813,\n\t\"Expeditionary\": 25809,\n\t\"currents\": 9385,\n\t\"shafts\": 5066,\n\t\"sensational\": 4944,\n\t\"dusted\": 25017,\n\t\"GILBERGD@sullcrom.com\": 22124,\n\t\"bedroom\": 5213,\n\t\"boarder\": 27182,\n\t\"Words\": 5626,\n\t\"Paglino\": 9576,\n\t\"War\": 3541,\n\t\"Ya'll\": 23148,\n\t\"cruiseline\": 27511,\n\t\"hosts\": 5323,\n\t\"reuse\": 13439,\n\t\"pathways\": 8950,\n\t\"Manipur\": 19527,\n\t\"corpse\": 31291,\n\t\"superbly\": 29095,\n\t\"damning\": 12994,\n\t\"Certainly\": 18798,\n\t\"harboring\": 20745,\n\t\"gastroenteritis\": 27591,\n\t\"Job\": 21024,\n\t\"Miert\": 31467,\n\t\"f\": 22305,\n\t\"wonders\": 27849,\n\t\"Videoconference\": 22345,\n\t\"1906\": 15453,\n\t\"Melissa\": 22393,\n\t\"Anyways\": 15767,\n\t\"gibberish\": 18122,\n\t\"relentless\": 9495,\n\t\"Stanford\": 3658,\n\t\"Studying\": 8492,\n\t\"Birla\": 27417,\n\t\"flopped\": 19761,\n\t\"dyspepsia\": 24085,\n\t\"realist\": 5839,\n\t\"dicot\": 13479,\n\t\"confusion\": 7489,\n\t\"#food\": 8010,\n\t\"Ronald\": 725,\n\t\"discover\": 3152,\n\t\"thirteenth\": 11466,\n\t\"protest\": 9344,\n\t\"POST\": 24981,\n\t\"09:48\": 23259,\n\t\"styling\": 15910,\n\t\"august\": 13852,\n\t\"aren’t\": 11184,\n\t\"scripted\": 11164,\n\t\"LANDING\": 24448,\n\t\"Sue\": 3802,\n\t\"spiritual\": 5911,\n\t\"plants\": 10005,\n\t\"8274\": 24310,\n\t\"background\": 4671,\n\t\"wheeled\": 31661,\n\t\"Rhino's\": 31922,\n\t\"catalog\": 6968,\n\t\"BEWARE\": 29247,\n\t\"next\": 1888,\n\t\"tonnage\": 22581,\n\t\"fermented\": 9171,\n\t\"admitted\": 8763,\n\t\"S.\": 17497,\n\t\"Valentine\": 29503,\n\t\"grocery\": 15010,\n\t\"Squares\": 16768,\n\t\"Qadoos\": 20739,\n\t\"Ohio\": 3653,\n\t\"yam\": 28208,\n\t\"lightness\": 8702,\n\t\"Lotte\": 26577,\n\t\"Rouault\": 21166,\n\t\"chess\": 20518,\n\t\"cancers\": 18680,\n\t\"egos\": 20323,\n\t\"colors\": 11961,\n\t\"Lewiston\": 29321,\n\t\"Spence\": 1547,\n\t\"GW\": 16577,\n\t\"Labour\": 12415,\n\t\"11/03\": 21870,\n\t\"explode\": 20402,\n\t\"X\": 7067,\n\t\"CAJUNISH\": 28574,\n\t\"consolidated\": 837,\n\t\"dehydration\": 32815,\n\t\"efficiency\": 2158,\n\t\"Ayad\": 19259,\n\t\"abruptly\": 19011,\n\t\"saccades\": 211,\n\t\"violently\": 3869,\n\t\"garde\": 5487,\n\t\"saber\": 19151,\n\t\"Administrative\": 21126,\n\t\"Meat\": 30138,\n\t\"INS's\": 25970,\n\t\"capable\": 621,\n\t\"schools\": 1527,\n\t\"calibrated\": 1799,\n\t\"Bahai\": 16805,\n\t\"Hochrenaissance\": 27114,\n\t\"birds\": 2809,\n\t\"AROUND\": 28761,\n\t\"considerably\": 13720,\n\t\"Macao\": 31422,\n\t\"affectionately\": 30896,\n\t\"wo\": 9521,\n\t\"Arabia's\": 12259,\n\t\"offset\": 25893,\n\t\"paling\": 32682,\n\t\"hackers\": 8308,\n\t\"Bernard\": 4557,\n\t\"Li\": 1537,\n\t\"she'll\": 29507,\n\t\"beautiful\": 4668,\n\t\"UVB\": 27743,\n\t\"Wai-ching\": 12480,\n\t\"Russell\": 3378,\n\t\"Shames\": 23882,\n\t\"jaunty\": 32355,\n\t\"substance\": 13538,\n\t\"Moslem\": 20354,\n\t\"exceptions\": 29974,\n\t\"edge\": 6887,\n\t\"merchandise\": 2969,\n\t\"V02\": 21420,\n\t\"c.\": 4966,\n\t\"532-3836\": 22902,\n\t\"eck\": 11699,\n\t\"denunciation\": 18931,\n\t\"providing\": 637,\n\t\"Dynamic\": 5631,\n\t\"s/he\": 16533,\n\t\"bankroll\": 18940,\n\t\"traders\": 19884,\n\t\"71st\": 17483,\n\t\"hunters\": 27754,\n\t\"guards\": 14653,\n\t\"Øhavsstien\": 17272,\n\t\"Kool\": 13423,\n\t\"fans’\": 3058,\n\t\"wil\": 26856,\n\t\"Darwinian\": 14986,\n\t\"unlike\": 7438,\n\t\"oval\": 9315,\n\t\"artists\": 6153,\n\t\"Flipped\": 28716,\n\t\"Consortium\": 30102,\n\t\"Atta\": 20771,\n\t\"indulged\": 5033,\n\t\"assuming\": 7252,\n\t\"ascent\": 32806,\n\t\"Grenada\": 16483,\n\t\"Europol\": 31360,\n\t\"constantly\": 6018,\n\t\"HATED\": 28783,\n\t\"immigrate\": 27372,\n\t\"Zealand\": 12641,\n\t\"Energy\": 2113,\n\t\"fourteenth\": 5800,\n\t\"city's\": 16880,\n\t\"windsurf\": 16677,\n\t\"10th\": 11166,\n\t\"TRY\": 21208,\n\t\"Organisation\": 31497,\n\t\"Jove's\": 32366,\n\t\"Liberal\": 31408,\n\t\"10:51\": 23453,\n\t\"impressions\": 240,\n\t\"Grass\": 21848,\n\t\"grills\": 28251,\n\t\"drollery\": 31129,\n\t\"que\": 28615,\n\t\"smart\": 11685,\n\t\"STEPS\": 23027,\n\t\"spectrophotometer\": 10300,\n\t\"snapshot\": 538,\n\t\"Threatened\": 25911,\n\t\"detectable\": 25142,\n\t\"conquistadors\": 16965,\n\t\"soybean\": 13454,\n\t\"i\": 7086,\n\t\"10.9\": 26031,\n\t\"slit\": 29820,\n\t\"infrequent\": 17814,\n\t\"Microwave\": 21273,\n\t\"LLP\": 21488,\n\t\"Sithamparanathan\": 19071,\n\t\"NEED\": 11835,\n\t\"Romeo\": 29574,\n\t\"SAY\": 29951,\n\t\"cabbage\": 28481,\n\t\"Looked\": 28018,\n\t\"historian\": 4971,\n\t\"Worth\": 4775,\n\t\"pork\": 27325,\n\t\"fly\": 15550,\n\t\"Dramatic\": 4254,\n\t\"10:52\": 22050,\n\t\"BUILDING\": 11504,\n\t\"Why're\": 32091,\n\t\"marches\": 27193,\n\t\"crickets\": 27740,\n\t\"LA\": 12335,\n\t\"haves\": 28164,\n\t\"seamstresses\": 30011,\n\t\"secretary\": 8667,\n\t\"arch-enemy\": 32081,\n\t\"fundamental\": 1521,\n\t\"tiny\": 4572,\n\t\"burner\": 21177,\n\t\"varieties\": 15475,\n\t\"questioning\": 1397,\n\t\"desirable\": 7736,\n\t\"Branco\": 2488,\n\t\"category\": 12755,\n\t\"returnees\": 20810,\n\t\"mingling\": 30629,\n\t\"apparent\": 8493,\n\t\"communism\": 16932,\n\t\"holder\": 11087,\n\t\"Ahmed\": 12188,\n\t\"isolation\": 13550,\n\t\"Transforming\": 14514,\n\t\"trustworthiness\": 30900,\n\t\"2102\": 21895,\n\t\"Jason.Leopold@dowjones.com\": 23865,\n\t\"Leon\": 21087,\n\t\"directories\": 494,\n\t\"noble\": 4275,\n\t\"Throws\": 4779,\n\t\"infection\": 6950,\n\t\"Brent's\": 21329,\n\t\"g\": 17845,\n\t\"sow\": 18358,\n\t\"Infinity\": 21829,\n\t\"Communists\": 27713,\n\t\"length\": 2401,\n\t\"historic\": 13249,\n\t\"fuse\": 29586,\n\t\"carven\": 9403,\n\t\"Back\": 6426,\n\t\"misdirection\": 19911,\n\t\"alla\": 28300,\n\t\"instructions\": 7362,\n\t\"crashed\": 30792,\n\t\"projections\": 13466,\n\t\"phones\": 21909,\n\t\"breeeding\": 27050,\n\t\"explanatory\": 15172,\n\t\"haul\": 20316,\n\t\"1809\": 32541,\n\t\"Rector\": 24660,\n\t\"glisten\": 31095,\n\t\"violation\": 7393,\n\t\"other’s\": 14244,\n\t\"sickest\": 23965,\n\t\"Finance\": 7544,\n\t\"estates\": 31572,\n\t\"I've\": 6127,\n\t\"mention\": 10876,\n\t\"potential\": 163,\n\t\"slightest\": 17603,\n\t\"industry's\": 24445,\n\t\"furrowed\": 32919,\n\t\"rose\": 3291,\n\t\"circumvention\": 31506,\n\t\"Angela\": 15229,\n\t\"phoney\": 20117,\n\t\"Trieste\": 11412,\n\t\"astounding\": 14624,\n\t\"Dose\": 16034,\n\t\"scenarios\": 13461,\n\t\"requesting\": 4750,\n\t\"domesticated\": 15315,\n\t\"You're\": 5236,\n\t\"countrymen\": 19546,\n\t\"Catherine\": 25500,\n\t\"souvlaki\": 32926,\n\t\"plucked\": 8908,\n\t\"blotched\": 10051,\n\t\"invoice\": 21400,\n\t\"Poll\": 21268,\n\t\"Lepage\": 5841,\n\t\"foodshed\": 8113,\n\t\"user's\": 30172,\n\t\"inference\": 2038,\n\t\"hamburger\": 30307,\n\t\"agricultural\": 15295,\n\t\"VALENTIN\": 10094,\n\t\"Some\": 470,\n\t\"BY-SA\": 7669,\n\t\"dinner\": 6697,\n\t\"cruise\": 11383,\n\t\"Hoa\": 19199,\n\t\"945\": 21565,\n\t\"lunar\": 24485,\n\t\"image\": 7510,\n\t\"En\": 3484,\n\t\"#reportinginformation\": 7821,\n\t\"S\": 2054,\n\t\"Quetta\": 19751,\n\t\"Fredonia\": 14720,\n\t\"H\": 22803,\n\t\"Economy\": 25835,\n\t\"dust\": 11334,\n\t\"heartbreaks\": 14183,\n\t\"controlling\": 18187,\n\t\"So-o-o\": 31154,\n\t\"DJ's\": 29391,\n\t\"minus\": 7078,\n\t\"attention\": 62,\n\t\"concrete\": 10280,\n\t\"accessible\": 12657,\n\t\"smartphone\": 15593,\n\t\"Saxby's\": 15751,\n\t\"Sicily\": 28839,\n\t\"was\": 151,\n\t\"figured\": 6300,\n\t\"Comics'\": 4130,\n\t\"hotel\": 4592,\n\t\"infallible\": 6601,\n\t\"workmanship\": 28242,\n\t\"I'll\": 6096,\n\t\"denomination\": 13510,\n\t\"names\": 3957,\n\t\"Leonhard\": 3203,\n\t\"rub\": 9786,\n\t\"mysteries\": 6435,\n\t\".15\": 28335,\n\t\"Move\": 17790,\n\t\"implementing\": 829,\n\t\"weekly\": 5302,\n\t\"Q1\": 22645,\n\t\"EARTHQUAKE\": 25383,\n\t\"purge\": 18750,\n\t\"gator\": 16082,\n\t\"organized\": 472,\n\t\"domain\": 2275,\n\t\"physically\": 12278,\n\t\"Santer\": 31504,\n\t\"extract\": 17852,\n\t\"Isaac\": 3258,\n\t\"vague\": 26386,\n\t\"116th\": 30396,\n\t\"assed\": 13603,\n\t\"185\": 16561,\n\t\"hang\": 26672,\n\t\"nodded\": 32205,\n\t\"ranged\": 13130,\n\t\"displayed\": 5196,\n\t\"perennial\": 17715,\n\t\"reduced\": 899,\n\t\"overdone\": 11141,\n\t\"Clean\": 13498,\n\t\"ironing\": 32177,\n\t\"spurs\": 25984,\n\t\"hassles\": 29047,\n\t\"ideologue\": 19064,\n\t\"whomever\": 21960,\n\t\"WADE\": 19814,\n\t\"Online\": 19083,\n\t\"42\": 17303,\n\t\"codices\": 15406,\n\t\"cluster\": 18612,\n\t\"interpreter\": 3377,\n\t\"peritonitis\": 4030,\n\t\"shins\": 8725,\n\t\"Miley\": 5284,\n\t\"ranchers\": 25014,\n\t\"Spain\": 967,\n\t\"surpluses\": 25845,\n\t\"blowing\": 9062,\n\t\"lɑ̃fɑ̃\": 3505,\n\t\"Gwenzi's\": 31766,\n\t\"relatives\": 4076,\n\t\"neglects\": 25176,\n\t\"Evernote\": 15057,\n\t\"mutilated\": 20453,\n\t\"turmoil\": 19415,\n\t\"hangar\": 22922,\n\t\"idiots\": 20058,\n\t\"Maids\": 28410,\n\t\"HDTV\": 8645,\n\t\"http://www.euci.com/pdf/trans_expn.pdf\": 21061,\n\t\"http://www.oneworld.org/index_oc/issue196/byckau.html\": 18698,\n\t\"Govt\": 23485,\n\t\"constrained\": 1811,\n\t\"accustomed\": 2022,\n\t\"metering\": 23578,\n\t\"provincial\": 16985,\n\t\"obliquely\": 31220,\n\t\"Red\": 3042,\n\t\"disagreeable\": 30582,\n\t\"forked\": 31312,\n\t\"mayors\": 14444,\n\t\"harsher\": 17650,\n\t\"Species\": 10298,\n\t\"IDs\": 23124,\n\t\"outcasts\": 9577,\n\t\"consent\": 6558,\n\t\"sh*t\": 26151,\n\t\"deli\": 16613,\n\t\"machinery\": 16924,\n\t\"Satisfactory\": 21029,\n\t\"plenipotentiary\": 30702,\n\t\"fitness\": 14956,\n\t\"grandmothers\": 9130,\n\t\"Collective\": 13968,\n\t\"Ghost\": 6998,\n\t\"defeating\": 12420,\n\t\"Tempest\": 4225,\n\t\"unsuccessful\": 12999,\n\t\"ther\": 27055,\n\t\"1958\": 4539,\n\t\"Øhavets\": 17256,\n\t\"today’s\": 7958,\n\t\"naive\": 20415,\n\t\"Approved\": 23045,\n\t\"toughies\": 30636,\n\t\"Dugway\": 20708,\n\t\"mine\": 6101,\n\t\"homes\": 2142,\n\t\"family's\": 20767,\n\t\"50000\": 10759,\n\t\"Mine\": 9580,\n\t\"lotos\": 9394,\n\t\"Posts\": 12740,\n\t\"preferences\": 8514,\n\t\"backs\": 9654,\n\t\"persecuted\": 4295,\n\t\"soccer\": 18349,\n\t\"Markus\": 11379,\n\t\"minded\": 13405,\n\t\"Rouse\": 3157,\n\t\"remodels\": 7196,\n\t\"Taipei\": 12890,\n\t\"anti-Semite\": 20447,\n\t\"flag\": 12642,\n\t\"introductory\": 17295,\n\t\"leadoff\": 4933,\n\t\"Embedded\": 21072,\n\t\"CURSED\": 25719,\n\t\"comprehensive\": 418,\n\t\"choices\": 8139,\n\t\"geopolitical\": 14292,\n\t\"infested\": 20483,\n\t\"Pickle\": 22174,\n\t\"Sin\": 25594,\n\t\"McMurdo\": 10678,\n\t\"overbearing\": 25679,\n\t\"frames\": 578,\n\t\"ARE\": 28395,\n\t\"extra\": 7032,\n\t\"fiji\": 26665,\n\t\"Counterparty\": 21669,\n\t\"Pistorius\": 8402,\n\t\"Tom's\": 23413,\n\t\"stand-offish\": 31314,\n\t\"Citizens\": 16472,\n\t\"09:27\": 22573,\n\t\"Hang\": 6988,\n\t\"Crayola\": 26260,\n\t\"volume\": 2975,\n\t\"sports\": 10870,\n\t\"Malfoy's\": 32174,\n\t\"enroute\": 20339,\n\t\"http://www.ibrae.ac.ru/IBRAE/eng/chernobyl/nat_rep/nat_repe.htm#24\": 18694,\n\t\"70.85\": 24446,\n\t\"Loads\": 26971,\n\t\"distributors\": 8128,\n\t\"Seller\": 23017,\n\t\"disproportionate\": 11615,\n\t\"69th\": 13113,\n\t\"bigger\": 7862,\n\t\"PAID\": 29149,\n\t\"liberal\": 4527,\n\t\"Burning\": 4136,\n\t\"Fax.\": 22245,\n\t\"Hau\": 12896,\n\t\"Trident\": 32539,\n\t\"Howrah\": 26435,\n\t\"orienting\": 2837,\n\t\"mindedness\": 14083,\n\t\"barren\": 20140,\n\t\"swallowing\": 9327,\n\t\"Nance\": 11778,\n\t\"amateur\": 4235,\n\t\"fixation\": 20883,\n\t\"Armogida\": 22287,\n\t\"Bulgaria\": 25211,\n\t\"unhunh\": 6463,\n\t\"facial\": 9314,\n\t\"sum\": 7494,\n\t\"B\": 9631,\n\t\"patting\": 32352,\n\t\"steals\": 7713,\n\t\"file\": 10201,\n\t\"Cheung\": 12427,\n\t\"costumer\": 29762,\n\t\"scarlet\": 9994,\n\t\"Marcus\": 13068,\n\t\"Galbraith\": 7843,\n\t\"Audio\": 13286,\n\t\"Events\": 23493,\n\t\"salute\": 14130,\n\t\"displacements\": 14232,\n\t\"Louvre\": 3536,\n\t\"Worker's\": 7212,\n\t\"Felice\": 13366,\n\t\"unceasing\": 30936,\n\t\"nostrils\": 9461,\n\t\"Floyd's\": 14122,\n\t\"reuptake\": 13584,\n\t\"philologists\": 5642,\n\t\"Manoel\": 5524,\n\t\"Benioff\": 3036,\n\t\"nice\": 6921,\n\t\"Biotaling\": 7024,\n\t\"Industries’\": 8216,\n\t\"reaffirmation\": 20292,\n\t\"Board\": 20350,\n\t\"Paseo\": 17025,\n\t\"animos\": 5077,\n\t\"Riedell\": 7531,\n\t\"boy's\": 12191,\n\t\"03/16/2001\": 21728,\n\t\"packets\": 23988,\n\t\"1966\": 1010,\n\t\"Flyer\": 26693,\n\t\"Bavelier\": 1540,\n\t\"Explore\": 27489,\n\t\"simplification\": 31418,\n\t\"recovering\": 2317,\n\t\"switch\": 12899,\n\t\"Nicholas'\": 17556,\n\t\"exclaim\": 17939,\n\t\"Zaman\": 18467,\n\t\"introducing\": 2264,\n\t\"Everyday\": 25326,\n\t\"re-looking\": 21169,\n\t\"wits\": 4346,\n\t\"spruce\": 25412,\n\t\"trajectory\": 11332,\n\t\"Sydney\": 12827,\n\t\"Immigrant\": 27381,\n\t\"car's\": 28596,\n\t\"619-696-6966\": 23891,\n\t\"skipping\": 26550,\n\t\"describes\": 89,\n\t\"discoveries\": 1490,\n\t\"pines\": 24414,\n\t\"UH\": 27389,\n\t\"orchestrated\": 30431,\n\t\"class\": 3841,\n\t\"Daugherty\": 23622,\n\t\"obsessive\": 13570,\n\t\"convicted\": 20049,\n\t\"BRIDGET\": 25359,\n\t\"passively\": 15213,\n\t\"dirt\": 6388,\n\t\"intersections\": 16547,\n\t\"Karzai’s\": 19741,\n\t\"trophies\": 31322,\n\t\"neckhole\": 8609,\n\t\"Singapore\": 16488,\n\t\"pressed\": 8990,\n\t\"dominance\": 10550,\n\t\"Moore\": 4227,\n\t\"sovereignty\": 18797,\n\t\"additions\": 21199,\n\t\"hear\": 7110,\n\t\"leafy\": 10993,\n\t\"Nedre\": 23748,\n\t\"Holy\": 4405,\n\t\"Accustomed\": 14679,\n\t\"01:32:35\": 21929,\n\t\"whale\": 9048,\n\t\"Wallen\": 28127,\n\t\"WeatherTrade\": 22543,\n\t\"Zeus's\": 32415,\n\t\"comets\": 32570,\n\t\"Avignon\": 5454,\n\t\"graduands\": 14557,\n\t\"greenish\": 10050,\n\t\"1930’s\": 10459,\n\t\"responsiveness\": 29139,\n\t\"Cole\": 5544,\n\t\"vowed\": 25194,\n\t\"b.\": 4209,\n\t\"triumphant\": 31249,\n\t\"Sickles\": 32323,\n\t\"1993\": 5601,\n\t\"burns\": 7377,\n\t\"MMC\": 23432,\n\t\"judiciary\": 798,\n\t\"reali-\": 13682,\n\t\"Friend\": 26055,\n\t\"tastical\": 8208,\n\t\"indoor\": 29386,\n\t\"Rehe\": 16358,\n\t\"Palatine\": 28143,\n\t\"roasted\": 15773,\n\t\"overheard\": 18587,\n\t\"environments\": 401,\n\t\"directing\": 8099,\n\t\"repays\": 11558,\n\t\"harem\": 16842,\n\t\"Cass\": 22998,\n\t\"militias\": 18911,\n\t\"cocoa\": 17856,\n\t\"Glendale\": 17045,\n\t\"1961\": 3650,\n\t\"decoding\": 5677,\n\t\"Minister's\": 13053,\n\t\"gown\": 30006,\n\t\"gaping\": 32762,\n\t\"knowledgeable\": 28136,\n\t\"strayed\": 14064,\n\t\"remove\": 12008,\n\t\"disdainful\": 30975,\n\t\"GROUP\": 19978,\n\t\"groan\": 10169,\n\t\"stockholders\": 26060,\n\t\"Tsars\": 4396,\n\t\"01:35\": 21628,\n\t\"posted\": 4838,\n\t\"NTU\": 12942,\n\t\"bears\": 13602,\n\t\"Futurism\": 20184,\n\t\"smock\": 18015,\n\t\"neighborly\": 19080,\n\t\"geared\": 12786,\n\t\"priests\": 20503,\n\t\"260,000\": 14437,\n\t\"317\": 17451,\n\t\"flaw\": 24726,\n\t\"significant\": 1532,\n\t\"rigged\": 29419,\n\t\"hankering\": 31055,\n\t\"drift\": 16993,\n\t\"surrounds\": 24613,\n\t\"Mellencamp\": 23757,\n\t\"diurnal\": 27741,\n\t\"eyeballs\": 31116,\n\t\"Calling\": 5541,\n\t\"booming\": 9053,\n\t\"Jamie\": 27160,\n\t\"exterior\": 18382,\n\t\"Gare\": 29331,\n\t\"share\": 11616,\n\t\"Essen\": 31542,\n\t\"counters\": 20404,\n\t\"EXCELLENT\": 28789,\n\t\"skush@swbell.net\": 23382,\n\t\"3/9/00\": 22569,\n\t\"effeminate\": 25657,\n\t\"compliments\": 18001,\n\t\"#sharedvalues\": 7661,\n\t\"3.8\": 25946,\n\t\"disinclined\": 32796,\n\t\"motive\": 1388,\n\t\"ISDA\": 21622,\n\t\"agree\": 7856,\n\t\"Kitchen\": 21717,\n\t\"STONER\": 28748,\n\t\"Hayat\": 20845,\n\t\"communistic\": 25212,\n\t\"greying\": 32496,\n\t\"mizzen-mast\": 30912,\n\t\"snappy\": 11105,\n\t\"title\": 5803,\n\t\"Ashcroft\": 20759,\n\t\"forties\": 30653,\n\t\"RETAIL\": 23435,\n\t\"312-666-2372\": 26916,\n\t\"unobstructed\": 14605,\n\t\"ineffective\": 23740,\n\t\"watcher\": 30368,\n\t\"northeastern\": 17407,\n\t\"16/11/2004\": 19084,\n\t\"eagle\": 3602,\n\t\"following\": 912,\n\t\"Gnosticism\": 20222,\n\t\"tool\": 6896,\n\t\"phantom\": 6923,\n\t\"Lynch's\": 22466,\n\t\"lbs\": 22271,\n\t\"lab\": 6368,\n\t\"mounted\": 10643,\n\t\"cabinet\": 13991,\n\t\"toe\": 24093,\n\t\"lifespans\": 26801,\n\t\"sponsorship\": 20707,\n\t\"postures\": 2778,\n\t\"08/03/2000\": 22489,\n\t\"wana\": 26789,\n\t\"odd\": 9755,\n\t\"ongoing\": 7504,\n\t\"inactive\": 21106,\n\t\"Physiotherapists\": 28317,\n\t\"Leninism\": 30685,\n\t\"Labor\": 10455,\n\t\"limestone\": 17179,\n\t\"1,8\": 17325,\n\t\"...?!!!\": 22527,\n\t\"park\": 12902,\n\t\"VOM\": 22696,\n\t\"09/17/99\": 23255,\n\t\"cobbled\": 32331,\n\t\"allocating\": 11633,\n\t\"backpacks\": 28860,\n\t\"prefects\": 32338,\n\t\"lathered\": 30500,\n\t\"stooges\": 20341,\n\t\"±\": 1657,\n\t\"consumerism\": 6915,\n\t\"fits\": 8483,\n\t\"tragically\": 14124,\n\t\"emissivity\": 2641,\n\t\"away\": 773,\n\t\"venues\": 26931,\n\t\"resolving\": 3237,\n\t\"neutered\": 27687,\n\t\"darkly\": 32277,\n\t\"flights\": 16283,\n\t\"floral\": 16834,\n\t\"CTRL–C\": 30157,\n\t\"Expressionist\": 20188,\n\t\"paradigms\": 2271,\n\t\"Acrylics\": 22208,\n\t\"we’re\": 8444,\n\t\"Naturally\": 31354,\n\t\"temper\": 19776,\n\t\"investigators\": 26006,\n\t\"1647\": 16846,\n\t\"Taasinge\": 17283,\n\t\"Belarus\": 18682,\n\t\"build-outs\": 10698,\n\t\"Stout\": 29350,\n\t\"flocked\": 19519,\n\t\"hemistichs\": 1116,\n\t\"engineers\": 23928,\n\t\"MI\": 28028,\n\t\"Française\": 5388,\n\t\"Salmagundi\": 29540,\n\t\"ozone\": 13444,\n\t\"slide\": 7352,\n\t\"renegotiation\": 22639,\n\t\"confuse\": 29185,\n\t\"lesson\": 13437,\n\t\"XBOX\": 26791,\n\t\"juicy\": 20051,\n\t\"ruminate\": 25019,\n\t\"Weasley's\": 32202,\n\t\"Ryan's\": 32948,\n\t\"Optional\": 18363,\n\t\"sales\": 11612,\n\t\"M306\": 21770,\n\t\"Iain\": 8345,\n\t\"adoption\": 449,\n\t\"PUK\": 19293,\n\t\"Goebbels\": 20466,\n\t\"resupply\": 25877,\n\t\"Hopless\": 28309,\n\t\"Marks\": 1983,\n\t\"skirmish\": 12705,\n\t\"dating\": 11148,\n\t\"flooded\": 24395,\n\t\"after\": 1634,\n\t\"submicron\": 11392,\n\t\"Traders\": 21015,\n\t\"Tempura\": 28535,\n\t\"ISIS\": 14642,\n\t\"they'd\": 6058,\n\t\"1570\": 25484,\n\t\"Chun\": 12500,\n\t\"Jakov\": 30739,\n\t\"deities\": 13505,\n\t\"TSM\": 2677,\n\t\"USD\": 16455,\n\t\"TWIG\": 19391,\n\t\"invoking\": 20289,\n\t\"openings\": 25457,\n\t\"crossed\": 11773,\n\t\"Lake\": 5823,\n\t\"basis\": 10417,\n\t\"sequencing\": 13825,\n\t\"brain\": 6762,\n\t\"antennæ\": 10038,\n\t\"Brandeis\": 20749,\n\t\"Clelia's\": 32853,\n\t\"te\": 28173,\n\t\"unequal\": 925,\n\t\"OSSOFF\": 14352,\n\t\"parted\": 31587,\n\t\"Vegan\": 17824,\n\t\"scores\": 1675,\n\t\"increases\": 3329,\n\t\"redeem\": 14005,\n\t\"pending\": 13919,\n\t\"Gather\": 18287,\n\t\"volumes\": 21424,\n\t\"Polansky\": 25613,\n\t\"'em\": 29124,\n\t\"Castamere\": 3035,\n\t\"rumored\": 20884,\n\t\"inhabited\": 16906,\n\t\"organs\": 24605,\n\t\"hook\": 18193,\n\t\"Challenge\": 12064,\n\t\"3,300,000\": 23469,\n\t\"oth-\": 6176,\n\t\"Very\": 6052,\n\t\"panted\": 9676,\n\t\"cream\": 10583,\n\t\"501\": 21258,\n\t\"hangs\": 9530,\n\t\"lashed\": 24130,\n\t\"Church\": 4294,\n\t\"carolina\": 26271,\n\t\"chooses\": 11559,\n\t\"remodeling\": 29254,\n\t\"cosmos\": 14615,\n\t\"Grinning\": 32138,\n\t\"hundred\": 6070,\n\t\"inventorying\": 6898,\n\t\"Karl\": 10941,\n\t\"squarely\": 25777,\n\t\"limited\": 515,\n\t\"Kant\": 14898,\n\t\"washer\": 13573,\n\t\"H.\": 2231,\n\t\"clerics\": 18596,\n\t\"03/01/2001\": 21627,\n\t\"secularist\": 13244,\n\t\"OBJECTIVES\": 15536,\n\t\"beforehand\": 30435,\n\t\"Honolulu\": 7636,\n\t\"visions\": 9307,\n\t\"addictions\": 13537,\n\t\"Birth\": 20373,\n\t\"glare\": 30967,\n\t\"repent\": 24724,\n\t\"Reference\": 23010,\n\t\"canned\": 26649,\n\t\"elevators\": 17928,\n\t\"exhausted\": 15804,\n\t\"deOccupy\": 7635,\n\t\"brown\": 9177,\n\t\"Senior\": 19716,\n\t\"Pre\": 17281,\n\t\"Short\": 2523,\n\t\"Capricorn\": 25306,\n\t\"courageous\": 12057,\n\t\"1911\": 17065,\n\t\"advocated\": 14160,\n\t\"b\": 21620,\n\t\"Bangladeshis\": 12155,\n\t\"Heavily\": 24424,\n\t\"punitive\": 7593,\n\t\"he'd\": 6965,\n\t\"experience\": 36,\n\t\"pronunciation\": 3103,\n\t\"laughs\": 10540,\n\t\"silly\": 30837,\n\t\"familiarity\": 5026,\n\t\"gnarled\": 9047,\n\t\"affectation\": 25407,\n\t\"Shi'ite\": 18595,\n\t\"68\": 25917,\n\t\"Eagle\": 20853,\n\t\"Évariste\": 4016,\n\t\"drifters\": 2557,\n\t\"posterior\": 2741,\n\t\"chessboard\": 32702,\n\t\"tabletop\": 2967,\n\t\"1327\": 25356,\n\t\"winces\": 9539,\n\t\"part\": 313,\n\t\"Hogsmeade\": 16089,\n\t\"INTERNATIONAL\": 24997,\n\t\"kid\": 6498,\n\t\"believed\": 8187,\n\t\"radar\": 8359,\n\t\"HOLY\": 29637,\n\t\"DISTRACT\": 7808,\n\t\"covered\": 2691,\n\t\"Buenos\": 21745,\n\t\"distinctions\": 120,\n\t\"nickname\": 11095,\n\t\"isles\": 32843,\n\t\"They've\": 10726,\n\t\"militarily\": 12887,\n\t\"interrogators\": 20718,\n\t\"Goldman\": 21577,\n\t\"Everybody's\": 30485,\n\t\"poignant\": 22089,\n\t\"sayings\": 6641,\n\t\"spreadsheet\": 21440,\n\t\"seaman\": 30780,\n\t\"temporal\": 2564,\n\t\"hometown\": 5846,\n\t\"zombie\": 9666,\n\t\"Beatles'\": 25615,\n\t\"It’ll\": 8675,\n\t\"Laden\": 18739,\n\t\"staple\": 15431,\n\t\"pinkie\": 17676,\n\t\"d'Orleans\": 26604,\n\t\"towards\": 1911,\n\t\"approved\": 13835,\n\t\"Peoria\": 17046,\n\t\"residency\": 27079,\n\t\"Ivy\": 15232,\n\t\"replace\": 11210,\n\t\"rest\": 844,\n\t\"mammals\": 2765,\n\t\"Todd\": 21038,\n\t\"eminent\": 25491,\n\t\"molesters\": 28621,\n\t\"Overcooked\": 29174,\n\t\"annually\": 11651,\n\t\"exclaiming\": 30522,\n\t\"Republic\": 10465,\n\t\"organizers\": 13280,\n\t\"Bas\": 16648,\n\t\"Berry\": 4862,\n\t\"Texan's\": 19840,\n\t\"!!!!!!!!!!!!!\": 26338,\n\t\"Entering\": 30527,\n\t\"juddering\": 32751,\n\t\"mutants\": 2257,\n\t\"47,500\": 21023,\n\t\"Essie\": 21068,\n\t\"Weehawken\": 16535,\n\t\"acupuncture\": 28020,\n\t\"gal\": 17953,\n\t\"Gish\": 10361,\n\t\"Nichols\": 19367,\n\t\"Moscoso\": 21333,\n\t\"mats\": 31319,\n\t\"timber\": 25923,\n\t\"plant\": 15473,\n\t\"tacky\": 16060,\n\t\"botn\": 21995,\n\t\"intestines\": 27610,\n\t\"dense\": 15932,\n\t\"Rhythm\": 943,\n\t\"squinting\": 32234,\n\t\"aluminum\": 18407,\n\t\"warp\": 15614,\n\t\"genitalia\": 5256,\n\t\"negative\": 7082,\n\t\"barn\": 6672,\n\t\"Cuba\": 16437,\n\t\"difficulties\": 10614,\n\t\"fain\": 9454,\n\t\"uses\": 687,\n\t\"mile\": 11453,\n\t\"characters\": 4725,\n\t\"reply\": 9880,\n\t\"Madagascar\": 14205,\n\t\"periods\": 11382,\n\t\"sur\": 3438,\n\t\"http://washington.hyatt.com/wasgh/index.html\": 22809,\n\t\"BBC\": 4217,\n\t\"outdoor\": 16584,\n\t\"successively\": 3216,\n\t\"we'll\": 6218,\n\t\"FINALLY\": 29938,\n\t\"mixing\": 17882,\n\t\"rollbacks\": 25925,\n\t\"PetSmart\": 27766,\n\t\"mistakenly\": 4422,\n\t\"36647\": 21814,\n\t\"weakest\": 1924,\n\t\"captivated\": 15486,\n\t\"if\": 834,\n\t\"rang\": 16011,\n\t\"1,183\": 23586,\n\t\"informing\": 29878,\n\t\"props\": 10363,\n\t\"Sumner\": 15452,\n\t\"reball\": 28342,\n\t\"Sundays\": 5040,\n\t\"Tussey\": 29026,\n\t\"summed\": 8742,\n\t\"VHF\": 17318,\n\t\"Kean\": 21373\n}\n"
  },
  {
    "path": "harper-brill/src/lib.rs",
    "content": "use std::num::NonZero;\nuse std::rc::Rc;\nuse std::sync::{Arc, LazyLock};\n\npub use harper_pos_utils::{\n    BrillChunker, BrillTagger, BurnChunkerCpu, CachedChunker, Chunker, FreqDict, Tagger, UPOS,\n};\n\nconst BRILL_TAGGER_SOURCE: &str = include_str!(\"../trained_tagger_model.json\");\n\nstatic BRILL_TAGGER: LazyLock<Arc<BrillTagger<FreqDict>>> =\n    LazyLock::new(|| Arc::new(uncached_brill_tagger()));\n\nfn uncached_brill_tagger() -> BrillTagger<FreqDict> {\n    serde_json::from_str(BRILL_TAGGER_SOURCE).unwrap()\n}\n\n/// Get a copy of a shared, lazily-initialized [`BrillTagger`]. There will be only one instance\n/// per-process.\npub fn brill_tagger() -> Arc<BrillTagger<FreqDict>> {\n    (*BRILL_TAGGER).clone()\n}\n\nconst BRILL_CHUNKER_SOURCE: &str = include_str!(\"../trained_chunker_model.json\");\n\nstatic BRILL_CHUNKER: LazyLock<Arc<BrillChunker>> =\n    LazyLock::new(|| Arc::new(uncached_brill_chunker()));\n\nfn uncached_brill_chunker() -> BrillChunker {\n    serde_json::from_str(BRILL_CHUNKER_SOURCE).unwrap()\n}\n\n/// Get a copy of a shared, lazily-initialized [`BrillChunker`]. There will be only one instance\n/// per-process.\npub fn brill_chunker() -> Arc<BrillChunker> {\n    (*BRILL_CHUNKER).clone()\n}\n\nconst BURN_CHUNKER_VOCAB: &[u8; 627993] = include_bytes!(\"../finished_chunker/vocab.json\");\nconst BURN_CHUNKER_BIN: &[u8; 806312] = include_bytes!(\"../finished_chunker/model.mpk\");\n\nthread_local! {\n    static BURN_CHUNKER: Rc<CachedChunker<BurnChunkerCpu>> =  Rc::new(uncached_burn_chunker());\n}\n\nfn uncached_burn_chunker() -> CachedChunker<BurnChunkerCpu> {\n    CachedChunker::new(\n        BurnChunkerCpu::load_from_bytes_cpu(BURN_CHUNKER_BIN, BURN_CHUNKER_VOCAB, 6, 0.3),\n        NonZero::new(10000).unwrap(),\n    )\n}\n\n/// Get a copy of a shared, lazily-initialized [`BurnChunkerCpu`]. There will be only one instance\n/// per-process. Since neural net inference is extremely expensive, this chunker is memoized as\n/// well.\npub fn burn_chunker() -> Rc<CachedChunker<BurnChunkerCpu>> {\n    (BURN_CHUNKER).with(|c| c.clone())\n}\n"
  },
  {
    "path": "harper-brill/trained_chunker_model.json",
    "content": "{\n\t\"base\": {\n\t\t\"counts\": {\n\t\t\t\"ADP\": -40685,\n\t\t\t\"VERB\": -47220,\n\t\t\t\"CCONJ\": -14576,\n\t\t\t\"PROPN\": 17155,\n\t\t\t\"ADJ\": -8207,\n\t\t\t\"SCONJ\": -7841,\n\t\t\t\"NOUN\": 33927,\n\t\t\t\"DET\": 175,\n\t\t\t\"SYM\": -905,\n\t\t\t\"INTJ\": -2658,\n\t\t\t\"PART\": -11757,\n\t\t\t\"AUX\": -26039,\n\t\t\t\"PUNCT\": -55964,\n\t\t\t\"NUM\": -4445,\n\t\t\t\"PRON\": 36959,\n\t\t\t\"ADV\": -22237\n\t\t}\n\t},\n\t\"patches\": [\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": false,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": -1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"any\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 5,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"and\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": 2\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 4,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": false,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"a\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"a\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": -1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"-\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": false,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"or\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"CCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"-\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"-\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"for\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"I\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"I\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PUNCT\",\n\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"they\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"NOUN\",\n\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"?\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": -1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"no\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 4,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"new\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"CCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"an\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"their\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"and\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": false,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"many\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": false,\n\t\t\t\t\t\t\t\"relative\": 2\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": false,\n\t\t\t\t\t\t\t\"relative\": 2\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"some\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 4,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"two\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"AUX\",\n\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"A\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"(\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"you\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"you\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADV\",\n\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"other\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"any\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 4,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"their\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"the\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"The\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"The\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"any\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"his\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"last\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": 2\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"any\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"and\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"few\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\"is_tagged\": \"SYM\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"it\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"it\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"CCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"the\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"their\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"-\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"an\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"my\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"and\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"and\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": true,\n\t\t\t\t\t\t\t\"relative\": -1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"PROPN\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"any\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADV\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"(\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"those\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"this\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"other\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": false,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PART\",\n\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"we\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"we\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"what\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"their\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"their\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"(\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 5,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"it\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"is\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"I\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"their\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"their\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"no\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \"-\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"\\\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"he\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"he\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"SYM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"the\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"the\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \"-\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 4,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"it's\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"CCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"and\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": false,\n\t\t\t\t\t\t\t\"relative\": 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"(\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"AUX\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"\\\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"they\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"is\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"it\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"or\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"an\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"they\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": false,\n\t\t\t\t\t\t\t\"relative\": 3\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"what\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"what\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"was\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"-\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"your\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"are\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"\\\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"and\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"(\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"PUNCT\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"CCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"no\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"no\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"an\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"his\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"a\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"a\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"you\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"at\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"with\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"with\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"it's\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \"is\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"was\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"VERB\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"and\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"your\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \"or\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"SYM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"-\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"an\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"is\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"SCONJ\",\n\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"on\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"on\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"-\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"her\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"is\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"you\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"you\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"it's\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"SYM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"it's\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"CCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"NounPhraseAt\": {\n\t\t\t\t\t\t\t\"is_np\": false,\n\t\t\t\t\t\t\t\"relative\": 3\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"is\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"what\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"are\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"SCONJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"something\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"the\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"for\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"(\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"PROPN\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"The\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \".\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 3,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -3,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"any\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"people\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"people\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"SCONJ\",\n\t\t\t\t\t\"post_word_tagged\": \"CCONJ\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \",\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": true,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"their\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": false,\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"them\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "harper-brill/trained_tagger_model.json",
    "content": "{\n\t\"base\": {\n\t\t\"mapping\": {\n\t\t\t\"dame\": \"PROPN\",\n\t\t\t\"associate\": \"NOUN\",\n\t\t\t\"obscurity\": \"NOUN\",\n\t\t\t\"ivan\": \"PROPN\",\n\t\t\t\"pangs\": \"NOUN\",\n\t\t\t\"camels\": \"NOUN\",\n\t\t\t\"genre\": \"NOUN\",\n\t\t\t\"electronically\": \"ADV\",\n\t\t\t\"ignored\": \"VERB\",\n\t\t\t\"migration\": \"NOUN\",\n\t\t\t\"boil\": \"NOUN\",\n\t\t\t\"well-formed\": \"ADJ\",\n\t\t\t\"forthcoming\": \"ADJ\",\n\t\t\t\"addresses\": \"NOUN\",\n\t\t\t\"cruises\": \"NOUN\",\n\t\t\t\"lasping\": \"VERB\",\n\t\t\t\"zacarias\": \"PROPN\",\n\t\t\t\"exhibits\": \"NOUN\",\n\t\t\t\"geri\": \"PROPN\",\n\t\t\t\"weight\": \"NOUN\",\n\t\t\t\"endevour\": \"VERB\",\n\t\t\t\"penn\": \"PROPN\",\n\t\t\t\"sh-\": \"INTJ\",\n\t\t\t\"attorney\": \"NOUN\",\n\t\t\t\"touted\": \"VERB\",\n\t\t\t\"hoorah\": \"INTJ\",\n\t\t\t\"debi\": \"PROPN\",\n\t\t\t\"soften\": \"VERB\",\n\t\t\t\"pediatrician\": \"NOUN\",\n\t\t\t\"hits\": \"VERB\",\n\t\t\t\"requested\": \"VERB\",\n\t\t\t\"charcoal\": \"NOUN\",\n\t\t\t\"essex\": \"PROPN\",\n\t\t\t\".5\": \"NUM\",\n\t\t\t\"09:40\": \"NUM\",\n\t\t\t\"instances\": \"NOUN\",\n\t\t\t\"salted\": \"VERB\",\n\t\t\t\"freemason\": \"PROPN\",\n\t\t\t\"speedily\": \"ADV\",\n\t\t\t\"multilateral\": \"ADJ\",\n\t\t\t\"jolts\": \"VERB\",\n\t\t\t\"apps\": \"NOUN\",\n\t\t\t\"sacrificed\": \"VERB\",\n\t\t\t\"typo\": \"NOUN\",\n\t\t\t\"j.\": \"PROPN\",\n\t\t\t\"behaviors\": \"NOUN\",\n\t\t\t\"attention\": \"NOUN\",\n\t\t\t\"consulted\": \"VERB\",\n\t\t\t\"combative\": \"ADJ\",\n\t\t\t\"routes\": \"NOUN\",\n\t\t\t\"choice\": \"NOUN\",\n\t\t\t\"who's\": \"PRON\",\n\t\t\t\"36.2\": \"NUM\",\n\t\t\t\"kimberwick\": \"NOUN\",\n\t\t\t\"influencing\": \"VERB\",\n\t\t\t\"aquavit\": \"NOUN\",\n\t\t\t\"heebee\": \"NOUN\",\n\t\t\t\"image\": \"NOUN\",\n\t\t\t\"majoos\": \"PROPN\",\n\t\t\t\"airless\": \"ADJ\",\n\t\t\t\"wholes\": \"NOUN\",\n\t\t\t\"transit\": \"NOUN\",\n\t\t\t\"fried\": \"VERB\",\n\t\t\t\"sacrifices\": \"NOUN\",\n\t\t\t\"instrument\": \"NOUN\",\n\t\t\t\"peeled\": \"VERB\",\n\t\t\t\"surgical\": \"ADJ\",\n\t\t\t\"icicles\": \"NOUN\",\n\t\t\t\"tiring\": \"ADJ\",\n\t\t\t\"roadworthiness\": \"NOUN\",\n\t\t\t\"lording\": \"VERB\",\n\t\t\t\"shelia\": \"PROPN\",\n\t\t\t\"mentally\": \"ADV\",\n\t\t\t\"geometry\": \"NOUN\",\n\t\t\t\"competing\": \"VERB\",\n\t\t\t\"infertility\": \"NOUN\",\n\t\t\t\"airlines\": \"PROPN\",\n\t\t\t\"cradled\": \"VERB\",\n\t\t\t\"lowly\": \"ADJ\",\n\t\t\t\"shied\": \"VERB\",\n\t\t\t\"allegheny\": \"PROPN\",\n\t\t\t\"greens\": \"NOUN\",\n\t\t\t\"indispensable\": \"ADJ\",\n\t\t\t\"nrc\": \"PROPN\",\n\t\t\t\"lam\": \"PROPN\",\n\t\t\t\"hing\": \"PROPN\",\n\t\t\t\"robogee\": \"PROPN\",\n\t\t\t\"tokyo\": \"PROPN\",\n\t\t\t\"zeroes\": \"NOUN\",\n\t\t\t\"holding\": \"VERB\",\n\t\t\t\"concerned\": \"ADJ\",\n\t\t\t\"bakery\": \"NOUN\",\n\t\t\t\"designated\": \"VERB\",\n\t\t\t\"statistical\": \"ADJ\",\n\t\t\t\"rugger-square\": \"NOUN\",\n\t\t\t\"pharmacy\": \"NOUN\",\n\t\t\t\"arteries\": \"NOUN\",\n\t\t\t\"mozzarella\": \"NOUN\",\n\t\t\t\"shura\": \"NOUN\",\n\t\t\t\"pge\": \"PROPN\",\n\t\t\t\"mortal\": \"ADJ\",\n\t\t\t\"appreciation\": \"NOUN\",\n\t\t\t\"rearranged\": \"VERB\",\n\t\t\t\"flights\": \"NOUN\",\n\t\t\t\"defend\": \"VERB\",\n\t\t\t\"burnt\": \"ADJ\",\n\t\t\t\"deed\": \"NOUN\",\n\t\t\t\"hamper\": \"VERB\",\n\t\t\t\"i/c\": \"NOUN\",\n\t\t\t\"verdot\": \"PROPN\",\n\t\t\t\"behaviours\": \"NOUN\",\n\t\t\t\"51,516\": \"NUM\",\n\t\t\t\"forgiveness\": \"NOUN\",\n\t\t\t\"palaces\": \"NOUN\",\n\t\t\t\"deluded\": \"VERB\",\n\t\t\t\"bangs\": \"PROPN\",\n\t\t\t\"re-schedule\": \"VERB\",\n\t\t\t\"11/7/08\": \"NUM\",\n\t\t\t\"married\": \"VERB\",\n\t\t\t\"humanity\": \"NOUN\",\n\t\t\t\"displeased\": \"VERB\",\n\t\t\t\"run\": \"VERB\",\n\t\t\t\"1669\": \"NUM\",\n\t\t\t\"dire\": \"ADJ\",\n\t\t\t\"pashtuns\": \"PROPN\",\n\t\t\t\"finnish\": \"NOUN\",\n\t\t\t\"iq\": \"NOUN\",\n\t\t\t\"assigning\": \"VERB\",\n\t\t\t\"slum\": \"NOUN\",\n\t\t\t\"directives\": \"NOUN\",\n\t\t\t\"oppress\": \"VERB\",\n\t\t\t\"houseman\": \"PROPN\",\n\t\t\t\"sassanid\": \"PROPN\",\n\t\t\t\"knitting\": \"NOUN\",\n\t\t\t\"0nside\": \"ADJ\",\n\t\t\t\"der\": \"PROPN\",\n\t\t\t\"relativism\": \"NOUN\",\n\t\t\t\"actors\": \"NOUN\",\n\t\t\t\"reducing\": \"VERB\",\n\t\t\t\"hypothesis\": \"NOUN\",\n\t\t\t\"ootd\": \"INTJ\",\n\t\t\t\"crab\": \"NOUN\",\n\t\t\t\"pediatricians\": \"NOUN\",\n\t\t\t\"catastrophe\": \"NOUN\",\n\t\t\t\"found\": \"VERB\",\n\t\t\t\"mark.carr...@chron.com\": \"PROPN\",\n\t\t\t\"anymore\": \"ADV\",\n\t\t\t\"lansing\": \"PROPN\",\n\t\t\t\"katsof\": \"PROPN\",\n\t\t\t\"model\": \"NOUN\",\n\t\t\t\"complications\": \"NOUN\",\n\t\t\t\"01:47\": \"NUM\",\n\t\t\t\"bafta\": \"PROPN\",\n\t\t\t\"proviso\": \"NOUN\",\n\t\t\t\"domínguez\": \"PROPN\",\n\t\t\t\"brown\": \"ADJ\",\n\t\t\t\"greco\": \"PROPN\",\n\t\t\t\"saga\": \"NOUN\",\n\t\t\t\"stow\": \"PROPN\",\n\t\t\t\"slovenia\": \"PROPN\",\n\t\t\t\"rooms\": \"NOUN\",\n\t\t\t\"shins\": \"NOUN\",\n\t\t\t\"cuisines\": \"NOUN\",\n\t\t\t\"core\": \"NOUN\",\n\t\t\t\"coffeyville\": \"PROPN\",\n\t\t\t\"land\": \"NOUN\",\n\t\t\t\"murfreesboro\": \"PROPN\",\n\t\t\t\"38,000\": \"NUM\",\n\t\t\t\"undeterred\": \"ADJ\",\n\t\t\t\"rein\": \"NOUN\",\n\t\t\t\"3.2\": \"NUM\",\n\t\t\t\"churning\": \"VERB\",\n\t\t\t\"pa\": \"PROPN\",\n\t\t\t\"chick\": \"NOUN\",\n\t\t\t\"sending\": \"VERB\",\n\t\t\t\"view\": \"NOUN\",\n\t\t\t\"#pathos\": \"PROPN\",\n\t\t\t\"upholstered\": \"ADJ\",\n\t\t\t\"cliffs\": \"PROPN\",\n\t\t\t\"21,600\": \"NUM\",\n\t\t\t\"uptown\": \"ADV\",\n\t\t\t\"refreshment\": \"NOUN\",\n\t\t\t\"take\": \"VERB\",\n\t\t\t\"appetizing\": \"ADJ\",\n\t\t\t\"veterans\": \"NOUN\",\n\t\t\t\"causes\": \"NOUN\",\n\t\t\t\"bundy\": \"PROPN\",\n\t\t\t\"capability\": \"NOUN\",\n\t\t\t\"derrick\": \"PROPN\",\n\t\t\t\"plant\": \"NOUN\",\n\t\t\t\"rips\": \"NOUN\",\n\t\t\t\"instructed\": \"VERB\",\n\t\t\t\"licenses\": \"NOUN\",\n\t\t\t\"indemnity\": \"PROPN\",\n\t\t\t\"suspicious\": \"ADJ\",\n\t\t\t\"sandeep\": \"PROPN\",\n\t\t\t\"evacuated\": \"VERB\",\n\t\t\t\"plotted\": \"VERB\",\n\t\t\t\"photos\": \"NOUN\",\n\t\t\t\"cic\": \"PROPN\",\n\t\t\t\"democratic\": \"ADJ\",\n\t\t\t\"hysterical\": \"ADJ\",\n\t\t\t\"defunct\": \"ADJ\",\n\t\t\t\"concentrates\": \"VERB\",\n\t\t\t\"hopes\": \"NOUN\",\n\t\t\t\"milekic\": \"PROPN\",\n\t\t\t\"picasso\": \"PROPN\",\n\t\t\t\"coupon\": \"NOUN\",\n\t\t\t\"maintain\": \"VERB\",\n\t\t\t\"fontainbleu\": \"PROPN\",\n\t\t\t\"switches\": \"NOUN\",\n\t\t\t\"gloucestershire\": \"PROPN\",\n\t\t\t\"colonized\": \"VERB\",\n\t\t\t\"gun-oil\": \"NOUN\",\n\t\t\t\"providers\": \"NOUN\",\n\t\t\t\"selah\": \"PROPN\",\n\t\t\t\"darkling\": \"NOUN\",\n\t\t\t\"inscription\": \"NOUN\",\n\t\t\t\"patronized\": \"VERB\",\n\t\t\t\"releases\": \"NOUN\",\n\t\t\t\"equilon\": \"PROPN\",\n\t\t\t\"bout\": \"PROPN\",\n\t\t\t\"mytouch\": \"PROPN\",\n\t\t\t\"robbi\": \"PROPN\",\n\t\t\t\"tzu\": \"NOUN\",\n\t\t\t\"stai-\": \"INTJ\",\n\t\t\t\"downside\": \"NOUN\",\n\t\t\t\"contributes\": \"VERB\",\n\t\t\t\"deer\": \"NOUN\",\n\t\t\t\"asian\": \"ADJ\",\n\t\t\t\"determining\": \"VERB\",\n\t\t\t\"summers\": \"NOUN\",\n\t\t\t\"bags\": \"NOUN\",\n\t\t\t\"savages\": \"NOUN\",\n\t\t\t\"arsenal\": \"NOUN\",\n\t\t\t\"solved\": \"VERB\",\n\t\t\t\"jito\": \"PROPN\",\n\t\t\t\"marymegan\": \"PROPN\",\n\t\t\t\"6.1\": \"NUM\",\n\t\t\t\"cotton\": \"NOUN\",\n\t\t\t\"routine\": \"NOUN\",\n\t\t\t\"experimenter\": \"NOUN\",\n\t\t\t\"correct\": \"ADJ\",\n\t\t\t\"zenghelis\": \"PROPN\",\n\t\t\t\"blasphemies\": \"NOUN\",\n\t\t\t\"market\": \"NOUN\",\n\t\t\t\"svce\": \"NOUN\",\n\t\t\t\"marilyn\": \"PROPN\",\n\t\t\t\"grandchild\": \"NOUN\",\n\t\t\t\"epistemic\": \"ADJ\",\n\t\t\t\"speculators\": \"NOUN\",\n\t\t\t\"vassar\": \"PROPN\",\n\t\t\t\"custom-house\": \"NOUN\",\n\t\t\t\"take-out\": \"VERB\",\n\t\t\t\"ingredient\": \"NOUN\",\n\t\t\t\"available\": \"ADJ\",\n\t\t\t\"recieved\": \"VERB\",\n\t\t\t\"galantino\": \"PROPN\",\n\t\t\t\"prayers\": \"NOUN\",\n\t\t\t\"stench\": \"NOUN\",\n\t\t\t\"profited\": \"VERB\",\n\t\t\t\"circa\": \"ADP\",\n\t\t\t\"amr\": \"PROPN\",\n\t\t\t\"merchandise\": \"NOUN\",\n\t\t\t\"counselor\": \"NOUN\",\n\t\t\t\"loi\": \"NOUN\",\n\t\t\t\"swarming\": \"VERB\",\n\t\t\t\"airbox\": \"PROPN\",\n\t\t\t\"unconsumables\": \"NOUN\",\n\t\t\t\"visualization\": \"NOUN\",\n\t\t\t\"dispossesses\": \"VERB\",\n\t\t\t\"seasonal\": \"ADJ\",\n\t\t\t\"sketchbook\": \"NOUN\",\n\t\t\t\"dutchman\": \"PROPN\",\n\t\t\t\"examining\": \"VERB\",\n\t\t\t\"fragrant\": \"ADJ\",\n\t\t\t\"u.\": \"PROPN\",\n\t\t\t\"timed\": \"VERB\",\n\t\t\t\"missouri\": \"PROPN\",\n\t\t\t\"avenger\": \"NOUN\",\n\t\t\t\"poneh\": \"NOUN\",\n\t\t\t\"doldrums\": \"NOUN\",\n\t\t\t\"eremites\": \"NOUN\",\n\t\t\t\"functioning\": \"NOUN\",\n\t\t\t\"hong\": \"PROPN\",\n\t\t\t\"pure\": \"ADJ\",\n\t\t\t\"destinations\": \"NOUN\",\n\t\t\t\"services.doc\": \"NOUN\",\n\t\t\t\"hysteria\": \"NOUN\",\n\t\t\t\"landlord\": \"NOUN\",\n\t\t\t\"patriots\": \"NOUN\",\n\t\t\t\"eather\": \"ADV\",\n\t\t\t\"using\": \"VERB\",\n\t\t\t\"kingdom\": \"PROPN\",\n\t\t\t\"segueway\": \"VERB\",\n\t\t\t\"files\": \"NOUN\",\n\t\t\t\"www.kaffeeeis.co.nz\": \"PROPN\",\n\t\t\t\"reminisced\": \"VERB\",\n\t\t\t\"stirred\": \"VERB\",\n\t\t\t\"lusty\": \"ADJ\",\n\t\t\t\"pruned\": \"VERB\",\n\t\t\t\"shouting\": \"NOUN\",\n\t\t\t\"wrinkles\": \"NOUN\",\n\t\t\t\"moldovan\": \"ADJ\",\n\t\t\t\"open-necked\": \"ADJ\",\n\t\t\t\"logging\": \"NOUN\",\n\t\t\t\"spite\": \"NOUN\",\n\t\t\t\"monthly\": \"ADJ\",\n\t\t\t\"visited\": \"VERB\",\n\t\t\t\"oversite\": \"NOUN\",\n\t\t\t\"v02\": \"NOUN\",\n\t\t\t\"constantine\": \"PROPN\",\n\t\t\t\"gentrified\": \"VERB\",\n\t\t\t\"ba'athists\": \"PROPN\",\n\t\t\t\"jill\": \"PROPN\",\n\t\t\t\"back-and-forth\": \"ADV\",\n\t\t\t\"term\": \"NOUN\",\n\t\t\t\"legend\": \"NOUN\",\n\t\t\t\"envoy\": \"NOUN\",\n\t\t\t\"anti-pyongyang\": \"ADJ\",\n\t\t\t\"230,500\": \"NUM\",\n\t\t\t\"brethren\": \"NOUN\",\n\t\t\t\"could\": \"AUX\",\n\t\t\t\"victoria\": \"PROPN\",\n\t\t\t\"oakley\": \"PROPN\",\n\t\t\t\"spring\": \"NOUN\",\n\t\t\t\"administer\": \"VERB\",\n\t\t\t\"planted\": \"VERB\",\n\t\t\t\"caught\": \"VERB\",\n\t\t\t\"prisoner\": \"NOUN\",\n\t\t\t\"mountains\": \"NOUN\",\n\t\t\t\"workshop\": \"NOUN\",\n\t\t\t\"ministries\": \"NOUN\",\n\t\t\t\"expecting\": \"VERB\",\n\t\t\t\"olbina\": \"PROPN\",\n\t\t\t\"awesome\": \"ADJ\",\n\t\t\t\"study\": \"NOUN\",\n\t\t\t\"secularist\": \"NOUN\",\n\t\t\t\"aberrations\": \"NOUN\",\n\t\t\t\"clamoring\": \"NOUN\",\n\t\t\t\"stroll\": \"VERB\",\n\t\t\t\"pennsylvania\": \"PROPN\",\n\t\t\t\"http://i.imgur.com/t2zff.jpg\": \"PROPN\",\n\t\t\t\"stokes\": \"PROPN\",\n\t\t\t\"refute\": \"VERB\",\n\t\t\t\"nice\": \"ADJ\",\n\t\t\t\"accept\": \"VERB\",\n\t\t\t\"09:22\": \"NUM\",\n\t\t\t\"vomiting\": \"VERB\",\n\t\t\t\"holidaying\": \"NOUN\",\n\t\t\t\"tripura\": \"PROPN\",\n\t\t\t\"equator\": \"NOUN\",\n\t\t\t\"coke\": \"PROPN\",\n\t\t\t\"hatfill\": \"PROPN\",\n\t\t\t\"ghassemlou\": \"PROPN\",\n\t\t\t\"impressive\": \"ADJ\",\n\t\t\t\"qinkuang\": \"PROPN\",\n\t\t\t\"explanatorily\": \"ADV\",\n\t\t\t\"khan\": \"PROPN\",\n\t\t\t\"visit\": \"VERB\",\n\t\t\t\"smile\": \"NOUN\",\n\t\t\t\"darn\": \"NOUN\",\n\t\t\t\"atop\": \"ADP\",\n\t\t\t\"arthritis\": \"NOUN\",\n\t\t\t\"professional\": \"ADJ\",\n\t\t\t\"get-a-free-house.com\": \"PROPN\",\n\t\t\t\"partially\": \"ADV\",\n\t\t\t\"kings\": \"NOUN\",\n\t\t\t\"dresser\": \"NOUN\",\n\t\t\t\"olson\": \"PROPN\",\n\t\t\t\"aware\": \"ADJ\",\n\t\t\t\"smiled\": \"VERB\",\n\t\t\t\"chathams\": \"PROPN\",\n\t\t\t\"inexpensive\": \"ADJ\",\n\t\t\t\"manifesto\": \"PROPN\",\n\t\t\t\"cloud\": \"NOUN\",\n\t\t\t\"harbours\": \"NOUN\",\n\t\t\t\"slim\": \"ADJ\",\n\t\t\t\"pun\": \"NOUN\",\n\t\t\t\"decision\": \"NOUN\",\n\t\t\t\"auchleuchries\": \"PROPN\",\n\t\t\t\"controversially\": \"ADV\",\n\t\t\t\"great-grandfather\": \"NOUN\",\n\t\t\t\"lewis\": \"PROPN\",\n\t\t\t\"strengths\": \"NOUN\",\n\t\t\t\"westmoreland\": \"PROPN\",\n\t\t\t\"levis\": \"PROPN\",\n\t\t\t\"disturbed\": \"VERB\",\n\t\t\t\"agency\": \"NOUN\",\n\t\t\t\"broadcasts\": \"NOUN\",\n\t\t\t\"trick\": \"NOUN\",\n\t\t\t\".432\": \"NUM\",\n\t\t\t\"off\": \"ADP\",\n\t\t\t\"shakataganai\": \"PROPN\",\n\t\t\t\"ought\": \"AUX\",\n\t\t\t\"thread\": \"NOUN\",\n\t\t\t\"hammocks\": \"NOUN\",\n\t\t\t\"hassle\": \"NOUN\",\n\t\t\t\"fluff\": \"VERB\",\n\t\t\t\"doi:10.1037/0022-3514.92.6.1087\": \"PROPN\",\n\t\t\t\"posing\": \"VERB\",\n\t\t\t\"loving\": \"ADJ\",\n\t\t\t\"inequalities\": \"NOUN\",\n\t\t\t\"courses\": \"NOUN\",\n\t\t\t\"exodus\": \"NOUN\",\n\t\t\t\"loudspeakers\": \"NOUN\",\n\t\t\t\"ignoramus\": \"NOUN\",\n\t\t\t\"messy\": \"ADJ\",\n\t\t\t\"one's\": \"NOUN\",\n\t\t\t\"unemployment\": \"NOUN\",\n\t\t\t\"ass\": \"NOUN\",\n\t\t\t\"troubles\": \"NOUN\",\n\t\t\t\"centered\": \"VERB\",\n\t\t\t\"protections\": \"NOUN\",\n\t\t\t\"2.0\": \"NUM\",\n\t\t\t\"unending\": \"ADJ\",\n\t\t\t\"impostor\": \"NOUN\",\n\t\t\t\"illustrator\": \"NOUN\",\n\t\t\t\"hotline\": \"NOUN\",\n\t\t\t\"laird\": \"PROPN\",\n\t\t\t\"devised\": \"VERB\",\n\t\t\t\"exempt\": \"VERB\",\n\t\t\t\"spruce\": \"ADJ\",\n\t\t\t\"rector\": \"NOUN\",\n\t\t\t\"uploaded\": \"VERB\",\n\t\t\t\"citygate\": \"PROPN\",\n\t\t\t\"gw\": \"PROPN\",\n\t\t\t\"ci.taiwan.gov.tw\": \"PROPN\",\n\t\t\t\"appointment\": \"NOUN\",\n\t\t\t\"aerial\": \"ADJ\",\n\t\t\t\"1528\": \"NUM\",\n\t\t\t\"mathematically\": \"ADV\",\n\t\t\t\"wearies\": \"VERB\",\n\t\t\t\"mounting\": \"VERB\",\n\t\t\t\"pepper\": \"NOUN\",\n\t\t\t\"anti-israeli\": \"ADJ\",\n\t\t\t\"trailers\": \"NOUN\",\n\t\t\t\"livable\": \"ADJ\",\n\t\t\t\"uncomfortable\": \"ADJ\",\n\t\t\t\"provinces\": \"NOUN\",\n\t\t\t\"malaysian\": \"ADJ\",\n\t\t\t\"bustling\": \"ADJ\",\n\t\t\t\"academia\": \"NOUN\",\n\t\t\t\"avoiding\": \"VERB\",\n\t\t\t\"nowadays\": \"ADV\",\n\t\t\t\"o.j.\": \"PROPN\",\n\t\t\t\"translucent\": \"ADJ\",\n\t\t\t\"laundromats\": \"NOUN\",\n\t\t\t\"cross-sectoral\": \"ADJ\",\n\t\t\t\"glendale\": \"PROPN\",\n\t\t\t\"cohen\": \"PROPN\",\n\t\t\t\"apologised\": \"VERB\",\n\t\t\t\"thrones\": \"PROPN\",\n\t\t\t\"not\": \"PART\",\n\t\t\t\"accommodate\": \"VERB\",\n\t\t\t\"commerce\": \"NOUN\",\n\t\t\t\"seminal\": \"ADJ\",\n\t\t\t\"refuge\": \"NOUN\",\n\t\t\t\"veranda\": \"NOUN\",\n\t\t\t\"grateful\": \"ADJ\",\n\t\t\t\"associates\": \"NOUN\",\n\t\t\t\"over-simplifying\": \"VERB\",\n\t\t\t\"co-creators\": \"NOUN\",\n\t\t\t\"buffeting\": \"NOUN\",\n\t\t\t\"02:39:27\": \"NUM\",\n\t\t\t\"aerosol\": \"NOUN\",\n\t\t\t\"obliterated\": \"VERB\",\n\t\t\t\"claus\": \"PROPN\",\n\t\t\t\"clock\": \"NOUN\",\n\t\t\t\"frs\": \"PROPN\",\n\t\t\t\"severe\": \"ADJ\",\n\t\t\t\"tasks\": \"NOUN\",\n\t\t\t\"giverny\": \"PROPN\",\n\t\t\t\"relaxed\": \"ADJ\",\n\t\t\t\"fallujah\": \"PROPN\",\n\t\t\t\"splashy\": \"ADJ\",\n\t\t\t\"perennial\": \"ADJ\",\n\t\t\t\"aeroméxico\": \"PROPN\",\n\t\t\t\"parade\": \"NOUN\",\n\t\t\t\"la\": \"PROPN\",\n\t\t\t\"advocated\": \"VERB\",\n\t\t\t\"agility\": \"NOUN\",\n\t\t\t\"realtime\": \"ADJ\",\n\t\t\t\"nj\": \"PROPN\",\n\t\t\t\"clerks\": \"NOUN\",\n\t\t\t\"feebly\": \"ADV\",\n\t\t\t\"glitz\": \"NOUN\",\n\t\t\t\"scaring\": \"VERB\",\n\t\t\t\"origami\": \"NOUN\",\n\t\t\t\"squared\": \"VERB\",\n\t\t\t\"midget\": \"NOUN\",\n\t\t\t\"dried\": \"VERB\",\n\t\t\t\"fabric\": \"NOUN\",\n\t\t\t\"goyish\": \"ADJ\",\n\t\t\t\"galaxy\": \"NOUN\",\n\t\t\t\"raids\": \"NOUN\",\n\t\t\t\"fear\": \"NOUN\",\n\t\t\t\"convert\": \"VERB\",\n\t\t\t\"attitudes\": \"NOUN\",\n\t\t\t\"91\": \"NUM\",\n\t\t\t\"novelty\": \"NOUN\",\n\t\t\t\"ibrahim\": \"PROPN\",\n\t\t\t\"penetrates\": \"VERB\",\n\t\t\t\"holes\": \"NOUN\",\n\t\t\t\"surface\": \"NOUN\",\n\t\t\t\"screener\": \"NOUN\",\n\t\t\t\"lovable\": \"ADJ\",\n\t\t\t\"parliament\": \"NOUN\",\n\t\t\t\"cooked\": \"VERB\",\n\t\t\t\"126\": \"NUM\",\n\t\t\t\"convicts\": \"NOUN\",\n\t\t\t\"dwellings\": \"NOUN\",\n\t\t\t\"nonmaterial\": \"ADJ\",\n\t\t\t\"tulips\": \"NOUN\",\n\t\t\t\"moisture\": \"NOUN\",\n\t\t\t\"cummings\": \"PROPN\",\n\t\t\t\"occupancy\": \"NOUN\",\n\t\t\t\"chapters\": \"NOUN\",\n\t\t\t\"deadbolted\": \"VERB\",\n\t\t\t\"spoiled\": \"ADJ\",\n\t\t\t\"apostles\": \"NOUN\",\n\t\t\t\"surrendered\": \"VERB\",\n\t\t\t\"09/20/2000\": \"NUM\",\n\t\t\t\"non-compete\": \"NOUN\",\n\t\t\t\"ri\": \"PROPN\",\n\t\t\t\"exercised\": \"VERB\",\n\t\t\t\"judging\": \"VERB\",\n\t\t\t\"georges\": \"PROPN\",\n\t\t\t\"vegetation\": \"NOUN\",\n\t\t\t\"anything\": \"PRON\",\n\t\t\t\"bastard\": \"NOUN\",\n\t\t\t\"281-518-9526\": \"NUM\",\n\t\t\t\"policemen\": \"NOUN\",\n\t\t\t\"aloha\": \"INTJ\",\n\t\t\t\"forty\": \"NUM\",\n\t\t\t\"bizarre\": \"ADJ\",\n\t\t\t\"towel\": \"NOUN\",\n\t\t\t\"4chan\": \"PROPN\",\n\t\t\t\"skimmer\": \"NOUN\",\n\t\t\t\"deserves\": \"VERB\",\n\t\t\t\"great\": \"ADJ\",\n\t\t\t\"mma\": \"PROPN\",\n\t\t\t\"agence\": \"PROPN\",\n\t\t\t\"juddering\": \"ADJ\",\n\t\t\t\"nicobar\": \"PROPN\",\n\t\t\t\"runflats\": \"NOUN\",\n\t\t\t\"streams\": \"NOUN\",\n\t\t\t\"stormy\": \"ADJ\",\n\t\t\t\"grossly\": \"ADV\",\n\t\t\t\"bounding\": \"VERB\",\n\t\t\t\"bbq\": \"NOUN\",\n\t\t\t\"sc.\": \"NOUN\",\n\t\t\t\"thumpstar\": \"PROPN\",\n\t\t\t\"levels\": \"NOUN\",\n\t\t\t\"precisely\": \"ADV\",\n\t\t\t\"require\": \"VERB\",\n\t\t\t\"administration\": \"NOUN\",\n\t\t\t\"george\": \"PROPN\",\n\t\t\t\"baldness\": \"NOUN\",\n\t\t\t\"width\": \"NOUN\",\n\t\t\t\"johnelle\": \"PROPN\",\n\t\t\t\"appellees\": \"NOUN\",\n\t\t\t\"coils\": \"NOUN\",\n\t\t\t\"deeply\": \"ADV\",\n\t\t\t\"fdi\": \"NOUN\",\n\t\t\t\"astros\": \"PROPN\",\n\t\t\t\"kido\": \"NOUN\",\n\t\t\t\"sins\": \"NOUN\",\n\t\t\t\"teachers\": \"NOUN\",\n\t\t\t\"lawsuit\": \"NOUN\",\n\t\t\t\"interpreter\": \"NOUN\",\n\t\t\t\"scare\": \"VERB\",\n\t\t\t\"utensil\": \"NOUN\",\n\t\t\t\"railroad\": \"NOUN\",\n\t\t\t\"deepen\": \"VERB\",\n\t\t\t\"binalshibh\": \"PROPN\",\n\t\t\t\"ben\": \"PROPN\",\n\t\t\t\"dungeon\": \"NOUN\",\n\t\t\t\"sex\": \"NOUN\",\n\t\t\t\"beloved\": \"ADJ\",\n\t\t\t\"mr.\": \"PROPN\",\n\t\t\t\"approx.\": \"ADV\",\n\t\t\t\"established\": \"VERB\",\n\t\t\t\"fenders\": \"NOUN\",\n\t\t\t\"utterly\": \"ADV\",\n\t\t\t\"leading\": \"VERB\",\n\t\t\t\"tested\": \"VERB\",\n\t\t\t\"allawi\": \"PROPN\",\n\t\t\t\"grant\": \"NOUN\",\n\t\t\t\"1809\": \"NUM\",\n\t\t\t\"symphony\": \"NOUN\",\n\t\t\t\"enough\": \"ADV\",\n\t\t\t\"spoilers\": \"NOUN\",\n\t\t\t\"sum\": \"NOUN\",\n\t\t\t\"train\": \"NOUN\",\n\t\t\t\"shahid\": \"PROPN\",\n\t\t\t\"tearing\": \"VERB\",\n\t\t\t\"deathlike\": \"ADJ\",\n\t\t\t\"telegram\": \"NOUN\",\n\t\t\t\"sentry\": \"NOUN\",\n\t\t\t\"fakes\": \"NOUN\",\n\t\t\t\"anti-fraud\": \"PROPN\",\n\t\t\t\"screem\": \"VERB\",\n\t\t\t\"hubbard\": \"PROPN\",\n\t\t\t\"aphids\": \"NOUN\",\n\t\t\t\"heels\": \"NOUN\",\n\t\t\t\"571-9571\": \"NUM\",\n\t\t\t\"mangold\": \"PROPN\",\n\t\t\t\"nella\": \"PROPN\",\n\t\t\t\"precision\": \"NOUN\",\n\t\t\t\"announcement\": \"NOUN\",\n\t\t\t\"alright\": \"INTJ\",\n\t\t\t\"turk\": \"PROPN\",\n\t\t\t\"blak\": \"ADJ\",\n\t\t\t\"guadeloupean\": \"ADJ\",\n\t\t\t\"doubling\": \"VERB\",\n\t\t\t\"personality\": \"NOUN\",\n\t\t\t\"disadvantages\": \"NOUN\",\n\t\t\t\"yekaterinburg\": \"PROPN\",\n\t\t\t\"ceremoniously\": \"ADV\",\n\t\t\t\"jog\": \"NOUN\",\n\t\t\t\"minkin\": \"PROPN\",\n\t\t\t\"ensuring\": \"VERB\",\n\t\t\t\"edited\": \"VERB\",\n\t\t\t\"alreet\": \"INTJ\",\n\t\t\t\"ulgg\": \"PROPN\",\n\t\t\t\"finley\": \"PROPN\",\n\t\t\t\"flattened\": \"VERB\",\n\t\t\t\"05:37\": \"NUM\",\n\t\t\t\"roaches\": \"NOUN\",\n\t\t\t\"rook\": \"PROPN\",\n\t\t\t\"pelosi\": \"PROPN\",\n\t\t\t\"pamplona\": \"PROPN\",\n\t\t\t\"na\": \"PART\",\n\t\t\t\"gustavo\": \"PROPN\",\n\t\t\t\"serve\": \"VERB\",\n\t\t\t\"insanely\": \"ADV\",\n\t\t\t\"photographed\": \"VERB\",\n\t\t\t\"antique\": \"ADJ\",\n\t\t\t\"standup\": \"NOUN\",\n\t\t\t\"correspondence\": \"NOUN\",\n\t\t\t\"trading-post\": \"NOUN\",\n\t\t\t\"cutaneous\": \"ADJ\",\n\t\t\t\"trapped\": \"VERB\",\n\t\t\t\"conventions\": \"NOUN\",\n\t\t\t\"swirling\": \"VERB\",\n\t\t\t\"tent\": \"NOUN\",\n\t\t\t\"queries\": \"NOUN\",\n\t\t\t\"machinery\": \"NOUN\",\n\t\t\t\"syracuse\": \"PROPN\",\n\t\t\t\"fell\": \"VERB\",\n\t\t\t\"11.5\": \"NUM\",\n\t\t\t\"color\": \"NOUN\",\n\t\t\t\"expanded\": \"VERB\",\n\t\t\t\"correspondents\": \"NOUN\",\n\t\t\t\"1-800-991-9019\": \"NUM\",\n\t\t\t\"illumination\": \"NOUN\",\n\t\t\t\"mosques\": \"NOUN\",\n\t\t\t\"cbs\": \"PROPN\",\n\t\t\t\"vs.\": \"ADP\",\n\t\t\t\"motors\": \"PROPN\",\n\t\t\t\"08:22\": \"NUM\",\n\t\t\t\"reagan\": \"PROPN\",\n\t\t\t\"thierry\": \"PROPN\",\n\t\t\t\"backlog\": \"NOUN\",\n\t\t\t\"deficiency\": \"NOUN\",\n\t\t\t\"ice-creams\": \"NOUN\",\n\t\t\t\"regroup\": \"VERB\",\n\t\t\t\"burrow\": \"VERB\",\n\t\t\t\"landowners\": \"NOUN\",\n\t\t\t\"horizontally\": \"ADV\",\n\t\t\t\"worsening\": \"VERB\",\n\t\t\t\"100,000,000,000\": \"NUM\",\n\t\t\t\"reilly\": \"PROPN\",\n\t\t\t\"1-877-331-6867\": \"NUM\",\n\t\t\t\"poem\": \"NOUN\",\n\t\t\t\"wolf\": \"NOUN\",\n\t\t\t\"troublesome\": \"ADJ\",\n\t\t\t\"betrayed\": \"VERB\",\n\t\t\t\"1950\": \"NUM\",\n\t\t\t\"warfare\": \"NOUN\",\n\t\t\t\"harpoon\": \"PROPN\",\n\t\t\t\"winked\": \"VERB\",\n\t\t\t\"step\": \"NOUN\",\n\t\t\t\"cease\": \"VERB\",\n\t\t\t\"nbc\": \"PROPN\",\n\t\t\t\"i-\": \"INTJ\",\n\t\t\t\"streamlined\": \"VERB\",\n\t\t\t\"twenty-year\": \"NOUN\",\n\t\t\t\"01:57\": \"NUM\",\n\t\t\t\"m&m\": \"PROPN\",\n\t\t\t\"revival\": \"NOUN\",\n\t\t\t\"memories\": \"NOUN\",\n\t\t\t\"13th\": \"ADJ\",\n\t\t\t\"30\": \"NUM\",\n\t\t\t\"pillowcase\": \"NOUN\",\n\t\t\t\"distance\": \"NOUN\",\n\t\t\t\"employees\": \"NOUN\",\n\t\t\t\"abdomen\": \"NOUN\",\n\t\t\t\"flirtatious\": \"ADJ\",\n\t\t\t\"amassed\": \"VERB\",\n\t\t\t\"adversity\": \"NOUN\",\n\t\t\t\"chadli\": \"PROPN\",\n\t\t\t\"gare\": \"PROPN\",\n\t\t\t\"phased\": \"VERB\",\n\t\t\t\"calif\": \"PROPN\",\n\t\t\t\"11/8/2000\": \"NUM\",\n\t\t\t\"prompt\": \"ADJ\",\n\t\t\t\"equaling\": \"VERB\",\n\t\t\t\"sexuality\": \"NOUN\",\n\t\t\t\"widely\": \"ADV\",\n\t\t\t\"probable\": \"ADJ\",\n\t\t\t\"samoa\": \"PROPN\",\n\t\t\t\"retain\": \"VERB\",\n\t\t\t\"reclamation\": \"NOUN\",\n\t\t\t\"formal\": \"ADJ\",\n\t\t\t\"evacuate\": \"VERB\",\n\t\t\t\"copied\": \"VERB\",\n\t\t\t\"gee\": \"NOUN\",\n\t\t\t\"letter\": \"NOUN\",\n\t\t\t\"politeness\": \"NOUN\",\n\t\t\t\"stout\": \"PROPN\",\n\t\t\t\"breakers\": \"NOUN\",\n\t\t\t\"thematically\": \"ADV\",\n\t\t\t\"dilute\": \"ADJ\",\n\t\t\t\"ii\": \"NUM\",\n\t\t\t\"rebirth\": \"NOUN\",\n\t\t\t\"virgo\": \"PROPN\",\n\t\t\t\"outreach\": \"NOUN\",\n\t\t\t\"undisputed\": \"ADJ\",\n\t\t\t\"dth\": \"ADJ\",\n\t\t\t\"crocodilians\": \"NOUN\",\n\t\t\t\"waterfall\": \"NOUN\",\n\t\t\t\"01/19/01\": \"NUM\",\n\t\t\t\"ported\": \"ADJ\",\n\t\t\t\"estate\": \"NOUN\",\n\t\t\t\"vitalized\": \"VERB\",\n\t\t\t\"shrunken\": \"ADJ\",\n\t\t\t\"argue\": \"VERB\",\n\t\t\t\"renew\": \"VERB\",\n\t\t\t\"nets\": \"NOUN\",\n\t\t\t\"baleful\": \"ADJ\",\n\t\t\t\"abilities\": \"NOUN\",\n\t\t\t\"zurbarán\": \"PROPN\",\n\t\t\t\"affirms\": \"VERB\",\n\t\t\t\"86m\": \"NOUN\",\n\t\t\t\"damning\": \"ADJ\",\n\t\t\t\"dishwasher\": \"NOUN\",\n\t\t\t\"truer\": \"ADJ\",\n\t\t\t\"maine\": \"PROPN\",\n\t\t\t\"yrs\": \"NOUN\",\n\t\t\t\"summarized\": \"VERB\",\n\t\t\t\"migrant\": \"NOUN\",\n\t\t\t\"shelf\": \"NOUN\",\n\t\t\t\"newman\": \"PROPN\",\n\t\t\t\"marine\": \"ADJ\",\n\t\t\t\"coding\": \"NOUN\",\n\t\t\t\"laffa\": \"NOUN\",\n\t\t\t\"hub\": \"NOUN\",\n\t\t\t\"terrestrial\": \"ADJ\",\n\t\t\t\"76\": \"NUM\",\n\t\t\t\"splattered\": \"VERB\",\n\t\t\t\"resubstantiation\": \"NOUN\",\n\t\t\t\"minorities\": \"NOUN\",\n\t\t\t\"bechtolsheim\": \"PROPN\",\n\t\t\t\"caffe\": \"PROPN\",\n\t\t\t\"applause\": \"NOUN\",\n\t\t\t\"gaps\": \"NOUN\",\n\t\t\t\"tends\": \"VERB\",\n\t\t\t\"wanderer\": \"NOUN\",\n\t\t\t\"non-social\": \"ADJ\",\n\t\t\t\"defending\": \"VERB\",\n\t\t\t\"liberalize\": \"VERB\",\n\t\t\t\"psycho-spiritual\": \"ADJ\",\n\t\t\t\"boutiques\": \"NOUN\",\n\t\t\t\"enemies\": \"NOUN\",\n\t\t\t\"compensation\": \"NOUN\",\n\t\t\t\"credential\": \"VERB\",\n\t\t\t\"digs\": \"VERB\",\n\t\t\t\"mysterious\": \"ADJ\",\n\t\t\t\"spaciously\": \"ADV\",\n\t\t\t\"duel\": \"NOUN\",\n\t\t\t\"targetting\": \"VERB\",\n\t\t\t\"2;30\": \"NUM\",\n\t\t\t\"mutants\": \"NOUN\",\n\t\t\t\"metcalfe\": \"PROPN\",\n\t\t\t\"modulated\": \"VERB\",\n\t\t\t\"jeering\": \"ADJ\",\n\t\t\t\"likable\": \"ADJ\",\n\t\t\t\"contradict\": \"VERB\",\n\t\t\t\"x-37097\": \"NOUN\",\n\t\t\t\"catches\": \"VERB\",\n\t\t\t\"psychology\": \"NOUN\",\n\t\t\t\"alto\": \"PROPN\",\n\t\t\t\"dearly\": \"ADV\",\n\t\t\t\"hard\": \"ADJ\",\n\t\t\t\"self-esteem\": \"NOUN\",\n\t\t\t\"9866\": \"NUM\",\n\t\t\t\"longed\": \"VERB\",\n\t\t\t\"saleable\": \"ADJ\",\n\t\t\t\"ortiz\": \"PROPN\",\n\t\t\t\"emulate\": \"VERB\",\n\t\t\t\"1699\": \"NUM\",\n\t\t\t\"lisp\": \"NOUN\",\n\t\t\t\"requests\": \"NOUN\",\n\t\t\t\"cozy\": \"ADJ\",\n\t\t\t\"unavailable\": \"ADJ\",\n\t\t\t\"daughters\": \"NOUN\",\n\t\t\t\"womenfolk\": \"NOUN\",\n\t\t\t\"sut\": \"NOUN\",\n\t\t\t\"frothy\": \"ADJ\",\n\t\t\t\"endorsed\": \"VERB\",\n\t\t\t\"budgies\": \"NOUN\",\n\t\t\t\"pabloruizfabo@gmail.com\": \"PROPN\",\n\t\t\t\"remington\": \"PROPN\",\n\t\t\t\"breyer\": \"NOUN\",\n\t\t\t\"ozark\": \"PROPN\",\n\t\t\t\"http://www.the-dslr-photographer.com/2009/11/which-dslr-to-buy/\": \"PROPN\",\n\t\t\t\"retrieved\": \"VERB\",\n\t\t\t\"hazardous\": \"ADJ\",\n\t\t\t\"09/11/99\": \"NUM\",\n\t\t\t\"chatnam\": \"PROPN\",\n\t\t\t\"app\": \"NOUN\",\n\t\t\t\"interpreted\": \"VERB\",\n\t\t\t\"kinsler\": \"PROPN\",\n\t\t\t\"rampart\": \"NOUN\",\n\t\t\t\"dialing\": \"VERB\",\n\t\t\t\"assertion\": \"NOUN\",\n\t\t\t\"forcing\": \"VERB\",\n\t\t\t\"acceptable\": \"ADJ\",\n\t\t\t\"nukes\": \"NOUN\",\n\t\t\t\"denmark\": \"PROPN\",\n\t\t\t\"ecological\": \"ADJ\",\n\t\t\t\"dostoyevsky\": \"PROPN\",\n\t\t\t\"hero\": \"NOUN\",\n\t\t\t\"impress\": \"VERB\",\n\t\t\t\"helicopters\": \"NOUN\",\n\t\t\t\"belarus\": \"PROPN\",\n\t\t\t\"zahav\": \"PROPN\",\n\t\t\t\"mtps\": \"PROPN\",\n\t\t\t\"sponge-bag\": \"NOUN\",\n\t\t\t\"famed\": \"ADJ\",\n\t\t\t\"cruisecompete\": \"PROPN\",\n\t\t\t\"joker\": \"PROPN\",\n\t\t\t\"inscrutable\": \"ADJ\",\n\t\t\t\"indefinite\": \"ADJ\",\n\t\t\t\"comfort\": \"NOUN\",\n\t\t\t\"fi\": \"NOUN\",\n\t\t\t\"compensate\": \"VERB\",\n\t\t\t\"sliver\": \"NOUN\",\n\t\t\t\"destinies\": \"NOUN\",\n\t\t\t\"kibbutz\": \"NOUN\",\n\t\t\t\"seed\": \"NOUN\",\n\t\t\t\"navigation\": \"NOUN\",\n\t\t\t\"textile\": \"NOUN\",\n\t\t\t\"strzalka\": \"PROPN\",\n\t\t\t\"wear\": \"VERB\",\n\t\t\t\"neglect\": \"NOUN\",\n\t\t\t\"adventure\": \"NOUN\",\n\t\t\t\"http://www.euci.com/pdf/trans_expn.pdf\": \"PROPN\",\n\t\t\t\"absorbed\": \"VERB\",\n\t\t\t\"tiffany\": \"PROPN\",\n\t\t\t\"provoked\": \"VERB\",\n\t\t\t\"20.00\": \"NUM\",\n\t\t\t\"converting\": \"VERB\",\n\t\t\t\"clusters\": \"NOUN\",\n\t\t\t\"addictions\": \"NOUN\",\n\t\t\t\"quickly\": \"ADV\",\n\t\t\t\"occasionally\": \"ADV\",\n\t\t\t\"gearing\": \"VERB\",\n\t\t\t\"ignore\": \"VERB\",\n\t\t\t\"casing\": \"VERB\",\n\t\t\t\"superfund\": \"PROPN\",\n\t\t\t\"justify\": \"VERB\",\n\t\t\t\"desperate\": \"ADJ\",\n\t\t\t\"occur\": \"VERB\",\n\t\t\t\"propensity\": \"NOUN\",\n\t\t\t\"363-0555\": \"NUM\",\n\t\t\t\"cheaper\": \"ADJ\",\n\t\t\t\"resumed\": \"VERB\",\n\t\t\t\"4:30\": \"NUM\",\n\t\t\t\"singularity\": \"NOUN\",\n\t\t\t\"shelling\": \"VERB\",\n\t\t\t\"anxious\": \"ADJ\",\n\t\t\t\"shinza\": \"PROPN\",\n\t\t\t\"composing\": \"VERB\",\n\t\t\t\"trooper\": \"NOUN\",\n\t\t\t\"http://www.thekcrachannel.com/news/4503872/detail.html\": \"PROPN\",\n\t\t\t\"convicted\": \"VERB\",\n\t\t\t\"helped\": \"VERB\",\n\t\t\t\"rich\": \"ADJ\",\n\t\t\t\"martyr\": \"NOUN\",\n\t\t\t\"blindfolded\": \"VERB\",\n\t\t\t\"weaklings\": \"NOUN\",\n\t\t\t\"rubber\": \"NOUN\",\n\t\t\t\"chambers\": \"NOUN\",\n\t\t\t\"fino\": \"NOUN\",\n\t\t\t\"snotty\": \"ADJ\",\n\t\t\t\"gambit\": \"NOUN\",\n\t\t\t\"hesitant\": \"ADJ\",\n\t\t\t\"ssa\": \"PROPN\",\n\t\t\t\"two-day\": \"NOUN\",\n\t\t\t\"35,000\": \"NUM\",\n\t\t\t\"migrations\": \"NOUN\",\n\t\t\t\"foisted\": \"VERB\",\n\t\t\t\"'ve\": \"AUX\",\n\t\t\t\"undersecretary\": \"NOUN\",\n\t\t\t\"lapping\": \"VERB\",\n\t\t\t\"compressor\": \"NOUN\",\n\t\t\t\"jug\": \"NOUN\",\n\t\t\t\"reposted\": \"VERB\",\n\t\t\t\"premium\": \"NOUN\",\n\t\t\t\"specifies\": \"VERB\",\n\t\t\t\"enrollment\": \"NOUN\",\n\t\t\t\"ultimate\": \"ADJ\",\n\t\t\t\"whips\": \"NOUN\",\n\t\t\t\"artworld\": \"NOUN\",\n\t\t\t\"dozens\": \"NOUN\",\n\t\t\t\"gauge\": \"VERB\",\n\t\t\t\"renton\": \"PROPN\",\n\t\t\t\"freezer\": \"NOUN\",\n\t\t\t\"wikipedia\": \"PROPN\",\n\t\t\t\"robinson\": \"PROPN\",\n\t\t\t\"expense\": \"NOUN\",\n\t\t\t\"uk\": \"PROPN\",\n\t\t\t\"curl\": \"PROPN\",\n\t\t\t\"l.p\": \"NOUN\",\n\t\t\t\"lifelong\": \"ADJ\",\n\t\t\t\"alena\": \"PROPN\",\n\t\t\t\"aura\": \"NOUN\",\n\t\t\t\"coupling\": \"NOUN\",\n\t\t\t\"timothy\": \"PROPN\",\n\t\t\t\"sur\": \"PROPN\",\n\t\t\t\"bootham\": \"PROPN\",\n\t\t\t\"d'herbinville\": \"PROPN\",\n\t\t\t\"paraíso\": \"PROPN\",\n\t\t\t\"cooperated\": \"VERB\",\n\t\t\t\"http://www.justcages.co.uk/ferret-cages/ferplast-furet-plus-ferret-cage#v_431\": \"PROPN\",\n\t\t\t\"mary.ellenberger@enron.com\": \"PROPN\",\n\t\t\t\"mcbride\": \"PROPN\",\n\t\t\t\"drumming\": \"VERB\",\n\t\t\t\"crisis\": \"NOUN\",\n\t\t\t\"luo\": \"PROPN\",\n\t\t\t\"fake\": \"ADJ\",\n\t\t\t\"utensils\": \"NOUN\",\n\t\t\t\"interrogative\": \"ADJ\",\n\t\t\t\"pulled\": \"VERB\",\n\t\t\t\"ta\": \"PART\",\n\t\t\t\"sticker\": \"NOUN\",\n\t\t\t\"multi-compartment\": \"ADJ\",\n\t\t\t\"armatho\": \"PROPN\",\n\t\t\t\"paraded\": \"NOUN\",\n\t\t\t\"agrees\": \"VERB\",\n\t\t\t\"broom\": \"NOUN\",\n\t\t\t\"79,000\": \"NUM\",\n\t\t\t\"maritime\": \"ADJ\",\n\t\t\t\"flame\": \"NOUN\",\n\t\t\t\"gesticulating\": \"VERB\",\n\t\t\t\"restrain\": \"VERB\",\n\t\t\t\"pitiless\": \"ADJ\",\n\t\t\t\"deafening\": \"VERB\",\n\t\t\t\"jiangsu\": \"PROPN\",\n\t\t\t\"worth\": \"ADJ\",\n\t\t\t\"11,000\": \"NUM\",\n\t\t\t\"questi\": \"VERB\",\n\t\t\t\"happenstance\": \"NOUN\",\n\t\t\t\"showing\": \"VERB\",\n\t\t\t\"dome\": \"NOUN\",\n\t\t\t\"showgirl\": \"NOUN\",\n\t\t\t\"superstars\": \"NOUN\",\n\t\t\t\"trust\": \"VERB\",\n\t\t\t\"sophisticated\": \"ADJ\",\n\t\t\t\"px\": \"PROPN\",\n\t\t\t\"helpers\": \"NOUN\",\n\t\t\t\"officials\": \"NOUN\",\n\t\t\t\"circling\": \"VERB\",\n\t\t\t\"damnation\": \"NOUN\",\n\t\t\t\"innovator\": \"NOUN\",\n\t\t\t\"way\": \"NOUN\",\n\t\t\t\"http://www.bullatomsci.org/issues/1993/s93/s93marples.html\": \"PROPN\",\n\t\t\t\"eye\": \"NOUN\",\n\t\t\t\"aaaaaggghhhhhh\": \"INTJ\",\n\t\t\t\"disabilities\": \"NOUN\",\n\t\t\t\"quarry\": \"NOUN\",\n\t\t\t\"fearing\": \"VERB\",\n\t\t\t\"pr-\": \"INTJ\",\n\t\t\t\"87\": \"NUM\",\n\t\t\t\"loading\": \"NOUN\",\n\t\t\t\"angels\": \"NOUN\",\n\t\t\t\"tenure\": \"NOUN\",\n\t\t\t\"phonologie\": \"PROPN\",\n\t\t\t\"hopeless\": \"ADJ\",\n\t\t\t\"memphis\": \"PROPN\",\n\t\t\t\"distracting\": \"ADJ\",\n\t\t\t\"coolly\": \"ADV\",\n\t\t\t\"uhm\": \"INTJ\",\n\t\t\t\"zoomed\": \"PROPN\",\n\t\t\t\"mitigate\": \"VERB\",\n\t\t\t\"funds\": \"NOUN\",\n\t\t\t\"believed\": \"VERB\",\n\t\t\t\"cardinals\": \"PROPN\",\n\t\t\t\"inventor\": \"NOUN\",\n\t\t\t\"cpim\": \"NOUN\",\n\t\t\t\"joan\": \"PROPN\",\n\t\t\t\"defensive\": \"ADJ\",\n\t\t\t\"1715\": \"NUM\",\n\t\t\t\"scene\": \"NOUN\",\n\t\t\t\"placed\": \"VERB\",\n\t\t\t\"perpetrated\": \"VERB\",\n\t\t\t\"postmaster\": \"PROPN\",\n\t\t\t\"esai\": \"PROPN\",\n\t\t\t\"banking\": \"NOUN\",\n\t\t\t\"lieutenants\": \"NOUN\",\n\t\t\t\"university\": \"PROPN\",\n\t\t\t\"representative\": \"NOUN\",\n\t\t\t\"refers\": \"VERB\",\n\t\t\t\"unify\": \"VERB\",\n\t\t\t\"prohibited\": \"VERB\",\n\t\t\t\"sunk\": \"VERB\",\n\t\t\t\"huver\": \"PROPN\",\n\t\t\t\"pandemic\": \"NOUN\",\n\t\t\t\"nix\": \"PROPN\",\n\t\t\t\"phenophases\": \"NOUN\",\n\t\t\t\"heed\": \"NOUN\",\n\t\t\t\"signage\": \"NOUN\",\n\t\t\t\"returns\": \"VERB\",\n\t\t\t\"showdown\": \"NOUN\",\n\t\t\t\"high-speed\": \"NOUN\",\n\t\t\t\"clyst\": \"PROPN\",\n\t\t\t\"smartwolves\": \"PROPN\",\n\t\t\t\"directive\": \"NOUN\",\n\t\t\t\"intent\": \"NOUN\",\n\t\t\t\"computer\": \"NOUN\",\n\t\t\t\"inventorying\": \"VERB\",\n\t\t\t\"hills\": \"NOUN\",\n\t\t\t\"paranormal\": \"ADJ\",\n\t\t\t\"congresswoman\": \"PROPN\",\n\t\t\t\"percentages\": \"NOUN\",\n\t\t\t\".???\": \"PUNCT\",\n\t\t\t\"god-forsaken\": \"ADJ\",\n\t\t\t\"bergère\": \"PROPN\",\n\t\t\t\"jacob\": \"PROPN\",\n\t\t\t\"skull\": \"NOUN\",\n\t\t\t\"bless\": \"VERB\",\n\t\t\t\"presented\": \"VERB\",\n\t\t\t\"56a\": \"SYM\",\n\t\t\t\"downtrodden\": \"ADJ\",\n\t\t\t\"750,000\": \"NUM\",\n\t\t\t\"316\": \"NUM\",\n\t\t\t\"ominous\": \"ADJ\",\n\t\t\t\"aromas\": \"NOUN\",\n\t\t\t\"punching\": \"VERB\",\n\t\t\t\"wells\": \"PROPN\",\n\t\t\t\"chocolate\": \"NOUN\",\n\t\t\t\"swallowing\": \"VERB\",\n\t\t\t\"thanksgiv8ing\": \"PROPN\",\n\t\t\t\"mujahedeen\": \"PROPN\",\n\t\t\t\"fy04\": \"NOUN\",\n\t\t\t\"saaaaaam\": \"PROPN\",\n\t\t\t\"hydraulica\": \"PROPN\",\n\t\t\t\"offing\": \"NOUN\",\n\t\t\t\"nodded\": \"VERB\",\n\t\t\t\"bursts\": \"NOUN\",\n\t\t\t\"distribute\": \"VERB\",\n\t\t\t\"fermented\": \"VERB\",\n\t\t\t\"stabilize\": \"VERB\",\n\t\t\t\"red-haired\": \"ADJ\",\n\t\t\t\"aaa\": \"PROPN\",\n\t\t\t\"shaw\": \"PROPN\",\n\t\t\t\"luminol\": \"NOUN\",\n\t\t\t\"boyles\": \"PROPN\",\n\t\t\t\"abstraction\": \"NOUN\",\n\t\t\t\"epitome\": \"NOUN\",\n\t\t\t\"deterrent\": \"NOUN\",\n\t\t\t\"xml-based\": \"ADJ\",\n\t\t\t\"glaciers\": \"NOUN\",\n\t\t\t\"quinoa\": \"NOUN\",\n\t\t\t\"mimmy\": \"PROPN\",\n\t\t\t\"darkly\": \"ADV\",\n\t\t\t\"quinn\": \"PROPN\",\n\t\t\t\"footpaths\": \"NOUN\",\n\t\t\t\"swim\": \"VERB\",\n\t\t\t\"isda\": \"NOUN\",\n\t\t\t\"rehearing\": \"NOUN\",\n\t\t\t\"berkeley\": \"PROPN\",\n\t\t\t\"values\": \"NOUN\",\n\t\t\t\"joel\": \"PROPN\",\n\t\t\t\"non-violent\": \"ADJ\",\n\t\t\t\"shrink\": \"NOUN\",\n\t\t\t\"arun\": \"PROPN\",\n\t\t\t\"recognises\": \"VERB\",\n\t\t\t\"copying\": \"VERB\",\n\t\t\t\"alarcos\": \"PROPN\",\n\t\t\t\"saints\": \"NOUN\",\n\t\t\t\"someday\": \"ADV\",\n\t\t\t\"hedge\": \"NOUN\",\n\t\t\t\"magistrate\": \"NOUN\",\n\t\t\t\"minh\": \"PROPN\",\n\t\t\t\"tend\": \"VERB\",\n\t\t\t\"touched\": \"VERB\",\n\t\t\t\"closely\": \"ADV\",\n\t\t\t\"holga\": \"PROPN\",\n\t\t\t\"horace\": \"PROPN\",\n\t\t\t\"185\": \"NUM\",\n\t\t\t\"1647\": \"NUM\",\n\t\t\t\"majestically\": \"ADV\",\n\t\t\t\"detailed\": \"ADJ\",\n\t\t\t\"%\": \"SYM\",\n\t\t\t\"713-790-2605\": \"NUM\",\n\t\t\t\"scholastic\": \"ADJ\",\n\t\t\t\"basket\": \"NOUN\",\n\t\t\t\"rounded\": \"VERB\",\n\t\t\t\"basing\": \"VERB\",\n\t\t\t\"commanding\": \"ADJ\",\n\t\t\t\"1\": \"NUM\",\n\t\t\t\"o'connell\": \"PROPN\",\n\t\t\t\"pd\": \"PROPN\",\n\t\t\t\"nabil\": \"PROPN\",\n\t\t\t\"http://www.blueoakstables.com/breyerhorsebarns_barn003.asp\": \"PROPN\",\n\t\t\t\"arch-enemy\": \"NOUN\",\n\t\t\t\"affected\": \"VERB\",\n\t\t\t\"36647\": \"NUM\",\n\t\t\t\"heil\": \"PROPN\",\n\t\t\t\"retardation\": \"NOUN\",\n\t\t\t\"month\": \"NOUN\",\n\t\t\t\"sideways\": \"ADV\",\n\t\t\t\"practical\": \"ADJ\",\n\t\t\t\"feverishly\": \"ADV\",\n\t\t\t\"progressively\": \"ADV\",\n\t\t\t\"1225\": \"NUM\",\n\t\t\t\"ansi-92\": \"PROPN\",\n\t\t\t\"circulated\": \"VERB\",\n\t\t\t\"analgesic\": \"ADJ\",\n\t\t\t\"fitfully\": \"ADV\",\n\t\t\t\"beaver\": \"NOUN\",\n\t\t\t\"workable\": \"ADJ\",\n\t\t\t\"drunkest\": \"ADJ\",\n\t\t\t\"mailto:mayur...@yahoo.com\": \"PROPN\",\n\t\t\t\"03:33\": \"NUM\",\n\t\t\t\"chevron\": \"PROPN\",\n\t\t\t\"turned-up\": \"ADJ\",\n\t\t\t\"restraint\": \"NOUN\",\n\t\t\t\"sunnis\": \"PROPN\",\n\t\t\t\"charging\": \"VERB\",\n\t\t\t\"obtaining\": \"VERB\",\n\t\t\t\"antiquated\": \"ADJ\",\n\t\t\t\"christians\": \"PROPN\",\n\t\t\t\"hold\": \"VERB\",\n\t\t\t\"funen\": \"PROPN\",\n\t\t\t\"saddamites\": \"PROPN\",\n\t\t\t\"odd\": \"ADJ\",\n\t\t\t\"spotted\": \"VERB\",\n\t\t\t\"mike\": \"PROPN\",\n\t\t\t\"poterin\": \"PROPN\",\n\t\t\t\"conrad\": \"PROPN\",\n\t\t\t\"liars\": \"NOUN\",\n\t\t\t\"tees\": \"NOUN\",\n\t\t\t\"bart\": \"PROPN\",\n\t\t\t\"took\": \"VERB\",\n\t\t\t\"tempting\": \"ADJ\",\n\t\t\t\"asshole\": \"NOUN\",\n\t\t\t\"periodically\": \"ADV\",\n\t\t\t\"http://www.disinfo.com/archive/pages/dossier/id334/pg1/\": \"PROPN\",\n\t\t\t\"reopened\": \"VERB\",\n\t\t\t\"nourishing\": \"ADJ\",\n\t\t\t\"cons\": \"NOUN\",\n\t\t\t\"glorious\": \"ADJ\",\n\t\t\t\"mine\": \"PRON\",\n\t\t\t\"lombardy\": \"PROPN\",\n\t\t\t\"spence\": \"PROPN\",\n\t\t\t\"equally\": \"ADV\",\n\t\t\t\"ringed\": \"ADJ\",\n\t\t\t\"whence\": \"ADV\",\n\t\t\t\"circumstances\": \"NOUN\",\n\t\t\t\"bulk\": \"NOUN\",\n\t\t\t\"underage\": \"ADJ\",\n\t\t\t\"later\": \"ADV\",\n\t\t\t\"privy\": \"NOUN\",\n\t\t\t\"essg\": \"PROPN\",\n\t\t\t\"1967\": \"NUM\",\n\t\t\t\"resisted\": \"VERB\",\n\t\t\t\"feature\": \"NOUN\",\n\t\t\t\"lund\": \"PROPN\",\n\t\t\t\"manually\": \"ADV\",\n\t\t\t\"dongle\": \"NOUN\",\n\t\t\t\"hartpury\": \"PROPN\",\n\t\t\t\"bottoms\": \"NOUN\",\n\t\t\t\"precaution\": \"NOUN\",\n\t\t\t\"socialization\": \"NOUN\",\n\t\t\t\"descends\": \"VERB\",\n\t\t\t\"weathered\": \"ADJ\",\n\t\t\t\"unavoidable\": \"ADJ\",\n\t\t\t\"differ\": \"VERB\",\n\t\t\t\"8\": \"NUM\",\n\t\t\t\"lap\": \"NOUN\",\n\t\t\t\"0.70\": \"NUM\",\n\t\t\t\"keeps\": \"VERB\",\n\t\t\t\"rioted\": \"VERB\",\n\t\t\t\"unity\": \"NOUN\",\n\t\t\t\"columbia\": \"PROPN\",\n\t\t\t\"availed\": \"VERB\",\n\t\t\t\"nicks\": \"NOUN\",\n\t\t\t\"unfinished\": \"ADJ\",\n\t\t\t\"skinny\": \"ADJ\",\n\t\t\t\"thieves\": \"NOUN\",\n\t\t\t\"humiliation\": \"NOUN\",\n\t\t\t\"so-called\": \"VERB\",\n\t\t\t\"indoors\": \"ADV\",\n\t\t\t\"jumbo\": \"NOUN\",\n\t\t\t\"!\": \"PUNCT\",\n\t\t\t\"printers\": \"NOUN\",\n\t\t\t\"planned\": \"VERB\",\n\t\t\t\"chapel\": \"NOUN\",\n\t\t\t\"turntable\": \"NOUN\",\n\t\t\t\"pov\": \"NOUN\",\n\t\t\t\"cousin\": \"NOUN\",\n\t\t\t\"if\": \"SCONJ\",\n\t\t\t\"induces\": \"VERB\",\n\t\t\t\"rocking\": \"VERB\",\n\t\t\t\"alludes\": \"VERB\",\n\t\t\t\"hnd\": \"NOUN\",\n\t\t\t\"ideation\": \"NOUN\",\n\t\t\t\"sections\": \"NOUN\",\n\t\t\t\"viva\": \"PROPN\",\n\t\t\t\"factors\": \"NOUN\",\n\t\t\t\"sights\": \"NOUN\",\n\t\t\t\"baking\": \"NOUN\",\n\t\t\t\"productively\": \"ADV\",\n\t\t\t\"artists\": \"NOUN\",\n\t\t\t\"hook\": \"NOUN\",\n\t\t\t\"slipstream\": \"NOUN\",\n\t\t\t\"territory\": \"NOUN\",\n\t\t\t\"calvin\": \"PROPN\",\n\t\t\t\"tna\": \"PROPN\",\n\t\t\t\"bringing\": \"VERB\",\n\t\t\t\"voluptuous\": \"ADJ\",\n\t\t\t\"tempura\": \"NOUN\",\n\t\t\t\"worshipers\": \"NOUN\",\n\t\t\t\"04/16/2001\": \"NUM\",\n\t\t\t\"petruck\": \"PROPN\",\n\t\t\t\"reza\": \"PROPN\",\n\t\t\t\"aficionados\": \"NOUN\",\n\t\t\t\"downstream\": \"ADJ\",\n\t\t\t\"flowers\": \"NOUN\",\n\t\t\t\"convergence\": \"NOUN\",\n\t\t\t\"mouthpiece\": \"NOUN\",\n\t\t\t\"24,000\": \"NUM\",\n\t\t\t\"spreadingsantorum.com\": \"PROPN\",\n\t\t\t\"honeymoon\": \"NOUN\",\n\t\t\t\"5249025\": \"NUM\",\n\t\t\t\"flakes\": \"NOUN\",\n\t\t\t\"insisted\": \"VERB\",\n\t\t\t\"joint\": \"ADJ\",\n\t\t\t\"trade\": \"NOUN\",\n\t\t\t\"dismiss\": \"VERB\",\n\t\t\t\"mines\": \"NOUN\",\n\t\t\t\"splashed\": \"VERB\",\n\t\t\t\"chaman\": \"PROPN\",\n\t\t\t\"vegetarians\": \"NOUN\",\n\t\t\t\"adults\": \"NOUN\",\n\t\t\t\"marcie\": \"PROPN\",\n\t\t\t\"interprets\": \"VERB\",\n\t\t\t\"styles\": \"NOUN\",\n\t\t\t\"briefcase\": \"NOUN\",\n\t\t\t\"pavements\": \"NOUN\",\n\t\t\t\"yemenia\": \"PROPN\",\n\t\t\t\"higuchi\": \"PROPN\",\n\t\t\t\"insets\": \"NOUN\",\n\t\t\t\"cester\": \"PROPN\",\n\t\t\t\"contemporaries\": \"NOUN\",\n\t\t\t\"spotlights\": \"NOUN\",\n\t\t\t\"grades\": \"NOUN\",\n\t\t\t\"proto-language\": \"NOUN\",\n\t\t\t\"crowleyan\": \"ADJ\",\n\t\t\t\"bassam\": \"PROPN\",\n\t\t\t\"zafra\": \"PROPN\",\n\t\t\t\"psychedelic\": \"ADJ\",\n\t\t\t\"ld2d-#69381-1.doc\": \"NOUN\",\n\t\t\t\"acoustic\": \"ADJ\",\n\t\t\t\"saxon\": \"ADJ\",\n\t\t\t\"embodying\": \"VERB\",\n\t\t\t\"settings\": \"NOUN\",\n\t\t\t\"venetia\": \"PROPN\",\n\t\t\t\"caloy\": \"PROPN\",\n\t\t\t\"maids\": \"NOUN\",\n\t\t\t\"unknowns\": \"NOUN\",\n\t\t\t\"fumarase\": \"NOUN\",\n\t\t\t\"noted\": \"VERB\",\n\t\t\t\"influenza\": \"NOUN\",\n\t\t\t\"prerequisite\": \"NOUN\",\n\t\t\t\"moral\": \"ADJ\",\n\t\t\t\"09:37\": \"NUM\",\n\t\t\t\"56\": \"NUM\",\n\t\t\t\"caribou\": \"NOUN\",\n\t\t\t\"query\": \"NOUN\",\n\t\t\t\"marsha\": \"PROPN\",\n\t\t\t\"polish\": \"ADJ\",\n\t\t\t\"riches\": \"NOUN\",\n\t\t\t\"stables\": \"NOUN\",\n\t\t\t\"saws\": \"NOUN\",\n\t\t\t\"henley\": \"PROPN\",\n\t\t\t\"flickering\": \"VERB\",\n\t\t\t\"angrily\": \"ADV\",\n\t\t\t\"robot\": \"NOUN\",\n\t\t\t\"misty\": \"ADJ\",\n\t\t\t\"suburb\": \"NOUN\",\n\t\t\t\"weeping\": \"NOUN\",\n\t\t\t\"on\": \"ADP\",\n\t\t\t\"regretting\": \"VERB\",\n\t\t\t\"surge\": \"NOUN\",\n\t\t\t\"admonished\": \"VERB\",\n\t\t\t\"incumbent\": \"ADJ\",\n\t\t\t\"knees\": \"NOUN\",\n\t\t\t\"pullers\": \"NOUN\",\n\t\t\t\"12-20-00.doc\": \"NOUN\",\n\t\t\t\"*****\": \"PUNCT\",\n\t\t\t\"908\": \"NUM\",\n\t\t\t\"to's\": \"NOUN\",\n\t\t\t\"resolution\": \"NOUN\",\n\t\t\t\"accounted\": \"VERB\",\n\t\t\t\"jungwook\": \"PROPN\",\n\t\t\t\"governing\": \"VERB\",\n\t\t\t\"sizable\": \"ADJ\",\n\t\t\t\"34\": \"NUM\",\n\t\t\t\"hauling\": \"VERB\",\n\t\t\t\"cisco\": \"PROPN\",\n\t\t\t\"spread\": \"VERB\",\n\t\t\t\"567.77\": \"NUM\",\n\t\t\t\"lawn\": \"NOUN\",\n\t\t\t\"hurled\": \"VERB\",\n\t\t\t\"pyramids\": \"NOUN\",\n\t\t\t\"cimartinez@flog.uned.es\": \"PROPN\",\n\t\t\t\"reformer\": \"NOUN\",\n\t\t\t\"literature\": \"NOUN\",\n\t\t\t\"stereotype\": \"NOUN\",\n\t\t\t\"steers\": \"NOUN\",\n\t\t\t\"chicken\": \"NOUN\",\n\t\t\t\"circled\": \"VERB\",\n\t\t\t\"starfighters\": \"NOUN\",\n\t\t\t\"warlords\": \"NOUN\",\n\t\t\t\"pre-cut\": \"VERB\",\n\t\t\t\"estonian\": \"ADJ\",\n\t\t\t\"doubt\": \"NOUN\",\n\t\t\t\"\\\"\\\"\": \"PUNCT\",\n\t\t\t\"should\": \"AUX\",\n\t\t\t\"sancho\": \"PROPN\",\n\t\t\t\"excessive\": \"ADJ\",\n\t\t\t\"even\": \"ADV\",\n\t\t\t\"parmesan\": \"PROPN\",\n\t\t\t\"diversification\": \"NOUN\",\n\t\t\t\"sergey\": \"PROPN\",\n\t\t\t\"marauders\": \"PROPN\",\n\t\t\t\"wakare\": \"PROPN\",\n\t\t\t\"diligent\": \"ADJ\",\n\t\t\t\"troughs\": \"NOUN\",\n\t\t\t\"c.i.a.\": \"PROPN\",\n\t\t\t\"grocery\": \"NOUN\",\n\t\t\t\"416-865-3700\": \"NUM\",\n\t\t\t\"toe\": \"NOUN\",\n\t\t\t\"parakeet\": \"NOUN\",\n\t\t\t\"liberia\": \"PROPN\",\n\t\t\t\"warned\": \"VERB\",\n\t\t\t\"harmonious\": \"ADJ\",\n\t\t\t\"metro\": \"PROPN\",\n\t\t\t\"emperor\": \"NOUN\",\n\t\t\t\"ds\": \"PROPN\",\n\t\t\t\"spokesperson\": \"NOUN\",\n\t\t\t\"answered\": \"VERB\",\n\t\t\t\"disintegration\": \"NOUN\",\n\t\t\t\"shires\": \"PROPN\",\n\t\t\t\"uniformed\": \"ADJ\",\n\t\t\t\"dwarfs\": \"NOUN\",\n\t\t\t\"163\": \"NUM\",\n\t\t\t\"toledo\": \"PROPN\",\n\t\t\t\"populace\": \"NOUN\",\n\t\t\t\"liberal\": \"ADJ\",\n\t\t\t\"counteracts\": \"VERB\",\n\t\t\t\"biting\": \"VERB\",\n\t\t\t\"asia\": \"PROPN\",\n\t\t\t\"wording\": \"NOUN\",\n\t\t\t\"instinctively\": \"ADV\",\n\t\t\t\"threw\": \"VERB\",\n\t\t\t\"urine\": \"NOUN\",\n\t\t\t\"holderness\": \"PROPN\",\n\t\t\t\"uofh\": \"PROPN\",\n\t\t\t\"pins\": \"NOUN\",\n\t\t\t\"mumbling\": \"VERB\",\n\t\t\t\"hanks\": \"NOUN\",\n\t\t\t\"postponed\": \"VERB\",\n\t\t\t\"typologies\": \"NOUN\",\n\t\t\t\"whhich\": \"PRON\",\n\t\t\t\"present\": \"ADJ\",\n\t\t\t\"coordination\": \"NOUN\",\n\t\t\t\"muster\": \"NOUN\",\n\t\t\t\"763736\": \"NUM\",\n\t\t\t\"madrid\": \"PROPN\",\n\t\t\t\"calm\": \"ADJ\",\n\t\t\t\"04:17\": \"NUM\",\n\t\t\t\"shipment\": \"NOUN\",\n\t\t\t\"harshly\": \"ADV\",\n\t\t\t\"antiwar\": \"ADJ\",\n\t\t\t\"cole\": \"PROPN\",\n\t\t\t\"disrespect\": \"NOUN\",\n\t\t\t\"emam\": \"PROPN\",\n\t\t\t\"statues\": \"NOUN\",\n\t\t\t\"newer\": \"ADJ\",\n\t\t\t\"proposes\": \"VERB\",\n\t\t\t\"hesitated\": \"VERB\",\n\t\t\t\"passes\": \"VERB\",\n\t\t\t\"especially\": \"ADV\",\n\t\t\t\"d\": \"PROPN\",\n\t\t\t\"britain\": \"PROPN\",\n\t\t\t\"graydon\": \"PROPN\",\n\t\t\t\"timber\": \"NOUN\",\n\t\t\t\"ipa\": \"NOUN\",\n\t\t\t\"piaget\": \"PROPN\",\n\t\t\t\"hating\": \"VERB\",\n\t\t\t\"seaweed\": \"NOUN\",\n\t\t\t\"uncaring\": \"ADJ\",\n\t\t\t\"woods\": \"NOUN\",\n\t\t\t\"scores\": \"NOUN\",\n\t\t\t\"milling\": \"NOUN\",\n\t\t\t\"jamaican\": \"ADJ\",\n\t\t\t\"sinking\": \"VERB\",\n\t\t\t\"proceeds\": \"NOUN\",\n\t\t\t\"amazes\": \"VERB\",\n\t\t\t\"sailor\": \"NOUN\",\n\t\t\t\"squeal\": \"NOUN\",\n\t\t\t\"analyzing\": \"VERB\",\n\t\t\t\"rulers\": \"NOUN\",\n\t\t\t\".324\": \"NUM\",\n\t\t\t\"indifferent\": \"ADJ\",\n\t\t\t\"alchemical\": \"ADJ\",\n\t\t\t\"begged\": \"VERB\",\n\t\t\t\"wookie\": \"PROPN\",\n\t\t\t\"arranged\": \"VERB\",\n\t\t\t\"braverman\": \"PROPN\",\n\t\t\t\"structural\": \"ADJ\",\n\t\t\t\"individually\": \"ADV\",\n\t\t\t\"relaxing\": \"ADJ\",\n\t\t\t\"kendrick\": \"PROPN\",\n\t\t\t\"lecture\": \"NOUN\",\n\t\t\t\"madea\": \"VERB\",\n\t\t\t\"astonishment\": \"NOUN\",\n\t\t\t\"brainstorm\": \"VERB\",\n\t\t\t\"gansu\": \"PROPN\",\n\t\t\t\"penman\": \"PROPN\",\n\t\t\t\"90s\": \"NOUN\",\n\t\t\t\"waning\": \"VERB\",\n\t\t\t\"osler\": \"PROPN\",\n\t\t\t\"signalled\": \"VERB\",\n\t\t\t\"01:09:32\": \"NUM\",\n\t\t\t\"palps\": \"NOUN\",\n\t\t\t\"adjust\": \"VERB\",\n\t\t\t\"gazette\": \"PROPN\",\n\t\t\t\"asleep\": \"ADJ\",\n\t\t\t\"devices\": \"NOUN\",\n\t\t\t\"dunny\": \"NOUN\",\n\t\t\t\"nyc\": \"PROPN\",\n\t\t\t\"assistance\": \"NOUN\",\n\t\t\t\"replication\": \"NOUN\",\n\t\t\t\"master\": \"NOUN\",\n\t\t\t\"inalienable\": \"ADJ\",\n\t\t\t\"teen\": \"PROPN\",\n\t\t\t\"dwarf\": \"ADJ\",\n\t\t\t\"guaranty\": \"NOUN\",\n\t\t\t\"mutually\": \"ADV\",\n\t\t\t\"there\": \"PRON\",\n\t\t\t\"passive\": \"ADJ\",\n\t\t\t\"thrilled\": \"ADJ\",\n\t\t\t\"denied\": \"VERB\",\n\t\t\t\"sempra\": \"PROPN\",\n\t\t\t\"halter\": \"NOUN\",\n\t\t\t\"preferably\": \"ADV\",\n\t\t\t\"reassigns\": \"VERB\",\n\t\t\t\"galaxies\": \"NOUN\",\n\t\t\t\"compromise\": \"NOUN\",\n\t\t\t\"yasushi\": \"PROPN\",\n\t\t\t\"groove\": \"NOUN\",\n\t\t\t\"evaluations\": \"NOUN\",\n\t\t\t\"overflowed\": \"VERB\",\n\t\t\t\"intelligibility\": \"NOUN\",\n\t\t\t\"subsidies\": \"NOUN\",\n\t\t\t\"bunk\": \"NOUN\",\n\t\t\t\"avoided\": \"VERB\",\n\t\t\t\"claws\": \"NOUN\",\n\t\t\t\"tighten\": \"VERB\",\n\t\t\t\"chichen\": \"PROPN\",\n\t\t\t\"vacature\": \"NOUN\",\n\t\t\t\"broadly\": \"ADV\",\n\t\t\t\"silly\": \"ADJ\",\n\t\t\t\"replica\": \"NOUN\",\n\t\t\t\"ourselves\": \"PRON\",\n\t\t\t\"10:39:03\": \"NUM\",\n\t\t\t\"thinks\": \"VERB\",\n\t\t\t\"cpa\": \"NOUN\",\n\t\t\t\"ba'athist\": \"PROPN\",\n\t\t\t\"activated\": \"VERB\",\n\t\t\t\"benengali\": \"PROPN\",\n\t\t\t\"bu\": \"PROPN\",\n\t\t\t\"honka\": \"PROPN\",\n\t\t\t\"kusal\": \"PROPN\",\n\t\t\t\"monster\": \"NOUN\",\n\t\t\t\"provide\": \"VERB\",\n\t\t\t\"balconies\": \"NOUN\",\n\t\t\t\"80\": \"NUM\",\n\t\t\t\"tandem\": \"NOUN\",\n\t\t\t\"splendidly\": \"ADV\",\n\t\t\t\"heritage\": \"PROPN\",\n\t\t\t\"ration\": \"NOUN\",\n\t\t\t\"ironing\": \"VERB\",\n\t\t\t\"mukalla\": \"PROPN\",\n\t\t\t\"nonconventional\": \"ADJ\",\n\t\t\t\"polygamy\": \"NOUN\",\n\t\t\t\"experiments\": \"NOUN\",\n\t\t\t\"inferred\": \"VERB\",\n\t\t\t\"jerk\": \"NOUN\",\n\t\t\t\"consistent\": \"ADJ\",\n\t\t\t\"thick\": \"ADJ\",\n\t\t\t\"http://www.dailykos.com/story/2006/5/12/232746/857\": \"PROPN\",\n\t\t\t\"sounding\": \"VERB\",\n\t\t\t\"orchestra\": \"NOUN\",\n\t\t\t\"defanged\": \"VERB\",\n\t\t\t\"l-\": \"INTJ\",\n\t\t\t\"aghast\": \"ADJ\",\n\t\t\t\"rumpled\": \"ADJ\",\n\t\t\t\"forefront\": \"NOUN\",\n\t\t\t\"recreational\": \"ADJ\",\n\t\t\t\"innkeepers\": \"NOUN\",\n\t\t\t\"born\": \"VERB\",\n\t\t\t\"visualisations\": \"NOUN\",\n\t\t\t\"curse\": \"NOUN\",\n\t\t\t\"blower\": \"NOUN\",\n\t\t\t\"miracles\": \"NOUN\",\n\t\t\t\"guides\": \"NOUN\",\n\t\t\t\"metaphysical\": \"ADJ\",\n\t\t\t\"specially\": \"ADV\",\n\t\t\t\"ahmaud\": \"PROPN\",\n\t\t\t\"99\": \"NUM\",\n\t\t\t\"dario\": \"PROPN\",\n\t\t\t\"liberation\": \"PROPN\",\n\t\t\t\"prevented\": \"VERB\",\n\t\t\t\"affectation\": \"NOUN\",\n\t\t\t\"increase\": \"NOUN\",\n\t\t\t\"still\": \"ADV\",\n\t\t\t\"copper-brown\": \"ADJ\",\n\t\t\t\"stratagems\": \"NOUN\",\n\t\t\t\"doublethink\": \"NOUN\",\n\t\t\t\"guts\": \"NOUN\",\n\t\t\t\"florida\": \"PROPN\",\n\t\t\t\"lover\": \"NOUN\",\n\t\t\t\"semicolon\": \"NOUN\",\n\t\t\t\"glowing\": \"VERB\",\n\t\t\t\"separate\": \"ADJ\",\n\t\t\t\"screams\": \"NOUN\",\n\t\t\t\"appreciative\": \"ADJ\",\n\t\t\t\"enron.xls\": \"NOUN\",\n\t\t\t\"cast\": \"VERB\",\n\t\t\t\"phantom\": \"NOUN\",\n\t\t\t\"talked\": \"VERB\",\n\t\t\t\"receipt\": \"NOUN\",\n\t\t\t\"eluded\": \"VERB\",\n\t\t\t\"lagrange\": \"PROPN\",\n\t\t\t\"remembers\": \"VERB\",\n\t\t\t\"pros\": \"NOUN\",\n\t\t\t\"ecc\": \"PROPN\",\n\t\t\t\"rowling\": \"PROPN\",\n\t\t\t\"weakened\": \"VERB\",\n\t\t\t\"imperil\": \"VERB\",\n\t\t\t\"deadline\": \"NOUN\",\n\t\t\t\"postage\": \"NOUN\",\n\t\t\t\"o'clock\": \"ADV\",\n\t\t\t\"reccomend\": \"VERB\",\n\t\t\t\"governments\": \"NOUN\",\n\t\t\t\"tints\": \"NOUN\",\n\t\t\t\"nautical\": \"ADJ\",\n\t\t\t\"unilaterally\": \"ADV\",\n\t\t\t\"aimlessly\": \"ADV\",\n\t\t\t\"bartending\": \"VERB\",\n\t\t\t\"reactionary\": \"ADJ\",\n\t\t\t\"mongolian\": \"ADJ\",\n\t\t\t\"trainable\": \"ADJ\",\n\t\t\t\"trades\": \"NOUN\",\n\t\t\t\"lengthening\": \"VERB\",\n\t\t\t\"distracted\": \"VERB\",\n\t\t\t\"attendees\": \"NOUN\",\n\t\t\t\"aristocrat\": \"NOUN\",\n\t\t\t\"excellently\": \"ADV\",\n\t\t\t\"memon\": \"PROPN\",\n\t\t\t\"liquidweb\": \"PROPN\",\n\t\t\t\"jackie\": \"PROPN\",\n\t\t\t\"drafts\": \"NOUN\",\n\t\t\t\"tempe\": \"PROPN\",\n\t\t\t\"bicuspid\": \"ADJ\",\n\t\t\t\"provider\": \"NOUN\",\n\t\t\t\"312-666-2372\": \"NUM\",\n\t\t\t\"namaskar\": \"INTJ\",\n\t\t\t\"media\": \"NOUN\",\n\t\t\t\"dusted\": \"VERB\",\n\t\t\t\"liberated\": \"VERB\",\n\t\t\t\"digress\": \"VERB\",\n\t\t\t\"crumpled\": \"ADJ\",\n\t\t\t\"miscalculation\": \"NOUN\",\n\t\t\t\"specimens\": \"NOUN\",\n\t\t\t\"portugal\": \"PROPN\",\n\t\t\t\"unlocking\": \"VERB\",\n\t\t\t\"gpa\": \"NOUN\",\n\t\t\t\"lengths\": \"NOUN\",\n\t\t\t\"beak\": \"NOUN\",\n\t\t\t\"craziest\": \"ADJ\",\n\t\t\t\"vault\": \"NOUN\",\n\t\t\t\"pills\": \"NOUN\",\n\t\t\t\"skeptical\": \"ADJ\",\n\t\t\t\"d'ettorre\": \"PROPN\",\n\t\t\t\"equilibrium\": \"NOUN\",\n\t\t\t\"claude\": \"PROPN\",\n\t\t\t\"gal\": \"NOUN\",\n\t\t\t\"blazed\": \"VERB\",\n\t\t\t\"pall\": \"NOUN\",\n\t\t\t\"eliminating\": \"VERB\",\n\t\t\t\"hillocks\": \"NOUN\",\n\t\t\t\"adjudicated\": \"VERB\",\n\t\t\t\"terrex\": \"PROPN\",\n\t\t\t\"stakes\": \"NOUN\",\n\t\t\t\"movements\": \"NOUN\",\n\t\t\t\"unemployable\": \"ADJ\",\n\t\t\t\"standstill\": \"NOUN\",\n\t\t\t\"freedom\": \"NOUN\",\n\t\t\t\"obsession\": \"NOUN\",\n\t\t\t\"cleared\": \"VERB\",\n\t\t\t\"pledged\": \"VERB\",\n\t\t\t\"steadfast\": \"ADJ\",\n\t\t\t\"shrieked\": \"VERB\",\n\t\t\t\"diary\": \"PROPN\",\n\t\t\t\"charge\": \"VERB\",\n\t\t\t\"money\": \"NOUN\",\n\t\t\t\"conglomerate\": \"NOUN\",\n\t\t\t\"honest\": \"ADJ\",\n\t\t\t\"conduit\": \"NOUN\",\n\t\t\t\"antwerp\": \"PROPN\",\n\t\t\t\"chelan\": \"PROPN\",\n\t\t\t\"staircases\": \"NOUN\",\n\t\t\t\"league\": \"PROPN\",\n\t\t\t\"meek\": \"ADJ\",\n\t\t\t\"fbi\": \"PROPN\",\n\t\t\t\"collapsed\": \"VERB\",\n\t\t\t\"lynley\": \"PROPN\",\n\t\t\t\"sank\": \"VERB\",\n\t\t\t\"equitable\": \"ADJ\",\n\t\t\t\"jann\": \"PROPN\",\n\t\t\t\"eyelids\": \"NOUN\",\n\t\t\t\"hissy\": \"NOUN\",\n\t\t\t\"attraction\": \"NOUN\",\n\t\t\t\"tart\": \"ADJ\",\n\t\t\t\"longitudinal\": \"ADJ\",\n\t\t\t\"abstain\": \"VERB\",\n\t\t\t\"steered\": \"VERB\",\n\t\t\t\"embroidered\": \"ADJ\",\n\t\t\t\"motorist\": \"NOUN\",\n\t\t\t\"impose\": \"VERB\",\n\t\t\t\"p.m\": \"NOUN\",\n\t\t\t\"gregg\": \"PROPN\",\n\t\t\t\"extradition\": \"NOUN\",\n\t\t\t\"dingle\": \"PROPN\",\n\t\t\t\"became\": \"VERB\",\n\t\t\t\"persue\": \"VERB\",\n\t\t\t\"undergoing\": \"VERB\",\n\t\t\t\"morton\": \"PROPN\",\n\t\t\t\"philipe\": \"PROPN\",\n\t\t\t\"sponsered\": \"VERB\",\n\t\t\t\"heave\": \"VERB\",\n\t\t\t\"insist\": \"VERB\",\n\t\t\t\"positively\": \"ADV\",\n\t\t\t\"formulate\": \"VERB\",\n\t\t\t\"348\": \"NUM\",\n\t\t\t\"suez\": \"PROPN\",\n\t\t\t\"continent\": \"NOUN\",\n\t\t\t\"rhoderunner\": \"PROPN\",\n\t\t\t\"void\": \"NOUN\",\n\t\t\t\"spongy\": \"ADJ\",\n\t\t\t\"shower\": \"NOUN\",\n\t\t\t\"depicts\": \"VERB\",\n\t\t\t\"1520\": \"NUM\",\n\t\t\t\"cross\": \"PROPN\",\n\t\t\t\"refreshing\": \"VERB\",\n\t\t\t\"hereby\": \"ADV\",\n\t\t\t\"rollbacks\": \"NOUN\",\n\t\t\t\"baluchistan\": \"PROPN\",\n\t\t\t\"capes\": \"NOUN\",\n\t\t\t\"smithjones@ev1.net\": \"PROPN\",\n\t\t\t\"kilometers\": \"NOUN\",\n\t\t\t\"basya\": \"PROPN\",\n\t\t\t\"conditioned\": \"VERB\",\n\t\t\t\"usage\": \"NOUN\",\n\t\t\t\"une\": \"DET\",\n\t\t\t\"cabinets\": \"NOUN\",\n\t\t\t\"vi\": \"NUM\",\n\t\t\t\"section\": \"NOUN\",\n\t\t\t\"molten\": \"ADJ\",\n\t\t\t\"outlets\": \"NOUN\",\n\t\t\t\"u.k.\": \"PROPN\",\n\t\t\t\"competence\": \"NOUN\",\n\t\t\t\"kibbutznik\": \"NOUN\",\n\t\t\t\"nagged\": \"VERB\",\n\t\t\t\"bath\": \"NOUN\",\n\t\t\t\"terror\": \"NOUN\",\n\t\t\t\"politisized\": \"VERB\",\n\t\t\t\"challenger\": \"PROPN\",\n\t\t\t\"hjalmar\": \"PROPN\",\n\t\t\t\"signatory\": \"NOUN\",\n\t\t\t\"cowered\": \"VERB\",\n\t\t\t\"socialists\": \"PROPN\",\n\t\t\t\"flour\": \"NOUN\",\n\t\t\t\"clump\": \"NOUN\",\n\t\t\t\"trading\": \"NOUN\",\n\t\t\t\"hm-m\": \"INTJ\",\n\t\t\t\"intensity\": \"NOUN\",\n\t\t\t\"travelers\": \"NOUN\",\n\t\t\t\"alone\": \"ADV\",\n\t\t\t\"imperceptible\": \"ADJ\",\n\t\t\t\"extremely\": \"ADV\",\n\t\t\t\"16.2\": \"NUM\",\n\t\t\t\"often\": \"ADV\",\n\t\t\t\"marvelously\": \"ADV\",\n\t\t\t\"confident\": \"ADJ\",\n\t\t\t\"overalls\": \"NOUN\",\n\t\t\t\"peekaboo\": \"PROPN\",\n\t\t\t\"links\": \"NOUN\",\n\t\t\t\"ontario\": \"PROPN\",\n\t\t\t\"lutheran\": \"ADJ\",\n\t\t\t\"petition\": \"NOUN\",\n\t\t\t\"ports\": \"NOUN\",\n\t\t\t\"hazards\": \"NOUN\",\n\t\t\t\"vaulted\": \"VERB\",\n\t\t\t\"stand-ins\": \"NOUN\",\n\t\t\t\"enronr~1.doc\": \"NOUN\",\n\t\t\t\"unequal\": \"ADJ\",\n\t\t\t\"netflix\": \"PROPN\",\n\t\t\t\"proclaimed\": \"VERB\",\n\t\t\t\"barcodes\": \"NOUN\",\n\t\t\t\"um\": \"INTJ\",\n\t\t\t\"03/04/2001\": \"NUM\",\n\t\t\t\"aloud\": \"ADV\",\n\t\t\t\"fantasies\": \"NOUN\",\n\t\t\t\"calendars\": \"NOUN\",\n\t\t\t\"existed\": \"VERB\",\n\t\t\t\"aliases\": \"NOUN\",\n\t\t\t\"smelled\": \"VERB\",\n\t\t\t\"contemplate\": \"VERB\",\n\t\t\t\"woking\": \"PROPN\",\n\t\t\t\"engineer\": \"NOUN\",\n\t\t\t\"meadowlarks\": \"NOUN\",\n\t\t\t\"3.75\": \"NUM\",\n\t\t\t\"irresistible\": \"ADJ\",\n\t\t\t\"lava\": \"NOUN\",\n\t\t\t\"modern\": \"ADJ\",\n\t\t\t\"disturb\": \"VERB\",\n\t\t\t\"sofas\": \"NOUN\",\n\t\t\t\"editor\": \"NOUN\",\n\t\t\t\"pamphlets\": \"NOUN\",\n\t\t\t\"suppose\": \"VERB\",\n\t\t\t\"twisting\": \"ADJ\",\n\t\t\t\"democrat\": \"ADJ\",\n\t\t\t\"eesi\": \"NOUN\",\n\t\t\t\"unrealistic\": \"ADJ\",\n\t\t\t\"latin\": \"ADJ\",\n\t\t\t\"solent\": \"PROPN\",\n\t\t\t\"topographic\": \"ADJ\",\n\t\t\t\"sandi\": \"PROPN\",\n\t\t\t\"pyjamas\": \"NOUN\",\n\t\t\t\"supper\": \"NOUN\",\n\t\t\t\"sandbags\": \"NOUN\",\n\t\t\t\"handlebar\": \"NOUN\",\n\t\t\t\"professionalism\": \"NOUN\",\n\t\t\t\"frederick\": \"PROPN\",\n\t\t\t\"am\": \"AUX\",\n\t\t\t\"unsightly\": \"ADJ\",\n\t\t\t\"seeming\": \"ADJ\",\n\t\t\t\"rearing\": \"NOUN\",\n\t\t\t\"ethink\": \"PROPN\",\n\t\t\t\"detectable\": \"ADJ\",\n\t\t\t\"displace\": \"VERB\",\n\t\t\t\"disconnect\": \"VERB\",\n\t\t\t\"tristram\": \"PROPN\",\n\t\t\t\"cocktails\": \"NOUN\",\n\t\t\t\"manipal\": \"PROPN\",\n\t\t\t\"cuddly\": \"ADJ\",\n\t\t\t\"congratulated\": \"VERB\",\n\t\t\t\"hobbes\": \"PROPN\",\n\t\t\t\"outlook\": \"NOUN\",\n\t\t\t\"plunderers\": \"NOUN\",\n\t\t\t\"metabolism\": \"NOUN\",\n\t\t\t\"socially\": \"ADV\",\n\t\t\t\"principia\": \"PROPN\",\n\t\t\t\"sufficient\": \"ADJ\",\n\t\t\t\"customizing\": \"VERB\",\n\t\t\t\"937,000\": \"NUM\",\n\t\t\t\"choosing\": \"VERB\",\n\t\t\t\"tozzini\": \"PROPN\",\n\t\t\t\"sounds\": \"VERB\",\n\t\t\t\"k.c.\": \"PROPN\",\n\t\t\t\"jamming\": \"VERB\",\n\t\t\t\"unmediated\": \"ADJ\",\n\t\t\t\"panamal\": \"PROPN\",\n\t\t\t\"departments\": \"NOUN\",\n\t\t\t\"barrel\": \"NOUN\",\n\t\t\t\"climaxed\": \"VERB\",\n\t\t\t\"jan\": \"PROPN\",\n\t\t\t\"grammar\": \"NOUN\",\n\t\t\t\"muskogee\": \"PROPN\",\n\t\t\t\"apologize\": \"VERB\",\n\t\t\t\"arterials\": \"NOUN\",\n\t\t\t\"renegotiate\": \"VERB\",\n\t\t\t\"thai\": \"ADJ\",\n\t\t\t\"neon-lit\": \"ADJ\",\n\t\t\t\"hecs\": \"PROPN\",\n\t\t\t\"calcutta\": \"PROPN\",\n\t\t\t\"suit\": \"NOUN\",\n\t\t\t\"salesman\": \"NOUN\",\n\t\t\t\"irritates\": \"VERB\",\n\t\t\t\"shines\": \"VERB\",\n\t\t\t\"clapping\": \"VERB\",\n\t\t\t\"paradigms\": \"NOUN\",\n\t\t\t\"http://www.antifraudcentre-centreantifraude.ca/english/home-eng.html\": \"PROPN\",\n\t\t\t\"fischer\": \"PROPN\",\n\t\t\t\"drifters\": \"NOUN\",\n\t\t\t\"tournament\": \"NOUN\",\n\t\t\t\"luxembourg\": \"PROPN\",\n\t\t\t\"username\": \"NOUN\",\n\t\t\t\"priorities\": \"NOUN\",\n\t\t\t\"bahamas\": \"PROPN\",\n\t\t\t\"hav\": \"VERB\",\n\t\t\t\"reports\": \"NOUN\",\n\t\t\t\"22s\": \"NOUN\",\n\t\t\t\"launched\": \"VERB\",\n\t\t\t\"killer\": \"NOUN\",\n\t\t\t\"thinner\": \"ADJ\",\n\t\t\t\"stéphanie\": \"PROPN\",\n\t\t\t\"moist\": \"ADJ\",\n\t\t\t\"meaningless\": \"ADJ\",\n\t\t\t\"moved\": \"VERB\",\n\t\t\t\"implications\": \"NOUN\",\n\t\t\t\"billiards\": \"NOUN\",\n\t\t\t\"added\": \"VERB\",\n\t\t\t\"readership\": \"NOUN\",\n\t\t\t\"ncfa\": \"PROPN\",\n\t\t\t\"debaathification\": \"PROPN\",\n\t\t\t\"veg\": \"NOUN\",\n\t\t\t\"active\": \"ADJ\",\n\t\t\t\"hats\": \"NOUN\",\n\t\t\t\"scammer\": \"NOUN\",\n\t\t\t\"pushing\": \"VERB\",\n\t\t\t\"absent\": \"ADJ\",\n\t\t\t\"trees\": \"NOUN\",\n\t\t\t\"mission\": \"NOUN\",\n\t\t\t\"obstruction\": \"NOUN\",\n\t\t\t\"ce\": \"NOUN\",\n\t\t\t\"frantic\": \"ADJ\",\n\t\t\t\"businessmen\": \"NOUN\",\n\t\t\t\"muck\": \"PROPN\",\n\t\t\t\"royal\": \"ADJ\",\n\t\t\t\"43\": \"NUM\",\n\t\t\t\"westjet\": \"PROPN\",\n\t\t\t\"volunteered\": \"VERB\",\n\t\t\t\"responsibilities\": \"NOUN\",\n\t\t\t\"stall\": \"VERB\",\n\t\t\t\"missive\": \"NOUN\",\n\t\t\t\"stomped\": \"VERB\",\n\t\t\t\"went\": \"VERB\",\n\t\t\t\"jimmy\": \"PROPN\",\n\t\t\t\"topped\": \"VERB\",\n\t\t\t\"04:50\": \"NUM\",\n\t\t\t\"stretch\": \"NOUN\",\n\t\t\t\"slightest\": \"ADJ\",\n\t\t\t\"grapefruit\": \"NOUN\",\n\t\t\t\"slips\": \"VERB\",\n\t\t\t\"unpleasantly\": \"ADV\",\n\t\t\t\"ackles\": \"PROPN\",\n\t\t\t\"gore\": \"PROPN\",\n\t\t\t\"methodius\": \"PROPN\",\n\t\t\t\"heartedly\": \"ADV\",\n\t\t\t\"handsomely\": \"ADV\",\n\t\t\t\"1561\": \"NUM\",\n\t\t\t\"chicago\": \"PROPN\",\n\t\t\t\"mandros\": \"PROPN\",\n\t\t\t\"news\": \"NOUN\",\n\t\t\t\"wud\": \"AUX\",\n\t\t\t\"decide\": \"VERB\",\n\t\t\t\"panda\": \"PROPN\",\n\t\t\t\"huh\": \"INTJ\",\n\t\t\t\"anticipation\": \"NOUN\",\n\t\t\t\"boats\": \"NOUN\",\n\t\t\t\"fecundity\": \"NOUN\",\n\t\t\t\"aeromexico\": \"PROPN\",\n\t\t\t\"2014\": \"NUM\",\n\t\t\t\".?\": \"PUNCT\",\n\t\t\t\"dependent\": \"ADJ\",\n\t\t\t\"pension\": \"NOUN\",\n\t\t\t\"senate\": \"PROPN\",\n\t\t\t\"abolished\": \"VERB\",\n\t\t\t\"pf-\": \"INTJ\",\n\t\t\t\"nested\": \"ADJ\",\n\t\t\t\"202.785.0786\": \"NUM\",\n\t\t\t\"chosen\": \"VERB\",\n\t\t\t\"scallops\": \"NOUN\",\n\t\t\t\"lihaibi\": \"PROPN\",\n\t\t\t\"sh*t\": \"NOUN\",\n\t\t\t\"tenn\": \"PROPN\",\n\t\t\t\"deworming\": \"NOUN\",\n\t\t\t\"elongate\": \"VERB\",\n\t\t\t\"tall\": \"ADJ\",\n\t\t\t\"tool\": \"NOUN\",\n\t\t\t\"fax.\": \"NOUN\",\n\t\t\t\"encircle\": \"VERB\",\n\t\t\t\"fallen\": \"VERB\",\n\t\t\t\"re-elected\": \"VERB\",\n\t\t\t\"nutrient\": \"NOUN\",\n\t\t\t\"orleans\": \"PROPN\",\n\t\t\t\"righ-\": \"NOUN\",\n\t\t\t\"skilled\": \"ADJ\",\n\t\t\t\"___________\": \"PUNCT\",\n\t\t\t\"campsite\": \"NOUN\",\n\t\t\t\"indistinguishable\": \"ADJ\",\n\t\t\t\"http://www.restaurant.com\": \"PROPN\",\n\t\t\t\"gracee\": \"PROPN\",\n\t\t\t\"demanded\": \"VERB\",\n\t\t\t\"paradigm\": \"NOUN\",\n\t\t\t\"robber\": \"NOUN\",\n\t\t\t\"by-sa\": \"PROPN\",\n\t\t\t\"ventilated\": \"VERB\",\n\t\t\t\"look\": \"VERB\",\n\t\t\t\"mantar\": \"PROPN\",\n\t\t\t\"holidays\": \"NOUN\",\n\t\t\t\"yaay\": \"INTJ\",\n\t\t\t\"non-functional\": \"ADJ\",\n\t\t\t\"oyster\": \"NOUN\",\n\t\t\t\"trophies\": \"NOUN\",\n\t\t\t\"witsel\": \"PROPN\",\n\t\t\t\"lipstick\": \"NOUN\",\n\t\t\t\"jaime\": \"PROPN\",\n\t\t\t\"dslr\": \"NOUN\",\n\t\t\t\"min-woo\": \"PROPN\",\n\t\t\t\"1492\": \"NUM\",\n\t\t\t\"singles\": \"NOUN\",\n\t\t\t\"xxx\": \"NOUN\",\n\t\t\t\"greenhouse\": \"NOUN\",\n\t\t\t\"flaw\": \"NOUN\",\n\t\t\t\"atrocities\": \"NOUN\",\n\t\t\t\"problematic\": \"ADJ\",\n\t\t\t\"canapés\": \"NOUN\",\n\t\t\t\"unmarried\": \"ADJ\",\n\t\t\t\"polat\": \"PROPN\",\n\t\t\t\"freighter\": \"NOUN\",\n\t\t\t\"zones\": \"NOUN\",\n\t\t\t\"2000s\": \"NOUN\",\n\t\t\t\"womanizer\": \"NOUN\",\n\t\t\t\"°\": \"NOUN\",\n\t\t\t\"lasted\": \"VERB\",\n\t\t\t\"filipino\": \"ADJ\",\n\t\t\t\"recover\": \"VERB\",\n\t\t\t\"housemother\": \"NOUN\",\n\t\t\t\"reprimand\": \"NOUN\",\n\t\t\t\"polo\": \"NOUN\",\n\t\t\t\"colors\": \"NOUN\",\n\t\t\t\"horomona\": \"PROPN\",\n\t\t\t\"dominant\": \"ADJ\",\n\t\t\t\"postural\": \"ADJ\",\n\t\t\t\"loops\": \"NOUN\",\n\t\t\t\"newcomers\": \"NOUN\",\n\t\t\t\"wood\": \"NOUN\",\n\t\t\t\"andorra\": \"PROPN\",\n\t\t\t\"beginning\": \"NOUN\",\n\t\t\t\"terrorism\": \"NOUN\",\n\t\t\t\"no-8\": \"NUM\",\n\t\t\t\"obstacles\": \"NOUN\",\n\t\t\t\"brought\": \"VERB\",\n\t\t\t\"persistent\": \"ADJ\",\n\t\t\t\"electron\": \"NOUN\",\n\t\t\t\"gnosticism\": \"PROPN\",\n\t\t\t\"charter\": \"PROPN\",\n\t\t\t\"hurting\": \"VERB\",\n\t\t\t\"atm\": \"ADV\",\n\t\t\t\"adult\": \"NOUN\",\n\t\t\t\"mid\": \"NOUN\",\n\t\t\t\"thamir\": \"PROPN\",\n\t\t\t\"sheer\": \"ADJ\",\n\t\t\t\"x34703\": \"NOUN\",\n\t\t\t\"sensation\": \"NOUN\",\n\t\t\t\"was\": \"AUX\",\n\t\t\t\"describes\": \"VERB\",\n\t\t\t\"ursula\": \"PROPN\",\n\t\t\t\"prologue\": \"NOUN\",\n\t\t\t\"sucks\": \"VERB\",\n\t\t\t\"ivory\": \"NOUN\",\n\t\t\t\"llm\": \"NOUN\",\n\t\t\t\"plausible\": \"ADJ\",\n\t\t\t\"cycles\": \"NOUN\",\n\t\t\t\"laguardia\": \"PROPN\",\n\t\t\t\"impossible\": \"ADJ\",\n\t\t\t\"madness\": \"NOUN\",\n\t\t\t\"willows\": \"NOUN\",\n\t\t\t\"usurp\": \"VERB\",\n\t\t\t\"siphoned\": \"VERB\",\n\t\t\t\"shared\": \"VERB\",\n\t\t\t\"pueblo\": \"PROPN\",\n\t\t\t\"wage\": \"NOUN\",\n\t\t\t\"scott\": \"PROPN\",\n\t\t\t\"conditons\": \"NOUN\",\n\t\t\t\"distinguishing\": \"ADJ\",\n\t\t\t\"moines\": \"PROPN\",\n\t\t\t\"prop\": \"VERB\",\n\t\t\t\"erase\": \"VERB\",\n\t\t\t\"santa\": \"PROPN\",\n\t\t\t\"clockwork\": \"PROPN\",\n\t\t\t\"calzolari\": \"PROPN\",\n\t\t\t\"ideally\": \"ADV\",\n\t\t\t\"whipped\": \"VERB\",\n\t\t\t\"beads\": \"NOUN\",\n\t\t\t\"reversal\": \"NOUN\",\n\t\t\t\"inscriptions\": \"NOUN\",\n\t\t\t\"epm\": \"NOUN\",\n\t\t\t\"saffavid\": \"PROPN\",\n\t\t\t\"holocaust\": \"PROPN\",\n\t\t\t\"ar\": \"AUX\",\n\t\t\t\"1200\": \"NUM\",\n\t\t\t\"yer\": \"PRON\",\n\t\t\t\"11.30\": \"NUM\",\n\t\t\t\"ring\": \"NOUN\",\n\t\t\t\"psychiatry\": \"PROPN\",\n\t\t\t\"tianjin\": \"PROPN\",\n\t\t\t\"turgid\": \"ADJ\",\n\t\t\t\"readability\": \"NOUN\",\n\t\t\t\"scruff\": \"NOUN\",\n\t\t\t\"ḥadīd\": \"PROPN\",\n\t\t\t\"yelped\": \"VERB\",\n\t\t\t\"sausages\": \"NOUN\",\n\t\t\t\"=)\": \"SYM\",\n\t\t\t\"armenian\": \"ADJ\",\n\t\t\t\"appear\": \"VERB\",\n\t\t\t\"smartest\": \"ADJ\",\n\t\t\t\"patrick\": \"PROPN\",\n\t\t\t\"kinds\": \"NOUN\",\n\t\t\t\"traffic\": \"NOUN\",\n\t\t\t\"managers\": \"NOUN\",\n\t\t\t\"claimed\": \"VERB\",\n\t\t\t\"04/30/2001\": \"NUM\",\n\t\t\t\"negating\": \"VERB\",\n\t\t\t\"pathalias\": \"NOUN\",\n\t\t\t\"mentioning\": \"VERB\",\n\t\t\t\"resond\": \"VERB\",\n\t\t\t\"maid\": \"NOUN\",\n\t\t\t\"conflagration\": \"NOUN\",\n\t\t\t\"examines\": \"VERB\",\n\t\t\t\"friday\": \"PROPN\",\n\t\t\t\"intial\": \"ADJ\",\n\t\t\t\"phx\": \"PROPN\",\n\t\t\t\"equips\": \"VERB\",\n\t\t\t\"assault\": \"NOUN\",\n\t\t\t\"14\": \"NUM\",\n\t\t\t\"purple\": \"ADJ\",\n\t\t\t\"hotter\": \"ADJ\",\n\t\t\t\"tantalising\": \"VERB\",\n\t\t\t\"mid-july\": \"PROPN\",\n\t\t\t\"destruction\": \"NOUN\",\n\t\t\t\"suspicion\": \"NOUN\",\n\t\t\t\"prostitute\": \"NOUN\",\n\t\t\t\"hometown\": \"NOUN\",\n\t\t\t\"admitting\": \"VERB\",\n\t\t\t\"rating\": \"NOUN\",\n\t\t\t\"iterations\": \"NOUN\",\n\t\t\t\"grandchildren\": \"NOUN\",\n\t\t\t\"dysfunctional\": \"ADJ\",\n\t\t\t\"haunt\": \"VERB\",\n\t\t\t\"extraterrestrial\": \"ADJ\",\n\t\t\t\"iw\": \"PRON\",\n\t\t\t\"affectionately\": \"ADV\",\n\t\t\t\"grissom\": \"PROPN\",\n\t\t\t\"thresholds\": \"NOUN\",\n\t\t\t\"per\": \"ADP\",\n\t\t\t\"phenological\": \"ADJ\",\n\t\t\t\"phyllis\": \"PROPN\",\n\t\t\t\"tighter\": \"ADJ\",\n\t\t\t\"refrigerators\": \"NOUN\",\n\t\t\t\"conundrum\": \"NOUN\",\n\t\t\t\"erie\": \"PROPN\",\n\t\t\t\"summary\": \"NOUN\",\n\t\t\t\"11:34\": \"NUM\",\n\t\t\t\"predecessor\": \"NOUN\",\n\t\t\t\"paperclips\": \"NOUN\",\n\t\t\t\"sellafield\": \"PROPN\",\n\t\t\t\"scratched\": \"VERB\",\n\t\t\t\"d.c.\": \"PROPN\",\n\t\t\t\"coahuila\": \"PROPN\",\n\t\t\t\"possession\": \"NOUN\",\n\t\t\t\"ware\": \"PROPN\",\n\t\t\t\"technological\": \"ADJ\",\n\t\t\t\"police\": \"NOUN\",\n\t\t\t\"labour\": \"PROPN\",\n\t\t\t\"neighborhood\": \"NOUN\",\n\t\t\t\"ozone\": \"NOUN\",\n\t\t\t\"ispat\": \"PROPN\",\n\t\t\t\"advises\": \"VERB\",\n\t\t\t\"mayur\": \"PROPN\",\n\t\t\t\"unwonted\": \"ADJ\",\n\t\t\t\"poster\": \"NOUN\",\n\t\t\t\"comps.\": \"NOUN\",\n\t\t\t\"activist\": \"NOUN\",\n\t\t\t\"explore\": \"VERB\",\n\t\t\t\"uniforms\": \"NOUN\",\n\t\t\t\"wrinkled\": \"ADJ\",\n\t\t\t\"dressing\": \"NOUN\",\n\t\t\t\"girlie\": \"ADJ\",\n\t\t\t\"kosher-beef\": \"NOUN\",\n\t\t\t\"catedral\": \"PROPN\",\n\t\t\t\"entire\": \"ADJ\",\n\t\t\t\"spurt\": \"NOUN\",\n\t\t\t\"gestures\": \"NOUN\",\n\t\t\t\"claire\": \"PROPN\",\n\t\t\t\"struck\": \"VERB\",\n\t\t\t\"pitiful\": \"ADJ\",\n\t\t\t\"facility\": \"NOUN\",\n\t\t\t\"fuzzy\": \"ADJ\",\n\t\t\t\"bloodying\": \"VERB\",\n\t\t\t\"laundry\": \"NOUN\",\n\t\t\t\"cozumel\": \"PROPN\",\n\t\t\t\"........\": \"PUNCT\",\n\t\t\t\"renaissance\": \"PROPN\",\n\t\t\t\"tapering\": \"VERB\",\n\t\t\t\"sharif\": \"PROPN\",\n\t\t\t\"chest\": \"NOUN\",\n\t\t\t\"mcmasters\": \"PROPN\",\n\t\t\t\"caucasian\": \"ADJ\",\n\t\t\t\"joined\": \"VERB\",\n\t\t\t\"entartete\": \"PROPN\",\n\t\t\t\"canape's\": \"NOUN\",\n\t\t\t\"packs\": \"NOUN\",\n\t\t\t\"memoir\": \"NOUN\",\n\t\t\t\"beware\": \"VERB\",\n\t\t\t\"place\": \"NOUN\",\n\t\t\t\"handle\": \"VERB\",\n\t\t\t\"sms\": \"NOUN\",\n\t\t\t\"violence\": \"NOUN\",\n\t\t\t\"sessions\": \"NOUN\",\n\t\t\t\"retreat\": \"NOUN\",\n\t\t\t\"fussy\": \"ADJ\",\n\t\t\t\"270\": \"NUM\",\n\t\t\t\"team\": \"NOUN\",\n\t\t\t\"sham\": \"NOUN\",\n\t\t\t\"a.m\": \"NOUN\",\n\t\t\t\"http://www.loveallpeople.org\": \"PROPN\",\n\t\t\t\"etc\": \"NOUN\",\n\t\t\t\"tooted\": \"VERB\",\n\t\t\t\"surf\": \"NOUN\",\n\t\t\t\"regards\": \"NOUN\",\n\t\t\t\"breath\": \"NOUN\",\n\t\t\t\"saving\": \"VERB\",\n\t\t\t\"stealing\": \"VERB\",\n\t\t\t\"trephena\": \"NOUN\",\n\t\t\t\"outraged\": \"ADJ\",\n\t\t\t\"safavid\": \"PROPN\",\n\t\t\t\"taj\": \"PROPN\",\n\t\t\t\"tongue\": \"NOUN\",\n\t\t\t\"nestling\": \"VERB\",\n\t\t\t\"explicit\": \"ADJ\",\n\t\t\t\"causing\": \"VERB\",\n\t\t\t\"feild\": \"NOUN\",\n\t\t\t\"single\": \"ADJ\",\n\t\t\t\"those\": \"DET\",\n\t\t\t\"gemma\": \"PROPN\",\n\t\t\t\"reine\": \"PROPN\",\n\t\t\t\"heeded\": \"VERB\",\n\t\t\t\"unimaginative\": \"ADJ\",\n\t\t\t\"overlooked\": \"VERB\",\n\t\t\t\"alps\": \"PROPN\",\n\t\t\t\"hack\": \"VERB\",\n\t\t\t\"suttle\": \"PROPN\",\n\t\t\t\"rfi\": \"NOUN\",\n\t\t\t\"typifies\": \"VERB\",\n\t\t\t\"international\": \"ADJ\",\n\t\t\t\"groups\": \"NOUN\",\n\t\t\t\"able\": \"ADJ\",\n\t\t\t\"leaned\": \"VERB\",\n\t\t\t\"wrote\": \"VERB\",\n\t\t\t\"soaked\": \"VERB\",\n\t\t\t\"changing\": \"VERB\",\n\t\t\t\"wonderfully\": \"ADV\",\n\t\t\t\"adorned\": \"VERB\",\n\t\t\t\"th-thank\": \"VERB\",\n\t\t\t\"only\": \"ADV\",\n\t\t\t\"201-592-4699\": \"NUM\",\n\t\t\t\"censor\": \"VERB\",\n\t\t\t\"champagne\": \"NOUN\",\n\t\t\t\"321\": \"NUM\",\n\t\t\t\"usefulness\": \"NOUN\",\n\t\t\t\"fellow\": \"ADJ\",\n\t\t\t\"proximity\": \"NOUN\",\n\t\t\t\"dialect\": \"NOUN\",\n\t\t\t\"sleeves\": \"NOUN\",\n\t\t\t\"exquisite\": \"ADJ\",\n\t\t\t\"socky\": \"PROPN\",\n\t\t\t\"marae\": \"PROPN\",\n\t\t\t\"jurisdiction\": \"NOUN\",\n\t\t\t\"taylors\": \"PROPN\",\n\t\t\t\"1738\": \"NUM\",\n\t\t\t\"cintra\": \"PROPN\",\n\t\t\t\"minnesota\": \"PROPN\",\n\t\t\t\"society\": \"NOUN\",\n\t\t\t\"macrocosm\": \"NOUN\",\n\t\t\t\"gonzaga\": \"PROPN\",\n\t\t\t\"stumps\": \"NOUN\",\n\t\t\t\"apathy\": \"NOUN\",\n\t\t\t\"albanian\": \"ADJ\",\n\t\t\t\"tranquillity\": \"NOUN\",\n\t\t\t\"scheme\": \"NOUN\",\n\t\t\t\"3,800\": \"NUM\",\n\t\t\t\"regenesis\": \"PROPN\",\n\t\t\t\"materials\": \"NOUN\",\n\t\t\t\"jāmé\": \"PROPN\",\n\t\t\t\"crashes\": \"VERB\",\n\t\t\t\"extensively\": \"ADV\",\n\t\t\t\"sen.\": \"PROPN\",\n\t\t\t\"consensus\": \"NOUN\",\n\t\t\t\"puzzles\": \"NOUN\",\n\t\t\t\"resign\": \"VERB\",\n\t\t\t\"waiver\": \"NOUN\",\n\t\t\t\"will\": \"AUX\",\n\t\t\t\"ashton\": \"PROPN\",\n\t\t\t\"stored\": \"VERB\",\n\t\t\t\"46c1\": \"PROPN\",\n\t\t\t\"undermining\": \"VERB\",\n\t\t\t\"reorg\": \"NOUN\",\n\t\t\t\"confirm\": \"VERB\",\n\t\t\t\"cicada\": \"NOUN\",\n\t\t\t\"inflate\": \"VERB\",\n\t\t\t\"scandal\": \"NOUN\",\n\t\t\t\"lowering\": \"VERB\",\n\t\t\t\"spike\": \"VERB\",\n\t\t\t\"luis\": \"PROPN\",\n\t\t\t\"pre-meeting\": \"ADJ\",\n\t\t\t\"reliable\": \"ADJ\",\n\t\t\t\"breakaway\": \"NOUN\",\n\t\t\t\"childlike\": \"ADJ\",\n\t\t\t\"slinking\": \"NOUN\",\n\t\t\t\"lies\": \"VERB\",\n\t\t\t\"barbecue\": \"NOUN\",\n\t\t\t\"shyness\": \"NOUN\",\n\t\t\t\"ã³l\": \"ADJ\",\n\t\t\t\"admittedly\": \"ADV\",\n\t\t\t\"weehawken\": \"PROPN\",\n\t\t\t\"inconvenienced\": \"VERB\",\n\t\t\t\"reinforces\": \"VERB\",\n\t\t\t\"christian\": \"ADJ\",\n\t\t\t\"scientist\": \"NOUN\",\n\t\t\t\"lung\": \"NOUN\",\n\t\t\t\"invading\": \"VERB\",\n\t\t\t\"tens\": \"NOUN\",\n\t\t\t\"cart\": \"NOUN\",\n\t\t\t\"envelopes\": \"NOUN\",\n\t\t\t\"victories\": \"NOUN\",\n\t\t\t\"grasped\": \"VERB\",\n\t\t\t\"grin\": \"NOUN\",\n\t\t\t\"nairobi\": \"PROPN\",\n\t\t\t\"appointed\": \"VERB\",\n\t\t\t\"peachstate\": \"PROPN\",\n\t\t\t\"walrus\": \"PROPN\",\n\t\t\t\"va\": \"PROPN\",\n\t\t\t\"vo\": \"PROPN\",\n\t\t\t\"posterior\": \"ADJ\",\n\t\t\t\"mug\": \"NOUN\",\n\t\t\t\"#technology\": \"PROPN\",\n\t\t\t\"demanding\": \"VERB\",\n\t\t\t\"dealer\": \"NOUN\",\n\t\t\t\"clan\": \"NOUN\",\n\t\t\t\"stevens\": \"PROPN\",\n\t\t\t\"definitions\": \"NOUN\",\n\t\t\t\"225\": \"NUM\",\n\t\t\t\"pacifying\": \"VERB\",\n\t\t\t\"scrap\": \"NOUN\",\n\t\t\t\"honesty\": \"NOUN\",\n\t\t\t\"halts\": \"NOUN\",\n\t\t\t\"jake\": \"PROPN\",\n\t\t\t\"uncut\": \"ADJ\",\n\t\t\t\"criterion\": \"NOUN\",\n\t\t\t\"criticized\": \"VERB\",\n\t\t\t\"dab\": \"PROPN\",\n\t\t\t\"assistant\": \"NOUN\",\n\t\t\t\"liquidweb.com\": \"PROPN\",\n\t\t\t\"fabulously\": \"ADV\",\n\t\t\t\"po\": \"NOUN\",\n\t\t\t\"postpone\": \"VERB\",\n\t\t\t\"ceo\": \"NOUN\",\n\t\t\t\"appeal\": \"NOUN\",\n\t\t\t\"trimmed\": \"VERB\",\n\t\t\t\"chairs\": \"NOUN\",\n\t\t\t\"62\": \"NUM\",\n\t\t\t\"12\": \"NUM\",\n\t\t\t\"anouilh\": \"PROPN\",\n\t\t\t\"you're\": \"PRON\",\n\t\t\t\"sasquatch\": \"PROPN\",\n\t\t\t\"manson\": \"PROPN\",\n\t\t\t\"neo-conservatives\": \"NOUN\",\n\t\t\t\"saddened\": \"VERB\",\n\t\t\t\"penetrate\": \"VERB\",\n\t\t\t\"coincidence\": \"NOUN\",\n\t\t\t\"12/27\": \"NUM\",\n\t\t\t\"fawn\": \"PROPN\",\n\t\t\t\"talmy\": \"PROPN\",\n\t\t\t\"ici\": \"PROPN\",\n\t\t\t\"smiling\": \"VERB\",\n\t\t\t\"undersized\": \"ADJ\",\n\t\t\t\"kenya\": \"PROPN\",\n\t\t\t\"emminence\": \"PROPN\",\n\t\t\t\"include\": \"VERB\",\n\t\t\t\"arrogantly\": \"ADV\",\n\t\t\t\"impenetrable\": \"ADJ\",\n\t\t\t\"http://www.binkyswoodworking.com/horsestable.php\": \"PROPN\",\n\t\t\t\"jellies\": \"NOUN\",\n\t\t\t\"fiftyfive\": \"NUM\",\n\t\t\t\"unpacking\": \"VERB\",\n\t\t\t\"arrange\": \"VERB\",\n\t\t\t\"overweight\": \"ADJ\",\n\t\t\t\"creations\": \"NOUN\",\n\t\t\t\"so\": \"ADV\",\n\t\t\t\"anti-semitism\": \"NOUN\",\n\t\t\t\"burial\": \"NOUN\",\n\t\t\t\"presume\": \"VERB\",\n\t\t\t\"vital\": \"ADJ\",\n\t\t\t\"gesturing\": \"VERB\",\n\t\t\t\"lucille\": \"PROPN\",\n\t\t\t\"clergy\": \"NOUN\",\n\t\t\t\"fernandez\": \"PROPN\",\n\t\t\t\"frayed\": \"ADJ\",\n\t\t\t\"06:02\": \"NUM\",\n\t\t\t\"1.6\": \"NUM\",\n\t\t\t\"harari\": \"PROPN\",\n\t\t\t\"mirth\": \"NOUN\",\n\t\t\t\"superintendant\": \"NOUN\",\n\t\t\t\"hence\": \"ADV\",\n\t\t\t\"transcend\": \"VERB\",\n\t\t\t\"contractual\": \"ADJ\",\n\t\t\t\"41\": \"NUM\",\n\t\t\t\"intertextualities\": \"NOUN\",\n\t\t\t\"cross-border\": \"ADJ\",\n\t\t\t\"cus\": \"SCONJ\",\n\t\t\t\"1/2\": \"NUM\",\n\t\t\t\"leasing\": \"PROPN\",\n\t\t\t\"7.15\": \"NUM\",\n\t\t\t\"neighbourly\": \"ADJ\",\n\t\t\t\"ocd\": \"PROPN\",\n\t\t\t\"mechanism\": \"NOUN\",\n\t\t\t\"accused\": \"VERB\",\n\t\t\t\"recitals\": \"NOUN\",\n\t\t\t\"incas\": \"PROPN\",\n\t\t\t\"formatted\": \"VERB\",\n\t\t\t\"dramatically\": \"ADV\",\n\t\t\t\"starve\": \"VERB\",\n\t\t\t\"del\": \"PROPN\",\n\t\t\t\"robbie\": \"PROPN\",\n\t\t\t\"ti\": \"PRON\",\n\t\t\t\"uncommitted\": \"ADJ\",\n\t\t\t\"tanning\": \"NOUN\",\n\t\t\t\"noninteractive\": \"ADJ\",\n\t\t\t\"smell\": \"NOUN\",\n\t\t\t\"montmartre\": \"PROPN\",\n\t\t\t\"glinted\": \"VERB\",\n\t\t\t\"pumping\": \"VERB\",\n\t\t\t\"aged\": \"ADJ\",\n\t\t\t\"expectancy\": \"NOUN\",\n\t\t\t\"bond\": \"NOUN\",\n\t\t\t\"nighstand\": \"NOUN\",\n\t\t\t\"declarations\": \"NOUN\",\n\t\t\t\"piotrkowska\": \"PROPN\",\n\t\t\t\"product\": \"NOUN\",\n\t\t\t\"scrambled\": \"VERB\",\n\t\t\t\"21,000\": \"NUM\",\n\t\t\t\"harp\": \"NOUN\",\n\t\t\t\"suburbs\": \"NOUN\",\n\t\t\t\"instructors\": \"NOUN\",\n\t\t\t\"vietnamese\": \"ADJ\",\n\t\t\t\"3,000\": \"NUM\",\n\t\t\t\"1932\": \"NUM\",\n\t\t\t\"conversational\": \"ADJ\",\n\t\t\t\"merseybeat\": \"NOUN\",\n\t\t\t\"leitmotivs\": \"NOUN\",\n\t\t\t\"lik\": \"ADP\",\n\t\t\t\"despite\": \"ADP\",\n\t\t\t\"nutrients\": \"NOUN\",\n\t\t\t\"til\": \"ADP\",\n\t\t\t\"dixam\": \"PROPN\",\n\t\t\t\"190\": \"NUM\",\n\t\t\t\"1930’s\": \"PROPN\",\n\t\t\t\"discriminatory\": \"ADJ\",\n\t\t\t\"detectives\": \"NOUN\",\n\t\t\t\"1614\": \"NUM\",\n\t\t\t\"inky\": \"ADJ\",\n\t\t\t\"louvre\": \"PROPN\",\n\t\t\t\"imbued\": \"VERB\",\n\t\t\t\"neither\": \"CCONJ\",\n\t\t\t\"defeat\": \"VERB\",\n\t\t\t\"handwritten\": \"ADJ\",\n\t\t\t\"edu\": \"PROPN\",\n\t\t\t\"confidence\": \"NOUN\",\n\t\t\t\"dismissed\": \"VERB\",\n\t\t\t\"drifted\": \"VERB\",\n\t\t\t\"....\": \"PUNCT\",\n\t\t\t\"neil\": \"PROPN\",\n\t\t\t\"wreck\": \"NOUN\",\n\t\t\t\"pmid\": \"PROPN\",\n\t\t\t\"packages\": \"NOUN\",\n\t\t\t\"ch-\": \"INTJ\",\n\t\t\t\"segregationists\": \"NOUN\",\n\t\t\t\"robust\": \"ADJ\",\n\t\t\t\"breakdown\": \"NOUN\",\n\t\t\t\"presto\": \"PROPN\",\n\t\t\t\"theory\": \"NOUN\",\n\t\t\t\"lacks\": \"VERB\",\n\t\t\t\"clerics\": \"NOUN\",\n\t\t\t\"paganism\": \"PROPN\",\n\t\t\t\"1579\": \"NUM\",\n\t\t\t\"placid\": \"ADJ\",\n\t\t\t\"ny\": \"PROPN\",\n\t\t\t\"gerry\": \"PROPN\",\n\t\t\t\"monetary\": \"ADJ\",\n\t\t\t\"forecast\": \"VERB\",\n\t\t\t\"582\": \"NUM\",\n\t\t\t\"wal\": \"PROPN\",\n\t\t\t\"bombast\": \"NOUN\",\n\t\t\t\"vindication\": \"NOUN\",\n\t\t\t\"sisal\": \"NOUN\",\n\t\t\t\"gnarled\": \"ADJ\",\n\t\t\t\"aye\": \"INTJ\",\n\t\t\t\"giannini\": \"PROPN\",\n\t\t\t\"basils\": \"NOUN\",\n\t\t\t\"adolescents\": \"NOUN\",\n\t\t\t\"guilty\": \"ADJ\",\n\t\t\t\"hoss\": \"NOUN\",\n\t\t\t\"louis\": \"PROPN\",\n\t\t\t\"paradox\": \"NOUN\",\n\t\t\t\"backbiting\": \"VERB\",\n\t\t\t\"damascus\": \"PROPN\",\n\t\t\t\"baileys\": \"PROPN\",\n\t\t\t\"taunts\": \"NOUN\",\n\t\t\t\"graze\": \"VERB\",\n\t\t\t\"journey\": \"NOUN\",\n\t\t\t\"properly\": \"ADV\",\n\t\t\t\"reused\": \"VERB\",\n\t\t\t\"intelligible\": \"ADJ\",\n\t\t\t\"prevention\": \"NOUN\",\n\t\t\t\"www.risk-conferences.com/risk2001aus\": \"PROPN\",\n\t\t\t\"walks\": \"VERB\",\n\t\t\t\"glue\": \"NOUN\",\n\t\t\t\"cop\": \"NOUN\",\n\t\t\t\"patiently\": \"ADV\",\n\t\t\t\"montavano\": \"PROPN\",\n\t\t\t\"voices\": \"NOUN\",\n\t\t\t\"fandom\": \"NOUN\",\n\t\t\t\"aunt\": \"NOUN\",\n\t\t\t\"prudential\": \"ADJ\",\n\t\t\t\"older\": \"ADJ\",\n\t\t\t\"pleaure\": \"NOUN\",\n\t\t\t\"deceptive\": \"ADJ\",\n\t\t\t\"colonialism\": \"NOUN\",\n\t\t\t\"dental\": \"ADJ\",\n\t\t\t\"meps\": \"NOUN\",\n\t\t\t\"barbershops\": \"NOUN\",\n\t\t\t\"artless\": \"ADJ\",\n\t\t\t\"context\": \"NOUN\",\n\t\t\t\"exterminated\": \"VERB\",\n\t\t\t\"clamps\": \"NOUN\",\n\t\t\t\"http://lllreptile.com/store/catalog/reptile-supplies/uvb-fluorescent-lights-mercury-vapor-bulbs/-/zoo-med-24-repti-sun-100-fluorescent-bulb/\": \"PROPN\",\n\t\t\t\"cheek\": \"NOUN\",\n\t\t\t\"fill\": \"VERB\",\n\t\t\t\"pesky\": \"ADJ\",\n\t\t\t\"outlived\": \"VERB\",\n\t\t\t\"overcrowded\": \"ADJ\",\n\t\t\t\"iraqiyah\": \"PROPN\",\n\t\t\t\"equality\": \"NOUN\",\n\t\t\t\"croft\": \"PROPN\",\n\t\t\t\"shortness\": \"NOUN\",\n\t\t\t\"#food\": \"PROPN\",\n\t\t\t\"prohibition\": \"NOUN\",\n\t\t\t\"assailant\": \"NOUN\",\n\t\t\t\"death\": \"NOUN\",\n\t\t\t\"explanatory\": \"ADJ\",\n\t\t\t\"389,950\": \"NUM\",\n\t\t\t\"mobile\": \"ADJ\",\n\t\t\t\"laborers\": \"NOUN\",\n\t\t\t\"drift\": \"VERB\",\n\t\t\t\"oysters\": \"NOUN\",\n\t\t\t\"helps\": \"VERB\",\n\t\t\t\"pancreatitis\": \"NOUN\",\n\t\t\t\"recruited\": \"VERB\",\n\t\t\t\"anybody\": \"PRON\",\n\t\t\t\"lucrative\": \"ADJ\",\n\t\t\t\"promises\": \"NOUN\",\n\t\t\t\"avian\": \"ADJ\",\n\t\t\t\"anti-establishment\": \"ADJ\",\n\t\t\t\"2.3\": \"NUM\",\n\t\t\t\"masterpieces\": \"NOUN\",\n\t\t\t\"faxed\": \"VERB\",\n\t\t\t\"endeavour\": \"NOUN\",\n\t\t\t\"1.888.509.3736\": \"NUM\",\n\t\t\t\"held\": \"VERB\",\n\t\t\t\"hopless\": \"ADJ\",\n\t\t\t\"falsehoods\": \"NOUN\",\n\t\t\t\"partisan\": \"ADJ\",\n\t\t\t\"scriptural\": \"ADJ\",\n\t\t\t\"masterminds\": \"NOUN\",\n\t\t\t\"fulfilled\": \"VERB\",\n\t\t\t\"dull\": \"ADJ\",\n\t\t\t\"adriatic\": \"ADJ\",\n\t\t\t\"milf\": \"PROPN\",\n\t\t\t\"heedless\": \"ADJ\",\n\t\t\t\"futuristic\": \"ADJ\",\n\t\t\t\"e.g.\": \"ADV\",\n\t\t\t\"sullivan\": \"PROPN\",\n\t\t\t\"pool\": \"NOUN\",\n\t\t\t\"rents\": \"NOUN\",\n\t\t\t\"hailstorm\": \"NOUN\",\n\t\t\t\"navel\": \"NOUN\",\n\t\t\t\"intelligent\": \"ADJ\",\n\t\t\t\"caustic\": \"ADJ\",\n\t\t\t\"armored\": \"ADJ\",\n\t\t\t\"acting\": \"VERB\",\n\t\t\t\"therapist\": \"NOUN\",\n\t\t\t\"hurrying\": \"VERB\",\n\t\t\t\"surounded\": \"VERB\",\n\t\t\t\"spoon\": \"NOUN\",\n\t\t\t\"snow-white\": \"ADJ\",\n\t\t\t\"buns\": \"NOUN\",\n\t\t\t\"relations\": \"NOUN\",\n\t\t\t\"appetizers\": \"NOUN\",\n\t\t\t\"ie9\": \"PROPN\",\n\t\t\t\"piccadilla\": \"PROPN\",\n\t\t\t\"hdtv\": \"NOUN\",\n\t\t\t\"lucia\": \"PROPN\",\n\t\t\t\"aphorisms\": \"NOUN\",\n\t\t\t\"u.t.\": \"PROPN\",\n\t\t\t\"yearning\": \"VERB\",\n\t\t\t\"separately\": \"ADV\",\n\t\t\t\"thingy\": \"NOUN\",\n\t\t\t\"welcomes\": \"VERB\",\n\t\t\t\"10,000.00\": \"NUM\",\n\t\t\t\"euler\": \"PROPN\",\n\t\t\t\"calibrated\": \"VERB\",\n\t\t\t\"trend\": \"NOUN\",\n\t\t\t\"headaches\": \"NOUN\",\n\t\t\t\"pls\": \"INTJ\",\n\t\t\t\"ak\": \"PROPN\",\n\t\t\t\"alt.animals.felines.snowleopards\": \"NOUN\",\n\t\t\t\"owned\": \"VERB\",\n\t\t\t\"obligations\": \"NOUN\",\n\t\t\t\"nerds\": \"NOUN\",\n\t\t\t\"confronting\": \"VERB\",\n\t\t\t\"moss\": \"NOUN\",\n\t\t\t\"socks\": \"NOUN\",\n\t\t\t\"pre-season\": \"NOUN\",\n\t\t\t\"destined\": \"ADJ\",\n\t\t\t\"summarised\": \"VERB\",\n\t\t\t\"1.3\": \"NUM\",\n\t\t\t\"anti-army\": \"ADJ\",\n\t\t\t\"sickness\": \"NOUN\",\n\t\t\t\"criticised\": \"VERB\",\n\t\t\t\"chs\": \"PROPN\",\n\t\t\t\"quilis\": \"PROPN\",\n\t\t\t\"abusing\": \"VERB\",\n\t\t\t\"microscopic\": \"ADJ\",\n\t\t\t\"samchawk@aol.com\": \"PROPN\",\n\t\t\t\"penitentiary\": \"NOUN\",\n\t\t\t\"login\": \"NOUN\",\n\t\t\t\"valverde\": \"PROPN\",\n\t\t\t\"aggregation\": \"NOUN\",\n\t\t\t\"sonny\": \"NOUN\",\n\t\t\t\"paperback\": \"PROPN\",\n\t\t\t\"rosenberg\": \"PROPN\",\n\t\t\t\"phenology\": \"NOUN\",\n\t\t\t\"gnocchi\": \"NOUN\",\n\t\t\t\"contemporary\": \"ADJ\",\n\t\t\t\"creek\": \"PROPN\",\n\t\t\t\"apostle\": \"PROPN\",\n\t\t\t\"climb\": \"VERB\",\n\t\t\t\"neighbour\": \"NOUN\",\n\t\t\t\"concepts\": \"NOUN\",\n\t\t\t\"microsoft\": \"PROPN\",\n\t\t\t\"etiquette\": \"NOUN\",\n\t\t\t\"1933\": \"NUM\",\n\t\t\t\"touching\": \"VERB\",\n\t\t\t\"touches\": \"NOUN\",\n\t\t\t\"family\": \"NOUN\",\n\t\t\t\"dobby\": \"PROPN\",\n\t\t\t\"automatic\": \"ADJ\",\n\t\t\t\"angeles\": \"PROPN\",\n\t\t\t\"heartily\": \"ADV\",\n\t\t\t\"fifty\": \"NUM\",\n\t\t\t\"09/16/99\": \"NUM\",\n\t\t\t\"visions\": \"NOUN\",\n\t\t\t\"instantly\": \"ADV\",\n\t\t\t\"writer\": \"NOUN\",\n\t\t\t\"fatal\": \"ADJ\",\n\t\t\t\"followers\": \"NOUN\",\n\t\t\t\"tickled\": \"VERB\",\n\t\t\t\"11/29/00\": \"NUM\",\n\t\t\t\"ft\": \"NOUN\",\n\t\t\t\"ascendance\": \"NOUN\",\n\t\t\t\"youtuber\": \"PROPN\",\n\t\t\t\"polluter\": \"NOUN\",\n\t\t\t\"deserts\": \"NOUN\",\n\t\t\t\"10/26/2000\": \"NUM\",\n\t\t\t\"groaned\": \"VERB\",\n\t\t\t\"canal\": \"NOUN\",\n\t\t\t\"toxins\": \"NOUN\",\n\t\t\t\"birdy\": \"NOUN\",\n\t\t\t\"normalcy\": \"NOUN\",\n\t\t\t\"gauls\": \"NOUN\",\n\t\t\t\"anticipating\": \"VERB\",\n\t\t\t\"sophomore\": \"NOUN\",\n\t\t\t\"accuracies\": \"NOUN\",\n\t\t\t\"deposited\": \"VERB\",\n\t\t\t\"rhino\": \"NOUN\",\n\t\t\t\"elsewise\": \"ADV\",\n\t\t\t\"insignias\": \"NOUN\",\n\t\t\t\"flourishing\": \"VERB\",\n\t\t\t\"thanking\": \"VERB\",\n\t\t\t\"phoenix\": \"PROPN\",\n\t\t\t\"cleric\": \"NOUN\",\n\t\t\t\"intervention\": \"NOUN\",\n\t\t\t\"struggled\": \"VERB\",\n\t\t\t\"voluntarily\": \"ADV\",\n\t\t\t\"yr\": \"NOUN\",\n\t\t\t\"performer\": \"NOUN\",\n\t\t\t\"emmy\": \"PROPN\",\n\t\t\t\"useless\": \"ADJ\",\n\t\t\t\"colette\": \"PROPN\",\n\t\t\t\"ul\": \"PROPN\",\n\t\t\t\"collar\": \"NOUN\",\n\t\t\t\"carpet\": \"NOUN\",\n\t\t\t\"iran\": \"PROPN\",\n\t\t\t\"bay\": \"PROPN\",\n\t\t\t\"décor\": \"NOUN\",\n\t\t\t\"what\": \"PRON\",\n\t\t\t\"nascent\": \"ADJ\",\n\t\t\t\"pagen\": \"ADJ\",\n\t\t\t\"admissions\": \"NOUN\",\n\t\t\t\"yonhap\": \"PROPN\",\n\t\t\t\"impression\": \"NOUN\",\n\t\t\t\"alaska\": \"PROPN\",\n\t\t\t\"prepaid\": \"VERB\",\n\t\t\t\"hilltops\": \"NOUN\",\n\t\t\t\"fancied\": \"VERB\",\n\t\t\t\"100,000\": \"NUM\",\n\t\t\t\"harmonize\": \"VERB\",\n\t\t\t\"touting\": \"VERB\",\n\t\t\t\"driver\": \"NOUN\",\n\t\t\t\"balsa\": \"NOUN\",\n\t\t\t\"studio\": \"NOUN\",\n\t\t\t\"emphasizes\": \"VERB\",\n\t\t\t\"350\": \"NUM\",\n\t\t\t\"vapor\": \"NOUN\",\n\t\t\t\"definitive\": \"ADJ\",\n\t\t\t\"wheeled\": \"VERB\",\n\t\t\t\"moxon\": \"PROPN\",\n\t\t\t\"#causalargument\": \"PROPN\",\n\t\t\t\"constructivist\": \"ADJ\",\n\t\t\t\"sombre\": \"ADJ\",\n\t\t\t\"militant\": \"ADJ\",\n\t\t\t\"cookie\": \"NOUN\",\n\t\t\t\"outfitting\": \"VERB\",\n\t\t\t\"rests\": \"VERB\",\n\t\t\t\"shepherd\": \"NOUN\",\n\t\t\t\"indifference\": \"NOUN\",\n\t\t\t\"creaks\": \"VERB\",\n\t\t\t\"4,700\": \"NUM\",\n\t\t\t\"protecting\": \"VERB\",\n\t\t\t\"genitals\": \"NOUN\",\n\t\t\t\"wednesday\": \"PROPN\",\n\t\t\t\"providence\": \"PROPN\",\n\t\t\t\"connection\": \"NOUN\",\n\t\t\t\"staunch\": \"ADJ\",\n\t\t\t\"creational\": \"ADJ\",\n\t\t\t\"witnessed\": \"VERB\",\n\t\t\t\"preachers\": \"NOUN\",\n\t\t\t\"grille\": \"PROPN\",\n\t\t\t\"bitching\": \"VERB\",\n\t\t\t\"dyed\": \"ADJ\",\n\t\t\t\"glimpse\": \"NOUN\",\n\t\t\t\"stressed\": \"VERB\",\n\t\t\t\"clambered\": \"VERB\",\n\t\t\t\"tsinghua\": \"PROPN\",\n\t\t\t\"94720-5180\": \"NUM\",\n\t\t\t\"town\": \"NOUN\",\n\t\t\t\"dessert\": \"NOUN\",\n\t\t\t\"10,000\": \"NUM\",\n\t\t\t\"resting\": \"NOUN\",\n\t\t\t\"shoo\": \"VERB\",\n\t\t\t\"drama\": \"NOUN\",\n\t\t\t\"inland\": \"ADV\",\n\t\t\t\"dear\": \"ADJ\",\n\t\t\t\"fax\": \"NOUN\",\n\t\t\t\"mistake\": \"NOUN\",\n\t\t\t\"sinhalese\": \"ADJ\",\n\t\t\t\"taft\": \"PROPN\",\n\t\t\t\"panting\": \"VERB\",\n\t\t\t\"usual\": \"ADJ\",\n\t\t\t\"padalecki\": \"PROPN\",\n\t\t\t\"localities\": \"NOUN\",\n\t\t\t\"longest\": \"ADJ\",\n\t\t\t\"mozart\": \"PROPN\",\n\t\t\t\"57\": \"NUM\",\n\t\t\t\"cei\": \"PROPN\",\n\t\t\t\"expose\": \"VERB\",\n\t\t\t\"bienvenue\": \"PROPN\",\n\t\t\t\"82\": \"NUM\",\n\t\t\t\"hebrew\": \"ADJ\",\n\t\t\t\"snatches\": \"VERB\",\n\t\t\t\"abolish\": \"VERB\",\n\t\t\t\"hams\": \"NOUN\",\n\t\t\t\"pinkerton\": \"PROPN\",\n\t\t\t\"hibernation\": \"NOUN\",\n\t\t\t\"mcginnis\": \"PROPN\",\n\t\t\t\"javascript\": \"NOUN\",\n\t\t\t\"puns\": \"NOUN\",\n\t\t\t\"malfoy\": \"PROPN\",\n\t\t\t\"6th\": \"NOUN\",\n\t\t\t\"snapping\": \"VERB\",\n\t\t\t\"dropped\": \"VERB\",\n\t\t\t\"bonosus\": \"PROPN\",\n\t\t\t\"palatine\": \"PROPN\",\n\t\t\t\"seared\": \"VERB\",\n\t\t\t\"slacked\": \"VERB\",\n\t\t\t\"ambulances\": \"NOUN\",\n\t\t\t\"ml\": \"NOUN\",\n\t\t\t\"hai\": \"PROPN\",\n\t\t\t\"brunch\": \"NOUN\",\n\t\t\t\"infantry\": \"NOUN\",\n\t\t\t\"cotillion\": \"PROPN\",\n\t\t\t\"beginners\": \"NOUN\",\n\t\t\t\"425-415-3098\": \"NUM\",\n\t\t\t\"jawaharlal\": \"PROPN\",\n\t\t\t\"swallows\": \"NOUN\",\n\t\t\t\"avail\": \"NOUN\",\n\t\t\t\"walkway\": \"NOUN\",\n\t\t\t\"delight\": \"NOUN\",\n\t\t\t\"elaborated\": \"VERB\",\n\t\t\t\"warship\": \"NOUN\",\n\t\t\t\"csas\": \"NOUN\",\n\t\t\t\"notified\": \"VERB\",\n\t\t\t\"nostrils\": \"NOUN\",\n\t\t\t\"yale\": \"PROPN\",\n\t\t\t\"77.92\": \"NUM\",\n\t\t\t\"metrics\": \"NOUN\",\n\t\t\t\"correspondent\": \"NOUN\",\n\t\t\t\"confluence\": \"NOUN\",\n\t\t\t\"9th\": \"NOUN\",\n\t\t\t\"hindered\": \"VERB\",\n\t\t\t\"triumph\": \"NOUN\",\n\t\t\t\"1782\": \"NUM\",\n\t\t\t\"distract\": \"VERB\",\n\t\t\t\"manner\": \"NOUN\",\n\t\t\t\"01:50\": \"NUM\",\n\t\t\t\"goods\": \"NOUN\",\n\t\t\t\"version\": \"NOUN\",\n\t\t\t\"motley\": \"ADJ\",\n\t\t\t\"glided\": \"VERB\",\n\t\t\t\"220\": \"NUM\",\n\t\t\t\"dollar\": \"NOUN\",\n\t\t\t\"attitude\": \"NOUN\",\n\t\t\t\"sandwiches\": \"NOUN\",\n\t\t\t\"magnum\": \"PROPN\",\n\t\t\t\"reproductive\": \"ADJ\",\n\t\t\t\"89\": \"NUM\",\n\t\t\t\"bogaerts\": \"PROPN\",\n\t\t\t\"4600\": \"NUM\",\n\t\t\t\"pep\": \"NOUN\",\n\t\t\t\"lovin'\": \"NOUN\",\n\t\t\t\"70,000\": \"NUM\",\n\t\t\t\"structuralism\": \"PROPN\",\n\t\t\t\"leash\": \"NOUN\",\n\t\t\t\"binding\": \"NOUN\",\n\t\t\t\"satin-wood\": \"NOUN\",\n\t\t\t\"kindle\": \"PROPN\",\n\t\t\t\"engineers\": \"PROPN\",\n\t\t\t\"siege\": \"NOUN\",\n\t\t\t\"tape\": \"NOUN\",\n\t\t\t\"downfalls\": \"NOUN\",\n\t\t\t\"unclipped\": \"VERB\",\n\t\t\t\"adorable\": \"ADJ\",\n\t\t\t\"dragons\": \"NOUN\",\n\t\t\t\"finishing\": \"VERB\",\n\t\t\t\"learned\": \"VERB\",\n\t\t\t\"hat\": \"NOUN\",\n\t\t\t\"02\": \"NUM\",\n\t\t\t\"honorable\": \"ADJ\",\n\t\t\t\"ripe\": \"ADJ\",\n\t\t\t\"fizzle\": \"VERB\",\n\t\t\t\"liturgy\": \"NOUN\",\n\t\t\t\"bicycles\": \"NOUN\",\n\t\t\t\"vestry\": \"PROPN\",\n\t\t\t\"garnered\": \"VERB\",\n\t\t\t\"incur\": \"VERB\",\n\t\t\t\"chineese\": \"ADJ\",\n\t\t\t\"by\": \"ADP\",\n\t\t\t\"overwhelmingly\": \"ADV\",\n\t\t\t\"programme\": \"NOUN\",\n\t\t\t\"matt\": \"PROPN\",\n\t\t\t\"hurtling\": \"VERB\",\n\t\t\t\"undiscovered\": \"ADJ\",\n\t\t\t\"moslem\": \"ADJ\",\n\t\t\t\"loyal\": \"ADJ\",\n\t\t\t\"purchases\": \"NOUN\",\n\t\t\t\"quitted\": \"VERB\",\n\t\t\t\"completion\": \"NOUN\",\n\t\t\t\"kukulkan\": \"PROPN\",\n\t\t\t\"cause\": \"SCONJ\",\n\t\t\t\"renewed\": \"VERB\",\n\t\t\t\"regulate\": \"VERB\",\n\t\t\t\"heresy\": \"NOUN\",\n\t\t\t\"desperation\": \"NOUN\",\n\t\t\t\"souls\": \"NOUN\",\n\t\t\t\"jui\": \"PROPN\",\n\t\t\t\"merry\": \"ADJ\",\n\t\t\t\"susceptibility\": \"NOUN\",\n\t\t\t\"graphic\": \"ADJ\",\n\t\t\t\"crack\": \"NOUN\",\n\t\t\t\"twenty-mile\": \"NOUN\",\n\t\t\t\"mishap\": \"NOUN\",\n\t\t\t\"regency\": \"PROPN\",\n\t\t\t\"idly\": \"ADV\",\n\t\t\t\"durable\": \"ADJ\",\n\t\t\t\"saw\": \"VERB\",\n\t\t\t\"noticeable\": \"ADJ\",\n\t\t\t\"indicators\": \"NOUN\",\n\t\t\t\"marble\": \"NOUN\",\n\t\t\t\"endowments\": \"NOUN\",\n\t\t\t\"employable\": \"ADJ\",\n\t\t\t\"blossoms\": \"NOUN\",\n\t\t\t\"dope\": \"NOUN\",\n\t\t\t\"changecoordsys\": \"PROPN\",\n\t\t\t\"exporter\": \"NOUN\",\n\t\t\t\"radical\": \"ADJ\",\n\t\t\t\"processed\": \"VERB\",\n\t\t\t\"smail\": \"NOUN\",\n\t\t\t\"pines\": \"NOUN\",\n\t\t\t\"yucky\": \"ADJ\",\n\t\t\t\"towards\": \"ADP\",\n\t\t\t\"rueda\": \"PROPN\",\n\t\t\t\"activists\": \"NOUN\",\n\t\t\t\"zahā\": \"PROPN\",\n\t\t\t\"brazillian\": \"ADJ\",\n\t\t\t\"themes\": \"NOUN\",\n\t\t\t\"vigorously\": \"ADV\",\n\t\t\t\"spitting\": \"ADV\",\n\t\t\t\"discreet\": \"ADJ\",\n\t\t\t\"telling\": \"VERB\",\n\t\t\t\"acknowledging\": \"VERB\",\n\t\t\t\"name\": \"NOUN\",\n\t\t\t\"compson\": \"PROPN\",\n\t\t\t\"2020\": \"NUM\",\n\t\t\t\"enrique\": \"PROPN\",\n\t\t\t\"conv_050815c_03.10\": \"PROPN\",\n\t\t\t\"champion\": \"NOUN\",\n\t\t\t\"friedrich\": \"PROPN\",\n\t\t\t\"blogger\": \"NOUN\",\n\t\t\t\"swap\": \"NOUN\",\n\t\t\t\"basin\": \"NOUN\",\n\t\t\t\"gómez\": \"PROPN\",\n\t\t\t\"rearrange\": \"VERB\",\n\t\t\t\"traitress\": \"NOUN\",\n\t\t\t\"underwater\": \"NOUN\",\n\t\t\t\"emphasis\": \"NOUN\",\n\t\t\t\"averse\": \"ADJ\",\n\t\t\t\"chickie\": \"PROPN\",\n\t\t\t\"affluent\": \"ADJ\",\n\t\t\t\"taxed\": \"VERB\",\n\t\t\t\"flirted\": \"VERB\",\n\t\t\t\"boxer\": \"NOUN\",\n\t\t\t\"hispanic\": \"ADJ\",\n\t\t\t\"814014\": \"NUM\",\n\t\t\t\"coffman\": \"PROPN\",\n\t\t\t\"cue\": \"NOUN\",\n\t\t\t\"cremona\": \"PROPN\",\n\t\t\t\"mosquito\": \"NOUN\",\n\t\t\t\"citizenship\": \"NOUN\",\n\t\t\t\"moreso\": \"ADV\",\n\t\t\t\"strength\": \"NOUN\",\n\t\t\t\"tikrit\": \"PROPN\",\n\t\t\t\"!!!!!!!!!!\": \"PUNCT\",\n\t\t\t\"ck\": \"VERB\",\n\t\t\t\"facebook\": \"PROPN\",\n\t\t\t\"fro\": \"ADP\",\n\t\t\t\"00:20\": \"NUM\",\n\t\t\t\"constraints\": \"NOUN\",\n\t\t\t\"pasejo\": \"PROPN\",\n\t\t\t\"unemployed\": \"ADJ\",\n\t\t\t\"2,300\": \"NUM\",\n\t\t\t\"scooping\": \"VERB\",\n\t\t\t\"equip\": \"VERB\",\n\t\t\t\"annexed\": \"VERB\",\n\t\t\t\"cftc\": \"PROPN\",\n\t\t\t\"hmmmmmm\": \"INTJ\",\n\t\t\t\"launches\": \"VERB\",\n\t\t\t\"lax\": \"ADJ\",\n\t\t\t\"crawled\": \"VERB\",\n\t\t\t\"conservatory\": \"NOUN\",\n\t\t\t\"gilbert\": \"PROPN\",\n\t\t\t\"vince\": \"PROPN\",\n\t\t\t\"mertens\": \"PROPN\",\n\t\t\t\"very\": \"ADV\",\n\t\t\t\"raina\": \"PROPN\",\n\t\t\t\"intrigued\": \"VERB\",\n\t\t\t\"greensboro\": \"PROPN\",\n\t\t\t\"lip\": \"NOUN\",\n\t\t\t\"enforcement\": \"NOUN\",\n\t\t\t\"hush\": \"NOUN\",\n\t\t\t\"dodgy\": \"ADJ\",\n\t\t\t\"leak\": \"NOUN\",\n\t\t\t\"corns\": \"NOUN\",\n\t\t\t\"remarkably\": \"ADV\",\n\t\t\t\"thursday\": \"PROPN\",\n\t\t\t\"unused\": \"ADJ\",\n\t\t\t\"non-life-threatening\": \"ADJ\",\n\t\t\t\"expert\": \"NOUN\",\n\t\t\t\"puffy\": \"ADJ\",\n\t\t\t\"paling\": \"VERB\",\n\t\t\t\"5,000\": \"NUM\",\n\t\t\t\"national-level\": \"NOUN\",\n\t\t\t\"bricks\": \"NOUN\",\n\t\t\t\"dark\": \"ADJ\",\n\t\t\t\"facilities\": \"NOUN\",\n\t\t\t\"cordially\": \"ADV\",\n\t\t\t\"solicit\": \"VERB\",\n\t\t\t\"andreas\": \"PROPN\",\n\t\t\t\"483\": \"NUM\",\n\t\t\t\"adjustments\": \"NOUN\",\n\t\t\t\"b&b\": \"NOUN\",\n\t\t\t\"depend\": \"VERB\",\n\t\t\t\"compost\": \"NOUN\",\n\t\t\t\"m1\": \"PROPN\",\n\t\t\t\"grave\": \"NOUN\",\n\t\t\t\"highline\": \"NOUN\",\n\t\t\t\"yugoslavia\": \"PROPN\",\n\t\t\t\"pilots\": \"NOUN\",\n\t\t\t\"http://www.infoukes.com/history/chornobyl/elg/\": \"PROPN\",\n\t\t\t\"fostering\": \"VERB\",\n\t\t\t\"shitty\": \"ADJ\",\n\t\t\t\"lucas\": \"PROPN\",\n\t\t\t\"henry\": \"PROPN\",\n\t\t\t\"scattering\": \"VERB\",\n\t\t\t\"c.v\": \"PROPN\",\n\t\t\t\"mightily\": \"ADV\",\n\t\t\t\"lymphoma\": \"NOUN\",\n\t\t\t\"faces\": \"NOUN\",\n\t\t\t\"eve.\": \"NOUN\",\n\t\t\t\"means\": \"VERB\",\n\t\t\t\"takes\": \"VERB\",\n\t\t\t\"03:58\": \"NUM\",\n\t\t\t\"mouse\": \"NOUN\",\n\t\t\t\"meteorological\": \"ADJ\",\n\t\t\t\"playstation\": \"PROPN\",\n\t\t\t\"uncanny\": \"ADJ\",\n\t\t\t\"bruise\": \"NOUN\",\n\t\t\t\"unprocessed\": \"ADJ\",\n\t\t\t\"ext\": \"NOUN\",\n\t\t\t\"competitive\": \"ADJ\",\n\t\t\t\"runs\": \"VERB\",\n\t\t\t\"kuei\": \"PROPN\",\n\t\t\t\"94\": \"NUM\",\n\t\t\t\"a-\": \"INTJ\",\n\t\t\t\"aeroplane\": \"NOUN\",\n\t\t\t\"7th\": \"ADJ\",\n\t\t\t\"kaoshikii\": \"NOUN\",\n\t\t\t\"stoner\": \"NOUN\",\n\t\t\t\"dominique\": \"PROPN\",\n\t\t\t\"wonder\": \"VERB\",\n\t\t\t\"freaked\": \"VERB\",\n\t\t\t\"goofy\": \"ADJ\",\n\t\t\t\"dials\": \"NOUN\",\n\t\t\t\"gasped\": \"VERB\",\n\t\t\t\"anthrax\": \"NOUN\",\n\t\t\t\"ballot\": \"NOUN\",\n\t\t\t\"thur.\": \"PROPN\",\n\t\t\t\"uncapped\": \"ADJ\",\n\t\t\t\"genetics\": \"NOUN\",\n\t\t\t\"04:06:52\": \"NUM\",\n\t\t\t\"aiming\": \"VERB\",\n\t\t\t\"aceh\": \"PROPN\",\n\t\t\t\"picnics\": \"NOUN\",\n\t\t\t\"began\": \"VERB\",\n\t\t\t\"shawntas\": \"PROPN\",\n\t\t\t\"roads\": \"NOUN\",\n\t\t\t\"1920\": \"NUM\",\n\t\t\t\"mandatory\": \"ADJ\",\n\t\t\t\"devote\": \"VERB\",\n\t\t\t\"dulaym\": \"PROPN\",\n\t\t\t\"resource\": \"NOUN\",\n\t\t\t\"winning\": \"VERB\",\n\t\t\t\"charger\": \"VERB\",\n\t\t\t\"tomipilates\": \"PROPN\",\n\t\t\t\"mlle.\": \"PROPN\",\n\t\t\t\"fugitives\": \"NOUN\",\n\t\t\t\"opponent\": \"NOUN\",\n\t\t\t\"worship\": \"NOUN\",\n\t\t\t\"mercenaries\": \"NOUN\",\n\t\t\t\"silent\": \"ADJ\",\n\t\t\t\"afghanistan\": \"PROPN\",\n\t\t\t\"glowstick\": \"NOUN\",\n\t\t\t\"no-46\": \"NUM\",\n\t\t\t\"motherland\": \"NOUN\",\n\t\t\t\"glandular\": \"ADJ\",\n\t\t\t\"speadsheet\": \"NOUN\",\n\t\t\t\"tibco\": \"NOUN\",\n\t\t\t\"underneath\": \"ADV\",\n\t\t\t\"blinked\": \"VERB\",\n\t\t\t\"eavesdrop\": \"VERB\",\n\t\t\t\"deaths\": \"NOUN\",\n\t\t\t\"watergate\": \"PROPN\",\n\t\t\t\"thrace\": \"PROPN\",\n\t\t\t\"flat\": \"ADJ\",\n\t\t\t\"=\": \"SYM\",\n\t\t\t\"admiring\": \"VERB\",\n\t\t\t\"rachels\": \"PROPN\",\n\t\t\t\"66\": \"NUM\",\n\t\t\t\"sub-categories\": \"NOUN\",\n\t\t\t\"lurid\": \"ADJ\",\n\t\t\t\"posited\": \"VERB\",\n\t\t\t\"ideologue\": \"NOUN\",\n\t\t\t\"rim\": \"NOUN\",\n\t\t\t\"realistic\": \"ADJ\",\n\t\t\t\"mak\": \"PROPN\",\n\t\t\t\"iguazu\": \"PROPN\",\n\t\t\t\"anastasia\": \"PROPN\",\n\t\t\t\"bombarding\": \"VERB\",\n\t\t\t\"burning\": \"VERB\",\n\t\t\t\"truth\": \"NOUN\",\n\t\t\t\"hostel\": \"NOUN\",\n\t\t\t\"zouk\": \"NOUN\",\n\t\t\t\"ingram\": \"PROPN\",\n\t\t\t\"glob\": \"NOUN\",\n\t\t\t\"'72\": \"NUM\",\n\t\t\t\"limb\": \"NOUN\",\n\t\t\t\"tgif\": \"PROPN\",\n\t\t\t\"snug\": \"ADJ\",\n\t\t\t\"infected\": \"VERB\",\n\t\t\t\"detractors\": \"NOUN\",\n\t\t\t\"skill\": \"NOUN\",\n\t\t\t\"silk\": \"NOUN\",\n\t\t\t\"feared\": \"VERB\",\n\t\t\t\"pens\": \"NOUN\",\n\t\t\t\"lesson\": \"NOUN\",\n\t\t\t\"cavern\": \"PROPN\",\n\t\t\t\"chain\": \"NOUN\",\n\t\t\t\"gazed\": \"VERB\",\n\t\t\t\"hermitage\": \"PROPN\",\n\t\t\t\"exmearden\": \"PROPN\",\n\t\t\t\"excuse\": \"NOUN\",\n\t\t\t\"components\": \"NOUN\",\n\t\t\t\"canvas\": \"NOUN\",\n\t\t\t\"tear\": \"VERB\",\n\t\t\t\"coats\": \"NOUN\",\n\t\t\t\"mtle\": \"NOUN\",\n\t\t\t\"risotto\": \"NOUN\",\n\t\t\t\"heady\": \"ADJ\",\n\t\t\t\"medication\": \"NOUN\",\n\t\t\t\"equalising\": \"VERB\",\n\t\t\t\"overcome\": \"VERB\",\n\t\t\t\"acrimony\": \"NOUN\",\n\t\t\t\"shrii\": \"PROPN\",\n\t\t\t\"760,000\": \"NUM\",\n\t\t\t\"shucks\": \"INTJ\",\n\t\t\t\"acupuncturist\": \"NOUN\",\n\t\t\t\"greeter\": \"NOUN\",\n\t\t\t\"layman\": \"NOUN\",\n\t\t\t\"smuggling\": \"NOUN\",\n\t\t\t\"ferte\": \"PROPN\",\n\t\t\t\"ancestors\": \"NOUN\",\n\t\t\t\"lookout\": \"NOUN\",\n\t\t\t\"meditating\": \"VERB\",\n\t\t\t\"promised\": \"VERB\",\n\t\t\t\"incidentally\": \"ADV\",\n\t\t\t\"dod\": \"PROPN\",\n\t\t\t\"discomfiture\": \"NOUN\",\n\t\t\t\"hello\": \"INTJ\",\n\t\t\t\"lieutenant\": \"NOUN\",\n\t\t\t\"x3-9890\": \"NOUN\",\n\t\t\t\"03:51\": \"NUM\",\n\t\t\t\"thereafter\": \"ADV\",\n\t\t\t\"provoking\": \"ADJ\",\n\t\t\t\"commercialize\": \"VERB\",\n\t\t\t\"spy\": \"NOUN\",\n\t\t\t\"detrick\": \"PROPN\",\n\t\t\t\"repercussions\": \"NOUN\",\n\t\t\t\"tibia\": \"NOUN\",\n\t\t\t\"araujo\": \"PROPN\",\n\t\t\t\"hz\": \"NOUN\",\n\t\t\t\"process's\": \"NOUN\",\n\t\t\t\"http://www.ontario.ca/en/information_bundle/birthcertificates/119274.html\": \"PROPN\",\n\t\t\t\"ipn\": \"PROPN\",\n\t\t\t\"curiosity\": \"NOUN\",\n\t\t\t\"cutting\": \"VERB\",\n\t\t\t\"character\": \"NOUN\",\n\t\t\t\"philippine\": \"ADJ\",\n\t\t\t\"mate\": \"VERB\",\n\t\t\t\"amalgamation\": \"NOUN\",\n\t\t\t\"roam\": \"VERB\",\n\t\t\t\"staircase\": \"NOUN\",\n\t\t\t\"unmistakable\": \"ADJ\",\n\t\t\t\"discarded\": \"ADJ\",\n\t\t\t\"placate\": \"VERB\",\n\t\t\t\"report\": \"NOUN\",\n\t\t\t\"culture\": \"NOUN\",\n\t\t\t\"yamwhatiyam\": \"PROPN\",\n\t\t\t\"biogeochemistry\": \"NOUN\",\n\t\t\t\"fat\": \"ADJ\",\n\t\t\t\"futurity\": \"NOUN\",\n\t\t\t\"despondently\": \"ADV\",\n\t\t\t\"cheapest\": \"ADJ\",\n\t\t\t\"disgruntled\": \"ADJ\",\n\t\t\t\"eerie\": \"ADJ\",\n\t\t\t\"deleting\": \"VERB\",\n\t\t\t\"temperament\": \"NOUN\",\n\t\t\t\"darren\": \"PROPN\",\n\t\t\t\"rolled\": \"VERB\",\n\t\t\t\"yucatan\": \"PROPN\",\n\t\t\t\"gifts\": \"NOUN\",\n\t\t\t\"generalized\": \"ADJ\",\n\t\t\t\"shanks\": \"NOUN\",\n\t\t\t\"shivered\": \"VERB\",\n\t\t\t\"connectedness\": \"NOUN\",\n\t\t\t\"invented\": \"VERB\",\n\t\t\t\"nabbed\": \"VERB\",\n\t\t\t\"boisterous\": \"ADJ\",\n\t\t\t\"removal\": \"NOUN\",\n\t\t\t\"stamp\": \"NOUN\",\n\t\t\t\"productivity\": \"NOUN\",\n\t\t\t\"reps.\": \"NOUN\",\n\t\t\t\"extinct\": \"ADJ\",\n\t\t\t\"acrid\": \"ADJ\",\n\t\t\t\"calculating\": \"VERB\",\n\t\t\t\"expertly\": \"ADV\",\n\t\t\t\"relied\": \"VERB\",\n\t\t\t\"ulysses\": \"PROPN\",\n\t\t\t\"h-0045/99\": \"NUM\",\n\t\t\t\"centilli\": \"PROPN\",\n\t\t\t\"windscreen\": \"NOUN\",\n\t\t\t\"topic\": \"NOUN\",\n\t\t\t\"eisenhower\": \"PROPN\",\n\t\t\t\"yellow\": \"ADJ\",\n\t\t\t\"deceit\": \"NOUN\",\n\t\t\t\"cretins\": \"NOUN\",\n\t\t\t\"legitimate\": \"ADJ\",\n\t\t\t\"03/28/2001\": \"NUM\",\n\t\t\t\"800.713.8600\": \"NUM\",\n\t\t\t\"assumptions\": \"NOUN\",\n\t\t\t\"macro\": \"ADJ\",\n\t\t\t\"carters\": \"NOUN\",\n\t\t\t\"=(\": \"SYM\",\n\t\t\t\"footage\": \"NOUN\",\n\t\t\t\"59\": \"NUM\",\n\t\t\t\"aperture\": \"NOUN\",\n\t\t\t\"dismal\": \"ADJ\",\n\t\t\t\"hydrodynamica\": \"PROPN\",\n\t\t\t\"prc\": \"NOUN\",\n\t\t\t\"snaking\": \"VERB\",\n\t\t\t\"gentel\": \"ADJ\",\n\t\t\t\"jumbled\": \"VERB\",\n\t\t\t\"realize\": \"VERB\",\n\t\t\t\"mortification\": \"NOUN\",\n\t\t\t\"lagged\": \"VERB\",\n\t\t\t\"yassin\": \"PROPN\",\n\t\t\t\"scottsdale\": \"PROPN\",\n\t\t\t\"discounted\": \"VERB\",\n\t\t\t\"onomatopoeia\": \"NOUN\",\n\t\t\t\"30.00\": \"NUM\",\n\t\t\t\"exemptions\": \"NOUN\",\n\t\t\t\"advanced\": \"ADJ\",\n\t\t\t\"springer\": \"PROPN\",\n\t\t\t\"ie\": \"PROPN\",\n\t\t\t\"k/psu\": \"NOUN\",\n\t\t\t\"queenly\": \"ADJ\",\n\t\t\t\"diversion\": \"NOUN\",\n\t\t\t\"uhhh\": \"INTJ\",\n\t\t\t\"diesel\": \"NOUN\",\n\t\t\t\"4.99\": \"NUM\",\n\t\t\t\"beasts\": \"NOUN\",\n\t\t\t\"wa-\": \"INTJ\",\n\t\t\t\"riiight\": \"INTJ\",\n\t\t\t\"morality\": \"NOUN\",\n\t\t\t\"advice\": \"NOUN\",\n\t\t\t\"trafalgar\": \"PROPN\",\n\t\t\t\"syrupy\": \"ADJ\",\n\t\t\t\"constituent\": \"NOUN\",\n\t\t\t\"skater\": \"NOUN\",\n\t\t\t\"permitted\": \"VERB\",\n\t\t\t\"microphone\": \"NOUN\",\n\t\t\t\"gushing\": \"VERB\",\n\t\t\t\"complaints\": \"NOUN\",\n\t\t\t\"used\": \"VERB\",\n\t\t\t\"greek\": \"ADJ\",\n\t\t\t\"consulate\": \"PROPN\",\n\t\t\t\"measly\": \"ADJ\",\n\t\t\t\"kosas\": \"NOUN\",\n\t\t\t\"midtown\": \"PROPN\",\n\t\t\t\"chudnov\": \"PROPN\",\n\t\t\t\"340\": \"NUM\",\n\t\t\t\"co-operate\": \"VERB\",\n\t\t\t\"simmer\": \"VERB\",\n\t\t\t\"che\": \"PROPN\",\n\t\t\t\"shooting\": \"VERB\",\n\t\t\t\"napier\": \"PROPN\",\n\t\t\t\"enclosing\": \"VERB\",\n\t\t\t\"modest\": \"ADJ\",\n\t\t\t\"pos\": \"NOUN\",\n\t\t\t\"marginal\": \"ADJ\",\n\t\t\t\"co-parenting\": \"VERB\",\n\t\t\t\"eei\": \"NOUN\",\n\t\t\t\"ink\": \"NOUN\",\n\t\t\t\"levi`s\": \"PROPN\",\n\t\t\t\"knots\": \"NOUN\",\n\t\t\t\"straightening\": \"VERB\",\n\t\t\t\"screeching\": \"VERB\",\n\t\t\t\"boards\": \"NOUN\",\n\t\t\t\"forged\": \"VERB\",\n\t\t\t\"repubblica\": \"PROPN\",\n\t\t\t\"proposing\": \"VERB\",\n\t\t\t\"pace\": \"NOUN\",\n\t\t\t\"incessant\": \"ADJ\",\n\t\t\t\"gliders\": \"PROPN\",\n\t\t\t\"fees\": \"NOUN\",\n\t\t\t\"mɔʁo\": \"PROPN\",\n\t\t\t\"da\": \"PROPN\",\n\t\t\t\"smelly\": \"ADJ\",\n\t\t\t\"rippled\": \"VERB\",\n\t\t\t\"figuring\": \"VERB\",\n\t\t\t\"yam\": \"PROPN\",\n\t\t\t\"sake\": \"NOUN\",\n\t\t\t\"duality\": \"NOUN\",\n\t\t\t\"kinematics\": \"NOUN\",\n\t\t\t\"ronn\": \"PROPN\",\n\t\t\t\"evacuees\": \"NOUN\",\n\t\t\t\"120,000\": \"NUM\",\n\t\t\t\"dungarees\": \"NOUN\",\n\t\t\t\"logan\": \"PROPN\",\n\t\t\t\"sumatra\": \"PROPN\",\n\t\t\t\"network\": \"NOUN\",\n\t\t\t\"dictionary\": \"NOUN\",\n\t\t\t\"merging\": \"VERB\",\n\t\t\t\"jose\": \"PROPN\",\n\t\t\t\"logistical\": \"ADJ\",\n\t\t\t\"digimon\": \"PROPN\",\n\t\t\t\"phosphorous\": \"ADJ\",\n\t\t\t\"lara\": \"PROPN\",\n\t\t\t\"philology\": \"PROPN\",\n\t\t\t\"chris.germany@enron.com\": \"PROPN\",\n\t\t\t\"blurring\": \"VERB\",\n\t\t\t\"corrected\": \"VERB\",\n\t\t\t\"thrive\": \"VERB\",\n\t\t\t\"366\": \"NUM\",\n\t\t\t\"ample\": \"ADJ\",\n\t\t\t\"elections\": \"NOUN\",\n\t\t\t\"missions\": \"NOUN\",\n\t\t\t\"affirmed\": \"VERB\",\n\t\t\t\"01:35\": \"NUM\",\n\t\t\t\"cedar\": \"PROPN\",\n\t\t\t\"bohlin\": \"PROPN\",\n\t\t\t\"weasley\": \"PROPN\",\n\t\t\t\"7/16\": \"NUM\",\n\t\t\t\"conveyed\": \"VERB\",\n\t\t\t\"pursuant\": \"ADV\",\n\t\t\t\"08/03/2000\": \"NUM\",\n\t\t\t\"raisers\": \"NOUN\",\n\t\t\t\"slipped\": \"VERB\",\n\t\t\t\"freshly\": \"ADV\",\n\t\t\t\"invention\": \"NOUN\",\n\t\t\t\"linking\": \"VERB\",\n\t\t\t\"broadway\": \"PROPN\",\n\t\t\t\"http://herp-info.webs.com/beardeddragon.htm\": \"PROPN\",\n\t\t\t\"specialist\": \"NOUN\",\n\t\t\t\"farther\": \"ADV\",\n\t\t\t\"shout\": \"VERB\",\n\t\t\t\"furnished\": \"VERB\",\n\t\t\t\"1570\": \"NUM\",\n\t\t\t\"fraying\": \"VERB\",\n\t\t\t\"motorcycle\": \"NOUN\",\n\t\t\t\"guatemala\": \"PROPN\",\n\t\t\t\"vinyl\": \"ADJ\",\n\t\t\t\"fixing\": \"VERB\",\n\t\t\t\"frisbee\": \"NOUN\",\n\t\t\t\"unstained\": \"ADJ\",\n\t\t\t\"confidence-building\": \"NOUN\",\n\t\t\t\"lessons\": \"NOUN\",\n\t\t\t\"1984\": \"NUM\",\n\t\t\t\"injuries\": \"NOUN\",\n\t\t\t\"stickhandle\": \"VERB\",\n\t\t\t\"re-read\": \"VERB\",\n\t\t\t\"enabling\": \"VERB\",\n\t\t\t\"tiger\": \"PROPN\",\n\t\t\t\"unravelling\": \"VERB\",\n\t\t\t\"strangled\": \"VERB\",\n\t\t\t\"absenting\": \"VERB\",\n\t\t\t\"jugular\": \"NOUN\",\n\t\t\t\"continents\": \"NOUN\",\n\t\t\t\"1777\": \"NUM\",\n\t\t\t\"bean\": \"NOUN\",\n\t\t\t\"rico\": \"PROPN\",\n\t\t\t\"couter-cultural\": \"ADJ\",\n\t\t\t\"volgograd\": \"PROPN\",\n\t\t\t\"particlular\": \"ADJ\",\n\t\t\t\"anyone\": \"PRON\",\n\t\t\t\"oer\": \"PROPN\",\n\t\t\t\"felt\": \"VERB\",\n\t\t\t\"relativity\": \"NOUN\",\n\t\t\t\"sodium\": \"NOUN\",\n\t\t\t\"oppositon\": \"NOUN\",\n\t\t\t\"proliferation\": \"NOUN\",\n\t\t\t\"skydivers\": \"NOUN\",\n\t\t\t\"egg\": \"NOUN\",\n\t\t\t\"encompasses\": \"VERB\",\n\t\t\t\"shreveport\": \"PROPN\",\n\t\t\t\"8th\": \"NOUN\",\n\t\t\t\"modified\": \"VERB\",\n\t\t\t\"feb\": \"PROPN\",\n\t\t\t\"commissions\": \"NOUN\",\n\t\t\t\"progressive\": \"ADJ\",\n\t\t\t\"info@travelheels.dk\": \"PROPN\",\n\t\t\t\"yikes\": \"INTJ\",\n\t\t\t\"manure\": \"NOUN\",\n\t\t\t\"excite\": \"VERB\",\n\t\t\t\"policy\": \"NOUN\",\n\t\t\t\"gel-\": \"INTJ\",\n\t\t\t\"haphazard\": \"ADJ\",\n\t\t\t\"agent\": \"NOUN\",\n\t\t\t\"continuity\": \"NOUN\",\n\t\t\t\"solely\": \"ADV\",\n\t\t\t\"fears\": \"NOUN\",\n\t\t\t\"øhavets\": \"PROPN\",\n\t\t\t\"hissing\": \"ADJ\",\n\t\t\t\"observers\": \"NOUN\",\n\t\t\t\"dec.\": \"PROPN\",\n\t\t\t\"appearances\": \"NOUN\",\n\t\t\t\"botany\": \"NOUN\",\n\t\t\t\"chris\": \"PROPN\",\n\t\t\t\"manipulation\": \"NOUN\",\n\t\t\t\"calgary\": \"PROPN\",\n\t\t\t\"homo\": \"NOUN\",\n\t\t\t\"magnesium\": \"NOUN\",\n\t\t\t\"authoritative\": \"ADJ\",\n\t\t\t\"dignitaries\": \"NOUN\",\n\t\t\t\"disbanded\": \"VERB\",\n\t\t\t\"ebs\": \"PROPN\",\n\t\t\t\"livelihoods\": \"NOUN\",\n\t\t\t\"cheeks\": \"NOUN\",\n\t\t\t\"carnations\": \"NOUN\",\n\t\t\t\"repetition\": \"NOUN\",\n\t\t\t\"www.standfor.co.nz\": \"PROPN\",\n\t\t\t\"hatzidakis\": \"PROPN\",\n\t\t\t\"loudly\": \"ADV\",\n\t\t\t\"displays\": \"VERB\",\n\t\t\t\"karl\": \"PROPN\",\n\t\t\t\"bush\": \"PROPN\",\n\t\t\t\"shine\": \"NOUN\",\n\t\t\t\"search\": \"NOUN\",\n\t\t\t\"retiree\": \"NOUN\",\n\t\t\t\"rdbms\": \"PROPN\",\n\t\t\t\"display\": \"NOUN\",\n\t\t\t\"l2\": \"NOUN\",\n\t\t\t\"psychologist\": \"NOUN\",\n\t\t\t\"blueprint\": \"NOUN\",\n\t\t\t\"dominance\": \"NOUN\",\n\t\t\t\"attributed\": \"VERB\",\n\t\t\t\"greeks\": \"NOUN\",\n\t\t\t\"curbing\": \"VERB\",\n\t\t\t\"ichiyō\": \"PROPN\",\n\t\t\t\"convenient\": \"ADJ\",\n\t\t\t\"shit\": \"INTJ\",\n\t\t\t\"mohaqeq\": \"PROPN\",\n\t\t\t\"morne\": \"PROPN\",\n\t\t\t\"faded\": \"VERB\",\n\t\t\t\"tatters\": \"NOUN\",\n\t\t\t\"shirt\": \"NOUN\",\n\t\t\t\"countertop\": \"NOUN\",\n\t\t\t\"failure\": \"NOUN\",\n\t\t\t\"recurring\": \"VERB\",\n\t\t\t\"hugo\": \"PROPN\",\n\t\t\t\"definitely\": \"ADV\",\n\t\t\t\"experience\": \"NOUN\",\n\t\t\t\"thaks\": \"NOUN\",\n\t\t\t\"commanders\": \"NOUN\",\n\t\t\t\"meticulous\": \"ADJ\",\n\t\t\t\"gospel\": \"PROPN\",\n\t\t\t\"beau\": \"PROPN\",\n\t\t\t\"answetred\": \"VERB\",\n\t\t\t\"top\": \"NOUN\",\n\t\t\t\"happen\": \"VERB\",\n\t\t\t\"childish\": \"ADJ\",\n\t\t\t\"recklessness\": \"NOUN\",\n\t\t\t\"connected\": \"VERB\",\n\t\t\t\"ro-\": \"INTJ\",\n\t\t\t\"sec\": \"PROPN\",\n\t\t\t\"poring\": \"VERB\",\n\t\t\t\"trento\": \"PROPN\",\n\t\t\t\"droughts\": \"NOUN\",\n\t\t\t\"changes\": \"NOUN\",\n\t\t\t\"fact\": \"NOUN\",\n\t\t\t\"preamble\": \"NOUN\",\n\t\t\t\"ene\": \"PROPN\",\n\t\t\t\"duckworth\": \"PROPN\",\n\t\t\t\"photojournalism\": \"NOUN\",\n\t\t\t\"johann\": \"PROPN\",\n\t\t\t\"rainbow\": \"NOUN\",\n\t\t\t\"strings\": \"NOUN\",\n\t\t\t\"asparagus\": \"NOUN\",\n\t\t\t\"exponentially\": \"ADV\",\n\t\t\t\"maintains\": \"VERB\",\n\t\t\t\"wilt\": \"AUX\",\n\t\t\t\"herodian\": \"ADJ\",\n\t\t\t\"limit\": \"VERB\",\n\t\t\t\"participated\": \"VERB\",\n\t\t\t\"reason\": \"NOUN\",\n\t\t\t\"mediated\": \"VERB\",\n\t\t\t\"hoops\": \"NOUN\",\n\t\t\t\"healing\": \"VERB\",\n\t\t\t\"resolved\": \"VERB\",\n\t\t\t\"eunice\": \"PROPN\",\n\t\t\t\"pressure\": \"NOUN\",\n\t\t\t\"baltimore\": \"PROPN\",\n\t\t\t\"dart\": \"VERB\",\n\t\t\t\"idaho\": \"PROPN\",\n\t\t\t\"d’alesandro\": \"PROPN\",\n\t\t\t\"ancestry\": \"NOUN\",\n\t\t\t\"dandy\": \"NOUN\",\n\t\t\t\"shawna\": \"PROPN\",\n\t\t\t\"rounds\": \"NOUN\",\n\t\t\t\"unprofessional\": \"ADJ\",\n\t\t\t\"reserved\": \"ADJ\",\n\t\t\t\"reminder\": \"NOUN\",\n\t\t\t\"thirst\": \"NOUN\",\n\t\t\t\"shift\": \"NOUN\",\n\t\t\t\"influenced\": \"VERB\",\n\t\t\t\"sailors\": \"NOUN\",\n\t\t\t\"eats\": \"VERB\",\n\t\t\t\"tyrannius\": \"PROPN\",\n\t\t\t\"vacant\": \"ADJ\",\n\t\t\t\"olsens\": \"PROPN\",\n\t\t\t\"1945\": \"NUM\",\n\t\t\t\"conferred\": \"VERB\",\n\t\t\t\"prominent\": \"ADJ\",\n\t\t\t\"socials\": \"NOUN\",\n\t\t\t\"fee\": \"NOUN\",\n\t\t\t\"rotation\": \"NOUN\",\n\t\t\t\"distemper\": \"NOUN\",\n\t\t\t\"barred\": \"VERB\",\n\t\t\t\"inexhaustible\": \"ADJ\",\n\t\t\t\"joby\": \"PROPN\",\n\t\t\t\"met\": \"VERB\",\n\t\t\t\"alt.animals.lion\": \"NOUN\",\n\t\t\t\"fe\": \"PROPN\",\n\t\t\t\"woollens\": \"NOUN\",\n\t\t\t\"concentrated\": \"VERB\",\n\t\t\t\"vertically\": \"ADV\",\n\t\t\t\"athwart\": \"ADV\",\n\t\t\t\"removed\": \"VERB\",\n\t\t\t\"imagine\": \"VERB\",\n\t\t\t\"06:30\": \"NUM\",\n\t\t\t\"proceeded\": \"VERB\",\n\t\t\t\"sevil\": \"PROPN\",\n\t\t\t\"gullibility\": \"NOUN\",\n\t\t\t\"rescinded\": \"VERB\",\n\t\t\t\"smoker\": \"NOUN\",\n\t\t\t\"eighteen\": \"NUM\",\n\t\t\t\"swigs\": \"NOUN\",\n\t\t\t\"4:00\": \"NUM\",\n\t\t\t\"cancellations\": \"NOUN\",\n\t\t\t\"recreate\": \"VERB\",\n\t\t\t\"illustrious\": \"ADJ\",\n\t\t\t\"answer\": \"NOUN\",\n\t\t\t\"rays\": \"NOUN\",\n\t\t\t\"12.48\": \"NUM\",\n\t\t\t\"f\": \"PROPN\",\n\t\t\t\"notification\": \"NOUN\",\n\t\t\t\"www\": \"NOUN\",\n\t\t\t\"hassen\": \"PROPN\",\n\t\t\t\"waiing\": \"VERB\",\n\t\t\t\"panama\": \"PROPN\",\n\t\t\t\"high-carrying\": \"VERB\",\n\t\t\t\"coolness\": \"NOUN\",\n\t\t\t\"eden\": \"PROPN\",\n\t\t\t\"spectrophotometer\": \"NOUN\",\n\t\t\t\"posters\": \"NOUN\",\n\t\t\t\"hourly\": \"ADJ\",\n\t\t\t\"saintes\": \"PROPN\",\n\t\t\t\"gauzy\": \"ADJ\",\n\t\t\t\"ins\": \"PROPN\",\n\t\t\t\"wolves\": \"NOUN\",\n\t\t\t\"asymmetric\": \"ADJ\",\n\t\t\t\"toned\": \"VERB\",\n\t\t\t\"survival\": \"NOUN\",\n\t\t\t\"sullen\": \"ADJ\",\n\t\t\t\"shorty\": \"PROPN\",\n\t\t\t\"supplied\": \"VERB\",\n\t\t\t\"blackness\": \"NOUN\",\n\t\t\t\"periodizing\": \"NOUN\",\n\t\t\t\"perils\": \"NOUN\",\n\t\t\t\"kenny\": \"PROPN\",\n\t\t\t\"parochial\": \"ADJ\",\n\t\t\t\"gmat\": \"PROPN\",\n\t\t\t\"approving\": \"VERB\",\n\t\t\t\"arbitration\": \"PROPN\",\n\t\t\t\"doc\": \"NOUN\",\n\t\t\t\"nessasary\": \"ADJ\",\n\t\t\t\"debuted\": \"VERB\",\n\t\t\t\"malle\": \"PROPN\",\n\t\t\t\"3801a\": \"NOUN\",\n\t\t\t\"wore\": \"VERB\",\n\t\t\t\"fain\": \"ADV\",\n\t\t\t\"khymberly\": \"PROPN\",\n\t\t\t\"horton\": \"PROPN\",\n\t\t\t\"restocked\": \"VERB\",\n\t\t\t\"douglass\": \"PROPN\",\n\t\t\t\"morph\": \"VERB\",\n\t\t\t\"leverage\": \"NOUN\",\n\t\t\t\"gi\": \"NOUN\",\n\t\t\t\"membrane\": \"NOUN\",\n\t\t\t\"started\": \"VERB\",\n\t\t\t\"been\": \"AUX\",\n\t\t\t\"metastasis\": \"NOUN\",\n\t\t\t\"comments\": \"NOUN\",\n\t\t\t\"indulgences\": \"NOUN\",\n\t\t\t\"abnormality\": \"NOUN\",\n\t\t\t\"hagghier\": \"PROPN\",\n\t\t\t\"ignorance\": \"NOUN\",\n\t\t\t\"orbit\": \"NOUN\",\n\t\t\t\"cuts\": \"NOUN\",\n\t\t\t\"contract\": \"NOUN\",\n\t\t\t\"house-elves\": \"NOUN\",\n\t\t\t\"thankfully\": \"ADV\",\n\t\t\t\"ereader\": \"NOUN\",\n\t\t\t\"lazy\": \"ADJ\",\n\t\t\t\"860\": \"NUM\",\n\t\t\t\"mcauliffe\": \"PROPN\",\n\t\t\t\"admiration\": \"NOUN\",\n\t\t\t\"inaugural\": \"ADJ\",\n\t\t\t\"addressed\": \"VERB\",\n\t\t\t\":-)\": \"SYM\",\n\t\t\t\"spidey\": \"PROPN\",\n\t\t\t\"cleanest\": \"ADJ\",\n\t\t\t\"6:30\": \"NUM\",\n\t\t\t\"amid\": \"ADP\",\n\t\t\t\"gale\": \"NOUN\",\n\t\t\t\"cross-functional\": \"ADJ\",\n\t\t\t\"delivers\": \"VERB\",\n\t\t\t\"whoo-hoo\": \"INTJ\",\n\t\t\t\"crispy\": \"ADJ\",\n\t\t\t\"instep\": \"PROPN\",\n\t\t\t\"alia\": \"PROPN\",\n\t\t\t\"09/17/99\": \"NUM\",\n\t\t\t\"713-853-3098\": \"NUM\",\n\t\t\t\"alla\": \"NOUN\",\n\t\t\t\"make-shift\": \"NOUN\",\n\t\t\t\"hoog\": \"PROPN\",\n\t\t\t\"vicki\": \"PROPN\",\n\t\t\t\"bowes\": \"PROPN\",\n\t\t\t\"+4550981306\": \"NUM\",\n\t\t\t\"w/o\": \"ADP\",\n\t\t\t\"horseshoe\": \"NOUN\",\n\t\t\t\"cows\": \"NOUN\",\n\t\t\t\"twice\": \"ADV\",\n\t\t\t\"wars\": \"PROPN\",\n\t\t\t\"o-\": \"INTJ\",\n\t\t\t\"llms\": \"NOUN\",\n\t\t\t\"stayed\": \"VERB\",\n\t\t\t\"plume\": \"NOUN\",\n\t\t\t\"currents\": \"NOUN\",\n\t\t\t\"prospect\": \"NOUN\",\n\t\t\t\"cloud9\": \"PROPN\",\n\t\t\t\"waiter\": \"NOUN\",\n\t\t\t\"06:16\": \"NUM\",\n\t\t\t\"alamo\": \"PROPN\",\n\t\t\t\"collects\": \"VERB\",\n\t\t\t\"10.0\": \"NUM\",\n\t\t\t\"125\": \"NUM\",\n\t\t\t\"shetland\": \"PROPN\",\n\t\t\t\"ogden\": \"PROPN\",\n\t\t\t\"re-interviewed\": \"VERB\",\n\t\t\t\"fixed\": \"VERB\",\n\t\t\t\"litigation\": \"NOUN\",\n\t\t\t\"tosui\": \"PROPN\",\n\t\t\t\"semi\": \"ADV\",\n\t\t\t\"prudish\": \"ADJ\",\n\t\t\t\"aftermath\": \"NOUN\",\n\t\t\t\"suggested\": \"VERB\",\n\t\t\t\"discretion\": \"NOUN\",\n\t\t\t\"quimba\": \"PROPN\",\n\t\t\t\"watcher\": \"NOUN\",\n\t\t\t\"dealship\": \"NOUN\",\n\t\t\t\"neonatal\": \"ADJ\",\n\t\t\t\"vacationed\": \"VERB\",\n\t\t\t\"mice\": \"NOUN\",\n\t\t\t\"blade\": \"NOUN\",\n\t\t\t\"!!!!!!!!!!!!!!\": \"PUNCT\",\n\t\t\t\"podium\": \"NOUN\",\n\t\t\t\"bitch\": \"NOUN\",\n\t\t\t\"mistresses\": \"NOUN\",\n\t\t\t\"illuminated\": \"VERB\",\n\t\t\t\"stellenbosch\": \"PROPN\",\n\t\t\t\"landmine\": \"NOUN\",\n\t\t\t\"presidential\": \"ADJ\",\n\t\t\t\"remnants\": \"NOUN\",\n\t\t\t\"something\": \"PRON\",\n\t\t\t\"survey\": \"NOUN\",\n\t\t\t\"fei\": \"PROPN\",\n\t\t\t\"immobility\": \"NOUN\",\n\t\t\t\"i.=\": \"ADJ\",\n\t\t\t\"05:17\": \"NUM\",\n\t\t\t\"whereabouts\": \"NOUN\",\n\t\t\t\"parama\": \"NOUN\",\n\t\t\t\"3:29\": \"NUM\",\n\t\t\t\"hookless\": \"ADJ\",\n\t\t\t\"being\": \"AUX\",\n\t\t\t\"gened\": \"VERB\",\n\t\t\t\"saucey\": \"PROPN\",\n\t\t\t\"hurt\": \"VERB\",\n\t\t\t\"flipped\": \"VERB\",\n\t\t\t\"bludgers\": \"NOUN\",\n\t\t\t\"proliferated\": \"VERB\",\n\t\t\t\"marstal\": \"PROPN\",\n\t\t\t\"gratified\": \"ADJ\",\n\t\t\t\"chicken-processing\": \"ADJ\",\n\t\t\t\"weedy\": \"ADJ\",\n\t\t\t\"ypf\": \"PROPN\",\n\t\t\t\"harmony\": \"NOUN\",\n\t\t\t\"smaller\": \"ADJ\",\n\t\t\t\"46th\": \"ADJ\",\n\t\t\t\"gospels\": \"PROPN\",\n\t\t\t\"pocket\": \"NOUN\",\n\t\t\t\"1,922,000\": \"NUM\",\n\t\t\t\"valerie\": \"PROPN\",\n\t\t\t\"saleh\": \"PROPN\",\n\t\t\t\"journalists\": \"NOUN\",\n\t\t\t\"ranges\": \"NOUN\",\n\t\t\t\"remote\": \"ADJ\",\n\t\t\t\"pillowcases\": \"NOUN\",\n\t\t\t\"assemble\": \"VERB\",\n\t\t\t\"burnell\": \"PROPN\",\n\t\t\t\"demonstration\": \"NOUN\",\n\t\t\t\"dissatisfaction\": \"NOUN\",\n\t\t\t\"provincial\": \"ADJ\",\n\t\t\t\"reiteration\": \"NOUN\",\n\t\t\t\"shipyard\": \"NOUN\",\n\t\t\t\"billion\": \"NUM\",\n\t\t\t\"motel\": \"NOUN\",\n\t\t\t\"430\": \"NUM\",\n\t\t\t\"shrewdness\": \"NOUN\",\n\t\t\t\"hooking\": \"VERB\",\n\t\t\t\"barzanti\": \"PROPN\",\n\t\t\t\"legislative\": \"ADJ\",\n\t\t\t\"edmund\": \"PROPN\",\n\t\t\t\"argentine\": \"ADJ\",\n\t\t\t\"basel\": \"PROPN\",\n\t\t\t\"hooves\": \"NOUN\",\n\t\t\t\"out\": \"ADP\",\n\t\t\t\"ton\": \"NOUN\",\n\t\t\t\"stressful\": \"ADJ\",\n\t\t\t\"vaults\": \"NOUN\",\n\t\t\t\"lest\": \"SCONJ\",\n\t\t\t\"vaunted\": \"ADJ\",\n\t\t\t\"autofiltering\": \"VERB\",\n\t\t\t\"inspected\": \"VERB\",\n\t\t\t\"fit\": \"VERB\",\n\t\t\t\"stinging\": \"VERB\",\n\t\t\t\"zawahiri\": \"PROPN\",\n\t\t\t\"cheerfully\": \"ADV\",\n\t\t\t\"sump\": \"NOUN\",\n\t\t\t\"**\": \"PUNCT\",\n\t\t\t\"s’pose\": \"VERB\",\n\t\t\t\"taiwan\": \"PROPN\",\n\t\t\t\"simultaneously\": \"ADV\",\n\t\t\t\"frequency\": \"NOUN\",\n\t\t\t\"royale\": \"ADJ\",\n\t\t\t\"safari\": \"PROPN\",\n\t\t\t\"nacional\": \"PROPN\",\n\t\t\t\"insane\": \"ADJ\",\n\t\t\t\"thou-\": \"INTJ\",\n\t\t\t\"hight\": \"NOUN\",\n\t\t\t\"hvae\": \"AUX\",\n\t\t\t\"peninsula\": \"NOUN\",\n\t\t\t\"04:41\": \"NUM\",\n\t\t\t\"honolulu\": \"PROPN\",\n\t\t\t\"tolerance\": \"NOUN\",\n\t\t\t\"straightened\": \"VERB\",\n\t\t\t\"daschle\": \"PROPN\",\n\t\t\t\"marriages\": \"NOUN\",\n\t\t\t\"diagnostic\": \"ADJ\",\n\t\t\t\"worldview\": \"NOUN\",\n\t\t\t\"please\": \"INTJ\",\n\t\t\t\"simpler\": \"ADJ\",\n\t\t\t\"pervez\": \"PROPN\",\n\t\t\t\"but\": \"CCONJ\",\n\t\t\t\"olsen\": \"PROPN\",\n\t\t\t\"oddy\": \"PROPN\",\n\t\t\t\"understandable\": \"ADJ\",\n\t\t\t\"rabid\": \"ADJ\",\n\t\t\t\"incompetence\": \"NOUN\",\n\t\t\t\"mess-room\": \"NOUN\",\n\t\t\t\"hens\": \"NOUN\",\n\t\t\t\"jane\": \"PROPN\",\n\t\t\t\"former\": \"ADJ\",\n\t\t\t\"cere\": \"NOUN\",\n\t\t\t\"puttagenius\": \"PROPN\",\n\t\t\t\"brianp@aiglincoln.com\": \"PROPN\",\n\t\t\t\"pico\": \"PROPN\",\n\t\t\t\"good-naturedly\": \"ADV\",\n\t\t\t\"ph.\": \"NOUN\",\n\t\t\t\"northwest\": \"NOUN\",\n\t\t\t\"marriage\": \"NOUN\",\n\t\t\t\"cross-examination\": \"NOUN\",\n\t\t\t\"grotesque\": \"ADJ\",\n\t\t\t\"shortage\": \"NOUN\",\n\t\t\t\"brock\": \"PROPN\",\n\t\t\t\"intertwined\": \"ADJ\",\n\t\t\t\"wunderbar\": \"PROPN\",\n\t\t\t\"1/31\": \"NUM\",\n\t\t\t\"cynical\": \"ADJ\",\n\t\t\t\"fresh-faced\": \"ADJ\",\n\t\t\t\"develops\": \"VERB\",\n\t\t\t\"nationalism\": \"NOUN\",\n\t\t\t\"bunioned\": \"VERB\",\n\t\t\t\"spicy\": \"ADJ\",\n\t\t\t\"webber\": \"PROPN\",\n\t\t\t\"ets\": \"NOUN\",\n\t\t\t\"07/17/2000\": \"NUM\",\n\t\t\t\"deutsche\": \"PROPN\",\n\t\t\t\"roly\": \"PROPN\",\n\t\t\t\"egm\": \"PROPN\",\n\t\t\t\"19\": \"NUM\",\n\t\t\t\"cayuga\": \"PROPN\",\n\t\t\t\"u.s.a\": \"PROPN\",\n\t\t\t\"repairs\": \"NOUN\",\n\t\t\t\"1946\": \"NUM\",\n\t\t\t\"split\": \"VERB\",\n\t\t\t\"moments\": \"NOUN\",\n\t\t\t\"styling\": \"NOUN\",\n\t\t\t\"touts\": \"VERB\",\n\t\t\t\"rains\": \"PROPN\",\n\t\t\t\"industry\": \"NOUN\",\n\t\t\t\"circles\": \"NOUN\",\n\t\t\t\"frowned\": \"VERB\",\n\t\t\t\"mid-february\": \"PROPN\",\n\t\t\t\"vanguard\": \"PROPN\",\n\t\t\t\"neural\": \"ADJ\",\n\t\t\t\"materializes\": \"VERB\",\n\t\t\t\"strayed\": \"VERB\",\n\t\t\t\"others\": \"NOUN\",\n\t\t\t\"slung\": \"VERB\",\n\t\t\t\"superstores\": \"NOUN\",\n\t\t\t\"shoots\": \"NOUN\",\n\t\t\t\"hcc\": \"PROPN\",\n\t\t\t\"waist\": \"NOUN\",\n\t\t\t\"538\": \"NUM\",\n\t\t\t\"orientation\": \"NOUN\",\n\t\t\t\"words\": \"NOUN\",\n\t\t\t\"improv\": \"NOUN\",\n\t\t\t\"walking\": \"VERB\",\n\t\t\t\"hoeing\": \"NOUN\",\n\t\t\t\"twe-\": \"INTJ\",\n\t\t\t\"budgeted\": \"VERB\",\n\t\t\t\"stipulation\": \"NOUN\",\n\t\t\t\"ovr\": \"ADV\",\n\t\t\t\"wig\": \"NOUN\",\n\t\t\t\"disarming\": \"NOUN\",\n\t\t\t\"reopening\": \"NOUN\",\n\t\t\t\"exposing\": \"VERB\",\n\t\t\t\"sense\": \"NOUN\",\n\t\t\t\"empirically\": \"ADV\",\n\t\t\t\"instructions\": \"NOUN\",\n\t\t\t\"chewy\": \"ADJ\",\n\t\t\t\"decompose\": \"VERB\",\n\t\t\t\"interactions\": \"NOUN\",\n\t\t\t\"heineken\": \"PROPN\",\n\t\t\t\"insufficient\": \"ADJ\",\n\t\t\t\"pole\": \"NOUN\",\n\t\t\t\"ousting\": \"NOUN\",\n\t\t\t\"[...]\": \"PUNCT\",\n\t\t\t\"pounded\": \"VERB\",\n\t\t\t\"connoisseur\": \"NOUN\",\n\t\t\t\"courteous\": \"ADJ\",\n\t\t\t\"paralegal\": \"NOUN\",\n\t\t\t\"800-553-3119\": \"NUM\",\n\t\t\t\"co-starred\": \"VERB\",\n\t\t\t\"recalled\": \"VERB\",\n\t\t\t\"eatting\": \"VERB\",\n\t\t\t\"cleaners\": \"NOUN\",\n\t\t\t\"muffin\": \"NOUN\",\n\t\t\t\"slit\": \"VERB\",\n\t\t\t\"fled\": \"VERB\",\n\t\t\t\"dispute\": \"NOUN\",\n\t\t\t\"ours\": \"PRON\",\n\t\t\t\"rumor\": \"NOUN\",\n\t\t\t\"break\": \"NOUN\",\n\t\t\t\"papeluna\": \"PROPN\",\n\t\t\t\"smsu\": \"PROPN\",\n\t\t\t\"theoretically\": \"ADV\",\n\t\t\t\"applicable\": \"ADJ\",\n\t\t\t\"methodical\": \"ADJ\",\n\t\t\t\"21/03/2001\": \"NUM\",\n\t\t\t\"lamont\": \"PROPN\",\n\t\t\t\"untreated\": \"ADJ\",\n\t\t\t\"charmaz\": \"PROPN\",\n\t\t\t\"trinity\": \"NOUN\",\n\t\t\t\"certified\": \"ADJ\",\n\t\t\t\"noodling\": \"VERB\",\n\t\t\t\"overnight\": \"ADV\",\n\t\t\t\"hasht\": \"PROPN\",\n\t\t\t\"exposed\": \"VERB\",\n\t\t\t\"cared\": \"VERB\",\n\t\t\t\"purveyed\": \"VERB\",\n\t\t\t\"epilepsy\": \"NOUN\",\n\t\t\t\"plunge\": \"NOUN\",\n\t\t\t\"fists\": \"NOUN\",\n\t\t\t\"superheroes\": \"NOUN\",\n\t\t\t\"empowerment\": \"NOUN\",\n\t\t\t\"54th\": \"ADJ\",\n\t\t\t\"extra\": \"ADJ\",\n\t\t\t\"contradicts\": \"VERB\",\n\t\t\t\"7/26/08\": \"NUM\",\n\t\t\t\"wafer\": \"NOUN\",\n\t\t\t\"mediocre\": \"ADJ\",\n\t\t\t\"tubing\": \"NOUN\",\n\t\t\t\"mustapha\": \"PROPN\",\n\t\t\t\"gargling\": \"VERB\",\n\t\t\t\"further\": \"ADV\",\n\t\t\t\"concentration\": \"NOUN\",\n\t\t\t\"asserted\": \"VERB\",\n\t\t\t\"aspen\": \"NOUN\",\n\t\t\t\"trans-european\": \"ADJ\",\n\t\t\t\"stil\": \"ADV\",\n\t\t\t\"withdrawn\": \"VERB\",\n\t\t\t\"flowerbeds\": \"NOUN\",\n\t\t\t\"roomates\": \"NOUN\",\n\t\t\t\"ordeal\": \"NOUN\",\n\t\t\t\"fur\": \"NOUN\",\n\t\t\t\"harold\": \"PROPN\",\n\t\t\t\"imported\": \"VERB\",\n\t\t\t\"ks\": \"PROPN\",\n\t\t\t\"tsunami\": \"NOUN\",\n\t\t\t\"pennysaver\": \"PROPN\",\n\t\t\t\"unthinkable\": \"ADJ\",\n\t\t\t\"beside\": \"ADP\",\n\t\t\t\"non-hodgkin\": \"ADJ\",\n\t\t\t\"impacts\": \"NOUN\",\n\t\t\t\"zora\": \"PROPN\",\n\t\t\t\"candy\": \"NOUN\",\n\t\t\t\"spokesman\": \"NOUN\",\n\t\t\t\"made\": \"VERB\",\n\t\t\t\"devon\": \"PROPN\",\n\t\t\t\"offline\": \"ADV\",\n\t\t\t\"approximately\": \"ADV\",\n\t\t\t\"cappelletto\": \"PROPN\",\n\t\t\t\"morphology\": \"NOUN\",\n\t\t\t\"sutcliffe\": \"PROPN\",\n\t\t\t\"unproductive\": \"ADJ\",\n\t\t\t\"q\": \"PROPN\",\n\t\t\t\"mind\": \"NOUN\",\n\t\t\t\"establishment\": \"NOUN\",\n\t\t\t\"excused\": \"VERB\",\n\t\t\t\"implied\": \"VERB\",\n\t\t\t\"transport\": \"NOUN\",\n\t\t\t\"wrecking\": \"PROPN\",\n\t\t\t\"actresses\": \"NOUN\",\n\t\t\t\"quarter\": \"NOUN\",\n\t\t\t\"1.4\": \"NUM\",\n\t\t\t\"waters\": \"NOUN\",\n\t\t\t\"lynx\": \"PROPN\",\n\t\t\t\"synonymous\": \"ADJ\",\n\t\t\t\"eras\": \"NOUN\",\n\t\t\t\"caterers\": \"NOUN\",\n\t\t\t\"1971\": \"NUM\",\n\t\t\t\"gathered\": \"VERB\",\n\t\t\t\"exhaust\": \"NOUN\",\n\t\t\t\"mildew\": \"NOUN\",\n\t\t\t\"base\": \"NOUN\",\n\t\t\t\"gdp\": \"NOUN\",\n\t\t\t\"mimosas\": \"NOUN\",\n\t\t\t\"deserted\": \"VERB\",\n\t\t\t\"sa\": \"PROPN\",\n\t\t\t\"throes\": \"NOUN\",\n\t\t\t\"pad\": \"NOUN\",\n\t\t\t\"wow\": \"INTJ\",\n\t\t\t\"outwards\": \"ADV\",\n\t\t\t\"pinkies\": \"NOUN\",\n\t\t\t\"20:00\": \"NUM\",\n\t\t\t\"symbolizes\": \"VERB\",\n\t\t\t\"tundra\": \"NOUN\",\n\t\t\t\"eight\": \"NUM\",\n\t\t\t\"brigadier\": \"NOUN\",\n\t\t\t\"terre\": \"PROPN\",\n\t\t\t\"tax\": \"NOUN\",\n\t\t\t\"divert\": \"VERB\",\n\t\t\t\"cake-like\": \"ADJ\",\n\t\t\t\"apply\": \"VERB\",\n\t\t\t\"injected\": \"VERB\",\n\t\t\t\"roland\": \"PROPN\",\n\t\t\t\"illusions\": \"NOUN\",\n\t\t\t\"diaphanous\": \"ADJ\",\n\t\t\t\"strolling\": \"VERB\",\n\t\t\t\"vibrating\": \"VERB\",\n\t\t\t\"swear\": \"VERB\",\n\t\t\t\"hands\": \"NOUN\",\n\t\t\t\"nam\": \"NOUN\",\n\t\t\t\"carnival\": \"PROPN\",\n\t\t\t\"presses\": \"VERB\",\n\t\t\t\"decoration\": \"NOUN\",\n\t\t\t\"arnold\": \"PROPN\",\n\t\t\t\"fahim\": \"PROPN\",\n\t\t\t\"tenants\": \"NOUN\",\n\t\t\t\"installing\": \"VERB\",\n\t\t\t\"carrying\": \"VERB\",\n\t\t\t\"herrick\": \"PROPN\",\n\t\t\t\"brovej\": \"PROPN\",\n\t\t\t\"turn\": \"VERB\",\n\t\t\t\"lifeboat\": \"NOUN\",\n\t\t\t\"encountered\": \"VERB\",\n\t\t\t\"sneaked\": \"VERB\",\n\t\t\t\"twentieth\": \"ADJ\",\n\t\t\t\"movie\": \"NOUN\",\n\t\t\t\"emirate\": \"NOUN\",\n\t\t\t\"scoff\": \"VERB\",\n\t\t\t\"memoirs\": \"NOUN\",\n\t\t\t\"sandbox\": \"NOUN\",\n\t\t\t\"hunks\": \"NOUN\",\n\t\t\t\"1327\": \"NUM\",\n\t\t\t\"2.7\": \"NUM\",\n\t\t\t\"maturity\": \"NOUN\",\n\t\t\t\"1849\": \"NUM\",\n\t\t\t\"messed\": \"VERB\",\n\t\t\t\"arthur\": \"PROPN\",\n\t\t\t\"infamous\": \"ADJ\",\n\t\t\t\"triangular\": \"ADJ\",\n\t\t\t\"honro\": \"VERB\",\n\t\t\t\"successfully\": \"ADV\",\n\t\t\t\"iranians\": \"PROPN\",\n\t\t\t\"oxygen\": \"NOUN\",\n\t\t\t\"09:14\": \"NUM\",\n\t\t\t\"alice\": \"PROPN\",\n\t\t\t\"scold\": \"VERB\",\n\t\t\t\"ruiz\": \"PROPN\",\n\t\t\t\"education\": \"NOUN\",\n\t\t\t\"dealership\": \"NOUN\",\n\t\t\t\"dinging\": \"VERB\",\n\t\t\t\"fight\": \"VERB\",\n\t\t\t\"tells\": \"VERB\",\n\t\t\t\"morocco\": \"PROPN\",\n\t\t\t\"gazing\": \"VERB\",\n\t\t\t\"unwillingness\": \"NOUN\",\n\t\t\t\"writing\": \"VERB\",\n\t\t\t\"incensed\": \"VERB\",\n\t\t\t\"thinnest\": \"ADJ\",\n\t\t\t\"freeman\": \"PROPN\",\n\t\t\t\"lash\": \"NOUN\",\n\t\t\t\"202.637.4781\": \"NUM\",\n\t\t\t\"flicker\": \"NOUN\",\n\t\t\t\"11:45\": \"NUM\",\n\t\t\t\"delivered\": \"VERB\",\n\t\t\t\"trio\": \"PROPN\",\n\t\t\t\"otters\": \"PROPN\",\n\t\t\t\"philosopher\": \"NOUN\",\n\t\t\t\"filthy\": \"ADJ\",\n\t\t\t\"temecula\": \"PROPN\",\n\t\t\t\"hazara\": \"PROPN\",\n\t\t\t\"student\": \"NOUN\",\n\t\t\t\"contexts\": \"NOUN\",\n\t\t\t\"adherent\": \"NOUN\",\n\t\t\t\"wake\": \"VERB\",\n\t\t\t\"impressed\": \"ADJ\",\n\t\t\t\"obedience\": \"NOUN\",\n\t\t\t\"roughly\": \"ADV\",\n\t\t\t\"ornithology\": \"NOUN\",\n\t\t\t\"bypassing\": \"VERB\",\n\t\t\t\"volley\": \"NOUN\",\n\t\t\t\"censuses\": \"NOUN\",\n\t\t\t\"criteria\": \"NOUN\",\n\t\t\t\"emergency\": \"NOUN\",\n\t\t\t\"security\": \"NOUN\",\n\t\t\t\"recentchangescamp\": \"PROPN\",\n\t\t\t\"mopped\": \"VERB\",\n\t\t\t\"mysteries\": \"NOUN\",\n\t\t\t\"attractions\": \"NOUN\",\n\t\t\t\"mansour\": \"PROPN\",\n\t\t\t\"buttering\": \"VERB\",\n\t\t\t\"gyanendra\": \"PROPN\",\n\t\t\t\"planeloads\": \"NOUN\",\n\t\t\t\"tuck\": \"VERB\",\n\t\t\t\"attic\": \"NOUN\",\n\t\t\t\"agar\": \"NOUN\",\n\t\t\t\"1355\": \"NUM\",\n\t\t\t\"object\": \"NOUN\",\n\t\t\t\"1307\": \"NUM\",\n\t\t\t\"80's\": \"NOUN\",\n\t\t\t\"kamen\": \"PROPN\",\n\t\t\t\"inclusion\": \"NOUN\",\n\t\t\t\";-)\": \"SYM\",\n\t\t\t\"answers\": \"NOUN\",\n\t\t\t\"sexing\": \"VERB\",\n\t\t\t\"pressured\": \"ADJ\",\n\t\t\t\"salute\": \"VERB\",\n\t\t\t\"apologetically\": \"ADV\",\n\t\t\t\"tore\": \"VERB\",\n\t\t\t\"reflection\": \"NOUN\",\n\t\t\t\"2030\": \"NUM\",\n\t\t\t\"appartment\": \"NOUN\",\n\t\t\t\"pediatric\": \"ADJ\",\n\t\t\t\"liberals\": \"NOUN\",\n\t\t\t\"alford\": \"PROPN\",\n\t\t\t\"peregrino\": \"PROPN\",\n\t\t\t\"desirability\": \"NOUN\",\n\t\t\t\"documentation\": \"NOUN\",\n\t\t\t\"scipio\": \"PROPN\",\n\t\t\t\"increases\": \"VERB\",\n\t\t\t\"mauer\": \"PROPN\",\n\t\t\t\"tackle\": \"VERB\",\n\t\t\t\"crim\": \"PROPN\",\n\t\t\t\"deregulation\": \"NOUN\",\n\t\t\t\"southeastern\": \"ADJ\",\n\t\t\t\"ramos\": \"PROPN\",\n\t\t\t\"hosts\": \"NOUN\",\n\t\t\t\"huge\": \"ADJ\",\n\t\t\t\"olgletree\": \"PROPN\",\n\t\t\t\"chanting\": \"VERB\",\n\t\t\t\"familia\": \"NOUN\",\n\t\t\t\"decided\": \"VERB\",\n\t\t\t\"modus\": \"NOUN\",\n\t\t\t\"performance\": \"NOUN\",\n\t\t\t\"chapter\": \"NOUN\",\n\t\t\t\"cartoony\": \"ADJ\",\n\t\t\t\"normative\": \"ADJ\",\n\t\t\t\"mick\": \"PROPN\",\n\t\t\t\"frosts\": \"NOUN\",\n\t\t\t\"bony\": \"ADJ\",\n\t\t\t\"modestly\": \"ADV\",\n\t\t\t\"hanging\": \"VERB\",\n\t\t\t\"spm\": \"PROPN\",\n\t\t\t\"they\": \"PRON\",\n\t\t\t\"ethiopia\": \"PROPN\",\n\t\t\t\"abruptly\": \"ADV\",\n\t\t\t\"capsule\": \"NOUN\",\n\t\t\t\"deliverance\": \"NOUN\",\n\t\t\t\"antibiotics\": \"NOUN\",\n\t\t\t\"clear\": \"ADJ\",\n\t\t\t\"offworlder\": \"NOUN\",\n\t\t\t\"cape\": \"NOUN\",\n\t\t\t\"deadliest\": \"ADJ\",\n\t\t\t\"self-definition\": \"NOUN\",\n\t\t\t\"duck\": \"NOUN\",\n\t\t\t\"grey-bearded\": \"ADJ\",\n\t\t\t\"x940\": \"PROPN\",\n\t\t\t\"endlessly\": \"ADV\",\n\t\t\t\"clawing\": \"VERB\",\n\t\t\t\"concur\": \"VERB\",\n\t\t\t\"cracking\": \"NOUN\",\n\t\t\t\"requires\": \"VERB\",\n\t\t\t\"hail\": \"VERB\",\n\t\t\t\"femora\": \"NOUN\",\n\t\t\t\"sufferings\": \"NOUN\",\n\t\t\t\"hugging\": \"VERB\",\n\t\t\t\"michael\": \"PROPN\",\n\t\t\t\"tat\": \"PROPN\",\n\t\t\t\"magnitude\": \"NOUN\",\n\t\t\t\"friendly\": \"ADJ\",\n\t\t\t\"12.99\": \"NUM\",\n\t\t\t\"trace\": \"NOUN\",\n\t\t\t\"tikal\": \"PROPN\",\n\t\t\t\"unloaded\": \"ADJ\",\n\t\t\t\"praise\": \"NOUN\",\n\t\t\t\"maría\": \"PROPN\",\n\t\t\t\"08/17/2000\": \"NUM\",\n\t\t\t\"variety\": \"NOUN\",\n\t\t\t\"cimarron\": \"PROPN\",\n\t\t\t\"pictographs\": \"NOUN\",\n\t\t\t\"walk\": \"VERB\",\n\t\t\t\"ōtsugomori\": \"PROPN\",\n\t\t\t\"fingernails\": \"NOUN\",\n\t\t\t\"reign\": \"VERB\",\n\t\t\t\"overslept\": \"VERB\",\n\t\t\t\"mixer\": \"NOUN\",\n\t\t\t\"presence\": \"NOUN\",\n\t\t\t\"ashraf\": \"PROPN\",\n\t\t\t\"doing\": \"VERB\",\n\t\t\t\"intrepid\": \"PROPN\",\n\t\t\t\"sinyavsky\": \"PROPN\",\n\t\t\t\"dramatization\": \"NOUN\",\n\t\t\t\"loopy\": \"ADJ\",\n\t\t\t\"flee\": \"VERB\",\n\t\t\t\"stethoscope\": \"NOUN\",\n\t\t\t\"planeful\": \"NOUN\",\n\t\t\t\"enclosure\": \"NOUN\",\n\t\t\t\"burners\": \"NOUN\",\n\t\t\t\"strikes\": \"NOUN\",\n\t\t\t\"dined\": \"VERB\",\n\t\t\t\"swifties\": \"PROPN\",\n\t\t\t\"grusendorf\": \"PROPN\",\n\t\t\t\"senabre\": \"PROPN\",\n\t\t\t\"enver\": \"PROPN\",\n\t\t\t\"bedding\": \"NOUN\",\n\t\t\t\"tags\": \"NOUN\",\n\t\t\t\"braced\": \"VERB\",\n\t\t\t\"pro-palestinian\": \"ADJ\",\n\t\t\t\"stationery\": \"NOUN\",\n\t\t\t\"nurture\": \"VERB\",\n\t\t\t\"graham\": \"PROPN\",\n\t\t\t\"parrot\": \"NOUN\",\n\t\t\t\"malls\": \"NOUN\",\n\t\t\t\"footing\": \"NOUN\",\n\t\t\t\"magnifying\": \"VERB\",\n\t\t\t\"mutilation\": \"NOUN\",\n\t\t\t\"lolled\": \"VERB\",\n\t\t\t\"paid\": \"VERB\",\n\t\t\t\"heavier\": \"ADJ\",\n\t\t\t\"ashamed\": \"ADJ\",\n\t\t\t\"cvts\": \"PROPN\",\n\t\t\t\"truman\": \"PROPN\",\n\t\t\t\"strambler\": \"PROPN\",\n\t\t\t\"examined\": \"VERB\",\n\t\t\t\"ruona\": \"PROPN\",\n\t\t\t\"19/11/2004\": \"NUM\",\n\t\t\t\"edison\": \"PROPN\",\n\t\t\t\"shebaa\": \"PROPN\",\n\t\t\t\"1%p701!.doc\": \"SYM\",\n\t\t\t\"cardiac\": \"ADJ\",\n\t\t\t\"cottonwoods\": \"NOUN\",\n\t\t\t\"plying\": \"VERB\",\n\t\t\t\"modeling\": \"NOUN\",\n\t\t\t\"strategy\": \"NOUN\",\n\t\t\t\"husk\": \"NOUN\",\n\t\t\t\"12:01\": \"NUM\",\n\t\t\t\"relocate\": \"VERB\",\n\t\t\t\"curtains\": \"NOUN\",\n\t\t\t\"expect\": \"VERB\",\n\t\t\t\"copies\": \"NOUN\",\n\t\t\t\"egyptian\": \"ADJ\",\n\t\t\t\"monetize\": \"VERB\",\n\t\t\t\"justin\": \"PROPN\",\n\t\t\t\"cuttings\": \"NOUN\",\n\t\t\t\"terrace\": \"PROPN\",\n\t\t\t\"2.4\": \"NUM\",\n\t\t\t\"prejudice\": \"PROPN\",\n\t\t\t\"02:10\": \"NUM\",\n\t\t\t\"mash\": \"VERB\",\n\t\t\t\"certeau\": \"PROPN\",\n\t\t\t\"expositions\": \"NOUN\",\n\t\t\t\"ruse\": \"PROPN\",\n\t\t\t\"staple\": \"NOUN\",\n\t\t\t\"safety\": \"NOUN\",\n\t\t\t\"aortic\": \"ADJ\",\n\t\t\t\"pillow\": \"NOUN\",\n\t\t\t\"1790\": \"NUM\",\n\t\t\t\"mic\": \"NOUN\",\n\t\t\t\"2,500\": \"NUM\",\n\t\t\t\"convening\": \"VERB\",\n\t\t\t\"athena\": \"PROPN\",\n\t\t\t\"owns\": \"VERB\",\n\t\t\t\"temperature\": \"NOUN\",\n\t\t\t\"johnnie\": \"PROPN\",\n\t\t\t\"50\": \"NUM\",\n\t\t\t\"consenting\": \"VERB\",\n\t\t\t\"burrito\": \"PROPN\",\n\t\t\t\"minors\": \"NOUN\",\n\t\t\t\"mi\": \"PROPN\",\n\t\t\t\"argued\": \"VERB\",\n\t\t\t\"descendant\": \"NOUN\",\n\t\t\t\"secessionists\": \"NOUN\",\n\t\t\t\"jason.leopold@dowjones.com\": \"PROPN\",\n\t\t\t\"dehydrated\": \"ADJ\",\n\t\t\t\"smugness\": \"NOUN\",\n\t\t\t\"significant\": \"ADJ\",\n\t\t\t\"ironic\": \"ADJ\",\n\t\t\t\"rod\": \"PROPN\",\n\t\t\t\"luther\": \"PROPN\",\n\t\t\t\"cologne\": \"NOUN\",\n\t\t\t\"p.m.\": \"NOUN\",\n\t\t\t\"http://www.caribbean-cruising.net\": \"PROPN\",\n\t\t\t\"everybody\": \"PRON\",\n\t\t\t\"sagittarius\": \"PROPN\",\n\t\t\t\"poetry\": \"NOUN\",\n\t\t\t\"supervisory\": \"ADJ\",\n\t\t\t\"multiplex\": \"NOUN\",\n\t\t\t\"nigger\": \"NOUN\",\n\t\t\t\"particularized\": \"ADJ\",\n\t\t\t\"exotic\": \"ADJ\",\n\t\t\t\"intuitive\": \"ADJ\",\n\t\t\t\"dinosaurs\": \"NOUN\",\n\t\t\t\"sucked\": \"VERB\",\n\t\t\t\"www.caem.org\": \"PROPN\",\n\t\t\t\"buzzwords\": \"NOUN\",\n\t\t\t\"sharayu\": \"PROPN\",\n\t\t\t\"run-time\": \"NOUN\",\n\t\t\t\"646-8420\": \"NUM\",\n\t\t\t\"ammonium\": \"NOUN\",\n\t\t\t\"metal\": \"NOUN\",\n\t\t\t\"whoopsie\": \"NOUN\",\n\t\t\t\"920\": \"NUM\",\n\t\t\t\"staggered\": \"VERB\",\n\t\t\t\"bugless\": \"ADJ\",\n\t\t\t\"loan\": \"NOUN\",\n\t\t\t\"devotional\": \"ADJ\",\n\t\t\t\"619-231-9449\": \"NUM\",\n\t\t\t\"jeanne\": \"PROPN\",\n\t\t\t\"1.78\": \"NUM\",\n\t\t\t\"uw\": \"PROPN\",\n\t\t\t\"masks\": \"NOUN\",\n\t\t\t\"speck\": \"NOUN\",\n\t\t\t\"skinned\": \"ADJ\",\n\t\t\t\"subtle\": \"ADJ\",\n\t\t\t\"amore\": \"PROPN\",\n\t\t\t\"whipping\": \"VERB\",\n\t\t\t\"enjoying\": \"VERB\",\n\t\t\t\"non-interference\": \"NOUN\",\n\t\t\t\"shakspere\": \"PROPN\",\n\t\t\t\"alexandria\": \"PROPN\",\n\t\t\t\"loot\": \"NOUN\",\n\t\t\t\"yourself\": \"PRON\",\n\t\t\t\"fringe\": \"NOUN\",\n\t\t\t\"ceasefire\": \"NOUN\",\n\t\t\t\"cinema\": \"NOUN\",\n\t\t\t\"appears\": \"VERB\",\n\t\t\t\"10:16\": \"NUM\",\n\t\t\t\"non-smokers\": \"NOUN\",\n\t\t\t\"mutated\": \"VERB\",\n\t\t\t\"pray\": \"VERB\",\n\t\t\t\"laurel\": \"PROPN\",\n\t\t\t\"nite\": \"NOUN\",\n\t\t\t\"barbados\": \"PROPN\",\n\t\t\t\"amalgam\": \"NOUN\",\n\t\t\t\"lurch\": \"VERB\",\n\t\t\t\"xp\": \"PROPN\",\n\t\t\t\"1979\": \"NUM\",\n\t\t\t\"dogwood\": \"NOUN\",\n\t\t\t\"mosaic\": \"NOUN\",\n\t\t\t\"harass\": \"VERB\",\n\t\t\t\"stabilise\": \"VERB\",\n\t\t\t\"rosemary\": \"NOUN\",\n\t\t\t\"chutes\": \"NOUN\",\n\t\t\t\"yuor\": \"PRON\",\n\t\t\t\"annual\": \"ADJ\",\n\t\t\t\"eelam\": \"PROPN\",\n\t\t\t\"within\": \"ADP\",\n\t\t\t\"witnesses\": \"NOUN\",\n\t\t\t\"muslin\": \"NOUN\",\n\t\t\t\"incorporate\": \"VERB\",\n\t\t\t\"gb\": \"PROPN\",\n\t\t\t\"plotter\": \"NOUN\",\n\t\t\t\"eloquent\": \"ADJ\",\n\t\t\t\"overlook\": \"VERB\",\n\t\t\t\"aloft\": \"ADP\",\n\t\t\t\"clippings\": \"NOUN\",\n\t\t\t\"design\": \"NOUN\",\n\t\t\t\"suella\": \"PROPN\",\n\t\t\t\"following\": \"VERB\",\n\t\t\t\"renegotiation\": \"NOUN\",\n\t\t\t\"ruinin'\": \"VERB\",\n\t\t\t\"wycliffe\": \"PROPN\",\n\t\t\t\"casually\": \"ADV\",\n\t\t\t\"dip\": \"NOUN\",\n\t\t\t\"entertained\": \"ADJ\",\n\t\t\t\"threshold\": \"NOUN\",\n\t\t\t\"11/30/2000\": \"NUM\",\n\t\t\t\"rewrite\": \"VERB\",\n\t\t\t\"acne\": \"NOUN\",\n\t\t\t\"string\": \"NOUN\",\n\t\t\t\"miscellaneous\": \"ADJ\",\n\t\t\t\"williams\": \"PROPN\",\n\t\t\t\"museums\": \"NOUN\",\n\t\t\t\"expertise\": \"NOUN\",\n\t\t\t\"brussels\": \"PROPN\",\n\t\t\t\"annexation\": \"NOUN\",\n\t\t\t\"reaffirmation\": \"NOUN\",\n\t\t\t\"killifish\": \"NOUN\",\n\t\t\t\"co.\": \"NOUN\",\n\t\t\t\"clarification\": \"NOUN\",\n\t\t\t\"collins\": \"PROPN\",\n\t\t\t\"o’clock\": \"ADV\",\n\t\t\t\"annoyances\": \"NOUN\",\n\t\t\t\"1100\": \"NUM\",\n\t\t\t\"stifled\": \"VERB\",\n\t\t\t\"bees'\": \"NOUN\",\n\t\t\t\"rice\": \"NOUN\",\n\t\t\t\"mesoamericans\": \"PROPN\",\n\t\t\t\"commented\": \"VERB\",\n\t\t\t\"ross\": \"PROPN\",\n\t\t\t\"broad\": \"ADJ\",\n\t\t\t\"ministry\": \"PROPN\",\n\t\t\t\"outlier\": \"NOUN\",\n\t\t\t\"stromboli\": \"PROPN\",\n\t\t\t\"hannah\": \"PROPN\",\n\t\t\t\"oversees\": \"VERB\",\n\t\t\t\"military\": \"ADJ\",\n\t\t\t\"mid-evenings\": \"NOUN\",\n\t\t\t\"laughing\": \"VERB\",\n\t\t\t\"mach\": \"NOUN\",\n\t\t\t\"org\": \"PROPN\",\n\t\t\t\"stefania\": \"PROPN\",\n\t\t\t\"bunnell\": \"PROPN\",\n\t\t\t\"wooh\": \"INTJ\",\n\t\t\t\"casinos\": \"NOUN\",\n\t\t\t\"yep\": \"INTJ\",\n\t\t\t\"evanston\": \"PROPN\",\n\t\t\t\"valuing\": \"VERB\",\n\t\t\t\"related\": \"ADJ\",\n\t\t\t\"temperance\": \"NOUN\",\n\t\t\t\"titts\": \"NOUN\",\n\t\t\t\"activism\": \"NOUN\",\n\t\t\t\"realised\": \"VERB\",\n\t\t\t\"3.5\": \"NUM\",\n\t\t\t\"caption\": \"NOUN\",\n\t\t\t\"taffy\": \"PROPN\",\n\t\t\t\"artery\": \"NOUN\",\n\t\t\t\"technical\": \"ADJ\",\n\t\t\t\"signac\": \"PROPN\",\n\t\t\t\"magical\": \"ADJ\",\n\t\t\t\"postal\": \"ADJ\",\n\t\t\t\"max\": \"PROPN\",\n\t\t\t\"amphitheatre\": \"NOUN\",\n\t\t\t\"decides\": \"VERB\",\n\t\t\t\"bronchitis\": \"NOUN\",\n\t\t\t\"evernote\": \"PROPN\",\n\t\t\t\"softly\": \"ADV\",\n\t\t\t\"03:20\": \"NUM\",\n\t\t\t\"caron\": \"PROPN\",\n\t\t\t\"cent\": \"NOUN\",\n\t\t\t\"cec\": \"NOUN\",\n\t\t\t\"situated\": \"VERB\",\n\t\t\t\"emphasizing\": \"VERB\",\n\t\t\t\"legionaries\": \"NOUN\",\n\t\t\t\"reymont\": \"PROPN\",\n\t\t\t\"inches\": \"NOUN\",\n\t\t\t\"maniac\": \"NOUN\",\n\t\t\t\"1829\": \"NUM\",\n\t\t\t\"airport\": \"NOUN\",\n\t\t\t\"12:35\": \"NUM\",\n\t\t\t\"filing\": \"NOUN\",\n\t\t\t\"inconsiderate\": \"ADJ\",\n\t\t\t\"folies\": \"PROPN\",\n\t\t\t\"appartently\": \"ADV\",\n\t\t\t\"disconnected\": \"VERB\",\n\t\t\t\"salikh\": \"PROPN\",\n\t\t\t\"miley\": \"PROPN\",\n\t\t\t\"lone\": \"ADJ\",\n\t\t\t\"multicultural\": \"ADJ\",\n\t\t\t\"dancer\": \"NOUN\",\n\t\t\t\"oceans\": \"NOUN\",\n\t\t\t\"cauliflower\": \"NOUN\",\n\t\t\t\"accelerator\": \"NOUN\",\n\t\t\t\"uranus\": \"PROPN\",\n\t\t\t\"1914\": \"NUM\",\n\t\t\t\"hung\": \"VERB\",\n\t\t\t\"up\": \"ADP\",\n\t\t\t\"hoodie\": \"NOUN\",\n\t\t\t\"stirs\": \"VERB\",\n\t\t\t\"cockles\": \"NOUN\",\n\t\t\t\"paranoid\": \"ADJ\",\n\t\t\t\"throbbing\": \"VERB\",\n\t\t\t\"corruption\": \"NOUN\",\n\t\t\t\"mainly\": \"ADV\",\n\t\t\t\"summarising\": \"VERB\",\n\t\t\t\"dependance\": \"NOUN\",\n\t\t\t\"provisional\": \"ADJ\",\n\t\t\t\"blowout\": \"NOUN\",\n\t\t\t\"pip\": \"PROPN\",\n\t\t\t\"intellectually\": \"ADV\",\n\t\t\t\"squeak\": \"NOUN\",\n\t\t\t\"apparent\": \"ADJ\",\n\t\t\t\"clinics\": \"NOUN\",\n\t\t\t\"cider\": \"NOUN\",\n\t\t\t\"commemorated\": \"VERB\",\n\t\t\t\"nation-making\": \"ADJ\",\n\t\t\t\"renowned\": \"ADJ\",\n\t\t\t\"mcnealy\": \"PROPN\",\n\t\t\t\"straining\": \"VERB\",\n\t\t\t\"bloodletting\": \"NOUN\",\n\t\t\t\"legally\": \"ADV\",\n\t\t\t\"actully\": \"ADV\",\n\t\t\t\"fool\": \"VERB\",\n\t\t\t\"legislature\": \"NOUN\",\n\t\t\t\"explosion\": \"NOUN\",\n\t\t\t\"dears\": \"NOUN\",\n\t\t\t\"nodding\": \"VERB\",\n\t\t\t\"matter\": \"NOUN\",\n\t\t\t\"1,000\": \"NUM\",\n\t\t\t\"prepared\": \"VERB\",\n\t\t\t\"details\": \"NOUN\",\n\t\t\t\"flavors\": \"NOUN\",\n\t\t\t\"humpty\": \"PROPN\",\n\t\t\t\"presentation\": \"NOUN\",\n\t\t\t\"newest\": \"ADJ\",\n\t\t\t\"outline\": \"NOUN\",\n\t\t\t\"krumbholz\": \"PROPN\",\n\t\t\t\"cross-cultural\": \"ADJ\",\n\t\t\t\"glances\": \"NOUN\",\n\t\t\t\"eritrea\": \"PROPN\",\n\t\t\t\"unbelievable\": \"ADJ\",\n\t\t\t\"organs\": \"NOUN\",\n\t\t\t\"halston\": \"PROPN\",\n\t\t\t\"simpson\": \"PROPN\",\n\t\t\t\"roaming\": \"VERB\",\n\t\t\t\"ordination\": \"NOUN\",\n\t\t\t\"methodist\": \"ADJ\",\n\t\t\t\"northfield\": \"PROPN\",\n\t\t\t\"parched\": \"ADJ\",\n\t\t\t\"hallway\": \"NOUN\",\n\t\t\t\"anthony\": \"PROPN\",\n\t\t\t\"harmful\": \"ADJ\",\n\t\t\t\"merchant\": \"NOUN\",\n\t\t\t\"naturally\": \"ADV\",\n\t\t\t\"diagram\": \"NOUN\",\n\t\t\t\"phrases\": \"NOUN\",\n\t\t\t\"executed\": \"VERB\",\n\t\t\t\"chills\": \"NOUN\",\n\t\t\t\"oct\": \"PROPN\",\n\t\t\t\"post-chavez\": \"ADJ\",\n\t\t\t\"to\": \"PART\",\n\t\t\t\"serpent\": \"NOUN\",\n\t\t\t\"!!!!!!!!!!!!!!!!!!\": \"PUNCT\",\n\t\t\t\"album\": \"NOUN\",\n\t\t\t\"łódź\": \"PROPN\",\n\t\t\t\"keeney\": \"PROPN\",\n\t\t\t\"1665\": \"NUM\",\n\t\t\t\"spectacle\": \"NOUN\",\n\t\t\t\"undocking\": \"NOUN\",\n\t\t\t\"hoston\": \"PROPN\",\n\t\t\t\"two-hundred-year\": \"NOUN\",\n\t\t\t\"distinction\": \"NOUN\",\n\t\t\t\"leonardo\": \"PROPN\",\n\t\t\t\"average\": \"ADJ\",\n\t\t\t\"tolerant\": \"ADJ\",\n\t\t\t\"42.65\": \"NUM\",\n\t\t\t\"fraught\": \"ADJ\",\n\t\t\t\"18:32\": \"NUM\",\n\t\t\t\"killies\": \"NOUN\",\n\t\t\t\"nationalists\": \"NOUN\",\n\t\t\t\"taxied\": \"VERB\",\n\t\t\t\"jellicoh\": \"PROPN\",\n\t\t\t\"delegation\": \"NOUN\",\n\t\t\t\"simulating\": \"VERB\",\n\t\t\t\"04:28\": \"NUM\",\n\t\t\t\"scordia\": \"PROPN\",\n\t\t\t\"que\": \"NOUN\",\n\t\t\t\"destabilizing\": \"VERB\",\n\t\t\t\"quartered\": \"VERB\",\n\t\t\t\"tankmates\": \"NOUN\",\n\t\t\t\"stooges\": \"NOUN\",\n\t\t\t\"performers\": \"NOUN\",\n\t\t\t\"childbirth\": \"NOUN\",\n\t\t\t\"machina\": \"PROPN\",\n\t\t\t\"reputed\": \"VERB\",\n\t\t\t\"sociologist\": \"NOUN\",\n\t\t\t\"boutique\": \"NOUN\",\n\t\t\t\"universals\": \"NOUN\",\n\t\t\t\"crane\": \"NOUN\",\n\t\t\t\"republican\": \"ADJ\",\n\t\t\t\"smelling\": \"VERB\",\n\t\t\t\"aimed\": \"VERB\",\n\t\t\t\"redwings\": \"NOUN\",\n\t\t\t\"near\": \"ADP\",\n\t\t\t\"well-healed\": \"ADJ\",\n\t\t\t\"neighborhoods\": \"NOUN\",\n\t\t\t\"immense\": \"ADJ\",\n\t\t\t\"correlation\": \"NOUN\",\n\t\t\t\"diademed\": \"ADJ\",\n\t\t\t\"identity\": \"NOUN\",\n\t\t\t\"multiplied\": \"VERB\",\n\t\t\t\"biking\": \"VERB\",\n\t\t\t\"legitimacy\": \"NOUN\",\n\t\t\t\"42,000\": \"NUM\",\n\t\t\t\"elephants\": \"NOUN\",\n\t\t\t\"psychic\": \"ADJ\",\n\t\t\t\"exploited\": \"VERB\",\n\t\t\t\"animated\": \"ADJ\",\n\t\t\t\"plots\": \"NOUN\",\n\t\t\t\"barely\": \"ADV\",\n\t\t\t\"platforms\": \"NOUN\",\n\t\t\t\"departs\": \"VERB\",\n\t\t\t\"comprise\": \"VERB\",\n\t\t\t\"’s\": \"PART\",\n\t\t\t\"shouted\": \"VERB\",\n\t\t\t\"jurek\": \"PROPN\",\n\t\t\t\"creaking\": \"NOUN\",\n\t\t\t\"demo\": \"NOUN\",\n\t\t\t\"agrarian\": \"ADJ\",\n\t\t\t\"towering\": \"VERB\",\n\t\t\t\"shaper\": \"NOUN\",\n\t\t\t\"configures\": \"VERB\",\n\t\t\t\"cracker\": \"NOUN\",\n\t\t\t\"cannistaro\": \"PROPN\",\n\t\t\t\"27.doc\": \"NOUN\",\n\t\t\t\"starvation\": \"NOUN\",\n\t\t\t\"budget\": \"NOUN\",\n\t\t\t\"degu\": \"NOUN\",\n\t\t\t\"guss\": \"VERB\",\n\t\t\t\"watt\": \"NOUN\",\n\t\t\t\"objectively\": \"ADV\",\n\t\t\t\"towing\": \"PROPN\",\n\t\t\t\"pagefilename.bak.htm\": \"NOUN\",\n\t\t\t\"deceive\": \"VERB\",\n\t\t\t\"7.5\": \"NUM\",\n\t\t\t\"demonstrated\": \"VERB\",\n\t\t\t\"catch\": \"VERB\",\n\t\t\t\"short\": \"ADJ\",\n\t\t\t\"uneducated\": \"ADJ\",\n\t\t\t\"bogliasco\": \"PROPN\",\n\t\t\t\"latitudes\": \"NOUN\",\n\t\t\t\"golfers\": \"NOUN\",\n\t\t\t\"harrowing\": \"ADV\",\n\t\t\t\"centre\": \"NOUN\",\n\t\t\t\"bus\": \"NOUN\",\n\t\t\t\"january\": \"PROPN\",\n\t\t\t\"pleasantness\": \"NOUN\",\n\t\t\t\"inhabitants\": \"NOUN\",\n\t\t\t\"arrests\": \"NOUN\",\n\t\t\t\"sorcerer\": \"NOUN\",\n\t\t\t\"band\": \"NOUN\",\n\t\t\t\"sporadic\": \"ADJ\",\n\t\t\t\"investigate\": \"VERB\",\n\t\t\t\"optogenetics\": \"NOUN\",\n\t\t\t\"nonbondad\": \"PROPN\",\n\t\t\t\"33\": \"NUM\",\n\t\t\t\"medici\": \"PROPN\",\n\t\t\t\"send\": \"VERB\",\n\t\t\t\"neck\": \"NOUN\",\n\t\t\t\"braised\": \"ADJ\",\n\t\t\t\"resale\": \"NOUN\",\n\t\t\t\"moors\": \"NOUN\",\n\t\t\t\"reggie\": \"PROPN\",\n\t\t\t\"croissants\": \"NOUN\",\n\t\t\t\"500\": \"NUM\",\n\t\t\t\"horatio\": \"PROPN\",\n\t\t\t\"knowing\": \"VERB\",\n\t\t\t\"bite\": \"VERB\",\n\t\t\t\"ultra\": \"ADV\",\n\t\t\t\"guidelines\": \"NOUN\",\n\t\t\t\"sometimes\": \"ADV\",\n\t\t\t\"ok'd\": \"VERB\",\n\t\t\t\"screenwriter\": \"NOUN\",\n\t\t\t\"insecure\": \"ADJ\",\n\t\t\t\"peanutjake\": \"PROPN\",\n\t\t\t\"wizards\": \"NOUN\",\n\t\t\t\"righteousness\": \"NOUN\",\n\t\t\t\"deportation\": \"NOUN\",\n\t\t\t\"rye\": \"PROPN\",\n\t\t\t\"barbeque\": \"VERB\",\n\t\t\t\"hose\": \"NOUN\",\n\t\t\t\"generalizations\": \"NOUN\",\n\t\t\t\"incorporated\": \"VERB\",\n\t\t\t\"workers\": \"NOUN\",\n\t\t\t\"liabilities\": \"NOUN\",\n\t\t\t\"assassin\": \"NOUN\",\n\t\t\t\"pack\": \"VERB\",\n\t\t\t\"refinery\": \"NOUN\",\n\t\t\t\"chapelle\": \"PROPN\",\n\t\t\t\"crawling\": \"VERB\",\n\t\t\t\"preside\": \"VERB\",\n\t\t\t\"warp\": \"VERB\",\n\t\t\t\"repaid\": \"VERB\",\n\t\t\t\"11:16:58\": \"NUM\",\n\t\t\t\"andrea\": \"PROPN\",\n\t\t\t\"sled\": \"NOUN\",\n\t\t\t\"negligence\": \"NOUN\",\n\t\t\t\"surfing\": \"NOUN\",\n\t\t\t\"neroli\": \"NOUN\",\n\t\t\t\"divined\": \"VERB\",\n\t\t\t\"genetic\": \"ADJ\",\n\t\t\t\"wizarding\": \"ADJ\",\n\t\t\t\"amending\": \"VERB\",\n\t\t\t\"hoarse\": \"ADJ\",\n\t\t\t\"a4-0072/97\": \"NUM\",\n\t\t\t\"fragrance\": \"NOUN\",\n\t\t\t\"jiabao\": \"PROPN\",\n\t\t\t\"cathy\": \"PROPN\",\n\t\t\t\"skinner\": \"PROPN\",\n\t\t\t\"film\": \"NOUN\",\n\t\t\t\"uncontroversial\": \"ADJ\",\n\t\t\t\"investments\": \"NOUN\",\n\t\t\t\"bluff\": \"NOUN\",\n\t\t\t\"1,426\": \"NUM\",\n\t\t\t\"selling\": \"VERB\",\n\t\t\t\"spontaneously\": \"ADV\",\n\t\t\t\"durer\": \"PROPN\",\n\t\t\t\"year\": \"NOUN\",\n\t\t\t\"mauling\": \"VERB\",\n\t\t\t\"groceries\": \"NOUN\",\n\t\t\t\"foreigners\": \"NOUN\",\n\t\t\t\"solve\": \"VERB\",\n\t\t\t\"bet\": \"NOUN\",\n\t\t\t\"d2\": \"NOUN\",\n\t\t\t\"sova\": \"PROPN\",\n\t\t\t\"principally\": \"ADV\",\n\t\t\t\"purchasing\": \"VERB\",\n\t\t\t\"npr\": \"PROPN\",\n\t\t\t\"bound\": \"VERB\",\n\t\t\t\"curb\": \"NOUN\",\n\t\t\t\"sprayed\": \"VERB\",\n\t\t\t\"screech\": \"NOUN\",\n\t\t\t\"squawk\": \"NOUN\",\n\t\t\t\"mailto:galent@nepco.com\": \"PROPN\",\n\t\t\t\"gomez\": \"PROPN\",\n\t\t\t\"kyoto\": \"PROPN\",\n\t\t\t\"unc\": \"PROPN\",\n\t\t\t\"inconclusive\": \"ADJ\",\n\t\t\t\"eyeballs\": \"NOUN\",\n\t\t\t\"julia\": \"PROPN\",\n\t\t\t\"zuckerberg\": \"PROPN\",\n\t\t\t\"heavenly\": \"ADJ\",\n\t\t\t\"method\": \"NOUN\",\n\t\t\t\"above\": \"ADP\",\n\t\t\t\"naughty\": \"ADJ\",\n\t\t\t\"tutorial\": \"NOUN\",\n\t\t\t\"derived\": \"VERB\",\n\t\t\t\"reaffirm\": \"VERB\",\n\t\t\t\"apologized\": \"VERB\",\n\t\t\t\"visitors\": \"NOUN\",\n\t\t\t\"archeologist\": \"NOUN\",\n\t\t\t\"customise\": \"VERB\",\n\t\t\t\"lukaku\": \"PROPN\",\n\t\t\t\"air\": \"NOUN\",\n\t\t\t\"842\": \"NUM\",\n\t\t\t\"lepore\": \"PROPN\",\n\t\t\t\"walt\": \"PROPN\",\n\t\t\t\"davison\": \"PROPN\",\n\t\t\t\"ministers\": \"NOUN\",\n\t\t\t\"joseph\": \"PROPN\",\n\t\t\t\"smiley\": \"ADJ\",\n\t\t\t\"redefine\": \"VERB\",\n\t\t\t\"pebble\": \"NOUN\",\n\t\t\t\"inhuman\": \"ADJ\",\n\t\t\t\"11201\": \"NUM\",\n\t\t\t\"gaining\": \"VERB\",\n\t\t\t\"stumble\": \"VERB\",\n\t\t\t\"mailings\": \"NOUN\",\n\t\t\t\"entrepreneurial\": \"ADJ\",\n\t\t\t\"fountain\": \"NOUN\",\n\t\t\t\"weekends\": \"NOUN\",\n\t\t\t\"424\": \"NUM\",\n\t\t\t\"someone\": \"PRON\",\n\t\t\t\"acriflaven\": \"PROPN\",\n\t\t\t\"upright\": \"ADV\",\n\t\t\t\"aircraft\": \"NOUN\",\n\t\t\t\"awaiting\": \"VERB\",\n\t\t\t\"selections\": \"NOUN\",\n\t\t\t\"'akkab\": \"PROPN\",\n\t\t\t\"kathryn\": \"PROPN\",\n\t\t\t\"http://www.country-couples.co.uk/datingtips/basic-travel-allowance-bta-dating-scam/\": \"PROPN\",\n\t\t\t\"comets\": \"NOUN\",\n\t\t\t\"rnb\": \"NOUN\",\n\t\t\t\"evaluate\": \"VERB\",\n\t\t\t\"pricey\": \"ADJ\",\n\t\t\t\"demis\": \"PROPN\",\n\t\t\t\"chloride\": \"NOUN\",\n\t\t\t\"huguenots\": \"PROPN\",\n\t\t\t\"care\": \"NOUN\",\n\t\t\t\"reported\": \"VERB\",\n\t\t\t\"appellants\": \"NOUN\",\n\t\t\t\"unfolding\": \"VERB\",\n\t\t\t\"simplifies\": \"VERB\",\n\t\t\t\"20's\": \"NOUN\",\n\t\t\t\"wyndham\": \"PROPN\",\n\t\t\t\"http://gimpedblog.blogspot.com/2011/09/gimp-video-tutorial-how-to-convert.html\": \"PROPN\",\n\t\t\t\"intruder\": \"NOUN\",\n\t\t\t\"h.\": \"PROPN\",\n\t\t\t\"farewell\": \"NOUN\",\n\t\t\t\"conveyor\": \"NOUN\",\n\t\t\t\"telephony\": \"NOUN\",\n\t\t\t\"mormonism\": \"PROPN\",\n\t\t\t\"cross-clause\": \"ADJ\",\n\t\t\t\"well\": \"ADV\",\n\t\t\t\"subsidiary\": \"NOUN\",\n\t\t\t\"leaped\": \"VERB\",\n\t\t\t\"combines\": \"VERB\",\n\t\t\t\"sci\": \"NOUN\",\n\t\t\t\"surroundings\": \"NOUN\",\n\t\t\t\"nymex\": \"PROPN\",\n\t\t\t\"occupy\": \"VERB\",\n\t\t\t\"blues\": \"NOUN\",\n\t\t\t\"accountant\": \"NOUN\",\n\t\t\t\"jacques\": \"PROPN\",\n\t\t\t\"stick\": \"NOUN\",\n\t\t\t\"remodelling\": \"NOUN\",\n\t\t\t\"pearl\": \"PROPN\",\n\t\t\t\"bakers\": \"NOUN\",\n\t\t\t\"bremen\": \"PROPN\",\n\t\t\t\"macadamia\": \"NOUN\",\n\t\t\t\"1686\": \"NUM\",\n\t\t\t\"vivid\": \"ADJ\",\n\t\t\t\"incomprehensible\": \"ADJ\",\n\t\t\t\"messages\": \"NOUN\",\n\t\t\t\"registration\": \"NOUN\",\n\t\t\t\"aging\": \"NOUN\",\n\t\t\t\"bosom\": \"NOUN\",\n\t\t\t\"banished\": \"VERB\",\n\t\t\t\"invoice\": \"NOUN\",\n\t\t\t\"a1m\": \"PROPN\",\n\t\t\t\"exits\": \"NOUN\",\n\t\t\t\"nasser\": \"PROPN\",\n\t\t\t\"yawning\": \"VERB\",\n\t\t\t\"237\": \"NUM\",\n\t\t\t\"company\": \"NOUN\",\n\t\t\t\"kueck\": \"PROPN\",\n\t\t\t\"relics\": \"NOUN\",\n\t\t\t\"pleasantries\": \"NOUN\",\n\t\t\t\"equal\": \"ADJ\",\n\t\t\t\"limbo\": \"NOUN\",\n\t\t\t\"grit\": \"NOUN\",\n\t\t\t\"goal\": \"NOUN\",\n\t\t\t\"achievements\": \"NOUN\",\n\t\t\t\"complying\": \"VERB\",\n\t\t\t\"disney\": \"PROPN\",\n\t\t\t\"gutters\": \"NOUN\",\n\t\t\t\"signoff\": \"NOUN\",\n\t\t\t\"honorary\": \"ADJ\",\n\t\t\t\"sun.\": \"PROPN\",\n\t\t\t\"klimberg\": \"PROPN\",\n\t\t\t\"cautioned\": \"VERB\",\n\t\t\t\"reflects\": \"VERB\",\n\t\t\t\"patent\": \"NOUN\",\n\t\t\t\"opinion\": \"NOUN\",\n\t\t\t\"11:26\": \"NUM\",\n\t\t\t\"spurs\": \"NOUN\",\n\t\t\t\"bridles\": \"NOUN\",\n\t\t\t\"http://www.speedtest.net/result/1155244347.png\": \"PROPN\",\n\t\t\t\"bystander\": \"NOUN\",\n\t\t\t\"anse\": \"PROPN\",\n\t\t\t\"districts\": \"NOUN\",\n\t\t\t\"ask\": \"VERB\",\n\t\t\t\"acquainted\": \"ADJ\",\n\t\t\t\"trampled\": \"VERB\",\n\t\t\t\"1832\": \"NUM\",\n\t\t\t\"humanitarian\": \"ADJ\",\n\t\t\t\"budgie\": \"NOUN\",\n\t\t\t\"also\": \"ADV\",\n\t\t\t\"imagination\": \"NOUN\",\n\t\t\t\"unnecessary\": \"ADJ\",\n\t\t\t\"upcoming\": \"ADJ\",\n\t\t\t\"blackouts\": \"NOUN\",\n\t\t\t\"quilling\": \"NOUN\",\n\t\t\t\"harbor\": \"PROPN\",\n\t\t\t\"exaggerated\": \"VERB\",\n\t\t\t\"donation\": \"NOUN\",\n\t\t\t\"magic\": \"NOUN\",\n\t\t\t\"non-representative\": \"ADJ\",\n\t\t\t\"manuscripts\": \"NOUN\",\n\t\t\t\"coating\": \"NOUN\",\n\t\t\t\"flatfish\": \"NOUN\",\n\t\t\t\"kind\": \"NOUN\",\n\t\t\t\"numb\": \"ADJ\",\n\t\t\t\"usa\": \"PROPN\",\n\t\t\t\"makke\": \"VERB\",\n\t\t\t\"saddam\": \"PROPN\",\n\t\t\t\"pitney\": \"PROPN\",\n\t\t\t\"activates\": \"VERB\",\n\t\t\t\"kashmir\": \"PROPN\",\n\t\t\t\"rogers\": \"PROPN\",\n\t\t\t\"meiji\": \"PROPN\",\n\t\t\t\"disappear\": \"VERB\",\n\t\t\t\"contributed\": \"VERB\",\n\t\t\t\"putin\": \"PROPN\",\n\t\t\t\"corporation\": \"PROPN\",\n\t\t\t\"crossroads\": \"NOUN\",\n\t\t\t\"rampaged\": \"VERB\",\n\t\t\t\"giraffe\": \"NOUN\",\n\t\t\t\"tarmac\": \"NOUN\",\n\t\t\t\"deathly\": \"ADJ\",\n\t\t\t\"beatty\": \"PROPN\",\n\t\t\t\"mints\": \"NOUN\",\n\t\t\t\"fascinated\": \"VERB\",\n\t\t\t\"mon.\": \"PROPN\",\n\t\t\t\"usda\": \"PROPN\",\n\t\t\t\"disrupted\": \"VERB\",\n\t\t\t\"broadcasting\": \"NOUN\",\n\t\t\t\"beaumarchais\": \"PROPN\",\n\t\t\t\"indescriminately\": \"ADV\",\n\t\t\t\"artifact\": \"NOUN\",\n\t\t\t\"officiate\": \"VERB\",\n\t\t\t\"sd\": \"PROPN\",\n\t\t\t\"mollified\": \"VERB\",\n\t\t\t\"lectures\": \"NOUN\",\n\t\t\t\"kosa\": \"NOUN\",\n\t\t\t\"filipinos\": \"PROPN\",\n\t\t\t\"nz\": \"PROPN\",\n\t\t\t\"flank\": \"NOUN\",\n\t\t\t\"farmer\": \"NOUN\",\n\t\t\t\"redownload\": \"VERB\",\n\t\t\t\"sheeting\": \"VERB\",\n\t\t\t\"http://www.cic.gc.ca/english/immigrate/skilled/assess/index.asp\": \"PROPN\",\n\t\t\t\"angst\": \"NOUN\",\n\t\t\t\"croall\": \"PROPN\",\n\t\t\t\"buchanan\": \"PROPN\",\n\t\t\t\"ono\": \"PROPN\",\n\t\t\t\"blood-stained\": \"ADJ\",\n\t\t\t\"1896\": \"NUM\",\n\t\t\t\"beatingsup\": \"NOUN\",\n\t\t\t\"elucidate\": \"VERB\",\n\t\t\t\"knows\": \"VERB\",\n\t\t\t\"populist\": \"ADJ\",\n\t\t\t\"713/345-7942\": \"NUM\",\n\t\t\t\"resigned\": \"VERB\",\n\t\t\t\"whim\": \"NOUN\",\n\t\t\t\"probably\": \"ADV\",\n\t\t\t\"montana\": \"PROPN\",\n\t\t\t\"electronic\": \"ADJ\",\n\t\t\t\"precise\": \"ADJ\",\n\t\t\t\"brin\": \"PROPN\",\n\t\t\t\"i.b.\": \"PROPN\",\n\t\t\t\"crouched\": \"VERB\",\n\t\t\t\"geometric\": \"ADJ\",\n\t\t\t\"absent-mindedly\": \"ADV\",\n\t\t\t\"scriptures\": \"PROPN\",\n\t\t\t\"surgeons\": \"NOUN\",\n\t\t\t\"instituto\": \"PROPN\",\n\t\t\t\"diplomatic\": \"ADJ\",\n\t\t\t\"beliefs\": \"NOUN\",\n\t\t\t\"salah\": \"PROPN\",\n\t\t\t\"arrears\": \"NOUN\",\n\t\t\t\"wed.\": \"PROPN\",\n\t\t\t\"salty\": \"ADJ\",\n\t\t\t\"switch\": \"NOUN\",\n\t\t\t\"historian\": \"NOUN\",\n\t\t\t\"vanves\": \"PROPN\",\n\t\t\t\"catalogue\": \"NOUN\",\n\t\t\t\"copan\": \"PROPN\",\n\t\t\t\"dujail\": \"PROPN\",\n\t\t\t\"round\": \"ADP\",\n\t\t\t\"iata\": \"PROPN\",\n\t\t\t\"walkie\": \"NOUN\",\n\t\t\t\"transnational\": \"ADJ\",\n\t\t\t\"281-435-0295\": \"NUM\",\n\t\t\t\"sarcastically\": \"ADV\",\n\t\t\t\"superiority\": \"NOUN\",\n\t\t\t\"ve\": \"AUX\",\n\t\t\t\"safe\": \"ADJ\",\n\t\t\t\"backgrounds\": \"NOUN\",\n\t\t\t\"oaths\": \"NOUN\",\n\t\t\t\"excitedly\": \"ADV\",\n\t\t\t\"conclusion\": \"NOUN\",\n\t\t\t\"chandelier\": \"NOUN\",\n\t\t\t\"connect\": \"VERB\",\n\t\t\t\"smoothing\": \"VERB\",\n\t\t\t\"rhinoceros\": \"NOUN\",\n\t\t\t\"free\": \"ADJ\",\n\t\t\t\"proponents\": \"NOUN\",\n\t\t\t\"giovanni\": \"PROPN\",\n\t\t\t\"dumbstruck\": \"ADJ\",\n\t\t\t\"entity\": \"NOUN\",\n\t\t\t\"bloody\": \"ADJ\",\n\t\t\t\"classified\": \"VERB\",\n\t\t\t\"insides\": \"NOUN\",\n\t\t\t\"won\": \"VERB\",\n\t\t\t\"logo\": \"NOUN\",\n\t\t\t\"payments\": \"NOUN\",\n\t\t\t\"completly\": \"ADV\",\n\t\t\t\"spoken\": \"VERB\",\n\t\t\t\"04:18\": \"NUM\",\n\t\t\t\"archipelago\": \"NOUN\",\n\t\t\t\"sommelier\": \"NOUN\",\n\t\t\t\"historic\": \"ADJ\",\n\t\t\t\"2300\": \"NUM\",\n\t\t\t\"magickal\": \"ADJ\",\n\t\t\t\"lo9nger\": \"ADV\",\n\t\t\t\"hybrids\": \"NOUN\",\n\t\t\t\"formica\": \"PROPN\",\n\t\t\t\"autograph\": \"NOUN\",\n\t\t\t\"directorate\": \"PROPN\",\n\t\t\t\"agreeing\": \"VERB\",\n\t\t\t\"yellow-brown\": \"ADJ\",\n\t\t\t\"kitten\": \"NOUN\",\n\t\t\t\"steaks\": \"NOUN\",\n\t\t\t\"aa\": \"NOUN\",\n\t\t\t\"extraction\": \"NOUN\",\n\t\t\t\"650\": \"NUM\",\n\t\t\t\"nutrition-wise\": \"ADV\",\n\t\t\t\"thanksgiving\": \"PROPN\",\n\t\t\t\"98011\": \"NUM\",\n\t\t\t\"±\": \"CCONJ\",\n\t\t\t\"dispatch\": \"NOUN\",\n\t\t\t\"spain\": \"PROPN\",\n\t\t\t\"info@vagabondtours.dk\": \"PROPN\",\n\t\t\t\"bid\": \"NOUN\",\n\t\t\t\"supplement\": \"NOUN\",\n\t\t\t\"costumer\": \"NOUN\",\n\t\t\t\"controller\": \"PROPN\",\n\t\t\t\"rome\": \"PROPN\",\n\t\t\t\"triumphant\": \"ADJ\",\n\t\t\t\"discouraging\": \"VERB\",\n\t\t\t\"component\": \"NOUN\",\n\t\t\t\"trance\": \"NOUN\",\n\t\t\t\"cunning\": \"ADJ\",\n\t\t\t\"tastes\": \"VERB\",\n\t\t\t\"ticket\": \"NOUN\",\n\t\t\t\"nea\": \"PROPN\",\n\t\t\t\"dominion\": \"PROPN\",\n\t\t\t\"marched\": \"VERB\",\n\t\t\t\"completed\": \"VERB\",\n\t\t\t\"accuracy\": \"NOUN\",\n\t\t\t\"wilderness\": \"NOUN\",\n\t\t\t\"cupboard\": \"NOUN\",\n\t\t\t\"qaim\": \"PROPN\",\n\t\t\t\"fairest\": \"ADJ\",\n\t\t\t\"movies\": \"NOUN\",\n\t\t\t\"gaping\": \"VERB\",\n\t\t\t\"daytime\": \"NOUN\",\n\t\t\t\"faster\": \"ADJ\",\n\t\t\t\"steals\": \"VERB\",\n\t\t\t\"s.\": \"PROPN\",\n\t\t\t\"andover\": \"PROPN\",\n\t\t\t\"communicated\": \"VERB\",\n\t\t\t\"1739\": \"NUM\",\n\t\t\t\"martin\": \"PROPN\",\n\t\t\t\"heckuvalot\": \"NOUN\",\n\t\t\t\"temporarily\": \"ADV\",\n\t\t\t\"line\": \"NOUN\",\n\t\t\t\"convenience\": \"NOUN\",\n\t\t\t\"comparing\": \"VERB\",\n\t\t\t\"bankruptcy\": \"NOUN\",\n\t\t\t\"travis\": \"PROPN\",\n\t\t\t\"joy\": \"PROPN\",\n\t\t\t\"nerd\": \"NOUN\",\n\t\t\t\"ta'\": \"INTJ\",\n\t\t\t\"nicco\": \"PROPN\",\n\t\t\t\"would\": \"AUX\",\n\t\t\t\"succumbed\": \"VERB\",\n\t\t\t\"crew-cut\": \"ADJ\",\n\t\t\t\"http://www.rawstory.com/news/2006/us_outsourcing_special_operations_intelligence_gathering_0413.html\": \"PROPN\",\n\t\t\t\"surrounding\": \"VERB\",\n\t\t\t\"oneself\": \"PRON\",\n\t\t\t\"israel\": \"PROPN\",\n\t\t\t\"repeatedly\": \"ADV\",\n\t\t\t\"receiving\": \"VERB\",\n\t\t\t\"exemplified\": \"VERB\",\n\t\t\t\"howrah\": \"PROPN\",\n\t\t\t\"guerilla\": \"NOUN\",\n\t\t\t\"kindly\": \"ADJ\",\n\t\t\t\"lamarque\": \"PROPN\",\n\t\t\t\"initially\": \"ADV\",\n\t\t\t\"u$\": \"PROPN\",\n\t\t\t\"meira\": \"PROPN\",\n\t\t\t\"03:13:58\": \"NUM\",\n\t\t\t\"markus\": \"PROPN\",\n\t\t\t\"summarily\": \"ADV\",\n\t\t\t\"bee-keeping\": \"NOUN\",\n\t\t\t\"july\": \"PROPN\",\n\t\t\t\"fabulous\": \"ADJ\",\n\t\t\t\"nourished\": \"PROPN\",\n\t\t\t\"1943\": \"NUM\",\n\t\t\t\"reproachfully\": \"ADV\",\n\t\t\t\"bothell\": \"PROPN\",\n\t\t\t\"taller\": \"ADJ\",\n\t\t\t\"vessel\": \"NOUN\",\n\t\t\t\"interiors\": \"PROPN\",\n\t\t\t\"intended\": \"VERB\",\n\t\t\t\"afghan\": \"ADJ\",\n\t\t\t\"diverse\": \"ADJ\",\n\t\t\t\"accenting\": \"VERB\",\n\t\t\t\"vandergrift\": \"PROPN\",\n\t\t\t\"unwilling\": \"ADJ\",\n\t\t\t\"tee\": \"ADJ\",\n\t\t\t\"damage\": \"NOUN\",\n\t\t\t\"houson\": \"PROPN\",\n\t\t\t\"ashore\": \"ADV\",\n\t\t\t\"road\": \"NOUN\",\n\t\t\t\"edge\": \"NOUN\",\n\t\t\t\"isles\": \"NOUN\",\n\t\t\t\"4,489,109\": \"NUM\",\n\t\t\t\"spectacular\": \"ADJ\",\n\t\t\t\"rope\": \"NOUN\",\n\t\t\t\"aerogel\": \"NOUN\",\n\t\t\t\"sadistic\": \"ADJ\",\n\t\t\t\"tycoons\": \"NOUN\",\n\t\t\t\"11030\": \"NUM\",\n\t\t\t\"rosy\": \"ADJ\",\n\t\t\t\"chnages\": \"NOUN\",\n\t\t\t\"shortcut\": \"NOUN\",\n\t\t\t\"provocation\": \"NOUN\",\n\t\t\t\"abou\": \"ADP\",\n\t\t\t\"serenely\": \"ADV\",\n\t\t\t\"colored\": \"VERB\",\n\t\t\t\"noctivagant\": \"ADJ\",\n\t\t\t\"stipend\": \"NOUN\",\n\t\t\t\"corridors\": \"NOUN\",\n\t\t\t\"majority\": \"NOUN\",\n\t\t\t\"molesters\": \"NOUN\",\n\t\t\t\"ensuing\": \"VERB\",\n\t\t\t\"million\": \"NUM\",\n\t\t\t\"cass\": \"PROPN\",\n\t\t\t\"bottomless\": \"ADJ\",\n\t\t\t\"executable\": \"ADJ\",\n\t\t\t\"mohammed\": \"PROPN\",\n\t\t\t\"armchair\": \"NOUN\",\n\t\t\t\"shelter\": \"NOUN\",\n\t\t\t\"stuttering\": \"VERB\",\n\t\t\t\"registry\": \"NOUN\",\n\t\t\t\"04:31\": \"NUM\",\n\t\t\t\"tourists\": \"NOUN\",\n\t\t\t\"pressurized\": \"VERB\",\n\t\t\t\"dempseys\": \"NOUN\",\n\t\t\t\"honeydew\": \"NOUN\",\n\t\t\t\"hardware\": \"NOUN\",\n\t\t\t\"burma\": \"PROPN\",\n\t\t\t\"temporary\": \"ADJ\",\n\t\t\t\"e-commerce\": \"NOUN\",\n\t\t\t\"7,000\": \"NUM\",\n\t\t\t\"humming\": \"VERB\",\n\t\t\t\"mirroring\": \"VERB\",\n\t\t\t\"phlox\": \"NOUN\",\n\t\t\t\"spills\": \"VERB\",\n\t\t\t\"appropriate\": \"ADJ\",\n\t\t\t\"twilight\": \"NOUN\",\n\t\t\t\"sdgs\": \"PROPN\",\n\t\t\t\"centralize\": \"VERB\",\n\t\t\t\"gentile\": \"ADJ\",\n\t\t\t\"job\": \"NOUN\",\n\t\t\t\"skeleton\": \"NOUN\",\n\t\t\t\"refuse\": \"VERB\",\n\t\t\t\"pudding\": \"NOUN\",\n\t\t\t\"wailing\": \"VERB\",\n\t\t\t\"viewpoints\": \"NOUN\",\n\t\t\t\"stripes\": \"NOUN\",\n\t\t\t\";\": \"PUNCT\",\n\t\t\t\"carry\": \"VERB\",\n\t\t\t\"finery\": \"NOUN\",\n\t\t\t\"treasures\": \"NOUN\",\n\t\t\t\"christina\": \"PROPN\",\n\t\t\t\"330\": \"NUM\",\n\t\t\t\"recommendations\": \"NOUN\",\n\t\t\t\"l/c\": \"NOUN\",\n\t\t\t\"otago\": \"PROPN\",\n\t\t\t\"spacious\": \"ADJ\",\n\t\t\t\"mildly\": \"ADV\",\n\t\t\t\"fanatic\": \"ADJ\",\n\t\t\t\"wisecracks\": \"NOUN\",\n\t\t\t\"kowloon\": \"PROPN\",\n\t\t\t\"communicating\": \"VERB\",\n\t\t\t\"tajiks\": \"PROPN\",\n\t\t\t\"vietnam\": \"PROPN\",\n\t\t\t\"philadelphia\": \"PROPN\",\n\t\t\t\"cheuk\": \"PROPN\",\n\t\t\t\"soups\": \"NOUN\",\n\t\t\t\"incoherent\": \"ADJ\",\n\t\t\t\"painted\": \"VERB\",\n\t\t\t\"probability\": \"NOUN\",\n\t\t\t\"gravy\": \"NOUN\",\n\t\t\t\"rutgers\": \"PROPN\",\n\t\t\t\"toxic\": \"ADJ\",\n\t\t\t\"95\": \"NUM\",\n\t\t\t\"failed\": \"VERB\",\n\t\t\t\"anywere\": \"ADV\",\n\t\t\t\"dug\": \"VERB\",\n\t\t\t\"liver\": \"NOUN\",\n\t\t\t\"tanganyika\": \"PROPN\",\n\t\t\t\"agreements\": \"NOUN\",\n\t\t\t\"facilitating\": \"VERB\",\n\t\t\t\"jerry\": \"PROPN\",\n\t\t\t\"guesthouse\": \"PROPN\",\n\t\t\t\"comedians\": \"NOUN\",\n\t\t\t\"treasure\": \"NOUN\",\n\t\t\t\"takeover\": \"NOUN\",\n\t\t\t\"whenever\": \"ADV\",\n\t\t\t\"buzzy\": \"ADJ\",\n\t\t\t\"gamers\": \"NOUN\",\n\t\t\t\"tune\": \"NOUN\",\n\t\t\t\"trained\": \"VERB\",\n\t\t\t\"category\": \"NOUN\",\n\t\t\t\"agassiz\": \"PROPN\",\n\t\t\t\"erect\": \"ADJ\",\n\t\t\t\"overheard\": \"VERB\",\n\t\t\t\"inform\": \"VERB\",\n\t\t\t\"checkout\": \"NOUN\",\n\t\t\t\"programmes\": \"NOUN\",\n\t\t\t\"acquiesce\": \"VERB\",\n\t\t\t\"conjecture\": \"NOUN\",\n\t\t\t\"delivery\": \"NOUN\",\n\t\t\t\"record-player\": \"NOUN\",\n\t\t\t\"u.s\": \"PROPN\",\n\t\t\t\"this\": \"DET\",\n\t\t\t\"feathery\": \"ADJ\",\n\t\t\t\"uncertainly\": \"ADV\",\n\t\t\t\"believer\": \"NOUN\",\n\t\t\t\"soup\": \"NOUN\",\n\t\t\t\"simplifications\": \"NOUN\",\n\t\t\t\"falls\": \"PROPN\",\n\t\t\t\"489\": \"NUM\",\n\t\t\t\"down\": \"ADV\",\n\t\t\t\"13279\": \"NUM\",\n\t\t\t\"acronym\": \"NOUN\",\n\t\t\t\"denunciation\": \"NOUN\",\n\t\t\t\"berths\": \"NOUN\",\n\t\t\t\"ted\": \"PROPN\",\n\t\t\t\"badly\": \"ADV\",\n\t\t\t\"decisive\": \"ADJ\",\n\t\t\t\"permanently\": \"ADV\",\n\t\t\t\"prejudices\": \"NOUN\",\n\t\t\t\"cents\": \"NOUN\",\n\t\t\t\"courtesy\": \"NOUN\",\n\t\t\t\"01/13/2001\": \"NUM\",\n\t\t\t\"mh\": \"INTJ\",\n\t\t\t\"60.23\": \"NUM\",\n\t\t\t\"solemnity\": \"NOUN\",\n\t\t\t\"yard\": \"NOUN\",\n\t\t\t\"iss\": \"PROPN\",\n\t\t\t\"kwok\": \"PROPN\",\n\t\t\t\"abundance\": \"NOUN\",\n\t\t\t\"responded\": \"VERB\",\n\t\t\t\"testimony\": \"NOUN\",\n\t\t\t\"of\": \"ADP\",\n\t\t\t\"desserts\": \"NOUN\",\n\t\t\t\"parisian\": \"ADJ\",\n\t\t\t\"meat\": \"NOUN\",\n\t\t\t\"conscientious\": \"ADJ\",\n\t\t\t\"1974\": \"NUM\",\n\t\t\t\"weekly\": \"ADJ\",\n\t\t\t\"teaspoon\": \"NOUN\",\n\t\t\t\"spore\": \"NOUN\",\n\t\t\t\"magi\": \"PROPN\",\n\t\t\t\"pablo\": \"PROPN\",\n\t\t\t\"permissions\": \"NOUN\",\n\t\t\t\"20006\": \"NUM\",\n\t\t\t\"microsystems\": \"PROPN\",\n\t\t\t\"leant\": \"VERB\",\n\t\t\t\"http://www.flickr.com/photos/adamtolle/6094960940/in/set-72157627535453128/\": \"PROPN\",\n\t\t\t\"declare\": \"VERB\",\n\t\t\t\"chinoise\": \"PROPN\",\n\t\t\t\"tuscany\": \"PROPN\",\n\t\t\t\"pictures\": \"NOUN\",\n\t\t\t\"hash\": \"NOUN\",\n\t\t\t\"full\": \"ADJ\",\n\t\t\t\"purposely\": \"ADV\",\n\t\t\t\"fifteenth\": \"NOUN\",\n\t\t\t\"violent\": \"ADJ\",\n\t\t\t\"celebrity\": \"NOUN\",\n\t\t\t\"looming\": \"VERB\",\n\t\t\t\"preservation\": \"NOUN\",\n\t\t\t\"vera\": \"NOUN\",\n\t\t\t\"upholding\": \"VERB\",\n\t\t\t\"cellphones\": \"NOUN\",\n\t\t\t\"popcorn\": \"NOUN\",\n\t\t\t\"insular\": \"ADJ\",\n\t\t\t\"2.5\": \"NUM\",\n\t\t\t\"wootch\": \"PROPN\",\n\t\t\t\"grandpa\": \"NOUN\",\n\t\t\t\"1934\": \"NUM\",\n\t\t\t\"strapped\": \"VERB\",\n\t\t\t\"huffington\": \"PROPN\",\n\t\t\t\"13339\": \"NUM\",\n\t\t\t\"mild\": \"ADJ\",\n\t\t\t\"ski\": \"VERB\",\n\t\t\t\"omg\": \"INTJ\",\n\t\t\t\"dressage\": \"NOUN\",\n\t\t\t\"field\": \"NOUN\",\n\t\t\t\"hospitalized\": \"VERB\",\n\t\t\t\"accommodated\": \"VERB\",\n\t\t\t\"emptier\": \"ADJ\",\n\t\t\t\"corpses\": \"NOUN\",\n\t\t\t\"atlantic\": \"ADJ\",\n\t\t\t\"inn\": \"PROPN\",\n\t\t\t\"stories\": \"NOUN\",\n\t\t\t\"watchfully\": \"ADV\",\n\t\t\t\"e500's\": \"NOUN\",\n\t\t\t\"fazlur\": \"PROPN\",\n\t\t\t\"gandhi\": \"PROPN\",\n\t\t\t\"jazeera\": \"PROPN\",\n\t\t\t\"dunes\": \"NOUN\",\n\t\t\t\"likely\": \"ADJ\",\n\t\t\t\"authorised\": \"ADJ\",\n\t\t\t\"cousins\": \"NOUN\",\n\t\t\t\"washing-up\": \"NOUN\",\n\t\t\t\"____________________________________________________\": \"SYM\",\n\t\t\t\"endeavors\": \"NOUN\",\n\t\t\t\"reserve\": \"NOUN\",\n\t\t\t\"nah\": \"INTJ\",\n\t\t\t\"tschumi\": \"PROPN\",\n\t\t\t\"fry\": \"NOUN\",\n\t\t\t\"yelled\": \"VERB\",\n\t\t\t\"agricultural\": \"ADJ\",\n\t\t\t\"clothes-careless\": \"ADJ\",\n\t\t\t\"transparent\": \"ADJ\",\n\t\t\t\"rinse\": \"VERB\",\n\t\t\t\"conducive\": \"ADJ\",\n\t\t\t\"severly\": \"ADJ\",\n\t\t\t\"stimulant\": \"NOUN\",\n\t\t\t\"hackers\": \"NOUN\",\n\t\t\t\"serves\": \"VERB\",\n\t\t\t\"teenager\": \"NOUN\",\n\t\t\t\"º\": \"NOUN\",\n\t\t\t\"'02\": \"NUM\",\n\t\t\t\"boothbay\": \"PROPN\",\n\t\t\t\"pencil\": \"NOUN\",\n\t\t\t\"filo\": \"PROPN\",\n\t\t\t\"accessing\": \"VERB\",\n\t\t\t\"wolności\": \"PROPN\",\n\t\t\t\"2050\": \"NUM\",\n\t\t\t\"wrath\": \"NOUN\",\n\t\t\t\"fox\": \"NOUN\",\n\t\t\t\"levine\": \"PROPN\",\n\t\t\t\"osce\": \"PROPN\",\n\t\t\t\"112th\": \"ADJ\",\n\t\t\t\"tread\": \"VERB\",\n\t\t\t\"tuesday\": \"PROPN\",\n\t\t\t\"traffickers\": \"NOUN\",\n\t\t\t\"label\": \"NOUN\",\n\t\t\t\"instead\": \"ADV\",\n\t\t\t\"bans\": \"VERB\",\n\t\t\t\"http://www.natureandtech.com/?page_id=2200\": \"PROPN\",\n\t\t\t\"contrasted\": \"VERB\",\n\t\t\t\"hasina\": \"PROPN\",\n\t\t\t\"white-blond\": \"ADJ\",\n\t\t\t\"unacceptable\": \"ADJ\",\n\t\t\t\"allegation\": \"NOUN\",\n\t\t\t\"truly\": \"ADV\",\n\t\t\t\"entering\": \"VERB\",\n\t\t\t\"baby\": \"NOUN\",\n\t\t\t\"messaging\": \"NOUN\",\n\t\t\t\"perpetual\": \"ADJ\",\n\t\t\t\"amount\": \"NOUN\",\n\t\t\t\"coauthor\": \"NOUN\",\n\t\t\t\"automotive\": \"ADJ\",\n\t\t\t\"effectively\": \"ADV\",\n\t\t\t\"lathered\": \"VERB\",\n\t\t\t\"1696\": \"NUM\",\n\t\t\t\"gap\": \"NOUN\",\n\t\t\t\"remoras\": \"NOUN\",\n\t\t\t\"studies\": \"NOUN\",\n\t\t\t\"methodology\": \"NOUN\",\n\t\t\t\"analogy\": \"NOUN\",\n\t\t\t\"944-3737\": \"NUM\",\n\t\t\t\"father\": \"NOUN\",\n\t\t\t\"crystallize\": \"VERB\",\n\t\t\t\"cutoff\": \"NOUN\",\n\t\t\t\"35620\": \"NUM\",\n\t\t\t\"salt\": \"NOUN\",\n\t\t\t\"libeled\": \"VERB\",\n\t\t\t\"coming\": \"VERB\",\n\t\t\t\"timetable\": \"NOUN\",\n\t\t\t\"pointing\": \"VERB\",\n\t\t\t\"solving\": \"NOUN\",\n\t\t\t\"hermeticism\": \"PROPN\",\n\t\t\t\"gilbergd@sullcrom.com\": \"PROPN\",\n\t\t\t\"touristy\": \"ADJ\",\n\t\t\t\"tsar\": \"PROPN\",\n\t\t\t\"moritz\": \"PROPN\",\n\t\t\t\"lanky\": \"ADJ\",\n\t\t\t\"debated\": \"VERB\",\n\t\t\t\"stamping\": \"VERB\",\n\t\t\t\"evidently\": \"ADV\",\n\t\t\t\"networking\": \"NOUN\",\n\t\t\t\"zebra\": \"NOUN\",\n\t\t\t\"disperse\": \"VERB\",\n\t\t\t\"abbot\": \"PROPN\",\n\t\t\t\"gwen\": \"PROPN\",\n\t\t\t\"semi-automatic\": \"ADJ\",\n\t\t\t\"implement\": \"VERB\",\n\t\t\t\"clicker\": \"NOUN\",\n\t\t\t\"largest\": \"ADJ\",\n\t\t\t\"insulted\": \"VERB\",\n\t\t\t\"throws\": \"VERB\",\n\t\t\t\"mansions\": \"NOUN\",\n\t\t\t\"foxes\": \"NOUN\",\n\t\t\t\"lc\": \"NOUN\",\n\t\t\t\"tracy\": \"PROPN\",\n\t\t\t\"role\": \"NOUN\",\n\t\t\t\"unalterable\": \"ADJ\",\n\t\t\t\"row\": \"NOUN\",\n\t\t\t\"iraqi\": \"ADJ\",\n\t\t\t\"parking\": \"NOUN\",\n\t\t\t\"@w.a.b.b.y\": \"PROPN\",\n\t\t\t\"dating\": \"NOUN\",\n\t\t\t\"conclude\": \"VERB\",\n\t\t\t\"1937\": \"NUM\",\n\t\t\t\"circulation\": \"NOUN\",\n\t\t\t\"valued\": \"VERB\",\n\t\t\t\"reasonably\": \"ADV\",\n\t\t\t\"mini-mmpi\": \"PROPN\",\n\t\t\t\"enfiladed\": \"VERB\",\n\t\t\t\"assessment\": \"NOUN\",\n\t\t\t\"mac\": \"PROPN\",\n\t\t\t\"shoving\": \"VERB\",\n\t\t\t\"headache\": \"NOUN\",\n\t\t\t\"brute\": \"ADJ\",\n\t\t\t\"piping\": \"NOUN\",\n\t\t\t\"dings\": \"NOUN\",\n\t\t\t\"crawler\": \"NOUN\",\n\t\t\t\"consolidated\": \"VERB\",\n\t\t\t\"petit\": \"PROPN\",\n\t\t\t\"tots\": \"PROPN\",\n\t\t\t\"scammers\": \"NOUN\",\n\t\t\t\"herewith\": \"ADV\",\n\t\t\t\"deep-rooted\": \"ADJ\",\n\t\t\t\"11/10/2000\": \"NUM\",\n\t\t\t\"shrill\": \"ADJ\",\n\t\t\t\"breyers\": \"NOUN\",\n\t\t\t\"newsletter\": \"NOUN\",\n\t\t\t\"smeared\": \"VERB\",\n\t\t\t\"niklaus\": \"PROPN\",\n\t\t\t\"twenties\": \"NOUN\",\n\t\t\t\"wolens\": \"PROPN\",\n\t\t\t\"adjusting\": \"VERB\",\n\t\t\t\"quickest\": \"ADJ\",\n\t\t\t\"sumner\": \"PROPN\",\n\t\t\t\"goodness\": \"NOUN\",\n\t\t\t\"buy\": \"VERB\",\n\t\t\t\"longing\": \"VERB\",\n\t\t\t\"manhunt\": \"NOUN\",\n\t\t\t\"p.o.\": \"NOUN\",\n\t\t\t\"briggs\": \"PROPN\",\n\t\t\t\"sonia\": \"PROPN\",\n\t\t\t\"passionate\": \"ADJ\",\n\t\t\t\"eleventh\": \"ADJ\",\n\t\t\t\"classes\": \"NOUN\",\n\t\t\t\"dirtier\": \"ADJ\",\n\t\t\t\"e\": \"PROPN\",\n\t\t\t\"grimness\": \"NOUN\",\n\t\t\t\"pisces\": \"PROPN\",\n\t\t\t\"viewership\": \"NOUN\",\n\t\t\t\"hotels\": \"NOUN\",\n\t\t\t\"onesie\": \"NOUN\",\n\t\t\t\"post\": \"NOUN\",\n\t\t\t\"light\": \"NOUN\",\n\t\t\t\"metabolome\": \"NOUN\",\n\t\t\t\"length\": \"NOUN\",\n\t\t\t\"null\": \"NOUN\",\n\t\t\t\"unsociable\": \"ADJ\",\n\t\t\t\"teaspoons\": \"NOUN\",\n\t\t\t\"resided\": \"VERB\",\n\t\t\t\"density\": \"NOUN\",\n\t\t\t\"thrusting\": \"VERB\",\n\t\t\t\"slavery\": \"NOUN\",\n\t\t\t\"tajik\": \"PROPN\",\n\t\t\t\"educación\": \"PROPN\",\n\t\t\t\"pee\": \"VERB\",\n\t\t\t\"blimey\": \"INTJ\",\n\t\t\t\"http://isc.enron.com/site\": \"PROPN\",\n\t\t\t\"schemes\": \"NOUN\",\n\t\t\t\"plagiarized\": \"VERB\",\n\t\t\t\"vanishing\": \"VERB\",\n\t\t\t\"72\": \"NUM\",\n\t\t\t\"outcome\": \"NOUN\",\n\t\t\t\"sanctuary\": \"NOUN\",\n\t\t\t\"initial\": \"ADJ\",\n\t\t\t\"cellar\": \"NOUN\",\n\t\t\t\"distraction\": \"NOUN\",\n\t\t\t\"urban\": \"ADJ\",\n\t\t\t\"buckled\": \"VERB\",\n\t\t\t\"parts\": \"NOUN\",\n\t\t\t\"countryside\": \"NOUN\",\n\t\t\t\"sustain\": \"VERB\",\n\t\t\t\"ethics\": \"NOUN\",\n\t\t\t\"rib\": \"NOUN\",\n\t\t\t\"mischief\": \"NOUN\",\n\t\t\t\"spa\": \"NOUN\",\n\t\t\t\"schools\": \"NOUN\",\n\t\t\t\"04:49\": \"NUM\",\n\t\t\t\"sit\": \"VERB\",\n\t\t\t\"detonation\": \"NOUN\",\n\t\t\t\"redirect\": \"VERB\",\n\t\t\t\"realist\": \"NOUN\",\n\t\t\t\"cosmic\": \"ADJ\",\n\t\t\t\"cover\": \"VERB\",\n\t\t\t\"shahshahan\": \"PROPN\",\n\t\t\t\"swindles\": \"NOUN\",\n\t\t\t\"controversial\": \"ADJ\",\n\t\t\t\"transforms\": \"VERB\",\n\t\t\t\"passion\": \"NOUN\",\n\t\t\t\"madrasas\": \"NOUN\",\n\t\t\t\"tennessee\": \"PROPN\",\n\t\t\t\"locks\": \"NOUN\",\n\t\t\t\"bilked\": \"VERB\",\n\t\t\t\"encroaches\": \"VERB\",\n\t\t\t\"uterine\": \"NOUN\",\n\t\t\t\"sorted\": \"VERB\",\n\t\t\t\"1860s\": \"NOUN\",\n\t\t\t\"713\": \"NUM\",\n\t\t\t\"hirsch\": \"PROPN\",\n\t\t\t\"whi-\": \"INTJ\",\n\t\t\t\"clarify\": \"VERB\",\n\t\t\t\"us\": \"PRON\",\n\t\t\t\"tripping\": \"VERB\",\n\t\t\t\"diaper\": \"NOUN\",\n\t\t\t\"chardonnay\": \"PROPN\",\n\t\t\t\"athletes\": \"NOUN\",\n\t\t\t\"policeman\": \"NOUN\",\n\t\t\t\"waiters\": \"NOUN\",\n\t\t\t\"cord\": \"NOUN\",\n\t\t\t\"mid-80s\": \"NOUN\",\n\t\t\t\"lugli\": \"PROPN\",\n\t\t\t\"haifa\": \"PROPN\",\n\t\t\t\"confidentiality\": \"NOUN\",\n\t\t\t\"storing\": \"VERB\",\n\t\t\t\"garibaldi\": \"PROPN\",\n\t\t\t\"died\": \"VERB\",\n\t\t\t\"jumble\": \"NOUN\",\n\t\t\t\"appearing\": \"VERB\",\n\t\t\t\"mink\": \"NOUN\",\n\t\t\t\"heathrow\": \"PROPN\",\n\t\t\t\"http://www.ebay.co.uk/itm/250927098564?var=550057729382&sspagename=strk:mewax:it&_trksid=p3984.m1438.l2649#ht_\": \"PROPN\",\n\t\t\t\"walsingham\": \"PROPN\",\n\t\t\t\"biosphere\": \"NOUN\",\n\t\t\t\"x37047\": \"NOUN\",\n\t\t\t\"autonomous\": \"ADJ\",\n\t\t\t\"departures\": \"NOUN\",\n\t\t\t\"1957\": \"NUM\",\n\t\t\t\"beg\": \"VERB\",\n\t\t\t\"scenario\": \"NOUN\",\n\t\t\t\"edwin\": \"PROPN\",\n\t\t\t\"geneva\": \"PROPN\",\n\t\t\t\"thunder\": \"PROPN\",\n\t\t\t\"£\": \"SYM\",\n\t\t\t\"entie\": \"ADJ\",\n\t\t\t\"fixable\": \"ADJ\",\n\t\t\t\"painter\": \"NOUN\",\n\t\t\t\"bce\": \"NOUN\",\n\t\t\t\"bold\": \"ADJ\",\n\t\t\t\"maw\": \"NOUN\",\n\t\t\t\"antennae\": \"NOUN\",\n\t\t\t\"adelphi\": \"PROPN\",\n\t\t\t\"misstatements\": \"NOUN\",\n\t\t\t\"grog\": \"NOUN\",\n\t\t\t\"meal\": \"NOUN\",\n\t\t\t\"exulting\": \"VERB\",\n\t\t\t\"12.45\": \"NUM\",\n\t\t\t\"belong\": \"VERB\",\n\t\t\t\"befuddled\": \"VERB\",\n\t\t\t\"diagnosed\": \"VERB\",\n\t\t\t\"extinction\": \"NOUN\",\n\t\t\t\"roles\": \"NOUN\",\n\t\t\t\"hooting\": \"ADJ\",\n\t\t\t\"97\": \"NUM\",\n\t\t\t\"patron\": \"NOUN\",\n\t\t\t\"challenge\": \"NOUN\",\n\t\t\t\"reassurance\": \"NOUN\",\n\t\t\t\"ceremonious\": \"ADJ\",\n\t\t\t\"writings\": \"NOUN\",\n\t\t\t\"youths\": \"NOUN\",\n\t\t\t\"apache\": \"PROPN\",\n\t\t\t\"bmil\": \"PROPN\",\n\t\t\t\"barcelona\": \"PROPN\",\n\t\t\t\"jordan\": \"PROPN\",\n\t\t\t\"graves\": \"NOUN\",\n\t\t\t\"demise\": \"NOUN\",\n\t\t\t\"acknowledges\": \"VERB\",\n\t\t\t\"swiftly\": \"ADV\",\n\t\t\t\"#proposal\": \"PROPN\",\n\t\t\t\"reaping\": \"VERB\",\n\t\t\t\"simone\": \"PROPN\",\n\t\t\t\"haha\": \"INTJ\",\n\t\t\t\"gangly\": \"ADJ\",\n\t\t\t\"colder\": \"ADJ\",\n\t\t\t\"defining\": \"VERB\",\n\t\t\t\"kinsman\": \"NOUN\",\n\t\t\t\"cabalah\": \"NOUN\",\n\t\t\t\"estar\": \"PROPN\",\n\t\t\t\"filet\": \"PROPN\",\n\t\t\t\"9:30\": \"NUM\",\n\t\t\t\"lawyer\": \"NOUN\",\n\t\t\t\"permission\": \"NOUN\",\n\t\t\t\"glamour\": \"NOUN\",\n\t\t\t\"strap\": \"NOUN\",\n\t\t\t\"heartless\": \"ADJ\",\n\t\t\t\"marly\": \"PROPN\",\n\t\t\t\"sydney\": \"PROPN\",\n\t\t\t\"panted\": \"VERB\",\n\t\t\t\"pry\": \"NOUN\",\n\t\t\t\"reactions\": \"NOUN\",\n\t\t\t\"temple\": \"NOUN\",\n\t\t\t\"575,000\": \"NUM\",\n\t\t\t\"respectable\": \"ADJ\",\n\t\t\t\"surrounds\": \"VERB\",\n\t\t\t\"groom\": \"PROPN\",\n\t\t\t\"nickinator\": \"PROPN\",\n\t\t\t\"updating\": \"VERB\",\n\t\t\t\"knives\": \"NOUN\",\n\t\t\t\"mahesh\": \"PROPN\",\n\t\t\t\"paintings\": \"NOUN\",\n\t\t\t\"aggressive\": \"ADJ\",\n\t\t\t\"lifeboats\": \"NOUN\",\n\t\t\t\"tue.\": \"PROPN\",\n\t\t\t\"weather\": \"NOUN\",\n\t\t\t\"deeper\": \"ADJ\",\n\t\t\t\"alberta\": \"PROPN\",\n\t\t\t\"doris\": \"PROPN\",\n\t\t\t\"dominica\": \"PROPN\",\n\t\t\t\":)\": \"SYM\",\n\t\t\t\"rentals\": \"NOUN\",\n\t\t\t\"honey\": \"NOUN\",\n\t\t\t\"qua\": \"ADP\",\n\t\t\t\"sprinting\": \"VERB\",\n\t\t\t\"trainer\": \"NOUN\",\n\t\t\t\"610\": \"NUM\",\n\t\t\t\">\": \"PUNCT\",\n\t\t\t\"injection\": \"NOUN\",\n\t\t\t\"roderigo\": \"PROPN\",\n\t\t\t\"qtr3\": \"NOUN\",\n\t\t\t\"9\": \"NUM\",\n\t\t\t\"shadow\": \"NOUN\",\n\t\t\t\"b/t\": \"ADP\",\n\t\t\t\"satire\": \"NOUN\",\n\t\t\t\"shameful\": \"ADJ\",\n\t\t\t\"auditioned\": \"VERB\",\n\t\t\t\"pretending\": \"VERB\",\n\t\t\t\"sara\": \"PROPN\",\n\t\t\t\"offsets\": \"NOUN\",\n\t\t\t\"rigger\": \"NOUN\",\n\t\t\t\"browse\": \"VERB\",\n\t\t\t\"kind-faced\": \"ADJ\",\n\t\t\t\"obliquely\": \"ADV\",\n\t\t\t\"segments\": \"NOUN\",\n\t\t\t\"incident\": \"NOUN\",\n\t\t\t\"meier\": \"PROPN\",\n\t\t\t\"attain\": \"VERB\",\n\t\t\t\"extensible\": \"ADJ\",\n\t\t\t\"asylee\": \"NOUN\",\n\t\t\t\"robin\": \"PROPN\",\n\t\t\t\"marquis\": \"PROPN\",\n\t\t\t\"cultural\": \"ADJ\",\n\t\t\t\"panorama\": \"NOUN\",\n\t\t\t\"robotic\": \"ADJ\",\n\t\t\t\"lusted\": \"VERB\",\n\t\t\t\"beckons\": \"VERB\",\n\t\t\t\"suspects\": \"VERB\",\n\t\t\t\"cross-breeded\": \"VERB\",\n\t\t\t\"h-0209/99\": \"NUM\",\n\t\t\t\"searcher\": \"PROPN\",\n\t\t\t\"drafted\": \"VERB\",\n\t\t\t\"affairs\": \"NOUN\",\n\t\t\t\"non-veg\": \"ADJ\",\n\t\t\t\"extraordinarily\": \"ADV\",\n\t\t\t\"maize1_1017013\": \"PROPN\",\n\t\t\t\"trends\": \"NOUN\",\n\t\t\t\"cone\": \"PROPN\",\n\t\t\t\"homeowners\": \"NOUN\",\n\t\t\t\"quickenloans\": \"PROPN\",\n\t\t\t\"hospitable\": \"ADJ\",\n\t\t\t\"copyright\": \"NOUN\",\n\t\t\t\"sin\": \"NOUN\",\n\t\t\t\"compiling\": \"VERB\",\n\t\t\t\"smash\": \"VERB\",\n\t\t\t\"developed\": \"VERB\",\n\t\t\t\"pan-democrats\": \"NOUN\",\n\t\t\t\"81p/wild\": \"PROPN\",\n\t\t\t\"snow\": \"NOUN\",\n\t\t\t\"hyperlink\": \"PROPN\",\n\t\t\t\"fixations\": \"NOUN\",\n\t\t\t\"youngsteers\": \"NOUN\",\n\t\t\t\"bulbous\": \"ADJ\",\n\t\t\t\"wai-keung\": \"PROPN\",\n\t\t\t\"engine\": \"NOUN\",\n\t\t\t\"lion\": \"NOUN\",\n\t\t\t\"sweety\": \"NOUN\",\n\t\t\t\"fruitless\": \"ADJ\",\n\t\t\t\"1991\": \"NUM\",\n\t\t\t\"part\": \"NOUN\",\n\t\t\t\"ending\": \"VERB\",\n\t\t\t\"socal\": \"PROPN\",\n\t\t\t\"turns\": \"VERB\",\n\t\t\t\"spies\": \"NOUN\",\n\t\t\t\"ruby\": \"NOUN\",\n\t\t\t\"committees\": \"NOUN\",\n\t\t\t\"applying\": \"VERB\",\n\t\t\t\"neurology\": \"NOUN\",\n\t\t\t\"hickenlooper\": \"PROPN\",\n\t\t\t\"snarl\": \"NOUN\",\n\t\t\t\"bruna\": \"PROPN\",\n\t\t\t\"notably\": \"ADV\",\n\t\t\t\"sixth\": \"ADJ\",\n\t\t\t\"mysteriously\": \"ADV\",\n\t\t\t\"udorn\": \"PROPN\",\n\t\t\t\"resourceful\": \"ADJ\",\n\t\t\t\"myth\": \"NOUN\",\n\t\t\t\"bouncy\": \"ADJ\",\n\t\t\t\"ruts\": \"NOUN\",\n\t\t\t\"progression\": \"NOUN\",\n\t\t\t\"0590258046\": \"NUM\",\n\t\t\t\"exeter\": \"PROPN\",\n\t\t\t\"earlier\": \"ADV\",\n\t\t\t\"diminish\": \"VERB\",\n\t\t\t\"jude\": \"PROPN\",\n\t\t\t\"rhythmically\": \"ADV\",\n\t\t\t\"bounds\": \"NOUN\",\n\t\t\t\"replications\": \"NOUN\",\n\t\t\t\"protection\": \"NOUN\",\n\t\t\t\"referring\": \"VERB\",\n\t\t\t\"bake\": \"VERB\",\n\t\t\t\"snored\": \"VERB\",\n\t\t\t\"manakau\": \"PROPN\",\n\t\t\t\"windsor\": \"PROPN\",\n\t\t\t\"personable\": \"ADJ\",\n\t\t\t\"virulent\": \"ADJ\",\n\t\t\t\"sabine\": \"PROPN\",\n\t\t\t\"pixels\": \"NOUN\",\n\t\t\t\"sr\": \"ADJ\",\n\t\t\t\"flops\": \"VERB\",\n\t\t\t\"anatole\": \"PROPN\",\n\t\t\t\"scale\": \"NOUN\",\n\t\t\t\"nadu\": \"PROPN\",\n\t\t\t\"airholes\": \"NOUN\",\n\t\t\t\"deplorable\": \"ADJ\",\n\t\t\t\"fws\": \"PROPN\",\n\t\t\t\"curves\": \"NOUN\",\n\t\t\t\"uninterrupted\": \"ADJ\",\n\t\t\t\"launder\": \"VERB\",\n\t\t\t\"wooden\": \"ADJ\",\n\t\t\t\"211\": \"NUM\",\n\t\t\t\"assertions\": \"NOUN\",\n\t\t\t\"suspension\": \"NOUN\",\n\t\t\t\"speckled\": \"VERB\",\n\t\t\t\"durability\": \"NOUN\",\n\t\t\t\"25.1\": \"NUM\",\n\t\t\t\"unknowledgeable\": \"ADJ\",\n\t\t\t\"lucio\": \"PROPN\",\n\t\t\t\"1605\": \"NUM\",\n\t\t\t\"pacify\": \"VERB\",\n\t\t\t\"impact\": \"NOUN\",\n\t\t\t\"jet-black\": \"ADJ\",\n\t\t\t\"non-profit\": \"ADJ\",\n\t\t\t\"addition\": \"NOUN\",\n\t\t\t\"japanese\": \"ADJ\",\n\t\t\t\"incapacitated\": \"VERB\",\n\t\t\t\"112\": \"NUM\",\n\t\t\t\"thebaid\": \"PROPN\",\n\t\t\t\"exceeds\": \"VERB\",\n\t\t\t\"oriental\": \"ADJ\",\n\t\t\t\"no\": \"DET\",\n\t\t\t\"danette\": \"PROPN\",\n\t\t\t\"winging\": \"VERB\",\n\t\t\t\"tower\": \"NOUN\",\n\t\t\t\"manipulating\": \"VERB\",\n\t\t\t\"hopping\": \"ADJ\",\n\t\t\t\"hateful\": \"ADJ\",\n\t\t\t\"plated\": \"VERB\",\n\t\t\t\"yak\": \"PROPN\",\n\t\t\t\"cavalcade\": \"PROPN\",\n\t\t\t\"immutability\": \"NOUN\",\n\t\t\t\"plural\": \"ADJ\",\n\t\t\t\"militarily\": \"ADV\",\n\t\t\t\"stopping\": \"VERB\",\n\t\t\t\"realities\": \"NOUN\",\n\t\t\t\"amnesty\": \"PROPN\",\n\t\t\t\"garrison\": \"NOUN\",\n\t\t\t\"symbol\": \"NOUN\",\n\t\t\t\"requirements\": \"NOUN\",\n\t\t\t\"favourite\": \"ADJ\",\n\t\t\t\"accessible\": \"ADJ\",\n\t\t\t\"obscured\": \"VERB\",\n\t\t\t\"slumped\": \"VERB\",\n\t\t\t\"satisfying\": \"VERB\",\n\t\t\t\"nichols\": \"PROPN\",\n\t\t\t\"valuation\": \"NOUN\",\n\t\t\t\"matthew\": \"PROPN\",\n\t\t\t\"domain\": \"NOUN\",\n\t\t\t\"prosecutors\": \"NOUN\",\n\t\t\t\"attend\": \"VERB\",\n\t\t\t\"abundant\": \"ADJ\",\n\t\t\t\"ballast\": \"NOUN\",\n\t\t\t\"reef\": \"NOUN\",\n\t\t\t\"disagreement\": \"NOUN\",\n\t\t\t\"austria\": \"PROPN\",\n\t\t\t\"parma\": \"PROPN\",\n\t\t\t\"exclusive\": \"ADJ\",\n\t\t\t\"anon\": \"PROPN\",\n\t\t\t\"shutters\": \"NOUN\",\n\t\t\t\"gardening\": \"NOUN\",\n\t\t\t\"volumes\": \"NOUN\",\n\t\t\t\"resignation\": \"NOUN\",\n\t\t\t\"gaunt\": \"NOUN\",\n\t\t\t\"fairchild\": \"PROPN\",\n\t\t\t\"67\": \"NUM\",\n\t\t\t\"affirming\": \"VERB\",\n\t\t\t\"html\": \"PROPN\",\n\t\t\t\"chi-fung\": \"PROPN\",\n\t\t\t\"appointees\": \"NOUN\",\n\t\t\t\"disastrous\": \"ADJ\",\n\t\t\t\"filter\": \"NOUN\",\n\t\t\t\"11:36\": \"NUM\",\n\t\t\t\"conspirator\": \"NOUN\",\n\t\t\t\"basement\": \"NOUN\",\n\t\t\t\"libby\": \"PROPN\",\n\t\t\t\"moslems\": \"PROPN\",\n\t\t\t\"ballads\": \"NOUN\",\n\t\t\t\"857-771\": \"NUM\",\n\t\t\t\"4641\": \"NUM\",\n\t\t\t\"booz\": \"PROPN\",\n\t\t\t\"welfare\": \"NOUN\",\n\t\t\t\"pockets\": \"NOUN\",\n\t\t\t\"featurelessness\": \"NOUN\",\n\t\t\t\"moves\": \"NOUN\",\n\t\t\t\"stylistic\": \"ADJ\",\n\t\t\t\"rout\": \"NOUN\",\n\t\t\t\"blame\": \"VERB\",\n\t\t\t\"animals\": \"NOUN\",\n\t\t\t\"pro-beijing\": \"ADJ\",\n\t\t\t\"ensure\": \"VERB\",\n\t\t\t\"signature\": \"NOUN\",\n\t\t\t\"’\": \"PART\",\n\t\t\t\"editors\": \"NOUN\",\n\t\t\t\"exocets\": \"PROPN\",\n\t\t\t\"targeted\": \"VERB\",\n\t\t\t\"bankrupt\": \"ADJ\",\n\t\t\t\"climates\": \"NOUN\",\n\t\t\t\"disobedience\": \"NOUN\",\n\t\t\t\"cuyahoga\": \"PROPN\",\n\t\t\t\"dillards\": \"PROPN\",\n\t\t\t\"scholar\": \"NOUN\",\n\t\t\t\"thigh\": \"NOUN\",\n\t\t\t\"castration\": \"NOUN\",\n\t\t\t\"ruminate\": \"VERB\",\n\t\t\t\"keepers\": \"NOUN\",\n\t\t\t\"iraq\": \"PROPN\",\n\t\t\t\"hangar\": \"NOUN\",\n\t\t\t\"packer\": \"NOUN\",\n\t\t\t\"trembled\": \"VERB\",\n\t\t\t\"normal\": \"ADJ\",\n\t\t\t\"mole\": \"NOUN\",\n\t\t\t\"happens\": \"VERB\",\n\t\t\t\"solicitous\": \"ADJ\",\n\t\t\t\"bts\": \"PROPN\",\n\t\t\t\"banks\": \"NOUN\",\n\t\t\t\"coed\": \"ADJ\",\n\t\t\t\"vc\": \"PROPN\",\n\t\t\t\"carved\": \"VERB\",\n\t\t\t\"cycled\": \"VERB\",\n\t\t\t\"ipanema\": \"PROPN\",\n\t\t\t\"chem\": \"NOUN\",\n\t\t\t\"wade\": \"PROPN\",\n\t\t\t\"rosemont\": \"PROPN\",\n\t\t\t\"innovators\": \"NOUN\",\n\t\t\t\"anxieties\": \"NOUN\",\n\t\t\t\"instincts\": \"NOUN\",\n\t\t\t\"welcoming\": \"ADJ\",\n\t\t\t\"woken\": \"VERB\",\n\t\t\t\"tsm\": \"PROPN\",\n\t\t\t\"http://www.mikegigi.com/techspec.htm#selctemp\": \"PROPN\",\n\t\t\t\"smack\": \"PROPN\",\n\t\t\t\"wave\": \"NOUN\",\n\t\t\t\"bos\": \"PROPN\",\n\t\t\t\"14:00\": \"NUM\",\n\t\t\t\"exploiting\": \"VERB\",\n\t\t\t\"bumped\": \"VERB\",\n\t\t\t\"hurtled\": \"VERB\",\n\t\t\t\"transformations\": \"NOUN\",\n\t\t\t\"viscosity\": \"NOUN\",\n\t\t\t\"soil\": \"NOUN\",\n\t\t\t\"intense\": \"ADJ\",\n\t\t\t\"ascetics\": \"NOUN\",\n\t\t\t\"hear\": \"VERB\",\n\t\t\t\"usally\": \"ADV\",\n\t\t\t\"ruhollah\": \"PROPN\",\n\t\t\t\"professionals\": \"NOUN\",\n\t\t\t\"sheltering\": \"VERB\",\n\t\t\t\"double-chinned\": \"ADJ\",\n\t\t\t\"is\": \"AUX\",\n\t\t\t\"kreyol\": \"PROPN\",\n\t\t\t\"incrementally\": \"ADV\",\n\t\t\t\"freeze\": \"VERB\",\n\t\t\t\"curled\": \"VERB\",\n\t\t\t\"najib\": \"PROPN\",\n\t\t\t\"needle\": \"NOUN\",\n\t\t\t\"lysa\": \"PROPN\",\n\t\t\t\"reflibpaths\": \"NOUN\",\n\t\t\t\"payer\": \"NOUN\",\n\t\t\t\"via\": \"ADP\",\n\t\t\t\"grimm\": \"PROPN\",\n\t\t\t\"dangerou-\": \"ADJ\",\n\t\t\t\"`s\": \"AUX\",\n\t\t\t\"unsolved\": \"ADJ\",\n\t\t\t\"with\": \"ADP\",\n\t\t\t\"raindrops\": \"NOUN\",\n\t\t\t\"relevance\": \"NOUN\",\n\t\t\t\"africa\": \"PROPN\",\n\t\t\t\"crucial\": \"ADJ\",\n\t\t\t\"limp\": \"ADJ\",\n\t\t\t\"gasp\": \"NOUN\",\n\t\t\t\"refrig.\": \"NOUN\",\n\t\t\t\"jefferson\": \"PROPN\",\n\t\t\t\"sleep\": \"NOUN\",\n\t\t\t\"defense\": \"NOUN\",\n\t\t\t\"campenni\": \"PROPN\",\n\t\t\t\"suited\": \"ADJ\",\n\t\t\t\"drags\": \"VERB\",\n\t\t\t\"sickles\": \"NOUN\",\n\t\t\t\"islands\": \"NOUN\",\n\t\t\t\"csa\": \"NOUN\",\n\t\t\t\"harness\": \"NOUN\",\n\t\t\t\"drawn\": \"VERB\",\n\t\t\t\"crimes\": \"NOUN\",\n\t\t\t\"correctly\": \"ADV\",\n\t\t\t\"situations\": \"NOUN\",\n\t\t\t\"autofilter\": \"NOUN\",\n\t\t\t\"disband\": \"VERB\",\n\t\t\t\"pig\": \"NOUN\",\n\t\t\t\"underdog\": \"NOUN\",\n\t\t\t\"peas\": \"NOUN\",\n\t\t\t\"10:30\": \"NUM\",\n\t\t\t\"life\": \"NOUN\",\n\t\t\t\"i.s.c.\": \"NOUN\",\n\t\t\t\"felicia\": \"PROPN\",\n\t\t\t\"it's\": \"PRON\",\n\t\t\t\"preposterous\": \"ADJ\",\n\t\t\t\"compare\": \"VERB\",\n\t\t\t\"planting\": \"VERB\",\n\t\t\t\"anachronistic\": \"ADJ\",\n\t\t\t\"charts\": \"NOUN\",\n\t\t\t\"dispersal\": \"NOUN\",\n\t\t\t\"inch\": \"NOUN\",\n\t\t\t\"stampedes\": \"NOUN\",\n\t\t\t\"copyrightx\": \"PROPN\",\n\t\t\t\"kirk\": \"PROPN\",\n\t\t\t\"non-commercial\": \"ADJ\",\n\t\t\t\"atrophy\": \"NOUN\",\n\t\t\t\"argument\": \"NOUN\",\n\t\t\t\"eat-e\": \"VERB\",\n\t\t\t\"yanhee\": \"PROPN\",\n\t\t\t\"jetty\": \"NOUN\",\n\t\t\t\"speaks\": \"VERB\",\n\t\t\t\"subterfuge\": \"NOUN\",\n\t\t\t\"overt\": \"ADJ\",\n\t\t\t\"giap\": \"PROPN\",\n\t\t\t\"reticence\": \"NOUN\",\n\t\t\t\"transferred\": \"VERB\",\n\t\t\t\"thirds\": \"NOUN\",\n\t\t\t\"revoke\": \"PROPN\",\n\t\t\t\"proposed\": \"VERB\",\n\t\t\t\"28,000\": \"NUM\",\n\t\t\t\"shoved\": \"VERB\",\n\t\t\t\"whitish\": \"ADJ\",\n\t\t\t\"vast\": \"ADJ\",\n\t\t\t\"resounding\": \"ADJ\",\n\t\t\t\"wildland\": \"NOUN\",\n\t\t\t\"totalitarian\": \"ADJ\",\n\t\t\t\"lives\": \"NOUN\",\n\t\t\t\"mahal\": \"PROPN\",\n\t\t\t\"11:23\": \"NUM\",\n\t\t\t\"accommodations\": \"NOUN\",\n\t\t\t\"uth's\": \"NOUN\",\n\t\t\t\"triggered\": \"VERB\",\n\t\t\t\"jk\": \"PROPN\",\n\t\t\t\"mountainous\": \"ADJ\",\n\t\t\t\"outlining\": \"VERB\",\n\t\t\t\"dissent\": \"NOUN\",\n\t\t\t\"property\": \"NOUN\",\n\t\t\t\"morelias\": \"NOUN\",\n\t\t\t\"colorado\": \"PROPN\",\n\t\t\t\"flaxen\": \"ADJ\",\n\t\t\t\"focusing\": \"VERB\",\n\t\t\t\"lobster\": \"NOUN\",\n\t\t\t\"pettigrew\": \"PROPN\",\n\t\t\t\"'ye\": \"PRON\",\n\t\t\t\"magnificent\": \"ADJ\",\n\t\t\t\"timeframe\": \"NOUN\",\n\t\t\t\"cauldron\": \"NOUN\",\n\t\t\t\"go-\": \"INTJ\",\n\t\t\t\"264\": \"NUM\",\n\t\t\t\"discussed\": \"VERB\",\n\t\t\t\"tibet\": \"PROPN\",\n\t\t\t\"crafter\": \"NOUN\",\n\t\t\t\"apatow\": \"PROPN\",\n\t\t\t\"cinsault\": \"PROPN\",\n\t\t\t\"stunk\": \"VERB\",\n\t\t\t\"revert\": \"VERB\",\n\t\t\t\"shivering\": \"VERB\",\n\t\t\t\"sony\": \"PROPN\",\n\t\t\t\"cashout\": \"NOUN\",\n\t\t\t\"governorates\": \"NOUN\",\n\t\t\t\"dangled\": \"VERB\",\n\t\t\t\"pertinent\": \"ADJ\",\n\t\t\t\"outshone\": \"VERB\",\n\t\t\t\"frightening\": \"ADJ\",\n\t\t\t\"mentor\": \"NOUN\",\n\t\t\t\"conversion\": \"NOUN\",\n\t\t\t\"8:30\": \"NUM\",\n\t\t\t\"mumbo\": \"NOUN\",\n\t\t\t\"11/29/2000\": \"NUM\",\n\t\t\t\"travelling\": \"VERB\",\n\t\t\t\"cascade\": \"NOUN\",\n\t\t\t\"defendants\": \"NOUN\",\n\t\t\t\"blogs\": \"NOUN\",\n\t\t\t\"liberalisation\": \"NOUN\",\n\t\t\t\"stature\": \"NOUN\",\n\t\t\t\"nut\": \"NOUN\",\n\t\t\t\"medium\": \"ADJ\",\n\t\t\t\"stalls\": \"NOUN\",\n\t\t\t\"starchy\": \"ADJ\",\n\t\t\t\"shrubs\": \"NOUN\",\n\t\t\t\"desired\": \"VERB\",\n\t\t\t\"instrumentation\": \"NOUN\",\n\t\t\t\"heagle\": \"PROPN\",\n\t\t\t\"traditionally\": \"ADV\",\n\t\t\t\"holdup\": \"NOUN\",\n\t\t\t\"clairmont\": \"PROPN\",\n\t\t\t\"outrageously\": \"ADV\",\n\t\t\t\"cupcake\": \"NOUN\",\n\t\t\t\"enrich\": \"VERB\",\n\t\t\t\"h2o-esque\": \"ADJ\",\n\t\t\t\"pot\": \"NOUN\",\n\t\t\t\"dividing\": \"VERB\",\n\t\t\t\"subdued\": \"ADJ\",\n\t\t\t\"acer\": \"PROPN\",\n\t\t\t\"november\": \"PROPN\",\n\t\t\t\"snorkeling\": \"NOUN\",\n\t\t\t\"hundredths\": \"NOUN\",\n\t\t\t\"screwing\": \"VERB\",\n\t\t\t\"enculturation\": \"NOUN\",\n\t\t\t\"brawler\": \"PROPN\",\n\t\t\t\"russ\": \"PROPN\",\n\t\t\t\"overland\": \"ADJ\",\n\t\t\t\"alcoholism\": \"NOUN\",\n\t\t\t\"strengthening\": \"VERB\",\n\t\t\t\"delays\": \"NOUN\",\n\t\t\t\"decay\": \"PROPN\",\n\t\t\t\"setups\": \"NOUN\",\n\t\t\t\"perfectionism\": \"NOUN\",\n\t\t\t\"pen\": \"NOUN\",\n\t\t\t\"axial\": \"ADJ\",\n\t\t\t\"nordstrom\": \"PROPN\",\n\t\t\t\"prising\": \"VERB\",\n\t\t\t\"interact\": \"VERB\",\n\t\t\t\"hajj\": \"PROPN\",\n\t\t\t\"popes\": \"NOUN\",\n\t\t\t\"nylons\": \"NOUN\",\n\t\t\t\"albatross\": \"PROPN\",\n\t\t\t\"communists\": \"PROPN\",\n\t\t\t\"conjunctions\": \"NOUN\",\n\t\t\t\"wagin\": \"VERB\",\n\t\t\t\"sauvignon\": \"PROPN\",\n\t\t\t\"marc\": \"PROPN\",\n\t\t\t\"fundamentally\": \"ADV\",\n\t\t\t\"limestone\": \"NOUN\",\n\t\t\t\"voyage\": \"NOUN\",\n\t\t\t\"identification\": \"NOUN\",\n\t\t\t\"workplace\": \"NOUN\",\n\t\t\t\"wondering\": \"VERB\",\n\t\t\t\"texting\": \"NOUN\",\n\t\t\t\"lindsey\": \"PROPN\",\n\t\t\t\"sus\": \"ADJ\",\n\t\t\t\"spaghetti\": \"NOUN\",\n\t\t\t\"240\": \"NUM\",\n\t\t\t\"pomodoro\": \"PROPN\",\n\t\t\t\"clarified\": \"VERB\",\n\t\t\t\"batteries\": \"NOUN\",\n\t\t\t\"wall\": \"NOUN\",\n\t\t\t\"ulistic\": \"PROPN\",\n\t\t\t\"ibm\": \"PROPN\",\n\t\t\t\"apple\": \"NOUN\",\n\t\t\t\"premier\": \"ADJ\",\n\t\t\t\"gryffindor\": \"PROPN\",\n\t\t\t\"secondary\": \"ADJ\",\n\t\t\t\"removes\": \"VERB\",\n\t\t\t\"supports\": \"VERB\",\n\t\t\t\"work\": \"NOUN\",\n\t\t\t\"socialising\": \"VERB\",\n\t\t\t\"waste\": \"NOUN\",\n\t\t\t\"disorderly\": \"ADJ\",\n\t\t\t\"goode\": \"PROPN\",\n\t\t\t\"1214\": \"NUM\",\n\t\t\t\"engineering\": \"NOUN\",\n\t\t\t\"readers\": \"NOUN\",\n\t\t\t\"gem\": \"NOUN\",\n\t\t\t\"bonus\": \"NOUN\",\n\t\t\t\"especial\": \"ADJ\",\n\t\t\t\"carafe\": \"NOUN\",\n\t\t\t\"gulfport\": \"PROPN\",\n\t\t\t\"serivce\": \"NOUN\",\n\t\t\t\"thames\": \"PROPN\",\n\t\t\t\"goonewardena\": \"PROPN\",\n\t\t\t\"had\": \"AUX\",\n\t\t\t\"decor\": \"NOUN\",\n\t\t\t\"anti-essentialist\": \"ADJ\",\n\t\t\t\"fulfil\": \"VERB\",\n\t\t\t\"halt\": \"NOUN\",\n\t\t\t\"ranger\": \"NOUN\",\n\t\t\t\"pirates\": \"PROPN\",\n\t\t\t\"em\": \"PRON\",\n\t\t\t\"comp.\": \"NOUN\",\n\t\t\t\"co-founded\": \"VERB\",\n\t\t\t\"touchez\": \"PROPN\",\n\t\t\t\"nord\": \"PROPN\",\n\t\t\t\"implementing\": \"VERB\",\n\t\t\t\"clothing\": \"NOUN\",\n\t\t\t\"expands\": \"VERB\",\n\t\t\t\"alternated\": \"VERB\",\n\t\t\t\"solids\": \"NOUN\",\n\t\t\t\"rbis\": \"NOUN\",\n\t\t\t\"cave\": \"NOUN\",\n\t\t\t\"fluids\": \"NOUN\",\n\t\t\t\"assisting\": \"VERB\",\n\t\t\t\"prosecutor\": \"NOUN\",\n\t\t\t\"adaptive\": \"ADJ\",\n\t\t\t\"shopping\": \"NOUN\",\n\t\t\t\"faulkner\": \"PROPN\",\n\t\t\t\"embarrassment\": \"NOUN\",\n\t\t\t\"factor\": \"NOUN\",\n\t\t\t\"mineral\": \"NOUN\",\n\t\t\t\"protein\": \"NOUN\",\n\t\t\t\"1381\": \"NUM\",\n\t\t\t\"nightlife\": \"NOUN\",\n\t\t\t\"tricky\": \"ADJ\",\n\t\t\t\"impressionist\": \"ADJ\",\n\t\t\t\"guadeloupe\": \"PROPN\",\n\t\t\t\"stewardesses\": \"NOUN\",\n\t\t\t\"s65\": \"SYM\",\n\t\t\t\"opera\": \"PROPN\",\n\t\t\t\"allen\": \"PROPN\",\n\t\t\t\"cages\": \"NOUN\",\n\t\t\t\"embraced\": \"VERB\",\n\t\t\t\"loud\": \"ADJ\",\n\t\t\t\"walloch\": \"PROPN\",\n\t\t\t\"hegemonic\": \"ADJ\",\n\t\t\t\"intersect\": \"VERB\",\n\t\t\t\"lebanese\": \"ADJ\",\n\t\t\t\"fleets\": \"NOUN\",\n\t\t\t\"capita\": \"NOUN\",\n\t\t\t\"crying\": \"VERB\",\n\t\t\t\"lankan\": \"ADJ\",\n\t\t\t\"decipher\": \"VERB\",\n\t\t\t\"barrack-like\": \"ADJ\",\n\t\t\t\"causation\": \"NOUN\",\n\t\t\t\"opinions\": \"NOUN\",\n\t\t\t\"norway\": \"PROPN\",\n\t\t\t\"votes\": \"NOUN\",\n\t\t\t\"bowen\": \"PROPN\",\n\t\t\t\"worms\": \"NOUN\",\n\t\t\t\"unapologetic\": \"ADJ\",\n\t\t\t\"verdict\": \"NOUN\",\n\t\t\t\"modicum\": \"NOUN\",\n\t\t\t\"h-\": \"INTJ\",\n\t\t\t\"su\": \"PROPN\",\n\t\t\t\"muggle\": \"NOUN\",\n\t\t\t\"strongid\": \"PROPN\",\n\t\t\t\"combining\": \"VERB\",\n\t\t\t\"disposition\": \"NOUN\",\n\t\t\t\"runtime\": \"NOUN\",\n\t\t\t\"toasting\": \"VERB\",\n\t\t\t\"indefinitely\": \"ADV\",\n\t\t\t\"synge\": \"PROPN\",\n\t\t\t\"refurb\": \"NOUN\",\n\t\t\t\"arabs\": \"PROPN\",\n\t\t\t\"visa\": \"NOUN\",\n\t\t\t\"washington\": \"PROPN\",\n\t\t\t\"http://www.netpetshop.co.uk/p-19500-savic-chichi-2-chinchilla-rat-degu-ferret-cage.aspx\": \"PROPN\",\n\t\t\t\"meidan\": \"PROPN\",\n\t\t\t\"conceived\": \"VERB\",\n\t\t\t\"’72\": \"NUM\",\n\t\t\t\"congress\": \"PROPN\",\n\t\t\t\"immovable\": \"ADJ\",\n\t\t\t\"hacker\": \"NOUN\",\n\t\t\t\"predatory\": \"ADJ\",\n\t\t\t\"compress\": \"VERB\",\n\t\t\t\"grace\": \"NOUN\",\n\t\t\t\"stupidity\": \"NOUN\",\n\t\t\t\"brainwashed\": \"VERB\",\n\t\t\t\"sulfur\": \"NOUN\",\n\t\t\t\"suites\": \"NOUN\",\n\t\t\t\"saviour\": \"NOUN\",\n\t\t\t\"dividends\": \"NOUN\",\n\t\t\t\"2301\": \"NUM\",\n\t\t\t\"minarets\": \"NOUN\",\n\t\t\t\"collaborate\": \"VERB\",\n\t\t\t\"entered\": \"VERB\",\n\t\t\t\"specified\": \"VERB\",\n\t\t\t\"riddled\": \"ADJ\",\n\t\t\t\"wasted\": \"VERB\",\n\t\t\t\"warwickshire\": \"PROPN\",\n\t\t\t\"catacomb\": \"NOUN\",\n\t\t\t\"sentiments\": \"NOUN\",\n\t\t\t\"naji\": \"PROPN\",\n\t\t\t\"roger\": \"PROPN\",\n\t\t\t\"assert\": \"VERB\",\n\t\t\t\"coworkers\": \"NOUN\",\n\t\t\t\"secular\": \"ADJ\",\n\t\t\t\"paula\": \"PROPN\",\n\t\t\t\"baba\": \"PROPN\",\n\t\t\t\"displacing\": \"VERB\",\n\t\t\t\"daddy\": \"NOUN\",\n\t\t\t\"nieces\": \"NOUN\",\n\t\t\t\"dorm\": \"NOUN\",\n\t\t\t\"frequent\": \"ADJ\",\n\t\t\t\"gda\": \"NOUN\",\n\t\t\t\"labat\": \"PROPN\",\n\t\t\t\"baathist\": \"ADJ\",\n\t\t\t\"services\": \"NOUN\",\n\t\t\t\"renovated\": \"VERB\",\n\t\t\t\"poorly\": \"ADV\",\n\t\t\t\"younis\": \"PROPN\",\n\t\t\t\"stone\": \"NOUN\",\n\t\t\t\"fold\": \"NOUN\",\n\t\t\t\"locker\": \"NOUN\",\n\t\t\t\"rae\": \"PROPN\",\n\t\t\t\"glove\": \"NOUN\",\n\t\t\t\"underpin\": \"VERB\",\n\t\t\t\"negative\": \"ADJ\",\n\t\t\t\"chops\": \"NOUN\",\n\t\t\t\"curious\": \"ADJ\",\n\t\t\t\"creeping\": \"VERB\",\n\t\t\t\"assegais\": \"NOUN\",\n\t\t\t\"25\": \"NUM\",\n\t\t\t\"flexion\": \"NOUN\",\n\t\t\t\"festus\": \"PROPN\",\n\t\t\t\"10/20/2000\": \"NUM\",\n\t\t\t\"wears\": \"VERB\",\n\t\t\t\"pilgrams\": \"NOUN\",\n\t\t\t\"constitutional\": \"ADJ\",\n\t\t\t\"races\": \"NOUN\",\n\t\t\t\"maldives\": \"PROPN\",\n\t\t\t\"industries\": \"NOUN\",\n\t\t\t\"tight\": \"ADJ\",\n\t\t\t\"ruled\": \"VERB\",\n\t\t\t\"neighbors\": \"NOUN\",\n\t\t\t\"1835\": \"NUM\",\n\t\t\t\"nobler\": \"ADJ\",\n\t\t\t\"brokers\": \"NOUN\",\n\t\t\t\"mugs\": \"NOUN\",\n\t\t\t\"queer\": \"ADJ\",\n\t\t\t\"888.916.7184\": \"NUM\",\n\t\t\t\"chemically\": \"ADV\",\n\t\t\t\"presciently\": \"ADV\",\n\t\t\t\"x33907\": \"NOUN\",\n\t\t\t\"physical\": \"ADJ\",\n\t\t\t\"digest\": \"VERB\",\n\t\t\t\"phenomenon\": \"NOUN\",\n\t\t\t\"lunar\": \"ADJ\",\n\t\t\t\"stl\": \"NOUN\",\n\t\t\t\"****\": \"PUNCT\",\n\t\t\t\"inconvenient\": \"ADJ\",\n\t\t\t\"cfl\": \"NOUN\",\n\t\t\t\"limited\": \"ADJ\",\n\t\t\t\"lamb\": \"NOUN\",\n\t\t\t\"lull\": \"NOUN\",\n\t\t\t\"wish\": \"VERB\",\n\t\t\t\"orwell\": \"PROPN\",\n\t\t\t\"meditate\": \"VERB\",\n\t\t\t\"thane\": \"PROPN\",\n\t\t\t\"850\": \"NUM\",\n\t\t\t\"private\": \"ADJ\",\n\t\t\t\"hiking\": \"NOUN\",\n\t\t\t\"deffner\": \"PROPN\",\n\t\t\t\"louder\": \"ADJ\",\n\t\t\t\"colourful\": \"ADJ\",\n\t\t\t\"09\": \"NUM\",\n\t\t\t\"mounds\": \"NOUN\",\n\t\t\t\"instruction\": \"NOUN\",\n\t\t\t\"abba\": \"PROPN\",\n\t\t\t\"25/01/2001\": \"NUM\",\n\t\t\t\"island\": \"NOUN\",\n\t\t\t\"hillside\": \"NOUN\",\n\t\t\t\"offended\": \"VERB\",\n\t\t\t\"feedback\": \"NOUN\",\n\t\t\t\"principle\": \"NOUN\",\n\t\t\t\"bourgeois\": \"ADJ\",\n\t\t\t\"snags\": \"NOUN\",\n\t\t\t\"addicted\": \"ADJ\",\n\t\t\t\"throwing\": \"VERB\",\n\t\t\t\"kong\": \"PROPN\",\n\t\t\t\"palatial\": \"ADJ\",\n\t\t\t\"gai-hinnom\": \"PROPN\",\n\t\t\t\"flavored\": \"VERB\",\n\t\t\t\"winner\": \"NOUN\",\n\t\t\t\"leaks\": \"NOUN\",\n\t\t\t\"ridiculing\": \"VERB\",\n\t\t\t\"outage\": \"NOUN\",\n\t\t\t\"mcgrath\": \"PROPN\",\n\t\t\t\"ld2d-#69345-1.doc\": \"NOUN\",\n\t\t\t\"justifies\": \"VERB\",\n\t\t\t\"apr\": \"PROPN\",\n\t\t\t\"sholids\": \"NOUN\",\n\t\t\t\"·\": \"PUNCT\",\n\t\t\t\"nuisance\": \"NOUN\",\n\t\t\t\"dangerous\": \"ADJ\",\n\t\t\t\"tonto\": \"PROPN\",\n\t\t\t\"inwardness\": \"NOUN\",\n\t\t\t\"lucky\": \"ADJ\",\n\t\t\t\"concede\": \"VERB\",\n\t\t\t\"diocese\": \"NOUN\",\n\t\t\t\"observe\": \"VERB\",\n\t\t\t\"fly\": \"VERB\",\n\t\t\t\"practices\": \"NOUN\",\n\t\t\t\"???\": \"PUNCT\",\n\t\t\t\"happily\": \"ADV\",\n\t\t\t\"shifting\": \"NOUN\",\n\t\t\t\"males\": \"NOUN\",\n\t\t\t\"whatnot\": \"NOUN\",\n\t\t\t\"sir\": \"NOUN\",\n\t\t\t\"buxton\": \"PROPN\",\n\t\t\t\"pears\": \"NOUN\",\n\t\t\t\"arby\": \"PROPN\",\n\t\t\t\"ksm\": \"PROPN\",\n\t\t\t\"insanity\": \"NOUN\",\n\t\t\t\"sample\": \"NOUN\",\n\t\t\t\"woud\": \"AUX\",\n\t\t\t\"accelerate\": \"VERB\",\n\t\t\t\"departing\": \"VERB\",\n\t\t\t\"d.\": \"PROPN\",\n\t\t\t\"re-looking\": \"VERB\",\n\t\t\t\"ecology\": \"NOUN\",\n\t\t\t\"resort\": \"NOUN\",\n\t\t\t\"recoils\": \"VERB\",\n\t\t\t\"southwest\": \"PROPN\",\n\t\t\t\"bras\": \"NOUN\",\n\t\t\t\"sighed\": \"VERB\",\n\t\t\t\"consequence\": \"NOUN\",\n\t\t\t\"specialists\": \"NOUN\",\n\t\t\t\"jafar\": \"PROPN\",\n\t\t\t\"david\": \"PROPN\",\n\t\t\t\"danny\": \"PROPN\",\n\t\t\t\"emotional\": \"ADJ\",\n\t\t\t\"77415-0027\": \"NUM\",\n\t\t\t\"customer\": \"NOUN\",\n\t\t\t\"clara\": \"PROPN\",\n\t\t\t\"witchcraft\": \"NOUN\",\n\t\t\t\"spur\": \"NOUN\",\n\t\t\t\"decreased\": \"VERB\",\n\t\t\t\"teeth\": \"NOUN\",\n\t\t\t\"stir\": \"VERB\",\n\t\t\t\"kolonaki\": \"PROPN\",\n\t\t\t\"spencer\": \"PROPN\",\n\t\t\t\"ferries\": \"NOUN\",\n\t\t\t\"rohatgi\": \"PROPN\",\n\t\t\t\"steeped\": \"VERB\",\n\t\t\t\"lipsticks\": \"NOUN\",\n\t\t\t\"bored\": \"ADJ\",\n\t\t\t\"sleek\": \"ADJ\",\n\t\t\t\"records\": \"NOUN\",\n\t\t\t\"choramine\": \"NOUN\",\n\t\t\t\"invasion\": \"NOUN\",\n\t\t\t\"alphabetical\": \"ADJ\",\n\t\t\t\"amen\": \"INTJ\",\n\t\t\t\"mr\": \"NOUN\",\n\t\t\t\"proceeding\": \"NOUN\",\n\t\t\t\"inherent\": \"ADJ\",\n\t\t\t\"infiltrate\": \"VERB\",\n\t\t\t\"co-ordinated\": \"VERB\",\n\t\t\t\"plenty\": \"NOUN\",\n\t\t\t\"urinary\": \"ADJ\",\n\t\t\t\"jwvs\": \"PROPN\",\n\t\t\t\"prongs\": \"NOUN\",\n\t\t\t\"skydiving\": \"NOUN\",\n\t\t\t\"irrigated\": \"ADJ\",\n\t\t\t\"cruze\": \"PROPN\",\n\t\t\t\"06/01/2001\": \"NUM\",\n\t\t\t\"advertisers\": \"NOUN\",\n\t\t\t\"initiatives\": \"NOUN\",\n\t\t\t\"pacific\": \"PROPN\",\n\t\t\t\"collaborators\": \"NOUN\",\n\t\t\t\"impediment\": \"NOUN\",\n\t\t\t\"faint\": \"ADJ\",\n\t\t\t\"candles\": \"NOUN\",\n\t\t\t\"routinely\": \"ADV\",\n\t\t\t\"bird\": \"NOUN\",\n\t\t\t\"damp\": \"ADJ\",\n\t\t\t\"management\": \"NOUN\",\n\t\t\t\"risen\": \"VERB\",\n\t\t\t\"enterprise\": \"NOUN\",\n\t\t\t\"deceiving\": \"VERB\",\n\t\t\t\"northward\": \"ADV\",\n\t\t\t\"hitting\": \"VERB\",\n\t\t\t\"c.dtf\": \"NOUN\",\n\t\t\t\"workpapers\": \"NOUN\",\n\t\t\t\"abraham\": \"PROPN\",\n\t\t\t\"gruen\": \"PROPN\",\n\t\t\t\"bna\": \"PROPN\",\n\t\t\t\"assets\": \"NOUN\",\n\t\t\t\"onto\": \"ADP\",\n\t\t\t\"bare\": \"ADJ\",\n\t\t\t\"animation\": \"NOUN\",\n\t\t\t\"a.k.a\": \"ADV\",\n\t\t\t\"rescue\": \"NOUN\",\n\t\t\t\"alienating\": \"VERB\",\n\t\t\t\"maui\": \"PROPN\",\n\t\t\t\"cassandra\": \"PROPN\",\n\t\t\t\"between\": \"ADP\",\n\t\t\t\"rights\": \"NOUN\",\n\t\t\t\"privatisation\": \"NOUN\",\n\t\t\t\"historically\": \"ADV\",\n\t\t\t\"minerals\": \"NOUN\",\n\t\t\t\"10th\": \"ADJ\",\n\t\t\t\"modes\": \"NOUN\",\n\t\t\t\"tours\": \"NOUN\",\n\t\t\t\"contingencies\": \"NOUN\",\n\t\t\t\"obliterating\": \"VERB\",\n\t\t\t\"subdue\": \"VERB\",\n\t\t\t\"recorder\": \"NOUN\",\n\t\t\t\"crayola\": \"PROPN\",\n\t\t\t\"snitches\": \"NOUN\",\n\t\t\t\"lined\": \"VERB\",\n\t\t\t\"ding\": \"INTJ\",\n\t\t\t\"montgomery\": \"PROPN\",\n\t\t\t\"09:52\": \"NUM\",\n\t\t\t\"managed\": \"VERB\",\n\t\t\t\"hitler\": \"PROPN\",\n\t\t\t\"neglects\": \"VERB\",\n\t\t\t\"koinonia\": \"PROPN\",\n\t\t\t\"mechaincs\": \"NOUN\",\n\t\t\t\"currant\": \"NOUN\",\n\t\t\t\"powers\": \"NOUN\",\n\t\t\t\"flats\": \"NOUN\",\n\t\t\t\"416-865-3704\": \"NUM\",\n\t\t\t\"silkies\": \"NOUN\",\n\t\t\t\"parishioners\": \"NOUN\",\n\t\t\t\"pipette\": \"NOUN\",\n\t\t\t\"fiancé\": \"NOUN\",\n\t\t\t\"socialize\": \"VERB\",\n\t\t\t\"taught\": \"VERB\",\n\t\t\t\"pigsty\": \"NOUN\",\n\t\t\t\"executions\": \"NOUN\",\n\t\t\t\"incomplete\": \"ADV\",\n\t\t\t\"april\": \"PROPN\",\n\t\t\t\"reversing\": \"VERB\",\n\t\t\t\"seal\": \"NOUN\",\n\t\t\t\"symptoms\": \"NOUN\",\n\t\t\t\"tupperware\": \"NOUN\",\n\t\t\t\"stalemated\": \"VERB\",\n\t\t\t\"surv\": \"VERB\",\n\t\t\t\"plurals\": \"NOUN\",\n\t\t\t\"processes\": \"NOUN\",\n\t\t\t\"skating\": \"VERB\",\n\t\t\t\"rgds\": \"NOUN\",\n\t\t\t\"socialist\": \"ADJ\",\n\t\t\t\"motherwell\": \"PROPN\",\n\t\t\t\"glistening\": \"VERB\",\n\t\t\t\"abiding\": \"ADJ\",\n\t\t\t\"joinery\": \"NOUN\",\n\t\t\t\"reopen\": \"VERB\",\n\t\t\t\"regent\": \"PROPN\",\n\t\t\t\"economy\": \"NOUN\",\n\t\t\t\"arbitrators\": \"NOUN\",\n\t\t\t\"activities\": \"NOUN\",\n\t\t\t\"expanding\": \"VERB\",\n\t\t\t\"mainstream\": \"ADJ\",\n\t\t\t\"laced\": \"VERB\",\n\t\t\t\"kenyatta\": \"PROPN\",\n\t\t\t\"hairpins\": \"NOUN\",\n\t\t\t\"gorgeous\": \"ADJ\",\n\t\t\t\"viewing\": \"VERB\",\n\t\t\t\"fitzsimons\": \"PROPN\",\n\t\t\t\"bumrungrad\": \"PROPN\",\n\t\t\t\"predefined\": \"ADJ\",\n\t\t\t\"hypnotize\": \"VERB\",\n\t\t\t\"justified\": \"ADJ\",\n\t\t\t\"coventry\": \"PROPN\",\n\t\t\t\"sampling\": \"NOUN\",\n\t\t\t\"sing\": \"VERB\",\n\t\t\t\"herbert\": \"PROPN\",\n\t\t\t\"unfamiliar\": \"ADJ\",\n\t\t\t\"programs\": \"NOUN\",\n\t\t\t\"drinks\": \"NOUN\",\n\t\t\t\"civilizations\": \"NOUN\",\n\t\t\t\"colonial\": \"ADJ\",\n\t\t\t\"http://pageturnpro2.com.s3-website-us-east-1.amazonaws.com/publications/201803/15/83956/pdf/131668002208352000_cpbj033018web.pdf\": \"PROPN\",\n\t\t\t\"shunted\": \"VERB\",\n\t\t\t\"prearranged\": \"VERB\",\n\t\t\t\"shek\": \"PROPN\",\n\t\t\t\"metaphors\": \"NOUN\",\n\t\t\t\"nazi\": \"PROPN\",\n\t\t\t\"redeem\": \"VERB\",\n\t\t\t\"midas\": \"PROPN\",\n\t\t\t\"eurostar\": \"PROPN\",\n\t\t\t\"9:46\": \"NUM\",\n\t\t\t\"alternate\": \"ADJ\",\n\t\t\t\"web\": \"NOUN\",\n\t\t\t\"hospitality\": \"NOUN\",\n\t\t\t\"pittsburgh\": \"PROPN\",\n\t\t\t\"919819602175\": \"NUM\",\n\t\t\t\"hidden\": \"VERB\",\n\t\t\t\"tugs\": \"NOUN\",\n\t\t\t\"stocky\": \"ADJ\",\n\t\t\t\"spines\": \"NOUN\",\n\t\t\t\"terminals\": \"NOUN\",\n\t\t\t\"hyperion\": \"PROPN\",\n\t\t\t\"know\": \"VERB\",\n\t\t\t\"titer\": \"NOUN\",\n\t\t\t\"unofficial\": \"ADJ\",\n\t\t\t\"arizona\": \"PROPN\",\n\t\t\t\"m.\": \"PROPN\",\n\t\t\t\"andrill\": \"PROPN\",\n\t\t\t\"terrell\": \"PROPN\",\n\t\t\t\"mill\": \"NOUN\",\n\t\t\t\"czech\": \"ADJ\",\n\t\t\t\"mazirat\": \"PROPN\",\n\t\t\t\"mxn\": \"NOUN\",\n\t\t\t\"ramsay\": \"PROPN\",\n\t\t\t\"galore\": \"ADV\",\n\t\t\t\"commission\": \"NOUN\",\n\t\t\t\"overheated\": \"ADJ\",\n\t\t\t\"perturbation\": \"NOUN\",\n\t\t\t\"973-3634\": \"NUM\",\n\t\t\t\"divinely\": \"ADV\",\n\t\t\t\"poitiers\": \"PROPN\",\n\t\t\t\"fam\": \"NOUN\",\n\t\t\t\"privatized\": \"VERB\",\n\t\t\t\"compaq\": \"PROPN\",\n\t\t\t\"jay\": \"PROPN\",\n\t\t\t\"predictions\": \"NOUN\",\n\t\t\t\"disclosed\": \"VERB\",\n\t\t\t\"radiometer\": \"NOUN\",\n\t\t\t\"eeftl\": \"PROPN\",\n\t\t\t\"sorrrow\": \"NOUN\",\n\t\t\t\"miami\": \"PROPN\",\n\t\t\t\"sour\": \"ADJ\",\n\t\t\t\"highway\": \"NOUN\",\n\t\t\t\"firmament\": \"NOUN\",\n\t\t\t\"gives\": \"VERB\",\n\t\t\t\"insists\": \"VERB\",\n\t\t\t\"tenth\": \"NOUN\",\n\t\t\t\"slowest\": \"ADJ\",\n\t\t\t\"casual\": \"ADJ\",\n\t\t\t\"spiked\": \"ADJ\",\n\t\t\t\"canned\": \"VERB\",\n\t\t\t\"stoop\": \"VERB\",\n\t\t\t\"trap\": \"NOUN\",\n\t\t\t\"militias\": \"NOUN\",\n\t\t\t\"lace\": \"NOUN\",\n\t\t\t\"nineteen-forties\": \"NOUN\",\n\t\t\t\"texts\": \"NOUN\",\n\t\t\t\"becomes\": \"VERB\",\n\t\t\t\"dark-panelled\": \"ADJ\",\n\t\t\t\"jelly\": \"NOUN\",\n\t\t\t\"borderline\": \"ADJ\",\n\t\t\t\"mouthful\": \"NOUN\",\n\t\t\t\"undershirt\": \"NOUN\",\n\t\t\t\"over\": \"ADP\",\n\t\t\t\"brown-pink\": \"ADJ\",\n\t\t\t\"suite\": \"NOUN\",\n\t\t\t\"38\": \"NUM\",\n\t\t\t\"pretzel\": \"NOUN\",\n\t\t\t\"conjectures\": \"NOUN\",\n\t\t\t\"u.n.\": \"PROPN\",\n\t\t\t\"11:02\": \"NUM\",\n\t\t\t\"late\": \"ADJ\",\n\t\t\t\"15:11\": \"NUM\",\n\t\t\t\"affiliates\": \"NOUN\",\n\t\t\t\"ranking\": \"ADJ\",\n\t\t\t\"upsetting\": \"ADJ\",\n\t\t\t\"kindy\": \"PROPN\",\n\t\t\t\"rican\": \"ADJ\",\n\t\t\t\"dimension\": \"NOUN\",\n\t\t\t\"dash\": \"VERB\",\n\t\t\t\"okinawa\": \"PROPN\",\n\t\t\t\"perceives\": \"VERB\",\n\t\t\t\"juvenile\": \"NOUN\",\n\t\t\t\"andrei\": \"PROPN\",\n\t\t\t\"kick\": \"NOUN\",\n\t\t\t\"wellshaped\": \"ADJ\",\n\t\t\t\"acpeds\": \"PROPN\",\n\t\t\t\"statuette\": \"NOUN\",\n\t\t\t\"germinate\": \"VERB\",\n\t\t\t\"engraved\": \"VERB\",\n\t\t\t\"fevers\": \"NOUN\",\n\t\t\t\"usamriid\": \"PROPN\",\n\t\t\t\"paschal\": \"PROPN\",\n\t\t\t\"non-philosophers\": \"NOUN\",\n\t\t\t\"retaliation\": \"NOUN\",\n\t\t\t\"escola\": \"PROPN\",\n\t\t\t\"generalizability\": \"NOUN\",\n\t\t\t\"macaulay\": \"PROPN\",\n\t\t\t\"gossip\": \"NOUN\",\n\t\t\t\"preparedness\": \"NOUN\",\n\t\t\t\"see\": \"VERB\",\n\t\t\t\"americas\": \"PROPN\",\n\t\t\t\"signaled\": \"VERB\",\n\t\t\t\"vigilantly\": \"ADV\",\n\t\t\t\"collaboratively\": \"ADV\",\n\t\t\t\"sacristy\": \"NOUN\",\n\t\t\t\"us$\": \"NOUN\",\n\t\t\t\"obscure\": \"ADJ\",\n\t\t\t\"peat\": \"NOUN\",\n\t\t\t\"starship\": \"PROPN\",\n\t\t\t\"luxurious\": \"ADJ\",\n\t\t\t\"rejected\": \"VERB\",\n\t\t\t\"blow\": \"VERB\",\n\t\t\t\"anesthetic\": \"NOUN\",\n\t\t\t\"giovannini\": \"PROPN\",\n\t\t\t\"manged\": \"VERB\",\n\t\t\t\"lackluster\": \"ADJ\",\n\t\t\t\"skytrain\": \"NOUN\",\n\t\t\t\"turned\": \"VERB\",\n\t\t\t\"ymsgr:sendim?mayursha&__hi+mayur...\": \"PROPN\",\n\t\t\t\"extend\": \"VERB\",\n\t\t\t\"winton\": \"PROPN\",\n\t\t\t\"scramble\": \"NOUN\",\n\t\t\t\"lng\": \"PROPN\",\n\t\t\t\"04:37\": \"NUM\",\n\t\t\t\"chung\": \"PROPN\",\n\t\t\t\"tenacious\": \"ADJ\",\n\t\t\t\"gillies\": \"PROPN\",\n\t\t\t\"alroot\": \"INTJ\",\n\t\t\t\"scenic\": \"ADJ\",\n\t\t\t\"functional\": \"ADJ\",\n\t\t\t\"annuals\": \"NOUN\",\n\t\t\t\"traders\": \"NOUN\",\n\t\t\t\"mountaineering\": \"NOUN\",\n\t\t\t\"cpuc\": \"PROPN\",\n\t\t\t\"winds\": \"NOUN\",\n\t\t\t\"•\": \"PUNCT\",\n\t\t\t\"press\": \"NOUN\",\n\t\t\t\"utilization\": \"NOUN\",\n\t\t\t\"ostensibly\": \"ADV\",\n\t\t\t\"bits\": \"NOUN\",\n\t\t\t\"christen\": \"VERB\",\n\t\t\t\"flicked\": \"VERB\",\n\t\t\t\"jason\": \"PROPN\",\n\t\t\t\"barclay\": \"PROPN\",\n\t\t\t\"testament\": \"NOUN\",\n\t\t\t\"reserves\": \"NOUN\",\n\t\t\t\"vanilla\": \"NOUN\",\n\t\t\t\"alabama\": \"PROPN\",\n\t\t\t\"debutans\": \"NOUN\",\n\t\t\t\"cakes\": \"NOUN\",\n\t\t\t\"braque\": \"PROPN\",\n\t\t\t\"swings\": \"VERB\",\n\t\t\t\"mabruk\": \"PROPN\",\n\t\t\t\"<<\": \"PUNCT\",\n\t\t\t\"writers\": \"NOUN\",\n\t\t\t\"seized\": \"VERB\",\n\t\t\t\"residual\": \"ADJ\",\n\t\t\t\"1.1\": \"NUM\",\n\t\t\t\"flags\": \"NOUN\",\n\t\t\t\"judy\": \"PROPN\",\n\t\t\t\"infrequent\": \"ADJ\",\n\t\t\t\"marriott\": \"PROPN\",\n\t\t\t\"lends\": \"VERB\",\n\t\t\t\"outsiders\": \"NOUN\",\n\t\t\t\"peak\": \"NOUN\",\n\t\t\t\"shakespeare\": \"PROPN\",\n\t\t\t\"posted\": \"VERB\",\n\t\t\t\"charged\": \"VERB\",\n\t\t\t\"wok\": \"NOUN\",\n\t\t\t\"nicktendo64\": \"PROPN\",\n\t\t\t\"bass\": \"PROPN\",\n\t\t\t\"shemin\": \"PROPN\",\n\t\t\t\"medusa\": \"PROPN\",\n\t\t\t\"crust\": \"NOUN\",\n\t\t\t\"extension\": \"NOUN\",\n\t\t\t\"scripts\": \"NOUN\",\n\t\t\t\"05/25/2001\": \"NUM\",\n\t\t\t\"prayed\": \"VERB\",\n\t\t\t\"'nt\": \"ADV\",\n\t\t\t\"sonnet\": \"NOUN\",\n\t\t\t\"b.\": \"VERB\",\n\t\t\t\"semi-pelagianism\": \"NOUN\",\n\t\t\t\"vienna\": \"PROPN\",\n\t\t\t\"drop\": \"NOUN\",\n\t\t\t\"kiosks\": \"NOUN\",\n\t\t\t\"count\": \"VERB\",\n\t\t\t\"fx\": \"NOUN\",\n\t\t\t\"mobiles\": \"NOUN\",\n\t\t\t\"feng\": \"PROPN\",\n\t\t\t\"cautiously\": \"ADV\",\n\t\t\t\"targeting\": \"VERB\",\n\t\t\t\"lightbulb\": \"NOUN\",\n\t\t\t\"cruising\": \"ADJ\",\n\t\t\t\"pipeline\": \"NOUN\",\n\t\t\t\"ctrl–c\": \"PROPN\",\n\t\t\t\"accepts\": \"VERB\",\n\t\t\t\"akropolis\": \"PROPN\",\n\t\t\t\"toilets\": \"NOUN\",\n\t\t\t\"needles\": \"NOUN\",\n\t\t\t\"hagrid\": \"PROPN\",\n\t\t\t\"wetter\": \"ADJ\",\n\t\t\t\"pjɛʁ\": \"PROPN\",\n\t\t\t\"1687\": \"NUM\",\n\t\t\t\"2470\": \"NUM\",\n\t\t\t\"reviewing\": \"VERB\",\n\t\t\t\"shall\": \"AUX\",\n\t\t\t\"mosquitoes\": \"NOUN\",\n\t\t\t\"nigh\": \"ADP\",\n\t\t\t\"confidently\": \"ADV\",\n\t\t\t\"instructing\": \"VERB\",\n\t\t\t\"informally\": \"ADV\",\n\t\t\t\"certainly\": \"ADV\",\n\t\t\t\"authority\": \"NOUN\",\n\t\t\t\"sacred\": \"ADJ\",\n\t\t\t\"amongst\": \"ADP\",\n\t\t\t\"terrified\": \"ADJ\",\n\t\t\t\"gibberish\": \"NOUN\",\n\t\t\t\"pardon\": \"VERB\",\n\t\t\t\"prompted\": \"VERB\",\n\t\t\t\"solis\": \"PROPN\",\n\t\t\t\"tourism\": \"NOUN\",\n\t\t\t\"arosa\": \"PROPN\",\n\t\t\t\"brides\": \"NOUN\",\n\t\t\t\"egos\": \"NOUN\",\n\t\t\t\"efficient\": \"ADJ\",\n\t\t\t\"k.\": \"PROPN\",\n\t\t\t\"initials\": \"NOUN\",\n\t\t\t\"flirt\": \"VERB\",\n\t\t\t\"loch\": \"PROPN\",\n\t\t\t\"payoff\": \"NOUN\",\n\t\t\t\"signed\": \"VERB\",\n\t\t\t\"leonia\": \"PROPN\",\n\t\t\t\"transferring\": \"VERB\",\n\t\t\t\"tooling\": \"NOUN\",\n\t\t\t\"karachi\": \"PROPN\",\n\t\t\t\"vial\": \"NOUN\",\n\t\t\t\"shaykh\": \"PROPN\",\n\t\t\t\"54,000\": \"NUM\",\n\t\t\t\"intact\": \"ADJ\",\n\t\t\t\"meager\": \"ADJ\",\n\t\t\t\"channing\": \"PROPN\",\n\t\t\t\"england\": \"PROPN\",\n\t\t\t\"registering\": \"VERB\",\n\t\t\t\"47th\": \"ADJ\",\n\t\t\t\"dharma\": \"PROPN\",\n\t\t\t\"cge\": \"NOUN\",\n\t\t\t\"sne\": \"PROPN\",\n\t\t\t\"encompassing\": \"VERB\",\n\t\t\t\"flooding\": \"NOUN\",\n\t\t\t\"sightseeing\": \"NOUN\",\n\t\t\t\"holland\": \"PROPN\",\n\t\t\t\"cosmetic\": \"ADJ\",\n\t\t\t\"halos\": \"NOUN\",\n\t\t\t\"rapists\": \"NOUN\",\n\t\t\t\"oz\": \"NOUN\",\n\t\t\t\"andrews\": \"PROPN\",\n\t\t\t\"chehel\": \"PROPN\",\n\t\t\t\"compliant\": \"ADJ\",\n\t\t\t\"jūsan'ya\": \"PROPN\",\n\t\t\t\"margot\": \"PROPN\",\n\t\t\t\"formations\": \"NOUN\",\n\t\t\t\"dislocated\": \"VERB\",\n\t\t\t\"ting\": \"PROPN\",\n\t\t\t\"oasis\": \"PROPN\",\n\t\t\t\"z1\": \"PROPN\",\n\t\t\t\"7.64\": \"NUM\",\n\t\t\t\"grew\": \"VERB\",\n\t\t\t\"figuratively\": \"ADV\",\n\t\t\t\"bistro\": \"PROPN\",\n\t\t\t\"crowns\": \"NOUN\",\n\t\t\t\"soft-looking\": \"ADJ\",\n\t\t\t\"boarders\": \"NOUN\",\n\t\t\t\"nailed\": \"VERB\",\n\t\t\t\"spouting\": \"VERB\",\n\t\t\t\"flagship\": \"NOUN\",\n\t\t\t\"ruddy\": \"ADJ\",\n\t\t\t\"bobbed\": \"VERB\",\n\t\t\t\"zealand\": \"PROPN\",\n\t\t\t\"olds\": \"NOUN\",\n\t\t\t\"straight\": \"ADJ\",\n\t\t\t\"vaccines\": \"NOUN\",\n\t\t\t\"bediener\": \"NOUN\",\n\t\t\t\"sharon\": \"PROPN\",\n\t\t\t\"abnormal\": \"ADJ\",\n\t\t\t\"amneh\": \"PROPN\",\n\t\t\t\"somewhat\": \"ADV\",\n\t\t\t\"muddy\": \"ADJ\",\n\t\t\t\"1:00\": \"NUM\",\n\t\t\t\"kramer\": \"PROPN\",\n\t\t\t\"hummus\": \"NOUN\",\n\t\t\t\"adelle\": \"PROPN\",\n\t\t\t\"1990\": \"NUM\",\n\t\t\t\"necessity\": \"NOUN\",\n\t\t\t\"refurbish\": \"VERB\",\n\t\t\t\"costumes\": \"NOUN\",\n\t\t\t\"sanded\": \"VERB\",\n\t\t\t\"romelu\": \"PROPN\",\n\t\t\t\"ntu\": \"PROPN\",\n\t\t\t\"mall\": \"NOUN\",\n\t\t\t\"street\": \"NOUN\",\n\t\t\t\"warrants\": \"NOUN\",\n\t\t\t\"manufacturers\": \"NOUN\",\n\t\t\t\"patents\": \"NOUN\",\n\t\t\t\"smoke\": \"NOUN\",\n\t\t\t\"were\": \"AUX\",\n\t\t\t\"excels\": \"VERB\",\n\t\t\t\"timbers\": \"NOUN\",\n\t\t\t\"purged\": \"VERB\",\n\t\t\t\"beto\": \"PROPN\",\n\t\t\t\"dupes\": \"NOUN\",\n\t\t\t\"ofra\": \"PROPN\",\n\t\t\t\"dykman\": \"PROPN\",\n\t\t\t\"sheik\": \"NOUN\",\n\t\t\t\"306\": \"NUM\",\n\t\t\t\"graduands\": \"NOUN\",\n\t\t\t\"2007\": \"NUM\",\n\t\t\t\"attractive\": \"ADJ\",\n\t\t\t\"hyper\": \"ADJ\",\n\t\t\t\"yeah\": \"INTJ\",\n\t\t\t\"dye\": \"PROPN\",\n\t\t\t\"existent\": \"ADJ\",\n\t\t\t\"chernobyl\": \"PROPN\",\n\t\t\t\"reflect\": \"VERB\",\n\t\t\t\"muscle\": \"NOUN\",\n\t\t\t\"kiln\": \"NOUN\",\n\t\t\t\"oldham\": \"PROPN\",\n\t\t\t\"pacifically\": \"ADV\",\n\t\t\t\"allegedly\": \"ADV\",\n\t\t\t\"rape\": \"NOUN\",\n\t\t\t\"indivero\": \"PROPN\",\n\t\t\t\"707-885-2508\": \"NUM\",\n\t\t\t\"ngoc\": \"PROPN\",\n\t\t\t\"chiefs\": \"NOUN\",\n\t\t\t\"montparnasse\": \"PROPN\",\n\t\t\t\"ghirlandaio\": \"PROPN\",\n\t\t\t\"raced\": \"VERB\",\n\t\t\t\"put\": \"VERB\",\n\t\t\t\"overarching\": \"ADJ\",\n\t\t\t\"grease\": \"NOUN\",\n\t\t\t\"obsessive\": \"ADJ\",\n\t\t\t\"books\": \"NOUN\",\n\t\t\t\"misinformation\": \"NOUN\",\n\t\t\t\"casting\": \"NOUN\",\n\t\t\t\"rocked\": \"VERB\",\n\t\t\t\"undoubtedly\": \"ADV\",\n\t\t\t\"sentences\": \"NOUN\",\n\t\t\t\"reclusive\": \"ADJ\",\n\t\t\t\"onpeak\": \"ADV\",\n\t\t\t\"indirect\": \"ADJ\",\n\t\t\t\"laodicea\": \"PROPN\",\n\t\t\t\"vivien\": \"PROPN\",\n\t\t\t\"embarked\": \"VERB\",\n\t\t\t\"mexico\": \"PROPN\",\n\t\t\t\"website\": \"NOUN\",\n\t\t\t\"transmit\": \"VERB\",\n\t\t\t\"imposingly\": \"ADV\",\n\t\t\t\"supposed\": \"VERB\",\n\t\t\t\"dursleys\": \"PROPN\",\n\t\t\t\"revolve\": \"VERB\",\n\t\t\t\"re-wiring\": \"NOUN\",\n\t\t\t\"rabbits\": \"NOUN\",\n\t\t\t\"populated\": \"VERB\",\n\t\t\t\"ignorant\": \"ADJ\",\n\t\t\t\"connaught\": \"PROPN\",\n\t\t\t\"smug\": \"ADJ\",\n\t\t\t\"ribbon\": \"NOUN\",\n\t\t\t\"immensely\": \"ADV\",\n\t\t\t\"ideological\": \"ADJ\",\n\t\t\t\"fleming\": \"PROPN\",\n\t\t\t\"tms\": \"NOUN\",\n\t\t\t\"slumbered\": \"VERB\",\n\t\t\t\"1.00\": \"NUM\",\n\t\t\t\"flu\": \"NOUN\",\n\t\t\t\"evening\": \"NOUN\",\n\t\t\t\"aka\": \"ADV\",\n\t\t\t\"ka-chun\": \"PROPN\",\n\t\t\t\"accomplishment\": \"NOUN\",\n\t\t\t\"firing\": \"VERB\",\n\t\t\t\"filters\": \"NOUN\",\n\t\t\t\"clients\": \"NOUN\",\n\t\t\t\"functionality\": \"NOUN\",\n\t\t\t\"bathing\": \"ADJ\",\n\t\t\t\"beds\": \"NOUN\",\n\t\t\t\"1423\": \"NUM\",\n\t\t\t\"aroused\": \"VERB\",\n\t\t\t\"surveillance\": \"NOUN\",\n\t\t\t\"sweet\": \"ADJ\",\n\t\t\t\"unattended\": \"ADJ\",\n\t\t\t\"based\": \"VERB\",\n\t\t\t\"intra-day\": \"ADJ\",\n\t\t\t\"50's\": \"NOUN\",\n\t\t\t\"pity\": \"NOUN\",\n\t\t\t\"pillagings\": \"NOUN\",\n\t\t\t\"jemaah\": \"PROPN\",\n\t\t\t\"nowheresville\": \"PROPN\",\n\t\t\t\"winker\": \"NOUN\",\n\t\t\t\"ss\": \"NOUN\",\n\t\t\t\"wine\": \"NOUN\",\n\t\t\t\"11:57\": \"NUM\",\n\t\t\t\"resources\": \"NOUN\",\n\t\t\t\"pride\": \"NOUN\",\n\t\t\t\"accomodating\": \"ADJ\",\n\t\t\t\"dreading\": \"VERB\",\n\t\t\t\"encouragingly\": \"ADV\",\n\t\t\t\"cigarette\": \"NOUN\",\n\t\t\t\"racketeers\": \"NOUN\",\n\t\t\t\"lynn\": \"PROPN\",\n\t\t\t\"slandered\": \"VERB\",\n\t\t\t\"dotted\": \"VERB\",\n\t\t\t\"homeopath\": \"NOUN\",\n\t\t\t\"assimilate\": \"VERB\",\n\t\t\t\"suits\": \"VERB\",\n\t\t\t\"uh\": \"INTJ\",\n\t\t\t\"boardroom\": \"NOUN\",\n\t\t\t\"hoover\": \"PROPN\",\n\t\t\t\"kowalke\": \"PROPN\",\n\t\t\t\"??????\": \"PUNCT\",\n\t\t\t\"1,700\": \"NUM\",\n\t\t\t\"deception\": \"NOUN\",\n\t\t\t\"moto\": \"NOUN\",\n\t\t\t\"meadowrun\": \"PROPN\",\n\t\t\t\"helping\": \"VERB\",\n\t\t\t\"ceramic\": \"ADJ\",\n\t\t\t\"passcode\": \"NOUN\",\n\t\t\t\"toiletries\": \"NOUN\",\n\t\t\t\"miss\": \"VERB\",\n\t\t\t\"collateral\": \"NOUN\",\n\t\t\t\"rivers\": \"PROPN\",\n\t\t\t\"combination\": \"NOUN\",\n\t\t\t\"ego\": \"NOUN\",\n\t\t\t\"kennels\": \"NOUN\",\n\t\t\t\"climbed\": \"VERB\",\n\t\t\t\"makes\": \"VERB\",\n\t\t\t\"8.3\": \"NUM\",\n\t\t\t\"competed\": \"VERB\",\n\t\t\t\"glibness\": \"NOUN\",\n\t\t\t\"capacities\": \"NOUN\",\n\t\t\t\"345-9945\": \"NUM\",\n\t\t\t\"negotiate\": \"VERB\",\n\t\t\t\"prints\": \"NOUN\",\n\t\t\t\"tankers\": \"NOUN\",\n\t\t\t\"literalist\": \"NOUN\",\n\t\t\t\"coeur\": \"PROPN\",\n\t\t\t\"stategy\": \"NOUN\",\n\t\t\t\"ontogeny\": \"NOUN\",\n\t\t\t\"repeating\": \"VERB\",\n\t\t\t\"cornelissen\": \"PROPN\",\n\t\t\t\"nonviolent\": \"ADJ\",\n\t\t\t\"poll\": \"NOUN\",\n\t\t\t\"entery\": \"NOUN\",\n\t\t\t\"assam\": \"PROPN\",\n\t\t\t\"carly\": \"PROPN\",\n\t\t\t\"aditya\": \"PROPN\",\n\t\t\t\"clattering\": \"VERB\",\n\t\t\t\"draws\": \"VERB\",\n\t\t\t\"clarity\": \"NOUN\",\n\t\t\t\"aquasafe\": \"NOUN\",\n\t\t\t\"raw-potato\": \"NOUN\",\n\t\t\t\"interacting\": \"VERB\",\n\t\t\t\"3143c\": \"PROPN\",\n\t\t\t\"crest\": \"NOUN\",\n\t\t\t\"$ometime$\": \"ADV\",\n\t\t\t\"baptized\": \"VERB\",\n\t\t\t\"campaigning\": \"NOUN\",\n\t\t\t\"gatherings\": \"NOUN\",\n\t\t\t\"feasible\": \"ADJ\",\n\t\t\t\"necessarily\": \"ADV\",\n\t\t\t\"laden\": \"PROPN\",\n\t\t\t\"variables\": \"NOUN\",\n\t\t\t\"confine\": \"VERB\",\n\t\t\t\"microns\": \"NOUN\",\n\t\t\t\"utters\": \"VERB\",\n\t\t\t\"funkhouser\": \"PROPN\",\n\t\t\t\"already\": \"ADV\",\n\t\t\t\"similar\": \"ADJ\",\n\t\t\t\"camper\": \"NOUN\",\n\t\t\t\"thanked\": \"VERB\",\n\t\t\t\"mcmurdo\": \"PROPN\",\n\t\t\t\"648\": \"NUM\",\n\t\t\t\"marvellous\": \"ADJ\",\n\t\t\t\"taliban\": \"PROPN\",\n\t\t\t\"coughed\": \"VERB\",\n\t\t\t\"obsess\": \"VERB\",\n\t\t\t\"fish\": \"NOUN\",\n\t\t\t\"exposition\": \"NOUN\",\n\t\t\t\"m.s.\": \"PROPN\",\n\t\t\t\"mandir\": \"PROPN\",\n\t\t\t\"santo\": \"PROPN\",\n\t\t\t\"laura\": \"PROPN\",\n\t\t\t\"level\": \"NOUN\",\n\t\t\t\"assumes\": \"VERB\",\n\t\t\t\"gastric\": \"ADJ\",\n\t\t\t\"chairpersons\": \"NOUN\",\n\t\t\t\"3.7\": \"NUM\",\n\t\t\t\"guesswork\": \"NOUN\",\n\t\t\t\"collage\": \"NOUN\",\n\t\t\t\"rightly\": \"ADV\",\n\t\t\t\"reaches\": \"VERB\",\n\t\t\t\"reestablish\": \"VERB\",\n\t\t\t\"mazda\": \"PROPN\",\n\t\t\t\"pauvre\": \"PROPN\",\n\t\t\t\"imperative\": \"ADJ\",\n\t\t\t\"mcgowan\": \"PROPN\",\n\t\t\t\"1834\": \"NUM\",\n\t\t\t\"rudolf\": \"PROPN\",\n\t\t\t\"subconsciously\": \"ADV\",\n\t\t\t\"newsgroup\": \"NOUN\",\n\t\t\t\"cloyingly\": \"ADV\",\n\t\t\t\"framed\": \"VERB\",\n\t\t\t\"fiscal\": \"ADJ\",\n\t\t\t\"harsh\": \"ADJ\",\n\t\t\t\"illnesses\": \"NOUN\",\n\t\t\t\"1e\": \"NOUN\",\n\t\t\t\"2.8\": \"NUM\",\n\t\t\t\"favors\": \"VERB\",\n\t\t\t\"epstein\": \"PROPN\",\n\t\t\t\"ridge\": \"PROPN\",\n\t\t\t\"fierce\": \"ADJ\",\n\t\t\t\"fighters\": \"NOUN\",\n\t\t\t\"otc\": \"NOUN\",\n\t\t\t\"prefere\": \"VERB\",\n\t\t\t\"utilities\": \"NOUN\",\n\t\t\t\".292\": \"NUM\",\n\t\t\t\"here\": \"ADV\",\n\t\t\t\"narrowed\": \"VERB\",\n\t\t\t\"successes\": \"NOUN\",\n\t\t\t\"drinkers\": \"NOUN\",\n\t\t\t\"lifespan\": \"NOUN\",\n\t\t\t\"wins\": \"VERB\",\n\t\t\t\"sinatra\": \"PROPN\",\n\t\t\t\"tending\": \"VERB\",\n\t\t\t\"transpired\": \"VERB\",\n\t\t\t\"roadside\": \"NOUN\",\n\t\t\t\"virgil\": \"PROPN\",\n\t\t\t\"director-general\": \"NOUN\",\n\t\t\t\"nicaragua\": \"PROPN\",\n\t\t\t\"towed\": \"VERB\",\n\t\t\t\"travelled\": \"VERB\",\n\t\t\t\"wo\": \"AUX\",\n\t\t\t\"insolence\": \"NOUN\",\n\t\t\t\"spider\": \"NOUN\",\n\t\t\t\"“\": \"PUNCT\",\n\t\t\t\"rekohu\": \"PROPN\",\n\t\t\t\"fragmentary\": \"ADJ\",\n\t\t\t\"foresaw\": \"VERB\",\n\t\t\t\"12:42\": \"NUM\",\n\t\t\t\"lexus\": \"PROPN\",\n\t\t\t\"henderson\": \"PROPN\",\n\t\t\t\"700\": \"NUM\",\n\t\t\t\"munafò\": \"PROPN\",\n\t\t\t\"seated\": \"VERB\",\n\t\t\t\"birthday\": \"NOUN\",\n\t\t\t\"reproducibility\": \"NOUN\",\n\t\t\t\"booths\": \"NOUN\",\n\t\t\t\"evelyn\": \"PROPN\",\n\t\t\t\"covers\": \"NOUN\",\n\t\t\t\"wilson\": \"PROPN\",\n\t\t\t\"bender\": \"PROPN\",\n\t\t\t\"violating\": \"VERB\",\n\t\t\t\"flocked\": \"VERB\",\n\t\t\t\"soybean\": \"NOUN\",\n\t\t\t\"exclusively\": \"ADV\",\n\t\t\t\"paw\": \"NOUN\",\n\t\t\t\"stainless\": \"ADJ\",\n\t\t\t\"713/871-5119\": \"NUM\",\n\t\t\t\"halloween\": \"PROPN\",\n\t\t\t\"funnels\": \"NOUN\",\n\t\t\t\"paedophilia\": \"NOUN\",\n\t\t\t\"warped\": \"VERB\",\n\t\t\t\"nonjudgmental\": \"ADJ\",\n\t\t\t\"supervisor\": \"NOUN\",\n\t\t\t\"5,500,000\": \"NUM\",\n\t\t\t\"withdraw\": \"VERB\",\n\t\t\t\"monopoly\": \"NOUN\",\n\t\t\t\"access\": \"NOUN\",\n\t\t\t\"nosy\": \"ADJ\",\n\t\t\t\"dillard\": \"PROPN\",\n\t\t\t\"conceivable\": \"ADJ\",\n\t\t\t\"televising\": \"VERB\",\n\t\t\t\"ringing\": \"ADJ\",\n\t\t\t\"boots\": \"NOUN\",\n\t\t\t\"chaharbagh\": \"PROPN\",\n\t\t\t\"arid\": \"ADJ\",\n\t\t\t\"tenured\": \"ADJ\",\n\t\t\t\"legislators\": \"NOUN\",\n\t\t\t\"bowl\": \"NOUN\",\n\t\t\t\"cognitively\": \"ADV\",\n\t\t\t\"contorted\": \"ADJ\",\n\t\t\t\"posselt\": \"PROPN\",\n\t\t\t\"mingle\": \"VERB\",\n\t\t\t\"oven\": \"NOUN\",\n\t\t\t\"annoy\": \"VERB\",\n\t\t\t\"chooses\": \"VERB\",\n\t\t\t\"leninism\": \"NOUN\",\n\t\t\t\"sao\": \"PROPN\",\n\t\t\t\"sips\": \"NOUN\",\n\t\t\t\"choir\": \"NOUN\",\n\t\t\t\"copy\": \"NOUN\",\n\t\t\t\"plaudits\": \"NOUN\",\n\t\t\t\"earnings\": \"NOUN\",\n\t\t\t\"remind\": \"VERB\",\n\t\t\t\"weasleys\": \"PROPN\",\n\t\t\t\"commendable\": \"ADJ\",\n\t\t\t\"athlete\": \"NOUN\",\n\t\t\t\"deepest\": \"ADJ\",\n\t\t\t\"buses\": \"NOUN\",\n\t\t\t\"gross\": \"ADJ\",\n\t\t\t\"strenuous\": \"ADJ\",\n\t\t\t\"peacekeepers\": \"NOUN\",\n\t\t\t\"innermost\": \"ADJ\",\n\t\t\t\"bow\": \"NOUN\",\n\t\t\t\"enjambed\": \"VERB\",\n\t\t\t\"marrying\": \"VERB\",\n\t\t\t\"divorcing\": \"VERB\",\n\t\t\t\"mackie\": \"PROPN\",\n\t\t\t\"backyard\": \"NOUN\",\n\t\t\t\"fingernail\": \"NOUN\",\n\t\t\t\"restaurants\": \"NOUN\",\n\t\t\t\"diego\": \"PROPN\",\n\t\t\t\"kyle.jones@ra\": \"PROPN\",\n\t\t\t\"italian\": \"ADJ\",\n\t\t\t\"hideous\": \"ADJ\",\n\t\t\t\"incorporates\": \"VERB\",\n\t\t\t\"bubbles\": \"NOUN\",\n\t\t\t\"sogged\": \"ADJ\",\n\t\t\t\"junctions\": \"NOUN\",\n\t\t\t\"sprites\": \"NOUN\",\n\t\t\t\"1877\": \"NUM\",\n\t\t\t\"mellon\": \"PROPN\",\n\t\t\t\"thinker\": \"NOUN\",\n\t\t\t\"vilt\": \"PROPN\",\n\t\t\t\"garbage\": \"NOUN\",\n\t\t\t\"nesting\": \"VERB\",\n\t\t\t\"reprinted\": \"VERB\",\n\t\t\t\"abusers\": \"NOUN\",\n\t\t\t\"motorway\": \"NOUN\",\n\t\t\t\"kaplan\": \"PROPN\",\n\t\t\t\"armholes\": \"NOUN\",\n\t\t\t\"whitened\": \"VERB\",\n\t\t\t\"bias\": \"NOUN\",\n\t\t\t\"poetic\": \"ADJ\",\n\t\t\t\"strictures\": \"NOUN\",\n\t\t\t\"ecosystem\": \"NOUN\",\n\t\t\t\"domestically\": \"ADV\",\n\t\t\t\"hawijah\": \"PROPN\",\n\t\t\t\"convoys\": \"NOUN\",\n\t\t\t\"1982\": \"NUM\",\n\t\t\t\"erupts\": \"VERB\",\n\t\t\t\"succession\": \"NOUN\",\n\t\t\t\"tab\": \"NOUN\",\n\t\t\t\"decline\": \"NOUN\",\n\t\t\t\"bisexual\": \"ADJ\",\n\t\t\t\"capitalizing\": \"VERB\",\n\t\t\t\"guests\": \"NOUN\",\n\t\t\t\"trips\": \"NOUN\",\n\t\t\t\"covering\": \"VERB\",\n\t\t\t\"watermelon\": \"NOUN\",\n\t\t\t\"gelceuticals\": \"NOUN\",\n\t\t\t\"interpretative\": \"ADJ\",\n\t\t\t\"alr-\": \"ADV\",\n\t\t\t\"inauguration\": \"NOUN\",\n\t\t\t\"fraternity\": \"NOUN\",\n\t\t\t\"thompson\": \"PROPN\",\n\t\t\t\"giggling\": \"VERB\",\n\t\t\t\"restaurant\": \"NOUN\",\n\t\t\t\"mean\": \"VERB\",\n\t\t\t\"volunteers\": \"NOUN\",\n\t\t\t\"leered\": \"VERB\",\n\t\t\t\"rebellion\": \"NOUN\",\n\t\t\t\"libya\": \"PROPN\",\n\t\t\t\"cst\": \"PROPN\",\n\t\t\t\"directionless\": \"ADJ\",\n\t\t\t\"fertile\": \"ADJ\",\n\t\t\t\"timelessness\": \"NOUN\",\n\t\t\t\"distaste\": \"NOUN\",\n\t\t\t\"lift\": \"VERB\",\n\t\t\t\"created\": \"VERB\",\n\t\t\t\"unexpected\": \"ADJ\",\n\t\t\t\"yarn\": \"NOUN\",\n\t\t\t\"f%#king\": \"ADJ\",\n\t\t\t\"given\": \"VERB\",\n\t\t\t\"shores\": \"NOUN\",\n\t\t\t\"dregs\": \"NOUN\",\n\t\t\t\"twenty\": \"NUM\",\n\t\t\t\"eater\": \"NOUN\",\n\t\t\t\"badr\": \"PROPN\",\n\t\t\t\"smart\": \"ADJ\",\n\t\t\t\"solidarity\": \"NOUN\",\n\t\t\t\"daniels\": \"PROPN\",\n\t\t\t\"sugared\": \"ADJ\",\n\t\t\t\"picasa\": \"PROPN\",\n\t\t\t\"wise\": \"ADJ\",\n\t\t\t\"preserving\": \"VERB\",\n\t\t\t\"140\": \"NUM\",\n\t\t\t\"sear's\": \"PROPN\",\n\t\t\t\"methylene\": \"PROPN\",\n\t\t\t\"angles\": \"NOUN\",\n\t\t\t\"pass\": \"VERB\",\n\t\t\t\"barese\": \"NOUN\",\n\t\t\t\"strips\": \"VERB\",\n\t\t\t\"amsterdam\": \"PROPN\",\n\t\t\t\"fires\": \"NOUN\",\n\t\t\t\"innkeeper\": \"NOUN\",\n\t\t\t\"destroyer\": \"NOUN\",\n\t\t\t\"irrigate\": \"VERB\",\n\t\t\t\"noam\": \"PROPN\",\n\t\t\t\"abbotsford\": \"PROPN\",\n\t\t\t\"exalted\": \"ADJ\",\n\t\t\t\"capitol\": \"PROPN\",\n\t\t\t\"12,000\": \"NUM\",\n\t\t\t\"codifies\": \"VERB\",\n\t\t\t\"timely\": \"ADJ\",\n\t\t\t\"discomfort\": \"NOUN\",\n\t\t\t\"crimson\": \"ADJ\",\n\t\t\t\"organisations\": \"NOUN\",\n\t\t\t\"manifests\": \"VERB\",\n\t\t\t\"upstage\": \"VERB\",\n\t\t\t\"luncheon\": \"NOUN\",\n\t\t\t\"starfish\": \"NOUN\",\n\t\t\t\"wonderful\": \"ADJ\",\n\t\t\t\"sars\": \"PROPN\",\n\t\t\t\"pythons\": \"NOUN\",\n\t\t\t\"69th\": \"ADJ\",\n\t\t\t\"....................\": \"PUNCT\",\n\t\t\t\"xmas\": \"PROPN\",\n\t\t\t\"hermit\": \"NOUN\",\n\t\t\t\"pleasurable\": \"ADJ\",\n\t\t\t\"flipping\": \"VERB\",\n\t\t\t\"grenades\": \"NOUN\",\n\t\t\t\"nationality\": \"NOUN\",\n\t\t\t\"his\": \"PRON\",\n\t\t\t\"savannah\": \"PROPN\",\n\t\t\t\"famous\": \"ADJ\",\n\t\t\t\"co-workers\": \"NOUN\",\n\t\t\t\"environmentalists\": \"NOUN\",\n\t\t\t\"products\": \"NOUN\",\n\t\t\t\"midway\": \"ADV\",\n\t\t\t\"tongues\": \"NOUN\",\n\t\t\t\"braden\": \"PROPN\",\n\t\t\t\"ultrasonic\": \"PROPN\",\n\t\t\t\"2002\": \"NUM\",\n\t\t\t\"try\": \"VERB\",\n\t\t\t\"gaily\": \"ADV\",\n\t\t\t\"ratify\": \"VERB\",\n\t\t\t\"slides\": \"NOUN\",\n\t\t\t\"http://en.wikipedia.org/wiki/john_balance\": \"PROPN\",\n\t\t\t\"september\": \"PROPN\",\n\t\t\t\"garten\": \"PROPN\",\n\t\t\t\"coffee\": \"NOUN\",\n\t\t\t\"718-780-0276\": \"NUM\",\n\t\t\t\"http://www.radianz.com\": \"PROPN\",\n\t\t\t\"structured\": \"VERB\",\n\t\t\t\"strut\": \"VERB\",\n\t\t\t\"gianna\": \"PROPN\",\n\t\t\t\"guacamole\": \"NOUN\",\n\t\t\t\"customers\": \"NOUN\",\n\t\t\t\"oatmeal\": \"NOUN\",\n\t\t\t\"liq\": \"NOUN\",\n\t\t\t\"historians\": \"NOUN\",\n\t\t\t\"overwhelming\": \"ADJ\",\n\t\t\t\"sainte\": \"PROPN\",\n\t\t\t\"trillions\": \"NOUN\",\n\t\t\t\"potato\": \"NOUN\",\n\t\t\t\"thrashing\": \"VERB\",\n\t\t\t\"brazosport\": \"PROPN\",\n\t\t\t\"reconcilable\": \"ADJ\",\n\t\t\t\"nn\": \"NUM\",\n\t\t\t\"fuse\": \"NOUN\",\n\t\t\t\"home\": \"NOUN\",\n\t\t\t\"winces\": \"VERB\",\n\t\t\t\"donkey\": \"NOUN\",\n\t\t\t\"googlescholar\": \"PROPN\",\n\t\t\t\"1881\": \"NUM\",\n\t\t\t\"adam\": \"PROPN\",\n\t\t\t\"prominence\": \"NOUN\",\n\t\t\t\"cube\": \"NOUN\",\n\t\t\t\"aromatic\": \"ADJ\",\n\t\t\t\"winding\": \"ADJ\",\n\t\t\t\"radiographs\": \"NOUN\",\n\t\t\t\"conclusions\": \"NOUN\",\n\t\t\t\"halted\": \"VERB\",\n\t\t\t\"montague\": \"PROPN\",\n\t\t\t\"ling\": \"ADV\",\n\t\t\t\"intestines\": \"NOUN\",\n\t\t\t\"arbitrary\": \"ADJ\",\n\t\t\t\"ruling\": \"NOUN\",\n\t\t\t\"bourdain\": \"PROPN\",\n\t\t\t\"austen\": \"PROPN\",\n\t\t\t\"builder\": \"NOUN\",\n\t\t\t\"cockroaches\": \"NOUN\",\n\t\t\t\"supernatural\": \"PROPN\",\n\t\t\t\"mistakenly\": \"ADV\",\n\t\t\t\"elves\": \"NOUN\",\n\t\t\t\"undergrowth\": \"NOUN\",\n\t\t\t\"ron.com\": \"PROPN\",\n\t\t\t\"engineered\": \"VERB\",\n\t\t\t\"ken\": \"PROPN\",\n\t\t\t\"paused\": \"VERB\",\n\t\t\t\"arrangements\": \"NOUN\",\n\t\t\t\"1683\": \"NUM\",\n\t\t\t\"trademarks\": \"VERB\",\n\t\t\t\"jihadis\": \"NOUN\",\n\t\t\t\"ecp\": \"PROPN\",\n\t\t\t\"modernization\": \"NOUN\",\n\t\t\t\"lotos\": \"NOUN\",\n\t\t\t\"http://www.world-nuclear.org/info/chernobyl/inf07.htm\": \"PROPN\",\n\t\t\t\"saber\": \"NOUN\",\n\t\t\t\"li\": \"PROPN\",\n\t\t\t\"processor\": \"NOUN\",\n\t\t\t\"unbelievably\": \"ADV\",\n\t\t\t\"kosovo\": \"PROPN\",\n\t\t\t\"urination\": \"NOUN\",\n\t\t\t\"issue\": \"NOUN\",\n\t\t\t\"neighborly\": \"ADJ\",\n\t\t\t\"diversity\": \"NOUN\",\n\t\t\t\"clinton\": \"PROPN\",\n\t\t\t\"marlow\": \"PROPN\",\n\t\t\t\"slaveholders\": \"NOUN\",\n\t\t\t\"safely\": \"ADV\",\n\t\t\t\"315\": \"NUM\",\n\t\t\t\"counterfeit\": \"ADJ\",\n\t\t\t\"blogosphere\": \"NOUN\",\n\t\t\t\"astounding\": \"ADJ\",\n\t\t\t\"surrounded\": \"VERB\",\n\t\t\t\"pacquiao\": \"PROPN\",\n\t\t\t\"saluted\": \"VERB\",\n\t\t\t\"donate\": \"VERB\",\n\t\t\t\"s...@sonic.net\": \"PROPN\",\n\t\t\t\"noyce\": \"PROPN\",\n\t\t\t\"1594\": \"NUM\",\n\t\t\t\"romatic\": \"ADJ\",\n\t\t\t\"power\": \"NOUN\",\n\t\t\t\"veronica\": \"PROPN\",\n\t\t\t\"climber\": \"NOUN\",\n\t\t\t\"uaar\": \"PROPN\",\n\t\t\t\"faithless\": \"ADJ\",\n\t\t\t\"aftershocks\": \"NOUN\",\n\t\t\t\"dubious\": \"ADJ\",\n\t\t\t\"plazas\": \"NOUN\",\n\t\t\t\"underground\": \"ADJ\",\n\t\t\t\"backdated\": \"VERB\",\n\t\t\t\"adapt\": \"VERB\",\n\t\t\t\"gen.\": \"PROPN\",\n\t\t\t\"remedy\": \"NOUN\",\n\t\t\t\"turd\": \"NOUN\",\n\t\t\t\"yeo\": \"PROPN\",\n\t\t\t\"ans\": \"CCONJ\",\n\t\t\t\"cardboard\": \"NOUN\",\n\t\t\t\"practise\": \"VERB\",\n\t\t\t\"electrolyte\": \"NOUN\",\n\t\t\t\"posed\": \"VERB\",\n\t\t\t\"eugene\": \"PROPN\",\n\t\t\t\"melded\": \"VERB\",\n\t\t\t\"recalls\": \"VERB\",\n\t\t\t\"berlin\": \"PROPN\",\n\t\t\t\"tap\": \"NOUN\",\n\t\t\t\"watson\": \"PROPN\",\n\t\t\t\"milan\": \"PROPN\",\n\t\t\t\"blew\": \"VERB\",\n\t\t\t\"secretary\": \"PROPN\",\n\t\t\t\"appeared\": \"VERB\",\n\t\t\t\"information\": \"NOUN\",\n\t\t\t\"uninhabited\": \"ADJ\",\n\t\t\t\"death-speckled\": \"ADJ\",\n\t\t\t\"disquiet\": \"NOUN\",\n\t\t\t\"conferees\": \"NOUN\",\n\t\t\t\"comcast\": \"PROPN\",\n\t\t\t\"beige\": \"ADJ\",\n\t\t\t\"arbery\": \"PROPN\",\n\t\t\t\"senator\": \"PROPN\",\n\t\t\t\"à\": \"PROPN\",\n\t\t\t\"t2i\": \"NOUN\",\n\t\t\t\"ethnic\": \"ADJ\",\n\t\t\t\"satay\": \"NOUN\",\n\t\t\t\"lawmakers\": \"NOUN\",\n\t\t\t\"unwrap\": \"VERB\",\n\t\t\t\"defendant\": \"NOUN\",\n\t\t\t\"misrepresent\": \"VERB\",\n\t\t\t\"diwaniya\": \"PROPN\",\n\t\t\t\"ability\": \"NOUN\",\n\t\t\t\"cortese\": \"PROPN\",\n\t\t\t\"wings\": \"NOUN\",\n\t\t\t\"winnt\": \"PROPN\",\n\t\t\t\"buddy\": \"NOUN\",\n\t\t\t\"spice\": \"NOUN\",\n\t\t\t\"transcendent\": \"ADJ\",\n\t\t\t\"benin\": \"PROPN\",\n\t\t\t\"payed\": \"VERB\",\n\t\t\t\"use\": \"VERB\",\n\t\t\t\"cleaner\": \"NOUN\",\n\t\t\t\"charlie\": \"PROPN\",\n\t\t\t\"onboard\": \"ADV\",\n\t\t\t\"settlement\": \"NOUN\",\n\t\t\t\"polls\": \"NOUN\",\n\t\t\t\"obstinate\": \"ADJ\",\n\t\t\t\"each\": \"DET\",\n\t\t\t\"hamas\": \"PROPN\",\n\t\t\t\"banked-over\": \"ADJ\",\n\t\t\t\"fewest\": \"ADJ\",\n\t\t\t\"skulking\": \"VERB\",\n\t\t\t\"belch\": \"NOUN\",\n\t\t\t\"strategic\": \"ADJ\",\n\t\t\t\"equivalence\": \"NOUN\",\n\t\t\t\"kano\": \"PROPN\",\n\t\t\t\"janeiro\": \"PROPN\",\n\t\t\t\"księży\": \"PROPN\",\n\t\t\t\"celsius\": \"PROPN\",\n\t\t\t\"gallon\": \"NOUN\",\n\t\t\t\"ooze\": \"NOUN\",\n\t\t\t\"gabonese\": \"ADJ\",\n\t\t\t\"evaluation\": \"NOUN\",\n\t\t\t\"ρ\": \"NOUN\",\n\t\t\t\"antonio\": \"PROPN\",\n\t\t\t\"half-embarrassed\": \"VERB\",\n\t\t\t\"behavioral\": \"ADJ\",\n\t\t\t\"invoke\": \"VERB\",\n\t\t\t\"yet\": \"ADV\",\n\t\t\t\"sorrows\": \"NOUN\",\n\t\t\t\"endorsements\": \"NOUN\",\n\t\t\t\"paste\": \"VERB\",\n\t\t\t\"metascience\": \"NOUN\",\n\t\t\t\"firefox\": \"PROPN\",\n\t\t\t\"platter\": \"NOUN\",\n\t\t\t\"resembles\": \"VERB\",\n\t\t\t\"homework\": \"NOUN\",\n\t\t\t\"attacked\": \"VERB\",\n\t\t\t\"attaches\": \"VERB\",\n\t\t\t\"nagaski\": \"PROPN\",\n\t\t\t\"ps.\": \"NOUN\",\n\t\t\t\"migrates\": \"VERB\",\n\t\t\t\"contrasts\": \"NOUN\",\n\t\t\t\"balochistan\": \"PROPN\",\n\t\t\t\"fatigue\": \"NOUN\",\n\t\t\t\"offshore\": \"ADJ\",\n\t\t\t\"weeks\": \"NOUN\",\n\t\t\t\"implicated\": \"VERB\",\n\t\t\t\"spang\": \"PROPN\",\n\t\t\t\"berthage\": \"NOUN\",\n\t\t\t\"monarch\": \"NOUN\",\n\t\t\t\"aims\": \"VERB\",\n\t\t\t\"spears\": \"PROPN\",\n\t\t\t\"yack\": \"PROPN\",\n\t\t\t\"howard\": \"PROPN\",\n\t\t\t\"gather\": \"VERB\",\n\t\t\t\"panel\": \"NOUN\",\n\t\t\t\"non-realism\": \"NOUN\",\n\t\t\t\"warranty\": \"NOUN\",\n\t\t\t\"encyclopedia\": \"PROPN\",\n\t\t\t\"omelettes\": \"NOUN\",\n\t\t\t\"adventurers\": \"NOUN\",\n\t\t\t\"side-locks\": \"NOUN\",\n\t\t\t\"hitch\": \"NOUN\",\n\t\t\t\"topless\": \"ADJ\",\n\t\t\t\"mature\": \"ADJ\",\n\t\t\t\"equine\": \"ADJ\",\n\t\t\t\"inwood\": \"PROPN\",\n\t\t\t\"sq\": \"ADJ\",\n\t\t\t\"guantanamo\": \"PROPN\",\n\t\t\t\"subtract\": \"VERB\",\n\t\t\t\"ribbons\": \"NOUN\",\n\t\t\t\"congested\": \"ADJ\",\n\t\t\t\"advertising\": \"NOUN\",\n\t\t\t\"10/29/2000\": \"NUM\",\n\t\t\t\"quesadillas\": \"NOUN\",\n\t\t\t\"alt.animals\": \"NOUN\",\n\t\t\t\"apparatus\": \"NOUN\",\n\t\t\t\"rooting\": \"VERB\",\n\t\t\t\"brilliant\": \"ADJ\",\n\t\t\t\"elastic\": \"NOUN\",\n\t\t\t\"irritation\": \"NOUN\",\n\t\t\t\"websphere\": \"PROPN\",\n\t\t\t\"imports\": \"NOUN\",\n\t\t\t\"amanda\": \"PROPN\",\n\t\t\t\"f&am\": \"PROPN\",\n\t\t\t\"5.3\": \"NUM\",\n\t\t\t\"publish\": \"VERB\",\n\t\t\t\"qualification\": \"NOUN\",\n\t\t\t\"weary\": \"ADJ\",\n\t\t\t\"bile-coloured\": \"ADJ\",\n\t\t\t\"ld2d-#69397-1.doc\": \"NOUN\",\n\t\t\t\"brad\": \"PROPN\",\n\t\t\t\"equating\": \"VERB\",\n\t\t\t\"attach\": \"VERB\",\n\t\t\t\"crawford\": \"PROPN\",\n\t\t\t\"alcoholics\": \"NOUN\",\n\t\t\t\"satisfactory\": \"ADJ\",\n\t\t\t\"p&l\": \"NOUN\",\n\t\t\t\"drooling\": \"VERB\",\n\t\t\t\"possible\": \"ADJ\",\n\t\t\t\"ghanaians\": \"NOUN\",\n\t\t\t\"ppm\": \"NOUN\",\n\t\t\t\"salon\": \"NOUN\",\n\t\t\t\"violators\": \"NOUN\",\n\t\t\t\"racked\": \"VERB\",\n\t\t\t\"proven\": \"VERB\",\n\t\t\t\"tremor\": \"NOUN\",\n\t\t\t\"grasping\": \"VERB\",\n\t\t\t\"hanged\": \"VERB\",\n\t\t\t\"suffices\": \"VERB\",\n\t\t\t\"sprung\": \"VERB\",\n\t\t\t\"shea\": \"PROPN\",\n\t\t\t\"investor\": \"NOUN\",\n\t\t\t\"representing\": \"VERB\",\n\t\t\t\"councillors\": \"NOUN\",\n\t\t\t\"julien\": \"PROPN\",\n\t\t\t\"!!!!!!!!!!!!!!!!!!!!!\": \"PUNCT\",\n\t\t\t\"ciac\": \"NOUN\",\n\t\t\t\"stoning\": \"NOUN\",\n\t\t\t\"vr\": \"PROPN\",\n\t\t\t\"misunderstanding\": \"NOUN\",\n\t\t\t\"---------\": \"PUNCT\",\n\t\t\t\"2015\": \"NUM\",\n\t\t\t\"joo-ho\": \"PROPN\",\n\t\t\t\"gosh\": \"INTJ\",\n\t\t\t\"fortunately\": \"ADV\",\n\t\t\t\"book\": \"NOUN\",\n\t\t\t\"interviewing\": \"VERB\",\n\t\t\t\"execute\": \"VERB\",\n\t\t\t\"carefully\": \"ADV\",\n\t\t\t\"play\": \"VERB\",\n\t\t\t\"1540s\": \"NOUN\",\n\t\t\t\"xovetic\": \"PROPN\",\n\t\t\t\"catagory\": \"NOUN\",\n\t\t\t\"centro\": \"PROPN\",\n\t\t\t\"earl\": \"PROPN\",\n\t\t\t\"flourished\": \"VERB\",\n\t\t\t\"interesting\": \"ADJ\",\n\t\t\t\"heartbroken\": \"ADJ\",\n\t\t\t\"illustrating\": \"VERB\",\n\t\t\t\"v\": \"NOUN\",\n\t\t\t\"1977\": \"NUM\",\n\t\t\t\"rambunctious\": \"ADJ\",\n\t\t\t\"doorknobs\": \"NOUN\",\n\t\t\t\"abby\": \"PROPN\",\n\t\t\t\"nutrition\": \"NOUN\",\n\t\t\t\"issuing\": \"VERB\",\n\t\t\t\"learn\": \"VERB\",\n\t\t\t\"crow\": \"NOUN\",\n\t\t\t\"recommend\": \"VERB\",\n\t\t\t\"mainland\": \"NOUN\",\n\t\t\t\"birthdate\": \"NOUN\",\n\t\t\t\"approaches\": \"NOUN\",\n\t\t\t\"led\": \"VERB\",\n\t\t\t\"assertive\": \"ADJ\",\n\t\t\t\"mastery\": \"NOUN\",\n\t\t\t\"03:15\": \"NUM\",\n\t\t\t\"###\": \"SYM\",\n\t\t\t\"called\": \"VERB\",\n\t\t\t\"polluted\": \"VERB\",\n\t\t\t\"doubles\": \"NOUN\",\n\t\t\t\"illness\": \"NOUN\",\n\t\t\t\"controls\": \"NOUN\",\n\t\t\t\"foodshed\": \"NOUN\",\n\t\t\t\"08:00\": \"NUM\",\n\t\t\t\"contracting\": \"NOUN\",\n\t\t\t\"lanterns\": \"NOUN\",\n\t\t\t\"credence\": \"NOUN\",\n\t\t\t\"1689\": \"NUM\",\n\t\t\t\"gabriel\": \"PROPN\",\n\t\t\t\"dakota\": \"PROPN\",\n\t\t\t\"rewinding\": \"VERB\",\n\t\t\t\"pakistan\": \"PROPN\",\n\t\t\t\"instilling\": \"VERB\",\n\t\t\t\"moniker\": \"NOUN\",\n\t\t\t\"eating\": \"VERB\",\n\t\t\t\"no-6\": \"NUM\",\n\t\t\t\"bugs\": \"NOUN\",\n\t\t\t\"macao\": \"PROPN\",\n\t\t\t\"___________________________________________\": \"SYM\",\n\t\t\t\"satisfied\": \"ADJ\",\n\t\t\t\"award\": \"NOUN\",\n\t\t\t\"dicot\": \"NOUN\",\n\t\t\t\"emerges\": \"VERB\",\n\t\t\t\"balloting\": \"NOUN\",\n\t\t\t\"coco\": \"PROPN\",\n\t\t\t\"calvinist\": \"ADJ\",\n\t\t\t\"descend\": \"VERB\",\n\t\t\t\"logically\": \"ADV\",\n\t\t\t\"4.98\": \"NUM\",\n\t\t\t\"evansville\": \"PROPN\",\n\t\t\t\"volunteer\": \"NOUN\",\n\t\t\t\"+++\": \"SYM\",\n\t\t\t\"ph.d.\": \"NOUN\",\n\t\t\t\"arrangement\": \"NOUN\",\n\t\t\t\"edinburgh\": \"PROPN\",\n\t\t\t\"advertised\": \"VERB\",\n\t\t\t\"joe_lardy@cargill.com\": \"PROPN\",\n\t\t\t\"resorts\": \"NOUN\",\n\t\t\t\"machine\": \"NOUN\",\n\t\t\t\"boob\": \"NOUN\",\n\t\t\t\"transporting\": \"VERB\",\n\t\t\t\"anyways\": \"ADV\",\n\t\t\t\"symmetries\": \"NOUN\",\n\t\t\t\"badge\": \"NOUN\",\n\t\t\t\"references\": \"NOUN\",\n\t\t\t\"kumar\": \"PROPN\",\n\t\t\t\"basse\": \"PROPN\",\n\t\t\t\"ye$\": \"INTJ\",\n\t\t\t\"encourages\": \"VERB\",\n\t\t\t\"carpets\": \"NOUN\",\n\t\t\t\"wessex\": \"PROPN\",\n\t\t\t\"deposit\": \"NOUN\",\n\t\t\t\"pennies\": \"NOUN\",\n\t\t\t\"11/8/00\": \"NUM\",\n\t\t\t\"measurements\": \"NOUN\",\n\t\t\t\"danced\": \"VERB\",\n\t\t\t\"silently\": \"ADV\",\n\t\t\t\"dynamic\": \"ADJ\",\n\t\t\t\"advising\": \"VERB\",\n\t\t\t\"higher\": \"ADJ\",\n\t\t\t\"ankles\": \"NOUN\",\n\t\t\t\"threadbare\": \"ADJ\",\n\t\t\t\"chai\": \"NOUN\",\n\t\t\t\"gentlemanly\": \"ADJ\",\n\t\t\t\"endured\": \"VERB\",\n\t\t\t\"d'alembert\": \"PROPN\",\n\t\t\t\"startled\": \"ADJ\",\n\t\t\t\"forearm\": \"NOUN\",\n\t\t\t\"misfortune\": \"NOUN\",\n\t\t\t\"52\": \"NUM\",\n\t\t\t\"saltford\": \"PROPN\",\n\t\t\t\"50000\": \"NUM\",\n\t\t\t\"downwelling\": \"VERB\",\n\t\t\t\"appearance\": \"NOUN\",\n\t\t\t\"public-relations\": \"ADJ\",\n\t\t\t\"anacapa\": \"PROPN\",\n\t\t\t\"favorably\": \"ADV\",\n\t\t\t\"sheltered\": \"VERB\",\n\t\t\t\"consulting\": \"NOUN\",\n\t\t\t\"zoom\": \"NOUN\",\n\t\t\t\"diplomacy\": \"NOUN\",\n\t\t\t\"stuff\": \"NOUN\",\n\t\t\t\"caleb\": \"PROPN\",\n\t\t\t\"pie\": \"NOUN\",\n\t\t\t\"berg\": \"PROPN\",\n\t\t\t\"ecosystems\": \"NOUN\",\n\t\t\t\"tattoed\": \"VERB\",\n\t\t\t\"thuy\": \"PROPN\",\n\t\t\t\"brendler\": \"PROPN\",\n\t\t\t\"frequented\": \"VERB\",\n\t\t\t\"bernoulli\": \"PROPN\",\n\t\t\t\"entrenched\": \"VERB\",\n\t\t\t\"jérôme\": \"PROPN\",\n\t\t\t\"practicing\": \"VERB\",\n\t\t\t\"pro-establishment\": \"ADJ\",\n\t\t\t\"atithi\": \"PROPN\",\n\t\t\t\"specials\": \"NOUN\",\n\t\t\t\"coconut\": \"NOUN\",\n\t\t\t\"guffaw\": \"NOUN\",\n\t\t\t\"reprisal\": \"NOUN\",\n\t\t\t\"chemical\": \"ADJ\",\n\t\t\t\"potentially\": \"ADV\",\n\t\t\t\"turquoise\": \"NOUN\",\n\t\t\t\"713/853-5984\": \"NUM\",\n\t\t\t\"evenly\": \"ADV\",\n\t\t\t\"kool\": \"PROPN\",\n\t\t\t\"relative\": \"ADJ\",\n\t\t\t\"conduits\": \"NOUN\",\n\t\t\t\"lessen\": \"VERB\",\n\t\t\t\"instruments\": \"NOUN\",\n\t\t\t\"wajda\": \"PROPN\",\n\t\t\t\"watered\": \"VERB\",\n\t\t\t\"sow\": \"VERB\",\n\t\t\t\"attributable\": \"ADJ\",\n\t\t\t\"firstly\": \"ADV\",\n\t\t\t\"potent\": \"ADJ\",\n\t\t\t\"mailer\": \"NOUN\",\n\t\t\t\"powerless\": \"ADJ\",\n\t\t\t\"artistically\": \"ADV\",\n\t\t\t\"elude\": \"VERB\",\n\t\t\t\"trunk\": \"NOUN\",\n\t\t\t\"chronic\": \"ADJ\",\n\t\t\t\"tanned\": \"ADJ\",\n\t\t\t\"processing\": \"NOUN\",\n\t\t\t\"eyebrows\": \"NOUN\",\n\t\t\t\"dynamically\": \"ADV\",\n\t\t\t\"attack\": \"NOUN\",\n\t\t\t\"datamanager\": \"NOUN\",\n\t\t\t\"decook\": \"PROPN\",\n\t\t\t\"asylum\": \"NOUN\",\n\t\t\t\"engage\": \"VERB\",\n\t\t\t\"emptiness\": \"NOUN\",\n\t\t\t\"accident\": \"NOUN\",\n\t\t\t\"scavenging\": \"ADJ\",\n\t\t\t\"hurry\": \"NOUN\",\n\t\t\t\"padmasana\": \"NOUN\",\n\t\t\t\"republicans\": \"PROPN\",\n\t\t\t\"springs\": \"PROPN\",\n\t\t\t\"defended\": \"VERB\",\n\t\t\t\"rinsed\": \"VERB\",\n\t\t\t\"sailing\": \"VERB\",\n\t\t\t\"nirmal\": \"PROPN\",\n\t\t\t\"reportedly\": \"ADV\",\n\t\t\t\"feat\": \"NOUN\",\n\t\t\t\"funnel\": \"NOUN\",\n\t\t\t\"bernard\": \"PROPN\",\n\t\t\t\"sleepless\": \"ADJ\",\n\t\t\t\"termination\": \"NOUN\",\n\t\t\t\"hoping\": \"VERB\",\n\t\t\t\"fairness\": \"NOUN\",\n\t\t\t\"tortured\": \"VERB\",\n\t\t\t\"indignation\": \"NOUN\",\n\t\t\t\"dkk\": \"SYM\",\n\t\t\t\"iguaçu\": \"PROPN\",\n\t\t\t\"-----------------------------------------------------------------------\": \"PUNCT\",\n\t\t\t\"reinstein\": \"PROPN\",\n\t\t\t\"perv\": \"NOUN\",\n\t\t\t\"yahoo\": \"PROPN\",\n\t\t\t\"assign\": \"VERB\",\n\t\t\t\"componential\": \"ADJ\",\n\t\t\t\"attaching\": \"VERB\",\n\t\t\t\"earnestly\": \"ADV\",\n\t\t\t\"trey\": \"PROPN\",\n\t\t\t\"flanks\": \"NOUN\",\n\t\t\t\"films\": \"NOUN\",\n\t\t\t\"1958\": \"NUM\",\n\t\t\t\"renewing\": \"VERB\",\n\t\t\t\"rumors\": \"NOUN\",\n\t\t\t\"congressman\": \"NOUN\",\n\t\t\t\"bryer\": \"NOUN\",\n\t\t\t\"9221\": \"NUM\",\n\t\t\t\"retroactive\": \"ADJ\",\n\t\t\t\"crystal-clear\": \"ADJ\",\n\t\t\t\"defibrillator\": \"NOUN\",\n\t\t\t\"traditional\": \"ADJ\",\n\t\t\t\"fisheries\": \"NOUN\",\n\t\t\t\"orderd\": \"VERB\",\n\t\t\t\"signifies\": \"VERB\",\n\t\t\t\"liberty\": \"PROPN\",\n\t\t\t\"spires\": \"NOUN\",\n\t\t\t\"reacted\": \"VERB\",\n\t\t\t\"hmc\": \"PROPN\",\n\t\t\t\"expanse\": \"NOUN\",\n\t\t\t\"vegetarianism\": \"PROPN\",\n\t\t\t\"collasped\": \"VERB\",\n\t\t\t\"ingrown\": \"ADJ\",\n\t\t\t\"mircles\": \"NOUN\",\n\t\t\t\"episcopal\": \"PROPN\",\n\t\t\t\"petrified\": \"ADJ\",\n\t\t\t\"nmanne@susmangodfrey.com\": \"PROPN\",\n\t\t\t\"detainees\": \"NOUN\",\n\t\t\t\"tana.jones@en\": \"PROPN\",\n\t\t\t\"side\": \"NOUN\",\n\t\t\t\"/\": \"SYM\",\n\t\t\t\"w/\": \"ADP\",\n\t\t\t\"fluorescent\": \"ADJ\",\n\t\t\t\"anytime\": \"ADV\",\n\t\t\t\"advisor\": \"NOUN\",\n\t\t\t\"hera\": \"PROPN\",\n\t\t\t\"condemned\": \"VERB\",\n\t\t\t\"2,210\": \"NUM\",\n\t\t\t\"888-422-7132\": \"NUM\",\n\t\t\t\"boasts\": \"VERB\",\n\t\t\t\"expressive\": \"ADJ\",\n\t\t\t\"honors\": \"NOUN\",\n\t\t\t\"branch\": \"NOUN\",\n\t\t\t\"restful\": \"ADJ\",\n\t\t\t\"philip\": \"PROPN\",\n\t\t\t\"sister\": \"NOUN\",\n\t\t\t\"remission\": \"NOUN\",\n\t\t\t\"lower\": \"ADJ\",\n\t\t\t\"adn\": \"CCONJ\",\n\t\t\t\"prankster\": \"NOUN\",\n\t\t\t\"unplaced\": \"ADJ\",\n\t\t\t\"contemptuously\": \"ADV\",\n\t\t\t\"self-righteously\": \"ADV\",\n\t\t\t\"mud\": \"NOUN\",\n\t\t\t\"gouging\": \"NOUN\",\n\t\t\t\"riso\": \"NOUN\",\n\t\t\t\"!!!\": \"PUNCT\",\n\t\t\t\"drowning\": \"VERB\",\n\t\t\t\"congratulations\": \"NOUN\",\n\t\t\t\"clough\": \"PROPN\",\n\t\t\t\"saturdays\": \"NOUN\",\n\t\t\t\"imu\": \"PROPN\",\n\t\t\t\"idle\": \"ADJ\",\n\t\t\t\"diameter\": \"NOUN\",\n\t\t\t\"purportedly\": \"ADV\",\n\t\t\t\"grande\": \"PROPN\",\n\t\t\t\"03/02/2001\": \"NUM\",\n\t\t\t\"glamorous\": \"ADJ\",\n\t\t\t\"strengthen\": \"VERB\",\n\t\t\t\"gakuru\": \"PROPN\",\n\t\t\t\"widest\": \"ADJ\",\n\t\t\t\"yr.\": \"NOUN\",\n\t\t\t\"conned\": \"VERB\",\n\t\t\t\"grocerys\": \"NOUN\",\n\t\t\t\"bestiality\": \"NOUN\",\n\t\t\t\"grazing\": \"VERB\",\n\t\t\t\"leads\": \"VERB\",\n\t\t\t\"disguise\": \"NOUN\",\n\t\t\t\"butterfly\": \"NOUN\",\n\t\t\t\"daydreams\": \"NOUN\",\n\t\t\t\"lifted\": \"VERB\",\n\t\t\t\"nineteen\": \"NUM\",\n\t\t\t\"presenter\": \"NOUN\",\n\t\t\t\"startling\": \"ADJ\",\n\t\t\t\"shallow\": \"ADJ\",\n\t\t\t\"movimento\": \"PROPN\",\n\t\t\t\"scissored\": \"ADJ\",\n\t\t\t\"202\": \"NUM\",\n\t\t\t\"makers\": \"NOUN\",\n\t\t\t\"goebbels\": \"PROPN\",\n\t\t\t\"resultant\": \"ADJ\",\n\t\t\t\"premiums\": \"NOUN\",\n\t\t\t\"massachusetts\": \"PROPN\",\n\t\t\t\"determine\": \"VERB\",\n\t\t\t\"tin-billy\": \"NOUN\",\n\t\t\t\"black\": \"ADJ\",\n\t\t\t\"lbs\": \"NOUN\",\n\t\t\t\"teresa\": \"PROPN\",\n\t\t\t\"quadrant\": \"NOUN\",\n\t\t\t\"26th\": \"NOUN\",\n\t\t\t\"17,500\": \"NUM\",\n\t\t\t\"532-3836\": \"NUM\",\n\t\t\t\"syntactic\": \"ADJ\",\n\t\t\t\"turkish\": \"ADJ\",\n\t\t\t\"andes\": \"PROPN\",\n\t\t\t\"brotherhood\": \"PROPN\",\n\t\t\t\"monkey\": \"NOUN\",\n\t\t\t\"buckley\": \"PROPN\",\n\t\t\t\"revolution\": \"NOUN\",\n\t\t\t\"pachomius\": \"PROPN\",\n\t\t\t\"helium\": \"NOUN\",\n\t\t\t\"downsizing\": \"NOUN\",\n\t\t\t\"expected\": \"VERB\",\n\t\t\t\"drowned\": \"VERB\",\n\t\t\t\"wahhabis\": \"PROPN\",\n\t\t\t\"07:55\": \"NUM\",\n\t\t\t\"scary\": \"ADJ\",\n\t\t\t\"repugnant\": \"ADJ\",\n\t\t\t\"reporter\": \"NOUN\",\n\t\t\t\"branford\": \"PROPN\",\n\t\t\t\"12:12\": \"NUM\",\n\t\t\t\"bondad\": \"PROPN\",\n\t\t\t\"dozed\": \"VERB\",\n\t\t\t\"nothing\": \"PRON\",\n\t\t\t\"precipitation\": \"NOUN\",\n\t\t\t\"regretted\": \"VERB\",\n\t\t\t\"honour\": \"NOUN\",\n\t\t\t\"vistas\": \"NOUN\",\n\t\t\t\"buildup\": \"NOUN\",\n\t\t\t\"confirmations\": \"NOUN\",\n\t\t\t\"sordid\": \"ADJ\",\n\t\t\t\"8.00\": \"NUM\",\n\t\t\t\"canan\": \"PROPN\",\n\t\t\t\"pasta\": \"NOUN\",\n\t\t\t\"handily\": \"ADV\",\n\t\t\t\"euros\": \"NOUN\",\n\t\t\t\"quantity\": \"NOUN\",\n\t\t\t\"non-indians\": \"PROPN\",\n\t\t\t\"leather\": \"NOUN\",\n\t\t\t\"relaxation\": \"NOUN\",\n\t\t\t\"s@p\": \"NOUN\",\n\t\t\t\"glenn\": \"PROPN\",\n\t\t\t\"guitar\": \"NOUN\",\n\t\t\t\"graduation\": \"NOUN\",\n\t\t\t\"case\": \"NOUN\",\n\t\t\t\"nobel\": \"PROPN\",\n\t\t\t\"stand-offish\": \"ADJ\",\n\t\t\t\"inhaler\": \"NOUN\",\n\t\t\t\"squeezed\": \"VERB\",\n\t\t\t\"øhav\": \"PROPN\",\n\t\t\t\"reckon\": \"VERB\",\n\t\t\t\"aiding\": \"VERB\",\n\t\t\t\"difficulties\": \"NOUN\",\n\t\t\t\"starched\": \"VERB\",\n\t\t\t\"sciri\": \"PROPN\",\n\t\t\t\"ikhbariya\": \"PROPN\",\n\t\t\t\"https://www.nytimes.com/2017/04/16/technology/inside-the-hotel-industrys-plan-to-combat-airbnb.html\": \"PROPN\",\n\t\t\t\"80y\": \"NOUN\",\n\t\t\t\"keys\": \"NOUN\",\n\t\t\t\"ambiguity\": \"NOUN\",\n\t\t\t\"disruption\": \"NOUN\",\n\t\t\t\"lemell\": \"PROPN\",\n\t\t\t\"december\": \"PROPN\",\n\t\t\t\"offerings\": \"NOUN\",\n\t\t\t\"718-780-0046\": \"NUM\",\n\t\t\t\"mommy\": \"NOUN\",\n\t\t\t\"deteriorating\": \"VERB\",\n\t\t\t\"middlebrooks\": \"PROPN\",\n\t\t\t\"texan\": \"ADJ\",\n\t\t\t\"1989\": \"NUM\",\n\t\t\t\"geofence\": \"NOUN\",\n\t\t\t\"implemented\": \"VERB\",\n\t\t\t\"napa\": \"PROPN\",\n\t\t\t\"drills\": \"NOUN\",\n\t\t\t\"sieve\": \"NOUN\",\n\t\t\t\"des\": \"PROPN\",\n\t\t\t\"fascination\": \"NOUN\",\n\t\t\t\"misleading\": \"ADJ\",\n\t\t\t\"enormous\": \"ADJ\",\n\t\t\t\"surrealist\": \"ADJ\",\n\t\t\t\"downtown\": \"NOUN\",\n\t\t\t\"fleck\": \"PROPN\",\n\t\t\t\"nags\": \"NOUN\",\n\t\t\t\"bothered\": \"VERB\",\n\t\t\t\"boxwood\": \"NOUN\",\n\t\t\t\"horseshoes\": \"NOUN\",\n\t\t\t\"hmmmm\": \"INTJ\",\n\t\t\t\"edgar\": \"PROPN\",\n\t\t\t\"package\": \"NOUN\",\n\t\t\t\"incompetent\": \"ADJ\",\n\t\t\t\"dubbed\": \"VERB\",\n\t\t\t\"liquidations\": \"NOUN\",\n\t\t\t\"8274\": \"NUM\",\n\t\t\t\"abdullah\": \"PROPN\",\n\t\t\t\"busiest\": \"ADJ\",\n\t\t\t\"unchanged\": \"ADJ\",\n\t\t\t\"fancies\": \"VERB\",\n\t\t\t\"maguire\": \"PROPN\",\n\t\t\t\"perks\": \"NOUN\",\n\t\t\t\"punk\": \"NOUN\",\n\t\t\t\"expire\": \"VERB\",\n\t\t\t\"refinement\": \"NOUN\",\n\t\t\t\"opposite\": \"ADJ\",\n\t\t\t\"&amp;\": \"CCONJ\",\n\t\t\t\"julie\": \"PROPN\",\n\t\t\t\"lists\": \"NOUN\",\n\t\t\t\"marbles\": \"PROPN\",\n\t\t\t\"reduce\": \"VERB\",\n\t\t\t\"recrudescence\": \"NOUN\",\n\t\t\t\"pasture\": \"NOUN\",\n\t\t\t\"ʻōlelo\": \"PROPN\",\n\t\t\t\"introspection\": \"NOUN\",\n\t\t\t\"spreadsheet-like\": \"ADJ\",\n\t\t\t\"freight\": \"NOUN\",\n\t\t\t\"nebulous\": \"ADJ\",\n\t\t\t\"kidnapped\": \"VERB\",\n\t\t\t\"mantia\": \"PROPN\",\n\t\t\t\"interjection\": \"NOUN\",\n\t\t\t\"percentile\": \"NOUN\",\n\t\t\t\"eta_revision0307.doc\": \"NOUN\",\n\t\t\t\"ossoff\": \"PROPN\",\n\t\t\t\"’d\": \"AUX\",\n\t\t\t\"e-mailed\": \"VERB\",\n\t\t\t\"dramatic\": \"ADJ\",\n\t\t\t\"y\": \"PROPN\",\n\t\t\t\"uin\": \"NOUN\",\n\t\t\t\"furry\": \"ADJ\",\n\t\t\t\"replete\": \"ADJ\",\n\t\t\t\"karol\": \"PROPN\",\n\t\t\t\"punches\": \"NOUN\",\n\t\t\t\"leftist\": \"NOUN\",\n\t\t\t\"sand\": \"NOUN\",\n\t\t\t\"delicately\": \"ADV\",\n\t\t\t\"alibek\": \"PROPN\",\n\t\t\t\"claudio\": \"PROPN\",\n\t\t\t\"caverns\": \"NOUN\",\n\t\t\t\"hassan\": \"PROPN\",\n\t\t\t\"motions\": \"NOUN\",\n\t\t\t\"boggles\": \"VERB\",\n\t\t\t\"hyperbole\": \"NOUN\",\n\t\t\t\"recite\": \"VERB\",\n\t\t\t\"spar\": \"PROPN\",\n\t\t\t\"gang\": \"NOUN\",\n\t\t\t\"andres\": \"PROPN\",\n\t\t\t\"eggs\": \"NOUN\",\n\t\t\t\"booked\": \"VERB\",\n\t\t\t\"flower\": \"NOUN\",\n\t\t\t\"predetermined\": \"VERB\",\n\t\t\t\"mediation\": \"NOUN\",\n\t\t\t\"aptly\": \"ADV\",\n\t\t\t\"mater\": \"NOUN\",\n\t\t\t\"embryo\": \"NOUN\",\n\t\t\t\"potpourri\": \"NOUN\",\n\t\t\t\"noel\": \"PROPN\",\n\t\t\t\".265\": \"NUM\",\n\t\t\t\"editing\": \"NOUN\",\n\t\t\t\"cup\": \"NOUN\",\n\t\t\t\"sunglasses\": \"NOUN\",\n\t\t\t\"richest\": \"ADJ\",\n\t\t\t\"figured\": \"VERB\",\n\t\t\t\"mention\": \"VERB\",\n\t\t\t\"brothers\": \"NOUN\",\n\t\t\t\"laughter\": \"NOUN\",\n\t\t\t\"winking\": \"VERB\",\n\t\t\t\"manoeuvring\": \"NOUN\",\n\t\t\t\"checked\": \"VERB\",\n\t\t\t\"seriousness\": \"NOUN\",\n\t\t\t\"habitation\": \"NOUN\",\n\t\t\t\"underwrite\": \"VERB\",\n\t\t\t\"harbour\": \"NOUN\",\n\t\t\t\"sadat\": \"PROPN\",\n\t\t\t\"135th\": \"ADV\",\n\t\t\t\"contacting\": \"VERB\",\n\t\t\t\"fracture\": \"NOUN\",\n\t\t\t\"enveloping\": \"VERB\",\n\t\t\t\"immigrant\": \"NOUN\",\n\t\t\t\"bully\": \"NOUN\",\n\t\t\t\"sneak\": \"VERB\",\n\t\t\t\"rouge\": \"NOUN\",\n\t\t\t\"tension\": \"NOUN\",\n\t\t\t\"mold\": \"NOUN\",\n\t\t\t\"napkin\": \"NOUN\",\n\t\t\t\"crossword\": \"NOUN\",\n\t\t\t\"1871\": \"NUM\",\n\t\t\t\"sworn\": \"VERB\",\n\t\t\t\"incomes\": \"NOUN\",\n\t\t\t\"lifestyle\": \"NOUN\",\n\t\t\t\"withdrawal\": \"NOUN\",\n\t\t\t\"miners\": \"NOUN\",\n\t\t\t\"plagued\": \"VERB\",\n\t\t\t\"dispossesed\": \"ADJ\",\n\t\t\t\"theodorus\": \"PROPN\",\n\t\t\t\"shin-wook\": \"PROPN\",\n\t\t\t\"applications\": \"NOUN\",\n\t\t\t\"multiplying\": \"VERB\",\n\t\t\t\"prize\": \"NOUN\",\n\t\t\t\"usd\": \"SYM\",\n\t\t\t\"spay\": \"NOUN\",\n\t\t\t\"ticks\": \"VERB\",\n\t\t\t\"convict\": \"NOUN\",\n\t\t\t\"collectively\": \"ADV\",\n\t\t\t\"attracted\": \"VERB\",\n\t\t\t\"translation\": \"NOUN\",\n\t\t\t\"depredations\": \"NOUN\",\n\t\t\t\"sonoran\": \"PROPN\",\n\t\t\t\"faced\": \"VERB\",\n\t\t\t\"fucked\": \"VERB\",\n\t\t\t\"******************************************************************\": \"PUNCT\",\n\t\t\t\"fresh\": \"ADJ\",\n\t\t\t\"tattoo\": \"NOUN\",\n\t\t\t\"notepad\": \"NOUN\",\n\t\t\t\"102\": \"NUM\",\n\t\t\t\"calmness\": \"NOUN\",\n\t\t\t\"0491\": \"NUM\",\n\t\t\t\"rufinus\": \"PROPN\",\n\t\t\t\"exact\": \"ADJ\",\n\t\t\t\"naha\": \"PROPN\",\n\t\t\t\"suffrage\": \"NOUN\",\n\t\t\t\"girl\": \"NOUN\",\n\t\t\t\"esports\": \"PROPN\",\n\t\t\t\"lbj\": \"PROPN\",\n\t\t\t\"subscribe\": \"VERB\",\n\t\t\t\"seperates\": \"VERB\",\n\t\t\t\"vent\": \"NOUN\",\n\t\t\t\"interweave\": \"VERB\",\n\t\t\t\"iceberg\": \"NOUN\",\n\t\t\t\"vested\": \"ADJ\",\n\t\t\t\"unfreeze\": \"VERB\",\n\t\t\t\"leering\": \"VERB\",\n\t\t\t\"citizen\": \"NOUN\",\n\t\t\t\"$2,000\": \"NUM\",\n\t\t\t\"doled\": \"VERB\",\n\t\t\t\"mess\": \"NOUN\",\n\t\t\t\"highlight\": \"NOUN\",\n\t\t\t\"smirk\": \"NOUN\",\n\t\t\t\"flooring\": \"NOUN\",\n\t\t\t\"baggio\": \"PROPN\",\n\t\t\t\"’73\": \"NUM\",\n\t\t\t\"angel\": \"NOUN\",\n\t\t\t\"5000\": \"NUM\",\n\t\t\t\"apricot\": \"NOUN\",\n\t\t\t\"consultants\": \"NOUN\",\n\t\t\t\"pediatrics\": \"PROPN\",\n\t\t\t\"smudge\": \"VERB\",\n\t\t\t\"dealerships\": \"NOUN\",\n\t\t\t\"gatorade\": \"PROPN\",\n\t\t\t\"inks\": \"NOUN\",\n\t\t\t\"divorced\": \"ADJ\",\n\t\t\t\"challenged\": \"VERB\",\n\t\t\t\"confusing\": \"ADJ\",\n\t\t\t\"retraced\": \"VERB\",\n\t\t\t\"mile\": \"NOUN\",\n\t\t\t\"optionality\": \"NOUN\",\n\t\t\t\"sources\": \"NOUN\",\n\t\t\t\"smirking\": \"VERB\",\n\t\t\t\"22,600\": \"NUM\",\n\t\t\t\"endangering\": \"VERB\",\n\t\t\t\"forefinger\": \"NOUN\",\n\t\t\t\"compelled\": \"VERB\",\n\t\t\t\"revolutionizing\": \"VERB\",\n\t\t\t\"explored\": \"VERB\",\n\t\t\t\"protect\": \"VERB\",\n\t\t\t\"benioff\": \"PROPN\",\n\t\t\t\"recall\": \"VERB\",\n\t\t\t\"onshore\": \"ADV\",\n\t\t\t\"refreshed\": \"VERB\",\n\t\t\t\"post-season\": \"ADJ\",\n\t\t\t\"wai'd\": \"VERB\",\n\t\t\t\"worlds\": \"NOUN\",\n\t\t\t\"elevated\": \"VERB\",\n\t\t\t\"erythema\": \"NOUN\",\n\t\t\t\"sithamparanathan\": \"PROPN\",\n\t\t\t\"liking\": \"VERB\",\n\t\t\t\"establishing\": \"VERB\",\n\t\t\t\"rummy\": \"PROPN\",\n\t\t\t\"stripe\": \"NOUN\",\n\t\t\t\"10:34\": \"NUM\",\n\t\t\t\"indoor\": \"ADJ\",\n\t\t\t\"subscribers\": \"NOUN\",\n\t\t\t\"perfect\": \"ADJ\",\n\t\t\t\"crypto\": \"NOUN\",\n\t\t\t\"reuptake\": \"NOUN\",\n\t\t\t\"m18\": \"PROPN\",\n\t\t\t\"easing\": \"VERB\",\n\t\t\t\"transported\": \"VERB\",\n\t\t\t\"scorn\": \"NOUN\",\n\t\t\t\"days\": \"NOUN\",\n\t\t\t\"stools\": \"NOUN\",\n\t\t\t\"microscope\": \"NOUN\",\n\t\t\t\"iris\": \"PROPN\",\n\t\t\t\"peter\": \"PROPN\",\n\t\t\t\"detained\": \"VERB\",\n\t\t\t\"pr\": \"NOUN\",\n\t\t\t\"reconstruction\": \"NOUN\",\n\t\t\t\"troops\": \"NOUN\",\n\t\t\t\"7:00\": \"NUM\",\n\t\t\t\"cursed\": \"VERB\",\n\t\t\t\"ofos\": \"NOUN\",\n\t\t\t\"true\": \"ADJ\",\n\t\t\t\"occurred\": \"VERB\",\n\t\t\t\"end\": \"NOUN\",\n\t\t\t\"sunroom\": \"NOUN\",\n\t\t\t\"lol\": \"INTJ\",\n\t\t\t\"diglipur\": \"PROPN\",\n\t\t\t\"icecream\": \"NOUN\",\n\t\t\t\"belle\": \"PROPN\",\n\t\t\t\"melt\": \"VERB\",\n\t\t\t\"sate\": \"VERB\",\n\t\t\t\"newbies\": \"NOUN\",\n\t\t\t\"grouping\": \"NOUN\",\n\t\t\t\"grisbi\": \"PROPN\",\n\t\t\t\"loom\": \"VERB\",\n\t\t\t\"1831\": \"NUM\",\n\t\t\t\"caching\": \"VERB\",\n\t\t\t\"embassy\": \"NOUN\",\n\t\t\t\"imaginations\": \"NOUN\",\n\t\t\t\"etudes\": \"PROPN\",\n\t\t\t\"veterinary\": \"ADJ\",\n\t\t\t\"drooped\": \"VERB\",\n\t\t\t\"tronicus\": \"PROPN\",\n\t\t\t\"inc.\": \"PROPN\",\n\t\t\t\"easiest\": \"ADJ\",\n\t\t\t\"pressing\": \"ADJ\",\n\t\t\t\"wheel\": \"NOUN\",\n\t\t\t\"generals\": \"NOUN\",\n\t\t\t\"unheard\": \"ADJ\",\n\t\t\t\"begun\": \"VERB\",\n\t\t\t\"doyon\": \"PROPN\",\n\t\t\t\"spool\": \"NOUN\",\n\t\t\t\"vomit\": \"VERB\",\n\t\t\t\"intriguing\": \"VERB\",\n\t\t\t\"presid...@whitehouse.gov\": \"PROPN\",\n\t\t\t\"criminologist\": \"NOUN\",\n\t\t\t\"forming\": \"VERB\",\n\t\t\t\"cj\": \"PROPN\",\n\t\t\t\"objection\": \"NOUN\",\n\t\t\t\"breeeding\": \"NOUN\",\n\t\t\t\"origins\": \"NOUN\",\n\t\t\t\"'s\": \"PART\",\n\t\t\t\"spared\": \"VERB\",\n\t\t\t\"415\": \"NUM\",\n\t\t\t\"repurposed\": \"VERB\",\n\t\t\t\"site\": \"NOUN\",\n\t\t\t\"detector\": \"NOUN\",\n\t\t\t\"saponins\": \"NOUN\",\n\t\t\t\"boundaries\": \"NOUN\",\n\t\t\t\"flies\": \"NOUN\",\n\t\t\t\"openly\": \"ADV\",\n\t\t\t\"stating\": \"VERB\",\n\t\t\t\"angeliki\": \"PROPN\",\n\t\t\t\"remotely\": \"ADV\",\n\t\t\t\"different\": \"ADJ\",\n\t\t\t\"california\": \"PROPN\",\n\t\t\t\"isis\": \"PROPN\",\n\t\t\t\"pixel\": \"NOUN\",\n\t\t\t\"vengeance\": \"NOUN\",\n\t\t\t\"retracted\": \"VERB\",\n\t\t\t\"10030\": \"NUM\",\n\t\t\t\"commissioned\": \"VERB\",\n\t\t\t\"chinese\": \"ADJ\",\n\t\t\t\"finalizing\": \"VERB\",\n\t\t\t\"annie\": \"PROPN\",\n\t\t\t\"smiles\": \"VERB\",\n\t\t\t\"where\": \"ADV\",\n\t\t\t\"studying\": \"VERB\",\n\t\t\t\"ninth\": \"ADJ\",\n\t\t\t\"fateful\": \"ADJ\",\n\t\t\t\"neglected\": \"VERB\",\n\t\t\t\"http://www.romancescam.com/forum/viewtopic.php?t=7231\": \"PROPN\",\n\t\t\t\"generate\": \"VERB\",\n\t\t\t\"sons\": \"NOUN\",\n\t\t\t\"inc\": \"PROPN\",\n\t\t\t\"portable\": \"ADJ\",\n\t\t\t\"extracurricular\": \"ADJ\",\n\t\t\t\"people-smugglers\": \"NOUN\",\n\t\t\t\"concentrate\": \"VERB\",\n\t\t\t\"grog-blossom\": \"NOUN\",\n\t\t\t\"easily\": \"ADV\",\n\t\t\t\"freese\": \"PROPN\",\n\t\t\t\"fourteenth\": \"ADJ\",\n\t\t\t\"aswering\": \"VERB\",\n\t\t\t\"opening\": \"VERB\",\n\t\t\t\"yay\": \"INTJ\",\n\t\t\t\"until\": \"SCONJ\",\n\t\t\t\"bartenders\": \"NOUN\",\n\t\t\t\"commonly\": \"ADV\",\n\t\t\t\"comet\": \"NOUN\",\n\t\t\t\"consciousness\": \"NOUN\",\n\t\t\t\"broccoli\": \"NOUN\",\n\t\t\t\"cohesive\": \"ADJ\",\n\t\t\t\"'70's\": \"NOUN\",\n\t\t\t\"arabic\": \"PROPN\",\n\t\t\t\"king\": \"NOUN\",\n\t\t\t\"crystal\": \"NOUN\",\n\t\t\t\"binary\": \"NOUN\",\n\t\t\t\"d7000\": \"NOUN\",\n\t\t\t\"page\": \"NOUN\",\n\t\t\t\"salatim\": \"NOUN\",\n\t\t\t\"chats\": \"NOUN\",\n\t\t\t\"radiometry\": \"NOUN\",\n\t\t\t\"festival\": \"PROPN\",\n\t\t\t\"predator\": \"NOUN\",\n\t\t\t\"swing\": \"NOUN\",\n\t\t\t\"perishable\": \"ADJ\",\n\t\t\t\"pools\": \"NOUN\",\n\t\t\t\"gpl\": \"PROPN\",\n\t\t\t\"beings\": \"NOUN\",\n\t\t\t\"westerners\": \"NOUN\",\n\t\t\t\"vere\": \"PROPN\",\n\t\t\t\"zip\": \"NOUN\",\n\t\t\t\"bosses\": \"NOUN\",\n\t\t\t\"eliminated\": \"VERB\",\n\t\t\t\"201-224-7900\": \"NUM\",\n\t\t\t\"brumation\": \"NOUN\",\n\t\t\t\"hilary\": \"PROPN\",\n\t\t\t\"furthering\": \"VERB\",\n\t\t\t\"milky\": \"ADJ\",\n\t\t\t\"urinals\": \"NOUN\",\n\t\t\t\"familiar\": \"ADJ\",\n\t\t\t\"consented\": \"VERB\",\n\t\t\t\"belt\": \"NOUN\",\n\t\t\t\"prevail\": \"VERB\",\n\t\t\t\"wanting\": \"VERB\",\n\t\t\t\"caucus\": \"PROPN\",\n\t\t\t\"balazick\": \"PROPN\",\n\t\t\t\"shackleton\": \"PROPN\",\n\t\t\t\"physics\": \"NOUN\",\n\t\t\t\"202-466-9142\": \"NUM\",\n\t\t\t\"intimately\": \"ADV\",\n\t\t\t\"lyrics\": \"NOUN\",\n\t\t\t\"twirl\": \"VERB\",\n\t\t\t\"flaws\": \"NOUN\",\n\t\t\t\"televisions\": \"NOUN\",\n\t\t\t\"whites\": \"NOUN\",\n\t\t\t\"panics\": \"VERB\",\n\t\t\t\"enhancement\": \"NOUN\",\n\t\t\t\"ap\": \"NOUN\",\n\t\t\t\"war\": \"NOUN\",\n\t\t\t\"omfg\": \"INTJ\",\n\t\t\t\"islamiah\": \"PROPN\",\n\t\t\t\"ric\": \"PROPN\",\n\t\t\t\"genetically\": \"ADV\",\n\t\t\t\"warrior\": \"NOUN\",\n\t\t\t\"bureaucratic\": \"ADJ\",\n\t\t\t\"irregularities\": \"NOUN\",\n\t\t\t\"prizes\": \"NOUN\",\n\t\t\t\"win\": \"VERB\",\n\t\t\t\"handy\": \"ADJ\",\n\t\t\t\"gud\": \"ADJ\",\n\t\t\t\"jennifer\": \"PROPN\",\n\t\t\t\"own\": \"ADJ\",\n\t\t\t\"worked\": \"VERB\",\n\t\t\t\"greet\": \"VERB\",\n\t\t\t\"re\": \"ADP\",\n\t\t\t\"post-production\": \"NOUN\",\n\t\t\t\"chill\": \"VERB\",\n\t\t\t\"limerick\": \"PROPN\",\n\t\t\t\"202.456.1111\": \"NUM\",\n\t\t\t\"pound\": \"NOUN\",\n\t\t\t\"unpalatable\": \"ADJ\",\n\t\t\t\"proverbial\": \"ADJ\",\n\t\t\t\"rocket\": \"NOUN\",\n\t\t\t\"moo\": \"NOUN\",\n\t\t\t\"ranja\": \"PROPN\",\n\t\t\t\"clark\": \"PROPN\",\n\t\t\t\"rathke\": \"PROPN\",\n\t\t\t\"worry\": \"VERB\",\n\t\t\t\"funded\": \"VERB\",\n\t\t\t\"ftw\": \"ADV\",\n\t\t\t\"subscription\": \"NOUN\",\n\t\t\t\"hooked\": \"ADJ\",\n\t\t\t\"drain\": \"NOUN\",\n\t\t\t\"justly\": \"ADV\",\n\t\t\t\"iconic\": \"ADJ\",\n\t\t\t\"sensitive\": \"ADJ\",\n\t\t\t\"indicated\": \"VERB\",\n\t\t\t\"outsider\": \"NOUN\",\n\t\t\t\"de'\": \"PROPN\",\n\t\t\t\"classiest\": \"ADJ\",\n\t\t\t\"infielder\": \"NOUN\",\n\t\t\t\"purgatory\": \"NOUN\",\n\t\t\t\"baths\": \"NOUN\",\n\t\t\t\"nails\": \"NOUN\",\n\t\t\t\"license\": \"NOUN\",\n\t\t\t\"abbas\": \"PROPN\",\n\t\t\t\"clustered\": \"VERB\",\n\t\t\t\"traveling\": \"VERB\",\n\t\t\t\"maaloul\": \"PROPN\",\n\t\t\t\"surley\": \"ADJ\",\n\t\t\t\"_\": \"ADP\",\n\t\t\t\"siam\": \"PROPN\",\n\t\t\t\"enlisted\": \"VERB\",\n\t\t\t\"burroughs\": \"PROPN\",\n\t\t\t\"deadly\": \"ADJ\",\n\t\t\t\"officially\": \"ADV\",\n\t\t\t\"non-avian\": \"ADJ\",\n\t\t\t\"bankman\": \"PROPN\",\n\t\t\t\"portends\": \"VERB\",\n\t\t\t\"05:07\": \"NUM\",\n\t\t\t\"oomen-ruijten\": \"PROPN\",\n\t\t\t\"absoulutely\": \"ADV\",\n\t\t\t\"cough\": \"NOUN\",\n\t\t\t\"kelley\": \"PROPN\",\n\t\t\t\"drought\": \"NOUN\",\n\t\t\t\"incurred\": \"VERB\",\n\t\t\t\"helsinki\": \"PROPN\",\n\t\t\t\"embarrass\": \"VERB\",\n\t\t\t\"pear\": \"NOUN\",\n\t\t\t\"gon\": \"VERB\",\n\t\t\t\"bombings\": \"NOUN\",\n\t\t\t\"brooklyn\": \"PROPN\",\n\t\t\t\"host\": \"NOUN\",\n\t\t\t\"liturgical\": \"ADJ\",\n\t\t\t\"fraser\": \"PROPN\",\n\t\t\t\"979\": \"NUM\",\n\t\t\t\"smashed\": \"VERB\",\n\t\t\t\"3:00\": \"NUM\",\n\t\t\t\"melissa\": \"PROPN\",\n\t\t\t\"fragile\": \"ADJ\",\n\t\t\t\"cambridge\": \"PROPN\",\n\t\t\t\"walmart\": \"PROPN\",\n\t\t\t\"locomotor\": \"ADJ\",\n\t\t\t\"cell\": \"NOUN\",\n\t\t\t\"seo\": \"NOUN\",\n\t\t\t\"hamburger\": \"NOUN\",\n\t\t\t\"387,000\": \"NUM\",\n\t\t\t\"bosnian\": \"ADJ\",\n\t\t\t\"55,7\": \"NUM\",\n\t\t\t\"account\": \"NOUN\",\n\t\t\t\"delegates\": \"NOUN\",\n\t\t\t\"steep\": \"ADJ\",\n\t\t\t\"priests\": \"NOUN\",\n\t\t\t\"lepage\": \"PROPN\",\n\t\t\t\"mediterranean\": \"PROPN\",\n\t\t\t\"bateman\": \"PROPN\",\n\t\t\t\"rained\": \"VERB\",\n\t\t\t\".....\": \"PUNCT\",\n\t\t\t\"darius\": \"PROPN\",\n\t\t\t\"third\": \"ADJ\",\n\t\t\t\"top-of-the-range\": \"ADJ\",\n\t\t\t\"piccadilly\": \"PROPN\",\n\t\t\t\"prepare\": \"VERB\",\n\t\t\t\"talkshow\": \"NOUN\",\n\t\t\t\"boyhood\": \"NOUN\",\n\t\t\t\"tc\": \"NOUN\",\n\t\t\t\"archeological\": \"ADJ\",\n\t\t\t\"http://www.bumrungrad.com/en/patient-services/clinics-and-centers/plastic-surgery-thailand-bangkok/breast-augmentation-ba\": \"PROPN\",\n\t\t\t\"fri.\": \"PROPN\",\n\t\t\t\"hehe\": \"INTJ\",\n\t\t\t\"http://www.unitaryexecutive.net\": \"PROPN\",\n\t\t\t\"msaccess.exe\": \"PROPN\",\n\t\t\t\"alcala\": \"PROPN\",\n\t\t\t\"lilac-coloured\": \"ADJ\",\n\t\t\t\"thrives\": \"VERB\",\n\t\t\t\"room\": \"NOUN\",\n\t\t\t\"interjections\": \"NOUN\",\n\t\t\t\"unset\": \"ADJ\",\n\t\t\t\"morose\": \"ADJ\",\n\t\t\t\"scant\": \"ADJ\",\n\t\t\t\"severin\": \"PROPN\",\n\t\t\t\"28th\": \"NOUN\",\n\t\t\t\"comply\": \"VERB\",\n\t\t\t\"weiss\": \"PROPN\",\n\t\t\t\"tracked\": \"VERB\",\n\t\t\t\"claimants\": \"NOUN\",\n\t\t\t\"speculated\": \"VERB\",\n\t\t\t\"instigate\": \"VERB\",\n\t\t\t\"./\": \"PUNCT\",\n\t\t\t\"simplification\": \"NOUN\",\n\t\t\t\"expropriation\": \"NOUN\",\n\t\t\t\"print\": \"VERB\",\n\t\t\t\"1911\": \"NUM\",\n\t\t\t\"hammond\": \"PROPN\",\n\t\t\t\"betty\": \"PROPN\",\n\t\t\t\"http://www.sonic.net/~fsjob/tragicore-thecivetcat.mp3\": \"PROPN\",\n\t\t\t\"literate\": \"ADJ\",\n\t\t\t\"fernando\": \"PROPN\",\n\t\t\t\"merson\": \"PROPN\",\n\t\t\t\"intermarrying\": \"VERB\",\n\t\t\t\"suppressive\": \"ADJ\",\n\t\t\t\"sanitary\": \"ADJ\",\n\t\t\t\"interracial\": \"ADJ\",\n\t\t\t\"@\": \"ADP\",\n\t\t\t\"abolition\": \"NOUN\",\n\t\t\t\"conroy\": \"PROPN\",\n\t\t\t\"unwatched\": \"ADJ\",\n\t\t\t\"gop\": \"PROPN\",\n\t\t\t\"enjambment\": \"NOUN\",\n\t\t\t\"injured\": \"VERB\",\n\t\t\t\"undecided\": \"ADJ\",\n\t\t\t\"delainey\": \"PROPN\",\n\t\t\t\"ounce\": \"NOUN\",\n\t\t\t\"doses\": \"NOUN\",\n\t\t\t\"items\": \"NOUN\",\n\t\t\t\"germs\": \"NOUN\",\n\t\t\t\"occurring\": \"VERB\",\n\t\t\t\"perfumes\": \"NOUN\",\n\t\t\t\"rendered\": \"VERB\",\n\t\t\t\"http://im.yahoo.com/\": \"PROPN\",\n\t\t\t\"oir\": \"PROPN\",\n\t\t\t\"1600\": \"NUM\",\n\t\t\t\"oth-\": \"INTJ\",\n\t\t\t\"junk\": \"NOUN\",\n\t\t\t\"nullified\": \"VERB\",\n\t\t\t\"snipers\": \"NOUN\",\n\t\t\t\"coughing\": \"VERB\",\n\t\t\t\"sp\": \"NOUN\",\n\t\t\t\"sommer\": \"PROPN\",\n\t\t\t\"http://www.chernobyl.info/en\": \"PROPN\",\n\t\t\t\"awaited\": \"VERB\",\n\t\t\t\"carols\": \"PROPN\",\n\t\t\t\"halibut\": \"NOUN\",\n\t\t\t\"donating\": \"VERB\",\n\t\t\t\"tul\": \"PROPN\",\n\t\t\t\"1980s\": \"NOUN\",\n\t\t\t\"proficient\": \"ADJ\",\n\t\t\t\"cranston\": \"PROPN\",\n\t\t\t\"nondescript\": \"ADJ\",\n\t\t\t\"outro\": \"NOUN\",\n\t\t\t\"databases\": \"NOUN\",\n\t\t\t\"suggest\": \"VERB\",\n\t\t\t\"europe\": \"PROPN\",\n\t\t\t\"exponential\": \"ADJ\",\n\t\t\t\"clearly\": \"ADV\",\n\t\t\t\"19:14\": \"NUM\",\n\t\t\t\"melodramatic\": \"ADJ\",\n\t\t\t\"byproduct\": \"NOUN\",\n\t\t\t\"centuries\": \"NOUN\",\n\t\t\t\"sooo\": \"ADV\",\n\t\t\t\"filming\": \"NOUN\",\n\t\t\t\"philippines\": \"PROPN\",\n\t\t\t\"aunte\": \"NOUN\",\n\t\t\t\"gooseberry\": \"NOUN\",\n\t\t\t\"davies\": \"PROPN\",\n\t\t\t\"fetch\": \"VERB\",\n\t\t\t\"push\": \"VERB\",\n\t\t\t\"derivative\": \"ADJ\",\n\t\t\t\"afshari\": \"PROPN\",\n\t\t\t\"amidst\": \"ADP\",\n\t\t\t\"years\": \"NOUN\",\n\t\t\t\"phillip\": \"PROPN\",\n\t\t\t\"downgrade\": \"VERB\",\n\t\t\t\"mourning\": \"VERB\",\n\t\t\t\"thumb\": \"NOUN\",\n\t\t\t\"23rd\": \"NOUN\",\n\t\t\t\"l.l.c\": \"NOUN\",\n\t\t\t\"forida\": \"PROPN\",\n\t\t\t\"imbecile\": \"ADJ\",\n\t\t\t\"pre-columbian\": \"ADJ\",\n\t\t\t\"microwave\": \"NOUN\",\n\t\t\t\"polly\": \"NOUN\",\n\t\t\t\"alerts\": \"NOUN\",\n\t\t\t\"bays\": \"NOUN\",\n\t\t\t\"primarily\": \"ADV\",\n\t\t\t\"grimace-smile\": \"NOUN\",\n\t\t\t\"alt\": \"NOUN\",\n\t\t\t\"offworlders\": \"NOUN\",\n\t\t\t\"nina\": \"PROPN\",\n\t\t\t\"hired\": \"VERB\",\n\t\t\t\"maximum\": \"ADJ\",\n\t\t\t\"minor\": \"ADJ\",\n\t\t\t\"mae\": \"PROPN\",\n\t\t\t\"westfield\": \"PROPN\",\n\t\t\t\"whil\": \"SCONJ\",\n\t\t\t\"floridian\": \"PROPN\",\n\t\t\t\"superb\": \"ADJ\",\n\t\t\t\"http://www.nsrl.ttu.edu/chernobyl/wildlifepreserve.htm\": \"PROPN\",\n\t\t\t\"other\": \"ADJ\",\n\t\t\t\"caracas\": \"PROPN\",\n\t\t\t\"modernity\": \"NOUN\",\n\t\t\t\"wow-eee\": \"INTJ\",\n\t\t\t\"linkages\": \"NOUN\",\n\t\t\t\"stink\": \"NOUN\",\n\t\t\t\"look-out\": \"NOUN\",\n\t\t\t\"emeritus\": \"ADJ\",\n\t\t\t\"rest\": \"NOUN\",\n\t\t\t\"robbery\": \"NOUN\",\n\t\t\t\"communicative\": \"ADJ\",\n\t\t\t\"herring\": \"NOUN\",\n\t\t\t\"allowadditions\": \"NOUN\",\n\t\t\t\"unite\": \"VERB\",\n\t\t\t\"devocht\": \"PROPN\",\n\t\t\t\"farrier\": \"NOUN\",\n\t\t\t\"publishes\": \"VERB\",\n\t\t\t\"justification\": \"NOUN\",\n\t\t\t\"condor\": \"NOUN\",\n\t\t\t\"aerated\": \"VERB\",\n\t\t\t\"strides\": \"NOUN\",\n\t\t\t\"trailer\": \"NOUN\",\n\t\t\t\"buddhist\": \"ADJ\",\n\t\t\t\"harvard\": \"PROPN\",\n\t\t\t\"brenda\": \"PROPN\",\n\t\t\t\"ep\": \"NOUN\",\n\t\t\t\"waaaaaaaaaaaaay\": \"ADV\",\n\t\t\t\"weirder\": \"ADJ\",\n\t\t\t\"tycoon\": \"NOUN\",\n\t\t\t\"finalists\": \"NOUN\",\n\t\t\t\"pam\": \"PROPN\",\n\t\t\t\"reminded\": \"VERB\",\n\t\t\t\"windy\": \"ADJ\",\n\t\t\t\"trier\": \"PROPN\",\n\t\t\t\"uncompleted\": \"ADJ\",\n\t\t\t\"marketing\": \"NOUN\",\n\t\t\t\"stamped\": \"VERB\",\n\t\t\t\"hide-out\": \"NOUN\",\n\t\t\t\"seidensticker\": \"PROPN\",\n\t\t\t\"telugu\": \"PROPN\",\n\t\t\t\"stooped\": \"VERB\",\n\t\t\t\"race\": \"NOUN\",\n\t\t\t\"wa.\": \"PROPN\",\n\t\t\t\"wai-ching\": \"PROPN\",\n\t\t\t\"environmentally\": \"ADV\",\n\t\t\t\"taulbee\": \"PROPN\",\n\t\t\t\"fade\": \"VERB\",\n\t\t\t\"differential\": \"NOUN\",\n\t\t\t\"horizon\": \"NOUN\",\n\t\t\t\"evolutionary\": \"ADJ\",\n\t\t\t\"shown\": \"VERB\",\n\t\t\t\"economic\": \"ADJ\",\n\t\t\t\"passengers\": \"NOUN\",\n\t\t\t\"communist\": \"ADJ\",\n\t\t\t\"monsoon\": \"NOUN\",\n\t\t\t\"attempt\": \"NOUN\",\n\t\t\t\"produced\": \"VERB\",\n\t\t\t\"mp3\": \"NOUN\",\n\t\t\t\"knot\": \"NOUN\",\n\t\t\t\"shield\": \"PROPN\",\n\t\t\t\"assed\": \"ADJ\",\n\t\t\t\"approachable\": \"ADJ\",\n\t\t\t\"theropod\": \"NOUN\",\n\t\t\t\"irish\": \"ADJ\",\n\t\t\t\"dazzlingly\": \"ADV\",\n\t\t\t\"iraqiya\": \"PROPN\",\n\t\t\t\"jury\": \"NOUN\",\n\t\t\t\"overtaking\": \"VERB\",\n\t\t\t\"jeremy\": \"PROPN\",\n\t\t\t\"volition\": \"NOUN\",\n\t\t\t\"pectoral\": \"ADJ\",\n\t\t\t\"realises\": \"VERB\",\n\t\t\t\"re-evaluate\": \"VERB\",\n\t\t\t\"burnings\": \"NOUN\",\n\t\t\t\"architects\": \"PROPN\",\n\t\t\t\"zodiac\": \"NOUN\",\n\t\t\t\"option\": \"NOUN\",\n\t\t\t\"idols\": \"NOUN\",\n\t\t\t\"url\": \"NOUN\",\n\t\t\t\"cheques\": \"NOUN\",\n\t\t\t\"nightmares\": \"NOUN\",\n\t\t\t\"omnimax\": \"PROPN\",\n\t\t\t\"shame\": \"NOUN\",\n\t\t\t\"touchdown\": \"NOUN\",\n\t\t\t\"611\": \"NUM\",\n\t\t\t\"appointments\": \"NOUN\",\n\t\t\t\"burrowed\": \"VERB\",\n\t\t\t\"pitre\": \"PROPN\",\n\t\t\t\"ratings\": \"NOUN\",\n\t\t\t\"mccullough\": \"PROPN\",\n\t\t\t\"registrar\": \"NOUN\",\n\t\t\t\"everland\": \"PROPN\",\n\t\t\t\"credentialing\": \"VERB\",\n\t\t\t\"current\": \"ADJ\",\n\t\t\t\"official\": \"ADJ\",\n\t\t\t\"seth\": \"PROPN\",\n\t\t\t\"waugh\": \"PROPN\",\n\t\t\t\"mortality\": \"NOUN\",\n\t\t\t\"luminous\": \"ADJ\",\n\t\t\t\"cocteau\": \"PROPN\",\n\t\t\t\"pwople\": \"NOUN\",\n\t\t\t\"monastery\": \"NOUN\",\n\t\t\t\"gullible\": \"ADJ\",\n\t\t\t\"shrouds\": \"NOUN\",\n\t\t\t\"shattered\": \"ADJ\",\n\t\t\t\"queerly\": \"ADV\",\n\t\t\t\"eid\": \"NOUN\",\n\t\t\t\"committee\": \"NOUN\",\n\t\t\t\"04:52\": \"NUM\",\n\t\t\t\"dampen\": \"VERB\",\n\t\t\t\"moroz\": \"PROPN\",\n\t\t\t\"absorption\": \"NOUN\",\n\t\t\t\"unturned\": \"ADJ\",\n\t\t\t\"hugh\": \"PROPN\",\n\t\t\t\"4\": \"NUM\",\n\t\t\t\"~\": \"PUNCT\",\n\t\t\t\"specifications\": \"NOUN\",\n\t\t\t\"content\": \"NOUN\",\n\t\t\t\"unscreened\": \"ADJ\",\n\t\t\t\"90\": \"NUM\",\n\t\t\t\"circumcision\": \"NOUN\",\n\t\t\t\"iis\": \"AUX\",\n\t\t\t\"kinesiologist\": \"NOUN\",\n\t\t\t\"combined\": \"VERB\",\n\t\t\t\"seaboard\": \"PROPN\",\n\t\t\t\"biz\": \"NOUN\",\n\t\t\t\"1678\": \"NUM\",\n\t\t\t\"iep\": \"PROPN\",\n\t\t\t\"suck\": \"VERB\",\n\t\t\t\"dominated\": \"VERB\",\n\t\t\t\"closest\": \"ADJ\",\n\t\t\t\"justices\": \"NOUN\",\n\t\t\t\"man-about-town\": \"NOUN\",\n\t\t\t\"feed\": \"VERB\",\n\t\t\t\"recoil\": \"NOUN\",\n\t\t\t\"sinuses\": \"NOUN\",\n\t\t\t\"hand\": \"NOUN\",\n\t\t\t\"abdul\": \"PROPN\",\n\t\t\t\"domains\": \"NOUN\",\n\t\t\t\"newsgroups\": \"NOUN\",\n\t\t\t\"drivers\": \"NOUN\",\n\t\t\t\"chalabi\": \"PROPN\",\n\t\t\t\"unaffected\": \"ADJ\",\n\t\t\t\"empires\": \"NOUN\",\n\t\t\t\"tractor\": \"NOUN\",\n\t\t\t\"gloated\": \"VERB\",\n\t\t\t\"'n\": \"CCONJ\",\n\t\t\t\"thorny\": \"ADJ\",\n\t\t\t\"02:21\": \"NUM\",\n\t\t\t\"memorializes\": \"VERB\",\n\t\t\t\"swish\": \"NOUN\",\n\t\t\t\"18:11\": \"NUM\",\n\t\t\t\"payment\": \"NOUN\",\n\t\t\t\"versions\": \"NOUN\",\n\t\t\t\"nierman\": \"PROPN\",\n\t\t\t\"thirty-eight\": \"NUM\",\n\t\t\t\"entertaining\": \"ADJ\",\n\t\t\t\"walker\": \"PROPN\",\n\t\t\t\"medical\": \"ADJ\",\n\t\t\t\"yan\": \"PROPN\",\n\t\t\t\"selective\": \"ADJ\",\n\t\t\t\"imitated\": \"VERB\",\n\t\t\t\"stimulating\": \"VERB\",\n\t\t\t\"responsibly\": \"ADV\",\n\t\t\t\"chairman\": \"NOUN\",\n\t\t\t\"portrait\": \"NOUN\",\n\t\t\t\"a64\": \"PROPN\",\n\t\t\t\"zaha\": \"PROPN\",\n\t\t\t\"atahualpa\": \"PROPN\",\n\t\t\t\"http://haas.berkeley.edu/~borenste\": \"PROPN\",\n\t\t\t\"forestry\": \"NOUN\",\n\t\t\t\"trigger\": \"VERB\",\n\t\t\t\"elevation\": \"NOUN\",\n\t\t\t\"nausea\": \"NOUN\",\n\t\t\t\"reuse\": \"NOUN\",\n\t\t\t\"antiques\": \"NOUN\",\n\t\t\t\"cools\": \"VERB\",\n\t\t\t\"stuck\": \"VERB\",\n\t\t\t\"analyzes\": \"VERB\",\n\t\t\t\"persecuted\": \"VERB\",\n\t\t\t\"laughed\": \"VERB\",\n\t\t\t\"ufos\": \"NOUN\",\n\t\t\t\"jeffs\": \"PROPN\",\n\t\t\t\"slope\": \"NOUN\",\n\t\t\t\"healthier\": \"ADJ\",\n\t\t\t\"spirit\": \"NOUN\",\n\t\t\t\"australasian\": \"PROPN\",\n\t\t\t\"swede\": \"NOUN\",\n\t\t\t\"freak\": \"VERB\",\n\t\t\t\"negotiation\": \"NOUN\",\n\t\t\t\"deployments\": \"NOUN\",\n\t\t\t\"post–revolutionary\": \"PROPN\",\n\t\t\t\"t-\": \"INTJ\",\n\t\t\t\"textures\": \"NOUN\",\n\t\t\t\"apologies\": \"NOUN\",\n\t\t\t\"eat\": \"VERB\",\n\t\t\t\"change\": \"NOUN\",\n\t\t\t\"weaponize\": \"VERB\",\n\t\t\t\"perseverance\": \"NOUN\",\n\t\t\t\"ears\": \"NOUN\",\n\t\t\t\"interlopers\": \"NOUN\",\n\t\t\t\"ex\": \"PROPN\",\n\t\t\t\"thugs\": \"NOUN\",\n\t\t\t\"guinea\": \"NOUN\",\n\t\t\t\"aristocratic\": \"ADJ\",\n\t\t\t\"emma\": \"PROPN\",\n\t\t\t\"extractive\": \"ADJ\",\n\t\t\t\"recognizes\": \"VERB\",\n\t\t\t\"panga\": \"NOUN\",\n\t\t\t\"limits\": \"NOUN\",\n\t\t\t\"replacing\": \"VERB\",\n\t\t\t\"fifths\": \"NOUN\",\n\t\t\t\"nobody\": \"PRON\",\n\t\t\t\"eng\": \"PROPN\",\n\t\t\t\"goldman\": \"PROPN\",\n\t\t\t\"n\": \"PROPN\",\n\t\t\t\"recieve\": \"VERB\",\n\t\t\t\"brains\": \"NOUN\",\n\t\t\t\"candidates\": \"NOUN\",\n\t\t\t\"disrepair\": \"NOUN\",\n\t\t\t\"resembled\": \"VERB\",\n\t\t\t\"secondly\": \"ADV\",\n\t\t\t\"downhill\": \"ADV\",\n\t\t\t\"cases\": \"NOUN\",\n\t\t\t\"bugle\": \"VERB\",\n\t\t\t\"cities\": \"NOUN\",\n\t\t\t\"instagram\": \"PROPN\",\n\t\t\t\"boom\": \"NOUN\",\n\t\t\t\"blonde\": \"NOUN\",\n\t\t\t\"matches\": \"VERB\",\n\t\t\t\"vegan\": \"ADJ\",\n\t\t\t\"gripped\": \"VERB\",\n\t\t\t\"dally\": \"VERB\",\n\t\t\t\"breasts\": \"NOUN\",\n\t\t\t\"donated\": \"VERB\",\n\t\t\t\"qa'ida\": \"PROPN\",\n\t\t\t\"karzai\": \"PROPN\",\n\t\t\t\"raided\": \"VERB\",\n\t\t\t\"campsites\": \"NOUN\",\n\t\t\t\"sulphur\": \"NOUN\",\n\t\t\t\"ghostly\": \"ADJ\",\n\t\t\t\"tang\": \"PROPN\",\n\t\t\t\"crepe\": \"NOUN\",\n\t\t\t\"selfie\": \"NOUN\",\n\t\t\t\"motives\": \"NOUN\",\n\t\t\t\"afar\": \"ADV\",\n\t\t\t\"concerning\": \"VERB\",\n\t\t\t\"kyle.jones@radianz.com\": \"PROPN\",\n\t\t\t\"watching\": \"VERB\",\n\t\t\t\"sigma\": \"NOUN\",\n\t\t\t\"gatineau\": \"PROPN\",\n\t\t\t\"pheasant\": \"NOUN\",\n\t\t\t\"san\": \"PROPN\",\n\t\t\t\"armies\": \"NOUN\",\n\t\t\t\"script\": \"NOUN\",\n\t\t\t\"r&d\": \"NOUN\",\n\t\t\t\"chants\": \"NOUN\",\n\t\t\t\"apprised\": \"VERB\",\n\t\t\t\"important\": \"ADJ\",\n\t\t\t\"don'ts\": \"NOUN\",\n\t\t\t\"hmm\": \"INTJ\",\n\t\t\t\"departure\": \"NOUN\",\n\t\t\t\"futile\": \"ADJ\",\n\t\t\t\"katherine\": \"PROPN\",\n\t\t\t\"rehabilitate\": \"VERB\",\n\t\t\t\"centres\": \"NOUN\",\n\t\t\t\"a1\": \"PROPN\",\n\t\t\t\"flows\": \"VERB\",\n\t\t\t\"interceptor\": \"NOUN\",\n\t\t\t\"recap\": \"NOUN\",\n\t\t\t\"obeying\": \"VERB\",\n\t\t\t\"raspberry\": \"NOUN\",\n\t\t\t\"façades\": \"NOUN\",\n\t\t\t\"radio\": \"NOUN\",\n\t\t\t\"plaster\": \"NOUN\",\n\t\t\t\"ala\": \"ADP\",\n\t\t\t\"e.t.\": \"PROPN\",\n\t\t\t\"rain\": \"NOUN\",\n\t\t\t\"billionaire\": \"NOUN\",\n\t\t\t\"solomita\": \"PROPN\",\n\t\t\t\"theeth\": \"NOUN\",\n\t\t\t\"recovery\": \"NOUN\",\n\t\t\t\"propaganda\": \"NOUN\",\n\t\t\t\"scribbles\": \"NOUN\",\n\t\t\t\"bodies\": \"NOUN\",\n\t\t\t\"camille\": \"PROPN\",\n\t\t\t\"patio\": \"NOUN\",\n\t\t\t\"partnership\": \"NOUN\",\n\t\t\t\"curve\": \"NOUN\",\n\t\t\t\"ludicrous\": \"ADJ\",\n\t\t\t\"bale\": \"VERB\",\n\t\t\t\"solemnly\": \"ADV\",\n\t\t\t\"horsiesios\": \"PROPN\",\n\t\t\t\"bellow\": \"NOUN\",\n\t\t\t\"predisposed\": \"ADJ\",\n\t\t\t\"tights\": \"NOUN\",\n\t\t\t\"reputation\": \"NOUN\",\n\t\t\t\"baghdad\": \"PROPN\",\n\t\t\t\"550\": \"NUM\",\n\t\t\t\"wandered\": \"VERB\",\n\t\t\t\"bernoullis\": \"PROPN\",\n\t\t\t\"andaman\": \"PROPN\",\n\t\t\t\"#review\": \"PROPN\",\n\t\t\t\"metabolically\": \"ADV\",\n\t\t\t\"bruha\": \"PROPN\",\n\t\t\t\"rec.\": \"ADJ\",\n\t\t\t\"irrelevant\": \"ADJ\",\n\t\t\t\"hair\": \"NOUN\",\n\t\t\t\"envy\": \"NOUN\",\n\t\t\t\"16,900\": \"NUM\",\n\t\t\t\"menu\": \"NOUN\",\n\t\t\t\"pre\": \"ADV\",\n\t\t\t\"grenadines\": \"PROPN\",\n\t\t\t\"inordinate\": \"ADJ\",\n\t\t\t\"mouez\": \"PROPN\",\n\t\t\t\"brack\": \"NOUN\",\n\t\t\t\"seamstresses\": \"NOUN\",\n\t\t\t\"05:59\": \"NUM\",\n\t\t\t\"sweep\": \"NOUN\",\n\t\t\t\"brandee\": \"PROPN\",\n\t\t\t\"linked\": \"VERB\",\n\t\t\t\"amoung\": \"ADP\",\n\t\t\t\"math\": \"NOUN\",\n\t\t\t\"wolfowitz\": \"PROPN\",\n\t\t\t\"1.12\": \"NUM\",\n\t\t\t\"devout\": \"ADJ\",\n\t\t\t\"florescent\": \"ADJ\",\n\t\t\t\"concentrating\": \"VERB\",\n\t\t\t\"insults\": \"NOUN\",\n\t\t\t\"believing\": \"VERB\",\n\t\t\t\"khattab\": \"PROPN\",\n\t\t\t\"horrendous\": \"ADJ\",\n\t\t\t\"mecca\": \"PROPN\",\n\t\t\t\"itty\": \"ADJ\",\n\t\t\t\"nordic\": \"ADJ\",\n\t\t\t\"un-ruly\": \"ADJ\",\n\t\t\t\"treat\": \"VERB\",\n\t\t\t\"factory\": \"NOUN\",\n\t\t\t\"importantly\": \"ADV\",\n\t\t\t\"landa\": \"PROPN\",\n\t\t\t\"hopper\": \"PROPN\",\n\t\t\t\"revenue-raising\": \"ADJ\",\n\t\t\t\"listings\": \"NOUN\",\n\t\t\t\"gtc\": \"NOUN\",\n\t\t\t\"tasteless\": \"ADJ\",\n\t\t\t\"atef\": \"PROPN\",\n\t\t\t\"dogma\": \"NOUN\",\n\t\t\t\"patty\": \"PROPN\",\n\t\t\t\"comedian\": \"NOUN\",\n\t\t\t\"508\": \"NUM\",\n\t\t\t\"box\": \"NOUN\",\n\t\t\t\"packaging\": \"NOUN\",\n\t\t\t\"responding\": \"VERB\",\n\t\t\t\"shocking\": \"ADJ\",\n\t\t\t\"verification\": \"NOUN\",\n\t\t\t\"concentric\": \"ADJ\",\n\t\t\t\"misinterpreted\": \"VERB\",\n\t\t\t\"consume\": \"VERB\",\n\t\t\t\"415.621.8317\": \"NUM\",\n\t\t\t\"supposedly\": \"ADV\",\n\t\t\t\"traitors\": \"NOUN\",\n\t\t\t\"storyworld\": \"NOUN\",\n\t\t\t\"adversaries\": \"NOUN\",\n\t\t\t\"electrostatic\": \"ADJ\",\n\t\t\t\"ghana\": \"PROPN\",\n\t\t\t\"taxpayers\": \"NOUN\",\n\t\t\t\"screaming\": \"VERB\",\n\t\t\t\"alexandra\": \"PROPN\",\n\t\t\t\"http://judiciary.senate.gov/testimony.cfm?id=1725&wit_id=4905\": \"PROPN\",\n\t\t\t\"undergo\": \"VERB\",\n\t\t\t\"conf.\": \"NOUN\",\n\t\t\t\"espeakers\": \"NOUN\",\n\t\t\t\"herb\": \"NOUN\",\n\t\t\t\"1.50\": \"NUM\",\n\t\t\t\"marek\": \"PROPN\",\n\t\t\t\"penny\": \"NOUN\",\n\t\t\t\"barons\": \"NOUN\",\n\t\t\t\"kuwait\": \"PROPN\",\n\t\t\t\"diminished\": \"VERB\",\n\t\t\t\"lords\": \"PROPN\",\n\t\t\t\"hunts\": \"NOUN\",\n\t\t\t\"mueller\": \"PROPN\",\n\t\t\t\"spooky\": \"ADJ\",\n\t\t\t\"growth\": \"NOUN\",\n\t\t\t\"conquering\": \"VERB\",\n\t\t\t\"viii\": \"NUM\",\n\t\t\t\"diplomats\": \"NOUN\",\n\t\t\t\"sedentary\": \"ADJ\",\n\t\t\t\"clods\": \"NOUN\",\n\t\t\t\"motivations\": \"NOUN\",\n\t\t\t\"ouse\": \"PROPN\",\n\t\t\t\"#currentevents\": \"PROPN\",\n\t\t\t\"22nd\": \"NOUN\",\n\t\t\t\"dmetcalfe@cullenanddykman.com\": \"PROPN\",\n\t\t\t\"grammatical\": \"ADJ\",\n\t\t\t\"tossed\": \"VERB\",\n\t\t\t\"involved\": \"VERB\",\n\t\t\t\"tijuana\": \"PROPN\",\n\t\t\t\"bettering\": \"VERB\",\n\t\t\t\"fever\": \"NOUN\",\n\t\t\t\"countdown\": \"PROPN\",\n\t\t\t\"1910\": \"NUM\",\n\t\t\t\"flexibiltiy\": \"NOUN\",\n\t\t\t\"challenges\": \"NOUN\",\n\t\t\t\"distinguish\": \"VERB\",\n\t\t\t\"pax\": \"PROPN\",\n\t\t\t\"brag\": \"VERB\",\n\t\t\t\"numero\": \"NOUN\",\n\t\t\t\"adversary\": \"NOUN\",\n\t\t\t\"impart\": \"VERB\",\n\t\t\t\"motivating\": \"VERB\",\n\t\t\t\"crash\": \"NOUN\",\n\t\t\t\"cindy\": \"PROPN\",\n\t\t\t\"lab\": \"NOUN\",\n\t\t\t\"duplicate\": \"NOUN\",\n\t\t\t\"christine\": \"PROPN\",\n\t\t\t\"differed\": \"VERB\",\n\t\t\t\"almanac\": \"PROPN\",\n\t\t\t\"chair\": \"NOUN\",\n\t\t\t\"tolls\": \"NOUN\",\n\t\t\t\"surely\": \"ADV\",\n\t\t\t\"modernizing\": \"VERB\",\n\t\t\t\"calculater\": \"NOUN\",\n\t\t\t\"ceremony\": \"NOUN\",\n\t\t\t\"migrants\": \"NOUN\",\n\t\t\t\"wooing\": \"VERB\",\n\t\t\t\"fate\": \"NOUN\",\n\t\t\t\"balasingham\": \"PROPN\",\n\t\t\t\"quadra\": \"NOUN\",\n\t\t\t\"bye\": \"INTJ\",\n\t\t\t\"class\": \"NOUN\",\n\t\t\t\"shikibu\": \"PROPN\",\n\t\t\t\"marines\": \"PROPN\",\n\t\t\t\"meowing\": \"VERB\",\n\t\t\t\"shalev\": \"PROPN\",\n\t\t\t\"airports\": \"NOUN\",\n\t\t\t\"minimizing\": \"VERB\",\n\t\t\t\"sea-going\": \"ADJ\",\n\t\t\t\"reeks\": \"VERB\",\n\t\t\t\"02:49\": \"NUM\",\n\t\t\t\"interested\": \"ADJ\",\n\t\t\t\"triumphs\": \"NOUN\",\n\t\t\t\"thirteen\": \"NUM\",\n\t\t\t\"featuring\": \"VERB\",\n\t\t\t\"sizzle\": \"VERB\",\n\t\t\t\"bolstered\": \"VERB\",\n\t\t\t\"digi\": \"PROPN\",\n\t\t\t\"pounds\": \"NOUN\",\n\t\t\t\"hollywood\": \"PROPN\",\n\t\t\t\"rbi\": \"NOUN\",\n\t\t\t\"blair\": \"PROPN\",\n\t\t\t\"sly\": \"ADJ\",\n\t\t\t\"broomsticks\": \"NOUN\",\n\t\t\t\"sector\": \"NOUN\",\n\t\t\t\"alike\": \"ADV\",\n\t\t\t\"carriers\": \"NOUN\",\n\t\t\t\"70\": \"NUM\",\n\t\t\t\"guarantees\": \"VERB\",\n\t\t\t\"niche\": \"NOUN\",\n\t\t\t\"intoxicating\": \"ADJ\",\n\t\t\t\"conservative\": \"ADJ\",\n\t\t\t\"elderly\": \"ADJ\",\n\t\t\t\"delirious\": \"ADJ\",\n\t\t\t\"stain\": \"NOUN\",\n\t\t\t\"emperors\": \"NOUN\",\n\t\t\t\"montrouge\": \"PROPN\",\n\t\t\t\"leap\": \"NOUN\",\n\t\t\t\"pinch\": \"VERB\",\n\t\t\t\"1930s\": \"NOUN\",\n\t\t\t\"apron\": \"NOUN\",\n\t\t\t\"photograph\": \"NOUN\",\n\t\t\t\"invested\": \"VERB\",\n\t\t\t\"verge\": \"NOUN\",\n\t\t\t\"7.3\": \"NUM\",\n\t\t\t\"umm\": \"INTJ\",\n\t\t\t\"freeport\": \"PROPN\",\n\t\t\t\"penance\": \"NOUN\",\n\t\t\t\"holds\": \"VERB\",\n\t\t\t\"nepalese\": \"ADJ\",\n\t\t\t\"retrospect\": \"NOUN\",\n\t\t\t\"olympics\": \"PROPN\",\n\t\t\t\"saltillo\": \"PROPN\",\n\t\t\t\"mirror\": \"NOUN\",\n\t\t\t\"ličen\": \"PROPN\",\n\t\t\t\"visibility\": \"NOUN\",\n\t\t\t\"realized\": \"VERB\",\n\t\t\t\"displacement\": \"NOUN\",\n\t\t\t\"speculation\": \"NOUN\",\n\t\t\t\"punishments\": \"NOUN\",\n\t\t\t\"cheney\": \"PROPN\",\n\t\t\t\"pioneer\": \"NOUN\",\n\t\t\t\"whore\": \"NOUN\",\n\t\t\t\"numbing\": \"VERB\",\n\t\t\t\"sorry\": \"ADJ\",\n\t\t\t\"siriusxm\": \"PROPN\",\n\t\t\t\"1,650,000\": \"NUM\",\n\t\t\t\"seeker\": \"NOUN\",\n\t\t\t\"******\": \"PUNCT\",\n\t\t\t\"among\": \"ADP\",\n\t\t\t\"extrapolate\": \"VERB\",\n\t\t\t\"afterwards\": \"ADV\",\n\t\t\t\"stadium\": \"NOUN\",\n\t\t\t\"64.75\": \"NUM\",\n\t\t\t\"celebrated\": \"VERB\",\n\t\t\t\"fireplace\": \"NOUN\",\n\t\t\t\"vintaged\": \"VERB\",\n\t\t\t\"likened\": \"VERB\",\n\t\t\t\"http://www.adorama.com/blcbs.html\": \"PROPN\",\n\t\t\t\"particle\": \"NOUN\",\n\t\t\t\"1584\": \"NUM\",\n\t\t\t\"burglars\": \"NOUN\",\n\t\t\t\"nie\": \"PROPN\",\n\t\t\t\"marcia\": \"PROPN\",\n\t\t\t\"1661\": \"NUM\",\n\t\t\t\"tended\": \"VERB\",\n\t\t\t\"#finances\": \"PROPN\",\n\t\t\t\"oh\": \"INTJ\",\n\t\t\t\"disappeared\": \"VERB\",\n\t\t\t\"has\": \"AUX\",\n\t\t\t\"renovation\": \"NOUN\",\n\t\t\t\"geofences\": \"NOUN\",\n\t\t\t\"tatars\": \"PROPN\",\n\t\t\t\"47\": \"NUM\",\n\t\t\t\"césar\": \"PROPN\",\n\t\t\t\"inference\": \"NOUN\",\n\t\t\t\"http://www.physics.isu.edu/radinf/chern.htm\": \"PROPN\",\n\t\t\t\"drove\": \"VERB\",\n\t\t\t\"senior\": \"ADJ\",\n\t\t\t\"e-visit\": \"NOUN\",\n\t\t\t\"2:30\": \"NUM\",\n\t\t\t\"eggshells\": \"NOUN\",\n\t\t\t\"5.87\": \"NUM\",\n\t\t\t\"infectious\": \"ADJ\",\n\t\t\t\"writhe\": \"VERB\",\n\t\t\t\"exercises\": \"NOUN\",\n\t\t\t\"yours\": \"PRON\",\n\t\t\t\"384\": \"NUM\",\n\t\t\t\"skittish\": \"ADJ\",\n\t\t\t\"rosebud\": \"PROPN\",\n\t\t\t\"j\": \"PROPN\",\n\t\t\t\"spreadsheet\": \"NOUN\",\n\t\t\t\"kicking\": \"VERB\",\n\t\t\t\"884\": \"NUM\",\n\t\t\t\"denoted\": \"VERB\",\n\t\t\t\"cockpit\": \"NOUN\",\n\t\t\t\"cancel\": \"VERB\",\n\t\t\t\"crazy\": \"ADJ\",\n\t\t\t\"09/03/99\": \"NUM\",\n\t\t\t\"veto\": \"VERB\",\n\t\t\t\"nicer\": \"ADJ\",\n\t\t\t\"dresses\": \"NOUN\",\n\t\t\t\"arrive\": \"VERB\",\n\t\t\t\"pickles\": \"NOUN\",\n\t\t\t\"prefects\": \"NOUN\",\n\t\t\t\"subcommittee\": \"PROPN\",\n\t\t\t\"rephrasing\": \"VERB\",\n\t\t\t\"spawned\": \"VERB\",\n\t\t\t\"gstrathmann@mediaone.net\": \"PROPN\",\n\t\t\t\"unworthy\": \"ADJ\",\n\t\t\t\"roommate\": \"NOUN\",\n\t\t\t\"operative\": \"NOUN\",\n\t\t\t\"endemic\": \"ADJ\",\n\t\t\t\"seizures\": \"NOUN\",\n\t\t\t\"disc\": \"NOUN\",\n\t\t\t\"j-\": \"INTJ\",\n\t\t\t\"conquer\": \"VERB\",\n\t\t\t\"questioned\": \"VERB\",\n\t\t\t\"match\": \"NOUN\",\n\t\t\t\"dumbly\": \"ADV\",\n\t\t\t\"m.p.\": \"NOUN\",\n\t\t\t\"a.k.a.\": \"ADV\",\n\t\t\t\"crouches\": \"VERB\",\n\t\t\t\"scar\": \"NOUN\",\n\t\t\t\"contrast\": \"NOUN\",\n\t\t\t\"fundraising\": \"NOUN\",\n\t\t\t\"kebabs\": \"NOUN\",\n\t\t\t\"mute\": \"ADJ\",\n\t\t\t\"papa\": \"PROPN\",\n\t\t\t\"msnbc\": \"PROPN\",\n\t\t\t\"forums\": \"NOUN\",\n\t\t\t\"succeeded\": \"VERB\",\n\t\t\t\"theme\": \"NOUN\",\n\t\t\t\"unexpectedly\": \"ADV\",\n\t\t\t\"greater\": \"ADJ\",\n\t\t\t\"uh-oh\": \"INTJ\",\n\t\t\t\"1.2\": \"NUM\",\n\t\t\t\"110\": \"NUM\",\n\t\t\t\"steadied\": \"VERB\",\n\t\t\t\"taxes\": \"NOUN\",\n\t\t\t\"xiaoping\": \"PROPN\",\n\t\t\t\"11/27/2000\": \"NUM\",\n\t\t\t\"ace\": \"PROPN\",\n\t\t\t\"june\": \"PROPN\",\n\t\t\t\"tomatos\": \"NOUN\",\n\t\t\t\"exploded\": \"VERB\",\n\t\t\t\"adopted\": \"VERB\",\n\t\t\t\"seeping\": \"VERB\",\n\t\t\t\"spices\": \"NOUN\",\n\t\t\t\"loafing\": \"VERB\",\n\t\t\t\"deteriorate\": \"VERB\",\n\t\t\t\"percent\": \"NOUN\",\n\t\t\t\"paramount\": \"ADJ\",\n\t\t\t\"unconstrained\": \"ADJ\",\n\t\t\t\"disclaimer\": \"NOUN\",\n\t\t\t\"sic\": \"ADV\",\n\t\t\t\"chubby\": \"ADJ\",\n\t\t\t\"416-865-3703\": \"NUM\",\n\t\t\t\"reigning\": \"VERB\",\n\t\t\t\"detected\": \"VERB\",\n\t\t\t\"system\": \"NOUN\",\n\t\t\t\"bearkadette\": \"PROPN\",\n\t\t\t\"combine\": \"VERB\",\n\t\t\t\"moderates\": \"NOUN\",\n\t\t\t\"battery\": \"NOUN\",\n\t\t\t\"**********\": \"PUNCT\",\n\t\t\t\"sentencing\": \"NOUN\",\n\t\t\t\"decades\": \"NOUN\",\n\t\t\t\"281-518-1081\": \"NUM\",\n\t\t\t\"covered\": \"VERB\",\n\t\t\t\"docking\": \"NOUN\",\n\t\t\t\"financing\": \"NOUN\",\n\t\t\t\"jenks\": \"PROPN\",\n\t\t\t\"beadwork\": \"NOUN\",\n\t\t\t\"ppl\": \"NOUN\",\n\t\t\t\"dated\": \"VERB\",\n\t\t\t\"earned\": \"VERB\",\n\t\t\t\"meets\": \"VERB\",\n\t\t\t\"histories\": \"NOUN\",\n\t\t\t\"expeditionary\": \"ADJ\",\n\t\t\t\"chalmers\": \"PROPN\",\n\t\t\t\"hospital\": \"NOUN\",\n\t\t\t\"hotel\": \"NOUN\",\n\t\t\t\"1660\": \"NUM\",\n\t\t\t\"netmeeting\": \"PROPN\",\n\t\t\t\"cambodia\": \"PROPN\",\n\t\t\t\"jumped\": \"VERB\",\n\t\t\t\"stay-at-home\": \"ADJ\",\n\t\t\t\"bonanza\": \"PROPN\",\n\t\t\t\"uc\": \"PROPN\",\n\t\t\t\"aligned\": \"VERB\",\n\t\t\t\"fred\": \"PROPN\",\n\t\t\t\"streaked\": \"VERB\",\n\t\t\t\"pitches\": \"NOUN\",\n\t\t\t\"balances\": \"NOUN\",\n\t\t\t\"===================================================\": \"SYM\",\n\t\t\t\"db\": \"PROPN\",\n\t\t\t\"solution\": \"NOUN\",\n\t\t\t\"mmc\": \"NOUN\",\n\t\t\t\"describing\": \"VERB\",\n\t\t\t\"mystic\": \"PROPN\",\n\t\t\t\"fishes\": \"NOUN\",\n\t\t\t\"rumanian\": \"ADJ\",\n\t\t\t\"allies\": \"NOUN\",\n\t\t\t\"16's\": \"NOUN\",\n\t\t\t\"melanie.gray@weil.com\": \"PROPN\",\n\t\t\t\"jazz\": \"NOUN\",\n\t\t\t\"rehe\": \"PROPN\",\n\t\t\t\"turnpike\": \"PROPN\",\n\t\t\t\"singing\": \"VERB\",\n\t\t\t\"lets\": \"VERB\",\n\t\t\t\"toccafondi\": \"PROPN\",\n\t\t\t\"alt.consumers\": \"NOUN\",\n\t\t\t\"wavy\": \"ADJ\",\n\t\t\t\"politically\": \"ADV\",\n\t\t\t\"stardust\": \"PROPN\",\n\t\t\t\"checked-cloth\": \"NOUN\",\n\t\t\t\"bail\": \"NOUN\",\n\t\t\t\"moonshine\": \"NOUN\",\n\t\t\t\"dentists\": \"NOUN\",\n\t\t\t\"royalist\": \"ADJ\",\n\t\t\t\"remaining\": \"VERB\",\n\t\t\t\"onions\": \"NOUN\",\n\t\t\t\"converter\": \"NOUN\",\n\t\t\t\"ahmad\": \"PROPN\",\n\t\t\t\"answering\": \"VERB\",\n\t\t\t\"belts\": \"NOUN\",\n\t\t\t\"proclaiming\": \"VERB\",\n\t\t\t\"despotism\": \"NOUN\",\n\t\t\t\"flooded\": \"VERB\",\n\t\t\t\"ew\": \"INTJ\",\n\t\t\t\"accessibility\": \"NOUN\",\n\t\t\t\"creases\": \"NOUN\",\n\t\t\t\"kubler\": \"PROPN\",\n\t\t\t\"11:32\": \"NUM\",\n\t\t\t\"wand\": \"NOUN\",\n\t\t\t\"unhealthy\": \"ADJ\",\n\t\t\t\"identify\": \"VERB\",\n\t\t\t\"destabilize\": \"VERB\",\n\t\t\t\"ahali\": \"PROPN\",\n\t\t\t\"fringed\": \"VERB\",\n\t\t\t\"ryan\": \"PROPN\",\n\t\t\t\"lungs\": \"NOUN\",\n\t\t\t\"female\": \"NOUN\",\n\t\t\t\"hind\": \"PROPN\",\n\t\t\t\"pro-india\": \"ADJ\",\n\t\t\t\"honestly\": \"ADV\",\n\t\t\t\"dirty\": \"ADJ\",\n\t\t\t\"formatting\": \"NOUN\",\n\t\t\t\"kingston\": \"PROPN\",\n\t\t\t\"critically\": \"ADV\",\n\t\t\t\"shanna\": \"PROPN\",\n\t\t\t\"influence\": \"NOUN\",\n\t\t\t\"irresistibly\": \"ADV\",\n\t\t\t\"beginner\": \"NOUN\",\n\t\t\t\"gyrations\": \"NOUN\",\n\t\t\t\"crashing\": \"VERB\",\n\t\t\t\"disrepute\": \"NOUN\",\n\t\t\t\"gobbled\": \"VERB\",\n\t\t\t\"stockholders\": \"NOUN\",\n\t\t\t\"co-stars\": \"NOUN\",\n\t\t\t\"subpoenas\": \"NOUN\",\n\t\t\t\"perspiration\": \"NOUN\",\n\t\t\t\"cure\": \"NOUN\",\n\t\t\t\"unstaunched\": \"ADJ\",\n\t\t\t\"followed\": \"VERB\",\n\t\t\t\"simulation\": \"NOUN\",\n\t\t\t\"october\": \"PROPN\",\n\t\t\t\"manicure\": \"NOUN\",\n\t\t\t\"pho\": \"NOUN\",\n\t\t\t\"abymes\": \"PROPN\",\n\t\t\t\"insurance\": \"NOUN\",\n\t\t\t\"caitlin\": \"PROPN\",\n\t\t\t\"sprays\": \"NOUN\",\n\t\t\t\"cia\": \"PROPN\",\n\t\t\t\"bpa\": \"PROPN\",\n\t\t\t\"kidding\": \"VERB\",\n\t\t\t\"heartbreaking\": \"ADJ\",\n\t\t\t\"brightness\": \"NOUN\",\n\t\t\t\"exuberant\": \"ADJ\",\n\t\t\t\"swivel\": \"NOUN\",\n\t\t\t\"desparate\": \"ADJ\",\n\t\t\t\"john\": \"PROPN\",\n\t\t\t\"perlite\": \"NOUN\",\n\t\t\t\"carbet\": \"PROPN\",\n\t\t\t\"d'\": \"AUX\",\n\t\t\t\"kriste\": \"PROPN\",\n\t\t\t\"precipitous\": \"ADJ\",\n\t\t\t\"catalytic\": \"ADJ\",\n\t\t\t\"recovering\": \"VERB\",\n\t\t\t\"muffs\": \"NOUN\",\n\t\t\t\"n.y.\": \"PROPN\",\n\t\t\t\"route\": \"NOUN\",\n\t\t\t\"stuart\": \"PROPN\",\n\t\t\t\"niagara\": \"PROPN\",\n\t\t\t\"cloudy\": \"ADJ\",\n\t\t\t\"stewart\": \"PROPN\",\n\t\t\t\"2018\": \"NUM\",\n\t\t\t\"1955\": \"NUM\",\n\t\t\t\"eager\": \"ADJ\",\n\t\t\t\"immigration\": \"NOUN\",\n\t\t\t\"ferc\": \"PROPN\",\n\t\t\t\"milnet\": \"PROPN\",\n\t\t\t\"façade\": \"NOUN\",\n\t\t\t\"feathers\": \"NOUN\",\n\t\t\t\"donohue\": \"PROPN\",\n\t\t\t\"circumvention\": \"NOUN\",\n\t\t\t\"kitty\": \"NOUN\",\n\t\t\t\"crescent\": \"PROPN\",\n\t\t\t\"pinot\": \"PROPN\",\n\t\t\t\"lovers\": \"NOUN\",\n\t\t\t\"murderous\": \"ADJ\",\n\t\t\t\"formaldehyde\": \"NOUN\",\n\t\t\t\"entrance\": \"NOUN\",\n\t\t\t\"away\": \"ADV\",\n\t\t\t\"cross-sectional\": \"ADJ\",\n\t\t\t\"scoured\": \"VERB\",\n\t\t\t\"stalked\": \"ADJ\",\n\t\t\t\"partial\": \"ADJ\",\n\t\t\t\"scatter\": \"VERB\",\n\t\t\t\"injure\": \"VERB\",\n\t\t\t\"kevalam\": \"NOUN\",\n\t\t\t\"smugglers\": \"NOUN\",\n\t\t\t\"troubling\": \"ADJ\",\n\t\t\t\"improperly\": \"ADV\",\n\t\t\t\"initiative\": \"NOUN\",\n\t\t\t\"phrase\": \"NOUN\",\n\t\t\t\"humane\": \"ADJ\",\n\t\t\t\"quivered\": \"VERB\",\n\t\t\t\"gwenzi\": \"PROPN\",\n\t\t\t\"smacking\": \"VERB\",\n\t\t\t\"#research\": \"PROPN\",\n\t\t\t\"drives\": \"NOUN\",\n\t\t\t\"for-profit\": \"ADJ\",\n\t\t\t\"skilling\": \"PROPN\",\n\t\t\t\"enhanced\": \"VERB\",\n\t\t\t\"kenneth\": \"PROPN\",\n\t\t\t\"lichtenstein\": \"PROPN\",\n\t\t\t\"desert\": \"NOUN\",\n\t\t\t\"folds\": \"NOUN\",\n\t\t\t\"pupil\": \"NOUN\",\n\t\t\t\"realisation\": \"NOUN\",\n\t\t\t\"authorized\": \"VERB\",\n\t\t\t\"????\": \"PUNCT\",\n\t\t\t\"undeclared\": \"ADJ\",\n\t\t\t\"bd\": \"PROPN\",\n\t\t\t\"g&g\": \"PROPN\",\n\t\t\t\"erected\": \"VERB\",\n\t\t\t\"render\": \"VERB\",\n\t\t\t\"attracting\": \"VERB\",\n\t\t\t\"perceptions\": \"NOUN\",\n\t\t\t\"ei\": \"PROPN\",\n\t\t\t\"participatory\": \"ADJ\",\n\t\t\t\"strawberry\": \"NOUN\",\n\t\t\t\"epidemic\": \"NOUN\",\n\t\t\t\"crawl\": \"VERB\",\n\t\t\t\"concentrations\": \"NOUN\",\n\t\t\t\"truths\": \"NOUN\",\n\t\t\t\"pickup\": \"NOUN\",\n\t\t\t\"diana\": \"PROPN\",\n\t\t\t\"sixty\": \"NUM\",\n\t\t\t\"soak\": \"VERB\",\n\t\t\t\"balding\": \"ADJ\",\n\t\t\t\"arrow\": \"PROPN\",\n\t\t\t\"phone\": \"NOUN\",\n\t\t\t\"modem\": \"NOUN\",\n\t\t\t\"unheeded\": \"ADJ\",\n\t\t\t\"08/01/2001\": \"NUM\",\n\t\t\t\"1348\": \"NUM\",\n\t\t\t\"boris\": \"PROPN\",\n\t\t\t\"compulsive\": \"ADJ\",\n\t\t\t\"salaries\": \"NOUN\",\n\t\t\t\"http://farm3.static.flickr.com/2406/2527255596_db23df940f.jpg\": \"PROPN\",\n\t\t\t\"pastures\": \"NOUN\",\n\t\t\t\"competent\": \"ADJ\",\n\t\t\t\"tide\": \"NOUN\",\n\t\t\t\"madame\": \"PROPN\",\n\t\t\t\"niece\": \"NOUN\",\n\t\t\t\"scientology.org\": \"PROPN\",\n\t\t\t\"cairo\": \"PROPN\",\n\t\t\t\"3926\": \"NUM\",\n\t\t\t\"co2\": \"NOUN\",\n\t\t\t\"gladdened\": \"VERB\",\n\t\t\t\"arakan\": \"ADJ\",\n\t\t\t\"locusts\": \"NOUN\",\n\t\t\t\"giraffes\": \"NOUN\",\n\t\t\t\"teenagers\": \"NOUN\",\n\t\t\t\"shankman\": \"PROPN\",\n\t\t\t\"confounded\": \"ADJ\",\n\t\t\t\"pre-made\": \"VERB\",\n\t\t\t\"reproduced\": \"VERB\",\n\t\t\t\"splish\": \"VERB\",\n\t\t\t\"seaman\": \"NOUN\",\n\t\t\t\"organizing\": \"VERB\",\n\t\t\t\"plaskitt\": \"PROPN\",\n\t\t\t\"perceiving\": \"VERB\",\n\t\t\t\"my\": \"PRON\",\n\t\t\t\"exceptionally\": \"ADV\",\n\t\t\t\"cat\": \"NOUN\",\n\t\t\t\"marval\": \"PROPN\",\n\t\t\t\"local\": \"ADJ\",\n\t\t\t\"shrewd\": \"ADJ\",\n\t\t\t\"posada\": \"PROPN\",\n\t\t\t\"0832\": \"NUM\",\n\t\t\t\"marin\": \"PROPN\",\n\t\t\t\"remembered\": \"VERB\",\n\t\t\t\"granting\": \"NOUN\",\n\t\t\t\"garganta\": \"PROPN\",\n\t\t\t\"84838389593\": \"NUM\",\n\t\t\t\"kingel\": \"PROPN\",\n\t\t\t\"gus\": \"PROPN\",\n\t\t\t\"jesuit\": \"ADJ\",\n\t\t\t\"peaked\": \"ADJ\",\n\t\t\t\"watchmen\": \"PROPN\",\n\t\t\t\"potter\": \"PROPN\",\n\t\t\t\"gallows\": \"PROPN\",\n\t\t\t\"401.3\": \"NUM\",\n\t\t\t\"frighten\": \"VERB\",\n\t\t\t\"2029\": \"NUM\",\n\t\t\t\"conseguences\": \"PROPN\",\n\t\t\t\"rid\": \"ADJ\",\n\t\t\t\"receptions\": \"NOUN\",\n\t\t\t\"roman\": \"ADJ\",\n\t\t\t\"along\": \"ADP\",\n\t\t\t\"quinto\": \"PROPN\",\n\t\t\t\"mountain\": \"NOUN\",\n\t\t\t\"cuthbert\": \"PROPN\",\n\t\t\t\"1572\": \"NUM\",\n\t\t\t\"forgot\": \"VERB\",\n\t\t\t\"popularity\": \"NOUN\",\n\t\t\t\"heap\": \"NOUN\",\n\t\t\t\"severed\": \"ADJ\",\n\t\t\t\"fall\": \"NOUN\",\n\t\t\t\"maam\": \"NOUN\",\n\t\t\t\"purge\": \"VERB\",\n\t\t\t\"molded\": \"VERB\",\n\t\t\t\"^_^\": \"SYM\",\n\t\t\t\"colony\": \"NOUN\",\n\t\t\t\"flick\": \"NOUN\",\n\t\t\t\"signers\": \"NOUN\",\n\t\t\t\"chases\": \"NOUN\",\n\t\t\t\"proliferate\": \"VERB\",\n\t\t\t\"evaluating\": \"VERB\",\n\t\t\t\"6:00\": \"NUM\",\n\t\t\t\"dilated\": \"ADJ\",\n\t\t\t\"curved\": \"ADJ\",\n\t\t\t\"president\": \"PROPN\",\n\t\t\t\"jaqamofino\": \"PROPN\",\n\t\t\t\"insoles\": \"NOUN\",\n\t\t\t\"cory\": \"NOUN\",\n\t\t\t\"debris\": \"NOUN\",\n\t\t\t\"desiring\": \"VERB\",\n\t\t\t\"lieu\": \"NOUN\",\n\t\t\t\"hunger\": \"NOUN\",\n\t\t\t\"patriot\": \"NOUN\",\n\t\t\t\"accordingly\": \"ADV\",\n\t\t\t\"deliverd\": \"VERB\",\n\t\t\t\"atrophied\": \"VERB\",\n\t\t\t\"284\": \"NUM\",\n\t\t\t\"delta\": \"PROPN\",\n\t\t\t\"reformulated\": \"VERB\",\n\t\t\t\"crucially\": \"ADV\",\n\t\t\t\"latter\": \"ADJ\",\n\t\t\t\"select\": \"VERB\",\n\t\t\t\"boleyn\": \"PROPN\",\n\t\t\t\"kristof\": \"PROPN\",\n\t\t\t\"drainage-pipes\": \"NOUN\",\n\t\t\t\".203\": \"NUM\",\n\t\t\t\"real\": \"ADJ\",\n\t\t\t\"extreme\": \"ADJ\",\n\t\t\t\"dulaim\": \"PROPN\",\n\t\t\t\"retest\": \"VERB\",\n\t\t\t\"finally\": \"ADV\",\n\t\t\t\"23\": \"NUM\",\n\t\t\t\"curator\": \"NOUN\",\n\t\t\t\"switched\": \"VERB\",\n\t\t\t\"showed\": \"VERB\",\n\t\t\t\"dimly\": \"ADV\",\n\t\t\t\"explanation\": \"NOUN\",\n\t\t\t\"excel\": \"PROPN\",\n\t\t\t\"wifi\": \"NOUN\",\n\t\t\t\"makkai\": \"PROPN\",\n\t\t\t\"cuban\": \"ADJ\",\n\t\t\t\"restoration\": \"NOUN\",\n\t\t\t\"turkey\": \"PROPN\",\n\t\t\t\"wines\": \"NOUN\",\n\t\t\t\"fortunes\": \"NOUN\",\n\t\t\t\"expressionist\": \"NOUN\",\n\t\t\t\"independence\": \"NOUN\",\n\t\t\t\"gameplay\": \"NOUN\",\n\t\t\t\"berkman\": \"PROPN\",\n\t\t\t\"kinga\": \"PROPN\",\n\t\t\t\"mandelstam\": \"PROPN\",\n\t\t\t\"sabotaging\": \"VERB\",\n\t\t\t\"mining\": \"NOUN\",\n\t\t\t\"maniacs\": \"NOUN\",\n\t\t\t\"voided\": \"VERB\",\n\t\t\t\"enclosed\": \"VERB\",\n\t\t\t\"5.10\": \"NUM\",\n\t\t\t\"arabiya\": \"PROPN\",\n\t\t\t\"degree\": \"NOUN\",\n\t\t\t\"jubilee\": \"PROPN\",\n\t\t\t\"moon\": \"NOUN\",\n\t\t\t\"eaters\": \"NOUN\",\n\t\t\t\"tried\": \"VERB\",\n\t\t\t\"fins\": \"NOUN\",\n\t\t\t\"b-\": \"INTJ\",\n\t\t\t\"stances\": \"NOUN\",\n\t\t\t\"tempers\": \"NOUN\",\n\t\t\t\"miyuki\": \"PROPN\",\n\t\t\t\"tanabe\": \"PROPN\",\n\t\t\t\"acrylics\": \"PROPN\",\n\t\t\t\"wildwood\": \"PROPN\",\n\t\t\t\"ferguson\": \"PROPN\",\n\t\t\t\"profiles\": \"NOUN\",\n\t\t\t\"1525\": \"NUM\",\n\t\t\t\"revalue\": \"VERB\",\n\t\t\t\"bat\": \"NOUN\",\n\t\t\t\"norms\": \"NOUN\",\n\t\t\t\"ahmadinejad\": \"PROPN\",\n\t\t\t\"roofing\": \"NOUN\",\n\t\t\t\"humanistic\": \"ADJ\",\n\t\t\t\"click\": \"VERB\",\n\t\t\t\"enchilada\": \"NOUN\",\n\t\t\t\"dissertation\": \"NOUN\",\n\t\t\t\"likeness\": \"NOUN\",\n\t\t\t\"intentions\": \"NOUN\",\n\t\t\t\"tides\": \"NOUN\",\n\t\t\t\"hospitals\": \"NOUN\",\n\t\t\t\"semi-empirical\": \"ADJ\",\n\t\t\t\"just\": \"ADV\",\n\t\t\t\"ices\": \"NOUN\",\n\t\t\t\"strain\": \"NOUN\",\n\t\t\t\"simon\": \"PROPN\",\n\t\t\t\"hundreds\": \"NOUN\",\n\t\t\t\"coursing\": \"VERB\",\n\t\t\t\"stubborn\": \"ADJ\",\n\t\t\t\"tulsa\": \"PROPN\",\n\t\t\t\"kandahar\": \"PROPN\",\n\t\t\t\"kohoutek\": \"PROPN\",\n\t\t\t\"useful\": \"ADJ\",\n\t\t\t\"travels\": \"VERB\",\n\t\t\t\"farouk\": \"PROPN\",\n\t\t\t\"cuba\": \"PROPN\",\n\t\t\t\"jointly\": \"ADV\",\n\t\t\t\"resented\": \"VERB\",\n\t\t\t\"retiring\": \"VERB\",\n\t\t\t\"croatia\": \"PROPN\",\n\t\t\t\"artful\": \"ADJ\",\n\t\t\t\"vij\": \"PROPN\",\n\t\t\t\"appeals\": \"NOUN\",\n\t\t\t\"galveston\": \"PROPN\",\n\t\t\t\"potters\": \"NOUN\",\n\t\t\t\"shop\": \"NOUN\",\n\t\t\t\"librivox\": \"PROPN\",\n\t\t\t\"2023\": \"NUM\",\n\t\t\t\"1970s\": \"NOUN\",\n\t\t\t\"transaction\": \"NOUN\",\n\t\t\t\"responsible\": \"ADJ\",\n\t\t\t\"squarely\": \"ADV\",\n\t\t\t\"conceptual\": \"ADJ\",\n\t\t\t\"demographic\": \"ADJ\",\n\t\t\t\"intimacy\": \"NOUN\",\n\t\t\t\"unknown\": \"ADJ\",\n\t\t\t\"08/16/2000\": \"NUM\",\n\t\t\t\"abc\": \"PROPN\",\n\t\t\t\"proceed\": \"VERB\",\n\t\t\t\"tranquilize\": \"VERB\",\n\t\t\t\"outright\": \"ADV\",\n\t\t\t\"regrettable\": \"ADJ\",\n\t\t\t\"blisters\": \"NOUN\",\n\t\t\t\"bucket\": \"NOUN\",\n\t\t\t\"photoshop\": \"PROPN\",\n\t\t\t\"0.3\": \"NUM\",\n\t\t\t\"shave\": \"NOUN\",\n\t\t\t\"developmental\": \"ADJ\",\n\t\t\t\"05:51\": \"NUM\",\n\t\t\t\"an-\": \"INTJ\",\n\t\t\t\"condoleeza\": \"PROPN\",\n\t\t\t\"booming\": \"ADJ\",\n\t\t\t\"discrepancy\": \"NOUN\",\n\t\t\t\"lay\": \"VERB\",\n\t\t\t\"tactic\": \"NOUN\",\n\t\t\t\"patties\": \"NOUN\",\n\t\t\t\"reportml\": \"PROPN\",\n\t\t\t\"differently\": \"ADV\",\n\t\t\t\"fallon\": \"PROPN\",\n\t\t\t\"menaces\": \"NOUN\",\n\t\t\t\"paradero\": \"PROPN\",\n\t\t\t\"crunchy\": \"ADJ\",\n\t\t\t\"penetration\": \"NOUN\",\n\t\t\t\"immacolata\": \"PROPN\",\n\t\t\t\"stereo\": \"NOUN\",\n\t\t\t\"jfk\": \"PROPN\",\n\t\t\t\"variants\": \"NOUN\",\n\t\t\t\"somber\": \"ADJ\",\n\t\t\t\"theraphy\": \"NOUN\",\n\t\t\t\"islami\": \"PROPN\",\n\t\t\t\"300,000\": \"NUM\",\n\t\t\t\"executive\": \"ADJ\",\n\t\t\t\"lord\": \"NOUN\",\n\t\t\t\"rajavis\": \"PROPN\",\n\t\t\t\"anti-ship\": \"ADJ\",\n\t\t\t\"transferable\": \"ADJ\",\n\t\t\t\"ba\": \"PROPN\",\n\t\t\t\"spikes\": \"NOUN\",\n\t\t\t\"checa\": \"PROPN\",\n\t\t\t\"marina\": \"PROPN\",\n\t\t\t\"lloyd\": \"PROPN\",\n\t\t\t\"av\": \"PROPN\",\n\t\t\t\"11/09/2000\": \"NUM\",\n\t\t\t\"anti-christ\": \"NOUN\",\n\t\t\t\"hypothetically\": \"ADV\",\n\t\t\t\"flatter\": \"ADJ\",\n\t\t\t\"appropriators\": \"NOUN\",\n\t\t\t\"sapped\": \"VERB\",\n\t\t\t\"readings\": \"NOUN\",\n\t\t\t\"succulent\": \"ADJ\",\n\t\t\t\"hairstylist\": \"NOUN\",\n\t\t\t\"henequen\": \"NOUN\",\n\t\t\t\"extremism\": \"NOUN\",\n\t\t\t\"cd\": \"PROPN\",\n\t\t\t\"incentive\": \"NOUN\",\n\t\t\t\"retreats\": \"NOUN\",\n\t\t\t\"treated\": \"VERB\",\n\t\t\t\"artworks\": \"NOUN\",\n\t\t\t\"continental\": \"ADJ\",\n\t\t\t\"hyperbolic\": \"ADJ\",\n\t\t\t\"heavyweight\": \"NOUN\",\n\t\t\t\"parish\": \"PROPN\",\n\t\t\t\"mammals\": \"NOUN\",\n\t\t\t\"tubes\": \"NOUN\",\n\t\t\t\"retraction\": \"NOUN\",\n\t\t\t\"patently\": \"ADV\",\n\t\t\t\"legality\": \"NOUN\",\n\t\t\t\"adopting\": \"VERB\",\n\t\t\t\"regenerate\": \"VERB\",\n\t\t\t\"seleznov\": \"PROPN\",\n\t\t\t\"mohamed\": \"PROPN\",\n\t\t\t\"fanfics\": \"NOUN\",\n\t\t\t\"collector\": \"NOUN\",\n\t\t\t\"proclaimers\": \"NOUN\",\n\t\t\t\"startup\": \"NOUN\",\n\t\t\t\"unloading\": \"VERB\",\n\t\t\t\"shee\": \"PROPN\",\n\t\t\t\"find\": \"VERB\",\n\t\t\t\"dissembling\": \"VERB\",\n\t\t\t\"robsart\": \"PROPN\",\n\t\t\t\"returned\": \"VERB\",\n\t\t\t\"#sharedvalues\": \"PROPN\",\n\t\t\t\"mah\": \"NOUN\",\n\t\t\t\"hastened\": \"VERB\",\n\t\t\t\"mere\": \"ADJ\",\n\t\t\t\"calendar\": \"NOUN\",\n\t\t\t\"dodge\": \"NOUN\",\n\t\t\t\"conquests\": \"NOUN\",\n\t\t\t\"fireworks\": \"NOUN\",\n\t\t\t\"amphibious\": \"ADJ\",\n\t\t\t\"anemone\": \"NOUN\",\n\t\t\t\"soles\": \"NOUN\",\n\t\t\t\"kennebunkport\": \"PROPN\",\n\t\t\t\"carreau\": \"PROPN\",\n\t\t\t\"woo-\": \"INTJ\",\n\t\t\t\"osip\": \"PROPN\",\n\t\t\t\"battleground\": \"NOUN\",\n\t\t\t\"maharishi\": \"PROPN\",\n\t\t\t\"shaken\": \"VERB\",\n\t\t\t\"hock\": \"NOUN\",\n\t\t\t\"boarding\": \"NOUN\",\n\t\t\t\"jamarat\": \"PROPN\",\n\t\t\t\"sdg&e\": \"PROPN\",\n\t\t\t\"install\": \"VERB\",\n\t\t\t\"1302\": \"NUM\",\n\t\t\t\"obudu\": \"PROPN\",\n\t\t\t\"waves\": \"NOUN\",\n\t\t\t\"nap\": \"NOUN\",\n\t\t\t\"savagery\": \"NOUN\",\n\t\t\t\"veils\": \"NOUN\",\n\t\t\t\"manikins\": \"NOUN\",\n\t\t\t\"booster\": \"NOUN\",\n\t\t\t\"bmw\": \"PROPN\",\n\t\t\t\"conditioner\": \"NOUN\",\n\t\t\t\"assorted\": \"ADJ\",\n\t\t\t\"socialism\": \"NOUN\",\n\t\t\t\"prevalence\": \"NOUN\",\n\t\t\t\"constituencies\": \"NOUN\",\n\t\t\t\"20,000,000\": \"NUM\",\n\t\t\t\"things\": \"NOUN\",\n\t\t\t\"explain\": \"VERB\",\n\t\t\t\"scratch\": \"NOUN\",\n\t\t\t\"advantages\": \"NOUN\",\n\t\t\t\"interrupt\": \"VERB\",\n\t\t\t\"beams\": \"NOUN\",\n\t\t\t\"retail\": \"NOUN\",\n\t\t\t\"mark\": \"PROPN\",\n\t\t\t\"49\": \"NUM\",\n\t\t\t\"boarder\": \"NOUN\",\n\t\t\t\"bac\": \"NOUN\",\n\t\t\t\"exchanging\": \"VERB\",\n\t\t\t\"seasoned\": \"ADJ\",\n\t\t\t\"augmentation\": \"NOUN\",\n\t\t\t\"pesto\": \"NOUN\",\n\t\t\t\"ward\": \"VERB\",\n\t\t\t\"b.a.\": \"PROPN\",\n\t\t\t\"installed\": \"VERB\",\n\t\t\t\"sholder\": \"NOUN\",\n\t\t\t\"falters\": \"VERB\",\n\t\t\t\"waitress\": \"NOUN\",\n\t\t\t\"sole\": \"ADJ\",\n\t\t\t\"jantar\": \"PROPN\",\n\t\t\t\"counteractions\": \"NOUN\",\n\t\t\t\"stints\": \"NOUN\",\n\t\t\t\"earthhhhhhh\": \"PROPN\",\n\t\t\t\"1480\": \"NUM\",\n\t\t\t\"occupying\": \"VERB\",\n\t\t\t\"transfer\": \"NOUN\",\n\t\t\t\"tentatively\": \"ADV\",\n\t\t\t\"16th\": \"ADJ\",\n\t\t\t\"lantern\": \"NOUN\",\n\t\t\t\"optionally\": \"ADV\",\n\t\t\t\"overage\": \"NOUN\",\n\t\t\t\"connotation\": \"NOUN\",\n\t\t\t\"tamil\": \"ADJ\",\n\t\t\t\"malaria\": \"NOUN\",\n\t\t\t\"boundless\": \"ADJ\",\n\t\t\t\"breakfast\": \"NOUN\",\n\t\t\t\"centerpiece\": \"NOUN\",\n\t\t\t\"greed\": \"NOUN\",\n\t\t\t\"1775\": \"NUM\",\n\t\t\t\"sana'a\": \"PROPN\",\n\t\t\t\"poisson\": \"PROPN\",\n\t\t\t\"votaw\": \"PROPN\",\n\t\t\t\"rhetorical\": \"ADJ\",\n\t\t\t\"naming\": \"VERB\",\n\t\t\t\"meantime\": \"NOUN\",\n\t\t\t\"covariation\": \"NOUN\",\n\t\t\t\"privately\": \"ADV\",\n\t\t\t\"campos\": \"PROPN\",\n\t\t\t\"1779\": \"NUM\",\n\t\t\t\"highlighted\": \"VERB\",\n\t\t\t\"toy\": \"NOUN\",\n\t\t\t\"acupuncture\": \"NOUN\",\n\t\t\t\"smash-up\": \"NOUN\",\n\t\t\t\"-----------------------------------------------\": \"PUNCT\",\n\t\t\t\"w2\": \"SYM\",\n\t\t\t\"shelves\": \"NOUN\",\n\t\t\t\"peppers\": \"NOUN\",\n\t\t\t\"pahl\": \"PROPN\",\n\t\t\t\"walters\": \"PROPN\",\n\t\t\t\"afresh\": \"ADV\",\n\t\t\t\"vanished\": \"VERB\",\n\t\t\t\"farm\": \"NOUN\",\n\t\t\t\"payable\": \"ADJ\",\n\t\t\t\"likes\": \"VERB\",\n\t\t\t\"segregation\": \"NOUN\",\n\t\t\t\"daring\": \"VERB\",\n\t\t\t\"paramilitary\": \"ADJ\",\n\t\t\t\"activity\": \"NOUN\",\n\t\t\t\"stickies\": \"NOUN\",\n\t\t\t\"large\": \"ADJ\",\n\t\t\t\"five\": \"NUM\",\n\t\t\t\"twenty-thousand-dollar\": \"NOUN\",\n\t\t\t\"ssris\": \"NOUN\",\n\t\t\t\"centers\": \"NOUN\",\n\t\t\t\"cemetery\": \"NOUN\",\n\t\t\t\"deciding\": \"VERB\",\n\t\t\t\"squirelled\": \"VERB\",\n\t\t\t\"chatham\": \"PROPN\",\n\t\t\t\"comforted\": \"VERB\",\n\t\t\t\"gro\": \"PROPN\",\n\t\t\t\"larger\": \"ADJ\",\n\t\t\t\"material\": \"NOUN\",\n\t\t\t\"lambs\": \"NOUN\",\n\t\t\t\"dealers\": \"NOUN\",\n\t\t\t\"concerts\": \"NOUN\",\n\t\t\t\"gear\": \"NOUN\",\n\t\t\t\"1778\": \"NUM\",\n\t\t\t\"toolbar\": \"NOUN\",\n\t\t\t\"wavelength\": \"NOUN\",\n\t\t\t\"devolving\": \"VERB\",\n\t\t\t\"litgation\": \"NOUN\",\n\t\t\t\"deleted\": \"VERB\",\n\t\t\t\"midwest\": \"PROPN\",\n\t\t\t\"17:32\": \"NUM\",\n\t\t\t\"arisen\": \"VERB\",\n\t\t\t\"spilled\": \"VERB\",\n\t\t\t\"constantly\": \"ADV\",\n\t\t\t\"ceremonies\": \"NOUN\",\n\t\t\t\"muuuuuum\": \"INTJ\",\n\t\t\t\"faltered\": \"VERB\",\n\t\t\t\"urges\": \"NOUN\",\n\t\t\t\"girlfriends\": \"NOUN\",\n\t\t\t\"shrimp\": \"NOUN\",\n\t\t\t\"preventive\": \"ADJ\",\n\t\t\t\"beghe\": \"PROPN\",\n\t\t\t\"that\": \"PRON\",\n\t\t\t\"honourable\": \"ADJ\",\n\t\t\t\"angle\": \"NOUN\",\n\t\t\t\"sticky\": \"ADJ\",\n\t\t\t\"rusamarts@aol.com\": \"PROPN\",\n\t\t\t\"invitaion\": \"NOUN\",\n\t\t\t\"embrace\": \"VERB\",\n\t\t\t\"anneal\": \"PROPN\",\n\t\t\t\"100\": \"NUM\",\n\t\t\t\"game\": \"NOUN\",\n\t\t\t\"cache\": \"NOUN\",\n\t\t\t\"namely\": \"ADV\",\n\t\t\t\"4101\": \"NUM\",\n\t\t\t\"involve\": \"VERB\",\n\t\t\t\"funeral\": \"NOUN\",\n\t\t\t\"inspire\": \"VERB\",\n\t\t\t\"manipulated\": \"VERB\",\n\t\t\t\"heald\": \"PROPN\",\n\t\t\t\"opiate\": \"ADJ\",\n\t\t\t\"fog\": \"NOUN\",\n\t\t\t\"outgrowth\": \"NOUN\",\n\t\t\t\"crickets\": \"NOUN\",\n\t\t\t\"corrugated\": \"ADJ\",\n\t\t\t\"intention\": \"NOUN\",\n\t\t\t\"107th\": \"ADJ\",\n\t\t\t\"supreme\": \"ADJ\",\n\t\t\t\"barbaric\": \"ADJ\",\n\t\t\t\"mackenzie\": \"PROPN\",\n\t\t\t\"knit\": \"VERB\",\n\t\t\t\"pester\": \"VERB\",\n\t\t\t\"greatest\": \"ADJ\",\n\t\t\t\"revised\": \"VERB\",\n\t\t\t\"gtcs\": \"NOUN\",\n\t\t\t\"unlikely\": \"ADJ\",\n\t\t\t\"circularisation\": \"NOUN\",\n\t\t\t\"sheila\": \"PROPN\",\n\t\t\t\"reddish\": \"ADJ\",\n\t\t\t\"mshames@ucan.org\": \"PROPN\",\n\t\t\t\"does\": \"AUX\",\n\t\t\t\"interacts\": \"VERB\",\n\t\t\t\"snack\": \"NOUN\",\n\t\t\t\"inquiring\": \"VERB\",\n\t\t\t\"http://v2.cache7.c.bigcache.googleapis.com/static.panoramio.com/photos/original/42661265.jpg?redirect_counter=2\": \"PROPN\",\n\t\t\t\"dreary\": \"ADJ\",\n\t\t\t\"coping\": \"NOUN\",\n\t\t\t\"steam\": \"NOUN\",\n\t\t\t\"ftu\": \"PROPN\",\n\t\t\t\"unreported\": \"VERB\",\n\t\t\t\"jawaharal\": \"PROPN\",\n\t\t\t\"cockatiel\": \"NOUN\",\n\t\t\t\"start\": \"VERB\",\n\t\t\t\"landfall\": \"PROPN\",\n\t\t\t\"features\": \"NOUN\",\n\t\t\t\"12/22/2000\": \"NUM\",\n\t\t\t\"mcguire\": \"PROPN\",\n\t\t\t\"bloodied\": \"VERB\",\n\t\t\t\"systematic\": \"ADJ\",\n\t\t\t\"relentlessly\": \"ADV\",\n\t\t\t\"44th\": \"PROPN\",\n\t\t\t\"morale\": \"NOUN\",\n\t\t\t\"impasse\": \"NOUN\",\n\t\t\t\"questionable\": \"ADJ\",\n\t\t\t\"reassignment\": \"NOUN\",\n\t\t\t\"literally\": \"ADV\",\n\t\t\t\"sweden\": \"PROPN\",\n\t\t\t\"cage\": \"NOUN\",\n\t\t\t\"allocating\": \"VERB\",\n\t\t\t\"custody\": \"NOUN\",\n\t\t\t\"-------------------\": \"PUNCT\",\n\t\t\t\"pair\": \"NOUN\",\n\t\t\t\"procedures\": \"NOUN\",\n\t\t\t\"convictions\": \"NOUN\",\n\t\t\t\"mantelpiece\": \"NOUN\",\n\t\t\t\"glittering-eyed\": \"ADJ\",\n\t\t\t\"trivia\": \"NOUN\",\n\t\t\t\"purporting\": \"VERB\",\n\t\t\t\"formalism\": \"NOUN\",\n\t\t\t\"bernie\": \"PROPN\",\n\t\t\t\"banana\": \"NOUN\",\n\t\t\t\"winston\": \"PROPN\",\n\t\t\t\"praised\": \"VERB\",\n\t\t\t\"lihabi\": \"PROPN\",\n\t\t\t\"wing\": \"NOUN\",\n\t\t\t\"mit\": \"PROPN\",\n\t\t\t\"procure\": \"VERB\",\n\t\t\t\"non-essential\": \"ADJ\",\n\t\t\t\"liquor\": \"NOUN\",\n\t\t\t\"sensing\": \"NOUN\",\n\t\t\t\"therein\": \"ADV\",\n\t\t\t\"courtyard\": \"NOUN\",\n\t\t\t\"hilton\": \"PROPN\",\n\t\t\t\"warnings\": \"NOUN\",\n\t\t\t\"mumbled\": \"VERB\",\n\t\t\t\"crossing\": \"VERB\",\n\t\t\t\"mid-ocean\": \"NOUN\",\n\t\t\t\"clarke\": \"PROPN\",\n\t\t\t\"captured\": \"VERB\",\n\t\t\t\"megawatt\": \"NOUN\",\n\t\t\t\"rifles\": \"NOUN\",\n\t\t\t\"passport\": \"NOUN\",\n\t\t\t\"crowds\": \"NOUN\",\n\t\t\t\"laughs\": \"VERB\",\n\t\t\t\"tethered\": \"VERB\",\n\t\t\t\"sevenyear-old\": \"ADJ\",\n\t\t\t\"corresponding\": \"ADJ\",\n\t\t\t\"cara\": \"PROPN\",\n\t\t\t\"confession\": \"NOUN\",\n\t\t\t\"compliance\": \"NOUN\",\n\t\t\t\"smooth\": \"ADJ\",\n\t\t\t\"vehicle\": \"NOUN\",\n\t\t\t\"spores\": \"NOUN\",\n\t\t\t\"discourse\": \"NOUN\",\n\t\t\t\"body\": \"NOUN\",\n\t\t\t\"bacteriologist\": \"NOUN\",\n\t\t\t\"16,000,000,000\": \"NUM\",\n\t\t\t\"peacefully\": \"ADV\",\n\t\t\t\"eyed\": \"ADJ\",\n\t\t\t\"grangers\": \"PROPN\",\n\t\t\t\"mourvèdre\": \"PROPN\",\n\t\t\t\"outcasts\": \"NOUN\",\n\t\t\t\"helpful\": \"ADJ\",\n\t\t\t\"infiltrators\": \"NOUN\",\n\t\t\t\"---------------------------\": \"PUNCT\",\n\t\t\t\"laptop\": \"NOUN\",\n\t\t\t\"findings\": \"NOUN\",\n\t\t\t\"jongg\": \"NOUN\",\n\t\t\t\"additional\": \"ADJ\",\n\t\t\t\"gestalt\": \"ADJ\",\n\t\t\t\"tour\": \"NOUN\",\n\t\t\t\"emphasized\": \"VERB\",\n\t\t\t\"gastroenteritis\": \"NOUN\",\n\t\t\t\"posts\": \"NOUN\",\n\t\t\t\"pleased\": \"ADJ\",\n\t\t\t\"fruits\": \"NOUN\",\n\t\t\t\"miniseries\": \"NOUN\",\n\t\t\t\"physicians\": \"NOUN\",\n\t\t\t\"pyramid\": \"NOUN\",\n\t\t\t\"luncheons\": \"NOUN\",\n\t\t\t\"sj\": \"PROPN\",\n\t\t\t\"relevant\": \"ADJ\",\n\t\t\t\"everett\": \"PROPN\",\n\t\t\t\"creepy\": \"ADJ\",\n\t\t\t\"mutilating\": \"VERB\",\n\t\t\t\"foliage\": \"NOUN\",\n\t\t\t\"sce\": \"PROPN\",\n\t\t\t\"threatens\": \"VERB\",\n\t\t\t\"3.30\": \"NUM\",\n\t\t\t\"give\": \"VERB\",\n\t\t\t\"breathing\": \"VERB\",\n\t\t\t\"extermination\": \"NOUN\",\n\t\t\t\"razor\": \"NOUN\",\n\t\t\t\"0800\": \"NUM\",\n\t\t\t\"filler\": \"NOUN\",\n\t\t\t\"ululating\": \"ADJ\",\n\t\t\t\"brumbley\": \"PROPN\",\n\t\t\t\"equant\": \"PROPN\",\n\t\t\t\"zeitgeist\": \"NOUN\",\n\t\t\t\"guarantee\": \"VERB\",\n\t\t\t\"twinkies\": \"NOUN\",\n\t\t\t\"mixed\": \"VERB\",\n\t\t\t\"u.k\": \"PROPN\",\n\t\t\t\"lit\": \"VERB\",\n\t\t\t\"represented\": \"VERB\",\n\t\t\t\"05/02/2001\": \"NUM\",\n\t\t\t\"alchemy\": \"NOUN\",\n\t\t\t\"prey\": \"NOUN\",\n\t\t\t\"illwill\": \"NOUN\",\n\t\t\t\"aided\": \"VERB\",\n\t\t\t\"judged\": \"VERB\",\n\t\t\t\"......\": \"PUNCT\",\n\t\t\t\"recommendation\": \"NOUN\",\n\t\t\t\"populaire\": \"PROPN\",\n\t\t\t\"hullo\": \"INTJ\",\n\t\t\t\"verch\": \"PROPN\",\n\t\t\t\"gator\": \"NOUN\",\n\t\t\t\"innocent\": \"ADJ\",\n\t\t\t\"condone\": \"VERB\",\n\t\t\t\"pettigrews\": \"PROPN\",\n\t\t\t\"anticipated\": \"VERB\",\n\t\t\t\"warred\": \"VERB\",\n\t\t\t\"l\": \"PROPN\",\n\t\t\t\"natsu\": \"PROPN\",\n\t\t\t\"rhythm\": \"NOUN\",\n\t\t\t\"framework\": \"NOUN\",\n\t\t\t\"snub\": \"NOUN\",\n\t\t\t\"poverty\": \"NOUN\",\n\t\t\t\"weaken\": \"VERB\",\n\t\t\t\"1997\": \"NUM\",\n\t\t\t\"reaaaally\": \"ADV\",\n\t\t\t\"sore\": \"ADJ\",\n\t\t\t\"harder\": \"ADJ\",\n\t\t\t\"killed\": \"VERB\",\n\t\t\t\"googol\": \"PROPN\",\n\t\t\t\"meaningfully\": \"ADV\",\n\t\t\t\"released\": \"VERB\",\n\t\t\t\"tgpl\": \"PROPN\",\n\t\t\t\"tastical\": \"ADJ\",\n\t\t\t\"karaite\": \"ADJ\",\n\t\t\t\"02920\": \"NUM\",\n\t\t\t\"replicate\": \"VERB\",\n\t\t\t\"polygamous\": \"ADJ\",\n\t\t\t\"burdens\": \"NOUN\",\n\t\t\t\"foreign\": \"ADJ\",\n\t\t\t\"restoring\": \"VERB\",\n\t\t\t\"blush\": \"NOUN\",\n\t\t\t\"cream\": \"NOUN\",\n\t\t\t\"http://www.mikegigi.com/meltmetl.htm\": \"PROPN\",\n\t\t\t\"airbase\": \"NOUN\",\n\t\t\t\"alpharetta\": \"PROPN\",\n\t\t\t\"spectator\": \"NOUN\",\n\t\t\t\"defect\": \"NOUN\",\n\t\t\t\"handed\": \"VERB\",\n\t\t\t\"youngest\": \"ADJ\",\n\t\t\t\"changzhou\": \"PROPN\",\n\t\t\t\"sinnel\": \"NOUN\",\n\t\t\t\"freckle-faced\": \"ADJ\",\n\t\t\t\"crews\": \"NOUN\",\n\t\t\t\"7.22\": \"NUM\",\n\t\t\t\"illustration\": \"NOUN\",\n\t\t\t\"ideate\": \"VERB\",\n\t\t\t\"blur\": \"NOUN\",\n\t\t\t\"melancon\": \"PROPN\",\n\t\t\t\"advisory\": \"ADJ\",\n\t\t\t\"inappropriately\": \"ADV\",\n\t\t\t\"claim\": \"NOUN\",\n\t\t\t\"spoilt\": \"VERB\",\n\t\t\t\"forester\": \"PROPN\",\n\t\t\t\"http://i.imgur.com/xytex.jpg\": \"PROPN\",\n\t\t\t\"defects\": \"NOUN\",\n\t\t\t\"kadai\": \"PROPN\",\n\t\t\t\"viola\": \"PROPN\",\n\t\t\t\"blowback\": \"NOUN\",\n\t\t\t\"database\": \"NOUN\",\n\t\t\t\"anti-india\": \"ADJ\",\n\t\t\t\"according\": \"VERB\",\n\t\t\t\"pisa\": \"PROPN\",\n\t\t\t\"pinto\": \"PROPN\",\n\t\t\t\"guessing\": \"VERB\",\n\t\t\t\"slow\": \"ADJ\",\n\t\t\t\"uphill\": \"ADV\",\n\t\t\t\"enfurates\": \"VERB\",\n\t\t\t\"statewide\": \"ADJ\",\n\t\t\t\"twitched\": \"VERB\",\n\t\t\t\"tablespoons\": \"NOUN\",\n\t\t\t\"contouring\": \"VERB\",\n\t\t\t\"goldsmith\": \"PROPN\",\n\t\t\t\"bert\": \"PROPN\",\n\t\t\t\"eastbound\": \"ADJ\",\n\t\t\t\"hoof\": \"NOUN\",\n\t\t\t\"paradigmatic\": \"ADJ\",\n\t\t\t\"rouault\": \"PROPN\",\n\t\t\t\"hottest\": \"ADJ\",\n\t\t\t\"pompey\": \"PROPN\",\n\t\t\t\"nuclear\": \"ADJ\",\n\t\t\t\"balloons\": \"NOUN\",\n\t\t\t\"shah\": \"PROPN\",\n\t\t\t\"squinting\": \"VERB\",\n\t\t\t\"croucher\": \"PROPN\",\n\t\t\t\"somebody\": \"PRON\",\n\t\t\t\"binds\": \"NOUN\",\n\t\t\t\"lionel\": \"PROPN\",\n\t\t\t\"kinda\": \"ADV\",\n\t\t\t\"spoilage\": \"NOUN\",\n\t\t\t\"brett\": \"PROPN\",\n\t\t\t\"lexicon\": \"NOUN\",\n\t\t\t\"technologies\": \"NOUN\",\n\t\t\t\"absalom\": \"PROPN\",\n\t\t\t\"closing-down\": \"NOUN\",\n\t\t\t\"repeat\": \"VERB\",\n\t\t\t\"steamboats\": \"NOUN\",\n\t\t\t\"castillo\": \"PROPN\",\n\t\t\t\"charms\": \"NOUN\",\n\t\t\t\"genes\": \"NOUN\",\n\t\t\t\"barger\": \"PROPN\",\n\t\t\t\"blanco\": \"PROPN\",\n\t\t\t\"aggregate\": \"NOUN\",\n\t\t\t\"hunches\": \"VERB\",\n\t\t\t\"jakov\": \"PROPN\",\n\t\t\t\"accepted\": \"VERB\",\n\t\t\t\"productive\": \"ADJ\",\n\t\t\t\"gracious\": \"ADJ\",\n\t\t\t\"f-\": \"INTJ\",\n\t\t\t\"iowa\": \"PROPN\",\n\t\t\t\"succeed\": \"VERB\",\n\t\t\t\"10:56\": \"NUM\",\n\t\t\t\"satellite\": \"NOUN\",\n\t\t\t\"another\": \"DET\",\n\t\t\t\"drinking\": \"VERB\",\n\t\t\t\"hyatt\": \"PROPN\",\n\t\t\t\"jules\": \"PROPN\",\n\t\t\t\"millionth\": \"NOUN\",\n\t\t\t\"runners\": \"NOUN\",\n\t\t\t\"wheelchair\": \"NOUN\",\n\t\t\t\"think-\": \"VERB\",\n\t\t\t\"apathetic\": \"ADJ\",\n\t\t\t\"contacted\": \"VERB\",\n\t\t\t\"cracked\": \"VERB\",\n\t\t\t\"lot\": \"NOUN\",\n\t\t\t\"lowers\": \"VERB\",\n\t\t\t\"abbudi\": \"PROPN\",\n\t\t\t\"barometers\": \"NOUN\",\n\t\t\t\"heaven\": \"NOUN\",\n\t\t\t\"huston\": \"PROPN\",\n\t\t\t\"renewable\": \"ADJ\",\n\t\t\t\"http://travel.state.gov/travel/cis_pa_tw/cis/cis_1052.html\": \"PROPN\",\n\t\t\t\"fatalities\": \"NOUN\",\n\t\t\t\"weights\": \"NOUN\",\n\t\t\t\"ethicities\": \"NOUN\",\n\t\t\t\"litzmannstadt\": \"PROPN\",\n\t\t\t\"benefiting\": \"VERB\",\n\t\t\t\"interpret\": \"VERB\",\n\t\t\t\"straits\": \"PROPN\",\n\t\t\t\"treatment\": \"NOUN\",\n\t\t\t\"deliciousness\": \"NOUN\",\n\t\t\t\"wsi\": \"NOUN\",\n\t\t\t\"guiness\": \"PROPN\",\n\t\t\t\"designers\": \"NOUN\",\n\t\t\t\"least\": \"ADJ\",\n\t\t\t\"dupont\": \"PROPN\",\n\t\t\t\"sheds\": \"NOUN\",\n\t\t\t\"303-294-4499\": \"NUM\",\n\t\t\t\"prioritised\": \"VERB\",\n\t\t\t\"dialogue\": \"NOUN\",\n\t\t\t\"tryed\": \"VERB\",\n\t\t\t\"1733\": \"NUM\",\n\t\t\t\"nature\": \"NOUN\",\n\t\t\t\"immediately\": \"ADV\",\n\t\t\t\"mothy\": \"ADJ\",\n\t\t\t\"disseminate\": \"VERB\",\n\t\t\t\"pc\": \"PROPN\",\n\t\t\t\"fourteen\": \"NUM\",\n\t\t\t\"check\": \"VERB\",\n\t\t\t\"clean\": \"ADJ\",\n\t\t\t\"wmds\": \"NOUN\",\n\t\t\t\"mingled\": \"VERB\",\n\t\t\t\"sensors\": \"NOUN\",\n\t\t\t\"wizardry\": \"NOUN\",\n\t\t\t\"rose\": \"VERB\",\n\t\t\t\"guide\": \"NOUN\",\n\t\t\t\"chet\": \"PROPN\",\n\t\t\t\"blowing\": \"VERB\",\n\t\t\t\"clip\": \"NOUN\",\n\t\t\t\"handcuffed\": \"VERB\",\n\t\t\t\"barges\": \"NOUN\",\n\t\t\t\"stanislavsky\": \"PROPN\",\n\t\t\t\"curdle\": \"VERB\",\n\t\t\t\"thoughtful\": \"ADJ\",\n\t\t\t\"sharjah\": \"PROPN\",\n\t\t\t\"withdrew\": \"VERB\",\n\t\t\t\"899-4425\": \"NUM\",\n\t\t\t\"asansol\": \"PROPN\",\n\t\t\t\"comment\": \"NOUN\",\n\t\t\t\"cavaliers\": \"PROPN\",\n\t\t\t\"shortly\": \"ADV\",\n\t\t\t\"anglican\": \"ADJ\",\n\t\t\t\"nervous\": \"ADJ\",\n\t\t\t\"surprises\": \"NOUN\",\n\t\t\t\"privilege\": \"NOUN\",\n\t\t\t\"resell\": \"VERB\",\n\t\t\t\"600\": \"NUM\",\n\t\t\t\"03:31\": \"NUM\",\n\t\t\t\"celebrates\": \"VERB\",\n\t\t\t\"chewing\": \"VERB\",\n\t\t\t\"http://www.compaq.com/products/notebooks/index.html\": \"PROPN\",\n\t\t\t\"headley\": \"PROPN\",\n\t\t\t\"curate\": \"NOUN\",\n\t\t\t\"elaine\": \"PROPN\",\n\t\t\t\"lighthouse\": \"NOUN\",\n\t\t\t\"doll\": \"NOUN\",\n\t\t\t\"setting\": \"NOUN\",\n\t\t\t\"fallout\": \"NOUN\",\n\t\t\t\"thi$\": \"DET\",\n\t\t\t\"bering\": \"PROPN\",\n\t\t\t\"antichrist\": \"PROPN\",\n\t\t\t\"worldwide\": \"ADV\",\n\t\t\t\"ani\": \"PROPN\",\n\t\t\t\"neckhole\": \"NOUN\",\n\t\t\t\"figurehead\": \"NOUN\",\n\t\t\t\"blundered\": \"VERB\",\n\t\t\t\"tunnel\": \"NOUN\",\n\t\t\t\"plaza\": \"PROPN\",\n\t\t\t\"re-purposing\": \"NOUN\",\n\t\t\t\"dumbest\": \"ADJ\",\n\t\t\t\"hon\": \"NOUN\",\n\t\t\t\"gérald\": \"PROPN\",\n\t\t\t\"70th\": \"ADJ\",\n\t\t\t\"audiences\": \"NOUN\",\n\t\t\t\"alpine\": \"PROPN\",\n\t\t\t\"externals\": \"ADJ\",\n\t\t\t\"gardeners\": \"NOUN\",\n\t\t\t\"française\": \"PROPN\",\n\t\t\t\"grinder\": \"NOUN\",\n\t\t\t\"conceptualizing\": \"VERB\",\n\t\t\t\"admins\": \"NOUN\",\n\t\t\t\"dealing\": \"VERB\",\n\t\t\t\"150301\": \"NUM\",\n\t\t\t\"anti-semite\": \"NOUN\",\n\t\t\t\"athene\": \"PROPN\",\n\t\t\t\"worker\": \"NOUN\",\n\t\t\t\"unlawful\": \"ADJ\",\n\t\t\t\"proper\": \"ADJ\",\n\t\t\t\"chatillon\": \"PROPN\",\n\t\t\t\"iranian\": \"ADJ\",\n\t\t\t\"industrial\": \"ADJ\",\n\t\t\t\"connectionstring\": \"PROPN\",\n\t\t\t\"kelowna\": \"PROPN\",\n\t\t\t\"alex\": \"PROPN\",\n\t\t\t\"xu\": \"PROPN\",\n\t\t\t\"1533\": \"NUM\",\n\t\t\t\"rictus-like\": \"ADJ\",\n\t\t\t\"pemex\": \"PROPN\",\n\t\t\t\"iqr\": \"PROPN\",\n\t\t\t\"conscious\": \"ADJ\",\n\t\t\t\"utah\": \"PROPN\",\n\t\t\t\"06/01/2000\": \"NUM\",\n\t\t\t\"shopped\": \"VERB\",\n\t\t\t\"widen\": \"VERB\",\n\t\t\t\"commuting\": \"VERB\",\n\t\t\t\"adhear\": \"VERB\",\n\t\t\t\"mercy\": \"NOUN\",\n\t\t\t\"cranium\": \"NOUN\",\n\t\t\t\"chandrika\": \"PROPN\",\n\t\t\t\"latte\": \"NOUN\",\n\t\t\t\"talley\": \"PROPN\",\n\t\t\t\"transformative\": \"ADJ\",\n\t\t\t\"floors\": \"NOUN\",\n\t\t\t\"calculated\": \"VERB\",\n\t\t\t\"retrieve\": \"VERB\",\n\t\t\t\"puzzling\": \"ADJ\",\n\t\t\t\"evened\": \"VERB\",\n\t\t\t\"quixotic\": \"ADJ\",\n\t\t\t\"appealing\": \"ADJ\",\n\t\t\t\"loved\": \"VERB\",\n\t\t\t\"roomful\": \"NOUN\",\n\t\t\t\"goats\": \"NOUN\",\n\t\t\t\"prudent\": \"ADJ\",\n\t\t\t\"lopsided\": \"ADJ\",\n\t\t\t\"chilliness\": \"NOUN\",\n\t\t\t\"policymaking\": \"NOUN\",\n\t\t\t\"inversions\": \"NOUN\",\n\t\t\t\"anti-indian\": \"ADJ\",\n\t\t\t\"sunak\": \"PROPN\",\n\t\t\t\"regime\": \"NOUN\",\n\t\t\t\"therapy\": \"NOUN\",\n\t\t\t\"alta\": \"PROPN\",\n\t\t\t\"scarlet\": \"NOUN\",\n\t\t\t\"botero\": \"PROPN\",\n\t\t\t\"premadasa\": \"PROPN\",\n\t\t\t\"popularly\": \"ADV\",\n\t\t\t\"attest\": \"VERB\",\n\t\t\t\"jeans\": \"NOUN\",\n\t\t\t\"crypts\": \"NOUN\",\n\t\t\t\"humour\": \"NOUN\",\n\t\t\t\"1976\": \"NUM\",\n\t\t\t\"thinset\": \"NOUN\",\n\t\t\t\"non-fiction\": \"NOUN\",\n\t\t\t\"biases\": \"NOUN\",\n\t\t\t\"anasazi\": \"PROPN\",\n\t\t\t\"mowed\": \"VERB\",\n\t\t\t\"05/31/2001\": \"NUM\",\n\t\t\t\"roussos\": \"PROPN\",\n\t\t\t\"remerged\": \"VERB\",\n\t\t\t\"pains\": \"NOUN\",\n\t\t\t\"subtlety\": \"NOUN\",\n\t\t\t\"yellow-pale-yellow-yellow\": \"ADJ\",\n\t\t\t\"saem_aero\": \"PROPN\",\n\t\t\t\"creole\": \"NOUN\",\n\t\t\t\"secession\": \"NOUN\",\n\t\t\t\"kerosene\": \"NOUN\",\n\t\t\t\"ruined\": \"VERB\",\n\t\t\t\"deceleration\": \"NOUN\",\n\t\t\t\"beaten\": \"VERB\",\n\t\t\t\"rhodes\": \"PROPN\",\n\t\t\t\"formidable\": \"ADJ\",\n\t\t\t\"yawned\": \"VERB\",\n\t\t\t\"c-\": \"INTJ\",\n\t\t\t\"civilian\": \"ADJ\",\n\t\t\t\"watched\": \"VERB\",\n\t\t\t\"charmed\": \"VERB\",\n\t\t\t\"corp\": \"PROPN\",\n\t\t\t\"victrola\": \"PROPN\",\n\t\t\t\"representationalism\": \"NOUN\",\n\t\t\t\"declines\": \"NOUN\",\n\t\t\t\"pumped\": \"VERB\",\n\t\t\t\"firm\": \"NOUN\",\n\t\t\t\"fundamentalists\": \"NOUN\",\n\t\t\t\"glisten\": \"VERB\",\n\t\t\t\"barbour\": \"PROPN\",\n\t\t\t\"startlingly\": \"ADV\",\n\t\t\t\"windsheild\": \"NOUN\",\n\t\t\t\"gcp\": \"NOUN\",\n\t\t\t\"pian\": \"PROPN\",\n\t\t\t\"vhf\": \"NOUN\",\n\t\t\t\"unusually\": \"ADV\",\n\t\t\t\"buck\": \"NOUN\",\n\t\t\t\"symbiosis\": \"NOUN\",\n\t\t\t\"envelope\": \"NOUN\",\n\t\t\t\"turkistan\": \"NOUN\",\n\t\t\t\"headed\": \"VERB\",\n\t\t\t\"nightcase\": \"NOUN\",\n\t\t\t\"agel\": \"PROPN\",\n\t\t\t\"fewer\": \"ADJ\",\n\t\t\t\"informal\": \"ADJ\",\n\t\t\t\"indian\": \"ADJ\",\n\t\t\t\"steps\": \"NOUN\",\n\t\t\t\"invoices\": \"NOUN\",\n\t\t\t\"vpp\": \"NOUN\",\n\t\t\t\"_______\": \"PUNCT\",\n\t\t\t\"bourret\": \"PROPN\",\n\t\t\t\"whipple\": \"PROPN\",\n\t\t\t\"o'reilly\": \"PROPN\",\n\t\t\t\"infused\": \"VERB\",\n\t\t\t\"sovereignty\": \"NOUN\",\n\t\t\t\"empire\": \"PROPN\",\n\t\t\t\"demons\": \"NOUN\",\n\t\t\t\"stigma\": \"NOUN\",\n\t\t\t\"montalvo\": \"PROPN\",\n\t\t\t\"ballet\": \"NOUN\",\n\t\t\t\"brewery\": \"NOUN\",\n\t\t\t\"maureen\": \"PROPN\",\n\t\t\t\"barrier\": \"NOUN\",\n\t\t\t\"division\": \"NOUN\",\n\t\t\t\"uss\": \"PROPN\",\n\t\t\t\"plutocracy\": \"NOUN\",\n\t\t\t\"cleavage\": \"NOUN\",\n\t\t\t\"slap\": \"NOUN\",\n\t\t\t\"alleged\": \"VERB\",\n\t\t\t\"unfolds\": \"VERB\",\n\t\t\t\"conscience\": \"NOUN\",\n\t\t\t\"massage\": \"NOUN\",\n\t\t\t\"pond\": \"PROPN\",\n\t\t\t\"afp\": \"PROPN\",\n\t\t\t\"rivalry\": \"NOUN\",\n\t\t\t\"doorbell\": \"NOUN\",\n\t\t\t\"comprehend\": \"VERB\",\n\t\t\t\"barros\": \"PROPN\",\n\t\t\t\"criticism\": \"NOUN\",\n\t\t\t\"churchy\": \"ADJ\",\n\t\t\t\"bundled\": \"VERB\",\n\t\t\t\"embracing\": \"VERB\",\n\t\t\t\"communication\": \"NOUN\",\n\t\t\t\"feasts\": \"NOUN\",\n\t\t\t\"denial\": \"NOUN\",\n\t\t\t\"verified\": \"VERB\",\n\t\t\t\"slime\": \"NOUN\",\n\t\t\t\"complimented\": \"VERB\",\n\t\t\t\"sentence\": \"NOUN\",\n\t\t\t\"trident\": \"PROPN\",\n\t\t\t\"semi-sketchiness\": \"NOUN\",\n\t\t\t\"protest\": \"NOUN\",\n\t\t\t\"evan\": \"PROPN\",\n\t\t\t\"signaling\": \"VERB\",\n\t\t\t\"floor\": \"NOUN\",\n\t\t\t\"predecessors\": \"NOUN\",\n\t\t\t\"theologian\": \"NOUN\",\n\t\t\t\"crap\": \"NOUN\",\n\t\t\t\"rto\": \"PROPN\",\n\t\t\t\"enrononline\": \"PROPN\",\n\t\t\t\"inadvertently\": \"ADV\",\n\t\t\t\"flexibility\": \"NOUN\",\n\t\t\t\"84,121\": \"NUM\",\n\t\t\t\"hours\": \"NOUN\",\n\t\t\t\"reporters\": \"NOUN\",\n\t\t\t\"particles\": \"NOUN\",\n\t\t\t\"swollen\": \"ADJ\",\n\t\t\t\"fabrications\": \"NOUN\",\n\t\t\t\"barno\": \"PROPN\",\n\t\t\t\"osage\": \"PROPN\",\n\t\t\t\"castling\": \"NOUN\",\n\t\t\t\"izakaya\": \"NOUN\",\n\t\t\t\"decade\": \"NOUN\",\n\t\t\t\"localized\": \"VERB\",\n\t\t\t\"butcher\": \"PROPN\",\n\t\t\t\"proceedings\": \"NOUN\",\n\t\t\t\"weblogic\": \"PROPN\",\n\t\t\t\"attendant\": \"NOUN\",\n\t\t\t\"chiro\": \"NOUN\",\n\t\t\t\"milliliters\": \"NOUN\",\n\t\t\t\"mountaintop\": \"NOUN\",\n\t\t\t\"jpl\": \"PROPN\",\n\t\t\t\"maria\": \"PROPN\",\n\t\t\t\"haircut\": \"NOUN\",\n\t\t\t\"edges\": \"NOUN\",\n\t\t\t\"romance\": \"NOUN\",\n\t\t\t\"mcmahon\": \"PROPN\",\n\t\t\t\"mailed\": \"VERB\",\n\t\t\t\"plat\": \"NOUN\",\n\t\t\t\"whack\": \"VERB\",\n\t\t\t\"ceron\": \"PROPN\",\n\t\t\t\"ana\": \"PROPN\",\n\t\t\t\"capitalize\": \"VERB\",\n\t\t\t\"llc\": \"PROPN\",\n\t\t\t\"77042-2016\": \"NUM\",\n\t\t\t\"tb\": \"PROPN\",\n\t\t\t\"distant\": \"ADJ\",\n\t\t\t\"bowtie\": \"PROPN\",\n\t\t\t\";p\": \"SYM\",\n\t\t\t\"raffles\": \"NOUN\",\n\t\t\t\"inevitable\": \"ADJ\",\n\t\t\t\"t...@sonic.net\": \"PROPN\",\n\t\t\t\"mythical\": \"ADJ\",\n\t\t\t\"wolstein\": \"PROPN\",\n\t\t\t\"cra\": \"PROPN\",\n\t\t\t\"flips\": \"NOUN\",\n\t\t\t\"libido\": \"NOUN\",\n\t\t\t\"justifying\": \"VERB\",\n\t\t\t\"ritual\": \"NOUN\",\n\t\t\t\"sign\": \"NOUN\",\n\t\t\t\"first\": \"ADJ\",\n\t\t\t\"godsend\": \"NOUN\",\n\t\t\t\"milkshakes\": \"NOUN\",\n\t\t\t\"locomotory\": \"ADJ\",\n\t\t\t\"paniotis\": \"PROPN\",\n\t\t\t\"obeyed\": \"VERB\",\n\t\t\t\"conditioning\": \"NOUN\",\n\t\t\t\"avert\": \"VERB\",\n\t\t\t\"retired\": \"VERB\",\n\t\t\t\"warranted\": \"VERB\",\n\t\t\t\"raft\": \"NOUN\",\n\t\t\t\"de\": \"PROPN\",\n\t\t\t\"fruit-cake\": \"NOUN\",\n\t\t\t\"says\": \"VERB\",\n\t\t\t\"stu\": \"PROPN\",\n\t\t\t\"coreligionists\": \"NOUN\",\n\t\t\t\"wreathed\": \"VERB\",\n\t\t\t\"johnson\": \"PROPN\",\n\t\t\t\"amaze\": \"VERB\",\n\t\t\t\"malone\": \"PROPN\",\n\t\t\t\"stations\": \"NOUN\",\n\t\t\t\"215,000\": \"NUM\",\n\t\t\t\"ambush\": \"NOUN\",\n\t\t\t\"awkwardness\": \"NOUN\",\n\t\t\t\"barre\": \"NOUN\",\n\t\t\t\"smsll\": \"ADJ\",\n\t\t\t\"lou\": \"PROPN\",\n\t\t\t\"goldmann\": \"PROPN\",\n\t\t\t\"10:44\": \"NUM\",\n\t\t\t\"world\": \"NOUN\",\n\t\t\t\"confiscation\": \"NOUN\",\n\t\t\t\"ultraefficient\": \"ADJ\",\n\t\t\t\"descended\": \"VERB\",\n\t\t\t\"concerns\": \"NOUN\",\n\t\t\t\"gender\": \"NOUN\",\n\t\t\t\"coordinating\": \"VERB\",\n\t\t\t\"authentic\": \"ADJ\",\n\t\t\t\"rowdy\": \"ADJ\",\n\t\t\t\"coast\": \"NOUN\",\n\t\t\t\"dove\": \"NOUN\",\n\t\t\t\"constructs\": \"NOUN\",\n\t\t\t\"openings\": \"NOUN\",\n\t\t\t\"internally\": \"ADV\",\n\t\t\t\"vigie\": \"PROPN\",\n\t\t\t\"kb\": \"NOUN\",\n\t\t\t\"accounting\": \"NOUN\",\n\t\t\t\"passages\": \"NOUN\",\n\t\t\t\"misha\": \"PROPN\",\n\t\t\t\"parole\": \"NOUN\",\n\t\t\t\"03:48\": \"NUM\",\n\t\t\t\"appropriated\": \"VERB\",\n\t\t\t\"dasovich\": \"PROPN\",\n\t\t\t\"napkins\": \"NOUN\",\n\t\t\t\"licks\": \"VERB\",\n\t\t\t\"spotlight\": \"NOUN\",\n\t\t\t\"eastgardens\": \"PROPN\",\n\t\t\t\"sheep\": \"NOUN\",\n\t\t\t\"senatorial\": \"ADJ\",\n\t\t\t\"geopolitics\": \"NOUN\",\n\t\t\t\"originate\": \"VERB\",\n\t\t\t\"canopy\": \"NOUN\",\n\t\t\t\"gordon\": \"PROPN\",\n\t\t\t\"mein\": \"NOUN\",\n\t\t\t\"approximates\": \"VERB\",\n\t\t\t\"revocation\": \"NOUN\",\n\t\t\t\"unfrightened\": \"VERB\",\n\t\t\t\"713-793-2000\": \"NUM\",\n\t\t\t\"06:05\": \"NUM\",\n\t\t\t\"seperate\": \"ADJ\",\n\t\t\t\"puzzled\": \"VERB\",\n\t\t\t\"rockjumbled\": \"ADJ\",\n\t\t\t\"second-hand\": \"ADJ\",\n\t\t\t\"whistle\": \"VERB\",\n\t\t\t\"universidade\": \"PROPN\",\n\t\t\t\"guessed\": \"VERB\",\n\t\t\t\"wakrah\": \"PROPN\",\n\t\t\t\"bemused\": \"ADJ\",\n\t\t\t\"cloaca\": \"NOUN\",\n\t\t\t\"navigate\": \"VERB\",\n\t\t\t\"ringleader\": \"NOUN\",\n\t\t\t\"hermione\": \"PROPN\",\n\t\t\t\"mass\": \"NOUN\",\n\t\t\t\"forbade\": \"VERB\",\n\t\t\t\"melts\": \"VERB\",\n\t\t\t\"wept\": \"VERB\",\n\t\t\t\"hearings\": \"NOUN\",\n\t\t\t\"subsequently\": \"ADV\",\n\t\t\t\"persists\": \"VERB\",\n\t\t\t\"overstatements\": \"NOUN\",\n\t\t\t\"beeline\": \"PROPN\",\n\t\t\t\"nd\": \"PROPN\",\n\t\t\t\"suilen\": \"PROPN\",\n\t\t\t\"warps\": \"VERB\",\n\t\t\t\"trickle\": \"NOUN\",\n\t\t\t\"3889\": \"NUM\",\n\t\t\t\"http://www.mikegigi.com/castgobl.htm\": \"PROPN\",\n\t\t\t\"seriograph\": \"NOUN\",\n\t\t\t\"madhlum\": \"PROPN\",\n\t\t\t\"cannon\": \"PROPN\",\n\t\t\t\"undertakes\": \"VERB\",\n\t\t\t\"hasid\": \"NOUN\",\n\t\t\t\"fair\": \"ADJ\",\n\t\t\t\"toowoomba\": \"PROPN\",\n\t\t\t\"forsyth\": \"PROPN\",\n\t\t\t\"ads\": \"NOUN\",\n\t\t\t\",,\": \"PUNCT\",\n\t\t\t\"nonexistent\": \"ADJ\",\n\t\t\t\"awkward\": \"ADJ\",\n\t\t\t\"drank\": \"VERB\",\n\t\t\t\"t&d\": \"NOUN\",\n\t\t\t\"barcoding\": \"NOUN\",\n\t\t\t\"neuter\": \"NOUN\",\n\t\t\t\"elevator\": \"NOUN\",\n\t\t\t\"goggle\": \"VERB\",\n\t\t\t\"totes\": \"NOUN\",\n\t\t\t\"haddo\": \"PROPN\",\n\t\t\t\"ho\": \"PROPN\",\n\t\t\t\"bridget\": \"PROPN\",\n\t\t\t\"untrue\": \"ADJ\",\n\t\t\t\"headquarters\": \"NOUN\",\n\t\t\t\"sera\": \"PROPN\",\n\t\t\t\"echoing\": \"VERB\",\n\t\t\t\"literary\": \"ADJ\",\n\t\t\t\"1551\": \"NUM\",\n\t\t\t\"30,858\": \"NUM\",\n\t\t\t\"advertise\": \"VERB\",\n\t\t\t\"previous\": \"ADJ\",\n\t\t\t\"abolishing\": \"VERB\",\n\t\t\t\"sanctions\": \"NOUN\",\n\t\t\t\"theirs\": \"PRON\",\n\t\t\t\"taxi-driver\": \"NOUN\",\n\t\t\t\"beseech\": \"VERB\",\n\t\t\t\"bandwidth\": \"NOUN\",\n\t\t\t\"conditions\": \"NOUN\",\n\t\t\t\"hatred\": \"NOUN\",\n\t\t\t\"commonplace\": \"ADJ\",\n\t\t\t\"metres\": \"NOUN\",\n\t\t\t\"favour\": \"NOUN\",\n\t\t\t\"med\": \"NOUN\",\n\t\t\t\"dashed\": \"VERB\",\n\t\t\t\"bruce\": \"PROPN\",\n\t\t\t\"shrines\": \"NOUN\",\n\t\t\t\"merge\": \"VERB\",\n\t\t\t\"delinquent\": \"ADJ\",\n\t\t\t\"hughes\": \"PROPN\",\n\t\t\t\"lightly\": \"ADV\",\n\t\t\t\"plan\": \"NOUN\",\n\t\t\t\"dust\": \"NOUN\",\n\t\t\t\"gregory\": \"PROPN\",\n\t\t\t\"operated\": \"VERB\",\n\t\t\t\"train-tracks\": \"NOUN\",\n\t\t\t\"metis\": \"PROPN\",\n\t\t\t\"earning\": \"VERB\",\n\t\t\t\"relatives\": \"NOUN\",\n\t\t\t\"invitees\": \"NOUN\",\n\t\t\t\"unspecified\": \"ADJ\",\n\t\t\t\"eleanor\": \"PROPN\",\n\t\t\t\"opec\": \"PROPN\",\n\t\t\t\"sell-out\": \"NOUN\",\n\t\t\t\"reminds\": \"VERB\",\n\t\t\t\"mirandela\": \"PROPN\",\n\t\t\t\"twins\": \"NOUN\",\n\t\t\t\"multimillions\": \"NOUN\",\n\t\t\t\"luggage\": \"NOUN\",\n\t\t\t\"resumes\": \"NOUN\",\n\t\t\t\"ppi\": \"NOUN\",\n\t\t\t\"sincere\": \"ADJ\",\n\t\t\t\"abstaining\": \"VERB\",\n\t\t\t\"fisherman\": \"NOUN\",\n\t\t\t\"beatle\": \"PROPN\",\n\t\t\t\"fries\": \"NOUN\",\n\t\t\t\"yummy\": \"ADJ\",\n\t\t\t\"gino\": \"PROPN\",\n\t\t\t\"geometries\": \"NOUN\",\n\t\t\t\"dhin\": \"INTJ\",\n\t\t\t\"humanities\": \"NOUN\",\n\t\t\t\"ecumenical\": \"ADJ\",\n\t\t\t\"counter-strike\": \"PROPN\",\n\t\t\t\"kethlan\": \"PROPN\",\n\t\t\t\"donatus\": \"PROPN\",\n\t\t\t\"insurers\": \"NOUN\",\n\t\t\t\"geographical\": \"ADJ\",\n\t\t\t\"realm\": \"NOUN\",\n\t\t\t\"denny\": \"PROPN\",\n\t\t\t\"sri\": \"PROPN\",\n\t\t\t\"lftd\": \"PROPN\",\n\t\t\t\"containers\": \"NOUN\",\n\t\t\t\"selectiveness\": \"NOUN\",\n\t\t\t\"fiji\": \"NOUN\",\n\t\t\t\"asexually\": \"ADV\",\n\t\t\t\"www.veraakulov.com\": \"PROPN\",\n\t\t\t\"observer\": \"NOUN\",\n\t\t\t\"academics\": \"NOUN\",\n\t\t\t\"mason\": \"PROPN\",\n\t\t\t\"unto\": \"ADP\",\n\t\t\t\"summer\": \"NOUN\",\n\t\t\t\"...........\": \"PUNCT\",\n\t\t\t\"reefs\": \"NOUN\",\n\t\t\t\"bounces\": \"VERB\",\n\t\t\t\"treacherous\": \"ADJ\",\n\t\t\t\"influential\": \"ADJ\",\n\t\t\t\"datasheet\": \"NOUN\",\n\t\t\t\"bexar\": \"PROPN\",\n\t\t\t\"celebrate\": \"VERB\",\n\t\t\t\"southwestern\": \"ADJ\",\n\t\t\t\"11-20-2000\": \"NUM\",\n\t\t\t\"uno\": \"NOUN\",\n\t\t\t\"masts\": \"NOUN\",\n\t\t\t\"hoa\": \"PROPN\",\n\t\t\t\"optical\": \"ADJ\",\n\t\t\t\"08:27:46\": \"NUM\",\n\t\t\t\"asi\": \"PROPN\",\n\t\t\t\"viciously\": \"ADV\",\n\t\t\t\"deputies\": \"NOUN\",\n\t\t\t\"wield\": \"VERB\",\n\t\t\t\"unequipped\": \"ADJ\",\n\t\t\t\"frightened\": \"VERB\",\n\t\t\t\"contributing\": \"VERB\",\n\t\t\t\"emitted\": \"VERB\",\n\t\t\t\"parties\": \"NOUN\",\n\t\t\t\"hormel\": \"PROPN\",\n\t\t\t\"------------------------------------------------------\": \"PUNCT\",\n\t\t\t\"distribution\": \"NOUN\",\n\t\t\t\"longer\": \"ADV\",\n\t\t\t\"employ\": \"VERB\",\n\t\t\t\"1959\": \"NUM\",\n\t\t\t\"campaign\": \"NOUN\",\n\t\t\t\"http://tong.visitkorea.or.kr/cms/resource/81/188181_image2_1.jpg\": \"PROPN\",\n\t\t\t\"inoperable\": \"ADJ\",\n\t\t\t\"yelp\": \"PROPN\",\n\t\t\t\"hindering\": \"VERB\",\n\t\t\t\"discrimination\": \"NOUN\",\n\t\t\t\"consecutive\": \"ADJ\",\n\t\t\t\"infections\": \"NOUN\",\n\t\t\t\"festivities\": \"NOUN\",\n\t\t\t\"recordings\": \"NOUN\",\n\t\t\t\"bursting\": \"ADJ\",\n\t\t\t\"paperweight\": \"NOUN\",\n\t\t\t\"prep\": \"NOUN\",\n\t\t\t\"vladimir\": \"PROPN\",\n\t\t\t\"eg.\": \"ADV\",\n\t\t\t\"beutel\": \"PROPN\",\n\t\t\t\"beta\": \"NOUN\",\n\t\t\t\"ethnicity\": \"NOUN\",\n\t\t\t\"teheran\": \"PROPN\",\n\t\t\t\"grill\": \"NOUN\",\n\t\t\t\"belongs\": \"VERB\",\n\t\t\t\"waterproof\": \"ADJ\",\n\t\t\t\"mergers\": \"NOUN\",\n\t\t\t\"twos\": \"NOUN\",\n\t\t\t\"maori\": \"ADJ\",\n\t\t\t\"backside\": \"NOUN\",\n\t\t\t\"embodies\": \"VERB\",\n\t\t\t\"haut\": \"PROPN\",\n\t\t\t\"minds\": \"NOUN\",\n\t\t\t\"http://www.mikegigi.com/castgobl.htm#lggobproj\": \"PROPN\",\n\t\t\t\"paler\": \"ADJ\",\n\t\t\t\"revell\": \"PROPN\",\n\t\t\t\"metrical\": \"ADJ\",\n\t\t\t\"pat\": \"PROPN\",\n\t\t\t\"scled\": \"NOUN\",\n\t\t\t\"gary\": \"PROPN\",\n\t\t\t\"unnatural\": \"ADJ\",\n\t\t\t\"brief\": \"ADJ\",\n\t\t\t\"varieties\": \"NOUN\",\n\t\t\t\"fluently\": \"ADV\",\n\t\t\t\"re-run\": \"NOUN\",\n\t\t\t\"5.1\": \"NUM\",\n\t\t\t\"chaos\": \"NOUN\",\n\t\t\t\"pre-rinsed\": \"ADJ\",\n\t\t\t\"girdle\": \"NOUN\",\n\t\t\t\"fdr\": \"PROPN\",\n\t\t\t\"a.m.beresford@durham.ac.uk\": \"PROPN\",\n\t\t\t\"date\": \"NOUN\",\n\t\t\t\"emailed\": \"VERB\",\n\t\t\t\"tears\": \"NOUN\",\n\t\t\t\"inquiries\": \"NOUN\",\n\t\t\t\"picnickers\": \"NOUN\",\n\t\t\t\"12th\": \"NOUN\",\n\t\t\t\"experienced\": \"VERB\",\n\t\t\t\"mermaids\": \"NOUN\",\n\t\t\t\"mellow\": \"ADJ\",\n\t\t\t\"diachronic\": \"ADJ\",\n\t\t\t\"killers\": \"NOUN\",\n\t\t\t\"thwart\": \"VERB\",\n\t\t\t\"bryant\": \"PROPN\",\n\t\t\t\"publishers\": \"NOUN\",\n\t\t\t\"kuwaiti\": \"ADJ\",\n\t\t\t\"observing\": \"VERB\",\n\t\t\t\"enable\": \"VERB\",\n\t\t\t\"untidy\": \"ADJ\",\n\t\t\t\"hover\": \"VERB\",\n\t\t\t\"interestingness\": \"NOUN\",\n\t\t\t\"eviction\": \"NOUN\",\n\t\t\t\"rem\": \"PROPN\",\n\t\t\t\"india\": \"PROPN\",\n\t\t\t\"mend\": \"VERB\",\n\t\t\t\"ut\": \"PROPN\",\n\t\t\t\"713-546-5000\": \"NUM\",\n\t\t\t\"megapixel\": \"NOUN\",\n\t\t\t\"efforts\": \"NOUN\",\n\t\t\t\"distress\": \"NOUN\",\n\t\t\t\"80th\": \"ADJ\",\n\t\t\t\"exiled\": \"VERB\",\n\t\t\t\"these\": \"DET\",\n\t\t\t\"pioneering\": \"VERB\",\n\t\t\t\"filner\": \"PROPN\",\n\t\t\t\"define\": \"VERB\",\n\t\t\t\"rer\": \"PROPN\",\n\t\t\t\"ruy\": \"PROPN\",\n\t\t\t\"hosanna\": \"PROPN\",\n\t\t\t\"delvery\": \"NOUN\",\n\t\t\t\"dollars\": \"NOUN\",\n\t\t\t\"tremendous\": \"ADJ\",\n\t\t\t\"illuminating\": \"VERB\",\n\t\t\t\"shipped\": \"VERB\",\n\t\t\t\"pasted\": \"VERB\",\n\t\t\t\"earth\": \"NOUN\",\n\t\t\t\"http://www.sploid.com/news/2006/05/evil_priest_gui.php\": \"PROPN\",\n\t\t\t\"extensive\": \"ADJ\",\n\t\t\t\"communications\": \"NOUN\",\n\t\t\t\"washer\": \"NOUN\",\n\t\t\t\"pleasure\": \"NOUN\",\n\t\t\t\"kinetic\": \"ADJ\",\n\t\t\t\"glad\": \"ADJ\",\n\t\t\t\"weaknesses\": \"NOUN\",\n\t\t\t\"44\": \"NUM\",\n\t\t\t\"symptomatic\": \"ADJ\",\n\t\t\t\"s.hernandez@udc.es\": \"PROPN\",\n\t\t\t\"ichor\": \"NOUN\",\n\t\t\t\"discoverer\": \"NOUN\",\n\t\t\t\"muslims\": \"PROPN\",\n\t\t\t\"youngspiration\": \"PROPN\",\n\t\t\t\"fairway\": \"PROPN\",\n\t\t\t\"shell\": \"PROPN\",\n\t\t\t\"post-modern\": \"ADJ\",\n\t\t\t\"promptly\": \"ADV\",\n\t\t\t\"969\": \"NUM\",\n\t\t\t\"2003\": \"NUM\",\n\t\t\t\"visualizations\": \"NOUN\",\n\t\t\t\"courtney\": \"PROPN\",\n\t\t\t\"appropriately\": \"ADV\",\n\t\t\t\"developing\": \"VERB\",\n\t\t\t\"deals\": \"NOUN\",\n\t\t\t\"pitfalls\": \"NOUN\",\n\t\t\t\"text\": \"NOUN\",\n\t\t\t\"earthquake\": \"NOUN\",\n\t\t\t\"goers\": \"NOUN\",\n\t\t\t\"intel\": \"PROPN\",\n\t\t\t\"boys\": \"NOUN\",\n\t\t\t\"beneficiary\": \"NOUN\",\n\t\t\t\"mystics\": \"PROPN\",\n\t\t\t\"immigeration\": \"NOUN\",\n\t\t\t\"blah\": \"INTJ\",\n\t\t\t\"organic\": \"ADJ\",\n\t\t\t\"hegelian\": \"ADJ\",\n\t\t\t\"preview\": \"VERB\",\n\t\t\t\"ummmm\": \"INTJ\",\n\t\t\t\"posterity\": \"NOUN\",\n\t\t\t\"tatty\": \"ADJ\",\n\t\t\t\"post-saddam\": \"ADJ\",\n\t\t\t\"'60s\": \"NOUN\",\n\t\t\t\"relates\": \"VERB\",\n\t\t\t\"479,000\": \"NUM\",\n\t\t\t\"export\": \"VERB\",\n\t\t\t\"-----\": \"PUNCT\",\n\t\t\t\"merchanting\": \"PROPN\",\n\t\t\t\"garage\": \"NOUN\",\n\t\t\t\"hannon\": \"PROPN\",\n\t\t\t\"nine\": \"NUM\",\n\t\t\t\"statement\": \"NOUN\",\n\t\t\t\"results\": \"NOUN\",\n\t\t\t\"smith\": \"PROPN\",\n\t\t\t\"privileges\": \"NOUN\",\n\t\t\t\"philosophies\": \"NOUN\",\n\t\t\t\"dialogical\": \"ADJ\",\n\t\t\t\"gps\": \"NOUN\",\n\t\t\t\"securely\": \"ADV\",\n\t\t\t\"undesirable\": \"ADJ\",\n\t\t\t\"maati\": \"PROPN\",\n\t\t\t\"moderate\": \"ADJ\",\n\t\t\t\"sardica\": \"PROPN\",\n\t\t\t\"mussels\": \"NOUN\",\n\t\t\t\"gebo\": \"PROPN\",\n\t\t\t\"messing\": \"VERB\",\n\t\t\t\"fl\": \"ADJ\",\n\t\t\t\"salutatory\": \"ADJ\",\n\t\t\t\"softened\": \"ADJ\",\n\t\t\t\"formation\": \"NOUN\",\n\t\t\t\"84\": \"NUM\",\n\t\t\t\"cereal\": \"NOUN\",\n\t\t\t\"superiors\": \"NOUN\",\n\t\t\t\"reiterate\": \"VERB\",\n\t\t\t\"neuroimaging\": \"NOUN\",\n\t\t\t\"inherently\": \"ADV\",\n\t\t\t\"ungainly\": \"ADJ\",\n\t\t\t\"chewed\": \"VERB\",\n\t\t\t\"lisa\": \"PROPN\",\n\t\t\t\"granqvist\": \"PROPN\",\n\t\t\t\"goes\": \"VERB\",\n\t\t\t\"crazed\": \"VERB\",\n\t\t\t\"atta\": \"PROPN\",\n\t\t\t\"dawn\": \"NOUN\",\n\t\t\t\"dripping\": \"VERB\",\n\t\t\t\"colonization\": \"NOUN\",\n\t\t\t\"92\": \"NUM\",\n\t\t\t\"accomplishes\": \"VERB\",\n\t\t\t\"strippers\": \"NOUN\",\n\t\t\t\"sought\": \"VERB\",\n\t\t\t\"arguably\": \"ADV\",\n\t\t\t\"bieber\": \"PROPN\",\n\t\t\t\"disdain\": \"NOUN\",\n\t\t\t\"propped\": \"VERB\",\n\t\t\t\"groped\": \"VERB\",\n\t\t\t\"breeder\": \"NOUN\",\n\t\t\t\"1704\": \"NUM\",\n\t\t\t\"publicity\": \"NOUN\",\n\t\t\t\"demonstrates\": \"VERB\",\n\t\t\t\"lions\": \"NOUN\",\n\t\t\t\"non-prototypical\": \"ADJ\",\n\t\t\t\"buttressed\": \"VERB\",\n\t\t\t\"kurds\": \"PROPN\",\n\t\t\t\"chat\": \"VERB\",\n\t\t\t\"nottingham\": \"PROPN\",\n\t\t\t\"gtc's\": \"NOUN\",\n\t\t\t\"neon\": \"NOUN\",\n\t\t\t\"rent\": \"NOUN\",\n\t\t\t\"zeus\": \"PROPN\",\n\t\t\t\"proposal.xls\": \"NOUN\",\n\t\t\t\"shrine\": \"NOUN\",\n\t\t\t\"successively\": \"ADV\",\n\t\t\t\"brain\": \"NOUN\",\n\t\t\t\"transact\": \"VERB\",\n\t\t\t\"enovate\": \"NOUN\",\n\t\t\t\"morbidly\": \"ADV\",\n\t\t\t\"measures\": \"NOUN\",\n\t\t\t\"neo-colonialism\": \"NOUN\",\n\t\t\t\"gumball\": \"NOUN\",\n\t\t\t\"wait\": \"VERB\",\n\t\t\t\"craving\": \"NOUN\",\n\t\t\t\"doubled\": \"VERB\",\n\t\t\t\"github\": \"PROPN\",\n\t\t\t\"becca\": \"PROPN\",\n\t\t\t\"187\": \"NUM\",\n\t\t\t\"afghans\": \"PROPN\",\n\t\t\t\"disgustingly\": \"ADV\",\n\t\t\t\"201\": \"NUM\",\n\t\t\t\"included\": \"VERB\",\n\t\t\t\"creativity\": \"NOUN\",\n\t\t\t\"uneasy\": \"ADJ\",\n\t\t\t\"windermere\": \"PROPN\",\n\t\t\t\"9.3\": \"NUM\",\n\t\t\t\"reconciled\": \"VERB\",\n\t\t\t\"drving\": \"VERB\",\n\t\t\t\".227\": \"NUM\",\n\t\t\t\"treasurer\": \"NOUN\",\n\t\t\t\"internet\": \"PROPN\",\n\t\t\t\"granddaughters\": \"NOUN\",\n\t\t\t\"kids\": \"NOUN\",\n\t\t\t\"swamp\": \"NOUN\",\n\t\t\t\"fenway\": \"PROPN\",\n\t\t\t\"yogurt\": \"NOUN\",\n\t\t\t\"riders\": \"NOUN\",\n\t\t\t\"1527\": \"NUM\",\n\t\t\t\"manmohan\": \"PROPN\",\n\t\t\t\"vegetable\": \"NOUN\",\n\t\t\t\"destiny\": \"NOUN\",\n\t\t\t\"rabbi\": \"NOUN\",\n\t\t\t\"bronzy\": \"ADJ\",\n\t\t\t\"compound\": \"ADJ\",\n\t\t\t\"constitutionally\": \"ADV\",\n\t\t\t\"baseman\": \"NOUN\",\n\t\t\t\"01/24/2001\": \"NUM\",\n\t\t\t\"crucify\": \"VERB\",\n\t\t\t\"dwelling\": \"NOUN\",\n\t\t\t\"extensions\": \"NOUN\",\n\t\t\t\"felipe\": \"PROPN\",\n\t\t\t\"piled\": \"VERB\",\n\t\t\t\"musician\": \"NOUN\",\n\t\t\t\"restrict\": \"VERB\",\n\t\t\t\"declares\": \"VERB\",\n\t\t\t\"tougher\": \"ADJ\",\n\t\t\t\"crocheting\": \"VERB\",\n\t\t\t\"plum\": \"NOUN\",\n\t\t\t\"21.0\": \"NUM\",\n\t\t\t\"boi\": \"PROPN\",\n\t\t\t\"weathermen\": \"PROPN\",\n\t\t\t\"peru\": \"PROPN\",\n\t\t\t\"elements\": \"NOUN\",\n\t\t\t\"reform\": \"NOUN\",\n\t\t\t\"aesthetics\": \"NOUN\",\n\t\t\t\"pottery\": \"NOUN\",\n\t\t\t\"hutch\": \"NOUN\",\n\t\t\t\"furs\": \"NOUN\",\n\t\t\t\"mccombs\": \"PROPN\",\n\t\t\t\"pekin\": \"NOUN\",\n\t\t\t\"crumples\": \"VERB\",\n\t\t\t\"ballistic\": \"ADJ\",\n\t\t\t\"file-persistent\": \"ADJ\",\n\t\t\t\"owen\": \"PROPN\",\n\t\t\t\"crime\": \"NOUN\",\n\t\t\t\"blackline\": \"VERB\",\n\t\t\t\"incentives\": \"NOUN\",\n\t\t\t\"braining\": \"VERB\",\n\t\t\t\"concern\": \"NOUN\",\n\t\t\t\"hesitantly\": \"ADV\",\n\t\t\t\"spatial\": \"ADJ\",\n\t\t\t\"gelato\": \"NOUN\",\n\t\t\t\"fanaticism\": \"NOUN\",\n\t\t\t\"control\": \"NOUN\",\n\t\t\t\"rabbit\": \"NOUN\",\n\t\t\t\"nonsense\": \"NOUN\",\n\t\t\t\"incompletely\": \"ADV\",\n\t\t\t\"socio-political\": \"ADJ\",\n\t\t\t\"alito\": \"PROPN\",\n\t\t\t\"considerations\": \"NOUN\",\n\t\t\t\"spinner\": \"PROPN\",\n\t\t\t\"territorial\": \"ADJ\",\n\t\t\t\"investigating\": \"VERB\",\n\t\t\t\"maryam\": \"PROPN\",\n\t\t\t\"recognition\": \"NOUN\",\n\t\t\t\"recomend\": \"VERB\",\n\t\t\t\"sub-cultures\": \"NOUN\",\n\t\t\t\"translators\": \"PROPN\",\n\t\t\t\"nsu\": \"PROPN\",\n\t\t\t\"mins.\": \"NOUN\",\n\t\t\t\"barber\": \"NOUN\",\n\t\t\t\"executing\": \"VERB\",\n\t\t\t\"pederasty\": \"NOUN\",\n\t\t\t\"crocodile\": \"NOUN\",\n\t\t\t\"competitiveness\": \"NOUN\",\n\t\t\t\"comers\": \"NOUN\",\n\t\t\t\"maitra\": \"PROPN\",\n\t\t\t\"inject\": \"VERB\",\n\t\t\t\"rishi\": \"PROPN\",\n\t\t\t\"04:34\": \"NUM\",\n\t\t\t\"347\": \"NUM\",\n\t\t\t\"newport\": \"PROPN\",\n\t\t\t\"starter\": \"NOUN\",\n\t\t\t\"260\": \"NUM\",\n\t\t\t\"heisenberg\": \"PROPN\",\n\t\t\t\"ownership\": \"NOUN\",\n\t\t\t\"directed\": \"VERB\",\n\t\t\t\"alot\": \"ADV\",\n\t\t\t\"plac\": \"PROPN\",\n\t\t\t\"wrap\": \"VERB\",\n\t\t\t\"phat\": \"ADJ\",\n\t\t\t\"budweiser\": \"PROPN\",\n\t\t\t\"reclaimed\": \"VERB\",\n\t\t\t\"moore\": \"PROPN\",\n\t\t\t\"nelson\": \"PROPN\",\n\t\t\t\"apollo\": \"PROPN\",\n\t\t\t\"steamed\": \"VERB\",\n\t\t\t\"researchgate\": \"PROPN\",\n\t\t\t\"5107\": \"NUM\",\n\t\t\t\"manual\": \"NOUN\",\n\t\t\t\"20,000\": \"NUM\",\n\t\t\t\"donaldson\": \"PROPN\",\n\t\t\t\"spanish\": \"ADJ\",\n\t\t\t\"teddie\": \"PROPN\",\n\t\t\t\"inequity\": \"NOUN\",\n\t\t\t\"exploration\": \"NOUN\",\n\t\t\t\"goddesses\": \"NOUN\",\n\t\t\t\"feathering\": \"NOUN\",\n\t\t\t\"dissolve\": \"VERB\",\n\t\t\t\"***********************************\": \"PUNCT\",\n\t\t\t\"exceptional\": \"ADJ\",\n\t\t\t\"attempting\": \"VERB\",\n\t\t\t\"notional\": \"ADJ\",\n\t\t\t\"nba\": \"PROPN\",\n\t\t\t\"frowning\": \"VERB\",\n\t\t\t\"achievement\": \"NOUN\",\n\t\t\t\"inverted\": \"VERB\",\n\t\t\t\"demotion\": \"NOUN\",\n\t\t\t\"eight-inch\": \"ADJ\",\n\t\t\t\"sardines\": \"NOUN\",\n\t\t\t\"acceptance\": \"NOUN\",\n\t\t\t\"loc\": \"NOUN\",\n\t\t\t\"smallest\": \"ADJ\",\n\t\t\t\"10:52\": \"NUM\",\n\t\t\t\"chemistries\": \"NOUN\",\n\t\t\t\"dimensional\": \"ADJ\",\n\t\t\t\"throats\": \"NOUN\",\n\t\t\t\"baie\": \"PROPN\",\n\t\t\t\"expressed\": \"VERB\",\n\t\t\t\"mislabeled\": \"VERB\",\n\t\t\t\"cater\": \"NOUN\",\n\t\t\t\"linguist\": \"NOUN\",\n\t\t\t\"escalator\": \"NOUN\",\n\t\t\t\"18:20\": \"NUM\",\n\t\t\t\"specification\": \"NOUN\",\n\t\t\t\"prodigious\": \"ADJ\",\n\t\t\t\"initiate\": \"VERB\",\n\t\t\t\"existing\": \"VERB\",\n\t\t\t\"xray\": \"NOUN\",\n\t\t\t\"t\": \"NOUN\",\n\t\t\t\"eastward\": \"ADV\",\n\t\t\t\"bangladeshi\": \"ADJ\",\n\t\t\t\"moussaoui\": \"PROPN\",\n\t\t\t\"surpassed\": \"VERB\",\n\t\t\t\"boat\": \"NOUN\",\n\t\t\t\"goggled\": \"VERB\",\n\t\t\t\"<-\": \"SYM\",\n\t\t\t\"strong\": \"ADJ\",\n\t\t\t\"branches\": \"NOUN\",\n\t\t\t\"wonders\": \"NOUN\",\n\t\t\t\"insatiable\": \"ADJ\",\n\t\t\t\"arrested\": \"VERB\",\n\t\t\t\"lora\": \"PROPN\",\n\t\t\t\"enmities\": \"NOUN\",\n\t\t\t\"estimated\": \"VERB\",\n\t\t\t\"nile\": \"PROPN\",\n\t\t\t\"tensions\": \"NOUN\",\n\t\t\t\"rodents\": \"NOUN\",\n\t\t\t\"taub\": \"PROPN\",\n\t\t\t\"editorship\": \"NOUN\",\n\t\t\t\"pentagon\": \"PROPN\",\n\t\t\t\"cheers\": \"NOUN\",\n\t\t\t\"b2b\": \"NOUN\",\n\t\t\t\"troy\": \"PROPN\",\n\t\t\t\"postdigital\": \"ADJ\",\n\t\t\t\"fixture\": \"NOUN\",\n\t\t\t\"warlord\": \"NOUN\",\n\t\t\t\"seclusion\": \"NOUN\",\n\t\t\t\"attempted\": \"VERB\",\n\t\t\t\"capitalism\": \"NOUN\",\n\t\t\t\"youngish\": \"ADJ\",\n\t\t\t\"tech\": \"NOUN\",\n\t\t\t\"endless\": \"ADJ\",\n\t\t\t\"elliott\": \"PROPN\",\n\t\t\t\"operation\": \"NOUN\",\n\t\t\t\"kippers\": \"NOUN\",\n\t\t\t\"drugs\": \"NOUN\",\n\t\t\t\"para\": \"NOUN\",\n\t\t\t\"several\": \"ADJ\",\n\t\t\t\"khaza'il\": \"PROPN\",\n\t\t\t\"spinning\": \"VERB\",\n\t\t\t\"lorie\": \"PROPN\",\n\t\t\t\"extras\": \"NOUN\",\n\t\t\t\"females\": \"NOUN\",\n\t\t\t\"food\": \"NOUN\",\n\t\t\t\"junius\": \"PROPN\",\n\t\t\t\"debut\": \"NOUN\",\n\t\t\t\"hookers\": \"NOUN\",\n\t\t\t\"agreeable\": \"ADJ\",\n\t\t\t\"impacted\": \"VERB\",\n\t\t\t\"wallet\": \"NOUN\",\n\t\t\t\"covert\": \"ADJ\",\n\t\t\t\"conspiracy\": \"NOUN\",\n\t\t\t\"tallith\": \"NOUN\",\n\t\t\t\"h-0237/97\": \"NUM\",\n\t\t\t\"colorful\": \"ADJ\",\n\t\t\t\"potentiality\": \"NOUN\",\n\t\t\t\"analyses\": \"NOUN\",\n\t\t\t\"meteorites\": \"NOUN\",\n\t\t\t\"sidewalk\": \"NOUN\",\n\t\t\t\"tomatoes\": \"NOUN\",\n\t\t\t\"earn\": \"VERB\",\n\t\t\t\"lynch\": \"PROPN\",\n\t\t\t\"labelled\": \"VERB\",\n\t\t\t\"328\": \"NUM\",\n\t\t\t\"6/14\": \"NUM\",\n\t\t\t\"phillips\": \"PROPN\",\n\t\t\t\"deported\": \"VERB\",\n\t\t\t\"mathematicians\": \"NOUN\",\n\t\t\t\"rivalries\": \"NOUN\",\n\t\t\t\"blacklined\": \"VERB\",\n\t\t\t\"knew\": \"VERB\",\n\t\t\t\"coup\": \"NOUN\",\n\t\t\t\"60\": \"NUM\",\n\t\t\t\"gay\": \"ADJ\",\n\t\t\t\"smartly\": \"ADV\",\n\t\t\t\"x\": \"NOUN\",\n\t\t\t\"wearing\": \"VERB\",\n\t\t\t\"divy\": \"VERB\",\n\t\t\t\"geese\": \"NOUN\",\n\t\t\t\"hayat\": \"PROPN\",\n\t\t\t\"1640\": \"NUM\",\n\t\t\t\"signals\": \"VERB\",\n\t\t\t\"cursor\": \"NOUN\",\n\t\t\t\"peddle\": \"NOUN\",\n\t\t\t\"1949\": \"NUM\",\n\t\t\t\"corp.\": \"PROPN\",\n\t\t\t\"podiobooks.com\": \"PROPN\",\n\t\t\t\"pjc\": \"PROPN\",\n\t\t\t\"noir\": \"PROPN\",\n\t\t\t\"adsl\": \"NOUN\",\n\t\t\t\"happier\": \"ADJ\",\n\t\t\t\"sikkim\": \"PROPN\",\n\t\t\t\"blender\": \"NOUN\",\n\t\t\t\"hypnotic\": \"ADJ\",\n\t\t\t\"sub-division\": \"NOUN\",\n\t\t\t\"bombing\": \"NOUN\",\n\t\t\t\"deflated\": \"VERB\",\n\t\t\t\"insects\": \"NOUN\",\n\t\t\t\"11/13/2000\": \"NUM\",\n\t\t\t\"#systemanalysis\": \"PROPN\",\n\t\t\t\"erroneous\": \"ADJ\",\n\t\t\t\"5:00\": \"NUM\",\n\t\t\t\"compliments\": \"NOUN\",\n\t\t\t\"muttering\": \"VERB\",\n\t\t\t\"greasy\": \"ADJ\",\n\t\t\t\"1920s\": \"NOUN\",\n\t\t\t\"saudis\": \"PROPN\",\n\t\t\t\"citizens\": \"NOUN\",\n\t\t\t\"0.6\": \"NUM\",\n\t\t\t\"19.5\": \"NUM\",\n\t\t\t\"idiot\": \"NOUN\",\n\t\t\t\"broadline\": \"ADJ\",\n\t\t\t\"recessive\": \"ADJ\",\n\t\t\t\"bourbon\": \"NOUN\",\n\t\t\t\"murillo\": \"PROPN\",\n\t\t\t\"02/13/2001\": \"NUM\",\n\t\t\t\"friar\": \"PROPN\",\n\t\t\t\"wenders\": \"PROPN\",\n\t\t\t\"snowscape\": \"NOUN\",\n\t\t\t\"rushing\": \"VERB\",\n\t\t\t\"featureless\": \"ADJ\",\n\t\t\t\"allowdeletions\": \"NOUN\",\n\t\t\t\"wordlessly\": \"ADV\",\n\t\t\t\"shedload\": \"NOUN\",\n\t\t\t\"dreaming\": \"NOUN\",\n\t\t\t\"aside\": \"ADV\",\n\t\t\t\"audio\": \"NOUN\",\n\t\t\t\"646-5847\": \"NUM\",\n\t\t\t\"70's\": \"NOUN\",\n\t\t\t\"positioned\": \"VERB\",\n\t\t\t\"garner\": \"VERB\",\n\t\t\t\"fleeing\": \"VERB\",\n\t\t\t\"cesar\": \"PROPN\",\n\t\t\t\"l.i.t\": \"PROPN\",\n\t\t\t\"seductive\": \"ADJ\",\n\t\t\t\"hospitalize\": \"VERB\",\n\t\t\t\"e-mails\": \"NOUN\",\n\t\t\t\"tarpaulin\": \"NOUN\",\n\t\t\t\"+1918584-4428\": \"NUM\",\n\t\t\t\"940\": \"NUM\",\n\t\t\t\"flashest\": \"ADJ\",\n\t\t\t\"massacred\": \"ADJ\",\n\t\t\t\"week\": \"NOUN\",\n\t\t\t\"bengal\": \"PROPN\",\n\t\t\t\"fellows\": \"NOUN\",\n\t\t\t\"herding\": \"NOUN\",\n\t\t\t\"invade\": \"VERB\",\n\t\t\t\"!!!!!!!!!!?\": \"PUNCT\",\n\t\t\t\"phbow\": \"PROPN\",\n\t\t\t\"swapped\": \"VERB\",\n\t\t\t\"09:45\": \"NUM\",\n\t\t\t\"*~*~*~*~*~*~*~*~*~*\": \"SYM\",\n\t\t\t\"l'americano\": \"PROPN\",\n\t\t\t\"subduing\": \"VERB\",\n\t\t\t\"robert\": \"PROPN\",\n\t\t\t\"whom\": \"PRON\",\n\t\t\t\"contentedly\": \"ADV\",\n\t\t\t\"dark-green\": \"ADJ\",\n\t\t\t\"olympic\": \"ADJ\",\n\t\t\t\"connectionfile\": \"NOUN\",\n\t\t\t\"substitute\": \"NOUN\",\n\t\t\t\"bravery\": \"NOUN\",\n\t\t\t\"schoolgirls\": \"NOUN\",\n\t\t\t\"aeron\": \"PROPN\",\n\t\t\t\"linguistic\": \"ADJ\",\n\t\t\t\"golden\": \"ADJ\",\n\t\t\t\"without\": \"ADP\",\n\t\t\t\"self-contained\": \"VERB\",\n\t\t\t\"originated\": \"VERB\",\n\t\t\t\"considerably\": \"ADV\",\n\t\t\t\"dylan\": \"PROPN\",\n\t\t\t\"homeless\": \"ADJ\",\n\t\t\t\"operations\": \"NOUN\",\n\t\t\t\"goodwyn\": \"PROPN\",\n\t\t\t\"92842\": \"NUM\",\n\t\t\t\"clh\": \"PROPN\",\n\t\t\t\"tranquil\": \"ADJ\",\n\t\t\t\"10:46\": \"NUM\",\n\t\t\t\"illyrian\": \"ADJ\",\n\t\t\t\"lighthearted\": \"ADJ\",\n\t\t\t\"enhance\": \"VERB\",\n\t\t\t\"music\": \"NOUN\",\n\t\t\t\"together\": \"ADV\",\n\t\t\t\"wi940\": \"PROPN\",\n\t\t\t\"swinging\": \"VERB\",\n\t\t\t\"morbidity\": \"NOUN\",\n\t\t\t\"infrequently\": \"ADV\",\n\t\t\t\"confined\": \"VERB\",\n\t\t\t\"commons\": \"PROPN\",\n\t\t\t\"fulfilment\": \"NOUN\",\n\t\t\t\"glance\": \"NOUN\",\n\t\t\t\"désiré\": \"PROPN\",\n\t\t\t\"affective\": \"ADJ\",\n\t\t\t\"pelts\": \"NOUN\",\n\t\t\t\"ecologist\": \"NOUN\",\n\t\t\t\"dissecting\": \"VERB\",\n\t\t\t\"illegal\": \"ADJ\",\n\t\t\t\"feelings\": \"NOUN\",\n\t\t\t\"causal\": \"ADJ\",\n\t\t\t\"bitterness\": \"NOUN\",\n\t\t\t\"5th\": \"ADJ\",\n\t\t\t\"practiced\": \"VERB\",\n\t\t\t\"shaking\": \"VERB\",\n\t\t\t\"mid-2003\": \"NOUN\",\n\t\t\t\"innovation\": \"NOUN\",\n\t\t\t\"raw\": \"ADJ\",\n\t\t\t\"pop...@spinach.eat\": \"PROPN\",\n\t\t\t\"experimenting\": \"VERB\",\n\t\t\t\"numerical\": \"ADJ\",\n\t\t\t\"taking\": \"VERB\",\n\t\t\t\"nagging\": \"VERB\",\n\t\t\t\"assisted\": \"VERB\",\n\t\t\t\"advisors\": \"NOUN\",\n\t\t\t\"disenfranchisement\": \"NOUN\",\n\t\t\t\"bullseye\": \"NOUN\",\n\t\t\t\"coincidentally\": \"ADV\",\n\t\t\t\"woodland\": \"NOUN\",\n\t\t\t\"tragedies\": \"NOUN\",\n\t\t\t\"southampton\": \"PROPN\",\n\t\t\t\"learns\": \"VERB\",\n\t\t\t\"bundle\": \"NOUN\",\n\t\t\t\"youtube\": \"PROPN\",\n\t\t\t\"admin\": \"ADJ\",\n\t\t\t\"si\": \"NOUN\",\n\t\t\t\"badgers\": \"NOUN\",\n\t\t\t\"28/10/2004\": \"NUM\",\n\t\t\t\"sang\": \"VERB\",\n\t\t\t\"invasive\": \"ADJ\",\n\t\t\t\"seventeen\": \"NUM\",\n\t\t\t\"scud\": \"PROPN\",\n\t\t\t\"☏\": \"SYM\",\n\t\t\t\"landlocked\": \"ADJ\",\n\t\t\t\"grass\": \"NOUN\",\n\t\t\t\"gerulaitis\": \"PROPN\",\n\t\t\t\"2545\": \"NUM\",\n\t\t\t\"essays\": \"NOUN\",\n\t\t\t\"vice\": \"PROPN\",\n\t\t\t\"pots\": \"NOUN\",\n\t\t\t\"bitterly\": \"ADV\",\n\t\t\t\"everyone\": \"PRON\",\n\t\t\t\"genuinely\": \"ADV\",\n\t\t\t\"o\": \"ADP\",\n\t\t\t\"impending\": \"ADJ\",\n\t\t\t\":p\": \"SYM\",\n\t\t\t\"arkham\": \"PROPN\",\n\t\t\t\"practice\": \"NOUN\",\n\t\t\t\"caster\": \"NOUN\",\n\t\t\t\"rhinegold\": \"NOUN\",\n\t\t\t\"persian\": \"PROPN\",\n\t\t\t\"murderer\": \"NOUN\",\n\t\t\t\"disagreeable\": \"ADJ\",\n\t\t\t\"resolutions\": \"NOUN\",\n\t\t\t\"probabition\": \"NOUN\",\n\t\t\t\"hegemony\": \"PROPN\",\n\t\t\t\"submerged\": \"VERB\",\n\t\t\t\"1894\": \"NUM\",\n\t\t\t\"ll\": \"AUX\",\n\t\t\t\"swamped\": \"VERB\",\n\t\t\t\"combo\": \"NOUN\",\n\t\t\t\"conflicting\": \"VERB\",\n\t\t\t\"scrubby\": \"ADJ\",\n\t\t\t\"gran'\": \"ADJ\",\n\t\t\t\"symbols\": \"NOUN\",\n\t\t\t\"colossal\": \"ADJ\",\n\t\t\t\"saturday\": \"PROPN\",\n\t\t\t\"branson\": \"PROPN\",\n\t\t\t\"thawed\": \"VERB\",\n\t\t\t\"wedge\": \"NOUN\",\n\t\t\t\"pronunciation\": \"NOUN\",\n\t\t\t\"poisons\": \"NOUN\",\n\t\t\t\"¢\": \"SYM\",\n\t\t\t\"british\": \"ADJ\",\n\t\t\t\"phantome\": \"PROPN\",\n\t\t\t\"dewhurst\": \"PROPN\",\n\t\t\t\"remove\": \"VERB\",\n\t\t\t\"wrestle\": \"VERB\",\n\t\t\t\"untied\": \"VERB\",\n\t\t\t\"wielding\": \"VERB\",\n\t\t\t\"davio\": \"PROPN\",\n\t\t\t\"cork\": \"NOUN\",\n\t\t\t\"permeate\": \"VERB\",\n\t\t\t\"miriam\": \"PROPN\",\n\t\t\t\"hype\": \"NOUN\",\n\t\t\t\"persisting\": \"VERB\",\n\t\t\t\"recognizable\": \"ADJ\",\n\t\t\t\"acquaintance\": \"NOUN\",\n\t\t\t\"togas\": \"NOUN\",\n\t\t\t\"yeung\": \"PROPN\",\n\t\t\t\"municipality\": \"NOUN\",\n\t\t\t\"sinus\": \"NOUN\",\n\t\t\t\"checking\": \"VERB\",\n\t\t\t\"populations\": \"NOUN\",\n\t\t\t\"cling\": \"VERB\",\n\t\t\t\"seti\": \"PROPN\",\n\t\t\t\"5.6\": \"NUM\",\n\t\t\t\"lately\": \"ADV\",\n\t\t\t\"halal\": \"ADJ\",\n\t\t\t\"shahar\": \"PROPN\",\n\t\t\t\"levantine\": \"ADJ\",\n\t\t\t\"ag\": \"NOUN\",\n\t\t\t\"mohieddin\": \"PROPN\",\n\t\t\t\"embowered\": \"VERB\",\n\t\t\t\"wife\": \"NOUN\",\n\t\t\t\"bikes\": \"NOUN\",\n\t\t\t\"rightfully\": \"ADV\",\n\t\t\t\"cbd\": \"PROPN\",\n\t\t\t\"hang\": \"VERB\",\n\t\t\t\"packet\": \"NOUN\",\n\t\t\t\"felice\": \"PROPN\",\n\t\t\t\"silliest\": \"ADJ\",\n\t\t\t\"benefited\": \"VERB\",\n\t\t\t\"club\": \"NOUN\",\n\t\t\t\"dry\": \"ADJ\",\n\t\t\t\"transmitted\": \"VERB\",\n\t\t\t\"pigeons\": \"NOUN\",\n\t\t\t\"valet\": \"NOUN\",\n\t\t\t\"marvelled\": \"VERB\",\n\t\t\t\"adaptation\": \"NOUN\",\n\t\t\t\"eaten\": \"VERB\",\n\t\t\t\"beckoning\": \"VERB\",\n\t\t\t\"katherinator\": \"PROPN\",\n\t\t\t\"optimal\": \"ADJ\",\n\t\t\t\"escapades\": \"NOUN\",\n\t\t\t\"ford\": \"PROPN\",\n\t\t\t\"catcher\": \"NOUN\",\n\t\t\t\"assassinated\": \"VERB\",\n\t\t\t\"widespread\": \"ADJ\",\n\t\t\t\"jeju\": \"PROPN\",\n\t\t\t\"bed\": \"NOUN\",\n\t\t\t\"executives\": \"NOUN\",\n\t\t\t\"defective\": \"ADJ\",\n\t\t\t\"opportune\": \"ADJ\",\n\t\t\t\"weil\": \"PROPN\",\n\t\t\t\"hh\": \"NOUN\",\n\t\t\t\"rolling\": \"VERB\",\n\t\t\t\"22\": \"NUM\",\n\t\t\t\"cured\": \"VERB\",\n\t\t\t\"enjoyable\": \"ADJ\",\n\t\t\t\"capelin\": \"NOUN\",\n\t\t\t\"bottled\": \"ADJ\",\n\t\t\t\"notes\": \"NOUN\",\n\t\t\t\"commandant\": \"NOUN\",\n\t\t\t\"expenses\": \"NOUN\",\n\t\t\t\"hwang\": \"PROPN\",\n\t\t\t\"fortnight\": \"NOUN\",\n\t\t\t\"noggins\": \"NOUN\",\n\t\t\t\"behave\": \"VERB\",\n\t\t\t\"booze\": \"NOUN\",\n\t\t\t\"beringia\": \"PROPN\",\n\t\t\t\"kumaratunga\": \"PROPN\",\n\t\t\t\"gears\": \"NOUN\",\n\t\t\t\"scapes\": \"NOUN\",\n\t\t\t\"allow\": \"VERB\",\n\t\t\t\"julian\": \"PROPN\",\n\t\t\t\"yoyo\": \"NOUN\",\n\t\t\t\"defeated\": \"VERB\",\n\t\t\t\"phy\": \"NOUN\",\n\t\t\t\"narrator\": \"NOUN\",\n\t\t\t\"brittany\": \"PROPN\",\n\t\t\t\"stray\": \"ADJ\",\n\t\t\t\"precautions\": \"NOUN\",\n\t\t\t\"fernandina\": \"PROPN\",\n\t\t\t\"wrapping\": \"NOUN\",\n\t\t\t\"counterparties\": \"NOUN\",\n\t\t\t\"abyss\": \"NOUN\",\n\t\t\t\":\": \"PUNCT\",\n\t\t\t\"roosters\": \"NOUN\",\n\t\t\t\"unfunny\": \"ADJ\",\n\t\t\t\"lyrical\": \"ADJ\",\n\t\t\t\"trusts\": \"VERB\",\n\t\t\t\"artificially\": \"ADV\",\n\t\t\t\"01/19/2001\": \"NUM\",\n\t\t\t\"remuneration\": \"NOUN\",\n\t\t\t\"ever\": \"ADV\",\n\t\t\t\"relating\": \"VERB\",\n\t\t\t\"picannins\": \"NOUN\",\n\t\t\t\"window\": \"NOUN\",\n\t\t\t\"borenste@haas.berkeley.edu\": \"PROPN\",\n\t\t\t\"aguilar\": \"PROPN\",\n\t\t\t\"monotony\": \"NOUN\",\n\t\t\t\"skip\": \"VERB\",\n\t\t\t\"envied\": \"VERB\",\n\t\t\t\"forster\": \"PROPN\",\n\t\t\t\"shavings\": \"NOUN\",\n\t\t\t\"endo\": \"PROPN\",\n\t\t\t\"house\": \"NOUN\",\n\t\t\t\"perked\": \"VERB\",\n\t\t\t\"merely\": \"ADV\",\n\t\t\t\"memorial\": \"NOUN\",\n\t\t\t\"drunker\": \"ADJ\",\n\t\t\t\"michelangelo\": \"PROPN\",\n\t\t\t\"him\": \"PRON\",\n\t\t\t\"baffled\": \"VERB\",\n\t\t\t\"purported\": \"VERB\",\n\t\t\t\"mckenzie\": \"PROPN\",\n\t\t\t\"sat\": \"VERB\",\n\t\t\t\"auchintoul\": \"PROPN\",\n\t\t\t\"saucepan\": \"NOUN\",\n\t\t\t\"duty\": \"NOUN\",\n\t\t\t\"26\": \"NUM\",\n\t\t\t\"temperment\": \"NOUN\",\n\t\t\t\"laces\": \"NOUN\",\n\t\t\t\"one\": \"NUM\",\n\t\t\t\"elinor\": \"PROPN\",\n\t\t\t\"frisked\": \"VERB\",\n\t\t\t\"67.70\": \"NUM\",\n\t\t\t\"service\": \"NOUN\",\n\t\t\t\"arranging\": \"VERB\",\n\t\t\t\"terminal\": \"PROPN\",\n\t\t\t\"42,008\": \"NUM\",\n\t\t\t\"shabby-looking\": \"ADJ\",\n\t\t\t\"beverage\": \"NOUN\",\n\t\t\t\"survivors\": \"NOUN\",\n\t\t\t\"reflected\": \"VERB\",\n\t\t\t\"enrongss.xls\": \"NOUN\",\n\t\t\t\"outback\": \"PROPN\",\n\t\t\t\"deadness\": \"NOUN\",\n\t\t\t\"barton\": \"PROPN\",\n\t\t\t\"rigged\": \"VERB\",\n\t\t\t\"planet\": \"NOUN\",\n\t\t\t\"inaccurate\": \"ADJ\",\n\t\t\t\"thrown\": \"VERB\",\n\t\t\t\"accents\": \"NOUN\",\n\t\t\t\"majeure\": \"NOUN\",\n\t\t\t\"macs\": \"NOUN\",\n\t\t\t\"grants\": \"NOUN\",\n\t\t\t\"playful\": \"ADJ\",\n\t\t\t\"asahe\": \"PROPN\",\n\t\t\t\"nutcrackers\": \"NOUN\",\n\t\t\t\"mauritania\": \"PROPN\",\n\t\t\t\"phylogenetic\": \"ADJ\",\n\t\t\t\"filled\": \"VERB\",\n\t\t\t\"stooping\": \"ADJ\",\n\t\t\t\"pebbles\": \"NOUN\",\n\t\t\t\"pitch\": \"NOUN\",\n\t\t\t\"crowded\": \"ADJ\",\n\t\t\t\"factions\": \"NOUN\",\n\t\t\t\"part-session\": \"NOUN\",\n\t\t\t\"aspirational\": \"ADJ\",\n\t\t\t\"patient\": \"NOUN\",\n\t\t\t\"okay\": \"INTJ\",\n\t\t\t\"assurance\": \"NOUN\",\n\t\t\t\"breezes\": \"NOUN\",\n\t\t\t\"entities\": \"NOUN\",\n\t\t\t\"concrete\": \"NOUN\",\n\t\t\t\"charlotte\": \"PROPN\",\n\t\t\t\"hammy\": \"NOUN\",\n\t\t\t\"recipients\": \"NOUN\",\n\t\t\t\"incubating\": \"VERB\",\n\t\t\t\"mcmuffin\": \"PROPN\",\n\t\t\t\"tagesthemen\": \"PROPN\",\n\t\t\t\"alfaro\": \"PROPN\",\n\t\t\t\"schmidt\": \"PROPN\",\n\t\t\t\"anal\": \"ADJ\",\n\t\t\t\"chasms\": \"NOUN\",\n\t\t\t\"razaq\": \"PROPN\",\n\t\t\t\"atheists\": \"NOUN\",\n\t\t\t\"sobriquet\": \"NOUN\",\n\t\t\t\"distortions\": \"NOUN\",\n\t\t\t\"hike\": \"VERB\",\n\t\t\t\"rumbling\": \"VERB\",\n\t\t\t\"suspect\": \"VERB\",\n\t\t\t\"vol.\": \"NOUN\",\n\t\t\t\"bowls\": \"NOUN\",\n\t\t\t\"sociologists\": \"NOUN\",\n\t\t\t\"brieber\": \"PROPN\",\n\t\t\t\"condiments\": \"NOUN\",\n\t\t\t\"chihuahua\": \"PROPN\",\n\t\t\t\"cornell\": \"PROPN\",\n\t\t\t\"superseding\": \"VERB\",\n\t\t\t\"drafting\": \"VERB\",\n\t\t\t\"stash\": \"VERB\",\n\t\t\t\"2008\": \"NUM\",\n\t\t\t\"dictate\": \"VERB\",\n\t\t\t\"plunder\": \"VERB\",\n\t\t\t\"offend\": \"VERB\",\n\t\t\t\"que.\": \"PROPN\",\n\t\t\t\"storybooks\": \"NOUN\",\n\t\t\t\"lichen\": \"NOUN\",\n\t\t\t\"holocaust-esque\": \"ADJ\",\n\t\t\t\"uzbekistan\": \"PROPN\",\n\t\t\t\"mode\": \"NOUN\",\n\t\t\t\"batches\": \"NOUN\",\n\t\t\t\"mccutchan\": \"PROPN\",\n\t\t\t\"cnn\": \"PROPN\",\n\t\t\t\"imperfection\": \"NOUN\",\n\t\t\t\"marker\": \"NOUN\",\n\t\t\t\"versa\": \"ADV\",\n\t\t\t\"endowment\": \"NOUN\",\n\t\t\t\"ramon\": \"PROPN\",\n\t\t\t\"compounded\": \"VERB\",\n\t\t\t\"operational\": \"ADJ\",\n\t\t\t\"spectral\": \"ADJ\",\n\t\t\t\"produces\": \"VERB\",\n\t\t\t\"chopping\": \"VERB\",\n\t\t\t\"bell\": \"NOUN\",\n\t\t\t\"stolen\": \"VERB\",\n\t\t\t\"member\": \"NOUN\",\n\t\t\t\"uecomm\": \"PROPN\",\n\t\t\t\"nationalities\": \"NOUN\",\n\t\t\t\"faithful\": \"ADJ\",\n\t\t\t\"task\": \"NOUN\",\n\t\t\t\"315-460-3344\": \"NUM\",\n\t\t\t\"intersected\": \"VERB\",\n\t\t\t\"observes\": \"VERB\",\n\t\t\t\"complexities\": \"NOUN\",\n\t\t\t\"photographing\": \"VERB\",\n\t\t\t\"mask\": \"NOUN\",\n\t\t\t\"sharers\": \"NOUN\",\n\t\t\t\"trafficking\": \"NOUN\",\n\t\t\t\"bodice\": \"NOUN\",\n\t\t\t\"rename\": \"VERB\",\n\t\t\t\"revealed\": \"VERB\",\n\t\t\t\"breaks\": \"NOUN\",\n\t\t\t\"ultimately\": \"ADV\",\n\t\t\t\"displaced\": \"VERB\",\n\t\t\t\"schedulers\": \"NOUN\",\n\t\t\t\"peoples\": \"NOUN\",\n\t\t\t\"11831\": \"NUM\",\n\t\t\t\"cc\": \"PROPN\",\n\t\t\t\"universidad\": \"PROPN\",\n\t\t\t\"convincing\": \"ADJ\",\n\t\t\t\"2:300\": \"NUM\",\n\t\t\t\"vans\": \"NOUN\",\n\t\t\t\"pathogens\": \"NOUN\",\n\t\t\t\"doom\": \"NOUN\",\n\t\t\t\"kalikhola\": \"PROPN\",\n\t\t\t\"inhibitors\": \"NOUN\",\n\t\t\t\"acts\": \"NOUN\",\n\t\t\t\"govind\": \"PROPN\",\n\t\t\t\"http://www.laweekly.com/general/features/satan-loves-you/13454/\": \"PROPN\",\n\t\t\t\"mechanics\": \"NOUN\",\n\t\t\t\"vernon\": \"PROPN\",\n\t\t\t\"shames\": \"PROPN\",\n\t\t\t\"prophecy\": \"NOUN\",\n\t\t\t\"1868\": \"NUM\",\n\t\t\t\"kittens\": \"NOUN\",\n\t\t\t\"unjustified\": \"ADJ\",\n\t\t\t\"11/01/01\": \"NUM\",\n\t\t\t\"ten\": \"NUM\",\n\t\t\t\"auspices\": \"NOUN\",\n\t\t\t\"radianz\": \"PROPN\",\n\t\t\t\"bloodworms\": \"NOUN\",\n\t\t\t\"soap\": \"NOUN\",\n\t\t\t\"threat\": \"NOUN\",\n\t\t\t\"stylesheet\": \"NOUN\",\n\t\t\t\"reckless\": \"ADJ\",\n\t\t\t\"reading\": \"VERB\",\n\t\t\t\"mathematical\": \"ADJ\",\n\t\t\t\"fights\": \"NOUN\",\n\t\t\t\"guiltily\": \"ADV\",\n\t\t\t\"committed\": \"VERB\",\n\t\t\t\"carburetor\": \"NOUN\",\n\t\t\t\"crinkly\": \"ADJ\",\n\t\t\t\"invent\": \"VERB\",\n\t\t\t\"regard\": \"NOUN\",\n\t\t\t\"folders\": \"NOUN\",\n\t\t\t\"behind\": \"ADP\",\n\t\t\t\"thais\": \"PROPN\",\n\t\t\t\"sycamore\": \"NOUN\",\n\t\t\t\"separatists\": \"NOUN\",\n\t\t\t\"embedding\": \"VERB\",\n\t\t\t\"neuro\": \"NOUN\",\n\t\t\t\"47's\": \"NOUN\",\n\t\t\t\"conjunction\": \"NOUN\",\n\t\t\t\"welded\": \"VERB\",\n\t\t\t\"jihad\": \"PROPN\",\n\t\t\t\"circulating\": \"VERB\",\n\t\t\t\"terrorists\": \"NOUN\",\n\t\t\t\"oilfield\": \"NOUN\",\n\t\t\t\"shaft\": \"NOUN\",\n\t\t\t\"range\": \"NOUN\",\n\t\t\t\"provocations\": \"NOUN\",\n\t\t\t\"whale\": \"NOUN\",\n\t\t\t\"uncertainty\": \"NOUN\",\n\t\t\t\"backpacks\": \"NOUN\",\n\t\t\t\"retarded\": \"ADJ\",\n\t\t\t\"taasinge\": \"PROPN\",\n\t\t\t\"implements\": \"NOUN\",\n\t\t\t\"3,500\": \"NUM\",\n\t\t\t\"changeable\": \"ADJ\",\n\t\t\t\"samples\": \"NOUN\",\n\t\t\t\"attn.\": \"NOUN\",\n\t\t\t\"judgment\": \"NOUN\",\n\t\t\t\"players\": \"NOUN\",\n\t\t\t\"swaps\": \"NOUN\",\n\t\t\t\"quixote\": \"PROPN\",\n\t\t\t\"committing\": \"VERB\",\n\t\t\t\"http://news.bbc.co.uk/2/hi/programmes/this_world/4446342.stm\": \"PROPN\",\n\t\t\t\"pleasantly\": \"ADV\",\n\t\t\t\"foremost\": \"ADJ\",\n\t\t\t\"upraised\": \"VERB\",\n\t\t\t\"indeed\": \"ADV\",\n\t\t\t\"niches\": \"NOUN\",\n\t\t\t\"aakrosh\": \"PROPN\",\n\t\t\t\"xenocentrism\": \"NOUN\",\n\t\t\t\"starters\": \"NOUN\",\n\t\t\t\"nationalist\": \"ADJ\",\n\t\t\t\"despair\": \"NOUN\",\n\t\t\t\"playhouse\": \"PROPN\",\n\t\t\t\"moustache\": \"NOUN\",\n\t\t\t\"silvered\": \"ADJ\",\n\t\t\t\"andre\": \"PROPN\",\n\t\t\t\"amerithrax\": \"PROPN\",\n\t\t\t\"kelly\": \"PROPN\",\n\t\t\t\"trashed\": \"VERB\",\n\t\t\t\"unheeding\": \"ADJ\",\n\t\t\t\"tissue\": \"NOUN\",\n\t\t\t\"came\": \"VERB\",\n\t\t\t\"flow\": \"NOUN\",\n\t\t\t\"362416\": \"NUM\",\n\t\t\t\"recipient\": \"NOUN\",\n\t\t\t\"stellar\": \"ADJ\",\n\t\t\t\"researcher\": \"NOUN\",\n\t\t\t\"lingard\": \"PROPN\",\n\t\t\t\"poseidon\": \"PROPN\",\n\t\t\t\"heidelberg\": \"PROPN\",\n\t\t\t\"flynn\": \"PROPN\",\n\t\t\t\"parvovirus\": \"PROPN\",\n\t\t\t\"client\": \"NOUN\",\n\t\t\t\"harmless\": \"ADJ\",\n\t\t\t\"wildernest\": \"PROPN\",\n\t\t\t\"nutley\": \"PROPN\",\n\t\t\t\"jessica\": \"PROPN\",\n\t\t\t\"poach\": \"VERB\",\n\t\t\t\"bipedal\": \"ADJ\",\n\t\t\t\"sleeps\": \"VERB\",\n\t\t\t\"harshest\": \"ADJ\",\n\t\t\t\"visiting\": \"VERB\",\n\t\t\t\"jackets\": \"NOUN\",\n\t\t\t\"kansas\": \"PROPN\",\n\t\t\t\"interviews\": \"NOUN\",\n\t\t\t\"flinched\": \"VERB\",\n\t\t\t\"disrupt\": \"VERB\",\n\t\t\t\"overcharges\": \"NOUN\",\n\t\t\t\"two-hours-and-a-bit\": \"NOUN\",\n\t\t\t\"e-reader\": \"NOUN\",\n\t\t\t\"bureaucratically\": \"ADV\",\n\t\t\t\"trader\": \"NOUN\",\n\t\t\t\"mahady\": \"PROPN\",\n\t\t\t\"enchantment\": \"NOUN\",\n\t\t\t\"totally\": \"ADV\",\n\t\t\t\"morse\": \"PROPN\",\n\t\t\t\"agony\": \"NOUN\",\n\t\t\t\"acquiring\": \"VERB\",\n\t\t\t\"britney\": \"PROPN\",\n\t\t\t\"fassbinder\": \"PROPN\",\n\t\t\t\"sdot\": \"PROPN\",\n\t\t\t\"frontline\": \"NOUN\",\n\t\t\t\"psychoanalysis\": \"NOUN\",\n\t\t\t\"sifted\": \"VERB\",\n\t\t\t\"10:25\": \"NUM\",\n\t\t\t\"--\": \"PUNCT\",\n\t\t\t\"94720-1900\": \"NUM\",\n\t\t\t\"organism\": \"NOUN\",\n\t\t\t\"cut\": \"VERB\",\n\t\t\t\"assignment\": \"NOUN\",\n\t\t\t\"musk\": \"NOUN\",\n\t\t\t\"palate\": \"NOUN\",\n\t\t\t\"narratives\": \"NOUN\",\n\t\t\t\"flip\": \"VERB\",\n\t\t\t\"stiffening\": \"VERB\",\n\t\t\t\"jagger\": \"PROPN\",\n\t\t\t\"obliged\": \"VERB\",\n\t\t\t\"schenectady\": \"PROPN\",\n\t\t\t\"13\": \"NUM\",\n\t\t\t\"breathless\": \"ADJ\",\n\t\t\t\"mistook\": \"VERB\",\n\t\t\t\"swam\": \"VERB\",\n\t\t\t\"bad\": \"ADJ\",\n\t\t\t\"commitee\": \"NOUN\",\n\t\t\t\"(collapsible|expandable)\": \"ADJ\",\n\t\t\t\"rational\": \"ADJ\",\n\t\t\t\"grieving\": \"VERB\",\n\t\t\t\"rp\": \"NOUN\",\n\t\t\t\"ai\": \"NOUN\",\n\t\t\t\"sized\": \"ADJ\",\n\t\t\t\"romanick\": \"PROPN\",\n\t\t\t\"environment-friendly\": \"ADJ\",\n\t\t\t\"exemption\": \"NOUN\",\n\t\t\t\"kurdistan\": \"PROPN\",\n\t\t\t\"implicit\": \"ADJ\",\n\t\t\t\"mediawiki\": \"PROPN\",\n\t\t\t\"evidentary\": \"ADJ\",\n\t\t\t\"compelling\": \"ADJ\",\n\t\t\t\"degus\": \"NOUN\",\n\t\t\t\"immigrants\": \"NOUN\",\n\t\t\t\"beneficent\": \"ADJ\",\n\t\t\t\"shiite\": \"ADJ\",\n\t\t\t\"dividend\": \"NOUN\",\n\t\t\t\"flight\": \"NOUN\",\n\t\t\t\"10:05\": \"NUM\",\n\t\t\t\"people\": \"NOUN\",\n\t\t\t\"wmd\": \"PROPN\",\n\t\t\t\"ur\": \"PRON\",\n\t\t\t\"bones\": \"NOUN\",\n\t\t\t\"elie\": \"PROPN\",\n\t\t\t\"pizzerias\": \"NOUN\",\n\t\t\t\"menacingly\": \"ADV\",\n\t\t\t\"dishonest\": \"ADJ\",\n\t\t\t\"oozing\": \"VERB\",\n\t\t\t\"wider\": \"ADJ\",\n\t\t\t\"corners\": \"NOUN\",\n\t\t\t\"serpentine\": \"ADJ\",\n\t\t\t\"@jasthenurse\": \"PROPN\",\n\t\t\t\"hillegonds\": \"PROPN\",\n\t\t\t\"pull\": \"VERB\",\n\t\t\t\"dictatorship\": \"NOUN\",\n\t\t\t\"enquiry\": \"NOUN\",\n\t\t\t\"rugs\": \"NOUN\",\n\t\t\t\"ct\": \"NOUN\",\n\t\t\t\"golf\": \"NOUN\",\n\t\t\t\"safeguards\": \"NOUN\",\n\t\t\t\"overcooked\": \"ADJ\",\n\t\t\t\"mmbtu\": \"NOUN\",\n\t\t\t\"circulates\": \"VERB\",\n\t\t\t\"flustered\": \"ADJ\",\n\t\t\t\"equivalant\": \"ADJ\",\n\t\t\t\"hemisphere\": \"PROPN\",\n\t\t\t\"such\": \"ADJ\",\n\t\t\t\"satirical\": \"ADJ\",\n\t\t\t\"mommies\": \"NOUN\",\n\t\t\t\"recruits\": \"NOUN\",\n\t\t\t\"coffeehouses\": \"NOUN\",\n\t\t\t\"rescheduled\": \"VERB\",\n\t\t\t\"customarily\": \"ADV\",\n\t\t\t\"delayed\": \"VERB\",\n\t\t\t\"#reportinginformation\": \"PROPN\",\n\t\t\t\"proponent\": \"NOUN\",\n\t\t\t\"fluttered\": \"VERB\",\n\t\t\t\"levitated\": \"VERB\",\n\t\t\t\"----\": \"PUNCT\",\n\t\t\t\"upheaval\": \"NOUN\",\n\t\t\t\"asthmatic\": \"ADJ\",\n\t\t\t\"scap-22-368\": \"PROPN\",\n\t\t\t\"living-room\": \"NOUN\",\n\t\t\t\"rte\": \"PROPN\",\n\t\t\t\"marco\": \"PROPN\",\n\t\t\t\"hideouts\": \"NOUN\",\n\t\t\t\"peroxide\": \"NOUN\",\n\t\t\t\"pic\": \"NOUN\",\n\t\t\t\"portal\": \"NOUN\",\n\t\t\t\"allows\": \"VERB\",\n\t\t\t\"v-legged\": \"ADJ\",\n\t\t\t\"congressmen\": \"PROPN\",\n\t\t\t\"standpoint\": \"NOUN\",\n\t\t\t\"shirts\": \"NOUN\",\n\t\t\t\"reneged\": \"VERB\",\n\t\t\t\"hd\": \"NOUN\",\n\t\t\t\"torrey\": \"PROPN\",\n\t\t\t\"approached\": \"VERB\",\n\t\t\t\"heart\": \"NOUN\",\n\t\t\t\"abstract\": \"ADJ\",\n\t\t\t\"slippers\": \"NOUN\",\n\t\t\t\"woven\": \"VERB\",\n\t\t\t\"demonstrating\": \"VERB\",\n\t\t\t\"1535\": \"NUM\",\n\t\t\t\"exercitationes\": \"PROPN\",\n\t\t\t\"overtures\": \"NOUN\",\n\t\t\t\"occupies\": \"VERB\",\n\t\t\t\"dante\": \"PROPN\",\n\t\t\t\"person\": \"NOUN\",\n\t\t\t\"dangers\": \"NOUN\",\n\t\t\t\"shoreless\": \"ADJ\",\n\t\t\t\"car\": \"NOUN\",\n\t\t\t\"pastor\": \"NOUN\",\n\t\t\t\"nimr\": \"PROPN\",\n\t\t\t\"ikea\": \"PROPN\",\n\t\t\t\"750\": \"NUM\",\n\t\t\t\"median\": \"NOUN\",\n\t\t\t\"mexican\": \"ADJ\",\n\t\t\t\"communion\": \"PROPN\",\n\t\t\t\"entrails\": \"NOUN\",\n\t\t\t\"circulatory\": \"ADJ\",\n\t\t\t\"immortalized\": \"VERB\",\n\t\t\t\"plot\": \"NOUN\",\n\t\t\t\"phenomenal\": \"ADJ\",\n\t\t\t\"constituency\": \"NOUN\",\n\t\t\t\"17,100\": \"NUM\",\n\t\t\t\"crappy\": \"ADJ\",\n\t\t\t\"milligan\": \"PROPN\",\n\t\t\t\"spirituality\": \"NOUN\",\n\t\t\t\"buddakan\": \"PROPN\",\n\t\t\t\".2\": \"NUM\",\n\t\t\t\"geekseekers\": \"PROPN\",\n\t\t\t\"alt.animals.cat\": \"NOUN\",\n\t\t\t\"organize\": \"VERB\",\n\t\t\t\"complication\": \"NOUN\",\n\t\t\t\"thru\": \"ADP\",\n\t\t\t\"regulators\": \"NOUN\",\n\t\t\t\"career\": \"NOUN\",\n\t\t\t\"roughhouse\": \"NOUN\",\n\t\t\t\"modifiable\": \"ADJ\",\n\t\t\t\"interconnect\": \"NOUN\",\n\t\t\t\"hoisted\": \"VERB\",\n\t\t\t\"et\": \"PROPN\",\n\t\t\t\"mcnamara\": \"PROPN\",\n\t\t\t\"50,000\": \"NUM\",\n\t\t\t\"42,000.00\": \"NUM\",\n\t\t\t\"rude\": \"ADJ\",\n\t\t\t\"sulky\": \"ADJ\",\n\t\t\t\"capabilities\": \"NOUN\",\n\t\t\t\"purchased\": \"VERB\",\n\t\t\t\"energy\": \"NOUN\",\n\t\t\t\"09:27\": \"NUM\",\n\t\t\t\"semantic\": \"ADJ\",\n\t\t\t\"unceasing\": \"ADJ\",\n\t\t\t\"bouquet\": \"NOUN\",\n\t\t\t\"distributing\": \"VERB\",\n\t\t\t\"bushy\": \"ADJ\",\n\t\t\t\"totalling\": \"VERB\",\n\t\t\t\"peanut-butter\": \"NOUN\",\n\t\t\t\"biology\": \"NOUN\",\n\t\t\t\"carolyn\": \"PROPN\",\n\t\t\t\"receiver\": \"NOUN\",\n\t\t\t\"tormented\": \"VERB\",\n\t\t\t\"tooth\": \"NOUN\",\n\t\t\t\"75\": \"NUM\",\n\t\t\t\"hardship\": \"NOUN\",\n\t\t\t\"earthy\": \"ADJ\",\n\t\t\t\"'m\": \"AUX\",\n\t\t\t\"breadth\": \"NOUN\",\n\t\t\t\"10/23/2000\": \"NUM\",\n\t\t\t\"furrowed\": \"VERB\",\n\t\t\t\"ngo's\": \"NOUN\",\n\t\t\t\"34.6\": \"NUM\",\n\t\t\t\"212\": \"NUM\",\n\t\t\t\"preening\": \"NOUN\",\n\t\t\t\"blossom\": \"NOUN\",\n\t\t\t\"starving\": \"VERB\",\n\t\t\t\"8000\": \"NUM\",\n\t\t\t\"69\": \"NUM\",\n\t\t\t\"spier\": \"PROPN\",\n\t\t\t\"counter-conference\": \"NOUN\",\n\t\t\t\"clair\": \"PROPN\",\n\t\t\t\"expects\": \"VERB\",\n\t\t\t\"blessed\": \"VERB\",\n\t\t\t\"shorthanded\": \"ADJ\",\n\t\t\t\"graduates\": \"NOUN\",\n\t\t\t\"deteriorated\": \"VERB\",\n\t\t\t\"puct\": \"PROPN\",\n\t\t\t\"mud-flat\": \"NOUN\",\n\t\t\t\"transplant\": \"VERB\",\n\t\t\t\"hee-chan\": \"PROPN\",\n\t\t\t\"lube\": \"NOUN\",\n\t\t\t\"295870\": \"NUM\",\n\t\t\t\"playfully\": \"ADV\",\n\t\t\t\"pimply\": \"ADJ\",\n\t\t\t\"enfranchising\": \"VERB\",\n\t\t\t\"deduce\": \"VERB\",\n\t\t\t\"unclenched\": \"VERB\",\n\t\t\t\"geographer\": \"NOUN\",\n\t\t\t\"uprush\": \"NOUN\",\n\t\t\t\"29\": \"NUM\",\n\t\t\t\"425-922-0475\": \"NUM\",\n\t\t\t\"deductions\": \"NOUN\",\n\t\t\t\"mrs\": \"NOUN\",\n\t\t\t\"behalf\": \"NOUN\",\n\t\t\t\"elbow\": \"NOUN\",\n\t\t\t\"mailto:amy.cornell@compaq.com\": \"PROPN\",\n\t\t\t\"awarded\": \"VERB\",\n\t\t\t\"enroute\": \"ADV\",\n\t\t\t\"cheated\": \"ADJ\",\n\t\t\t\"aimless\": \"ADJ\",\n\t\t\t\"donald\": \"PROPN\",\n\t\t\t\"haddock\": \"NOUN\",\n\t\t\t\"bewitched\": \"VERB\",\n\t\t\t\"venta\": \"PROPN\",\n\t\t\t\"shock\": \"NOUN\",\n\t\t\t\"’ve\": \"AUX\",\n\t\t\t\"knacks\": \"NOUN\",\n\t\t\t\"quebecker\": \"PROPN\",\n\t\t\t\"surgeon\": \"NOUN\",\n\t\t\t\"sean\": \"PROPN\",\n\t\t\t\"sophia\": \"PROPN\",\n\t\t\t\"3:30\": \"NUM\",\n\t\t\t\"hiring\": \"VERB\",\n\t\t\t\"haemorrhage\": \"NOUN\",\n\t\t\t\"belief\": \"NOUN\",\n\t\t\t\"reynolds\": \"PROPN\",\n\t\t\t\"insensate\": \"ADJ\",\n\t\t\t\"spots\": \"NOUN\",\n\t\t\t\"mehraban\": \"PROPN\",\n\t\t\t\"umbilical\": \"ADJ\",\n\t\t\t\"magicians\": \"NOUN\",\n\t\t\t\"lightest\": \"ADJ\",\n\t\t\t\"stint\": \"NOUN\",\n\t\t\t\"drastic\": \"ADJ\",\n\t\t\t\"lan\": \"PROPN\",\n\t\t\t\"wesleyan\": \"PROPN\",\n\t\t\t\"ratty\": \"ADJ\",\n\t\t\t\"mister\": \"PROPN\",\n\t\t\t\"itself\": \"PRON\",\n\t\t\t\"barnacles\": \"NOUN\",\n\t\t\t\"619-696-6966\": \"NUM\",\n\t\t\t\"mama\": \"NOUN\",\n\t\t\t\"bore\": \"VERB\",\n\t\t\t\"moloch\": \"PROPN\",\n\t\t\t\"locution\": \"NOUN\",\n\t\t\t\"xiii\": \"NUM\",\n\t\t\t\"sheesh\": \"INTJ\",\n\t\t\t\"caveat\": \"NOUN\",\n\t\t\t\"putting\": \"VERB\",\n\t\t\t\"face\": \"NOUN\",\n\t\t\t\"aelius\": \"PROPN\",\n\t\t\t\"354\": \"NUM\",\n\t\t\t\"resolving\": \"VERB\",\n\t\t\t\"101\": \"NUM\",\n\t\t\t\"compromising\": \"VERB\",\n\t\t\t\"scheffer\": \"PROPN\",\n\t\t\t\"re-secured\": \"VERB\",\n\t\t\t\"persuasive\": \"ADJ\",\n\t\t\t\"1746\": \"NUM\",\n\t\t\t\"administrator\": \"NOUN\",\n\t\t\t\"spartan\": \"ADJ\",\n\t\t\t\"draining\": \"VERB\",\n\t\t\t\"crises\": \"NOUN\",\n\t\t\t\"spurned\": \"VERB\",\n\t\t\t\"osama\": \"PROPN\",\n\t\t\t\"#argument\": \"PROPN\",\n\t\t\t\"1593\": \"NUM\",\n\t\t\t\"77\": \"NUM\",\n\t\t\t\"10:07\": \"NUM\",\n\t\t\t\"about\": \"ADP\",\n\t\t\t\"0590854959\": \"NUM\",\n\t\t\t\"horror\": \"NOUN\",\n\t\t\t\"mmmm\": \"INTJ\",\n\t\t\t\"comes\": \"VERB\",\n\t\t\t\"theocratic\": \"ADJ\",\n\t\t\t\"deem\": \"VERB\",\n\t\t\t\"taxis\": \"NOUN\",\n\t\t\t\"blvd\": \"PROPN\",\n\t\t\t\"physios\": \"NOUN\",\n\t\t\t\"hamburg\": \"PROPN\",\n\t\t\t\"mimed\": \"VERB\",\n\t\t\t\"targets\": \"NOUN\",\n\t\t\t\"overawing\": \"ADJ\",\n\t\t\t\"catarin\": \"PROPN\",\n\t\t\t\"olivia\": \"PROPN\",\n\t\t\t\"blacksmithing\": \"NOUN\",\n\t\t\t\"dialague\": \"NOUN\",\n\t\t\t\"arsenic\": \"NOUN\",\n\t\t\t\"markup\": \"NOUN\",\n\t\t\t\"tuna\": \"NOUN\",\n\t\t\t\"fitted\": \"ADJ\",\n\t\t\t\"germ\": \"NOUN\",\n\t\t\t\"permit\": \"VERB\",\n\t\t\t\"dumbledore\": \"PROPN\",\n\t\t\t\"haug\": \"PROPN\",\n\t\t\t\"festoons\": \"NOUN\",\n\t\t\t\"f*ck\": \"NOUN\",\n\t\t\t\"bumrungard\": \"PROPN\",\n\t\t\t\"83\": \"NUM\",\n\t\t\t\"boasting\": \"VERB\",\n\t\t\t\"visacuba\": \"PROPN\",\n\t\t\t\"expensive\": \"ADJ\",\n\t\t\t\"mormons\": \"PROPN\",\n\t\t\t\"shakespearean\": \"ADJ\",\n\t\t\t\"0400\": \"NUM\",\n\t\t\t\"steffes\": \"PROPN\",\n\t\t\t\"hood\": \"NOUN\",\n\t\t\t\"lengthy\": \"ADJ\",\n\t\t\t\"bearers\": \"NOUN\",\n\t\t\t\"reconvene\": \"VERB\",\n\t\t\t\"inversion\": \"NOUN\",\n\t\t\t\"yiu-chung\": \"PROPN\",\n\t\t\t\"armada\": \"PROPN\",\n\t\t\t\"operas\": \"NOUN\",\n\t\t\t\"1791\": \"NUM\",\n\t\t\t\"herpes\": \"NOUN\",\n\t\t\t\"expostulation\": \"NOUN\",\n\t\t\t\"watery\": \"ADJ\",\n\t\t\t\"permutations\": \"NOUN\",\n\t\t\t\"inevitably\": \"ADV\",\n\t\t\t\"chu\": \"PROPN\",\n\t\t\t\"bazaar\": \"NOUN\",\n\t\t\t\"scheduler\": \"NOUN\",\n\t\t\t\"enormously\": \"ADV\",\n\t\t\t\"roar\": \"NOUN\",\n\t\t\t\"googlenut\": \"PROPN\",\n\t\t\t\"twisted\": \"VERB\",\n\t\t\t\"lithos\": \"NOUN\",\n\t\t\t\"4632\": \"NUM\",\n\t\t\t\"traightening\": \"VERB\",\n\t\t\t\"salmon-pink\": \"ADJ\",\n\t\t\t\"saved\": \"VERB\",\n\t\t\t\"pedestrian\": \"NOUN\",\n\t\t\t\"categorizing\": \"VERB\",\n\t\t\t\"enduring\": \"VERB\",\n\t\t\t\"haishen\": \"PROPN\",\n\t\t\t\"nearby\": \"ADV\",\n\t\t\t\"spying\": \"NOUN\",\n\t\t\t\"flowered\": \"ADJ\",\n\t\t\t\"du\": \"PROPN\",\n\t\t\t\"overtook\": \"VERB\",\n\t\t\t\"cope\": \"VERB\",\n\t\t\t\"linens\": \"NOUN\",\n\t\t\t\"msa\": \"PROPN\",\n\t\t\t\"vercellotti\": \"PROPN\",\n\t\t\t\"soundtrack\": \"NOUN\",\n\t\t\t\"odihr\": \"PROPN\",\n\t\t\t\"wheat\": \"NOUN\",\n\t\t\t\"1891\": \"NUM\",\n\t\t\t\"defeating\": \"VERB\",\n\t\t\t\"subway\": \"NOUN\",\n\t\t\t\"desisted\": \"ADJ\",\n\t\t\t\"petersburg\": \"PROPN\",\n\t\t\t\"unsteady\": \"ADJ\",\n\t\t\t\"clans\": \"NOUN\",\n\t\t\t\"stunt\": \"NOUN\",\n\t\t\t\"http://www.adventurehobbycraft.com/products/hobby_craft_supplies.html#metal\": \"PROPN\",\n\t\t\t\"http://washington.hyatt.com/wasgh/index.html\": \"PROPN\",\n\t\t\t\"straightforward\": \"ADJ\",\n\t\t\t\"4861\": \"NUM\",\n\t\t\t\"thuma\": \"PROPN\",\n\t\t\t\"southeast\": \"PROPN\",\n\t\t\t\"guest\": \"NOUN\",\n\t\t\t\"fung\": \"PROPN\",\n\t\t\t\"whoooooo\": \"PRON\",\n\t\t\t\"qualitative\": \"ADJ\",\n\t\t\t\"domestic\": \"ADJ\",\n\t\t\t\"dog\": \"NOUN\",\n\t\t\t\"mid-september\": \"PROPN\",\n\t\t\t\"axel\": \"PROPN\",\n\t\t\t\"russia\": \"PROPN\",\n\t\t\t\"utterance\": \"NOUN\",\n\t\t\t\"tanya\": \"PROPN\",\n\t\t\t\"ready\": \"ADJ\",\n\t\t\t\"wiggle\": \"NOUN\",\n\t\t\t\"mollifying\": \"VERB\",\n\t\t\t\"hirier\": \"VERB\",\n\t\t\t\"councillor\": \"NOUN\",\n\t\t\t\"points\": \"NOUN\",\n\t\t\t\"historical\": \"ADJ\",\n\t\t\t\"glyphs\": \"NOUN\",\n\t\t\t\"rove\": \"PROPN\",\n\t\t\t\"3-1663\": \"NUM\",\n\t\t\t\"consists\": \"VERB\",\n\t\t\t\"200,987.33\": \"NUM\",\n\t\t\t\"skincare\": \"NOUN\",\n\t\t\t\"examine\": \"VERB\",\n\t\t\t\"arise\": \"VERB\",\n\t\t\t\"dentist\": \"NOUN\",\n\t\t\t\"acclaimed\": \"ADJ\",\n\t\t\t\"doorstep\": \"NOUN\",\n\t\t\t\"listing\": \"PROPN\",\n\t\t\t\"boyfriend\": \"NOUN\",\n\t\t\t\"coincided\": \"VERB\",\n\t\t\t\"mclean\": \"PROPN\",\n\t\t\t\"malfunctioned\": \"VERB\",\n\t\t\t\"s&s\": \"NOUN\",\n\t\t\t\"ventilator\": \"NOUN\",\n\t\t\t\"hickies\": \"NOUN\",\n\t\t\t\"videoconference\": \"NOUN\",\n\t\t\t\"protects\": \"VERB\",\n\t\t\t\"engaged\": \"VERB\",\n\t\t\t\"scenes\": \"NOUN\",\n\t\t\t\"doubts\": \"NOUN\",\n\t\t\t\"anyway\": \"ADV\",\n\t\t\t\"pastries\": \"NOUN\",\n\t\t\t\"y-\": \"INTJ\",\n\t\t\t\"kazan\": \"PROPN\",\n\t\t\t\"slightly\": \"ADV\",\n\t\t\t\"viognier\": \"PROPN\",\n\t\t\t\"prescott\": \"PROPN\",\n\t\t\t\"podcasters\": \"NOUN\",\n\t\t\t\"magnification\": \"NOUN\",\n\t\t\t\"gibbs\": \"PROPN\",\n\t\t\t\"novella\": \"NOUN\",\n\t\t\t\"jolfa\": \"PROPN\",\n\t\t\t\"bing\": \"PROPN\",\n\t\t\t\"abstractedly\": \"ADV\",\n\t\t\t\"water-melon\": \"NOUN\",\n\t\t\t\"marketed\": \"VERB\",\n\t\t\t\"dismembered\": \"VERB\",\n\t\t\t\"x33098\": \"NOUN\",\n\t\t\t\"strait\": \"PROPN\",\n\t\t\t\"cooled\": \"VERB\",\n\t\t\t\"babylon\": \"PROPN\",\n\t\t\t\"denominator\": \"NOUN\",\n\t\t\t\"setup\": \"NOUN\",\n\t\t\t\"colonies\": \"NOUN\",\n\t\t\t\"11/22/2000\": \"NUM\",\n\t\t\t\"forest\": \"NOUN\",\n\t\t\t\"tonight\": \"NOUN\",\n\t\t\t\"puc\": \"NOUN\",\n\t\t\t\"corn\": \"NOUN\",\n\t\t\t\"muscular\": \"ADJ\",\n\t\t\t\"notch\": \"NOUN\",\n\t\t\t\"wounding\": \"VERB\",\n\t\t\t\"county\": \"PROPN\",\n\t\t\t\"tying\": \"VERB\",\n\t\t\t\"certainty\": \"NOUN\",\n\t\t\t\"equation\": \"NOUN\",\n\t\t\t\"conforms\": \"VERB\",\n\t\t\t\"tanker\": \"NOUN\",\n\t\t\t\"prickly\": \"ADJ\",\n\t\t\t\"got\": \"VERB\",\n\t\t\t\"greenfield\": \"PROPN\",\n\t\t\t\"kerry\": \"PROPN\",\n\t\t\t\"blvd.\": \"PROPN\",\n\t\t\t\"intend\": \"VERB\",\n\t\t\t\"24.8\": \"NUM\",\n\t\t\t\"hers\": \"PRON\",\n\t\t\t\"locking\": \"VERB\",\n\t\t\t\"451\": \"NUM\",\n\t\t\t\"i-nick\": \"PROPN\",\n\t\t\t\"respectfully\": \"ADV\",\n\t\t\t\"inferiority\": \"NOUN\",\n\t\t\t\"sky\": \"NOUN\",\n\t\t\t\"partying\": \"VERB\",\n\t\t\t\"shrinking\": \"ADJ\",\n\t\t\t\"???????????????\": \"PUNCT\",\n\t\t\t\"rave\": \"NOUN\",\n\t\t\t\"grindstone\": \"NOUN\",\n\t\t\t\"advocate\": \"NOUN\",\n\t\t\t\"ld2d-#69336-1.xls\": \"NOUN\",\n\t\t\t\"crushed\": \"VERB\",\n\t\t\t\"2004\": \"NUM\",\n\t\t\t\"sculptures\": \"NOUN\",\n\t\t\t\"personnel\": \"NOUN\",\n\t\t\t\"d:\": \"SYM\",\n\t\t\t\"cis\": \"PROPN\",\n\t\t\t\"sweeper\": \"NOUN\",\n\t\t\t\"day\": \"NOUN\",\n\t\t\t\"necessities\": \"NOUN\",\n\t\t\t\"californians\": \"PROPN\",\n\t\t\t\"jiuquan\": \"PROPN\",\n\t\t\t\"mid-cities\": \"NOUN\",\n\t\t\t\"war-paint\": \"ADJ\",\n\t\t\t\"bremmer\": \"PROPN\",\n\t\t\t\"hasidim\": \"NOUN\",\n\t\t\t\"lensey\": \"PROPN\",\n\t\t\t\"cm\": \"NOUN\",\n\t\t\t\"trespass\": \"NOUN\",\n\t\t\t\"slip\": \"VERB\",\n\t\t\t\"securities\": \"PROPN\",\n\t\t\t\"cufflinks\": \"NOUN\",\n\t\t\t\"pint\": \"NOUN\",\n\t\t\t\"qfs\": \"NOUN\",\n\t\t\t\"westchester\": \"PROPN\",\n\t\t\t\"coincidental\": \"ADJ\",\n\t\t\t\"sinks\": \"NOUN\",\n\t\t\t\"don\": \"PROPN\",\n\t\t\t\"overplayed\": \"VERB\",\n\t\t\t\"replies\": \"NOUN\",\n\t\t\t\"ripping\": \"VERB\",\n\t\t\t\"rom\": \"NOUN\",\n\t\t\t\"overlap\": \"NOUN\",\n\t\t\t\"organizers\": \"NOUN\",\n\t\t\t\"damasus\": \"PROPN\",\n\t\t\t\"suspected\": \"VERB\",\n\t\t\t\"aisle\": \"NOUN\",\n\t\t\t\"ulster\": \"PROPN\",\n\t\t\t\"ouster\": \"NOUN\",\n\t\t\t\"peasants\": \"NOUN\",\n\t\t\t\"arabia\": \"PROPN\",\n\t\t\t\"taunting\": \"VERB\",\n\t\t\t\"martinis\": \"PROPN\",\n\t\t\t\"taom\": \"PROPN\",\n\t\t\t\"epithet\": \"NOUN\",\n\t\t\t\"outbid\": \"VERB\",\n\t\t\t\"jigsaw\": \"NOUN\",\n\t\t\t\"ard\": \"PROPN\",\n\t\t\t\"counterattacked\": \"VERB\",\n\t\t\t\"salons\": \"NOUN\",\n\t\t\t\"valid\": \"ADJ\",\n\t\t\t\"resurrection\": \"NOUN\",\n\t\t\t\"01:02\": \"NUM\",\n\t\t\t\"chute\": \"NOUN\",\n\t\t\t\"seemed\": \"VERB\",\n\t\t\t\"running\": \"VERB\",\n\t\t\t\"appendix\": \"NOUN\",\n\t\t\t\"genius\": \"NOUN\",\n\t\t\t\"voldemort\": \"PROPN\",\n\t\t\t\"conveniently\": \"ADV\",\n\t\t\t\"achieving\": \"VERB\",\n\t\t\t\"sailed\": \"VERB\",\n\t\t\t\"tha\": \"DET\",\n\t\t\t\"premise\": \"NOUN\",\n\t\t\t\"bradley\": \"PROPN\",\n\t\t\t\"peg\": \"VERB\",\n\t\t\t\"crockett\": \"PROPN\",\n\t\t\t\"gaza\": \"PROPN\",\n\t\t\t\"belive\": \"VERB\",\n\t\t\t\"jogs\": \"VERB\",\n\t\t\t\"1962\": \"NUM\",\n\t\t\t\"volaris\": \"PROPN\",\n\t\t\t\"openness\": \"NOUN\",\n\t\t\t\"dancers\": \"NOUN\",\n\t\t\t\"manoel\": \"PROPN\",\n\t\t\t\"kitchens\": \"NOUN\",\n\t\t\t\"bramen\": \"PROPN\",\n\t\t\t\"grapes\": \"NOUN\",\n\t\t\t\"add\": \"VERB\",\n\t\t\t\"isdas\": \"PROPN\",\n\t\t\t\"rejuvenating\": \"ADJ\",\n\t\t\t\"veterinarian\": \"NOUN\",\n\t\t\t\"g.\": \"PROPN\",\n\t\t\t\"legato\": \"ADJ\",\n\t\t\t\"endow\": \"VERB\",\n\t\t\t\"pissed\": \"VERB\",\n\t\t\t\"sweared\": \"VERB\",\n\t\t\t\"regarding\": \"VERB\",\n\t\t\t\"markers\": \"NOUN\",\n\t\t\t\"medieval\": \"ADJ\",\n\t\t\t\"avoidance\": \"NOUN\",\n\t\t\t\"sketch\": \"NOUN\",\n\t\t\t\"smells\": \"VERB\",\n\t\t\t\"consolidation\": \"NOUN\",\n\t\t\t\"12:36\": \"NUM\",\n\t\t\t\"signified\": \"VERB\",\n\t\t\t\"detail\": \"NOUN\",\n\t\t\t\"neurological\": \"ADJ\",\n\t\t\t\"ubs\": \"NOUN\",\n\t\t\t\"wooded\": \"ADJ\",\n\t\t\t\"imam\": \"PROPN\",\n\t\t\t\"constructions\": \"PROPN\",\n\t\t\t\"becky\": \"PROPN\",\n\t\t\t\"declining\": \"VERB\",\n\t\t\t\"riddle\": \"NOUN\",\n\t\t\t\"football\": \"NOUN\",\n\t\t\t\"oxley\": \"PROPN\",\n\t\t\t\"11:42\": \"NUM\",\n\t\t\t\"grandure\": \"NOUN\",\n\t\t\t\"stress\": \"NOUN\",\n\t\t\t\"titled\": \"VERB\",\n\t\t\t\"rina\": \"PROPN\",\n\t\t\t\"feeding\": \"VERB\",\n\t\t\t\"dagger\": \"PROPN\",\n\t\t\t\"03/09/2000\": \"NUM\",\n\t\t\t\"thought\": \"VERB\",\n\t\t\t\"contempt\": \"VERB\",\n\t\t\t\"pt\": \"NOUN\",\n\t\t\t\"mound\": \"NOUN\",\n\t\t\t\"1780\": \"NUM\",\n\t\t\t\"evalu-\": \"VERB\",\n\t\t\t\"inherited\": \"VERB\",\n\t\t\t\"valueless\": \"ADJ\",\n\t\t\t\"militants\": \"NOUN\",\n\t\t\t\"delicous\": \"ADJ\",\n\t\t\t\"missiles\": \"NOUN\",\n\t\t\t\"birthdays\": \"NOUN\",\n\t\t\t\"observed\": \"VERB\",\n\t\t\t\"gingerbread\": \"NOUN\",\n\t\t\t\"transports\": \"VERB\",\n\t\t\t\"haas\": \"PROPN\",\n\t\t\t\"abandon\": \"VERB\",\n\t\t\t\"contemplates\": \"VERB\",\n\t\t\t\"evade\": \"VERB\",\n\t\t\t\"nylon\": \"NOUN\",\n\t\t\t\"appreciable\": \"ADJ\",\n\t\t\t\"pushy\": \"ADJ\",\n\t\t\t\"basketball\": \"NOUN\",\n\t\t\t\"2102\": \"NUM\",\n\t\t\t\"honor\": \"NOUN\",\n\t\t\t\"introduction\": \"NOUN\",\n\t\t\t\"keyword\": \"NOUN\",\n\t\t\t\"dilly\": \"VERB\",\n\t\t\t\"symbolized\": \"VERB\",\n\t\t\t\"projecting\": \"VERB\",\n\t\t\t\"jeremiah\": \"PROPN\",\n\t\t\t\"ev\": \"PRON\",\n\t\t\t\"percentage\": \"NOUN\",\n\t\t\t\"dorothy\": \"PROPN\",\n\t\t\t\"squish\": \"NOUN\",\n\t\t\t\"platt\": \"PROPN\",\n\t\t\t\"camp\": \"NOUN\",\n\t\t\t\"fadel\": \"PROPN\",\n\t\t\t\"fray\": \"NOUN\",\n\t\t\t\"refold\": \"VERB\",\n\t\t\t\"unlike\": \"ADP\",\n\t\t\t\"terminate\": \"VERB\",\n\t\t\t\"last\": \"ADJ\",\n\t\t\t\"non-nylon\": \"NOUN\",\n\t\t\t\"retriever\": \"NOUN\",\n\t\t\t\"parthenon\": \"PROPN\",\n\t\t\t\"plucker\": \"PROPN\",\n\t\t\t\"forwards\": \"ADV\",\n\t\t\t\"kaplan@iepa.com\": \"PROPN\",\n\t\t\t\"messiah\": \"PROPN\",\n\t\t\t\"sprague\": \"PROPN\",\n\t\t\t\"motivation\": \"NOUN\",\n\t\t\t\"genesis\": \"PROPN\",\n\t\t\t\"potash\": \"NOUN\",\n\t\t\t\"seafood\": \"NOUN\",\n\t\t\t\"crystallizes\": \"VERB\",\n\t\t\t\"t'\": \"PART\",\n\t\t\t\"fort\": \"PROPN\",\n\t\t\t\"attributing\": \"VERB\",\n\t\t\t\"rosa\": \"PROPN\",\n\t\t\t\"-s\": \"PART\",\n\t\t\t\"andy\": \"PROPN\",\n\t\t\t\"p.a.\": \"PROPN\",\n\t\t\t\"cupcakes\": \"NOUN\",\n\t\t\t\"eminent\": \"ADJ\",\n\t\t\t\"solomon\": \"PROPN\",\n\t\t\t\"survived\": \"VERB\",\n\t\t\t\"roof\": \"NOUN\",\n\t\t\t\"1611\": \"NUM\",\n\t\t\t\"grilles\": \"NOUN\",\n\t\t\t\"whiteboard\": \"NOUN\",\n\t\t\t\"ladies\": \"NOUN\",\n\t\t\t\"generators\": \"NOUN\",\n\t\t\t\"daughter\": \"NOUN\",\n\t\t\t\"wong\": \"PROPN\",\n\t\t\t\"ga\": \"PROPN\",\n\t\t\t\"buyers\": \"NOUN\",\n\t\t\t\"1721\": \"NUM\",\n\t\t\t\"cards\": \"NOUN\",\n\t\t\t\"cruel\": \"ADJ\",\n\t\t\t\"scripted\": \"VERB\",\n\t\t\t\"federal\": \"ADJ\",\n\t\t\t\"radiators\": \"NOUN\",\n\t\t\t\"enter\": \"VERB\",\n\t\t\t\"ramshackle\": \"ADJ\",\n\t\t\t\"genuine\": \"ADJ\",\n\t\t\t\"tm\": \"NOUN\",\n\t\t\t\"distributor\": \"NOUN\",\n\t\t\t\"bladder\": \"NOUN\",\n\t\t\t\"sexual\": \"ADJ\",\n\t\t\t\"staples\": \"NOUN\",\n\t\t\t\"bragging\": \"VERB\",\n\t\t\t\"redeploying\": \"VERB\",\n\t\t\t\"aggression\": \"NOUN\",\n\t\t\t\"compares\": \"VERB\",\n\t\t\t\"aid\": \"NOUN\",\n\t\t\t\"buffer\": \"VERB\",\n\t\t\t\"scotsman\": \"PROPN\",\n\t\t\t\"office\": \"NOUN\",\n\t\t\t\"gimp\": \"PROPN\",\n\t\t\t\"stormtroopers\": \"NOUN\",\n\t\t\t\"traveller\": \"PROPN\",\n\t\t\t\"artist\": \"NOUN\",\n\t\t\t\"politely\": \"ADV\",\n\t\t\t\"oppressed\": \"VERB\",\n\t\t\t\"title\": \"NOUN\",\n\t\t\t\"aztec\": \"PROPN\",\n\t\t\t\"minuscule\": \"ADJ\",\n\t\t\t\"polishing\": \"VERB\",\n\t\t\t\"ghetto\": \"NOUN\",\n\t\t\t\"flock\": \"NOUN\",\n\t\t\t\"refer\": \"VERB\",\n\t\t\t\"unpopular\": \"ADJ\",\n\t\t\t\"jurisdictions\": \"NOUN\",\n\t\t\t\"tasting\": \"NOUN\",\n\t\t\t\"rob\": \"PROPN\",\n\t\t\t\"alfa\": \"PROPN\",\n\t\t\t\"marcus\": \"PROPN\",\n\t\t\t\"threaten\": \"VERB\",\n\t\t\t\"now\": \"ADV\",\n\t\t\t\"campus\": \"NOUN\",\n\t\t\t\"dissipation\": \"NOUN\",\n\t\t\t\"destination\": \"NOUN\",\n\t\t\t\"compounding\": \"VERB\",\n\t\t\t\"stair\": \"NOUN\",\n\t\t\t\"spill\": \"VERB\",\n\t\t\t\"trent\": \"PROPN\",\n\t\t\t\"dorsey\": \"PROPN\",\n\t\t\t\"boston\": \"PROPN\",\n\t\t\t\"forge\": \"PROPN\",\n\t\t\t\"detection\": \"NOUN\",\n\t\t\t\"tamils\": \"PROPN\",\n\t\t\t\"homosexual\": \"ADJ\",\n\t\t\t\"fingerprints\": \"NOUN\",\n\t\t\t\"moll\": \"NOUN\",\n\t\t\t\"hellada\": \"PROPN\",\n\t\t\t\"sadr\": \"PROPN\",\n\t\t\t\"bludger\": \"NOUN\",\n\t\t\t\"zaman\": \"PROPN\",\n\t\t\t\"frothing\": \"VERB\",\n\t\t\t\"magician\": \"NOUN\",\n\t\t\t\"comforts\": \"NOUN\",\n\t\t\t\"tips\": \"NOUN\",\n\t\t\t\"multitude\": \"NOUN\",\n\t\t\t\"lv.\": \"VERB\",\n\t\t\t\"curiously\": \"ADV\",\n\t\t\t\"acted\": \"VERB\",\n\t\t\t\"stojic\": \"PROPN\",\n\t\t\t\"frolicking\": \"VERB\",\n\t\t\t\"sees\": \"VERB\",\n\t\t\t\"suppliers\": \"NOUN\",\n\t\t\t\"waits\": \"VERB\",\n\t\t\t\"mcmanus\": \"PROPN\",\n\t\t\t\"ha\": \"INTJ\",\n\t\t\t\"placing\": \"VERB\",\n\t\t\t\"shinning\": \"VERB\",\n\t\t\t\"preserves\": \"VERB\",\n\t\t\t\"nephew\": \"NOUN\",\n\t\t\t\"bray\": \"PROPN\",\n\t\t\t\"horrors\": \"NOUN\",\n\t\t\t\"editorial\": \"ADJ\",\n\t\t\t\"realtion\": \"NOUN\",\n\t\t\t\"dead\": \"ADJ\",\n\t\t\t\"clydesdales\": \"PROPN\",\n\t\t\t\"em-enro2.doc\": \"NOUN\",\n\t\t\t\"movement\": \"NOUN\",\n\t\t\t\"transformed\": \"VERB\",\n\t\t\t\"gel\": \"NOUN\",\n\t\t\t\"coarsely\": \"ADV\",\n\t\t\t\"male\": \"NOUN\",\n\t\t\t\"http://www.guardian.co.uk/obituaries/story/0,3604,1371372,00.html\": \"PROPN\",\n\t\t\t\"banned\": \"VERB\",\n\t\t\t\"accord\": \"NOUN\",\n\t\t\t\"columbine\": \"PROPN\",\n\t\t\t\"audit\": \"NOUN\",\n\t\t\t\"brighton\": \"PROPN\",\n\t\t\t\"4.7\": \"NUM\",\n\t\t\t\"inhabited\": \"VERB\",\n\t\t\t\"weekend\": \"NOUN\",\n\t\t\t\"lindsay\": \"PROPN\",\n\t\t\t\"locked\": \"VERB\",\n\t\t\t\"mostly\": \"ADV\",\n\t\t\t\"primetime\": \"PROPN\",\n\t\t\t\"charleston\": \"PROPN\",\n\t\t\t\"deliver\": \"VERB\",\n\t\t\t\"unsettling\": \"ADJ\",\n\t\t\t\"adpl\": \"PROPN\",\n\t\t\t\"encircled\": \"VERB\",\n\t\t\t\"unnecessarily\": \"ADV\",\n\t\t\t\"bradford\": \"PROPN\",\n\t\t\t\"operates\": \"VERB\",\n\t\t\t\"detentions\": \"NOUN\",\n\t\t\t\"regalia\": \"NOUN\",\n\t\t\t\"poses\": \"NOUN\",\n\t\t\t\"fce\": \"PROPN\",\n\t\t\t\"tug\": \"NOUN\",\n\t\t\t\"runflat\": \"NOUN\",\n\t\t\t\"requiring\": \"VERB\",\n\t\t\t\"exquisitely\": \"ADV\",\n\t\t\t\"cancelled\": \"VERB\",\n\t\t\t\"lemonade\": \"NOUN\",\n\t\t\t\"panera\": \"PROPN\",\n\t\t\t\"synopsis\": \"PROPN\",\n\t\t\t\"bargain\": \"VERB\",\n\t\t\t\"rapids\": \"NOUN\",\n\t\t\t\"sequel\": \"NOUN\",\n\t\t\t\"grapples\": \"VERB\",\n\t\t\t\"nano\": \"NOUN\",\n\t\t\t\"freeways\": \"NOUN\",\n\t\t\t\"lines\": \"NOUN\",\n\t\t\t\"manogue\": \"PROPN\",\n\t\t\t\"chilling\": \"VERB\",\n\t\t\t\"rcommended\": \"VERB\",\n\t\t\t\"olive\": \"NOUN\",\n\t\t\t\"souvlaki\": \"NOUN\",\n\t\t\t\"irritated\": \"VERB\",\n\t\t\t\"chase\": \"NOUN\",\n\t\t\t\"basters\": \"NOUN\",\n\t\t\t\"flogging\": \"VERB\",\n\t\t\t\"unorganized\": \"ADJ\",\n\t\t\t\"sympathy\": \"NOUN\",\n\t\t\t\"polarization\": \"NOUN\",\n\t\t\t\"boss\": \"NOUN\",\n\t\t\t\"rated\": \"VERB\",\n\t\t\t\"cayman\": \"PROPN\",\n\t\t\t\"specialty\": \"NOUN\",\n\t\t\t\"torn\": \"ADJ\",\n\t\t\t\"harming\": \"VERB\",\n\t\t\t\"stained\": \"VERB\",\n\t\t\t\"combinations\": \"NOUN\",\n\t\t\t\"mcallister\": \"PROPN\",\n\t\t\t\"blinks\": \"VERB\",\n\t\t\t\"derailing\": \"NOUN\",\n\t\t\t\"loathing\": \"NOUN\",\n\t\t\t\"fearless\": \"ADJ\",\n\t\t\t\"bleeding\": \"VERB\",\n\t\t\t\"ninevah\": \"PROPN\",\n\t\t\t\"novelists\": \"NOUN\",\n\t\t\t\"rhee\": \"PROPN\",\n\t\t\t\"sez\": \"VERB\",\n\t\t\t\"blames\": \"VERB\",\n\t\t\t\"deliberately\": \"ADV\",\n\t\t\t\"sustains\": \"VERB\",\n\t\t\t\"ice\": \"NOUN\",\n\t\t\t\"nasim\": \"PROPN\",\n\t\t\t\"nx3\": \"NOUN\",\n\t\t\t\"repainted\": \"VERB\",\n\t\t\t\"whomever\": \"PRON\",\n\t\t\t\"terminated\": \"VERB\",\n\t\t\t\"hazy\": \"ADJ\",\n\t\t\t\"consistantly\": \"ADV\",\n\t\t\t\"banquet\": \"NOUN\",\n\t\t\t\"joke\": \"NOUN\",\n\t\t\t\"learner\": \"NOUN\",\n\t\t\t\"waterway\": \"NOUN\",\n\t\t\t\"subpar\": \"ADJ\",\n\t\t\t\"mouth\": \"NOUN\",\n\t\t\t\"24\": \"NUM\",\n\t\t\t\"breed\": \"NOUN\",\n\t\t\t\"specks\": \"NOUN\",\n\t\t\t\"biochemical\": \"ADJ\",\n\t\t\t\"participate\": \"VERB\",\n\t\t\t\"failing\": \"VERB\",\n\t\t\t\"prerogative\": \"NOUN\",\n\t\t\t\"understaffing\": \"NOUN\",\n\t\t\t\"marketplaces\": \"NOUN\",\n\t\t\t\"peppery\": \"ADJ\",\n\t\t\t\"appellation\": \"NOUN\",\n\t\t\t\"rebuilt\": \"VERB\",\n\t\t\t\"northeast\": \"PROPN\",\n\t\t\t\"flash\": \"NOUN\",\n\t\t\t\"idiomaticity\": \"PROPN\",\n\t\t\t\"embarrassing\": \"ADJ\",\n\t\t\t\"adventures\": \"NOUN\",\n\t\t\t\"reflector\": \"NOUN\",\n\t\t\t\"blackmail\": \"NOUN\",\n\t\t\t\"prussia\": \"PROPN\",\n\t\t\t\"beaters\": \"NOUN\",\n\t\t\t\"makos\": \"PROPN\",\n\t\t\t\"monastic\": \"ADJ\",\n\t\t\t\"offered\": \"VERB\",\n\t\t\t\"isaac\": \"PROPN\",\n\t\t\t\"http://www.goldentriangleindia.com/delhi/hotels-in-delhi.html\": \"PROPN\",\n\t\t\t\"dawson\": \"PROPN\",\n\t\t\t\"interests\": \"NOUN\",\n\t\t\t\"sequences\": \"NOUN\",\n\t\t\t\"indentured\": \"VERB\",\n\t\t\t\"cacao\": \"NOUN\",\n\t\t\t\"misalette\": \"PROPN\",\n\t\t\t\"rrly\": \"ADV\",\n\t\t\t\"mount\": \"PROPN\",\n\t\t\t\"forensic\": \"PROPN\",\n\t\t\t\"eggnog\": \"NOUN\",\n\t\t\t\"endure\": \"VERB\",\n\t\t\t\"ames\": \"PROPN\",\n\t\t\t\"always\": \"ADV\",\n\t\t\t\"lawman\": \"NOUN\",\n\t\t\t\"dadaniela@gmail.com\": \"PROPN\",\n\t\t\t\"emission\": \"NOUN\",\n\t\t\t\"tout\": \"NOUN\",\n\t\t\t\"unhappiness\": \"NOUN\",\n\t\t\t\"ali\": \"PROPN\",\n\t\t\t\"charming\": \"ADJ\",\n\t\t\t\"border\": \"NOUN\",\n\t\t\t\"substitutes\": \"NOUN\",\n\t\t\t\"giving\": \"VERB\",\n\t\t\t\"terry\": \"PROPN\",\n\t\t\t\"characterize\": \"VERB\",\n\t\t\t\"germany\": \"PROPN\",\n\t\t\t\"questioning\": \"VERB\",\n\t\t\t\"affect\": \"VERB\",\n\t\t\t\"lust\": \"NOUN\",\n\t\t\t\"hafijj\": \"PROPN\",\n\t\t\t\"ended\": \"VERB\",\n\t\t\t\"terraces\": \"NOUN\",\n\t\t\t\"clings\": \"VERB\",\n\t\t\t\"carbonyl\": \"NOUN\",\n\t\t\t\"len\": \"PROPN\",\n\t\t\t\"chrysler\": \"PROPN\",\n\t\t\t\"triple\": \"ADJ\",\n\t\t\t\"refrigerate\": \"VERB\",\n\t\t\t\"renal\": \"ADJ\",\n\t\t\t\"bill\": \"NOUN\",\n\t\t\t\"sleeveless\": \"ADJ\",\n\t\t\t\"baksheesh\": \"NOUN\",\n\t\t\t\"doorknob\": \"NOUN\",\n\t\t\t\"neptune\": \"PROPN\",\n\t\t\t\"1.800.233.1234\": \"NUM\",\n\t\t\t\"alekseyevna\": \"PROPN\",\n\t\t\t\"toying\": \"VERB\",\n\t\t\t\"extremist\": \"NOUN\",\n\t\t\t\"altering\": \"VERB\",\n\t\t\t\"stephenville\": \"PROPN\",\n\t\t\t\"northbound\": \"ADJ\",\n\t\t\t\"entreat\": \"VERB\",\n\t\t\t\"picket\": \"VERB\",\n\t\t\t\"eau\": \"PROPN\",\n\t\t\t\"11:30\": \"NUM\",\n\t\t\t\"contested\": \"VERB\",\n\t\t\t\"tori\": \"PROPN\",\n\t\t\t\"esimien@nisource.com\": \"PROPN\",\n\t\t\t\"device\": \"NOUN\",\n\t\t\t\"checks\": \"NOUN\",\n\t\t\t\"chunked\": \"VERB\",\n\t\t\t\"palk\": \"PROPN\",\n\t\t\t\"emigration\": \"NOUN\",\n\t\t\t\"alaskan\": \"ADJ\",\n\t\t\t\"bidding\": \"VERB\",\n\t\t\t\"auditorium\": \"PROPN\",\n\t\t\t\"collaboration\": \"NOUN\",\n\t\t\t\"preserved\": \"VERB\",\n\t\t\t\"microscopically\": \"ADV\",\n\t\t\t\"browns\": \"PROPN\",\n\t\t\t\"accouterments\": \"NOUN\",\n\t\t\t\"ideologized\": \"ADJ\",\n\t\t\t\"shenzhou\": \"PROPN\",\n\t\t\t\"popularize\": \"VERB\",\n\t\t\t\"flag-pole\": \"NOUN\",\n\t\t\t\"assuage\": \"VERB\",\n\t\t\t\"hobbit\": \"PROPN\",\n\t\t\t\"result\": \"NOUN\",\n\t\t\t\"lau\": \"PROPN\",\n\t\t\t\"dprk\": \"PROPN\",\n\t\t\t\"reps\": \"NOUN\",\n\t\t\t\"emily\": \"PROPN\",\n\t\t\t\"jammu\": \"PROPN\",\n\t\t\t\"3rd\": \"ADJ\",\n\t\t\t\"environment\": \"NOUN\",\n\t\t\t\"id\": \"NOUN\",\n\t\t\t\"glaze\": \"NOUN\",\n\t\t\t\"bombed\": \"VERB\",\n\t\t\t\"westphal\": \"PROPN\",\n\t\t\t\"dusk\": \"NOUN\",\n\t\t\t\"dwibbling\": \"VERB\",\n\t\t\t\"co-founder\": \"NOUN\",\n\t\t\t\"240,000\": \"NUM\",\n\t\t\t\"'d\": \"AUX\",\n\t\t\t\"hop\": \"VERB\",\n\t\t\t\"standard\": \"ADJ\",\n\t\t\t\"nurses\": \"NOUN\",\n\t\t\t\"times\": \"NOUN\",\n\t\t\t\"retrofitting\": \"VERB\",\n\t\t\t\"surprising\": \"ADJ\",\n\t\t\t\"opals\": \"NOUN\",\n\t\t\t\"sundry\": \"ADJ\",\n\t\t\t\"klingberg\": \"PROPN\",\n\t\t\t\"attorneys\": \"NOUN\",\n\t\t\t\"warming\": \"NOUN\",\n\t\t\t\"tempted\": \"VERB\",\n\t\t\t\"chimes\": \"PROPN\",\n\t\t\t\"sherrar\": \"PROPN\",\n\t\t\t\"prayerfully\": \"ADV\",\n\t\t\t\"wicked\": \"ADJ\",\n\t\t\t\"kai\": \"PROPN\",\n\t\t\t\"danger\": \"NOUN\",\n\t\t\t\"sell\": \"VERB\",\n\t\t\t\"aloe\": \"NOUN\",\n\t\t\t\"knitters\": \"NOUN\",\n\t\t\t\"stillmans\": \"PROPN\",\n\t\t\t\"forkfuls\": \"NOUN\",\n\t\t\t\"ouija\": \"PROPN\",\n\t\t\t\"sap\": \"NOUN\",\n\t\t\t\"interrupting\": \"VERB\",\n\t\t\t\"brass\": \"NOUN\",\n\t\t\t\"methodically\": \"ADV\",\n\t\t\t\"superlative\": \"ADJ\",\n\t\t\t\"richards\": \"PROPN\",\n\t\t\t\"gradually\": \"ADV\",\n\t\t\t\"clues\": \"NOUN\",\n\t\t\t\"complicit\": \"ADJ\",\n\t\t\t\"coiled\": \"ADJ\",\n\t\t\t\"lettuce\": \"NOUN\",\n\t\t\t\"leaf\": \"NOUN\",\n\t\t\t\"stuffed\": \"ADJ\",\n\t\t\t\"herd\": \"NOUN\",\n\t\t\t\"subdomains\": \"NOUN\",\n\t\t\t\"shop-window\": \"NOUN\",\n\t\t\t\"interaction\": \"NOUN\",\n\t\t\t\"kent\": \"PROPN\",\n\t\t\t\"looking\": \"VERB\",\n\t\t\t\"ottley\": \"PROPN\",\n\t\t\t\"midterm\": \"NOUN\",\n\t\t\t\"danly\": \"PROPN\",\n\t\t\t\"unemployent\": \"NOUN\",\n\t\t\t\"glittering\": \"VERB\",\n\t\t\t\"dough\": \"NOUN\",\n\t\t\t\"fed\": \"VERB\",\n\t\t\t\"tca\": \"NOUN\",\n\t\t\t\"open\": \"ADJ\",\n\t\t\t\"potatoes\": \"NOUN\",\n\t\t\t\"point\": \"NOUN\",\n\t\t\t\"spirito\": \"PROPN\",\n\t\t\t\"through\": \"ADP\",\n\t\t\t\"liability\": \"NOUN\",\n\t\t\t\"orderly\": \"ADJ\",\n\t\t\t\"objectless\": \"ADJ\",\n\t\t\t\"trademarking\": \"NOUN\",\n\t\t\t\"drying\": \"NOUN\",\n\t\t\t\"malevich\": \"PROPN\",\n\t\t\t\"vacation\": \"NOUN\",\n\t\t\t\"aspiration\": \"NOUN\",\n\t\t\t\"untalented\": \"ADJ\",\n\t\t\t\"holistic\": \"ADJ\",\n\t\t\t\"scenery\": \"NOUN\",\n\t\t\t\"2051\": \"NUM\",\n\t\t\t\"iroq\": \"PROPN\",\n\t\t\t\"beirut\": \"PROPN\",\n\t\t\t\"declivity\": \"NOUN\",\n\t\t\t\"-%\": \"NOUN\",\n\t\t\t\"dʒəˈroʊm\": \"PROPN\",\n\t\t\t\"laurie.ellis@enron.com\": \"PROPN\",\n\t\t\t\"nedre\": \"PROPN\",\n\t\t\t\"ridiculous\": \"ADJ\",\n\t\t\t\"phonology\": \"NOUN\",\n\t\t\t\"reject\": \"VERB\",\n\t\t\t\"astonished\": \"ADJ\",\n\t\t\t\"organisation\": \"NOUN\",\n\t\t\t\"wentz\": \"PROPN\",\n\t\t\t\"sushi\": \"NOUN\",\n\t\t\t\"lame\": \"ADJ\",\n\t\t\t\"haden\": \"PROPN\",\n\t\t\t\"debts\": \"NOUN\",\n\t\t\t\"decent\": \"ADJ\",\n\t\t\t\"smosh\": \"PROPN\",\n\t\t\t\"geno\": \"PROPN\",\n\t\t\t\"kamala\": \"PROPN\",\n\t\t\t\"schoolrooms\": \"NOUN\",\n\t\t\t\"thy\": \"PRON\",\n\t\t\t\"expiration\": \"NOUN\",\n\t\t\t\"impolite\": \"ADJ\",\n\t\t\t\"dutton\": \"PROPN\",\n\t\t\t\"chittagong\": \"PROPN\",\n\t\t\t\"blunder\": \"NOUN\",\n\t\t\t\"handicap\": \"NOUN\",\n\t\t\t\"decrease\": \"NOUN\",\n\t\t\t\"detached\": \"VERB\",\n\t\t\t\"suicide\": \"NOUN\",\n\t\t\t\"transferability\": \"NOUN\",\n\t\t\t\"cardenas\": \"PROPN\",\n\t\t\t\"clubhouse\": \"NOUN\",\n\t\t\t\"complements\": \"VERB\",\n\t\t\t\"nests\": \"NOUN\",\n\t\t\t\"mutual\": \"ADJ\",\n\t\t\t\"irony\": \"NOUN\",\n\t\t\t\"janet\": \"PROPN\",\n\t\t\t\"perimeter\": \"NOUN\",\n\t\t\t\"pays\": \"VERB\",\n\t\t\t\"propping\": \"VERB\",\n\t\t\t\"guarentee\": \"NOUN\",\n\t\t\t\"regulated\": \"VERB\",\n\t\t\t\"co$t\": \"VERB\",\n\t\t\t\"pals\": \"NOUN\",\n\t\t\t\"multi-national\": \"ADJ\",\n\t\t\t\"hierarchical\": \"ADJ\",\n\t\t\t\"reduced\": \"VERB\",\n\t\t\t\"thurber\": \"PROPN\",\n\t\t\t\"yheggy\": \"PROPN\",\n\t\t\t\"staring\": \"VERB\",\n\t\t\t\"lethal\": \"ADJ\",\n\t\t\t\".348\": \"NUM\",\n\t\t\t\"dumb\": \"ADJ\",\n\t\t\t\"tolerate\": \"VERB\",\n\t\t\t\"at\": \"ADP\",\n\t\t\t\"ants\": \"NOUN\",\n\t\t\t\"necks\": \"NOUN\",\n\t\t\t\"history\": \"NOUN\",\n\t\t\t\"wats\": \"NOUN\",\n\t\t\t\"motto\": \"NOUN\",\n\t\t\t\"tin\": \"NOUN\",\n\t\t\t\"blinds\": \"NOUN\",\n\t\t\t\"flowed\": \"VERB\",\n\t\t\t\"scaling\": \"NOUN\",\n\t\t\t\"1968\": \"NUM\",\n\t\t\t\"pub\": \"NOUN\",\n\t\t\t\"eh\": \"INTJ\",\n\t\t\t\"relatedly\": \"ADV\",\n\t\t\t\"cca-15\": \"PROPN\",\n\t\t\t\"deity\": \"NOUN\",\n\t\t\t\"1.024\": \"NUM\",\n\t\t\t\"goodwill\": \"PROPN\",\n\t\t\t\"recount\": \"NOUN\",\n\t\t\t\"orissa\": \"PROPN\",\n\t\t\t\"enhancements\": \"NOUN\",\n\t\t\t\"trios\": \"NOUN\",\n\t\t\t\"jumps\": \"VERB\",\n\t\t\t\"abuses\": \"NOUN\",\n\t\t\t\"bottles\": \"NOUN\",\n\t\t\t\"poetically\": \"ADV\",\n\t\t\t\"due\": \"ADJ\",\n\t\t\t\"unnamed\": \"ADJ\",\n\t\t\t\"borders\": \"NOUN\",\n\t\t\t\"39938\": \"NUM\",\n\t\t\t\"samuel\": \"PROPN\",\n\t\t\t\"gnaw\": \"VERB\",\n\t\t\t\"w-\": \"INTJ\",\n\t\t\t\"fluted\": \"ADJ\",\n\t\t\t\"16:29\": \"NUM\",\n\t\t\t\"tobacco\": \"NOUN\",\n\t\t\t\"moda\": \"PROPN\",\n\t\t\t\"mercury\": \"NOUN\",\n\t\t\t\"marvels\": \"NOUN\",\n\t\t\t\"gibson\": \"PROPN\",\n\t\t\t\"workshops\": \"NOUN\",\n\t\t\t\"trackless\": \"ADJ\",\n\t\t\t\"damn\": \"ADV\",\n\t\t\t\"unimpeded\": \"ADJ\",\n\t\t\t\"fury\": \"NOUN\",\n\t\t\t\"burke\": \"PROPN\",\n\t\t\t\"analytique\": \"PROPN\",\n\t\t\t\"bowel\": \"NOUN\",\n\t\t\t\"rapacious\": \"ADJ\",\n\t\t\t\"language\": \"NOUN\",\n\t\t\t\"livorno\": \"PROPN\",\n\t\t\t\"disorders\": \"NOUN\",\n\t\t\t\"attackers\": \"NOUN\",\n\t\t\t\"deliteful\": \"ADJ\",\n\t\t\t\"taut\": \"ADJ\",\n\t\t\t\"conservatoire\": \"PROPN\",\n\t\t\t\"havelock\": \"PROPN\",\n\t\t\t\"broaden\": \"VERB\",\n\t\t\t\"hds\": \"PROPN\",\n\t\t\t\"toronto\": \"PROPN\",\n\t\t\t\"maroni\": \"PROPN\",\n\t\t\t\"romantic\": \"ADJ\",\n\t\t\t\"swallow\": \"VERB\",\n\t\t\t\"occasioned\": \"VERB\",\n\t\t\t\"worht\": \"ADJ\",\n\t\t\t\"compassion\": \"NOUN\",\n\t\t\t\"leainne\": \"PROPN\",\n\t\t\t\"steichen\": \"PROPN\",\n\t\t\t\"streaks\": \"NOUN\",\n\t\t\t\"quartile\": \"NOUN\",\n\t\t\t\"knickers\": \"NOUN\",\n\t\t\t\"twenty-four\": \"NUM\",\n\t\t\t\"merits\": \"NOUN\",\n\t\t\t\"moderator\": \"NOUN\",\n\t\t\t\"knowledgable\": \"ADJ\",\n\t\t\t\"brilliance\": \"NOUN\",\n\t\t\t\"impulse\": \"NOUN\",\n\t\t\t\"cliff\": \"NOUN\",\n\t\t\t\"partnerships\": \"NOUN\",\n\t\t\t\"trousers\": \"NOUN\",\n\t\t\t\"tickets\": \"NOUN\",\n\t\t\t\"mlb\": \"PROPN\",\n\t\t\t\"wonderland\": \"NOUN\",\n\t\t\t\"158,000\": \"NUM\",\n\t\t\t\"1940\": \"NUM\",\n\t\t\t\"bending\": \"VERB\",\n\t\t\t\"migrains\": \"NOUN\",\n\t\t\t\"constitute\": \"VERB\",\n\t\t\t\"06:00:56\": \"NUM\",\n\t\t\t\"inscribed\": \"VERB\",\n\t\t\t\"turbine\": \"NOUN\",\n\t\t\t\"heidenreich\": \"PROPN\",\n\t\t\t\"instant\": \"ADJ\",\n\t\t\t\"cfc\": \"NOUN\",\n\t\t\t\"electrical\": \"ADJ\",\n\t\t\t\"muscovy\": \"PROPN\",\n\t\t\t\"islamophobia\": \"NOUN\",\n\t\t\t\"minchah\": \"PROPN\",\n\t\t\t\"ingested\": \"VERB\",\n\t\t\t\"actor\": \"NOUN\",\n\t\t\t\"bavelier\": \"PROPN\",\n\t\t\t\"oslo\": \"PROPN\",\n\t\t\t\"deploy\": \"VERB\",\n\t\t\t\"keen\": \"ADJ\",\n\t\t\t\"ja\": \"PROPN\",\n\t\t\t\"bathed\": \"VERB\",\n\t\t\t\"ominously\": \"ADV\",\n\t\t\t\"waggled\": \"VERB\",\n\t\t\t\"ansi\": \"PROPN\",\n\t\t\t\"160.00\": \"NUM\",\n\t\t\t\"kpa\": \"PROPN\",\n\t\t\t\"translating\": \"VERB\",\n\t\t\t\".........\": \"PUNCT\",\n\t\t\t\"best\": \"ADJ\",\n\t\t\t\"lying\": \"VERB\",\n\t\t\t\"03:11\": \"NUM\",\n\t\t\t\"http://www-formal.stanford.edu/jmc/progress/chernobyl.html\": \"PROPN\",\n\t\t\t\"chilly\": \"ADJ\",\n\t\t\t\"katie\": \"PROPN\",\n\t\t\t\"voltage\": \"PROPN\",\n\t\t\t\"misconception\": \"NOUN\",\n\t\t\t\"61\": \"NUM\",\n\t\t\t\"glen\": \"PROPN\",\n\t\t\t\"crossings\": \"NOUN\",\n\t\t\t\"greece\": \"PROPN\",\n\t\t\t\"roll\": \"NOUN\",\n\t\t\t\"abd\": \"PROPN\",\n\t\t\t\"religiously\": \"ADV\",\n\t\t\t\"informed\": \"VERB\",\n\t\t\t\"spirits\": \"NOUN\",\n\t\t\t\"oval\": \"ADJ\",\n\t\t\t\"1504\": \"NUM\",\n\t\t\t\"weakening\": \"VERB\",\n\t\t\t\"recreation\": \"NOUN\",\n\t\t\t\"epic\": \"ADJ\",\n\t\t\t\"memorized\": \"VERB\",\n\t\t\t\"matte\": \"ADJ\",\n\t\t\t\"inexperienced\": \"ADJ\",\n\t\t\t\"overcoat\": \"NOUN\",\n\t\t\t\"4434\": \"NUM\",\n\t\t\t\"emercom\": \"PROPN\",\n\t\t\t\"chelsea\": \"PROPN\",\n\t\t\t\"loans\": \"NOUN\",\n\t\t\t\"pagodas\": \"NOUN\",\n\t\t\t\"colombo\": \"PROPN\",\n\t\t\t\"yacks\": \"VERB\",\n\t\t\t\"xsd\": \"PROPN\",\n\t\t\t\"odds\": \"NOUN\",\n\t\t\t\"anastacio\": \"PROPN\",\n\t\t\t\"1,8\": \"NUM\",\n\t\t\t\"fishing\": \"NOUN\",\n\t\t\t\"gown\": \"NOUN\",\n\t\t\t\"conferences\": \"NOUN\",\n\t\t\t\"roomers\": \"NOUN\",\n\t\t\t\"regimes\": \"NOUN\",\n\t\t\t\"begs\": \"VERB\",\n\t\t\t\"refused\": \"VERB\",\n\t\t\t\"alt.religion.scientology\": \"NOUN\",\n\t\t\t\"vacuous\": \"ADJ\",\n\t\t\t\"hemispheres\": \"NOUN\",\n\t\t\t\"naturalis\": \"PROPN\",\n\t\t\t\"charity\": \"NOUN\",\n\t\t\t\"projected\": \"VERB\",\n\t\t\t\"garden\": \"NOUN\",\n\t\t\t\"shatter\": \"VERB\",\n\t\t\t\"104\": \"NUM\",\n\t\t\t\"leahy\": \"PROPN\",\n\t\t\t\"undergraduate\": \"ADJ\",\n\t\t\t\"battlefield\": \"NOUN\",\n\t\t\t\"polaroids\": \"NOUN\",\n\t\t\t\"ascent\": \"NOUN\",\n\t\t\t\"ucas\": \"PROPN\",\n\t\t\t\"acidic\": \"ADJ\",\n\t\t\t\"woody\": \"PROPN\",\n\t\t\t\"reassured\": \"VERB\",\n\t\t\t\"i\": \"PRON\",\n\t\t\t\"kilinochchi\": \"PROPN\",\n\t\t\t\"chatted\": \"VERB\",\n\t\t\t\"disentangle\": \"VERB\",\n\t\t\t\"1002`s\": \"NOUN\",\n\t\t\t\"allocation\": \"NOUN\",\n\t\t\t\"dabbling\": \"VERB\",\n\t\t\t\"merger\": \"NOUN\",\n\t\t\t\"1.8\": \"NUM\",\n\t\t\t\"civic\": \"ADJ\",\n\t\t\t\"expunging\": \"VERB\",\n\t\t\t\"suppressed\": \"VERB\",\n\t\t\t\"relaxes\": \"VERB\",\n\t\t\t\"bozos\": \"NOUN\",\n\t\t\t\"quest\": \"NOUN\",\n\t\t\t\"theater\": \"NOUN\",\n\t\t\t\"introduce\": \"VERB\",\n\t\t\t\"captains\": \"NOUN\",\n\t\t\t\"04/28/2000\": \"NUM\",\n\t\t\t\"epi\": \"PROPN\",\n\t\t\t\"mormon\": \"ADJ\",\n\t\t\t\"---------------------------------------------------------------------\": \"PUNCT\",\n\t\t\t\"lifestyles\": \"NOUN\",\n\t\t\t\"robots\": \"NOUN\",\n\t\t\t\"div.\": \"VERB\",\n\t\t\t\"vests\": \"NOUN\",\n\t\t\t\"trying\": \"VERB\",\n\t\t\t\"jermeier@earthlink.net\": \"PROPN\",\n\t\t\t\"brakes\": \"NOUN\",\n\t\t\t\"platform\": \"NOUN\",\n\t\t\t\"512\": \"NUM\",\n\t\t\t\"reffered\": \"VERB\",\n\t\t\t\"outlined\": \"VERB\",\n\t\t\t\"cutter\": \"NOUN\",\n\t\t\t\"whiff\": \"NOUN\",\n\t\t\t\"bomb\": \"NOUN\",\n\t\t\t\"nonprofit\": \"ADJ\",\n\t\t\t\"approved\": \"VERB\",\n\t\t\t\"buster\": \"NOUN\",\n\t\t\t\"buddha\": \"PROPN\",\n\t\t\t\"cyprian\": \"PROPN\",\n\t\t\t\"artistic\": \"ADJ\",\n\t\t\t\"floyd\": \"PROPN\",\n\t\t\t\"receipts\": \"NOUN\",\n\t\t\t\"tissues\": \"NOUN\",\n\t\t\t\"oregon\": \"PROPN\",\n\t\t\t\"reworded\": \"VERB\",\n\t\t\t\"yourselves\": \"PRON\",\n\t\t\t\"force\": \"NOUN\",\n\t\t\t\"insured\": \"VERB\",\n\t\t\t\"disorientation\": \"NOUN\",\n\t\t\t\"linna\": \"PROPN\",\n\t\t\t\"common\": \"ADJ\",\n\t\t\t\"aztecs\": \"PROPN\",\n\t\t\t\"15071\": \"NUM\",\n\t\t\t\"folly\": \"NOUN\",\n\t\t\t\"amuse\": \"NOUN\",\n\t\t\t\"ammunition\": \"NOUN\",\n\t\t\t\"same\": \"ADJ\",\n\t\t\t\"categorization\": \"NOUN\",\n\t\t\t\"moreau\": \"PROPN\",\n\t\t\t\"jai\": \"PROPN\",\n\t\t\t\"finals\": \"NOUN\",\n\t\t\t\"conservationists\": \"NOUN\",\n\t\t\t\"four\": \"NUM\",\n\t\t\t\"as\": \"ADP\",\n\t\t\t\"caroline\": \"PROPN\",\n\t\t\t\"tacos\": \"NOUN\",\n\t\t\t\"rangers\": \"NOUN\",\n\t\t\t\"ulterior\": \"ADJ\",\n\t\t\t\"ventures\": \"NOUN\",\n\t\t\t\"specializing\": \"VERB\",\n\t\t\t\"psychologists\": \"NOUN\",\n\t\t\t\"verify\": \"VERB\",\n\t\t\t\"northeastern\": \"ADJ\",\n\t\t\t\"defenders\": \"NOUN\",\n\t\t\t\"grandmother\": \"NOUN\",\n\t\t\t\"birthright\": \"NOUN\",\n\t\t\t\"salinity\": \"NOUN\",\n\t\t\t\"inquires\": \"NOUN\",\n\t\t\t\"guaranties\": \"NOUN\",\n\t\t\t\"steady\": \"ADJ\",\n\t\t\t\"coupons\": \"NOUN\",\n\t\t\t\"blacks\": \"NOUN\",\n\t\t\t\"contours\": \"NOUN\",\n\t\t\t\"industrialist\": \"NOUN\",\n\t\t\t\"author\": \"NOUN\",\n\t\t\t\"towels\": \"NOUN\",\n\t\t\t\"strongest\": \"ADJ\",\n\t\t\t\"borrowed\": \"VERB\",\n\t\t\t\"exceptions\": \"NOUN\",\n\t\t\t\"rachel\": \"PROPN\",\n\t\t\t\"continuous\": \"ADJ\",\n\t\t\t\"jenkins\": \"PROPN\",\n\t\t\t\"roast\": \"ADJ\",\n\t\t\t\"unmatched\": \"ADJ\",\n\t\t\t\"unspoken\": \"ADJ\",\n\t\t\t\"gossipy\": \"ADJ\",\n\t\t\t\"sociology\": \"NOUN\",\n\t\t\t\"scroll\": \"VERB\",\n\t\t\t\"reedy\": \"ADJ\",\n\t\t\t\"predicting\": \"VERB\",\n\t\t\t\"exception\": \"NOUN\",\n\t\t\t\"karma\": \"NOUN\",\n\t\t\t\"cashier\": \"NOUN\",\n\t\t\t\"pretext\": \"NOUN\",\n\t\t\t\"apologetic\": \"ADJ\",\n\t\t\t\"tray\": \"NOUN\",\n\t\t\t\"traditions\": \"NOUN\",\n\t\t\t\"massages\": \"NOUN\",\n\t\t\t\"nidd\": \"PROPN\",\n\t\t\t\"14th\": \"ADJ\",\n\t\t\t\"attendants\": \"NOUN\",\n\t\t\t\"payne\": \"PROPN\",\n\t\t\t\"safer\": \"ADJ\",\n\t\t\t\"bar\": \"NOUN\",\n\t\t\t\"kiwi\": \"PROPN\",\n\t\t\t\"actively\": \"ADV\",\n\t\t\t\"serotonin\": \"NOUN\",\n\t\t\t\"evict\": \"VERB\",\n\t\t\t\"personified\": \"VERB\",\n\t\t\t\"14.2\": \"NUM\",\n\t\t\t\"inappropriate\": \"ADJ\",\n\t\t\t\"wa\": \"PROPN\",\n\t\t\t\"deadbolt\": \"NOUN\",\n\t\t\t\"homogeneous\": \"ADJ\",\n\t\t\t\"preached\": \"VERB\",\n\t\t\t\"frl3@pge.com\": \"PROPN\",\n\t\t\t\"detect\": \"VERB\",\n\t\t\t\"founding\": \"VERB\",\n\t\t\t\"2d\": \"ADJ\",\n\t\t\t\"moriori\": \"PROPN\",\n\t\t\t\"brainwashing\": \"NOUN\",\n\t\t\t\"dislikes\": \"NOUN\",\n\t\t\t\"hijackers\": \"NOUN\",\n\t\t\t\"forced\": \"VERB\",\n\t\t\t\"holden\": \"PROPN\",\n\t\t\t\"analysed\": \"VERB\",\n\t\t\t\"blankets\": \"NOUN\",\n\t\t\t\"delegations\": \"NOUN\",\n\t\t\t\"http://nigeria.usembassy.gov/scams.html\": \"PROPN\",\n\t\t\t\"twines\": \"NOUN\",\n\t\t\t\"every\": \"DET\",\n\t\t\t\"hariri\": \"PROPN\",\n\t\t\t\"half-hesitant\": \"ADJ\",\n\t\t\t\"mvb\": \"NOUN\",\n\t\t\t\"myself\": \"PRON\",\n\t\t\t\"windfall\": \"NOUN\",\n\t\t\t\"quietest\": \"ADJ\",\n\t\t\t\"alter\": \"VERB\",\n\t\t\t\"recipe\": \"NOUN\",\n\t\t\t\"cp\": \"NOUN\",\n\t\t\t\"equations\": \"NOUN\",\n\t\t\t\"struggles\": \"NOUN\",\n\t\t\t\"tarsia\": \"PROPN\",\n\t\t\t\"magazine\": \"NOUN\",\n\t\t\t\"amiable\": \"ADJ\",\n\t\t\t\"proprietors\": \"NOUN\",\n\t\t\t\"allard\": \"PROPN\",\n\t\t\t\"deal\": \"NOUN\",\n\t\t\t\"drool\": \"VERB\",\n\t\t\t\"armenians\": \"PROPN\",\n\t\t\t\"overview\": \"NOUN\",\n\t\t\t\"defaults\": \"NOUN\",\n\t\t\t\"miharris\": \"PROPN\",\n\t\t\t\"dwellers\": \"NOUN\",\n\t\t\t\"costs\": \"NOUN\",\n\t\t\t\"505-625-8031\": \"NUM\",\n\t\t\t\"legacy\": \"NOUN\",\n\t\t\t\"technician\": \"NOUN\",\n\t\t\t\"controversy\": \"NOUN\",\n\t\t\t\"rotorua\": \"PROPN\",\n\t\t\t\"autos\": \"PROPN\",\n\t\t\t\"sidewalks\": \"NOUN\",\n\t\t\t\"distributors\": \"NOUN\",\n\t\t\t\"skittled\": \"VERB\",\n\t\t\t\"musical\": \"ADJ\",\n\t\t\t\"left\": \"VERB\",\n\t\t\t\"garnishes\": \"NOUN\",\n\t\t\t\"besocked\": \"ADJ\",\n\t\t\t\"agra\": \"PROPN\",\n\t\t\t\"firsthand\": \"ADV\",\n\t\t\t\"pre-screened\": \"VERB\",\n\t\t\t\"eighth\": \"ADV\",\n\t\t\t\"lowered\": \"VERB\",\n\t\t\t\"allot\": \"VERB\",\n\t\t\t\"fantasy\": \"NOUN\",\n\t\t\t\"ramp\": \"VERB\",\n\t\t\t\"kittie\": \"PROPN\",\n\t\t\t\"unexercised\": \"ADJ\",\n\t\t\t\"karen\": \"PROPN\",\n\t\t\t\"tiers\": \"NOUN\",\n\t\t\t\"laureate\": \"NOUN\",\n\t\t\t\"fast\": \"ADJ\",\n\t\t\t\"accountabilities\": \"NOUN\",\n\t\t\t\"weighed\": \"VERB\",\n\t\t\t\"capers\": \"NOUN\",\n\t\t\t\"swirl\": \"VERB\",\n\t\t\t\"mideast\": \"PROPN\",\n\t\t\t\"pathways\": \"NOUN\",\n\t\t\t\"summit\": \"NOUN\",\n\t\t\t\"barbara\": \"PROPN\",\n\t\t\t\"clapped\": \"VERB\",\n\t\t\t\"2:00\": \"NUM\",\n\t\t\t\"inconsistency\": \"NOUN\",\n\t\t\t\"unveiled\": \"VERB\",\n\t\t\t\"wikilove\": \"NOUN\",\n\t\t\t\"starroute\": \"PROPN\",\n\t\t\t\"geyser\": \"NOUN\",\n\t\t\t\"infection\": \"NOUN\",\n\t\t\t\"chefs\": \"NOUN\",\n\t\t\t\"benedict\": \"NOUN\",\n\t\t\t\"blount\": \"PROPN\",\n\t\t\t\"smutney\": \"PROPN\",\n\t\t\t\"relies\": \"VERB\",\n\t\t\t\"fault\": \"NOUN\",\n\t\t\t\"laboratory\": \"PROPN\",\n\t\t\t\"congolese\": \"ADJ\",\n\t\t\t\"enamel\": \"NOUN\",\n\t\t\t\"yards\": \"NOUN\",\n\t\t\t\"assassinate\": \"VERB\",\n\t\t\t\"brigade\": \"NOUN\",\n\t\t\t\"commate\": \"NOUN\",\n\t\t\t\"streaming\": \"VERB\",\n\t\t\t\"non-art\": \"NOUN\",\n\t\t\t\"babe\": \"NOUN\",\n\t\t\t\"copyrighted\": \"VERB\",\n\t\t\t\"cigarettes\": \"NOUN\",\n\t\t\t\"tire\": \"NOUN\",\n\t\t\t\"architectural\": \"ADJ\",\n\t\t\t\"gcp_london\": \"PROPN\",\n\t\t\t\"haul\": \"NOUN\",\n\t\t\t\"hôpital\": \"PROPN\",\n\t\t\t\"astronomical\": \"ADJ\",\n\t\t\t\"trumpets\": \"NOUN\",\n\t\t\t\"mayko\": \"PROPN\",\n\t\t\t\"advancements\": \"NOUN\",\n\t\t\t\"imagined\": \"VERB\",\n\t\t\t\"mainstreamed\": \"ADJ\",\n\t\t\t\"petard\": \"NOUN\",\n\t\t\t\"directors\": \"NOUN\",\n\t\t\t\"walls\": \"NOUN\",\n\t\t\t\"libertarian\": \"ADJ\",\n\t\t\t\"board\": \"NOUN\",\n\t\t\t\"flames\": \"NOUN\",\n\t\t\t\"airtight\": \"ADJ\",\n\t\t\t\"styler\": \"NOUN\",\n\t\t\t\"economics\": \"NOUN\",\n\t\t\t\"philosophers\": \"NOUN\",\n\t\t\t\"unilevel\": \"NOUN\",\n\t\t\t\"previous-version\": \"NOUN\",\n\t\t\t\"waitangi\": \"PROPN\",\n\t\t\t\"parachutes\": \"NOUN\",\n\t\t\t\"restaurateur\": \"NOUN\",\n\t\t\t\"ra-ra\": \"PROPN\",\n\t\t\t\"afore\": \"ADJ\",\n\t\t\t\"sentiment\": \"NOUN\",\n\t\t\t\"massacring\": \"VERB\",\n\t\t\t\"988,000\": \"NUM\",\n\t\t\t\"radicals\": \"NOUN\",\n\t\t\t\"unlocked\": \"ADJ\",\n\t\t\t\"kumon\": \"PROPN\",\n\t\t\t\"economical\": \"ADJ\",\n\t\t\t\"ginny\": \"PROPN\",\n\t\t\t\"icu\": \"NOUN\",\n\t\t\t\"non-approved\": \"ADJ\",\n\t\t\t\"broken\": \"VERB\",\n\t\t\t\"intrusted\": \"VERB\",\n\t\t\t\"investigations\": \"NOUN\",\n\t\t\t\"mahault\": \"PROPN\",\n\t\t\t\"hydrogen\": \"NOUN\",\n\t\t\t\"supersonic\": \"ADJ\",\n\t\t\t\"innovative\": \"ADJ\",\n\t\t\t\"emit\": \"VERB\",\n\t\t\t\"gardneri\": \"NOUN\",\n\t\t\t\"arbitrariness\": \"NOUN\",\n\t\t\t\"announces\": \"VERB\",\n\t\t\t\"welles\": \"PROPN\",\n\t\t\t\"mid-1980s\": \"NOUN\",\n\t\t\t\"713-853-3989\": \"NUM\",\n\t\t\t\"reinforcements\": \"NOUN\",\n\t\t\t\"connolly\": \"PROPN\",\n\t\t\t\"partition\": \"NOUN\",\n\t\t\t\"agnostics\": \"PROPN\",\n\t\t\t\"likewise\": \"ADV\",\n\t\t\t\"good-hearted\": \"ADJ\",\n\t\t\t\"dare\": \"VERB\",\n\t\t\t\"certificated\": \"VERB\",\n\t\t\t\"tendency\": \"NOUN\",\n\t\t\t\"oppose\": \"VERB\",\n\t\t\t\"indignity\": \"NOUN\",\n\t\t\t\"twitter\": \"PROPN\",\n\t\t\t\"complement\": \"VERB\",\n\t\t\t\"blended\": \"VERB\",\n\t\t\t\"barriers\": \"NOUN\",\n\t\t\t\"desirer\": \"NOUN\",\n\t\t\t\"bullet\": \"NOUN\",\n\t\t\t\"prayer\": \"NOUN\",\n\t\t\t\"contrary\": \"NOUN\",\n\t\t\t\"concludes\": \"VERB\",\n\t\t\t\"outgrow\": \"VERB\",\n\t\t\t\"poignant\": \"ADJ\",\n\t\t\t\"overflow\": \"NOUN\",\n\t\t\t\"supplier\": \"NOUN\",\n\t\t\t\"whistling\": \"ADJ\",\n\t\t\t\"mustache\": \"NOUN\",\n\t\t\t\"condemnations\": \"NOUN\",\n\t\t\t\"housed\": \"VERB\",\n\t\t\t\"advantage\": \"NOUN\",\n\t\t\t\"creation\": \"NOUN\",\n\t\t\t\"dysphoria\": \"NOUN\",\n\t\t\t\"television\": \"NOUN\",\n\t\t\t\"mitch\": \"PROPN\",\n\t\t\t\"rss\": \"PROPN\",\n\t\t\t\"i'd\": \"SCONJ\",\n\t\t\t\"irs\": \"PROPN\",\n\t\t\t\"respective\": \"ADJ\",\n\t\t\t\"maarten\": \"PROPN\",\n\t\t\t\"silence\": \"NOUN\",\n\t\t\t\"monk\": \"NOUN\",\n\t\t\t\"and\": \"CCONJ\",\n\t\t\t\"nhs\": \"PROPN\",\n\t\t\t\"fridge\": \"NOUN\",\n\t\t\t\"h\": \"NOUN\",\n\t\t\t\"proves\": \"VERB\",\n\t\t\t\"lasting\": \"ADJ\",\n\t\t\t\"therapies\": \"NOUN\",\n\t\t\t\"allier\": \"PROPN\",\n\t\t\t\"promoting\": \"VERB\",\n\t\t\t\"http://www.ebay.co.uk/itm/130589513308?var=430034792128&sspagename=strk:mewax:it&_trksid=p3984.m1438.l2648#ht_1500wt_660\": \"PROPN\",\n\t\t\t\"corridor\": \"NOUN\",\n\t\t\t\"22301\": \"NUM\",\n\t\t\t\"statistically\": \"ADV\",\n\t\t\t\"flora\": \"NOUN\",\n\t\t\t\"fingers\": \"NOUN\",\n\t\t\t\"bergen\": \"PROPN\",\n\t\t\t\"outlandish\": \"ADJ\",\n\t\t\t\"finances\": \"NOUN\",\n\t\t\t\"raymond\": \"PROPN\",\n\t\t\t\"277\": \"NUM\",\n\t\t\t\"successful\": \"ADJ\",\n\t\t\t\"carotid\": \"NOUN\",\n\t\t\t\"thrifty\": \"ADJ\",\n\t\t\t\"viability\": \"NOUN\",\n\t\t\t\"fridays\": \"PROPN\",\n\t\t\t\"917\": \"NUM\",\n\t\t\t\"comprehension\": \"NOUN\",\n\t\t\t\"jealousy\": \"NOUN\",\n\t\t\t\"christianity\": \"PROPN\",\n\t\t\t\"415.782.7822\": \"NUM\",\n\t\t\t\"michelle\": \"PROPN\",\n\t\t\t\"equinox\": \"NOUN\",\n\t\t\t\"listless\": \"ADJ\",\n\t\t\t\"carbonate\": \"NOUN\",\n\t\t\t\"sun\": \"NOUN\",\n\t\t\t\"flood\": \"NOUN\",\n\t\t\t\"leonhard\": \"PROPN\",\n\t\t\t\"fuckwad\": \"NOUN\",\n\t\t\t\"chandeliers\": \"NOUN\",\n\t\t\t\"neighboring\": \"VERB\",\n\t\t\t\"brokered\": \"VERB\",\n\t\t\t\"changpei\": \"PROPN\",\n\t\t\t\"cross-section\": \"NOUN\",\n\t\t\t\"swimming\": \"VERB\",\n\t\t\t\"swg\": \"PROPN\",\n\t\t\t\"courageous\": \"ADJ\",\n\t\t\t\"uncontrolled\": \"ADJ\",\n\t\t\t\"parentheses\": \"NOUN\",\n\t\t\t\"grabbing\": \"VERB\",\n\t\t\t\"dismissing\": \"VERB\",\n\t\t\t\"deacon\": \"NOUN\",\n\t\t\t\"sighs\": \"VERB\",\n\t\t\t\"figure\": \"PROPN\",\n\t\t\t\"feeder\": \"NOUN\",\n\t\t\t\"www.norcalfightingalliance.com\": \"PROPN\",\n\t\t\t\"epa\": \"PROPN\",\n\t\t\t\"toenail\": \"NOUN\",\n\t\t\t\"relearned\": \"VERB\",\n\t\t\t\"billions\": \"NOUN\",\n\t\t\t\"01:09\": \"NUM\",\n\t\t\t\"frightens\": \"VERB\",\n\t\t\t\"repulsive\": \"ADJ\",\n\t\t\t\"l'eau\": \"PROPN\",\n\t\t\t\"non-mediterranean\": \"ADJ\",\n\t\t\t\"float\": \"VERB\",\n\t\t\t\"capote\": \"PROPN\",\n\t\t\t\"dump\": \"VERB\",\n\t\t\t\"skyrocketing\": \"VERB\",\n\t\t\t\"squash\": \"NOUN\",\n\t\t\t\"google\": \"PROPN\",\n\t\t\t\"tonic\": \"ADJ\",\n\t\t\t\"stirring\": \"VERB\",\n\t\t\t\"blotched\": \"VERB\",\n\t\t\t\"shreds\": \"NOUN\",\n\t\t\t\"turismo@merida.gob.mx\": \"PROPN\",\n\t\t\t\"---------------------------------------------------------------------------\": \"PUNCT\",\n\t\t\t\"communalism\": \"NOUN\",\n\t\t\t\"kinder\": \"PROPN\",\n\t\t\t\"vista\": \"NOUN\",\n\t\t\t\"lexical\": \"ADJ\",\n\t\t\t\"airborne\": \"ADJ\",\n\t\t\t\"considered\": \"VERB\",\n\t\t\t\"operate\": \"VERB\",\n\t\t\t\"sorts\": \"NOUN\",\n\t\t\t\"neighbourhoods\": \"NOUN\",\n\t\t\t\"combating\": \"VERB\",\n\t\t\t\"flesh\": \"NOUN\",\n\t\t\t\"awarding\": \"NOUN\",\n\t\t\t\"backcloth\": \"NOUN\",\n\t\t\t\"overthrow\": \"NOUN\",\n\t\t\t\"relay\": \"VERB\",\n\t\t\t\"benzie\": \"PROPN\",\n\t\t\t\"gasps\": \"VERB\",\n\t\t\t\"✉\": \"SYM\",\n\t\t\t\"fucking\": \"INTJ\",\n\t\t\t\"unfortunalty\": \"ADV\",\n\t\t\t\"babies\": \"NOUN\",\n\t\t\t\"spiritual\": \"ADJ\",\n\t\t\t\"lolling\": \"ADJ\",\n\t\t\t\"flap\": \"NOUN\",\n\t\t\t\"reinvestment\": \"PROPN\",\n\t\t\t\"populous\": \"ADJ\",\n\t\t\t\"lesion\": \"NOUN\",\n\t\t\t\"marshmallow\": \"NOUN\",\n\t\t\t\"dime\": \"NOUN\",\n\t\t\t\"monarchs\": \"PROPN\",\n\t\t\t\"duran\": \"PROPN\",\n\t\t\t\"warner\": \"PROPN\",\n\t\t\t\"yannick\": \"PROPN\",\n\t\t\t\"case-sensitive\": \"ADJ\",\n\t\t\t\"chimney\": \"NOUN\",\n\t\t\t\"spectrum\": \"NOUN\",\n\t\t\t\"oily\": \"ADJ\",\n\t\t\t\"bareback\": \"ADV\",\n\t\t\t\"08:50\": \"NUM\",\n\t\t\t\"plunged\": \"VERB\",\n\t\t\t\"definable\": \"ADJ\",\n\t\t\t\"comp.sources.d\": \"NOUN\",\n\t\t\t\"hormones\": \"NOUN\",\n\t\t\t\"baring\": \"VERB\",\n\t\t\t\"innocents\": \"NOUN\",\n\t\t\t\"leave\": \"VERB\",\n\t\t\t\"hoaxes\": \"NOUN\",\n\t\t\t\"plummet\": \"VERB\",\n\t\t\t\"hardest\": \"ADJ\",\n\t\t\t\"fleshing\": \"VERB\",\n\t\t\t\"holocausts\": \"NOUN\",\n\t\t\t\"wyoming\": \"PROPN\",\n\t\t\t\"untamed\": \"ADJ\",\n\t\t\t\"trivial\": \"ADJ\",\n\t\t\t\"prevents\": \"VERB\",\n\t\t\t\"national\": \"ADJ\",\n\t\t\t\"gravesend\": \"PROPN\",\n\t\t\t\"cal\": \"PROPN\",\n\t\t\t\"aversions\": \"NOUN\",\n\t\t\t\"shuttle\": \"NOUN\",\n\t\t\t\"permissible\": \"ADJ\",\n\t\t\t\"horrifying\": \"ADJ\",\n\t\t\t\"yarns\": \"NOUN\",\n\t\t\t\"godiva\": \"PROPN\",\n\t\t\t\"slurped\": \"VERB\",\n\t\t\t\"waitstaff\": \"NOUN\",\n\t\t\t\"shotgun\": \"NOUN\",\n\t\t\t\"phoebe\": \"NOUN\",\n\t\t\t\"victory\": \"NOUN\",\n\t\t\t\"talal\": \"PROPN\",\n\t\t\t\"caves\": \"NOUN\",\n\t\t\t\"hannibal\": \"PROPN\",\n\t\t\t\"spouse(s)\": \"NOUN\",\n\t\t\t\"kathleen\": \"PROPN\",\n\t\t\t\"itemized\": \"VERB\",\n\t\t\t\"programmatically\": \"ADV\",\n\t\t\t\"described\": \"VERB\",\n\t\t\t\"murdering\": \"NOUN\",\n\t\t\t\"deliciously\": \"ADV\",\n\t\t\t\"sprang\": \"VERB\",\n\t\t\t\"grips\": \"NOUN\",\n\t\t\t\"pipelines\": \"NOUN\",\n\t\t\t\"diarheya\": \"NOUN\",\n\t\t\t\"unawares\": \"ADV\",\n\t\t\t\"10.9\": \"NUM\",\n\t\t\t\"06:07\": \"NUM\",\n\t\t\t\"amelia\": \"PROPN\",\n\t\t\t\"constituted\": \"VERB\",\n\t\t\t\"prolific\": \"ADJ\",\n\t\t\t\"oriented\": \"VERB\",\n\t\t\t\"birmingham\": \"PROPN\",\n\t\t\t\"hubristic\": \"ADJ\",\n\t\t\t\"did\": \"AUX\",\n\t\t\t\"wat\": \"PROPN\",\n\t\t\t\"elevators\": \"NOUN\",\n\t\t\t\"wisconsin\": \"PROPN\",\n\t\t\t\"grape\": \"NOUN\",\n\t\t\t\"allowing\": \"VERB\",\n\t\t\t\"sappy\": \"ADJ\",\n\t\t\t\"ailment\": \"NOUN\",\n\t\t\t\"abaut\": \"ADV\",\n\t\t\t\"150\": \"NUM\",\n\t\t\t\"07/14/2000\": \"NUM\",\n\t\t\t\"pannonia\": \"PROPN\",\n\t\t\t\"isi\": \"PROPN\",\n\t\t\t\"vowel\": \"NOUN\",\n\t\t\t\"latitude\": \"NOUN\",\n\t\t\t\"kill\": \"VERB\",\n\t\t\t\".......\": \"PUNCT\",\n\t\t\t\"endangered\": \"ADJ\",\n\t\t\t\"coin\": \"NOUN\",\n\t\t\t\"owning\": \"VERB\",\n\t\t\t\"biden\": \"PROPN\",\n\t\t\t\"humiliate\": \"VERB\",\n\t\t\t\"perkins\": \"PROPN\",\n\t\t\t\"nava\": \"PROPN\",\n\t\t\t\"rittenhouse\": \"PROPN\",\n\t\t\t\"preston\": \"PROPN\",\n\t\t\t\"lengthens\": \"VERB\",\n\t\t\t\"expressionless\": \"ADJ\",\n\t\t\t\"evidenced\": \"VERB\",\n\t\t\t\"diligence\": \"NOUN\",\n\t\t\t\"unconvincing\": \"ADJ\",\n\t\t\t\"smoking\": \"NOUN\",\n\t\t\t\"schtick\": \"NOUN\",\n\t\t\t\":o\": \"SYM\",\n\t\t\t\"fathom\": \"VERB\",\n\t\t\t\"wordy\": \"ADJ\",\n\t\t\t\"titles\": \"NOUN\",\n\t\t\t\"offensive\": \"ADJ\",\n\t\t\t\"hippy\": \"NOUN\",\n\t\t\t\"theatre\": \"NOUN\",\n\t\t\t\"sophronius\": \"PROPN\",\n\t\t\t\"abide\": \"VERB\",\n\t\t\t\"dressing-case\": \"NOUN\",\n\t\t\t\"alain\": \"PROPN\",\n\t\t\t\"setback\": \"NOUN\",\n\t\t\t\"funneled\": \"VERB\",\n\t\t\t\"seemingly\": \"ADV\",\n\t\t\t\"sensitivity\": \"NOUN\",\n\t\t\t\"module\": \"NOUN\",\n\t\t\t\"tejanos\": \"PROPN\",\n\t\t\t\"supervised\": \"VERB\",\n\t\t\t\"invitations\": \"NOUN\",\n\t\t\t\"dunn\": \"PROPN\",\n\t\t\t\"lighter\": \"ADJ\",\n\t\t\t\"buckaroo\": \"NOUN\",\n\t\t\t\"virtuoso\": \"ADJ\",\n\t\t\t\"teaching\": \"NOUN\",\n\t\t\t\"a&e\": \"PROPN\",\n\t\t\t\"sox\": \"PROPN\",\n\t\t\t\"out-house\": \"NOUN\",\n\t\t\t\"broek\": \"PROPN\",\n\t\t\t\"neckless\": \"ADJ\",\n\t\t\t\"15th\": \"NOUN\",\n\t\t\t\"rolls\": \"NOUN\",\n\t\t\t\"kicked\": \"VERB\",\n\t\t\t\"tea\": \"NOUN\",\n\t\t\t\"unfair\": \"ADJ\",\n\t\t\t\"discharged\": \"VERB\",\n\t\t\t\"culinary\": \"ADJ\",\n\t\t\t\"kane\": \"PROPN\",\n\t\t\t\"conditionting\": \"NOUN\",\n\t\t\t\"friedman\": \"PROPN\",\n\t\t\t\"reneging\": \"VERB\",\n\t\t\t\"foolhardy\": \"ADJ\",\n\t\t\t\"cavies\": \"NOUN\",\n\t\t\t\"depression\": \"NOUN\",\n\t\t\t\"sciencem...@upi.com\": \"PROPN\",\n\t\t\t\"-ll\": \"AUX\",\n\t\t\t\"ndi\": \"PROPN\",\n\t\t\t\"eccentricity\": \"NOUN\",\n\t\t\t\"mkm\": \"PROPN\",\n\t\t\t\"embarrassed\": \"ADJ\",\n\t\t\t\"dynamite\": \"NOUN\",\n\t\t\t\"sr.\": \"ADJ\",\n\t\t\t\"feel\": \"VERB\",\n\t\t\t\"upwards\": \"ADV\",\n\t\t\t\"1655\": \"NUM\",\n\t\t\t\"hardness\": \"NOUN\",\n\t\t\t\"mentality\": \"NOUN\",\n\t\t\t\"libraries\": \"NOUN\",\n\t\t\t\"loves\": \"VERB\",\n\t\t\t\"faltering\": \"VERB\",\n\t\t\t\"motorized\": \"VERB\",\n\t\t\t\"bull\": \"NOUN\",\n\t\t\t\"persistently\": \"ADV\",\n\t\t\t\"khomeini\": \"PROPN\",\n\t\t\t\"nacogdoches\": \"PROPN\",\n\t\t\t\"sick\": \"ADJ\",\n\t\t\t\"øhavet\": \"PROPN\",\n\t\t\t\"peril\": \"NOUN\",\n\t\t\t\"entree\": \"NOUN\",\n\t\t\t\"determination\": \"NOUN\",\n\t\t\t\"vicsandra\": \"PROPN\",\n\t\t\t\"europeans\": \"NOUN\",\n\t\t\t\"to-\": \"INTJ\",\n\t\t\t\"jam\": \"NOUN\",\n\t\t\t\"nathaniel\": \"PROPN\",\n\t\t\t\"probing\": \"ADJ\",\n\t\t\t\"valuable\": \"ADJ\",\n\t\t\t\"blackworms\": \"NOUN\",\n\t\t\t\"11:25\": \"NUM\",\n\t\t\t\"imo\": \"ADV\",\n\t\t\t\"choate\": \"PROPN\",\n\t\t\t\"autism\": \"NOUN\",\n\t\t\t\"hips\": \"NOUN\",\n\t\t\t\"pour\": \"VERB\",\n\t\t\t\"behold\": \"INTJ\",\n\t\t\t\"english\": \"PROPN\",\n\t\t\t\"gist\": \"NOUN\",\n\t\t\t\"abstinence\": \"NOUN\",\n\t\t\t\"christchurch\": \"PROPN\",\n\t\t\t\"debbie\": \"PROPN\",\n\t\t\t\"gelatos\": \"PROPN\",\n\t\t\t\"touristic\": \"ADJ\",\n\t\t\t\"estates\": \"NOUN\",\n\t\t\t\"brainer\": \"NOUN\",\n\t\t\t\"denomination\": \"NOUN\",\n\t\t\t\"baathists\": \"PROPN\",\n\t\t\t\"notte\": \"PROPN\",\n\t\t\t\"petitions\": \"NOUN\",\n\t\t\t\"daily\": \"ADJ\",\n\t\t\t\"journal\": \"NOUN\",\n\t\t\t\"adorn\": \"PROPN\",\n\t\t\t\"slabs\": \"NOUN\",\n\t\t\t\"swiss\": \"ADJ\",\n\t\t\t\"wu\": \"PROPN\",\n\t\t\t\"sooners\": \"PROPN\",\n\t\t\t\"twister\": \"NOUN\",\n\t\t\t\"make\": \"VERB\",\n\t\t\t\"thelema\": \"PROPN\",\n\t\t\t\"perspectives\": \"NOUN\",\n\t\t\t\"quartiles\": \"NOUN\",\n\t\t\t\"excited\": \"ADJ\",\n\t\t\t\"ka-ki\": \"PROPN\",\n\t\t\t\"labyrinth\": \"NOUN\",\n\t\t\t\"mystery\": \"NOUN\",\n\t\t\t\"raphael\": \"PROPN\",\n\t\t\t\"christ\": \"PROPN\",\n\t\t\t\"(country|region)\": \"NOUN\",\n\t\t\t\"ivy\": \"NOUN\",\n\t\t\t\"bdr\": \"NOUN\",\n\t\t\t\"wodges\": \"NOUN\",\n\t\t\t\"bounded\": \"VERB\",\n\t\t\t\"barbers\": \"NOUN\",\n\t\t\t\"irr\": \"SYM\",\n\t\t\t\"monitored\": \"VERB\",\n\t\t\t\"jade\": \"NOUN\",\n\t\t\t\"troupe\": \"NOUN\",\n\t\t\t\"spaceflight\": \"NOUN\",\n\t\t\t\"onsi\": \"PROPN\",\n\t\t\t\"altar\": \"NOUN\",\n\t\t\t\"depth\": \"NOUN\",\n\t\t\t\"88\": \"NUM\",\n\t\t\t\"recourse\": \"NOUN\",\n\t\t\t\"http://www.nea.fr/html/rp/chernobyl/conclusions5.html\": \"PROPN\",\n\t\t\t\"upload\": \"VERB\",\n\t\t\t\"sciences\": \"PROPN\",\n\t\t\t\"randomly\": \"ADV\",\n\t\t\t\"unhappily\": \"ADV\",\n\t\t\t\"creative\": \"ADJ\",\n\t\t\t\"nepco\": \"PROPN\",\n\t\t\t\"censored\": \"VERB\",\n\t\t\t\"pin\": \"NOUN\",\n\t\t\t\"hydrated\": \"ADJ\",\n\t\t\t\"advise\": \"VERB\",\n\t\t\t\"hellish\": \"ADJ\",\n\t\t\t\"umoregi\": \"PROPN\",\n\t\t\t\"convince\": \"VERB\",\n\t\t\t\"omission\": \"NOUN\",\n\t\t\t\"handles\": \"VERB\",\n\t\t\t\"rapporteur\": \"NOUN\",\n\t\t\t\"guz\": \"VERB\",\n\t\t\t\"characteristics\": \"NOUN\",\n\t\t\t\"rusting\": \"VERB\",\n\t\t\t\"amendment\": \"NOUN\",\n\t\t\t\"legislation\": \"NOUN\",\n\t\t\t\"twists\": \"NOUN\",\n\t\t\t\"global\": \"ADJ\",\n\t\t\t\"eligibility\": \"NOUN\",\n\t\t\t\"breeze\": \"NOUN\",\n\t\t\t\"bohai\": \"PROPN\",\n\t\t\t\"nc\": \"PROPN\",\n\t\t\t\"vincent\": \"PROPN\",\n\t\t\t\"impatient\": \"ADJ\",\n\t\t\t\"hermann\": \"PROPN\",\n\t\t\t\"fabiani\": \"PROPN\",\n\t\t\t\"graceful\": \"ADJ\",\n\t\t\t\"abandoning\": \"VERB\",\n\t\t\t\"escaping\": \"VERB\",\n\t\t\t\"conservatives\": \"NOUN\",\n\t\t\t\"prodded\": \"VERB\",\n\t\t\t\"félicie\": \"PROPN\",\n\t\t\t\"opener\": \"NOUN\",\n\t\t\t\"indicates\": \"VERB\",\n\t\t\t\"shapiro\": \"PROPN\",\n\t\t\t\"abourezk\": \"PROPN\",\n\t\t\t\"airways\": \"PROPN\",\n\t\t\t\"snbehnke\": \"PROPN\",\n\t\t\t\"chalcis\": \"PROPN\",\n\t\t\t\"pre-owned\": \"ADJ\",\n\t\t\t\"distributed\": \"VERB\",\n\t\t\t\"deviating\": \"VERB\",\n\t\t\t\"1978\": \"NUM\",\n\t\t\t\"ranging\": \"VERB\",\n\t\t\t\"capacity\": \"NOUN\",\n\t\t\t\"dismisses\": \"VERB\",\n\t\t\t\"directories\": \"NOUN\",\n\t\t\t\"ifa\": \"PROPN\",\n\t\t\t\"exfoliating\": \"VERB\",\n\t\t\t\"jamie\": \"PROPN\",\n\t\t\t\"btw\": \"ADV\",\n\t\t\t\"brats\": \"NOUN\",\n\t\t\t\"sweets\": \"NOUN\",\n\t\t\t\"shorts\": \"NOUN\",\n\t\t\t\"nursery\": \"NOUN\",\n\t\t\t\"perhaps\": \"ADV\",\n\t\t\t\"mingling\": \"NOUN\",\n\t\t\t\"www.juancole.com\": \"PROPN\",\n\t\t\t\"functionally\": \"ADV\",\n\t\t\t\"units\": \"NOUN\",\n\t\t\t\"buds\": \"NOUN\",\n\t\t\t\"curtis\": \"PROPN\",\n\t\t\t\"cyprus\": \"PROPN\",\n\t\t\t\"hawaiian\": \"PROPN\",\n\t\t\t\"societies\": \"NOUN\",\n\t\t\t\"worshiped\": \"VERB\",\n\t\t\t\"adams\": \"PROPN\",\n\t\t\t\"tired\": \"ADJ\",\n\t\t\t\"laying\": \"VERB\",\n\t\t\t\"ninety\": \"NUM\",\n\t\t\t\"declared\": \"VERB\",\n\t\t\t\"jessen\": \"PROPN\",\n\t\t\t\"smuggled\": \"VERB\",\n\t\t\t\"ensemble\": \"NOUN\",\n\t\t\t\"excellant\": \"ADJ\",\n\t\t\t\"sword\": \"NOUN\",\n\t\t\t\"screwed\": \"VERB\",\n\t\t\t\"bockius\": \"PROPN\",\n\t\t\t\"hwy\": \"PROPN\",\n\t\t\t\"450\": \"NUM\",\n\t\t\t\"altogether\": \"ADV\",\n\t\t\t\"2019\": \"NUM\",\n\t\t\t\"15,000\": \"NUM\",\n\t\t\t\"anchorage\": \"NOUN\",\n\t\t\t\"1926\": \"NUM\",\n\t\t\t\"374\": \"NUM\",\n\t\t\t\"ceases\": \"VERB\",\n\t\t\t\"normale\": \"PROPN\",\n\t\t\t\"officer\": \"NOUN\",\n\t\t\t\"regret\": \"VERB\",\n\t\t\t\"useability\": \"NOUN\",\n\t\t\t\"voting\": \"NOUN\",\n\t\t\t\"remains\": \"VERB\",\n\t\t\t\"educating\": \"VERB\",\n\t\t\t\"wednesday's\": \"PROPN\",\n\t\t\t\"hypnotizing\": \"VERB\",\n\t\t\t\"http://www.equinecaninefeline.com/catalog/mamble-hamster-narrow-100cm-cage-p-12642.html\": \"PROPN\",\n\t\t\t\"entourage\": \"NOUN\",\n\t\t\t\"60622\": \"NUM\",\n\t\t\t\"radius\": \"NOUN\",\n\t\t\t\"ball\": \"NOUN\",\n\t\t\t\"merrist\": \"PROPN\",\n\t\t\t\"critics\": \"NOUN\",\n\t\t\t\"accessories\": \"NOUN\",\n\t\t\t\"facial\": \"ADJ\",\n\t\t\t\"protesting\": \"VERB\",\n\t\t\t\"meals\": \"NOUN\",\n\t\t\t\"bogus\": \"ADJ\",\n\t\t\t\"successive\": \"ADJ\",\n\t\t\t\"actions\": \"NOUN\",\n\t\t\t\"guthe\": \"PROPN\",\n\t\t\t\"unwieldy\": \"ADJ\",\n\t\t\t\"(\": \"PUNCT\",\n\t\t\t\"utterances\": \"NOUN\",\n\t\t\t\"guardsmen\": \"NOUN\",\n\t\t\t\"driftwood\": \"NOUN\",\n\t\t\t\"im\": \"NOUN\",\n\t\t\t\"transitional\": \"ADJ\",\n\t\t\t\"1922\": \"NUM\",\n\t\t\t\"superficial\": \"ADJ\",\n\t\t\t\"http://www.calguard.ca.gov/ia/chernobyl-15%20years.htm\": \"PROPN\",\n\t\t\t\"lakes\": \"PROPN\",\n\t\t\t\"ld2d-#69366-1.doc\": \"NOUN\",\n\t\t\t\"exploring\": \"VERB\",\n\t\t\t\"authorization\": \"NOUN\",\n\t\t\t\"dando\": \"PROPN\",\n\t\t\t\"flaring\": \"VERB\",\n\t\t\t\"u\": \"PRON\",\n\t\t\t\"tenpound\": \"NOUN\",\n\t\t\t\"vinita\": \"PROPN\",\n\t\t\t\"metroplex\": \"NOUN\",\n\t\t\t\"excursions\": \"NOUN\",\n\t\t\t\"procrastinator\": \"NOUN\",\n\t\t\t\"operatives\": \"NOUN\",\n\t\t\t\"liquid\": \"NOUN\",\n\t\t\t\"apartment\": \"NOUN\",\n\t\t\t\"pairing\": \"VERB\",\n\t\t\t\"sourcing\": \"NOUN\",\n\t\t\t\"schwa\": \"PROPN\",\n\t\t\t\"pencils\": \"NOUN\",\n\t\t\t\"nang\": \"PROPN\",\n\t\t\t\"horse-faced\": \"ADJ\",\n\t\t\t\"fans\": \"NOUN\",\n\t\t\t\"x36709\": \"NOUN\",\n\t\t\t\"ratchet\": \"VERB\",\n\t\t\t\"haze\": \"NOUN\",\n\t\t\t\"simons\": \"PROPN\",\n\t\t\t\"younger\": \"ADJ\",\n\t\t\t\"gigaloader\": \"PROPN\",\n\t\t\t\"wiped\": \"VERB\",\n\t\t\t\"620-294-3000\": \"NUM\",\n\t\t\t\"calvary\": \"PROPN\",\n\t\t\t\"azzaman\": \"PROPN\",\n\t\t\t\"maize\": \"NOUN\",\n\t\t\t\"uniformity\": \"NOUN\",\n\t\t\t\"disclosure\": \"NOUN\",\n\t\t\t\"pedicure\": \"NOUN\",\n\t\t\t\"cay\": \"PROPN\",\n\t\t\t\"citic\": \"PROPN\",\n\t\t\t\"35\": \"NUM\",\n\t\t\t\"observations\": \"NOUN\",\n\t\t\t\"tarred\": \"VERB\",\n\t\t\t\"mournful\": \"ADJ\",\n\t\t\t\"elected\": \"VERB\",\n\t\t\t\"potty\": \"NOUN\",\n\t\t\t\"co-op\": \"NOUN\",\n\t\t\t\"masquerade\": \"NOUN\",\n\t\t\t\"farce\": \"NOUN\",\n\t\t\t\"focal\": \"ADJ\",\n\t\t\t\"225-5185\": \"NUM\",\n\t\t\t\"oct.\": \"PROPN\",\n\t\t\t\"explorers\": \"NOUN\",\n\t\t\t\"978-376-9004\": \"NUM\",\n\t\t\t\"realists\": \"NOUN\",\n\t\t\t\"deterring\": \"VERB\",\n\t\t\t\"juan\": \"PROPN\",\n\t\t\t\"pro-same\": \"ADJ\",\n\t\t\t\"rubble\": \"NOUN\",\n\t\t\t\"isfahan\": \"PROPN\",\n\t\t\t\"fischler\": \"PROPN\",\n\t\t\t\"approach\": \"NOUN\",\n\t\t\t\"ares\": \"PROPN\",\n\t\t\t\"assembly\": \"PROPN\",\n\t\t\t\"gleaned\": \"VERB\",\n\t\t\t\"cooking\": \"VERB\",\n\t\t\t\"finding\": \"VERB\",\n\t\t\t\"ravenna\": \"PROPN\",\n\t\t\t\"noori\": \"PROPN\",\n\t\t\t\"conf\": \"NOUN\",\n\t\t\t\"advantaged\": \"ADJ\",\n\t\t\t\"kidney\": \"NOUN\",\n\t\t\t\"collection\": \"NOUN\",\n\t\t\t\"singer\": \"NOUN\",\n\t\t\t\"dubai\": \"PROPN\",\n\t\t\t\"armour\": \"NOUN\",\n\t\t\t\"divides\": \"VERB\",\n\t\t\t\"dashboard\": \"NOUN\",\n\t\t\t\"sept\": \"PROPN\",\n\t\t\t\"vitality\": \"NOUN\",\n\t\t\t\"alma\": \"NOUN\",\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"shaggy\": \"ADJ\",\n\t\t\t\"undo\": \"VERB\",\n\t\t\t\"jasmine\": \"PROPN\",\n\t\t\t\"sniffed\": \"VERB\",\n\t\t\t\"order\": \"NOUN\",\n\t\t\t\"muhammad\": \"PROPN\",\n\t\t\t\"vulgate\": \"PROPN\",\n\t\t\t\"algarve\": \"PROPN\",\n\t\t\t\"111\": \"NUM\",\n\t\t\t\"hovers\": \"VERB\",\n\t\t\t\"hairy\": \"ADJ\",\n\t\t\t\"chennai\": \"PROPN\",\n\t\t\t\"bud\": \"PROPN\",\n\t\t\t\"slices\": \"NOUN\",\n\t\t\t\"fails\": \"VERB\",\n\t\t\t\"hesitate\": \"VERB\",\n\t\t\t\"estimate\": \"VERB\",\n\t\t\t\"spelling\": \"NOUN\",\n\t\t\t\"dangling\": \"VERB\",\n\t\t\t\"commercially\": \"ADV\",\n\t\t\t\"milking\": \"VERB\",\n\t\t\t\"deleterious\": \"ADJ\",\n\t\t\t\"esp.\": \"ADV\",\n\t\t\t\"forbidden\": \"VERB\",\n\t\t\t\"hundred\": \"NUM\",\n\t\t\t\"numerous\": \"ADJ\",\n\t\t\t\"plotters\": \"NOUN\",\n\t\t\t\"banczak\": \"PROPN\",\n\t\t\t\"freedoms\": \"NOUN\",\n\t\t\t\"stubbornness\": \"NOUN\",\n\t\t\t\"codices\": \"NOUN\",\n\t\t\t\"dialog\": \"NOUN\",\n\t\t\t\"crieth\": \"VERB\",\n\t\t\t\"'cuz\": \"SCONJ\",\n\t\t\t\"slice\": \"NOUN\",\n\t\t\t\"threats\": \"NOUN\",\n\t\t\t\"dreamed\": \"VERB\",\n\t\t\t\"coded\": \"VERB\",\n\t\t\t\"gymnasiums\": \"NOUN\",\n\t\t\t\"consumerism\": \"NOUN\",\n\t\t\t\"roy\": \"PROPN\",\n\t\t\t\"sheriff\": \"PROPN\",\n\t\t\t\"accommodation\": \"NOUN\",\n\t\t\t\"sincerely\": \"ADV\",\n\t\t\t\"72nd\": \"ADJ\",\n\t\t\t\"changed\": \"VERB\",\n\t\t\t\"seize\": \"VERB\",\n\t\t\t\"menacing\": \"VERB\",\n\t\t\t\"myopic\": \"ADJ\",\n\t\t\t\"swift\": \"PROPN\",\n\t\t\t\"pairs\": \"NOUN\",\n\t\t\t\"some\": \"DET\",\n\t\t\t\"balochi\": \"ADJ\",\n\t\t\t\"politics\": \"NOUN\",\n\t\t\t\"30th\": \"NOUN\",\n\t\t\t\"zócalo\": \"PROPN\",\n\t\t\t\"carrier\": \"NOUN\",\n\t\t\t\"wild\": \"ADJ\",\n\t\t\t\"abused\": \"VERB\",\n\t\t\t\"bright\": \"ADJ\",\n\t\t\t\"muang\": \"PROPN\",\n\t\t\t\"inferiors\": \"NOUN\",\n\t\t\t\"particular\": \"ADJ\",\n\t\t\t\"reveal\": \"VERB\",\n\t\t\t\"lewiston\": \"PROPN\",\n\t\t\t\"colonizers\": \"NOUN\",\n\t\t\t\"stabilization\": \"NOUN\",\n\t\t\t\"stephen\": \"PROPN\",\n\t\t\t\"intentional\": \"ADJ\",\n\t\t\t\"belittling\": \"ADJ\",\n\t\t\t\"designed\": \"VERB\",\n\t\t\t\"piano\": \"NOUN\",\n\t\t\t\"siesta\": \"NOUN\",\n\t\t\t\"pureed\": \"VERB\",\n\t\t\t\"simien\": \"PROPN\",\n\t\t\t\"chef\": \"NOUN\",\n\t\t\t\"concertina\": \"NOUN\",\n\t\t\t\"mop\": \"NOUN\",\n\t\t\t\"trendy\": \"ADJ\",\n\t\t\t\"trek\": \"PROPN\",\n\t\t\t\"1992\": \"NUM\",\n\t\t\t\"kernel\": \"NOUN\",\n\t\t\t\"teterboro\": \"PROPN\",\n\t\t\t\"prensky\": \"PROPN\",\n\t\t\t\"whie\": \"SCONJ\",\n\t\t\t\"majesty\": \"NOUN\",\n\t\t\t\"menus\": \"NOUN\",\n\t\t\t\"ecs\": \"PROPN\",\n\t\t\t\"worst\": \"ADJ\",\n\t\t\t\"manipulations\": \"NOUN\",\n\t\t\t\"w\": \"PROPN\",\n\t\t\t\"singers\": \"NOUN\",\n\t\t\t\"portsmouth\": \"PROPN\",\n\t\t\t\"sonic\": \"PROPN\",\n\t\t\t\"participant\": \"NOUN\",\n\t\t\t\"triviality\": \"NOUN\",\n\t\t\t\"conquistadors\": \"NOUN\",\n\t\t\t\"foothills\": \"NOUN\",\n\t\t\t\"o'rourke\": \"PROPN\",\n\t\t\t\"sculpting\": \"NOUN\",\n\t\t\t\"utter\": \"ADJ\",\n\t\t\t\"danelia\": \"PROPN\",\n\t\t\t\"discipline\": \"NOUN\",\n\t\t\t\"categories\": \"NOUN\",\n\t\t\t\"innate\": \"ADJ\",\n\t\t\t\"bhatia\": \"PROPN\",\n\t\t\t\"primitive\": \"ADJ\",\n\t\t\t\"shimon\": \"PROPN\",\n\t\t\t\"mimicking\": \"VERB\",\n\t\t\t\"pieces\": \"NOUN\",\n\t\t\t\"au\": \"PROPN\",\n\t\t\t\"river-beds\": \"NOUN\",\n\t\t\t\"resume\": \"NOUN\",\n\t\t\t\"musicians\": \"NOUN\",\n\t\t\t\"i.e.\": \"ADV\",\n\t\t\t\"1774\": \"NUM\",\n\t\t\t\"sued\": \"VERB\",\n\t\t\t\"dock\": \"NOUN\",\n\t\t\t\"strynø\": \"PROPN\",\n\t\t\t\"dwarfed\": \"VERB\",\n\t\t\t\"kazimir\": \"PROPN\",\n\t\t\t\"quantcast\": \"PROPN\",\n\t\t\t\"unitary\": \"ADJ\",\n\t\t\t\"subsection\": \"NOUN\",\n\t\t\t\"elviña\": \"PROPN\",\n\t\t\t\"friend\": \"NOUN\",\n\t\t\t\"hermes\": \"PROPN\",\n\t\t\t\"picks\": \"NOUN\",\n\t\t\t\"fastest\": \"ADJ\",\n\t\t\t\"noticed\": \"VERB\",\n\t\t\t\"pilgrimages\": \"NOUN\",\n\t\t\t\"donning\": \"VERB\",\n\t\t\t\"shannon\": \"PROPN\",\n\t\t\t\"motive\": \"NOUN\",\n\t\t\t\"grab\": \"VERB\",\n\t\t\t\"experimentally\": \"ADV\",\n\t\t\t\"bandera\": \"PROPN\",\n\t\t\t\"blanc\": \"PROPN\",\n\t\t\t\"verizon\": \"PROPN\",\n\t\t\t\"responsive\": \"ADJ\",\n\t\t\t\"deffenitly\": \"ADV\",\n\t\t\t\"+852\": \"NUM\",\n\t\t\t\"regardless\": \"ADV\",\n\t\t\t\"perle\": \"PROPN\",\n\t\t\t\"ft.\": \"PROPN\",\n\t\t\t\"501\": \"NUM\",\n\t\t\t\"picky\": \"ADJ\",\n\t\t\t\"michigan\": \"PROPN\",\n\t\t\t\"rick\": \"PROPN\",\n\t\t\t\"leach\": \"PROPN\",\n\t\t\t\"chamberlain\": \"PROPN\",\n\t\t\t\"august\": \"PROPN\",\n\t\t\t\"forever\": \"ADV\",\n\t\t\t\"resembling\": \"VERB\",\n\t\t\t\"1993\": \"NUM\",\n\t\t\t\"toni\": \"PROPN\",\n\t\t\t\"hairs\": \"NOUN\",\n\t\t\t\"enterprises\": \"NOUN\",\n\t\t\t\"1990s\": \"NOUN\",\n\t\t\t\"ahmed\": \"PROPN\",\n\t\t\t\"ole\": \"ADJ\",\n\t\t\t\"brutality\": \"NOUN\",\n\t\t\t\"ubisoft\": \"PROPN\",\n\t\t\t\"firewalls\": \"NOUN\",\n\t\t\t\"meetings\": \"NOUN\",\n\t\t\t\"guided\": \"VERB\",\n\t\t\t\"algorithms\": \"NOUN\",\n\t\t\t\"printed\": \"VERB\",\n\t\t\t\"visitor\": \"NOUN\",\n\t\t\t\"secret\": \"ADJ\",\n\t\t\t\"frequently\": \"ADV\",\n\t\t\t\"cdg\": \"PROPN\",\n\t\t\t\"ext.\": \"NOUN\",\n\t\t\t\"discontinued\": \"VERB\",\n\t\t\t\"outbreak\": \"NOUN\",\n\t\t\t\"col.\": \"PROPN\",\n\t\t\t\"enroneauction\": \"PROPN\",\n\t\t\t\"downfall\": \"NOUN\",\n\t\t\t\"glands\": \"NOUN\",\n\t\t\t\"slide\": \"NOUN\",\n\t\t\t\"plied\": \"VERB\",\n\t\t\t\"14,000\": \"NUM\",\n\t\t\t\"acd\": \"PROPN\",\n\t\t\t\"1796\": \"NUM\",\n\t\t\t\"roosevelt\": \"PROPN\",\n\t\t\t\"blown-up\": \"ADJ\",\n\t\t\t\"parted\": \"VERB\",\n\t\t\t\"regularly\": \"ADV\",\n\t\t\t\"leaves\": \"NOUN\",\n\t\t\t\"frick\": \"PROPN\",\n\t\t\t\"treaty\": \"PROPN\",\n\t\t\t\"sits\": \"VERB\",\n\t\t\t\"sw\": \"PROPN\",\n\t\t\t\"patronage\": \"NOUN\",\n\t\t\t\"banshee\": \"NOUN\",\n\t\t\t\"snappy\": \"ADJ\",\n\t\t\t\"rearview\": \"NOUN\",\n\t\t\t\"bonded\": \"VERB\",\n\t\t\t\"regulars\": \"NOUN\",\n\t\t\t\"nicest\": \"ADJ\",\n\t\t\t\"toddler\": \"NOUN\",\n\t\t\t\"blip\": \"NOUN\",\n\t\t\t\"mathematician\": \"NOUN\",\n\t\t\t\"columbus\": \"PROPN\",\n\t\t\t\"calf\": \"NOUN\",\n\t\t\t\"hadith\": \"PROPN\",\n\t\t\t\"right\": \"ADJ\",\n\t\t\t\"honda\": \"PROPN\",\n\t\t\t\"317\": \"NUM\",\n\t\t\t\"rockin\": \"PROPN\",\n\t\t\t\"contraptions\": \"NOUN\",\n\t\t\t\"169\": \"NUM\",\n\t\t\t\"lintels\": \"NOUN\",\n\t\t\t\"velupillai\": \"PROPN\",\n\t\t\t\"pegged\": \"VERB\",\n\t\t\t\"thesis\": \"NOUN\",\n\t\t\t\"students\": \"NOUN\",\n\t\t\t\"pik-wan\": \"PROPN\",\n\t\t\t\"misrepresenting\": \"VERB\",\n\t\t\t\"divine\": \"ADJ\",\n\t\t\t\"loomed\": \"VERB\",\n\t\t\t\"tyler\": \"PROPN\",\n\t\t\t\"xf\": \"PROPN\",\n\t\t\t\"vetri\": \"PROPN\",\n\t\t\t\"completes\": \"VERB\",\n\t\t\t\"bjerrebyvej\": \"PROPN\",\n\t\t\t\"parra\": \"PROPN\",\n\t\t\t\"mistakes\": \"NOUN\",\n\t\t\t\"redundant\": \"ADJ\",\n\t\t\t\"kean\": \"PROPN\",\n\t\t\t\"opposition\": \"NOUN\",\n\t\t\t\"3/4\": \"NUM\",\n\t\t\t\"01:04\": \"NUM\",\n\t\t\t\"greyhound\": \"PROPN\",\n\t\t\t\"absurdity\": \"NOUN\",\n\t\t\t\"wholegrains\": \"NOUN\",\n\t\t\t\"vlogger\": \"NOUN\",\n\t\t\t\"progresses\": \"VERB\",\n\t\t\t\"islamist\": \"PROPN\",\n\t\t\t\"quizzing\": \"VERB\",\n\t\t\t\"inspection\": \"NOUN\",\n\t\t\t\"payout\": \"NOUN\",\n\t\t\t\"cutlery\": \"NOUN\",\n\t\t\t\"cellfone\": \"NOUN\",\n\t\t\t\"marianne\": \"PROPN\",\n\t\t\t\"coins\": \"NOUN\",\n\t\t\t\"mosul\": \"PROPN\",\n\t\t\t\"march\": \"PROPN\",\n\t\t\t\"pursuing\": \"VERB\",\n\t\t\t\"newsday.com\": \"PROPN\",\n\t\t\t\"dockworkers\": \"NOUN\",\n\t\t\t\"dong\": \"PROPN\",\n\t\t\t\"sirloin\": \"NOUN\",\n\t\t\t\"friedrichstrasse\": \"PROPN\",\n\t\t\t\"neoformalism\": \"NOUN\",\n\t\t\t\"empathized\": \"VERB\",\n\t\t\t\"skylight\": \"NOUN\",\n\t\t\t\"looks\": \"VERB\",\n\t\t\t\"drawings\": \"NOUN\",\n\t\t\t\"livid\": \"ADJ\",\n\t\t\t\"boils\": \"VERB\",\n\t\t\t\"tuesday's\": \"PROPN\",\n\t\t\t\"onwards\": \"ADV\",\n\t\t\t\"spiritually\": \"ADV\",\n\t\t\t\"metering\": \"NOUN\",\n\t\t\t\"reassemble\": \"VERB\",\n\t\t\t\"outfielder\": \"NOUN\",\n\t\t\t\"modulate\": \"VERB\",\n\t\t\t\"1000.00\": \"NUM\",\n\t\t\t\"unanimous\": \"ADJ\",\n\t\t\t\"jenna\": \"PROPN\",\n\t\t\t\"disk\": \"NOUN\",\n\t\t\t\"ted.bockius@ivita.com\": \"PROPN\",\n\t\t\t\"palms\": \"NOUN\",\n\t\t\t\"although\": \"SCONJ\",\n\t\t\t\"flag\": \"NOUN\",\n\t\t\t\"hustle\": \"NOUN\",\n\t\t\t\"recommended\": \"VERB\",\n\t\t\t\"norm\": \"NOUN\",\n\t\t\t\"abu\": \"PROPN\",\n\t\t\t\"g\": \"NOUN\",\n\t\t\t\"obeys\": \"VERB\",\n\t\t\t\"exceeded\": \"VERB\",\n\t\t\t\"nematocysts\": \"NOUN\",\n\t\t\t\"10:38\": \"NUM\",\n\t\t\t\"province\": \"PROPN\",\n\t\t\t\"drug\": \"NOUN\",\n\t\t\t\"☎\": \"SYM\",\n\t\t\t\"clamped\": \"VERB\",\n\t\t\t\"conversos\": \"NOUN\",\n\t\t\t\"est\": \"PROPN\",\n\t\t\t\"busy\": \"ADJ\",\n\t\t\t\"suffer\": \"VERB\",\n\t\t\t\"tarahumara\": \"ADJ\",\n\t\t\t\"sam\": \"PROPN\",\n\t\t\t\"http://www.playatmcd.com/en-us/main/gameboard\": \"PROPN\",\n\t\t\t\"resemblance\": \"NOUN\",\n\t\t\t\"joyfully\": \"ADV\",\n\t\t\t\"holders\": \"NOUN\",\n\t\t\t\"rocks\": \"NOUN\",\n\t\t\t\"needed\": \"VERB\",\n\t\t\t\"leafy\": \"ADJ\",\n\t\t\t\"someplace\": \"ADV\",\n\t\t\t\"spacecraft\": \"NOUN\",\n\t\t\t\"lifehood\": \"NOUN\",\n\t\t\t\"joyce\": \"PROPN\",\n\t\t\t\"unstable\": \"ADJ\",\n\t\t\t\"electronics\": \"NOUN\",\n\t\t\t\"...?!!!\": \"PUNCT\",\n\t\t\t\"bosco\": \"PROPN\",\n\t\t\t\"icdc\": \"PROPN\",\n\t\t\t\"highest\": \"ADJ\",\n\t\t\t\"tombstone\": \"NOUN\",\n\t\t\t\"heavily\": \"ADV\",\n\t\t\t\"yu\": \"PROPN\",\n\t\t\t\"lightness\": \"NOUN\",\n\t\t\t\"rathbun\": \"PROPN\",\n\t\t\t\"comp.sources.unix\": \"NOUN\",\n\t\t\t\"obtain\": \"VERB\",\n\t\t\t\"jackson\": \"PROPN\",\n\t\t\t\"mantra\": \"NOUN\",\n\t\t\t\"violets\": \"NOUN\",\n\t\t\t\"rear\": \"ADJ\",\n\t\t\t\"#langu\": \"PROPN\",\n\t\t\t\"violates\": \"VERB\",\n\t\t\t\"remembering\": \"VERB\",\n\t\t\t\"sanders\": \"PROPN\",\n\t\t\t\"bagh\": \"PROPN\",\n\t\t\t\"cookies\": \"NOUN\",\n\t\t\t\"45\": \"NUM\",\n\t\t\t\"homemade\": \"ADJ\",\n\t\t\t\"walked\": \"VERB\",\n\t\t\t\"amrullah\": \"PROPN\",\n\t\t\t\"accounts\": \"NOUN\",\n\t\t\t\"popup\": \"NOUN\",\n\t\t\t\"polytheistic\": \"ADJ\",\n\t\t\t\"want\": \"VERB\",\n\t\t\t\"augmented\": \"VERB\",\n\t\t\t\"unlimited\": \"ADJ\",\n\t\t\t\"sympathetic\": \"ADJ\",\n\t\t\t\"continued\": \"VERB\",\n\t\t\t\"lisbon\": \"PROPN\",\n\t\t\t\"hearing\": \"NOUN\",\n\t\t\t\"dreaded\": \"VERB\",\n\t\t\t\"worried\": \"ADJ\",\n\t\t\t\"bridal\": \"ADJ\",\n\t\t\t\"11/1/01\": \"NUM\",\n\t\t\t\"prepares\": \"VERB\",\n\t\t\t\"grimaced\": \"VERB\",\n\t\t\t\"stocking\": \"NOUN\",\n\t\t\t\"abandonment\": \"NOUN\",\n\t\t\t\"contribute\": \"VERB\",\n\t\t\t\"bypass\": \"VERB\",\n\t\t\t\"unobstructed\": \"ADJ\",\n\t\t\t\"besides\": \"ADP\",\n\t\t\t\"nuanced\": \"ADJ\",\n\t\t\t\"n’t\": \"PART\",\n\t\t\t\"etc.\": \"NOUN\",\n\t\t\t\"shampoo\": \"NOUN\",\n\t\t\t\"05/30/2001\": \"NUM\",\n\t\t\t\"!!!!!!!!!!!\": \"PUNCT\",\n\t\t\t\"rodaba\": \"PROPN\",\n\t\t\t\"hormonal\": \"ADJ\",\n\t\t\t\"goggling\": \"VERB\",\n\t\t\t\"metropolitan\": \"ADJ\",\n\t\t\t\"deduct\": \"VERB\",\n\t\t\t\"cypriots\": \"NOUN\",\n\t\t\t\"376-9004\": \"NUM\",\n\t\t\t\"unawareness\": \"NOUN\",\n\t\t\t\"reaffirmed\": \"VERB\",\n\t\t\t\"fruit\": \"NOUN\",\n\t\t\t\"replace\": \"VERB\",\n\t\t\t\"3/8/00\": \"NUM\",\n\t\t\t\"ridiculed\": \"VERB\",\n\t\t\t\"tail\": \"NOUN\",\n\t\t\t\"grammarian\": \"NOUN\",\n\t\t\t\"extrudes\": \"VERB\",\n\t\t\t\"indomitable\": \"ADJ\",\n\t\t\t\"191\": \"NUM\",\n\t\t\t\"african\": \"ADJ\",\n\t\t\t\"11\": \"NUM\",\n\t\t\t\"darkness\": \"NOUN\",\n\t\t\t\"1.25\": \"NUM\",\n\t\t\t\"jana\": \"PROPN\",\n\t\t\t\"lakoff\": \"PROPN\",\n\t\t\t\"jumper\": \"NOUN\",\n\t\t\t\"reverse\": \"VERB\",\n\t\t\t\"anne\": \"PROPN\",\n\t\t\t\"shady\": \"PROPN\",\n\t\t\t\"non-scientific\": \"ADJ\",\n\t\t\t\"',\": \"AUX\",\n\t\t\t\"unix\": \"PROPN\",\n\t\t\t\"cuisine\": \"NOUN\",\n\t\t\t\"sums\": \"NOUN\",\n\t\t\t\"mechanical\": \"ADJ\",\n\t\t\t\"170\": \"NUM\",\n\t\t\t\"fyi\": \"ADV\",\n\t\t\t\"pluralistic\": \"ADJ\",\n\t\t\t\"bungling\": \"NOUN\",\n\t\t\t\"batawi\": \"PROPN\",\n\t\t\t\"friendship\": \"NOUN\",\n\t\t\t\"gamaa\": \"PROPN\",\n\t\t\t\"economizing\": \"VERB\",\n\t\t\t\"http://gimpedblog.blogspot.com/2011/09/how-to-use-gimp-for-beginners-lesson-4.html\": \"PROPN\",\n\t\t\t\"brimming\": \"VERB\",\n\t\t\t\"said\": \"VERB\",\n\t\t\t\"poison\": \"NOUN\",\n\t\t\t\"publishing\": \"NOUN\",\n\t\t\t\"penetrated\": \"VERB\",\n\t\t\t\"hedgehog\": \"NOUN\",\n\t\t\t\"boy\": \"NOUN\",\n\t\t\t\"disputes\": \"NOUN\",\n\t\t\t\"ghazaliyah\": \"PROPN\",\n\t\t\t\"multipolar\": \"ADJ\",\n\t\t\t\"timing\": \"NOUN\",\n\t\t\t\"vendor\": \"NOUN\",\n\t\t\t\"1-800-238-5355\": \"NUM\",\n\t\t\t\"nowhere\": \"ADV\",\n\t\t\t\"ehow\": \"PROPN\",\n\t\t\t\"1:30\": \"NUM\",\n\t\t\t\"expulsion\": \"NOUN\",\n\t\t\t\"scampi\": \"NOUN\",\n\t\t\t\"needing\": \"VERB\",\n\t\t\t\"regional\": \"ADJ\",\n\t\t\t\"stoker\": \"PROPN\",\n\t\t\t\"foam\": \"NOUN\",\n\t\t\t\"networks\": \"NOUN\",\n\t\t\t\"paving\": \"NOUN\",\n\t\t\t\"maintained\": \"VERB\",\n\t\t\t\"oxford\": \"PROPN\",\n\t\t\t\"hernan\": \"PROPN\",\n\t\t\t\"grenade\": \"NOUN\",\n\t\t\t\"presumed\": \"VERB\",\n\t\t\t\"thief\": \"NOUN\",\n\t\t\t\"batted\": \"VERB\",\n\t\t\t\"christie\": \"PROPN\",\n\t\t\t\"forges\": \"VERB\",\n\t\t\t\"rewind\": \"VERB\",\n\t\t\t\"6.3\": \"NUM\",\n\t\t\t\"untouchable\": \"ADJ\",\n\t\t\t\"menstruation\": \"NOUN\",\n\t\t\t\"environments\": \"NOUN\",\n\t\t\t\"jensen\": \"PROPN\",\n\t\t\t\"normality\": \"NOUN\",\n\t\t\t\"downloads\": \"NOUN\",\n\t\t\t\"cascades\": \"NOUN\",\n\t\t\t\"favoring\": \"VERB\",\n\t\t\t\"talkie\": \"NOUN\",\n\t\t\t\"demosisto\": \"PROPN\",\n\t\t\t\"indexed\": \"VERB\",\n\t\t\t\"caem\": \"PROPN\",\n\t\t\t\"influx\": \"NOUN\",\n\t\t\t\"flunking\": \"VERB\",\n\t\t\t\"salads\": \"NOUN\",\n\t\t\t\"keep\": \"VERB\",\n\t\t\t\"mozilla\": \"PROPN\",\n\t\t\t\"860-665-2368\": \"NUM\",\n\t\t\t\"nestled\": \"VERB\",\n\t\t\t\"numbers\": \"NOUN\",\n\t\t\t\"cuticles\": \"NOUN\",\n\t\t\t\"1972\": \"NUM\",\n\t\t\t\"medicine\": \"NOUN\",\n\t\t\t\"hunh\": \"INTJ\",\n\t\t\t\"janice\": \"PROPN\",\n\t\t\t\"psalms\": \"PROPN\",\n\t\t\t\"patricia\": \"PROPN\",\n\t\t\t\"sitcom\": \"NOUN\",\n\t\t\t\"passed\": \"VERB\",\n\t\t\t\"conversations\": \"NOUN\",\n\t\t\t\"cherished\": \"VERB\",\n\t\t\t\"enoch\": \"PROPN\",\n\t\t\t\"swabs\": \"VERB\",\n\t\t\t\"venture\": \"NOUN\",\n\t\t\t\"no.\": \"NOUN\",\n\t\t\t\"dads\": \"NOUN\",\n\t\t\t\"46093\": \"NUM\",\n\t\t\t\"sherry\": \"PROPN\",\n\t\t\t\"ansems\": \"PROPN\",\n\t\t\t\"when\": \"ADV\",\n\t\t\t\"salafi\": \"PROPN\",\n\t\t\t\"pervaiz\": \"PROPN\",\n\t\t\t\"disenfranchised\": \"VERB\",\n\t\t\t\"meurtres\": \"PROPN\",\n\t\t\t\"230\": \"NUM\",\n\t\t\t\"pics\": \"NOUN\",\n\t\t\t\"exams\": \"NOUN\",\n\t\t\t\"meatball\": \"NOUN\",\n\t\t\t\"chose\": \"VERB\",\n\t\t\t\"yoga\": \"NOUN\",\n\t\t\t\"investigative\": \"ADJ\",\n\t\t\t\"yeoncheon\": \"PROPN\",\n\t\t\t\"defund\": \"VERB\",\n\t\t\t\"gf\": \"NOUN\",\n\t\t\t\"vinod\": \"PROPN\",\n\t\t\t\"driest\": \"ADJ\",\n\t\t\t\"basically\": \"ADV\",\n\t\t\t\"cowboys\": \"PROPN\",\n\t\t\t\"albert\": \"PROPN\",\n\t\t\t\"alt.animals.dog\": \"NOUN\",\n\t\t\t\"2/7/2005\": \"NUM\",\n\t\t\t\"like\": \"ADP\",\n\t\t\t\"trash\": \"NOUN\",\n\t\t\t\"rowing\": \"VERB\",\n\t\t\t\"lanes\": \"NOUN\",\n\t\t\t\"ye\": \"PRON\",\n\t\t\t\"levitt\": \"PROPN\",\n\t\t\t\"659,000\": \"NUM\",\n\t\t\t\"timeframes\": \"NOUN\",\n\t\t\t\"deemed\": \"VERB\",\n\t\t\t\"tuning\": \"NOUN\",\n\t\t\t\"nibble\": \"VERB\",\n\t\t\t\"steak\": \"NOUN\",\n\t\t\t\"referral\": \"NOUN\",\n\t\t\t\"deffly\": \"ADV\",\n\t\t\t\"debutants\": \"NOUN\",\n\t\t\t\"arises\": \"VERB\",\n\t\t\t\"nutritious\": \"ADJ\",\n\t\t\t\"bleak\": \"ADJ\",\n\t\t\t\"inspired\": \"VERB\",\n\t\t\t\"rabble\": \"NOUN\",\n\t\t\t\"elizabeth\": \"PROPN\",\n\t\t\t\"static\": \"NOUN\",\n\t\t\t\"letters\": \"NOUN\",\n\t\t\t\"sandalled\": \"ADJ\",\n\t\t\t\"proudly\": \"ADV\",\n\t\t\t\"rt\": \"PROPN\",\n\t\t\t\"advance\": \"NOUN\",\n\t\t\t\"missing\": \"VERB\",\n\t\t\t\"inspiration\": \"NOUN\",\n\t\t\t\"decentralized\": \"VERB\",\n\t\t\t\"fills\": \"VERB\",\n\t\t\t\"mayan\": \"ADJ\",\n\t\t\t\"forwarded\": \"VERB\",\n\t\t\t\"hip\": \"NOUN\",\n\t\t\t\"landscape\": \"NOUN\",\n\t\t\t\"perfectionist\": \"NOUN\",\n\t\t\t\"claque\": \"NOUN\",\n\t\t\t\"transportation\": \"NOUN\",\n\t\t\t\"circumference\": \"NOUN\",\n\t\t\t\"unfolded\": \"VERB\",\n\t\t\t\"till\": \"ADP\",\n\t\t\t\"realise\": \"VERB\",\n\t\t\t\"countersignature\": \"NOUN\",\n\t\t\t\"jeopardy\": \"PROPN\",\n\t\t\t\"wholesale\": \"ADJ\",\n\t\t\t\"andrzej\": \"PROPN\",\n\t\t\t\"fancy\": \"ADJ\",\n\t\t\t\"planes\": \"NOUN\",\n\t\t\t\"utility\": \"NOUN\",\n\t\t\t\"commit\": \"VERB\",\n\t\t\t\"lived\": \"VERB\",\n\t\t\t\"worksheet\": \"NOUN\",\n\t\t\t\"27th\": \"NOUN\",\n\t\t\t\"maclaurin\": \"PROPN\",\n\t\t\t\"kendel\": \"PROPN\",\n\t\t\t\"411507\": \"NUM\",\n\t\t\t\"friendliness\": \"NOUN\",\n\t\t\t\"builds\": \"VERB\",\n\t\t\t\"letting\": \"VERB\",\n\t\t\t\"promoted\": \"VERB\",\n\t\t\t\"dutifully\": \"ADV\",\n\t\t\t\"92,000\": \"NUM\",\n\t\t\t\"335\": \"NUM\",\n\t\t\t\"cannes\": \"PROPN\",\n\t\t\t\"achieved\": \"VERB\",\n\t\t\t\"bath-stool\": \"NOUN\",\n\t\t\t\"mdgs\": \"PROPN\",\n\t\t\t\"bs\": \"NOUN\",\n\t\t\t\"considers\": \"VERB\",\n\t\t\t\"attainable\": \"ADJ\",\n\t\t\t\"promotional\": \"ADJ\",\n\t\t\t\"pp\": \"NOUN\",\n\t\t\t\"stems\": \"NOUN\",\n\t\t\t\"cloudless\": \"ADJ\",\n\t\t\t\"pst\": \"PROPN\",\n\t\t\t\"adhered\": \"VERB\",\n\t\t\t\"professors\": \"NOUN\",\n\t\t\t\"u-haul\": \"PROPN\",\n\t\t\t\"cures\": \"VERB\",\n\t\t\t\"visual\": \"ADJ\",\n\t\t\t\"masjid\": \"PROPN\",\n\t\t\t\"egress\": \"NOUN\",\n\t\t\t\"deformity\": \"NOUN\",\n\t\t\t\"winfrey\": \"PROPN\",\n\t\t\t\"kinect\": \"PROPN\",\n\t\t\t\"slenderness\": \"NOUN\",\n\t\t\t\"nevertheless\": \"ADV\",\n\t\t\t\"flinching\": \"VERB\",\n\t\t\t\"throughout\": \"ADP\",\n\t\t\t\"1975\": \"NUM\",\n\t\t\t\"surprise\": \"NOUN\",\n\t\t\t\"peres\": \"PROPN\",\n\t\t\t\"unpack\": \"ADJ\",\n\t\t\t\"months\": \"NOUN\",\n\t\t\t\"uncover\": \"VERB\",\n\t\t\t\"grandsons\": \"NOUN\",\n\t\t\t\"heartwarming\": \"ADJ\",\n\t\t\t\"christmas\": \"PROPN\",\n\t\t\t\"contained\": \"VERB\",\n\t\t\t\"stylist\": \"NOUN\",\n\t\t\t\"mérida\": \"PROPN\",\n\t\t\t\"thematic\": \"ADJ\",\n\t\t\t\"spawning\": \"VERB\",\n\t\t\t\"`\": \"PUNCT\",\n\t\t\t\"economies\": \"NOUN\",\n\t\t\t\"tipped\": \"VERB\",\n\t\t\t\"unpleasant\": \"ADJ\",\n\t\t\t\"misrepresentations\": \"NOUN\",\n\t\t\t\"boozy\": \"ADJ\",\n\t\t\t\"leonard\": \"PROPN\",\n\t\t\t\"crop\": \"NOUN\",\n\t\t\t\"!.\": \"PUNCT\",\n\t\t\t\"donut\": \"NOUN\",\n\t\t\t\"annoyed\": \"ADJ\",\n\t\t\t\"pioneers\": \"PROPN\",\n\t\t\t\"isle\": \"PROPN\",\n\t\t\t\"dispersing\": \"VERB\",\n\t\t\t\"agencies\": \"NOUN\",\n\t\t\t\"spew\": \"VERB\",\n\t\t\t\"averaging\": \"NOUN\",\n\t\t\t\"reverence\": \"NOUN\",\n\t\t\t\"vichy\": \"PROPN\",\n\t\t\t\"diffuse\": \"VERB\",\n\t\t\t\"predictable\": \"ADJ\",\n\t\t\t\"summertime\": \"NOUN\",\n\t\t\t\"informative\": \"ADJ\",\n\t\t\t\"assailants\": \"NOUN\",\n\t\t\t\"joux\": \"PROPN\",\n\t\t\t\"savage\": \"PROPN\",\n\t\t\t\"11:07\": \"NUM\",\n\t\t\t\"majestic\": \"ADJ\",\n\t\t\t\"altman\": \"PROPN\",\n\t\t\t\"adopt\": \"VERB\",\n\t\t\t\"foreground\": \"NOUN\",\n\t\t\t\"lands\": \"NOUN\",\n\t\t\t\"ass't.\": \"NOUN\",\n\t\t\t\"obtained\": \"VERB\",\n\t\t\t\"juggling\": \"NOUN\",\n\t\t\t\"dharmad...@gmail.com\": \"PROPN\",\n\t\t\t\"desperately\": \"ADV\",\n\t\t\t\"proxy\": \"NOUN\",\n\t\t\t\"dream\": \"NOUN\",\n\t\t\t\"entirely\": \"ADV\",\n\t\t\t\"shamanism\": \"PROPN\",\n\t\t\t\"superstition\": \"NOUN\",\n\t\t\t\"dow\": \"PROPN\",\n\t\t\t\"emerged\": \"VERB\",\n\t\t\t\"delights\": \"NOUN\",\n\t\t\t\"sep\": \"PROPN\",\n\t\t\t\"bouild\": \"VERB\",\n\t\t\t\"abbassi\": \"PROPN\",\n\t\t\t\"queues\": \"NOUN\",\n\t\t\t\"park\": \"NOUN\",\n\t\t\t\"quicker\": \"ADJ\",\n\t\t\t\"whitman\": \"PROPN\",\n\t\t\t\"accelerating\": \"VERB\",\n\t\t\t\"starting\": \"VERB\",\n\t\t\t\"02:34\": \"NUM\",\n\t\t\t\"scuffling\": \"VERB\",\n\t\t\t\"however\": \"ADV\",\n\t\t\t\"venice\": \"PROPN\",\n\t\t\t\"ceiling\": \"NOUN\",\n\t\t\t\"concurrently\": \"ADV\",\n\t\t\t\"incorrect\": \"ADJ\",\n\t\t\t\"townhouse\": \"NOUN\",\n\t\t\t\"58,825\": \"NUM\",\n\t\t\t\"restructuring\": \"NOUN\",\n\t\t\t\"stomachs\": \"NOUN\",\n\t\t\t\"11222\": \"NUM\",\n\t\t\t\"bug\": \"NOUN\",\n\t\t\t\"goodies\": \"NOUN\",\n\t\t\t\"franklin\": \"PROPN\",\n\t\t\t\"remember\": \"VERB\",\n\t\t\t\"strolled\": \"VERB\",\n\t\t\t\"ashkenazi\": \"PROPN\",\n\t\t\t\"geometrically\": \"ADV\",\n\t\t\t\"251\": \"NUM\",\n\t\t\t\"overcharged\": \"VERB\",\n\t\t\t\"biloxi\": \"PROPN\",\n\t\t\t\"random\": \"ADJ\",\n\t\t\t\"liberties\": \"NOUN\",\n\t\t\t\"groaning\": \"VERB\",\n\t\t\t\"gibbering\": \"VERB\",\n\t\t\t\"regading\": \"VERB\",\n\t\t\t\"bat-like\": \"ADJ\",\n\t\t\t\"pantheons\": \"NOUN\",\n\t\t\t\"hernia\": \"NOUN\",\n\t\t\t\"code\": \"NOUN\",\n\t\t\t\"clinging\": \"VERB\",\n\t\t\t\"gliding\": \"VERB\",\n\t\t\t\"420072\": \"NUM\",\n\t\t\t\"coruña\": \"PROPN\",\n\t\t\t\"baked\": \"VERB\",\n\t\t\t\"overall\": \"ADJ\",\n\t\t\t\"premature\": \"ADJ\",\n\t\t\t\"chomping\": \"VERB\",\n\t\t\t\"routines\": \"NOUN\",\n\t\t\t\"teachings\": \"NOUN\",\n\t\t\t\"clue\": \"NOUN\",\n\t\t\t\"non-arab\": \"ADJ\",\n\t\t\t\"16\": \"NUM\",\n\t\t\t\"kalkat\": \"PROPN\",\n\t\t\t\"demante\": \"PROPN\",\n\t\t\t\"grudging\": \"VERB\",\n\t\t\t\"indonesian\": \"ADJ\",\n\t\t\t\"ohio\": \"PROPN\",\n\t\t\t\"brush\": \"NOUN\",\n\t\t\t\"10.6\": \"NUM\",\n\t\t\t\"resulted\": \"VERB\",\n\t\t\t\"shredded\": \"ADJ\",\n\t\t\t\"op\": \"INTJ\",\n\t\t\t\"istanbul\": \"PROPN\",\n\t\t\t\"balls\": \"NOUN\",\n\t\t\t\"masjed-e\": \"PROPN\",\n\t\t\t\"corporations\": \"NOUN\",\n\t\t\t\"hassles\": \"NOUN\",\n\t\t\t\"1951\": \"NUM\",\n\t\t\t\"ones\": \"NOUN\",\n\t\t\t\"tradition\": \"NOUN\",\n\t\t\t\"howled\": \"VERB\",\n\t\t\t\"singh\": \"PROPN\",\n\t\t\t\"empiricists\": \"NOUN\",\n\t\t\t\"pedagogical\": \"ADJ\",\n\t\t\t\"altho\": \"SCONJ\",\n\t\t\t\"poisonous\": \"ADJ\",\n\t\t\t\"marketers\": \"NOUN\",\n\t\t\t\"vagabond\": \"PROPN\",\n\t\t\t\"alumni\": \"NOUN\",\n\t\t\t\"gianutto\": \"PROPN\",\n\t\t\t\"exporting\": \"VERB\",\n\t\t\t\"jaquier\": \"PROPN\",\n\t\t\t\"adjacent\": \"ADJ\",\n\t\t\t\"circumscribed\": \"ADJ\",\n\t\t\t\"attentive\": \"ADJ\",\n\t\t\t\"budd\": \"PROPN\",\n\t\t\t\"genitalia\": \"NOUN\",\n\t\t\t\"once\": \"ADV\",\n\t\t\t\"fire\": \"NOUN\",\n\t\t\t\"baseline\": \"NOUN\",\n\t\t\t\"battling\": \"VERB\",\n\t\t\t\"ucsb\": \"PROPN\",\n\t\t\t\"prawns\": \"NOUN\",\n\t\t\t\"lamonica\": \"PROPN\",\n\t\t\t\"developer\": \"NOUN\",\n\t\t\t\"250,000\": \"NUM\",\n\t\t\t\"lush\": \"ADJ\",\n\t\t\t\"mid-october\": \"PROPN\",\n\t\t\t\"flatness\": \"NOUN\",\n\t\t\t\"patches\": \"NOUN\",\n\t\t\t\"distractors\": \"NOUN\",\n\t\t\t\"beard\": \"NOUN\",\n\t\t\t\"distresses\": \"NOUN\",\n\t\t\t\"sensory\": \"ADJ\",\n\t\t\t\"spot\": \"NOUN\",\n\t\t\t\"variable\": \"ADJ\",\n\t\t\t\"pluralist\": \"ADJ\",\n\t\t\t\"ellis\": \"PROPN\",\n\t\t\t\"owes\": \"VERB\",\n\t\t\t\"republic\": \"PROPN\",\n\t\t\t\"eaiser\": \"ADJ\",\n\t\t\t\"tate\": \"PROPN\",\n\t\t\t\"queue\": \"NOUN\",\n\t\t\t\"edmark\": \"PROPN\",\n\t\t\t\"glories\": \"NOUN\",\n\t\t\t\"aviation\": \"NOUN\",\n\t\t\t\"stupid\": \"ADJ\",\n\t\t\t\"declined\": \"VERB\",\n\t\t\t\"discourteous\": \"ADJ\",\n\t\t\t\"heater\": \"NOUN\",\n\t\t\t\"o'connor\": \"PROPN\",\n\t\t\t\"layer\": \"NOUN\",\n\t\t\t\"longitudinally\": \"ADV\",\n\t\t\t\"recycling\": \"NOUN\",\n\t\t\t\"lomas\": \"PROPN\",\n\t\t\t\"----------------------------------------------------------------\": \"PUNCT\",\n\t\t\t\"livestock\": \"NOUN\",\n\t\t\t\"tactical\": \"ADJ\",\n\t\t\t\"harangue\": \"NOUN\",\n\t\t\t\"tomorrow\": \"NOUN\",\n\t\t\t\"enquirer\": \"PROPN\",\n\t\t\t\"diatribe\": \"PROPN\",\n\t\t\t\"founders\": \"NOUN\",\n\t\t\t\"contracts\": \"NOUN\",\n\t\t\t\"maurer\": \"PROPN\",\n\t\t\t\"infringing\": \"VERB\",\n\t\t\t\"credited\": \"VERB\",\n\t\t\t\"passively\": \"ADV\",\n\t\t\t\"extravagant\": \"ADJ\",\n\t\t\t\"challenging\": \"ADJ\",\n\t\t\t\"persons\": \"NOUN\",\n\t\t\t\"------------------------------------------------------------------\": \"PUNCT\",\n\t\t\t\"marshall\": \"PROPN\",\n\t\t\t\"koolhaas\": \"PROPN\",\n\t\t\t\"268\": \"NUM\",\n\t\t\t\"localist\": \"ADJ\",\n\t\t\t\"skipper\": \"NOUN\",\n\t\t\t\"vegas\": \"PROPN\",\n\t\t\t\"diagnose\": \"VERB\",\n\t\t\t\"bands\": \"NOUN\",\n\t\t\t\"traveled\": \"VERB\",\n\t\t\t\"zoning\": \"PROPN\",\n\t\t\t\"reasoned\": \"VERB\",\n\t\t\t\"-------------------------------------------------------------------\": \"PUNCT\",\n\t\t\t\"www.designofashion.com\": \"PROPN\",\n\t\t\t\"mould\": \"NOUN\",\n\t\t\t\"vancouver\": \"PROPN\",\n\t\t\t\"relapse\": \"NOUN\",\n\t\t\t\"motorola\": \"PROPN\",\n\t\t\t\"vaguer\": \"ADJ\",\n\t\t\t\"05/03/2001\": \"NUM\",\n\t\t\t\"m\": \"NUM\",\n\t\t\t\"trustworthiness\": \"NOUN\",\n\t\t\t\"clem\": \"PROPN\",\n\t\t\t\"kennedy\": \"PROPN\",\n\t\t\t\"r-\": \"INTJ\",\n\t\t\t\"believable\": \"ADJ\",\n\t\t\t\"mam\": \"PROPN\",\n\t\t\t\"promise\": \"NOUN\",\n\t\t\t\"silverware\": \"NOUN\",\n\t\t\t\"touch\": \"VERB\",\n\t\t\t\"warren\": \"PROPN\",\n\t\t\t\"christopher\": \"PROPN\",\n\t\t\t\"cyanide\": \"NOUN\",\n\t\t\t\"congestion\": \"NOUN\",\n\t\t\t\"rebecca\": \"PROPN\",\n\t\t\t\"vexation\": \"NOUN\",\n\t\t\t\"kioka\": \"PROPN\",\n\t\t\t\"fascist\": \"ADJ\",\n\t\t\t\"piers\": \"NOUN\",\n\t\t\t\"hydrocele\": \"NOUN\",\n\t\t\t\"jolla\": \"PROPN\",\n\t\t\t\"karim\": \"PROPN\",\n\t\t\t\"hamma\": \"PROPN\",\n\t\t\t\"disco\": \"PROPN\",\n\t\t\t\"2012\": \"NUM\",\n\t\t\t\"1961\": \"NUM\",\n\t\t\t\"families\": \"NOUN\",\n\t\t\t\"stacey\": \"PROPN\",\n\t\t\t\"80,000\": \"NUM\",\n\t\t\t\"gray\": \"ADJ\",\n\t\t\t\"caspian\": \"PROPN\",\n\t\t\t\"9.95\": \"NUM\",\n\t\t\t\"happiest\": \"ADJ\",\n\t\t\t\"wellington\": \"PROPN\",\n\t\t\t\"share\": \"VERB\",\n\t\t\t\"bypasses\": \"NOUN\",\n\t\t\t\"cropping\": \"VERB\",\n\t\t\t\"cares\": \"VERB\",\n\t\t\t\"mid-nineties\": \"NOUN\",\n\t\t\t\"ena\": \"PROPN\",\n\t\t\t\"pimple\": \"NOUN\",\n\t\t\t\"toil\": \"NOUN\",\n\t\t\t\"raise\": \"VERB\",\n\t\t\t\"edit\": \"NOUN\",\n\t\t\t\"sponsorship\": \"NOUN\",\n\t\t\t\"#'s\": \"NOUN\",\n\t\t\t\"controlled\": \"VERB\",\n\t\t\t\"halfway\": \"ADV\",\n\t\t\t\"diner\": \"NOUN\",\n\t\t\t\"signoffs\": \"NOUN\",\n\t\t\t\"seaward\": \"ADV\",\n\t\t\t\"clearing\": \"VERB\",\n\t\t\t\"brim\": \"NOUN\",\n\t\t\t\"cancer\": \"NOUN\",\n\t\t\t\"unequally\": \"ADV\",\n\t\t\t\"envisioned\": \"VERB\",\n\t\t\t\"veronique\": \"PROPN\",\n\t\t\t\"heel\": \"NOUN\",\n\t\t\t\"handkerchief\": \"NOUN\",\n\t\t\t\"oblivious\": \"ADJ\",\n\t\t\t\"percentiles\": \"NOUN\",\n\t\t\t\"linchpin\": \"NOUN\",\n\t\t\t\"parkway\": \"PROPN\",\n\t\t\t\"bench\": \"NOUN\",\n\t\t\t\"60,008\": \"NUM\",\n\t\t\t\"sizes\": \"NOUN\",\n\t\t\t\"hutcheson\": \"PROPN\",\n\t\t\t\"referrals\": \"NOUN\",\n\t\t\t\"vehicles\": \"NOUN\",\n\t\t\t\"toughies\": \"NOUN\",\n\t\t\t\"psycholical\": \"ADJ\",\n\t\t\t\"forceful\": \"ADJ\",\n\t\t\t\"frequencies\": \"NOUN\",\n\t\t\t\"header\": \"NOUN\",\n\t\t\t\"dharmadeva\": \"PROPN\",\n\t\t\t\"husayn\": \"PROPN\",\n\t\t\t\"thi\": \"INTJ\",\n\t\t\t\"seeded\": \"VERB\",\n\t\t\t\"italy\": \"PROPN\",\n\t\t\t\"nalapat\": \"PROPN\",\n\t\t\t\"f.o.b.\": \"PROPN\",\n\t\t\t\"recognize\": \"VERB\",\n\t\t\t\"x54667\": \"NOUN\",\n\t\t\t\"grow\": \"VERB\",\n\t\t\t\"cattle\": \"NOUN\",\n\t\t\t\"individual\": \"ADJ\",\n\t\t\t\"stylers\": \"NOUN\",\n\t\t\t\"17h\": \"NOUN\",\n\t\t\t\"assessed\": \"VERB\",\n\t\t\t\"asus\": \"PROPN\",\n\t\t\t\"clayton\": \"PROPN\",\n\t\t\t\"ralph\": \"PROPN\",\n\t\t\t\"fellowship\": \"PROPN\",\n\t\t\t\"greying\": \"VERB\",\n\t\t\t\"contribution\": \"NOUN\",\n\t\t\t\"heather\": \"PROPN\",\n\t\t\t\"escaped\": \"VERB\",\n\t\t\t\"damned\": \"ADJ\",\n\t\t\t\"otherwise\": \"ADV\",\n\t\t\t\"ah\": \"INTJ\",\n\t\t\t\"loaves\": \"NOUN\",\n\t\t\t\"troublefunk\": \"PROPN\",\n\t\t\t\"fedayeen\": \"NOUN\",\n\t\t\t\"gu'ud\": \"PROPN\",\n\t\t\t\"sheisters\": \"NOUN\",\n\t\t\t\"apprenticed\": \"VERB\",\n\t\t\t\"camps\": \"NOUN\",\n\t\t\t\"gratitude\": \"NOUN\",\n\t\t\t\"statute\": \"NOUN\",\n\t\t\t\"behesht\": \"PROPN\",\n\t\t\t\"tds\": \"NOUN\",\n\t\t\t\"mcclelland\": \"PROPN\",\n\t\t\t\"marx\": \"PROPN\",\n\t\t\t\"flex\": \"VERB\",\n\t\t\t\"strands\": \"NOUN\",\n\t\t\t\"takekurabe\": \"PROPN\",\n\t\t\t\"grapple\": \"VERB\",\n\t\t\t\"kaffee\": \"PROPN\",\n\t\t\t\"49th\": \"ADJ\",\n\t\t\t\"quasi\": \"ADJ\",\n\t\t\t\"elsevier\": \"PROPN\",\n\t\t\t\"hosting\": \"VERB\",\n\t\t\t\"malardians\": \"PROPN\",\n\t\t\t\"stack\": \"NOUN\",\n\t\t\t\"ghostbusters\": \"PROPN\",\n\t\t\t\"bedrooms\": \"NOUN\",\n\t\t\t\"blotts\": \"PROPN\",\n\t\t\t\"hamster\": \"NOUN\",\n\t\t\t\"souvenirs\": \"NOUN\",\n\t\t\t\"frazzled\": \"ADJ\",\n\t\t\t\"ascending\": \"VERB\",\n\t\t\t\"produce\": \"VERB\",\n\t\t\t\"ugh\": \"INTJ\",\n\t\t\t\"predicated\": \"VERB\",\n\t\t\t\"gathers\": \"VERB\",\n\t\t\t\"laudable\": \"ADJ\",\n\t\t\t\"reliance\": \"NOUN\",\n\t\t\t\"imposition\": \"NOUN\",\n\t\t\t\"?????\": \"PUNCT\",\n\t\t\t\"comforter\": \"NOUN\",\n\t\t\t\"doj\": \"PROPN\",\n\t\t\t\"mimicked\": \"VERB\",\n\t\t\t\"complaint\": \"NOUN\",\n\t\t\t\"wind\": \"NOUN\",\n\t\t\t\"endemics\": \"NOUN\",\n\t\t\t\"trip\": \"NOUN\",\n\t\t\t\"wikimedia\": \"PROPN\",\n\t\t\t\"really\": \"ADV\",\n\t\t\t\"priscilla\": \"PROPN\",\n\t\t\t\"saxons\": \"PROPN\",\n\t\t\t\"slots\": \"NOUN\",\n\t\t\t\"sail\": \"VERB\",\n\t\t\t\"stark\": \"PROPN\",\n\t\t\t\"sanskrit\": \"PROPN\",\n\t\t\t\"three-legged\": \"ADJ\",\n\t\t\t\"candies\": \"NOUN\",\n\t\t\t\"paris\": \"PROPN\",\n\t\t\t\"overtime\": \"ADV\",\n\t\t\t\"aphid\": \"NOUN\",\n\t\t\t\"luest\": \"PROPN\",\n\t\t\t\"repent\": \"VERB\",\n\t\t\t\"cigarette-making\": \"ADJ\",\n\t\t\t\"followings\": \"NOUN\",\n\t\t\t\"alignment\": \"NOUN\",\n\t\t\t\"kaminski\": \"PROPN\",\n\t\t\t\"major\": \"ADJ\",\n\t\t\t\"companion\": \"NOUN\",\n\t\t\t\"persia\": \"PROPN\",\n\t\t\t\"hug\": \"NOUN\",\n\t\t\t\"alexander\": \"PROPN\",\n\t\t\t\"rationally\": \"ADV\",\n\t\t\t\"assassination\": \"NOUN\",\n\t\t\t\"effects\": \"NOUN\",\n\t\t\t\"gall\": \"NOUN\",\n\t\t\t\"skyscrapers\": \"NOUN\",\n\t\t\t\"copper\": \"NOUN\",\n\t\t\t\"waved\": \"VERB\",\n\t\t\t\"tiktoks\": \"PROPN\",\n\t\t\t\"at&t\": \"PROPN\",\n\t\t\t\"hahahaahh\": \"INTJ\",\n\t\t\t\"shopwindow\": \"NOUN\",\n\t\t\t\"forked\": \"ADJ\",\n\t\t\t\"itinerary\": \"NOUN\",\n\t\t\t\"feathered\": \"ADJ\",\n\t\t\t\"władysław\": \"PROPN\",\n\t\t\t\"1722\": \"NUM\",\n\t\t\t\"icq\": \"NOUN\",\n\t\t\t\"since\": \"SCONJ\",\n\t\t\t\"sewn\": \"VERB\",\n\t\t\t\"endorse\": \"VERB\",\n\t\t\t\"comfy\": \"ADJ\",\n\t\t\t\"searching\": \"VERB\",\n\t\t\t\"toda\": \"NOUN\",\n\t\t\t\"regions\": \"NOUN\",\n\t\t\t\"intermediary\": \"ADJ\",\n\t\t\t\"stronger\": \"ADJ\",\n\t\t\t\"involvement\": \"NOUN\",\n\t\t\t\"121\": \"NUM\",\n\t\t\t\"zither\": \"NOUN\",\n\t\t\t\"cognition\": \"NOUN\",\n\t\t\t\"reservation\": \"NOUN\",\n\t\t\t\"pleasant\": \"ADJ\",\n\t\t\t\"continue\": \"VERB\",\n\t\t\t\"population\": \"NOUN\",\n\t\t\t\"cochin\": \"PROPN\",\n\t\t\t\"joking\": \"VERB\",\n\t\t\t\"assembling\": \"VERB\",\n\t\t\t\"huddled\": \"VERB\",\n\t\t\t\"rumsfeld\": \"PROPN\",\n\t\t\t\"6:23\": \"NUM\",\n\t\t\t\"abb\": \"PROPN\",\n\t\t\t\"defrosted\": \"VERB\",\n\t\t\t\"mitchell\": \"PROPN\",\n\t\t\t\"flavorless\": \"ADJ\",\n\t\t\t\"2.11\": \"NUM\",\n\t\t\t\"previously\": \"ADV\",\n\t\t\t\"interpersonal\": \"ADJ\",\n\t\t\t\"11:05\": \"NUM\",\n\t\t\t\"relate\": \"VERB\",\n\t\t\t\"wagon\": \"NOUN\",\n\t\t\t\"4,000\": \"NUM\",\n\t\t\t\"stole\": \"VERB\",\n\t\t\t\"interactivity\": \"NOUN\",\n\t\t\t\"encased\": \"VERB\",\n\t\t\t\"stepsister\": \"PROPN\",\n\t\t\t\"scanned\": \"VERB\",\n\t\t\t\"expectations\": \"NOUN\",\n\t\t\t\"millet\": \"NOUN\",\n\t\t\t\"audience\": \"NOUN\",\n\t\t\t\"pesticides\": \"NOUN\",\n\t\t\t\"benign\": \"ADJ\",\n\t\t\t\"siegel\": \"PROPN\",\n\t\t\t\"distancia\": \"PROPN\",\n\t\t\t\"adox\": \"PROPN\",\n\t\t\t\"sobriety\": \"NOUN\",\n\t\t\t\"seldom\": \"ADV\",\n\t\t\t\"thyroid\": \"NOUN\",\n\t\t\t\"fps\": \"NOUN\",\n\t\t\t\"haves\": \"VERB\",\n\t\t\t\"flexed\": \"VERB\",\n\t\t\t\"transcriptome\": \"NOUN\",\n\t\t\t\"operator\": \"NOUN\",\n\t\t\t\"surveying\": \"PROPN\",\n\t\t\t\"shep\": \"PROPN\",\n\t\t\t\"appliance\": \"NOUN\",\n\t\t\t\"marching\": \"VERB\",\n\t\t\t\"showcase\": \"VERB\",\n\t\t\t\"electioneering\": \"VERB\",\n\t\t\t\"intertexts\": \"NOUN\",\n\t\t\t\"aprons\": \"NOUN\",\n\t\t\t\"banishes\": \"VERB\",\n\t\t\t\"obtuse\": \"ADJ\",\n\t\t\t\"smap\": \"PROPN\",\n\t\t\t\"punctuated\": \"VERB\",\n\t\t\t\"consuming\": \"VERB\",\n\t\t\t\"puree\": \"VERB\",\n\t\t\t\"nikon\": \"PROPN\",\n\t\t\t\"minister\": \"NOUN\",\n\t\t\t\"voicing\": \"VERB\",\n\t\t\t\"measurement\": \"NOUN\",\n\t\t\t\"blinking\": \"VERB\",\n\t\t\t\"addictive\": \"ADJ\",\n\t\t\t\"belly\": \"NOUN\",\n\t\t\t\"games\": \"NOUN\",\n\t\t\t\"armchairs\": \"NOUN\",\n\t\t\t\"flirts\": \"NOUN\",\n\t\t\t\"fieldwork\": \"NOUN\",\n\t\t\t\"uneasiness\": \"NOUN\",\n\t\t\t\"padilla\": \"PROPN\",\n\t\t\t\"china\": \"PROPN\",\n\t\t\t\"entrée\": \"NOUN\",\n\t\t\t\"political\": \"ADJ\",\n\t\t\t\"fashionable\": \"ADJ\",\n\t\t\t\"jove\": \"PROPN\",\n\t\t\t\"thump\": \"NOUN\",\n\t\t\t\"baltic\": \"ADJ\",\n\t\t\t\"ostrom\": \"PROPN\",\n\t\t\t\"assessing\": \"VERB\",\n\t\t\t\"cartoons\": \"NOUN\",\n\t\t\t\"toyota\": \"PROPN\",\n\t\t\t\"may\": \"AUX\",\n\t\t\t\"aesar\": \"PROPN\",\n\t\t\t\"bankroll\": \"VERB\",\n\t\t\t\"teacher\": \"NOUN\",\n\t\t\t\"bushes\": \"NOUN\",\n\t\t\t\"skin\": \"NOUN\",\n\t\t\t\"notre\": \"PROPN\",\n\t\t\t\"silver\": \"NOUN\",\n\t\t\t\"tempests\": \"NOUN\",\n\t\t\t\"cancers\": \"NOUN\",\n\t\t\t\"collapsing\": \"VERB\",\n\t\t\t\"202-828-3372\": \"NUM\",\n\t\t\t\"dragon\": \"NOUN\",\n\t\t\t\"fresh-water\": \"NOUN\",\n\t\t\t\"qwest\": \"PROPN\",\n\t\t\t\"ambiguous\": \"ADJ\",\n\t\t\t\"+1602275-4958\": \"NUM\",\n\t\t\t\"disagreements\": \"NOUN\",\n\t\t\t\"sadly\": \"ADV\",\n\t\t\t\"winded\": \"ADJ\",\n\t\t\t\"skype\": \"PROPN\",\n\t\t\t\"spaniard\": \"PROPN\",\n\t\t\t\"19th\": \"ADJ\",\n\t\t\t\"rediculous\": \"ADJ\",\n\t\t\t\"advised\": \"VERB\",\n\t\t\t\"doug\": \"PROPN\",\n\t\t\t\"ruler\": \"NOUN\",\n\t\t\t\"petting\": \"NOUN\",\n\t\t\t\"antiquities\": \"NOUN\",\n\t\t\t\"memos\": \"NOUN\",\n\t\t\t\"elbows\": \"NOUN\",\n\t\t\t\"palette\": \"NOUN\",\n\t\t\t\"spraying\": \"NOUN\",\n\t\t\t\"bit\": \"NOUN\",\n\t\t\t\"implying\": \"VERB\",\n\t\t\t\"counter-measures\": \"NOUN\",\n\t\t\t\"channels\": \"NOUN\",\n\t\t\t\"nicknamed\": \"VERB\",\n\t\t\t\"washed\": \"VERB\",\n\t\t\t\"butt-headed\": \"ADJ\",\n\t\t\t\"outfit\": \"NOUN\",\n\t\t\t\"ineos\": \"PROPN\",\n\t\t\t\"pharmaceutical\": \"ADJ\",\n\t\t\t\"dualities\": \"NOUN\",\n\t\t\t\"attaining\": \"VERB\",\n\t\t\t\"chemistry\": \"NOUN\",\n\t\t\t\"invoked\": \"VERB\",\n\t\t\t\"21\": \"NUM\",\n\t\t\t\"reconfigured\": \"VERB\",\n\t\t\t\"cock\": \"VERB\",\n\t\t\t\"counted\": \"VERB\",\n\t\t\t\"lie\": \"VERB\",\n\t\t\t\"dances\": \"NOUN\",\n\t\t\t\"borough\": \"NOUN\",\n\t\t\t\"monies\": \"NOUN\",\n\t\t\t\"bp\": \"PROPN\",\n\t\t\t\"songs\": \"NOUN\",\n\t\t\t\"foundations\": \"NOUN\",\n\t\t\t\"lo\": \"INTJ\",\n\t\t\t\"cleansing\": \"VERB\",\n\t\t\t\"g-\": \"INTJ\",\n\t\t\t\"thailand\": \"PROPN\",\n\t\t\t\"fallibility\": \"NOUN\",\n\t\t\t\"psychiatrists\": \"NOUN\",\n\t\t\t\"deepening\": \"ADJ\",\n\t\t\t\"directing\": \"VERB\",\n\t\t\t\"rebuilding\": \"VERB\",\n\t\t\t\"reach\": \"VERB\",\n\t\t\t\"demagogues\": \"NOUN\",\n\t\t\t\"bangkok\": \"PROPN\",\n\t\t\t\"donor\": \"NOUN\",\n\t\t\t\"moro\": \"PROPN\",\n\t\t\t\"cyber\": \"ADJ\",\n\t\t\t\"upward\": \"ADV\",\n\t\t\t\"brothel\": \"NOUN\",\n\t\t\t\"roms\": \"NOUN\",\n\t\t\t\"chevalier\": \"PROPN\",\n\t\t\t\"cranmore\": \"PROPN\",\n\t\t\t\"manhattan\": \"PROPN\",\n\t\t\t\"chores\": \"NOUN\",\n\t\t\t\"motifs\": \"NOUN\",\n\t\t\t\"close\": \"ADJ\",\n\t\t\t\"meanings\": \"NOUN\",\n\t\t\t\"providing\": \"VERB\",\n\t\t\t\"suspiciously\": \"ADV\",\n\t\t\t\"smos\": \"PROPN\",\n\t\t\t\"unravel\": \"VERB\",\n\t\t\t\"britani\": \"PROPN\",\n\t\t\t\"vodka\": \"NOUN\",\n\t\t\t\"dinginess\": \"NOUN\",\n\t\t\t\"bomber\": \"NOUN\",\n\t\t\t\"rainy\": \"ADJ\",\n\t\t\t\"fits\": \"VERB\",\n\t\t\t\"linen\": \"NOUN\",\n\t\t\t\"listeners\": \"NOUN\",\n\t\t\t\"tempest\": \"NOUN\",\n\t\t\t\"sorta\": \"ADV\",\n\t\t\t\"sound\": \"NOUN\",\n\t\t\t\"theorized\": \"VERB\",\n\t\t\t\"gulf\": \"PROPN\",\n\t\t\t\"superboys\": \"NOUN\",\n\t\t\t\"willed\": \"VERB\",\n\t\t\t\"bottleneck\": \"NOUN\",\n\t\t\t\"allege\": \"VERB\",\n\t\t\t\"domenico\": \"PROPN\",\n\t\t\t\"groomed\": \"VERB\",\n\t\t\t\"whispered\": \"VERB\",\n\t\t\t\"interplanetary\": \"ADJ\",\n\t\t\t\"searches\": \"VERB\",\n\t\t\t\"waffle\": \"NOUN\",\n\t\t\t\"dior\": \"NOUN\",\n\t\t\t\"muscles\": \"NOUN\",\n\t\t\t\"850-748-0740\": \"NUM\",\n\t\t\t\"twenty-five\": \"NUM\",\n\t\t\t\"shoot\": \"VERB\",\n\t\t\t\"justine\": \"PROPN\",\n\t\t\t\"enhancing\": \"VERB\",\n\t\t\t\"wrong\": \"ADJ\",\n\t\t\t\"adapted\": \"VERB\",\n\t\t\t\"fanfuckingtastic\": \"ADJ\",\n\t\t\t\"tho\": \"PROPN\",\n\t\t\t\"1925\": \"NUM\",\n\t\t\t\"blindness\": \"NOUN\",\n\t\t\t\"procrastinating\": \"VERB\",\n\t\t\t\"freckled\": \"ADJ\",\n\t\t\t\"melon\": \"PROPN\",\n\t\t\t\"arms\": \"NOUN\",\n\t\t\t\"strictly\": \"ADV\",\n\t\t\t\"upsizing\": \"VERB\",\n\t\t\t\"snake\": \"NOUN\",\n\t\t\t\"bj\": \"PROPN\",\n\t\t\t\"mathematics\": \"NOUN\",\n\t\t\t\"located\": \"VERB\",\n\t\t\t\"estimation\": \"NOUN\",\n\t\t\t\"jezebel\": \"PROPN\",\n\t\t\t\"jeep\": \"PROPN\",\n\t\t\t\"otto\": \"PROPN\",\n\t\t\t\"bights\": \"NOUN\",\n\t\t\t\"grad\": \"NOUN\",\n\t\t\t\"shallows\": \"NOUN\",\n\t\t\t\"brick\": \"NOUN\",\n\t\t\t\"ya\": \"PRON\",\n\t\t\t\"majors\": \"NOUN\",\n\t\t\t\"rewarded\": \"VERB\",\n\t\t\t\"aires\": \"PROPN\",\n\t\t\t\"feb.\": \"PROPN\",\n\t\t\t\"adjustment\": \"NOUN\",\n\t\t\t\"orwellian\": \"ADJ\",\n\t\t\t\"minimums\": \"NOUN\",\n\t\t\t\"innings\": \"NOUN\",\n\t\t\t\"loose\": \"ADJ\",\n\t\t\t\"behaves\": \"VERB\",\n\t\t\t\"constructed\": \"VERB\",\n\t\t\t\"reputable\": \"ADJ\",\n\t\t\t\"known\": \"VERB\",\n\t\t\t\"12:03\": \"NUM\",\n\t\t\t\"indicate\": \"VERB\",\n\t\t\t\"confirmed\": \"VERB\",\n\t\t\t\"fuad\": \"PROPN\",\n\t\t\t\"koran\": \"PROPN\",\n\t\t\t\"backtracked\": \"VERB\",\n\t\t\t\"sanctioned\": \"VERB\",\n\t\t\t\"grocers\": \"NOUN\",\n\t\t\t\"hesitating\": \"ADJ\",\n\t\t\t\"ago\": \"ADV\",\n\t\t\t\"jejudo\": \"PROPN\",\n\t\t\t\"judd\": \"PROPN\",\n\t\t\t\"23.8\": \"NUM\",\n\t\t\t\"hutt\": \"PROPN\",\n\t\t\t\"haggle\": \"VERB\",\n\t\t\t\"suitcase\": \"NOUN\",\n\t\t\t\"writes\": \"VERB\",\n\t\t\t\"sugary\": \"ADJ\",\n\t\t\t\"pavement\": \"NOUN\",\n\t\t\t\"shortages\": \"NOUN\",\n\t\t\t\"trenchant\": \"ADJ\",\n\t\t\t\"cincinnati\": \"PROPN\",\n\t\t\t\"alphabet\": \"NOUN\",\n\t\t\t\"many\": \"ADJ\",\n\t\t\t\"==\": \"SYM\",\n\t\t\t\"appropriating\": \"VERB\",\n\t\t\t\"outrages\": \"NOUN\",\n\t\t\t\"belidve\": \"VERB\",\n\t\t\t\"adnan\": \"PROPN\",\n\t\t\t\"clientelage\": \"NOUN\",\n\t\t\t\"remodels\": \"NOUN\",\n\t\t\t\"jean\": \"PROPN\",\n\t\t\t\"midwesterners\": \"NOUN\",\n\t\t\t\"drink\": \"NOUN\",\n\t\t\t\"suitable\": \"ADJ\",\n\t\t\t\"swatch\": \"VERB\",\n\t\t\t\"30s\": \"NOUN\",\n\t\t\t\"andamans\": \"PROPN\",\n\t\t\t\"long-nosed\": \"ADJ\",\n\t\t\t\"26.1\": \"NUM\",\n\t\t\t\"raped\": \"VERB\",\n\t\t\t\"cameras\": \"NOUN\",\n\t\t\t\"llp\": \"PROPN\",\n\t\t\t\"dimensions\": \"NOUN\",\n\t\t\t\"toll\": \"NOUN\",\n\t\t\t\"predominantly\": \"ADV\",\n\t\t\t\"ponies\": \"NOUN\",\n\t\t\t\"cabbage\": \"NOUN\",\n\t\t\t\"red-eyed\": \"ADJ\",\n\t\t\t\"scents\": \"NOUN\",\n\t\t\t\"68.4\": \"NUM\",\n\t\t\t\"reprimands\": \"NOUN\",\n\t\t\t\"rising\": \"VERB\",\n\t\t\t\"238\": \"NUM\",\n\t\t\t\"coated\": \"VERB\",\n\t\t\t\"complicated\": \"ADJ\",\n\t\t\t\"luxerious\": \"ADJ\",\n\t\t\t\"rosario.gonzales@compaq.com\": \"PROPN\",\n\t\t\t\"moaned\": \"VERB\",\n\t\t\t\"albergo\": \"PROPN\",\n\t\t\t\"offers\": \"VERB\",\n\t\t\t\"coastline\": \"NOUN\",\n\t\t\t\"masculinity\": \"NOUN\",\n\t\t\t\"listlessness\": \"NOUN\",\n\t\t\t\"phillies\": \"PROPN\",\n\t\t\t\"ninety-nine\": \"NUM\",\n\t\t\t\"booleanpolygonconstraint\": \"PROPN\",\n\t\t\t\"diminishing\": \"VERB\",\n\t\t\t\"excess\": \"ADJ\",\n\t\t\t\"saber-toothed\": \"ADJ\",\n\t\t\t\"gristle-studded\": \"ADJ\",\n\t\t\t\"trophy\": \"NOUN\",\n\t\t\t\"rubbing\": \"VERB\",\n\t\t\t\"pomper\": \"PROPN\",\n\t\t\t\"hunt\": \"NOUN\",\n\t\t\t\"incrustation\": \"NOUN\",\n\t\t\t\"modify\": \"VERB\",\n\t\t\t\"---->===}*{===<----\": \"SYM\",\n\t\t\t\"4-5\": \"NUM\",\n\t\t\t\"icecreams\": \"NOUN\",\n\t\t\t\"grasses\": \"NOUN\",\n\t\t\t\"gestured\": \"VERB\",\n\t\t\t\"innovating\": \"VERB\",\n\t\t\t\"egregious\": \"ADJ\",\n\t\t\t\"carribbean\": \"PROPN\",\n\t\t\t\"honking\": \"VERB\",\n\t\t\t\"humanpixel\": \"PROPN\",\n\t\t\t\"humans\": \"NOUN\",\n\t\t\t\"merseyside-egypt\": \"PROPN\",\n\t\t\t\"dranove\": \"PROPN\",\n\t\t\t\"telescope\": \"NOUN\",\n\t\t\t\"essay\": \"NOUN\",\n\t\t\t\"tralee\": \"NUM\",\n\t\t\t\"toiling\": \"VERB\",\n\t\t\t\"condemns\": \"VERB\",\n\t\t\t\"foe\": \"NOUN\",\n\t\t\t\"bases\": \"NOUN\",\n\t\t\t\"saccades\": \"NOUN\",\n\t\t\t\"transfers\": \"NOUN\",\n\t\t\t\"bailey\": \"PROPN\",\n\t\t\t\"incredible\": \"ADJ\",\n\t\t\t\"classmates\": \"NOUN\",\n\t\t\t\"distain\": \"NOUN\",\n\t\t\t\"paramus\": \"PROPN\",\n\t\t\t\"kills\": \"VERB\",\n\t\t\t\"kidnapping\": \"VERB\",\n\t\t\t\"combatants\": \"NOUN\",\n\t\t\t\"opus\": \"PROPN\",\n\t\t\t\"młyn\": \"PROPN\",\n\t\t\t\"malfunction\": \"VERB\",\n\t\t\t\"drop-down\": \"ADJ\",\n\t\t\t\"respects\": \"NOUN\",\n\t\t\t\"iraqis\": \"PROPN\",\n\t\t\t\"geographically\": \"ADV\",\n\t\t\t\"normall\": \"ADJ\",\n\t\t\t\"anthropologist\": \"NOUN\",\n\t\t\t\"fairs\": \"NOUN\",\n\t\t\t\"mobilising\": \"NOUN\",\n\t\t\t\"tails\": \"NOUN\",\n\t\t\t\"essentially\": \"ADV\",\n\t\t\t\"brutal\": \"ADJ\",\n\t\t\t\"vampires\": \"NOUN\",\n\t\t\t\"quill\": \"NOUN\",\n\t\t\t\"420\": \"NUM\",\n\t\t\t\"darunta\": \"PROPN\",\n\t\t\t\"airliners\": \"NOUN\",\n\t\t\t\"husseiniyas\": \"PROPN\",\n\t\t\t\"safeguard\": \"NOUN\",\n\t\t\t\"plantation\": \"PROPN\",\n\t\t\t\"asks\": \"VERB\",\n\t\t\t\"frock\": \"NOUN\",\n\t\t\t\"knight\": \"NOUN\",\n\t\t\t\"oak\": \"NOUN\",\n\t\t\t\"daimler\": \"PROPN\",\n\t\t\t\"sochi\": \"PROPN\",\n\t\t\t\"mover\": \"NOUN\",\n\t\t\t\"charles\": \"PROPN\",\n\t\t\t\"colleagues\": \"NOUN\",\n\t\t\t\"balancing\": \"NOUN\",\n\t\t\t\"subjects\": \"NOUN\",\n\t\t\t\"10,694\": \"NUM\",\n\t\t\t\"hijacker\": \"NOUN\",\n\t\t\t\"striking\": \"VERB\",\n\t\t\t\"cottages\": \"NOUN\",\n\t\t\t\"picnic\": \"NOUN\",\n\t\t\t\"furnishings\": \"NOUN\",\n\t\t\t\"computing\": \"NOUN\",\n\t\t\t\"crackpot\": \"NOUN\",\n\t\t\t\"rations\": \"NOUN\",\n\t\t\t\"aquarist\": \"NOUN\",\n\t\t\t\"dressed\": \"VERB\",\n\t\t\t\"coincides\": \"VERB\",\n\t\t\t\"cannibals\": \"NOUN\",\n\t\t\t\"expressing\": \"VERB\",\n\t\t\t\"adopts\": \"VERB\",\n\t\t\t\"earthquakes\": \"NOUN\",\n\t\t\t\"characters\": \"NOUN\",\n\t\t\t\"humanatarian\": \"ADJ\",\n\t\t\t\"mullah\": \"PROPN\",\n\t\t\t\"inequality\": \"NOUN\",\n\t\t\t\"expeditions\": \"NOUN\",\n\t\t\t\"arm\": \"NOUN\",\n\t\t\t\"distantly\": \"ADV\",\n\t\t\t\"defined\": \"VERB\",\n\t\t\t\"themselves\": \"PRON\",\n\t\t\t\"evaporate\": \"VERB\",\n\t\t\t\"desolate\": \"ADJ\",\n\t\t\t\"meghalaya\": \"PROPN\",\n\t\t\t\"newspaper\": \"NOUN\",\n\t\t\t\"plantains\": \"NOUN\",\n\t\t\t\"utilise\": \"VERB\",\n\t\t\t\"upon\": \"ADP\",\n\t\t\t\"industrialized\": \"ADJ\",\n\t\t\t\"renewal\": \"NOUN\",\n\t\t\t\"vegetarian\": \"ADJ\",\n\t\t\t\"ethnocentrism\": \"NOUN\",\n\t\t\t\"contraction\": \"NOUN\",\n\t\t\t\"teenage\": \"ADJ\",\n\t\t\t\"rough\": \"ADJ\",\n\t\t\t\"commonwealths\": \"NOUN\",\n\t\t\t\"flavoring\": \"NOUN\",\n\t\t\t\"cliffy\": \"ADJ\",\n\t\t\t\"mackey\": \"PROPN\",\n\t\t\t\"assured\": \"VERB\",\n\t\t\t\"united\": \"VERB\",\n\t\t\t\"sheepdog\": \"PROPN\",\n\t\t\t\"professionalized\": \"VERB\",\n\t\t\t\"have\": \"VERB\",\n\t\t\t\"tweed\": \"NOUN\",\n\t\t\t\"users\": \"NOUN\",\n\t\t\t\"reproducing\": \"VERB\",\n\t\t\t\"cycling\": \"VERB\",\n\t\t\t\"dilapidation\": \"NOUN\",\n\t\t\t\"novellas\": \"NOUN\",\n\t\t\t\"demand\": \"NOUN\",\n\t\t\t\"goddess\": \"NOUN\",\n\t\t\t\"alaskans\": \"PROPN\",\n\t\t\t\"deducting\": \"VERB\",\n\t\t\t\"listed\": \"VERB\",\n\t\t\t\"soft\": \"ADJ\",\n\t\t\t\"superdome\": \"PROPN\",\n\t\t\t\"orchestrated\": \"VERB\",\n\t\t\t\"hotspots\": \"NOUN\",\n\t\t\t\"truely\": \"ADV\",\n\t\t\t\"m5s\": \"PROPN\",\n\t\t\t\"nesbitt\": \"PROPN\",\n\t\t\t\"millennium\": \"PROPN\",\n\t\t\t\"setoff\": \"NOUN\",\n\t\t\t\"quotes\": \"NOUN\",\n\t\t\t\"rely\": \"VERB\",\n\t\t\t\"antipasto\": \"NOUN\",\n\t\t\t\"counting\": \"VERB\",\n\t\t\t\"guarantor\": \"NOUN\",\n\t\t\t\"haiti\": \"PROPN\",\n\t\t\t\"neighbourhood\": \"NOUN\",\n\t\t\t\"password\": \"NOUN\",\n\t\t\t\"forms\": \"NOUN\",\n\t\t\t\"academy\": \"PROPN\",\n\t\t\t\"continuation\": \"NOUN\",\n\t\t\t\"postings\": \"NOUN\",\n\t\t\t\"disruptive\": \"ADJ\",\n\t\t\t\"luck\": \"NOUN\",\n\t\t\t\"confided\": \"VERB\",\n\t\t\t\"divisions\": \"NOUN\",\n\t\t\t\"alternatively\": \"ADV\",\n\t\t\t\"mid-season\": \"NOUN\",\n\t\t\t\"stumping\": \"VERB\",\n\t\t\t\"meddlesome\": \"ADJ\",\n\t\t\t\"tress\": \"NOUN\",\n\t\t\t\"headlines\": \"NOUN\",\n\t\t\t\"n'\": \"CCONJ\",\n\t\t\t\"leung\": \"PROPN\",\n\t\t\t\"94.40\": \"NUM\",\n\t\t\t\"0000108806\": \"NUM\",\n\t\t\t\"coastal\": \"ADJ\",\n\t\t\t\"expectedly\": \"ADV\",\n\t\t\t\"keck\": \"PROPN\",\n\t\t\t\"repays\": \"VERB\",\n\t\t\t\"seamen\": \"NOUN\",\n\t\t\t\"qanooni\": \"PROPN\",\n\t\t\t\"zipped\": \"ADJ\",\n\t\t\t\"jenny\": \"PROPN\",\n\t\t\t\"mansion\": \"NOUN\",\n\t\t\t\"blindfolds\": \"NOUN\",\n\t\t\t\"compass\": \"NOUN\",\n\t\t\t\"sigh\": \"INTJ\",\n\t\t\t\"medial\": \"ADJ\",\n\t\t\t\"esna\": \"PROPN\",\n\t\t\t\"landed\": \"VERB\",\n\t\t\t\"draw\": \"VERB\",\n\t\t\t\"browsers\": \"NOUN\",\n\t\t\t\"quaid\": \"PROPN\",\n\t\t\t\"fascinating\": \"ADJ\",\n\t\t\t\"stumbled\": \"VERB\",\n\t\t\t\"etter\": \"ADV\",\n\t\t\t\"comprehensive\": \"ADJ\",\n\t\t\t\"resides\": \"VERB\",\n\t\t\t\"revolutionaries\": \"NOUN\",\n\t\t\t\"171\": \"NUM\",\n\t\t\t\"solana\": \"PROPN\",\n\t\t\t\"yesterday\": \"NOUN\",\n\t\t\t\"guernica\": \"PROPN\",\n\t\t\t\"safest\": \"ADJ\",\n\t\t\t\"artesian\": \"ADJ\",\n\t\t\t\"fashion\": \"NOUN\",\n\t\t\t\"matrix\": \"NOUN\",\n\t\t\t\"appologized\": \"VERB\",\n\t\t\t\"crashed\": \"VERB\",\n\t\t\t\"nonessential\": \"ADJ\",\n\t\t\t\"preceded\": \"VERB\",\n\t\t\t\"impede\": \"VERB\",\n\t\t\t\"high\": \"ADJ\",\n\t\t\t\"cpi\": \"NOUN\",\n\t\t\t\"unconsciously\": \"ADV\",\n\t\t\t\"jamaica\": \"PROPN\",\n\t\t\t\"mooney\": \"PROPN\",\n\t\t\t\"human\": \"ADJ\",\n\t\t\t\"eneedle\": \"NOUN\",\n\t\t\t\"rotted\": \"VERB\",\n\t\t\t\"orient\": \"PROPN\",\n\t\t\t\"spiel\": \"NOUN\",\n\t\t\t\"slanted\": \"ADJ\",\n\t\t\t\"ld2d-#69396-1.doc\": \"NOUN\",\n\t\t\t\"sashimi\": \"NOUN\",\n\t\t\t\"converted\": \"VERB\",\n\t\t\t\"2254\": \"NUM\",\n\t\t\t\"user\": \"NOUN\",\n\t\t\t\"paradises\": \"PROPN\",\n\t\t\t\"sufficiently\": \"ADV\",\n\t\t\t\"thx\": \"NOUN\",\n\t\t\t\"photo\": \"NOUN\",\n\t\t\t\"jester\": \"NOUN\",\n\t\t\t\"outside\": \"ADV\",\n\t\t\t\"cluttered\": \"VERB\",\n\t\t\t\"microtome\": \"NOUN\",\n\t\t\t\"04:03\": \"NUM\",\n\t\t\t\"6.25\": \"NUM\",\n\t\t\t\"bedlam\": \"NOUN\",\n\t\t\t\"animators\": \"NOUN\",\n\t\t\t\"ak47's\": \"NOUN\",\n\t\t\t\"doomed\": \"VERB\",\n\t\t\t\"hormone\": \"NOUN\",\n\t\t\t\"soda\": \"NOUN\",\n\t\t\t\"punishment\": \"NOUN\",\n\t\t\t\"forgetting\": \"VERB\",\n\t\t\t\"landing\": \"NOUN\",\n\t\t\t\"5,600\": \"NUM\",\n\t\t\t\"shortstop\": \"NOUN\",\n\t\t\t\"statehood\": \"NOUN\",\n\t\t\t\"galante\": \"PROPN\",\n\t\t\t\"wedged\": \"VERB\",\n\t\t\t\"\\\"\": \"PUNCT\",\n\t\t\t\"knocked\": \"VERB\",\n\t\t\t\"colour\": \"NOUN\",\n\t\t\t\"duo\": \"PROPN\",\n\t\t\t\"filippini\": \"PROPN\",\n\t\t\t\"carport\": \"NOUN\",\n\t\t\t\"hungry\": \"ADJ\",\n\t\t\t\"ajay\": \"PROPN\",\n\t\t\t\"pregnant\": \"ADJ\",\n\t\t\t\"rov\": \"NOUN\",\n\t\t\t\"outperformed\": \"VERB\",\n\t\t\t\"newsprint\": \"NOUN\",\n\t\t\t\"node\": \"NOUN\",\n\t\t\t\"formerly\": \"ADV\",\n\t\t\t\"placement\": \"NOUN\",\n\t\t\t\"345-8702\": \"NUM\",\n\t\t\t\"redvepco.doc\": \"NOUN\",\n\t\t\t\"all-night\": \"ADV\",\n\t\t\t\"tricks\": \"NOUN\",\n\t\t\t\"http://en.wikipedia.org/wiki/aerocom\": \"PROPN\",\n\t\t\t\"denounced\": \"VERB\",\n\t\t\t\"intercept\": \"NOUN\",\n\t\t\t\"confess\": \"VERB\",\n\t\t\t\"provocative\": \"ADJ\",\n\t\t\t\"woo\": \"INTJ\",\n\t\t\t\"reclaim\": \"VERB\",\n\t\t\t\"courtois\": \"PROPN\",\n\t\t\t\"scholarship\": \"NOUN\",\n\t\t\t\"newsweek\": \"PROPN\",\n\t\t\t\"fabolous\": \"ADJ\",\n\t\t\t\"succint\": \"ADJ\",\n\t\t\t\"sails\": \"NOUN\",\n\t\t\t\"competitions\": \"NOUN\",\n\t\t\t\"foresee\": \"VERB\",\n\t\t\t\"looters\": \"NOUN\",\n\t\t\t\"slumber\": \"NOUN\",\n\t\t\t\"https://osf.io\": \"PROPN\",\n\t\t\t\"persevere\": \"VERB\",\n\t\t\t\"fan\": \"NOUN\",\n\t\t\t\"ebb\": \"NOUN\",\n\t\t\t\"sanitation\": \"NOUN\",\n\t\t\t\"beatles\": \"PROPN\",\n\t\t\t\"lemons\": \"NOUN\",\n\t\t\t\"hobbies\": \"NOUN\",\n\t\t\t\"uniquely\": \"ADV\",\n\t\t\t\"quidditch\": \"PROPN\",\n\t\t\t\"hostile\": \"ADJ\",\n\t\t\t\"cynthia\": \"PROPN\",\n\t\t\t\"ossendrecht\": \"PROPN\",\n\t\t\t\"credit\": \"NOUN\",\n\t\t\t\"78\": \"NUM\",\n\t\t\t\"mid-august\": \"PROPN\",\n\t\t\t\"wheezing\": \"VERB\",\n\t\t\t\"lacerating\": \"ADJ\",\n\t\t\t\"1789\": \"NUM\",\n\t\t\t\"two\": \"NUM\",\n\t\t\t\"because\": \"SCONJ\",\n\t\t\t\"entrepreneurs\": \"NOUN\",\n\t\t\t\"#analysis\": \"PROPN\",\n\t\t\t\"abuse\": \"NOUN\",\n\t\t\t\"dymoke\": \"PROPN\",\n\t\t\t\"kitchen\": \"NOUN\",\n\t\t\t\"rnr\": \"NOUN\",\n\t\t\t\"makel\": \"PROPN\",\n\t\t\t\"haste\": \"NOUN\",\n\t\t\t\"softener\": \"NOUN\",\n\t\t\t\"rallying\": \"NOUN\",\n\t\t\t\"jkthom\": \"NOUN\",\n\t\t\t\"enigma\": \"NOUN\",\n\t\t\t\"m-m\": \"INTJ\",\n\t\t\t\"lose\": \"VERB\",\n\t\t\t\"sequential\": \"ADJ\",\n\t\t\t\"employers\": \"NOUN\",\n\t\t\t\"commanded\": \"VERB\",\n\t\t\t\"esa\": \"NOUN\",\n\t\t\t\"referendum\": \"NOUN\",\n\t\t\t\"shore\": \"NOUN\",\n\t\t\t\"emotions\": \"NOUN\",\n\t\t\t\"loudspeaker\": \"NOUN\",\n\t\t\t\"stiffly\": \"ADV\",\n\t\t\t\"nicely\": \"ADV\",\n\t\t\t\"mileage\": \"NOUN\",\n\t\t\t\"mesh\": \"NOUN\",\n\t\t\t\"inclined\": \"ADJ\",\n\t\t\t\"cenote\": \"NOUN\",\n\t\t\t\"faculties\": \"NOUN\",\n\t\t\t\"starved\": \"VERB\",\n\t\t\t\"mandated\": \"VERB\",\n\t\t\t\"grail\": \"NOUN\",\n\t\t\t\"harkat\": \"PROPN\",\n\t\t\t\"opponents\": \"NOUN\",\n\t\t\t\"chew\": \"VERB\",\n\t\t\t\"racking\": \"VERB\",\n\t\t\t\"nickelodean\": \"PROPN\",\n\t\t\t\"16/10/2004\": \"NUM\",\n\t\t\t\"pinkie\": \"NOUN\",\n\t\t\t\"corpus\": \"NOUN\",\n\t\t\t\"absence\": \"NOUN\",\n\t\t\t\"cpys\": \"NOUN\",\n\t\t\t\"sites\": \"NOUN\",\n\t\t\t\"housing\": \"NOUN\",\n\t\t\t\"sandbanks\": \"NOUN\",\n\t\t\t\"freemasonry\": \"PROPN\",\n\t\t\t\"dusting\": \"NOUN\",\n\t\t\t\"thickened\": \"VERB\",\n\t\t\t\"poems\": \"NOUN\",\n\t\t\t\"whisky\": \"NOUN\",\n\t\t\t\"gamble\": \"VERB\",\n\t\t\t\"jolly\": \"ADJ\",\n\t\t\t\"syrup\": \"NOUN\",\n\t\t\t\"riggins\": \"PROPN\",\n\t\t\t\"val\": \"PROPN\",\n\t\t\t\"shitting\": \"VERB\",\n\t\t\t\"rsjacobs@encoreacq.com\": \"PROPN\",\n\t\t\t\"oil\": \"NOUN\",\n\t\t\t\"grissini\": \"NOUN\",\n\t\t\t\"meticulously\": \"ADV\",\n\t\t\t\"opossums\": \"NOUN\",\n\t\t\t\"mixing\": \"VERB\",\n\t\t\t\"jgerma5@aol.com\": \"PROPN\",\n\t\t\t\"bartlesville\": \"PROPN\",\n\t\t\t\"streetlamps\": \"NOUN\",\n\t\t\t\"forwarding\": \"VERB\",\n\t\t\t\"10:40\": \"NUM\",\n\t\t\t\"storeys\": \"NOUN\",\n\t\t\t\"seive\": \"NOUN\",\n\t\t\t\"nervously\": \"ADV\",\n\t\t\t\"frankness\": \"NOUN\",\n\t\t\t\"penalizing\": \"VERB\",\n\t\t\t\"leigh\": \"PROPN\",\n\t\t\t\">>>\": \"SYM\",\n\t\t\t\"treatments\": \"NOUN\",\n\t\t\t\"disciplines\": \"NOUN\",\n\t\t\t\"enlist\": \"VERB\",\n\t\t\t\"roofs\": \"NOUN\",\n\t\t\t\"speaking\": \"VERB\",\n\t\t\t\"assumed\": \"VERB\",\n\t\t\t\"surveyed\": \"VERB\",\n\t\t\t\"spodsbjerg\": \"PROPN\",\n\t\t\t\"warping\": \"NOUN\",\n\t\t\t\"homosexuality\": \"NOUN\",\n\t\t\t\"clinic\": \"NOUN\",\n\t\t\t\"bee\": \"NOUN\",\n\t\t\t\"warnock\": \"PROPN\",\n\t\t\t\"witches\": \"NOUN\",\n\t\t\t\"non-violence\": \"NOUN\",\n\t\t\t\"gains\": \"NOUN\",\n\t\t\t\"austin\": \"PROPN\",\n\t\t\t\"prompting\": \"VERB\",\n\t\t\t\"foundational\": \"ADJ\",\n\t\t\t\"mills\": \"NOUN\",\n\t\t\t\"5:30\": \"NUM\",\n\t\t\t\"nutritional\": \"ADJ\",\n\t\t\t\"nutty\": \"ADJ\",\n\t\t\t\"interspersed\": \"VERB\",\n\t\t\t\"seem\": \"VERB\",\n\t\t\t\"96/23\": \"NUM\",\n\t\t\t\"445\": \"NUM\",\n\t\t\t\"plain\": \"ADJ\",\n\t\t\t\"07:48:44\": \"NUM\",\n\t\t\t\"pickling\": \"VERB\",\n\t\t\t\"mpg\": \"NOUN\",\n\t\t\t\"area\": \"NOUN\",\n\t\t\t\"self-questioning\": \"ADJ\",\n\t\t\t\"kurdish\": \"ADJ\",\n\t\t\t\"drizzle\": \"VERB\",\n\t\t\t\"sidestepped\": \"VERB\",\n\t\t\t\"owner\": \"NOUN\",\n\t\t\t\"beckett\": \"PROPN\",\n\t\t\t\"hiatus\": \"NOUN\",\n\t\t\t\"secessionist\": \"ADJ\",\n\t\t\t\"wicca\": \"PROPN\",\n\t\t\t\"cs5\": \"PROPN\",\n\t\t\t\"$\": \"SYM\",\n\t\t\t\"medicating\": \"VERB\",\n\t\t\t\"balm\": \"NOUN\",\n\t\t\t\"array\": \"NOUN\",\n\t\t\t\"expression\": \"NOUN\",\n\t\t\t\"educators\": \"NOUN\",\n\t\t\t\"dung\": \"NOUN\",\n\t\t\t\"possibilities\": \"NOUN\",\n\t\t\t\"54\": \"NUM\",\n\t\t\t\"significantly\": \"ADV\",\n\t\t\t\"briefing\": \"NOUN\",\n\t\t\t\"hotly\": \"ADV\",\n\t\t\t\"ridiculously\": \"ADV\",\n\t\t\t\"pag\": \"PROPN\",\n\t\t\t\"public\": \"ADJ\",\n\t\t\t\"defiance\": \"NOUN\",\n\t\t\t\"zimbalist\": \"PROPN\",\n\t\t\t\"cómbita\": \"PROPN\",\n\t\t\t\"union\": \"PROPN\",\n\t\t\t\"numbered\": \"ADJ\",\n\t\t\t\"tricycles\": \"NOUN\",\n\t\t\t\"consumption\": \"NOUN\",\n\t\t\t\"hygiene\": \"NOUN\",\n\t\t\t\"paddled\": \"VERB\",\n\t\t\t\"1280\": \"NUM\",\n\t\t\t\"musharraf\": \"PROPN\",\n\t\t\t\"staffs\": \"NOUN\",\n\t\t\t\"vanguards\": \"PROPN\",\n\t\t\t\"prettier\": \"ADJ\",\n\t\t\t\"4.0\": \"NUM\",\n\t\t\t\"theodore\": \"PROPN\",\n\t\t\t\"reaped\": \"VERB\",\n\t\t\t\"upside\": \"ADV\",\n\t\t\t\"locations\": \"NOUN\",\n\t\t\t\"automatically\": \"ADV\",\n\t\t\t\"cunard\": \"PROPN\",\n\t\t\t\"tracking\": \"NOUN\",\n\t\t\t\"adolf\": \"PROPN\",\n\t\t\t\"healthspace\": \"PROPN\",\n\t\t\t\"lidocaine\": \"NOUN\",\n\t\t\t\"11/08/2000\": \"NUM\",\n\t\t\t\"jams\": \"NOUN\",\n\t\t\t\"sieze\": \"VERB\",\n\t\t\t\"backed\": \"VERB\",\n\t\t\t\"exert\": \"VERB\",\n\t\t\t\"205\": \"NUM\",\n\t\t\t\"scramblers\": \"NOUN\",\n\t\t\t\"pluto\": \"PROPN\",\n\t\t\t\"photography\": \"NOUN\",\n\t\t\t\"<3\": \"VERB\",\n\t\t\t\"plastic\": \"NOUN\",\n\t\t\t\"lb.\": \"NOUN\",\n\t\t\t\"–\": \"PUNCT\",\n\t\t\t\"roadways\": \"NOUN\",\n\t\t\t\"episodes\": \"NOUN\",\n\t\t\t\"stands\": \"VERB\",\n\t\t\t\"railway\": \"NOUN\",\n\t\t\t\"illustrated\": \"VERB\",\n\t\t\t\"ingredients\": \"NOUN\",\n\t\t\t\"ripples\": \"NOUN\",\n\t\t\t\"young\": \"ADJ\",\n\t\t\t\"giant\": \"ADJ\",\n\t\t\t\"finest\": \"ADJ\",\n\t\t\t\"c'm\": \"VERB\",\n\t\t\t\"tidal\": \"ADJ\",\n\t\t\t\"5:55\": \"NUM\",\n\t\t\t\"calming\": \"ADJ\",\n\t\t\t\"sloping\": \"VERB\",\n\t\t\t\"nauseous\": \"ADJ\",\n\t\t\t\"tonnes\": \"NOUN\",\n\t\t\t\"satisfy\": \"VERB\",\n\t\t\t\"#\": \"SYM\",\n\t\t\t\"manage\": \"VERB\",\n\t\t\t\"http://dianacamera.com\": \"PROPN\",\n\t\t\t\"noble\": \"ADJ\",\n\t\t\t\"143\": \"NUM\",\n\t\t\t\"judicial\": \"ADJ\",\n\t\t\t\"wardrobes\": \"NOUN\",\n\t\t\t\"aisles\": \"NOUN\",\n\t\t\t\"recreated\": \"VERB\",\n\t\t\t\"wakes\": \"VERB\",\n\t\t\t\"chanley\": \"PROPN\",\n\t\t\t\"astronomy\": \"NOUN\",\n\t\t\t\"borgias\": \"PROPN\",\n\t\t\t\"sway\": \"VERB\",\n\t\t\t\"doliver\": \"PROPN\",\n\t\t\t\"supermarkets\": \"NOUN\",\n\t\t\t\"skirts\": \"NOUN\",\n\t\t\t\"elk\": \"NOUN\",\n\t\t\t\"pets\": \"NOUN\",\n\t\t\t\"adaptations\": \"NOUN\",\n\t\t\t\"strawberries\": \"NOUN\",\n\t\t\t\"lottery\": \"NOUN\",\n\t\t\t\"nutritive\": \"ADJ\",\n\t\t\t\"ide\": \"PROPN\",\n\t\t\t\"dual\": \"ADJ\",\n\t\t\t\"radios\": \"NOUN\",\n\t\t\t\"relying\": \"VERB\",\n\t\t\t\"insensitive\": \"ADJ\",\n\t\t\t\"recovered\": \"VERB\",\n\t\t\t\"predominated\": \"VERB\",\n\t\t\t\"unorthodox\": \"ADJ\",\n\t\t\t\"downs\": \"NOUN\",\n\t\t\t\"disinfectant\": \"NOUN\",\n\t\t\t\"couch\": \"NOUN\",\n\t\t\t\"asbestos\": \"NOUN\",\n\t\t\t\"gloom\": \"NOUN\",\n\t\t\t\"mosque\": \"NOUN\",\n\t\t\t\"kdp\": \"PROPN\",\n\t\t\t\"geared\": \"VERB\",\n\t\t\t\"vermiculite\": \"NOUN\",\n\t\t\t\"pressuring\": \"VERB\",\n\t\t\t\"sirae\": \"PROPN\",\n\t\t\t\"landgraf\": \"PROPN\",\n\t\t\t\"conferenced\": \"VERB\",\n\t\t\t\"soothing\": \"ADJ\",\n\t\t\t\"crate\": \"NOUN\",\n\t\t\t\"pipefitters\": \"NOUN\",\n\t\t\t\"brittan\": \"PROPN\",\n\t\t\t\"chomsky\": \"PROPN\",\n\t\t\t\"stonework\": \"NOUN\",\n\t\t\t\"deco\": \"PROPN\",\n\t\t\t\"individualized\": \"ADJ\",\n\t\t\t\"mirrors\": \"NOUN\",\n\t\t\t\"bulgaria\": \"PROPN\",\n\t\t\t\"salmagundi\": \"PROPN\",\n\t\t\t\"4193\": \"NUM\",\n\t\t\t\"dining\": \"NOUN\",\n\t\t\t\"plays\": \"VERB\",\n\t\t\t\"diver\": \"NOUN\",\n\t\t\t\"brochure\": \"NOUN\",\n\t\t\t\"civilized\": \"ADJ\",\n\t\t\t\"salesperson\": \"NOUN\",\n\t\t\t\"friend(s)\": \"NOUN\",\n\t\t\t\"authored\": \"VERB\",\n\t\t\t\"mistress\": \"NOUN\",\n\t\t\t\"reciprocate\": \"VERB\",\n\t\t\t\"question\": \"NOUN\",\n\t\t\t\"confirms\": \"NOUN\",\n\t\t\t\"captive\": \"ADJ\",\n\t\t\t\"gravel\": \"NOUN\",\n\t\t\t\"rats\": \"NOUN\",\n\t\t\t\"declaring\": \"VERB\",\n\t\t\t\"named\": \"VERB\",\n\t\t\t\"increasingly\": \"ADV\",\n\t\t\t\"connects\": \"VERB\",\n\t\t\t\"anwser\": \"NOUN\",\n\t\t\t\"ageless\": \"ADJ\",\n\t\t\t\"breakthrough\": \"NOUN\",\n\t\t\t\"chevrolet\": \"PROPN\",\n\t\t\t\"http://www.loveallpeople.org/theonereasonwhy.html\": \"PROPN\",\n\t\t\t\"181\": \"NUM\",\n\t\t\t\"carl\": \"PROPN\",\n\t\t\t\"sharpest\": \"ADJ\",\n\t\t\t\"connecting\": \"VERB\",\n\t\t\t\"mix\": \"VERB\",\n\t\t\t\"courthouse\": \"NOUN\",\n\t\t\t\"poorest\": \"ADJ\",\n\t\t\t\"madison\": \"PROPN\",\n\t\t\t\"lw\": \"PROPN\",\n\t\t\t\"dish\": \"NOUN\",\n\t\t\t\"institutional\": \"ADJ\",\n\t\t\t\"contributor\": \"NOUN\",\n\t\t\t\"250\": \"NUM\",\n\t\t\t\"moderately\": \"ADV\",\n\t\t\t\"resentful\": \"ADJ\",\n\t\t\t\"automotives\": \"PROPN\",\n\t\t\t\"mid-thirties\": \"NOUN\",\n\t\t\t\"plague\": \"NOUN\",\n\t\t\t\"terribly\": \"ADV\",\n\t\t\t\"darwinian\": \"ADJ\",\n\t\t\t\"vof\": \"PROPN\",\n\t\t\t\"incubation\": \"NOUN\",\n\t\t\t\"pilot\": \"NOUN\",\n\t\t\t\"4th\": \"ADJ\",\n\t\t\t\"meetups\": \"NOUN\",\n\t\t\t\"morrell\": \"PROPN\",\n\t\t\t\"needy\": \"ADJ\",\n\t\t\t\"general\": \"ADJ\",\n\t\t\t\"forties\": \"NOUN\",\n\t\t\t\"perform\": \"VERB\",\n\t\t\t\"scenarios\": \"NOUN\",\n\t\t\t\"genova\": \"PROPN\",\n\t\t\t\"inhaled\": \"VERB\",\n\t\t\t\"ocean\": \"NOUN\",\n\t\t\t\"anime\": \"NOUN\",\n\t\t\t\"antyscience\": \"PROPN\",\n\t\t\t\"existence\": \"NOUN\",\n\t\t\t\"obs-\": \"INTJ\",\n\t\t\t\"johar\": \"PROPN\",\n\t\t\t\"informing\": \"VERB\",\n\t\t\t\"pdf\": \"NOUN\",\n\t\t\t\"borenstein\": \"PROPN\",\n\t\t\t\"marches\": \"NOUN\",\n\t\t\t\"nullvalues\": \"NOUN\",\n\t\t\t\"region\": \"NOUN\",\n\t\t\t\"struggle\": \"NOUN\",\n\t\t\t\"lady\": \"NOUN\",\n\t\t\t\"disruptions\": \"NOUN\",\n\t\t\t\"unbound\": \"ADJ\",\n\t\t\t\"alarming\": \"ADJ\",\n\t\t\t\"non-bondad\": \"PROPN\",\n\t\t\t\"tyranny\": \"NOUN\",\n\t\t\t\"aquatic\": \"ADJ\",\n\t\t\t\"a\": \"DET\",\n\t\t\t\".xsd\": \"NOUN\",\n\t\t\t\"fot\": \"ADP\",\n\t\t\t\"illustrations\": \"NOUN\",\n\t\t\t\"pigmy\": \"NOUN\",\n\t\t\t\"surveys\": \"NOUN\",\n\t\t\t\"biographers\": \"NOUN\",\n\t\t\t\"evolved\": \"VERB\",\n\t\t\t\"bitty\": \"ADJ\",\n\t\t\t\"widow\": \"PROPN\",\n\t\t\t\"revealing\": \"ADJ\",\n\t\t\t\"kinnock\": \"PROPN\",\n\t\t\t\"headspace\": \"NOUN\",\n\t\t\t\"canon\": \"PROPN\",\n\t\t\t\"let\": \"VERB\",\n\t\t\t\"corps\": \"PROPN\",\n\t\t\t\"dux\": \"PROPN\",\n\t\t\t\"barack\": \"PROPN\",\n\t\t\t\"wide\": \"ADJ\",\n\t\t\t\"arrogant\": \"ADJ\",\n\t\t\t\"ad\": \"NOUN\",\n\t\t\t\"cosmopolitan\": \"ADJ\",\n\t\t\t\"radiant\": \"ADJ\",\n\t\t\t\"ensconced\": \"VERB\",\n\t\t\t\"exports\": \"NOUN\",\n\t\t\t\"greenwalt\": \"PROPN\",\n\t\t\t\"matisse\": \"PROPN\",\n\t\t\t\"reply\": \"NOUN\",\n\t\t\t\"spiral\": \"ADJ\",\n\t\t\t\"preliminary\": \"ADJ\",\n\t\t\t\"explorer\": \"PROPN\",\n\t\t\t\"operandi\": \"NOUN\",\n\t\t\t\"yoyos\": \"NOUN\",\n\t\t\t\"silver-mounted\": \"ADJ\",\n\t\t\t\"classic\": \"ADJ\",\n\t\t\t\"whose\": \"PRON\",\n\t\t\t\"03/10/2000\": \"NUM\",\n\t\t\t\"tyburn\": \"PROPN\",\n\t\t\t\"antioch\": \"PROPN\",\n\t\t\t\"london\": \"PROPN\",\n\t\t\t\"commercialish\": \"ADJ\",\n\t\t\t\"styrofoam\": \"NOUN\",\n\t\t\t\"klingon\": \"PROPN\",\n\t\t\t\"michi\": \"PROPN\",\n\t\t\t\"sub\": \"ADV\",\n\t\t\t\"brightest\": \"ADJ\",\n\t\t\t\"fuss\": \"NOUN\",\n\t\t\t\"horizontal\": \"ADJ\",\n\t\t\t\"absolute\": \"ADJ\",\n\t\t\t\"itchy\": \"ADJ\",\n\t\t\t\"idea\": \"NOUN\",\n\t\t\t\"1994\": \"NUM\",\n\t\t\t\"constructing\": \"VERB\",\n\t\t\t\"midnight\": \"NOUN\",\n\t\t\t\"department\": \"NOUN\",\n\t\t\t\"tracks\": \"NOUN\",\n\t\t\t\"beaches\": \"NOUN\",\n\t\t\t\"368\": \"NUM\",\n\t\t\t\"fortier\": \"PROPN\",\n\t\t\t\"137\": \"NUM\",\n\t\t\t\"scallop\": \"NOUN\",\n\t\t\t\"forgotten\": \"VERB\",\n\t\t\t\"eurasia\": \"PROPN\",\n\t\t\t\"outsourcing\": \"VERB\",\n\t\t\t\"chanel\": \"PROPN\",\n\t\t\t\"tires\": \"NOUN\",\n\t\t\t\"benches\": \"NOUN\",\n\t\t\t\"homey\": \"ADJ\",\n\t\t\t\"poles\": \"NOUN\",\n\t\t\t\"tulsans\": \"PROPN\",\n\t\t\t\"cafasso\": \"PROPN\",\n\t\t\t\"shells\": \"NOUN\",\n\t\t\t\"technically\": \"ADV\",\n\t\t\t\"warrenty\": \"NOUN\",\n\t\t\t\"kar\": \"PROPN\",\n\t\t\t\"planks\": \"NOUN\",\n\t\t\t\"guangzhou\": \"PROPN\",\n\t\t\t\"bats\": \"VERB\",\n\t\t\t\"reversed\": \"VERB\",\n\t\t\t\"1950s\": \"NOUN\",\n\t\t\t\"83n\": \"NOUN\",\n\t\t\t\"owe\": \"VERB\",\n\t\t\t\"customize\": \"VERB\",\n\t\t\t\"1783\": \"NUM\",\n\t\t\t\"headlong\": \"ADJ\",\n\t\t\t\"snacks\": \"NOUN\",\n\t\t\t\"sticking\": \"VERB\",\n\t\t\t\"africans\": \"NOUN\",\n\t\t\t\"cooker\": \"NOUN\",\n\t\t\t\"iaea\": \"PROPN\",\n\t\t\t\"713-853-4743\": \"NUM\",\n\t\t\t\"whirl\": \"NOUN\",\n\t\t\t\"profitable\": \"ADJ\",\n\t\t\t\"nickname\": \"NOUN\",\n\t\t\t\"balanga\": \"PROPN\",\n\t\t\t\"schoolboy\": \"NOUN\",\n\t\t\t\"prefer\": \"VERB\",\n\t\t\t\"+44\": \"NUM\",\n\t\t\t\"lee\": \"PROPN\",\n\t\t\t\"ther\": \"DET\",\n\t\t\t\"percell@swbell.net\": \"PROPN\",\n\t\t\t\"pulling\": \"VERB\",\n\t\t\t\"alternating\": \"VERB\",\n\t\t\t\"central\": \"ADJ\",\n\t\t\t\"jpy\": \"NOUN\",\n\t\t\t\"σωφρόνιος\": \"PROPN\",\n\t\t\t\"oliver\": \"PROPN\",\n\t\t\t\"husain\": \"PROPN\",\n\t\t\t\"alondra\": \"PROPN\",\n\t\t\t\"reap\": \"VERB\",\n\t\t\t\"conducting\": \"VERB\",\n\t\t\t\"writhing\": \"NOUN\",\n\t\t\t\"unesco\": \"PROPN\",\n\t\t\t\"liverpool\": \"PROPN\",\n\t\t\t\"humus\": \"NOUN\",\n\t\t\t\"captain\": \"NOUN\",\n\t\t\t\"rebelling\": \"VERB\",\n\t\t\t\"polygons\": \"NOUN\",\n\t\t\t\"disdainful\": \"ADJ\",\n\t\t\t\"second-class\": \"NOUN\",\n\t\t\t\"inciting\": \"VERB\",\n\t\t\t\"couple\": \"NOUN\",\n\t\t\t\"marionettes\": \"NOUN\",\n\t\t\t\"6:13\": \"NUM\",\n\t\t\t\"grilled\": \"VERB\",\n\t\t\t\"memorable\": \"ADJ\",\n\t\t\t\"extent\": \"NOUN\",\n\t\t\t\"reproduce\": \"VERB\",\n\t\t\t\"horses\": \"NOUN\",\n\t\t\t\"peremptory\": \"ADJ\",\n\t\t\t\"flux\": \"NOUN\",\n\t\t\t\"furze\": \"NOUN\",\n\t\t\t\"missed\": \"VERB\",\n\t\t\t\"juncture\": \"NOUN\",\n\t\t\t\"establishes\": \"VERB\",\n\t\t\t\"bantu\": \"ADJ\",\n\t\t\t\"claudia\": \"PROPN\",\n\t\t\t\"servers\": \"NOUN\",\n\t\t\t\"overshadowed\": \"VERB\",\n\t\t\t\"handbag\": \"NOUN\",\n\t\t\t\"22:30\": \"NUM\",\n\t\t\t\"worshipped\": \"VERB\",\n\t\t\t\"audibly\": \"ADV\",\n\t\t\t\"condominium\": \"NOUN\",\n\t\t\t\"tues.\": \"PROPN\",\n\t\t\t\"65\": \"NUM\",\n\t\t\t\"hooser\": \"PROPN\",\n\t\t\t\"filtered\": \"VERB\",\n\t\t\t\"accumulation\": \"NOUN\",\n\t\t\t\"owl\": \"NOUN\",\n\t\t\t\"meanest\": \"ADJ\",\n\t\t\t\"armenia\": \"PROPN\",\n\t\t\t\"cenobitic\": \"ADJ\",\n\t\t\t\"beared\": \"VERB\",\n\t\t\t\"kale\": \"NOUN\",\n\t\t\t\"post-war\": \"ADJ\",\n\t\t\t\"paying\": \"VERB\",\n\t\t\t\"asher\": \"PROPN\",\n\t\t\t\"nigel\": \"PROPN\",\n\t\t\t\"melted\": \"VERB\",\n\t\t\t\"preparations\": \"NOUN\",\n\t\t\t\"attendance\": \"NOUN\",\n\t\t\t\"traceable\": \"ADJ\",\n\t\t\t\"ambassadors\": \"NOUN\",\n\t\t\t\"q1\": \"NOUN\",\n\t\t\t\"listening\": \"VERB\",\n\t\t\t\"temperatures\": \"NOUN\",\n\t\t\t\"&amp;apos;\": \"NOUN\",\n\t\t\t\"crustaceans\": \"NOUN\",\n\t\t\t\"nuts\": \"NOUN\",\n\t\t\t\"hacienda\": \"PROPN\",\n\t\t\t\"unveiling\": \"NOUN\",\n\t\t\t\"sesame\": \"NOUN\",\n\t\t\t\"well-to-do\": \"ADJ\",\n\t\t\t\"osu\": \"PROPN\",\n\t\t\t\"ismail\": \"PROPN\",\n\t\t\t\"fine\": \"ADJ\",\n\t\t\t\"klain\": \"PROPN\",\n\t\t\t\"adjoining\": \"VERB\",\n\t\t\t\"horsetail\": \"NOUN\",\n\t\t\t\"cans\": \"NOUN\",\n\t\t\t\"fund\": \"NOUN\",\n\t\t\t\"sills\": \"NOUN\",\n\t\t\t\"suarez\": \"PROPN\",\n\t\t\t\"inter-caste\": \"ADJ\",\n\t\t\t\"fragments\": \"NOUN\",\n\t\t\t\"twin\": \"NOUN\",\n\t\t\t\"shandy\": \"PROPN\",\n\t\t\t\"figures\": \"NOUN\",\n\t\t\t\"chattels\": \"NOUN\",\n\t\t\t\"occupied\": \"ADJ\",\n\t\t\t\"evangelical\": \"PROPN\",\n\t\t\t\"aired\": \"VERB\",\n\t\t\t\"detention\": \"NOUN\",\n\t\t\t\"co-owned\": \"VERB\",\n\t\t\t\"voted\": \"VERB\",\n\t\t\t\"brunt\": \"NOUN\",\n\t\t\t\"restructure\": \"VERB\",\n\t\t\t\"profile\": \"NOUN\",\n\t\t\t\"gaiety\": \"NOUN\",\n\t\t\t\"sapulpa\": \"PROPN\",\n\t\t\t\"granted\": \"VERB\",\n\t\t\t\"measured\": \"VERB\",\n\t\t\t\"trump\": \"PROPN\",\n\t\t\t\"equipped\": \"VERB\",\n\t\t\t\"olympus\": \"PROPN\",\n\t\t\t\"orla\": \"PROPN\",\n\t\t\t\"picturesque\": \"ADJ\",\n\t\t\t\"gabin\": \"PROPN\",\n\t\t\t\"inhospitable\": \"ADJ\",\n\t\t\t\"grounds\": \"NOUN\",\n\t\t\t\"3d\": \"ADJ\",\n\t\t\t\"trailhead\": \"NOUN\",\n\t\t\t\"meiring\": \"PROPN\",\n\t\t\t\"perfected\": \"VERB\",\n\t\t\t\"blackberry\": \"NOUN\",\n\t\t\t\"disclose\": \"VERB\",\n\t\t\t\"gandalf\": \"PROPN\",\n\t\t\t\"think\": \"VERB\",\n\t\t\t\"adjective\": \"NOUN\",\n\t\t\t\"davy\": \"PROPN\",\n\t\t\t\"tarawa\": \"PROPN\",\n\t\t\t\"youngstown\": \"PROPN\",\n\t\t\t\"district\": \"PROPN\",\n\t\t\t\"forward\": \"ADV\",\n\t\t\t\"mathematica\": \"PROPN\",\n\t\t\t\"medicate\": \"VERB\",\n\t\t\t\"blind\": \"ADJ\",\n\t\t\t\"pillar\": \"NOUN\",\n\t\t\t\"laboring\": \"VERB\",\n\t\t\t\"civilize\": \"VERB\",\n\t\t\t\"fist\": \"NOUN\",\n\t\t\t\"income\": \"NOUN\",\n\t\t\t\"inactive\": \"ADJ\",\n\t\t\t\"homepage\": \"NOUN\",\n\t\t\t\"illustrates\": \"VERB\",\n\t\t\t\"t1\": \"NOUN\",\n\t\t\t\"nipped\": \"VERB\",\n\t\t\t\"correcting\": \"VERB\",\n\t\t\t\"pas\": \"ADV\",\n\t\t\t\"century\": \"NOUN\",\n\t\t\t\"mangroves\": \"NOUN\",\n\t\t\t\"slimy\": \"ADJ\",\n\t\t\t\"paves\": \"VERB\",\n\t\t\t\"gateway\": \"NOUN\",\n\t\t\t\"calculation\": \"NOUN\",\n\t\t\t\"sixteen\": \"NUM\",\n\t\t\t\"illusionless\": \"ADJ\",\n\t\t\t\"manoeuvre\": \"NOUN\",\n\t\t\t\"secure\": \"VERB\",\n\t\t\t\"empowering\": \"ADJ\",\n\t\t\t\"lulling\": \"VERB\",\n\t\t\t\"wigner\": \"PROPN\",\n\t\t\t\"chocked\": \"VERB\",\n\t\t\t\"good\": \"ADJ\",\n\t\t\t\"dandenong\": \"PROPN\",\n\t\t\t\"08/07/2001\": \"NUM\",\n\t\t\t\"bind\": \"VERB\",\n\t\t\t\"rediscover\": \"VERB\",\n\t\t\t\"suwayrah\": \"PROPN\",\n\t\t\t\"enchanting\": \"ADJ\",\n\t\t\t\"cab\": \"NOUN\",\n\t\t\t\"strict\": \"ADJ\",\n\t\t\t\"knock\": \"VERB\",\n\t\t\t\"faculty\": \"NOUN\",\n\t\t\t\"knowledgeable\": \"ADJ\",\n\t\t\t\"tortoise\": \"NOUN\",\n\t\t\t\"ultraviolet\": \"ADJ\",\n\t\t\t\"beginnings\": \"NOUN\",\n\t\t\t\"everyday\": \"ADJ\",\n\t\t\t\"tobin\": \"PROPN\",\n\t\t\t\"personaly\": \"ADV\",\n\t\t\t\"jmb\": \"PROPN\",\n\t\t\t\"concluding\": \"VERB\",\n\t\t\t\"contemplated\": \"VERB\",\n\t\t\t\"working\": \"VERB\",\n\t\t\t\"oil-fired\": \"ADJ\",\n\t\t\t\"thankful\": \"ADJ\",\n\t\t\t\"disorder\": \"NOUN\",\n\t\t\t\"overtopped\": \"VERB\",\n\t\t\t\"financially\": \"ADV\",\n\t\t\t\"pretends\": \"VERB\",\n\t\t\t\"carribean\": \"ADJ\",\n\t\t\t\"12:21\": \"NUM\",\n\t\t\t\"isoza\": \"PROPN\",\n\t\t\t\"arose\": \"VERB\",\n\t\t\t\"peer\": \"NOUN\",\n\t\t\t\"notoriously\": \"ADV\",\n\t\t\t\"’m\": \"AUX\",\n\t\t\t\"kingerski\": \"PROPN\",\n\t\t\t\"van\": \"PROPN\",\n\t\t\t\"interactive\": \"ADJ\",\n\t\t\t\"03/21/2001\": \"NUM\",\n\t\t\t\"shovel\": \"NOUN\",\n\t\t\t\"nicety\": \"NOUN\",\n\t\t\t\"pygmalion\": \"PROPN\",\n\t\t\t\"squire\": \"NOUN\",\n\t\t\t\"parks\": \"NOUN\",\n\t\t\t\"eos\": \"NOUN\",\n\t\t\t\"overbearing\": \"ADJ\",\n\t\t\t\"wila\": \"PROPN\",\n\t\t\t\"flowery\": \"ADJ\",\n\t\t\t\"thinness\": \"NOUN\",\n\t\t\t\"expressway\": \"PROPN\",\n\t\t\t\"crops\": \"NOUN\",\n\t\t\t\"staccato\": \"ADJ\",\n\t\t\t\"move\": \"VERB\",\n\t\t\t\"skewer\": \"NOUN\",\n\t\t\t\"self/less\": \"PROPN\",\n\t\t\t\"turtle\": \"NOUN\",\n\t\t\t\"benedetti\": \"PROPN\",\n\t\t\t\"marketplace\": \"NOUN\",\n\t\t\t\"explanations\": \"NOUN\",\n\t\t\t\"eccl\": \"PROPN\",\n\t\t\t\"!!!!\": \"PUNCT\",\n\t\t\t\"washes\": \"NOUN\",\n\t\t\t\"tumbling\": \"VERB\",\n\t\t\t\"inspector\": \"NOUN\",\n\t\t\t\"weatherspoon\": \"PROPN\",\n\t\t\t\"watering\": \"VERB\",\n\t\t\t\"300\": \"NUM\",\n\t\t\t\"beschta\": \"PROPN\",\n\t\t\t\"comp.mail.maps\": \"NOUN\",\n\t\t\t\"ya'll\": \"PRON\",\n\t\t\t\"ne\": \"ADV\",\n\t\t\t\"recently\": \"ADV\",\n\t\t\t\"anywhere\": \"ADV\",\n\t\t\t\"ellon\": \"PROPN\",\n\t\t\t\"intrusion\": \"NOUN\",\n\t\t\t\"receptionist\": \"NOUN\",\n\t\t\t\"ca-\": \"INTJ\",\n\t\t\t\"discharge\": \"NOUN\",\n\t\t\t\"signatures\": \"NOUN\",\n\t\t\t\"props\": \"NOUN\",\n\t\t\t\"sha\": \"AUX\",\n\t\t\t\"preserve\": \"VERB\",\n\t\t\t\"varying\": \"VERB\",\n\t\t\t\"cheap\": \"ADJ\",\n\t\t\t\"submicron\": \"NOUN\",\n\t\t\t\"ballroom\": \"NOUN\",\n\t\t\t\"assume\": \"VERB\",\n\t\t\t\"willett\": \"PROPN\",\n\t\t\t\"heavens\": \"NOUN\",\n\t\t\t\"decorated\": \"VERB\",\n\t\t\t\"pirate\": \"NOUN\",\n\t\t\t\"psychological\": \"ADJ\",\n\t\t\t\"‘\": \"PUNCT\",\n\t\t\t\"pit\": \"NOUN\",\n\t\t\t\"eaves\": \"NOUN\",\n\t\t\t\"qualities\": \"NOUN\",\n\t\t\t\"show\": \"VERB\",\n\t\t\t\"australia\": \"PROPN\",\n\t\t\t\"cocoa\": \"NOUN\",\n\t\t\t\"support\": \"NOUN\",\n\t\t\t\"browning\": \"PROPN\",\n\t\t\t\"06/04/01\": \"NUM\",\n\t\t\t\"nicki\": \"PROPN\",\n\t\t\t\"all\": \"DET\",\n\t\t\t\"l.a.\": \"PROPN\",\n\t\t\t\"delivering\": \"VERB\",\n\t\t\t\"beauty\": \"NOUN\",\n\t\t\t\"fantoni\": \"PROPN\",\n\t\t\t\"sorghum\": \"NOUN\",\n\t\t\t\"suffix\": \"NOUN\",\n\t\t\t\"dirt\": \"NOUN\",\n\t\t\t\"fistfights\": \"NOUN\",\n\t\t\t\"segmented\": \"VERB\",\n\t\t\t\"y'\": \"PRON\",\n\t\t\t\"producing\": \"VERB\",\n\t\t\t\"urgently\": \"ADV\",\n\t\t\t\"wagner\": \"PROPN\",\n\t\t\t\"facets\": \"NOUN\",\n\t\t\t\"laugh\": \"VERB\",\n\t\t\t\"lapped\": \"VERB\",\n\t\t\t\"captions\": \"NOUN\",\n\t\t\t\"consistency\": \"NOUN\",\n\t\t\t\"berth\": \"NOUN\",\n\t\t\t\"tamed\": \"VERB\",\n\t\t\t\"markets\": \"NOUN\",\n\t\t\t\"perched\": \"VERB\",\n\t\t\t\"modifying\": \"VERB\",\n\t\t\t\"consent\": \"VERB\",\n\t\t\t\"ordinarily\": \"ADV\",\n\t\t\t\"submovements\": \"NOUN\",\n\t\t\t\"past\": \"ADJ\",\n\t\t\t\"malbec\": \"PROPN\",\n\t\t\t\"dwindled\": \"VERB\",\n\t\t\t\"scratchy\": \"ADJ\",\n\t\t\t\"blankly\": \"ADV\",\n\t\t\t\"alt.animals.horses.breeding\": \"NOUN\",\n\t\t\t\"cement\": \"NOUN\",\n\t\t\t\"sympathised\": \"VERB\",\n\t\t\t\"whatever\": \"PRON\",\n\t\t\t\"punish\": \"VERB\",\n\t\t\t\"during\": \"ADP\",\n\t\t\t\"plates\": \"NOUN\",\n\t\t\t\"legs\": \"NOUN\",\n\t\t\t\"storage\": \"NOUN\",\n\t\t\t\"gapinski\": \"PROPN\",\n\t\t\t\"reclining\": \"VERB\",\n\t\t\t\"funerals\": \"NOUN\",\n\t\t\t\"dwells\": \"VERB\",\n\t\t\t\"floating\": \"VERB\",\n\t\t\t\"cynagon\": \"PROPN\",\n\t\t\t\"slave\": \"NOUN\",\n\t\t\t\"formula\": \"NOUN\",\n\t\t\t\"genres\": \"NOUN\",\n\t\t\t\"½\": \"NUM\",\n\t\t\t\"cleopatra\": \"PROPN\",\n\t\t\t\"10:45\": \"NUM\",\n\t\t\t\"snap\": \"PROPN\",\n\t\t\t\"crossbred\": \"VERB\",\n\t\t\t\"transwestern\": \"PROPN\",\n\t\t\t\"personal\": \"ADJ\",\n\t\t\t\"scanning\": \"VERB\",\n\t\t\t\"kenneth.lay@enron.com\": \"PROPN\",\n\t\t\t\"travel\": \"NOUN\",\n\t\t\t\"http://www.irisdatabase.org\": \"PROPN\",\n\t\t\t\"balance\": \"NOUN\",\n\t\t\t\"objectives\": \"NOUN\",\n\t\t\t\"interestingly\": \"ADV\",\n\t\t\t\"murdered\": \"VERB\",\n\t\t\t\"1985\": \"NUM\",\n\t\t\t\"louisianna\": \"PROPN\",\n\t\t\t\"subjected\": \"VERB\",\n\t\t\t\"turning\": \"VERB\",\n\t\t\t\"03/01/2001\": \"NUM\",\n\t\t\t\"profound\": \"ADJ\",\n\t\t\t\"mid-shaft\": \"ADJ\",\n\t\t\t\"syrian\": \"ADJ\",\n\t\t\t\"confer.\": \"NOUN\",\n\t\t\t\"briefly\": \"ADV\",\n\t\t\t\"mayur...@yahoo.com\": \"PROPN\",\n\t\t\t\"pledges\": \"NOUN\",\n\t\t\t\"unstirred\": \"VERB\",\n\t\t\t\"liters\": \"NOUN\",\n\t\t\t\"wrongful\": \"ADJ\",\n\t\t\t\"seventh\": \"ADJ\",\n\t\t\t\"craftsmanship\": \"NOUN\",\n\t\t\t\"tussauds\": \"PROPN\",\n\t\t\t\"bik\": \"PROPN\",\n\t\t\t\"verifies\": \"VERB\",\n\t\t\t\"surrey\": \"PROPN\",\n\t\t\t\"popped\": \"VERB\",\n\t\t\t\"infrastructures\": \"NOUN\",\n\t\t\t\"emotion\": \"NOUN\",\n\t\t\t\"overseas\": \"ADV\",\n\t\t\t\"ornaments\": \"NOUN\",\n\t\t\t\"bɛʁˈnʊli\": \"PROPN\",\n\t\t\t\"moonlit\": \"ADJ\",\n\t\t\t\"project\": \"NOUN\",\n\t\t\t\"vision\": \"NOUN\",\n\t\t\t\"convinced\": \"VERB\",\n\t\t\t\"asking\": \"VERB\",\n\t\t\t\"comparable\": \"ADJ\",\n\t\t\t\"?!?!?\": \"PUNCT\",\n\t\t\t\"115\": \"NUM\",\n\t\t\t\"hein\": \"PROPN\",\n\t\t\t\"mortgage\": \"NOUN\",\n\t\t\t\"boyish\": \"ADJ\",\n\t\t\t\"restricted\": \"VERB\",\n\t\t\t\"hundredth\": \"NUM\",\n\t\t\t\"feagan\": \"PROPN\",\n\t\t\t\"selecting\": \"VERB\",\n\t\t\t\"meal-times\": \"NOUN\",\n\t\t\t\"naive\": \"ADJ\",\n\t\t\t\"sensible\": \"ADJ\",\n\t\t\t\"walter\": \"PROPN\",\n\t\t\t\"haley\": \"PROPN\",\n\t\t\t\"stock\": \"NOUN\",\n\t\t\t\"domestication\": \"NOUN\",\n\t\t\t\"repressed\": \"VERB\",\n\t\t\t\"hatched\": \"VERB\",\n\t\t\t\"negates\": \"VERB\",\n\t\t\t\"emitting\": \"VERB\",\n\t\t\t\"bayley\": \"PROPN\",\n\t\t\t\"airwaves\": \"NOUN\",\n\t\t\t\"trail\": \"NOUN\",\n\t\t\t\"seven\": \"NUM\",\n\t\t\t\"prelude\": \"NOUN\",\n\t\t\t\"dissenting\": \"VERB\",\n\t\t\t\"discount\": \"NOUN\",\n\t\t\t\"poibeau\": \"PROPN\",\n\t\t\t\"featured\": \"VERB\",\n\t\t\t\"re(a)d\": \"ADJ\",\n\t\t\t\"tendencies\": \"NOUN\",\n\t\t\t\"5.5\": \"NUM\",\n\t\t\t\"saying\": \"VERB\",\n\t\t\t\"olmec\": \"PROPN\",\n\t\t\t\"vaughn\": \"PROPN\",\n\t\t\t\"facing\": \"VERB\",\n\t\t\t\"afterward\": \"ADV\",\n\t\t\t\"closing\": \"VERB\",\n\t\t\t\"kinkade\": \"PROPN\",\n\t\t\t\"837\": \"NUM\",\n\t\t\t\"salad\": \"NOUN\",\n\t\t\t\"shona\": \"PROPN\",\n\t\t\t\"artificial\": \"ADJ\",\n\t\t\t\"17,000\": \"NUM\",\n\t\t\t\"dialects\": \"NOUN\",\n\t\t\t\"colbert\": \"PROPN\",\n\t\t\t\"topline\": \"NOUN\",\n\t\t\t\"superfine\": \"ADJ\",\n\t\t\t\"os\": \"NOUN\",\n\t\t\t\"09/15/99\": \"NUM\",\n\t\t\t\"corporate\": \"ADJ\",\n\t\t\t\"hikes\": \"NOUN\",\n\t\t\t\"onward\": \"ADV\",\n\t\t\t\"orbiting\": \"VERB\",\n\t\t\t\"davidson\": \"PROPN\",\n\t\t\t\"toph\": \"PROPN\",\n\t\t\t\"expulse\": \"VERB\",\n\t\t\t\"accomplishing\": \"VERB\",\n\t\t\t\"steve\": \"PROPN\",\n\t\t\t\"biotaling\": \"VERB\",\n\t\t\t\"luxury\": \"NOUN\",\n\t\t\t\"graduate\": \"NOUN\",\n\t\t\t\"lecturing\": \"VERB\",\n\t\t\t\"unneccesary\": \"ADJ\",\n\t\t\t\"reuters\": \"PROPN\",\n\t\t\t\"lean\": \"ADJ\",\n\t\t\t\"buffalo\": \"PROPN\",\n\t\t\t\"29th\": \"ADJ\",\n\t\t\t\"wiffle\": \"NOUN\",\n\t\t\t\"chinatown\": \"PROPN\",\n\t\t\t\"k-\": \"INTJ\",\n\t\t\t\"senselessly\": \"ADV\",\n\t\t\t\"pete\": \"PROPN\",\n\t\t\t\"dr.\": \"PROPN\",\n\t\t\t\"refine\": \"VERB\",\n\t\t\t\"lifetime\": \"NOUN\",\n\t\t\t\"applicants\": \"NOUN\",\n\t\t\t\"stoats\": \"NOUN\",\n\t\t\t\"evasion\": \"NOUN\",\n\t\t\t\"get\": \"VERB\",\n\t\t\t\"lucius\": \"PROPN\",\n\t\t\t\"residency\": \"NOUN\",\n\t\t\t\"alongside\": \"ADP\",\n\t\t\t\"jealous\": \"ADJ\",\n\t\t\t\"treating\": \"VERB\",\n\t\t\t\"civil\": \"ADJ\",\n\t\t\t\"respected\": \"ADJ\",\n\t\t\t\"401\": \"NUM\",\n\t\t\t\"unsuccessful\": \"ADJ\",\n\t\t\t\"kut\": \"PROPN\",\n\t\t\t\"scheuer\": \"PROPN\",\n\t\t\t\"info@smakkecenter.dk\": \"PROPN\",\n\t\t\t\"focuses\": \"VERB\",\n\t\t\t\"specialized\": \"ADJ\",\n\t\t\t\"blizzard\": \"PROPN\",\n\t\t\t\"kensington\": \"PROPN\",\n\t\t\t\"billiard\": \"NOUN\",\n\t\t\t\"rangoon\": \"NOUN\",\n\t\t\t\"imi\": \"PROPN\",\n\t\t\t\"1928\": \"NUM\",\n\t\t\t\"dwell\": \"VERB\",\n\t\t\t\"nov.\": \"PROPN\",\n\t\t\t\"retention\": \"NOUN\",\n\t\t\t\"palestinians\": \"PROPN\",\n\t\t\t\"margins\": \"NOUN\",\n\t\t\t\"boosted\": \"VERB\",\n\t\t\t\"gigantic\": \"ADJ\",\n\t\t\t\"sundaes\": \"NOUN\",\n\t\t\t\"boost\": \"NOUN\",\n\t\t\t\"nazareth\": \"PROPN\",\n\t\t\t\"workout\": \"NOUN\",\n\t\t\t\"scorpio\": \"PROPN\",\n\t\t\t\"consumes\": \"VERB\",\n\t\t\t\"athletic\": \"ADJ\",\n\t\t\t\"buying\": \"VERB\",\n\t\t\t\"trilby\": \"NOUN\",\n\t\t\t\"colonials\": \"NOUN\",\n\t\t\t\"sacramento\": \"PROPN\",\n\t\t\t\"wenner\": \"PROPN\",\n\t\t\t\"vain\": \"ADJ\",\n\t\t\t\"guaranteeing\": \"VERB\",\n\t\t\t\"guider\": \"NOUN\",\n\t\t\t\"easterners\": \"NOUN\",\n\t\t\t\"mgr...@usa.pipeline.com\": \"PROPN\",\n\t\t\t\"pandorans\": \"PROPN\",\n\t\t\t\"scoreboard\": \"NOUN\",\n\t\t\t\"heifers\": \"NOUN\",\n\t\t\t\"emachines\": \"PROPN\",\n\t\t\t\"incorrectly\": \"ADV\",\n\t\t\t\"camera\": \"NOUN\",\n\t\t\t\"age\": \"NOUN\",\n\t\t\t\"valve\": \"NOUN\",\n\t\t\t\"represents\": \"VERB\",\n\t\t\t\"hawker\": \"PROPN\",\n\t\t\t\"feisty\": \"ADJ\",\n\t\t\t\"flowing\": \"VERB\",\n\t\t\t\"dedicated\": \"ADJ\",\n\t\t\t\"m.d.\": \"PROPN\",\n\t\t\t\"1662\": \"NUM\",\n\t\t\t\"theological\": \"ADJ\",\n\t\t\t\"uhh\": \"INTJ\",\n\t\t\t\"gracie\": \"PROPN\",\n\t\t\t\"deterioration\": \"NOUN\",\n\t\t\t\"leagues\": \"NOUN\",\n\t\t\t\"upper\": \"ADJ\",\n\t\t\t\"companie$\": \"NOUN\",\n\t\t\t\"bunny\": \"PROPN\",\n\t\t\t\"breast\": \"NOUN\",\n\t\t\t\"secured\": \"VERB\",\n\t\t\t\"govern\": \"VERB\",\n\t\t\t\"englishman\": \"NOUN\",\n\t\t\t\"lounge\": \"NOUN\",\n\t\t\t\"locomotion\": \"NOUN\",\n\t\t\t\"973-2776\": \"NUM\",\n\t\t\t\"insert\": \"VERB\",\n\t\t\t\"grid\": \"NOUN\",\n\t\t\t\"defector\": \"NOUN\",\n\t\t\t\"bowie\": \"PROPN\",\n\t\t\t\"roared\": \"VERB\",\n\t\t\t\"amend\": \"VERB\",\n\t\t\t\"tunnels\": \"NOUN\",\n\t\t\t\"hottie\": \"NOUN\",\n\t\t\t\"intractable\": \"ADJ\",\n\t\t\t\"prosperity\": \"NOUN\",\n\t\t\t\"gulbuddin\": \"PROPN\",\n\t\t\t\"greenwich\": \"PROPN\",\n\t\t\t\"spell\": \"VERB\",\n\t\t\t\"shag\": \"PROPN\",\n\t\t\t\"yazid\": \"PROPN\",\n\t\t\t\"compliment\": \"NOUN\",\n\t\t\t\"man\": \"NOUN\",\n\t\t\t\"'scopes\": \"NOUN\",\n\t\t\t\"guantánamo\": \"PROPN\",\n\t\t\t\"margin\": \"NOUN\",\n\t\t\t\"upbringing\": \"NOUN\",\n\t\t\t\"religion\": \"NOUN\",\n\t\t\t\"flattered\": \"VERB\",\n\t\t\t\"guns\": \"NOUN\",\n\t\t\t\"resident\": \"NOUN\",\n\t\t\t\"snitch\": \"NOUN\",\n\t\t\t\"explaining\": \"VERB\",\n\t\t\t\"asymmetrical\": \"ADJ\",\n\t\t\t\"brent\": \"PROPN\",\n\t\t\t\"emerge\": \"VERB\",\n\t\t\t\"favorable\": \"ADJ\",\n\t\t\t\"monde\": \"PROPN\",\n\t\t\t\"sice\": \"SCONJ\",\n\t\t\t\"birkholm\": \"PROPN\",\n\t\t\t\"bewildering\": \"VERB\",\n\t\t\t\"clanged\": \"VERB\",\n\t\t\t\"relieved\": \"VERB\",\n\t\t\t\"thunderous\": \"ADJ\",\n\t\t\t\"slats\": \"NOUN\",\n\t\t\t\"fundamentalist\": \"ADJ\",\n\t\t\t\"1590's\": \"NOUN\",\n\t\t\t\"forgo\": \"VERB\",\n\t\t\t\"brase\": \"NOUN\",\n\t\t\t\"dine\": \"VERB\",\n\t\t\t\"mweta\": \"PROPN\",\n\t\t\t\"splash\": \"NOUN\",\n\t\t\t\"serving\": \"VERB\",\n\t\t\t\"stimuli\": \"NOUN\",\n\t\t\t\"assuring\": \"VERB\",\n\t\t\t\"quite\": \"ADV\",\n\t\t\t\"supermechanized\": \"VERB\",\n\t\t\t\"wilbur\": \"PROPN\",\n\t\t\t\"interpretation\": \"NOUN\",\n\t\t\t\"belongings\": \"NOUN\",\n\t\t\t\"conn.\": \"PROPN\",\n\t\t\t\"reinforcing\": \"VERB\",\n\t\t\t\"tow\": \"NOUN\",\n\t\t\t\"plumber\": \"NOUN\",\n\t\t\t\"calico\": \"NOUN\",\n\t\t\t\"maddening\": \"VERB\",\n\t\t\t\"mentions\": \"VERB\",\n\t\t\t\"5/1/01\": \"NUM\",\n\t\t\t\"coffins\": \"NOUN\",\n\t\t\t\"telephones\": \"NOUN\",\n\t\t\t\"creates\": \"VERB\",\n\t\t\t\"'ll\": \"AUX\",\n\t\t\t\"zealander\": \"NOUN\",\n\t\t\t\"sender\": \"NOUN\",\n\t\t\t\"separating\": \"VERB\",\n\t\t\t\"intermediate\": \"ADJ\",\n\t\t\t\"utc\": \"PROPN\",\n\t\t\t\"braman\": \"PROPN\",\n\t\t\t\"byron\": \"PROPN\",\n\t\t\t\"ingenuity\": \"NOUN\",\n\t\t\t\"conjointly\": \"ADV\",\n\t\t\t\"wit\": \"NOUN\",\n\t\t\t\"tweezers\": \"NOUN\",\n\t\t\t\"familiarity\": \"NOUN\",\n\t\t\t\"in\": \"ADP\",\n\t\t\t\"bandage\": \"NOUN\",\n\t\t\t\"w.\": \"PROPN\",\n\t\t\t\"phase\": \"NOUN\",\n\t\t\t\"lawlessness\": \"NOUN\",\n\t\t\t\"maps\": \"NOUN\",\n\t\t\t\"mizzen-mast\": \"NOUN\",\n\t\t\t\"trinidadian\": \"ADJ\",\n\t\t\t\"desultorily\": \"ADV\",\n\t\t\t\"harbouring\": \"VERB\",\n\t\t\t\"overs\": \"NOUN\",\n\t\t\t\"1987\": \"NUM\",\n\t\t\t\"masters\": \"NOUN\",\n\t\t\t\"150,000\": \"NUM\",\n\t\t\t\"medalist\": \"NOUN\",\n\t\t\t\"contemplating\": \"VERB\",\n\t\t\t\"distinctiveness\": \"NOUN\",\n\t\t\t\"snooty\": \"ADJ\",\n\t\t\t\"gallop\": \"PROPN\",\n\t\t\t\"pursuit\": \"NOUN\",\n\t\t\t\"nagaland\": \"PROPN\",\n\t\t\t\"miniature\": \"NOUN\",\n\t\t\t\"junlong\": \"PROPN\",\n\t\t\t\"vols\": \"NOUN\",\n\t\t\t\"undisclosed\": \"ADJ\",\n\t\t\t\"verbal\": \"ADJ\",\n\t\t\t\"successors\": \"NOUN\",\n\t\t\t\"hunter\": \"PROPN\",\n\t\t\t\"clumsy\": \"ADJ\",\n\t\t\t\"dialed\": \"VERB\",\n\t\t\t\"speed\": \"NOUN\",\n\t\t\t\"mitten\": \"PROPN\",\n\t\t\t\"warpspeed\": \"PROPN\",\n\t\t\t\"procurement\": \"NOUN\",\n\t\t\t\"pony\": \"NOUN\",\n\t\t\t\"floo\": \"NOUN\",\n\t\t\t\"stage\": \"NOUN\",\n\t\t\t\"ozymandias\": \"PROPN\",\n\t\t\t\"gillman\": \"PROPN\",\n\t\t\t\"chun\": \"PROPN\",\n\t\t\t\"bonnard\": \"PROPN\",\n\t\t\t\"shorthand\": \"NOUN\",\n\t\t\t\"be-all\": \"NOUN\",\n\t\t\t\"lina\": \"PROPN\",\n\t\t\t\"thirteenth\": \"ADJ\",\n\t\t\t\"jong\": \"PROPN\",\n\t\t\t\"laws\": \"NOUN\",\n\t\t\t\"ambassador\": \"PROPN\",\n\t\t\t\"interconnected\": \"ADJ\",\n\t\t\t\"weaker\": \"ADJ\",\n\t\t\t\"orientations\": \"NOUN\",\n\t\t\t\"mob.\": \"NOUN\",\n\t\t\t\"polio\": \"PROPN\",\n\t\t\t\"qaeda\": \"PROPN\",\n\t\t\t\"steven\": \"PROPN\",\n\t\t\t\"pratt\": \"PROPN\",\n\t\t\t\"swearing\": \"NOUN\",\n\t\t\t\"elimination\": \"NOUN\",\n\t\t\t\"1995\": \"NUM\",\n\t\t\t\"hibbs\": \"PROPN\",\n\t\t\t\"shandao\": \"PROPN\",\n\t\t\t\"mcfarlane\": \"PROPN\",\n\t\t\t\"integrated\": \"VERB\",\n\t\t\t\"tries\": \"VERB\",\n\t\t\t\"parallel\": \"ADJ\",\n\t\t\t\"1490s\": \"NOUN\",\n\t\t\t\"ridiculousness\": \"PROPN\",\n\t\t\t\"mail\": \"NOUN\",\n\t\t\t\"consulates\": \"NOUN\",\n\t\t\t\"bodyguards\": \"NOUN\",\n\t\t\t\"solemn\": \"ADJ\",\n\t\t\t\"program\": \"NOUN\",\n\t\t\t\"1851\": \"NUM\",\n\t\t\t\"05/01/2001\": \"NUM\",\n\t\t\t\"docs\": \"NOUN\",\n\t\t\t\"notion\": \"NOUN\",\n\t\t\t\"identifying\": \"VERB\",\n\t\t\t\"4153030\": \"NUM\",\n\t\t\t\"favorite\": \"ADJ\",\n\t\t\t\"1st\": \"ADJ\",\n\t\t\t\"frosting\": \"NOUN\",\n\t\t\t\"cucumber\": \"PROPN\",\n\t\t\t\"nonenforcement\": \"NOUN\",\n\t\t\t\"idol\": \"NOUN\",\n\t\t\t\"imperial\": \"ADJ\",\n\t\t\t\"corrupt\": \"ADJ\",\n\t\t\t\"eta\": \"NOUN\",\n\t\t\t\"inning\": \"NOUN\",\n\t\t\t\"frenzy\": \"NOUN\",\n\t\t\t\"swords\": \"NOUN\",\n\t\t\t\"ensures\": \"VERB\",\n\t\t\t\"comma\": \"NOUN\",\n\t\t\t\"wager\": \"NOUN\",\n\t\t\t\"resonate\": \"VERB\",\n\t\t\t\"singmaster\": \"PROPN\",\n\t\t\t\"translations\": \"NOUN\",\n\t\t\t\"shih\": \"PROPN\",\n\t\t\t\"hitched\": \"VERB\",\n\t\t\t\"dill\": \"NOUN\",\n\t\t\t\"11/03\": \"NUM\",\n\t\t\t\"bleary\": \"ADJ\",\n\t\t\t\"6/1/01\": \"NUM\",\n\t\t\t\"acquire\": \"VERB\",\n\t\t\t\"announced\": \"VERB\",\n\t\t\t\"prosthetic\": \"ADJ\",\n\t\t\t\"subvert\": \"VERB\",\n\t\t\t\"abandoned\": \"VERB\",\n\t\t\t\"stateless\": \"ADJ\",\n\t\t\t\"ferjani\": \"PROPN\",\n\t\t\t\"slate\": \"PROPN\",\n\t\t\t\"fixes\": \"NOUN\",\n\t\t\t\"crowd\": \"NOUN\",\n\t\t\t\"pi\": \"PROPN\",\n\t\t\t\"scorpion\": \"NOUN\",\n\t\t\t\"aquarius\": \"PROPN\",\n\t\t\t\"pants\": \"NOUN\",\n\t\t\t\"longitude\": \"NOUN\",\n\t\t\t\"extradited\": \"VERB\",\n\t\t\t\"alexandre\": \"PROPN\",\n\t\t\t\"mailto:galen.torneby@nepco.com\": \"PROPN\",\n\t\t\t\"wanted\": \"VERB\",\n\t\t\t\"publicly\": \"ADV\",\n\t\t\t\"kin\": \"PROPN\",\n\t\t\t\"diving\": \"NOUN\",\n\t\t\t\"sandy\": \"PROPN\",\n\t\t\t\"condemnation\": \"NOUN\",\n\t\t\t\"wherever\": \"ADV\",\n\t\t\t\"art.\": \"NOUN\",\n\t\t\t\"truffaut\": \"PROPN\",\n\t\t\t\"avoid\": \"VERB\",\n\t\t\t\"settlers\": \"NOUN\",\n\t\t\t\"gloves\": \"NOUN\",\n\t\t\t\"sierra\": \"PROPN\",\n\t\t\t\"taint\": \"NOUN\",\n\t\t\t\"nsa\": \"PROPN\",\n\t\t\t\"chalked\": \"VERB\",\n\t\t\t\"mid-town\": \"NOUN\",\n\t\t\t\"intellectual\": \"ADJ\",\n\t\t\t\"antigua\": \"PROPN\",\n\t\t\t\"goals\": \"NOUN\",\n\t\t\t\"3.1\": \"NUM\",\n\t\t\t\"exhausted\": \"ADJ\",\n\t\t\t\"genevieve\": \"PROPN\",\n\t\t\t\"encampment\": \"NOUN\",\n\t\t\t\"lorry\": \"NOUN\",\n\t\t\t\"brampton\": \"PROPN\",\n\t\t\t\"programmer\": \"NOUN\",\n\t\t\t\"crisp\": \"ADJ\",\n\t\t\t\"orchestras\": \"NOUN\",\n\t\t\t\"vincenti\": \"PROPN\",\n\t\t\t\"rust\": \"ADJ\",\n\t\t\t\"by-and-by\": \"ADV\",\n\t\t\t\"detachment\": \"NOUN\",\n\t\t\t\"soo\": \"ADV\",\n\t\t\t\"observable\": \"ADJ\",\n\t\t\t\"plants\": \"NOUN\",\n\t\t\t\"arrives\": \"VERB\",\n\t\t\t\"arp\": \"PROPN\",\n\t\t\t\"krueger\": \"PROPN\",\n\t\t\t\"drunken\": \"ADJ\",\n\t\t\t\"brandy\": \"NOUN\",\n\t\t\t\"yearly\": \"ADJ\",\n\t\t\t\"debit\": \"NOUN\",\n\t\t\t\"sentimental\": \"ADJ\",\n\t\t\t\"cascading\": \"VERB\",\n\t\t\t\"reasons\": \"NOUN\",\n\t\t\t\"reverent\": \"ADJ\",\n\t\t\t\"barns\": \"NOUN\",\n\t\t\t\"scent\": \"NOUN\",\n\t\t\t\"wanton\": \"ADJ\",\n\t\t\t\"'re\": \"AUX\",\n\t\t\t\".....................\": \"PUNCT\",\n\t\t\t\"reduction\": \"NOUN\",\n\t\t\t\"sunless\": \"ADJ\",\n\t\t\t\"respondents\": \"NOUN\",\n\t\t\t\"defamation\": \"NOUN\",\n\t\t\t\"pausing\": \"VERB\",\n\t\t\t\"compete\": \"VERB\",\n\t\t\t\"margaritas\": \"NOUN\",\n\t\t\t\"blatantly\": \"ADV\",\n\t\t\t\"945\": \"NUM\",\n\t\t\t\"bigger\": \"ADJ\",\n\t\t\t\"crushing\": \"VERB\",\n\t\t\t\"praying\": \"VERB\",\n\t\t\t\"destroyed\": \"VERB\",\n\t\t\t\":(\": \"SYM\",\n\t\t\t\"breakthroughs\": \"NOUN\",\n\t\t\t\"geologists\": \"NOUN\",\n\t\t\t\"bulb\": \"NOUN\",\n\t\t\t\"genealogy\": \"NOUN\",\n\t\t\t\"lobbyist\": \"NOUN\",\n\t\t\t\"arguments\": \"NOUN\",\n\t\t\t\"103\": \"NUM\",\n\t\t\t\"svendborg\": \"PROPN\",\n\t\t\t\"repsitun\": \"PROPN\",\n\t\t\t\"civility\": \"NOUN\",\n\t\t\t\"walkin\": \"VERB\",\n\t\t\t\"pilgrims\": \"NOUN\",\n\t\t\t\"vicious\": \"ADJ\",\n\t\t\t\"pursue\": \"VERB\",\n\t\t\t\"1560\": \"NUM\",\n\t\t\t\"lane\": \"NOUN\",\n\t\t\t\"ponce\": \"PROPN\",\n\t\t\t\"km\": \"NOUN\",\n\t\t\t\"anger\": \"NOUN\",\n\t\t\t\"catholicism\": \"NOUN\",\n\t\t\t\"framenet\": \"PROPN\",\n\t\t\t\"confer\": \"ADJ\",\n\t\t\t\"platted\": \"VERB\",\n\t\t\t\"whir\": \"VERB\",\n\t\t\t\"marquez\": \"PROPN\",\n\t\t\t\"indication\": \"NOUN\",\n\t\t\t\"jemison\": \"PROPN\",\n\t\t\t\"faithfully\": \"ADV\",\n\t\t\t\"petronios\": \"PROPN\",\n\t\t\t\"dugway\": \"PROPN\",\n\t\t\t\"issac\": \"PROPN\",\n\t\t\t\"seen\": \"VERB\",\n\t\t\t\"countries\": \"NOUN\",\n\t\t\t\"strode\": \"VERB\",\n\t\t\t\"spacetoday.net\": \"PROPN\",\n\t\t\t\"uninteresting\": \"ADJ\",\n\t\t\t\"sandra\": \"PROPN\",\n\t\t\t\"pewter\": \"NOUN\",\n\t\t\t\"fathers\": \"NOUN\",\n\t\t\t\"p\": \"NOUN\",\n\t\t\t\"greeting\": \"NOUN\",\n\t\t\t\"varietal\": \"NOUN\",\n\t\t\t\"profession\": \"NOUN\",\n\t\t\t\"reparcelling\": \"NOUN\",\n\t\t\t\"ventilation\": \"NOUN\",\n\t\t\t\"guiding\": \"VERB\",\n\t\t\t\"highness\": \"NOUN\",\n\t\t\t\"ruin\": \"VERB\",\n\t\t\t\"sage\": \"ADJ\",\n\t\t\t\"preconceptions\": \"NOUN\",\n\t\t\t\"vaisseau\": \"PROPN\",\n\t\t\t\"arkansas\": \"PROPN\",\n\t\t\t\"nope\": \"INTJ\",\n\t\t\t\"buffet\": \"NOUN\",\n\t\t\t\"address\": \"NOUN\",\n\t\t\t\"tx\": \"PROPN\",\n\t\t\t\"16s\": \"NOUN\",\n\t\t\t\"discrediting\": \"NOUN\",\n\t\t\t\"delighted\": \"ADJ\",\n\t\t\t\"addiction\": \"NOUN\",\n\t\t\t\"yogi\": \"PROPN\",\n\t\t\t\"ld2d-#69334-1.doc\": \"NOUN\",\n\t\t\t\"sunday\": \"PROPN\",\n\t\t\t\"concession\": \"NOUN\",\n\t\t\t\"bakeries\": \"NOUN\",\n\t\t\t\"curveball\": \"PROPN\",\n\t\t\t\"1:45\": \"NUM\",\n\t\t\t\"thomas\": \"PROPN\",\n\t\t\t\"humankind\": \"NOUN\",\n\t\t\t\"v.\": \"PROPN\",\n\t\t\t\"64.2\": \"NUM\",\n\t\t\t\"t'ho\": \"PROPN\",\n\t\t\t\"biked\": \"VERB\",\n\t\t\t\"plucked\": \"VERB\",\n\t\t\t\"http://www.21stcenturysciencetech.com/articles/chernobyl.html\": \"PROPN\",\n\t\t\t\"2017\": \"NUM\",\n\t\t\t\"gipsy\": \"NOUN\",\n\t\t\t\"tavern\": \"NOUN\",\n\t\t\t\"hal\": \"PROPN\",\n\t\t\t\"troubled\": \"ADJ\",\n\t\t\t\"venues\": \"NOUN\",\n\t\t\t\"vintage\": \"NOUN\",\n\t\t\t\"lindh\": \"PROPN\",\n\t\t\t\"spawn\": \"VERB\",\n\t\t\t\"catacombs\": \"NOUN\",\n\t\t\t\"reeds\": \"NOUN\",\n\t\t\t\"crude\": \"NOUN\",\n\t\t\t\"demurrage\": \"NOUN\",\n\t\t\t\"bodyless\": \"ADJ\",\n\t\t\t\"glass-fronted\": \"ADJ\",\n\t\t\t\"curated\": \"VERB\",\n\t\t\t\"summed\": \"VERB\",\n\t\t\t\"appalled\": \"VERB\",\n\t\t\t\"where-ever\": \"ADV\",\n\t\t\t\"microcomputer\": \"NOUN\",\n\t\t\t\"345-3436\": \"NUM\",\n\t\t\t\"los\": \"PROPN\",\n\t\t\t\"kid\": \"NOUN\",\n\t\t\t\"application\": \"NOUN\",\n\t\t\t\"canibal\": \"PROPN\",\n\t\t\t\"retaliate\": \"VERB\",\n\t\t\t\"5/18\": \"NUM\",\n\t\t\t\"maviglio\": \"PROPN\",\n\t\t\t\"nameless\": \"ADJ\",\n\t\t\t\"brushes\": \"NOUN\",\n\t\t\t\"puk\": \"PROPN\",\n\t\t\t\"mudo\": \"PROPN\",\n\t\t\t\"onion\": \"PROPN\",\n\t\t\t\"exists\": \"VERB\",\n\t\t\t\"superhero\": \"NOUN\",\n\t\t\t\"d'etat\": \"NOUN\",\n\t\t\t\"scissors\": \"NOUN\",\n\t\t\t\"hopefuls\": \"NOUN\",\n\t\t\t\"eventually\": \"ADV\",\n\t\t\t\"hooptie\": \"NOUN\",\n\t\t\t\"cleanup\": \"NOUN\",\n\t\t\t\"signatories\": \"NOUN\",\n\t\t\t\"daphnia\": \"NOUN\",\n\t\t\t\"election\": \"NOUN\",\n\t\t\t\"offs\": \"NOUN\",\n\t\t\t\"raging\": \"VERB\",\n\t\t\t\"stand\": \"VERB\",\n\t\t\t\"output\": \"NOUN\",\n\t\t\t\"vom\": \"NOUN\",\n\t\t\t\"adjusted\": \"VERB\",\n\t\t\t\"ordinary\": \"ADJ\",\n\t\t\t\"axe\": \"NOUN\",\n\t\t\t\"9:00\": \"NUM\",\n\t\t\t\"puppet\": \"NOUN\",\n\t\t\t\"aids\": \"NOUN\",\n\t\t\t\"cooperation\": \"NOUN\",\n\t\t\t\"(countries|regions)\": \"NOUN\",\n\t\t\t\"arts\": \"NOUN\",\n\t\t\t\"crapfest\": \"NOUN\",\n\t\t\t\"jokes\": \"NOUN\",\n\t\t\t\"ed.\": \"NOUN\",\n\t\t\t\"1930\": \"NUM\",\n\t\t\t\"households\": \"NOUN\",\n\t\t\t\"rohingya\": \"PROPN\",\n\t\t\t\"growing\": \"VERB\",\n\t\t\t\"joe\": \"PROPN\",\n\t\t\t\"10\": \"NUM\",\n\t\t\t\"publications\": \"NOUN\",\n\t\t\t\"position\": \"NOUN\",\n\t\t\t\"passionately\": \"ADV\",\n\t\t\t\"rapporteurs\": \"NOUN\",\n\t\t\t\"statutory\": \"ADJ\",\n\t\t\t\"nurse\": \"NOUN\",\n\t\t\t\"smarter\": \"ADJ\",\n\t\t\t\"subject\": \"NOUN\",\n\t\t\t\"draping\": \"VERB\",\n\t\t\t\"713/853-6197\": \"NUM\",\n\t\t\t\"lighten\": \"VERB\",\n\t\t\t\"fannin\": \"PROPN\",\n\t\t\t\"germans\": \"NOUN\",\n\t\t\t\"glitter\": \"NOUN\",\n\t\t\t\"manne\": \"PROPN\",\n\t\t\t\"noun\": \"NOUN\",\n\t\t\t\"10.1\": \"NUM\",\n\t\t\t\"off-\": \"NOUN\",\n\t\t\t\"vossen\": \"PROPN\",\n\t\t\t\"holiday\": \"NOUN\",\n\t\t\t\"collaged\": \"ADJ\",\n\t\t\t\"accurate\": \"ADJ\",\n\t\t\t\"permissive\": \"ADJ\",\n\t\t\t\"blades\": \"NOUN\",\n\t\t\t\"swarthy\": \"ADJ\",\n\t\t\t\"arvn\": \"PROPN\",\n\t\t\t\"cookin'\": \"VERB\",\n\t\t\t\"paseo\": \"PROPN\",\n\t\t\t\"evolve\": \"VERB\",\n\t\t\t\"radar\": \"NOUN\",\n\t\t\t\"disagreed\": \"VERB\",\n\t\t\t\"owwww\": \"INTJ\",\n\t\t\t\"te\": \"PROPN\",\n\t\t\t\"left-over\": \"ADJ\",\n\t\t\t\"lautrec\": \"PROPN\",\n\t\t\t\"imposters\": \"NOUN\",\n\t\t\t\"leopold\": \"PROPN\",\n\t\t\t\"dietrich\": \"PROPN\",\n\t\t\t\"1300\": \"NUM\",\n\t\t\t\"minded\": \"ADJ\",\n\t\t\t\"rut\": \"NOUN\",\n\t\t\t\"easthampton\": \"PROPN\",\n\t\t\t\"45,756\": \"NUM\",\n\t\t\t\"siméon\": \"PROPN\",\n\t\t\t\"ebola\": \"PROPN\",\n\t\t\t\"catholic\": \"ADJ\",\n\t\t\t\"fouling\": \"VERB\",\n\t\t\t\"warrant\": \"VERB\",\n\t\t\t\"reluctantly\": \"ADV\",\n\t\t\t\"seriously\": \"ADV\",\n\t\t\t\"odaras\": \"PROPN\",\n\t\t\t\"accidental\": \"ADJ\",\n\t\t\t\"amiriya\": \"PROPN\",\n\t\t\t\"coordinate\": \"NOUN\",\n\t\t\t\"fuel\": \"NOUN\",\n\t\t\t\"tana\": \"PROPN\",\n\t\t\t\"yiddish\": \"NOUN\",\n\t\t\t\"misogyny\": \"NOUN\",\n\t\t\t\"impeccable\": \"ADJ\",\n\t\t\t\"hiroshima\": \"PROPN\",\n\t\t\t\"inheritance\": \"NOUN\",\n\t\t\t\"redeems\": \"VERB\",\n\t\t\t\"popularized\": \"VERB\",\n\t\t\t\"astride\": \"ADP\",\n\t\t\t\"states\": \"PROPN\",\n\t\t\t\"dislocate\": \"VERB\",\n\t\t\t\"adele\": \"PROPN\",\n\t\t\t\"specifically\": \"ADV\",\n\t\t\t\"community\": \"NOUN\",\n\t\t\t\"storms\": \"NOUN\",\n\t\t\t\"recorded\": \"VERB\",\n\t\t\t\"corrections\": \"NOUN\",\n\t\t\t\"synch\": \"NOUN\",\n\t\t\t\"amateur\": \"NOUN\",\n\t\t\t\"billing\": \"NOUN\",\n\t\t\t\"grandeur\": \"NOUN\",\n\t\t\t\"fitful\": \"ADJ\",\n\t\t\t\"zombie\": \"NOUN\",\n\t\t\t\"seats\": \"NOUN\",\n\t\t\t\"programming\": \"NOUN\",\n\t\t\t\"jubur\": \"PROPN\",\n\t\t\t\"#advice\": \"PROPN\",\n\t\t\t\"amy.cornell@compaq.com\": \"PROPN\",\n\t\t\t\"systemic\": \"ADJ\",\n\t\t\t\"http://digon_va.tripod.com/chernobyl.htm\": \"PROPN\",\n\t\t\t\"complacent\": \"ADJ\",\n\t\t\t\"big\": \"ADJ\",\n\t\t\t\"citral\": \"NOUN\",\n\t\t\t\"obsf\": \"NOUN\",\n\t\t\t\"ache\": \"NOUN\",\n\t\t\t\"concert\": \"NOUN\",\n\t\t\t\"kits\": \"NOUN\",\n\t\t\t\"1.428,000\": \"NUM\",\n\t\t\t\"server\": \"NOUN\",\n\t\t\t\"programmed\": \"VERB\",\n\t\t\t\"prefers\": \"VERB\",\n\t\t\t\"judgement\": \"NOUN\",\n\t\t\t\"managing\": \"VERB\",\n\t\t\t\"axis\": \"NOUN\",\n\t\t\t\"withdrawing\": \"VERB\",\n\t\t\t\"having\": \"VERB\",\n\t\t\t\"bodyworker\": \"NOUN\",\n\t\t\t\"florist\": \"NOUN\",\n\t\t\t\"hairdresser\": \"NOUN\",\n\t\t\t\"manifestations\": \"NOUN\",\n\t\t\t\"pathological\": \"ADJ\",\n\t\t\t\"ablest\": \"ADJ\",\n\t\t\t\"cruelty\": \"NOUN\",\n\t\t\t\"keystone\": \"NOUN\",\n\t\t\t\"explained\": \"VERB\",\n\t\t\t\"jeez\": \"INTJ\",\n\t\t\t\"mighty\": \"ADJ\",\n\t\t\t\"studios\": \"NOUN\",\n\t\t\t\"furnace\": \"NOUN\",\n\t\t\t\"fellas\": \"NOUN\",\n\t\t\t\"lisenced\": \"ADJ\",\n\t\t\t\"plo-\": \"INTJ\",\n\t\t\t\"generally\": \"ADV\",\n\t\t\t\"11:00\": \"NUM\",\n\t\t\t\"stranded\": \"VERB\",\n\t\t\t\"perfume\": \"NOUN\",\n\t\t\t\"suerat\": \"PROPN\",\n\t\t\t\"dejesús\": \"PROPN\",\n\t\t\t\"residing\": \"VERB\",\n\t\t\t\"imprint\": \"NOUN\",\n\t\t\t\"stretched\": \"VERB\",\n\t\t\t\"nazis\": \"NOUN\",\n\t\t\t\"elpaso\": \"PROPN\",\n\t\t\t\"amounts\": \"NOUN\",\n\t\t\t\"quieter\": \"ADJ\",\n\t\t\t\"foundation\": \"PROPN\",\n\t\t\t\"intensive\": \"ADJ\",\n\t\t\t\"unearthed\": \"VERB\",\n\t\t\t\"guv\": \"NOUN\",\n\t\t\t\"posture\": \"NOUN\",\n\t\t\t\"puke\": \"VERB\",\n\t\t\t\"views\": \"NOUN\",\n\t\t\t\"stonily\": \"ADV\",\n\t\t\t\"any1\": \"PRON\",\n\t\t\t\"assembled\": \"VERB\",\n\t\t\t\"elena\": \"PROPN\",\n\t\t\t\"feeds\": \"VERB\",\n\t\t\t\"1q\": \"NOUN\",\n\t\t\t\"cropped\": \"VERB\",\n\t\t\t\"someon\": \"PRON\",\n\t\t\t\"nodes\": \"NOUN\",\n\t\t\t\"file\": \"NOUN\",\n\t\t\t\"plugs\": \"NOUN\",\n\t\t\t\"dunderheads\": \"NOUN\",\n\t\t\t\"apocalyptic\": \"ADJ\",\n\t\t\t\"rider\": \"NOUN\",\n\t\t\t\"cooler\": \"ADJ\",\n\t\t\t\"maoists\": \"PROPN\",\n\t\t\t\"rossi\": \"PROPN\",\n\t\t\t\"strikingly\": \"ADV\",\n\t\t\t\"trustee\": \"NOUN\",\n\t\t\t\"dursley\": \"PROPN\",\n\t\t\t\"nicholas\": \"PROPN\",\n\t\t\t\"devoid\": \"ADJ\",\n\t\t\t\"tfs\": \"NOUN\",\n\t\t\t\"grenada\": \"PROPN\",\n\t\t\t\"recognized\": \"VERB\",\n\t\t\t\"offering\": \"VERB\",\n\t\t\t\"freud\": \"PROPN\",\n\t\t\t\"manipur\": \"PROPN\",\n\t\t\t\"fernández\": \"PROPN\",\n\t\t\t\"mistaken\": \"ADJ\",\n\t\t\t\"7037686710\": \"NUM\",\n\t\t\t\"socio-economic\": \"ADJ\",\n\t\t\t\"driving\": \"VERB\",\n\t\t\t\"unfixed\": \"ADJ\",\n\t\t\t\"cropduster\": \"NOUN\",\n\t\t\t\"realty\": \"PROPN\",\n\t\t\t\"webpage\": \"NOUN\",\n\t\t\t\"hawaiʻi\": \"PROPN\",\n\t\t\t\"quaffle\": \"NOUN\",\n\t\t\t\"admit\": \"VERB\",\n\t\t\t\"n-\": \"INTJ\",\n\t\t\t\"supposition\": \"NOUN\",\n\t\t\t\"fiona\": \"PROPN\",\n\t\t\t\"preferences\": \"NOUN\",\n\t\t\t\"quarterly\": \"ADJ\",\n\t\t\t\"journalism\": \"NOUN\",\n\t\t\t\"talkboys\": \"PROPN\",\n\t\t\t\"hardcore\": \"ADJ\",\n\t\t\t\"jewels\": \"NOUN\",\n\t\t\t\"waned\": \"VERB\",\n\t\t\t\"injury\": \"NOUN\",\n\t\t\t\"1530\": \"NUM\",\n\t\t\t\"eatin\": \"VERB\",\n\t\t\t\"muni\": \"PROPN\",\n\t\t\t\"remain\": \"VERB\",\n\t\t\t\"jet\": \"NOUN\",\n\t\t\t\"momentous\": \"ADJ\",\n\t\t\t\"buckling\": \"VERB\",\n\t\t\t\"tks\": \"NOUN\",\n\t\t\t\"fireplaces\": \"NOUN\",\n\t\t\t\"ph\": \"NOUN\",\n\t\t\t\"producer\": \"NOUN\",\n\t\t\t\"spree\": \"NOUN\",\n\t\t\t\"macho\": \"ADJ\",\n\t\t\t\"peculiar\": \"ADJ\",\n\t\t\t\"worthwhile\": \"ADJ\",\n\t\t\t\"encouraging\": \"VERB\",\n\t\t\t\"launcher\": \"PROPN\",\n\t\t\t\"contend\": \"VERB\",\n\t\t\t\"miserable\": \"ADJ\",\n\t\t\t\"architect\": \"NOUN\",\n\t\t\t\"feeling\": \"VERB\",\n\t\t\t\"...\": \"PUNCT\",\n\t\t\t\"flawless\": \"ADJ\",\n\t\t\t\"anti-americanism\": \"NOUN\",\n\t\t\t\"downpour\": \"NOUN\",\n\t\t\t\"nedwick\": \"PROPN\",\n\t\t\t\"navigated\": \"VERB\",\n\t\t\t\"preference\": \"NOUN\",\n\t\t\t\"e-mail\": \"NOUN\",\n\t\t\t\"wel\": \"INTJ\",\n\t\t\t\"elegance\": \"NOUN\",\n\t\t\t\"high-octave\": \"NOUN\",\n\t\t\t\"autumn\": \"NOUN\",\n\t\t\t\"knotted\": \"VERB\",\n\t\t\t\"reassure\": \"VERB\",\n\t\t\t\"extremes\": \"NOUN\",\n\t\t\t\"airplane\": \"NOUN\",\n\t\t\t\"hosted\": \"VERB\",\n\t\t\t\"havoc\": \"NOUN\",\n\t\t\t\"hollyłódź\": \"PROPN\",\n\t\t\t\"developers\": \"NOUN\",\n\t\t\t\"2.9\": \"NUM\",\n\t\t\t\"resturant\": \"NOUN\",\n\t\t\t\"up-river\": \"NOUN\",\n\t\t\t\"institute\": \"PROPN\",\n\t\t\t\"development\": \"NOUN\",\n\t\t\t\"strangely\": \"ADV\",\n\t\t\t\"twenty-two\": \"NUM\",\n\t\t\t\"honorific\": \"ADJ\",\n\t\t\t\"receives\": \"VERB\",\n\t\t\t\"bullfights\": \"NOUN\",\n\t\t\t\"fervent\": \"ADJ\",\n\t\t\t\"plentiful\": \"ADJ\",\n\t\t\t\"back\": \"ADV\",\n\t\t\t\"exciting\": \"ADJ\",\n\t\t\t\"calmest\": \"ADJ\",\n\t\t\t\"obvious\": \"ADJ\",\n\t\t\t\"mek\": \"PROPN\",\n\t\t\t\"unhappy\": \"ADJ\",\n\t\t\t\"sickest\": \"ADJ\",\n\t\t\t\"chili\": \"NOUN\",\n\t\t\t\"penalty\": \"NOUN\",\n\t\t\t\"unruly\": \"ADJ\",\n\t\t\t\"homage\": \"NOUN\",\n\t\t\t\"50,000th\": \"ADJ\",\n\t\t\t\"stale\": \"ADJ\",\n\t\t\t\"location\": \"NOUN\",\n\t\t\t\"gloriously\": \"ADV\",\n\t\t\t\"arterial\": \"ADJ\",\n\t\t\t\"utmost\": \"ADJ\",\n\t\t\t\"disciplined\": \"ADJ\",\n\t\t\t\"sprdopt\": \"NOUN\",\n\t\t\t\"lessig\": \"PROPN\",\n\t\t\t\"dropout\": \"NOUN\",\n\t\t\t\"laboratorio\": \"PROPN\",\n\t\t\t\"scrummy\": \"ADJ\",\n\t\t\t\"valeska\": \"PROPN\",\n\t\t\t\"lots\": \"NOUN\",\n\t\t\t\"city\": \"NOUN\",\n\t\t\t\"parasite\": \"NOUN\",\n\t\t\t\"1865\": \"NUM\",\n\t\t\t\"uncongenial\": \"ADJ\",\n\t\t\t\"childhood\": \"NOUN\",\n\t\t\t\"sensational\": \"ADJ\",\n\t\t\t\"emigrated\": \"VERB\",\n\t\t\t\"korea\": \"PROPN\",\n\t\t\t\"conflict\": \"NOUN\",\n\t\t\t\"clashes\": \"NOUN\",\n\t\t\t\"guardian\": \"NOUN\",\n\t\t\t\"shutter\": \"NOUN\",\n\t\t\t\"avignon\": \"PROPN\",\n\t\t\t\"kraków\": \"PROPN\",\n\t\t\t\"baggy\": \"ADJ\",\n\t\t\t\"example\": \"NOUN\",\n\t\t\t\"requisite\": \"NOUN\",\n\t\t\t\"crucible\": \"NOUN\",\n\t\t\t\"twig\": \"PROPN\",\n\t\t\t\"ci\": \"PROPN\",\n\t\t\t\"tosses\": \"VERB\",\n\t\t\t\"hostilities\": \"NOUN\",\n\t\t\t\"mechanic\": \"NOUN\",\n\t\t\t\"cross-legged\": \"ADJ\",\n\t\t\t\"duncan\": \"PROPN\",\n\t\t\t\"re-embarking\": \"VERB\",\n\t\t\t\"tag\": \"NOUN\",\n\t\t\t\"amy\": \"PROPN\",\n\t\t\t\"bombs\": \"NOUN\",\n\t\t\t\"thriving\": \"ADJ\",\n\t\t\t\"thirty\": \"NUM\",\n\t\t\t\"java\": \"PROPN\",\n\t\t\t\"success\": \"NOUN\",\n\t\t\t\"rochester\": \"PROPN\",\n\t\t\t\"revelations\": \"NOUN\",\n\t\t\t\"panko\": \"NOUN\",\n\t\t\t\"crooked\": \"ADJ\",\n\t\t\t\"doorway\": \"NOUN\",\n\t\t\t\"salary\": \"NOUN\",\n\t\t\t\"slowly\": \"ADV\",\n\t\t\t\"proposals\": \"NOUN\",\n\t\t\t\"sadness\": \"NOUN\",\n\t\t\t\"advancing\": \"VERB\",\n\t\t\t\"biased\": \"ADJ\",\n\t\t\t\"448-9499\": \"NUM\",\n\t\t\t\"monarchies\": \"NOUN\",\n\t\t\t\"deficit\": \"NOUN\",\n\t\t\t\"translate\": \"VERB\",\n\t\t\t\"dan\": \"PROPN\",\n\t\t\t\"rental\": \"NOUN\",\n\t\t\t\"bashing\": \"NOUN\",\n\t\t\t\"parkhill\": \"PROPN\",\n\t\t\t\"1101\": \"NUM\",\n\t\t\t\"consumer\": \"NOUN\",\n\t\t\t\"imperiled\": \"VERB\",\n\t\t\t\"nuria_r_ibarra@calpx.com\": \"PROPN\",\n\t\t\t\"worse\": \"ADJ\",\n\t\t\t\"gui\": \"NOUN\",\n\t\t\t\"hated\": \"VERB\",\n\t\t\t\"spine\": \"NOUN\",\n\t\t\t\"mid-20s\": \"NOUN\",\n\t\t\t\"structure\": \"NOUN\",\n\t\t\t\"joystick\": \"NOUN\",\n\t\t\t\"crabs\": \"PROPN\",\n\t\t\t\"lime\": \"NOUN\",\n\t\t\t\"mantids\": \"NOUN\",\n\t\t\t\"hostility\": \"NOUN\",\n\t\t\t\"lawsuits\": \"NOUN\",\n\t\t\t\"insisting\": \"VERB\",\n\t\t\t\"muddle\": \"VERB\",\n\t\t\t\"equipment\": \"NOUN\",\n\t\t\t\"edged\": \"ADJ\",\n\t\t\t\"zealot\": \"NOUN\",\n\t\t\t\"coherence\": \"NOUN\",\n\t\t\t\"mart\": \"PROPN\",\n\t\t\t\"issues\": \"NOUN\",\n\t\t\t\"lanka\": \"PROPN\",\n\t\t\t\"ailments\": \"NOUN\",\n\t\t\t\"doctorow\": \"PROPN\",\n\t\t\t\"effected\": \"VERB\",\n\t\t\t\"story\": \"NOUN\",\n\t\t\t\"salvation\": \"NOUN\",\n\t\t\t\"chemist\": \"NOUN\",\n\t\t\t\"height\": \"NOUN\",\n\t\t\t\"leaderships\": \"NOUN\",\n\t\t\t\"loretta\": \"PROPN\",\n\t\t\t\"http://www.cic.gc.ca/english/index.asp\": \"PROPN\",\n\t\t\t\"pinkness\": \"NOUN\",\n\t\t\t\"prepayments\": \"NOUN\",\n\t\t\t\"fairly\": \"ADV\",\n\t\t\t\"bridge\": \"NOUN\",\n\t\t\t\"marino\": \"PROPN\",\n\t\t\t\"lope\": \"VERB\",\n\t\t\t\"favor\": \"NOUN\",\n\t\t\t\"ironically\": \"ADV\",\n\t\t\t\"implants\": \"NOUN\",\n\t\t\t\"largely\": \"ADV\",\n\t\t\t\"motoko\": \"PROPN\",\n\t\t\t\"rauschenberg\": \"PROPN\",\n\t\t\t\"contagious\": \"ADJ\",\n\t\t\t\"leapt\": \"VERB\",\n\t\t\t\"trashy\": \"ADJ\",\n\t\t\t\"emphatically\": \"ADV\",\n\t\t\t\"soul\": \"NOUN\",\n\t\t\t\"spin\": \"NOUN\",\n\t\t\t\"fingered\": \"VERB\",\n\t\t\t\"neal\": \"PROPN\",\n\t\t\t\"configurations\": \"NOUN\",\n\t\t\t\"lasts\": \"VERB\",\n\t\t\t\"http://www.mikegigi.com/firehole.htm\": \"PROPN\",\n\t\t\t\"ligaments\": \"NOUN\",\n\t\t\t\"tiberias\": \"PROPN\",\n\t\t\t\"microcosm\": \"NOUN\",\n\t\t\t\"explicitly\": \"ADV\",\n\t\t\t\"adverse\": \"ADJ\",\n\t\t\t\"cherokee\": \"PROPN\",\n\t\t\t\"whether\": \"SCONJ\",\n\t\t\t\"noses\": \"NOUN\",\n\t\t\t\"marvelous\": \"ADJ\",\n\t\t\t\"12/26/2000\": \"NUM\",\n\t\t\t\"deli\": \"NOUN\",\n\t\t\t\"bruised\": \"VERB\",\n\t\t\t\"championship\": \"NOUN\",\n\t\t\t\"dodging\": \"VERB\",\n\t\t\t\"leaps\": \"NOUN\",\n\t\t\t\"uvb\": \"NOUN\",\n\t\t\t\"tales\": \"NOUN\",\n\t\t\t\"bisquits\": \"NOUN\",\n\t\t\t\"dispose\": \"VERB\",\n\t\t\t\"oscar\": \"PROPN\",\n\t\t\t\"wrocław\": \"PROPN\",\n\t\t\t\"supervision\": \"NOUN\",\n\t\t\t\"detestable\": \"ADJ\",\n\t\t\t\"fame\": \"NOUN\",\n\t\t\t\"condos\": \"NOUN\",\n\t\t\t\"burdensome\": \"ADJ\",\n\t\t\t\"shovelling\": \"VERB\",\n\t\t\t\"caramel\": \"NOUN\",\n\t\t\t\"evenings\": \"NOUN\",\n\t\t\t\"fighting\": \"VERB\",\n\t\t\t\"poured\": \"VERB\",\n\t\t\t\"aggregators\": \"NOUN\",\n\t\t\t\"willing\": \"ADJ\",\n\t\t\t\"ma\": \"NOUN\",\n\t\t\t\"bonds\": \"NOUN\",\n\t\t\t\"sponsors\": \"VERB\",\n\t\t\t\"sizing\": \"VERB\",\n\t\t\t\"rubbish\": \"NOUN\",\n\t\t\t\"25,000\": \"NUM\",\n\t\t\t\"nuremberg\": \"PROPN\",\n\t\t\t\"twist\": \"NOUN\",\n\t\t\t\"destructive\": \"ADJ\",\n\t\t\t\"annually\": \"ADV\",\n\t\t\t\"purpose\": \"NOUN\",\n\t\t\t\"coppergate\": \"PROPN\",\n\t\t\t\"forethought\": \"NOUN\",\n\t\t\t\"1.65\": \"NUM\",\n\t\t\t\"daunting\": \"ADJ\",\n\t\t\t\"tonne\": \"NOUN\",\n\t\t\t\"1520s\": \"NOUN\",\n\t\t\t\"eol\": \"PROPN\",\n\t\t\t\"tasked\": \"VERB\",\n\t\t\t\"leaning\": \"VERB\",\n\t\t\t\"defiled\": \"VERB\",\n\t\t\t\"113\": \"NUM\",\n\t\t\t\"delusions\": \"NOUN\",\n\t\t\t\"'em\": \"PRON\",\n\t\t\t\"defender\": \"NOUN\",\n\t\t\t\"fuelcell\": \"PROPN\",\n\t\t\t\"signalling\": \"NOUN\",\n\t\t\t\"sudan\": \"PROPN\",\n\t\t\t\"correction\": \"NOUN\",\n\t\t\t\"confuse\": \"VERB\",\n\t\t\t\"understood\": \"VERB\",\n\t\t\t\"lawyers\": \"NOUN\",\n\t\t\t\"grunt\": \"NOUN\",\n\t\t\t\"american\": \"ADJ\",\n\t\t\t\"jokingly\": \"ADV\",\n\t\t\t\"landmines\": \"NOUN\",\n\t\t\t\"guerrillas\": \"NOUN\",\n\t\t\t\"grows\": \"VERB\",\n\t\t\t\"1966\": \"NUM\",\n\t\t\t\"galway\": \"PROPN\",\n\t\t\t\"banishing\": \"NOUN\",\n\t\t\t\"slapped\": \"VERB\",\n\t\t\t\"revenge\": \"NOUN\",\n\t\t\t\"curtain\": \"NOUN\",\n\t\t\t\">----------------------------------------------------------------------------|\": \"PUNCT\",\n\t\t\t\"345\": \"NUM\",\n\t\t\t\"tussock\": \"NOUN\",\n\t\t\t\"neocons\": \"NOUN\",\n\t\t\t\"hell\": \"NOUN\",\n\t\t\t\"engaging\": \"VERB\",\n\t\t\t\"rage\": \"NOUN\",\n\t\t\t\"combs\": \"NOUN\",\n\t\t\t\"frankfurt\": \"PROPN\",\n\t\t\t\"leon.branom@enron.com\": \"PROPN\",\n\t\t\t\"shrapnel\": \"NOUN\",\n\t\t\t\"hamill\": \"PROPN\",\n\t\t\t\"communities\": \"NOUN\",\n\t\t\t\"wop\": \"NOUN\",\n\t\t\t\"diode\": \"NOUN\",\n\t\t\t\"infinite\": \"ADJ\",\n\t\t\t\"pies\": \"NOUN\",\n\t\t\t\"quiktrip\": \"PROPN\",\n\t\t\t\"zach\": \"PROPN\",\n\t\t\t\"dies\": \"VERB\",\n\t\t\t\"scholarly\": \"ADJ\",\n\t\t\t\"sunni\": \"ADJ\",\n\t\t\t\"5:19\": \"NUM\",\n\t\t\t\"purposefully\": \"ADV\",\n\t\t\t\"invite\": \"VERB\",\n\t\t\t\"itza\": \"PROPN\",\n\t\t\t\"hill\": \"NOUN\",\n\t\t\t\"gallie\": \"PROPN\",\n\t\t\t\"mad\": \"ADJ\",\n\t\t\t\"intends\": \"VERB\",\n\t\t\t\"collaborations\": \"NOUN\",\n\t\t\t\"optimization\": \"NOUN\",\n\t\t\t\"risky\": \"ADJ\",\n\t\t\t\"relocating\": \"VERB\",\n\t\t\t\"calaria\": \"PROPN\",\n\t\t\t\"scam\": \"NOUN\",\n\t\t\t\"74419\": \"NUM\",\n\t\t\t\"atmosphere\": \"NOUN\",\n\t\t\t\"poisoning\": \"NOUN\",\n\t\t\t\"spayed\": \"VERB\",\n\t\t\t\"portland\": \"PROPN\",\n\t\t\t\"ryder\": \"PROPN\",\n\t\t\t\"luckily\": \"ADV\",\n\t\t\t\"anasthesia\": \"NOUN\",\n\t\t\t\"totaling\": \"VERB\",\n\t\t\t\"defied\": \"VERB\",\n\t\t\t\"overcharge\": \"VERB\",\n\t\t\t\"thinned\": \"VERB\",\n\t\t\t\"woollies\": \"NOUN\",\n\t\t\t\"phnoum\": \"PROPN\",\n\t\t\t\"marvel\": \"PROPN\",\n\t\t\t\"singular\": \"ADJ\",\n\t\t\t\"1904\": \"NUM\",\n\t\t\t\"referee\": \"NOUN\",\n\t\t\t\"wands\": \"NOUN\",\n\t\t\t\"polykron\": \"PROPN\",\n\t\t\t\"genome\": \"NOUN\",\n\t\t\t\"photoscape\": \"PROPN\",\n\t\t\t\"strasse\": \"PROPN\",\n\t\t\t\"sustained\": \"ADJ\",\n\t\t\t\"jets\": \"NOUN\",\n\t\t\t\"footwear\": \"NOUN\",\n\t\t\t\"windmills\": \"NOUN\",\n\t\t\t\"chao\": \"PROPN\",\n\t\t\t\"rusted\": \"VERB\",\n\t\t\t\"slacken\": \"VERB\",\n\t\t\t\"kazakhstan\": \"PROPN\",\n\t\t\t\"assess\": \"VERB\",\n\t\t\t\"marshes\": \"NOUN\",\n\t\t\t\"hemistichs\": \"NOUN\",\n\t\t\t\"processional\": \"ADJ\",\n\t\t\t\"cooling\": \"NOUN\",\n\t\t\t\"clap\": \"VERB\",\n\t\t\t\"renata\": \"PROPN\",\n\t\t\t\"uv\": \"NOUN\",\n\t\t\t\"complain\": \"VERB\",\n\t\t\t\"seventy\": \"NUM\",\n\t\t\t\"bbc\": \"PROPN\",\n\t\t\t\"trillion\": \"NUM\",\n\t\t\t\"milton\": \"PROPN\",\n\t\t\t\"corssing\": \"NOUN\",\n\t\t\t\"red\": \"ADJ\",\n\t\t\t\"werner\": \"PROPN\",\n\t\t\t\"persuade\": \"VERB\",\n\t\t\t\"ollie\": \"PROPN\",\n\t\t\t\"annex\": \"NOUN\",\n\t\t\t\"extinctions\": \"NOUN\",\n\t\t\t\"ladder\": \"NOUN\",\n\t\t\t\"fulfill\": \"VERB\",\n\t\t\t\"risked\": \"VERB\",\n\t\t\t\"flimsy\": \"ADJ\",\n\t\t\t\"unhooked\": \"VERB\",\n\t\t\t\"immanuel\": \"PROPN\",\n\t\t\t\"valley\": \"NOUN\",\n\t\t\t\"silicone\": \"NOUN\",\n\t\t\t\"x35172\": \"NOUN\",\n\t\t\t\"dumbfounded\": \"ADJ\",\n\t\t\t\"warmth\": \"NOUN\",\n\t\t\t\"system32\": \"NOUN\",\n\t\t\t\"marked\": \"VERB\",\n\t\t\t\"mishandling\": \"NOUN\",\n\t\t\t\"mid-2004\": \"NOUN\",\n\t\t\t\"beguiled\": \"VERB\",\n\t\t\t\"tie\": \"NOUN\",\n\t\t\t\"moses\": \"PROPN\",\n\t\t\t\"southward\": \"ADV\",\n\t\t\t\"distinguished\": \"ADJ\",\n\t\t\t\"qalansia\": \"PROPN\",\n\t\t\t\"definition\": \"NOUN\",\n\t\t\t\"felix\": \"PROPN\",\n\t\t\t\"arafat\": \"PROPN\",\n\t\t\t\"batter\": \"NOUN\",\n\t\t\t\"?!?\": \"PUNCT\",\n\t\t\t\"baffin\": \"PROPN\",\n\t\t\t\"flopped\": \"VERB\",\n\t\t\t\"steadily\": \"ADV\",\n\t\t\t\"pan-democratic\": \"ADJ\",\n\t\t\t\"reads\": \"VERB\",\n\t\t\t\"ray\": \"PROPN\",\n\t\t\t\"crew\": \"NOUN\",\n\t\t\t\"antarctica\": \"PROPN\",\n\t\t\t\"emphasize\": \"VERB\",\n\t\t\t\"mod\": \"PROPN\",\n\t\t\t\"punch\": \"NOUN\",\n\t\t\t\"distinctions\": \"NOUN\",\n\t\t\t\"gaming\": \"NOUN\",\n\t\t\t\"resumption\": \"NOUN\",\n\t\t\t\"educated\": \"VERB\",\n\t\t\t\"03\": \"NUM\",\n\t\t\t\"lunch\": \"NOUN\",\n\t\t\t\"palpitating\": \"VERB\",\n\t\t\t\"04\": \"NUM\",\n\t\t\t\"bdsm\": \"NOUN\",\n\t\t\t\"performed\": \"VERB\",\n\t\t\t\"supporters\": \"NOUN\",\n\t\t\t\"grounded\": \"VERB\",\n\t\t\t\"sausage\": \"NOUN\",\n\t\t\t\"peels\": \"NOUN\",\n\t\t\t\"dunno\": \"VERB\",\n\t\t\t\"scooped\": \"VERB\",\n\t\t\t\"bustle\": \"NOUN\",\n\t\t\t\"attending\": \"VERB\",\n\t\t\t\"paralyzed\": \"VERB\",\n\t\t\t\"polk\": \"PROPN\",\n\t\t\t\"cruden\": \"PROPN\",\n\t\t\t\"indexing\": \"VERB\",\n\t\t\t\"absurd\": \"ADJ\",\n\t\t\t\"matilda\": \"PROPN\",\n\t\t\t\"sussex\": \"NOUN\",\n\t\t\t\"operating\": \"VERB\",\n\t\t\t\"turks\": \"PROPN\",\n\t\t\t\"emona\": \"PROPN\",\n\t\t\t\"venturing\": \"VERB\",\n\t\t\t\"intake\": \"NOUN\",\n\t\t\t\"2.2\": \"NUM\",\n\t\t\t\"juste\": \"PROPN\",\n\t\t\t\"flea\": \"NOUN\",\n\t\t\t\"clones\": \"NOUN\",\n\t\t\t\"rubbed\": \"VERB\",\n\t\t\t\"devries\": \"PROPN\",\n\t\t\t\"duration\": \"NOUN\",\n\t\t\t\"privacy\": \"NOUN\",\n\t\t\t\"appliances\": \"NOUN\",\n\t\t\t\"erased\": \"ADJ\",\n\t\t\t\"pendulum\": \"NOUN\",\n\t\t\t\"hulk\": \"NOUN\",\n\t\t\t\"formalized\": \"VERB\",\n\t\t\t\"fitting\": \"ADJ\",\n\t\t\t\"http://loveallpeople.org/usconstitutiona.txt\": \"PROPN\",\n\t\t\t\"com\": \"NOUN\",\n\t\t\t\"accomplices\": \"NOUN\",\n\t\t\t\"salmon\": \"NOUN\",\n\t\t\t\"900\": \"NUM\",\n\t\t\t\"atoms\": \"NOUN\",\n\t\t\t\"udcs\": \"NOUN\",\n\t\t\t\"naked\": \"ADJ\",\n\t\t\t\"lipton\": \"PROPN\",\n\t\t\t\"interfere\": \"VERB\",\n\t\t\t\"scientific\": \"ADJ\",\n\t\t\t\"ideas\": \"NOUN\",\n\t\t\t\"pistorius\": \"PROPN\",\n\t\t\t\"derivatives\": \"NOUN\",\n\t\t\t\"might\": \"AUX\",\n\t\t\t\"problems\": \"NOUN\",\n\t\t\t\"specimen\": \"NOUN\",\n\t\t\t\"mesmerized\": \"VERB\",\n\t\t\t\"bernardini\": \"PROPN\",\n\t\t\t\"acidity\": \"NOUN\",\n\t\t\t\"preparing\": \"VERB\",\n\t\t\t\"baling\": \"VERB\",\n\t\t\t\"boxing\": \"NOUN\",\n\t\t\t\"sanctified\": \"PROPN\",\n\t\t\t\"min\": \"NOUN\",\n\t\t\t\"suspense\": \"NOUN\",\n\t\t\t\"authorities\": \"NOUN\",\n\t\t\t\"fluffy\": \"ADJ\",\n\t\t\t\"co\": \"PROPN\",\n\t\t\t\"including\": \"VERB\",\n\t\t\t\"chromosome\": \"NOUN\",\n\t\t\t\"disappointed\": \"ADJ\",\n\t\t\t\"'\": \"PUNCT\",\n\t\t\t\"persistency\": \"NOUN\",\n\t\t\t\"uncoiled\": \"ADJ\",\n\t\t\t\"gels\": \"NOUN\",\n\t\t\t\"roundtable\": \"NOUN\",\n\t\t\t\"imitation\": \"NOUN\",\n\t\t\t\"gloomy\": \"ADJ\",\n\t\t\t\"3\": \"NUM\",\n\t\t\t\"nb\": \"PROPN\",\n\t\t\t\"curfew\": \"NOUN\",\n\t\t\t\"complained\": \"VERB\",\n\t\t\t\"regimen\": \"NOUN\",\n\t\t\t\"confronted\": \"VERB\",\n\t\t\t\"government\": \"NOUN\",\n\t\t\t\"tarantula\": \"NOUN\",\n\t\t\t\"finns\": \"NOUN\",\n\t\t\t\"misstated\": \"VERB\",\n\t\t\t\"earthworms\": \"NOUN\",\n\t\t\t\"number\": \"NOUN\",\n\t\t\t\"mouthing\": \"ADJ\",\n\t\t\t\"laborer\": \"NOUN\",\n\t\t\t\"audiobooks\": \"NOUN\",\n\t\t\t\"referencing\": \"VERB\",\n\t\t\t\"wtc\": \"PROPN\",\n\t\t\t\"leader\": \"NOUN\",\n\t\t\t\"antifreeze\": \"NOUN\",\n\t\t\t\"mapplethorpe\": \"PROPN\",\n\t\t\t\"grayish-whitish\": \"ADJ\",\n\t\t\t\"sandalwood\": \"NOUN\",\n\t\t\t\"tributaries\": \"NOUN\",\n\t\t\t\"slush\": \"NOUN\",\n\t\t\t\"archibald\": \"PROPN\",\n\t\t\t\"manned\": \"ADJ\",\n\t\t\t\"intolerance\": \"NOUN\",\n\t\t\t\"1872\": \"NUM\",\n\t\t\t\"hierarchies\": \"NOUN\",\n\t\t\t\"palestinian\": \"ADJ\",\n\t\t\t\"problem\": \"NOUN\",\n\t\t\t\"whittle\": \"VERB\",\n\t\t\t\"mandil\": \"PROPN\",\n\t\t\t\"destroy\": \"VERB\",\n\t\t\t\"demands\": \"NOUN\",\n\t\t\t\"presenting\": \"VERB\",\n\t\t\t\"plus\": \"CCONJ\",\n\t\t\t\"dusty\": \"ADJ\",\n\t\t\t\"institution\": \"NOUN\",\n\t\t\t\"gratefully\": \"ADV\",\n\t\t\t\"indicator\": \"NOUN\",\n\t\t\t\"desk\": \"NOUN\",\n\t\t\t\"openai\": \"PROPN\",\n\t\t\t\"spanning\": \"VERB\",\n\t\t\t\"threatened\": \"VERB\",\n\t\t\t\"cherry\": \"PROPN\",\n\t\t\t\"chin\": \"PROPN\",\n\t\t\t\"depressed\": \"ADJ\",\n\t\t\t\"8.25\": \"NUM\",\n\t\t\t\"lemony\": \"ADJ\",\n\t\t\t\"omnibus\": \"NOUN\",\n\t\t\t\"scandals\": \"NOUN\",\n\t\t\t\"botanicals\": \"NOUN\",\n\t\t\t\"atmospheric\": \"ADJ\",\n\t\t\t\"tests\": \"NOUN\",\n\t\t\t\"implication\": \"NOUN\",\n\t\t\t\"ristorante\": \"PROPN\",\n\t\t\t\"borrowings\": \"NOUN\",\n\t\t\t\"children\": \"NOUN\",\n\t\t\t\"scottish\": \"ADJ\",\n\t\t\t\"revenues\": \"NOUN\",\n\t\t\t\"ctrl–v\": \"PROPN\",\n\t\t\t\"pgt\": \"NOUN\",\n\t\t\t\"st.\": \"PROPN\",\n\t\t\t\"genders\": \"NOUN\",\n\t\t\t\"conformity\": \"NOUN\",\n\t\t\t\"dueled\": \"VERB\",\n\t\t\t\"rip\": \"NOUN\",\n\t\t\t\"ss-n-22\": \"PROPN\",\n\t\t\t\"east\": \"PROPN\",\n\t\t\t\"excerpts\": \"NOUN\",\n\t\t\t\"chart\": \"NOUN\",\n\t\t\t\"oglethorpe\": \"PROPN\",\n\t\t\t\"ranged\": \"VERB\",\n\t\t\t\"pressed\": \"VERB\",\n\t\t\t\"snowboard\": \"NOUN\",\n\t\t\t\"chemicals\": \"NOUN\",\n\t\t\t\"faretta\": \"PROPN\",\n\t\t\t\"doubtless\": \"ADV\",\n\t\t\t\"bumping\": \"VERB\",\n\t\t\t\"solar\": \"ADJ\",\n\t\t\t\"decking\": \"NOUN\",\n\t\t\t\"77030-2707\": \"NUM\",\n\t\t\t\"dammit\": \"INTJ\",\n\t\t\t\"silkie\": \"NOUN\",\n\t\t\t\"franc\": \"PROPN\",\n\t\t\t\"punctuation\": \"NOUN\",\n\t\t\t\"pjm\": \"PROPN\",\n\t\t\t\"http://news.yahoo.com/nestl-purina-releases-commercial-aimed-dogs-183443091.html\": \"PROPN\",\n\t\t\t\"somewhere\": \"ADV\",\n\t\t\t\"muttered\": \"VERB\",\n\t\t\t\"eighties\": \"NOUN\",\n\t\t\t\"rebels\": \"NOUN\",\n\t\t\t\"04:13\": \"NUM\",\n\t\t\t\"fossil\": \"NOUN\",\n\t\t\t\"galileo\": \"PROPN\",\n\t\t\t\"contaminated\": \"VERB\",\n\t\t\t\"mist\": \"NOUN\",\n\t\t\t\"hoecker\": \"PROPN\",\n\t\t\t\"scaly\": \"ADJ\",\n\t\t\t\"awash\": \"ADJ\",\n\t\t\t\"peaks\": \"NOUN\",\n\t\t\t\"formalin\": \"NOUN\",\n\t\t\t\"kidnappings\": \"NOUN\",\n\t\t\t\"chatter\": \"NOUN\",\n\t\t\t\"×\": \"SYM\",\n\t\t\t\"integrates\": \"VERB\",\n\t\t\t\"emissions\": \"NOUN\",\n\t\t\t\"shuffling\": \"ADJ\",\n\t\t\t\"orginals\": \"NOUN\",\n\t\t\t\"sauces\": \"NOUN\",\n\t\t\t\"misunderstood\": \"VERB\",\n\t\t\t\"leite\": \"PROPN\",\n\t\t\t\"redeeming\": \"ADJ\",\n\t\t\t\"full-length\": \"ADJ\",\n\t\t\t\"palestine\": \"PROPN\",\n\t\t\t\"shorter\": \"ADJ\",\n\t\t\t\"resupply\": \"NOUN\",\n\t\t\t\"non-european\": \"ADJ\",\n\t\t\t\"waging\": \"VERB\",\n\t\t\t\"1965\": \"NUM\",\n\t\t\t\"somethin\": \"PRON\",\n\t\t\t\"principles\": \"NOUN\",\n\t\t\t\"http://youtube.com/watch?v=d46_ctqdmi4\": \"PROPN\",\n\t\t\t\"broomstick\": \"NOUN\",\n\t\t\t\"biblical\": \"ADJ\",\n\t\t\t\"polka\": \"NOUN\",\n\t\t\t\"metro.us\": \"PROPN\",\n\t\t\t\"postive\": \"ADJ\",\n\t\t\t\"disarm\": \"VERB\",\n\t\t\t\"12:45\": \"NUM\",\n\t\t\t\"interface\": \"NOUN\",\n\t\t\t\"tone\": \"NOUN\",\n\t\t\t\"employer\": \"NOUN\",\n\t\t\t\"severely\": \"ADV\",\n\t\t\t\"202.739.0134\": \"NUM\",\n\t\t\t\"armogida\": \"PROPN\",\n\t\t\t\"delusion\": \"NOUN\",\n\t\t\t\"wai\": \"NOUN\",\n\t\t\t\"baskets\": \"NOUN\",\n\t\t\t\"moorland\": \"NOUN\",\n\t\t\t\"bearing\": \"VERB\",\n\t\t\t\"explode\": \"VERB\",\n\t\t\t\"fraction\": \"NOUN\",\n\t\t\t\"husband\": \"NOUN\",\n\t\t\t\"05/17/99\": \"NUM\",\n\t\t\t\"503/464-7927\": \"NUM\",\n\t\t\t\"main\": \"ADJ\",\n\t\t\t\"mcneally\": \"PROPN\",\n\t\t\t\"kiddies\": \"NOUN\",\n\t\t\t\"stricken\": \"ADJ\",\n\t\t\t\"punchline\": \"NOUN\",\n\t\t\t\"vigor\": \"NOUN\",\n\t\t\t\"shoppers\": \"NOUN\",\n\t\t\t\"escape\": \"VERB\",\n\t\t\t\"9000\": \"NUM\",\n\t\t\t\"bust\": \"VERB\",\n\t\t\t\"observant\": \"ADJ\",\n\t\t\t\"350,000\": \"NUM\",\n\t\t\t\"appropriations\": \"NOUN\",\n\t\t\t\"brinkmanship\": \"NOUN\",\n\t\t\t\"teco\": \"PROPN\",\n\t\t\t\"finches\": \"NOUN\",\n\t\t\t\"biologically\": \"ADV\",\n\t\t\t\"tabennese\": \"PROPN\",\n\t\t\t\"coup-d'etat\": \"NOUN\",\n\t\t\t\"fuels\": \"NOUN\",\n\t\t\t\"excavations\": \"NOUN\",\n\t\t\t\"filmmaker\": \"NOUN\",\n\t\t\t\"capsules\": \"NOUN\",\n\t\t\t\"brilliantly\": \"ADV\",\n\t\t\t\"checkerspot\": \"NOUN\",\n\t\t\t\"01:39:56\": \"NUM\",\n\t\t\t\"partnered\": \"VERB\",\n\t\t\t\"net\": \"NOUN\",\n\t\t\t\"fehl\": \"PROPN\",\n\t\t\t\"mcinnis\": \"PROPN\",\n\t\t\t\"trifurcation\": \"NOUN\",\n\t\t\t\"novel\": \"NOUN\",\n\t\t\t\"s-\": \"INTJ\",\n\t\t\t\"lavan\": \"PROPN\",\n\t\t\t\"1936\": \"NUM\",\n\t\t\t\"mumbai\": \"PROPN\",\n\t\t\t\"parents\": \"NOUN\",\n\t\t\t\"2710\": \"NUM\",\n\t\t\t\"settled\": \"VERB\",\n\t\t\t\"crazier\": \"ADJ\",\n\t\t\t\"pricing\": \"NOUN\",\n\t\t\t\"mary\": \"PROPN\",\n\t\t\t\"meiko\": \"PROPN\",\n\t\t\t\"siwu\": \"PROPN\",\n\t\t\t\"overcoming\": \"VERB\",\n\t\t\t\"hazim\": \"PROPN\",\n\t\t\t\"highlands\": \"NOUN\",\n\t\t\t\"submersion\": \"NOUN\",\n\t\t\t\"kindergarten\": \"NOUN\",\n\t\t\t\"blows\": \"VERB\",\n\t\t\t\"substantially\": \"ADV\",\n\t\t\t\"applies\": \"VERB\",\n\t\t\t\"1400\": \"NUM\",\n\t\t\t\"16/11/2004\": \"NUM\",\n\t\t\t\"covid\": \"PROPN\",\n\t\t\t\"visualize\": \"VERB\",\n\t\t\t\":/\": \"SYM\",\n\t\t\t\"swiffer\": \"PROPN\",\n\t\t\t\"calligraphic\": \"ADJ\",\n\t\t\t\"apparently\": \"ADV\",\n\t\t\t\"omnipotent\": \"ADJ\",\n\t\t\t\"flavorful\": \"ADJ\",\n\t\t\t\"comex\": \"PROPN\",\n\t\t\t\"stunning\": \"ADJ\",\n\t\t\t\"genotype\": \"NOUN\",\n\t\t\t\"conservation\": \"NOUN\",\n\t\t\t\"half\": \"NOUN\",\n\t\t\t\"morris\": \"PROPN\",\n\t\t\t\"shrodinger\": \"PROPN\",\n\t\t\t\"pixar\": \"PROPN\",\n\t\t\t\"backward\": \"ADV\",\n\t\t\t\"mandelstams\": \"PROPN\",\n\t\t\t\"boast\": \"VERB\",\n\t\t\t\"dumas\": \"PROPN\",\n\t\t\t\"glacier\": \"PROPN\",\n\t\t\t\"picked\": \"VERB\",\n\t\t\t\"femoral\": \"ADJ\",\n\t\t\t\"predestined\": \"VERB\",\n\t\t\t\"canoeing\": \"VERB\",\n\t\t\t\"antecedent\": \"NOUN\",\n\t\t\t\"indirectly\": \"ADV\",\n\t\t\t\"outs\": \"NOUN\",\n\t\t\t\"vacuum\": \"NOUN\",\n\t\t\t\"sepulchres\": \"NOUN\",\n\t\t\t\"refund\": \"NOUN\",\n\t\t\t\"a19\": \"PROPN\",\n\t\t\t\"machine-like\": \"ADJ\",\n\t\t\t\"decoupled\": \"VERB\",\n\t\t\t\"realms\": \"NOUN\",\n\t\t\t\"snails\": \"NOUN\",\n\t\t\t\"basking\": \"NOUN\",\n\t\t\t\"virility\": \"NOUN\",\n\t\t\t\"snapshot\": \"NOUN\",\n\t\t\t\"impunity\": \"NOUN\",\n\t\t\t\"rssc.com\": \"PROPN\",\n\t\t\t\"islam\": \"PROPN\",\n\t\t\t\"midst\": \"NOUN\",\n\t\t\t\"litten\": \"VERB\",\n\t\t\t\"originally\": \"ADV\",\n\t\t\t\"assigned\": \"VERB\",\n\t\t\t\"dinner\": \"NOUN\",\n\t\t\t\"efficiency\": \"NOUN\",\n\t\t\t\"anchor\": \"NOUN\",\n\t\t\t\"worn\": \"VERB\",\n\t\t\t\"#logos\": \"PROPN\",\n\t\t\t\"presently\": \"ADV\",\n\t\t\t\"sands\": \"PROPN\",\n\t\t\t\"republics\": \"NOUN\",\n\t\t\t\"petco\": \"PROPN\",\n\t\t\t\"atal\": \"PROPN\",\n\t\t\t\"stubley\": \"PROPN\",\n\t\t\t\"affirmative\": \"ADJ\",\n\t\t\t\"scripture\": \"PROPN\",\n\t\t\t\"femur\": \"NOUN\",\n\t\t\t\"padded\": \"ADJ\",\n\t\t\t\"expired\": \"ADJ\",\n\t\t\t\"fullest\": \"ADJ\",\n\t\t\t\"minster\": \"PROPN\",\n\t\t\t\"circular\": \"ADJ\",\n\t\t\t\"http://www.wyndham.com/washington_dc/default.cfm\": \"PROPN\",\n\t\t\t\"45r.p.m.\": \"NOUN\",\n\t\t\t\"generative\": \"ADJ\",\n\t\t\t\"adequate\": \"ADJ\",\n\t\t\t\"greenery\": \"NOUN\",\n\t\t\t\"procreating\": \"VERB\",\n\t\t\t\"dolomite\": \"NOUN\",\n\t\t\t\"authoring\": \"ADJ\",\n\t\t\t\"draft\": \"NOUN\",\n\t\t\t\"caesarea\": \"PROPN\",\n\t\t\t\"surprisingly\": \"ADV\",\n\t\t\t\"dublin\": \"PROPN\",\n\t\t\t\"snowdon\": \"PROPN\",\n\t\t\t\"hayek\": \"PROPN\",\n\t\t\t\"beast\": \"PROPN\",\n\t\t\t\"roots\": \"NOUN\",\n\t\t\t\"erin\": \"PROPN\",\n\t\t\t\"bataan\": \"PROPN\",\n\t\t\t\"non-personal\": \"ADJ\",\n\t\t\t\"1836\": \"NUM\",\n\t\t\t\"substituting\": \"VERB\",\n\t\t\t\"sstaff\": \"NOUN\",\n\t\t\t\"flapping\": \"VERB\",\n\t\t\t\"prematurely\": \"ADV\",\n\t\t\t\"interns\": \"NOUN\",\n\t\t\t\"315-460-3349\": \"NUM\",\n\t\t\t\"returning\": \"VERB\",\n\t\t\t\"capitalization\": \"NOUN\",\n\t\t\t\"136\": \"NUM\",\n\t\t\t\"hiv\": \"PROPN\",\n\t\t\t\"outermost\": \"ADJ\",\n\t\t\t\"aqueducts\": \"NOUN\",\n\t\t\t\"invoking\": \"VERB\",\n\t\t\t\"dthat\": \"DET\",\n\t\t\t\"whasssup\": \"INTJ\",\n\t\t\t\"atkins\": \"PROPN\",\n\t\t\t\"shadows\": \"NOUN\",\n\t\t\t\"generations\": \"NOUN\",\n\t\t\t\"envelops\": \"VERB\",\n\t\t\t\"barrels\": \"NOUN\",\n\t\t\t\"chatting\": \"VERB\",\n\t\t\t\"ideals\": \"NOUN\",\n\t\t\t\"biographical\": \"ADJ\",\n\t\t\t\"collusion\": \"NOUN\",\n\t\t\t\"biomed.taiwan\": \"PROPN\",\n\t\t\t\"submitted\": \"VERB\",\n\t\t\t\"poised\": \"VERB\",\n\t\t\t\"restrictions\": \"NOUN\",\n\t\t\t\"played\": \"VERB\",\n\t\t\t\"un\": \"PROPN\",\n\t\t\t\"ill-placed\": \"ADJ\",\n\t\t\t\"--------------------------------------------------\": \"PUNCT\",\n\t\t\t\"contain\": \"VERB\",\n\t\t\t\"sahaf\": \"PROPN\",\n\t\t\t\"rub\": \"VERB\",\n\t\t\t\"focus\": \"NOUN\",\n\t\t\t\"are\": \"AUX\",\n\t\t\t\"boring\": \"ADJ\",\n\t\t\t\"twelve\": \"NUM\",\n\t\t\t\"3067\": \"NUM\",\n\t\t\t\"deep\": \"ADJ\",\n\t\t\t\":.\": \"PUNCT\",\n\t\t\t\"crimea\": \"PROPN\",\n\t\t\t\"edition\": \"NOUN\",\n\t\t\t\"1588\": \"NUM\",\n\t\t\t\"alacrity\": \"NOUN\",\n\t\t\t\"clifford\": \"PROPN\",\n\t\t\t\"confessed\": \"VERB\",\n\t\t\t\"hurdles\": \"NOUN\",\n\t\t\t\"harley\": \"PROPN\",\n\t\t\t\"knowledge\": \"NOUN\",\n\t\t\t\"debate\": \"NOUN\",\n\t\t\t\"sliced\": \"VERB\",\n\t\t\t\"surrender\": \"NOUN\",\n\t\t\t\"quitting\": \"VERB\",\n\t\t\t\"shake\": \"VERB\",\n\t\t\t\"obligation\": \"NOUN\",\n\t\t\t\"dude\": \"NOUN\",\n\t\t\t\"4.5\": \"NUM\",\n\t\t\t\"dvd\": \"NOUN\",\n\t\t\t\"oracle\": \"PROPN\",\n\t\t\t\"collars\": \"NOUN\",\n\t\t\t\"digital\": \"ADJ\",\n\t\t\t\"beyond\": \"ADP\",\n\t\t\t\"sunscreen\": \"NOUN\",\n\t\t\t\"underlined\": \"VERB\",\n\t\t\t\"pilgrimage\": \"NOUN\",\n\t\t\t\"mukhabarat\": \"PROPN\",\n\t\t\t\"fleshy\": \"ADJ\",\n\t\t\t\"grasp\": \"VERB\",\n\t\t\t\"airing\": \"VERB\",\n\t\t\t\"dos\": \"NOUN\",\n\t\t\t\"sabeer\": \"PROPN\",\n\t\t\t\"deputy\": \"NOUN\",\n\t\t\t\"magnet\": \"NOUN\",\n\t\t\t\"virtues\": \"NOUN\",\n\t\t\t\"713/646-6505\": \"NUM\",\n\t\t\t\"refiners\": \"NOUN\",\n\t\t\t\"witting\": \"ADJ\",\n\t\t\t\"permanent\": \"ADJ\",\n\t\t\t\"wallowing\": \"VERB\",\n\t\t\t\"97th\": \"ADJ\",\n\t\t\t\"chains\": \"NOUN\",\n\t\t\t\"myriad\": \"ADJ\",\n\t\t\t\"8:35\": \"NUM\",\n\t\t\t\"ἱερώνυμος\": \"PROPN\",\n\t\t\t\"overlooking\": \"VERB\",\n\t\t\t\"react\": \"VERB\",\n\t\t\t\"stretchy\": \"ADJ\",\n\t\t\t\"investigator\": \"NOUN\",\n\t\t\t\"allowance\": \"PROPN\",\n\t\t\t\"boulevards\": \"NOUN\",\n\t\t\t\"dawa\": \"PROPN\",\n\t\t\t\"growled\": \"VERB\",\n\t\t\t\"illustrate\": \"VERB\",\n\t\t\t\"starless\": \"ADJ\",\n\t\t\t\"detour\": \"NOUN\",\n\t\t\t\"ps\": \"NOUN\",\n\t\t\t\"victims\": \"NOUN\",\n\t\t\t\"scored\": \"VERB\",\n\t\t\t\"stated\": \"VERB\",\n\t\t\t\"how\": \"ADV\",\n\t\t\t\"suggestion\": \"NOUN\",\n\t\t\t\"obama\": \"PROPN\",\n\t\t\t\"darkening\": \"VERB\",\n\t\t\t\"outcrops\": \"NOUN\",\n\t\t\t\"lacking\": \"VERB\",\n\t\t\t\"eboracum\": \"PROPN\",\n\t\t\t\"vic\": \"PROPN\",\n\t\t\t\"santos\": \"PROPN\",\n\t\t\t\"asterisk\": \"NOUN\",\n\t\t\t\"sussman\": \"PROPN\",\n\t\t\t\"sweetser\": \"PROPN\",\n\t\t\t\"liz\": \"PROPN\",\n\t\t\t\"multi-millionnaires\": \"NOUN\",\n\t\t\t\"willingness\": \"NOUN\",\n\t\t\t\"daydreaming\": \"VERB\",\n\t\t\t\"solitude\": \"NOUN\",\n\t\t\t\"2.\": \"NUM\",\n\t\t\t\"refugees\": \"NOUN\",\n\t\t\t\"lao\": \"PROPN\",\n\t\t\t\"plurality\": \"NOUN\",\n\t\t\t\"empress\": \"PROPN\",\n\t\t\t\"course\": \"NOUN\",\n\t\t\t\"burden\": \"NOUN\",\n\t\t\t\"most\": \"ADV\",\n\t\t\t\"hates\": \"VERB\",\n\t\t\t\"api\": \"NOUN\",\n\t\t\t\"bechtel\": \"PROPN\",\n\t\t\t\"manifold\": \"NOUN\",\n\t\t\t\"spalding\": \"PROPN\",\n\t\t\t\"savings\": \"NOUN\",\n\t\t\t\"geopolitical\": \"ADJ\",\n\t\t\t\"classical\": \"ADJ\",\n\t\t\t\"constitutes\": \"VERB\",\n\t\t\t\"tables\": \"NOUN\",\n\t\t\t\"addicts\": \"NOUN\",\n\t\t\t\"rumours\": \"NOUN\",\n\t\t\t\"flabby\": \"ADJ\",\n\t\t\t\"gleaming\": \"VERB\",\n\t\t\t\"eureka\": \"PROPN\",\n\t\t\t\"unmanned\": \"ADJ\",\n\t\t\t\"ponder\": \"VERB\",\n\t\t\t\"sympathize\": \"VERB\",\n\t\t\t\"painless\": \"ADJ\",\n\t\t\t\"consciously\": \"ADV\",\n\t\t\t\"dems\": \"PROPN\",\n\t\t\t\"afford\": \"VERB\",\n\t\t\t\"tailor\": \"NOUN\",\n\t\t\t\"burrowing\": \"VERB\",\n\t\t\t\"elder\": \"ADJ\",\n\t\t\t\"justice\": \"NOUN\",\n\t\t\t\"aplo.\": \"NOUN\",\n\t\t\t\"lodging\": \"NOUN\",\n\t\t\t\"01:14\": \"NUM\",\n\t\t\t\"illusion\": \"NOUN\",\n\t\t\t\"depths\": \"NOUN\",\n\t\t\t\"sergeant\": \"NOUN\",\n\t\t\t\"litely\": \"ADV\",\n\t\t\t\"reich\": \"PROPN\",\n\t\t\t\"ronald\": \"PROPN\",\n\t\t\t\"ach\": \"INTJ\",\n\t\t\t\"properties\": \"NOUN\",\n\t\t\t\"festivals\": \"NOUN\",\n\t\t\t\"frowns\": \"NOUN\",\n\t\t\t\"ram\": \"PROPN\",\n\t\t\t\"joyous\": \"ADJ\",\n\t\t\t\"prayerful\": \"ADJ\",\n\t\t\t\"chanukah\": \"PROPN\",\n\t\t\t\"icc\": \"NOUN\",\n\t\t\t\"delicate\": \"ADJ\",\n\t\t\t\"mhm\": \"INTJ\",\n\t\t\t\"mistrust\": \"NOUN\",\n\t\t\t\"lsd\": \"NOUN\",\n\t\t\t\"gonzales\": \"PROPN\",\n\t\t\t\"tatum\": \"PROPN\",\n\t\t\t\"chimed\": \"VERB\",\n\t\t\t\"punitive\": \"ADJ\",\n\t\t\t\"den\": \"PROPN\",\n\t\t\t\"scowl\": \"NOUN\",\n\t\t\t\"kawashima\": \"PROPN\",\n\t\t\t\"invovled\": \"VERB\",\n\t\t\t\"humvees\": \"PROPN\",\n\t\t\t\"gulliver\": \"PROPN\",\n\t\t\t\"precedence\": \"NOUN\",\n\t\t\t\"amnesties\": \"NOUN\",\n\t\t\t\"enjoyment\": \"NOUN\",\n\t\t\t\"620-294-4000\": \"NUM\",\n\t\t\t\"traits\": \"NOUN\",\n\t\t\t\"reactive\": \"ADJ\",\n\t\t\t\"1787\": \"NUM\",\n\t\t\t\"projects\": \"NOUN\",\n\t\t\t\"separated\": \"VERB\",\n\t\t\t\"nail\": \"NOUN\",\n\t\t\t\"philipinos\": \"PROPN\",\n\t\t\t\"brit\": \"PROPN\",\n\t\t\t\"ncrc4me\": \"PROPN\",\n\t\t\t\"wired\": \"VERB\",\n\t\t\t\"exclaimed\": \"VERB\",\n\t\t\t\"nordau\": \"PROPN\",\n\t\t\t\"hbs\": \"PROPN\",\n\t\t\t\"trundling\": \"VERB\",\n\t\t\t\"diane\": \"PROPN\",\n\t\t\t\"!?\": \"PUNCT\",\n\t\t\t\"snippets\": \"NOUN\",\n\t\t\t\"tse\": \"PROPN\",\n\t\t\t\"spit\": \"NOUN\",\n\t\t\t\"twigs\": \"NOUN\",\n\t\t\t\"alzheimer\": \"PROPN\",\n\t\t\t\"adoption\": \"NOUN\",\n\t\t\t\"terrorist\": \"ADJ\",\n\t\t\t\"tame\": \"VERB\",\n\t\t\t\"vile\": \"ADJ\",\n\t\t\t\"gate\": \"NOUN\",\n\t\t\t\"inhalation\": \"NOUN\",\n\t\t\t\"counties\": \"NOUN\",\n\t\t\t\"sternly\": \"ADV\",\n\t\t\t\"kit\": \"NOUN\",\n\t\t\t\"unlce\": \"NOUN\",\n\t\t\t\"gods\": \"NOUN\",\n\t\t\t\"libel\": \"NOUN\",\n\t\t\t\"03:00\": \"NUM\",\n\t\t\t\"associated\": \"VERB\",\n\t\t\t\"nose\": \"NOUN\",\n\t\t\t\"hogtied\": \"VERB\",\n\t\t\t\"seller\": \"NOUN\",\n\t\t\t\"wintering\": \"VERB\",\n\t\t\t\"qualifications\": \"NOUN\",\n\t\t\t\"stuffs\": \"NOUN\",\n\t\t\t\"be\": \"AUX\",\n\t\t\t\"!!!!!!!!!!!!\": \"PUNCT\",\n\t\t\t\"barbuda\": \"PROPN\",\n\t\t\t\"establish\": \"VERB\",\n\t\t\t\"tenet\": \"NOUN\",\n\t\t\t\"laplace\": \"PROPN\",\n\t\t\t\"handcraft\": \"NOUN\",\n\t\t\t\"bob\": \"PROPN\",\n\t\t\t\"tract\": \"NOUN\",\n\t\t\t\"evans\": \"PROPN\",\n\t\t\t\"23.6\": \"NUM\",\n\t\t\t\"aner\": \"PROPN\",\n\t\t\t\"pawn\": \"VERB\",\n\t\t\t\"ripple\": \"PROPN\",\n\t\t\t\"4350\": \"NUM\",\n\t\t\t\"puffing\": \"NOUN\",\n\t\t\t\"connections\": \"NOUN\",\n\t\t\t\"houses\": \"NOUN\",\n\t\t\t\"stadiums\": \"NOUN\",\n\t\t\t\"n.d.\": \"NOUN\",\n\t\t\t\"translates\": \"VERB\",\n\t\t\t\"shackled\": \"VERB\",\n\t\t\t\"inad\": \"PROPN\",\n\t\t\t\"atrocity\": \"NOUN\",\n\t\t\t\"revenue\": \"NOUN\",\n\t\t\t\"teaches\": \"VERB\",\n\t\t\t\"ineos.xls\": \"NOUN\",\n\t\t\t\"texture\": \"NOUN\",\n\t\t\t\"ramtanu\": \"PROPN\",\n\t\t\t\"hugs\": \"NOUN\",\n\t\t\t\"applied\": \"VERB\",\n\t\t\t\"momentum\": \"NOUN\",\n\t\t\t\"uncommon\": \"ADJ\",\n\t\t\t\"finn\": \"PROPN\",\n\t\t\t\"stolmy\": \"PROPN\",\n\t\t\t\"rover\": \"PROPN\",\n\t\t\t\"labs\": \"NOUN\",\n\t\t\t\"trireme\": \"NOUN\",\n\t\t\t\"easy\": \"ADJ\",\n\t\t\t\"warehouse\": \"NOUN\",\n\t\t\t\"breeds\": \"NOUN\",\n\t\t\t\"celebrities\": \"NOUN\",\n\t\t\t\"outing\": \"NOUN\",\n\t\t\t\"grizzly\": \"ADJ\",\n\t\t\t\"hypnosis\": \"NOUN\",\n\t\t\t\"sexually\": \"ADV\",\n\t\t\t\"disintegrate\": \"VERB\",\n\t\t\t\"unprecedented\": \"ADJ\",\n\t\t\t\"steering\": \"NOUN\",\n\t\t\t\"deliveries\": \"NOUN\",\n\t\t\t\"somehow\": \"ADV\",\n\t\t\t\"832.676.1329\": \"NUM\",\n\t\t\t\"summoned\": \"VERB\",\n\t\t\t\"litter\": \"NOUN\",\n\t\t\t\"old-maid\": \"NOUN\",\n\t\t\t\"opportunities\": \"NOUN\",\n\t\t\t\"levico\": \"PROPN\",\n\t\t\t\"gerbil\": \"NOUN\",\n\t\t\t\"wheels\": \"NOUN\",\n\t\t\t\"plywood\": \"NOUN\",\n\t\t\t\"miles\": \"NOUN\",\n\t\t\t\"additions\": \"NOUN\",\n\t\t\t\"terms\": \"NOUN\",\n\t\t\t\"puncturing\": \"VERB\",\n\t\t\t\"transform\": \"VERB\",\n\t\t\t\"rusty\": \"ADJ\",\n\t\t\t\"seventeenth\": \"ADJ\",\n\t\t\t\"mogadishu\": \"PROPN\",\n\t\t\t\"squirm\": \"VERB\",\n\t\t\t\"charm\": \"NOUN\",\n\t\t\t\"reachable\": \"ADJ\",\n\t\t\t\"exercising\": \"NOUN\",\n\t\t\t\"parakeets\": \"NOUN\",\n\t\t\t\"trams\": \"NOUN\",\n\t\t\t\"h=guys\": \"NOUN\",\n\t\t\t\"alastair\": \"PROPN\",\n\t\t\t\"cold\": \"ADJ\",\n\t\t\t\"torsional\": \"ADJ\",\n\t\t\t\"repeated\": \"VERB\",\n\t\t\t\"orienting\": \"VERB\",\n\t\t\t\"worldly\": \"ADJ\",\n\t\t\t\"bordered\": \"VERB\",\n\t\t\t\"chi-wai\": \"PROPN\",\n\t\t\t\"bruyne\": \"PROPN\",\n\t\t\t\"kicks\": \"VERB\",\n\t\t\t\"insistent\": \"ADJ\",\n\t\t\t\"styled\": \"VERB\",\n\t\t\t\"three\": \"NUM\",\n\t\t\t\"pleasing\": \"ADJ\",\n\t\t\t\"pedestal\": \"NOUN\",\n\t\t\t\"renigged\": \"VERB\",\n\t\t\t\"dredge\": \"VERB\",\n\t\t\t\"galleryfurniture.com\": \"PROPN\",\n\t\t\t\"backwards\": \"ADV\",\n\t\t\t\"reminding\": \"VERB\",\n\t\t\t\"symbolism\": \"NOUN\",\n\t\t\t\"rams\": \"PROPN\",\n\t\t\t\"built-in\": \"ADJ\",\n\t\t\t\"doctorate\": \"NOUN\",\n\t\t\t\"sparkling\": \"ADJ\",\n\t\t\t\"unsuspecting\": \"ADJ\",\n\t\t\t\"20th\": \"ADJ\",\n\t\t\t\"quick\": \"ADJ\",\n\t\t\t\"raining\": \"VERB\",\n\t\t\t\"vulnerabilities\": \"NOUN\",\n\t\t\t\"meander\": \"VERB\",\n\t\t\t\"compatible\": \"ADJ\",\n\t\t\t\"woke\": \"VERB\",\n\t\t\t\"aug.\": \"PROPN\",\n\t\t\t\".322\": \"NUM\",\n\t\t\t\"scented\": \"ADJ\",\n\t\t\t\"democratically\": \"ADV\",\n\t\t\t\"forecasts\": \"NOUN\",\n\t\t\t\"forthwith\": \"ADV\",\n\t\t\t\"apartments\": \"NOUN\",\n\t\t\t\"screw\": \"NOUN\",\n\t\t\t\"febuary\": \"PROPN\",\n\t\t\t\"compositionally\": \"ADV\",\n\t\t\t\"freezing\": \"VERB\",\n\t\t\t\"ok\": \"ADJ\",\n\t\t\t\"somalia\": \"PROPN\",\n\t\t\t\"disabled\": \"ADJ\",\n\t\t\t\"shocked\": \"ADJ\",\n\t\t\t\"wipe\": \"VERB\",\n\t\t\t\"hot\": \"ADJ\",\n\t\t\t\"ripped\": \"VERB\",\n\t\t\t\"pulse\": \"NOUN\",\n\t\t\t\"peddles\": \"NOUN\",\n\t\t\t\"spacetime\": \"NOUN\",\n\t\t\t\"post-call\": \"ADV\",\n\t\t\t\"scope\": \"NOUN\",\n\t\t\t\"fashioned\": \"ADJ\",\n\t\t\t\"reapply\": \"VERB\",\n\t\t\t\"giddy\": \"ADJ\",\n\t\t\t\"kwa\": \"PROPN\",\n\t\t\t\"244\": \"NUM\",\n\t\t\t\"citadel\": \"NOUN\",\n\t\t\t\"dense\": \"ADJ\",\n\t\t\t\"finds\": \"VERB\",\n\t\t\t\"trait\": \"NOUN\",\n\t\t\t\"macgyver\": \"PROPN\",\n\t\t\t\"celery\": \"NOUN\",\n\t\t\t\"urethra\": \"NOUN\",\n\t\t\t\"shone\": \"VERB\",\n\t\t\t\"pinning\": \"VERB\",\n\t\t\t\"weekday\": \"NOUN\",\n\t\t\t\"daugherty\": \"PROPN\",\n\t\t\t\"price\": \"NOUN\",\n\t\t\t\"simply\": \"ADV\",\n\t\t\t\"delightfully\": \"ADV\",\n\t\t\t\"heian\": \"PROPN\",\n\t\t\t\"courage\": \"NOUN\",\n\t\t\t\"horse\": \"NOUN\",\n\t\t\t\"holinshed\": \"PROPN\",\n\t\t\t\"precedent\": \"NOUN\",\n\t\t\t\"ufc\": \"PROPN\",\n\t\t\t\"fields\": \"NOUN\",\n\t\t\t\"bland\": \"ADJ\",\n\t\t\t\"kline\": \"PROPN\",\n\t\t\t\"contradicting\": \"VERB\",\n\t\t\t\"salsa\": \"NOUN\",\n\t\t\t\"hip-bath\": \"NOUN\",\n\t\t\t\"events\": \"NOUN\",\n\t\t\t\"measurable\": \"ADJ\",\n\t\t\t\"fortress\": \"NOUN\",\n\t\t\t\"pecking\": \"VERB\",\n\t\t\t\"invoiced\": \"VERB\",\n\t\t\t\"opossum\": \"NOUN\",\n\t\t\t\"preservatives\": \"NOUN\",\n\t\t\t\"hooded\": \"ADJ\",\n\t\t\t\"ps4\": \"NOUN\",\n\t\t\t\"stampede\": \"NOUN\",\n\t\t\t\"situation\": \"NOUN\",\n\t\t\t\"fliers\": \"NOUN\",\n\t\t\t\"overdue\": \"ADJ\",\n\t\t\t\"10/31/2000\": \"NUM\",\n\t\t\t\"saratoga\": \"PROPN\",\n\t\t\t\"idk\": \"VERB\",\n\t\t\t\"technology\": \"NOUN\",\n\t\t\t\"blooming\": \"VERB\",\n\t\t\t\"baja\": \"NOUN\",\n\t\t\t\"outbreaks\": \"NOUN\",\n\t\t\t\"log\": \"VERB\",\n\t\t\t\"banner\": \"NOUN\",\n\t\t\t\"1179\": \"NUM\",\n\t\t\t\"catalog\": \"NOUN\",\n\t\t\t\"terrific\": \"ADJ\",\n\t\t\t\"cottage\": \"PROPN\",\n\t\t\t\"institutions\": \"NOUN\",\n\t\t\t\"sol\": \"PROPN\",\n\t\t\t\"usb\": \"NOUN\",\n\t\t\t\"blogshares\": \"PROPN\",\n\t\t\t\"center\": \"NOUN\",\n\t\t\t\"committment\": \"NOUN\",\n\t\t\t\"²\": \"ADJ\",\n\t\t\t\"mechanisms\": \"NOUN\",\n\t\t\t\"ichiyo\": \"PROPN\",\n\t\t\t\"organised\": \"ADJ\",\n\t\t\t\"ballad\": \"PROPN\",\n\t\t\t\"clarkson\": \"PROPN\",\n\t\t\t\"élysées\": \"PROPN\",\n\t\t\t\"crusty\": \"ADJ\",\n\t\t\t\"onerous\": \"ADJ\",\n\t\t\t\"jahan\": \"PROPN\",\n\t\t\t\"visits\": \"NOUN\",\n\t\t\t\"ac-\": \"INTJ\",\n\t\t\t\"chi\": \"PROPN\",\n\t\t\t\"pointer\": \"NOUN\",\n\t\t\t\"winger\": \"NOUN\",\n\t\t\t\"cyborg\": \"NOUN\",\n\t\t\t\"splitter\": \"NOUN\",\n\t\t\t\"astr\": \"PROPN\",\n\t\t\t\"2.975\": \"NUM\",\n\t\t\t\"pledge\": \"NOUN\",\n\t\t\t\"nigorie\": \"PROPN\",\n\t\t\t\"ducked\": \"VERB\",\n\t\t\t\"puerto\": \"PROPN\",\n\t\t\t\"supply\": \"NOUN\",\n\t\t\t\"composed\": \"VERB\",\n\t\t\t\"20s\": \"NOUN\",\n\t\t\t\"astrophysics\": \"NOUN\",\n\t\t\t\"mutate\": \"VERB\",\n\t\t\t\"obligated\": \"VERB\",\n\t\t\t\"recitation\": \"NOUN\",\n\t\t\t\"fitters\": \"NOUN\",\n\t\t\t\"measuring\": \"VERB\",\n\t\t\t\"carts\": \"NOUN\",\n\t\t\t\"dice\": \"NOUN\",\n\t\t\t\"qualify\": \"VERB\",\n\t\t\t\"world-wide\": \"ADV\",\n\t\t\t\"weigh\": \"VERB\",\n\t\t\t\"ploughing\": \"VERB\",\n\t\t\t\"shapes\": \"NOUN\",\n\t\t\t\"flop\": \"NOUN\",\n\t\t\t\"ridden\": \"VERB\",\n\t\t\t\"immune\": \"NOUN\",\n\t\t\t\"parachute\": \"NOUN\",\n\t\t\t\"commercial\": \"ADJ\",\n\t\t\t\"collective\": \"ADJ\",\n\t\t\t\"iqa\": \"PROPN\",\n\t\t\t\"considering\": \"VERB\",\n\t\t\t\"launching\": \"VERB\",\n\t\t\t\"geez\": \"INTJ\",\n\t\t\t\"maternal\": \"ADJ\",\n\t\t\t\"mum\": \"NOUN\",\n\t\t\t\"duster\": \"NOUN\",\n\t\t\t\"nissan\": \"PROPN\",\n\t\t\t\"degrees\": \"NOUN\",\n\t\t\t\"yields\": \"NOUN\",\n\t\t\t\"dom.\": \"ADJ\",\n\t\t\t\"depersonalizing\": \"VERB\",\n\t\t\t\"reader\": \"NOUN\",\n\t\t\t\"pho-nomenal\": \"ADJ\",\n\t\t\t\"53\": \"NUM\",\n\t\t\t\"kevin\": \"PROPN\",\n\t\t\t\"awkwardly\": \"ADV\",\n\t\t\t\"daycare\": \"NOUN\",\n\t\t\t\"experts\": \"NOUN\",\n\t\t\t\"slacks\": \"NOUN\",\n\t\t\t\"grip\": \"NOUN\",\n\t\t\t\"doers\": \"NOUN\",\n\t\t\t\"pet\": \"NOUN\",\n\t\t\t\"booth\": \"NOUN\",\n\t\t\t\"thibaut\": \"PROPN\",\n\t\t\t\"gifted\": \"VERB\",\n\t\t\t\"brings\": \"VERB\",\n\t\t\t\"motionless\": \"ADJ\",\n\t\t\t\"embolden\": \"VERB\",\n\t\t\t\"diy\": \"ADJ\",\n\t\t\t\"remark\": \"NOUN\",\n\t\t\t\"ahab\": \"PROPN\",\n\t\t\t\"liau\": \"PROPN\",\n\t\t\t\"toss\": \"VERB\",\n\t\t\t\"cheer\": \"VERB\",\n\t\t\t\"anaheim\": \"PROPN\",\n\t\t\t\"unprofessionalism\": \"NOUN\",\n\t\t\t\"mutant\": \"ADJ\",\n\t\t\t\"exam\": \"NOUN\",\n\t\t\t\"recession\": \"NOUN\",\n\t\t\t\"makeup\": \"NOUN\",\n\t\t\t\"brother\": \"NOUN\",\n\t\t\t\"freelance\": \"ADJ\",\n\t\t\t\"sampler\": \"NOUN\",\n\t\t\t\"rags\": \"NOUN\",\n\t\t\t\"thu\": \"PROPN\",\n\t\t\t\"sumo\": \"NOUN\",\n\t\t\t\"wildcard\": \"NOUN\",\n\t\t\t\"harry\": \"PROPN\",\n\t\t\t\"belgian\": \"ADJ\",\n\t\t\t\"wash\": \"VERB\",\n\t\t\t\"documenting\": \"VERB\",\n\t\t\t\"sheet\": \"NOUN\",\n\t\t\t\"hambali\": \"PROPN\",\n\t\t\t\"municipalities\": \"NOUN\",\n\t\t\t\"variation\": \"NOUN\",\n\t\t\t\"studied\": \"VERB\",\n\t\t\t\"spiders\": \"NOUN\",\n\t\t\t\"addendum\": \"NOUN\",\n\t\t\t\"health\": \"NOUN\",\n\t\t\t\"2013\": \"NUM\",\n\t\t\t\"canes\": \"NOUN\",\n\t\t\t\"tor\": \"PROPN\",\n\t\t\t\"capable\": \"ADJ\",\n\t\t\t\"ltd.\": \"PROPN\",\n\t\t\t\"manager\": \"NOUN\",\n\t\t\t\"vlog\": \"NOUN\",\n\t\t\t\"neighbours\": \"NOUN\",\n\t\t\t\"packard\": \"PROPN\",\n\t\t\t\"dell\": \"PROPN\",\n\t\t\t\"enables\": \"VERB\",\n\t\t\t\"orchestral\": \"ADJ\",\n\t\t\t\"angela\": \"PROPN\",\n\t\t\t\"ayman\": \"PROPN\",\n\t\t\t\"71st\": \"PROPN\",\n\t\t\t\"mezza\": \"NOUN\",\n\t\t\t\"darker\": \"ADJ\",\n\t\t\t\"yorker\": \"PROPN\",\n\t\t\t\"paradoxically\": \"ADV\",\n\t\t\t\"sings\": \"VERB\",\n\t\t\t\"useing\": \"VERB\",\n\t\t\t\"sandpit\": \"NOUN\",\n\t\t\t\"lgbtq\": \"ADJ\",\n\t\t\t\"chrome\": \"NOUN\",\n\t\t\t\"#valuesbased\": \"PROPN\",\n\t\t\t\"earls\": \"PROPN\",\n\t\t\t\"bottle\": \"NOUN\",\n\t\t\t\"discontent\": \"NOUN\",\n\t\t\t\"natalie\": \"PROPN\",\n\t\t\t\"hebrews\": \"PROPN\",\n\t\t\t\"harvest\": \"NOUN\",\n\t\t\t\"hum.\": \"PROPN\",\n\t\t\t\"instructor\": \"NOUN\",\n\t\t\t\"2000\": \"NUM\",\n\t\t\t\"1893\": \"NUM\",\n\t\t\t\"guidebook\": \"NOUN\",\n\t\t\t\"profits\": \"NOUN\",\n\t\t\t\"incipient\": \"ADJ\",\n\t\t\t\"ilk\": \"NOUN\",\n\t\t\t\"pre-war\": \"ADJ\",\n\t\t\t\"handicapped\": \"ADJ\",\n\t\t\t\"12/21/2000\": \"NUM\",\n\t\t\t\"gave\": \"VERB\",\n\t\t\t\"harvesting\": \"VERB\",\n\t\t\t\"exclamation\": \"NOUN\",\n\t\t\t\"video\": \"NOUN\",\n\t\t\t\"peers\": \"NOUN\",\n\t\t\t\"slighter\": \"ADJ\",\n\t\t\t\"quote\": \"NOUN\",\n\t\t\t\"videos\": \"NOUN\",\n\t\t\t\"eldest\": \"ADJ\",\n\t\t\t\"equity\": \"NOUN\",\n\t\t\t\"catfish\": \"NOUN\",\n\t\t\t\"nwp\": \"NOUN\",\n\t\t\t\"ran\": \"VERB\",\n\t\t\t\"limitations\": \"NOUN\",\n\t\t\t\"wenatchee\": \"PROPN\",\n\t\t\t\"reflective\": \"ADJ\",\n\t\t\t\"ligament\": \"NOUN\",\n\t\t\t\"ammount\": \"NOUN\",\n\t\t\t\"ty\": \"INTJ\",\n\t\t\t\"preschool\": \"NOUN\",\n\t\t\t\"coerce\": \"VERB\",\n\t\t\t\"dyspepsia\": \"NOUN\",\n\t\t\t\"middle\": \"ADJ\",\n\t\t\t\"roberto\": \"PROPN\",\n\t\t\t\"delete\": \"VERB\",\n\t\t\t\"emergencies\": \"NOUN\",\n\t\t\t\"surgery\": \"NOUN\",\n\t\t\t\"seekers\": \"NOUN\",\n\t\t\t\"depots\": \"NOUN\",\n\t\t\t\"gait\": \"NOUN\",\n\t\t\t\"violations\": \"NOUN\",\n\t\t\t\"g0v\": \"PROPN\",\n\t\t\t\"ill\": \"ADJ\",\n\t\t\t\"hikmetyar\": \"PROPN\",\n\t\t\t\"shewing\": \"VERB\",\n\t\t\t\"bounced\": \"VERB\",\n\t\t\t\"bag\": \"NOUN\",\n\t\t\t\"pal\": \"NOUN\",\n\t\t\t\"braid\": \"NOUN\",\n\t\t\t\"serviced\": \"VERB\",\n\t\t\t\"stirling\": \"PROPN\",\n\t\t\t\"parked\": \"VERB\",\n\t\t\t\"dilemmas\": \"NOUN\",\n\t\t\t\"occupation\": \"NOUN\",\n\t\t\t\"pouch\": \"NOUN\",\n\t\t\t\"agenda\": \"NOUN\",\n\t\t\t\"rightholders\": \"NOUN\",\n\t\t\t\"fcking\": \"ADV\",\n\t\t\t\"—\": \"PUNCT\",\n\t\t\t\"attentions\": \"NOUN\",\n\t\t\t\"purchace\": \"VERB\",\n\t\t\t\"gsp\": \"PROPN\",\n\t\t\t\"edifices\": \"NOUN\",\n\t\t\t\"stretches\": \"NOUN\",\n\t\t\t\"converts\": \"VERB\",\n\t\t\t\"enraged\": \"VERB\",\n\t\t\t\"refundable\": \"ADJ\",\n\t\t\t\"pro-zionist\": \"ADJ\",\n\t\t\t\"welling\": \"PROPN\",\n\t\t\t\"ragamuffin\": \"NOUN\",\n\t\t\t\"well-mannered\": \"ADJ\",\n\t\t\t\"1341\": \"NUM\",\n\t\t\t\"1:1:19\": \"NUM\",\n\t\t\t\"malfunctions\": \"VERB\",\n\t\t\t\"latino\": \"ADJ\",\n\t\t\t\"le\": \"PROPN\",\n\t\t\t\"french\": \"ADJ\",\n\t\t\t\"substantiating\": \"VERB\",\n\t\t\t\"decidely\": \"ADV\",\n\t\t\t\"cheung\": \"PROPN\",\n\t\t\t\"basalt\": \"NOUN\",\n\t\t\t\"languages\": \"NOUN\",\n\t\t\t\"dixie\": \"PROPN\",\n\t\t\t\"channelled\": \"VERB\",\n\t\t\t\"1810\": \"NUM\",\n\t\t\t\"area's\": \"NOUN\",\n\t\t\t\"micromega\": \"PROPN\",\n\t\t\t\"polution\": \"NOUN\",\n\t\t\t\"absolutely\": \"ADV\",\n\t\t\t\"release\": \"NOUN\",\n\t\t\t\"expectation\": \"NOUN\",\n\t\t\t\"pizza\": \"NOUN\",\n\t\t\t\"topack\": \"PROPN\",\n\t\t\t\"les\": \"PROPN\",\n\t\t\t\"possess\": \"VERB\",\n\t\t\t\"so-o-o\": \"INTJ\",\n\t\t\t\"hate\": \"VERB\",\n\t\t\t\"hornet\": \"NOUN\",\n\t\t\t\"investigated\": \"VERB\",\n\t\t\t\"outdoors\": \"ADV\",\n\t\t\t\"searchability\": \"NOUN\",\n\t\t\t\"violet\": \"NOUN\",\n\t\t\t\"tendons\": \"NOUN\",\n\t\t\t\"heard\": \"VERB\",\n\t\t\t\"dictating\": \"VERB\",\n\t\t\t\"researchers\": \"NOUN\",\n\t\t\t\"116th\": \"ADJ\",\n\t\t\t\"373\": \"NUM\",\n\t\t\t\"strange\": \"ADJ\",\n\t\t\t\"powersports\": \"PROPN\",\n\t\t\t\"significance\": \"NOUN\",\n\t\t\t\"fart\": \"NOUN\",\n\t\t\t\"lorenzo\": \"PROPN\",\n\t\t\t\"withstanding\": \"VERB\",\n\t\t\t\"teruya\": \"PROPN\",\n\t\t\t\"outweigh\": \"VERB\",\n\t\t\t\"20\": \"NUM\",\n\t\t\t\"mtm\": \"PROPN\",\n\t\t\t\"taurus\": \"PROPN\",\n\t\t\t\"frisco\": \"PROPN\",\n\t\t\t\"junkie\": \"NOUN\",\n\t\t\t\"accumulating\": \"VERB\",\n\t\t\t\"received\": \"VERB\",\n\t\t\t\"strathmann\": \"PROPN\",\n\t\t\t\"58\": \"NUM\",\n\t\t\t\"mccafe\": \"PROPN\",\n\t\t\t\"wilted\": \"ADJ\",\n\t\t\t\"leadoff\": \"ADV\",\n\t\t\t\"intellectuals\": \"NOUN\",\n\t\t\t\"positing\": \"NOUN\",\n\t\t\t\"rise\": \"NOUN\",\n\t\t\t\"3/10/00\": \"NUM\",\n\t\t\t\"minority\": \"NOUN\",\n\t\t\t\"contingent\": \"NOUN\",\n\t\t\t\"importance\": \"NOUN\",\n\t\t\t\"miseries\": \"NOUN\",\n\t\t\t\"notable\": \"ADJ\",\n\t\t\t\"multi-nation\": \"ADJ\",\n\t\t\t\"sandwich\": \"NOUN\",\n\t\t\t\"radiantly\": \"ADV\",\n\t\t\t\"telephone\": \"NOUN\",\n\t\t\t\"bring\": \"VERB\",\n\t\t\t\"hollering\": \"VERB\",\n\t\t\t\"bonn\": \"PROPN\",\n\t\t\t\"seconds\": \"NOUN\",\n\t\t\t\"ineffective\": \"ADJ\",\n\t\t\t\"disinformation\": \"NOUN\",\n\t\t\t\"command\": \"NOUN\",\n\t\t\t\"racial\": \"ADJ\",\n\t\t\t\"excepted\": \"VERB\",\n\t\t\t\"cenotaph\": \"NOUN\",\n\t\t\t\"sheets\": \"NOUN\",\n\t\t\t\"ernst\": \"PROPN\",\n\t\t\t\"simplified\": \"VERB\",\n\t\t\t\"!!\": \"PUNCT\",\n\t\t\t\"telecommunications\": \"NOUN\",\n\t\t\t\"outer\": \"ADJ\",\n\t\t\t\"di\": \"NOUN\",\n\t\t\t\"workforce\": \"NOUN\",\n\t\t\t\"adidas\": \"PROPN\",\n\t\t\t\"mom\": \"NOUN\",\n\t\t\t\"physically\": \"ADV\",\n\t\t\t\"normally\": \"ADV\",\n\t\t\t\"68\": \"NUM\",\n\t\t\t\"turner\": \"PROPN\",\n\t\t\t\"indicating\": \"VERB\",\n\t\t\t\"californian\": \"PROPN\",\n\t\t\t\"analytics\": \"PROPN\",\n\t\t\t\"vampire\": \"NOUN\",\n\t\t\t\"viewer\": \"NOUN\",\n\t\t\t\"cancun\": \"PROPN\",\n\t\t\t\"flutter\": \"NOUN\",\n\t\t\t\"unwittingly\": \"ADV\",\n\t\t\t\"a1237\": \"PROPN\",\n\t\t\t\"belgium\": \"PROPN\",\n\t\t\t\"texans\": \"PROPN\",\n\t\t\t\"pope\": \"PROPN\",\n\t\t\t\"yawl\": \"NOUN\",\n\t\t\t\"re-routed\": \"VERB\",\n\t\t\t\"lennon\": \"PROPN\",\n\t\t\t\"squashed\": \"VERB\",\n\t\t\t\"leroy\": \"PROPN\",\n\t\t\t\"representation\": \"NOUN\",\n\t\t\t\"pierre\": \"PROPN\",\n\t\t\t\"cheaply\": \"ADV\",\n\t\t\t\"forget-me-not\": \"NOUN\",\n\t\t\t\"uvr\": \"NOUN\",\n\t\t\t\"laurent\": \"PROPN\",\n\t\t\t\"cherry-\": \"NOUN\",\n\t\t\t\"provoke\": \"VERB\",\n\t\t\t\"realizing\": \"VERB\",\n\t\t\t\"strive\": \"VERB\",\n\t\t\t\"phones\": \"NOUN\",\n\t\t\t\"andreae\": \"PROPN\",\n\t\t\t\"tactics\": \"NOUN\",\n\t\t\t\"goddard\": \"PROPN\",\n\t\t\t\"mm\": \"INTJ\",\n\t\t\t\"namibia\": \"PROPN\",\n\t\t\t\"railway-truck\": \"NOUN\",\n\t\t\t\"steal\": \"VERB\",\n\t\t\t\"neutered\": \"VERB\",\n\t\t\t\"akin\": \"ADJ\",\n\t\t\t\"reptile\": \"NOUN\",\n\t\t\t\"icing\": \"NOUN\",\n\t\t\t\"poa\": \"NOUN\",\n\t\t\t\"decks\": \"NOUN\",\n\t\t\t\"staind\": \"VERB\",\n\t\t\t\"believes\": \"VERB\",\n\t\t\t\"nonna!\": \"PROPN\",\n\t\t\t\"anti-trust\": \"ADJ\",\n\t\t\t\"collaborative\": \"ADJ\",\n\t\t\t\"item\": \"NOUN\",\n\t\t\t\"marking\": \"VERB\",\n\t\t\t\"rushed\": \"VERB\",\n\t\t\t\"thus\": \"ADV\",\n\t\t\t\"britannia\": \"PROPN\",\n\t\t\t\"fluent\": \"ADJ\",\n\t\t\t\"effeminate\": \"ADJ\",\n\t\t\t\"accommodating\": \"VERB\",\n\t\t\t\"kike\": \"NOUN\",\n\t\t\t\"1929\": \"NUM\",\n\t\t\t\"marquee\": \"NOUN\",\n\t\t\t\"pivottable\": \"NOUN\",\n\t\t\t\"benefactor\": \"NOUN\",\n\t\t\t\"brooding\": \"VERB\",\n\t\t\t\"clutching\": \"VERB\",\n\t\t\t\"jalapeno\": \"NOUN\",\n\t\t\t\"meanwhile\": \"ADV\",\n\t\t\t\"prototypes\": \"NOUN\",\n\t\t\t\"chickens\": \"NOUN\",\n\t\t\t\"reverie\": \"NOUN\",\n\t\t\t\"sinh\": \"PROPN\",\n\t\t\t\"aggrieved\": \"ADJ\",\n\t\t\t\"hodge\": \"PROPN\",\n\t\t\t\"albeit\": \"SCONJ\",\n\t\t\t\"bashers\": \"NOUN\",\n\t\t\t\"peanutjak...@usa.com\": \"PROPN\",\n\t\t\t\"cleverly\": \"ADV\",\n\t\t\t\"coupled\": \"VERB\",\n\t\t\t\"reintroduced\": \"VERB\",\n\t\t\t\"passing\": \"VERB\",\n\t\t\t\"longevity\": \"NOUN\",\n\t\t\t\"experiance\": \"NOUN\",\n\t\t\t\"aquiriums\": \"NOUN\",\n\t\t\t\"join\": \"VERB\",\n\t\t\t\"202.429.1700\": \"NUM\",\n\t\t\t\"fervor\": \"NOUN\",\n\t\t\t\"mickey\": \"PROPN\",\n\t\t\t\"implanted\": \"VERB\",\n\t\t\t\"sunset\": \"NOUN\",\n\t\t\t\"rock\": \"NOUN\",\n\t\t\t\"danish\": \"ADJ\",\n\t\t\t\"preferred\": \"VERB\",\n\t\t\t\"92101\": \"NUM\",\n\t\t\t\"overseeing\": \"VERB\",\n\t\t\t\"preaching\": \"VERB\",\n\t\t\t\"priced\": \"VERB\",\n\t\t\t\"averted\": \"VERB\",\n\t\t\t\"remarkable\": \"ADJ\",\n\t\t\t\"dingy\": \"ADJ\",\n\t\t\t\"39\": \"NUM\",\n\t\t\t\"|\": \"PUNCT\",\n\t\t\t\"slowed\": \"VERB\",\n\t\t\t\"esp\": \"ADV\",\n\t\t\t\"sonus\": \"NOUN\",\n\t\t\t\"0\": \"NUM\",\n\t\t\t\"281-514-3183\": \"NUM\",\n\t\t\t\"arrayed\": \"VERB\",\n\t\t\t\"tommy\": \"PROPN\",\n\t\t\t\"blamed\": \"VERB\",\n\t\t\t\"665\": \"NUM\",\n\t\t\t\"protective\": \"ADJ\",\n\t\t\t\"consider\": \"VERB\",\n\t\t\t\"edible\": \"ADJ\",\n\t\t\t\"rhodesia\": \"PROPN\",\n\t\t\t\"stretching\": \"VERB\",\n\t\t\t\"school\": \"NOUN\",\n\t\t\t\"write\": \"VERB\",\n\t\t\t\"showered\": \"VERB\",\n\t\t\t\"steward\": \"NOUN\",\n\t\t\t\"whitmore\": \"PROPN\",\n\t\t\t\"after\": \"ADP\",\n\t\t\t\"settlements\": \"NOUN\",\n\t\t\t\"slash\": \"CCONJ\",\n\t\t\t\"mfm\": \"PROPN\",\n\t\t\t\"ees\": \"PROPN\",\n\t\t\t\"17th\": \"ADJ\",\n\t\t\t\"berries\": \"NOUN\",\n\t\t\t\"globalflash\": \"PROPN\",\n\t\t\t\"playing\": \"VERB\",\n\t\t\t\"racket\": \"NOUN\",\n\t\t\t\"valdes\": \"PROPN\",\n\t\t\t\"optimize\": \"VERB\",\n\t\t\t\"uprising\": \"NOUN\",\n\t\t\t\"glow\": \"NOUN\",\n\t\t\t\"whole\": \"ADJ\",\n\t\t\t\"hashtag\": \"NOUN\",\n\t\t\t\"quality\": \"NOUN\",\n\t\t\t\"logic\": \"NOUN\",\n\t\t\t\"exercise\": \"NOUN\",\n\t\t\t\"quarters\": \"NOUN\",\n\t\t\t\"flatbread\": \"NOUN\",\n\t\t\t\"agip\": \"PROPN\",\n\t\t\t\"cocaine\": \"PROPN\",\n\t\t\t\"today\": \"NOUN\",\n\t\t\t\"characteristic\": \"NOUN\",\n\t\t\t\"ban\": \"NOUN\",\n\t\t\t\"dustin\": \"PROPN\",\n\t\t\t\"sluts\": \"NOUN\",\n\t\t\t\"miri\": \"PROPN\",\n\t\t\t\"berez\": \"PROPN\",\n\t\t\t\"neoconservative\": \"ADJ\",\n\t\t\t\"27\": \"NUM\",\n\t\t\t\"addressee\": \"NOUN\",\n\t\t\t\"conquistador\": \"NOUN\",\n\t\t\t\"counselors\": \"NOUN\",\n\t\t\t\"prideful\": \"ADJ\",\n\t\t\t\"looser\": \"NOUN\",\n\t\t\t\"beer\": \"NOUN\",\n\t\t\t\"phobia\": \"NOUN\",\n\t\t\t\"ex-cons\": \"NOUN\",\n\t\t\t\"glass\": \"NOUN\",\n\t\t\t\"presumably\": \"ADV\",\n\t\t\t\"cleaser\": \"NOUN\",\n\t\t\t\"interrogations\": \"NOUN\",\n\t\t\t\"substance\": \"NOUN\",\n\t\t\t\"turnout\": \"NOUN\",\n\t\t\t\"oral\": \"ADJ\",\n\t\t\t\"compounds\": \"NOUN\",\n\t\t\t\"men\": \"NOUN\",\n\t\t\t\"mentioned\": \"VERB\",\n\t\t\t\"comédie\": \"NOUN\",\n\t\t\t\"circulations\": \"NOUN\",\n\t\t\t\"metals\": \"PROPN\",\n\t\t\t\"distilleries\": \"NOUN\",\n\t\t\t\"chartered\": \"VERB\",\n\t\t\t\"adw\": \"PROPN\",\n\t\t\t\"rebel\": \"NOUN\",\n\t\t\t\"bc\": \"PROPN\",\n\t\t\t\"exterior\": \"ADJ\",\n\t\t\t\"quiz\": \"NOUN\",\n\t\t\t\"prior\": \"ADJ\",\n\t\t\t\"allergic\": \"ADJ\",\n\t\t\t\"apparition\": \"NOUN\",\n\t\t\t\"flares\": \"NOUN\",\n\t\t\t\"leadership\": \"NOUN\",\n\t\t\t\"willow\": \"NOUN\",\n\t\t\t\"referendums\": \"NOUN\",\n\t\t\t\"neo\": \"ADJ\",\n\t\t\t\"finish\": \"VERB\",\n\t\t\t\"hamsters\": \"NOUN\",\n\t\t\t\"supplies\": \"NOUN\",\n\t\t\t\"software\": \"NOUN\",\n\t\t\t\"suffocate\": \"VERB\",\n\t\t\t\"track\": \"NOUN\",\n\t\t\t\"ebert\": \"PROPN\",\n\t\t\t\"faction\": \"NOUN\",\n\t\t\t\"hisses\": \"VERB\",\n\t\t\t\"coined\": \"VERB\",\n\t\t\t\"specify\": \"VERB\",\n\t\t\t\"slack\": \"VERB\",\n\t\t\t\"glide\": \"VERB\",\n\t\t\t\"360\": \"NUM\",\n\t\t\t\"handled\": \"VERB\",\n\t\t\t\"''\": \"PUNCT\",\n\t\t\t\"organization\": \"NOUN\",\n\t\t\t\"bolted\": \"VERB\",\n\t\t\t\"whiting\": \"NOUN\",\n\t\t\t\"bodhi\": \"PROPN\",\n\t\t\t\"bucks\": \"NOUN\",\n\t\t\t\"recheck\": \"NOUN\",\n\t\t\t\"gloss\": \"NOUN\",\n\t\t\t\"skulls\": \"NOUN\",\n\t\t\t\"edgewater\": \"PROPN\",\n\t\t\t\"alt.animals.tiger\": \"NOUN\",\n\t\t\t\"alfred\": \"PROPN\",\n\t\t\t\"trails\": \"NOUN\",\n\t\t\t\"43228\": \"NUM\",\n\t\t\t\"misc.consumers\": \"NOUN\",\n\t\t\t\"http://www.adiccp.org/home/default.asp\": \"PROPN\",\n\t\t\t\"colin\": \"PROPN\",\n\t\t\t\"stomach\": \"NOUN\",\n\t\t\t\"pup\": \"NOUN\",\n\t\t\t\"castamere\": \"PROPN\",\n\t\t\t\"improve\": \"VERB\",\n\t\t\t\"deliberate\": \"ADJ\",\n\t\t\t\"2006\": \"NUM\",\n\t\t\t\"galbraith\": \"PROPN\",\n\t\t\t\"correctness\": \"NOUN\",\n\t\t\t\"ensign\": \"NOUN\",\n\t\t\t\"torture\": \"NOUN\",\n\t\t\t\"cunclude\": \"VERB\",\n\t\t\t\"'71\": \"NUM\",\n\t\t\t\"jorvik\": \"PROPN\",\n\t\t\t\"theatrical\": \"ADJ\",\n\t\t\t\"favourites\": \"NOUN\",\n\t\t\t\"cosmos\": \"NOUN\",\n\t\t\t\"typical\": \"ADJ\",\n\t\t\t\"interferences\": \"NOUN\",\n\t\t\t\"repeatable\": \"ADJ\",\n\t\t\t\"fixtures\": \"NOUN\",\n\t\t\t\"your\": \"PRON\",\n\t\t\t\"rehabilitation\": \"PROPN\",\n\t\t\t\"sudden\": \"ADJ\",\n\t\t\t\"naples\": \"PROPN\",\n\t\t\t\"hainan\": \"PROPN\",\n\t\t\t\"stinking\": \"ADJ\",\n\t\t\t\"redistribution\": \"NOUN\",\n\t\t\t\"hopeful\": \"ADJ\",\n\t\t\t\"steer\": \"NOUN\",\n\t\t\t\"islamic\": \"ADJ\",\n\t\t\t\"farming\": \"NOUN\",\n\t\t\t\"espeak\": \"PROPN\",\n\t\t\t\"m-\": \"INTJ\",\n\t\t\t\"meeting\": \"NOUN\",\n\t\t\t\"creekside\": \"PROPN\",\n\t\t\t\"dinasaurs\": \"NOUN\",\n\t\t\t\"devilishly\": \"ADV\",\n\t\t\t\"analysis\": \"NOUN\",\n\t\t\t\"founds\": \"VERB\",\n\t\t\t\"giants\": \"NOUN\",\n\t\t\t\"whirred\": \"VERB\",\n\t\t\t\"lai\": \"PROPN\",\n\t\t\t\"refilled\": \"VERB\",\n\t\t\t\"except\": \"ADP\",\n\t\t\t\"lafayette\": \"PROPN\",\n\t\t\t\"futures\": \"NOUN\",\n\t\t\t\"pumpkin\": \"NOUN\",\n\t\t\t\")\": \"PUNCT\",\n\t\t\t\"traces\": \"NOUN\",\n\t\t\t\"612-205-9814\": \"NUM\",\n\t\t\t\"17\": \"NUM\",\n\t\t\t\"beards\": \"NOUN\",\n\t\t\t\"thou\": \"PRON\",\n\t\t\t\"choppy\": \"ADJ\",\n\t\t\t\"israeli\": \"ADJ\",\n\t\t\t\"diplomat\": \"NOUN\",\n\t\t\t\"stillness\": \"NOUN\",\n\t\t\t\"phd\": \"NOUN\",\n\t\t\t\"bullshit\": \"NOUN\",\n\t\t\t\"fossum\": \"PROPN\",\n\t\t\t\"bear\": \"NOUN\",\n\t\t\t\"auschwitz\": \"PROPN\",\n\t\t\t\"seeking\": \"VERB\",\n\t\t\t\"foie\": \"NOUN\",\n\t\t\t\"tolerating\": \"VERB\",\n\t\t\t\"ties\": \"NOUN\",\n\t\t\t\"572\": \"NUM\",\n\t\t\t\"appease\": \"VERB\",\n\t\t\t\"wool\": \"NOUN\",\n\t\t\t\"squeeze\": \"VERB\",\n\t\t\t\"bloom\": \"PROPN\",\n\t\t\t\"celebration\": \"NOUN\",\n\t\t\t\"falernian\": \"ADJ\",\n\t\t\t\"blank\": \"ADJ\",\n\t\t\t\"sweat\": \"NOUN\",\n\t\t\t\"colada\": \"NOUN\",\n\t\t\t\"achilles\": \"PROPN\",\n\t\t\t\"64,500\": \"NUM\",\n\t\t\t\"sss\": \"NOUN\",\n\t\t\t\"vastly\": \"ADV\",\n\t\t\t\"distort\": \"VERB\",\n\t\t\t\"713-654-0365\": \"NUM\",\n\t\t\t\"volunteering\": \"NOUN\",\n\t\t\t\"sourced\": \"VERB\",\n\t\t\t\"kente\": \"PROPN\",\n\t\t\t\"discussion\": \"NOUN\",\n\t\t\t\"never\": \"ADV\",\n\t\t\t\"beers\": \"NOUN\",\n\t\t\t\"mers\": \"PROPN\",\n\t\t\t\"regress\": \"NOUN\",\n\t\t\t\"repeal\": \"VERB\",\n\t\t\t\"religious\": \"ADJ\",\n\t\t\t\"personalized\": \"VERB\",\n\t\t\t\"squeaks\": \"NOUN\",\n\t\t\t\"vastness\": \"NOUN\",\n\t\t\t\"gencon\": \"PROPN\",\n\t\t\t\"!!!!!!\": \"PUNCT\",\n\t\t\t\"bleach\": \"NOUN\",\n\t\t\t\"baptist\": \"PROPN\",\n\t\t\t\"sunshield\": \"NOUN\",\n\t\t\t\"waked\": \"VERB\",\n\t\t\t\"mitigating\": \"NOUN\",\n\t\t\t\"golfing\": \"VERB\",\n\t\t\t\"tel\": \"NOUN\",\n\t\t\t\">=\": \"SYM\",\n\t\t\t\"enemy\": \"NOUN\",\n\t\t\t\"vcu\": \"PROPN\",\n\t\t\t\"ridiculized\": \"VERB\",\n\t\t\t\"christened\": \"VERB\",\n\t\t\t\"jitsu\": \"NOUN\",\n\t\t\t\"amends\": \"VERB\",\n\t\t\t\"yonder\": \"DET\",\n\t\t\t\"seek\": \"VERB\",\n\t\t\t\"autobiography\": \"NOUN\",\n\t\t\t\"affiliate\": \"NOUN\",\n\t\t\t\"ginger\": \"NOUN\",\n\t\t\t\"angry\": \"ADJ\",\n\t\t\t\"pregnancy\": \"NOUN\",\n\t\t\t\"candid\": \"ADJ\",\n\t\t\t\"flickr\": \"PROPN\",\n\t\t\t\"crawls\": \"VERB\",\n\t\t\t\"pretense\": \"NOUN\",\n\t\t\t\"mustaches\": \"NOUN\",\n\t\t\t\"cantons\": \"NOUN\",\n\t\t\t\"gilderoy\": \"PROPN\",\n\t\t\t\"diners\": \"NOUN\",\n\t\t\t\"messenger\": \"PROPN\",\n\t\t\t\"misinterpretation\": \"NOUN\",\n\t\t\t\"muggles\": \"NOUN\",\n\t\t\t\"matters\": \"NOUN\",\n\t\t\t\"external\": \"ADJ\",\n\t\t\t\"chromatograph\": \"NOUN\",\n\t\t\t\"hickory\": \"PROPN\",\n\t\t\t\"revitalization\": \"NOUN\",\n\t\t\t\"portions\": \"NOUN\",\n\t\t\t\"disposable\": \"ADJ\",\n\t\t\t\"mischievous\": \"ADJ\",\n\t\t\t\"schizophrenic\": \"ADJ\",\n\t\t\t\"modification\": \"NOUN\",\n\t\t\t\"fond\": \"ADJ\",\n\t\t\t\"abstained\": \"VERB\",\n\t\t\t\"augment\": \"VERB\",\n\t\t\t\"yes\": \"INTJ\",\n\t\t\t\"interfaces\": \"NOUN\",\n\t\t\t\"funniest\": \"ADJ\",\n\t\t\t\"mia\": \"PROPN\",\n\t\t\t\"kate\": \"PROPN\",\n\t\t\t\"reactor\": \"NOUN\",\n\t\t\t\"hunters\": \"NOUN\",\n\t\t\t\"devastation\": \"NOUN\",\n\t\t\t\"ālī\": \"PROPN\",\n\t\t\t\"romania\": \"PROPN\",\n\t\t\t\"migrated\": \"VERB\",\n\t\t\t\"testified\": \"VERB\",\n\t\t\t\"variant\": \"NOUN\",\n\t\t\t\"canyon\": \"PROPN\",\n\t\t\t\"peoria\": \"PROPN\",\n\t\t\t\"undercurrents\": \"NOUN\",\n\t\t\t\"2016\": \"NUM\",\n\t\t\t\"seeks\": \"VERB\",\n\t\t\t\"reacts\": \"VERB\",\n\t\t\t\"tools\": \"NOUN\",\n\t\t\t\"pcs\": \"PROPN\",\n\t\t\t\"monument\": \"NOUN\",\n\t\t\t\"eczema\": \"NOUN\",\n\t\t\t\"non\": \"ADV\",\n\t\t\t\"unprepossessingly\": \"ADV\",\n\t\t\t\"proletariat\": \"PROPN\",\n\t\t\t\"whispering\": \"VERB\",\n\t\t\t\"jew\": \"NOUN\",\n\t\t\t\"http://i.imgur.com/s2md2.jpg\": \"PROPN\",\n\t\t\t\"unhygienic\": \"ADJ\",\n\t\t\t\"playoffs\": \"NOUN\",\n\t\t\t\"scrub\": \"VERB\",\n\t\t\t\"quitter\": \"NOUN\",\n\t\t\t\"unresolved\": \"ADJ\",\n\t\t\t\"dressing-table\": \"NOUN\",\n\t\t\t\"suspended\": \"VERB\",\n\t\t\t\"substances\": \"NOUN\",\n\t\t\t\"oprah\": \"PROPN\",\n\t\t\t\"attribution\": \"PROPN\",\n\t\t\t\"lead\": \"VERB\",\n\t\t\t\"dangerous-loiterer\": \"NOUN\",\n\t\t\t\"gass\": \"PROPN\",\n\t\t\t\"auxiliary\": \"ADJ\",\n\t\t\t\"biography\": \"NOUN\",\n\t\t\t\"ada\": \"NOUN\",\n\t\t\t\"vowels\": \"NOUN\",\n\t\t\t\"wedges\": \"NOUN\",\n\t\t\t\"profundity\": \"NOUN\",\n\t\t\t\"lizards\": \"NOUN\",\n\t\t\t\"meydan\": \"PROPN\",\n\t\t\t\"scientologist\": \"PROPN\",\n\t\t\t\"hu\": \"PROPN\",\n\t\t\t\"isolating\": \"VERB\",\n\t\t\t\"shuttles\": \"NOUN\",\n\t\t\t\"strongly\": \"ADV\",\n\t\t\t\"capricorn\": \"PROPN\",\n\t\t\t\"upgrade\": \"NOUN\",\n\t\t\t\"careers\": \"NOUN\",\n\t\t\t\"sacramental\": \"ADJ\",\n\t\t\t\"asked\": \"VERB\",\n\t\t\t\"deeping\": \"VERB\",\n\t\t\t\"crunched\": \"VERB\",\n\t\t\t\"superior\": \"ADJ\",\n\t\t\t\"oncoming\": \"ADJ\",\n\t\t\t\"understandably\": \"ADV\",\n\t\t\t\"wisteria\": \"PROPN\",\n\t\t\t\"sanborn\": \"PROPN\",\n\t\t\t\"journalistic\": \"ADJ\",\n\t\t\t\"fueled\": \"VERB\",\n\t\t\t\"caches\": \"NOUN\",\n\t\t\t\"kapor\": \"PROPN\",\n\t\t\t\"gis\": \"NOUN\",\n\t\t\t\"colton\": \"PROPN\",\n\t\t\t\"simplest\": \"ADJ\",\n\t\t\t\"surplus\": \"NOUN\",\n\t\t\t\"hackable\": \"ADJ\",\n\t\t\t\"hovered\": \"VERB\",\n\t\t\t\"intercourse\": \"NOUN\",\n\t\t\t\"orson\": \"PROPN\",\n\t\t\t\"defines\": \"VERB\",\n\t\t\t\"hewlett\": \"PROPN\",\n\t\t\t\"characterizing\": \"VERB\",\n\t\t\t\"wim\": \"PROPN\",\n\t\t\t\"1576\": \"NUM\",\n\t\t\t\"limelight\": \"NOUN\",\n\t\t\t\"ariel\": \"PROPN\",\n\t\t\t\"200\": \"NUM\",\n\t\t\t\"speech\": \"NOUN\",\n\t\t\t\"foz\": \"PROPN\",\n\t\t\t\"luan\": \"PROPN\",\n\t\t\t\"unselfish\": \"ADJ\",\n\t\t\t\"prognosis\": \"NOUN\",\n\t\t\t\"exit\": \"NOUN\",\n\t\t\t\"root\": \"NOUN\",\n\t\t\t\"tien\": \"PROPN\",\n\t\t\t\"green\": \"ADJ\",\n\t\t\t\"darmanin\": \"PROPN\",\n\t\t\t\"7484\": \"NUM\",\n\t\t\t\"handiwork\": \"NOUN\",\n\t\t\t\"s’\": \"AUX\",\n\t\t\t\"belgians\": \"PROPN\",\n\t\t\t\"vacancy\": \"NOUN\",\n\t\t\t\"nearest\": \"ADJ\",\n\t\t\t\"nitrogen\": \"NOUN\",\n\t\t\t\"toast\": \"NOUN\",\n\t\t\t\"default\": \"NOUN\",\n\t\t\t\"stride\": \"NOUN\",\n\t\t\t\"caring\": \"ADJ\",\n\t\t\t\"crepes\": \"PROPN\",\n\t\t\t\"gala\": \"NOUN\",\n\t\t\t\"simultaneous\": \"ADJ\",\n\t\t\t\"literal\": \"ADJ\",\n\t\t\t\"patrol\": \"NOUN\",\n\t\t\t\"williamson\": \"PROPN\",\n\t\t\t\"completing\": \"VERB\",\n\t\t\t\"windsurf\": \"NOUN\",\n\t\t\t\"pragmatics\": \"NOUN\",\n\t\t\t\"ercot\": \"PROPN\",\n\t\t\t\"questions\": \"NOUN\",\n\t\t\t\"carrots\": \"NOUN\",\n\t\t\t\"priory\": \"NOUN\",\n\t\t\t\"dictator\": \"NOUN\",\n\t\t\t\"matchsticks\": \"NOUN\",\n\t\t\t\"bottom\": \"NOUN\",\n\t\t\t\"tussey\": \"PROPN\",\n\t\t\t\"drones\": \"NOUN\",\n\t\t\t\"guard\": \"PROPN\",\n\t\t\t\"affirm\": \"VERB\",\n\t\t\t\"accompany\": \"VERB\",\n\t\t\t\"taiwanese\": \"ADJ\",\n\t\t\t\"origination\": \"NOUN\",\n\t\t\t\"queen\": \"NOUN\",\n\t\t\t\"prolonged\": \"ADJ\",\n\t\t\t\"cuckoo\": \"NOUN\",\n\t\t\t\"make-up\": \"NOUN\",\n\t\t\t\"preventing\": \"VERB\",\n\t\t\t\"hoot\": \"PROPN\",\n\t\t\t\"angelic\": \"ADJ\",\n\t\t\t\"488,800\": \"NUM\",\n\t\t\t\"974-6721\": \"NUM\",\n\t\t\t\"genteel\": \"ADJ\",\n\t\t\t\"jersey\": \"PROPN\",\n\t\t\t\"chip\": \"NOUN\",\n\t\t\t\"groan\": \"INTJ\",\n\t\t\t\"essen\": \"PROPN\",\n\t\t\t\"bitter\": \"ADJ\",\n\t\t\t\"08:55\": \"NUM\",\n\t\t\t\"buddhism\": \"PROPN\",\n\t\t\t\"decouple\": \"VERB\",\n\t\t\t\"hastag\": \"NOUN\",\n\t\t\t\"lovely\": \"ADJ\",\n\t\t\t\"addict\": \"NOUN\",\n\t\t\t\"grigorenko\": \"PROPN\",\n\t\t\t\"parent\": \"NOUN\",\n\t\t\t\"entertain\": \"VERB\",\n\t\t\t\"quantification\": \"NOUN\",\n\t\t\t\"th\": \"SCONJ\",\n\t\t\t\"inequities\": \"NOUN\",\n\t\t\t\"tug-boat\": \"NOUN\",\n\t\t\t\"towns\": \"NOUN\",\n\t\t\t\"alpha\": \"PROPN\",\n\t\t\t\"pl\": \"INTJ\",\n\t\t\t\"travellers\": \"NOUN\",\n\t\t\t\"keywords\": \"NOUN\",\n\t\t\t\"robbed\": \"VERB\",\n\t\t\t\"relentless\": \"ADJ\",\n\t\t\t\"massacre\": \"NOUN\",\n\t\t\t\"werewolf\": \"PROPN\",\n\t\t\t\"manifest\": \"ADJ\",\n\t\t\t\"horrific\": \"ADJ\",\n\t\t\t\"blackened\": \"VERB\",\n\t\t\t\"boasted\": \"VERB\",\n\t\t\t\"awful\": \"ADJ\",\n\t\t\t\"εὐσέβιος\": \"PROPN\",\n\t\t\t\"guess\": \"VERB\",\n\t\t\t\"mumble\": \"VERB\",\n\t\t\t\"beating\": \"VERB\",\n\t\t\t\"ambitiously\": \"ADV\",\n\t\t\t\"orally\": \"ADV\",\n\t\t\t\"amin\": \"PROPN\",\n\t\t\t\"me\": \"PRON\",\n\t\t\t\"ros\": \"PROPN\",\n\t\t\t\"owls\": \"NOUN\",\n\t\t\t\"boulders\": \"NOUN\",\n\t\t\t\"swung\": \"VERB\",\n\t\t\t\"whisked\": \"VERB\",\n\t\t\t\"voicemail\": \"NOUN\",\n\t\t\t\"pose\": \"VERB\",\n\t\t\t\"lifespans\": \"NOUN\",\n\t\t\t\"flatten\": \"VERB\",\n\t\t\t\"admirers\": \"NOUN\",\n\t\t\t\"nephews\": \"NOUN\",\n\t\t\t\"duplicity\": \"NOUN\",\n\t\t\t\"bojinka\": \"PROPN\",\n\t\t\t\"traveler\": \"NOUN\",\n\t\t\t\"brand\": \"NOUN\",\n\t\t\t\"cosmetics\": \"NOUN\",\n\t\t\t\"16.379\": \"NUM\",\n\t\t\t\"stubble\": \"NOUN\",\n\t\t\t\".15\": \"NUM\",\n\t\t\t\"webb\": \"PROPN\",\n\t\t\t\"reigned\": \"VERB\",\n\t\t\t\"cite\": \"VERB\",\n\t\t\t\"guerra\": \"PROPN\",\n\t\t\t\"bites\": \"VERB\",\n\t\t\t\"wasting\": \"VERB\",\n\t\t\t\"grouped\": \"VERB\",\n\t\t\t\"puppy\": \"NOUN\",\n\t\t\t\"matching\": \"VERB\",\n\t\t\t\"monocot\": \"NOUN\",\n\t\t\t\"flecked\": \"VERB\",\n\t\t\t\"warm\": \"ADJ\",\n\t\t\t\"sequence\": \"NOUN\",\n\t\t\t\"firms\": \"NOUN\",\n\t\t\t\"mental\": \"ADJ\",\n\t\t\t\"save\": \"VERB\",\n\t\t\t\"computers\": \"NOUN\",\n\t\t\t\"slight\": \"ADJ\",\n\t\t\t\"encourage\": \"VERB\",\n\t\t\t\"immigrate\": \"VERB\",\n\t\t\t\"mubarak\": \"PROPN\",\n\t\t\t\"parliamentary\": \"ADJ\",\n\t\t\t\"naivety\": \"NOUN\",\n\t\t\t\"provides\": \"VERB\",\n\t\t\t\"thriller\": \"NOUN\",\n\t\t\t\"canever\": \"PROPN\",\n\t\t\t\"volume\": \"NOUN\",\n\t\t\t\"breaking\": \"VERB\",\n\t\t\t\"consortium\": \"NOUN\",\n\t\t\t\"compartmentalize\": \"VERB\",\n\t\t\t\"hong-kong\": \"PROPN\",\n\t\t\t\"devise\": \"VERB\",\n\t\t\t\"chattering\": \"ADJ\",\n\t\t\t\"crosstab\": \"NOUN\",\n\t\t\t\"call\": \"VERB\",\n\t\t\t\"escalation\": \"NOUN\",\n\t\t\t\"agriculture\": \"NOUN\",\n\t\t\t\"+++++\": \"PUNCT\",\n\t\t\t\"aziz\": \"PROPN\",\n\t\t\t\"1846\": \"NUM\",\n\t\t\t\"transmission\": \"NOUN\",\n\t\t\t\"cripple\": \"VERB\",\n\t\t\t\"patriotic\": \"ADJ\",\n\t\t\t\"aldo\": \"PROPN\",\n\t\t\t\"va.\": \"PROPN\",\n\t\t\t\"function\": \"NOUN\",\n\t\t\t\"asset\": \"NOUN\",\n\t\t\t\"bathtub\": \"NOUN\",\n\t\t\t\"complaining\": \"VERB\",\n\t\t\t\"lamentation\": \"NOUN\",\n\t\t\t\"clay\": \"NOUN\",\n\t\t\t\"preorder\": \"NOUN\",\n\t\t\t\"sacks\": \"PROPN\",\n\t\t\t\"wantons\": \"NOUN\",\n\t\t\t\"kobey\": \"PROPN\",\n\t\t\t\"excluded\": \"VERB\",\n\t\t\t\"formality\": \"NOUN\",\n\t\t\t\"cycle\": \"NOUN\",\n\t\t\t\"triage\": \"NOUN\",\n\t\t\t\"redwood\": \"NOUN\",\n\t\t\t\"kori\": \"PROPN\",\n\t\t\t\"knudsen\": \"PROPN\",\n\t\t\t\"ayad\": \"PROPN\",\n\t\t\t\"shiny\": \"ADJ\",\n\t\t\t\"butter-hearted\": \"ADJ\",\n\t\t\t\"commander\": \"NOUN\",\n\t\t\t\"surround\": \"VERB\",\n\t\t\t\"depress\": \"VERB\",\n\t\t\t\"headline\": \"NOUN\",\n\t\t\t\"adhamiya\": \"PROPN\",\n\t\t\t\"exurbs\": \"NOUN\",\n\t\t\t\"extraordinary\": \"ADJ\",\n\t\t\t\"caparrós\": \"PROPN\",\n\t\t\t\"1600s\": \"NOUN\",\n\t\t\t\"fincher\": \"PROPN\",\n\t\t\t\"98.7\": \"NUM\",\n\t\t\t\"conditional\": \"ADJ\",\n\t\t\t\"sorority\": \"NOUN\",\n\t\t\t\"cooperate\": \"VERB\",\n\t\t\t\"quarrel\": \"NOUN\",\n\t\t\t\"contractor\": \"NOUN\",\n\t\t\t\"bridges\": \"NOUN\",\n\t\t\t\"symbiote\": \"PROPN\",\n\t\t\t\"inspires\": \"VERB\",\n\t\t\t\"suleiman\": \"PROPN\",\n\t\t\t\"libra\": \"PROPN\",\n\t\t\t\"lent\": \"VERB\",\n\t\t\t\"cooperating\": \"VERB\",\n\t\t\t\"queueing\": \"VERB\",\n\t\t\t\"driveby\": \"ADJ\",\n\t\t\t\"savagely\": \"ADV\",\n\t\t\t\"hoped\": \"VERB\",\n\t\t\t\"las\": \"PROPN\",\n\t\t\t\"polmar\": \"PROPN\",\n\t\t\t\"awake\": \"ADJ\",\n\t\t\t\"homeland\": \"NOUN\",\n\t\t\t\"decisions\": \"NOUN\",\n\t\t\t\"odara\": \"PROPN\",\n\t\t\t\"ji\": \"PROPN\",\n\t\t\t\"sulfate\": \"NOUN\",\n\t\t\t\"10/31/00\": \"NUM\",\n\t\t\t\"examples\": \"NOUN\",\n\t\t\t\"periods\": \"NOUN\",\n\t\t\t\"douglas\": \"PROPN\",\n\t\t\t\"gloating\": \"VERB\",\n\t\t\t\"acquittal\": \"NOUN\",\n\t\t\t\"alliance\": \"NOUN\",\n\t\t\t\"charred\": \"VERB\",\n\t\t\t\"majorca\": \"PROPN\",\n\t\t\t\"uncovered\": \"VERB\",\n\t\t\t\"fidgeted\": \"VERB\",\n\t\t\t\"candle\": \"NOUN\",\n\t\t\t\"bron-\": \"INTJ\",\n\t\t\t\"technologically\": \"ADV\",\n\t\t\t\"introduces\": \"VERB\",\n\t\t\t\"involving\": \"VERB\",\n\t\t\t\"closet\": \"NOUN\",\n\t\t\t\"pollution\": \"NOUN\",\n\t\t\t\"oryana\": \"PROPN\",\n\t\t\t\"andrew\": \"PROPN\",\n\t\t\t\"interminable\": \"ADJ\",\n\t\t\t\"soviets\": \"PROPN\",\n\t\t\t\"detrimental\": \"ADJ\",\n\t\t\t\"commands\": \"NOUN\",\n\t\t\t\"vanity\": \"NOUN\",\n\t\t\t\"hairpin\": \"NOUN\",\n\t\t\t\"pizzas\": \"NOUN\",\n\t\t\t\"aquileia\": \"PROPN\",\n\t\t\t\"attempts\": \"NOUN\",\n\t\t\t\"rosalee\": \"PROPN\",\n\t\t\t\"shots\": \"NOUN\",\n\t\t\t\"systems\": \"NOUN\",\n\t\t\t\"producers\": \"NOUN\",\n\t\t\t\"lemoine\": \"PROPN\",\n\t\t\t\"genital\": \"NOUN\",\n\t\t\t\"mystical\": \"ADJ\",\n\t\t\t\"gleason\": \"PROPN\",\n\t\t\t\"pigeon\": \"NOUN\",\n\t\t\t\"crowley\": \"PROPN\",\n\t\t\t\"#cognitivebias\": \"PROPN\",\n\t\t\t\"ladakh\": \"PROPN\",\n\t\t\t\"theropods\": \"NOUN\",\n\t\t\t\"categorically\": \"ADV\",\n\t\t\t\"wary\": \"ADJ\",\n\t\t\t\"strasbourg\": \"PROPN\",\n\t\t\t\":d\": \"SYM\",\n\t\t\t\"bulletin\": \"NOUN\",\n\t\t\t\"overthrough\": \"VERB\",\n\t\t\t\"voice\": \"NOUN\",\n\t\t\t\"pertains\": \"VERB\",\n\t\t\t\"ismat\": \"PROPN\",\n\t\t\t\"2100\": \"NUM\",\n\t\t\t\"kedourie\": \"PROPN\",\n\t\t\t\"``\": \"PUNCT\",\n\t\t\t\"mars\": \"PROPN\",\n\t\t\t\"shiraz\": \"PROPN\",\n\t\t\t\"rare\": \"ADJ\",\n\t\t\t\"tentative\": \"ADJ\",\n\t\t\t\"leaked\": \"VERB\",\n\t\t\t\"territories\": \"NOUN\",\n\t\t\t\"super-human\": \"ADJ\",\n\t\t\t\"busybodies\": \"NOUN\",\n\t\t\t\"determined\": \"VERB\",\n\t\t\t\"houston\": \"PROPN\",\n\t\t\t\"ms.\": \"PROPN\",\n\t\t\t\"dean\": \"PROPN\",\n\t\t\t\"owners\": \"NOUN\",\n\t\t\t\"nor\": \"CCONJ\",\n\t\t\t\"realy\": \"ADV\",\n\t\t\t\"jerusalem\": \"PROPN\",\n\t\t\t\"defuses\": \"VERB\",\n\t\t\t\"runaround\": \"NOUN\",\n\t\t\t\"widgets\": \"NOUN\",\n\t\t\t\"reliability\": \"NOUN\",\n\t\t\t\"soldier\": \"NOUN\",\n\t\t\t\"instrumental\": \"ADJ\",\n\t\t\t\"05:39\": \"NUM\",\n\t\t\t\"uni\": \"NOUN\",\n\t\t\t\"six\": \"NUM\",\n\t\t\t\"f'ers\": \"NOUN\",\n\t\t\t\"veiled\": \"VERB\",\n\t\t\t\"330i\": \"PROPN\",\n\t\t\t\"jerome\": \"PROPN\",\n\t\t\t\"gently\": \"ADV\",\n\t\t\t\"knights\": \"NOUN\",\n\t\t\t\"spinal\": \"ADJ\",\n\t\t\t\"perfecting\": \"VERB\",\n\t\t\t\"eric\": \"PROPN\",\n\t\t\t\"collaborator\": \"NOUN\",\n\t\t\t\"as400\": \"NOUN\",\n\t\t\t\"though\": \"SCONJ\",\n\t\t\t\"murders\": \"NOUN\",\n\t\t\t\"85\": \"NUM\",\n\t\t\t\"borgin\": \"PROPN\",\n\t\t\t\"http://bit.ly/kplaylists\": \"PROPN\",\n\t\t\t\"flashlight\": \"NOUN\",\n\t\t\t\"filed\": \"VERB\",\n\t\t\t\"chessboard\": \"NOUN\",\n\t\t\t\"unusual\": \"ADJ\",\n\t\t\t\"battles\": \"NOUN\",\n\t\t\t\"francisco.pinto.leite@enron.com\": \"PROPN\",\n\t\t\t\"concluded\": \"VERB\",\n\t\t\t\"gmt\": \"PROPN\",\n\t\t\t\"backpedalling\": \"VERB\",\n\t\t\t\"pause\": \"NOUN\",\n\t\t\t\"epistemology\": \"NOUN\",\n\t\t\t\"cult\": \"NOUN\",\n\t\t\t\"eyes\": \"NOUN\",\n\t\t\t\"exclusion\": \"NOUN\",\n\t\t\t\"carroll\": \"PROPN\",\n\t\t\t\"locust\": \"PROPN\",\n\t\t\t\"launchers\": \"NOUN\",\n\t\t\t\"§\": \"SYM\",\n\t\t\t\"bella\": \"ADJ\",\n\t\t\t\"gradual\": \"ADJ\",\n\t\t\t\"recognised\": \"VERB\",\n\t\t\t\"para.\": \"NOUN\",\n\t\t\t\"hindlimb\": \"NOUN\",\n\t\t\t\"pop\": \"NOUN\",\n\t\t\t\"soy\": \"NOUN\",\n\t\t\t\"rigid\": \"ADJ\",\n\t\t\t\"syntheses\": \"NOUN\",\n\t\t\t\"spanned\": \"VERB\",\n\t\t\t\"mtv\": \"PROPN\",\n\t\t\t\"ayatollah\": \"PROPN\",\n\t\t\t\"marbled\": \"VERB\",\n\t\t\t\"apa\": \"PROPN\",\n\t\t\t\"180.9\": \"NUM\",\n\t\t\t\"stroke\": \"NOUN\",\n\t\t\t\"153b09\": \"PROPN\",\n\t\t\t\"predators\": \"NOUN\",\n\t\t\t\"artwork\": \"NOUN\",\n\t\t\t\"mindful\": \"ADJ\",\n\t\t\t\"rudeness\": \"NOUN\",\n\t\t\t\"cantering\": \"VERB\",\n\t\t\t\"stanley\": \"PROPN\",\n\t\t\t\"concerted\": \"ADJ\",\n\t\t\t\"confront\": \"VERB\",\n\t\t\t\"lack\": \"NOUN\",\n\t\t\t\"luna\": \"NOUN\",\n\t\t\t\"bridgeline\": \"PROPN\",\n\t\t\t\"forty-foot\": \"NOUN\",\n\t\t\t\">:(\": \"SYM\",\n\t\t\t\"asap\": \"ADV\",\n\t\t\t\"distinct\": \"ADJ\",\n\t\t\t\"glared\": \"VERB\",\n\t\t\t\"handsome\": \"ADJ\",\n\t\t\t\"statistics\": \"NOUN\",\n\t\t\t\"thereby\": \"ADV\",\n\t\t\t\"waitresses\": \"NOUN\",\n\t\t\t\"kindness\": \"NOUN\",\n\t\t\t\"descendants\": \"NOUN\",\n\t\t\t\"s1\": \"PROPN\",\n\t\t\t\"albania\": \"PROPN\",\n\t\t\t\"ocnversation\": \"NOUN\",\n\t\t\t\"gesture\": \"NOUN\",\n\t\t\t\"713-853-3044\": \"NUM\",\n\t\t\t\"accessed\": \"VERB\",\n\t\t\t\"reviewer\": \"NOUN\",\n\t\t\t\"implant\": \"NOUN\",\n\t\t\t\"scones\": \"NOUN\",\n\t\t\t\"ebay\": \"PROPN\",\n\t\t\t\"r\": \"AUX\",\n\t\t\t\"thes\": \"DET\",\n\t\t\t\"stepping\": \"VERB\",\n\t\t\t\"scathalos\": \"PROPN\",\n\t\t\t\"nudging\": \"NOUN\",\n\t\t\t\"racism\": \"NOUN\",\n\t\t\t\"options\": \"NOUN\",\n\t\t\t\"mhc\": \"PROPN\",\n\t\t\t\"wentzes\": \"PROPN\",\n\t\t\t\"masses\": \"NOUN\",\n\t\t\t\"hooray\": \"INTJ\",\n\t\t\t\"novelist\": \"NOUN\",\n\t\t\t\"remarks\": \"NOUN\",\n\t\t\t\"http://www.environmentalchemistry.com/yogi/hazmat/articles/chernobyl1.html\": \"PROPN\",\n\t\t\t\"shaky\": \"ADJ\",\n\t\t\t\"mulberry\": \"PROPN\",\n\t\t\t\"colleague\": \"NOUN\",\n\t\t\t\"layers\": \"NOUN\",\n\t\t\t\"khaled\": \"PROPN\",\n\t\t\t\"snatched\": \"VERB\",\n\t\t\t\"jaffa\": \"PROPN\",\n\t\t\t\"unsure\": \"ADJ\",\n\t\t\t\"1701\": \"NUM\",\n\t\t\t\"going\": \"VERB\",\n\t\t\t\"detectors\": \"NOUN\",\n\t\t\t\"kia\": \"PROPN\",\n\t\t\t\"st\": \"PROPN\",\n\t\t\t\"underlip\": \"NOUN\",\n\t\t\t\"completely\": \"ADV\",\n\t\t\t\"amendmnets\": \"NOUN\",\n\t\t\t\"rev.\": \"PROPN\",\n\t\t\t\"sponoring\": \"VERB\",\n\t\t\t\"natsuko\": \"PROPN\",\n\t\t\t\"hoffman\": \"PROPN\",\n\t\t\t\"stranger\": \"NOUN\",\n\t\t\t\"assure\": \"VERB\",\n\t\t\t\"songwriter\": \"NOUN\",\n\t\t\t\"larry\": \"PROPN\",\n\t\t\t\"reorganization\": \"NOUN\",\n\t\t\t\"re-use\": \"VERB\",\n\t\t\t\"spells\": \"NOUN\",\n\t\t\t\"novgorod\": \"PROPN\",\n\t\t\t\"data\": \"NOUN\",\n\t\t\t\"experimented\": \"VERB\",\n\t\t\t\"sneakers\": \"NOUN\",\n\t\t\t\"2539\": \"NUM\",\n\t\t\t\"polished\": \"ADJ\",\n\t\t\t\"alvin\": \"PROPN\",\n\t\t\t\"foster\": \"NOUN\",\n\t\t\t\"inferno\": \"NOUN\",\n\t\t\t\"venerable\": \"ADJ\",\n\t\t\t\"prison\": \"NOUN\",\n\t\t\t\"researching\": \"VERB\",\n\t\t\t\"anemones\": \"NOUN\",\n\t\t\t\"pea\": \"NOUN\",\n\t\t\t\"smithy\": \"NOUN\",\n\t\t\t\"ortega\": \"PROPN\",\n\t\t\t\"cuz\": \"SCONJ\",\n\t\t\t\"raid\": \"NOUN\",\n\t\t\t\"ie6\": \"PROPN\",\n\t\t\t\"attacking\": \"VERB\",\n\t\t\t\"mcdonald\": \"PROPN\",\n\t\t\t\"tagg\": \"NOUN\",\n\t\t\t\"presidency\": \"PROPN\",\n\t\t\t\"innovate\": \"VERB\",\n\t\t\t\"madly\": \"ADV\",\n\t\t\t\"uncomfortably\": \"ADV\",\n\t\t\t\"tribes\": \"NOUN\",\n\t\t\t\"sacrifice\": \"NOUN\",\n\t\t\t\"siu-lai\": \"PROPN\",\n\t\t\t\"rangatira\": \"PROPN\",\n\t\t\t\"email\": \"NOUN\",\n\t\t\t\"barstool\": \"PROPN\",\n\t\t\t\"owed\": \"VERB\",\n\t\t\t\"philosophiae\": \"PROPN\",\n\t\t\t\"christensen\": \"PROPN\",\n\t\t\t\"moyross\": \"PROPN\",\n\t\t\t\"restored\": \"VERB\",\n\t\t\t\"re-trained\": \"VERB\",\n\t\t\t\"witch\": \"NOUN\",\n\t\t\t\"farms\": \"NOUN\",\n\t\t\t\"photographer\": \"NOUN\",\n\t\t\t\"indices\": \"NOUN\",\n\t\t\t\"mast\": \"NOUN\",\n\t\t\t\"irritate\": \"VERB\",\n\t\t\t\"quantitative\": \"ADJ\",\n\t\t\t\"l'\": \"PROPN\",\n\t\t\t\"dragging\": \"VERB\",\n\t\t\t\"portrayed\": \"VERB\",\n\t\t\t\"tropical\": \"ADJ\",\n\t\t\t\"interquartile\": \"ADJ\",\n\t\t\t\"(:\": \"SYM\",\n\t\t\t\"moher\": \"PROPN\",\n\t\t\t\"agreed\": \"VERB\",\n\t\t\t\"valencia\": \"PROPN\",\n\t\t\t\"pescheux\": \"PROPN\",\n\t\t\t\"missionary\": \"NOUN\",\n\t\t\t\"creating\": \"VERB\",\n\t\t\t\"register\": \"VERB\",\n\t\t\t\"refusals\": \"NOUN\",\n\t\t\t\"blocked\": \"VERB\",\n\t\t\t\"simplistically\": \"ADV\",\n\t\t\t\"cleveland\": \"PROPN\",\n\t\t\t\"hackneyed\": \"ADJ\",\n\t\t\t\"medicinal\": \"ADJ\",\n\t\t\t\"dangerously\": \"ADV\",\n\t\t\t\"ben-gurion\": \"PROPN\",\n\t\t\t\"no-59\": \"NUM\",\n\t\t\t\"blaze\": \"NOUN\",\n\t\t\t\"cleaning\": \"VERB\",\n\t\t\t\"nashville\": \"PROPN\",\n\t\t\t\"zoo\": \"NOUN\",\n\t\t\t\"warn\": \"VERB\",\n\t\t\t\"pricy\": \"ADJ\",\n\t\t\t\"apostrophe\": \"NOUN\",\n\t\t\t\"graphics\": \"NOUN\",\n\t\t\t\"217\": \"NUM\",\n\t\t\t\"approve\": \"VERB\",\n\t\t\t\"kindopp\": \"PROPN\",\n\t\t\t\"cites\": \"VERB\",\n\t\t\t\"staff\": \"NOUN\",\n\t\t\t\"50th\": \"ADJ\",\n\t\t\t\"man-\": \"NOUN\",\n\t\t\t\"ozs\": \"NOUN\",\n\t\t\t\"clashing\": \"ADJ\",\n\t\t\t\"maple\": \"NOUN\",\n\t\t\t\"erith\": \"PROPN\",\n\t\t\t\"rag\": \"NOUN\",\n\t\t\t\"commissioner\": \"NOUN\",\n\t\t\t\"sometime\": \"ADV\",\n\t\t\t\"eatables\": \"NOUN\",\n\t\t\t\"preoccupied\": \"VERB\",\n\t\t\t\"amazingly\": \"ADV\",\n\t\t\t\"impatiently\": \"ADV\",\n\t\t\t\"hardly\": \"ADV\",\n\t\t\t\"mare\": \"NOUN\",\n\t\t\t\"mousey\": \"ADJ\",\n\t\t\t\"noiseless\": \"ADJ\",\n\t\t\t\"roaring\": \"VERB\",\n\t\t\t\"catering\": \"NOUN\",\n\t\t\t\"boiled\": \"VERB\",\n\t\t\t\"trimmer\": \"NOUN\",\n\t\t\t\"ruins\": \"NOUN\",\n\t\t\t\"martyrs\": \"NOUN\",\n\t\t\t\"examination\": \"NOUN\",\n\t\t\t\"leah\": \"PROPN\",\n\t\t\t\"forget\": \"VERB\",\n\t\t\t\"implies\": \"VERB\",\n\t\t\t\"headcount\": \"NOUN\",\n\t\t\t\"improvement\": \"NOUN\",\n\t\t\t\"differences\": \"NOUN\",\n\t\t\t\"counts\": \"NOUN\",\n\t\t\t\"96\": \"NUM\",\n\t\t\t\"tom\": \"PROPN\",\n\t\t\t\"process\": \"NOUN\",\n\t\t\t\"atwood\": \"PROPN\",\n\t\t\t\"persuasion\": \"NOUN\",\n\t\t\t\"bilmes\": \"PROPN\",\n\t\t\t\"milieu\": \"NOUN\",\n\t\t\t\"finance\": \"NOUN\",\n\t\t\t\"chow\": \"PROPN\",\n\t\t\t\"legislate\": \"VERB\",\n\t\t\t\"gentlemen\": \"NOUN\",\n\t\t\t\"disclosures\": \"NOUN\",\n\t\t\t\"test\": \"NOUN\",\n\t\t\t\"understands\": \"VERB\",\n\t\t\t\"martínez\": \"PROPN\",\n\t\t\t\"score\": \"NOUN\",\n\t\t\t\"rot\": \"NOUN\",\n\t\t\t\"d'enfer\": \"PROPN\",\n\t\t\t\"loyalty\": \"NOUN\",\n\t\t\t\"pastry\": \"NOUN\",\n\t\t\t\"59,339\": \"NUM\",\n\t\t\t\"birdman\": \"PROPN\",\n\t\t\t\"rac\": \"NOUN\",\n\t\t\t\"blandness\": \"NOUN\",\n\t\t\t\"riots\": \"NOUN\",\n\t\t\t\"multisite\": \"ADJ\",\n\t\t\t\"value\": \"NOUN\",\n\t\t\t\"crevices\": \"NOUN\",\n\t\t\t\"invariably\": \"ADV\",\n\t\t\t\"nhut\": \"PROPN\",\n\t\t\t\"18t\": \"NOUN\",\n\t\t\t\"losers\": \"NOUN\",\n\t\t\t\"foot\": \"NOUN\",\n\t\t\t\"earrings\": \"NOUN\",\n\t\t\t\"pronouncements\": \"NOUN\",\n\t\t\t\"1999\": \"NUM\",\n\t\t\t\"ojala\": \"PROPN\",\n\t\t\t\"governs\": \"VERB\",\n\t\t\t\"complex\": \"ADJ\",\n\t\t\t\"advances\": \"NOUN\",\n\t\t\t\"blanket\": \"NOUN\",\n\t\t\t\"fifteen\": \"NUM\",\n\t\t\t\"performances\": \"NOUN\",\n\t\t\t\"topple\": \"VERB\",\n\t\t\t\"ambitious\": \"ADJ\",\n\t\t\t\"karine\": \"PROPN\",\n\t\t\t\"recognizing\": \"VERB\",\n\t\t\t\"works\": \"NOUN\",\n\t\t\t\"wildest\": \"ADJ\",\n\t\t\t\"37\": \"NUM\",\n\t\t\t\"persians\": \"NOUN\",\n\t\t\t\"cheesecloth\": \"NOUN\",\n\t\t\t\"riedell\": \"PROPN\",\n\t\t\t\"remainder\": \"NOUN\",\n\t\t\t\"adverb\": \"NOUN\",\n\t\t\t\"bacon\": \"PROPN\",\n\t\t\t\"stable\": \"ADJ\",\n\t\t\t\"ernest\": \"PROPN\",\n\t\t\t\"glimpses\": \"NOUN\",\n\t\t\t\"281-735-5919\": \"NUM\",\n\t\t\t\"husbands\": \"NOUN\",\n\t\t\t\"01/12/2001\": \"NUM\",\n\t\t\t\"dissolves\": \"VERB\",\n\t\t\t\"pucker\": \"NOUN\",\n\t\t\t\"addicting\": \"ADJ\",\n\t\t\t\"explosive\": \"ADJ\",\n\t\t\t\"recording\": \"NOUN\",\n\t\t\t\"nonetheless\": \"ADV\",\n\t\t\t\"legion\": \"PROPN\",\n\t\t\t\"complexion\": \"NOUN\",\n\t\t\t\"detective\": \"NOUN\",\n\t\t\t\"h-0218/97\": \"NUM\",\n\t\t\t\"stemmed\": \"VERB\",\n\t\t\t\"irritable-looking\": \"ADJ\",\n\t\t\t\"europol\": \"PROPN\",\n\t\t\t\"okmulgee\": \"PROPN\",\n\t\t\t\"rejoice\": \"VERB\",\n\t\t\t\"wagged\": \"VERB\",\n\t\t\t\"allah\": \"PROPN\",\n\t\t\t\"mo\": \"PROPN\",\n\t\t\t\"township\": \"NOUN\",\n\t\t\t\"ekrapels@esaibos.com\": \"PROPN\",\n\t\t\t\"necklace\": \"NOUN\",\n\t\t\t\"fighter\": \"NOUN\",\n\t\t\t\"friedkin\": \"PROPN\",\n\t\t\t\"unscear\": \"PROPN\",\n\t\t\t\"ordered\": \"VERB\",\n\t\t\t\"desirable\": \"ADJ\",\n\t\t\t\"innovations\": \"NOUN\",\n\t\t\t\"jo-ann\": \"PROPN\",\n\t\t\t\"commonest\": \"ADJ\",\n\t\t\t\"ignited\": \"VERB\",\n\t\t\t\"considerable\": \"ADJ\",\n\t\t\t\"lost\": \"VERB\",\n\t\t\t\"academic\": \"ADJ\",\n\t\t\t\"notebook\": \"NOUN\",\n\t\t\t\"henga\": \"PROPN\",\n\t\t\t\"prod\": \"NOUN\",\n\t\t\t\"ambition\": \"NOUN\",\n\t\t\t\"queso\": \"NOUN\",\n\t\t\t\"soulless\": \"ADJ\",\n\t\t\t\"fatally\": \"ADV\",\n\t\t\t\"mb\": \"PROPN\",\n\t\t\t\"window-sill\": \"NOUN\",\n\t\t\t\"oozed\": \"VERB\",\n\t\t\t\"mc\": \"PROPN\",\n\t\t\t\"pastorino\": \"PROPN\",\n\t\t\t\"qāpū\": \"PROPN\",\n\t\t\t\"accountability\": \"NOUN\",\n\t\t\t\"continues\": \"VERB\",\n\t\t\t\"offspring\": \"NOUN\",\n\t\t\t\"actress\": \"NOUN\",\n\t\t\t\"brazilian\": \"ADJ\",\n\t\t\t\"byargeon\": \"PROPN\",\n\t\t\t\"verde\": \"NOUN\",\n\t\t\t\"wound\": \"VERB\",\n\t\t\t\"rosters\": \"NOUN\",\n\t\t\t\"shirtsleeves\": \"NOUN\",\n\t\t\t\"voiced\": \"VERB\",\n\t\t\t\"tyrants\": \"NOUN\",\n\t\t\t\"classmate\": \"NOUN\",\n\t\t\t\"t.\": \"PROPN\",\n\t\t\t\"carter\": \"PROPN\",\n\t\t\t\"emerging\": \"VERB\",\n\t\t\t\"youre\": \"PRON\",\n\t\t\t\"rural\": \"ADJ\",\n\t\t\t\"rack\": \"NOUN\",\n\t\t\t\"blaming\": \"VERB\",\n\t\t\t\"drawing\": \"VERB\",\n\t\t\t\"carven\": \"VERB\",\n\t\t\t\"distinguishes\": \"VERB\",\n\t\t\t\"conceptualize\": \"VERB\",\n\t\t\t\"visible\": \"ADJ\",\n\t\t\t\"freshman\": \"NOUN\",\n\t\t\t\"supported\": \"VERB\",\n\t\t\t\"manyema\": \"PROPN\",\n\t\t\t\"33,000\": \"NUM\",\n\t\t\t\"mankind\": \"NOUN\",\n\t\t\t\"crafting\": \"VERB\",\n\t\t\t\"hostess\": \"NOUN\",\n\t\t\t\"ip\": \"NOUN\",\n\t\t\t\"troop\": \"NOUN\",\n\t\t\t\"ashley\": \"PROPN\",\n\t\t\t\"commentary\": \"NOUN\",\n\t\t\t\"forces\": \"NOUN\",\n\t\t\t\"sown\": \"VERB\",\n\t\t\t\"become\": \"VERB\",\n\t\t\t\"tribal\": \"ADJ\",\n\t\t\t\"plaintiffs\": \"NOUN\",\n\t\t\t\"aspirations\": \"NOUN\",\n\t\t\t\"requesting\": \"VERB\",\n\t\t\t\"losing\": \"VERB\",\n\t\t\t\"scratches\": \"NOUN\",\n\t\t\t\"mmkay\": \"PROPN\",\n\t\t\t\"revived\": \"VERB\",\n\t\t\t\"pleaded\": \"VERB\",\n\t\t\t\"paq\": \"NOUN\",\n\t\t\t\"outnumbered\": \"VERB\",\n\t\t\t\"gallivanting\": \"VERB\",\n\t\t\t\"roughest\": \"ADJ\",\n\t\t\t\"tk\": \"PROPN\",\n\t\t\t\"reddest\": \"ADJ\",\n\t\t\t\"jehosaphat\": \"PROPN\",\n\t\t\t\"vitamins\": \"NOUN\",\n\t\t\t\"navarro\": \"PROPN\",\n\t\t\t\"pepperoni\": \"NOUN\",\n\t\t\t\"frankly\": \"ADV\",\n\t\t\t\"earnest\": \"NOUN\",\n\t\t\t\"drive\": \"VERB\",\n\t\t\t\"osteos\": \"NOUN\",\n\t\t\t\"'60's\": \"NOUN\",\n\t\t\t\"solheim\": \"PROPN\",\n\t\t\t\"prisons\": \"NOUN\",\n\t\t\t\"luca\": \"PROPN\",\n\t\t\t\"fun\": \"ADJ\",\n\t\t\t\"bilbray\": \"PROPN\",\n\t\t\t\"saltimboca\": \"NOUN\",\n\t\t\t\"friends\": \"NOUN\",\n\t\t\t\"audio-visual\": \"ADJ\",\n\t\t\t\"interval\": \"NOUN\",\n\t\t\t\"stars\": \"NOUN\",\n\t\t\t\"bald\": \"ADJ\",\n\t\t\t\"citation\": \"NOUN\",\n\t\t\t\"no-49\": \"NUM\",\n\t\t\t\"displayed\": \"VERB\",\n\t\t\t\"ca\": \"AUX\",\n\t\t\t\"reball\": \"NOUN\",\n\t\t\t\"gosier\": \"PROPN\",\n\t\t\t\"operators\": \"NOUN\",\n\t\t\t\"delicious\": \"ADJ\",\n\t\t\t\"prowess\": \"NOUN\",\n\t\t\t\"ramadi\": \"PROPN\",\n\t\t\t\"blindly\": \"ADV\",\n\t\t\t\"ferrous\": \"ADJ\",\n\t\t\t\"sort\": \"NOUN\",\n\t\t\t\"admired\": \"VERB\",\n\t\t\t\"soren\": \"PROPN\",\n\t\t\t\"deny\": \"VERB\",\n\t\t\t\"awards\": \"NOUN\",\n\t\t\t\"grain\": \"NOUN\",\n\t\t\t\"jangling\": \"VERB\",\n\t\t\t\"infinity\": \"NOUN\",\n\t\t\t\"enthusiastic\": \"ADJ\",\n\t\t\t\"come\": \"VERB\",\n\t\t\t\"pearls\": \"NOUN\",\n\t\t\t\"quantifying\": \"VERB\",\n\t\t\t\"01/11/2001\": \"NUM\",\n\t\t\t\"brendan\": \"PROPN\",\n\t\t\t\"do\": \"AUX\",\n\t\t\t\"muslim\": \"ADJ\",\n\t\t\t\"accusations\": \"NOUN\",\n\t\t\t\"causality\": \"NOUN\",\n\t\t\t\"relatedness\": \"NOUN\",\n\t\t\t\"shaved\": \"VERB\",\n\t\t\t\"formats\": \"NOUN\",\n\t\t\t\"mossy\": \"ADJ\",\n\t\t\t\"foil\": \"NOUN\",\n\t\t\t\"bartender\": \"NOUN\",\n\t\t\t\"703.729.2710\": \"NUM\",\n\t\t\t\"shoer\": \"NOUN\",\n\t\t\t\"workspace\": \"NOUN\",\n\t\t\t\"dentistry\": \"PROPN\",\n\t\t\t\"resolve\": \"VERB\",\n\t\t\t\"journalist\": \"NOUN\",\n\t\t\t\"enchladas\": \"NOUN\",\n\t\t\t\"disliked\": \"VERB\",\n\t\t\t\"bureau\": \"PROPN\",\n\t\t\t\"commended\": \"VERB\",\n\t\t\t\"dehydration\": \"NOUN\",\n\t\t\t\"claims\": \"NOUN\",\n\t\t\t\"deeds\": \"NOUN\",\n\t\t\t\"flyers\": \"NOUN\",\n\t\t\t\"navy\": \"NOUN\",\n\t\t\t\"pallor\": \"NOUN\",\n\t\t\t\"transcendental\": \"ADJ\",\n\t\t\t\"narcotic\": \"ADJ\",\n\t\t\t\"amusement\": \"NOUN\",\n\t\t\t\"arlington\": \"PROPN\",\n\t\t\t\"unpretentious\": \"ADJ\",\n\t\t\t\"broached\": \"VERB\",\n\t\t\t\"pay\": \"VERB\",\n\t\t\t\"banning\": \"VERB\",\n\t\t\t\"dignitary\": \"NOUN\",\n\t\t\t\"abundantly\": \"ADV\",\n\t\t\t\"admirals\": \"NOUN\",\n\t\t\t\"litterarum\": \"PROPN\",\n\t\t\t\"orr\": \"PROPN\",\n\t\t\t\"leisure\": \"NOUN\",\n\t\t\t\"roughened\": \"VERB\",\n\t\t\t\"buring\": \"VERB\",\n\t\t\t\"venality\": \"NOUN\",\n\t\t\t\"overflowing\": \"VERB\",\n\t\t\t\"booklist\": \"NOUN\",\n\t\t\t\"07\": \"NUM\",\n\t\t\t\"brocade\": \"NOUN\",\n\t\t\t\"sars-cov-2\": \"PROPN\",\n\t\t\t\"white\": \"ADJ\",\n\t\t\t\"mako\": \"PROPN\",\n\t\t\t\"munk\": \"PROPN\",\n\t\t\t\"robe\": \"NOUN\",\n\t\t\t\"shoddy\": \"ADJ\",\n\t\t\t\"408\": \"NUM\",\n\t\t\t\"meditative\": \"ADJ\",\n\t\t\t\"sturdy\": \"ADJ\",\n\t\t\t\"thanh\": \"PROPN\",\n\t\t\t\"1776\": \"NUM\",\n\t\t\t\"considerate\": \"ADJ\",\n\t\t\t\"1996-1997\": \"NUM\",\n\t\t\t\"http://www.time.com/time/daily/chernobyl/860901.accident.html\": \"PROPN\",\n\t\t\t\"unfavorable\": \"ADJ\",\n\t\t\t\"temples\": \"NOUN\",\n\t\t\t\"killings\": \"NOUN\",\n\t\t\t\"titan\": \"PROPN\",\n\t\t\t\"insult\": \"NOUN\",\n\t\t\t\"analyst\": \"NOUN\",\n\t\t\t\"nicklaus\": \"PROPN\",\n\t\t\t\"trenerry\": \"PROPN\",\n\t\t\t\"polansky\": \"PROPN\",\n\t\t\t\"aerocom\": \"PROPN\",\n\t\t\t\"11608\": \"NUM\",\n\t\t\t\"conciliation\": \"NOUN\",\n\t\t\t\"adorama\": \"PROPN\",\n\t\t\t\"rosewater\": \"NOUN\",\n\t\t\t\"whisk\": \"VERB\",\n\t\t\t\"repetitive\": \"ADJ\",\n\t\t\t\"cropdusters\": \"NOUN\",\n\t\t\t\"sassi\": \"PROPN\",\n\t\t\t\"instantaneously\": \"ADV\",\n\t\t\t\"2022\": \"NUM\",\n\t\t\t\"scots\": \"PROPN\",\n\t\t\t\"quat\": \"PROPN\",\n\t\t\t\"restore\": \"VERB\",\n\t\t\t\"t3i\": \"NOUN\",\n\t\t\t\"withhold\": \"VERB\",\n\t\t\t\"janis\": \"PROPN\",\n\t\t\t\"dumping\": \"NOUN\",\n\t\t\t\"petroleum\": \"NOUN\",\n\t\t\t\"steamer\": \"NOUN\",\n\t\t\t\"statistic\": \"NOUN\",\n\t\t\t\"swaying\": \"VERB\",\n\t\t\t\"nos\": \"NOUN\",\n\t\t\t\"norwegians\": \"PROPN\",\n\t\t\t\"montenegro\": \"PROPN\",\n\t\t\t\"frontier\": \"PROPN\",\n\t\t\t\"rods\": \"NOUN\",\n\t\t\t\"rotten\": \"ADJ\",\n\t\t\t\"raising\": \"VERB\",\n\t\t\t\"senseless\": \"ADJ\",\n\t\t\t\"elites\": \"NOUN\",\n\t\t\t\"modrian\": \"PROPN\",\n\t\t\t\"prophetic\": \"ADJ\",\n\t\t\t\"meters\": \"NOUN\",\n\t\t\t\"havens\": \"NOUN\",\n\t\t\t\"iain\": \"PROPN\",\n\t\t\t\"possessions\": \"NOUN\",\n\t\t\t\"keyboard\": \"NOUN\",\n\t\t\t\"6.2.1\": \"NUM\",\n\t\t\t\"poop\": \"NOUN\",\n\t\t\t\"sociable\": \"ADJ\",\n\t\t\t\"condo\": \"NOUN\",\n\t\t\t\"bellini\": \"PROPN\",\n\t\t\t\"authorizing\": \"VERB\",\n\t\t\t\"applaud\": \"VERB\",\n\t\t\t\"1,350\": \"NUM\",\n\t\t\t\"chineze\": \"ADJ\",\n\t\t\t\"sercvice\": \"NOUN\",\n\t\t\t\"enrolled\": \"VERB\",\n\t\t\t\"legendary\": \"ADJ\",\n\t\t\t\"objectivity\": \"NOUN\",\n\t\t\t\"nimbus\": \"PROPN\",\n\t\t\t\"lotus-flower\": \"NOUN\",\n\t\t\t\"blown\": \"VERB\",\n\t\t\t\"welch\": \"PROPN\",\n\t\t\t\"postacetabular\": \"ADJ\",\n\t\t\t\"inca\": \"PROPN\",\n\t\t\t\"unpaid\": \"ADJ\",\n\t\t\t\"arena\": \"NOUN\",\n\t\t\t\"culprit\": \"NOUN\",\n\t\t\t\"3.4\": \"NUM\",\n\t\t\t\"boycott\": \"NOUN\",\n\t\t\t\"haedicke\": \"PROPN\",\n\t\t\t\"murals\": \"NOUN\",\n\t\t\t\"unreachable\": \"ADJ\",\n\t\t\t\"embarrased\": \"ADJ\",\n\t\t\t\"unreal\": \"ADJ\",\n\t\t\t\"watchers\": \"NOUN\",\n\t\t\t\"risk\": \"NOUN\",\n\t\t\t\"paradise\": \"NOUN\",\n\t\t\t\"critic\": \"NOUN\",\n\t\t\t\"acquisition\": \"NOUN\",\n\t\t\t\"upstairs\": \"ADV\",\n\t\t\t\"crooks\": \"NOUN\",\n\t\t\t\"firepower\": \"NOUN\",\n\t\t\t\"trim\": \"VERB\",\n\t\t\t\"juggernaut\": \"PROPN\",\n\t\t\t\"containing\": \"VERB\",\n\t\t\t\"rainer\": \"PROPN\",\n\t\t\t\"likelihood\": \"NOUN\",\n\t\t\t\"refugee\": \"NOUN\",\n\t\t\t\"patience\": \"NOUN\",\n\t\t\t\"polarized\": \"VERB\",\n\t\t\t\"inked\": \"VERB\",\n\t\t\t\"248\": \"NUM\",\n\t\t\t\"galloping\": \"VERB\",\n\t\t\t\"0.8\": \"NUM\",\n\t\t\t\"vibe\": \"NOUN\",\n\t\t\t\"malignant\": \"ADJ\",\n\t\t\t\"divide\": \"VERB\",\n\t\t\t\"depending\": \"VERB\",\n\t\t\t\"burglar\": \"NOUN\",\n\t\t\t\"straw\": \"NOUN\",\n\t\t\t\"brazen\": \"ADJ\",\n\t\t\t\"stewardship\": \"NOUN\",\n\t\t\t\"sleepy\": \"ADJ\",\n\t\t\t\"ips\": \"PROPN\",\n\t\t\t\"grim\": \"ADJ\",\n\t\t\t\"eliminate\": \"VERB\",\n\t\t\t\"apprentice\": \"NOUN\",\n\t\t\t\"repay\": \"VERB\",\n\t\t\t\"dates\": \"NOUN\",\n\t\t\t\"03/16/2001\": \"NUM\",\n\t\t\t\"insipid\": \"ADJ\",\n\t\t\t\"sock\": \"NOUN\",\n\t\t\t\"dew\": \"PROPN\",\n\t\t\t\"crete\": \"PROPN\",\n\t\t\t\"bolting\": \"VERB\",\n\t\t\t\"désirade\": \"PROPN\",\n\t\t\t\"scarf\": \"NOUN\",\n\t\t\t\"chipped\": \"VERB\",\n\t\t\t\"sidelines\": \"NOUN\",\n\t\t\t\"backbone\": \"NOUN\",\n\t\t\t\"adapts\": \"VERB\",\n\t\t\t\"tiziano\": \"PROPN\",\n\t\t\t\"hamdullah\": \"PROPN\",\n\t\t\t\"citrus\": \"ADJ\",\n\t\t\t\"trunks\": \"NOUN\",\n\t\t\t\"joints\": \"NOUN\",\n\t\t\t\"keeping\": \"VERB\",\n\t\t\t\"mmm\": \"INTJ\",\n\t\t\t\"greenspan\": \"PROPN\",\n\t\t\t\"72,000\": \"NUM\",\n\t\t\t\"reforms\": \"NOUN\",\n\t\t\t\"authoritarian\": \"ADJ\",\n\t\t\t\"compatibility\": \"NOUN\",\n\t\t\t\"http://www.droidforums.net/forum/droid-news/181335-ereader-tablet-comparison-b-n-nook-tablet-b-n-nook-color-kindle-fire-htc-flyer.html\": \"PROPN\",\n\t\t\t\"behaviour\": \"NOUN\",\n\t\t\t\"instructive\": \"ADJ\",\n\t\t\t\"kerrigan\": \"PROPN\",\n\t\t\t\"stared\": \"VERB\",\n\t\t\t\"professor\": \"PROPN\",\n\t\t\t\"mini-serial\": \"NOUN\",\n\t\t\t\"l.\": \"PROPN\",\n\t\t\t\"lifeguard\": \"NOUN\",\n\t\t\t\"odette\": \"PROPN\",\n\t\t\t\"sages\": \"NOUN\",\n\t\t\t\"say\": \"VERB\",\n\t\t\t\"inadequate\": \"ADJ\",\n\t\t\t\"scraps\": \"NOUN\",\n\t\t\t\"http://www.consumerreports.org/health/healthy-living/beauty-personal-care/hair-loss-10-08/hair-loss.htm\": \"PROPN\",\n\t\t\t\"regina\": \"PROPN\",\n\t\t\t\"immersed\": \"VERB\",\n\t\t\t\"tintman\": \"PROPN\",\n\t\t\t\"funny\": \"ADJ\",\n\t\t\t\"affords\": \"VERB\",\n\t\t\t\"intensified\": \"VERB\",\n\t\t\t\"icky\": \"ADJ\",\n\t\t\t\"convertible\": \"ADJ\",\n\t\t\t\"confessions\": \"PROPN\",\n\t\t\t\"labels\": \"NOUN\",\n\t\t\t\"manages\": \"VERB\",\n\t\t\t\"succinctly\": \"ADV\",\n\t\t\t\"debates\": \"NOUN\",\n\t\t\t\"medina\": \"PROPN\",\n\t\t\t\"relation\": \"NOUN\",\n\t\t\t\"switching\": \"VERB\",\n\t\t\t\"thinking\": \"VERB\",\n\t\t\t\"augustine\": \"PROPN\",\n\t\t\t\"mansoor\": \"PROPN\",\n\t\t\t\"ildefonso\": \"PROPN\",\n\t\t\t\"glare\": \"NOUN\",\n\t\t\t\"crumbles\": \"VERB\",\n\t\t\t\"cod\": \"NOUN\",\n\t\t\t\"vip\": \"NOUN\",\n\t\t\t\"anderson\": \"PROPN\",\n\t\t\t\"skiatook\": \"PROPN\",\n\t\t\t\"valentin\": \"PROPN\",\n\t\t\t\"midwife\": \"NOUN\",\n\t\t\t\"marcelo\": \"PROPN\",\n\t\t\t\"refrigerator\": \"NOUN\",\n\t\t\t\"faintly\": \"ADV\",\n\t\t\t\"circle\": \"NOUN\",\n\t\t\t\"stylists\": \"NOUN\",\n\t\t\t\"maynard\": \"PROPN\",\n\t\t\t\"latest\": \"ADJ\",\n\t\t\t\"spattering\": \"NOUN\",\n\t\t\t\"error\": \"NOUN\",\n\t\t\t\"uth\": \"NOUN\",\n\t\t\t\"exposures\": \"NOUN\",\n\t\t\t\"sleeve\": \"NOUN\",\n\t\t\t\"secretly\": \"ADV\",\n\t\t\t\"http://www.beardeddragon.org/articles/caresheet/?page=1\": \"PROPN\",\n\t\t\t\"groupings\": \"NOUN\",\n\t\t\t\"expo\": \"PROPN\",\n\t\t\t\"hurts\": \"VERB\",\n\t\t\t\"adriana\": \"PROPN\",\n\t\t\t\"teens\": \"NOUN\",\n\t\t\t\"sub-saharan\": \"ADJ\",\n\t\t\t\"preach\": \"VERB\",\n\t\t\t\"vehemently\": \"ADV\",\n\t\t\t\"irrespective\": \"ADV\",\n\t\t\t\"bone\": \"NOUN\",\n\t\t\t\"popo\": \"PROPN\",\n\t\t\t\"fineally\": \"ADV\",\n\t\t\t\"carbs\": \"NOUN\",\n\t\t\t\"ambitions\": \"NOUN\",\n\t\t\t\"fujairah\": \"PROPN\",\n\t\t\t\"agreement\": \"NOUN\",\n\t\t\t\"nehru\": \"PROPN\",\n\t\t\t\"photographic\": \"ADJ\",\n\t\t\t\"small\": \"ADJ\",\n\t\t\t\"discuss\": \"VERB\",\n\t\t\t\"sst\": \"NOUN\",\n\t\t\t\"topics\": \"NOUN\",\n\t\t\t\"rangott\": \"PROPN\",\n\t\t\t\"blacked\": \"VERB\",\n\t\t\t\"lethargy\": \"NOUN\",\n\t\t\t\"phuket\": \"PROPN\",\n\t\t\t\"jaws\": \"NOUN\",\n\t\t\t\"upland\": \"NOUN\",\n\t\t\t\"skewering\": \"VERB\",\n\t\t\t\"merry-minded\": \"ADJ\",\n\t\t\t\"rayburn\": \"PROPN\",\n\t\t\t\"awe\": \"NOUN\",\n\t\t\t\"dryer\": \"NOUN\",\n\t\t\t\"measure\": \"NOUN\",\n\t\t\t\"sea\": \"NOUN\",\n\t\t\t\"mortars\": \"NOUN\",\n\t\t\t\"responsibility\": \"NOUN\",\n\t\t\t\"lockhart\": \"PROPN\",\n\t\t\t\"electric\": \"ADJ\",\n\t\t\t\"whelped\": \"VERB\",\n\t\t\t\"baker\": \"PROPN\",\n\t\t\t\"sprits\": \"NOUN\",\n\t\t\t\"antivaxxers\": \"NOUN\",\n\t\t\t\"breathtaking\": \"ADJ\",\n\t\t\t\"haphazardly\": \"ADV\",\n\t\t\t\"orlando\": \"PROPN\",\n\t\t\t\"protestant\": \"ADJ\",\n\t\t\t\"licking\": \"VERB\",\n\t\t\t\"grimy\": \"ADJ\",\n\t\t\t\"sanwiches\": \"NOUN\",\n\t\t\t\"omitted\": \"VERB\",\n\t\t\t\"braysmith\": \"PROPN\",\n\t\t\t\"cramped\": \"ADJ\",\n\t\t\t\"mirrored\": \"ADJ\",\n\t\t\t\"municipal\": \"ADJ\",\n\t\t\t\"or\": \"CCONJ\",\n\t\t\t\"carrot\": \"NOUN\",\n\t\t\t\"autonomy\": \"NOUN\",\n\t\t\t\"grief\": \"NOUN\",\n\t\t\t\"hydor\": \"PROPN\",\n\t\t\t\"efrem\": \"PROPN\",\n\t\t\t\"vitas\": \"PROPN\",\n\t\t\t\"gruffly\": \"ADV\",\n\t\t\t\"poke\": \"VERB\",\n\t\t\t\"…\": \"PUNCT\",\n\t\t\t\"mekong\": \"PROPN\",\n\t\t\t\"correspond\": \"VERB\",\n\t\t\t\"acphillips\": \"PROPN\",\n\t\t\t\"perold\": \"PROPN\",\n\t\t\t\"leno\": \"PROPN\",\n\t\t\t\"rewriting\": \"VERB\",\n\t\t\t\"graveyard\": \"NOUN\",\n\t\t\t\"gangland\": \"NOUN\",\n\t\t\t\"published\": \"VERB\",\n\t\t\t\"view-only\": \"ADJ\",\n\t\t\t\"integrity\": \"NOUN\",\n\t\t\t\"deseret\": \"PROPN\",\n\t\t\t\"strasburgh\": \"PROPN\",\n\t\t\t\"layout\": \"NOUN\",\n\t\t\t\"preferable\": \"ADJ\",\n\t\t\t\"deck\": \"NOUN\",\n\t\t\t\"natives\": \"NOUN\",\n\t\t\t\"acapulco\": \"PROPN\",\n\t\t\t\"focused\": \"VERB\",\n\t\t\t\"rum\": \"NOUN\",\n\t\t\t\"france\": \"PROPN\",\n\t\t\t\"ihop\": \"PROPN\",\n\t\t\t\"objections\": \"NOUN\",\n\t\t\t\"recent\": \"ADJ\",\n\t\t\t\"merged\": \"VERB\",\n\t\t\t\"859-7187\": \"NUM\",\n\t\t\t\"disinclined\": \"ADJ\",\n\t\t\t\"secunia.com\": \"PROPN\",\n\t\t\t\"build\": \"VERB\",\n\t\t\t\"membership\": \"NOUN\",\n\t\t\t\"philipines\": \"PROPN\",\n\t\t\t\"papers\": \"NOUN\",\n\t\t\t\"believers\": \"NOUN\",\n\t\t\t\"uninsured\": \"ADJ\",\n\t\t\t\"c&ic\": \"PROPN\",\n\t\t\t\"casualty\": \"NOUN\",\n\t\t\t\"ashtrays\": \"NOUN\",\n\t\t\t\"lock\": \"NOUN\",\n\t\t\t\"powder\": \"NOUN\",\n\t\t\t\"x365\": \"NOUN\",\n\t\t\t\"sploid.com\": \"PROPN\",\n\t\t\t\"merlot\": \"PROPN\",\n\t\t\t\"manners\": \"NOUN\",\n\t\t\t\"http://www.ebay.co.uk/itm/250927098564?var=550057729382&sspagename=strk:mewax:it&_trksid=p3984.m1438.l2649#ht_2079wt_893\": \"PROPN\",\n\t\t\t\"broome\": \"PROPN\",\n\t\t\t\"grandparents\": \"NOUN\",\n\t\t\t\"dale\": \"PROPN\",\n\t\t\t\"beneficial\": \"ADJ\",\n\t\t\t\"din\": \"PROPN\",\n\t\t\t\"wished\": \"VERB\",\n\t\t\t\"rubell\": \"PROPN\",\n\t\t\t\"spock\": \"PROPN\",\n\t\t\t\"curly\": \"ADJ\",\n\t\t\t\"its\": \"PRON\",\n\t\t\t\"repository\": \"NOUN\",\n\t\t\t\"recited\": \"VERB\",\n\t\t\t\"http://www.csmonitor.com/2006/0509/p02s01-ussc.html?s=t5\": \"PROPN\",\n\t\t\t\"curving\": \"NOUN\",\n\t\t\t\"molecules\": \"NOUN\",\n\t\t\t\"avenue\": \"PROPN\",\n\t\t\t\"collapsible\": \"ADJ\",\n\t\t\t\"crusader\": \"NOUN\",\n\t\t\t\"functionalism\": \"NOUN\",\n\t\t\t\"rooming\": \"VERB\",\n\t\t\t\"thirty-six\": \"NUM\",\n\t\t\t\"hey\": \"INTJ\",\n\t\t\t\"virtue\": \"NOUN\",\n\t\t\t\"baath\": \"PROPN\",\n\t\t\t\"either\": \"CCONJ\",\n\t\t\t\"jacks\": \"NOUN\",\n\t\t\t\"viveurs\": \"NOUN\",\n\t\t\t\"unless\": \"SCONJ\",\n\t\t\t\"bluntly\": \"ADV\",\n\t\t\t\"watch\": \"VERB\",\n\t\t\t\"deregulate\": \"VERB\",\n\t\t\t\"guruswamy\": \"PROPN\",\n\t\t\t\"co-ordination\": \"NOUN\",\n\t\t\t\"kiyani\": \"PROPN\",\n\t\t\t\"pm\": \"NOUN\",\n\t\t\t\"5.8\": \"NUM\",\n\t\t\t\"sterile\": \"ADJ\",\n\t\t\t\"chasers\": \"NOUN\",\n\t\t\t\"algebra\": \"NOUN\",\n\t\t\t\"insoluble\": \"ADJ\",\n\t\t\t\"duchatelet\": \"PROPN\",\n\t\t\t\"herzegovina\": \"PROPN\",\n\t\t\t\"prototype\": \"NOUN\",\n\t\t\t\"dartmouth\": \"PROPN\",\n\t\t\t\"instigated\": \"VERB\",\n\t\t\t\"fuck\": \"VERB\",\n\t\t\t\"embers\": \"NOUN\",\n\t\t\t\"overload\": \"VERB\",\n\t\t\t\"touch-ups\": \"NOUN\",\n\t\t\t\"succeeding\": \"VERB\",\n\t\t\t\"muddying\": \"VERB\",\n\t\t\t\"carvings\": \"NOUN\",\n\t\t\t\"causey\": \"PROPN\",\n\t\t\t\"inspiring\": \"ADJ\",\n\t\t\t\"reptiles\": \"NOUN\",\n\t\t\t\"appy\": \"NOUN\",\n\t\t\t\"allton\": \"PROPN\",\n\t\t\t\"blending\": \"VERB\",\n\t\t\t\"hue\": \"PROPN\",\n\t\t\t\"screen\": \"NOUN\",\n\t\t\t\"archives\": \"NOUN\",\n\t\t\t\"condominiums\": \"PROPN\",\n\t\t\t\"marks\": \"NOUN\",\n\t\t\t\"intersection\": \"NOUN\",\n\t\t\t\"donors\": \"NOUN\",\n\t\t\t\"cynangon\": \"PROPN\",\n\t\t\t\"omelets\": \"NOUN\",\n\t\t\t\"mapping\": \"NOUN\",\n\t\t\t\"‘’\": \"PUNCT\",\n\t\t\t\"opened\": \"VERB\",\n\t\t\t\"fired\": \"VERB\",\n\t\t\t\"cushion\": \"NOUN\",\n\t\t\t\"vitamin\": \"NOUN\",\n\t\t\t\"deoccupy\": \"PROPN\",\n\t\t\t\"160\": \"NUM\",\n\t\t\t\"biding\": \"VERB\",\n\t\t\t\"culminating\": \"ADJ\",\n\t\t\t\"rosé\": \"NOUN\",\n\t\t\t\"breakout\": \"ADJ\",\n\t\t\t\"notices\": \"VERB\",\n\t\t\t\"425-415-3052\": \"NUM\",\n\t\t\t\"leslie\": \"PROPN\",\n\t\t\t\"richmond\": \"PROPN\",\n\t\t\t\"opt\": \"NOUN\",\n\t\t\t\"0590854950\": \"NUM\",\n\t\t\t\"compression\": \"PROPN\",\n\t\t\t\"outdoor\": \"ADJ\",\n\t\t\t\"taste\": \"NOUN\",\n\t\t\t\"]\": \"PUNCT\",\n\t\t\t\"brevet\": \"NOUN\",\n\t\t\t\"well-kept\": \"ADJ\",\n\t\t\t\"stardom\": \"NOUN\",\n\t\t\t\"xml\": \"PROPN\",\n\t\t\t\"seasonally\": \"ADV\",\n\t\t\t\"aquarium\": \"NOUN\",\n\t\t\t\"cassation\": \"PROPN\",\n\t\t\t\"jbennett@gmssr.com\": \"PROPN\",\n\t\t\t\"raser\": \"PROPN\",\n\t\t\t\"1981\": \"NUM\",\n\t\t\t\"bolder\": \"ADJ\",\n\t\t\t\"correspondences\": \"NOUN\",\n\t\t\t\"rvs\": \"NOUN\",\n\t\t\t\"go\": \"VERB\",\n\t\t\t\"maiden\": \"NOUN\",\n\t\t\t\"georgia\": \"PROPN\",\n\t\t\t\"valentine\": \"PROPN\",\n\t\t\t\"noons\": \"NOUN\",\n\t\t\t\"admission\": \"NOUN\",\n\t\t\t\"wether\": \"SCONJ\",\n\t\t\t\"impartial\": \"ADJ\",\n\t\t\t\"credibility\": \"NOUN\",\n\t\t\t\"kohne\": \"PROPN\",\n\t\t\t\"clearwater\": \"PROPN\",\n\t\t\t\"riding\": \"NOUN\",\n\t\t\t\"ireland\": \"PROPN\",\n\t\t\t\"truck\": \"NOUN\",\n\t\t\t\"ranks\": \"NOUN\",\n\t\t\t\"too\": \"ADV\",\n\t\t\t\"alternates\": \"NOUN\",\n\t\t\t\"relax\": \"VERB\",\n\t\t\t\"loins\": \"NOUN\",\n\t\t\t\"banknote\": \"NOUN\",\n\t\t\t\"qe2\": \"PROPN\",\n\t\t\t\"competition\": \"NOUN\",\n\t\t\t\"paint\": \"NOUN\",\n\t\t\t\"rides\": \"NOUN\",\n\t\t\t\"drill\": \"NOUN\",\n\t\t\t\"bayleys\": \"PROPN\",\n\t\t\t\"warmed\": \"VERB\",\n\t\t\t\"toured\": \"VERB\",\n\t\t\t\"1906\": \"NUM\",\n\t\t\t\"retaliated\": \"VERB\",\n\t\t\t\"taxi\": \"NOUN\",\n\t\t\t\"moonlight\": \"NOUN\",\n\t\t\t\"torrance\": \"PROPN\",\n\t\t\t\"200,000\": \"NUM\",\n\t\t\t\"wolfson\": \"PROPN\",\n\t\t\t\"ids\": \"NOUN\",\n\t\t\t\"slid\": \"VERB\",\n\t\t\t\"simple\": \"ADJ\",\n\t\t\t\"companies\": \"NOUN\",\n\t\t\t\"cleaned\": \"VERB\",\n\t\t\t\"plonsky\": \"PROPN\",\n\t\t\t\"affects\": \"VERB\",\n\t\t\t\"clearer\": \"ADJ\",\n\t\t\t\"peaceful\": \"ADJ\",\n\t\t\t\"inducted\": \"VERB\",\n\t\t\t\"path\": \"NOUN\",\n\t\t\t\"paul\": \"PROPN\",\n\t\t\t\"sheffield\": \"PROPN\",\n\t\t\t\"nerve\": \"NOUN\",\n\t\t\t\"jasny\": \"PROPN\",\n\t\t\t\"uttermost\": \"ADJ\",\n\t\t\t\"fidelity\": \"PROPN\",\n\t\t\t\"119th\": \"ADJ\",\n\t\t\t\"appreciated\": \"VERB\",\n\t\t\t\"designer\": \"NOUN\",\n\t\t\t\"sweaters\": \"NOUN\",\n\t\t\t\"again\": \"ADV\",\n\t\t\t\"veggie\": \"NOUN\",\n\t\t\t\"predictors\": \"NOUN\",\n\t\t\t\"hezbollah\": \"PROPN\",\n\t\t\t\"lavatory\": \"NOUN\",\n\t\t\t\"allocated\": \"VERB\",\n\t\t\t\"spirited\": \"VERB\",\n\t\t\t\"0417\": \"NUM\",\n\t\t\t\"sotoun\": \"PROPN\",\n\t\t\t\"cells\": \"NOUN\",\n\t\t\t\"tårs\": \"PROPN\",\n\t\t\t\"sent\": \"VERB\",\n\t\t\t\"1960\": \"NUM\",\n\t\t\t\"detain\": \"VERB\",\n\t\t\t\"weakest\": \"ADJ\",\n\t\t\t\"chamber\": \"PROPN\",\n\t\t\t\"cognitive\": \"ADJ\",\n\t\t\t\"wavered\": \"VERB\",\n\t\t\t\"talbott\": \"PROPN\",\n\t\t\t\"francis\": \"PROPN\",\n\t\t\t\"geologist\": \"NOUN\",\n\t\t\t\"kaufman\": \"PROPN\",\n\t\t\t\"mayor\": \"NOUN\",\n\t\t\t\"britannica\": \"PROPN\",\n\t\t\t\"source\": \"NOUN\",\n\t\t\t\"tortilla\": \"NOUN\",\n\t\t\t\"nearly\": \"ADV\",\n\t\t\t\"biologist\": \"NOUN\",\n\t\t\t\"avenues\": \"NOUN\",\n\t\t\t\"dinosaur\": \"NOUN\",\n\t\t\t\"mannered\": \"ADJ\",\n\t\t\t\"empty\": \"ADJ\",\n\t\t\t\"holy\": \"ADJ\",\n\t\t\t\"bun\": \"NOUN\",\n\t\t\t\"wheezed\": \"VERB\",\n\t\t\t\"notions\": \"NOUN\",\n\t\t\t\"greatly\": \"ADV\",\n\t\t\t\"guardians\": \"NOUN\",\n\t\t\t\"rafik\": \"PROPN\",\n\t\t\t\"mesa\": \"PROPN\",\n\t\t\t\"tribulation\": \"NOUN\",\n\t\t\t\"http://www.cic.gc.ca/english/contacts/index.asp\": \"PROPN\",\n\t\t\t\"herman\": \"PROPN\",\n\t\t\t\"gothic\": \"ADJ\",\n\t\t\t\"stoollala\": \"PROPN\",\n\t\t\t\"teams\": \"NOUN\",\n\t\t\t\"tasty\": \"ADJ\",\n\t\t\t\"skipped\": \"VERB\",\n\t\t\t\"sulphuric\": \"ADJ\",\n\t\t\t\"slfmr\": \"PROPN\",\n\t\t\t\"yau\": \"PROPN\",\n\t\t\t\"bookshop\": \"NOUN\",\n\t\t\t\"peeing\": \"VERB\",\n\t\t\t\"molly\": \"PROPN\",\n\t\t\t\"predestination\": \"NOUN\",\n\t\t\t\"outstanding\": \"ADJ\",\n\t\t\t\"re-writing\": \"VERB\",\n\t\t\t\"obl\": \"PROPN\",\n\t\t\t\"yoko\": \"PROPN\",\n\t\t\t\"tasteful\": \"ADJ\",\n\t\t\t\"eyewitnesses\": \"NOUN\",\n\t\t\t\"much\": \"ADV\",\n\t\t\t\"acres\": \"NOUN\",\n\t\t\t\"alias\": \"NOUN\",\n\t\t\t\"6.00\": \"NUM\",\n\t\t\t\"sorrowstricken\": \"ADJ\",\n\t\t\t\"mitigated\": \"VERB\",\n\t\t\t\"consist\": \"VERB\",\n\t\t\t\"rakau\": \"NOUN\",\n\t\t\t\"ponchatoula\": \"PROPN\",\n\t\t\t\"monstrous\": \"ADJ\",\n\t\t\t\"^\": \"PUNCT\",\n\t\t\t\"footlight\": \"NOUN\",\n\t\t\t\"standing\": \"VERB\",\n\t\t\t\"battled\": \"VERB\",\n\t\t\t\"deadlines\": \"NOUN\",\n\t\t\t\"abhorrent\": \"ADJ\",\n\t\t\t\"checkups\": \"NOUN\",\n\t\t\t\"blasted\": \"VERB\",\n\t\t\t\"miui\": \"PROPN\",\n\t\t\t\"essence\": \"NOUN\",\n\t\t\t\"unforgivable\": \"ADJ\",\n\t\t\t\"audible\": \"ADJ\",\n\t\t\t\"reve-\": \"INTJ\",\n\t\t\t\"withered\": \"ADJ\",\n\t\t\t\"advisable\": \"ADJ\",\n\t\t\t\"her\": \"PRON\",\n\t\t\t\"celebrating\": \"VERB\",\n\t\t\t\"b\": \"NUM\",\n\t\t\t\"anna\": \"PROPN\",\n\t\t\t\"6400\": \"NUM\",\n\t\t\t\"ann\": \"PROPN\",\n\t\t\t\"fang\": \"PROPN\",\n\t\t\t\"picking\": \"VERB\",\n\t\t\t\"p&i\": \"NOUN\",\n\t\t\t\"insure\": \"VERB\",\n\t\t\t\"link\": \"NOUN\",\n\t\t\t\"dave\": \"PROPN\",\n\t\t\t\"bio\": \"NOUN\",\n\t\t\t\"flirting\": \"NOUN\",\n\t\t\t\"exchanges\": \"VERB\",\n\t\t\t\"accelerations\": \"NOUN\",\n\t\t\t\"aluminum\": \"NOUN\",\n\t\t\t\"reaching\": \"VERB\",\n\t\t\t\"ranong\": \"PROPN\",\n\t\t\t\"dread\": \"VERB\",\n\t\t\t\"380\": \"NUM\",\n\t\t\t\"postponement\": \"NOUN\",\n\t\t\t\"locate\": \"VERB\",\n\t\t\t\"controlling\": \"VERB\",\n\t\t\t\"sold\": \"VERB\",\n\t\t\t\"statements\": \"NOUN\",\n\t\t\t\"tranced\": \"ADJ\",\n\t\t\t\"counsel\": \"NOUN\",\n\t\t\t\"talk\": \"VERB\",\n\t\t\t\"??\": \"PUNCT\",\n\t\t\t\"whiskered\": \"ADJ\",\n\t\t\t\"mujahidin\": \"NOUN\",\n\t\t\t\"chips\": \"NOUN\",\n\t\t\t\"thing\": \"NOUN\",\n\t\t\t\"exclaiming\": \"VERB\",\n\t\t\t\"clubs\": \"NOUN\",\n\t\t\t\"cried\": \"VERB\",\n\t\t\t\"necessary\": \"ADJ\",\n\t\t\t\"varies\": \"VERB\",\n\t\t\t\"nomenclature\": \"NOUN\",\n\t\t\t\"ramifications\": \"NOUN\",\n\t\t\t\"lease\": \"NOUN\",\n\t\t\t\"inquire\": \"VERB\",\n\t\t\t\"hieronymus\": \"PROPN\",\n\t\t\t\"concessions\": \"NOUN\",\n\t\t\t\"pivotal\": \"ADJ\",\n\t\t\t\"biological\": \"ADJ\",\n\t\t\t\"multiply\": \"VERB\",\n\t\t\t\"allocate\": \"VERB\",\n\t\t\t\"non-moslem\": \"ADJ\",\n\t\t\t\"posthumously\": \"ADV\",\n\t\t\t\"unexplained\": \"ADJ\",\n\t\t\t\"crosses\": \"VERB\",\n\t\t\t\"folder\": \"NOUN\",\n\t\t\t\"dr\": \"PROPN\",\n\t\t\t\"symbolic\": \"ADJ\",\n\t\t\t\"singapore\": \"PROPN\",\n\t\t\t\"bidders\": \"NOUN\",\n\t\t\t\"azov\": \"PROPN\",\n\t\t\t\"non-crumbly\": \"ADJ\",\n\t\t\t\"toes\": \"NOUN\",\n\t\t\t\"inclusive\": \"ADJ\",\n\t\t\t\"sunbathing\": \"NOUN\",\n\t\t\t\"liked\": \"VERB\",\n\t\t\t\"gant\": \"ADJ\",\n\t\t\t\"jen\": \"PROPN\",\n\t\t\t\"boldness\": \"NOUN\",\n\t\t\t\"hogsmeade\": \"PROPN\",\n\t\t\t\"delightedly\": \"ADV\",\n\t\t\t\"hi\": \"INTJ\",\n\t\t\t\"migrate\": \"VERB\",\n\t\t\t\"shrek\": \"PROPN\",\n\t\t\t\"rudest\": \"ADJ\",\n\t\t\t\"solemnities\": \"NOUN\",\n\t\t\t\"electromagnetic\": \"ADJ\",\n\t\t\t\"daly\": \"PROPN\",\n\t\t\t\"alternately\": \"ADV\",\n\t\t\t\"estonia\": \"PROPN\",\n\t\t\t\"homes\": \"NOUN\",\n\t\t\t\"cruiseline\": \"NOUN\",\n\t\t\t\"stitch\": \"NOUN\",\n\t\t\t\"scratching\": \"VERB\",\n\t\t\t\"sizzling\": \"VERB\",\n\t\t\t\"represent.com\": \"PROPN\",\n\t\t\t\"feet\": \"NOUN\",\n\t\t\t\"confrontation\": \"NOUN\",\n\t\t\t\"total\": \"ADJ\",\n\t\t\t\"teach\": \"VERB\",\n\t\t\t\"gorbachev\": \"PROPN\",\n\t\t\t\"plt\": \"NOUN\",\n\t\t\t\"carytown\": \"PROPN\",\n\t\t\t\"waziristan\": \"PROPN\",\n\t\t\t\"bourg\": \"PROPN\",\n\t\t\t\"wta\": \"PROPN\",\n\t\t\t\"schema\": \"NOUN\",\n\t\t\t\"jalalabad\": \"PROPN\",\n\t\t\t\"aim\": \"NOUN\",\n\t\t\t\"forty-eight\": \"NUM\",\n\t\t\t\"caution\": \"NOUN\",\n\t\t\t\"unresponsive\": \"ADJ\",\n\t\t\t\"degenerate\": \"ADJ\",\n\t\t\t\"confidants\": \"NOUN\",\n\t\t\t\"easter\": \"PROPN\",\n\t\t\t\"lacked\": \"VERB\",\n\t\t\t\"sputnik\": \"PROPN\",\n\t\t\t\"gingerly\": \"ADV\",\n\t\t\t\"businesslike\": \"ADJ\",\n\t\t\t\"dishes\": \"NOUN\",\n\t\t\t\"expansion\": \"NOUN\",\n\t\t\t\"administrations\": \"NOUN\",\n\t\t\t\"bestowed\": \"VERB\",\n\t\t\t\"alarms\": \"NOUN\",\n\t\t\t\"evident\": \"ADJ\",\n\t\t\t\"tweet\": \"NOUN\",\n\t\t\t\"plight\": \"NOUN\",\n\t\t\t\"pipes\": \"NOUN\",\n\t\t\t\"pirker\": \"PROPN\",\n\t\t\t\"6565\": \"NUM\",\n\t\t\t\"cardinal\": \"ADJ\",\n\t\t\t\"container\": \"NOUN\",\n\t\t\t\"12:48\": \"NUM\",\n\t\t\t\"ltte\": \"PROPN\",\n\t\t\t\"….\": \"PUNCT\",\n\t\t\t\"institutionally\": \"ADV\",\n\t\t\t\"navigator\": \"PROPN\",\n\t\t\t\"faceless\": \"ADJ\",\n\t\t\t\"crippled\": \"ADJ\",\n\t\t\t\"stop\": \"VERB\",\n\t\t\t\"tacoma\": \"PROPN\",\n\t\t\t\"organizations\": \"NOUN\",\n\t\t\t\"underwriting\": \"NOUN\",\n\t\t\t\"old-fashioned\": \"ADJ\",\n\t\t\t\"manipulate\": \"VERB\",\n\t\t\t\"bowed\": \"VERB\",\n\t\t\t\"dalmatia\": \"PROPN\",\n\t\t\t\"tis\": \"PROPN\",\n\t\t\t\"francs\": \"NOUN\",\n\t\t\t\"dance\": \"NOUN\",\n\t\t\t\"cliffside\": \"PROPN\",\n\t\t\t\"2.00\": \"NUM\",\n\t\t\t\"velvet\": \"NOUN\",\n\t\t\t\"erik\": \"PROPN\",\n\t\t\t\"balkans\": \"PROPN\",\n\t\t\t\"zinc\": \"NOUN\",\n\t\t\t\"starring\": \"VERB\",\n\t\t\t\"xml-like\": \"ADJ\",\n\t\t\t\"robotically\": \"ADV\",\n\t\t\t\"3:15\": \"NUM\",\n\t\t\t\"purus'a\": \"NOUN\",\n\t\t\t\"suggestions\": \"NOUN\",\n\t\t\t\"porpoise\": \"PROPN\",\n\t\t\t\"smoothly\": \"ADV\",\n\t\t\t\"8:00\": \"NUM\",\n\t\t\t\"knocking\": \"VERB\",\n\t\t\t\"aggressively\": \"ADV\",\n\t\t\t\"firstborn\": \"ADJ\",\n\t\t\t\"zionist\": \"ADJ\",\n\t\t\t\"sledge\": \"NOUN\",\n\t\t\t\"blurred\": \"VERB\",\n\t\t\t\"attachments\": \"NOUN\",\n\t\t\t\"parenthetically\": \"ADV\",\n\t\t\t\"waited\": \"VERB\",\n\t\t\t\"uncomprehendingly\": \"ADV\",\n\t\t\t\"compel\": \"VERB\",\n\t\t\t\"coquette\": \"NOUN\",\n\t\t\t\"jeffrey\": \"PROPN\",\n\t\t\t\"retained\": \"VERB\",\n\t\t\t\"fruity\": \"ADJ\",\n\t\t\t\"ei.london\": \"PROPN\",\n\t\t\t\"tiananmen\": \"PROPN\",\n\t\t\t\"judaism\": \"PROPN\",\n\t\t\t\"interruptions\": \"NOUN\",\n\t\t\t\"convulsed\": \"VERB\",\n\t\t\t\"generates\": \"VERB\",\n\t\t\t\"unexplored\": \"ADJ\",\n\t\t\t\"sba\": \"PROPN\",\n\t\t\t\"achieve\": \"VERB\",\n\t\t\t\"handing\": \"VERB\",\n\t\t\t\"camping\": \"VERB\",\n\t\t\t\"studymate\": \"NOUN\",\n\t\t\t\"1729\": \"NUM\",\n\t\t\t\"vespers\": \"PROPN\",\n\t\t\t\"rapid\": \"ADJ\",\n\t\t\t\"chalk\": \"NOUN\",\n\t\t\t\"relationships\": \"NOUN\",\n\t\t\t\"il\": \"PROPN\",\n\t\t\t\"courtroom\": \"NOUN\",\n\t\t\t\"secretaries\": \"NOUN\",\n\t\t\t\"ferry\": \"NOUN\",\n\t\t\t\"drilling\": \"NOUN\",\n\t\t\t\"formally\": \"ADV\",\n\t\t\t\"tale\": \"NOUN\",\n\t\t\t\"1562\": \"NUM\",\n\t\t\t\"constrained\": \"VERB\",\n\t\t\t\"contented\": \"ADJ\",\n\t\t\t\"overdone\": \"VERB\",\n\t\t\t\"craig\": \"PROPN\",\n\t\t\t\"announce\": \"VERB\",\n\t\t\t\"blog\": \"NOUN\",\n\t\t\t\"eichelberger\": \"PROPN\",\n\t\t\t\"1635\": \"NUM\",\n\t\t\t\"simplicity\": \"NOUN\",\n\t\t\t\"enriched\": \"VERB\",\n\t\t\t\"jumping\": \"VERB\",\n\t\t\t\"celebrations\": \"NOUN\",\n\t\t\t\"lakefront\": \"NOUN\",\n\t\t\t\"commemorate\": \"VERB\",\n\t\t\t\"jeopardised\": \"VERB\",\n\t\t\t\"audiotape\": \"NOUN\",\n\t\t\t\"counterweight\": \"NOUN\",\n\t\t\t\"vs\": \"ADP\",\n\t\t\t\"presidents\": \"NOUN\",\n\t\t\t\"202.582.1234\": \"NUM\",\n\t\t\t\"ge\": \"PROPN\",\n\t\t\t\"moriaty\": \"PROPN\",\n\t\t\t\"federation\": \"NOUN\",\n\t\t\t\"sewers\": \"NOUN\",\n\t\t\t\"interrupted\": \"VERB\",\n\t\t\t\"disclaim\": \"VERB\",\n\t\t\t\"enjoys\": \"VERB\",\n\t\t\t\"mashhad\": \"PROPN\",\n\t\t\t\"fore-and-aft\": \"ADV\",\n\t\t\t\"31,000\": \"NUM\",\n\t\t\t\"nearsightedness\": \"NOUN\",\n\t\t\t\"equals\": \"VERB\",\n\t\t\t\"becoming\": \"VERB\",\n\t\t\t\"chasing\": \"VERB\",\n\t\t\t\"literaly\": \"ADV\",\n\t\t\t\"encouragement\": \"NOUN\",\n\t\t\t\"tuned\": \"VERB\",\n\t\t\t\"caters\": \"VERB\",\n\t\t\t\"series\": \"NOUN\",\n\t\t\t\"key\": \"ADJ\",\n\t\t\t\"euro\": \"PROPN\",\n\t\t\t\"enw_gcp\": \"PROPN\",\n\t\t\t\"pronoun\": \"NOUN\",\n\t\t\t\"unmarked\": \"ADJ\",\n\t\t\t\"fredonia\": \"PROPN\",\n\t\t\t\"michael.mcdermott@spectrongroup.com\": \"PROPN\",\n\t\t\t\"wounds\": \"NOUN\",\n\t\t\t\"callum\": \"PROPN\",\n\t\t\t\"infant\": \"NOUN\",\n\t\t\t\"amazed\": \"VERB\",\n\t\t\t\"languid\": \"ADJ\",\n\t\t\t\"naw\": \"INTJ\",\n\t\t\t\"geography\": \"NOUN\",\n\t\t\t\"kwik\": \"PROPN\",\n\t\t\t\"26/09/2000\": \"NUM\",\n\t\t\t\"taylor\": \"PROPN\",\n\t\t\t\"obsidian\": \"NOUN\",\n\t\t\t\"cosy\": \"ADJ\",\n\t\t\t\"effectually\": \"ADV\",\n\t\t\t\"silver-nailed\": \"ADJ\",\n\t\t\t\"influences\": \"NOUN\",\n\t\t\t\"gunpowder\": \"NOUN\",\n\t\t\t\"warning\": \"NOUN\",\n\t\t\t\"k\": \"NUM\",\n\t\t\t\"affectionate\": \"ADJ\",\n\t\t\t\"stroked\": \"VERB\",\n\t\t\t\"self-pity\": \"NOUN\",\n\t\t\t\"shukrijumah\": \"PROPN\",\n\t\t\t\"collecting\": \"VERB\",\n\t\t\t\"ß\": \"SYM\",\n\t\t\t\"tariff\": \"NOUN\",\n\t\t\t\"hindu\": \"ADJ\",\n\t\t\t\"garret\": \"NOUN\",\n\t\t\t\"spark\": \"NOUN\",\n\t\t\t\"1000\": \"NUM\",\n\t\t\t\"dept\": \"NOUN\",\n\t\t\t\"edmonton\": \"PROPN\",\n\t\t\t\"python\": \"NOUN\",\n\t\t\t\"inventory\": \"NOUN\",\n\t\t\t\"contentious\": \"ADJ\",\n\t\t\t\"invaded\": \"VERB\",\n\t\t\t\"cabin\": \"NOUN\",\n\t\t\t\"subscribed\": \"VERB\",\n\t\t\t\"historicism\": \"NOUN\",\n\t\t\t\"blood\": \"NOUN\",\n\t\t\t\"response\": \"NOUN\",\n\t\t\t\"milestone\": \"NOUN\",\n\t\t\t\"chorion\": \"NOUN\",\n\t\t\t\"research\": \"NOUN\",\n\t\t\t\"ship\": \"NOUN\",\n\t\t\t\"hit\": \"VERB\",\n\t\t\t\"dsl\": \"NOUN\",\n\t\t\t\"resistless\": \"ADJ\",\n\t\t\t\"underpinned\": \"VERB\",\n\t\t\t\"developments\": \"NOUN\",\n\t\t\t\"fools\": \"NOUN\",\n\t\t\t\"a'nandamu'rti\": \"PROPN\",\n\t\t\t\"ops\": \"NOUN\",\n\t\t\t\"intelligencer\": \"PROPN\",\n\t\t\t\"181,000\": \"NUM\",\n\t\t\t\"lb\": \"NOUN\",\n\t\t\t\"datasheets\": \"NOUN\",\n\t\t\t\"booking\": \"VERB\",\n\t\t\t\"hearts\": \"NOUN\",\n\t\t\t\"yousef\": \"PROPN\",\n\t\t\t\"bmc...@patriot.net\": \"PROPN\",\n\t\t\t\"phobic\": \"ADJ\",\n\t\t\t\"+4533330040\": \"NUM\",\n\t\t\t\"stirrups\": \"NOUN\",\n\t\t\t\"projectile\": \"NOUN\",\n\t\t\t\"quadruplets\": \"NOUN\",\n\t\t\t\"choose\": \"VERB\",\n\t\t\t\"provisions\": \"NOUN\",\n\t\t\t\"recuperation\": \"PROPN\",\n\t\t\t\"buried\": \"VERB\",\n\t\t\t\"kunst\": \"PROPN\",\n\t\t\t\"paternalist\": \"ADJ\",\n\t\t\t\"stops\": \"VERB\",\n\t\t\t\"midmarket\": \"ADJ\",\n\t\t\t\"63\": \"NUM\",\n\t\t\t\"thickness\": \"NOUN\",\n\t\t\t\"sect\": \"NOUN\",\n\t\t\t\"swivels\": \"VERB\",\n\t\t\t\"disease\": \"NOUN\",\n\t\t\t\"leavenworth\": \"PROPN\",\n\t\t\t\"anesthesia\": \"NOUN\",\n\t\t\t\"confessor\": \"NOUN\",\n\t\t\t\"spray\": \"NOUN\",\n\t\t\t\"pump\": \"NOUN\",\n\t\t\t\"originality\": \"NOUN\",\n\t\t\t\"building\": \"NOUN\",\n\t\t\t\"neighbor\": \"NOUN\",\n\t\t\t\"seeds\": \"NOUN\",\n\t\t\t\"reliant\": \"PROPN\",\n\t\t\t\"worthless\": \"ADJ\",\n\t\t\t\"hybrid\": \"NOUN\",\n\t\t\t\"antarctic\": \"ADJ\",\n\t\t\t\"intervals\": \"NOUN\",\n\t\t\t\"interfering\": \"VERB\",\n\t\t\t\"licensed\": \"VERB\",\n\t\t\t\"bevelled\": \"ADJ\",\n\t\t\t\"forbidding\": \"VERB\",\n\t\t\t\"civet\": \"NOUN\",\n\t\t\t\"readily\": \"ADV\",\n\t\t\t\"custom\": \"ADJ\",\n\t\t\t\"skies\": \"NOUN\",\n\t\t\t\"cubist\": \"ADJ\",\n\t\t\t\"sourness\": \"NOUN\",\n\t\t\t\"unmik\": \"PROPN\",\n\t\t\t\"revise\": \"VERB\",\n\t\t\t\"nx1\": \"NOUN\",\n\t\t\t\"olfactory\": \"ADJ\",\n\t\t\t\"steppers\": \"NOUN\",\n\t\t\t\"style\": \"NOUN\",\n\t\t\t\"counteract\": \"VERB\",\n\t\t\t\"mailto:rosario.gonzales@compaq.com\": \"PROPN\",\n\t\t\t\"thumbs\": \"NOUN\",\n\t\t\t\"lousy\": \"ADJ\",\n\t\t\t\"sitting\": \"VERB\",\n\t\t\t\"vessels\": \"NOUN\",\n\t\t\t\"thir\": \"INTJ\",\n\t\t\t\"manliness\": \"NOUN\",\n\t\t\t\"slaughter\": \"VERB\",\n\t\t\t\"vacations\": \"NOUN\",\n\t\t\t\"experice\": \"NOUN\",\n\t\t\t\"auguste\": \"PROPN\",\n\t\t\t\"estuary\": \"NOUN\",\n\t\t\t\"ancestral\": \"ADJ\",\n\t\t\t\"verbs\": \"NOUN\",\n\t\t\t\"tangipahoa\": \"PROPN\",\n\t\t\t\"timings\": \"NOUN\",\n\t\t\t\"slobber\": \"NOUN\",\n\t\t\t\"2500\": \"NUM\",\n\t\t\t\"embassies\": \"NOUN\",\n\t\t\t\"polytheism\": \"NOUN\",\n\t\t\t\"1980\": \"NUM\",\n\t\t\t\"courts\": \"NOUN\",\n\t\t\t\"spacewalks\": \"NOUN\",\n\t\t\t\"e-meter\": \"PROPN\",\n\t\t\t\"climbing\": \"VERB\",\n\t\t\t\"robotics\": \"NOUN\",\n\t\t\t\"energetics\": \"NOUN\",\n\t\t\t\"quickening\": \"VERB\",\n\t\t\t\"intercompany\": \"ADJ\",\n\t\t\t\"buttons\": \"NOUN\",\n\t\t\t\"eb\": \"PROPN\",\n\t\t\t\"flds\": \"PROPN\",\n\t\t\t\"licensing\": \"NOUN\",\n\t\t\t\"budge\": \"VERB\",\n\t\t\t\"blocks\": \"NOUN\",\n\t\t\t\"chunk\": \"NOUN\",\n\t\t\t\"lifetimes\": \"NOUN\",\n\t\t\t\"philonise\": \"PROPN\",\n\t\t\t\"amused\": \"ADJ\",\n\t\t\t\"0.4\": \"NUM\",\n\t\t\t\"obviously\": \"ADV\",\n\t\t\t\"mécanique\": \"PROPN\",\n\t\t\t\"09:56\": \"NUM\",\n\t\t\t\"adulterated\": \"VERB\",\n\t\t\t\"parcel\": \"NOUN\",\n\t\t\t\"msu\": \"PROPN\",\n\t\t\t\"underfoot\": \"ADV\",\n\t\t\t\"inspecting\": \"VERB\",\n\t\t\t\"terme\": \"PROPN\",\n\t\t\t\"er\": \"NOUN\",\n\t\t\t\"reside\": \"VERB\",\n\t\t\t\"gravity\": \"NOUN\",\n\t\t\t\"alternative\": \"ADJ\",\n\t\t\t\"bike\": \"NOUN\",\n\t\t\t\"acute\": \"ADJ\",\n\t\t\t\"weiner\": \"PROPN\",\n\t\t\t\"unease\": \"NOUN\",\n\t\t\t\"infocus\": \"PROPN\",\n\t\t\t\"frigidity\": \"NOUN\",\n\t\t\t\"anthropology\": \"NOUN\",\n\t\t\t\"skipping\": \"VERB\",\n\t\t\t\"shove\": \"VERB\",\n\t\t\t\"acoustically\": \"ADV\",\n\t\t\t\"raiding\": \"VERB\",\n\t\t\t\"21st\": \"ADJ\",\n\t\t\t\"02:28\": \"NUM\",\n\t\t\t\"disturbing\": \"ADJ\",\n\t\t\t\"need\": \"VERB\",\n\t\t\t\".!\": \"PUNCT\",\n\t\t\t\"crafted\": \"VERB\",\n\t\t\t\"hoists\": \"VERB\",\n\t\t\t\"ernie\": \"PROPN\",\n\t\t\t\"++++++\": \"PUNCT\",\n\t\t\t\"stones\": \"NOUN\",\n\t\t\t\"hole\": \"NOUN\",\n\t\t\t\"lora.sullivan@enron.com\": \"PROPN\",\n\t\t\t\"1969\": \"NUM\",\n\t\t\t\"grassroots\": \"NOUN\",\n\t\t\t\"bends\": \"VERB\",\n\t\t\t\"murray\": \"PROPN\",\n\t\t\t\"moreton\": \"PROPN\",\n\t\t\t\"eikon\": \"NOUN\",\n\t\t\t\"counter-terrorism\": \"NOUN\",\n\t\t\t\"cem\": \"PROPN\",\n\t\t\t\"cries\": \"VERB\",\n\t\t\t\"10.99\": \"NUM\",\n\t\t\t\"cross-linguistic\": \"ADJ\",\n\t\t\t\"interference\": \"NOUN\",\n\t\t\t\"monitor\": \"VERB\",\n\t\t\t\"talks\": \"NOUN\",\n\t\t\t\"guideline\": \"NOUN\",\n\t\t\t\"progress\": \"NOUN\",\n\t\t\t\"suburban\": \"ADJ\",\n\t\t\t\"aplocheilus\": \"PROPN\",\n\t\t\t\"unvocal\": \"ADJ\",\n\t\t\t\"langeland\": \"PROPN\",\n\t\t\t\"rusk\": \"PROPN\",\n\t\t\t\"consequential\": \"ADJ\",\n\t\t\t\".04\": \"NUM\",\n\t\t\t\"strip\": \"VERB\",\n\t\t\t\"identities\": \"NOUN\",\n\t\t\t\"o'toole\": \"PROPN\",\n\t\t\t\"bankruptcies\": \"NOUN\",\n\t\t\t\"align\": \"VERB\",\n\t\t\t\"economists\": \"NOUN\",\n\t\t\t\"youthful\": \"ADJ\",\n\t\t\t\"semantics\": \"NOUN\",\n\t\t\t\"infested\": \"VERB\",\n\t\t\t\"gunmen\": \"NOUN\",\n\t\t\t\"aleksei\": \"PROPN\",\n\t\t\t\"footsteps\": \"NOUN\",\n\t\t\t\"their\": \"PRON\",\n\t\t\t\"sun-yellowed\": \"ADJ\",\n\t\t\t\"dreamworks\": \"PROPN\",\n\t\t\t\"asses\": \"NOUN\",\n\t\t\t\"blowdry\": \"NOUN\",\n\t\t\t\"sparks\": \"NOUN\",\n\t\t\t\"dipping\": \"VERB\",\n\t\t\t\"pattern\": \"NOUN\",\n\t\t\t\"pick\": \"VERB\",\n\t\t\t\"serious\": \"ADJ\",\n\t\t\t\"weed\": \"NOUN\",\n\t\t\t\"policies\": \"NOUN\",\n\t\t\t\"persecution\": \"NOUN\",\n\t\t\t\"distilled\": \"VERB\",\n\t\t\t\"station\": \"NOUN\",\n\t\t\t\"ascertain\": \"VERB\",\n\t\t\t\"inspectors\": \"NOUN\",\n\t\t\t\"contractors\": \"NOUN\",\n\t\t\t\"favourable\": \"ADJ\",\n\t\t\t\"satan\": \"PROPN\",\n\t\t\t\"exclude\": \"VERB\",\n\t\t\t\"richardson\": \"PROPN\",\n\t\t\t\"effort\": \"NOUN\",\n\t\t\t\"limes\": \"NOUN\",\n\t\t\t\"analyzed\": \"VERB\",\n\t\t\t\"coz\": \"SCONJ\",\n\t\t\t\"criminal\": \"ADJ\",\n\t\t\t\"denote\": \"VERB\",\n\t\t\t\"fitness\": \"NOUN\",\n\t\t\t\"hapupu\": \"PROPN\",\n\t\t\t\"insignia\": \"NOUN\",\n\t\t\t\"loosen\": \"VERB\",\n\t\t\t\"relativist\": \"ADJ\",\n\t\t\t\"jars\": \"NOUN\",\n\t\t\t\"sublime\": \"ADJ\",\n\t\t\t\"hormuz\": \"PROPN\",\n\t\t\t\"tripped\": \"VERB\",\n\t\t\t\"nipping\": \"VERB\",\n\t\t\t\"sporting\": \"VERB\",\n\t\t\t\"o.k.\": \"ADJ\",\n\t\t\t\"awareness\": \"NOUN\",\n\t\t\t\"remodeled\": \"VERB\",\n\t\t\t\"sue\": \"PROPN\",\n\t\t\t\"aaron\": \"PROPN\",\n\t\t\t\"aubrey\": \"PROPN\",\n\t\t\t\"battle\": \"NOUN\",\n\t\t\t\"brook\": \"PROPN\",\n\t\t\t\"genocide\": \"NOUN\",\n\t\t\t\"places\": \"NOUN\",\n\t\t\t\"double\": \"ADJ\",\n\t\t\t\"lotte\": \"PROPN\",\n\t\t\t\"restfully\": \"ADV\",\n\t\t\t\"capital\": \"NOUN\",\n\t\t\t\"attributes\": \"NOUN\",\n\t\t\t\"akashi\": \"PROPN\",\n\t\t\t\"freely\": \"ADV\",\n\t\t\t\"cults\": \"NOUN\",\n\t\t\t\"revolutions\": \"NOUN\",\n\t\t\t\"vocalist\": \"NOUN\",\n\t\t\t\"37th\": \"ADJ\",\n\t\t\t\"banging\": \"VERB\",\n\t\t\t\"crossed\": \"VERB\",\n\t\t\t\"commentators\": \"NOUN\",\n\t\t\t\"confusion\": \"NOUN\",\n\t\t\t\"creators\": \"NOUN\",\n\t\t\t\"northern\": \"ADJ\",\n\t\t\t\"foreman\": \"PROPN\",\n\t\t\t\"lme\": \"PROPN\",\n\t\t\t\"monti\": \"PROPN\",\n\t\t\t\"roughhousing\": \"NOUN\",\n\t\t\t\"urging\": \"NOUN\",\n\t\t\t\"larbalestier\": \"PROPN\",\n\t\t\t\"vignieri\": \"PROPN\",\n\t\t\t\"hangs\": \"VERB\",\n\t\t\t\"rail\": \"NOUN\",\n\t\t\t\"tell\": \"VERB\",\n\t\t\t\"rees\": \"PROPN\",\n\t\t\t\"[\": \"PUNCT\",\n\t\t\t\"navtej\": \"PROPN\",\n\t\t\t\"dbe\": \"PROPN\",\n\t\t\t\"potted\": \"ADJ\",\n\t\t\t\"paralympic\": \"ADJ\",\n\t\t\t\"mindset\": \"NOUN\",\n\t\t\t\"offset\": \"VERB\",\n\t\t\t\"fireflies\": \"PROPN\",\n\t\t\t\"mutation\": \"NOUN\",\n\t\t\t\"obese\": \"ADJ\",\n\t\t\t\"grains\": \"NOUN\",\n\t\t\t\"monotonous\": \"ADJ\",\n\t\t\t\"contenders\": \"NOUN\",\n\t\t\t\"census\": \"NOUN\",\n\t\t\t\"opens\": \"VERB\",\n\t\t\t\"transvestite\": \"NOUN\",\n\t\t\t\"lihaib\": \"PROPN\",\n\t\t\t\"disown\": \"VERB\",\n\t\t\t\"cargo\": \"NOUN\",\n\t\t\t\"plug\": \"NOUN\",\n\t\t\t\"belonged\": \"VERB\",\n\t\t\t\"unconscious\": \"ADJ\",\n\t\t\t\"catherine\": \"PROPN\",\n\t\t\t\"2010\": \"NUM\",\n\t\t\t\"traded\": \"VERB\",\n\t\t\t\"csis\": \"PROPN\",\n\t\t\t\"empathy\": \"NOUN\",\n\t\t\t\"insulting\": \"ADJ\",\n\t\t\t\"wwii\": \"PROPN\",\n\t\t\t\"33a\": \"SYM\",\n\t\t\t\"peanut\": \"NOUN\",\n\t\t\t\"february\": \"PROPN\",\n\t\t\t\"ongoing\": \"ADJ\",\n\t\t\t\"beijing\": \"PROPN\",\n\t\t\t\"obstacle\": \"NOUN\",\n\t\t\t\"fetched\": \"ADJ\",\n\t\t\t\"healthiest\": \"ADJ\",\n\t\t\t\"carcinoma\": \"NOUN\",\n\t\t\t\"runway\": \"NOUN\",\n\t\t\t\"miert\": \"PROPN\",\n\t\t\t\"melanie\": \"PROPN\",\n\t\t\t\"ghosts\": \"NOUN\",\n\t\t\t\"smorgasbord\": \"NOUN\",\n\t\t\t\"leg\": \"NOUN\",\n\t\t\t\"risking\": \"VERB\",\n\t\t\t\"kiev\": \"PROPN\",\n\t\t\t\"convey\": \"VERB\",\n\t\t\t\"satellites\": \"NOUN\",\n\t\t\t\"thanks\": \"NOUN\",\n\t\t\t\"journeying\": \"VERB\",\n\t\t\t\"foolish\": \"ADJ\",\n\t\t\t\"abbey\": \"PROPN\",\n\t\t\t\"backs\": \"NOUN\",\n\t\t\t\"resulting\": \"VERB\",\n\t\t\t\"legit\": \"ADJ\",\n\t\t\t\"hinges\": \"NOUN\",\n\t\t\t\"patients\": \"NOUN\",\n\t\t\t\"abrasive\": \"ADJ\",\n\t\t\t\"extremity\": \"NOUN\",\n\t\t\t\"prevalent\": \"ADJ\",\n\t\t\t\"groningen\": \"PROPN\",\n\t\t\t\"wine-growing\": \"VERB\",\n\t\t\t\"continuing\": \"VERB\",\n\t\t\t\"controllers\": \"NOUN\",\n\t\t\t\"slant\": \"ADJ\",\n\t\t\t\"clauses\": \"NOUN\",\n\t\t\t\"splendour\": \"NOUN\",\n\t\t\t\"insomnia\": \"NOUN\",\n\t\t\t\"brushed\": \"VERB\",\n\t\t\t\"vigilant\": \"ADJ\",\n\t\t\t\"2,000\": \"NUM\",\n\t\t\t\"hissed\": \"VERB\",\n\t\t\t\"opposed\": \"VERB\",\n\t\t\t\"unrelated\": \"ADJ\",\n\t\t\t\"ebbed\": \"VERB\",\n\t\t\t\"remilitarization\": \"NOUN\",\n\t\t\t\"aryan\": \"ADJ\",\n\t\t\t\"giuliana\": \"PROPN\",\n\t\t\t\"713-654-1281\": \"NUM\",\n\t\t\t\"blinding\": \"ADJ\",\n\t\t\t\"nations\": \"PROPN\",\n\t\t\t\"mongolia\": \"PROPN\",\n\t\t\t\"ʒan\": \"PROPN\",\n\t\t\t\"feast\": \"NOUN\",\n\t\t\t\"shippers\": \"NOUN\",\n\t\t\t\"man-of-war\": \"NOUN\",\n\t\t\t\"bible\": \"PROPN\",\n\t\t\t\"eberhard\": \"PROPN\",\n\t\t\t\"depends\": \"VERB\",\n\t\t\t\"she\": \"PRON\",\n\t\t\t\"kronos\": \"PROPN\",\n\t\t\t\"pinpointed\": \"VERB\",\n\t\t\t\"nineteenth\": \"ADJ\",\n\t\t\t\"stridon\": \"PROPN\",\n\t\t\t\"rang\": \"VERB\",\n\t\t\t\"whelmed\": \"ADJ\",\n\t\t\t\"artillery\": \"NOUN\",\n\t\t\t\"tanglewood\": \"PROPN\",\n\t\t\t\"chain-gang\": \"NOUN\",\n\t\t\t\"expelling\": \"VERB\",\n\t\t\t\"07:50\": \"NUM\",\n\t\t\t\"disputed\": \"VERB\",\n\t\t\t\"kingsman\": \"PROPN\",\n\t\t\t\"cookbook\": \"NOUN\",\n\t\t\t\"calculator\": \"NOUN\",\n\t\t\t\"rawalpindi\": \"PROPN\",\n\t\t\t\"losses\": \"NOUN\",\n\t\t\t\"tofu\": \"NOUN\",\n\t\t\t\"rattled\": \"VERB\",\n\t\t\t\"1758\": \"NUM\",\n\t\t\t\"vocal\": \"ADJ\",\n\t\t\t\"qatar\": \"PROPN\",\n\t\t\t\"cabinet\": \"NOUN\",\n\t\t\t\"mid-air\": \"NOUN\",\n\t\t\t\"around\": \"ADP\",\n\t\t\t\"shook\": \"VERB\",\n\t\t\t\"somberness\": \"NOUN\",\n\t\t\t\"allotted\": \"VERB\",\n\t\t\t\"satanic\": \"ADJ\",\n\t\t\t\"c.l.h.warwick@durham.ac.uk\": \"PROPN\",\n\t\t\t\"emergent\": \"ADJ\",\n\t\t\t\"modell\": \"PROPN\",\n\t\t\t\"spinach\": \"NOUN\",\n\t\t\t\"harboring\": \"VERB\",\n\t\t\t\"hay\": \"NOUN\",\n\t\t\t\"epis.\": \"ADJ\",\n\t\t\t\"arched\": \"ADJ\",\n\t\t\t\"temperate\": \"ADJ\",\n\t\t\t\"divans\": \"NOUN\",\n\t\t\t\"efficacy\": \"NOUN\",\n\t\t\t\"promote\": \"VERB\",\n\t\t\t\"involves\": \"VERB\",\n\t\t\t\"nclan\": \"PROPN\",\n\t\t\t\"skills\": \"NOUN\",\n\t\t\t\"http://www.ukrainianweb.com/chernobyl_ukraine.htm\": \"PROPN\",\n\t\t\t\"grandly\": \"ADV\",\n\t\t\t\"span\": \"NOUN\",\n\t\t\t\"throat\": \"NOUN\",\n\t\t\t\"towers\": \"NOUN\",\n\t\t\t\"nudes\": \"NOUN\",\n\t\t\t\"chavez\": \"PROPN\",\n\t\t\t\"cruz\": \"PROPN\",\n\t\t\t\"snakes\": \"NOUN\",\n\t\t\t\"-\": \"PUNCT\",\n\t\t\t\"rightholder\": \"NOUN\",\n\t\t\t\"passports\": \"NOUN\",\n\t\t\t\"condition\": \"NOUN\",\n\t\t\t\"briefed\": \"VERB\",\n\t\t\t\"rationale\": \"NOUN\",\n\t\t\t\"starfighter\": \"NOUN\",\n\t\t\t\"pantry\": \"NOUN\",\n\t\t\t\"quetta\": \"PROPN\",\n\t\t\t\"sept.\": \"PROPN\",\n\t\t\t\"loosing\": \"VERB\",\n\t\t\t\"fairer\": \"ADJ\",\n\t\t\t\"wastes\": \"NOUN\",\n\t\t\t\"north\": \"PROPN\",\n\t\t\t\"micro\": \"PROPN\",\n\t\t\t\"potential\": \"ADJ\",\n\t\t\t\"absorb\": \"VERB\",\n\t\t\t\"gusts\": \"NOUN\",\n\t\t\t\"besieged\": \"VERB\",\n\t\t\t\"immaculately\": \"ADV\",\n\t\t\t\"objects\": \"NOUN\",\n\t\t\t\"aswered\": \"VERB\",\n\t\t\t\"bonacci\": \"PROPN\",\n\t\t\t\"me$$age\": \"NOUN\",\n\t\t\t\"ethnically\": \"ADV\",\n\t\t\t\"consequently\": \"ADV\",\n\t\t\t\"protested\": \"VERB\",\n\t\t\t\"1800s\": \"NOUN\",\n\t\t\t\"shrugging\": \"VERB\",\n\t\t\t\"predict\": \"VERB\",\n\t\t\t\"dissolved\": \"VERB\",\n\t\t\t\"homosexuals\": \"NOUN\",\n\t\t\t\"bookstands\": \"NOUN\",\n\t\t\t\"leaflets\": \"NOUN\",\n\t\t\t\"'05\": \"NUM\",\n\t\t\t\"markings\": \"NOUN\",\n\t\t\t\"amended\": \"VERB\",\n\t\t\t\"facts\": \"NOUN\",\n\t\t\t\"tutor\": \"NOUN\",\n\t\t\t\"injurious\": \"ADJ\",\n\t\t\t\"impassively\": \"ADV\",\n\t\t\t\"nonsensical\": \"ADJ\",\n\t\t\t\"colonialists\": \"NOUN\",\n\t\t\t\"landmark\": \"NOUN\",\n\t\t\t\"tucked\": \"VERB\",\n\t\t\t\";)\": \"SYM\",\n\t\t\t\"leicester\": \"PROPN\",\n\t\t\t\"eulogic\": \"PROPN\",\n\t\t\t\"comparative\": \"ADJ\",\n\t\t\t\"tucson\": \"PROPN\",\n\t\t\t\"weird\": \"ADJ\",\n\t\t\t\"adviser\": \"NOUN\",\n\t\t\t\"bali\": \"PROPN\",\n\t\t\t\"stores\": \"NOUN\",\n\t\t\t\"narcotics\": \"NOUN\",\n\t\t\t\"awol\": \"ADJ\",\n\t\t\t\"definite\": \"ADJ\",\n\t\t\t\"ohh\": \"INTJ\",\n\t\t\t\"accomdating\": \"ADJ\",\n\t\t\t\"leporjj@selectenergy.com\": \"PROPN\",\n\t\t\t\"inhabits\": \"VERB\",\n\t\t\t\"thorell\": \"PROPN\",\n\t\t\t\"––\": \"PUNCT\",\n\t\t\t\"http://www.collectinghistory.net/chernobyl/\": \"PROPN\",\n\t\t\t\"vibrated\": \"VERB\",\n\t\t\t\"notify\": \"VERB\",\n\t\t\t\"includes\": \"VERB\",\n\t\t\t\"pointless\": \"ADJ\",\n\t\t\t\"marionette\": \"NOUN\",\n\t\t\t\"anti-democratic\": \"ADJ\",\n\t\t\t\"tehran\": \"PROPN\",\n\t\t\t\"2005\": \"NUM\",\n\t\t\t\"broadcast\": \"VERB\",\n\t\t\t\"disagree\": \"VERB\",\n\t\t\t\"fastened\": \"VERB\",\n\t\t\t\"spent\": \"VERB\",\n\t\t\t\"schedules\": \"NOUN\",\n\t\t\t\"picture\": \"NOUN\",\n\t\t\t\"stub\": \"NOUN\",\n\t\t\t\"1750\": \"NUM\",\n\t\t\t\"pork\": \"NOUN\",\n\t\t\t\"aching\": \"VERB\",\n\t\t\t\"bears\": \"NOUN\",\n\t\t\t\"portrayal\": \"NOUN\",\n\t\t\t\"disregard\": \"NOUN\",\n\t\t\t\"meant\": \"VERB\",\n\t\t\t\"any\": \"DET\",\n\t\t\t\"wholly\": \"ADV\",\n\t\t\t\"anemic\": \"ADJ\",\n\t\t\t\"behaving\": \"VERB\",\n\t\t\t\"outrunners\": \"NOUN\",\n\t\t\t\"shoulders\": \"NOUN\",\n\t\t\t\"appealed\": \"VERB\",\n\t\t\t\"timer\": \"NOUN\",\n\t\t\t\"santer\": \"PROPN\",\n\t\t\t\"half-a-crown\": \"NOUN\",\n\t\t\t\"wil\": \"AUX\",\n\t\t\t\"signs\": \"NOUN\",\n\t\t\t\"callon\": \"PROPN\",\n\t\t\t\"hoax\": \"NOUN\",\n\t\t\t\"quart\": \"NOUN\",\n\t\t\t\"alireza\": \"PROPN\",\n\t\t\t\"collections\": \"NOUN\",\n\t\t\t\"55,008\": \"NUM\",\n\t\t\t\"sicilian\": \"ADJ\",\n\t\t\t\"populate\": \"VERB\",\n\t\t\t\"horribly\": \"ADV\",\n\t\t\t\"gentilz\": \"PROPN\",\n\t\t\t\"voivodship\": \"PROPN\",\n\t\t\t\"painting\": \"NOUN\",\n\t\t\t\"bitmap\": \"NOUN\",\n\t\t\t\"scarne\": \"PROPN\",\n\t\t\t\"flashlights\": \"NOUN\",\n\t\t\t\"ranjit\": \"PROPN\",\n\t\t\t\"independents\": \"NOUN\",\n\t\t\t\"grabs\": \"VERB\",\n\t\t\t\"sa-\": \"INTJ\",\n\t\t\t\"phases\": \"NOUN\",\n\t\t\t\"target\": \"NOUN\",\n\t\t\t\"tugging\": \"VERB\",\n\t\t\t\"over-priced\": \"ADJ\",\n\t\t\t\"non-human\": \"ADJ\",\n\t\t\t\"careful\": \"ADJ\",\n\t\t\t\"nagin\": \"PROPN\",\n\t\t\t\"ratepayer\": \"NOUN\",\n\t\t\t\"anti-bush\": \"ADJ\",\n\t\t\t\"foods\": \"NOUN\",\n\t\t\t\"11.8\": \"NUM\",\n\t\t\t\"prudence\": \"NOUN\",\n\t\t\t\"finch\": \"NOUN\",\n\t\t\t\"narrative\": \"ADJ\",\n\t\t\t\"02:02\": \"NUM\",\n\t\t\t\"skittle\": \"PROPN\",\n\t\t\t\"west\": \"PROPN\",\n\t\t\t\"microbiologist\": \"NOUN\",\n\t\t\t\"advocates\": \"NOUN\",\n\t\t\t\"coursed\": \"VERB\",\n\t\t\t\"forelimb\": \"NOUN\",\n\t\t\t\"ease\": \"NOUN\",\n\t\t\t\"hangout\": \"NOUN\",\n\t\t\t\"greys\": \"NOUN\",\n\t\t\t\"inter-animation\": \"NOUN\",\n\t\t\t\"02:42\": \"NUM\",\n\t\t\t\"beefing\": \"VERB\",\n\t\t\t\"rhodesians\": \"NOUN\",\n\t\t\t\"princeton\": \"PROPN\",\n\t\t\t\"depiction\": \"NOUN\",\n\t\t\t\"demonstrations\": \"NOUN\",\n\t\t\t\"hears\": \"VERB\",\n\t\t\t\"brunaanastacio@hotmail.com\": \"PROPN\",\n\t\t\t\"issued\": \"VERB\",\n\t\t\t\"stilted\": \"ADJ\",\n\t\t\t\"imbalances\": \"NOUN\",\n\t\t\t\"strobe\": \"NOUN\",\n\t\t\t\"unconnected\": \"ADJ\",\n\t\t\t\"prague\": \"PROPN\",\n\t\t\t\"broke\": \"VERB\",\n\t\t\t\"inwards\": \"ADV\",\n\t\t\t\"birds\": \"NOUN\",\n\t\t\t\"analysts\": \"NOUN\",\n\t\t\t\"intimate\": \"ADJ\",\n\t\t\t\"hardliners\": \"NOUN\",\n\t\t\t\"sean.cooper@elpaso.com\": \"PROPN\",\n\t\t\t\"czechoslovakia\": \"PROPN\",\n\t\t\t\"respect\": \"NOUN\",\n\t\t\t\"sale\": \"NOUN\",\n\t\t\t\"hui\": \"PROPN\",\n\t\t\t\"fattening\": \"VERB\",\n\t\t\t\"turkmenistan\": \"PROPN\",\n\t\t\t\"seizure\": \"NOUN\",\n\t\t\t\"residential\": \"ADJ\",\n\t\t\t\"paraphernalia\": \"NOUN\",\n\t\t\t\"rationalist\": \"PROPN\",\n\t\t\t\"ʃɑʁl\": \"PROPN\",\n\t\t\t\"owing\": \"VERB\",\n\t\t\t\"padlocked\": \"VERB\",\n\t\t\t\"virus\": \"NOUN\",\n\t\t\t\"pimentel\": \"PROPN\",\n\t\t\t\"thirty-five\": \"NUM\",\n\t\t\t\"birla\": \"PROPN\",\n\t\t\t\"enron\": \"PROPN\",\n\t\t\t\"1940s\": \"NOUN\",\n\t\t\t\"photographers\": \"NOUN\",\n\t\t\t\"front\": \"NOUN\",\n\t\t\t\"resorted\": \"VERB\",\n\t\t\t\"petersen\": \"PROPN\",\n\t\t\t\"cinematic\": \"ADJ\",\n\t\t\t\"ankle\": \"NOUN\",\n\t\t\t\"jarrold\": \"PROPN\",\n\t\t\t\"spitfire\": \"PROPN\",\n\t\t\t\"independent\": \"ADJ\",\n\t\t\t\"http://www.ucei.berkeley.edu/ucei\": \"PROPN\",\n\t\t\t\"speculator\": \"NOUN\",\n\t\t\t\"759933\": \"NUM\",\n\t\t\t\"irene\": \"PROPN\",\n\t\t\t\"relief\": \"NOUN\",\n\t\t\t\"usmani\": \"PROPN\",\n\t\t\t\"hotheads\": \"NOUN\",\n\t\t\t\"newark\": \"PROPN\",\n\t\t\t\"carlo\": \"PROPN\",\n\t\t\t\"house-elf\": \"NOUN\",\n\t\t\t\"sawdust\": \"NOUN\",\n\t\t\t\"podcasts\": \"NOUN\",\n\t\t\t\"optimized\": \"VERB\",\n\t\t\t\"machines\": \"NOUN\",\n\t\t\t\"resisting\": \"VERB\",\n\t\t\t\"typically\": \"ADV\",\n\t\t\t\"petri\": \"PROPN\",\n\t\t\t\"doors\": \"NOUN\",\n\t\t\t\"direction\": \"NOUN\",\n\t\t\t\"philanthropic\": \"ADJ\",\n\t\t\t\"l'instant\": \"PROPN\",\n\t\t\t\"invitation\": \"NOUN\",\n\t\t\t\"chad\": \"PROPN\",\n\t\t\t\"07/18/2000\": \"NUM\",\n\t\t\t\"transforming\": \"VERB\",\n\t\t\t\"evangelicals\": \"PROPN\",\n\t\t\t\"sofa\": \"NOUN\",\n\t\t\t\"cheekbones\": \"NOUN\",\n\t\t\t\"initiated\": \"VERB\",\n\t\t\t\"confidential\": \"ADJ\",\n\t\t\t\"specifics\": \"NOUN\",\n\t\t\t\"575\": \"NUM\",\n\t\t\t\"bumfluff\": \"NOUN\",\n\t\t\t\"uncontaminated\": \"ADJ\",\n\t\t\t\"projectlondonmovie.com\": \"PROPN\",\n\t\t\t\"08\": \"NUM\",\n\t\t\t\"actionable\": \"ADJ\",\n\t\t\t\"422,000\": \"NUM\",\n\t\t\t\"hesitations\": \"NOUN\",\n\t\t\t\"cosplay\": \"NOUN\",\n\t\t\t\"dee\": \"PROPN\",\n\t\t\t\"braunsberg\": \"PROPN\",\n\t\t\t\"gin\": \"NOUN\",\n\t\t\t\"non-lexical\": \"ADJ\",\n\t\t\t\"7034\": \"NUM\",\n\t\t\t\"96/96/ec\": \"NUM\",\n\t\t\t\"lure\": \"NOUN\",\n\t\t\t\"psalmist\": \"PROPN\",\n\t\t\t\"aspire\": \"VERB\",\n\t\t\t\"slaves\": \"NOUN\",\n\t\t\t\"crosse\": \"PROPN\",\n\t\t\t\"wondered\": \"VERB\",\n\t\t\t\"aspirin\": \"NOUN\",\n\t\t\t\"glasses\": \"NOUN\",\n\t\t\t\"subforms\": \"NOUN\",\n\t\t\t\"unsustainable\": \"ADJ\",\n\t\t\t\"massive\": \"ADJ\",\n\t\t\t\"trainers\": \"NOUN\",\n\t\t\t\"brooded\": \"VERB\",\n\t\t\t\"beardies\": \"NOUN\",\n\t\t\t\"sends\": \"VERB\",\n\t\t\t\"jihadist\": \"NOUN\",\n\t\t\t\"initiation\": \"NOUN\",\n\t\t\t\"killie\": \"NOUN\",\n\t\t\t\"investigación\": \"PROPN\",\n\t\t\t\"heating\": \"NOUN\",\n\t\t\t\"striving\": \"NOUN\",\n\t\t\t\"chaser\": \"NOUN\",\n\t\t\t\"747\": \"NUM\",\n\t\t\t\"fishman\": \"PROPN\",\n\t\t\t\"inconsiderable\": \"ADJ\",\n\t\t\t\"monitoring\": \"NOUN\",\n\t\t\t\"savier\": \"PROPN\",\n\t\t\t\"versailles\": \"NOUN\",\n\t\t\t\"islamabad\": \"PROPN\",\n\t\t\t\"blasting\": \"NOUN\",\n\t\t\t\"grade\": \"NOUN\",\n\t\t\t\"62nd\": \"ADJ\",\n\t\t\t\"flannel\": \"NOUN\",\n\t\t\t\"sisters\": \"NOUN\",\n\t\t\t\"intercom\": \"NOUN\",\n\t\t\t\"sighing\": \"VERB\",\n\t\t\t\"volcanic\": \"ADJ\",\n\t\t\t\"none\": \"PRON\",\n\t\t\t\"shedding\": \"VERB\",\n\t\t\t\"palace\": \"NOUN\",\n\t\t\t\"architecturally\": \"ADV\",\n\t\t\t\"eu\": \"PROPN\",\n\t\t\t\"separation\": \"NOUN\",\n\t\t\t\"procedure\": \"NOUN\",\n\t\t\t\"grueling\": \"ADJ\",\n\t\t\t\"accomplished\": \"VERB\",\n\t\t\t\"nigeria\": \"PROPN\",\n\t\t\t\"disatisfied\": \"ADJ\",\n\t\t\t\"basic\": \"ADJ\",\n\t\t\t\"voters\": \"NOUN\",\n\t\t\t\"robertson\": \"PROPN\",\n\t\t\t\"willl\": \"AUX\",\n\t\t\t\"peacetime\": \"NOUN\",\n\t\t\t\"misto\": \"NOUN\",\n\t\t\t\"pink\": \"ADJ\",\n\t\t\t\"wherein\": \"ADV\",\n\t\t\t\"stan\": \"PROPN\",\n\t\t\t\"feminism\": \"NOUN\",\n\t\t\t\"crusade\": \"NOUN\",\n\t\t\t\"apogee\": \"NOUN\",\n\t\t\t\"premised\": \"VERB\",\n\t\t\t\"beans\": \"NOUN\",\n\t\t\t\"roadshows\": \"NOUN\",\n\t\t\t\"self\": \"NOUN\",\n\t\t\t\"mourey\": \"PROPN\",\n\t\t\t\"coals\": \"NOUN\",\n\t\t\t\"tonnage\": \"NOUN\",\n\t\t\t\"drew\": \"VERB\",\n\t\t\t\"aggravation\": \"NOUN\",\n\t\t\t\"gleams\": \"NOUN\",\n\t\t\t\"multiple\": \"ADJ\",\n\t\t\t\"scapular\": \"NOUN\",\n\t\t\t\"packets\": \"NOUN\",\n\t\t\t\"sunlight\": \"NOUN\",\n\t\t\t\"juicy\": \"ADJ\",\n\t\t\t\"paratexts\": \"NOUN\",\n\t\t\t\"reluctant\": \"ADJ\",\n\t\t\t\"overheats\": \"VERB\",\n\t\t\t\"evzone\": \"ADJ\",\n\t\t\t\"aeronautics\": \"PROPN\",\n\t\t\t\"armaments\": \"NOUN\",\n\t\t\t\"1602\": \"NUM\",\n\t\t\t\"visas\": \"NOUN\",\n\t\t\t\"ravines\": \"NOUN\",\n\t\t\t\"inattentive\": \"ADJ\",\n\t\t\t\"ceased\": \"VERB\",\n\t\t\t\"potatos\": \"NOUN\",\n\t\t\t\"threatening\": \"VERB\",\n\t\t\t\"distances\": \"NOUN\",\n\t\t\t\"anglo\": \"ADJ\",\n\t\t\t\"commentaries\": \"NOUN\",\n\t\t\t\"thanx\": \"NOUN\",\n\t\t\t\"commence\": \"VERB\",\n\t\t\t\"reconcile\": \"VERB\",\n\t\t\t\"wayne\": \"PROPN\",\n\t\t\t\"rond\": \"PROPN\",\n\t\t\t\"anti-luther\": \"ADJ\",\n\t\t\t\"fulfilling\": \"VERB\",\n\t\t\t\"spiraled\": \"VERB\",\n\t\t\t\"'cause\": \"SCONJ\",\n\t\t\t\"done\": \"VERB\",\n\t\t\t\"ashfaq\": \"PROPN\",\n\t\t\t\"universe\": \"NOUN\",\n\t\t\t\"getting\": \"VERB\",\n\t\t\t\"retailing\": \"VERB\",\n\t\t\t\"untitled\": \"VERB\",\n\t\t\t\"lightning\": \"NOUN\",\n\t\t\t\"hunkering\": \"VERB\",\n\t\t\t\"bark\": \"NOUN\",\n\t\t\t\"standards\": \"NOUN\",\n\t\t\t\"soccer\": \"NOUN\",\n\t\t\t\"interpolated\": \"VERB\",\n\t\t\t\"1988\": \"NUM\",\n\t\t\t\"increasing\": \"VERB\",\n\t\t\t\"transcripts\": \"NOUN\",\n\t\t\t\"rescued\": \"VERB\",\n\t\t\t\"carpenter\": \"NOUN\",\n\t\t\t\"raiser\": \"NOUN\",\n\t\t\t\"coogan\": \"PROPN\",\n\t\t\t\"resurrect\": \"VERB\",\n\t\t\t\"speak\": \"VERB\",\n\t\t\t\"peterson\": \"PROPN\",\n\t\t\t\"panes\": \"NOUN\",\n\t\t\t\"earthly\": \"ADJ\",\n\t\t\t\"syria\": \"PROPN\",\n\t\t\t\"1830s\": \"NOUN\",\n\t\t\t\"hankering\": \"VERB\",\n\t\t\t\"6/4/11\": \"NUM\",\n\t\t\t\"iotm\": \"PROPN\",\n\t\t\t\"experiencing\": \"VERB\",\n\t\t\t\"slimskim\": \"PROPN\",\n\t\t\t\"mesoamerica\": \"PROPN\",\n\t\t\t\"dressers\": \"NOUN\",\n\t\t\t\"mt\": \"NOUN\",\n\t\t\t\"denton\": \"PROPN\",\n\t\t\t\"dekalb\": \"PROPN\",\n\t\t\t\"nunzio\": \"PROPN\",\n\t\t\t\"nva\": \"PROPN\",\n\t\t\t\"tyneside\": \"PROPN\",\n\t\t\t\"eclipses\": \"NOUN\",\n\t\t\t\"alarmingly\": \"ADV\",\n\t\t\t\"gas\": \"NOUN\",\n\t\t\t\"questionnaires\": \"NOUN\",\n\t\t\t\"varnished\": \"ADJ\",\n\t\t\t\"denise\": \"PROPN\",\n\t\t\t\"unconcious\": \"ADJ\",\n\t\t\t\"lawful\": \"ADJ\",\n\t\t\t\"projections\": \"NOUN\",\n\t\t\t\"jeff\": \"PROPN\",\n\t\t\t\"uninspired\": \"ADJ\",\n\t\t\t\"cluster\": \"NOUN\",\n\t\t\t\"dna\": \"NOUN\",\n\t\t\t\"thousand\": \"NUM\",\n\t\t\t\"investigators\": \"NOUN\",\n\t\t\t\"minutes\": \"NOUN\",\n\t\t\t\"flush\": \"NOUN\",\n\t\t\t\"s\": \"PART\",\n\t\t\t\"lunchboxes\": \"NOUN\",\n\t\t\t\"wriggle\": \"NOUN\",\n\t\t\t\"brideshead\": \"PROPN\",\n\t\t\t\"proposal\": \"NOUN\",\n\t\t\t\"procrastination\": \"NOUN\",\n\t\t\t\"ave.\": \"PROPN\",\n\t\t\t\"eradicate\": \"VERB\",\n\t\t\t\"levi\": \"PROPN\",\n\t\t\t\"bared\": \"VERB\",\n\t\t\t\"540,000\": \"NUM\",\n\t\t\t\"differentiate\": \"VERB\",\n\t\t\t\"ragga\": \"NOUN\",\n\t\t\t\"science\": \"NOUN\",\n\t\t\t\"torrents\": \"NOUN\",\n\t\t\t\"naturalistic\": \"ADJ\",\n\t\t\t\"shuddering\": \"NOUN\",\n\t\t\t\"carrano\": \"PROPN\",\n\t\t\t\"buddies\": \"NOUN\",\n\t\t\t\"wii\": \"PROPN\",\n\t\t\t\"nazarenes\": \"PROPN\",\n\t\t\t\"seeing\": \"VERB\",\n\t\t\t\"re-purpose\": \"VERB\",\n\t\t\t\"coal\": \"NOUN\",\n\t\t\t\"m.nordstrom@pecorp.com\": \"PROPN\",\n\t\t\t\"directly\": \"ADV\",\n\t\t\t\"cullen\": \"PROPN\",\n\t\t\t\"exploitation\": \"NOUN\",\n\t\t\t\"winter\": \"NOUN\",\n\t\t\t\"inuit\": \"ADJ\",\n\t\t\t\"d-\": \"INTJ\",\n\t\t\t\"velocity\": \"NOUN\",\n\t\t\t\"bookkeeping\": \"NOUN\",\n\t\t\t\"barren\": \"ADJ\",\n\t\t\t\"rs\": \"SYM\",\n\t\t\t\"arrv.\": \"VERB\",\n\t\t\t\"brian\": \"PROPN\",\n\t\t\t\"disappearance\": \"NOUN\",\n\t\t\t\"1.\": \"NUM\",\n\t\t\t\"rockies\": \"PROPN\",\n\t\t\t\"saves\": \"VERB\",\n\t\t\t\"theravada\": \"PROPN\",\n\t\t\t\"collages\": \"NOUN\",\n\t\t\t\"unfavourable\": \"ADJ\",\n\t\t\t\"dismay\": \"NOUN\",\n\t\t\t\"watchful\": \"ADJ\",\n\t\t\t\"panza\": \"PROPN\",\n\t\t\t\"cyd\": \"PROPN\",\n\t\t\t\"866\": \"NUM\",\n\t\t\t\"rabin\": \"PROPN\",\n\t\t\t\"uncle\": \"NOUN\",\n\t\t\t\"glaring\": \"ADJ\",\n\t\t\t\"revolutionary\": \"ADJ\",\n\t\t\t\"lindqvist\": \"PROPN\",\n\t\t\t\"finkelstein\": \"PROPN\",\n\t\t\t\"129\": \"NUM\",\n\t\t\t\"&\": \"CCONJ\",\n\t\t\t\"10016\": \"NUM\",\n\t\t\t\"exploding\": \"VERB\",\n\t\t\t\"gm\": \"PROPN\",\n\t\t\t\"clouds\": \"NOUN\",\n\t\t\t\"couches\": \"NOUN\",\n\t\t\t\"transformational\": \"ADJ\",\n\t\t\t\"ham\": \"NOUN\",\n\t\t\t\"thorough\": \"ADJ\",\n\t\t\t\"exactly\": \"ADV\",\n\t\t\t\"insecurities\": \"NOUN\",\n\t\t\t\"carbons\": \"NOUN\",\n\t\t\t\"eleuthra\": \"PROPN\",\n\t\t\t\"afternoon\": \"NOUN\",\n\t\t\t\"cloak\": \"NOUN\",\n\t\t\t\"differing\": \"VERB\",\n\t\t\t\"corey\": \"PROPN\",\n\t\t\t\"certain\": \"ADJ\",\n\t\t\t\"serried\": \"ADJ\",\n\t\t\t\"veer\": \"VERB\",\n\t\t\t\"foodies\": \"NOUN\",\n\t\t\t\"rosette\": \"NOUN\",\n\t\t\t\"unfaithful\": \"ADJ\",\n\t\t\t\"manchester\": \"PROPN\",\n\t\t\t\"biochemist\": \"NOUN\",\n\t\t\t\"hacked\": \"VERB\",\n\t\t\t\"learning\": \"NOUN\",\n\t\t\t\"m300\": \"PROPN\",\n\t\t\t\"breathe\": \"VERB\",\n\t\t\t\"revolves\": \"VERB\",\n\t\t\t\"par\": \"ADJ\",\n\t\t\t\"khosla\": \"PROPN\",\n\t\t\t\"13389\": \"NUM\",\n\t\t\t\"constant\": \"ADJ\",\n\t\t\t\"dazzling\": \"ADJ\",\n\t\t\t\"commissioners\": \"NOUN\",\n\t\t\t\"intuition\": \"NOUN\",\n\t\t\t\"trial\": \"NOUN\",\n\t\t\t\"drenched\": \"VERB\",\n\t\t\t\"yucatán\": \"PROPN\",\n\t\t\t\"energetic\": \"ADJ\",\n\t\t\t\"stockings\": \"NOUN\",\n\t\t\t\"criminals\": \"NOUN\",\n\t\t\t\"future\": \"NOUN\",\n\t\t\t\"neoplatonic\": \"ADJ\",\n\t\t\t\"yea\": \"INTJ\",\n\t\t\t\".\": \"PUNCT\",\n\t\t\t\"unmolested\": \"ADJ\",\n\t\t\t\"returnees\": \"NOUN\",\n\t\t\t\"lobbed\": \"VERB\",\n\t\t\t\"tennis\": \"NOUN\",\n\t\t\t\"lick\": \"VERB\",\n\t\t\t\"gulping\": \"VERB\",\n\t\t\t\"chan\": \"PROPN\",\n\t\t\t\"tolerable\": \"ADJ\",\n\t\t\t\"displacements\": \"NOUN\",\n\t\t\t\"iv\": \"NOUN\",\n\t\t\t\"benefits\": \"NOUN\",\n\t\t\t\"juno\": \"PROPN\",\n\t\t\t\"next\": \"ADJ\",\n\t\t\t\"respectively\": \"ADV\",\n\t\t\t\"hibernate\": \"VERB\",\n\t\t\t\"betray\": \"VERB\",\n\t\t\t\"stockpiles\": \"NOUN\",\n\t\t\t\"haircuts\": \"NOUN\",\n\t\t\t\"extrcurricular\": \"ADJ\",\n\t\t\t\"boxes\": \"NOUN\",\n\t\t\t\"buildings\": \"NOUN\",\n\t\t\t\"pain\": \"NOUN\",\n\t\t\t\"echo\": \"VERB\",\n\t\t\t\"riverside\": \"PROPN\",\n\t\t\t\"non-muslim\": \"ADJ\",\n\t\t\t\"arguing\": \"VERB\",\n\t\t\t\"siddiqui\": \"PROPN\",\n\t\t\t\"downstairs\": \"ADV\",\n\t\t\t\"percy\": \"PROPN\",\n\t\t\t\"tre\": \"PROPN\",\n\t\t\t\"evolution\": \"NOUN\",\n\t\t\t\"bruises\": \"NOUN\",\n\t\t\t\"lebanon\": \"PROPN\",\n\t\t\t\"inquiry\": \"NOUN\",\n\t\t\t\"cheered\": \"VERB\",\n\t\t\t\"poor\": \"ADJ\",\n\t\t\t\"veritable\": \"ADJ\",\n\t\t\t\"noone\": \"PRON\",\n\t\t\t\"stony\": \"ADJ\",\n\t\t\t\"surgically\": \"ADV\",\n\t\t\t\"bernhard\": \"PROPN\",\n\t\t\t\"mocking\": \"NOUN\",\n\t\t\t\"alphabets\": \"NOUN\",\n\t\t\t\"pill\": \"NOUN\",\n\t\t\t\"ncaa\": \"PROPN\",\n\t\t\t\"churchyards\": \"NOUN\",\n\t\t\t\"righ...@sonic.net\": \"PROPN\",\n\t\t\t\"querelle\": \"PROPN\",\n\t\t\t\"bazar\": \"PROPN\",\n\t\t\t\"chiropractric\": \"NOUN\",\n\t\t\t\"h-0002/99\": \"NUM\",\n\t\t\t\"windows\": \"NOUN\",\n\t\t\t\"wangs\": \"NOUN\",\n\t\t\t\"hopelessness\": \"NOUN\",\n\t\t\t\"heartbreaks\": \"NOUN\",\n\t\t\t\"binderman\": \"PROPN\",\n\t\t\t\"heck\": \"NOUN\",\n\t\t\t\"blend\": \"NOUN\",\n\t\t\t\"bta\": \"PROPN\",\n\t\t\t\"massoud\": \"PROPN\",\n\t\t\t\"whdh\": \"PROPN\",\n\t\t\t\"effortful\": \"ADJ\",\n\t\t\t\"knee\": \"NOUN\",\n\t\t\t\"improving\": \"VERB\",\n\t\t\t\"207\": \"NUM\",\n\t\t\t\"7:35\": \"NUM\",\n\t\t\t\"analytical\": \"ADJ\",\n\t\t\t\"frontiersman\": \"NOUN\",\n\t\t\t\"eng.\": \"ADJ\",\n\t\t\t\"proprietary\": \"ADJ\",\n\t\t\t\"====================================================\": \"SYM\",\n\t\t\t\"bissen\": \"PROPN\",\n\t\t\t\"embedded\": \"VERB\",\n\t\t\t\"saplings\": \"NOUN\",\n\t\t\t\"flopping\": \"NOUN\",\n\t\t\t\"detract\": \"VERB\",\n\t\t\t\"season\": \"NOUN\",\n\t\t\t\"12/14/2000\": \"NUM\",\n\t\t\t\"bettas\": \"NOUN\",\n\t\t\t\"paper\": \"NOUN\",\n\t\t\t\"canceling\": \"VERB\",\n\t\t\t\"nightclubs\": \"NOUN\",\n\t\t\t\"algae\": \"NOUN\",\n\t\t\t\"jonathan\": \"PROPN\",\n\t\t\t\"talking\": \"VERB\",\n\t\t\t\"clothes\": \"NOUN\",\n\t\t\t\"dynegy\": \"PROPN\",\n\t\t\t\"jolt\": \"VERB\",\n\t\t\t\"carrasco\": \"PROPN\",\n\t\t\t\"petrarch\": \"PROPN\",\n\t\t\t\"bearded\": \"ADJ\",\n\t\t\t\"marry\": \"VERB\",\n\t\t\t\"sped\": \"VERB\",\n\t\t\t\"roadhouse\": \"PROPN\",\n\t\t\t\"teh\": \"DET\",\n\t\t\t\"f.r.s.\": \"PROPN\",\n\t\t\t\"cybernetic\": \"ADJ\",\n\t\t\t\"529999204044\": \"NUM\",\n\t\t\t\"lauded\": \"VERB\",\n\t\t\t\"rate\": \"NOUN\",\n\t\t\t\"conquerors\": \"NOUN\",\n\t\t\t\"vying\": \"VERB\",\n\t\t\t\"countless\": \"ADJ\",\n\t\t\t\"claire.bailey-ross@port.ac.uk\": \"PROPN\",\n\t\t\t\"foul\": \"ADJ\",\n\t\t\t\"miller\": \"PROPN\",\n\t\t\t\"sneaks\": \"VERB\",\n\t\t\t\"|--------+----------------------->\": \"PUNCT\",\n\t\t\t\"okabayashi\": \"PROPN\",\n\t\t\t\"wholesome\": \"ADJ\",\n\t\t\t\"abomination\": \"NOUN\",\n\t\t\t\"direct\": \"ADJ\",\n\t\t\t\"832.676.3177\": \"NUM\",\n\t\t\t\"penultimate\": \"ADJ\",\n\t\t\t\"micron\": \"NOUN\",\n\t\t\t\"n.o.\": \"PROPN\",\n\t\t\t\"reorganisation\": \"NOUN\",\n\t\t\t\"corbyn\": \"PROPN\",\n\t\t\t\"delay\": \"NOUN\",\n\t\t\t\"saxby\": \"PROPN\",\n\t\t\t\"lemelpe@nu.com\": \"PROPN\",\n\t\t\t\"insecticide\": \"NOUN\",\n\t\t\t\"mornings\": \"NOUN\",\n\t\t\t\"unwitting\": \"ADJ\",\n\t\t\t\"replied\": \"VERB\",\n\t\t\t\"dress\": \"NOUN\",\n\t\t\t\"pail\": \"NOUN\",\n\t\t\t\"grove\": \"NOUN\",\n\t\t\t\"tsarevna\": \"PROPN\",\n\t\t\t\"phoney\": \"ADJ\",\n\t\t\t\"hurricane\": \"PROPN\",\n\t\t\t\"tomb\": \"NOUN\",\n\t\t\t\"33rd\": \"ADJ\",\n\t\t\t\"clips\": \"NOUN\",\n\t\t\t\"cheese\": \"NOUN\",\n\t\t\t\"dallas\": \"PROPN\",\n\t\t\t\"raises\": \"VERB\",\n\t\t\t\"60's\": \"NOUN\",\n\t\t\t\"51\": \"NUM\",\n\t\t\t\"type\": \"NOUN\",\n\t\t\t\"bday\": \"NOUN\",\n\t\t\t\"tome\": \"NOUN\",\n\t\t\t\"mohammad\": \"PROPN\",\n\t\t\t\"prepayment\": \"NOUN\",\n\t\t\t\"toilet\": \"NOUN\",\n\t\t\t\"atty\": \"NOUN\",\n\t\t\t\"porte\": \"PROPN\",\n\t\t\t\"levers\": \"NOUN\",\n\t\t\t\"despective\": \"ADJ\",\n\t\t\t\"6500\": \"NUM\",\n\t\t\t\"no-44\": \"NUM\",\n\t\t\t\"comfortable\": \"ADJ\",\n\t\t\t\"sixteenth\": \"ADJ\",\n\t\t\t\"happy\": \"ADJ\",\n\t\t\t\"panicking\": \"VERB\",\n\t\t\t\"strutting\": \"VERB\",\n\t\t\t\"cyanogen\": \"PROPN\",\n\t\t\t\"systematically\": \"ADV\",\n\t\t\t\"sprouts\": \"NOUN\",\n\t\t\t\"#istandwithahmed\": \"PROPN\",\n\t\t\t\"talent\": \"NOUN\",\n\t\t\t\"mid-size\": \"ADJ\",\n\t\t\t\"pixie\": \"NOUN\",\n\t\t\t\"ups\": \"NOUN\",\n\t\t\t\"clelia\": \"PROPN\",\n\t\t\t\"chitonga\": \"PROPN\",\n\t\t\t\"neighbouring\": \"VERB\",\n\t\t\t\"crown\": \"NOUN\",\n\t\t\t\"spending\": \"VERB\",\n\t\t\t\"sunburn\": \"PROPN\",\n\t\t\t\"tbh\": \"ADV\",\n\t\t\t\"than\": \"ADP\",\n\t\t\t\"moi\": \"PROPN\",\n\t\t\t\"hydration\": \"NOUN\",\n\t\t\t\"court\": \"PROPN\",\n\t\t\t\"hedwig\": \"PROPN\",\n\t\t\t\"rothko\": \"PROPN\",\n\t\t\t\"minute\": \"NOUN\",\n\t\t\t\"c\": \"PROPN\",\n\t\t\t\"sleigh\": \"NOUN\",\n\t\t\t\"chronicler\": \"NOUN\",\n\t\t\t\"$$\": \"SYM\",\n\t\t\t\"ordained\": \"VERB\",\n\t\t\t\"civilians\": \"NOUN\",\n\t\t\t\"deities\": \"NOUN\",\n\t\t\t\"forcefully\": \"ADV\",\n\t\t\t\"auckland\": \"PROPN\",\n\t\t\t\"1s9\": \"NOUN\",\n\t\t\t\"northwestern\": \"PROPN\",\n\t\t\t\"alvarado\": \"PROPN\",\n\t\t\t\"time\": \"NOUN\",\n\t\t\t\"iguana\": \"NOUN\",\n\t\t\t\"hr\": \"NOUN\",\n\t\t\t\"re-election\": \"NOUN\",\n\t\t\t\"chant\": \"VERB\",\n\t\t\t\"manuscript\": \"NOUN\",\n\t\t\t\"critters\": \"NOUN\",\n\t\t\t\"pretended\": \"VERB\",\n\t\t\t\"lauding\": \"VERB\",\n\t\t\t\"wields\": \"VERB\",\n\t\t\t\"behavior\": \"NOUN\",\n\t\t\t\"retake\": \"VERB\",\n\t\t\t\"!!!?\": \"PUNCT\",\n\t\t\t\",?\": \"PUNCT\",\n\t\t\t\"grimace\": \"NOUN\",\n\t\t\t\"pinching\": \"VERB\",\n\t\t\t\"consumed\": \"VERB\",\n\t\t\t\"airline\": \"NOUN\",\n\t\t\t\"rotating\": \"VERB\",\n\t\t\t\"sophie\": \"PROPN\",\n\t\t\t\"precious\": \"ADJ\",\n\t\t\t\"soon\": \"ADV\",\n\t\t\t\"maya\": \"PROPN\",\n\t\t\t\"z\": \"NOUN\",\n\t\t\t\"turmoil\": \"NOUN\",\n\t\t\t\"comfortably\": \"ADV\",\n\t\t\t\"nadereh\": \"PROPN\",\n\t\t\t\"sf\": \"PROPN\",\n\t\t\t\"torneby\": \"PROPN\",\n\t\t\t\"laid\": \"VERB\",\n\t\t\t\"utilize\": \"VERB\",\n\t\t\t\"independently\": \"ADV\",\n\t\t\t\"mandy\": \"PROPN\",\n\t\t\t\"estimates\": \"NOUN\",\n\t\t\t\"cocked\": \"ADJ\",\n\t\t\t\"energyphiles\": \"NOUN\",\n\t\t\t\"eleven\": \"NUM\",\n\t\t\t\"ba.consumers\": \"NOUN\",\n\t\t\t\"subform\": \"NOUN\",\n\t\t\t\"09:01\": \"NUM\",\n\t\t\t\"couples\": \"NOUN\",\n\t\t\t\"canadian\": \"ADJ\",\n\t\t\t\"carlos\": \"PROPN\",\n\t\t\t\"luv\": \"NOUN\",\n\t\t\t\"intervening\": \"VERB\",\n\t\t\t\"farmland\": \"NOUN\",\n\t\t\t\"aft\": \"ADV\",\n\t\t\t\"stately\": \"ADJ\",\n\t\t\t\"karlgren\": \"PROPN\",\n\t\t\t\"oklahoma\": \"PROPN\",\n\t\t\t\"occupations\": \"NOUN\",\n\t\t\t\"peacekeeping\": \"NOUN\",\n\t\t\t\"hypnotized\": \"VERB\",\n\t\t\t\"1939\": \"NUM\",\n\t\t\t\"palm\": \"NOUN\",\n\t\t\t\"quietly\": \"ADV\",\n\t\t\t\"ushering\": \"VERB\",\n\t\t\t\"brokerage\": \"NOUN\",\n\t\t\t\"murderers\": \"NOUN\",\n\t\t\t\"http://www.oneworld.org/index_oc/issue196/byckau.html\": \"PROPN\",\n\t\t\t\"viable\": \"ADJ\",\n\t\t\t\"cuc\": \"NOUN\",\n\t\t\t\"1,095,000\": \"NUM\",\n\t\t\t\"retailers\": \"NOUN\",\n\t\t\t\"tank\": \"NOUN\",\n\t\t\t\"laptops\": \"NOUN\",\n\t\t\t\"overwhelm\": \"VERB\",\n\t\t\t\"1575\": \"NUM\",\n\t\t\t\"hawk\": \"PROPN\",\n\t\t\t\"audacity\": \"NOUN\",\n\t\t\t\"249\": \"NUM\",\n\t\t\t\"liechtenstein\": \"PROPN\",\n\t\t\t\"tip\": \"NOUN\",\n\t\t\t\"auto\": \"NOUN\",\n\t\t\t\"deutsched\": \"PROPN\",\n\t\t\t\"carol.st.clair@enron.com\": \"PROPN\",\n\t\t\t\"tan\": \"PROPN\",\n\t\t\t\"cataloging\": \"VERB\",\n\t\t\t\"http://www.amazon.ca/exec/obidos/asin/0915765381/701-3377456-8181939\": \"PROPN\",\n\t\t\t\"can\": \"AUX\",\n\t\t\t\"restless\": \"ADJ\",\n\t\t\t\"effective\": \"ADJ\",\n\t\t\t\"bathe\": \"VERB\",\n\t\t\t\"soaring\": \"VERB\",\n\t\t\t\"revisited\": \"VERB\",\n\t\t\t\"1892\": \"NUM\",\n\t\t\t\"reborn\": \"ADJ\",\n\t\t\t\"ex-husband\": \"NOUN\",\n\t\t\t\"dogs\": \"NOUN\",\n\t\t\t\"scoop\": \"NOUN\",\n\t\t\t\"sad\": \"ADJ\",\n\t\t\t\"insofar\": \"SCONJ\",\n\t\t\t\"consult\": \"VERB\",\n\t\t\t\"moreover\": \"ADV\",\n\t\t\t\"disgusting\": \"ADJ\",\n\t\t\t\"exacerbated\": \"VERB\",\n\t\t\t\"brink\": \"NOUN\",\n\t\t\t\"-------------------------------------------------------------\": \"PUNCT\",\n\t\t\t\"paragraph\": \"NOUN\",\n\t\t\t\"engendered\": \"VERB\",\n\t\t\t\"evaluated\": \"VERB\",\n\t\t\t\"17547490\": \"NUM\",\n\t\t\t\"piles\": \"NOUN\",\n\t\t\t\"sufaat\": \"PROPN\",\n\t\t\t\"phonne\": \"NOUN\",\n\t\t\t\"portugese\": \"ADJ\",\n\t\t\t\"breeded\": \"VERB\",\n\t\t\t\"leaving\": \"VERB\",\n\t\t\t\"semifreddo\": \"NOUN\",\n\t\t\t\"prescient\": \"ADJ\",\n\t\t\t\"australian\": \"ADJ\",\n\t\t\t\"60,760\": \"NUM\",\n\t\t\t\"sink\": \"NOUN\",\n\t\t\t\"seasonings\": \"NOUN\",\n\t\t\t\"seville\": \"PROPN\",\n\t\t\t\"chartering\": \"VERB\",\n\t\t\t\"soared\": \"VERB\",\n\t\t\t\"training\": \"NOUN\",\n\t\t\t\"punishing\": \"VERB\",\n\t\t\t\"qasim\": \"PROPN\",\n\t\t\t\"comparison\": \"NOUN\",\n\t\t\t\"heated\": \"VERB\",\n\t\t\t\"happiness\": \"NOUN\",\n\t\t\t\"prosperous\": \"ADJ\",\n\t\t\t\"highlights\": \"NOUN\",\n\t\t\t\"tv\": \"NOUN\",\n\t\t\t\"approves\": \"VERB\",\n\t\t\t\"unwanted\": \"ADJ\",\n\t\t\t\"enforcing\": \"VERB\",\n\t\t\t\"spreading\": \"VERB\",\n\t\t\t\"linda\": \"PROPN\",\n\t\t\t\"cautionary\": \"ADJ\",\n\t\t\t\"hobby\": \"NOUN\",\n\t\t\t\"mullahs\": \"NOUN\",\n\t\t\t\"c.\": \"ADV\",\n\t\t\t\"189\": \"NUM\",\n\t\t\t\"a.m.\": \"NOUN\",\n\t\t\t\"unquantified\": \"ADJ\",\n\t\t\t\"slick\": \"ADJ\",\n\t\t\t\"tugged\": \"VERB\",\n\t\t\t\"exceed\": \"VERB\",\n\t\t\t\"tacky\": \"ADJ\",\n\t\t\t\"yo\": \"PRON\",\n\t\t\t\"korean\": \"ADJ\",\n\t\t\t\"10:51\": \"NUM\",\n\t\t\t\"9/11\": \"NUM\",\n\t\t\t\"beachcrofts\": \"PROPN\",\n\t\t\t\"govt\": \"NOUN\",\n\t\t\t\"pan-democrat\": \"NOUN\",\n\t\t\t\"excitement\": \"NOUN\",\n\t\t\t\"denying\": \"VERB\",\n\t\t\t\"closs\": \"PROPN\",\n\t\t\t\"leon\": \"PROPN\",\n\t\t\t\"hm\": \"INTJ\",\n\t\t\t\"regain\": \"VERB\",\n\t\t\t\"astronomer\": \"NOUN\",\n\t\t\t\"tangible\": \"ADJ\",\n\t\t\t\"dynamics\": \"NOUN\",\n\t\t\t\"xvii\": \"NUM\",\n\t\t\t\"pre-organised\": \"VERB\",\n\t\t\t\"satanists\": \"PROPN\",\n\t\t\t\"hardened\": \"VERB\",\n\t\t\t\"no-15\": \"NUM\",\n\t\t\t\"sharq\": \"PROPN\",\n\t\t\t\"decreasing\": \"VERB\",\n\t\t\t\"08:23\": \"NUM\",\n\t\t\t\"al\": \"PROPN\",\n\t\t\t\"symmetry\": \"NOUN\",\n\t\t\t\"07/19/2001\": \"NUM\",\n\t\t\t\"which\": \"PRON\",\n\t\t\t\"columns\": \"NOUN\",\n\t\t\t\"pigs\": \"NOUN\",\n\t\t\t\"undertake\": \"VERB\",\n\t\t\t\"quarrels\": \"NOUN\",\n\t\t\t\"margaret\": \"PROPN\",\n\t\t\t\"missile\": \"NOUN\",\n\t\t\t\"calmly\": \"ADV\",\n\t\t\t\"explosions\": \"NOUN\",\n\t\t\t\"enjoyed\": \"VERB\",\n\t\t\t\"hasidic\": \"ADJ\",\n\t\t\t\"bastien\": \"PROPN\",\n\t\t\t\"havana\": \"PROPN\",\n\t\t\t\"distally\": \"ADV\",\n\t\t\t\"soot\": \"NOUN\",\n\t\t\t\"kos\": \"PROPN\",\n\t\t\t\"laser\": \"NOUN\",\n\t\t\t\"james\": \"PROPN\",\n\t\t\t\"prs\": \"NOUN\",\n\t\t\t\"designation\": \"NOUN\",\n\t\t\t\"dissolving\": \"VERB\",\n\t\t\t\"unformatted\": \"ADJ\",\n\t\t\t\"sheikh\": \"PROPN\",\n\t\t\t\"pile\": \"NOUN\",\n\t\t\t\"slang\": \"NOUN\",\n\t\t\t\"conventional\": \"ADJ\",\n\t\t\t\"unilateral\": \"ADJ\",\n\t\t\t\"calling\": \"VERB\",\n\t\t\t\"reviewed\": \"VERB\",\n\t\t\t\"premiering\": \"VERB\",\n\t\t\t\"http://www.canadavisa.com/canadian-immigration-faq-skilled-workers.html\": \"PROPN\",\n\t\t\t\"anxiously\": \"ADV\",\n\t\t\t\"9800\": \"NUM\",\n\t\t\t\"recommends\": \"VERB\",\n\t\t\t\"size\": \"NOUN\",\n\t\t\t\"perfectly\": \"ADV\",\n\t\t\t\"shaker\": \"NOUN\",\n\t\t\t\"postseason\": \"NOUN\",\n\t\t\t\"difference\": \"NOUN\",\n\t\t\t\"guilt\": \"NOUN\",\n\t\t\t\"breslau\": \"PROPN\",\n\t\t\t\"exterminator\": \"NOUN\",\n\t\t\t\"growers\": \"NOUN\",\n\t\t\t\"sydfynske\": \"PROPN\",\n\t\t\t\"biodefense\": \"NOUN\",\n\t\t\t\"wintertime\": \"NOUN\",\n\t\t\t\"css\": \"PROPN\",\n\t\t\t\"marsden\": \"PROPN\",\n\t\t\t\"hesitation\": \"NOUN\",\n\t\t\t\"labadee\": \"PROPN\",\n\t\t\t\"trauma\": \"NOUN\",\n\t\t\t\"poulenc\": \"PROPN\",\n\t\t\t\"upi\": \"PROPN\",\n\t\t\t\"tasking\": \"NOUN\",\n\t\t\t\"codes\": \"NOUN\",\n\t\t\t\"bump\": \"NOUN\",\n\t\t\t\"7\": \"NUM\",\n\t\t\t\"scraped\": \"VERB\",\n\t\t\t\"pact\": \"NOUN\",\n\t\t\t\"mid-day\": \"NOUN\",\n\t\t\t\"three-day\": \"ADJ\",\n\t\t\t\"zero\": \"NUM\",\n\t\t\t\"erasmus\": \"PROPN\",\n\t\t\t\"1/4\": \"NUM\",\n\t\t\t\"tholt\": \"PROPN\",\n\t\t\t\"streamside\": \"ADJ\",\n\t\t\t\"amazing\": \"ADJ\",\n\t\t\t\"psychotherapist\": \"NOUN\",\n\t\t\t\"funding\": \"NOUN\",\n\t\t\t\"24.7\": \"NUM\",\n\t\t\t\"regular\": \"ADJ\",\n\t\t\t\"sha'lan\": \"PROPN\",\n\t\t\t\"servant\": \"NOUN\",\n\t\t\t\"goldbach\": \"PROPN\",\n\t\t\t\"act\": \"NOUN\",\n\t\t\t\"1380\": \"NUM\",\n\t\t\t\"fo\": \"ADP\",\n\t\t\t\"puff\": \"VERB\",\n\t\t\t\"bought\": \"VERB\",\n\t\t\t\"ebor\": \"PROPN\",\n\t\t\t\"http://www.cruisecompete.com/specials/regions/world/1\": \"PROPN\",\n\t\t\t\"exacting\": \"ADJ\",\n\t\t\t\"petunia\": \"PROPN\",\n\t\t\t\"paje\": \"PROPN\",\n\t\t\t\"treats\": \"NOUN\",\n\t\t\t\"yang\": \"PROPN\",\n\t\t\t\"drawstring\": \"NOUN\",\n\t\t\t\"televised\": \"VERB\",\n\t\t\t\"stamps\": \"NOUN\",\n\t\t\t\"clinical\": \"ADJ\",\n\t\t\t\"worm\": \"NOUN\",\n\t\t\t\"cashion\": \"PROPN\",\n\t\t\t\"comm\": \"NOUN\",\n\t\t\t\"cfls\": \"NOUN\",\n\t\t\t\"clung\": \"VERB\",\n\t\t\t\"la.\": \"PROPN\",\n\t\t\t\"burgers\": \"NOUN\",\n\t\t\t\"bard\": \"PROPN\",\n\t\t\t\"puts\": \"VERB\",\n\t\t\t\"broadcasters\": \"NOUN\",\n\t\t\t\"misc.consumers.frugal-living\": \"NOUN\",\n\t\t\t\"hackles\": \"NOUN\",\n\t\t\t\"confirmation\": \"NOUN\",\n\t\t\t\"ghost\": \"PROPN\",\n\t\t\t\"oregano\": \"NOUN\",\n\t\t\t\"antonioni\": \"PROPN\",\n\t\t\t\"archive\": \"NOUN\",\n\t\t\t\"peking\": \"PROPN\",\n\t\t\t\"hotmail\": \"PROPN\",\n\t\t\t\"tigers\": \"PROPN\",\n\t\t\t\"making\": \"VERB\",\n\t\t\t\"unde$tood\": \"VERB\",\n\t\t\t\"revision\": \"NOUN\",\n\t\t\t\"underlying\": \"ADJ\",\n\t\t\t\"he\": \"PRON\",\n\t\t\t\"cafeteria\": \"NOUN\",\n\t\t\t\"densely\": \"ADV\",\n\t\t\t\"investigation\": \"NOUN\",\n\t\t\t\"proteins\": \"NOUN\",\n\t\t\t\"toby\": \"PROPN\",\n\t\t\t\"1251\": \"NUM\",\n\t\t\t\"wikinews\": \"PROPN\",\n\t\t\t\"twain\": \"PROPN\",\n\t\t\t\"86th\": \"ADJ\",\n\t\t\t\"snowshoe\": \"NOUN\",\n\t\t\t\"tempered\": \"VERB\",\n\t\t\t\"---\": \"PUNCT\",\n\t\t\t\"hire\": \"VERB\",\n\t\t\t\"goddamn\": \"ADJ\",\n\t\t\t\"hedging\": \"NOUN\",\n\t\t\t\"chronicle\": \"PROPN\",\n\t\t\t\"centralized\": \"ADJ\",\n\t\t\t\"sat.\": \"PROPN\",\n\t\t\t\"..\": \"PUNCT\",\n\t\t\t\"rumored\": \"VERB\",\n\t\t\t\"boundary\": \"NOUN\",\n\t\t\t\"weston\": \"PROPN\",\n\t\t\t\"clad\": \"ADJ\",\n\t\t\t\"unique\": \"ADJ\",\n\t\t\t\"tampa\": \"PROPN\",\n\t\t\t\"grappling\": \"VERB\",\n\t\t\t\"saikaku\": \"PROPN\",\n\t\t\t\"1,613\": \"NUM\",\n\t\t\t\"hagiography\": \"NOUN\",\n\t\t\t\"braver\": \"ADJ\",\n\t\t\t\"workmen\": \"NOUN\",\n\t\t\t\"munching\": \"VERB\",\n\t\t\t\"ps3\": \"NOUN\",\n\t\t\t\"sharply\": \"ADV\",\n\t\t\t\"491,667\": \"NUM\",\n\t\t\t\"http://www.squidoo.com/nook-tablet\": \"PROPN\",\n\t\t\t\"blessings\": \"NOUN\",\n\t\t\t\"associations\": \"NOUN\",\n\t\t\t\"1555\": \"NUM\",\n\t\t\t\"generosity\": \"NOUN\",\n\t\t\t\"mutt\": \"NOUN\",\n\t\t\t\"sistani\": \"PROPN\",\n\t\t\t\"coat\": \"NOUN\",\n\t\t\t\"boot\": \"VERB\",\n\t\t\t\"strife\": \"NOUN\",\n\t\t\t\"incandescent\": \"ADJ\",\n\t\t\t\"farmlands\": \"NOUN\",\n\t\t\t\"prescriptive\": \"ADJ\",\n\t\t\t\"interpreting\": \"NOUN\",\n\t\t\t\"danny_jones%enron@eott.com\": \"PROPN\",\n\t\t\t\"lowest\": \"ADJ\",\n\t\t\t\"272,000\": \"NUM\",\n\t\t\t\"venezuela\": \"PROPN\",\n\t\t\t\"adhering\": \"VERB\",\n\t\t\t\"dot\": \"NOUN\",\n\t\t\t\"noting\": \"VERB\",\n\t\t\t\"ould\": \"AUX\",\n\t\t\t\"intensely\": \"ADV\",\n\t\t\t\"discovery\": \"NOUN\",\n\t\t\t\"condemning\": \"VERB\",\n\t\t\t\"closed\": \"VERB\",\n\t\t\t\"busted\": \"VERB\",\n\t\t\t\"rhonda\": \"PROPN\",\n\t\t\t\"polaroid\": \"PROPN\",\n\t\t\t\"psp\": \"PROPN\",\n\t\t\t\"engagement\": \"NOUN\",\n\t\t\t\"re-record\": \"VERB\",\n\t\t\t\"sexy\": \"ADJ\",\n\t\t\t\"child\": \"NOUN\",\n\t\t\t\"interruption\": \"NOUN\",\n\t\t\t\"bascom\": \"PROPN\",\n\t\t\t\"forgiven\": \"VERB\",\n\t\t\t\"spends\": \"VERB\",\n\t\t\t\"depot\": \"PROPN\",\n\t\t\t\"commandment\": \"NOUN\",\n\t\t\t\"globalsecurity.org\": \"PROPN\",\n\t\t\t\"sectarian\": \"ADJ\",\n\t\t\t\"chateaux\": \"PROPN\",\n\t\t\t\"reckoning\": \"NOUN\",\n\t\t\t\"everbody\": \"PRON\",\n\t\t\t\"production\": \"NOUN\",\n\t\t\t\"species\": \"NOUN\",\n\t\t\t\"dilworth\": \"PROPN\",\n\t\t\t\"randy\": \"PROPN\",\n\t\t\t\"arctic\": \"ADJ\",\n\t\t\t\"1500\": \"NUM\",\n\t\t\t\"cantón\": \"PROPN\",\n\t\t\t\"thievery\": \"NOUN\",\n\t\t\t\"austere\": \"ADJ\",\n\t\t\t\"laidlaw\": \"PROPN\",\n\t\t\t\"odense\": \"PROPN\",\n\t\t\t\"wontons\": \"NOUN\",\n\t\t\t\"understan-\": \"VERB\",\n\t\t\t\"stamina\": \"NOUN\",\n\t\t\t\"opinon\": \"NOUN\",\n\t\t\t\"bunker\": \"VERB\",\n\t\t\t\"aboard\": \"ADV\",\n\t\t\t\"lighted\": \"VERB\",\n\t\t\t\"valise\": \"NOUN\",\n\t\t\t\"oberst\": \"PROPN\",\n\t\t\t\"02:17\": \"NUM\",\n\t\t\t\"caused\": \"VERB\",\n\t\t\t\"supplementary\": \"ADJ\",\n\t\t\t\"possibly\": \"ADV\",\n\t\t\t\"107\": \"NUM\",\n\t\t\t\"scenicly\": \"ADV\",\n\t\t\t\"eir\": \"PROPN\",\n\t\t\t\"motivated\": \"VERB\",\n\t\t\t\"dishonors\": \"VERB\",\n\t\t\t\"companions\": \"NOUN\",\n\t\t\t\"collect\": \"VERB\",\n\t\t\t\"dandelions\": \"NOUN\",\n\t\t\t\"lavatories\": \"NOUN\",\n\t\t\t\"shade\": \"NOUN\",\n\t\t\t\"peggy\": \"PROPN\",\n\t\t\t\"philly\": \"PROPN\",\n\t\t\t\"compaq.com\": \"NOUN\",\n\t\t\t\"oja\": \"PROPN\",\n\t\t\t\"scribners\": \"PROPN\",\n\t\t\t\"clumps\": \"NOUN\",\n\t\t\t\"evergreen\": \"PROPN\",\n\t\t\t\"guys\": \"NOUN\",\n\t\t\t\"nye\": \"PROPN\",\n\t\t\t\"condemn\": \"VERB\",\n\t\t\t\"rift\": \"NOUN\",\n\t\t\t\"rallied\": \"VERB\",\n\t\t\t\"serenity\": \"NOUN\",\n\t\t\t\"tradename\": \"NOUN\",\n\t\t\t\"word\": \"NOUN\",\n\t\t\t\"admits\": \"VERB\",\n\t\t\t\"card\": \"NOUN\",\n\t\t\t\"quoted\": \"VERB\",\n\t\t\t\"riverboatmen\": \"NOUN\",\n\t\t\t\"mat\": \"DET\",\n\t\t\t\"instinct\": \"NOUN\",\n\t\t\t\"piteous\": \"ADJ\",\n\t\t\t\"maybe\": \"ADV\",\n\t\t\t\"congratulate\": \"VERB\",\n\t\t\t\"pointed\": \"VERB\",\n\t\t\t\"fayetteville\": \"PROPN\",\n\t\t\t\"nesf\": \"PROPN\",\n\t\t\t\"passenger\": \"NOUN\",\n\t\t\t\"pullback\": \"NOUN\",\n\t\t\t\"77541\": \"NUM\",\n\t\t\t\"bosnia\": \"PROPN\",\n\t\t\t\"commonion\": \"NOUN\",\n\t\t\t\"dominate\": \"ADJ\",\n\t\t\t\"loosely\": \"ADV\",\n\t\t\t\"simulates\": \"VERB\",\n\t\t\t\"trotting\": \"VERB\",\n\t\t\t\"unrestrained\": \"ADJ\",\n\t\t\t\"becuse\": \"SCONJ\",\n\t\t\t\"hide\": \"VERB\",\n\t\t\t\"far\": \"ADV\",\n\t\t\t\"cups\": \"NOUN\",\n\t\t\t\"emulating\": \"VERB\",\n\t\t\t\"multiplier\": \"NOUN\",\n\t\t\t\"badder\": \"ADJ\",\n\t\t\t\"1656\": \"NUM\",\n\t\t\t\"crux\": \"NOUN\",\n\t\t\t\"hauled\": \"VERB\",\n\t\t\t\"phenomena\": \"NOUN\",\n\t\t\t\"contra\": \"PROPN\",\n\t\t\t\"calls\": \"NOUN\",\n\t\t\t\"tiles\": \"NOUN\",\n\t\t\t\"eligible\": \"ADJ\",\n\t\t\t\"+\": \"SYM\",\n\t\t\t\"goblin-driven\": \"ADJ\",\n\t\t\t\"preparation\": \"NOUN\",\n\t\t\t\"snows\": \"NOUN\",\n\t\t\t\"museum\": \"NOUN\",\n\t\t\t\"mistreatment\": \"NOUN\",\n\t\t\t\"channeled\": \"VERB\",\n\t\t\t\"swallowed\": \"VERB\",\n\t\t\t\"fives\": \"NOUN\",\n\t\t\t\"temporal\": \"ADJ\",\n\t\t\t\"nightly\": \"ADJ\",\n\t\t\t\"retirement\": \"NOUN\",\n\t\t\t\"moveable\": \"ADJ\",\n\t\t\t\"submarine\": \"NOUN\",\n\t\t\t\"indigenous\": \"ADJ\",\n\t\t\t\"forehead\": \"NOUN\",\n\t\t\t\"reflecting\": \"VERB\",\n\t\t\t\"naturalisation\": \"PROPN\",\n\t\t\t\"crackling\": \"NOUN\",\n\t\t\t\"mails\": \"NOUN\",\n\t\t\t\"convention\": \"NOUN\",\n\t\t\t\"build-outs\": \"NOUN\",\n\t\t\t\"elsewhere\": \"ADV\",\n\t\t\t\"chestney\": \"PROPN\",\n\t\t\t\"hippies\": \"NOUN\",\n\t\t\t\"backweb\": \"PROPN\",\n\t\t\t\"hau\": \"PROPN\",\n\t\t\t\"misdirection\": \"NOUN\",\n\t\t\t\"offsite\": \"NOUN\",\n\t\t\t\"carton\": \"NOUN\",\n\t\t\t\"re-enlist\": \"VERB\",\n\t\t\t\"hammie\": \"NOUN\",\n\t\t\t\"churches\": \"NOUN\",\n\t\t\t\"guilds\": \"NOUN\",\n\t\t\t\"irregardles\": \"ADV\",\n\t\t\t\"polar\": \"ADJ\",\n\t\t\t\"soya\": \"ADV\",\n\t\t\t\"bolshevik\": \"ADJ\",\n\t\t\t\"rates\": \"NOUN\",\n\t\t\t\"testing\": \"NOUN\",\n\t\t\t\"protestants\": \"PROPN\",\n\t\t\t\"disciples\": \"NOUN\",\n\t\t\t\"lavorato\": \"PROPN\",\n\t\t\t\"solo\": \"ADJ\",\n\t\t\t\"downloaded\": \"VERB\",\n\t\t\t\"likley\": \"ADV\",\n\t\t\t\"francisco\": \"PROPN\",\n\t\t\t\"hellenic\": \"ADJ\",\n\t\t\t\"river\": \"NOUN\",\n\t\t\t\"tube\": \"NOUN\",\n\t\t\t\"newspapers\": \"NOUN\",\n\t\t\t\"gnp\": \"NOUN\",\n\t\t\t\"sicily\": \"PROPN\",\n\t\t\t\"ravine\": \"NOUN\",\n\t\t\t\"biceps\": \"NOUN\",\n\t\t\t\"swirls\": \"VERB\",\n\t\t\t\"ouiji\": \"PROPN\",\n\t\t\t\"doves\": \"NOUN\",\n\t\t\t\"scared\": \"ADJ\",\n\t\t\t\"melting\": \"NOUN\",\n\t\t\t\"cc-by\": \"PROPN\",\n\t\t\t\"kahneman\": \"PROPN\",\n\t\t\t\"sooner\": \"ADV\",\n\t\t\t\"commend\": \"VERB\",\n\t\t\t\"60,000\": \"NUM\",\n\t\t\t\"1600's\": \"NOUN\",\n\t\t\t\"ramzi\": \"PROPN\",\n\t\t\t\"correspondances\": \"NOUN\",\n\t\t\t\"03/08/2000\": \"NUM\",\n\t\t\t\"reviewers\": \"NOUN\",\n\t\t\t\"supporter\": \"NOUN\",\n\t\t\t\"protected\": \"VERB\",\n\t\t\t\"mariner\": \"PROPN\",\n\t\t\t\"weyl\": \"PROPN\",\n\t\t\t\"briskly\": \"ADV\",\n\t\t\t\"pinkish\": \"ADJ\",\n\t\t\t\"map\": \"NOUN\",\n\t\t\t\"exhaustion\": \"NOUN\",\n\t\t\t\"flying\": \"VERB\",\n\t\t\t\"cowpland\": \"PROPN\",\n\t\t\t\"kermie\": \"PROPN\",\n\t\t\t\"npp\": \"PROPN\",\n\t\t\t\"discouraged\": \"VERB\",\n\t\t\t\"jewish\": \"ADJ\",\n\t\t\t\"redefined\": \"VERB\",\n\t\t\t\"viruses\": \"NOUN\",\n\t\t\t\"helmut\": \"PROPN\",\n\t\t\t\"they're\": \"PRON\",\n\t\t\t\"weapon\": \"NOUN\",\n\t\t\t\"calculate\": \"VERB\",\n\t\t\t\"vowed\": \"VERB\",\n\t\t\t\"oppression\": \"NOUN\",\n\t\t\t\"wading\": \"NOUN\",\n\t\t\t\"matthews\": \"PROPN\",\n\t\t\t\"inquisitive\": \"ADJ\",\n\t\t\t\"sugar\": \"NOUN\",\n\t\t\t\"herein\": \"ADV\",\n\t\t\t\"militaries\": \"NOUN\",\n\t\t\t\"transmedia\": \"NOUN\",\n\t\t\t\"whoa\": \"INTJ\",\n\t\t\t\"arrival\": \"NOUN\",\n\t\t\t\"cocktail\": \"NOUN\",\n\t\t\t\"gallup\": \"PROPN\",\n\t\t\t\"interest\": \"NOUN\",\n\t\t\t\"kr\": \"NOUN\",\n\t\t\t\"notice\": \"VERB\",\n\t\t\t\"fulfils\": \"VERB\",\n\t\t\t\"we\": \"PRON\",\n\t\t\t\"09:24\": \"NUM\",\n\t\t\t\"devlin\": \"PROPN\",\n\t\t\t\"positioning\": \"NOUN\",\n\t\t\t\"jewelry\": \"NOUN\",\n\t\t\t\"prisoners\": \"NOUN\",\n\t\t\t\"electronic-warfare\": \"NOUN\",\n\t\t\t\"holt\": \"PROPN\",\n\t\t\t\"radiation\": \"NOUN\",\n\t\t\t\"thin\": \"ADJ\",\n\t\t\t\"centimetre\": \"NOUN\",\n\t\t\t\"haram\": \"PROPN\",\n\t\t\t\"conveys\": \"VERB\",\n\t\t\t\"a&k\": \"PROPN\",\n\t\t\t\"squeaky\": \"ADJ\",\n\t\t\t\"invited\": \"VERB\",\n\t\t\t\"non-locals\": \"NOUN\",\n\t\t\t\"parchment\": \"NOUN\",\n\t\t\t\"lashed\": \"VERB\",\n\t\t\t\"ploys\": \"NOUN\",\n\t\t\t\"planing\": \"VERB\",\n\t\t\t\"09:46\": \"NUM\",\n\t\t\t\"primary\": \"ADJ\",\n\t\t\t\"abdel\": \"PROPN\",\n\t\t\t\"handfuls\": \"NOUN\",\n\t\t\t\"tombed\": \"ADJ\",\n\t\t\t\"elementary\": \"ADJ\",\n\t\t\t\"73\": \"NUM\",\n\t\t\t\"extends\": \"VERB\",\n\t\t\t\"friendships\": \"NOUN\",\n\t\t\t\"keenly\": \"ADV\",\n\t\t\t\"ethink@enron.com\": \"PROPN\",\n\t\t\t\"spheres\": \"NOUN\",\n\t\t\t\"yvan\": \"PROPN\",\n\t\t\t\"domesticated\": \"VERB\",\n\t\t\t\"whereby\": \"ADV\",\n\t\t\t\"administrative\": \"ADJ\",\n\t\t\t\"petsmart\": \"PROPN\",\n\t\t\t\"t.v.\": \"NOUN\",\n\t\t\t\"sight\": \"NOUN\",\n\t\t\t\"reasonable\": \"ADJ\",\n\t\t\t\"prof.\": \"PROPN\",\n\t\t\t\"believe\": \"VERB\",\n\t\t\t\"palces\": \"NOUN\",\n\t\t\t\"co-signing\": \"VERB\",\n\t\t\t\"bin\": \"PROPN\",\n\t\t\t\"barn\": \"NOUN\",\n\t\t\t\"temptations\": \"NOUN\",\n\t\t\t\"deposed\": \"VERB\",\n\t\t\t\"1574\": \"NUM\",\n\t\t\t\"vaguely\": \"ADV\",\n\t\t\t\"comic\": \"PROPN\",\n\t\t\t\"warranties\": \"NOUN\",\n\t\t\t\"fabio\": \"PROPN\",\n\t\t\t\"tease\": \"VERB\",\n\t\t\t\"eck\": \"INTJ\",\n\t\t\t\"conflating\": \"VERB\",\n\t\t\t\"katy\": \"PROPN\",\n\t\t\t\"downton\": \"PROPN\",\n\t\t\t\"brick-dust\": \"NOUN\",\n\t\t\t\"crepey\": \"ADJ\",\n\t\t\t\"tsetse\": \"NOUN\",\n\t\t\t\"http://www.nea.fr/html/rp/chernobyl/c05.html\": \"PROPN\",\n\t\t\t\"outcomes\": \"NOUN\",\n\t\t\t\"schedule\": \"NOUN\",\n\t\t\t\"fritters\": \"NOUN\",\n\t\t\t\"secretions\": \"NOUN\",\n\t\t\t\"relishes\": \"NOUN\",\n\t\t\t\"epc\": \"NOUN\",\n\t\t\t\"aw\": \"INTJ\",\n\t\t\t\"frost\": \"NOUN\",\n\t\t\t\"annoying\": \"ADJ\",\n\t\t\t\"goalkeeper\": \"NOUN\",\n\t\t\t\"prevenient\": \"ADJ\",\n\t\t\t\"gras\": \"NOUN\",\n\t\t\t\"01\": \"NUM\",\n\t\t\t\"grifter\": \"NOUN\",\n\t\t\t\"staffed\": \"VERB\",\n\t\t\t\"minimal\": \"ADJ\",\n\t\t\t\"ways\": \"NOUN\",\n\t\t\t\"extract\": \"NOUN\",\n\t\t\t\"____________________________________________________________\": \"SYM\",\n\t\t\t\"megumi\": \"PROPN\",\n\t\t\t\"urgent\": \"ADJ\",\n\t\t\t\"galloped\": \"VERB\",\n\t\t\t\"generated\": \"VERB\",\n\t\t\t\"shindand\": \"PROPN\",\n\t\t\t\"dolls\": \"NOUN\",\n\t\t\t\"pyrenees\": \"PROPN\",\n\t\t\t\"dick\": \"PROPN\",\n\t\t\t\"dim\": \"ADJ\",\n\t\t\t\"paternal\": \"ADJ\",\n\t\t\t\"nation\": \"NOUN\",\n\t\t\t\"clinched\": \"VERB\",\n\t\t\t\"1960s\": \"NOUN\",\n\t\t\t\"eis\": \"PROPN\",\n\t\t\t\"relinquish\": \"VERB\",\n\t\t\t\"forgive\": \"VERB\",\n\t\t\t\"incite\": \"VERB\",\n\t\t\t\"gases\": \"NOUN\",\n\t\t\t\"filigree\": \"NOUN\",\n\t\t\t\"bang\": \"NOUN\",\n\t\t\t\"portion\": \"NOUN\",\n\t\t\t\"tourist\": \"NOUN\",\n\t\t\t\"tryst\": \"NOUN\",\n\t\t\t\"polluters\": \"NOUN\",\n\t\t\t\"denis\": \"PROPN\",\n\t\t\t\"holley\": \"PROPN\",\n\t\t\t\"solid\": \"ADJ\",\n\t\t\t\"mussolini-jaw\": \"NOUN\",\n\t\t\t\"throw\": \"VERB\",\n\t\t\t\"patel\": \"PROPN\",\n\t\t\t\"agonizing\": \"ADJ\",\n\t\t\t\"squirrels\": \"PROPN\",\n\t\t\t\"permeated\": \"VERB\",\n\t\t\t\"afraid\": \"ADJ\",\n\t\t\t\"apprehensive\": \"ADJ\",\n\t\t\t\"yacht\": \"NOUN\",\n\t\t\t\"bangladeshis\": \"PROPN\",\n\t\t\t\"namath\": \"PROPN\",\n\t\t\t\"cram\": \"VERB\",\n\t\t\t\"neatly\": \"ADV\",\n\t\t\t\"varied\": \"ADJ\",\n\t\t\t\"balard\": \"PROPN\",\n\t\t\t\"672,000\": \"NUM\",\n\t\t\t\"vba\": \"PROPN\",\n\t\t\t\"diurnal\": \"ADJ\",\n\t\t\t\"chiara\": \"PROPN\",\n\t\t\t\"redesign\": \"VERB\",\n\t\t\t\"maximilien\": \"PROPN\",\n\t\t\t\"rule\": \"NOUN\",\n\t\t\t\"rascally\": \"ADJ\",\n\t\t\t\"tabletop\": \"NOUN\",\n\t\t\t\"6871082#\": \"NUM\",\n\t\t\t\"breached\": \"VERB\",\n\t\t\t\"sunshine\": \"NOUN\",\n\t\t\t\"orthodontist\": \"NOUN\",\n\t\t\t\"barrett\": \"PROPN\",\n\t\t\t\"drums\": \"NOUN\",\n\t\t\t\"regularity\": \"NOUN\",\n\t\t\t\"stacked\": \"VERB\",\n\t\t\t\"gwb\": \"PROPN\",\n\t\t\t\"leprechauns\": \"NOUN\",\n\t\t\t\"skittles\": \"PROPN\",\n\t\t\t\"tw\": \"PROPN\",\n\t\t\t\"sunrise\": \"NOUN\",\n\t\t\t\"miserably\": \"ADV\",\n\t\t\t\"acknowledged\": \"VERB\",\n\t\t\t\"1717\": \"NUM\",\n\t\t\t\"shelters\": \"NOUN\",\n\t\t\t\"posting\": \"NOUN\",\n\t\t\t\"1754\": \"NUM\",\n\t\t\t\"retrieval\": \"NOUN\",\n\t\t\t\"jr\": \"PROPN\",\n\t\t\t\"served\": \"VERB\",\n\t\t\t\"puttino\": \"PROPN\",\n\t\t\t\"fluttering\": \"VERB\",\n\t\t\t\"unfold\": \"VERB\",\n\t\t\t\"rewrote\": \"VERB\",\n\t\t\t\"treatise\": \"NOUN\",\n\t\t\t\"kristin\": \"PROPN\",\n\t\t\t\"unsweetened\": \"ADJ\",\n\t\t\t\"camel\": \"NOUN\",\n\t\t\t\"credible\": \"ADJ\",\n\t\t\t\"jintao\": \"PROPN\",\n\t\t\t\"sikong\": \"PROPN\",\n\t\t\t\"similarly\": \"ADV\",\n\t\t\t\"mvp\": \"NOUN\",\n\t\t\t\"firmly\": \"ADV\",\n\t\t\t\"superbly\": \"ADV\",\n\t\t\t\"mummified\": \"ADJ\",\n\t\t\t\"obsessed\": \"ADJ\",\n\t\t\t\"woman\": \"NOUN\",\n\t\t\t\"debating\": \"VERB\",\n\t\t\t\"loss\": \"NOUN\",\n\t\t\t\"gilmore\": \"PROPN\",\n\t\t\t\"-_-\": \"SYM\",\n\t\t\t\"shard\": \"NOUN\",\n\t\t\t\"manor\": \"NOUN\",\n\t\t\t\"alternatives\": \"NOUN\",\n\t\t\t\"ak47s\": \"NOUN\",\n\t\t\t\"uses\": \"VERB\",\n\t\t\t\"buyer\": \"NOUN\",\n\t\t\t\"cho\": \"PROPN\",\n\t\t\t\"prosecute\": \"VERB\",\n\t\t\t\"janell\": \"PROPN\",\n\t\t\t\"kettner\": \"PROPN\",\n\t\t\t\"prevent\": \"VERB\",\n\t\t\t\"household\": \"NOUN\",\n\t\t\t\"hacking\": \"VERB\",\n\t\t\t\"introductory\": \"ADJ\",\n\t\t\t\"approx\": \"ADV\",\n\t\t\t\"jail\": \"NOUN\",\n\t\t\t\"lids\": \"NOUN\",\n\t\t\t\"treaties\": \"NOUN\",\n\t\t\t\"racing\": \"NOUN\",\n\t\t\t\"wandering\": \"VERB\",\n\t\t\t\"fungus\": \"NOUN\",\n\t\t\t\"tindi\": \"PROPN\",\n\t\t\t\"mexicana\": \"PROPN\",\n\t\t\t\"indulged\": \"VERB\",\n\t\t\t\"leakage\": \"NOUN\",\n\t\t\t\"signing\": \"VERB\",\n\t\t\t\"removing\": \"VERB\",\n\t\t\t\"dubia\": \"PROPN\",\n\t\t\t\"pilates\": \"NOUN\",\n\t\t\t\"walnut\": \"NOUN\",\n\t\t\t\"publication\": \"NOUN\",\n\t\t\t\"daniel\": \"PROPN\",\n\t\t\t\"rested\": \"VERB\",\n\t\t\t\"augustin\": \"PROPN\",\n\t\t\t\"richard\": \"PROPN\",\n\t\t\t\"erosion\": \"NOUN\",\n\t\t\t\"schoolchildren\": \"NOUN\",\n\t\t\t\"tim\": \"PROPN\",\n\t\t\t\"employee\": \"NOUN\",\n\t\t\t\"construction\": \"NOUN\",\n\t\t\t\"dissemination\": \"NOUN\",\n\t\t\t\"shaded\": \"ADJ\",\n\t\t\t\"partridge\": \"NOUN\",\n\t\t\t\"uncertain\": \"ADJ\",\n\t\t\t\"blue\": \"ADJ\",\n\t\t\t\"novotel\": \"PROPN\",\n\t\t\t\"ends\": \"NOUN\",\n\t\t\t\"fleshed\": \"VERB\",\n\t\t\t\"wildflowers\": \"NOUN\",\n\t\t\t\"colonists\": \"NOUN\",\n\t\t\t\"alleyway\": \"NOUN\",\n\t\t\t\"gemini\": \"PROPN\",\n\t\t\t\"toys\": \"NOUN\",\n\t\t\t\"orthographic\": \"ADJ\",\n\t\t\t\"boiler\": \"NOUN\",\n\t\t\t\"live\": \"VERB\",\n\t\t\t\"promotion\": \"NOUN\",\n\t\t\t\"sports\": \"NOUN\",\n\t\t\t\"bank\": \"NOUN\",\n\t\t\t\"hilarious\": \"ADJ\",\n\t\t\t\"warhol\": \"PROPN\",\n\t\t\t\"stewardess\": \"NOUN\",\n\t\t\t\"kristen\": \"PROPN\",\n\t\t\t\"bonafide\": \"PROPN\",\n\t\t\t\"energy-intensive\": \"ADJ\",\n\t\t\t\"milks\": \"NOUN\",\n\t\t\t\"gorse\": \"NOUN\",\n\t\t\t\"murmured\": \"VERB\",\n\t\t\t\"characterized\": \"VERB\",\n\t\t\t\"twiddled\": \"VERB\",\n\t\t\t\"costly\": \"ADJ\",\n\t\t\t\"mongrel\": \"NOUN\",\n\t\t\t\"restricting\": \"VERB\",\n\t\t\t\"law\": \"NOUN\",\n\t\t\t\"hatch\": \"VERB\",\n\t\t\t\"grammars\": \"NOUN\",\n\t\t\t\"crafts\": \"NOUN\",\n\t\t\t\"nightwing\": \"PROPN\",\n\t\t\t\"elapsed\": \"VERB\",\n\t\t\t\"utilitarianism\": \"NOUN\",\n\t\t\t\"7.2\": \"NUM\",\n\t\t\t\"extending\": \"VERB\",\n\t\t\t\"insulation\": \"NOUN\",\n\t\t\t\"tablet\": \"PROPN\",\n\t\t\t\"slowing\": \"NOUN\",\n\t\t\t\"1983\": \"NUM\",\n\t\t\t\"ethical\": \"ADJ\",\n\t\t\t\"radiative\": \"ADJ\",\n\t\t\t\"713-853-1696\": \"NUM\",\n\t\t\t\"mates\": \"NOUN\",\n\t\t\t\"transatlantic\": \"ADJ\",\n\t\t\t\"waving\": \"VERB\",\n\t\t\t\"veggies\": \"NOUN\",\n\t\t\t\"ict\": \"PROPN\",\n\t\t\t\"metropolis\": \"NOUN\",\n\t\t\t\"bas\": \"PROPN\",\n\t\t\t\"sunjay\": \"PROPN\",\n\t\t\t\"commodity\": \"NOUN\",\n\t\t\t\"p-\": \"INTJ\",\n\t\t\t\"expand\": \"VERB\",\n\t\t\t\"lipa\": \"NOUN\",\n\t\t\t\"advancement\": \"NOUN\",\n\t\t\t\"organizational\": \"ADJ\",\n\t\t\t\"smyth\": \"PROPN\",\n\t\t\t\"tripartite\": \"ADJ\",\n\t\t\t\"objective\": \"ADJ\",\n\t\t\t\"injustice\": \"NOUN\",\n\t\t\t\"diverted\": \"VERB\",\n\t\t\t\"unleavened\": \"ADJ\",\n\t\t\t\"memo\": \"NOUN\",\n\t\t\t\"indonesians\": \"PROPN\",\n\t\t\t\"moscoso\": \"PROPN\",\n\t\t\t\"202.456.1414\": \"NUM\",\n\t\t\t\"beth\": \"PROPN\",\n\t\t\t\"twelfth\": \"ADJ\",\n\t\t\t\"habits\": \"NOUN\",\n\t\t\t\"egalitarian\": \"ADJ\",\n\t\t\t\"formless\": \"ADJ\",\n\t\t\t\"bundling\": \"VERB\",\n\t\t\t\"iván\": \"PROPN\",\n\t\t\t\"brave\": \"ADJ\",\n\t\t\t\"crunch\": \"NOUN\",\n\t\t\t\"afterlife\": \"NOUN\",\n\t\t\t\"antiquity\": \"NOUN\",\n\t\t\t\"nest\": \"NOUN\",\n\t\t\t\"gunfire\": \"NOUN\",\n\t\t\t\"sewage\": \"NOUN\",\n\t\t\t\"circuit\": \"PROPN\",\n\t\t\t\"starr\": \"PROPN\",\n\t\t\t\"alan\": \"PROPN\",\n\t\t\t\"dependable\": \"ADJ\",\n\t\t\t\"adage\": \"NOUN\",\n\t\t\t\"sprawled\": \"VERB\",\n\t\t\t\"forty-one\": \"NUM\",\n\t\t\t\"oldest\": \"ADJ\",\n\t\t\t\"rivertrail\": \"PROPN\",\n\t\t\t\"lagesse\": \"PROPN\",\n\t\t\t\"unweaponized\": \"ADJ\",\n\t\t\t\"4g\": \"PROPN\",\n\t\t\t\"governance\": \"NOUN\",\n\t\t\t\"shaped\": \"VERB\",\n\t\t\t\"viewers\": \"NOUN\",\n\t\t\t\"represent\": \"VERB\",\n\t\t\t\"galleon\": \"NOUN\",\n\t\t\t\"japan\": \"PROPN\",\n\t\t\t\"thoughts\": \"NOUN\",\n\t\t\t\"yoshiwara\": \"PROPN\",\n\t\t\t\"reporting\": \"VERB\",\n\t\t\t\"thermometer\": \"NOUN\",\n\t\t\t\"toga\": \"NOUN\",\n\t\t\t\"postcard\": \"NOUN\",\n\t\t\t\"homer\": \"NOUN\",\n\t\t\t\"60th\": \"ADJ\",\n\t\t\t\"hurtle\": \"VERB\",\n\t\t\t\"40\": \"NUM\",\n\t\t\t\"educate\": \"VERB\",\n\t\t\t\"nationals\": \"NOUN\",\n\t\t\t\"reali-\": \"VERB\",\n\t\t\t\"ascetic\": \"ADJ\",\n\t\t\t\"corner\": \"NOUN\",\n\t\t\t\"tam\": \"PROPN\",\n\t\t\t\"th-\": \"INTJ\",\n\t\t\t\"yielded\": \"VERB\",\n\t\t\t\"coal-hole\": \"NOUN\",\n\t\t\t\"wierd\": \"ADJ\",\n\t\t\t\"evil-looking\": \"ADJ\",\n\t\t\t\"mounted\": \"VERB\",\n\t\t\t\"birth\": \"NOUN\",\n\t\t\t\"greenish\": \"ADJ\",\n\t\t\t\"structuring\": \"NOUN\",\n\t\t\t\"internship\": \"NOUN\",\n\t\t\t\"garment\": \"NOUN\",\n\t\t\t\"glowed\": \"VERB\",\n\t\t\t\"second\": \"ADJ\",\n\t\t\t\"chess\": \"NOUN\",\n\t\t\t\"encounter\": \"NOUN\",\n\t\t\t\"reactionaries\": \"NOUN\",\n\t\t\t\"occasions\": \"NOUN\",\n\t\t\t\"favoured\": \"VERB\",\n\t\t\t\"nathan\": \"PROPN\",\n\t\t\t\"silky\": \"ADJ\",\n\t\t\t\"tropez\": \"PROPN\",\n\t\t\t\"theology\": \"NOUN\",\n\t\t\t\"wiltshire\": \"PROPN\",\n\t\t\t\"nakarai\": \"PROPN\",\n\t\t\t\"harm\": \"NOUN\",\n\t\t\t\"uniform\": \"ADJ\",\n\t\t\t\"murphy\": \"PROPN\",\n\t\t\t\"pompously\": \"ADV\",\n\t\t\t\"04:11\": \"NUM\",\n\t\t\t\"stability\": \"NOUN\",\n\t\t\t\"senators\": \"PROPN\",\n\t\t\t\"soper\": \"PROPN\",\n\t\t\t\"micro-fiber\": \"ADJ\",\n\t\t\t\"04/04/2001\": \"NUM\",\n\t\t\t\"copenhagen\": \"PROPN\",\n\t\t\t\"thought-nourishing\": \"VERB\",\n\t\t\t\"1964\": \"NUM\",\n\t\t\t\"scheduling\": \"NOUN\",\n\t\t\t\"483.00\": \"NUM\",\n\t\t\t\"islamiya\": \"PROPN\",\n\t\t\t\"thouhgt\": \"VERB\",\n\t\t\t\"aries\": \"PROPN\",\n\t\t\t\"wile\": \"NOUN\",\n\t\t\t\"self-will\": \"NOUN\",\n\t\t\t\"06\": \"NUM\",\n\t\t\t\"uncivil\": \"ADJ\",\n\t\t\t\"article\": \"NOUN\",\n\t\t\t\"topical\": \"ADJ\",\n\t\t\t\"105\": \"NUM\",\n\t\t\t\"cate\": \"PROPN\",\n\t\t\t\"fusionretail\": \"PROPN\",\n\t\t\t\"grills\": \"VERB\",\n\t\t\t\"admire\": \"VERB\",\n\t\t\t\"apollinaris\": \"PROPN\",\n\t\t\t\"nadler\": \"PROPN\",\n\t\t\t\"invoicing\": \"VERB\",\n\t\t\t\"priority\": \"NOUN\",\n\t\t\t\"wendy\": \"PROPN\",\n\t\t\t\"assh@%$e\": \"NOUN\",\n\t\t\t\"bronze\": \"NOUN\",\n\t\t\t\"execution\": \"NOUN\",\n\t\t\t\"misery\": \"NOUN\",\n\t\t\t\"comparisons\": \"NOUN\",\n\t\t\t\"scrubbed\": \"ADJ\",\n\t\t\t\"weirdness\": \"NOUN\",\n\t\t\t\"buzzing\": \"NOUN\",\n\t\t\t\"appendices\": \"NOUN\",\n\t\t\t\"rapacity\": \"NOUN\",\n\t\t\t\"secrets\": \"NOUN\",\n\t\t\t\"mustansiriyah\": \"PROPN\",\n\t\t\t\"preconditions\": \"NOUN\",\n\t\t\t\"participants\": \"NOUN\",\n\t\t\t\"waht\": \"PRON\",\n\t\t\t\"port\": \"NOUN\",\n\t\t\t\"faaborg\": \"PROPN\",\n\t\t\t\"burn\": \"VERB\",\n\t\t\t\"earmuffs\": \"NOUN\",\n\t\t\t\"nostromo\": \"PROPN\",\n\t\t\t\"i/s\": \"NOUN\",\n\t\t\t\"persistence\": \"NOUN\",\n\t\t\t\"madagascar\": \"PROPN\",\n\t\t\t\"appreciate\": \"VERB\",\n\t\t\t\"hid\": \"VERB\",\n\t\t\t\"commenced\": \"VERB\",\n\t\t\t\"pinky\": \"NOUN\",\n\t\t\t\"flung\": \"VERB\",\n\t\t\t\"1830\": \"NUM\",\n\t\t\t\"bpd\": \"NOUN\",\n\t\t\t\"essential\": \"ADJ\",\n\t\t\t\"geologically\": \"ADV\",\n\t\t\t\"lights\": \"NOUN\",\n\t\t\t\"the\": \"DET\",\n\t\t\t\"additionally\": \"ADV\",\n\t\t\t\"airlift\": \"NOUN\",\n\t\t\t\"panamanian\": \"ADJ\",\n\t\t\t\"rendering\": \"NOUN\",\n\t\t\t\"church\": \"PROPN\",\n\t\t\t\"legalised\": \"VERB\",\n\t\t\t\"introducing\": \"VERB\",\n\t\t\t\"ostrich\": \"NOUN\",\n\t\t\t\"mothers\": \"NOUN\",\n\t\t\t\"1.877.999.3223\": \"NUM\",\n\t\t\t\"brutalizing\": \"VERB\",\n\t\t\t\"light-inflected\": \"ADJ\",\n\t\t\t\"breakfasts\": \"NOUN\",\n\t\t\t\"3.29\": \"NUM\",\n\t\t\t\"usenet\": \"PROPN\",\n\t\t\t\"crease\": \"NOUN\",\n\t\t\t\"pelham\": \"NOUN\",\n\t\t\t\"whilst\": \"SCONJ\",\n\t\t\t\"kaho\": \"PROPN\",\n\t\t\t\"manifested\": \"VERB\",\n\t\t\t\"prized\": \"VERB\",\n\t\t\t\"mattered\": \"VERB\",\n\t\t\t\"kurtz\": \"PROPN\",\n\t\t\t\"inviting\": \"VERB\",\n\t\t\t\"heyday\": \"NOUN\",\n\t\t\t\"undertakings\": \"NOUN\",\n\t\t\t\"sonya\": \"PROPN\",\n\t\t\t\"delis\": \"NOUN\",\n\t\t\t\"downgrading\": \"VERB\",\n\t\t\t\"against\": \"ADP\",\n\t\t\t\"wight\": \"NOUN\",\n\t\t\t\"tendrils\": \"NOUN\",\n\t\t\t\"unsurprising\": \"ADJ\",\n\t\t\t\"physiology\": \"NOUN\",\n\t\t\t\"panels\": \"NOUN\",\n\t\t\t\"ucan\": \"PROPN\",\n\t\t\t\"trademark\": \"NOUN\",\n\t\t\t\"carrol\": \"PROPN\",\n\t\t\t\"nancy\": \"PROPN\",\n\t\t\t\"settler\": \"NOUN\",\n\t\t\t\"peace\": \"NOUN\",\n\t\t\t\"iron\": \"NOUN\",\n\t\t\t\"josalyn\": \"PROPN\",\n\t\t\t\"unanimously\": \"ADV\",\n\t\t\t\"optional\": \"ADJ\",\n\t\t\t\"rattling\": \"VERB\",\n\t\t\t\"replaced\": \"VERB\",\n\t\t\t\"introduced\": \"VERB\",\n\t\t\t\"repoire\": \"NOUN\",\n\t\t\t\"strainer\": \"NOUN\",\n\t\t\t\"responses\": \"NOUN\",\n\t\t\t\"saithe\": \"NOUN\",\n\t\t\t\"overwhelmed\": \"VERB\",\n\t\t\t\"accepting\": \"VERB\",\n\t\t\t\"interferometers\": \"NOUN\",\n\t\t\t\"cob\": \"NOUN\",\n\t\t\t\"stock-still\": \"ADV\",\n\t\t\t\"reaction\": \"NOUN\",\n\t\t\t\"reality\": \"NOUN\",\n\t\t\t\"antigone\": \"PROPN\",\n\t\t\t\"discounts\": \"NOUN\",\n\t\t\t\"tribe\": \"NOUN\",\n\t\t\t\"preferring\": \"VERB\",\n\t\t\t\"tumbledown\": \"ADJ\",\n\t\t\t\"wagging\": \"VERB\",\n\t\t\t\"correlates\": \"NOUN\",\n\t\t\t\"refunds\": \"NOUN\",\n\t\t\t\"lapses\": \"NOUN\",\n\t\t\t\"liquefied\": \"VERB\",\n\t\t\t\"murph\": \"PROPN\",\n\t\t\t\"responds\": \"VERB\",\n\t\t\t\"jingū\": \"PROPN\",\n\t\t\t\"functionaries\": \"NOUN\",\n\t\t\t\"haven\": \"NOUN\",\n\t\t\t\"shanties\": \"NOUN\",\n\t\t\t\"sugarcane\": \"NOUN\",\n\t\t\t\"sehar\": \"PROPN\",\n\t\t\t\"jordanians\": \"NOUN\",\n\t\t\t\"group\": \"NOUN\",\n\t\t\t\"rickenbacker\": \"PROPN\",\n\t\t\t\"residences\": \"NOUN\",\n\t\t\t\"ranked\": \"VERB\",\n\t\t\t\"548\": \"NUM\",\n\t\t\t\"devils\": \"NOUN\",\n\t\t\t\"springfield\": \"PROPN\",\n\t\t\t\"seattle\": \"PROPN\",\n\t\t\t\"mouthed\": \"ADJ\",\n\t\t\t\"02/27/2001\": \"NUM\",\n\t\t\t\"lattice\": \"PROPN\",\n\t\t\t\"delhi\": \"PROPN\",\n\t\t\t\"englewood\": \"PROPN\",\n\t\t\t\"streamed\": \"VERB\",\n\t\t\t\"scrutiny\": \"NOUN\",\n\t\t\t\"physicist\": \"NOUN\",\n\t\t\t\"cresson\": \"PROPN\",\n\t\t\t\"landings\": \"NOUN\",\n\t\t\t\"badges\": \"NOUN\",\n\t\t\t\"overrun\": \"VERB\",\n\t\t\t\"50,818\": \"NUM\",\n\t\t\t\"vacated\": \"VERB\",\n\t\t\t\"gov.\": \"PROPN\",\n\t\t\t\"aerospace\": \"NOUN\",\n\t\t\t\"hooks\": \"NOUN\",\n\t\t\t\"kopinga\": \"PROPN\",\n\t\t\t\"flag-stones\": \"NOUN\",\n\t\t\t\"stacks\": \"NOUN\",\n\t\t\t\"cev\": \"PROPN\",\n\t\t\t\"sonnets\": \"NOUN\",\n\t\t\t\"compassionate\": \"ADJ\",\n\t\t\t\"cigars\": \"NOUN\",\n\t\t\t\"verticalization\": \"NOUN\",\n\t\t\t\"jostling\": \"VERB\",\n\t\t\t\"irc\": \"PROPN\",\n\t\t\t\"moisturizing\": \"ADJ\",\n\t\t\t\"confirmit\": \"PROPN\",\n\t\t\t\"willingly\": \"ADV\",\n\t\t\t\"sauce\": \"NOUN\",\n\t\t\t\"assortment\": \"NOUN\",\n\t\t\t\"midlife\": \"NOUN\",\n\t\t\t\"pyrimidal\": \"ADJ\",\n\t\t\t\"overloaded\": \"VERB\",\n\t\t\t\"trotters\": \"NOUN\",\n\t\t\t\"questionnaire\": \"NOUN\",\n\t\t\t\"swelling\": \"VERB\",\n\t\t\t\"wholeheartedly\": \"ADV\",\n\t\t\t\"chester\": \"PROPN\",\n\t\t\t\"creditors\": \"NOUN\",\n\t\t\t\"imprisoned\": \"VERB\",\n\t\t\t\"1,537,058\": \"NUM\",\n\t\t\t\"14721\": \"NUM\",\n\t\t\t\"0448\": \"NUM\",\n\t\t\t\"marie\": \"PROPN\",\n\t\t\t\"phonies\": \"NOUN\",\n\t\t\t\"newcomer\": \"PROPN\",\n\t\t\t\"400\": \"NUM\",\n\t\t\t\"monks\": \"NOUN\",\n\t\t\t\"chirping\": \"NOUN\",\n\t\t\t\"ipad\": \"PROPN\",\n\t\t\t\"comedy\": \"NOUN\",\n\t\t\t\"healthy\": \"ADJ\",\n\t\t\t\"verbally\": \"ADV\",\n\t\t\t\"nashua\": \"PROPN\",\n\t\t\t\"06:28\": \"NUM\",\n\t\t\t\"stopped\": \"VERB\",\n\t\t\t\"215\": \"NUM\",\n\t\t\t\"insidious\": \"ADJ\",\n\t\t\t\"reestablished\": \"VERB\",\n\t\t\t\"sealed\": \"VERB\",\n\t\t\t\"elf\": \"NOUN\",\n\t\t\t\"frame\": \"NOUN\",\n\t\t\t\"vice-president\": \"NOUN\",\n\t\t\t\"ventured\": \"VERB\",\n\t\t\t\"reward\": \"NOUN\",\n\t\t\t\"reappropriation\": \"NOUN\",\n\t\t\t\"2/3\": \"NUM\",\n\t\t\t\"uva\": \"NOUN\",\n\t\t\t\"water-coloured\": \"ADJ\",\n\t\t\t\"spouses\": \"NOUN\",\n\t\t\t\"manufactured\": \"VERB\",\n\t\t\t\"fixation\": \"NOUN\",\n\t\t\t\"542\": \"NUM\",\n\t\t\t\"2021\": \"NUM\",\n\t\t\t\"120\": \"NUM\",\n\t\t\t\"disgrace\": \"NOUN\",\n\t\t\t\"belize\": \"PROPN\",\n\t\t\t\"beats\": \"VERB\",\n\t\t\t\"w/out\": \"SCONJ\",\n\t\t\t\"plateau\": \"NOUN\",\n\t\t\t\"3750\": \"NUM\",\n\t\t\t\"centrally\": \"ADV\",\n\t\t\t\"extradite\": \"VERB\",\n\t\t\t\"http://www.ibrae.ac.ru/ibrae/eng/chernobyl/nat_rep/nat_repe.htm#24\": \"PROPN\",\n\t\t\t\"salazar\": \"PROPN\",\n\t\t\t\"tau\": \"NOUN\",\n\t\t\t\"subsides\": \"VERB\",\n\t\t\t\"wpo\": \"PROPN\",\n\t\t\t\"drunk\": \"ADJ\",\n\t\t\t\"pred\": \"PROPN\",\n\t\t\t\"wikihow\": \"PROPN\",\n\t\t\t\"lips\": \"NOUN\",\n\t\t\t\"08:15\": \"NUM\",\n\t\t\t\"usually\": \"ADV\",\n\t\t\t\"arc\": \"NOUN\",\n\t\t\t\"cichlid\": \"NOUN\",\n\t\t\t\"america\": \"PROPN\",\n\t\t\t\"experiment\": \"NOUN\",\n\t\t\t\"detonated\": \"VERB\",\n\t\t\t\"bien\": \"PROPN\",\n\t\t\t\"winery\": \"NOUN\",\n\t\t\t\"leisurely\": \"ADJ\",\n\t\t\t\"analyze\": \"VERB\",\n\t\t\t\"mistruth\": \"NOUN\",\n\t\t\t\"omar\": \"PROPN\",\n\t\t\t\"blooded\": \"VERB\",\n\t\t\t\"darkened\": \"VERB\",\n\t\t\t\"kermit\": \"PROPN\",\n\t\t\t\"submit\": \"VERB\",\n\t\t\t\"penalties\": \"NOUN\",\n\t\t\t\"devil\": \"PROPN\",\n\t\t\t\"bait\": \"NOUN\",\n\t\t\t\"servants\": \"NOUN\",\n\t\t\t\"bodytalk\": \"NOUN\",\n\t\t\t\"memory\": \"NOUN\",\n\t\t\t\"predicted\": \"VERB\",\n\t\t\t\"cawing\": \"VERB\",\n\t\t\t\"distrusted\": \"VERB\",\n\t\t\t\"postcards\": \"NOUN\",\n\t\t\t\"pedantry\": \"NOUN\",\n\t\t\t\"irons\": \"NOUN\",\n\t\t\t\"260,000\": \"NUM\",\n\t\t\t\"mid-january\": \"PROPN\",\n\t\t\t\"constitutions\": \"NOUN\",\n\t\t\t\"diablo\": \"PROPN\",\n\t\t\t\"clog\": \"NOUN\",\n\t\t\t\"seinfeld\": \"PROPN\",\n\t\t\t\"travelguides\": \"NOUN\",\n\t\t\t\"postures\": \"NOUN\",\n\t\t\t\"flavour\": \"NOUN\",\n\t\t\t\"apprehension\": \"NOUN\",\n\t\t\t\"mayonnaise\": \"NOUN\",\n\t\t\t\"ærø\": \"PROPN\",\n\t\t\t\"referenced\": \"VERB\",\n\t\t\t\"prom\": \"PROPN\",\n\t\t\t\"nida\": \"PROPN\",\n\t\t\t\"before\": \"SCONJ\",\n\t\t\t\"catarina\": \"PROPN\",\n\t\t\t\"nepal\": \"PROPN\",\n\t\t\t\"centennial\": \"PROPN\",\n\t\t\t\"lineatus\": \"NOUN\",\n\t\t\t\"plans\": \"NOUN\",\n\t\t\t\"stupidly\": \"ADV\",\n\t\t\t\"jews\": \"NOUN\",\n\t\t\t\"monday's\": \"PROPN\",\n\t\t\t\"respectful\": \"ADJ\",\n\t\t\t\"subcommission\": \"NOUN\",\n\t\t\t\"145th\": \"PROPN\",\n\t\t\t\"vegetables\": \"NOUN\",\n\t\t\t\"balanced\": \"VERB\",\n\t\t\t\"}\": \"PUNCT\",\n\t\t\t\"clutches\": \"NOUN\",\n\t\t\t\"gagged\": \"VERB\",\n\t\t\t\"recommending\": \"VERB\",\n\t\t\t\"1679\": \"NUM\",\n\t\t\t\"inferior\": \"ADJ\",\n\t\t\t\"longs\": \"VERB\",\n\t\t\t\"triplets\": \"NOUN\",\n\t\t\t\"floods\": \"NOUN\",\n\t\t\t\"gérard\": \"PROPN\",\n\t\t\t\"read\": \"VERB\",\n\t\t\t\"muqrin\": \"PROPN\",\n\t\t\t\"zubayda\": \"PROPN\",\n\t\t\t\"capture\": \"VERB\",\n\t\t\t\"http://www.loveallpeople.org/theonereasonwhy.txt\": \"PROPN\",\n\t\t\t\"theo\": \"PROPN\",\n\t\t\t\"noon\": \"NOUN\",\n\t\t\t\"saltiness\": \"NOUN\",\n\t\t\t\"auster\": \"PROPN\",\n\t\t\t\"interviewed\": \"VERB\",\n\t\t\t\"ironies\": \"NOUN\",\n\t\t\t\"proof\": \"NOUN\",\n\t\t\t\"catastrophic\": \"ADJ\",\n\t\t\t\"jan.\": \"PROPN\",\n\t\t\t\"contents\": \"NOUN\",\n\t\t\t\"submission\": \"NOUN\",\n\t\t\t\"fluid\": \"NOUN\",\n\t\t\t\"englishwoman\": \"NOUN\",\n\t\t\t\"grassy\": \"ADJ\",\n\t\t\t\"paralympics\": \"PROPN\",\n\t\t\t\"thierry.poibeau@ens.fr\": \"PROPN\",\n\t\t\t\"burst\": \"VERB\",\n\t\t\t\"norwegian\": \"ADJ\",\n\t\t\t\"directions\": \"NOUN\",\n\t\t\t\"archival\": \"ADJ\",\n\t\t\t\"dipped\": \"VERB\",\n\t\t\t\"heights\": \"NOUN\",\n\t\t\t\"it\": \"PRON\",\n\t\t\t\"feeble\": \"ADJ\",\n\t\t\t\"expedited\": \"VERB\",\n\t\t\t\"bobber\": \"NOUN\",\n\t\t\t\"consideration\": \"NOUN\",\n\t\t\t\"ideology\": \"NOUN\",\n\t\t\t\"religions\": \"NOUN\",\n\t\t\t\"yielding\": \"VERB\",\n\t\t\t\"eddie\": \"PROPN\",\n\t\t\t\"unfortunate\": \"ADJ\",\n\t\t\t\"shu\": \"NOUN\",\n\t\t\t\"kuykendall\": \"PROPN\",\n\t\t\t\"divided\": \"VERB\",\n\t\t\t\"restrained\": \"VERB\",\n\t\t\t\"impressions\": \"NOUN\",\n\t\t\t\"unambiguously\": \"ADV\",\n\t\t\t\"orange\": \"ADJ\",\n\t\t\t\"rigorous\": \"ADJ\",\n\t\t\t\"glowsticks\": \"NOUN\",\n\t\t\t\"06:15\": \"NUM\",\n\t\t\t\"ruth\": \"PROPN\",\n\t\t\t\"jacobs\": \"PROPN\",\n\t\t\t\"quartet\": \"NOUN\",\n\t\t\t\"abroad\": \"ADV\",\n\t\t\t\"conced-\": \"NOUN\",\n\t\t\t\"director\": \"NOUN\",\n\t\t\t\"breonna\": \"PROPN\",\n\t\t\t\"mohib\": \"PROPN\",\n\t\t\t\"required\": \"VERB\",\n\t\t\t\"elephant\": \"NOUN\",\n\t\t\t\"entry\": \"NOUN\",\n\t\t\t\"martial\": \"ADJ\",\n\t\t\t\"blink\": \"VERB\",\n\t\t\t\"strategically\": \"ADV\",\n\t\t\t\"finesse\": \"VERB\",\n\t\t\t\"tabs\": \"NOUN\",\n\t\t\t\"optimistic\": \"ADJ\",\n\t\t\t\"journals\": \"NOUN\",\n\t\t\t\"anyting\": \"NOUN\",\n\t\t\t\"62,500\": \"NUM\",\n\t\t\t\"italiano\": \"PROPN\",\n\t\t\t\"crum\": \"INTJ\",\n\t\t\t\"tiling\": \"NOUN\",\n\t\t\t\"scientists\": \"NOUN\",\n\t\t\t\"campaigner\": \"NOUN\",\n\t\t\t\"1947\": \"NUM\",\n\t\t\t\"finalize\": \"VERB\",\n\t\t\t\"sympathizers\": \"NOUN\",\n\t\t\t\"reschedule\": \"VERB\",\n\t\t\t\"plowed\": \"VERB\",\n\t\t\t\"compose\": \"VERB\",\n\t\t\t\"abt\": \"ADP\",\n\t\t\t\"mauled\": \"VERB\",\n\t\t\t\"angered\": \"VERB\",\n\t\t\t\"adoptive\": \"ADJ\",\n\t\t\t\"!!!!!\": \"PUNCT\",\n\t\t\t\"armed\": \"ADJ\",\n\t\t\t\"coloured\": \"ADJ\",\n\t\t\t\"parody\": \"NOUN\",\n\t\t\t\"untouched\": \"ADJ\",\n\t\t\t\"unhunh\": \"INTJ\",\n\t\t\t\"ammonia\": \"NOUN\",\n\t\t\t\"youngster\": \"NOUN\",\n\t\t\t\"mmpi\": \"PROPN\",\n\t\t\t\"kenyans\": \"PROPN\",\n\t\t\t\"interrogated\": \"VERB\",\n\t\t\t\"shorten\": \"VERB\",\n\t\t\t\"pressed-down\": \"ADJ\",\n\t\t\t\"extant\": \"ADJ\",\n\t\t\t\"fours\": \"NOUN\",\n\t\t\t\"basso\": \"NOUN\",\n\t\t\t\"bishop\": \"PROPN\",\n\t\t\t\"council\": \"PROPN\",\n\t\t\t\"rejuvenate\": \"VERB\",\n\t\t\t\"wd\": \"PROPN\",\n\t\t\t\"refining\": \"VERB\",\n\t\t\t\"door\": \"NOUN\",\n\t\t\t\"bravest\": \"ADJ\",\n\t\t\t\"11.25\": \"NUM\",\n\t\t\t\"invalides\": \"PROPN\",\n\t\t\t\"broader\": \"ADJ\",\n\t\t\t\"sarhid\": \"PROPN\",\n\t\t\t\"pre-killed\": \"ADJ\",\n\t\t\t\"yahoo!\": \"PROPN\",\n\t\t\t\"asserting\": \"VERB\",\n\t\t\t\"dizzy\": \"ADJ\",\n\t\t\t\"forbes\": \"PROPN\",\n\t\t\t\"shortened\": \"VERB\",\n\t\t\t\"update\": \"NOUN\",\n\t\t\t\"grown\": \"VERB\",\n\t\t\t\"intersections\": \"NOUN\",\n\t\t\t\"trumpet\": \"NOUN\",\n\t\t\t\"hairnets\": \"NOUN\",\n\t\t\t\"validity\": \"NOUN\",\n\t\t\t\"tupperwear\": \"NOUN\",\n\t\t\t\"buffs\": \"NOUN\",\n\t\t\t\"expires\": \"VERB\",\n\t\t\t\"liner\": \"NOUN\",\n\t\t\t\"btwn\": \"ADP\",\n\t\t\t\"offense\": \"NOUN\",\n\t\t\t\"avant\": \"NOUN\",\n\t\t\t\"fhs\": \"PROPN\",\n\t\t\t\"outward\": \"ADJ\",\n\t\t\t\"28\": \"NUM\",\n\t\t\t\"allegations\": \"NOUN\",\n\t\t\t\"everywhere\": \"ADV\",\n\t\t\t\"neologism\": \"NOUN\",\n\t\t\t\"whisper\": \"VERB\",\n\t\t\t\"space\": \"NOUN\",\n\t\t\t\"saboteurs\": \"NOUN\",\n\t\t\t\"plate\": \"NOUN\",\n\t\t\t\"creep\": \"NOUN\",\n\t\t\t\"statutes\": \"NOUN\",\n\t\t\t\"bubble\": \"NOUN\",\n\t\t\t\"citing\": \"VERB\",\n\t\t\t\"320\": \"NUM\",\n\t\t\t\"labrador\": \"NOUN\",\n\t\t\t\"sealing-wax\": \"NOUN\",\n\t\t\t\"demonstrate\": \"VERB\",\n\t\t\t\"deviation\": \"NOUN\",\n\t\t\t\"sniffling\": \"VERB\",\n\t\t\t\"practised\": \"VERB\",\n\t\t\t\"non-proliferation\": \"NOUN\",\n\t\t\t\"maker\": \"NOUN\",\n\t\t\t\"accumulated\": \"VERB\",\n\t\t\t\"grained\": \"ADJ\",\n\t\t\t\"1483\": \"NUM\",\n\t\t\t\"vendors\": \"NOUN\",\n\t\t\t\"columnist\": \"NOUN\",\n\t\t\t\"drag\": \"VERB\",\n\t\t\t\"testifying\": \"VERB\",\n\t\t\t\"rules\": \"NOUN\",\n\t\t\t\"locally\": \"ADV\",\n\t\t\t\"pma\": \"PROPN\",\n\t\t\t\"velvet-draped\": \"ADJ\",\n\t\t\t\"grumble\": \"VERB\",\n\t\t\t\"l'espalier\": \"PROPN\",\n\t\t\t\"pre-fabricated\": \"ADJ\",\n\t\t\t\"shoe\": \"NOUN\",\n\t\t\t\"trouble\": \"NOUN\",\n\t\t\t\"antennæ\": \"NOUN\",\n\t\t\t\"conquered\": \"VERB\",\n\t\t\t\"woodsmoke\": \"NOUN\",\n\t\t\t\"honduras\": \"PROPN\",\n\t\t\t\"radison\": \"PROPN\",\n\t\t\t\"speakers\": \"NOUN\",\n\t\t\t\"dilemma\": \"NOUN\",\n\t\t\t\"resentment\": \"NOUN\",\n\t\t\t\"clare\": \"PROPN\",\n\t\t\t\"condescending\": \"ADJ\",\n\t\t\t\"mob\": \"NOUN\",\n\t\t\t\"cosplayer\": \"NOUN\",\n\t\t\t\"stifle\": \"NOUN\",\n\t\t\t\"tiptoe\": \"NOUN\",\n\t\t\t\"floral\": \"ADJ\",\n\t\t\t\"preseason\": \"NOUN\",\n\t\t\t\"desks\": \"NOUN\",\n\t\t\t\"carbon\": \"NOUN\",\n\t\t\t\"chapman\": \"PROPN\",\n\t\t\t\"monuments\": \"NOUN\",\n\t\t\t\"1952\": \"NUM\",\n\t\t\t\"rehab\": \"NOUN\",\n\t\t\t\"pressures\": \"NOUN\",\n\t\t\t\"trusty\": \"ADJ\",\n\t\t\t\"flavor(s)\": \"NOUN\",\n\t\t\t\"ex-pat\": \"NOUN\",\n\t\t\t\"cornerstones\": \"NOUN\",\n\t\t\t\"gasping\": \"VERB\",\n\t\t\t\"23,000\": \"NUM\",\n\t\t\t\"gone\": \"VERB\",\n\t\t\t\"czar\": \"NOUN\",\n\t\t\t\"laity\": \"PROPN\",\n\t\t\t\"180\": \"NUM\",\n\t\t\t\"defeats\": \"VERB\",\n\t\t\t\"overproduction\": \"NOUN\",\n\t\t\t\"cussing\": \"NOUN\",\n\t\t\t\"stranglehold\": \"NOUN\",\n\t\t\t\"universally\": \"ADV\",\n\t\t\t\"pdt\": \"NOUN\",\n\t\t\t\"voluntary\": \"ADJ\",\n\t\t\t\"hino\": \"PROPN\",\n\t\t\t\"amants\": \"PROPN\",\n\t\t\t\"vindebyørevej\": \"PROPN\",\n\t\t\t\"calcium\": \"NOUN\",\n\t\t\t\"intelligence\": \"NOUN\",\n\t\t\t\"feather\": \"NOUN\",\n\t\t\t\"aafia\": \"PROPN\",\n\t\t\t\"reputations\": \"NOUN\",\n\t\t\t\"soviet\": \"PROPN\",\n\t\t\t\"headset\": \"NOUN\",\n\t\t\t\"rented\": \"VERB\",\n\t\t\t\"lotfollah\": \"PROPN\",\n\t\t\t\"positive\": \"ADJ\",\n\t\t\t\"grams\": \"NOUN\",\n\t\t\t\"needless\": \"ADJ\",\n\t\t\t\"carried\": \"VERB\",\n\t\t\t\"tina\": \"PROPN\",\n\t\t\t\"attract\": \"VERB\",\n\t\t\t\"hypnotised\": \"VERB\",\n\t\t\t\"affordable\": \"ADJ\",\n\t\t\t\"deixis\": \"PROPN\",\n\t\t\t\"deployment\": \"NOUN\",\n\t\t\t\"uppercasing\": \"NOUN\",\n\t\t\t\"synodis\": \"PROPN\",\n\t\t\t\"comfyy\": \"ADJ\",\n\t\t\t\"sad-feeling\": \"ADJ\",\n\t\t\t\"yeaa\": \"INTJ\",\n\t\t\t\"unlisted\": \"ADJ\",\n\t\t\t\"theta\": \"NOUN\",\n\t\t\t\"packing\": \"VERB\",\n\t\t\t\"internal\": \"ADJ\",\n\t\t\t\"70s\": \"NOUN\",\n\t\t\t\"altered\": \"VERB\",\n\t\t\t\"undertook\": \"VERB\",\n\t\t\t\"mouths\": \"NOUN\",\n\t\t\t\"frontiers\": \"PROPN\",\n\t\t\t\"shed\": \"NOUN\",\n\t\t\t\"remarked\": \"VERB\",\n\t\t\t\"greyness\": \"NOUN\",\n\t\t\t\"conform\": \"VERB\",\n\t\t\t\"indolence\": \"NOUN\",\n\t\t\t\"kyle\": \"PROPN\",\n\t\t\t\"presents\": \"NOUN\",\n\t\t\t\"shape\": \"NOUN\",\n\t\t\t\"endanger\": \"VERB\",\n\t\t\t\"461-1776\": \"NUM\",\n\t\t\t\"dusters\": \"NOUN\",\n\t\t\t\"generation\": \"NOUN\",\n\t\t\t\"seating\": \"NOUN\",\n\t\t\t\"interplay\": \"NOUN\",\n\t\t\t\"morphological\": \"ADJ\",\n\t\t\t\"319\": \"NUM\",\n\t\t\t\"2543\": \"NUM\",\n\t\t\t\"water\": \"NOUN\",\n\t\t\t\"invest\": \"VERB\",\n\t\t\t\"mausoleum\": \"NOUN\",\n\t\t\t\"202.456.2461\": \"NUM\",\n\t\t\t\"uncannily\": \"ADV\",\n\t\t\t\"elisha\": \"PROPN\",\n\t\t\t\"jobs\": \"NOUN\",\n\t\t\t\"luna's\": \"NOUN\",\n\t\t\t\"nationwide\": \"ADJ\",\n\t\t\t\"partly\": \"ADV\",\n\t\t\t\"yelling\": \"VERB\",\n\t\t\t\"mango\": \"NOUN\",\n\t\t\t\"ditch\": \"VERB\",\n\t\t\t\"regrets\": \"NOUN\",\n\t\t\t\"glase\": \"PROPN\",\n\t\t\t\"nixon\": \"PROPN\",\n\t\t\t\"25th\": \"ADJ\",\n\t\t\t\"plotting\": \"VERB\",\n\t\t\t\"916\": \"NUM\",\n\t\t\t\"deter\": \"VERB\",\n\t\t\t\"lamps\": \"NOUN\",\n\t\t\t\"overdose\": \"NOUN\",\n\t\t\t\"shining\": \"VERB\",\n\t\t\t\"incredulity\": \"NOUN\",\n\t\t\t\"irving\": \"PROPN\",\n\t\t\t\"accurately\": \"ADV\",\n\t\t\t\"@hatmanone\": \"PROPN\",\n\t\t\t\"165.9\": \"NUM\",\n\t\t\t\"lt.\": \"PROPN\",\n\t\t\t\"beaten-up\": \"ADJ\",\n\t\t\t\"bilateral\": \"ADJ\",\n\t\t\t\"harms\": \"VERB\",\n\t\t\t\"teng\": \"PROPN\",\n\t\t\t\"pantomine\": \"NOUN\",\n\t\t\t\"opportunity\": \"NOUN\",\n\t\t\t\"baldish\": \"ADJ\",\n\t\t\t\"pony's\": \"NOUN\",\n\t\t\t\"politicians\": \"NOUN\",\n\t\t\t\"indians\": \"PROPN\",\n\t\t\t\"floated\": \"VERB\",\n\t\t\t\"post-accident\": \"ADJ\",\n\t\t\t\"bipartisan\": \"ADJ\",\n\t\t\t\"79\": \"NUM\",\n\t\t\t\"streett\": \"PROPN\",\n\t\t\t\"ash\": \"PROPN\",\n\t\t\t\"globe\": \"NOUN\",\n\t\t\t\"apology\": \"NOUN\",\n\t\t\t\"divergent\": \"ADJ\",\n\t\t\t\"prevailed\": \"VERB\",\n\t\t\t\"hammered\": \"VERB\",\n\t\t\t\"wolak\": \"PROPN\",\n\t\t\t\"drifting\": \"VERB\",\n\t\t\t\"ras\": \"PROPN\",\n\t\t\t\"orphans\": \"NOUN\",\n\t\t\t\"caked\": \"VERB\",\n\t\t\t\"alley\": \"PROPN\",\n\t\t\t\"confused\": \"ADJ\",\n\t\t\t\"simulated\": \"VERB\",\n\t\t\t\"potidea\": \"PROPN\",\n\t\t\t\"remodeling\": \"NOUN\",\n\t\t\t\"http://www.solutions.com/jump.jsp?itemid=1361&itemtype=product&path=1%2c3%2c477&iproductid=1361\": \"PROPN\",\n\t\t\t\"compact\": \"ADJ\",\n\t\t\t\"integration\": \"NOUN\",\n\t\t\t\"duties\": \"NOUN\",\n\t\t\t\"simulate\": \"VERB\",\n\t\t\t\"acquired\": \"VERB\",\n\t\t\t\"60s\": \"NOUN\",\n\t\t\t\"winters\": \"NOUN\",\n\t\t\t\"sleepers\": \"NOUN\",\n\t\t\t\"suggesting\": \"VERB\",\n\t\t\t\"thirties\": \"NOUN\",\n\t\t\t\"smacked\": \"VERB\",\n\t\t\t\"nov\": \"PROPN\",\n\t\t\t\"birdie\": \"NOUN\",\n\t\t\t\"01810\": \"NUM\",\n\t\t\t\"bertrand\": \"PROPN\",\n\t\t\t\"snaffle\": \"NOUN\",\n\t\t\t\"canada\": \"PROPN\",\n\t\t\t\"bhutan\": \"PROPN\",\n\t\t\t\"3s\": \"NOUN\",\n\t\t\t\"enters\": \"VERB\",\n\t\t\t\"guy\": \"NOUN\",\n\t\t\t\"signal\": \"NOUN\",\n\t\t\t\"intersects\": \"NOUN\",\n\t\t\t\"sided\": \"ADJ\",\n\t\t\t\"!!!!!!!!!!!!!\": \"PUNCT\",\n\t\t\t\"splitting\": \"VERB\",\n\t\t\t\"judges\": \"NOUN\",\n\t\t\t\"08:50:01\": \"NUM\",\n\t\t\t\"exceedingly\": \"ADV\",\n\t\t\t\"uploads\": \"VERB\",\n\t\t\t\"chiang\": \"PROPN\",\n\t\t\t\"11:48\": \"NUM\",\n\t\t\t\"wiki\": \"NOUN\",\n\t\t\t\"furthermore\": \"ADV\",\n\t\t\t\"regulatory\": \"ADJ\",\n\t\t\t\"cars\": \"NOUN\",\n\t\t\t\"lancashire\": \"PROPN\",\n\t\t\t\"ombre\": \"PROPN\",\n\t\t\t\"36,000,000,000\": \"NUM\",\n\t\t\t\"fumes\": \"NOUN\",\n\t\t\t\"sunken\": \"VERB\",\n\t\t\t\"busier\": \"ADJ\",\n\t\t\t\"re-type\": \"VERB\",\n\t\t\t\"restrictive\": \"ADJ\",\n\t\t\t\"desires\": \"VERB\",\n\t\t\t\"510-642-3689\": \"NUM\",\n\t\t\t\"three–day\": \"ADJ\",\n\t\t\t\"approvals\": \"NOUN\",\n\t\t\t\"eternal\": \"ADJ\",\n\t\t\t\"graduating\": \"VERB\",\n\t\t\t\"excellent\": \"ADJ\",\n\t\t\t\"paved\": \"ADJ\",\n\t\t\t\"barrister\": \"NOUN\",\n\t\t\t\"collected\": \"VERB\",\n\t\t\t\"aud\": \"NOUN\",\n\t\t\t\"circulate\": \"VERB\",\n\t\t\t\"acquaintances\": \"NOUN\",\n\t\t\t\"sovereign\": \"ADJ\",\n\t\t\t\"remained\": \"VERB\",\n\t\t\t\"versus\": \"ADP\",\n\t\t\t\"chicks\": \"NOUN\",\n\t\t\t\"yor-vik\": \"PROPN\",\n\t\t\t\"underscore\": \"VERB\",\n\t\t\t\"carol\": \"PROPN\",\n\t\t\t\"?!\": \"PUNCT\",\n\t\t\t\"spans\": \"VERB\",\n\t\t\t\"oaks\": \"NOUN\",\n\t\t\t\"exile\": \"PROPN\",\n\t\t\t\"tightly\": \"ADV\",\n\t\t\t\"consisted\": \"VERB\",\n\t\t\t\"sponsoring\": \"VERB\",\n\t\t\t\"lightning-shaped\": \"ADJ\",\n\t\t\t\"prestige\": \"NOUN\",\n\t\t\t\"sql\": \"PROPN\",\n\t\t\t\"177\": \"NUM\",\n\t\t\t\"vermeer\": \"PROPN\",\n\t\t\t\"dose\": \"PROPN\",\n\t\t\t\"hut\": \"NOUN\",\n\t\t\t\"stepped\": \"VERB\",\n\t\t\t\"beat\": \"VERB\",\n\t\t\t\"moored\": \"VERB\",\n\t\t\t\"clicking\": \"VERB\",\n\t\t\t\"glimpsed\": \"VERB\",\n\t\t\t\"recognise\": \"VERB\",\n\t\t\t\"suddenly\": \"ADV\",\n\t\t\t\"displeases\": \"VERB\",\n\t\t\t\"seoul\": \"PROPN\",\n\t\t\t\"stealthy\": \"ADJ\",\n\t\t\t\"strike\": \"NOUN\",\n\t\t\t\"virginia\": \"PROPN\",\n\t\t\t\"winchester\": \"PROPN\",\n\t\t\t\"exploit\": \"VERB\",\n\t\t\t\"theseus\": \"PROPN\",\n\t\t\t\"chechnya\": \"PROPN\",\n\t\t\t\"metallic\": \"ADJ\",\n\t\t\t\"larson\": \"PROPN\",\n\t\t\t\"distorted\": \"VERB\",\n\t\t\t\"bulrush\": \"NOUN\",\n\t\t\t\"1960's\": \"NOUN\",\n\t\t\t\"batman\": \"PROPN\",\n\t\t\t\"cylinders\": \"NOUN\",\n\t\t\t\"repair\": \"NOUN\",\n\t\t\t\"upends\": \"VERB\",\n\t\t\t\"eg\": \"ADV\",\n\t\t\t\"a/73/pv.6\": \"PROPN\",\n\t\t\t\"worrying\": \"VERB\",\n\t\t\t\"peanuts\": \"NOUN\",\n\t\t\t\"enviably\": \"ADV\",\n\t\t\t\"eternally\": \"ADV\",\n\t\t\t\"dominoes\": \"NOUN\",\n\t\t\t\"xander\": \"PROPN\",\n\t\t\t\"optinal\": \"ADJ\",\n\t\t\t\"htc\": \"PROPN\",\n\t\t\t\"observation\": \"NOUN\",\n\t\t\t\"tanks\": \"NOUN\",\n\t\t\t\"smokers\": \"NOUN\",\n\t\t\t\"chatgpt\": \"PROPN\",\n\t\t\t\"giorgio\": \"PROPN\",\n\t\t\t\"thurs.\": \"PROPN\",\n\t\t\t\"faith\": \"NOUN\",\n\t\t\t\"subreports\": \"NOUN\",\n\t\t\t\"chap\": \"NOUN\",\n\t\t\t\"hindi\": \"PROPN\",\n\t\t\t\"fusion\": \"NOUN\",\n\t\t\t\"driven\": \"VERB\",\n\t\t\t\"rally\": \"NOUN\",\n\t\t\t\"loaded\": \"VERB\",\n\t\t\t\"baron\": \"PROPN\",\n\t\t\t\"imparting\": \"VERB\",\n\t\t\t\"plaque\": \"NOUN\",\n\t\t\t\"channel\": \"NOUN\",\n\t\t\t\"harsher\": \"ADJ\",\n\t\t\t\"rarely\": \"ADV\",\n\t\t\t\"grabbed\": \"VERB\",\n\t\t\t\"cemented\": \"VERB\",\n\t\t\t\"numbness\": \"NOUN\",\n\t\t\t\"chiros\": \"NOUN\",\n\t\t\t\"alarmed\": \"ADJ\",\n\t\t\t\"philosophy\": \"NOUN\",\n\t\t\t\"louisiana\": \"PROPN\",\n\t\t\t\"joys\": \"PROPN\",\n\t\t\t\"evidence\": \"NOUN\",\n\t\t\t\"amendments\": \"NOUN\",\n\t\t\t\"devolution\": \"NOUN\",\n\t\t\t\"electricity\": \"NOUN\",\n\t\t\t\"career-wise\": \"ADV\",\n\t\t\t\"starzz\": \"PROPN\",\n\t\t\t\"rescuers\": \"NOUN\",\n\t\t\t\"approximate\": \"ADJ\",\n\t\t\t\"5c\": \"PROPN\",\n\t\t\t\"improves\": \"VERB\",\n\t\t\t\"painful\": \"ADJ\",\n\t\t\t\"kadhim\": \"PROPN\",\n\t\t\t\"prime\": \"ADJ\",\n\t\t\t\"veteran\": \"ADJ\",\n\t\t\t\"maintaining\": \"VERB\",\n\t\t\t\"requirement\": \"NOUN\",\n\t\t\t\"kirriemuir\": \"PROPN\",\n\t\t\t\"recalculation\": \"NOUN\",\n\t\t\t\"immensity\": \"NOUN\",\n\t\t\t\"begins\": \"VERB\",\n\t\t\t\"depraved\": \"ADJ\",\n\t\t\t\"phoned\": \"VERB\",\n\t\t\t\"shares\": \"NOUN\",\n\t\t\t\"interventions\": \"NOUN\",\n\t\t\t\"beautiful\": \"ADJ\",\n\t\t\t\"bares\": \"VERB\",\n\t\t\t\"banners\": \"NOUN\",\n\t\t\t\"must\": \"AUX\",\n\t\t\t\"sally\": \"PROPN\",\n\t\t\t\"sculpted\": \"VERB\",\n\t\t\t\"temp\": \"NOUN\",\n\t\t\t\"period\": \"NOUN\",\n\t\t\t\"6,000\": \"NUM\",\n\t\t\t\"final\": \"ADJ\",\n\t\t\t\"1970\": \"NUM\",\n\t\t\t\"observatories\": \"NOUN\",\n\t\t\t\"motor\": \"NOUN\",\n\t\t\t\"monarchy\": \"NOUN\",\n\t\t\t\"tern\": \"PROPN\",\n\t\t\t\"downright\": \"ADV\",\n\t\t\t\"policing\": \"PROPN\",\n\t\t\t\"flew\": \"VERB\",\n\t\t\t\"workload\": \"NOUN\",\n\t\t\t\"beall\": \"PROPN\",\n\t\t\t\"coroner\": \"NOUN\",\n\t\t\t\"nachos\": \"NOUN\",\n\t\t\t\"queries-views\": \"NOUN\",\n\t\t\t\"glasgow\": \"PROPN\",\n\t\t\t\"various\": \"ADJ\",\n\t\t\t\"alt.animals.felines.diseases\": \"NOUN\",\n\t\t\t\"planets\": \"NOUN\",\n\t\t\t\"fail\": \"VERB\",\n\t\t\t\"tropic\": \"PROPN\",\n\t\t\t\"weakness\": \"NOUN\",\n\t\t\t\"lid\": \"NOUN\",\n\t\t\t\"smartwolf\": \"PROPN\",\n\t\t\t\"enacted\": \"VERB\",\n\t\t\t\"barking\": \"NOUN\",\n\t\t\t\"outlines\": \"NOUN\",\n\t\t\t\"naturalist\": \"NOUN\",\n\t\t\t\"cry\": \"VERB\",\n\t\t\t\"syntax\": \"NOUN\",\n\t\t\t\"counseling\": \"NOUN\",\n\t\t\t\"taco\": \"PROPN\",\n\t\t\t\"shane\": \"PROPN\",\n\t\t\t\"template\": \"NOUN\",\n\t\t\t\"monet\": \"PROPN\",\n\t\t\t\"kiss\": \"VERB\",\n\t\t\t\"traumas\": \"NOUN\",\n\t\t\t\"durations\": \"NOUN\",\n\t\t\t\"sketchy\": \"ADJ\",\n\t\t\t\"fagan\": \"PROPN\",\n\t\t\t\"natural\": \"ADJ\",\n\t\t\t\"mermaid\": \"NOUN\",\n\t\t\t\"balloon\": \"NOUN\",\n\t\t\t\"smoother\": \"ADJ\",\n\t\t\t\"applicant\": \"NOUN\",\n\t\t\t\"undernourishment\": \"NOUN\",\n\t\t\t\"turbines\": \"NOUN\",\n\t\t\t\"vineyards\": \"NOUN\",\n\t\t\t\"ministered\": \"VERB\",\n\t\t\t\"greedy\": \"ADJ\",\n\t\t\t\"fleece\": \"NOUN\",\n\t\t\t\"fifa\": \"PROPN\",\n\t\t\t\"freshness\": \"NOUN\",\n\t\t\t\"contributions\": \"NOUN\",\n\t\t\t\"love\": \"VERB\",\n\t\t\t\"granddaughter\": \"NOUN\",\n\t\t\t\"unthinking\": \"ADJ\",\n\t\t\t\"coach\": \"NOUN\",\n\t\t\t\"wives\": \"NOUN\",\n\t\t\t\"romans\": \"NOUN\",\n\t\t\t\"lil\": \"ADJ\",\n\t\t\t\"oddly\": \"ADV\",\n\t\t\t\"representations\": \"NOUN\",\n\t\t\t\"miraculous\": \"ADJ\",\n\t\t\t\"draco\": \"PROPN\",\n\t\t\t\"commonsense\": \"ADJ\",\n\t\t\t\"uphi-\": \"ADJ\",\n\t\t\t\"sure\": \"ADJ\",\n\t\t\t\"scientology\": \"PROPN\",\n\t\t\t\"529,000\": \"NUM\",\n\t\t\t\"deducted\": \"VERB\",\n\t\t\t\"cheng\": \"PROPN\",\n\t\t\t\"asceticism\": \"NOUN\",\n\t\t\t\"3,200\": \"NUM\",\n\t\t\t\"ranchers\": \"NOUN\",\n\t\t\t\"watches\": \"NOUN\",\n\t\t\t\"stood\": \"VERB\",\n\t\t\t\"rendy\": \"PROPN\",\n\t\t\t\"broadband\": \"NOUN\",\n\t\t\t\"biologists\": \"NOUN\",\n\t\t\t\"sweater\": \"NOUN\",\n\t\t\t\"inquiringly\": \"ADV\",\n\t\t\t\"terrors\": \"NOUN\",\n\t\t\t\"175\": \"NUM\",\n\t\t\t\"booker\": \"PROPN\",\n\t\t\t\"seething\": \"VERB\",\n\t\t\t\"tense\": \"ADJ\",\n\t\t\t\"warsaw\": \"PROPN\",\n\t\t\t\"drawers\": \"NOUN\",\n\t\t\t\"lynne\": \"PROPN\",\n\t\t\t\"sipping\": \"VERB\",\n\t\t\t\"brigades\": \"NOUN\",\n\t\t\t\"survive\": \"VERB\",\n\t\t\t\"ansel\": \"PROPN\",\n\t\t\t\"southern\": \"ADJ\",\n\t\t\t\"weak\": \"ADJ\",\n\t\t\t\"consistently\": \"ADV\",\n\t\t\t\"plenipotentiary\": \"NOUN\",\n\t\t\t\"intruders\": \"NOUN\",\n\t\t\t\"brushing\": \"VERB\",\n\t\t\t\"cap\": \"NOUN\",\n\t\t\t\"goodbye\": \"NOUN\",\n\t\t\t\"devotion\": \"NOUN\",\n\t\t\t\"nw\": \"PROPN\",\n\t\t\t\"03/15/2001\": \"NUM\",\n\t\t\t\"yadavaran\": \"PROPN\",\n\t\t\t\"integral\": \"ADJ\",\n\t\t\t\"hilgert\": \"PROPN\",\n\t\t\t\"chance\": \"NOUN\",\n\t\t\t\"deployed\": \"VERB\",\n\t\t\t\"laos\": \"PROPN\",\n\t\t\t\"inserted\": \"VERB\",\n\t\t\t\"fetishism\": \"NOUN\",\n\t\t\t\"adequately\": \"ADV\",\n\t\t\t\"lunatics\": \"NOUN\",\n\t\t\t\"plover\": \"NOUN\",\n\t\t\t\"preacher\": \"NOUN\",\n\t\t\t\"fruitcake\": \"NOUN\",\n\t\t\t\"thermal\": \"ADJ\",\n\t\t\t\"mets\": \"PROPN\",\n\t\t\t\"divorce\": \"NOUN\",\n\t\t\t\"highly\": \"ADV\",\n\t\t\t\"connecticut\": \"PROPN\",\n\t\t\t\"decisively\": \"ADV\",\n\t\t\t\"fran\": \"PROPN\",\n\t\t\t\"leithead\": \"PROPN\",\n\t\t\t\"certificate\": \"NOUN\",\n\t\t\t\"locals\": \"NOUN\",\n\t\t\t\"killing\": \"VERB\",\n\t\t\t\"star\": \"NOUN\",\n\t\t\t\"instance\": \"NOUN\",\n\t\t\t\"errol\": \"PROPN\",\n\t\t\t\"summaries\": \"NOUN\",\n\t\t\t\"colleges\": \"NOUN\",\n\t\t\t\"zagros\": \"PROPN\",\n\t\t\t\"cheveux\": \"PROPN\",\n\t\t\t\"hopelessly\": \"ADV\",\n\t\t\t\"46\": \"NUM\",\n\t\t\t\"galvin\": \"PROPN\",\n\t\t\t\"reached\": \"VERB\",\n\t\t\t\"sag\": \"NOUN\",\n\t\t\t\"raised\": \"VERB\",\n\t\t\t\"magnetic\": \"ADJ\",\n\t\t\t\"hohokam\": \"PROPN\",\n\t\t\t\"s.d.\": \"PROPN\",\n\t\t\t\"mathias\": \"PROPN\",\n\t\t\t\"solstices\": \"NOUN\",\n\t\t\t\"comb\": \"NOUN\",\n\t\t\t\"warmonger\": \"NOUN\",\n\t\t\t\"shot\": \"NOUN\",\n\t\t\t\"counterintelligence\": \"NOUN\",\n\t\t\t\"ashcroft\": \"PROPN\",\n\t\t\t\"dc\": \"PROPN\",\n\t\t\t\"forks\": \"NOUN\",\n\t\t\t\"cajunish\": \"ADJ\",\n\t\t\t\"animal\": \"NOUN\",\n\t\t\t\"alhaznawi\": \"PROPN\",\n\t\t\t\"paulo\": \"PROPN\",\n\t\t\t\"approval\": \"NOUN\",\n\t\t\t\"standardized\": \"VERB\",\n\t\t\t\"terrain\": \"NOUN\",\n\t\t\t\"probabilities\": \"NOUN\",\n\t\t\t\"meter\": \"NOUN\",\n\t\t\t\"kc\": \"PROPN\",\n\t\t\t\"concerto\": \"NOUN\",\n\t\t\t\"coverage\": \"NOUN\",\n\t\t\t\"collapse\": \"NOUN\",\n\t\t\t\"halliburton\": \"PROPN\",\n\t\t\t\"encouraged\": \"VERB\",\n\t\t\t\"preconception\": \"NOUN\",\n\t\t\t\"reintroduction\": \"NOUN\",\n\t\t\t\"galois\": \"PROPN\",\n\t\t\t\"shawnta\": \"PROPN\",\n\t\t\t\"crumbling\": \"ADJ\",\n\t\t\t\"mommism\": \"NOUN\",\n\t\t\t\"grandson\": \"NOUN\",\n\t\t\t\"bereaved\": \"ADJ\",\n\t\t\t\"buenos\": \"PROPN\",\n\t\t\t\"http://en.wikipedia.org/wiki/degenerate_art\": \"PROPN\",\n\t\t\t\"fiercely\": \"ADV\",\n\t\t\t\"symphonies\": \"NOUN\",\n\t\t\t\"ruthless\": \"ADJ\",\n\t\t\t\"disproportionate\": \"ADJ\",\n\t\t\t\"exchange\": \"NOUN\",\n\t\t\t\"senses\": \"NOUN\",\n\t\t\t\"paths\": \"NOUN\",\n\t\t\t\"attracts\": \"VERB\",\n\t\t\t\"jacobsen\": \"PROPN\",\n\t\t\t\"folded\": \"VERB\",\n\t\t\t\"why\": \"ADV\",\n\t\t\t\"crunching\": \"ADJ\",\n\t\t\t\"dh\": \"NOUN\",\n\t\t\t\"lithograph\": \"NOUN\",\n\t\t\t\"algerians\": \"PROPN\",\n\t\t\t\"personally\": \"ADV\",\n\t\t\t\"buckeye\": \"PROPN\",\n\t\t\t\"umbrella\": \"NOUN\",\n\t\t\t\"a59\": \"PROPN\",\n\t\t\t\"licked\": \"VERB\",\n\t\t\t\"ukrops\": \"PROPN\",\n\t\t\t\"leaky\": \"ADJ\",\n\t\t\t\"281-443-3744\": \"NUM\",\n\t\t\t\"stream\": \"NOUN\",\n\t\t\t\"nacer\": \"PROPN\",\n\t\t\t\"founded\": \"VERB\",\n\t\t\t\"aspect\": \"NOUN\",\n\t\t\t\"shocks\": \"NOUN\",\n\t\t\t\"critical\": \"ADJ\",\n\t\t\t\"zion\": \"PROPN\",\n\t\t\t\"packaged\": \"VERB\",\n\t\t\t\"madam\": \"NOUN\",\n\t\t\t\"sill\": \"NOUN\",\n\t\t\t\"penned\": \"VERB\",\n\t\t\t\"1986\": \"NUM\",\n\t\t\t\"listen\": \"VERB\",\n\t\t\t\"craves\": \"VERB\",\n\t\t\t\"understand\": \"VERB\",\n\t\t\t\"prehistoric\": \"ADJ\",\n\t\t\t\"anti-shipping\": \"ADJ\",\n\t\t\t\"dudley\": \"PROPN\",\n\t\t\t\"discovered\": \"VERB\",\n\t\t\t\"stabros\": \"NOUN\",\n\t\t\t\"steel\": \"NOUN\",\n\t\t\t\"fend\": \"VERB\",\n\t\t\t\"thors\": \"PROPN\",\n\t\t\t\"parenteau\": \"PROPN\",\n\t\t\t\"knights-errant\": \"NOUN\",\n\t\t\t\"symptom\": \"NOUN\",\n\t\t\t\"chock\": \"ADV\",\n\t\t\t\"implicate\": \"VERB\",\n\t\t\t\"indiscriminately\": \"ADV\",\n\t\t\t\"speeding\": \"VERB\",\n\t\t\t\"airbnb\": \"PROPN\",\n\t\t\t\"mrs.\": \"PROPN\",\n\t\t\t\"devraj\": \"PROPN\",\n\t\t\t\"newfound\": \"ADJ\",\n\t\t\t\"archosaur\": \"NOUN\",\n\t\t\t\"petunias\": \"PROPN\",\n\t\t\t\"nick\": \"PROPN\",\n\t\t\t\"e@tg\": \"PROPN\",\n\t\t\t\"squadrons\": \"NOUN\",\n\t\t\t\"recurrent\": \"ADJ\",\n\t\t\t\"peach\": \"NOUN\",\n\t\t\t\"knowingly\": \"ADV\",\n\t\t\t\"shrug\": \"NOUN\",\n\t\t\t\"captained\": \"VERB\",\n\t\t\t\"brightly\": \"ADV\",\n\t\t\t\"fix\": \"VERB\",\n\t\t\t\"airlifted\": \"VERB\",\n\t\t\t\"unaware\": \"ADJ\",\n\t\t\t\"61,000,000,000\": \"NUM\",\n\t\t\t\"hypothesized\": \"VERB\",\n\t\t\t\"hussein\": \"PROPN\",\n\t\t\t\"horizons\": \"NOUN\",\n\t\t\t\"recruit\": \"VERB\",\n\t\t\t\"sussexs\": \"NOUN\",\n\t\t\t\"reconvened\": \"VERB\",\n\t\t\t\"katrina\": \"PROPN\",\n\t\t\t\"’’\": \"PUNCT\",\n\t\t\t\"bunch\": \"NOUN\",\n\t\t\t\"detach\": \"VERB\",\n\t\t\t\"argumentative\": \"ADJ\",\n\t\t\t\"loop\": \"NOUN\",\n\t\t\t\"solicitor\": \"PROPN\",\n\t\t\t\"meraux\": \"PROPN\",\n\t\t\t\"ground\": \"NOUN\",\n\t\t\t\"frozen\": \"VERB\",\n\t\t\t\"caffasso\": \"PROPN\",\n\t\t\t\"clinking\": \"VERB\",\n\t\t\t\"inertia\": \"NOUN\",\n\t\t\t\"hopefully\": \"ADV\",\n\t\t\t\"gene\": \"NOUN\",\n\t\t\t\"athens\": \"PROPN\",\n\t\t\t\"selected\": \"VERB\",\n\t\t\t\"vertical\": \"ADJ\",\n\t\t\t\"lasciviousness\": \"NOUN\",\n\t\t\t\"unpriced\": \"ADJ\",\n\t\t\t\"darkest\": \"ADJ\",\n\t\t\t\"barb\": \"PROPN\",\n\t\t\t\"wisdom\": \"NOUN\",\n\t\t\t\"democracy\": \"NOUN\",\n\t\t\t\"dischord\": \"NOUN\",\n\t\t\t\"substituted\": \"VERB\",\n\t\t\t\"dismantled\": \"ADJ\",\n\t\t\t\"baghdadis\": \"PROPN\",\n\t\t\t\"calibration\": \"NOUN\",\n\t\t\t\"sibley\": \"PROPN\",\n\t\t\t\"holly\": \"PROPN\",\n\t\t\t\"1598\": \"NUM\",\n\t\t\t\"cadres\": \"NOUN\",\n\t\t\t\"powerful\": \"ADJ\",\n\t\t\t\"logs\": \"NOUN\",\n\t\t\t\"die\": \"VERB\",\n\t\t\t\"dazed\": \"ADJ\",\n\t\t\t\"confirming\": \"VERB\",\n\t\t\t\"frames\": \"NOUN\",\n\t\t\t\"perceive\": \"VERB\",\n\t\t\t\"unimportant\": \"ADJ\",\n\t\t\t\"disasters\": \"NOUN\",\n\t\t\t\"lesser\": \"ADJ\",\n\t\t\t\"pan\": \"NOUN\",\n\t\t\t\"pickle\": \"NOUN\",\n\t\t\t\"reread\": \"VERB\",\n\t\t\t\"railways\": \"NOUN\",\n\t\t\t\"biggest\": \"ADJ\",\n\t\t\t\"bitters\": \"NOUN\",\n\t\t\t\"auction\": \"NOUN\",\n\t\t\t\"oz.\": \"NOUN\",\n\t\t\t\"puppies\": \"NOUN\",\n\t\t\t\"original\": \"ADJ\",\n\t\t\t\"pew\": \"PROPN\",\n\t\t\t\"banquets\": \"NOUN\",\n\t\t\t\"underway\": \"ADJ\",\n\t\t\t\"sliding\": \"VERB\",\n\t\t\t\"chloe\": \"PROPN\",\n\t\t\t\"printing\": \"NOUN\",\n\t\t\t\"899-4310\": \"NUM\",\n\t\t\t\"driveway\": \"NOUN\",\n\t\t\t\"flores\": \"PROPN\",\n\t\t\t\"prevailing\": \"VERB\",\n\t\t\t\"burger\": \"NOUN\",\n\t\t\t\"ugliness\": \"NOUN\",\n\t\t\t\"évariste\": \"PROPN\",\n\t\t\t\"compulsion\": \"NOUN\",\n\t\t\t\"argues\": \"VERB\",\n\t\t\t\"liter\": \"NOUN\",\n\t\t\t\"03:43\": \"NUM\",\n\t\t\t\"michaelis\": \"PROPN\",\n\t\t\t\"carriles\": \"PROPN\",\n\t\t\t\"sympathizer\": \"NOUN\",\n\t\t\t\"lind\": \"PROPN\",\n\t\t\t\"collided\": \"VERB\",\n\t\t\t\"pluralism\": \"NOUN\",\n\t\t\t\"suitcases\": \"NOUN\",\n\t\t\t\"#ethos\": \"PROPN\",\n\t\t\t\"sells\": \"PROPN\",\n\t\t\t\"premises\": \"NOUN\",\n\t\t\t\"alarm\": \"NOUN\",\n\t\t\t\"fork\": \"NOUN\",\n\t\t\t\"1/30/10\": \"NUM\",\n\t\t\t\"plains\": \"PROPN\",\n\t\t\t\"labeled\": \"VERB\",\n\t\t\t\"blotted\": \"VERB\",\n\t\t\t\"zooming\": \"VERB\",\n\t\t\t\"intoxication\": \"NOUN\",\n\t\t\t\"cornflakes\": \"NOUN\",\n\t\t\t\"await\": \"VERB\",\n\t\t\t\"wriggled\": \"VERB\",\n\t\t\t\"blumenfeld\": \"PROPN\",\n\t\t\t\"<\": \"PUNCT\",\n\t\t\t\"releasing\": \"VERB\",\n\t\t\t\"tombs\": \"NOUN\",\n\t\t\t\"grudge\": \"NOUN\",\n\t\t\t\"mk\": \"PROPN\",\n\t\t\t\"helicopter\": \"NOUN\",\n\t\t\t\"rarefied\": \"ADJ\",\n\t\t\t\"314\": \"NUM\",\n\t\t\t\"http://www.tecsoc.org/pubs/history/2002/apr26.htm\": \"PROPN\",\n\t\t\t\"heavy\": \"ADJ\",\n\t\t\t\"texas\": \"PROPN\",\n\t\t\t\"survivor\": \"NOUN\",\n\t\t\t\"wartime\": \"NOUN\",\n\t\t\t\"yield\": \"VERB\",\n\t\t\t\"rekindle\": \"VERB\",\n\t\t\t\"http://www.arps.org.au/chernobyl.htm\": \"PROPN\",\n\t\t\t\"conceivably\": \"ADV\",\n\t\t\t\"renamed\": \"VERB\",\n\t\t\t\"upset\": \"ADJ\",\n\t\t\t\"triggering\": \"VERB\",\n\t\t\t\"townies\": \"NOUN\",\n\t\t\t\"stanford\": \"PROPN\",\n\t\t\t\"habitat\": \"NOUN\",\n\t\t\t\"guerrilla\": \"NOUN\",\n\t\t\t\"refuses\": \"VERB\",\n\t\t\t\"bk\": \"PROPN\",\n\t\t\t\"generic\": \"ADJ\",\n\t\t\t\"virtually\": \"ADV\",\n\t\t\t\"corell\": \"PROPN\",\n\t\t\t\"burrows\": \"PROPN\",\n\t\t\t\"employs\": \"VERB\",\n\t\t\t\"sundays\": \"PROPN\",\n\t\t\t\"huskers\": \"PROPN\",\n\t\t\t\"participating\": \"VERB\",\n\t\t\t\"abate\": \"VERB\",\n\t\t\t\"creatively\": \"ADV\",\n\t\t\t\"ansi-89\": \"PROPN\",\n\t\t\t\"http://www.infoukes.com/history/chornobyl/gregorovich/index.html\": \"PROPN\",\n\t\t\t\"shoes\": \"NOUN\",\n\t\t\t\"poker\": \"NOUN\",\n\t\t\t\"highlighting\": \"VERB\",\n\t\t\t\"living\": \"VERB\",\n\t\t\t\"nvq\": \"NOUN\",\n\t\t\t\"murder\": \"NOUN\",\n\t\t\t\"millions\": \"NOUN\",\n\t\t\t\"mules\": \"PROPN\",\n\t\t\t\"molding\": \"NOUN\",\n\t\t\t\"reference\": \"NOUN\",\n\t\t\t\"jingle\": \"NOUN\",\n\t\t\t\"beforehand\": \"ADV\",\n\t\t\t\"dory\": \"PROPN\",\n\t\t\t\"quaddaffi\": \"PROPN\",\n\t\t\t\"paperwork\": \"NOUN\",\n\t\t\t\"selection\": \"NOUN\",\n\t\t\t\"publicized\": \"VERB\",\n\t\t\t\"essie\": \"PROPN\",\n\t\t\t\"crests\": \"NOUN\",\n\t\t\t\"mapped\": \"VERB\",\n\t\t\t\"parmigiana\": \"NOUN\",\n\t\t\t\"stuffing\": \"VERB\",\n\t\t\t\"enshrined\": \"VERB\",\n\t\t\t\"kusanagi\": \"PROPN\",\n\t\t\t\"vanish\": \"VERB\",\n\t\t\t\"stooge\": \"NOUN\",\n\t\t\t\"terrible\": \"ADJ\",\n\t\t\t\"clogs\": \"NOUN\",\n\t\t\t\"blobs\": \"NOUN\",\n\t\t\t\"artifacts\": \"NOUN\",\n\t\t\t\"grist\": \"NOUN\",\n\t\t\t\"importing\": \"VERB\",\n\t\t\t\"revisit\": \"VERB\",\n\t\t\t\"02/22/2001\": \"NUM\",\n\t\t\t\"713-646-3393\": \"NUM\",\n\t\t\t\"promising\": \"VERB\",\n\t\t\t\"breeding\": \"NOUN\",\n\t\t\t\"pashtun\": \"ADJ\",\n\t\t\t\"aggravated\": \"VERB\",\n\t\t\t\"counter-propaganda\": \"NOUN\",\n\t\t\t\"cactus\": \"NOUN\",\n\t\t\t\"vvedenskoye\": \"PROPN\",\n\t\t\t\"both\": \"CCONJ\",\n\t\t\t\"followup\": \"NOUN\",\n\t\t\t\"11th\": \"ADJ\",\n\t\t\t\"amorphous\": \"ADJ\",\n\t\t\t\"1220\": \"NUM\",\n\t\t\t\"mid-afternoon\": \"NOUN\",\n\t\t\t\"load\": \"NOUN\",\n\t\t\t\"streets\": \"NOUN\",\n\t\t\t\"swedish\": \"ADJ\",\n\t\t\t\"incarceration\": \"NOUN\",\n\t\t\t\"x.x\": \"SYM\",\n\t\t\t\"planning\": \"VERB\",\n\t\t\t\"synthetic\": \"ADJ\",\n\t\t\t\"lagoon\": \"NOUN\",\n\t\t\t\"crush\": \"NOUN\",\n\t\t\t\"proved\": \"VERB\",\n\t\t\t\"administered\": \"VERB\",\n\t\t\t\"holiest\": \"ADJ\",\n\t\t\t\"perpetuates\": \"VERB\",\n\t\t\t\"struggling\": \"VERB\",\n\t\t\t\"oilskin\": \"NOUN\",\n\t\t\t\"paws\": \"NOUN\",\n\t\t\t\"recollected\": \"VERB\",\n\t\t\t\"analyse\": \"VERB\",\n\t\t\t\"woodpeckers\": \"NOUN\",\n\t\t\t\"awhile\": \"ADV\",\n\t\t\t\"ate\": \"VERB\",\n\t\t\t\"catbird\": \"PROPN\",\n\t\t\t\"matched\": \"VERB\",\n\t\t\t\"13381\": \"NUM\",\n\t\t\t\"enlightenment\": \"NOUN\",\n\t\t\t\"bt\": \"PROPN\",\n\t\t\t\"comprised\": \"VERB\",\n\t\t\t\"katan\": \"NOUN\",\n\t\t\t\"politician\": \"NOUN\",\n\t\t\t\"meagan\": \"PROPN\",\n\t\t\t\"0.10\": \"NUM\",\n\t\t\t\"taken\": \"VERB\",\n\t\t\t\"nook\": \"PROPN\",\n\t\t\t\"gilded\": \"ADJ\",\n\t\t\t\"brand-new\": \"ADJ\",\n\t\t\t\"cruse\": \"PROPN\",\n\t\t\t\"58369\": \"NUM\",\n\t\t\t\"chaps\": \"NOUN\",\n\t\t\t\"2009\": \"NUM\",\n\t\t\t\"worshippers\": \"NOUN\",\n\t\t\t\"manhood\": \"NOUN\",\n\t\t\t\"diapers\": \"NOUN\",\n\t\t\t\"menace\": \"NOUN\",\n\t\t\t\"stringing\": \"VERB\",\n\t\t\t\"beam\": \"NOUN\",\n\t\t\t\"basic­ally\": \"ADV\",\n\t\t\t\"nasa\": \"PROPN\",\n\t\t\t\"con\": \"NOUN\",\n\t\t\t\"18\": \"NUM\",\n\t\t\t\"cpcg\": \"PROPN\",\n\t\t\t\"fortune\": \"NOUN\",\n\t\t\t\"anbar\": \"PROPN\",\n\t\t\t\"assad\": \"PROPN\",\n\t\t\t\"solutions\": \"NOUN\",\n\t\t\t\"batting\": \"NOUN\",\n\t\t\t\"m306\": \"PROPN\",\n\t\t\t\"aksa\": \"PROPN\",\n\t\t\t\"jump\": \"VERB\",\n\t\t\t\"co-ownership\": \"NOUN\",\n\t\t\t\"gates\": \"PROPN\",\n\t\t\t\"srd\": \"PROPN\",\n\t\t\t\"fillmore\": \"PROPN\",\n\t\t\t\"tuberculosis\": \"NOUN\",\n\t\t\t\"hare\": \"NOUN\",\n\t\t\t\"http://www.ontario.ca/en/information_bundle/birthcertificates/119275.html\": \"PROPN\",\n\t\t\t\"tons\": \"NOUN\",\n\t\t\t\"filmed\": \"VERB\",\n\t\t\t\"greenland\": \"PROPN\",\n\t\t\t\"buttery\": \"ADJ\",\n\t\t\t\"action\": \"NOUN\",\n\t\t\t\"caps\": \"NOUN\",\n\t\t\t\"availability\": \"NOUN\",\n\t\t\t\"electrons\": \"NOUN\",\n\t\t\t\"flavor\": \"NOUN\",\n\t\t\t\"creature\": \"NOUN\",\n\t\t\t\"07:35\": \"NUM\",\n\t\t\t\"biewener\": \"PROPN\",\n\t\t\t\"71\": \"NUM\",\n\t\t\t\"accomplish\": \"VERB\",\n\t\t\t\"graveyards\": \"NOUN\",\n\t\t\t\"porky\": \"ADJ\",\n\t\t\t\"pager\": \"NOUN\",\n\t\t\t\"frustrating\": \"ADJ\",\n\t\t\t\"repaired\": \"VERB\",\n\t\t\t\"library\": \"NOUN\",\n\t\t\t\"hafs\": \"PROPN\",\n\t\t\t\"jacket\": \"NOUN\",\n\t\t\t\"junior\": \"ADJ\",\n\t\t\t\"windier\": \"ADJ\",\n\t\t\t\"craft\": \"NOUN\",\n\t\t\t\"amoxi\": \"PROPN\",\n\t\t\t\"hyundai\": \"PROPN\",\n\t\t\t\"wrapped\": \"VERB\",\n\t\t\t\"tragic\": \"ADJ\",\n\t\t\t\"poland\": \"PROPN\",\n\t\t\t\"bon\": \"ADJ\",\n\t\t\t\"cafe\": \"NOUN\",\n\t\t\t\"pakistanis\": \"PROPN\",\n\t\t\t\"garcía\": \"PROPN\",\n\t\t\t\"defence\": \"PROPN\",\n\t\t\t\"stella\": \"PROPN\",\n\t\t\t\"agree\": \"VERB\",\n\t\t\t\"calender\": \"NOUN\",\n\t\t\t\"usi\": \"PROPN\",\n\t\t\t\"vulnerability\": \"NOUN\",\n\t\t\t\"recognising\": \"VERB\",\n\t\t\t\"battleships\": \"NOUN\",\n\t\t\t\"hooligans\": \"NOUN\",\n\t\t\t\"disposal\": \"NOUN\",\n\t\t\t\"faulty\": \"ADJ\",\n\t\t\t\"rums\": \"NOUN\",\n\t\t\t\"routed\": \"VERB\",\n\t\t\t\"tough\": \"ADJ\",\n\t\t\t\"lego\": \"PROPN\",\n\t\t\t\"novels\": \"NOUN\",\n\t\t\t\"peeling\": \"VERB\",\n\t\t\t\"indefensible\": \"ADJ\",\n\t\t\t\"finished\": \"VERB\",\n\t\t\t\"enabled\": \"VERB\",\n\t\t\t\"business\": \"NOUN\",\n\t\t\t\"contracted\": \"VERB\",\n\t\t\t\"enthusiastically\": \"ADV\",\n\t\t\t\"humid\": \"ADJ\",\n\t\t\t\"individuals\": \"NOUN\",\n\t\t\t\"incitement\": \"NOUN\",\n\t\t\t\"balcony\": \"NOUN\",\n\t\t\t\"1907\": \"NUM\",\n\t\t\t\"switchboard\": \"NOUN\",\n\t\t\t\"installation\": \"NOUN\",\n\t\t\t\"sensed\": \"VERB\",\n\t\t\t\"01/25/2002\": \"NUM\",\n\t\t\t\"universal\": \"ADJ\",\n\t\t\t\"reduces\": \"VERB\",\n\t\t\t\"enslaved\": \"VERB\",\n\t\t\t\"unwooded\": \"ADJ\",\n\t\t\t\"backing\": \"VERB\",\n\t\t\t\"zealous\": \"ADJ\",\n\t\t\t\"straps\": \"NOUN\",\n\t\t\t\"2001\": \"NUM\",\n\t\t\t\"leeds\": \"PROPN\",\n\t\t\t\"smartphone\": \"NOUN\",\n\t\t\t\"excluding\": \"VERB\",\n\t\t\t\"identical\": \"ADJ\",\n\t\t\t\"mini\": \"ADJ\",\n\t\t\t\"surfaced\": \"VERB\",\n\t\t\t\"davis\": \"PROPN\",\n\t\t\t\"accelerated\": \"VERB\",\n\t\t\t\"jar\": \"NOUN\",\n\t\t\t\"recruiting\": \"NOUN\",\n\t\t\t\"looked\": \"VERB\",\n\t\t\t\"armament\": \"NOUN\",\n\t\t\t\"cultures\": \"NOUN\",\n\t\t\t\"victor\": \"PROPN\",\n\t\t\t\"unanticipated\": \"ADJ\",\n\t\t\t\"ubiquitousness\": \"NOUN\",\n\t\t\t\"412\": \"NUM\",\n\t\t\t\"carless\": \"ADJ\",\n\t\t\t\"www.flag.govt.nz\": \"PROPN\",\n\t\t\t\"hirsohima\": \"PROPN\",\n\t\t\t\"pipe\": \"NOUN\",\n\t\t\t\"debt\": \"NOUN\",\n\t\t\t\"filling\": \"VERB\",\n\t\t\t\"opposites\": \"NOUN\",\n\t\t\t\"69,000\": \"NUM\",\n\t\t\t\"masonic\": \"ADJ\",\n\t\t\t\"squares\": \"NOUN\",\n\t\t\t\"*\": \"PUNCT\",\n\t\t\t\"cds\": \"NOUN\",\n\t\t\t\"interpretations\": \"NOUN\",\n\t\t\t\"determiner\": \"NOUN\",\n\t\t\t\"scrape\": \"VERB\",\n\t\t\t\"threads\": \"NOUN\",\n\t\t\t\"obesity\": \"NOUN\",\n\t\t\t\"lofts\": \"NOUN\",\n\t\t\t\"http://www.wikihow.com/wikihow:carbon-neutral\": \"PROPN\",\n\t\t\t\"antiseptic\": \"NOUN\",\n\t\t\t\"nepool\": \"PROPN\",\n\t\t\t\"wht\": \"PRON\",\n\t\t\t\"lamp\": \"NOUN\",\n\t\t\t\"4:50\": \"NUM\",\n\t\t\t\"handcuffs\": \"NOUN\",\n\t\t\t\"provision\": \"NOUN\",\n\t\t\t\"interception\": \"NOUN\",\n\t\t\t\"blouses\": \"NOUN\",\n\t\t\t\"yoshida\": \"PROPN\",\n\t\t\t\"hudson\": \"PROPN\",\n\t\t\t\"0590883899\": \"NUM\",\n\t\t\t\"renegade\": \"ADJ\",\n\t\t\t\"legitimated\": \"VERB\",\n\t\t\t\"governor\": \"NOUN\",\n\t\t\t\"illegals\": \"NOUN\",\n\t\t\t\"wharf\": \"NOUN\",\n\t\t\t\"wajiha\": \"PROPN\",\n\t\t\t\"hierarchy\": \"NOUN\",\n\t\t\t\"duct\": \"PROPN\",\n\t\t\t\"perp\": \"NOUN\",\n\t\t\t\"tenacity\": \"NOUN\",\n\t\t\t\"bestseller\": \"NOUN\",\n\t\t\t\"lopez\": \"PROPN\",\n\t\t\t\"postdoctoral\": \"ADJ\",\n\t\t\t\"ruining\": \"VERB\",\n\t\t\t\"10:57:32\": \"NUM\",\n\t\t\t\"netherlands\": \"PROPN\",\n\t\t\t\"oils\": \"NOUN\",\n\t\t\t\"belittle\": \"VERB\",\n\t\t\t\"night\": \"NOUN\",\n\t\t\t\"cervantes\": \"PROPN\",\n\t\t\t\"principal\": \"ADJ\",\n\t\t\t\"grandfather\": \"NOUN\",\n\t\t\t\"composition\": \"NOUN\",\n\t\t\t\"aspiring\": \"VERB\",\n\t\t\t\"hephaestus\": \"PROPN\",\n\t\t\t\"meds\": \"NOUN\",\n\t\t\t\"frontpage\": \"PROPN\",\n\t\t\t\"adds\": \"VERB\",\n\t\t\t\"almost\": \"ADV\",\n\t\t\t\"rescoped\": \"VERB\",\n\t\t\t\"reigon\": \"NOUN\",\n\t\t\t\"resistance\": \"NOUN\",\n\t\t\t\"hume\": \"PROPN\",\n\t\t\t\"teammate\": \"NOUN\",\n\t\t\t\"mann\": \"PROPN\",\n\t\t\t\"collaborated\": \"VERB\",\n\t\t\t\"lens\": \"NOUN\",\n\t\t\t\"starts\": \"VERB\",\n\t\t\t\"mcgovern\": \"PROPN\",\n\t\t\t\"purposes\": \"NOUN\",\n\t\t\t\"attacks\": \"NOUN\",\n\t\t\t\"fundamental\": \"ADJ\",\n\t\t\t\"gravitational\": \"ADJ\",\n\t\t\t\"mandel\": \"PROPN\",\n\t\t\t\"3,202.61\": \"NUM\",\n\t\t\t\"frontal\": \"ADV\",\n\t\t\t\"jack\": \"PROPN\",\n\t\t\t\"eu/us\": \"PROPN\",\n\t\t\t\"perfection\": \"NOUN\",\n\t\t\t\"moths\": \"NOUN\",\n\t\t\t\"standings\": \"NOUN\",\n\t\t\t\"pointe\": \"PROPN\",\n\t\t\t\"lighting\": \"NOUN\",\n\t\t\t\"repositioning\": \"VERB\",\n\t\t\t\"m.sc.\": \"PROPN\",\n\t\t\t\"propane\": \"NOUN\",\n\t\t\t\"buwei\": \"PROPN\",\n\t\t\t\"porch\": \"NOUN\",\n\t\t\t\"arsenals\": \"NOUN\",\n\t\t\t\",\": \"PUNCT\",\n\t\t\t\"mindedness\": \"NOUN\",\n\t\t\t\"arising\": \"VERB\",\n\t\t\t\"internalised\": \"VERB\",\n\t\t\t\"bredders\": \"NOUN\",\n\t\t\t\"joule\": \"PROPN\",\n\t\t\t\"5\": \"NUM\",\n\t\t\t\"gimmicky\": \"ADJ\",\n\t\t\t\"contest\": \"NOUN\",\n\t\t\t\"parker\": \"PROPN\",\n\t\t\t\"bradenton\": \"PROPN\",\n\t\t\t\"shaikh\": \"PROPN\",\n\t\t\t\"images\": \"NOUN\",\n\t\t\t\"1797\": \"NUM\",\n\t\t\t\"dj's\": \"NOUN\",\n\t\t\t\"dpa\": \"PROPN\",\n\t\t\t\"block\": \"NOUN\",\n\t\t\t\"heroes\": \"NOUN\",\n\t\t\t\"36\": \"NUM\",\n\t\t\t\"guitars\": \"NOUN\",\n\t\t\t\"unpredictable\": \"ADJ\",\n\t\t\t\"40,000\": \"NUM\",\n\t\t\t\"phenotypic\": \"ADJ\",\n\t\t\t\"belzer\": \"NOUN\",\n\t\t\t\"daisy\": \"NOUN\",\n\t\t\t\"spontaneity\": \"NOUN\",\n\t\t\t\"falling\": \"VERB\",\n\t\t\t\"paglino\": \"PROPN\",\n\t\t\t\"accumulate\": \"VERB\",\n\t\t\t\"jorge\": \"PROPN\",\n\t\t\t\"ages\": \"NOUN\",\n\t\t\t\"fairy\": \"NOUN\",\n\t\t\t\"akma\": \"PROPN\",\n\t\t\t\"newborn\": \"ADJ\",\n\t\t\t\"galen\": \"PROPN\",\n\t\t\t\"12:33\": \"NUM\",\n\t\t\t\"leavy\": \"PROPN\",\n\t\t\t\"lolland\": \"PROPN\",\n\t\t\t\"sample.doc\": \"NOUN\",\n\t\t\t\"archilochus\": \"PROPN\",\n\t\t\t\"hikmetar\": \"PROPN\",\n\t\t\t\"punctual\": \"ADJ\",\n\t\t\t\"nationally\": \"ADV\",\n\t\t\t\"hurried\": \"VERB\",\n\t\t\t\"coned\": \"PROPN\",\n\t\t\t\"’re\": \"AUX\",\n\t\t\t\"bravely\": \"ADV\",\n\t\t\t\"names\": \"NOUN\",\n\t\t\t\"primaries\": \"NOUN\",\n\t\t\t\"grand\": \"ADJ\",\n\t\t\t\"expressions\": \"NOUN\",\n\t\t\t\"pleadings\": \"NOUN\",\n\t\t\t\"gustafon\": \"PROPN\",\n\t\t\t\"quashed\": \"VERB\",\n\t\t\t\"wardrobe\": \"NOUN\",\n\t\t\t\"emails\": \"NOUN\",\n\t\t\t\"coordinator's\": \"NOUN\",\n\t\t\t\"engels\": \"PROPN\",\n\t\t\t\"pests\": \"NOUN\",\n\t\t\t\"waxman\": \"PROPN\",\n\t\t\t\"twante\": \"PROPN\",\n\t\t\t\"matures\": \"VERB\",\n\t\t\t\"lawless\": \"ADJ\",\n\t\t\t\"store\": \"NOUN\",\n\t\t\t\"withheld\": \"VERB\",\n\t\t\t\"trials\": \"NOUN\",\n\t\t\t\"multiethnic\": \"ADJ\",\n\t\t\t\"neeeeeeeeeverrrr\": \"ADV\",\n\t\t\t\"hiss\": \"VERB\",\n\t\t\t\"positions\": \"NOUN\",\n\t\t\t\"hubs\": \"NOUN\",\n\t\t\t\"brooms\": \"NOUN\",\n\t\t\t\"dhaka\": \"PROPN\",\n\t\t\t\"faris\": \"PROPN\",\n\t\t\t\"certification\": \"NOUN\",\n\t\t\t\"ranch\": \"NOUN\",\n\t\t\t\"re-code\": \"VERB\",\n\t\t\t\"delegate\": \"NOUN\",\n\t\t\t\"__________________________________________________\": \"SYM\",\n\t\t\t\"mock\": \"ADJ\",\n\t\t\t\"conducted\": \"VERB\",\n\t\t\t\"karla\": \"PROPN\",\n\t\t\t\"dislike\": \"VERB\",\n\t\t\t\"eco\": \"NOUN\",\n\t\t\t\"interviewer\": \"NOUN\",\n\t\t\t\"bethesda\": \"PROPN\",\n\t\t\t\"wiring\": \"NOUN\",\n\t\t\t\"kilometres\": \"NOUN\",\n\t\t\t\"distortion\": \"NOUN\",\n\t\t\t\"partners\": \"NOUN\",\n\t\t\t\"futurism\": \"NOUN\",\n\t\t\t\"mecole\": \"PROPN\",\n\t\t\t\"pronounced\": \"VERB\",\n\t\t\t\"stocks\": \"NOUN\",\n\t\t\t\"muzzles\": \"NOUN\",\n\t\t\t\"shortest\": \"ADJ\",\n\t\t\t\"defectors\": \"NOUN\",\n\t\t\t\"powerhead\": \"NOUN\",\n\t\t\t\"vary\": \"VERB\",\n\t\t\t\"dropping\": \"VERB\",\n\t\t\t\"basis\": \"NOUN\",\n\t\t\t\"ltake\": \"VERB\",\n\t\t\t\"knick\": \"NOUN\",\n\t\t\t\"laminated\": \"VERB\",\n\t\t\t\"duh\": \"INTJ\",\n\t\t\t\"discoveries\": \"NOUN\",\n\t\t\t\"lazily\": \"ADV\",\n\t\t\t\"then\": \"ADV\",\n\t\t\t\"trays\": \"NOUN\",\n\t\t\t\"canoes\": \"NOUN\",\n\t\t\t\"armstrong\": \"PROPN\",\n\t\t\t\"expansive\": \"ADJ\",\n\t\t\t\"bars\": \"NOUN\",\n\t\t\t\"juice\": \"NOUN\",\n\t\t\t\"democrats\": \"PROPN\",\n\t\t\t\"continuously\": \"ADV\",\n\t\t\t\"desecrated\": \"VERB\",\n\t\t\t\"heat\": \"NOUN\",\n\t\t\t\"impotent\": \"ADJ\",\n\t\t\t\"wen\": \"PROPN\",\n\t\t\t\"computational\": \"ADJ\",\n\t\t\t\"snorted\": \"VERB\",\n\t\t\t\"trajectory\": \"NOUN\",\n\t\t\t\"grinning\": \"VERB\",\n\t\t\t\"deploying\": \"VERB\",\n\t\t\t\"hurrah\": \"INTJ\",\n\t\t\t\"navigating\": \"VERB\",\n\t\t\t\"speeds\": \"NOUN\",\n\t\t\t\"suprematist\": \"NOUN\",\n\t\t\t\"nfl\": \"PROPN\",\n\t\t\t\"irrigation\": \"NOUN\",\n\t\t\t\"43.6\": \"NUM\",\n\t\t\t\"blogging\": \"VERB\",\n\t\t\t\"vinegar\": \"NOUN\",\n\t\t\t\"unclear\": \"ADJ\",\n\t\t\t\"unzipped\": \"VERB\",\n\t\t\t\"incited\": \"VERB\",\n\t\t\t\"legalizing\": \"VERB\",\n\t\t\t\"representatives\": \"NOUN\",\n\t\t\t\"divinity\": \"NOUN\",\n\t\t\t\"bioweaponeer\": \"NOUN\",\n\t\t\t\"shy\": \"ADJ\",\n\t\t\t\"68,500\": \"NUM\",\n\t\t\t\"militarize\": \"VERB\",\n\t\t\t\"sidenote\": \"NOUN\",\n\t\t\t\"levy\": \"VERB\",\n\t\t\t\"accent\": \"NOUN\",\n\t\t\t\"dragged\": \"VERB\",\n\t\t\t\"qadoos\": \"PROPN\",\n\t\t\t\"monday\": \"PROPN\",\n\t\t\t\"belonging\": \"VERB\",\n\t\t\t\"looting\": \"NOUN\",\n\t\t\t\"fainting\": \"NOUN\",\n\t\t\t\"prescribe\": \"VERB\",\n\t\t\t\"mimic\": \"VERB\",\n\t\t\t\"smoked\": \"VERB\",\n\t\t\t\"clerk\": \"NOUN\",\n\t\t\t\"garlic\": \"NOUN\",\n\t\t\t\"pancake\": \"NOUN\",\n\t\t\t\"alcoholic\": \"NOUN\",\n\t\t\t\"5.30\": \"NUM\",\n\t\t\t\"durham\": \"PROPN\",\n\t\t\t\"nevis\": \"PROPN\",\n\t\t\t\"scalzo\": \"PROPN\",\n\t\t\t\"benefit\": \"NOUN\",\n\t\t\t\"tidbit\": \"NOUN\",\n\t\t\t\"salem\": \"PROPN\",\n\t\t\t\"cw\": \"PROPN\",\n\t\t\t\"501st\": \"ADJ\",\n\t\t\t\"poked\": \"VERB\",\n\t\t\t\"khalid\": \"PROPN\",\n\t\t\t\"tristan\": \"PROPN\",\n\t\t\t\"soaking\": \"VERB\",\n\t\t\t\"actually\": \"ADV\",\n\t\t\t\"lazers\": \"NOUN\",\n\t\t\t\"undue\": \"ADJ\",\n\t\t\t\"steinberg\": \"PROPN\",\n\t\t\t\"scotland\": \"PROPN\",\n\t\t\t\"guild\": \"PROPN\",\n\t\t\t\"dozen\": \"NUM\",\n\t\t\t\"russian\": \"ADJ\",\n\t\t\t\"wishing\": \"VERB\",\n\t\t\t\"noticing\": \"VERB\",\n\t\t\t\"bulge\": \"VERB\",\n\t\t\t\"creator\": \"NOUN\",\n\t\t\t\"simpering\": \"ADJ\",\n\t\t\t\"rocky\": \"ADJ\",\n\t\t\t\"interviewers\": \"NOUN\",\n\t\t\t\"11/2\": \"NUM\",\n\t\t\t\"mechanicly\": \"ADV\",\n\t\t\t\"jobsite\": \"NOUN\",\n\t\t\t\"idiots\": \"NOUN\",\n\t\t\t\"guards\": \"NOUN\",\n\t\t\t\"reimbursed\": \"VERB\",\n\t\t\t\"mcveigh\": \"PROPN\",\n\t\t\t\"agglomeration\": \"NOUN\",\n\t\t\t\"tet\": \"PROPN\",\n\t\t\t\"nawaz\": \"PROPN\",\n\t\t\t\"nat\": \"ADJ\",\n\t\t\t\"uneven\": \"ADJ\",\n\t\t\t\"mimicry\": \"NOUN\",\n\t\t\t\"dreams\": \"NOUN\",\n\t\t\t\"monasteries\": \"NOUN\",\n\t\t\t\"1710\": \"NUM\",\n\t\t\t\"prolong\": \"VERB\",\n\t\t\t\"satanism\": \"PROPN\",\n\t\t\t\"nivine\": \"PROPN\",\n\t\t\t\"propelled\": \"VERB\",\n\t\t\t\"razak\": \"PROPN\",\n\t\t\t\"639,000\": \"NUM\",\n\t\t\t\"jewel\": \"NOUN\",\n\t\t\t\"surest\": \"ADJ\",\n\t\t\t\"pollutants\": \"NOUN\",\n\t\t\t\"nicole\": \"PROPN\",\n\t\t\t\"revisions\": \"NOUN\",\n\t\t\t\"emissivity\": \"NOUN\",\n\t\t\t\"christiane\": \"PROPN\",\n\t\t\t\"violation\": \"NOUN\",\n\t\t\t\"ratification\": \"NOUN\",\n\t\t\t\"unhesitantly\": \"ADV\",\n\t\t\t\"builders\": \"PROPN\",\n\t\t\t\"+1\": \"NUM\",\n\t\t\t\"skush@swbell.net\": \"PROPN\",\n\t\t\t\"storefronts\": \"NOUN\",\n\t\t\t\"kg\": \"NOUN\",\n\t\t\t\"1996\": \"NUM\",\n\t\t\t\"altitude\": \"NOUN\",\n\t\t\t\"grether\": \"PROPN\",\n\t\t\t\"authors\": \"NOUN\",\n\t\t\t\"bend\": \"PROPN\",\n\t\t\t\"choices\": \"NOUN\",\n\t\t\t\"state\": \"NOUN\",\n\t\t\t\"peaking\": \"VERB\",\n\t\t\t\"longshoreman\": \"NOUN\",\n\t\t\t\"tåsinge\": \"PROPN\",\n\t\t\t\"azerbaijan\": \"PROPN\",\n\t\t\t\"dioxide\": \"NOUN\",\n\t\t\t\"barry\": \"PROPN\",\n\t\t\t\"transplants\": \"NOUN\",\n\t\t\t\"http://www.un.org/ha/chernobyl/\": \"PROPN\",\n\t\t\t\"markedly\": \"ADV\",\n\t\t\t\"richly\": \"ADV\",\n\t\t\t\"humility\": \"NOUN\",\n\t\t\t\"09819602175\": \"NUM\",\n\t\t\t\"liquidation\": \"NOUN\",\n\t\t\t\"yowled\": \"VERB\",\n\t\t\t\"arco\": \"PROPN\",\n\t\t\t\"capped\": \"VERB\",\n\t\t\t\"ascended\": \"VERB\",\n\t\t\t\"reception\": \"NOUN\",\n\t\t\t\"relleno\": \"NOUN\",\n\t\t\t\"scraping\": \"VERB\",\n\t\t\t\"submarines\": \"NOUN\",\n\t\t\t\"prince\": \"PROPN\",\n\t\t\t\"sjöstedt\": \"PROPN\",\n\t\t\t\"quiet\": \"ADJ\",\n\t\t\t\"moment\": \"NOUN\",\n\t\t\t\"erupted\": \"VERB\",\n\t\t\t\"clink\": \"NOUN\",\n\t\t\t\"'09\": \"NUM\",\n\t\t\t\"meaning\": \"NOUN\",\n\t\t\t\"944-6800\": \"NUM\",\n\t\t\t\"pickups\": \"NOUN\",\n\t\t\t\"eclipse\": \"NOUN\",\n\t\t\t\"confidante\": \"NOUN\",\n\t\t\t\"macadam\": \"NOUN\",\n\t\t\t\"receptive\": \"ADJ\",\n\t\t\t\"childcare\": \"NOUN\",\n\t\t\t\"storm\": \"NOUN\",\n\t\t\t\"folding\": \"VERB\",\n\t\t\t\"responders\": \"NOUN\",\n\t\t\t\"catholics\": \"PROPN\",\n\t\t\t\"elon\": \"PROPN\",\n\t\t\t\"kissed\": \"VERB\",\n\t\t\t\"drops\": \"NOUN\",\n\t\t\t\"sylvia\": \"PROPN\",\n\t\t\t\"miranda\": \"PROPN\",\n\t\t\t\"donuts\": \"NOUN\",\n\t\t\t\"forum\": \"NOUN\",\n\t\t\t\"cloth\": \"NOUN\",\n\t\t\t\"creams\": \"NOUN\",\n\t\t\t\"hindrance\": \"NOUN\",\n\t\t\t\"bro\": \"NOUN\",\n\t\t\t\"trusted\": \"VERB\",\n\t\t\t\"youth\": \"NOUN\",\n\t\t\t\"hauls\": \"VERB\",\n\t\t\t\"inflating\": \"VERB\",\n\t\t\t\"bohéme\": \"NOUN\",\n\t\t\t\"shields\": \"NOUN\",\n\t\t\t\"classroom\": \"NOUN\",\n\t\t\t\"clause\": \"NOUN\",\n\t\t\t\"halls\": \"NOUN\",\n\t\t\t\"caged\": \"VERB\",\n\t\t\t\"lonely\": \"ADJ\",\n\t\t\t\"indiana\": \"PROPN\",\n\t\t\t\"farriers\": \"NOUN\",\n\t\t\t\"lump\": \"NOUN\",\n\t\t\t\"litterbox\": \"NOUN\",\n\t\t\t\"cheerful\": \"ADJ\",\n\t\t\t\"hamid\": \"PROPN\",\n\t\t\t\"emblem\": \"NOUN\",\n\t\t\t\"neutral\": \"ADJ\",\n\t\t\t\"cited\": \"VERB\",\n\t\t\t\"drivel\": \"NOUN\",\n\t\t\t\"grandma\": \"NOUN\",\n\t\t\t\"episode\": \"NOUN\",\n\t\t\t\"bisected\": \"VERB\",\n\t\t\t\"caprese\": \"PROPN\",\n\t\t\t\"intercepted\": \"VERB\",\n\t\t\t\"conveniences\": \"NOUN\",\n\t\t\t\"cucumbers\": \"NOUN\",\n\t\t\t\"della\": \"PROPN\",\n\t\t\t\"1918\": \"NUM\",\n\t\t\t\"patterns\": \"NOUN\",\n\t\t\t\"peters\": \"PROPN\",\n\t\t\t\"weeds\": \"NOUN\",\n\t\t\t\"anticipates\": \"VERB\",\n\t\t\t\"company's\": \"NOUN\",\n\t\t\t\"conference\": \"NOUN\",\n\t\t\t\"twenty-six\": \"NUM\",\n\t\t\t\"p.\": \"NOUN\",\n\t\t\t\"hastily\": \"ADV\",\n\t\t\t\"cartoon\": \"NOUN\",\n\t\t\t\"ensured\": \"VERB\",\n\t\t\t\"depopulated\": \"VERB\",\n\t\t\t\"prospective\": \"ADJ\",\n\t\t\t\"virile\": \"ADJ\",\n\t\t\t\"glimmering\": \"VERB\",\n\t\t\t\"lotus\": \"NOUN\",\n\t\t\t\"grandmothers\": \"NOUN\",\n\t\t\t\"horrible\": \"ADJ\",\n\t\t\t\"petite\": \"PROPN\",\n\t\t\t\"foreigner\": \"NOUN\",\n\t\t\t\"inferences\": \"NOUN\",\n\t\t\t\"special\": \"ADJ\",\n\t\t\t\"gringotts\": \"PROPN\",\n\t\t\t\"ca.\": \"ADV\",\n\t\t\t\"gathering\": \"VERB\",\n\t\t\t\"toward\": \"ADP\",\n\t\t\t\"shipping\": \"NOUN\",\n\t\t\t\"textbook\": \"NOUN\",\n\t\t\t\"design-time\": \"NOUN\",\n\t\t\t\"conan\": \"PROPN\",\n\t\t\t\"compared\": \"VERB\",\n\t\t\t\"skyline\": \"NOUN\",\n\t\t\t\"7:40\": \"NUM\",\n\t\t\t\"47,500\": \"NUM\",\n\t\t\t\"coordinated\": \"VERB\",\n\t\t\t\"?\": \"PUNCT\",\n\t\t\t\"mba\": \"NOUN\",\n\t\t\t\"semiautomatic\": \"ADJ\",\n\t\t\t\"square\": \"ADJ\",\n\t\t\t\"neiman\": \"PROPN\",\n\t\t\t\"developmentally\": \"ADV\",\n\t\t\t\"processors\": \"NOUN\",\n\t\t\t\"jafari\": \"PROPN\",\n\t\t\t\"pitcher\": \"NOUN\",\n\t\t\t\"alcohol\": \"NOUN\",\n\t\t\t\"captivated\": \"ADJ\",\n\t\t\t\"over-generalizations\": \"NOUN\",\n\t\t\t\"muff\": \"NOUN\",\n\t\t\t\"lemon\": \"NOUN\",\n\t\t\t\"deptford\": \"PROPN\",\n\t\t\t\"oppressive\": \"ADJ\",\n\t\t\t\"gained\": \"VERB\",\n\t\t\t\"preparatory\": \"ADJ\",\n\t\t\t\"bahai\": \"PROPN\",\n\t\t\t\"respecting\": \"VERB\",\n\t\t\t\"googled\": \"VERB\",\n\t\t\t\"amazon\": \"PROPN\",\n\t\t\t\"emotionally\": \"ADV\",\n\t\t\t\"papacy\": \"PROPN\",\n\t\t\t\"screens\": \"NOUN\",\n\t\t\t\"models\": \"NOUN\",\n\t\t\t\"varie$\": \"VERB\",\n\t\t\t\"congo\": \"PROPN\",\n\t\t\t\"drum\": \"VERB\",\n\t\t\t\"fy05\": \"NOUN\",\n\t\t\t\"diminishes\": \"VERB\",\n\t\t\t\"deb\": \"PROPN\",\n\t\t\t\"sacre\": \"PROPN\",\n\t\t\t\"epistemologies\": \"NOUN\",\n\t\t\t\"judge\": \"NOUN\",\n\t\t\t\"discussions\": \"NOUN\",\n\t\t\t\"charities\": \"NOUN\",\n\t\t\t\"washing\": \"VERB\",\n\t\t\t\"panjsheri\": \"ADJ\",\n\t\t\t\"farmers\": \"NOUN\",\n\t\t\t\"low\": \"ADJ\",\n\t\t\t\"newton\": \"PROPN\",\n\t\t\t\"pawtucket\": \"PROPN\",\n\t\t\t\"unarguable\": \"ADV\",\n\t\t\t\"predisposition\": \"NOUN\",\n\t\t\t\"prefect\": \"NOUN\",\n\t\t\t\"intolerant\": \"ADJ\",\n\t\t\t\"malaysia\": \"PROPN\",\n\t\t\t\"spaced\": \"VERB\",\n\t\t\t\"11:35\": \"NUM\",\n\t\t\t\"rebuttal\": \"NOUN\",\n\t\t\t\"forbid\": \"VERB\",\n\t\t\t\"11/28/2000\": \"NUM\",\n\t\t\t\"fading\": \"VERB\",\n\t\t\t\"dennis\": \"PROPN\",\n\t\t\t\"namsan\": \"PROPN\",\n\t\t\t\"actualy\": \"ADV\",\n\t\t\t\"masking\": \"NOUN\",\n\t\t\t\"scba\": \"PROPN\",\n\t\t\t\"fiction\": \"NOUN\",\n\t\t\t\"comparability\": \"NOUN\",\n\t\t\t\"song\": \"NOUN\",\n\t\t\t\"princess\": \"NOUN\",\n\t\t\t\"naval\": \"ADJ\",\n\t\t\t\"hitwise\": \"PROPN\",\n\t\t\t\"sac-d\": \"PROPN\",\n\t\t\t\"johnette\": \"PROPN\",\n\t\t\t\"hugged\": \"VERB\",\n\t\t\t\"ed\": \"PROPN\",\n\t\t\t\"multiplayer\": \"NOUN\",\n\t\t\t\"hindsight\": \"NOUN\",\n\t\t\t\"electoral\": \"ADJ\",\n\t\t\t\"1.5\": \"NUM\",\n\t\t\t\"pelvic\": \"ADJ\",\n\t\t\t\"podcast\": \"NOUN\",\n\t\t\t\"seems\": \"VERB\",\n\t\t\t\"waterfront\": \"NOUN\",\n\t\t\t\"thundering\": \"VERB\",\n\t\t\t\"imperialism\": \"NOUN\",\n\t\t\t\"bobby\": \"PROPN\",\n\t\t\t\"dah\": \"INTJ\",\n\t\t\t\"gash\": \"NOUN\",\n\t\t\t\"rio\": \"PROPN\",\n\t\t\t\"feels\": \"VERB\",\n\t\t\t\"http://www.equinecaninefeline.com/catalog/savic-freddy-cage-free-delivery-p-6750.html\": \"PROPN\",\n\t\t\t\"understanding\": \"NOUN\",\n\t\t\t\"appel\": \"PROPN\",\n\t\t\t\"unquestionably\": \"ADV\",\n\t\t\t\"shrunk\": \"VERB\",\n\t\t\t\"spoke\": \"VERB\",\n\t\t\t\"dealbench\": \"PROPN\",\n\t\t\t\"insight\": \"NOUN\",\n\t\t\t\"outfits\": \"NOUN\",\n\t\t\t\"chevy\": \"PROPN\",\n\t\t\t\"cable\": \"NOUN\",\n\t\t\t\"costumed\": \"VERB\",\n\t\t\t\"nellie\": \"PROPN\",\n\t\t\t\"purely\": \"ADV\",\n\t\t\t\"lugubrious\": \"ADJ\",\n\t\t\t\"gallery\": \"NOUN\",\n\t\t\t\"caribbean\": \"PROPN\",\n\t\t\t\"retreated\": \"VERB\",\n\t\t\t\"foulkesstraat\": \"PROPN\",\n\t\t\t\"displaying\": \"VERB\",\n\t\t\t\"semester\": \"NOUN\",\n\t\t\t\"tile\": \"NOUN\",\n\t\t\t\"construe\": \"VERB\",\n\t\t\t\"”\": \"PUNCT\",\n\t\t\t\"spel\": \"VERB\",\n\t\t\t\"bedroom\": \"NOUN\",\n\t\t\t\"discusses\": \"VERB\",\n\t\t\t\"hogwarts\": \"PROPN\",\n\t\t\t\"jaunty\": \"ADJ\",\n\t\t\t\"civilization\": \"NOUN\",\n\t\t\t\"chaotic\": \"ADJ\",\n\t\t\t\"decaying\": \"ADJ\",\n\t\t\t\"supercuts\": \"PROPN\",\n\t\t\t\"telegraphic\": \"ADJ\",\n\t\t\t\"http://www.thetruthseeker.co.uk/article.asp?id=4503\": \"PROPN\",\n\t\t\t\"jim\": \"PROPN\",\n\t\t\t\"stove\": \"NOUN\",\n\t\t\t\"epistemological\": \"ADJ\",\n\t\t\t\"tha-\": \"INTJ\",\n\t\t\t\"ebullient\": \"ADJ\",\n\t\t\t\"noisy\": \"ADJ\",\n\t\t\t\"kat\": \"PROPN\",\n\t\t\t\"florence\": \"PROPN\",\n\t\t\t\"bogging\": \"VERB\",\n\t\t\t\"rival\": \"NOUN\",\n\t\t\t\"qualified\": \"ADJ\",\n\t\t\t\"bonaire\": \"PROPN\",\n\t\t\t\"extracts\": \"PROPN\",\n\t\t\t\"1859\": \"NUM\",\n\t\t\t\"dispersion\": \"NOUN\",\n\t\t\t\"typology\": \"NOUN\",\n\t\t\t\"1890\": \"NUM\",\n\t\t\t\"1801\": \"NUM\",\n\t\t\t\"sabunji\": \"PROPN\",\n\t\t\t\"realization\": \"NOUN\",\n\t\t\t\"elite\": \"ADJ\",\n\t\t\t\"khaki\": \"NOUN\",\n\t\t\t\"raffle\": \"NOUN\",\n\t\t\t\"indicative\": \"ADJ\",\n\t\t\t\"monologue\": \"NOUN\",\n\t\t\t\"ottle-\": \"ADJ\",\n\t\t\t\"index\": \"NOUN\",\n\t\t\t\"biolab\": \"NOUN\",\n\t\t\t\"haim\": \"PROPN\",\n\t\t\t\"technique\": \"NOUN\",\n\t\t\t\"noise\": \"NOUN\",\n\t\t\t\"fabo\": \"PROPN\",\n\t\t\t\"adjustable\": \"ADJ\",\n\t\t\t\"knocks\": \"NOUN\",\n\t\t\t\"eusebius\": \"PROPN\",\n\t\t\t\"spinoff\": \"NOUN\",\n\t\t\t\"dinghies\": \"PROPN\",\n\t\t\t\"kroeker\": \"PROPN\",\n\t\t\t\"payers\": \"NOUN\",\n\t\t\t\"soldiers\": \"NOUN\",\n\t\t\t\"decoud\": \"PROPN\",\n\t\t\t\"clamouring\": \"VERB\",\n\t\t\t\"edward\": \"PROPN\",\n\t\t\t\"eastern\": \"ADJ\",\n\t\t\t\"cellular\": \"ADJ\",\n\t\t\t\"financial\": \"ADJ\",\n\t\t\t\"spaces\": \"NOUN\",\n\t\t\t\"pandolfi\": \"PROPN\",\n\t\t\t\"whereas\": \"SCONJ\",\n\t\t\t\"transformation\": \"NOUN\",\n\t\t\t\"reluctance\": \"NOUN\",\n\t\t\t\"unenlightened\": \"ADJ\",\n\t\t\t\"workmanship\": \"NOUN\",\n\t\t\t\"1973\": \"NUM\",\n\t\t\t\"descriptive\": \"ADJ\",\n\t\t\t\"grrrrrrrreeeaaat\": \"ADJ\",\n\t\t\t\"bonino\": \"PROPN\",\n\t\t\t\"wet\": \"ADJ\",\n\t\t\t\"inside\": \"ADV\",\n\t\t\t\"clash\": \"VERB\",\n\t\t\t\"kitts\": \"PROPN\",\n\t\t\t\"criticising\": \"VERB\",\n\t\t\t\"shrugged\": \"VERB\",\n\t\t\t\"financed\": \"VERB\",\n\t\t\t\"console\": \"NOUN\",\n\t\t\t\"scheduled\": \"VERB\",\n\t\t\t\"notifications\": \"NOUN\",\n\t\t\t\"shish\": \"NOUN\",\n\t\t\t\"enlargement\": \"NOUN\",\n\t\t\t\"highrise\": \"ADJ\",\n\t\t\t\"oblivion\": \"PROPN\",\n\t\t\t\"dancing\": \"VERB\",\n\t\t\t\"quad\": \"NOUN\",\n\t\t\t\"16.3\": \"NUM\",\n\t\t\t\"similarities\": \"NOUN\",\n\t\t\t\"minimum\": \"NOUN\",\n\t\t\t\"slammed\": \"VERB\",\n\t\t\t\"evil-smelling\": \"ADJ\",\n\t\t\t\"self-transformation\": \"NOUN\",\n\t\t\t\"damaged\": \"VERB\",\n\t\t\t\"saudi\": \"ADJ\",\n\t\t\t\"1,183\": \"NUM\",\n\t\t\t\"cayenne\": \"NOUN\",\n\t\t\t\"colours\": \"NOUN\",\n\t\t\t\"joachim\": \"PROPN\",\n\t\t\t\"perpendicular\": \"ADJ\",\n\t\t\t\"proportion\": \"NOUN\",\n\t\t\t\"affronted\": \"VERB\",\n\t\t\t\"institutionalism\": \"NOUN\",\n\t\t\t\"red-headed\": \"ADJ\",\n\t\t\t\"negligent\": \"ADJ\",\n\t\t\t\"weak-eyed\": \"ADJ\",\n\t\t\t\"puffs\": \"NOUN\",\n\t\t\t\"chong\": \"PROPN\",\n\t\t\t\"chop\": \"NOUN\",\n\t\t\t\"procession\": \"NOUN\",\n\t\t\t\"merit\": \"NOUN\",\n\t\t\t\"favours\": \"NOUN\",\n\t\t\t\"erebus\": \"PROPN\",\n\t\t\t\"degeneration\": \"PROPN\",\n\t\t\t\"motion\": \"NOUN\",\n\t\t\t\"streamline\": \"VERB\",\n\t\t\t\"fused\": \"VERB\",\n\t\t\t\"maritain\": \"PROPN\",\n\t\t\t\"lambala-speaking\": \"ADJ\",\n\t\t\t\"nguyen\": \"PROPN\",\n\t\t\t\"asymptotic\": \"ADJ\",\n\t\t\t\"93\": \"NUM\",\n\t\t\t\"scan\": \"NOUN\",\n\t\t\t\"polluting\": \"VERB\",\n\t\t\t\"trademarked\": \"VERB\",\n\t\t\t\"isolation\": \"NOUN\",\n\t\t\t\"beetles\": \"NOUN\",\n\t\t\t\"anticipate\": \"VERB\",\n\t\t\t\"iceland\": \"PROPN\",\n\t\t\t\"boulder\": \"PROPN\",\n\t\t\t\"south\": \"PROPN\",\n\t\t\t\"susan\": \"PROPN\",\n\t\t\t\"powell\": \"PROPN\",\n\t\t\t\"vulnerable\": \"ADJ\",\n\t\t\t\"jiu\": \"NOUN\",\n\t\t\t\"loses\": \"VERB\",\n\t\t\t\"therefore\": \"ADV\",\n\t\t\t\"mellencamp\": \"PROPN\",\n\t\t\t\"disgust\": \"NOUN\",\n\t\t\t\"budgets\": \"NOUN\",\n\t\t\t\"fusions\": \"NOUN\",\n\t\t\t\"transmutation\": \"NOUN\",\n\t\t\t\"witness\": \"VERB\",\n\t\t\t\"proving\": \"VERB\",\n\t\t\t\"facilitated\": \"VERB\",\n\t\t\t\"beverly\": \"PROPN\",\n\t\t\t\"mindlessness\": \"NOUN\",\n\t\t\t\"vp\": \"NOUN\",\n\t\t\t\"fascinates\": \"VERB\",\n\t\t\t\"codex\": \"NOUN\",\n\t\t\t\"anniversary\": \"NOUN\",\n\t\t\t\"translator\": \"NOUN\",\n\t\t\t\"combed\": \"VERB\",\n\t\t\t\"undeniable\": \"ADJ\",\n\t\t\t\"false\": \"ADJ\",\n\t\t\t\"distorts\": \"VERB\",\n\t\t\t\"messina\": \"PROPN\",\n\t\t\t\"comm-\": \"INTJ\",\n\t\t\t\"borritos\": \"NOUN\",\n\t\t\t\"garcia\": \"PROPN\",\n\t\t\t\"bachelor\": \"NOUN\",\n\t\t\t\"affection\": \"NOUN\",\n\t\t\t\"chumley\": \"PROPN\",\n\t\t\t\"businessperson\": \"NOUN\",\n\t\t\t\"mixes\": \"VERB\",\n\t\t\t\"calculus\": \"NOUN\",\n\t\t\t\"apologizing\": \"VERB\",\n\t\t\t\"murungi\": \"PROPN\",\n\t\t\t\"0.2\": \"NUM\",\n\t\t\t\"1596\": \"NUM\",\n\t\t\t\"theft\": \"NOUN\",\n\t\t\t\"suffering\": \"VERB\",\n\t\t\t\"habit\": \"NOUN\",\n\t\t\t\"sleeved\": \"ADJ\",\n\t\t\t\"stenosis\": \"NOUN\",\n\t\t\t\"oh-ho\": \"INTJ\",\n\t\t\t\"description\": \"NOUN\",\n\t\t\t\"fuji\": \"PROPN\",\n\t\t\t\"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\": \"PUNCT\",\n\t\t\t\"sharp\": \"ADJ\",\n\t\t\t\"buzzer\": \"NOUN\",\n\t\t\t\"bicycle\": \"NOUN\",\n\t\t\t\"stay\": \"VERB\",\n\t\t\t\"hampshire\": \"PROPN\",\n\t\t\t\"distal\": \"ADJ\",\n\t\t\t\"russell\": \"PROPN\",\n\t\t\t\"ethnocentric\": \"ADJ\",\n\t\t\t\"3/03\": \"NUM\",\n\t\t\t\"trieste\": \"PROPN\",\n\t\t\t\"@potus\": \"PROPN\",\n\t\t\t\"momentary\": \"ADJ\",\n\t\t\t\"one-sided\": \"ADJ\",\n\t\t\t\"1956\": \"NUM\",\n\t\t\t\"http://www.internetchurchofchrist.org\": \"PROPN\",\n\t\t\t\"lapse\": \"VERB\",\n\t\t\t\"10:00\": \"NUM\",\n\t\t\t\"saloon\": \"PROPN\",\n\t\t\t\"happened\": \"VERB\",\n\t\t\t\"reccommend\": \"VERB\",\n\t\t\t\"cafes\": \"NOUN\",\n\t\t\t\"shiu\": \"PROPN\",\n\t\t\t\"immediate\": \"ADJ\",\n\t\t\t\"chander\": \"PROPN\",\n\t\t\t\"foraging\": \"NOUN\",\n\t\t\t\"miscreants\": \"NOUN\",\n\t\t\t\"mikhail\": \"PROPN\",\n\t\t\t\"stillman\": \"PROPN\",\n\t\t\t\"digging\": \"VERB\",\n\t\t\t\"earliest\": \"ADJ\",\n\t\t\t\"swell\": \"NOUN\",\n\t\t\t\"counterparty\": \"NOUN\",\n\t\t\t\"synthesis\": \"NOUN\",\n\t\t\t\"shoulder\": \"NOUN\",\n\t\t\t\"wire\": \"NOUN\",\n\t\t\t\"victim\": \"NOUN\",\n\t\t\t\"slipping\": \"VERB\",\n\t\t\t\"bookings\": \"NOUN\",\n\t\t\t\"chrisssake\": \"NOUN\",\n\t\t\t\"iot\": \"PROPN\",\n\t\t\t\"prove\": \"VERB\",\n\t\t\t\"enjoy\": \"VERB\",\n\t\t\t\"messengers\": \"NOUN\",\n\t\t\t\"cyrus\": \"PROPN\",\n\t\t\t\"info.\": \"NOUN\",\n\t\t\t\"youtubers\": \"PROPN\",\n\t\t\t\"rankings\": \"NOUN\",\n\t\t\t\"actins\": \"NOUN\",\n\t\t\t\"edt\": \"PROPN\",\n\t\t\t\"ifn\": \"PROPN\",\n\t\t\t\"wounded\": \"VERB\",\n\t\t\t\"bea\": \"PROPN\",\n\t\t\t\"botn\": \"VERB\",\n\t\t\t\"campbell\": \"PROPN\",\n\t\t\t\"dpc\": \"PROPN\",\n\t\t\t\"puny\": \"ADJ\",\n\t\t\t\"nonna\": \"PROPN\",\n\t\t\t\"contacts\": \"NOUN\",\n\t\t\t\"additive\": \"NOUN\",\n\t\t\t\"mushrooms\": \"NOUN\",\n\t\t\t\"laurie\": \"PROPN\",\n\t\t\t\"woodinville\": \"PROPN\",\n\t\t\t\"ssd\": \"NOUN\",\n\t\t\t\"branom\": \"PROPN\",\n\t\t\t\"newly\": \"ADV\",\n\t\t\t\"20001\": \"NUM\",\n\t\t\t\"01/26/2001\": \"NUM\",\n\t\t\t\"silhouette\": \"NOUN\",\n\t\t\t\"mar\": \"PROPN\",\n\t\t\t\"nigiri\": \"NOUN\",\n\t\t\t\"roses\": \"NOUN\",\n\t\t\t\"cats\": \"NOUN\",\n\t\t\t\"fraiser\": \"PROPN\",\n\t\t\t\"ledger\": \"NOUN\",\n\t\t\t\"oops\": \"INTJ\",\n\t\t\t\"feith\": \"PROPN\",\n\t\t\t\"document\": \"NOUN\",\n\t\t\t\"lobby\": \"NOUN\",\n\t\t\t\"resonates\": \"VERB\",\n\t\t\t\"kimberly\": \"PROPN\",\n\t\t\t\"airliner\": \"NOUN\",\n\t\t\t\"amputated\": \"ADJ\",\n\t\t\t\"muse\": \"NOUN\",\n\t\t\t\"slopes\": \"NOUN\",\n\t\t\t\"art\": \"NOUN\",\n\t\t\t\"nonpartisan\": \"ADJ\",\n\t\t\t\"practically\": \"ADV\",\n\t\t\t\"declaration\": \"NOUN\",\n\t\t\t\"buttered\": \"ADJ\",\n\t\t\t\"civilisation\": \"NOUN\",\n\t\t\t\"registered\": \"VERB\",\n\t\t\t\"blossoming\": \"NOUN\",\n\t\t\t\"denver\": \"PROPN\",\n\t\t\t\"attachment\": \"NOUN\",\n\t\t\t\"alerted\": \"VERB\",\n\t\t\t\"excesses\": \"NOUN\",\n\t\t\t\"freewinds\": \"PROPN\",\n\t\t\t\"biodiversity\": \"NOUN\",\n\t\t\t\"jetblue\": \"PROPN\",\n\t\t\t\"worries\": \"NOUN\",\n\t\t\t\"befriend\": \"VERB\",\n\t\t\t\"mccallum\": \"PROPN\",\n\t\t\t\"encyclopedic\": \"ADJ\",\n\t\t\t\"form\": \"NOUN\",\n\t\t\t\"improvements\": \"NOUN\",\n\t\t\t\"housewife\": \"NOUN\",\n\t\t\t\"ordering\": \"VERB\",\n\t\t\t\"cigar\": \"NOUN\",\n\t\t\t\"herbs\": \"NOUN\",\n\t\t\t\"popular\": \"ADJ\",\n\t\t\t\"augmentations\": \"NOUN\",\n\t\t\t\"filtering\": \"VERB\",\n\t\t\t\"dissipated\": \"VERB\",\n\t\t\t\"shows\": \"VERB\",\n\t\t\t\"anarchy\": \"NOUN\",\n\t\t\t\"arriving\": \"VERB\",\n\t\t\t\"clement\": \"PROPN\",\n\t\t\t\"exchanged\": \"VERB\",\n\t\t\t\"beef\": \"NOUN\",\n\t\t\t\"tommorow\": \"NOUN\",\n\t\t\t\"appreciates\": \"VERB\",\n\t\t\t\"herald\": \"PROPN\",\n\t\t\t\"reservations\": \"NOUN\",\n\t\t\t\"facet\": \"NOUN\",\n\t\t\t\"vote\": \"NOUN\",\n\t\t\t\"summons\": \"NOUN\",\n\t\t\t\"aster\": \"PROPN\",\n\t\t\t\"negro\": \"ADJ\",\n\t\t\t\"torso\": \"NOUN\",\n\t\t\t\"accustomed\": \"VERB\",\n\t\t\t\"seince\": \"SCONJ\",\n\t\t\t\"praises\": \"NOUN\",\n\t\t\t\"forth\": \"ADV\",\n\t\t\t\"sustenance\": \"NOUN\",\n\t\t\t\"scoring\": \"NOUN\",\n\t\t\t\"fringes\": \"NOUN\",\n\t\t\t\"bonde\": \"PROPN\",\n\t\t\t\"chandler\": \"PROPN\",\n\t\t\t\"substantiation\": \"NOUN\",\n\t\t\t\"patchwork\": \"NOUN\",\n\t\t\t\"tsars\": \"PROPN\",\n\t\t\t\"corking\": \"NOUN\",\n\t\t\t\"rejects\": \"VERB\",\n\t\t\t\"creditor\": \"NOUN\",\n\t\t\t\"re-\": \"INTJ\",\n\t\t\t\"proud\": \"ADJ\",\n\t\t\t\"revolt\": \"NOUN\",\n\t\t\t\"mcdonalds\": \"PROPN\",\n\t\t\t\"kung\": \"NOUN\",\n\t\t\t\"sculpture\": \"NOUN\",\n\t\t\t\"arancini\": \"NOUN\",\n\t\t\t\"observatory\": \"PROPN\",\n\t\t\t\"infallible\": \"ADJ\",\n\t\t\t\"leaders\": \"NOUN\",\n\t\t\t\"invictus\": \"PROPN\",\n\t\t\t\"beheshti\": \"PROPN\",\n\t\t\t\"bade\": \"VERB\",\n\t\t\t\"3611\": \"NUM\",\n\t\t\t\"sticks\": \"NOUN\",\n\t\t\t\"6.8\": \"NUM\",\n\t\t\t\"grey\": \"ADJ\",\n\t\t\t\"s&m\": \"NOUN\",\n\t\t\t\"hizb\": \"PROPN\",\n\t\t\t\"docks\": \"NOUN\",\n\t\t\t\"baudelaire\": \"PROPN\",\n\t\t\t\"fri\": \"PROPN\",\n\t\t\t\"skidmore\": \"PROPN\",\n\t\t\t\"stare\": \"NOUN\",\n\t\t\t\"darkroom\": \"NOUN\",\n\t\t\t\"succintly\": \"ADV\",\n\t\t\t\"canister\": \"NOUN\",\n\t\t\t\"colonel\": \"NOUN\",\n\t\t\t\"anatomical\": \"ADJ\",\n\t\t\t\"misfortunes\": \"NOUN\",\n\t\t\t\"native\": \"ADJ\",\n\t\t\t\"regreted\": \"VERB\",\n\t\t\t\"1825\": \"NUM\",\n\t\t\t\"thei\": \"PRON\",\n\t\t\t\"torturing\": \"VERB\",\n\t\t\t\"jiffy\": \"NOUN\",\n\t\t\t\"labor\": \"NOUN\",\n\t\t\t\"insights\": \"NOUN\",\n\t\t\t\"3/9/00\": \"NUM\",\n\t\t\t\"plane\": \"NOUN\",\n\t\t\t\"glitch\": \"NOUN\",\n\t\t\t\"pupils\": \"NOUN\",\n\t\t\t\"teotihuacan\": \"PROPN\",\n\t\t\t\"meats\": \"NOUN\",\n\t\t\t\"residence\": \"NOUN\",\n\t\t\t\"sport\": \"NOUN\",\n\t\t\t\"long\": \"ADJ\",\n\t\t\t\"theatres\": \"NOUN\",\n\t\t\t\"pre-fab\": \"ADJ\",\n\t\t\t\"117th\": \"ADJ\",\n\t\t\t\"maddened\": \"VERB\",\n\t\t\t\"rudely\": \"ADV\",\n\t\t\t\"refineries\": \"NOUN\",\n\t\t\t\"omnipotence\": \"NOUN\",\n\t\t\t\"corpse\": \"NOUN\",\n\t\t\t\"leotard\": \"NOUN\",\n\t\t\t\"appointing\": \"VERB\",\n\t\t\t\"uncharacteristically\": \"ADV\",\n\t\t\t\"trove\": \"NOUN\",\n\t\t\t\"antisocialism\": \"NOUN\",\n\t\t\t\"nizhny\": \"PROPN\",\n\t\t\t\"preheat\": \"VERB\",\n\t\t\t\"cost\": \"NOUN\",\n\t\t\t\"champs\": \"PROPN\",\n\t\t\t\"innocently\": \"ADV\",\n\t\t\t\"walton\": \"PROPN\",\n\t\t\t\"eagle\": \"NOUN\",\n\t\t\t\"alluded\": \"VERB\",\n\t\t\t\"sounded\": \"VERB\",\n\t\t\t\"exhausted-looking\": \"ADJ\",\n\t\t\t\"villages\": \"NOUN\",\n\t\t\t\"chief\": \"ADJ\",\n\t\t\t\"rosencreutz\": \"PROPN\",\n\t\t\t\"impugned\": \"VERB\",\n\t\t\t\"candidate\": \"NOUN\",\n\t\t\t\"nearer\": \"ADV\",\n\t\t\t\"amounted\": \"VERB\",\n\t\t\t\"bobbing\": \"VERB\",\n\t\t\t\"bloke\": \"NOUN\",\n\t\t\t\"pulls\": \"VERB\",\n\t\t\t\"pg&e\": \"PROPN\",\n\t\t\t\"soprano\": \"NOUN\",\n\t\t\t\"sum-distinct-price\": \"PROPN\",\n\t\t\t\"strengthened\": \"VERB\",\n\t\t\t\"hamilton\": \"PROPN\",\n\t\t\t\"vocabulary\": \"NOUN\",\n\t\t\t\"tallulah\": \"PROPN\",\n\t\t\t\"soleil\": \"PROPN\",\n\t\t\t\"nurtured\": \"VERB\",\n\t\t\t\"oliveira\": \"PROPN\",\n\t\t\t\"patterson\": \"PROPN\",\n\t\t\t\"staying\": \"VERB\",\n\t\t\t\"wealthy\": \"ADJ\",\n\t\t\t\"accented\": \"ADJ\",\n\t\t\t\"welcomed\": \"VERB\",\n\t\t\t\"payroll\": \"NOUN\",\n\t\t\t\"persuading\": \"VERB\",\n\t\t\t\"protégé\": \"NOUN\",\n\t\t\t\"capitals\": \"NOUN\",\n\t\t\t\"2011\": \"NUM\",\n\t\t\t\"attainment\": \"NOUN\",\n\t\t\t\"l'enfant\": \"PROPN\",\n\t\t\t\"stages\": \"NOUN\",\n\t\t\t\"buys\": \"ADJ\",\n\t\t\t\"apothecary\": \"NOUN\",\n\t\t\t\"fallujan\": \"ADJ\",\n\t\t\t\"purchase\": \"NOUN\",\n\t\t\t\"conceding\": \"VERB\",\n\t\t\t\"bathrooms\": \"NOUN\",\n\t\t\t\"rulan\": \"PROPN\",\n\t\t\t\"enlarging\": \"VERB\",\n\t\t\t\"pivotchart\": \"NOUN\",\n\t\t\t\"barnes\": \"PROPN\",\n\t\t\t\"congressional\": \"ADJ\",\n\t\t\t\"nightdress\": \"NOUN\",\n\t\t\t\"pasquallie\": \"PROPN\",\n\t\t\t\"dived\": \"VERB\",\n\t\t\t\"beethoven\": \"PROPN\",\n\t\t\t\"cowboy\": \"NOUN\",\n\t\t\t\"occasion\": \"NOUN\",\n\t\t\t\"scrambling\": \"VERB\",\n\t\t\t\"resilience\": \"NOUN\",\n\t\t\t\"hotpot\": \"VERB\",\n\t\t\t\"azzam\": \"PROPN\",\n\t\t\t\"trot\": \"NOUN\",\n\t\t\t\"carnegie\": \"PROPN\",\n\t\t\t\"parisians\": \"PROPN\",\n\t\t\t\"stinebower\": \"PROPN\",\n\t\t\t\"fundamentals\": \"PROPN\",\n\t\t\t\"suggests\": \"VERB\",\n\t\t\t\"aforementioned\": \"ADJ\",\n\t\t\t\"tilt\": \"ADV\",\n\t\t\t\"opted\": \"VERB\",\n\t\t\t\"inspirational\": \"ADJ\",\n\t\t\t\"ihara\": \"PROPN\",\n\t\t\t\"message\": \"NOUN\",\n\t\t\t\"surpassing\": \"VERB\",\n\t\t\t\"lively\": \"ADJ\",\n\t\t\t\"ucc\": \"NOUN\",\n\t\t\t\"immortal\": \"ADJ\",\n\t\t\t\"gtee\": \"NOUN\",\n\t\t\t\"crumbs\": \"NOUN\",\n\t\t\t\"arresting\": \"VERB\",\n\t\t\t\"humor\": \"NOUN\",\n\t\t\t\"conciliatory\": \"ADJ\",\n\t\t\t\"shiites\": \"PROPN\",\n\t\t\t\"black-red\": \"ADJ\",\n\t\t\t\"methods\": \"NOUN\",\n\t\t\t\"uncenturied\": \"ADJ\",\n\t\t\t\"20005\": \"NUM\",\n\t\t\t\"sharing\": \"VERB\",\n\t\t\t\"0.05\": \"NUM\",\n\t\t\t\"kushnick\": \"PROPN\",\n\t\t\t\"matchup\": \"NOUN\",\n\t\t\t\"sarah\": \"PROPN\",\n\t\t\t\"harrison\": \"PROPN\",\n\t\t\t\"reprioritised\": \"VERB\",\n\t\t\t\"bulging\": \"ADJ\",\n\t\t\t\"temptation\": \"NOUN\",\n\t\t\t\"unanimity\": \"NOUN\",\n\t\t\t\"inflated\": \"VERB\",\n\t\t\t\"flotsam\": \"NOUN\",\n\t\t\t\"peopled\": \"VERB\",\n\t\t\t\"italia\": \"PROPN\",\n\t\t\t\"hmmm\": \"INTJ\",\n\t\t\t\"msn\": \"PROPN\",\n\t\t\t\"mouhamad\": \"PROPN\",\n\t\t\t\"collectors\": \"NOUN\",\n\t\t\t\"goose\": \"PROPN\",\n\t\t\t\"80435\": \"NUM\",\n\t\t\t\"pillars\": \"NOUN\",\n\t\t\t\"internationally\": \"ADV\",\n\t\t\t\"members\": \"NOUN\",\n\t\t\t\"perception\": \"NOUN\",\n\t\t\t\"stationed\": \"VERB\",\n\t\t\t\"narrowly\": \"ADV\",\n\t\t\t\"mon\": \"PROPN\",\n\t\t\t\"sales\": \"NOUN\",\n\t\t\t\"inner\": \"ADJ\",\n\t\t\t\"07/30/2001\": \"NUM\",\n\t\t\t\"eyedropper\": \"NOUN\",\n\t\t\t\"generous\": \"ADJ\",\n\t\t\t\".4\": \"NUM\",\n\t\t\t\"diet\": \"NOUN\",\n\t\t\t\"galleries\": \"NOUN\",\n\t\t\t\"louise\": \"PROPN\",\n\t\t\t\"carcass\": \"NOUN\",\n\t\t\t\"exhibit\": \"NOUN\",\n\t\t\t\"leo\": \"PROPN\",\n\t\t\t\"better\": \"ADJ\",\n\t\t\t\"planners\": \"NOUN\",\n\t\t\t\"old\": \"ADJ\",\n\t\t\t\"download\": \"VERB\",\n\t\t\t\"village\": \"NOUN\",\n\t\t\t\"weapons\": \"NOUN\",\n\t\t\t\"713-819-2784\": \"NUM\",\n\t\t\t\"finland\": \"PROPN\",\n\t\t\t\"doctors\": \"NOUN\",\n\t\t\t\"wink\": \"NOUN\",\n\t\t\t\"sahhaf\": \"PROPN\",\n\t\t\t\"sub-par\": \"ADJ\",\n\t\t\t\"divest\": \"VERB\",\n\t\t\t\"stimulate\": \"VERB\",\n\t\t\t\"governmental\": \"ADJ\",\n\t\t\t\"shelby\": \"PROPN\",\n\t\t\t\"mailing\": \"NOUN\",\n\t\t\t\"hungarians\": \"NOUN\",\n\t\t\t\"country\": \"NOUN\",\n\t\t\t\"680\": \"NUM\",\n\t\t\t\"detroit\": \"PROPN\",\n\t\t\t\"07:24\": \"NUM\",\n\t\t\t\"footprints\": \"NOUN\",\n\t\t\t\"80s\": \"NOUN\",\n\t\t\t\"jaffna\": \"PROPN\",\n\t\t\t\"crept\": \"VERB\",\n\t\t\t\"reverted\": \"VERB\",\n\t\t\t\"neuendorffer\": \"PROPN\",\n\t\t\t\"vine\": \"NOUN\",\n\t\t\t\"his.\": \"NOUN\",\n\t\t\t\"secluded\": \"ADJ\",\n\t\t\t\"meadows\": \"NOUN\",\n\t\t\t\"gated\": \"ADJ\",\n\t\t\t\"victors\": \"PROPN\",\n\t\t\t\"annesley\": \"PROPN\",\n\t\t\t\"tmobile\": \"PROPN\",\n\t\t\t\"ukraine\": \"PROPN\",\n\t\t\t\"1833\": \"NUM\",\n\t\t\t\"help\": \"VERB\",\n\t\t\t\"politest\": \"ADJ\",\n\t\t\t\"mishkenot\": \"PROPN\",\n\t\t\t\"risks\": \"NOUN\",\n\t\t\t\"currency\": \"NOUN\",\n\t\t\t\"rifle\": \"NOUN\",\n\t\t\t\"constitution\": \"NOUN\",\n\t\t\t\"rigor\": \"NOUN\",\n\t\t\t\"stagger\": \"VERB\",\n\t\t\t\"beresford\": \"PROPN\",\n\t\t\t\"aha\": \"INTJ\",\n\t\t\t\"rosario\": \"PROPN\",\n\t\t\t\"joining\": \"VERB\",\n\t\t\t\"13.9\": \"NUM\",\n\t\t\t\"ornament\": \"NOUN\",\n\t\t\t\"parental\": \"ADJ\",\n\t\t\t\"dries\": \"PROPN\",\n\t\t\t\"roberts\": \"PROPN\",\n\t\t\t\"beach\": \"NOUN\",\n\t\t\t\"pellegrino\": \"PROPN\",\n\t\t\t\"told\": \"VERB\",\n\t\t\t\"establishments\": \"NOUN\",\n\t\t\t\"devoted\": \"VERB\",\n\t\t\t\"magazines\": \"NOUN\",\n\t\t\t\"intimidating\": \"ADJ\",\n\t\t\t\"chipotle\": \"PROPN\",\n\t\t\t\"packed\": \"VERB\",\n\t\t\t\"04:44\": \"NUM\",\n\t\t\t\"crapload\": \"NOUN\",\n\t\t\t\"social\": \"ADJ\",\n\t\t\t\"saint\": \"ADJ\",\n\t\t\t\"pedicures\": \"NOUN\",\n\t\t\t\"3.8\": \"NUM\",\n\t\t\t\"sinister\": \"ADJ\",\n\t\t\t\"copeland\": \"PROPN\",\n\t\t\t\"event\": \"NOUN\",\n\t\t\t\"sequencing\": \"NOUN\",\n\t\t\t\"école\": \"PROPN\",\n\t\t\t\"zakaria\": \"PROPN\",\n\t\t\t\"judiciary\": \"PROPN\",\n\t\t\t\"stouter\": \"ADJ\",\n\t\t\t\"intrudes\": \"VERB\",\n\t\t\t\"500.00\": \"NUM\",\n\t\t\t\"sinyavskys\": \"PROPN\",\n\t\t\t\"midden\": \"NOUN\",\n\t\t\t\"sweatshirts\": \"NOUN\",\n\t\t\t\"button\": \"NOUN\",\n\t\t\t\"improved\": \"VERB\",\n\t\t\t\"gun\": \"NOUN\",\n\t\t\t\"pitched\": \"ADJ\",\n\t\t\t\"overhead\": \"NOUN\",\n\t\t\t\"loads\": \"NOUN\",\n\t\t\t\"canopied\": \"VERB\",\n\t\t\t\"01:58\": \"NUM\",\n\t\t\t\"granadilla\": \"NOUN\",\n\t\t\t\"appropriateness\": \"NOUN\",\n\t\t\t\"v-\": \"INTJ\",\n\t\t\t\"dulaymi\": \"PROPN\",\n\t\t\t\"trailor\": \"NOUN\",\n\t\t\t\"encrusted\": \"VERB\",\n\t\t\t\"geographic\": \"ADJ\",\n\t\t\t\"unproven\": \"ADJ\",\n\t\t\t\"hunting\": \"VERB\",\n\t\t\t\"designing\": \"VERB\",\n\t\t\t\"communism\": \"NOUN\",\n\t\t\t\"bewildered\": \"VERB\",\n\t\t\t\"tellers\": \"NOUN\",\n\t\t\t\"rorschach\": \"PROPN\",\n\t\t\t\"underpinning\": \"VERB\",\n\t\t\t\"serbia\": \"PROPN\",\n\t\t\t\"violently\": \"ADV\",\n\t\t\t\"cargill\": \"PROPN\",\n\t\t\t\"communicator\": \"NOUN\",\n\t\t\t\"militarism\": \"NOUN\",\n\t\t\t\"effect\": \"NOUN\",\n\t\t\t\"coil\": \"PROPN\",\n\t\t\t\"sponge\": \"NOUN\",\n\t\t\t\"flashpoints\": \"NOUN\",\n\t\t\t\"updates\": \"NOUN\",\n\t\t\t\"mcnuggets\": \"PROPN\",\n\t\t\t\"n't\": \"PART\",\n\t\t\t\"substrate\": \"NOUN\",\n\t\t\t\"helmets\": \"NOUN\",\n\t\t\t\"allowed\": \"VERB\",\n\t\t\t\"..........\": \"PUNCT\",\n\t\t\t\"sickly\": \"ADJ\",\n\t\t\t\"handlers\": \"NOUN\",\n\t\t\t\"punished\": \"VERB\",\n\t\t\t\"u.s.\": \"PROPN\",\n\t\t\t\"2.15\": \"NUM\",\n\t\t\t\"shrieks\": \"NOUN\",\n\t\t\t\"creatures\": \"NOUN\",\n\t\t\t\"dinners\": \"NOUN\",\n\t\t\t\"imposing\": \"VERB\",\n\t\t\t\"misnamed\": \"VERB\",\n\t\t\t\"wilkins\": \"PROPN\",\n\t\t\t\"supplements\": \"VERB\",\n\t\t\t\"spec.\": \"NOUN\",\n\t\t\t\"calculations\": \"NOUN\",\n\t\t\t\"talented\": \"ADJ\",\n\t\t\t\"sheraton\": \"PROPN\",\n\t\t\t\"compeltly\": \"ADV\",\n\t\t\t\"mandate\": \"NOUN\",\n\t\t\t\"http://www.petsathome.com/shop/combi-1-dwarf-hamster-cage-by-ferplast-15986\": \"PROPN\",\n\t\t\t\"technlogy\": \"PROPN\",\n\t\t\t\"1?!?!?\": \"PUNCT\",\n\t\t\t\"steamboat\": \"PROPN\",\n\t\t\t\"***\": \"PUNCT\",\n\t\t\t\"undertaken\": \"VERB\",\n\t\t\t\"irate\": \"ADJ\",\n\t\t\t\"jr.\": \"PROPN\",\n\t\t\t\"10/27/2000\": \"NUM\",\n\t\t\t\"complexes\": \"NOUN\",\n\t\t\t\"gearbox\": \"NOUN\",\n\t\t\t\"halves\": \"NOUN\",\n\t\t\t\"super\": \"ADV\",\n\t\t\t\"rises\": \"NOUN\",\n\t\t\t\"college\": \"NOUN\",\n\t\t\t\"rejection\": \"NOUN\",\n\t\t\t\"tender\": \"ADJ\",\n\t\t\t\"wishes\": \"NOUN\",\n\t\t\t\"exist\": \"VERB\",\n\t\t\t\"unbroken\": \"ADJ\",\n\t\t\t\"4-ever\": \"ADV\",\n\t\t\t\"easier\": \"ADJ\",\n\t\t\t\"annotated\": \"VERB\",\n\t\t\t\"guidance\": \"NOUN\",\n\t\t\t\"y!a\": \"PROPN\",\n\t\t\t\"€\": \"SYM\",\n\t\t\t\"meritocratically\": \"ADV\",\n\t\t\t\"visually\": \"ADV\",\n\t\t\t\"economically\": \"ADV\",\n\t\t\t\"anxiety\": \"NOUN\",\n\t\t\t\"romaine\": \"NOUN\",\n\t\t\t\"russians\": \"PROPN\",\n\t\t\t\"flashy\": \"ADJ\",\n\t\t\t\"farcical\": \"ADJ\",\n\t\t\t\"polling\": \"NOUN\",\n\t\t\t\"extremists\": \"NOUN\",\n\t\t\t\"stem\": \"NOUN\",\n\t\t\t\"daniel.smith2@durham.ac.uk\": \"PROPN\",\n\t\t\t\"vented\": \"VERB\",\n\t\t\t\"hoods\": \"NOUN\",\n\t\t\t\"disappointment\": \"NOUN\",\n\t\t\t\"overly\": \"ADV\",\n\t\t\t\"snyder\": \"PROPN\",\n\t\t\t\"eighteenth\": \"ADJ\",\n\t\t\t\"exhausting\": \"ADJ\",\n\t\t\t\"800\": \"NUM\",\n\t\t\t\"12.46\": \"NUM\",\n\t\t\t\"panic\": \"NOUN\",\n\t\t\t\"ships\": \"NOUN\",\n\t\t\t\"cehf\": \"NOUN\",\n\t\t\t\"regulations\": \"NOUN\",\n\t\t\t\"hoop\": \"NOUN\",\n\t\t\t\"continually\": \"ADV\",\n\t\t\t\"2nd\": \"ADJ\",\n\t\t\t\"shaganon\": \"PROPN\",\n\t\t\t\"engulfed\": \"VERB\",\n\t\t\t\"formalisms\": \"NOUN\",\n\t\t\t\"wiser\": \"ADJ\",\n\t\t\t\"aught\": \"NOUN\",\n\t\t\t\"advisers\": \"NOUN\",\n\t\t\t\"doctor\": \"NOUN\",\n\t\t\t\"boiling\": \"ADJ\",\n\t\t\t\"rows\": \"NOUN\",\n\t\t\t\"betta\": \"NOUN\",\n\t\t\t\"entitled\": \"VERB\",\n\t\t\t\"drained\": \"VERB\",\n\t\t\t\"gorman\": \"PROPN\",\n\t\t\t\"sixties\": \"NOUN\",\n\t\t\t\"rugova\": \"PROPN\",\n\t\t\t\"fades\": \"VERB\",\n\t\t\t\"qld\": \"PROPN\",\n\t\t\t\"grasps\": \"VERB\",\n\t\t\t\"ld2d-#69377-1.xls\": \"NOUN\",\n\t\t\t\"occurs\": \"VERB\",\n\t\t\t\"ron\": \"PROPN\",\n\t\t\t\"evil\": \"ADJ\",\n\t\t\t\"tied\": \"VERB\",\n\t\t\t\"needs\": \"VERB\",\n\t\t\t\"surpluses\": \"NOUN\",\n\t\t\t\"paired\": \"VERB\",\n\t\t\t\"intrigue\": \"NOUN\",\n\t\t\t\"gamut\": \"NOUN\",\n\t\t\t\"lipids\": \"NOUN\",\n\t\t\t\"bred\": \"VERB\",\n\t\t\t\"jungle\": \"NOUN\",\n\t\t\t\"caucasians\": \"PROPN\",\n\t\t\t\"incremental\": \"ADJ\",\n\t\t\t\"harmonisation\": \"NOUN\",\n\t\t\t\"ex-members\": \"NOUN\",\n\t\t\t\"percell\": \"PROPN\",\n\t\t\t\"dedication\": \"NOUN\",\n\t\t\t\"02:19\": \"NUM\",\n\t\t\t\"1724\": \"NUM\",\n\t\t\t\"list\": \"NOUN\",\n\t\t\t\"coarse\": \"ADJ\",\n\t\t\t\"instability\": \"NOUN\",\n\t\t\t\"association\": \"PROPN\",\n\t\t\t\"coase\": \"PROPN\",\n\t\t\t\"accession\": \"NOUN\",\n\t\t\t\"ugly\": \"ADJ\",\n\t\t\t\"wages\": \"NOUN\",\n\t\t\t\"mid-may\": \"PROPN\",\n\t\t\t\"r.i\": \"PROPN\",\n\t\t\t\"emery\": \"PROPN\",\n\t\t\t\"se\": \"AUX\",\n\t\t\t\"stabbed\": \"VERB\",\n\t\t\t\"wavenumber\": \"NOUN\",\n\t\t\t\"violate\": \"VERB\",\n\t\t\t\"yung\": \"PROPN\",\n\t\t\t\"indivisible\": \"ADJ\",\n\t\t\t\"tunisia\": \"PROPN\",\n\t\t\t\"imperium\": \"PROPN\",\n\t\t\t\"1/8\": \"NUM\",\n\t\t\t\"piloting\": \"NOUN\",\n\t\t\t\"while\": \"SCONJ\",\n\t\t\t\"approximation\": \"NOUN\",\n\t\t\t\"exhibition\": \"NOUN\",\n\t\t\t\"psu\": \"NOUN\",\n\t\t\t\"benner\": \"PROPN\",\n\t\t\t\"puppets\": \"NOUN\",\n\t\t\t\"tastings\": \"NOUN\",\n\t\t\t\"indianapolis\": \"PROPN\",\n\t\t\t\"formed\": \"VERB\",\n\t\t\t\"screamed\": \"VERB\",\n\t\t\t\"difficulty\": \"NOUN\",\n\t\t\t\"metaphysics\": \"NOUN\",\n\t\t\t\"macedonia\": \"PROPN\",\n\t\t\t\"b****\": \"NOUN\",\n\t\t\t\"designs\": \"NOUN\",\n\t\t\t\"themed\": \"ADJ\",\n\t\t\t\"gym\": \"NOUN\",\n\t\t\t\"fence\": \"NOUN\",\n\t\t\t\"godspeed\": \"PROPN\",\n\t\t\t\"impersonal\": \"ADJ\",\n\t\t\t\"privatly\": \"ADV\",\n\t\t\t\"dih\": \"INTJ\",\n\t\t\t\"bangladesh\": \"PROPN\",\n\t\t\t\"accidentally\": \"ADV\",\n\t\t\t\"phet\": \"PROPN\",\n\t\t\t\"20515\": \"NUM\",\n\t\t\t\"william\": \"PROPN\",\n\t\t\t\"performing\": \"VERB\",\n\t\t\t\"tops\": \"NOUN\",\n\t\t\t\"erred\": \"VERB\",\n\t\t\t\"admitted\": \"VERB\",\n\t\t\t\"reinterred\": \"VERB\",\n\t\t\t\"sherri\": \"PROPN\",\n\t\t\t\"tablets\": \"NOUN\",\n\t\t\t\"tagesspiegel\": \"PROPN\",\n\t\t\t\"castle\": \"NOUN\",\n\t\t\t\"changer\": \"NOUN\",\n\t\t\t\"martha\": \"PROPN\",\n\t\t\t\"whitehouse.gov\": \"PROPN\",\n\t\t\t\"200,000,000,000\": \"NUM\",\n\t\t\t\"womanish\": \"ADJ\",\n\t\t\t\"http://www.wikihow.com/wikihow:right-to-fork\": \"PROPN\",\n\t\t\t\"jargon\": \"NOUN\",\n\t\t\t\"sandals\": \"NOUN\",\n\t\t\t\"malacca\": \"PROPN\",\n\t\t\t\"+4588304520\": \"NUM\",\n\t\t\t\"gangs\": \"NOUN\",\n\t\t\t\"neuralink\": \"PROPN\",\n\t\t\t\"infield\": \"NOUN\",\n\t\t\t\"fifth\": \"ADJ\",\n\t\t\t\"3,300,000\": \"NUM\",\n\t\t\t\"parsi\": \"ADJ\",\n\t\t\t\"preschoolers\": \"NOUN\",\n\t\t\t\"whither\": \"ADV\",\n\t\t\t\"moab\": \"PROPN\",\n\t\t\t\"wang\": \"NOUN\",\n\t\t\t\"114,950\": \"NUM\",\n\t\t\t\"titanic\": \"PROPN\",\n\t\t\t\"hypocrisy\": \"NOUN\",\n\t\t\t\"patting\": \"VERB\",\n\t\t\t\"overcast\": \"ADJ\",\n\t\t\t\"episcopalian\": \"PROPN\",\n\t\t\t\"quoting\": \"VERB\",\n\t\t\t\"urge\": \"VERB\",\n\t\t\t\"cool\": \"ADJ\",\n\t\t\t\"astonishing\": \"VERB\",\n\t\t\t\"kathy\": \"PROPN\",\n\t\t\t\"ranasinghe\": \"PROPN\",\n\t\t\t\"dari\": \"PROPN\",\n\t\t\t\"wants\": \"VERB\",\n\t\t\t\"architecture\": \"NOUN\",\n\t\t\t\"quit\": \"VERB\",\n\t\t\t\"gladly\": \"ADV\",\n\t\t\t\"cruise\": \"NOUN\",\n\t\t\t\"hostages\": \"NOUN\",\n\t\t\t\"re-enactments\": \"NOUN\",\n\t\t\t\"appraisal\": \"NOUN\",\n\t\t\t\"15\": \"NUM\",\n\t\t\t\"hawaii\": \"PROPN\",\n\t\t\t\"sensations\": \"NOUN\",\n\t\t\t\"mins\": \"NOUN\",\n\t\t\t\"plagues\": \"VERB\",\n\t\t\t\"mixture\": \"NOUN\",\n\t\t\t\"acquistion\": \"NOUN\",\n\t\t\t\"828-296-8466\": \"NUM\",\n\t\t\t\"smacks\": \"VERB\",\n\t\t\t\"wildly\": \"ADV\",\n\t\t\t\"mccartney\": \"PROPN\",\n\t\t\t\"proficiency\": \"NOUN\",\n\t\t\t\"learners\": \"NOUN\",\n\t\t\t\"http://www.nea.fr/html/rp/chernobyl/c01.html\": \"PROPN\",\n\t\t\t\"zone\": \"NOUN\",\n\t\t\t\"supremacy\": \"NOUN\",\n\t\t\t\"cagey\": \"ADJ\",\n\t\t\t\"kept\": \"VERB\",\n\t\t\t\"commitment\": \"NOUN\",\n\t\t\t\"generalize\": \"VERB\",\n\t\t\t\"contact\": \"NOUN\",\n\t\t\t\"experimentation\": \"NOUN\",\n\t\t\t\"romeo\": \"PROPN\",\n\t\t\t\"michele\": \"PROPN\",\n\t\t\t\"anahuac\": \"PROPN\",\n\t\t\t\"boulevard\": \"NOUN\",\n\t\t\t\"http://www.bigeye.com/111003.htm\": \"PROPN\",\n\t\t\t\"bees\": \"NOUN\",\n\t\t\t\"spadework\": \"NOUN\",\n\t\t\t\"environmental\": \"ADJ\",\n\t\t\t\"furious\": \"ADJ\",\n\t\t\t\"renee\": \"PROPN\",\n\t\t\t\"orders\": \"NOUN\",\n\t\t\t\"tick\": \"VERB\",\n\t\t\t\"illinois\": \"PROPN\",\n\t\t\t\"contamination\": \"NOUN\",\n\t\t\t\"bulbs\": \"NOUN\",\n\t\t\t\"begin\": \"VERB\",\n\t\t\t\"prophet\": \"PROPN\",\n\t\t\t\"request\": \"NOUN\",\n\t\t\t\"hanrahan\": \"PROPN\",\n\t\t\t\"!?!\": \"PUNCT\",\n\t\t\t\"algeria\": \"PROPN\",\n\t\t\t\"iso\": \"PROPN\",\n\t\t\t\"waking\": \"VERB\",\n\t\t\t\"encounters\": \"NOUN\",\n\t\t\t\"famously\": \"ADV\",\n\t\t\t\"anton\": \"PROPN\",\n\t\t\t\"invisible\": \"ADJ\",\n\t\t\t\"plump\": \"ADJ\",\n\t\t\t\"can-teen\": \"NOUN\",\n\t\t\t\"succumbing\": \"VERB\",\n\t\t\t\"catapult\": \"NOUN\",\n\t\t\t\"!!!.\": \"PUNCT\",\n\t\t\t\"1691\": \"NUM\",\n\t\t\t\"lucy\": \"PROPN\",\n\t\t\t\"indonesia\": \"PROPN\",\n\t\t\t\"buñuel\": \"PROPN\",\n\t\t\t\"finger\": \"NOUN\",\n\t\t\t\"greendale\": \"PROPN\",\n\t\t\t\"gambling\": \"NOUN\",\n\t\t\t\"lever\": \"NOUN\",\n\t\t\t\"generating\": \"VERB\",\n\t\t\t\"segment\": \"NOUN\",\n\t\t\t\"salvage\": \"NOUN\",\n\t\t\t\"jehad\": \"PROPN\",\n\t\t\t\"negotiated\": \"VERB\",\n\t\t\t\"socotra\": \"PROPN\",\n\t\t\t\"thank\": \"VERB\",\n\t\t\t\"karate\": \"PROPN\",\n\t\t\t\"goldberg\": \"PROPN\",\n\t\t\t\"little\": \"ADJ\",\n\t\t\t\"turnover\": \"NOUN\",\n\t\t\t\"intellect\": \"NOUN\",\n\t\t\t\"exocet\": \"PROPN\",\n\t\t\t\"1853\": \"NUM\",\n\t\t\t\"soundless\": \"ADJ\",\n\t\t\t\"creel\": \"PROPN\",\n\t\t\t\"review\": \"NOUN\",\n\t\t\t\"pale\": \"ADJ\",\n\t\t\t\"fearsome\": \"ADJ\",\n\t\t\t\"48\": \"NUM\",\n\t\t\t\"remnant\": \"NOUN\",\n\t\t\t\"7:15\": \"NUM\",\n\t\t\t\"chimichangas\": \"NOUN\",\n\t\t\t\"offices\": \"NOUN\",\n\t\t\t\"kinneret\": \"PROPN\",\n\t\t\t\"patch\": \"NOUN\",\n\t\t\t\"girls\": \"NOUN\",\n\t\t\t\"nun\": \"NOUN\",\n\t\t\t\"ian\": \"PROPN\",\n\t\t\t\"wikis\": \"NOUN\",\n\t\t\t\"drug-out\": \"VERB\",\n\t\t\t\"seas\": \"PROPN\",\n\t\t\t\"privet\": \"PROPN\",\n\t\t\t\"rahman\": \"PROPN\",\n\t\t\t\"hippie\": \"ADJ\",\n\t\t\t\"slovenian\": \"ADJ\",\n\t\t\t\"metaethical\": \"ADJ\",\n\t\t\t\"slanting\": \"VERB\",\n\t\t\t\"thousands\": \"NOUN\",\n\t\t\t\"americans\": \"PROPN\",\n\t\t\t\"icy-wet\": \"ADJ\",\n\t\t\t\"30,0\": \"NUM\",\n\t\t\t\"engines\": \"NOUN\",\n\t\t\t\"*ss\": \"NOUN\",\n\t\t\t\"fisht\": \"PROPN\",\n\t\t\t\"coalition\": \"PROPN\",\n\t\t\t\"subdivide\": \"VERB\",\n\t\t\t\"perspective\": \"NOUN\",\n\t\t\t\"r.\": \"PROPN\",\n\t\t\t\"moving\": \"VERB\",\n\t\t\t\"comeback\": \"NOUN\",\n\t\t\t\"volcano\": \"NOUN\",\n\t\t\t\"shallac\": \"NOUN\",\n\t\t\t\"arch-murderer\": \"NOUN\",\n\t\t\t\"satisfaction\": \"NOUN\",\n\t\t\t\"10:55\": \"NUM\",\n\t\t\t\"obligates\": \"VERB\",\n\t\t\t\"airfare\": \"NOUN\",\n\t\t\t\"limbs\": \"NOUN\",\n\t\t\t\"manufacturer\": \"NOUN\",\n\t\t\t\"structures\": \"NOUN\",\n\t\t\t\"manufacturing\": \"NOUN\",\n\t\t\t\"laurels\": \"NOUN\",\n\t\t\t\"sentimentality\": \"NOUN\",\n\t\t\t\"integrate\": \"VERB\",\n\t\t\t\"irrational\": \"ADJ\",\n\t\t\t\"propose\": \"VERB\",\n\t\t\t\"exaggeration\": \"NOUN\",\n\t\t\t\"enthusiasts\": \"NOUN\",\n\t\t\t\"determines\": \"VERB\",\n\t\t\t\"caraibes\": \"PROPN\",\n\t\t\t\"yorkedness\": \"NOUN\",\n\t\t\t\"jonesy\": \"PROPN\",\n\t\t\t\"clicked\": \"VERB\",\n\t\t\t\"golan\": \"PROPN\",\n\t\t\t\"elliotts\": \"PROPN\",\n\t\t\t\"knockturn\": \"PROPN\",\n\t\t\t\"oats\": \"PROPN\",\n\t\t\t\"piece\": \"NOUN\",\n\t\t\t\"06:20\": \"NUM\",\n\t\t\t\"reprisals\": \"NOUN\",\n\t\t\t\"liwei\": \"PROPN\",\n\t\t\t\"broth\": \"NOUN\",\n\t\t\t\"reconfirm\": \"VERB\",\n\t\t\t\"1900\": \"NUM\",\n\t\t\t\"torch\": \"NOUN\",\n\t\t\t\"moans\": \"NOUN\",\n\t\t\t\"thessaloniki\": \"PROPN\",\n\t\t\t\"unparalleled\": \"ADJ\",\n\t\t\t\"casualties\": \"NOUN\",\n\t\t\t\"freed\": \"VERB\",\n\t\t\t\"favorites\": \"NOUN\",\n\t\t\t\"rep\": \"NOUN\",\n\t\t\t\"charitable\": \"ADJ\",\n\t\t\t\"accuses\": \"VERB\",\n\t\t\t\"sets\": \"VERB\",\n\t\t\t\"butterflies\": \"NOUN\",\n\t\t\t\"aphrodite\": \"PROPN\",\n\t\t\t\"elects\": \"NOUN\",\n\t\t\t\"vajpayee\": \"PROPN\",\n\t\t\t\"virtual\": \"ADJ\",\n\t\t\t\"mace\": \"PROPN\",\n\t\t\t\"era\": \"NOUN\",\n\t\t\t\"negotiations\": \"NOUN\",\n\t\t\t\"patrons\": \"NOUN\",\n\t\t\t\"lingua\": \"NOUN\",\n\t\t\t\"accusing\": \"VERB\",\n\t\t\t\"reveals\": \"VERB\",\n\t\t\t\"warmly\": \"ADV\",\n\t\t\t\"sustainable\": \"ADJ\",\n\t\t\t\"gentle\": \"ADJ\",\n\t\t\t\"york\": \"PROPN\",\n\t\t\t\"chuck\": \"PROPN\",\n\t\t\t\"hadibo\": \"PROPN\",\n\t\t\t\"1505\": \"NUM\",\n\t\t\t\"michaels\": \"PROPN\",\n\t\t\t\"initiator\": \"NOUN\",\n\t\t\t\"interrogators\": \"NOUN\",\n\t\t\t\"kiara\": \"PROPN\",\n\t\t\t\"dzida\": \"PROPN\",\n\t\t\t\"gerald\": \"PROPN\",\n\t\t\t\"utilising\": \"VERB\",\n\t\t\t\"helmet\": \"NOUN\",\n\t\t\t\"garments\": \"NOUN\",\n\t\t\t\"billy\": \"PROPN\",\n\t\t\t\"cheryl\": \"PROPN\",\n\t\t\t\"grinned\": \"VERB\",\n\t\t\t\"draped\": \"VERB\",\n\t\t\t\"shi'ite\": \"ADJ\",\n\t\t\t\"dreadful\": \"ADJ\",\n\t\t\t\"reunify\": \"VERB\",\n\t\t\t\"ay\": \"INTJ\",\n\t\t\t\"efficiently\": \"ADV\",\n\t\t\t\"delectable\": \"ADJ\",\n\t\t\t\"wireless\": \"ADJ\",\n\t\t\t\"questioningly\": \"ADV\",\n\t\t\t\"exclaim\": \"VERB\",\n\t\t\t\"jordanian\": \"ADJ\",\n\t\t\t\"1700\": \"NUM\",\n\t\t\t\"women\": \"NOUN\",\n\t\t\t\"disrupting\": \"VERB\",\n\t\t\t\"surviving\": \"VERB\",\n\t\t\t\"polite\": \"ADJ\",\n\t\t\t\"rotting\": \"VERB\",\n\t\t\t\"intents\": \"NOUN\",\n\t\t\t\"ratio\": \"NOUN\",\n\t\t\t\"concept\": \"NOUN\",\n\t\t\t\"diagon\": \"PROPN\",\n\t\t\t\"wobblers\": \"NOUN\",\n\t\t\t\"undersigned\": \"ADJ\",\n\t\t\t\"bother\": \"VERB\",\n\t\t\t\"smakkecenter\": \"NOUN\",\n\t\t\t\"anonymous\": \"ADJ\",\n\t\t\t\"conflicts\": \"NOUN\",\n\t\t\t\"rap\": \"NOUN\",\n\t\t\t\"haight\": \"PROPN\",\n\t\t\t\"statue\": \"NOUN\",\n\t\t\t\"http://www.utrechtart.com/craft-supplies/woodworking%20supplies/\": \"PROPN\",\n\t\t\t\"stephen.dyer@bakerbotts.com\": \"PROPN\",\n\t\t\t\"jitney\": \"NOUN\",\n\t\t\t\"divorces\": \"NOUN\",\n\t\t\t\"condensed\": \"ADJ\",\n\t\t\t\"vomited\": \"VERB\",\n\t\t\t\"rinascimento\": \"PROPN\",\n\t\t\t\"pinotage\": \"PROPN\",\n\t\t\t\"melbourne\": \"PROPN\",\n\t\t\t\"wander\": \"VERB\",\n\t\t\t\"jodud...@aol.com\": \"PROPN\",\n\t\t\t\"set\": \"VERB\",\n\t\t\t\"conquest\": \"PROPN\",\n\t\t\t\"cake\": \"NOUN\",\n\t\t\t\"outliers\": \"NOUN\",\n\t\t\t\"gain\": \"VERB\",\n\t\t\t\"hostesses\": \"NOUN\",\n\t\t\t\"el\": \"PROPN\",\n\t\t\t\"visibly\": \"ADV\",\n\t\t\t\"identifies\": \"VERB\",\n\t\t\t\"miracle\": \"NOUN\",\n\t\t\t\"job-with-prospects\": \"NOUN\",\n\t\t\t\"wisely\": \"ADV\",\n\t\t\t\"supporting\": \"VERB\",\n\t\t\t\"milder\": \"ADJ\",\n\t\t\t\"bilboa\": \"PROPN\",\n\t\t\t\"outdated\": \"ADJ\",\n\t\t\t\"redlined\": \"ADJ\",\n\t\t\t\"stronghold\": \"NOUN\",\n\t\t\t\"tragedy\": \"NOUN\",\n\t\t\t\"myanmar\": \"PROPN\",\n\t\t\t\"bolivia\": \"PROPN\",\n\t\t\t\"persuaded\": \"VERB\",\n\t\t\t\"late-\": \"ADV\",\n\t\t\t\"shankbone\": \"PROPN\",\n\t\t\t\"surrendering\": \"VERB\",\n\t\t\t\"zhou\": \"PROPN\",\n\t\t\t\"ghaza\": \"PROPN\",\n\t\t\t\"smock\": \"NOUN\",\n\t\t\t\"discussing\": \"VERB\",\n\t\t\t\"terrifying\": \"ADJ\",\n\t\t\t\"bendings\": \"NOUN\",\n\t\t\t\"6.5\": \"NUM\",\n\t\t\t\"#1\": \"NUM\",\n\t\t\t\"angie\": \"PROPN\",\n\t\t\t\"glock\": \"PROPN\",\n\t\t\t\"coop\": \"NOUN\",\n\t\t\t\"pursuers\": \"NOUN\",\n\t\t\t\"ride\": \"NOUN\",\n\t\t\t\"idleness\": \"NOUN\",\n\t\t\t\"o&m\": \"PROPN\",\n\t\t\t\"searched\": \"VERB\",\n\t\t\t\"indefinable\": \"ADJ\",\n\t\t\t\"lauralee\": \"PROPN\",\n\t\t\t\"conversation\": \"NOUN\",\n\t\t\t\"veined\": \"VERB\",\n\t\t\t\"describe\": \"VERB\",\n\t\t\t\"tai\": \"PROPN\",\n\t\t\t\"equivalent\": \"ADJ\",\n\t\t\t\"possesses\": \"VERB\",\n\t\t\t\"fernandel\": \"PROPN\",\n\t\t\t\"1.75\": \"NUM\",\n\t\t\t\"dignity\": \"NOUN\",\n\t\t\t\"curry\": \"NOUN\",\n\t\t\t\"magistrates\": \"NOUN\",\n\t\t\t\"suffolk\": \"PROPN\",\n\t\t\t\"14:14\": \"NUM\",\n\t\t\t\"downloading\": \"NOUN\",\n\t\t\t\"12/28\": \"NUM\",\n\t\t\t\"citations\": \"NOUN\",\n\t\t\t\"fresco\": \"NOUN\",\n\t\t\t\"identified\": \"VERB\",\n\t\t\t\"extended\": \"VERB\",\n\t\t\t\"unfriendly\": \"ADJ\",\n\t\t\t\"snowy\": \"ADJ\",\n\t\t\t\"mood\": \"NOUN\",\n\t\t\t\"pitt\": \"PROPN\",\n\t\t\t\"gnu\": \"NOUN\",\n\t\t\t\"cap-\": \"INTJ\",\n\t\t\t\"oversight\": \"NOUN\",\n\t\t\t\"devour\": \"VERB\",\n\t\t\t\"prestigious\": \"ADJ\",\n\t\t\t\"weals\": \"NOUN\",\n\t\t\t\"olives\": \"NOUN\",\n\t\t\t\"effaced\": \"VERB\",\n\t\t\t\"e.\": \"PROPN\",\n\t\t\t\"info\": \"NOUN\",\n\t\t\t\"induced\": \"VERB\",\n\t\t\t\"u2\": \"PROPN\",\n\t\t\t\"counterparts\": \"NOUN\",\n\t\t\t\"roughness\": \"NOUN\",\n\t\t\t\"heartening\": \"VERB\",\n\t\t\t\"df\": \"PROPN\",\n\t\t\t\"transactions\": \"NOUN\",\n\t\t\t\"’ll\": \"AUX\",\n\t\t\t\"substantive\": \"ADJ\",\n\t\t\t\"greatness\": \"NOUN\",\n\t\t\t\"upscale\": \"ADJ\",\n\t\t\t\"retrial\": \"NOUN\",\n\t\t\t\"http://www.wikihow.com/wikihow:contributions-to-charity\": \"PROPN\",\n\t\t\t\"rails\": \"NOUN\",\n\t\t\t\"adamson\": \"PROPN\",\n\t\t\t\"xishan\": \"PROPN\",\n\t\t\t\"pachomian\": \"ADJ\",\n\t\t\t\"avocado\": \"NOUN\",\n\t\t\t\"1938\": \"NUM\",\n\t\t\t\"remake\": \"NOUN\",\n\t\t\t\"articulating\": \"VERB\",\n\t\t\t\"affinity\": \"NOUN\",\n\t\t\t\"scatters\": \"NOUN\",\n\t\t\t\"32\": \"NUM\",\n\t\t\t\"1912\": \"NUM\",\n\t\t\t\"bandar\": \"PROPN\",\n\t\t\t\"adding\": \"VERB\",\n\t\t\t\"waterfalls\": \"NOUN\",\n\t\t\t\"burkes\": \"PROPN\",\n\t\t\t\"blakemore\": \"PROPN\",\n\t\t\t\"overrides\": \"VERB\",\n\t\t\t\"unbeatable\": \"ADJ\",\n\t\t\t\"soapy\": \"ADJ\",\n\t\t\t\"xbox\": \"PROPN\",\n\t\t\t\"fisher\": \"PROPN\",\n\t\t\t\"alert\": \"NOUN\",\n\t\t\t\"across\": \"ADP\",\n\t\t\t\"lake\": \"PROPN\",\n\t\t\t\"thurday\": \"PROPN\",\n\t\t\t\"litttle\": \"ADJ\",\n\t\t\t\"insurgents\": \"NOUN\",\n\t\t\t\"written\": \"VERB\",\n\t\t\t\"paine\": \"PROPN\",\n\t\t\t\"wb\": \"PROPN\",\n\t\t\t\"refusal\": \"NOUN\",\n\t\t\t\"journeys\": \"NOUN\",\n\t\t\t\"pelt\": \"NOUN\",\n\t\t\t\"hizbullah\": \"PROPN\",\n\t\t\t\"2\": \"NUM\",\n\t\t\t\"negotiator\": \"NOUN\",\n\t\t\t\"geertz\": \"PROPN\",\n\t\t\t\"infidels\": \"NOUN\",\n\t\t\t\"inquired\": \"VERB\",\n\t\t\t\"inserts\": \"NOUN\",\n\t\t\t\"patrizia\": \"PROPN\",\n\t\t\t\"‘cuz\": \"SCONJ\",\n\t\t\t\"mayes\": \"PROPN\",\n\t\t\t\"flown\": \"VERB\",\n\t\t\t\"blast\": \"NOUN\",\n\t\t\t\"craftsmen\": \"NOUN\",\n\t\t\t\"alt.animals.rights.promotion\": \"NOUN\",\n\t\t\t\"trimmers\": \"NOUN\",\n\t\t\t\"farthest\": \"ADJ\",\n\t\t\t\"structurally\": \"ADV\",\n\t\t\t\"morning\": \"NOUN\",\n\t\t\t\"sodden\": \"ADJ\",\n\t\t\t\"mother\": \"NOUN\",\n\t\t\t\"yellowstone\": \"PROPN\",\n\t\t\t\"distractions\": \"NOUN\",\n\t\t\t\"perceived\": \"VERB\",\n\t\t\t\"allegory\": \"NOUN\",\n\t\t\t\"climate\": \"NOUN\",\n\t\t\t\"conduct\": \"VERB\",\n\t\t\t\"))\": \"PUNCT\",\n\t\t\t\"browser\": \"NOUN\",\n\t\t\t\"urged\": \"VERB\",\n\t\t\t\"combat\": \"NOUN\",\n\t\t\t\"sweating\": \"VERB\",\n\t\t\t\"łódzkie\": \"PROPN\",\n\t\t\t\"dots\": \"NOUN\",\n\t\t\t\"origin\": \"NOUN\",\n\t\t\t\"relatively\": \"ADV\",\n\t\t\t\"gelatin\": \"NOUN\",\n\t\t\t\"retaking\": \"VERB\",\n\t\t\t\"revive\": \"VERB\",\n\t\t\t\"pike\": \"PROPN\",\n\t\t\t\"occurrence\": \"NOUN\",\n\t\t\t\"2:25\": \"NUM\",\n\t\t\t\"ant\": \"NOUN\",\n\t\t\t\"follows\": \"VERB\",\n\t\t\t\"anatomy\": \"NOUN\",\n\t\t\t\"buckingham\": \"PROPN\",\n\t\t\t\"viral\": \"ADJ\",\n\t\t\t\"kenyan\": \"ADJ\",\n\t\t\t\"knife\": \"NOUN\",\n\t\t\t\"http://www.quantcast.com/wikihow.com\": \"PROPN\",\n\t\t\t\"bwana\": \"NOUN\",\n\t\t\t\"jumpy\": \"ADJ\",\n\t\t\t\"subset\": \"NOUN\",\n\t\t\t\"else\": \"ADV\",\n\t\t\t\"overstay\": \"VERB\",\n\t\t\t\"slithers\": \"VERB\",\n\t\t\t\"253\": \"NUM\",\n\t\t\t\"descriptions\": \"NOUN\",\n\t\t\t\"#health\": \"PROPN\",\n\t\t\t\"parry\": \"PROPN\",\n\t\t\t\"cabbages\": \"NOUN\",\n\t\t\t\"argentina\": \"PROPN\",\n\t\t\t\"hints\": \"NOUN\",\n\t\t\t\"vague\": \"ADJ\",\n\t\t\t\"manic\": \"PROPN\",\n\t\t\t\"roadway\": \"NOUN\",\n\t\t\t\"ecommerce\": \"NOUN\",\n\t\t\t\"713-793-1429\": \"NUM\",\n\t\t\t\"tauris\": \"PROPN\",\n\t\t\t\"bellevue\": \"PROPN\",\n\t\t\t\"spend\": \"VERB\",\n\t\t\t\"roasted\": \"VERB\",\n\t\t\t\"rebuild\": \"VERB\",\n\t\t\t\"expresses\": \"VERB\",\n\t\t\t\"lexicographic\": \"ADJ\",\n\t\t\t\"http://www.newsday.com/news/opinion/ny-vpnasa054135614feb05,0,5979821.story?coll=ny-editorials-headlines\": \"PROPN\",\n\t\t\t\"experiences\": \"NOUN\",\n\t\t\t\"houseware\": \"NOUN\",\n\t\t\t\"smuggle\": \"VERB\",\n\t\t\t\"under\": \"ADP\",\n\t\t\t\"_report.xml\": \"PROPN\",\n\t\t\t\"tco\": \"PROPN\",\n\t\t\t\"rotarua\": \"PROPN\",\n\t\t\t\"11:15:11\": \"NUM\",\n\t\t\t\"darla\": \"PROPN\",\n\t\t\t\"3.\": \"NUM\",\n\t\t\t\"corpora\": \"NOUN\",\n\t\t\t\"more\": \"ADV\",\n\t\t\t\"ave\": \"PROPN\",\n\t\t\t\"stairs\": \"NOUN\",\n\t\t\t\"substantial\": \"ADJ\",\n\t\t\t\"http://www.ibiblio.org/expo/soviet.exhibit/chernobyl.html\": \"PROPN\",\n\t\t\t\"weathertrade\": \"PROPN\",\n\t\t\t\"gut\": \"NOUN\",\n\t\t\t\"cox\": \"PROPN\",\n\t\t\t\"penines\": \"PROPN\",\n\t\t\t\"tremble\": \"VERB\",\n\t\t\t\"lange\": \"PROPN\",\n\t\t\t\"moretti\": \"PROPN\",\n\t\t\t\"trimester\": \"NOUN\",\n\t\t\t\"dysfunction\": \"NOUN\",\n\t\t\t\"entertainment\": \"NOUN\",\n\t\t\t\"'07\": \"NUM\",\n\t\t\t\"tattoos\": \"NOUN\",\n\t\t\t\"hawkish\": \"ADJ\",\n\t\t\t\"partner\": \"NOUN\",\n\t\t\t\"donations\": \"NOUN\",\n\t\t\t\"monumental\": \"ADJ\",\n\t\t\t\"convience\": \"NOUN\",\n\t\t\t\"complete\": \"ADJ\",\n\t\t\t\"kcna\": \"PROPN\",\n\t\t\t\"nemec\": \"PROPN\",\n\t\t\t\"workday\": \"NOUN\",\n\t\t\t\"978\": \"NUM\",\n\t\t\t\"1590\": \"NUM\",\n\t\t\t\"ahead\": \"ADV\",\n\t\t\t\"freaky\": \"ADJ\",\n\t\t\t\"few\": \"ADJ\",\n\t\t\t\"comfty\": \"ADJ\",\n\t\t\t\"jared\": \"PROPN\",\n\t\t\t\"unbeaten\": \"ADJ\",\n\t\t\t\"naqsh-e\": \"PROPN\",\n\t\t\t\"universities\": \"NOUN\",\n\t\t\t\"profanity\": \"NOUN\",\n\t\t\t\"privileged\": \"ADJ\",\n\t\t\t\"forger\": \"NOUN\",\n\t\t\t\"maeena\": \"PROPN\",\n\t\t\t\"purple-faced\": \"ADJ\",\n\t\t\t\"non-fixed\": \"ADJ\",\n\t\t\t\"half-dressed\": \"VERB\",\n\t\t\t\"overfed\": \"ADJ\",\n\t\t\t\"08:58\": \"NUM\",\n\t\t\t\"auerbach\": \"PROPN\",\n\t\t\t\"cinnamon\": \"NOUN\",\n\t\t\t\"campaigns\": \"NOUN\",\n\t\t\t\"credentials\": \"NOUN\",\n\t\t\t\"salama\": \"PROPN\",\n\t\t\t\"cheating\": \"NOUN\",\n\t\t\t\"f*ed\": \"VERB\",\n\t\t\t\"constraint\": \"NOUN\",\n\t\t\t\"sponsored\": \"VERB\",\n\t\t\t\"moaning\": \"VERB\",\n\t\t\t\"keeper\": \"NOUN\",\n\t\t\t\"underwear\": \"NOUN\",\n\t\t\t\"ambiance\": \"NOUN\",\n\t\t\t\"qapu\": \"PROPN\",\n\t\t\t\"midterms\": \"NOUN\",\n\t\t\t\"crawfish\": \"NOUN\",\n\t\t\t\"recruitment\": \"NOUN\",\n\t\t\t\"sociodemographic\": \"ADJ\",\n\t\t\t\"bounce\": \"NOUN\",\n\t\t\t\"thrashed\": \"VERB\",\n\t\t\t\"dial\": \"VERB\",\n\t\t\t\"ambulance\": \"NOUN\",\n\t\t\t\"#descriptive\": \"PROPN\",\n\t\t\t\"quo\": \"NOUN\",\n\t\t\t\"detailing\": \"VERB\",\n\t\t\t\"happening\": \"VERB\",\n\t\t\t\"pagan\": \"ADJ\",\n\t\t\t\"monroe\": \"PROPN\",\n\t\t\t\"scattered\": \"VERB\",\n\t\t\t\"pin-heads\": \"NOUN\",\n\t\t\t\"holdings\": \"NOUN\",\n\t\t\t\"functions\": \"NOUN\",\n\t\t\t\"deserve\": \"VERB\",\n\t\t\t\"grecian\": \"ADJ\",\n\t\t\t\"over-rated\": \"ADJ\",\n\t\t\t\"becouse\": \"SCONJ\",\n\t\t\t\"dpr\": \"NOUN\",\n\t\t\t\"françois\": \"PROPN\",\n\t\t\t\"encompass\": \"VERB\",\n\t\t\t\"disaster\": \"NOUN\",\n\t\t\t\"bolivar\": \"ADJ\",\n\t\t\t\"atlanta\": \"PROPN\",\n\t\t\t\"types\": \"NOUN\",\n\t\t\t\"financials\": \"NOUN\",\n\t\t\t\"battered\": \"VERB\",\n\t\t\t\"constructive\": \"ADJ\",\n\t\t\t\"surname\": \"NOUN\",\n\t\t\t\"mahatma\": \"PROPN\",\n\t\t\t\"theoretical\": \"ADJ\",\n\t\t\t\"an\": \"DET\",\n\t\t\t\"kickstarter\": \"PROPN\",\n\t\t\t\"ear\": \"NOUN\",\n\t\t\t\"sarcastic\": \"ADJ\",\n\t\t\t\"nato\": \"PROPN\",\n\t\t\t\"tree\": \"NOUN\",\n\t\t\t\"sea-reach\": \"NOUN\",\n\t\t\t\"uncredited\": \"ADJ\",\n\t\t\t\"staves\": \"NOUN\",\n\t\t\t\"ressam\": \"PROPN\",\n\t\t\t\"attended\": \"VERB\",\n\t\t\t\"difficult\": \"ADJ\",\n\t\t\t\"inhaling\": \"NOUN\",\n\t\t\t\"guaranteed\": \"VERB\",\n\t\t\t\"breathed\": \"VERB\",\n\t\t\t\"seat\": \"NOUN\",\n\t\t\t\"teething\": \"VERB\",\n\t\t\t\"manufacture\": \"VERB\",\n\t\t\t\"gentleman\": \"NOUN\",\n\t\t\t\"shorn\": \"VERB\",\n\t\t\t\"tiny\": \"ADJ\",\n\t\t\t\"himself\": \"PRON\",\n\t\t\t\"lawrence\": \"PROPN\",\n\t\t\t\"sides\": \"NOUN\",\n\t\t\t\"brickell\": \"PROPN\",\n\t\t\t\"built\": \"VERB\",\n\t\t\t\"skillsets\": \"NOUN\",\n\t\t\t\"barclays\": \"PROPN\",\n\t\t\t\"claiming\": \"VERB\",\n\t\t\t\"co-star\": \"NOUN\",\n\t\t\t\"yams\": \"NOUN\",\n\t\t\t\"elaborately\": \"ADV\",\n\t\t\t\"cheque\": \"NOUN\",\n\t\t\t\"pursed\": \"VERB\",\n\t\t\t\"vet\": \"NOUN\",\n\t\t\t\"frustration\": \"NOUN\",\n\t\t\t\"musculature\": \"NOUN\",\n\t\t\t\"vm\": \"PROPN\",\n\t\t\t\"profit\": \"NOUN\",\n\t\t\t\"unfortunately\": \"ADV\",\n\t\t\t\"saintly\": \"ADJ\",\n\t\t\t\"cabins\": \"NOUN\",\n\t\t\t\"moor\": \"NOUN\",\n\t\t\t\"275\": \"NUM\",\n\t\t\t\"customs\": \"NOUN\",\n\t\t\t\"holder\": \"NOUN\",\n\t\t\t\"water-men\": \"NOUN\",\n\t\t\t\"exper-\": \"VERB\",\n\t\t\t\"1963\": \"NUM\",\n\t\t\t\"unbearable\": \"ADJ\",\n\t\t\t\"classics\": \"NOUN\",\n\t\t\t\"08:30\": \"NUM\",\n\t\t\t\"menzies\": \"PROPN\",\n\t\t\t\"anchored\": \"VERB\",\n\t\t\t\"rouse\": \"PROPN\",\n\t\t\t\"tearful\": \"ADJ\",\n\t\t\t\"less\": \"ADV\",\n\t\t\t\"800/711-8000\": \"NUM\",\n\t\t\t\"hour\": \"NOUN\",\n\t\t\t\"judgments\": \"NOUN\",\n\t\t\t\"pseudonym\": \"NOUN\",\n\t\t\t\"hadid\": \"PROPN\",\n\t\t\t\"casper\": \"PROPN\",\n\t\t\t\"mooring\": \"NOUN\",\n\t\t\t\"revolted\": \"VERB\",\n\t\t\t\"handful\": \"NOUN\",\n\t\t\t\"emancipate\": \"VERB\",\n\t\t\t\"620-294-1909\": \"NUM\",\n\t\t\t\"...............\": \"PUNCT\",\n\t\t\t\"tackling\": \"VERB\",\n\t\t\t\"warms\": \"VERB\",\n\t\t\t\"securing\": \"VERB\",\n\t\t\t\"pages\": \"NOUN\",\n\t\t\t\"gaul\": \"PROPN\",\n\t\t\t\"manzano\": \"PROPN\",\n\t\t\t\"devastating\": \"ADJ\",\n\t\t\t\"carries\": \"VERB\",\n\t\t\t\"investors\": \"NOUN\",\n\t\t\t\"medal\": \"NOUN\",\n\t\t\t\"replacement\": \"NOUN\",\n\t\t\t\"intuitively\": \"ADV\",\n\t\t\t\"merest\": \"ADJ\",\n\t\t\t\"varanasi\": \"PROPN\",\n\t\t\t\"sorting\": \"VERB\",\n\t\t\t\"who\": \"PRON\",\n\t\t\t\"mega\": \"NOUN\",\n\t\t\t\"bread\": \"NOUN\",\n\t\t\t\"dairy\": \"NOUN\",\n\t\t\t\"pranks\": \"NOUN\",\n\t\t\t\"branco\": \"PROPN\",\n\t\t\t\"glut\": \"NOUN\",\n\t\t\t\"reviews\": \"NOUN\",\n\t\t\t\"calories\": \"NOUN\",\n\t\t\t\"develop\": \"VERB\",\n\t\t\t\"islamists\": \"NOUN\",\n\t\t\t\"strangers\": \"NOUN\",\n\t\t\t\"definately\": \"ADV\",\n\t\t\t\"reins\": \"NOUN\",\n\t\t\t\"seaports\": \"NOUN\",\n\t\t\t\"gram\": \"PROPN\",\n\t\t\t\"stipes\": \"NOUN\",\n\t\t\t\"certificates\": \"NOUN\",\n\t\t\t\"moscow\": \"PROPN\",\n\t\t\t\"pollutant\": \"NOUN\",\n\t\t\t\"kwong\": \"PROPN\",\n\t\t\t\"05\": \"NUM\",\n\t\t\t\"wazed\": \"PROPN\",\n\t\t\t\"videotape\": \"NOUN\",\n\t\t\t\"communistic\": \"ADJ\",\n\t\t\t\"ami\": \"PROPN\",\n\t\t\t\"early\": \"ADJ\",\n\t\t\t\"ale\": \"NOUN\",\n\t\t\t\"wax\": \"NOUN\",\n\t\t\t\"outlet\": \"NOUN\",\n\t\t\t\"chords\": \"NOUN\",\n\t\t\t\"cobbled\": \"ADJ\",\n\t\t\t\"spare\": \"ADJ\",\n\t\t\t\"column\": \"NOUN\",\n\t\t\t\"bn\": \"NUM\",\n\t\t\t\"stalled\": \"VERB\",\n\t\t\t\"sny\": \"PROPN\",\n\t\t\t\"warmer\": \"ADJ\",\n\t\t\t\"ballerina\": \"NOUN\",\n\t\t\t\"comforting\": \"ADJ\",\n\t\t\t\"incompatible\": \"ADJ\",\n\t\t\t\"party\": \"NOUN\",\n\t\t\t\"noises\": \"NOUN\",\n\t\t\t\"vaccine\": \"NOUN\",\n\t\t\t\"disposed\": \"VERB\",\n\t\t\t\"opinons\": \"NOUN\",\n\t\t\t\"schonwetter\": \"PROPN\",\n\t\t\t\"exporters\": \"NOUN\",\n\t\t\t\"fla.\": \"PROPN\",\n\t\t\t\"petrol\": \"NOUN\",\n\t\t\t\"rode\": \"VERB\",\n\t\t\t\"honored\": \"ADJ\",\n\t\t\t\"probation\": \"NOUN\",\n\t\t\t\"speeches\": \"NOUN\",\n\t\t\t\"winks\": \"NOUN\",\n\t\t\t\"pondered\": \"VERB\",\n\t\t\t\"discovers\": \"VERB\",\n\t\t\t\"datos\": \"PROPN\",\n\t\t\t\"headboard\": \"NOUN\",\n\t\t\t\"crows\": \"NOUN\",\n\t\t\t\"overpriced\": \"ADJ\",\n\t\t\t\"altoona\": \"PROPN\",\n\t\t\t\"hairstyling\": \"NOUN\",\n\t\t\t\"gangster\": \"NOUN\",\n\t\t\t\"twencen\": \"PROPN\",\n\t\t\t\"servings\": \"NOUN\",\n\t\t\t\"delicacy\": \"NOUN\",\n\t\t\t\"mousse\": \"NOUN\",\n\t\t\t\"anyhow\": \"ADV\",\n\t\t\t\"regarded\": \"VERB\",\n\t\t\t\"immortals\": \"PROPN\",\n\t\t\t\"pre-arrest\": \"ADJ\",\n\t\t\t\"buddhists\": \"PROPN\",\n\t\t\t\"burp\": \"NOUN\",\n\t\t\t\"perez\": \"PROPN\",\n\t\t\t\"receive\": \"VERB\",\n\t\t\t\"maintenance\": \"NOUN\",\n\t\t\t\"1550\": \"NUM\",\n\t\t\t\"1694\": \"NUM\",\n\t\t\t\"willis\": \"PROPN\",\n\t\t\t\"suzanne\": \"PROPN\",\n\t\t\t\"tumor\": \"NOUN\",\n\t\t\t\"revved\": \"VERB\",\n\t\t\t\"subjective\": \"ADJ\",\n\t\t\t\"northumberland\": \"PROPN\",\n\t\t\t\"educational\": \"ADJ\",\n\t\t\t\"enthusiasm\": \"NOUN\",\n\t\t\t\"solas\": \"PROPN\",\n\t\t\t\"areas\": \"NOUN\",\n\t\t\t\"interior\": \"ADJ\",\n\t\t\t\"frank\": \"PROPN\",\n\t\t\t\"drollery\": \"NOUN\",\n\t\t\t\"reservoirs\": \"NOUN\",\n\t\t\t\"linguists\": \"NOUN\",\n\t\t\t\"yell\": \"VERB\",\n\t\t\t\"jupiter\": \"PROPN\",\n\t\t\t\"holofernes\": \"PROPN\",\n\t\t\t\"uncultured\": \"ADJ\",\n\t\t\t\"misinform\": \"VERB\",\n\t\t\t\"acuity\": \"NOUN\",\n\t\t\t\"cute\": \"ADJ\",\n\t\t\t\"absorbing\": \"VERB\",\n\t\t\t\"reproduction\": \"NOUN\",\n\t\t\t\"sleeping\": \"VERB\",\n\t\t\t\"minicab\": \"NOUN\",\n\t\t\t\"flirty\": \"ADJ\",\n\t\t\t\"methodological\": \"ADJ\",\n\t\t\t\"stowed\": \"VERB\",\n\t\t\t\"punchlines\": \"NOUN\",\n\t\t\t\"sadistically\": \"ADV\",\n\t\t\t\"insect\": \"NOUN\",\n\t\t\t\"online?u=mayursha&m=g&t=1\": \"PROPN\",\n\t\t\t\"bicycling\": \"NOUN\",\n\t\t\t\"greetings\": \"NOUN\",\n\t\t\t\"flourish\": \"VERB\",\n\t\t\t\"aberdeenshire\": \"PROPN\",\n\t\t\t\"elaborate\": \"ADJ\",\n\t\t\t\"regulation\": \"NOUN\",\n\t\t\t\"yorkshire\": \"PROPN\",\n\t\t\t\"spellbooks\": \"NOUN\",\n\t\t\t\"rooftops\": \"NOUN\",\n\t\t\t\"suny\": \"PROPN\",\n\t\t\t\"murasaki\": \"PROPN\",\n\t\t\t\"renting\": \"VERB\",\n\t\t\t\"storefront\": \"NOUN\",\n\t\t\t\"herbalist\": \"NOUN\",\n\t\t\t\"signifcant\": \"ADJ\",\n\t\t\t\"sinica\": \"PROPN\",\n\t\t\t\"protests\": \"NOUN\",\n\t\t\t\"burner\": \"NOUN\",\n\t\t\t\"yiu\": \"PROPN\",\n\t\t\t\"titman\": \"PROPN\",\n\t\t\t\"cravings\": \"NOUN\",\n\t\t\t\"dying\": \"VERB\",\n\t\t\t\"emigrate\": \"VERB\",\n\t\t\t\"siberia\": \"PROPN\",\n\t\t\t\"#44\": \"NUM\",\n\t\t\t\"limitless\": \"ADJ\",\n\t\t\t\"gourmet\": \"NOUN\",\n\t\t\t\"wallen\": \"PROPN\",\n\t\t\t\"lurks\": \"VERB\",\n\t\t\t\"narrow\": \"ADJ\",\n\t\t\t\"pamphlet\": \"NOUN\",\n\t\t\t\"updo\": \"NOUN\",\n\t\t\t\"coronavirus\": \"NOUN\",\n\t\t\t\"rhodesian\": \"ADJ\",\n\t\t\t\"bowlders\": \"NOUN\",\n\t\t\t\"techniques\": \"NOUN\",\n\t\t\t\"hull\": \"NOUN\",\n\t\t\t\"ot\": \"PART\",\n\t\t\t\"freighters\": \"NOUN\",\n\t\t\t\"butter\": \"NOUN\",\n\t\t\t\"cdec\": \"PROPN\",\n\t\t\t\"nasty\": \"ADJ\",\n\t\t\t\"mackinaw\": \"PROPN\",\n\t\t\t\"vlogs\": \"NOUN\",\n\t\t\t\"complementary\": \"ADJ\",\n\t\t\t\"medalled\": \"ADJ\",\n\t\t\t\"sweeping\": \"VERB\",\n\t\t\t\"théâtre\": \"PROPN\",\n\t\t\t\"grrrrrrr\": \"INTJ\",\n\t\t\t\"mysterys\": \"NOUN\",\n\t\t\t\"circus\": \"PROPN\",\n\t\t\t\"granger\": \"PROPN\",\n\t\t\t\"background\": \"NOUN\",\n\t\t\t\"offsetting\": \"VERB\",\n\t\t\t\"pawing\": \"VERB\",\n\t\t\t\"deng\": \"PROPN\",\n\t\t\t\"transparency\": \"NOUN\",\n\t\t\t\"outcast\": \"ADJ\",\n\t\t\t\"snoozing\": \"VERB\",\n\t\t\t\"ancient\": \"ADJ\",\n\t\t\t\"hubble\": \"PROPN\",\n\t\t\t\"nerf\": \"NOUN\",\n\t\t\t\"enlarge\": \"VERB\",\n\t\t\t\"sinners\": \"PROPN\",\n\t\t\t\"rush\": \"VERB\",\n\t\t\t\"chased\": \"VERB\",\n\t\t\t\"follow\": \"VERB\",\n\t\t\t\"vividly\": \"ADV\",\n\t\t\t\"529999420000\": \"NUM\",\n\t\t\t\"elegant\": \"ADJ\",\n\t\t\t\"bitmaps\": \"NOUN\",\n\t\t\t\"confines\": \"NOUN\",\n\t\t\t\"skirmish\": \"NOUN\",\n\t\t\t\"premonition\": \"NOUN\",\n\t\t\t\"officers\": \"NOUN\",\n\t\t\t\"nightmare\": \"NOUN\",\n\t\t\t\"dat\": \"DET\",\n\t\t\t\"enpower\": \"PROPN\",\n\t\t\t\"consequences\": \"NOUN\",\n\t\t\t\"510-642-5145\": \"NUM\",\n\t\t\t\"curr\": \"PROPN\",\n\t\t\t\"pritzker\": \"PROPN\",\n\t\t\t\"transactional\": \"ADJ\",\n\t\t\t\"prices\": \"NOUN\",\n\t\t\t\"remodel\": \"NOUN\",\n\t\t\t\"crackdown\": \"NOUN\",\n\t\t\t\"valiant\": \"ADJ\",\n\t\t\t\"acknowledge\": \"VERB\",\n\t\t\t\"herself\": \"PRON\",\n\t\t\t\"variability\": \"NOUN\",\n\t\t\t\"islamism\": \"PROPN\",\n\t\t\t\"create\": \"VERB\",\n\t\t\t\"admiral\": \"ADJ\",\n\t\t\t\"stravinsky\": \"PROPN\",\n\t\t\t\"kosher\": \"ADJ\",\n\t\t\t\"aww\": \"INTJ\",\n\t\t\t\"kant\": \"PROPN\",\n\t\t\t\"empirical\": \"ADJ\",\n\t\t\t\"01:00:51\": \"NUM\",\n\t\t\t\"sha'ananim\": \"PROPN\",\n\t\t\t\"nk\": \"PROPN\",\n\t\t\t\"pretend\": \"VERB\",\n\t\t\t\"cooper\": \"PROPN\",\n\t\t\t\"shark\": \"NOUN\",\n\t\t\t\"rectangle\": \"NOUN\",\n\t\t\t\"disjoint\": \"ADJ\",\n\t\t\t\"youngsters\": \"NOUN\",\n\t\t\t\"algonquin\": \"PROPN\",\n\t\t\t\"validate\": \"VERB\",\n\t\t\t\"thrilling\": \"VERB\",\n\t\t\t\"perfumed\": \"ADJ\",\n\t\t\t\"starbucks\": \"PROPN\",\n\t\t\t\"venue\": \"NOUN\",\n\t\t\t\"pottstown\": \"PROPN\",\n\t\t\t\"shut\": \"VERB\",\n\t\t\t\"dec\": \"PROPN\",\n\t\t\t\"chances\": \"NOUN\",\n\t\t\t\"investment\": \"NOUN\",\n\t\t\t\"antipasti\": \"NOUN\",\n\t\t\t\"sec.\": \"NOUN\",\n\t\t\t\"humanists\": \"NOUN\",\n\t\t\t\"translated\": \"VERB\",\n\t\t\t\"photographs\": \"NOUN\",\n\t\t\t\"rockers\": \"PROPN\",\n\t\t\t\"drake\": \"PROPN\",\n\t\t\t\"7:30\": \"NUM\",\n\t\t\t\"taikoo\": \"PROPN\",\n\t\t\t\"you\": \"PRON\",\n\t\t\t\"burns\": \"NOUN\",\n\t\t\t\"atomic\": \"ADJ\",\n\t\t\t\"insider\": \"NOUN\",\n\t\t\t\"strangle\": \"VERB\",\n\t\t\t\"$ervice\": \"NOUN\",\n\t\t\t\"biblically\": \"ADV\",\n\t\t\t\"archaeological\": \"ADJ\",\n\t\t\t\"imaginary\": \"ADJ\",\n\t\t\t\"benjamin\": \"PROPN\",\n\t\t\t\"huber\": \"PROPN\",\n\t\t\t\"25.00\": \"NUM\",\n\t\t\t\"curating\": \"VERB\",\n\t\t\t\"mingo\": \"PROPN\",\n\t\t\t\"theories\": \"NOUN\",\n\t\t\t\"quebec\": \"PROPN\",\n\t\t\t\"infernale\": \"PROPN\",\n\t\t\t\"biasing\": \"VERB\",\n\t\t\t\"reconsider\": \"VERB\",\n\t\t\t\"coordinator\": \"NOUN\",\n\t\t\t\"frustrated\": \"ADJ\",\n\t\t\t\"prabhakaran\": \"PROPN\",\n\t\t\t\"islets\": \"NOUN\",\n\t\t\t\"shanlyn\": \"PROPN\",\n\t\t\t\"quantitatively\": \"ADV\",\n\t\t\t\"tranekær\": \"PROPN\",\n\t\t\t\"arabian\": \"ADJ\",\n\t\t\t\"marginalized\": \"VERB\",\n\t\t\t\"yvette\": \"PROPN\",\n\t\t\t\"scream\": \"NOUN\",\n\t\t\t\"ohm\": \"PROPN\",\n\t\t\t\"gardens\": \"NOUN\",\n\t\t\t\"dad\": \"NOUN\",\n\t\t\t\"rewards\": \"NOUN\",\n\t\t\t\"http://www.chernobyl.org.uk/page2.htm\": \"PROPN\",\n\t\t\t\"effectiveness\": \"NOUN\",\n\t\t\t\"inhabiting\": \"VERB\",\n\t\t\t\"god\": \"PROPN\",\n\t\t\t\"greeted\": \"VERB\",\n\t\t\t\"eaton\": \"PROPN\",\n\t\t\t\"tanins\": \"NOUN\",\n\t\t\t\"possessed\": \"VERB\",\n\t\t\t\"herat\": \"PROPN\",\n\t\t\t\"avenging\": \"ADJ\",\n\t\t\t\"caffeine\": \"NOUN\",\n\t\t\t\"rocca\": \"PROPN\",\n\t\t\t\"steakhouse\": \"NOUN\",\n\t\t\t\"starred\": \"VERB\",\n\t\t\t\"harris\": \"PROPN\",\n\t\t\t\"byrne\": \"PROPN\",\n\t\t\t\"handling\": \"VERB\",\n\t\t\t\"diagrams\": \"NOUN\",\n\t\t\t\"baggage\": \"NOUN\",\n\t\t\t\"speaker\": \"NOUN\",\n\t\t\t\"conceded\": \"VERB\",\n\t\t\t\"hiller\": \"PROPN\",\n\t\t\t\"tragically\": \"ADV\",\n\t\t\t\"desire\": \"NOUN\",\n\t\t\t\"menger\": \"PROPN\",\n\t\t\t\"wealth\": \"NOUN\",\n\t\t\t\"80119\": \"NUM\",\n\t\t\t\"relinquished\": \"VERB\",\n\t\t\t\"lorne\": \"PROPN\",\n\t\t\t\"reimbursable\": \"ADJ\",\n\t\t\t\"sniffing\": \"VERB\",\n\t\t\t\"spoil\": \"VERB\",\n\t\t\t\"erratic\": \"ADJ\",\n\t\t\t\"shades\": \"NOUN\",\n\t\t\t\"glazed\": \"VERB\",\n\t\t\t\"shafts\": \"NOUN\",\n\t\t\t\"cramp\": \"NOUN\",\n\t\t\t\"mississippi\": \"PROPN\",\n\t\t\t\"hoarier\": \"ADJ\",\n\t\t\t\"543\": \"NUM\",\n\t\t\t\"gratton\": \"PROPN\",\n\t\t\t\"lifting\": \"VERB\",\n\t\t\t\"hilltop\": \"NOUN\",\n\t\t\t\"fragment\": \"NOUN\",\n\t\t\t\"90th\": \"ADJ\",\n\t\t\t\"undervalued\": \"VERB\",\n\t\t\t\"felicity\": \"NOUN\",\n\t\t\t\"western\": \"ADJ\",\n\t\t\t\"rafael\": \"PROPN\",\n\t\t\t\"daniela\": \"PROPN\",\n\t\t\t\"depart\": \"VERB\",\n\t\t\t\"mayors\": \"NOUN\",\n\t\t\t\"eve\": \"PROPN\",\n\t\t\t\"nance\": \"PROPN\",\n\t\t\t\"unreliable\": \"ADJ\",\n\t\t\t\"turano\": \"PROPN\",\n\t\t\t\"physiotherapists\": \"NOUN\",\n\t\t\t\"illegally\": \"ADV\",\n\t\t\t\"tweeted\": \"VERB\",\n\t\t\t\"disarmament\": \"NOUN\",\n\t\t\t\"dependency\": \"NOUN\",\n\t\t\t\"cérebro\": \"PROPN\",\n\t\t\t\"charges\": \"NOUN\",\n\t\t\t\"stoa\": \"PROPN\",\n\t\t\t\"predicts\": \"VERB\",\n\t\t\t\"closer\": \"ADJ\",\n\t\t\t\"box-like\": \"ADJ\",\n\t\t\t\"activate\": \"VERB\",\n\t\t\t\"jones\": \"PROPN\",\n\t\t\t\"aspects\": \"NOUN\",\n\t\t\t\"arrest\": \"NOUN\",\n\t\t\t\"40,500\": \"NUM\",\n\t\t\t\"vets\": \"NOUN\",\n\t\t\t\"stratosphere\": \"NOUN\",\n\t\t\t\"folks\": \"NOUN\",\n\t\t\t\"bouts\": \"NOUN\",\n\t\t\t\"assignments\": \"NOUN\",\n\t\t\t\"submits\": \"VERB\",\n\t\t\t\"professionally\": \"ADV\",\n\t\t\t\"modalities\": \"NOUN\",\n\t\t\t\"confiscated\": \"VERB\",\n\t\t\t\"cockpits\": \"NOUN\",\n\t\t\t\"pakistani\": \"ADJ\",\n\t\t\t\"express\": \"VERB\",\n\t\t\t\"squawking\": \"VERB\",\n\t\t\t\"canadians\": \"PROPN\",\n\t\t\t\"welcome\": \"INTJ\",\n\t\t\t\"connotations\": \"NOUN\",\n\t\t\t\"deprecating\": \"ADJ\",\n\t\t\t\"tobias\": \"PROPN\",\n\t\t\t\"carolina\": \"PROPN\",\n\t\t\t\"diseases\": \"NOUN\",\n\t\t\t\"ornamented\": \"VERB\",\n\t\t\t\"oath\": \"NOUN\",\n\t\t\t\"pince-nez\": \"NOUN\",\n\t\t\t\"explosives\": \"NOUN\",\n\t\t\t\"comics\": \"NOUN\",\n\t\t\t\"doctrine\": \"NOUN\",\n\t\t\t\"gratification\": \"PROPN\",\n\t\t\t\"communicate\": \"VERB\",\n\t\t\t\"libyan\": \"ADJ\",\n\t\t\t\"55\": \"NUM\",\n\t\t\t\"mush\": \"NOUN\",\n\t\t\t\"1542\": \"NUM\",\n\t\t\t\"kay\": \"PROPN\",\n\t\t\t\"borrow\": \"VERB\",\n\t\t\t\"staggering\": \"ADJ\",\n\t\t\t\"timid\": \"ADJ\",\n\t\t\t\"experimental\": \"ADJ\",\n\t\t\t\"08:38\": \"NUM\",\n\t\t\t\"mangers\": \"NOUN\",\n\t\t\t\"needlework\": \"NOUN\",\n\t\t\t\"gals\": \"NOUN\",\n\t\t\t\"effacing\": \"VERB\",\n\t\t\t\"misanthropy\": \"NOUN\",\n\t\t\t\"subfolders\": \"NOUN\",\n\t\t\t\"agatha\": \"PROPN\",\n\t\t\t\"gish\": \"PROPN\",\n\t\t\t\"european\": \"ADJ\",\n\t\t\t\"bent\": \"VERB\",\n\t\t\t\"motorways\": \"NOUN\",\n\t\t\t\"wee\": \"ADJ\",\n\t\t\t\"gehenna\": \"PROPN\",\n\t\t\t\"amusing\": \"ADJ\",\n\t\t\t\"mobilised\": \"VERB\",\n\t\t\t\"1087\": \"NUM\",\n\t\t\t\"stutenberg\": \"PROPN\",\n\t\t\t\"shops\": \"NOUN\",\n\t\t\t\"evolving\": \"VERB\",\n\t\t\t\"berry\": \"PROPN\",\n\t\t\t\"ally\": \"NOUN\",\n\t\t\t\"accomplishments\": \"NOUN\",\n\t\t\t\"p.s.\": \"NOUN\",\n\t\t\t\"16.4\": \"NUM\",\n\t\t\t\"gotten\": \"VERB\",\n\t\t\t\"hom\": \"PROPN\",\n\t\t\t\"fulltime\": \"ADV\",\n\t\t\t\"flickered\": \"VERB\",\n\t\t\t\"immunity\": \"NOUN\",\n\t\t\t\"rather\": \"ADV\",\n\t\t\t\"1580\": \"NUM\",\n\t\t\t\"18th\": \"ADJ\",\n\t\t\t\"infuse\": \"VERB\",\n\t\t\t\"runner\": \"NOUN\",\n\t\t\t\"senegal\": \"PROPN\",\n\t\t\t\"4.319\": \"NUM\",\n\t\t\t\"mwh\": \"NOUN\",\n\t\t\t\"input\": \"NOUN\",\n\t\t\t\"topological\": \"ADJ\",\n\t\t\t\"glanced\": \"VERB\",\n\t\t\t\"enrichment\": \"NOUN\",\n\t\t\t\"sitara\": \"PROPN\",\n\t\t\t\"neurobiology\": \"NOUN\",\n\t\t\t\"broker\": \"NOUN\",\n\t\t\t\"subsume\": \"VERB\",\n\t\t\t\"hazard\": \"PROPN\",\n\t\t\t\"rectified\": \"VERB\",\n\t\t\t\"macbook\": \"PROPN\",\n\t\t\t\"alternations\": \"NOUN\",\n\t\t\t\"horn\": \"NOUN\",\n\t\t\t\"http://www.equinecaninefeline.com/catalog/abode-large-metal-cage-liberta-free-delivery-p-6679.html\": \"PROPN\",\n\t\t\t\"peregrinate\": \"ADJ\",\n\t\t\t\"son\": \"NOUN\",\n\t\t\t\"taipei\": \"PROPN\",\n\t\t\t\"===>\": \"PUNCT\",\n\t\t\t\"cabernet\": \"PROPN\",\n\t\t\t\"tablespoon\": \"NOUN\",\n\t\t\t\"passage\": \"NOUN\",\n\t\t\t\"1711\": \"NUM\",\n\t\t\t\"livingston\": \"PROPN\",\n\t\t\t\"separates\": \"VERB\",\n\t\t\t\"army\": \"NOUN\",\n\t\t\t\"explains\": \"VERB\",\n\t\t\t\"despairingly\": \"ADV\",\n\t\t\t\"milk\": \"NOUN\",\n\t\t\t\"assaulted\": \"VERB\",\n\t\t\t\"physician\": \"NOUN\",\n\t\t\t\"testify\": \"VERB\",\n\t\t\t\"behari\": \"PROPN\",\n\t\t\t\"attached\": \"VERB\",\n\t\t\t\"buzzers\": \"NOUN\",\n\t\t\t\"stelle\": \"PROPN\",\n\t\t\t\"undermines\": \"VERB\",\n\t\t\t\"drawer\": \"NOUN\",\n\t\t\t\"gawker.com\": \"PROPN\",\n\t\t\t\"excuses\": \"NOUN\",\n\t\t\t\"note\": \"NOUN\",\n\t\t\t\"freakin\": \"ADJ\",\n\t\t\t\"poet\": \"NOUN\",\n\t\t\t\"fought\": \"VERB\",\n\t\t\t\"yampa\": \"PROPN\",\n\t\t\t\"boswell\": \"PROPN\",\n\t\t\t\"31\": \"NUM\",\n\t\t\t\"counter\": \"NOUN\",\n\t\t\t\"viking\": \"PROPN\",\n\t\t\t\"graffitied\": \"ADJ\",\n\t\t\t\"profilers\": \"NOUN\",\n\t\t\t\"enviroment\": \"NOUN\",\n\t\t\t\"butt\": \"NOUN\",\n\t\t\t\"merchants\": \"NOUN\",\n\t\t\t\"willie\": \"PROPN\",\n\t\t\t\"gardened\": \"VERB\",\n\t\t\t\"assuming\": \"VERB\",\n\t\t\t\"montejo\": \"PROPN\",\n\t\t\t\"scot\": \"PROPN\",\n\t\t\t\"imperfections\": \"NOUN\",\n\t\t\t\"tripadvisor\": \"PROPN\",\n\t\t\t\"ingesting\": \"VERB\",\n\t\t\t\"armadilla\": \"NOUN\",\n\t\t\t\"equalise\": \"VERB\",\n\t\t\t\"franchise\": \"NOUN\",\n\t\t\t\"http://en.wikipedia.org/wiki/bullfighting\": \"PROPN\",\n\t\t\t\"thicker\": \"ADJ\",\n\t\t\t\"mentoring\": \"NOUN\",\n\t\t\t\"resist\": \"VERB\",\n\t\t\t\"negotiating\": \"VERB\",\n\t\t\t\"na-na-na-na-za-ba-da\": \"INTJ\",\n\t\t\t\"provided\": \"VERB\",\n\t\t\t\"sacking\": \"NOUN\",\n\t\t\t\"pubs\": \"NOUN\",\n\t\t\t\"rat\": \"NOUN\",\n\t\t\t\"gets\": \"VERB\",\n\t\t\t\"01:32:35\": \"NUM\",\n\t\t\t\"mohandas\": \"PROPN\",\n\t\t\t\"gnawed\": \"VERB\",\n\t\t\t\"unruffled\": \"ADJ\",\n\t\t\t\"naturalism\": \"NOUN\",\n\t\t\t\"rug\": \"NOUN\",\n\t\t\t\"bathroom\": \"NOUN\",\n\t\t\t\"sporadically\": \"ADV\",\n\t\t\t\"suffers\": \"VERB\",\n\t\t\t\"starry\": \"PROPN\",\n\t\t\t\"economist\": \"PROPN\",\n\t\t\t\"unable\": \"ADJ\",\n\t\t\t\"evictees\": \"NOUN\",\n\t\t\t\"bw\": \"PROPN\",\n\t\t\t\"1,200\": \"NUM\",\n\t\t\t\"congregation\": \"NOUN\",\n\t\t\t\"for\": \"ADP\",\n\t\t\t\"baseball\": \"NOUN\",\n\t\t\t\"fraud\": \"NOUN\",\n\t\t\t\"publisher\": \"NOUN\",\n\t\t\t\"subcontinent\": \"NOUN\",\n\t\t\t\"promulgate\": \"VERB\",\n\t\t\t\"fernley\": \"PROPN\",\n\t\t\t\"appetite\": \"NOUN\",\n\t\t\t\"2075\": \"NUM\",\n\t\t\t\"oozes\": \"VERB\",\n\t\t\t\"chlorination\": \"NOUN\",\n\t\t\t\"footer\": \"NOUN\",\n\t\t\t\"hint\": \"NOUN\",\n\t\t\t\"hangman\": \"NOUN\",\n\t\t\t\"bombers\": \"NOUN\",\n\t\t\t\"coax\": \"VERB\",\n\t\t\t\"re-invest\": \"VERB\",\n\t\t\t\"wyatt\": \"PROPN\",\n\t\t\t\"furnaces\": \"NOUN\",\n\t\t\t\"comp\": \"NOUN\",\n\t\t\t\"tu\": \"PROPN\",\n\t\t\t\"glancing\": \"VERB\",\n\t\t\t\"portents\": \"NOUN\",\n\t\t\t\"mohawk\": \"PROPN\",\n\t\t\t\"->\": \"SYM\",\n\t\t\t\"adventurous\": \"ADJ\",\n\t\t\t\"norma\": \"PROPN\",\n\t\t\t\"mutilated\": \"VERB\",\n\t\t\t\"sunny\": \"ADJ\",\n\t\t\t\"tax-gatherer\": \"NOUN\",\n\t\t\t\"----------------------------------------------------------------------\": \"PUNCT\",\n\t\t\t\"fest\": \"PROPN\",\n\t\t\t\"eee\": \"INTJ\",\n\t\t\t\"trains\": \"NOUN\",\n\t\t\t\"imprisonment\": \"NOUN\",\n\t\t\t\"nerves\": \"NOUN\",\n\t\t\t\"toasted\": \"ADJ\",\n\t\t\t\"invincible\": \"ADJ\",\n\t\t\t\"luminescence\": \"NOUN\",\n\t\t\t\"lied\": \"VERB\",\n\t\t\t\"batch\": \"NOUN\",\n\t\t\t\"aways\": \"NOUN\",\n\t\t\t\"dancewear\": \"NOUN\",\n\t\t\t\"6\": \"NUM\",\n\t\t\t\"diarrhea\": \"NOUN\",\n\t\t\t\"seals\": \"NOUN\",\n\t\t\t\"hectic\": \"ADJ\",\n\t\t\t\"fortunate\": \"ADJ\",\n\t\t\t\"u.c.\": \"PROPN\",\n\t\t\t\"vergil\": \"PROPN\",\n\t\t\t\"pollutes\": \"VERB\",\n\t\t\t\"dysentery\": \"NOUN\",\n\t\t\t\"businesses\": \"NOUN\",\n\t\t\t\"faq\": \"NOUN\",\n\t\t\t\"m5j\": \"NOUN\",\n\t\t\t\"alterations\": \"NOUN\",\n\t\t\t\"en\": \"ADP\",\n\t\t\t\"bills\": \"NOUN\",\n\t\t\t\"infrastructure\": \"NOUN\",\n\t\t\t\"armature\": \"NOUN\",\n\t\t\t\"cathedral\": \"NOUN\",\n\t\t\t\"anew\": \"ADV\",\n\t\t\t\"filth\": \"NOUN\",\n\t\t\t\"aegean\": \"PROPN\",\n\t\t\t\"0590920648\": \"NUM\",\n\t\t\t\"browsing\": \"VERB\",\n\t\t\t\"recreating\": \"VERB\",\n\t\t\t\"europass\": \"PROPN\",\n\t\t\t\"lv\": \"PROPN\",\n\t\t\t\"screening\": \"VERB\",\n\t\t\t\"permits\": \"VERB\",\n\t\t\t\"respond\": \"VERB\",\n\t\t\t\"seams\": \"NOUN\",\n\t\t\t\"apart\": \"ADV\",\n\t\t\t\"whosoever\": \"PRON\",\n\t\t\t\"virtuous\": \"ADJ\",\n\t\t\t\"adjusts\": \"VERB\",\n\t\t\t\"prequel\": \"NOUN\",\n\t\t\t\"guthrie\": \"PROPN\",\n\t\t\t\"envelop\": \"VERB\",\n\t\t\t\"outnumber\": \"VERB\",\n\t\t\t\"arrogance\": \"NOUN\",\n\t\t\t\"coronas\": \"PROPN\",\n\t\t\t\"equivalents\": \"NOUN\",\n\t\t\t\"suffered\": \"VERB\",\n\t\t\t\"fourth\": \"ADJ\",\n\t\t\t\"3-5297\": \"NUM\",\n\t\t\t\"goo\": \"NOUN\",\n\t\t\t\"secretive\": \"ADJ\",\n\t\t\t\"oija\": \"PROPN\",\n\t\t\t\"incredibly\": \"ADV\",\n\t\t\t\"obstructions\": \"NOUN\",\n\t\t\t\"croke\": \"PROPN\",\n\t\t\t\"arya\": \"PROPN\",\n\t\t\t\"dictators\": \"NOUN\",\n\t\t\t\"discretionary\": \"ADJ\",\n\t\t\t\"pictured\": \"VERB\",\n\t\t\t\"non-stop\": \"ADV\",\n\t\t\t\"s.a.\": \"PROPN\",\n\t\t\t\"ashes\": \"NOUN\",\n\t\t\t\"fully\": \"ADV\",\n\t\t\t\"implementation\": \"NOUN\",\n\t\t\t\"emits\": \"VERB\",\n\t\t\t\"logical\": \"ADJ\",\n\t\t\t\"tollis\": \"PROPN\",\n\t\t\t\"collingswood\": \"PROPN\",\n\t\t\t\"chatterbox\": \"NOUN\",\n\t\t\t\"witnessing\": \"VERB\",\n\t\t\t\"our\": \"PRON\",\n\t\t\t\"incarcerated\": \"ADJ\",\n\t\t\t\"130\": \"NUM\",\n\t\t\t\"prosecution\": \"NOUN\",\n\t\t\t\"questar\": \"PROPN\",\n\t\t\t\"affecting\": \"VERB\",\n\t\t\t\"lodge\": \"PROPN\",\n\t\t\t\"residents\": \"NOUN\",\n\t\t\t\"klenk\": \"PROPN\",\n\t\t\t\"8:15\": \"NUM\",\n\t\t\t\"fullness\": \"NOUN\",\n\t\t\t\"stays\": \"NOUN\",\n\t\t\t\"kabul\": \"PROPN\",\n\t\t\t\"online\": \"ADJ\",\n\t\t\t\"pretty\": \"ADV\",\n\t\t\t\"glory\": \"NOUN\",\n\t\t\t\"tele\": \"NOUN\",\n\t\t\t\"m62\": \"PROPN\",\n\t\t\t\"comprising\": \"VERB\",\n\t\t\t\"healthcare\": \"NOUN\",\n\t\t\t\"dais\": \"NOUN\",\n\t\t\t\"prospects\": \"NOUN\",\n\t\t\t\"yemen\": \"PROPN\",\n\t\t\t\"scrumptious\": \"ADJ\",\n\t\t\t\"!!!!!!!\": \"PUNCT\",\n\t\t\t\"nightclub\": \"NOUN\",\n\t\t\t\"hiding\": \"VERB\",\n\t\t\t\"isolated\": \"VERB\",\n\t\t\t\"aesthetic\": \"ADJ\",\n\t\t\t\"prediction\": \"NOUN\",\n\t\t\t\"cnrs\": \"PROPN\",\n\t\t\t\"carve\": \"VERB\",\n\t\t\t\"first-class\": \"ADJ\",\n\t\t\t\"jaw\": \"NOUN\",\n\t\t\t\"fantastic\": \"ADJ\",\n\t\t\t\"sensor\": \"NOUN\",\n\t\t\t\"possibility\": \"NOUN\",\n\t\t\t\"untrained\": \"ADJ\",\n\t\t\t\"pending\": \"VERB\",\n\t\t\t\"730\": \"NUM\",\n\t\t\t\"alive\": \"ADJ\",\n\t\t\t\"sayings\": \"NOUN\",\n\t\t\t\"tapping\": \"VERB\",\n\t\t\t\"societal\": \"ADJ\",\n\t\t\t\"subcontractor\": \"NOUN\",\n\t\t\t\"participation\": \"NOUN\",\n\t\t\t\"repition\": \"NOUN\",\n\t\t\t\"nwsc\": \"PROPN\",\n\t\t\t\"babinos\": \"NOUN\",\n\t\t\t\"mysticism\": \"NOUN\",\n\t\t\t\"todd\": \"PROPN\",\n\t\t\t\"discover\": \"VERB\",\n\t\t\t\"fleet\": \"NOUN\",\n\t\t\t\"excellence\": \"NOUN\",\n\t\t\t\"playground\": \"NOUN\",\n\t\t\t\"specific\": \"ADJ\",\n\t\t\t\"decoding\": \"NOUN\",\n\t\t\t\"interstellar\": \"ADJ\",\n\t\t\t\"cash\": \"NOUN\",\n\t\t\t\"pierce\": \"VERB\",\n\t\t\t\"cheat\": \"VERB\",\n\t\t\t\"remedies\": \"NOUN\",\n\t\t\t\"meet\": \"VERB\",\n\t\t\t\"death-knell\": \"NOUN\",\n\t\t\t\"screws\": \"NOUN\",\n\t\t\t\"hall\": \"NOUN\",\n\t\t\t\"http://www.wikihow.com/wikihow:statistics\": \"PROPN\",\n\t\t\t\"pursued\": \"VERB\",\n\t\t\t\"temper\": \"NOUN\",\n\t\t\t\"julfa\": \"PROPN\",\n\t\t\t\"wildlife\": \"NOUN\",\n\t\t\t\"settle\": \"VERB\",\n\t\t\t\"kim\": \"PROPN\",\n\t\t\t\"rideable\": \"ADJ\",\n\t\t\t\"acutely\": \"ADV\",\n\t\t\t\"kayani\": \"PROPN\",\n\t\t\t\"#kairos\": \"PROPN\",\n\t\t\t\"thoroughly\": \"ADV\",\n\t\t\t\"element\": \"NOUN\",\n\t\t\t\"beavers\": \"NOUN\",\n\t\t\t\"protocol\": \"NOUN\",\n\t\t\t\"cook\": \"VERB\",\n\t\t\t\"santorum\": \"PROPN\",\n\t\t\t\"picketing\": \"NOUN\",\n\t\t\t\"seasons\": \"NOUN\",\n\t\t\t\"hope\": \"VERB\",\n\t\t\t\"ecu\": \"NOUN\",\n\t\t\t\"valdiviesco\": \"PROPN\",\n\t\t\t\"dealt\": \"VERB\",\n\t\t\t\"charlatans\": \"NOUN\",\n\t\t\t\"meditation\": \"NOUN\",\n\t\t\t\"failures\": \"NOUN\",\n\t\t\t\"offer\": \"VERB\",\n\t\t\t\"doltish\": \"ADJ\",\n\t\t\t\"robes\": \"NOUN\",\n\t\t\t\"burned\": \"VERB\",\n\t\t\t\"proposition\": \"NOUN\",\n\t\t\t\"clang\": \"NOUN\",\n\t\t\t\"righter\": \"PROPN\",\n\t\t\t\"brazil\": \"PROPN\",\n\t\t\t\"fated\": \"ADJ\",\n\t\t\t\"shia\": \"PROPN\",\n\t\t\t\"dispatched\": \"VERB\",\n\t\t\t\"orthodox\": \"ADJ\",\n\t\t\t\"delightful\": \"ADJ\",\n\t\t\t\"fiance\": \"NOUN\",\n\t\t\t\"consumers\": \"NOUN\",\n\t\t\t\"intifada\": \"NOUN\",\n\t\t\t\"neo-nazi\": \"ADJ\",\n\t\t\t\"tumbled\": \"VERB\",\n\t\t\t\"m-mm\": \"INTJ\",\n\t\t\t\"fauna\": \"NOUN\",\n\t\t\t\"95,000\": \"NUM\",\n\t\t\t\"nominated\": \"VERB\",\n\t\t\t\"reconciliation\": \"NOUN\",\n\t\t\t\"errands\": \"NOUN\",\n\t\t\t\"peculiarly\": \"ADV\",\n\t\t\t\"saddle\": \"NOUN\",\n\t\t\t\"exposure\": \"NOUN\",\n\t\t\t\"egypt\": \"PROPN\",\n\t\t\t\"essentials\": \"NOUN\",\n\t\t\t\"scholars\": \"NOUN\",\n\t\t\t\"arab\": \"ADJ\",\n\t\t\t\"phoneering\": \"NOUN\",\n\t\t\t\"increments\": \"NOUN\",\n\t\t\t\"bow-ties\": \"NOUN\",\n\t\t\t\"sweated\": \"VERB\",\n\t\t\t\"evoke\": \"VERB\",\n\t\t\t\"realism\": \"NOUN\",\n\t\t\t\"ignoring\": \"VERB\",\n\t\t\t\"screened\": \"VERB\",\n\t\t\t\"announcing\": \"VERB\",\n\t\t\t\"advert\": \"NOUN\",\n\t\t\t\"giggled\": \"VERB\",\n\t\t\t\"nights\": \"NOUN\",\n\t\t\t\"pao\": \"NOUN\",\n\t\t\t\"furniture\": \"NOUN\",\n\t\t\t\"petshoppe\": \"NOUN\",\n\t\t\t\"rampant\": \"ADJ\",\n\t\t\t\"damaging\": \"ADJ\",\n\t\t\t\"salespeople\": \"NOUN\",\n\t\t\t\"counters\": \"NOUN\",\n\t\t\t\"snowstorm\": \"NOUN\",\n\t\t\t\"rescheduling\": \"VERB\",\n\t\t\t\"lexicography\": \"NOUN\",\n\t\t\t\"ferrari\": \"PROPN\",\n\t\t\t\"documented\": \"VERB\",\n\t\t\t\"albums\": \"NOUN\",\n\t\t\t\"documents\": \"NOUN\",\n\t\t\t\"peritonitis\": \"NOUN\",\n\t\t\t\"revising\": \"VERB\",\n\t\t\t\"mesoamerican\": \"ADJ\",\n\t\t\t\"minimunm\": \"NOUN\",\n\t\t\t\"hurling\": \"VERB\",\n\t\t\t\"meen\": \"PROPN\",\n\t\t\t\"ellison\": \"PROPN\",\n\t\t\t\"unspeakably\": \"ADV\",\n\t\t\t\"prolly\": \"ADV\",\n\t\t\t\"panicked\": \"ADJ\",\n\t\t\t\"waiting\": \"VERB\",\n\t\t\t\"new\": \"ADJ\",\n\t\t\t\"whistleblowing\": \"NOUN\",\n\t\t\t\"addressing\": \"VERB\",\n\t\t\t\"burckhardt\": \"PROPN\",\n\t\t\t\"asthma\": \"NOUN\",\n\t\t\t\"touchstones\": \"NOUN\",\n\t\t\t\"employed\": \"VERB\",\n\t\t\t\"interview\": \"NOUN\",\n\t\t\t\"increased\": \"VERB\",\n\t\t\t\"squeege\": \"PROPN\",\n\t\t\t\"turgenev\": \"PROPN\",\n\t\t\t\"netting\": \"NOUN\",\n\t\t\t\"into\": \"ADP\",\n\t\t\t\"realer\": \"ADJ\",\n\t\t\t\"irreconcilable\": \"ADJ\",\n\t\t\t\"lɑ̃fɑ̃\": \"PROPN\",\n\t\t\t\"5.37\": \"NUM\",\n\t\t\t\"fedexed\": \"VERB\",\n\t\t\t\"morgan\": \"PROPN\",\n\t\t\t\"successor\": \"NOUN\",\n\t\t\t\"biomed\": \"PROPN\",\n\t\t\t\"graduated\": \"VERB\",\n\t\t\t\"www.weathereffects.com\": \"PROPN\",\n\t\t\t\"penne\": \"NOUN\",\n\t\t\t\"sunflower\": \"NOUN\",\n\t\t\t\"skylab\": \"PROPN\",\n\t\t\t\"alt.animals.ethics.vegetarian\": \"NOUN\",\n\t\t\t\"probe\": \"NOUN\",\n\t\t\t\"relationship\": \"NOUN\",\n\t\t\t\"night-owl\": \"NOUN\",\n\t\t\t\"gout\": \"NOUN\",\n\t\t\t\"hbo\": \"PROPN\",\n\t\t\t\"nomination\": \"NOUN\",\n\t\t\t\"crra\": \"PROPN\",\n\t\t\t\"mcdermott\": \"PROPN\",\n\t\t\t\"girlfriend\": \"NOUN\",\n\t\t\t\"kivu\": \"PROPN\",\n\t\t\t\"impulses\": \"NOUN\",\n\t\t\t\"linguistics\": \"NOUN\",\n\t\t\t\"rapidly\": \"ADV\",\n\t\t\t\"winckelmann\": \"PROPN\",\n\t\t\t\"venezuelan\": \"ADJ\",\n\t\t\t\"trembling\": \"VERB\",\n\t\t\t\"slovakia\": \"PROPN\",\n\t\t\t\"swept\": \"VERB\",\n\t\t\t\"lynda\": \"PROPN\",\n\t\t\t\"enchiladas\": \"NOUN\",\n\t\t\t\"medals\": \"NOUN\",\n\t\t\t\"malformed\": \"ADJ\",\n\t\t\t\"aversion\": \"NOUN\",\n\t\t\t\"volatilities\": \"NOUN\",\n\t\t\t\"entitlement\": \"NOUN\",\n\t\t\t\"affair\": \"NOUN\",\n\t\t\t\"http://3.bp.blogspot.com/-x_e2uwt6wpw/tkj_7uvtw6i/aaaaaaaaags/e_hicadypyi/s1600/lotte_world_from_high_up.jpg\": \"PROPN\",\n\t\t\t\"http://www.railroadredux.com/tag/northwest-shortline/\": \"PROPN\",\n\t\t\t\"detoured\": \"VERB\",\n\t\t\t\"flashing\": \"VERB\",\n\t\t\t\"covey\": \"PROPN\",\n\t\t\t\"supportive\": \"ADJ\",\n\t\t\t\"tasted\": \"VERB\",\n\t\t\t\"pragmatic\": \"ADJ\",\n\t\t\t\"eva\": \"PROPN\",\n\t\t\t\"chorus\": \"PROPN\",\n\t\t\t\"back-to-nature\": \"NOUN\",\n\t\t\t\"conviction\": \"NOUN\",\n\t\t\t\"buoys\": \"NOUN\",\n\t\t\t\"yoke\": \"NOUN\",\n\t\t\t\"disability\": \"NOUN\",\n\t\t\t\"maximized\": \"VERB\",\n\t\t\t\"priest\": \"NOUN\",\n\t\t\t\"typos\": \"NOUN\",\n\t\t\t\"sinhala\": \"ADJ\",\n\t\t\t\"webcomic\": \"NOUN\",\n\t\t\t\"853-7557\": \"NUM\",\n\t\t\t\"over-prescriptive\": \"ADJ\",\n\t\t\t\"quietness\": \"NOUN\",\n\t\t\t\"elia\": \"PROPN\",\n\t\t\t\"righty\": \"NOUN\",\n\t\t\t\"hammer\": \"NOUN\",\n\t\t\t\"inability\": \"NOUN\",\n\t\t\t\"beautifully\": \"ADV\",\n\t\t\t\"wails\": \"VERB\",\n\t\t\t\"shrouded\": \"VERB\",\n\t\t\t\"corel\": \"PROPN\",\n\t\t\t\"depictions\": \"NOUN\",\n\t\t\t\"ebic\": \"PROPN\",\n\t\t\t\"vapour\": \"NOUN\",\n\t\t\t\"anti-american\": \"ADJ\",\n\t\t\t\"royally\": \"ADV\",\n\t\t\t\"acia\": \"PROPN\",\n\t\t\t\"browncover\": \"NOUN\",\n\t\t\t\"pouring\": \"VERB\",\n\t\t\t\"put-on\": \"NOUN\",\n\t\t\t\"errors\": \"NOUN\",\n\t\t\t\"enquiries\": \"NOUN\",\n\t\t\t\"downward\": \"ADV\",\n\t\t\t\"stalk\": \"NOUN\",\n\t\t\t\"transcendence\": \"NOUN\",\n\t\t\t\"head\": \"NOUN\",\n\t\t\t\"luncheonette\": \"NOUN\",\n\t\t\t\"jesse\": \"PROPN\",\n\t\t\t\"12:30\": \"NUM\",\n\t\t\t\"reconnaissance\": \"NOUN\",\n\t\t\t\"brandeis\": \"PROPN\",\n\t\t\t\"fecal\": \"ADJ\",\n\t\t\t\"warwick\": \"PROPN\",\n\t\t\t\"subparagraph\": \"NOUN\",\n\t\t\t\"bolt\": \"ADV\",\n\t\t\t\"825\": \"NUM\",\n\t\t\t\"return\": \"VERB\",\n\t\t\t\"jungles\": \"NOUN\",\n\t\t\t\"frying\": \"ADJ\",\n\t\t\t\"yankee\": \"PROPN\",\n\t\t\t\"philosophical\": \"ADJ\",\n\t\t\t\"jesus\": \"PROPN\",\n\t\t\t\"whatsoever\": \"ADV\",\n\t\t\t\"microwaved\": \"VERB\",\n\t\t\t\"reservoir\": \"NOUN\",\n\t\t\t\"beneath\": \"ADP\",\n\t\t\t\"veins\": \"NOUN\",\n\t\t\t\"wan\": \"VERB\",\n\t\t\t\"fiasco\": \"NOUN\",\n\t\t\t\"interferes\": \"VERB\",\n\t\t\t\"abramoff\": \"PROPN\",\n\t\t\t\"thwarted\": \"VERB\",\n\t\t\t\"potable\": \"ADJ\",\n\t\t\t\"!!!!!!!!!!!!!!!\": \"PUNCT\",\n\t\t\t\"painewebber\": \"PROPN\",\n\t\t\t\"ect\": \"PROPN\",\n\t\t\t\"assumption\": \"NOUN\",\n\t\t\t\"deduction\": \"NOUN\",\n\t\t\t\"refusing\": \"VERB\",\n\t\t\t\"11:08\": \"NUM\",\n\t\t\t\"fahrenheit\": \"PROPN\",\n\t\t\t\"wires\": \"NOUN\",\n\t\t\t\"actual\": \"ADJ\",\n\t\t\t\"aldrich\": \"PROPN\",\n\t\t\t\"collisions\": \"NOUN\",\n\t\t\t\"subsequent\": \"ADJ\",\n\t\t\t\"intranet\": \"NOUN\",\n\t\t\t\"balaclava\": \"NOUN\",\n\t\t\t\"col\": \"NOUN\",\n\t\t\t\"gillette\": \"PROPN\",\n\t\t\t\"cautious\": \"ADJ\",\n\t\t\t\"maulana\": \"PROPN\",\n\t\t\t\"skiing\": \"ADJ\",\n\t\t\t\"traced\": \"VERB\",\n\t\t\t\"prune\": \"VERB\",\n\t\t\t\"{\": \"PUNCT\",\n\t\t\t\"09:48\": \"NUM\",\n\t\t\t\"gaze\": \"VERB\",\n\t\t\t\"broiled\": \"VERB\",\n\t\t\t\"founder\": \"NOUN\",\n\t\t\t\"toothache\": \"NOUN\",\n\t\t\t\"blond\": \"ADJ\",\n\t\t\t\"pushed\": \"VERB\",\n\t\t\t\"switzerland\": \"PROPN\",\n\t\t\t\"currently\": \"ADV\",\n\t\t\t\"israelis\": \"NOUN\",\n\t\t\t\"noticeably\": \"ADV\",\n\t\t\t\"astronomers\": \"NOUN\",\n\t\t\t\"$ome\": \"DET\",\n\t\t\t\"amman\": \"PROPN\",\n\t\t\t\"nosedive\": \"NOUN\",\n\t\t\t\"yrs.\": \"NOUN\",\n\t\t\t\"pixies\": \"NOUN\",\n\t\t\t\"diety\": \"NOUN\",\n\t\t\t\"introductions\": \"NOUN\",\n\t\t\t\"tong\": \"PROPN\",\n\t\t\t\"thereabouts\": \"ADV\",\n\t\t\t\"vikings\": \"PROPN\",\n\t\t\t\"chambermaid\": \"NOUN\",\n\t\t\t\"icon\": \"NOUN\",\n\t\t\t\"worthy\": \"ADJ\",\n\t\t\t\"committments\": \"NOUN\",\n\t\t\t\"profoundly\": \"ADV\",\n\t\t\t\"wasp\": \"NOUN\",\n\t\t\t\"reaffirms\": \"VERB\",\n\t\t\t\"selectively\": \"ADV\",\n\t\t\t\"german\": \"ADJ\",\n\t\t\t\"launch\": \"NOUN\",\n\t\t\t\"occasional\": \"ADJ\",\n\t\t\t\"dependant\": \"ADJ\",\n\t\t\t\"gold\": \"NOUN\",\n\t\t\t\"sun-dial\": \"NOUN\",\n\t\t\t\"mats\": \"NOUN\",\n\t\t\t\"einstein\": \"PROPN\",\n\t\t\t\"edging\": \"VERB\",\n\t\t\t\"purse\": \"NOUN\",\n\t\t\t\"angostura\": \"PROPN\",\n\t\t\t\"jihadi\": \"ADJ\",\n\t\t\t\"disembarking\": \"ADJ\",\n\t\t\t\"meaningful\": \"ADJ\",\n\t\t\t\"4a\": \"PROPN\",\n\t\t\t\"ribs\": \"NOUN\",\n\t\t\t\"stephanie\": \"PROPN\",\n\t\t\t\"rings\": \"NOUN\",\n\t\t\t\"talbot\": \"PROPN\",\n\t\t\t\"commitments\": \"NOUN\",\n\t\t\t\"inseparable\": \"ADJ\",\n\t\t\t\"countrymen\": \"NOUN\",\n\t\t\t\"strategies\": \"NOUN\",\n\t\t\t\"01/25/2001\": \"NUM\",\n\t\t\t\"swayed\": \"VERB\",\n\t\t\t\"backup\": \"NOUN\",\n\t\t\t\"lotf\": \"PROPN\",\n\t\t\t\"#writinglife\": \"PROPN\",\n\t\t\t\"arrived\": \"VERB\",\n\t\t\t\"rites\": \"NOUN\",\n\t\t\t\"inhalable\": \"ADJ\",\n\t\t\t\"hershey\": \"PROPN\",\n\t\t\t\"go's\": \"NOUN\",\n\t\t\t\"pacheco\": \"PROPN\",\n\t\t\t\"serrated\": \"VERB\",\n\t\t\t\"a.\": \"PROPN\",\n\t\t\t\"stiglitz\": \"PROPN\",\n\t\t\t\"governed\": \"VERB\",\n\t\t\t\"asiaweek\": \"PROPN\",\n\t\t\t\"irritable\": \"ADJ\",\n\t\t\t\"itching\": \"NOUN\",\n\t\t\t\"391,000\": \"NUM\",\n\t\t\t\"conclave\": \"NOUN\",\n\t\t\t\"esfahan\": \"PROPN\",\n\t\t\t\"ltd\": \"PROPN\",\n\t\t\t\"jerks\": \"NOUN\",\n\t\t\t\"blindman\": \"NOUN\",\n\t\t\t\"nt\": \"PART\",\n\t\t\t\"whoever\": \"PRON\",\n\t\t\t\"gotschal\": \"PROPN\",\n\t\t\t\"youngblood\": \"PROPN\",\n\t\t\t\"hay-carts\": \"NOUN\",\n\t\t\t\"unit\": \"NOUN\",\n\t\t\t\"sectors\": \"NOUN\",\n\t\t\t\"lable\": \"NOUN\",\n\t\t\t\"def\": \"ADV\",\n\t\t\t\"obina\": \"PROPN\",\n\t\t\t\"wed\": \"VERB\",\n\t\t\t\"babalon\": \"PROPN\",\n\t\t\t\"philologists\": \"NOUN\",\n\t\t\t\"acrylic\": \"ADJ\",\n\t\t\t\"minted\": \"VERB\",\n\t\t\t\"duke\": \"PROPN\",\n\t\t\t\"procedural\": \"ADJ\",\n\t\t\t\"record\": \"NOUN\",\n\t\t\t\"session\": \"NOUN\",\n\t\t\t\"cra.org/resources/taulbee-survey\": \"PROPN\",\n\t\t\t\"quaint\": \"ADJ\",\n\t\t\t\"c4-0497/98-98/0126\": \"NUM\",\n\t\t\t\"lyons\": \"PROPN\",\n\t\t\t\"75th\": \"ADJ\",\n\t\t\t\"asians\": \"PROPN\",\n\t\t\t\"02:18\": \"NUM\",\n\t\t\t\"them\": \"PRON\",\n\t\t\t\"cherries\": \"NOUN\",\n\t\t\t\"wizard\": \"NOUN\",\n\t\t\t\"dig\": \"VERB\",\n\t\t\t\"assist\": \"VERB\",\n\t\t\t\"websites\": \"NOUN\",\n\t\t\t\"allowedits\": \"NOUN\",\n\t\t\t\"showroom\": \"NOUN\",\n\t\t\t\"slamming\": \"VERB\",\n\t\t\t\"sugarbowl\": \"PROPN\",\n\t\t\t\"monaco\": \"PROPN\",\n\t\t\t\"chimneys\": \"NOUN\",\n\t\t\t\"astronauts\": \"NOUN\",\n\t\t\t\"antony\": \"PROPN\",\n\t\t\t\"schooling\": \"NOUN\",\n\t\t\t\"petty\": \"ADJ\",\n\t\t\t\"rectify\": \"VERB\",\n\t\t\t\"everything\": \"PRON\",\n\t\t\t\"volleyball\": \"NOUN\",\n\t\t\t\"gibraltar\": \"PROPN\",\n\t\t\t\"flyer\": \"NOUN\",\n\t\t\t\"streak\": \"NOUN\",\n\t\t\t\"ibn\": \"PROPN\",\n\t\t\t\"particularly\": \"ADV\",\n\t\t\t\"entreaty\": \"NOUN\",\n\t\t\t\"sneeze\": \"VERB\",\n\t\t\t\"blond-haired\": \"ADJ\",\n\t\t\t\"endeavor\": \"NOUN\",\n\t\t\t\"stendhal\": \"PROPN\",\n\t\t\t\"70.85\": \"NUM\",\n\t\t\t\"lingering\": \"ADJ\",\n\t\t\t\"caper\": \"NOUN\",\n\t\t\t\"suppleness\": \"NOUN\",\n\t\t\t\"duress\": \"NOUN\",\n\t\t\t\"descent\": \"NOUN\",\n\t\t\t\"althea\": \"PROPN\",\n\t\t\t\"edwards\": \"PROPN\",\n\t\t\t\"inflammatory\": \"ADJ\",\n\t\t\t\"sidelocks\": \"NOUN\",\n\t\t\t\"automated\": \"ADJ\",\n\t\t\t\"yahoos\": \"NOUN\",\n\t\t\t\"hehehe\": \"INTJ\",\n\t\t\t\"junction\": \"NOUN\",\n\t\t\t\"1998\": \"NUM\",\n\t\t\t\"wheeler\": \"PROPN\",\n\t\t\t\"friendlier\": \"ADJ\",\n\t\t\t\"fodder\": \"NOUN\",\n\t\t\t\"shop-cum-post-office\": \"NOUN\",\n\t\t\t\"@ryan\": \"PROPN\",\n\t\t\t\"13011\": \"NUM\",\n\t\t\t\"exhibited\": \"VERB\",\n\t\t\t\"redesigning\": \"VERB\",\n\t\t\t\"evolves\": \"VERB\",\n\t\t\t\"basil\": \"NOUN\",\n\t\t\t\"insurgency\": \"NOUN\",\n\t\t\t\"intending\": \"VERB\",\n\t\t\t\">>\": \"PUNCT\",\n\t\t\t\"copyrights\": \"NOUN\",\n\t\t\t\"basics\": \"NOUN\",\n\t\t\t\"neuroscience\": \"NOUN\",\n\t\t\t\"sanzio\": \"PROPN\",\n\t\t\t\"drilled\": \"VERB\",\n\t\t\t\"envision\": \"VERB\",\n\t\t\t\"awsat\": \"PROPN\",\n\t\t\t\"slower\": \"ADJ\",\n\t\t\t\"flexible\": \"ADJ\",\n\t\t\t\"consultation\": \"PROPN\",\n\t\t\t\"pariah\": \"NOUN\",\n\t\t\t\"dudes\": \"NOUN\",\n\t\t\t\"pyjama\": \"NOUN\",\n\t\t\t\"bagels\": \"NOUN\",\n\t\t\t\"hockey\": \"NOUN\",\n\t\t\t\"drip\": \"NOUN\",\n\t\t\t\"pans\": \"NOUN\",\n\t\t\t\"schott\": \"PROPN\",\n\t\t\t\"xferring\": \"VERB\",\n\t\t\t\"accompanied\": \"VERB\",\n\t\t\t\"snobbery\": \"NOUN\",\n\t\t\t\"ffff\": \"PROPN\",\n\t\t\t\"amplified\": \"VERB\",\n\t\t\t\"600-480\": \"NUM\",\n\t\t\t\"practitioners\": \"NOUN\",\n\t\t\t\"heading\": \"VERB\",\n\t\t\t\"undersung\": \"ADJ\",\n\t\t\t\"organized\": \"VERB\",\n\t\t\t\"superpower\": \"NOUN\",\n\t\t\t\"heightened\": \"VERB\",\n\t\t\t\"hakim\": \"PROPN\",\n\t\t\t\"unfathomable\": \"ADJ\",\n\t\t\t\"fixeded\": \"VERB\",\n\t\t\t\"clambake\": \"PROPN\",\n\t\t\t\"paragraphs\": \"NOUN\",\n\t\t\t\"parameters\": \"NOUN\",\n\t\t\t\"drumsticks\": \"NOUN\",\n\t\t\t\"++++\": \"SYM\",\n\t\t\t\"5.2\": \"NUM\",\n\t\t\t\"vibrant\": \"ADJ\",\n\t\t\t\"deposition\": \"NOUN\",\n\t\t\t\"liu\": \"PROPN\",\n\t\t\t\"1954\": \"NUM\",\n\t\t\t\"sprinkle\": \"VERB\",\n\t\t\t\"hampered\": \"VERB\",\n\t\t\t\"rep.\": \"PROPN\",\n\t\t\t\"vocals\": \"NOUN\",\n\t\t\t\"learnt\": \"VERB\",\n\t\t\t\"healed\": \"ADJ\",\n\t\t\t\"stanza\": \"NOUN\",\n\t\t\t\"chauvinisms\": \"NOUN\",\n\t\t\t\"facilitate\": \"VERB\",\n\t\t\t\"rank\": \"NOUN\",\n\t\t\t\"adorns\": \"VERB\",\n\t\t\t\"articles\": \"NOUN\",\n\t\t\t\"appropriation\": \"NOUN\",\n\t\t\t\"i.e\": \"ADV\",\n\t\t\t\"fare\": \"NOUN\",\n\t\t\t\"wedding\": \"NOUN\",\n\t\t\t\"42\": \"NUM\",\n\t\t\t\"brainwash\": \"VERB\",\n\t\t\t\"humble\": \"ADJ\",\n\t\t\t\"eyewitness\": \"NOUN\",\n\t\t\t\"contains\": \"VERB\",\n\t\t\t\"status\": \"NOUN\",\n\t\t\t\"ideal\": \"ADJ\",\n\t\t\t\"regionally\": \"ADV\",\n\t\t\t\"buis\": \"PROPN\",\n\t\t\t\"http://www.cic.gc.ca/english/immigrate/index.asp\": \"PROPN\",\n\t\t\t\"grf\": \"NOUN\",\n\t\t\t\"verb\": \"NOUN\",\n\t\t\t\"luján\": \"PROPN\",\n\t\t\t\"monetized\": \"VERB\",\n\t\t\t\"oclock\": \"NOUN\",\n\t\t\t\"dempsey\": \"NOUN\",\n\t\t\t\"minus\": \"CCONJ\",\n\t\t\t\"sheikhs\": \"NOUN\",\n\t\t\t\"slapping\": \"VERB\",\n\t\t\t\"mexicans\": \"PROPN\",\n\t\t\t\"format\": \"NOUN\",\n\t\t\t\"pre-existing\": \"VERB\",\n\t\t\t\"inflation\": \"NOUN\",\n\t\t\t\"raleigh\": \"PROPN\",\n\t\t\t\"ra\": \"PROPN\",\n\t\t\t\"borne\": \"VERB\",\n\t\t\t\"uphold\": \"VERB\",\n\t\t\t\"wispy\": \"ADJ\",\n\t\t\t\"pumps\": \"VERB\",\n\t\t\t\"cultivating\": \"VERB\",\n\t\t\t\"xv\": \"NUM\",\n\t\t\t\"donned\": \"VERB\",\n\t\t\t\"babington\": \"PROPN\",\n\t\t\t\"updated\": \"VERB\",\n\t\t\t\"shuffled\": \"VERB\",\n\t\t\t\"player\": \"NOUN\",\n\t\t\t\"dissatisfied\": \"ADJ\",\n\t\t\t\"dominos\": \"PROPN\",\n\t\t\t\"agents\": \"NOUN\",\n\t\t\t\"gift\": \"NOUN\",\n\t\t\t\"quetzalcoatl\": \"PROPN\",\n\t\t\t\"kayak\": \"NOUN\",\n\t\t\t\"siri\": \"PROPN\",\n\t\t\t\"listened\": \"VERB\",\n\t\t\t\"myths\": \"NOUN\",\n\t\t\t\"accidents\": \"NOUN\",\n\t\t\t\"forests\": \"NOUN\",\n\t\t\t\"aberdeen\": \"PROPN\",\n\t\t\t\"wase\": \"AUX\",\n\t\t\t\"armatures\": \"NOUN\",\n\t\t\t\"thyme\": \"NOUN\",\n\t\t\t\"undermine\": \"VERB\",\n\t\t\t\"transition\": \"NOUN\",\n\t\t\t\"thirdly\": \"ADV\",\n\t\t\t\"iii\": \"NUM\",\n\t\t\t\"gyroscope\": \"NOUN\",\n\t\t\t\"tub\": \"PROPN\",\n\t\t\t\"slept\": \"VERB\",\n\t\t\t\"neat\": \"ADJ\",\n\t\t\t\"congrats\": \"NOUN\",\n\t\t\t\"breakneck\": \"ADJ\",\n\t\t\t\"legal\": \"ADJ\",\n\t\t\t\"suv\": \"NOUN\",\n\t\t\t\"harem\": \"NOUN\",\n\t\t\t\"debtors\": \"NOUN\",\n\t\t\t\"below\": \"ADV\",\n\t\t\t\"anwar\": \"PROPN\",\n\t\t\t\"employment\": \"NOUN\",\n\t\t\t\"uncrowded\": \"ADJ\",\n\t\t\t\"guitarist\": \"NOUN\",\n\t\t\t\"develope\": \"VERB\",\n\t\t\t\"underestimate\": \"VERB\",\n\t\t\t\"forgave\": \"VERB\",\n\t\t\t\"reconciling\": \"NOUN\",\n\t\t\t\"interim\": \"ADJ\",\n\t\t\t\".:\": \"PUNCT\",\n\t\t\t\"smackers\": \"NOUN\",\n\t\t\t\"s/he\": \"PRON\",\n\t\t\t\"michel\": \"PROPN\",\n\t\t\t\"theaters\": \"NOUN\",\n\t\t\t\"table\": \"NOUN\",\n\t\t\t\"spacefaring\": \"ADJ\",\n\t\t\t\"referred\": \"VERB\",\n\t\t\t\"wnba\": \"PROPN\",\n\t\t\t\"airway\": \"NOUN\",\n\t\t\t\"responsiveness\": \"NOUN\",\n\t\t\t\"1908\": \"NUM\",\n\t\t\t\"chlorine\": \"NOUN\",\n\t\t\t\"brighter\": \"ADJ\",\n\t\t\t\"culturally\": \"ADV\",\n\t\t\t\"cdt\": \"PROPN\",\n\t\t\t\"rogue\": \"NOUN\",\n\t\t\t\"heads\": \"NOUN\",\n\t\t\t\"headmaster\": \"NOUN\",\n\t\t\t\"inception\": \"NOUN\",\n\t\t\t\"testosterone\": \"NOUN\",\n\t\t\t\"zeros\": \"NOUN\",\n\t\t\t\"bows\": \"NOUN\",\n\t\t\t\"12:00\": \"NUM\",\n\t\t\t\"fishermen\": \"NOUN\",\n\t\t\t\"surprised\": \"VERB\",\n\t\t\t\"darfur\": \"PROPN\",\n\t\t\t\"sodomise\": \"VERB\",\n\t\t\t\"dismantle\": \"VERB\",\n\t\t\t\"fleeting\": \"ADJ\",\n\t\t\t\"viewed\": \"VERB\",\n\t\t\t\"previews\": \"NOUN\"\n\t\t}\n\t},\n\t\"patches\": [\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"there\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"have\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"had\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"do\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"this\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"have\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"there\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"has\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"DET\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NUM\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"like\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"more\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"do\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"had\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"this\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"about\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"is_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"AUX\",\n\t\t\t\t\t\"post_word_tagged\": \"DET\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"DET\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"NOUN\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"INTJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"like\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"PUNCT\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"like\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"VERB\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADV\",\n\t\t\t\t\t\"post_word_tagged\": \"DET\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NUM\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 4,\n\t\t\t\t\t\t\t\"is_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\"max_relative\": -1,\n\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"AUX\",\n\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 4,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\"post_word_tagged\": \"AUX\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"CCONJ\",\n\t\t\t\t\t\"post_word_tagged\": \"DET\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"DET\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"NOUN\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\"post_word_tagged\": \"ADV\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"SCONJ\",\n\t\t\t\t\t\"post_word_tagged\": \"VERB\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"PROPN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\"post_word_tagged\": \"NUM\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\"post_word_tagged\": \"ADJ\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"had\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"had\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"PROPN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"PART\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"DET\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADV\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 4,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"VERB\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PROPN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"out\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\"post_word_tagged\": \"DET\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"NOUN\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"INTJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"like\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\"post_word_tagged\": \"AUX\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"DET\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\"post_word_tagged\": \"DET\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"CCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"DET\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"PROPN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\"post_word_tagged\": \"DET\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NUM\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"CCONJ\",\n\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"PART\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADV\",\n\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"out\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"NOUN\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"Combined\": {\n\t\t\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\t\t\"is_tagged\": \"PART\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\"post_word_tagged\": \"PART\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"out\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"up\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"NUM\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"for\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"for\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"have\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\"post_word_tagged\": \"CCONJ\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"INTJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"like\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"SCONJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\"post_word_tagged\": \"PART\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"INTJ\",\n\t\t\t\t\t\"post_word_tagged\": \"DET\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 4,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"PUNCT\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"PROPN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PART\",\n\t\t\t\t\t\"post_word_tagged\": \"DET\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"Combined\": {\n\t\t\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"Combined\": {\n\t\t\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\t\t\"is_tagged\": \"NOUN\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"VERB\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\"post_word_tagged\": \"VERB\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"out\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"NOUN\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"like\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"out\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"PROPN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PROPN\",\n\t\t\t\t\t\"post_word_tagged\": \"PROPN\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"like\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PUNCT\",\n\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"VERB\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"AUX\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"AUX\",\n\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"PROPN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"PROPN\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"Combined\": {\n\t\t\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\"post_word_tagged\": \"VERB\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"up\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"AUX\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\"post_word_tagged\": \"CCONJ\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"PROPN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PUNCT\",\n\t\t\t\t\t\"post_word_tagged\": \"NUM\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NUM\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\"is_tagged\": \"SYM\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"DET\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"out\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"all\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -4,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"out\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"NOUN\",\n\t\t\t\t\t\"post_word_tagged\": \"ADV\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"PART\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"NOUN\",\n\t\t\t\t\t\"post_word_tagged\": \"ADV\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADV\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PART\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"ADJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"NUM\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"VERB\",\n\t\t\t\t\t\"post_word_tagged\": \"PART\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NUM\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"had\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"SCONJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"that\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"VERB\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\"post_word_tagged\": \"AUX\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"AUX\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADV\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"like\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"ADJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"AUX\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"like\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"SCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PROPN\",\n\t\t\t\t\t\"post_word_tagged\": \"DET\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"CCONJ\",\n\t\t\t\"to\": \"DET\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"NOUN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"in\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"PRON\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"ADJ\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PROPN\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"SCONJ\",\n\t\t\t\t\t\"post_word_tagged\": \"ADV\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"PART\",\n\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NUM\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADJ\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PUNCT\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"for\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"for\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"VERB\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"there\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 3,\n\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"SCONJ\",\n\t\t\t\"to\": \"ADP\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"as\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"CCONJ\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"one\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"DET\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"AUX\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"have\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"is_tagged\": \"PART\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"VERB\",\n\t\t\t\"to\": \"NOUN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\"word\": \"for\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"Combined\": {\n\t\t\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\t\t\"is_tagged\": \"PUNCT\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\t\t\"WordIsTaggedWith\": {\n\t\t\t\t\t\t\t\t\t\"relative\": -2,\n\t\t\t\t\t\t\t\t\t\"is_tagged\": \"ADP\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADP\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"for\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -1,\n\t\t\t\t\t\t\t\"is_tagged\": \"AUX\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\"post_word_tagged\": \"CCONJ\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"PRON\",\n\t\t\t\"to\": \"PROPN\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"US\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": -2,\n\t\t\t\t\t\t\t\"is_tagged\": \"DET\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"DET\",\n\t\t\t\"to\": \"PRON\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"to\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"SandwichTaggedWith\": {\n\t\t\t\t\t\t\t\"prev_word_tagged\": \"ADP\",\n\t\t\t\t\t\t\t\"post_word_tagged\": \"PRON\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"ADJ\",\n\t\t\t\"to\": \"ADV\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 1,\n\t\t\t\t\t\t\t\"word\": \"of\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"AnyWordIsTaggedWith\": {\n\t\t\t\t\t\t\t\"max_relative\": 2,\n\t\t\t\t\t\t\t\"is_tagged\": \"VERB\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"from\": \"NOUN\",\n\t\t\t\"to\": \"VERB\",\n\t\t\t\"criteria\": {\n\t\t\t\t\"Combined\": {\n\t\t\t\t\t\"a\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": -1,\n\t\t\t\t\t\t\t\"word\": \"you\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"b\": {\n\t\t\t\t\t\t\"WordIs\": {\n\t\t\t\t\t\t\t\"relative\": 0,\n\t\t\t\t\t\t\t\"word\": \"plan\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "harper-cli/Cargo.toml",
    "content": "[package]\nname = \"harper-cli\"\nversion = \"0.1.0\"\nedition = \"2024\"\npublish = false\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nanyhow = \"1.0.102\"\nariadne = \"0.6.0\"\nclap = { version = \"4.6.0\", features = [\"derive\", \"std\", \"string\"], default-features = false }\nclap_complete = \"4.6.0\"\nharper-stats = { path = \"../harper-stats\", version = \"1.0.0\" }\ndirs = \"6.0.0\"\nharper-literate-haskell = { path = \"../harper-literate-haskell\", version = \"1.0.0\" }\nharper-python = { path = \"../harper-python\", version = \"1.0.0\" }\nharper-asciidoc = { path = \"../harper-asciidoc\", version = \"1.0.0\" }\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\nharper-pos-utils = { path = \"../harper-pos-utils\", version = \"1.0.0\", features = [] }\nharper-comments = { path = \"../harper-comments\", version = \"1.0.0\" }\nharper-tex = { path = \"../harper-tex\", version = \"1.0.0\" }\nharper-typst = { path = \"../harper-typst\", version = \"1.0.0\" }\nhashbrown = \"0.16.1\"\nrayon = \"1.11.0\"\nserde = { version = \"1.0.228\", features = [\"derive\"] }\nserde_json = \"1.0.149\"\nstrum = \"0.28.0\"\nstrum_macros = \"0.28.0\"\nharper-ink = { version = \"1.0.0\", path = \"../harper-ink\" }\nenum_dispatch = \"0.3.13\"\nyansi = \"1.0.1\"\n\n[dev-dependencies]\ntempfile = \"3\"\n\n[features]\ndefault = []\ntraining = [\"harper-pos-utils/training\"]\n"
  },
  {
    "path": "harper-cli/README.md",
    "content": "# `harper-cli`\n\n## What?\n\n`harper-cli` is a small, experimental frontend for Harper.\nIt can be used in any situation where you might need to check a large number of files automatically (like in continuous integration).\n\nRight now it is quite feature barren, mainly because an external use-case has not been defined yet.\nIf you have any thoughts, feel free to reach out.\n\n## Possible Future Features\n\n- On-disk caching\n- Custom dictionaries (maybe use the same ones as `harper-ls`?)\n- Machine-readable output\n"
  },
  {
    "path": "harper-cli/src/annotate.rs",
    "content": "use std::{borrow::Cow, ops::Range};\n\nuse ariadne::{Color, Label, Report, ReportKind};\nuse clap::ValueEnum;\nuse harper_core::{Document, Span, TokenKind, TokenStringExt};\nuse strum::IntoEnumIterator;\n\n/// Represents an annotation.\npub(super) struct Annotation {\n    /// The range the annotation covers in the source. For instance, this might be a single word.\n    span: Span<char>,\n    /// The message displayed by the annotation.\n    annotation_text: String,\n    /// The color of the annotation.\n    color: Color,\n}\nimpl Annotation {\n    /// Converts the annotation into an [`ariadne::Label`].\n    #[must_use]\n    pub(super) fn into_label(\n        self,\n        input_identifier: &str,\n    ) -> Label<(&str, std::ops::Range<usize>)> {\n        Label::new((input_identifier, self.span.into()))\n            .with_message(self.annotation_text)\n            .with_color(self.color)\n    }\n\n    /// Gets an iterator of annotation `Label` from the given document.\n    ///\n    /// This is similar to [`Self::iter_from_document`], but this additionally converts\n    /// the [`Annotation`] into [`ariadne::Label`] for convenience.\n    pub(super) fn iter_labels_from_document<'inpt_id>(\n        annotation_type: AnnotationType,\n        document: &Document,\n        input_identifier: &'inpt_id str,\n    ) -> impl Iterator<Item = Label<(&'inpt_id str, std::ops::Range<usize>)>> {\n        Self::iter_from_document(annotation_type, document)\n            .map(|annotation| annotation.into_label(input_identifier))\n    }\n\n    /// Gets an iterator of [`Annotation`] for a given document. The annotations will be based on\n    /// `annotation_type`.\n    fn iter_from_document(\n        annotation_type: AnnotationType,\n        document: &Document,\n    ) -> Box<dyn Iterator<Item = Self> + '_> {\n        match annotation_type {\n            AnnotationType::Upos => Box::new({\n                document.tokens().filter_map(|token| {\n                    let span = token.span;\n                    if let TokenKind::Word(Some(metadata)) = &token.kind {\n                        // Only annotate words (with dict word metadata) for `AnnotationType::Upos`.\n                        let pos_tag = metadata.pos_tag;\n                        Some(Self {\n                            span,\n                            annotation_text: pos_tag\n                                .map_or(\"NONE\".to_owned(), |upos| upos.to_string()),\n                            color: pos_tag.map_or(Color::Red, get_color_for_enum_variant),\n                        })\n                    } else {\n                        // Not a word, or a word with no metadata.\n                        None\n                    }\n                })\n            }),\n            AnnotationType::Chunks => Box::new(\n                document\n                    .iter_chunks()\n                    .zip(RandomColorIter::new())\n                    .enumerate()\n                    .map(|(i, (chunk, color))| Self {\n                        span: chunk.span().unwrap(),\n                        annotation_text: i.to_string(),\n                        color,\n                    }),\n            ),\n        }\n    }\n}\n\n/// Represents how the tokens should be annotated.\n#[derive(Debug, Clone, Copy, ValueEnum)]\npub(super) enum AnnotationType {\n    /// UPOS (part of speech)\n    Upos,\n    Chunks,\n}\nimpl AnnotationType {\n    /// Build a [`Report`] from the provided [`Document`], `input_identifier`, and `report_title`.\n    pub(super) fn build_report<'input_id>(\n        &self,\n        doc: &Document,\n        input_identifier: &'input_id str,\n        report_title: &'input_id str,\n    ) -> Report<'input_id, (&'input_id str, Range<usize>)> {\n        Report::build(\n            ReportKind::Custom(report_title, Color::Blue),\n            (input_identifier, 0..0),\n        )\n        .with_labels(Annotation::iter_labels_from_document(\n            *self,\n            doc,\n            input_identifier,\n        ))\n        .finish()\n    }\n\n    /// The title that should be used for the printed output.\n    pub(super) fn get_title(&self) -> &'static str {\n        match self {\n            AnnotationType::Upos => \"UPOS Tags\",\n            AnnotationType::Chunks => \"Chunks\",\n        }\n    }\n\n    /// The title that should be used for the printed output, with added tags.\n    ///\n    /// The tags are used to provide additional information about the output.\n    pub(super) fn get_title_with_tags(&self, tags: &[&str]) -> Cow<'static, str> {\n        if tags.is_empty() {\n            self.get_title().into()\n        } else {\n            let tags = tags.join(\", \");\n            (self.get_title().to_owned() + &format!(\" ({tags})\")).into()\n        }\n    }\n}\n\n/// An infinite iterator that produces random colors. This uses a fixed seed, so all instances of\n/// this iterator will produce colors in the same order.\nstruct RandomColorIter {\n    color_gen: ariadne::ColorGenerator,\n}\nimpl RandomColorIter {\n    fn new() -> Self {\n        Self {\n            // Using a lower than default `min_brightness` to hopefully create more distinguishable colors.\n            color_gen: ariadne::ColorGenerator::from_state([31715, 3528, 21854], 0.2),\n        }\n    }\n}\nimpl Iterator for RandomColorIter {\n    type Item = Color;\n    fn next(&mut self) -> Option<Self::Item> {\n        Some(self.color_gen.next())\n    }\n}\n\n/// Gets a random `Color` for an enum variant.\n///\n/// A given enum variant's color is consistent, meaning it will not change throughout multiple\n/// calls of this function or multiple runs of the application.\n#[must_use]\nfn get_color_for_enum_variant<T: IntoEnumIterator + PartialEq>(variant_to_color: T) -> Color {\n    get_color_for_index(\n        T::iter()\n            .position(|variant| variant == variant_to_color)\n            .unwrap(),\n    )\n}\n\n/// Gets the nth random `Color` for a numeric index.\n///\n/// A given index's color is consistent, meaning it will not change throughout multiple calls of\n/// this function or multiple runs of the application.\n#[must_use]\nfn get_color_for_index(idx_to_color: usize) -> Color {\n    RandomColorIter::new().nth(idx_to_color).unwrap()\n}\n"
  },
  {
    "path": "harper-cli/src/input/multi_input.rs",
    "content": "use std::{borrow::Cow, path::PathBuf};\n\nuse enum_dispatch::enum_dispatch;\nuse strum_macros::EnumTryAs;\n\nuse crate::input::single_input::{FileInput, SingleInput};\n\nuse super::InputTrait;\n\n#[enum_dispatch]\npub(crate) trait MultiInputTrait: InputTrait {\n    /// Get an iterator of [`SingleInput`] from this `MultiInput`.\n    ///\n    /// For instance, if this is a directory input, the returned inputs might correspond to the\n    /// files inside that directory.\n    #[allow(dead_code)]\n    fn iter_inputs(&self) -> anyhow::Result<impl Iterator<Item = SingleInput>>;\n}\n\n#[derive(Clone, EnumTryAs)]\n#[enum_dispatch(MultiInputTrait, InputTrait)]\npub(crate) enum MultiInput {\n    /// A directory.\n    Dir(DirInput),\n}\nimpl MultiInput {\n    /// Try to parse a `MultiInput` from the provided string. This might fail if the provided\n    /// string cannot be parsed as a supported `MultiInput`.\n    pub(crate) fn try_parse_string(input_string: &str) -> anyhow::Result<Self> {\n        let metadata = std::fs::metadata(input_string);\n        if metadata?.is_dir() {\n            // Input is a valid directory path.\n            Ok(Self::Dir(DirInput {\n                path: input_string.into(),\n            }))\n        } else {\n            anyhow::bail!(\n                \"Unsupported input '{}' for {}\",\n                input_string,\n                std::any::type_name::<Self>()\n            )\n        }\n    }\n}\n\n/// A directory.\n#[derive(Clone)]\npub(crate) struct DirInput {\n    /// The path pointing to the directory.\n    path: PathBuf,\n}\nimpl DirInput {\n    /// An iterator of the files inside the directory, as [`FileInput`].\n    pub(crate) fn iter_files(&self) -> anyhow::Result<impl Iterator<Item = FileInput>> {\n        Ok(std::fs::read_dir(&self.path)?.filter_map(|dir_entry| {\n            if let Ok(dir_entry) = dir_entry\n                && let Ok(file) = FileInput::try_from_path(&dir_entry.path())\n            {\n                Some(file)\n            } else {\n                None\n            }\n        }))\n    }\n}\nimpl MultiInputTrait for DirInput {\n    fn iter_inputs(&self) -> anyhow::Result<impl Iterator<Item = SingleInput>> {\n        Ok(self.iter_files()?.map(|file| file.into()))\n    }\n}\nimpl InputTrait for DirInput {\n    fn get_identifier(&self) -> Cow<'_, str> {\n        self.path\n            .file_name()\n            .map_or(Cow::from(\"<dir>\"), |dir_name| dir_name.to_string_lossy())\n    }\n}\n"
  },
  {
    "path": "harper-cli/src/input/single_input.rs",
    "content": "use std::path::Path;\nuse std::{borrow::Cow, io::Read, path::PathBuf};\n\nuse enum_dispatch::enum_dispatch;\nuse strum_macros::EnumTryAs;\n\nuse harper_asciidoc::AsciidocParser;\nuse harper_comments::CommentParser;\nuse harper_core::parsers::{Markdown, OrgMode, Parser};\nuse harper_core::spell::Dictionary;\nuse harper_core::{\n    Document,\n    parsers::{MarkdownOptions, PlainEnglish},\n};\nuse harper_ink::InkParser;\nuse harper_literate_haskell::LiterateHaskellParser;\nuse harper_python::PythonParser;\n\nuse super::InputTrait;\n\n/// An input of a single source. This would not include a directory for instance, which may have\n/// multiple (file) sources.\n#[enum_dispatch]\npub(crate) trait SingleInputTrait: InputTrait {\n    /// Loads the contained file/string into a conventional format. Returns a `Result` containing\n    /// a tuple of a `Document` and its corresponding source text as a string.\n    fn load(\n        &self,\n        markdown_options: MarkdownOptions,\n        dictionary: &dyn Dictionary,\n    ) -> anyhow::Result<(Document, Cow<'_, str>)> {\n        self.load_with_parser(&self.get_parser(markdown_options), dictionary)\n    }\n\n    /// Loads the contained file/string into a conventional format using the provided\n    /// parser. Returns a `Result` containing a tuple of a `Document` and its corresponding source\n    /// text as a string.\n    fn load_with_parser(\n        &self,\n        parser: &dyn Parser,\n        dictionary: &dyn Dictionary,\n    ) -> anyhow::Result<(Document, Cow<'_, str>)> {\n        let text = self.get_content()?;\n        Ok((Document::new(&text, &parser, &dictionary), text))\n    }\n\n    /// The parser that should be used to parse this input.\n    fn get_parser(&self, _markdown_options: MarkdownOptions) -> Box<dyn Parser> {\n        Box::new(PlainEnglish)\n    }\n\n    /// Get/load the raw content of this input.\n    fn get_content(&self) -> anyhow::Result<Cow<'_, str>>;\n}\n\n#[derive(Clone, EnumTryAs)]\n#[enum_dispatch(SingleInputTrait, InputTrait)]\npub(crate) enum SingleInput {\n    /// Read from a file.\n    File(FileInput),\n    /// Direct text input via the command line.\n    Text(TextInput),\n    /// Read from standard input.\n    Stdin(StdinInput),\n}\nimpl SingleInput {\n    /// Parse a string into a [`SingleInput`], trying to automatically detect the input\n    /// type based on its contents.\n    ///\n    /// For instance, an `input_string` that corresponds to a valid filepath will be parsed as\n    /// a [`SingleInput::File`].\n    pub(crate) fn parse_string(input_string: &str) -> Self {\n        if let Ok(file) = FileInput::try_from_path(Path::new(input_string)) {\n            // Input is a valid filepath.\n            Self::File(file)\n        } else {\n            // Input is not a valid filepath, we assume it's intended to be a string.\n            Self::Text(TextInput {\n                text: input_string.to_owned(),\n            })\n        }\n    }\n}\n\npub trait SingleInputOptionExt {\n    /// Returns the contained [`Some`] value if some, otherwise returns [`SingleInput::Stdin`].\n    fn unwrap_or_read_from_stdin(self) -> SingleInput;\n}\nimpl SingleInputOptionExt for Option<SingleInput> {\n    fn unwrap_or_read_from_stdin(self) -> SingleInput {\n        self.unwrap_or_else(|| StdinInput.into())\n    }\n}\n\n/// File (path) input.\n#[derive(Clone)]\npub(crate) struct FileInput {\n    path: PathBuf,\n}\nimpl FileInput {\n    /// The path of the file.\n    pub(crate) fn path(&self) -> &PathBuf {\n        &self.path\n    }\n\n    /// Try to create a `FileInput` from the given path. If the path does not point to a valid\n    /// file, this will fail.\n    pub(crate) fn try_from_path(path: &Path) -> anyhow::Result<Self> {\n        let metadata = std::fs::metadata(path);\n        if metadata?.is_file() {\n            Ok(Self::from_path_unchecked(path))\n        } else {\n            anyhow::bail!(\n                \"Failed to parse '{}' as {}\",\n                path.to_string_lossy(),\n                std::any::type_name::<Self>()\n            )\n        }\n    }\n\n    /// Create a file input from the given path, without checking if that path points to a valid\n    /// file.\n    pub(crate) fn from_path_unchecked(path: &Path) -> Self {\n        Self {\n            path: path.to_owned(),\n        }\n    }\n}\nimpl SingleInputTrait for FileInput {\n    /// Read content from the file.\n    fn get_content(&self) -> anyhow::Result<Cow<'_, str>> {\n        Ok(std::fs::read_to_string(&self.path)?.into())\n    }\n\n    /// Detect the parser that should be used for the given file.\n    fn get_parser(&self, _markdown_options: MarkdownOptions) -> Box<dyn Parser> {\n        match self.path.extension().map(|ext| ext.to_str().unwrap()) {\n            Some(\"md\" | \"markdown\" | \"mkd\" | \"mdwn\" | \"mdown\" | \"mdtxt\" | \"mdtext\") => {\n                Box::new(Markdown::default())\n            }\n            Some(\"ink\") => Box::new(InkParser::default()),\n            Some(\"lhs\") => Box::new(LiterateHaskellParser::new_markdown(\n                MarkdownOptions::default(),\n            )),\n            Some(\"org\") => Box::new(OrgMode),\n            Some(\"tex\" | \"latex\" | \"sty\" | \"cls\" | \"dtx\") => Box::new(harper_tex::TeX::default()),\n            Some(\"typ\") => Box::new(harper_typst::Typst),\n            Some(\"py\") | Some(\"pyi\") => Box::new(PythonParser::default()),\n            Some(\"adoc\") | Some(\"asciidoc\") => Box::new(AsciidocParser::default()),\n            Some(\"txt\") => Box::new(PlainEnglish),\n            _ => {\n                if let Some(comment_parser) =\n                    CommentParser::new_from_filename(&self.path, _markdown_options)\n                {\n                    Box::new(comment_parser)\n                } else {\n                    eprintln!(\n                        \"{}: Warning: Could not detect language ID; falling back to PlainEnglish parser.\",\n                        self.get_identifier()\n                    );\n                    Box::new(PlainEnglish)\n                }\n            }\n        }\n    }\n}\nimpl InputTrait for FileInput {\n    fn get_identifier(&self) -> Cow<'_, str> {\n        self.path\n            .file_name()\n            .map_or(Cow::from(\"<file>\"), |file_name| file_name.to_string_lossy())\n    }\n}\n\n/// Direct text input via the command line.\n#[derive(Clone)]\npub(crate) struct TextInput {\n    text: String,\n}\nimpl SingleInputTrait for TextInput {\n    fn get_content(&self) -> anyhow::Result<Cow<'_, str>> {\n        Ok(Cow::from(&self.text))\n    }\n}\nimpl InputTrait for TextInput {\n    fn get_identifier(&self) -> Cow<'_, str> {\n        Cow::from(\"<text>\")\n    }\n}\n\n/// Standard input (stdin).\n#[derive(Clone)]\npub(crate) struct StdinInput;\nimpl SingleInputTrait for StdinInput {\n    fn get_content(&self) -> anyhow::Result<Cow<'_, str>> {\n        let mut buf = String::new();\n        std::io::stdin().lock().read_to_string(&mut buf)?;\n        Ok(Cow::from(buf))\n    }\n}\nimpl InputTrait for StdinInput {\n    fn get_identifier(&self) -> Cow<'_, str> {\n        Cow::from(\"<stdin>\")\n    }\n}\n"
  },
  {
    "path": "harper-cli/src/input.rs",
    "content": "use std::borrow::Cow;\n\nuse enum_dispatch::enum_dispatch;\nuse strum_macros::EnumTryAs;\n\npub mod single_input;\nuse single_input::SingleInput;\n\npub mod multi_input;\nuse multi_input::MultiInput;\n\n/// The general trait implemented by all input types.\n#[enum_dispatch]\npub(crate) trait InputTrait {\n    /// Gets a human-readable identifier for the input. For example, this can be a filename, or\n    /// simply the string `\"<input>\"`.\n    fn get_identifier(&self) -> Cow<'_, str>;\n}\n\n/// Represents an input/source passed via the command line. For example, this can be a file,\n/// a directory, or text passed via the command line directly.\n#[enum_dispatch(InputTrait)]\n#[derive(Clone, EnumTryAs)]\npub(crate) enum AnyInput {\n    /// An input of a single source. For instance, a specific file, or input from standard input.\n    Single(SingleInput),\n    /// An input of multiple sources. For instance, a path to a directory.\n    Multi(MultiInput),\n}\n\n// This allows this type to be directly used with clap as an argument.\n// https://docs.rs/clap/latest/clap/macro.value_parser.html\nimpl From<String> for AnyInput {\n    /// Converts the given string into an `Input` by trying to detect the input type.\n    fn from(input_string: String) -> Self {\n        if let Ok(multi_input) = MultiInput::try_parse_string(&input_string) {\n            Self::Multi(multi_input)\n        } else {\n            Self::Single(SingleInput::parse_string(&input_string))\n        }\n    }\n}\n\n// This allows this type to be directly used with clap as an argument.\n// It can be used in place of AnyInput if the command should only accept single-inputs\n// (e.g. a file).\nimpl From<String> for SingleInput {\n    fn from(input_string: String) -> Self {\n        SingleInput::parse_string(&input_string)\n    }\n}\n\n// This allows this type to be directly used with clap as an argument.\n// It can be used in place of AnyInput if the command should only accept multi-inputs,\n// (e.g. directories).\nimpl From<String> for MultiInput {\n    fn from(input_string: String) -> Self {\n        MultiInput::try_parse_string(&input_string).unwrap()\n    }\n}\n"
  },
  {
    "path": "harper-cli/src/lint.rs",
    "content": "use std::borrow::Cow;\nuse std::collections::BTreeMap;\nuse std::path::{Component, Path, PathBuf};\nuse std::sync::Arc;\nuse std::{fs, process};\n\nuse anyhow::Context;\nuse ariadne::{Color, Fmt, Label, Report, ReportKind, Source};\nuse hashbrown::HashMap;\nuse rayon::prelude::*;\nuse serde::Serialize;\n\nuse harper_core::{\n    linting::{Lint, LintGroup, LintGroupConfig, LintKind},\n    parsers::MarkdownOptions,\n    spell::{Dictionary, MergedDictionary, MutableDictionary},\n    weirpack::Weirpack,\n    {Dialect, DictWordMetadata, Document, Token, TokenKind, remove_overlaps_map},\n};\n\nuse crate::input::{\n    AnyInput, InputTrait,\n    multi_input::MultiInput,\n    single_input::{SingleInput, SingleInputTrait, StdinInput},\n};\n\n/// Sync version of harper-ls/src/dictionary_io@load_dict\nfn load_dict(path: &Path) -> anyhow::Result<MutableDictionary> {\n    let str = fs::read_to_string(path)?;\n\n    let mut dict = MutableDictionary::new();\n    dict.extend_words(\n        str.lines()\n            .map(|l| (l.chars().collect::<Vec<_>>(), DictWordMetadata::default())),\n    );\n\n    Ok(dict)\n}\n\nfn load_weirpacks(inputs: &[SingleInput]) -> anyhow::Result<Vec<Weirpack>> {\n    let mut packs = Vec::new();\n    for input in inputs {\n        let Some(file) = input.try_as_file_ref() else {\n            anyhow::bail!(\n                \"Weirpack inputs must be files, got {}\",\n                input.get_identifier()\n            );\n        };\n\n        let path = file.path();\n        let bytes = fs::read(path)\n            .with_context(|| format!(\"Failed to read weirpack {}\", path.display()))?;\n        let pack = Weirpack::from_bytes(&bytes)\n            .with_context(|| format!(\"Failed to load weirpack {}\", path.display()))?;\n        packs.push(pack);\n    }\n    Ok(packs)\n}\n\n/// Path version of harper-ls/src/dictionary_io@file_dict_name\nfn file_dict_name(path: &Path) -> PathBuf {\n    let mut rewritten = String::new();\n\n    for seg in path.components() {\n        if !matches!(seg, Component::RootDir) {\n            rewritten.push_str(&seg.as_os_str().to_string_lossy());\n            rewritten.push('%');\n        }\n    }\n\n    rewritten.into()\n}\n\n/// Output format for lint results.\n#[derive(Debug, Clone, Copy, clap::ValueEnum, Default, PartialEq)]\npub enum OutputFormat {\n    /// Rich output with source context (Ariadne reports).\n    #[default]\n    Default,\n    /// Structured JSON output.\n    Json,\n    /// One line per lint, no source context.\n    Compact,\n}\n\npub struct LintOptions {\n    pub count: bool,\n    pub ignore: Option<Vec<String>>,\n    pub only: Option<Vec<String>>,\n    pub keep_overlapping_lints: bool,\n    pub dialect: Dialect,\n    pub weirpack_inputs: Vec<SingleInput>,\n    pub color: bool,\n    pub format: OutputFormat,\n}\n\nenum ReportStyle {\n    FullAriadne,\n    BriefCountsOnly,\n    Json,\n    Compact,\n}\n\n#[derive(Serialize)]\nstruct JsonFileResult {\n    file: String,\n    lint_count: usize,\n    lints: Vec<JsonLint>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    error: Option<String>,\n}\n\n#[derive(Serialize)]\nstruct JsonLint {\n    rule: String,\n    kind: String,\n    span: JsonSpan,\n    line: usize,\n    column: usize,\n    message: String,\n    priority: u8,\n    suggestions: Vec<String>,\n    matched_text: String,\n}\n\n/// Span offsets in characters (not bytes).\n#[derive(Serialize)]\nstruct JsonSpan {\n    char_start: usize,\n    char_end: usize,\n}\n\n/// Convert a character index into a 1-based (line, column) pair.\nfn char_index_to_line_col(source: &[char], index: usize) -> (usize, usize) {\n    let before = &source[..index.min(source.len())];\n    let line = before.iter().filter(|&&c| c == '\\n').count() + 1;\n    let col = before.iter().rev().take_while(|&&c| c != '\\n').count() + 1;\n    (line, col)\n}\n\nstruct InputInfo<'a> {\n    parent_input_id: &'a str,\n    input: &'a AnyInput,\n    color: bool,\n}\n\nstruct InputJob {\n    batch_mode: bool,\n    parent_input_id: String,\n    input: AnyInput,\n}\n\nimpl InputInfo<'_> {\n    /// Path without ANSI escapes, for machine-readable output.\n    fn plain_path(&self) -> String {\n        let child = self.input.get_identifier();\n        if self.parent_input_id.is_empty() {\n            child.into_owned()\n        } else {\n            format!(\"{}/{}\", self.parent_input_id, child)\n        }\n    }\n\n    fn format_path(&self) -> String {\n        if self.color {\n            let child = self.input.get_identifier();\n            if self.parent_input_id.is_empty() {\n                child.into_owned()\n            } else {\n                format!(\"\\x1b[33m{}/\\x1b[0m{}\", self.parent_input_id, child)\n            }\n        } else {\n            self.plain_path()\n        }\n    }\n}\n\npub fn lint(\n    markdown_options: MarkdownOptions,\n    curated_dictionary: Arc<dyn Dictionary>,\n    mut inputs: Vec<AnyInput>,\n    mut lint_options: LintOptions,\n    user_dict_path: PathBuf,\n    // TODO workspace_dict_path?\n    file_dict_path: PathBuf,\n) -> anyhow::Result<()> {\n    let LintOptions {\n        count,\n        ref mut ignore,\n        ref mut only,\n        dialect,\n        ref weirpack_inputs,\n        ..\n    } = lint_options;\n\n    // Zero or more inputs, default to stdin if not provided\n    if inputs.is_empty() {\n        inputs.push(SingleInput::from(StdinInput).into());\n    }\n\n    let weirpacks = load_weirpacks(weirpack_inputs)?;\n\n    // Filter out any rules from ignore/only lists that don't exist in the current config\n    // Uses a cached config to avoid expensive linter initialization\n    let mut config = LintGroupConfig::new_curated();\n    for pack in &weirpacks {\n        for rule in pack.rules.keys() {\n            config.set_rule_enabled(rule, true);\n        }\n    }\n\n    if let Some(only) = only {\n        only.retain(|rule| {\n            if !config.has_rule(rule) {\n                eprintln!(\"Warning: Cannot enable unknown rule '{}'.\", rule);\n                return false;\n            }\n            true\n        });\n    }\n\n    if let Some(ignore) = ignore {\n        ignore.retain(|rule| {\n            if !config.has_rule(rule) {\n                eprintln!(\"Warning: Cannot disable unknown rule '{}'.\", rule);\n                return false;\n            }\n            true\n        });\n    }\n\n    // Create merged dictionary with base dictionary\n    let mut curated_plus_user_dict = MergedDictionary::new();\n    curated_plus_user_dict.add_dictionary(Arc::new(curated_dictionary));\n\n    let user_dict_msg = match load_dict(&user_dict_path) {\n        Ok(user_dict) => {\n            curated_plus_user_dict.add_dictionary(Arc::new(user_dict));\n            \"Using\"\n        }\n        Err(_) => \"There is no\",\n    };\n    eprintln!(\n        \"Note: {user_dict_msg} user dictionary at {}\",\n        user_dict_path.display()\n    );\n\n    // The lint stats for all files\n    let mut all_lint_kinds: HashMap<LintKind, usize> = HashMap::new();\n    let mut all_rules: HashMap<String, usize> = HashMap::new();\n    let mut all_lint_kind_rule_pairs: HashMap<(LintKind, String), usize> = HashMap::new();\n    let mut all_spellos: HashMap<String, usize> = HashMap::new();\n\n    // Derive the report style from --format and --count\n    let report_mode = match (lint_options.format, count) {\n        (OutputFormat::Json, _) => ReportStyle::Json,\n        (OutputFormat::Compact, _) => ReportStyle::Compact,\n        (OutputFormat::Default, true) => ReportStyle::BriefCountsOnly,\n        (OutputFormat::Default, false) => ReportStyle::FullAriadne,\n    };\n\n    let mut input_jobs = Vec::new();\n    for user_input in inputs {\n        if let Some(dir_input) = user_input\n            .try_as_multi_ref()\n            .and_then(MultiInput::try_as_dir_ref)\n        {\n            let mut file_entries: Vec<_> = dir_input.iter_files()?.collect();\n\n            file_entries.sort_by(|a, b| a.path().file_name().cmp(&b.path().file_name()));\n\n            for entry in file_entries.into_iter().map(SingleInput::from) {\n                input_jobs.push(InputJob {\n                    batch_mode: true,\n                    parent_input_id: user_input.get_identifier().to_string(),\n                    input: entry.into(),\n                });\n            }\n        } else {\n            input_jobs.push(InputJob {\n                batch_mode: false,\n                parent_input_id: String::new(),\n                input: user_input.clone(),\n            });\n        }\n    }\n\n    let per_input_results = {\n        let run_job = |job: InputJob| {\n            let InputJob {\n                batch_mode,\n                parent_input_id,\n                input,\n            } = job;\n            lint_one_input(\n                // Common properties of harper-cli\n                markdown_options,\n                &curated_plus_user_dict,\n                // Passed from the user for the `lint` subcommand\n                &report_mode,\n                &lint_options,\n                &weirpacks,\n                &file_dict_path,\n                // Are we linting multiple inputs inside a directory?\n                batch_mode,\n                // The current input to be linted\n                InputInfo {\n                    parent_input_id: parent_input_id.as_str(),\n                    input: &input,\n                    color: lint_options.color,\n                },\n            )\n        };\n\n        if input_jobs.len() > 1 {\n            input_jobs.into_par_iter().map(run_job).collect::<Vec<_>>()\n        } else {\n            input_jobs.into_iter().map(run_job).collect::<Vec<_>>()\n        }\n    };\n\n    let mut json_results: Vec<JsonFileResult> = Vec::new();\n\n    for lint_results in per_input_results {\n        let lint_results = lint_results?;\n        // Update the global stats\n        for (kind, count) in lint_results.lint_kinds {\n            *all_lint_kinds.entry(kind).or_insert(0) += count;\n        }\n        for (rule, count) in lint_results.lint_rules {\n            *all_rules.entry(rule).or_insert(0) += count;\n        }\n        for ((kind, rule), count) in lint_results.lint_kind_rule_pairs {\n            *all_lint_kind_rule_pairs.entry((kind, rule)).or_insert(0) += count;\n        }\n        for (word, count) in lint_results.spellos {\n            *all_spellos.entry(word).or_insert(0) += count;\n        }\n        if let Some(json) = lint_results.json {\n            json_results.push(json);\n        }\n    }\n\n    match report_mode {\n        ReportStyle::Json => {\n            println!(\"{}\", serde_json::to_string_pretty(&json_results)?);\n        }\n        ReportStyle::Compact => {}\n        _ => {\n            final_report(\n                dialect,\n                true,\n                all_lint_kinds,\n                all_rules,\n                all_lint_kind_rule_pairs,\n                all_spellos,\n                lint_options.color,\n            );\n        }\n    }\n\n    process::exit(1);\n}\n\nstruct LintOneResult {\n    lint_kinds: HashMap<LintKind, usize>,\n    lint_rules: HashMap<String, usize>,\n    lint_kind_rule_pairs: HashMap<(LintKind, String), usize>,\n    spellos: HashMap<String, usize>,\n    json: Option<JsonFileResult>,\n}\n\nstruct FullInputInfo<'a> {\n    input: InputInfo<'a>,\n    doc: Document,\n    source: Cow<'a, str>,\n}\n\n#[allow(clippy::too_many_arguments)]\nfn lint_one_input(\n    // Common properties of harper-cli\n    markdown_options: MarkdownOptions,\n    curated_plus_user_dict: &MergedDictionary,\n    report_mode: &ReportStyle,\n    // Options passed from the user specific to the `lint` subcommand\n    lint_options: &LintOptions,\n    weirpacks: &[Weirpack],\n    file_dict_path: &Path,\n    // Are we linting multiple inputs?\n    batch_mode: bool,\n    // For the current input\n    current: InputInfo,\n) -> anyhow::Result<LintOneResult> {\n    let LintOptions {\n        count: _,\n        ignore,\n        only,\n        keep_overlapping_lints,\n        dialect,\n        weirpack_inputs: _,\n        color: _,\n        format: _,\n    } = lint_options;\n\n    let mut lint_kinds: HashMap<LintKind, usize> = HashMap::new();\n    let mut lint_rules: HashMap<String, usize> = HashMap::new();\n    let mut lint_kind_rule_pairs: HashMap<(LintKind, String), usize> = HashMap::new();\n    let mut spellos: HashMap<String, usize> = HashMap::new();\n    let mut json: Option<JsonFileResult> = None;\n\n    if let Some(single_input) = current.input.try_as_single_ref() {\n        // Create a new merged dictionary for this input.\n        let mut merged_dictionary = curated_plus_user_dict.clone();\n\n        // If processing a file, try to load its per-file dictionary\n        if let Some(file) = single_input.try_as_file_ref() {\n            let dict_path = file_dict_path.join(file_dict_name(file.path()));\n            if let Ok(file_dictionary) = load_dict(&dict_path) {\n                merged_dictionary.add_dictionary(Arc::new(file_dictionary));\n                eprintln!(\n                    \"{}: Note: Using per-file dictionary: {}\",\n                    current.format_path(),\n                    dict_path.display()\n                );\n            }\n        }\n\n        match single_input.load(markdown_options, &merged_dictionary) {\n            Err(err) => {\n                eprintln!(\"{}\", err);\n                if matches!(report_mode, ReportStyle::Json) {\n                    json = Some(JsonFileResult {\n                        file: current.plain_path(),\n                        lint_count: 0,\n                        lints: vec![],\n                        error: Some(err.to_string()),\n                    });\n                }\n            }\n            Ok((doc, source)) => {\n                // Create the Lint Group from which we will lint this input, using the combined dictionary and the specified dialect\n                let mut lint_group = LintGroup::new_curated(merged_dictionary.into(), *dialect);\n\n                for pack in weirpacks {\n                    let mut pack_group = pack.to_lint_group()?;\n                    lint_group.merge_from(&mut pack_group);\n                }\n\n                // Turn specified rules on or off\n                configure_lint_group(&mut lint_group, only, ignore);\n\n                // Run the linter, getting back a map of rule name -> lints\n                let mut named_lints = lint_group.organized_lints(&doc);\n\n                // Lint counts, for brief reporting\n                let lint_count_before = named_lints.values().map(|v| v.len()).sum::<usize>();\n                if !keep_overlapping_lints {\n                    remove_overlaps_map(&mut named_lints);\n                }\n                let lint_count_after = named_lints.values().map(|v| v.len()).sum::<usize>();\n\n                // Extract the lint kinds and rules etc. for reporting\n                (lint_kinds, lint_rules) = count_lint_kinds_and_rules(&named_lints);\n                lint_kind_rule_pairs = collect_lint_kind_rule_pairs(&named_lints);\n                spellos = collect_spellos(&named_lints, doc.get_source());\n\n                // Build JSON result if in JSON mode\n                if matches!(report_mode, ReportStyle::Json) {\n                    let file = current.plain_path();\n                    let source_chars = doc.get_source();\n                    let mut lints = Vec::new();\n\n                    for (rule_name, rule_lints) in &named_lints {\n                        for lint in rule_lints {\n                            let (line, column) =\n                                char_index_to_line_col(source_chars, lint.span.start);\n                            let matched_text = lint.span.get_content_string(source_chars);\n                            let suggestions: Vec<String> =\n                                lint.suggestions.iter().map(|s| format!(\"{s}\")).collect();\n                            lints.push(JsonLint {\n                                rule: rule_name.clone(),\n                                kind: lint.lint_kind.to_string(),\n                                span: JsonSpan {\n                                    char_start: lint.span.start,\n                                    char_end: lint.span.end,\n                                },\n                                line,\n                                column,\n                                message: lint.message.clone(),\n                                priority: lint.priority,\n                                suggestions,\n                                matched_text,\n                            });\n                        }\n                    }\n\n                    json = Some(JsonFileResult {\n                        file,\n                        lint_count: lint_count_after,\n                        lints,\n                        error: None,\n                    });\n                }\n\n                single_input_report(\n                    &FullInputInfo {\n                        input: InputInfo {\n                            parent_input_id: current.parent_input_id,\n                            input: current.input,\n                            color: current.color,\n                        },\n                        doc,\n                        source,\n                    },\n                    // Linting results of this input\n                    &named_lints,\n                    (lint_count_before, lint_count_after),\n                    &lint_kinds,\n                    &lint_rules,\n                    // Reporting arguments\n                    batch_mode,\n                    report_mode,\n                );\n            }\n        }\n    }\n\n    Ok(LintOneResult {\n        lint_kinds,\n        lint_rules,\n        lint_kind_rule_pairs,\n        spellos,\n        json,\n    })\n}\n\nfn configure_lint_group(\n    lint_group: &mut LintGroup,\n    only: &Option<Vec<String>>,\n    ignore: &Option<Vec<String>>,\n) {\n    if let Some(rules) = only {\n        lint_group.set_all_rules_to(Some(false));\n        rules\n            .iter()\n            .for_each(|rule| lint_group.config.set_rule_enabled(rule, true));\n    }\n\n    if let Some(rules) = ignore {\n        rules\n            .iter()\n            .for_each(|rule| lint_group.config.set_rule_enabled(rule, false));\n    }\n\n    // Have all rules been disabled somehow?\n    if !lint_group\n        .iter_keys()\n        .any(|rule| lint_group.config.is_rule_enabled(rule))\n    {\n        eprintln!(\"Warning: No rules are enabled.\");\n    }\n}\n\nfn count_lint_kinds_and_rules(\n    named_lints: &BTreeMap<String, Vec<Lint>>,\n) -> (HashMap<LintKind, usize>, HashMap<String, usize>) {\n    let mut kinds = HashMap::new();\n    let mut rules = HashMap::new();\n\n    for (rule_name, lints) in named_lints {\n        lints\n            .iter()\n            .for_each(|lint| *kinds.entry(lint.lint_kind).or_insert(0) += 1);\n\n        if !lints.is_empty() {\n            *rules.entry(rule_name.to_string()).or_insert(0) += lints.len();\n        }\n    }\n\n    (kinds, rules)\n}\n\nfn collect_lint_kind_rule_pairs(\n    named_lints: &BTreeMap<String, Vec<Lint>>,\n) -> HashMap<(LintKind, String), usize> {\n    let mut pairs = HashMap::new();\n\n    for (rule_name, lints) in named_lints {\n        for lint in lints {\n            pairs\n                .entry((lint.lint_kind, rule_name.to_string()))\n                .and_modify(|count| *count += 1)\n                .or_insert(1);\n        }\n    }\n\n    pairs\n}\n\nfn collect_spellos(\n    named_lints: &BTreeMap<String, Vec<Lint>>,\n    source: &[char],\n) -> HashMap<String, usize> {\n    named_lints\n        .get(\"SpellCheck\")\n        .into_iter()\n        .flatten()\n        .map(|lint| lint.span.get_content_string(source))\n        .fold(HashMap::new(), |mut acc, spello| {\n            *acc.entry(spello).or_insert(0) += 1;\n            acc\n        })\n}\n\nfn single_input_report(\n    // Properties of the current input\n    input_info: &FullInputInfo,\n    // Linting results of this input\n    named_lints: &BTreeMap<String, Vec<Lint>>,\n    lint_count: (usize, usize),\n    lint_kinds: &HashMap<LintKind, usize>,\n    lint_rules: &HashMap<String, usize>,\n    // Reporting parameters\n    batch_mode: bool, // If true, we are processing multiple files, which affects how we report\n    report_mode: &ReportStyle,\n) {\n    // JSON mode: all output is handled by the caller after collecting results\n    if matches!(report_mode, ReportStyle::Json) {\n        return;\n    }\n\n    let FullInputInfo { input, doc, source } = input_info;\n    let (lint_count_before, lint_count_after) = lint_count;\n\n    // Compact mode: one line per lint, GCC/grep-style\n    if matches!(report_mode, ReportStyle::Compact) {\n        let source_chars = doc.get_source();\n        for (rule_name, lints) in named_lints {\n            for lint in lints {\n                let (line, col) = char_index_to_line_col(source_chars, lint.span.start);\n                println!(\n                    \"{}:{}:{}: {}::{}: {}\",\n                    input.plain_path(),\n                    line,\n                    col,\n                    lint.lint_kind,\n                    rule_name,\n                    lint.message\n                );\n            }\n        }\n        return;\n    }\n\n    // The Ariadne report works poorly for files with very long lines, so suppress it unless only processing one file\n    const MAX_LINE_LEN: usize = 150;\n\n    let mut report_mode = report_mode;\n    let longest = find_longest_doc_line(doc.get_tokens());\n\n    if batch_mode && longest > MAX_LINE_LEN && matches!(report_mode, ReportStyle::FullAriadne) {\n        report_mode = &ReportStyle::BriefCountsOnly;\n        println!(\n            \"{}: Longest line: {longest} exceeds max line length: {MAX_LINE_LEN}\",\n            input.format_path()\n        );\n    }\n\n    // Report the number of lints no matter what report mode we are in\n    println!(\n        \"{}: {}\",\n        input.format_path(),\n        match (lint_count_before, lint_count_after) {\n            (0, _) => \"No lints found\".to_string(),\n            (before, after) if before != after =>\n                format!(\"{before} lints before overlap removal, {after} after\"),\n            (before, _) => format!(\"{before} lints\"),\n        }\n    );\n\n    // If we are in Ariadne mode, print the report\n    if matches!(report_mode, ReportStyle::FullAriadne) {\n        let primary_color = Color::Magenta;\n\n        let input_identifier = input.input.get_identifier();\n\n        if lint_count_after != 0 {\n            let mut report_builder = Report::build(ReportKind::Advice, (&input_identifier, 0..0));\n\n            for (rule_name, lints) in named_lints {\n                for lint in lints {\n                    let (r, g, b) = rgb_for_lint_kind(Some(&lint.lint_kind));\n                    report_builder = report_builder.with_label(\n                        Label::new((&input_identifier, lint.span.into()))\n                            .with_message(format!(\n                                \"{} {}: {}\",\n                                format_args!(\"[{}::{}]\", lint.lint_kind, rule_name)\n                                    .fg(ariadne::Color::Rgb(r, g, b)),\n                                format_args!(\"(pri {})\", lint.priority).fg(ariadne::Color::Rgb(\n                                    (r as f32 * 0.66) as u8,\n                                    (g as f32 * 0.66) as u8,\n                                    (b as f32 * 0.66) as u8\n                                )),\n                                lint.message\n                            ))\n                            .with_color(primary_color),\n                    );\n                }\n            }\n\n            let report = report_builder.finish();\n            report.print((&input_identifier, Source::from(source))).ok();\n        }\n    }\n\n    // Print the more detailed counts for the lint kinds and then for the rules\n    if !lint_kinds.is_empty() {\n        let mut lint_kinds_vec: Vec<_> = lint_kinds.iter().collect();\n        lint_kinds_vec.sort_by_key(|(lk, count)| (std::cmp::Reverse(**count), lk.to_string()));\n\n        let lk_vec: Vec<(Option<String>, String)> = lint_kinds_vec\n            .into_iter()\n            .map(|(lk, c)| {\n                let (r, g, b) = rgb_for_lint_kind(Some(lk));\n                (\n                    Some(format!(\"\\x1b[38;2;{r};{g};{b}m\")),\n                    format!(\"[{lk}: {c}]\"),\n                )\n            })\n            .collect();\n\n        println!(\"lint kinds:\");\n        print_formatted_items(lk_vec, input.color);\n    }\n\n    if !lint_rules.is_empty() {\n        let mut rules_vec: Vec<_> = lint_rules.iter().collect();\n        rules_vec.sort_by_key(|(rn, count)| (std::cmp::Reverse(**count), rn.to_string()));\n\n        let r_vec: Vec<(Option<String>, String)> = rules_vec\n            .into_iter()\n            .map(|(rn, c)| (None, format!(\"<{rn}: {c}>\")))\n            .collect();\n\n        println!(\"rules:\");\n        print_formatted_items(r_vec, input.color);\n    }\n}\n\nfn find_longest_doc_line(toks: &[Token]) -> usize {\n    let mut longest_len_chars = 0;\n    let mut curr_len_chars = 0;\n    let mut current_line_start_tok_idx = 0;\n\n    for (idx, tok) in toks.iter().enumerate() {\n        if matches!(tok.kind, TokenKind::Newline(_))\n            || matches!(tok.kind, TokenKind::ParagraphBreak)\n        {\n            if curr_len_chars > longest_len_chars {\n                longest_len_chars = curr_len_chars;\n            }\n            curr_len_chars = 0;\n            current_line_start_tok_idx = idx + 1;\n        } else if matches!(tok.kind, TokenKind::Unlintable) {\n            // TODO would be more accurate to scan for \\n in the tok.span.get_content(src)\n        } else {\n            curr_len_chars += tok.span.len();\n        }\n    }\n\n    if curr_len_chars > longest_len_chars\n        && !toks.is_empty()\n        && current_line_start_tok_idx < toks.len()\n    {\n        longest_len_chars = curr_len_chars;\n    }\n\n    longest_len_chars\n}\n\nfn final_report(\n    dialect: Dialect,\n    batch_mode: bool,\n    all_lint_kinds: HashMap<LintKind, usize>,\n    all_rules: HashMap<String, usize>,\n    all_lint_kind_rule_pairs: HashMap<(LintKind, String), usize>,\n    all_spellos: HashMap<String, usize>,\n    color: bool,\n) {\n    // The stats summary of all inputs that we only do when there are multiple inputs.\n    if batch_mode {\n        let mut all_files_lint_kind_counts_vec: Vec<(LintKind, _)> =\n            all_lint_kinds.into_iter().collect();\n        all_files_lint_kind_counts_vec\n            .sort_by_key(|(lk, count)| (std::cmp::Reverse(*count), lk.to_string()));\n\n        let lint_kind_counts: Vec<(Option<String>, String)> = all_files_lint_kind_counts_vec\n            .into_iter()\n            .map(|(lint_kind, c)| {\n                let (r, g, b) = rgb_for_lint_kind(Some(&lint_kind));\n                (\n                    Some(format!(\"\\x1b[38;2;{r};{g};{b}m\")),\n                    format!(\"[{lint_kind}: {c}]\"),\n                )\n            })\n            .collect();\n\n        if !lint_kind_counts.is_empty() {\n            println!(\"All files lint kinds:\");\n            print_formatted_items(lint_kind_counts, color);\n        }\n\n        let mut all_files_rule_name_counts_vec: Vec<_> = all_rules.into_iter().collect();\n        all_files_rule_name_counts_vec\n            .sort_by_key(|(rule_name, count)| (std::cmp::Reverse(*count), rule_name.to_string()));\n\n        let rule_name_counts: Vec<(Option<String>, String)> = all_files_rule_name_counts_vec\n            .into_iter()\n            .map(|(rule_name, count)| (None, format!(\"({rule_name}: {count})\")))\n            .collect();\n\n        if !rule_name_counts.is_empty() {\n            println!(\"All files rule names:\");\n            print_formatted_items(rule_name_counts, color);\n        }\n    }\n\n    // The stats summary of all pairs of lint kind + rule name, whether there is only one input or multiple.\n    let mut lint_kind_rule_pairs: Vec<_> = all_lint_kind_rule_pairs.into_iter().collect();\n    lint_kind_rule_pairs.sort_by(|a, b| {\n        let (a, b) = ((&a.0, &a.1), (&b.0, &b.1));\n        b.1.cmp(a.1)\n            .then_with(|| a.0.0.to_string().cmp(&b.0.0.to_string()))\n            .then_with(|| a.0.1.cmp(&b.0.1))\n    });\n\n    // Format them using their colours\n    let formatted_lint_kind_rule_pairs: Vec<(Option<String>, String)> = lint_kind_rule_pairs\n        .into_iter()\n        .map(|ele| {\n            let (r, g, b) = rgb_for_lint_kind(Some(&ele.0.0));\n            let ansi_prefix = format!(\"\\x1b[38;2;{r};{g};{b}m\");\n            (\n                Some(ansi_prefix),\n                format!(\"«« {} {}·{} »»\", ele.1, ele.0.0, ele.0.1),\n            )\n        })\n        .collect();\n\n    if !formatted_lint_kind_rule_pairs.is_empty() {\n        // Print them with line wrapping\n        print_formatted_items(formatted_lint_kind_rule_pairs, color);\n    }\n\n    if !all_spellos.is_empty() {\n        // Group by lowercase spelling while preserving original case and counts\n        let mut grouped: HashMap<String, Vec<(String, usize)>> = HashMap::new();\n        for (spelling, count) in all_spellos {\n            grouped\n                .entry(spelling.to_lowercase())\n                .or_default()\n                .push((spelling, count));\n        }\n\n        // Create a vector of (lowercase_spelling, variants, total_count)\n        let mut grouped_vec: Vec<_> = grouped\n            .into_iter()\n            .map(|(lower, variants)| {\n                let total: usize = variants.iter().map(|(_, c)| c).sum();\n                (lower, variants, total)\n            })\n            .collect();\n\n        // Sort by total count (descending), then by lowercase spelling\n        grouped_vec.sort_by(|a, b| b.2.cmp(&a.2).then_with(|| a.0.cmp(&b.0)));\n\n        // Flatten the variants back out, but keep track of the group index for coloring\n        let spelling_vec: Vec<(Option<String>, String)> = grouped_vec\n            .into_iter()\n            .enumerate()\n            .flat_map(|(i, (_, variants, _))| {\n                // Sort variants by count (descending) then by original spelling\n                let mut variants = variants;\n                variants.sort_by(|a, b| b.1.cmp(&a.1).then_with(|| a.0.cmp(&b.0)));\n\n                // Choose colour based on group index (rotating through three colours)\n                let (r, g, b) = match i % 3 {\n                    0 => (180, 90, 150), // Magenta\n                    1 => (90, 180, 90),  // Green\n                    _ => (90, 150, 180), // Cyan\n                };\n                let ansi_color = format!(\"\\x1b[38;2;{};{};{}m\", r, g, b);\n\n                variants.into_iter().map(move |(spelling, c)| {\n                    (\n                        Some(ansi_color.clone()),\n                        format!(\"(\\u{201c}{spelling}\\u{201d}: {c})\"),\n                    )\n                })\n            })\n            .collect();\n\n        println!(\"All files Spelling::SpellCheck (For dialect: {})\", dialect);\n        print_formatted_items(spelling_vec, color);\n    }\n}\n\n// Note: This must be kept synchronized with:\n// packages/lint-framework/src/lint/lintKindColor.ts\n// packages/web/src/lib/lintKindColor.ts\n// This can be removed when issue #1991 is resolved.\nfn lint_kind_to_rgb() -> &'static [(LintKind, (u8, u8, u8))] {\n    &[\n        (LintKind::Agreement, (0x22, 0x8B, 0x22)),\n        (LintKind::BoundaryError, (0x8B, 0x45, 0x13)),\n        (LintKind::Capitalization, (0x54, 0x0D, 0x6E)),\n        (LintKind::Eggcorn, (0xFF, 0x8C, 0x00)),\n        (LintKind::Enhancement, (0x0E, 0xAD, 0x69)),\n        (LintKind::Formatting, (0x7D, 0x3C, 0x98)),\n        (LintKind::Grammar, (0x9B, 0x59, 0xB6)),\n        (LintKind::Malapropism, (0xC7, 0x15, 0x85)),\n        (LintKind::Miscellaneous, (0x3B, 0xCE, 0xAC)),\n        (LintKind::Nonstandard, (0x00, 0x8B, 0x8B)),\n        (LintKind::Punctuation, (0xD4, 0x85, 0x0F)),\n        (LintKind::Readability, (0x2E, 0x8B, 0x57)),\n        (LintKind::Redundancy, (0x46, 0x82, 0xB4)),\n        (LintKind::Regionalism, (0xC0, 0x61, 0xCB)),\n        (LintKind::Repetition, (0x00, 0xA6, 0x7C)),\n        (LintKind::Spelling, (0xEE, 0x42, 0x66)),\n        (LintKind::Style, (0xFF, 0xD2, 0x3F)),\n        (LintKind::Typo, (0xFF, 0x6B, 0x35)),\n        (LintKind::Usage, (0x1E, 0x90, 0xFF)),\n        (LintKind::WordChoice, (0x22, 0x8B, 0x22)),\n    ]\n}\n\nfn rgb_for_lint_kind(olk: Option<&LintKind>) -> (u8, u8, u8) {\n    olk.and_then(|lk| {\n        lint_kind_to_rgb()\n            .iter()\n            .find(|(k, _)| k == lk)\n            .map(|(_, color)| *color)\n    })\n    .unwrap_or((0, 0, 0))\n}\n\nfn print_formatted_items(items: impl IntoIterator<Item = (Option<String>, String)>, color: bool) {\n    let mut first_on_line = true;\n    let mut len_so_far = 0;\n\n    for (ansi, text) in items {\n        let text_len = text.len();\n\n        let mut len_to_add = !first_on_line as usize + text_len;\n\n        let mut before = \"\";\n        if len_so_far + len_to_add > 120 {\n            before = \"\\n\";\n            len_to_add -= 1; // no space before the first item\n            len_so_far = 0;\n        } else if !first_on_line {\n            before = \" \";\n        }\n\n        let (set, reset): (&str, &str) = if color {\n            if let Some(prefix) = ansi.as_ref() {\n                (prefix.as_str(), \"\\x1b[0m\")\n            } else {\n                (\"\", \"\")\n            }\n        } else {\n            (\"\", \"\")\n        };\n        print!(\"{}{}{}{}\", before, set, text, reset);\n        len_so_far += len_to_add;\n        first_on_line = false;\n    }\n    println!();\n}\n"
  },
  {
    "path": "harper-cli/src/main.rs",
    "content": "#![doc = include_str!(\"../README.md\")]\n\nuse harper_core::spell::{Dictionary, FstDictionary, MutableDictionary, WordId};\nuse hashbrown::HashMap;\nuse std::collections::BTreeMap;\nuse std::fs::File;\nuse std::io::{self, BufReader};\nuse std::path::PathBuf;\n// use std::sync::Arc;\nuse std::{fs, process};\n\nuse anyhow::anyhow;\nuse ariadne::{Color, Label, Report, ReportKind, Source};\nuse clap::{CommandFactory, Parser, ValueHint};\nuse clap_complete::{Shell, generate};\nuse dirs::{config_dir, data_local_dir};\nuse harper_core::linting::LintGroup;\nuse harper_core::parsers::{IsolateEnglish, MarkdownOptions};\nuse harper_core::weir::WeirLinter;\nuse harper_core::{\n    CharStringExt, Dialect, DictWordMetadata, OrthFlags, Span, TokenKind, TokenStringExt,\n};\n#[cfg(feature = \"training\")]\nuse harper_pos_utils::{BrillChunker, BrillTagger, BurnChunkerCpu};\n\nuse harper_stats::Stats;\nuse serde::Serialize;\nuse serde_json::Value;\n\nmod input;\nuse input::{\n    AnyInput, InputTrait,\n    single_input::{SingleInput, SingleInputOptionExt, SingleInputTrait},\n};\n\nmod annotate;\nuse annotate::AnnotationType;\n\nmod lint;\nuse crate::lint::{OutputFormat, lint};\nuse lint::LintOptions;\n\n/// A debugging tool for the Harper grammar checker.\n#[derive(Parser)]\n#[command(version, about)]\nstruct Cli {\n    /// Disable colored output.\n    #[arg(long, global = true)]\n    no_color: bool,\n\n    #[command(subcommand)]\n    command: Args,\n}\n\n#[derive(clap::Subcommand)]\nenum Args {\n    /// Lint provided documents.\n    Lint {\n        /// The text or file you wish to grammar check. If not provided, it will be read from\n        /// standard input.\n        inputs: Vec<AnyInput>,\n        /// Whether to merely print out the number of errors encountered,\n        /// without further details. Only valid with the default output format.\n        #[arg(short, long, conflicts_with = \"format\")]\n        count: bool,\n        /// Restrict linting to only a specific set of rules.\n        /// If omitted, `harper-cli` will run every rule.\n        #[arg(long, value_delimiter = ',')]\n        ignore: Option<Vec<String>>,\n        /// Restrict linting to only a specific set of rules.\n        /// If omitted, `harper-cli` will run every rule.\n        #[arg(long, value_delimiter = ',')]\n        only: Option<Vec<String>>,\n        /// Overlapping lints are removed by default. This option disables that behavior.\n        #[arg(short = 'o', long)]\n        keep_overlapping_lints: bool,\n        /// Specify the dialect. Common synonyms, abbreviations, and codes are supported.\n        #[arg(short, long, default_value = \"us\")]\n        dialect: String,\n        /// Path to the user dictionary.\n        #[arg(short, long, default_value = config_dir().unwrap().join(\"harper-ls/dictionary.txt\").into_os_string(), value_hint = ValueHint::FilePath)]\n        user_dict_path: PathBuf,\n        /// Path to the directory for file-local dictionaries.\n        #[arg(short, long, default_value = data_local_dir().unwrap().join(\"harper-ls/file_dictionaries/\").into_os_string(), value_hint = ValueHint::FilePath)]\n        file_dict_path: PathBuf,\n        /// Path to a Weirpack file to load. May be supplied multiple times.\n        #[arg(long, value_name = \"WEIRPACK\")]\n        weirpacks: Vec<SingleInput>,\n        /// Output format for lint results.\n        #[arg(long, value_enum, default_value_t = OutputFormat::Default)]\n        format: OutputFormat,\n    },\n    /// Parse a provided document and print the detected symbols.\n    Parse {\n        /// The text or file you wish to parse. If not provided, it will be read from standard\n        /// input.\n        input: Option<SingleInput>,\n    },\n    /// Parse a provided document and show the spans of the detected tokens.\n    Spans {\n        /// The file or text for which you wish to display the spans. If not provided, it will be\n        /// read from standard input.\n        input: Option<SingleInput>,\n        /// Include newlines in the output\n        #[arg(short, long)]\n        include_newlines: bool,\n    },\n    /// Parse and annotate a provided document.\n    Annotate {\n        /// The text or file you wish to parse. If not provided, it will be read from standard\n        /// input.\n        input: Option<SingleInput>,\n        /// How the document should be annotated.\n        #[arg(short, long, value_enum, default_value_t = AnnotationType::Upos)]\n        annotation_type: AnnotationType,\n        /// Attempt to detect and ignore non-English spans of text.\n        #[arg(short, long)]\n        isolate_english: bool,\n    },\n    /// Get the metadata associated with one or more words.\n    Metadata {\n        words: Vec<String>,\n        /// Only show the part-of-speech flags and emojis, not the full JSON\n        #[arg(short, long)]\n        brief: bool,\n    },\n    /// Get all the forms of a word using the affixes.\n    Forms { line: String },\n    /// Emit a decompressed, line-separated list of the words in Harper's dictionary.\n    Words,\n    /// Summarize a lint record\n    SummarizeLintRecord {\n        #[arg(value_hint = ValueHint::FilePath)]\n        file: PathBuf,\n    },\n    /// Print the default config with descriptions.\n    Config,\n    /// Print a list of all the words in a document, sorted by frequency.\n    MineWords {\n        /// The document to mine words from.\n        input: Option<SingleInput>,\n    },\n    #[cfg(feature = \"training\")]\n    TrainBrillTagger {\n        #[arg(short, long, default_value = \"1.0\")]\n        candidate_selection_chance: f32,\n        /// The path to write the final JSON model file to.\n        output: PathBuf,\n        /// The number of epochs (and patch rules) to train.\n        epochs: usize,\n        /// Path to a `.conllu` dataset to train on.\n        #[arg(num_args = 1..)]\n        datasets: Vec<PathBuf>,\n    },\n    #[cfg(feature = \"training\")]\n    TrainBrillChunker {\n        #[arg(short, long, default_value = \"1.0\")]\n        candidate_selection_chance: f32,\n        /// The path to write the final JSON model file to.\n        output: PathBuf,\n        /// The number of epochs (and patch rules) to train.\n        epochs: usize,\n        /// Path to a `.conllu` dataset to train on.\n        #[arg(num_args = 1..)]\n        datasets: Vec<PathBuf>,\n    },\n    #[cfg(feature = \"training\")]\n    TrainBurnChunker {\n        #[arg(short, long)]\n        lr: f64,\n        // The number of embedding dimensions\n        #[arg(long)]\n        dim: usize,\n        /// The path to write the final model file to.\n        #[arg(short, long, value_hint = ValueHint::FilePath)]\n        output: PathBuf,\n        /// The number of epochs to train.\n        #[arg(short, long)]\n        epochs: usize,\n        /// The dropout probability\n        #[arg(long)]\n        dropout: f32,\n        #[arg(short, long)]\n        test_file: PathBuf,\n        #[arg(num_args = 1..)]\n        datasets: Vec<PathBuf>,\n    },\n    /// Print harper-core version.\n    CoreVersion,\n    /// Rename a flag in the dictionary and affixes.\n    RenameFlag {\n        /// The old flag.\n        old: String,\n        /// The new flag.\n        new: String,\n        #[arg(value_hint = ValueHint::DirPath)]\n        /// The directory containing the dictionary and affixes.\n        dir: PathBuf,\n    },\n    /// Audit the `dictionary.dict` file.\n    AuditDictionary {\n        /// The directory containing the dictionary and affixes.\n        #[arg(value_hint = ValueHint::DirPath)]\n        dir: PathBuf,\n    },\n    /// Emit a decompressed, line-separated list of the compounds in Harper's dictionary.\n    /// As long as there's either an open or hyphenated spelling.\n    Compounds,\n    /// Emit a decompressed, line-separated list of the words in Harper's dictionary\n    /// which occur in more than one lettercase variant.    \n    CaseVariants,\n    /// Emit a list of each noun phrase contained within the input\n    NominalPhrases {\n        /// The text or file to analyze. If not provided, it will be read from standard input.\n        input: Option<SingleInput>,\n    },\n    /// Run the tests contained within a Weir file.\n    Test {\n        /// The location of the Weir file to test\n        #[arg(value_hint = ValueHint::FilePath)]\n        input: PathBuf,\n    },\n    /// Generate shell completions.\n    #[command(hide = true)]\n    Completion {\n        /// Generate completions for this shell.\n        shell: Shell,\n    },\n}\n\nfn main() -> anyhow::Result<()> {\n    let cli = Cli::parse();\n\n    let color = !cli.no_color && std::env::var(\"NO_COLOR\").is_err();\n    if !color {\n        yansi::disable();\n    }\n\n    let markdown_options = MarkdownOptions::default();\n    let curated_dictionary = FstDictionary::curated();\n\n    match cli.command {\n        Args::Lint {\n            inputs,\n            count,\n            ignore,\n            only,\n            keep_overlapping_lints,\n            dialect: dialect_str,\n            user_dict_path,\n            file_dict_path,\n            weirpacks,\n            format,\n        } => {\n            let dialect = parse_dialect(&dialect_str)\n                .map_err(|e| anyhow!(\"Invalid dialect '{}': {}\", dialect_str, e))?;\n\n            lint(\n                markdown_options,\n                curated_dictionary,\n                inputs,\n                LintOptions {\n                    count,\n                    ignore,\n                    only,\n                    keep_overlapping_lints,\n                    dialect,\n                    weirpack_inputs: weirpacks,\n                    color,\n                    format,\n                },\n                user_dict_path,\n                // TODO workspace_dict_path?\n                file_dict_path,\n            )\n        }\n        Args::Parse { input } => {\n            // Try to read from standard input if `input` was not provided.\n            let input = input.unwrap_or_read_from_stdin();\n\n            // Load the file/text.\n            let (doc, _) = input.load(markdown_options, &curated_dictionary)?;\n\n            for token in doc.tokens() {\n                let json = serde_json::to_string(&token)?;\n                println!(\"{json}\");\n            }\n\n            Ok(())\n        }\n        Args::Spans {\n            input,\n            include_newlines,\n        } => {\n            // Try to read from standard input if `input` was not provided.\n            let input = input.unwrap_or_read_from_stdin();\n\n            // Load the file/text.\n            let (doc, source) = input.load(markdown_options, &curated_dictionary)?;\n\n            let primary_color = Color::Blue;\n            let secondary_color = Color::Magenta;\n            let unlintable_color = Color::Red;\n            let input_identifier = input.get_identifier();\n\n            let mut report_builder = Report::build(\n                ReportKind::Custom(\"Spans\", primary_color),\n                (&input_identifier, 0..0),\n            );\n            let mut color = primary_color;\n\n            for token in doc.tokens().filter(|t| {\n                include_newlines\n                    || !matches!(t.kind, TokenKind::Newline(_) | TokenKind::ParagraphBreak)\n            }) {\n                report_builder = report_builder.with_label(\n                    Label::new((&input_identifier, token.span.into()))\n                        .with_message(format!(\"[{}, {})\", token.span.start, token.span.end))\n                        .with_color(if matches!(token.kind, TokenKind::Unlintable) {\n                            unlintable_color\n                        } else {\n                            color\n                        }),\n                );\n\n                // Alternate colors so spans are clear\n                color = if color == primary_color {\n                    secondary_color\n                } else {\n                    primary_color\n                };\n            }\n\n            let report = report_builder.finish();\n            report.print((&input_identifier, Source::from(source)))?;\n\n            Ok(())\n        }\n        Args::Annotate {\n            input,\n            annotation_type,\n            isolate_english,\n        } => {\n            // Try to read from standard input if `input` was not provided.\n            let input = input.unwrap_or_read_from_stdin();\n\n            let parser = if isolate_english {\n                Box::new(IsolateEnglish::new(\n                    input.get_parser(markdown_options),\n                    &curated_dictionary,\n                ))\n            } else {\n                input.get_parser(markdown_options)\n            };\n\n            // Load the file/text.\n            let (doc, source) = input.load_with_parser(&parser, &curated_dictionary)?;\n\n            let input_identifier = input.get_identifier();\n\n            annotation_type\n                .build_report(\n                    &doc,\n                    &input_identifier,\n                    &annotation_type.get_title_with_tags(if isolate_english {\n                        &[\"Isolate english\"]\n                    } else {\n                        &[]\n                    }),\n                )\n                .print((&*input_identifier, Source::from(source)))?;\n\n            Ok(())\n        }\n        Args::Words => {\n            let mut word_str = String::new();\n\n            for word in curated_dictionary.words_iter() {\n                word_str.clear();\n                word_str.extend(word);\n\n                println!(\"{word_str:?}\");\n            }\n\n            Ok(())\n        }\n        Args::Metadata { words, brief } => {\n            type PosPredicate = fn(&DictWordMetadata) -> bool;\n\n            const POS: &[(&str, PosPredicate)] = &[\n                (\"N📦\", |m| m.is_noun() && !m.is_proper_noun()),\n                (\"O📛\", DictWordMetadata::is_proper_noun),\n                (\"V🏃\", DictWordMetadata::is_verb),\n                (\"J🌈\", DictWordMetadata::is_adjective),\n                (\"R🤷\", DictWordMetadata::is_adverb),\n                (\"C🔗\", DictWordMetadata::is_conjunction),\n                (\"D👉\", DictWordMetadata::is_determiner),\n                (\"P📥\", |m| m.preposition),\n                (\"I👤\", DictWordMetadata::is_pronoun),\n            ];\n\n            for word in words {\n                let meta = curated_dictionary.get_word_metadata_str(&word);\n                let (flags, emojis) = meta.as_ref().map_or_else(\n                    || (String::new(), String::new()),\n                    |md| {\n                        POS.iter()\n                            .filter(|&(_, pred)| pred(md))\n                            .map(|(syms, _)| {\n                                let mut ch = syms.chars();\n                                (ch.next().unwrap(), ch.next().unwrap())\n                            })\n                            .unzip()\n                    },\n                );\n\n                let json = brief.then(String::new).unwrap_or_else(|| {\n                    format!(\"\\n{}\", serde_json::to_string_pretty(&meta).unwrap())\n                });\n                println!(\"{}: {} {}{}\", word, flags, emojis, json);\n            }\n            Ok(())\n        }\n        Args::SummarizeLintRecord { file } => {\n            let file = File::open(file)?;\n            let mut reader = BufReader::new(file);\n            let stats = Stats::read(&mut reader)?;\n\n            let summary = stats.summarize();\n            println!(\"{summary}\");\n\n            Ok(())\n        }\n        Args::Forms { line } => {\n            let (word, annot) = line_to_parts(&line);\n\n            let curated_word_list = include_str!(\"../../harper-core/dictionary.dict\");\n            let dict_lines = curated_word_list.split('\\n');\n\n            let mut entry_in_dict = None;\n\n            // Check if the word is contained in the list.\n            for dict_line in dict_lines {\n                let (dict_word, dict_annot) = line_to_parts(dict_line);\n\n                if dict_word == word {\n                    entry_in_dict = Some((dict_word, dict_annot));\n                    break;\n                }\n            }\n\n            let summary = match &entry_in_dict {\n                Some((dict_word, dict_annot)) => {\n                    let mut status_summary = if dict_annot.is_empty() {\n                        format!(\"'{dict_word}' is already in the dictionary but not annotated.\")\n                    } else {\n                        format!(\n                            \"'{dict_word}' is already in the dictionary with annotation `{dict_annot}`.\"\n                        )\n                    };\n\n                    if !annot.is_empty() {\n                        if annot.as_str() != dict_annot.as_str() {\n                            status_summary\n                                .push_str(\"\\n  Your annotations differ from the dictionary.\\n\");\n                        } else {\n                            status_summary\n                                .push_str(\"\\n  Your annotations are the same as the dictionary.\\n\");\n                        }\n                    }\n\n                    status_summary\n                }\n                None => format!(\"'{word}' is not in the dictionary yet.\"),\n            };\n\n            println!(\"{summary}\");\n\n            if let Some((dict_word, dict_annot)) = &entry_in_dict {\n                println!(\"Old, from the dictionary:\");\n                print_word_derivations(dict_word, dict_annot, &FstDictionary::curated());\n            };\n\n            if !annot.is_empty() {\n                let rune_words = format!(\"1\\n{line}\");\n                let dict = MutableDictionary::from_rune_files(\n                    &rune_words,\n                    include_str!(\"../../harper-core/annotations.json\"),\n                )?;\n\n                println!(\"New, from you:\");\n                print_word_derivations(&word, &annot, &dict);\n            }\n\n            Ok(())\n        }\n        Args::Config => {\n            #[derive(Serialize)]\n            struct Config {\n                default_value: bool,\n                description: String,\n            }\n\n            let linter = LintGroup::new_curated(curated_dictionary, Dialect::American);\n\n            let default_config: HashMap<String, bool> =\n                serde_json::from_str(&serde_json::to_string(&linter.config).unwrap()).unwrap();\n\n            // Use `BTreeMap` so output is sorted by keys.\n            let mut configs = BTreeMap::new();\n            for (key, desc) in linter.all_descriptions() {\n                configs.insert(\n                    key.to_owned(),\n                    Config {\n                        default_value: default_config[key],\n                        description: desc.to_owned(),\n                    },\n                );\n            }\n\n            println!(\"{}\", serde_json::to_string_pretty(&configs).unwrap());\n\n            Ok(())\n        }\n        Args::MineWords { input } => {\n            let input = input.unwrap_or_read_from_stdin();\n            let (doc, _source) = input.load(MarkdownOptions::default(), &curated_dictionary)?;\n\n            let mut words = HashMap::new();\n\n            for word in doc.iter_words() {\n                let chars = doc.get_span_content(&word.span);\n\n                words\n                    .entry(chars.to_lower())\n                    .and_modify(|v| *v += 1)\n                    .or_insert(1);\n            }\n\n            let mut words_ordered: Vec<(String, usize)> = words\n                .into_iter()\n                .map(|(key, value)| (key.to_string(), value))\n                .collect();\n\n            words_ordered.sort_by_key(|v| v.1);\n\n            for (word, _) in words_ordered {\n                println!(\"{word}\");\n            }\n\n            Ok(())\n        }\n        Args::CoreVersion => {\n            println!(\"harper-core v{}\", harper_core::core_version());\n            Ok(())\n        }\n        #[cfg(feature = \"training\")]\n        Args::TrainBrillTagger {\n            datasets: dataset,\n            epochs,\n            output,\n            candidate_selection_chance,\n        } => {\n            let tagger = BrillTagger::train(&dataset, epochs, candidate_selection_chance);\n            fs::write(output, serde_json::to_string_pretty(&tagger)?)?;\n\n            Ok(())\n        }\n        #[cfg(feature = \"training\")]\n        Args::TrainBrillChunker {\n            datasets,\n            epochs,\n            output,\n            candidate_selection_chance,\n        } => {\n            let chunker = BrillChunker::train(&datasets, epochs, candidate_selection_chance);\n            fs::write(output, serde_json::to_string_pretty(&chunker)?)?;\n            Ok(())\n        }\n        #[cfg(feature = \"training\")]\n        Args::TrainBurnChunker {\n            datasets,\n            test_file,\n            epochs,\n            dropout,\n            output,\n            lr,\n            dim: embed_dim,\n        } => {\n            let chunker =\n                BurnChunkerCpu::train_cpu(&datasets, &test_file, embed_dim, dropout, epochs, lr);\n            chunker.save_to(output);\n\n            Ok(())\n        }\n        Args::RenameFlag { old, new, dir } => {\n            let dict_path = dir.join(\"dictionary.dict\");\n            let affixes_path = dir.join(\"annotations.json\");\n\n            // Validate old and new flags are exactly one Unicode code point (Rust char)\n            // And not characters used for the dictionary format\n            const BAD_CHARS: [char; 3] = ['/', '#', ' '];\n\n            // Then use it like this:\n            if old.chars().count() != 1 || BAD_CHARS.iter().any(|&c| old.contains(c)) {\n                return Err(anyhow!(\n                    \"Flags must be one Unicode code point, not / or # or space. Old flag '{old}' is {}\",\n                    old.chars().count()\n                ));\n            }\n            if new.chars().count() != 1 || BAD_CHARS.iter().any(|&c| new.contains(c)) {\n                return Err(anyhow!(\n                    \"Flags must be one Unicode code point, not / or # or space. New flag '{new}' is {}\",\n                    new.chars().count()\n                ));\n            }\n\n            // Load and parse affixes\n            let affixes_string = fs::read_to_string(&affixes_path)\n                .map_err(|e| anyhow!(\"Failed to read annotations.json: {e}\"))?;\n\n            let affixes_json: Value = serde_json::from_str(&affixes_string)\n                .map_err(|e| anyhow!(\"Failed to parse annotations.json: {e}\"))?;\n\n            // Get the nested \"affixes\" object\n            let affixes_obj = &affixes_json\n                .get(\"affixes\")\n                .and_then(Value::as_object)\n                .ok_or_else(|| anyhow!(\"annotations.json does not contain 'affixes' object\"))?;\n\n            let properties_obj = &affixes_json\n                .get(\"properties\")\n                .and_then(Value::as_object)\n                .ok_or_else(|| anyhow!(\"annotations.json does not contain 'properties' object\"))?;\n\n            // Validate old flag exists and get its description\n            let old_entry = affixes_obj\n                .get(&old)\n                .or_else(|| properties_obj.get(&old))\n                .ok_or_else(|| anyhow!(\"Flag '{old}' not found in annotations.json\"))?;\n\n            let description = old_entry\n                .get(\"#\")\n                .and_then(Value::as_str)\n                .unwrap_or(\"(no description)\");\n\n            println!(\"Renaming flag '{old}' ({description})\");\n\n            // Validate new flag doesn't exist\n            if let Some(new_entry) = affixes_obj.get(&new).or_else(|| properties_obj.get(&new)) {\n                let new_desc = new_entry\n                    .get(\"#\")\n                    .and_then(Value::as_str)\n                    .unwrap_or(\"(no description)\");\n                return Err(anyhow!(\n                    \"Cannot rename to '{new}': flag already exists and is used for: {new_desc}\"\n                ));\n            }\n\n            // Create backups\n            let backup_dict = format!(\"{}.bak\", dict_path.display());\n            let backup_affixes = format!(\"{}.bak\", affixes_path.display());\n            fs::copy(&dict_path, &backup_dict)\n                .map_err(|e| anyhow!(\"Failed to create dictionary backup: {e}\"))?;\n            fs::copy(&affixes_path, &backup_affixes)\n                .map_err(|e| anyhow!(\"Failed to create affixes backup: {e}\"))?;\n\n            // Update dictionary with proper comment and whitespace handling\n            let dict_content = fs::read_to_string(&dict_path)\n                .map_err(|e| anyhow!(\"Failed to read dictionary: {e}\"))?;\n\n            let updated_dict = dict_content\n                .lines()\n                .map(|line| {\n                    if line.is_empty() || line.starts_with('#') {\n                        return line.to_string();\n                    }\n\n                    let hash_pos = line.find('#').unwrap_or(line.len());\n                    let (entry_part, comment_part) = line.split_at(hash_pos);\n\n                    let slash_pos = entry_part.find('/').unwrap_or(entry_part.len());\n                    let (lexeme, annotation) = entry_part.split_at(slash_pos);\n\n                    format!(\n                        \"{}{}{}\",\n                        lexeme,\n                        annotation.replace(&old, &new),\n                        comment_part\n                    )\n                })\n                .collect::<Vec<_>>()\n                .join(\"\\n\");\n\n            // Update affixes (text-based replacement with context awareness)\n            let updated_affixes_string =\n                affixes_string.replace(&format!(\"\\\"{}\\\":\", &old), &format!(\"\\\"{}\\\":\", &new));\n\n            // Verify that the updated affixes string is valid JSON\n            serde_json::from_str::<Value>(&updated_affixes_string)\n                .map_err(|e| anyhow!(\"Failed to parse updated annotations.json: {e}\"))?;\n\n            // Write changes\n            fs::write(&dict_path, updated_dict)\n                .map_err(|e| anyhow!(\"Failed to write updated dictionary: {e}\"))?;\n            fs::write(&affixes_path, updated_affixes_string)\n                .map_err(|e| anyhow!(\"Failed to write updated affixes: {e}\"))?;\n\n            println!(\"Successfully renamed flag '{old}' to '{new}'\");\n            println!(\"  Description: {description}\");\n            println!(\"  Backups created at:\\n    {backup_dict}\\n    {backup_affixes}\");\n\n            Ok(())\n        }\n        Args::AuditDictionary { dir } => {\n            let annotations_path = dir.join(\"annotations.json\");\n            let annotations_content = fs::read_to_string(&annotations_path)\n                .map_err(|e| anyhow!(\"Failed to read annotations: {e}\"))?;\n            let annotations_json: Value = serde_json::from_str(&annotations_content)\n                .map_err(|e| anyhow!(\"Failed to parse annotations.json: {e}\"))?;\n\n            let annotations = annotations_json\n                .as_object()\n                .ok_or_else(|| anyhow!(\"annotations.json is not an object\"))?;\n\n            let (affixes, properties) = [\"affixes\", \"properties\"]\n                .iter()\n                .map(|key| {\n                    annotations\n                        .get(*key)\n                        .and_then(Value::as_object)\n                        .ok_or_else(|| {\n                            anyhow!(\"Missing or invalid '{key}' key in annotations.json\")\n                        })\n                })\n                .collect::<Result<Vec<_>, _>>()\n                .map(|v| (v[0], v[1]))?;\n\n            let all_keys = affixes.keys().chain(properties.keys()).collect::<Vec<_>>();\n\n            let mut annotation_flag_count: HashMap<char, u32> = all_keys\n                .iter()\n                .filter_map(|key| key.chars().next()) // Get first char of each key\n                .map(|c| (c, 0))\n                .collect();\n\n            // let mut duplicate_flag_total = 0;\n            let mut duplicate_flags = std::collections::HashMap::new();\n            let mut unknown_flags = std::collections::HashMap::new();\n            let mut unused_flag_total = 0;\n\n            let dict_path = dir.join(\"dictionary.dict\");\n            let dict_content = fs::read_to_string(&dict_path)\n                .map_err(|e| anyhow!(\"Failed to read dictionary: {e}\"))?;\n\n            for (line_num, line) in dict_content.lines().enumerate() {\n                if line.is_empty()\n                    || line.starts_with('#')\n                    || line.chars().all(|c| c.is_ascii_digit())\n                {\n                    continue;\n                }\n\n                let (entry_part, _comment_part) =\n                    line.split_once('#').map_or((line, \"\"), |(e, c)| (e, c));\n\n                if let Some((lexeme, rest)) = entry_part.split_once('/') {\n                    let (annotation, _whitespace) = match rest.split_once([' ', '\\t']) {\n                        Some((a, _)) => (a, &rest[a.len()..]),\n                        None => (rest, \"\"),\n                    };\n\n                    let mut seen_flags = hashbrown::HashSet::new();\n\n                    for flag in annotation.chars() {\n                        if !seen_flags.insert(flag) {\n                            eprintln!(\n                                \"Warning: Line {}: Duplicate annotation flag '{}' in entry: {}/{}\",\n                                line_num + 1,\n                                flag,\n                                lexeme,\n                                annotation\n                            );\n                            // duplicate_flag_total += 1;\n                            *duplicate_flags.entry(flag).or_insert(0) += 1;\n                        }\n                        if !annotation_flag_count.contains_key(&flag) {\n                            eprintln!(\n                                \"Warning: Line {}: Unknown annotation flag '{}' in entry: {}/{}\",\n                                line_num + 1,\n                                flag,\n                                lexeme,\n                                annotation\n                            );\n                            *unknown_flags.entry(flag).or_insert(0) += 1;\n                        } else {\n                            *annotation_flag_count.get_mut(&flag).unwrap() += 1;\n                        }\n                    }\n                }\n            }\n\n            for (flag, count) in annotation_flag_count {\n                if count == 0 {\n                    eprintln!(\"Warning: Unused annotation flag '{}'\", flag);\n                    unused_flag_total += 1;\n                }\n            }\n\n            let duplicate_flag_total = duplicate_flags.values().sum::<usize>();\n            let unknown_flag_total = unknown_flags.values().sum::<usize>();\n\n            if duplicate_flag_total > 0 || unknown_flag_total > 0 || unused_flag_total > 0 {\n                eprintln!(\"\\nAudit found issues:\");\n                if duplicate_flag_total > 0 {\n                    eprintln!(\n                        \"  - {} duplicate flags found in {} entries\",\n                        duplicate_flags.len(),\n                        duplicate_flag_total\n                    );\n                }\n                if !unknown_flags.is_empty() {\n                    let total_unknown = unknown_flags.values().sum::<usize>();\n                    eprintln!(\n                        \"  - {} unknown flags found in {} entries\",\n                        unknown_flags.len(),\n                        total_unknown\n                    );\n                }\n                if unused_flag_total > 0 {\n                    eprintln!(\"  - {} unused flags found\", unused_flag_total);\n                }\n                std::process::exit(1);\n            }\n\n            Ok(())\n        }\n        Args::Compounds => {\n            let mut compound_map: HashMap<String, Vec<String>> = HashMap::new();\n\n            // First pass: process open and hyphenated compounds\n            for word in curated_dictionary.words_iter() {\n                if !word.contains(&' ') && !word.contains(&'-') {\n                    continue;\n                }\n\n                let normalized_key: String = word\n                    .iter()\n                    .filter(|&&c| c != ' ' && c != '-')\n                    .collect::<String>()\n                    .to_lowercase();\n\n                let word_str = word.iter().collect::<String>();\n                compound_map\n                    .entry(normalized_key)\n                    .or_default()\n                    .push(word_str);\n            }\n\n            // Second pass: process closed compounds\n            for word in curated_dictionary.words_iter() {\n                if word.contains(&' ') || word.contains(&'-') {\n                    continue;\n                }\n\n                let normalized_key: String = word.iter().collect::<String>().to_lowercase();\n                if let Some(variants) = compound_map.get_mut(&normalized_key) {\n                    variants.push(word.iter().collect());\n                }\n            }\n\n            // Process and print results\n            let mut results: Vec<_> = compound_map\n                .into_iter()\n                .filter(|(_, v)| v.len() > 1)\n                .collect();\n            results.sort_by_key(|(k, _)| k.clone());\n\n            // Instead of moving `results` into the for loop, iterate over a reference to it\n            for (normalized, originals) in &results {\n                println!(\"\\nVariants for '{normalized}':\");\n                for original in originals {\n                    println!(\"  - {original}\");\n                }\n            }\n\n            println!(\"\\nFound {} compound word groups\", results.len());\n            Ok(())\n        }\n        Args::CaseVariants => {\n            let case_bitmask = OrthFlags::LOWERCASE\n                | OrthFlags::TITLECASE\n                | OrthFlags::ALLCAPS\n                | OrthFlags::LOWER_CAMEL\n                | OrthFlags::UPPER_CAMEL;\n            let mut processed_words = HashMap::new();\n            let mut longest_word = 0;\n            for word in curated_dictionary.words_iter() {\n                if let Some(metadata) = curated_dictionary.get_word_metadata(word) {\n                    let orth = metadata.orth_info;\n                    let bits = orth.bits() & case_bitmask.bits();\n\n                    if bits.count_ones() > 1 {\n                        longest_word = longest_word.max(word.len());\n                        // Mask out all bits except the case-related ones before printing\n                        processed_words.insert(\n                            word.to_string(),\n                            OrthFlags::from_bits_truncate(orth.bits() & case_bitmask.bits()),\n                        );\n                    }\n                }\n            }\n            let mut processed_words: Vec<_> = processed_words.into_iter().collect();\n            processed_words.sort_by_key(|(word, _)| word.clone());\n            let longest_num = (processed_words.len() - 1).to_string().len();\n            for (i, (word, orth)) in processed_words.iter().enumerate() {\n                println!(\"{i:>longest_num$} {word:<longest_word$} : {orth:?}\");\n            }\n            Ok(())\n        }\n        Args::NominalPhrases { input } => {\n            // Get input from either file or direct text\n            let (doc, _) = input\n                .unwrap_or_read_from_stdin()\n                .load(MarkdownOptions::default(), &curated_dictionary)?;\n\n            let phrases: Vec<_> = doc\n                .iter_nominal_phrases()\n                .map(|toks| {\n                    (\n                        toks.first().unwrap().span.start,\n                        toks.last().unwrap().span.end,\n                    )\n                })\n                .collect();\n\n            let mut last_end = 0;\n\n            for (start, end) in phrases {\n                // Plain text between nominal phrases\n                if start > last_end {\n                    let span = Span::new(last_end, start);\n                    let txt = doc.get_span_content_str(&span);\n                    if !txt.trim().is_empty() {\n                        print!(\"{}\", txt);\n                    }\n                }\n\n                // Highlighted nominal phrase\n                let span = Span::new(start, end);\n                let txt = doc.get_span_content_str(&span);\n\n                if color {\n                    print!(\"\\x1b[33m{}\\x1b[0m\", txt);\n                } else {\n                    print!(\"{}\", txt);\n                }\n\n                last_end = end;\n            }\n\n            // Plain text after the last nominal phrase, if any\n            let doc_len = doc.get_full_content().len();\n            if last_end < doc_len {\n                let span = Span::new(last_end, doc_len);\n                let txt = doc.get_span_content_str(&span);\n                if !txt.trim().is_empty() {\n                    print!(\"{}\", txt);\n                }\n            }\n\n            println!();\n\n            Ok(())\n        }\n        Args::Test { input } => {\n            let weir_file = fs::read_to_string(input)?;\n            let mut linter = WeirLinter::new(&weir_file)?;\n\n            let failing_tests = linter.run_tests();\n\n            if failing_tests.is_empty() {\n                eprintln!(\"All tests pass!\");\n                Ok(())\n            } else {\n                eprintln!(\"{:?}\", failing_tests);\n                process::exit(1);\n            }\n        }\n        Args::Completion { shell } => {\n            generate(\n                shell,\n                &mut Cli::command(),\n                env!(\"CARGO_BIN_NAME\"),\n                &mut io::stdout(),\n            );\n            Ok(())\n        }\n    }\n}\n\n/// Parse a dialect string into a Dialect enum value.\n/// Supports common synonyms, abbreviations, and codes.\nfn parse_dialect(dialect: &str) -> anyhow::Result<Dialect> {\n    match dialect.to_lowercase().as_str() {\n        \"us\" | \"usa\" | \"america\" | \"american\" | \"en-us\" | \"en_us\" => Ok(Dialect::American),\n        \"uk\" | \"gb\" | \"british\" | \"britain\" | \"en-gb\" | \"en_gb\" => Ok(Dialect::British),\n        \"au\" | \"aus\" | \"australia\" | \"australian\" | \"en-au\" | \"en_au\" => Ok(Dialect::Australian),\n        \"in\" | \"india\" | \"indian\" | \"bharat\" | \"en-in\" | \"en_in\" => Ok(Dialect::Indian),\n        \"ca\" | \"canada\" | \"canadian\" | \"en-ca\" | \"en_ca\" => Ok(Dialect::Canadian),\n        _ => Err(anyhow!(\"Unknown dialect: {}\", dialect)),\n    }\n}\n\n/// Split a dictionary line into its word and annotation segments\nfn line_to_parts(line: &str) -> (String, String) {\n    if let Some((word, annot)) = line.split_once('/') {\n        (word.to_owned(), annot.to_string())\n    } else {\n        (line.to_owned(), String::new())\n    }\n}\n\nfn print_word_derivations(word: &str, annot: &str, dictionary: &impl Dictionary) {\n    println!(\"{word}/{annot}\");\n\n    let id = WordId::from_word_str(word);\n\n    let children = dictionary\n        .words_iter()\n        .filter(|e| dictionary.get_word_metadata(e).unwrap().derived_from == Some(id));\n\n    println!(\" - {word}\");\n\n    for child in children {\n        let child_str: String = child.iter().collect();\n        println!(\" - {child_str}\");\n    }\n}\n"
  },
  {
    "path": "harper-cli/tests/no_color.rs",
    "content": "use std::process::Command;\n\nfn harper_cli() -> Command {\n    Command::new(env!(\"CARGO_BIN_EXE_harper-cli\"))\n}\n\n/// Input that triggers at least one lint (\"an test\" → AnA rule).\nconst BAD_INPUT: &str = \"This is an test.\";\n\nfn has_ansi(bytes: &[u8]) -> bool {\n    bytes.contains(&0x1b)\n}\n\n#[test]\nfn default_output_contains_ansi() {\n    let output = harper_cli()\n        .args([\"lint\", BAD_INPUT])\n        .env_remove(\"NO_COLOR\")\n        .output()\n        .unwrap();\n\n    let combined = [&output.stdout[..], &output.stderr[..]].concat();\n    assert!(\n        has_ansi(&combined),\n        \"default output should contain ANSI escape codes\"\n    );\n}\n\n#[test]\nfn no_color_flag_strips_ansi() {\n    let output = harper_cli()\n        .args([\"--no-color\", \"lint\", BAD_INPUT])\n        .env_remove(\"NO_COLOR\")\n        .output()\n        .unwrap();\n\n    let combined = [&output.stdout[..], &output.stderr[..]].concat();\n    assert!(\n        !has_ansi(&combined),\n        \"--no-color output should not contain ANSI escape codes\"\n    );\n}\n\n#[test]\nfn no_color_env_strips_ansi() {\n    let output = harper_cli()\n        .env(\"NO_COLOR\", \"1\")\n        .args([\"lint\", BAD_INPUT])\n        .output()\n        .unwrap();\n\n    let combined = [&output.stdout[..], &output.stderr[..]].concat();\n    assert!(\n        !has_ansi(&combined),\n        \"NO_COLOR=1 output should not contain ANSI escape codes\"\n    );\n}\n"
  },
  {
    "path": "harper-cli/tests/output_format.rs",
    "content": "use std::io::Write;\nuse std::process::Command;\n\nfn harper_cli() -> Command {\n    Command::new(env!(\"CARGO_BIN_EXE_harper-cli\"))\n}\n\n/// Input that triggers at least one lint (\"an test\" → AnA rule).\nconst BAD_INPUT: &str = \"This is an test.\";\n\n#[test]\nfn json_format_is_valid_json() {\n    let output = harper_cli()\n        .args([\"--no-color\", \"lint\", \"--format\", \"json\", BAD_INPUT])\n        .output()\n        .unwrap();\n\n    let stdout = String::from_utf8_lossy(&output.stdout);\n    let parsed: serde_json::Value = serde_json::from_str(&stdout)\n        .unwrap_or_else(|e| panic!(\"invalid JSON output: {e}\\nstdout: {stdout}\"));\n\n    let arr = parsed.as_array().expect(\"top-level should be an array\");\n    assert_eq!(arr.len(), 1, \"single input should produce one result\");\n\n    let first = &arr[0];\n    assert!(\n        first.get(\"file\").is_some(),\n        \"result should have a 'file' field\"\n    );\n    assert!(\n        first.get(\"lint_count\").is_some(),\n        \"result should have a 'lint_count' field\"\n    );\n    assert!(\n        first.get(\"lints\").is_some(),\n        \"result should have a 'lints' field\"\n    );\n\n    let lints = first[\"lints\"].as_array().unwrap();\n    assert!(!lints.is_empty(), \"should have at least one lint\");\n\n    let lint = &lints[0];\n    assert!(lint.get(\"rule\").is_some());\n    assert!(lint.get(\"kind\").is_some());\n    assert!(lint.get(\"line\").is_some());\n    assert!(lint.get(\"column\").is_some());\n    assert!(lint.get(\"message\").is_some());\n    assert!(lint.get(\"suggestions\").is_some());\n}\n\n#[test]\nfn json_format_no_ansi() {\n    let output = harper_cli()\n        .args([\"lint\", \"--format\", \"json\", BAD_INPUT])\n        .env_remove(\"NO_COLOR\")\n        .output()\n        .unwrap();\n\n    let stdout = String::from_utf8_lossy(&output.stdout);\n\n    // Check raw bytes for ESC\n    assert!(\n        !output.stdout.contains(&0x1b),\n        \"JSON output should never contain raw ANSI escape bytes\"\n    );\n\n    // Also check for escaped ANSI in JSON string values (e.g. \\\\u001b)\n    assert!(\n        !stdout.contains(\"\\\\u001b\") && !stdout.contains(\"\\\\x1b\"),\n        \"JSON output should not contain escaped ANSI sequences in values\"\n    );\n}\n\n/// Regression test: directory inputs with color enabled must not leak\n/// ANSI escapes into JSON `file` fields or compact output paths.\n#[test]\nfn json_directory_paths_no_ansi() {\n    let dir = tempfile::tempdir().unwrap();\n    let file_path = dir.path().join(\"bad.md\");\n    {\n        let mut f = std::fs::File::create(&file_path).unwrap();\n        write!(f, \"{BAD_INPUT}\").unwrap();\n    }\n\n    // Run with color explicitly enabled (no --no-color, NO_COLOR removed)\n    let output = harper_cli()\n        .args([\"lint\", \"--format\", \"json\", dir.path().to_str().unwrap()])\n        .env_remove(\"NO_COLOR\")\n        .output()\n        .unwrap();\n\n    let stdout = String::from_utf8_lossy(&output.stdout);\n    let parsed: serde_json::Value = serde_json::from_str(&stdout)\n        .unwrap_or_else(|e| panic!(\"invalid JSON from directory lint: {e}\\nstdout: {stdout}\"));\n\n    let arr = parsed.as_array().expect(\"top-level should be an array\");\n    assert!(!arr.is_empty(), \"should have at least one file result\");\n\n    for entry in arr {\n        let file_val = entry[\"file\"].as_str().expect(\"file should be a string\");\n        assert!(\n            !file_val.contains('\\x1b'),\n            \"JSON file field must not contain ANSI escapes, got: {file_val:?}\"\n        );\n    }\n}\n\n#[test]\nfn compact_directory_paths_no_ansi() {\n    let dir = tempfile::tempdir().unwrap();\n    let file_path = dir.path().join(\"bad.md\");\n    {\n        let mut f = std::fs::File::create(&file_path).unwrap();\n        write!(f, \"{BAD_INPUT}\").unwrap();\n    }\n\n    // Run with color explicitly enabled\n    let output = harper_cli()\n        .args([\"lint\", \"--format\", \"compact\", dir.path().to_str().unwrap()])\n        .env_remove(\"NO_COLOR\")\n        .output()\n        .unwrap();\n\n    let stdout = String::from_utf8_lossy(&output.stdout);\n    assert!(\n        !stdout.contains('\\x1b'),\n        \"compact output must not contain ANSI escapes in paths\"\n    );\n}\n\n#[test]\nfn compact_format_one_line_per_lint() {\n    let output = harper_cli()\n        .args([\"--no-color\", \"lint\", \"--format\", \"compact\", BAD_INPUT])\n        .output()\n        .unwrap();\n\n    let stdout = String::from_utf8_lossy(&output.stdout);\n    let lines: Vec<&str> = stdout.lines().collect();\n    assert!(\n        !lines.is_empty(),\n        \"compact output should have at least one line\"\n    );\n\n    for line in &lines {\n        // Each line should match the pattern: source:line:col: Kind::Rule: message\n        let parts: Vec<&str> = line.splitn(4, ':').collect();\n        assert!(\n            parts.len() >= 4,\n            \"compact line should have at least 4 colon-separated parts: {line}\"\n        );\n    }\n}\n\n#[test]\nfn default_format_unchanged() {\n    let output = harper_cli()\n        .args([\"--no-color\", \"lint\", \"--format\", \"default\", BAD_INPUT])\n        .output()\n        .unwrap();\n\n    let stdout = String::from_utf8_lossy(&output.stdout);\n    // Default format should include the Ariadne report header and lint count\n    assert!(\n        stdout.contains(\"lints\") || stdout.contains(\"No lints found\"),\n        \"default format should include lint count summary\"\n    );\n}\n"
  },
  {
    "path": "harper-comments/Cargo.toml",
    "content": "[package]\nname = \"harper-comments\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nreadme = \"README.md\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\nharper-html = { path = \"../harper-html\", version = \"1.0.0\" }\nharper-tree-sitter = { path = \"../harper-tree-sitter\", version = \"1.0.0\" }\nitertools = \"0.14.0\"\ntree-sitter = \"0.25.10\"\ntree-sitter-bash = \"0.25.1\"\ntree-sitter-c = \"0.24.1\"\ntree-sitter-cmake = \"0.7.1\"\ntree-sitter-cpp = \"0.23.4\"\ntree-sitter-c-sharp = \"0.23.1\"\ntree-sitter-go = \"0.25.0\"\ntree-sitter-groovy = \"0.1.2\"\ntree-sitter-haskell = \"0.23.1\"\ntree-sitter-java = \"0.23.5\"\ntree-sitter-javascript = \"0.25.0\"\ntree-sitter-kotlin-ng = \"1.1.0\"\ntree-sitter-lua = \"0.5.0\"\ntree-sitter-nix = \"0.3.0\"\ntree-sitter-php = \"0.24.2\"\ntree-sitter-powershell = \"0.26.3\"\ntree-sitter-ruby = \"0.23.1\"\ntree-sitter-rust = \"0.24.0\"\ntree-sitter-scala = \"0.24.0\"\ntree-sitter-solidity = \"1.2.13\"\ntree-sitter-swift = \"0.7.1\"\ntree-sitter-toml-ng = \"0.7.0\"\ntree-sitter-typescript = \"0.23.2\"\nharper-tree-sitter-dart = \"0.0.5\"\ntree-sitter-clojure = \"0.1.0\"\ntree-sitter-zig = \"1.1.2\"\n\n[dev-dependencies]\npaste = \"1.0.15\"\n"
  },
  {
    "path": "harper-comments/README.md",
    "content": "# `harper-comments`\n\nThis crate holds a number of functions, but it is primarily a wrapper around `tree-sitter` that allows Harper to locate the comments of a wide variety of programming languages.\nIt also has purpose-built parsers for the structured comments of a number of languages, including Go.\nThese additional parsers are available through the `CommentParser` and are enabled automatically through there.\n"
  },
  {
    "path": "harper-comments/src/comment_parser.rs",
    "content": "use std::path::Path;\n\nuse crate::comment_parsers;\nuse comment_parsers::{Go, JavaDoc, JsDoc, Lua, Solidity, Unit};\nuse harper_core::Token;\nuse harper_core::parsers::{self, MarkdownOptions, Parser};\nuse harper_core::spell::MutableDictionary;\nuse tree_sitter::Node;\n\nuse crate::masker::CommentMasker;\n\npub struct CommentParser {\n    inner: parsers::Mask<CommentMasker, Box<dyn Parser>>,\n}\n\nimpl CommentParser {\n    pub fn create_ident_dict(&self, source: &[char]) -> Option<MutableDictionary> {\n        self.inner.masker.create_ident_dict(source)\n    }\n\n    pub fn new_from_language_id(\n        language_id: &str,\n        markdown_options: MarkdownOptions,\n    ) -> Option<Self> {\n        let language = match language_id {\n            \"c\" => tree_sitter_c::LANGUAGE,\n            \"clojure\" => tree_sitter_clojure::LANGUAGE,\n            \"cmake\" => tree_sitter_cmake::LANGUAGE,\n            \"cpp\" => tree_sitter_cpp::LANGUAGE,\n            \"csharp\" => tree_sitter_c_sharp::LANGUAGE,\n            \"dart\" => harper_tree_sitter_dart::LANGUAGE,\n            \"go\" => tree_sitter_go::LANGUAGE,\n            \"groovy\" => tree_sitter_groovy::LANGUAGE,\n            \"haskell\" => tree_sitter_haskell::LANGUAGE,\n            \"daml\" => tree_sitter_haskell::LANGUAGE,\n            \"java\" => tree_sitter_java::LANGUAGE,\n            \"javascript\" => tree_sitter_javascript::LANGUAGE,\n            \"javascriptreact\" => tree_sitter_typescript::LANGUAGE_TSX,\n            \"kotlin\" => tree_sitter_kotlin_ng::LANGUAGE,\n            \"lua\" => tree_sitter_lua::LANGUAGE,\n            \"nix\" => tree_sitter_nix::LANGUAGE,\n            \"php\" => tree_sitter_php::LANGUAGE_PHP,\n            \"powershell\" => tree_sitter_powershell::LANGUAGE,\n            \"ruby\" => tree_sitter_ruby::LANGUAGE,\n            \"rust\" => tree_sitter_rust::LANGUAGE,\n            \"scala\" => tree_sitter_scala::LANGUAGE,\n            \"shellscript\" => tree_sitter_bash::LANGUAGE,\n            \"solidity\" => tree_sitter_solidity::LANGUAGE,\n            \"swift\" => tree_sitter_swift::LANGUAGE,\n            \"toml\" => tree_sitter_toml_ng::LANGUAGE,\n            \"typescript\" => tree_sitter_typescript::LANGUAGE_TYPESCRIPT,\n            \"typescriptreact\" => tree_sitter_typescript::LANGUAGE_TSX,\n            \"zig\" => tree_sitter_zig::LANGUAGE,\n            _ => return None,\n        };\n\n        let comment_parser: Box<dyn Parser> = match language_id {\n            \"go\" => Box::new(Go::new_markdown(markdown_options)),\n            \"java\" => Box::new(JavaDoc::default()),\n            \"javascript\" | \"javascriptreact\" | \"typescript\" | \"typescriptreact\" => {\n                Box::new(JsDoc::new_markdown(markdown_options))\n            }\n            \"lua\" => Box::new(Lua::new_markdown(markdown_options)),\n            \"solidity\" => Box::new(Solidity::new_markdown(markdown_options)),\n            _ => Box::new(Unit::new_markdown(markdown_options)),\n        };\n\n        Some(Self {\n            inner: parsers::Mask::new(\n                CommentMasker::new(language.into(), Self::node_condition),\n                comment_parser,\n            ),\n        })\n    }\n\n    /// Infer the programming language from a provided filename.\n    pub fn new_from_filename(filename: &Path, markdown_options: MarkdownOptions) -> Option<Self> {\n        Self::new_from_language_id(Self::filename_to_filetype(filename)?, markdown_options)\n    }\n\n    /// Convert a provided path to a corresponding Language Server Protocol file\n    /// type.\n    ///\n    /// Note to contributors: try to keep this in sync with\n    /// [`Self::new_from_language_id`]\n    fn filename_to_filetype(path: &Path) -> Option<&'static str> {\n        Some(match path.extension()?.to_str()? {\n            \"c\" => \"c\",\n            \"bb\" | \"cljc\" | \"cljd\" | \"clj\" | \"cljs\" => \"clojure\",\n            \"cmake\" => \"cmake\",\n            \"cpp\" | \"h\" => \"cpp\",\n            \"cs\" => \"csharp\",\n            \"dart\" => \"dart\",\n            \"go\" => \"go\",\n            \"groovy\" | \"gradle\" => \"groovy\",\n            \"hs\" => \"haskell\",\n            \"daml\" => \"daml\",\n            \"java\" => \"java\",\n            \"js\" => \"javascript\",\n            \"jsx\" => \"javascriptreact\",\n            \"kt\" | \"kts\" => \"kotlin\",\n            \"lua\" => \"lua\",\n            \"nix\" => \"nix\",\n            \"php\" => \"php\",\n            \"ps1\" | \"psd1\" | \"psm1\" => \"powershell\",\n            \"rb\" => \"ruby\",\n            \"rs\" => \"rust\",\n            \"sbt\" | \"sc\" | \"scala\" | \"mill\" => \"scala\",\n            \"bash\" | \"sh\" => \"shellscript\",\n            \"sol\" => \"solidity\",\n            \"swift\" => \"swift\",\n            \"toml\" => \"toml\",\n            \"ts\" => \"typescript\",\n            \"tsx\" => \"typescriptreact\",\n            \"zig\" => \"zig\",\n            _ => return None,\n        })\n    }\n\n    fn node_condition(n: &Node) -> bool {\n        n.kind().contains(\"comment\")\n    }\n}\n\nimpl Parser for CommentParser {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        self.inner.parse(source)\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::CommentParser;\n    use harper_core::parsers::{MarkdownOptions, StrParser};\n\n    #[test]\n    fn hang() {\n        use std::sync::mpsc::channel;\n        use std::thread;\n        use std::time::Duration;\n\n        let (tx, rx) = channel::<()>();\n\n        let handle = thread::spawn(move || {\n            let opts = MarkdownOptions::default();\n            let parser = CommentParser::new_from_language_id(\"java\", opts).unwrap();\n            let _res = parser.parse_str(\"//{@j\");\n            tx.send(()).expect(\"send failed\");\n        });\n\n        rx.recv_timeout(Duration::from_secs(10)).expect(\"timed out\");\n        handle.join().expect(\"failed to join\");\n    }\n}\n"
  },
  {
    "path": "harper-comments/src/comment_parsers/go.rs",
    "content": "use harper_core::Lrc;\nuse harper_core::Token;\nuse harper_core::parsers::{Markdown, MarkdownOptions, Parser};\n\nuse super::without_initiators;\n\n#[derive(Clone)]\npub struct Go {\n    inner: Lrc<dyn Parser>,\n}\n\nimpl Go {\n    pub fn new(parser: Lrc<dyn Parser>) -> Self {\n        Self { inner: parser }\n    }\n\n    pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {\n        Self::new(Lrc::new(Markdown::new(markdown_options)))\n    }\n}\n\nimpl Parser for Go {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mut actual = without_initiators(source);\n        let mut actual_source = actual.get_content(source);\n\n        if matches!(actual_source, ['g', 'o', ':', ..]) {\n            let Some(terminator) = source.iter().position(|c| *c == '\\n') else {\n                return Vec::new();\n            };\n\n            actual.start += terminator;\n\n            let Some(new_source) = actual.try_get_content(actual_source) else {\n                return Vec::new();\n            };\n\n            actual_source = new_source\n        }\n\n        let mut new_tokens = self.inner.parse(actual_source);\n\n        new_tokens\n            .iter_mut()\n            .for_each(|t| t.span.push_by(actual.start));\n\n        new_tokens\n    }\n}\n"
  },
  {
    "path": "harper-comments/src/comment_parsers/javadoc.rs",
    "content": "use std::collections::VecDeque;\n\nuse harper_core::parsers::Parser;\nuse harper_core::{Punctuation, Token, TokenKind, VecExt};\nuse harper_html::HtmlParser;\n\nuse super::without_initiators;\n\n#[derive(Default)]\npub struct JavaDoc {\n    html_parser: HtmlParser,\n}\n\nimpl Parser for JavaDoc {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let actual = without_initiators(source);\n        let actual_source = actual.get_content(source);\n\n        let mut tokens = self.html_parser.parse(actual_source);\n\n        // We need to remove leading spaces and stars from the block of tokens.\n        let mut remove_these: VecDeque<usize> = VecDeque::new();\n\n        let mut cursor = 0;\n\n        while cursor < tokens.len() {\n            let maybe_newline = &tokens[cursor];\n\n            if let TokenKind::Newline(_) = maybe_newline.kind {\n                cursor += 1;\n\n                loop {\n                    if cursor >= tokens.len() {\n                        break;\n                    }\n\n                    let maybe_removable = &tokens[cursor];\n\n                    if matches!(\n                        maybe_removable.kind,\n                        TokenKind::Punctuation(Punctuation::Star) | TokenKind::Space(_)\n                    ) {\n                        remove_these.push_back(cursor);\n                        cursor += 1;\n                    } else {\n                        break;\n                    }\n                }\n            } else {\n                cursor += 1;\n            }\n        }\n\n        tokens.remove_indices(remove_these);\n\n        for token in tokens.iter_mut() {\n            token.span.push_by(actual.start);\n        }\n\n        super::jsdoc::mark_inline_tags(&mut tokens);\n\n        // Mark @tags as unlintable\n        for i in 3..tokens.len() {\n            let a = &tokens[i - 3];\n            let b = &tokens[i - 2];\n            let c = &tokens[i - 1];\n            let d = &tokens[i];\n\n            if a.kind.is_at() && b.kind.is_word() && c.kind.is_space() && d.kind.is_word() {\n                tokens[i - 3].kind = TokenKind::Unlintable;\n                tokens[i - 2].kind = TokenKind::Unlintable;\n                tokens[i - 1].kind = TokenKind::Unlintable;\n                tokens[i].kind = TokenKind::Unlintable;\n            }\n        }\n\n        tokens\n    }\n}\n"
  },
  {
    "path": "harper-comments/src/comment_parsers/jsdoc.rs",
    "content": "use harper_core::Lrc;\nuse harper_core::parsers::{Markdown, MarkdownOptions, Parser};\nuse harper_core::{Punctuation, Span, Token, TokenKind};\nuse itertools::Itertools;\n\nuse super::without_initiators;\n\n#[derive(Clone)]\npub struct JsDoc {\n    inner: Lrc<dyn Parser>,\n}\n\nimpl JsDoc {\n    pub fn new(parser: Lrc<dyn Parser>) -> Self {\n        Self { inner: parser }\n    }\n\n    pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {\n        Self::new(Lrc::new(Markdown::new(markdown_options)))\n    }\n}\n\nimpl Parser for JsDoc {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mut tokens = Vec::new();\n\n        let mut chars_traversed = 0;\n\n        for line in source.split(|c| *c == '\\n') {\n            let mut new_tokens = parse_line(line, self.inner.clone());\n\n            if chars_traversed + line.len() < source.len() {\n                new_tokens.push(Token::new(\n                    Span::new_with_len(line.len(), 1),\n                    harper_core::TokenKind::Newline(1),\n                ));\n            }\n\n            new_tokens\n                .iter_mut()\n                .for_each(|t| t.span.push_by(chars_traversed));\n\n            chars_traversed += line.len() + 1;\n            tokens.append(&mut new_tokens);\n        }\n\n        tokens\n    }\n}\n\nfn parse_line(source: &[char], parser: Lrc<dyn Parser>) -> Vec<Token> {\n    let actual_line = without_initiators(source);\n\n    if actual_line.is_empty() {\n        return vec![];\n    }\n\n    let source_line = actual_line.get_content(source);\n\n    let mut new_tokens = parser.parse(source_line);\n\n    // Handle inline tags\n    mark_inline_tags(&mut new_tokens);\n\n    // Handle the block tag, if it exists on the current line.\n    if let Some(tag_start) = new_tokens.iter().tuple_windows().position(|(a, b)| {\n        matches!(\n            (a, b),\n            (\n                Token {\n                    kind: TokenKind::Punctuation(Punctuation::At),\n                    ..\n                },\n                Token {\n                    kind: TokenKind::Word(..),\n                    ..\n                }\n            )\n        )\n    }) {\n        for token in &mut new_tokens[tag_start..] {\n            token.kind = TokenKind::Unlintable;\n        }\n    }\n\n    for token in new_tokens.iter_mut() {\n        token.span.push_by(actual_line.start);\n    }\n\n    new_tokens\n}\n\n/// Locate all inline tags (i.e. `{@tag ..}`) and mark them as unlintable\npub(super) fn mark_inline_tags(tokens: &mut [Token]) {\n    let mut cursor = 0;\n\n    loop {\n        if cursor >= tokens.len() {\n            break;\n        }\n\n        if let Some(new_cursor) = &tokens[cursor..]\n            .iter()\n            .position(|t| t.kind == TokenKind::Punctuation(Punctuation::OpenCurly))\n            .map(|i| i + cursor)\n        {\n            cursor = *new_cursor;\n        } else {\n            break;\n        }\n\n        if let Some(p) = parse_inline_tag(&tokens[cursor..]) {\n            for tok in &mut tokens[cursor..cursor + p] {\n                tok.kind = TokenKind::Unlintable;\n            }\n\n            cursor += p;\n            continue;\n        }\n        cursor += 1;\n    }\n}\n\n/// Checks if the provided token slice begins with an inline tag, returning its\n/// end if so.\nfn parse_inline_tag(tokens: &[Token]) -> Option<usize> {\n    if !matches!(\n        tokens,\n        [\n            Token {\n                kind: TokenKind::Punctuation(Punctuation::OpenCurly),\n                ..\n            },\n            Token {\n                kind: TokenKind::Punctuation(Punctuation::At),\n                ..\n            },\n            Token {\n                kind: TokenKind::Word(..),\n                ..\n            },\n            ..,\n        ]\n    ) {\n        return None;\n    }\n\n    if tokens.len() <= 3 {\n        return None;\n    }\n\n    let mut cursor = 3;\n\n    while cursor < tokens.len()\n        && !matches!(\n            tokens.get(cursor),\n            Some(Token {\n                kind: TokenKind::Punctuation(Punctuation::CloseCurly),\n                ..\n            })\n        )\n    {\n        cursor += 1;\n    }\n\n    Some(cursor + 1)\n}\n\n#[cfg(test)]\nmod tests {\n    use harper_core::{Document, Punctuation, TokenKind, parsers::MarkdownOptions};\n\n    use crate::CommentParser;\n\n    #[test]\n    fn escapes_loop() {\n        let source = \"/** This should _not_cause an infinite loop: {@ */\";\n        let parser =\n            CommentParser::new_from_language_id(\"javascript\", MarkdownOptions::default()).unwrap();\n        Document::new_curated(source, &parser);\n    }\n\n    #[test]\n    fn handles_inline_link() {\n        let source = \"/** See {@link MyClass} and [MyClass's foo property]{@link MyClass#foo}. */\";\n        let parser =\n            CommentParser::new_from_language_id(\"javascript\", MarkdownOptions::default()).unwrap();\n        let document = Document::new_curated(source, &parser);\n\n        assert!(matches!(\n            document\n                .tokens()\n                .map(|t| t.kind.clone())\n                .collect::<Vec<_>>()\n                .as_slice(),\n            &[\n                TokenKind::Word(..),\n                TokenKind::Space(1),\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Space(1),\n                TokenKind::Word(..),\n                TokenKind::Space(1),\n                TokenKind::Punctuation(Punctuation::OpenSquare),\n                TokenKind::Word(..),\n                TokenKind::Space(1),\n                TokenKind::Word(..),\n                TokenKind::Space(1),\n                TokenKind::Word(..),\n                TokenKind::Punctuation(Punctuation::CloseSquare),\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Unlintable,\n                TokenKind::Punctuation(Punctuation::Period),\n            ]\n        ));\n    }\n\n    #[test]\n    fn handles_class() {\n        let source = \"/** @class Circle representing a circle. */\";\n        let parser =\n            CommentParser::new_from_language_id(\"javascript\", MarkdownOptions::default()).unwrap();\n        let document = Document::new_curated(source, &parser);\n\n        assert!(\n            document.tokens().all(|t| t.kind.is_unlintable()\n                || t.kind.is_newline()\n                || t.kind.is_paragraph_break())\n        );\n    }\n}\n"
  },
  {
    "path": "harper-comments/src/comment_parsers/lua.rs",
    "content": "use harper_core::Lrc;\nuse harper_core::Span;\nuse harper_core::Token;\nuse harper_core::parsers::{Markdown, MarkdownOptions, Parser};\n\nuse super::without_initiators;\n\n#[derive(Clone)]\npub struct Lua {\n    inner: Lrc<dyn Parser>,\n}\n\nimpl Lua {\n    pub fn new(parser: Lrc<dyn Parser>) -> Self {\n        Self { inner: parser }\n    }\n\n    pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {\n        Self::new(Lrc::new(Markdown::new(markdown_options)))\n    }\n}\n\nimpl Parser for Lua {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mut tokens = Vec::new();\n\n        let mut chars_traversed = 0;\n\n        for line in source.split(|c| *c == '\\n') {\n            if starts_with_prefix(line) {\n                tokens.push(Token::new(\n                    Span::empty(chars_traversed),\n                    harper_core::TokenKind::Newline(2),\n                ));\n                chars_traversed += line.len() + 1;\n                continue;\n            }\n\n            let mut new_tokens = parse_line(line, self.inner.clone());\n\n            if chars_traversed + line.len() < source.len() {\n                new_tokens.push(Token::new(\n                    Span::new_with_len(line.len(), 1),\n                    harper_core::TokenKind::Newline(1),\n                ));\n            }\n\n            new_tokens\n                .iter_mut()\n                .for_each(|t| t.span.push_by(chars_traversed));\n\n            chars_traversed += line.len() + 1;\n            tokens.append(&mut new_tokens);\n        }\n\n        tokens\n    }\n}\n\nfn starts_with_prefix(source: &[char]) -> bool {\n    let actual = without_initiators(source);\n    let actual_chars = actual.get_content(source);\n\n    matches!(actual_chars, ['@', ..])\n}\n\nfn parse_line(source: &[char], parser: Lrc<dyn Parser>) -> Vec<Token> {\n    let actual = without_initiators(source);\n\n    if actual.is_empty() {\n        return Vec::new();\n    }\n\n    let source = actual.get_content(source);\n\n    let mut new_tokens = parser.parse(source);\n\n    new_tokens\n        .iter_mut()\n        .for_each(|t| t.span.push_by(actual.start));\n\n    new_tokens\n}\n"
  },
  {
    "path": "harper-comments/src/comment_parsers/mod.rs",
    "content": "mod go;\nmod javadoc;\nmod jsdoc;\nmod lua;\nmod solidity;\nmod unit;\n\npub use go::Go;\nuse harper_core::Span;\npub use javadoc::JavaDoc;\npub use jsdoc::JsDoc;\npub use lua::Lua;\npub use solidity::Solidity;\npub use unit::Unit;\n\n/// Get the span of a tree-sitter-produced comment that doesn't include the\n/// comment openers and closers.\nfn without_initiators(source: &[char]) -> Span<char> {\n    // Skip over the comment start characters\n    let actual_start = source\n        .iter()\n        .position(|c| !is_comment_character(*c) && !c.is_whitespace())\n        .unwrap_or(source.len());\n\n    // Chop off the end\n    let actual_end = source.len()\n        - source\n            .iter()\n            .rev()\n            .position(|c| !is_comment_character(*c) && !c.is_whitespace())\n            .unwrap_or(0);\n\n    Span::new(actual_start, actual_end)\n}\n\nfn is_comment_character(c: char) -> bool {\n    matches!(c, '#' | '-' | '/' | '*' | '!')\n}\n\n#[cfg(test)]\nmod tests {\n    use super::without_initiators;\n\n    #[test]\n    fn cleans_empty_comment() {\n        let source: Vec<_> = \"///\".chars().collect();\n        assert_eq!(without_initiators(&source).len(), 0);\n    }\n\n    #[test]\n    fn cleans_empty_comment_with_whitespace() {\n        let source: Vec<_> = \"///   \".chars().collect();\n        assert_eq!(without_initiators(&source).len(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-comments/src/comment_parsers/solidity.rs",
    "content": "use harper_core::Lrc;\nuse harper_core::Span;\nuse harper_core::Token;\nuse harper_core::parsers::{MarkdownOptions, Parser};\n\nuse super::jsdoc::JsDoc;\nuse super::without_initiators;\n\n#[derive(Clone)]\npub struct Solidity {\n    inner: Lrc<dyn Parser>,\n}\n\nimpl Solidity {\n    pub fn new(parser: Lrc<dyn Parser>) -> Self {\n        Self { inner: parser }\n    }\n\n    pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {\n        Self::new(Lrc::new(JsDoc::new_markdown(markdown_options)))\n    }\n}\n\nimpl Parser for Solidity {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mut tokens = Vec::new();\n\n        let mut chars_traversed = 0;\n\n        for line in source.split(|c| *c == '\\n') {\n            let mut new_tokens = parse_line(line, self.inner.clone());\n\n            if chars_traversed + line.len() < source.len() {\n                new_tokens.push(Token::new(\n                    Span::new_with_len(line.len(), 1),\n                    harper_core::TokenKind::Newline(1),\n                ));\n            }\n\n            new_tokens\n                .iter_mut()\n                .for_each(|t| t.span.push_by(chars_traversed));\n\n            chars_traversed += line.len() + 1;\n            tokens.append(&mut new_tokens);\n        }\n\n        tokens\n    }\n}\n\nfn parse_line(source: &[char], parser: Lrc<dyn Parser>) -> Vec<Token> {\n    let mut actual = without_initiators(source);\n    if actual.is_empty() {\n        return Vec::new();\n    }\n    let mut actual_source = actual.get_content(source);\n\n    // ignore the special SPDX-License-Identifier comment\n    if actual_source.starts_with(&['S', 'P', 'D', 'X', '-']) {\n        let Some(terminator) = source.iter().position(|c| *c == '\\n') else {\n            return Vec::new();\n        };\n\n        actual.start += terminator;\n\n        let Some(new_source) = actual.try_get_content(actual_source) else {\n            return Vec::new();\n        };\n\n        actual_source = new_source\n    }\n\n    let mut new_tokens = parser.parse(actual_source);\n\n    new_tokens\n        .iter_mut()\n        .for_each(|t| t.span.push_by(actual.start));\n\n    new_tokens\n}\n"
  },
  {
    "path": "harper-comments/src/comment_parsers/unit.rs",
    "content": "use harper_core::Lrc;\nuse harper_core::parsers::{Markdown, MarkdownOptions, Parser};\nuse harper_core::{Span, Token};\n\nuse super::without_initiators;\n\n/// A comment parser that strips starting `/` and `*` characters.\n///\n/// It is meant to cover _most_ cases in _most_ programming languages.\n///\n/// It assumes it is being provided a single line of comment at a time,\n/// including the comment initiation characters.\n#[derive(Clone)]\npub struct Unit {\n    inner: Lrc<dyn Parser>,\n}\n\nimpl Unit {\n    pub fn new(parser: Lrc<dyn Parser>) -> Self {\n        Self { inner: parser }\n    }\n\n    pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {\n        Self::new(Lrc::new(Markdown::new(markdown_options)))\n    }\n}\n\nimpl Parser for Unit {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mut tokens = Vec::new();\n\n        let mut chars_traversed = 0;\n        let mut in_code_fence = false;\n\n        for line in source.split(|c| *c == '\\n') {\n            if line_is_code_fence(line) {\n                in_code_fence = !in_code_fence;\n            }\n\n            if in_code_fence {\n                chars_traversed += line.len() + 1;\n                continue;\n            }\n\n            let mut new_tokens = parse_line(line, self.inner.clone());\n\n            if chars_traversed + line.len() < source.len() {\n                new_tokens.push(Token::new(\n                    Span::new_with_len(line.len(), 1),\n                    harper_core::TokenKind::Newline(1),\n                ));\n            }\n\n            new_tokens\n                .iter_mut()\n                .for_each(|t| t.span.push_by(chars_traversed));\n\n            chars_traversed += line.len() + 1;\n            tokens.append(&mut new_tokens);\n        }\n\n        tokens\n    }\n}\n\nfn parse_line(source: &[char], parser: Lrc<dyn Parser>) -> Vec<Token> {\n    let actual = without_initiators(source);\n\n    if actual.is_empty() {\n        return Vec::new();\n    }\n\n    let source = actual.get_content(source);\n\n    let mut new_tokens = parser.parse(source);\n\n    new_tokens\n        .iter_mut()\n        .for_each(|t| t.span.push_by(actual.start));\n\n    new_tokens\n}\n\nfn line_is_code_fence(source: &[char]) -> bool {\n    let actual = without_initiators(source);\n    let actual_chars = actual.get_content(source);\n\n    matches!(actual_chars, ['`', '`', '`', ..])\n}\n"
  },
  {
    "path": "harper-comments/src/lib.rs",
    "content": "#![doc = include_str!(\"../README.md\")]\n\nmod comment_parser;\nmod comment_parsers;\nmod masker;\npub use comment_parser::CommentParser;\n"
  },
  {
    "path": "harper-comments/src/masker.rs",
    "content": "use harper_core::Masker;\nuse harper_core::spell::MutableDictionary;\nuse harper_tree_sitter::TreeSitterMasker;\n\npub struct CommentMasker {\n    inner: TreeSitterMasker,\n    ignore_condition: Box<dyn Fn(&String) -> bool + Send + Sync>,\n}\n\nimpl CommentMasker {\n    pub fn create_ident_dict(&self, source: &[char]) -> Option<MutableDictionary> {\n        self.inner.create_ident_dict(source)\n    }\n\n    pub fn new(\n        language: tree_sitter::Language,\n        ts_node_condition: fn(&tree_sitter::Node) -> bool,\n    ) -> Self {\n        Self::new_with_ignore_condition(\n            language,\n            ts_node_condition,\n            Box::new(|text| {\n                text.contains(\"spellchecker:ignore\")\n                    || text.contains(\"spellchecker: ignore\")\n                    || text.contains(\"spell-checker:ignore\")\n                    || text.contains(\"spell-checker: ignore\")\n                    || text.contains(\"spellcheck:ignore\")\n                    || text.contains(\"spellcheck: ignore\")\n                    || text.contains(\"harper:ignore\")\n                    || text.contains(\"harper: ignore\")\n                    || text.starts_with(\"#!\")\n            }),\n        )\n    }\n\n    pub fn new_with_ignore_condition(\n        language: tree_sitter::Language,\n        ts_node_condition: fn(&tree_sitter::Node) -> bool,\n        ignore_condition: Box<dyn Fn(&String) -> bool + Send + Sync>,\n    ) -> Self {\n        Self {\n            inner: TreeSitterMasker::new(language, ts_node_condition),\n            ignore_condition,\n        }\n    }\n}\n\nimpl Masker for CommentMasker {\n    fn create_mask(&self, source: &[char]) -> harper_core::Mask {\n        self.inner\n            .create_mask(source)\n            .iter_allowed(source)\n            .map(|(span, chars)| (span, chars.iter().collect::<String>()))\n            .filter(|(_, text)| !(self.ignore_condition)(text))\n            .map(|(span, _)| span)\n            .collect()\n    }\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support.rs",
    "content": "use std::path::Path;\n\nuse harper_comments::CommentParser;\nuse harper_core::linting::{LintGroup, Linter};\nuse harper_core::parsers::MarkdownOptions;\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\n\n/// Creates a unit test checking that the linting of a source file in\n/// `language_support_sources` produces the expected number of lints.\nmacro_rules! create_test {\n    ($filename:ident.$ext:ident, $correct_expected:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_$ext _ $filename _correctly>](){\n                 let filename = concat!(stringify!($filename), \".\", stringify!($ext));\n                 let source = include_str!(\n                    concat!(\n                        \"./language_support_sources/\",\n                        concat!(\n                        stringify!($filename), \".\", stringify!($ext))\n                    )\n                 );\n\n                 let parser = CommentParser::new_from_filename(Path::new(filename), MarkdownOptions::default()).unwrap();\n                 let dict = FstDictionary::curated();\n                 let document = Document::new(&source, &parser, &dict);\n\n                 let mut linter = LintGroup::new_curated(dict, Dialect::American);\n                 let lints = linter.lint(&document);\n\n                 dbg!(&lints);\n                 assert_eq!(lints.len(), $correct_expected);\n\n                 // Make sure that all generated tokens span real characters\n                 for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                 }\n            }\n        }\n    };\n}\n\ncreate_test!(multiline_comments.cpp, 4);\ncreate_test!(multiline_comments.ts, 4);\ncreate_test!(multiline_comments.sol, 4);\ncreate_test!(clean.lua, 0);\ncreate_test!(dirty.lua, 1);\ncreate_test!(clean.rs, 0);\ncreate_test!(clean.sol, 0);\ncreate_test!(clean.ps1, 0);\ncreate_test!(jsdoc.ts, 4);\ncreate_test!(issue_96.lua, 0);\ncreate_test!(merged_lines.ts, 1);\ncreate_test!(javadoc_clean_simple.java, 0);\ncreate_test!(javadoc_complex.java, 5);\ncreate_test!(issue_132.rs, 1);\ncreate_test!(laravel_app.php, 2);\ncreate_test!(ignore_shebang_1.sh, 0);\ncreate_test!(ignore_shebang_2.sh, 0);\ncreate_test!(ignore_shebang_3.sh, 0);\ncreate_test!(ignore_shebang_4.sh, 1);\ncreate_test!(common.mill, 1);\ncreate_test!(basic_kotlin.kt, 0);\ncreate_test!(basic_groovy.groovy, 1);\ncreate_test!(complex_groovy_block_comments.groovy, 1);\ncreate_test!(complex_gradle_build.gradle, 1);\ncreate_test!(complex_groovy_strings_regex.groovy, 1);\ncreate_test!(issue_1097.lua, 0);\ncreate_test!(basic.clj, 12);\n\n// Checks that some comments are masked out\ncreate_test!(ignore_comments.rs, 1);\ncreate_test!(ignore_comments.c, 1);\ncreate_test!(ignore_comments.sol, 1);\ncreate_test!(ignore_comments.ps1, 1);\n\n// Zig tests - covering //, ///, and //! comments\ncreate_test!(clean.zig, 0);\ncreate_test!(dirty.zig, 5);\n\n// These are to make sure nothing crashes.\ncreate_test!(empty.js, 0);\ncreate_test!(issue_229.js, 0);\ncreate_test!(issue_229.c, 0);\ncreate_test!(issue_229.cs, 0);\ncreate_test!(eof.rs, 0);\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/basic.clj",
    "content": "(ns clean\n  \"It is actually possible to document a ns.\n  It's a nice place to describe the purpose of the namespace and maybe even\n  the overall conventions used. Note how _not_ indenting the docstring makes\n  it easier for tooling to display it correctly.\")\n\n;;;; Section Comment/Heading\n\n;;; Foo...\n;;; Bar...\n;;; Baz...\n\n;; good\n(defn foo\n  \"This funtion doesn't do much.\"\n  []\n  nil)\n\n;; bad\n(defn bar\n  ^{:doc \"This function doesn't do much.\"}\n  []\n  nil)\n\n;; good\n(defn qzuf-number\n  \"Computes the [Qzuf number](https://wikipedia.org/qzuf) of the `coll`.\n  Supported options in `opts`:\n\n  | key           | description |\n  | --------------|-------------|\n  | `:finite-uni?`| Assume finite universe; default: `false`\n  | `:complex?`   | If OK to return a [complex number](https://en.wikipedia.org/wiki/Complex_number); default: `false`\n  | `:timeout`    | Throw an exception if the computation doesn't finish within `:timeout` milliseconds; default: `nil`\n\n  Example:\n  ```clojure\n  (when (neg? (qzuf-number [1 2 3] {:finite-uni? true}))\n    (throw (RuntimeException. \\\"Error in the Universe!\\\")))\n  ```\"\n  [coll opts]\n  nil)\n\n(defprotocol MyProtocol\n  \"MyProtocol docstring\"\n  (foo [this x y z]\n    \"foo docstring\")\n  (bar [this]\n    \"bar docstring\"))\n\n;; good\n(defn some-fun\n  []\n  ;; FIXME: This has crashed occasionally since v1.2.3. It may\n  ;;        be related to the BarBazUtil upgrade. (xz 13-1-31)\n  #_(baz))\n\n;;;; Frob Grovel\n\n;;; This section of the code has some important implications:\n;;;   1. Foo.\n;;;   2. Bar.\n;;;   3. Baz.\n\n(defn fnord [zarquon]\n  ;; If zob, then veeblefitz.\n  (quux zot\n        mumble             ; Zibblefrotz.\n        frotz))\n\n(defn foo [x]\n  x ; I'm a line/code fragment comment.\n  )\n\n;;; I'm a top-level comment.\n;;; I live outside any definition.\n\n(defn foo [])\n\n(def ^{:deprecated \"0.5\"} foo\n  \"Use `bar` instead.\"\n  42)\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/basic_groovy.groovy",
    "content": "// This commment has one typo.\ndef greeting = \"hello\"\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/basic_kotlin.kt",
    "content": "// *************************************************************************************************\n//  A diminutive but fully-formed demonstration of idiomatic Kotlin.\n//\n//  1. Defines a sealed algebraic hierarchy to represent the discrete states of a task\n//     transmogrifying through a rudimentary scheduler.\n//  2. Employs a type-safe builder DSL to assemble a cohort of Task objects succinctly.\n//  3. Utilizes coroutines and the structured-concurrency discipline to execute tasks\n//     concomitantly while preserving deterministic shutdown semantics.\n// *************************************************************************************************\n\n// ---------- Domain model -------------------------------------------------------------------------\n\n/** Immutable value holder representing a unit of executable labor. */\ndata class Task(\n    val id: Int,\n    val description: String,\n    val action: suspend () -> Unit,\n)\n\n/** Exhaustive taxonomy of execution outcomes; the `sealed` modifier ensures compiler‐enforced totality. */\nsealed interface TaskResult {\n    /** Successful completion carrying an optional payload. */\n    data class Success(val id: Int, val elapsedMillis: Long) : TaskResult\n    /** Recoverable misadventure accompanied by the causal `Throwable`. */\n    data class Failure(val id: Int, val cause: Throwable) : TaskResult\n    /** Voluntary cessation initiated by the caller before execution. */\n    data class Cancelled(val id: Int) : TaskResult\n}\n\n// ---------- DSL for declarative task construction -----------------------------------------------\n\n/** Fluent builder furnishing a terse, expressive syntax for batch task definition. */\n@DslMarker\nannotation class TaskDsl\n\n@TaskDsl\nclass TaskBatchBuilder {\n    private val tasks = mutableListOf<Task>()\n\n    /** Registers a new task whose body is expressed as a suspending lambda. */\n    fun task(description: String, block: suspend () -> Unit) {\n        tasks += Task(tasks.size + 1, description, block)\n    }\n\n    internal fun build(): List<Task> = tasks.toList()\n}\n\n/** Conveniences the client with type inference and inline lambda to craft a task batch. */\nfun taskBatch(init: TaskBatchBuilder.() -> Unit): List<Task> =\n    TaskBatchBuilder().apply(init).build()\n\n// ---------- Scheduler implementation -------------------------------------------------------------\n\nimport kotlinx.coroutines.*\nimport kotlin.system.*\n\n/** Executes all tasks concurrently, returning a conglomerate of `TaskResult` artifacts. */\nsuspend fun runTasks(tasks: List<Task>): List<TaskResult> = coroutineScope {\n    val startEpoch = System.currentTimeMillis()\n\n    // Launch each task within its own child coroutine; Deferred encapsulates the eventual result.\n    val futures: List<Deferred<TaskResult>> = tasks.map { task ->\n        async {\n            val elapsed = measureTimeMillis {\n                try {\n                    task.action()\n                } catch (t: CancellationException) {\n                    // Propagate structured-concurrency cancellation upward; annotate as `Cancelled`.\n                    return@async TaskResult.Cancelled(task.id)\n                } catch (t: Throwable) {\n                    // Swallow domain-level exception, encapsulate in Failure result.\n                    return@async TaskResult.Failure(task.id, t)\n                }\n            }\n            // If the lambda returns normally, the endeavor is deemed triumphant.\n            TaskResult.Success(task.id, elapsed)\n        }\n    }\n\n    // Await completion of the entire cohort, preserving result order by task identifier.\n    futures.awaitAll().sortedBy { result ->\n        when (result) {\n            is TaskResult.Success   -> result.id\n            is TaskResult.Failure   -> result.id\n            is TaskResult.Cancelled -> result.id\n        }\n    }\n}\n\n// ---------- Demonstration entry-point ------------------------------------------------------------\n\nfun main() = runBlocking {\n    // Compose an eclectic suite of tasks via the DSL.\n    val tasks = taskBatch {\n        task(\"Inconsequential delay\") {\n            delay(250)\n            println(\"Task A executed on thread ${Thread.currentThread().name}\")\n        }\n        task(\"Spurious exception\") {\n            delay(100)\n            error(\"Intentional kaboom\")\n        }\n        task(\"CPU-bound Fibonacci\") {\n            val n = 25\n            val fib = generateSequence(0 to 1) { it.second to it.first + it.second }\n                .take(n + 1).last().first\n            println(\"fib($n) = $fib\")\n        }\n    }\n\n    println(\"Launching ${tasks.size} tasks concurrently…\\n\")\n\n    // Drive the scheduler and acquire the final ledger.\n    val ledger = runTasks(tasks)\n\n    // Expository epilogue.\n    println(\"\\n────────── Execution Ledger ──────────\")\n    ledger.forEach { result ->\n        when (result) {\n            is TaskResult.Success ->\n                println(\"✔︎ Task ${result.id} succeeded in ${result.elapsedMillis} ms\")\n            is TaskResult.Failure ->\n                println(\"✘ Task ${result.id} failed with ${result.cause::class.simpleName}: ${result.cause.message}\")\n            is TaskResult.Cancelled ->\n                println(\"⚑ Task ${result.id} was cancelled before commencement\")\n        }\n    }\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/clean.lua",
    "content": "---@meta\n\n---@alias MyCustomType integer\n\n---Calculate a value using [my custom type](lua://MyCustomType)\n---@param x MyCustomType\nfunction calculate(x) end\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/clean.ps1",
    "content": "# This is an example PowerShell file with clean comments.\n\n<#\nThis block comment should also lint cleanly.\nIt includes multiple lines of text.\n#>\n\nfunction Invoke-Demo {\n    # This function has no lint issues in its comments.\n    Write-Output \"Hello from Harper\"\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/clean.rs",
    "content": "/// This is an example Rust file that should produce no Harper lints.\n\nstruct TestStruct {}\n\nimpl TestStruct {\n    /// This is a test function.\n    /// It has a [link](https://example.com) embedded inside\n    fn test_function() {}\n\n    /// This is another test function.\n    /// It has another [link](https://example.com) embedded inside\n    fn test_function() {}\n\n    /// This is some gibberish to try to trigger a lint for the sentences that continue for too long\n    ///\n    /// This is some gibberish to try to trigger a lint for the sentences that continue for too long\n    ///\n    /// This is some gibberish to try to trigger a lint for the sentences that continue for too long\n    /// \n    /// This is some gibberish to try to trigger a lint for the sentences that continue for too long\n    ///\n    /// This is some gibberish to try to trigger a lint for the sentences that continue for too long\n}\n\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/clean.sol",
    "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.20;\n\n/// This is an example Solidity file that should produce no Harper lints.\ncontract TestContract {\n    /// This is a test function.\n    /// It has a [link](https://example.com) embedded inside\n    function testFunction() external {}\n\n    /**\n     * @notice This is another test function.\n     * @dev It has another [link](https://example.com) embedded inside\n     * @param p This is a parameter\n     */\n    function testFunction2(uint256 p) external {}\n\n    // This is some gibberish to try to trigger a lint for the sentences that continue for too long\n    //\n    // This is some gibberish to try to trigger a lint for the sentences that continue for too long\n    //\n    // This is some gibberish to try to trigger a lint for the sentences that continue for too long\n    //\n    // This is some gibberish to try to trigger a lint for the sentences that continue for too long\n    //\n    // This is some gibberish to try to trigger a lint for the sentences that continue for too long\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/clean.zig",
    "content": "//! Top-level module documentation.\n\n/// Main entry point.\npub fn main() void {\n    // Regular comment.\n    const x: i32 = 42;\n    _ = x;\n}\n\n/// A simple struct.\npub const MyStruct = struct {\n    /// A field.\n    value: i32,\n};\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/common.mill",
    "content": "import mill._, scalalib._\n\nobject hello extends ScalaModule {\n  def scalaVersion = \"2.13.8\"\n\n  // Define third-party dependencies\n  def ivyDeps = Agg(\n    ivy\"com.lihaoyi::scalatags:0.9.4\",  // for HTML generation\n    ivy\"com.lihaoyi::mainargs:0.6.2\"     // for CLI argument parsing\n  )\n\n  // Define an test submodule using a test framework.\n  object test extends ScalaTests {\n    def testFramework = \"utest.runner.Framework\"\n    def ivyDeps = Agg(\n      ivy\"com.lihaoyi::utest:0.7.10\"\n    )\n  }\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/complex_gradle_build.gradle",
    "content": "plugins {\n    id 'java-library'\n}\n\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n    implementation 'org.slf4j:slf4j-api:2.0.13'\n}\n\ntasks.register('printConfig') {\n    doLast {\n        // This commment appears in a Gradle task body with interpolation-like syntax.\n        def mode = project.findProperty('mode') ?: 'dev'\n        println \"mode=${mode}\"\n    }\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/complex_groovy_block_comments.groovy",
    "content": "/*\n * This module-level commment sits above imports and class declarations.\n * It intentionally includes punctuation, symbols, and numbers: [x-12], 42, and release tags.\n */\npackage demo.comments\n\nimport groovy.transform.CompileStatic\n\n@CompileStatic\nclass CommentHeavyService {\n    /**\n     * Parses payloads and normalizes options.\n     * The implementation is intentionally straightforward.\n     */\n    Map<String, Object> parse(Map<String, Object> payload) {\n        // This inline comment should be parsed normally.\n        Map<String, Object> normalized = [:]\n        normalized.putAll(payload)\n        return normalized\n    }\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/complex_groovy_strings_regex.groovy",
    "content": "class ParserLikeExample {\n    static void main(String[] args) {\n        String url = \"https://example.com/path?foo=bar//baz\"\n        String slashy = /https?:\\/\\/[a-z0-9\\.-]+\\/.*/\n\n        // This commment should be linted, but string and regex contents should not.\n        if (url ==~ slashy) {\n            println \"matched\"\n        }\n    }\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/dirty.lua",
    "content": "---@meta\n\n---@alias MyCustomType integer\n\n---Calculate a value using [my custom type](lua://MyCustomType)\n---\n--- This calcumalates stuff\n---@param x MyCustomType\nfunction calculate(x) end\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/dirty.zig",
    "content": "//! This module demonstrates various comment types.\n\n/// This doc comment has a mispelling: teh quick brown fox.\npub fn main() void {\n    // This regular comment has a speling error here\n    const x: i32 = 42;\n    _ = x;\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/empty.js",
    "content": "// This is an empty file, apart from this comment.\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/eof.rs",
    "content": "fn main() {}\n// This is a test to ensure Harper doesn't crash on comments at the end of files.\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/ignore_comments.c",
    "content": "// This comment is spellcheckd\nint main() {\n  // spellchecker:ignore Thear be code in here\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/ignore_comments.ps1",
    "content": "# spellcheck:ignore splling error\n# Ths applies to this entire comment block.\n\n$foo = 1\n\n# spellchecker: ignore ths varible isnt done yt\n$bar = 2\n\n# Ths comment block is checked.\nfunction Invoke-Check {\n    Write-Output \"Testing\"\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/ignore_comments.rs",
    "content": "/// spellcheck:ignore splling error\n/// This applies to the entire comment block\n#[derive(Debug)]\n/// Ths comment block is checked\npub struct Testing {\n    // spellchecker: ignore ths struct isnt done yt\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/ignore_comments.sol",
    "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.20;\n\n/// spellcheck:ignore splling error\n/// Ths applies to the entire comment block\ncontract Testing {\n    // spellchecker: ignore ths contrat isnt done yt\n    uint256 internal foo;\n\n    /// Ths comment block is checked\n    function test() external {}\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/ignore_shebang_1.sh",
    "content": "#!/bin/sh\n# This is a test to make sure that we don't lint shebang lines.\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/ignore_shebang_2.sh",
    "content": "#! /usr/bin/env sh\n# This is a test to make sure that we don't lint shebang lines.\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/ignore_shebang_3.sh",
    "content": "#!/usr/bin/python3\n# This is a test to make sure that we don't lint shebang lines.\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/ignore_shebang_4.sh",
    "content": "#/bin/sh\n# This is a test to make sure that we don't ignore invalid shebang lines.\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/issue_1097.lua",
    "content": "---Starting with something capitalized, but without dot at the end\n---@type table<string, string>\nlocal f = {} -- ending with a dot.\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/issue_132.rs",
    "content": "/// ```\n/// println!(\"Test\");\n/// ```\n///\n/// This shoud get checked.\nfn main() {\n    println!(\"Hello, world!\");\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/issue_229.c",
    "content": "// "
  },
  {
    "path": "harper-comments/tests/language_support_sources/issue_229.cs",
    "content": "// "
  },
  {
    "path": "harper-comments/tests/language_support_sources/issue_229.js",
    "content": "// "
  },
  {
    "path": "harper-comments/tests/language_support_sources/issue_96.lua",
    "content": "-- Below, we have a situation where the line terminates and should end the sentence.\n\nlocal alphabet = {\n  [1] = \"a\",  -- This is a test\n  [2] = \"b\",  -- This is a test\n  [3] = \"c\",  -- This is a test\n  [4] = \"d\",  -- This is a test\n  [5] = \"e\",  -- This is a test\n  [6] = \"f\",  -- This is a test\n  [7] = \"g\",  -- This is a test\n  [8] = \"h\",  -- This is a test\n  [9] = \"i\",  -- This is a test\n  [10] = \"j\", -- This is a test\n  [11] = \"k\", -- This is a test\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/issue_96.rb",
    "content": "# Below, we have a situation where the line terminates and should end the sentence.\n\nalphabet = [\n \"a\",  # This is a test\n \"b\",  # This is a test\n \"c\",  # This is a test\n \"d\",  # This is a test\n \"e\",  # This is a test\n \"f\",  # This is a test\n \"g\",  # This is a test\n \"h\",  # This is a test\n \"i\",  # This is a test\n \"j\",  # This is a test\n \"k\",  # This is a test\n]\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/javadoc_clean_simple.java",
    "content": "class TestClass {\n\n  /**\n   * This is a JavaDoc without any of the fancy frills that come with it.\n   */\n  public static void main(String[] args) {\n    System.out.println(\"Hello world.\");\n  }\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/javadoc_complex.java",
    "content": "class TestClass {\n  /**\n   * This is a JavaDoc with <i>many</i> of the fancy frills that come with it.\n   *\n   * <p>\n   * Notably, the allowed use of HTML inline to <i>format</i> the text.\n   * </p>\n   *\n   * Also, the allowed use of the various metadata tags we can attach to methods\n   * and classes.\n   *\n   * @param args these are the arguents passed to the program from the command\n   *             lin.\n   */\n  public static void main(String[] args) {\n    greet(\"world\");\n  }\n\n  /**\n   * This doc has a link in it: {@link this sould b ignor} but not tis\n   *\n   * @param name this is anoher test.\n   */\n  public static void greet(String name) {\n    System.out.println(\"Hello \" + name + \".\");\n  }\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/jsdoc.ts",
    "content": "/** This is a doc comment.\n  * Since there are no keywords it _sould_ be checked. */\nfunction test(){}\n\n/** This is also a doc comment.\n  * @class this sould be unchecked. */\nclass Clazz { }\n\n/** Here is another example: {@link this sould also b unchecked}. But this _sould_ be.*/\n\n/** However, tis should be checked, while {@link tis should not} */\n\n/**\n * The following examples should be ignored by Harper.\n *\n * @param {string} n - ignor\n * @param {string} [o] - ignor\n * @param {string} [d=DefaultValue] - ignor\n * @return {string} ignor\n *\n * This should not be ignor\n */\n\nfunction foo(n, o, d) {\n  return n\n}\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/laravel_app.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Name\n    |--------------------------------------------------------------------------\n    |\n    | This value is the name of your application, which will be used when the\n    | framework needs to place the application's name in a notification or\n    | other UI elements where an application name needs to be displayed.\n    |\n    */\n\n    'name' => env('APP_NAME', 'Laravel'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Environment\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the \"environment\" your application is currently\n    | running in. This may determine how you prefer to configure various\n    | services the application utilizes. Set this in your \".env\" file.\n    |\n    */\n\n    'env' => env('APP_ENV', 'production'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Debug Mode\n    |--------------------------------------------------------------------------\n    |\n    | When your application is in debug mode, detailed error messages with\n    | stacktraces will be shown on every error that occurs within your\n    | application. If disabled, a simple generic error page is shown.\n    |\n    */\n\n    'debug' => (bool) env('APP_DEBUG', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application URL\n    |--------------------------------------------------------------------------\n    |\n    | This URL is used by the console to properly generate URLs when using\n    | the Artisan command line tool. You should set this to the root of\n    | the application so that it's available within Artisan commands.\n    |\n    */\n\n    'url' => env('APP_URL', 'http://localhost'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Timezone\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default timezone for your application, which\n    | will be used by the PHP date and date-time functions. The timezone\n    | is set to \"UTC\" by default as it is suitable for most use cases.\n    |\n    */\n\n    'timezone' => env('APP_TIMEZONE', 'UTC'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Locale Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The application locale determines the default locale that will be used\n    | by Laravel's translation / localization methods. This option can be\n    | set to any locale for which you plan to have translation strings.\n    |\n    */\n\n    'locale' => env('APP_LOCALE', 'en'),\n\n    'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),\n\n    'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Encryption Key\n    |--------------------------------------------------------------------------\n    |\n    | This key is utilized by Laravel's encryption services and should be set\n    | to a random, 32 character string to ensure that all encrypted values\n    | are secure. You should do this prior to deploying the application.\n    |\n    */\n\n    'cipher' => 'AES-256-CBC',\n\n    'key' => env('APP_KEY'),\n\n    'previous_keys' => [\n        ...array_filter(\n            explode(',', env('APP_PREVIOUS_KEYS', ''))\n        ),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Maintenance Mode Driver\n    |--------------------------------------------------------------------------\n    |\n    | These configuration options determine the driver used to determine and\n    | manage Laravel's \"maintenance mode\" status. The \"cache\" driver will\n    | allow maintenance mode to be controlled across multiple machines.\n    |\n    | Supported drivers: \"file\", \"cache\"\n    |\n    */\n\n    'maintenance' => [\n        'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),\n        'store' => env('APP_MAINTENANCE_STORE', 'database'),\n    ],\n\n];\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/merged_lines.ts",
    "content": "// This is a test to make sure we don't split up paragraphs on newlines.\n// This should be the same sentence,\n// this should be the same sentence,\n// this should be the same sentence,\n// this should be the same sentence,\n// this should be the same sentence,\n// this should be the same sentence,\n// this should be the same sentence,\n// this should be the same sentence,\n//\n// And this should be a new sentence.\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/multiline_comments.cpp",
    "content": "/// This is an example of an problematic comment.\n/// It should produce one error.\nint test() {}\n\n/***\n * This is an example of a possible error:\n * these subsequent lines should not be considered a new sentence and should\n * produce no errors.\n */\nint arbitrary() {}\n\n/// Let's aadd a cuple spelling errors for good measure.\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/multiline_comments.sol",
    "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.20;\n\n/// This is an example of an problematic comment.\n/// It should produce one error.\ncontract Test {}\n\n/**\n * This is an example of a possible error:\n * these subsequent lines should not be considered a new sentence and should\n * produce no errors.\n */\nlibrary FooBar {}\n\n/// Let's aadd a cuple spelling errors for good measure.\n"
  },
  {
    "path": "harper-comments/tests/language_support_sources/multiline_comments.ts",
    "content": "// This is an example of an problematic comment\n// It should produce one error\nfunction test() {}\n\n/***\n * This is an example of a possible error:\n * these subsequent lines should not be considered a new sentence and should\n * produce no errors.\n */\nfunction arbitrary() {}\n\n// Let's aadd a cuple spelling errors for good measure.\n\n"
  },
  {
    "path": "harper-core/Cargo.toml",
    "content": "[package]\nname = \"harper-core\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nreadme = \"README.md\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nblanket = \"0.4.0\"\nfst = \"0.4.7\"\nhashbrown = { version = \"0.16.1\", features = [\"serde\"] }\nis-macro = \"0.3.6\"\nitertools = \"0.14.0\"\nordered-float = { version = \"5.1.0\", features = [\"serde\"] }\npaste = \"1.0.14\"\npulldown-cmark = \"0.13.1\"\nserde = { version = \"1.0.228\", features = [\"derive\"] }\nserde_json = \"1.0.149\"\nsmallvec = { version = \"1.15.1\", features = [\"serde\"] }\nthiserror = \"2.0.18\"\nunicode-blocks = \"0.1.9\"\nunicode-script = \"0.5.8\"\nunicode-width = \"0.2.2\"\nlevenshtein_automata = { version = \"0.2.1\", features = [\"fst_automaton\"] }\ncached = \"0.56.0\"\nlru = \"0.16.3\"\nfoldhash = \"0.2.0\"\nstrum_macros = \"0.28.0\"\nstrum = \"0.28.0\"\nammonia = \"4.1.2\"\nharper-brill = { path = \"../harper-brill\", version = \"1.0.0\" }\nharper-thesaurus = { path = \"../harper-thesaurus\", version = \"1.4.1\", optional = true }\nbitflags = { version = \"2.11.0\", features = [\"serde\"] }\ntrie-rs = \"0.4.2\"\nzip = { version = \"8.1.0\", default-features = false, features = [\"deflate\"] }\nregex = \"1.12.3\"\n\n[dev-dependencies]\ncriterion = { version = \"0.8.2\", default-features = false }\nrand = \"0.10.0\"\nquickcheck = \"1.1.0\"\nquickcheck_macros = \"1.2.0\"\nrayon = \"1.11.0\"\n\n[[bench]]\nname = \"parse_essay\"\nharness = false\n\n[features]\ndefault = [\"thesaurus\"]\nconcurrent = []\nthesaurus = [\"dep:harper-thesaurus\"]\n"
  },
  {
    "path": "harper-core/README.md",
    "content": "# `harper-core`\n\n`harper-core` is the fundamental engine behind [Harper](https://writewithharper.com), the private grammar checker.\n\n`harper-core` is [available on `crates.io`](https://crates.io/crates/harper-core) to enable Rust engineers to integrate high-quality grammar checking directly into their apps and workflows.\nFeel free to use `harper-core` in your projects.\nIf you run into problems with the code, open an issue or, even better, create a pull request.\nWe are also happy to chat with you on [Discord](https://discord.com/invite/JBqcAaKrzQ).\n\n[The documentation for `harper-core` is available online.](https://docs.rs/harper-core/latest/harper_core/)\n\nIf you would prefer to run Harper from inside a JavaScript runtime, [we have a package for that as well.](https://www.npmjs.com/package/harper.js)\n\n## Example\n\nHere's what a full end-to-end linting pipeline could look like using `harper-core`.\n\n```rust\nuse harper_core::linting::{LintGroup, Linter};\nuse harper_core::parsers::PlainEnglish;\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\n\nlet text = \"This is an test.\";\nlet parser = PlainEnglish;\n\nlet document = Document::new_curated(text, &parser);\n\nlet dict = FstDictionary::curated();\nlet mut linter = LintGroup::new_curated(dict, Dialect::American);\n\nlet lints = linter.lint(&document);\n\nfor lint in lints {\n    println!(\"{:?}\", lint);\n}\n```\n\n## Features\n\n`concurrent`: Whether to use thread-safe primitives (`Arc` vs `Rc`). Disabled by default.\nIt is not recommended unless you need thread safety (i.e. you want to use something like `tokio`).\n\n## Other Relevant Packages\n\n- [`harper-ls`](https://crates.io/crates/harper-ls)\n- [`harper-tree-sitter`](https://crates.io/crates/harper-tree-sitter)\n"
  },
  {
    "path": "harper-core/annotations.json",
    "content": "{\n\t\"affixes\": {\n\t\t\"K\": {\n\t\t\t\"#\": \"'pro-' prefix\",\n\t\t\t\"kind\": \"prefix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"pro\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {},\n\t\t\t\"rename_ok\": true\n\t\t},\n\t\t\"L\": {\n\t\t\t\"#\": \"'-ment' suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ment\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {},\n\t\t\t\"rename_ok\": true\n\t\t},\n\t\t\"E\": {\n\t\t\t\"#\": \"'dis-' prefix\",\n\t\t\t\"kind\": \"prefix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"dis\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {},\n\t\t\t\"rename_ok\": true\n\t\t},\n\t\t\"Y\": {\n\t\t\t\"#\": \"'-ly' suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ly\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [\n\t\t\t\t{\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"adverb\": {\n\t\t\t\t\t\t\t\"is_manner\": true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"base_metadata\": {\n\t\t\t\t\"adjective\": {}\n\t\t\t}\n\t\t},\n\t\t\"U\": {\n\t\t\t\"#\": \"'un-' prefix\",\n\t\t\t\"kind\": \"prefix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"un\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"H\": {\n\t\t\t\"#\": \"'-ieth' suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": false,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"y\",\n\t\t\t\t\t\"add\": \"ieth\",\n\t\t\t\t\t\"condition\": \"y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"th\",\n\t\t\t\t\t\"condition\": \"[^y]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"^\": {\n\t\t\t\"#\": \"'-(i)est' superlative suffix\",\n\t\t\t\"//\": \"mnemonic: the topmost is the best. see also 'u' which marks a superlative form\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": false,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"st\",\n\t\t\t\t\t\"condition\": \"e\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"y\",\n\t\t\t\t\t\"add\": \"iest\",\n\t\t\t\t\t\"condition\": \"[^aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"est\",\n\t\t\t\t\t\"condition\": \"[aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"est\",\n\t\t\t\t\t\"condition\": \"[^ey]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [\n\t\t\t\t{\n\t\t\t\t\t\"if_base\": {\n\t\t\t\t\t\t\"adjective\": {}\n\t\t\t\t\t},\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"adjective\": {\n\t\t\t\t\t\t\t\"degree\": \"Superlative\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\">\": {\n\t\t\t\"#\": \"'-(i)er' comparative suffix; agent suffix. see also 'c' which marks a comparative form\",\n\t\t\t\"//\": \"mnemonic: greater than is better; singular of 'Z'\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"r\",\n\t\t\t\t\t\"condition\": \"e\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"y\",\n\t\t\t\t\t\"add\": \"ier\",\n\t\t\t\t\t\"condition\": \"[^aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"er\",\n\t\t\t\t\t\"condition\": \"[aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"er\",\n\t\t\t\t\t\"condition\": \"[^ey]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [\n\t\t\t\t{\n\t\t\t\t\t\"if_base\": {\n\t\t\t\t\t\t\"adjective\": {}\n\t\t\t\t\t},\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"adjective\": {\n\t\t\t\t\t\t\t\"degree\": \"Comparative\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"if_base\": {\n\t\t\t\t\t\t\"verb\": {}\n\t\t\t\t\t},\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"noun\": {\n\t\t\t\t\t\t\t\"//\": \"TODO: agent noun: run -> runner\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"e\": {\n\t\t\t\"#\": \"'de-' prefix\",\n\t\t\t\"kind\": \"prefix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"de\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"v\": {\n\t\t\t\"#\": \"'-ive' suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": false,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"e\",\n\t\t\t\t\t\"add\": \"ive\",\n\t\t\t\t\t\"condition\": \"e\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ive\",\n\t\t\t\t\t\"condition\": \"[^e]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"n\": {\n\t\t\t\"#\": \"nominalization suffixes: -ion, -ication, -en\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"e\",\n\t\t\t\t\t\"add\": \"ion\",\n\t\t\t\t\t\"condition\": \"e\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"y\",\n\t\t\t\t\t\"add\": \"ication\",\n\t\t\t\t\t\"condition\": \"y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"en\",\n\t\t\t\t\t\"condition\": \"[^ey]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"r\": {\n\t\t\t\"#\": \"'re-' prefix\",\n\t\t\t\"kind\": \"prefix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"re\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"Z\": {\n\t\t\t\"#\": \"'-(i)(e)rs' suffix\",\n\t\t\t\"//\": \"plural of '>' agent noun suffix '-(i)(e)r'\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"rs\",\n\t\t\t\t\t\"condition\": \"e\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"y\",\n\t\t\t\t\t\"add\": \"iers\",\n\t\t\t\t\t\"condition\": \"[^aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ers\",\n\t\t\t\t\t\"condition\": \"[aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ers\",\n\t\t\t\t\t\"condition\": \"[^ey]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {},\n\t\t\t\"rename_ok\": true\n\t\t},\n\t\t\"p\": {\n\t\t\t\"#\": \"'-(i)ness' suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"y\",\n\t\t\t\t\t\"add\": \"iness\",\n\t\t\t\t\t\"condition\": \"[^aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ness\",\n\t\t\t\t\t\"condition\": \"[aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ness\",\n\t\t\t\t\t\"condition\": \"[^y]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {},\n\t\t\t\"rename_ok\": true\n\t\t},\n\t\t\"g\": {\n\t\t\t\"#\": \"-'s possessive suffix; contraction of 'has' and 'is\",\n\t\t\t\"//\": \"mnemonic: 'genitive' is a similar concept to 'possessive'\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"'s\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [\n\t\t\t\t{\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"noun\": {\n\t\t\t\t\t\t\t\"is_possessive\": true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"base_metadata\": {\n\t\t\t\t\"noun\": {}\n\t\t\t}\n\t\t},\n\t\t\"W\": {\n\t\t\t\"#\": \"'con-' prefix\",\n\t\t\t\"kind\": \"prefix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"con\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {},\n\t\t\t\"rename_ok\": true\n\t\t},\n\t\t\"B\": {\n\t\t\t\"#\": \"'-able' suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"able\",\n\t\t\t\t\t\"condition\": \"[^aeiou]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"able\",\n\t\t\t\t\t\"condition\": \"ee\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"e\",\n\t\t\t\t\t\"add\": \"able\",\n\t\t\t\t\t\"condition\": \"[^aeiou]e\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [\n\t\t\t\t{\n\t\t\t\t\t\"if_base\": {\n\t\t\t\t\t\t\"verb\": {}\n\t\t\t\t\t},\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"adjective\": {\n\t\t\t\t\t\t\t\"degree\": \"Positive\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"S\": {\n\t\t\t\"#\": \"'-(i)(e)s' plural suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"y\",\n\t\t\t\t\t\"add\": \"ies\",\n\t\t\t\t\t\"condition\": \"[^aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"s\",\n\t\t\t\t\t\"condition\": \"[aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"es\",\n\t\t\t\t\t\"condition\": \"[sxzh]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"s\",\n\t\t\t\t\t\"condition\": \"[^sxzhy]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [\n\t\t\t\t{\n\t\t\t\t\t\"if_base\": {\n\t\t\t\t\t\t\"noun\": {}\n\t\t\t\t\t},\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"noun\": {\n\t\t\t\t\t\t\t\"is_plural\": true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"if_base\": {\n\t\t\t\t\t\t\"verb\": {}\n\t\t\t\t\t},\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"verb\": {\n\t\t\t\t\t\t\t\"verb_form\": \"THIRD_PERSON_SINGULAR\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"d\": {\n\t\t\t\"#\": \"'-(e)d' suffix; verb past\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"d\",\n\t\t\t\t\t\"condition\": \"e\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"y\",\n\t\t\t\t\t\"add\": \"ied\",\n\t\t\t\t\t\"condition\": \"[^aeiou]y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ed\",\n\t\t\t\t\t\"condition\": \"[^ey]\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ed\",\n\t\t\t\t\t\"condition\": \"[aeiou]y\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [\n\t\t\t\t{\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"adjective\": {\n\t\t\t\t\t\t\t\"degree\": \"Positive\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"if_base\": {\n\t\t\t\t\t\t\"verb\": {}\n\t\t\t\t\t},\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"verb\": {\n\t\t\t\t\t\t\t\"verb_form\": \"PAST\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"G\": {\n\t\t\t\"#\": \"'-ing' suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"e\",\n\t\t\t\t\t\"add\": \"ing\",\n\t\t\t\t\t\"condition\": \"e\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ing\",\n\t\t\t\t\t\"condition\": \"[^e]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [\n\t\t\t\t{\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"verb\": {\n\t\t\t\t\t\t\t\"verb_form\": \"PROGRESSIVE\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"noun\": {\n\t\t\t\t\t\t\t\"is_mass\": true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"adjective\": {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"Q\": {\n\t\t\t\"#\": \"'-ally' suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ally\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [\n\t\t\t\t{\n\t\t\t\t\t\"metadata\": {\n\t\t\t\t\t\t\"adverb\": {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"base_metadata\": {},\n\t\t\t\"rename_ok\": true\n\t\t},\n\t\t\"f\": {\n\t\t\t\"#\": \"'-ful' suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ful\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"i\": {\n\t\t\t\"#\": \"'in-' prefix\",\n\t\t\t\"kind\": \"prefix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"in\",\n\t\t\t\t\t\"condition\": \".\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {}\n\t\t},\n\t\t\"X\": {\n\t\t\t\"#\": \"'-ions', '-ications', '-ens' suffixes\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"e\",\n\t\t\t\t\t\"add\": \"ions\",\n\t\t\t\t\t\"condition\": \"e\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"y\",\n\t\t\t\t\t\"add\": \"ications\",\n\t\t\t\t\t\"condition\": \"y\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ens\",\n\t\t\t\t\t\"condition\": \"[^ey]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {},\n\t\t\t\"rename_ok\": true\n\t\t},\n\t\t\"z\": {\n\t\t\t\"#\": \"'-ings' suffix\",\n\t\t\t\"kind\": \"suffix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"e\",\n\t\t\t\t\t\"add\": \"ings\",\n\t\t\t\t\t\"condition\": \"e\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"remove\": \"\",\n\t\t\t\t\t\"add\": \"ings\",\n\t\t\t\t\t\"condition\": \"[^e]\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"target\": [],\n\t\t\t\"base_metadata\": {},\n\t\t\t\"rename_ok\": true\n\t\t}\n\t},\n\t\"properties\": {\n\t\t\"N\": {\n\t\t\t\"#\": \"noun property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"noun\": {}\n\t\t\t}\n\t\t},\n\t\t\"O\": {\n\t\t\t\"#\": \"proper noun property\",\n\t\t\t\"propagate\": true,\n\t\t\t\"metadata\": {\n\t\t\t\t\"noun\": {\n\t\t\t\t\t\"is_proper\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"l\": {\n\t\t\t\"#\": \"linking verb property\",\n\t\t\t\"//\": \"see also A: auxiliary verb property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"verb\": {\n\t\t\t\t\t\"is_linking\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"V\": {\n\t\t\t\"#\": \"verb property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"verb\": {}\n\t\t\t}\n\t\t},\n\t\t\"j\": {\n\t\t\t\"#\": \"verb past property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"verb\": {\n\t\t\t\t\t\"verb_form\": \"PAST\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"J\": {\n\t\t\t\"#\": \"adjective property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"adjective\": {}\n\t\t\t}\n\t\t},\n\t\t\"x\": {\n\t\t\t\"#\": \"swear word property\",\n\t\t\t\"//\": \"'xxx' used to be a placeholder for swear words\",\n\t\t\t\"propagate\": true,\n\t\t\t\"metadata\": {\n\t\t\t\t\"swear\": true\n\t\t\t}\n\t\t},\n\t\t\"C\": {\n\t\t\t\"#\": \"conjunction property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"conjunction\": {}\n\t\t\t}\n\t\t},\n\t\t\"I\": {\n\t\t\t\"#\": \"pronoun property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {}\n\t\t\t}\n\t\t},\n\t\t\"0\": {\n\t\t\t\"#\": \"singular noun property\",\n\t\t\t\"//\": \"mnemonic: the closest digit to single '1' that's not used for grammatical person\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"noun\": {\n\t\t\t\t\t\"is_singular\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"9\": {\n\t\t\t\"#\": \"plural noun property\",\n\t\t\t\"//\": \"mnemonic: the biggest, most plural digit\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"noun\": {\n\t\t\t\t\t\"is_plural\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"~\": {\n\t\t\t\"#\": \"common word property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"common\": true\n\t\t\t},\n\t\t\t\"rename_ok\": true,\n\t\t\t\"propagate\": true\n\t\t},\n\t\t\"P\": {\n\t\t\t\"#\": \"preposition property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"preposition\": true\n\t\t\t}\n\t\t},\n\t\t\"D\": {\n\t\t\t\"#\": \"determiner property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"determiner\": {}\n\t\t\t}\n\t\t},\n\t\t\"q\": {\n\t\t\t\"#\": \"quantifier property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"determiner\": {\n\t\t\t\t\t\"is_quantifier\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"R\": {\n\t\t\t\"#\": \"adverb property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"adverb\": {}\n\t\t\t}\n\t\t},\n\t\t\"s\": {\n\t\t\t\"#\": \"subject case property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {\n\t\t\t\t\t\"is_subject\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"o\": {\n\t\t\t\"#\": \"object case property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {\n\t\t\t\t\t\"is_object\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"1\": {\n\t\t\t\"#\": \"first-person property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {\n\t\t\t\t\t\"person\": \"First\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"2\": {\n\t\t\t\"#\": \"second-person property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {\n\t\t\t\t\t\"person\": \"Second\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"3\": {\n\t\t\t\"#\": \"third-person property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {\n\t\t\t\t\t\"person\": \"Third\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"c\": {\n\t\t\t\"#\": \"comparative property\",\n\t\t\t\"//\": \"see also '>' which derives a comparative form\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"adjective\": {\n\t\t\t\t\t\"degree\": \"Comparative\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"u\": {\n\t\t\t\"#\": \"superlative property\",\n\t\t\t\"//\": \"see also '^' which derives a superlative form\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"adjective\": {\n\t\t\t\t\t\"degree\": \"Superlative\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"*\": {\n\t\t\t\"#\": \"singular third-person subject pronoun property\",\n\t\t\t\"//\": \"so we can do verb agreement\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {\n\t\t\t\t\t\"is_singular\": true,\n\t\t\t\t\t\"person\": \"Third\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\".\": {\n\t\t\t\"#\": \"singular pronoun property\",\n\t\t\t\"//\": \"mnemonic: one dot\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {\n\t\t\t\t\t\"is_singular\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\":\": {\n\t\t\t\"#\": \"plural pronoun property\",\n\t\t\t\"//\": \"mnemonic: multiple dots\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {\n\t\t\t\t\t\"is_plural\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"A\": {\n\t\t\t\"#\": \"auxiliary verb property\",\n\t\t\t\"//\": \"see also l: linking verb property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"verb\": {\n\t\t\t\t\t\"is_auxiliary\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"<\": {\n\t\t\t\"#\": \"American property\",\n\t\t\t\"propagate\": true,\n\t\t\t\"metadata\": {\n\t\t\t\t\"dialects\": \"AMERICAN\"\n\t\t\t},\n\t\t\t\"rename_ok\": true\n\t\t},\n\t\t\"!\": {\n\t\t\t\"#\": \"GB property\",\n\t\t\t\"propagate\": true,\n\t\t\t\"metadata\": {\n\t\t\t\t\"dialects\": \"BRITISH\"\n\t\t\t},\n\t\t\t\"rename_ok\": true\n\t\t},\n\t\t\"@\": {\n\t\t\t\"#\": \"CA property\",\n\t\t\t\"//\": \"mnemonic: at symbol resembles an 'a' inside a 'C'\",\n\t\t\t\"propagate\": true,\n\t\t\t\"metadata\": {\n\t\t\t\t\"dialects\": \"CANADIAN\"\n\t\t\t}\n\t\t},\n\t\t\"_\": {\n\t\t\t\"#\": \"AU property\",\n\t\t\t\"//\": \"mnemonic: down under\",\n\t\t\t\"propagate\": true,\n\t\t\t\"metadata\": {\n\t\t\t\t\"dialects\": \"AUSTRALIAN\"\n\t\t\t}\n\t\t},\n\t\t\"₹\": {\n\t\t\t\"#\": \"IN property\",\n\t\t\t\"//\": \"mnemonic: rupee symbol\",\n\t\t\t\"propagate\": true,\n\t\t\t\"metadata\": {\n\t\t\t\t\"dialects\": \"INDIAN\"\n\t\t\t}\n\t\t},\n\t\t\"F\": {\n\t\t\t\"#\": \"reflexive property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {\n\t\t\t\t\t\"is_reflexive\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"M\": {\n\t\t\t\"#\": \"demonstrative determiner property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"determiner\": {\n\t\t\t\t\t\"is_demonstrative\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"5\": {\n\t\t\t\"#\": \"possessive determiner property\",\n\t\t\t\"//\": \"mnemonic: 5 looks like an 's'\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"determiner\": {\n\t\t\t\t\t\"is_possessive\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"a\": {\n\t\t\t\"#\": \"personal pronoun property\",\n\t\t\t\"//\": \"'personal' means 'grammatical person', not 'human'\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"pronoun\": {\n\t\t\t\t\t\"is_personal\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"m\": {\n\t\t\t\"#\": \"mass noun (only) property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"noun\": {\n\t\t\t\t\t\"is_mass\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"w\": {\n\t\t\t\"#\": \"mass + countable noun property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"noun\": {\n\t\t\t\t\t\"is_countable\": true,\n\t\t\t\t\t\"is_mass\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"b\": {\n\t\t\t\"#\": \"verb lemma form property\",\n\t\t\t\"//\": \"mnemonic: 'b' for 'base form'\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"verb\": {\n\t\t\t\t\t\"verb_form\": \"LEMMA\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"t\": {\n\t\t\t\"#\": \"verb preterite / simple past form property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"verb\": {\n\t\t\t\t\t\"verb_form\": \"PRETERITE\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"T\": {\n\t\t\t\"#\": \"verb past participle form property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"verb\": {\n\t\t\t\t\t\"verb_form\": \"PAST_PARTICIPLE\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"6\": {\n\t\t\t\"#\": \"verb progressive form property\",\n\t\t\t\"//\": \"mnemonic: '6' looks like 'g' in 'ing'\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"verb\": {\n\t\t\t\t\t\"verb_form\": \"PROGRESSIVE\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"h\": {\n\t\t\t\"#\": \"verb third person singular present form property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"verb\": {\n\t\t\t\t\t\"verb_form\": \"THIRD_PERSON_SINGULAR\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"y\": {\n\t\t\t\"#\": \"adverb of manner property\",\n\t\t\t\"//\": \"mnemonic: 'y' looks like 'ly'\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"adverb\": {\n\t\t\t\t\t\"is_manner\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"8\": {\n\t\t\t\"#\": \"adverb of frequency property\",\n\t\t\t\"//\": \"mnemonic: '8' looks like '♾️'\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"adverb\": {\n\t\t\t\t\t\"is_frequency\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"%\": {\n\t\t\t\"#\": \"adverb of degree property\",\n\t\t\t\"//\": \"mnemonic: '%' reminds of '°'\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"adverb\": {\n\t\t\t\t\t\"is_degree\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"♂\": {\n\t\t\t\"#\": \"masculine property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"//\": \"not yet implemented\"\n\t\t\t}\n\t\t},\n\t\t\"♀\": {\n\t\t\t\"#\": \"feminine property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"//\": \"not yet implemented\"\n\t\t\t}\n\t\t},\n\t\t\"ª\": {\n\t\t\t\"#\": \"animate property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"//\": \"not yet implemented\"\n\t\t\t}\n\t\t},\n\t\t\"(\": {\n\t\t\t\"#\": \"prefix property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"affix\": {\n\t\t\t\t\t\"is_prefix\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"/\": {\n\t\t\t\"#\": \"phrasal verb property\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"verb\": {\n\t\t\t\t\t\"is_phrasal\": true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"☁\": {\n\t\t\t\"#\": \"abstract noun property\",\n\t\t\t\"//\": \"mnemonic: cloud = intangible\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"noun\": {\n\t\t\t\t\t\"is_abstract\": true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "harper-core/benches/essay.md",
    "content": "The question of why we do anything at all is one of those profound, irritatingly unanswerable riddles that philosophers and late-night overthinkers have wrestled with for centuries. If we take a purely biological perspective, we do things to survive, to propagate the species, to eat, drink, and stave off the cold. But that answer is profoundly unsatisfying because it ignores the sheer peculiarity of human behavior. Why do we build cathedrals, write novels, or argue endlessly on the internet about whether a hot dog is a sandwich? What compels someone to paint a canvas or compose a symphony when neither is necessary for survival? \n\nThe siplest answer is that we are creatures of pattern and meaning, constantly searching for order in chaos. Take language, for instance—our ceaseless need to name, categorize, and label everything around us, as if pinning a word to an object somehow grants us mastery over it. This extends even to the grammar of our thoughts. The way we construct sentences, form arguments, and recognize the structure of a well-crafted joke reveals something fundamental about our cognition. A joke, after all, is just a bait-and-switch for the brain, an elegant dance of expectations and subversions. Similarly, the way we tell stories, build relationships, and pass on knowledge relies on our ability to perceive and manipulate patterns, making communication a fundamental pillar of human experience.\n\nBut where des that leave us in the grander scheme of things? Humans have an insatiable need to create, even in the face of an indifferent universe. The pyramids were built by civilizations that no longer exist, their original intentions obscured by the shifting sands of history. And yet, there they stand, testaments to some long-forgotten ambition. We are driven to leave something behind, whether it be a physical monument, a digital footprint, or simply a story whispered from one generation to the next. Even now, we etch our thoughts into the collective consciousness of humanity through books, blogs, tweets, and videos, trying to make some mark that will outlive us, even if just for a moment.\n\nSpeaking of stories, fiction is perhaps the most peculiar human invention of all. Other animals communicate, solve problems, even display emotions—but they do not tell each other elaborate lies for entertainment. Fiction allows us to live infinite lives, to explore the what-ifs of existence without ever leaving our chair. And yet, fiction is paradoxically one of the best ways to understand reality. If you want to grasp the true horrors of war, a history book will tell you the facts, but a novel will make you feel them. Our brains, those ancient, pattern-seeking machines, respond more to narratives than to raw data. This is why memoirs and personal accounts carry such emotional weight, why a well-told anecdote can shape political movements, and why some of the most effective leaders in history were, above all, masterful storytellers.\n\nThis is why histry, for all its pretense of objectivity, is really just a collection of competing narratives. Every empire, every ideology, every revolution is shaped by the stories people choose to tell about them. A civilization may fall not because of military defeat but because its foundational myth loses its grip on the collective imagination. Think about the fall of Rome—not a singular event but a slow unraveling, a loss of confidence in the structures that once held everything together. Perhaps all civilizations eventually reach this point, where the grand story that justified their existence is no longer compelling enough to sustain them. Perhaps the same is true for individuals as well, where personal reinvention is not merely an option but an inevitability.\n\nBut then again, collapse is just another word for transformation. New stories take root in the ashes of the old. The medieval world gave way to the Renaissance because someone, somewhere, decided that maybe the past was worth revisiting. This is how ideas work: they lie dormant until the right moment, waiting for someone to rediscover them. You see this in science, in philosophy, in technology. The invention of the printing press wasn’t just a mechanical breakthrough—it was a revolution in the way ideas could spread, a prototype for the internet centuries before its time. The cyclical nature of innovation means that old ideas often become new again, reinterpreted through different lenses as human society evolves.\n\nAnd the internet, of couse, is its own beast entirely. A swirling, chaotic cauldron of human thought, filled with brilliance and stupidity in equal measure. We are more connected than ever before, and yet lonelier than ever, drowning in a sea of information without a clear way to separate signal from noise. What does it mean to be truly informed in an era where every piece of knowledge is instantly available but where misinformation spreads just as quickly? The ancient Greeks worried about the written word weakening our memory; what would they think of a world where no one remembers anything because Google is always a click away? What would they make of a world where artificial intelligence now plays a role in shaping narratives, in predicting trends, in subtly altering the way we perceive reality itself?\n\nPerhaps the next great hman challenge is not discovering new information but learning how to curate it—how to distinguish the meaningful from the meaningless. The ability to think critically, to recognize bias, to resist the lure of easy, comfortable falsehoods—these may become the most valuable skills of the future. But even as we wrestle with these challenges, we will still find time to argue about trivial things. Are video games art? Is pineapple on pizza a culinary abomination or a stroke of genius? These questions, absurd as they may seem, are part of what makes us human. We care about things that don’t matter because, in a way, they do matter. They give us something to latch onto, something to discuss, something to shape the narrative of our lives around. These seemingly frivolous debates become markers of cultural identity, of generational shifts, of the ever-changing nature of taste and perception.\n\nAnd so, we continue. Building, arguing, dreaming, and storytelling. Not because we have to, but because, for some reason, we can’t seem to stop. And maybe that’s the most human thing of all. Maybe the true mark of being human is not merely the ability to think, but the compulsion to share those thoughts with others, to seek meaning in the vast expanse of uncertainty, to create narratives that outlive us, if only for a fleeting moment in time.\n\nThe nature of progress is one of the most fascinating and contentious debates in human history. Is progress an inevitable force, a gradual accumulation of knowledge and refinement of ideas, or is it a chaotic series of fits and starts, a process governed as much by accident and serendipity as by deliberate effort? The answer, as with most things, is probably boh.\n\nConsider the way technological advancements unfold. The wheel, fire, writing, the printing press, the steam engine, electricity, the internet—these milestones are often presented as stepping stones on a linear path toward a more advanced civilization. And yet, history is littered with examples of knowledge lost, rediscovered, or arriving before its time. The Antikythera Mechanism, a sophisticated analog computer from ancient Greece, was forgotten for centuries before we had machines of similar complexity. The steam engine existed in rudimentary form in Hellenistic Alexandria, but it would take over a thousand years for the Industrial Revolution to harness its true potential.\n\nThis pattern of innovation, stagnation, and rediscovery suggests that human progress is not a smooth arc but a jagged line. Ideas often arrive before society is ready for them, only to be shelved until conditions align for their widespread adoption. The internet, for example, could have theoretically existed decades earlier had the right economic and political structures been in place. Similarly, artificial intelligence was theorized long before computational power made it feasible.\n\nBut what drives progress? Some argue that necessity is the mother of invention, that crises and hardships push humanity to innovate. War, for instance, has been a catalyst for numerous technological breakthroughs, from radar to nclear energy to modern computing. Others argue that curiosity and creativity, independent of immediate needs, are the true engines of discovery. The Renaissance was not born out of desperation but out of an insatiable hunger for knowledge and artistic expression.\n\nEconomic structures also play a crucial role. Capitalism, with its relentless drive for efficiency and profit, has undoubtedly accelerated technological progress. But it has also created perverse incentives—planned obsolescence, environmental degradation, and the prioritization of profit over long-term sustainability. Would a different system, one not beholden to market forces, produce a different kind of progress? Could we achieve breakthroughs in medicine, energy, or space travel faster if research were not so often dictated by financial viability?\n\nCulture, too, influences how progress unfolds. Some societies embrace innovation and risk, while others are more conservative, preferring stability over disruption. The spread of ideas often depends on networks of communication and openness to external influences. China, for example, was the world's most advanced civilization for centuries, yet political isolation slowed its technological dominance. Conversely, Europe's patchwork of competing states fostered a dynamic intellectual environment where ideas could cross borders, merge, and evolve.\n\nThere is also the question of unintended consequences. Every major technological leap comes with unforeseen effects. The printing press democratized knowledge but also spread misinformation and propaganda. The industrial revolution improved living standards but also led to mass pollution and worker exploitation. The internet has connected billions but has also given rise to surveillance, misinformation, and algorithmic manipulation. Are we progressing toward a better world, or are we merely exchanging one set of problems for another?\n\nLooking to the future, the acceleration of artificial intelligence, biotechnology, and space eploration presents us with ethical and existential dilemmas unlike any faced before. Will AI surpass human intelligence in a way that is beneficial or catastrophic? Will genetic modification lead to the eradication of disease or the rise of designer babies and genetic inequality? Will humanity colonize space, or will we become trapped in the gravity of our own short-term thinking?\n\nUltimately, progress is a double-edged sword. It is neither inherently good nor bad, but it is relentless. We push forward because we can, because curiosity compels us, because the alternative—stagnation—is untenable. The challenge is not merely to advance but to do so wisely, ensuring that our creations serve us rather than enslave us. In that sense, progress is not just about technology, but about wisdom—the wisdom to recognize the costs, to weigh the trade-offs, and to steer our collective trajectory toward a future that is not just more advanced, but more humane.\n\n"
  },
  {
    "path": "harper-core/benches/parse_essay.rs",
    "content": "use criterion::{Criterion, criterion_group, criterion_main};\nuse harper_core::linting::{LintGroup, Linter};\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\nuse std::hint::black_box;\n\nstatic ESSAY: &str = include_str!(\"./essay.md\");\n\nfn parse_essay(c: &mut Criterion) {\n    c.bench_function(\"parse_essay\", |b| {\n        b.iter(|| Document::new_markdown_default_curated(black_box(ESSAY)));\n    });\n}\n\nfn lint_essay(c: &mut Criterion) {\n    let dictionary = FstDictionary::curated();\n    let mut lint_set = LintGroup::new_curated(dictionary, Dialect::American);\n    let document = Document::new_markdown_default_curated(black_box(ESSAY));\n\n    c.bench_function(\"lint_essay\", |b| {\n        b.iter(|| lint_set.lint(&document));\n    });\n}\n\nfn lint_essay_uncached(c: &mut Criterion) {\n    c.bench_function(\"lint_essay_uncached\", |b| {\n        b.iter(|| {\n            let dictionary = FstDictionary::curated();\n            let mut lint_set = LintGroup::new_curated(dictionary.clone(), Dialect::American);\n            let document = Document::new_markdown_default(black_box(ESSAY), &dictionary);\n            lint_set.lint(&document)\n        })\n    });\n}\n\npub fn criterion_benchmark(c: &mut Criterion) {\n    parse_essay(c);\n    lint_essay(c);\n    lint_essay_uncached(c);\n}\n\ncriterion_group!(benches, criterion_benchmark);\ncriterion_main!(benches);\n"
  },
  {
    "path": "harper-core/build.rs",
    "content": "use std::{env, fs, path::PathBuf};\n\nfn main() {\n    let manifest_dir = PathBuf::from(env::var(\"CARGO_MANIFEST_DIR\").unwrap());\n    let weir_rule_dir = manifest_dir.join(\"./src/linting/weir_rules\");\n    let out_dir = PathBuf::from(env::var(\"OUT_DIR\").unwrap());\n    let dest = out_dir.join(\"weir_rules_generated_list.rs\");\n\n    let mut files: Vec<PathBuf> = fs::read_dir(&weir_rule_dir)\n        .unwrap()\n        .filter_map(Result::ok)\n        .filter(|e| e.file_type().unwrap().is_file())\n        .map(|e| e.path().to_path_buf())\n        .collect();\n\n    files.sort();\n\n    let mut code = String::new();\n\n    code.push_str(\"generate_boilerplate!{[\");\n\n    for file in files {\n        if file\n            .file_name()\n            .unwrap()\n            .to_string_lossy()\n            .ends_with(\".weir\")\n        {\n            code.push_str(&format!(\n                \"{},\\n\",\n                file.file_stem().unwrap().to_str().unwrap()\n            ));\n        }\n    }\n\n    code.push_str(\"]}\");\n\n    fs::write(&dest, code).unwrap();\n\n    println!(\"cargo:rerun-if-changed={}\", weir_rule_dir.display());\n    println!(\"cargo:rerun-if-changed=build.rs\");\n    println!(\"cargo:rustc-env=WEIR_RULE_DIR={}\", weir_rule_dir.display());\n    println!(\"cargo:rustc-env=WEIR_RULE_LIST={}\", dest.display());\n}\n"
  },
  {
    "path": "harper-core/clippy.toml",
    "content": "disallowed-types = [\"std::collections::HashMap\", \"std::collections::HashSet\"]\n"
  },
  {
    "path": "harper-core/dictionary.dict",
    "content": "54500\n\n# Start of original dictionary import\n# combined with dialect spelling dictionary import.\n# This section is sorted alphabetically\n# and contains general-purpose English words.\n# This section includes words that are spelled differently\n# in US English vs UK, Canadian, and Australian English etc.\n\nAA/NOgJV\nAAA/NO\nAB/ONgJ\nABA/ON\nABC/NOSgJ\nABI/NgS             # application binary interface, cf. API\nABM/ONSg\nABS/NO\nAC/NOgJ\nACL/NgS             # anterior cruciate ligament\nACLU/Og\nACT/ON\nACTH/Ng\nAD/NOgJ\nADC/N\nADD/N\nADHD/N              # attention deficit hyperactivity disorder\nADM/NO\nADP/Ng\nAES/N               # advanced encryption standard\nAF/NJ\nAFAIK/              # as far as I know\nAFB/N\nAFC/ONg\nAFDC/O\nAFN/ON\nAFT/O\nAI/NOwSg            # artificial intelligence\nAIDS/NgJ            # disease\nAK/ON               # US state (Alaska)\nAKP/Og              # political party\nAL/NO               # US state (Alabama)\nAM/ONgJ\nAMA/ON\nAMD/NOg\nAMG/NOSg            # car brand\nAND gate/NgS\nANSI/OS             # text encoding\nANZUS/Og            # alliance\nAOL/Og              # old internet company\nAP/NOgJ\nAPB/N               # all-points bulletin\nAPC/NOJ\nAPI/NSg             # application programming interface, cf. ABI\nAPO/N\nAPR/N\nAR/JNO              # US state (Arkansas)\nARC/NOJ\nASAP/               # as soon as possible\nASCII/OgS\nASIO/Og             # agency\nASL/Og              # American Sign Language\nASML/Og             # company\nASPCA/O\nAST/NgS             # abstract syntax tree\nATM/NgS             # automated teller machine\nATP/ONg\nATV/ON              # all-terrain vehicle\nATX/Ng              # old motherboard std\nAV/JNO\nAVI/O               # media format\nAWACS/Ng\nAWOL/JNg            # absent without leave\nAWS/ONg\nAZ/Og               # US state (Arizona)\nAZT/Ng              # drug\nAachen/Og\nAaliyah/Og\nAaron/ONg\nAbarth/OgS\nAbbas/Og\nAbbasid/NgJ\nAbbott/Og\nAbby/ONg\nAbdul/Og\nAbe/ONg\nAbel/Og\nAbelard/Og\nAbelson/Og\nAberdeen/ONg\nAbernathy/Og\nAbidjan/Og\nAbigail/Og\nAbilene/OgJ\nAbner/Og\nAborigine/NgS\nAbraham/ONg\nAbram/ONSgJ\nAbrams/Og\nAbsalom/Og\nAbuja/Og\nAbyssinia/OgJ\nAbyssinian/JNOg\nAc/                 # Actinium\nAcadia/Og\nAcapulco/Og\nAccenture/g\nAccra/Og\nAcevedo/Og\nAchaean/NgJ\nAchebe/Og\nAchernar/Og\nAcheson/Og\nAchilles/Og\nAconcagua/Og\nAcosta/Og\nAcropolis/O\nAcrux/Og\nActaeon/ONgV\nActon/Og\nActs/ONg\nAcuff/Og\nAcura/NOSg\nAda/OgS\nAdam/OgS\nAdams/ONg\nAdan/g\nAdana/Og\nAdar/Og\nAddams/Og\nAdderley/Og\nAddie/ONg\nAddison/Og\nAdela/Og\nAdelaide/Og\nAdele/Og\nAdeline/Og\nAden/Og\nAdenauer/g\nAdhara/Og\nAdidas/ONg\nAdirondack/NOSg\nAdirondacks/NOg\nAdkins/Og\nAdler/Og\nAdm/N\nAdmiralty/O\nAdolf/Og\nAdolfo/g\nAdolph/Og\nAdonis/ONSg\nAdrenalin/Sg\nAdrian/OgJ\nAdriana/Og\nAdriatic/JOg\nAdrienne/Og\nAdvent/OgS\nAdventist/NgSJ\nAdvil/Og\nAegean/JOg\nAelfric/g\nAeneas/Og\nAeneid/Og\nAeolus/Og\nAeroflot/Og\nAeschylus/Og\nAesculapius/Og\nAesop/Og\nAfghan/NOSgJ\nAfghani/NgJ\nAfghanistan/Og\nAfr\nAfrica/Og\nAfrican/JNSg\nAfrikaans/ONgJ\nAfrikaner/NSg\nAfro/NSg\nAfrocentric/J\nAfrocentrism/Ng\nAfrofuturism/Ng\nAg/                 # Silver\nAgamemnon/Og\nAgana/O\nAgassi/Og\nAgassiz/Og\nAgatha/Og\nAggie/ONg\nAglaia/Og\nAgnes/Og\nAgnew/Og            # spiro -\nAgni/Og\nAgra/Og\nAgricola/g\nAgrippa/Og\nAgrippina/Og\nAguadilla/Og\nAguascalientes/O\nAguilar/Og\nAguinaldo/g\nAguirre/Og\nAgustin/Og\nAhab/Og\nAhmad/Og\nAhmadabad/Og\nAhmadinejad/Og\nAhmed/Og\nAhriman/Og\nAida/Og\nAiken/Og\nAileen/Og\nAimee/Og\nAinu/NOmgJ          # ethnicity, language\nAiredale/ONSg\nAires/g\nAisha/Og\nAjax/Og             # should we also include AJAX?\nAkbar/Og\nAkhmatova/g\nAkihito/g\nAkira/OgS\nAkita/ONg\nAkiva/Og\nAkkad/Og\nAkron/Og\nAl/Og               # aluminium, aluminum; given name\nAla/NOS\nAlabama/NOg\nAlabaman/JNgS\nAlabamian/JNSg\nAladdin/Og\nAlamo/Og\nAlamogordo/Og\nAlan/ONg\nAlana/Og\nAlar/Ng\nAlaric/Og\nAlaska/ONg\nAlaskan/JNgS\nAlawite/NSg\nAlba/Og\nAlbania/Og\nAlbanian/JNOSg\nAlbany/Og\nAlbee/Og\nAlberio/g\nAlbert/ONg\nAlberta/Og\nAlbertan/JNO\nAlberto/g\nAlbigensian/JNg\nAlbion/Og\nAlbireo/Og\nAlbuquerque/Og\nAlbury/Og\nAlcatraz/Og\nAlcestis/g\nAlcibiades/Og\nAlcindor/Og\nAlcmena/Og\nAlcoa/g\nAlcott/Og\nAlcuin/Og\nAlcyone/Og\nAldan/g\nAldebaran/Og\nAlden/Og\nAlderamin/Og\nAldo/Og\nAldrin/Og\nAlec/Og\nAleichem/g\nAlejandra/g\nAlejandro/Og\nAlembert/g\nAleppo/Og\nAleut/JNOSg\nAleutian/JNSg\nAlex/Og\nAlexander/ONSg\nAlexandra/Og\nAlexandria/Og\nAlexandrian/JN\nAlexei/Og\nAlexis/Og\nAlfonso/Og\nAlfonzo/Og\nAlford/Og\nAlfred/Og\nAlfreda/Og\nAlfredo/Ng\nAlgenib/Og\nAlger/Og\nAlgeria/Og\nAlgerian/NSgJ\nAlgieba/Og\nAlgiers/Og\nAlgol/Og\nAlgonquian/JNSg\nAlgonquin/NOSg\nAlhambra/ONg\nAlhena/Og\nAli/Og\nAlice/Og\nAlicia/Og\nAlighieri/g\nAline/Og\nAlioth/Og\nAlisa/Og\nAlisha/Og\nAlison/Og\nAlissa/Og\nAlistair/Og\nAlkaid/Og\nAllah/Og\nAllahabad/Og\nAllan/Og\nAlleghenies/Og\nAllegheny/OgS\nAllegra/Og\nAllen/ONg\nAllende/Og\nAllentown/Og\nAllhallows/Og\nAllie/OgS\nAllison/Og\nAllstate/g\nAllyson/Og\nAlma/Og\nAlmach/Og\nAlmaty/Og\nAlmighty/Og\nAlmohad/Jg\nAlmoravid/Ng\nAlnilam/Og\nAlnitak/Og\nAlonzo/Og\nAlpert/Og\nAlphard/Og\nAlphecca/Og\nAlpheratz/Og\nAlphonse/Og\nAlphonso/ONg\nAlpine/JOg\nAlpo/g\nAlps/Og\nAlsace/Og\nAlsatian/JNOSg\nAlsop/Og\nAlston/Og\nAlta/Og\nAltaba/g\nAltai/ONg\nAltaic/Jg\nAltair/Og\nAltamira/Og\nAlthea/Og\nAltiplano/Og\nAltman/Og\nAltoids/g\nAlton/Og\nAltoona/Og\nAludra/Og\nAlva/Og\nAlvarado/Og\nAlvarez/Og\nAlvaro/g\nAlvin/Og\nAlyce/g\nAlyson/Og\nAlyssa/Og\nAlzheimer/Ng\nAm/                 # Americium\nAmadeus/Og\nAmado/Og\nAmalia/Og\nAmanda/Og\nAmarillo/Og\nAmaru/Og\nAmaterasu/Og\nAmati/Ng\nAmazon/NOSgV\nAmazonian/JON\nAmber/Og\nAmdahl/Og           # As in Amdahl's law\nAmelia/Og\nAmen/Og\nAmenhotep/g\nAmerasian/NgJ\nAmerica/OgS\nAmerican/NOSgJ\nAmericana/Ng\nAmericanisation/NgS!_₹\nAmericanise/VGdS!_₹\nAmericanism/NwgS\nAmericanization/NgS\nAmericanize/VGdS\nAmerind/NSgJ\nAmerindian/JNgS\nAmes/Og\nAmeslan/Og\nAmgen/g\nAmharic/Og\nAmherst/ONg\nAmie/Og\nAmiga/g\nAmish/NgJ\nAmman/Og\nAmoco/g\nAmos/Og\nAmparo/g\nAmpere/g\nAmritsar/Og\nAmsterdam/Og\nAmstrad/NOSg\nAmtrak/Og\nAmundsen/Og\nAmur/Og\nAmway/g\nAmy/Og\nAna/ONg\nAnabaptist/NgJ\nAnabel/Og\nAnacin/g\nAnacreon/Og\nAnaheim/ONg\nAnalects/Og\nAnanias/Og\nAnasazi/Ng\nAnastasia/Og\nAnatole/Og\nAnatolia/Og\nAnatolian/JNOSg\nAnaxagoras/Og\nAnchorage/Og\nAndalusia/Og\nAndalusian/JNOg\nAndaman/Jg\nAndean/JNg\nAnders/Og\nAndersen/Og\nAnderson/Og\nAndes/Og\nAndorra/Og\nAndorran/NSgJ\nAndre/OgS\nAndrea/Og\nAndreas/Og\nAndrei/Og\nAndres/Og\nAndretti/ONg\nAndrew/OgS\nAndrews/Og\nAndrianampoinimerina/g\nAndroid/ONg\nAndromache/Og\nAndromeda/Og\nAndropov/g\nAndy/ONg\nAngara/Og\nAngel/NOg\nAngela/Og\nAngeles/Og\nAngelia/g\nAngelica/Og\nAngelico/g\nAngelina/ONg\nAngeline/Og\nAngelique/Og\nAngelita/g\nAngelo/Og\nAngelou/g\nAngevin/JNg\nAngie/Og\nAngkor/Og\nAngle/NgS\nAngleton/Og\nAnglia/Og\nAnglican/JNSg\nAnglicanism/NgS\nAnglicism/NgS\nAnglicization/N\nAnglicize/VGdS\nAnglo/Ng\nAnglophile/NgJ\nAnglophobe/N\nAnglosphere/Ng\nAngola/ONg\nAngolan/JNgS\nAngora/NOSg\nAngstrom/Ng\nAnguilla/Og\nAngus/Og\nAnhui/Og\nAniakchak/g\nAnibal/g\nAnita/Og\nAnkara/ONg\nAnn/ONgJ\nAnna/Og\nAnnabel/Og\nAnnabelle/Og\nAnnam/Og\nAnnapolis/Og\nAnnapurna/Og\nAnne/Og\nAnnette/Og\nAnnie/Og\nAnniston/Og\nAnnmarie/g\nAnnunciation/OgS\nAnouilh/g\nAnselm/Og\nAnselmo/Og\nAnshan/Og\nAntaeus/Og\nAntalya/Og\nAntananarivo/Og\nAntarctic/JOg\nAntarctica/Og\nAntares/Og\nAnthony/Og\nAnthropocene/Og     # geological period\nAntichrist/OgS\nAntietam/Og\nAntifa/ONg\nAntigone/Og\nAntigua/Og\nAntillean/JN\nAntilles/Og\nAntioch/Og\nAntipas/Og\nAntipodes/O\nAntofagasta/Og\nAntoine/Og\nAntoinette/Og\nAnton/Og\nAntone/Og\nAntonia/Og\nAntoninus/g\nAntonio/Og\nAntonius/Og\nAntony/Og\nAntwan/Og\nAntwerp/Og\nAnubis/Og\nAnzac/ONg\nApache/ONSg\nApalachicola/Og\nApatosaurus/O\nApennines/Og\nAphrodite/Og\nApia/Og\nApocalypse/Og\nApocrypha/Og\nApollinaire/g\nApollo/ONSg\nApollonian/JNg\nApostle/NOg\nAppalachia/Og\nAppalachian/JNOSg\nAppalachians/ONg\nAppaloosa/NSg\nApple/ONg\nAppleseed/g\nAppleton/Og\nAppomattox/Og\nApr/Og\nApril/OgS\nApuleius/Og\nAquafresh/g\nAquarian/JN\nAquarius/ONSg\nAquila/Og\nAquinas/Og\nAquino/Og\nAquitaine/Og\nAr/                 # Argon\nAra/Og\nArab/JNSg\nArabia/Og\nArabian/JNgS\nArabic/JONg\nArabist/NgSJ\nAraby/Og\nAraceli/Og\nArafat/Og\nAragon/O\nAraguaya/g\nAral/Og\nAramaic/ONgJ\nAramco/g\nArapaho/NOS09g\nArapahoes/N9\nArarat/Og\nAraucanian/NOgJ\nArawak/NOgJ\nArawakan/Jg\nArbitron/g\nArcadia/ONg\nArcadian/NgJ\nArchean/JOg\nArchibald/Og\nArchie/ONg\nArchimedes/Og\nArctic/JONg\nArcturus/Og\nArdabil/O\nArden/Og\nArduino/g\nArecibo/Og\nArequipa/Og\nAres/Og\nArgentina/Og\nArgentine/JNOSg\nArgentinean/JN\nArgentinian/NgSJ\nArgo/OgS\nArgonaut/ONSg\nArgonne/Og\nArgos/Og\nArgus/ONg\nAriadne/Og\nArianism/Nmg\nAriel/Og\nAries/ONSg\nAriosto/g\nAristarchus/Og\nAristides/Og\nAristophanes/Og\nAristotelian/NgJ\nAristotle/Og\nArius/Og\nAriz/O\nArizona/Og\nArizonan/JNSg\nArizonian/JNgS\nArjuna/Og\nArk/Og\nArkansan/JNgS\nArkansas/Og\nArkhangelsk/Og\nArkwright/Og\nArlene/Og\nArline/Og\nArlington/Og\nArmageddon/OgS\nArmagnac/ONg\nArmand/Og\nArmando/Og\nArmani/ONg\nArmenia/Og\nArmenian/JNOSg\nArminius/Og\nArmonk/g\nArmour/Og\nArmstrong/ONg\nArneb/Og\nArnhem/Og\nArno/Og\nArnold/Og\nArnulfo/g\nAron/Og\nArrhenius/Og\nArron/Og\nArt/Og\nArtaxerxes/Og\nArtemis/Og\nArthur/ONg\nArthurian/Jg\nArtie/Og\nArturo/g\nAruba/Og\nAryan/NOSgJ\nAs/                 # Arsenic\nAsahi/Og\nAsama/g\nAscella/Og\nAscension/Og\nAsgard/Og\nAshanti/NOg\nAshcroft/Og\nAshe/Og\nAsheville/Og\nAshgabat/O\nAshikaga/Og\nAshkenazim/N9g\nAshkhabad/Og\nAshlee/Og\nAshley/Og\nAshmolean/JOg\nAshurbanipal/g\nAsia/Og\nAsiago/O\nAsian/NgSJ\nAsiatic/JNSg\nAsimov/Og\nAsmara/Og\nAsoka/Og\nAspell/g\nAspen/Og\nAsperger/ONg\nAspidiske/Og\nAsquith/Og\nAssad/Og\nAssam/ONg\nAssamese/JONg\nAssembly/O\nAssisi/Og\nAssyria/Og\nAssyrian/NOSgJ\nAstaire/Og\nAstana/Og\nAstarte/Og\nAston/ONg\nAstor/Og\nAstoria/Og\nAstrakhan/ONg\nAstroTurf/Ng\nAsturias/Og\nAsunción/Og\nAsuncion/Og\nAswan/Og\nAtacama/Og\nAtahualpa/g\nAtalanta/Og\nAtari/Ng\nAtascadero/Og\nAtaturk/g\nAthabasca/Og\nAthabaskan/JONSg\nAthanasius/O\nAthena/ONg\nAthene/Og\nAthenian/NSgJ\nAthens/Og\nAtkins/Og\nAtkinson/Og\nAtlanta/Og\nAtlantes\nAtlantic/ONgJ\nAtlanticism/Ng\nAtlanticist/NSg\nAtlantis/Og\nAtlas/ONSg\nAtman/Ng\nAtonement\nAtreus/Og\nAtria/g\nAtropos/Og\nAttic/JOg\nAttica/Og\nAttila/Og\nAttlee/Og\nAttn\nAttucks/g\nAtwood/Og\nAu/                 # Gold\nAubrey/Og\nAuburn/Og\nAuckland/Og\nAuden/Og\nAudi/ONg\nAudion/g\nAudra/Og\nAudrey/Og\nAudubon/Og\nAug/Og\nAugean/Jg\nAugsburg/Og\nAugust/OgS\nAugusta/Og\nAugustan/Jg\nAugustine/ONg\nAugustinian/JNgS\nAugustus/Og\nAurangzeb/Og\nAurelia/Og\nAurelio/g\nAurelius/Og\nAureomycin/g\nAuriga/Og\nAurora/Og\nAuschwitz/Og\nAussie/NOSgJ\nAusten/Og\nAusterlitz/Og\nAustin/OgSJ\nAustralasia/Og\nAustralasian/JN\nAustralia/Og\nAustralian/NOSgJ\nAustraloid/Ng\nAustralopithecus/ONg\nAustria/Og\nAustrian/JNSg\nAustronesian/JNg\nAutumn/Og\nAv/Og\nAva/Og\nAvalon/Og\nAve/Ng\nAventine/JNOg\nAvernus/Og\nAverroes/Og\nAvery/Og\nAvesta/OgJ\nAvicenna/Og\nAvignon/Og\nAvila/Og\nAvior/g\nAvis/Og\nAvogadro/Og\nAvon/Og\nAvondale/Og\nAxis/O\nAxum/Og\nAyala/Og\nAyers/Og\nAymara/NOg\nAyrshire/ONg\nAyurveda/NwgS\nAyutthaya/Og\nAyyubid/JNg\nAzana/g\nAzania/Og\nAzazel/Og\nAzerbaijan/Og\nAzerbaijani/NOSgJ\nAzores/Og\nAzov/Og\nAztec/NOSgJ         # ancient civilization\nAztecan/JNg\nAztlan/Og\nB/                  # Boron\nB-52/NgS\nBA/NOgJ\nBASIC/OgS\nBB/NOg\nBBB/ONg\nBBC/ONg\nBBQ/NV\nBBS/N\nBBSes/N\nBC/ONgJ\nBFF/N\nBIA/O\nBIOS/N\nBITNET/O\nBJJ/Ng\nBLT/NSg\nBM/NOgV\nBMW/ONSgV\nBMX/NgS\nBO/NOV\nBP/ONgJ\nBPOE/O\nBR/NO\nBRICS/Og\nBS/ONgV\nBSA/NO\nBSD/ONSg\nBTU/N\nBTW/\nBYOB/\nBa/                 # Barium\nBaal/OgS\nBaath/Og\nBaathist/JNg\nBabbage/Og\nBabbitt/ONg\nBabel/ONSg\nBabylon/OgS\nBabylonia/Og\nBabylonian/JNOSg\nBacall/Og\nBacardi/g\nBacchanalia/Ng\nBacchic/J\nBacchus/Og\nBach/Og\nBackus/Og\nBacon/Og\nBactria/Og\nBaden/Og\nBadlands/Og\nBaedeker/ONSg\nBaez/Og\nBaffin/Og\nBaggies/NOg\nBaghdad/Og\nBaguio/Og\nBaha'i/NgJ\nBaha'ullah/Og\nBahama/JNSg\nBahamanian/JNgS\nBahamas/Og\nBahamian/JNgS\nBahia/Og\nBahrain/Og\nBaidu/OgV\nBaikal/Og\nBailey/ONg\nBaird/Og\nBakelite/Nmg\nBaker/ONg\nBakersfield/Og\nBaku/Og\nBakunin/g\nBalanchine/g\nBalaton/Og\nBalboa/Og\nBalder/Og\nBaldwin/ONSg\nBalearic/JOg\nBalfour/Og\nBali/Og\nBalinese/JNg\nBalkan/JOgS\nBalkans/Og\nBalkhash/g\nBall/Og\nBallard/Og\nBalthazar/ONg\nBaltic/JOg\nBaltics/O9\nBaltimore/ONg\nBaluchistan/Og\nBalzac/Og\nBamako/Og\nBambi/Og\nBanach/JOg\nBancroft/Og\nBandung/Og\nBangalore/ONgV\nBangkok/Og\nBangla/Og\nBangladesh/Og\nBangladeshi/NSgJ\nBangor/Og\nBangui/Og\nBanjarmasin/Og\nBanjul/Og\nBanks/Og\nBanneker/g\nBannister/Og\nBannon/OgS\nBanting/Og\nBantu/NgS\nBaotou/Og\nBaptist/NSgJ\nBaptiste/Og\nBarabbas/Og\nBarack/OgJ\nBarbadian/NSgJ\nBarbados/Og\nBarbara/Og\nBarbarella/g\nBarbarossa/Og\nBarbary/Og\nBarber/Og\nBarbie/ONg\nBarbour/Og\nBarbra/Og\nBarbuda/Og\nBarcelona/Og\nBarceloneta/g\nBarclay/OgS\nBarclays/Og\nBardeen/Og\nBarents/Og\nBarker/Og\nBarkley/Og\nBarlow/ONg\nBarnabas/Og\nBarnaby/NOg\nBarnard/Og\nBarnaul/Og\nBarnes/Og\nBarnett/Og\nBarney/Og\nBarnum/Og\nBaroda/Og\nBarquisimeto/g\nBarr/Og\nBarranquilla/Og\nBarrera/Og\nBarrett/Og\nBarrie/Og\nBarron/Og\nBarry/Og\nBarrymore/Og\nBart/NOg\nBarth/OgS\nBartholdi/g\nBartholomew/Og\nBartlett/ONg\nBartok/Og\nBarton/Og\nBaruch/Og\nBaryshnikov/g\nBasel/Og\nBasho/g\nBasie/g\nBasil/Og\nBasque/NOSgJ\nBasra/Og\nBass/Og\nBasseterre/Og\nBastille/Og\nBasutoland/Og\nBataan/Og\nBates/Og\nBathsheba/Og\nBatista/Og\nBatman/OgV\nBattle/Og\nBatu/Og\nBatumi/Og\nBaudelaire/g\nBaudouin/g\nBaudrillard/g\nBauer/Og\nBauhaus/Og\nBaum/Og\nBavaria/Og\nBavarian/JNOg\nBaxter/Og\nBayamon\nBayer/Og\nBayes/Og\nBayesian/JNg\nBayeux/Og\nBaylor/Og\nBayonne/Og\nBayreuth/Og\nBaywatch/g\nBe/                 # Beryllium\nBeach/Og\nBeadle/Og\nBeamer/NgS          # nickname for BMW\nBean/Og\nBeard/Og\nBeardmore/Og\nBeardsley/Og\nBearnaise/g\nBeasley/Og\nBeatlemania/Ng\nBeatles/ONg\nBeatrice/Og\nBeatrix/Og\nBeatriz/g\nBeatty/Og\nBeau/Og\nBeaufort/ONg\nBeaujolais/Ng\nBeaumarchais/g\nBeaumont/Og\nBeauregard/ONg\nBeauvoir/g\nBechtel/Og\nBeck/Og>\nBecker/Og\nBecket/g\nBeckett/Og\nBeckley/Og\nBeckman/O\nBecky/ONg\nBecquerel/g\nBede/Og\nBedouin/NSg\nBeebe/Og\nBeecher/Og\nBeefaroni/g\nBeelzebub/Og\nBeerbohm/g\nBeethoven/Og\nBeeton/Og\nBegin/g\nBehan/Og\nBehring/g\nBeiderbecke/g\nBeijing/Og\nBeirut/Og\nBekesy/g\nBela/Og\nBelarus/Og\nBelarusian/JN\nBelau/g\nBelem/Og\nBelfast/Og\nBelg\nBelgian/NOSgJ\nBelgium/Og\nBelgrade/Og\nBelinda/Og\nBelize/Og\nBell/ONg\nBella/Og\nBellamy/Og\nBellatrix/Og\nBelleek/ONg\nBellingham/Og\nBellini/ONg\nBellow/Og\nBelmont/Og\nBelmopan/Og\nBeloit/Og\nBelorussian/JNOSg\nBelshazzar/ONg\nBeltane/Og\nBelushi/g\nBen/ONg\nBenacerraf/g\nBenchley/g\nBend/Og>\nBender/Og\nBendictus\nBendix/g\nBenedict/Og\nBenedictine/NgSJ\nBenelux/Og\nBenet/g\nBenetton/g\nBengal/ONSg\nBengali/JNg\nBengaluru/Og\nBenghazi/Og\nBenin/Og\nBeninese/JNg\nBenita/g\nBenito/Og\nBenjamin/ONg\nBennett/Og\nBennie/Og\nBenny/ONg\nBenson/Og\nBentham/Og\nBentley/ONSg\nBenton/Og\nBenz/ONg\nBenzedrine/g\nBeowulf/Og\nBerber/NOSgJ\nBerenice/Og\nBeretta/Ng\nBerg/Og>n\nBergen/Og\nBerger/Og\nBergerac/Og\nBergman/Og\nBergson/Og\nBeria/Og\nBering/Og\nBerkeley/Og\nBerkshire/ONSg\nBerkshires/NOg\nBerle/g\nBerlin/ONSg>Z\nBerliner/Ng\nBerlioz/Og\nBerlitz/Og\nBermuda/ONSg\nBermudan/NSgJ\nBermudian/JNSg\nBern/Og\nBernadette/Og\nBernadine/Og\nBernanke/g\nBernard/Og\nBernardo/g\nBernays/Og\nBernbach/g\nBernese/JN\nBernhardt/Og\nBernice/Og\nBernie/Og\nBernini/g\nBernoulli/Og\nBernstein/Og\nBerra/Og\nBerry/Og\nBert/Og\nBerta/OgJ\nBertelsmann/g\nBertha/Og\nBertie/Og\nBertillon/g\nBertram/Og\nBertrand/Og\nBerwick/Og\nBeryl/Og\nBerzelius/g\nBess/Og\nBessel/Og\nBessemer/ONg\nBessie/Og\nBest/Og\nBetelgeuse/Og\nBeth/Og\nBethany/Og\nBethe/Og\nBethesda/ONg\nBethlehem/ONg\nBethune/Og\nBetsy/Og\nBette/Og\nBettie/Og\nBetty/ONg\nBettye/g\nBeulah/Og\nBeveridge/O\nBeverley/Og\nBeverly/Og\nBeyer/Og\nBézier curve/NgS\nBharat/Og₹\nBhopal/Og\nBhutan/Og\nBhutanese/JONg\nBhutto/Og\nBi/                 # Bismuth\nBialystok/Og\nBianca/Og\nBib\nBible/ONSg\nBic/ONg\nBiddle/Og\nBiden/OgS\nBierce/Og\nBigQuery/g\nBigfoot/ONgV\nBiggles/g\nBiko/Og\nBilbao/Og\nBilbo/Og\nBill/Ogz\nBillie/Og\nBillings/Og\nBilly/Og\nBimini/Og\nBinghamton/Og\nBiogen/g\nBioko/Og\nBird/Og\nBirdseye/g\nBirkenstock/g\nBirmingham/Og\nBiro/Og\nBiscay/Og\nBiscayne/JOg\nBishkek/Og\nBishop/ONg\nBismarck/ONg\nBismark/g\nBisquick/Ng\nBissau/Og\nBitTorrent/Og\nBizet/Ng\nBjerknes/g\nBjork/Og\nBk/                 # Berkelium\nBlackBerry/NgV\nBlackbeard/Og\nBlackburn/Og\nBlackfeet/9g\nBlackfoot/NOg\nBlackpool/Og\nBlacksburg/Og\nBlackshirt/Ng\nBlackstone/Og\nBlackwell/Og\nBlaine/Og\nBlair/Og\nBlake/Og\nBlanca/g\nBlanchard/Og\nBlanche/Og\nBlankenship/Og\nBlantyre/Og\nBlatz/Og\nBlavatsky/Og\nBlenheim/ONg\nBlevins/Og\nBligh/Og\nBloch/Og\nBlockbuster/g\nBloemfontein/Og\nBlondel/g\nBlondie/g\nBloom/Og>\nBloomberg/Og\nBloomer/Og\nBloomfield/Og\nBloomingdale/Og\nBloomington/Og\nBloomsburg/Og\nBloomsbury/Og\nBlu\nBlucher/ONg\nBluebeard/ONg\nBluetooth/OgV\nBlumenthal/Og\nBlvd\nBlythe/Og\nBoadicea/O\nBoas/ONg\nBob/ONg\nBobbi/Og\nBobbie/Og\nBobbitt/Og\nBobby/Og\nBoccaccio/Og\nBodhidharma/g\nBodhisattva/g\nBodleian/JO\nBoeing/ONg\nBoeotia/Og\nBoeotian/JNOg\nBoer/NOSg\nBoethius/Og\nBogart/Og\nBogotá/Og\nBogota/Og\nBohemia/ONg\nBohemian/NOSgJ\nBohr/Og\nBoise/Og\nBojangles/g\nBoleyn/Og\nBolivar/ONg\nBolivia/Og\nBolivian/NgSJ\nBollywood/Og\nBologna/Og\nBolshevik/NSg\nBolsheviki/N\nBolshevism/Ng\nBolshevist/Ng\nBolshoi/g\nBolton/Og\nBoltzmann/Og\nBombay/ONg\nBonaparte/Og\nBonaventure/Og\nBond/Og\nBondi/OgS\nBondo/Og\nBonhoeffer/g\nBoniface/Og\nBonita/Og\nBonn/Og>\nBonner/ONg\nBonneville/Og\nBonnie/Og\nBono/Og\nBooker/Og\nBoole/Og\nBoolean/JNgS\nBoone/Og\nBootes/g\nBooth/Og\nBordeaux/ONg\nBorden/ONg\nBordon/Og\nBoreas/Og\nBorg/ONSgV\nBorges/Og\nBorgia/Og\nBorglum/g\nBoris/Og\nBork/OgV\nBorlaug/g\nBorn/Og\nBorneo/Og\nBorobudur/Og\nBorodin/g\nBoru/g\nBosch/Og\nBose/Og\nBosnia/Og\nBosnian/JN\nBosporus/Og\nBoston/ONSg\nBostonian/NgJ\nBoswell/ONg\nBotha/O\nBotox/OV\nBotswana/Og\nBotticelli/Og\nBoulder/Og\nBoulez/g\nBourbaki/g\nBourbon/OgS\nBournemouth/Og\nBovary/g\nBowditch/Og\nBowell/Og\nBowen/Og\nBowers/Og\nBowery/OgJ\nBowie/ONg           # david -\nBowman/Og\nBoyd/Og\nBoyer/Og\nBoyle/Og\nBr/                 # Bromine\nBrad/OgY\nBradbury/ONg        # ray =\nBraddock/Og\nBradenton/Og\nBradford/ONg\nBradley/Og\nBradly/Og\nBradshaw/ONg\nBradstreet/Og\nBrady/Og\nBragg/Og\nBrahe/Og\nBrahma/ONSg\nBrahmagupta/Og\nBrahman/NOSg\nBrahmani/N\nBrahmanism/OgSw\nBrahmaputra/ONg\nBrahms/Jg\nBraille/ONSgJ\nBrain/Og\nBrampton/Og\nBran/Og\nBranch/Og\nBrandeis/Og\nBranden/Og\nBrandenburg/ONg\nBrandi/Og\nBrandie/Og\nBrando/g\nBrandon/Og\nBrandt/Og\nBrandy/Og\nBrant/Og\nBraque/g\nBrasilia/Og\nBratislava/Og\nBrattain/Og\nBray/Og\nBrazil/Og\nBrazilian/NgSJ\nBrazos/Og\nBrazzaville/Og\nBreakspear/g\nBreathalyzer\nBrecht/g\nBreckenridge/Og\nBremen/Og\nBremerton/Og\nBrenda/Og\nBrendan/Og\nBrennan/Og\nBrenner/Og\nBrent/Og\nBrenton/Og\nBresenham/Og\nBrest/Og\nBret/Og\nBreton/NOgJ\nBrett/ONg\nBretton Woods/Og\nBrewer/NOg\nBrewster/Og\nBrexit/OV\nBrezhnev/Og\nBrian/Og\nBriana/Og\nBrianna/Og\nBrice/Og\nBridalveil/g\nBridgehampton/Og\nBridgeport/Og\nBridger/Og\nBridges/Og\nBridget/ONg\nBridgetown/Og\nBridgett/Og\nBridgette/g\nBridgman/Og\nBrie/ONSwg\nBrigadoon/Ng\nBriggs/Og\nBrigham/Og\nBright/Og\nBrighton/Og\nBrigid/Og\nBrigitte/g\nBrillo/g\nBrillouin\nBrinkley/Og\nBrisbane/Og\nBristol/ONg\nBrit/NOSgJ\nBritain/ONgJ\nBritannia/Og\nBritannic/Jg\nBritannica/Og\nBriticism/NSg\nBritish/NOgJ>Z\nBritisher/NgJ₹\nBritney/ONg\nBriton/NgS\nBritt/Ogn\nBrittany/ONSg\nBritten/Og\nBrittney/Og\nBrno/Og\nBroadway/ONSgJ\nBrobdingnag/Og\nBrobdingnagian/JNg\nBrock/Og\nBrokaw/Og\nBronson/Og\nBronte/Og\nBrontosaurus/O\nBronx/ONg\nBrooke/OgS\nBrooklyn/Og\nBrooks/Og\nBros/O\nBrown/ONgJG\nBrowne/Og\nBrownian/Jg\nBrownie/NOS\nBrowning/ONg\nBrownshirt/Ng\nBrownsville/Og\nBrubeck/g\nBruce/Og\nBruckner/Og\nBruegel\nBrummel/Og\nBrunei/Og\nBruneian/NgSJ\nBrunelleschi/g\nBrunhilde/Og\nBruno/Og\nBrunswick/Og\nBrussels/ONg\nBrut/g\nBrutalism/Ng\nBrutalist/NgSJ\nBrutus/ONg\nBryan/Og\nBryant/Og\nBryce/Og\nBrynner/g\nBryon/Og\nBrzezinski/Og\nBuber/g\nBuchanan/Og\nBucharest/Og\nBuchenwald/Og\nBuchwald/Og\nBuck/Og\nBuckingham/Og\nBuckley/Og\nBuckner/Og\nBud/Og\nBudapest/Og\nBuddha/ONSg\nBuddhism/NSg\nBuddhist/JNSg\nBuddy/Og\nBudweiser/ONg\nBuffalo/Og\nBuffet/OgS\nBuffett/OgS\nBuffy/Og\nBuford/Og\nBugatti/ONg\nBugzilla/Og\nBuick/ONSg\nBujumbura/Og\nBukhara/Og\nBukharin/Og\nBulawayo/Og\nBulfinch/g\nBulganin/g\nBulgar/NOgJ\nBulgari/g\nBulgaria/Og\nBulgarian/JNSg\nBullock/Og\nBullwinkle/g\nBultmann/g\nBumppo/g\nBunche/g\nBundesbank/g\nBundestag/Og\nBunin/g\nBunker/Og\nBunsen/ONg\nBunuel/g\nBunyan/Og\nBurbank/ONg\nBurberry/Og\nBurch/Og\nBurger/Ng\nBurgess/Og\nBurgoyne/Og\nBurgundian/NOgJ\nBurgundy/ONSg\nBurke/Og\nBurks/Og\nBurl/Og\nBurlington/Og\nBurma/Og            # old name of Myanmar\nBurmese/JNOg\nBurnett/Og\nBurns/Og\nBurnside/Og\nBurr/Og\nBurris/Og\nBurroughs/Og\nBursa/Og\nBurt/Og\nBurton/Og\nBurundi/Og\nBurundian/NgSJ\nBusan/Og\nBusch/Og\nBush/Og\nBushido/g\nBushnell/Og\nButler/Og\nButterfingers/g\nBuxtehude/g\nByblos/Og\nByers/Og\nByrd/Og\nByron/Og\nByronic/Jg\nByzantine/JNgS\nByzantium/ONg\nC/NOg               # Carbon\nCA/ON               # US state (California)\nCAD/Ng              # computer-aided design; canadian dollar\nCAI/NO\nCAM/NO\nCAP/NO\nCARE\nCATV/N\nCB/NOJ              # citizen's band (radio)\nCBC/ONgJ\nCBS/ONg             # media company\nCCP/Og              # political party\nCCTV/NO             # closed-circuit television\nCCU/N\nCD/NSgV\nCD-ROM/NgS\nCDC/ON\nCDMX/Og             # Mexico City, see also DF\nCDT/N\nCEO/NgS             # chief executive officer\nCF/NOJ\nCFC/ONg\nCFO/NO              # financial officer\nCGI/NOV             # computer graphics interface; common gateway interface\nCIA/ONgJ            # agency\nCID/NO\nCIS/Og              # commonwealth of independent states\nCLI/NgS             # command line interface\nCNBC/Og\nCNC/NgV             # computer numerical control\nCNC'd/VtT           # past\nCNCing/NV6          # present, gerund\nCNN/ONSg            # media company; convolutional neural network\nCNS/Ng\nCO/ONgV             # US state (Colorado)\nCOBOL/OgS           # programming language\nCOD/ON\nCOFF/ONg            # common object file format\nCOL/ON\nCOLA/NO\nCOVID/N             # virus\nCO₂/N\nCPA/Ng\nCPI/NOg\nCPO/N\nCPR/NOg             # cardiac pulmonary resuscitation\nCPU/NgS\nCRT/NSg             # cathode ray tube\nCSS/NOg\nCST/ONg\nCSV/Ng              # data file format\nCT/ONgVJ            # US state (Connecticut)\nCUDA/ONg            # computing architecture\nCV/NOSJ             # curriculum vitae\nCVS/NOg             # version control\nCZ/N\nCa/                 # Calcium\nCabernet/g\nCabot/Og\nCabral/g\nCabrera/Og\nCabrini/g\nCadette\nCadillac/ONSgJ      # car company\nCadiz/Og\nCaedmon/Og\nCaerphilly/Og\nCaesar/ONSg\nCage/Og\nCagney/Og\nCahokia/Og\nCaiaphas/Og\nCain/OgS\nCairo/Og\nCaitlin/Og\nCajun/NgSJ\nCal/Og\nCalais/Og\nCalcutta/Og\nCalder/Og\nCalderon/Og\nCaldwell/Og\nCaleb/Og\nCaledonia/Og\nCalexico/Og\nCalgary/Og\nCalhoun/Og\nCali/Og\nCaliban/ONg\nCalif/O\nCalifornia/Og\nCalifornian/JNSg\nCaligula/Og\nCallaghan/Og\nCallahan/Og\nCallao/Og\nCallas/g\nCallie/Og\nCalliope/Og\nCallisto/Og\nCaloocan/Og\nCalvary/Og\nCalvert/Og\nCalvin/Og\nCalvinism/NwgS\nCalvinist/NgSJ\nCalvinistic/J\nCamacho/Og\nCamarillo/Og\nCamaro/NOSg\nCambodia/Og\nCambodian/JNSg\nCambrian/JNOSg\nCambridge/Og\nCamden/Og\nCamel/ONg\nCamelopardalis/Og\nCamelot/OgS\nCamembert/ONSwg\nCameron/Og\nCameronian/NgS\nCameroon/ONSg\nCameroonian/JNgS\nCamilla/Og\nCamille/Og\nCamoens/Og\nCampanella/g\nCampbell/ONg\nCampinas/Og\nCampos/g\nCamry/g\nCamus/Og\nCan/Og\nCanaan/Og\nCanaanite/ONSgJ\nCanad\nCanada/ONg\nCanadian/JNOSg\nCanadianism/Nmg\nCanaletto/g\nCanaries/Og\nCanaveral/Og\nCanberra/Og\nCancer/ONSg\nCancun/Og\nCandace/ONg\nCandice/Og\nCandide/Og\nCandy/Og\nCannes/Og\nCannon/Og\nCanon/ONg\nCanopus/ONg\nCantabrigian/JNg\nCanterbury/Og\nCanton/Og\nCantonese/JNmg\nCantor/Og\nCantrell/Og\nCantu/Og\nCanute/Og\nCapablanca/g\nCapek/Og\nCapella/Og\nCapet/g\nCapetian/JNg\nCapetown/Og\nCaph/Og\nCapistrano/Og\nCapitol/OgS\nCapitoline/OgJ\nCapone/Og\nCapote/Og\nCapra/Og\nCapri/Og\nCapricorn/ONSg\nCapt/N\nCapuchin/Ng\nCapulet/Ng\nCara/Og\nCaracalla/Og\nCaracas/Og\nCaravaggio/Og\nCarboloy/Ng\nCarbondale/Og\nCarboniferous/JOg\nCarborundum/Ng\nCardenas/Og\nCardiff/Og\nCardin/Og\nCardozo/Og\nCarey/Og\nCarib/NOSg\nCaribbean/JNOSg\nCarina/Og\nCarissa/Og\nCarl/ONg\nCarla/Og\nCarlene/Og\nCarlin/Og\nCarlo/OgS\nCarlos/Og\nCarlsbad/Og\nCarlson/Og\nCarlton/Og\nCarly/Og\nCarlyle/Og\nCarmela/g\nCarmella/g\nCarmelo/g\nCarmen/Og\nCarmichael/Og\nCarmine/Og\nCarnap/Og\nCarnation/g\nCarnegie/Og\nCarney/ONg\nCarnot/Og\nCarol/Og\nCarole/Og\nCarolina/Og\nCaroline/JNOg\nCarolingian/JNg\nCarolinian/JNOg\nCarolyn/Og\nCarpathian/JNSg\nCarpathians/Og\nCarpenter/Og\nCarr/Og\nCarranza/Og\nCarrera/OgS\nCarrie/Og>\nCarrier/Og\nCarrillo/Og\nCarroll/Og\nCarson/Og\nCarter/Og\nCartersville/Og\nCartesian/JNg\nCarthage/Og\nCarthaginian/JNgS\nCartier/Og\nCartwright/Og\nCaruso/Og\nCarver/Og\nCary/Og\nCasablanca/Og\nCasals/Og\nCasandra/g\nCasanova/NOSg\nCascades/Og\nCase/NOg\nCasey/Og\nCash/Og\nCasio/g\nCaspar/Og\nCasper/ONg\nCaspian/JNg\nCassandra/ONSg\nCassatt/g\nCassidy/Og\nCassie/Og\nCassiopeia/Og\nCassius/Og\nCastaneda/Og\nCastilian/ONJ\nCastillo/Og\nCastlereagh/g\nCastor/Og\nCastries/Og\nCastro/Og\nCatalan/NOSgJ\nCatalina/ONg\nCatalonia/Og\nCatawba/NOg\nCaterpillar/g\nCathay/Og\nCather/Og\nCatherine/Og\nCathleen/Og\nCatholic/JNgS\nCatholicism/NgS\nCathryn/Og\nCathy/Og\nCatiline/ONg\nCato/Og\nCatskill/OgSJ\nCatskills/Og\nCatt/Og\nCatullus/Og\nCaucasian/JNgS\nCaucasoid/JN\nCaucasus/Og\nCauchy/OgJ\nCavendish/ONg\nCavour/g\nCaxton/ONg\nCayenne/Og\nCayman/JOg\nCayuga/NOSg\nCayuse/N\nCb/\nCd/                 # Cadmium\nCe/                 # Cerium\nCeausescu/g\nCebu/Og\nCebuano/OgJ\nCecelia/Og\nCecil/Og\nCecile/Og\nCecilia/Og\nCecily/Og\nCedric/Og\nCeleste/Og\nCelgene/g\nCelia/Og\nCelina/Og\nCellini/Og\nCelsius/Jg\nCelt/NSgJ\nCeltic/OgSJ\nCenozoic/JOg\nCentaurus/Og\nCentigrade\nCentral/O\nCentronics/O\nCepheid/Ng\nCepheus/Og\nCerberus/Og\nCerenkov/g\nCeres/Og\nCerf/Og\nCervantes/Og\nCesar/Og\nCesarean/JNg\nCessna/Og\nCetus/Og\nCeylon/ONg          # old name of Sri Lanka\nCeylonese/JN\nCezanne/g\nCf/                 # Californium\nCh'in/Og\nChablis/ONg\nChad/ONg\nChadian/JNgS\nChadwick/Og\nChagall/NOg\nChagas disease/Nmg\nChaitanya/g\nChaitin/g\nChaldea/O\nChaldean/JNOg\nChallenger/ONg\nChalmers/O\nChamberlain/Og\nChambers/Og\nChambersburg/Og\nChampaign/Og\nChamplain/Og\nChampollion/g\nChan/ONg\nChance/Og\nChancellorsville/Og\nChandigarh/Og\nChandler/ONg\nChandon/g\nChandra/Og\nChandragupta/g\nChandrasekhar/g\nChanel/ONg\nChaney/Og\nChang/Og\nChangchun/Og\nChangsha/Og\nChantilly/ONg\nChaplin/Og\nChaplinesque/J\nChapman/Og\nChappaquiddick/Og\nChapultepec/g\nCharbray/g\nChardonnay/Ng\nCharity/Og\nCharlemagne/Og\nCharlene/Og\nCharles/Og\nCharleston/ONSg\nCharley/ONg\nCharlie/NOg\nCharlotte/ONg\nCharlottesville/Og\nCharlottetown/Og\nCharmaine/Og\nCharmin/Og\nCharolais/Ng\nCharon/ONg\nChartism/Og\nChartres/Og\nCharybdis/Og\nChase/Og\nChasity/g\nChateaubriand/g\nChattahoochee/Og\nChattanooga/Og\nChatterley/Og\nChatterton/Og\nChattogram/Og\nChaucer/Og\nChauncey/Og\nChautauqua/ONg\nChavez/Og\nChayefsky/g\nChe/g\nChechen/NOgJ\nChechnya/Og\nCheddar/ONg\nCheer/g\nCheerios/ONg\nCheetos/Ng\nCheever/Og\nChekhov/Og\nChekhovian/J\nChelsea/Og\nChelyabinsk/Og\nChen/ONg\nCheney/Og\nChengdu/Og\nChennai/Og\nCheops/Og\nCheri/Og\nCherie/Og\nChernenko/g\nChernobyl/ONg\nChernomyrdin/g\nCherokee/NOSg09     # singular and plural, but also has plural in -s\nCherry/ONg\nCheryl/Og\nChesapeake/NOg\nCheshire/Og\nChester/ONg\nChesterfield/ONg\nChesterton/Og\nChev/NOSg\nChevalier/g\nCheviot/Ng\nChevrolet/NOSg\nChevron/Og\nChevy/ONg\nChevys/9\nCheyenne/NOSg\nChi/ONg\nChianti/NgS\nChiba/Og\nChibcha/Ng\nChicago/Og\nChicagoan/JNg\nChicana/Ng\nChicano/JNg\nChickasaw/NOSg\nChiclets/g\nChico/Og\nChihuahua/ONSg\nChile/Og\nChilean/JNgS\nChimborazo/Og\nChimera/OgS\nChimu/g\nChin/Og\nChina/ONg\nChinatown/NOg\nChinese/JONmg\nChinook/ONSg\nChipewyan/NOg\nChippendale/Og\nChippewa/NOSg\nChiquita/g\nChirico/Og\nChiron/Og\nChisholm/Og\nChișinău/Og\nChisinau/Og\nChittagong/Og       # old name of Chattogram\nChivas/g\nChloe/Og\nChoctaw/ONSgJ\nChomsky/Og\nChomskyite/NgSJ\nChongqing/Og\nChopin/Og\nChopra/Og\nChou/Og\nChretien/Og\nChris/Og\nChrist/ONSg\nChrista/Og\nChristchurch/Og\nChristendom/NgS\nChristensen/Og\nChristi/g\nChristian/NOSgJ\nChristianise/V!_₹\nChristianity/OgS\nChristianize/V\nChristie/Og\nChristina/Og\nChristine/Og\nChristlike/J\nChristmas/ONSgJV\nChristmastide/NgS\nChristmastime/NgS\nChristoper/g\nChristopher/Og\nChromebook/NgS\nChronicles/O\nChrysler/ONSg\nChrysostom/Og\nChrystal/Og\nChuck/ONg\nChukchi/JNOg\nChumash/ONg\nChung/Og\nChurch/Og\nChurchill/Og\nChurchillian/J\nChurriguera/g\nChuvash/JNOg\nCi/g\nCicero/Og\nCid/g\nCimabue/g\nCincinnati/ONg\nCinderella/ONSg\nCindy/Og\nCinemaScope/Ng\nCinerama/Ng\nCipro/g\nCirce/Og\nCisco/Og\nCitibank/Og\nCitigroup/Og\nCitroen/Og\nCl/                 # Chlorine\nClaiborne/Og\nClair/Og\nClaire/Og\nClairol/g\nClancy/Og\nClapeyron/g\nClapton/Og\nClara/Og\nClare/ONg\nClarence/Og\nClarendon/Og\nClarice/Og\nClarissa/ONg\nClark/Og\nClarke/Og\nClarkson/OgS\nClarksville/Og\nClaude/Og\nClaudette/g\nClaudia/Og\nClaudine/g\nClaudio/g\nClaudius/Og\nClaus/Og\nClausewitz/Og\nClausius/g\nClay/Og\nClayton/Og\nClearasil/g\nClem/OgX\nClemenceau/Og\nClemens/Og\nClement/OgS\nClementine/JOg\nClements/Og\nClemons/Og\nClemson/OgV\nCleo/Og\nCleopatra/ONg\nCleveland/Og\nCliburn/Og\nCliff/Og\nClifford/Og\nClifton/Og\nCline/Og\nClint/Og\nClinton/OgS\nClio/Og\nClive/Og\nClojure/Og\nClorets/g\nClorox/NgV\nClosure/g\nClotho/Og\nClouseau/Og\nClovis/Og\nClyde/Og\nClydesdale/NOg\nClytemnestra/Og\nCm/                 # Curium\nCmdr/N\nCo/                 # Cobalt\nCobain/Og\nCobb/Og\nCochabamba/Og\nCochin/NOg\nCochise/g\nCochran/Og\nCockney/JNOg\nCocteau/g\nCod\nCody/Og\nCoffey/Og\nCognac/Og\nCohan/Og\nCohen/Og\nCoimbatore/Og\nCointreau/ONg\nCoke/NOSg\nCol/Og\nColbert/Og\nColby/ONg\nCole/Og\nColeen/Og\nColeman/Og\nColeridge/Og\nColette/g\nColfax/Og\nColgate/ONg\nColin/Og\nColleen/Og\nCollier/Og\nCollin/OgS\nCollins/ONg\nColo/O\nCologne/Og\nColombia/Og\nColombian/NgSJ\nColombo/Og\nColon/Og\nColoradan/NSgJ\nColorado/Og\nColoradoan/NJ\nColosseum/Og\nColt/ONg\nColtrane/Og\nColumbia/Og\nColumbine/ONg\nColumbus/ONgV\nCom\nComanche/NOSg09J    # singular and plural, but also has plural in -s\nCombs/Og\nComdr\nComintern/Og\nCommandment/N\nCommodore/OgS\nCommons/Og\nCommonwealth/O\nCommunion/OgS\nCommunism/Nmg\nCommunist/NSgJ\nComo/Og             # laku\nComoran/JN\nComoros/Og          # country\nCompaq/g\nCompton/Og          # company\nCompuServe/g\nComte/g\nConakry/Og          # capital of Guinea\nConan/Og\nConcepcion/Og\nConcetta/g\nConcord/OgS\nConcorde/Og\nCondillac/g\nCondorcet/g\nConestoga/ONg\nConfederacy/Og\nConfederate/JNgS\nConfucian/JNSg\nConfucianism/Nmg\nConfucianist/NgS\nConfucius/Og\nCong/Og\nCongo/ONg\nCongolese/NgJ\nCongregational/J\nCongregationalist/NgS\nCongress/ONSg\nCongressional/J\nCongreve/ONg\nConley/Og\nConn/>g\nConnecticut/Og\nConnellsville/Og\nConnemara/ONg\nConner/Og\nConnery/Og\nConnie/ONg\nConnolly/Og\nConnors/Og\nConrad/Og\nConrail/g\nConroe/Og\nConservative/N\nConstable/Og\nConstance/Og\nConstantine/Og\nConstantinople/Og\nConstitution/O\nConsuelo/g\nContinent/ONg\nContinental/JNg\nContreras/g\nConway/Og\nCook/Og\nCooke/Og\nCooley/Og\nCoolidge/Og\nCooper/Og\nCooperstown/Og\nCoors/Og\nCopacabana/Og\nCopeland/Og\nCopenhagen/ONg\nCopernican/JNOg\nCopernicus/Og\nCopland/Og\nCopley/Og\nCopperfield/Og\nCoppertone/g\nCoppola/Og\nCoptic/JNg\nCora/ONg\nCordelia/Og\nCordilleras/g\nCordoba/Og\nCorey/Og\nCorfu/Og\nCorg/ONg            # company\nCorina/Og\nCorine/g\nCorinne/Og\nCorinth/Og\nCorinthian/JNgS\nCorinthians/ONg\nCoriolanus/g\nCoriolis/g\nCork/O\nCorleone/g\nCormack/Og\nCorneille/g\nCornelia/Og\nCornelius/Og\nCornell/Og\nCorniche/NgS\nCorning/Og\nCornish/JNOSg\nCornwall/Og\nCornwallis/Og\nCoronado/Og\nCorot/g\nCorp/O\nCorreggio/g\nCorrine/Og\nCorsica/Og\nCorsican/JNOg\nCortes/OgS\nCortland/Og\nCorvallis/Og\nCorvette/Ng\nCorvus/Og\nCory/Og\nCosby/Og\nCosmosDB/g\nCossack/Ng\nCostco/g\nCostello/Og\nCostner/Og\nCote/Og\nCotonou/Og\nCotopaxi/g\nCotswold/JNOg\nCotton/Og\nCoulomb/Og\nCoulter/Og\nCountach/OgS\nCouperin/g\nCourbet/g\nCourtney/Og\nCousteau/g\nCoventry/OgS\nCovington/Og\nCoward/Og\nCowell/Og\nCowley/Og\nCowper/Og\nCox/Og\nCoy/Og\nCoyle/Og\nCozumel/Og\nCpl/N\nCr/                 # Chromium\nCrabbe/Og\nCraft/Og\nCraig/Og\nCranach/g\nCrane/Og\nCranmer/Og\nCrater/Og\nCrawford/Og\nCray/Og\nCrayola/Og\nCreation/g\nCreator/Og\nCrecy/Og\nCree/ONSg09d        # singular and plural, but also has plural in -s\nCreek/NOSgJ\nCreighton/Og\nCreole/NOSgJ\nCreon/Og\nCressida/Og\nCrest/Og\nCretaceous/Og\nCretan/JNOSg\nCrete/ONg\nCrichton/Og\nCrick/Og\nCrimea/Og\nCrimean/JNOg\nCriollo/ONg\nCrisco/Og\nCristina/g\nCroat/NSgJ\nCroatia/Og\nCroatian/JNOSg\nCroce/Og\nCrockett/Og\nCroesus/ONg\nCromwell/Og\nCromwellian/JNg\nCronin/Og\nCronkite/Og\nCronus/Og\nCrookes/Og\nCrosby/Og\nCross/Og\nCrow/NOSg\nCrowley/Og\nCrucifixion/OgS\nCruikshank/Og\nCruise/Og\nCrusades's\nCrusoe/Og\nCrux/Og\nCruz/Og\nCryptozoic/Og\nCrystal/Og\nCsonka/g\nCt/N\nCtesiphon/Og\nCthulhu/Og\nCu/                 # Copper\nCuba/Og\nCuban/NSgJ\nCuchulain/g\nCuisinart/g\nCulbertson/Og\nCullen/Og\nCumberland/Og\nCummings/Og\nCunard/Og\nCunningham/Og\nCupertino/Og\nCupid/Og\nCuraçao/Og\nCuracao/Og\nCurie/Og\nCuritiba/Og\nCurrier/Og\nCurry/Og>\nCurt/Og\nCurtis/Og\nCuster/Og\nCuvier/g\nCuzco/Og\nCybele/Og\nCyclades/Og\nCyclopes/Og\nCyclops/Og\nCygnus/Og\nCymbeline/Og\nCynthia/Og\nCyprian/NgJ\nCypriot/ONSgJ\nCyprus/ONg\nCyrano/g\nCyril/Og\nCyrillic/JOg\nCyrus/Og\nCzech/JNOg\nCzechia/Og\nCzechoslovak/NJ\nCzechoslovakia/Og\nCzechoslovakian/JNSg\nCzechs/N\nCzerny/g\nD/NOgJ\nDA/NOgJV\nDAR/O\nDARPA/Og\nDAT/Ng\nDBMS/Ng\nDC/ONgJV            # US District of Columbia\nDD/NOgJ\nDDS/Ng\nDDT/NS\nDE/ON               # US state (Delaware)\nDEA/ON\nDEC/NOSd\nDF/Og               # Distrito Federal, see also CDMX\nDH/NO\nDHS/O\nDI/N\nDIY/J\nDJ/NOV\nDMA/Ng              # direct memory access\nDMCA/OV\nDMD/Ng\nDMV/Ng\nDMZ/N               # demilitarized zone\nDNA/NOgV\nDOA/J               # dead on arrival\nDOB/NO\nDOD/N\nDOE/NO              # department of energy\nDOJ/Og              # department of justice\nDOS/NOg             # disk operating system\nDOT/ON\nDP/NOSgV\nDPRK/Og             # north korea\nDPT/N\nDSP/NgS             # digital signal processor\nDST/N\nDTP/N\nDUI/N\nDVD/NS\nDVR/NSgV\nDWI/NV\nDacca/Og            # old spelling of Dhaka\nDachau/Og\nDacron/NSg\nDada/Ng\nDadaism/Ng\nDaedalus/Og\nDagestan/Og\nDaguerre/g\nDagwood/Ng\nDahomey/Og\nDaimler/ONg\nDaisy/ONg\nDakar/Og\nDakota/ONSg\nDakotan/JNOg\nDalai\nDale/Og\nDaley/ONg\nDali/Og\nDalian/OgJ\nDallas/Og\nDalmatia/Og\nDalmatian/JNOSg\nDalton/ONg\nDamascus/Og\nDame/Ngn\nDamian/Og\nDamien/Og\nDamion/g\nDamocles/Og\nDamon/Og\nDan/ONg\nDana/Og\nDanae/Og\nDanbury/Og\nDane/NOSg\nDanelaw/Og\nDangerfield/Og\nDanial/Og\nDaniel/ONSg\nDanielle/Og\nDaniels/Og\nDanish/ONmgJ\nDannie/Og\nDanny/Og\nDanone/g\nDante/Og\nDanton/g\nDanube/Og\nDanubian/JNg\nDanville/Og\nDaphne/Og\nDarby/Og\nDarcy/Og\nDardanelles/Og\nDare/Og\nDaren/Og\nDarfur/Og\nDarin/Og\nDario/Og\nDarius/Og\nDarjeeling/ONg\nDarla/Og\nDarlene/Og\nDarling/Og\nDarnell/Og\nDarrel/g\nDarrell/Og\nDarren/ONg\nDarrin/Og\nDarrow/Og\nDarryl/Og\nDarth/Og\nDartmoor/ONg\nDartmouth/Og\nDarvon/g\nDarwin/Og\nDarwinian/JNg\nDarwinism/NwSg\nDarwinist/N\nDaryl/Og\nDatamation\nDatsun/OgS\nDaugherty/Og\nDaumier/g\nDavao/Og\nDave/Og\nDavenport/Og\nDavid/OgS\nDavidson/Og\nDavies/ONg\nDavis/Og\nDavos/Og\nDavy/ONSg\nDawes/Og\nDawkins/O\nDawn/Og\nDawson/Og\nDay/Og\nDayan/O\nDayton/Og\nDaytona/Og\nDeGeneres/Og\nDeKalb/Og\nDeLorean/OgS        # car brand\nDeSoto/NOSg         # car brand\nDeadhead/Ng\nDean/Og\nDeana/g\nDeandre/Og\nDeann/g\nDeanna/Og\nDeanne/g\nDeath/Og\nDebbie/Og\nDebby/Og\nDebian/g\nDebora/Og\nDeborah/Og\nDebouillet/g\nDebra/Og\nDebs/Og\nDebussy/g\nDec/Og\nDecalogue/ONg\nDecatur/Og\nDecca/Og\nDeccan/Og\nDecember/OgS\nDecker/Og\nDedekind/Og\nDee/ONg\nDeena/Og\nDeere/ONg\nDefoe/Og\nDegas/g\nDeidre/g\nDeimos/Og\nDeirdre/Og\nDeity\nDejesus/Og\nDel/ONg\nDelacroix/g\nDelacruz/Og\nDelaney/Og\nDelano/Og\nDelaware/ONSg\nDelawarean/JNSg\nDelbert/g\nDeleon/Og\nDelgado/Og\nDelhi/Og\nDelia/Og\nDelibes/g\nDelicious/g\nDelilah/ONg\nDelilahs/N\nDelius/g\nDell/Og\nDella/Og\nDelmar/Og\nDelmarva/Og\nDelmer/g\nDelmonico/Ng\nDelores/Og\nDeloris/g\nDelphi/Og\nDelphic/Jg\nDelphinus/Og\nDelta/NOg\nDeltona/Og\nDem/NG\nDemavend/g\nDemerol/Og\nDemeter/Og\nDemetrius/Og\nDeming/Og\nDemocrat/NSgJ\nDemocratic/J\nDemocritus/Og\nDemosthenes/Og\nDempsey/Og\nDena/Og\nDenali/O\nDeneb/Og\nDenebola/Og\nDeng/Og\nDenis/Og\nDenise/Og\nDenmark/Og\nDennis/Og\nDenny/Og\nDenton/Og\nDenver/Og\nDeon/Og\nDepp/Og\nDerby/ONg\nDerek/Og\nDerick/Og\nDermot/Og\nDerrick/Og\nDerrida/Og\nDescartes/Og\nDesdemona/Og\nDesiree/Og\nDesmond/Og\nDetroit/Og\nDeuteronomy/Og\nDevanagari/JOg\nDevi/Og\nDevin/Og\nDevon/ONg\nDevonian/JNOg\nDewar/ONg\nDewayne/g\nDewey/Og\nDewitt/OgV\nDexedrine/g\nDexter/ONg\nDhaka/Og\nDhaulagiri/g\nDi/OgS\nDiCaprio/Og\nDiMaggio/g\nDiablo/NgS          # car model\nDiaghilev/g\nDial/Og\nDiana/ONg\nDiane/Og\nDiann/Og\nDianna/Og\nDianne/Og\nDias\nDiaspora/OgS\nDick/OgX\nDickens/Og\nDickensian/JN\nDickerson/Og\nDickinson/Og\nDickson/Og\nDictaphone/Sg\nDiderot/g\nDido/Og\nDidrikson/g\nDiefenbaker/g\nDiego/ONg\nDiem/Og\nDietrich/Og\nDijkstra/g\nDijon/Og\nDilbert/Sg\nDillard/Og\nDillinger/Og\nDillon/Og\nDina/Og\nDinah/Og\nDino/Og\nDiocletian/OgJ\nDiogenes/Og\nDion/Og\nDionne/Og\nDionysian/JNg\nDionysus/Og\nDiophantine/Jg\nDior/g\nDipper/ONg\nDir\nDirac/Og\nDirichlet/Og\nDirk/Og\nDis/Og\nDisney/Og\nDisneyland/ONg\nDisraeli/Og\nDivine/OgJ\nDiwali/Og\nDix/Og\nDixie/Og\nDixiecrat/Ng\nDixieland/ONSg\nDixon/Og\nDjango/g\nDjibouti/Og\nDmitri/Og\nDnepropetrovsk/Og\nDniester/Og\nDobbin/Og\nDoberman/Ng\nDobro/Ng\nDoctor/N\nDoctorow/g\nDodge/Og\nDodgson/Og\nDodoma/Og\nDodson/Og\nDoe/Og\nDoha/Og\nDolby/Og\nDole/Og\nDollie/g\nDolly/ONg\nDolores/Og\nDomesday/Og\nDomingo/g\nDominguez/Og\nDominic/Og\nDominica/Og\nDominican/NgSJ\nDominick/Og\nDominion/O\nDominique/NOg\nDomitian/g\nDon/OgS\nDona/Og\nDonahue/Og\nDonald/Og\nDonaldson/Og\nDonatello/Og\nDonetsk/Og\nDonizetti/g\nDonn/Og>\nDonna/Og\nDonne/Og\nDonnell/Og\nDonner/Og\nDonnie/Og\nDonny/Og\nDonovan/ONg\nDooley/Og\nDoolittle/Og\nDoonesbury/g\nDoppler/ONg\nDora/Og\nDorcas/ONgV\nDoreen/Og\nDorian/JNOg\nDoric/JOg\nDoris/ONgJ\nDoritos/Ng\nDorothea/Og\nDorothy/Og\nDorset/Og\nDorsey/Og\nDorthy/g\nDortmund/Og\nDostoevsky/Og\nDot/Og\nDothan/Og\nDotson/Og\nDouala/Og\nDouay/Og\nDoubleday/Og\nDoug/Og\nDouglas/Og\nDouglass/Og\nDouro/Og\nDover/Og\nDow/Og\nDowns/Og\nDowny/g\nDoyle/ONg\nDr/N\nDraco/Og\nDraconian/Jg\nDracula/ONg\nDrake/Og\nDramamine/Sg\nDrambuie/Ng\nDrano/g\nDravidian/ONgJ\nDreiser/Og\nDremel/Og\nDresden/ONg\nDrew/Og\nDreyfus/Og\nDristan/g\nDropbox/g\nDrudge/g\nDrupal/g\nDryden/Og\nDschubba/Og\nDu\nDuPont/Og\nDuane/Og\nDubai/Og\nDubcek/g\nDubhe/Og\nDublin/Og\nDubliner/NgS\nDubrovnik/Og\nDubuque/Og\nDucati/OgS\nDuchamp/Og\nDudley/ONg\nDuffy/Og\nDuisburg/Og\nDuke/NOg\nDulles/Og\nDuluth/Og\nDumas/Og\nDumbledore/g\nDumbo/Og\nDunant/g\nDunbar/Og\nDuncan/Og\nDundee/O\nDunedin/Og\nDunkirk/Og\nDunlap/Og\nDunn/Og\nDunne/Og\nDuracell/NOg\nDuran/Og\nDurant/Og\nDurante/g\nDurban/Og\nDurer/g\nDurex/ONg\nDurham/ONSg\nDurkheim/g\nDuroc/Ng\nDurocher/Og\nDuse/g\nDushanbe/Og\nDusseldorf/Og\nDustbuster/g\nDustin/Og\nDusty/Og\nDutch/JONmgV\nDutchman/NOg\nDutchmen/9g\nDutchwoman/N\nDutton/OgS\nDuvalier/g\nDvina/g\nDvorak/OgJ\nDwayne/Og\nDwight/Og\nDy/                 # Dysprosium\nDyer/Og\nDylan/Og\nDynamoDB/g\nDyson/ONg\nDzerzhinsky/Og\nDzungaria/Og\nE/NOSg\nEC/NO\nECG/Ng              # electrocardiogram, cf. EKG\nECM/NgS\nECMAScript/Og       # programming language, cf. JavaScript, TypeScript\nEDM/Nmg             # electronic dance music\nEDP/NOg\nEDT/ON\nEEC/ONg\nEEG/Ng              # electroencephalogram\nEEO/N\nEEOC/O\nEFL/NO\nEFT/NO\nEKG/Ng              # cf. ECG\nELF/NOg             # file format\nEM/NJ\nEMT/N\nENE/NgJ\nEOE/N\nEPA/ONg             # agency\nEPROM/NSg           # electrically erasable programmable read-only memory\nER/ON\nERA/NO              # equal rights amendment\nESE/NgJ\nESL/N\nESP/Nmg             # extra-sensory perception\nESPN/Og             # media company\nESR/N\nEST/ONg\nET/N\nETA/ONV             # estimated time of arrival\nETD/N\nEU/Og\nEULA/NgS            # end-user license agreement\nEUR/Nmg             # currency symbol for Euros\nEUV/N               # extreme ultraviolet\nEakins/Og\nEarhart/Og\nEarl/NOg\nEarle/Og\nEarlene/Og\nEarline/Og\nEarnest/Og\nEarnestine/g\nEarnhardt/Og\nEarp/Og\nEast/OgS>Z\nEaster/NOgV\nEastern/J>\nEastman/Og\nEastwood/ONgV\nEaton/Og\nEben/Og\nEbeneezer/g\nEbert/Og\nEbola/ONg\nEbonics/Og\nEbony/Og\nEbro/Og\nEcclesiastes/Og\nEco/g\nEcstasy/N\nEcuador/Og\nEcuadoran/NSgJ\nEcuadorean/NJ\nEcuadorian/NSgJ\nEd/OgnX\nEdam/ONSwg\nEdda/Og\nEddie/ONg\nEddington/Og\nEddy/Og\nEden/ONg\nEdgar/ONg\nEdgardo/g\nEdinburgh/Og\nEdison/Og\nEdith/Og\nEdmond/Og\nEdmonton/Og\nEdmund/Og\nEdna/Og\nEdsel/ONg\nEduardo/g\nEdward/ONSg\nEdwardian/JNg\nEdwardo/g\nEdwards/ONg\nEdwin/Og\nEdwina/Og\nEeyore/Ng\nEffie/ONg\nEfrain/Og\nEfren/Og\nEggo/g\nEgypt/Og\nEgyptian/JNOSg\nEgyptology/Ng\nEhrenberg/Og\nEhrlich/Og\nEiB                 # exbibyte\nEichmann/Ng\nEid/OgS             # festival\nEiffel/Og\nEileen/Og\nEinstein/ONSg\nEire/Og\nEisenhower/Og\nEisenstein/Og\nEisner/Og\nElaine/Og\nElam/Og\nElanor/g\nElasticsearch/g\nElastoplast/Og\nElba/Og\nElbe/Og\nElbert/Og\nElbrus/Og\nEldersburg/g\nEldon/Og\nEleanor/Og\nEleazar/Og\nElectra/Og\nElectrolux/OgS\nElena/Og\nElgar/Og\nEli/ONg\nElias/Og\nElijah/Og\nElinor/Og\nEliot/Og\nElisa/g\nElisabeth/Og\nElise/Og\nEliseo/g\nElisha/Og\nEliza/Og\nElizabeth/Og\nElizabethan/JNSg\nElizabethtown/Og\nElkhart/Og\nElla/Og\nEllen/Og\nEllesmere/Og\nEllie/Og\nEllington/Og\nElliot/Og\nElliott/Og\nEllis/Og\nEllison/Og\nElma/Og\nElmer/ONg\nElmira/Og\nElmo/Og\nElnath/Og\nElnora/g\nElohim/Og\nEloise/Og\nEloy/Og\nElroy/Og\nElsa/Og\nElsie/Og\nElsinore/Og\nEltanin/Og\nElton/Og\nElul/Og\nElva/g\nElvia/g\nElvin/Og\nElvira/Og\nElvis/ONg\nElway/g\nElwood/Og\nElyria/Og\nElysee/g\nElysian/ONgJ\nElysium/OgSJ\nEmacs/Og\nEmanuel/Og\nEmerson/Og\nEmery/Og\nEmil/Og\nEmile/Og\nEmilia/Og\nEmilio/g\nEmily/Og\nEminem/Ng\nEminence/O\nEmma/Og\nEmmanuel/Og\nEmmett/Og\nEmmy/ONg\nEmory/Og\nEncarta/g\nEndymion/Og\nEng/g\nEngels/Og\nEngland/Og\nEnglish/J>NOwSgV\nEnglishman/Ng\nEnglishmen/9g\nEnglishwoman/Ng\nEnglishwomen/9g\nEnid/Og\nEnif/Og\nEniwetok/Og\nEnkidu/Og\nEnoch/Og\nEnos/Og\nEnrico/Og\nEnrique/g\nEnron/Ng\nEnterprise/Og\nEocene/JOg          # geological period\nEpcot/Og\nEphesian/JNgS\nEphesus/Og\nEphraim/Og\nEpictetus/Og\nEpicurean/JNg\nEpicurus/Og\nEpimethius/g\nEpiphany/NOSg\nEpiscopal/JN\nEpiscopalian/NgSJ\nEpistle/N\nEpsom/Og\nEpson/g\nEpstein/OgV\nEquuleus/Og\nEr/                 # Erbium\nErasmus/ONg\nErato/Og\nEratosthenes/Og\nErdogan/Og\nErebus/Og\nErector/g\nErewhon/g\nErhard/g\nEric/Og\nErica/Og\nErich/Og\nErick/Og\nEricka/Og\nErickson/Og\nEridanus/Og\nErie/NOg\nErik/Og\nErika/Og\nErin/Og\nEris/OgS\nEritrea/Og\nEritrean/JNSg\nErlang/Og\nErlenmeyer/Og\nErma/Og\nErna/g\nErnest/Og\nErnestine/OgJ\nErnesto/Og\nErnie/Og\nErnst/Og\nEros/OgS\nErrol/Og\nErse/NgJ\nErvIn/g\nErwin/Og\nEsau/Og\nEscher/Og\nEscherichia/Og\nEscondido/O\nEskimo/ONSgJ\nEsmeralda/Og\nEsperanto/Og\nEsperanza/Og\nEspinoza/g\nEsq/Ng\nEsquire/Sg\nEssen/Og\nEssene/Ng\nEssequibo/Og\nEssex/Og\nEssie/Og\nEstablishment/N\nEsteban/Og\nEstela/g\nEstella/Og\nEstelle/Og\nEster/Og\nEsterhazy/Jg\nEstes/Og\nEsther/Og\nEstonia/Og\nEstonian/JNSg\nEstrada/Og\nEswatini/Og\nEthan/Og\nEthel/Og\nEthelred/Og\nEthernet/ONg\nEthiopia/Og\nEthiopian/NSgJ\nEtna/Og\nEton/Og\nEtruria/Og\nEtruscan/JNOg\nEtta/Og\nEu/                 # Europium\nEucharist/NgS\nEucharistic/J\nEuclid/Og\nEudaimonia/Ng\nEugene/Og\nEugenia/Og\nEugenie/Og\nEugenio/g\nEula/Og\nEuler/Og\nEulerian/J\nEumenides/Ng\nEunice/Og\nEuphrates/Og\nEur/JO\nEurasia/Og\nEurasian/JNgS\nEuripides/Og\nEurocentrist/NgS\nEurodollar/NSg\nEuropa/Og\nEurope/Og\nEuropean/JNgS\nEuropeanism/Nmg\nEurotrash/Ng\nEurozone/Og\nEurydice/Og\nEustachian/Jg\nEustis/Og\nEuterpe/Og\nEva/Og\nEvan/OgS\nEvangelical/J\nEvangelina/Og\nEvangeline/Og\nEvangelist/Ng\nEvans/Og\nEvansville/Og\nEve/Og\nEvelyn/Og\nEvenki/ONg\nEverReady/g\nEverdeen/g\nEverest/OgV\nEverett/Og\nEverette/Og\nEverglades/Og\nEvert/Og\nEvian/g\nEvita/Og\nEwing/Og\nExcalibur/Og\nExcedrin/g\nExcellency/NSg\nExchequer/O\nExercycle/g\nExocet/Ng\nExodus/Og\nExxon/Og\nEyck/g\nEyre/Og\nEysenck/g\nEzekiel/Og\nEzra/Og\nF/                  # Fluorine\nF1/9g\nFAA/O\nFAQ/NSg\nFBI/ONg\nFCC/ONJ\nFD/N\nFDA/O\nFDIC/Og\nFDR/ONg\nFEMA/Og\nFFT/NgS             # fast Fourier transform\nFHA/Og\nFICA/Og\nFIFO/N\nFL/NO               # US state (Florida)\nFLOSS/ONV           # free libre open source software\nFM/NSg\nFNMA/Og\nFOFL\nFORTRAN/Og\nFOSS/ONV            # free open source software\nFPO/N\nFSF/Og\nFSLIC/O\nFTC/O\nFUD/NS\nFWD/N\nFWIW/\nFY/N\nFYI/\nFaberge/g\nFabian/JNOSg\nFaceTime/NOV\nFacebook/ONgV\nFaeroe/Og\nFafnir/Og\nFagin/Ng\nFahd/g\nFahrenheit/Jg\nFairbanks/Og\nFairchild/Og        # surname, electronics\nFairfield/Og\nFairhope/g\nFaisal/Og\nFaisalabad/Og\nFaith/Og\nFajardo/Og\nFalasha/Og\nFalkland/OgS\nFalklands/Og\nFallopian/Jg\nFalstaff/Ng\nFalwell/Og\nFannie/Og\nFanny/Og\nFaraday/Og\nFarage/Og\nFargo/Og\nFarley/Og\nFarmer/Og\nFarmington/Og\nFarragut/g\nFarrakhan/g\nFarrell/Og\nFarrow/Og\nFarsi/NgJ\nFassbinder/g\nFatah/Og\nFates/Og\nFather/ONSg\nFatima/Og\nFatimid/Ng\nFaulkner/Og\nFaulknerian/Jg\nFauntleroy/Og\nFaust/Og\nFaustian/Jg\nFaustino/g\nFaustus/g\nFawkes/Og\nFay/Og\nFaye/Og\nFayetteville/Og\nFe/                 # Iron\nFeb/Og\nFebruary/OgS\nFed/OgS\nFedEx/OgV\nFederal/NgS\nFederalist/g\nFederico/Og\nFeds/g\nFelecia/g\nFelice/g\nFelicia/Og\nFelicity/Og\nFelipe/g\nFelix/Og\nFellini/g\nFenian/Ng\nFerber/Og\nFerdinand/Og\nFergus/Og\nFerguson/Og\nFerlinghetti/Og\nFermat/Og\nFermi/Og\nFern/Og\nFernandez/Og\nFernando/Og\nFerrari/ONSg\nFerraro/g\nFerrell/Og\nFerris/Og\nFeynman/Og\nFez/Og\nFiat/Ng\nFiberglas/g\nFibonacci/Og\nFichte/g\nFichtinger/Og\nFidel/Og\nFido/Og\nFielding/Og\nFields/Og\nFigaro/ONg\nFigueroa/Og\nFiji/Og\nFijian/NOSgJ\nFilipino/NOSgJ\nFillmore/Og\nFilofax/Ng\nFinch/Og\nFinland/Og\nFinlay/Og\nFinley/Og\nFinn/NOSg\nFinnbogadottir/g\nFinnegan/Og\nFinnish/JNg\nFiona/Og\nFirebase/g\nFirefox/Og\nFirestone/Og\nFischer/Og\nFisher/Og\nFisk/Og\nFitch/Og\nFitchburg/Og\nFitzgerald/Og\nFitzpatrick/Og\nFitzroy/Og\nFizeau/g\nFla/O\nFlagstaff/Og\nFlanagan/Og\nFlanders/Og\nFlathead/NO\nFlatt/Og\nFlaubert/Og\nFleischer/Og\nFleming/NOg\nFlemish/JOg\nFletcher/Og\nFlint/Og\nFlintstones/g\nFlo/Og\nFlora/Og\nFlorence/ONg\nFlorentine/JNg\nFlores/Og\nFlorida/Og\nFloridan/JNg\nFloridian/JNSg\nFlorine/g\nFlorsheim/g\nFlory/Og\nFlossie/Og\nFlowers/Og\nFloyd/Og\nFlynn/Og\nFm/                 # Fermium\nFoch/ONg\nFokker/ONg\nFoley/Og\nFolgers/g\nFolsom/Og\nFomalhaut/Og\nFonda/Og\nFoosball/g\nForbes/Og\nFord/ONSg\nForeman/Og\nForest/Og>\nForester/Og\nFormica/OgS\nFormosa/Og\nFormosan/JNg\nForrest/Og\nForster/Og\nFortaleza/Og\nFortran/Og\nFosse/Og\nFoster/Og\nFotomat/g\nFoucault/Og\nFourier/Og\nFourneyron/g\nFourth/O\nFowler/Og\nFox/NOSg\nFr/                 # Francium\nFragonard/g\nFran/Og\nFrance/OgS\nFrances/Og\nFrancesca/Og\nFrancine/Og\nFrancis/Og\nFrancisca/g\nFranciscan/NgSJ\nFrancisco/Og\nFranck/g\nFranco/ONg\nFrancois/Og\nFrancoise/g\nFrancophile/NJ\nFranglais/Og\nFrank/NOSg\nFrankel/Og\nFrankenstein/ONgV\nFrankfort/Og\nFrankfurt/Og>\nFrankfurter/Ng\nFrankie/Og\nFrankish/JO\nFranklin/ONg\nFranks/NOg\nFranny/Og\nFranz/Og\nFraser/Og\nFrau/Ngn\nFraulein/N\nFrazier/Og\nFred/ONg\nFreda/Og\nFreddie/ONg\nFreddy/Og\nFrederic/Og\nFrederick/Og\nFredericksburg/Og\nFredericton/Og\nFredric/g\nFredrick/Og\nFreeman/Og\nFreemason/NSg\nFreemasonry/OgS\nFreetown/Og\nFreida/g\nFremont/Og\nFrench/ONSwgJV      # there shouldn't be a plural but `S` works on both verbs and nouns\nFrenchman/Ng\nFrenchmen/9g\nFrenchwoman/Ng\nFrenchwomen/9g\nFreon/Ng\nFresnel/Og\nFresno/Og\nFreud/Og\nFreudian/JNg\nFrey/Og\nFreya/Og\nFri/Ng\nFriday/NSg\nFridman/Og\nFrieda/Og\nFriedan/g\nFriedman/Og\nFriedmann/Og\nFriend/NOSg\nFrigga/Og\nFrigidaire/g\nFrisbee/ONgV\nFrisco/Og\nFrisian/ONSgJ\nFrito/Ng\nFritz/NOg\nFrobisher/Og\nFrodo/Og\nFroissart/g\nFromm/Og\nFronde/g\nFrontenac/Og\nFrost/Og\nFrostbelt/g\nFrunze/Og\nFry/Og\nFrye/Og\nFuchs/Og\nFuentes/Og\nFugger/g\nFuji/Og\nFujian/OgJ\nFujitsu/g           # Disinhibited\nFujiwara/Og\nFujiyama/Og\nFukuoka/Og\nFukuyama/Og         # francis -\nFukuyaman/J\nFulani/Og\nFulbright/Og\nFuller/Og\nFullerton/Og\nFulton/Og\nFunafuti/Og\nFundy/Og\nFuries/Og\nFurman/Og\nFurtwangler/g\nFushun/Og\nFuzhou/Og\nFuzzbuster/g\nG/Ng>nB\nGA/ON               # US state (Georgia)\nGAO/O\nGATT/Og\nGB/NOg\nGCC/Og\nGDP/Ng              # gross domestic product\nGDPR/O              # General Data Protection Regulation\nGE/ONgJ\nGED/N\nGFC/Ng              # global financial crisis\nGHQ/Ng\nGHz/\nGI/JNV\nGIF/NSg             # file format\nGIGO/\nGM/NOgVJ            # car company\nGMAT/O              # global\nGMO/NJ\nGMT/ONg\nGNP/Ng\nGNU/Og\nGOP/ONg             # political party\nGP/NOgJ\nGPA/N               # grade point average\nGPO/ON\nGPS/ONV             # global positioning system\nGPU/NSg\nGSA/ON\nGST/Ng              # goods and services tax\nGT/NgS              # grand touring/tourer\nGT R/N\nGT-R/NgS\nGTE/Og\nGTO/NSg\nGTR/NgS\nGTS/NSg\nGU/N\nGUI/ONgS\nGa/                 # Gallium\nGable/Og\nGabon/Og\nGabonese/NgJ\nGaborone/Og\nGabriel/Og\nGabriela/Og\nGabrielle/Og\nGacrux/Og\nGadsden/Og\nGaea/Og\nGael/NOSg\nGaelic/ONgJ\nGagarin/Og\nGage/Og\nGaia/Og\nGail/Og\nGaiman/Og\nGaines/Og\nGainesville/Og\nGainsborough/ONg\nGalahad/ONSg\nGalapagos/Og\nGalatea/Og\nGalatia/Og\nGalatians/ONg\nGalaxy/O\nGalbraith/Og\nGale/Og\nGalen/Og\nGalibi/Og\nGalician/JNwgS\nGalilean/JNOSg\nGalilee/Og\nGalileo/Og\nGall/Og\nGallagher/Og\nGallegos/Og\nGallic/Jg\nGallicism/NSg\nGallipoli/Og\nGallo/Og\nGalloway/ONg\nGallup/Og\nGalois/Og\nGalsworthy/Og\nGalvani/Og\nGalveston/Og\nGama/O\nGamay/Ng\nGambia/Og\nGambian/JNSg\nGamble/Og\nGame Boy/OgS\nGamow/g\nGandalf/Og\nGandhi/ONg\nGandhian/Jg\nGanesha/ONg\nGanges/Og\nGangnam/Og\nGangtok/Og\nGansu/Og\nGantry/g\nGanymede/ONg\nGap/Og\nGarbo/g\nGarcia/Og\nGardner/Og\nGareth/ONg\nGarfield/Og\nGarfunkel/Og\nGargantua/g\nGaribaldi/Og\nGarland/Og\nGarner/Og\nGarrett/Og\nGarrick/Og\nGarrison/Og\nGarry/Og\nGarth/Og\nGarvey/Og\nGary/ONg\nGarza/Og\nGascony/Og\nGasser/Og\nGastonia/Og\nGastroenterology\nGates/Og\nGatling/Ng\nGatorade/ONgV\nGatsby/Og\nGatun/Og\nGauguin/Og\nGaul/ONSg\nGaulish/JO\nGauss/Og\nGaussian/JNg\nGautama/Og\nGautier/g\nGavin/Og\nGawain/Og\nGay/Og\nGayle/Og\nGaza/Og\nGazan/JOgS\nGaziantep/Og\nGd/                 # Gadolinium\nGdańsk/Og\nGdansk/Og\nGe/                 # Germanium\nGeffen/Og\nGehenna/Og\nGehrig/Og\nGeiger/Og\nGelbvieh/Ng\nGeller/Og\nGemini/ONSg\nGen/ONg\nGena/Og\nGenaro/g\nGene/Og\nGenesis/Og\nGenet/Og\nGeneva/ONg\nGenevieve/Og\nGenghis/Og\nGenoa/ONSg\nGentoo/NOg\nGentry/Og\nGeo/g\nGeoffrey/Og\nGeorge/NOSg\nGeorgetown/Og\nGeorgette/Og\nGeorgia/Og\nGeorgian/NgSJ\nGeorgina/Og\nGer/Ng\nGerald/Og\nGeraldine/OgJ\nGerard/Og\nGerardo/g\nGerber/Og\nGere/Og\nGeritol/g\nGerman/NOwSgJ\nGermanic/ONgJ\nGermany/Og\nGeronimo/Og\nGerry/Og\nGershwin/Og\nGertrude/Og\nGestapo/OgS\nGethsemane/Og\nGetty/Og\nGettysburg/Og\nGewurztraminer/g\nGhana/Og\nGhanaian/JN\nGhats/Og\nGhazvanid/g\nGhent/Og\nGhibelline/Ng\nGiB                 # gibibyte\nGiacometti/g\nGiannini/Og\nGiauque/g\nGibbon/Og\nGibbs/Og\nGibraltar/ONSg\nGibson/ONg\nGide/g\nGideon/ONg\nGielgud/Og\nGienah/Og\nGil/Og\nGila/ONg\nGilbert/Og\nGilberto/g\nGilchrist/Og\nGilda/Og\nGilead/Og\nGiles/Og\nGilgamesh/Og\nGill/ONg\nGillespie/Og\nGillette/Og\nGilliam/Og\nGillian/Og\nGilligan/Og\nGilman/O\nGilmore/Og\nGilroy/Og\nGina/Og\nGinger/Og\nGingrich/Og\nGinny/Og\nGino/g\nGinsberg/Og\nGinsburg/Og\nGinsu/Ng\nGiorgione/g\nGiotto/g\nGiovanni/Og\nGiraudoux/g\nGiselle/Og\nGish/Og\nGitHub/Og\nGiuliani/Og\nGiuseppe/g\nGiza/Og\nGk/O\nGladstone/ONSg\nGladys/Og\nGlaser/Og\nGlasgow/Og\nGlass/Og\nGlastonbury/Og\nGlaswegian/JNSg\nGlaxo/g\nGleason/Og\nGlen/ONg\nGlenda/Og\nGlendale/O\nGlenlivet/Ng\nGlenn/Og\nGlenna/Og\nGloria/Og\nGloucester/ONg\nGlover/NOg\nGnostic/JNg\nGnosticism/Ng\nGnuPG\nGoa/ONg\nGobi/Og\nGod/ONg\nGodard/Og\nGoddard/Og\nGödel/Og\nGodel/Og\nGodfrey/Ng\nGodhead/Og\nGodiva/Og\nGodot/Og\nGodspeed/NSg\nGodthaab/g\nGodunov/g\nGodzilla/ONg\nGoebbels/Og\nGoering/Og\nGoethals/g\nGoethe/Og\nGoff/Og\nGog/ONg\nGogol/Og\nGoiania/g\nGolan/Og\nGolconda/ONg\nGolda/Og\nGoldberg/Og\nGolden/ONg\nGoldie/Og\nGoldilocks/Og\nGolding/Og\nGoldman/Og\nGoldsboro/Og\nGoldsmith/Og\nGoldwater/Og\nGoldwyn/Og\nGolgi/Ng\nGolgotha/ONg\nGoliath/ONg\nGomez/Og\nGomorrah/Og\nGompers/Og\nGomulka/g\nGondwanaland/Og\nGonzales/Og\nGonzalez/Og\nGonzalo/Og\nGood/Og\nGoodall/Og\nGoode/Og\nGoodman/Og\nGoodrich/Og\nGoodwill/NOg\nGoodwin/Og\nGoodyear/Og\nGoogle/OgV\nGoogler/NSg\nGoolagong/g\nGopher/O\nGorbachev/Og\nGordian/JOg\nGordimer/g\nGordon/ONg\nGore/Og\nGoren/Og\nGorey/Og\nGorgas/Og\nGorgon/Og\nGorgonzola/Og\nGorky/Og\nGospel/NgS\nGoteborg/g\nGoth/NOgJ\nGotham/Og\nGothic/ONSgJ\nGoths/N\nGouda/ONSg\nGould/Og\nGounod/g\nGovernor/N\nGoya/Og\nGr/B\nGrable/Og\nGracchus/Og\nGrace/Og\nGraceland/g\nGracie/Og\nGraciela/g\nGrady/Og\nGraffias/Og\nGrafton/Og\nGraham/Og\nGrahame/Og\nGrail/g\nGrammy/Ng\nGrampians/Og\nGranada/Og\nGrand Prix/O0g\nGrands Prix/O9\nGrant/ONg\nGrass/Og\nGraves/Og\nGray/Og\nGrayslake/g\nGrecian/JNg\nGreco-Roman/J\nGreece/Og\nGreek/JONSgV\nGreeley/Og\nGreen/ONSgJ\nGreene/Og\nGreenland/Og\nGreenlander/NgS\nGreenlandic/JO\nGreenlandish/NgJ\nGreenpeace/Og\nGreensboro/Og\nGreensleeves/g\nGreenspan/Og\nGreenville/Og\nGreenwich/Og\nGreer/Og\nGreg/Og\nGregg/Og\nGregorian/JNg\nGregorio/Og\nGregory/ONg\nGrenada/Og\nGrenadian/NgSJ\nGrenadines/Og\nGrendel/Og\nGrenoble/Og\nGresham/Og\nGreta/Og\nGretchen/Og\nGretel/Og\nGretzky/ONg\nGrey/ONg\nGrieg/g\nGrier/Og\nGriffin/Og\nGriffith/Og\nGrimes/Og\nGrimm/Og\nGrinch/g\nGris/g\nGromyko/g\nGropius/g\nGross/Og\nGrosz/Og\nGrotius/g\nGrover/Og\nGrozny/O\nGrumman/g\nGrundy/Og\nGrunewald/Og\nGrus/Og\nGruyère/ONSwg\nGruyere/ONSwg\nGuadalajara/Og\nGuadalcanal/Og\nGuadalquivir/Og\nGuadalupe/Og\nGuadeloupe/Og\nGuallatiri/g\nGuam/Og\nGuamanian/NJ\nGuangdong/Og\nGuangzhou/Og\nGuantanamo/Og\nGuarani/Og\nGuarnieri/Og\nGuatemala/Og\nGuatemalan/NgSJ\nGuayama/Og\nGuayaquil/Og\nGucci/JONg\nGuelph/NOg\nGuernsey/ONSg\nGuerra/Og\nGuerrero/Og\nGuevara/Og\nGuggenheim/Og\nGuiana/Og\nGuido/ON\nGuillermo/g\nGuinea/Og\nGuinean/JNgS\nGuinevere/Og\nGuinness/ONg\nGuiyang/Og\nGuizhou/Og\nGuizot/g\nGujarat/Og\nGujarati/ONgJ\nGujranwala/Og\nGulfport/Og\nGullah/ONgJ\nGulliver/Og\nGumbel/g\nGunther/Og\nGuofeng/g\nGupta/Og\nGurkha/NgJ\nGus/Og\nGustav/Og\nGustavo/g\nGustavus/Og\nGutenberg/Og\nGuthrie/Og\nGutierrez/Og\nGuy/ONg\nGuyana/Og\nGuyanese/NgJ\nGuzman/Og\nGwalior/Og\nGwen/Og\nGwendoline/Og\nGwendolyn/Og\nGwyn/Og\nGypsy/NOSgJ\nH-1B/NgS\nHBO/Og\nHBase/g\nHDD/N\nHDMI/O\nHDTV/N\nHF/NgJ\nHHS/ON\nHI/ON               # US state (Hawaii)\nHIMARS/N\nHIV/Ng\nHM/NO\nHMO/Ng\nHMS/N\nHOV/N\nHP/ONg\nHPV/N\nHQ/NOgJ\nHR/N\nHRH/N\nHS/NOJ\nHSBC/Og\nHST/NO\nHT/NO\nHTML/Og\nHTTP/Ng\nHTTPS/Ng\nHUD/NOSg\nHVAC/Ng\nHa/NOg\nHaas/Og\nHabakkuk/Og\nHaber/Og\nHadar/Og\nHades/Og\nHadoop/g\nHadrian/Og\nHafiz/Og\nHagar/Og\nHagerstown/Og\nHaggai/Og\nHagiographa/Og\nHague/Og\nHahn/Og\nHaida/NOSg\nHaifa/Og\nHainan/Og\nHaiphong/Og\nHaiti/Og\nHaitian/NOSgJ\nHakka/JNOg\nHakluyt/Og\nHal/OgS\nHaldane/Og\nHale/Og\nHaleakala/Og\nHaley/Og\nHalifax/Og\nHall/ONg\nHalley/Og\nHalliburton/Og\nHallie/Og\nHallmark/Og\nHalloween/OgS\nHallstatt/Og\nHalon/g\nHals/Og\nHalsey/Og\nHam/Og\nHaman/Og\nHamas/Og\nHamburg/ONSg\nHamhung/Og\nHamilcar/Og\nHamill/Og\nHamilton/ONg\nHamiltonian/JNg\nHamish/Og\nHamitic/JOg\nHamlet/Og\nHamlin/Og\nHammarskjold/g\nHammerstein/g\nHammett/Og\nHammond/ONg\nHammurabi/Og\nHampshire/ONg\nHampton/Og\nHamsun/Og\nHan/OgS\nHancock/Og\nHandel/Og\nHandy/Og\nHaney/Og\nHanford/Og\nHangul/Ng\nHangzhou/Og\nHank/Og\nHanna/Og\nHannah/ONg\nHannibal/Og\nHannity/Og\nHanoi/Og\nHanover/Og\nHanoverian/JNg\nHans/ONgn\nHansel/Og\nHansen/Og\nHanson/Og\nHanuka/O\nHanukkah/Og\nHanukkahs/O\nHanzi/N09g\nHapsburg/ONg\nHarare/Og\nHarbin/Og\nHardin/Og\nHarding/Og\nHardy/Og\nHargreaves/Og\nHarlan/Og\nHarlem/Og\nHarlequin/Og\nHarley/ONg\nHarlingen/Og\nHarlow/Og\nHarmon/Og\nHarold/Og\nHarper/Og\nHarpy/Sg\nHarrell/Og\nHarriet/Og\nHarriett/g\nHarrington/ONg\nHarris/Og\nHarrisburg/Og\nHarrison/Og\nHarrisonburg/Og\nHarrods/Og\nHarry/Og\nHart/Og\nHarte/Og\nHartford/Og\nHartline/Og\nHartman/Og\nHarvard/Og\nHarvey/Og\nHasbro/g\nHasidim/N9g\nHaskell/Og\nHastings/Og\nHatfield/Og\nHathaway/Og\nHatsheput/g\nHatteras/Og\nHattie/Og\nHattiesburg/Og\nHauptmann/g\nHausa/NOg\nHausdorff/Jg\nHavana/ONSg\nHavarti/Ng\nHavel/Og\nHavoline/g\nHaw/O\nHawaii/Og\nHawaiian/JNOSg\nHawking/Og\nHawkins/Og\nHawks/O\nHawthorne/Og\nHay/OgS\nHayden/Og\nHaydn/Og\nHayek/Og\nHayes/Og\nHaynes/Og\nHays/Og\nHayward/ONg\nHaywood/Og\nHayworth/Og\nHazel/Og\nHazleton/Og\nHazlitt/g\nHe/Ia3Og            # Helium; I~pronoun a~personal 3~person .~singular s~subject / Og~proper noun+possessive\nHead/Og\nHealey/Og\nHealy/Og\nHearst/Og\nHeath/Og>\nHeather/Og\nHeathrow/Og\nHeaviside/Og\nHeb\nHebe/ONg\nHebei/Og\nHebert/Og\nHebraic/Jg\nHebraism/NSg\nHebrew/JNgS\nHebrews/ONg\nHebrides/Og\nHecate/Og\nHecatoncheires/Ng\nHector/Og\nHecuba/Og\nHeep/Og\nHefner/Og\nHegel/Og\nHegelian/JNg\nHegira/Og\nHeidegger/Og\nHeidelberg/Og\nHeidi/Og\nHeifetz/g\nHeilongjiang/Og\nHeimlich/ONgV\nHeine/Og\nHeineken/ONg\nHeinlein/Og\nHeinrich/Og\nHeinz/ONg\nHeisenberg/Og\nHeisman/g\nHelen/ONg\nHelena/Og\nHelene/Og\nHelga/Og\nHelicobacter/O\nHelicon/Og\nHeliopolis/Og\nHelios/Og\nHellene/NSg\nHellenic/JOg\nHellenisation/Ng!_₹\nHellenise/V!_₹\nHellenism/NwgS\nHellenist/N\nHellenistic/Jg\nHellenization/Ng\nHellenize/Vg\nHeller/Og\nHellespont/Og\nHellman/Og\nHelmholtz/Og\nHeloise/Og\nHelsinki/Og\nHelvetian/JN\nHelvetius/g\nHemet/Og\nHemingway/OgV\nHenan/Og\nHench/Og\nHenderson/Og\nHendrick/OgS\nHendricks/Og\nHendrix/Og\nHenley/Og\nHennessy/Og\nHenri/Og\nHenrietta/Og\nHenrik/g\nHenry/ONg\nHensley/Og\nHenson/Og\nHepburn/Og\nHephaestus/Og\nHepplewhite/Og\nHera/Og\nHeracles/Og\nHeraclitus/Og\nHerakles/Og\nHerbart/Og\nHerbert/Og\nHerculaneum/Og\nHerculean/J\nHercules/ONg\nHerder/g\nHereford/ONSg\nHerero/NOg\nHeriberto/g\nHerman/Og\nHermaphroditus/Og\nHermes/ONg\nHerminia/g\nHermitage/ONg\nHermite/g\nHermosillo/Og\nHernandez/Og\nHerod/Og\nHerodotus/Og\nHeroku/g\nHerr/ONgG\nHerrera/Og\nHerrick/Og\nHerring/Og\nHerschel/ONg\nHersey/Og\nHershel/Og\nHershey/Og\nHertz/ONg\nHertzsprung/Og\nHerz/Og             # company\nHerzegovina/Og\nHerzl/Og\nHeshvan/Og\nHesiod/Og\nHesperia/Og\nHesperus/Og\nHess/Og\nHesse/Og\nHessian/JNOg\nHester/Og\nHeston/Og\nHettie/Og\nHewitt/Og\nHewlett/Og\nHeyerdahl/g\nHeywood/Og\nHezbollah/Og\nHezekiah/Og\nHf/                 # Hafnium\nHg/                 # Mercury\nHialeah/Og\nHiawatha/Og\nHibernia/Og\nHibernian/JN\nHickman/ONg\nHickok/Og\nHickory/g\nHicks/Og\nHieronymus/Og\nHigashiosaka/O\nHiggins/Og\nHighlander/NOSg\nHighlands/O\nHighness/Ng\nHightstown/g\nHilario/Og\nHilary/ONg\nHilbert/Og\nHilda/Og\nHildebrand/Og\nHilfiger/g\nHill/Og\nHillary/Og\nHillel/Og\nHilton/Og\nHimalaya/OgS\nHimalayan/JN\nHimalayas/Og\nHimmler/g\nHinayana/Og\nHindemith/g\nHindenburg/Og\nHindi/OgJ\nHindu/JNSg\nHinduism/OgS\nHindustan/Og\nHindustani/JNOSg\nHines/Og\nHinesville/Og\nHinton/Og\nHipparchus/Og\nHippocrates/Og\nHippocratic/Jg\nHiram/Og\nHirobumi/g\nHirohito/g\nHiroshima/ONg\nHispanic/JNSg\nHispaniola/Og\nHiss/g\nHitachi/ONg\nHitchcock/Og\nHitler/ONSg\nHittite/NOSgJ\nHmong/NOgJ\nHo/O                    # Holmium; Ho Chi Minh\nHobart/Og\nHobbes/Og\nHobbs/Og\nHockney/Og\nHodge/OgS\nHodges/Og\nHodgkin/Og\nHoff/Og\nHoffa/Og\nHoffman/Og\nHofstadter/Og\nHogan/Og\nHogarth/ONg\nHogwarts/Og\nHohenlohe/g\nHohenstaufen/Og\nHohenzollern/ONgJ\nHohhot/Og\nHohokam/Og\nHokkaido/ONg\nHokkien/ONmg\nHokusai/g\nHolbein/g\nHolcomb/Og\nHolden/ONSg\nHolder/Og\nHoliday/Og\nHoliness/N\nHolland/OgS>Z\nHollander/NOg\nHollerith/Og\nHolley/Og\nHollie/Og\nHollis/Og\nHolloway/Og\nHolly/Og\nHollywood/ONgJV\nHolman/Og\nHolmes/Og\nHolocaust/OgV\nHolocene/JOg        # geological period\nHolst/g\nHolstein/ONSg\nHolt/Og\nHomer/Og\nHomeric/Jg\nHon/J\nHonda/OgS           # company\nHonduran/NgSJ\nHonduras/Og\nHonecker/g\nHoneywell/Og\nHong/O\nHoniara/Og          # capital of Vanuatu\nHonolulu/Og\nHonorable/J\nHonshu/Og           # island\nHood/Og\nHooke/Og>\nHooker/Og\nHooper/Og\nHoosier/NgSJ\nHooters/g\nHoover/ONSgV\nHope/Og\nHopewell/Og\nHopi/NOSg09         # singular and plural, but also has plural in -s\nHopkins/Og\nHopper/Og\nHorace/Og\nHoracio/g\nHoratio/Og\nHormel/g\nHormuz/Og\nHorn/Og\nHornblower/Og\nHorne/Og\nHorowitz/ONg\nHorthy/g\nHorton/Og\nHorus/Og\nHosea/Og\nHost/Sg\nHotpoint/g\nHottentot/NOSg\nHoudini/ONgV\nHouma/NOg\nHouse/Og\nHousman/Og\nHouston/Og\nHouthi/NgS\nHouyhnhnm/Ng\nHovhaness/g\nHoward/Og\nHowe/Og\nHowell/OgS\nHowells/Og\nHowrah/O\nHoyle/Og\nHrothgar/Og\nHts/N\nHuang/Og\nHuawei/Og\nHubbard/Og\nHubble/ONg\nHubei/Og\nHuber/Og\nHubert/Og\nHuck/Og\nHuddersfield/O\nHudson/ONg\nHuerta/Og\nHuey/ONg\nHuff/Og\nHuffman/Og\nHuggins/Og\nHugh/OgS\nHughes/Og\nHugo/ONg\nHuguenot/NgSJ\nHui/NOg\nHuitzilopotchli/g\nHull/Og\nHumberto/g\nHumboldt/Og\nHume/Og\nHummel/g\nHummer/NOg\nHumphrey/OgS\nHumpty Dumpty/Og\nHumvee/Ng\nHun/NOSg\nHunan/Og\nHung/Og\nHungarian/JNSg\nHungary/Og\nHunspell/g\nHunt/Og>\nHunter/Og\nHuntington/Og\nHuntley/Og\nHuntsville/Og\nHuracán/OgS\nHuracan/OgS\nHurd/Og\nHurley/Og\nHuron/NOg\nHurst/Og\nHus/Og\nHussein/Og\nHusserl/g\nHussite/Ng\nHuston/Og\nHutchinson/Og\nHutton/Og\nHutu/Ng\nHuxley/Og\nHuygens/Og\nHyades/Og\nHyde/Og\nHyderabad/Og\nHydra/Og\nHymen/Og\nHyperion/Og\nHyundai/Ng\nHz/g\nI/~Ia1s.            # Iodone; I~pronoun a~personal 1~person .~singular s~subject\nI'd/~\nI'd've/\nI'll/~\nI'm/~\nI've/~\nIA/ON               # US state (Iowa)\nIBM/ONg\nIC/NgS              # integrated circuit\nICBM/NSg\nICC/O               # International Criminal Court\nICQ/ONV             # chat protocol\nICU/NO              # Unicode library\nID/NOSgVJ           # US state (Idaho)\nIDE/N\nIDF/Og              # Israel's military\nIE/ONJ\nIED/N               # improvised explosive device\nIEEE/O              # standards organization\nIIRC                # If I recall correctly\nIKEA/Og             # furniture company\nIL/NO               # US state (Illinois)\nIMF/Og              # International Monetary Fund\nIMHO/\nIMNSHO/\nIMO/NO\nIN/ON               # US state (Indiana)\nING/g\nINRI\nINS/NO\nIO                  # input output\nIOU/Ng\nIP/JNOSg            # J: intraperitoneal, N: \"intellectual poperty\", O: \"Internet Protocol\"\nIPA/ON              # phonetic alphabet\nIPO/NgSV\nIQ/NgS\nIRA/ONSg\nIRC/ONV             # chat protocol\nIRS/ONg\nISBN/NgS\nISDN/Ng             # telephone standard\nISIS/O\nISO/ONgP            # standards organization\nISP/N\nISS/NO\nIT/N                # removed `5`. nouns can qualify nouns. makes `it` an adjective which interferes with heuristics\nIUD/N\nIV/JNSg\nIVF/N\nIaccoca/g\nIago/Og\nIan/Og\nIapetus/Og\nIbadan/Og\nIberia/Og\nIberian/JNOg\nIbiza/Og\nIblis/Og\nIbo/ONg\nIbrahim/Og\nIbsen/Og\nIcahn/g\nIcarus/Og\nIce/O\nIceland/Og>Z\nIcelander/Ng\nIcelandic/ONgJ\nIda/Og\nIdaho/ONSg\nIdahoan/JNgS\nIdahoes\nIdlib/Og\nIeyasu/g\nIgnacio/Og\nIgnatius/Og\nIgor/ONg\nIguassu/g\nIjsselmeer/g\nIke/ONg\nIkhnaton/g\nIla/g\nIlene/Og\nIliad/ONSg\nIll\nIllinois/ONg\nIllinoisan/JNgS\nIlluminati/Ng\nIlyushin/g\nImelda/Og\nImhotep/Og\nImodium/g\nImogene/Og\nImus/Og\nIn/                 # Indium\nIna/Og\nInc/J\nInca/NSg\nInchon/Og\nIncorporated\nInd/O\nIndependence/Og\nIndia/NOg\nIndian/JNOSg\nIndiana/Og\nIndianan/NSgJ\nIndianapolis/Og\nIndianian/N\nIndies/Og\nIndio/Og\nIndira/Og\nIndochina/Og\nIndochinese/Jg\nIndonesia/Og\nIndonesian/JNSg\nIndore/Og\nIndra/Og\nIndus/Og\nIndy/OgS\nInes/g\nInez/Og\nInge/Og\nInglewood/O\nIngram/Og\nIngres/g\nIngrid/Og\nIngush/NOSgJ\nIngushetia/Og\nInnocent/Og\nInnsbruck/O\nInonu/g\nInquisition/Og\nInst\nInstagram/ONgV\nInstamatic/Ng\nIntel/Og\nIntelsat/g\nInternationale/Og\nInternet/Ogm\nInterpol/Og\nInuit/NOSgJ\nInuktitut/Og\nInvar/g\nIo/Og\nIonesco/g\nIonian/JNOSg\nIonic/JONSg\nIowa/ONSg\nIowan/JNgS\nIphigenia/Og\nIpswich/O\nIqaluit/Og\nIqbal/Og\nIquitos/Og\nIr/                 # Iridium\nIra/Og\nIran/Og\nIranian/NOSgJ\nIraq/Og\nIraqi/NgSJ\nIreland/Og\nIrene/Og\nIris/Og\nIrish/ONgJ>\nIrishman/Ng\nIrishmen/9g\nIrishwoman/Ng\nIrishwomen/9g\nIrkutsk/Og\nIrma/Og\nIroquoian/JNSg\nIroquois/NOg09      # singular and plural\nIrrawaddy/Og\nIrtish/g\nIrvin/Og\nIrvine/Og\nIrving/Og\nIrwin/Og\nIsaac/Og\nIsabel/Og\nIsabela/Og\nIsabella/ONg\nIsabelle/Og\nIsaiah/Og\nIscariot/ONg\nIsfahan/Og\nIsherwood/Og\nIshim/NOg\nIshmael/ONg\nIshtar/Og\nIsiah/Og\nIsidro/g\nIsis/Og\nIslam/OgS\nIslamabad/Og\nIslamic/JNg\nIslamism/Ng\nIslamist/NgSJ\nIslamophobia/N\nIslamophobic/J\nIsmael/Og\nIsmail/Og\nIsolde/Og\nIspell/g\nIsrael/OgS\nIsraeli/NOSgJ\nIsraelite/NgJ\nIssac/Og\nIssachar/Og\nIstanbul/Og\nIstanbulite/NgSJ\nIsuzu/ONg           # car brand\nIt/ON\nItaipu/Og\nItal/N\nItalian/JNwSg\nItalianate/JV\nItaly/Og\nItasca/Og\nIthaca/Og\nIthacan/JNg\nIto/Og\nIva/Og\nIvan/Og\nIvanhoe/Og\nIves/Og\nIvorian/NJ\nIvory/Og\nIvy/ONg\nIyar/Og\nIzaak/g\nIzanagi/Og\nIzanami/Og\nIzhevsk/Og\nIzmir/Og\nIzod/g\nIzvestia/g\nJ/NOgd\nJCS/O\nJD/NO\nJDM\nJFK/ONgV\nJIT/NgSVdG          # cf. jit\nJP/NO\nJPEG/ONV\nJV/N\nJack/ONg\nJackie/Og\nJacklyn/Og\nJackson/OgS\nJacksonian/NgJ\nJacksonville/Og\nJacky/ONg\nJaclyn/Og\nJacob/ONSg\nJacobean/JNg\nJacobi/Og\nJacobin/NgJ\nJacobite/Ng\nJacobs/ONg\nJacobson/Og\nJacquard/Og\nJacqueline/Og\nJacquelyn/Og\nJacques/Og\nJacuzzi/NOgV\nJagger/Og\nJagiellon/g\nJaguar/ONg\nJahangir/g\nJaime/Og\nJain/JNOg\nJainism/Ogm\nJaipur/Og\nJakarta/Og\nJake/Og\nJamaal/g\nJamaica/Og\nJamaican/NSgJ\nJamal/Og\nJamar/Og\nJame/Sg\nJamel/g\nJames/Og\nJamestown/Og\nJami/g\nJamie/Og\nJan/Og\nJana/Og\nJanacek/g\nJane/ONg\nJanell/g\nJanelle/Og\nJanesville/Og\nJanet/Og\nJanette/Og\nJanice/Og\nJanie/Og\nJanine/Og\nJanis/Og\nJanissary/g\nJanjaweed/Og\nJanna/Og\nJannie/g\nJansen/Og\nJansenist/JNg\nJanuary/OgS\nJanus/Og\nJap/ONSgJV\nJapan/Og\nJapanese/JNOwSg\nJapura/g\nJared/Og\nJarlsberg/ONg\nJarred/Og\nJarrett/Og\nJarrod/Og\nJarvis/Og\nJasmine/Og\nJason/Og\nJasper/Og\nJataka/g\nJava/ONSg\nJavanese/NOg\nJavier/g\nJaxartes/Og\nJay/ONg\nJayapura/Og\nJayawardene/g\nJaycee/NgS\nJaycees/Ng\nJayne/Og\nJayson/Og\nJean/Og\nJeanette/Og\nJeanie/Og\nJeanine/g\nJeanne/Og\nJeannette/Og\nJeannie/Og\nJeannine/Og\nJed/Og\nJeddah/Og\nJedi/Ng\nJeep/Ng\nJeeves/Og\nJeff/Og\nJefferey/Og\nJefferson/ONg\nJeffersonian/JNg\nJeffery/Og\nJeffrey/Og\nJeffry/Og\nJehoshaphat/Og\nJehovah/ONg\nJekyll/Og\nJenga/Og\nJenifer/Og\nJenkins/ONg\nJenna/Og\nJenner/Og\nJennie/Og\nJennifer/Og\nJennings/Og\nJenny/ONg\nJensen/Og\nJephthah/Og\nJerald/Og\nJeremiah/ONg\nJeremiahs/N\nJeremy/Og\nJeri/Og\nJericho/ONg\nJermaine/Og\nJeroboam/ONg\nJerold/g\nJerome/Og\nJerri/Og\nJerrod/g\nJerrold/Og\nJerry/ONg\nJersey/ONSg\nJerusalem/Og\nJess/Og\nJesse/ONg\nJessica/Og\nJessie/ONg\nJesuit/NgSJ\nJesus/ONgV\nJetway/g\nJew/NOSgJV\nJewel/Og\nJewell/Og\nJewess/NgS\nJewish/JpNOg\nJewry/Ng\nJezebel/ONSg\nJiangsu/Og\nJiangxi/Og\nJidda/Og\nJilin/Og\nJill/ONg\nJillian/Og\nJim/Og\nJimenez/Og\nJimmie/Og\nJimmy/ONg\nJinan/Og\nJinnah/Og\nJinny/Og\nJinping/Og\nJivaro/Ng\nJo/Og\nJoan/ONg\nJoann/Og\nJoanna/Og\nJoanne/Og\nJoaquin/Og\nJob/ONSg\nJobs/ONg\nJocasta/Og\nJocelyn/Og\nJock/ONg\nJockey/g\nJodi/Og\nJodie/Og\nJody/ONg\nJoe/ONg\nJoel/Og\nJoey/Og\nJogjakarta/g        # city\nJohann/Og\nJohanna/Og\nJohannes/NOg\nJohannesburg/Og\nJohn/ONSg\nJohnathan/Og\nJohnathon/Og\nJohnie/g\nJohnnie/Og\nJohnny/ONg\nJohns/ONg\nJohnson/ONg\nJohnston/Og\nJohnstown/Og\nJolene/Og\nJolson/Og\nJon/Og\nJonah/ONg\nJonahs/N\nJonas/Og\nJonathan/ONg\nJonathon/Og\nJones/Og\nJonesboro/Og\nJong-Un/Og\nJoni/Og\nJonson/Og\nJoplin/Og\nJordan/Og\nJordanian/NgSJ\nJorge/Og\nJose/Og\nJosef/g\nJosefa/g\nJosefina/g\nJoseph/ONg\nJosephine/OgJ\nJosephs/N\nJosephson/Og\nJosephus/Og\nJosh/Og\nJoshua/ONg\nJosiah/Og\nJosie/Og\nJosue/Og\nJoule/Og\nJove/Og\nJovian/JNOg\nJoy/Og\nJoyce/Og\nJoycean/JNg\nJoyner/Og\nJpn\nJr/Jg\nJuan/Og\nJuana/Og\nJuanita/Og\nJuarez/Og\nJubal/Og\nJudaeo\nJudah/Og\nJudaic/J\nJudaical/J\nJudaism/OgS\nJudas/ONSg\nJudd/Og\nJude/Og\nJudea/Og\nJudges/O\nJudith/Og\nJudson/Og\nJudy/ONg\nJuggernaut/Og\nJul/O\nJules/Og\nJulia/Og\nJulian/OgJ\nJuliana/Og\nJulianne/Og\nJulie/Og\nJuliet/NOg\nJuliette/Og\nJulio/g\nJulius/Og\nJulliard/Og\nJuly/OgS\nJun/Og\nJune/OgS\nJuneau/Og\nJung/Og\nJungfrau/Og         # mountain\nJungian/JNg\nJunior/OgS\nJunker/NSg\nJuno/Og\nJupiter/ONg\nJurassic/JOg        # geological period\nJurua/g\nJustice/NOg\nJustin/Og\nJustine/Og\nJustinian/OgJ\nJutland/Og\nJuvenal/Og\nK/                  # Potassium\nKB/NOg              # kilobyte, cf. Kb\nKC/ON\nKFC/Og              # company\nKGB/Og              # Soviet intelligence agency\nKIA/NJ              # killed in action\nKKK/Og\nKO/NgV\nKP/N\nKS/ONV              # US state (Kansas)\nKY/O                # US state (Kentucky)\nKaaba/Og\nKabul/Og\nKafka/Og            # franz -\nKafkaesque/Jg\nKagoshima/Og        # city\nKahlua/Ng\nKahului/Og\nKaifeng/Og\nKailua/g\nKaiser/NOSg\nKaitlin/Og\nKalahari/Og         # desert\nKalamazoo/ONg\nKalashnikov/Og\nKalb/g\nKalevala/Og\nKalgoorlie/Og       # city\nKali/Og\nKaliningrad/Og\nKalmyk/JNOg         # ethnicity\nKama/Og\nKama Sutra          # prefEtymonline, Longman, OED (also: Chambers)\nKamasutra           # American Heritage, Chambers\nKamchatka/Og\nKamehameha/Og\nKampala/Og\nKampuchea/Og        # old name of Cambodia\nKan/OgS\nKanchenjunga/Og\nKandahar/Og\nKandinsky/g\nKane/Og\nKaneohe/Og\nKankakee/Og\nKannada/Omg         # language\nKano/Og\nKanpur/Og\nKansai/Og\nKansan/JNgS\nKansas/Og\nKant/Og             # immanuel -\nKantian/JNg\nKaohsiung/Og\nKaposi/Og\nKara/Og\nKarachi/Og\nKaraganda/Og\nKarakorum/Og\nKaramazov/g\nKardashian/OgS\nKareem/Og\nKaren/ONg\nKarenina/g\nKari/Og\nKarin/Og\nKarina/Og\nKarl/Og\nKarla/Og\nKarloff/g           # boris -\nKaro/NOg\nKarol/g\nKarroo/Og\nKaryn/Og\nKasai/g\nKasey/Og\nKashmir/ONSg        # region\nKasparov/Og         # gary -\nKate/Og\nKatelyn/Og\nKatharine/Og\nKatherine/Og\nKatheryn/Og\nKathiawar/Og\nKathie/Og\nKathleen/Og\nKathmandu/Og\nKathrine/g\nKathryn/Og\nKathy/Og\nKatie/Og\nKatina/g\nKatmai/g\nKatniss/g\nKatowice/Og\nKatrina/Og\nKaty/ONg\nKauai/Og            # island\nKaufman/Og\nKaunas/Og\nKaunda/g\nKawabata/g          # author\nKawasaki/OgS        # company\nKay/ONg\nKaye/Og\nKayla/Og\nKazakh/NOgJ\nKazakhs/9\nKazakhstan/Og\nKazan/Og\nKazantzakis/g\nKb/Ng               # kilobit, cf. KB\nKeaton/Og\nKeats/Og\nKeck/Og\nKeenan/Og\nKeewatin/g\nKeillor/Og\nKeisha/Og\nKeith/Og\nKeller/Og\nKelley/Og\nKelli/Og\nKellie/Og\nKellogg/Og\nKelly/Og\nKelsey/Og\nKelvin/ONg\nKemalism/Og\nKemalist/NgS\nKemerovo/Og\nKemp/Og\nKempis/g\nKen/Og\nKendall/Og\nKendra/Og\nKendrick/Og\nKenmore/g\nKennan/Og\nKennedy/Og\nKenneth/Og\nKennewick/Og\nKennith/g\nKenny/Og\nKenosha/Og\nKensington/Og\nKent/Og\nKenton/Og\nKentuckian/JNgS\nKentucky/Og\nKenworth/NOSg\nKenya/Og\nKenyan/NSgJ\nKenyatta/g\nKenyon/Og\nKeogh/Og\nKeokuk/Og\nKepler/Og\nKerensky/g\nKeri/Og\nKermit/Og\nKern/Og\nKerouac/Og\nKerr/Og\nKerri/Og\nKerry/ONg\nKettering/Og\nKeven/g\nKevin/Og\nKevlar/Ng\nKevorkian/Og\nKewpie/g\nKey/Og\nKeynes/Og\nKeynesian/JNg\nKeynesianism/Nmg\nKhabarovsk/Og\nKhachaturian/Og\nKhalid/Og\nKhan/Og\nKharkiv/Og\nKharkov/Og          # old name of Kharkiv\nKhartoum/Og\nKhayyam/g\nKhazar/NOgJ\nKhmer/ONgJ\nKhoikhoi/NOg\nKhoisan/ONg\nKhomeini/Og\nKhorana/g\nKhrushchev/Og\nKhufu/Og\nKhulna/Og\nKhwarizmi/g\nKhyber/Og\nKiB                 # kibibyte\nKickapoo/NOg\nKidd/Og\nKiel/Og\nKierkegaard/Og\nKieth/g\nKiev/ONg            # old name of Kyiv\nKigali/Og\nKikuyu/NOg\nKilauea/Og\nKilimanjaro/Og\nKilleen/Og\nKilroy/Og\nKim/Og\nKimberley/Og\nKimberly/Og\nKing/NOg\nKingsport/Og\nKingston/Og\nKingstown/Og\nKinko's\nKinney/Og\nKinsey/ONg\nKinshasa/Og\nKiowa/NOSg09        # singular and plural, but also has plural in -s\nKip/Og\nKipling/Og\nKirby/Og\nKirchhoff/Og\nKirchner/Og\nKirghistan/g\nKirghiz/NOgJ\nKirghizia/g\nKiribati/Og\nKirinyaga/g\nKirk/Og\nKirkland/Og\nKirkpatrick/Og\nKirov/Og\nKirsten/Og\nKisangani/Og\nKishinev/Og\nKislev/Og\nKissimmee/Og\nKissinger/Og\nKit/Og\nKitakyushu/Og\nKitchener/Og\nKitty/Og\nKiwanis/Ng\nKlan/Og\nKlansman/Ng\nKlaus/Og\nKlee/g\nKleenex/NgS\nKlein/Og\nKlimt/g\nKline/Og\nKlingon/ONg\nKlondike/ONSg\nKmart/g\nKnapp/Og\nKnesset/Og\nKngwarreye/g\nKnickerbocker/Ng\nKnievel/g\nKnight/Og\nKnopf/Og\nKnossos/Og\nKnowles/Og\nKnox/ONg\nKnoxville/Og\nKnudsen/Og\nKnuth/Og\nKnuths/O\nKobe/Og\nKoch/Og\nKochab/Og\nKochi/Og\nKodachrome/Og\nKodak/g\nKodaly/g\nKodiak/NOg\nKoestler/Og\nKohinoor/Og\nKohl/Og\nKoizumi/Og\nKojak/g\nKokomo/Og\nKolkata/Og\nKolyma/Og\nKommunizma/g\nKonami/Og\nKong/Og\nKongo/OgJ\nKönigsberg/Og       # old name of Kaliningrad\nKonigsberg/Og\nKonrad/g\nKoontz/Og\nKoppel/g\nKoran/NOSg\nKoranic/J\nKorea/Og\nKorean/JONSwg\nKornberg/g\nKory/Og\nKorzybski/g\nKosciusko/Og\nKosovo/Og\nKossuth/Og\nKosygin/g\nKotlin/Og\nKoufax/g\nKowloon/Og\nKr/                 # Krypton\nKraft/Og\nKrakatoa/Og\nKraken/OgS\nKrakow/Og\nKramer/OgV\nKrasnodar/Og\nKrasnoyarsk/Og\nKrebs/Og\nKremlin/Og\nKremlinologist/N\nKremlinology/N\nKresge/Og\nKringle/g\nKris/Og\nKrishna/Og\nKrishnamurti/Og\nKrista/Og\nKristen/Og\nKristi/Og\nKristie/Og\nKristin/Og\nKristina/Og\nKristine/Og\nKristopher/Og\nKristy/Og\nKroc/Og\nKroger/Og\nKronecker/Og\nKropotkin/g\nKruger/Og\nKrugerrand/Ng\nKrupp/Og\nKrystal/Og\nKshatriya/Ng\nKublai/g\nKubrick/Og\nKuhn/Og\nKuibyshev/g\nKulthumm/g\nKunming/Og\nKuomintang/Og\nKurd/NgS\nKurdish/JNg\nKurdistan/Og\nKurosawa/Og\nKurt/Og\nKurtis/Og\nKusch/g\nKutuzov/Og\nKuwait/Og\nKuwaiti/NSgJ\nKuznets/Og\nKuznetsk/Og\nKwakiutl/Ng\nKwan/Og\nKwangju/Og\nKwanzaa/OgS\nKy/NOgH\nKyiv/Og\nKyle/Og\nKyoto/Og\nKyrgyzstan/Og\nKyushu/Og\nL/NgJn\nL'Amour/g\nL'Enfant\nL'Oreal/g\nL'Ouverture/g\nLA/NO               # US state (Louisiana)\nLAN/Ng\nLBJ/NOg\nLC/NJ\nLCD/Ng\nLCM\nLDC/N\nLED/NgS\nLG/NOg\nLGB/JN\nLGBT/JN\nLGBTQ/JN\nLGPL/NO             # GNU Lesser General Public License\nLIFO/J\nLL/NJ\nLLB/Ng\nLLC/NgS             # limited liability company\nLLD/g\nLNG/N\nLOGO\nLP/NOg\nLPG/N\nLPN/NSg\nLSAT\nLSD/Ng\nLVN/N\nLa/                 # Lanthanum\nLab/NO\nLaban/Og\nLabor/Og_           # the australian political party doesn't use the normal australian spelling of 'labour'\nLabour/Og!₹          # the uk political party does use the normal british spelling of 'labour'\nLabrador/ONSg\nLabradorean/JN\nLacey/Og\nLachesis/ONg\nLactobacillus/O\nLacy/Og\nLada/NOSg\nLadakh/Og\nLadoga/Og\nLadonna/g\nLady/NOg\nLadyship/Sg\nLafayette/Og\nLafitte/Og\nLagos/Og\nLagrange/Og\nLagrangian/JNg\nLahore/Og\nLaius/Og\nLajos/g\nLakeisha/Og\nLakeland/Og\nLakewood/O\nLakisha/Og\nLakota/NOg\nLakshmi/Og\nLamaism/NSg\nLamar/Og\nLamarck/Og\nLamaze/Ng\nLamb/ONg\nLambert/Og\nLambo/ONSg\nLamborghini/ONSg\nLambrusco/Ng\nLamentations/O\nLamont/Og\nLana/Og\nLanai/Og\nLancashire/ONg\nLancaster/Og\nLance/Og\nLancelot/Og\nLand/Og\nLandon/Og\nLandry/Og\nLandsat/Ng\nLandsteiner/g\nLane/Og\nLang/Og\nLangerhans/g\nLangland/Og\nLangley/Og\nLangmuir/Og\nLanka/Og\nLankan/JNg\nLanny/Og\nLansing/Og\nLanzhou/Og\nLao/NOSgJ\nLaocoon/g\nLaos/ONg\nLaotian/NOSgJ\nLaplace/Og\nLaplacian/JN\nLapland/Og>\nLapp/NOSgJ\nLara/Og\nLaramie/Og\nLardner/Og\nLaredo/Og\nLarousse/g\nLarry/Og\nLars/Ogn\nLarsen/Og\nLarson/Og\nLascaux/Og\nLassa/Og\nLassen/Og\nLassie/Og\nLat/g\nLatasha/g\nLateran/Og\nLatham/Og\nLatin/J>ONSg\nLatina/NOJ\nLatino/JNSg\nLatinx/JN\nLatisha/Og\nLatonya/Og\nLatoya/Og\nLatrobe/Og\nLatvia/Og\nLatvian/JNgS\nLaud/Og>\nLauder/Og\nLaue/Og\nLaundromat/g\nLaura/Og\nLaurasia/Og\nLaurel/NOg\nLauren/Og\nLaurence/Og\nLaurent/Og\nLauri/Og\nLaurie/Og\nLaval/Og\nLavern/Og\nLaverne/Og\nLavoisier/g\nLavonne/g\nLawanda/Og\nLawrence/Og\nLawson/Og\nLawton/Og\nLayamon/g\nLayla/Og\nLayton/Og\nLazaro/g\nLazarus/ONgV\nLe/OgS\nLea/Og\nLeach/Og\nLeadbelly/g\nLeah/Og\nLeakey/Og\nLean/Og\nLeander/Og\nLeann/Og\nLeanna/Og\nLeanne/Og\nLear/Og\nLearjet/g\nLeary/Og\nLeatherman/Og\nLeavenworth/Og\nLebanese/JNg\nLebanon/Og\nLebesgue/g\nLeblanc/Og\nLeda/Og\nLederberg/g\nLee/Og\nLeeds/Og\nLeesburg/Og\nLeeuwenhoek/g\nLeeward/g\nLeft/O\nLegendre/Og\nLeger/Og\nLeghorn/ONg\nLego/Ng             # see also LEGO\nLegree/Og\nLehman/Og\nLeibniz/Og\nLeicester/ONSg\nLeiden/Og\nLeif/g\nLeigh/Og\nLeila/Og\nLeipzig/Og\nLela/Og\nLeland/Og\nLelia/Og\nLemaitre/Og\nLemuel/Og\nLemuria/Og\nLen/Og\nLena/Og\nLenard/Og\nLenin/Og\nLeningrad/Og        # old name of St. Petersburg\nLeninism/Nmg\nLeninist/JNg\nLennon/Og\nLenny/Og\nLeno/Og\nLenoir/Og\nLenora/Og\nLenore/Og\nLent/NOSgn\nLenten/Jg\nLeo/ONSg\nLeola/Og\nLeominster/Og\nLeon/Og\nLeona/Og\nLeonard/Og\nLeonardo/ONg\nLeoncavallo/g\nLeonel/g\nLeonid/NOg\nLeonidas/Og\nLeonor/g\nLeopold/Og\nLeopoldo/g\nLepidus/g\nLepke/g\nLepus/Og\nLerner/g\nLeroy/Og\nLes/Og\nLesa/g\nLesley/Og\nLeslie/Og\nLesotho/Og\nLesseps/Og\nLessie/g\nLester/Og\nLestrade/g\nLeta/g\nLetha/g\nLethe/Og\nLeticia/g\nLetitia/Og\nLeto/Og\nLetterman/Og\nLevant/ONg\nLevesque/Og\nLevi/OgS\nLeviathan/Ng\nLevine/Og\nLeviticus/Og\nLevitt/Og\nLevy/Og\nLew/Og\nLewinsky/ONgV\nLewis/Og\nLewiston/Og\nLewisville/Og\nLexan/Og\nLexington/Og\nLexus/ONSg\nLhasa/OgS\nLhotse/Og\nLi/                 # Lithium\nLiam/Og\nLiaoning/Og\nLibby/Og\nLiberace/g\nLiberal/NOJ\nLiberia/Og\nLiberian/NSgJ\nLibra/ONSg\nLibreOffice/g\nLibreville/Og\nLibrium/Nmg\nLibya/Og\nLibyan/JNOSg\nLichtenstein/Og\nLidia/Og\nLie/Og\nLieberman/Og\nLiebfraumilch/Ng\nLiechtenstein/OgJ>Z\nLiechtensteiner/Ng\nLiege/Og\nLieut/N\nLila/Og\nLilia/Og\nLilian/Og\nLiliana/Og\nLilith/Og\nLiliuokalani/g\nLille/Og\nLillian/Og\nLillie/Og\nLilliput/Og\nLilliputian/NgSJ\nLilly/ONg\nLilongwe/Og\nLily/Og\nLima/NOg\nLimbaugh/Og\nLimbo/N\nLimburger/Ng\nLimoges/Og\nLimousin/ONg\nLimpopo/Og\nLin/Og\nLina/Og\nLincoln/ONSg\nLind/Og\nLinda/Og\nLindbergh/Og\nLindsay/Og\nLindsey/Og\nLindy/ONg\nLinnaeus/Og\nLinotype/g\nLinton/Og\nLinus/Og\nLinux/OgS\nLinwood/Og\nLionel/Og\nLipizzaner/Ng\nLippi/g\nLippmann/Og\nLipscomb/Og\nLipton/Og\nLisa/ONg\nLisbon/ONg\nLissajous/Og\nLister/Og\nListerine/Og\nListon/Og\nLiszt/Og\nLithuania/Og\nLithuanian/JNgS\nLittle/Og\nLitton/Og\nLivermore/Og\nLiverpool/ONg\nLiverpudlian/JNSg\nLivia/Og\nLivingston/Og\nLivingstone/Og\nLivonia/Og\nLivy/Og\nLiz/Og\nLiza/Og\nLizzie/Og\nLizzy/Og\nLjubljana/Og\nLlewellyn/Og\nLloyd/Og\nLn/N\nLoafer/Sg\nLobachevsky/g\nLochinvar/Og\nLocke/Og\nLockean/JNg\nLockheed/g\nLockwood/Og\nLodge/Og\nLodi/Og\nLodz/Og\nLoewe/Og\nLoewi/g\nLoews/g\nLogan/Og\nLohengrin/g\nLoire/Og\nLois/Og\nLoki/Og\nLola/Og\nLolita/ONg\nLollard/Ng\nLollobrigida/Og\nLombard/NOgJ\nLombardi/Og\nLombardy/Og\nLomé/Og\nLome/Og\nLompoc/Og\nLon/Og\nLondon/Og>Z\nLondoner/Ng\nLong/Og\nLongfellow/Og\nLongmont/Og\nLongstreet/Og\nLongueuil/O\nLongview/Og\nLonnie/Og\nLopez/Og\nLora/Og\nLorain/Og\nLoraine/g\nLord/ONSg\nLordship/Sg\nLorelei/Og\nLoren/Og\nLorena/Og\nLorene/Og\nLorentz/Og\nLorentzian/J\nLorenz/ONg\nLorenzo/Og\nLoretta/Og\nLori/Og\nLorie/Og\nLorna/Og\nLorraine/Og\nLorre/g\nLorrie/g\nLos\nLot/Og\nLothario/NSg\nLott/Og\nLottie/Og\nLou/Og\nLouella/Og\nLouie/Og\nLouis/ONg\nLouisa/Og\nLouise/Og\nLouisiana/Og\nLouisianan/JNgS\nLouisianian/JNgS\nLouisville/Og\nLourdes/Og\nLouvre/Og\nLove/NOg\nLovecraft/Og\nLovelace/ONg\nLowe/OgV\nLowell/Og\nLowenbrau/g\nLowery/Og\nLowlands/O\nLoyang/Og\nLoyd/Og\nLoyola/Og\nLr/                 # Lawrencium\nLt/N\nLtd/JN\nLu/                 # Lutetium\nLuanda/Og\nLuann/Og\nLubavitcher/NgJ\nLubbock/Og\nLubumbashi/Og\nLucas/OgV\nLuce/Og\nLucia/Og\nLucian/Og\nLuciano/Og\nLucien/g\nLucifer/Og\nLucile/Og\nLucille/Og\nLucinda/Og\nLucio/g\nLucite/OgSm\nLucius/Og\nLucknow/Og\nLucretia/Og\nLucretius/Og\nLucy/Og\nLuddite/NgS\nLudhiana/Og\nLudwig/Og\nLuella/Og\nLufthansa/Og\nLuftwaffe/Og\nLugansk/Og          # old name of Luhansk\nLuger/ONg\nLugosi/g\nLuhansk/Og\nLuigi/Og\nLuis/Og\nLuisa/g\nLuke/Og\nLula/Og\nLully/g\nLulu/Og\nLumiere/g\nLuna/ONg\nLupe/Og\nLupercalia/Og\nLupus/Og\nLuria/Og\nLusaka/Og\nLusitania/Og\nLuther/Og\nLutheran/JNSg\nLutheranism/NwgS\nLuvs/g\nLuxembourg/Og>Z\nLuxembourger/Ng\nLuxembourgian/NJ\nLuz/Og\nLuzon/Og\nLviv/Og\nLvov/Og\nLyX/Og              # GUI document processor based on LaTeX\nLyallpur/O\nLycra/Ng\nLycurgus/Og\nLydia/Og\nLydian/NOSgJ\nLyell/Og\nLyle/Og\nLyly/g\nLyman/Og\nLyme/ONg\nLynch/Og\nLynchburg/Og\nLynda/Og\nLyndon/Og\nLynette/Og\nLynn/Og\nLynne/Og\nLynnette/Og\nLyon/OgS\nLyons/Og\nLyra/Og\nLysenko/Og\nLysistrata/ONg\nLysol/Og\nM/NOSgJGB\nMA/JNOg             # US state (Massachusetts)\nMASH/N\nMB/NOgV\nMBA/Ng\nMC/NOV\nMCI/ONg\nMD/ONgJ             # US state (Maryland)\nMD5/Ng\nMDF/Ng              # medium-density fiberboard\nMDT/NO\nME/ON               # US state (Maine)\nMEGO/S\nMFA/ONg\nMGM/ONg             # movie company\nMHz/\nMI/ONg              # US state (Michigan)\nMI6/Og              # agency\nMIA/JNO             # missing in action\nMIDI/ONg\nMIPS/NO             # cpu\nMIRV/N\nMIT/Og              # a university\nMLK/Og              # Martin Luther King\nMM/NO\nMMA/Ng              # mixed martial arts\nMMU/NgS             # memory management unit\nMN/ON               # US state (Minnesota)\nMO/ONJ              # US state (Missouri)\nMOOC/N\nMOSFET/NgS          # transistor\nMP/NOgJ             # military police; member of parliament\nMP3/NSg             # audio format\nMP4/NSg             # audio/video format\nMPEG/ON\nMRI/NgV             # magnetic resonance imaging\nMS/NOg              # US state (Mississippi)\nMSG/NOg             # flavour enhancer\nMSRP/NSg\nMST/ONgV\nMSW/N\nMT/JNOg             # US state (Montana)\nMTV/Og\nMVP/Ng              # most valuable player\nMW/NO\nMaalox/g\nMabel/Og\nMable/Og\nMac/NOg\nMacArthur/Og\nMacBride/g\nMacDonald/Og\nMacGuffin/NOSg\nMacLeish/g\nMacao/Og\nMacaulay/Og\nMacbeth/Og\nMaccabees/ON\nMaccabeus/g\nMace/Og\nMacedon/Og\nMacedonia/Og\nMacedonian/JNSg\nMach/ONg\nMachiavelli/ONg\nMachiavellian/JNg\nMacias/g\nMacintosh/ONSg\nMack/ONg\nMackenzie/ONg\nMackinac/g\nMackinaw/g\nMacmillan/ONg\nMacon/ONg\nMacumba/g\nMacy/Og\nMadagascan/NSgJ\nMadagascar/ONg\nMadam/N\nMadden/Og\nMaddie/Og\nMaddox/Og\nMadeira/ONSg\nMadeleine/Og\nMadeline/Og\nMadelyn/Og\nMadera/Og\nMadge/Og\nMadison/ONg\nMadonna/ONSg\nMadras/ONg\nMadrid/Og\nMadurai/Og\nMae/Og\nMaeterlinck/g\nMafia/OgS\nMafioso/Ng\nMagdalena/Og\nMagdalene/ONg\nMagellan/Og\nMagellanic/Jg\nMaggie/Og\nMaghreb/Og\nMagi/O\nMaginot/g\nMagnificat/O\nMagnitogorsk/Og\nMagog/Og\nMagoo/g\nMagritte/g\nMagsaysay/Og\nMagus/Ng\nMagyar/ONSgJ\nMahabharata/Og\nMaharashtra/Og\nMahavira/g\nMahayana/Og\nMahayanist/Ng\nMahdi/Og\nMaher/OgS\nMahfouz/g\nMahican/NSg\nMahler/Og\nMai/Og\nMaia/Og\nMaidenform/g\nMaigret/g\nMailer/Og\nMaillol/g\nMaiman/g\nMaimonides/Og\nMaine/Og>Z\nMainer/NOg\nMaisie/Og\nMaitreya/Og\nMaj/N\nMajesty/I\nMajor/ONg\nMajorca/Og\nMajuro/Og\nMakarios/g\nMaker/Og\nMalabar/ONg\nMalabo/Og\nMalacca/ONg         # old spelling of Melaka\nMalachi/Og\nMalaga/Og\nMalagasy/NgJ\nMalamud/Og\nMalaprop/g\nMalawi/Og\nMalawian/NSgJ\nMalay/JNOwSg\nMalaya/Og\nMalayalam/Og\nMalayan/NOSgJ\nMalaysia/Og\nMalaysian/JNOSg\nMalcolm/Og\nMaldive/Sg\nMaldives/O9g\nMaldivian/NgSJ\nMaldonado/Og\nMalé/Og\nMale/Og\nMali/ONg\nMalian/NSgJ\nMalibu/Og\nMalinda/Og\nMalinowski/Og\nMallarme/g\nMallomars/g\nMallory/Og\nMalone/Og\nMalory/g\nMalplaquet/g\nMalraux/g\nMalta/Og\nMaltese/JNOg\nMalthus/Og\nMalthusian/JNSg\nMameluke/Ng\nMamet/Og\nMamie/Og\nMamore/g\nMan/Og\nManagua/Og\nManama/Og\nManasseh/Og\nManchester/Og\nManchu/NOSgJ\nManchuria/Og\nManchurian/JNg\nMancini/Og\nMancunian/JNOSg\nMandalay/Og\nMandarin/Ng\nMandela/Og\nMandelbrot/ONg\nMandeville/Og\nMandingo/ONg\nMandrell/Og\nMandy/Og\nManet/Og\nManfred/Og\nManhattan/ONSg\nMani/ONg\nManichean/NgJ\nManila/ONSg\nManitoba/Og\nManitoulin/g\nMankato/Og\nManley/Og\nMann/ONgG\nMannheim/Og\nManning/Og\nMansfield/Og\nManson/Og\nManteca/Og\nMantegna/g\nMantle/Og\nManuel/Og\nManuela/Og\nManx/JNOg\nMao/Og\nMaoism/NSg\nMaoist/JNSg\nMaori/NOSgJ\nMapplethorpe/g\nMaputo/Og\nMar/ONSg\nMar-a-Lago/Og\nMara/ONg\nMaracaibo/Og\nMarat/g\nMaratha/NOg\nMarathi/ONgJ\nMarathon/NOg\nMarc/Og\nMarceau/Og\nMarcel/Og\nMarcelino/g\nMarcella/Og\nMarcelo/g\nMarch/OgS\nMarci/Og\nMarcia/Og\nMarciano/Og\nMarcie/Og\nMarco/OgS\nMarconi/Og\nMarcos/Og\nMarcus/Og\nMarcuse\nMarcy/Og\nMarduk/Og\nMargaret/Og\nMargarita/Og\nMargarito/Og\nMarge/Og\nMargery/Og\nMargie/Og\nMargo/Og\nMargot/O\nMargret/g\nMargrethe/g\nMarguerite/Og\nMari/ONSg\nMaria/Og\nMariaDB/g\nMarian/ONgJ\nMariana/OgS\nMarianas/Og\nMarianne/Og\nMariano/g\nMaribel/g\nMaricela/g\nMarie/Og\nMarietta/Og\nMarilyn/ONg\nMarin/Og\nMarina/Og\nMarine/JNSg\nMario/ONg\nMarion/Og\nMaris/Og\nMarisa/Og\nMarisol/g\nMarissa/Og\nMaritain/g\nMaritza/Og\nMariupol/O\nMarius/Og\nMarjorie/Og\nMarjory/Og\nMark/ONSg\nMarkab/Og\nMarkdown/NOg\nMarkham/Og\nMarkov/Og\nMarks/Og\nMarla/Og\nMarlboro/ONg\nMarlborough/Og\nMarlene/Og\nMarley/Og\nMarlin/Og\nMarlon/Og\nMarlowe/Og\nMarmara/Og\nMarne/Og\nMaronite/JNg\nMarple/Og\nMarquesas/Ng\nMarquette/Og\nMarquez/Og\nMarquis/Og\nMarquita/g\nMarrakesh/Og\nMarriott/Og\nMars/ONSg\nMarsala/ONg\nMarseillaise/OgS\nMarseilles/ONg\nMarsh/Og\nMarsha/Og\nMarshall/Og\nMarta/Og\nMartel/Og\nMartha/ONg\nMartial/ONgJ\nMartian/JNOSg\nMartin/Og\nMartina/Og\nMartinez/Og\nMartinique/Og\nMarty/Og\nMarva/g\nMarvell/g\nMarvin/Og\nMarx/Og\nMarxian/JN\nMarxism/NSg\nMarxist/JNSg\nMary/Og\nMaryann/Og\nMaryanne/Og\nMaryellen/g\nMaryland/Og>\nMarylander/Ng\nMarylou/Og\nMarysville/Og\nMasada/g\nMasai/NOg\nMasaryk/g\nMascagni/g\nMasefield/Og\nMaserati/ONg\nMaseru/Og\nMashhad/Og\nMason/ONSg\nMasonic/Jg\nMasonite/Nmg\nMass/NOSg\nMassachusetts/Og\nMassasoit/g\nMassenet/g\nMassey/Og\nMaster/NOS\nMasterCard/Ng\nMasters/NOg\nMather/Og\nMatheson/Og\nMathew/OgS\nMathews/Og\nMathewson/Og\nMathias/Og\nMathis/Og\nMatilda/ONg\nMatisse/g\nMatlab/g\nMatt/Og\nMattel/Og\nMatterhorn/Og\nMatthew/OgS\nMatthews/Og\nMatthias/Og\nMattie/Og\nMaud/Og\nMaude/Og\nMaugham/Og\nMaui/Og\nMauldin/Og\nMaupassant/g\nMaura/Og\nMaureen/Og\nMauriac/Og\nMaurice/Og\nMauricio/g\nMaurine/g\nMauritania/Og\nMauritanian/NSgJ\nMauritian/JNOSg\nMauritius/Og\nMauro/g\nMaurois/g\nMauryan/JNg\nMauser/Ng\nMavis/Og\nMax/Og\nMaximilian/Og\nMaxine/Og\nMaxwell/Og\nMay/OgS>\nMaya/NOSg\nMayan/JNOSg\nMayer/Og\nMayfair/Og\nMayflower/Og\nMaynard/Og\nMayo/ONg\nMaypole\nMayra/g\nMays/NOg\nMaytag/ONg\nMazama/g\nMazarin/Og\nMazatlan/g\nMazda/ONg\nMazola/g\nMazzini/g\nMb/g\nMbabane/Og\nMbini/Og\nMcAdam/Og\nMcAllen/Og\nMcBride/Og\nMcCain/Og\nMcCall/Og\nMcCarthy/Og\nMcCarthyism/NOg\nMcCartney/Og\nMcCarty/Og\nMcClain/Og\nMcClellan/Og\nMcClure/Og\nMcConnell/Og\nMcCormack/Og\nMcCormick/Og\nMcCoy/ONg\nMcCray/Og\nMcCullough/Og\nMcDaniel/Og\nMcDonald/Og\nMcDonnell/Og\nMcDowell/Og\nMcEnroe/Og\nMcFadden/Og\nMcFarland/Og\nMcGee/Og\nMcGovern/Og\nMcGowan/Og\nMcGregor/Og\nMcGuffey/Og\nMcGuire/Og\nMcHenry/Og\nMcIntosh/ONg\nMcIntyre/Og\nMcJob/N\nMcKay/Og\nMcKee/Og\nMcKenna/ONg\nMcKenzie/ONg\nMcKinley/Og\nMcKinney/Og\nMcKnight/Og\nMcLaren/NOSg\nMcLaughlin/Og\nMcLean/Og\nMcLeod/ONg\nMcLuhan/Og\nMcMahon/Og\nMcMansion/NgS\nMcMillan/Og\nMcNamara/Og\nMcNaughton/Og\nMcNeil/Og\nMcPherson/Og\nMcQueen/Og\nMcVeigh/Og\nMd/                 # Mendelevium\nMe/NOI\nMead/Og\nMeade/Og\nMeadows/Og\nMeagan/Og\nMeany/Og\nMecca/ONSg\nMedan/Og\nMedea/Og\nMedellin/Og\nMedford/Og\nMedia/Og\nMedicaid/OgS\nMedicare/OgS\nMedici/Og\nMedina/Og\nMediterranean/JONSg\nMedjugorje/Og\nMedusa/Og\nMeg/ONg\nMegan/Og\nMeghan/Og\nMeier/Og\nMeighen/g\nMeiji/Jg\nMeir/Og\nMejia/Og\nMekong/Og\nMel/Og\nMelaka/Og\nMelanesia/Og\nMelanesian/JNg\nMelania/Og\nMelanie/Og\nMelba/Og\nMelbourne/Og\nMelchior/NOg\nMelchizedek/ONg\nMelendez/Og\nMelinda/Og\nMelisa/g\nMelisande/g\nMelissa/Og\nMellon/Og\nMelody/Og\nMelpomene/Og\nMelton/Og\nMelva/Og\nMelville/Og\nMelvin/Og\nMemcached/g\nMemling/g\nMemphis/Og\nMenander/g\nMencius/Og\nMencken/Og\nMendel/Og\nMendeleev/Og\nMendelian/Jg\nMendelssohn/Og\nMendez/Og\nMendocino/Og\nMendoza/Og\nMenelaus/Og\nMenelik/g\nMenes/Og\nMengzi/O\nMenifee/Og\nMenkalinan/Og\nMenkar/Og\nMenkent/g\nMennen/g\nMennonite/NgSJ\nMenominee/NOg\nMenotti/g\nMensa/Og\nMentholatum/g\nMenuhin/g\nMenzies/Og\nMephisto/O\nMephistopheles/ONg\nMerak/Og\nMercado/Og\nMercator/Ng\nMerced/Og\nMercedes/ONg\nMercedes-Benz/Og\nMercer/Og\nMercia/Og\nMerck/Og\nMercurochrome/g\nMercury/ONSg\nMeredith/Og\nMerino/NOg\nMerkel/Og\nMerle/Og\nMerlin/Og\nMerlot/Ng\nMerovingian/NgJ\nMerriam/Og\nMerrick/Og\nMerrill/Og\nMerrimack/Og\nMerritt/Og\nMerthiolate/g\nMerton/Og\nMervin/Og\nMesa/Og\nMesabi/g\nMesmer/Og\nMesolithic/JNg\nMesopotamia/Og\nMesopotamian/NJ\nMesozoic/JOg\nMesserschmidt/Og\nMessiaen/g\nMessiah/Og\nMessiahs\nMessianic/JN\nMessieurs/N\nMetallica/g\nMetamucil/g\nMethodism/NSg\nMethodist/NSgJ\nMethuselah/ONg\nMetternich/g\nMeuse/Og\nMex/ON\nMexicali/Og\nMexican/NgSJ\nMexico/Og\nMeyer/OgS\nMeyerbeer/g\nMeyers/Og\nMfume/g\nMg/                 # Magnesium\nMgr\nMiB                 # mebibyte\nMiG/Ng\nMia/Og\nMiami/ONSg\nMiaplacidus/Og\nMicah/Og\nMicawber/NgV\nMich/Og\nMichael/Og\nMichaela/Og\nMichaelmas/OgS\nMicheal/Og\nMichel/Og\nMichelangelo/Og\nMichele/Og\nMichelin/Og\nMichelle/Og\nMichelob/Og\nMichelson/Og\nMichigan/ONg\nMichigander/NgS\nMichiganite/N\nMick/ONg\nMickey/NOg\nMickie/Og\nMicky/ONg\nMicmac/NSg\nMicronesia/Og\nMicronesian/NgJ\nMicrosoft/ONgV\nMidas/ONg\nMiddleton/Og\nMiddletown/Og\nMideast/O\nMideastern/J\nMidland/OgSJ\nMidway/Og\nMidwest/Og\nMidwestern/J>g\nMiguel/Og\nMike/NOg\nMikhail/Og\nMikoyan/Og\nMilagros/g\nMilan/Og\nMilanese/JNO\nMildred/Og\nMiles/Og\nMilford/Og\nMilken/g\nMill/OgS>\nMillard/Og\nMillay/Og\nMiller/Og\nMillet/Og\nMillicent/Og\nMillie/Og\nMillikan/Og\nMills/Og\nMilne/Og\nMilo/Og\nMilosevic/Og\nMilquetoast/JNg\nMiltiades/Og\nMilton/Og\nMiltonian/J\nMiltonic/Jg\nMiltown/ONg\nMilwaukee/Og\nMimi/Og\nMimosa/Og\nMin/Og\nMinamoto/g\nMindanao/Og\nMindoro/Og\nMindy/Og\nMinerva/Og\nMing/ONg\nMingus/Og\nMinn\nMinneapolis/Og\nMinnelli/g\nMinnesota/Og\nMinnesotan/JNSg\nMinnie/Og\nMinoan/JNOSg\nMinolta/g\nMinos/Og\nMinot/Og\nMinotaur/Og\nMinsk/Og\nMinsky/Og\nMintaka/Og\nMinuit/g\nMinuteman/g\nMiocene/JOg         # geological period\nMir/Og\nMira/Og\nMirabeau/g\nMirach/Og\nMiranda/OgV\nMirfak/Og\nMiriam/Og\nMiro/g\nMirzam/Og\nMiskito/JNOg\nMiss/N\nMississauga/NOg\nMississippi/ONg\nMississippian/JONSg\nMissoula/Og\nMissouri/Og\nMissourian/JNgS\nMissy/Og\nMistassini/NOg\nMister/N\nMistress/N\nMisty/Og\nMitch/Og\nMitchel/Og\nMitchell/Og\nMitford/Og\nMithra/Og\nMithridates/Og\nMitsubishi/NgS      # car company\nMitterrand/g        # president\nMitty/g\nMitzi/Og\nMixtec/NOgJ         # ethnicity\nMizar/Og\nMk/N\nMlle/N\nMme/NS\nMn/                 # Manganese\nMnemosyne/Og\nMo/                 # Molybdenum\nMobil/Og\nMobile/Og\nMobutu/g\nModesto/Og\nModigliani/g\nMoe/Og\nMoet/g\nMogadishu/Og        # capital of Somalia\nMogul/NOSg\nMohacs/g\nMohamed/Og\nMohammad/Og\nMohammedan/NSgJ\nMohammedanism/OgSw\nMohave/NOSg\nMohawk/NOSg\nMohegan/NO\nMoho/Og\nMohorovicic/Og\nMoira/Og\nMoises/Og\nMoiseyev/g\nMojave/NOSg\nMoldavia/Og\nMoldavian/NOJ\nMoldova/Og\nMoldovan/NOJ\nMoliere/g\nMolina/Og\nMoll/Og\nMollie/Og\nMolly/ONg\nMolnar/Og\nMoloch/Og\nMolokai/Og\nMolotov/ONgV        # minister\nMoluccas/Og\nMombasa/Og\nMon/NOSg            # city\nMona/Og\nMonacan/JN\nMonaco/Og\nMondale/g           # surname\nMonday/NSg\nMondrian/g\nMonegasque/NSgJ\nMonera/Og\nMonessen/Og\nMonet/Og\nMongoDB/g           # trademark\nMongol/NOSgJ\nMongolia/Og\nMongolian/JNwSg\nMongolic/OgJ\nMongoloid/N\nMonica/Og\nMonique/Og\nMonk/Og\nMonmouth/Og\nMonongahela/ONg\nMonroe/Og\nMonrovia/Og\nMonsanto/Og\nMonsieur/Ng\nMonsignor/NSg\nMont/Og\nMontague/Og\nMontaigne/Og\nMontana/Og\nMontanan/JNSg\nMontcalm/Og\nMonte/Og\nMontenegrin/JNg\nMontenegro/Og\nMonterey/OgJ\nMonterrey/Og\nMontesquieu/g\nMontessori/Jg\nMonteverdi/g\nMontevideo/Og\nMontezuma/Og\nMontgolfier/ONg\nMontgomery/Og\nMonticello/Og\nMontoya/Og\nMontpelier/Og\nMontrachet/Ng\nMontreal/Og\nMontserrat/Og\nMonty/Og\nMoody/Og\nMoog/ONg            # company\nMoon/Og\nMooney/Og\nMoor/NOSg\nMoore/Og\nMoorish/Jg\nMopar/OgS\nMorales/Og\nMoran/Og\nMoravia/Og\nMoravian/JNg\nMordred/Og\nMore/Og\nMoreno/Og\nMorgan/ONSg\nMorgantown/Og\nMoriarty/Og\nMorin/Og\nMorison/Og\nMorita/Og\nMorley/Og\nMormon/ONSgJ\nMormonism/OgSw\nMoro/ONg\nMoroccan/NSgJ\nMorocco/Og\nMoroni/Og\nMorpheus/Og\nMorphy/g\nMorris/Og\nMorrison/Og\nMorristown/Og\nMorrow/Og\nMorse/ONgV\nMort/Og\nMortimer/Og\nMorton/Og\nMosaic/Jg\nMoscow/Og\nMoseley/Og\nMoselle/ONg\nMoses/Og\nMosley/Og\nMoss/Og\nMosul/Og\nMotorola/Og         # company\nMotown/ONg\nMotrin/g\nMott/Og\nMoulton/Og\nMount/Og\nMountbatten/Og\nMountie/NgS\nMoussorgsky/g\nMouthe/g\nMouton/Og\nMowgli/g\nMozambican/JNSg\nMozambique/ONg\nMozart/NOg\nMozilla/g           # company\nMr/NSg\nMs/NS\nMsgr\nMt/                 # Meitnerium\nMuawiya/g\nMubarak/Og          # president\nMueller/Og\nMuenster/Sg\nMugabe/Og           # president\nMuhammad/Og\nMuhammadan/NgSJ\nMuhammadanism/OgSw\nMuir/Og\nMujib/Og\nMulder/Og\nMullen/Og\nMuller/Og\nMulligan/Og\nMullikan/g\nMullins/Og\nMulroney/Og\nMultan/Og\nMultics/O\nMumbai/Og           # city\nMumford/Og\nMunch/Og\nMunchhausen/g\nMuncie/Og\nMunich/Og\nMunoz/Og\nMunro/ONg\nMunster/Og\nMuppet/Ng\nMurasaki/Og\nMurat/Og\nMurchison/Og\nMurcia/O\nMurdoch/Og\nMurfreesboro/Og\nMuriel/Og\nMurillo/g\nMurine/g\nMurmansk/Og         # city\nMurphy/ONgV\nMurray/Og\nMurrieta/Og\nMurrow/Og\nMurrumbidgee/Og\nMuscat/Og\nMuscovite/NgJ\nMuscovy/Og\nMuse/NOg\nMusharraf/Og\nMusial/Og\nMuskegon/Og\nMuskogee/NOg\nMuslim/NgSJ\nMussolini/OgJ\nMussorgsky/g\nMustafa/Og\nMutsuhito/g\nMuzak/ONgV          # trademark\nMySQL/g\nMySpace/Ng          # social media\nMyanmar/Og\nMycenae/Og\nMycenaean/JNOg      # ancient civilization\nMyers/Og\nMylar/OgS\nMyles/Og\nMyra/Og\nMyrdal/Og\nMyrna/Og\nMyron/Og\nMyrtle/Og\nMysore/Og           # old name of karnataka state and mysuru city\nMyst/g\nMysuru/Og\nN/                  # Nitrogen\nN'Djamena/O         # capital of Chad\nNAACP/Og\nNAFTA/Og            # trade agreement\nNAND gate/NgS\nNASA/Og             # space agency\nNASCAR/Og\nNASDAQ/Og           # stock exchange\nNATO/Og             # North Atlantic Treaty Organization\nNB/JNO\nNBA/Og              # sports organization\nNBC/ONgJ\nNBS\nNC/ONJ              # US state (North Carolina)\nNCAA/Og\nNCO/N\nND/ONJ              # US state (North Dakota)\nNDA/NSg             # non-disclosure agreement\nNE/ONgJ             # US state (Nebraska)\nNEC/Og              # electronics company\nNEH/O\nNES/Ng              # game console\nNF/ONJ\nNFC/ON              # near-field communication\nNFL/ONg             # sports organization\nNGO/NgS             # non-government organization\nNH/ONVJ             # US state (New Hampshire)\nNHL/NOg             # sports organization\nNIH/OJ              # National Institutes of Health\nNIMBY/NJ            # not in my backyard\nNJ/OJ               # US state (New Jersey)\nNLRB/O\nNM/ONJV             # US state (New Mexico)\nNOR gate/NgS\nNORAD/Og\nNP/ON\nNPC/NSg             # non-player character\nNPR/ONg             # National Public Radio\nNR/JNO\nNRA/O               # National Rifle Association\nNRC/ONJ\nNS/ONJ\nNSA/JONg            # FIXME! elsewhere we have N.S.A.\nNSC/ON\nNSF/ON\nNSFW/J              # not safe for work\nNSW/Og              # New South Wales\nNSX/Ng              # car\nNT/ON\nNTFS/Ng             # file system\nNTSC/Ng             # television standard\nNV/ONJ              # US state (Nevada)\nNVIDIA/g            # FIXME! elsewhere we have Nvidia\nNVMe/O\nNW/ONg\nNWT/O\nNY/O                # US state (New York)\nNYC/O\nNYSE/O              # stock exchange\nNZ/Og               # New Zealand\nNa/                 # Sodium\nNabisco/g           # company\nNabokov/g\nNader/Og\nNadia/Og\nNadine/Og\nNagasaki/Og\nNagoya/Og\nNagpur/Og\nNagy/Og\nNahuatl/NOSg\nNahum/Og\nNaipaul/Og\nNair/NOg\nNairobi/Og\nNaismith/Og\nNam/Og\nNamath/g\nNamibia/Og\nNamibian/JNgS\nNampa/Og\nNan/NOg\nNanak/g\nNanchang/Og\nNancy/Og\nNanette/Og\nNanjing/Og\nNannie/Og\nNanook/g\nNansen/Og\nNantes/Og\nNantucket/Og\nNaomi/Og\nNapa/Og\nNaphtali/Og\nNapier/Og\nNaples/Og\nNapoleon/ONSg\nNapoleonic/Jg\nNapster/Ng          # old music sharing service\nNarcissus/Og\nNarmada/Og\nNarnia/Og\nNarraganset/N\nNarragansett/NOg\nNash/ONg\nNashua/NOg\nNashville/ONg\nNassau/ONg\nNasser/Og\nNat/ONg\nNatalia/Og\nNatalie/Og\nNatasha/Og\nNatchez/NOg\nNate/Ogn\nNathan/ONSg\nNathaniel/Og\nNathans/Og\nNation/Og\nNationwide/g\nNativity/Og\nNaugahyde/Ng\nNauru/Og\nNautilus/g\nNavajo/NOSg09       # singular and plural, but also has plural in -s\nNavajoes/N9\nNavarre/Og\nNavarro/Og\nNavratilova/g\nNavy\nNazarene/JNOg\nNazareth/Og\nNazca/Og\nNazi/NOSgJ\nNazism/NgS\nNb/                 # Niobium\nNd/                 # Neodymium\nNdjamena/g\nNe/                 # Neon\nNeal/Og\nNeanderthal/JNSg\nNeapolitan/JNOg\nNeb/O\nNebr/O\nNebraska/Og\nNebraskan/JNgS\nNebuchadnezzar/ONg\nNecronomicon/Og\nNed/Og\nNefertiti/Og\nNegev/Og\nNegress/NgS\nNegritude\nNegro/N0gS\nNegroes/N9\nNegroid/NSg\nNegros/Og\nNehemiah/Og\nNehru/Og\nNeil/Og\nNelda/Og\nNell/Og\nNellie/Og\nNelly/Og\nNelsen/Og\nNelson/Og\nNembutal/g\nNemesis/Og\nNeogene/JOg\nNeolithic/ONJ\nNepal/Og\nNepalese/JONg\nNepali/JNOSg\nNeptune/Og\nNereid/Og\nNerf/g              # brand\nNero/ONg\nNeruda/g\nNescafe/Og          # brand\nNesselrode/Og\nNestle/Og           # company\nNestor/ONg\nNestorius/g\nNetanyahu/Og        # surname, Israeli politician\nNetflix/Vg          # media company\nNetherlander/NSg\nNetherlands/ONgJ\nNetscape/g          # old browser & company\nNettie/Og\nNetzahualcoyotl/g\nNev/Og\nNeva/Og\nNevada/Og\nNevadan/NSgJ\nNevadian/JN\nNeville/Og\nNevis/Og\nNevsky/g\nNewark/Og\nNewburgh/Og\nNewcastle/Og\nNewfoundland/ONSg\nNewfoundlander/NSg\nNewman/Og\nNewport/Og\nNewsweek/g\nNewton/Og\nNewtonian/JNg\nNexis/g\nNgaliema/g\nNguyen/Og\nNi/                 # Nickel\nNiagara/ONg\nNiamey/Og\nNibelung/Ng\nNicaea/Og\nNicaragua/Og\nNicaraguan/JNSg\nNiccolo/g\nNice/Og\nNicene/JNg\nNichiren/Og\nNicholas/Og\nNichole/Og\nNichols/Og\nNicholson/Og\nNick/Og\nNickelodeon/Ng      # media company\nNicklaus/g\nNickolas/Og\nNicobar/JNg\nNicodemus/OgV\nNicola/OgS\nNicolas/Og\nNicole/Og\nNicosia/Og          # capital of Cyprus\nNiebuhr/Og\nNielsen/Og\nNietzsche/Og\nNieves/Og\nNigel/ONg\nNiger/Og            # country\nNigeria/Og\nNigerian/NgSJ\nNigerien/NgJ\nNightingale/Og\nNijinsky/g\nNike/ONg            # company\nNikita/Og\nNikkei/NgJ          # stock market index\nNikki/Og\nNikolai/Og\nNikon/g             # company\nNile/Og             # river\nNimitz/Og\nNimrod/ONg\nNina/ONg\nNineveh/Og          # ancient city\nNintendo/ONg        # company\nNiobe/ONg\nNippon/Og\nNipponese/JONg\nNirenberg/g\nNirvana/g\nNisan/Og\nNisei/Ng\nNissan/NOSg         # company\nNita/g\nNivea/g\nNixon/ONg\nNkrumah/g\nNo/                 # Nobelium\nNoDoz/g             # trademark\nNoah/ONg\nNobel/ONg           # prize\nNobelist/NgS\nNoble/Og\nNoe/Og\nNoel/OgS\nNoelle/Og\nNoemi/Og\nNokia/ONg           # company\nNola/Og\nNolan/Og\nNome/Og\nNona/Og\nNootka/NOg\nNora/Og\nNorbert/Og\nNorberto/Og\nNordic/JNgS\nNoreen/Og\nNorfolk/ONg\nNoriega/Og\nNorma/Og\nNormal/g\nNorman/NOSgJ\nNormand/Ng\nNormandy/Og\nNorplant/Ng\nNorris/Og\nNorse/JNOg\nNorseman/NOg\nNorsemen/9g\nNorth/Og\nNorthampton/Og\nNortheast/OgS\nNortherner/Ng\nNorthrop/Og\nNorthrup/Og\nNorths/O\nNorthwest/Sg\nNorton/ONSg\nNorw\nNorway/ONg\nNorwegian/NwSgJ\nNorwich/Og\nNosferatu/Ng\nNostradamus/ONg\nNottingham/Og\nNouakchott/Og\nNouméa/Og\nNoumea/Og\nNov/Og\nNova/ONg\nNovartis/g\nNovember/NOSg\nNovgorod/Og\nNovocain/NgS\nNovocaine/Ogm\nNovokuznetsk/Og\nNovosibirsk/Og\nNoxzema/g\nNoyce/Og\nNoyes/Og\nNp/                 # Neptunium\nNubia/Og\nNubian/NgJ\nNukualofa/Og\nNukuʻalofa/Og       # capital of Tonga\nNumbers/Og\nNunavut/Og\nNunez/Og\nNunki/Og\nNürburgring/Og\nNuremberg/Og        # city\nNureyev/Og          # rudolf -\nNutraSweet/g        # trademark\nNyQuil/g            # trademark\nNyasa/g\nNyerere/Og\nO/NOSgPJ            # Oxygen\nO'Brien/Og\nO'Casey/Og\nO'Connell/Og\nO'Connor/Og\nO'Donnell/Og\nO'Hara/Og\nO'Higgins/Og\nO'Keeffe/Og\nO'Neil/Og\nO'Neill/Og\nO'Rourke/Og\nO'Toole/Og\nOAS/NOg\nOB/NJ\nOBD/NgS             # on-board diagnostics\nOCR/ONV             # optical character recognition\nOD/NSgV\nOE/ONJV\nOECD/Og             # organization\nOED/O               # dictionary\nOEM/JNgS            # original equipment manufacturer\nOH/ON               # US state (Ohio)\nOHSA/g              # law\nOJ/NJ\nOK/NOSgVdGJ         # US state (Oklahoma)\nOLED/Ng             # organic light-emitting diode\nOMB/Og\nOMG                 # exclamation\nOPEC/Og             # organization\nOR/CNO              # Oregon\nOR gate/NgS\nOS/Ng               # removed `O` proper noun and `J` adjective flags\nOS X/Og             # before macOS\nOSHA/Og             # agency\nOSS/ONV             # open source software\nOSes/N9\nOT/NOJ\nOTB/J\nOTC/JNO             # over the counter\nOTOH/               # on the other hand\nOahu/Og             # island\nOakland/Og\nOakley/Og\nOates/Og\nOaxaca/ONg          # city, state\nOb/Og               # obamium\nObadiah/Og\nObama/Og            # president\nObamacare/O\nOberlin/Og\nOberon/Og\nOcala/Og\nOcaml/g             # programming language\nOccam/Og            # -'s razor\nOccident/O\nOccidental/OgSJ\nOceania/Og\nOceanside/O\nOceanus/Og\nOchoa/Og\nOct/Og\nOctavia/Og\nOctavian/Og\nOctavio/g\nOctober/ONSgV\nOdell/Og\nOder/Og\nOdesa/Og\nOdessa/Og           # old spelling of Odesa\nOdets/g\nOdia/ONg            # language, previously Oriya\nOdin/Og\nOdis/g\nOdom/Og\nOdysseus/Og\nOdyssey/Og\nOedipal/Jg\nOedipus/Og\nOersted/g\nOfelia/g\nOffenbach/g\nOfficeMax/g\nOgbomosho/Og\nOgden/Og\nOgilvy/Og\nOglethorpe/Og\nOhio/OgJ\nOhioan/NSgJ\nOise/Og\nOjibwa/Og9S0        # singular and plural, but also has plural in -s\nOkayama/O\nOkeechobee/Og\nOkefenokee/Og\nOkhotsk/Og          # city\nOkinawa/Og          # island, prefecture\nOkinawan/JNO\nOkla/O\nOklahoma/Og\nOklahoman/NgSJ\nOktoberfest/Ng\nOla/Og\nOlaf/Og\nOlajuwon/g\nOlav/g\nOld World/Og\nOldenburg/ONg\nOldfield/Og\nOldsmobile/ONSg\nOlduvai/Og\nOlen/g\nOlenek/Og\nOlga/Og\nOligocene/JOg       # geological period\nOlin/Og\nOlive/Og>\nOliver/OgJ\nOlivetti/g          # computer company\nOlivia/Og\nOlivier/g\nOllie/Og\nOlmec/Ng            # ancient civilization\nOlmsted/Og\nOlsen/Og\nOlson/Og\nOlympia/OgS\nOlympiad/NgS\nOlympian/JNgS\nOlympic/JNSg\nOlympics/ONg\nOlympus/Og\nOmaha/NOSg          # city\nOman/Og\nOmani/NgSJ\nOmar/Og\nOmayyad/JNg\nOmdurman/Og\nOmnipotent/O\nOmsk/Og             # city\nOnassis/g\nOneal/g\nOnega/Og\nOnegin/g            # eugene -\nOneida/NOSg\nOnion/Ng            # media company\nOno/Og              # yoko -\nOnondaga/NOSg\nOnsager/g\nOnt/O\nOntarian/JN\nOntario/Og\nOort/Og\nOpal/Og\nOpel/g              # car company\nOpenOffice/g        # product\nOphelia/Og\nOphiuchus/Og\nOppenheimer/ONg\nOpposition\nOprah/OgV\nOra/Og\nOracle/Og           # company\nOran/Og\nOrange/OgJ\nOranjestad/Og\nOrban/Og\nOrbison/Og\nOrdovician/JOg\nOre/On\nOreg/O\nOregon/Og\nOregonian/NSgJ\nOrem/Og\nOreo/Ng\nOrestes/Og\nOrient/ONg\nOriental/JNgS\nOrientalism/N\nOrin/ONg\nOrinoco/Og\nOrion/Og\nOriya/ONg           # old name of odiya language\nOrizaba/Og\nOrkney/Og           # island\nOrlando/Og\nOrleans/ONg\nOrlon/NgS\nOrly/Og\nOrpheus/Og\nOrphic/JNg\nOrr/Og\nOrtega/Og\nOrthodox/JN\nOrtiz/OgS\nOrval/g\nOrville/Og\nOrwell/Og\nOrwellian/Jg\nOs/                 # Osmium\nOsage/OgS\nOsaka/Og            # city\nOsbert/g\nOsborn/Og\nOsborne/Og\nOscar/NOSg\nOsceola/Og\nOsgood/Og\nOshawa/Og\nOshkosh/Og\nOsiris/Og\nOslo/Og\nOsman/Og\nOstrogoth/Ng\nOstwald/g\nOsvaldo/g\nOswald/Og\nOthello/Og\nOtis/Og\nOttawa/ONSg\nOtto/Og\nOttoman/NgJ\nOttomanism/Nmg\nOuagadougou/Og\nOuija/NgS\nOuranos/g\nOverton/Og\nOvid/Og\nOwen/OgS\nOwens/Og\nOwensboro/Og\nOxford/ONSg\nOxnard/Og\nOxonian/JNg\nOxus/Og\nOxycontin/g\nOz/ONg\nOzark/ONSg\nOzarks/NOg\nOzymandias/Ng\nOzzie/ONgJ\nP/                  # Phosphorus\nP.P.S.              # post-postscript\nP.S.                # postscript\nPA/ONgJ             # US state (Pennsylvania)\nPAC/NOg             # political action committee\nPARC/S              # xerox\nPASCAL              # cf. pascal, Pascal\nPB/NgS              # personal best; peanut butter\nPBS/NOg             # organization\nPBX/N\nPC/JNOSgV\nPCB/NgS             # printed circuit board\nPCI/NgS             # expansion slot standard\nPCM/Ng\nPCMCIA/O            # standard\nPCP/Ng              # drug\nPD/NO\nPDA/NwSg            # personal digital assistant; public display of affection\nPDF/NS              # document format\nPDQ/\nPDT/ON\nPE/ON\nPED/NgS             # performance-enhancing drug\nPET/NOg             # early computer\nPFC/N\nPG/JNO\nPGP/NO              # encryption\nPHP/NOg             # programming language\nPIN/N               # personal identification number\nPJ's\nPLA/Og              # china's army\nPLC/NgS             # public limited company; programmable logic controller\nPLO/ONg             # organization\nPM/NSgVdG           # prime minister; private message\nPMS/NOgVJ\nPNG/Og              # Papua New Guinea; image format\nPO/NJ\nPOS/Ng              # part-of-speech\nPOV/NSg             # point of view\nPOW/NgS             # prisoner of war\nPP/NO\nPPE/Ng              # personal protective equipment\nPPS/N               # post-postscript; other meanings?\nPR/NgS              # public relations; pull request; Puerto Rico\nPRC/ONg             # mainland China\nPRO/N\nPS/ONgJ             # postscript; multiple meanings as implied by the attributes?\nPST/ONg\nPSU/Sg              # power supply unit\nPT/NOJ\nPTA/NgV\nPTO/ON\nPVC/Ng              # plastic\nPW/ON\nPX/N\nPa/                 # Protactinium\nPaar/Og\nPablo/Og\nPablum/Og\nPabst/Og\nPace/Og\nPacheco/Og\nPacific/ONgJ\nPacino/Og           # al -\nPackard/Og          # old car company\nPadang/O\nPaderewski/Og\nPadilla/Og\nPaganini/Ng\nPage/Og\nPaglia/g\nPahlavi/Og\nPaige/Og\nPaine/Og\nPaiute/NSg\nPakistan/Og\nPakistani/NSgJ\nPalembang/Og\nPaleocene/JOg       # geological period\nPaleogene/JOg\nPaleolithic/OgJ     # geological period\nPaleozoic/JOg       # geological period\nPalermo/Og          # city\nPalestine/Og\nPalestinian/JNSg\nPalestrina/g\nPaley/Og\nPalikir/Og\nPalisades/Og\nPalladio/g\nPalmdale/Og\nPalmer/Og\nPalmerston/Og\nPalmolive/g\nPalmyra/Og\nPalomar/Og\nPam/Og\nPamela/Og\nPamirs/Ng\nPampers/Ng\nPan/ONg\nPan Am/Ng           # old airline\nPanama/ONSg\nPanamanian/NgSJ\nPanasonic/Og        # company\nPandora/Og\nPangaea/Og\nPankhurst/Og\nPanmunjom/Og\nPansy/Og\nPantagruel/g\nPantaloon/g\nPantheon/Og\nPanza/Og\nParacelsus/Og\nParaclete/Og\nParadise/O\nParaguay/Og\nParaguayan/NgSJ\nParalympic/JS\nParamaribo/Og\nParamount/Og\nParana/g\nParcheesi/g\nPareto/Og\nParis/Og\nParisian/NgSJ\nPark/OgS>\nParker/ONg\nParkersburg/Og\nParkinson/Og\nParkinsonism/Nmg\nParkman/Og\nParks/Og\nParliament/Og\nParmenides/O\nParmesan/JNwgS\nParnassus/OgS\nParnell/Og\nParr/Og\nParrish/Og\nParsifal/g\nParsons/Og\nParthenon/Og\nParthia/Og\nPasadena/Og\nPascagoula/Og\nPascal/OgS          # cf. pascal, PASCAL\nPascal case/Nmg\nPasco/Og\nPasquale/Og\nPassion/OgS\nPassover/OgS\nPasternak/Og\nPasteur/Og\nPat/ONg\nPatagonia/Og\nPatagonian/JNg\nPate/Og\nPatel/Og\nPaterson/Og\nPatna/Og\nPatrica/g\nPatrice/Og\nPatricia/Og\nPatrick/Og\nPatsy/Og\nPatterson/Og\nPatti/Og\nPatton/Og\nPatty/Og\nPaul/Og\nPaula/Og\nPaulette/Og\nPauli/Og\nPaulina/Og\nPauline/OgJ\nPauling/ONg\nPavarotti/g\nPavlov/OgV\nPavlova/ONg\nPavlovian/Jg\nPawnee/ONSgJ\nPax Americana/Og\nPayPal/ONgV         # company\nPayne/Og\nPb/                 # Lead\nPd/                 # Palladium\nPeabody/Og\nPeace/ONg\nPeale/Og\nPearl/Og\nPearlie/g\nPearson/Og\nPeary/Og\nPechora/Og\nPeck/Og\nPeckinpah/Og\nPecos/Og\nPedro/NOg\nPeel/Og\nPeg/Og\nPegasus/ONSg\nPeggy/Og\nPei/Og\nPeiping/Og\nPeking/OgS\nPekingese/ONSgJ\nPele/Og\nPelee/Og\nPeloponnese/Og\nPembroke/Og\nPen/Og\nPena/Og\nPenang/Og\nPenderecki/g\nPenelope/Og\nPenn/Og\nPenna/O\nPenney/Og\nPennington/Og\nPennsylvania/Og\nPennsylvanian/NgSJ\nPenny/Og\nPennzoil/g\nPensacola/ONg\nPentagon/Og\nPentateuch/Og       # part of the Old Testament\nPentax/g            # camera company\nPentecost/OgS\nPentecostal/JNgS\nPentecostalism/N\nPentium/NSg         # cpu brand\nPeoria/ONg\nPepin/Og\nPepsi/ONg           # drink brand\nPepys/Og\nPequot/NOg\nPercheron/Ng\nPercival/Og\nPercy/Og\nPerelman/Og\nPerez/Og\nPericlean/Jg\nPericles/Og\nPerkins/Og\nPerl/OgS\nPerm/Og\nPermalloy/g\nPermian/NOgJ\nPernod/Ng\nPeron/Og\nPeronism/Nmg\nPeronist/JNgS\nPerot/Og\nPerrier/Og\nPerry/Og>\nPerseid/Ng\nPersephone/Og\nPersepolis/Og\nPerseus/Og\nPershing/Og\nPersia/Og\nPersian/NSgJ\nPerth/Og\nPeru/Og\nPeruvian/NgSJ\nPeshawar/Og\nPetain/g\nPetaluma/Og\nPete/Og>Z\nPeter/NOg\nPeters/Ogn\nPetersen/Og\nPeterson/Og\nPetra/Og\nPetrarch/Og\nPetri dish/NgS\nPetrograd/Og        # old name of St. Petersburg, cf. Leningrad\nPetty/Og\nPeugeot/ONg         # car company\nPfc\nPfizer/Og\nPhD/NgS             # degree\nPhaedra/Og\nPhaethon/Og\nPhanerozoic/JOg\nPharaoh/ONg\nPharaohs/NO\nPharisaic/J\nPharisaical\nPharisee/NgS\nPhekda/g\nPhelps/Og\nPhidias/g\nPhil/ONgJY\nPhiladelphia/Og\nPhilby/g\nPhilemon/Og\nPhilip/OgS\nPhilippe/g\nPhilippians/ONg\nPhilippine/JSg\nPhilippines/Og\nPhilips/Og\nPhilistine/NgJ\nPhillip/OgS\nPhillipa/Og\nPhillips/ONg\nPhilly/Og\nPhipps/Og\nPhobos/Og\nPhoebe/Og\nPhoenicia/Og\nPhoenician/JONSg\nPhoenix/Og\nPhotostat/Sg\nPhotostatted\nPhotostatting\nPhrygia/Og\nPhyllis/Og\nPiB                 # pebibyte\nPiaf/Og             # Edith -\nPiaget/Og\nPianola/g\nPicasso/Og          # Pablo -\nPiccadilly/Og\nPickering/Og\nPickett/Og\nPickford/Og\nPickwick/Og\nPict/Ng             # ancient culture\nPiedmont/Og\nPierce/Og\nPierre/Og\nPierrot/Og\nPikachu/OgS\nPike/ONg\nPilate/OgS          # Pontius -\nPilates/Ng          # exercise\nPilcomayo/Og\nPilgrim/NOSg\nPillsbury/Og\nPinatubo/g\nPincus/Og\nPindar/Og\nPinkerton/ONg\nPinocchio/ONg\nPinochet/Og         # General -\nPinter/Og\nPinterest/ONg       # social media\nPinyin/ON           # romanization\nPippin/Og\nPiraeus/Og\nPirandello/g\nPirelli/NOSg        # surname, tyres\nPisa/Og             # city\nPisces/ONg\nPisistratus/Og\nPissaro/g\nPitcairn/Og\nPitt/OgS\nPittman/Og\nPitts/Og\nPittsburgh/Og\nPittsfield/Og\nPius/g              # pope\nPizarro/Og\nPkwy/N\nPl/                 # platinum\nPlanck/ONg\nPlano/O\nPlantagenet/NOg\nPlasticine/Ng\nPlataea/Og\nPlath/Og\nPlato/Og\nPlatonic/JNQ\nPlatonism/Ogm\nPlatonist/Ng\nPlatte/Og\nPlautus/Og\nPlayStation/NgV     # game console\nPlayboy/ONgJ        # company\nPlaytex/g\nPleiades/Og\nPleistocene/JOg     # geological period\nPlexiglas/OgS\nPliny/Og\nPliocene/JOgS       # geological period\nPlutarch/ONg\nPluto/Og\nPlymouth/ONg\nPlymouths/9\nPm/                 # Promethium\nPo/                 # Polonium\nPocahontas/ONg\nPocatello/Og\nPocono/Sg\nPoconos/Og\nPodgorica/Og\nPodhoretz/g\nPodunk/Og\nPoe/Og\nPogo/g\nPoincare/Og\nPoiret/g\nPoirot/Og\nPoisson/Ng\nPoitier/Og\nPokémon/Ng\nPol/Yg\nPoland/Og\nPolanski/Og\nPolaris/Og\nPolaroid/NgS\nPole/NOSg\nPolish/JNg\nPolitburo/Og\nPolk/Og\nPollard/Og\nPollock/ONg\nPollux/Og\nPolly/Og\nPollyanna/ONg\nPolo/Og\nPoltava/Og\nPolyhymnia/Og\nPolynesia/Og\nPolynesian/JNOSg\nPolyphemus/Og\nPomerania/Og\nPomeranian/JNOg\nPomona/Og\nPompadour/g\nPompeian/JN\nPompeii/Og\nPompey/Og\nPonce/Og\nPondicherry/Og      # old name of Puducherry\nPontchartrain/g\nPontiac/ONSg\nPontianak/Og\nPontic/JOg\nPonzi/OgS\nPooh/Og\nPoole/Og\nPoona/Og            # old name of Pune\nPope/ONg\nPopeye/Og\nPopocatepetl/Og\nPopper/Og\nPoppins/g\nPopsicle/Ng\nPorfirio/g\nPorrima/Og\nPorsche/ONSg\nPort/Og>\nPorter/Og\nPorterville/Og\nPortia/Og\nPortland/Og\nPorto/ONg\nPortsmouth/Og\nPortugal/ONg\nPortuguese/JNOg\nPoseidon/Og\nPost/Og\nPostgreSQL/g\nPotemkin/Og\nPotomac/Og\nPotsdam/Og\nPottawatomie/Og\nPotter/NOg\nPotts/Og\nPottstown/g\nPoughkeepsie/Og\nPound/Og\nPoussin/g\nPowell/Og\nPowerPC/g\nPowerPoint/ONgV\nPowers/NOg\nPowhatan/NOg\nPoznan/Og\nPrada/g\nPrado/Og\nPraetorian/Ng\nPrague/Og\nPraia/Og\nPrakrit/Og\nPratchett/Og\nPratt/Og\nPravda/ONg\nPraxiteles/Og\nPreakness/g\nPrecambrian/JOg\nPreminger/g\nPremyslid/Ng\nPrensa/g\nPrentice/Og\nPres/JN\nPresbyterian/JNSg\nPresbyterianism/NwgS\nPrescott/Og\nPresley/Og\nPreston/Og\nPretoria/Og\nPriam/Og\nPribilof/g\nPrice/Og\nPriceline/g\nPriestley/Og\nPrince/NOg\nPrinceton/Og\nPrincipe/Og\nPriscilla/Og\nPristina/Og         # capital of Kosovo\nPrius/NgS\nPrivate/N\nProcrustean/Jg\nProcrustes/Og\nProcter/Og\nProcyon/Og\nProf/N\nProhibition/O\nProkofiev/Og\nPromethean/JNg\nPrometheus/Og\nProphets/O\nProserpina/Og\nProserpine/Og\nProtagoras/Og\nProterozoic/JOg\nProtestant/NgSJ\nProtestantism/NSg\nProteus/Og\nProudhon/g\nProust/Og           # Marcel -\nProvencal/OgS\nProvence/Og\nProverbs/O\nProvidence/OgS\nProvo/ONg\nProzac/OgS          # drug\nPrudence/Og\nPrudential/g\nPruitt/Og\nPrussia/Og\nPrussian/JONSg\nPrut/g\nPryor/Og\nPsalms/Og\nPsalter/Sg\nPsyche/Og\nPt/                 # Platinum\nPtah/Og\nPtolemaic/Jg\nPtolemy/OgS\nPu/                 # Plutonium\nPuccini/Og\nPuck/Og\nPuckett/Og\nPuducherry/Og\nPuebla/Og\nPueblo/Og\nPuerto/O\nPuget/Og            # - Sound\nPugh/Og\nPulaski/Og\nPulitzer/NOg\nPullman/NOSg\nPunch/ONg\nPune/Og\nPunic/JNOg\nPunjab/Og\nPunjabi/JONwg\nPurana/Og\nPurcell/Og\nPurdue/Og\nPurim/OgS\nPurina/g\nPuritan/NgJ\nPuritanism/Nmg\nPurus/g\nPusan/Og            # old spelling of Busan\nPusey/Og\nPushkin/Og\nPushtu/Og\nPutin/Og\nPutinism/Nmg\nPutinist/NgS\nPutnam/Og\nPuzo/g\nPvt\nPygmalion/ONg\nPygmy/Sg\nPyle/Og\nPym/Og\nPynchon/Og          # Thomas -\nPyongyang/Og\nPyotr/Og\nPyrenees/Og\nPyrex/ONSg          # trademark\nPyrrhic/Jg\nPythagoras/Og\nPythagorean/NgJ\nPythias/Ng\nPython/ONg          # programming language\nPythonic/J\nQ/NO\nQ&A/Ng\nQA/N\nQB/NO\nQC/ON\nQED/N\nQLD/Og              # Queensland\nQM/N\nQWERTY/NJ\nQaddafi/Og\nQantas/Og           # airline\nQatar/Og\nQatari/NgSJ\nQiB                 # quebibyte\nQingdao/Og\nQinghai/Og\nQiqihar/Og\nQom/Og\nQuaalude/ONg        # drug\nQuaker/NgS\nQuakerism/NSg\nQualcomm/g\nQuaoar/Og\nQuasimodo/Ng\nQuaternary/Og\nQuayle/Og\nQue/O\nQuebec/NOg\nQuebecois/JNOg\nQuechua/NOg\nQueen/NOSg\nQueens/ONg\nQueensland/Og\nQuentin/Og\nQuetzalcoatl/Og\nQuezon/Og\nQuincy/ONg\nQuinn/Og\nQuintilian/Og\nQuinton/Og\nQuirinal/JOg\nQuisling/Ng\nQuito/Og\nQuixote/Ng\nQuixotism/Ng\nQumran/Og\nQuonset/Ng\nQuran/O\nQuranic/J\nR/NOgJ\nRAF/Og\nRAM/NOSg\nRBI/NO\nRC/ONVJ\nRCA/NOg\nRCMP/O\nRD/N\nRDA/ON\nRDS/Ng\nREIT/N\nREM/NSg\nRF/NO\nRFC/ONS\nRFD/JNO\nRGB                 # colour model\nRI/ON               # US state (Rhode Island)\nRIF/NV\nRIFA/Og\nRIP/ON\nRISC/N\nRN/NOg\nRNA/Ng\nRNG/NgS             # random number generator\nROFL/V\nROM/NSg             # read-only memory\nROTC/Og\nRP/NOV\nRPM/NgS\nRR/NOV\nRSA/Ng              # encryption standard\nRSFSR/O\nRSI/N\nRSS/NOV             # Really Simple Syndication\nRSV/ON\nRSVP/NOV\nRSVP'd/VtT\nRSVPed/VtT\nRTFM/\nRV/ONSgV\nRa/                 # Radium\nRabat/Og\nRabelais/Og\nRabelaisian/Jg\nRabin/Og\nRachael/Og\nRachel/Og\nRachelle/Og\nRachmaninoff/Og\nRacine/Og\nRadcliff/Og\nRadcliffe/Og\nRae/Og\nRafael/Og\nRaffles/Og\nRagnarok/Og\nRainier/ONg\nRaleigh/Og\nRalph/Og\nRama/Og\nRamada/g\nRamadan/OgS\nRamakrishna/g\nRamanujan/Og\nRamayana/Og\nRambo/ONg\nRamirez/Og\nRamiro/g\nRammstein/Og        # band\nRamon/g\nRamona/Og\nRamos/Og\nRamsay/Og\nRamses/Og\nRamsey/Og\nRamstein/Og         # air base\nRand/NOg\nRandal/Og\nRandall/Og\nRandell/Og\nRandi/g\nRandolph/Og\nRandy/Og\nRangoon/Og          # old name of Yangon\nRankin/Og\nRankine/Og\nRaoul/g\nRaphael/Og\nRappaport/Og\nRapunzel/Og\nRaquel/Og\nRasalgethi/Og\nRasalhague/Og\nRasmussen/Og\nRasputin/Og\nRasta/ON\nRastaban/Og\nRastafarian/NgSJ\nRastafarianism/Ogm\nRather/Og\nRatliff/Og\nRaul/Og\nRavel/Og\nRawalpindi/Og\nRay/Og\nRayBan/g\nRayburn/ONg\nRayleigh/Og\nRaymond/Og\nRaymundo/g\nRb/                 # Rubidium\nRd\nRe/                 # Rhenium\nReading/Og\nReagan/Og\nReaganomics/Ng\nReasoner/Og\nReba/Og\nRebecca/Og\nRebekah/Og\nRecife/Og\nReconstruction/Og\nRedding/Og\nRedeemer/Og\nRedford/Og\nRedgrave/Og\nRedis/g\nRedmond/Og\nRedshift/g\nReebok/g\nReed/Og\nReese/Og\nReeves/Og\nReformation/OgS\nRefugio/Og\nReggie/Og\nRegina/Og\nReginae/g\nReginald/Og\nRegor/g\nRegulus/Og\nRehnquist/Og\nReich/NOg\nReichstag's\nReid/Og\nReilly/Og\nReinaldo/g\nReinhardt/Og\nReinhold/g\nRemarque/g\nRembrandt/ONg\nRemington/ONg\nRemus/Og\nRena/Og\nRenaissance/ONSgJ\nRenascence/O\nRenault/Og\nRene/Og\nRenee/Og\nReno/Og\nRenoir/NOg\nRep/N\nRepresentative\nRepublican/JNSg\nRepublicanism/Nmg\nRequiem/Sg\nResistance\nRestoration/Og\nResurrection/Og\nReuben/ONg\nReunion/Og\nReuters/Og\nReuther/Og\nRev/O\nReva/g\nRevelation/OgS\nRevelations/Og\nRevere/Og\nReverend/Ng\nRevlon/Og\nRex/Og\nReyes/Og\nReykjavík/Og\nReykjavik/Og\nReyna/g\nReynaldo/g\nReynolds/Og\nRf/                 # Rutherfordium\nRhea/Og\nRhee/Og\nRheingau/g\nRhenish/JNg\nRhiannon/Og\nRhine/Og\nRhineland/Og\nRhoda/Og\nRhode/OS\nRhodes/Og\nRhodesia/Og\nRhodesian/JN\nRhonda/Og\nRhone/Og\nRiB                 # robibyte\nRibbentrop/g\nRicardo/Og\nRice/Og\nRich/Og\nRichard/OgS\nRichards/Og\nRichardson/Og\nRichelieu/Og\nRichie/Og\nRichmond/Og\nRichter/ONg\nRichthofen/g\nRick/Og\nRickenbacker/Og\nRickey/ONg\nRickie/Og\nRickover/Og\nRicky/Og\nRico/Og\nRiddle/Og\nRide/g\nRiefenstahl/g\nRiel/Og\nRiemann/Jg\nRiesling/NgS\nRiga/Og\nRigel/Og\nRiggs/Og\nRight/O\nRigoberto/g\nRigoletto/g\nRiley/Og\nRilke/Og\nRimbaud/Og\nRingling/Og\nRingo/Og\nRio/OgS\nRios/Og\nRipley/Og\nRisorgimento/Og\nRita/Og\nRitalin/Og\nRitz/Og\nRivas/Og\nRivera/Og\nRivers/Og\nRiverside/Og\nRiviera/OgS\nRiyadh/Og\nRizal/Og\nRn/                 # Radon\nRoach/Og\nRoanoke/Og\nRob/Og\nRobbie/Og\nRobbin/OgS\nRobbins/Og\nRobby/Og\nRoberson/Og\nRobert/OgS\nRoberta/Og\nRoberto/g\nRoberts/Og\nRobertson/Og\nRobeson/Og\nRobespierre/Og\nRobin/ONg\nRobinson/Og\nRobitussin/Og\nRobles/Og\nRobson/Og\nRobt/g\nRobyn/Og\nRocco/Og\nRocha/Og\nRochambeau/g\nRoche/Og\nRochelle/Og\nRochester/Og\nRock/Og\nRockefeller/OgS\nRockford/Og\nRockhampton/Og\nRockies/ONg\nRockne/g\nRockwell/Og\nRocky/OgS\nRod/Og\nRoddenberry/Og\nRoderick/Og\nRodger/OgS\nRodgers/Og\nRodin/g\nRodney/Og\nRodolfo/g\nRodrick/Og\nRodrigo/g\nRodriguez/Og\nRodriquez/Og\nRoeg/g\nRoentgen/O\nRogan/NgS\nRogelio/g\nRoger/NOSg\nRogers/Og\nRoget/OgV\nRojas/Og\nRoku/g\nRolaids/g\nRoland/Og\nRolando/g\nRolex/Ng\nRolland/Og\nRollerblade/g\nRollins/Og\nRolodex/NgV\nRolvaag/g\nRoman/JNOSg\nRomanesque/JSg\nRomania/Og\nRomanian/JNgS\nRomano/g\nRomanov/Og\nRomans/ONg\nRomansh/Og\nRomanticism/O\nRomany/NOSgJ\nRome/OgS\nRomeo/NOg\nRomero/Og\nRommel/Og\nRomney/ONg\nRomulus/Og\nRon/Og\nRonald/Og\nRonda/Og\nRonnie/Og\nRonny/Og\nRonstadt/Og\nRontgen\nRooney/Og\nRoosevelt/Og\nRoot/Og\nRoquefort/NSg\nRorschach/Ng\nRory/Og\nRosa/Og\nRosales/Og\nRosalie/Og\nRosalind/Og\nRosalinda/g\nRosalyn/Og\nRosanna/Og\nRosanne/Og\nRosario/Og\nRoscoe/Og\nRose/ONg\nRoseann/g\nRoseau/Og\nRosecrans/Og\nRosella/g\nRosemarie/Og\nRosemary/Og\nRosenberg/Og\nRosendo/Og\nRosenthal/OgS\nRosenzweig/Og\nRosetta/Og\nRosicrucian/NgJ\nRosie/ONg\nRoslyn/Og\nRoss/Og\nRossetti/g\nRossini/g\nRostand/g\nRostov/Og\nRostropovich/g\nRoswell/Og\nRotarian/Ng\nRoth/Og\nRothko/g\nRothschild/ONg\nRotterdam/Og\nRottweiler/Ng\nRouault/g\nRourke/Og\nRousseau/Og\nRove/>g\nRover/NOg\nRowe/Og\nRowena/Og\nRowland/Og\nRowling/Og\nRoxanne/Og\nRoxie/Og\nRoxy/ONg\nRoy/Og\nRoyal/ONgJ\nRoyce/Og\nRozelle/Og\nRte\nRu/                 # Ruthenium\nRubaiyat/g\nRubbermaid/g\nRuben/OgS\nRubenesque/J\nRubens/Og\nRubicon/ONSg\nRubik/Og\nRubin/Og\nRubinstein/Og\nRubio/OgS\nRuby/ONg\nRuchbah/Og\nRudolf/Og\nRudolph/Og\nRudy/ONg\nRudyard/Og\nRufus/Og\nRuhr/Og\nRuiz/Og\nRukeyser/g\nRumpelstiltskin/Og\nRumsfeld/Og\nRunnymede/Og\nRunyon/Og\nRupert/ONg\nRush/Og\nRushdie/Og\nRushmore/Og\nRuskin/Og\nRuss/ONgJ\nRussel/Og\nRussell/Og\nRussia/ONg\nRussian/JNSgV\nRussification/Ng\nRusso/Og\nRustbelt/Og\nRusty/Og\nRutan/Og\nRutgers/Og\nRuth/Og\nRutherford/Og\nRuthie/Og\nRutledge/Og\nRwanda/OgS\nRwandan/NOSgJ\nRwy\nRx/N\nRy\nRyan/Og\nRydberg/Og\nRyder/Og\nRyukyu/Og\nSA/JNOV\nSAC/NO\nSALT/Og\nSAM/ONg\nSAP/ONg\nSAR/N               # special administrative region\nSARS/NOg            # disease\nSASE/N\nSAT/NgS\nSATA/Ng             # computing standard\nSBA/NO\nSC/JNOg             # US state (South Carolina)\nSCSI/Og             # computing standard\nSCOTUS/Og           # Supreme Court Of The United States\nSD/ON               # US state (San Diego)\nSDI/NO              # strategic defense initiative\nSE/NOgJ\nSEATO/O\nSEC/ONg             # security and exchange commisson\nSEO/Ng              # search engine optimization\nSF/NOJ              # san francisco\nSGI/Og              # computer company\nSGML/Og             # mark-up language\nSIDS/NOg            # syndrome\nSIM                 # ~ card\nSJ/ON\nSJW/N\nSK/VNO\nSLR/N               # single-lens reflex; self-loading rifle\nSNES/NgS            # game console\nSO/NgSI             # N=significan other; I=someone\nSOB/Ng\nSOP/ONg             # sum-of-parts\nSOS/Ng\nSOSes/N\nSPCA/O\nSPF/NOJ\nSQL/N               # database query language\nSQLite/g\nSRAM/Ng\nSRO/N\nSS/NOJ\nSSA/ONJ\nSSD/NSg             # solid-state drive\nSSE/NOgJ\nSSS/ON\nSST/NO\nSSW/NgJ\nST/NOV\nSTD/JNgS            # sexually transmitted disease; cf. STI, VD\nSTI/Ng              # sexually transmitted infection; cf. STD, VD\nSTOL/N\nSUSE/g\nSUV/NgS             # vehicle type\nSVN/Og              # version control\nSW/ONgJV\nSWAK/\nSWAT/N\nSaaS/Ng             # software as a service\nSaab/ONg            # car brand\nSaar/Og\nSaarinen/g\nSaatchi/Og\nSabbath/Ng\nSabbaths/N\nSabik/Og\nSabin/Og\nSabina/Og\nSabine/NOg\nSabre/g\nSabrina/Og\nSacajawea/Og\nSacco/g\nSachs/Og\nSacramento/Og\nSadat/Og\nSaddam/Og\nSadducee/Ng\nSade/g\nSadie/Og\nSadr/Og\nSafavid/JNg\nSafeway/g\nSagan/ONg\nSaginaw/Og\nSagittarius/ONSg\nSahara/Og\nSaharan/JNg\nSahel/Og\nSaigon/Og\nSaiph/Og\nSakai/NOg\nSakha/NOg\nSakhalin/Og\nSakharov/Og\nSaki/Og\nSaks/g\nSal/OgY\nSaladin/Og\nSalado/Ng\nSalamis/Og\nSalas/Og\nSalazar/Og\nSalem/Og\nSalerno/Og\nSalesforce/g\nSalinas/Og\nSalinger/Og\nSalisbury/Og\nSalish/NOgJ\nSalk/Og\nSallie/Og\nSallust/g\nSally/ONg\nSalome/Og\nSalonika/Og\nSalton/g\nSalvador/Og\nSalvadoran/NSgJ\nSalvadorean/JNgS\nSalvadorian/NgSJ\nSalvatore/Og\nSalween/Og\nSalyut/Ng\nSam/Og\nSamaritan/NOSgJ\nSamarkand/Og\nSammie/NOg\nSammy/NOg\nSamoa/ONg\nSamoan/NSgJ\nSamoset/g\nSamoyed/Ng\nSampson/Og\nSamson/Og\nSamsonite/Og\nSamsung/ONg\nSamuel/Og\nSamuelson/Og\nSan/NOg\nSan'a\nSana/Og\nSanchez/Og\nSancho/Og\nSand/Zg\nSandburg/g\nSanders/Og\nSandinista/Ng\nSandoval/Og\nSandra/Og\nSandringham/Og\nSandy/ONg\nSanford/Og\nSanforized/g\nSang/Og>\nSanger/Og\nSanhedrin/Ng\nSanka/Ng\nSankara/Og\nSanskrit/NgJ\nSanta/ONg\nSantana/Og\nSantayana/g\nSanteria/g\nSantiago/Og\nSantos/Og\nSappho/Og\nSapporo/Og\nSara/Og\nSaracen/NgS\nSaragossa/Og\nSarah/Og\nSarajevo/Og\nSaran/Og\nSarasota/Og\nSaratov/Og\nSarawak/Og\nSardinia/Og\nSargasso/ONg\nSargent/Og\nSargon/Og\nSarnoff/g\nSaroyan/Og\nSarto/g\nSartre/g\nSasha/Og\nSask/O\nSaskatchewan/Og\nSaskatoon/Og\nSasquatch/NgS\nSassanian/JNg\nSassoon/Og\nSat/Ng\nSatan/ONg\nSatanism/Nmg\nSatanist/Ng\nSaturday/NgSV\nSaturn/ONg\nSaturnalia/Og\nSaudi/NOSgJ\nSaul/Og\nSaunders/Og\nSaundra/g\nSaussure/Og\nSauternes/ON\nSavage/Og\nSavannah/ONg\nSavior/Og\nSavonarola/g\nSavoy/ONg\nSavoyard/NOg\nSawyer/Og\nSaxon/NOSgJ\nSaxony/ONg\nSayers/Og\nSb/                 # Antimony\nSc/                 # Scandium\nScala/Og\nScan\nScandinavia/Og\nScandinavian/NgSJ\nScania/ONSg\nScaramouch/ONg\nScarborough/Og\nScarlatti/g\nScheat/Og\nSchedar/Og\nScheherazade/Og\nSchelling/Og\nSchenectady/Og\nSchengen/Og\nSchiaparelli/Og\nSchick/Og\nSchiller/Og\nSchindler/Og\nSchlesinger/Og\nSchliemann/g\nSchlitz/ONg\nSchloss/Og\nSchmidt/ONg\nSchnabel/NOg\nSchnauzer/g\nSchneider/Og\nSchoenberg/Og\nSchopenhauer/Og\nSchrieffer/g\nSchrödinger/Og\nSchroeder/Og\nSchubert/Og\nSchultz/Og\nSchulz/Og\nSchumann/Og\nSchumpeter/Og\nSchuyler/Og\nSchuylkill/Og\nSchwartz/Og\nSchwarzenegger/ONg\nSchwarzkopf/Og\nSchweitzer/Og\nSchweppes/Og\nSchwinger/g\nSchwinn/Og\nScientologist/NSg\nScientology/Og\nScipio/Og\nScopes/g\nScorpio/ONSg\nScorpius/Og\nScorsese/g\nScot/NOSg\nScotch/ONSgJ\nScotchman/NOg\nScotchmen/9g\nScotchwoman/Ng\nScotchwomen/9g\nScotia/Og\nScotland/Og\nScotsman/Ng\nScotsmen/9g\nScotswoman/Ng\nScotswomen/9g\nScott/ONg\nScottie/ONSg\nScottish/JNg\nScottsdale/Og\nScotty/Og\nScrabble/OgS\nScranton/Og\nScriabin/g\nScribner/Og\nScripture/NSg\nScrooge/Og\nScruggs/Og\nScud/Og\nSculley/Og\nScylla/Og\nScythia/Og\nScythian/JNOg\nSe/                 # Selenium\nSeaborg/Og\nSeagate/Og          # hard drive company\nSeagram/Og\nSean/Og\nSears/Og\nSeaside/Og\nSeattle/Og\nSebastian/Og\nSebring/Og\nSec\nSeconal/Ng\nSecretariat/g\nSecretary/O\nSeder/OgS\nSedna/Og\nSeebeck/Og\nSeeger/Og\nSega/ONg\nSegovia/Og\nSegre/g\nSegundo/Og\nSegway/NSV\nSeiko/Og\nSeine/Og\nSeinfeld/g\nSejong/Og\nSelassie/g\nSelectric/g\nSelena/Og\nSeleucid/JNg\nSeleucus/Og\nSelim/Og\nSeljuk/ONgJ\nSelkirk/Og\nSellers/Og\nSelma/ONg\nSelznick/g\nSemarang/Og\nSemele/Og\nSeminole/NOSg\nSemiramis/Og\nSemite/NgS\nSemitic/JOgS\nSemtex/g\nSenate/OgS\nSendai/Og\nSeneca/ONSg\nSenegal/Og\nSenegalese/JNg\nSenghor/g\nSenior/Og\nSennacherib/Og\nSennett/Og\nSensurround/Og\nSeoul/Og\nSep/O\nSephardi/Ng\nSepoy/g\nSept/Og\nSeptember/OgS\nSeptuagint/OgS\nSequoya/g\nSerb/NSgJ\nSerbia/Og\nSerbian/JNgS\nSerena/Og\nSerengeti/Og\nSergei/Og\nSergey/Og\nSergio/g\nSerpens/Og\nSerra/Og\nSerrano/Og\nSet/Og\nSeth/Og\nSeton/Og\nSeurat/g\nSeuss/Og\nSevastopol/Og\nSevern/Og\nSeverus/Og\nSeville/Og\nSevres/g\nSeward/Og\nSextans/Og\nSexton/Og\nSeychelles/O9g\nSeyfert/Og\nSeymour/Og\nSgt/N\nShaanxi/Og\nShabbat/Og\nShackleton/Og\nShaffer/Og\nShah/Og\nShaka/g\nShaker/NOJ\nShakespeare/ONgV\nShakespearean/JNg\nShana/Og\nShandong/Og\nShane/Og\nShang/OgS\nShanghai/ONg\nShankara/g\nShanna/Og\nShannon/Og\nShantung/Og\nShanxi/Og\nShapiro/Og\nSharePoint/g\nShari/Og\nShari'a/Ng\nSharif/Og\nSharlene/Og\nSharon/ONg\nSharp/Og\nSharpe/Og\nSharron/Og\nShasta/ONg\nShaula/Og\nShaun/Og\nShauna/Og\nShavian/JNg\nShavuot/Og\nShaw/Og\nShawn/Og\nShawna/Og\nShawnee/NOSgJ\nShcharansky/g\nShea/Og\nSheba/ONg\nShebeli/g\nSheboygan/Og\nSheena/Og\nSheetrock/NgV\nSheffield/Og\nSheila/Og\nShelby/Og\nSheldon/Og\nShelia/g\nShell/Og\nShelley/Og\nShelly/Og\nShelton/Og\nShenandoah/Og\nShenyang/Og\nShenzhen/Og\nSheol/Og\nShepard/Og\nShepherd/Og\nSheppard/Og\nSheratan/Og\nSheraton/Og\nSheree/Og\nSheri/Og\nSheridan/Og\nSherlock/OgV\nSherman/ONg\nSherpa/NOSg         # ethnicity, language, surname\nSherri/Og\nSherrie/g\nSherry/Og\nSherwood/Og\nSheryl/Og\nShetland/ONSg\nShetlands/ONg\nShevardnadze/Og\nShevat/Og\nShi'ite/JNg\nShields/Og\nShiite/JNgS\nShijiazhuang/Og\nShikoku/ONg\nShillong/Og\nShiloh/Og\nShinto/OgSJ\nShintoism/OgS\nShintoist/NgSJ\nShiraz/ONg\nShirley/Og\nShiva/Og\nShockley/Og\nShort/Og\nShorthorn/g\nShoshone/ONSg\nShostakovitch/g\nShrek/Ng\nShreveport/Og\nShriner/Ng\nShropshire/ONg\nShula/Og\nShylock/ONg\nShylockian/g\nSi/                 # Silicon\nSiam/Og             # old name of Thailand\nSiamese/JONg\nSibelius/g\nSiberia/ONg\nSiberian/JNgS\nSibyl/Og\nSichuan/Og\nSicilian/JONSg\nSicily/Og\nSid/Og\nSiddhartha/Og\nSidney/Og\nSiegfried/Og\nSiemens/Og\nSierpinski/Og\nSierras\nSigismund/g\nSigmund/Og\nSigurd/Og\nSihanouk/g\nSikh/NgJ\nSikhism/O\nSikhs/N\nSikkim/Og\nSikkimese/JONg\nSikorsky/g\nSilas/Og\nSilesia/Og\nSilurian/JNOSg\nSilva/Og\nSilverstone/Og\nSilvia/Og\nSimenon/g\nSimmental/ONg\nSimmons/Og\nSimon/ONg\nSimone/Og\nSimpson/OgS\nSimpsons/Og\nSimpsonville/Og\nSims/ONg\nSinai/Og\nSinatra/Og\nSinbad/Og\nSinclair/Og\nSindbad/Og\nSindhi/JNOg\nSingapore/Og\nSingaporean/JNSg\nSinger/ONg\nSingh/Og\nSingleton/Og\nSinhalese/JNg\nSinkiang/Og\nSioux/Og90          # singular and plural\nSir/NOSg\nSirius/Og\nSistine/Jg\nSisyphean/Jg\nSisyphus/Og\nSiva/Og\nSivan/Og\nSjaelland/g\nSkinner/Og\nSkippy/Og\nSkopje/Og\nSkye/ONg\nSkylab/Og\nSkype/OgV\nSlackware/g\nSlashdot/g\nSlater/Og\nSlav/NSgJ\nSlavic/JNg\nSlavoj/Og           # given name; - Zizek\nSlavonic/OgJ\nSlidell/Og\nSlinky/Ng\nSloan/Og\nSloane/ONg\nSlocum/Og\nSlovak/JNSg\nSlovakia/Og\nSlovakian/JN\nSlovene/JNOSg\nSlovenia/Og\nSlovenian/JNgS\nSlurpee/Ng\nSm/                 # Samarium\nSmall/Og\nSmetana/Og\nSmirnoff/ONg\nSmith/Og\nSmithson/Og\nSmithsonian/JOg\nSmokey/ONg\nSmolensk/Og\nSmollett/Og\nSmuts/g\nSmyrna/O\nSn/                 # Tin\nSnake/Og\nSnapple/g\nSnead/Og\nSnell/Og\nSnickers/Ng\nSnider/ONg\nSnoopy/Og\nSnow/Og\nSnowbelt/g\nSnyder/Og\nSoave/Og\nSoc/N\nSocastee/g\nSocorro/Og\nSocrates/Og\nSocratic/JNg\nSoddy/Og\nSodom/ONg\nSofia/Og\nSoho/Og\nSol/ONg\nSolis/Og\nSolomon/ONg\nSolon/Og\nSolzhenitsyn/g\nSomali/NSgJ\nSomalia/Og\nSomalian/JNgS\nSomme/Og\nSomoza/Og\nSon/Og\nSondheim/Og\nSondra/Og\nSonghai/ONg\nSonghua/Og\nSonia/Og\nSonja/Og\nSonny/Og\nSonora/Og\nSontag/Og\nSony/ONg\nSonya/Og\nSophia/ONg\nSophie/ONg\nSophoclean/Jg\nSophocles/Og\nSopwith/Og\nSorbonne/Og\nSosa/Og\nSoto/Og\nSouphanouvong/g\nSourceforge/g\nSousa/Og\nSouth/Og\nSouthampton/Og\nSoutheast/Sg\nSoutherner/NSg\nSouthey/Og\nSouths/O\nSouthwest/OgS\nSoviet/NgJ\nSoweto/Og\nSoyinka/Og\nSoyuz/Ng\nSp/N\nSpaatz/g\nSpackle/Og\nSpahn/Og\nSpain/Og\nSpam/Og\nSpan/O\nSpanglish/O\nSpaniard/NSg\nSpanish/JONmg\nSparks/Og\nSparta/Og\nSpartacus/Og\nSpartan/NgSJ\nSpartanburg/Og\nSpears/Og\nSpectrum/NgS\nSpeer/Og\nSpence/Og>\nSpencer/Og\nSpencerian/Jg\nSpengler/Og\nSpenglerian/Jg\nSpenser/Og\nSpenserian/JNg\nSperry/Og\nSpetsnaz/9          # plural only\nSphinx/Og\nSpica/Og\nSpider-Man/Og\nSpielberg/Og\nSpillane/Og\nSpinoza/Og\nSpinx/g\nSpiro/Og\nSpirograph/Ng\nSpitsbergen/Og\nSpitz/g\nSpock/ONgV\nSpokane/NOg\nSpringdale/Og\nSpringfield/Og\nSpringsteen/Og\nSprint/g\nSprite/Og\nSputnik/NOg\nSq\nSquanto/g\nSquibb/Og\nSr/                 # Strontium\nSrinagar/Og\nSrivijaya/g\nSt/N\nSta/NO\nStacey/Og\nStaci/Og\nStacie/Og\nStack Exchange/Og\nStack Overflow/Og\nStacy/ONg\nStael/g\nStafford/ONg\nStairMaster/g\nStalin/Og\nStalingrad/Og       # old name of Volgograd\nStalinism/Nmg\nStalinist/JNg\nStallone/Og\nStamford/Og\nStan/ONg\nStandish/Og\nStanford/Og\nStanislav/Og\nStanislavsky/g\nStanley/Og\nStanton/Og\nStaples/Og\nStarbucks/ONg\nStark/ONg\nStarkey/Og\nStarmer/Og\nStarr/Og\nStaten/Og\nStates/ON\nStaubach/Og\nStaunton/Og\nSte/N\nSteadicam/Ng\nSteele/Og\nStefan/Og\nStefanie/Og\nStein/Og>\nSteinbeck/Og\nSteinem/g\nSteiner/Og\nSteinmetz/Og\nSteinway/Ng\nStella/ONg\nStendhal/g\nStengel/Og\nStephan/Og\nStephanie/Og\nStephen/OgS\nStephens/Og\nStephenson/Og\nSterling/Og\nStern/Og\nSterne/Og\nSterno/Ng\nStetson/ONg\nSteuben/Og\nSteubenville/Og\nSteve/ONg\nSteven/OgS\nStevens/Og\nStevenson/Og\nStevie/Og\nStewart/Og\nStieglitz/Og\nStilton/ONSmg\nStimson/Og\nStine/g\nStirling/Og\nStockhausen/Og\nStockholm/OgV\nStockton/Og\nStoic/JNSg\nStoicism/Sg\nStokes/Og\nStolichnaya/Ng\nStolypin/g\nStone/Og\nStonehenge/Og\nStoppard/Og\nStout/Og\nStowe/Og\nStrabo/Og\nStradivari\nStradivarius/Ng\nStrasbourg/Og\nStrauss/Og\nStravinsky/Og\nStreisand/g\nStrickland/Og\nStrindberg/g\nStromboli/Og\nStrong/Og\nStu/Og\nStuart/OgS\nStudebaker/Og\nStuttgart/ONg\nStuyvesant/g\nStygian/JNg\nStyron/Og\nStyx/Og\nSuarez/Og\nSubaru/OgS\nSubsahara/Og\nSucre/Og\nSucrets/g\nSudan/Og\nSudanese/JNg\nSudbury/Og\nSudetenland/Og\nSudoku/g\nSudra/Ng\nSue/ONg\nSuetonius/g\nSuez/Og\nSuffolk/Og\nSufi/Ng\nSufism/Ng\nSuharto/g\nSui/ONgJ\nSukarno/g\nSukkot/O\nSulawesi/Og\nSuleiman/Og\nSulla/g\nSullivan/Og\nSumatra/ONg\nSumatran/JNSg\nSumeria/Og\nSumerian/JNOSg\nSummer/OgS\nSummers/Og\nSumner/Og\nSumter/Og\nSun/ONSg\nSunbeam/Og\nSunbelt/Ng\nSundanese/NOgJ\nSundas/Og\nSunday/NgSV\nSung/Og\nSunkist/g\nSunni/JNOSg\nSunnite/JNgS\nSunnyvale/Og\nSuperbowl/Og\nSuperfund/Ng\nSuperglue/g\nSuperior/Og\nSuperman/ONg\nSupra/NgS           # car model\nSupt\nSurabaya/Og\nSurat/ONg\nSuriname/Og\nSurinamese/NJ\nSurya/Og\nSusan/ONgJ\nSusana/g\nSusanna/Og\nSusanne/Og\nSusie/Og\nSusquehanna/Og\nSussex/ONg\nSutherland/Og\nSutton/Og\nSuva/Og\nSuwanee/g\nSuzanne/Og\nSuzette/g\nSuzhou/Og\nSuzuki/OgS\nSuzy/Og\nSvalbard/Og\nSven/g\nSvengali/Ng\nSverdlovsk/O\nSwahili/ONSg\nSwammerdam/g\nSwanee/g\nSwansea/Og\nSwanson/Og\nSwazi/NOSgJ\nSwaziland/Og\nSwed/On\nSwede/NSg\nSweden/Og\nSwedenborg/Og\nSwedish/OgJm\nSweeney/Og\nSweet/Og\nSwift/Og\nSwinburne/Og\nSwiss/JNOSg\nSwissair/g\nSwitz/O\nSwitzerland/ONg\nSybil/NOg\nSydney/Og\nSykes/Og\nSylvester/Og\nSylvia/Og\nSylvie/Og\nSynge/Og\nSyracuse/ONg\nSyria/Og\nSyriac/ONgJ\nSyrian/JNgS\nSzilard/Og\nSzymborska/g\nT/JNOgdG\nT'ang/Og\nTA/ONVJ\nTARP/O\nTB/ONg\nTBA/N\nTD/N\nTDD/N\nTEFL/N\nTELNET/S\nTELNETTed\nTELNETTing\nTESL/N\nTESOL/N\nTGIF/N\nTHC/N\nTKO/ONg\nTLC/NOg\nTLS/NO\nTM/N\nTN/ON               # US state (Tennessee)\nTNT/NOg\nTOC/NgS             # table of contents\nTOEFL/N\nTQM/N\nTTL\nTV/NSg\nTVA/O\nTVR/NOSg            # car company\nTWA/ONg\nTWX/O\nTX/ONV              # US state (Texas)\nTa/                 # Tantalum\nTabasco/ONSg\nTabatha/Og\nTabernacle/Sg\nTabitha/Og\nTabriz/OgS\nTacitus/Og\nTacoma/Og\nTad/Og\nTadzhik/JNOg\nTaegu/Og\nTaejon/g\nTaft/Og\nTagalog/ONSgJ\nTagore/Og\nTagus/Og\nTahiti/Og\nTahitian/NOSgJ\nTahoe/Og\nTaichung/Og\nTailwind CSS/ONg    # framework\nTainan/O\nTaine/g\nTaipei/Og\nTaiping/ONg\nTaiwan/Og\nTaiwanese/JNOg\nTaiyuan/Og\nTajikistan/Og\nTaklamakan/Og\nTalbot/Og\nTaliban/ONg\nTaliesin/Og\nTalladega/Og\nTallahassee/Og\nTallchief/g\nTalley/Og\nTalleyrand/g\nTallinn/Og\nTalmud/OgS\nTalmudic/J\nTalmudist/N\nTamagotchi/OgS\nTamara/Og\nTameka/Og\nTamera/Og\nTamerlane/Og\nTami/Og\nTamika/Og\nTamil/JNgS\nTammany/Og\nTammi/Og\nTammie/Og\nTammuz/Og\nTammy/Og\nTampa/Og\nTampax/g\nTamra/Og\nTamworth/ONg\nTancred/Og\nTaney/Og\nTanganyika/Og\nTangier/OgS\nTangshan/Og\nTania/Og\nTanisha/Og\nTanner/Og\nTannhauser/g\nTantalus/Og\nTanya/Og\nTanzania/Og\nTanzanian/NSgJ\nTao/ONg\nTaoism/OgS\nTaoist/JNgS\nTara/Og\nTarantino/NOg\nTarawa/Og\nTarazed/Og\nTarbell/Og\nTarget/g\nTarim/Og\nTarkenton/g\nTarkington/Og\nTartary/Og\nTartuffe/g\nTarzan/ONg\nTasha/Og\nTashkent/Og\nTasman/Og\nTasmania/Og\nTasmanian/JNg\nTass/Og\nTatar/ONSgJ\nTate/OgS\nTatum/Og\nTaurus/ONSg\nTavares/Og\nTawney/Og\nTaylor/Og\nTb/                 # Terbium\nTbilisi/Og\nTc/                 # Technetium\nTchaikovsky/Og\nTeasdale/Og\nTechnicolor/NgJ\nTecumseh/Og\nTed/ONg\nTeddy/Og\nTeflon/ONSgJ\nTegucigalpa/Og\nTehran/O\nTelePrompter/g\nTelemachus/Og\nTelemann/g\nTeletype\nTell/Og>\nTeller/Og\nTelugu/ONg\nTemecula/Og\nTempe/O\nTemplar/NgS\nTemple/Og\nTenn/g\nTennessean/JNSg\nTennessee/ONg\nTennyson/Og\nTennysonian/J\nTenochtitlan/Og\nTensorFlow/g        # free software\nTeotihuacan/Og      # archaeological site\nTerence/Og\nTeresa/Og\nTereshkova/g\nTeri/Og\nTerkel/Og\nTerpsichore/Og\nTerr/g\nTerra/Og\nTerran/JNOg\nTerrance/Og\nTerrell/Og\nTerrence/Og\nTerri/Og\nTerrie/Og\nTerry/Og\nTertiary/JOg\nTesla/ONSg          # surname, car company\nTess/Og\nTessa/Og\nTessie/Og\nTestarossa/ONSg     # car model\nTet/ONg\nTethys/Og\nTetons/NOg\nTetris/Og\nTeuton/NgSJ\nTeutonic/JNg\nTevet/Og\nTex/Og              # Man's name - must come before TeX!\nTexaco/g            # company\nTexan/JNgS\nTexarkana/Og\nTexas/Og\nTh/                 # Thorium\nThackeray/Og\nThad/Og\nThaddeus/Og\nThai/JNwSg\nThailand/Og\nThales/Og\nThalia/Og\nThames/Og\nThanh/g\nThanksgiving/OgS\nThant/g\nThar/Og\nTharp/Og\nThatcher/Og\nThatcherism/Ng\nThea/Og\nThebes/Og\nTheia/Og\nTheiler/Og\nThelma/Og\nThemistocles/g\nTheocritus/g\nTheodora/Og\nTheodore/ONg\nTheodoric/Og\nTheodosius/Og\nTheosophy/Nmg\nTheravada/ONg\nTheresa/Og\nTherese/g\nThermopylae/Og\nThermos/O           # trademark\nTheron/Og\nTheseus/Og\nThespian/NgJ\nThespis/g\nThessalonian/JNSg\nThessaloniki/Og     # city\nThessaly/Og\nThiel/Og\nThieu/g\nThimbu/ONg          # capital of bhutan\nThimphu/O           # capital of bhutan\nThiruvananthapuram/Og\nThomas/NOg\nThomism/Ng\nThomistic/Jg\nThompson/ONg\nThomson/Og\nThor/Og\nThorazine/Ng        # medicine\nThoreau/Og\nThornton/Og\nThoroughbred/Ng\nThorpe/Og\nThoth/Og\nThrace/Og\nThracian/JNOg\nThu/NO\nThucydides/Og\nThule/Og\nThunderbird/NOSg    # car model\nThur/NS\nThurber/Og\nThurman/Og\nThurmond/Og\nThursday/NSg\nThutmose/Og\nTi/                 # Titanium\nTiB                 # tebibyte\nTia/Og\nTianjin/Og\nTiber/Og\nTiberius/Og\nTibet/Og\nTibetan/JNgS\nTicketmaster/g      # company\nTiconderoga/Og\nTide/g\nTienanmen/Og\nTiffany/ONg\nTiflis/Og           # old name of Tbilisi\nTigris/Og\nTijuana/Og          # city\nTillich/g\nTillman/Og\nTilsit/Ng\nTim/ONg\nTimbuktu/Og         # city\nTimex/g             # company\nTimmy/Og\nTimon/Og\nTimor/Og\nTimothy/Og\nTimur/Og\nTimurid/NgJ\nTina/ONg\nTing/Og\nTinkerbell/Ng\nTinkertoy/g\nTinseltown/ONg\nTintoretto/g\nTippecanoe/Og\nTipperary/Og\nTirane\nTiresias/Og\nTirol/Og\nTirolean/JN\nTisha/Og\nTishri/Og\nTitan/NOSg\nTitania/Og\nTitanic/JONg\nTitian/Og           # painter\nTiticaca/Og         # lake\nTito/Og             # president\nTitograd/Og         # old name of Podgorica\nTitus/Og\nTitusville/Og\nTl/                 # Thallium\nTlaloc/Og\nTlingit/NOgJ\nTm/                 # Thulium\nTobago/Og\nTobit/ONg\nToby/ONg\nTocantins/Og\nTocqueville/Og\nTod/Og\nTodd/Og\nTogo/Og\nTogolese/JNg\nTojo/ONg            # general\nTokay/g\nTokugawa/Og         # period\nTokyo/Og\nTokyoite/JN\nToledo/OgS\nTolkien/Og          # author\nTolstoy/Og          # author\nToltec/Ng           # ancient civilization\nTolyatti/Og\nTom/ONg\nTomas/g\nTombaugh/g\nTomlin/Og\nTommie/ONg\nTommy/ONg\nTompkins/Og\nTomsk/Og            # city\nTonga/Og\nTongan/NgSJ\nToni/Og\nTonia/Og\nTonto/ONg\nTony/ONg\nTonya/Og\nTopeka/Og\nTopsy/Ng\nTorah/ONg\nTorahs/N\nToronto/Og\nTorquemada/g\nTorrance/Og\nTorrens/Og\nTorres/Og\nTorricelli/Og\nTórshavn/Og         # capital of the Faroe Islands\nTortola/Og\nTortuga/Og\nTorvalds/Og         # linus -\nTory/NOSgJ          # party\nTosca/Ng\nToscanini/g\nToshiba/Ng          # company\nToto/NOg\nToulouse/Og\nTownes/Og\nTownsend/Og\nTownsville/Og       # city\nToynbee/g\nToyoda/Og\nToyota/ONSg         # car company\nTracey/Og\nTraci/Og\nTracie/Og\nTracy/Og\nTrafalgar/Og\nTrailways/g\nTrajan/Og           # emperor\nTran/Og             # surname\nTranscaucasia/Og    # region\nTransvaal/Og\nTransylvania/Og     # region\nTransylvanian/JNg\nTrappist/NSgJ\nTravis/Og\nTravolta/Og         # john -\nTreasury/ONSg\nTreblinka/Og\nTrekkie/Ng\nTrent/Og\nTrenton/Og\nTrev/Og             # short for Trevor\nTrevelyan/Og\nTrevino/Og\nTrevor/Og\nTrey/Og\nTriangulum/Og\nTriassic/JOg        # geologic period\nTricia/Og\nTrident/Og\nTrieste/Og\nTrimurti/Og\nTrina/Og\nTrinidad/Og\nTrinidadian/NgSJ\nTrinity/OgS\nTripitaka/Ng\nTripoli/Og\nTrippe/Og\nTrisha/Og\nTristan/Og\nTriton/Og\nTrivandrum/Og       # old name of Thiruvananthapuram\nTrobriand/Jg\nTroilus/Og\nTrojan/NgSJ\nTrollope/Og\nTrondheim/Og\nTropicana/g\nTrotsky/Og          # leon -\nTroy/Og\nTroyes/O\nTruckee/Og\nTrudeau/Og\nTrudy/Og\nTruffaut/g\nTrujillo/Og\nTruman/Og\nTrumbull/Og\nTrump/OgS\nTrumper/NgS\nTrumpian/JNgS\nTrumpism/Og\nTrumpist/NSgJ\nTrumpy/NSJ>^p\nTruth/g\nTsimshian/NOg\nTsiolkovsky/Og\nTsitsihar/Og\nTsongkhapa/g\nTswana/NOg\nTu/NOg              # former symbol for thulium, now Tm\nTuamotu/Jg\nTuareg/NOg\nTubman/Og\nTucker/Og\nTucson/Og\nTucuman/g\nTudor/NSgJ          # period\nTue/NOS\nTues/Ng\nTuesday/NgS\nTulane/g\nTull/Og\nTulsa/Og\nTulsidas/g\nTums/g\nTungus/NOg\nTunguska/g\nTunis/Og\nTunisia/Og\nTunisian/NgSJ\nTunney/Og\nTupi/NOg\nTupperware/Nwg      # company\nTupungato/Og\nTuranism/Nmg\nTurgenev/g\nTurin/Og            # city\nTuring/Og\nTurk/NOSgJ\nTurkestan/Og\nTurkey/ONgJ\nTurkic/JOgS\nTurkish/OgJ\nTürkiye/Og          # english name of Turkey since 2021\nTurkmenistan/Og\nTurlock/Og\nTurnbull/Og\nTurner/ONg\nTurpin/Og\nTuscaloosa/Og\nTuscan/JNg\nTuscany/Og\nTuscarora/NOSg\nTuscon/g\nTuskegee/ONg\nTussaud/g           # madame -\nTut/Og\nTutankhamen/Og\nTutsi/Ng            # ethnicity\nTutu/Og\nTuvalu/Og\nTuvaluan/NOJ\nTwain/Og            # mark -\nTweed/Og\nTweedledee/g\nTweedledum/g\nTwila/Og\nTwinkies/Ng\nTwitter/ONgV        # company, now x\nTwizzlers/Ng\nTwp\nTy/Og\nTycho/Og            # -brae\nTylenol/ONg         # medicine\nTyler/Og\nTyndale/Og\nTyndall/Og\nTypeScript/NgSV     # programming language\nTyre/Og\nTyree/Og\nTyrolean/JN\nTyrone/ONg\nTyson/Og\nU/                  # Uranium; removed `1`noun `5`adj. `2`proper noun `+`prep., was interfering with linter heuristics. I only know this as an abbreviation for university\nU-turn/NgSVdG\nU.K./Og\nU.S./Og             # United States\nUAE/Og              # United Arab Emirates\nUAR/O\nUART/NgS            # electronics\nUAW/O\nUBS/Og\nUCLA/Og             # university\nUFC/Og              # combat sport promotion\nUFO/NSg\nUHF/NOgJ            # frequency band\nUI/NSg\nUK/Og\nUL/NOVJ\nUN/Og\nUNESCO/Og           # organization\nUNICEF/Og           # organization\nUNIX/Og\nUPC/N\nUPI/ONg\nUPS/NOgV\nURL/NSg\nUS/Og\nUSA/Og\nUSAF/Og\nUSAID/Og            # agency\nUSB/ONSg\nUSCG/O\nUSCIS/O             # immigration agency\nUSD/Nmg             # currency symbol for US dollars\nUSDA/Og\nUSIA/O\nUSMC/O\nUSN/ON\nUSO/NO\nUSP/ONJ\nUSPS/O\nUSS/NO\nUSSR/Og\nUT/ONg              # US state (Utah)\nUTC/O\nUTF-16/Ng\nUTF-32/Ng\nUTF-8/Ng\nUV/JNg\nUbangi/Og\nUber/Og\nUbuntu/g\nUcayali/Og\nUccello/g\nUdall/Og\nUfa/Og\nUganda/Og\nUgandan/NgSJ\nUighur/ONgJ\nUjungpandang/g\nUkraine/Og\nUkrainian/JNOSg\nUlaanbaatar/Og\nUlster/ONg\nUltrasuede/Ng\nUluru/Og\nUlyanovsk/Og\nUlysses/Og\nUmbriel/Og\nUnderwood/NOg\nUngava/Og\nUnicode/ONmg\nUnilever/g\nUnion/NOSg\nUnionist\nUniontown/Og\nUniroyal/g\nUnitarian/NgSJ\nUnitarianism/NOwSg\nUnitas/g\nUnix/ONS\nUnukalhai/g\nUpanishads/Ng\nUpdike/Og\nUpjohn/Og\nUpton/Og\nUr/Og\nUral/OgS\nUrals/Og\nUrania/Og\nUranus/Og\nUrban/Og\nUrdu/OgJ\nUrey/Og\nUriah/Og\nUriel/Og\nUris/g\nUrquhart/Og\nUrsa/Og\nUrsula/Og\nUrsuline/Ng\nUruguay/Og\nUruguayan/NgSJ\nUrumqi/Og\nUsenet/OgS\nUstinov/Og\nUt\nUtah/Og\nUtahan/NgSJ\nUte/ONSg\nUtica/Og\nUtopia/NSg\nUtopian/NOSg\nUtrecht/Og\nUtrillo/g\nUzbek/NOgJ\nUzbekistan/Og\nUzi/NSg\nV/                  # Canadium\nV10/NgS\nV12/NgS\nV6/NgS\nV8/NOSg\nVA/ONJ              # US state (Virginia)\nVAT/Ng              # tax\nVAX                 # old computer\nVAXes\nVBA/Og\nVCR/Ng\nVD/Ng               # venereal disease; cf. STD, STI\nVDT/N               # video display terminal\nVDU/N               # visual display unit\nVF/NJ\nVFW/Og\nVG/JN\nVGA/ON              # computing standard\nVHF/JNg             # frequency band\nVHS/N               # video tape\nVI/NOg\nVIN/NgS\nVIP/NSg\nVISTA\nVJ/NOV\nVLF/Ng\nVM/NgS              # virtual machine\nVMS/g               # operating system\nVOA/ON              # voice of america\nVP/NO               # vice president\nVRAM/Ng             # video memory\nVT/ONJV             # US state (Vermont)\nVTOL/N              # vertical takeoff and landing\nVW/OgS              # car brand; cf. Volkswagen\nVacaville/Og\nVader/g\nVaduz/Og\nVail/Og\nVal/NOg\nValarie/Og\nValdez/Og\nValdosta/Og\nValencia/ONSg\nValenti/Og\nValentin/g\nValentine/ONg\nValentino/ONg\nValenzuela/Og\nValeria/Og\nValerian/Og\nValerie/ONg\nValery/Og\nValhalla/ONg\nValium/NwgS\nValkyrie/NSg\nVallejo/Og\nValletta/Og\nValois/Og\nValparaiso/Og\nValvoline/g\nVan/ONg\nVance/Og\nVancouver/Og\nVandal/NOSgJ\nVanderbilt/Og\nVandyke/Ng\nVanessa/Og\nVang/Og\nVanuatu/Og\nVanzetti/g\nVaranasi/Og\nVarese/Og\nVargas/Og\nVaseline/NSg\nVasquez/Og\nVassar/Og\nVatican/OgJ\nVauban/g\nVaughan/Og\nVaughn/Og\nVauxhall/OgS\nVazquez/Og\nVeblen/Og\nVeda/OgS\nVedanta/Og\nVedic/J\nVega/ONSg\nVegas/ONg\nVegemite/Ogm\nVela/Og\nVelasquez/Og\nVelazquez/Og\nVelcro/OgSV\nVelez/Og\nVelma/Og\nVelveeta/g\nVenetian/JNOSg\nVenezuela/Og\nVenezuelan/NSgJ\nVenice/Og\nVenn/Og\nVentolin/g\nVenus/ONSg\nVenusian/NOgJ\nVera/Og\nVeracruz/Og\nVerde/OgJ\nVerdi/Og\nVerdun/Og\nVerizon/g\nVerlaine/g\nVermeer/Og\nVermont/Og>Z\nVermonter/NgS\nVern/Og\nVerna/Og\nVerne/Og\nVernon/Og\nVerona/Og\nVeronese/JNg\nVeronica/Og\nVersailles/Og\nVesalius/g\nVespasian/Og\nVespucci/g\nVesta/Og\nVesuvius/ONg\nViacom/Og\nViagra/Og\nVic/ONg\nVicente/g\nVichy/ONg\nVicki/Og\nVickie/Og\nVicksburg/Og\nVicky/Og\nVictor/NOg\nVictoria/ONg\nVictorian/JNgS\nVictorianism/Nmg\nVictorville/Og\nVictrola/Ng\nVidal/Og\nVienna/Og\nViennese/JNg\nVientiane/Og\nVietcong/ONg\nVietminh/Og\nVietnam/ONg\nVietnamese/JNOw09g\nVijayanagar/Og\nVijayawada/Og\nViking/NOSg\nVila/Og\nVilla/OgS\nVillarreal/Og\nVillas/g\nVillon/Og\nVilma/g\nVilnius/Og\nVilyui/Og\nVince/Og\nVincent/Og\nVindemiatrix/Og\nVineland/g\nVinnitsa/Og         # old name of Vinnytsia\nVinnytsia/Og\nVinson/Og\nViola/Og\nViolet/Og\nVirgie/Og\nVirgil/Og\nVirginia/Og\nVirginian/JNSg\nVirgo/ONSg\nVisa/ONg\nVisalia/Og\nVisayans/Ng\nVishnu/Og\nVisigoth/Ng\nVisigoths/N\nVistula/Og\nVitim/Og\nVito/g\nVitus/Og\nVivaldi/Og\nVivekananda/g\nVivian/Og\nVivienne/Og\nVlad/Og\nVladimir/Og\nVladislav/Og\nVladivostok/Og\nVlaminck/g\nVlasic/g\nVoIP/O\nVogue/Og\nVolcker/g\nVoldemort/NgV\nVolga/ONg\nVolgograd/Og\nVolkswagen/ONSg\nVolodymyr/Og\nVolstead/Og\nVolta/Og\nVoltaire/Og\nVolvo/ONg\nVonda/Og\nVonnegut/Og\nVoronezh/Og\nVoronoi/Og\nVorster/Og\nVoyager/g\nVuitton/Og\nVulcan/ONg\nVulg\nVulgate/OgS\nW12/NSg\nWA/ON               # US state (Washington)\nWAC/ON\nWASP/Ng\nWATS/Ng\nWC/N\nWHO/Og\nWI/O                # US state (Wisconsin)\nWMD/N\nWNW/NgJ\nWP/ON\nWSW/NgJ\nWTF/NS\nWTO/O\nWV/O                # US state (West Virginia)\nWW/NO\nWWI/O\nWWII/O\nWWW/Og\nWY/O                # US state (Wyoming)\nWYSIWYG/N\nWabash/Og\nWac/N\nWaco/ONg\nWade/Og\nWagner/Og\nWagnerian/JNg\nWahhabi/NgJ\nWaikiki/Og\nWaite/Og\nWakayama/Og\nWake/Og\nWaksman/g\nWald/gn\nWaldemar/Og\nWalden/Og\nWaldensian/JNg\nWaldheim/Og\nWaldo/Og\nWaldorf/NOg\nWales/Og\nWalesa/g\nWalgreen/Sg\nWalgreens/g\nWalker/ONg\nWalkman/ONg\nWall/OgS>\nWall Streeter/NgS\nWallace/Og\nWallenstein/g\nWaller/Og\nWallis/Og\nWalloon/ONgJ\nWalls/Og\nWalmart/Vg\nWalpole/Og\nWalpurgisnacht/Ng\nWalsh/Og\nWalt/ONg>Z\nWalter/Og\nWalters/Og\nWalton/Og\nWanamaker/Og\nWanda/Og\nWang/Og\nWankel/g\nWard/Og\nWare/OgG\nWarhol/Ng\nWaring/Og\nWarner/Og\nWarren/Og\nWarsaw/Og\nWarwick/Og\nWasatch/Og\nWash/Og\nWashington/ONg\nWashingtonian/JNgS\nWassermann/Og\nWaterbury/Og\nWaterford/Og\nWatergate/OgV\nWaterloo/ONSg\nWaters/Og\nWatertown/Og\nWatkins/Og\nWatson/Og\nWatsonville/Og\nWatt/OgS\nWatteau/Og\nWatts/Og\nWatusi/Ng\nWaugh/Og\nWausau/Og\nWave\nWayback Machine/Og\nWayland/Og\nWayne/Og\nWaynesboro/Og\nWeaver/Og\nWeb/Og>\nWebb/Og\nWeber/Og\nWebern/g\nWebster/OgS\nWed/Ng\nWeddell/Og\nWedgwood/Og\nWednesday/NOSg\nWeeks/Og\nWehrmacht/Og\nWei/Og\nWeierstrass/Og\nWeill/g\nWeinberg/Og\nWeinstein/OgS\nWeirton/Og\nWeiss/Og\nWeissmuller/g\nWeizmann/g\nWeldon/Og\nWelland/Og\nWeller/Og\nWelles/Og\nWellington/ONSg\nWells/Og\nWelsh/JNOg\nWelshman/Ng\nWelshmen/9g\nWelshwoman/N\nWenatchee/Og\nWendell/Og\nWendi/Og\nWendy/Og\nWesak/Og\nWesley/Og\nWesleyan/JNOg\nWessex/Og\nWesson/Og\nWest/OgS\nWestern/J>NOSg\nWestinghouse/Og\nWestminster/Og\nWeston/Og\nWestphalia/Og\nWeyden/g\nWezen/Og\nWharton/Og\nWheaties/Og\nWheatstone/Og\nWheeler/Og\nWheeling/Og\nWhig/NSg\nWhipple/ONg\nWhirlpool/g\nWhistler/Og\nWhitaker/Og\nWhite/ONSwgJ\nWhitefield/Og\nWhitehall/Og\nWhitehead/ONg\nWhitehorse/Og\nWhiteley/Og\nWhitfield/Og\nWhitley/Og\nWhitman/Og\nWhitney/Og\nWhitsunday/NOSg\nWhittier/Og\nWi-Fi/Ng\nWicca/Og\nWichita/NOg\nWiemar/g\nWiesel/Og\nWiesenthal/g\nWiggins/Og\nWigner/Og\nWii/Ng\nWikileaks/O\nWikipedia/ONgV\nWiktionary/OgS\nWilberforce/Og\nWilbert/Og\nWilbur/Og\nWilburn/Og\nWilcox/Og\nWilda/g\nWilde/Og>\nWilder/Og\nWiles/Og\nWiley/Og\nWilford/Og\nWilfred/Og\nWilfredo/g\nWilhelm/Og\nWilhelmina/Og\nWilkerson/Og\nWilkes/Og\nWilkins/Og\nWilkinson/Og\nWill/ONg\nWilla/Og\nWillamette/Og\nWillard/Og\nWillemstad/Og\nWilliam/NOSg\nWilliams/Og\nWilliamsburg/Og\nWilliamson/Og\nWilliamsport/Og\nWillie/Og\nWillis/Og\nWilly/Og\nWilma/Og\nWilmer/Og\nWilmington/Og\nWilson/Og\nWilsonian/Jg\nWilton/ONg\nWimbledon/Og\nWimsey/g\nWinchell/Og\nWinchester/ONSg\nWindbreaker/g\nWindex/NgV\nWindhoek/Og\nWindows/Og\nWindsor/OgS\nWindward/g\nWinesap/Ng\nWinfred/Og\nWinfrey/Og\nWinifred/Og\nWinkle/Og\nWinnebago/NOg\nWinnie/Og\nWinnipeg/Og\nWinston/Og\nWinters/Og\nWinthrop/Og\nWis/O\nWisc/O\nWisconsin/Og\nWisconsinite/JNgS\nWise/Og\nWitt/Og\nWittgenstein/Og\nWitwatersrand/Og\nWm/g\nWobegon/g\nWodehouse/Og\nWolf/Og\nWolfe/Og\nWolfenstein/Og\nWolff/Og\nWolfgang/Og\nWollongong/Og\nWollstonecraft/g\nWolsey/Og\nWolverhampton/O\nWonder/Ng\nWonderbra/Ng\nWong/Og\nWood/OgS\nWoodard/Og\nWoodhull/Og\nWoodland/Og\nWoodrow/Og\nWoods/Og\nWoodstock/Og\nWoodward/Og\nWoolf/Og\nWoolite/g\nWoolongong/g\nWoolworth/g\nWooster/Og\nWooten/Og\nWorcester/ONSg\nWorcestershire/ONg\nWordPress/ONg\nWordsworth/Og\nWorkman/Og\nWorms/Og\nWotan/Og\nWovoka/Og\nWozniak/Og\nWozzeck/g\nWrangell/Og\nWren/ONg\nWright/Og\nWrigley/Og\nWroclaw/Og\nWu/Og\nWuhan/Og\nWurlitzer/ONg\nWyatt/Og\nWycherley/Og\nWycliffe/Og\nWyeth/Og\nWylie/Og\nWynn/Og\nWyo\nWyoming/Og\nWyomingite/JNSg\nX/ONgJ\nX-ray/NgSVdG\nXEmacs/g\nXL/NgJ\nXML/O\nXMPP/ONV            # chat protocol\nXS/NJ\nXXL/NJ\nXamarin/g\nXanadu/ONg\nXanthippe/Ng\nXavier/Og\nXe/                 # Xenon\nXenakis/Og\nXenia/Og\nXenophon/Og\nXerox/NgSV\nXerxes/Og\nXhosa/Ng\nXi'an/Og\nXian/ONSgJ\nXiaomi/Og\nXiaoping/g\nXimenes/g\nXingu/ONg\nXinjiang/Og\nXiongnu/Ng\nXizang/Og\nXmas/OgSV\nXochipilli/g\nXuzhou/Og\nY/                  # Yttrium\nYMCA/ONg\nYMHA/O\nYMMV/\nYT/ON\nYWCA/Og\nYWHA/O\nYacc/g\nYahoo/NgV\nYahtzee/ONg\nYahweh/Og\nYahya/Og\nYakima/NOg\nYakut/NOg\nYakutsk/Og\nYale/Og\nYalow/g\nYalta/Og\nYalu/Og\nYamagata/Og\nYamaha/ONg\nYamoussoukro/Og\nYang/Og\nYangon/Og\nYangtze/Og\nYank/NSg\nYankee/NSgV\nYaobang/g\nYaoundé/Og\nYaounde/Og\nYaqui/NOg\nYaren/O\nYaroslavl/Og\nYataro/g\nYates/Og\nYauco/Og\nYb/                 # Ytterbium\nYeager/Og\nYeats/Og\nYekaterinburg/Og\nYellowknife/Og\nYellowstone/Og\nYeltsin/Og\nYemen/Og\nYemeni/JNSg\nYemenite/N\nYenisei/Og\nYerevan/Og\nYerkes/Og\nYesenia/g\nYevtushenko/g\nYggdrasil/Og\nYiB                 # yobibyte\nYiddish/JOg\nYmir/Og\nYoda/Og\nYoknapatawpha/g\nYoko/Og\nYokohama/Og\nYolanda/Og\nYong/Og\nYonkers/Og\nYork/Og\nYorkie/Ng\nYorkshire/ONSg\nYorktown/Og\nYoruba/NOg\nYosemite/Og\nYossarian/g\nYouTube/ONgVG\nYouTuber/NSg\nYoung/Og\nYoungstown/Og\nYpres/Og\nYpsilanti/Og\nYuan/Og\nYucatan/Og\nYugo/Og\nYugoslav/JNOSg\nYugoslavia/Og\nYugoslavian/JNSg\nYukon/ONg\nYule/OgS\nYuletide/NgS\nYuma/ONSg\nYunnan/Og\nYuri/Og\nYves/g\nYvette/ONg\nYvonne/Og\nZ/NSg^nX\nZ80/NOSg\nZachariah/Og\nZachary/Og\nZachery/Og\nZagreb/Og\nZaire/Og\nZairian/N\nZambezi/Og\nZambia/Og\nZambian/NSgJ\nZamboni/Ng\nZamenhof/Og\nZamora/Og\nZane/Og\nZanuck/g\nZanzibar/Og\nZapata/Og\nZaporizhzhia/Og\nZaporozhye/Og       # old name of Zaporizhzhia\nZapotec/NOgJ        # ethnicity\nZappa/Og\nZara/Og\nZarathustra/Og\nZealand/Og>\nZebedee/Og\nZechariah/Og\nZedekiah/Og\nZedong/g            # mao -\nZeffirelli/g\nZeke/Og\nZelenskyy/Og        # president\nZelig/Ng\nZelma/Og\nZen/ONgJ\nZenger/Og\nZeno/OgJ\nZephaniah/Og\nZephyrhills/g\nZephyrus/Og\nZest/g\nZeus/Og\nZhdanov/O\nZhejiang/Og\nZhengzhou/Og\nZhivago/Og          # dr -\nZhukov/Og\nZiB                 # zebibyte\nZibo/Og\nZiegfeld/g\nZiegler/Og\nZiggy/Og\nZika/ON             # virus\nZilog/Og            # semiconductor company\nZimbabwe/Og\nZimbabwean/NSgJ\nZimmerman/Og\nZinfandel/g\nZion/OgS\nZionism/NwSg\nZionist/NSgJ\nZiploc/Ng           # trademark\nŽižek/Og            # slavoj -\nZn/                 # Zinc\nZoë/Og\nZoe/Og\nZola/Og\nZollverein/Ng\nZoloft/Og\nZomba/g\nZorn/Og\nZoroaster/Og\nZoroastrian/NgSJ\nZoroastrianism/OgSw\nZorro/ONg\nZosma/Og\nZr/                 # Zirconium\nZsigmondy/g\nZubenelgenubi/Og\nZubeneschamali/Og\nZukor/Og\nZulu/NOSgJ\nZululand/O\nZuni/JNOSg09\nZurich/Og\nZwingli/Og\nZworykin/g\nZyrtec/g\nZyuganov/g\nZzz\na/~DP(\na lot\na.m./\naah/NV\naardvark/~NSg\nab/~NSVdPY\naback/N\nabacus/NgS\nabaft/P\nabalone/NSg\nabandon/~VdGSNL\nabandonment/~Ng\nabandonware/Nmg\nabase/VGdSL\nabasement/Ng\nabash/VGdSL\nabashed/JYVU\nabashment/Ng\nabate/~VGdSNL\nabated/VtTJU\nabatement/Ng\nabattoir/NgS\nabbe/~NSg\nabbess/~NgS\nabbey/~NgS\nabbot/~NgS\nabbr/~N\nabbrev/NS\nabbreviate/VdGSJNnX\nabbreviation/~NwgS\nabdicate/~VGdSnX\nabdication/~Ng\nabdomen/~NSg\nabdominal/~JN\nabduct/VdSG\nabductee/NgS\nabduction/~NwSg\nabductor/NgS\nabeam/JP\naberrant/JN\naberration/~NgS\naberrational/J\nabet/VSN\nabetted/VtT\nabetter/NSg!_₹\nabetting/V6N\nabettor/NSg\nabeyance/Ng\nabhor/VS\nabhorred/VtTJ\nabhorrence/Ng\nabhorrent/JY\nabhorring/NV6\nabidance/Ng\nabide/~VGSd\nabiding/~JYV6N\nability/~NwgSiE\nabject/JYpNV\nabjection/Nmg\nabjectness/Nmg\nabjuration/NSg\nabjuratory/J\nabjure/VGd>SZ\nabjurer/Ng\nablate/VGdSXnv\nablation/~Ng\nablative/JNgS\nablaze/~J\nable/~J^VNU\nabler/Jc\nabloom/J\nablution/NSg\nabnegate/VGdSn\nabnegation/Ng\nabnormal/~JYN\nabnormality/~NSg\naboard/~P\nabode/~NgSV\nabolish/~VGdS\nabolition/~Ng\nabolitionism/Nmg\nabolitionist/~JNSg\nabominable/J\nabominably/Ry\nabominate/JVdSGnX\nabomination/Ng\naboriginal/~JNgS\naborigine/NSg\naborning/J\nabort/~NSVGdv\nabortion/~NgS\nabortionist/NgS\nabortive/~JYN\nabound/~VdSG\nabout/~PJ\nabove/~PJNg\naboveboard/J\nabracadabra/Ng\nabrade/VGdS\nabrasion/NgS\nabrasive/~JYpNgS\nabrasiveness/Ng\nabreast/JP\nabridge/VdSG\nabridgement/NgS!@_₹\nabridgment/NgS\nabroad/~NPJ\nabrogate/VGdSJXn\nabrogation/Ng\nabrogator/NgS\nabrupt/~J^Y>pVN\nabruptness/Nmg\nabs/~JNgV\nabscess/NgSVdG\nabscissa/NSg\nabscission/Ng\nabscond/VGSd>Z\nabsconder/NgS\nabseil/VdGSNg\nabsence/~NwSg\nabsent/~JYNSPVdG\nabsentee/~NgSJ\nabsenteeism/Nmg\nabsentminded/JYp\nabsentmindedness/Nmg\nabsinth/Nmg!@_₹\nabsinthe/Nmg\nabsolute/~J^pNgSn\nabsolutely/R%\nabsoluteness/Nmg\nabsolution/Ng\nabsolutism/~Nmg\nabsolutist/NgSJ\nabsolve/VdSG\nabsorb/~VGdSr\nabsorbance/~Nmg\nabsorbency/Nmg\nabsorbent/JNSg\nabsorber/NSg\nabsorbing/~JYV\nabsorption/~Nmg\nabsorptive/JN\nabstain/~Vd>GSZ\nabstainer/Ng\nabstemious/JYp\nabstemiousness/Ng\nabstention/~NgS\nabstinence/Ng\nabstinent/JN\nabstract/~NSgJYpVGd\nabstracted/JYpVtT\nabstractedness/Ng\nabstraction/~NwSg\nabstractness/NmgS\nabstruse/JYp\nabstruseness/Ng\nabsurd/~J^>YpN\nabsurdist/NgSJ\nabsurdity/~NSg\nabsurdness/Ng\nabundance/~NSg\nabundant/~JY\nabuse/~NwSVGdEv\nabuse's\nabuser/NgS\nabusive/~JYp\nabusiveness/Ng\nabut/VSL\nabutment/NgS\nabutted/VtT\nabutting/~JV6N\nabuzz/J\nabysmal/JY\nabyss/~NgS\nabyssal/J\nac/~NJ\nacacia/~NgS\nacademe/Ng\nacademia/~Ng\nacademic/~JNSg\nacademical/~JYN\nacademician/~NgS\nacademy/~NSg\nacanthus/NgS\naccede/~VGdS\naccelerate/~VGdSJnX\nacceleration/~Ng\naccelerationism/Nmg\naccelerationist/NSg\naccelerator/~NSg\naccelerometer/NSg\naccent/~NgSVdG\naccented/~VJU\naccentual/J\naccentuate/VGdSn\naccentuation/Nmg\naccept/~VdGSJNB\nacceptability/Nmg\nacceptableness/Nmg\nacceptably/RyU\nacceptance/~NwSg\nacceptation/NgS\naccepted/~VtTJU\naccess/~NwgSVdG\naccessibility/~Nmgi\naccessible/~Ji\naccessibly/Ryi\naccession/~NwgSVdG\naccessor/NgS\naccessorise/VdSG!_₹\naccessorize/VdSG\naccessory/~JNSg\naccident/~NgSJ\naccidental/~JYNSg\nacclaim/~VdGSNg\nacclamation/~Ng\nacclimate/VdSGn\nacclimation/Nmg\nacclimatisation/Nmg!_₹\nacclimatise/VdSG!_₹\nacclimatization/Ng\nacclimatize/VdSG\nacclivity/NSg\naccolade/~NSgV\naccommodate/~VGdSJXn\naccommodating/~JYV6\naccommodation/~Ng\naccompanied/~VtTJU\naccompaniment/~NgS\naccompanist/NSg\naccompany/~VdSG\naccomplice/~NSg\naccomplish/~VdSGL\naccomplished/~JVtTU\naccomplishment/~NwgS\naccord/~NgSVGd\naccordance/~Nmg\naccordant/J\naccording/~VJY\naccordion/~NgSV\naccordionist/NgS\naccost/VGdSNg\naccount/~NgSVdGB\naccountability/~Nmg\naccountable/~JU\naccountancy/~Nmg\naccountant/~NgSJ\naccounted/~VtTU\naccounting/~V6Ng\naccouter/VSGd\naccouterments/N9g\naccoutre/VdSG!@_₹\naccoutrements/N9g!@_₹\naccredit/VSGd\naccreditation/~NwgS\naccredited/~VJU\naccretion/~NgS\naccrual/NgS\naccrue/VGdSN\nacct/N\nacculturate/VdSGn\nacculturation/Ng\naccumulate/~VGdSJXnv\naccumulation/~Ng\naccumulator/~NgS\naccuracy/~NwgSi\naccurate/~JYi\naccurateness/Ng\naccursed/JpV\naccursedness/Ng\naccusation/~NwgS\naccusative/~JNgS\naccusatory/J\naccuse/~VGd>SNZ\naccuser/Ng\naccusing/~VJYN\naccustom/VdGSN\naccustomed/~JVU\nace/~NSgVdGJ\nacerbate/JVdSG\nacerbic/J\nacerbically/Ry\nacerbity/Ng\nacetaminophen/Ng\nacetate/~NgS\nacetic/~J\nacetone/Ng\nacetonic/J\nacetyl/~N\nacetylene/~Ng\nache/VdGSNg\nachene/NgS\nachievable/~JU\nachieve/~VGd>SBLZ\nachievement/~NwSg\nachiever/Ng\naching/V6JYN\nachoo/NgV\nachromatic/J\nachy/J^>\nacid/~JYNwSg\nacidic/~J\nacidification/Nmg\nacidify/VGdS\nacidity/~Nmg\nacidosis/Ng\nacidulous/J\nacknowledge/~VdSG\nacknowledged/~JVtTU\nacknowledgement/NwgS!@_₹\nacknowledgment/~NwSg<\nacme/NSg\nacne/Nmg\nacolyte/NgS\naconite/NgS\nacorn/~NgS\nacoustic/~JNS\nacoustical/~JY\nacoustics/~Nmg\nacquaint/VGSdJr\nacquaintance/~NSg\nacquaintanceship/Ng\nacquainted/~JVtTU\nacquiesce/VdSG\nacquiescence/Nmg\nacquiescent/JY\nacquire/~VGd>SZBL\nacquirement/Ng\nacquisition/~NgS\nacquisitive/JYp\nacquisitiveness/Ng\nacquit/VS\nacquittal/~NgS\nacquitted/~VtTJ\nacquitting/V6\nacre/~NSg\nacreage/~NwgS\nacrid/J^>Yp\nacridity/Nmg\nacridness/Nmg\nacrimonious/JYp\nacrimoniousness/Nmg\nacrimony/Nmg\nacrobat/~NgSV\nacrobatic/~JS\nacrobatically/Ry\nacrobatics/Nmg\nacronym/~NgSV\nacrophobia/Nmg\nacropolis/~NgS\nacross/~PN\nacrostic/NSgJ\nacrylamide/Nmg\nacrylic/~JNgS\nact/~NSVdGrv\nact's\nacting/~JVNmg\nactinium/Nmg\naction/~NwSgJVr\nactionable/~JN\nactioner/NgS\nactivate/~VGSdiern\nactivation/~NwgSier\nactivator/NgS\nactive/~JYNiK\nactive's\nactiveness/Nmg\nactives/N9\nactivism/~Nmg\nactivist/~NgSJ\nactivities/~N9\nactivity/~Ngi\nactor/~NgSr\nactress/~NgS\nactual/~JYN\nactualisation/Ng!_₹\nactualise/VGdS!_₹\nactuality/~NSg\nactualization/Nmg\nactualize/VGdS\nactuarial/J\nactuary/NSg\nactuate/VGdSn\nactuation/Nmg\nactuator/NSg\nacuity/~Nmg\nacumen/~Nmg\nacupressure/Nmg\nacupuncture/NgV\nacupuncturist/NSg\nacute/~JY^>pNgSV\nacuteness/Nmg\nacyclic/J\nacyclovir/Nmg\nacyl/N\nad/~NSgP\nad-free/J\nad nauseam/R\nadage/NgS\nadagio/NgSJ\nadamant/~JYNg\nadapt/~VGd>SJBZv\nadaptability/Nmg\nadaptation/~NgS\nadapter/~Ng\nadaption/~NS\nadaptor/NgS!_₹\nadblocker/NgS\nadd/~Vd>GSNBZ\nadd-on/NgS\naddend/NgSV\naddenda/N9\naddendum/N0g\nadder/~Ng\naddict/~NgSVGdv\naddiction/~NwSg\naddition/~NSg\nadditional/~JYN\nadditive/~JNSg\naddle/VGdSJN\naddress/~NSVGdr\naddress's\naddressable/J\naddressed/~JVtTU\naddressee/~NSg\nadduce/VGdS\nadenine/Nmg\nadenocarcinoma/N\nadenoid/JNSg\nadenoidal/J\nadenosine/Ng\nadept/~JYpNgS\nadeptness/Ng\nadequacy/Ngi\nadequate/~JYVi\nadequateness/Ng\nadhere/~VGdS\nadherence/~Ng\nadherent/~JNSg\nadhesion/~Ng\nadhesive/~JpNwSg\nadhesiveness/Ng\nadiabatic/~JN\nadieu/NgS\nadios/NV\nadipose/~JN\nadj/~N\nadjacency/~Ng\nadjacent/~JYNP\nadjectival/JYN\nadjective/~NgSJV\nadjoin/VGdS\nadjourn/VdGSL\nadjournment/NSg\nadjudge/VGdS\nadjudicate/VGdSnvX\nadjudication/Ng\nadjudicator/NSg\nadjudicatory/J\nadjunct/~NgSJV\nadjuration/NgS\nadjure/VGdS\nadjust/~VGdSrL\nadjustability/Nmg\nadjustable/~JN\nadjuster/NSg\nadjustment/~NgSr\nadjutant/~NSgJ\nadman/Ng\nadmen/N\nadmin/~NwSgV\nadminister/~VdGS\nadministrate/VdSGXnv\nadministration/~Ng\nadministrational/J\nadministrative/~JY\nadministrator/~NgS\nadmirably/Ry\nadmiral/~NgS\nadmiralty/~Ng\nadmiration/~Ng\nadmire/~VGd>SBZ\nadmirer/~Ng\nadmiring/JYV6N\nadmissibility/Nmgi\nadmissible/~Ji\nadmissibly/Ry\nadmission/~Ngr\nadmissions/~N\nadmit/~VSr\nadmittance/~Ng\nadmitted/~VtTY\nadmitting/~V6Nr\nadmix/VGdSN\nadmixture/~NSg\nadmonish/VdSGL\nadmonishment/NgS\nadmonition/NgS\nadmonitory/J\nado/~Ng\nadobe/~NgS\nadolescence/~NSg\nadolescent/~JNSg\nadopt/~VGdSrv\nadoptable/JN\nadopter/NgS\nadoption/~NwSg\nadorableness/Nmg\nadorably/Ry\nadoration/~Nmg\nadore/VGd>SBZ\nadorer/NgS\nadoring/VJYN\nadorn/VGdSNJL\nadorned/~VtTJU\nadornment/NwgS\nadposition/NgS\nadrenal/~JNgS\nadrenalin's\nadrenaline/~Nmg\nadrenergic/JN\nadrift/~J\nadroit/JYp\nadroitness/Ng\nadsorb/VSdG\nadsorbent/JNgS\nadsorption/~NSg\nadulate/VdSGn\nadulation/Ng\nadulator/NgS\nadulatory/J\nadult/~NgSJV\nadulterant/NgS\nadulterate/JVGdSn\nadulterated/JVtTU\nadulteration/Ng\nadulterer/NSg\nadulteress/NgS\nadulterous/J\nadultery/~NSg\nadulthood/~Nmg\nadumbrate/VGdSn\nadumbration/Ng\nadv/~N\nadvance/~VdGSNgJL\nadvancement/~NSg\nadvantage/~NwSgVdGE\nadvantageous/~JYE\nadvent/~NSgV\nadventitious/JY\nadventure/~NwSgVd>GZ\nadventurer/~Ng\nadventuresome/J\nadventuress/NgS\nadventurism/Nmg\nadventurist/NS\nadventurous/~JYp\nadventurousness/Nmg\nadverb/NSgV\nadverbial/JYNSg\nadversarial/~J\nadversary/~NSg\nadverse/~J>Y^p\nadverseness/Ng\nadversity/~NSg\nadversive/J\nadvert/~NSgVdG\nadvertise/~VGd>SLZ\nadvertised/~VtTU\nadvertisement/~NgS\nadvertiser/~Ng\nadvertising/~NmgV\nadvertorial/NSg\nadvice/~Nmg\nadvisability/Nmgi\nadvisable/Ji\nadvisably/Ry\nadvise/~Vd>GSNLZB\nadvised/~JYVtTU\nadvisement/Ng\nadviser/~Ng\nadvisor/~NSg\nadvisory/~JNSg\nadvocacy/~Ng\nadvocate/~NgSVGd\nadvt/N\nadware/Nmg\nadze/NSgV\naegis/~Ng\naeon/NSg!_₹\naerate/VdSGn\naeration/Ng\naerator/NSg\naerial/~JYNSg\naerialist/NgS\naerie/NgS\naerobatic/~JS\naerobatics/Ng\naerobic/~JS\naerobically/Ry\naerobics/Ng\naerodrome/~NgS\naerodynamic/~JS\naerodynamically/Ry\naerodynamics/~Nmg\naerofoil/NSg!_₹\naerogram/NS\naeronautic/JS\naeronautical/~J\naeronautics/~Nmg\naeroplane/NSgV!_₹\naerosol/~NwgSV\naerospace/~NgJ\naery/NJ\naesthete/NgS\naesthetic/~JNSQ\naestheticism/Nmg\naesthetics/~Nmg\næther/Nmg\naether/Nmg\naetiology/Nmg!_₹\nafar/~\naffability/Nmg\naffable/J\naffably/Ry\naffair/~NgS\naffect/~VGdSNE\naffect's\naffectation/NSg\naffected/~JYNVtT\naffecting/~JYV\naffection/~Nm0gE\naffectionate/~JYV\naffections/~N9V\nafferent/JN\naffiance/VGdSN\naffidavit/~NSgV\naffiliate/~NSVGdEn\naffiliate's\naffiliated/~JVtTU\naffiliation/~N0gE\naffiliations/~N9\naffine/~JNV\naffinity/~NwSg\naffirm/~VGdSr\naffirmation/~NgSr\naffirmative/~JYNgS\naffix/NgSVGd\naffixation/Nmg\nafflatus/Ng\nafflict/VGdS\naffliction/~NwSg\naffluence/Nmg\naffluent/~NJY\nafford/~VGdSB\naffordability/NmgU\naffordably/Ry\naffordance/NSg\nafforest/VGSdE\nafforestation/Ng\naffray/VSNg\naffricate/NSg\naffront/VGdSNg\nafghan/~NgS\naficionado/NgS\nafield/~\nafire/J\naflame/J\nafloat/~JP\naflutter/J\nafoot/J\nafore/RPC\naforementioned/~JN\naforesaid/J\naforethought/J\nafoul/\nafraid/~JU\nafresh/\naft/~NJZ\nafter/~P\nafterbirth/Nw0g\nafterbirths/N9\nafterburner/NgS\naftercare/Nmg\naftereffect/NgS\nafterglow/NwSg\nafterimage/NgS\nafterlife/~N0wg\nafterlives/N9\naftermarket/~NgSV\naftermath/~N0g\naftermaths/N9\nafternoon/~NwgS\naftershave/NwSg\naftershock/NSg\naftertaste/NwSg\nafterthought/NSgV\nafterward/~R<\nafterwards/R!@_₹\nafterword/NgS\nagain/~P\nagainst/~PC\nagape/JNg\nagar/~Ng\nagate/NgS\nagave/~Ng\nage/~NwSgVdGz\nageing/VSNgJ!_₹\nageism/Nmg\nageist/JNSg\nageless/JYp\nagelessness/Nmg\nagency/~NwSg\nagenda/~NSg\nagenesis/N\nagent/~NgSr\nagentic/JQ\nageratum/Ng\nagglomerate/JNSgVdGnX\nagglomeration/~NwSg\nagglutinate/JVdGSNXn\nagglutination/Nmg\nagglutinative/J\naggrandise/VGdSL!_₹\naggrandisement/Ng!_₹\naggrandize/VGdSL\naggrandizement/Ng\naggravate/VGdSnX\naggravating/V6JY\naggravation/Nmg\naggregate/~NgSJVGdnX\naggregation/~NwSg\naggregator/~NSg\naggression/~NgwS\naggressive/~JYpN\naggressiveness/Nmg\naggressor/~NSg\naggrieve/VdSG\naggro/NJV\naghast/J\nagile/~JYN\nagility/~Nmg\naging/~V6NgJ<@\nagitate/VGdSXn\nagitation/~Nmg\nagitator/NgS\nagitprop/NgV\nagleam/J\naglitter/J\naglow/J\nagnostic/~JNgS\nagnosticism/Ng\nago/~JP\nagog/J\nagonise/VGdS!_₹\nagonising/JYVN!_₹\nagonist/~NS\nagonize/VGdS\nagonizing/JYVN\nagony/~NwSg\nagoraphobia/Nmg\nagoraphobic/NgSJ\nagrarian/~JNgS\nagrarianism/Nmg\nagree/~VdSEBL\nagreeableness/NgE\nagreeably/RyE\nagreeance/Nmg\nagreeing/~V6NE\nagreement/~NwSgE\nagribusiness/NwgS\nagricultural/~JYN\nagriculturalist/NgS\nagriculture/~Nmg\nagriculturist/NgSJ\nagroclimate/NwgS\nagronomic/J\nagronomist/NgS\nagronomy/Nmg\naground/~J\naguardiente/Nmg\nague/~NgV\nah/~NVI\naha/~\nahchoo/\nahead/~R\nahem/V\nahoy/VN\naid/~NwSgVdG\naide/~NSg\naided/~VtTU\naigrette/NgS\nail/VdGSNJL\naileron/NSg\nailment/~NSg\naim/~NSgVdG\naimless/JYp\naimlessness/Ng\nain't/VA\nair/~NwSgVdGz\nair-conditioned/J\nair-cooled/J\nairbag/~NgS\nairbase/~NSg\nairbed/NS\nairboard/NSg\nairborne/~JN\nairbox/NSg\nairbrush/NgSVdG\nairbus/~NgS\naircon/Nmg\naircraft/~N09g      # singular and plural\naircraftman/N0\naircraftmen/N9\naircrew/~NS\nairdrome/NS\nairdrop/NSgV\nairdropped/VtTJ\nairdropping/V6\nairfare/NwSg\nairfield/~NSg\nairflow/~Nmg\nairfoil/NSg\nairframe/NSg\nairfreight/NmgV\nairguns/N9\nairhead/NSg\nairily/Ry\nairiness/Nmg\nairing/~VNmg\nairless/Jp\nairlessness/Nmg\nairletters/N\nairlift/~NSgVGd\nairline/~NSg>Z\nairliner/~NgS\nairlock/NSg\nairmail/~NSgVGd\nairman/~N0g\nairmen/~N9\nairplane/~NgSV\nairplay/~Nmg\nairport/~NSg\nairship/~NSgV\nairshow/~NS\nairsick/Jp\nairsickness/Ng\nairspace/~Ng\nairspeed/~NwgS\nairstrike/NgSV\nairstrip/~NSg\nairtight/J\nairtime/~Nmg\nairwaves/~9g\nairway/~NgS\nairwoman/N0\nairwomen/N9\nairworthiness/Ng\nairworthy/Jp\nairy/~J^>p\naisle/~NgS\naitch/NgS\najar/JV\naka/~NP\nakimbo/J\nakin/~J\nalabaster/~NmgJ\nalack/\nalacrity/Nmg\nalarm/~NwgSVGd\nalarming/~VJY\nalarmism/Nmg\nalarmist/NSgJ\nalas/~N\nalb/~NSg\nalbacore/NSg\nalbatross/~NgS\nalbeit/~C\nalbinism/Nmg\nalbino/~JNgS\nalbum/~NgSn\nalbumen/Nmg\nalbumin/~Ng\nalbuminous/J\nalchemist/~NSg\nalchemy/~Nmg\nalcohol/~NwSg\nalcoholic/~NgSJQ\nalcoholism/~Nmg\nalcove/NgS\nalder/~NgS\nalderman/~N0g\naldermen/~N9\nalderwoman/N0g\nalderwomen/N9\nale/~NwSgv\naleatory/J\nalehouse/NSg\nalembic/NSg\nalert/~JYpNgSVGd\nalertness/~Nmg\nalewife/N0g\nalewives/N9\nalfalfa/Ng\nalfresco/J\nalga/Ng\nalgae/~N9S\nalgal/~JN\nalgebra/~NwSg\nalgebraic/~JQ\nalgorithm/~NSg\nalgorithmic/JQ\nalias/~NgSVGd\nalibi/~NgSVGd\nalien/~NgSJVGdB\nalienable/JiU\nalienate/JNSVdGn\nalienation/~Nmg\nalienator/NgS\nalienist/NSg\nalight/~VGdSJ\nalign/~VGdSrL\naligned/~VtTJU\naligner/NgS\nalignment/~NwgSr\nalike/~JU\naliment/NgSVdG\nalimentary/J\nalimony/Nmg\nalive/J\naliveness/Nmg\naliyah/~N0gV\naliyahs/N9\nalkali/~N0wg\nalkalies/N9\nalkaline/~JNwgS\nalkalinity/Nmg\nalkalise/VdSG!_₹\nalkalize/VdSG\nalkaloid/NSgJ\nalkyd/NgS\nall/~INgCJDq\nall-new/J\nall-nighter/NgS\nall-rounder/NgS\nall-woman/J\nallative/NSg\nallay/VGdSN\nallegation/~NwgS\nallege/~VGdS\nalleged/~VtTJY\nallegiance/~NgS\nallegoric/J\nallegorical/~JY\nallegorist/NgS\nallegory/~NwSg\nallegretto/NgS\nallegro/~NgSJ\nallele/~NgS\nalleluia/NSgV\nallergen/NSg\nallergenic/J\nallergic/~JNQ\nallergist/NSg\nallergy/~NSg\nalleviate/~VdSGn\nalleviation/Ng\nalley/~NgS\nalleyway/NSg\nalliance/~NwSgV\nalligator/~NgSV\nalliterate/VdSGXnv\nalliteration/Nmg\nalliterative/JY\nallocate/~VdSGYrneB\nallocation/~N0wgr\nallocations/~N9\nallocator/NSge\nallophone/NSg\nallot/VSNL\nallotment/~NwSg\nallotted/~VtT\nallotting/V6\nallover/JN\nallow/~VGdSE\nallowable/~JNU\nallowably/Ry\nallowance/~NwSgV\nalloy/~NgSVGd\nalloyed/JVU\nallspice/Nmg\nallude/~VGdS\nallure/NgSVGdL\nallurement/NgS\nalluring/JYNV\nallusion/~NSg\nallusive/JYp\nallusiveness/Nmg\nalluvial/~JNg\nalluvium/NSg\nally/~VGdSNg\nalma mater/Ng\nalmanac/~NSg\nalmighty/~J\nalmond/~NwgSJ\nalmoner/NSg\nalmost/~R\nalms/~Ng\nalmshouse/NgS\naloe/NwSg\naloft/~\naloha/~NgS\nalone/~J\nalong/~P\nalongshore/J\nalongside/~P\naloof/~JYpP\naloofness/Ng\naloud/~J\nalp/~NSg\nalpaca/NgS\nalpha/~NgSJ\nalphabet/~NSgV\nalphabetic/~JN\nalphabetical/~JY\nalphabetisation/NwSg!_₹\nalphabetise/VGd>SZ!_₹\nalphabetiser/Ng!_₹\nalphabetization/NwSg\nalphabetize/VGd>SZ\nalphabetizer/Ng\nalphanumeric/~JN\nalphanumerical/JYN\nalpine/~JNS\nalready/~R\nalright/~J\nalrighty\nalso/~RC\nalt/~NSJ\naltar/~NgS\naltarpiece/~NSg\nalter/~VGdSNB\nalterable/JNU\nalteration/~NwgS\naltercation/~NSg\naltered/~VtTNJU\nalternate/~JYNSgVdGnvX\nalternation/~Ng\nalternative/~JYNgS\nalternator/NSg\nalthough/~C\naltimeter/~NgS\naltitude/~NgS\nalto/~NSg\naltogether/~N\naltruism/Ng\naltruist/NSg\naltruistic/JQ\nalum/~NSgV\nalumina/Ng\naluminium/Nmg!_₹\naluminum/~Nmg@<\nalumna/Ng\nalumnae/9\nalumni/~9\nalumnus/~Ng\nalveolar/~JNS\nalveoli/N9\nalveolus/N0g\nalways/~R8\nam/~Vln             # 1st person singular present of 'be'\namalgam/~NwSgV\namalgamate/~VGdSJNXn\namalgamation/~NwSg\namanuenses/N9\namanuensis/N0g\namaranth/N0g\namaranths/N9\namaretto/Ng\namaryllis/~NgS\namass/~VGdSN\namateur/~NSgJ\namateurish/JYp\namateurishness/Nmg\namateurism/Nmg\namatory/J\namaze/VGdSNgL\namazement/Nmg\namazing/~VJY\namazon/~NgS\namazonian/~J\nambassador/~NSg\nambassadorial/J\nambassadorship/NgS\nambassadress/NgS\namber/~NmgJV\nambergris/Nmg\nambiance/NmgS\nambidexterity/Ng\nambidextrous/JY\nambience/NmgS!@_₹\nambient/~JN\nambiguity/~NSg\nambiguous/~JYU\nambit/N\nambition/~NwgSV\nambitious/~JYp\nambitiousness/Nmg\nambivalence/Nmg\nambivalent/~JY\namble/NgSVGd>Z\nambler/~Ng\nambrosia/~Nmg\nambrosial/J\nambulance/~NgSV\nambulanceman/N\nambulancemen/9\nambulancewoman/N\nambulancewomen/9\nambulant/JN\nambulate/VdSGXn\nambulation/Ng\nambulatory/~JNSg\nambuscade/NgSVGd\nambush/~NgSVGd\nameliorate/VGdSnv\namelioration/Nmg\namen/~NVB\namenability/Nmg\namenably/Ry\namend/~VGdSNBL\namendment/~NSg\namenity/~NSg\namerce/VGdSL\namercement/NSg\namericano/NwgS\namericium/Nmg\namethyst/NSgJ\namiability/Nmg\namiable/J\namiably/Ry\namicability/Nmg\namicable/~J\namicably/~Ry\namid/~PN\namide/NgS\namidship/S\namidst/~P\namigo/NgS\namine/~NS\namino/~JN\namiss/JN\namitriptyline/N\namity/Ng\nammeter/NSg\nammo/~NmgV\nammonia/~Nmg\nammonium/~N\nammunition/~NmgV\namnesia/~Ng\namnesiac/NgS\namnesic/JNSg\namnesty/~NSgVGd\namniocenteses/N\namniocentesis/Ng\namnion/NgS\namniotic/J\namoeba/~NgS\namoebae/N\namoebic/J\namok/NV\namong/~P\namongst/~P\namontillado/NSg\namoral/JY\namorality/Ng\namorous/~JYp\namorousness/Ng\namorphous/~JYp\namorphousness/Ng\namortisation/NgS!_₹\namortise/VdSGB!_₹\namortization/NSg\namortize/VdSGB\namount/~NgSVGd\namour/~NgS\namoxicillin/N\namp/~NSgVY\namperage/Ng\nampere/NgS\nampersand/NgSV\namphetamine/~NSg\namphibian/~JNgS\namphibious/~JY\namphitheater/~NSg\namphitheatre/NSg!@_₹\namphora/~N0g\namphorae/N9\nampicillin/Nmg\nample/~J^>\namplification/~Ng\namplifier/~NgS\namplify/Vd>SGnXZ\namplitude/~NSg\nampule/NgS\namputate/VGdSnX\namputation/~NwgS\namputee/~NgS\namt/~N\namulet/~NgS\namuse/~VGdSL\namusement/~NgS\namusing/~VJY\namygdala/Ng\namylase/Ng\namyloid/NJ\nan/~DPSe            # removed `7` conjunction: archaic\nanabolism/Ng\nanachronism/NwSg\nanachronistic/JQ\nanaconda/NOSg\nanaemia/Ng!_₹\nanæmic/JN\nanaemic/JN!_₹\nanaemically/Ry!_₹\nanaerobe/NSg\nanaerobic/~JQ\nanaesthesia/Ng!@_₹\nanaesthesiologist/NSg!_₹\nanaesthesiology/Ng!_₹\nanaesthetic/JNgS!@_₹\nanaesthetisation/Ng!_₹\nanaesthetise/VGdS!_₹\nanaesthetist/NgS!@_₹\nanaesthetization/Ng@\nanaesthetize/VGdS@\nanagram/NgSV\nanal/~JYNmV\nanalgesia/Nmg\nanalgesic/~NSgJ\nanalog/~JNgS\nanalogical/JY\nanalogise/VGdS!_₹\nanalogize/VGdS\nanalogous/~JYp\nanalogousness/Ng\nanalogue/~JNSg\nanalogy/~NwSg\nanalysable/J!_₹\nanalysand/NgS\nanalyse/VdSGr!_₹\nanalyser/NSg!_₹\nanalyses/~N9Vhr\nanalysis/~N0wgr\nanalyst/~NSg\nanalytic/~JS\nanalytical/~JY\nanalyzable/J\nanalyze/~VdSGr\nanalyzer/~NSg\nanamorphic/J\nanapest/NSg\nanapestic/JNgS\nanaphylactic/J\nanaphylaxis/~Ng\nanarchic/JQ\nanarchism/~Nmg\nanarchist/~NgSJ\nanarchistic/J\nanarcho-punk/NgSJ\nanarchy/~Nmg\nanathema/NSg\nanathematise/VdSG!_₹\nanathematize/VdSG\nanatomic/J\nanatomical/~JY\nanatomise/VdSG!_₹\nanatomist/NSg\nanatomize/VdSG\nanatomy/~NSg\nancestor/~NSgV\nancestral/~JYN\nancestress/NgS\nancestry/~NSg\nanchor/~NgSVdG\nanchorage/~NgS\nanchorite/NgS\nanchorman/N0g\nanchormen/N9\nanchorpeople/N9\nanchorperson/NSg\nanchorwoman/N0g\nanchorwomen/N9\nanchovy/NSg\nancient/~J>Y^pNSg\nancientness/Nmg\nancillary/~JNSg\nand/~CV\nandante/NSgJ\nandiron/NSg\nandrogen/~Nmg\nandrogenic/J\nandrogynous/J\nandrogyny/Nmg\nandroid/~NSgJ\nanecdotal/~JY\nanecdote/~NgSV\nanemia/~NmgS\nanemic/JNQ\nanemometer/NSg\nanemone/~NSg\nanent/P\nanesthesia/~Nmg\nanesthesiologist/NSg\nanesthesiology/Ng\nanesthetic/JNSg\nanesthetist/NgS\nanesthetization/Nmg\nanesthetize/VGdS\naneurysm/~NSg\nanew/~\nangel/~NgSV\nangelfish/N09gS     # singular and plural, also has a plural in -s\nangelic/~J\nangelica/~Ng\nangelical/JY\nanger/~Nm☁gSVGd\nangina/~Nmg\nangiomyolipoma/NSg\nangioplasty/NSg\nangiosperm/NSg\nangle/~NgSVGd>Z\nangler/NgS\nangleworm/NgS\nanglicise/VGdS!_₹\nanglicism/NS\nanglicize/VGdS\nangling/~VNg\nanglophile/NS\nanglophone/~JNS\nangora/NgS\nangostura/N\nangrily/~Ry\nangry/~J^>V\nangst/~NgV\nangstrom/NgS\nangsty/J>^\nanguish/~NmgSVGd\nangular/~JN\nangularity/NSg\nangulation/N\nanhydrous/~J\naniline/Ng\nanilingus/N\nanimadversion/NgS\nanimadvert/VGSd\nanimal/~NgSJ\nanimalcule/NSg\nanimalistic/J\nanimate/~JVdSGrn\nanimated/~JYVtT\nanimation/~N0wgr\nanimations/~N9\nanimator/~NgS\nanime/~NgS\nanimism/Nmg\nanimist/NSg\nanimistic/J\nanimosity/~NwSg\nanimus/Ng\nanion/~NgS\nanionic/JN\nanise/Nmg\naniseed/Nmg\nanisette/Ng\nankh/~N0g\nankhs/N9\nankle/~NgSV\nanklebone/NgS\nanklet/NgS\nannalist/NSg\nannals/~N9\nanneal/VGdSN\nannelid/NgSJ\nannex/~NgSVGd\nannexation/~NgS\nannihilate/VdSGn\nannihilation/~Nmg\nannihilator/NSg\nanniversary/~NSg\nannotate/VdSGXnv\nannotation/~NwgS\nannotator/NgS\nannounce/~Vd>SGLZ\nannounced/~JVtTU\nannouncement/~NgS\nannouncer/~NgS\nannoy/VGdSN\nannoyance/~NwgS\nannoying/~JYVN\nannual/~JYNgS\nannualised/VtT!_₹\nannualized/JVtT\nannuitant/NSg\nannuity/~NSg\nannul/VSL\nannular/J\nannulled/~JVtT\nannulling/V6N\nannulment/~NwSg\nannulus/N\nannunciation/~NSg\nanode/~NgS\nanodise/VGdS!_₹\nanodize/VGdS\nanodyne/JNgS\nanoint/VGdSL\nanointment/Nmg\nanomalous/~JY\nanomaly/~NSg\nanon/~NSJ\nanonymity/~Ng\nanonymization/Nmg\nanonymize/Vd\nanonymous/~JY\nanopheles/Ng\nanorak/NgS\nanorectic/JNSg\nanorexia/Nmg\nanorexic/JNgS\nanother/~ID\nansatz/NSg\nansatze/9\nansible/NgS\nanswer/~NgSVdGB\nanswerable/JU\nanswered/~JVtT\nanswerphone/NS\nant/~NSgVd\nantacid/NwSgJ\nantagonise/VdSG!_₹\nantagonism/~NmSg\nantagonist/~NSg\nantagonistic/~JQ\nantagonize/VdSG\nantarctic/~J\nante/~NSgV(\nanteater/NgS\nantebellum/~J\nantecedence/Nmg\nantecedent/~JNSg\nantechamber/NSg\nantedate/VGdSN\nantediluvian/JN\nanteing/V\nantelope/~NgS\nantenatal/J\nantenna/~NSg\nantennae/~N\nantepenultimate/JNgS\nanterior/~J\nanteroom/NgS\nanthem/~NgSV\nanther/NgS\nanthill/NSg\nanthologise/VdSG!_₹\nanthologist/NSg\nanthologize/VdSG\nanthology/~NSg\nanthracite/Nmg\nanthrax/~Nmg\nanthropocentric/J\nanthropogenic/J\nanthropoid/JNgS\nanthropological/~JY\nanthropologist/~NSg\nanthropology/~Nmg\nanthropomorphic/~JQ\nanthropomorphise/V!_₹d\nanthropomorphism/Nmg\nanthropomorphize/Vd\nanthropomorphous/J\nanti/~JNSgP(\nanti-Semite/NgS\nanti-Semitic/J\nanti-Semitism/Ng\nanti-piracy/J\nanti-vaccine/J\nanti-vax/J\nanti-vaxxer/NgS\nantiabortion/J\nantiabortionist/NgS\nantiaircraft/JN\nantibacterial/JNwgS\nantiballistic/J\nantibiotic/~NwgSJ\nantibody/~NSg\nantic/JNgSV\nanticancer/J\nanticipate/~VGdSnX\nanticipated/~JVtTU\nanticipation/~Nmg\nanticipatory/J\nanticked/VtT\nanticking/V6\nanticlerical/JN\nanticlimactic/JQ\nanticlimax/NgS\nanticline/NSg\nanticlockwise/J\nanticoagulant/NwgSJ\nanticolonial/JNgS\nanticommunism/Nmg\nanticommunist/JNSg\nanticyclone/NSg\nanticyclonic/J\nantidemocratic/J\nantidepressant/NwgSJ\nantidote/~NgSV\nantifascist/JNgS\nantiferromagnetic/J\nantifreeze/Nmg\nantigen/~NSg\nantigenic/J\nantigenicity/Ng\nantihero/N0g\nantiheroes/N9\nantihistamine/NwSg\nantiknock/JNg\nantilabor/J\nantilabour/J!@_₹\nantilogarithm/NSg\nantimacassar/NgS\nantimalarial/NJ\nantimatter/~Nmg\nantimicrobial/~JN\nantimissile/JN\nantimony/~Nmg\nantineutrino/NSg\nantineutron/NgS\nantinuclear/J\nantioxidant/~NwgSJ\nantiparticle/NSg\nantipasti/N\nantipasto/NgS\nantipathetic/J\nantipathy/NmSg\nantipersonnel/J\nantiperspirant/NwSg\nantiphon/NSg\nantiphonal/NgSJY\nantipodal/JNS\nantipodean/JNgS\nantipodes/Ng\nantipollution/NJ\nantipoverty/J\nantiproton/NgS\nantiquarian/~JNSg\nantiquarianism/Nmg\nantiquary/~NSgJ\nantiquate/VGdS\nantique/~JNSgVdG\nantiquity/~NSg\nantirrhinum/NS\nantiscience/JN\nantiseizure/J\nantisemitic/~J\nantisemitism/~Nmg\nantisepsis/Nmg\nantiseptic/JNSgQ\nantiserum/NgS\nantislavery/J\nantisocial/JYN\nantispasmodic/JNgS\nantisubmarine/J\nantitank/J\nantitheses/N9\nantithesis/~N0g\nantithetic/JN\nantithetical/JY\nantitoxin/NwgS\nantitrust/~J\nantivenin/NwgS\nantivenom/Nm\nantiviral/~JNwgS\nantivirus/NgS\nantivivisectionist/NgSJ\nantiwar/J\nantler/NgSd\nantonym/NSg\nantonymous/J\nantrum/N\nantsy/J^>\nanus/~NgS\nanvil/~NgSV\nanxiety/~NwSg\nanxious/~JYp\nanxiousness/Nmg\nany/~IRDq           # removed `5` adjective. it's determiner/pronoun/adverb only\nanybody/~ISg\nanyhow/~J\nanymore/~\nanyone/~Ig\nanyplace/\nanything/~INSgV\nanytime/~J\nanyway/~R\nanyways/R<@\nanywhere/~IN\nanywise/\naorta/NgS\naortic/~J\napace/\napart/~J            # removed `1` noun, probably imported from Wiktionary's misspelling sense!\napartheid/~NgV\napartment/~NgS\napathetic/JQ\napathy/Nmg\napatite/Ng\nape/~NSgVdGJ\napelike/J\naperitif/NgS\naperture/~NSg\napeshit/Jx\napex/~NgS\naphasia/Nmg\naphasic/JNgS\naphelia/N\naphelion/NSg\naphid/NgS\naphorism/NgSV\naphoristic/JQ\naphrodisiac/JNSg\napiarist/NSg\napiary/NSg\napical/~JYN\napiece/~\napish/JY\naplenty/J\naplomb/Nmg\napocalypse/~NSg\napocalyptic/~JN\napocrypha/Nmg\napocryphal/~JY\napogee/~NgS\napolitical/JYN\napologetic/~JUQ\napologia/NSg\napologise/VGdS!_₹\napologist/~NgS\napologize/~VGdS\napology/~NwSg\napoplectic/JN\napoplexy/NSg\napoptosis/~N\napoptotic/~J\napostasy/~NSg\napostate/~JNSg\napostatise/VGdS!_₹\napostatize/VGdS\napostle/~NgS\napostleship/Ng\napostolic/~J\napostrophe/~NgS\napothecary/NSg\napothegm/NSg\napotheoses/N9V\napotheosis/N0g\napp/~NSg\nappal/VS!_₹\nappall/VGdS\nappaloosa/NgS\napparatchik/NS\napparatus/~NgS\napparel/~NgSVdG\napparelled/VtT!@_₹\napparelling/V6N!@_₹\napparent/~JY\napparition/~NSg\nappeal/~NgSVGd\nappealing/~JYV6NU\nappear/~VSdGrE\nappearance/~NgSEr\nappease/~VGd>SLZ\nappeasement/~NSg\nappeaser/Ng\nappellant/JNSg\nappellate/~JXn\nappellation/~Ng\nappend/VGdSN\nappendage/~NSg\nappendectomy/NSg\nappendices/9\nappendicitis/Ng\nappendix/~NgS\nappertain/VGdS\nappetiser/NgS!_₹\nappetising/JYV!_₹\nappetite/~NSg\nappetizer/NgS\nappetizing/JYNV\napplaud/NSVbGd>Z\napplauder/Ng\napplause/~Nmg\napple/~NwgS\napplejack/Ng\napplesauce/Nmg\napplet/NgS\nappliance/~NSg\napplicability/~Nmg\napplicable/~Ji\napplicably/Ry\napplicant/~NSg\napplication/~NgSr\napplicator/NSg\napplier/NgS\napplique/NSgVd\nappliqueing/V\napply/~VGdSJrnX\nappoint/~VSGdrELv\nappointee/~NSg\nappointment/~NSgE\nappointment's/r\napportion/VGdSrL\napportionment/Ngr\nappose/VGdS\napposite/JYpNnv\nappositeness/Nmg\napposition/NgS\nappositive/JNSg\nappraisal/~NgSr\nappraise/VdSGr\nappraiser/NgS\nappreciable/Ji\nappreciably/R%i\nappreciate/~VdSGXnv\nappreciated/~VtTJU\nappreciation/~Nmg\nappreciative/~JY\nappreciator/NgS\nappreciatory/J\napprehend/VGdS\napprehension/~NmgS\napprehensive/JYpN\napprehensiveness/Ng\napprentice/~NSgVdG\napprenticeship/~NgS\napprise/VGdS\napprize/VGdS\napproach/~VGdSNwgB\napproachability/Nmg\napproachable/JUi\napprobation/~NgE\napprobations/N\nappropriate/~JYpVGdSnX\nappropriated/~VtTJU\nappropriateness/~Ngi\nappropriation/~Ng\nappropriative/J\nappropriator/NSg\napproval/~N0wgE\napprovals/N9\napprove/~VGdSE\napproved/~JVtTU\napprovement/g\napproving/~JYVE\napprox/~J\napproximant/NSg\napproximate/~JYVdSGXn\napproximation/~Nwg\nappurtenance/NSg\nappurtenant/JN\napricot/NwgSJ\napron/~NgSV\napropos/JPN\napse/~NSg\napt/~JY^pNi\napter/Jc\naptitude/~NSg\naptness/Ngi\naqua/~NwSgJ\naquaculture/~Nmg\naqualung/NgSV\naquamarine/~NSgJ\naquanaut/NgS\naquaplane/NgSVGd\naquarium/~NgS\naquatic/~JNSgQ\naquatics/~Ng\naquatint/NSV\naquavit/Ng\naqueduct/~NgS\naqueous/~J\naquifer/~NSg\naquiline/J\narabesque/~NgS\narability/Ng\narachnid/NgS\narachnophobia/N\narbiter/~NSgV\narbitrage/NgSVGd>Z\narbitrager/Ng\narbitrageur/NSg\narbitrament/NSg\narbitrarily/~Ry\narbitrariness/Ng\narbitrary/~JpN\narbitrate/VGdSn\narbitration/~Ng\narbitrator/~NgS\narbor/~NgS\narboreal/~JN\narboretum/~NSg\narborvitae/NSg\narbour/NgS!@_₹\narbutus/NgS\narc/~NSgVdG\narcade/~NgSV\narcane/~J\narch/~NgSVGd>J^Yp(Zv\narchaeological/~JY\narchaeologist/~NSg\narchaeology/~Nmg\narchaic/~NJQ\narchaism/NgS\narchaist/NgS\narchangel/~NgS\narchbishop/~NSg\narchbishopric/~NSg\narchdeacon/~NSg\narchdiocesan/J\narchdiocese/~NgS\narchduchess/~NgS\narchduke/~NgS\narchenemy/NSg\narcher/~NgJ\narchery/~Nmg\narchetypal/~J\narchetype/~NgSV\narchfiend/NgS\narchiepiscopal/J\narchipelago/~NgSV\narchitect/~NSgVdG\narchitectonic/JNS\narchitectonics/Nmg\narchitectural/~JY\narchitecture/~NwgSr\narchitrave/NSg\narchival/~JNm\narchive/~NSgVdG\narchiver/NgS\narchivist/~NgS\narchness/Ng\narchway/NSg\narctic/~JNgS\nardent/~JY\nardor/NgS\nardour/NwgS!@_₹\narduous/~JYp\narduousness/Ng\nare/~VlS            # 2nd person singular & plural / 1st & 3rd person plural present of 'be'\narea/~NwSg\nareal/J\naren't/V\narena/~NgS\nargent/~NmgJ\narginine/~N\nargon/~Nmg\nargosy/NSg\nargot/NwgS\narguable/JiU\narguably/~RyU\nargue/~VGd>SZr\narguer/Ng\nargument/~NwgSV\nargumentation/~Nmg\nargumentative/JYp\nargumentativeness/Ng\nargyle/~NgS\naria/~NSg\narid/~JY\naridity/Nmg\naright/V\narise/~VbGSN\narisen/~VT\naristocracy/~NwSg\naristocrat/~NSg\naristocratic/~JQ\narithmetic/~NmgJ\narithmetical/JYN\narithmetician/NgS\narity/NwgS\nark/~NSg\narm/~NSVGdJEr\narm's\narmada/~NgS\narmadillo/NSg\narmament/~N0wgrE\narmaments/~N9\narmature/NgSV\narmband/NgS\narmchair/~NgSJV\narmed/~JVtTU\narmful/NgS\narmhole/NSg\narmistice/~NOwSg\narmlet/NgS\narmload/NS\narmlock/NgSVdG\narmoire/NgS\narmor/~NgSVGd>Z\narmored/~JVtTU\narmorer/Ng\narmorial/~JN\narmory/~NSg\narmour/NgSVd>GZ!@_₹\narmoured/VJU!@_₹\narmourer/Ng!@_₹\narmoury/NSg!@_₹\narmpit/NgS\narmrest/NSg\narmy/~NSg\naroma/~NgS\naromatherapist/NgS\naromatherapy/Ng\naromatic/~JNgSQ\narose/~Vt\naround/~PJ\narousal/~Nmg\narouse/VGdS\narpeggio/NgSV\narr/~NV\narraign/VdGSNL\narraignment/NSg\narrange/~VdGSNrEL\narrangement/~NSgr\narrangement's/E\narranger/~NSg\narrant/J\narras/~NgS\narray/~NgSVGdE\narrears/Ng\narrest/~NwgSVGdr\narrhythmia/~Nmg\narrhythmic/J\narrhythmical/J\narrival/~NwgS\narrive/~VGdS\narrogance/~Nmg\narrogant/~JY\narrogate/VGdSn\narrogation/Ng\narrow/~NgSV\narrowhead/~NgS\narrowroot/Nmg\narroyo/~NgS\narse/NSgVdG!@₹x_\narsed/VJ\narsehole/NSg!@₹x_\narsenal/~NgS\narsenic/~NmgJ\narsing/V\narson/~NmgV\narsonist/NSg\nart/~NwSgV\nartefact/NgS!_₹\narterial/~JN\narteriole/NgS\narteriosclerosis/Ng\nartery/~NSg\nartful/~JYp\nartfulness/Nmg\narthritic/JNgS\narthritis/~Nmg\narthropod/~NgS\narthroscope/NSg\narthroscopic/J\narthroscopy/N\nartichoke/NwSg\narticle/~NgSVd\narticulacy/Ni\narticular/~J\narticulate/~JYpNSVGdnX\narticulateness/Ngi\narticulation/~Nmg\nartifact/~NSg\nartifice/NwSgV>Z\nartificer/Ng\nartificial/~JY\nartificiality/Ng\nartillery/~Ng\nartilleryman/Ng\nartillerymen/9\nartiness/Ng\nartisan/~NgSJ\nartisanal/J\nartist/~NgSJ\nartiste/NgS\nartistic/~JiQ\nartistry/~Nmg\nartless/JYp\nartlessness/Ng\nartsy/J^>N\nartwork/~NgS\narty/~J^>pN\narugula/N\narum/NSg\nas/~RCP\nasap/\nasbestos/~NmgV\nascend/~VGdSr\nascendance/Ng\nascendancy/~Ng\nascendant/JNSg\nascension/~NgS\nascent/~NgS\nascertain/~VGdSBL\nascertainment/Ng\nascetic/~JNgSQ\nasceticism/Nmg\nascot/~NgS\nascribe/VGdSB\nascription/Ng\naseptic/JNQ\nasexual/~JYN\nasexuality/Nmg\nash/~NwgSVdG\nashamed/~JYU\nashcan/NgSVJ\nashen/J\nashlar/~NgS\nashore/~\nashram/~NgS\nashtray/NSgV\nashy/J^>\naside/~JNgS\nasinine/JY\nasininity/NSg\nask/~VdGSN\naskance/JV\nasked/~VtTJU\naskew/~J\naslant/JP\nasleep/~J\nasocial/JN\nasp/~NSgnX\nasparagus/Nmg\naspartame/Nmg\naspect/~NwgSV\naspen/~JNg\nasperity/NSg\naspersion/NgS\nasphalt/~NmgSVdG\nasphodel/NSg\nasphyxia/Ng\nasphyxiate/VdSGXn\nasphyxiation/Ng\naspic/~NwgSJ\naspidistra/NgS\naspirant/NgSJ\naspirate/NgSVGdJnX\naspiration/~Nmg\naspirational/JY\naspirator/NSg\naspire/~VGdS\naspirin/~NgS\nass/~NwgSJx\nassail/VGdSB\nassailable/JU\nassailant/~NSgJ\nassassin/~NSgV\nassassinate/~VGdSNnX\nassassination/~Ng\nassault/~NgSVd>G\nassay/~NgSVGd>Z\nassayer/Ng\nassemblage/~NSg\nassemble/~VGSdrE\nassembler/~NgS\nassemblies/~N\nassembly/~Ngr\nassemblyman/~Ng\nassemblymen/9\nassemblywoman/Ng\nassemblywomen/9\nassent/~VGdSNg\nassert/~VGdSNrv\nassertion/~Ngr\nassertions/~N\nassertive/~JYp\nassertiveness/Ng\nassess/~VGdSrL\nassessment/~NSgr\nassessor/NgS\nasset/~NgS\nasseverate/VdSGn\nasseveration/Ng\nasshole/NgSx\nassiduity/Ng\nassiduous/JYp\nassiduousness/Ng\nassign/~VGdSNrL\nassign's\nassignable/J\nassignation/NgS\nassigned/~JVtTU\nassignee/NgS\nassigner/NgS\nassignment/~NgSr\nassignor/NgS\nassimilate/~VdGSNn\nassimilated/~VtTU\nassimilation/~Nmg\nassimilationist/NgS\nassist/~VGdSNgv\nassistance/~Nmg\nassistant/~JNSg\nassisted/~VtTU\nassize/NgSV\nassn/N\nassoc/~N\nassociate/~JNSVdGEnv\nassociate's/N\nassociation/~Nw0gE\nassociations/~N9\nassociativity/Nm\nassonance/Nmg\nassonant/JNgS\nassort/VGdSL\nassortative/J\nassortment/~NgS\nasst/N\nassuage/VGdS\nassume/~VGdSB\nassumption/~NwSg\nassumptive/J\nassurance/~NwSgr\nassure/~VGdSr\nassured/~VtTSJYNg\nastatine/Ng\naster/~NgSE\nasterisk/~NgSVGd\nastern/J\nasteroid/~NgS\nasthma/~Ng\nasthmatic/JNSgQ\nastigmatic/JN\nastigmatism/NSg\nastir/J\nastonish/VdSGL\nastonishing/~JYV\nastonishment/Nmg\nastound/VGdSJ\nastounding/~V6JY\nastraddle/P\nastrakhan/Ng\nastral/~JN\nastray/~\nastride/P\nastringency/Ng\nastringent/NSgJY\nastrolabe/NSg\nastrologer/~NSg\nastrological/~JY\nastrologist/NgS\nastrology/~Nmg\nastronaut/~NgS\nastronautic/JS\nastronautical/J\nastronautics/~Ng\nastronomer/~NSg\nastronomic/J\nastronomical/~JY\nastronomy/~Nmg\nastrophysical/~J\nastrophysicist/~NgS\nastrophysics/~Ng\nastute/~JY^>p\nastuteness/Nmg\nasunder/R\nasylum/~NwSg\nasymmetric/~J\nasymmetrical/~JY\nasymmetry/~NwSg\nasymptomatic/~JN\nasymptote/NgS\nasymptotic/~JQ\nasync/J             # abbreviation of \"asynchronous\"\nasynchronicity/Nmg\nasynchronous/~JY\nasynchrony/Nmg\nat/~PN              # removed `V` and `I` obscure verb and obsolete dialectal pronoun\natavism/Nmg\natavist/NSg\natavistic/J\nataxia/~Ng\nataxic/JNgS\nate/~VtN\natelier/~NSg\natheism/~Nmg\natheist/~NgSJV\natheistic/~J\natherosclerosis/Nmg\natherosclerotic/J\nathirst/J\nathleisure/Nmg\nathlete/~NgS\nathletic/~JNSQ\nathleticism/Nmg\nathletics/~Ng\nathwart/P\natilt/JP\natishoo/N\natlas/~NgS\natmosphere/~NwgS\natmospheric/~JSQ\natmospherics/Ng\natoll/~NgS\natom/~NSg\natomic/~JNQ\natomicity/Nmg\natomics/Nm          # like 'physics' looks plural but is a mass noun\natomisation/NwgS!_₹\natomise/VGd>SZ!_₹\natomiser/NgS!_₹\natomistic/J\natomization/NwgS!_₹\natomize/VGd>SZ\natomizer/NgS\natonal/JY\natonality/Nmg\natone/VGdSL\natonement/~Nmg\natop/~P\natria/N9\natrial/~J\natrioventricular/J\natrium/~N0g\natrocious/JYp\natrociousness/Ng\natrocity/NSg\natrophy/~NmSgVdG\natropine/Nmg\nattach/~VGdSrL\nattache/NgB\nattached/~VtTJU\nattachment/~Ngr\nattachments/~N\nattack/~NgSVGd>JZ\nattacker/~Ng\nattain/~VGdSr\nattainability/Nmg\nattainable/JNU\nattainder/Ng\nattainment/~NSg\nattaint/VSdG\nattar/Ng\nattempt/~VdGSNr\nattempt's\nattend/~VSd>GZ\nattendance/~NSg\nattendant/~NSgJ\nattended/~VtTJU\nattendee/NSg\nattention/~N0gi\nattentional/J\nattentions/N9\nattentive/JYpi\nattentiveness/Ngi\nattenuate/VdSGJn\nattenuation/~Ng\nattest/~VSdG\nattestation/NSg\nattested/~VtTJU\nattic/~NSg\nattire/~NSgVdG\nattitude/~NSgV\nattitudinal/JN\nattitudinise/VGdS!_₹\nattitudinize/VGdS\nattn/N\nattorney/~NgSV\nattract/~VSGdvB\nattractant/NgS\nattraction/~NwgS\nattractive/~JYU\nattractiveness/~Nmg\nattractor/NgS\nattribute/~NSgVdGnvBX\nattributed/~VtTJU\nattribution/~Nmg\nattributive/JYNgS\nattrition/~NmgV\nattune/VdSG\natty/N\natwitter/J\natypical/~JYN\naubergine/NwgS\nauburn/~NgJ\nauction/~NgSVdG\nauctioneer/NSgV\naudacious/JYp\naudaciousness/Ng\naudacity/Nmg\naudibility/Nmgi\naudible/~JVSNg\naudibly/Ryi\naudience/~NgS\naudio/~JNgS\naudiobook/~NSg\naudiological/J\naudiologist/NSg\naudiology/Ng\naudiometer/NSg\naudiophile/NSgJ\naudiotape/NwSgV\naudiovisual/~JS\naudiovisuals/Ng\naudit/~NgSVGd\naudition/~NSgVdG\nauditor/~NgS\nauditoria/N9\nauditorium/~NSg\nauditory/~JN\nauger/~NgSV\naught/INgSV\naugment/~Vd>GSNZ\naugmentation/~NwgS\naugmentative/JN\naugmenter/Ng\naugur/NgSVGd\naugury/NSg\naugust/~J^Y>pVN\naugustness/Ng\nauk/~NSg\naunt/~NSg\nauntie/~NSgV\naura/~NgS\naural/JY\naureole/NSgV\naureus/~N\nauricle/NSg\nauricular/JN\naurochs/Ng\naurora/~NSg\nauscultate/VGdSnX\nauscultation/~Ng\nauspice/NSgV\nauspicious/~JYi\nauspiciousness/Ng\naustere/~J>Y^\nausterity/~NSg\naustral/~JN\nauteur/NgS\nauth/NV\nauthentic/~JiU\nauthentically/Ry\nauthenticate/VGdSJXnr\nauthenticated/VtTU\nauthentication/~Nmg\nauthenticator/Sg\nauthenticity/~Ng\nauthor/~NSgVdG\nauthoress/NgS\nauthorial/J\nauthorisation/NwSg!_₹\nauthorise/VGdS!_₹\nauthorised/JVtT!_₹\nauthoritarian/~JNgS\nauthoritarianism/Nmg\nauthoritative/~JYp\nauthoritativeness/Nmg\nauthority/~NwSg\nauthorization/~NwgS\nauthorize/~VGdSr\nauthorized/~JVtT\nauthorship/~Nmg\nautism/~Nmg\nautistic/~JN\nauto/~JNgSV(\nautobahn/~NSg\nautobiographer/NSg\nautobiographic/J\nautobiographical/~JY\nautobiography/~NwSg\nautoclave/NgSVJ\nautocomplete/VSNmg\nautocompletion/NwgS\nautocorrect/VGdSNmg\nautocracy/NSg\nautocrat/NSg\nautocratic/~JQ\nautocross/NV\nautodetection/Nmg\nautodidact/NSg\nautofocus/NmgSVGd\nautofocussed/VtT\nautofocusses/Vh\nautofocussing/V6\nautogenerate/VSGd\nautograph/~N0gJVbdG\nautographs/N9Vh\nautoimmune/~J\nautoimmunity/NwgS\nautoload/VSdG\nautomagical/JY\nautomaker/~NSg\nautomata/~N9Sg\nautomate/VGdSn\nautomatic/~JNSgQ\nautomation/~NwgS\nautomatise/VGdS!_₹\nautomatism/Nmg\nautomatize/VGdS\nautomaton/~N0Sg\nautomobile/~NSgVdGJ\nautomobilia/Nmg\nautomotive/~JN\nautonomic/~J\nautonomous/~JY\nautonomy/~Nmg\nautophagic/J\nautopilot/NSgV\nautoplay/NSgVdG\nautopsy/~NSgVGd\nautoregressive/J\nautorun/NgVG\nautoselect/VGdS\nautostereogram/NgS\nautosuggestion/N\nautotagging/NmgS\nautothysis/Nmg\nautoworker/NgS\nautumn/~NwSgV\nautumnal/J\naux/~J\nauxiliary/~JNSg\nauxin/Ng\nav/~J>NVZ\navail/~VGdSNgJB\navailability/~NmgU\navailable/~JU\navalanche/~NSgV\navant-garde/NgJ\navarice/Nmg\navaricious/JY\navast/\navatar/~NgS\navaunt/NV\navdp/N\nave/~N\navenge/~VGd>SNZ\navenger/~Ng\navenue/~NgS\naverage/~NgSJYVGd\naverred/VtT\naverring/V6\naverse/JVXn\naversion/~Ng\navert/~VGdS\navg/~N\navian/~JN\naviary/~NSg\naviate/VdGSN\naviation/~Ng\naviator/~NgS\naviatrices/N9\naviatrix/NgS\navid/~JY\navidity/Ng\navionic/JS\navionics/~N9wg\navitaminosis/Nmg\navocado/NSgJ\navocation/NgS\navocational/J\navoid/~VSdGB\navoidable/JNU\navoidably/RyU\navoidance/~Nmg\navoidant/JN\navoirdupois/Ng\navouch/VdGSN\navow/VdGSNE\navowal/NSgE\navowed/~VtTJY\navuncular/JY\naw/~N\nawait/~VGdSN\nawake/~JVGS\nawaken/~VGdSr\nawakening/~JNSgV6\naward/~NgSVGd\nawardee/NS\naware/~JpVU\nawareness/~NmgU\nawash/J\naway/~JV\nawe/~Nm☁SgVdG\naweigh/J\nawesome/~JYpN\nawesomeness/Nmg\nawestruck/J\nawful/~JYp\nawfuller/Jc\nawfullest/Ju\nawfulness/Nmg\nawhile/\nawkward/~J>Y^pN\nawkwardness/Nmg\nawl/NSg\nawn/NSgGz\nawning/NgS\nawoke/~Vt\nawoken/VT\nawry/~J\nax/~NgSVdG<\naxe/NSgVdG!₹\naxial/~JYN\naxiom/~NSg\naxiomatic/JQ\naxis/~Ng\naxle/~NgS\naxletree/NSg\naxolotl/NSg\naxon/~NgS\nayah/Ng\nayahs/N\nayatollah/~N0g\nayatollahs/N9\naye/~NSg\nazalea/NSg\nazimuth/~N0g\nazimuths/N9\nazure/~NSgJV\nb/~J^VdK\nbaa/~NSgVdG\nbabble/VGd>SNmgZ\nbabbler/~Ng\nbabe/~NSg\nbabel/~NgS\nbaboon/~NgS\nbabushka/NSg\nbaby/~NSgJ^>VGd\nbabyhood/Nmg\nbabyish/J\nbabysat/Vt\nbabysit/VbS\nbabysitter/NgS\nbabysitting/V6Nmg\nbaccalaureate/~NSg\nbaccarat/Nmg\nbacchanal/JNgS\nbacchanalia/Ng\nbacchanalian/JNgS\nbaccy/N\nbachelor/~NSg\nbachelorette/NSg\nbachelorhood/Nmg\nbacillary/J\nbacilli/N9\nbacillus/~N0g\nback/~J>NSgVGdzZ\nback door/NgSVGd\nback off/V/\nback to back/R\nback-to-back/J\nback up/V/\nbackache/NgS\nbackbench/JNS\nbackbit/V\nbackbite/VG>SNZ\nbackbiter/Ng\nbackbitten/V\nbackboard/NSgV\nbackbone/~NwgS\nbackbreaking/J\nbackchat/NV\nbackcloth/N0\nbackcloths/N9\nbackcomb/VdGSN\nbackcountry/Ng\nbackdate/VGdSN\nbackdrop/~NgSV\nbacker/~NgJ\nbackfield/NSg\nbackfill/Sg\nbackfire/VGdSNg\nbackflip/VSNg\nbackflipped/VtT\nbackflipping/V6NgJ\nbackgammon/NmgV\nbackground/~J>NgSVZ\nbackgrounder/Ng\nbackhand/NgSVd>GJZ\nbackhanded/JYV\nbackhander/Ng\nbackhoe/NgSV\nbacking/~NmgJVtT\nbacklash/~NgSV\nbackless/J\nbacklight/NgSVG\nbacklit/VJ\nbacklog/~NgSV\nbacklogged/VtTJ\nbacklogging/V6\nbackpack/~NgSVGd>Z\nbackpacker/NgS\nbackpacking/VNmg\nbackpedal/VdGSN\nbackpedalled/VtT!@_₹\nbackpedalling/V6N!@_₹\nbackplane/NSg\nbackport/VdGSNg\nbackpressure/Nmg\nbackpropagate/VdGS\nbackpropagation/NmSg\nbackrest/NSg\nbackronym/NSg\nbackroom/NSgJ\nbackscratching/VNg\nbackseat/NSgV\nbackside/NSgJ\nbackslapper/NSg\nbackslapping/V6Nmg\nbackslash/~NgSV\nbackslid/V\nbackslide/V>GSNZ\nbackslider/Ng\nbackspace/NSgVdG\nbackspin/NgV\nbacksplash/NgSVdG\nbackstabber/NgS\nbackstabbing/V6N\nbackstage/~JNg\nbackstair/JNS\nbackstop/NSgV\nbackstopped/VtT\nbackstopping/V6\nbackstory/~NS\nbackstreet/~JNS\nbackstretch/NgS\nbackstroke/~NgSVGd\nbacktalk/NgV\nbacktick/NgS\nbacktrace/NgSVdG\nbacktrack/NSVdG\nbackup/~NgSJ\nbackward/~JYpNS\nbackwardness/Nmg\nbackwash/NmgV\nbackwater/NSgV\nbackway/NgS\nbackwoods/NgJ\nbackwoodsman/N0g\nbackwoodsmen/N9\nbackyard/~NSg\nbacon/~Nmg\nbacteria/~N9g\nbacterial/~J\nbactericidal/JYN\nbactericide/NwSg\nbacteriologic/J\nbacteriological/J\nbacteriologist/NSg\nbacteriology/Ng\nbacterium/~N0g\nbad/~JYpNgV\nbadass/NgSJ\nbadder/Jc\nbaddest/Ju\nbaddie/NgS\nbade/~Vt\nbadge/~NgSV>Z\nbadger/~NgVGd\nbadinage/NgV\nbadlands/~Ng\nbadman/N0g\nbadmen/N9\nbadminton/~Nmg\nbadmouth/VGd\nbadmouths/Vh\nbadness/Nmg\nbaffle/VGd>SNgZL\nbafflement/Nmg\nbaffler/Ng\nbafflingly/Ry%\nbag/~NSgV\nbagatelle/NSgV\nbagel/NgSV\nbagful/NgS\nbaggage/~Nmg\nbagged/VtTJ\nbaggie/Ng\nbaggily/Ry\nbagginess/Nmg\nbagging/V6N\nbaggy/J^>pNS\nbagpipe/NgSV>Z\nbagpiper/Ng\nbaguette/NgS\nbah/~N\nbaht/~NSg09P        # singular and plural, also has a plural in -s\nbail/~NSgVGdB\nbailey/~NS\nbailiff/~NS\nbailiwick/NgS\nbailment/NgS\nbailout/~NSg\nbailsman/N0g\nbailsmen/N9\nbairn/NgSV\nbait/~NwSgVGdJ\nbaize/NgV\nbake/~Vd>GSNgZ\nbaked/~VtTJU\nbaker/~NgS\nbakery/~NSg\nbakeshop/NgS\nbaklava/Nmg\nbaksheesh/NgV\nbalaclava/NgS\nbalalaika/NgS\nbalance/~NwSVdGU\nbalance's\nbalancer/Sg\nbalboa/~NSg\nbalcony/~NSg\nbald/~J^Y>pNSVGd\nbalderdash/NmgV\nbaldfaced/J\nbaldness/Nmg\nbaldric/NSg\nbaldy/~NS\nbale/~NSgVd>GZ\nbaleen/Nmg\nbaleful/JYp\nbalefulness/Nmg\nbaler/Ng\nbalk/NSgVGd\nbalky/J>^\nball/~NSgVGd\nballad/~NSgV\nballadeer/NgSV\nballadry/Nmg\nballast/~NwSgVGd\nballcock/NgS\nballer/NgS\nballerina/~NSg\nballet/~NwSgV\nballetic/J\nballgame/NgS\nballgirl/NS\nballgown/NSV\nballistic/~JSQ\nballistics/Ng\nballoon/~NSgVGd\nballoonist/NgS\nballot/~NSgVdG\nballpark/~NgSJVdG\nballplayer/NgS\nballpoint/NgS\nballroom/~NgSV\nballs/~N9SVdG\nballsy/J>^\nbally/JN\nballyhoo/NSgVdG\nbalm/NwSgV\nbalminess/Ng\nbalmy/J>^p\nbaloney/~Ng\nbalsa/~NwgS\nbalsam/~NwSgV\nbalsamic/JN\nbalter/VSGd\nbaluster/NSg\nbalustrade/~NgS\nbamboo/~NwSgJV\nbamboozle/VdGSN\nban/~VSNg\nbanal/JY\nbanality/NSg\nbanana/~NwSg\nband/~NSVGdE\nband's\nbandage/NSgVdG\nbandana/NSg@\nbandanna/NgS\nbandbox/NgS\nbandeau/Ng\nbandeaux/N\nbandit/~NSgV\nbanditry/Nmg\nbandleader/~NS\nbandmaster/NSg\nbandmate/NSg\nbandoleer/NSg\nbandsman/N0g\nbandsmen/N9\nbandstand/~NSg\nbandwagon/NSg\nbandwidth/~N\nbandwidths/N\nbandy/~Vd>GSJ^N\nbane/~NSgV\nbaneful/J\nbang/~NSgVGd>\nbangle/NSgV\nbani/~N\nbanish/VGdSL\nbanishment/~Ng\nbanister/NSgV\nbanjo/~NgSV\nbanjoist/NSg\nbank/~NSgVGd>ZB\nbankbook/NSg\nbankcard/NSg\nbanker/~Ng\nbanking/~NmgV\nbanknote/~NSg\nbankroll/NSgVGd\nbankrupt/~JVGdSNg\nbankruptcy/~NwSg\nbanned/~VtTJ\nbanner/~NSgJV\nbanning/~V6N\nbannock/NgS\nbanns/Ng\nbanquet/~NgSVGd>Z\nbanqueter/Ng\nbanquette/NSg\nbanshee/NgS\nbantam/~NSgJ\nbantamweight/~NwSg\nbanter/NSgVGd\nbantering/NVJY\nbanyan/NSg\nbanzai/~JNSgV\nbaobab/NSg\nbap/NSV\nbaptise/VGd>SZ!_₹\nbaptised/VtTJU!_₹\nbaptism/~NwgS\nbaptismal/~JN\nbaptist/~NS\nbaptistery/NSg\nbaptize/VGd>SZ\nbaptized/~VtTJU\nbaptizer/Ng\nbar/~NSVP^EeU\nbar's\nbarb/~NSgVGd>Z\nbarbacoa/N\nbarbarian/~JNSg\nbarbarianism/NwgS\nbarbaric/~JQ\nbarbarise/VdSG!_₹\nbarbarism/NwSg\nbarbarity/NSg\nbarbarize/VdSG\nbarbarous/JY\nbarbecue/~NwSgVdG\nbarbel/NSg\nbarbell/NgS\nbarber/~NgVGd\nbarberry/NSg\nbarbershop/~NgSV\nbarbie/~NS\nbarbiturate/NSg\nbarbwire/Ng\nbarcarole/NSg\nbarcode/NgS\nbard/~NSgV\nbardic/~JN\nbare/~JY>pNSVdG\nbareback/JVdN\nbarefaced/JY\nbarefoot/~Jd\nbarehanded/J\nbareheaded/J\nbarelegged/J\nbareness/Ng\nbarf/NSgVGdY\nbarfly/NSg\nbargain/~NgSVd>GZ\nbargainer/Ng\nbarge/~NgSVGd\nbargeman/Ng\nbargemen/N9\nbarhop/VS\nbarhopped/VtT\nbarhopping/V6Nm\nbarista/NgSV\nbaritone/~NgS\nbarium/~Nmg\nbark/~VGdSNwe\nbark's\nbarkeep/NgSV>Z\nbarkeeper/NgS\nbarker/~NSg\nbarley/~Nmg\nbarmaid/NgS\nbarman/~N0g\nbarmen/N9\nbarmy/J>^N\nbarn/~NSgV\nbarn find/NgS\nbarnacle/~NgSVd\nbarney/~NSJV\nbarnstorm/Vd>GSNZ\nbarnstormer/NgS\nbarnyard/NSgJ\nbarometer/~NgS\nbarometric/~JQ\nbaron/~NgS\nbaronage/NgS\nbaroness/~NgS\nbaronet/~NgS\nbaronetcy/~NSg\nbaronial/J\nbarony/~NSg\nbaroque/~JNg\nbarque/NSg!@_₹\nbarrack/~NgSVdG\nbarracuda/~NSg\nbarrage/~NgSVGd\nbarre/~NgSVGdz\nbarred/~VtTJUEe\nbarrel/~NSgVGd\nbarrelled/VtTJ!@_₹\nbarrelling/V6N!@_₹\nbarren/~J^>pNSg\nbarrenness/Ng\nbarrette/NSgV\nbarricade/~NgSVGd\nbarrier/~NgSV\nbarring/~V6NPEeU\nbarrio/~NSg\nbarrister/~NgS\nbarroom/NgS\nbarrow/~NSg\nbartender/~NSg\nbarter/~NSgVGd>Z\nbarterer/Ng\nbaryon/NSg\nbasal/~JYN\nbasalt/~Nmg\nbasaltic/J\nbase/~NSVdGJ^eL\nbase's\nbaseball/~NSg\nbaseboard/NgS\nbaseless/JY\nbaseline/~NgSV\nbasely/Ry\nbaseman/~N0g\nbasemen/~N9\nbasement/~NgSe\nbaseness/Ng\nbaser/Jc\nbash/~VGdSNg\nbashful/JYp\nbashfulness/Nmg\nbashing/~VSNg\nbasic/~JNgSQ\nbasil/~NgV\nbasilica/~NgS\nbasilisk/NgSJ\nbasin/~NgSV\nbasinful/NgS\nbasis/~Ng\nbask/~VGdSN\nbasket/~NSgV\nbasketball/~NwgSV\nbasketry/Nmg\nbasketwork/Nmg\nbasmati/Ng\nbasque/~NS\nbass/~JNgSV\nbasset/~NSgV\nbassinet/NgS\nbassist/~NgS\nbasso/~NgS\nbassoon/~NgSV\nbassoonist/NSg\nbasswood/NgS\nbast/NgJ\nbastard/~NgSJV\nbastardisation/NwgS!_₹\nbastardise/VGdS!_₹\nbastardization/NwgS\nbastardize/VGdS\nbastardy/Ng\nbaste/VGd>SNZnX\nbaster/Ng\nbastion/~NgV\nbat/~NSgV\nbatch/~NgSVdGJ\nbate/VGdSNKre\nbath/~NgSVGd>Z\nbathe/VNg\nbather/Ng\nbathetic/J\nbathhouse/NgS\nbathing/~NgV\nbathmat/NgS\nbathos/Ng\nbathrobe/NSg\nbathroom/~NSgV\nbaths/~NV\nbathtub/~NgS\nbathwater/Nm\nbathyscaphe/NSg\nbathysphere/NgS\nbatik/NwgSV\nbatiste/Ng\nbatman/~NgV\nbatmen/9\nbaton/~NgSV\nbatshit/NgJx\nbatsman/~N0g\nbatsmen/~N9\nbattalion/~NSgV\nbatted/~JVtT\nbatten/VGdSJNg\nbatter/~VGd>SNwgzZ\nbatterer/Ng\nbattery/~NSg\nbatting/~NgV6\nbattle/~NSgVdGJLZ\nbattleaxe/NgS\nbattledore/NSg\nbattledress/N\nbattlefield/~NgS\nbattlefront/NgS\nbattleground/~NgS\nbattlement/NSg\nbattler/NgS\nbattleship/~NSg\nbatty/J>^N\nbauble/NSg\nbaud/NSg\nbaulk/NgSVdG!_₹\nbauxite/~Nmg\nbawd/NSgJV\nbawdily/Ry\nbawdiness/Nmg\nbawdy/J>^p\nbawl/VGdSNg\nbay/~NSgVdGJ\nbayberry/NSg\nbayonet/~NSgVdG\nbayou/~NgS\nbazaar/~NSg\nbazillion/NS\nbazooka/NSgV\nbbl/N\nbdrm/N\nbe/~NAVbl\nbeach/~NgSVdG\nbeachcomber/NSg\nbeachfront/JN\nbeachgoer/NgS\nbeachhead/~NgS\nbeachside/NgSJ\nbeachwear/Nmg\nbeacon/~NSgV\nbead/~NSgVGd\nbeading/VNg\nbeadle/NSg\nbeady/J>^\nbeagle/~NSgV\nbeak/~NSgVd>Z\nbeaker/~Ng\nbeam/~NSgVGd\nbean/~NSgVGd\nbeanbag/NgS\nbeanfeast/NS\nbeanie/NSg\nbeanpole/NgS\nbeansprout/NS\nbeanstalk/~NgS\nbear/~NSgVG>JZBz\nbearable/JU\nbearably/RyU\nbeard/~NgSVdG\nbeardless/J\nbearer/~Ng\nbearing/~VJNg\nbearish/JYp\nbearishness/Ng\nbearlike/J\nbearskin/NgS\nbeast/~NgSVJ\nbeastie/NgS\nbeastliness/Nmg\nbeastly/J^>pg\nbeat/~NwSgVG>JZBnz\nbeatable/JU\nbeatdown/NgS\nbeaten/~JVU\nbeater/Ng\nbeatific/JQ\nbeatification/~Ng\nbeatify/VGdSXn\nbeating/~NgV\nbeatitude/NSg\nbeatnik/NgS\nbeau/~NSgV\nbeaut/NgSJ\nbeauteous/JY\nbeautician/NSg\nbeautification/~Ng\nbeautifier/Ng\nbeautiful/~JYN\nbeautify/Vd>SGnZ\nbeauty/~NwSgJV\nbeaver/~NSgVGd\nbebop/~NgSV\nbecalm/VGSd\nbecame/~Vt\nbecause/~CP\nbeck/~NSgV\nbeck and call/N\nbeckon/VGdSN\nbecloud/VGdS\nbecome/~VbTS\nbecoming/~V6NJYU\nbecquerel/NS\nbed/~NSgVb\nbedaub/VGSd\nbedazzle/VGdSL\nbedazzlement/Ng\nbedbug/NSg\nbedchamber/NS\nbedclothes/Nmg\nbedded/JVtT\nbedder/N\nbedding/NmgV6\nbedeck/VGSd\nbedevil/VGdSL\nbedevilled/VtT!@_₹\nbedevilling/V6N!@_₹\nbedevilment/Ng\nbedfellow/NSg\nbedhead/NS\nbedim/VS\nbedimmed/VtT\nbedimming/V6\nbedizen/VGdS\nbedlam/NwSg\nbedpan/NSg\nbedpost/NSg\nbedraggle/VGdS\nbedridden/J\nbedrock/~NwSgV\nbedroll/NSg\nbedroom/~NSg\nbedside/~NSg\nbedsit/NS\nbedsitter/NS\nbedsore/NSg\nbedspread/NSg\nbedstead/NSg\nbedtime/~NwSg\nbee/~NSgV>GZz\nbeebread/Ng\nbeech/~NgS\nbeechnut/NgS\nbeef/~NwSgVGdJ\nbeefburger/NSg\nbeefcake/NgS\nbeefiness/Ng\nbeefsteak/NwgS\nbeefy/J>^p\nbeehive/~NgSV\nbeekeeper/NgS\nbeekeeping/Nmg\nbeeline/NgSV\nbeen/~VlTN\nbeep/NSgVGd>Z\nbeeper/Ng\nbeer/~NwgV\nbeery/J^>\nbeeswax/NmgV\nbeet/~NSgV\nbeetle/~NgSVGdJ\nbeetroot/~NwSV\nbeeves/9\nbefall/VGSNn\nbefell/V\nbefit/VS\nbefitted/VtT\nbefitting/V6JY\nbefog/VS\nbefogged/JVtT\nbefogging/V6\nbefore/~PC\nbeforehand/~J\nbefoul/VdGS\nbefriend/VSGd\nbefuddle/VGdSL\nbefuddlement/Ng\nbeg/~VSN\nbegan/~Vt\nbegat/VtN\nbeget/VS\nbegetter/NS\nbegetting/V6N\nbeggar/~NgSVdGY\nbeggary/NgJ\nbegged/~VtT\nbegging/~NV6\nbegin/~VbSN\nbeginner/~NSg\nbeginning/~NgSV6J\nbegone/V\nbegonia/NSg\nbegot/Vt\nbegotten/VTJ\nbegrime/VdSG\nbegrudge/VdSG\nbegrudging/VJY\nbeguile/Vd>SGZL\nbeguilement/Ng\nbeguiler/Ng\nbeguiling/VNJY\nbeguine/NSg\nbegum/~VSNg\nbegun/~VT\nbehalf/~Ng\nbehalves/9\nbehave/~VGdS\nbehavior/~NwSg<\nbehavioral/~JY<\nbehaviorism/Ng<\nbehaviorist/NgS<\nbehaviour/NwSg!@_₹\nbehavioural/JY!@_₹\nbehaviourism/Ng!@_₹\nbehaviourist/NSg!@_₹\nbehead/VdS\nbeheading/NgS\nbeheld/V\nbehemoth/Ng\nbehemoths/N\nbehest/~NgSV\nbehind/~PJNgS\nbehindhand/J\nbehold/~V>GSnZ\nbeholder/Ng\nbehoove/VdSG\nbehove/VGdS!_₹\nbeige/~NmgJ\nbeing/~Vl6NwgC\nbejewel/VSdG\nbejewelled/VtTJ!@_₹\nbejewelling/V6!@_₹\nbelabor/VSdG\nbelabour/VGSd!@_₹\nbelated/VJY\nbelay/VGdSN\nbelch/VGdSNg\nbeleaguer/VGSd\nbelfry/~NSg\nbelie/VdS\nbelief/~Nw0gEU\nbeliefs/~N9\nbelievability/Nmg\nbelievable/~JU\nbelievably/RyU\nbelieve/~Vd>SGEZ\nbeliever/~NgSEU\nbelieving/~VNmU\nbelittle/VdSGL\nbelittlement/Ng\nbell/~NSgVGd\nbell-pull/NgS\nbelladonna/~Ng\nbellboy/~NSg\nbelle/~NgS\nbelled/JVtTr\nbelletrist/NgS\nbelletristic/J\nbellhop/NSgV\nbellicose/J\nbellicosity/Nmg\nbelligerence/Nmg\nbelligerency/Nmg\nbelligerent/~JYNgS\nbelling/NV6r\nbellman/N0g\nbellmen/N9\nbellow/~NgSVdG\nbellwether/NgS\nbelly/~NSgVGd\nbellyache/NgSVGd\nbellybutton/NSg\nbellyful/NgS\nbelong/~VdGSPz\nbelonging/~NwgSV6\nbeloved/~JNSgV\nbelow/~P\nbelt/~NSgVGd\nbeltway/~NSg\nbeluga/NgS\nbelying/V\nbemire/VGdS\nbemoan/VdGS\nbemuse/VGdSL\nbemused/VtTJY\nbemusement/Nmg\nbench/~NgSVGd\nbench-warmer/NgS\nbenchmark/~NgSVGd\nbend/~VbG>SNgBZ\nbendability/Nmg\nbender/~Ng\nbendy/J^>N\n# bene              # prefixes that are not also words in their own right don't belong in the dictionary\nbeneath/~P\nbenedictine/~\nbenediction/NwSg\nbenedictory/J\nbenefaction/NwSg\nbenefactive/NSgJ\nbenefactor/~NgS\nbenefactress/NgS\nbenefice/NSgV\nbeneficence/Ng\nbeneficent/JY\nbeneficial/~JYN\nbeneficiary/~NSgJ\nbenefit/~NSgVdG\nbenevolence/~NSg\nbenevolent/~JY\nbenighted/JYV\nbenign/~JY\nbenignant/J\nbenignity/Ng\nbent/~VtTSJNg\nbentonite/Nmg\nbentwood/Ng\nbenumb/VdSG\nbenzene/~Nmg\nbenzine/Nmg\nbenzyl/N\nbequeath/VdG\nbequeaths/V\nbequest/~NgSV\nberate/VGdS\nberberine/Nmg\nbereave/VdSGL\nbereavement/~NwgS\nbereft/VJ\nberet/~NgS\nberg/~NSg\nberiberi/Nmg\nberk/~NS\nberkelium/Nmg\nberm/NSgV\nberry/~NwSgVGd\nberrylike/J\nberserk/NJV\nberth/~N0gVGd\nberths/~N9V\nberyl/~NgSJ\nberyllium/~Nmg\nbeseech/VbGSNZ\nbeseecher/NgS\nbeseeching/V6NmY\nbeseem/VdSG\nbeset/~VS\nbesetting/V6NJ\nbeside/~P\nbesides/PR\nbesiege/VGd>SZ\nbesieger/Ng\nbesmear/VdSG\nbesmirch/VGdS\nbesom/NgSV\nbesot/VS\nbesotted/VtTJ\nbesotting/V6\nbesought/V\nbespangle/VdSG\nbespatter/VGSd\nbespeak/VGSN\nbespectacled/J\nbespoke/~JV\nbespoken/VJ\nbest/~JuNSgVGdA\nbestial/JYN\nbestiality/Ng\nbestiary/NSg\nbestie/NSg\nbestir/VS\nbestirred/VtT\nbestirring/V6\nbestow/VdGSN\nbestowal/NSg\nbestrew/VSdG\nbestrewn/V\nbestridden/V\nbestride/VSG\nbestrode/V\nbestseller/~NgS\nbestselling/~J\nbet/~NSgVP\nbeta/~NSgJV\nbetaine/NgS\nbetake/VGS\nbetaken/V\nbetcha/\nbetel/Ng\nbethink/VSG\nbethought/JV\nbetide/VGdS\nbetimes/\nbetoken/VGdS\nbetook/V\nbetray/~Vd>GSZ\nbetrayal/~NSg\nbetrayer/Ng\nbetroth/VdG\nbetrothal/~NSg\nbetrothed/~VJNg\nbetroths/V\nbetter/~JcNgSVdGAL\nbetterment/Ng\nbetting/~JV6N\nbettor/NgS\nbetween/~PN\nbetwixt/P\nbevel/NgSVGdJ\nbevelled/VtTJ!@_₹\nbevelling/V6SN!@_₹\nbeverage/~NSg\nbevvy/NSV\nbevy/NSg\nbewail/VdGS\nbeware/~VGdS\nbewhiskered/J\nbewigged/J\nbewilder/VSGdL\nbewildering/JYNV\nbewilderment/Ng\nbewitch/VGdSL\nbewitching/NJY\nbewitchment/Ng\nbey/~NSg\nbeyond/~PN\nbezel/NgS\nbezier/NgS\nbf/~N\nbhaji/N\nbi/~J>NSg(Z\nbiannual/JYN\nbias/~NgS☁VGdJ\nbiased/~JVtTU\nbiathlon/~NSg\nbib/NSgV\nbible/~NgS\nbiblical/~J\nbibliographer/NgS\nbibliographic/~J\nbibliographical/~JY\nbibliography/~NSg\nbibliophile/NSg\nbibulous/J\nbicameral/~J\nbicameralism/Ng\nbicarb/NgS\nbicarbonate/~NgS\nbicentenary/NSg\nbicentennial/~JNSg\nbicep/Ng0           # biceps is the standard/traditional singular but bicep has become accepted\nbiceps/N09g         # singular and plural\nbicker/Vd>GSNgZ\nbickerer/Ng\nbiconcave/J\nbiconvex/J\nbicuspid/JNgS\nbicycle/~NSgVd>GZ\nbicycler/Ng\nbicyclist/NSg\nbid/~VbtTGSNg\nbiddable/J\nbidden/VTU\nbidder/~NgS\nbidding/~V6Ng\nbiddy/NSg\nbide/VS\nbidet/NgS\nbidirectional/JYN\nbiennial/~JYNgS\nbiennium/NgS\nbier/Ng\nbiff/NSVGd\nbifocal/JS\nbifocals/N9g\nbifurcate/VdSGJXn\nbifurcation/Nwg\nbig/~JpN\nbigamist/NSg\nbigamous/J\nbigamy/~Nmg\nbigger/~Jc\nbiggest/~Ju\nbiggie/~NgS\nbiggish/J\nbiggy/NSg\nbighead/NSg\nbighearted/Jp\nbigheartedness/Nmg\nbighorn/~NSg\nbight/~NgSV\nbigmouth/N0gJ\nbigmouths/N9\nbigness/Nmg\nbigot/~NgSd\nbigotry/~NSg\nbigram/NSg\nbigwig/NgS\nbijou/NgJ\nbijoux/N\nbike/~NSgVd>GZ\nbiker/~Ng\nbikini/~NgS\nbilabial/JNgS\nbilateral/~JYNgS\nbilberry/NS\nbile/~NmgV\nbilge/NgSV\nbilingual/~JYNSg\nbilingualism/~Nmg\nbilious/Jp\nbiliousness/Nmg\nbilirubin/Nmg\nbilk/NSVGd>Z\nbilker/NgS\nbill/~NSgVGdBz\nbillabong/NgS\nbillboard/~NgSV\nbillet/NgSVGd\nbillfold/NSg\nbillhook/NSV\nbilliard/~NS\nbilliards/~Ng\nbilling/~V6Ng\nbillingsgate/NgV\nbillion/~SgH\nbillionaire/~NSg\nbillionth/JNg\nbillionths/N\nbillow/NgSVGd\nbillowy/J\nbilly/~NSg\nbillycan/NS\nbimbo/NgS\nbimetallic/JNSg\nbimetallism/Ng\nbimodal/J\nbimonthly/~JNSg\nbin/~NSgV\nbinary/~JNwSg\nbinaural/~J\nbind/~VbGSNrUB\nbind's\nbinder/~NgS\nbindery/NSg\nbinding/~JNgSV\nbindweed/Ng\nbinge/~NgSVd\nbingo/~NgJV\nbinman/N\nbinmen/9\nbinnacle/NSg\nbinned/VtTJ\nbinning/V6N\nbinocular/JNgS\nbinomial/~JNSg\nbio/~NSgJ\nbiochemical/~JYNSg\nbiochemist/~NgS\nbiochemistry/~Nmg\nbiodegradability/Nmg\nbiodegrade/VdSGB\nbiodiversity/~Nmg\nbioethics/~Nmg\nbiofeedback/Nmg\nbiofilm/NgS\nbiog/N\nbiographer/~NSg\nbiographic/J\nbiographical/~JY\nbiography/~NwSgV\nbiohazard/NgS\nbioinformatics/Nmg\nbiol/N\nbiologic/JN\nbiological/~JYN\nbiologist/~NgS\nbiology/~NwgS\nbiomarker/NgS\nbiomass/~Nmg\nbiome/NgS\nbiomedical/~JYN\nbiometric/J\nbiometrics/N\nbionic/~JSQ\nbionics/Nmg\nbiophysical/J\nbiophysicist/NgS\nbiophysics/~Nmg\nbiopic/~NgS\nbiopsy/~NSgVGd\nbioreactor/NS\nbiorhythm/NgS\nbioscience/NgS\nbiosensor/NSg\nbiosphere/~NSg\nbiosynthesis/~Nmg\nbiosynthetic/J\nbiotech/~Nmg\nbiotechnological/J\nbiotechnology/~Nmg\nbiotin/~Nmg\nbioweapon/NgS\nbipartisan/~J\nbipartisanship/Ng\nbipartite/~J\nbiped/NgS\nbipedal/J\nbiplane/~JNgSV\nbipolar/~JN\nbipolarity/Nmg\nbiracial/JN\nbirch/~NgSVGd\nbird/~NSgVGd>JZ\nbirdbath/N0g\nbirdbaths/N9\nbirdbrain/NSgd\nbirdcage/NS\nbirder/Ng\nbirdhouse/NgS\nbirdie/~NgSVd\nbirdieing/V\nbirdlike/J\nbirdlime/NgV\nbirdseed/Ng\nbirdshit/Nx\nbirdsong/Nmg\nbirdwatcher/NSg\nbirdying/V\nbiretta/NSg\nbirth/~NgJ>VGdZ\nbirthday/~NgSV\nbirther/NgV\nbirthmark/NgS\nbirthplace/~NgS\nbirthrate/NgS\nbirthright/~NgS\nbirths/~Nr\nbirthstone/NSg\nbiscuit/~NSg\nbisect/VdGSN\nbisection/NwgS\nbisector/NSg\nbisexual/~JYNgS\nbisexuality/Ng\nbishop/~NgSV\nbishopric/~NSg\nbismuth/~Ng\nbison/~Ng09         # singular and plural\nbisque/NgJV\nbistable/J\nbistro/NgSV\nbit/~NSgVtGe\nbit shift/NgSVGd\nbitangent/NSg\nbitch/~NgSVGd\nbitchily/Ry\nbitchiness/Ng\nbitchy/J>^p\nbitcoin/ONSwg\nbite/~Vb>SNgZ\nbiter/NgS\nbiting/~V6NJY\nbitmap/NgS\nbitplane/NgS\nbitrate/NgS\nbitstream/Sg\nbitten/~VT\nbitter/~JY^>pNgSV\nbittern/~NSg\nbitterness/~Nmg\nbitters/NgV\nbittersweet/~JNgS\nbitty/J^>N\nbitumen/NmgV\nbituminous/JN\nbitwise/J\nbivalent/JN\nbivalve/NSg\nbivouac/NgSV\nbivouacked/VtT\nbivouacking/V6\nbiweekly/~JNSg\nbiyearly/J\nbiz/~Ng\nbizarre/~JY\nbizarro/NJ\nbk/~N\nbl/~dG\nblab/VSNg\nblabbed/VtT\nblabber/VdGSN\nblabbermouth/Ng\nblabbermouths/N\nblabbing/V6N\nblack/~J^Y>pNwgSVGdXn\nblack magic/Ng\nblack out/V/\nblackamoor/NgS\nblackball/NSgVGd\nblackberry/~NwSgVG\nblackbird/~NSgV\nblackboard/NgSV\nblackcurrant/NS\nblacken/VdG\nblackface/N\nblackguard/NSgV\nblackhead/NgS\nblacking/VNg\nblackish/J\nblackjack/~NgSVdG\nblackleg/NSV\nblacklist/NgSVdG\nblackmail/~NmgSVd>GZ\nblackmailer/Ng\nblackness/~Ng\nblackout/~NSgV\nblacksmith/~NgSVG\nblacksnake/NSgV\nblackthorn/NSg\nblacktop/NSgV\nblacktopped/VtT\nblacktopping/V6\nbladder/~NgSV\nblade/~NgSVd\nblag/NSVJ\nblagged/VtT\nblagging/NV6\nblah/~NgJV\nblahs/NgV\nblame/~NgSVGd>JB\nblameable/J!@_₹\nblameless/JYp\nblamelessness/Ng\nblameworthiness/Ng\nblameworthy/Jp\nblammo/\nblanch/VGdS\nblancmange/NgS\nbland/~J^Y>pVN\nblandish/VdSGL\nblandishment/NSg\nblandness/Ng\nblank/~J^Y>pNgSVGd\nblanket/~NgSJVGd\nblankness/Ng\nblare/VGdSNg\nblaringly/Ry\nblarney/NSgVdG\nblasé/J\nblase/J\nblaspheme/VGd>SNZ\nblasphemer/NgS\nblasphemous/~JY\nblasphemy/~NSg\nblast/~NgSVGd>Z\nblast off/V/\nblaster/NgS\nblastoff/NgS\nblat/VSN\nblatancy/NSg\nblatant/~JY\nblather/VdGSNg\nblaze/~NgSVGd>Z\nblazer/~NgS\nblazing/JY\nblazon/~NgSVdG\nbldg/N              # POS: abbreviation for building\nbleach/~J>VdGSNgZ\nbleached/~JVtTU\nbleacher/NgS\nbleacherly/Ry\nbleak/~J^>YpN\nbleakness/Nmg\nblear/JV\nblearily/Ry\nbleariness/Nmg\nbleary/J>^p\nbleat/NgSVGd\nbleed/~VG>SNZ\nbleeder/NgS\nbleeding/~V6JNg\nbleep/NgSVGd>Z\nbleeper/NgS\nblemish/NgSVGd\nblemished/VJU\nblench/VdGSN\nblend/~NgSVGd>Z\nblender/NgV\nbless/~VbGdSz\nblessed/~JYpVtT\nblessedness/Ng\nblessing/~NwgSV6\nbletch/VN\nblew/~VtNJ\nblight/~NgSVGd>Z\nblimey/\nblimp/~NgSV\nblimpish/J\nblind/~J^Y>pNgSVGdZ\nblinder/JcNgV\nblindfold/NSgJVdG\nblinding/~V6JYN\nblindness/~Ng\nblindside/NSVdG\nblind spot/NgS\nblini/NgS\nblink/~VGd>SNgZ\nblinker/NgVdG\nblintz/NgS\nblintze/Ng\nblip/NSgV\nbliss/~Ng\nblissful/JYp\nblissfulness/Ng\nblister/~NgSVGd\nblistering/VJYN\nblistery/J\nblithe/JY^>p\nblitheness/Ng\nblither/VGNJ\nblithesome/J\nblitter/NgS\nblitz/~NgSVGd\nblitzkrieg/NgS\nblivet/NS\nblizzard/~NSgV\nbloat/VGdSNJZ\nbloater/NgS\nbloatware/Nmg\nblob/~NSgV\nblobbed/VtT\nblobbing/V6N\nblobby/J\nbloc/~NSg\nblock/~NSVGdU\nblock's\nblockade/~NgSVGd>Z\nblockader/Ng\nblockage/~NwgS\nblockbuster/~NSg\nblockbusting/NgJ\nblockchain/NgS\nblocker/~NgS\nblockhead/~NSgV\nblockhouse/NgS\nblocklist/NgSVdG\nblocky/J\nblog/~NSgV\nblogged/VtT\nblogger/~NgS\nblogging/~NmV6\nblogosphere/NgS\nbloke/NgS\nblokish/J\nblond/~J^>pNgSV\nblonde/~NgSJV\nblondish/J\nblondness/Nmg\nblood/~NmgSVGd\nbloodbath/N0g\nbloodbaths/N9\nbloodcurdling/J\nbloodhound/NSg\nbloodily/Ry\nbloodiness/Ng\nbloodless/JYp\nbloodlessness/Nmg\nbloodletting/NgV6\nbloodline/~NSg\nbloodmobile/NgS\nbloodshed/~Nmg\nbloodshot/J\nbloodstain/NSgd\nbloodstock/Ng\nbloodstream/NSg\nbloodsucker/NSg\nbloodsucking/JN\nbloodthirstily/Ry\nbloodthirstiness/Nmg\nbloodthirsty/J>^p\nbloody/~J^>pVGdSN\nbloom/~NgSVGd>Z\nbloomer/Ng\nbloop/VGd>SNgZ\nblooper/Ng\nblossom/~NgSVGd\nblossomy/J\nblot/~NSgV\nblotch/NgSVGd\nblotchy/J^>\nblotted/JVtT\nblotter/NgS\nblotting/V6N\nblotto/JNV\nblouse/~NgSVGd\nbloviate/VSdG\nblow/~VG>SNgJZ\nblow up/V/\nblow-up/JNgS\nblowback/~Nmg\nblower/~Ng\nblowfly/NSg\nblowgun/NgS\nblowhard/NgS\nblowhole/NSV\nblowjob/NSg\nblowlamp/NS\nblown/~JVT\nblowout/NSg\nblowpipe/NSgV\nblowsy/J>^!@_₹\nblowtorch/NgSV\nblowup/NgS\nblowy/J^>N\nblowzy/J>^\nblubber/NwSgVGd\nblubbery/J\nbludgeon/NgSVdG\nblue/~J^>pNwSgVdG\nblue-blooded/J\nblue-collar/J\nbluebell/~NgS\nblueberry/~NwSgJV\nbluebird/~NgS\nbluebonnet/NSg\nbluebottle/NSg\nbluefish/N09gS      # singular and plural, also has a plural in -s\nbluegill/NgS\nbluegrass/~Ng\nblueish/J\nbluejacket/NSg\nbluejeans/Ng\nblueness/Ng\nbluenose/NgS\nbluepoint/NgS\nblueprint/~NgSVdG\nblueshifted/J\nbluestocking/NSg\nbluesy/J>^\nbluet/NgS\nbluey/NgVJ\nbluff/~NgSVGd>J^YpZ\nbluffer/NgJ\nbluffness/Ng\nbluing/VNg\nbluish/~J\nblunder/~NgSVd>GZ\nblunderbuss/NgSV\nblunderer/Ng\nblunt/~J^Y>pNSVGd\nbluntness/Ng\nblur/~VSNgJ\nblurb/~NgSV\nblurred/~JVtT\nblurriness/Ng\nblurring/~V6N\nblurry/J^>p\nblurt/VGdSN\nblush/NgSVGd>Z\nblusher/Ng\nbluster/NgSVd>GZ\nblusterer/Ng\nblusterous/J\nblustery/J\nblvd/~N\nboa/~NSg\nboar/~NSg\nboard/~NwgSVGd>Z\nboarder/Ng\nboarding/~V6Ng\nboardinghouse/NgS\nboardroom/NgS\nboardwalk/~NgSV\nboast/~NgSVGd>Z\nboaster/Ng\nboastful/JYp\nboastfulness/Ng\nboat/~NSgVGd>Z\nboater/Ng\nboathouse/~NgS\nboating/~NgV6\nboatload/NS\nboatman/N0g\nboatmen/~N9\nboatswain/NSg\nboatyard/NS\nbob/~VSNg\nbobbed/JVtT\nbobbin/NgS\nbobbing/V6N\nbobble/NgSVGd\nbobblehead/NgS\nbobby/~NSg\nbobbysoxer/NSg\nbobcat/~NgS\nbobolink/NSg\nbobsled/NSgVb\nbobsledded/VtT\nbobsledder/NgS\nbobsledding/NV6\nbobsleigh/~NgV\nbobsleighs/N\nbobtail/NSgV\nbobwhite/NgS\nboccie/Ng\nbock/~Ng\nbod/~NSgdG\nbodacious/J\nbode/~VSN\nbodega/NgS\nbodge/VGdSNJ\nbodgery/NgS\nbodice/NgS\nbodily/~J\nbodkin/NgS\nbody/~NSgVd\nbodybuilder/~NSg\nbodybuilding/~Ng\nbodyguard/~NgSV\nbodysuit/NSg\nbodywork/~Ng\nboffin/NS\nboffo/JN\nbog/~NSgVJ\nboga/N\nbogey/NgSVGd\nbogeyman/Ng\nbogeymen/9\nbogged/~VtTJ\nbogging/V6J\nboggle/VGdSN\nboggy/J^>\nbogie/~NgS\nbogon/N\nbogosity/N\nbogus/~JN\nbogyman/Ng\nbogymen/9\nbohemian/~NSgJ\nbohemianism/Nmg\nboil/~NSgVGd>zZ\nboiler/~Ng\nboilermaker/NSg\nboilerplate/NwgSJV\nboing/~NgSVdG\nboink/VGdSN\nboisterous/JYp\nboisterousness/Ng\nbola/NSg\nbold/~J^Y>pVdGSN\nboldface/~NgVdJ\nboldness/Ng\nbole/NSg\nbolero/NgSV\nbolivar/~NgS\nbolivares/N\nboll/NSgV\nbollard/NS\nbollix/VGdSNg\nbollocking/NS\nbollocks/NV\nbologna/~Ng\nbolshie/NJ\nbolster/~NgSVGd\nbolt/~NSVGdU\nbolt's\nbolter/NgSVdG\nbolthole/NS\nbolus/NgSV\nbomb/~NSgVd>JzZ\nbombard/NSVGdL\nbombardier/~NgS\nbombardment/~NSg\nbombast/NgVJ\nbombastic/JQ\nbomber/~NSg\nbombing/NSgVJ\nbombproof/JNV\nbombshell/NSg\nbombsite/NS\nbona fide/RJ\nbonanza/~NgS\nbonbon/NgS\nbonce/NS\nbond/~NSgVGdJ\nbondage/~Ng\nbondholder/NgS\nbonding/~VNg\nbondman/Ng\nbondmen/9\nbondsman/Ng\nbondsmen/9\nbondwoman/Ng\nbondwomen/9\nbone/~NwSgJ>VdGZ\nbonehead/NSgd\nboneless/J\nboner/Ng\nboneshaker/NS\nboneyard/N\nbonfire/~NgSV\nbong/~NSgVGd\nbongo/~NgSV\nbonhomie/Ng\nboniness/Ng\nbonito/NgS\nbonk/VGdSNZ\nbonnet/~NgSV\nbonny/J^>N\nbonobo/NgS\nbonsai/N09wSgV\nbonus/~NgSV\nbony/~J^>p\nboo/~NSgVdGH\nboo-boo/NgS\nboob/NSgVGd\nbooby/~NSgVJ\nboodle/NgSV\nbooger/NS\nboogeyman/Ng\nboogeymen/N9\nboogie/~NgSVd\nboogieing/V\nboogieman/Ng\nboohoo/VGdSNg\nbook/~NSgVGdBz\nbookbinder/NSg\nbookbindery/NSg\nbookbinding/Ng\nbookcase/NgS\nbookend/NgSV\nbookie/NgS\nbooking/~V6Nwg\nbookish/J\nbookkeeper/NgS\nbookkeeping/NgV\nbooklet/~NgS\nbookmaker/NSg\nbookmaking/Ng\nbookmark/NSgVdG\nbookmobile/NSg\nbookplate/NgSV\nbookseller/~NgS\nbookshelf/N0g\nbookshelves/N9V\nbookshop/~NSg\nbookstall/NS\nbookstore/~NgS\nbookworm/NSg\nbool/NgS\nboolean/~JNgS\nboom/~VGd>SNgZ\nboombox/NgS\nboomerang/~NgSVdG\nboon/~NSgJ\nboondocks/Ng\nboondoggle/NgSVGd>Z\nboondoggler/Ng\nboonies/Ng\nboor/NSg\nboorish/JYp\nboorishness/NmgS\nboost/~NgSVGd>Z\nbooster/~NgV\nboot/~NSVGdr\nboot camp/Nmg\nboot loader/NgS\nboot up/V/\nboot's\nbootable/J\nbootblack/NSgV\nbootee/NgS\nbooth/~Ng\nbooths/~N\nbootlace/NS\nbootleg/~VSNgJ\nbootlegged/VtT\nbootlegger/NgS\nbootlegging/NgV6\nbootless/J\nbootlicker/NSg\nbootstrap/NgSV\nbootstrapped/VtT\nbootstrapper/NgS\nbootstrapping/V6N\nbootup/NgS\nbooty/~NSg\nbooze/NmgSVGd>Z\nboozer/Ng\nboozy/J^>\nbop/~NSgV\nbopped/VtT\nbopping/V6\nborax/NgV\nbordello/NgS\nborder/~NgSVGd\nborderland/NgS\nborderless/J\nborderline/~JNgSV\nbore/~Vbtd>GSNgZ\nboredom/~Ng\nborehole/NSV\nborer/Ng\nborescope/NgS\nboring/~NVJY\nborn/~VJNirU\nborne/~VJ\nboron/Nmg\nborough/~Ng\nboroughs/~N\nborrow/~Vd>GSNZz\nborrower/~Ng\nborrowing/~VNg\nborscht/~Nmg\nborstal/NS\nborzoi/NSg\nbosh/NgV\nbosom/NSJVU\nbosom's\nbosomy/J\nboss/~NSgVdGJ\nbossily/Ry\nbossiness/Ng\nbossism/Ng\nbossy/J>^pN\nbot/~NSV\nbotanic/~JN\nbotanical/~JYN\nbotanist/~NSg\nbotany/~Ng\nbotch/Vd>GSNgZ\nbotcher/Ng\nboth/~ICDq\nbother/~VdGSNmg\nbotheration/N\nbothered/~JVtTU\nbotherer/NgS\nbothersome/J\nbotlike/J\nbotnet/NSg\nbottle/~NSgVd>GZ\nbottleneck/~NgSVdG\nbottler/Ng\nbottom/~NSgVdGJ\nbottomless/J\nbotulinum/N\nbotulism/Nmg\nboudoir/NSg\nbouffant/JNSg\nbougainvillea/NgS\nbough/~N0g\nboughs/N9\nbought/~VtTN\nbouillabaisse/NSg\nbouillon/NgS\nboulder/~NSgV\nboules/N\nboulevard/~NSg\nbounce/~Vd>GSNwgZ\nbounceback/NSg\nbouncer/~NgS\nbouncily/Ry\nbounciness/Nmg\nbouncy/~J>^p\nbound/~VtTGdSJNgr\nboundary/~NSg\nbounden/JV\nbounder/NSg\nboundless/~JYp\nboundlessness/Ng\nbounteous/JYp\nbounteousness/Ng\nbountiful/JYp\nbountifulness/Ng\nbounty/~NSgV\nbouquet/NSg\nbourbon/~NSg\nbourgeois/~JNgV\nbourgeoisie/~Ng\nbourgeoisification/Ng\nboustrophedon/JN\nbout/~NgSVP\nboutique/~NSg\nboutonniere/NgS\nbouzouki/NgS\nbovine/~JNSg\nbovver/NV\nbow/~NSgVGd>Z\nbowdlerisation/NgS!_₹\nbowdlerise/VdSG!_₹\nbowdlerization/NgS\nbowdlerize/VdSG\nbowed/~VtTJU\nbowel/~NSgV\nbower/~NgV\nbowl/~NgSVd>GZ\nbowleg/NSg\nbowlegged/J\nbowler/~Ng\nbowlful/NSg\nbowline/NSg\nbowling/~VNg\nbowman/~Ng\nbowmen/N9\nbowsprit/NSg\nbowstring/NSgV\nbowwow/NSgV\nbox/~NgSVGd>Zn\nboxcar/~NSgV\nboxer/~Ng\nboxing/~VNg\nboxlike/J\nboxroom/NS\nboxwood/Ng\nboxy/J>^\nboy/~NSgV\nboycott/~VGdSNg\nboyfriend/~NgS\nboyhood/~Nmg\nboyish/JYp\nboyishness/Ng\nboysenberry/NwSgJ\nbozo/NgS\nbpm/~N\nbps/N\nbra/~NSg\nbrace/~NgSVGd>Z\nbracelet/~NgSV\nbracer/Ng\nbracero/NgS\nbracingly/Ry\nbracken/~Nmg\nbracket/~NgSVGd\nbracketry/Ng\nbrackish/~Jp\nbrackishness/Ng\nbract/NgS\nbrad/~NSgV\nbradawl/NS\nbradycardia/N\nbrae/NSg\nbrag/NSgVJ\nbraggadocio/NSg\nbraggadocious/J\nbraggart/NSgJ\nbragged/VtT\nbragger/NgSJ\nbragging/NV6\nbraid/~VGdSNgJ\nbraiding/V6Ng\nbraille/~NgVJ\nbrain/~NwgSVGd\nbrainchild/~NgV\nbrainchildren/9g\nbraininess/Ng\nbrainless/JY\nbrainpower/Nmg\nbrainstorm/~VdGSNg\nbrainstorming/NgV6\nbrainteaser/NSg\nbrainwash/NSVdG\nbrainwashing/~NmgV\nbrainwave/NS\nbrainworm/NSg\nbrainy/J^>p\nbraise/NSVGd\nbrake/~NgSVGd\nbrakeman/Ng\nbrakemen/N9\nbramble/NgSV\nbrambly/J\nbran/~Ng\nbranch/~NgSVGd\nbranchlike/J\nbrand/~NgSVGd>Zr\nbranded/~JVtTU\nbrander/NgV\nbrandish/VdGSN\nbrandy/~NSgVGd\nbrash/~J^Y>pNV\nbrashness/Nmg\nbrass/~NwgSJV\nbrasserie/NgS\nbrassiere/NgS\nbrassily/Ry\nbrassiness/Ng\nbrassy/J^>pN\nbrat/~NSgVJ\nbratty/J>^N\nbratwurst/NSg\nbravado/NgV\nbrave/~JY^>pNgSVGd\nbraveness/Ng\nbravery/~Ng\nbravo/~NSgV\nbravura/NSgJ\nbrawl/~NSgVd>GZ\nbrawler/Ng\nbrawn/NmgV\nbrawniness/Ng\nbrawny/J>^p\nbray/~VdGSNg\nbraze/Vd>GSNZ\nbrazen/~JYpVSdG\nbrazenness/Ng\nbrazer/Ng\nbrazier/~NSg\nbreach/~NgSVGd\nbread/~NwgSVGdH\nbreadbasket/NSg\nbreadboard/NSgV\nbreadbox/NgS\nbreadcrumb/NgSV\nbreadfruit/NwSg\nbreadline/NgS\nbreadth/~Ng\nbreadths/N\nbreadwinner/NSg\nbreak/~VbG>SNgBZ\nbreak out/V\nbreak up/V/\nbreakable/JNgS\nbreakage/Nmg\nbreakaway/~JNgS\nbreakdown/~NgS\nbreaker/~Ng\nbreakfast/~NwgSVdG\nbreakfront/NgS\nbreakneck/JN\nbreakout/~NgSJ\nbreakpoint/NSg\nbreaks out/V\nbreakthrough/~JN0g\nbreakthroughs/N9\nbreakup/~NSg\nbreakwater/~NSg\nbream/NgSV\nbreast/~NSgVdG\nbreastbone/NgS\nbreastfed/VtT\nbreastfeed/VGSN\nbreastplate/NSg\nbreaststroke/~NSgV\nbreastwork/NgS\nbreath/~Nw0gSJ>VdGZB\nbreathalyse/VGd>SZ!_₹\nbreathalyser/NS@\nbreathalyze/VGd>SZ\nbreathe/~V\nbreather/Ng\nbreathing/~NgV6\nbreathless/JYp\nbreathlessness/Nmg\nbreaths/N9\nbreathtaking/JY\nbreathy/J>^\nbred/~VtTNi\nbreech/~NgSJV\nbreed/~V>GSNgZ\nbreeder/~Ng\nbreeding/~NgJVi\nbreeze/~NSgVdG\nbreezeway/NSg\nbreezily/Ry\nbreeziness/Ng\nbreezy/J>^pN\nbrethren/~NJ\nbreve/NSg\nbrevet/~NSgV\nbrevetted/JVtT\nbrevetting/V6\nbreviary/NSg\nbrevity/~Ng\nbrew/~Vd>GSNgZ\nbrewer/~Ng\nbrewery/~NSg\nbrewpub/NSg\nbriar/NSg!_₹\nbribe/~NSgVd>GZ\nbriber/Ng\nbribery/~Nmg\nbrick/~NwSgJVdG\nbrickbat/NSgV\nbrickie/NgS\nbricklayer/NgS\nbricklaying/Nmg\nbrickwork/~Nmg\nbrickyard/~NgS\nbricolage/Nmg\nbridal/~NSgJ\nbride/~NSgV\nbridegroom/~NSg\nbridesmaid/NgSV\nbridge/~NwSgVdG\nbridgeable/JU\nbridgehead/~NSg\nbridgework/Nmg\nbridle/~NSgVdG\nbridled/VJU\nbridleway/NS\nbrie/~NwgS>Z\nbrief/~J^NSVdGez\nbrief's\nbriefcase/NSg\nbriefer/NJ\nbriefing/~NSgVe\nbriefly/~R          # adverb of duration\nbriefness/Nmg\nbrier/~Ng\nbrig/~NgSV\nbrigade/~NSgV\nbrigadier/~NgS\nbrigand/NSg\nbrigandage/Ng\nbrigantine/~NgS\nbright/~JY^>pNSVnX\nbrighten/Vd>GZ\nbrightener/NwgS\nbrightness/~Nmg\nbrights/Ng\nbrill/~NJ\nbrilliance/~Nmg\nbrilliancy/NwgS\nbrilliant/~JYNgS\nbrilliantine/NgV\nbrim/~NgSVJ\nbrimful/JN\nbrimless/J\nbrimmed/JVtT\nbrimming/V6J\nbrimstone/Nmg\nbrindle/NgJVd\nbrine/~NmgV\nbring/~VbS>GZ\nbringer/Ng\nbrininess/Ng\nbrinjal/NwgS₹\nbrink/~NSg\nbrinkmanship/~Nmg\nbriny/J>^pN\nbrioche/NSg\nbriquette/NgSV\nbrisk/~JY^>pVSdG\nbrisket/NSg\nbriskness/Nmg\nbristle/~NSgVdG\nbristly/J^>\nbritches/N9g\nbrittle/~J^>pNgV\nbrittleness/Nmg\nbro/~NSgIH\nbroach/NgSVdG\nbroad/~J>Y^pNSgnX\nbroad bean/NgS\nbroadband/~NmgJ\nbroadcast/~JNgSVGr\nbroadcaster/~NgS\nbroadcasting/~JNgV\nbroadcloth/Ng\nbroaden/~VdG\nbroadloom/NgJ\nbroadminded/J\nbroadness/Nmg\nbroadsheet/~NSgJ\nbroadside/~NgSVGd\nbroadsword/NSgV\nbrocade/NSgVdG\nbroccoli/~Nmg\nbrochette/NSg\nbrochure/~NgS\nbrogan/NSg\nbrogue/NSgV\nbroil/Vd>GSNgZ\nbroiler/Ng\nbroke/~VtJN\nbroken/~VTJYp\nbrokenhearted/JY\nbrokenness/Nmg\nbroker/~JNSgVdG\nbrokerage/~NwgS\nbroligarchy/Nmg\nbrolly/NS\nbromance/NwgS\nbromide/~NwSg\nbromidic/J\nbromine/~Nmg\nbronc/NSg\nbronchi/N9\nbronchial/J\nbronchitic/JN\nbronchitis/Ng\nbronchus/N0g\nbronco/~NSg\nbroncobuster/NSg\nbrontosaur/NgS\nbrontosaurus/NgS\nbronze/~NwSgJVdG\nbrooch/NgSV\nbrood/~NSgJ>VdGZ\nbrooder/Ng\nbroodily/Ry\nbrooding/~JYVNg\nbroodmare/NgS\nbroody/NgJ>^p\nbrook/~VdGSNg\nbrooklet/NSg\nbroom/~NSgV\nbroomstick/NgSV\nbroth/~N0wg>Z\nbrothel/~NgS\nbrother/~NSgVY\nbrotherhood/~NgS\nbrotherliness/Nmg\nbroths/N9\nbrougham/~NSg\nbrought/~VtT\nbrouhaha/NSg\nbrow/~NgSV\nbrowbeat/VSGn\nbrown/~NwSgJ^>pVdG\nbrownfield/NJ\nbrownie/NwgS\nbrownish/~J\nbrownness/Nmg\nbrownout/NSg\nbrownstone/~NgS\nbrowsable/J\nbrowse/~Vd>GSNgZ\nbrowser/~NgS\nbrr/\nbruin/NSg\nbruise/Vd>GSNgZ\nbruiser/NgS\nbruising/~VJNg\nbruit/NSVdG\nbrunch/NgSVdG\nbrunet/JNSg\nbrunette/~JNgS\nbrunt/~NgV\nbrush/~NgSVdG\nbrushoff/NSg\nbrushstroke/NS\nbrushwood/Ng\nbrushwork/Ng\nbrusque/JY^>pV\nbrusqueness/Ng\nbrutal/~JY\nbrutalisation/Ng!_₹\nbrutalise/VGdS!_₹\nbrutalism/Nmg\nbrutalist/NgSJ\nbrutality/~Nmg\nbrutalization/Ng\nbrutalize/VGdS\nbrute/~JNSgV\nbrute force/NwgSVdG\nbrutish/JYp\nbrutishness/Nmg\nbrutus/\nbu/~N\nbub/NSgV\nbubble/~NSgVdG>\nbubble tea/NwgS\nbubblegum/~NmgJ\nbubbly/J>^Nmg\nbubo/N0g\nbuboes/N9\nbubonic/J\nbuccaneer/~NSgVGd\nbuck/~NgSVdG\nbuckaroo/NSg\nbuckboard/NgS\nbucket/~NSgVGd\nbucketful/NgS\nbuckeye/~NgS\nbuckle/~NSVdGU\nbuckle's\nbuckler/NgSV\nbuckram/NgV\nbucksaw/NgS\nbuckshot/Ng\nbuckskin/NgSJ\nbuckteeth/N9\nbucktooth/N0gd\nbuckwheat/~Nmg\nbuckyball/NSg\nbucolic/JNgSQ\nbud/~NwSgV\nbudded/VtTJ\nbudding/~JNSV6\nbuddy/~NSgIVJ\nbudge/~VdGSNJ\nbudgerigar/NgS\nbudget/~NSgJVGd\nbudgetary/~J\nbudgie/NSg\nbuff/~NgSJVdGr\nbuffalo/~Ng09VbdG   # singular and plural, also has a plural in -s below\nbuffaloes/~N9Vh\nbuffer/~NSgJVdG\nbuffet/~NSgVdGz\nbuffoon/NSgV\nbuffoonery/Nmg\nbuffoonish/Jp\nbug/~NSVe\nbug's\nbugaboo/NSg\nbugbear/NSgV\nbugfix/NgS\nbugged/VtTJe\nbugger/NSgVdG\nbuggery/Nm\nbugging/V6Ne\nbuggy/~NSgJ>^p\nbugle/~NSgVd>GJZ\nbugler/Ng\nbuild/~V>GSNgZzrB\nbuilder/~Ng\nbuilding/~NwgSV\nbuildout/NwgS\nbuildup/~NSg\nbuilt/~JVtTri\nbuilt-in/NgSJ\nbuilt-up/J\nbuiltin/JN\nbulb/~NgSV\nbulbous/J\nbulge/~NSgVdG\nbulgy/J>^\nbulimarexia/Ng\nbulimia/Nmg\nbulimic/JNSg\nbulk/~NgSJVdG\nbulkhead/NgS\nbulkiness/Nmg\nbulky/~J>^p\nbull/~NgSJVdG\nbulldog/~NSgV\nbulldogged/VtT\nbulldogging/V6\nbulldoze/VGd>SZ\nbulldozer/NgV\nbullet/~NSgVd\nbulletin/~NgSVdG\nbulletproof/~JVSdG\nbullfight/NSg>GZ\nbullfighter/Ng\nbullfighting/Ng\nbullfinch/NgS\nbullfrog/~NgS\nbullhead/NgSd\nbullheaded/JYp\nbullheadedness/Ng\nbullhorn/NgS\nbullion/~Ng\nbullish/JYp\nbullishness/Ng\nbullock/~NSgV\nbullpen/~NSg\nbullring/NgS\nbullseye/~N\nbullshit/~NgSJVx\nbullshitted/VtTx\nbullshitter/NSgx\nbullshittery/Ngx\nbullshitting/V6x\nbullwhip/NSV\nbully/~NSgVdGJ\nbulrush/NgS\nbulwark/NgSV\nbum/~NSgVJ\nbumbag/NS\nbumble/NSVd>GZ\nbumblebee/~NSg\nbumbler/Ng\nbumf/N\nbummed/VtTJ\nbummer/NSgJc\nbummest/Ju\nbumming/V6\nbump/~NgSVd>GZ\nbumper/~NgJV\nbumph/N\nbumpiness/Nmg\nbumpkin/NgS\nbumptious/JYp\nbumptiousness/Ng\nbumpy/~J>^p\nbun/~NSgV\nbunch/~NgSVdG\nbunchy/J>^\nbunco/NSgVdG\nbundle/~NSgVdG\nbundler/NgS\nbung/NgSVdGJ\nbungalow/~NgS\nbungee/NSgV\nbunghole/NgSV\nbungle/Vd>GSNgZ\nbungler/Ng\nbunion/NSg\nbunk/NSVdGJe\nbunk's\nbunker/~NSgV\nbunkhouse/NSg\nbunkum/Nmg\nbunny/~NSgJ\nbunt/~NgSVdGz\nbunting/~NgV\nbunyip/NgS          # Australian mythological creature\nbuoy/~NgSVdG\nbuoyancy/~Ng\nbuoyant/JY\nbur/~NSgY\nburble/NSgVdG\nburbs/Ng\nburden/~NSVGdU\nburden's\nburdensome/J\nburdock/Ng\nbureau/~NSg\nbureaucracy/~NSg\nbureaucrat/~NgS\nbureaucratic/~JQ\nbureaucratisation/Ng!_₹\nbureaucratise/VGdS!_₹\nbureaucratization/Ng\nbureaucratize/VGdS\nburg/~NgS>Z\nburgeon/NSVdG\nburger/~NgS\nburgh/~Ng>Z\nburgher/Ng\nburghs/~N\nburglar/~NgSV\nburglarise/VGdS!_₹\nburglarize/VGdS\nburglarproof/J\nburglary/~NSg\nburgle/VdSG\nburgomaster/NSg\nburgundy/~NSgJ\nburial/~NSgr\nburka/NSg\nburl/~NgSVd\nburlap/NgV\nburlesque/~JNgSVGd\nburliness/Nmg\nburly/J>^p\nburn/~NgSVd>GZB\nburnable/JNSg\nburner/~Ng\nburnish/VGd>SNgZ\nburnisher/Ng\nburnoose/NgS\nburnout/NgS\nburnt/~VJU\nburp/NgSVdG\nburqa/NSg!@_₹\nburr/~NgSVdG\nburrito/NgSV\nburro/NSg\nburrow/~NSgVd>GZ\nburrower/Ng\nbursa/~Ng\nbursae/9\nbursar/NSg\nbursary/NSg\nbursitis/Ng\nburst/~VG>SNg\nbury/~VdGSNr\nbus/~NgSVr\nbusboy/NSg\nbusby/~NSg\nbused/VtT\nbusgirl/NgS\nbush/~NwgSVdGJz\nbushcraft/NwgS\nbushel/NSgVGd\nbushelled/VtT!@_₹\nbushelling/V6SN!@_₹\nbushfire/NgS_\nbushiness/Ng\nbushing/NgV\nbushman/Ng\nbushmaster/NSg\nbushmen/9\nbushwhack/Vd>SGZ\nbushwhacker/Ng\nbushy/~J>^pN\nbusily/Ry\nbusiness/~NwgSJ\nbusinesslike/J\nbusinessman/~N0g\nbusinessmen/~N9\nbusinessperson/N0Sg\nbusinesswoman/~N0g\nbusinesswomen/N9\nbusing/VNg\nbusk/Vd>GSNZ\nbuskin/NSg\nbusload/NS\nbuss/NgSVdG\nbussing/V6Ng!_₹\nbust/~Vd>GSNgJZ\nbuster/~Ng\nbustle/NSgVdG\nbusty/J>^Z\nbusy/~J^>pNSVdG\nbusybody/NSgV\nbusyness/Ng\nbusywork/Ng\nbut/~PCNSre         # removed `4` verb: archaic\nbutane/Ng\nbutch/~J>NgSVZ\nbutcher/~NgVdGJ\nbutchery/NwSg\nbutler/~NSgV\nbutt/~NgSVd>GZ\nbutte/~NSg\nbutted/VtTJr\nbutter/~NgVdG\nbutterball/NgS\nbuttercream/Nmg\nbuttercup/NSg\nbutterfat/Nmg\nbutterfingered/J\nbutterfingers/Ng\nbutterfly/~NSgVGd\nbuttermilk/Nmg\nbutternut/NSg\nbutterscotch/NgJ\nbuttery/J^>NSg\nbutting/V6Nr\nbuttock/NSg\nbutton/~NSVdGU\nbutton's\nbuttonhole/NSgVdG\nbuttonwood/NgS\nbuttress/NgSVdG\nbutty/NSVJ\nbuxom/J\nbuy/~VG>SNgZ\nbuy back/V/\nbuy out/V/\nbuyback/NSg\nbuyer/~Ng\nbuyout/~NSg\nbuzz/~NgSVd>GZ\nbuzzard/~NgS\nbuzzcut/NgS\nbuzzer/Ng\nbuzzkill/NSg\nbuzzword/NSg\nbx/~N\nbxs/N\nby/~PNg             # removed adjective sense\nbye/~NSgJP\nbygone/JNSg\nbylaw/NSg\nbyline/NSgV\nbypass/~NgSVGdB\nbypath/Ng\nbypaths/N\nbyplay/Ng\nbyproduct/~NgS\nbyre/NS\nbyroad/NSg\nbystander/NgS\nbyte/~NgS\nbytecode/NwgS\nbyway/~NSg\nbyword/NSg\nbyzantine/~JN\nc/~NSViE\nca/P\ncab/~NSgV>Z\ncabal/~NgSV\ncabala's\ncaballero/~NgS\ncabana/~NSg\ncabaret/~NSg\ncabbage/~NwgSV\ncabbed/VtT\ncabbing/V6N\ncabby/NSg\ncabdriver/NSg\ncabin/~NgSV\ncabinet/~NSg\ncabinetmaker/NgS\ncabinetmaking/Ng\ncabinetry/Ng\ncabinetwork/Ng\ncable/~NwgSVGd\ncablecast/NgSVGJ\ncablegram/NgSV\ncabochon/NSg\ncaboodle/Ng\ncaboose/NSg\ncabriolet/NSg\ncabstand/NSg\ncacao/NgS\ncache/~NgSVGd\ncacheable/J\ncachepot/NSg\ncachet/NgSV\ncackle/NgSVGd>Z\ncackler/Ng\ncacophonous/J\ncacophony/NwSg\ncacti/~N9\ncactus/~N0wgJ\ncad/~NSg\ncadaver/NSg\ncadaverous/J\ncaddie/NgSVd\ncaddish/JYp\ncaddishness/Nmg\ncaddy/NSg\ncaddying/V\ncadence/~NwSgVd\ncadenza/NSg\ncadet/~NgS\ncadge/NSVGd>Z\ncadger/Ng\ncadmium/~Nmg\ncadre/~NgS\ncaducei/N9\ncaduceus/N0g\ncaesium/Nmg!_₹\ncaesura/NSg\ncafé/NSg\ncafe/~NSg\ncafeteria/~NgS\ncafetiere/NS\ncaff/NSe\ncaffeinated/JV\ncaffeine/~Nwg\ncaftan/NgS\ncage/~NSgVdG\ncagey/J\ncagier/Jc\ncagiest/Ju\ncagily/Ry\ncaginess/Ng\ncagoule/NS\ncahoot/NgSV\ncaiman/~NgS\ncairn/~NgS\ncaisson/~NSg\ncaitiff/NSgJ\ncajole/VGd>SNZL\ncajolement/Ng\ncajoler/Ng\ncajolery/Ng\ncake/~NwSgVdG\ncakewalk/NSgV\ncal/~N\ncalabash/NgS\ncalaboose/NSg\ncalamari/NSg\ncalamine/NgV\ncalamitous/JY\ncalamity/~NSg\ncalcareous/~J\ncalciferous/J\ncalcification/Ng\ncalcify/VGdSn\ncalcimine/NSgVdG\ncalcine/VdGSN\ncalcite/Nmg\ncalcium/~Nmg\ncalculable/Ji\ncalculate/~VGdSrnvX\ncalculated/~VtTJY\ncalculating/~V6JY\ncalculation/~Ngr\ncalculator/~NSg\ncalculi/N\ncalculus/~Ng\ncaldera/~NSg\ncalendar/~NgSVdG\ncalf/~Ng\ncalfskin/Ng\ncaliber/~NSg<\ncalibrate/VGdSnXr\ncalibration/~Ngr\ncalibrator/NSg\ncalibre/NSg!@_₹\ncalico/N0gJ\ncalicoes/N9\ncalifornium/Nmg\ncaliper/NSgVGd\ncaliph/~N0g\ncaliphate/~NgS\ncaliphs/N9\ncalisthenic/JS\ncalisthenics/Nmg\ncalk/NSgVGd\ncall/~VGdSNgr\ncall stack/NgS\ncalla/NgS\ncallable/JN\ncallback/NgS\ncalled/~VtTJU\ncallee/NgS\ncaller/~NgS\ncalligrapher/~NSg\ncalligraphic/J\ncalligraphist/NgS\ncalligraphy/~Nmg\ncalling/~V6SNg\ncalliope/~NgS\ncallisthenic/JS!_₹\ncallosity/NSg\ncallous/~JYpNSVGd\ncallousness/Nmg\ncallout/NgS         # Cambridge (also), Websters\ncall out/V/         # Cambridge, Collins, Websters, Longman, Oxford\ncall-out/NgS        # American Heritage, Cambridge, Longman, OED, Oxford\ncallow/J>^pN\ncallowness/Ng\ncallus/NgSVdG\ncalm/~J^Y>pNSgVGd\ncalmness/Nmg\ncaloric/JN\ncalorie/NgS\ncalorific/J\ncalque/NSgVdG\ncalumet/~NgS\ncalumniate/VGdSn\ncalumniation/Ng\ncalumniator/NgS\ncalumnious/J\ncalumny/NSgV\ncalve/VGdS\ncalypso/~NgSV\ncalyx/NgS\ncam/~NSgV\ncamaraderie/Ng\ncamber/~NgSVdG\ncambial/J\ncambium/NwSg\ncambric/Ng\ncamcorder/NSgV\ncame/~VtPN\ncamel/~NgSJ\ncamel case/Nmg\ncamelhair/N\ncamellia/NgS\ncameo/~NgSV\ncamera/~NgS\ncameraman/~N0g\ncameramen/N9\ncamerapeople/N9\ncameraperson/N0\ncamerawoman/N0g\ncamerawomen/N9\ncamerawork/Nmg\ncamiknickers/N\ncamisole/NSgV\ncamouflage/~NgSVGd>Z\ncamouflager/Ng\ncamp/~NSVGdJe\ncamp's\ncampaign/~NSgVd>GZ\ncampaigner/~Ng\ncampanile/NSg\ncampanologist/NgS\ncampanology/Nmg\ncamper/NgSJ\ncampfire/~NSg\ncampground/~NSg\ncamphor/Nmg\ncamping/~VNmg\ncampsite/~NSg\ncampus/~NgSV\ncampy/J^>\ncamshaft/~NSg\ncan/~NSgAd>GZ\ncan't/~VA\ncanal/~NgSV\ncanalisation/Nmg!_₹\ncanalise/VGdS!_₹\ncanalization/Nmg\ncanalize/VGdS\ncanape/NgS\ncanard/NgS\ncanary/~NSgJV\ncanasta/Nmg\ncancan/NgSV\ncancel/~Vd>GSNZ\ncanceler/NgS\ncancellable/J\ncancellation/~NwSg\ncancelled/VtTJ!@_₹\ncanceller/NSg!@_₹\ncancelling/V6!@_₹\ncancellous/J!@_₹\ncancelous\ncancer/~NwgSJ\ncancerous/~J\ncandelabra/N9Sg\ncandelabrum/N0g\ncandid/~JYpN\ncandida/N\ncandidacy/~NwSg\ncandidate/~NgSV\ncandidature/NSg\ncandidness/Nmg\ncandle/~NgSVGd>Z\ncandlelight/Nmg\ncandlelit/J\ncandlepower/Nmg\ncandler/Ng\ncandlestick/~NgSV\ncandlewick/NSg\ncandor/Nmg\ncandour/Ng!@_₹\ncandy/~NwSgVGd\ncandyfloss/N\ncane/~NwSgV\ncanebrake/NgS\ncaner/Ng\ncanine/~JNgS\ncanister/NSgV\ncanker/NgSVGd\ncankerous/J\ncannabinoid/NSg\ncannabis/~NgS\ncanned/~JVtT\ncannelloni/Ng\ncannery/~NSg\ncannibal/~NSg\ncannibalisation/Ng!_₹\ncannibalise/VGdS!_₹\ncannibalism/~Ng\ncannibalistic/J\ncannibalization/Ng\ncannibalize/VGdS\ncannily/RyU\ncanniness/Ng\ncanning/~V6N\ncannon/~NgS09VGdJ   # singular and plural, also has a plural in -s\ncannonade/NgSVGd\ncannonball/~NSgV\ncannot/~VAN\ncanny/J^>U\ncanoe/~NgSVd\ncanoeing/~NV6\ncanoeist/NSg\ncanola/Ng\ncanon/~NgSJ\ncanonical/~JYN\ncanonicalise/VGdS!_₹\ncanonicalize/VGdS\ncanonisation/NgS!_₹\ncanonise/VdSG!_₹\ncanonization/~NSg\ncanonize/VdSG\ncanoodle/VdGSN\ncanopy/~NSgVGd\ncanst/V\ncant/~NSV>dGJeZ\ncant's\ncantabile/NJ\ncantaloupe/NSg\ncantankerous/JYp\ncantankerousness/Ng\ncantata/~NgS\ncanteen/~NgS\ncanter/NgVe\ncantered/VtT\ncantering/V6N\ncanticle/NgS\ncantilever/~NgSVdG\ncanto/~NgS\ncanton/~NgSVL\ncantonal/~J\ncantonment/~NgS\ncantor/~NgS\ncantrail/NgS\ncanvas/~NgSVGd\ncanvasback/NSg\ncanvass/Vd>GSNgZ\ncanvasser/Ng\ncanyon/~NgSVG\ncap/~NSgVd>BZ\ncapabilities/~N9\ncapability/~N0wgi\ncapable/~Ji\ncapably/Ryi\ncapacious/JYp\ncapaciousness/Nmg\ncapacitance/~Nmg\ncapacities/~9\ncapacitive/JY\ncapacitor/~NSg\ncapacity/~NwgJi\ncaparison/NgSVdG\ncape/~NSgV\ncaper/~NgVGd\ncapeskin/Nwg\ncapillarity/Ng\ncapillary/~JNSg\ncapital/~NwgSJY\ncapitalisation/Ng!_₹\ncapitalise/VdSGr!_₹\ncapitalism/~Nmg\ncapitalist/~JNSg\ncapitalistic/JQ\ncapitalization/~Nmg\ncapitalize/~VdSGr\ncapitation/NSge\ncapitol/~NSg\ncapitulate/VdSGrXn\ncapitulation/~Nmgr\ncaplet/NgS\ncapo/~NSg\ncapoeira/Nmg\ncapon/NgSV\ncapped/~JVtTUr\ncapping/V6NUr\ncappuccino/NwSg\ncaprice/NSg\ncapricious/JYp\ncapriciousness/Nmg\ncapsicum/NwSg_      # term for bell/red/green pepper in Australian English\ncapsize/VdGSN\ncapstan/NSg\ncapstone/NgSV\ncapsular/J\ncapsule/~NSgVdG\ncapsulise/VdSG!_₹\ncapsulize/VdSG\ncapt/~NV\ncaptain/~NSgVdG\ncaptaincy/~NSg\ncaption/~NSgVdG\ncaptious/JYp\ncaptiousness/Ng\ncaptivate/VdSGJn\ncaptivation/Ng\ncaptivator/NSg\ncaptive/~NSgJV\ncaptivity/~NwSg\ncaptor/NgS\ncapture/~NwSgVdGr\ncar/~NSg #d>ZG\ncar bomb/NgS\ncar-bomb/V\ncarafe/NgS\ncaramel/~NwSgJV\ncaramelise/VdSG!_₹\ncaramelize/VdSG\ncarapace/NSg\ncarat/NgS\ncaravan/~NSgV\ncaravansary/NSg\ncaravel/NSg\ncaraway/NSg\ncarb/NSg\ncarbide/~NSg\ncarbine/~NSg\ncarbohydrate/~NSg\ncarbolic/JN\ncarbon/~NmgSV\ncarbon-intensive/J\ncarbonaceous/J\ncarbonate/~NwgSVGdn\ncarbonation/Ng\ncarboniferous/~J\ncarbonise/VGdS!_₹\ncarbonize/VGdS\ncarborundum/Ng\ncarboy/NgSV\ncarbuncle/NSg\ncarbuncular/J\ncarburet/VSd\ncarburetor/~NSg<\ncarburetted/V\ncarburettor/NgS!@_₹\ncarby/NgS\ncarcass/~NgS\ncarcinogen/~NSg\ncarcinogenic/~JNgS\ncarcinogenicity/Ng\ncarcinoma/~NgS\ncard/~NwSgVGdE\ncardamom/Nmg\ncardamon/Nmg\ncardboard/~NmgJ\ncarder/NgS\ncardholder/NSg\ncardiac/~JN\ncardiae/N!@_₹\ncardie/NS\ncardies/N!@_₹\ncardigan/~NSg\ncardinal/~JYNSg\ncardinality/Nmg\ncardio/JNmg\ncardiogram/NSg\ncardiograph/N0g\ncardiographs/N9\ncardiologist/NgS\ncardiology/Nmg\ncardiomyopathy/~Nmg\ncardiopulmonary/J\ncardiovascular/~J\ncardsharp/NgS>Z\ncardsharper/Ng\ncare/~NwSgV>GZ      # not using '/d' since it marsk the past form as an adjective\ncared/VtT\ncareen/VdGSN\ncareer/~NgSVdGJ\ncareerism/N\ncareerist/NSgJ\ncarefree/J\ncareful/~JYp\ncarefuller/Jc\ncarefullest/Ju\ncarefulness/Nmg\ncaregiver/NSg\ncareless/~JYp\ncarelessness/Nmg\ncarer/Ng\ncaress/NgSVdG\ncaret/NgS\ncaretaker/~NgSJ\ncareworn/J\ncarfare/NwgS\ncargo/~N0gV\ncargoes/~N9\ncarhop/NgSV\ncaribou/~NSg\ncaricature/~NgSJVGd\ncaricaturisation/NgS\ncaricaturist/NSg\ncaries/~NgV\ncarillon/~NSgV\ncaring/~JVNg\ncarious/J\ncarjack/VSd>GzZ\ncarjacker/Ng\ncarjacking/VNg\ncarload/NSg\ncarmaker/NS\ncarmine/~NSgJ\ncarnage/~Ng\ncarnal/~JY\ncarnality/Ng\ncarnation/NgSJi\ncarnelian/NgS\ncarnival/~NgSV\ncarnivora\ncarnivore/NSg\ncarnivorous/~JYp\ncarnivorousness/Nmg\ncarny/NSgV\ncarob/NgS\ncarol/~NgSVGd>Z\ncaroler/Ng\ncarolled/VtT!@_₹\ncaroller/NgS!@_₹\ncarolling/V6N!@_₹\ncarom/NgSVGd\ncarotene/Ng\ncarotid/NSgJ\ncarousal/NSg\ncarouse/Vd>GSNgZ\ncarousel/~NSgV\ncarouser/Ng\ncarp/~NSg09VGd>Z    # singular and plural, also has a plural in -s\ncarpal/NgSJ\ncarpel/NgS\ncarpenter/~NgSVdG\ncarpentry/~Ng\ncarper/Ng\ncarpet/~NgSVdG\ncarpetbag/NgSVJ\ncarpetbagged/VtT\ncarpetbagger/NgS\ncarpetbagging/V6\ncarpeting/~NgV\ncarpi/~N\ncarpool/NSgVdG\ncarport/NSg\ncarpus/Ng\ncarrel/NgS\ncarriage/~NSg\ncarriageway/~NS\ncarrier/~Ng\ncarrion/~NgJ\ncarrot/~NwgSV\ncarroty/J\ncarry/~VGd>SNgZ\ncarry out/V/\ncarryall/NSg\ncarrycot/NS\ncarryout/N\ncarryover/NgS\ncarsick/Jp\ncarsickness/Ng\ncart/~NSgVGd>Z\ncartage/Ng\ncarte blanche/Nmg\ncartel/~NgS\ncarter/~Ng\ncarthorse/NSg\ncartilage/~NwSg\ncartilaginous/J\ncartload/NSg\ncartographer/~NSg\ncartographic/~J\ncartography/~Nmg\ncarton/NgSV\ncartoon/~NSgVdG\ncartoonish/JY\ncartoonist/~NgS\ncartridge/~NgS\ncartwheel/NgSVGd\ncarve/~VGd>SNzZ\ncarver/~Ng\ncarvery/NS\ncarving/~NgV\ncaryatid/NgS\ncasaba/NgS\ncascade/~NSgVdG\ncascara/NSg\ncase/~NwSgVdGLz      # removed `5` adj. rare poker sense only\ncasebook/~NSJ\ncased/VtTJU\ncaseharden/VdGS\ncasein/Nmg\ncaseload/NgS\ncasement/NgS\ncasework/Ng>Z\ncaseworker/Ng\ncash/~NmgSVGdJ\ncash flow/NgS\ncash-strapped/J\ncashback/Ng\ncashbook/NgS\ncashew/NwgS\ncashier/VGdSNg\ncashless/J\ncashmere/~Nmg\ncasing/~NgV\ncasino/~NgS\ncask/~NSgV\ncasket/~NwgSV\ncassava/~NSg\ncasserole/NwSgVdG\ncassette/~NgSV\ncassia/~NgS\ncassock/NSg\ncassowary/NSg\ncast/~VGSNgJr\ncastanet/NgS\ncastaway/JNgS\ncaste/~NgS>zZ\ncastellated/J\ncaster/~NgV\ncastigate/VdSGn\ncastigation/Nmg\ncastigator/NSg\ncasting/~VSNwgr\ncastle/~NgSVGd\ncastoff/NSgJ\ncastor/~NgS\ncastrate/NSVGdnX\ncastration/Ng\ncasual/~JYpNgS\ncasualness/Nmg\ncasualty/~NSg\ncasuist/NSg\ncasuistic/J\ncasuistry/Nmg\ncat/~NSgVJ\ncataclysm/~NgS\ncataclysmal/J\ncataclysmic/J\ncatacomb/NSg\ncatafalque/NgS\ncatalepsy/Nmg\ncataleptic/JNgS\ncatalog/~NSgVGd>Z\ncataloger/Ng\ncatalogue/NSgVd>GZ!@_₹\ncatalogued/JVtTU!@_₹\ncataloguer/Ng!@_₹\ncatalpa/NSg\ncatalyse/VbGdS!_₹\ncatalyses/NVh\ncatalysis/~Nmg\ncatalyst/~NgS\ncatalytic/~J\ncatalyze/VGdS\ncatamaran/NSg\ncatapult/~NgSVGd\ncataract/~NgS\ncatarrh/Ng\ncatastrophe/~NgS\ncatastrophic/~JQ\ncatastrophize/VdSG\ncatatonia/Ng\ncatatonic/JNSg\ncatbird/~NSg\ncatboat/NSg\ncatcall/NSgVGd\ncatch/~NgSVG>ZzL\ncatchall/NgS\ncatcher/~Ng\ncatchment/~NgSV\ncatchpenny/N\ncatchphrase/~NSg\ncatchword/NgS\ncatchy/~J>^\ncatechise/VdSG!_₹\ncatechism/~NSg\ncatechist/NSg\ncatechize/VdSG\ncategorical/~JYN\ncategorisation/NSg!_₹\ncategorise/VGdS!_₹\ncategorization/~NgS\ncategorize/~VGdS\ncategory/~NSg\ncater/~VGd>SNZz\ncatercorner/J\ncaterer/Ng\ncaterpillar/~NgSV\ncaterwaul/VdGSNg\ncatfish/~N09gSV     # singular and plural, also has a plural in -s\ncatgut/Ng\ncatharses/N9\ncatharsis/Nm0g\ncathartic/JNSg\ncathedral/~JNOSg\ncatheter/NSg\ncatheterise/VdSG!_₹\ncatheterize/VdSG\ncathode/~NSg\ncathodic/J\ncatholic/~J\ncatholicity/Ng\ncation/~NgS\ncatkin/NgS\ncatlike/J\ncatnap/NgSV\ncatnapped/VtT\ncatnapping/NV6\ncatnip/Nmg\ncatsuit/NSg\ncattail/NSg\ncatted/VtT\ncattery/NS\ncattily/Ry\ncattiness/Ng\ncatting/V6\ncattle/~NmgV\ncattleman/Ng\ncattlemen/N9\ncatty/J^>pN\ncatwalk/NSg\ncaucus/~NgSVdG\ncaudal/~JYN\ncaught/~JVtTU\ncauldron/~NgS\ncauliflower/~NwSgV\ncaulk/NgSVGd>Z\ncaulker/Ng\ncausal/~JYN\ncausality/~Nmg\ncausation/~Nmg\ncausative/~JN\ncause/~NwgSVGd>CZ\ncauseless/J\ncauser/NgS\ncauserie/NSg\ncauseway/~NSgV\ncaustic/~JNSgQ\ncausticity/Ng\ncauterisation/Nmg!_₹\ncauterise/VGdS!_₹\ncauterization/Nmg\ncauterize/VGdS\ncaution/~NwSgVdG\ncautionary/~J\ncautious/~JYi\ncautiousness/Nmg\ncavalcade/NgSV\ncavalier/~JYNSgV\ncavalry/~NSg\ncavalryman/N0g\ncavalrymen/~N9\ncave/~NSgVd>GZ\ncaveat/NgSV\ncaveman/N0g\ncavemen/N9\ncavern/~NgSV\ncavernous/JY\ncaviar/Nmg\ncavil/VGd>SNgZz@\ncaviler/Ng\ncavilled/VtT!@_₹\ncaviller/NgS!@_₹\ncavilling/V6SN!@_₹\ncaving/NgV\ncavitation/N\ncavity/~NSgW\ncavort/VdGS\ncaw/NSgVdG\ncay/~NSge\ncayenne/~Ng\ncayuse/NgS\ncc/~NV\ncease/~VGdSNge\nceasefire/~NgS\nceaseless/JYp\nceaselessness/Nmg\nceca/N\ncecal/J\ncecum/Ng\ncedar/~NwgS\ncede/~VGSdWr\nceder/NgS\ncedilla/NSg\nceilidh/NV\nceilidhs/NV\nceiling/~NgSV\ncelandine/Ng\nceleb/NgS\ncelebrant/NSg\ncelebrate/~VdSGnX\ncelebration/~NwgS\ncelebrator/NSg\ncelebratory/~J\ncelebrity/~NwSg\nceleriac/N\ncelerity/Ng\ncelery/~Nmg\ncelesta/NgS\ncelestial/~JYN\ncelibacy/Nmg\ncelibate/JNgSV\ncell/~NSgVd\ncellar/~NgSV\ncellist/~NSg\ncellmate/NSg\ncello/~NgS\ncellophane/NmgV\ncellphone/~NgSV\ncellular/~JNSg\ncellulite/Nmg\ncellulitis/Nm\ncelluloid/Nmg\ncellulose/~NmgJ\ncement/~NwgSVd>GZ\ncementer/Ng\ncementum/Ng\ncemetery/~NSg\ncenobite/NgS\ncenobitic/J\ncenotaph/~Ng\ncenotaphs/N\ncenser/NgS\ncensor/~NgSVdG\ncensored/~JVtTU\ncensorial/J\ncensorious/JYp\ncensoriousness/Ng\ncensorship/~Ng\ncensure/~NSgVd>GBZ\ncensurer/Ng\ncensus/~NgSVdG\ncent/~NSg>Z\ncentaur/~NSg\ncentavo/NSg\ncentenarian/NgSJ\ncentenary/~JNSgV\ncentennial/~JYNgS\ncenter/~NgJVdG<\ncenterboard/NSg<\ncenterfold/NgS<\ncenterpiece/~NgS<\n# centi             # prefixes that are not also words in their own right don't belong in the dictionary\ncentigrade/JN\ncentigram/NSg\ncentiliter/NgS<\ncentilitre/NgS!@_₹\ncentime/NSg\ncentimeter/NgS<\ncentimetre/NgS!@_₹\ncentipede/NSg\ncentral/~JYNSg\ncentralisation/Nge!_₹\ncentralise/VGdSe!_₹\ncentraliser/NgS!_₹\ncentralism/N\ncentralist/NJ\ncentrality/Ng\ncentralization/Nge\ncentralize/VGdSe\ncentralizer/NgS\ncentre/NgSVGd!@_₹\ncentre-left/NgS!@_₹\ncentre-left/J!@_₹\ncentre-right/NgS!@_₹\ncentre-right/J!@_₹\ncentreboard/NSg!@_₹\ncentrefold/NSg!@_₹\ncentrepiece/NSg!@_₹\ncentric/~J\ncentrifugal/~JYN\ncentrifuge/~NSgVdG\ncentripetal/JY\ncentrism/Ng\ncentrist/~JNgS\ncentroid/NgS\ncenturion/~NSg\ncentury/~NSg\ncephalic/J\nceramic/~JNSg\nceramicist/NSg\nceramics/~Ng\nceramist/NgS\ncereal/~NwgS\ncerebellar/J\ncerebellum/~NSg\ncerebra/N\ncerebral/~J\ncerebrate/VGdSn\ncerebration/Ng\ncerebrovascular/J\ncerebrum/NgS\ncerement/NgS\nceremonial/~JYNSg\nceremonious/JYU\nceremoniousness/Ng\nceremony/~NwSg\ncerise/NgJ\ncerium/Nmg\ncermet/Ng\ncert/~JNS\ncertain/~JIU\ncertainly/R         # adverb of probability/certainty; modal adverb\ncertainty/~NSgU\ncertifiable/JN\ncertifiably/Ry\ncertificate/~NgSVGdnX\ncertification/~Ng\ncertify/~VdSG\ncertitude/Ngi\ncertitudes/N\ncerulean/NgJ\ncervical/~JN\ncervices/N9\ncervix/N0g\ncesarean/JNgS\ncesium/Nmg\ncessation/~NgS\ncession/NSgKrW\ncesspit/NSg\ncesspool/NgS\ncetacean/JNgS\nceteris\ncf/~V\ncg/~\nchad/~NS\nchafe/NSVGd\nchaff/NgSVGd\nchaffinch/NgS\nchagrin/~NSgVGdJ\nchain/~NwSVGdU\nchain's\nchainable/J\nchainsaw/~NgSVdG\nchair/~NgSVGd\nchairlift/NgS\nchairman/~N0gV\nchairmanship/~NwSg\nchairmen/~N9\nchairperson/~N0Sg\nchairwoman/~N0g\nchairwomen/N9\nchaise/NgS\nchalcedony/Ng\nchalet/~NgS\nchalice/~NSg\nchalk/~NmgSVGd\nchalkboard/NSgV\nchalkiness/Nmg\nchalky/J>^p\nchallenge/~NwSgVd>GZ\nchallenged/~JVtTU\nchallenger/~NgS\nchallis/Ng\nchamber/~NSgVdG\nchamberlain/~NgS\nchambermaid/NgS\nchambray/Nmg\nchameleon/~NSgJ\nchamfer/NgSVdG\nchamois/NmgJV\nchamomile/NwgS\nchamp/~NgSVGdZ\nchampagne/~NwgSJV\nchampion/~NgSJVGd\nchampionship/~NgS\nchance/~NgSJVGd\nchancel/~NSg\nchancellery/~NSg\nchancellor/~NgS\nchancellorship/Ng\nchancery/~NSg\nchanciness/Ng\nchancre/NSg\nchancy/J>^p\nchandelier/~NSg\nchandler/~NgS\nchange/~VGd>SNwgZ\nchangeability/Nmg\nchangeable/Jp\nchangeableness/Nmg\nchangeably/Ry\nchanged/~JVtTU\nchangeless/JY\nchangeling/~NSgJ\nchangelog/Sg\nchangeover/NSg\nchanger/~Ng\nchanging/~V6NU\nchannel/~NSgVGd\nchannelisation/Ng!_₹\nchannelise/VdSG!_₹\nchannelization/Ng\nchannelize/VdSG\nchannelled/JVtT!@_₹\nchannelling/V6N!@_₹\nchanson/NSg\nchant/~VGd>SNgZ\nchanter/Ng\nchanteuse/NgS\nchantey/NSg\nchanticleer/NgSV\nchaos/~Nm☁g\nchaotic/~JNQ\nchap/~NSgV\nchaparral/~NSg\nchapati/NS\nchapatti/NS\nchapbook/NgS\nchapeau/NSg\nchapel/~NgSJV\nchaperon/NgSVdG\nchaperonage/Ng\nchaperone/NSgVdG!@_₹\nchaperoned/JVtTU\nchaplain/~NgS\nchaplaincy/NSg\nchaplet/NSg\nchapped/JVtT\nchapping/V6\nchappy/NSJ\nchapstick/NgS\nchapter/~NSgVdG\nchar/~VSNg\ncharabanc/NgSV\ncharacter/~NwgSV\ncharacterful/J\ncharacterisation/NwSg!_₹\ncharacterise/VdSG!_₹\ncharacteristic/~JNSg\ncharacteristically/~RyU\ncharacterization/~NwgS\ncharacterize/~VdSG\ncharacterless/J\ncharade/~NSgV\ncharbroil/VGdS\ncharcoal/~NwgSJV\nchard/~Ng\nchardonnay/NSg\ncharge/~NwSgVdGrE\nchargeable/Jr\ncharged/~VtTJU\ncharger/~NSg\ncharily/Ry\nchariness/Ng\nchariot/~NSgV\ncharioteer/NgSV\ncharisma/~Ng\ncharismatic/~JNgSQ\ncharitable/~Jp\ncharitableness/Ng\ncharitably/RyU\ncharity/~NSg\ncharlady/NS\ncharlatan/NSg\ncharlatanism/Nmg\ncharlatanry/Ng\ncharlie/~NS\ncharm/~NwgSVGd>Z\ncharmer/Ng\ncharming/~JYVN\ncharmless/J\ncharred/VtTJ\ncharring/V6N\nchart/~NgSVGd\ncharted/~JVtTU\ncharter/~NSJVGdr\ncharter's\ncharterer/NgS\nchartreuse/NgJ\ncharwoman/N0g\ncharwomen/N9\nchary/J^>p\nchase/~NgVGd>Z\nchaser/~NgS\nchases/~Vh\nchasm/NgS\nchassis/~Ng09       # singular and plural\nchaste/JY^>p\nchasten/VdGS\nchasteness/Nmg\nchastise/Vd>SGZL\nchastisement/NSg\nchastiser/Ng\nchastity/~Nmg\nchasuble/NSg\nchat/~VSNwg\nchatbot/NSg\nchateau/~N0Sg\nchateaux/N9\nchatelaine/NSg\nchatline/NSg\nchatroom/NgS\nchatted/VtT\nchattel/NgS\nchatter/NgSVd>GZ\nchatterbox/NgS\nchatterer/Ng\nchattily/Ry\nchattiness/Nmg\nchatting/V6N\nchatty/J^>pN\nchauffeur/~NgSVGd\nchauvinism/Nmg\nchauvinist/JNSg\nchauvinistic/JQ\ncheap/~NJ^Y>pVXn\ncheapen/VdG\ncheapness/Ng\ncheapo/JN\ncheapskate/NgS\ncheat/~VGd>SNgZ\ncheat sheet/NgS\ncheater/NgS\ncheck/~NgSVGdJr\ncheck in/V/\ncheck out/V/\ncheckbook/NSg\ncheckbox/NS\nchecked/~JVtTU\nchecker/~NgSVdG\ncheckerboard/NSgV\ncheckers/~NgV\nchecklist/~NgSV\ncheckmate/NgSVGd\ncheckoff/NSg\ncheckout/~NSg\ncheckpoint/~NSgVdG\ncheckroom/NgS\nchecksum/NgSVdG\ncheckup/NgS\ncheddar/NwSgV\ncheek/~NgSVGd\ncheekbone/NSg\ncheekily/Ry\ncheekiness/Nmg\ncheeky/J^>p\ncheep/VGdSNg\ncheer/~NgSVGd>Z\ncheerer/Ng\ncheerful/~JYp\ncheerfuller/Jc\ncheerfullest/Ju\ncheerfulness/Nmg\ncheerily/Ry\ncheeriness/Nmg\ncheerio/NgS\ncheerleader/~NSg\ncheerleading/~V\ncheerless/JYp\ncheerlessness/Nmg\ncheery/J^>p\ncheese/~NwgSVGd\ncheeseboard/NS\ncheeseburger/NSg\ncheesecake/NSg\ncheesecloth/Ng\ncheeseparing/VJNg\ncheesiness/Ng\ncheesy/~J^>p\ncheetah/~Ng\ncheetahs/N\nchef/~NSgV\nchem/~NJ\nchemical/~JYNSg\ncheminformatics/Nmg\nchemise/NgS\nchemist/~NgS\nchemistry/~Nmg\nchemo/NmgV\nchemotherapeutic/JN\nchemotherapy/~Ng\nchemurgy/Ng\nchenille/Ng\ncheque/NgSJ>GdZ!@_₹\nchequebook/NgS!@_₹\nchequer/NgVdG!_₹\nchequerboard/NgSV!@_₹\nchequers/Nmg!_₹\ncherish/VdSG\ncheroot/NgS\ncherry/~NwSgJ\nchert/Ng\ncherub/N0gS\ncherubic/J\ncherubim/N9\nchervil/Ng\nchess/~Nmg\nchessboard/NgS\nchessman/Ng\nchessmen/9\nchest/~NgSVd\nchesterfield/~NSg\nchestful/NSg\nchestnut/~NSgJ\nchesty/J^>\nchevalier/~NSg\ncheviot/~Ng\nchevron/~NgSV\nchew/~VGd>SNgZ\nchewer/Ng\nchewiness/Ng\nchewy/J^>pN\nchg/N\nchge/N\nchi/~NSg\nchiaroscuro/NgJ\nchic/~J^>pNg\nchicane/NgSV\nchicanery/NSg\nchichi/JNgS\nchick/~NgSVXn\nchickadee/NSg\nchicken/~NwgJVdG\nchickenfeed/Ng\nchickenhearted/J\nchickenpox/Ng\nchickenshit/JNSx\nchickpea/NSg\nchickweed/Ng\nchicle/Ng\nchiclet/NgS\nchicness/Ng\nchicory/NSg\nchide/VGdS\nchiding/V6NJY\nchief/~NgSJ^Y>V\nchiefdom/Ng\nchieftain/~NgS\nchieftainship/NSg\nchiffon/Ng\nchiffonier/NgS\nchigger/NgS\nchignon/NgS\nchihuahua/~NSg\nchilblain/NSg\nchild/~NgV\nchildbearing/NgJ\nchildbirth/~Nmg\nchildbirths/N\nchildcare/Nmg\nchildhood/~NSg\nchildish/~JYp\nchildishness/Nmg\nchildless/~Jp\nchildlessness/Nmg\nchildlike/~J\nchildminder/NSg\nchildminding/NV\nchildproof/JVGSd\nchildren/~9g\nchili/~N0wg\nchilies/N9\nchill/~NwgSJ^>pVGdzZ\nchiller/NgJc\nchilli/Nmg^>p!_₹\nchilliness/Nmg\nchilling/~JYV6N\nchillness/Nmg\nchilly/~J^>pN\nchime/~NgSVGd>Z\nchimer/NgS\nchimera/NgS\nchimeric/J\nchimerical/J\nchimney/~NgSV\nchimp/~NgSV\nchimpanzee/~NSg\nchin/~NSgV\nchina/~Nmg\nchinaware/Nwg\nchinchilla/NgS\nchine/NgSV\nchink/NgSVGd\nchinless/J\nchinned/VtTJ\nchinning/V6\nchino/~NgS\nchinstrap/NgS\nchintz/Ng\nchintzy/J>^\nchinwag/NSV\nchip/~NSgV\nchipboard/N\nchipmaker/NgS\nchipmaking/Ng\nchipmunk/NSgV\nchipolata/NS\nchipped/VtTJ\nchipper/JNgSV\nchippie/N\nchipping/~V6SN\nchippy/NSJV\nchipset/NgS\nchirography/Nmg\nchiropodist/NgS\nchiropody/Ng\nchiropractic/NSgJ\nchiropractor/NSg\nchirp/NgSVGd\nchirpily/Ry\nchirpy/J^>pN\nchirrup/VGdSNg\nchisel/~NgSVGd>Z\nchiseler/Ng\nchiselled/VtTJ!@_₹\nchiseller/NgS!@_₹\nchiselling/V6N!@_₹\nchit/~NSgV\nchitchat/NSgV\nchitchatted/VtT\nchitchatting/V6\nchitin/Nmg\nchitinous/J\nchitosan/N\nchitterlings/Ng\nchivalrous/JYp\nchivalrousness/Ng\nchivalry/~Nmg\nchive/NgSV\nchivy/NSVGd\nchlamydia/Nw0gS\nchlamydiae/N9\nchloral/Ng\nchlordane/Ng\nchloride/~NwgS\nchlorinate/VGdSn\nchlorination/~Nmg\nchlorine/~Nmg\nchlorofluorocarbon/NSg\nchloroform/NSgVGd\nchlorophyll/~Nmg\nchloroplast/NgS\nchm/~\nchoc/NS\nchock/NgSVGd\nchockablock/J\nchocoholic/NSgJ\nchocolate/~NwgSJV\nchocolatey/J!@_₹\nchocolaty/J\nchoice/~NwgSJ^>\nchoir/~NgSV\nchoirboy/NgS\nchoirmaster/NSg\nchoke/~VGd>SNgZ\nchokecherry/NSg\nchokepoint/NSg\nchoker/NgS\ncholecystectomy/N\ncholecystitis/N\ncholer/Ng\ncholera/~Nmg\ncholeric/JN\ncholesterol/~Nmg\nchomp/NgSVGd>Z\nchook/NwSg\nchoose/~VG>SCNZ\nchooser/NgS\nchoosiness/Nmg\nchoosy/J^>p\nchop/~NSgV\nchophouse/NSg\nchopped/~JVtT\nchopper/~NgSVdG\nchoppily/Ry\nchoppiness/Ng\nchopping/V6NJ\nchoppy/J^>p\nchopstick/NSgV\nchoral/~JYNgS\nchorale/~NgS\nchord/~NgSV\nchordal/~J\nchordate/NSgJ\nchore/NgSV\nchorea/~Ng\nchoreograph/Vd>GZ\nchoreographer/~Ng\nchoreographic/JQ\nchoreographs/Vh\nchoreography/~Nmg\nchorister/NSg\nchorizo/Nmg\nchoroid/JNgS\nchortle/NgSVGd>Z\nchortler/Ng\nchorus/~NgSVGd\nchose/~VtN\nchosen/~VTJNm\nchow/~NSgVGd\nchowder/NwgSV\nchrism/Ng\nchristen/VSGdr\nchristening/NgSV6\nchristian/~NJU\nchristology\nchroma/~Ng\nchromatic/~JQ\nchromatin/~Ng\nchromatography/~Nmg\nchrome/~NmgSVGd\nchromium/~Nmg\nchromoly/Nmg\nchromosomal/~J\nchromosome/~NgS\nchronic/~JNQ\nchronicle/~NSgVd>GZ\nchronicler/~NgS\nchronograph/~N0gV\nchronographs/~N9\nchronological/~JY\nchronologist/NgS\nchronology/~NSg\nchronometer/NSg\nchrysalis/~NgSV\nchrysanthemum/NgS\nchub/~NSgV\nchubbiness/Ng\nchubby/~J^>pN\nchuck/~NgSVGd\nchuckhole/NSg\nchuckle/NgSVGdJ\nchuffed/VtTJ\nchug/NSgV\nchugged/VtT\nchugging/V6N\nchukka/NgS\nchum/~NSgV\nchummed/VtT\nchummily/Ry\nchumminess/Ng\nchumming/V6N\nchummy/J^>pN\nchump/NgSV\nchunder/NwSVGd\nchunk/~NgSVGd\nchunker/NgS\nchunkiness/Nmg\nchunky/J^>pN\nchunter/VdGS\nchurch/~NwgSV\nchurchgoer/NSg\nchurchgoing/JNg\nchurchman/~Ng\nchurchmen/N9\nchurchwarden/NgS\nchurchwoman/N\nchurchwomen/N9\nchurchyard/~NSg\nchurl/NgS\nchurlish/JYp\nchurlishness/Ng\nchurn/VGd>SNgZ\nchurner/Ng\nchute/~NgSV\nchutney/NwgS\nchutzpah/Nmg\nchyme/Ng\nchyron/NgSV\nciabatta/NwSg\nciao/NS\ncicada/NgS\ncicatrice/NSg@\ncicatrices/9\ncicatrix/Ng\ncicerone/NSgV\nciceroni/N\ncider/~NwS\ncider's\ncigar/~NgS\ncigarette/~NgSV\ncigarillo/NgS\ncilantro/Nmg\ncilia/N9\ncilium/N0g\ncinch/NgSVGd\ncinchona/NSg\ncincture/NSgV\ncinder/~NgSVGd\ncine/~N\ncinema/~NwgS\ncinematic/~JN\ncinematographer/~NgS\ncinematographic/J\ncinematography/~Nmg\ncinnabar/NmgJ\ncinnamon/~NmgJ\ncipher/~NSgVGde\nciphertext/~NgS\ncir/~\ncirca/~P\ncircadian/J\ncircle/~NgSVGd\ncirclet/NgS\ncirclip/NgS\ncircuit/~NgSVdG\ncircuital/J\ncircuitous/JYp\ncircuitousness/Nmg\ncircuitry/~Nmg\ncircuity/Ng\ncircular/~JYNSgV\ncircularise/VdSG!_₹\ncircularity/Nmg\ncircularize/VdSG\ncirculate/~VdSGr\ncirculation/~NSgr\ncirculatory/JN\n# circum            # prefixes that are not also words in their own right don't belong in the dictionary\ncircumcise/VdSGXn\ncircumcised/JVtTNU\ncircumcision/~Ng\ncircumference/~NgSV\ncircumferential/J\ncircumflex/NgSJV\ncircumlocution/NwgS\ncircumlocutory/J\ncircumnavigate/VGdSXn\ncircumnavigation/~Ng\ncircumpolar/~J\ncircumscribe/VGdS\ncircumscription/NwgS\ncircumspect/JY\ncircumspection/Nmg\ncircumstance/~NgSVGd\ncircumstantial/~JYN\ncircumvent/~VdSG\ncircumvention/Ng\ncircus/~NgSV\ncirque/~NgS\ncirrhosis/Ng\ncirrhotic/JNSg\ncirri/N\ncirrus/~Ng\ncis/~J\ncisgender/~JN\ncistern/~NgS\ncit/~N\ncitadel/~NgS\ncitation/~NgSr\ncite/~VGdSNir\ncite's\ncitified/VJ\ncitizen/~NgS\ncitizenry/~Nmg\ncitizenship/~NwSg\ncitric/~J\ncitron/NgSJ\ncitronella/Nmg\ncitrus/~NgSJ\ncity/~NSg\ncityscape/NSg\ncitywide/~JN\ncivet/NgS\ncivic/~JSQ\ncivics/~Nmg\ncivil/~JYU\ncivilian/~NgSJ\ncivilisation/NSg!_₹\ncivilise/VGdS!_₹\ncivilised/VJU!_₹\ncivility/~Nmgi\ncivilization/~NOwSg\ncivilizational/J\ncivilize/VGdS\ncivilized/~JVU\ncivvies/Ng\nck/~\ncl/~\nclack/NgSVGd\nclad/~VJU\ncladding/~NmgV6\nclade/~NV\nclaim/~NSVGdeKEr\nclaim's\nclaimable/JNr\nclaimant/~NgS\nclaimed/~VtTU\nclaimer/NSgEe\nclairvoyance/Ng\nclairvoyant/JNgS\nclam/~NSgVJ\nclambake/NgSJV\nclamber/VGd>SNgZ\nclamberer/Ng\nclammed/VtT\nclammily/Ry\nclamminess/Ng\nclamming/V6J\nclammy/J^>p\nclamor/NgSVGd\nclamorous/J\nclamour/NgSVGd!@_₹\nclamp/~NgSVGd\nclampdown/NgS\nclamshell/NgS\nclan/~NSg\nclandestine/~JY\nclang/NgSVGd>Z\nclangor/NgV\nclangorous/JY\nclangour/NgV!@_₹\nclank/~NgSVGd\nclannish/Jp\nclannishness/Nmg\nclansman/N0g\nclansmen/N9\nclanswoman/N0\nclanswomen/N9\nclap/~NSgV\nclapboard/NgSVdG\nclapped/VtTJ\nclapper/~NgSV\nclapperboard/NSV\nclapping/V6Nmg\nclaptrap/Nmg\nclaque/NgS\nclaret/NmgSJV\nclarification/~Nmg\nclarifier/NgS\nclarify/~VdSGXn\nclarinet/~NSg\nclarinetist/~NSg\nclarinettist/NgS!_₹\nclarion/~NgSJVdG\nclarity/~Nmg\nclash/~NgSVGd\nclasp/~NSVGdU\nclasp's\nclass/~NwgSVGdJ\nclassic/~JNg\nclassical/~JYNg\nclassicism/~Nmg\nclassicist/~NgS\nclassics/Nw9\nclassifiable/J\nclassification/~N0wger\nclassifications/~N9\nclassified/~VtTJNU\nclassified's\nclassifieds/N\nclassifier/NgS\nclassify/~VSdGren\nclassiness/Nmg\nclassism/Nmg\nclassless/Jp\nclassman/N0g\nclassmate/~NgS\nclassmen/N9\nclassroom/~NgS\nclasswork/Nmg\nclassy/J^>p\nclatter/VGdSNg\nclausal/J\nclause/~NgSV\nclaustrophobia/Nmg\nclaustrophobic/JN\nclavichord/NSg\nclavicle/NgS\nclavier/NgS\nclaw/~NSVGde\nclaw's\nclay/~NmgV\nclayey/J\nclayier/Jc\nclayiest/Ju\nclaymation/Nmg\nclean/~J^Y>pNSVGdBzZ\nclean up/V/\ncleaner/~NgJ\ncleaning/~V6Ng\ncleanliness/~NmgU\ncleanly/J^>pRyU\ncleanness/NgU\ncleanse/VGd>SNZ\ncleanser/Ng\ncleanup/~NgS\nclear/~J^Y>pVGdSNgz # clearly is also a sentence adverb\nclear-sighted/J\nclearance/~NSg\nclearheaded/J\nclearing/~V6Nwg\nclearinghouse/~NSg\nclearness/Ng\nclearway/NS\ncleat/NgSV\ncleavage/~NgS\ncleave/~VGd>SNZ\ncleaver/Ng\nclef/~NSg\ncleft/~NgSVJ\nclematis/NgS\nclemency/~Nmgi\nclement/~JY\nclementine/NS\nclench/VGdSNg\nclerestory/NSg\nclergy/~NSg\nclergyman/~Ng\nclergymen/~9\nclergywoman/Ng\nclergywomen/9\ncleric/~NgSJ\nclerical/~JYN\nclericalism/Ng\nclerk/~NgSVGd\nclerkship/Ng\nclever/~J^>Yp\ncleverness/Ng\nclevis/NgS\nclew/NSgVGd\ncliché/~NgSVG\ncliche/NgSVdG\nclichéd/VJ\nclick/~NgSVGd>BZ\nclick-through/NwgS\nclickbait/NV\nclicker/Ng\nclickjack/VSGd\nclicky/J>^\nclient/~NgS\nclientele/~NgS\nclientelism/Nmg\ncliff/~NgS\ncliffhanger/~NSg\ncliffhanging/VJ\nclifftop/NSg\nclii\nclimacteric/JNg\nclimactic/~J\nclimate/~NwSgV\nclimatic/~JQ\nclimatologist/NSg\nclimatology/Nmg\nclimax/~NgSVdG\nclimb/~Vd>GSNgZB\nclimbdown/NgS\nclimber/~NgV\nclimbing/~NgVJ\nclime/NSgV\nclinch/~Vd>GSNgZ\nclincher/Ng\ncling/~NSgV>GZ\nclinger/Ng\nclingfilm/N\nclingy/J>^\nclinic/~NSg\nclinical/~JYN\nclinician/NSg\nclink/NSgVd>GZ\nclinker/NgV\ncliometric/JS\ncliometrician/NgS\ncliometrics/Ng\nclip/~VSNg\nclipboard/NgSV\nclippable/J\nclipped/~VtTJ\nclipper/~NSgV\nclipping/~V6SNwgJ\nclique/~NSgV\ncliquey/J\ncliquish/JYp\ncliquishness/Ng\nclit/NSgV\nclitic/NSg\nclitoral/J\nclitorides/N\nclitoris/NgS\nclix\ncloaca/N0g\ncloacae/N9\ncloak/~NSVdGU\ncloak's\ncloakroom/NgS\nclobber/VdGSNg\ncloche/NSg\nclock/~NSgVdG\nclockwise/~J\nclockwork/~NmgJ\nclod/NgSV\ncloddish/J\nclodhopper/NgS\nclog/~NSVU\nclog's\nclogged/VtTJU\nclogging/V6NU\ncloisonne/Ng\ncloister/~NSgVdG\ncloistral/J\nclomp/NSVdG\nclonal/J\nclone/~NSgVdGB\nclonidine/N\nclonk/NSgVdG\nclop/NgSV\nclopped/VtT\nclopping/V6N\nclose/~Vd>GSNgJY^pz\nclosed circuit/NgS\nclosed-circuit/J\nclosefisted/J\nclosemouthed/J\ncloseness/~Ng\ncloseout/NgS\ncloser/~JNS\ncloset/~NSgJVdG\ncloseup/NSg\nclosing/~NgJV\nclosure/~NSgVE\nclot/~NgSV\ncloth/~NgS\nclothe/VdSGU\nclotheshorse/NgS\nclothesline/NSgV\nclothespin/NSgV\nclothier/NgS\nclothing/~VNmg\ncloths/~N\nclotted/VtTJ\nclotting/V6N\ncloture/NSgV\ncloud/~NwSgVdG\ncloudburst/NSg\nclouded/JVtTU\ncloudiness/Nmg\ncloudless/J\ncloudy/~J>^p\nclout/NSgVdG\nclove/NSgV>Z\ncloven/VJ\nclover/~Ng\ncloverleaf/~JNSgV\ncloverleaves/N\nclown/~NSgVdG\nclownish/JYp\nclownishness/Nmg\ncloy/VdGS\ncloying/VJY\nclub/~NgSV\nclubbable/J\nclubbed/VtTJ\nclubber/NS\nclubbing/V6N\nclubfeet/9\nclubfoot/Ngd\nclubhouse/~NSg\nclubland/N\ncluck/NSgVdG\nclue/~NgSVGd\nclueless/J\nclump/NSgVdG\nclumpy/J^>\nclumsily/Ry\nclumsiness/Ng\nclumsy/~J^>pN\nclung/VJ\nclunk/NSgVd>GZ\nclunker/Ng\nclunky/J^>p\ncluster/~NgSVdG\nclutch/~VGdSNgJ\nclutter/~NSVdGU\nclutter's\nclvi\nclvii\nclxi\nclxii\nclxiv\nclxix\nclxvi\nclxvii\ncm/~\ncnidarian/NgS\nco/~NSI(dE\ncoach/~NgSVdG\ncoachload/NS\ncoachman/N0g\ncoachmen/N9\ncoachwork/Nm\ncoadjutor/~NgS\ncoagulant/JNgS\ncoagulate/VGdSJNn\ncoagulation/Ng\ncoagulator/NgS\ncoal/~NwgSVdGJ\ncoalesce/VGdS\ncoalescence/Ng\ncoalescent/JN\ncoalface/NgS\ncoalfield/~NS\ncoalition/~NgS\ncoalitionist/NgSJ\ncoalmine/NS\ncoarse/~J>Y^p\ncoarsen/VSdG\ncoarseness/Ng\ncoast/~NSgVd>GZ\ncoastal/~J\ncoaster/~Ng\ncoastguard/NS\ncoastline/~NgS\ncoat/~NgSVdGz\ncoating/~NmSgV\ncoatroom/NS\ncoattail/NSgV\ncoauthor/~NgSVdG\ncoax/Vd>GSNmJZ\ncoaxer/Ng\ncoaxial/~JYN\ncoaxing/V6NJY\ncob/NSgV\ncobalt/~mg\ncobber/NS\ncobble/NSgVd>GZ\ncobbler/~Ng\ncobblestone/NSg\ncobnut/NS\ncobra/~NSg\ncobweb/NSg\ncobwebbed/J\ncobwebby/J>^\ncoca/~Ng\ncocaine/~Nmg\ncocci/NS\ncoccus/Ng\ncoccyges/N\ncoccyx/Ng\ncochineal/NgJ\ncochlea/NSg\ncochleae/9\ncochlear/~J\ncock/~NOSgVdG\ncockade/NSg\ncockamamie/NJ\ncockatiel/NgS\ncockatoo/NSg\ncockatrice/NSg\ncockchafer/NS\ncockcrow/NSg\ncockerel/NSg\ncockeyed/J\ncockfight/NgSVG\ncockfighting/NgV\ncockily/Ry\ncockiness/Ng\ncockle/NSgV\ncockleshell/NSg\ncockney/~NOSgJ\ncockpit/~NSg\ncockroach/NgS\ncockscomb/NSg\ncocksucker/NgSx\ncocksure/J\ncocktail/~NgSJV\ncocky/J^>pNV\ncoco/~NgS\ncocoa/~NwSgJ\ncoconut/~NwSg\ncocoon/~NSgVdG\ncod/~NSg09JV        # singular and plural, also has a plural in -s\ncoda/~NgS\ncodded/VtT\ncodding/V6J\ncoddle/VdGSN\ncode/~NwSVGd>eZ\ncode name/NgS\ncode point/NSg      # Unicode code point\ncode's\ncodebase/NgS\ncodec/NgS\ncodefendant/NSg\ncodeine/Nmg\ncodependency/NwgS\ncodependent/JNSg\ncoder/NgSe\ncodex/~Ng\ncodfish/NgS09       # singular and plural, also has a plural in -s\ncodger/NSg\ncodices/9\ncodicil/NSgV\ncodification/~Ng\ncodifier/Ng\ncodify/Vd>SGXnZ\ncodon/NS\ncodpiece/NgS\ncodswallop/N\ncoed/~JNgS\ncoeducation/Ng\ncoeducational/~J\ncoefficient/~JNgS\ncoelenterate/NgS\ncoenobite/NSg!_₹\ncoenobitic/J!_₹\ncoenzyme/N\ncoequal/JYNgS\ncoerce/Vd>SGZnv\ncoercer/Ng\ncoercion/~Ng\ncoeval/JYNSg\ncoexist/~VdG\ncoexistence/~Ng\ncoexistent/JN\ncoexists/V\ncoextensive/J\ncoffee/~NwSgJV\ncoffeecake/NwSg\ncoffeehouse/~NgS\ncoffeemaker/NSg\ncoffeepot/NgS\ncoffer/NSgV\ncofferdam/NgS\ncoffin/~NSgVdG\ncofounder/NSg\nco-founder/NSg\ncog/~NSgV\ncogency/Ng\ncogent/JY\ncogitate/VdSGXnv\ncogitation/Ng\ncogitator/NgS\ncognac/NwSg\ncognate/~JNgS\ncognisable/J!_₹\ncognisance/Ngr!_₹\ncognisant/J!_₹\ncognition/~Ngr\ncognitional/J\ncognitive/~JYN\ncognizable/J\ncognizance/Ngr\ncognizant/J\ncognomen/NSg\ncognoscente/Ng\ncognoscenti/N\ncogwheel/NSg\ncohabit/VSGd\ncohabitant/NgS\ncohabitation/Ng\ncoheir/NSg\ncohere/VdSG\ncoherence/~Ngi\ncoherency/Ng\ncoherent/~JYi\ncohesion/~Ng\ncohesive/~JYpN\ncohesiveness/Ng\ncoho/NgS\ncohort/~NSgV\ncoif/NgSV\ncoiffed/VtT\ncoiffing/V6\ncoiffure/NSgVdG\ncoil/~NSVdGUr\ncoil's/r\ncoilover/NgS\ncoin/~NgSVd>GZ\ncoinage/~NwSg\ncoincide/~VdSG\ncoincidence/~NwgS\ncoincident/JN\ncoincidental/JY\ncoiner/Ng\ncoinsurance/Nmg\ncoir/N\ncoital/J\ncoitus/Ng\ncoke/~NwgSVGd\ncol/~NS\ncola/~NwgS\ncolander/NSg\ncold/~J>Y^pNgS\ncoldblooded/J\ncoldness/Ng\ncoleslaw/Nmg\ncoleus/NgS\ncoley/NS\ncolic/NgJ\ncolicky/J\ncoliseum/~NgS\ncolitis/Ng\ncoll/~V\ncollab/NgS\ncollaborate/~VdSGXnv\ncollaboration/~Nwg\ncollaborationist/N\ncollaborative/~JYN\ncollaborator/~NgS\ncollage/~NwSgV\ncollagen/~Nmg\ncollapse/~VGdSNwg\ncollapsible/~JN\ncollar/~NSgVdG\ncollarbone/NSg\ncollard/NSg\ncollarless/J\ncollate/VdSGXn\ncollateral/~JYNmg\ncollateralise/V!_₹\ncollateralization/Ng\ncollateralize/V\ncollation/~NwgS\ncollator/NgS\ncolleague/~NgSV\ncollect/~VGdSJNrv\ncollect's\ncollectable/JNgS!_₹\ncollected/~JVU\ncollectedly/Ry\ncollectible/~JNSg\ncollection/~NwgSr\ncollective/~JYNgS\ncollectivisation/Nmg!_₹\ncollectivise/VdSG!_₹\ncollectivism/Ng\ncollectivist/JNSg\ncollectivization/~Nmg\ncollectivize/VdSG\ncollector/~NgS\ncolleen/~NSg\ncollege/~NSg\ncollegiality/Ng\ncollegian/NgSJ\ncollegiate/~JN\ncollide/~Vd>SGZ\ncollie/NSg>Z\ncollier/~Ng\ncolliery/~NSg\ncollision/~NSg\ncollisional/J\ncollisionless/J\ncollocate/VGdSNgJnX\ncollocation/NwgS\ncolloid/JNSg\ncolloidal/J\ncolloq/NJ\ncolloquial/~JYN\ncolloquialism/NSg\ncolloquies/NV\ncolloquium/NgS\ncolloquy/NgV\ncollude/VdSG\ncollusion/~Ng\ncollusive/J\ncologne/~NSg\ncolon/~NSg\ncolonel/~NSgV\ncolonelcy/Ng\ncolones/N\ncolonial/~JYNSg\ncolonialism/~Ng\ncolonialist/JNgS\ncolonisation/Ngre!_₹\ncolonise/VGSder!_₹\ncoloniser/NgS!_₹\ncolonist/~NSg\ncolonization/~Ngre\ncolonize/~VGSder\ncolonizer/NgS\ncolonnade/~NgSd\ncolonoscopy/NSg\ncolony/~NSgV\ncolophon/NSg\ncolor/~NwSJVGdrE<\ncolor code/NgSVdG<\ncolor coded/J<\ncolor's/<\ncolorable/J<\ncolorant/NSg<\ncoloration/~NgE<\ncoloratura/NgSJ<\ncolorblind/Jp<\ncolorblindness/Ng<\ncolorburst/Ng<\ncolored/~JNVU<\ncolored's/<\ncoloreds/N<\ncolorfast/Jp<\ncolorfastness/Ng<\ncolorful/~JYp<\ncolorfulness/Ng<\ncoloring's/<\ncolorist/NS<\ncolorization/Ng<\ncolorize/VdSG<\ncolorless/~JYp<\ncolorlessness/Ng<\ncolorway/NS\ncolossal/~JY\ncolossi/N\ncolossus/~Ng\ncolostomy/NSg\ncolostrum/Ng\ncolour/~NwSJVGdrE!@_₹\ncolour code/NgSVdG!@_₹\ncolour coded/J!@_₹\ncolourable/J!@_₹\ncolourant/NSg!@_₹\ncolouration/NgE!_₹\ncolourblind/Jp!@_₹\ncolourblindness/Ng!@_₹\ncolourburst/Ng!@_₹\ncoloured/JNVU!@_₹\ncoloureds/N!@_₹\ncolourfast/Jp!@_₹\ncolourfastness/Ng!@_₹\ncolourful/JYp!@_₹\ncolourfulness/Ng!@_₹\ncolourisation/Ng!_₹\ncolourise/VdSG!_₹\ncolourist/NS!@_₹\ncolourization/Ng@\ncolourize/VdSG@\ncolourless/JYp!@_₹\ncolourlessness/Ng!@_₹\ncolourway/NS!@_₹\ncolt/~NgSV\ncoltish/J\ncolumbine/~NSgJ\ncolumn/~NSgd\ncolumnar/J\ncolumnist/~NSg\ncom/~NJzL\ncoma/~NgS\ncomaker/NSg\ncomatose/~JV\ncomb/~NgSVd>GZz\ncombat/~NwSgVdGv\ncombatant/~NSgJ\ncombativeness/Nmg\ncombed/JVU\ncomber/Ng\ncombinable/J\ncombination/~NwSg\ncombinator/NgS\ncombinatorial/J\ncombinatoric/J\ncombinatorics/Nm\ncombine/~VdGSNr\ncombine's\ncombined/~JVNU\ncombiner/NgS\ncombings/Ng\ncombo/~NSgV\ncombust/VGdSJNv\ncombustibility/Nmg\ncombustible/~JNgS\ncombustion/~Nmg\ncome/~VbTG>SNgPiZ\ncome back/V/\ncomeback/~NgSV\ncomedian/~NgS\ncomedic/~J\ncomedienne/NgS\ncomedown/NgS\ncomedy/~NwSg\ncomeliness/Ng\ncomely/J^>p\ncomer's\ncomestible/JNSg\ncomet/~NSg\ncomeuppance/NSg\ncomfit/NSVE\ncomfit's\ncomfort/~NwSgVdGE\ncomfortable/~JpN\ncomfortableness/Ng\ncomfortably/~RyU\ncomforter/NgS\ncomforting/~JYV6N\ncomfortless/J\ncomfy/J>^\ncomic/~JNSg\ncomical/~JY\ncomicality/Ng\ncoming/~V6NgJ\ncomity/Ng\ncomm/~N\ncomma/~NSgV\ncommand/~NSgVd>GLZ\ncommand line/NgS\ncommandant/~NgS\ncommandeer/VGdS\ncommander/~NgS\ncommandment/~NgS\ncommando/~NSg\ncommemorate/~VGdSXnv\ncommemoration/~NwgS\ncommemorator/NgS\ncommence/~VdSGrL\ncommencement/~N0gr\ncommencements/N9\ncommend/VdGSNrB\ncommendably/Ry\ncommendation/~NwgSr\ncommendatory/JN\ncommensurable/J\ncommensurate/JYVi\ncomment/~NSgVGd\ncommentariat/NSg\ncommentary/~NwSg\ncommentate/VdSG\ncommentator/~NSg\ncommenter/NSg\ncommerce/~NmgV\ncommercial/~NSgJY\ncommercialisation/Ng!_₹\ncommercialise/VGdS!_₹\ncommercialism/Nmg\ncommercialization/~Nmg\ncommercialize/VGdS\ncommie/NSgJ\ncommingle/VdSG\ncommiserate/JVGdSnvX\ncommiseration/NgS\ncommissar/~NSg\ncommissariat/~NSg\ncommissary/~NSg\ncommission/~NwSVGdre\ncommission's\ncommissionaire/NS\ncommissioner/~NSg\ncommit/~VSNr\ncommitment/~NwgS\ncommittal/NSgJ\ncommitted/~VtTJrU\ncommittee/~NSg\ncommitteeman/N0g\ncommitteemen/N9\ncommitteewoman/N0g\ncommitteewomen/N9\ncommitter/NSg\ncommitting/~V6Nr\ncommode/NSEi\ncommode's\ncommodification/NwSg\ncommodify/VdSG\ncommodious/JY\ncommoditize/VdSG\ncommodity/~NSg\ncommodore/~NSg\ncommon/~JY^>pNVU\ncommon's\ncommonality/NwgS\ncommonalty/Ng\ncommoner/~JNgS\ncommonness/NmgU\ncommonplace/~JNgSV\ncommons/~NV\ncommonsense/JN\ncommonweal/NgH\ncommonwealth/~Ng\ncommonwealths/N\ncommotion/~NwSg\ncommunal/~JY\ncommune/~NSgVdGXn\ncommunicability/Ng\ncommunicable/Ji\ncommunicably/Ry\ncommunicant/NgSJ\ncommunicate/~VGdSnvX\ncommunication/~NwSg\ncommunicative/JU\ncommunicator/~NSg\ncommunion/~Nmg\ncommunique/NSg\ncommunism/~Nmg\ncommunist/~JNSg\ncommunistic/J\ncommunity/~NwSg\ncommutation/NgS\ncommutative/~J\ncommutativity/Nmg\ncommutator/NSg\ncommute/~Vd>GSNgBZ\ncommuter/~NgS\ncomorbidity/NSg\ncomp/~JYNgSVdG\ncompact/~NSgVGd>J^Yp\ncompaction/Nmg\ncompactness/Nmg\ncompactor/NSg\ncompanion/~NSgVB\ncompanionably/Ry\ncompanionship/~Ng\ncompanionway/NgS\ncompany/~NwSg\ncompany-wide        # in Cambridge and OED dictionaries\ncompanywide/J       # in Wiktionary and https://seeds.sproutsocial.com/writing/grammar-and-mechanics/\ncomparability/Nmg\ncomparable/~JNi\ncomparably/Ry%i\ncomparative/~JYNgS\ncompare/~VdGSNB\ncomparison/~NgS\ncompartment/~NSgV\ncompartmental/J\ncompartmentalisation/Nmg!_₹\ncompartmentalise/VdSG!_₹\ncompartmentalization/Nmg\ncompartmentalize/VdSG\ncompass/~NgSVGd\ncompassion/~NmgV\ncompassionate/~JYV\ncompatibility/~NmgSi\ncompatible/~JNgSi\ncompatibly/Ryi\ncompatriot/~NgSJ\ncompeer/NSgV\ncompel/~VS\ncompelled/~JVtT\ncompelling/~V6JYN\ncompendious/J\ncompendium/~NSg\ncompensate/~VdSGXn\ncompensated/~JVtTU\ncompensation/~Nwg\ncompensatory/~J\ncompere/NSVdG\ncompete/~VdSG\ncompetence/~N0wgi\ncompetences/N9\ncompetencies/~N\ncompetency/~Ngi\ncompetent/~JYi\ncompetition/~NwSg\ncompetitive/~JYp\ncompetitiveness/~Ng\ncompetitor/~NSg\ncompilation/~NwSg\ncompile/~Vd>GSNZB\ncompiler/~Ng\ncomplacence/Ng\ncomplacency/Ng\ncomplacent/JY\ncomplain/~Vd>GSZ\ncomplainant/NgS\ncomplainer/Ng\ncomplaint/~NSg\ncomplaisance/Ng\ncomplaisant/JY\ncomplected/VJ\ncomplement/~NSgVGd\ncomplementary/~JN\ncomplete/~VGd>SJ^pNnX\ncompleted/~VJU\ncompletely/R%\ncompleteness/~Ngi\ncompletion/~Ng\ncompletionist/JNgS\ncomplex/~JYNgSV\ncomplexion/~NgSVd\ncomplexional/J\ncomplexity/~NSg\ncompliance/~Nmg\ncompliant/~JY\ncomplicate/~VGdSJ\ncomplicated/~JYV\ncomplication/~NwgS\ncomplicit/~J\ncomplicity/~Nmg\ncompliment/~NgSVdG\ncomplimentary/JU\ncomply/~VdSGnX\ncompo/~NS\ncomponent/~NSgJ\ncomport/VGdSNL\ncomportment/Nmg\ncomposability/Nmg\ncompose/~VGSdrEeB\ncomposedly/Ry\ncomposer/~NgS\ncomposite/~JYNwgSVGdnX\ncomposition/~Nge\ncompositional/~J\ncompositor/NSg\ncompost/NSgVGd\ncomposure/NmgE\ncompote/NSg\ncompound/~NwgSJVGdB\ncompounded/~JVtTU\ncomprehend/~VSdG\ncomprehensibility/Ngi\ncomprehensible/Ji\ncomprehensibly/Ryi\ncomprehension/~Ngi\ncomprehensions/N\ncomprehensive/~JYpNgS\ncomprehensiveness/Ng\ncompress/~VGdSNev\ncompress's\ncompressed/~JVtTU\ncompressible/J\ncompression/~Nge\ncompressor/~NSge\ncomprise/~VGdS\ncompromise/~NgSVGd\ncomptroller/~NgS\ncompulsion/~NgS\ncompulsive/~JYpN\ncompulsiveness/Ng\ncompulsorily/Ry\ncompulsory/~JNSg\ncompunction/NSg\ncomputability/Nmg\ncomputable/J\ncomputation/~NSg\ncomputational/~JY\ncompute/~VdGSNr\ncomputer/~NgS\ncomputerate/J\ncomputerisation/Ng!_₹\ncomputerise/VGdS!_₹\ncomputerization/Ng\ncomputerize/VGdS\ncomputing/~NmgV6\ncomrade/~NSgVY\ncomradeship/Ng\ncon/~VGSNgJ\nconcatenate/VdSGJXn\nconcatenation/~Ng\nconcave/~JYpNV\nconcaveness/Ng\nconceal/~VSd>GZBL\nconcealed/~VtTJU\nconcealer/Nwg\nconcealment/Nmg\nconceit/~NSgVd\nconceited/JYpV\nconceitedness/Ng\nconceivable/~Ji\nconceivably/~Ryi\nconceive/~VdSGB\nconcentrate/~VdGSNgnX\nconcentration/~Ng\nconcentric/~JQ\nconcept/~NSgV\nconception/~NwSg\nconceptional/J\nconceptual/~JY\nconceptualisation/NSg!_₹\nconceptualise/VdSG!_₹\nconceptualization/NgSr\nconceptualize/VdSGr\nconcern/~Nw0gVdU\nconcerned/~JYVtTU\nconcerning/~JPV6N\nconcerns/~N9Vh\nconcert/~VdGSNE\nconcert's\nconcerted/~VJY\nconcertgoer/NS\nconcertina/NSgVGd\nconcertise/VdSG!_₹\nconcertize/VdSG\nconcertmaster/~NgS\nconcerto/~NSg\nconcessionaire/NgS\nconcessional/J\nconcessionary/NJ\nconch/NgV\nconchie/NS\nconchs/N\nconcierge/NgS\nconciliary/JQ\nconciliate/VdSGn\nconciliation/Ngr\nconciliator/NSg\nconciliatoriness/Ng\nconciliatory/J\nconcise/~JY^pVn\nconciseness/Ng\nconcision/Ng\nconclave/~NSg\nconclude/~VdSG\nconclusion/~NgS\nconclusive/~JYpi\nconclusiveness/Ngi\nconcoct/VdGSNJ\nconcoction/NgS\nconcomitant/JYNgS\nconcord/~NgV\nconcordance/~NSgV\nconcordant/J\nconcordat/~NSg\nconcourse/~NSg\nconcrete/~JYpNwSgVdGnX\nconcreteness/Ng\nconcretion/Ng\nconcubinage/Ng\nconcubine/~NgS\nconcupiscence/Ng\nconcupiscent/J\nconcur/~VS\nconcurred/~VtT\nconcurrence/~NSg\nconcurrency/~NwSg\nconcurring/~V6\nconcuss/Vv\nconcussion/~NwSg\ncondemn/~VSd>GZ\ncondemnation/~NwgS\ncondemnatory/J\ncondemner/Ng\ncondensate/~NgSVJnX\ncondensation/~Ng\ncondense/Vd>SGJZ\ncondenser/~Ng\ncondescending/JYV\ncondescension/Ng\ncondign/J\ncondiment/NwgSV\ncondition/~NwSVGdr\ncondition's\nconditional/~JYNSg\nconditionality/N\nconditioned/~VJU\nconditioner/NwSg\nconditioning/~NgV\ncondo/NSg\ncondolence/NSg\ncondom/NSg\ncondominium/~NgS\ncondone/VdSG\ncondor/~NSg\nconduce/VdSGv\nconduct/~NgVdGv\nconductance/~Ng\nconductibility/Ng\nconductible/J\nconduction/~Nmg\nconductivity/~Ng\nconductor/~NgS\nconductress/NgS\nconduit/~NSg\ncone/~NgV\nconeys/N\nconfab/NSgV\nconfabbed/VtT\nconfabbing/V6\nconfabulate/VdSGXn\nconfabulation/Ng\nconfection/NwSgV>Z\nconfectioner/Ng\nconfectionery/~NSg\nconfederacy/~NSg\nconfederate/~NgJV\nconfer/~VS\nconferee/NSg\nconference/~NgSVG\nconferrable/J\nconferral/Ng\nconferred/~VtT\nconferrer/NgS\nconferring/~V6N\nconfessed/~VtTJY\nconfession/~NwSg\nconfessional/~JNSg\nconfessor/~NgS\nconfetti/NgV\nconfidant/~NgS\nconfidante/NSg\nconfide/Vd>SGZ\nconfidence/~NmSg\nconfident/~JYN\nconfidential/~JY\nconfidentiality/~Ng\nconfider/Ng\nconfiding/V6JYN\nconfigurability/Ngm\nconfiguration/~NwgS\nconfigure/~VBr\nconfined/~VtTJU\nconfinement/~NwgS\nconfirm/~VSdGr\nconfirmation/~NwSgr\nconfirmatory/J\nconfirmed/~VtTJU\nconfiscate/VdSGJnX\nconfiscation/~Nmg\nconfiscator/NSg\nconfiscatory/J\nconflagration/NwgS\nconflate/VdGSJNXn\nconflation/Nmg\nconflict/~NwSgVGd\nconflictive/J\nconfluence/~NgS\nconfluent/JN\nconform/~VZB\nconformable/JU\nconformal/~J\nconformance/~Nmg\nconformism/Nmg\nconformist/~NSgJ\nconformity/~Nmg\nconfrere/NgS\nconfrontation/~NwSg\nconfrontational/~J\nconfusable/JNSg\nconfuse/~V>Z\nconfused/~VJY\nconfusing/~JYV\nconfutation/Nmg\nconfute/VdSG\nconga/NSgVdG\ncongeal/VSdGL\ncongealment/Ng\nconger/NSg\ncongeries/Ng\ncongest/NSVdGv\ncongestion/~Nmg\nconglomerate/~NSgJVdGXn\nconglomeration/Ng\ncongrats/Ng\ncongratulate/VGdSXn\ncongratulation/Ng\ncongratulatory/J\ncongregant/NgS\ncongregate/JVGdSnX\ncongregation/~Ng\ncongregational/~J\ncongregationalism/Ng\ncongregationalist/~JNgS\ncongress/~NgSV\ncongressional/~JY\ncongressman/~N0g\ncongressmen/~N9\ncongresspeople/N9\ncongressperson/N0gS\ncongresswoman/~Ng\ncongresswomen/9\ncongruence/~Ng\ncongruent/~JY\ncongruity/NSgi\ncongruous/J\nconic/~JNSg\nconical/~JYN\nconifer/~NSg\nconiferous/~J\nconjectural/JYN\nconjecture/~NgSVGd\nconjoint/J\nconjugal/JY\nconjugate/~VdGSNJXn\nconjugation/~NwgS\nconjunct/NgSJv\nconjunctiva/~NSg\nconjunctive/JNSg\nconjunctivitis/Ng\nconjuration/NgS\nconjure/Vd>GSNZ\nconjurer/Ng\nconk/NgVd>Z\nconlang/NSgVG>d     # conlang (n/v) < \"constructed language\", plu. 'conlangs', regular verb; also \"conlanging\" for the activity\nconman/N\nconmen/9\nconnect/~VdGSNrEv\nconnectable/J\nconnected/~JVU\nconnection/~NwgSE\nconnective/~JNgS\nconnectivity/~Ng\nconnector/~NgS\nconned/VtT\nconning/V6N\nconniption/NgS\nconnivance/Ng\nconnive/Vd>SGZ\nconniver/Ng\nconnoisseur/NSg\nconnotative/J\nconnubial/J\nconquer/~VSdGr\nconquerable/JU\nconquered/~VU\nconqueror/~NgS\nconquest/~NgVr\nconquistador/~NSg\nconrod/NgS\ncons/~N9SVhdG\nconsanguineous/J\nconsanguinity/Nmg\nconscienceless/J\nconscientious/~JYp\nconscientiousness/Ng\nconscious/~JYpNU\nconsciousness/~N0mgU\nconsciousnesses/N9\nconscription/~Nmg\nconsecrate/VdSGJrn\nconsecrated/~VU\nconsecration/~N0gr\nconsecrations/N9\nconsecutive/~JYN\nconsensual/~J\nconsensus/~NgSV\nconsent/~VdGSNwg\nconsequence/~NSgV\nconsequent/~JYN\nconsequential/JYi\nconservancy/~NSg\nconservation/~Ng\nconservationism/Nmg\nconservationist/~NSg\nconservatism/~Nmg\nconservative/~NgSJY\nconservatoire/~NS\nconservator/NSg\nconservatory/~JNSg\nconsider/~VGSdr\nconsiderable/~JNi\nconsiderably/~R%\nconsiderate/JYpVin\nconsiderateness/Nmgi\nconsideration/~Nw0gri\nconsiderations/~N9\nconsidered/~VJU\nconsign/VSdGr\nconsignee/NgS\nconsignment/NgS\nconsist/~VdGSN\nconsistence/NgS\nconsistency/~NSgi\nconsistent/~JYNi\nconsistory/~NSg\nconsolable/Ji\nconsolation/~NgS\nconsolatory/JN\nconsolidate/~VdSGJXn\nconsolidated/~JVU\nconsolidation/~Ng\nconsolidator/NgS\nconsoling/JYVN\nconsomme/Ng\nconsonance/NwSg\nconsonant/~NSgJY\nconsortia/N\nconsortium/~Ng\nconspectus/NgS\nconspicuous/~JYpi\nconspicuousness/Ngi\nconspiracism/Ng\nconspiracist/NgS\nconspiracy/~NwSgV\nconspirator/~NgS\nconspiratorial/JY\nconspire/~VGd\nconst/~NgSJ\nconstable/~NSgV\nconstabulary/~JNSg\nconstancy/Ngi\nconstant/~JYNgS\nconstellation/~NSg\nconsternation/~Ng\nconstipate/VGdSn\nconstipation/~Ng\nconstituency/~NSg\nconstituent/~JNSg\nconstitute/~VdGSNrnv\nconstitution/~Ngr\nconstitutional/~JYNgS\nconstitutionalism/N\nconstitutionality/~NgU\nconstitutions/~N\nconstrained/~VJU\nconstraint/~NSg\nconstrict/VGSdv\nconstriction/NwSg\nconstrictor/NSg\nconstruable/J\nconstruct/~NSVdGerv\nconstruct's\nconstruction/~NwgSer\nconstructional/J\nconstructionist/JNSe\nconstructionist's\nconstructive/~JYpU\nconstructiveness/Ng\nconstructor/~NgS\nconstrue/NSVGd\nconsul/~NSgK\nconsular/~JNK\nconsulate/~NSg\nconsulship/~Ng\nconsult/~NSVGd\nconsultancy/~NSg\nconsultant/~NgS\nconsultation/~NgS\nconsultative/~J\nconsumable/JNSg\nconsume/~Vd>SGBZ\nconsumed/~JVtTU\nconsumer/~NgS\nconsumerism/Nmg\nconsumerist/JNgS\nconsummate/JYVGdSnX\nconsummated/~VU\nconsumption/~Nmg\nconsumptive/JNSg\ncont/~JV\ncontact/~NwSVdGr\ncontactable/J\ncontactless/JN\ncontactor/NSg\ncontagion/NwgS\ncontagious/~JYp\ncontagiousness/Nmg\ncontain/~VSd>GBLZ\ncontainer/~NgS\ncontainerisation/Nmg!_₹\ncontainerise/VdSG!_₹\ncontainerization/Nmg\ncontainerize/VdSG\ncontainment/~Nmg\ncontaminant/~NSg\ncontaminate/VdSGre\ncontaminated/~VJU\ncontamination/~Nmge\ncontaminator/NSg\ncontd/J\ncontemn/VSdG\ncontemplate/~VdSGnv\ncontemplation/~Nmg\ncontemplative/~JYNSg\ncontemporaneity/Ng\ncontemporaneous/~JY\ncontempt/~Nmg\ncontemptible/J\ncontemptibly/Ry\ncontemptuous/JYp\ncontemptuousness/Nmg\ncontender/~NgS\ncontent/~JNwSgVdGEL\ncontented/VtTJYE\ncontentedness/Nmg\ncontention/~NwSg\ncontentious/~JYpU\ncontentiousness/Nmg\ncontently/Ry\ncontentment/NmgE\nconterminous/JY\ncontest/NwgSVdG\ncontestable/Ji\ncontestant/~NgS\ncontested/~JVtTU\ncontext/NwgS\ncontextualisation/Nmg!_₹\ncontextualise/VdSG!_₹\ncontextualization/Nmg\ncontextualize/VdSG\ncontiguity/Nmg\ncontiguous/~JY\ncontinence/Ngi\ncontinent/~NSgJ\ncontinental/~JNSg\ncontingency/~NSg\ncontingent/~NSgJY\ncontinua/N9\ncontinual/~JY\ncontinuance/~NgSE\ncontinuation/~NgSE\ncontinue/~VGdSNE\ncontinuity/~NSgE\ncontinuous/~JYE\ncontinuum/~N0g\ncontort/VGd\ncontortion/NgS\ncontortionist/NSg\ncontra/~PNV\ncontraband/~NgJV\ncontrabassoon/NS\ncontraception/~Nmg\ncontraceptive/~JNSg\ncontract/~NgJVdG\ncontractible/J\ncontractile/J\ncontractility/N\ncontraction/~NwgS\ncontractionary/J\ncontractual/~JYN\ncontradict/~VSdG\ncontradiction/~NwSg\ncontradictory/~JN\ncontradistinction/NgS\ncontraflow/NS\ncontrail/NgSV\ncontraindicate/VGdSnX\ncontraindication/Ng\ncontralto/~NSg\ncontrapositive/NSg\ncontraption/NSg\ncontrapuntal/JY\ncontrarian/NSgJ\ncontrarianism/Nmg\ncontrariety/Ng\ncontrarily/Ry\ncontrariness/Ng\ncontrariwise/\ncontrary/~JpNSgV\ncontrast/~NgSVdG\ncontrastive/J\ncontravene/VGdS\ncontravention/NSg\ncontretemps/Ng\ncontribute/~VGdXn\ncontribution/~NgS\ncontributor/~NgS\ncontributory/JN\ncontrition/Nmg\ncontrivance/NwgS\ncontrive/VGd>SZ\ncontriver/Ng\ncontrol/~VSNwe\ncontrol flow/Nmg\ncontrol's\ncontrollable/JNU\ncontrolled/~JVtTUe\ncontroller/~NgS\ncontrolling/~JV6Ne\ncontroversial/~JYN\ncontroversy/~NwSg\ncontrovert/VdSG\ncontrovertible/Ji\ncontumacious/JY\ncontumacy/Ng\ncontumelious/J\ncontumely/NSg\ncontuse/VdSGXn\ncontusion/NgS\nconundrum/~NSg\nconurbation/~NgS\nconvalesce/VdSG\nconvalescence/NwgS\nconvalescent/JNSg\nconvection/~Nmg\nconvectional/J\nconvective/J\nconvector/NS\nconvene/~VdSGr\nconvener/NgS\nconvenience/~NwgSVi\nconvenient/~JYi\nconvent/~NSgV\nconventicle/NgSV\nconvention/~NwSg\nconventional/~JYNU\nconventionalise/VGdS!_₹\nconventionality/NmgU\nconventionalize/VGdS\nconventioneer/NS\nconvergence/~NwgS\nconvergent/~JYN\nconversant/JN\nconversation/~NwgSV\nconversational/~JY\nconversationalist/NSg\nconverse/~VNJY\nconvert/~VGdSNr\nconvert's\nconverted/~JVU\nconverter/~NSg\nconvertibility/Ng\nconvertible/~JNSg\nconvex/~JYNV\nconvexity/Ng\nconvey/~VSdGB\nconveyance/~NgSVG\nconveyor/~NgS\nconvict/~VGdSNg\nconviction/~NwgS\nconvince/~VGdS\nconvinced/~JVU\nconvincing/~JYVNU\nconvivial/JY\nconviviality/Ng\nconvo/NgS\nconvoke/VdSG\nconvoluted/~JV\nconvolution/~NgS\nconvolutional/J\nconvoy/~NSgVdG\nconvulse/VGdSnvX\nconvulsion/Ng\nconvulsive/JY\ncony/Ng\ncoo/~NSgVGdJ\ncook/~NSVdGr\ncook's\ncookbook/~NgS\ncooked/~JVtTU\ncooker/NSg\ncookery/~NSg\ncookhouse/NS\ncookie/~NSgV\ncooking/~NmgJV6\ncookout/NSg\ncooktop/NSg\ncookware/Nmg\ncool/~JY^>pNgSVdGZ\ncoolant/~NwSg\ncooldown/NSg\ncool down/V/\ncooler/~NgSJ\ncoolie/NSg\ncoolish/J\ncoolness/Ng\ncoon/~NgSV!_₹\ncoonskin/NgS\ncoop/~NgSVd>GZ\ncooper/~NgVdG\ncooperage/Ng\ncooperate/~VdSGnv\ncooperation/~Nmg\ncooperative/~JYpNgS\ncooperativeness/Ng\ncooperator/NSg\ncoordinate/~JYNSgVdGn\ncoordinated/~JVU\ncoordination/~Ng\ncoordinator/~NgS\ncoot/~NgS\ncootie/NSg\ncop/~VGdSNgz\ncopacetic/J\ncopay/VNg\ncope/~VSNg\ncopier/NSg\ncopilot/NSgV\ncoping/~NgV\ncopious/~JYp\ncopiousness/Ng\ncopium/Nmg\ncopped/VtTJ\ncopper/~NwSgJV\ncopperhead/~NSg\ncopperplate/NgV\ncoppery/J\ncopping/V6\ncopra/Ng\ncopse/NSgV\ncopter/NSgV\ncopula/NSg\ncopulate/VGdSJnv\ncopulation/Ng\ncopulative/JNSg\ncopy/~NSVdGr\ncopy's\ncopybook/NSg\ncopycat/NgSJV\ncopycatted/VtT\ncopycatting/V6\ncopyist/NgS\ncopyleft/NV\ncopyright/~NSgVGd\ncopywrite/VSG\ncopywriter/NgS\ncopywritten/VT\ncopywrote/Vt\ncoquetry/NSg\ncoquette/NSgVdGJ\ncoquettish/JY\ncor/~N\ncoracle/NSg\ncoral/~NwSgJ\ncorbel/NSgV\ncord/~NSgVGdr\ncordage/Ng\ncordial/~JYNSg\ncordiality/Nmg\ncordillera/~NgS\ncordite/Nmg\ncordless/JN\ncordon/~NSgVdG\ncordovan/NgJ\ncorduroy/NwgSJV\ncorduroys/N9g\ncore/~NgSJ>VGdZ\ncoreligionist/NS\ncorer/NgS\ncorespondent/NgS\ncorgi/NSg\ncoriander/Nmg\ncork/~NSVdGJU\ncork's\ncorkage/Nmg\ncorker/~NSg\ncorkscrew/NSgJVdG\ncorky/J\ncorm/NgS\ncormorant/~NSgJ\ncorn/~NwgSVd>GZ\ncornball/NgSJ\ncornbread/Nmg\ncorncob/NgSV\ncorncrake/NS\ncornea/~NSg\ncorneal/~J\ncorner/~NgSVGd\ncornerstone/~NSg\ncornet/~NSg\ncornfield/NS\ncornflakes/N9g\ncornflour/Nmg\ncornflower/NSgJ\ncornice/~NgSV\ncorniche/NgS\ncornily/Ry\ncorniness/Nmg\ncornmeal/Nmg\ncornrow/NgSVdG\ncornstalk/NSg\ncornstarch/Nmg\ncornucopia/NgS\ncorny/J>^p\ncorolla/~NgS\ncorollary/NSgJ\ncorona/~NSgV\ncoronal/JNgS\ncoronary/~JNSg\ncoronation/~NSg\ncoronavirus/~NgS\ncoroner/~NgS\ncoronet/~NgS\ncoroutine/~NgS\ncorp/~N\ncorpora/N9\ncorporal/~JNSg\ncorporate/~JYNVXn\ncorporation/~Ngi\ncorporatism/Nmg\ncorporeal/JY\ncorporeality/Ng\ncorps/~NgS\ncorpse/~NgV\ncorpsman/N0g\ncorpsmen/N9\ncorpulence/Ng\ncorpulent/J\ncorpus/~N0g\ncorpuscle/NgS\ncorpuscular/J\ncorr/~N\ncorral/~NSgV\ncorralled/VtT\ncorralling/V6\ncorrect/~JY^>pNSVdGvB\ncorrected/~VtTU\ncorrection/~NSg\ncorrectional/~J\ncorrective/~JNSg\ncorrectness/~Ngi\ncorrector/NgS\ncorrelate/~VdGSNgXnv\ncorrelated/~VtTJU\ncorrelation/~NwgS\ncorrelational/J\ncorrelative/JNgS\ncorrespond/~VSdG\ncorrespondence/~NSge\ncorrespondent/~JNSg\ncorresponding/~VNJY\ncorridor/~NSg\ncorrie/NS\ncorroborate/VGdSnvX\ncorroborated/~JVU\ncorroboration/Nmg\ncorroborator/NSg\ncorroboratory/J\ncorrode/VGdS\ncorrosion/~Nmg\ncorrosive/~JYNSg\ncorrugate/VGdSJnX\ncorrugation/NwgS\ncorrupt/~JY^>pVdSG\ncorruptibility/Ngi\ncorruptible/JNi\ncorruption/~NwgS\ncorruptness/Nmg\ncorsage/NgS\ncorsair/~NgS\ncorset/NSgVGd\ncortege/NgS\ncortex/~NgS\ncortical/~J\ncortices/9\ncortisol/Nmg\ncortisone/Nmg\ncorundum/Nmg\ncoruscate/VGdSn\ncoruscation/Ng\ncorvette/~NSg\ncos/~NgCI\ncosh/NSVdGJ\ncosign/VGd>SNZ\ncosignatory/NSgJ\ncosigner/NgS\ncosily/Ry!_₹\ncosine/~NSg\ncosiness/Nmg!_₹\ncosmetic/~JNSgQ\ncosmetician/NgS\ncosmetologist/NgS\ncosmetology/Nmg\ncosmic/~JQ\ncosmogonist/NSg\ncosmogony/NSg\ncosmological/~J\ncosmologist/NSg\ncosmology/~NSg\ncosmonaut/~NSg\ncosmopolitan/~JNgS\ncosmopolitanism/Nmg\ncosmos/~NgS\ncosplay/NgSVdG>\ncosponsor/NSgVGd\ncosset/VGdSN\ncossetted/VtT\ncossetting/V6\ncost/~VbtTdGSNwgYz\ncost cutting/Nmg\ncost-effective/J\ncostar/NSgVb\ncostarred/VtT\ncostarring/V6\ncostliness/Ng\ncostly/~J^>p\ncostume/~NgSVGd>Z\ncostumer/Ng\ncostumier/NS\ncostumiers/N!@_₹\ncosy/J^>pNSgVGdU!_₹\ncot/~NSg\ncotangent/NgS\ncote/~NgSV\ncoterie/NgS\ncoterminous/~J\ncotillion/NSgV\ncottage/~NgSVG>Z\ncottager/Ng\ncottar/NSg\ncotter/~NSgV\ncotter pin/NgS\ncotton/~NwSgJVGd\ncottonmouth/Ng\ncottonmouths/N\ncottonseed/NwgS\ncottontail/NgS\ncottonwood/~NSg\ncottony/J\ncotyledon/NgS\ncouch/~NgSVdG\ncouchette/NS\ncougar/~NSg\ncough/~VdGNg\ncoughs/NV\ncould/~NA\ncould've/V\ncouldn't/~VA\ncoulee/NSg\ncoulis/N\ncoulomb/~NgS\ncouncil/~NgS\ncouncillor/NSg!@_₹\ncouncilman/~Ng\ncouncilmen/9\ncouncilor/~NgS\ncouncilperson/N0Sg\ncouncilwoman/N0g\ncouncilwomen/N9\ncounsel/~NgSVdGz\ncounselled/VtT!@_₹\ncounselling/NV6!@_₹\ncounsellor/NSg!@_₹\ncounselor/~NgS\ncount/~VdGSNgEr\ncountability/Nmg\ncountable/~JNU\ncountably/Ry\ncountdown/~NgSV\ncounted/~VU\ncountenance/NSVGdE\ncountenance's\ncounter/~NgSVJE\ncounteract/~NSVGdv\ncounteraction/NgS\ncounterargument/NS\ncounterattack/~NgSVGd\ncounterbalance/NgSVGd\ncounterblast/NS\ncounterclaim/NSgVGd\ncounterclockwise/~J\ncountercultural/JY\ncounterculture/~NSg\ncountered/~V\ncounterespionage/Ng\ncounterexample/NS\ncounterfactual/JNS\ncounterfeit/~J>NgSVGdZ\ncounterfeiter/Ng\ncounterfoil/NgS\ncountering/~V\ncounterinsurgency/NSg\ncounterintelligence/~Nmg\ncounterintuitive/Y\ncounterintuitively/Ry\ncounterman/Ng\ncountermand/VGdSNg\ncountermeasure/NSg\ncountermelody/NwgS\ncountermen/N9\ncountermove/NSV\ncounternarrative/NgS\ncounteroffensive/~NSgJ\ncounteroffer/NSgV\ncounterpane/NSg\ncounterpart/~NSgV\ncounterparty/NSg\ncounterpetition/NV\ncounterpoint/~NgSVdG\ncounterpoise/NgSVGd\ncounterproductive/~J\ncounterprotest/NgSVdG\ncounterrevolution/NSg\ncounterrevolutionary/JNSg\ncountersign/NSgVGd\ncountersignature/NgS\ncountersink/NSgVG\ncounterspy/NSgV\ncounterstrike/NSgVG\ncounterstroke/NSg\ncounterstruck/V\ncountersunk/VJ\ncountertenor/NgS\ncounterterrorism/Ng\ncounterterrorist/NSg\ncountertop/NgS\ncountervail/VGSd\ncounterweight/NgSV\ncountess/~NgS\ncountless/~J\ncountrified/JV\ncountry/~NSgJ\ncountryman/~Ng\ncountrymen/~9\ncountryside/~NgS\ncountrywide/J\ncountrywoman/Ng\ncountrywomen/9\ncounty/~NSgJ\ncountywide/J\ncoup/~NSVr\ncoup's\ncoupe/~NSg\ncouple/~NSJVGdUe\ncouple's\ncouplet/NgS\ncoupling/~NSgV\ncoupon/~NSgV\ncourage/~NgV\ncourageous/~JYp\ncourageousness/Nmg\ncourgette/NgS\ncourier/~NgSVdG\ncourse/~NgSVdGE\ncoursebook/NgS\ncourser/~NgS\ncourseware/Nmg\ncoursework/~Nmg\ncourt/~NwSgVdGY\ncourteous/~JYE\ncourteousness/Ng\ncourtesan/NSg\ncourtesy/~NSgVJE\ncourthouse/~NgS\ncourtier/~NSg\ncourtliness/Nmg\ncourtly/~J>^p\ncourtroom/~NgS\ncourtship/~NgS\ncourtyard/~NgS\ncouscous/Nmg\ncousin/~NSgV\ncouture/~Ng\ncouturier/NgS\ncovalent/J\ncovariance/Nmg\ncovariant/JNgS\ncove/~NgSV\ncoven/~NSg\ncovenant/~NgSVdG\ncover/~NwSJVGdrEUB\ncover's\ncoverage/~Nmg\ncoverall/NgS\ncoverglass/Ng\ncovering/NwgS\ncoverlet/NgS\ncovert/~JYpNSg\ncovertness/Nmg\ncovet/VSdG\ncovetous/JYp\ncovetousness/Nmg\ncovey/NSgV\ncovid/~NgS\ncow/~NSgVGd>Z\ncoward/~NSgJYV\ncowardice/~Nmg\ncowardliness/Nmg\ncowbell/NgS\ncowbird/NgS\ncowboy/~NSgV\ncowcatcher/NgS\ncower/VdG\ncowgirl/NgSV\ncowhand/NgS\ncowherd/NgS\ncowhide/NgSV\ncowl/NgSVGJz\ncowlick/NgS\ncowling/NgV\ncowman/N0g\ncowmen/N9\ncoworker/NgS\ncowpat/NS\ncowpoke/NgS\ncowpox/Nmg\ncowpuncher/NSg\ncowrie/NSg\ncowshed/NgS\ncowslip/NSg\ncox/~NSVGd\ncoxcomb/NgS\ncoxswain/NgSV\ncoy/~J^Y>pVN\ncoyness/Nmg\ncoyote/~NSgV\ncoypu/NSg\ncozen/VSdG\ncozenage/Ng\ncozily/Ry\ncoziness/Ng\ncozy/J^>pNSgVGdU\ncpd/~N\ncpl/~N\ncps/~N\ncrab/~NgSV\ncrabbed/JVtT\ncrabber/NSg\ncrabbily/Ry\ncrabbiness/Nmg\ncrabbing/V6N\ncrabby/J>^p\ncrabgrass/Nmg\ncrablike/J\ncrabwise/J\ncrack/~Vd>GSNwgJYZz\ncrackdown/~NgS\ncracker/~NgS\ncrackerjack/JNgS\ncrackhead/NgS\ncrackle/NSgVdGz\ncrackling/NmgJV\ncrackpot/NgSJ\ncrackup/NSg\ncradle/~NSgVdG\ncraft/~NwSgVdG>\ncraftily/Ry\ncraftiness/Nmg\ncraftsman/~N0g\ncraftsmanship/~Nmg\ncraftsmen/~N9\ncraftspeople/N9\ncraftswoman/N0g\ncraftswomen/N9\ncrafty/~J>^p\ncrag/~NgS\ncragginess/Nmg\ncraggy/J>^p\ncram/~VSN\ncrammed/VtT\ncrammer/NS\ncramming/V6N\ncramp/NSgVdGJ\ncramping/VNg\ncrampon/NSgV\ncranberry/~NwSgJ\ncrane/~NSgVdG\ncranial/~J\ncraniotomy/NSg\ncranium/NSg\ncrank/~JNSgVdG\ncrankcase/NSg\ncrankily/Ry\ncrankiness/Ng\ncrankshaft/~NgSV\ncranky/J>^p\ncranny/NSgVd\ncrap/~NmgSVJ\ncrape/NSgV\ncrapped/VtT\ncrapper/NSJ\ncrappie/NSg>^\ncrapping/V6\ncrappy/J\ncraps/NgVh\ncrapshooter/NgS\ncrash/~NgSJVdG\ncrass/J>Y^p\ncrassness/Ng\ncrate/~NSgVd>GZ\ncrater/~NgVdG\ncravat/NSgV\ncrave/~VdGSNz\ncraven/~JYpNSgV\ncravenness/Ng\ncraving/~NgV\ncraw/NgSV\ncrawdad/NSg\ncrawfish/NgS09      # singular and plural, also has a plural in -s\ncrawl/~Vd>GSNgZ\ncrawlable/J\ncrawler/~Ng\ncrawlspace/NSg\ncrawly/J^>Sg\ncray/~NSJ\ncrayfish/~NgS09V    # singular and plural, also has a plural in -s\ncrayola/S\ncrayon/~NwSgVGd\ncraze/~NSgVdG\ncrazily/Ry\ncraziness/Nmg\ncrazy/~J>^pNSg\ncreak/NSgVdG\ncreakily/Ry\ncreakiness/Nmg\ncreaky/J>^p\ncream/~NwSgJ>VdGZ\ncreamer/Ng\ncreamery/NSg\ncreamily/Ry\ncreaminess/Ng\ncreamy/~J>^pN\ncrease/~NgSVGdie\ncreate/~VdSGJKrnv\ncreatine/Ng\ncreation/~NSgr\ncreation's/K\ncreationism/~NwSg\ncreationist/NSgJ\ncreative/~JYpNSg\ncreativeness/Ng\ncreativity/~Ng\ncreator/~NgS\ncreature/~NSg\ncreche/NSg\ncred/N\ncredence/~NmgV\ncredential/JNSgVGd\ncredentialism/Ng\ncredenza/NSg\ncredibility/~Nmgi\ncredible/~Ji\ncredibly/Ryi\ncredit/~VGdSNgEB\ncreditably/RyE\ncreditor/~NSg\ncreditworthy/Jp\ncredo/~NSg\ncredulity/Ngi\ncredulous/JYi\ncredulousness/Nmg\ncreed/~NSgV\ncreek/~NSg\ncreel/NSgV\ncreep/~Vb>GSNgZ\ncreeper/~NgS\ncreepily/Ry\ncreepiness/Nmg\ncreepy/~J^>p\ncremains/Ng\ncremate/VGdSnX\ncremation/~Ng\ncrematoria/N9\ncrematorium/~N0gS\ncrematory/JNSg\ncreme/~JNSgV\ncrenelate/VGdSXn\ncrenelation/Ng\ncrenellate/VdSGnX!@_₹\ncrenellation/Ng!@_₹\ncreole/~NSg\ncreosote/NgSVGd\ncrêpe/NSgV\ncrepe/NSgV\ncrept/VtT\ncrepuscular/J\ncrescendo/NSgVe\ncrescent/~NgSJV\ncress/Nmg\ncrest/~NSgVdG\ncrestfallen/J\ncrestless/J\ncretaceous/~J\ncretin/NSg\ncretinism/Nmg\ncretinous/J\ncretonne/Ng\ncrevasse/NSgV\ncrevice/NgSV\ncrew/~NgSVdG\ncrewel/NgV\ncrewelwork/Ng\ncrewman/Ng\ncrewmen/~N9\ncrib/~NgSV\ncribbage/Nmg\ncribbed/VtTJ\ncribber/NgS\ncribbing/V6N\ncrick/~NSgVdG\ncricket/~NwgSV>GZ\ncricketer/~Ng\ncrier/Ng\ncrikey/\ncrime/~Nw☁SgV\ncriminal/~JYNgS\ncriminalisation/Nmg!_₹\ncriminalise/VGdSe!_₹\ncriminality/Ng\ncriminalization/Nmg\ncriminalize/VGdSe\ncriminologist/NgS\ncriminology/~Ng\ncrimp/JNSgVdG\ncrimson/~NSgJVdG\ncringe/VdGSNgJ\ncrinkle/VdGSNg\ncrinkly/J>^N\ncrinoline/NwSg\ncripes/\ncripple/~J>NSgVdGZ\ncrippler/Ng\ncrippleware/Nmg\ncrippling/~V6JYN\ncrises/~N9\ncrisis/~N0g\ncrisp/~JY^>pNSgVdG\ncrispbread/NS\ncrispiness/Nmg\ncrispness/Nmg\ncrispy/~J>^pN\ncrisscross/VGdSNgJ\ncriteria/~N9\ncriterion/~N0g\ncritic/~NSgV\ncritical/~JYNU\ncriticality/Nm\ncriticise/VGd>SZ!_₹\ncriticiser/Ng!_₹\ncriticism/~NwgS\ncriticize/~VGd>SZ\ncriticizer/Ng\ncritique/~NgSVGd\ncritter/NSg\ncroak/NSgVdG\ncroaky/J>^\ncrochet/NSgVd>GZ\ncrocheter/Ng\ncrocheting/VNg\ncrock/NSgVd\ncrockery/Nmg\ncrocodile/~NSgV\ncrocodilian/NSgJ\ncrocus/~NgS\ncroft/~NSV>GZ\ncroissant/NgS\ncrone/NSg\ncrony/NSg\ncronyism/Nmg\ncrook/~NSgVdGJ\ncrooked/~V>J^Yp\ncrookedness/Ng\ncrookneck/NSg\ncroon/Vd>GSNgZ\ncrooner/NgS\ncrop/~NgSV\ncropland/NwSg\ncropped/~VtTJ\ncropper/NgS\ncropping/V6N\ncroquet/NgSVdG\ncroquette/NSg\ncrore/NgS₹\ncrosier/NgS\ncross/~NSJ^PVGdrU\ncross-border/JR\ncross section/NgS\ncross-threaded/J\ncross's\ncrossbar/NSgV\ncrossbeam/NgS\ncrossbencher/NgS\ncrossbones/~N9g\ncrossbow/~NSg\ncrossbowman/N0g\ncrossbowmen/N9\ncrossbred/JNVtT\ncrossbreed/VbGSNg\ncrosscheck/NSgVdG\ncrosscurrent/NgS\ncrosscut/NSgV\ncrosscutting/V6N\ncrosser/NJ\ncrossfade/VdSGNg\ncrossfire/~NgS\ncrosshair/NSg\ncrosshatch/NSVGd\ncrossing/~NSgJV6\ncrossly/Ry\ncrossmember/NgS\ncrossness/Ng\ncrossover/~NgSJ\ncrosspatch/NgS\ncrosspiece/NSg\ncrossroad/NgS\ncrossroads/~Ng\ncrosstown/J\ncrosswalk/NgSV\ncrosswind/NgS\ncrosswise/J\ncrossword/NgS\ncrotch/NgSV\ncrotchet/NSgV\ncrotchety/J\ncrouch/~VGdSNg\ncroup/~NgV\ncroupier/Ng\ncroupy/J^>Z\ncrouton/NgS\ncrow/~NwgSJVdG\ncrowbar/NgSV\ncrowd/~VdGSNg\ncrowded/~JVtTU\ncrowdfund/VSdG\ncrowdsource/VSdG\ncrowfeet/N9\ncrowfoot/NSg\ncrown/~NSgJVdG\ncrowned/~VtTJU\ncrozier/NgS!@_₹\ncrucial/~JY\ncrucible/~NSg\ncrucifix/~NgS\ncrucifixion/~NSg\ncruciform/JNSg\ncrucify/VdSG\ncrud/NgV\ncruddy/J^>\ncrude/~J>Y^pNg\ncrudeness/Ng\ncrudites/Ng\ncrudity/NSg\ncruel/~JY^>pVN\ncrueller/Jc!@_₹\ncruellest/Ju!@_₹\ncruelness/Nmg\ncruelty/~NwSg\ncruet/NSg\ncruft/~NmgSVd\ncrufty/J\ncruise/~NSgVd>GZ\ncruiser/~Ng\ncruller/NgS\ncrumb/NSgVdGY\ncrumble/VGdSNwg\ncrumbliness/Ng\ncrumbly/J^>pN\ncrumby/J^>\ncrumminess/Nmg\ncrummy/J^>pN\ncrumpet/NgS\ncrumple/NgSVGd\ncrunch/~VGd>SNg\ncruncher/NgS\ncrunchiness/Nmg\ncrunchy/~J^>pN\ncrupper/NgSV\ncrusade/~NgSVGd>Z\ncrusader/~Ng\ncruse/NSg\ncrush/~NgSVd>GZ\ncrusher/~NgS\ncrushing/~V6JYN\ncrust/~NwSgVdG\ncrustacean/~NSg\ncrustal/J\ncrustily/Ry\ncrustiness/Nmg\ncrusty/J^>pN\ncrutch/NgSV\ncrux/NgS\ncry/~VGd>SNgZz\ncrybaby/NSgV\ncryogenic/~JSQ\ncryogenics/Nmg\ncryonics/Nm\ncryosurgery/NwgS\ncrypt/~NSg\ncryptanalysis/~Nm\ncryptic/~JNQ\ncrypto/~NmSg\ncryptocurrency/NwSg\ncryptogram/NSg\ncryptographer/NSg\ncryptographic/JQ\ncryptography/~Nmg\ncrystal/~NwSgJ\ncrystalline/~JN\ncrystallisation/NwgS!_₹\ncrystallise/VdSGr!_₹\ncrystallization/~NwgS\ncrystallize/VdSGr\ncrystallographic/~J\ncrystallography/~Nmg\nct/~N\nctn/N\nctr/N\ncu/~\ncub/~NSgVGd>Z\ncubby/NgS\ncubbyhole/NgSV\ncube/~NgSVJ\ncuber/Ng\ncubic/~JN\ncubical/J\ncubicle/NgS\ncubism/~Nmg\ncubist/JNSg\ncubit/NSg\ncuboid/~JNS\ncuck/NSgVdG\ncuckold/NgSVdG\ncuckoldry/Nmg\ncuckoo/~NSgVJ\ncucumber/~NwSg\ncud/NSgV\ncuddle/NSgVdG\ncuddly/J^>\ncudgel/NSgVGdz\ncudgelled/VtT!@_₹\ncudgelling/V6SN!@_₹\ncue/~NSgVdG\ncuff/~NgSVdG\ncuisine/~NwSg\ncul-de-sac/NgS\nculinary/~J\ncull/VdGSNg\nculminate/VdSGJXn\nculmination/~Ng\nculotte/NSg\nculpability/Nmg\nculpable/Ji\nculpably/Ry\nculprit/~NSg\nculs-de-sac/9\ncult/~NgSJ\ncultish/J\ncultishness/Nmg\ncultism/Nmg\ncultist/NgS\ncultivable/J\ncultivar/~NSg\ncultivate/~VdSGBn\ncultivated/~VJU\ncultivation/~Nmg\ncultivator/NgS\ncultural/~JY\nculture/~NwgSVGd\ncultured/~JVU\nculty/J\nculvert/~NgSV\ncum/~PNwSgVJ\ncumber/VdGSN\ncumbersome/~Jp\ncumbersomeness/Nmg\ncumbrous/J\ncumin/Nmg\ncummerbund/NgS\ncumming/~V6\ncumulate/VSdG\ncumulative/~JY\ncumuli/N\ncumulonimbi/N\ncumulonimbus/Ng\ncumulus/~Ng\ncuneiform/~JNg\ncunnilingus/Nmg\ncunning/~J>Y^Ng\ncunt/NgSVJx\ncup/~NSgV\ncupboard/~NSgV\ncupcake/NwgSV\ncupful/NSg\ncupid/~NSg\ncupidity/Nmg\ncupola/~NSgd\ncuppa/~NS\ncupped/JVtT\ncupping/NV6\ncupric/J\ncur/~NSgY\ncurability/Ng\ncuracao/N\ncuracy/NSg\ncurare/Ng\ncurate/~NSgVdGv\ncuration/NgS\ncurative/~JNgS\ncurator/~NgSK\ncuratorial/J\ncurb/~NgSVdG\ncurbing/VNg\ncurbside/~JN\ncurbstone/NSg\ncurd/~NgSV\ncurdle/VdSG\ncure/~NSVGd>KZB\ncure's\ncured/~VtTU\ncurer/NgK\ncurettage/Ng\ncurfew/~NSg\ncuria/~Ng\ncuriae/~N\ncurie/~NSg\ncurio/NSg\ncuriosity/~NSg\ncurious/~JYp\ncuriousness/Ng\ncurium/Nmg\ncurl/~NSVdGU\ncurl's\ncurler/~NSg\ncurlew/~NSg\ncurlicue/NSgVdG\ncurliness/Ng\ncurling/~NgV\ncurly/~J>^pN\ncurmudgeon/NgSY\ncurrant/NgS\ncurrency/~NSg\ncurrent/~NJYWr\ncurrent's\ncurrents/~N\ncurricula/~9\ncurricular/~J\ncurriculum/~NgS\ncurry/~NSgVdG\ncurrycomb/NSgVGd\ncurse/~NSgVdGv\ncursed/~JYV\ncursive/~JYNEr\ncursive's\ncursor/~NSgV\ncursorily/Ry\ncursoriness/Ng\ncursory/Jp\ncurt/~JY^>pV\ncurtail/~VGdSNL\ncurtailment/NSg\ncurtain/~NgSVGd\ncurtness/Ng\ncurtsy/NSgVGd\ncurvaceous/Jp\ncurvaceousness/Ng\ncurvature/~NSg\ncurve/~JNSgVdG\ncurveball/NSg\ncurvy/J>^\ncushion/~NgSVdG\ncushy/J>^\ncusp/~NgSV\ncuspid/NSg\ncuspidor/NSg\ncuss/VGdSNWE\ncuss's\ncussed/VtTJYp\ncustard/~NwgS\ncustodial/~J\ncustodian/~NgS\ncustodianship/Nmg\ncustody/~Nmg\ncustom/~NSgJVZ\ncustom-built/J\ncustom-made/J\ncustomarily/~R8\ncustomary/~JNU\ncustomer/~NgS\ncustomhouse/NSg\ncustomisation/NwgS!_₹\ncustomise/VdSG!_₹\ncustomizability/Nmg\ncustomizable/J\ncustomization/~NwgS\ncustomize/VdSG\ncut/~VbtT>SJ^Ng\ncut back/V/\ncut off/V/\ncut over/V/\ncut scene/NgS\ncutaneous/~J\ncutaway/JNgS\ncutback/NgS\ncute/~JYp\ncuteness/~Nmg\ncutesy/J^>\ncutey/NS\ncuticle/NgS\ncutie/NSg\ncutlass/NgSV\ncutler/~NSg\ncutlery/~Nmg\ncutlet/NSg\ncutoff/~NSgJ\ncutout/NSg\ncutter/~NSg\ncutthroat/~NSgJ\ncutting/~NgSJYV6\ncutting edge/Ng\ncutting-edge/J\ncuttlefish/N09gS    # singular and plural, also has a plural in -s\ncutup/NSg\ncutworm/NgS\ncw/~\ncwt/N\ncyan/~NmgJ\ncyanide/~NmgV\ncyanobacteria/~N\ncyanosis/Nmg\ncyber/~J\ncyberattack/NSgVdG\ncyberbully/NSgVG\ncybercafe/NS\ncybernetic/JS\ncybernetics/Nmg\ncyberphysical/JY\ncyberpunk/NSg\ncybersecurity/g\ncybersex/NmgV\ncyberspace/~NgS\ncyberstalk/VSdG\ncyborg/~NSgV\ncyclamen/NgS\ncycle/~NSgVdGr\ncyclic/~JN\ncyclical/~JYN\ncyclist/~NgS\ncyclometer/NgS\ncyclone/~NgSV\ncyclonic/J\ncyclopedia/NgS\ncyclopes/N9\ncyclops/~N0g\ncyclotron/~NgS\ncygnet/NgS\ncylinder/~NgSV\ncylindrical/~J\ncymbal/NgS\ncymbalist/NgS\ncynic/NSgJ\ncynical/~JY\ncynicism/~Ng\ncynosure/NgS\ncypress/~NgS\ncyst/~NgS\ncystic/~J\ncystitis/N\ncytokines/~N\ncytologist/NSg\ncytology/Ng\ncytoplasm/~Nmg\ncytoplasmic/~J\ncytosine/Nmg\nczar/~NgS\nczarina/NSg\nczarism/N\nczarist/NSg\nd/JGnXz\nd'Arezzo/g\nd'Estaing/g\ndB/\ndab/~VSNgJ\ndabbed/VtT\ndabber/NgS\ndabbing/V6N\ndabble/VGd>SNZ\ndabbler/Ng\ndace/NSg\ndacha/NgS\ndachshund/NgS\ndactyl/NgS\ndactylic/JNgS\ndad/~NSgV\ndadaism/Ng\ndadaist/NgSJ\ndaddy/~NSgVJ\ndado/~N0gV\ndadoes/N9V\ndaemon/~NgS\ndaemonic/J\ndaffiness/Ng\ndaffodil/~NSgJ\ndaffy/~J^>pN\ndaft/~J^>Yp\ndaftness/Ng\ndag/~NSV\ndagger/~NgSV\ndago/N0S\ndagoes/N9\ndaguerreotype/NSgVdG\ndahlia/NgS\ndailiness/Ng\ndaily/~JpNSgVR8\ndaintily/Ry\ndaintiness/Nmg\ndainty/J>^pNSg\ndaiquiri/NwgS\ndairy/~NSgJG\ndairying/Ng\ndairymaid/NgS\ndairyman/Ng\ndairymen/9\ndairywoman/Ng\ndairywomen/9\ndais/~NgS\ndaisy/~NSg\ndale/~NSg\ndalliance/NgS\ndallier/Ng\ndally/~VGd>SNZ\ndalmatian/~NgS\ndam/~NSgVJ\ndamage/~NwgSVGd\ndamageable/J\ndamaged/~VtTJU\ndamages/~VN9g\ndamask/NgSJVdG\ndame/~NSgV\ndammed/~VtT\ndamming/~V6N\ndammit/N\ndamn/~VGdSJNgB\ndamnably/Ry\ndamnation/~Nmg\ndamned/~J^VtT\ndamp/~J^Y>pNmSgVGdXZn\ndampen/VGd>Z\ndampener/NgS\ndamper/NgSJc\ndampness/Nmg\ndamsel/NgS\ndamselfly/NSg\ndamson/NgSJ\ndance/~NwgSVGd>ZB\ndancer/~Ng\ndancing/~NgV\ndandelion/NSgJ\ndander/NgV\ndandify/VGdS\ndandle/VGdSN\ndandruff/NmgV\ndandy/~NSgJ^>\ndang/~VGd>SJNZ\ndanger/~NwgSV\ndangerous/~JYp\ndangle/VGd>SNZ\ndangler/NgS\ndanish/~NgS\ndank/J^Y>pNV\ndankness/Nmg\ndanseuse/NgS\ndapper/J^>\ndapple/NgSJVGd\ndare/~NSgAd>GZ\ndaredevil/~NgSJV\ndaredevilry/Nmg\ndarer/Ng\ndaresay/V\ndaring/~VJYNg\ndark/~J^Y>pNgVXn\ndarken/~VGd>Z\ndarkener/Ng\ndarkie/NS\ndarkness/~Nmg\ndarkroom/NgS\ndarling/~NgSJ\ndarn/~J>VGdSNgZ\ndarned/VtT>J^\ndarner/Ng\ndart/~NSgVGd>Z\n# deca              # prefixes that are not also words in their own right don't belong in the dictionary\ndartboard/NgS\ndarter/Ng\ndash/~NgSVGd>Z\ndashboard/~NSgV\ndasher/Ng\ndashiki/NgS\ndashing/~JYVN\ndastard/NgSJYV\ndastardliness/Ng\ndata/~Nw9g\ndata center/NgS!@_₹\ndata centre/NgS<\ndata point/NgS\ndatabase/~NSgV\ndataset/~NgS\ndatasheet/NgS\ndatasource/NgS\ndatatype/N\ndate/~NwSgVd>GZv\ndatebook/NS\ndated/~JVU\ndateless/J\ndateline/NgSVGd\ndater/Ng\ndateset\ndative/JNgS\ndatum/~N0gV\ndaub/NSgVGd>Z\ndauber/NgS\ndaughter/~NSg\ndaughterboard/NgS\ndaughterly/J\ndaunt/VGdS\ndaunting/~JYNV\ndauntless/~JYp\ndauntlessness/Nmg\ndauphin/~NgS\ndavenport/~NgS\ndavit/NgS\ndawdle/VGd>SNZ\ndawdler/NgS\ndawn/~VGdSNwg\nday/~NwSg\nday-to-day/JR\ndaybed/NgS\ndaybreak/~Nwg\ndaycare/Nmg\ndaydream/NgSVd>GZ\ndaydreamer/NgS\ndaylight/~NwgSV\ndaylights/N9g\ndaylong/J\ndaytime/~NmgJ\ndaze/~NSgVdG\ndazed/JYV\ndazzle/VGd>SNgZ\ndazzler/NgS\ndazzling/~V6JYN\ndb/~\ndbl/N\ndc/~N\ndd/~NSdG\ndded/K\ndding/K\n# de                # prefixes that are not also words in their own right don't belong in the dictionary\nde\nde-extinct/VGd\nde-extinction/NwgS\nde facto/JNg\nde jure/RJ\nde minimis/J\ndeacon/~NgSV\ndeaconess/NgS\ndead/~J^Y>NgVXn\ndeadbeat/NgSJ\ndeadbolt/NSgV\ndeaden/VGd>\ndeadhead/NSVdG\ndeadline/~NSgV\ndeadliness/Ng\ndeadlock/~NSgVGd\ndeadly/~J^>p\ndeadpan/JNgSV\ndeadpanned/VtT\ndeadpanning/V6\ndeadwood/Ng\ndeaf/~J^>pNVXn\ndeafen/VbGd\ndeafening/JYV6N\ndeafness/~Ng\ndeal/~NSgVG>JzZ\ndealbreaker/NgS     // Cambridge, Collins, Longman (MW also)\ndeal-breaker/NgS    // Merriam-Webster, Oxford Learners\ndeal breaker/NgS    // OED (MW, Longman also)\ndealer/~Ng\ndealership/~NSg\ndealing/~NgV\ndealmaker/NgS\ndealt/~V\ndean/~NgV\ndeanery/~NSg\ndeanship/Ng\ndear/~J^Y>pNSgVH\ndearest/~JuNS\ndearness/Ng\ndearth/N0gV\ndearths/N9\ndeary/NSg\ndeath/~Nw☁gS\ndeath knell/NgS\ndeathbed/~NSg\ndeathblow/NgS\ndeathless/JY\ndeathlike/J\ndeathly/JRy\ndeaths/~N9\ndeathtrap/NgS\ndeathwatch/NgS\ndeaves\ndeb/~NSg\ndebacle/~NgS\ndebank/VdGS\ndebarkation/Ng\ndebarment/Ng\ndebate/~NwgV>BZ\ndebater/Ng\ndebating/~V6Ng\ndebauch/NgSVdG\ndebauchee/NgS\ndebauchery/NSg\ndebenture/NgS\ndebilitate/VdSGn\ndebilitation/Nmg\ndebility/NSg\ndebit/NVdJ\ndebonair/JYpN\ndebonairness/Ng\ndebouch/NSVGd\ndebounce/VdSG\ndebridement/N\ndebris/~Nmg\ndebt/~NwSg\ndebtor/~NgS\ndebugger/NSg\ndebut/~NgVGd\ndebutante/NSg\ndecade/~NgS\ndecadence/~Nmg\ndecadency/Nmg\ndecadent/~JYNgS\ndecaf/JNwgS\ndecaffeinate/VdSG\ndecagon/NgS\ndecal/NgSV\ndecampment/Ng\ndecap/VS\ndecapitate/VGdSXn\ndecapitator/NgS\ndecapped/VtTJ\ndecapping/V6N\ndecarbonize/VdSG\ndecathlete/NS\ndecathlon/NSg\ndecay/~NVGd\ndeceased/~JNg\ndecedent/NgSJ\ndeceit/~NgS\ndeceitful/JYp\ndeceitfulness/Ng\ndeceive/~VGdSU\ndeceiver/NgS\ndeceiving/~V6NY\ndecelerate/VGdSn\ndeceleration/Ng\ndecelerator/NSg\ndecency/~NSgi\ndecennial/NSgJ\ndecent/~JYi\ndeception/~NwgS\ndeceptive/~JYp\ndeceptiveness/Ng\ndecibel/NgS\ndecidable/JU\ndecide/~VGd>SBZ\ndecided/~VtTJYN\ndeciduous/~J\ndeciliter/NgS<\ndecilitre/NgS!@_₹\ndecimal/~NwSgJV\ndecimalisation/N!_₹\ndecimalization/N\ndecimate/VdGSNn\ndecimation/Ng\ndecimeter/NgS<\ndecimetre/NgS!@_₹\ndecipherable/JUi\ndecision/~N0gVi\ndecisions/~N9V\ndecisive/~JYpi\ndecisiveness/Ngi\ndeck/~NSgVGd\ndeckchair/NgS\ndeckhand/NSgV\ndeckle/NSV\ndeclamation/NgS\ndeclamatory/J\ndeclaration/~NgS\ndeclarative/~JYN\ndeclarator/NgS\ndeclaratory/J\ndeclare/~Vd>SGZB\ndeclared/~VJU\ndeclarer/Ng\ndeclension/~NwSg\ndeclination/Ng\ndecline/~NSgVd>GZ\ndecliner/Ng\ndeclivity/NSg\ndeclutter/VGdS\ndecoherence/Nmg\ndecolletage/NSg\ndecollete/J\ndecompilation/NwgS\ndecompile/VSdG\ndecompiler/NgS\ndecongestant/NwgS\ndeconstructionism/Nmg\ndecor/NgS\ndecorate/~VGdSrnv\ndecorating/~V6Ng\ndecoration/~Nwgr\ndecorations/~N\ndecorative/~JYN\ndecorator/~NgS\ndecorous/JYi\ndecorousness/Ng\ndecorum/~Nmg\ndecoupage/NSgVdG\ndecoy/~NgSVGd\ndecreasing/~VNY\ndecree/~NgSVd\ndecreeing/V6N\ndecrement/NSVGd\ndecrepit/J\ndecrepitude/Ng\ndecriminalisation/Nmg!_₹\ndecriminalization/Nmg\ndecry/VGdS\ndecrypt/VGdS\ndecryption/Nmg\ndedicate/~VbGdSJNr\ndedication/~NwSg\ndedicator/NSg\ndedicatory/JN\ndedollarization/Nmg\ndedollarize/VSdG\ndeduce/~VGdS\ndeducible/J\ndeduct/VGdv\ndeductible/JNSg\ndeduction/~NwSg\ndeductive/JY\ndeduplicate/VdSG\ndeduplication/Nmg\ndeed/~NVGd\ndeejay/NgSV\ndeem/VGdSNr\ndeep/~J^>YpNSgXn\ndeepen/~VGd\ndeepfake/NSgV\ndeepness/Ng\ndeer/~Ng09          # singular and plural\ndeerskin/Ng\ndeerstalker/NS\ndef/~NJZ\ndefacement/Ng\ndefacer/NSg\ndefalcate/VdSGXn\ndefalcation/Ng\ndefamation/~Ng\ndefamatory/~J\ndefame/VGd>SJZ      # removed `N`, noun senses now rare\ndefamer/Ng\ndefang/VdGS\ndefaulter/NSg\ndefeat/~Vd>GSNwgZ\ndefeated/~JVU\ndefeater/NgS\ndefeatism/Nmg\ndefeatist/JNgS\ndefecate/VGdSJn\ndefecation/Nmg\ndefect/~NgSVdGv\ndefection/~NwgS\ndefective/~JYpNgS\ndefectiveness/Nmg\ndefector/NgS\ndefence/NwSg!@_₹\ndefenceless/JYp!@_₹\ndefencelessness/Nmg!@_₹\ndefendant/~JNSg\ndefended/~JVU\ndefenestrate/VdGS\ndefenestration/NS\ndefense/~NwSgVdGv<\ndefenseless/JYp<\ndefenselessness/Nmg<\ndefensible/Ji\ndefensibly/Ryi\ndefensive/~JYpNg\ndefensiveness/Nmg\ndefer/VS\ndeference/~Nmg\ndeferential/JY\ndeferral/NgS\ndeferred/~VtTJN\ndeferring/V6N\ndeffer/Jc\ndeffest/Ju\ndefiant/~JYN\ndefibrillation/N\ndefibrillator/NS\ndeficiency/~NSg\ndeficient/~JN\ndeficit/~NSg\ndefilement/Ng\ndefinable/JiU\ndefine/~VGdSNr\ndefined/~JVU\ndefiner/NgS\ndefinite/~JpNiv\ndefinitely/R        # adverb of probability/certainty/affirmation; modal adverb\ndefiniteness/Ngi\ndefinition/~NgrQ\ndefinitions/~N\ndefinitive/~JYN\ndeflate/VGdSn\ndeflation/Ng\ndeflationary/J\ndeflect/~VdGSv\ndeflection/~NwgS\ndeflector/NSg\ndefogger/NSg\ndefoliant/NSg\ndefoliate/VdSGJn\ndefoliation/Ng\ndefoliator/NgS\ndeformable/J\ndeformity/~NSg\ndefraud/~Vd>GSZ\ndefrauder/Ng\ndefrayal/Ng\ndefrock/VdG\ndefroster/NgS\ndeft/J^>Yp\ndeftness/Ng\ndefunct/~JVN\ndefund/VdGS\ndefy/~VGdSN\ndeg/NV\ndegeneracy/Ng\ndegenerate/~JNgVv\ndegrade/~VB\ndegrease/VGdS>\ndegree/~NgS\ndehydrator/NSg\ndehydrogenase/~N\ndeicer/NgS\ndeification/Ng\ndeify/VGdSn\ndeign/VGdS\ndeist/JNgS\ndeistic/J\ndeity/~NSg\ndéjà vu/Nmg\ndeja vu/Nmg\ndeject/VGdSN\ndejected/JYV\ndejection/Nmg\ndelay/~NVd>Z\ndelectable/JN\ndelectably/Ry\ndelectation/Ng\ndelegate/~NVbGd\ndelete/~VGdSNXn\ndeleterious/~J\ndeletion/~Ng\ndelft/~Ng\ndelftware/Nmg\ndeli/~NSg\ndeliberate/~JYpVXv\ndeliberateness/Ng\ndelicacy/~NSgi\ndelicate/~JYNi\ndelicateness/Ng\ndelicatessen/NSg\ndelicious/~JYp\ndeliciousness/Ng\ndelighted/~JYV\ndelightful/~JY\ndeliminator\ndelineate/VGdSnX\ndelineation/Ng\ndelinquency/~NSg\ndelinquent/~JYNSg\ndeliquesce/VdSG\ndeliquescent/J\ndelirious/~JYp\ndeliriousness/Ng\ndelirium/~NSg\ndeliver/~VdGSJr\ndeliverable/JNS\ndeliverance/~Ng\ndelivered/~VJU\ndeliverer/NSg\ndell/~NSg\ndelphinium/NwgS\ndelta/~NgSV\ndelude/VGdS\ndeluge/~NgSVGd\ndelusion/~NgS\ndelusional/JYN\ndelusive/JY\ndeluxe/~JN\ndelve/VGd>SNZ\ndelver/NgS\ndemagogic/JQ\ndemagogue/NSgV\ndemagoguery/Nmg\ndemagogy/Nmg\ndemand/~NwgSVGd\ndemanding/~JVU\ndemarcate/VdSGnX\ndemarcation/~Ng\ndemean/VGdSN\ndemeanor/~Ng\ndemeanour/Ng!@_₹\ndemented/JYV\ndementia/~Ng\ndemesne/NgS\ndemigod/NgS\ndemigoddess/NgS\ndemijohn/NSg\ndemimondaine/NSg\ndemimonde/Ng\ndemise/~NgSVGd\ndemitasse/NgS\ndemo/~NgSVGd        # only wiktionary calls this an adjective. doing so messes with 'adj of a' lint\ndemocracy/~NSg\ndemocrat/~NgS\ndemocratic/~JNUQ\ndemocratisation/Ng!_₹\ndemocratise/VGdS!_₹\ndemocratization/~Ng\ndemocratize/VGdS\ndemode\ndemographer/NSg\ndemographic/~JNSgQ\ndemographics/~Nmg\ndemography/~Nmg\ndemolish/~VdSG\ndemolition/~NgS\ndemon/~NgS\ndemonetisation/Ng!_₹\ndemonetization/Ng\ndemoniac/JN\ndemoniacal/JY\ndemonic/~JQ\ndemonise/VGdS!_₹\ndemonize/VGdS\ndemonology/NmSg\ndemonstrability/Nmg\ndemonstrable/JNi\ndemonstrably/Ry\ndemonstrate/~VGdSXnv\ndemonstration/~NwgS\ndemonstrative/~JYpNgS\ndemonstrativeness/Ng\ndemonstrator/~NgS\ndemote/VGd\ndemotic/JN\ndemount/V\ndemulcent/JNSg\ndemur/V>SNg^\ndemure/JYpV\ndemureness/Ng\ndemurral/NSg\ndemurred/VtT\ndemurrer/NSg\ndemurring/V6JN\nden/~NgV\ndenationalisation/N!_₹\ndenationalization/N\ndenaturation/N\ndenature/VdG\ndendrite/NSg\ndengue/Nmg\ndeniability/Nm\ndeniable/~JU\ndenial/~NwgS\ndenier/~Ng\ndenigrate/VbdSGn\ndenigration/Nmg\ndenim/~NwgS\ndenitrification/N\ndenizen/NgSV\ndenominational/~J\ndenormalization/Nmg\ndenormalize/VGdS\ndenotation/NSgQ\ndenotative/J\ndenouement/NgS\ndenounce/~VdSGL\ndenouncement/NSg\ndense/~JY^>pN\ndenseness/Nmg\ndensification/Nmg\ndensity/~NwSg\ndent/~NSgVGdi\ndental/~JYN\ndentifrice/NSg\ndentin/Nmg<@\ndentine/Nmg!@_₹\ndentist/~NgS\ndentistry/~Nmg\ndentition/~Nmg\ndenture/NgSi\ndenuclearise/VGdS!_₹\ndenuclearize/VGdS\ndenudation/Ng\ndenude/VGdS\ndenunciation/NSg\ndeny/~VGd>SZ\ndeodorant/NSgJ\ndeodorisation/Ng!_₹\ndeodorise/Vd>SGZ!_₹\ndeodoriser/Ng!_₹\ndeodorization/Ng\ndeodorize/Vd>SGZ\ndeodorizer/Ng\ndeorbit/VGdS\ndeparted/~VtTJNg\ndepartment/~NgS\ndepartmental/~JY\ndepartmentalisation/Ng!_₹\ndepartmentalise/VGdS!_₹\ndepartmentalization/Ng\ndepartmentalize/VGdS\ndeparture/~NSg\ndependability/Ng\ndependable/~JNU\ndependably/Ry\ndependence/~Nmgi\ndependency/~NSg\ndependent/~JYNgSi\ndepict/~VGdSJ\ndepiction/~NwgS\ndepilatory/JNSg\ndeplete/VGdSn\ndepletion/~Ng\ndeplorably/Ry\ndeplore/VGdSB\ndeploy/~VGdSNrL\ndeployable/J\ndeployment/~N0gr\ndeployments/~N9\ndeponent/JNgS\ndeportable/J\ndeportation/~NgS\ndeportee/NgS\ndeporter/NgS\ndeportment/Ng\ndeposit/~NgSVGdr\ndepositor/NgS\ndepository/~NSg\ndeprave/VGdS\ndepravity/NSg\ndeprecate/VGdSn\ndeprecating/VJY\ndeprecation/Ng\ndeprecatory/J\ndepreciate/VdSGn\ndepreciation/~Ng\ndepredation/NSg\ndepressant/NSgJ\ndepressing/JYV6\ndepression/~NSg\ndepressive/~JNSg\ndepressor/NgS\ndepressurisation/N!_₹\ndepressurization/N\ndeprive/~VGdS\ndeprogramming/V6Nm\ndepth/~N0wg\ndepths/~N9\ndeputation/NgS\ndepute/VdGSN\ndeputise/VdSG!_₹\ndeputize/VdSG\ndeputy/~NSgV\nderailleur/NSg\nderailment/~NSg\nderangement/Ng\nderby/~NSg\ndereference/~NgSVGd\nderelict/~JNgSV\ndereliction/NwSg\nderide/VGdS\nderision/Nwg\nderisive/JYpN\nderisiveness/Nmg\nderisory/J\nderivation/~NgSQ\nderivative/~JNgS\nderive/~VB\ndermal/~JN\ndermatitis/~Nmg\ndermatological/JN\ndermatologist/NSg\ndermatology/~Ng\ndermis/~Ng\nderogate/VdSGJn\nderogation/NgS\nderogatorily/Ry\nderogatory/~JN\nderrick/~NSgV\nderriere/NSg\nderringer/NSg\nderv/N\ndervish/NgS\ndesalinate/VGdSn\ndesalination/Ng\ndesalinisation/Ng!_₹\ndesalinise/VGdS!_₹\ndesalinization/Ng\ndesalinize/VGdS\ndescant/NgV\ndescend/~VGdSNW\ndescendant/~JNgS\ndescendent/JN!@_₹\ndescender/NgS\ndescribable/Ji\ndescribe/~VGdS>BZ\ndescriber/NgS\ndescription/~NwSg\ndescriptive/~JYpN\ndescriptiveness/Ng\ndescriptor/~NgS\ndescry/VGdS\ndesecrate/VdSGJn\ndesecration/Nmg\ndeselection/Ng\ndeserialization/NgS\ndeserialize/VSGd\ndesert/~NwSgJ>VdGZ\ndeserter/NgS\ndesertification/Nmg\ndesertion/~NwSg\ndeserved/~JYVU\ndeserving/~JNVU\ndesi/NgS₹\ndesiccant/NSgJ\ndesiccate/VdGSJNn\ndesiccation/Ng\ndesiccator/NSg\ndesiderata/N\ndesideratum/Ng\ndesign/~NwSVdGr\ndesignate/~JVdSGnX\ndesignation/~Ng\ndesignator/NSg\ndesirability/~NgU\ndesirableness/Ng\ndesirably/RyU\ndesire/~VNwB\ndesired/~VJU\ndesirous/J\ndesist/~VSdG\ndesk/~NSgV\ndeskill/VG\ndesktop/~NSgJ\ndesolate/~JYpVdSGn\ndesolateness/Ng\ndesolation/Ng\ndesolder/VSGd\ndespair/~VdGSNg\ndespairing/JYVN\ndesperado/~N0g\ndesperadoes/N9\ndesperate/~JYpNn\ndesperateness/Nmg\ndesperation/~Nmg\ndespicable/JN\ndespicably/Ry\ndespise/~VdSG\ndespite/~PNV\ndespoilment/Nmg\ndespondence/Nmg\ndespondency/Nmg\ndespondent/JY\ndespotic/JQ\ndespotism/Ng\ndessert/~NwSg\ndessertspoon/NgS\ndessertspoonful/NgS\ndestabilisation/Nm!_₹\ndestination/~NSg\ndestine/VdSG\ndestiny/~NwSg\ndestitute/~JVn\ndestitution/Nmg\ndestroy/~VSGd>Z\ndestroyer/~NgS\ndestruct/~VGdSvg\ndestructibility/Nmgi\ndestructible/Ji\ndestruction/~Nmg\ndestructive/~JYp\ndestructiveness/Nmg\ndestructor/NgS\ndestructure/VSdG\ndesuetude/Ng\ndesultorily/Ry\ndesultory/J\ndetach/~VGdSBL\ndetachment/~NwgS\ndetail/NwgS\ndetailer/NgS\ndetain/VGdSL\ndetainee/~NgS\ndetainment/Nmg\ndetect/~VSdGvB\ndetectable/~JU\ndetected/~JVU\ndetection/~NwgS\ndetective/~NSgJ\ndetector/~NSg\ndetente/NSgnX\ndetention/~Nmg\ndeter/~VSL\ndetergent/~NwSgJ\ndeteriorate/~VdSGn\ndeterioration/~Nmg\ndeterment/Ng\ndeterminable/JNi\ndeterminant/~NSgJ\ndeterminate/JNV\ndetermine/~VGdSr\ndetermined/~JVU\ndeterminedly/Ry\ndeterminer/NSg\ndeterminism/~Nmg\ndeterministic/~JQ\ndeterred/VtTU\ndeterrence/~Nwg\ndeterrent/~JNgS\ndeterrer/NgS\ndeterring/V6\ndetestably/Ry\ndetestation/Nmg\ndethrone/VdSGL\ndethronement/Nmg\ndetonate/~VGdSnX\ndetonation/~NwgS\ndetonator/NSg\ndetox/NgSVdG\ndetoxification/Ng\ndetoxify/VdSGn\ndetract/~VGd\ndetriment/~NSgV\ndetrimental/~JYN\ndetritus/~Nmg\ndeuce/~NSg\ndeuterium/~Ng\ndev/~NgS\ndevaluate/VdSGn\ndevastate/VGdSn\ndevastating/~JYV\ndevastation/~Ng\ndevastator/NgS\ndevelop/~VSGdrL\ndeveloped/~JVU\ndeveloper/~NSg\ndevelopment/~NwSgr\ndevelopmental/~JYN\ndevelopmentalism/Nmg\ndevelopmentalist/NgS\ndeviance/Ng\ndeviancy/Ng\ndeviant/~JNSg\ndeviate/~VdGSNgJnX\ndeviating/V6U\ndeviation/~Ng\ndevil/~ONSgVdGL\ndevilish/JYp\ndevilishness/Ng\ndevilled/VtTJ!@_₹\ndevilling/V6N!@_₹\ndevilment/Ng\ndevilry/NSg\ndeviltry/NSg\ndevious/JYp\ndeviousness/Ng\ndevoid/~JV\ndevolution/~Ng\ndevolve/VdSG\ndevote/VbdSG\ndevoted/~VtTJY\ndevotee/~NSg\ndevotion/~NgS\ndevotional/~NSgJ\ndevour/VSdG\ndevout/~J>Y^pN\ndevoutness/Ng\ndew/~NwgV\ndewberry/NSg\ndewclaw/NSg\ndewdrop/NSg\ndewiness/Ng\ndewlap/NSg\ndewy/J>^p\ndexterity/~Ng\ndexterous/JYp\ndexterousness/Ng\ndextrose/Nmg\ndharma/~NwgS\ndhoti/NSg\ndhow/NgS\n# di                # prefixes that are not also words in their own right don't belong in the dictionary\ndiabetes/~Nmg\ndiabetic/~JNSg\ndiabolic/J\ndiabolical/JY\ndiacritic/~JNgS\ndiacritical/JN\ndiadem/~NSgV\ndiaereses/N9\ndiaeresis/N0g\ndiagnose/~VdSG\ndiagnosis/~NgV\ndiagnostic/~JNgSQ\ndiagnostician/NSg\ndiagonal/~JYNSg\ndiagram/~NSgV\ndiagrammatic/JQ\ndiagrammed/VtT\ndiagramming/V6\ndial/~NgSVdGr\ndialect/~NSg\ndialectal/~J\ndialectic/~NSgJ\ndialectical/~J\ndialectics/Ng\ndialing/~VSN\ndialled/VtTr!_₹\ndialling/V6SN!_₹\ndialog/~NwSgV\ndialogic/J\ndialogue/~NwSgV\ndialyses/N\ndialysis/~Ng\ndialyzes/V\ndiam/N\ndiamagnetic/JN\ndiamagnetism/N\ndiamante/NJ\ndiameter/~NSg\ndiametric/J\ndiametrical/JY\ndiamond/~NwSgJV\ndiamondback/NgS\ndiapason/NSg\ndiaper/NSgVdG\ndiaphanous/J\ndiaphragm/~NSgV\ndiaphragmatic/J\ndiarist/~NSg\ndiarrhea/~Ng\ndiarrhoea/Ng!_₹\ndiary/~NSgVJ\ndiaspora/~NSg\ndiastase/Ng\ndiastole/Ng\ndiastolic/JN\ndiathermy/Ng\ndiatom/NSg\ndiatomic/JN\ndiatonic/~J\ndiatribe/NSg\ndiazepam/N\ndibble/~NSgVdG\ndibs/NgV\ndice/~N9SVGd\ndices/V9i\ndicey/J\ndichotomous/J\ndichotomy/~NSg\ndicier/Jc\ndiciest/Ju\ndick/~NgSV>XZx\ndicker/VdGN\ndickey/~NSgJ\ndickhead/NSx\ndickybird/S\ndicotyledon/NgS\ndicotyledonous/J\ndict/~N\ndicta/N\ndictate/~NSgVdGnX\ndictation/Ng\ndictator/~NSg\ndictatorial/~JY\ndictatorship/~NSg\ndiction/Nmg\ndictionary/~NSgV\ndictum/Ng\ndid/~VAtrU\ndidactic/~JNQ\ndiddle/NSVd>GZ\ndiddler/Ng\ndiddly/N\ndiddlysquat/N\ndiddums/\ndidgeridoo/NSV\ndidn't/~VAt\ndido/~N0g\ndidoes/N9\ndidst/V\ndie/~VdSN0g\ndie hard/V\ndiehard/NgSJ\ndielectric/~NgSJ\ndiereses/N9\ndieresis/N0g\ndiesel/~NwSgVdG\ndiet/~NwgSJ>VdGZ\ndietary/~JNSg\ndieter/~NgS\ndietetic/JS\ndietetics/Ng\ndietitian/NgS\ndiff/~NOSVd>GJZ\ndiffer/~VdGN\ndifference/~N0wgVi\ndifferences/~N9V\ndifferent/~JYNi\ndifferentiability/Ng\ndifferentiable/~J\ndifferential/~JNSg\ndifferentiate/~VdGSNn\ndifferentiated/~VJU\ndifferentiation/~Nmg\ndifferentiator/NgS\ndifficult/~JYV\ndifficulty/~NwSg\ndiffidence/Nmg\ndiffident/JY\ndiffract/VGSd\ndiffraction/~Nmg\ndiffuse/~VdSGJYpnv\ndiffuseness/Nmg\ndiffuser/NgS\ndiffusion/~Ng\ndiffusivity/N\ndig/~VSNg\ndigerati/Ng\ndigest/~VdGSNgv\ndigested/VU\ndigestibility/Ng\ndigestible/Ji\ndigestion/~Nw0gi\ndigestions/N9\ndigestive/~JNS\ndigger/NSg\ndigging/~NSV6\ndiggings/Ng\ndigicam/NSg\ndigit/~NSgV\ndigital/~JYN\ndigitalis/Ng\ndigitisation/N!_₹\ndigitise/VGdS!_₹\ndigitization/N\ndigitize/VGdS\ndigitizer/NgS\ndignified/~JVU\ndignify/VdSG\ndignitary/NSgJ\ndignity/~NSgi\ndigraph/~N0g\ndigraphs/N9\ndigress/VGdSv\ndigression/NgS\ndike/~NgSVGd\ndiktat/NS\ndilapidated/~VJ\ndilapidation/Nmg\ndilatation/Ng\ndilate/VdSGn\ndilation/Nmg\ndilator/NSg\ndilatory/J\ndildo/NSV\ndilemma/~NgS\ndilettante/NSgJ\ndilettantish/J\ndilettantism/Nmg\ndiligence/~Nmg\ndiligent/~JY\ndill/~NgSV\ndilly/JNSg\ndillydally/VdSG\ndiluent/NJ\ndilute/~VdGSJNnX\ndiluted/~VtTJU\ndilution/Nmg\ndim/~JY>pNSV\ndime/~NgSV\ndimension/~NSgVdG\ndimensional/~J\ndimensionality/Nmg\ndimensionless/~J\ndiminish/~VGdS\ndiminished/~VtTJU\ndiminuendo/NSgJ\ndiminution/NSg\ndiminutive/~JNSg\ndimity/Ng\ndimmed/VtTU\ndimmer/NSgJc\ndimmest/Ju\ndimming/~V6N\ndimness/Nmg\ndimple/NSgVdG\ndimply/J\ndimwit/NSg\ndimwitted/J\ndin/~NSgVGd>Z\ndinar/~NSg\ndine/~VSN\ndiner/~NgS\ndinette/NgS\nding/~NgVdG\ndingbat/NgS\ndinghy/NSgV\ndingily/Ry\ndinginess/Nmg\ndingle/~NSgJ\ndingleberry/NgS\ndingo/N0gV\ndingoes/N9V\ndingus/NgS\ndingy/J^>pNV\ndink/NV>J\ndinky/J>^NSg\ndinned/VtT\ndinner/~NwSgVdG\ndinnertime/Ng\ndinnerware/Nmg\ndinning/V6N\ndinosaur/~NSg\ndint/NgV\ndiocesan/~JNgS\ndiocese/~NgS\ndiode/~NSg\ndiorama/NSg\ndioxide/~NwSg\ndioxin/NwSg\ndip/~NSgV\ndiphtheria/~Nmg\ndiphthong/NSg\ndiploid/JNSg\ndiploma/~NSg\ndiplomacy/~Nmg\ndiplomat/~NgS\ndiplomata/N\ndiplomatic/~JNUQ\ndiplomatist/NgS\ndiplopia/N\ndipole/~NSg\ndipped/~VtTJ\ndipper/NSg\ndipping/~V6N\ndippy/J>^\ndipshit/NSgx\ndipso/NS\ndipsomania/Nmg\ndipsomaniac/NgS\ndipstick/NSgV\ndipterous/J\ndiptych/N0g\ndiptychs/N9\ndire/~JY^>\ndire wolf/Ng\ndire wolves/9\ndirect/~J^VSdGrv\ndirection/~Nw0gi\ndirectional/~JYNgS\ndirectionality/Nmg\ndirectionless/J\ndirections/~N9\ndirective/~JNSg\ndirectly/~CRy\ndirectness/Ngi\ndirector/~NgS\ndirectorate/~NSg\ndirectorial/~J\ndirectorship/~NSg\ndirectory/~NSgJ\ndireful/J\ndirge/NSgV\ndirigible/NgSJ\ndirk/~NgSV\ndirndl/NSg\ndirt/~NmgV\ndirtbag/NgS\ndirtball/NS\ndirtily/Ry\ndirtiness/Nmg\ndirty/~J^>pVdSG\ndis/~VNgI(\ndisable/~VdSGJL\ndisablement/Ng\ndisambiguate/~VSdGn\ndisappointing/~JYV6\ndisarming/JYV\ndisassembler/NgS\ndisassembly/NwgS\ndisastrous/~JY\ndisbandment/~Ng\ndisbarment/Ng\ndisbelieving/VJY\ndisbursal/Nmg\ndisburse/VdSGL\ndisbursement/NwgS\ndisc/~NgV\ndiscern/~VSdGL\ndiscernible/~Ji\ndiscernibly/Ry\ndiscerning/V6JYN\ndiscernment/Nmg\ndischarged/~VtTU\ndisciple/~NSgV\ndiscipleship/~Ng\ndisciplinarian/NSgJ\ndisciplinary/~JN\ndiscipline/~NSgVdG\ndisciplined/~JVtTU\ndisclose/~VdGSN\ndisclosed/~VtTJU\ndisco/~NwgVG\ndiscography/~NSg\ndiscoloration/NwS\ndiscolouration/NwS!_₹\ndiscombobulate/VdSGn\ndiscombobulation/Nmg\ndiscomfit/VdGJ\ndiscomfiture/Ng\ndiscommode/VdG\ndisconcerting/JY\ndisconnected/~VJYp\ndisconnectedness/Nmg\ndisconsolate/JYN\ndiscord/Nmg\ndiscordance/Nmg\ndiscordant/JY\ndiscotheque/NSg\ndiscourage/~VGdSNL\ndiscouragement/NwSg\ndiscouraging/V6JYN\ndiscover/~VSdGr\ndiscoverability/Ng\ndiscoverable/J\ndiscovered/~VU\ndiscoverer/~NgS\ndiscovery/~NwSgr\ndiscreet/~J>Y^p\ndiscreetness/Nmg\ndiscrepancy/~NSg\ndiscrepant/JN\ndiscrete/~JYpn\ndiscreteness/Nmg\ndiscretion/~Ngi\ndiscretionarily/Ry\ndiscretionary/~J\ndiscretisation/Ng!_₹\ndiscretization/Ng\ndiscriminant/NJ\ndiscriminate/~VGdSJYn\ndiscriminating/~JVU\ndiscrimination/~Nmg\ndiscriminator/NgS\ndiscriminatory/~J\ndiscursiveness/Ng\ndiscus/~NgS\ndiscussant/NSg\ndiscussion/~NwSg\ndisdain/~NmSgVdG\ndisdainful/JY\ndisease/NwSg\ndisembowel/VSdGL\ndisembowelled/VtT!@_₹\ndisembowelling/V6N!@_₹\ndisembowelment/Ng\ndisequilibrate/VSdG\ndisfigurement/NwSg\ndisfranchisement/Nmg\ndisgorgement/Nmg\ndisgruntle/VGdSL\ndisgruntlement/Nmg\ndisguise/~NwSVGd\ndisguised/~VJU\ndisgust/NmgSVdG\ndisgustedly/Ry\ndisgustingly/Ry\ndish/~NgSVdG\ndishabille/Ng\ndisharmonious/J\ndishcloth/N0g\ndishcloths/N9\ndisheartening/JYV\ndishevel/VdGSL\ndishevelled/JVtT!@_₹\ndishevelling/V6!@_₹\ndishevelment/Ng\ndishpan/NSg\ndishrag/NSg\ndishtowel/NgS\ndishware/Nmg\ndishwasher/NgS\ndishwater/Ng\ndishy/JN\ndisillusion/VGdNL\ndisillusionment/~Nmg\ndisinfectant/JNgS\ndisinfection/Nmg\ndisinform/VSdG\ndisinhibit/VSdG\ndisinterested/~JYp\ndisinterestedness/Nmg\ndisjointed/~JYp\ndisjointedness/Nmg\ndisjunctive/JN\ndisjuncture/N\ndisk/~NgSV\ndiskette/NgS\ndislodge/~VGdS\ndismal/~JYN\ndismantlement/Nmg\ndismay/~VdGSNg\ndismayed/~VJU\ndismember/VGdL\ndismemberment/~Nmg\ndismissive/~JY\ndismissiveness/Nmg\ndisorder/~NmVY\ndisorganisation/Nmg!_₹\ndisorganization/Nmg\ndisparage/NSVdGL\ndisparagement/Nmg\ndisparaging/~JYV6N\ndisparate/~JYN\ndispatcher/~NgS\ndispel/VSN\ndispelled/VtT\ndispelling/V6\ndispensary/~NSg\ndispensation/~NwgS\ndispense/~VGd>SNBZ\ndispenser/NgS\ndispersal/~NwgS\ndisperse/~VGdSJn\ndispersion/~Nwg\ndispirit/VGdS\ndispleasure/~NgV\ndisposable/~NSgJ\ndisposal/~NwSg\ndisposed/~VJi\ndisposition/~NSgVi\ndispositionally/Ry\ndispossession/Ng\ndisproof/NSg\ndisproportional/J\ndisprove/~VB\ndisputable/Ji\ndisputably/Ryi\ndisputant/NgSJ\ndisputation/~NSg\ndisputatious/JY\ndispute/~NSgVd>GZB\ndisputed/~JVU\ndisputer/Ng\ndisquiet/NmSgJVGd\ndisquisition/NgS\ndisregardful/J\ndisrepair/~NmgV\ndisrepute/NmgVB\ndisrupt/~VGSdJv\ndisruption/~NwSg\ndisruptive/~JY\ndissect/VSdG\ndissed/VtT\ndissemblance/Ng\ndissemble/VGd>SZ\ndissembler/Ng\ndisseminate/~VGdSn\ndissemination/~Ng\ndissension/NSg\ndissent/~Vd>GSNgZ\ndissenter/Ng\ndissertation/~NSg\ndisses/NVh\ndissidence/Nmg\ndissident/~JNgS\ndissimilar/~JN\ndissimilitude/NS\ndissing/V6N\ndissipate/~VbGdSn\ndissipation/~Ng\ndissociate/~VbGdSnv\ndissociation/~Ng\ndissoluble/Ji\ndissolute/JYpNn\ndissoluteness/Ng\ndissolve/~VGdSNr\ndissolved/~JVtTU\ndissonance/NwSg\ndissonant/J\ndissuade/~VGdS\ndissuasive/JN\ndist/~N\ndistaff/NSgJ\ndistal/~JY\ndistance/~NwSgVdG\ndistant/~JY\ndistaste/~NSgV\ndistemper/NgV\ndistention/NSg\ndistil/VS!_₹\ndistill/VS<\ndistillate/NSgnX\ndistillation/~NwgS\ndistilled/VtTJ\ndistillery/~NSg\ndistilling/V6JNm\ndistinct/~JY^pViv\ndistincter/Jc\ndistinction/~NwSg\ndistinctive/~JYpN\ndistinctiveness/Ng\ndistinctness/Ngi\ndistinguish/~VGdSB\ndistinguishable/~Ji\ndistinguished/~JVtTU\ndistort/~VGd>J\ndistortion/~NgS\ndistract/~VdGJ\ndistracted/~JYVtT\ndistraction/~NwgS\ndistrait/J\ndistraught/~J\ndistress/~NmVdG\ndistressful/J\ndistressing/JYV6\ndistribute/~VGdSrnv\ndistributed/~VJU\ndistribution/~N0gr\ndistributional/J\ndistributions/~N9\ndistributive/~JYN\ndistributor/~NSr\ndistributor's\ndistributorship/NS\ndistrict/~NSVJr\ndistrict's\ndistro/NgS\ndisturb/~VGd>SNZ\ndisturbance/~NwSg\ndisturbed/~JVtTU\ndisturber/Ng\ndisturbing/~JYV6\ndisunion/Ng\ndisyllabic/JN\nditch/~NgSVdG\ndither/Vd>GSNgZ\nditherer/Ng\nditransitive/JN\nditsy/J\nditto/~NSgVdG\nditty/NSgV\nditz/NgS\ndiuretic/JNgS\ndiurnal/~JYN\ndiv/~NV\ndiva/~NgS\ndivalent/JN\ndivan/~NSg\ndive/~VGd>SNg^Z\ndiver/~NgS\ndiverge/~VdSG\ndivergence/~NwgS\ndivergent/~J\ndiverse/~JYpXn\ndiverseness/Nmg\ndiversification/~Nmg\ndiversify/~VGdSn\ndiversion/~NwgS\ndiversionary/J\ndiversity/~NmSg\ndivert/~VSdG\ndiverticulitis/Nmg\ndivest/~VSdGL\ndivestiture/NgS\ndivestment/Nmg\ndivide/~Vd>GSNgZB\ndivided/~VJU\ndividend/~NgSV\ndivider/NgS\ndivination/~Nmg\ndivine/~JY^>NSgVdGZ\ndiviner/NgJ\ndiving/~VNgJ\ndivinity/~NSg\ndivisibility/Ngi\ndivisible/~JNi\ndivision/~NgS\ndivisional/~JN\ndivisive/~JYp\ndivisiveness/Ng\ndivisor/~NSg\ndivorce/~NSgVdGL\ndivorcee/NgS\ndivorcement/NgS\ndivot/NSgV\ndivulge/VGdS\ndivvy/NSgVdGJ\ndixieland/~g\ndizzily/Ry\ndizziness/~Nmg\ndizzy/~J^>pVdGSN\ndjellaba/NgS\ndo/~VA>GzHZ\ndo-gooder/NgS\ndoability/Nmg\ndoable/JNU\ndob/VSN\ndobbed/VtT\ndobbin/NSg\ndobbing/V6\ndoberman/Sg\ndobro/~N\ndoc/~NSg\ndocent/JNSg\ndocile/JY\ndocility/Nmg\ndock/~NgSVd>GZ\ndocket/NSgVdG\ndockland/NS\ndockside/N\ndockworker/NgS\ndockyard/~NgS\ndoctor/~NSgVdG\ndoctoral/~J\ndoctorate/~NgSV\ndoctrinaire/NgSJ\ndoctrinal/~JYN\ndoctrine/~NgS\ndocudrama/~NSg\ndocument/~NgSVGd\ndocumentarian/NgS\ndocumentary/~JNSg\ndocumentation/~Nmg\ndocumented/~VU\ndodder/VdGSNg\ndoddery/J\ndoddle/NV\ndodge/~Vd>GSNgJZ\ndodgem/NS\ndodger/~Ng\ndodgy/J>^\ndodo/~NgS\ndoe/~NSg\ndoer/Ng\ndoes/~VAhrU\ndoeskin/NgS\ndoesn't/~VAh\ndoff/VdGS\ndog/~NSgVJ\ndogcart/NSg\ndogcatcher/NSg\ndoge/~NgS\ndogeared/JV\ndogfight/NSgV\ndogfish/NgS09       # singular and plural, also has a plural in -s\ndogfood/NgSVdG\ndogged/~VtTJYp\ndoggedness/Ng\ndoggerel/JNg\ndogging/NV6\ndoggone/J^>VGS\ndoggy/NSgJ>^\ndoghouse/NSg\ndogie/NSg\ndogleg/NSgV\ndoglegged/VtT\ndoglegging/V6\ndoglike/J\ndogma/~NSg\ndogmatic/~JNQ\ndogmatism/Nmg\ndogmatist/NSg\ndognapper/NgS\ndogpile/NgS\ndogsbody/NSV\ndogsled/NSgV\ndogtrot/NgSVJ\ndogtrotted/VtT\ndogtrotting/V6\ndogwood/~NgS\ndoily/NSg\ndoing/~V6SNgU\ndojo/NgS\ndoldrums/N9g\ndole/~VGdSNW\ndole's\ndoleful/JYp\ndolefulness/Nmg\ndoll/~NgSdG\ndollar/~NSg\ndollarization/Ng\ndollarize/VdSG\ndollhouse/NSg\ndollop/NSgVGd\ndolly/~NSgVJ\ndolmen/NSg\ndolomite/~Ng\ndolor/Ng\ndolorous/JY\ndolour/Ng!@_₹\ndolphin/~NgS\ndolt/NgSV\ndoltish/JYp\ndoltishness/Nmg\ndomain/~NSg\ndome/~NgSVGd\ndomestic/~JNSgQ\ndomesticate/VdGSNn\ndomesticated/~VtTJU\ndomestication/~NwgS\ndomesticity/Nmg\ndomicile/NSgVdG\ndomiciliary/NJ\ndominance/~Nmg\ndominant/~NSgJY\ndominate/~VdGSJNn\ndomination/~NwgS\ndominatrices/N9\ndominatrix/NgV\ndomineer/VSGd\ndomineering/V6JYN\ndominion/~NSg\ndomino/~N0gV\ndominoes/N9\ndon/~NSgV\ndon't/~VbA\ndona/~Sg\ndonate/~VdSGXn\ndonation/~NwgS\ndone/~JVTNWrU\ndong/~NgS09VdG      # singular and plural, currency plural is dong or dongs\ndongle/NSg\ndonkey/~NSg\ndonned/~VtT\ndonning/V6\ndonnish/J\ndonnybrook/NgSJ\ndonor/~NSg\ndonut/NSg\ndoodad/NSg\ndoodah/N0\ndoodahs/N9\ndoodle/~NSgVd>GZ\ndoodlebug/NSg\ndoodler/Ng\ndoohickey/NSg\ndoolally/J\ndoom/~NwgSVdG\ndoomer/NgS\ndoomsayer/NgS\ndoomsday/~NgJ\ndoomster/NS\ndoona/NgS_\ndoor/~NSVi\ndoor to door/R\ndoor-to-door/S\ndoor's\ndoorbell/NgSV\ndoorjamb/NS\ndoorkeeper/NgS\ndoorknob/NgS\ndoorknocker/NS\ndoorman/~N0g\ndoormat/NSg\ndoormen/N9\ndoorplate/NSg\ndoorpost/NgS\ndoorstep/NgSV\ndoorstepped/VtT\ndoorstepping/V6N\ndoorstop/NgS\ndoorway/~NSg\ndooryard/NgS\ndoozy/NgS\ndopa/Ng\ndopamine/~Nmg\ndope/~NwgSVGd>JZ\ndoper/NgJ\ndopey/J\ndopier/Jc\ndopiest/Ju\ndopiness/Nmg\ndoping/~VNg\ndoppelgänger/NS\ndork/NgSV\ndorky/J>^\ndorm/~NgSV>Z\ndormancy/Ng\ndormant/~JN\ndormer/Ng\ndormice/9\ndormitory/~NSg\ndormouse/Ng\ndorsal/~JYN\ndory/~NSgJ\ndos/N9\ndosage/~NSg\ndose/~NgSVGd\ndosh/N\ndosimeter/NSg\ndoss/Vd>GSNJZ\ndosshouse/NS\ndossier/~NgS\ndost/~V             # archaic 2nd person singular present of 'do'\ndot/~NSgVGd>PZ\ndotage/Nmg\ndotard/NSg\ndotcom/NSgV\ndote/VSN\ndoter/Ng\ndoth/Vh\ndoting/VJYN\ndotted/~VtTJ\ndotting/V6N\ndotty/J>^N\ndouble/~JNSVdGr\ndouble-decker/J\ndouble's\ndoubleheader/~NgS\ndoublespeak/Ng\ndoublet/NgS\ndoubloon/NSg\ndoubly/~R%\ndoubt/~Vd>GSNwgZ\ndoubter/Ng\ndoubtful/~JYpN\ndoubtfulness/Nmg\ndoubting/~V6NJY\ndoubtless/JY\ndouche/NSgVdG\ndouchebag/NSg\ndough/~NwgV\ndoughnut/NSgV\ndoughty/~J>^N\ndoughy/J^>N\ndour/J>Y^p\ndourness/Ng\ndouse/VdGSN\ndove/~NgSV\ndovecot/NS\ndovecote/NSg\ndovetail/NgSVdG\ndovish/J\ndowager/~NgS\ndowdily/Ry\ndowdiness/Ng\ndowdy/J^>pNSV\ndowel/~NSgVdG\ndowelled/VtT!@_₹\ndowelling/V6N!@_₹\ndower/~NSgVdG\ndown/~PJ>VdGSNwgZ\ndownbeat/NSgJ\ndowncast/JNV\ndowndraft/N0gS\ndowndrafts/N9!_₹\ndowndraught/NgS!_₹\ndowner/Ng\ndownfall/~NSgVn\ndownfield/J\ndownforce/Nmg\ndowngrade/NSgVdG\ndownhearted/JYp\ndownheartedness/Ng\ndownhill/~JNgSV\ndownload/~NgSVdGB\ndownloader/NgS\ndownmarket/JV\ndownplay/VdSG\ndownpour/NgSV\ndownrange/J\ndownrank/VSdG\ndownright/~J\ndownriver/~J\ndownsample/SGg\ndownscale/JVSdG\ndownshift/NSVGd\ndownside/~NgS\ndownsize/VGdS\ndownsizing/VNg\ndownspout/NgS\ndownstage/JNV\ndownstairs/~JNg\ndownstate/NgJ\ndownstream/~JV\ndownswing/NgS\ndowntempo/NJ\ndowntime/NgS\ndowntown/~JNg\ndowntrend/NgSV\ndowntrodden/JV\ndownturn/~NgSV\ndownvote/NgSVdG\ndownward/~JR\ndownwards/R\ndownwind/\ndowny/J>^N\ndowry/~NSgV\ndowse/Vd>GSNZ\ndowser/Ng\ndoxology/NSg\ndoxx/VdSG\ndoyen/NSg\ndoyenne/NgS\ndoz/NSGdXn\ndoze/VNg\ndozen/~NgH\ndozily/Ry\ndozy/J>^p\ndpi/N\ndpt\ndrab/~NgSJYpV\ndrabber/NJc\ndrabbest/Ju\ndrabness/Ng\ndrachma/NgS\ndraconian/J\ndraft/~NSVdGJr\ndraft's\ndraftee/NSg\ndrafter/NSg\ndraftily/Ry\ndraftiness/Ng\ndrafting/~V6Ng\ndraftsman/~Ng\ndraftsmanship/Nmg\ndraftsmen/9\ndraftswoman/N0g\ndraftswomen/N9\ndrafty/J>^p\ndrag/~NwgSVb\ndragged/~VtT\ndragging/~JNV6\ndraggy/J^>N\ndragnet/NSgV\ndragon/~NSg\ndragonfly/~NSg\ndragoon/~NSgVdG\ndragster/NS\ndrain/~NSgVd>GZ\ndrainage/~Nmg\ndrainboard/NSg\ndrainer/NgS\ndrainpipe/NgS\ndrake/~NSg\ndram/~NgSV\ndrama/~NwSg\ndramatic/~JSQ\ndramatics/Ng\ndramatisation/NwgS!_₹\ndramatise/VdSG!_₹\ndramatist/~NSg\ndramatization/~NwSg\ndramatize/VdSG\ndrank/~NVt\ndrape/NSgVd>GZ\ndraper/~Ng\ndrapery/NwSg\ndrastic/~JNQ\ndrat/V\ndratted/VtTJ\ndraught/NSgJV!_₹\ndraughtboard/NS\ndraughtily/Ry!_₹\ndraughtiness/Ng!_₹\ndraughtsman/N0g!_₹\ndraughtsmanship/Nmg!_₹\ndraughtsmen/N9!_₹\ndraughtswoman/N0g!_₹\ndraughtswomen/N9!_₹\ndraughty/J>^p!_₹\ndraw/~V>GSNgZz\ndrawback/~NgS\ndrawbridge/~NgS\ndrawer/~NgS\ndrawing/~VSNwg\ndrawl/VdGSNg\ndrawn/~VTJr\ndrawstring/NgS\ndray/NgS\ndread/~VdGSNwgJ\ndreadful/~JYpN\ndreadfulness/Nmg\ndreadlocks/Nm9gV\ndreadnought/~NgS\ndream/~NSgVd>GJZ\ndreamboat/NgS\ndreamed/~VtTU<@_\ndreamer/~NgS\ndreamily/Ry\ndreaminess/Nmg\ndreamland/~Nmg\ndreamless/J\ndreamlike/J\ndreamt/VtT!@_₹\ndreamworld/NSg\ndreamy/J>^p\ndrear/JN\ndrearily/Ry\ndreariness/Nmg\ndreary/J>^p\ndredge/~NSgVd>GZ\ndredger/Ng\ndregs/Nm9g\ndrench/NSVGd\ndress/~VGdSNgrU\ndressage/~Nmg\ndresser/~NgS\ndressiness/Ng\ndressing/~NSgV6\ndressmaker/NSg\ndressmaking/Nmg\ndressy/J^>p\ndrew/~Vtr\ndribble/VGd>SNmgZ\ndribbler/Ng\ndriblet/NgS\ndrier/~NgJ\ndrift/~NSgVd>GZ\ndrifter/~Ng\ndriftnet/NSV\ndriftwood/~Nmg\ndrill/~Vd>GSNgZ\ndriller/Ng\ndrillmaster/NSg\ndrily/Ry!_₹\ndrink/~V>GSNgBzZ\ndrinkable/JNU\ndrinker/~NgS\ndrip/~VSNg\ndripped/VtT\ndripper/NgS\ndripping/~NSgV6\ndrippy/J^>\ndrivability/Nmg\ndrivable/JU\ndrive/~Vb>GSNwgZ\ndrivel/NmSgVGd>Z\ndriveler/Ng\ndrivelled/VtT!@_₹\ndriveller/NSg!@_₹\ndrivelling/V6NJ!@_₹\ndriven/~VTJ\ndriver/~NgS\ndriverless/J\ndriveshaft/NSg\ndrivetrain/NgS\ndriveway/NgS\ndrizzle/VGdSNwg     # normally a mass noun but \"a drizzle\" means it's also a countable noun\ndrizzly/J\ndrogue/NSgV\ndroid/NSg\ndroll/J^>pNV\ndrollery/NSg\ndrollness/Ng\ndrolly/Ry\ndromedary/NSg\ndrone/~NSgVdG\ndrool/VdGSNg\ndroop/VGdSNgJ\ndroopiness/Nmg\ndroopy/J^>p\ndrop/~NgSV\ndrop in/V\ndrop-in/NgSJ\ndropbox/NgS\ndropdown/NSgJ\ndropkick/~NgSV\ndroplet/NSg\ndropout/NSg\ndropped/~VtTJ\ndropper/NSg\ndropping/~V6SN\ndroppings/N9g\ndropsical/J\ndropsy/Ng\ndross/NgV\ndrought/~NSg\ndrove/~NSgVt>Z\ndrover/NgS\ndrown/~VGSdz\ndrowning/~VSNwg\ndrowse/VGdSNg\ndrowsily/Ry\ndrowsiness/Nmg\ndrowsy/J>^p\ndrub/NSV\ndrubbed/VtT\ndrubber/NSg\ndrubbing/V6SNg\ndrudge/NgSVGd\ndrudgery/Nmg\ndrug/~NgSV\ndrugged/~VtTJ\ndruggie/NSg\ndrugging/V6N\ndruggist/NSg\ndruggy/NJ\ndrugstore/~NgS\ndruid/~NSg\ndruidism/Ng\ndrum/~NgSV\ndrumbeat/NSg\ndrumlin/NSg\ndrummed/VtT\ndrummer/~NSg\ndrumming/~NV6\ndrumstick/NSg\ndrunk/~J^>NSgVTn\ndrunkard/NgS\ndrunken/~VJYp\ndrunkenness/~Nmg\ndrupe/NSg\ndruthers/Ng\ndry/~J^Y>NSgVGdZ\ndryad/NSg\ndryer/~NSgJ\ndryness/Nmg\ndrys/N\ndrywall/NgV\ndual/~JNV\ndualism/~Nmg\nduality/~Nmg\ndub/~VSNg\ndubbed/~JVtT\ndubber/NSg\ndubbin/NgV\ndubbing/~NmV6\ndubiety/Ng\ndubious/~JYp\ndubiousness/Nmg\ndubstep/Nmg\nducal/~J\nducat/NSg\nduchess/~NgSV\nduchy/~NSg\nduck/~VdGSNg\nduckbill/NSg\nduckboards/N\nduckling/~NSg\nduckpins/Ng\nduckweed/Nmg\nducky/J^>NSg\nduct/~NSVeKiW\nduct's/K\nductile/J\nductility/Nmg\nducting/VN\nductless/J\ndud/NSgJGd\ndude/~NgSV\ndudgeon/Nmg\ndue/~JNSg\nduel/~NgSVd>GzZ\ndueler/Ng\nduelist/NSg\nduelled/VtT!@_₹\ndueller/NSg!@_₹\nduelling/V6SN!@_₹\nduellist/NSg!@_₹\nduenna/NgS\nduet/~NgSV\nduff/~NgSJ>VdGZ\nduffer/JcNg\ndug/~VN\ndugout/~NgS\nduh/~\nduke/~NgSV\ndukedom/~NSg\ndulcet/J\ndulcimer/~NgS\ndull/~J^>pVdGS\ndullard/NSg\ndullness/Nmg\ndully/Ry\nduly/~RyU\ndumb/~JY^>pV\ndumbass/NSgx\ndumbbell/~NSg\ndumbfound/VSdG\ndumbness/Nmg\ndumbo/NgS\ndumbstruck/J\ndumbwaiter/NSg\ndumdum/NgS\ndummy/~NSgV\ndump/~NgSVd>GZ\ndumpiness/Nmg\ndumpling/~NSg\ndumpsite/NgS\ndumpster/NSg\ndumpy/J^>pN\ndun/~NSgJV\ndunce/NSg\ndunderhead/NgS\ndune/~NgS\ndung/~NmgSVdG\ndungaree/NgS\ndungeon/~NSgV\ndunghill/NgS\ndunk/~VdGSNg\ndunned/VtT\ndunner/Jc\ndunnest/Ju\ndunning/~V6N\ndunno/N\nduo/~NSg\nduodecimal/JN\nduodena/N\nduodenal/J\nduodenum/Ng\nduopoly/~NS\ndupe/NgSVGd>Z\nduper/Ng\nduple/J\nduplex/~JNgSVG\nduplicate/~JVGdSNrn\nduplicate's\nduplication/~Ngr\nduplicator/NgS\nduplicitous/J\nduplicity/Nmg\ndurability/~Nmg\ndurable/~JN\ndurably/Ry\ndurance/Ng\nduration/~NwgS\nduress/~NgV\nduring/~PV\ndurometer/NgS\ndurst/V\ndurum/Ng\ndusk/~JNmgV\nduskiness/Nmg\ndusky/~J>^pN\ndust/~NmgSVd>GZ\ndustbin/NSg\ndustcart/NS\nduster/NgS\ndustiness/Nmg\ndustless/J\ndustman/N0\ndustmen/N9\ndustpan/NSg\ndustsheet/NS\ndusty/~J>^pN\ndutch/~NV\nduteous/JY\ndutiable/JN\ndutiful/JYp\ndutifulness/Nmg\nduty/~NwSg\nduvet/NSg!₹\ndwarf/~NSgJVGd\ndwarfish/J\ndwarfism/Nmg\ndwarves/N9\ndweeb/NSg\ndwell/~NSVG>zZ\ndwelled/VtT<@_\ndweller/NgS\ndwelling/~NwgSV6\ndwelt/VtTi!@_₹\ndwindle/VdSG\ndyadic/~JN\ndybbuk/N0Sg\ndybbukim/N9\ndye/~NwSgVd>GZ\ndyeing/~V6Nr\ndyer/~Ng\ndyestuff/Nmg\ndying/~JNgV6\ndyke/~NgSV\ndynamic/~JNgS\ndynamical/~JY\ndynamics/~N0g\ndynamism/~Nmg\ndynamite/~NwgSVGd>Z\ndynamiter/Ng\ndynamo/~NSg\ndynastic/~J\ndynasty/~NSg\ndyno/NSg\n# dys               # prefixes that are not also words in their own right don't belong in the dictionary\ndysania/Nmg\ndysentery/~Nmg\ndysfunction/~Nwg\ndysfunctional/~J\ndyslectic/JNSg\ndyslexia/Nmg\ndyslexic/JNSg\ndyspepsia/Nmg\ndyspeptic/JNgS\ndysphagia/Nmg\ndysphoria/Nmg\ndysphoric/JN\ndysprosium/Ng\ndystonia/~N\ndystopi\ndystopia/NwgS\ndystopian/~J\ndz/NV\ne/~NSId^W\ne-book/NgS\ne-commerce/Nmg\ne'en/\ne'er/\ne.g./~N\neBay/OgV\neMusic/g\neSIM/NgS\nea/~N\neach/~Dq\neach other/I\neager/~J^Y>pVN\neagerness/Ng\neagle/~NgSV\neaglet/NgS\near/~NSgVdY\nearache/NSg\nearbud/NSg\neardrum/NSg\nearful/NSg\nearl/~NgS\nearldom/~NSg\nearliness/Ng\nearlobe/NSg\nearly/~J>^pN\nearmark/VdGSNg\nearmuff/NSg\nearn/~Vd>GSN^Zz\nearned/~VU\nearner/Ng\nearnest/~NSgVJYp\nearnestness/Ng\nearnings/~9\nearphone/NgS\nearpiece/NS\nearplug/NSgV\nearring/NSg\nearshot/Ng\nearsplitting/J\nearth/~ONmVdGU\nearth's\nearthbound/J\nearthen/~JV\nearthenware/Nmg\nearthiness/Nmg\nearthling/NgS\nearthly/~J>^NgSRy\nearthquake/~NSgV\nearths/~NVU\nearthshaking/J\nearthward/JS\nearthwork/~NgS\nearthworm/NgS\nearthy/J>^p\nearwax/Nmg\nearwig/NSgV\nearworm/NgS\nease/~NmSgVd\neasel/NSg\neasement/NSg\neasily/~RyU\neasiness/NgU\neasing/~VN\neast/~NgJ\neastbound/~J\neasterly/~NSgJ\neastern/~J>Z\neasterner/Ng\neasternmost/~J\neastward/~NSJ\neasy/~J^>pNVU\neasy peasy/J\neasygoing/J\neat/~VGS>ZBn\neatable/JNSg\neaten/~VTJU\neater/~Ng\neatery/NSg\neave/NgS\neavesdrop/VSN\neavesdropped/VtT\neavesdropper/NSg\neavesdropping/~NV6\nebb/~NSgJVdG\nebony/~NwSgJ\nebullience/Ng\nebullient/JY\nebullition/Ng\neccentric/~JNSgQ\neccentricity/~NSg\neccl\necclesial/J\necclesiastic/JNSg\necclesiastical/~JY\nechelon/~NSgVJ\nechidna/N\nechinoderm/NSg\necho/~N0VdGr\necho's\nechoes/~N9Vr\nechoic/J\necholocation/Nmg\nechos/N9\neclair/NSg\neclat/Ng\neclectic/~JNSgQ\neclecticism/Ng\neclipse/~NSgVdG\necliptic/~NgJ\neclogue/NSg\neco-friendly/J\necocide/Nmg\necol/N\necologic/J\necological/~JY\necologist/~NgS\necology/~Nmg\necon/NJ\neconometric/~JS\neconomic/~JS\neconomical/~JYU\neconomics/~Nmg\neconomise/Vd>SGZ!_₹\neconomiser/Ng!_₹\neconomist/~NSg\neconomize/Vd>SGZ\neconomizer/Ng\neconomy/~NwSgJ\necosphere/NgS\necosystem/~NgS\necotourism/~Nmg\necotourist/NgS\necru/NgJ\necstasy/~NSgV\necstatic/~JNQ\nectoplasm/Nwg       # used with indefinite article in The Great Gatsby\necu/NS\necumenical/~JY\necumenicism/Ng\necumenism/Nmg\neczema/Nwg\ned/~NSgre\nedamame/N\neddy/~NSgVdG\nedelweiss/Ng\nedema/~NSg\nedge/~NgSVGd>Zz\nedger/Ng\nedgewise/J\nedgily/Ry\nedginess/Nmg\nedging/~VNg\nedgy/J>^p\nedibility/Ng\nedible/~JpNSg\nedibleness/Ng\nedict/~NSg\nedification/Nmg\nedifice/~NSg\nedifier/Ng\nedify/Vd>SGZn\nedifying/JVNU\nedit/~NSVdGr\nedit's\neditable/J\nedited/~VtTJU\nedition/~NgS\neditor/~NSg\neditor in chief/N\neditorial/~JYNSg\neditorialise/VdSG!_₹\neditorialize/VdSG\neditorship/~Ng\neduc\neducability/Ng\neducable/JNi\neducate/~VdSGrnv\neducated/~JVtTU\neducation/~N0gr\neducational/~JYN\neducationalist/NS\neducationist/~NS\neducations/N9\neducator/~NgS\neduce/VdGSNB\nedutainment/Nmg\neek/~VN\neel/~NSgV\neerie/~J>^N\neerily/Ry\neeriness/Ng\neff/~VGdSN\nefface/VdSGL\neffacement/Ng\neffect/~NSgVdGv\neffective/~JYpNi\neffectiveness/~Ngi\neffectual/JYi\neffectuate/VdSG\neffeminacy/Ng\neffeminate/~JYVN\neffendi/NSg\nefferent/JN\neffervesce/VGdS\neffervescence/Nmg\neffervescent/JY\neffete/JYp\neffeteness/Ng\nefficacious/JY\nefficacy/~Ngi\nefficiency/~NwSgi\nefficient/~JYNi\neffigy/~NSg\nefflorescence/Ng\nefflorescent/J\neffluence/Nmg\neffluent/~JNwgS\neffluvia/N9\neffluvium/Nw0g\nefflux/NwV\neffort/~NwSgV\neffortful/J\neffortless/JYp\neffortlessness/Nmg\neffrontery/Ng\neffulgence/Nmg\neffulgent/J\neffuse/JVdGSNnvX\neffusion/Ng\neffusive/JYp\neffusiveness/Ng\negad/\negalitarian/~JNSg\negalitarianism/Nmg\negg/~NwSgVGd\neggbeater/NgS\neggcorn/NgS\neggcup/NSg\negghead/NSg\neggnog/Ng\neggplant/NgS\neggshell/NSgJ\neggy/J^S\neglantine/NSg\nego/~NSg\negocentric/JNgSQ\negocentricity/Ng\negoism/Ng\negoist/NSg\negoistic/J\negoistical/JY\negomania/Ng\negomaniac/NgS\negotism/Ng\negotist/NSg\negotistic/J\negotistical/JY\negregious/~JYp\negregiousness/Ng\negress/~NgSV\negret/~NSg\neh/~VJ\neider/NSg\neiderdown/NgS\neigenvalue/~NS\neigenvector/NS\neight/~NSgJ\neighteen/~SgH\neighteenth/~JNg\neighteenths/N\neighth/~JNgV\neighths/NV\neightieth/JNg\neightieths/N\neighty/~SgH\neinsteinium/Nmg\neisteddfod/~NS\neither/~IC\nejaculate/VGdSNnX\nejaculation/~Ng\nejaculatory/~J\neject/~VdGSN\nejection/~NgS\nejector/~NSg\neke/NSVdG\nelaborate/~JYpVGdSnX\nelaborateness/Ng\nelaboration/~Nmg\nelan/Ng\neland/~NSg\nelapse/VdSG\nelastic/~JNgSQ\nelasticated/J\nelasticise/VdSG!_₹\nelasticity/~Nmg\nelasticize/VdSG\nelate/VdSGJn\nelated/JYV\nelation/NwgS\nelbow/~NSgVdG\nelbowroom/Ng\nelder/~JYNSgV\nelderberry/NwSg\neldercare/Ng\neldest/~JuN\neldritch/~J\nelect/~NSVGJv\nelect's\nelectable/JN\nelected/VtTSJNg\nelection/~NgSr\nelectioneer/VdGS\nelective/~JNgS\nelector/~NgS\nelectoral/~JY\nelectorate/~NgS\nelectric/~JNS\nelectrical/~JYN\nelectrician/NgS\nelectricity/~Nmg\nelectrification/~Nmg\nelectrifier/Ng\nelectrify/Vbd>SZn\nelectrifying/JYV6N\nelectrocardiogram/NgS\nelectrocardiograph/N0g\nelectrocardiographs/N9\nelectrocardiography/Nmg\nelectrocute/VdSGXn\nelectrocution/NwgS\nelectrode/~NSg\nelectrodynamics/~N\nelectroencephalogram/NgS\nelectroencephalograph/N0g\nelectroencephalographic/J\nelectroencephalographs/N9\nelectroencephalography/Nmg\nelectrologist/NSg\nelectrolysis/~Ng\nelectrolyte/~NgS\nelectrolytic/JN\nelectromagnet/NgS\nelectromagnetic/~JQ\nelectromagnetism/~Nmg\nelectromechanical/J\nelectromotive/J\nelectron/~NgS\nelectronic/~JS\nelectronica/~Nmg\nelectronically/~Ry\nelectronics/~Nmg\nelectroplate/VdGSN\nelectroscope/NSg\nelectroscopic/J\nelectroshock/NgV\nelectrostatic/~JS\nelectrostatics/Ng\nelectrotype/NgSV\nelectroweak/~J\neleemosynary/JN\nelegance/~Ngi\nelegant/~JYNi\nelegiac/JNgS\nelegiacal/J\nelegy/~NSg\nelem/N\nelement/~NgSV\nelemental/~JYNgS\nelementary/~JN\nelephant/~NSg\nelephantiasis/Ng\nelephantine/J\nelev\nelevate/~VdSGJXn\nelevation/~Nwg\nelevator/~NgSV\neleven/~NSgH\nelevens/NS\neleventh/~JNg\nelevenths/N\nelf/~NgV\nelfin/NJ\nelfish/J\nelicit/~VSdGJ\nelicitation/Nwg\nelide/VdSG\neligibility/~Ngi\neligible/~JN\neliminate/~VdSGXn\nelimination/~Nwg\neliminator/~NgS\nelision/NwgS\nelite/~JNSg\nelitism/Nmg\nelitist/~JNgS\nelixir/NSg\nelk/~NSg09          # singular and plural, also has a plural in -s\nell/~NSg\nellipse/~NgSV\nellipsis/N0g\nellipsoid/NSgJ\nellipsoidal/J\nelliptic/~JN\nelliptical/~JYN\nelm/~NwSg\nelocution/Nmg\nelocutionary/J\nelocutionist/NSg\nelodea/NSg\nelongate/JVdSGnX\nelongation/Nmg\nelope/VdSGL\nelopement/NgS\neloquence/~Nmg\neloquent/~JYi\nelse/~JCg\nelsewhere/~N\nelucidate/VdSGJnX\nelucidation/Nmg\nelude/VdSG\nelusive/~JYp\nelusiveness/Ng\nelver/NSg\nelves/~N9\nelvish/J\nem/~NSI\nem's\nemaciate/VGdSJn\nemaciation/Nmg\nemail/~NwSgVdG\nemanate/VdSGXn\nemanation/NwgS\nemancipate/VdSGJn\nemancipation/~Ng\nemancipator/NgS\nemancipatory/J\nemasculate/VGdSJn\nemasculation/Nmg\nembalm/VSGd>Z\nembalmer/NgS\nembank/VSGdL\nembankment/~NSg\nembargo/~N0gVdG\nembargoes/N9V\nembark/~VGdSrE\nembarkation/N0gE\nembarkations/N9\nembarrass/VGdSL\nembarrassed/~JVtTU\nembarrassing/~V6NJY\nembarrassment/~NwSg\nembassy/~NSg\nembattled/JV\nembed/~VSN\nembeddable/J\nembedded/~VtTJ\nembedder/NgS\nembedding/~NSgV6\nembellish/VGdS>L\nembellishment/NSg\nember/~NSgJ\nembezzle/VGd>SZL\nembezzlement/~Ng\nembezzler/Ng\nembitter/VGdSL\nembitterment/Ng\nemblazon/VGdSL\nemblazonment/Ng\nemblem/~NSgV\nemblematic/~JQ\nembodiment/~NgE\nembody/~VGSdrE\nembolden/VdGS\nembolisation/N!_₹\nembolism/~NgS\nembolization/N\nemboss/Vd>GSNZ\nembosser/Ng\nembouchure/Ng\nembower/VSGd\nembrace/~VdGSNg\nembraceable/J\nembrasure/NgS\nembrocation/NgS\nembroider/VSd>GZ\nembroiderer/Ng\nembroidery/~NwSg\nembroil/VdGSNL\nembroilment/Nmg\nembryo/~NSg\nembryological/J\nembryologist/NgS\nembryology/Nmg\nembryonic/~J\nemcee/NSgVd\nemceeing/V6\nemend/VSdG\nemendation/NgS\nemerald/~NwgSJV\nemerge/~VdGSNr\nemergence/~Nmgr\nemergency/~NwSg\nemergent/~JNg\nemerita/JN9\nemeritus/~JN0\nemery/~NgV\nemetic/JNSg\nemf/NS\nemigrant/~NSg\nemigrate/~VdSGXn\nemigration/~Ng\nemigre/NSg\neminence/~NgS\neminent/~JY\nemir/~NgS\nemirate/~NgS\nemissary/~NSg\nemission/~NSg\nemit/~VbS\nemitted/~VtT\nemitter/~NgS\nemitting/~V6\nemo/~NSgJ\nemoji/~NwSg09       # singular and plural, also has a plural in -s\nemollient/NgSJ\nemolument/NgS\nemote/VdGSNXnv\nemoticon/NSg\nemotion/~NwgS\nemotional/~JYNU\nemotionalise/VGdS!_₹\nemotionalism/Nmg\nemotionalize/VGdS\nemotionless/J\nemotive/JYN\nempanel/VSN@\nempanelled/VtT@\nempanelling/V6@\nempathetic/JQ\nempathise/VdSG!_₹\nempathize/VdSG\nempathy/~Nmg\nemperor/~NgS\nemphases/N9\nemphasis/~N0g\nemphasise/VGdSr!_₹\nemphasize/~VGdSre\nemphatic/~JNUQ\nemphysema/~Ng\nempire/~NSgJ\nempiric/JN\nempirical/~JYN\nempiricism/Nmg\nempiricist/NSg\nemplacement/NSg\nemploy/~VdGSNrL\nemploy's\nemployable/JNU\nemployee/~NSg\nemployer/~NSg\nemployment/~N0wgUr\nemployments/N9\nemporium/NSg\nempower/~VSdGL\nempowerment/~Ng\nempress/~NgSV\nemptily/Ry\nemptiness/Nmg\nempty/~J^>pVGdSNg\nempyrean/NgJ\nemu/~NSg\nemulate/~VdSGJnvX\nemulation/~NwgS\nemulator/~NSg\nemulsification/Nmg\nemulsifier/~NgS\nemulsify/Vd>SGnZ\nemulsion/~NwgSV\nen/NSgPI(\nen masse\nenable/~Vd>SGZ\nenabler/NgS\nenact/~VSdGrL\nenactment/~NSgr\nenamel/~NwSgVGd>zZ\nenameler/NgS\nenamelled/JVtT!@_₹\nenameller/NSg!@_₹\nenamelling/V6SN!@_₹\nenamelware/Nmg\nenamor/VSGd\nenamour/VdGS!@_₹\nenc/N\nencamp/VSGdL\nencampment/~NgS\nencapsulate/VGdSXn\nencapsulation/Nwg\nencase/VdSGL\nencasement/Ng\nencephalitic/J\nencephalitis/~Ng\nenchain/VdGS\nenchant/VdGSNEL\nenchanter/NgS\nenchanting/V6JYN\nenchantment/~NwSgE\nenchantments/N\nenchantress/~NgS\nenchilada/NSg\nencipher/VSGd\nencircle/VdSGL\nencirclement/~Ng\nencl/N              # Wiktionary says abbreviation of encyclopedia\nenclave/~NgSV\nenclose/~VGdS\nenclosed/~JVtTU\nenclosure/~NSg\nencode/~Vd>SNZ\nencoder/~Ng\nencoding/NwgS\nencomium/NgS\nencompass/~VGdS\nencore/~NSgVdG\nencounter/~VGdSNg\nencourage/~VdSGL\nencouragement/~NSg\nencouraging/~JYV6N\nencroach/VGdSNL\nencroachment/~NSg\nencrust/VdGS\nencrustation/NSg\nencrypt/VdGS\nencryption/~NwgS\nencumber/VGSdE\nencumbered/JVU\nencumbrance/NgSV\nencyclical/~NSgJ\nencyclopaedia/NSg!_₹\nencyclopaedic/J!_₹\nencyclopedia/~NgS\nencyclopedic/~J\nencyst/VSGdL\nencystment/Ng\nend/~NSgVGdvz\nend user/NgS\nendanger/~VSGdL\nendangerment/Ng\nendear/VSGdL\nendearing/JYNV\nendearment/NSg\nendeavor/~NSgVGd\nendeavour/NgSVdG!@_₹\nendemic/~JNgSQ\nendgame/~NSJ\nendian/NSg\nendianness/Ng\nending/~NgV\nendive/NSg\nendless/~JYp\nendlessness/Ng\nendmost/J\nendocarditis/Nmg\nendocrine/~JNgS\nendocrinologist/NgS\nendocrinology/Ng\nendogenous/~JY\nendometrial/J\nendometriosis/Nmg\nendometrium/N\nendonym/NSg\nendorphin/NgS\nendorse/~VGd>SNLZ\nendorsement/~NgS\nendorser/NgS\nendoscope/NgS\nendoscopic/J\nendoscopy/NgS\nendoskeleton/NgS\nendothelial/~J\nendothermic/J\nendotracheal/J\nendow/VSdGL\nendowment/~NgS\nendpoint/~NSgV\nendue/VdSG\nendurable/JU\nendurance/~Nmg\nendure/~VdSGB\nendways/\nenema/NSg\nenemy/~NSgV\nenergetic/~JNQ\nenergise/VGd>SZ!_₹\nenergiser/Ng!_₹\nenergize/VGd>SZ\nenergizer/Ng\nenergy/~NwSg\nenergy-efficient/J\nenervate/VGdSJn\nenervation/Ng\nenfeeble/VGdSL\nenfeeblement/Ng\nenfilade/NSgVdG\nenfold/VSGd\nenforce/~VGd>SLZ\nenforceable/JU\nenforced/~VtTU\nenforcement/~NwgS\nenforcer/~NgS\nenfranchise/VGdSEL\nenfranchisement/NgE\nengage/~VdSGEr\nengagement/~NgSE\nengagingly/Ry\nengender/VSGd\nengine/~NSgV\nengineer/~NgSVdG\nengineering/~VNmg\nengorge/VGdSL\nengorgement/Nmg\nengram/NSg\nengrave/VGd>SZz\nengraver/~NgS\nengraving/~NwgV\nengross/VGdSL\nengrossment/Nmg\nengulf/VSGdL\nengulfment/Ng\nenhance/~VGd>SLZ\nenhancement/~NSg\nenigma/~NSg\nenigmatic/~JQ\nenjambment/NSg\nenjoin/VSGd\nenjoy/~VGSdBL\nenjoyably/Ry\nenjoyer/NSg\nenjoyment/~NwSg\nenlarge/~VGd>SLZ\nenlargeable/J\nenlargement/~NgS\nenlarger/Ng\nenlighten/VSGdL\nenlightened/~JNVU\nenlightenment/~Nwg\nenlist/~VdGSNrL\nenlistee/NSg\nenlistment/~Ngr\nenlistments/N9\nenliven/VSdGL\nenlivenment/Ng\nenmesh/VdSGL\nenmeshment/Ng\nenmity/~NSg\nennoble/VdSGL\nennoblement/Ng\nennui/NmgV\nenormity/NSg\nenormous/~JYp\nenormousness/Ng\nenough/~INg\nenplane/VdSG\nenqueue/VdS\nenquire/Vd>SGZ!_₹\nenquirer/~NS\nenquiring/V6NJY!_₹\nenquiringly/Ry\nenquiry/NSg!_₹\nenrage/VGdS\nenrapture/VdSG\nenrich/~VdSGL\nenrichment/~Ng\nenrol/VSL!@_₹\nenroll/~VdSGL\nenrolled/VtT\nenrolling/V6N\nenrollment/~NgS\nenrolment/NSg!@_₹\nensconce/VdSG\nensemble/~NSgV\nenshrine/VGdSL\nenshrinement/Ng\nenshroud/VdGS\nensign/~NgSV\nensilage/NgV\nenslave/~VdSGL\nenslavement/~Ng\nensnare/VdSGL\nensnarement/Ng\nensue/VdSG\nensure/~VGd>SZ\nensurer/Ng\nentail/~VdGSNL\nentailment/Ng\nentangle/VdSGEL\nentanglement/~N0gE\nentanglements/N9\nentente/~NSg\nenter/~VGdSNr\nenteral/J\nenteric/J\nenteritis/Ng\nenterprise/~NwgSVG\nenterprising/~JYVN\nentertain/~VGd>SNZL\nentertainer/~Ng\nentertaining/~JYVNg\nentertainment/~NwgS\nenthral/VSL!_₹\nenthrall/VGdSL\nenthralled/JVtT!_₹\nenthralling/JV6!_₹\nenthrallment/Ng\nenthralment/Ng!_₹\nenthrone/VGdSL\nenthronement/~NSg\nenthuse/VdSG\nenthusiasm/~NgS\nenthusiast/~NgS\nenthusiastic/~JUQ\nentice/VbGdSL\nenticement/NgS\nenticing/JYV6N\nentire/~JN\nentirely/R%\nentirety/~Ng\nentitle/VdSGL\nentitlement/~NSg\nentity/~NSg\nentomb/VdSGL\nentombment/Ng\nentomological/~J\nentomologist/~NgS\nentomology/~Ng\nentourage/~NSg\nentr'acte/N\nentrails/N9g\nentrained/V\nentrance/~NSgVdGL\nentrancement/Ng\nentrancing/VJY\nentrant/~NSg\nentrap/VSL\nentrapment/NwgS\nentrapped/VtT\nentrapping/V6\nentreat/VGdSN\nentreating/VNY\nentreaty/NSg\nentree/NgS\nentrench/VdSGL\nentrenchment/NgS\nentrepreneur/~NSg\nentrepreneurial/~J\nentrepreneurship/~N\nentropy/~Ng\nentrust/VSGd\nentry/~NSgr\nentryphone/NS\nentryway/NgS\nentwine/VdSG\nenum/NSg\nenumerable/J\nenumerate/VdSGnX\nenumeration/~Nwg\nenumerator/NSg\nenunciate/VdSGn\nenunciation/Nwg\nenuresis/Ng\nenvelop/VSd>GLZ\nenvelope/~NSgV\nenveloper/Ng\nenvelopment/Ng\nenvenom/VSdG\nenviable/JU\nenviably/Ry\nenvious/JYp\nenviousness/Ng\nenvironment/~NwgS\nenvironmental/~JYN\nenvironmentalism/~Ng\nenvironmentalist/~NSgJ\nenvirons/~NgV\nenvisage/VGdS\nenvision/VdGS\nenvoy/~NSg\nenvy/~Nm☁SgVdG\nenvying/VNY\nenzymatic/~J\nenzyme/~NSg\neolian/J\neon/~NSg\neosinophil/NSJ\neosinophilic/J\nepaulet/NSg\nepaulette/NgS!@_₹\nepee/NgS\nepentheses/N9\nepenthesis/N0w\nepenthetic/JQ\nephedrine/Ng\nephemera/Ng\nephemeral/~NJY\nepic/~NgSJ\nepicenter/~NgSV\nepicentre/NgSV!@_₹\nepicure/NSg\nepicurean/~JNgS\nepidemic/~NSgJQ\nepidemiological/~J\nepidemiologist/NSg\nepidemiology/~Ng\nepidermal/J\nepidermic/J\nepidermis/~NgS\nepidural/JNS\nepigenome/NgS\nepiglottis/NgS\nepigram/NSg\nepigrammatic/J\nepigraph/N0gV\nepigraphs/N9\nepigraphy/Nmg\nepilepsy/~Nmg\nepileptic/~JNSg\nepilogue/~NgSV\nepinephrine/Nmg\nepiphany/~NSg\nepiphenomena/N9\nepiphenomenon/N0g\nepiscopacy/Ng\nepiscopal/~J\nepiscopate/~NgV\nepisode/~NSg\nepisodic/~JQ\nepistemic/JQ\nepistemological/~J\nepistemologist/NSg\nepistemology/~Nmg\nepistle/~NSgV\nepistolary/JN\nepitaph/~N0gV\nepitaphs/N9V\nepithelial/~J\nepithelium/~Ng\nepithet/~NSgV\nepitomal/J\nepitome/~NSg\nepitomise/VGdS!_₹\nepitomize/VGdS\nepoch/~N0gV\nepochal/J\nepochs/N9\neponymous/~J\nepoxy/~JNSgVdG\nepsilon/~NSg\nequability/Ng\nequable/J\nequably/Ry\nequal/~JYVdGSNg\nequalisation/Ng!_₹\nequalise/VGd>SZ!_₹\nequaliser/NgS!_₹\nequality/~Nmgi\nequalization/Ng\nequalize/VGd>SZ\nequalizer/~NgS\nequalled/VtTJU!@_₹\nequalling/V6!@_₹\nequanimity/Nmg\nequate/~VdGSNnBX\nequation/~NgS\nequator/~NSg\nequatorial/~JN\nequerry/NSg\nequestrian/~JNSg\nequestrianism/Nmg\nequestrienne/NSg\nequidistant/JY\nequilateral/~JNSg\nequilibrium/~NmgE\nequine/~JNSg\nequinoctial/JN\nequinox/~NgS\nequip/~VSNr\nequipage/NgSV\nequipment/~Nmg\nequipoise/NgV\nequipped/~JVtTUr\nequipping/~V6Nr\nequirectangular/J\nequitable/~Ji\nequitably/Ryi\nequitation/Ng\nequity/~NSgi\nequiv/N\nequivalence/~NgSV\nequivalency/NSg\nequivalent/~JYNgSV\nequivocal/JYNU\nequivocalness/Nmg\nequivocate/VGdSnX\nequivocation/Nmg\nequivocator/NSg\ner/VNe\nera/~NSg\neradicable/Ji\neradicate/~VdSGn\neradication/~Ng\neradicator/NgS\nerase/~Vd>GSNBZ\neraser/NgS\nerasure/~NSg\nerbium/Nmg\nere/~PCN\nerect/~JYpVSGd\nerectile/J\nerection/~NSg\nerectness/Nmg\nerector/NgS\nerelong/\neremite/NgS\nerg/~NSgV\nergo/~CN\nergonomic/~JSQ\nergonomics/~Ng\nergosterol/Ng\nergot/~Ng\nermine/~NSgJV\nerode/~VdSG\nerodible/J\nerogenous/J\nerosion/~Nmg\nerosive/J\nerotic/~JNS\nerotica/~Ng\nerotically/Ry\neroticism/Nmg\nerr/~VGSd\nerrand/NSgV\nerrant/JNi\nerrata/~NSg\nerratic/~JNQ\nerratum/Ng\nerroneous/~JY\nerror/~NSgVdG\nersatz/JNgS\nerst/J\nerstwhile/~J\neruct/VSdG\neructation/NSg\nerudite/JYNn\nerudition/Ng\nerupt/VSdGv\neruption/~NgS\nerysipelas/Ng\nerythrocyte/NSg\nerythromycin/Nm\nescalade/NSgVdG\nescalate/~VdSGen\nescalation/~N0wge\nescalations/N9\nescalator/~NgSV\nescalatory/J\nescallop/NSgVGd\nescalope/NS\nescapade/NgS\nescape/~VGdSNwgL\nescapee/NgS\nescapement/~NSg\nescapism/Nmg\nescapist/JNgS\nescapologist/NS\nescapology/N\nescargot/NgS\nescarole/NgS\nescarpment/~NgS\neschatological/~JQ\neschatology/~Nmg\neschew/VSdG\nescort/~NSgVdG\nescritoire/NgS\nescrow/NSgV\nescudo/NSg\nescutcheon/~NSg\nesky/NgS_           # Australian genericised brand name of a cooler\nesophageal/~J\nesophagi/N9\nesophagus/~N0g\nesoteric/~JNQ\nesp/~\nesp./~              # abbreviation for \"especially\"\nespadrille/NgS\nespalier/NgSVdG\nespecial/JY\nespionage/~Nmg\nesplanade/~NgS\nespousal/Ng\nespouse/VGdS\nespresso/NwgS\nesprit/~Ng\nespy/~VdGSN\nesquire/~NSgV\nessay/~NSgVd>GZ\nessayer/Ng\nessayist/~NSg\nessence/~NwSg\nessential/~JNgSi\nessentially/~R%\nestablish/~VSdGrEL\nestablishment/~N0grE\nestablishmentarianism/Nmg\nestablishments/~N9\nestate/~NSgJV\nesteem/~NmSgVdGE\nester/~NSg\nestimable/Ji\nestimate/~NgSVGdnX\nestimation/~Nmg\nestimator/~NSg\nestoppel/N\nestradiol/N\nestrange/VdSGL\nestrangement/NgS\nestrogen/~NwgS\nestrous/J\nestrus/NgS\nestuary/~NSg\net al./~\neta/~NSg\netc./~              # most dictionary only list it with the final dot\netch/Vd>GSNZz\netcher/Ng\netching/~NgV\neternal/~JYpN\neternalness/Nmg\neternity/~NwSg\nethane/Ng\nethanol/~Nmg\nether/~NmgV\nethereal/~JYN\nethic/~JNSg\nethical/~JYNU\nethics/~Nmg\nethmoid/NJ\nethnic/~JNSgQ\nethnicity/~NgS\nethnocentric/J\nethnocentrism/Nmg\nethnocultural/J\nethnographer/NSg\nethnographic/~JQ\nethnography/~Nmg\nethnological/JY\nethnologist/NSg\nethnology/~Nmg\nethnonationalism/Ng\nethological/J\nethologist/NgS\nethology/Nmg\nethos/~Nmg\nethyl/~Nmg\nethylene/~Nmg\netiolated/JV\netiologic/J\netiological/J\netiologies/N9!_₹\netiology/N0Sg\netiquette/~Ng\netude/NSg\netymological/~JY\netymologist/NSg\netymology/~NwSg\n# eu                # prefixes that are not also words in their own right don't belong in the dictionary\neucalypti/N9\neucalyptus/~N0gS\neuchre/NSgVdG\neuclidean/~J\neugenic/JSQ\neugenicist/NgS\neugenics/~Nmg\neukaryote/NSg\neukaryotic/~JN\neulogise/VGd>SZ!_₹\neulogist/NgS\neulogistic/J\neulogize/VGd>SZ\neulogizer/Ng\neulogy/~NSg\neunuch/~N0gV\neunuchs/~N9\neuphemism/~NwSg\neuphemistic/JQ\neuphonious/JY\neuphony/Nmg\neuphoria/Nmg\neuphoric/JNQ\neureka/~N\neuro/~NgS\neuropium/Nmg\neutectic/~JN\neuthanasia/~Nmg\neuthanize/VdSG\neuthenics/Ng\neutrophication/N\nevacuate/~VdSGXn\nevacuation/~NwgS\nevacuee/NgS\nevade/~Vd>SGZ\nevader/Ng\neval/NSgVdG\nevalled/VtT!@_₹\nevalling/V6!@_₹\nevaluate/~VGdSrnvX\nevaluation/~NwSgr\nevaluative/J\nevaluator/NS\nevanescence/Nmg\nevanescent/J\nevangelic/JN\nevangelical/~JYNSg\nevangelicalism/Nmg\nevangelise/VGdS!_₹\nevangelism/~Nmg\nevangelist/~NgS\nevangelistic/J\nevangelize/VGdS\nevaporate/VGdSn\nevaporation/~Ng\nevaporative/J\nevaporator/NSg\nevasion/~NSg\nevasive/JYp\nevasiveness/Ng\neve/~NSgr\neven/~JY^>pVdGSRNgz\neven-numbered/J\nevenhanded/JY\nevening/~NwgSV\nevenness/NgU\nevensong/Ng\nevent/~NSgV\neventful/JYU\neventfulness/Nmg\neventide/Ng\neventual/~JY\neventuality/NSg\neventuate/VGdS\never/~RJ\never-present/J\neverglade/NSg\nevergreen/~JNSgV\neverlasting/~JYNgS\nevermore/~\nevery/~Dq\neverybody/~Ig\neveryday/~JN\neveryone/~Ig\neveryplace/\neverything/~IVg\neverywhere/~RNm\nevict/VSdG\neviction/~NwgS\nevidence/~NmgSVGd\nevident/~JY\nevidential/Nwg      # used in linguistics as a count noun; e.g. \"a system of evidentials\"\nevil/~J>Y^pNmgS\nevildoer/NSg\nevildoing/Nmg\neviller/Jc\nevillest/Ju\nevilness/Nmg\nevince/VdSG\neviscerate/VdSGn\nevisceration/Nmg\nevocation/NgS\nevocative/~JY\nevoke/~VdSG\nevolution/~NwgS\nevolutionary/~J\nevolutionist/NSg\nevolve/~VdSG\newe/~NSg>Z\newer/Ng\nex/~NgSVJ(\nex-friend/NgS\nexabyte/NgS\nexacerbate/VGdSn\nexacerbation/Nwg\nexact/~JY^>pVbSdG\nexacting/JYV6\nexaction/Ng\nexactitude/Nmg\nexactness/Nmgi\nexaggerate/VdSGJXn\nexaggerated/~JYVtT\nexaggeration/~NmgS\nexaggerator/NgS\nexajoule/NS\nexalt/VSdG\nexaltation/NwgS\nexam/~NgSV\nexamination/~NwgSr\nexamine/~VGdSNr\nexaminer/~NgS\nexample/~NgSVGd\nexampled/VU\nexasperate/VdSGJn\nexasperated/~VJY\nexasperating/VJY\nexasperation/Ng\nexcavate/VGdSNnX\nexcavation/~Ng\nexcavator/NSg\nexceed/~VGSd\nexceeding/~V6JYN\nexcel/~VS\nexcelled/~VtT\nexcellence/~Ng\nexcellency/~NSg\nexcellent/~JY\nexcelling/V6\nexcelsior/~JNg\nexcept/~VGSdPC\nexception/~NwSgB\nexceptionable/JU\nexceptional/~JYNU\nexceptionalism/Nmg\nexcerpt/~NgSVdG\nexcess/~NgSJVv\nexcessive/~JY\nexchange/~NSgVdG>\nexchangeable/JN\nexchequer/~NSgV\nexcise/~NSgVdGXn\nexcision/~Ng\nexcitability/Nmg\nexcitably/Ry\nexcitation/~Nmg\nexcite/~Vd>SGBLZ\nexcited/~JYVtT\nexcitement/~NSg\nexciter/Ng\nexciting/~V6JYN\nexciton/N\nexcl/P\nexclaim/VdGSN\nexclamation/~NSg\nexclamatory/J\nexclave/~NgS\nexclude/~VGdS\nexclusion/~NgS\nexclusionary/J\nexclusive/~JYpNgS\nexclusiveness/Nmg\nexclusivity/~Nmg\nexcommunicate/JNSVGdnX\nexcommunication/~Ng\nexcoriate/VdSGnX\nexcoriation/Ng\nexcrement/Nmg\nexcremental/J\nexcrescence/NgS\nexcrescent/NJ\nexcreta/Ng\nexcrete/VGdSXn\nexcretion/~NgS\nexcretory/JN\nexcruciating/JY\nexculpate/VdSGn\nexculpation/Ng\nexculpatory/J\nexcursion/~NgSV\nexcursionist/NgS\nexcursive/JYp\nexcursiveness/Ng\nexcusable/Ji\nexcusably/Ryi\nexcuse/~VdGSNgB\nexcused/~VtTU\nexec/~NgSV\nexecrable/J\nexecrably/Ry\nexecrate/VdSGn\nexecration/Ng\nexecutable/JNgS\nexecute/~VGdSBXnv\nexecution/~NwgS>Z\nexecutioner/~NgS\nexecutive/~JNSg\nexecutor/~NgS\nexecutrices/N9\nexecutrix/N0g\nexegeses/N9\nexegesis/~N0g\nexegetic/J\nexegetical/~J\nexemplar/NSgJ\nexemplary/~JN\nexemplification/Nmg\nexemplify/~VGdSXn\nexempt/~JNSVGd\nexemption/~NSg\nexercise/~NwSgVd>GZ\nexerciser/Ng\nexert/~VSdG\nexertion/NwgS\nexeunt/NV\nexfoliate/VGdSn\nexhalation/NwgS\nexhale/VdGSN\nexhaust/~VGdSNgJv\nexhaustible/Ji\nexhaustion/~Ng\nexhaustive/~JYp\nexhaustiveness/Ng\nexhibit/~VGdSNg\nexhibition/~NgS\nexhibitionism/Nmg\nexhibitionist/NgSJ\nexhibitor/NSg\nexhilarate/VdSGn\nexhilaration/Ng\nexhort/VSdG\nexhortation/~NgS\nexhumation/NgS\nexhume/VdSG\nexigence/NwgS\nexigency/NSg\nexigent/JN\nexiguity/Ng\nexiguous/J\nexile/~NSgVdG\nexilic/J\nexist/~VSdG\nexistence/~NgS\nexistent/~JN\nexistential/~JYN\nexistentialism/Ng\nexistentialist/~NgSJ\nexit/~NgSVdG\nexobiology/Ng\nexodus/~NgSV\nexogenous/~J\nexon/NgS\nexonerate/VGdSJn\nexoneration/Ng\nexoplanet/~NgS\nexorbitance/Ng\nexorbitant/~JY\nexorcise/VdSG\nexorcism/NSg\nexorcist/~NSg\nexoskeleton/~NSg\nexosphere/NSg\nexothermic/J\nexotic/~JNSg\nexotica/NQ\nexoticism/Ng\nexp/~\nexpand/~VGSdB\nexpandability/Nmg\nexpander/NgS\nexpanse/~NgSXnv\nexpansible/J\nexpansion/~Nmg\nexpansionary/J\nexpansionism/Nmg\nexpansionist/~JNgS\nexpansive/~JYp\nexpansiveness/Nmg\nexpat/NgS\nexpatiate/VGdSn\nexpatiation/Ng\nexpatriate/~JNSgVdGn\nexpatriation/Ng\nexpect/~VGSd\nexpectancy/~Nmg\nexpectant/JYN\nexpectation/~NwSg\nexpected/JYpNU\nexpectedness/NgU\nexpectorant/NSgJ\nexpectorate/VdSGn\nexpectoration/Ng\nexpedience/N0gi\nexpediences/N9\nexpediencies/N9\nexpediency/N0gi\nexpedient/JYNSg\nexpedite/Vd>SGJZnX\nexpediter/Ng\nexpedition/~NwSgV\nexpeditionary/~JN\nexpeditious/JYp\nexpeditiousness/Nmg\nexpel/~VS\nexpelled/~VtT\nexpelling/~V6N\nexpend/VGSdB\nexpendable/~JNSg\nexpenditure/~NwSg\nexpense/~NwgSV\nexpensive/~JYpi\nexpensiveness/Nmgi\nexperience/~Nw0gVd\nexperiences/~N9Vh\nexperiencing/~V6N\nexperiential/~J\nexperiment/~NgSVd>GZ\nexperimental/~JYN\nexperimentalist/NgS\nexperimentation/~Nmg\nexperimenter/NgS\nexpert/~JYpNSg\nexpertise/~NmgV\nexpertness/Nmg\nexpiate/VGdSn\nexpiation/Nmg\nexpiatory/J\nexpiration/~NwgS\nexpire/~VdSG\nexpired/~VtTJU\nexpiry/~Nmg\nexplain/~VdGSr\nexplainability/Nmg\nexplainable/J\nexplained/~VtTU\nexplainer/NgS\nexplanation/~NwgS\nexplanatory/~J\nexpletive/JNgS\nexplicable/Ji\nexplicate/VGdSJXn\nexplication/Ng\nexplicit/~JYpN\nexplicitness/Nmg\nexplode/~VGdS\nexploder/NgS\nexploit/~NgSVGd>ZB\nexploitability/Nmg\nexploitation/~Nmg\nexploitative/~J\nexploited/~VU\nexploiter/NgV\nexploration/~NwgS\nexploratory/~JN\nexplore/~VGd>SNZ\nexplored/~jU\nexplorer/~Ng\nexplosion/~NSg\nexplosive/~JYpNSgw\nexplosiveness/Nmg\nexpo/~NgS\nexponent/~NgS\nexponential/~JYNgS\nexponentiate/VGdSXn\nexport/~J>NwSgVGdBZ\nexportation/Ng\nexporter/~Ng\nexpose/~VdSGg\nexposed/~JVU\nexposition/~NwSg\nexpositor/NSg\nexpository/~J\nexpostulate/VGdSnX\nexpostulation/Ng\nexposure/~NgS\nexpound/VGd>SZ\nexpounder/Ng\nexpress/~JYNgSVGdv\nexpressed/~VtTJU\nexpressible/Ji\nexpression/~NwSg\nexpressionism/~Nmg\nexpressionist/~JNSg\nexpressionistic/J\nexpressionless/JY\nexpressive/~JYpN\nexpressiveness/Nmg\nexpressway/~NSg\nexpropriate/VGdSnX\nexpropriation/~Ng\nexpropriator/NSg\nexpulsion/~NgS\nexpunge/VGdS\nexpurgate/VdSGnX\nexpurgated/VJU\nexpurgation/Ng\nexquisite/~JYpN\nexquisiteness/Ng\next/~N\nextant/~J\nextemporaneous/JYp\nextemporaneousness/NmSg\nextempore/JN\nextemporisation/Ng!_₹\nextemporise/VGdS!_₹\nextemporization/Nmg\nextemporize/VGdS\nextend/~VGd>SNZB\nextender/NgS\nextensibility/N\nextensible/~J\nextension/~NSg\nextensional/J\nextensive/~JYp\nextensiveness/Nmg\nextent/~NSgJ\nextenuate/VdSGJn\nextenuation/Ng\nexterior/~JNgS\nexterminate/~VdSGXn\nextermination/~Ng\nexterminator/NgS\nexternal/~JYNgS\nexternalisation/NgS!_₹\nexternalise/VdSG!_₹\nexternalization/NSg\nexternalize/VdSG\nextinct/~JVGdSN\nextinction/~NwgS\nextinguish/~VGd>SZB\nextinguishable/Ji\nextinguisher/Ng\nextirpate/VGdSn\nextirpation/Ng\nextol/VS\nextolled/VtT\nextolling/V6\nextort/VSGdJ\nextortion/~Ng>Z\nextortionate/JY\nextortioner/Ng\nextortionist/NgS\nextra/~JNSg(\nextracellular/~J\nextract/~NgSVdGv\nextraction/~NwSg\nextractor/NgS\nextracurricular/~JNgS\nextradite/VGdSnBX\nextradition/~Ng\nextrajudicial/~J\nextralegal/J\nextramarital/J\nextramural/J\nextraneous/JY\nextraordinaire/JN\nextraordinarily/~Ry\nextraordinary/~JpN\nextrapolate/VGdSXn\nextrapolation/~Nwg\nextrasensory/J\nextraterrestrial/~JNgS\nextraterritorial/J\nextraterritoriality/Ng\nextravagance/~NwgS\nextravagant/~JY\nextravaganza/NgS\nextravehicular/J\nextrema/N9\nextreme/~JY^>pNgS\nextremeness/Nmg\nextremism/~Nmg\nextremist/~NgSJ\nextremity/~NSg\nextremum/N0Sg\nextricable/Ji\nextricate/VGdSn\nextrication/Nmg\nextrinsic/~JNQ\nextroversion/Ng\nextrovert/NSgJVd\nextrude/VGdS\nextrusion/NSg\nextrusive/JN\nexuberance/Ng\nexuberant/JY\nexudation/Ng\nexude/VdSG\nexult/VSdG\nexultant/JY\nexultation/Ng\nexurb/NSg\nexurban/J\nexurbanite/NSg\nexurbia/Ng\neye/~NSgVd\neye candy/Nmg\neyeball/NgSVGd\neyebrow/~NSgV\neyedropper/NSg\neyeful/NSgJ\neyeglass/NgS\neyeing/V\neyelash/NgS\neyeless/J\neyelet/NSgV\neyelid/~NSg\neyeliner/NwgS\neyeopener/NgS\neyeopening/J\neyepiece/NgS\neyesight/~Nmg\neyesore/NgS\neyestrain/Ng\neyeteeth/N9\neyetooth/N0g\neyewash/NgV\neyewear/Nmg\neyewitness/~NgSV\n#f/~N^>eirv          # N:noun ^:fest >:fer e:def i:inf r:ref v:five\nfMRI/N\nfa/~NgP\nfab/~JNgSV\nfable/~NSgVd\nfabric/~NwSgV\nfabricate/VdSGnX\nfabrication/~Nmg\nfabricator/NSg\nfabulous/~JY\nfacade/~NSg\nface/~NSVdGre\nface off/V\nface-off/NgS\nface's\nfacecloth/N0g\nfacecloths/N9\nfaceless/J\nfacelift/NgSVdG\nfacepalm/NSVdG\nfacet/~NSgVdG\nfacetious/JYp\nfacetiousness/Ng\nfacial/~JYNSg\nfacile/JY\nfacilitate/~VGdSn\nfacilitation/~Nmg\nfacilitator/NgS\nfacility/~NSg\nfacing/~JNSgV\nfacsimile/~NSgVd\nfacsimileing/V\nfact/~NgS\nfact check/NS\nfact-check/VSdG\nfact-checking/Ng\nfaction/~NSg\nfactional/~J\nfactionalism/Nmg\nfactious/J\nfactitious/J\nfactoid/NSg\nfactor/~NSVdGr\nfactor's\nfactorial/~NgSJ\nfactorisation/NwS!_₹\nfactorise/VGdS!_₹\nfactorization/~NwS\nfactorize/VGdS\nfactory/~NSgJ\nfactotum/NSg\nfactual/~JYN\nfactuality/Ng\nfaculty/~NSg\nfad/~NSgGd\nfaddish/Jp\nfaddist/NgS\nfaddy/Jp\nfade/~JNgSV\nfading/~VNU\nfaecal/J!_₹\nfaeces/Ng!_₹\nfaerie/~NSg\nfaff/NSVdG\nfag/NSgV\nfagged/VtT\nfagging/V6N\nfaggot/NSgV\nfagot/NSgVG\nfaience/Ng\nfail/~VdGSNJz\nfail over/V/\nfail-safe/NgSJ\nfailing/~VNgP\nfaille/Ng\nfailure/~NwSg\nfain/J^>V\nfaint/~JY^>pNSgVdG\nfainthearted/J\nfaintness/Ng\nfair/~JY^>pNgSVGz\nfairground/~NgS\nfairing/NgV\nfairness/~NmgU\nfairway/NSg\nfairy/~NSgJ\nfairyland/NSgJ\nfaith/~N0w☁g\nfaithful/~JYpN0U\nfaithful's\nfaithfulness/~NmgU\nfaithfuls/N9\nfaithless/JYp\nfaithlessness/Nmg\nfaiths/~N9\nfajita/N0Sg\nfajitas/N9g\nfake/~J>NgSVGdZ\nfaker/NgJ\nfakir/~NSg\nfalcon/~NSgV>Z\nfalconer/~Ng\nfalconry/Nmg\nfall/~VbGSNwg\nfall back/V/\nfallacious/JY\nfallacy/~NSg\nfallback/NgSJV\nfallen/VTJ\nfallibility/Nmgi\nfallible/Jp\nfallibleness/Nmg\nfallibly/Ryi\nfalloff/NSg\nfallout/~Nmg\nfallow/NSgJVdG\nfalse/~JY^>pVN\nfalse positive/NgS\nfalsehood/~NwSg\nfalseness/Nmg\nfalsetto/NSgV\nfalsie/NSg\nfalsifiable/J\nfalsification/~NwgS\nfalsifier/Ng\nfalsify/Vd>SGZnX\nfalsity/NSg\nfalter/NSgVGdz\nfaltering/JYVN\nfame/~NwVd\nfame's\nfamilial/~J\nfamiliar/~JYNgS\nfamiliarisation/Nmg!_₹\nfamiliarise/VGdS!_₹\nfamiliarity/~NgU\nfamiliarization/Nmg\nfamiliarize/VGdS\nfamily/~NwSgJ\nfamine/~NwSg\nfamish/VdSG\nfamous/~JYVi\nfan/~NSgV\nfanatic/~JNSg\nfanatical/JY\nfanaticism/Nmg\nfanboy/NSgVdG\nfanciable/J\nfancier/NgJ\nfanciful/~JYp\nfancifulness/Nmg\nfancily/Ry\nfanciness/Nmg\nfancy/~NSgJ^>pVdGZU\nfancywork/Ng\nfandango/~NgSV\nfandom/~N\nfanfare/~NwSgV\nfang/~NgSVd\nfanlight/NSg\nfanmade/J\nfanned/VtT\nfanning/~V6N\nfanny/~NSg\nfantail/NgS\nfantasia/~NSg\nfantasise/VGdS!_₹\nfantasist/NS\nfantasize/VGdS\nfantastic/~JN\nfantastical/~JYN\nfantasy/~NwSgVdG\nfanzine/~NgS\nfar/~JVN\nfar right/NgS\nfar-right/J\nfarad/NSg\nfaradize/VdG\nfaraway/~JN\nfarce/~NwSgV\nfarcical/JY\nfare/~NwgSVGd\nfarewell/~NSgJV\nfarina/~Ng\nfarinaceous/J\nfarm/~NgSVd>GZz\nfarmer/~NgS\nfarmhand/NSg\nfarmhouse/~NSg\nfarming/~NmgJV6\nfarmland/~NwgS\nfarmstead/~NgS\nfarmyard/NgS\nfaro/Ng\nfarrago/N0g\nfarragoes/N9\nfarrier/NgSV\nfarrow/NSgVdGJ\nfarseeing/J\nfarsighted/Jp\nfarsightedness/Ng\nfart/VdGSNgx\nfarther/~JcV\nfarthermost/J\nfarthest/~Ju\nfarthing/NSg\nfascia/~NSg\nfascicle/NSg\nfascinate/VGdSnX\nfascinating/~JYV6\nfascination/~Ng\nfascism/~Nmg\nfascist/~JNgS\nfascistic/J\nfashion/~NwgSVGd>ZB\nfashionable/~JNU\nfashionably/RyU\nfashioner/Ng\nfashionista/NgS\nfast/~J^>pNgSVdGRy\nfast track/NgSVdG\nfastback/NSg\nfastball/NSg\nfasten/VGdSUr\nfastener/NSg\nfastening/VSNg\nfastidious/JYp\nfastidiousness/Ng\nfastness/NgS\nfat/~JpNwSgVGd\nfatal/~JYN\nfatalism/~Ng\nfatalist/NSg\nfatalistic/JQ\nfatality/~NSg\nfatback/Ng\nfate/~NgSV\nfateful/~JYp\nfatefulness/Ng\nfathead/NgSd\nfather/~NSgVGd\nfatherhood/Ng\nfatherland/~NgS\nfatherless/J\nfatherly/JR\nfathom/NSgVdGB\nfathomable/JU\nfathomless/J\nfatigue/~NgSVdG\nfatigues/NgV\nfatness/Ng\nfatso/NS\nfatten/VSdG\nfatter/Jc\nfattest/Ju\nfattiness/Nmg\nfatty/~J>^pNSg\nfatuity/Ng\nfatuous/JYp\nfatuousness/Ng\nfatwa/~NSgV\nfaucet/NSg\nfault/~NSgVdGe\nfaultfinder/NSg\nfaultfinding/NgJ\nfaultily/Ry\nfaultiness/Ng\nfaultless/JYp\nfaultlessness/Ng\nfaulty/~J>^p\nfaun/NgS\nfauna/~NwSg\nfauvism/Ng\nfauvist/JNSg\nfaux/~J\nfava bean/NgS\nfave/JNSV\nfavicon/~NSg\nfavor/~NwSgVdGE<\nfavorability/NgU<\nfavorable/~JU<\nfavorably/~RyU<\nfavorite/~JNSgV<\nfavoritism/Nmg<\nfavour/NwSgVdGE!@_₹\nfavourability/NgU!@_₹\nfavourable/JNU!@_₹\nfavourably/RyU!@_₹\nfavourite/JNgSV!@_₹\nfavouritism/Nmg!@_₹\nfawn/NgSJ>VdGZ\nfawner/NgS\nfax/~NgSVGd\nfay/~V>SJ^Ng\nfayre/JN!@_₹\nfaze/VGdS\nfazed/JVtTU\nfealty/Nmg\nfear/~NwgSVdG        # removed 5 adjective flag since it's rare and dialectal\nfearful/~JYp\nfearfulness/Nmg\nfearless/~JYp\nfearlessness/Nmg\nfearmonger/NgSVdG\nfearsome/~J\nfeasibility/~Nmg\nfeasible/~JiU\nfeasibly/Ry\nfeast/~NSgVd>GZ\nfeaster/NgS\nfeat/~NgSJV\nfeather/~NSgVGd\nfeatherbedding/V6Ng\nfeatherbrained/J\nfeatherless/J\nfeatherweight/~NwgS\nfeathery/J^>N\nfeature/~NSgVdG\nfeature-length/J\nfeatureful/J\nfeatureless/J\nfeaturette/NgS\nfebrile/J\nfecal/~J\nfeces/~Ng\nfeckless/JYp\nfecund/J\nfecundate/VGdSn\nfecundation/Ng\nfecundity/Ng\nfed/~NSgV\nfederal/~JYNSg\nfederalisation/Ng!_₹\nfederalise/VGdS!_₹\nfederalism/~Ng\nfederalist/~NgSJ\nfederalization/Ng\nfederalize/VGdS\nfederate/JNSVdGWXn\nfederation/~NgJW\nfedora/NSg\nfee/~NSgV\nfeeble/~J^>pV\nfeebleness/Nmg\nfeebly/Ry\nfeed/~V>GSNgZz\nfeedback/~NmgV^\nfeedbag/NSg\nfeeder/~Ng\nfeeding/~VNg\nfeedlot/NSg\nfeedstock/Ng\nfeel/~V>GSNgIZz\nfeeler/Ng\nfeelgood/J\nfeeling/~JYNwSgV\nfeet/~9\nfeign/VSdG\nfeigned/JVU\nfeint/NSgVdGJ\nfeisty/J^>\nfeldspar/~Ng\nfelicitate/VGdSJnX\nfelicitation/Ng\nfelicitous/JY\nfelicity/~NSgi\nfeline/~JNSg\nfell/~Vtd>GSNgJ^Z\nfella/NS\nfellatio/Ng\nfellow/~NSg\nfellowman/Ng\nfellowmen/9\nfellowship/~NwgSV\nfelon/JNSg\nfelonious/J\nfelony/~NSg\nfelt/~NwgSVtTdGJ\nfem/~NJ\nfemale/~JpNSg\nfemaleness/Ng\nfeminine/~JYNSg\nfemininity/~Nmg\nfeminise/VdSG!_₹\nfeminism/~Nmg\nfeminist/~JNSg\nfeminize/VdSG\nfemme/NgS\nfemoral/~J\nfemur/~NSg\nfen/~NSg\nfence/~NSgVd>GZ\nfencer/~NgS\nfencing/~VNmg\nfend/~Vd>GSNeZ\nfender/~NgVe\nfenestration/Ng\nfennel/Nmg\nfentanyl/Nmg\nferal/~JN\nferment/~VSNgWe\nfermentation/~NwSg\nfermented/~V6J^\nfermenting/V6\nfermion/NgS\nfermium/Nmg\nfern/~NgS\nferny/J>^\nferocious/~JYp\nferociousness/Nmg\nferocity/Nmg\nferret/~NSgVGd\nferric/J\nferromagnetic/J\nferromagnetism/N\nferrous/~J\nferrule/NgSV\nferry/~VdGSNg\nferryboat/NSg\nferryman/Ng\nferrymen/9\nfertile/~Ji\nfertilisation/Ng!_₹\nfertilise/Vd>SGZ!_₹\nfertilised/VU!_₹\nfertiliser/Ng!_₹\nfertility/~Ngi\nfertilization/~Ng\nfertilize/Vd>SGZ\nfertilized/~VU\nfertilizer/~Ng\nferule/NSgV\nfervency/Ng\nfervent/~JY\nfervid/JY\nfervor/Ng\nfervour/Ng!@_₹\nfess/~VGdSNJWK\nfest/~NgS>Zv\nfestal/J\nfester/NgVGd\nfestival/~JNSg\nfestive/~JYp\nfestiveness/Nmg\nfestivity/NSg\nfestoon/NgSVGd\nfeta/Ng\nfetal/~J\nfetch/~Vd>GSNZ\nfetcher/Ng\nfetching/JYVN\nfete/NgSVGd\nfetid/JpN\nfetidness/Ng\nfetish/~NgS\nfetishism/~Ng\nfetishist/NSg\nfetishistic/J\nfetishization/Ng\nfetishize/VdSG\nfetlock/~NgS\nfetter/NSVGdU\nfetter's\nfettle/NgSVdG\nfettuccine/Ng\nfetus/~NgS\nfeud/~NgSVdG\nfeudal/~J\nfeudalism/~Ng\nfeudalistic/J\nfever/~NSgVd\nfeverish/JYp\nfeverishness/Ng\nfew/~IDq^pg\nfewer/Dqc\nfewness/Ng\nfey/~JN\nfez/~Ng\nfezzes/N\nff/~V\nfiance/NgVe\nfiancee/NgS\nfiances/N\nfiasco/~Ng\nfiascoes/N0\nfiat/~N9gSV\nfib/NSgV>Z\nfibbed/VtT\nfibber/NSg\nfibbing/V6N\nfiber/~NwgS\nfiberboard/Nmg\nfiberfill/Ng\nfiberglass/~NmgV\nfibre/NwSg!@_₹\nfibreboard/Nmg!@_₹\nfibrefill/Ng!@_₹\nfibreglass/NmgVb!@_₹\nfibril/NSg\nfibrillate/VGdSn\nfibrillation/~Nmg\nfibrin/NgV\nfibroid/N\nfibrosis/~Ng\nfibrous/~J\nfibula/~N0g\nfibulae/N9\nfibular/J\nfiche/NSg\nfichu/NSg\nfickle/J^>pV\nfickleness/Ng\nfiction/~NmgS\nfictional/~JY\nfictionalisation/NwSg!_₹\nfictionalise/VdSG!_₹\nfictionalization/NSg\nfictionalize/VdSG\nfictitious/~JY\nfictive/JN\nficus/Ng\nfiddle/~NSgVd>GZ\nfiddler/~NgS\nfiddlesticks/N\nfiddly/J^>\nfidelity/~Ngi\nfidget/VGdSNg\nfidgety/J\nfiduciary/~JNSg\nfie/\nfief/~NgS\nfiefdom/NgS\nfield/~NSgV>iZ\nfielded/~VtT\nfielder/~Ngi\nfielding/~V6N\nfieldsman/N\nfieldsmen/9\nfieldwork/~Ng>Z\nfieldworker/Ng\nfiend/~NSgV\nfiendish/JY\nfierce/~J>Y^p\nfierceness/Ng\nfieriness/Ng\nfiery/~J>^p\nfiesta/~NSgV\nfife/~NgSV>Z\nfifer/Ng\nfifteen/~NgSH\nfifteenth/~JNg\nfifteenths/N\nfifth/~JYNgV\nfifths/~N\nfiftieth/~JNg\nfiftieths/N\nfifty/~NSgH\nfig/~NSgVL\nfight/~V>GSNgZ\nfight back/V/\nfightback/N\nfighter/~NgSi\nfighting/~JVNgi\nfigment/NgS\nfiguration/NgW\nfigurative/~JY\nfigure/~NSVGdWE\nfigure's\nfigurehead/~NSg\nfigurine/NgS\nfilament/~NgS\nfilamentous/J\nfilbert/NgS\nfilch/VdGSN\nfile/~NSVGderK\nfile sharing/Nmg\nfile size/NgS\nfile's/Ke\nfilename/~NS\nfiler/NSge\nfilet/NV\nfiletype/NSgVGd\nfilial/~J\nfilibuster/NgSVd>GZ\nfilibusterer/Ng\nfiligree/NSgVd\nfiligreeing/V6\nfiling's\nfilings/~N\nfill/~VdGSNri\nfill's\nfillable/J\nfilled/~JVtTU\nfiller/~NgS\nfillet/NgSVdG\nfilling/~V6SJNwg\nfillip/NgSVdG\nfilly/~NSg\nfilm/~NwgSVdG\nfilminess/NgM\nfilmmaker/~NSg\nfilmmaking/NgM\nfilmstrip/NgS\nfilmy/J^>p\nfilo/N\nfilter/~NgSVd>GBZ\nfiltered/~JVU\nfilterer/Ng\nfilth/~Ng\nfilthily/Ry\nfilthiness/Ng\nfilthy/~J^>pV\nfiltrate/NSVGdin\nfiltrate's\nfiltration/~NwSgi\nfin/~NSgV>\nfinagle/Vd>SGZ\nfinagler/Ng\nfinal/~NSgJYV\nfinale/~NgS\nfinalisation/Nmg!_₹\nfinalise/VdSG!_₹\nfinalist/~NSg\nfinality/Ng\nfinalization/Nmg\nfinalize/~VdSG\nfinance/~NwSVdGr\nfinance's\nfinancial/~JY\nfinancialization/Ng\nfinancialize/VdSG\nfinancials/9\nfinancier/~NgSV\nfinancing/~NgV6\nfinch/~NgSV\nfind/~V>GSNgzZ\nfinder/~Ng\nfinding/~NgV6\nfindings/~Ng\nfine/~J^NSVGderW\nfine-tune/VSdG\nfine's/W\nfinely/~Ry\nfineness/Ng\nfinery/Ngr\nfinespun/J\nfinesse/~NSgVdG\nfinger/~NgSVdGz\nfingerboard/NSg\nfingering/NgV\nfingerling/NSg\nfingermark/NS\nfingernail/NSg\nfingerprint/NSgVGd\nfingertip/NgSV\nfinial/NgS\nfinical/J\nfinickiness/Ng\nfinicky/J>^p\nfinis/NgS\nfinish/~NSVdGr\nfinish's\nfinished/~JVtTU\nfinisher/~NgS\nfinite/~JYNi\nfink/~NgSVdG\nfinless/J\nfinned/~JVtT\nfinny/J\nfintech/Ng\nfir/~NSgGd>ZzH\nfirable/J\nfire/~NwgSJV\nfirearm/~NSg\nfireball/~NgSJV\nfirebird/~NSg\nfirebomb/NgSVdGz\nfirebox/~NgS\nfirebrand/NSg\nfirebreak/NSg\nfirebrick/NSg\nfirebug/NSg\nfirecracker/NSg\nfiredamp/Ng\nfirefight/NgSV>GZ\nfirefighter/~Ng\nfirefighting/~Ng\nfirefly/~NSg\nfireguard/NS\nfirehouse/~NSg\nfirelight/Ng>Z\nfireman/~N0g\nfiremen/~N9\nfireplace/~NSg\nfireplug/NgS\nfirepower/~Nmg\nfireproof/JVdSG\nfirer/Ng\nfirescreen/NS\nfireside/NgS\nfirestorm/NgS\nfiretrap/NgS\nfiretruck/NgS\nfirewall/~NgSV\nfirewater/Ng\nfirewood/~Nmg\nfirework/NSg\nfirm/~NgSJY^>pVdG\nfirmament/NSg\nfirmness/Nmg\nfirmware/~Nmg\nfirst/~JYNSg\nfirst-hand/R\nfirst person/Ng\nfirst-person/J\nfirst time/NgS\nfirst-time/J\nfirstborn/~NSgJ\nfirsthand/~JR\nfirth/~Ng\nfirths/N\nfiscal/~JYNgS\nfish/~Nw09gSVd>GZ   # singular and plural, also has a plural in -s\nfishbowl/~NSg\nfishcake/NSg\nfisher/~Ng\nfisherman/~Ng\nfishermen/~9\nfishery/~NSg\nfisheye/NSg\nfishhook/NSgV\nfishily/Ry\nfishiness/Nmg\nfishing/~NgV\nfishmonger/NgS\nfishnet/NSg\nfishpond/NgS\nfishtail/NSVdG\nfishwife/Ng\nfishwives/9\nfishy/J^>pN\nfissile/~J\nfission/~NmgVB\nfissure/~NSgV\nfist/~NgSV\nfistfight/NgSV\nfistful/NSg\nfisticuffs/Nmg\nfistula/NSg\nfistulous/Jg\nfit/~JVbtTSNgKr\nfitful/JYp\nfitfulness/Ng\nfitly/Ry\nfitment/NS\nfitness/~NmgU\nfitted/~VtTJNUr\nfitter/NgSJc\nfittest/JuV\nfitting/~V6SJYNg\nfive/~NgS>Z\nfix/~VGd>SNgZBz\nfix up/V/\nfixate/VGdSnvX\nfixation/~Ng\nfixative/NgSJ\nfixed/~VJY\nfixer/~Ng\nfixings/Ng\nfixity/Ng\nfixture/~NgSV\nfizz/NgSVdG\nfizzle/VdGSNg\nfizzy/J>^N\nfjord/~NSg\nfl/JdGz\nflab/Ng\nflabbergast/VGdSN\nflabbily/Ry\nflabbiness/Ng\nflabby/J>^p\nflaccid/JY\nflaccidity/Ng\nflack/VSNg\nflag/~NgSV\nflagella/~N\nflagellant/NSJ\nflagellate/VGdSJNn\nflagellation/Ng\nflagellum/Ng\nflagged/~VtTJ\nflagging/V6JNU\nflagman/Ng\nflagmen/9\nflagon/NgS\nflagpole/~NSgV\nflagrance/Ng\nflagrancy/Ng\nflagrant/JY\nflagship/~NSgV\nflagstaff/~NgS\nflagstone/NgS\nflail/NSgVGd\nflair/~NSgV\nflak/~Nmg\nflake/~NSgVdG\nflakiness/Nmg\nflaky/J^>p\nflamage/N\nflambe/JNgSV\nflambeed/VtT\nflambeing/V6\nflamboyance/Nmg\nflamboyancy/Nmg\nflamboyant/~JYN\nflame/~NSgJ>VdGzZ\nflamenco/~NgSV\nflameproof/JVdGS\nflamethrower/NSg\nflamingo/~NgSJ\nflamingoes/N9\nflammability/Ngi\nflammable/~JNSg\nflan/NgSV\nflange/NgSV\nflank/~VGd>SNgJZ\nflanker/NgV\nflannel/NSgJVGd\nflannelette/Nmg\nflannelled/J!@_₹\nflannelling/V!@_₹\nflap/~NgSV\nflapjack/NgS\nflapped/VtTJ\nflapper/NSg\nflapping/JNV6\nflappy/J\nflare/~NSgVdG\nflareup/NSg\nflash/~VGd>SNgJ^ZB\nflash point/NgS\nflashback/~NSgV\nflashbulb/NSg\nflashcard/NSg\nflashcube/NSg\nflasher/Ng\nflashgun/NSg\nflashily/Ry\nflashiness/Ng\nflashing/~NgV\nflashlight/NgSV\nflashy/J>^p\nflask/NSgV\nflat/~JYpNgSV\nflatbed/NSgJV\nflatboat/NSg\nflatbread/Nmg\nflatcar/NSg\nflatfeet/9\nflatfish/N09gS      # singular and plural, also has a plural in -s\nflatfoot/NSgVd\nflathead/~NSg\nflatiron/NSgJ\nflatland/Ng\nflatlet/NS\nflatline/NgSVdG\nflatmate/NS\nflatness/Ng\nflatted/VtT\nflatten/VSdG\nflatter/~Jc>VdGSNZ\nflatterer/Ng\nflattering/JYV6N\nflattery/Ng\nflattest/Ju\nflatting/NV6\nflattish/J\nflattop/NSg\nflatulence/Ng\nflatulent/J\nflatus/Ng\nflatware/Nmg\nflatworm/NSg\nflaunt/VdGSNg\nflaunting/V6JYN\nflautist/NSg!@_₹\nflavor/~NwgSVdGz<\nflavored/~JVtTU<\nflavorful/J<\nflavoring/NgV6<\nflavorless/J<\nflavorsome/J<\nflavour/NwSgVdGz!@_₹\nflavoured/JVtTU!@_₹\nflavourful/J!@_₹\nflavouring/NgV6!@_₹\nflavourless/J!@_₹\nflavoursome/J!@_₹\nflaw/~NgSVdG\nflawless/JYp\nflawlessness/Ng\nflax/~Ngn\nflay/VdGSN\nflea/~NgSV\nfleabag/NSg\nfleabite/NS\nfleapit/NS\nfleck/~NSgVGd\nfledged/~JVU\nfledgling/~JNgS\nflee/~VS\nfleece/~NgSVGd>Z\nfleecer/Ng\nfleeciness/Ng\nfleecy/J>^p\nfleeing/~V6N\nfleet/~NSgVGd>J^Yp\nfleetingly/Ryg\nfleetingness/Ng\nfleetness/Ng\nflesh/~NwgSVGdY\nfleshly/J^>\nfleshpot/NgS\nfleshy/~J>^\nflew/~VtNJ\nflex/~NgSVr\nflexed/V\nflexibility/~Ngi\nflexible/~JNi\nflexibly/Ryi\nflexing/VN\nflexion/N\nflextime/Ng\nflibbertigibbet/NSg\nflick/~NSgVGd>Z\nflicker/~NgVGd\nflier/JcNgV\nflight/~NwgSJV\nflightiness/Nmg\nflightless/~J\nflighty/J^>p\nflimflam/NSgV\nflimflammed/VtT\nflimflamming/V6\nflimsily/Ry\nflimsiness/Nmg\nflimsy/J^>pN\nflinch/NgSVGd\nfling/NgVG\nflint/~NwSgV\nflintlock/NSg\nflinty/J^>\nflip/~NgSVJ\nflippancy/Nmg\nflippant/JY\nflipped/~VtT\nflipper/NgSJc\nflippest/Ju\nflipping/~V6JN\nflippy/JNS\nflirt/NSgVGdJ\nflirtation/NgS\nflirtatious/JYp\nflirtatiousness/Ng\nflirty/J\nflit/NgSVJ\nflitted/VtT\nflitting/NV6J\nfloat/~Vd>GSNgZ\nfloater/Ng\nfloaty/NgSJ>^\nflock/~NSgVdG\nflocking/VNg\nfloe/NgS\nflog/VSN\nflogged/VtT\nflogger/NSg\nflogging/~NgSV6\nflood/~NSgVd>G\nfloodgate/NgS\nfloodlight/NgSVdG\nfloodlit/JV\nfloodplain/~NgS\nfloodwater/NgS\nfloor/~NSgVdG\nfloorboard/NgSV\nflooring/~NmgV\nfloorwalker/NSg\nfloozy/NSg\nflop/~VSNg\nflophouse/NgSV\nflopped/VtT\nfloppily/Ry\nfloppiness/Ng\nflopping/V6N\nfloppy/~J>^pNSg\nflora/~NwSg\nfloral/~JN\nflorescence/Ngi\nflorescent/Ji\nfloret/NSg\nflorid/JYp\nfloridness/Nmg\nflorin/~NSg\nflorist/NSg\nfloss/NgSVdG\nflossy/J>^\nflotation/NSg\nflotilla/~NgS\nflotsam/Nmg\nflounce/VdGSNg\nflouncy/J\nflounder/NgSVdG\nflour/~NSgVdG\nflourish/~VGdSNg\nfloury/J\nflout/Vd>GSNgZ\nflouter/Ng\nflow/~NgSVdG\nflowchart/NSg\nflower/~NSVdGe\nflower's\nflowerbed/NgS\nfloweriness/Ng\nflowering/~V6SNJ\nflowerless/J\nflowerpot/NgS\nflowery/J^>p\nflown/~VTJ\nflt/N\nflu/~Ng\nflub/NgSV\nflubbed/VtT\nflubbing/V6\nfluctuate/VGdSnX\nfluctuation/Ng\nflue/~NgSJ\nfluency/~Nmg\nfluent/~JYN\nfluff/~NwSgVdG\nfluffiness/Nmg\nfluffy/~J>^pN\nfluid/~NwSgJY\nfluidity/~Ng\nfluke/NSgV\nfluky/J>^\nflume/NSgV\nflummox/VdSG\nflung/~V\nflunk/VSdGg\nflunky/NSg\nfluoresce/VdSG\nfluorescence/~Ng\nfluorescent/~JN\nfluoridate/VGdSn\nfluoridation/~Ng\nfluoride/~NSg\nfluorine/~Ng\nfluorite/Ng\nfluorocarbon/NgS\nfluoroscope/NSgV\nfluoroscopic/J\nfluoxetine/N\nflurry/~NSgVGd\nflush/~NgSVd>GJ^\nfluster/VdGSNg\nflute/~NSgVdG\nfluting/VJNg\nflutist/NgS\nflutter/VdGSNg\nfluttery/J\nfluvial/~J\nflux/~NwgSVJi\nfluxed/VtT\nfluxing/V6\nfly/~NSgVGd>J^ZB\nflyaway/JN\nflyblown/J\nflyby/N0g\nflybys/N9\nflycatcher/~NgS\nflyer/NSgVJ!@_₹\nflying/~JVNg\nflyleaf/Ng\nflyleaves/N\nflyover/~NgS\nflypaper/NwSgV\nflypast/NS\nflysheet/NS\nflyspeck/NgSVGd\nflyswatter/NgS\nflytrap/NS\nflyway/NSg\nflyweight/~NwSg\nflywheel/~NgS\nfoal/~NgSVdG\nfoam/~NwgSVdG\nfoaminess/Nmg\nfoamy/J>^pN\nfob/NSgVJ\nfobbed/VtT\nfobbing/V6\nfocal/~JYN\nfocus/~Nw0SVdGr\nfocus's\nfocused/~JVU\nfodder/~NmSgV\nfoe/~JNSg\nfog/~NwSVe\nfog's\nfogbound/J\nfogey/NSg!@_₹\nfogged/VtTe\nfoggily/Ry\nfogginess/Nmg\nfogging/V6Ne\nfoggy/~J>^p\nfoghorn/NgSV\nfogy/NSg\nfogyish/J\nfoible/NSgJ\nfoil/~NwgSVdG\nfoist/VdGSNJ\nfol/~\nfold/~VGdSNrUB\nfold's\nfoldaway/JN\nfolder/~NSg\nfoldout/NgSJ\nfoliage/~Nmg\nfolic/J\nfolio/~NSgV\nfolk/~NgSJ\nfolklore/~Nmg\nfolkloric/~J\nfolklorist/~NgS\nfolksiness/Nmg\nfolksinger/NSg\nfolksinging/Nmg\nfolksy/J^>p\nfolktale/NgS\nfolkway/NgS\nfoll/J\nfollicle/~NgS\nfollow/~Vd>GSNZz\nfollower/~NgS\nfollowing/~JPNwgSV\nfollowup/NgS\nfolly/~NSgV\nfoment/VGdSN\nfomentation/Nmg\nfond/~JY^>pVN\nfondant/NgS\nfondle/VdGSN\nfondness/~Nmg\nfondue/NSgV\nfont/~NgSV\nfontanel/NgS\nfontanelle/NgS!@_₹\nfoo/N\nfoobar/N\nfood/~NgS\nfoodie/NSg\nfoodstuff/NSg\nfool/~NgSVdGJ\nfoolery/NSg\nfoolhardily/Ry\nfoolhardiness/Ng\nfoolhardy/J^>pN\nfoolish/~JYp\nfoolishness/Ng\nfoolproof/JV\nfoolscap/~Ng\nfoot/~NgSVd>GZz\nfootage/~Ng\nfootball/~NgSV>GZ\nfootballer/~Ng\nfootbridge/~NSg\nfootfall/NgS\nfoothill/~NgS\nfoothold/~NgS\nfootie/N\nfooting/~NgV\nfootless/J\nfootlights/N9g\nfootling/JVSNg\nfootlocker/NSg\nfootloose/J\nfootman/N0g\nfootmen/N9\nfootnote/~NgSVGd\nfootpath/~Ng\nfootpaths/~N\nfootplate/NSV\nfootprint/~NSg\nfootrace/NgS\nfootrest/NgS\nfootsie/NSg\nfootslogging/V\nfootsore/J\nfootstep/NgS\nfootstool/NSg\nfootwear/~Nmg\nfootwell/NgS\nfootwork/~Nmg\nfooty/NwgSJ\nfop/NSg\nfoppery/Nmg\nfoppish/Jp\nfoppishness/Nmg\nfor/~CPRH\nfora/~N9\nforage/~NSgVd>GZ\nforager/NgS\nforay/~NSgVdG\nforbade/~Vt\nforbear/VGSNg\nforbearance/Nmg\nforbid/~VbS\nforbidden/~JVT\nforbidding/~JYV6SN\nforbore/V\nforborne/V\nforce/~NwSgVdG\nforced/~VtTJU\nforceful/~JYp\nforcefulness/Nmg\nforceps/N09g\nforcible/~J\nforcibly/~Ry\nford/~NgSVdGB\nfore/~JNgS(\nforearm/~NSgVGd\nforebear/NgSV\nforebode/VGdSNz\nforeboding/NgJV\nforecast/~V>GdSNgZ\nforecaster/Ng\nforecastle/NgS\nforeclose/VdSG\nforeclosure/NgS\nforecourt/~NSg\nforedoom/NSVdG\nforefather/NgS\nforefeet/9\nforefinger/NSg\nforefoot/NgV\nforefront/~NSgV\nforegather/VGdS!@_₹\nforego/VG\nforegoes/Vh\nforegone/VTJ\nforeground/~NgSVGd\nforehand/~NgSJV\nforehead/~NgS\nforeign/~JpNZ\nforeigner/~Ng\nforeignness/Ng\nforeknew/V\nforeknow/VGS\nforeknowledge/Ng\nforeknown/VJ\nforeleg/NSg\nforelimb/NgS\nforelock/NgSV\nforeman/~Ng\nforemast/NgS\nforemen/9\nforemost/~J\nforename/NgSVd\nforenoon/NgS\nforensic/~JSgQ\nforensics/~Ng\nforeordain/VGSd\nforepart/NgS\nforepaw/NgS\nforeperson/NSg\nforeplay/NgV\nforequarter/NgS\nforerunner/~NgS\nforesail/NgS\nforesaw/V\nforesee/V>SBZ\nforeseeable/~JU\nforeseeing/V6N\nforeseen/VU\nforeseer/Ng\nforeshadow/VGdS\nforeshore/~NgS\nforeshorten/VdSG\nforesight/Nmgd\nforesightedness/Nmg\nforeskin/NgSV\nforest/~NSVGdre\nforest's\nforestall/VGdSN\nforestation/Ngre\nforester/~NgS\nforestland/Ng\nforestry/~Nmg\nforetaste/NSgVdG\nforetell/VGS\nforethought/NgJV\nforetold/VtT\nforever/~NgJ\nforevermore/\nforewarn/VdSG\nforewent/Vt\nforewoman/N0g\nforewomen/N9\nforeword/~NgS\nforex/Ng\nforfeit/~NSgVGdJ\nforfeiture/~NSg\nforgather/VSdG\nforgave/V\nforge/~NSgVd>GZvz\nforger/~Ng\nforgery/~NSg\nforget/~VbS\nforgetful/JYp\nforgetfulness/Ng\nforgettable/JU\nforgetting/~V6N\nforging/~V6Ng\nforgivable/JU\nforgive/~V>SGBZp\nforgiven/~V\nforgiveness/~Nmg\nforgiver/NgS\nforgiving/JV6NU\nforgo/~V>GZ\nforgoer/Ng\nforgoes/V\nforgone/V\nforgot/~Vt\nforgotten/~JVTNU\nfork/~NgSVdG\nforkful/NSg\nforklift/NgSV\nforlorn/JYNV\nform/~NwSVdGeriW\nform's\nformal/~JYNSg\nformaldehyde/Ng\nformalin/Nmg\nformalisation/NwSg!_₹\nformalise/VGdS!_₹\nformalism/~NwgS\nformalist/NgSJ\nformalities/N9\nformality/~N0gi\nformalization/Nmg\nformalize/VGdS\nformat/~NSgVv\nformation/~NwSgeWr\nformatted/~VtTJr\nformatter/NgS\nformatting/~NgV6\nformed/~VtTU\nformer/~JNgWir\nformerly/~R         # also an adverb of time\nformfitting/J\nformic/J\nformidable/~J\nformidably/Ry\nformless/JYp\nformlessness/Ng\nformula/~N0gS\nformulae/~N9\nformulaic/J\nformulate/~VdSGrnX\nformulated/~VtTU\nformulation/~NwSgr\nformulator/NSg\nformwork/Ng\nfornicate/JVGdSn\nfornication/Nmg\nfornicator/NgS\nforsake/VbGS\nforsaken/JVT\nforsook/Vt\nforsooth/\nforswear/VSG\nforswore/Vt\nforsworn/JVT\nforsythia/NSg\nfort/~NgSV\nforte/~NSgJ\nforth/R\nforthcoming/~JNgV\nforthright/JYpN\nforthrightness/Nmg\nforthwith/R\nfortieth/JN0g\nfortieths/N9\nfortification/~NwgS\nfortified/~VNJU\nfortifier/NgS\nfortify/~Vd>SGnZX\nfortissimo/N\nfortitude/~Nmg\nfortnight/~NgSY\nfortress/~NgSV\nfortuitous/JYp\nfortuitousness/Nmg\nfortuity/Nmg\nfortunate/~JYU\nfortune/~NgSV\nfortuneteller/NSg\nfortunetelling/NgV\nforty/~NSgJH\nforum/~NSg\nforward/~JY^>pVdGSNgZ\nforward-thinking/J\nforwarder/NgJ\nforwardness/Ng\nforwent/Vt\nfossa/~N\nfossil/~NSg\nfossilisation/Ng!_₹\nfossilise/VGdS!_₹\nfossilization/Ng\nfossilize/VGdS\nfoster/~JNSVGd\nfought/~V\nfoul/~JY^>pVdGSNg\nfoulard/Ng\nfoulmouthed/J\nfoulness/Ng\nfound/~VtTdGSNW\nfoundation/~NSg\nfoundational/~J\nfounded/~VtTJU\nfounder/~NgSVGd\nfoundling/NSg\nfoundry/~NSg\nfount/NSg\nfountain/~NSgV\nfountainhead/NgS\nfour/~NgSH\nfour-speed/NgS\nfourfold/JVN\nfourposter/NSg\nfourscore/Ng\nfoursome/NSg\nfoursquare/JN\nfourteen/~SgH\nfourteenth/~JN0g\nfourteenths/N9\nfourth/~JYNgV\nfourths/~N\nfowl/~NgSVdGJ\nfox/~NgSVGd\nfoxfire/Ng\nfoxglove/NSg\nfoxhole/NgSV\nfoxhound/NSg\nfoxhunt/NSVG\nfoxily/Ry\nfoxiness/Nmg\nfoxtrot/NgSV\nfoxtrotted/VtT\nfoxtrotting/V6\nfoxy/NJ>^p\nfoyer/~NSg\nfps/~N\nfr/JNV\nfracas/NgS\nfrack/VSdGJ\nfractal/~NSgJ\nfraction/~NSgVi\nfractional/~JYN\nfractious/JYp\nfractiousness/Ng\nfractoluminescence/Ng\nfractoluminescent/J\nfracture/~NgSVGd\nfrag/NSV\nfragile/~J>^YN\nfragility/NmgS\nfragment/~NgSVGd\nfragmentary/~Jg\nfragmentation/~Nmg\nfragrance/~NgSV\nfragrant/~JY\nfrail/~JY^>pNV\nfrailness/Nmg\nfrailty/NSg\nframe/~Vd>GSNgZ\nframe rate/NgS\nframed/~VU\nframer/Ng\nframework/~NSg\nfranc/~NSg\nfranchise/~NSVdGE\nfranchise's\nfranchisee/NSg\nfranchiser/NSg\nfrancium/Nmg\nfrancophone/~JN\nfrangibility/Nmg\nfrangible/JN\nfrank/~JY^>pNSgVdG\nfrankfurter/~NgS\nfrankincense/Ng\nfrankness/Ng\nfrantic/~JNQ\nfrappe/NSg\nfrat/NgS\nfraternal/~JYN\nfraternisation/Ng!_₹\nfraternise/VGd>SZ!_₹\nfraterniser/Ng!_₹\nfraternity/~NSgW\nfraternization/Ng\nfraternize/VGd>SZ\nfraternizer/Ng\nfratricidal/J\nfratricide/NwgS\nfraud/~NwSV\nfraud's\nfraudster/NS\nfraudulence/Nmg\nfraudulent/~JY\nfraught/NVJ\nfray/~VdGSNe\nfray's\nfrazzle/VGdSNg\nfreak/~NSgVdGJ\nfreakish/JYp\nfreakishness/Nmg\nfreaky/~J>^\nfreckle/NSgVdG\nfreckly/J\nfree/~JY^>VdSN\nfree-form/NJ\nfreeball/NgSVdG\nfreebase/NgSVGd\nfreebie/NSg\nfreebooter/NSg\nfreeborn/J\nfreedman/~Ng\nfreedmen/~9\nfreedom/~NwSg\nfreefall/Nmg\nfreehand/JV\nfreehold/~J>NgSVZ\nfreeholder/NgS\nfreeing/~V6NJ\nfreelance/~NSgJ>VdGZ\nfreelancer/NgS\nfreeload/VSd>GZ\nfreeloader/NgS\nfreeman/~N0g\nfreemasonry/~Nmg\nfreemen/N9\nfreephone/NV\nfreerun/NgS\nfreesia/NS\nfreestanding/J\nfreestone/NSg\nfreestyle/~NSgVdG\nfreethinker/NSg\nfreethinking/Nmg\nfreeware/~Nmg\nfreeway/~NgS\nfreewheel/NSVdG\nfreewill/JN\nfreezable/JN\nfreeze/~VGSNUr\nfreeze's\nfreezer/~NgS\nfreezing's\nfreight/~NgSVd>GJZ\nfreighter/~NgS\nfrench/~VdSG\nfrenemy/NgS\nfrenetic/JNQ\nfrenzied/JY\nfrenzy/~NSgJVd\nfreq/N\nfrequencies/~N\nfrequency/~Ngi\nfrequent/~JY^>VdSGZ\nfrequented/~VU\nfrequenter/NgJ\nfresco/~N0gV\nfrescoes/~N9\nfresh/~JY^>pNVnXZ\nfreshen/VGd>Z\nfreshener/Ng\nfreshet/NgS\nfreshman/~Ng\nfreshmen/~9\nfreshness/Ng\nfreshwater/~JNg\nfret/~VSNg\nfretful/JYp\nfretfulness/Ng\nfretsaw/NgSV\nfretted/VtTJ\nfretting/V6N\nfretwork/Nmg\nfriable/J\nfriar/~NSg\nfriary/~NSgJ\nfricassee/NSgVd\nfricasseeing/V6\nfricative/~NSgJ\nfriction/~NwSg\nfrictional/~J\nfrictionless/JY\nfridge/NSgV\nfriedcake/NgS\nfriend/~NSVGdYU\nfriend's\nfriendless/J\nfriendlies/~N9\nfriendliness/NmgU\nfriendly/~J^>pN0U\nfriendly's\nfriendship/~NwgS\nfrieze/~NSgV\nfrig/VSN\nfrigate/~NgS\nfrigged/VtT\nfrigging/V6NJ\nfright/~NSgVGdJXn\nfrighten/VdG\nfrightening/~JYV6\nfrightful/JYp\nfrightfulness/Nmg\nfrigid/JYp\nfrigidity/Nmg\nfrigidness/Nmg\nfrill/NSgVd\nfrilly/J^>\nfringe/~NSJVdGi\nfringe's\nfrippery/NSg\nfrisbee/NgS\nfrisk/JNSVdG\nfriskily/Ry\nfriskiness/Nmg\nfrisky/J^>p\nfrisson/NS\nfritter/NgSVdG\nfritz/~NgV\nfrivolity/NSg\nfrivolous/~JYp\nfrivolousness/Ng\nfrizz/VdGSNgY\nfrizzle/VGdSNg\nfrizzy/J^>N\nfro/~PN\nfrock/NSVeU\nfrock's\nfrog/~NgSV\nfrogging/NSV6\nfrogman/Ng\nfrogmarch/VGdSN\nfrogmen/9\nfrogspawn/N\nfrolic/JVSNg\nfrolicked/VtT\nfrolicker/NSg\nfrolicking/V6N\nfrolicsome/J\nfrom/~P\nfrond/NSg\nfront/~NSJVdGW\nfront-line/J\nfront man/Ng\nfront wheel/NgSJ\nfront's/J\nfrontage/~NgS\nfrontal/~JYN\nfrontbench/NS>Z\nfrontier/~NgSV\nfrontiersman/N0g\nfrontiersmen/N9\nfrontierswoman/N0\nfrontierswomen/N9\nfrontispiece/NgSV\nfrontline/NSg\nfrontside/J\nfrontward/JS\nfrosh/NgV\nfrost/~NwSVdGe\nfrost's\nfrostbit/Vt\nfrostbite/NmgSVG\nfrostbitten/JT\nfrostily/Ry\nfrostiness/Nmg\nfrosting/NSgV\nfrosty/J^>p\nfroth/NmgVdG\nfrothiness/Ng\nfroths/V\nfrothy/J^>pN\nfroufrou/NgJ\nfrown/NSgVdG\nfrowzily/Ry\nfrowziness/Ng\nfrowzy/J^>p\nfroze/~VrU\nfrozen/~JVUr\nfructify/VdSG\nfructose/~Ng\nfrugal/JY\nfrugality/Ng\nfruit/~NwSgVdG\nfruitcake/NwgS\nfruiterer/NS\nfruitful/~JYp\nfruitfulness/Ng\nfruitiness/Nmg\nfruition/~Nmg\nfruitless/JYp\nfruitlessness/Nmg\nfruity/J^>pN\nfrump/NSgV\nfrumpish/J\nfrumpy/J^>\nfrunk/NgS\nfrustrate/VGdSJnX\nfrustrating/~JYV6\nfrustration/~NwgS\nfrustum/NgS\nfry/~VGdSNg\nfryer/~NSg\nft/~NV\nftp/~JNOSVGZ\nfuchsia/NwgSJ\nfuck/~VGd>SNgZx\nfucker/NgSx\nfuckhead/NSgx\nfuckwit/NSgx\nfuddle/VdGSNg\nfudge/~NwSgVdG\nfuehrer/NgS\nfuel/~NwSVdGr\nfuel's\nfuelled/VtTr!@_₹\nfuelling/V6Nr!@_₹\nfug/NV\nfugal/J\nfuggy/J\nfugitive/~NgSJV\nfugue/~NSgV\nfuhrer/NSg\nfulcrum/NgS\nfulfil/VSL!_@₹\nfulfill/~VdGSL<@\nfulfilled/~VtTJU\nfulfilling/~JV6NU\nfulfillment/~Ng\nfulfilment/Ng!_₹\nfull/~J^>pNgSVdGZ\nfull on/JR\nfull-on/JR\nfull-scale/J\nfull screen/J\nfull-stack/J\nfull-time/JR\nfullback/~NgS\nfuller/~JNgV\nfullness/Nmg\nfulltext/NwgS\nfully/~R%           # removed obscure verb POS\nfulminate/VdGSNXn\nfulmination/Nmg\nfulsome/JYp\nfulsomeness/Nmg\nfum/VSN\nfumble/~Vd>GSNgZ\nfumbler/NgS\nfumbling/VNY\nfume/NgSVGd\nfumigant/NgS\nfumigate/VGdSn\nfumigation/NwSg\nfumigator/NSg\nfumy/J>^\nfun/~NmgJVU\nfunction/~NwgSVdG\nfunctional/~JYN\nfunctionalism/Nmg\nfunctionalist/NSJ\nfunctionality/~NwS\nfunctionary/NSg\nfunctor/~NgS\nfund/~NgSVdGr\nfundamental/~NSgJY\nfundamentalism/~Nmg\nfundamentalist/~NSg\nfunded/~VJU\nfunder/NgS\nfunding/~VNmg\nfundraise/VSdG\nfundraiser/~NgS\nfuneral/~NgSJ\nfunerary/~J\nfunereal/JY\nfunfair/NS\nfungal/~J\nfungi/~N9\nfungible/JNgS\nfungicidal/JN\nfungicide/~NwgS\nfungoid/JN\nfungous/J\nfungus/~Nm0g\nfunicular/~JNSg\nfunk/~NmgSVdG\nfunkiness/Nmg\nfunky/~J>^p\nfunnel/~NgSVdG\nfunnelled/VtTJ!@_₹\nfunnelling/V6N!@_₹\nfunner/Jc\nfunnest/Ju\nfunnily/Ry\nfunniness/Nmg\nfunny/~J^>pNSg\nfunnyman/N0g\nfunnymen/N9\nfur/~NwSgVCP\nfurbelow/NgV\nfurbish/VdSGr\nfurious/~JY\nfurl/VdGSU\nfurl's\nfurlong/~NSg\nfurlough/NgVGd\nfurloughs/NV\nfurn/NJ\nfurnace/~NSgV\nfurnish/NSVdGr\nfurnished/~VtTJU\nfurnishings/~N9g\nfurniture/~Nmg\nfuror/NSg\nfurore/NgS!_₹\nfurosemide/N\nfurred/VtTJ\nfurrier/NgJ\nfurriness/Ng\nfurring/V6Ng\nfurrow/NgSVdG\nfurry/~J^>pNZ\nfurther/~VSGdJc\nfurtherance/Nmg\nfurthermore/~J\nfurthermost/J\nfurthest/~Ju\nfurtive/JYp\nfurtiveness/Nmg\nfury/~NwSg\nfurze/Ng\nfuse/~NSVGderiW\nfuse's/r\nfusee/NSg\nfuselage/~NSg\nfusibility/Ng\nfusible/JN\nfusilier/NSg\nfusillade/NgSV\nfusion/~NwSgViWK\nfuss/NwgSVdG\nfussbudget/NgS\nfussily/Ry\nfussiness/Nmg\nfusspot/NSgV\nfussy/J^>p\nfustian/NgJ\nfustiness/Ng\nfusty/J^>p\nfut/~N\nfutile/~JY\nfutility/~Ng\nfuton/NSg\nfuture/~NgSJ\nfuturism/~Ng\nfuturist/~NgSJ\nfuturistic/~J\nfuturity/~NSg\nfuturologist/NgS\nfuturology/Nmg\nfutz/NSVdG\nfuzz/~NwgSVdG\nfuzzball/NS\nfuzzer/NSg\nfuzzily/Ry\nfuzziness/Ng\nfuzzy/~J^>pNS\nfwd/~JNV\nfwy/N\ng/~NSnXvB\ngab/~NSgV\ngabardine/NSg\ngabbed/VtT\ngabbiness/Ng\ngabbing/V6\ngabble/VdGSNg\ngabby/~J>^p\ngaberdine/NSg\ngabfest/NgS\ngable/~NSgd\ngad/~VSN\ngadabout/NSg\ngadded/VtT\ngadder/NSg\ngadding/V6N\ngadfly/~NSg\ngadget/~NSg\ngadgetry/Nmg\ngadolinium/Nmg\ngaff/~NgSVd>GZ\ngaffe/NSg\ngaffer/Ng\ngag/~NSgV\ngaga/~JN\ngagged/VtT\ngagging/V6N\ngaggle/NSgV\ngaiety/~Ng\ngaily/Ry\ngain/~VdGSNwPJr\ngain's\ngainer/NSg\ngainful/JY\ngainsaid/V\ngainsay/VG>SZ\ngainsayer/Ng\ngait/~NgSV>Z\ngaiter/NgV\ngal/~NSg\ngala/~JNgS\ngalactic/~J\ngalaxy/~NSgV\ngale/~VSNr\ngale's\ngalena/~Ng\ngall/~NgSVdG\ngallant/~JYNSgV\ngallantry/~Ng\ngallbladder/NgS\ngalleon/NSg\ngalleria/~NgS\ngallery/~NSgV\ngalley/~NSg\ngallimaufry/NSg\ngallium/~Nmg\ngallivant/VGSd\ngallon/~NSg\ngallop/NSgVdG\ngallows/~NgV\ngallstone/NgS\ngaloot/NSg\ngalore/JN\ngalosh/NgSV\ngalumph/VdG\ngalumphs/V\ngalvanic/JQ\ngalvanisation/Ng!_₹\ngalvanise/VdSG!_₹\ngalvanism/Nmg\ngalvanization/Ng\ngalvanize/VdSG\ngalvanometer/NgS\ngambit/~NSgV\ngamble/~NSgVd>GZ\ngambler/~Ng\ngambling/~VNmg\ngambol/VdGSNg\ngambolled/VtT!@_₹\ngambolling/V6N!@_₹\ngame/~NgSJY^pVGd\ngamechanger/NgS\ngamecock/NgS\ngamekeeper/NgS\ngameness/Ng\ngamepad/NgS\ngameplay/~Nmg\ngamer/~NSg\ngamesmanship/Nmg\ngamester/NgS\ngamete/NSg\ngametic/J\ngamey/J^S\ngamify/Vd\ngamin/NSg\ngamine/NSgJ\ngaminess/Nmg\ngaming/~VNg\ngamma/~NSg\ngammon/NgVJ\ngammy/JN\ngamut/NSg\ngamy/J>^p\ngander/~NSgV\ngang/~VdGSNg\ngangbusters/NgJ\ngangland/~Nmg\nganglia/~N\ngangling/JN\nganglion/~Ng\nganglionic/J\ngangplank/NSg\ngangrene/NmSgVdG\ngangrenous/J\ngangsta/~NSJ\ngangster/~NSgVJ\ngangsterism/Nmg\ngangway/NgSV\nganja/~N\ngannet/NSgV\ngantlet/NgS\ngantry/~NSg\ngap/~NSgVGd\ngape/VSNg\ngapped/VtTJ\ngapping/V6N\ngar/~NSgVL\ngarage/~NSgVdG\ngarb/~NgSVdG\ngarbage/~NmgVJ\ngarbageman/N0\ngarbagemen/N9\ngarbagey/J\ngarbanzo/NSg\ngarble/VdGSN\ngarcon/NSg\ngarden/~NSgVGd>J\ngardener/~NgS\ngardenia/NgS\ngardening/~NgV\ngarfish/N09gS       # singular and plural, also has a plural in -s\ngargantuan/J\ngargle/VdGSNg\ngargoyle/NSg\ngarish/JYp\ngarishness/Ng\ngarland/~NgSVdG\ngarlic/~NmgV\ngarlicky/J\ngarment/~NgSV\ngarner/~NSVGd\ngarnet/~NSgJV\ngarnish/VGdSNgL\ngarnishee/NSgVd\ngarnisheeing/V6\ngarnishment/NSg\ngarret/~NSg\ngarrison/~NgSVdG\ngarrote/NgSVGd>Z\ngarroter/Ng\ngarrulity/Nmg\ngarrulous/JYp\ngarrulousness/Ng\ngarter/~NSgV\ngas/~NSVJe\ngas's\ngasbag/NSgV\ngaseous/~J\ngash/NgSJVdG\ngasholder/NS\ngasket/NSgV\ngaslight/NgSVdG\ngaslighter/NgS\ngasman/N0\ngasmen/N9\ngasohol/Ng\ngasoline/~Nmg       # Wiktionary says it's also an adjective but other dictionaries don't\ngasometer/NS\ngasp/VdGSNg\ngassed/JVtTe\ngasses/NVh\ngassing/V6Ne\ngassy/J>^\ngastric/~J\ngastritis/Ng\ngastroenteritis/Ng\ngastrointestinal/~J\ngastronome/NS\ngastronomic/J\ngastronomical/JY\ngastronomy/Ng\ngastropod/~NSg\ngasworks/Ng\ngate/~NgSVGd\ngateau/N\ngateaux/N\ngatecrash/Vd>GSNZ\ngatecrasher/Ng\ngatehouse/~NSg\ngatekeep/VSG\ngatekeeper/NgS\ngatekept/VtT\ngatepost/NgS\ngateway/~NgSV\ngather/~VGd>SNgzZ\ngatherer/~Ng\ngathering/~NgV6J\ngator/~NSg\ngauche/J>Y^p\ngaucheness/Nmg\ngaucherie/Ng\ngaucho/NSg\ngaudily/Ry\ngaudiness/Nmg\ngaudy/J>^pN\ngauge/~NSgVdG\ngaunt/J>^p\ngauntlet/~NgS\ngauntness/Nmg\ngauze/NmgV\ngauziness/Nmg\ngauzy/J>^p\ngave/~Vt\ngavel/NSgV\ngavotte/NgSV\ngawd/N\ngawk/NSVdG\ngawkily/Ry\ngawkiness/Ng\ngawky/J>^pN\ngawp/VdGSN\ngay/~J^>pNSgV\ngayness/Ng\ngaze/~VGd>SNgZ\ngazebo/~NSg\ngazelle/~NgS\ngazer/Ng\ngazette/~NgSVGd\ngazetteer/~NgSV\ngazillion/NS\ngazpacho/~Nmg\ngazump/VdGSN\ngear/~NwgSVdGJ\ngearbox/~NgS\ngearing/~NwSgV\ngearshift/NgSV\ngearwheel/NSg\ngecko/~NSgV\ngeddit/\ngee/~VdSN\ngeeing/V6\ngeek/~NgSVdG\ngeeky/J>^\ngeese/~N9\ngeezer/NgS\ngeisha/~Ng09S       # singular and plural, also has a plural in -s\ngel/~NwSgV\ngelatin/~Nmg\ngelatinous/~J\ngelcap/Ng\ngeld/NSVdGz\ngelding/NgV\ngelid/J\ngelignite/Ng\ngelled/VtTJ\ngelling/~V6\ngem/~NSgV\ngemmology/Ng!_₹\ngemological/J\ngemologist/NgS\ngemology/Ng\ngemstone/~NgS\ngendarme/NgS\ngender/~NwgSVdJ\ngene/~N0gS\ngenealogical/~JY\ngenealogist/NgS\ngenealogy/~NSg\ngenera/~N9\ngeneral/~JYNSgV\ngeneralisation/NgS!_₹\ngeneralise/VGdS!_₹\ngeneraliser/NgS!_₹\ngeneralissimo/NgS\ngeneralist/NgS\ngenerality/~NSg\ngeneralization/~NgS\ngeneralize/~VGdSB\ngeneralizer/NgS\ngeneralship/Ng\ngenerate/~VGSdervn\ngeneration/~Ngre\ngenerational/~JY\ngenerations/~N9\ngenerator/~NSg\ngeneric/~JNSgQ\ngenerosity/~NSg\ngenerous/~JYp\ngenerousness/Ng\ngenes/~N9\ngeneses/N9\ngenesis/~N0g\ngenetic/~JSQ\ngeneticist/~NgS\ngenetics/~Nmg\ngenial/JYW\ngeniality/NgW\ngeniculate/JV\ngenie/~N0Sg\ngenii/N9\ngenital/~JYN0W\ngenitalia/~Nmg\ngenitals/~N9g\ngenitive/~JNgS\ngenitourinary/J\ngenius/~NwgSJp\ngenlock/NgSVdG\ngenned/VtT\ngenning/V6\ngenocidal/~J\ngenocide/~NwgSV\ngenome/~NgS\ngenomic/~NS\ngenre/~NSgV\ngent/~NgSJr\ngenteel/JYp\ngenteelness/Ng\ngentian/NSg\ngentile/~JNSg\ngentility/Ng\ngentle/~J^>pVGdSN\ngentlefolk/NgS\ngentlefolks/Ng\ngentleman/~N0g♂Y\ngentlemanly/JU\ngentlemen/~N9g♂\ngentleness/Ng\ngentlewoman/N0g♀\ngentlewomen/N9♀\ngently/~Ry\ngentrification/~Nmg\ngentrify/VdSGn\ngentry/~NSg\ngenuflect/VdGS\ngenuflection/~NgS\ngenuine/~JYp\ngenuineness/Nmg\ngenus/~N0g\ngeocache/NSVdG\ngeocentric/JQ\ngeochemistry/Nmg\ngeocode/VGdSNg\ngeode/NSg\ngeodesic/NSgJ\ngeodesy/Ng\ngeodetic/~J\ngeoeconomics/Nmg\ngeoengineering/Nmg\ngeog/N\ngeographer/~NSg\ngeographic/~J\ngeographical/~JYN\ngeography/~NwSg\ngeolocation/NwgS\ngeologic/~J\ngeological/~JY\ngeologist/~NgS\ngeology/~NSg\ngeom/N\ngeomagnetic/J\ngeomagnetism/Nmg\ngeometer/N\ngeometric/~J\ngeometrical/~JY\ngeometry/~NwSg\ngeophysical/~J\ngeophysicist/NSg\ngeophysics/~Nmg\ngeopolitical/~VY\ngeopolitics/Nmg\ngeoscientist/NSg\ngeostationary/J\ngeostrategic/J\ngeosynchronous/J\ngeosyncline/NgS\ngeothermal/~J\ngeothermic/J\ngeranium/NgSJ\ngerbil/NgSV\ngeriatric/JNS\ngeriatrician/NS\ngeriatrics/Nmg\ngerm/~NgSV\ngermane/JN\ngermanium/Nmg\ngermicidal/J\ngermicide/NwgS\ngerminal/~Jg\ngerminate/~VGdSn\ngermination/~NwSg\ngermophobe/NgS\ngermophobia/Nmg\ngerontocracy/NwgS\ngerontological/J\ngerontologist/NgS\ngerontology/Nmg\ngerrymander/VGdSNg\ngerrymandering/NgV\ngerund/NgS\ngestalt/NS\ngestapo/~Sg\ngestate/VGdSn\ngestation/~Nmg\ngestational/~J\ngesticulate/VdSGnX\ngesticulation/Ng\ngestural/J\ngesture/~NgSVGd\ngesundheit/\nget/~VbSN\ngetaway/~NSgJ\ngetter/NSg\ngetting/~V6Ng       # `M` for getting's contraction\ngetup/Ng\ngewgaw/NSgJ\ngeyser/NSgV\nghastliness/Nmg\nghastly/J^>p\nghat/~NgS\nghee/Nmg\ngherkin/NgS\nghetto/~NSgJV\nghettoise/VGdS!_₹\nghettoize/VGdS\nghost/~NSgVdGY\nghostliness/Nmg\nghostly/~J>^p\nghostwrite/VG>SZ\nghostwriter/NgS\nghostwritten/J\nghostwrote/V\nghoul/NSg\nghoulish/JYp\nghoulishness/Ng\ngiant/~NSgJ\ngiantess/NgS\ngibber/NSVGd\ngibberish/NgJ\ngibbet/NgSVGd\ngibbon/~NgS\ngibbous/J\ngibe/NgSVGd\ngiblet/NSg\ngiddily/Ry\ngiddiness/Nmg\ngiddy/J^>pNV\ngift/~NgSVdG\ngig/~NSgV\ngigabit/~NSg\ngigabyte/NgS\ngigaflop/NgS\ngigagram/NS\ngigahertz/Ng\ngigajoule/NS\ngigameter/NS<\ngigametre/NS!@_₹\ngigantic/~JQ\ngigapascal/NS\ngigapixel/NgS\ngigawatt/NSg\ngigged/VtT\ngigging/NV6\ngiggle/Vd>GSNgZ\ngiggler/Ng\ngiggly/J>^\ngigolo/~NSg\ngild/Vd>GSNgZ\ngilder/Ng\ngilding/VNg\ngill/~NgSV\ngillie/NSV\ngillion/NS\ngilt/~NgSJV\ngimbal/NgS\ngimbap/Nwg\ngimcrack/JNSgV\ngimcrackery/Ng\ngimlet/NSgVGd\ngimme/~NSg\ngimmick/~NgSV\ngimmickry/Ng\ngimmicky/J\ngimp/NgSVdGJ\ngimpy/J\ngin/~NwSgVC\nginger/~NwSgJYVGd\ngingerbread/~Nmg\ngingersnap/NSg\ngingery/J\ngingham/Ng\ngingivitis/Ng\nginkgo/N0g\nginkgoes/N9\nginned/VtTJ\nginning/V6N\nginormous/J\nginseng/Nmg\ngiraffe/NgS\ngird/Vd>GSNZ\ngirder/~NgS\ngirdle/~NSgVdG\ngirl/~NgSV\ngirlfriend/~NgS\ngirlhood/NwSg\ngirlish/JYp\ngirlishness/Nmg\ngirly/JN\ngiro/~NSV\ngirt/NgSVdGJ\ngirth/NwgSV\ngirths/N\nGIS/N # Geographic Information System\ngist/NgSV\ngit/~NOSV\ngite/NS\ngive/~VG>SNZz\ngiveaway/NgSJ\ngiveback/NgS\ngiven/~VTSPNgJp # \"Givenness\" is a technical word in the branch of philosophy called Phenomenology\ngiver/~Ng\ngizmo/NSg\ngizzard/NgS\nglace/S\nglaceed\nglaceing\nglacial/~JYN\nglaciate/VGdSXn\nglaciation/~Ng\nglacier/~NgS\nglad/~JYpVSNg\ngladden/VGdS\ngladder/Jc\ngladdest/Ju\nglade/~NSg\ngladiator/~NSgV\ngladiatorial/J\ngladiola/NSg\ngladioli/N\ngladiolus/Ng\ngladness/Ng\ngladsome/J\nglam/~NJV\nglamorisation/Ng!_₹\nglamorise/VdSG!_₹\nglamorization/Ng\nglamorize/VdSG\nglamorous/~JYU\nglamour/~NgSVGd\nglance/~VdGSNg\ngland/~NSg\nglandes/N9\nglandular/JN\nglans/N0g\nglare/~NSgVdGJ\nglaring/JYV6N\nglasnost/Ng\nglass/~NwgSVdG\nglassblower/NgS\nglassblowing/~Ng\nglassful/NSg\nglasshouse/NS\nglassily/Ry\nglassiness/Nmg\nglassware/~Nmg\nglassy/J>^pN\nglaucoma/Ng\nglaze/NSgVdG\nglazier/NSgJ\nglazing/~VNg\ngleam/NSgVdGz\nglean/Vd>GSNZz\ngleaner/Ng\ngleanings/Ng\nglee/~NmgV\ngleeful/JYp\ngleefulness/Nmg\nglen/~NgS\nglenohumeral/J\nglenoid/NJ\nglib/JYpVN\nglibber/Jc\nglibbest/Ju\nglibness/Nmg\nglide/~Vd>GSNgZ\nglider/~Ng\ngliding/~NgVJ\nglimmer/NgSVdGz\nglimmering/V6Ng\nglimpse/~VGdSNg\nglint/NSgJVdG\nglissandi/N9\nglissando/N0gV\nglisten/VdGSNg\nglister/VdGSN\nglitch/NgSVGd\nglitchy/J\nglitter/~NgSVdG\nglitterati/Nmg\nglittery/J\nglitz/Nmg\nglitzy/J^>\ngloaming/NSgV\ngloat/VdGSNg\ngloating/V6NY\nglob/~NgSVdG\nglobal/~JYNSg\nglobalisation/Nmg!_₹\nglobalise/VGdS!_₹\nglobalism/Ng\nglobalist/JNgS\nglobalization/~Nmg\nglobalize/VGdS\nglobbed/VtT\nglobbing/V6N\nglobe/~NSgV\nglobetrotter/NgS\nglobetrotting/VN\nglobular/~JN\nglobule/NgS\nglobulin/Ng\nglockenspiel/NSg\nglom/VS\nglommed/VtT\nglomming/V6N\ngloom/NmgV\ngloomily/Ry\ngloominess/Nmg\ngloomy/~J^>pN\nglop/VNg\ngloppy/J\nglorification/Nmg\nglorify/VGdSn\nglorious/~JYi\nglory/~NSgVdG\ngloss/~NgSVdG\nglossary/~NSg\nglossily/Ry\nglossiness/Nmg\nglossolalia/Nmg\nglossy/~J^>pNSg\nglottal/~JN\nglottis/NgS\nglove/~NSgVdG\nglow/~Vd>GSNgZ\nglower/VGdNg\nglowing/~V6NJY\nglowworm/NgS\nglucagon/N\nglucose/~Ng\nglue/~NwgSVbGd\nglued/~VtTU\ngluey/J\ngluier/Jc\ngluiest/Ju\nglum/JYpVN\nglummer/Jc\nglummest/Ju\nglumness/Ng\ngluon/NS\nglut/~NgSVn\ngluten/Ng\nglutenous/J\nglutinous/JY\nglutted/VtT\nglutting/V6N\nglutton/JNgSV\ngluttonous/JY\ngluttony/Nmg\nglycemic/J\nglycerin/Nmg\nglycerine/Nmg!@_₹\nglycerol/~Nmg\nglycogen/~Nmg\nglycol/~N\nglyph/N0\nglyphs/N9\ngm/~N\ngnarl/NSgVdGJ\ngnarly/J^>\ngnash/VdGSNg\ngnat/NgS\ngnaw/VdGSN\ngnawing/NwV6\ngneiss/Ng\ngnocchi/Nmg\ngnome/~NSg\ngnomic/~J\ngnomish/J\ngnomist/NgS\ngnu/~NSg\ngo/~Vb>GN0gJzHZ\ngo around/V\ngo-around/NgS\ngoad/NgSVdG\ngoal/~NgSV\ngoalie/~NSgV\ngoalkeeper/~NgS\ngoalkeeping/~NgV\ngoalless/J\ngoalmouth/N0\ngoalmouths/N9\ngoalpost/NgS\ngoalscorer/~NgS\ngoaltender/~NgS\ngoat/~NgSV\ngoatee/NSg\ngoatherd/NgS\ngoatskin/NgS\ngob/NSgV\ngobbed/VtT\ngobbet/NSgV\ngobbing/V6N\ngobble/Vd>GSNgZ\ngobbledegook/Ng!_₹\ngobbledygook/Ng\ngobbler/Ng\ngoblet/~NSg\ngoblin/~NSg\ngobsmacked/J\ngobstopper/NS\ngod/~NOSgV\ngodawful/J\ngodchild/Ng\ngodchildren/9g\ngoddammit/\ngoddamn/JNd\ngoddaughter/NgS\ngoddess/~NgS\ngodfather/~NSgV\ngodforsaken/J\ngodhead/Ng\ngodhood/Nmg\ngodless/JYp\ngodlessness/Ng\ngodlike/J\ngodliness/NmgU\ngodly/J>^pU\ngodmother/~NSgV\ngodparent/NSg\ngodsend/NSg\ngodson/NSg\ngodspeed/N\ngoer/Ng\ngoes/~VhN9\ngofer/NSg\ngoggle/VdGSNg\ngoggles/N9gV\ngoing/~V6NgJ\ngoiter/NSg<\ngoitre/NSg!@_₹\ngold/~NmgSJVn\ngold-plated/J\ngoldbrick/NSgVGd>Z\ngoldbricker/Ng\ngolden/~J^>NV\ngoldenrod/~NgJ\ngoldfield/NS\ngoldfinch/NgS\ngoldfish/~NgS09     # singular and plural, also has a plural in -s\ngoldmine/NSg\ngoldsmith/~Ng\ngoldsmiths/~N\ngolem/NSg\ngolf/~NgSVd>GZ\ngolfer/~Ng\ngolliwog/NS\ngolly/NSgV\ngonad/NSg\ngonadal/J\ngondola/~NgSV\ngondolier/NSg\ngone/~VT>JPZ\ngoner/Ng\ngong/~NgSVdG\ngonk/NSV\ngonna/~V\ngonorrhea/Ng\ngonorrheal/J\ngonorrhoea/Ng!_₹\ngonorrhoeal/J!_₹\ngonzo/~JN\ngoo/~NmgV\ngoober/NSgV\ngood/~JYpNgSV\ngoodbye/~NgSV\ngoodhearted/J\ngoodish/J\ngoodly/J^>\ngoodness/~NgS\ngoodnight/~NV\ngoods/~NgV\ngoodwill/~Ng\ngoody/~NSgJ\ngooey/J\ngoof/NgSVdG\ngoofball/NSgJ\ngoofiness/Ng\ngoofy/~J>^pN\ngoogle/~VdGSNg\ngoogly/NSJ\ngooier/Jc\ngooiest/Ju\ngook/NgS\ngoon/~NgSV\ngoop/NmgV\ngoose/~NSgVdG\ngoose-step/VS\ngoose-stepped/VtT\ngoose-stepping/V6\ngooseberry/NwSg\ngoosebumps/N9g\ngooseneck/NgS\ngoosy/JNgS\ngopher/~NSg\ngore/~NgSVGd\ngorge/~NSVdGJE\ngorge's\ngorgeous/~JYp\ngorgeousness/Nmg\ngorgon/NSgJ\ngorilla/~NgS\ngorily/Ry\ngoriness/Nmg\ngormandise/Vd>SGZ!_₹\ngormandiser/NgS!_₹\ngormandize/Vd>SGZ\ngormandizer/NgS\ngormless/J\ngorp/NgS\ngorse/Ng\ngory/~J>^p\ngosh/\ngoshawk/NgS\ngosling/~NSg\ngospel/~NgSV\ngossamer/NgJ\ngossip/~NwgSVd>GZ\ngossiper/Ng\ngossipy/J\ngot/~VtT\ngotcha/NS\ngoths/~N\ngotta/~V\ngotten/~VTJ\ngouache/NSV\ngouge/NSgVd>GZ\ngouger/Ng\ngoulash/NgS\ngourd/~NSg\ngourde/NgS\ngourmand/NSg\ngourmet/~JNSg\ngout/NgV\ngouty/J^>\ngov/~N\ngovern/~VdGSNBL\ngovernability/NgU\ngovernable/JU\ngovernance/~Nmg\ngoverned/~VtTU\ngoverness/NgSV\ngovernment/~NwgS\ngovernmental/~J\ngovernmentwide/J\ngovernor/~NSg\ngovernorship/~Nmg\ngovt/~N\ngown/~NgSVdG\ngr/~N\ngrab/~VSNg\ngrabbed/~VtT\ngrabber/NgS\ngrabbing/~V6N\ngrabby/J^>N\ngrace/~Nw☁SgVdGE\ngraceful/~JYpE\ngracefulness/NgE\ngraceless/JYp\ngracelessness/Nmg\ngracious/~JYU\ngraciousness/Nmg\ngrackle/NgS\ngrad/~NgS>ZB\ngradate/VGdSXn\ngradation/NgVe\ngrade/~NSVdGer\ngrade's\ngraded/~VJU\ngrader/Ng\ngradient/~NgSJ\ngradual/~JYpN\ngradualism/Nmg\ngradualness/Nmg\ngraduate/~NgSJVGdXn\ngraduation/~NwgS\ngraffiti/~N9mV\ngraffito/N0g\ngraft/~NwSgVd>GZ\ngrafter/NgS\ngraham/~NS\ngrail/~NgS\ngrain/~NwSgVdi\ngraininess/Nmg\ngrainy/J^>p\ngram/~NOSgVK\ngrammar/~NwgSV\ngrammarian/~NSg\ngrammatical/~JYU\ngramophone/~NgS\ngrampus/~NgS\ngran/~NS\ngranary/NSg\ngrand/~J>Y^pNSg\ngrandam/NgS\ngrandaunt/NgS\ngrandchild/~N0g\ngrandchildren/~N9g\ngranddad/NSg\ngranddaddy/NSg\ngranddaughter/~NSg\ngrandee/NgS\ngrandeur/~Nmg\ngrandfather/~NgSVGdY\ngrandiloquence/Ng\ngrandiloquent/J\ngrandiose/~JY\ngrandiosity/Ng\ngrandkid/NgS\ngrandma/~NgSV\ngrandmaster/~NSg\ngrandmother/~NgSY\ngrandnephew/NgS\ngrandness/Nmg\ngrandniece/NgS\ngrandpa/~NgS\ngrandparent/NgSV\ngrandson/~NgS\ngrandstand/~NSgVGd\ngranduncle/NSg\ngrange/~NSg\ngranite/~Nmg\ngranitic/~J\ngranny/~NSgJV\ngranola/NmgJ\ngrant/~Vd>GSNgZ\ngrantee/NgS\ngranter/Ng\ngrantsmanship/Nmg\ngranular/~J\ngranularity/Nmg\ngranulate/VGdSJn\ngranulation/Nmg\ngranule/NgS\ngrape/~NwSgJV\ngrapefruit/NwgS\ngrapeshot/Nmg\ngrapevine/~NSgV\ngraph/~N0gVdG\ngrapheme/NSg\ngraphic/~JNgS\ngraphical/~JY\ngraphics/N09\ngraphite/~NwgV\ngraphologist/NgS\ngraphology/Nmg\ngraphs/~N9V\ngrapnel/NgSV\ngrapple/VGdSNg\ngrappler/NgS\ngrasp/~VdGSNgB\ngrass/~NwgSVdG\ngrasshopper/~NgSV\ngrassland/~NwgS\ngrassroots/~J\ngrassy/~J^>N\ngrate/NSgVd>GJZz\ngrateful/~JYpU\ngratefulness/NmgU\ngrater/NgS\ngratification/Nmg\ngratify/VGdSnX\ngratifying/V6JY\ngratin/NS\ngrating/~JYNgV\ngratis/J\ngratitude/~Ngi\ngratuitous/~JYp\ngratuitousness/Ng\ngratuity/NSg\ngravamen/NgS\ngrave/~NSgVd>GJY^p\ngravedigger/NSg\ngravel/~NmSgVGdY\ngravelled/VtTJ!@_₹\ngravelling/NV6!@_₹\ngraven/VJ\ngraveness/Ng\ngraveside/NgS\ngravestone/~NSg\ngraveyard/~NgS\ngravid/J\ngravimeter/NgS\ngravitas/N\ngravitate/VGdSn\ngravitation/~Nmg\ngravitational/~J\ngravity/~Ng\ngravy/~NwSgV\ngray/~J^>pVdGSNwg<\ngray wolf/Ng<\ngray wolves/9<\ngraybeard/NSg<\ngrayish/J<\ngrayness/Ng<\ngrayscale/NgJ<\ngraze/NSgVd>GZ\ngrazer/Ng\ngrease/~NwSgVd>GZ\ngreasepaint/NwSg\ngreasily/Ry\ngreasiness/Ng\ngreasy/~J^>p\ngreat/~J>Y^pNSg\ngreatcoat/NSg\ngreathearted/J\ngreatness/~Ng\ngrebe/~NSg\ngreed/~NgV\ngreedily/Ry\ngreediness/Ng\ngreedy/~J^>p\ngreen/~JY^>pNwSgVGd\ngreenback/NgS\ngreenbelt/NgS\ngreenery/Ng\ngreenfield/~NJ\ngreenfly/NS\ngreengage/NgS\ngreengrocer/NSg\ngreenhorn/NSg\ngreenhouse/~NSgV\ngreenish/~J\ngreenmail/NgSVdG\ngreenness/Nmg\ngreenroom/NSg\ngreenstone/N\ngreensward/Ng\ngreenwood/~Ng\ngreet/~VGd>SJNZz\ngreeter/NgS\ngreeting/~NgV\ngregarious/~JYp\ngregariousness/Nmg\ngremlin/NSg\ngrenade/~NSgV\ngrenadier/~NgS\ngrenadine/Nmg\ngrep/OSV\ngrepped/VtT\ngrepping/V6\ngrew/~Vtr\ngrey/J^>pVdGSNwg!@_₹\ngrey wolf/Ng!@_₹\ngrey wolves/9!@_₹\ngreyhound/~NSgV\ngreyish/J!@_₹\ngreyness/Ng!@_₹\ngreyscale/NgJ!@_₹\ngribble/NSJ\ngrid/~NgSV\ngrid line/NgS       # Two-word spelling is in Collins and Merriam-Webster\ngriddle/NSgV\ngriddlecake/NSg\ngridiron/~NSgV\ngridlock/~NwSgVd\ngrief/~Nm☁SgV\ngrievance/NgS\ngrieve/~VGd>SNZ\ngriever/Ng\ngrievous/JYp\ngrievousness/Ng\ngriffin/~NSg\ngriffon/NSg\ngrift/NwSgVGd>\ngrifter/NgS\ngrill/~NSgVGdJz\ngrille/~NgS\ngrim/~JYpVdGN\ngrimace/NSgVdG\ngrime/~NSgV\ngriminess/Nmg\ngrimmer/Jc\ngrimmest/Ju\ngrimness/Nmg\ngrimy/J^>p\ngrin/NgSV\ngrind/~VG>SNgZz\ngrinder/~NgS\ngrindhouse/NwgS\ngrindstone/NgS\ngringo/NgS\ngrinned/VtT\ngrinning/V6N\ngrip/~Vd>GSNwgZ\ngripe/VSNg\ngriper/Ng\ngrippe/NgGd>Z\ngripper/NgS\ngrippy/J\ngrisliness/Nmg\ngrisly/J>^pN\ngrist/~NmgVY\ngristle/Nmg\ngristmill/NgS\ngrit/~NwgSV\ngrits/N9gV\ngritted/VtT\ngritter/NSg\ngrittiness/Nmg\ngritting/V6N\ngritty/~J>^p\ngrizzle/NSJVdG\ngrizzly/~J^>NSg\ngroan/NSgVGd\ngroat/NSg\ngrocer/~NgSV\ngrocery/~NSgV\ngrog/NmgV\ngroggily/Ry\ngrogginess/Ng\ngroggy/J>^p\ngroin/~NSgV\ngrok/VS\ngrokked/VtT\ngrokking/V6\ngrommet/NSgV\ngroom/~NSgVGd>Z\ngroomer/Ng\ngrooming/~VNg\ngroomsman/Ng\ngroomsmen/9\ngroove/~NgSVGd\ngroovy/J>^N\ngrope/Vd>GSNgZ\ngroper/Ng\ngrosbeak/NgS\ngrosgrain/Ng\ngross/~J^Y>pNgSVGd\ngrossness/Nmg\ngrotesque/~JYpNSg\ngrotesqueness/Ng\ngrotto/~N0g\ngrottoes/N9\ngrotty/J^>\ngrouch/NgSVGd\ngrouchily/Ry\ngrouchiness/Nmg\ngrouchy/J>^p\nground/~NwgSVGdJZz\nground-based/J\ngroundbreaking/~JNgS\ngroundcloth/N0\ngroundcloths/N9\ngrounder/NgS\ngroundhog/NgS\ngrounding/~NwgSV6\ngroundless/JY\ngroundnut/NgS\ngroundsheet/NS\ngroundskeeper/NS\ngroundsman/N\ngroundsmen/9\ngroundswell/NSg\ngroundwater/~Ng\ngroundwork/~Ng\ngroup/~NSgVGd>zZ\ngrouper/Ng\ngroupie/NgS\ngrouping/~VNg\ngroupware/Nmg\ngrouse/~NgSVGd>JZ\ngrouser/Ng\ngrout/NSgVGd\ngrove/~NSgV\ngrovel/VGd>SZ\ngroveler/Ng\ngrovelled/VtT\ngroveller/NSg!@_₹\ngrovelling/V6Nm\ngrow/~VSGrH\ngrowable/J\ngrower/NgS\ngrowing/~VNi\ngrowl/~NSgVGd>Z\ngrowler/Ng\ngrown/~VJri\ngrownup/NgSJ\ngrowth/~Nw0gr\ngrowths/N9\ngroyne/NgS!@_₹\ngrub/~NwgSV\ngrubbed/VtT\ngrubber/NgS\ngrubbily/Ry\ngrubbiness/Nmg\ngrubbing/V6N\ngrubby/J^>pN\ngrubstake/NgV\ngrudge/~NgSVGd\ngrudging/JYVN\ngrue/~VSNJ\ngruel/NgVGz\ngrueling/JYNV\ngruelling/JYNSV6!@_₹\ngruesome/~J>Y^p\ngruesomeness/Nmg\ngruff/J^Y>pVN\ngruffness/Nmg\ngrumble/NSgVd>GZz\ngrumbler/NgS\ngrumbly/J\ngrump/NSgV\ngrumpily/Ry\ngrumpiness/Nmg\ngrumpy/J>^pN\ngrunge/~NwgS\ngrungy/J>^\ngrunion/NSg\ngrunt/NSgVGd\ngt/~N\nguacamole/Ng\nguanine/Ng\nguano/Ng\nguarani/NgS\nguarantee/~NgSVd\nguaranteeing/~V6\nguarantor/NgS\nguaranty/NSgVGd\nguard/~NSgVGd>Z\nguarded/~VJY\nguarder/Ng\nguardhouse/NSg\nguardian/~NSg\nguardianship/~Ng\nguardrail/NSg\nguardroom/NSg\nguardsman/~Ng\nguardsmen/9\nguava/NSg\ngubbins/9\ngubernatorial/~J\nguerrilla/~NSgJ\nguess/~VbGd>SNgZB\nguesser/Ng\nguesstimate/NSgVdG\nguesswork/Ng\nguest/~NSgVGd\nguestbook/NSg\nguesthouse/NS\nguestroom/NS\nguff/NgV\nguffaw/NgSVdG\nguidance/~Nmg\nguide/~NSgVd>GZ\nguidebook/~NSg\nguided/~VtTJU\nguideline/~NSg\nguidepost/NSg\nguider/Ng\nguild/~NSg>Z\nguilder/Ng\nguildhall/~NgS\nguile/~NgV\nguileful/J\nguileless/JYp\nguilelessness/Ng\nguillemot/NS\nguillotine/~NSgVdG\nguilt/~NgSVdG\nguiltily/Ry\nguiltiness/Nmg\nguiltless/J\nguilty/~J>^pN\nguinea/~NgS\nguise/~NSgV\nguitar/~NgSV\nguitarist/~NSg\ngulag/~NSgV\ngulch/~VSNg\ngulden/~NgS\ngulf/~NgSV\ngull/~NgSVdG\ngullet/NgS\ngullibility/Nmg\ngullible/JN\ngully/~NSgV\ngulp/NgSVd>GZ\ngulper/Ng\ngum/~NwSgV\ngumball/NS\ngumbo/NmSg\ngumboil/NSg\ngumboot/NS\ngumdrop/NSg\ngummed/VtT\ngumming/V6N\ngummy/J^>N\ngumption/Nmg\ngumshoe/NgSVd\ngumshoeing/V\ngun/~NSgV\ngunboat/~NSg\ngunfight/~NgSV>Z\ngunfighter/Ng\ngunfire/~Ng\ngung ho/J\ngunge/NV\ngungy/J\ngunk/NgSVdG\ngunky/J\ngunman/~Ng\ngunmen/~9\ngunmetal/Ng\ngunned/VtTJ\ngunnel/NgS\ngunner/~NgS\ngunnery/~Ng\ngunning/V6N\ngunny/Ng\ngunnysack/NgS\ngunpoint/~Ng\ngunpowder/~NmgV\ngunrunner/NgS\ngunrunning/Ng\ngunship/NgS\ngunshot/~NgS\ngunslinger/~NSg\ngunsmith/Ng\ngunsmiths/N\ngunsmoke/Nmg\ngunwale/NgS\nguppy/NSg\ngurgle/VGdSNg\ngurn/NSgVGd\ngurney/~NgS\nguru/~NgSV\ngush/~NgSVd>GZ\ngusher/Ng\ngushing/JYNV6\ngushy/J^>\ngusset/NgSVdG\ngussy/VdGSN\ngust/~NgSVdG\ngustatory/J\ngustily/Ry\ngusto/~Ng\ngusty/J>^\ngut/~NwSgVJ\ngutless/Jp\ngutlessness/Ng\ngutsy/J>^\ngutted/~JVtT\ngutter/~NSgVdG\nguttersnipe/NgS\ngutting/V6NJ\nguttural/JNgS\ngutty/J>^N\nguv/NS\nguvnor/NS\nguy/~NSgVGd\nguzzle/Vd>GSNZ\nguzzler/Ng\ngybe/VGdSNg!@_₹\ngym/~NSgV\ngymkhana/NgS\ngymnasium/~NgS\ngymnast/~NgS\ngymnastic/~JNSQ\ngymnastics/~Ng\ngymnosperm/NSg\ngymslip/NS\ngynaecologic/J!@_₹\ngynaecological/J!_₹\ngynaecologist/NSg!_₹\ngynaecology/Nmg!_₹\ngynecologic/J\ngynecological/J\ngynecologist/NSg\ngynecology/Ng\ngyp/NSgV\ngypped/VtT\ngypper/NSg\ngypping/V6\ngypster/NSg\ngypsum/Nwg\ngypsy/~NSgJV\ngyrate/VdSGJnX\ngyration/Ng\ngyrator/NSg\ngyrfalcon/NgS\ngyro/~NgS\ngyrofrequency/NgS\ngyroscope/NgS\ngyroscopic/J\ngyve/NgSVGd\nh/~NJGnXZvz         # removed `>` 'her' is not comparative of 'h'\nh'm/\nha/~\nhabeas corpus/N\nhaberdasher/NSg\nhaberdashery/NSg\nhabiliment/NSg\nhabit/~NSViB\nhabit's\nhabitability/Ng\nhabitat/~NSg\nhabitation/~NgS\nhabitual/~JYpN\nhabitualness/Ng\nhabituate/VGdSn\nhabituation/Ng\nhabitue/NSg\nhacienda/~NSg\nhack/~Vd>GSNgZB\nhackathon/NSg\nhacker/~NgV\nhackery/Ng\nhacking/~JVNg\nhackish/J\nhackle/NgSV\nhackney/~NSgJVdG\nhacksaw/NSgV\nhacktivist/NgS\nhackwork/Nmg\nhacky/J>^\nhad/~VtT\nhaddock/NwSg\nhadith/~N\nhadn't/Vt\nhadst/V\nhaem/N!@_₹\nhaematite/Ng!_₹\nhaematologic/J!_₹\nhaematological/J!_₹\nhaematologist/NgS!_₹\nhaematology/Nmg!_₹\nhaemoglobin/Nmg!_₹\nhaemophilia/Nmg!_₹\nhaemophiliac/NgS!_₹\nhaemorrhage/NgSVGd!_₹\nhaemorrhoid/NS!_₹\nhafnium/Nmg\nhaft/NgSV\nhag/NSgV\nhaggard/~JYpN\nhaggardness/Nmg\nhaggis/NwgS\nhaggish/J\nhaggle/VGd>SgZ\nhaggler/Ng\nhagiographer/NSg\nhagiographic/J\nhagiography/NwSg\nhahnium/Nmg\nhaiku/~NgS\nhail/~NgSVdGJ\nhailstone/NgS\nhailstorm/NgS\nhair/~NwgSVd\nhairball/NgS\nhairband/NS\nhairbreadth/Ng\nhairbreadths/N\nhairbrush/NgSV\nhaircloth/Ng\nhaircut/~NSgV\nhairdo/NgS\nhairdresser/~NSg\nhairdressing/NgV6\nhairdryer/NgS\nhairgrip/NS\nhairiness/Ng\nhairless/JN\nhairlike/J\nhairline/NSgJ\nhairnet/NSg\nhairpiece/NgS\nhairpin/~NSg\nhairsbreadth/Ng\nhairsbreadths/N\nhairsplitter/NSg\nhairsplitting/NgV\nhairspray/NwSV\nhairspring/NgS\nhairstyle/~NgS\nhairstylist/NSg\nhairy/~J^>p\nhaj/~N\nhajj/~Ng\nhajjes/N\nhajji/NSg\nhake/NgSV\nhalal/~JVg\nhalberd/NSg\nhalcyon/~NJ\nhale/~J^>NSVGdi\nhalf/~N0wgJP\nhalf cent/NgS\nhalf-cocked/J\nhalf court/Ng\nhalf-life/Ng\nhalf-lives/9\nhalfback/~NSgV\nhalfcourt/\nhalfhearted/JYp\nhalfheartedness/Ng\nhalfpence/N\nhalfpenny/NSgJ\nhalftime/~NgSJ\nhalftone/NgSV\nhalfway/~J\nhalfwit/NSg\nhalibut/NSg\nhalite/Ng\nhalitosis/Ng\nhall/~NgS\nhallelujah/~N0gVb\nhallelujahs/N9Vh\nhallmark/~NgSVGd\nhalloo/NgSVG\nhallow/NSVdGJ\nhallowed/JVtTU\nhallucinate/VGdSnX\nhallucination/~Ng\nhallucinatory/J\nhallucinogen/NSg\nhallucinogenic/JNSg\nhallway/~NSg\nhalo/~NgSVdG\nhalogen/~NSg\nhalon/N\nhalophile/NSg\nhalt/~Vd>GSNgJZ\nhalter/NgVGd\nhalterneck/NS\nhalting/~JYVN\nhalve/VdSG\nhalyard/NgS\nham/~NwSgV\nham-fisted/J\nhamburg/~NSgV>Z\nhamburger/~NwgSV\nhamlet/~NgS\nhammed/VtTJ\nhammer/~NgSVd>GzZ\nhammerer/Ng\nhammerhead/NSg\nhammerlock/NSg\nhammertoe/NgS\nhamming/V6\nhammock/~NSgV\nhammy/J^>N\nhamper/NgSVGd\nhampered/~VJU\nhamster/~NgSV\nhamstring/~NSgVG\nhamstrung/JV\nhand/~NSVdGU\nhand-drawn/J\nhand-me-down/JNgS\nhand-off/NwSg\nhand out/V/\nhand's\nhandbag/NSgV\nhandball/~NwgSV\nhandbarrow/NSg\nhandbasket/NgS\nhandbill/NgS\nhandbook/~NgS\nhandbrake/~NSV\nhandbuilt/J\nhandcar/NSg\nhandcart/NgSV\nhandclasp/NgS\nhandcraft/NSgVdG\nhandcuff/NgSVdG\nhanded/~JpVtT\nhandedly/Ry\nhandful/~NSg\nhandgun/~NSg\nhandheld/~JNgS\nhandhold/NgSV\nhandicap/~NgSV\nhandicapped/~VtTJN\nhandicapper/NgS\nhandicapping/V6N\nhandicraft/~NwgS\nhandily/Ry\nhandiness/Nmg\nhandiwork/Nmg\nhandkerchief/~NgS\nhandle/~NgSVGd>Z\nhandlebar/NgS\nhandler/~NgS\nhandmade/~JN\nhandmaid/NgSXn\nhandmaiden/Ng\nhandoff/NSg         # some dictionaries say 'handoff' is US, 'handover' is Commonwealth\nhandout/NSgJ\nhandover/~NSg       # some dictionaries say 'handover' is Commonwealth, 'handoff' is US\nhandpick/VGdS\nhandpiece/NgS\nhandprint/NSg\nhandrail/NgS\nhands-off/J\nhandsaw/NSg\nhandset/~NSgV\nhandshake/~NgSVGz\nhandsome/~JY^>pV\nhandsomeness/Nmg\nhandspring/NgS\nhandstand/NSgV\nhandsy/J>^N\nhandwash/NgS\nhandwave/NgSVdG\nhandwavy/J\nhandwork/NgV\nhandwoven/J\nhandwriting/~NmgV\nhandwritten/~JV\nhandy/~J^>NU\nhandyman/N0g♂\nhandymen/N9♂\nhandywork/Nmg\nhang/~Vd>GSNgzZ\nhang out/V/\nhangar/~NgSV\nhangdog/NJV\nhanger/Ng\nhanging/~VJNg\nhangman/~N0g♂\nhangmen/N9♂\nhangnail/NgS\nhangout/NSg\nhangover/~NgS\nhangup/NgS\nhank/~NgSV>Z\nhanker/VGdz\nhankering/V6Ng\nhankie/NgS\nhanky/NSg!@_₹\nhansom/NgS\nhap/NgVY\nhaphazard/JYpN\nhaphazardness/Nmg\nhapless/~JYp\nhaplessness/Nmg\nhaploid/JNgS\nhappen/~VSdGz\nhappening/~V6SJNwg\nhappenstance/NSg\nhappily/~RyU\nhappiness/~NmgU\nhappy/~J^>pNVU\nhappy-go-lucky/J\nhaptic/J\nharangue/NgSVGd\nharass/~VGd>SNLZ\nharasser/NgS\nharassment/~Ng\nharbinger/NSgV\nharbor/~NgSVGd<\nharbormaster/NS<\nharbour/NgSVGd!@_₹\nharbourmaster/NS!@_₹\nhard/~J>Y^pNwRynX   # removed `V` verb sense is obsolete\nhard code/VSdG\nhard-pressed/J\nhard right/Ng\nhard-right/J\nhard-wire/VSdG\nhardback/~NgSJ\nhardball/NgJV\nhardboard/NgV\nhardbound/J\nhardcore/~JN\nhardcover/~NSgJ\nharden/~VGd>NZ\nhardened/~VJU\nhardener/Ng\nhardhat/NgS\nhardheaded/JYp\nhardheadedness/Ng\nhardhearted/JYp\nhardheartedness/Ng\nhardihood/Ng\nhardily/Ry\nhardiness/~Ng\nhardline/NgSJ>\nhardness/~Ng\nhardscrabble/J\nhardship/~NSgV\nhardstand/NSg\nhardtack/~Ng\nhardtop/~NSg\nhardware/~Nmg\nhardwired/JV\nhardwood/~NSgJ\nhardworking/~J\nhardy/~J^>pN\nhare/~NgSVGdJ\nharebell/NgS\nharebrained/J\nharelip/NSgV\nharelipped/J\nharem/~NSg\nharicot/NS\nhark/VdGSN\nharlequin/~NSgJV\nharlot/NSgVJ\nharlotry/Nmg\nharm/~NwgSVdG\nharmed/~VU\nharmful/~JYp\nharmfulness/Nmg\nharmless/~JYp\nharmlessness/Ng\nharmonic/~JNSgQ\nharmonica/~NgS\nharmonies/~N9\nharmonious/~JYp\nharmoniousness/Ng\nharmonisation/Ng!_₹\nharmonise/VGd>SZ!_₹\nharmoniser/Ng!_₹\nharmonium/NgS\nharmonization/Ng\nharmonize/VGd>SZ\nharmonizer/Ng\nharmony/~N0wgE\nharness/~NSVdGU\nharness's\nharp/~NgSVdG\nharpist/NSg\nharpoon/NSgVGd>Z\nharpooner/Ng\nharpsichord/~NgS\nharpsichordist/NSg\nharpy/NSg\nharridan/NgS\nharrier/~Ng\nharrow/~NSgVdG\nharrumph/NVGd\nharrumphs/NV\nharry/~Vd>GSNZ\nharsh/~JY^>pVSdG\nharshness/Ng\nhart/~NgS\nharvest/~NSgVd>GZ\nharvested/~VU\nharvester/~Ng\nhas/~Vh\nhash/~NgSVdGr\nhashish/Ng\nhashtag/NSgV\nhasn't/Vh\nhasp/NgSV\nhassle/NSgVdGJ\nhassock/NSg\nhast/VdGnX\nhaste/~NSgV\nhasten/VdG\nhastily/~Ry\nhastiness/Nmg\nhasty/~J>^p\nhat/~NSgVGd>Z\nhatband/NS\nhatbox/NgS\nhatch/~NgSVdG\nhatchback/~NgS\nhatcheck/NSg\nhatched/~VtTU\nhatchery/~NSg\nhatchet/~NSgV\nhatching/~NgV6\nhatchway/NSg\nhate/~NwgSV\nhateful/JYp\nhatefulness/Nmg\nhatemonger/NgS\nhater/Ng\nhath/V\nhatpin/NS\nhatred/~Nm☁Sg\nhatstand/NSJ\nhatted/JVtT\nhatter/NSgV\nhatting/NV6\nhauberk/NSg\nhaughtily/Ry\nhaughtiness/Ng\nhaughty/J>^p\nhaul/~Vd>GSNgZ\nhaulage/Ng\nhauler/Ng\nhaulier/NS\nhaunch/NgSV\nhaunt/~Vd>GSNgZ\nhaunter/Ng\nhaunting/~VJYN\nhauteur/Ng\nhave/~NgAG\nhaven/~NSgV\nhaven't/VA\nhaversack/NSg\nhaves/N9\nhavoc/~NmgV\nhaw/~VGdSNg\nhawk/~NgSVd>GZ\nhawker/~NgS\nhawkish/Jp\nhawkishness/Nmg\nhawser/NSg\nhawthorn/~NwgS\nhay/~NmSgVGd\nhaycock/NSg\nhayloft/NSg\nhaymaker/NS\nhaymaking/N\nhaymow/NSg\nhayrick/NgS\nhayride/NgS\nhayseed/NgSJ\nhaystack/NSg\nhaywire/NJ\nhazard/~NSgVdG\nhazardous/~JY\nhaze/~NwgSVGd>Zz\nhazel/~NSgJ\nhazelnut/NwgS\nhazer/Ng\nhazily/Ry\nhaziness/Ng\nhazing/~NgV\nhazmat/~N\nhazy/J>^pN\nhdqrs/N\nhe/~Ia3s*           # I~pronoun a~personal 3~person .~singular s~subject *:3pers-sing-subj\nhe'd/\nhe'll/\nhe's/~\nhead/~NgSJ>VdGZz\nhead-scratcher/NgS\nhead unit/NgS\nheadache/~NgS\nheadband/NgS\nheadbang/VSdG\nheadbanger/NS\nheadbanging/NmVJ\nheadboard/NSg\nheadbolt/NgS\nheadbutt/NSVdG\nheadcase/NS\nheadcheese/Nmg\nheadcount/NgS\nheaddress/~NgS\nheader/~NgSV\nheadfirst/J\nheadgear/~Ng\nheadhunt/Vd>SGZ\nheadhunter/Ng\nheadhunting/NmgV\nheadily/Ry\nheadiness/Nmg\nheading/~VSNwg\nheadlamp/NgS\nheadland/~NgS\nheadless/~J\nheadlight/NgS\nheadline/~NgSVGd>Z\nheadliner/NgS\nheadlock/NgSV\nheadlong/JV\nheadman/N0g\nheadmaster/~NSg\nheadmen/N9\nheadmistress/~NgS\nheadphone/NgS\nheadpiece/NgS\nheadpin/NSg\nheadquarter/~VSdG\nheadquarters/~Ng\nheadrest/NgS\nheadroom/Ng\nheadscarf/N\nheadscarves/N\nheadset/NSg\nheadship/NSg\nheadshrinker/NSg\nheadsman/Ng\nheadsmen/9\nheadstall/NSg\nheadstand/NSg\nheadstone/~NSg\nheadstrong/J\nheadteacher/NS\nheadwaiter/NSg\nheadwaters/~Ng\nheadway/~Nmg\nheadwind/NSgV\nheadword/NSg\nheady/J>^p\nheal/~Vd>GSNHZ\nhealed/~VU\nhealer/~Ng\nhealth/~Nmg\nhealthcare/~Nm\nhealthful/JYp\nhealthfulness/Nmg\nhealthily/RyU\nhealthiness/NmgU\nhealthwise/R\nhealthy/~J^>pU\nheap/~NgSVdG\nhear/~VbGSrHz\nheard/~VtTJrU\nhearer/NSg\nhearing/~JNgVr\nhearken/VSGd\nhearsay/Ng\nhearse/NSVr\nhearse's\nheart/~NwSgV\nheartache/NwgS\nheartbeat/~NgS\nheartbreak/~NSg\nheartbreaking/JY\nheartbroken/~J\nheartburn/~Ng\nhearten/VSGdE\nheartfelt/~J\nhearth/~Ng\nhearthrug/NS\nhearths/~N\nhearthstone/NSgV\nheartily/Ry\nheartiness/Ng\nheartland/~NgS\nheartless/JYp\nheartlessness/Ng\nheartrending/JY\nheartsick/Jp\nheartsickness/Ng\nheartstopping/J\nheartstrings/Ng\nheartthrob/NgS\nheartwarming/J\nheartwood/~Ng\nhearty/J>^pNSg\nheat/~NmSVdGr\nheat-resistant/J\nheat's\nheated/~VtTJU\nheatedly/Ry\nheater/~NSg\nheath/~Ng>nX\nheathen/~JNg\nheathendom/Ng\nheathenish/J\nheathenism/Nmg\nheather/~NmgJ\nheaths/N\nheating/~NmgJV6\nheatproof/JV\nheatstroke/Ng\nheatwave/~NS\nheave/Vd>GSNgZ\nheaven/~NSgVY\nheavenly/~J^>Ry\nheavens/~NgV\nheavenward/JS\nheaver/Ng\nheavily/~Ry\nheaviness/Ng\nheavy/~J^>pNSgV\nheavy-duty/J\nheavy-handed/J\nheavyhearted/J\nheavyset/J\nheavyweight/~NgSJ\nheck/~NgV\nheckle/Vd>GSNgZ\nheckler/~Ng\nheckling/VNmg\nhectare/~NSg\nhectic/JNQ\nhectogram/NSg\nhectometer/NgS<\nhectometre/NgS!@_₹\nhector/~NSgVdG\nhedge/~NSgVd>GZ\nhedgehog/~NgSV\nhedgehop/VS\nhedgehopped/VtT\nhedgehopping/V6N\nhedger/Ng\nhedgerow/NSg\nhedonism/Nmg\nhedonist/NgS\nhedonistic/JQ\nheed/~NgSVdG\nheeded/VU\nheedful/JY\nheedless/JYp\nheedlessness/Nmg\nheehaw/NSgVdG\nheel/~NgSVdG\nheelless/J\nheft/NmgSVdG\nheftily/Ry\nheftiness/Nmg\nhefty/~J>^p\nhegemonic/~J\nhegemony/~Nmg\nhegira/NSg\nheifer/NSg\nheight/~NwSgXn\nheighten/VdG\nheightwise/JR\nheinous/JYp\nheinousness/Nmg\nheir/~NgSV\nheiress/~NgS\nheirloom/NSg\nheist/~NSgVdG\nheld/~VtT\nhelical/~J\nhelices/9\nhelicopter/~NSgVGd\nheliocentric/J\nheliosphere/NSg\nheliotrope/NSgJ\nhelipad/NS\nheliport/~NgS\nhelium/~Nmg\nhelix/~NgV\nhell/~ONgV\nhellbent/J\nhellcat/NgS\nhellebore/Ng\nhellfire/~NJ\nhellhole/NgS\nhellion/NgSJ\nhellish/JYp\nhellishness/Ng\nhello/~NSgV\nhellscape/NSg\nhelluva/J\nhelm/~NgSV\nhelmet/~NSgVd\nhelmsman/Ng\nhelmsmen/9\nhelot/NSg\nhelp/~NgSVd>GZz\nhelper/~NgS\nhelpful/~JYU\nhelpfulness/Nmg\nhelping/~NgV\nhelpless/~JYp\nhelplessness/Nmg\nhelpline/NSg\nhelpmate/NSg\nhelve/NSgV\nhem/~NSgVI\nhematite/Ng\nhematologic/J\nhematological/J\nhematologist/NgS\nhematology/Ng\nheme/~Ng\nhemi/NgS\nhemiplegia/N\nhemisphere/~NSg\nhemispheric/J\nhemispherical/J\nhemline/NSg\nhemlock/~NwSg\nhemmed/VtT\nhemmer/NSg\nhemming/V6N\nhemoglobin/Nmg\nhemophilia/Nmg\nhemophiliac/NgS\nhemorrhage/~NgSVGd\nhemorrhagic/~J\nhemorrhoid/NgS\nhemostat/NgS\nhemp/~Nmgn\nhemstitch/NgSVdG\nhen/~NgV\nhence/~V\nhenceforth/~\nhenceforward/\nhenchman/~Ng\nhenchmen/~9\nhenna/NSgJVdG\nhenpeck/VGdSN\nhentai/NgS\nhep/~NJV\nheparin/Ng\nhepatic/~JN\nhepatitis/~Ng\nhepatocyte/NS\nhepper/Jc\nheppest/Ju\nheptagon/NgS\nheptagonal/J\nheptathlon/NSg\nher/~D5Ia3o.        # I~pronoun a~personal 3~person .~singular o~object / D5=determiner+possessive\nherald/~NSgVdG\nheralded/~VU\nheraldic/~J\nheraldry/~Ng\nherb/~NgS\nherbaceous/~J\nherbage/Nmg\nherbal/~JNS\nherbalist/NgS\nherbicidal/J\nherbicide/NwgS\nherbivore/~NSg\nherbivorous/~J\nherculean/J\nherd/~NgSVd>GZ\nherder/~NgS\nherdsman/N9g\nherdsmen/N9\nhere/~JR            # removed `N` marginal noun sense complicates linting\nhere's\nhereabout/S\nhereafter/~NSgJ\nhereby/~R\nhereditary/~JN\nheredity/~Nmg\nherein/R\nhereinafter/\nhereof/\nhereon/\nheresy/~NSg\nheretic/~NSgJ\nheretical/~J\nhereto/\nheretofore/\nhereunder/\nhereunto/R\nhereupon/\nherewith/\nheritable/Ji\nheritage/~NwgS\nhermaphrodite/~NSgJ\nhermaphroditic/J\nhermetic/J\nhermetical/JY\nhermit/~NSg\nhermitage/~NgS\nhermitian/~J\nhernia/NSg\nhernial/J\nherniate/VGdSn\nherniation/NwSg\nhero/~N0g\nheroes/~N9\nheroic/~JNSQ\nheroics/Ng\nheroin/~NwSg\nheroine/~NSgJ\nheroism/~Ng\nheron/~NSg\nherpes/~Ng\nherpetologist/NSg\nherpetology/Ng\nherring/~NwgS\nherringbone/NgV\nhers/~I*\nherself/~Ia3F.      # I~pronoun a~personal 3~person .~singular F~reflexive\nhertz/~Ng\nhesitance/Nmg\nhesitancy/Nmg\nhesitant/~JY\nhesitate/~VdSGnX\nhesitating/VNYU\nhesitation/~Ng\nhessian/~N\nhetero/~JNSg(\nheterodox/J\nheterodoxy/Nmg\nheterogeneity/Ng\nheterogeneous/~JY\nheteronormative/J\nheterosexual/~JYNgS\nheterosexuality/Nmg\nheuristic/JNgSQ\nheuristics/Ng\nhew/VGd>SNZ\nhewn/JT             # past participle of \"hew\"\nhewer/Ng\nhex/~VGdSNwg\nhexadecimal/NwSJ\nhexagon/~NgS\nhexagonal/~J\nhexagram/NSg\nhexameter/NSg\nhey/~N\nheyday/~NSg\nhf/~\nhgt/N\nhgwy/N\nhi/~NJd\nhi-tech/NJ\nhiatus/~NgS\nhibachi/NgS\nhibernate/VGdSn\nhibernation/~Ng\nhibernator/NgS\nhibiscus/~NgS\nhiccough/N0VdG\nhiccoughs/N9\nhiccup/NSgVGd\nhick/NgSV\nhickey/~NSg\nhickory/~NSgJ\nhid/~V\nhidden/~VJ\nhide/~VGd>SNgZz\nhideaway/NSgJ\nhidebound/J\nhideous/~JYp\nhideousness/Ng\nhideout/~NgS\nhider/Ng\nhiding/~VNg\nhie/~VS\nhieing/V\nhierarchic/J\nhierarchical/~JY\nhierarchy/~NSg\nhieroglyph/N0gV\nhieroglyphic/~NgSJ\nhieroglyphs/~N9V\nhigh/~JY^>pNgVRyZ\nhigh definition/Ng\nhigh frequency/NgS\nhigh-frequency/J\nhigh-grade/J\nhigh-level/J\nhigh-paying/J\nhigh-pitched/J\nhigh-profile/J\nhigh-quality/J\nhigh-ranking/J\nhigh-res/J\nhigh-rise/NgS\nhigh-speed/J\nhigh tech/Ng\nhighball/NSgV\nhighborn/J\nhighboy/NgS\nhighbrow/JNSg\nhighchair/NgS\nhigher-up/NgS\nhighfalutin/JN\nhighhanded/JYp\nhighhandedness/Ng\nhighland/~NgS>Z\nhighlander/~Ng\nhighlight/~NSgVd>GZ\nhighlighter/Ng\nhighly/R%\nhighness/~Ng\nhighroad/NgS\nhighs/~N9V\nhightail/VdSG\nhighway/~NgSV\nhighwayman/~Ng\nhighwaymen/~9\nhijab/~NSg\nhijack/~VGd>SNgzZ\nhijacker/~Ng\nhijacking/~V6Nwg\nhike/~NgSVGd>Z\nhiker/Ng\nhiking/~V6Nmg\nhilarious/~JYp\nhilariousness/Nmg\nhilarity/Ng\nhill/~NgSV\nhillbilly/~NSgV\nhilliness/Nmg\nhillock/NgS\nhillside/~NSg\nhilltop/~NgS\nhilly/~J>^p\nhilt/~NgSV\nhim/~Ia3o.          # I~pronoun a~personal 3~person .~singular o~object\nhimself/~Ia3F.      # I~pronoun a~personal 3~person .~singular F~reflexive\nhind/~J>NgSZ\nhinder/~VGdJN\nhindered/~VU\nhindmost/J\nhindquarter/NgS\nhindrance/~NSg\nhindsight/~Ng\nhinge/~NSVdGU\nhinge's\nhint/~NgSVd>GZ\nhinter/Ng\nhinterland/~NSg\nhip/~NSgVJp\nhipbath/N0\nhipbaths/N9\nhipbone/NgS\nhiphuggers/N9\nhipness/Ng\nhipped/JVtT\nhipper/NJc\nhippest/Ju\nhippie/~NSgJ\nhipping/V6\nhippo/~NSg\nhippocampus/~N\nhippodrome/~NSgV\nhippopotamus/NgS\nhippy/NJ\nhipster/NgSV\nhiragana/~N\nhire/~NSVdr\nhire's\nhireling/NgS\nhiring/NgSVJ\nhirsute/JpN\nhirsuteness/Ng\nhis/~D5*\nhiss/~NgSVdG\nhissy/J>^\nhissy fit/NgS\nhist/~NV\nhistamine/NgS\nhistogram/NgSV\nhistologist/NSg\nhistology/~Nmg\nhistopathology/Nmg\nhistorian/~NgS\nhistoric/~JN\nhistorical/~JYN\nhistoricity/~Nmg\nhistoriographer/NgS\nhistoriography/~Nmg\nhistory/~NwSg       # removed `4` verb sense is obsolte and interferes with heuristics\nhistrionic/JSQ\nhistrionics/Nmg\nhit/~VbtTSNgJ          # removed `8` pronoun sense is dialectal and interferes with heuristics\nhitch/~NSVdGU\nhitch's\nhitcher/NgS\nhitchhike/Vd>GSNgZ\nhitchhiker/NgS\nhither/J\nhitherto/~RJ\nhitmaker/NgS\nhitman/~N0g♂\nhitmen/N9g♂\nhitter/~NSg\nhitting/~NV6\nhive/~NgSVGd\nhivemind/NSg\nhiya/\nhmm/~V\nho/~NSgVd>YZ\nhoagie/NgS\nhoard/~NSgVGd>Zz\nhoarder/Ng\nhoarding/NgV\nhoarfrost/Ng\nhoariness/Ng\nhoarse/JY^>pVN\nhoarseness/Ng\nhoary/~J^>p\nhoax/~Vd>GSNgZ\nhoaxer/Ng\nhob/~NSgV\nhobbit/~NSg\nhobble/NgSVGd>Z\nhobbler/Ng\nhobby/~NSg\nhobbyhorse/NgS\nhobbyist/NSg\nhobgoblin/NgS\nhobnail/NSgVGd\nhobnob/NSVJ\nhobnobbed/VtT\nhobnobbing/V6N\nhobo/NgSV\nhoc/~\nhock/~NgSVdG\nhockey/~Nmg\nhockshop/NgS\nhod/~VSNg\nhodgepodge/NSgV\nhoe/~NSgV\nhoecake/NSg\nhoedown/NSgV\nhoeing/VN\nhoer/Ng\nhog/~NSgV\nhogan/~NSg\nhogback/NSg\nhogged/VtTJ\nhogging/V6NJ\nhoggish/JY\nhogshead/NSg\nhogtie/VdSN\nhogtying/V\nhogwash/Ng\nhoick/NSVGd\nhoist/~VGdSNg\nhoke/NSVGd\nhokey/J\nhokier/Jc\nhokiest/Ju\nhokum/Ng\nhold/~V>GSNgJzZ\nholdall/NS\nholder/~Ng\nholding/~NgV\nholdout/NSg\nholdover/NSg\nholdup/NgS\nhole/~NgSVGd\nholey/J\nholiday/~NSgVdG\nholidaymaker/NS\nholiness/~NmgU\nholism/~N\nholistic/~JQ\nholler/NgSVdGJ\nhollow/~NgSVd>GJY^p\nhollowness/Ng\nholly/~NSg\nhollyhock/NgS\nholmium/Nmg\nholocaust/~NSgV\nhologram/NgS\nhologrammatic/JQ\nholograph/N0gV\nholographic/~J\nholographs/N9\nholography/Nmg\nhols/N\nholster/NSgVdG\nholy/~J>^pNU\nholy moley\nholy moly\nhomage/~NwgSV\nhombre/~NgS\nhomburg/~NSg\nhome/~NgSVGd>JYZ\nhome-grown/J\nhome school/NgSVdG\nhomebody/NSg\nhomeboy/NSgI\nhomebrew/NwSgVdG\nhomebuilt/J\nhomecoming/~NSg\nhomecooked/J\nhomegrown/~JNgS\nhomeland/~NgS\nhomeless/~JpNg\nhomelessness/~Nmg\nhomelike/J\nhomeliness/Nmg\nhomely/J>^p\nhomemade/~J\nhomemaker/NSg\nhomemaking/Nmg\nhomeopath/N0g\nhomeopathic/JN\nhomeopaths/N9\nhomeopathy/Ng\nhomeostasis/Ng\nhomeostatic/J\nhomeowner/~NgS\nhomepage/~NgS\nhomer/~NgVGd\nhomeroom/NgS\nhomeschooling/Nmg\nhomesick/Jp\nhomesickness/Ng\nhomespun/JNg\nhomestead/~NSgVd>GZ\nhomesteader/Ng\nhomestretch/NgS\nhometown/~NgS\nhomeward/JS\nhomework/~Ng>GZ\nhomewrecker/NSg\nhomey/NSgJp\nhomeyness/Ng\nhomicidal/J\nhomicide/~NwgS\nhomie/NgS\nhomier/Jc\nhomiest/Ju\nhomiletic/J\nhomily/~NSg\nhominid/NSgJ\nhominoid/NS\nhominy/Ng\nhomo/~NgSJ(\nhomoerotic/J\nhomogeneity/Ng\nhomogeneous/~JY\nhomogenisation/Ng!_₹\nhomogenise/VdSG!_₹\nhomogenization/Ng\nhomogenize/VdSG\nhomograph/Ng\nhomographs/N\nhomologous/~J\nhomology/~N\nhomonym/NSg\nhomophobia/~Ng\nhomophobic/~JN\nhomophone/NgS\nhomosexual/~JNSg\nhomosexuality/~Ng\nhon/~NSg^Gd>Z\nhoncho/NgSV\nhone/~NgSV\nhoner/NgV\nhonest/~JY^VE\nhonester/Jc\nhonesty/~NmgE\nhoney/~NwSgJVGd\nhoneybee/NSg\nhoneycomb/~NwgSVdG\nhoneydew/NSgJ\nhoneylocust/Ng\nhoneymoon/~NgSVGd>Z\nhoneymooner/Ng\nhoneypot/NS\nhoneysuckle/NSg\nhonk/Vd>GSNgZ\nhonker/Ng\nhonky/~NSg\nhonor/~Nw☁SgVGdEB<\nhonorableness/Ng<\nhonorably/RyE<\nhonorarily/Ry\nhonorarium/NgS\nhonorary/~JN\nhonoree/NSg<\nhonorer/NSg<\nhonorific/~NgSJQ\nhonour/NwgSVdGEB!@_₹\nhonourableness/Ng!@_₹\nhonourably/RyE!@_₹\nhonouree/NSg!@_₹\nhonourer/NSg!@_₹\nhooch/Nwg\nhood/~NgSVdGJ\nhoodie/NgS\nhoodlum/NSg\nhoodoo/~NgSVdG\nhoodwink/VdGSN\nhooey/Ng\nhoof/~NgSVd>GZ\nhook/~NSVdGU\nhook up/V/\nhook's\nhookah/Ng\nhookahs/N\nhooker/~NgS\nhookup/NgS\nhookworm/NgS\nhooky/NgJ\nhooligan/~NgS\nhooliganism/Nmg\nhoop/~NgSVdG\nhoopla/Ng\nhooray/NV\nhoosegow/NSg\nhoot/NgSVd>GZ\nhootenanny/NSg\nhooter/Ng\nhoover/~NSVdG\nhooves/V9\nhop/~NSgVGd\nhope/~VSNwg\nhopeful/~JYpNSg\nhopefulness/Ng\nhopeless/~JYp\nhopelessness/Ng\nhopped/VtTJ\nhopper/~NgS\nhopping/~NV6J\nhopscotch/NgSVdG\nhora/~NgS\nhorde/~NSgVdG\nhorehound/NSg\nhorizon/~NSg\nhorizontal/~JYNSg\nhormonal/~J\nhormone/~NSgV\nhorn/~NgSVd\nhornbeam/N\nhornblende/Ng\nhornet/~NgS\nhornless/J\nhornlike/J\nhornpipe/NgSV\nhorny/J^>\nhorologic/J\nhorological/J\nhorologist/NgS\nhorology/Ng\nhoroscope/NSg\nhorrendous/JY\nhorrible/~NJp\nhorribleness/Ng\nhorribly/~Ry\nhorrid/JY\nhorrific/~JQ\nhorrify/VdSG\nhorrifying/V6JY\nhorror/~NwgS\nhorse/~NSVdGU\nhorse's\nhorseback/~Nmg\nhorsebox/NS\nhorseflesh/NmgJ\nhorsefly/NSg\nhorsehair/Ng\nhorsehide/Nmg\nhorselaugh/N0g\nhorselaughs/N9\nhorseless/J\nhorseman/~N0g\nhorsemanship/Nmg\nhorsemen/~N9\nhorseplay/NgV\nhorsepower/~Ng\nhorseradish/NwgS\nhorseshit/Nx\nhorseshoe/~NSgVd\nhorseshoeing/V\nhorsetail/NSg\nhorsetrading/NV\nhorsewhip/NSgV\nhorsewhipped/VtT\nhorsewhipping/V6N\nhorsewoman/N0g\nhorsewomen/N9\nhorsey/JN\nhorsier/Jc\nhorsiest/Ju\nhortatory/JN\nhorticultural/~J\nhorticulturalist/NgS\nhorticulture/~Nmg\nhorticulturist/NgS\nhosanna/NSgV\nhose/~NgSVGd\nhosepipe/NSV\nhosier/NgS\nhosiery/~Nmg\nhosp/N\nhospholipase\nhospice/~NwgS\nhospitable/Ji\nhospitably/Ryi\nhospital/~NSgJ\nhospitalisation/NSg!_₹\nhospitalise/VdSG!_₹\nhospitality/~Nmg\nhospitalization/~NwSg\nhospitalize/VdSG\nhost/~NgSVdG\nhostable/J\nhostage/~NgSV\nhostel/~NgSVGd>Z\nhosteler/Ng\nhostelry/NSg\nhostess/~NgSVdG\nhostile/~JYNgS\nhostilities/~N9g\nhostility/~N0wSg\nhostler/NgS\nhot/~JYpVSN\nhotbed/NgS\nhotblooded/J\nhotbox/NgSV\nhotcake/NSg\nhotel/~NSg\nhotelier/NgS\nhotfoot/NgSJVdG\nhothead/NSgd\nhotheaded/JYp\nhotheadedness/Nmg\nhothouse/NSgV\nhotkey/NSV\nhotline/NSg\nhotlink/NS\nhotness/Nmg\nhotplate/NSg\nhotpot/NwgS\nhots/NgVh\nhotshot/JNgSV\nhotspot/NgS\nhotted/VtT\nhotter/~JcNV\nhottest/~Ju\nhottie/NgS\nhotting/NV6\nhound/~NSgVGd\nhour/~NgS\nhourglass/~NgS\nhouri/NSg\nhourly/JR8\nhouse/~NSVdGr\nhouse's\nhouseboat/NSg\nhousebound/J\nhouseboy/NSg♂\nhousebreak/V>SGZ\nhousebreaker/Ng\nhousebreaking/NgV\nhousebroke/V\nhousebroken/J\nhouseclean/VdSG\nhousecleaning/NgV\nhousecoat/NSg\nhousefly/NSg\nhouseful/NSg\nhousehold/~NSgJ>Z\nhouseholder/~NgS\nhousehusband/NSg\nhousekeeper/~NgS\nhousekeeping/~Nmg\nhouselights/N9g\nhousemaid/~NSgV\nhouseman/N0g♂\nhousemaster/NS\nhousemate/NSg\nhousemen/N9♂\nhousemistress/NS♀\nhousemother/NSg♀\nhouseparent/NSg\nhouseplant/NgS\nhouseproud/J\nhouseroom/N\nhousetop/NSg\nhousewares/Ng\nhousewarming/NSg\nhousewife/~N0g♀VY\nhousewives/~N9♀\nhousework/Ng\nhousing/~NwgSV\nhove/~V\nhovel/NSgV\nhover/~VGdSN\nhoverboard/NgSV\nhovercraft/NgS09    # singular and plural, also has a plural in -s\nhow/~CNSg\nhow come/R\nhow'd/\nhow're/\nhowbeit/C\nhowdah/Ng\nhowdahs/N\nhowdy/VN\nhowever/~C\nhowitzer/~NSgV\nhowl/NgSVd>GZ\nhowler/Ng\nhowsoever/\nhoyden/NgSJV\nhoydenish/J\nhp/~N\nht/~N\nhuarache/NSg\nhub/~NOSg\nhubbub/NSgV\nhubby/NSgJ\nhubcap/NSg\nhubless/J\nhubris/Nmg\nhuckleberry/~NwSgV\nhuckster/NSgVGd\nhucksterism/Nmg\nhuddle/NSgVdGJ\nhue/~NwSgd\nhuff/~NgSVdG\nhuffily/Ry\nhuffiness/Nmg\nhuffy/J>^p\nhug/~NSgV>^\nhuge/~JYp\nhugeness/Nmg\nhugged/VtT\nhugging/V6N\nhuh/~\nhula/~NgSV\nhulk/~NgSVG\nhull/~NgSVd>GZ\nhullabaloo/NSgV\nhuller/Ng\nhum/~NSgV\nhuman/~JY^>pNSgV\nhumane/~JYp\nhumaneness/Nmg\nhumanhood/Nmg\nhumanisation/Nge!_₹\nhumanise/VdSGe!_₹\nhumaniser/NSg!_₹\nhumanism/~Nmg\nhumanist/~NSgJ\nhumanistic/~J\nhumanitarian/~JNgS\nhumanitarianism/Nmg\nhumanities/~Ng\nhumanity/~NSgi\nhumanization/Nge\nhumanize/VdSGe\nhumanizer/NSg\nhumankind/~Nmg\nhumanness/Nmg\nhumanoid/~JNSg\nhumble/~J^>pNSVdGZz\nhumbleness/Nmg\nhumbler/NgJ\nhumbly/Ry\nhumbug/~NSgV\nhumbugged/VtT\nhumbugging/NV6\nhumdinger/NgS\nhumdrum/JNg\nhumeral/JN\nhumeri/N\nhumerus/~Ng\nhumid/~JY\nhumidification/Ng\nhumidifier/Nge\nhumidify/VGd>SeZ\nhumidity/~Ng\nhumidor/NSg\nhumiliate/VdSGnX\nhumiliating/~JYVN\nhumiliation/~Ng\nhumility/~Ng\nhummed/VtT\nhummer/~NSg\nhumming/V6JN\nhummingbird/~NSg\nhummock/NSg\nhummocky/J\nhummus/~Ng\nhumongous/J\nhumor/~Nw☁SgVdG<\nhumoresque/N\nhumorist/~NgS<\nhumorless/JYp<\nhumorlessly/Ry<\nhumorlessness/Ng<\nhumorous/~JYp\nhumorousness/Ng\nhumour/Nw☁SgVGd!@_₹\nhumourist/NSg!@_₹\nhumourless/JYp!@_₹\nhumourlessly/Ry!@_₹\nhumourlessness/Ng!@_₹\nhump/~NgSVdG\nhumpback/NgSVd\nhumph/VdG\nhumphs/V\nhumus/Nwg\nhunch/NgSVdG\nhunchback/NSgd\nhundred/~NSgH\nhundredfold/JV\nhundredth/~JN0g\nhundredths/N9\nhundredweight/NSg\nhung/~VtTJ\nhunger/~NmSgVdG\nhungover/J\nhungrily/Ry\nhungriness/Nmg\nhungry/~J>^p\nhunk/NgS>Z\nhunker/VdGN\nhunky/J>^N\nhunt/~Vd>GSNgZ\nhunter/~Ng\nhunting/~NmgV\nhuntress/NgS\nhuntsman/~Ng\nhuntsmen/9\nhurdle/~NSgVd>GZ\nhurdler/Ng\nhurdling/NgV\nhurl/Vd>GSNgZ\nhurler/~Ng\nhurling/~NgV\nhurrah/NgVGd\nhurrahs/NV\nhurray/NgSVGd\nhurricane/~NgSV\nhurried/JYVU\nhurry/~NSgVdG\nhurt/~VbtTGSJNg\nhurtful/JYp\nhurtfulness/Nmg\nhurtle/VdGSN\nhusband/~NgSVGd\nhusbandman/Ng\nhusbandmen/9\nhusbandry/~Nmg\nhush/~VdGSNg\nhusk/NgSVd>GZ~\nhusker/Ng\nhuskily/Ry\nhuskiness/Ng\nhusky/~J>^pNSg\nhussar/NSg\nhussy/NSg\nhustings/Ng\nhustle/~Vd>GSNgZ\nhustler/~Ng\nhut/~NSgV\nhutch/NgSV\nhuzzah/NgVdG\nhuzzahs/N\nhwy/~N\nhyacinth/Ng\nhyacinths/N\nhybrid/~NSgJ\nhybridisation/NwSg!_₹\nhybridise/VdSG!_₹\nhybridism/Ng\nhybridization/~Ng\nhybridize/VdSG\nhydra/~NSg\nhydrangea/NSg\nhydrant/~NgS\nhydrate/NSVGden\nhydrate's\nhydration/Nge\nhydraulic/~JVSQ\nhydraulics/Ng\nhydro/~JNg\nhydrocarbon/~NgS\nhydrocephalus/Ng\nhydrochloride/N\nhydrocortisone/N\nhydrodynamic/JS\nhydrodynamics/Ng\nhydroelectric/~JQ\nhydroelectricity/Ng\nhydrofoil/NgSV\nhydrogen/~Nmg\nhydrogenate/VGdSe\nhydrogenation/Ng\nhydrogenous/J\nhydrolock/NgSVGd\nhydrologist/NgS\nhydrology/~Ng\nhydrolyse/VdSG!_₹\nhydrolyses/N9V\nhydrolysis/~N0g\nhydrolyze/VdSG\nhydrometer/NSg\nhydrometry/Ng\nhydrophilic/J\nhydrophobia/Nmg\nhydrophobic/~J\nhydrophone/NSg\nhydroplane/VGdSNg\nhydroponic/JSQ\nhydroponics/Ng\nhydropower/~Nmg\nhydrosphere/Ng\nhydrotherapy/Ng\nhydrothermal/J\nhydrous/J\nhydroxide/~NSg\nhyena/NSg\nhygiene/~Ng\nhygienic/JUQ\nhygienist/NgS\nhygrometer/NSg\nhying/VN\nhymen/~NSg\nhymeneal/JN\nhymn/~NgSVdG\nhymnal/~NgSJ\nhymnbook/NSg\nhype/~NmgSVGd>J\n# hyper             # prefixes that are not also words in their own right don't belong in the dictionary\nhyperactive/J\nhyperactivity/~Ng\nhyperaggressive/J\nhyperbola/NSg\nhyperbolæ/N9\nhyperbolae/N9\nhyperbole/~N0g\nhyperbolic/~JQ\nhypercar/NgS\nhyperconservative/J\nhypercorrect/JVSGd\nhypercorrection/NwgS\nhypercorrectness/Nm\nhypercritical/JY\nhypercube/NgS\nhyperfast/J\nhyperfixation/Nmg\nhyperglycemia/Ng\nhyperinflate/VGdSNn\nhyperlink/NSgVGd\nhypermarket/NgS\nhypermedia/Nmg\nhypernetwork/NSg\nhyperparameter/NgS\nhyperparathyroidism/N\nhyperplane/N\nhyperscale/J\nhypersensitive/Jp\nhypersensitiveness/Ng\nhypersensitivity/~NSg\nhypersexualise/VSdG!_₹\nhypersexualize/VSdG\nhyperspace/NmSV\nhypertension/~Ng\nhypertensive/JNSg\nhypertext/Ng\nhyperthyroid/Jg\nhyperthyroidism/Ng\nhypertrophic/J\nhypertrophy/NSgVdG\nhyperventilate/VGdSn\nhyperventilation/Ng\nhypervigilant/J\nhypervisor/NgS\nhyphen/~NgSVdGC\nhyphenate/VdGSNgXn\nhyphenation/Ng\nhypnagogic/J\nhypnoses/N\nhypnosis/~Ng\nhypnotherapist/NS\nhypnotherapy/Ng\nhypnotic/JNSgQ\nhypnotise/VGdS!_₹\nhypnotism/Ng\nhypnotist/NgS\nhypnotize/VGdS\nhypo/NgSV\nhypoallergenic/J\nhypochondria/Nmg\nhypochondriac/JNSg\nhypocrisy/~NSg\nhypocrite/NgS\nhypocritical/JY\nhypodermic/JNgS\nhypoglycemia/Ng\nhypoglycemic/JNSg\nhypomanic/J\nhypotenuse/NgS\nhypothalami/N\nhypothalamus/~Ng\nhypothermia/~Ng\nhypotheses/~N9\nhypothesis/~N0g\nhypothesise/V!_₹\nhypothesize/VdSG\nhypothetical/~JYNS\nhypothyroid/Jg\nhypothyroidism/Ng\nhyssop/Ng\nhysterectomy/NSg\nhysteresis/N\nhysteria/~Ng\nhysteric/JNSg\nhysterical/~JY\nhysterics/Ng\ni/~\ni.e./~\niMac/NgS\niOS/Og\niPad/NgS\niPhone/NgS\niPod/NgS\niTunes/Ng\niamb/NgS\niambi/N\niambic/JNSg\niambus/NgS\nibex/NgS\nibid/~\nibidem\nibis/~NgS\nibuprofen/NgV\nice/~NwSVdGe\nice cream/NmgS\nice's\niceberg/NSg\niceboat/NSgV\nicebound/J\nicebox/NgSJ\nicebreaker/~NSg\nicecap/NSg\niceman/~N0g\nicemen/N9\nichthyologist/NgS\nichthyology/Ng\nicicle/NSg\nicily/Ry\niciness/Ng\nicing/~NSgV\nicky/J>^\nicon/~NgS\niconic/~J\niconicity/Nmg\niconoclasm/Ng\niconoclast/~NSg\niconoclastic/J\niconography/~Nwg\nictus/Ng\nicy/~J^>p\nid/~NSgIY\nidea/~NgS\nideal/~JYNSg\nidealisation/NwSg!_₹\nidealise/VdSG!_₹\nidealism/~Nmg\nidealist/NSg\nidealistic/~JQ\nidealization/NgS\nidealize/VdSG\nidealogue/NgS\nideate/VdSGn\nidem/~I\nidempotency/Nmg\nidempotent/JN\nidentical/~JYN\nidentifiable/~JU\nidentification/~Nmg\nidentified/~VU\nidentify/~VGd>SZnX\nidentikit/NSJ\nidentity/~NSg\nideogram/NSg\nideograph/N0g\nideographs/N9\nideological/~JY\nideologist/NSg\nideologue/NgS\nideology/~NwSg\nides/~Ng\nidiocy/NwSg\nidiom/~NwSg\nidiomatic/JNUQ\nidiopathic/~J\nidiosyncrasy/NwSg\nidiosyncratic/~JQ\nidiot/~NSgJ\nidiotic/JQ\nidle/~J^>pVGdSNgZ\nidleness/Nmg\nidler/~NgJ\nidol/~NgS\nidolater/NSg\nidolatress/NgS\nidolatrous/J\nidolatry/~Nmg\nidolisation/Ng!_₹\nidolise/VGdS!_₹\nidolization/Nmg\nidolize/VGdS\nidyll/NSg\nidyllic/~JNQ\nif/~CNSg\niffiness/Nmg\niffy/J>^p\nigloo/NSg\nigneous/~J\nignitable/J\nignite/~VGdSr\nignition/~NwgS\nignoble/JV\nignobly/Ry\nignominious/JY\nignominy/NSg\nignoramus/NgSV\nignorance/~Ng\nignorant/~JYN\nignore/~VGdS\niguana/~NgS\nii/~\niii/~\n# il                # prefixes that are not also words in their own right don't belong in the dictionary\nilea/N\nileitis/Ng\nileum/Ng\nilia/~N9\nilium/N0gS\nilk/JNSg\nill/~JpNSgV\nillegal/~JYNgS\nillegality/NSg\nillegibility/Ng\nillegible/J\nillegibly/Ry\nillegitimacy/~Nmg\nillegitimate/~JYNV\nilliberal/JYN\nilliberalism/Nmg\nilliberality/Nmg\nillicit/~JYpN\nillicitness/Nmg\nillimitable/J\nilliquid/J\nilliteracy/Nmg\nilliterate/~JYNgS\nillness/~NgS\nillogical/JY\nillogicality/Nmg\nilluminate/~VGdSNJnX\nilluminating/~JYV\nillumination/~Nmg\nillumine/VdSGB\nillus/~v\nillusion/~NwgSE\nillusionist/NSg\nillusory/~J\nillustrate/~VGdSnvX\nillustration/~NwSg\nillustrative/~JY\nillustrator/~NSg\nillustrious/~JYp\nillustriousness/Nmg\n# im                # prefixes that are not also words in their own right don't belong in the dictionary\nimage/~NwSgVdG\nimager/NgS\nimagery/~Nmg\nimaginable/JU\nimaginably/RyU\nimaginal/J\nimaginary/~JN\nimagination/~NgS\nimaginative/~JYU\nimagine/~VdGSNBzr\nimago/~N0g\nimagoes/N9\nimam/~NgS\nimbalance/~NSgd\nimbecile/NgSJ\nimbecilic/J\nimbecility/NSg\nimbibe/VGd>SZ\nimbiber/Ng\nimbrication/Ng\nimbroglio/NSg\nimbue/VdSG\nimitable/Ji\nimitate/~VdSGnvX\nimitation/~NwSg\nimitative/JYp\nimitativeness/Ng\nimitator/NSg\nimmaculate/~JYp\nimmaculateness/Ng\nimmanence/Ng\nimmanency/Ng\nimmanent/JY\nimmaterial/JYpN\nimmateriality/Ng\nimmaterialness/Ng\nimmature/~JYN\nimmaturity/Ng\nimmeasurable/JN\nimmeasurably/Ry%\nimmediacies/Ng\nimmediacy/NSg\nimmediate/~JYp\nimmediateness/Ng\nimmemorial/JY\nimmense/~JYN\nimmensity/NSg\nimmerse/VdSGJXnv\nimmersible/J\nimmersion/~Ng\nimmigrant/~NSgJ\nimmigrate/VdSGn\nimmigration/~NgS\nimminence/Ng\nimminent/~JY\nimmobile/~JN\nimmobilisation/Ng!_₹\nimmobilise/VGd>SZ!_₹\nimmobility/Ng\nimmobilization/Ng\nimmobilize/VGd>SZ\nimmoderate/JY\nimmodest/JY\nimmodesty/Nmg\nimmolate/VdSGn\nimmolation/Nmg\nimmoral/~JY\nimmorality/~NSg\nimmortal/~JYNgS\nimmortalise/VdSG!_₹\nimmortality/~Ng\nimmortalize/VdSG\nimmovability/Ng\nimmovable/JN\nimmovably/Ry\nimmune/~JNV\nimmunisation/NgS!_₹\nimmunise/VGdS!_₹\nimmunity/~NwgS\nimmunization/NSg\nimmunize/VGdS\nimmunodeficiency/Ng\nimmunodeficient/J\nimmunoglobulin/NS\nimmunologic/J\nimmunological/JN\nimmunologist/NgS\nimmunology/~Ng\nimmure/VdGSN\nimmutability/Nmg\nimmutable/~JN\nimmutably/Ry\nimp/~V>SNg\nimpact/~NSgVdGf\nimpair/VdGSJNL\nimpaired/~JVNU\nimpairment/~NgS\nimpala/~NSg\nimpale/VdSGL\nimpalement/Ng\nimpalpable/J\nimpalpably/Ry\nimpanel/VSdG\nimpanelled/VtT!_₹\nimpanelling/V6N!_₹\nimpart/~VSdG\nimpartial/~JY\nimpartiality/Ng\nimpassably/Ry\nimpasse/NSgBv\nimpassibility/Ng\nimpassible/J\nimpassibly/Ry\nimpassioned/J\nimpassive/JYp\nimpassiveness/Nmg\nimpassivity/Ng\nimpasto/NgV\nimpatience/NmgS\nimpatiens/Ng\nimpatient/~JY\nimpeach/VGd>SZBL\nimpeachable/JU\nimpeacher/Ng\nimpeachment/~NwSg\nimpeccability/Ng\nimpeccable/J\nimpeccably/Ry\nimpecunious/JYp\nimpecuniousness/Ng\nimpedance/~Ng\nimpede/~VdSG\nimpeded/~VtTU\nimpediment/~NSg\nimpedimenta/Ng\nimpel/VS\nimpelled/VtT\nimpeller/NgS\nimpelling/V6\nimpend/VSdG\nimpenetrability/Ng\nimpenetrable/JN\nimpenetrably/Ry\nimpenitence/Ng\nimpenitent/JYN\nimperative/~JYNSg\nimperceptibility/Ng\nimperceptible/J\nimperceptibly/Ry\nimperceptive/J\nimperf/JN\nimperfect/~JYpNSgV\nimperfection/NwgS\nimperfective/NSgJ\nimperfectness/Ng\nimperial/~JYNgS\nimperialism/~Ng\nimperialist/~JNSg\nimperialistic/JQ\nimperil/VGSdL\nimperilled/VtT!@_₹\nimperilling/V6N!@_₹\nimperilment/Ng\nimperious/JYp\nimperiousness/Ng\nimperishable/JN\nimperishably/Ry\nimpermanence/Ng\nimpermanent/JY\nimpermeability/Ng\nimpermeable/J\nimpermeably/Ry\nimpermissible/J\nimpersonal/JYN\nimpersonate/VGdSnX\nimpersonation/~NgS\nimpersonator/~NSg\nimpertinence/NgS\nimpertinent/JYN\nimperturbability/Nmg\nimperturbable/J\nimperturbably/Ry\nimpervious/JY\nimpetigo/Ng\nimpetuosity/Nmg\nimpetuous/JYp\nimpetuousness/Nmg\nimpetus/~NgS\nimpiety/NSg\nimpinge/VdSGL\nimpingement/Ng\nimpious/JYp\nimpiousness/Nmg\nimpish/JYp\nimpishness/Nmg\nimplacability/Nmg\nimplacable/J\nimplacably/Ry\nimplant/~VGdSNgB\nimplantation/Ng\nimplausibility/NSg\nimplausible/~J\nimplausibly/Ry\nimplement/~VGd>SNgBr\nimplementable/JU\nimplementation/~NwSg\nimplemented/~VtTU\nimplicate/VdGSN\nimplication/~NwgS\nimplicit/~JYp\nimplicitness/Nmg\nimplode/VdSG\nimploration/Nmg\nimplore/VdGSN\nimploring/V6NY\nimplosion/~NgS\nimplosive/JN\nimply/~VdSGXn\nimpolite/JYp\nimpoliteness/NmgS\nimpolitic/J\nimponderable/JNgS\nimport/~NwSgVGd>ZB\nimportance/~Nmg\nimportant/~JY\nimportation/~NwgS\nimporter/~NgS\nimportunate/JYV\nimportune/VGdSJ\nimportunity/Ng\nimpose/~VdGSNr\nimposer/NgS\nimposing/~VJU\nimposingly/Ry\nimposition/~NgS\nimpossibility/~NSg\nimpossible/~JNS\nimpossibly/Ry\nimpost/NSg\nimposter/Ng@\nimpostor/~NSg\nimposture/NgS\nimpotence/Nmg\nimpotency/Nmg\nimpotent/JYN\nimpound/VdGSN\nimpoundment/NSg\nimpoverish/VdSGL\nimpoverishment/Ng\nimpracticability/N\nimpracticable/JN\nimpracticably/Ry\nimpractical/~JY\nimpracticality/Ng\nimprecate/VdSGXn\nimprecation/Ng\nimprecise/JYpn\nimpreciseness/Ng\nimprecision/Ng\nimpregnability/Ng\nimpregnable/J\nimpregnably/Ry\nimpregnate/VGdSn\nimpregnation/Ng\nimpresario/~NSg\nimpress/~VdGSNgv\nimpressed/~JVtTU\nimpressibility/Ng\nimpressible/J\nimpression/~NSgVB\nimpressionability/Ng\nimpressionism/~Nmg\nimpressionist/~NSg\nimpressionistic/J\nimpressive/~JYp\nimpressiveness/Nmg\nimprimatur/NSg\nimprint/~NgSVd>GZ\nimprinter/Ng\nimprison/VSdGL\nimprisonment/~NSg\nimprobability/NSg\nimprobable/~J\nimprobably/Ry\nimpromptu/~JNSg\nimproper/~JYV\nimpropriety/NSg\nimprove/~VGdSBL\nimproved/~JVU\nimprovement/~NwgS\nimprovidence/Nmg\nimprovident/JY\nimprovisation/~NwSg\nimprovisational/~J\nimprovise/~VGd>SZ\nimproviser/NgS\nimprudence/Nmg\nimprudent/JY\nimpudence/Nmg\nimpudent/JY\nimpugn/VGSd>Z\nimpugner/Ng\nimpulse/~NgSVGdnv\nimpulsion/Ng\nimpulsive/~JYpN\nimpulsiveness/Ng\nimpulsivity/N\nimpunity/~Nmg\nimpure/~JY^>V\nimpurity/~NSg\nimputation/NSg\nimpute/VdSGB\nin/~PJR(rg          # removed `4`, verb senses are obsolete, `NS`, noun sense is marginal\nin addition         # dictionaries don't list this with a POS, or use 'phrase'\nin addition to/P\nin-depth/J\nin-memory/J\nin personam/J\nin situ/JR\ninaccuracy/NwgS\ninaction/~Nmg\ninadequacy/NS\ninadvertence/Ng\ninadvertent/JY\ninalienability/Ng\ninalienably/Ry\ninamorata/NSg\ninane/J>Y^N\ninanimate/~JYpNV\ninanimateness/Ng\ninanity/NSg\ninappropriate/~JY\ninarticulate/JYN\ninasmuch/\ninaudible/J\ninaugural/~JNSg\ninaugurate/VGdSJXn\ninauguration/~Ng\ninboard/JNgSV\ninbound/~JVN\ninbox/NgSV\ninbreed/VS\ninc/~J^NVGd\nincalculably/Ry\nincandescence/Nmg\nincandescent/~JYN\nincantation/NSg\nincapacitate/VGdSn\nincarcerate/VdSGJXn\nincarceration/~Nmg\nincarnadine/JNSVdG\nincarnate/~JVGdSrXn\nincarnation/~Ngr\nincel/NgS\nincendiary/~JNSg\nincense/~NwgSVGd\nincentive/~NwgSE\nincentivization/NwSg\nincentivize/VGdSE\ninception/~NwSg\nincessant/~JY\nincest/~NmgV\nincestuous/~JYp\nincestuousness/Nmg\ninch/~NgSVdGJ\ninchoate/JNV\ninchworm/NSgV\nincidence/~NSg\nincident/~NSgJ\nincidental/~JYNgS\nincinerate/VdSGJn\nincineration/Ng\nincinerator/NgS\nincipience/Ng\nincipient/JYN\nincise/VGdSXnv\nincision/~Ng\nincisive/JYp\nincisiveness/Ng\nincisor/~NgS\nincitement/NgS\ninciter/NgS\nincl/~P\ninclement/J\ninclination/~N0wgE\ninclinations/~N9\nincline/~VGdSNE\nincline's\ninclude/~VGdSN\ninclusion/~NgS\ninclusive/~JYp\ninclusiveness/Nmg\ninclusivity/NgS\nincognito/~JNgS\nincombustible/JN\nincome/NwgS\nincommode/VGdJN\nincommodious/J\nincommunicado/J\nincompatibility/~NwS\nincompetent/~JNgS\nincomplete/~JYN\ninconceivability/Ng\nincongruous/JYp\nincongruousness/Ng\ninconsequence/Nmg\ninconsolably/Ry\ninconstant/JY\nincontestability/Nmg\nincontestably/Ry\nincontinent/JN\nincontrovertibly/Ry\ninconvenience/NVGd\nincorporate/~VdSGJrn\nincorporated/~JVtTU\nincorporation/~Ngr\nincorporeal/J\nincorrect/~JYN\nincorrigibility/Nmg\nincorrigible/JN\nincorrigibly/Ry\nincorruptibly/Ry\nincreasing/~JYV6N\nincreasingly/R\nincrement/~NSgVdG\nincremental/~JY\nincrementalism/N\nincrementalist/NSg\nincriminate/VGdSn\nincrimination/Ng\nincriminatory/J\nincrustation/NSg\nincubate/VGdSn\nincubation/~Ng\nincubator/~NSg\nincubus/~NgS\ninculcate/VdSGn\ninculcation/Ng\ninculpate/VdSG\ninculpatory/J\nincumbency/NSg\nincumbent/~JNSg\nincunabula/N\nincunabulum/Ng\nincur/~VSB\nincurable/JNgS\nincurably/Ry\nincurious/J\nincurred/~VtT\nincurring/V6\nincursion/~NgS\nind/~\nindebted/~VJp\nindebtedness/Ng\nindeed/~R%          # also an adverb of affirmation, emphasis, and degree\nindefatigable/J\nindefatigably/Ry\nindefeasible/J\nindefeasibly/Ry\nindefinably/Ry\nindefinitely/Ry\nindelible/J\nindelibly/Ry\nindemnification/Ng\nindemnify/VGdSXn\nindemnity/~NSg\nindentation/~NgS\nindention/Ng\nindenture/NVdG\nindescribably/Ry\nindestructibly/Ry\nindeterminably/Ry\nindeterminacy/Ng\nindeterminate/~JYN\nindex/~NgSVGd>Z\nindexation/NSg\nindexer/Ng\nindicate/~VdSGXnv\nindication/~Ng\nindicative/~JYNSg\nindicator/~NgS\nindict/VGdSBL\nindictment/~NSg\nindie/~JNS\nindigence/Nmg\nindigenous/~J\nindigent/JYNSg\nindignance/Ng\nindignant/JY\nindignation/~Ng\nindigo/~NgJ\nindirect/~JYNV      # noun senses: 1) type of const in finace; 2) type of radiator\nindiscipline/N\nindiscreet/JY\nindiscretion/NS\nindiscriminate/~JY\nindispensability/Ng\nindispensable/~JNgS\nindispensably/Ry\nindissolubility/N\nindissolubly/Ry\nindistinguishably/Ry\nindite/VGdSN\nindium/Nmg\nindividual/~NgSJY\nindividualisation/Ng!_₹\nindividualise/VGdS!_₹\nindividualism/~Ng\nindividualist/NgS\nindividualistic/JQ\nindividuality/~Ng\nindividualization/Ng\nindividualize/VGdS\nindividuate/VdSGJn\nindividuation/Ng\nindivisibly/Ry\nindoctrinate/VGdSn\nindoctrination/Ng\nindolence/Ng\nindolent/JY\nindomitable/~J\nindomitably/Ry\nindubitable/JN\nindubitably/R       # adverb of certainty/opinion aka modal adverb\ninduce/~Vd>SGZL\ninducement/NSg\ninducer/Ng\ninduct/VdGv\ninductance/~Ng\ninductee/~NSg\ninduction/~NwgS\ninductive/~JY\ninductor/NgS\nindulge/~VdSG\nindulgence/~NwSgV\nindulgent/JY\nindustrial/~JYN\nindustrialisation/Ng!_₹\nindustrialise/VdSG!_₹\nindustrialism/Ng\nindustrialist/~NSg\nindustrialization/~Nge\nindustrialize/VdSGr\nindustrious/~JYp\nindustriousness/Nmg\nindustry/~NwSg\nindwell/VSG\ninebriate/NgSVGdJn\ninebriation/Nmg\ninedible/JN\nineffability/Ng\nineffable/J\nineffably/Ry\ninelastic/~J\nineligible/~JNgS\nineligibly/Ry\nineluctable/J\nineluctably/Ry\ninept/~JYp\nineptitude/Ng\nineptness/Ng\ninequality/~NS\ninert/~JYpNV\ninertia/~Ng\ninertial/~J\ninertness/Ng\ninescapable/J\ninescapably/Ry\ninestimably/Ry\ninevitability/NgS\ninevitable/~JNg\ninevitably/~Ry\ninexact/JY\ninexhaustibly/Ry\ninexorability/N\ninexorable/J\ninexorably/Ry\ninexpedient/J\ninexperience/Nmg\ninexpert/JYN\ninexpiable/J\ninexplicably/~Ry\ninexpressibly/Ry\ninexpressive/J\ninextricably/Ry\ninf/~\ninfallible/~NJ\ninfamy/NSg\ninfancy/~Ng\ninfant/~NgSV\ninfanticide/NwgS\ninfantile/~J\ninfantilize/VdSG\ninfantry/~NwSg\ninfantryman/~N0g\ninfantrymen/~N9\ninfarct/NgS\ninfarction/~NwgS\ninfatuate/VdGSJNXn\ninfatuation/~NwgS\ninfect/~VSdGJrE\ninfected/~VJNU\ninfection/~NwSgr\ninfectious/~JYp\ninfectiousness/Nmg\ninfelicitous/J\ninfer/VdSG\ninference/~NSg\ninferencing/Nmg\ninferential/J\ninferior/~JNgS\ninferiority/Ng\ninfernal/~JYN\ninferno/~NgS\ninferred/~VtT\ninferring/V6N\ninfest/VGdSJN\ninfestation/~NgS\ninfidel/JNgS\ninfidelity/~NS\ninfiltrator/NSg\ninfinite/~JNgv\ninfinitesimal/~JYNSg\ninfinitival/J\ninfinitive/~NgSJ\ninfinitude/Ng\ninfinity/~NwSg\ninfirm/~JV\ninfirmary/~NSg\ninfirmity/NwSg\ninfix/VGdSNg\ninflame/VdSG\ninflammable/JN\ninflammation/~NwSg\ninflammatory/~JN\ninflatable/~JNSg\ninflate/VdSGr\ninflation/~NmgE\ninflationary/J\ninflect/VSdG\ninflection/NwgS\ninflectional/J\ninflexion/NSg!_₹\ninflict/~VSdGv\ninfliction/Nmg\ninflow/~NSgV\ninfluence/~NwgSVGd\ninfluenced/~VJU\ninfluencer/NSg\ninfluential/~JYN\ninfluenza/~Nmg\ninfo/~Nmg\ninfographic/NSgJ\ninfomercial/NSg\ninform/~VJZ\ninformal/~JY\ninformant/~NSg\ninformatics/~Nm\ninformation/~NmgE\ninformational/~J\ninformative/~JYp\ninformativeness/Nmg\ninformed/~VJU\ninfotainment/Nmg\ninfra/~N\ninfrared/~NmgJ\ninfrasonic/J\ninfrastructural/J\ninfrastructure/~Nmg\ninfrequence/Ng\ninfrequent/~JY\ninfringement/~NwgS\ninfuriate/VGdSJ\ninfuriating/JYV6\ninfuser/NSg\ningenious/~JYp\ningeniousness/Nmg\ningenue/NSg\ningenuity/~Nmg\ningenuous/JYE\ningenuousness/Nmg\ningest/VdGSN\ningestion/~NwgS\ninglenook/NSg\ningot/NSgV\ningrain/VGJN\ningrate/JNSg\ningratiate/VGdSn\ningratiating/JYV\ningratiation/Ng\ningredient/~NgS\ningress/~NgSV\ninguinal/J\ninhabit/~VdG\ninhabitable/JU\ninhabitant/~NSgJ\ninhabited/~JpVtTU\ninhalant/JNSg\ninhalation/~NgS\ninhalator/NgS\ninhaler/NSg\ninharmonious/J\ninhere/VdSG\ninherent/~JY\ninherit/~VGSdE\ninheritance/~NgE\ninheritances/N\ninheritor/NSg\ninhibit/~VGSd\ninhibition/~NSwgE\ninhibitor/~NSg\ninhibitory/~J\ninhomogeneous/J\ninhuman/~JY\ninhumane/JY\ninimical/JY\ninimitably/Ry\niniquitous/JY\niniquity/NSg\ninit/VS\ninitial/~JYNSgVGd\ninitialisation/NgS!_₹\ninitialise/VdSG!_₹\ninitialised/VrU!_₹\ninitialism/~NgS\ninitialization/~NgS\ninitialize/VdSG\ninitialized/VrU\ninitialled/VtT!@_₹\ninitialling/V6!@_₹\ninitiate/~NgSVGdJXnv\ninitiated/~VU\ninitiation/~Ng\ninitiative/~JNSg\ninitiator/~NgS\ninitiatory/JN\ninitio\ninject/~VSdGB\ninjection/~NSg\ninjector/NSg\ninjunctive/NJ\ninjure/~Vd>SGZ\ninjured/~VtTU\ninjurer/Ng\ninjurious/J\ninjury/NwSg\nink/~NwSgVd\ninkblot/NSg\ninkiness/Ng\ninkjet/Ng\ninkling/NSgV\ninkstand/NSg\ninkwell/NgS\ninky/J>^p\ninland/~JNg\ninline/~JVdGSNg\ninmate/~NSg\ninmost/JN\ninn/~NSgVG>z\ninnards/Ng\ninnate/~JYpV\ninnateness/Ng\ninnermost/~JN\ninnersole/NSg\ninnerspring/J\ninnervate/VGdSn\ninnervation/Ng\ninning/~NgV6\ninnit/\ninnkeeper/NgS\ninnocence/~Ng\ninnocent/~JYNgS\ninnocuous/~JYp\ninnocuousness/Nmg\ninnovate/VdSGXnv\ninnovation/~NwgS\ninnovator/~NgS\ninnovatory/J\ninnuendo/NwSgV\ninnumerably/Ry\ninnumerate/JN\ninoculate/VGdSNr\ninoculation/~NgS\ninoperability/NgS\ninoperative/J\ninordinate/JY\ninorganic/~JN\ninositol/N\ninput/NwgSV\ninputting/V6\ninquire/~VGd>Z\ninquirer/~Ng\ninquiring/V6NJY\ninquiry/~NSg\ninquisition/~NgSV\ninquisitional/J\ninquisitive/JYp\ninquisitiveness/Ng\ninquisitor/~NSg\ninquisitorial/J\ninrush/NgSV\ninsane/~J^\ninsatiability/Ng\ninsatiably/Ry\ninscribe/VGd>Z\ninscriber/Ng\ninscription/~NgS\ninscrutability/Ng\ninscrutable/JpN\ninscrutableness/Ng\ninscrutably/Ry\ninseam/NSgV\ninsecticidal/J\ninsecticide/NwgS\ninsectivore/NgS\ninsectivorous/~J\ninsectoid/JNgS\ninsecure/~JY\ninseminate/VdSGn\ninsemination/Nmg\ninsensate/JNV\ninsensible/J\ninsensitive/~JY\ninseparable/~JNgS\ninsert/~VGdSNr\ninsert's\ninsertion/~Nw0Sgr\ninsertions/~N9\ninsetting/V6\ninshallah\ninshore/~J\ninside/~NSgJ>PZ\ninsider/~NgS\ninsidious/JYp\ninsidiousness/Nmg\ninsight/~NwgS\ninsightful/J\ninsignia/~NgS\ninsinuate/VGdSnvX\ninsinuation/NwSg\ninsinuator/NSg\ninsipid/JYp\ninsipidity/Nmg\ninsist/~VSGd\ninsistence/~Nmg\ninsistent/JY\ninsisting/~VY\ninsofar/~R\ninsole/NSgV\ninsolence/NmgV\ninsolent/JYN\ninsoluble/~JN\ninsolubly/Ry\ninsolvency/~NwgS\ninsomnia/~Nmg\ninsomniac/~NSgJ\ninsomuch/R\ninsouciance/Ng\ninsouciant/J\ninspect/~VGdSr\ninspection/~NwSg\ninspector/~NgS\ninspectorate/NgS\ninspiration/~NwgS\ninspirational/~JN\ninspiratory/J\ninspire/VdSG\ninspired/~JVU\ninspiring/~JVNU\ninst/~N\ninstability/~NS\ninstall/~V>dGSNUBZ\ninstallation/~NwgS\ninstaller/NgSU\ninstallment/~NSg\ninstalment/NgS!@_₹\ninstance/~NVGd\ninstant/~NgSJY>V\ninstantaneous/~JY\ninstantiate/VdSGnX\ninstar/~NV\ninstate/VGdSr\ninstead/~R\ninstigate/VdSGn\ninstigation/~Ngm\ninstigator/NgS\ninstil/VS!_₹\ninstillation/Ngm\ninstinct/~NgSJv\ninstinctive/JY\ninstinctual/J\ninstitute/~NgSVGd>JXZn\ninstituter/Ng\ninstitution/~Ng\ninstitutional/~JYN\ninstitutionalisation/Ng!_₹\ninstitutionalise/VdSG!_₹\ninstitutionalist/JNgS\ninstitutionalization/Ng\ninstitutionalize/VdSG\ninstr/N\ninstruct/~VdGSNJv\ninstructed/~VtTU\ninstruction/~NwgS\ninstructional/~JN\ninstructive/JYN\ninstructor/~NgS\ninstrument/~NgSVdG\ninstrumental/~JYNgS\ninstrumentalist/~NSg\ninstrumentality/Ng\ninstrumentation/~Ng\ninsubordinate/JN\ninsufferable/J\ninsufferably/Ry\ninsula/N\ninsular/~JN\ninsularity/Ng\ninsulate/VGdSn\ninsulation/~Ng\ninsulator/~NgS\ninsulin/~Ng\ninsult/~VdGSNg\ninsulting/~JYVN\ninsuperable/J\ninsuperably/Ry\ninsurance/~NwSg\ninsure/Vd>SGZB\ninsured/~JNSgV\ninsurer/~NgS\ninsurgence/NwSg\ninsurgency/~NSg\ninsurgent/~JNgS\ninsurmountably/Ry\ninsurrection/~NwSg\ninsurrectionist/NSgJ\nint/~JNV\nintact/~J\nintaglio/NgSV\ninteger/~NgS\nintegral/~JYNSg\nintegrate/~VGSdrEvn\nintegration/~NwgSEr\nintegrator/NSg\nintegrity/~Nmg\nintegument/NSg\nintel/~Nmg\nintellect/~NgS\nintellectual/~JYNgS\nintellectualise/VGdS!_₹\nintellectualism/Nmg\nintellectualize/VGdS\nintelligence/~NwSg\nintelligent/~JYN\nintelligentsia/~Nmg\nintelligibility/Nmg\nintelligible/~JU\nintelligibly/RyU\nintended/~JNSgV\nintense/~JY^>v\nintensification/Nmg\nintensifier/NgS\nintensify/Vd>SGZn\nintensity/~NmgS\nintensive/~JYpNgS\nintensiveness/Nmg\nintent/~NSgJYp\nintention/~NgSV\nintentional/~JYNU\nintentionality/Nmg  # From Phenomenology\nintentness/Ng\ninter/~VS(EL\ninter alia/R\ninteract/~VGdSNv\ninteraction/~NwSg\ninteractive/~JYN\ninteractivity/Nmg\ninterbred/V\ninterbreed/VGS\nintercede/VGdS\nintercept/~VGdSNg\ninterception/~NwgS\ninterceptor/~NSg\nintercession/~NSg\nintercessor/NgS\nintercessory/J\ninterchange/~VdGSNg\ninterchangeability/N\ninterchangeable/~JN\ninterchangeably/~Ry\nintercity/~JN\nintercollegiate/~JN\nintercom/NSgV\nintercommunicate/VdSGn\nintercommunication/Nmg\ninterconnect/~VGdSN\ninterconnectedness/Nmg\ninterconnection/~NwSg\nintercontinental/~J\nintercooler/NgS\nintercourse/~NmgV\nintercultural/~J\ninterdenominational/J\ninterdepartmental/J\ninterdependence/Ng\ninterdependent/JY\ninterdict/~NgSVGd\ninterdiction/~Nwg\ninterdimensional/J\ninterdisciplinary/~J\ninterest/~NwSgVdE\ninterested/~JVtTU\ninteresting/~JYV6\ninterface/~NgSVGd\ninterfaith/~J\ninterfere/~VGdS\ninterference/~NgSV\ninterferon/Nmg\ninterfile/VGdS\nintergalactic/J\nintergenerational/JY\nintergovernmental/~J\ninterim/~JNg\ninterior/~JNSg\ninterj/N\ninterject/VGdS\ninterjection/NwSg\ninterlace/NSVGd\ninterlard/VdGS\ninterleaf/Ng\ninterleave/VdGSN\ninterleukin/Ng\ninterline/JVGdSz\ninterlinear/JN\ninterlining/NgV\ninterlink/VdGSN\ninterlock/VGdSNg\ninterlocutor/NSg\ninterlocutory/JN\ninterlope/VGd>SZ\ninterloper/Ng\ninterlude/~NgSVGd\nintermarriage/~NwSg\nintermarry/VGdS\nintermediary/~JNSg\nintermediate/~JYNgSV\nintermediation/Nmg\ninterment/~N0gE\ninterments/N9\nintermezzi/N9\nintermezzo/N0gS\ninterminably/Ry\nintermingle/VdSG\nintermission/NwSg\nintermittence/N\nintermittency/N\nintermittent/~JYN\nintermix/VGdSN\nintern/~NVGdJL\ninternal/~JYS\ninternalisation/Nmg!_₹\ninternalise/VGdS!_₹\ninternalization/Nmg\ninternalize/VGdS\ninternational/~JYNSg\ninternationalisation/Nm!_₹\ninternationalise/VdSG!_₹\ninternationalism/Nmg\ninternationalist/~JNSg\ninternationalization/Nm\ninternationalize/VdSG\ninternecine/J\ninternee/NSg\ninternet/~ONV\ninternetwork/NgSVdG\ninternist/NgS\ninternment/~Ng\ninternship/~NgS\ninteroffice/JV\ninteroperability/~N\ninteroperable/J\ninteroperate/VS\ninterpenetrate/VdSGnX\ninterpersonal/~J\ninterplanetary/~J\ninterplay/~NgV\ninterpolate/VdSGXn\ninterpolation/~Ng\ninterpose/VGdS\ninterposition/Ng\ninterpret/~VGdSrvB\ninterpretation/~NwgSr\ninterpretative/J\ninterpreted/~VJU\ninterpreter/~NgS\ninterprocess/J\ninterprovincial/J\ninterracial/~J\ninterred/~JVtTE\ninterregnum/~NSg\ninterrelate/VdSGXn\ninterrelation/Ng\ninterrelationship/JNgS\ninterring/V6NE\ninterrogate/VdSGnvX\ninterrogation/~Ng\ninterrogative/JYNgS\ninterrogator/NSg\ninterrogatory/NSgJ\ninterrupt/~VGd>SNgZ\ninterrupter/Ng\ninterruption/~NwgS\ninterscholastic/~J\nintersect/~VGdS\nintersection/~NwSg\nintersectional/J\nintersectionality/N\nintersession/JNSg\nintersex/~JNV\nintersperse/VGdSn\ninterspersion/Ng\ninterstate/~JNgS\ninterstellar/~J\ninterstice/NgS\ninterstitial/~JN\nintertwine/VGdS\ninterurban/~JN\ninterval/~NSg\nintervene/~VGdS\nintervention/~NSg\ninterventionism/Nmg\ninterventionist/JNSg\ninterview/~NgSVGd>Z\ninterviewee/NgS\ninterviewer/~Ng\nintervocalic/JQ\ninterwar/~J\ninterweave/VGS\ninterwove/V\ninterwoven/~V\nintestacy/Ng\nintestate/~JN\nintestinal/~J\nintestine/~NgSJ\nintifada/~N\nintimacy/~NmSg\nintimate/~JYNgSVGdnX\nintimation/Ng\nintimidate/~VGdSn\nintimidating/~VJYU\nintimidation/~Ng\nintimidator/NgS\nintonation/~NSg\nintoxicant/NSgJ\nintoxicate/VdSGJn\nintoxication/~Ng\n# intra             # prefixes that are not also words in their own right don't belong in the dictionary\nintracranial/~J\nintramural/~JN\nintramuscular/J\nintranet/NgS\nintransigence/Nmg\nintransigent/JYNgS\nintrastate/JN\nintrauterine/~J\nintravenous/~JYNgS\nintrepid/~JY\nintrepidity/Ng\nintricacy/NSg\nintricate/~JYV\nintrigue/~NwSgVd>GZ\nintriguer/Ng\nintriguing/~JYV6N\nintrinsic/~JNgS\nintrinsically/~Ry\nintro/~NSgV(\nintroduce/~VGdSr\nintroduction/~N0gr\nintroductions/~N9\nintroductory/~J\nintroit/NSg\nintrospect/VGdSv\nintrospection/~Nmg\nintrospective/JY\nintroversion/Ng\nintrovert/NgSJVd\nintrude/Vd>SGZ\nintruder/~Ng\nintrusion/~NSg\nintrusive/~JYpN\nintrusiveness/Nmg\nintuit/VSdGv\nintuition/~NS\nintuitive/~JYpN\nintuitiveness/Nmg\ninundate/VdSGXn\ninundation/Ng\ninure/VdSG\ninvade/~Vd>SGZr\ninvader/~Ng\ninvalid/~JYNgSVGd\ninvalidism/Ng\ninvaluable/~J\ninvaluably/Ry\ninvariant/~JNS\ninvasion/~NgS\ninvasive/~JN\ninvective/NgJ\ninveigh/VGd\ninveighs/V\ninveigle/VGd>SZ\ninveigler/Ng\ninvent/~VSGdrv\ninvention/~NwgSr\ninventive/~JYp\ninventiveness/Ng\ninventor/~NgS\ninventory/~NSgVdG\ninverse/~JYNSgV\ninvert/~Vd>GSNgJZ\ninverter/Ng\ninvest/~VdGSNrLB\ninvestigate/~VdSGnvX\ninvestigation/~NwgS\ninvestigator/~NSg\ninvestigatory/J\ninvesting/~g\ninvestiture/~NgS\ninvestment/~NwgrE\ninvestor/~NSg\ninveteracy/Ng\ninveterate/JV\ninvidious/JYp\ninvidiousness/Ng\ninvigilate/VGdSn\ninvigilator/NS\ninvigorate/VdSGr\ninvigorating/VJY\ninvigoration/Ng\ninvincibility/Ng\ninvincibly/Ry\ninviolability/Ng\ninviolably/Ry\ninviolate/J\ninvitation/~NSg\ninvitational/~JNSg\ninvite/~VbdGSNg\ninvited/~VtTJNU\ninvitee/NSg\ninviting/~JYV6N\ninvocable/J\ninvoke/~VdSG\ninvoluntariness/Nmg\ninvoluntary/~Jp\ninvolution/~Ng\ninvolve/~VdSGL\ninvolved/~JVtTU\ninvolvement/~NwSg\ninward/~JYNS\nioctl\niodide/~NwSg\niodine/~NgV\niodise/VdSG!_₹\niodize/VdSG\nion/~NSgU\nionic/~J\nionisation/NgU!_₹\nionise/VdSGU!_₹\nionization/~NgU\nionize/VdSGU\nionizer/NgS\nionosphere/NgS\nionospheric/J\niota/~NgS\nipecac/NSg\nipso facto/RJ\nirascibility/Ng\nirascible/J\nirascibly/Ry\nirate/~JYp\nirateness/Ng\nire/~NgV\nireful/J\nirenic/J\nirides/N\niridescence/Ng\niridescent/JY\niridium/~Ng\niris/~NgSV\nirk/VSGd\nirksome/JYp\nirksomeness/Ng\niron/~NwgSJVdG\nironclad/~JNgS\nironic/~J\nironical/JY\nironing/VNg\nironmonger/NS\nironmongery/N\nironstone/Ng\nironware/Nmg\nironwood/NgS\nironwork/Ng\nirony/~NSgJ\nirradiate/JVdSGn\nirradiation/~NwSg\nirrational/~JYNSg\nirrationality/Ng\nirreclaimable/J\nirreconcilability/Ng\nirreconcilable/JN\nirreconcilably/Ry\nirrecoverable/J\nirrecoverably/Ry\nirredeemable/JN\nirredeemably/Ry\nirreducible/~JN\nirreducibly/Ry\nirrefutable/J\nirrefutably/Ry\nirregular/~JYNgS\nirregularity/~NSg\nirrelevance/NgS\nirrelevancy/NgS\nirrelevant/~JY\nirreligion/N\nirreligious/J\nirremediable/J\nirremediably/Ry\nirremovable/J\nirreparable/J\nirreparably/Ry\nirreplaceable/~J\nirrepressible/J\nirrepressibly/Ry\nirreproachable/J\nirreproachably/Ry\nirresistible/~J\nirresistibly/Ry\nirresolute/JYpnv\nirresoluteness/Ng\nirresolution/Ng\nirrespective/~J\nirresponsibility/Ng\nirresponsible/~JN\nirresponsibly/Ry\nirretrievable/J\nirretrievably/Ry\nirreverence/Ng\nirreverent/~JY\nirreversible/~J\nirreversibly/Ry\nirrevocable/J\nirrevocably/Ry\nirrigable/J\nirrigate/VdSGn\nirrigation/~Ng\nirritability/Ng\nirritable/J\nirritably/Ry\nirritant/JNSg\nirritate/VdSGXn\nirritating/JYV\nirritation/~Ng\nirrupt/VdGSv\nirruption/NSg\nis/~Vlh             # 3rd person singular present of 'be'\nischaemia/N!_₹\nischaemic/J!_₹\nischemia/~N\nischemic/~J\nisinglass/Ng\nisl/~N\nisland/~NSgV>Z\nislander/~Ng\nisle/~NgS\nislet/~NSg\nism/~Nge\nisms/N\nisn't/~VAhN\nisobar/NgS\nisobaric/J\nisochronous/J\nisolate/~VdGSNgJn\nisolation/~Nmg\nisolationism/Nmg\nisolationist/JNSg\nisolator/NgS\nisoline/NgS\nisomer/~NgS\nisomeric/J\nisomerism/Ng\nisometric/~JNSQ\nisometrics/Ng\nisomorphic/~J\nisomorphism/~N\nisopropyl/NgS\nisosceles/~J\nisotherm/NSg\nisothermal/J\nisotope/~NSgV\nisotopic/~J\nisotropic/~J\nisotropy/Ng\nissuance/~NgS\nissue/~NSgVdGr\nissuer/~NgS\nisthmian/~JN\nisthmus/~NgS\nit/~Ia3so*          # I~pronoun a~personal 3~person .~singular s~subject o~object *~3pers-sing-subj\nit'd/\nit'll/\nit's/~\nital/~NJ\nitalic/~JNSg\nitalicisation/Ng!_₹\nitalicise/VGdS!_₹\nitalicization/Ng\nitalicize/VGdS\nitalics/~Ng\nitch/~NgSVdG\nitchiness/Nmg\nitchy/J>^p\nitem/~NgSV\nitemisation/Nmg!_₹\nitemise/VGdS!_₹\nitemization/Nmg\nitemize/VGdS\niterable/JNgS\niterate/VGdSNJrXnv\niteration/~NwSgr\niteratively/Ry\niterator/NS\nitinerant/~JNSg\nitinerary/~NSgJ\nits/~ID5*\nitself/~Ia3F.       # I~pronoun a~personal 3~person .~singular F~reflexive\niv/~U\nivory/~NwSgJ\nivy/~NSgd\nix/~\nj/~NW\njab/NSgV\njabbed/VtTJ\njabber/Vd>GSNgZ\njabberer/Ng\njabbing/V6N\njabot/NSg\njacaranda/NgS\njack/~NgSVdGJ\njackal/~NSgV\njackass/NgSV\njackboot/NSgVd\njackdaw/NgS\njacket/~NSgVd\njackhammer/NgSV\njackknife/NgSVGd\njackknives/9\njackpot/~NOSgV\njackrabbit/NgSV\njackstraw/NgSJ\njacquard/Ng\njade/~NwgSJVGd\njaded/JYpVtT\njadedness/Ng\njadeite/Ng\njag/~NSgV\njagged/~J^Y>pVtT\njaggedness/Ng\njaggies/N9\njaguar/~NSg\njail/~NwgSVd>GZ\njailbird/NSg\njailbreak/NSgVG\njailbroken/VJ\njailer/Ng\njailhouse/~NS\njalapeno/NgS\njalopy/NSg\njalousie/NgS\njam/~NwSgV\njamb/NgSV\njambalaya/Nmg\njamboree/~NgS\njammed/~JVtT\njammer/NgS\njamming/~V6NJ\njammy/J>^N\njangle/Vd>GSNgZ\njangler/Ng\njanitor/~NSg\njanitorial/J\njank/Nmg\njankiness/Nmg\njanky/J^>\njapan/~NSgV\njapanned/VtT\njapanning/NV6\njape/NgSVGd\njar/~NSgV\njardiniere/NSg\njarful/NgS\njargon/~NmgV\njarred/VtTJ\njarring/JYNV6\njasmine/~NwSg\njasper/~NgV\njato/NgS\njaundice/NmSgVdG\njaunt/NSgVGd\njauntily/Ry\njauntiness/Ng\njaunty/J>^pN\njava/~Ng\njavelin/~NSgV\njaw/~NSgVGdJ\njaw-droppingly/J\njawbone/NSgVdG\njawbreaker/NgS\njawline/NS\njay/~NSg\njaybird/NSg\njaywalk/Vd>SGZ\njaywalker/Ng\njaywalking/NmgV\njazz/~NgSVdG\njazzy/~J^>\njct/~N\njealous/~JYV\njealousy/~NSg\njean/~NgS\njeans/~Ng\njeep/~JNgSV\njeer/NgSVdG\njeering/VNgY\njeez/\njejuna/N\njejune/J\njejunum/Ng\njell/NSVdG\njello/NS\njelly/~NSgVGdJ\njellybean/NgSJ\njellyfish/N09gS     # singular and plural, also has a plural in -s\njellylike/J\njellyroll/NSg\njemmy/NSVGdJ\njennet/NgS\njenny/~NSgV\njeopardise/VGdS!_₹\njeopardize/VGdS\njeopardy/~NgV\njeremiad/NgS\njerk/~NgSVdG\njerkily/Ry\njerkin/NgS\njerkiness/Ng\njerkwater/NJ\njerky/J^>pNgV\njeroboam/NS\njerrybuilt/J\njerrycan/NS\njersey/~NgS\njest/NgSVbd>GZ\njester/~Ng\njesting/NJYV6\njet/~NSgVJ\njetliner/NSg\njetport/NgS\njetsam/Nmg\njetted/VtT\njetting/V6N\njettison/NgSVdG\njetty/~NSgVJ\njewel/~NSgVGd>Z\njeweler/Ng\njewelled/JVtT!@_₹\njeweller/NgS!@_₹\njewellery/Nmg!@_₹\njewelling/V6!@_₹\njewelries/NV!@_₹\njewelry/~NmSgV\njg/~\njib/~NSgVGd\njibbed/VtT\njibbing/NV6\njibe/NgSV\njiff/NgSV\njiffy/NSg\njig/~NSVr\njig's\njigged/VtTr\njigger/NSVdGr\njigger's\njigging/V6Nr\njiggle/NSgVdG\njiggly/J\njigsaw/~NSgVdG\njihad/~NSgV\njihadi/NgS\njihadist/NSgJ\njilt/NgSVdG\njimmy/~NSgVdG\njimsonweed/Ng\njingle/~NSgVdG\njingly/J\njingoism/Ng\njingoist/NSgJ\njingoistic/J\njink/NSVdG\njinn/N\njinni/Ng\njinrikisha/NSg\njinx/NgSVdG\njit/VS\njitney/~NSg\njitted/VtT\njitter/NgSVdG\njitterbug/NgSV\njitterbugged/VtT\njitterbugger/Ng\njitterbugging/V6\njitters/NgV\njittery/J>^\njitting/V6\njive/~VGdSNg\njob/~NSgV\njobbed/VtT\njobber/NSg\njobbing/V6NJ\njobholder/NgS\njobless/Jp\njoblessness/Ng\njobseeker/NgS\njobshare/NSV\njobsworth/N\njobsworths/N\njock/~NgSV\njockey/~NSgVGd\njockstrap/NgS\njocose/JYp\njocoseness/Ng\njocosity/Ng\njocular/JY\njocularity/Ng\njocund/JY\njocundity/Ng\njodhpurs/Ng\njoey/~NS\njog/NSgV\njogged/VtT\njogger/VSNg\njogging/~NmgV6\njoggle/VdGSNg\njohn/~NgS\njohnny/~NSg\njohnnycake/NgS\njoin/~VdGSNrW\njoin's\njoiner/NgSW\njoinery/Ng\njoint/~JNSVGdE\njoint's\njointly/~RyW\njoist/NSgV\njojoba/~N\njoke/~NgSVGd>Z\njoker/~Ng\njokey/J\njokier/Jc\njokiest/Ju\njoking/~VNY\njollification/NSg\njollily/Ry\njolliness/Nmg\njollity/Ng\njolly/~J^>pNSgVGd\njolt/Vd>GSNgZ\njolter/Ng\njones/NSVdG\njonquil/NSg\njosh/~NgSVd>GZ\njosher/Ng\njostle/VGdSNg\njot/NSgV\njotted/VtT\njotter/NgS\njotting/V6SNwg\njoule/NSg\njounce/VGdSNg\njouncy/J\njournal/~NgSVJ\njournalese/Nmg\njournaling/Sg\njournalism/~Nmg\njournalist/~NSg\njournalistic/~J\njourney/~NgSVGd>Z\njourneyer/Ng\njourneyman/~N0g\njourneymen/N9\njourno/NS\njoust/NSgVGd>Z\njouster/Ng\njousting/NgV\njovial/JY\njoviality/Ng\njowl/NgSV\njowly/J^>\njoy/~Nw☁SgVGd\njoyful/~JYp\njoyfuller/Jc\njoyfullest/Ju\njoyfulness/Ng\njoyless/JYp\njoylessness/Ng\njoyous/~JYp\njoyousness/Ng\njoypad/NgS\njoyridden/V\njoyride/NSgV>GZ\njoyrider/Ng\njoyriding/VNg\njoyrode/V\njoystick/~NSgV\njr/~J\njubilant/JY\njubilate/VGdS\njubilation/Ng\njubilee/~NSg\njudder/NSVGd\njudge/~NSVdGr\njudge's\njudgement/NSg!_₹\njudgemental/J!_₹\njudgeship/Ng\njudgment/~NSg\njudgmental/JY\njudgmentally/Ry!_₹\njudicatory/JNSg\njudicature/~Ng\njudicial/~JYN\njudiciary/~NSgJ\njudicious/JYpi\njudiciousness/Nmgi\njudo/~Ng\njug/~NSgV\njugful/NgS\njugged/JVtT\njuggernaut/NSg\njugging/V6N\njuggle/VGd>SNgZ\njuggler/Ng\njugglery/Ng\njugular/JNSg\njuice/~NwSgVd>GJZ\njuicer/Ng\njuicily/Ry\njuiciness/Ng\njuicy/~J^>p\njujitsu/NgV\njujube/NgS\njukebox/~NgSV\njulep/NSg\njulienne/NV\njumble/VGdSNg\njumbo/~JNSg\njump/~Vd>GNgJZ\njumper/~NgV\njumpily/Ry\njumpiness/Ng\njumps/~V\njumpsuit/NgS\njumpy/J^>p\njun/~N\njunco/~NSg\njunction/~NSgVWi\njuncture/NgSW\njungle/~NgSJ\njunior/~JNgSV\njuniper/~NSg\njunk/~NwgSVd>GZ\njunker/Ng\njunket/NgSVdG\njunketeer/NgSV\njunkie/~NgS^>\njunky/J\njunkyard/~NgS\njunta/~NSg\njuridic/J\njuridical/JY\njurisdiction/~NwSg\njurisdictional/J\njurisprudence/~Nmg\njurisprudential/J\njurist/~NgS\njuristic/J\njuror/NSg\njury/~NSgVJi\njury-rig/VS\njury-rigged/VtT\njury-rigging/V6\njuryman/N0g\njurymen/N9\njurywoman/N0g\njurywomen/N9\njust/~JY^>pR        # removed `1` noun. archaic and interferes with linter heuristics\njustice/~NwgSi\njustifiable/~JU\njustifiably/RyU\njustification/~NwSg\njustified/~JVU\njustify/~VGdSXn\njustifyingly/Ry\njustness/Nmg\njut/VSNg\njute/~Nmg\njutted/VtT\njutting/V6N\njuvenile/~JNSg\njuxtapose/VdSG\njuxtaposition/~NSgV\nk/NSiW\nkHz/\nkW/\nkWh/\nkabbalah/~N\nkaboom/N\nkabuki/~Ng\nkaddish/~NgS\nkaffeeklatch/NgS\nkaffeeklatsch/NgS\nkaftan/NgS!_₹\nkahuna/NS\nkaiser/~NgS\nkale/Ng\nkaleidoscope/NgSV\nkaleidoscopic/JQ\nkamikaze/~NgSVJ\nkana/~NV\nkangaroo/~NgSVJ\nkanji/~N09S         # singular and plural, also has a plural in -s\nkaolin/Nwg\nkapok/Ng\nkappa/~NSg\nkaput/J\nkarakul/Ng\nkaraoke/~NgSV\nkarat/NSg\nkarate/~NgV\nkarma/~Ng\nkarmic/J\nkart/~NgSV\nkatakana/~N\nkatydid/NSg\nkayak/NSgVdG\nkayaker/NgS\nkayaking/~NgV\nkayo/NgSVdG\nkazoo/NSgV\nkc/~N\nkebab/NSgV\nkedgeree/N\nkeel/~NgSVdG\nkeelhaul/VdGS\nkeen/~JY^>pVdGSNg\nkeenness/Ng\nkeep/~V>GSNgZ\nkeeper/~Ng\nkeeping/~NgV6\nkeepsake/NgS\nkefir/Nmg\nkeg/NSgV\nkegel/NgS\nkelp/NgV\nkelvin/~NSg\nken/~VSNg\nkendo/Nmg           # martial art\nkenned/VtT\nkennel/~NSgVGd\nkennelled/VtT!@_₹\nkennelling/V6!@_₹\nkenning/NV6\nkeno/Ng\nkepi/NgS\nkept/~VtT\nkeratin/Ng\nkeratitis/Nmg\nkerb/NgSVdG!_₹\nkerbside/N\nkerchief/NSgV\nkerfuffle/NSV\nkernel/~NSgV\nkerosene/~Ng\nkestrel/~NgS\nketamine/Ng\nketch/NgSV\nketchup/NgV\nketo/NJ\nketogenic/J\nketone/~NS\nkettle/~NSgV\nkettledrum/NSg\nkey/~NSgJVGd\nkey binding/NgS\nkeyboard/~NSgVGd>Z\nkeyboarder/Ng\nkeyboardist/~NSg\nkeycap/NSg\nkeychain/NgS\nkeyframe/NgS\nkeygen/NgS\nkeyhole/~NgSV\nkeymap/NSg\nkeynote/~NgSVGd>Z\nkeynoter/Ng\nkeypad/NSg\nkeypoint/NgS\nkeypress/NSg\nkeypunch/NgSVGd>Z\nkeypuncher/Ng\nkeyring/NgS\nkeystone/~NgSV\nkeystroke/NSgV\nkeyway/NSg\nkeyword/~NgSV\nkg/~\nkhaki/~NSgJ\nkhan/~NgS\nkibble/VdGSNg\nkibbutz/~N0gS\nkibbutzim/N9\nkibitz/VGd>SZ\nkibitzer/Ng\nkibosh/NgV\nkick/~Vd>GSNgZ\nkick start/VSdG\nkick-starter/NgS\nkickback/~NSg\nkickball/Ng\nkickbox/VGdS\nkickboxer/NgS\nkicker/~Ng\nkickoff/~NgS\nkickstand/NgS\nkicky/J>^\nkid/~NSgV\nkidded/VtT\nkidder/NSg\nkiddie/~NSg\nkidding/V6N\nkiddish/JN\nkiddo/NSg\nkidnap/~VSN\nkidnapped/~VtTJ\nkidnapper/NgS\nkidnapping/~V6SNg\nkidney/~NSg\nkidskin/Ng\nkielbasa/NgS\nkielbasi/N\nkike/NSV\nkill/~Vd>GSNgzZB\nkilldeer/NSg\nkiller/~NgJ\nkilling/~JNgV6\nkilljoy/NSg\nkiln/~NgSVdG\nkilo/~NgS(\nkilobit/NSg\nkilobyte/NSg\nkilocoulomb/S\nkilocycle/NSg\nkilogram/~NSg\nkilohertz/Ng\nkilojoule/NS\nkiloliter/NgS<\nkilolitre/NgS!@_₹\nkilometer/~NgS<\nkilometre/NgS!@_₹\nkilonewton/NS\nkilopascal/NS\nkiloton/NSg\nkilovolt/NS\nkilowatt/NSg\nkilt/Vd>SNg\nkilter/Ng\nkimchi/Nmg\nkimono/~NgS\nkin/~NgJV\nkinase/~N\nkind/~N0J>Y^pU\nkind's\nkinda/~RN\nkindergarten/~NgS\nkindergartener/Ng!_₹\nkindergartner/NSg\nkindhearted/JYp\nkindheartedness/Nmg\nkindle/~VGdSNJr\nkindliness/Nmg\nkindling/NmgJV\nkindly/~J>^RyU\nkindness/~N0wgU\nkindnesses/N9\nkindred/~NgJ\nkinds/~N9\nkine/NS\nkinematic/JS\nkinematics/Nmg\nkinetic/~JS\nkinetically/Ry\nkinetics/~Ng\nkinfolk/NSg\nkinfolks/Ng\nking/~NgSVY\nkingdom/~NSg\nkingfisher/~NSg\nkingly/J>^\nkingmaker/NS\nkingpin/~NSg\nkingship/~Ng\nkink/VdGSNg\nkinkily/Ry\nkinkiness/Ng\nkinky/J^>p\nkinsfolk/Ng\nkinship/~Ng\nkinsman/~Ng\nkinsmen/9\nkinswoman/Ng\nkinswomen/9\nkiosk/~NSg\nkip/~NSg09V         # in the currency sense, singular and plural, also has a plural in -s\nkipped/VtT\nkipper/NgSVdGJ\nkipping/V6\nkirsch/NgS\nkismet/Ng\nkiss/~Vd>GSNgBZ\nkisser/Ng\nkissoff/NSg\nkissogram/NS\nkit/~NSgVGd\nkitchen/~NSgV\nkitchenette/NgS\nkitchenware/Nmg\nkite/~NgSV\nkith/Ng\nkitsch/NgJ\nkitschy/J\nkitted/VtT\nkitten/~NgSV\nkittenish/J\nkitting/NV6\nkitty/~NSg\nkiwi/~NgS\nkiwifruit/NwgS\nkl/~\nklaxon/NSV\nkleptocracy/NgS\nkleptocratic/J\nkleptomania/Ng\nkleptomaniac/NSg\nkludge/NSVGd\nkludgy/J\nkluge/~NSVd\nklutz/NgS\nklutziness/Ng\nklutzy/J^>p\nkm/~\nkn/~\nknack/~NSgV>Z\nknacker/NVGd\nknapsack/NgSV\nknave/NSg\nknavery/Ng\nknavish/JY\nknead/VGd>SNZ\nkneader/Ng\nknee/~NgSVd\nkneecap/NSgV\nkneecapped/VtT\nkneecapping/NV6\nkneeing/V6N\nkneel/VSG\nknell/VGdSNg\nknelt/VtT\nknew/~Vt\nknicker/NS\nknickerbockers/Ng\nknickers/Ng\nknickknack/NgS\nknife/~NSgVdG\nknight/~NgSVdGY\nknighthood/~NwgS\nknightliness/Nmg\nknish/NgS\nknit/~VSNg\nknitted/JVtT\nknitter/NSg\nknitting/~V6Ng\nknitwear/Nmg\nknives/~N9Vh\nknob/~NgSV\nknobbly/J\nknobby/J^>\nknock/~NSgVGd>Z\nknock-on effect/NgS\nknock out/V/\nknockabout/JN\nknockdown/NSgVJ\nknocker/Ng\nknockoff/NSg\nknockout/~NSgJ\nknockwurst/NSg\nknoll/~NSgV\nknot/~NgSV\nknothole/NSg\nknotted/JVtT\nknotting/V6N\nknotty/J^>\nknow/~VbSB\nknowing/~JYPV6SNU\nknowledge/~Nmg\nknowledgeable/~JN\nknowledgeably/Ry\nknown/~JVT          # removed `N`, only a noun in the `unknown knows` sense\nknuckle/NSgVdG\nknuckleduster/NS\nknucklehead/NgS\nknurl/NSgVGd\nkoala/NSg\nkoan/NS\nkohl/~NV\nkohlrabi/Ng\nkohlrabies/N\nkola/NgS\nkook/NgS\nkookaburra/NSg\nkookiness/Nmg\nkooky/J^>pN\nkopeck/NgS\nkorma/Nmg\nkosher/~JVdSG\nkowtow/VGdSNg\nkph/N\nkraal/NSgV\nkraut/NSgV!_₹\nkrill/Nmg\nkrona/Ng\nkrone/Ng>\nkronor/N\nkronur/N\nkrypton/~Nmg\nkryptonite/Nmg\nkt/~N\nkuchen/NSg\nkudos/NgV\nkudzu/NwSg\nkumquat/NgS\nkung fu/Ng\nkvetch/VGd>SNgZ\nkvetcher/Ng\nkw/~\nl/~NSd^GXz\nla/NgJ\nlab/~NSg\nlabel/~NSVdG>r\nlabel's\nlabeled/~JVUr<\nlabelled/JVtTUr!@_₹\nlabelless/J\nlabelling/V6Nr!@_₹\nlabia/N9\nlabial/~JNSg\nlabile/J\nlability/Ng\nlabium/N0g\nlabor/~NwSgVd>GZ<\nlabor-intensive/J\nlaboratory/~NSg\nlaborer/~Ng<\nlaborious/JYp\nlaboriousness/Nmg\nlaborsaving/J<\nlabour/NwSgVGd>Z!@_₹\nlabour-intensive/J!@_₹\nlabourer/Ng!@_₹\nlaboursaving/J!@_₹\nlaburnum/NgS\nlabyrinth/~NgV\nlabyrinthine/J\nlabyrinths/NV\nlac/~Ng\nlace/~NwSVGdU\nlace's\nlacerate/VdSGJnX\nlaceration/NwgS\nlacewing/NSg\nlacework/Nmg\nlachrymal/JN\nlachrymose/J\nlack/~NgSVdG\nlackadaisical/JY\nlackey/NSgV\nlackluster/~JN\nlacklustre/JN!@_₹\nlaconic/JQ\nlacquer/~NwgSVGd\nlacrosse/~Nmg\nlactate/~VGdSNn\nlactation/~Nmg\nlacteal/JN\nlactic/~J\nlactose/~Nmg\nlacuna/N0g\nlacunae/N9\nlacy/~J>^\nlad/~NSgGdnz\nladder/~NSgVGd\nladdie/NSg\nladdish/Jp\nlade/VSN\nladen/~JVU\nlading/NgV\nladle/NSgVdG\nlady/~NSgV\nladybird/NSg\nladybug/NgS\nladyfinger/NgS\nladylike/JU\nladylove/NgS\nladyship/NgS\nlaetrile/Ng\nlag/~J>NSgVZ\nlager/~NwgSV\nlaggard/JYNgS\nlagged/~VtT\nlagging/JNgV6\nlaggy/J\nlagniappe/NSg\nlagoon/~NSg\nlaid/~VtTJir\nlaid-back/J\nlain/~VT\nlair/~NgSV\nlaird/~NSgV\nlaity/~Ng\nlake/~NgSV\nlakefront/JNS\nlakeside/~NJ\nlakh/N0g₹\nlakhs/N9₹\nlam/~VSNg\nlama/~NgS\nlamasery/NSg\nlamb/~NwgSVdG\nlambada/NgS\nlambaste/VGdS\nlambda/~NSg\nlambency/Ng\nlambent/JY\nlambkin/NSg\nlambskin/NwSg\nlambswool/Nmg\nlame/~JY^>pVGdSNgZ\nlamebrain/NgSd\nlameness/Nmg\nlament/~NSgVdGB\nlamentably/Ry\nlamentation/NgS\nlamina/~N0g\nlaminae/N9\nlaminar/J\nlaminate/VGdSNgJn\nlamination/Ng\nlammed/VtT\nlamming/V6N\nlamp/~NgSV\nlampblack/NmgV\nlamplight/Ng>Z\nlamplighter/Ng\nlampoon/~NSgVGd\nlamppost/NSg\nlamprey/NgS\nlampshade/NSgV\nlanai/NSg\nlance/~NSgVd>GZ\nlancer/~Ng\nlancet/~NSgV\nland/~NwgSVdGz\nlandau/~NSg\nlandbased/J\nlander/NgS\nlandfall/~NgS\nlandfill/~VSNg\nlandholder/NSg\nlandholding/NgS\nlanding/~NgV\nlandlady/~NSg\nlandless/Jg\nlandline/NgS\nlandlocked/~J\nlandlord/~NgS\nlandlordism/NgS\nlandlubber/NgS\nlandmark/~NgSV\nlandmass/~NgS\nlandmine/NSV\nlandowner/~NgS\nlandownership/Nmg\nlandowning/JNSg\nlandscape/~NgSVGd>Z\nlandscaper/Ng\nlandslid/V\nlandslide/~NgSVG\nlandslip/NS\nlandsman/N0g\nlandsmen/N9\nlandward/JNS\nlane/~NgS\nlaneway/NgS\nlanguage/~NwgS\nlanguid/JYpN\nlanguidness/Nmg\nlanguish/VdSG\nlanguor/NSgV\nlanguorous/JY\nlank/JY^>pV\nlankiness/Nmg\nlankness/Nmg\nlanky/J>^p\nlanolin/NgV\nlantern/~NgSVJ\nlanthanum/Nmg\nlanyard/NgS\nlap/~NSgVJ\nlaparoscopic/J\nlaparoscopy/N\nlaparotomy/N\nlapboard/NSg\nlapdog/NSg\nlapel/~NSg\nlapidary/NSgJ\nlapin/NSg\nlapped/VtTJ\nlappet/NSgV\nlapping/V6N\nlapse/~NgSVGdrK\nlaptop/~NSgJ\nlapwing/~NgS\nlarboard/NSg\nlarcenist/NSg\nlarcenous/J\nlarceny/~NSg\nlarch/NgS\nlard/~NgSVd>GZ\nlarder/~Ng\nlardy/J>^N\nlarge/~J>Y^pNSg\nlarge-scale/J\nlargehearted/J\nlargeness/Nmg\nlargess/Ng\nlargish/J\nlargo/~NSgJ\nlariat/NSgV\nlark/~NgSVdG\nlarkspur/NSg\nlarva/~Ng\nlarvae/~9\nlarval/~J\nlaryngeal/~JN\nlarynges/N\nlaryngitis/Ng\nlarynx/~Ng\nlasagna/N0gS\nlasagne/N9gS!@_₹\nlascivious/JYp\nlasciviousness/Ng\nlase/VGd>SZ\nlaser/~NgV\nlash/~NgSVdGJz\nlashing/NgV6\nlass/~NgS\nlassie/NSg\nlassitude/Ng\nlasso/NSgVdG\nlast/~JYVdGSNg\nlast-ditch/J\nlast minute/NJ\nlast-minute/J\nlasting/~JYVN\nlat/~NS\nlatch/VdGSNU\nlatch's\nlatchkey/NSgJ\nlate/~JY^>pN\nlatecomer/NgS\nlatency/~Ng\nlateness/Ng\nlatent/~JYNgS\nlateral/~JYNgSVdG\nlatest/~JNg\nlatex/~Ng\nlath/NgSVd>GZ\nlathe/~VNg\nlather/NmgVGd\nlathery/J\nlaths/N\nlatices/9\nlatish/J\nlatitude/~NgS\nlatitudinal/J\nlatitudinarian/JNgS\nlatrine/NgS\nlattè/NwSg\nlatte/NwSg\nlatter/~JYg\nlattice/~NgSVd\nlatticework/NwSg\nlaud/NgSVdGB\nlaudably/Ry\nlaudanum/NgV\nlaudatory/J\nlaugh/~NgVdGB\nlaughably/Ry\nlaughing/~NgVY\nlaughingstock/NSg\nlaughs/~NV\nlaughter/~Nmg\nlaunch/~VGdSNgr\nlauncher/~NSg\nlaunchpad/NSg\nlaunder/NSVd>GZ\nlaunderer/NgS\nlaunderette/NSg\nlaundress/NgSV\nlaundromat/NgS\nlaundry/~NwSg\nlaundryman/N0g\nlaundrymen/N9\nlaundrywoman/N0g\nlaundrywomen/N9\nlaureate/~JNgSV\nlaureateship/Ng\nlaurel/~NSgV\nlav/NSGd\nlava/~Nmg\nlavage/NgV\nlavaliere/NSgJ\nlavatorial/J\nlavatory/NSgJ\nlave/VSNJ\nlavender/~NmSgJV\nlavish/~J^Y>pVGdSN\nlavishness/Ng\nlaw/~Nw☁SgV\nlawbreaker/NSg\nlawbreaking/JNg\nlawful/~JYpNU\nlawfulness/NmgU\nlawgiver/NgS\nlawless/~JYp\nlawlessness/Nmg\nlawmaker/NgS\nlawmaking/Ng\nlawman/N0g\nlawmen/N9\nlawn/~NgSV\nlawnmower/NSg\nlawrencium/Nmg\nlawsuit/~NgS\nlawyer/~NSgVdG\nlax/~NJ^>Yp\nlaxative/JNgS\nlaxity/Nmg\nlaxness/Nmg\nlay/~VbtGSNgJrie    # \"lay\" is lemma with past \"laid\". Also simple past of \"lie\"\nlay out/V/\nlayabout/NS\nlayaway/NgV\nlayer/~NSgVbe\nlayered/~JVtT\nlayering/NgV6\nlayette/NgS\nlayman/~N0g\nlaymen/~N9\nlayoff/NSg\nlayout/~NSg\nlayover/NgS\nlaypeople/N9\nlayperson/N0gS\nlayup/NSg\nlaywoman/N0g\nlaywomen/N9\nlaze/VGdSNg\nlazily/Ry\nlaziness/Nmg\nlazy/~J^>pVdGSN\nlazybones/Ng\nlb/~NS\nlbw/N\nlea/~NSg\nleach/~NSVdG\nlead/~NwgSVd>GJn\nlead off/NgV\nlead-up/NgS\nleaden/JV\nleader/~NgS\nleaderboard/NgS\nleaderless/J\nleadership/~NmSg\nleading/~VJNg\nleaf/~NgSVdG\nleafage/Ng\nleafless/J\nleaflet/~NgSVGd\nleafstalk/NgS\nleafy/J>^\nleague/~NSgVdG\nleak/~NgSVdG>J\nleakage/~NwgS\nleakiness/Ng\nleaky/~J>^p\nlean/~Vd>GSNgJ^pz\nleaning/~NgV\nleanness/Nmg\nleap/~Vd>GSNgJZ\nleaper/Ng\nleapfrog/NgSV\nleapfrogged/VtT\nleapfrogging/NmV6\nleapt/V\nlearn/~VGdSNrU\nlearnability/N\nlearnable/JN\nlearnedly/Ry\nlearner/~NgS\nlearning's\nlearnt/~V\nlease/~NSgVdGr\nleaseback/NSg\nleasehold/J>NgSZ\nleaseholder/Ng\nleaser/NSg\nleash/NSVdGU\nleash's\nleast/~NgJDq\nleastwise/\nleather/~NwgSJV\nleathercraft/Nwg\nleatherette/Ng\nleatherman/Ng\nleatherneck/NgS\nleathery/J\nleave/~Vd>GNgZz\nleaves/~V9h\nleave over/V\nleaven/NSgVGd\nleavened/VJU\nleavening/VNgJ\nleaver/Ng\nleavings/Ng\nlech/~NgSVd>GZ\nlecher/NgV\nlecherous/JYp\nlecherousness/Ng\nlechery/Ng\nlecithin/Ng\nlectern/NgS\nlecture/~NgSVGd>Z\nlecturer/~Ng\nlectureship/NSg\nled/~VtT\nledge/~NSgV>Z\nledger/~NgV\nlee/~NSgJ>Z\nleech/~NgSVdG\nleek/~NgS\nleer/~VdGNgJ\nleeriness/Ng\nleery/J>^p\nleeward/~JSg\nleeway/Ng\nleft/~J^>NgSVtT\nleft-hand/J\nleft over/V\nleft-wing/J\nleftism/Ng\nleftist/~NSgJ\nleftmost/J\nleftover/~JNSg\nleftward/JS\nlefty/~NSgJ\nleg/~NSgVJ\nlegacy/~NSgJ\nlegal/~JYNSg\nlegalese/Nmg\nlegalisation/Nmg!_₹\nlegalise/VGdS!_₹\nlegalism/NgS\nlegalist/JNS\nlegalistic/JQ\nlegality/~NSg\nlegalization/~Ng\nlegalize/VGdS\nlegalizer/NgS\nlegate/~NgSVeXn\nlegatee/NgS\nlegation's/re\nlegato/NSg\nlegend/~NwSgV\nlegendarily/Ry\nlegendary/~JN\nlegerdemain/Ng\nlegged/~JNVtT\nlegginess/Nmg\nlegging/~NgSV6\nleggy/J>^pN\nleghorn/NgS\nlegibility/Nmg\nlegible/J\nlegibly/Ry\nlegion/~JNSgV\nlegionary/NSgJ\nlegionnaire/NSg\nlegislate/~VdSGnv\nlegislation/~Ng\nlegislative/~JYN\nlegislator/~NgS\nlegislature/~NSg\nlegit/~NJ\nlegitimacy/~Ng\nlegitimate/~JYNSVdG\nlegitimatise/VGdS!_₹\nlegitimatize/VGdS\nlegitimisation/Ng!_₹\nlegitimise/VdSG!_₹\nlegitimization/Nge\nlegitimize/~VdSGe\nlegless/J\nlegman/N0g♂\nlegmen/N9♂\nlegroom/NSg\nlegume/~NgS\nleguminous/J\nlegwarmer/NgS\nlegwork/Nmg\nlei/~NSg\nleisure/~NmgdY\nleisureliness/Nmg\nleisurewear/Nmg\nleitmotif/NgS\nleitmotiv/NgS\nlemma/~N0S\nlemmata/N9\nlemme/Gz            # POS: contraction\nlemming/NgS\nlemon/~NwSgJV\nlemonade/~NwSg\nlemongrass/Nmg\nlemony/J\nlemur/~NSgª\nlend/~V>GSNZ\nlender/~NgS\nlength/~NwgVnX\nlengthen/VGd\nlengthily/Ry\nlengthiness/Nmg\nlengths/~NV\nlengthwise/J\nlengthy/~J>^p\nlenience/Ng\nleniency/Ng\nlenient/~JYN\nlenition/Nmg        # non-count\nlenitive/JN\nlens/~NgSV\nlensman/N0g♂\nlensmen/N9♂\nlent/~NV\nlentil/NgS\nlento/JN\nleonine/JN\nleopard/~NSgª\nleopardess/NgS\nleotard/NSg\nleper/NSgV\nleprechaun/NgSª\nleprosy/~Nmg\nleprous/J\nlepta/N\nlepton/~NgS\nlesbian/~JNSg♀V\nlesbianism/Nmg\nlesion/~NgSV\nless/~RPV>JCnX\nlessee/NgSV\nlessen/~VGdC\nlesser-known/J\nlesson/~VSNg\nlessor/NgS\nlet/~VbtTSNgi\nlet's               # POS: contraction\nletdown/NSg\nlethal/~JYN\nlethality/Nmg\nlethargic/JQ\nlethargy/Nmg\nletter/~NgSVGd>Z\nletterbomb/NS\nletterbox/NSJV\nlettered/~JVtTU\nletterer/Ng\nletterhead/NgS\nlettering/~VNg\nletterpress/Ng\nletting/~V6SN\nlettuce/~NwgS\nletup/NSg\nleucine/N\nleucotomy/NS\nleukaemia/Nmg!_₹\nleukemia/~Nmg\nleukemic/JNSg\nleukocyte/NgS\nlevee/~NSgV\nlevel/~JY>pNSgVGdZ\nleveler/JcNg\nlevelheaded/Jp\nlevelheadedness/Ng\nlevelled/VtT!@_₹\nleveller/JcNSg!@_₹\nlevellest/Ju\nlevelling/V6N!@_₹\nlevelness/Nmg\nlever/~NSgVGd\nleverage/~NmSVdGe\nleverage's\nleviathan/~NgSJ\nlevier/Ng\nlevitate/VdSGn\nlevitation/Nmg\nlevity/Nmg\nlevy/~Vd>GSNgZ\nlewd/JY^>pNV\nlewdness/Nmg\nlex/~VdGSNg\nlexeme/NgS\nlexer/NSg\nlexical/~J\nlexicalise/Vd!_₹\nlexicalize/Vd       # lexicalized is an adjective\nlexicographer/NgS\nlexicographic/J\nlexicographical/J\nlexicography/Nmg\nlexicon/~NSgV\nlexis/~Nmg\nlg/~N\nliabilities/~N\nliability/~Ngr\nliable/~Jr\nliaise/VGdS\nliaison/~NgSV\nliar/~NgS\nlib/~NgV\nlibation/NSg\nlibber/NgS\nlibel/~NSgVGd>Z\nlibeler/Ng\nlibelled/VtT!@_₹\nlibeller/NSg!@_₹\nlibelling/V6!@_₹\nlibellous/J!@_₹\nlibelous/J\nliberal/~JYpNgS\nliberalisation/NgS!_₹\nliberalise/VGdS!_₹\nliberalism/~Ng\nliberality/Ng\nliberalization/~NSg\nliberalize/VGdS\nliberalness/Ng\nliberate/~VdSGen\nliberation/~Nge\nliberator/~NgS\nlibertarian/~NSgJ\nlibertarianism/Nmg\nlibertine/~NgSJ\nliberty/~NSg\nlibidinal/J\nlibidinous/J\nlibido/NgS\nlibrarian/~NgS\nlibrarianship/N\nlibrary/~NSg\nlibrettist/~NgS\nlibretto/~NSg\nlice/~N9\nlicence/NgSV!@_₹\nlicense/~NgSVGd\nlicensed/~JVtTU\nlicensee/~NgS\nlicentiate/~NSg\nlicentious/JYp\nlicentiousness/Ng\nlichen/~NwgSV\nlicit/JY\nlick/~VdGSNgz\nlicking/~NgV6\nlicorice/NSg\nlicorices/N!_₹\nlid/~NSgV\nlidar/NgS\nlidded/VtTJ\nlidless/J\nlido/NgS\nlie/~VdSNg\nlied/~NgVtT>\nlief/J>^\nliege/~NSgJ\nlien/~NgSV\nlieu/~Ng\nlieutenancy/Ng\nlieutenant/~NgSJ\nlife/~NwgV>Z\nlife cycle/NgS\nlife science/NgS\nlifebelt/NS\nlifeblood/Nmg\nlifeboat/~NgSV\nlifebuoy/NgS\nlifeforms/N\nlifeguard/NSg\nlifeless/~JYp\nlifelessness/Ng\nlifelike/J\nlifeline/~NgS\nlifelong/~J\nlifer/Ng\nlifesaver/NSg\nlifesaving/JNg\nlifespan/~NS\nlifestyle/~NSg\nlifetime/~NgS\nlifework/NgS\nlift/~Vd>GSNgZ\nlifter/Ng\nliftoff/NSg\nligament/~NgS\nligate/VGdSn\nligation/Ng\nligature/NgSVGd\nlight/~NwSVGdJ^er\nlight gun/NgS\nlight's/e\nlighted/~VtTJU\nlighten/~VSd>GZ\nlightener/Ng\nlighter/~NSgVJ\nlightface/Ngd\nlightheaded/J\nlighthearted/JYp\nlightheartedness/Ng\nlighthouse/~NgS\nlighting's\nlightly/~Ry\nlightness/~Nmg\nlightning/~NmJV\nlightproof/J\nlightsaber/NgS\nlightship/NgS\nlightweight/~NSgJV\nligneous/J\nlignin/~N\nlignite/Nmg\nlii\nlikability/Nmg\nlikable/JpE\nlikableness/Nmg\nlike/~VGdSNgJCPE\nlikeability/Ng!@_₹\nlikeable/Jp!@_₹\nlikeableness/Ng!@_₹\nlikelihood/~NmgU\nlikelihoods/N\nlikeliness/NmgU\nlikely/~J>^pNU\nliken/VSGd\nlikeness/~NgVU\nlikenesses/N\nliker/NJ\nlikewise/~R\nliking/~VNg\nlilac/~NwSgJ\nlilliputian/NJ\nlilo/~NS\nlilt/VdGSNg\nlily/~NSgJ\nlimb/~NgSV\nlimber/JVdGSNU\nlimberness/Nmg\nlimbless/J\nlimbo/~NSgV\nlime/~NwgSVGdJ\nlimeade/NwSg\nlimelight/~NmgV\nlimerick/~NSg\nlimescale/Ng\nlimestone/~Nmg\nlimey/JNS\nliminal/J\nliminality/NgS\nlimit/~NSJ>VGdeZ\nlimit's\nlimitation/~NwSge\nlimitations/~N\nlimited/~VJYNU\nlimiter's\nlimiting/~NSV\nlimitless/JYp\nlimitlessness/Ng\nlimn/VdSG\nlimo/NgS\nlimousine/~NgS\nlimp/~Vd>GSNgJY^p\nlimpet/NgS\nlimpid/JYp\nlimpidity/Ng\nlimpidness/Ng\nlimpness/Ng\nlimy/J>^\nlinage/Ng\nlinchpin/NSgV\nlinden/~JNgS\nline/~NgSVGd>Zz\nline break/NgS\nlineage/~NgS\nlineal/~JY\nlineament/NSg\nlinear/~JYN\nlinearity/Ng\nlinearize/VdSG>\nlinebacker/~NgS\nlined/~JVtTU\nlinefeed/NgS\nlineman/~N0g\nlinemen/N9\nlinen/~NwSgJ\nlinens/Ng\nliner/~NgV\nlinerless/J\nlinesman/N0g\nlinesmen/N9\nlineup/~NgS\nling/~Ng\nlinger/VGd>SZz\nlingerer/Ng\nlingerie/~Ng\nlingering/~NVY\nlingo/N0g\nlingoes/N9\nlingual/~JN\nlinguine/Ng\nlinguist/~NSg\nlinguistic/~JSQ\nlinguistics/~Nmg\nliniment/NSgV\nlining/~NgV\nlink/~NgSVdGB\nlinkage/~NgS\nlinker/NgS\nlinkman/N\nlinkmen/9\nlinkup/NgS\nlinnet/NgS\nlino/~N\nlinoleum/Ng\nlinseed/Ng\nlint/NVdGe\nlint's\nlintel/NgS\nlinter/NSg\nlints/NV\nlinty/J^>\nlion/~NgSJ\nlioness/NgS\nlionhearted/J\nlionisation/Ng!_₹\nlionise/VGdS!_₹\nlionization/Ng\nlionize/VGdS\nlip/~NSgV\nlip gloss/NwgS\nlipid/~NSg\nliposuction/NwSgV\nlipped/JVtT\nlippy/JN\nlipread/VG>S\nlipreader/Ng\nlipreading/NgV\nlipstick/~NwgSVdG\nliq/\nliquefaction/~Nmg\nliquefy/VdSG\nliqueur/NwSgV\nliquid/~NwgSJ\nliquidate/VGdSJXn\nliquidation/~Nmg\nliquidator/NgS\nliquidise/VGd>SZ!_₹\nliquidiser/Nwg!_₹\nliquidity/~Nmg\nliquidize/VGd>SZ\nliquidizer/Nwg\nliquor/~NwgSVdG\nliquorice/Nmg!_₹\nlira/~N0g\nlire/~N9\nlisle/~Ng\nlisp/~NgSVd>GZ\nlisper/Ng\nlissom/J!_₹\nlissome/J\nlist/~NgSVdGnzX\nlisted/~VJU\nlisteme/NgS\nlisten/~Vd>GNgBZ\nlistener/~Ng\nlister/NgS\nlisteria/N\nlisting/~JVNg\nlistless/JYp\nlistlessness/Nmg\nlit/~VtT>JNZ\nlitany/NSg\nlitchi/NgS\nlite/~JNV\nliter/~Ng\nliteracy/~Nmg\nliteral/~JYpNSg\nliteralness/Nmg\nliterariness/Nmg\nliterary/~Jp\nliterate/~JYNSg\nliterati/Ng\nliterature/~Nmg\nlithe/JY^>pVN\nlitheness/Nmg\nlithesome/J\nlithium/~Nmg\nlithograph/N0gVd>GZ\nlithographer/Ng\nlithographic/JQ\nlithographs/N9V\nlithography/~Nmg\nlithosphere/NSg\nlitigant/NSgJ\nlitigate/VdSG>nr\nlitigation/~Nmg\nlitigator/NgS\nlitigious/Jp\nlitigiousness/Nmg\nlitmus/Nmg\nlitotes/Ng\nlitre/NSg!@_₹\nlitter/~NgSVd>GJZ\nlitterateur/NgS\nlitterbug/NgS\nlitterer/Ng\nlittle/~J^>pINgDq\nlittleness/Nmg\nlittoral/~JNSg\nliturgical/~JY\nliturgist/NSg\nliturgy/~NwSg\nlivability/Nmg\nlivable/JU\nlive/~VGdSJ^rB\nlive action/Nmg\nliveable/J!_₹\nlivelihood/~NSg\nliveliness/Nmg\nlivelong/JNS\nlively/~J>^pN\nliven/VSGd\nliveness/NwgS\nliver/~NwSJ\nliver's\nliveried/VJ\nliverish/J\nliverwort/NgS\nliverwurst/Nmg\nlivery/~NSgVJe\nliveryman/Nge\nliverymen/9e\nlivestock/~Nmg\nliveware/Nmg\nlivid/JY\nliving/~VSJNg\nlix/K\nlizard/~NgS\nll/N\nllama/NSg\nllano/NSg\nlo/JN\nload/~NwSVGdrU\nload-bearing/J\nload's\nloadable/J\nloader/~NgS\nloading's\nloaf/~NgSVd>GZ\nloafer/NgV\nloam/NgVJ\nloamy/J^>\nloan/~NgSVd>GZ\nloaner/Ng\nloansharking/VNg\nloanword/NgS\nloath/J>VGdSzZ\nloathe/V\nloather/Ng\nloathing/~NmgV\nloathsome/JYp\nloathsomeness/Nmg\nloaves/N\nlob/VdSNg\nlobar/J\nlobbed/VtT\nlobber/NgS\nlobbing/V6\nlobby/~NSgVGd\nlobbyist/~NgS\nlobe/~NgS\nlobotomise/VdSG!_₹\nlobotomize/VdSG\nlobotomy/NSg\nlobster/~JNgSV\nlobstering/NgV\nlobsterman/Ng\nlobstermen/9g\nlocal/~JYNSg\nlocale/~NgS\nlocalhost/NSg\nlocalisation/Nwg!_₹\nlocalise/VdSG!_₹\nlocalish/J\nlocalism/Nmg\nlocalist/JNgs\nlocality/~NSg\nlocalization/~Nwg\nlocalize/VdSG>\nlocate/~VGdSErn\nlocation/~NwSgE\nlocation's/r\nlocative/NSgJ\nlocator/~NgS\nlocavore/NSg\nloci/~N\nlock/~NgSVd>GBZ\nlock down/V/\nlock picking/Nmg\nlock screen/NgS\nlockdown/~NwgS\nlocker/~Ng\nlocket/NgS\nlockfile/NgS\nlockjaw/Ng\nlockout/~NgS\nlocksmith/~Ng\nlocksmiths/N\nlockstep/Ng\nlockup/NgS\nloco/~JNSV\nlocomotion/~Ng\nlocomotive/~NgSJ\nlocoweed/NSg\nlocum/NS\nlocus/~Ng\nlocust/~NSgV\nlocution/NwgS\nlode/NgS\nlodestar/NgS\nlodestone/NgS\nlodge/~NSgVd>GzZ\nlodger/~Ng\nlodging/~NwgV\nlodgings/~Ng\nloft/~NgSVdGJ\nloftily/Ry\nloftiness/Nmg\nlofty/~J>^p\nlog/~NSgV\nlog in/V/\nlog off/V/\nlog on/V/\nlog out/V/\nloganberry/NwSg\nlogarithm/~NSg\nlogarithmic/~J\nlogbook/NSg\nloge/NgS\nlogfile/NgS\nlogged/~VtT\nlogger/~NSg\nloggerhead/NSg\nloggia/~NSg\nlogging/~V6Ng\nlogic/~JNmgV\nlogical/~JY\nlogicality/Ng\nlogician/NgS\nlogin/NSgV\nlogistic/~JNS\nlogistical/~JY\nlogistician/NgS\nlogistics/~Ng\nlogit/NgS\nlogjam/NSgV\nlogo/~NgS\nlogoff/NSg\nlogographic/J\nlogon/NSgV\nlogotype/NSg\nlogout/NSg\nlogrolling/NgV\nlogy/J>^N\nloin/~NgS\nloincloth/N0g\nloincloths/N9\nloiter/VGd>SNZ\nloiterer/Ng\nloitering/V6Ng\nlolcat/NSg\nloll/VdSG\nlollipop/NSg\nlollop/VGSd\nlolly/NSJ\nlollygag/VSN\nlollygagged/VtT\nlollygagging/V6\nlone/~JY>Z\nloneliness/~Nmg\nlonely/~J^>p\nloner/~Ng\nlonesome/~JYpN\nlonesomeness/Ng\nlong/~J^NSVdGK\nlong-term/J\nlong's\nlongboat/NgS\nlongbow/NgS\nlonger/~JcN\nlonger-term/J>\nlongevity/~Ng\nlongform/J\nlonghair/~NgSJ\nlonghand/Nmg\nlonghorn/NgS\nlonghouse/NS\nlonging/~VSNgY\nlongish/J\nlongitude/~NgS\nlongitudinal/~JYN\nlongnose/J\nlongshoreman/N0g\nlongshoremen/N9\nlongsighted/J\nlongstanding/~J\nlongsword/NSg\nlongtime/~J\nlongueur/NSg\nlongways/\nloo/~NV\nloofah/N0gV\nloofahs/N9V\nlook/~Vd>GSNgZ\nlook up/V/\nlookalike/NgS\nlooker/NgS\nlookout/~NgS\nlookup/~NSV\nloom/~NgSVdG\nloon/~NgS\nloonie/Ng\nloony/J>^NSg\nloop/~NgSVdG\nloopback/NwgS\nloophole/~NgSV\nloopy/J>^\nloos/~N>nX\nloose/~VdGSJ^NU\nloosely/~Ry\nloosen/~VGSdU\nlooseness/Nmg\nloosey-goosey/J\nloot/~NgSVd>GZ\nlooter/Ng\nlooting/~NmgV\nlop/~VSN\nlope/~VGdSNg\nlopped/VtT\nlopping/NV6\nlopsided/JYp\nlopsidedness/Nmg\nloquacious/JYp\nloquaciousness/Nmg\nloquacity/Nmg\nlord/~NgSVdGY\nlordliness/Nmg\nlordly/J^>p\nlordship/~NSg\nlore/~NmgV\nlorebook/NgS\nlorgnette/NSg\nloris/NgS\nlorn/JV\nlorry/~NSgV\nlose/~VbG>SZz\nloser/~NgS\nlosing/~VJNmg\nloss/~NwgSV\nlossless/~J\nlossy/J>^\nlost/~VtTJ\nlot/~NSgV\nlotion/NSgV\nlottery/~NSg\nlotto/~Ng\nlotus/~NgS\nlouche/JNV\nloud/~J>Y^pN\nloudhailer/NSg\nloudmouth/N0gd\nloudmouths/N9\nloudness/Ng\nloudspeaker/~NgS\nlough/~N0\nloughs/N9\nlounge/~VGd>SNgZ\nlounger/Ng\nlour/VdGSN\nlouse/Nw0SVdGe\nlouse's\nlousily/Ry\nlousiness/Nmg\nlousy/J^>p\nlout/NgSV\nloutish/JYp\nlouver/NgSd<\nlouvre/NgSd!@_₹\nlovableness/Nmg\nlovably/Ry\nlove/~NwgSVGd>ZB\nlovebird/NSgV\nlovechild/Ng\nloved/~VtTJU\nloveless/J\nloveliness/Nmg\nlovelorn/JNm\nlovely/~J>^pNSg\nlovemaking/Nmg\nlover/~Ng\nlovesick/J\nlovey/NS\nloving/~NJYV6\nlow/~J^Y>pNSgVGdRyZ\nlow-budget/J\nlow-cost/J\nlow-end/J\nlow fidelity/J\nlow-income/J\nlow-level/J\nlow-maintenance/J\nlow-profile/J\nlow-quality/J\nlowball/JNSgVGd\nlowborn/J\nlowboy/NgS\nlowbrow/JNSg\nlowdown/NgJ\nlower/~JVGd\nlower-income/J\nlowercase/~NwgSJVdG\nlowermost/J\nlowish/J\nlowland/~NSg>Z\nlowlander/Ng\nlowlife/JNSg\nlowliness/Nmg\nlowly/~J^>p\nlowness/Nmg\nlox/NgV\nloyal/~J^YE\nloyaler/Jc\nloyalism/Nmg\nloyalist/~NSg\nloyalties/~N9\nloyalty/~N0wgE\nlozenge/~NSgV\nltd/~J\nluau/NgS\nlubber/NgSY\nlube/NwgSVGdJ\nlubricant/~NSg\nlubricate/VdSGn\nlubrication/~Ng\nlubricator/NgS\nlubricious/JY\nlubricity/Ng\nlucid/~JYpN\nlucidity/Nmg\nlucidness/Nmg\nluck/~NgSVdG\nluckily/~RyU\nluckiness/NmgU\nluckless/J\nlucky/~J^>pNU\nlucrative/~JYp\nlucrativeness/Nmg\nlucre/Ng\nlucubrate/VGdSn\nlucubration/Nwg\nludicrous/~JYp\nludicrousness/Nmg\nludo/N\nluff/NSVdG\nlug/~NSgV\nluge/~NSV\nluggage/~Nmg\nlugged/VtTJ\nlugger/NgS\nlugging/V6N\nlughole/NS\nlugsail/NSg\nlugubrious/JYp\nlugubriousness/Ng\nlukewarm/~JYp\nlukewarmness/Ng\nlull/~NgSVdG\nlullaby/~NSgV\nlulu/~NS\nluma/Ng\nlumbago/NgV\nlumbar/~JN\nlumber/~NmgSVd>GZ\nlumberer/Ng\nlumbering/~NgJ\nlumberjack/NSgV\nlumberman/Ng\nlumbermen/9\nlumberyard/NSg\nlumen/~N\nluminary/NSg\nluminescence/Nmg\nluminescent/J\nluminosity/~Nmg\nluminous/~JY\nlummox/NgS\nlump/~NgSVdGn\nlumpectomy/NSg\nlumpenproletariat/N\nlumpiness/Ng\nlumpish/J\nlumpy/J^>p\nlunacy/NSg\nlunar/~JN\nlunatic/~NSgJ\nlunch/~NwgSVGd\nlunchbox/NSg\nluncheon/~NSgV\nluncheonette/NSg\nlunchroom/NgS\nlunchtime/~NwgS\nlung/~NgSdG\nlunge/NSgV\nlungfish/N09gS      # singular and plural, also has a plural in -s\nlungful/NS\nlunkhead/NgS\nlupin/NSg!_₹\nlupine/~JNgS\nlupus/~Ng\nlurch/NgSVGd\nlure/~NwgSVGd\nlurgy/N\nlurid/JYp\nluridness/Ng\nlurk/Vd>GSNZ\nluscious/JYp\nlusciousness/Nmg\nlush/~JY^>pNgSV\nlushness/Nmg\nlust/~NmgSVdG\nluster/NmgV<\nlusterless/J<\nlustful/JY\nlustily/Ry\nlustiness/Nmg\nlustre/NmgV!@_₹\nlustreless/J!@_₹\nlustrous/JY\nlusty/J^>p\nlutanist/NSg\nlute/~NgSV\nlutenist/NSg\nlutetium/Nmg\nluthier/NSg\nlux/~NV\nluxuriance/Ng\nluxuriant/JY\nluxuriate/VdSGn\nluxuriation/Ng\nluxurious/~JYp\nluxuriousness/Ng\nluxury/~Nw☁SgJ\nlvi\nlvii\nlxi\nlxii\nlxiv\nlxix\nlxvi\nlxvii\nlyceum/~NgS\nlychgate/NS\nlye/NmgVG\nlying/~VNgJ\nlymph/~Nmg\nlymphatic/~JNSg\nlymphocyte/NSg\nlymphoid/J\nlymphoma/~NSg\nlynch/~VGd>SNzZ\nlyncher/Ng\nlynching/~NgV\nlynx/~NgS\nlyre/~NgSV\nlyrebird/NgS\nlyric/~JNSg\nlyrical/~JY\nlyricism/Nmg\nlyricist/~NSg\nlysosomal/J\nlysosomes/N\nm/JNSVKr\nmRNA/Nmg\nmTOR                # mammalian target of rapamycin\nma/~NSgH\nma'am/NV\nmac/~NSgGd\nmacOS/OgS\nmacabre/~J\nmacadam/NgV\nmacadamia/NSg\nmacadamise/VGdS!_₹\nmacadamize/VGdS\nmacaque/NgS\nmacaroni/NwgSJ\nmacaroon/NgS\nmacaw/NSg\nmace/~NgSV\nmacerate/VdGSNn\nmaceration/Ng\nmach/~g\nmachete/NSgV\nmachinate/VGdSnX\nmachination/NgS\nmachine/~NSgVdGB\nmachinery/~Nmg\nmachinist/NgS\nmachismo/Nmg\nmacho/~JNg\nmackerel/~NwSg\nmackinaw/NSg\nmackintosh/~NgS\nmacrame/NgV\nmacro/~JNSg(\nmacroaggregate/Ng\nmacrobiotic/JS\nmacrobiotics/Nwg\nmacrocosm/NSg\nmacroeconomic/~JS\nmacroeconomics/Ng\nmacrology/NS\nmacron/~NgS\nmacrophages/N\nmacroscopic/~J\nmad/~JYpVSg\nmadam/~NSgV\nmadame/~Ng\nmadcap/JNgS\nmadden/~VdGS\nmaddening/JYV\nmadder/NgSJcV\nmaddest/Ju\nmadding/JV\nmade/~VtTrU           # removed `N`, noun is dialectal\nmade up/V\nmade-up/J\nmademoiselle/N0gSV\nmadhouse/~NSg\nmadman/~N0g\nmadmen/N9\nmadness/~Nmg\nmadras/~NgS\nmadrasa/~NSg\nmadrasah/Ng\nmadrasahs/N\nmadrassa/NSg\nmadrigal/NSg\nmadwoman/Ng\nmadwomen/9\nmaelstrom/NSg\nmaestro/~NSg\nmafia/~NSg\nmafiosi/N\nmafioso/NgS\nmag/~NSgV\nmagazine/~NSg\nmage/~NgS\nmagenta/~NmgJ\nmaggot/~NgSVJ\nmaggoty/J\nmagi/~Ng\nmagic/~NwSgJV\nmagical/~JY\nmagician/~NSg\nmagicked/VtT\nmagicking/V6\nmagisterial/JY\nmagistracy/Nmg\nmagistrate/~NSg\nmagma/~Nmg\nmagnanimity/Nmg\nmagnanimous/JY\nmagnate/~NSg\nmagnesia/~Nmg\nmagnesium/~Nmg\nmagnet/~NgS\nmagnetic/~JQ\nmagnetisable/J!_₹\nmagnetisation/NwSge!_₹\nmagnetise/VGdSe!_₹\nmagnetism/~Nmg\nmagnetite/Nmg\nmagnetizable/J\nmagnetization/NwSge\nmagnetize/VGdSe\nmagneto/~NSg\nmagnetohydrodynamic/J\nmagnetohydrodynamics/Nmg\nmagnetometer/NSg\nmagnetopause/NSg\nmagnetosheath/NSg\nmagnetosphere/N\nmagnetostriction/Nmg\nmagnetostrictive/J\nmagnification/~Nmg\nmagnificence/Nmg\nmagnificent/~JY\nmagnifier/NgS\nmagnify/VGd>SZXn\nmagniloquence/Ng\nmagniloquent/J\nmagnitude/~NwSg\nmagnolia/~NgSJ\nmagnon/N\nmagnum/~NgS\nmagpie/~NgSV\nmagus/Ng\nmaharajah/N0g\nmaharajahs/N9\nmaharani/NSg\nmaharishi/NSg\nmahatma/~NSg\nmahjong/Ng\nmahogany/~NwSgJ\nmahout/NgSV\nmaid/~NgSnX\nmaiden/~NgJY\nmaidenhair/Nmg\nmaidenhead/~NSg\nmaidenhood/Nmg\nmaidservant/NSg\nmail/~NwgSVd>GzZ\nmailbag/NSg\nmailbomb/NSVGd\nmailbox/~NgS\nmailer/~Ng\nmailing/~NwgV\nmaillot/NSg\nmailman/N0g\nmailmen/N9\nmailshot/NSV\nmaim/VdGSN\nmain/~JYVSNg\nmainboard/NSg\nmainframe/~NSg\nmainland/~NgS\nmainline/~JVGdSNg\nmainmast/NgS\nmainsail/NgS\nmainspring/NgS\nmainstay/~NgS\nmainstream/~JNSgVdG\nmaintain/~VGdSB\nmaintainability/Nmg\nmaintainable/JU\nmaintained/~JVU\nmaintainer/NgS\nmaintenance/~Nmg\nmaintop/NSg\nmaisonette/NgS\nmaize/~Nmg\nmajestic/~JQ\nmajesty/~NwSg\nmajolica/Ng\nmajor/~JYNSgVGd\nmajordomo/NgS\nmajorette/NgS\nmajoritarian/JNSg\nmajoritarianism/Nm\nmajority/~NSg\nmake/~VGSNUr\nmake believe/V\nmake-believe/NgSV\nmake file/NgS\nmake's/r\nmakeover/~NgS\nmaker/~NSg\nmakeshift/~NSgJ\nmakeup/~NwgSV\nmakeweight/NS\nmaking/~NgSV6\nmakings/Ng\nmalachite/NgJ\nmaladjusted/VJ\nmaladjustment/Ng\nmaladministration/N\nmaladroit/JYpN\nmaladroitness/Ng\nmalady/NSg\nmalaise/Ng\nmalamute/NgS\nmalapropism/NSg\nmalaria/~Nmg\nmalarial/JN\nmalarkey/Ng\nmalathion/Ng\nmalcontent/JNgSV\nmale/~JpNgS\nmalediction/NSg\nmalefaction/Nmg\nmalefactor/NSg\nmalefic/JN\nmaleficence/Ng\nmaleficent/J\nmaleness/Nmg\nmalevolence/Ng\nmalevolent/~JY\nmalfeasance/Ng\nmalfeasant/NgSJ\nmalformation/NwSg\nmalformed/J\nmalfunction/~NwgSVdG\nmalice/~NgV\nmalicious/~JYp\nmaliciousness/Nmg\nmalign/JVdSG\nmalignancy/NSg\nmalignant/~JYN\nmalignity/Ng\nmalinger/VGSd>Z\nmalingerer/Ng\nmall/~NgSV\nmallard/~NSg\nmalleability/Nmg\nmalleable/~J\nmallet/~NgSV\nmallow/NgS\nmalnourished/JV\nmalnutrition/~Ng\nmalocclusion/Ng\nmalodorous/J\nmalpractice/NSg\nmalt/~NwgSVdG\nmalted/JNgSVtT\nmaltose/~Nmg\nmaltreat/VGdSL\nmaltreatment/Nmg\nmalty/J^>\nmalware/~Nmg\nmam/~NS\nmama/~NgS\nmamba/~NSg\nmambo/~NSgVGd\nmamma/Ng\nmammal/~NgS\nmammalian/~JNgS\nmammary/JN\nmammogram/NgS\nmammography/Nmg\nmammon/Og\nmammoth/~N9gJ\nmammoths/~N0\nmammy/NSg\nman/~NOSJYVU        # removed `8` pronoun, dialectal & complicates lint heuristics\nman child/Ng\nman-made/J\nman's/~NOJIVW\nmanacle/NSgVdG\nmanage/~VGd>SNZL\nmanageability/Nmg\nmanageable/~JU\nmanagement/~NwgS\nmanager/~NgS\nmanageress/NS\nmanagerial/~J\nmanana/Ngm\nmanatee/~NSg\nmandala/~NSg\nmandamus/NgSV\nmandarin/~NgSJ\nmandate/~NSgVdG\nmandatory/~JN\nmandible/~NgS\nmandibular/~J\nmandolin/~NgSV\nmandrake/NwgS\nmandrel/NSgV\nmandrill/NgS\nmane/~NgSd\nmanege/Ng\nmaneuver/~NgSVdGBz\nmaneuverability/Ng\nmanful/JY\nmanga/~NwSg\nmanganese/~Nmg\nmange/Nmgd>Z\nmanger/Ng\nmangetout/NS\nmanginess/Ng\nmangle/VGd>SNgZ\nmango/~Nw0gV\nmangoes/N9V\nmangrove/~NgS\nmangy/J^>p\nmanhandle/VGdS\nmanhole/NSg\nmanhood/~Nmg\nmanhunt/~NSg\nmania/~NwSg\nmaniac/~NgS\nmaniacal/JY\nmanic/~JNSgQ\nmanicure/NgSVGd\nmanicurist/NgS\nmanifest/~JYNgSVdG\nmanifestation/~NwSg\nmanifesto/~NSgV\nmanifold/~JNgSVGd\nmanikin/NSg\nmanila/~JNg\nmanilla/NgJ!_₹\nmanioc/NgS\nmanipulable/J\nmanipulate/~VGdSXnv\nmanipulation/~NwgS\nmanipulative/~JYN\nmanipulator/NgS\nmankind/~Ng\nmanky/J\nmanlike/J\nmanliness/Ng\nmanly/~J^>U\nmanna/Nmg\nmanned/~JVtTU\nmannequin/NSg\nmanner/~NgSd\nmannerism/NSg\nmannerly/JRyU\nmanning/~V6U\nmannish/JYp\nmannishness/Ng\nmanoeuvrability/Ng!@_₹\nmanoeuvre/NSgVdGBz!@_₹\nmanometer/NSg\nmanor/~NSg\nmanorial/J\nmanosphere/Ng\nmanpower/~Ng\nmanque/J\nmansard/JNgS\nmanscape/NgSVdG\nmanse/~VSNgXn\nmanservant/Ng\nmansion/~Ng\nmanslaughter/~Ng\nmanta/~NSg\nmantel/NgSV\nmantelpiece/NSg\nmantelshelf/N\nmantelshelves/N\nmantes/N\nmantilla/NSg\nmantis/~NgS\nmantissa/NSg\nmantle/~NSVGdE\nmantle's\nmantra/~NgS\nmanual/~NgSJY\nmanufacturability/Ng\nmanufacture/~NSgVd>GZrB\nmanufacturer/~Ng\nmanufacturing/~NgJVr\nmanumission/NSg\nmanumit/VS\nmanumitted/VtT\nmanumitting/V6\nmanure/~VGdSNwg\nmanuscript/~JNgS\nmany/~IJDqg\nmap/~NSVr\nmap's\nmaple/~NwSg\nmapmaker/NSg\nmapped/~VtTr\nmapper/NgS\nmapping/~NSV6\nmar/~VSN\nmarabou/NgS\nmarabout/NSg\nmaraca/NgS\nmaraschino/NgS\nmarathon/~NSgV>Z\nmarathoner/Ng\nmaraud/VGd>SZ\nmarauder/~Ng\nmarble/~NgSVGdJ\nmarbleise/VGdS!_₹\nmarbleize/VGdS\nmarbling/VNg\nmarch/~NgSVGd>Z\nmarcher/NgS\nmarchioness/NgS\nmare/~NgS\nmargarine/Nmg\nmargarita/~NwgS\nmarge/~Nmg          # short for \"margarine\"\nmargin/~NgSV\nmarginal/~JYNS\nmarginalia/Nmg\nmarginalisation/N!_₹\nmarginalise/VGdS!_₹\nmarginality/Ng\nmarginalization/Ng\nmarginalize/VGdS\nmaria/~Ng\nmariachi/JNgS\nmarigold/NgSJ\nmarijuana/~Ng\nmarimba/NSg\nmarina/~NgS\nmarinade/NSgVdG\nmarinara/JNg\nmarinate/VdSGn\nmarination/Ng\nmarine/~J>NgSVZ\nmariner/~Ng\nmarionette/NgSV\nmarital/~JY\nmaritime/~J\nmarjoram/Ng\nmark/~NgSVdGr\nmarked/~JpVtTU # \"Markedness\" is a technical term in linguistics, so adding it here\nmarkedly/~Ry\nmarker/~NgSV\nmarket/~NgSVd>GZB\nmarketability/Nmg\nmarketable/JU\nmarketeer/NSg\nmarketer/NgS\nmarketing/~V6Nmg\nmarketplace/~NSg\nmarking/~NSgV6\nmarkka/Ng\nmarkkaa/N\nmarksman/~N0g\nmarksmanship/~Nmg\nmarksmen/N9\nmarkup/~NwgS\nmarl/NgV\nmarlin/~NgS\nmarlinespike/NSg\nmarmalade/~NmgV\nmarmoreal/J\nmarmoset/NSg\nmarmot/NgS\nmaroon/~NmgSJVdG\nmarque/~NgS\nmarquee/~NSgJV\nmarquess/~NgS\nmarquetry/Nmg\nmarquis/~NgS\nmarquise/Ng\nmarquisette/Ng\nmarred/~JVtTU\nmarriage/~NwSgr\nmarriageability/Nmg\nmarriageable/JN\nmarried/~JVSNg\nmarring/V6N\nmarrow/~NwgS\nmarry/~VGdSr\nmarsh/~NgS\nmarshal/~NSgVdG\nmarshalled/VtT!@_₹\nmarshalling/V6N!@_₹\nmarshland/~NSg\nmarshmallow/~NSgV\nmarshy/~J>^\nmarsupial/NgSJ\nmart/~NgSVnX\nmarten/~Ng\nmartensite/~N\nmartial/~JYN\nmartian/~JNS\nmartin/~NgS\nmartinet/NgS\nmartingale/NgSV\nmartini/~NSg\nmartyr/~NgSVdG\nmartyrdom/~Ng\nmarvel/~NgSVdG\nmarvelled/VtT!@_₹\nmarvelling/V6N!@_₹\nmarvellous/JY!@_₹\nmarvelous/~JY\nmarzipan/NmgV\nmasc/~JN\nmascara/NwgSVGd\nmascot/~NgSV\nmasculine/~JNSg\nmasculinity/~Ng\nmasculinization/Ng\nmasculinize/VdSG\nmaser/NSg\nmash/~NmgSVd>GZ\nmasher/NgS\nmashup/NgS\nmask/~NSVdGU\nmask's\nmaskable/J\nmasker/VSNg\nmasochism/Ng\nmasochist/NSg\nmasochistic/JQ\nmason/~NSgV\nmasonic/~J\nmasonry/~Nmg\nmasque/~NgSV\nmasquerade/~NSgVd>GZ\nmasquerader/Ng\nmass/~NwgSVdGJv\nmassacre/~NgSVGd\nmassage/~NSgVdG\nmassager/NgS\nmasseur/NSg\nmasseuse/NgS\nmassif/~NgS\nmassive/~JYpN\nmassiveness/Nmg\nmast/~NgSVd\nmastectomy/NSg\nmaster/~NSJVdGr\nmaster's/N\nmasterclass/NS\nmasterful/~JY\nmasterly/J          # removed archaic adverb POS\nmastermind/~NSgVGd\nmasterpiece/~NgS\nmasterstroke/NSg\nmasterwork/NgS\nmastery/~Nmg\nmasthead/~NgSV\nmastic/Nmg\nmasticate/VGdSn\nmastication/Nmg\nmastiff/NSg\nmastitis/Nmg\nmastodon/NSg\nmastoid/JNSg\nmasturbate/VGdSn\nmasturbation/Nmg\nmasturbatory/J\nmat/~NSgVGd>JZ\nmatador/~NSg\nmatch/~NgSVr\nmatcha/Nmg\nmatchbook/NSg\nmatchbox/NgS\nmatched/~VNU\nmatcher/NgS\nmatching/~VJN\nmatchless/J\nmatchlock/NSg\nmatchmaker/NgS\nmatchmaking/NgV\nmatchstick/NgS\nmatchup/NgS\nmatchwood/Ng\nmate/~NgSV\nmaterial/~JYNwSgV\nmaterialisation/Ng!_₹\nmaterialise/VdSG!_₹\nmaterialism/~Ng\nmaterialist/~NSgJ\nmaterialistic/JQ\nmaterialization/Ng\nmaterialize/~VdSG\nmateriel/~Ng\nmaternal/~JYN\nmaternity/~Ng\nmatey/JNS\nmathematical/~JY\nmathematician/~NSg\nmathematics/~N0mg\nmathematisation/Ng!_₹\nmathematise/VdSG!_₹\nmathematization/Ng\nmathematize/VSdG\nmaths/NV!_₹\nmatinee/NSgV\nmating/~JNgV6\nmatins/Ng\nmatres/N!@_₹\nmatriarch/N0g\nmatriarchal/J\nmatriarchs/N9\nmatriarchy/NSg\nmatrices/~N9\nmatricidal/J\nmatricide/NwgS\nmatriculate/VdGSNn\nmatriculation/~Nmg\nmatrimonial/~JN\nmatrimony/Nmg\nmatrix/~N0g\nmatron/~NgSY\nmatte/~NSgJdGZ\nmatter/~NwSgVdG\nmatting/NgV6\nmattock/NSgV\nmattress/~NgSV\nmaturate/VGdSn\nmaturation/~Ng\nmature/~JY^>VGdS\nmaturity/~NSg\nmatzo/NSgH\nmatzoh/Ng\nmatzohs/N\nmatzot/N\nmaudlin/NJ\nmaul/NgSVd>GZ\nmauler/Ng\nmaunder/VdGSN\nmausoleum/~NSg\nmauve/NmgJ\nmaven/NSg\nmaverick/~JNSgV\nmaw/~NSg\nmawkish/JYp\nmawkishness/Ng\nmax/~JNgSVGd\nmaxi/~JNgS\nmaxilla/Ng\nmaxillae/9\nmaxillary/~JN\nmaxim/~NSg\nmaxima/~N\nmaximal/~JYN\nmaximalism/Ng\nmaximalist/NgSJ\nmaximisation/Ng!_₹\nmaximise/VGdS!_₹\nmaximization/Ng\nmaximize/~VGdS\nmaximum/~NSgJ\nmay/~NgA\nmaybe/~JRNSg        # adverb of probability/certainty/affirmation; modal adverb\nmayday/NgS\nmayflower/~NgS\nmayfly/NSg\nmayhem/~NmgV\nmayn't/VA\nmayo/~Nmg\nmayonnaise/NmgV\nmayor/~NSg\nmayoral/~JN\nmayoralty/Ng\nmayoress/NgS\nmaypole/NSgV\nmayst/V\nmaze/~NgSV\nmazurka/NgS\nmdse/N\nme/~Ia1o.           # I~pronoun a~personal 1~person .~singular o~object\nmead/~Ng\nmeadow/~NgSV\nmeadowlark/NgS\nmeager/~JYpV\nmeagerness/Ng\nmeagre/NJYpV!@_₹\nmeagreness/Ng!@_₹\nmeal/~NgSV\nmealiness/Ng\nmealtime/NSg\nmealy/J^>pN\nmealybug/NSg\nmealymouthed/J\nmean/~V>GSJY^pNgz\nmeander/~NSgVdGz\nmeanderings/Ng\nmeanie/Ng\nmeaning/~NwgVJ\nmeaningful/~JYp\nmeaningfulness/Nmg\nmeaningless/~JYp\nmeaninglessness/Nmg\nmeanness/Nmg\nmeant/~VtTU\nmeantime/~Ng\nmeanwhile/~Ng\nmeany/NSg\nmeas/V\nmeasles/~NmgV\nmeasly/J>^\nmeasurable/~JN\nmeasurably/Ry\nmeasure/~NSVdGr\nmeasure's\nmeasured/~JVU\nmeasureless/J\nmeasurement/~NwgS\nmeat/~NwgS\nmeatball/NgS\nmeathead/NgS\nmeatiness/Nmg\nmeatless/J\nmeatloaf/N0g\nmeatloaves/N9\nmeatpacking/Nmg\nmeaty/J^>p\nmecca/~NSg\nmechanic/~JNgS\nmechanical/~JYNS\nmechanics/~Nm9g\nmechanisation/Nmg!_₹\nmechanise/VdSG!_₹\nmechanism/~NSg\nmechanistic/~J\nmechanistically/Ry\nmechanization/~Nmg\nmechanize/VdSG\nmechanoluminescence/Nmg\nmechanoluminescent/J\nmechatronics/Ng\nmed/~NSg\nmedal/~NSgV\nmedalist/~NgS\nmedallion/~NSgV\nmedallist/NSg!@_₹\nmeddle/VGd>SZ\nmeddler/Ng\nmeddlesome/J\nmedia/~Nw09SgJ\nmedial/~JYNr\nmedian/~NgSJ\nmediate/~VdSGJrn\nmediated/~VU\nmediation/~NwSgr\nmediator/~NgS\nmedic/~JNSg\nmedicaid/g\nmedical/~JYNSg\nmedicament/Ng\nmedicare/~Ng\nmedicate/VGdSnX\nmedication/~Ng\nmedicinal/~JYN\nmedicine/~NwgSV\nmedico/NgS\nmedieval/~JN\nmedievalist/NgS\nmediocre/~JN\nmediocrity/NSg\nmeditate/VdSGnvX\nmeditation/~Ng\nmeditative/~JY\nmedium/~NgSJ\nmedley/~NgSV\nmedulla/NSg\nmedusa/~N\nmedusae/9\nmeed/NgV\nmeek/~JY^>pV\nmeekness/Ng\nmeerschaum/NSg\nmeet/~VGSNgJz\nmeet up/V/\nmeeting/~NwgSV\nmeetinghouse/NSg\nmeetup/NgS\nmeg/~NSV\nmega/~JN(\nmegabit/NSg\nmegabucks/Ng\nmegabyte/NgS\nmegachurch/NgS\nmegacycle/NSg\nmegadeath/Ng\nmegadeaths/N\nmegagram/NS\nmegahertz/Ng\nmegajoule/NS\nmegalith/N9g\nmegalithic/~J\nmegaliths/N9\nmegalomania/Ng\nmegalomaniac/NSgJ\nmegalomaniacal/J\nmegalopolis/~NgS\nmegameter/NS<\nmegametre/NS!@_₹\nmegapascal/NS\nmegaphone/NSgVdG\nmegapixel/~NSgJ\nmegastar/NS\nmegaton/NSg\nmegawatt/NgS\nmeh/JN\nmeiosis/~Ng\nmeiotic/J\nmelamine/~Ng\nmelancholia/Ng\nmelancholic/JNS\nmelancholy/~NgJ\nmelange/NgS\nmelanin/Nmg\nmelanoma/~NSg\nmelatonin/Nmg\nmeld/VdGSNg\nmelee/~NSgVJ\nmeliorate/VGdSnv\nmelioration/Nmg\nmellifluous/JYp\nmellifluousness/Nmg\nmellow/~J^Y>pNSVGd\nmellowness/Nmg\nmelodic/~JQ\nmelodious/JYp\nmelodiousness/Nmg\nmelodrama/~NwgS\nmelodramatic/JSQ\nmelodramatics/Ng\nmelody/~NwSg\nmelon/~NwSgJ\nmelt/~VdGSNr\nmelt down/V/\nmelt's\nmeltdown/~NSg\nmember/~NSVEr\nmember's\nmembership/~NwSgV\nmembrane/~NSg\nmembranous/J\nmeme/~NgSV\nmemento/~NgS\nmemo/~NgSV\nmemoir/~NgS\nmemoization/Nmg\nmemoize/VGdS\nmemorabilia/~Nmg\nmemorability/Ng\nmemorable/~JNU\nmemorably/Ry\nmemoranda/N9g\nmemorandum/~N0gS\nmemorial/~NSgJ\nmemorialise/VdSG!_₹\nmemorialize/VdSG\nmemorisation/Nmg!_₹\nmemorise/VdSG!_₹\nmemorization/Nmg\nmemorize/VdSG\nmemory/~NwSg\nmemsahib/NS\nmen/~N9g\nmenace/~NgSVGd\nmenacing/~JYV6N\nmenage/NgS\nmenagerie/~NgS\nmend/~Vd>GSNgZ\nmendacious/JY\nmendacity/Nmg\nmendelevium/Nmg\nmender/NgS\nmendicancy/Nmg\nmendicant/JNSg\nmending/V6Ng\nmenfolk/N0gS\nmenfolks/N9g\nmenhaden/Ng\nmenial/JYNgS\nmeningeal/J\nmeninges/N9\nmeningitis/~Nmg\nmeninx/Ng\nmenisci/N9\nmeniscus/N0g\nmenopausal/J\nmenopause/Nmg\nmenorah/N0g\nmenorahs/N9\nmensch/~NgS\nmenservants/N9\nmenses/Ng\nmenstrual/~JN\nmenstruate/VGdSJn\nmenstruation/Ng\nmensurable/J\nmensuration/Ng\nmenswear/Nmg\nmental/~JY          # removed slang/Indian/rare noun senses\nmentalist/JNSg\nmentality/~NSg\nmenthol/Ng\nmentholated/J\nmention/~NSgVGd\nmentioned/~VtTU\nmentor/~NgSVdG\nmentorship/N\nmenu/~NgSVG\nmeow/NgSVdG\nmercantile/~J\nmercantilism/Ng\nmercantilist/JNSg\nmercenary/~NSgJ\nmercer/~NgS\nmercerise/VGdS!_₹\nmercerize/VGdS\nmerch/Ng\nmerchandise/~NgSVGd>Z\nmerchandiser/Ng\nmerchandising/~NgV\nmerchant/~NgSVB\nmerchantability/Ng\nmerchantman/Ng\nmerchantmen/9\nmerciful/~JYU\nmerciless/JYp\nmercilessness/Ng\nmercurial/NJY\nmercuric/J\nmercury/~Ng\nmercy/~Nw☁SgV\nmere/~JY^NgSV\nmeretricious/JYp\nmeretriciousness/Ng\nmerganser/~NgS\nmerge/~Vd>GSNZ\nmerger/~Ng\nmeridian/~JNgSV\nmeridional/JNgS\nmeringue/NgSV\nmerino/NgS\nmerit/~NSgVe\nmerited/~JVU\nmeriting/V\nmeritless/J\nmeritocracy/NSg\nmeritocratic/J\nmeritorious/~JYp\nmeritoriousness/Nmg\nmermaid/~NSg\nmerman/Ng\nmermen/9\nmerrily/Ry\nmerriment/Ng\nmerriness/Nmg\nmerry/~J^>pN\nmerrymaker/NgS\nmerrymaking/NmgV\nmesa/~NgS\nmescal/NgS\nmescalin/N\nmescaline/Ng\nmesdames/N9\nmesdemoiselles/N9\nmesh/~NgSVdG\nmesmeric/J\nmesmerise/VGd>SZ!_₹\nmesmeriser/Ng!_₹\nmesmerism/Ng\nmesmerize/VGd>SZ\nmesmerizer/Ng\nmesomorph/Ng\nmesomorphs/N\nmeson/NSg\nmesosphere/NSg\nmesothelioma/Ng\nmesquite/NSg\nmess/~NgSVdG\nmessage/~NgSVGd\nmesseigneurs/N\nmessenger/~NSgV\nmessiah/~Ng\nmessiahs/N\nmessianic/~J\nmessieurs/N\nmessily/Ry\nmessiness/Nmg\nmessmate/NSg\nmessy/~J^>p\nmestizo/~NgS\nmet/~VtT\nmeta/~JN\nmeta tag/NgS\nmetabolic/~JN\nmetabolically/Ry\nmetabolise/VdSG!_₹\nmetabolism/~NwSg\nmetabolite/~NSg\nmetabolize/VdSG\nmetacarpal/JNSg\nmetacarpi/N\nmetacarpus/Ng\nmetacognition/Ng\nmetadata/~Nm\nmetal/~NwSgJVd\nmetalanguage/NgS\nmetalled/JVtT!@_₹\nmetallic/~JN\nmetallize/VGd>SZ    # ll vs l not clearly US/UK difference, few dictionaries include -ise spellings\nmetallurgic/J\nmetallurgical/~J\nmetallurgist/NgS\nmetallurgy/~Nmg\nmetalwork/~Ng>GZ\nmetalworker/NgS\nmetalworking/~Ng\nmetamorphic/JN\nmetamorphism/Nmg\nmetamorphose/VGdS\nmetamorphosis/~Ng\nmetaphor/~NgSV\nmetaphoric/J\nmetaphorical/~JY\nmetaphysical/~JY\nmetaphysics/~Ng\nmetastases/9\nmetastasis/Ng\nmetastasise/V!_₹\nmetastasize/VdSG\nmetastatic/J\nmetatarsal/JNgS\nmetatarsi/N\nmetatarsus/Ng\nmetatheses/N9\nmetathesis/N0g\nmetaverse/NgS\nmete/VGd>SNgJZ\nmetempsychoses/N\nmetempsychosis/Ng\nmeteor/~NgSV\nmeteoric/J\nmeteorically/Ry\nmeteorite/~NSg\nmeteoroid/NSg\nmeteorologic/JN\nmeteorological/~J\nmeteorologist/~NSg\nmeteorology/~Ng\nmeter/~NgVGd\nmetformin/N\nmeth/NSg\nmethadone/Ng\nmethamphetamine/NgS\nmethane/~Ng\nmethanol/~Ng\nmethinks/\nmethod/~NgSV\nmethodical/~JYp\nmethodicalness/Ng\nmethodological/~JY\nmethodology/~NSg\nmethotrexate/N\nmethought/V\nmethyl/~Ng\nmeticulous/~JYp\nmeticulousness/Ng\nmetier/NgS\nmetre/NSgV!@_₹\nmetric/~JNSV\nmetrical/~JY\nmetricate/VGdSn\nmetrication/Ng\nmetricise/VGdS!_₹\nmetricize/VGdS\nmetro/~NSgJ\nmetronome/NgS\nmetronomic/J\nmetropolis/~NgS\nmetropolitan/~NJ\nmettle/NgJ\nmettlesome/J\nmew/NSgVGd\nmewl/VdGSN\nmews/NgV\nmezzanine/~NgSJV\nmezzo/~NSg\nmfg/N\nmfr/NS\nmg/~\nmgr/~N\nmi/~NgnX\nmiaow/NSgVGd!_₹\nmiasma/NgS\nmic/~NSV\nmica/~Ng\nmice/~N9V\nmick/~NSJ\nmickey/~NgSV\nmicro/~JNSgV(\nmicroaggression/NSg\nmicroarchitecture/NgS\nmicrobe/NgS\nmicrobial/~JN\nmicrobiological/J\nmicrobiologist/NgS\nmicrobiology/~Ng\nmicrobiome/NSg\nmicroblog/NgSV\nmicroblogged/VtT\nmicroblogging/NgV6\nmicrobrewery/NSg\nmicrochip/NgSV\nmicrocircuit/NSg\nmicrocode/NmgV\nmicrocomputer/~NgS\nmicrocontroller/NgS\nmicrocosm/NgS\nmicrocosmic/J\nmicrodata/Nmg\nmicrodot/NSgV\nmicroeconomic/JSQ\nmicroelectronic/JNS\nmicroelectronics/~Nmg\nmicrofarad/NgS\nmicrofiber/NgS\nmicrofiche/NgV\nmicrofilm/~NgSVGd\nmicrofinance/Nmg\nmicrofloppies/N9\nmicrogram/NgS\nmicrogroove/NSg\nmicrokernel/NgS\nmicrolight/NgS\nmicroloan/NgS\nmicromanage/VGd>SZL\nmicromanagement/Nmg\nmicromanager/NgS\nmicrometeorite/NSg\nmicrometer/NgS<\nmicrometre/NgS!@_₹\nmicron/~NgS\nmicroorganism/NgS\nmicropayment/NwgS\nmicrophone/~NSgV\nmicroplastic/NwSg\nmicroplastics/N9\nmicroprocessor/~NgS\nmicroscope/~NSgV\nmicroscopic/~J\nmicroscopical/JY\nmicroscopy/~Ng\nmicrosecond/NgS\nmicroservice/NSg\nmicrostate/NgS\nmicrosurgery/NwgS\nmicrotask/NgS\nmicrotransaction/NSg\nmicrovascular/J\nmicrowave/~NSgVdGB\nmicrowaveable/J\nmid/~JPN(\nmidair/J\nmidcentury/J\nmidday/~Ng\nmidden/NgS\nmiddle/~NgSJVG\nmiddle-sized/J\nmiddlebrow/JNSg\nmiddleman/NgV\nmiddlemen/9\nmiddlemost/J\nmiddleware/~Nmg\nmiddleweight/~NgS\nmiddy/NSg\nmidfield/~N>Z\nmidge/~NSg\nmidget/~NgS\nmidi/~JNgS\nmidland/~NgSJ\nmidlife/JNg\nmidmost/J\nmidnight/~NgJ\nmidpoint/~NgS\nmidrib/NgS\nmidriff/NgS\nmidsection/NgS\nmidshipman/~Ng\nmidshipmen/9\nmidships/\nmidsize/JN\nmidst/~NgP\nmidstream/Ng\nmidsummer/~NgJ\nmidterm/JNgS\nmidtown/~Ng\nmidway/~NgSJ\nmidweek/NgSJ\nmidwife/~NgSVGd\nmidwifery/~NSg\nmidwinter/Ng\nmidwives/NV\nmidyear/NgS\nmien/Ng\nmiff/NSVdG\nmight/~NmgJA\nmight've/V\nmightily/Ry\nmightiness/Ng\nmightn't/A\nmighty/~NJ^>p\nmignonette/NSgJ\nmigraine/NgS\nmigrant/~NgSJ\nmigrate/~VGdSr\nmigration/~NSg\nmigratory/~J\nmikado/~NgS\nmike/~NgSVGd\nmil/~NSgJ>Z\nmilady/NSgV\nmilch/J\nmild/~J>Y^pNg\nmildew/NmSgVdG\nmildness/Ng\nmile/~NgS\nmileage/~NwSg\nmilepost/NgSV\nmiler/Ng\nmilestone/~NgSV\nmilf/NgS\nmilieu/~NSg\nmilitancy/Ng\nmilitant/~JYNgS\nmilitarily/~Ry\nmilitarisation/Nge!_₹\nmilitarise/VdSGe!_₹\nmilitarism/~Ng\nmilitarist/NSg\nmilitaristic/J\nmilitarization/Nge\nmilitarize/VdSGe\nmilitary/~JNg\nmilitate/VGdS\nmilitia/~NSg\nmilitiaman/Ng\nmilitiamen/~9\nmilk/~NwgSVd>GZ\nmilker/Ng\nmilkiness/Ng\nmilkmaid/NgS\nmilkman/Ng\nmilkmen/9\nmilkshake/NSgV\nmilksop/NgS\nmilkweed/NSg\nmilky/~J>^p\nmill/~NgSVd>GZz\nmillage/Ng\nmillennia/~N\nmillennial/JNgS\nmillennium/~NgS\nmiller/~Ng\nmillet/~Ng\n# milli             # prefixes that are not also words in their own right don't belong in the dictionary\nmilliamp/NgS\nmilliard/Sg\nmillibar/NgS\nmilligram/NgS\nmilliliter/NgS<\nmillilitre/NgS!@_₹\nmillimeter/~NgS<\nmillimetre/NgS!@_₹\nmilliner/NgSV\nmillinery/Ng\nmilling/~NgV6\nmillion/~SHg\nmillionaire/~NSg\nmillionairess/NS\nmillionth/JNg\nmillionths/N\nmillipede/NSg\nmillisecond/NSg\nmillpond/NSg\nmillrace/NSg\nmillstone/~NSg\nmillstream/NgS\nmillwright/NSg\nmilometer/NS\nmilquetoast/JNSg\nmilt/~NgSVdG\nmime/~NgSVGd\nmimeograph/NgVGd\nmimeographs/NV\nmimetic/JN\nmimic/~VSNgJ\nmimicked/VtT\nmimicker/NSg\nmimicking/~NV\nmimicry/~NSg\nmimosa/~NSg\nmin/~NJV\nminaret/~NgS\nminatory/J\nmince/NSgVd>GZ\nmincemeat/Ng\nmincer/Ng\nmind/~NSVd>GrZ\nmind-blowing/J\nmind-boggling/JY!@_₹\nmind game/NgS\nmind's\nmindboggling/JY<\nminded/~JpV\nmindedness/Nmg      # Wiktionary has an entry for this on its own\nmindfuck/NSgx\nmindful/~JYpN\nmindfulness/~Nmg\nmindless/JYp\nmindlessness/Nmg\nmindset/~NgS\nmine/~INgSVGd>ZnX\nminefield/NSg\nminer/~NgS\nmineral/~NgSJ\nmineralize/VGdS\nmineralogical/J\nmineralogist/NgS\nmineralogy/~Nmg\nminestrone/Nmg\nminesweeper/NSg\nmingle/VdGSN\nmingy/J\nmini/~JNgS(\nminiature/~NgSJV\nminiaturisation/Ng!_₹\nminiaturise/VGdS!_₹\nminiaturist/NgS\nminiaturization/Ng\nminiaturize/VGdS\nminibar/NS\nminibike/NSg\nminibus/~NgS\nminicab/NSV\nminicam/NgS\nminicomputer/~NSg\nminifloppies/N\nminify/VGdS\nminim/NSg\nminima/~N9\nminimal/~JYN\nminimalism/Nmg\nminimalist/~JNgS\nminimalistic/J\nminimisation/Ng!_₹\nminimise/VdSG!_₹\nminimization/Nmg\nminimize/~VdSG\nminimum/~N0gSJ\nmining/~NmgV\nminion/NgJ\nminiseries/~NgS\nminiskirt/NgS\nminister/~NSgVGd\nministerial/~JN\nministership/NgS\nministrant/NgSJ\nministration/NgS\nministry/~NSg\nminivan/NgSV\nmink/~NgS\nminnesinger/NgS\nminnow/NSgJV\nminor/~JYNSgVdG\nminority/~NSgJ\nminoxidil/Ng\nminster/~NgS\nminstrel/~NSgV\nminstrelsy/Ng\nmint/~NgSVd>GJZ\nmintage/Ng\nminter/Ng\nminterm/NgS\nminty/J>^p\nminuend/NgS\nminuet/~NSgV\nminus/~PNgSJV\nminuscule/~NgSJ\nminute/~NSgVd>GJY^p\nminuteman/~N0g\nminutemen/~N9\nminuteness/Nmg\nminutia/N0g\nminutiae/N9\nminx/NgSV\nmiracle/~NgSV\nmiraculous/~JY\nmirage/~NSgV\nmire/NgSVGd\nmirror/~NSgVGd\nmirth/Nmg\nmirthful/JYp\nmirthfulness/Nmg\nmirthless/JY\nmiry/J>^\n# mis               # prefixes that are not also words in their own right don't belong in the dictionary\nmisaddress/VdSG\nmisadventure/NwgS\nmisaligned/JV\nmisalignment/Nmg\nmisalliance/NgS\nmisanthrope/NSg\nmisanthropic/J\nmisanthropically/Ry\nmisanthropist/NgS\nmisanthropy/Nmg\nmisapplication/Nmg\nmisapply/VdSGnX\nmisapprehend/VGSd\nmisapprehension/NwgS\nmisappropriate/VdSGXn\nmisappropriation/~Nmg\nmisattribute/VGdS\nmisbalance/VGdS\nmisbegotten/JVN\nmisbehave/VGdS\nmisbehavior/Ng\nmisbehaviour/Ng!@_₹\nmisc/~J\nmiscalculate/VdSGXn\nmiscalculation/NwSg\nmiscall/VdGSN\nmiscarriage/~NgS\nmiscarry/VGdS\nmiscast/VGSNJ\nmiscegenation/Nmg\nmiscellaneous/~JY\nmiscellany/~NSg\nmischance/NSgV\nmischaracterisation/NgS!@_₹\nmischaracterise/VGdS!@_₹\nmischaracterization/NgS\nmischaracterize/VGdS\nmischief/~NgV\nmischievous/~JYp\nmischievousness/Ng\nmiscibility/Ng\nmiscible/J\nmisclassified/V\nmiscommunicate/VGdSnX\nmisconceive/VGdS\nmisconception/~NwSg\nmisconduct/~NgSVdG\nmisconfiguration/NwgS\nmisconstruction/NgS\nmisconstrue/VGdS\nmiscount/VdGSNg\nmiscreant/JNSg\nmiscue/NSgVdG\nmisdeal/VGSNg\nmisdealt/V\nmisdeed/NgS\nmisdemeanor/~NgS\nmisdemeanour/NgS!@_₹\nmisdiagnose/VGdS\nmisdiagnosis/Ng\nmisdid/Vt\nmisdirect/VSdG\nmisdirection/NwgS\nmisdo/VGz\nmisdoes/Vh\nmisdoing/NgV\nmisdone/VT\nmiser/NSgY\nmiserable/J\nmiserableness/Nmg\nmiserably/Ry\nmiserliness/Nmg\nmisery/~NwSg\nmisfeasance/Ngm\nmisfeature/NSg\nmisfile/VGdS\nmisfire/NgSVGd\nmisfit/NSgV\nmisfitted/VtT\nmisfitting/V6\nmisfortune/~NSg\nmisgiving/NgS\nmisgovern/VSdGL\nmisgovernment/Ng\nmisguidance/Nmg\nmisguide/VdSG\nmisguided/~JYV\nmishandle/VdGSN\nmishap/~NSgV\nmishear/VGS\nmisheard/V\nmishit/NSV\nmishitting/V6\nmishmash/NgSV\nmisidentify/VGdS\nmisinform/VdGS\nmisinformation/~Nmg\nmisinterpret/VSGd\nmisinterpretation/NwSg\nmisjudge/VdSG\nmisjudgement/NwSg!_₹\nmisjudgment/NwSg\nmislabel/VGSd\nmislabelled/VtT!@_₹\nmislabelling/V6N!@_₹\nmislaid/JVtT\nmislay/VbGS\nmislead/~VbGSN\nmisleading/~JYV6N\nmisled/~VtT\nmismanage/VGdSL\nmismanagement/~Ng\nmismatch/~VGdSNg\nmismeasure/VGdS\nmisname/NSVGd\nmisnomer/NgSV\nmiso/Nmg\nmisogamist/NgS\nmisogamy/Nmg\nmisogynist/NSgJ\nmisogynistic/J\nmisogynous/J\nmisogyny/Nmg\nmisperceive/VGdS\nmisplace/VGdSL\nmisplacement/Nmg\nmisplay/VGdSNg\nmisprint/NgSVGd\nmisprision/Ng\nmispronounce/VdSG\nmispronunciation/NSg\nmisquotation/NwgS\nmisquote/VGdSNg\nmisread/VGSNz\nmisreading/VNg\nmisremember/VGdS\nmisreport/VdGSNg\nmisrepresent/VGdS\nmisrepresentation/~NwgS\nmisrepresentative/J\nmisrule/NgSVGd\nmiss/~VdGSNEv\nmiss's\nmissal/~NSgE\nmissed/~VtTU\nmisshape/NSVGd\nmisshapen/JV\nmissile/~NgS\nmissilery/Ng\nmission/~NgSVr\nmissionary/~NSgJ\nmissioner/NSg\nmissive/NgSJ\nmisspeak/VGS\nmisspell/VGdSz\nmisspelling/~NwgSV6\nmisspend/VGS\nmisspent/JV\nmisspoke/V\nmisspoken/V\nmisstate/VGdSL\nmisstatement/NSg\nmisstep/NgSV\nmissus/NgS\nmist/~NwSVd>GeZ\nmist's\nmistakable/JU\nmistake/~VGSNgB\nmistaken/~VTJY\nmister's\nmistily/Ry\nmistime/VGdS\nmistiness/Nmg\nmistletoe/~Ng\nmistook/Vt\nmistral/~NgS\nmistranslated/VtT\nmistreat/VdGSL\nmistreatment/~Nmg\nmistress/~NgSV\nmistrial/NgS\nmistrust/NgSVdG\nmistrustful/JY\nmistune/NgSVdG\nmisty/~J>^p\nmistype/VGSd\nmisunderstand/VSGz\nmisunderstanding/~NwgV\nmisunderstood/~VJ\nmisuse/~NSgVdG\nmite/~NgSV>Z\nmiter/~VdGNg\nmitigate/~VdSGn\nmitigated/JVU\nmitigation/~NgS\nmitochondria/~Nmg\nmitochondrial/~J\nmitochondrion/N\nmitoses/N9\nmitosis/N0g\nmitotic/J\nmitral/J\nmitre/NSgVdG!@_₹\nmitt/~NgSnX\nmitten/NgV\nmitzvah/~N\nmix/~VGd>SNgZB\nmix-up/NgS\nmixed/~VJU\nmixer/~Ng\nmixture/~NwSg\nmizzen/NgSJ\nmizzenmast/NSg\nmkay/\nmks/~N\nml/~\nmm/~N\nmnemonic/~JNgS\nmnemonically/Ry\nmo/~JNSKH           # removed `C` de- prefix should only be for negation; breaks heuristics otherwise\nmoan/NgSVd>GZ\nmoaner/Ng\nmoat/~NgSVd\nmob/~NSVe\nmob's\nmobbed/VtTJe\nmobbing/V6Ne\nmobile/~JNgS\nmobilisation/N0wge!_₹\nmobilisations/N9!_₹\nmobilise/VdSGe!_₹\nmobiliser/NgS!_₹\nmobility/~Nmg\nmobilization/~N0wge\nmobilizations/N9\nmobilize/~VdSGe\nmobilizer/NSg\nmobster/~NSg\nmoccasin/NSg\nmocha/NwSgJ\nmock/~NSVd>GJZ\nmock up/V\nmock-up/NgS\nmocker/NgS\nmockery/~NwSg\nmocking/~VNJY\nmockingbird/~NSg\nmod/~NSgVJ^\nmodal/~JNSg\nmodality/~NwSg\nmodded/VtT\nmodding/V6Nm\nmode/~NgS\nmodel/~NSgJVGdZz\nmodeler/NgS\nmodeling/~VNg\nmodelled/JVtTr!@_₹\nmodeller/NgS!@_₹\nmodelling/V6SNmg!@_₹\nmodem/~NSgV\nmoderate/~JYpNgSVGdn\nmoderateness/Nmg\nmoderation/~Nmg\nmoderator/~NSg\nmodern/~JYpNgS\nmodernisation/Ng!_₹\nmodernise/Vd>SGZ!_₹\nmoderniser/Ng!_₹\nmodernism/~Nmg\nmodernist/~JNSg\nmodernistic/J\nmodernity/~Nmg\nmodernization/~Ng\nmodernize/~Vd>SGZ\nmodernizer/NgS\nmodernness/Nmg\nmodest/~JY\nmodesty/~Nmg\nmodicum/NSg\nmodifiable/J\nmodification/~NwSg\nmodified/~JVtTNU\nmodifier/NgS\nmodify/~Vd>SGXZn\nmodish/JYp\nmodishness/Ng\nmodular/~JY\nmodularisation/N!_₹\nmodularity/Nmg\nmodularization/Nmg\nmodulate/VGdSen\nmodulation/~N0ge\nmodulations/N9\nmodulator/NgS\nmodule/~NgS\nmodulo/~PN0\nmodulus/~N9\nmoggie/N!@_₹\nmoggy/NgS\nmogul/~NSgV\nmohair/Nmg\nmoi/~I\nmoiety/NSg\nmoil/VdGSNg\nmoire/NSg\nmoist/~J^Y>pNVXn\nmoisten/Vd>GZ\nmoistener/NgS\nmoistness/Nmg\nmoisture/~Nmg\nmoisturise/VGd>SZ!_₹\nmoisturiser/Nwg!_₹\nmoisturize/VGd>SZ\nmoisturizer/Nwg\nmojito/NwgS\nmojo/~Nmg\nmolar/~NSgJ\nmolasses/NmgV\nmold/~NwgSVd>GzZ\nmoldboard/NSg\nmolder/NgVGd\nmoldiness/Nmg\nmolding/~V6SNwg\nmoldy/J^>p\nmole/~NgS\nmolecular/~JN\nmolecularity/Nmg\nmolecule/~NSg\nmolehill/NSg\nmoleskin/NmgV\nmolest/Vd>GSZ\nmolestation/Nmg\nmolested/VtTU\nmolester/NgSV\nmoll/~NgSJ\nmollification/Nmg\nmollify/VdSGn\nmollusc/NSg!@_₹\nmolluscan/JN\nmollusk/NSg\nmolly/~NSgV\nmollycoddle/NSgVdG\nmolt/Vd>GSNgnZ\nmolten/JV!@_₹\nmolter/Ng\nmolybdenum/Nmg\nmom/~NSgV<@\nmoment/~NgS\nmomenta/N9\nmomentarily/R       # adverb of time (duration)\nmomentariness/Nmg\nmomentary/Jp\nmomentous/JYp\nmomentousness/Nmg\nmomentum/~N0gw\nmommy/~NSgVJ<@\nmonad/NgS\nmonarch/~N0gS\nmonarchic/J\nmonarchical/J\nmonarchism/Nmg\nmonarchist/~NgS\nmonarchistic/J\nmonarchs/~N9\nmonarchy/~NSg\nmonastery/~NSg\nmonastic/~JNgS\nmonastical/JY\nmonasticism/Nmg\nmonaural/J\nmonetarily/Ry\nmonetarism/Nmg\nmonetarist/JNgS\nmonetary/~J\nmonetisation/Nmge!_₹\nmonetise/VGdSe!_₹\nmonetization/Nmge\nmonetize/VGdSe\nmoney/~NwSgJd\nmoneybag/NgS\nmoneybox/NS\nmoneylender/NSg\nmoneymaker/NSg\nmoneymaking/JNg\nmonger/~NgSVdG\nmongol/~NS\nmongolism/Nmg\nmongoloid/NgS\nmongoose/NgS\nmongrel/NSgJ\nmonies/~N\nmoniker/~NSg\nmonism/Nmg\nmonist/NgS\nmonition/NSg\nmonitor/~NSgVdG\nmonitory/JN\nmonk/~NgSV\nmonkey/~NgSVdG\nmonkeyshine/NSg\nmonkish/J\nmonkshood/NSg\nmono/~NgJ(\nmonochromatic/~J\nmonochrome/~NgSJ\nmonocle/NSgd\nmonoclonal/JN\nmonocotyledon/NSg\nmonocotyledonous/J\nmonocular/JN\nmonoculture/NSg\nmonodic/J\nmonodist/NSg\nmonody/NSg\nmonogamist/NgS\nmonogamous/~JY\nmonogamy/~Nmg\nmonogram/~NSgV\nmonogrammed/VtT\nmonogramming/V6\nmonograph/~NgV\nmonographs/~N\nmonolingual/~JNgS\nmonolith/~NgV\nmonolithic/~J\nmonoliths/N\nmonologist/NSg\nmonologue/~NSgV\nmonomania/Nmg\nmonomaniac/NgSJ\nmonomaniacal/J\nmonomer/NSg\nmononucleosis/Nmg\nmonophonic/J\nmonoplane/JNSgV\nmonopolisation/Nmg!_₹\nmonopolise/Vd>SGZ!_₹\nmonopoliser/NgS!_₹\nmonopolist/NSg\nmonopolistic/J\nmonopolization/Nmg\nmonopolize/Vd>SGZ\nmonopolizer/NgS\nmonopoly/~NSg\nmonorail/~NgS\nmonorepo/NSg\nmonospace/JVSdG\nmonosyllabic/JN\nmonosyllable/NgS\nmonotheism/Nmg\nmonotheist/NSg\nmonotheistic/J\nmonotone/~JNgSV\nmonotonic/J\nmonotonically/Ry\nmonotonous/JYp\nmonotonousness/Ng\nmonotony/Nmg\nmonounsaturated/J\nmonoxide/~NgS\nmonseigneur/Ng\nmonsieur/~Ng\nmonsignor/~NSg\nmonsoon/~NSg\nmonsoonal/J\nmonster/~NSgJV\nmonstrance/NSgr\nmonstrosity/NSg\nmonstrous/~JY\nmontage/~NSgV\nmonth/~NgY\nmonthly/~JNSgR8\nmonths/~N9\nmonument/~NgSV\nmonumental/~JY\nmoo/~NSgVGd\nmooch/VGd>SNgZ\nmoocher/Ng\nmood/~NwgS\nmoodily/Ry\nmoodiness/Nmg\nmoody/~J^>p\nmoon/~ONSgVdG\nmoon landing/NgS\nmoonbeam/NgS\nmoonless/J\nmoonlight/~NwSgVd>GZ\nmoonlighter/NgS\nmoonlighting/VNmg\nmoonlit/J\nmoonscape/NSg\nmoonshine/~NmgSV>Z\nmoonshiner/NgS\nmoonshot/NgS\nmoonstone/NgS\nmoonstruck/J\nmoonwalk/NgSV\nmoor/~NgSVdGzU # add \"unmoor\"\nmoorhen/~NS\nmooring/VSNwg\nmoorland/~NgS\nmoose/~Ng09         # singular and plural\nmoot/~JNSVdG\nmop/~NSgVGd>Z\nmope/VSNg\nmoped/VSJNg\nmoper/Ng\nmopey/J\nmopier/Jc\nmopiest/Ju\nmopish/J\nmopped/VtTJ\nmoppet/NgS\nmopping/V6SNwg\nmoraine/~NSg\nmoral/~JYNSgV\nmorale/~Nmg\nmoralisation/Nmge!_₹\nmoralise/VGdSe!_₹\nmoraliser/NgS!_₹\nmoralism/N\nmoralist/NgS\nmoralistic/JQ\nmoralities/N9\nmorality/~N0mgU\nmoralization/Nmge\nmoralize/VGdSe\nmoralizer/NgS\nmorass/NgS\nmoratorium/~NSg\nmoray/~NSg\nmorbid/~JYp\nmorbidity/NwSg\nmorbidness/Nmg\nmordancy/Ng\nmordant/JYNSgV\nmore/~RIJNSDq\nmoreish/J\nmorel/~NSg\nmoreover/~R\nmores/~NgV\nmorgue/~NgS\nmoribund/JN\nmorn/NgSGz\nmorning/~NwgS       # as a part of the day it's uncountable\nmorocco/~Ng\nmoron/NSg\nmoronic/JQ\nmorose/JYp\nmoroseness/Nmg\nmorph/~N0VGd\nmorpheme/~NgS\nmorphemic/J\nmorphia/Ng\nmorphine/~Nmg\nmorphing/VNg\nmorphological/~J\nmorphology/~Nmg\nmorphosyntax/Nmg\nmorphs/~N9V\nmorrow/~NgSV\nmorsel/NgSV\nmortal/~JYNgS\nmortality/~Nmg\nmortar/~NwgSVdG\nmortarboard/NSg\nmortgage/~NSVGdr\nmortgage's\nmortgagee/NgS\nmortgager/NgS\nmortgagor/NgS\nmortician/NgS\nmortification/Nmg\nmortify/VGdSn\nmortise/NSgVdG\nmortuary/~JNSg\nmosaic/~NgSJV\nmosey/VSGd\nmosfet/NgS\nmosh/VdGSN\nmosque/~NgS\nmosquito/~N0gV\nmosquitoes/~N9\nmoss/~NwgSV\nmossback/NSg\nmossy/J^>N\nmost/~JYINgDqR\nmot/~NSg\nmote/NSVKeXvn\nmote's\nmotel/~NSgV\nmotet/NSg\nmoth/~NgV\nmothball/NgSVGd\nmother/~NgSVdGY\nmotherboard/~NSg\nmotherfucker/NgSx\nmotherfucking/Jx\nmotherhood/~Nmg\nmotherland/~NgS\nmotherless/J\nmotherliness/Nmg\nmotherload/NgS\nmothership/NgS\nmoths/~N9V\nmotif/~NSg\nmotile/JNS\nmotility/~Ng\nmotion/~NwgVKe\nmotioned/V\nmotioning/VN\nmotionless/~JYp\nmotionlessness/Ng\nmotivate/~VdSGe\nmotivated/~VJU\nmotivation/~NwSg\nmotivational/~JY\nmotivator/NSg\nmotive/~NgSVJ\nmotiveless/J\nmotley/~JNgS\nmotlier/Jc\nmotliest/Ju\nmotocross/~NwgS\nmotor/~NSgJVGd\nmotor ship/NgS\nmotorbike/~NgSVGd\nmotorboat/NgSV\nmotorcade/NgSV\nmotorcar/NSg\nmotorcycle/~NSgVdG\nmotorcyclist/NgS\nmotorisation/Ng!_₹\nmotorise/VdSG!_₹\nmotorist/NSg\nmotorization/Ng\nmotorize/VdSG\nmotorman/N0g\nmotormen/N9\nmotormouth/NgV\nmotormouths/NV\nmotorsport/NgS\nmotorway/~NSg\nmottle/VGdSN\nmotto/~N0gV\nmottoes/N9\nmoue/NgS\nmould/NwSgVGd>zZ!@_₹\nmoulder/VdGNg!@_₹\nmoulding/VNg!@_₹\nmouldy/J^>!@_₹\nmoult/NSgVGd!@_₹\nmound/~NSgVGd\nmount/~NSgVGdEr\nmountable/J\nmountain/~NSg\nmountaineer/~NSgVdG\nmountaineering/~Nmg\nmountainous/~J\nmountainside/NSg\nmountaintop/NSgJ\nmountebank/NgSV\nmounted/~JVtTU\nmounter/NgS\nmounting/~JV6SNwg\nmourn/~VGd>SNZ\nmourned/~VtTU\nmourner/NgS\nmournful/JYp\nmournfulness/Nmg\nmourning/~VNmg\nmouse/~NSgVd>GZ\nmouse wheel/NgS\nmouseless/J\nmouseover/NgS\nmouser/Ng\nmousetrap/NSgV\nmousetrapped/VtT\nmousetrapping/V6\nmousiness/Nmg\nmoussaka/NmgS\nmousse/NwgSVGd\nmoustache/NSgd!@_₹\nmousy/J^>pN\nmouth/~N0gVGd\nmouthfeel/Nmg\nmouthful/NgSJ\nmouthiness/Nmg\nmouthpart/NSg\nmouthpiece/~NgS\nmouths/~N9Vh\nmouthwash/NgS\nmouthwatering/J\nmouthy/J^>p\nmouton/~Ng\nmovable/~JNSg\nmove/~VGd>SNgrZB\nmoved/~JVU\nmovement/~NwSg\nmover/~Ngr\nmovie/~NSg\nmoviegoer/NSg\nmoving/~JYVN\nmow/VGd>SNgZ\nmower/~NgS\nmoxie/Nmg\nmozzarella/Nmg\nmp/~N\nmpg/\nmph/~\nmt/~JN\nmtg/N\nmtge/N\nmu/~NSg\nmuch/~JpIDqRg\nmuchness/N\nmucilage/Nmg\nmucilaginous/J\nmuck/NmgSVdG\nmuckrake/NSVd>GZ\nmuckraker/Ng\nmucky/J^>\nmucous/~J\nmucus/~Nmg\nmud/~NwgSV\nmudded/VtT\nmuddily/Ry\nmuddiness/Nmg\nmudding/V6\nmuddle/VGdSNg\nmuddleheaded/J\nmuddy/~J^>pVGdSN\nmudflap/NSg\nmudflat/NgS\nmudguard/NSg\nmudpack/NS\nmudroom/NgS\nmudslide/NgS\nmudslinger/NSg\nmudslinging/Ng\nmuenster/Ng\nmuesli/Nmg\nmuezzin/NgS\nmuff/NgSVdG\nmuffin/NgSV\nmuffle/NSVGd>Z\nmuffler/Ng\nmufti/~NSg\nmuftiate/NSg\nmug/~NSgVJ\nmugful/NgS\nmugged/VtT\nmugger/NgSJ\nmugginess/Nmg\nmugging/NgSV6\nmuggins/N\nmuggle/NgSV\nmuggy/J^>p\nmugshot/NgS\nmugwump/NgSV\nmujaheddin/N\nmukluk/NgS\nmulatto/N0g\nmulattoes/N9\nmulberry/~NwSgJ\nmulch/NgSVGd\nmulct/NSgVGd\nmule/~NgSV\nmuleskinner/NgS\nmuleteer/NgS\nmulish/JYp\nmulishness/Nmg\nmull/~VdGSN\nmullah/N0gV\nmullahs/N9\nmullein/Ng\nmullet/~NgS\nmulligan/~NSg\nmulligatawny/Ng\nmullion/NSgVd\nmulti/~N(\nmulti-platform/J\nmultibillion/J\nmultibyte/J\nmulticellular/J\nmultichannel/J\nmulticolor/Nm<\nmulticolored/J<\nmulticolour/Nm!@_₹\nmulticoloured/J!@_₹\nmulticore/J\nmulticultural/~J\nmulticulturalism/~Nmg\nmulticurrency/J\nmultidevice/J\nmultidimensional/J\nmultidirectional/J\nmultidisciplinary/~J\nmultidomain/J\nmultiethnic/J\nmultifaceted/~JYp\nmultifactor/J\nmultifamily/JN\nmultifarious/JYp\nmultifariousness/Nmg\nmultifocal/J\nmultiform/JN\nmultiformat/J\nmultigenerational/J\nmultigrain/J\nmultilanguage/J\nmultilateral/~JYN\nmultilayer/Jd\nmultilevel/J\nmultiline/J\nmultilingual/~JN\nmultilingualism/Nmg\nmultimedia/~NmgJ\nmultimeter/NSg\nmultimillionaire/NSg\nmultimodal/J\nmultinational/~JNSg\nmultipage/J\nmultiparadigm/J\nmultipart/J\nmultipartite\nmultiparty/J\nmultiphonics/Nmg\nmultiplanetary/J\nmultiplatform/J\nmultiplayer/~JNg\nmultiple/~JNgSDq\nmultiple-choice/J\nmultiplex/~J>NgSVGdZ\nmultiplexer/NgS\nmultiplicand/NgS\nmultiplication/~Nmg\nmultiplicative/~JN\nmultiplicity/~NSg\nmultiplier/~NgS\nmultiply/~VGd>SNnZX\nmultipolarity/Nmg\nmultiprocessing/Nmg\nmultiprocessor/NSg\nmultipurpose/~J\nmultiracial/JN\nmultistage/J\nmultistep/J\nmultistory/JN\nmultisystem/J\nmultitab/J\nmultitask/JVGS\nmultitasking/VNg\nmultithreading/Nmg\nmultitude/~NSg\nmultitudinous/J\nmultiuser/J\nmultivariate/JN\nmultiverse/~NSg\nmultivitamin/NgSJ\nmultiyear/J\nmum/~NgSJV          # \"mother\" sense is UK/AU, \"silent\" sense is universal\nmumble/~VGd>SNgZ\nmumbler/NgS\nmumbletypeg/Ng\nmummer/NgSV\nmummery/Ng\nmummification/Nmg\nmummify/VGdSn\nmummy/~NSgV         # \"mother\" sense is UK/AU, \"mummified\" sense is universal\nmumps/NgV\nmun/~VNI\nmunch/~VGdSN\nmuncher/NgS\nmunchie/N0S\nmunchies/N9g\nmunchkin/NSg\nmundane/~JYNS\nmundanity/Nmg\nmung/NSVdG\nmunicipal/~JYNSg\nmunicipality/~NSg\nmunificence/Ng\nmunificent/JY\nmunition/NgSVdG\nmural/~NSgJV\nmuralist/NSg\nmurder/~NwgSVGd>Z\nmurderer/~NgS\nmurderess/NgS\nmurderous/~JY\nmurk/JNmgSV\nmurkily/Ry\nmurkiness/Nmg\nmurky/J^>p\nmurmur/NgSVGd>Zz\nmurmurer/NgS\nmurmuring/VNg\nmurmurous/J\nmurrain/NgJ\nmuscat/~NwgS\nmuscatel/NSg\nmuscle/~NwgSVGd\nmusclebound/J\nmuscleman/N0\nmusclemen/N9\nmuscly/J\nmuscular/~JY\nmuscularity/Nmg\nmusculature/NmgS\nmusculoskeletal/J\nmuse/~NgSVGdz\nmusette/NgS\nmuseum/~NgSV\nmush/NgSVd>GZ\nmushiness/Nmg\nmushroom/~NwSgJVGd\nmushy/J^>p\nmusic/~NwSgVJ\nmusical/~JYNgS\nmusicale/NgS\nmusicality/Nmg\nmusician/~NSgY\nmusicianship/Nmg\nmusicological/J\nmusicologist/~NgS\nmusicology/~Nmg\nmusing/V6SJYNwg\nmusk/~NmgV\nmuskeg/NgS\nmuskellunge/NgS\nmusket/~NgS\nmusketeer/NgS\nmusketry/Ng\nmuskie/Ng\nmuskiness/Nmg\nmuskmelon/NSg\nmuskox/Ngn\nmuskrat/NgS\nmusky/J^>pNS\nmuslin/Ng\nmuss/VdGSNg\nmussel/~NgS\nmussy/J^>N\nmust/~VA>SNgZ\nmust've/\nmustache/~NgSd\nmustachio/NSgVd\nmustang/~NgSV\nmustard/~NmgJ\nmuster/~NgVGd\nmustily/Ry\nmustiness/Nmg\nmustn't/VA\nmusty/J^>pNV\nmutability/Nmg\nmutably/Ry\nmutagen/NgS\nmutagenic/J\nmutant/~NgSJ\nmutate/VGdSXnv\nmutation/~NwgS\nmutational/J\nmutatis mutandis/R\nmute/~JY^>pNgSVGdB\nmutedness/Nmg\nmuteness/Nmg\nmutex/NgS\nmutilate/VdSGJnX\nmutilation/~NgS\nmutilator/NSg\nmutineer/NSgV\nmutinous/JY\nmutiny/~NSgVGd\nmutt/~NgS\nmutter/NgSVGd>Zz\nmutterer/NgS\nmuttering/VNg\nmutton/~NmgJ\nmuttonchops/N9\nmuttony/J\nmutual/~JYN\nmutuality/Ng\nmuumuu/NgS\nmuzak/NmgV\nmuzzily/Ry\nmuzzle/~NSgVdG\nmuzzy/JpN\nmy/~D5\nmycologist/NSg\nmycology/Nmg\nmyelitis/Nmg\nmyna/NgS\nmynah/NgS!_₹\nmyocardial/~J\nmyocardium/~N\nmyologist/NSg\nmyopia/Nmg\nmyopic/JN\nmyopically/Ry\nmyriad/~NSgJ\nmyrmidon/NgS\nmyrrh/Nmg\nmyrtle/~NSg\nmyself/~Ia1F.       # I~pronoun a~personal 1~person .~singular F~reflexive\nmysterious/~JYp\nmysteriousness/Nmg\nmystery/~NwSg\nmystic/~JNSg\nmystical/~JY\nmysticism/~Nmg\nmystification/Nmge\nmystify/VdSGen\nmystique/~Nmg\nmyth/~Nw0g\nmythic/~J\nmythical/~J\nmythological/~J\nmythologise/VdSG!_₹\nmythologist/NSg\nmythologize/VdSG\nmythology/~NwSg\nmythos/Nmg\nmyths/~N9\nmyxomatosis/Nmg\nn/NJ^CiKH\nnaan/NwS\nnab/VSN\nnabbed/VtT\nnabbing/V6\nnabob/NSg\nnacelle/NSg\nnacho/NSg\nnacre/Ng\nnacreous/J\nnada\nnadir/NSgV\nnae\nnaff/J>^\nnag/~NSgV\nnagged/VtT\nnagger/NgS\nnagging/V6NJ\nnagware/Nmg\nnah/\nnaiad/NSg\nnaif/JNgS\nnail/~NgSVdG\nnail biter/NgS\nnailbrush/NgSV\nnaïve/~JN\nnaive/~J>Y^N\nnaivete/Nmg\nnaivety/Nmg\nnaked/~JYpV\nnakedness/Nmg\nnamaste\nname/~NSVGdr\nname's\nnameable/JU\nnamed/~JVU\nnameless/~JYN\nnamely/~\nnameplate/~NgS\nnamesake/~NSgV\nnamespace/~NSgVGd\nnanny/~NSgV\nnano-farad/NgS\nnanobot/NSg\nnanocurie/NgS\nnanogram/NSg\nnanometer/NS<\nnanometre/NS!@_₹\nnanoparticle/NgS\nnanoprocessor/NSg\nnanosecond/NSg\nnanotechnology/~Nmg\nnanotube/NgS\nnap/~VSNg\nnapalm/~NmgSVdG\nnape/~NgSV\nnaphtha/Nmg\nnaphthalene/Nmg\nnapkin/NgS\nnapless/J\nnapoleon/~NSg\nnapped/VtT\nnapper/NgS\nnapping/V6SNw\nnappy/NSgV>J^\nnarc/NgSV\nnarcissism/Nmg\nnarcissist/NgS\nnarcissistic/~JNQ\nnarcissus/~Ng\nnarcolepsy/Nmg\nnarcoleptic/NgSJ\nnarcoses/N9V\nnarcosis/N0g\nnarcotic/~NwSgJ\nnarcotisation/Ng!_₹\nnarcotise/VGdS!_₹\nnarcotization/Ng\nnarcotize/VGdS\nnark/NV\nnarky/J\nnarrate/VGdSnvX\nnarration/~NwSg\nnarrative/~JYNwSg\nnarrator/~NSg\nnarrow/~J^Y>pNgSVGd\nnarrowness/Nmg\nnarwhal/NgS\nnary/J\nnasal/~JYNSg\nnasalisation/NwSg!_₹\nnasalise/VdSG!_₹\nnasality/Nmg\nnasalization/NwSg\nnasalize/VdSG\nnascence/Ngr\nnascent/~Jr\nnastily/Ry\nnastiness/Nmg\nnasturtium/NSg\nnasty/~J^>pN\nnatal/~J\nnatalism/NmgK\nnatalist/NSg\nnatch/N\nnation/~NgS\nnational/~JYNgS\nnationalisation/NSg!_₹\nnationalise/VdSGe!_₹\nnationalism/~Nmg\nnationalist/~JNSg\nnationalistic/~JQ\nnationality/~NSg\nnationalization/~Nmg\nnationalize/VdSGe\nnationhood/Nmg\nnationwide/~J\nnative/~JYNgS\nnativism/Nmg\nnativist/JNSg\nnativity/~NSg\nnatl/J\nnatter/VGdSNmg\nnattily/Ry\nnattiness/Nmg\nnatty/J^>pN\nnatural/~JYpN0U\nnatural's\nnaturalisation/Ng!_₹\nnaturalise/VdSG!_₹\nnaturalism/~Nmg\nnaturalist/~NSg\nnaturalistic/~J\nnaturalization/~Nmg\nnaturalize/VdSG\nnaturalness/NgU\nnaturals/N9\nnature/~NwSVe\nnature's\nnaturism/Nmg\nnaturist/NSgJ\nnaught/INgS\nnaughtily/Ry\nnaughtiness/Nmg\nnaughty/~J^>pV\nnausea/~Nmg\nnauseam             # only used in the Latin phrase `ad nauseam`\nnauseate/VbGdS\nnauseating/JYV6\nnauseous/JYp\nnauseousness/Nmg\nnautical/~JY\nnautilus/NgS\nnaval/~J\nnave/~NgS\nnavel/~NSgV\nnavigability/Nmg\nnavigable/~J\nnavigate/~VdSGn\nnavigation/~NwgS\nnavigational/~J\nnavigator/~NgS\nnavvy/NSV\nnavy/~NwSgJ\nnay/~NSgVJ\nnaysayer/NgS\nne'er/\nneanderthal/~JNgS\nneap/NgSJV\nnear/~JY^>pPVdGSN\nnearby/~JN\nnearness/Nmg\nnearshore/NV\nnearside/N\nnearsighted/JYp\nnearsightedness/Ng\nneat/~J>Y^pnX       # removed `N` as in `the neats vs the scruffies`\nneaten/VGd\nneath/~P\nneatness/Ng\nnebula/~Ng\nnebulae/9\nnebular/J\nnebulous/JYp\nnebulousness/Ng\nnecessarily/~RyU\nnecessary/~JNSg\nnecessitate/VdSG\nnecessitous/J\nnecessity/~NSg\nneck/~NgSVdG\nneckband/NSV\nneckerchief/~NgS\nnecking/V6Ng\nnecklace/~NgSVGdz\nneckline/NgS\nnecktie/NgS\nnecrology/Nmg\nnecromancer/NSg\nnecromancy/Nmg\nnecrophilia/Nmg\nnecrophiliac/NS\nnecropolis/~NgS\nnecroses/N9V\nnecrosis/~N0g\nnecrotic/J\nnectar/~NmgV\nnectarine/NwgSJ\nnee/J\nneed/~NwgSAdG\nneeded/~JVU\nneedful/JYN\nneediness/Nmg\nneedle/~NgSVGd\nneedlepoint/NmgV\nneedless/~JYp\nneedlessness/Nmg\nneedlewoman/N0g\nneedlewomen/N9\nneedlework/Nmg\nneedn't/A\nneedy/~J^>p\nnefarious/JYp\nnefariousness/Nmg\nneg/NJV\nnegate/~VdSGnvX\nnegation/~NwgS\nnegative/~JYpNgSVGd\nnegativeness/Nmg\nnegativism/Nmg\nnegativity/Nmg\nneglect/~VGdSNmg\nneglectful/JYp\nneglectfulness/Nmg\nnegligee/NgS\nnegligence/~Nmg\nnegligent/~JY\nnegligible/~J\nnegligibly/Ry\nnegotiability/Nmg\nnegotiable/~JNr\nnegotiate/~VdSGrn\nnegotiation/~Nw0gr\nnegotiations/~N9\nnegotiator/~NgS\nnegritude/Ng\nnegro/~JN\nnegroid/JN\nneigh/N0gVbdG\nneighbor/~NSgVdGY<\nneighborhood/~NSg<\nneighborliness/Nmg<\nneighbour/NSgVGdY!@_₹\nneighbourhood/NgS!@_₹\nneighbourliness/Nmg!@_₹\nneighs/N9Vh\nneither/~IC\nnelson/~NSg\nnematode/NSg\nnemeses/N9\nnemesis/~N0g\n# neo               # prefixes that are not also words in their own right don't belong in the dictionary\nneo-Nazi/NSgJ\nneo-Nazism/Ng\nneoclassic/J\nneoclassical/~JN\nneoclassicism/Nmg\nneoclassicist/JNgS\nneocolonial/J\nneocolonialism/Nmg\nneocolonialist/JNgS\nneocon/NSgJ\nneoconservatism/Ng\nneoconservative/~NSgJ\nneoconsolativism/Nmg\nneocortex/Ng\nneodymium/Nmg\nneofascist/JNgS\nneoliberal/JNSg\nneoliberalism/Nmg\nneolithic/~J\nneologism/~NwSg\nneon/~NmgJ\nneonatal/~J\nneonate/NgS\nneophilia/Nmg\nneophyte/NgS\nneoplasm/NgS\nneoplastic/J\nneoprene/Nmg\nneorealist/JNSg\nnepenthe/Ng\nnephew/~NSg\nnephrectomy/NgS\nnephrite/Ng\nnephritic/JN\nnephritis/Nmg\nnephropathy/~N\nnepotism/Nmg\nnepotist/NSg\nnepotistic/J\nneptunium/Nmg\nnerd/~NgS\nnerdy/J>^\nnerve/~NSVdGU\nnerve's\nnerveless/JYp\nnervelessness/Nmg\nnerviness/Nmg\nnervous/~JYp\nnervousness/Nmg\nnervy/J^>p\nnest/~NgSVdG\nnestle/VGdSz\nnestling/NgV\nnet/~NSgVJ\nnetball/~NwSg\nnetbook/NgS\nnether/~JVN\nnethermost/J\nnetherworld/Ng\nnetiquette/NS\nnetizen/NgS\nnetted/~VtT\nnetter/NS\nnetting/~NmgV6\nnettle/NwgSVGd\nnettlesome/J\nnetwork/~NSgVGd\nnetworking/~VNmg\nneural/~JY\nneuralgia/Nmg\nneuralgic/JN\nneurasthenia/Nmg\nneurasthenic/JNgS\nneuritic/JNgS\nneuritis/Nmg\nneurobiologist/NSg\nneurobiology/Nmg\nneurodegeneration/Nmg\nneurodivergent/J\nneurodiverse/J\nneurodiversity/Nmg\nneuroimaging/Nmg\nneurological/~JY\nneurologist/~NSg\nneurology/~Nmg\nneuron/~NgS\nneuronal/~J\nneurophysiology/Nmg\nneuroplasticity/Nmg\nneuropsychiatric/J\nneuroscience/~Nmg\nneuroscientist/~NSg\nneuroses/N9\nneurosis/N0g\nneurosurgeon/NgS\nneurosurgery/NwgS\nneurosurgical/J\nneurotic/~JNgS\nneurotically/Ry\nneuroticism/Nmg\nneurotoxin/NwgS\nneurotransmitter/~NSg\nneut/J\nneuter/~JNgSVdG\nneutral/~JYNSg\nneutralisation/Nmg!_₹\nneutralise/Vd>SGZ!_₹\nneutraliser/Ng!_₹\nneutralism/Nmg\nneutralist/JNSg\nneutrality/~Nmg\nneutralization/Nmg\nneutralize/~Vd>SGZ\nneutralizer/NgS\nneutrino/NSg\nneutron/~NSg\nnever/~R8            # removed `V` verb sense is dialectal\nnevermore/~\nnevertheless/~R\nnevi/N\nnevus/Ng\nnew/~J^Y>pNSg\nnewbie/~NgS\nnewborn/~JNSg\nnewcomer/~NSg\nnewel/NSg\nnewfangled/J\nnewfound/~J\nnewish/J\nnewline/~NSg\nnewlywed/NSgJ\nnewness/Nmg\nnews/~NmgV\nnewsagent/NS\nnewsboy/NSg\nnewscast/~NSgV>Z\nnewscaster/~NgS\nnewsdealer/NSg\nnewsfeed/NgS\nnewsflash/NSg\nnewsgirl/NSg\nnewsgroup/~NgS\nnewshound/NSg\nnewsletter/~NgS\nnewsman/N0g\nnewsmen/N9\nnewspaper/~NwgSV\nnewspaperman/N0g\nnewspapermen/N9\nnewspaperwoman/N0g\nnewspaperwomen/N9\nnewspeak/Nmg\nnewsprint/~Nmg\nnewsreader/NS\nnewsreel/NgS\nnewsroom/~NgS\nnewsstand/~NSg\nnewsweekly/NSg\nnewswoman/N0g\nnewswomen/N9\nnewsworthiness/Ng\nnewsworthy/Jp\nnewsy/J^>N\nnewt/~NgS\nnewton/~NgS\nnext/~JPNg\nnexus/~NgS\nniacin/Nmg\nnib/NSgV\nnibble/VGd>SNgZ\nnibbler/Ng\nnice/~JY^>pN\nniceness/Nmg\nnicety/NSg\nniche/~NSgVdJ\nnick/~NgSVd>GZ\nnickel/~NgSJV\nnickelodeon/~NSg\nnicker/NgVdG\nnickle/NS\nnickname/~NSgVdG\nnicotine/Nwg\nniece/~NSg\nnifedipine/N\nniff/NV\nniffy/J\nnifty/J^>N\nnigga/NgSx\nniggard/JYNSgV\nniggardliness/Ng\nniggaz/Nx\nnigger/~NSgVx\nniggle/NgSVGd>Z\nniggler/Ng\nnigh/~J^>VP\nnight/~NwSgV\nnightcap/NSgV\nnightclothes/Nmg\nnightclub/~NSgV\nnightclubbed/VtT\nnightclubbing/V6\nnightdress/NgS\nnightfall/~Nmg\nnightgown/NSg\nnighthawk/~NSg\nnightie/NSg\nnightingale/~NSg\nnightlife/~Nmg\nnightlight/NS\nnightlong/J\nnightly/JR8\nnightmare/~NSgV\nnightmarish/J\nnightshade/NwSg\nnightshirt/NSg\nnightspot/NgS\nnightstand/NSg\nnightstick/NSg\nnighttime/~NmgJ\nnightwatchman/N0\nnightwatchmen/N9\nnightwear/Nmg\nnihilism/Nmg\nnihilist/NgS\nnihilistic/J\nnil/~Ng\nnimbi/N\nnimble/J^>pV\nnimbleness/Nmg\nnimbly/Ry\nnimbus/Ng\nnimby/NJ\nnimrod/NgS\nnincompoop/NSg\nnine/~NgS\nninepin/NgS\nninepins/Ng\nnineteen/~SgH\nnineteenth/~JNg\nnineteenths/N\nninetieth/JNg\nninetieths/N\nninety/~SHg\nninja/~NSg09JV      # singular and plural, also has a plural in -s\nninny/NSg\nninth/~JNgV\nninths/N\nniobium/~Nmg\nnip/~VSNg\nnipped/VtT\nnipper/NgSV\nnippiness/Nmg\nnipping/V6N\nnipple/NgSV\nnippy/J^>p\nnirvana/~Ng\nnisei/Ng\nnit/~NSgV>\nniter/Ng\nnitpick/VSGd>Z\nnitpicker/Ng\nnitpicking/Ng\nnitrate/~NwSgVdGn\nnitration/Ng\nnitre/Ng!@_₹\nnitric/~JN\nnitrification/Ng\nnitrite/NSg\nnitro/~NJ\nnitrocellulose/Ng\nnitrogen/~Nmg\nnitrogenous/J\nnitroglycerin/Nmg\nnitroglycerine/Nmg!@_₹\nnitrous/~Ng\nnitwit/NgS\nnix/~NgSVGd\nno/~PNSgDq\nno-code/JNmg\nno-op/NgS           # no operation\nnob/~NSVY\nnobble/VGdSN\nnobelium/Nmg\nnobility/~Ng\nnoble/~NSgJ>^p\nnobleman/~Ng\nnoblemen/~9\nnobleness/Nmg\nnoblewoman/~Ng\nnoblewomen/9\nnobody/~INSg\nnocturnal/~JYN\nnocturne/~NgS\nnod/~VSNg\nnodal/J\nnodded/VtT\nnodding/VtTNJ\nnoddle/NgSV\nnoddy/N\nnode/~NgS\nnodular/J\nnodule/NgS\nnoel/~NgS\nnoes/N\nnoggin/NgS\nnohow/\nnoise/~NwSgVdG\nnoiseless/JYp\nnoiselessness/Ng\nnoisemaker/NgS\nnoisily/Ry\nnoisiness/Ng\nnoisome/J\nnoisy/~J^>p\nnomad/~NSgJ\nnomadic/~J\nnomenclature/~NgS\nnominal/~JYN\nnominalisation/Ng!_₹\nnominalise/VSdG!_₹\nnominalization/Ng\nnominalize/VSdG\nnominate/~VGdSJrenv\nnomination/~NSge\nnomination's/r\nnominative/~JNSg\nnominator/~NSge\nnominee/~NgS\nnon/~N(\nnon-Western/J\nnonabrasive/JN\nnonabsorbent/JSg\nnonacademic/JN\nnonacceptance/Ng\nnonacid/JN\nnonactive/JSg\nnonaddictive/J\nnonadhesive/J\nnonadjacent/J\nnonadjustable/J\nnonadministrative/J\nnonage/NgS\nnonagenarian/NgSJ\nnonaggression/Ng\nnonalcoholic/JN\nnonaligned/J\nnonalignment/Ng\nnonallergic/J\nnonappearance/NgS\nnonassignable/J\nnonathletic/J\nnonattendance/Ng\nnonautomotive/J\nnonavailability/Ng\nnonbasic/J\nnonbeliever/NgS\nnonbelligerent/JNgS\nnonbinding/J\nnonbreakable/JN\nnonburnable/J\nnoncaloric/J\nnoncancerous/J\nnonce/NgJ\nnonchalance/Nmg\nnonchalant/JY\nnonchargeable/J\nnoncitizen/NgS\nnonclerical/JSg\nnonclinical/J\nnoncollectable/J\nnoncom/NgS\nnoncombat/J\nnoncombatant/NgS\nnoncombustible/JN\nnoncommercial/~JNgS\nnoncommittal/JYN\nnoncommunicable/J\nnoncompeting/J\nnoncompetitive/J\nnoncompliance/Nmg\nnoncomplying/JN\nnoncomprehending/J\nnonconducting/J\nnonconductor/NgS\nnonconforming/J\nnonconformism/Nmg\nnonconformist/~NgSJ\nnonconformity/Nmg\nnonconsecutive/J\nnonconstructive/J\nnoncontagious/J\nnoncontinuous/J\nnoncontributing/J\nnoncontributory/J\nnoncontroversial/J\nnonconvertible/J\nnoncooperation/NgS\nnoncorroding/J\nnoncorrosive/J\nnoncredit/J\nnoncriminal/JNSg\nnoncritical/J\nnoncrystalline/J\nnoncumulative/J\nnoncustodial/J\nnondairy/J\nnondeductible/JNg\nnondelivery/NSg\nnondemocratic/J\nnondenominational/JN\nnondepartmental/J\nnondepreciating/J\nnondescript/JN\nnondestructive/J\nnondetachable/J\nnondeterminism/Nmg\nnondeterministic/J\nnondisciplinary/J\nnondisclosure/Ng\nnondiscrimination/Nmg\nnondiscriminatory/J\nnondramatic/J\nnondrinker/NgS\nnondrying/J\nnone/~IN\nnoneducational/J\nnoneffective/JN\nnonelastic/J\nnonelectric/JN\nnonelectrical/JN\nnonempty/J\nnonenforceable/J\nnonentity/NSg\nnonequivalent/JSg\nnonessential/JN\nnonesuch/~NgS\nnonetheless/~R\nnonevent/NgS\nnonexchangeable/J\nnonexclusive/J\nnonexempt/JNg\nnonexistence/Ng\nnonexistent/~JN\nnonexplosive/JSg\nnonfactual/J\nnonfading/J\nnonfat/J\nnonfatal/JN\nnonfattening/J\nnonferrous/J\nnonfiction/~Nmg\nnonfictional/J\nnonflammable/JN\nnonflowering/J\nnonfluctuating/J\nnonflying/J\nnonfood/JNmg\nnonfreezing/J\nnonfunctional/J\nnongovernmental/J\nnongranular/J\nnonhazardous/J\nnonhereditary/J\nnonhuman/JN\nnonidentical/JN\nnoninclusive/J\nnonindependent/J\nnonindustrial/J\nnoninfectious/J\nnoninfinite/JY\nnoninflammatory/J\nnoninflationary/J\nnoninflected/J\nnoninfringement/Nmg\nnonintellectual/JNgS\nnoninteractive/J\nnoninterchangeable/J\nnoninterference/Ng\nnonintervention/Ng\nnonintoxicating/J\nnoninvasive/J\nnonirritating/J\nnonissue/N\nnonjudgmental/J\nnonjudicial/J\nnonlegal/J\nnonlethal/JN\nnonlinear/~J\nnonliterary/J\nnonliving/Jg\nnonmagnetic/J\nnonmalignant/J\nnonmember/NgS\nnonmetal/NSg\nnonmetallic/J\nnonmigratory/J\nnonmilitant/JN\nnonmilitary/J\nnonmonetary/J\nnonnarcotic/JNSg\nnonnative/JNgS\nnonnegotiable/JN\nnonnuclear/J\nnonnumerical/J\nnonobjective/NJ\nnonobligatory/J\nnonobservance/Ng\nnonobservant/J\nnonobvious/J\nnonoccupational/J\nnonoccurence/N\nnonofficial/JN\nnonoperational/J\nnonoperative/JN\nnonparallel/JSg\nnonpareil/JNgS\nnonparticipant/JNgS\nnonparticipating/J\nnonpartisan/~JNSg\nnonpast/N\nnonpaying/J\nnonpayment/NwSg\nnonperformance/Nmg\nnonperforming/J\nnonperishable/JN\nnonperson/NgS\nnonphysical/JY\nnonplus/NSV\nnonplussed/JVtT\nnonplussing/V6J\nnonpoisonous/J\nnonpolitical/J\nnonpolluting/J\nnonporous/J\nnonpracticing/J\nnonprejudicial/J\nnonprescription/J\nnonproductive/J\nnonprofessional/JNSg\nnonprofit/~JNSgB\nnonproliferation/Nmg\nnonpublic/J\nnonpunishable/J\nnonracial/J\nnonradioactive/J\nnonrandom/J\nnonreactive/J\nnonreciprocal/JSg\nnonreciprocating/J\nnonrecognition/JNg\nnonrecoverable/J\nnonrecurring/J\nnonredeemable/J\nnonrefillable/J\nnonrefundable/J\nnonregulatory/J\nnonreligious/J\nnonrenewable/JN\nnonrepresentational/J\nnonresident/JNgS\nnonresidential/J\nnonresidual/Jg\nnonresistance/Ng\nnonresistant/JN\nnonrestrictive/J\nnonreturnable/JNgS\nnonrhythmic/J\nnonrigid/JN\nnonsalaried/J\nnonscheduled/J\nnonscientific/J\nnonscoring/J\nnonseasonal/J\nnonsectarian/JN\nnonsecular/J\nnonsegregated/J\nnonsense/~NmgVJ\nnonsensical/~JY\nnonsensitive/J\nnonsequential/JY\nnonsexist/JN\nnonsexual/J\nnonskid/J\nnonslip/J\nnonsmoker/NSg\nnonsmoking/J\nnonsocial/J\nnonspeaking/J\nnonspecialist/JNgS\nnonspecializing/J\nnonspecific/J\nnonspiritual/JSg\nnonstaining/J\nnonstandard/~JN\nnonstarter/NgS\nnonstick/J\nnonstop/~JN\nnonstrategic/J\nnonstriking/J\nnonstructural/J\nnonsubscriber/NgS\nnonsuccessive/J\nnonsupport/NgG\nnonsurgical/J\nnonsustaining/J\nnonsympathizer/NgS\nnontarnishable/J\nnontaxable/JN\nnontechnical/J\nnontenured/J\nnontheatrical/JN\nnonthinking/JN\nnonthreatening/J\nnontoxic/JN\nnontraditional/J\nnontransferable/J\nnontransparent/J\nnontrivial/J\nnontropical/J\nnonuniform/J\nnonunion/JN\nnonuser/NgS\nnonvenomous/J\nnonverbal/JN\nnonviable/J\nnonviolence/~Nmg\nnonviolent/~JY\nnonvirulent/J\nnonvocal/J\nnonvocational/J\nnonvolatile/J\nnonvoter/NgS\nnonvoting/J\nnonwestern/JNgS\nnonwhite/JNgS\nnonworking/J\nnonyielding/J\nnonzero/~JN\nnoob/NgS\nnoodle/~NmgSVGd\nnook/~NgSV\nnookie/N\nnooky/NJ\nnoon/~NgV\nnoonday/Ng\nnoontide/Ng\nnoontime/Ng\nnoose/NSgV\nnootropic/NgSJ\nnope/NV\nnor/~CN\nnor'easter/N\nnorm/~NgSV\nnormal/~JYNgS\nnormalcy/Ng\nnormalisation/Ng!_₹\nnormalise/VdSG!_₹\nnormality/Ng\nnormalization/~NOgr\nnormalize/VdSGrn\nnormative/~JYN\nnormie/NSg\nnorth/~NgJ>VZ\nnorthbound/~J\nnortheast/~NgJ>Z\nnortheaster/NgY\nnortheastern/~J\nnortheastward/JS\nnorther/~NgVJY\nnortherly/~NSgJ\nnorthern/~J>NZ\nnortherner/Ng\nnorthernmost/~J\nnorthward/~NSJ\nnorthwest/~NgJ>Z\nnorthwester/NgY\nnorthwestern/~JN\nnorthwestward/~JS\nnose/~NgSVGd\nnosebag/NgS\nnosebleed/NgS\nnosecone/NSg\nnosedive/NSgVdG\nnosegay/NSg\nnosh/NgSVd>GZ\nnosher/Ng\nnosily/Ry\nnosiness/Nmg\nnostalgia/~Nmg\nnostalgic/~JNQ\nnostril/NgS\nnostrum/NgS\nnosy/J^>pNV\nnot/~RCN\nnot-for-profit/JNgS\nnotability/~NSg\nnotable/~J\nnotably/~R%         # also focusing adverb\nnotarial/J\nnotarisation/N!_₹\nnotarise/VGdS!_₹\nnotarization/Ng\nnotarize/VGdS\nnotary/~NSg\nnotate/VGdSJ\nnotation/~NwSgWe\nnotch/~NgSVGd\nnotchback/NgS\nnote/~NSVdGWe\nnote's\nnotebook/~NgS\nnotelet/NS\nnotepad/NgS\nnotepaper/Nmg\nnoteworthiness/Nmg\nnoteworthy/~JpN\nnothing/~INSgJp\nnothingness/Nmg\nnotice/~NgSVGd\nnoticeable/~JU\nnoticeably/~Ry\nnoticeboard/~NgS\nnoticed/~VU\nnotifiable/J\nnotification/~NwSg\nnotifier/NgS\nnotify/~Vd>SGnXZ\nnotion/~NgS\nnotional/JYN\nnotoriety/~Nmg\nnotorious/~JY\nnotwithstanding/~CP\nnougat/NwgS\nnought/NgSJVRI!@_₹\nnoughties/9!_₹\nnoun/~NgSVK\nnourish/NSVdGL\nnourishment/~Nmg\nnous/~N\nnova/~NgS\nnovae/9\nnovel/~JNSg\nnovelette/~NSg\nnovelisation/NwgS!_₹\nnovelise/VdSG!_₹\nnovelist/~NSg\nnovelization/~NwgS\nnovelize/VdSG\nnovella/~NgS\nnovelty/~NSgJ\nnovena/~NgS\nnovenae/N!@_₹\nnovene/J\nnovice/~NgS\nnovitiate/NgS\nnow/~JCNgR\nnowadays/~g\nnoway/S\nnowhere/~JNg\nnowise/\nnowt/IN\nnoxious/~J\nnozzle/~NgS\nnu/~NSgJ\nnuance/~NwgSVd\nnub/NSgV\nnubbin/NgS\nnubby/J^>\nnubile/JN\nnuclear/~JNK\nnucleate/JVdGSNn\nnucleation/NwgS\nnuclei/~N\nnucleic/~J\nnucleoli/N9\nnucleolus/Ng\nnucleon/NSg\nnucleoside/N\nnucleotide/~N\nnucleus/~N0g\nnude/~J^>NgS\nnudge/NSgVGd\nnudism/Nmg\nnudist/NSgJ\nnudity/~Nmg\nnugatory/J\nnugget/~NSgV\nnuisance/~NgS\nnuke/~NgSVGd\nnull/~NSJVdGB\nnullification/NwSg\nnullify/VdSGn\nnullity/Ng\nnumb/~J^Y>pVGdSZ\nnumber/~NwSVdGJr\nnumber's\nnumbered/~VU\nnumberless/J\nnumbing/JYV6\nnumbness/Nmg\nnumbskull/NSg!@_₹\nnumerable/Ji\nnumeracy/Ngi\nnumeral/~NSgJ\nnumerate/VGdSJXn\nnumeration/Ng\nnumerator/NgS\nnumeric/~JN\nnumerical/~JY\nnumerologist/NgS\nnumerology/Ng\nnumerous/~JY\nnuminous/J\nnumismatic/~JS\nnumismatics/~Ng\nnumismatist/NSg\nnumskull/NgS\nnun/~NSgI\nnuncio/~NSg\nnunnery/~NSg\nnuptial/~JSg\nnurse/~NgSVGd>Z\nnurselings/N\nnursemaid/NgSV\nnurser/Ng\nnursery/~NSg\nnurseryman/N0g\nnurserymen/N9\nnursing/~JNmgV\nnursling/NSg\nnurture/~NSgVd>GZ\nnurturer/NgS\nnut/~NSgV\nnutbag/NgS\nnutcase/NS\nnutcracker/NgS\nnuthatch/NgS\nnuthouse/NgS\nnutmeat/NSg\nnutmeg/NwSgV\nnutpick/NSgV\nnutria/NSg\nnutrient/~NgSJ\nnutriment/NgS\nnutrition/~Nmg\nnutritional/~JY\nnutritionist/NSg\nnutritious/JYp\nnutritiousness/Nmg\nnutritive/JN\nnutsack/NgS\nnutshell/NgSV\nnutted/VtT\nnutter/NSg\nnuttiness/Nmg\nnutting/V6N\nnutty/~J>^p\nnuzzle/Vd>GSNgZ\nnuzzler/Ng\nnybble/NgS\nnylon/~NwgS\nnylons/N9g\nnymph/~N0gV\nnymphet/NgS\nnympho/NgS\nnymphomania/Nmg\nnymphomaniac/NSgJ\nnymphs/~N9V\no'clock/R\noaf/NSg\noafish/JYp\noafishness/Nmg\noak/~NwSgJVn\noakum/Ng\noar/NSgVGd\noarlock/NSg\noarsman/N0g\noarsmen/N9\noarswoman/N0g\noarswomen/N9\noases/N9\noasis/~N0g\noat/~N0Sgn\noatcake/NwSg\noath/~NgV\noaths/~NV\noatmeal/NgJ\noats/~N9wg\nob/NS\nobbligato/NgS\nobduracy/Ng\nobdurate/JYpV\nobdurateness/Ng\nobedience/~NmgE\nobedient/~JYNE\nobeisance/NSg\nobeisant/J\nobelisk/~NgSV\nobese/~JN\nobesity/~Nmg\nobey/~VdSGE\nobfuscate/VGdSJnX\nobfuscation/Nmg\nobi/~NSg\nobit/NgS\nobituary/~NSg\nobj/N\nobject/~NSgVGdv\nobject-oriented/J\nobjectify/VGdSn\nobjection/~NSgB\nobjectionable/~JU\nobjectionably/Ry\nobjectivation/Ng\nobjective/~JYpNSg\nobjectiveness/Ng\nobjectivism/~Nmg\nobjectivity/~Nmg\nobjectivization/Ng\nobjectivize/VdSG\nobjector/~NgS\nobjurgate/VGdSXn\nobjurgation/Ng\noblast/~NSg\noblate/NJVnX\noblation/Ng\nobligate/VdSGJXn\nobligation/~NwgS\nobligatorily/Ry\nobligatory/~J\noblige/VGdSE\nobliging/JYV6N\nobligor/NgS\noblique/~JYpNSgV\nobliqueness/Nmg\nobliquity/Ng\nobliterate/VdSGJn\nobliteration/Ng\noblivion/~NgV\noblivious/~JYp\nobliviousness/Nmg\noblong/~JNgSV\nobloquy/Ng\nobnoxious/~JYp\nobnoxiousness/Nmg\noboe/~NgS\noboist/NgS\nobscene/~JY^>V\nobscenity/~NwSg\nobscurantism/Nmg\nobscurantist/NSgJ\nobscure/~JY^>VdSG\nobscurity/~NmSg\nobsequies/N\nobsequious/JYp\nobsequiousness/Nmg\nobsequy/Ng\nobservability/Nmg\nobservable/JNgS\nobservably/Ry\nobservance/~NgS\nobservant/~JY\nobservation/~NwSg\nobservational/~J\nobservatory/~NSg\nobserve/~Vd>GSNBZ\nobserved/~VtTU\nobserver/~NgS\nobsess/VdSGv\nobsession/~NSg\nobsessional/JY\nobsessive/~JYpNSg\nobsessiveness/Nmg\nobsidian/~NwgJ\nobsolesce/VdSG\nobsolescence/~Nmg\nobsolescent/J\nobsolete/~JVGdS\nobstacle/~NgS\nobstetric/JS\nobstetrical/J\nobstetrician/~NSg\nobstetrics/~Nmg\nobstinacy/Nmg\nobstinate/JY\nobstreperous/JYp\nobstreperousness/Ng\nobstruct/~VdGSv\nobstructed/~VU\nobstruction/~NwSg\nobstructionism/Nmg\nobstructionist/NgSJ\nobstructive/JYpN\nobstructiveness/Nmg\nobtain/~VdGSBL\nobtainable/JU\nobtainment/Nmg\nobtrude/VdSG\nobtrusion/NmgS\nobtrusive/JYpU\nobtrusiveness/NmgU\nobtuse/JY^>pV\nobtuseness/Nmg\nobverse/~JNSg\nobviate/VdGSNJn\nobviation/Nmg\nobvious/~JpU\nobviously/R         # viewpoint or commenting adverb\nobviousness/Nmg\nocarina/NgS\noccasion/~NgSVGd\noccasional/~JYN\noccidental/~JNSg\noccipital/~JNSg\nocclude/VGdS\nocclusion/~NSg\nocclusive/JN\noccult/~VJNg\noccultism/Ng\noccultist/~NSg\noccupancy/~Nwg\noccupant/~NSg\noccupation/~Nwgr\noccupational/~JY\noccupations/~N9\noccupied/~JVU\noccupier/NSg\noccupy/~VdSGr\noccur/~VSr\noccurred/~VtTr\noccurrence/~NSg\noccurring/~V6NJr\nocean/~NSg\noceanfront/JNSg\noceangoing/J\noceanic/~Jg\noceanographer/NSg\noceanographic/~J\noceanography/~Nmg\noceanology/Ng\nocelot/NgS\noch/~>\nocher/NwgSJV<\nochre/NwgSJV!@_₹\nocker/NSVJ\noctagon/~NgS\noctagonal/~J\noctal/NJ\noctane/~NwgS\noctave/~NgSVJ\noctavo/NgS\noctet/~NSg\noctogenarian/NSgJ\noctopus/~NwgSV\nocular/~JNgS\noculist/NSg\noculomotor/J\nodalisque/NSg\nodd/~J^>YpNSL\nodd-numbered/J\noddball/NSgJ\noddity/NSg\noddment/NSg\noddness/Nmg\nodds/~N9g\node/~NSg\nodious/JYp\nodiousness/Nmg\nodium/~Nmg\nodometer/NgS\nodor/~NwgSd<\nodoriferous/J\nodorless/J<\nodorous/J\nodour/NwSgd!@_₹\nodourless/J!@_₹\nodyssey/~NgS\noecus/N!@_₹\noedema/NgS!_₹\noedipal/J\noenology/Ng\noenophile/NSg\noesophagi/N9!_₹\noesophagus/N0!@_₹\noestradiol/N!@_₹\noestrogen/NgS!_₹\noestrous/J!_₹\noestrus/NgS!_₹\noeuvre/~NgS\nof/~P\nof course/R\noff/~J>PVGdSNZz\noff-grid/J\noff-limits/J\noff-ramp/NgS\noff-road/NgS\noff-roader/NgS\noff-roading/Ng\noff-the-books/J\noffal/Nmg\noffbeat/~NgSJ\noffence/NwgS!@_₹\noffend/~VGd>SZ\noffender/~NgS\noffense/~NwgS\noffensive/~JYpNi\noffensive's\noffensiveness/Nmgi\noffensives/~9\noffer/~NgSVGdz\noffering/~NwgV\noffertory/NSg\noffhand/J\noffhanded/JYp\noffhandedness/Nmg\noffice/~NgSV>Z\nofficeholder/NSg\nofficer/~NgSV\nofficial/~JYNgS\nofficialdom/Nmg\nofficialese/Nmg\nofficialism/Ng\nofficiant/NSg\nofficiate/VdGSN\nofficiation/Nwg\nofficiator/NgS\nofficious/JYp\nofficiousness/Nmg\noffing/NgV6\noffish/J\noffline/~JV\noffload/VdGSN\noffprint/NSgV\noffscreen/JR\noffset/~NgSVJ\noffsetting/V6Nm\noffshoot/~NgS\noffshore/~JVGN\noffside/JN\noffsite/JN\noffspring/~N09g\noffstage/~JVS\nofftrack/J\noft/~\noften/~R8^>          # removed `J` adjective sense is archaic\noftentimes/~\nofttimes/\nogle/~VGd>SNgZ\nogler/NgS\nogre/~NgS\nogreish/J\nogress/NgS\noh/~NgSV\nohm/NSg\nohmmeter/NgS\noho/\nohs/NV\noi/~NI\noik/NS\noil/~NwSgVGd\noilcan/NS\noilcloth/N0wg\noilcloths/N9\noiler/NgS\noilfield/NS\noiliness/Nmg\noilman/N0g\noilmen/9\noilskin/NwgS\noily/J>^pN\noink/NgSVdG\nointment/~NwSg\nokapi/NSg\nokay/~NgSVGJ\nokayish/J\nokey-dokey/NgS\nokra/NgS\nold/~J^>pNgn\nold-fashioned/JN\nold-timey/J\nold-world/J\noldie/NSg\noldish/J\noldness/Nmg\noldster/NgS\nole/~JSgv\noleaginous/J\noleander/NgS\noleo/Ng\noleomargarine/Ng\nolfactory/~JNSg\noligarch/N0g\noligarchic/J\noligarchical/J\noligarchs/N9\noligarchy/NSg\noligonucleotide/NS\noligopoly/NSg\nolive/~NwSgJ\nom/~NSgVnX\nombudsman/~N0g\nombudsmen/N9\nomega/~NSgJ\nomelet/NwgS<\nomelette/NwgSV!@_₹\nomen/~NgV\nomicron/~NgS\nominous/~JYp\nominousness/Nmg\nomission/~NwgS\nomit/~VS\nomitted/~VtT\nomitting/~VN6\n# omni              # prefixes that are not also words in their own right don't belong in the dictionary\nomnibus/~NgSJV\nomnidirectional/J\nomnipotence/Nmg\nomnipotent/JYN\nomnipresence/Nmg\nomnipresent/J\nomniscience/Nmg\nomniscient/JN\nomnivore/NgS\nomnivorous/~JYp\nomnivorousness/Nmg\non/~JP              # verb sense is nonstandard dialectal and interferes with linter heuristics\non-off/J\nonboard/~JRVSdG\nonce/~CNg\nonce-in-a-lifetime/J\noncogene/NSg\noncologist/~NSg\noncology/~Ng\noncoming/~NJV\none/~NSgIJpXn\none another/Ig\none-handed/J\none-man/J\none-off/J\none shot/N\none-shot/JNV\none-sidedness/Nm\none-tenth/N\none-to-one/NJ\none-way/J\noneness/Ng\nonerous/JYp\nonerousness/Nmg\noneself/~IF\nonetime/J\nonfield/J\nongoing/~JNV\nonion/~NwgS\nonionskin/Nwg\nonline/~JV\nonlooker/NSg\nonlooking/J\nonly/~JR8C          # also a focusing adverb\nonomatopoeia/Ng\nonomatopoeic/J\nonomatopoetic/J\nonrush/NgSVG\nonscreen/~J\nonset/~NgSV\nonshore/JVSdG\nonside/JN\nonsite/J\nonslaught/~NgS\nonstage/~J\nonto/~PJ\nontogeny/Ng\nontological/~J\nontology/~Nwg\nonus/NgS\nonward/~JV\nonwards/R\nonyx/~NgSJ\noodles/N9g\nooh/NSVGd\noolong/Nwg          # tea\noomph/NV\noops/~NV\noopsy/NgS\nooze/NgSVGd\noozy/J^>\nop/~NSgVdGJ\nopacity/Nwg\nopal/~NwgS\nopalescence/Nmg\nopalescent/J\nopaque/~JY^>pNSVGd\nopaqueness/Nmg\nopcode/NSg\nope/~JVSN\nopen/~J^Y>pVGdSNgZzB\nopen source/Ng\nopen-source/JVSdG\nopencast/J\nopened/~VJU\nopener/~NgS\nopenhanded/JpV\nopenhandedness/Nmg\nopenhearted/J\nopening/~VSJNg\nopenness/~Nmg\nopenwork/Ng\nopera/~NgS\noperability/Nmg\noperable/Ji\noperand/NgS\noperate/~VdSGnvX\noperatic/~J\noperatically/Ry\noperation/~NwgS\noperational/~JY\noperationalize/VGdS\noperative/~JNSg\noperator/~NSg\noperetta/~NSg\nophthalmic/~J\nophthalmologist/~NSg\nophthalmology/~Ng\nopiate/JNSgV\nopine/VGdSNnX\nopinion/~NwgS\nopinionated/VJ\nopioid/~NSg\nopium/~Nmg\nopossum/NgS\nopp/~PN\nopponent/~NSgJ\nopportune/JYi\nopportunism/Nmg\nopportunist/NSg\nopportunistic/~JQ\nopportunity/~NwSg\noppose/~VdSG\nopposed/~JVtTU\nopposite/~JYNSgPnX\nopposition/~Nmg\noppositional/J\noppress/VbdSGv\noppression/~Nmg\noppressive/~JYp\noppressiveness/Nmg\noppressor/NgS\nopprobrious/JY\nopprobrium/Nmg\nopt/~VSGd\nopt in/V\nopt-in/J\nopt out/V\nopt-out/J\noptative/NSgJ\noptic/~JNgS\noptical/~JYNgS\noptician/NSg\noptics/~Ng\noptima/N9\noptimal/~JYN\noptimisation/NwSg!_₹\noptimise/Vd>SG!_₹\noptimism/~NSg\noptimist/NSg\noptimistic/~JQ\noptimizable/J\noptimization/~NwgS\noptimize/~Vd>SG\noptimizer/NgS\noptimum/~NSgJ\noption/~NSgVdG\noptional/~JYN\noptionality/Nmg\noptometrist/NgS\noptometry/Ng\nopulence/Nmg\nopulent/JY\nopus/~NgS\nor/~CN              # removed `5` adjective, rare heraldic usage; `+` preposition: archaic\noracle/~NSgV\noracular/J\noral/~JYNgS\norality/N\norange/~NwSgJpV\norangeade/NwgS\norangery/NSg\norangutan/NSg\norate/VGdSJnX\noration/~NwgV\norator/~NSg\noratorical/JY\noratorio/~NgS\noratory/~NSg\norb/~NSgV\norbicular/J\norbit/~NgSVd>GZ\norbital/~JNSg\norbiter/~NgS\norc/NSg\norchard/~NSg\norchestra/~NgS\norchestral/~JN\norchestrate/VdSGXn\norchestration/~Ng\norchestrator/NgS\norchid/~NSgJ\nordain/VSdGL\nordainment/Nwg\nordeal/~NSg\norder/~NwgSVdGEr\norder book/NgS\nordered/~JVtTU\norderings/~N9\norderliness/NmgE\norderly/~JpNSg\nordinal/~JNSg\nordinance/~NSg\nordinarily/~R8y\nordinariness/Nmg\nordinary/~NSgJp\nordinate/~NgSVJnX\nordination/~Nwg\nordnance/~Ng\nordure/Ng\nore/~NSgP\noregano/Nmg\norg/~NSg\norgan/~NgSV\norgandie/Ng!_₹\norgandy/Ng\norganelle/NgS\norganic/~JRQi\norganisation/NwSgr!_₹\norganisational/JY!_₹\norganise/VSdGrE!_₹\norganised/JVU!_₹\norganiser/NgS!_₹\norganism/~NgS\norganismic/J\norganist/~NgS\norganization/~NwSgr\norganizational/~JY\norganize/~VSdGrE\norganized/~JVU\norganizer/~NgS\norganoid/Sg\norganza/Ng\norgasm/~NSgVdG\norgasmic/J\norgiastic/J\norgy/NSg\noriel/~NgS\norient/~ONSJVdGrE\norient's\noriental/~JNgS\norientalist/~NS\norientate/VdSGEn\norientation/~NwgrE\norientations/~N\norienteering/Ngm\norifice/NgS\norig/N\norigami/NgV\norigin/~NSg\noriginal/~JYNgS\noriginality/~Nmg\noriginate/~VdSGn\norigination/Ng\noriginator/~NSg\noriole/~NSg\norison/NSg\normolu/NgJV\nornament/~NSgVGd\nornamental/~JN\nornamentation/~NwSg\nornate/~JYpV\nornateness/Nmg\norneriness/Nmg\nornery/J>^p\nornithological/~J\nornithologist/~NgS\nornithology/~Ng\norotund/JN\norotundity/NSg\norphan/~NSgJVdG\norphanage/~NgS\norris/NgS\northodontia/Ng\northodontic/JS\northodontics/Ng\northodontist/NSg\northodox/~JU\northodoxy/~NSg\northogonal/~JN\northogonality/~N\northographic/~JQ\northography/~NwSgV\northopaedic/JS!@_₹\northopaedics/Ng!@_₹\northopaedist/NgS!@_₹\northopedic/JS\northopedics/Ng\northopedist/NgS\norzo/Ng\noscillate/VGdSnX\noscillation/~NgS\noscillator/~NSg\noscillatory/J\noscilloscope/NgS\nosculate/VdSGJXn\nosculation/NgS\nosier/NgS\nosmium/Nmg\nosmosis/~Ng\nosmotic/J\nosprey/~NSg\nossicles/N\nossification/Ng\nossify/VGdSn\nostensible/J\nostensibly/~Ry\nostentation/Ng\nostentatious/JY\nosteoarthritis/~Ng\nosteopath/NgS\nosteopathic/J\nosteopaths/N\nosteopathy/Ng\nosteoporosis/Ng\nostler/NS\nostracise/VGdS!_₹\nostracism/Ng\nostracize/VGdS\nostrich/~NgS\nother/~JpNgSV\notherwise/~RJ\notherworldly/J\notiose/J\notter/~NgS\nottoman/~NgS\noubliette/NgS\nouch/NV\nought/~INA\noughtn't/A\nounce/~NgS\nour/~D5\nours/~I\nourself/Ia1F        # I:pronoun a:personal 1:person .~singular F:reflexive (of the 'Royal We')\nourselves/~Ia1F:    # I:pronoun a:personal 1:person :~plural F:reflexive\noust/~VGd>SZ\nouster/~NgSV\nout/~PNSgVGd>JR(z\nout-and-out/J\nout of date\noutage/NSg\noutargue/VGdS\noutback/~NgSJV\noutbalance/VdSG\noutbid/VbtTS\noutbidding/V6\noutboard/~JNgS\noutboast/VdSG\noutbound/~JN\noutbox/NgSV\noutbreak/~NgSV\noutbuilding/NgSV\noutburst/~VSNg\noutcast/~VSJNg\noutclass/VdSG\noutcome/~NgS\noutcrop/~NgSV\noutcropped/VtT\noutcropping/NSgV6\noutcry/~NSgV\noutdated/~J\noutdid/V\noutdistance/VGdS\noutdo/VG\noutdoes/V\noutdone/V\noutdoor/~JVS\noutdoors/~NgV\noutdoorsman/NgS\noutdoorsmen/9\noutdoorsy/J\noutdraw/VGS\noutdrawn/J\noutdrew/V\noutercourse/N\noutermost/~JN\nouterwear/Nmg\noutface/VGdS\noutfall/VSN\noutfield/~NSgV>Z\noutfielder/~NgS\noutfight/VSG\noutfit/~NSgV\noutfitted/~VtT\noutfitter/NgS\noutfitting/V6N\noutflank/VGSd\noutflow/~NgSV\noutfought/V\noutfox/VGdS\noutgo/VGNgz\noutgoes/V\noutgrew/V\noutgrow/VGSH\noutgrown/VT\noutgrowth/~N0g\noutgrowths/N9\noutguess/VbGdS\noutgun/VS\noutgunned/VtTJ\noutgunning/V6\nouthit/VbtTS\nouthitting/V6\nouthouse/NSgV\nouting/~NgSV\noutlaid/V\noutland/JNgSVdG\noutlandish/JYpN\noutlandishness/Nmg\noutlast/VdSG\noutlaw/~NSgVGd\noutlay/NSgVG\noutlet/~NSg\noutlier/NS\noutline/~NgSVGd\noutlive/VGdS\noutlook/~NgSV\noutlying/~JN\noutmaneuver/VGdS\noutmanoeuvre/VdSG!@_₹\noutmatch/VGdS\noutmoded/JV\noutnumber/VdG\noutnumbers/J\noutpace/VGdS\noutpaint/VGdS\noutpatient/~NgSJ\noutperform/VGSd\noutplace/VL\noutplacement/Ng\noutplay/VGdS\noutpoint/VdGSN\noutpost/~NgS\noutpouring/NgS\noutproduce/VdSG\noutput/~NwSgVbtT\noutputted/VtT\noutputting/V6\noutrace/VGdS\noutrage/~NgSVGd\noutrageous/~JY\noutran/Vt\noutrank/VGdS\noutre/J\noutreach/~NgSVdG\noutrider/NgS\noutrigger/NSg\noutright/~JV\noutro/NgS\noutrun/VbTSN\noutrunning/V6\noutscore/VGdS\noutsell/VGS\noutset/~NSgV\noutshine/VGS\noutshone/V\noutshout/VGdS\noutside/~NmgSJ>PVZ\noutsider/~NgS\noutsize/JVSd\noutskirt/NgSV\noutsmart/VGdS\noutsold/V\noutsource/VdSG\noutsourcing/~VNg\noutspend/VSG\noutspent/VJ\noutspoken/~JYpV\noutspokenness/Nmg\noutspread/VGSJ\noutstanding/~VJY\noutstation/NgSJ\noutstay/VdGS\noutstretch/VdSG\noutstrip/VS\noutstripped/VtT\noutstripping/V6N\noutta/~P\nouttake/NgSVP\noutvote/VGdS\noutward/~JYVSN\noutwear/VGS\noutweigh/~VbGd\noutweighs/Vh\noutwit/VS\noutwith/P\noutwitted/VtT\noutwitting/V6\noutwore/V\noutwork/Vd>GSNgZ\noutworn/VJ\nouzo/NwgS\nova/~N9P\noval/~NgSJ\novarian/~J\novary/~NSg\novate/JNnX\novation/~NgV\noven/~NgSV\novenbird/NSg\novenproof/J\novenware/Nmg\nover/~JYNgSP(\noverabundance/Ng\noverabundant/J\noverachieve/VGd>SZ\noverachiever/Ng\noveract/VGSdv\noverage/JVSNg\noveraggressive/J\noverall/~JNSg\noveralls/Ng\noverambitious/J\noveranalyze/VSdG\noveranxious/J\noverarching/~VJN\noverarm/JNSVGd\noverate/V\noverattentive/J\noverawe/VdSG\noverbalance/VGdSNg\noverbear/VGS\noverbearing/V6JY\noverbid/VSNg\noverbidding/V6N\noverbite/NgSV\noverblew/V\noverblow/VGS\noverblown/JV\noverboard/~JV\noverbold/J\noverbook/VdGS\noverbore/JV\noverborne/V\noverbought/J\noverbuild/VSG\noverbuilt/VJ\noverburden/VGdSN\noverbuy/VGS\novercame/~V\novercapacity/Ng\novercapitalize/VdSG\novercareful/J\novercast/NgSJVG\novercautious/J\novercharge/VdGSNg\noverclock/VGdSN\novercloud/VSGd\novercoat/NgSV\novercome/~VGS\novercompensate/VdSGn\novercompensation/Nmg\noverconfidence/Nmg\noverconfident/J\noverconscientious/J\novercook/VdGS\novercorrect/VGdS\novercorrection/NwgS\novercritical/J\novercrowd/VSdG\novercrowding/~VNg\noverdecorate/VdSG\noverdependent/J\noverdevelop/VSdG\noverdid/V\noverdo/VG\noverdoes/V\noverdone/JV\noverdose/~NgSVGd\noverdraft/NSgV\noverdraw/VGSN\noverdrawn/V\noverdress/VGdSNg\noverdrew/V\noverdrive/~VSNg\noverdriven/VJ\noverdub/VSNg\noverdubbed/VtT\noverdubbing/V6N\noverdue/~J\novereager/J\novereat/VGSn\noveremotional/J\noveremphasis/Ng\noveremphasise/V!_₹\noveremphasize/VGdS\noverenthusiastic/J\noverestimate/VGdSNgn\noverestimation/Nmg\noverexaggerate/VGdS\noverexcite/VdSG\noverexercise/VGdSNm\noverexert/VSdG\noverexertion/Nmg\noverexplain/VGdS\noverexploit/VGdS\noverexpose/VGdS\noverexposure/Nmg\noverextend/VdGS\noverfed/JV\noverfeed/VGS\noverfill/VdGSN\noverfit/VS          # one or two past forms?\noverfitted/VtTJ     # is 'overfit' also a past form?\noverfitting/NgV6\noverflew/V\noverflight/NgS\noverflow/~NgSVdG\noverflown/V\noverfly/VGS\noverfond/J\noverfull/JN\noverfund/VdGS\novergeneralise/VdSG!_₹\novergeneralize/VdSG\novergenerous/J\novergraze/VdSG\novergrew/V\noverground/~JNV\novergrow/VSGH\novergrown/~JV\novergrowth/Nmg\novergrowths/9\noverhand/JNgSVd\noverhang/~VGSNg\noverhasty/J\noverhaul/~NgSVdG\noverhead/~JNgSP\noverhear/VSG\noverheard/~V\noverheat/VdGSN\noverhung/VtTJ\noverhype/VSGd\noverindulge/VGdS\noverindulgence/Ng\noverindulgent/J\noverinflate/VSdG\noverinvest/VGdSL\noverjoy/VGdSN\noverkill/~NgV\noverladen/JV\noverlaid/~V\noverlain/V\noverland/~JNV\noverlap/~VSNg\noverlapped/~VtT\noverlapping/~V6JN\noverlarge/J\noverlay/~VGdSNg\noverleaf/\noverleveraged/J\noverlie/V\noverload/~VGdSNg\noverlong/J\noverlook/~NgSVGd\noverlord/~NgSV\noverly/~JSG\novermanned/VtTJ\novermanning/V6\novermaster/VSdG\novermatch/VSdG\novermodest/J\novermuch/JNS\novernice/J\novernight/~JVdGSNg\noveroptimism/Ng\noveroptimistic/J\noverpaid/V\noverparticular/J\noverpass/~NgSV\noverpay/VGS\noverperform/VGdS\noverperformance/NgS\noverplay/VGdS\noverpopulate/VGdSn\noverpopulation/Ng\noverpower/~VSdG\noverpowering/VJYN\noverpraise/VdGSN\noverprecise/J\noverprepare/VGdS\noverprice/VdSG\noverprint/NSgVdG\noverproduce/VGdS\noverproduction/Nmg\noverpromise/VSGd\noverprotect/VSdGv\noverqualified/J\noverran/~V\noverrange/VGdSN\noverrate/VGdSN\noverreach/VGdSN\noverreact/VSdG\noverreaction/NwSg\noverread/JVSdG\noverrefined/VJ\noverregulate/VdSGn\noverreliance/Nmg\noverrepresent/VGdS\noverrepresentation/Nmg\noverridden/V\noverride/~VGSNg\noverripe/Jg\noverrode/V\noverrule/VGdS\noverrun/~VSNg\noverrunning/V6\noversampling/VNmg\noversaturate/VdSGn\noversaw/~Vt\noversea/JS\noverseas/JR\noversee/~V>SZ\noverseeing/~V6\noverseen/~VT\noverseer/~NgS\noversell/VGS\noversensitive/Jp\noversensitiveness/Nmg\noversexed/J\novershadow/VdSG\novershare/VdGSN\novershoe/NgS\novershoot/~NSVG\novershot/VJN\noversight/~NSgV\noversimple/J\noversimplification/NwgS\noversimplify/VdSGnX\noversize/JVdGSN\noversized/J\noversleep/VGS\noverslept/V\noversold/J\noverspecialisation/Nmg!_₹\noverspecialise/VGdS!_₹\noverspecialization/Nmg\noverspecialize/VGdS\noverspend/VbGSN\noverspent/VJ\noverspill/NgSVdG\noverspray/NmSgVdG\noverspread/VGS\noverstaffed/VtT\noverstate/VdSGL\noverstatement/NgS\noverstay/VdGSN\noverstep/VSN\noverstepped/VtT\noverstepping/V6\noverstimulate/VdSGnX\noverstock/VGdSN\noverstretch/VGdSN\noverstrict/J\noverstrung/J\noverstuffed/JVtT\noversubscribe/VdSG\noversubtle/J\noversupply/VGdSNw\noversuspicious/J\novert/~JYN\novertake/~VGSN\novertaken/~VTJ\novertax/VGdS\noverthink/VSG\noverthought/VtTN\noverthrew/~Vt\noverthrow/~VGSNg\noverthrown/~VT\novertighten/VGdSN\novertime/~NgSV\novertire/VGdS\novertone/NgSV\novertook/~Vtg\noverture/~NgSVJ\noverturn/~VdGSN\noveruse/~VdGSNg\novervaluation/NS\novervalue/VdGSN\noverview/~NgSV\novervolt/VdSG\novervoltage/Ng\noverweening/JYNV\noverweight/~JNgV\noverwhelm/~VGdSN\noverwhelming/~V6JYN\noverwind/VGS\noverwinter/VSdGJ\noverwork/VGdSNg\noverwound/VtT/J\noverwrite/VGSN\noverwritten/VT\noverwrote/Vt\noverwrought/VJ\noverzealous/JY\noviduct/NSg\noviparous/J\novoid/JNgS\novular/JN\novulate/VdSGJn\novulation/~NwSg\novule/NgS\novum/Ng\now/~\nowe/~VdSG\nowl/~NSgV\nowlet/NgS\nowlish/JY\nown/~JVGdSNE\nowner/~NgS\nownership/~Nmg\nox/~Ngn\noxalate/~NV\noxalis/NgS\noxblood/NgJ\noxbow/~NgS\noxcart/NSg\noxford/~NSg\noxidant/NgS\noxidase/~N\noxidation/~Ng\noxidative/~J\noxide/~NgS\noxidisation/Ng!_₹\noxidise/VGd>SZ!_₹\noxidiser/Ng!_₹\noxidization/Ng\noxidize/VGd>SZ\noxidizer/~Ng\noxtail/NS\noxyacetylene/NgJ\noxycodone/Ng\noxygen/~Nmg\noxygenate/VdSGn\noxygenation/Ng\noxymora/N\noxymoron/Ng\noxymoronic/J\noyster/~NSgJV\noz/~N\nozone/~NgV\np/~PNV>G^nXz\np.m./\npH/\npa/~NSgH\npablum/Ng\npabulum/Ng\npace/~NgSJ>VGdPZ\npacemaker/~NSg\npacer/Ng\npacesetter/NSg\npacey/J\npachyderm/NgS\npachysandra/NgS\npacific/~J\npacifically/Ry\npacification/Nmg\npacifier/Ng\npacifism/~Nmg\npacifist/~NSgJ\npacifistic/J\npacify/VGd>SZn\npack/~NSVGdrU\npack's\npackage/~NSVGdr\npackage's\npackager/NSg\npackaging/~VNmg\npacker/~NgS\npacket/~NgSV\npacketize/VSdG\npacking's\npackinghouse/NSg\npacksaddle/NgS\npact/~NgSV\npacy/J>^\npad/~NSgV\npadded/~JVtT\npadding/~V6Ng\npaddle/~NgSVGd>Z\npaddler/Ng\npaddock/~NgSVdG\npaddy/~NSgJ\npadlock/NgSVdG\npadre/~NSg\npaean/NSgV\npaediatric/J!@_₹\npaediatrician/NgS!@_₹\npaediatrics/Nmg!@_₹\npaedophile/NS!@_₹\npaedophilia/Nm!@_₹\npaella/NwgS\npagan/~JNSg\npaganism/~Nmg\npage/~NgSVGd>Z\npageant/~NgSV\npageantry/Nmg\npageboy/NSg\npager/NgS\npaginate/VdSGn\npagination/Nmg\npagoda/~NgS\npah/~N\npaid/~VtTJrU\npail/NgS\npailful/NSg\npain/~NwgSVdG\npainful/~JYp\npainfuller/Jc\npainfullest/Ju\npainfulness/Nmg\npainkiller/NgS\npainkilling/J\npainless/JYp\npainlessness/Ng\npainstaking/JYNg\npaint/~NwSgVGd>Zz\npaintball/NV\npaintbox/NgS\npaintbrush/NgS\npainted/~VJU\npainter/~NgY\npainting/~VNwg\npaintless/J\npaintwork/Ng\npair/~NgSVdGr\npaired/~VU\npairing/~NSV\npairwise/J\npaisley/~NSgJ\npajama/NS\npajamas/Ng\npal/~NSgVY\npalace/~NgSV\npaladin/NSg\npalaeolithic/J!_₹\npalaeontologist/NgS!_₹\npalaeontology/Ng!_₹\npalanquin/NSg\npalatable/JU\npalatal/~JNSg\npalatalisation/Ng!_₹\npalatalise/VGdS!_₹\npalatalization/Ng\npalatalize/VGdS\npalate/~NgSVB\npalatial/~JY\npalatinate/~NgSJ\npalatine/~JNgS\npalaver/NSgVGd\npalazzi/N9\npalazzo/~N0\npale/~JY^>pVGdSNgz\npaleface/NgS\npaleness/Ng\npaleo/~N\npaleographer/NgS\npaleography/Nmg\npaleolithic/~J\npaleontologist/~NSg\npaleontology/~Ng\npalette/~NSg\npalfrey/NSg\npalimony/Ng\npalimpsest/NgSV\npalindrome/NgS\npalindromic/JN\npaling/VNg\npalisade/~NSgV\npalish/J\npall/~NgSVdG\npalladium/~Ng\npallbearer/NgS\npallet/~NgSV\npalletize/VSdG\npalliate/VdSGJnv\npalliation/Ng\npalliative/JNSg\npallid/JYp\npallidness/Ng\npallor/Ng\npalm/~NgSVdG\npalmate/NJ\npalmetto/NSg\npalmist/NSg\npalmistry/Nmg\npalmtop/NSg\npalmy/J^>\npalomino/NgS\npalpable/J\npalpably/Ry\npalpate/VdSGJn\npalpation/Ng\npalpitate/VGdSXn\npalpitation/Ng\npalsy/~NSgVGdJ\npaltriness/Nmg\npaltry/J>^p\npampas/Ng\npamper/VdGSN\npamphlet/~NgSV\npamphleteer/NgSV\npan/~NSgVJ(\npanacea/NSg\npanache/Ng\npanama/~NgS\npanatella/NS\npancake/~NSgVdG\npanchromatic/J\npancreas/~NgS\npancreatic/~J\npancreatitis/~N\npanda/~NSg\npandemic/~JNSg\npandemonium/NwgS\npander/NgSVd>GZ\npanderer/Ng\npandimensional/J\npane/~N0gVK\npanegyric/NSgJ\npanel/~NSgVGdz\npaneling/VNg\npanelist/~NgS\npanelled/JVtT!@_₹\npanelling/NSgV6!@_₹\npanellist/NSg!@_₹\npanes/~N9\npang/~NgSV\npanhandle/~NSgVd>GZ\npanhandler/NgS\npanic/~JNwSgV\npanicked/VtTJ\npanicking/V6N\npanicky/J\npanned/~VtT\npannier/NSg\npanning/~NV6\npanoply/NSgV\npanorama/~NSg\npanoramic/~JN\npanpipes/Ng\npansy/~NSgJV\npant/~NgSVdG\npantaloons/Ng\npantechnicon/NS\npantheism/Ng\npantheist/NSgJ\npantheistic/J\npantheon/~NSg\npanther/~NgS\npantie/NgS\npanto/NS\npantomime/~NgSVGd\npantomimic/J\npantomimist/NSg\npantry/~NSg\npantsuit/NSg\npantyhose/~Ng\npantyliner/Ng\npantywaist/JNSg\npap/~NSgVJ\npapa/~NgS\npapacy/~NwSg\npapal/~J\npaparazzi/Nm9g\npaparazzo/N0\npapaya/~NwgS\npaper/~NwSgJ>VGdZ\npaperback/~NSgJV\npaperbark/NwS\npaperboard/Nmg\npaperboy/NSg\npaperclip/NSV\npaperer/Ng\npapergirl/NSg\npaperhanger/NSg\npaperhanging/Ng\npaperless/J\npaperweight/NgS\npaperwork/~Nmg\npapery/J\npapilla/N0g\npapillae/~N9\npapillary/~J\npapist/NgSJ\npapoose/NgS\npappy/JNSg\npaprika/~NmgJ\npapyri/~N9\npapyrus/~N0g\npar/~NSgJ>PVGdZBz\npara/~NgSJ(\nparable/~NgSVJ\nparabola/N0Sg\nparabolæ/N9\nparabolae/N9\nparabolic/~JN\nparacetamol/NS\nparachute/~NSgVdG\nparachutist/~NgS\nparade/~NgSVGd>Z\nparader/Ng\nparadigm/~NSg\nparadigmatic/JNQ\nparadisaical/J\nparadise/~NSgV\nparadox/~NgS\nparadoxical/JY\nparaffin/NwgV\nparagliding/~NV\nparagon/~NgSV\nparagraph/~NgVGd\nparagraphs/~N\nparakeet/~NSg\nparalegal/NgS\nparallax/~NgSV\nparallel/~JNSgVGd\nparalleled/~VtTU\nparallelisation/NwSg!_₹\nparallelised/J!_₹\nparallelism/NgS\nparallelization/NwSg\nparallelize/VdSGB\nparallelogram/~NSg\nparalyse/VdSG!_₹\nparalyses/NV\nparalysing/JYV!_₹\nparalysingly/Ry@\nparalysis/~Nmg\nparalytic/NSgJ\nparalyze/VdSG\nparalyzing/JYV\nparam/NgS\nparamagnetic/J\nparamecia/N9\nparamecium/N0g\nparamedic/NgS\nparamedical/JNgS\nparameter/~NgS\nparameterisation/Nmg!_₹\nparameterise/Vd!_₹\nparameterization/Nmg\nparameterize/Vd\nparametric/~JN\nparamilitary/~NSgJ\nparamount/~JN\nparamountcy/N\nparamour/NSgV\nparanoia/~Nmg\nparanoiac/JNgS\nparanoid/~JNSg\nparanormal/~JN\nparapet/~NgS\nparaphernalia/~Ng\nparaphrase/~NSgVdG\nparaplegia/Ng\nparaplegic/JNSg\nparaprofessional/NgSJ\nparapsychologist/NgS\nparapsychology/Ng\nparaquat/Ng\nparasailing/NV\nparascending/N\nparasite/~NSgV\nparasitic/~JN\nparasitical/JY\nparasitism/Ng\nparasitize/VdSG\nparasitoid/NgS\nparasocial/J\nparasol/NgSV\nparasympathetic/~JNS\nparathion/Ng\nparathyroid/JNgS\nparatroop/NSV>Z\nparatrooper/Ng\nparatroops/NgV\nparatyphoid/JNg\nparboil/VdSG\nparcel/~NgSVGd\nparcelled/VtT!@_₹\nparcelling/V6N!@_₹\nparch/VGdSNL\nparchment/~NwSg\npardner/NS\npardon/~NgSVGd>ZB\npardonable/JU\npardonably/RyU\npardoner/Ng\npare/VS\nparegoric/NgJ\nparen/NgS           # informal: parenthesis\nparent/~NgSVGd\nparentage/~Ng\nparental/~JN\nparentheses/~N9\nparenthesis/N0g\nparenthesise/V!_₹\nparenthesize/VdSG\nparenthetic/J\nparenthetical/JYN\nparenthood/Nmg\nparenting/~NgV6\nparer/Ng\npares/VhS\nparesis/Ng\nparfait/NgS\npari passu/RJ\npariah/N0g\npariahs/N9\nparibus\nparietal/~JN\nparimutuel/NgS\nparing/VNg\nparish/~NgSV\nparishioner/NgS\nparity/~NSgE\npark/~NgSVdG\nparka/NSg\nparking/~V6Ng\nparkland/~N\nparkour/NV\nparkway/~NgS\nparky/JN\nparlance/~Ng\nparlay/VGdSNg\nparley/NgSVGd\nparliament/~NwSg\nparliamentarian/~NSgJ\nparliamentary/~JN\nparlor/~NgS\nparlour/NgS!@_₹\nparlous/J\nparmigiana/JN\nparochial/~JYN\nparochialism/Nmg\nparodist/NSg\nparody/~NwSgVGd\nparole/~NgSVGd\nparolee/NgS\nparotid/JN\nparoxysm/NSg\nparoxysmal/J\nparquet/NgSVdG\nparquetry/Ng\nparred/VtT\nparricidal/J\nparricide/NwgS\nparring/V6\nparrot/~NgSVGd\nparry/~VGdSNg\nparsable/J\nparse/~Vd>GSN^\nparsec/NgS\nparser/~NSg\nparsimonious/JY\nparsimony/Ng\nparsley/~NgV\nparsnip/NwgS\nparson/~NgS\nparsonage/~NgS\npart/~NSVdGJe\npart of speech/N0g\npart-time/J\npart's\npartake/~VG>SZ\npartaken/VT\npartaker/Ng\nparterre/NSg\nparthenogenesis/Nmg\npartial/~JYNgSV\npartiality/Nmg\nparticipant/~NSgJ\nparticipate/~VdSGJn\nparticipation/~Nmg\nparticipator/NgS\nparticipatory/~J\nparticipial/JNg\nparticiple/~NgS\nparticle/~NSg\nparticleboard/Nmg\nparticular/~JYNSg\nparticularisation/Ng!_₹\nparticularise/VdSG!_₹\nparticularity/NSg\nparticularization/Ng\nparticularize/VdSG\nparticulate/~JNSg\npartier/NgS\nparting/~NwgSV\npartisan/~NSgJ\npartisanship/~Nmg\npartition/~NwgSVGd\npartitive/JNgS\npartly/~R%\npartner/~NgSVdG\npartnership/~NwgS\npartook/Vt\npartridge/~NSg\nparts of speech/N9\nparturition/Nmg\npartway/\nparty/~NSgVGdJ\nparvenu/NgSJ\npascal/~NgS         # cf. Pascal, PASCAL\npaschal/~J\npasha/~NSg\npass/~VNg\npassably/Ry%\npassage/~NgSVJ\npassageway/~NgS\npassbook/NgS\npasse/~J>VdSGBXZnv\npassel/NgS\npassenger/~NSgV\npasser/~NgS\npasserby/N0g\npassersby/N9\npassim/~RJ\npassing/~V6JYNg\npassion/~NmgVE\npassionate/~JYNVE\npassionflower/NSg\npassionless/J\npassivation/Nmg\npassive/~JYpNgS\npassiveness/Nmg\npassivisation/N!_₹\npassivity/Nmg\npassivization/Nmg\npassivize/VdSG\npasskey/NgS\npassphrase/NgS\npassport/~NgSV\npassword/~NgSV\npasswordless/J\npast/~NgSJPVr\npasta/~NwSg\npaste/~NwSgVdG\npasteboard/NwgSJ\npastel/~NgS\npastern/NgS\npasteurisation/Nmg!_₹\npasteurise/VGd>SZ!_₹\npasteurised/VU!_₹\npasteuriser/NgS!_₹\npasteurization/Nmg\npasteurize/VGd>SZ\npasteurized/VU\npasteurizer/NgS\npastiche/~NgSV\npastie/NgS\npastille/NgS\npastime/~NgSV\npastiness/Nmg\npastor/~NgSV\npastoral/~JNgS\npastorate/NgS\npastrami/Nmg\npastry/~NwSg\npasturage/Nmg\npasture/~NwSgVdG\npastureland/Nmg\npasty/J^>pNSg\npat/~NSgVJ\npatch/~NgSVGdE\npatchily/Ry%\npatchiness/Nmg\npatchouli/N\npatchwork/~NwSgV\npatchy/J^>p\npate/~NgS\npatella/N0gS\npatellae/N9\npatent/~NgSVGdJY\npaterfamilias/NgS\npaternal/~JY\npaternalism/Nmg\npaternalist/JNgS\npaternalistic/J\npaternity/~Nmg\npaternoster/NgSV\npath/~N0gV\npathetic/~J\npathetically/Ry\npathfinder/~NSg\npathless/J\npathname/NgS\npathogen/~NSg\npathogenic/~J\npathological/~JY\npathologist/~NSg\npathology/~NgS\npathos/~Nmg\npaths/~N9V\npathway/~NgS\npatience/~Nm☁g\npatient/~J^NgSi\npatienter/Jc\npatiently/Ry\npatina/N0gSJ\npatinae/N9!@_₹\npatine/NV\npatio/~N0Sg\npatisserie/NS\npatois/N9g\npatresfamilias/N\npatriarch/~N0g\npatriarchal/~J\npatriarchate/~NgS\npatriarchs/~N9\npatriarchy/~NSg\npatrician/~NSgJ\npatricidal/J\npatricide/NwSg\npatrimonial/J\npatrimony/NSg\npatriot/~NSg\npatriotic/~JNU\npatriotically/Ry\npatriotism/~Nmg\npatrol/~NgSV\npatrolled/~JVtT\npatroller/NgS\npatrolling/~V6N\npatrolman/N0g\npatrolmen/N9\npatrolwoman/Ng\npatrolwomen/9\npatron/~NgSV\npatronage/~NgSV\npatroness/NgSV\npatronise/VGd>SZ!_₹\npatroniser/Ng!_₹\npatronising/JYV!_₹\npatronize/VGd>SZ\npatronizer/Ng\npatronizing/JYV\npatronymic/~JNSgQ\npatroon/NSg\npatsy/~NSg\npatted/VtT\npatter/NgSVdG\npattern/~NSgVdGJ\npatting/NV6\npatty/~NSgJ\npaucal/NJ\npaucity/Ng\npaunch/NgSV\npaunchy/J>^\npauper/NgSV\npauperise/VdSG!_₹\npauperism/Ng\npauperize/VdSG\npause/~VdGSNg\npave/~VGdSr\npaved/~JVU\npavement/~NgS\npavilion/~NSgV\npaving/~VSNgJ\npavlova/~NS\npaw/~NSgVGd\npawl/NgSV\npawn/~NgSVdG\npawnbroker/NgS\npawnbroking/Nmg\npawnshop/NgS\npawpaw/NwgS\npay/~VGSNJrBL\npay out/V/\npay's\npayback/NmSg\npaycheck/~NgS\npayday/NgS\npayed/V\npayee/NSg\npayer/NSg\npayload/~NSg\npaymaster/~NSg\npayment/~NwSgr\npayoff/~NgS\npayola/Nmg\npayout/~NgS\npayphone/NS\npayroll/~NSgVdG\npayslip/NSg\npaywall/NSgV\npayware/Nmg\npct/~N\npd/~\npea/~NSg\npeace/~Nw☁SgV\npeaceable/J\npeaceably/Ry\npeaceful/~JYpN\npeacefulness/Ng\npeacekeeper/NSg\npeacekeeping/~Ng\npeacemaker/~NgS\npeacemaking/~Ng\npeacetime/~Ng\npeach/~NwgSJV\npeachy/J^>\npeacock/~NgSV\npeafowl/NgS\npeahen/NgS\npeak/~NgSVdGJ\npeaky/J\npeal/~NgSVdGr\npeanut/~NgSV\npear/~NgS\npearl/~NSgVGd\npearlescent/J\npearly/NJ>^\npeasant/~NSgJ\npeasantry/~NwgS\npeashooter/NSg\npeat/~Ng\npeaty/J^>\npebble/~NgSVGd\npebbly/J\npecan/~NSg\npeccadillo/N0g\npeccadilloes/N9\npeccary/NSg\npeck/~Vd>GSNgZ\npeckish/J\npecs/N\npectic/J\npectin/Ng\npectoral/~JNgS\npectoralis/N\npeculate/VGdSn\npeculation/Ng\npeculator/NSg\npeculiar/~JYN\npeculiarity/NSg\npecuniary/J\npedagogic/J\npedagogical/~JY\npedagogue/~NSgV\npedagogy/~Ng\npedal/~NSgVGdJ\npedalled/VtT!@_₹\npedalling/V6N!@_₹\npedalo/NS\npedant/NgSJV\npedantic/JQ\npedantry/Ng\npeddle/VGd>SZ\npeddler/~Ng\npederast/NgS\npederasty/Ng\npedestal/~NgSV\npedestrian/~JNSg\npedestrianisation/N!_₹\npedestrianise/VGdS!_₹\npedestrianization/N\npedestrianize/VGdS\npediatric/~J<\npediatrician/NgS<\npediatrics/~Nmg<\npedicab/NSg\npedicure/NgSVGd\npedicurist/NgS\npedigree/~NgSJVd\npediment/~NgS\npedlar/NgS!_₹\npedometer/NgS\npedophile/NS<\npedophilia/Nm<\npeduncle/NgS\npee/~NmSgVd>Z\npeeing/V6\npeek/~VdGSNg\npeekaboo/NgJV\npeel/~Vd>GSNwgzZ\npeeled/JVtTU\npeeler/Ng\npeeling/NgV6\npeen/NgSV\npeep/~NgSVd>GZ\npeepbo/N\npeeper/Ng\npeephole/NgS\npeepshow/NgS\npeer/~VdGNg\npeer review/NgSdG\npeer-reviewed/J\npeerage/~NSg\npeeress/NgS\npeerless/~J\npeeve/NSgVdG\npeevish/JYp\npeevishness/Ng\npeewee/NgS\npeewit/NS\npeg/~NSgV\npegboard/NgSV\npegged/~VtTJ\npegging/NV6\npeignoir/NSg\npejoration/Ng\npejorative/~JYNSg\npeke/NgS\npekineses\npekingese/Sg\npekoe/Ng\npelagic/~JN\npelf/Ng\npelican/~NgS\npellagra/Ng\npellet/~NgSVGd\npellucid/JN\npelmet/NS\npeloton/NSg\npelt/~NgSVdG\npelvic/~JN\npelvis/~NgS\npemmican/Ng\npen/~NgV\npen test/NgS\npenal/~J\npenalisation/Ng!_₹\npenalise/VdSG!_₹\npenalization/Ng\npenalize/VdSG\npenalty/~NSg\npenance/~NgSV\npence/~N9\npenchant/~NSg\npencil/~NgSVGdz\npencilled/VtTJ!@_₹\npencilling/V6SN!@_₹\npend/VdGSNe\npendant/~NgS\npendent/~JNgS\npendulous/J\npendulum/~NgS\npenetrability/Nmg\npenetrable/J\npenetrant/NwSg\npenetrate/~VdSGnvX\npenetrating/~JYV\npenetration/~Nwg\npenfriend/NgS\npenguin/~NgS\npenicillin/~Nmg\npenile/J\npeninsula/~NSg\npeninsular/~JN\npenis/~NgS\npenitence/Nmg\npenitent/JYNSg\npenitential/JN\npenitentiary/~NSgJ\npenknife/N0gV\npenknives/N9\npenlight/NSg\npenman/NgS\npenmanship/Nmg\npenmen/9\npennant/~NgS\npenned/~VtTJ\npenniless/J\npenning/~V6N\npennon/NgS\npenny/~NSgV\npennyweight/NgS\npennyworth/N\npenologist/NgS\npenology/Ng\npension/~NgSVGd>BZ\npensioner/Ng\npensive/JYp\npensiveness/Nmg\npent/NJV\npentacle/NgS\npentagon/~NgS\npentagonal/~JN\npentagram/~NSg\npentameter/NSg\npentathlete/NgS\npentathlon/~NgS\npenthouse/~NSgV\npenuche/Ng\npenultimate/~JNSg\npenumbra/NgS\npenumbrae/9\npenurious/JYp\npenuriousness/Ng\npenury/Ng\npeon/NgS\npeonage/Ng\npeony/NSg\npeople/~N9gSVGd\npep/~VSNg\npepped/VtT\npepper/~NwgSVGd\npeppercorn/NSg\npeppermint/~NwSg\npepperoni/NwgS\npeppery/J\npeppiness/Ng\npepping/V6\npeppy/J^>pN\npepsin/Ng\npeptic/JNgS\npeptide/~NS\n# per               # prefixes that are not also words in their own right don't belong in the dictionary\nper annum\nper capita/JR\nper diem/JNgS\nper se/JR\nperadventure/Ng\nperambulate/VGdSXn\nperambulation/Nwg\nperambulator/NgS\npercale/NgS\nperceive/~VGdSB\nperceived/~JVtTU\npercent/~NgS\npercentage/~NwSg\npercentile/NSg\nperceptible/JN\nperceptibly/Ry\nperception/~NwSg\nperceptional/J\nperceptive/JYp\nperceptiveness/Ng\nperceptron/Sg\nperceptual/~JY\nperch/~NgSVGd\nperchance/\npercipience/Ng\npercipient/JN\npercolate/VGdSNn\npercolation/Ng\npercolator/NSg\npercussion/~Ngr\npercussionist/~NgS\npercussive/JN\nperdition/Nmg\nperdurable/J\nperegrinate/VdSGJXn\nperegrination/Ng\nperegrine/~JNgS\nperemptorily/Ry\nperemptory/JN\nperennial/~JYNSg\nperestroika/~Nmg\nperfect/~J^Y>pNgSVGd\nperfecta/NgS\nperfectibility/Nmg\nperfectible/J\nperfection/~NwSgV\nperfectionism/Nmg\nperfectionist/NSgJ\nperfective/NSgJ\nperfectness/Nmg\nperfidious/JY\nperfidy/NSg\nperforate/VGdSJnX\nperforation/NwSg\nperforce/V\nperform/~VSd>GZ\nperformance/~NwSg\nperformant/J\nperformative/JYN\nperformed/~VtTU\nperformer/~NgS\nperfume/~NwSgVd>GZ\nperfumer/NgS\nperfumery/NSg\nperfunctorily/Ry\nperfunctory/J\nperfusion/~N\npergola/~NSg\nperhaps/~RN         # adverb of probability/certainty/affirmation; modal adverb\npericardia/N9\npericardial/J\npericarditis/N\npericardium/N0g\nperigee/NSg\nperihelia/N9\nperihelion/N0g\nperil/~NwSgVGd\nperilled/VtT!@_₹\nperilling/V6!@_₹\nperilous/~JY\nperimeter/~NSg\nperinatal/J\nperinea/N9\nperineum/N0g\nperiod/~NgSJV\nperiodic/~J\nperiodical/~NSgJY\nperiodicity/Ng\nperiodontal/~J\nperiodontics/Nmg\nperiodontist/NSg\nperipatetic/JNgS\nperipheral/~JYNgS\nperiphery/~NSg\nperiphrases/VN9\nperiphrasis/N0g\nperiphrastic/J\nperiscope/NSgV\nperish/~Vd>SGBZ\nperishable/JNgS\nperistalses/N9\nperistalsis/N0g\nperistaltic/J\nperistyle/NSg\nperitoneal/J\nperitoneum/NgS\nperitonitis/Ng\nperiwig/NSgV\nperiwinkle/NSgJ\nperjure/Vd>GSNZ\nperjurer/NgW\nperjury/~NwSg\nperk/NgSVdGJ\nperkily/Ry\nperkiness/Nmg\nperky/~J^>pN\nperm/~NgSVdG\npermafrost/~Ng\npermanence/Nmg\npermanency/Nmg\npermanent/~JYNSg\npermeability/~Ng\npermeable/~J\npermeate/VGdSNn\npermeation/Ng\npermissible/~J\npermissibly/Ry\npermission/~NgSV\npermissive/~JYp\npermissiveness/Nmg\npermit/~VSNg\npermitted/~VtTJ\npermitting/~V6N\npermittivity/N\npermutation/~NSg\npermute/VdSG\npernicious/JYp\nperniciousness/Nmg\nperoration/NgS\nperoxide/~NgSVGd\nperpendicular/~JYNSg\nperpendicularity/Ng\nperpetrate/VdSGn\nperpetration/Ng\nperpetrator/~NgS\nperpetual/~JYNSg\nperpetuate/~VdSGJn\nperpetuation/Ng\nperpetuity/~Ng\nperplex/VGdSJN\nperplexed/~JYV\nperplexing/JYV\nperplexity/NwSg\nperquisite/NSg\npersecute/VGdSnX\npersecution/~Nmg\npersecutor/NSg\nperseverance/~Nmg\npersevere/~VdSG\npersiflage/Ng\npersimmon/NwSg\npersist/~VSGd\npersistence/~Nmg\npersistency/Nmg     # uncommon variant\npersistent/~JY\npersnickety/J\nperson/~NgSVU\npersona/~N0Sg\npersonable/J\npersonae/N9\npersonage/NgS\npersonal/~JYNgS\npersonalisation/NwgS!_₹\npersonalise/VdSGe!_₹\npersonality/~NwSg\npersonalization/NwgS\npersonalize/VdSGe\npersonalty/Nmg\npersonification/~Nmg\npersonify/VGdSnX\npersonnel/~Nmg\nperspective/~NgSJ\nperspex/Nmg\nperspicacious/JY\nperspicacity/Nmg\nperspicuity/Ng\nperspicuous/J\nperspiration/Nmg\nperspire/VGdS\npersuade/~VGd>SBZ\npersuaded/~VU\npersuader/Ng\npersuasion/~NSg\npersuasive/~JYpN\npersuasiveness/Ng\npert/~JY^>pVN\npertain/~VGSd\npertinacious/JY\npertinacity/Ng\npertinence/Ng\npertinent/~NJY\npertness/Ng\nperturb/VdGS\nperturbation/~NSg\nperturbed/~VJU\npertussis/Ng\nperuke/NgS\nperusal/NgS\nperuse/VGdS>N\nperv/~NSV\npervade/VdSG\npervasive/~JYp\npervasiveness/Ng\nperverse/~JYpNVXn\nperverseness/Ng\nperversion/Ng\nperversity/Ng\npervert/NSgVGd\npervs/N9Vh!@_₹\npeseta/NgS\npeskily/Ry\npeskiness/Ng\npesky/J^>p\npeso/~NgS\npessary/NS\npessimal/J\npessimism/Nmg\npessimist/NSg\npessimistic/~J\npessimistically/Ry\npest/~NgS>Z\npester/VGdN\npesticide/~NwgS\npestiferous/J\npestilence/~NSg\npestilent/J\npestilential/J\npestle/NgSVGd\npesto/Ng\npet/~NSgV>JZ\npetabyte/NgS\npetajoule/NS\npetal/NSgVd\npetalled/J!@_₹\npetard/NgSV\npetawatt/NS\npetcock/NSg\npeter/~NgVGd\npetiole/NSg\npetite/~JNgS\npetition/~NgSVGd>Z\npetitionary/J\npetitioner/NgS\npetrel/~NgS\npetrifaction/Nmg\npetrify/VdSG\npetrochemical/~NSgJ\npetrodollar/NgS\npetrol/~NwgV\npetrolatum/Ng\npetroleum/~Nwg\npetrologist/NSg\npetrology/Nmg\npetted/VtT\npetticoat/~NgSVJ\npettifog/VS\npettifogged/VtT\npettifogger/NSg\npettifoggery/Ng\npettifogging/V6N\npettily/Ry\npettiness/Nmg\npetting/V6Nmg\npettish/JY\npetty/~J^>pN\npetty bourgeois/Ng\npetty bourgeoisie/Ng\npetulance/Nmg\npetulant/JY\npetunia/~NgSJ\npew/~NSgV\npewee/NSg\npewit/NSg\npewter/NgSJV\npeyote/Ng\npf/~N\npfennig/NgS\npg/~\nphaeton/NgS\nphage/~NS\nphagocyte/NSgV\nphalanger/NSg\nphalanges/N\nphalanx/~NgS\nphalli/N\nphallic/J\nphallocentric/J\nphallocentrism/N\nphallus/Ng\nphantasm/~NgS\nphantasmagoria/NgS\nphantasmagorical/J\nphantasmal/J\nphantom/~NSgJ\npharaoh/~Ng\npharaohs/~N\npharisaic/J\npharisee/Sg\npharmaceutic/JSg\npharmaceutical/~JNSg\npharmaceutics/Ng\npharmacist/~NgS\npharmacologic/JN\npharmacological/~J\npharmacologist/NSg\npharmacology/~Ng\npharmacopoeia/NgS\npharmacotherapy/N\npharmacy/~NSg\npharyngeal/~JN\npharynges/N9\npharyngitis/Ng\npharynx/~N0g\nphase/~NOSgVdG\nphaseout/NSg\nphaser/NgS\nphat/J\npheasant/~NgS\nphenacetin/~Ng\nphenethylamine/Ng\nphenobarbital/Ng\nphenol/~Ng\nphenom/NgS\nphenomena/~N\nphenomenal/~JY\nphenomenological/~JY\nphenomenology/~N\nphenomenon/~NgS\nphenotype/~NV\nphenytoin/N\npheromone/~NgS\nphew/\nphi/~NSg\nphial/NSgV\nphilander/NSVGd>Z\nphilanderer/Ng\nphilandering/VNg\nphilanthropic/~J\nphilanthropically/Ry\nphilanthropist/~NgS\nphilanthropy/~NSg\nphilatelic/~J\nphilatelist/NgS\nphilately/Nmg\nphilharmonic/~JNSg\nphilippic/~NgS\nphilistine/~NgSJ\nphilistinism/Nmg\nphilodendron/NSg\nphilological/~J\nphilologist/~NgS\nphilology/~Nmg\nphilosopher/~NgS\nphilosophic/J\nphilosophical/~JY\nphilosophise/Vd>SGZ!_₹\nphilosophiser/NgS!_₹\nphilosophize/Vd>SGZ\nphilosophizer/NgS\nphilosophy/~NwSgV\nphilter/NgSV<\nphiltre/NgSV!@_₹\nphish/~VGd>NZ\nphisher/Ng\nphlebitis/Nmg\nphlegm/Nmg\nphlegmatic/JNQ\nphloem/Nmg\nphlogiston/Nmg\nphlox/Ng\nphobia/NgS\nphobic/JNgS\nphoebe/~NgS\nphoenix/~NgSVdG\nphone/~NSgVdG\nphonecard/NgS\nphoneme/~NgS\nphonemic/~JQ\nphonetic/~JNSQ\nphonetician/NSg\nphonetics/~Nmg\nphoney/JNgSVGd!_₹\nphoneyed/V\nphoneying/V\nphonic/JS\nphonically/Ry\nphonics/Nmg\nphonied/V!_₹\nphonier/Jc!_₹\nphoniest/Ju!_₹\nphoniness/Nmg\nphonograph/~N0gV\nphonographic/J\nphonographs/N9\nphonological/~JY\nphonologist/NgS\nphonology/~Nmg\nphonon/~N\nphonotactic/JQ\nphonotactics/Nm\nphony/J^>pNSgVGd\nphonying/V!_₹\nphooey/N\nphosphate/~NwgSV\nphosphene/NSg\nphosphodiesterase/Nmg\nphosphor/~NgS\nphosphorescence/Nmg\nphosphorescent/JYN\nphosphoric/J\nphosphorous/JN\nphosphorus/~Nmg\nphosphorylation/~Nmg\nphoto/~NSgVGd\nphotobomb/NgSVdG\nphotocell/NgS\nphotocopier/NgS\nphotocopy/NSgVd>GZ\nphotoelectric/~JQ\nphotoengrave/Vd>SGzZ\nphotoengraver/NgS\nphotoengraving/NgV\nphotofinishing/Nmg\nphotogenic/JQ\nphotograph/~NgVd>GZ\nphotographer/~NgS\nphotographic/~JQ\nphotographs/~NVr\nphotography/~Nmg\nphotojournalism/Ng\nphotojournalist/~NSg\nphotometer/NgSV\nphoton/~NgS\nphotopolymer/NSg\nphotosensitive/J\nphotoshop/VS\nphotoshopped/VtT\nphotoshopping/NmV6\nphotostat/NSgV\nphotostatic/J\nphotostatted/VtT\nphotostatting/V6\nphotosynthesis/~Nmg\nphotosynthesise/V!_₹\nphotosynthesize/VGdS\nphotosynthetic/J\nphototropic/J\nphototropism/N\nphototypesetter/N\nphototypesetting/N\nphotovoltaic/J\nphrasal/JN\nphrase/~NSVGdr\nphrase's\nphrasebook/NS\nphraseology/Ng\nphrasing/~VSNmg\nphreaking/NV\nphrenologist/NSg\nphrenology/Nmg\nphyla/N9\nphylactery/NSg\nphylogeny/~Ng\nphylum/~N0g\nphys/~JNm\nphysic/JNSgV\nphysical/~JYNgS\nphysicality/Nmg\nphysician/~NSg\nphysicist/~NSg\nphysicked/V\nphysicking/VN\nphysics/~NgV\nphysio/NwSg\nphysiognomy/NwSg\nphysiography/Nmg\nphysiologic/~J\nphysiological/~JY\nphysiologist/~NgS\nphysiology/~Ng\nphysiotherapist/NgS\nphysiotherapy/Ng\nphysique/~NgS\nphytokarst/Ng\nphytoplankton/N\npi/~NSgVd>GJHZ\npianissimo/NSg\npianist/~NgS\npiano/~NSgVJ\npianoforte/NSg\npianola/NS\npiaster/NgS\npiastre/NgS!@_₹\npiazza/~NgS\npibroch/Ng\npibrochs/N\npic/~NSg\npica/~Ng\npicador/NgS\npicante\npicaresque/JN\npicayune/NJ\npiccalilli/Ng\npiccolo/~NgSJ\npiccy/NgS_!\npick/~NgSVd>GzZ\npick-me-up/NgS\npick up/V/\npickax/NgSVGd\npicker/Ng\npickerel/NgS\npicket/~NgSVGd>Z\npickings/Ng\npickle/~NgSVGd\npickpocket/NSgV\npickup/~NgS         # removed `4` verb which applies to `pick up`\npicky/J^>pN\npicnic/~NgSV\npicnicked/VtT\npicnicker/NSg\npicnicking/V6N\npicot/NSgV\npictogram/NS\npictograph/N0g\npictographs/N9\npictorial/~JYNgS\npicture/~NgSVGd\npicturesque/~JYp\npicturesqueness/Nmg\npiddle/NgSVGd\npiddly/J\npidgin/~NgS\npie/~NwSgV\npiebald/JNgS\npiece/~NSgVdG\npiecemeal/JVN\npiecework/Ng>Z\npieceworker/Ng\npiecrust/NSg\npieing/VN\npier/~Ng\npierce/~VGdSNz\npiercing/~VNgJY\npiety/~Ng\npiezo/J\npiezoelectric/JN\npiffle/NgVG\npig/~NSgVL\npigeon/~NgSV\npigeonhole/NSgVdG\npigged/VtT\npiggery/NS\npigging/JV6N\npiggish/JYp\npiggishness/Ng\npiggy/~NSgJ^>\npiggyback/JVdGSNg\npigheaded/JYp\npigheadedness/Nmg\npiglet/NgS\npigment/~NgSVd\npigmentation/~NwgS\npigpen/NgS\npigskin/NgS\npigsty/NSg\npigswill/N\npigtail/NgS\npike/~NgSVGd>Z\npiker/Ng\npikestaff/NSg\npilaf/NSg\npilaster/NgS\npilchard/NgS\npile/~NgSVGdz\npileup/NgS\npilfer/VGd>SZ\npilferage/Nmg\npilferer/NgS\npilgrim/~NgSV\npilgrimage/~NwgSV\npiling/~NgV\npill/~NgSVdG\npillage/VGd>SNwgZ\npillager/Ng\npillar/~NgSVd\npillbox/NgS\npillion/NgSV\npillock/NS\npillory/NSgVGd\npillow/~NgSVGd\npillowcase/NgS\npillowslip/NgS\npilot/~NSgJVdG\npilothouse/NSg\npimento/NwgS\npimiento/NgS\npimp/~NgSVGdJY\npimpernel/NgS\npimple/NSgVd\npimply/J>^\npin/~NSgV\npinafore/NgSV\npiñata/NgSV\npinata/NgSV\npinball/~NgV\npincer/NgSV\npinch/~VGdSNg\npincushion/NgSV\npine/~NSVGdr\npine's\npineapple/~NgS\npinecone/NgS\npinewood/~NS\npiney/~J\npinfeather/NSg\nping/~NgVGd\npinhead/NSg\npinhole/NSgV\npinier/Jc\npiniest/Ju\npinion/NSgVdG\npink/~NwgSJ^>pVGd\npinkeye/Ng\npinkie/~NSg\npinkish/~J\npinkness/Nmg\npinko/NgS\npinky/~NgS\npinnacle/~NSgV\npinnate/J\npinned/~VtTJU\npinning/~V6NU\npinny/NS\npinochle/Ng\npinon/NgS\npinout/NgS\npinpoint/NSgJVGd\npinprick/NgSV\npinsetter/NSg\npinstripe/NSgd\npint/NgS\npinto/~NgSJ\npinup/NgS\npinwheel/~NSgVGd\npinyin/~ONg\npinyon/NSg\npioneer/~NSgVGd\npious/~JYp\npiousness/Ng\npip/~NSgVGd>Z\npipe/~NgSV\npipeline/~NSgVGd\npiper/~Ng\npipette/NSgV\npipework/N\npiping/~VNgJ\npipit/~NgS\npipped/VtT\npippin/~NSg\npipping/V6\npipsqueak/NSg\npiquancy/Ng\npiquant/JY\npique/VGdSNg\npiracy/~Ng\npiranha/NSg\npirate/~NSgVdGJ\npiratical/JY\npirogi/Ng\npiroshki/Ng\npirouette/NSgVdG\npiscatorial/J\npismire/NSg\npiss/NmgSVGd>Zx\npissoir/NS\npissy/Jx\npistachio/NSg\npiste/NS\npistil/NSg\npistillate/J\npistol/~NSgV\npiston/~NSgV\npit/~NSgV\npita/NgS\npitapat/VSNg\npitch/~NgSVd>GJZ\npitchblende/Ng\npitcher/~Ng\npitchfork/~NgSVdG\npitchman/Ng\npitchmen/9\npiteous/JYp\npiteousness/Nmg\npitfall/NSg\npith/NmgVJ\npithead/NS\npithily/Ry\npithiness/Nmg\npithy/J>^p\npitiable/J\npitiably/Ry\npitiful/JY\npitiless/JYp\npitilessness/Ng\npiton/NgSV\npitta/NS\npittance/NgS\npitted/~JVtT\npitting/~NV6\npituitary/~JNSg\npity/~NwSgVGd\npitying/VNY\npivot/~NgSVdG\npivotal/~JY\npix/~NgV\npixel/~NgSV\npixelate/VdSGn\npixie/~NgS\npizza/~NwgS\npizzazz/Ng\npizzeria/NSg\npizzicati/N\npizzicato/Ng\npj's/N\npk/~N\npkg/N\npkt/N\npkwy/N\npl/~JN\nplacard/NSgVdG\nplacate/VdSGn\nplacation/Ng\nplacatory/J\nplace/~NwSVdGEL\nplace's\nplacebo/~NSg\nplaced/~VtTU\nplaceholder/NgS\nplacekick/NgSVd>GZ\nplacekicker/Ng\nplacement/~NwSgEr\nplacenta/~NSg\nplacental/~JNS\nplacer/~NSgJ\nplacid/~JY\nplacidity/Nmg\nplacings/N\nplacket/NSg\nplagiarise/Vd>SGZ!_₹\nplagiariser/Ng!_₹\nplagiarism/~NwSg\nplagiarist/NSg\nplagiaristic/J\nplagiarize/Vd>SGZ\nplagiarizer/Ng\nplagiary/NgJ\nplague/~NSgVdG\nplaice/N\nplaid/~NgSJV\nplain/~JY^>pNgSV\nplainchant/N\nplainclothes/JN\nplainclothesman/N0g\nplainclothesmen/N9\nplainness/Ng\nplainsman/Ng\nplainsmen/9\nplainsong/Ng\nplainspoken/J\nplaint/NSgv\nplaintext/~NgS\nplaintiff/~NSg\nplaintive/JY\nplait/NgSVdG\nplan/~NgSV>Z\nplan B/g\nplanar/~J\nplane/~JNSVGde\nplane's\nplaneload/NgS\nplaner/JcNg\nplanet/~NSg\nplanetarium/~NSg\nplanetary/~JN\nplangency/Ng\nplangent/J\nplank/~NgSVdG\nplanking/NgV\nplankton/~Ng\nplanned/~VtTJU\nplanner/~NSg\nplanning/~V6SN\nplant/~NgSVd>GZz\nplantain/NwSg\nplantar/J\nplantation/~NgS\nplanter/~Ng\nplanthopper/NgS     # a couple of dictionary prefer 'plant hopper'\nplanting/~NgV\nplantlike/J\nplaque/~NwSg\nplash/NgSVdG\nplasma/~NwSgV\nplasmon/N\nplaster/~NwSgVGd>Z\nplasterboard/NmgV\nplasterer/Ng\nplastic/~NwSgJ\nplasticise/VdSG!_₹\nplasticity/~Ng\nplasticize/VdSG\nplasticked/J\nplasticky/J\nplastique/N\nplat/~NgSVGdJXn\nplate/~NgSV\nplateau/~NSgVdG\nplateful/NSg\nplatelet/~NSg\nplaten/Ng\nplatform/~NSgVGd\nplatformer/NgS\nplating/~VNg\nplatinum/~NmgJV\nplatitude/NSg\nplatitudinous/J\nplatonic/~J\nplatoon/~NSgVGd\nplatted/~VtT\nplatter/NSg\nplatting/V6N\nplaty/JNg\nplatypus/NgS\nplatys/N\nplaudit/NSg\nplausibility/Nmg\nplausible/~J\nplausibly/Ry\nplay/~VGdSNwgrE\nplay-by-play/JNgS\nplayability/Ng\nplayable/~JNEU\nplayact/VSGd\nplayacting/NgV\nplayback/~NgS\nplaybill/~NgS\nplaybook/NgS\nplayboy/~NSg\nplayer/~NSg\nplayfellow/NSg\nplayful/~JYp\nplayfulness/Ng\nplaygirl/NgS\nplaygoer/NgS\nplayground/~NSg\nplaygroup/NS\nplayhouse/~NgS\nplaylist/~NgSV\nplaymate/~NgS\nplayoff/~NSg\nplaypen/NSg\nplayroom/NSg\nplayschool/NS\nplaything/NSgJ\nplaytime/Ng\nplaywright/~NSg\nplaza/~NgS\nplea/~NgSV\nplead/~Vd>GSZz\npleader/Ng\npleading/~NgV6JY\npleasance/Ng\npleasant/~J^YpNU\npleasanter/Jc\npleasantness/NgU\npleasantry/NSg\nplease/~VdSGE\npleasing/~JYV6SN\npleasurably/Ry\npleasure/~NgSVGdB\npleasureful/J\npleat/NgSVdG\npleb/NSJ\nplebby/J\nplebe/NgS\nplebeian/NgSJ\nplebiscite/~NgS\nplectra/N\nplectrum/NgS\npledge/~VdGSNg\nplenary/~JNSg\nplenipotentiary/~NSgJ\nplenitude/NSg\nplenteous/J\nplentiful/~JY\nplenty/~NgIJ\nplenum/NS\npleonasm/NgS\nplethora/~Ng\npleura/Ng\npleurae/9\npleurisy/Ng\nplexus/~NgS\npliability/Ng\npliable/J\npliancy/Ng\npliant/JY\npliers/Ng\nplight/~NSgVdG\nplimsoll/NS\nplinth/Ng\nplinths/N\nplod/NSVb\nplodded/VtT\nplodder/NgS\nplodding/V6SJN\nplonk/NSVd>GZ\nplop/NgSV\nplopped/VtT\nplopping/V6N\nplosive/NSJ\nplot/~NgSV\nplotline/NSg\nplotted/~VtT\nplotter/NSgV\nplotting/~V6N\nplough/NgVdG!_₹\nploughman/Ng!@_₹\nploughmen/N!@_₹\nploughs/NV!_₹\nploughshare/NgS!@_₹\nplover/~NSgV\nplow/~NgSVGd\nplowman/Ng\nplowmen/9\nplowshare/NgS\nploy/NSV\nploy's\npluck/~VdGSNg\npluckily/Ry\npluckiness/Ng\nplucky/J>^p\nplug/~NSVU\nplug in/V/\nplug's\npluggable/J\nplugged/~VtTU\nplugging/~V6NU\nplughole/NS\nplugin/NSg\nplum/~NwgSJVGd\nplumage/~Nmg\nplumb/~NgSJ>VdGZz\nplumbed/VU\nplumber/Ng\nplumbing/~Nmg\nplume/~NgSV\nplummet/NSgVGd\nplummy/J\nplump/JY^>pVdGSNg\nplumpness/Nmg\nplumy/J>^\nplunder/~VGd>SNgZ\nplunderer/Ng\nplunge/~Vd>GSNgZ\nplunger/Ng\nplunk/VdGSNg\npluperfect/JNSg\nplural/~JNSg\npluralisation/Ng!_₹\npluralise/VGdS!_₹\npluralism/~Ng\npluralist/NgSJ\npluralistic/J\nplurality/~NwSg\npluralization/Nmg\npluralize/VGdS\nplus/~PCNgSJV\nplush/~J>Y^pNg\nplushness/Ng\nplushy/J>^\nplutocracy/NSg\nplutocrat/NSg\nplutocratic/J\nplutonium/~Nmg\npluvial/JN\nply/~NSgVGdr\nplywood/~NmgV\npm/~\npneumatic/~JNQ\npneumococcal/J\npneumococci/N9\npneumococcus/N0\npneumonia/~Ng\npoach/Vd>GSNZ\npoacher/~Ng\npoaching/~VNg\npock/NgSVGd\npocket/~NSgVdGJ\npocketbook/NSg\npocketful/NSg\npocketknife/N0g\npocketknives/N9\npockmark/NgSdG\npod/~NSgV\npodcast/~NSgVG\npodcaster/NSg\npodded/JVtT\npodding/V6\npodiatrist/NSg\npodiatry/Ng\npodium/~NSgV\npoem/~NgS\npoesy/NgV\npoet/~NgS\npoetaster/NgS\npoetess/NgS\npoetic/~JS\npoetical/~JY\npoetry/~Nwg\npogrom/NSgV\npoi/~Ng\npoignance/Nmg\npoignancy/Nmg\npoignant/~JY\npoinciana/~NSg\npoinsettia/NSg\npoint/~NgSVd>GZ\npointblank/\npointed/~VtTJY\npointer/~Ng\npointillism/Ng\npointillist/JNSg\npointillistic/JQ\npointless/~JYp\npointlessness/Ng\npointy/J^>N\npoise/NgSVGd\npoison/~NwSgVGd>zZ\npoisoner/Ng\npoisoning/~NgV6\npoisonous/~JY\npoke/~VGd>SNgZ\npoker/~NgV\npokey/~JNgS\npoky/NJ^>\npol/~NSgGd\npolar/~JN\npolarisation/NwSge!_₹\npolarise/VdSGe!_₹\npolarity/~NwSg\npolarization/~NwSge\npolarize/VdSGe\npole/~NgSV\npolearm/NSg\npoleaxe/NSVGd\npolecat/NgS\npolemic/~NgSJ\npolemical/~JYN\npolemicist/NSg\npolemics/Nmg\npolestar/NSg\npolice/~NmSgVdG\npoliceless/J\npoliceman/~N0g\npolicemen/~N9\npolicewoman/Ng\npolicewomen/9\npolicy/~NwSgV\npolicyholder/NgS\npolicymaker/NS\npolicymaking/Nmg\npolio/~NgS\npoliomyelitis/Ng\npolish/~NgSVGd>Z\npolished/~JVU\npolisher/Ng\npolitburo/~NgS\npolite/~JY^>pV\npoliteness/Nmg\npolitesse/Ng\npolitic/~JNSV\npolitical/~JYN\npolitician/~NSg\npoliticisation/Ng!_₹\npoliticise/VdSGe!_₹\npoliticization/Nger\npoliticize/VdSGe\npoliticking/NgV6\npolitico/~NSg\npolitics/~NgV\npolity/~NSg\npolka/~NgSVdG\npoll/~NgSVGdJn\npollack/~NgSV\npollard/~NSV\npollen/~NgV\npollinate/VGdSJn\npollination/~Ng\npollinator/~NSg\npolling/~V6Ng\npolliwog/NSg\npollster/NSg\npollutant/NgS\npollute/VGd>SJZn\npolluted/~JVtTU\npolluter/NgS\npollution/~Nmg\npolo/~Nmg\npolonaise/NSgV\npolonium/Nmg\npoltergeist/~NgS\npoltroon/NSgJ\npoly/~NJV(\npolyacrylamide/N\npolyamory/NS\npolyandrous/J\npolyandry/Nmg\npolycarbonate/NwgS\npolyclinic/NSg\npolycystic/J\npolyester/~NwgSJ\npolyethylene/~Ng\npolyfill/VdSGNwg\npolygamist/NgS\npolygamous/~J\npolygamy/~Nmg\npolyglot/JNSg\npolygon/~NSg\npolygonal/~J\npolygraph/N0gVGd\npolygraphs/N9V\npolyhedral/~J\npolyhedron/~NSg\npolymath/~N0g\npolymaths/N9\npolymer/~NwSg\npolymerase/~NwSg\npolymeric/~J\npolymerisation/Nmg!_₹\npolymerise/VGdS!_₹\npolymerization/~Nmg\npolymerize/VGdS\npolymorphic/J\npolymorphism/Nmg\npolymorphous/J\npolynomial/~NgSJ\npolyp/NgS\npolyphonic/~J\npolyphony/Nmg\npolypropylene/~Nmg\npolys/N\npolysemous/J\npolystyrene/~Nmg\npolysyllabic/JN\npolysyllable/NgS\npolytechnic/~JNgS\npolytheism/Nmg\npolytheist/NSg\npolytheistic/J\npolythene/Nmg\npolyunsaturate/NSJd\npolyurethane/NgSV\npolyvinyl/~JNm\npom/~NS\npomade/NSgVdG\npomander/NSg\npomegranate/~NwgSJ\npommel/~NSgVGd\npommelled/VtTJ!@_₹\npommelling/V6!@_₹\npommy/NSJ\npomp/NgV\npompadour/NSgVd\npompano/NgS\npompom/NSg\npomposity/Ng\npompous/~JYp\npompousness/Ng\nponce/~NSVGd\nponcho/NSg\nponcy/J\npond/~NgSV\nponder/VGd>SNZ\nponderer/Ng\nponderous/JYp\nponderousness/Ng\npone/NgS\npong/~NSVGd\npongee/Ng\nponiard/NgSV\npontiff/~NSg\npontifical/~JYN\npontificate/~NSgVdG\npontoon/~NSg\npony/~NSgVGdJ\nponytail/NgSV\npoo/NwSVGd\npooch/NgSVdG\npoodle/NSg\npoof/VSNg\npoofter/NS\npooh/~NgVGd\npoohs/V\npool/~NgSVGd\npoolroom/NgS\npoolside/JNS\npoop/VGdSNwg\npoor/~J^Y>pNV\npoorboy/Ng\npoorhouse/NSg\npoorness/Ng\npop/~NwSgVJ\npopcorn/~NwgV\npope/~NgSV\npopgun/NSg\npopinjay/NgS\npoplar/~NSg\npoplin/Ng\npopover/NSg\npoppa/NgS\npoppadom/NS\npopped/~VtT\npopper/~NSg\npoppet/NS\npopping/~NV6\npoppy/~NSgJ\npoppycock/Ng\npopulace/~NgS\npopular/~JYN\npopularisation/Ng!_₹\npopularise/VdSG!_₹\npopularity/~NmgU\npopularization/~Ng\npopularize/~VdSG\npopulate/~VGdSJre\npopulated/~JVU\npopulation/~Nge\npopulations/~N\npopulism/~NgS\npopulist/~NgSJ\npopulous/~Jp\npopulousness/Ng\npopup/NgS\nporcelain/~NwSgV\nporch/~NgS\nporcine/~J\nporcupine/~NSg\npore/~NgSVGd\nporgy/NSg\npork/~NwgV>Z\nporker/Ng\nporky/~J>^NSg\nporn/~Ng\nporno/~JNg\npornographer/NgS\npornographic/~JQ\npornography/~Nmg\nporosity/~Ng\nporous/~Jp\nporousness/Ng\nporphyritic/J\nporphyry/~Ng\nporpoise/NgSVGd\nporridge/~Nmg\nporringer/NSg\nport/~NSJVGdeE\nport's/r\nportability/~Ng\nportable/~JNgS\nportage/~NSgVdG\nportal/~NSgJV\nportcullis/NgSV\nportend/VSGd\nportent/NSg\nportentous/JYp\nporter/~NSgVr\nporterhouse/NSg\nportfolio/~NgS\nporthole/NgS\nportico/~N0g\nporticoes/N9\nportiere/NgS\nportion/~NSgVGdK\nportliness/Ng\nportly/J>^p\nportmanteau/~NgSJV\nportrait/~NgSVJ\nportraitist/NSg\nportraiture/~Ng\nportray/~VSGd\nportrayal/~NgS\nportulaca/Ng\npose/~NSVGderKE\npose's/r\nposer/NSgEK\nposeur/NSg\nposh/~J^>NV\nposit/~NSVdGv\nposition/~NgSVeKE\npositional/~JNKE\npositioned/~JVtTK\npositioning/~V6NrK\npositive/~JYpNgS\npositiveness/Nmg\npositivism/~Nmg\npositivist/NSJ\npositivity/Nmg\npositron/~NgS\nposs/JV\nposse/~NgS\npossess/~VGSdrEv\npossession/~NwSgVr\npossessive/~JYpNSg\npossessiveness/Nmg\npossessor/NSg\npossibility/~NSg\npossible/~JNSg\npossibly/~R         # adverb of probability/certainty/affirmation; modal adverb\npossum/~NSgV\npost/~NwgSVGd>P(Zz\npost-Covid/J\npost-Soviet/J\npost-truth/NmgV\npostage/~Nmg\npostal/~J\npostbag/NgS\npostbox/NgS\npostcard/~NSgV\npostcode/~NSV\npostcolonial/~JN\npostconsonantal/J\npostdate/VdGSJN\npostdoc/NgS\npostdoctoral/~JN\nposter/~NgVdG\nposterior/~JNSg\nposterity/~Nmg\npostgrad/NgSJ\npostgraduate/~NSgJ\nposthaste/N\nposthumous/~JY\nposthypnotic/J\npostie/NS\npostilion/NSg\npostindustrial/J\nposting/~VNg\npostlude/NSgV\npostman/~Ng\npostmark/NSgVdG\npostmaster/~NgS\npostmen/9\npostmenopausal/J\npostmeridian/J\npostmistress/NgS\npostmodern/~JN\npostmodernism/~Nmg\npostmodernist/~JNgS\npostmortem/NSgJ\npostnasal/JN\npostnatal/J\npostoperative/JN\npostpaid/J\npostpartum/JN\npostpone/~VdSGL\npostponement/NwSg\npostposition/NSg\npostprandial/J\npostprocess/VGdS\npostscript/~NSgV\npostseason/~NSgJ\npoststructuralist/NSgJ\npostsynaptic/~J\npostulate/~NSgJVdGXn\npostulation/Ng\npostural/J\nposture/~NgSVGdz\nposturing/NgV\npostwar/~J\npostwoman/N\npostwomen/9\nposy/NSg\npot/~NwSgVe\npotability/Ng\npotable/~JNSg\npotash/NmgV\npotassium/~Nmg\npotato/~N0wgV\npotatoes/~N9\npotbelly/NSgd\npotboiler/NSg\npotency/Nmg\npotent/~JYN\npotentate/NgSJ\npotential/~NwgSJY\npotentiality/NSg\npotentiate/VGdS\npotentiometer/NSg\npotful/NSg\npothead/NSg\npother/NSgVdG\npotherb/NSg\npotholder/NgS\npothole/NSgd>GZ\npothook/NSg\npotion/~NwSgV\npotluck/NgSV\npotpie/NSg\npotpourri/NwSg\npotsherd/NSg\npotshot/NgSV\npottage/Ng\npotted/VtTJ\npotter/~NSgVGd\npottery/~NwSg\npotting/V6N\npotty/NSgV>J^p\npouch/~NgSVdG\npouf/NSV\npouffe/NSV\npoulterer/NgS\npoultice/NSgVdG\npoultry/~Nmg\npounce/NSgVdG\npound/~NSVdGK\npound's\npoundage/NmgV\npounder/~NgS\npounding/VSNmgJ\npour/~VGdSNz\npout/VGd>SNgZ\npouter/Ng\npoverty/~Nmg\npow/~N\npowder/~NwSgVGd\npowdery/J\npower/~Nw☁gSVdGJ\npower line/NgS\npower-up/NgS\npowerboat/NgS\npowerful/~JY\npowerhouse/~NSg\npowerless/~JYp\npowerlessness/Ng\npowertrain/NgS\npowwow/NSgVGd\npox/NgSV\npp/~N\nppm/~N\nppr\npracticability/Ng\npracticably/Ry\npractical/~JYNSg\npracticality/~NSg\npractice/~NSgVdGB\npracticed/~JVU\npracticum/NSg\npractise/VdGSN!@_₹\npractised/JVU!@_₹\npractitioner/~NSg\npraetor/NSg\npraetorian/~JN\npragma/NgS\npragmatic/~JNgS\npragmatical/JY\npragmatism/~Ng\npragmatist/NgSJ\nprairie/~NSg\npraise/~NSgVdGE\npraiseworthiness/Ng\npraiseworthy/Jp\npraline/NwSg\npram/NgS\nprance/Vd>GSNgZ\nprancer/Ng\nprancing/V6JYN\nprang/NSVdG\nprank/~NgSVdGJ\nprankster/NSg\npraseodymium/Nmg\nprat/~NSJ\nprate/NgSVGd>Z\nprater/Ng\npratfall/NSgV\nprattle/Vd>GSNgZ\nprattler/Ng\npravity/N\nprawn/NgSVdG\npray/~VGd>SZ\nprayer/~NmgS\nprayerful/JY\npre-COVID/J\npreach/~Vd>GSNZL\npreacher/~Ng\npreachment/Ng\npreachy/J>^\npreadolescence/NSg\npreadolescent/JN\npreamble/~NgSVGd\npreamplifier/NSg\nprearrange/VGdSL\nprearrangement/Ng\npreassigned/J\nprebuild/VGS\nprebuilt/J\nprecalculate/VGdS\nprecancel/VdGSNg\nprecancerous/J\nprecarious/~JYp\nprecariousness/Ng\nprecast/JNV\nprecaution/~NgSV\nprecautionary/~JN\nprecautious/J\nprecede/~VdGSN\nprecedence/~Ng\nprecedent/~NSgJVdG\nprecept/NSgV\npreceptor/NSg\nprecinct/~NgS\npreciosity/Ng\nprecious/~JYpN\npreciousness/Ng\nprecipice/NSg\nprecipitant/JNgS\nprecipitate/~VGdSJYNgXn\nprecipitation/~Ng\nprecipitous/JY\nprecis/NgV\nprecise/~JY^pVdSGn\npreciseness/Ng\nprecision/~NgJ\npreclude/~VGdS\npreclusion/Ng\nprecocious/~JYp\nprecociousness/Ng\nprecocity/Ng\nprecognition/Ng\nprecognitive/JN\nprecolonial/JN\nprecompile/VGdS\nprecomputability/Ng\nprecomputation/NgS\nprecomputational/JY\nprecompute/VGdSB\npreconceive/VGdS\npreconception/NwSgJ\nprecondition/NgSVdG\npreconfigure/VGdS\nprecook/VGSd\nprecool/VGSd\nprecursor/~NSgJ\nprecursory/JN\npredate/~VdGSN\npredator/~NgS\npredatory/~J\npredawn/NJ\npredecease/NSVGd\npredecessor/~NSg\npredefined/~JV\npredesignate/JVGdS\npredestination/~Ng\npredestine/VdSG\npredetermination/Ng\npredetermine/VGd>SZ\npredeterminer/Ng\npredicable/JN\npredicament/~NgS\npredicate/~NgSJVGdnv\npredication/Nmg\npredicative/JYN\npredict/~VGdSNBv\npredictability/NmgU\npredictable/~JNU\npredictably/~RyU\nprediction/~NwSg\npredictive/J\npredictor/~NgS\npredigest/VGdS\npredilection/NSg\npredispose/VGdS\npredisposition/NgS\nprednisone/N\npredominance/Nmg\npredominant/~JYN\npredominate/~VGdSJY\npredone/J\npreemie/NSg\npreeminence/Nmg\npreeminent/~JY\npreempt/VGdSNv\npreemptible/J\npreemption/~Nmg\npreemptive/~JY\npreen/NSVdG\npreexist/VdGS\npreexistence/Nmg\npref/~N\nprefab/JNSgV\nprefabbed/VtT\nprefabbing/V6\nprefabricate/VdSGn\nprefabrication/Nmg\npreface/~NSgVdG\nprefatory/J\nprefect/~NSg\nprefecture/~NgS\nprefer/~VSBL\npreferably/~Ry\npreference/~NgSV\npreferential/~JY\npreferment/Ng\npreferred/~VtTJN\npreferring/~V6N\nprefigure/VGdSN\nprefix/~NgSVdG\nprefixation/Nmg\npreflight/JNgSVdG\npreform/NSVGd\npreformative/NJ!@_₹\nprefrontal/JN\npregame/~NSgJV\npregnancy/~NwSg\npregnant/~JN\npreheat/VGSd\nprehensile/J\nprehistorian/NS\nprehistoric/~J\nprehistorical/JY\nprehistory/~Nmg\nprehuman/JN\npreindustrial/J\npreinstallation/Nmg\npreinstalled/VtT\nprejudge/VGdS\nprejudgement/NgS!_₹\nprejudgment/NSg\nprejudice/~NgS☁VGdJ\nprejudiced/~VtTJU\nprejudicial/J\nprekindergarten/JNSg\nprelacy/Ng\nprelate/~NSgV\nprelim/JNSg\npreliminarily\npreliminary/~JNSg\npreliterate/JN\npreload/VdSG\nprelude/~NgSV\npremarital/JN\npremature/~JYN\npremed/NSg\npremedical/J\npremeditate/VdSGn\npremeditated/~VJU\npremeditation/Ng\npremenstrual/J\npremier/~JNSgVGd\npremiere/~NgSV\npremiership/~NgS\npremise/~NSgVdG\npremium/~JNSg\npremix/NSVGd\npremolar/~NSgJ\npremonition/NgS\npremonitory/J\nprenatal/~JYN\nprenup/NSg\nprenuptial/JN\npreoccupation/~NSg\npreoccupy/VdSG\npreoperative/JN\npreordain/VGdS\npreowned/J\nprep/~NmgSV\nprepackage/VdSG\nprepacked/J\nprepaid/~VJN\nprepandemic/J\npreparation/~NwSg\npreparatory/~J\nprepare/~VGdS       # remove `N` noun sense is obsolete\nprepared/~JpVtTU\npreparedness/~NgU\npreparer/NSg\nprepay/VGSL\nprepayment/NwgS\nprepend/VdSGN\npreponderance/NSg\npreponderant/JY\npreponderate/VGdS\nprepone/VdSG₹\npreponement/NgS₹\npreposition/NSgVd\nprepositional/JYN\nprepossess/VGdS\nprepossessing/JV6U\nprepossession/NSg\npreposterous/JY\nprepped/VtT\nprepping/V6Nm\npreppy/J^>NSg\npreprint/VdSGNg\npreprocess/VdSG\npreprocessor/NSg\nprepubescence/Ng\nprepubescent/JNSg\nprepuce/NgS\nprequantum/J\nprequel/~NgS\nprerecord/VGSd\npreregister/VSGd\npreregistration/NgJ\nprerelease/JNgS\nprerequisite/~JNgS\nprerogative/~NSgJ\npres/~NV\npresage/NgSVGd\npresbyopia/Nmg\npresbyter/NSg\npresbytery/~NSg\npreschool/~J>NSgVZ\npreschooler/NgS\nprescience/Nmg\nprescient/JY\nprescribe/~VdSG\nprescript/NSgJdv\nprescription/~NwSgJ\nprescriptive/JY\npreseason/~NSgV\npreselct/VGdS\npresence/~NwSgV\npresent/~JY>NgSVdGLZB\npresentably/Ry\npresentation/~NSgr\npresenter/~Ng\npresentiment/NSg\npresentment/NSg\npreservation/~Ng\npreservationist/NSg\npreservative/~NSgJ\npreserve/~NSgVd>GBZ\npreserver/Ng\npreset/~JVSN\npresetting/V6g\npreshrank/Vt\npreshrink/VbGS\npreshrunk/VT\npreside/~VGdS\npresidency/~NSg\npresident/~NgSV     # removed `5` adj. sense archaic, interferes with heuristics\npresidential/~J\npresidium/~Ng\npresort/VdGS\npress/~NSVbGdre\npress's\npressed/~VtTJU\npresser/NgS\npressie/NS\npressing/~JYNSgV6\npressman/N0g\npressmen/N9\npressure/~NwSgVdG\npressurisation/Ng!_₹\npressurise/VGdSe!_₹\npressurization/Nmg\npressurize/VGdSe\npressurizer/NSg\nprestidigitation/Ng\nprestige/~NmgJV\nprestigious/~J\npresto/~NSg\npresumably/~Ry\npresume/~VGdSB\npresumption/~NwSg\npresumptive/~J\npresumptuous/JYp\npresumptuousness/Nmg\npresuppose/VdSG\npresupposition/NwgS\npretax/JV\npreteen/JNgS\npretence/NSg!_₹\npretend/~Vd>GSJNZ\npretender/~NgV\npretense/NSgXn\npretension/NgSVdG\npretentious/~JYU\npretentiousness/Nmg\npreterit/NSgJ\npreterite/JNgS!@_₹\npreterm/JN\npreternatural/JY\npretest/JNSVdG\npretext/~NgSV\npretrain/VGdS\npretrial/JNS\nprettify/VGdS\nprettily/Ry\nprettiness/Nmg\npretty/~J^>pNSgVGdR\npretzel/NgSV\nprev/J!@_₹\nprevail/~VdGS\nprevalence/~Nmg\nprevalent/~J\nprevaricate/VdSGnX\nprevarication/Nmg\nprevaricator/NSg\nprevent/~VdSGBv\npreventable/JNU\npreventative/JNgS\nprevention/~Nmg\npreventive/~JNSg\npreview/~NgSVd>GZ\nprevious/~JYN\nprevision/NgSV\nprewar/~J\nprey/~NgSVGd\nprezzie/NmgS\npriapic/J\nprice/~NwSVGdr\nprice's\npriceless/J\npricey/J\npricier/Jc\npriciest/Ju\nprick/NgSVd>GYZ\npricker/NgS\nprickle/NgSVGd\nprickliness/Nmg\nprickly/J>^pN\npride/~Nm☁gSVGd\nprideful/JY\nprier/Ng\npriest/~NSgVY\npriestess/~NgSV\npriesthood/~Nmg\npriestliness/Nmg\npriestly/~J>^p\nprig/NgSV\npriggish/Jp\npriggishness/Nmg\nprim/JY>pVGdNZ\nprima facie/RJ\nprimacy/~Ng\nprimal/~JNV\nprimality/J\nprimarily/~R        # focusing/viewpoint/comment adverb\nprimary/~JNSgVdG\nprimate/~NgS\nprime/~JNgSV\nprimer/~NgJ\nprimeval/~J\npriming/NgV\nprimitive/~NSgJYp\nprimitiveness/Ng\nprimmer/JcN\nprimmest/Ju\nprimness/Ng\nprimogenitor/NSg\nprimogeniture/~Ng\nprimordial/~JYN\nprimp/VdSG\nprimrose/~NSgJV\nprimula/NS\nprince/~NSgVY\nprincedom/NSg\nprinceliness/Ng\nprinceling/NgS\nprincely/~J>^p\nprincess/~NgS\nprincipal/~JYNSg\nprincipality/~NmSg\nprinciple/~NwSgVd\nprincipled/JVU\nprint/~JVdGSNwgr\nprintable/JNU\nprinter/~NgS\nprinting/~NSgV\nprintmaking/Nmg\nprintout/NSg\nprion/NS\nprior/~JNgS\nprioress/NgS\nprioritisation/N!_₹\nprioritise/VdSG!_₹\nprioritization/N\nprioritize/~VdSGe\npriority/~NSg\npriory/~NSg\nprise/VGdSNr!_₹\nprism/~NgS\nprismatic/~J\nprison/~NSgV>Z\nprisoner/~Ng\nprissily/Ry\nprissiness/Ng\nprissy/J^>pN\npristine/~J\nprithee/\nprivacy/~Nmg\nprivate/~JY^>NgSVXn\nprivateer/~NSgV\nprivation/NSge\nprivatisation/NSg!_₹\nprivatise/VdSG!_₹\nprivatization/~NSg\nprivatize/VdSG\nprivet/NSg\nprivilege/~NSgVdG\nprivileged/~VJU\nprivily/Ry\nprivy/~J>^NSg\nprize/~NgSVGdJ\nprized/~JVtTr\nprizefight/NSgG>Z\nprizefighter/Ng\nprizefighting/Ng\nprizewinner/NgS\nprizewinning/J\npro/~NSgPJ(\npro-democracy/J\npro rata/R\nprobabilistic/~J\nprobability/~NSg\nprobable/~JNSg\nprobably/~R         # adverb of probability/certainty; modal adverb\nprobate/~NgVn\nprobation/~Ng>Z\nprobational/JY\nprobationary/JN\nprobationer/Ng\nprobe/~NgSVGdBz\nprobiotic/NSgJ\nprobity/Nmg\nproblem/~NgSJ\nproblematic/~JNU\nproblematical/JY\nprobosces/N9\nproboscis/N0gS\nprocaine/Ng\nprocedural/~JYN\nprocedure/~NSg\nproceed/~VbGdSz\nproceeding/~V6Ng\nproceedings/N9\nproceeds/~NgVh\nprocess/~NSVbGdr\nprocess's\nprocessable/JU\nprocessed/~JVtTU\nprocession/~NVGd\nprocessional/JNgS\nprocessor/~NSg\nproclamation/~NgS\nproclivity/NSg\nprocrastinate/VdSGn\nprocrastination/Nmg\nprocrastinator/NgS\nprocreate/Vv\nproctor/~NgSVGd\nprocurement/~NwgS\nprod/~VSNg\nprodigal/~JYNgS\nprodigality/Nmg\nprodigious/~JY\nprodigy/~NSg\nproduce/~VGd>SNmrZ\nproduce's\nproducer/~Ngr\nproducible/Jr\nproduction/~NwSgr\nproductise/VdSGn!_₹\nproductive/~JYU\nproductiveness/Nmg\nproductivity/~Nmg\nproductize/VdSGn\nprof/~NgS\nprofanation/NgS\nprofane/~JYpNSVGd\nprofaneness/Nmg\nprofanity/~NwSg\nprofessed/~JYVtT\nprofession/~NSg\nprofessional/~NgSJY\nprofessionalisation/N!_₹\nprofessionalise/VdSG!_₹\nprofessionalism/~Nmg\nprofessionalization/Nmg\nprofessionalize/VdSG\nprofessor/~NSg\nprofessorial/JY\nprofessorship/~NSg\nproffer/NgSVGd\nproficiency/~Ng\nproficient/~JYNgS\nprofiler/NSg\nprofit/~NwVGdB\nprofitability/~Nmg\nprofitable/~JU\nprofitably/RyU\nprofiteer/NgSVdG\nprofiteering/NgV\nprofiterole/NSg\nprofitless/J\nprofligacy/Nmg\nprofligate/JYNSgV\nproforma/JN\nprofound/~JY^>pNV\nprofoundness/Nmg\nprofundity/NSg\nprofuse/JYpV\nprofuseness/Nmg\nprogenitor/~NSg\nprogeny/~Ng\nprogesterone/Nmg\nprogestin/NS\nprognathous/J\nprognoses/N9V\nprognosis/~N0g\nprognostic/JNgS\nprognosticate/VGdSXn\nprognostication/Ng\nprognosticator/NgS\nprogovernment/J\nprogram/~NSVer\nprogrammable/~JNgS\nprogrammatic/JQ\nprogramme/NSgVd>GBzZ\nprogramme/!_₹\nprogrammed/~VtTJre\nprogrammer/~NgS\nprogramming/~NmgV6\nprogress/~NmgSVdGv\nprogression/~NgS\nprogressive/~JYpNgS\nprogressively/R\nprogressiveness/Ng\nprogressivism/Nmg\nprohibit/~VdGSv\nprohibition/~NwSg\nprohibitionist/NgS\nprohibitive/~JYN\nprohibitory/J\nproject/~NgSVGd\nprojectile/~NSgJ\nprojection/~NwSg\nprojectionist/NSg\nprojector/~NgS\nprokaryote/NgS\nprokaryotic/J\nprole/NSV\nproletarian/~JNgS\nproletariat/~Ng\nproliferate/VdSGn\nproliferation/~Nmg\nprolific/~JQ\nprolix/JYV\nprolixity/Ng\nprologue/~NSgV\nprolongation/NSg\nprom/~NgS\npromenade/~NgSVGd\npromethium/Nmg\nprominence/~Nmg\nprominent/~JYN\npromiscuity/Nmg\npromiscuous/~JY\npromise/~NSgVdG\npromising/~JYV6N\npromissory/J\npromo/~NgV\npromontory/~NSg\npromote/~Vd>GZ\npromoter/~NgS\npromotional/~JN\nprompt/~JY^>pNSgVdGzZ\nprompted/~VU\nprompter/JcNgS\nprompting/~VNg\npromptitude/Nmg\npromptness/Nmg\npromulgate/VGdSn\npromulgation/~Nmg\npromulgator/NgS\npronatalist/NgSJ\nprone/~JpV\nproneness/Nmg\nprong/~NgSVd\npronghorn/NgS\npronominal/JNg\npronounce/~VdGSNL\npronounceable/JU\npronouncement/NSg\npronto/\npronunciation/~NgS\nproof/~NwSgJVdGr\nproofread/V>GSNZ\nproofreader/Ng\nprop/~NgSV\npropaganda/~Nmg\npropagandise/VGdS!_₹\npropagandist/~NgSJ\npropagandistic/JQ\npropagandize/VGdS\npropagate/~VdSGn\npropagation/~Nmg\npropagator/NSg\npropel/~VS\npropellant/~NwgSJ\npropelled/~VtT\npropeller/~NSg\npropelling/V6N\npropensity/~NSg\nproper/~J>Y^Ng\nproperty/~NSgVd\nprophecy/~NwSgV\nprophesier/Ng\nprophesy/Vd>GSNgZ\nprophet/~NSg\nprophetess/NgS\nprophetic/~J\nprophetical/JY\nprophylactic/NSgJ\nprophylaxes/N9\nprophylaxis/N0g\npropinquity/Ng\npropitiate/VdSGn\npropitiation/Ng\npropitiatory/J\npropitious/JY\nproponent/~NSgJ\nproportion/~NSgVE\nproportional/~JYNS\nproportionality/~Nmg\nproportionate/JYVE\nproposal/~NgS\npropped/VtT\npropping/V6N\npropranolol/N\nproprietary/~JNSg\nproprieties/Ng\nproprietor/~NSg\nproprietorial/JY\nproprietorship/Ng\nproprietress/NgS\npropriety/~NSg\nproprioception/Nmg  # medicine\npropulsion/~Nmg\npropulsive/J\nprorate/VdSG\nprorogation/Ng\nprorogue/VGd\nprosaic/JQ\nproscenium/~NSg\nprosciutto/Nmg\nproscribe/VdG\nproscription/NwgS\nprose/~NmgV\nprosecute/~VdSGXn\nprosecution/~NwgS\nprosecutor/~NgS\nprosecutorial/JQ\nproselyte/NSgVdG\nproselytise/Vd>SGZ!_₹\nproselytiser/Ng!_₹\nproselytism/Ng\nproselytize/Vd>SGZ\nproselytizer/Ng\nprosocial/J\nprosody/NwSg\nprospect/~NgSVdGv\nprospective/~JYN\nprospector/NSg\nprospectus/~NgS\nprosper/~VGSd\nprosperity/~Nmg\nprosperous/~JY\nprostate/~NgSJ\nprostheses/N9\nprosthesis/~N0g\nprosthetic/~JNgSQ\nprostitute/~VGdSJNgn\nprostitution/~Nmg\nprostrate/JVGdSnX\nprostration/NgwS\nprosy/J>^\nprotactinium/Nmg\nprotagonist/~NSg\nprotean/JN\nprotect/~VGSdv\nprotectant/NSg\nprotected/~JVU\nprotection/~NwSg\nprotectionism/~Nmg\nprotectionist/JNgS\nprotective/~JYpN\nprotectiveness/Ng\nprotector/~NgS\nprotectorate/~NgS\nprotege/NSg\nprotegee/NS\nprotein/~NwSg\nprotest/NwgS\nprotestant/~JNgS\nprotestation/NwgS\n# proto             # prefixes that are not also words in their own right don't belong in the dictionary\nprotocol/~NwgSV\nprotocolise/VGdS!_₹\nprotocolize/VGdS\nproton/~NSg\nprotoplasm/Nmg\nprotoplasmic/J\nprototype/~NgSVG\nprototyper/NgS\nprototypical/J\nprotozoa/N\nprotozoan/NgSJ\nprotozoic/J\nprotract/VGd\nprotrude/VGdS\nprotrusile/J\nprotrusion/NgS\nprotuberance/NgS\nprotuberant/J\nproud/~J>Y^\nprov/~nB\nprovability/Nmg\nprovably/R          # adverb of modality/certainty/probability\nprove/~VGdSNEr\nproved/~VtU\nproven/~JVTUE\nprovenance/~NSgV\nprovender/NgV\nprovenience/Ng\nproverbial/JYN\nprovide/~Vd>SGZ\nprovided/~CVtTU\nprovidence/~Ng\nprovident/JY\nprovidential/JY\nprovider/~NgS\nprovince/~NgS\nprovincial/~JYNSg\nprovincialism/Nmg\nprovisional/~JYN\nproviso/~NSg\nprovocateur/NgS\nprovocative/~JYpN\nprovocativeness/Nmg\nprovoke/~Vd>SGZ\nprovoked/~VU\nprovoker/NgS\nprovoking/~VJYN\nprovolone/Ng\nprovost/~NSgV\nprow/NgSJ\nprowess/~Nmg\nprowl/Vd>GSNgZ\nprowler/NgS\nproximal/~J\nproximate/JN\nproximity/~Nmg\nproxy/~JNSgVdG\nprude/NgSJ\nprudence/~Nmg\nprudent/~JY\nprudential/~JYN\nprudery/Ng\nprudish/JYp\nprudishness/Nmg\nprune/NgSVGd>Z\npruner/NgS\nprurience/Nmg\nprurient/JY\npry/~VGd>SNg^Z\npsalm/~NgSV\npsalmist/NSg\npsaltery/NSg\npsephologist/NS\npsephology/N\npseud/NS\npseudo/~NSJ(\npseudocode/NmgG\npseudonym/~NSg\npseudonymous/~J\npseudorandom/Jp\npseudoscience/~NgS\npseudoscientific/J\npseudy/J\npshaw/VSg\npsi/~NSg\npsittacosis/Ng\npsoriasis/Ng\npsst/V\npsych/NgSJVdG\npsyche/~NgV\npsychedelia/Nm\npsychedelic/~JNSgQ\npsychiatric/~JN\npsychiatrist/~NSg\npsychiatry/~Nmg\npsychic/~NgSJ\npsychical/JY\npsycho/~JNSg\npsychoactive/~JN\npsychoanalyse/VdSG!_₹\npsychoanalyses/VN9\npsychoanalysis/~N0g\npsychoanalyst/NSg\npsychoanalytic/~J\npsychoanalytical/JY\npsychoanalyze/VdSG\npsychobabble/NgV\npsychodrama/NgS\npsychogenic/J\npsychokinesis/Nmg\npsychokinetic/JN\npsycholinguistics/Ng\npsychological/~JY\npsychologist/~NgS\npsychology/~NwSg\npsychometric/J\npsychometrician/NSg\npsychoneuroses/N\npsychoneurosis/Ng\npsychopath/Ng\npsychopathic/JN\npsychopathology/N\npsychopaths/N9\npsychopathy/Nmg\npsychopharmacology/N\npsychophysiology/N\npsychos/NS\npsychosis/~Ng\npsychosomatic/J\npsychotherapist/NgS\npsychotherapy/~NSg\npsychotic/~JNSgQ\npsychotropic/JNgS\npsychs/NV\npt/~Ne\nptarmigan/NgS\npterodactyl/NgS\nptomaine/NSg\npub/~NSgV\npubertal/J\npuberty/~Nmg\npubes/Ng\npubescence/Ng\npubescent/JN\npubic/J\npubis/Ng\npublic/~JNmgVr\npublic key/NgS\npublican/NgSr\npublication/~NwSgr\npublicise/VGdS!_₹\npublicist/~NgS\npublicity/~Nmg\npublicize/VGdS\npublicly/~Ry\npublish/~VGdSrU\npublishable/JU\npublished/~VtTJU\npublisher/~NgS\npublishing/~NmgV6U\npuce/NgJ\npuck/~NgSV>Z\npucker/VdGNg\npuckish/JYp\npuckishness/Nmg\npud/NS\npudding/~NwSg\npuddle/~NSgVdG\npuddling/NgV\npudenda/N\npudendum/Ng\npudginess/Nmg\npudgy/J>^p\npueblo/~NSg\npuerile/J\npuerility/Nmg\npuerperal/J\npuff/~NgSVGd>Z\npuffball/~NSg\npuffer/Ng\npuffin/~NSg\npuffiness/Nmg\npuffy/~J>^p\npug/~NSgV\npugilism/Nmg\npugilist/NSg\npugilistic/J\npugnacious/JYp\npugnaciousness/Nmg\npugnacity/Nmg\npuke/NgSVGd\npukka/J\npulchritude/Nmg\npulchritudinous/J\npule/NSVGd\npull/~VGd>SNgZ\npull down/V/\npullback/NgS\npulldown/NgS\npuller/NgS\npullet/NSg\npulley/~NSgV\npullout/NgS\npullover/NSg\npullup/NSg\npulmonary/~J\npulp/~NwgSVGdJ\npulpiness/Nmg\npulpit/~NSg\npulpwood/Ng\npulpy/J>^p\npulsar/~NSg\npulsate/VGdSXn\npulsation/NwSg\npulse/~NgSVGdr\npulverisation/Ng!_₹\npulverise/VdSG!_₹\npulverization/Ng\npulverize/VdSG\npuma/~NgS\npumice/NSgV\npummel/VGdSN\npummelled/VtT!@_₹\npummelling/V6N!@_₹\npump/~NgSVGd>Z\npumper/~Ng\npumpernickel/Ng\npumpkin/~NwgS\npun/~VSNg\npunch/~NwgSVd>GZ\npunchbag/NS\npuncheon/NgS\npuncher/Ng\npunchline/NS\npunchy/J^>\npunctilio/Ng\npunctilious/JYp\npunctiliousness/Nmg\npunctual/JY\npunctuality/Nmg\npunctuate/VGdSJn\npunctuation/~Nmg\npuncture/NSgVdG\npundit/~NSg\npunditry/Nmg\npungency/Nmg\npungent/~JY\npuniness/Ng\npunish/~VGdSBL\npunished/~VJU\npunishing/~JYNV\npunishment/~NwgS\npunitive/~JY\npunk/~NgSJ^>V\npunned/VtT\npunnet/NS\npunning/V6NJ\npunster/NSg\npunt/~NgSVGd>Z\npunter/~Ng\npuny/J^>pN\npup/~NSgV\npupa/~Ng\npupae/~9\npupal/~J\npupate/VdSG\npupil/~NgS\npupped/VtT\npuppet/~NgSV\npuppeteer/~NSgV\npuppetry/~Ng\npupping/V6\npuppy/~NSgV\npurblind/JNV\npurchase/~NSgVd>GZB\npurchaser/Ng\npurdah/Ng\npure/~JY^>pVN\npurebred/JNSg\npuree/NgSVd\npureeing/V6\npureness/Nmg\npurgative/JNSg\npurgatorial/J\npurgatory/~NSgJ\npurge/~VGd>SNgZ\npurger/NgS\npurification/~Nmg\npurifier/NgS\npurify/~Vd>SGnZ\npurine/NgS\npurism/Nmg\npurist/JNgS\npuristic/J\npuritan/~NSgJ\npuritanical/JYN\npuritanism/Nmg\npurity/~Nmg\npurl/NgSVGd\npurlieu/NSg\npurloin/VSGd\npurple/~NwgSJ^>V\npurplish/~J\npurport/VdGSNg\npurported/~JYV\npurpose/~NwSgVdGr\npurposed/JVr\npurposeful/JYp\npurposefulness/Nmg\npurposeless/JYp\npurposely/Ry\npurr/VGdSNg\npurse/~NgSVGd>Z\npurser/Ng\npursuance/Ng\npursuant/~J\npursue/~VGd>SZ\npursuer/Ng\npursuit/~NSg\npurulence/Ng\npurulent/J\npurvey/VdSG\npurveyance/Ng\npurveyor/NSg\npurview/~Ng\npus/NmgV\npush/~VGd>SNgZ\npush back/V/\npushback/Nmg\npushbike/NSV\npushcart/NSg\npushchair/NS\npusher/Ng\npushily/Ry\npushiness/Nmg\npushover/NgS\npushpin/~NSV\npushy/J^>p\npusillanimity/Ng\npusillanimous/JY\npuss/~NgS\npussy/~NSgJ^>\npussycat/~NgS\npussyfoot/VdGSN\npustular/J\npustule/NSg\nput/~VbtTSNg\nputative/~J\nputout/NgS\nputrefaction/Nmg\nputrefactive/J\nputrefy/VGdS\nputrescence/Ng\nputrescent/J\nputrid/J\nputsch/~NgS\nputt/~NgSVGd>Z\nputted/VtTi\nputtee/NgS\nputter/Vd>GNgZ\nputterer/Ng\nputting/~V6Ni\nputty/NwSgJVGd\nputz/NSV\npuzzle/~NgSVGd>ZL\npuzzlement/Ng\npuzzler/Ng\npvt/~\npwn/VGdSN\npyelonephritis/N\npygmy/~NSgJ\npyjama/NS!@_₹\npyjamas/Ng!@_₹\npylon/~NSg\npylori/N\npyloric/J\npylorus/Ng\npyorrhea/Ng\npyorrhoea/Ng!_₹\npyramid/~NSgVGd\npyramidal/~JN\npyre/~NgS\npyrimidine/NgS\npyrite/NSg\npyrites/Ng\npyromania/~Ng\npyromaniac/NSg\npyrotechnic/JSQ\npyrotechnical/J\npyrotechnics/~Ng\npyruvate/~N\npython/~NSg\npyx/NgSV\npzazz/N\nq/~N\nqr/~N\nqt/~NS\nqty/N\nqua/~P\nquack/~NgSVGdJ\nquackery/Ng\nquad/~NgSJV\nquadrangle/~NSg\nquadrangular/J\nquadrant/~NgS\nquadraphonic/J\nquadratic/~JNgSQ\nquadrature/N\nquadrennial/JN\nquadrennium/NgS\nquadriceps/NgS\nquadrilateral/~NSgJ\nquadrille/NgSVJXn\nquadrillion/NgS\nquadrillionth/J\nquadriplegia/Nmg\nquadriplegic/JNSg\nquadrivium/NgS\nquadruped/NgS\nquadrupedal/J\nquadruple/~JVGdSNg\nquadruplet/NgS\nquadruplicate/JNgSVGdn\nquadruplication/Ng\nquaff/VGdSNg\nquagmire/NSgV\nquahog/NgSV\nquail/~VGdSNwg\nquaint/J>Y^pN\nquaintness/Nmg\nquake/~NgSVGd\nquaky/JN\nqualification/~NwgSE\nqualified/~JVtTU\nqualifier/~NSg\nqualify/~VGdSNEXn\nqualitative/~JYN\nquality/~NwSgJ\nqualitywise/R\nqualm/NgSV\nqualmish/J\nquandary/NSg\nquango/NS\nquant/NgS           # quantitative analyst\nquanta/~N9\nquantifiable/JN\nquantification/~Ng\nquantifier/~Ng\nquantify/~Vd>SGnZ\nquantisation/NgS!_₹\nquantise/V!_₹\nquantitation/N\nquantitative/~JY\nquantity/~NwSg\nquantization/~NgS\nquantize/VSdG\nquantum/~N0gJ\nquarantine/~NOSgVGd\nquark/~NgS\nquarrel/~NSgVGd>Z\nquarreler/Ng\nquarrelled/VtT!@_₹\nquarreller/NgS!@_₹\nquarrelling/V6Nm!@_₹\nquarrelsome/Jp\nquarrelsomeness/Nmg\nquarry/~NSgVdG\nquart/~NgSJV\nquarter/~NSgJYVGd\nquarterback/~NgSVGd\nquarterdeck/NgS\nquarterfinal/~NSg\nquarterly/~JNSg\nquartermaster/~NgSV\nquarterstaff/N0g\nquarterstaves/N9\nquartet/~NSg\nquartile/NS\nquarto/~NgS\nquartz/~Nmg\nquasar/~NgS\nquash/VGdS\nquasi/~J\nquaternion/NgS\nquatrain/NgS\nquaver/NgSVdG\nquavery/J\nquay/~NgSVJ\nquayside/NS\nqueasily/Ry\nqueasiness/Ng\nqueasy/J^>p\nqueen/~NgSVGdY\nqueenly/J>^\nqueer/~J^Y>pNgSVGd\nqueerness/Ng\nquell/~VGdSN\nquench/VGd>SNZB\nquenchable/JU\nquencher/Ng\nquenchless/J\nquercetin/Ng        # a flavonol\nquerulous/JYp\nquerulousness/Ng\nquery/~NSgVdGB\nques/N\nquesadilla/NgS\nquest/~NgSViWr\nquested/V\nquesting/NV\nquestion/~NSgVd>GZBz\nquestionable/~JU\nquestionably/RyU\nquestioned/~VtTU\nquestioner/Ng\nquestioning/~NgJYV6\nquestionnaire/~NSgV\nqueue/~NSVde\nqueue's\nqueueing/V6N\nqueuing/V6N\nquibble/NSgVd>GZ\nquibbler/Ng\nquiche/NSgJ\nquick/~JY^>pNgVnX\nquicken/VdGN\nquickfire/JN\nquickie/NSg\nquicklime/NmgV\nquickness/Ng\nquicksand/NgS\nquicksilver/~NgJV\nquickstart/NgS\nquickstep/NgSV\nquid/NgSV\nquid pro quo/Ng\nquiescence/Ng\nquiescent/JY\nquiet/~JY^>pVdGSNwgnX\nquieten/VdG\nquietism/N\nquietness/Nmg\nquietude/NgiE\nquietus/NgS\nquiff/NSV\nquill/~NSgV\nquilt/NSgVd>GZ\nquilter/Ng\nquilting/NgV\nquin/NS\nquince/NSg\nquine/~NSVJ\nquinidine/N\nquinine/NgV\nquinoa/N\nquinsy/Ng\nquint/~NSg\nquintessence/~NwSgV\nquintessential/JYN\nquintet/~NSg\nquintuple/JNgSVGd\nquintuplet/NgS\nquip/NgSV\nquipped/~VtT\nquipping/V6\nquipster/NSg\nquire/NSVir\nquire's\nquirk/NSgVdG\nquirkiness/Ng\nquirky/~J>^p\nquirt/NSgV\nquisling/NSgV\nquit/~JVbtTSN\nquitclaim/VSNg\nquite/~R%\nquittance/NgV\nquitter/NSgV\nquitting/~V6N\nquiver/NSgJVdG\nquivery/J\nquixotic/JNQ\nquiz/~NgV\nquizzed/VtT\nquizzer/NSg\nquizzes/NVh\nquizzical/JY\nquizzing/V6N\nquo/~VNH\nquoin/NSgV\nquoit/NSgVdG\nquondam/J\nquorate/NJi\nquorum/~NSg\n#quot/B             # !! is this due to HTML entity &quot;?\nquota/~NSg\nquotability/Ng\nquotable/J\nquotation/~NSg\nquote/~NSVdGU\nquote unquote/JR\nquote's\nquotidian/JN\nquotient/~NSg\nqwerty/J            # dictionaries prefer QWERTY\nrabbet/NgSVGd\nrabbi/~NSg\nrabbinate/Ng\nrabbinic/~J\nrabbinical/~J\nrabbit/~NgSVGd\nrabble/VSNmg\nrabid/JYpN\nrabidness/Nmg\nrabies/~Nmg\nraccoon/~NgS\nrace/~NwgSVGd>Z\nracecourse/~NSg\nracegoer/NS\nracehorse/~NgS\nraceme/NgS\nracer/~Ng\nracetrack/~NgS\nraceway/~NgS\nracial/~JYN\nracialism/Nmg\nracialist/NgS\nracily/Ry\nraciness/Ng\nracing/~NgV\nracism/~Nmg\nracist/~NSgJ\nrack/~NgSVGd\nrack-mounted/J\nracket/~NSgVdG\nracketeer/NSgVdG\nracketeering/~NmgV\nraconteur/NSgV\nracquet/NSgV@\nracquetball/NSg\nracy/J>^p\nrad/~JNSg\nradar/~NSgV\nradarscope/NSg\nraddled/J\nradial/~JYNSg\nradian/NS\nradiance/~Ng\nradiant/~JYN\nradiate/~VdGSJNnX\nradiation/~NwSg\nradiative/~J\nradiator/~NSg\nradical/~JYpNSg\nradicalisation/Ng!_₹\nradicalise/VdSG!_₹\nradicalism/~Ng\nradicalization/Nge\nradicalize/VdSGe\nradicchio/Ng\nradices/N9\nradii/~N9\nradio/~NwgSVdG\nradioactive/~JYN\nradioactivity/~Ng\nradiocarbon/~Ng\nradiogram/NgS\nradiographer/NSg\nradiography/Nmg\nradioisotope/NgS\nradiologist/NSg\nradiology/~Nmg\nradioman/N0g\nradiomen/N9\nradiometer/NgS\nradiometric/J\nradiometry/Ng\nradiophone/NSg\nradioscopy/Ng\nradiosonde/NSg\nradiosurgery/NwgS\nradiotelegraph/N0gV\nradiotelegraphs/N9\nradiotelegraphy/Nmg\nradiotelephone/NgSV\nradiotherapist/NgS\nradiotherapy/~Nwg\nradish/NwgS\nradium/~NmgV\nradius/~N0gV\nradix/N0gS\nradon/~Ng\nraffia/Ng\nraffish/JYp\nraffishness/Nmg\nraffle/NSgVdG\nraft/~NgSVGd>Z\nrafter/~NgV\nrafting/~VNmg\nrag/~NSgVGd\nraga/NgS\nragamuffin/NgS\nragbag/Ng\nrage/~NgSV\nragga/N\nragged/~JY^>pVtT\nraggedness/Nmg\nraggedy/~J>^\nragging/V6N\nraging/~VJYN\nraglan/~JNSg\nragout/NSgV\nragtag/JNS\nragtime/~Ng\nragweed/Nmg\nragwort/Nmg\nrah/~NJ\nraid/~NgSVGd>Z\nraider/~Ng\nrail/~NwSVGde\nrail's\nrailcard/NS\nrailing/~JNSgV\nraillery/NSg\nrailroad/~NSgVGd>Z\nrailroader/Ng\nrailroading/VNg\nrailway/~NSg\nrailwayman/Ng\nrailwaymen/9\nraiment/Ng\nrain/~NwgSVGd\nrainbow/~NSgJV\nraincoat/NSg\nraindrop/NSg\nrainfall/~NwSg\nrainforest/~Sg\nrainmaker/~NSg\nrainmaking/Ng\nrainproof/JV\nrainstorm/NgS\nrainwater/~Ng\nrainy/~J>^\nraise/~VGd>SNgZ\nraiser/Ng\nraisin/~NSgV\nrajah/~N0g\nrajahs/N9\nrake/~NgSVGd\nrakish/JYp\nrakishness/Ng\nrally/~NSgVdG\nram/~NSgVJ\nramble/NSgVd>GZz\nrambler/Ng\nrambunctious/JYp\nrambunctiousness/Ng\nrambutan/NgS\nramekin/NSg\nramen/Ng\nramie/Ng\nramification/~Ng\nramify/VdSGXn\nramjet/NSg\nrammed/~VtTJ\nramming/V6Nw\nramp/~NgSVGd\nrampage/~NSgVdG\nrampancy/Ng\nrampant/~JY\nrampart/~NSgV\nramrod/NSgV\nramrodded/VtT\nramrodding/V6\nramshackle/JV\nran/~VtNr\nranch/~NgSVd>GZ\nrancher/~Ng\nranching/~VNg\nrancid/Jp\nrancidity/Ng\nrancidness/Nmg\nrancor/Ng\nrancorous/JY\nrancour/Ng!@_₹\nrand/~NgV\nrandiness/Ng\nrandom/~NSJYpV\nrandomisation/Ng!_₹\nrandomise/VdSG!_₹\nrandomization/Ng\nrandomize/VdSG>\nrandomness/NgS\nrandy/~J>^pN\nranee/NgS\nrang/~Vt>Z\nrange/~NwSVGde\nrange's\nrangefinder/~NS\nranger/~NgV\nranginess/Ng\nrangy/J>^p\nrank/~J^Y>pNgSVGdz\nranking/~VJNwg\nrankle/VdGSN\nrankness/Nmg\nransack/VGdSN\nransom/~NwSgVGd>Z\nransomer/Ng\nransomware/Nmg\nrant/~VGd>SNgZz\nranter/Ng\nrap/~NSgVGd>Z\nrapacious/JYp\nrapaciousness/Nmg\nrapacity/Ng\nrapamycin/Ng\nrape/~NgSV\nraper/Ng\nrapeseed/Ng\nrapid/~J>Y^pNgS\nrapidity/Ng\nrapidness/Nmg\nrapier/NSgJ\nrapine/NgV\nrapist/~NSg\nrapped/VtT\nrappel/NSgV\nrappelled/VtT\nrappelling/V6N\nrapper/~NSg\nrapping/~V6NJ\nrapport/~NgS\nrapporteur/~NS\nrapprochement/NSg\nrapscallion/NgSJ\nrapt/JYpVN\nraptness/Ng\nraptor/~NS\nrapture/~NgSV\nrapturous/JY\nrare/~JY^>pNSVGd\nrarebit/NgS\nrarefaction/Nmg\nrarefy/VGdS\nrareness/Ng\nrarity/~NSg\nrascal/NSgJY\nrash/~J^Y>pNgSVZ\nrasher/JcNgV\nrashness/Ng\nrasp/NgSVGd\nraspberry/~NwSgJV\nraspy/J>^\nraster/~NV\nrasterisation/NwgS!_₹\nrasterise/VSdG!_₹\nrasterization/NwgS\nrasterize/VSdG\nrat/~NSgV\nratatouille/Ng\nratbag/NS\nratchet/~NgSVGdJ\nrate/~NgSVGd>zXZn\nrate limit/NgS\nrated/~JVU\nratepayer/NS\nrater/Ng\nrather/~JNVR\nrathskeller/NSg\nratification/~Ng\nratifier/Ng\nratify/~Vd>SGnZ\nrating/~VNg\nratio/~NgSV\nratiocinate/VGdSn\nratiocination/Ng\nration/~NgVdG\nrational/~JYNSg\nrationale/~NgS\nrationalisation/NSg!_₹\nrationalise/VdSG!_₹\nrationalism/Ng\nrationalist/~NSg\nrationalistic/J\nrationality/~Nmg\nrationalization/NgS\nrationalize/VdSG\nratlike/J\nratline/NSg\nrattan/~NSgV\nratted/VtTJ\nratter/NSg\nratting/V6N\nrattle/~Vd>GSNgZz\nrattlebrain/NSgd\nrattler/Ng\nrattlesnake/~NSg\nrattletrap/JNSg\nrattly/J\nrattrap/NSg\nratty/J>^N\nraucous/JYp\nraucousness/Ng\nraunchily/Ry\nraunchiness/Ng\nraunchy/J^>p\nravage/Vd>GSNgZ\nravager/Ng\nravages/~NgV\nrave/~NgSVGd>zZ\nravel/VdGSNU\nravel's\nraveling/V6SN\nravelled/JVtTU!@_₹\nravelling/NSV6!@_₹\nraven/~NgSJVdG\nravenous/JY\nravine/~NSg\nraving/V6NgJ\nravioli/NSg\nravish/Vd>SGZL\nravisher/Ng\nravishing/JYV6N\nravishment/Ng\nraw/~J^>pNgV\nrawboned/J\nrawhide/NgV\nrawness/Ng\nray/~NSgV\nray casting/Nmg\nray marcher/NgS\nray marching/Nmg\nray tracer/NgS\nray tracing/Nmg\nrayon/Ng\nraze/VGdSN\nrazor/~NgSV\nrazorback/~NgS\nrazz/NgSVGd\nrazzmatazz/Ng\nrcpt/N\nrd/~N\nre/PNSg(vz\nre-enable/VdSG\nreach/~VdGSNgB\nreachable/~JNU\nreacquire/VdSG\nreact/~VNv\nreactance/N\nreactant/NSg\nreactionary/~JNSg\nreactively/Ry\nreactivity/~N\nread/~VbtTG>SNgZBz\nread-only/J\nreadability/~Nmg\nreader/~Ng\nreadership/~NSg\nreadily/~Ry\nreadiness/~Ng\nreading/~V6Ng\nreadme/NgS\nreadmitted/VtT\nreadout/NSg\nready/~J^>pVdGSN\nreafforestation/Nm\nreal/~J^>YpNgS\nreal estate/Nmg\nreal time/Ng\nreal-time/J\nreal world/Ng\nreal-world/J\nrealisation/NSg!_₹\nrealise/VdSGB!_₹\nrealised/VU!_₹\nrealism/~Nmg\nrealist/~NSgJ\nrealistic/~JUQ\nrealities/~N9\nreality/~Nw0gU\nrealization/~NgS<@!_₹\nrealize/~VdSGBU<@!_₹\nrealized/~VU<@!_₹\nreallocation/NwgS\nreally/R%\nrealm/~NgS\nrealness/Nmg\nrealpolitik/Nmg\nrealtor/NgS\nrealty/~Ng\nream/NgSVGd>Z\nreamer/Ng\nreap/~VGd>SNZ\nreaper/~Ng\nreapprove/VSGd\nrear/~VGdSJNg\nrearguard/~NgS\nrearmost/J\nrearview/NSg\nrearward/NSJ\nreason/~NwSgVd>GZB\nreasonable/~JpU\nreasonableness/NgU\nreasonably/~RyU\nreasoner/Ng\nreasoning/~NgV\nreassuring/VJYN\nreauthorise/VS!_₹\nreauthorized/V!_₹\nreauthorizing/V!_₹\nrebadge/VGdS\nrebalance/VSGd\nreballing/V6\nrebar/NwSg\nrebarred/VtT\nrebarring/V6\nrebase/VGdS\nrebate/~NgV\nrebel/~NgSV\nrebellion/~NwgS\nrebellious/~JYp\nrebelliousness/Nmg\nrebid/VSN\nrebidding/V6\nrebirth/~NgV\nreboard/VGdS\nreboil/VSdG\nrebox/VSdG\nrebuckle/VSdG\nrebuild/~VGSN\nrebuke/NSgVdG\nrebuking/VNY\nrebush/VSdG\nrebuttal/~NgS\nrec/~NgVJ\nrec'd/J\nrecalcitrance/Ng\nrecalcitrant/JN\nrecant/VSdG\nrecantation/NSg\nrecap/~VSNg\nrecapitalisation/NwSg!_₹\nrecapitalization/NwSg\nrecce/NSJV\nrecd\nreceipt/~NSgVdG\nreceivables/Ng\nreceive/~Vd>GSNZB\nreceiver/~Ng\nreceivership/~Ng\nrecency/Nmg\nrecent/~JYpN        # removed comparative and superlative as marginal since only full OED includes it\nrecentness/Ng\nreceptacle/NSg\nreception/~NwgS\nreceptionist/~NSg\nreceptive/~JYp\nreceptiveness/Ng\nreceptivity/Ng\nreceptor/~NSg\nrecess/~NgSJVdGv\nrecessional/JNSg\nrecessionary/J\nrecessive/~JNSg\nrecherche/~J\nrecidivism/Ng\nrecidivist/NSg\nrecipe/~NSg\nrecipient/~NSgJ\nreciprocal/~JYNSg\nreciprocate/VGdSn\nreciprocation/Ng\nreciprocity/~Ng\nrecital/~NSg\nrecitalist/NgS\nrecitative/NgSJ\nreciter/NSg\nreckless/~JYp\nrecklessness/Ng\nreckon/VdGSNz\nreckoning/~VNg\nreclamation/~Ng\nrecline/Vd>GSNZ\nrecliner/Ng\nreclock/VdSG\nrecluse/JNSgVv\nrecognisable/JU!_₹\nrecognisably/RyU!_₹\nrecognise/Vd>SGB!_₹\nrecognised/JVtTU!_₹\nrecognizable/~JU\nrecognizably/RyU\nrecognize/~Vd>SGB\nrecognized/~JVtTU\nrecombination/~Nmg\nrecommender/NgS\nrecompense/NSgVdG\nrecompilation/NwgS\nrecompile/VGdSN\nrecomputation/Nmg\nrecon/~NSV\nreconcile/~VGdSB\nreconciler/NgS\nreconciliation/~NS\nrecondite/JNSgV\nreconditioner/NgS\nreconfiguration/N\nreconfigure/VGdS\nreconnaissance/~NgS\nreconnoiter/VdGSN\nreconnoitre/VGdSN!@_₹\nreconstruct/~Vv\nreconstructed/~VJU\nreconstructible/J\nrecontest/VSdG\nrecorded/~VJU\nrecorder/~NgS\nrecording/~V6NwgS\nrecordkeeping/Ng\nrecoup/VdG\nrecourse/~NgV\nrecoverability/Nmg\nrecoverable/JNU\nrecovery/~NwSg\nrecreant/JNgS\nrecreational/~J\nrecriminate/VdSGnX\nrecrimination/NwgS\nrecriminatory/J\nrecrudesce/VGdS\nrecrudescence/Ng\nrecrudescent/J\nrecruit/~NSgVd>GLZ\nrecruiter/Ng\nrecruitment/~Ng\nrectal/JYN\nrectangle/~NgSJ\nrectangular/~J\nrectifiable/J\nrectification/Nmg\nrectifier/NgS\nrectify/Vd>SGXnZ\nrectilinear/J\nrectitude/Ng\nrecto/NgS\nrector/~NSg\nrectory/~NSg\nrectum/NSg\nrecumbent/JN\nrecuperate/VGdSnv\nrecuperation/Nmg\nrecur/VS\nrecurred/VtT\nrecurrence/~NSg\nrecurring/~V6JN\nrecurse/VdSG\nrecursion/~NS\nrecuse/VdSG\nrecut/VS\nrecutting/V6\nrecycle/VSdG>B\nred/~JpNwSg\nred-eye/Ng\nred wolf/Ng\nred wolves/9\nredact/VSdGU\nredaction/NwgS\nredactor/NSg\nredbird/NSg\nredbreast/NgS\nredbrick/JN\nredcap/NSg\nredcoat/NSgV\nredcurrant/NS\nredden/VSdG\nredder/Jc\nreddest/Ju\nreddish/~J\nredeclare/VSGd\nredeem/~V>ZB\nredeemer/~NgS\nredemption/~Nmg\nredemptive/J\nredhead/NSgd\nredialling/V6!_₹\nredirection/Nmg\nredistribution/VGdSNg\nredistrict/VGd\nredivide/VGdS\nredline/NgVdG\nredneck/NSg\nredness/~Nmg\nredo/VGN\nredolence/Ng\nredolent/J\nredoubt/NSgVB\nredoubtably/Ry\nredound/VdGSN\nredox/Nmg           # reduction and oxidation reaction\nredraw/VGSN\nredshifted/J\nredskin/NSg\nreduce/~Vd>SGZ\nreducer/Ng\nreducible/J\nreductase/Nmg\nreduction/~NwSg\nreductionist/JNmg\nreductive/~J\nredundancy/~NSg\nredundant/~JY\nredwood/~NwSg\nredye/VdS\nreediness/Nmg\nreedy/J>^p\nreef/~NgSVGd>JZ\nreefer/Ng\nreek/~NgSVGd\nreel/~NSVGdU\nreel's\nreelect/VdSG\nreentrant/J\nreeve/~NVG\nreexecute/VSdG\nreexport/VdGSN\nref/~NSgVZ\nrefabricate/VGdS\nrefactor/NSVd\nrefactorable/J\nrefactoring/~NwgSV\nrefashion/VdGS\nrefection/Ng\nrefectory/~NSg\nrefer/~VNB\nreferee/~NSgVd\nrefereeing/V6N\nreference/~NgSVGd\nreferenceable/J\nreferendum/~NgS\nreferent/NSg\nreferential/~J\nreferral/~NSg\nreferred/~VtT\nreferrer/~NSg\nreferring/~V6N\nreffed/VtT\nreffing/V6\nrefill/NgVB\nrefined/~VtTJNU\nrefinement/~NSg\nrefiner/NSg\nrefinery/~NS\nrefitting/V6N\nreflash/VdSGNg\nreflate/VdSGXn\nreflationary/J\nreflect/~VGSdv\nreflection/~NwgS\nreflective/~JYp\nreflectivity/~N\nreflector/~NgS\nreflexive/~JYNSg\nreflexivity/N\nreflexology/N\nrefloat/VdGS\nreflow/VSGd\nreforge/VdSG\nreform/~NgVZ\nreformat/VdSG\nreformatory/JNSg\nreformatting/V6N\nreformed/~VJU\nreformist/~JNS\nrefortify/VGdS\nrefract/VSGdv\nrefraction/~Nmg\nrefractory/JNSg\nrefrain/~VGdSNg\nreframe/NSdG\nrefresh/~VGd>SNZL\nrefresher/Ng\nrefreshing/~JYNV\nrefreshment/NSg\nrefreshments/Ng\nrefrigerant/NSgJ\nrefrigerate/VdSGn\nrefrigeration/~Ng\nrefrigerator/~NgS\nrefuge/~NSgV\nrefugee/~NSgV\nrefulgence/Ng\nrefulgent/J\nrefund/~VNB\nrefurb/NgSVdG\nrefurbishment/~NgS\nrefusal/~NgS\nrefutation/~NgS\nrefute/~Vd>SGBZ\nrefuter/Ng\nreg/~N\nregal/~JYNdG\nregalement/Ng\nregalia/~Ng\nregard/~NSgVdGE\nregardless/~JP\nregards/~NgV\nregather/VdGS\nregatta/~NSg\nregency/~NSg\nregeneracy/Ng\nregenerate/~VJNv\nregex/NgS\nregexp/NSg\nreggae/~Nmg\nreggaeton/Nmg\nregicidal/J\nregicide/~NwgS\nregime/~NSg\nregimen/~NSg\nregiment/~NgSVdG\nregimental/~J\nregimentation/Nmg\nregion/~NSg\nregional/~JYN\nregionalism/NwgS\nregister/~NgSVGd\nregistered/~VtTJU\nregistrant/~NgS\nregistrar/~NgS\nregistration/~NwSg\nregistry/~NSg\nreglue/VSdG\nregnant/JN\nregolith/NSg\nregress/NmgSVdGv\nregression/~NwgS\nregret/~VSNwg\nregretful/JY\nregrettable/J\nregrettably/Ry\nregretted/~VtT\nregretting/V6N\nregrind/VGS\nreground/VtT\nregroup/NSVdG\nregular/~JYNgS\nregularisation/NwSg!_₹\nregularise/VdSG!_₹\nregularity/~NSg\nregularization/NwSg\nregularize/VdSG\nregulate/~VdSGenv\nregulated/~VJU\nregulation/~NwSgJe\nregulations/~N\nregulator/~NgS\nregulatory/~J\nregurgitate/VdGSNn\nregurgitation/Ng\nrehab/~NwgSV\nrehabbed/VtT\nrehabbing/V6\nrehabilitate/~VGdSnv\nrehabilitation/~Ng\nrehang/VdGSN\nrehaul/VSdG\nrehears/VGd\nrehearsal/~NwgS\nrehearsed/~VtTJU\nrehi/\nrehome/VdSG\nrehung/V\nreify/VdSGn\nreign/~NgSVdG\nreimagine/VSdG\nreimagined/VtTJ\nreimburse/VdSGBL\nreimbursement/NgS\nreimplementation/NmgS\nrein/~NVGd\nreindeer/~NgV\nreinforce/~VGdSL\nreinforcement/~NSg\nreinitialise/V!_₹\nreinitialize/V\nreinstall/VdGN\nreinstatement/~Ng\nreinsurance/~Nmg\nreinvade/VdGS\nreiterate/VJNv\nreject/~VGdSNg\nrejection/~NwSg\nrejoice/~VGdSz\nrejoicing/VNg\nrejoinder/NSgV\nrejuvenate/VdSGn\nrejuvenation/Ng\nrel/~P\nrelate/~V>SGBXZnv\nrelated/JYp\nrelater/Ng\nrelation/~Ng\nrelational/~J\nrelationship/~NgS\nrelative/~JYNgS\nrelativism/Nmg\nrelativist/NgS\nrelativistic/~J\nrelativity/~Nmg\nrelativize/VdSG>\nrelax/~Vd>SGZ\nrelaxant/NwgS\nrelaxation/~Nmg\nrelaxer/Ng\nrelay/~NVd\nrelease/~NwSgVB\nreleased/~VtTU\nreleaser/NgS\nrelegate/VGdSNJn\nrelent/NSVGdJ\nrelentless/~JYp\nrelentlessness/Nmg\nrelevance/~Nmg\nrelevancy/Nmg\nrelevant/~JY\nreliability/~NmgU\nreliable/~JNU\nreliably/~RyU\nreliance/~Ng\nreliant/~J\nrelic/~NgSVJ\nrelief/~NSgJ\nrelieve/~VGd>SZ\nreliever/~Ng\nreligion/~NSgV\nreligiosity/N\nreligious/~JYpNg\nreligiousness/Ng\nreline/VdGSN\nrelink/VdSG\nrelinquish/~VdSGL\nrelinquishment/Ng\nreliquary/~NSg\nrelish/NgSVGd\nrelist/VSGd\nrelive/VdSGB!_₹\nreloader/NgS\nrelocate/~VB\nreluctance/~Ng\nreluctant/~JY\nrely/~VGdS\nrem/NgJ\nremain/~NSVGd\nremainder/~NgSJVGd\nremand/~NSVGd\nremapping/V6N\nremark/~NV\nremarkable/J\nremarkableness/Ng\nremarkably/~Ry\nremarked/~VtTJU\nremediable/J\nremedy/~NSgVGd\nremember/~VdG\nremembered/~VtTU\nremembrance/~NgSV\nremilitarize/VGdS\nreminder/~Ng\nreminisce/VGdSN\nreminiscence/NgS\nreminiscent/~JYN\nremiss/JYp\nremissness/Ng\nremit/~VSN\nremittance/NSg\nremitted/VtT\nremitting/V6NU\nremix/~NSVdG\nremnant/~NgSJ\nremodel/~VGdSN\nremodelling/V6N!@_₹\nremold/VSGd\nremonstrant/NSgJ\nremonstrate/VdSG\nremorse/~NgV\nremorseful/JY\nremorseless/JYp\nremorselessness/Ng\nremote/~JY^>pNSgV\nremoteness/~Ng\nremould/VSdG!@_₹\nremoval/~NSg\nremunerate/VGdSnvX\nremuneration/Ng\nrenaissance/~NgS\nrenal/~J\nrenascence/NS\nrend/VGSN\nrender/~VGdSNgz\nrenderer/~NSg\nrendering/~NwgV\nrendezvous/~NgSVGd\nrendition/~NgSV\nrenegade/~NSgVdGJ\nrenege/Vd>SGZ\nreneger/Ng\nrenew/~VdGSN\nrenewable/~JNgS\nrenewal/~NgS\nrennet/Ng\nrennin/Ng\nrenounce/~NSVdGL\nrenouncement/Ng\nrenovate/~VdSGXn\nrenovation/~Ng\nrenovator/NgS\nrenown/~NgVd\nrent/~NmgSVGd>JZ\nrental/~NSgJ\nrenter/NgV\nrentier/NgS\nrenunciation/~NwSg\nreopen/~VSdG\nreorg/NgSVdG\nreorientate/VGdSn\nrep/~NSgV\nrepaint/VGdSN\nrepair/~V>SNwBZ\nrepairability/Nmg\nrepairer/Ng\nrepairman/N0g\nrepairmen/N9\nreparable/J\nreparation/N0gS\nreparations/~N9g\nreparse point/NgS\nrepartee/NgV\nrepartition/VSdG\nrepatriate/NSgVdGXn\nrepatriation/~Nmg\nrepeat/~Vd>GSNgZB\nrepeatability/Nmg\nrepeatable/JU\nrepeatably/Ry\nrepeated/~VJY\nrepeater/~Ng\nrepeating/~VJNg\nrepel/~VS\nrepelled/~VtT\nrepellent/JNSg\nrepelling/~V6N\nrepent/~VSdGJ\nrepentance/~Ng\nrepentant/JYN\nrepercussion/NS\nrepertoire/~NgS\nrepertory/~NSg\nrepetition/~NwgSV\nrepetitious/JYp\nrepetitiousness/Ng\nrepetitive/~JYp\nrepetitiveness/Ng\nrephotograph/VdG\nreplace/VSdG\nreplaceable/~JN\nreplacer/NgS\nreplan/VS\nreplanned/VtT\nreplanning/V6\nreplant/VGdSN\nreplayable/J\nreplenish/~VGdSL\nreplenishment/~Ng\nreplete/JpNSVdGn\nrepleteness/Ng\nrepletion/Ng\nreplica/~NSg\nreplicant/NgS\nreplicate/~VdGSNJnX\nreplication/~NwSg\nreplicator/NS\nrepo/~NSgV\nrepoliticise/VdSG!_₹\nrepoliticize/VdSG\nrepop/NgSV\nrepopped/VtTd\nrepopping/V6G\nreport/NgSVdG>\nreportage/Ng\nreported/~VY\nreportorial/J\nreposeful/J\nreposition/VdGSN\nrepository/~NSg\nrepost/NgSVdG\nreprehend/VdGS\nreprehensibility/Ng\nreprehensible/JN\nreprehensibly/Ry\nreprehension/Ng\nrepresent/~VGdS\nrepresentational/J\nrepresentative/~JNgS\nrepresented/~VtTU\nrepression/~NgS\nrepressive/JYp\nreprieve/~VdGSNg\nreprimand/NSgVGd\nreprisal/~NSg\nreprise/~NSgVG\nreproach/NgSVGdB\nreproachful/JY\nreprobate/JNgSV\nreproductive/~JN\nreprogramming/V6Nmg\nreproving/VJYN\nreptile/~NSgJ\nreptilian/~JNgS\nrepublic/~NS\nrepublicanism/~Nmg\nrepudiate/VGdSXn\nrepudiation/~Ng\nrepudiator/NgS\nrepugnance/Ng\nrepugnant/J\nrepulsion/~Ng\nrepulsive/~JYp\nrepulsiveness/Ng\nrepunch/VSdG\nrepurchase/VGdSN\nrepurposing/V6Ng\nreputability/Ng\nreputably/RyE\nreputation/~NgS\nreputational/J\nrepute/NSgVdGB\nreputed/~VtTJY\nrequest/~VGdSN\nrequester/NgS\nrequiem/~NSg\nrequire/~VdGL\nrequirement/~NgS\nrequisite/~JNgSXn\nrequisition/NgVGd\nrequital/Ng\nrequite/Vd>GSNZ\nrequited/VU\nrequiter/Ng\nreradicalize/VdSG\nrerank/VGdS\nreranking/NmgV6\nreread/VbtTGSN\nrerecord/NSVGd\nrerelease/~NSgVGd\nrerunning/V6\nresale/NgSB\nresample/VGdS\nresat/V\nrescale/VSdG\nrescind/VSdG\nrescission/Ng\nrescue/~Vd>GSNgZ\nreseal/VB\nresearch/NmgSVdG\nresearcher/NgS\nresemble/~VbdSG\nresend/VbGdSN\nresent/~VbtTSdGL\nresentful/~JYp\nresentfulness/Nmg\nresentment/~NgS\nreserpine/Ng\nreservation/~NgS\nreserved/~VtTJYU\nreservedness/Nmg\nreservist/NSg\nreservoir/~NSgV\nresetting/V6N\nreshipping/V6N\nreshoot/NgSVG\nreshot/VtT\nresidence/~NwSg\nresidency/~NSg\nresident/~NgSJ\nresidential/~JYN\nresidua/N\nresidual/~JNgS\nresidue/~NSg\nresiduum/Ng\nresignation/~NSg\nresigned/~JYVtT\nresilience/~Nmg\nresiliency/~Nmg\nresilient/~JY\nresinous/J\nresist/~Vd>GSNgZ\nresistance/~NwSg\nresistant/~NJU\nresistible/J\nresistive/J\nresistivity/N\nresistless/J\nresistor/~NgS\nresit/VSN\nresitting/NV6\nresizable/J\nresizeable/J!₹\nreskilling/V6\nreskin/VSN\nreskinned/VtTJ\nreskinning/V6JN\nresold/V\nresole/VdSG\nresolute/~JYpN\nresoluteness/Nmg\nresolve/~V>NgB\nresolved/~VtTJU\nresonance/~NwSg\nresonant/~JYN\nresonate/VGdS\nresonator/~NSg\nresorption/Ng\nresound/VGdSN\nresounding/JYNV\nresourceful/JYp\nresourcefulness/Nmg\nresp/JNV\nrespawn/VGdSNg\nrespect/~NmSgVGdEv\nrespectability/Nmg\nrespectable/~JN\nrespectably/Ry\nrespecter/NgS!@_₹\nrespectful/~JYE\nrespectfulness/Nmg\nrespective/~JY\nrespell/VSGd\nrespin/NgSVGd\nrespiration/~Nmg\nrespirator/~NSg\nrespiratory/~J\nrespire/VdGN\nresplendence/Ng\nresplendent/JY\nrespond/~VGdSNw\nrespondent/NSgJ\nresponder/NgS\nresponse/~NgS\nresponsibility/~NwSg\nresponsible/~JN\nresponsibly/Ry\nresponsive/~JYpU\nresponsiveness/NmgU\nrest/~NgSVGdv\nrestage/VSdG\nrestamp/VGdS\nrestate/VGdS\nrestaurant/~NSg\nrestaurateur/~NgS\nrestful/JYp\nrestfuller/Jc\nrestfullest/Ju\nrestfulness/Nmg\nrestitution/~Ng\nrestive/JYp\nrestiveness/Nmg\nrestless/~JYp\nrestlessness/Ng\nrestoration/~NwSg\nrestorative/~JNSg\nrestorer/NSg\nrestrained/~JVtTU\nrestraint/~NgS\nrestrict/~VSdGJv\nrestricted/~VtTJU\nrestriction/~NwgS\nrestrictive/~JYpN\nrestrictiveness/Ng\nrestrictor/NgS\nrestring/VSG\nrestroom/NSg\nrestructuring/~V6SNg\nresult/~VGdSNg\nresultant/~JNSg\nresumé/NSg\nrésumé/NSg\nresume/~VdGSNg\nresumption/~NwgS\nresupply/~VdGSN\nresurgence/~NwgS\nresurgent/JN\nresurrect/~VGSd\nresurrection/~NwgS\nresuscitate/VGdSJn\nresuscitation/Ng\nresuscitator/NSg\nresveratrol/Nmg\nretail/Nmg\nretailer/~NgS\nretain/~Vd>GSNZ\nretainer/Ng\nretake/~VGN\nretaliate/VdSGnvX\nretaliation/~Ng\nretaliator/NgS\nretaliatory/J\nretap/VS\nretapped/VtT\nretapping/V6\nretard/NSgVd>GZ\nretardant/JNSg\nretardation/Ng\nretarder/Ng\nretch/VdGSN\nreteach/VGS\nretention/~Ng\nretentive/JYpN\nretentiveness/Ng\nrethink/VGSNg\nrethought/V\nreticence/NgV\nreticent/JY\nreticulated/J\nreticulation/NgS\nreticulum/~N\nretina/~NSg\nretinal/~JN\nretinoblastoma/N\nretinue/~NSg\nretiree/NSg\nretirement/~NgS\nretort/NgVGd\nretrace/VGdSN\nretract/~VdGNB\nretractile/J\nretraction/~NwgS\nretrade/VSdG\nretrain/VdGSN\nretransmission/NwgS\nretread/VdSN\nretrenchment/NgS\nretribution/~NgS\nretributive/J\nretrieval/~NSg\nretrieve/~Vd>GSNgZB\nretriever/Ng\nretro/~JNmgS(\nretroactive/~JY\nretrofire/NSVGdJ\nretrofit/~VSNg\nretrofitted/~VtTJ\nretrofitting/V6N\nretroflex/JNSg\nretrograde/~JNSVdG\nretrogress/VGdSNv\nretrogression/Ng\nretronic/J\nretrorocket/NgS\nretrospect/~NgSVdGv\nretrospection/Nmg\nretrospective/~JYNgS\nretrovirus/NgS\nretsina/Ng\nreturnable/JNSg\nreturnee/NSg\nreusability/Nmg\nrev/~VNgZv\nrevamping/NgV6\nrevanchist/JNSg\nreveal/~NSVGdz\nrevealed/~JVtTU\nrevealing/~JYV6N\nreveille/Ng\nrevel/~NgSVd>GzZ\nrevelation/~NSg\nrevelatory/J\nreveler/Ng\nrevelled/VtT!@_₹\nreveller/NSg!@_₹\nrevelling/V6SN!@_₹\nrevelry/NSg\nrevenge/~NgSVGd\nrevenuer/NSg\nreverb/~NV\nreverberate/VdSGJnX\nreverberation/Ng\nrevere/~VdGSN\nreverence/~NSgVdG\nreverend/~JNSg\nreverent/JY\nreverential/JY\nreverie/NgSV\nrevers/Ng\nreversal/~NSgJ\nreverse/~JYNV\nreverser/NgS\nreversibility/Nmg\nreversible/~JN\nreversibly/Ry\nrevert/~NSVGd\nrevertible/J\nrevetment/NSg\nrevile/Vd>GSNLZ\nrevilement/Ng\nreviler/Ng\nreviser/NgS\nrevision/~NSgV\nrevisionism/Nmg\nrevisionist/~JNSg\nrevival/~NgS\nrevivalism/Ng\nrevivalist/NSgJ\nrevive/~VdSG\nrevivification/Ng\nrevocable/J\nrevoke/~VdGSN\nrevolt/~VGdN\nrevolting/~V6NJY\nrevolution/~NwSg\nrevolutionarily/J\nrevolutionary/~JNSg\nrevolutionise/VdSG!_₹\nrevolutionist/NSg\nrevolutionize/VdSG\nrevolve/~VGd>SNBZ\nrevolver/~Ng\nrevote/NgSVdG\nrevue/~NgS\nrevulsion/Ng\nrevved/VtT\nrevving/V6N\nrewarded/~VtTU\nrewarding/~JV6U\nrewarm/VGSd\nrewash/NSVGd\nreweave/VGS\nrewedding/V6\nrewind/~VNgB\nrewound/VtT\nrewrite/~NgSVG\nrhapsodic/J\nrhapsodical/J\nrhapsodise/VGdS!_₹\nrhapsodize/VGdS\nrhapsody/~NSgV\nrhea/~NgS\nrhenium/Nmg\nrheostat/NSg\nrhesus/NgS\nrhetoric/~JNg\nrhetorical/~JYN\nrhetorician/NSg\nrheum/Ng\nrheumatic/~JNgSQ\nrheumatism/Ng\nrheumatoid/~JN\nrheumy/J\nrhinestone/NSgJV\nrhinitis/Ng\nrhino/~NgS\nrhinoceros/~NgS\nrhinoplasty/N\nrhinovirus/NgS\nrhizome/NgS\nrho/~NSg\nrhodium/Nmg\nrhododendron/~NSg\nrhomboid/NSgJ\nrhomboidal/J\nrhombus/NgS\nrhotic/NSgJ         # linguistics\nrhubarb/NgSJV\nrhyme/~NgSVGd>Z\nrhymer/NgS\nrhymester/NgS\nrhythm/~NwSgV\nrhythmic/~J\nrhythmical/JY\nrial/NgS\nrib/~NSgV\nribald/JN\nribaldry/Nmg\nribbed/~JVtT\nribber/NSg\nribbing/V6Nw\nribbon/~NSgV\nriboflavin/~Nmg\nrice/~NwgSVGd>Z\nricer/NgS\nrich/~J^Y>pNgSV\nrichness/~Nmg\nrick/~NgSVGd\nrickets/NmgV\nrickety/J>^\nrickrack/Ng\nrickshaw/NgSV\nricochet/NgSVGd\nricotta/Nmg\nrid/~VS             # removed adj flag, too archaic\nriddance/Ng\nridden/~VTJ\nridding/V6\nriddle/~NSgVdG\nride/~VG>SNgZ\nrideable/J\nrider/~Ng\nriderless/J\nridership/~Nmg\nridge/~NgSVGd\nridgepole/NSg\nridgetop/NgS\nridgy/J\nridicule/~VGdSNmgJ\nridiculous/~JYp\nridiculousness/Nmg\nriding/~VNg\nrife/~J^>\nriff/~NgSVGd\nriffle/NSgVdG\nriffraff/Nmg\nrifle/~NgSVGd>Z\nrifleman/~N0g\nriflemen/~N9\nrifler/Ng\nrifling/NgV6\nrift/~NgSVGd\nrig/~NSgV\nrigatoni/Ng\nrigged/~JVtT\nrigger/NSg\nrigging/~NgV6\nright/~JY^>pNgSVdG\nright-hand/J\nright-wing/J\nrighteous/~JpVU\nrighteously/Ry\nrighteousness/~NmgU\nrightful/~JYp\nrightfulness/Nmg\nrightism/Ng\nrightist/NSgJ\nrightmost/J\nrightness/Nmg\nrighto/\nrightsize/VdSG\nrightward/JS\nrigid/~JYpN\nrigidity/~Ng\nrigidness/Nmg\nrigmarole/NgSJ\nrigor/~NgS\nrigorous/~JYp\nrigorousness/Nmg\nrigour/NSg!@_₹\nrile/VGdS\nrill/~NgSV\nrim/~NSgVbGd\nrime/~NgSV\nrimless/J\nrimmed/~JVtT\nrimming/V6N\nrimstone/NgS\nrind/NgSV\nring/~NgVGd>Zz\nringer/~NgS\nringgit/NgS09       # singular and plural, also has a plural in -s\nringleader/NgS\nringlet/NgSV\nringlike/J\nringmaster/NgSV\nringside/~JNg\nringtone/NSgV\nringworm/NgS\nrink/~NgS\nrinse/VGd>SNg\nriot/~NgSVGd>Z\nrioter/NgS\nrioting/~V6Ng\nriotous/JYp\nrip/~V>SNg^Xn\nriparian/~JN\nripcord/NgS\nripe/~JYpNV\nripen/VdG\nripened/VtTU\nripeness/Ng\nripoff/NSg\nriposte/NgSVGd\nripped/~VtTJ\nripper/~NSgJ\nripping/~V6JN\nripple/~NSgVdG\nripply/J\nripsaw/NSgV\nriptide/NgS\nrise/~VG>SNgzZ\nrisen/~VTJ\nriser/~Ng\nrisibility/Ng\nrisible/J\nrising/~V6NgJP\nrisk/~NwgSVGd\nriskily/Ry\nriskiness/Ng\nrisky/~J>^p\nrisotto/NgS\nrisque/JNV\nrissole/NSV\nrite/~NgSJ\nritual/~JYNSg\nritualised/VtT!_₹\nritualism/Ng\nritualistic/JQ\nritualized/VtTJ\nritzy/J>^\nriv/~>Zn\nrival/~NgSJVdG\nrivaled/VtTU\nrivalled/VtTU!@_₹\nrivalling/V6!@_₹\nrivalry/~NSg\nrive/~VGdSNe\nriver/~NgV\nriverbank/~NSg\nriverbed/NgS\nriverboat/~NSg\nriverfront/~N\nriverside/~NgSJ\nrivet/NgSVd>GZ\nriveter/Ng\nriviera/~NS\nrivulet/NgS\nriyal/NgS\nrm/~NV\nroach/~NgSVGd\nroad/~NwgSJi\nroad map/NgS        # standard in all dictionaries but overtaken by \"roadmap\" c. 2000\nroadbed/NSg\nroadblock/NgSVdG\nroadhouse/NSg\nroadie/~NgSV\nroadkill/Ng\nroadrunner/~NSg\nroadshow/~NSgV\nroadside/~JNSg\nroadster/~NSg\nroadway/~NSg\nroadwork/NwSg\nroadworthy/J\nroam/~VGd>SNZ\nroamer/Ng\nroaming/~V6Ng\nroan/~JNgS\nroar/~VGd>SNgZ\nroarer/Ng\nroaring/~JV6Nmg\nroast/~VGd>SNwgJZz\nroaster/Ng\nroasting/~VJNwg\nrob/~VbSN\nrobbed/~VtT\nrobber/~NgS\nrobbery/~NwSg\nrobbing/~V6Nm\nrobe/~NSVGdE\nrobe's\nrobin/~NgS\nrobocall/NSgVGd\nrobot/~NgS\nrobotic/~JS\nrobotics/~Ng\nrobotise/VGdS!_₹\nrobotize/VGdS\nrobust/~J>Y^p\nrobustness/Ng\nrock/~NwgSVGd>Z\nrock face/NgS\nrockabilly/~Ng\nrockbound/J\nrocker/~Ng\nrockery/NS\nrocket/~NgSVdG\nrocketry/~Ng\nrockfall/NSg\nrockiness/Ng\nrockstar/NSg\nrockwool/Ng\nrocky/~J^>p\nrococo/~NgJ\nrod/~NSgV\nrodder/NgS\nrode/~VtN\nrodent/~NgSJ\nrodeo/~NgSV\nroe/~NSg\nroebuck/~NSg\nroentgen/NgS\nroger/~VGdSN\nrogue/~NSJVK\nrogue's\nroguery/Ng\nroguish/JYp\nroguishness/Nmg\nroil/VGdS\nroister/VGd>SNZ\nroisterer/Ng\nrole/~NgS\nroleplay/VSdG\nroll/~Vd>GSNgZzr\nroll back/V/\nroll out/V/\nroll over/V/\nrollback/~NSgV\nroller/~NgV\nrollerblading/NmV6\nrollerskating/NmgV6\nrollick/VSdG\nrollicking/V6NgJ\nrollmop/NS\nrolloff/NgS\nrollout/NgS\nrollover/~NSgV\nromaine/~NgS\nroman/~JNg\nromance/~NgSVGd>Z\nromancer/Ng\nromanisation/NSg!_₹\nromanization/NSg\nromantic/~JNgSQ\nromanticise/VdSG!_₹\nromanticism/~Nmg\nromanticist/NSg\nromanticize/VdSG\nromeo/~NgS\nromp/Vd>GSNgZ\nromper/NgV\nrondo/~NSg\nrood/~NgS\nroof/~NgSVd>GZ\nroofer/Ng\nroofing/~NmgV\nroofless/J\nrooftop/~NSg\nrook/~NgSVdG\nrookery/NSg\nrookie/~NSgJV\nroom/~NwgSVd>GJZ\nroomer/Ng\nroomette/NSg\nroomful/NSgJ\nroominess/Nmg\nroommate/~NSg\nroomy/J>^pN\nroost/~NSgVd>GZ\nrooster/~Ng\nroot/~NgSVd>GZ\nrooter/Ng\nrootkit/NSgV\nrootless/Jp\nrootlet/NSg\nrope/~NgSVGd>Z\nroper/~Ng\nropy/J>^\nrosary/~NSg\nrose/~NgSVtJ\nroseate/J\nrosebud/~NSg\nrosebush/NgS\nrosemary/~Ng\nrosette/~NSg\nrosewater/Ng\nrosewood/NgS\nrosily/Ry\nrosin/NSgVdG\nrosiness/Ng\nroster/~NSgV\nrostrum/NgS\nrosy/~J^>pVN\nrot/~VSNwg\nrota/~NS\nrotary/~JNSg\nrotate/~VdSGJnX\nrotation/~NwSg\nrotational/~JN\nrotationally/Ry\nrotatory/J\nrote/~NgJV\nrotgut/Nmg\nrotisserie/NSgV\nrotogravure/NgS\nrotor/~NSg\nrotoscope/NgSVdG\nrototiller/NgS\nrotted/JVtT\nrotten/~J^>Yp\nrottenness/Ng\nrotter/NS\nrotting/~V6Nm\nrottweiler/NS\nrotund/Jp\nrotunda/~NgS\nrotundity/Ng\nrotundness/Nmg\nrouble/NSg!@_₹\nroue/NgS\nrouge/~JNwSgVdG\nrough/~J>^YpNgV6dGnX\nroughage/Ng\nroughcast/NVJ\nroughen/VGd\nroughhouse/NgSVGd\nroughneck/NgSVGd\nroughness/Ng\nroughs/N9Vh\nroughshod/J\nroulette/~NgV\nround/~JY^>pNSgPVdGZ\nroundabout/~JNSgV\nroundel/NS\nroundelay/NgS\nroundhouse/~NSgV\nroundish/J\nroundness/Ng\nroundup/~NgS\nroundworm/NSg\nrouse/~NSVdG\nroust/VdGSN\nroustabout/NSgV\nrout/~NgSV>Z\nroute/~NSVdGrB\nroute's\nrouteing/V6N\nrouter/~NgV\nroutine/~NgSJY\nroutinise/VGdS!_₹\nroutinize/VGdS\nroux/~N\nrove/~VGd>SNZ\nrover/~Ng\nrow/~NSgVGd>Z\nrowan/~NS\nrowboat/NgSV\nrowdily/Ry\nrowdiness/Ng\nrowdy/~J>^pNSg\nrowdyism/Ng\nrowel/NSgVdG\nrowelled/VtT!@_₹\nrowelling/V6!@_₹\nrower/~Ng\nrowing/~V6Nmg\nrowlock/NS\nroyal/~JYNSg\nroyalist/~JNSg\nroyalties/~Ng\nroyalty/~NSg\nrpm/~NO\nrps\nrt/~JN\nrte\nrub/~NSgV\nrubato/NSg\nrubbed/~VtTJ\nrubber/~NSgJV\nrubberise/VGdS!_₹\nrubberize/VGdS\nrubberneck/NgSVd>GZ\nrubbernecker/Ng\nrubbery/J\nrubbing/~NSV6\nrubbish/~NgSJVdG\nrubbishy/J\nrubble/~Ng\nrubblestone/Ng\nrubdown/NSg\nrube/~NgS\nrubella/Ng\nrubicund/J\nrubidium/~Ng\nruble/NSg\nrubric/NSgJV\nruby/~NwSgJ^>V\nruched/JV\nruck/NSVdG\nrucksack/NgS\nruckus/NgS\nructions/N\nrudder/NSg\nrudderless/J\nruddiness/Ng\nruddy/~J^>pNV\nrude/~JY^>p\nrudeness/Ng\nrudiment/NSgV\nrudimentary/~JN\nrue/~NSgVdG\nrueful/JYp\nruefulness/Ng\nruff/~NgSVdGJY\nruffian/NgSVJY\nruffle/NSgVdG\nruffled/VtTJU\nrug/~NSgVJ\nrugby/~NgV\nrugged/~J^Y>pV\nruggedization/NwSg\nruggedize/VdSG\nruggedness/Ng\nrugger/N\nrugosa/NgS\nrugrat/NSg\nruin/~NgSVdG\nruination/Nmg\nruinous/JY\nrule/~NgSVGd>Zz\nrulebook/NgS\nruler/~NgV\nruling/~JNgV6\nrum/~NwSgJ\nrumba/~NSgVdG\nrumble/~NSgVdGz\nrumbling/JNwSgV6\nrumbustious/J\nruminant/JNgS\nruminate/VGdSJXnv\nrumination/Nmg\nruminative/JY\nrummage/VdGSNg\nrummer/NJc\nrummest/Ju\nrummy/NgJ\nrumor/~Nw☁SgVdG<\nrumormonger/NSgV<\nrumour/Nw☁SgVdG!@_₹\nrumourmonger/NSgV!@_₹\nrump/~NgSVY\nrumple/VdGSNg\nrumpus/NgS\nrun/~VbTSNgr        # removed `5` adj. a bit marginal and interferes with linter heuristics\nrun away/V/\nrun time/NwgS\nrun-time/J\nrun-up/NgS\nrunabout/NgS\nrunaround/NSg\nrunaway/~NgSJ\nrundown/NSgJ\nrune/~NgS\nrung/~NgSVTJ\nrunic/~J\nrunlet/NSg\nrunnable/J\nrunnel/NSgV\nrunner/~NSg\nrunning/~V6JNmgP\nrunny/J>^\nrunoff/~NSg\nrunout/NgS\nrunt/NgS\nruntime/~JNgS\nrunty/J>^\nrunway/~NSg\nrupee/~NSg\nrupiah/Ng09         # singular and plural, also has a plural in -s below\nrupiahs/N9\nrupture/~NgSVGd\nrural/~JN\nruralist/Ng\nruse/~NgSV\nrush/~NgSVd>GJZ\nrusher/Ng\nrushy/J\nrusk/~NgS\nrusset/NSgJV\nrust/~NmgSVdG\nrustic/~JNSgQ\nrusticate/VGdS\nrustication/Ng\nrusticity/Ng\nrustiness/Nmg\nrustle/NSgVd>GzZ\nrustler/Ng\nrustproof/JVSdG\nrusty/~J>^pNn\nrut/NSgV\nrutabaga/NSg\nruthenium/Nmg\nrutherfordium/Nmg\nruthless/~JYp\nruthlessness/Nmg\nrutted/VtTJ\nrutting/V6N\nrutty/J>^N\nrye/~Nmg\nsabbath/~N0g\nsabbaths/N9\nsabbatical/~JNSg\nsaber/~NgSV\nsable/~NgSJ\nsabot/NgSV\nsabotage/~NwSgVdG\nsaboteur/NSg\nsabra/NgS\nsabre/NgSV!@_₹\nsac/~ONSgV\nsaccharin/Nmg\nsaccharine/JN\nsacerdotal/J\nsachem/NSg\nsachet/NSg\nsack/~NgSVGd>Zz\nsackcloth/Ng\nsacker/Ng\nsackful/NgSJ\nsacking/~NgV6\nsacra/~N\nsacralize/VGdSre\nsacrament/~NgSV\nsacramental/~JN\nsacred/~JYpV\nsacredness/Ng\nsacrifice/~NSgVdG\nsacrificial/~JY\nsacrilege/NgS\nsacrilegious/JY\nsacristan/NgS\nsacristy/~NSg\nsacroiliac/JNgS\nsacrosanct/Jp\nsacrosanctness/Ng\nsacrum/Ng\nsad/~JYpVN\nsadden/VSdG\nsadder/Jc\nsaddest/Ju\nsaddle/~NSVdGU\nsaddle's\nsaddlebag/NgS\nsaddler/NS\nsaddlery/N\nsades/NV\nsadhu/~NS\nsadism/Nmg\nsadist/NSg\nsadistic/~JQ\nsadness/~Nmg\nsadomasochism/Nmg\nsadomasochist/NgSJ\nsadomasochistic/J\nsafari/~NSgVGd\nsafe/~JY^>pNgSV\nsafeguard/~NSgVdG\nsafekeeping/Ng\nsafeness/Nmg\nsafety/~NwSgVU\nsafflower/NwgS\nsaffron/~NwgSJV\nsag/~NSgV\nsaga/~NgS\nsagacious/JY\nsagacity/Nmg\nsage/~JY^>NgSV\nsagebrush/Nmg\nsagged/VtTJ\nsagging/NJV6\nsaggy/J>^\nsago/Nmg\nsaguaro/NgS\nsahib/~NgS\nsaid/~VtTJU\nsail/~NgSVGdz\nsailboard/NgSV>GZ\nsailboarder/Ng\nsailboarding/Ng\nsailboat/~NgS\nsailcloth/Nmg\nsailfish/N09gS      # singular and plural, also has a plural in -s below\nsailing/~V6JNmg\nsailor/~NSg\nsailplane/NgSV\nsaint/~NgSVdY\nsainthood/Nmg\nsaintlike/J\nsaintliness/Nmg\nsaintly/~J>^p\nsaith/VN\nsake/~Ng\nsaki/Ng!_₹\nsalaam/~NSgVdG\nsalable/JNU\nsalacious/JYp\nsalaciousness/Nmg\nsalacity/Ng\nsalad/~NwgS\nsalamander/~NSgV\nsalami/NwSg\nsalary/~NSgVdJ\nsale/~NgSrB\nsaleable/JNU!@_₹\nsaleroom/NS\nsalesclerk/NSg\nsalesgirl/NSg\nsaleslady/NSg\nsalesman/~N0g\nsalesmanship/Nmg\nsalesmen/~N9\nsalespeople/N9g\nsalesperson/N0gS\nsalesroom/NS\nsaleswoman/N0g\nsaleswomen/N9\nsalience/Nmg\nsalient/~JYNSg\nsaline/~JNSg\nsalinity/~Ng\nsaliva/~Nmg\nsalivary/~JN\nsalivate/VGdSn\nsalivation/Nmg\nsallow/J^>pVN\nsallowness/Nmg\nsally/~NSgVdG\nsalmon/~NwSg09JV     # singular and plural, also has a plural in -s below\nsalmonella/N0g\nsalmonellae/N9\nsalon/~NgS\nsaloon/~NSg\nsalsa/~NwgSV\nsalt/~NwSJ^VGde\nsalt's\nsaltbox/NgS\nsaltcellar/NSg\nsalted/~JVtTU\nsalter/~N\nsaltine/NSg\nsaltiness/Ng\nsaltpeter/NgV\nsaltpetre/NgV!@_₹\nsaltshaker/NSg\nsaltwater/~NgJ\nsalty/~J>^p\nsalubrious/Ji\nsalutary/J\nsalutation/NgS\nsalutatorian/NgS\nsalutatory/JN\nsalute/~NSgVdG\nsalvage/~NSgVdG\nsalvageable/JU\nsalvation/~NgV\nsalve/NgSVGd>Z\nsalver/Ng\nsalvo/~NgSV\nsamara/~N0S\nsamarae/N9\nsamarium/Nmg\nsamba/~NgSVdG\nsame/~JpIS\nsame sex/Ng\nsame-sex/J\nsameness/Ng\nsamey/J\nsamizdat/NS\nsamosa/NS\nsamovar/NSg\nsampan/NSg\nsample/~NSgVd>GZz\nsampler/~Ng\nsampling/~VtTNmg\nsamurai/~NSg\nsanatorium/~NSg\nsanctification/~Ng\nsanctify/VGdSn\nsanctimonious/JYp\nsanctimoniousness/Ng\nsanctimony/Ng\nsanction/~NSgVGd\nsanctioned/~VtTU\nsanctity/~Ng\nsanctuary/~NSg\nsanctum/~NSg\nsand/~NgSJ>VGdZ\nsandal/~NSg\nsandalwood/Ng\nsandbag/NSgV\nsandbagged/VtT\nsandbagger/NSg\nsandbagging/V6N\nsandbank/NgS\nsandbar/NSg\nsandblast/VGd>SNgZ\nsandblaster/Ng\nsandbox/~NgSVdG\nsandcastle/NgS\nsander/~Ng\nsandhi/Nmg\nsandhog/NSgV\nsandiness/Ng\nsandlot/NSg\nsandlotter/NgS\nsandman/~N0g\nsandmen/N9\nsandpaper/NmgSVGd\nsandpiper/~NgS\nsandpit/NS\nsandstone/~Nmg\nsandstorm/NSg\nsandwich/~NgSVdGJ\nsandy/~J>^pN\nsane/~JY^>i\nsaneness/Nmg\nsang/~VtSN\nsangfroid/Nmg\nsangria/Nmg\nsanguinary/JN\nsanguine/JYNV\nsanitaria/N9\nsanitarian/JNSg\nsanitarium/N0Sg\nsanitary/~JNiU\nsanitation/~Nmg\nsanitisation/Nmg\nsanitise/VGd>SZ!_₹\nsanitization/Nmg<\nsanitize/VGd>SZ<\nsanity/~Nmgi\nsank/~Vt\nsans/~PJN\nsans serif/NgJ\nsanserif/NJ         # dictionaries prefer: sans serif\nsap/~NSgV\nsapience/Nmg\nsapiens/~N\nsapient/JN\nsapless/J\nsapling/NgS\nsapped/VtT\nsapper/NSg\nsapphire/~NwSgJ\nsappiness/Ng\nsapping/V6N\nsappy/J>^p\nsaprophyte/NSg\nsaprophytic/J\nsapsucker/NSg\nsapwood/~Ng\nsaran/Ng\nsarcasm/~NgS\nsarcastic/~JQ\nsarcoma/NgS\nsarcophagi/~N9\nsarcophagus/~N0gV\nsardine/NgSVJ\nsardonic/JQ\nsarge/NgSV\nsari/~NgS\nsarky/J\nsarnie/NS\nsarong/NSg\nsarsaparilla/NgS\nsartorial/JY\nsash/~NgSV\nsashay/NSgVGd\nsass/NgSVGd\nsassafras/NgS\nsassy/~J>^\nsat/~JVtTN\nsatanic/~J\nsatanical/JY\nsatanism/~Nmg\nsatanist/~NgS\nsatay/~N\nsatchel/NgS\nsate/~VGdSN\nsateen/Ng\nsatellite/~NSgVdG\nsatiable/Ji\nsatiate/VGdSJn\nsatiation/Nmg\nsatiety/Nmg\nsatin/~NmgJV\nsatinwood/NSg\nsatiny/J\nsatire/~NSg\nsatiric/J\nsatirical/~JY\nsatirise/VdSG!_₹\nsatirist/~NSg\nsatirize/VdSG\nsatisfaction/~N0mgE\nsatisfactions/N9\nsatisfactorily/RyU\nsatisfactory/~JNU\nsatisfied/~VtTJU\nsatisfy/~VdSGE\nsatisfying/~JV6U\nsatisfyingly/Ry\nsatnav/NgS\nsatori/Ng\nsatrap/NSg\nsatsuma/~NS\nsaturate/VbdGSNJn\nsaturated/~VtTJU\nsaturation/~Ng\nsaturnine/J\nsatyr/NgS\nsatyriasis/Ng\nsatyric/J\nsauce/~NwgSVGd>Z\nsaucepan/NSgV\nsaucer/~NgV\nsaucily/Ry\nsauciness/Ng\nsaucy/J>^p\nsauerkraut/Nmg\nsauna/NgSVdG\nsaunter/VdGSNg\nsaurian/NJ\nsauropod/NSg\nsausage/~NwgSV\nsaute/VSg\nsauteed/VtT\nsauteing/V6\nsavage/~JY^>pNSgVdG\nsavageness/Nmg\nsavagery/~NSg\nsavanna/~NgS\nsavant/NSg\nsave/~VGd>SNgPCBzZ\nsaved/~VtTJU\nsaver/Ng\nsaving/~NwgV6JP\nsavings/~Nmg\nsavior/~NSg<\nsaviour/NgS!@_₹\nsavor/NgSVdG\nsavoriness/Nmg<\nsavory/J^>pNSg\nsavour/NSgVGd!@_₹\nsavouriness/Nmg!@_₹\nsavoury/J^>pNSg!@_₹\nsavoy/~NgS\nsavvy/~J^>VdGSNg\nsaw/~NSgVtGd\nsawbones/Ng\nsawbuck/NgS\nsawdust/~NmgV\nsawfly/NSg\nsawhorse/NSg\nsawmill/~NgSV\nsawyer/~NSg\nsax/~NgSV\nsaxifrage/NSg\nsaxophone/~NgSV\nsaxophonist/~NSg\nsay/~VbGSNU\nsay's\nsaying/~V6SNwg\nscab/NgSV\nscabbard/~NgSV\nscabbed/VtTJ\nscabbiness/Nmg\nscabbing/V6\nscabby/J^>p\nscabies/Nmg\nscabrous/J\nscad/NgS\nscaffold/~NSgVG\nscaffolding/~NgV6\nscag/NSV\nscagged/VtT\nscalability/Nmg\nscalable/JU\nscalar/~JNgS\nscalawag/NgS\nscald/VdGSNgJ\nscale/~NwSVGde\nscale's\nscaleless/J\nscalene/JN\nscaliness/Ng\nscallion/NgS\nscallop/NSgVGd\nscalp/~NwgSVd>GZ\nscalpel/~NSg\nscalper/Ng\nscaly/~J>^pN\nscam/~NgSV\nscammed/VtT\nscammer/NS\nscamming/V6\nscammy/J>^\nscamp/~NgSV>Z\nscamper/NgVGd\nscampi/Ng\nscan/~VSNg\nscandal/~NwSgV\nscandalise/VdSG!_₹\nscandalize/VdSG\nscandalmonger/NSg\nscandalous/~JY\nscandium/Nmg\nscanned/~JVtT\nscanner/~NSg\nscanning/~V6N\nscansion/NgV\nscant/~J^VdGSNe\nscanter/Jc\nscantily/Ry\nscantiness/Ng\nscantly/R%\nscantness/Ng\nscanty/J>^pS\nscapegoat/~NSgVGd\nscapegrace/NgS\nscapula/~Ng\nscapulae/9\nscapular/NSgJ\nscar/~NgSVGd\nscarab/~NSg\nscarce/~J>Y^p\nscarceness/Ng\nscarcity/~NSg\nscare/~NgSVJ\nscarecrow/~NgSV\nscaremonger/NSgVG\nscarf/~N0gSVdG\nscarification/Ng\nscarify/VdSGn\nscarily/Ry\nscariness/Ng\nscarlatina/Ng\nscarlet/~NgJV\nscarp/~NgSVd>GZ\nscarper/VdG\nscarred/~VtTJ\nscarring/~V6N\nscarves/N9\nscary/~J>^pN\nscat/NgSV\nscathing/~V6JY\nscatological/J\nscatology/Nmg\nscatted/VtT\nscatter/~VGdSNgz\nscatterbrain/NSgd\nscattering/~V6Ng\nscattershot/J\nscatting/V6N\nscatty/JN\nscavenge/VGd>SZ\nscavenger/NgV\nscenario/~NgS\nscenarist/NgS\nscene/~NgSV\nscenery/~Nmg\nscenic/~JNQ\nscenography/Nmg\nscent/~NwgSVe\nscented/~JVtTU\nscenting/V6N\nscentless/J\nscepter/NgSV\nsceptic/NgSJ!_₹\nsceptical/JY!_₹\nscepticism/Nmg!_₹\nsceptre/NgSV!@_₹\nsch/~N\nschadenfreude/Nmg\nschedule/~NSVbdGr\nschedule's\nscheduled/~VtTJNU\nscheduler/~NS\nschema/~N0gS\nschemata/N9\nschematic/~JNSg\nschematically/Ry\nschematise/VGdS!_₹\nschematize/VGdS\nscheme/~NSgVd>GZ\nschemer/Ng\nscherzo/~NgS\nschilling/~NgS\nschism/~NSg\nschismatic/JNSg\nschist/Ng\nschistosomiasis/N\nschizo/NSg\nschizoid/JNgS\nschizophrenia/~Nmg\nschizophrenic/JNSg\nschlemiel/NSg\nschlep/VSNg\nschlepped/VtT\nschlepping/V6\nschlock/Nmg\nschlocky/J>^\nschlong/NgSx\nschmaltz/Ng\nschmaltzy/J^>\nschmo/N0g\nschmoes/N9\nschmooze/Vd>GSNZ\nschmuck/NgSV\nschmutz/Ng\nschnapps/Ng\nschnauzer/NSg\nschnitzel/NSg\nschnook/NgS\nschnoz/NgS\nschnozzle/NSg\nscholar/~NgSY\nscholarship/~NgSV\nscholastic/~NJ\nscholastically/Ry\nscholasticism/N\nschool/~NwSgVGd\nschoolbag/NgS\nschoolbook/NSg\nschoolboy/~NgSJ\nschoolchild/Ng\nschoolchildren/~9g\nschooldays/N\nschooled/~VtTU\nschoolfellow/NSg\nschoolgirl/~NSgV\nschoolhouse/~NSg\nschooling/~NmgV6\nschoolish/JY\nschoolkid/NS\nschoolmarm/NSgV\nschoolmarmish/J\nschoolmaster/~NgSV\nschoolmate/NSg\nschoolmistress/NgS\nschoolroom/NSg\nschoolteacher/~NgS\nschoolwork/Nmg\nschoolyard/NSg\nschooner/~NSg\nschuss/NgSVGd\nschussboomer/NgS\nschwa/NgSV\nsci/~N\nsci-fi/Ng\nsciatic/JN\nsciatica/Nmg\nscience/~NwgSVW\nscientific/~JUQ\nscientism/Nmg\nscientist/~NSg\nscientistic/J\nscimitar/~NSgV\nscintilla/NgS\nscintillate/VdSGn\nscintillation/Ng\nscion/~NgS\nscissor/~NSVbGd\nscleroses/N9\nsclerosis/~Nm0g\nsclerotic/JN\nscoff/NgSVd>GZ\nscoffer/Ng\nscofflaw/NgS\nscold/NgSVdGz\nscolding/NgV6\nscoliosis/Ng\nsconce/NSgV\nscone/~NgSV\nscoop/~NgSVdG\nscoopful/NgS\nscoot/NSVd>GZ\nscooter/~NgV\nscope/~NgSVGd\nscorbutic/J\nscorch/NgSVd>GZ\nscorcher/Ng\nscore/~NgSVGd>Z\nscoreboard/~NSg\nscorecard/~NgS\nscorekeeper/NgS\nscoreless/~J\nscoreline/NS\nscorer/~Ng\nscorn/Vd>GSNgZ\nscorner/Ng\nscornful/JY\nscorpion/~NgS\nscotch/~NgSVdGJ\nscotchs\nscoundrel/NgS\nscour/Vd>GSNZ\nscourer/Ng\nscourge/~NSgVdG\nscout/~NgSVd>GZ\nscouting/~Ng\nscoutmaster/NgS\nscow/~NgSV\nscowl/NgSVdG\nscrabble/~VGd>SNgZ\nscrabbler/Ng\nscrag/NgSV\nscraggly/J>^\nscraggy/J^>\nscram/VSN\nscramble/~VGdSNU\nscramble's\nscrambler/NgS\nscrammed/VtT\nscramming/V6\nscrap/~NgSVd>GZz\nscrapbook/NSgV\nscrape/VSNg\nscraper/Ng\nscrapheap/NSg\nscrapie/N\nscrapped/~VtT\nscrapper/NgS\nscrapping/~V6N\nscrappy/J^>\nscrapyard/NSg\nscratch/~VGdSNgJ\nscratchcard/NS\nscratched/~JVtTU\nscratcher/NgS\nscratchily/Ry\nscratchiness/Ng\nscratchpad/NS\nscratchy/J>^p\nscrawl/NSgVdG\nscrawly/J\nscrawniness/Ng\nscrawny/J^>p\nscream/~NSgVd>GZ\nscreamer/Ng\nscreaming/~V6JYN\nscree/NgSVd\nscreech/NgSVGd\nscreechy/J^>\nscreed/NSVJ\nscreen/~NSgVdGz\nscreening/~NgV6\nscreenplay/~NSgV\nscreensaver/NSg\nscreenshot/~NSV\nscreenwriter/~NSg\nscreenwriting/~Ng\nscrew/~NSVdGU\nscrew's\nscrewball/NgSJ\nscrewdriver/NgS\nscrewiness/Ng\nscrewworm/NSg\nscrewy/J>^p\nscribal/J\nscribble/VGd>SNgZ\nscribbler/Ng\nscribe/~NSVKi\nscribe's\nscrim/NgSV\nscrimmage/~NgSVGd\nscrimp/NSVdGJ\nscrimshaw/VdGSNwg\nscrip/NgS\nscript/~NSgVdGWB\nscripted/~VtTJU\nscriptural/~J\nscripture/~NwgS\nscriptwriter/~NSg\nscrivener/NSg\nscrod/NgV\nscrofula/Ng\nscrofulous/J\nscrog/NS\nscroll/~NSgVGd\nscrollable/J\nscroller/NgS\nscrooge/~NgSV\nscrota/N9\nscrotal/J\nscrotum/N0g\nscrounge/Vd>GSNZ\nscrounger/Ng\nscroungy/J^>\nscrub/~JNwgSV\nscrubbed/VtTJ\nscrubber/NSg\nscrubbing/V6N\nscrubby/J>^N\nscruff/~NSgV\nscruffily/Ry\nscruffiness/Nmg\nscruffy/J>^pN\nscrum/~NOSV\nscrumhalf/N0\nscrumhalves/N9\nscrummage/NSV\nscrummed/VtT\nscrumming/V6\nscrump/NSVGd\nscrumptious/JY\nscrumpy/N\nscrunch/VdGSNg\nscrunchy/NSgJ\nscruple/NgSVGd\nscrupulosity/Ng\nscrupulous/JYpU\nscrupulousness/NgU\nscrutineer/NSV\nscrutinise/VGdS!_₹\nscrutinize/VGdS\nscrutiny/~NgV\nscuba/~NwgSVdG\nscud/~JVSNg\nscudded/VtT\nscudding/V6NJ\nscuff/VdGSNg\nscuffle/~NgSVGd\nscull/NgSVd>GZ\nsculler/Ng\nscullery/NSg\nscullion/NSg\nsculpt/~VGdSN\nsculptor/~NSg\nsculptress/NgS\nsculptural/~J\nsculpture/~NwSgVdG\nscum/~NmgSV\nscumbag/NgS\nscumble/NSVGd\nscummed/VtT\nscumming/NmgV6\nscummy/J^>\nscupper/NgSVdG\nscurf/Ng\nscurfy/J\nscurrility/Nmg\nscurrilous/JYp\nscurrilousness/Nmg\nscurry/VGdSNg\nscurvily/Ry\nscurvy/J^>Nmg\nscutcheon/NSg\nscuttle/NgSVGd\nscuttlebutt/NgV\nscuzziness/Ng\nscuzzy/J^>\nscythe/NSgVdG\nsea/~NSg\nsea lane/NgS\nseabed/~NSg\nseabird/~NgS\nseaboard/~NSg\nseaborne/J\nseacoast/NSg\nseafarer/NSg\nseafaring/JNgm\nseafloor/NSg\nseafood/~Ng\nseafront/NSg\nseagoing/~J\nseagull/~NgSV\nseahawk/NgS\nseahorse/NgS\nseal/~NSVdGrU\nseal's\nsealant/~NwgS\nsealer/NwSg\nsealskin/Nwg\nseam/~NgSVGdn\nseaman/~Ng\nseamanship/Nmg\nseamless/~JY\nseamount/NgS\nseamstress/NgS\nseamy/J>^\nseance/NSgV\nseaplane/~NSg\nseaport/~NgS\nsear/JVGdSNg\nsearch/~NwgSVGd>Z\nsearchable/~JNU\nsearcher/Ngr\nsearching/~V6JYNm\nsearchlight/~NwgSV\nsearing/JYNmV6\nseascape/NSg\nseashell/NSgJ\nseashore/~NSg\nseasick/Jp\nseasickness/Nmg\nseaside/~NgSJ\nseason/~NSgVGdBz\nseasonable/JU\nseasonably/RyU\nseasonal/~JYN\nseasonality/N\nseasoned/~VtTJU\nseasoning/~NwgV6\nseastead/NgS\nseasteading/Ng\nseat/~NSVGdU\nseat belt/NgS\nseat's\nseating/~VNmg\nseatmate/NSg\nseawall/NgS\nseaward/JSg\nseawater/~NmgJ\nseaway/~NSg\nseaweed/~NwgS\nseaworthiness/Ng\nseaworthy/Jp\nsebaceous/~J\nseborrhea/Ng\nseborrhoea/Ng!_₹\nsebum/N\nsec/~NSg\nsec'y/N\nsecant/NSgJ\nsecateurs/N9\nsecede/~VdSG\nsecession/~Nmg\nsecessionist/~NgSJ\nseclude/VGdS\nseclusion/~Nwg\nseclusive/JN\nsecond/~JY>NSgVGdLZ\nsecond-degree/J\nsecondarily/R       # ordinal/sentence adverb\nsecondary/~JNSg\nseconder/Ng\nsecondhand/JN\nsecondment/NS\nsecrecy/~Nmg\nsecret/~NSgVGdJYv\nsecretarial/J\nsecretariat/~NgS\nsecretary/~NSgV\nsecretaryship/Ng\nsecrete/~JVSXn\nsecretion/~Ng\nsecretive/~JYp\nsecretiveness/Ng\nsecretory/JN\nsect/~NgSi\nsectarian/~JNgS\nsectarianism/Nmg\nsectary/NSg\nsection/~NSgVrE\nsectional/~JNgS\nsectionalism/Ng\nsectioned/VtTN\nsectioning/V6N\nsector/~NSgE\nsectoral/J\nsectored/J\nsecular/~JN\nsecularisation/Nmg!_₹\nsecularise/VdSG!_₹\nsecularism/~Nmg\nsecularist/NSg\nsecularization/Nmg\nsecularize/VdSG\nsecure/~JY^>VdSG\nsecured/~VtTJU\nsecurity/~NmSgi\nsecy\nsedan/~NgS\nsedate/JY^>pVdSGnv\nsedateness/Nmg\nsedation/Nmg\nsedative/NSgJ\nsedentary/~JN\nsedge/~Nmg\nsedgy/J\nsediment/~NwgSV\nsedimentary/~JN\nsedimentation/Nmg\nsedition/~Nmg\nseditious/J\nseduce/~Vd>SGZ\nseducer/NgS\nseduction/~NwSg\nseductive/JYp\nseductiveness/Nmg\nseductress/NgS\nsedulous/JY\nsee/~V>SNgZ\nseed/~NSVGdr\nseed's\nseedbed/NgS\nseedcase/NgS\nseeded/~JVtTU\nseeder/NSg\nseediness/Ng\nseedless/J\nseedling/~NgS\nseedpod/NgS\nseedy/J>^p\nseeing/~V6SJNC\nseek/~VG>SNZ\nseeker/~Ng\nseem/~VGdS\nseeming/~V6JYN\nseemliness/NgU\nseemly/J>^pU\nseen/~VTNU\nseep/VGdSN\nseepage/Nmg\nseer/~NgS\nseersucker/Ng\nseesaw/NSgVdGJ\nseethe/VdGSN\nsegfault/NSV\nsegment/~NSgVGd\nsegmentation/Nmg\nsegmented/~VtTJU\nsegregate/JVdGSNen\nsegregated/~VtTJU\nsegregation/~Nmge\nsegregationist/NgSJ\nsegue/~VGdSNg\nsegueing/V6\nseigneur/~NSg\nseignior/NSg\nseine/~NgSVGd>Z\nseiner/Ng\nseismic/~JQ\nseismograph/N0g>Z\nseismographer/NgS\nseismographic/J\nseismographs/N9\nseismography/Nmg\nseismologic/J\nseismological/J\nseismologist/NgS\nseismology/Nmg\nseize/~VGdSU\nseizure/~NgSV\nseldom/~R8          # removed `J` adjective sense is archaic\nselect/~JVSGdev\nselection/~NwSg\nselective/~JY\nselectivity/Ng\nselectman/Ng\nselectmen/9\nselectness/Ng\nselector/~NgS\nselenium/Nmg\nselenographer/NgS\nselenography/Nmg\nself/~INgVJ\nself-awareness/Nmg\nself-deception/Nmg\nself-driving/NgJ\nself-fund/VSdG\nself-hosted/J\nself-indulgent/J\nself-obsessed/J\nself-tapping/J\nselfie/NSgV\nselfish/~JYpU\nselfishness/NgU\nselfless/~JYp\nselflessness/Ng\nselfsame/JN\nsell/~VG>SNrZB\nsell's\nseller's\nselloff/NgS\nsellotape/NSVdG\nsellout/NgS\nseltzer/NgS\nselvage/NgSV\nselves/N\nsemantic/~JNSQ\nsemanticist/NgS\nsemantics/~Ng\nsemaphore/NSgVdG\nsemblance/NSgr\nsemen/~Nmg\nsemester/~NSg\nsemi/~NgS\nsemiannual/JYN\nsemiarid/J\nsemiautomatic/JNgSQ\nsemibreve/NS\nsemicircle/NSgV\nsemicircular/~J\nsemicolon/NgS\nsemiconducting/J\nsemiconductor/~NgS\nsemiconscious/J\nsemidarkness/Ng\nsemidetached/JN\nsemidormant/J\nsemifinal/~NSg\nsemifinalist/NgS\nsemigloss/JNS\nsemimonthly/JNSg\nseminal/~JN\nseminar/~NgSV\nseminarian/NSg\nseminary/~NSgJ\nsemiofficial/J\nsemiotic/JS\nsemiotics/~Nmg\nsemipermeable/J\nsemiprecious/J\nsemiprivate/J\nsemipro/JNS\nsemiprofessional/JNSg\nsemiquaver/NgS\nsemiretired/J\nsemiskilled/J\nsemisolid/JN\nsemistructured/J\nsemisweet/J\nsemitone/NSg\nsemitrailer/NgS\nsemitransparent/J\nsemitropical/J\nsemivowel/NSg\nsemiweekly/JNSg\nsemiyearly/J\nsemolina/Nmg\nsempstress/NgS\nsenate/~NSg\nsenator/~NgS\nsenatorial/~J\nsend/~VG>SNZ\nsender/~Ng\nsendoff/NgS\nsenes\nsenescence/Ng\nsenescent/J\nsenile/JN\nsenility/Nmg\nsenior/~JNSg\nseniority/~Nmg\nsenna/~Ng\nsenor/NgS\nsenora/NSg\nsenorita/NSg\nsensation/~NgS\nsensational/~JY\nsensationalise/VGdS!_₹\nsensationalism/Nmg\nsensationalist/JNgS\nsensationalize/VGdS\nsense/~NwgSVGd\nsensei/NgS\nsenseless/JYp\nsenselessness/Nmg\nsensemaking/Ng\nsensibilities/~N9\nsensibility/~N0wgi\nsensible/~JpN\nsensibleness/Nmg\nsensibly/Ryi\nsensitisation/Nge!_₹\nsensitise/VdSGe!_₹\nsensitive/~JYpNSg\nsensitiveness/Nmg\nsensitivities/N\nsensitivity/~Nwgi\nsensitization/NwSge\nsensitize/VdSGe\nsensor/~NSg\nsensory/~JN\nsensual/~JY\nsensualist/NSg\nsensuality/Nmg\nsensuous/JYp\nsensuousness/Nmg\nsent/~VtTNWrU\nsentence/~NgSVGd\nsententious/JY\nsentience/Ngi\nsentient/~JNi\nsentiment/~NSg\nsentimental/~JY\nsentimentalisation/Ng!_₹\nsentimentalise/VGdS!_₹\nsentimentalism/Nmg\nsentimentalist/NgS\nsentimentality/Nmg\nsentimentalization/Ng\nsentimentalize/VGdS\nsentinel/~NgSV\nsentry/~NSg\nsepal/NgS\nseparability/Nmgi\nseparable/~J\nseparably/Ryi\nseparate/~JYpVGdSNgXnv\nseparateness/Ng\nseparation/~NwgS\nseparatism/~Nmg\nseparatist/~NgSJ\nseparator/~NgS\nseparatrices/9\nseparatrix/NgS\nsepia/NgJ\nsepsis/~Nmg\nsepta/~N\nseptal/J\nseptet/NSg\nseptic/~JN\nsepticaemia/Nmg!_₹\nsepticaemic/J!_₹\nsepticemia/Nmg\nsepticemic/J\nseptuagenarian/NgSJ\nseptum/~Ng\nsepulcher/NgSVGd\nsepulchral/J\nsepulchre/NgSVGd!@_₹\nseq/~N\nsequel/~NSg\nsequence/~NgSVGd>Z\nsequencing/~V6Ng\nsequential/~JYW\nsequester/VdGSN\nsequestrate/VGdSJXn\nsequestration/Nmg\nsequin/NSgVd\nsequinned/JtT\nsequitur/N\nsequoia/~NgS\nseraglio/NgS\nserape/NSg\nseraph/N0g\nseraphic/J\nseraphs/N9\nsere/J^>N\nserenade/~NgSVGd\nserendipitous/J\nserendipity/Nmg\nserene/~JY^>pVN\nsereneness/Nmg\nserenity/~Nmg\nserf/NgS\nserfdom/~Nmg\nserge/~NgV\nsergeant/~NgS\nserial/~JYNSgV\nserialisation/NwSg!_₹\nserialise/VGdSB!_₹\nserialization/NwSg\nserialize/VGdS>B\nseries/~Ng09        # singular and plural\nserif/~NgSJ\nserigraph/N0g\nserigraphs/N9\nserine/~N\nserious/~JYpU\nseriousness/~NmgU\nsermon/~NSgV\nsermonise/VGdS!_₹\nsermonize/VGdS\nserology/Nmg\nserotonin/~Nmg\nserous/~J\nserpent/~NgSV\nserpentine/~JNgV\nserrate/JVdXn\nserration/Ng\nserried/VJ\nserum/~NwgS\nservant/~NgSV\nserve/~NSVGdWre\nserve's/rW\nserver/~NSg\nserverless/J\nservery/NS\nservice/~NgSVE\nserviceability/Nmg\nserviceable/~J\nserviced/~VtT\nserviceman/Ng\nservicemen/~9g\nservicewoman/Ng\nservicewomen/9\nservicing/~V6N\nserviette/NgS\nservile/JN\nservility/Ng\nserving's\nservings/N\nservitor/NgS\nservitude/~Ng\nservlet/NgS\nservo/NgSV\nservomechanism/NSg\nservomotor/NgS\nsesame/~NwSg\nsesquicentennial/JNgS\nsession/~NgSV\nset/~VbtTSNgJri\nset up/V/\nsetback/~NgS\nsetscrew/NSg\nsetsquare/S\nsett/NSVG>BzZ\nsettee/NgS\nsetter/NgV\nsetting/~NwgSV6J\nsettle/~VGdSNrU\nsettle's\nsettlement/~N0gr\nsettlements/~N9\nsettler/~NSg\nsetup/~NgS\nseven/~NgSH\nseventeen/~SgH\nseventeenth/~JN0g\nseventeenths/N9\nseventh/~JN0g\nsevenths/N9\nseventieth/JN0g\nseventieths/N9\nseventy/~SgH\nsever/~VGdS^E\nseveral/~JYDq\nseverance/NSg\nsevere/~JY>p\nsevereness/Ng\nseverity/~NgS\nsew/~VbGdSNr\nsewage/~Ng\nsewer/~NgSV\nsewerage/~Ng\nsewing/~V6Ng\nsewn/~VTr\nsex/~NgSVGd\nsexagenarian/NSgJ\nsexily/Ry\nsexiness/Ng\nsexism/~Ng\nsexist/~JNgS\nsexless/J\nsexologist/NSg\nsexology/Ng\nsexpot/NgS\nsextant/NSg\nsextet/~NgS\nsexting/NmgV6\nsexton/~NgS\nsextuplet/NSg\nsexual/~JYN\nsexuality/~Nmg\nsexualize/VGdS\nsexy/~J^>p\nsf/~N\nsh/~\nshabbily/Ry\nshabbiness/Ng\nshabby/J^>pV\nshack/~NgSVdGJ\nshackle/NSVGdU\nshackle's\nshad/~NgSGdz\nshade/~NwgSV\nshader/NgS\nshadily/Ry\nshadiness/Ng\nshading/~V6Ng\nshadow/~NSgJVGd\nshadowban/NgSV\nshadowbanned/VtTJ\nshadowbanning/V6NJ\nshadowbox/NSVGd\nshadowy/~J>^\nshady/~J>^p\nshaft/~NgSVdG\nshag/NgSVJ\nshagged/JVtT\nshagginess/Ng\nshagging/V6NJ\nshaggy/~J^>p\nshah/~Ng\nshahs/N\nshakable/J\nshake/~VG>SNgZ\nshakedown/NSgJ\nshaken/~VJNU\nshakeout/NgS\nshaker/~NgS\nshakeup/NgS\nshakily/Ry\nshakiness/Nmg\nshaky/~J>^p\nshale/~NmgV\nshall/~A\nshallot/NgS\nshallow/~J^Y>pNgSV\nshallowness/Nmg\nshalom/~NV\nshalt/V\nsham/~JNgSVGd\nshaman/~NSg\nshamanic/~J\nshamanism/~Nmg\nshamanistic/J\nshamble/VGdSNg\nshambles/NgV\nshambolic/J\nshame/~NwgSJV\nshamefaced/JY\nshameful/~JYp\nshamefulness/Ng\nshameless/~JYp\nshamelessness/Nmg\nshammed/VtT\nshamming/V6\nshampoo/NwgSVGd>Z\nshampooer/Ng\nshamrock/~NwgS\nshan't/VA\nshandy/NSJ\nshanghai/~VdGSN\nshank/~NgSVdGJ\nshantung/Ng\nshanty/NSgJV\nshantytown/NSg\nshape/~NwSVGdr\nshape's\nshaped/~JVtTU\nshapeless/JYp\nshapelessness/Ng\nshapeliness/Ng\nshapely/J^>p\nshapeshift/VdSG\nshard/~NgSVGd\nshare/~NgSVGd>Zr\nshareable/JN\nsharecrop/VS\nsharecropped/VtT\nsharecropper/NgS\nsharecropping/NV6\nshareholder/~NSg\nshareholding/~JNS\nsharer/Ng\nshareware/Nmg\nsharia/~Ng\nshariah/N\nshark/~NgSVdG\nshark-infested/J\nsharkskin/Ng\nsharp/~JY^>pNgSVdGnXZ\nsharpen/VdGSr\nsharpener/NgS\nsharper/~JNg\nsharpie/NgS\nsharpish/J\nsharpness/~Ng\nsharpshooter/~NSg\nsharpshooting/NgV\nshatter/~VGdSNg\nshatteringly/Ry\nshatterproof/JV\nshave/~VGd>SNgZz\nshaven/JVU\nshaver/Ng\nshaving/~NgV6\nshawl/~NgSV\nshay/~NgS\nshe/~Ia3s*          # I~pronoun a:personal 3:person .~singular s~subject *:3rd pers. sing. subj.\nshe'd/\nshe'll/\nshe's/\nsheaf/~NgV\nshear/~Vd>GSNgJZ\nshearer/~Ng\nsheath/~N0gVz\nsheathe/VGdSU\nsheathing/NgV\nsheaths/N9\nsheave/NSgVdG\nshebang/NgS\nshebeen/NSV\nshed/~VtTSNg\nshedding/~V6N\nsheen/~JNgV\nsheeny/NJ^>\nsheep/~N09g         # singular and plural\nsheepdog/NgSV\nsheepfold/NSg\nsheepherder/NgS\nsheepish/JYp\nsheepishness/Nmg\nsheepskin/NwgS\nsheer/~J^>pNgSVdG\nsheerness/Nmg\nsheet/~NgSVG\nsheeting/~NgV\nsheetlike/J\nsheetrock/Nmg\nsheik/N0gS@\nsheikdom/NgS\nsheikh/~N0g\nsheikhs/N9\nsheila/~NS\nshekel/NSg\nshelf/~N0g\nshell/~NwgSVd>G\nshellac/NwgSV\nshellacked/JtT\nshellacking/V6SNg\nshellfire/Ng\nshellfish/~N09gS    # singular and plural, also has a plural in -s\nshelter/~NgSVGd\nshelve/VbGdS\nshelves/VhN9\nshelving/JV6Nmg\nshenanigan/NSg\nshepherd/~NSgVdG\nshepherdess/NgS\nsherbet/NwSg\nsheriff/~NSgV\nsherry/~NwSg\nshew/VGdSN\nshewn/V\nshh/NV\nshiatsu/Nmg\nshibboleth/N0g\nshibboleths/N9\nshield/~NgSVd\nshielding/NgV6\nshift/~NgSVGd\nshifter/~NgS\nshiftily/Ry\nshiftiness/Nmg\nshiftless/JYp\nshiftlessness/Nmg\nshifty/J>^p\nshiitake/NwSg\nshill/NgSVGdz\nshillelagh/N0g\nshillelaghs/N9\nshilling/~N0wgV6\nshillings/N9g\nshim/NgSV\nshimmed/JVtT\nshimmer/VdGSNg\nshimmery/J\nshimming/V6N\nshimmy/~NSgVdG\nshin/~NgSVGd>Z\nshinbone/NSg\nshindig/NSg\nshine/~VSNwg\nshiner/~NgS\nshingle/~NSgVdG\nshinguard/NgS\nshininess/Nmg\nshinned/VtT\nshinning/V6\nshinny/VdGSN\nshinsplints/N9g\nshiny/~J^>pN\nship/~NSVrL\nship's\nshipboard/JNgS\nshipbuilder/NSg\nshipbuilding/~Nmg\nshipload/NSg\nshipmate/NSg\nshipment/~N0gr\nshipments/~N9\nshipowner/NgS\nshippable/J\nshipped/~JVtTr\nshipper/NSg\nshipping/~NmgV6\nshipshape/J\nshipwreck/~NgSVGd\nshipwright/NgS\nshipyard/~NSg\nshire/~NgSV\nshirk/VGd>SNZ\nshirker/Ng\nshirr/VGdSNgz\nshirring/NgV6\nshirt/~NgSVGd\nshirtfront/NSgV\nshirting/Ng\nshirtless/J\nshirtsleeve/NSg\nshirttail/NSg\nshirtwaist/NgS\nshirty/J\nshit/~NwSgJVx\nshitcoin/NgSx\nshite/NgSJVdGx!₹\nshitfaced/Jx\nshitfest/NgSx\nshithead/NSx\nshitless/Jx\nshitload/NSx\nshitpost/NgSdGx\nshitted/VtTx\nshitting/NV6Jx\nshitty/J>^x\nshiv/~NgSV>Z\nshiver/VdGNg\nshivery/J\nshoal/~JNgSVGd\nshoat/NgS\nshock/~NwgS☁J>GdZ\nshocker/~Ng\nshocking/~JYV6N\nshockproof/JV\nshod/JVtTU\nshoddily/Ry\nshoddiness/Ng\nshoddy/J>^pNg\nshoe/~NgSV\nshoehorn/NgSVGd\nshoeing/V6N\nshoelace/~NgS\nshoemaker/~NSg\nshoeshine/NSg\nshoestring/NSgJV\nshoetree/NgS\nshogun/~NgS\nshogunate/~Ng\nshone/~V\nshonky/J\nshoo/VGdSI\nshook/~NVtJ\nshoot/~VG>SNgZz\nshooter/~NgS\nshooting/~V6NgJ\nshootout/~NgS\nshop/~NgSV\nshopaholic/NgS\nshopfitter/NS\nshopfitting/N\nshopfront/NS\nshophouse/NgS\nshopkeeper/NgS\nshoplift/NSVd>GZ\nshoplifter/NgS\nshoplifting/NmgV6\nshoppe/NgSGd>Z\nshopper/Ng\nshopping/~V6Nmg\nshoptalk/Ng\nshopworn/J\nshore/~NgSVGd\nshorebird/NSg\nshoreline/~NgS\nshoreman/N0g\nshoremen/N9\nshoring/V6Ng\nshort/~J^Y>pNgSVGdPXn\nshort circuit/NgSVdG\nshort-circuit/lSdG\nshort-lived/J\nshort-term/JR\nshortage/~NgS\nshortboard/NgS\nshortbread/Ng\nshortcake/NgS\nshortchange/VdSG\nshortcoming/NgS\nshortcrust/J\nshortcut/~NgSVtTB\nshortcutting/NgV6\nshorten/~VGdz\nshortener/NgS\nshortening/~NgV6\nshortfall/NgS\nshorthand/~NgVd\nshorthorn/JNgS\nshortish/J\nshortlist/~NSVdG\nshortness/Ng\nshortsighted/JYp\nshortsightedness/Ng\nshortstop/~NgSV\nshortsword/NSg\nshortwave/~JNgS\nshorty/NSgI\nshot/~JNgSVtT\nshotgun/~NSgV\nshotgunned/VtT\nshotgunning/V6\nshould/~A\nshould've/VA\nshoulder/~NgSVdG\nshoulder to shoulder/R\nshoulder-to-shoulder/R\nshouldn't/VA\nshout/~NgSVGd>Z\nshout-out/NS\nshouter/Ng\nshove/VGdSNg\nshovel/~NgSVdG\nshovelful/NSg\nshovelled/VtT!@_₹\nshovelling/V6N!@_₹\nshovelware/Nmg\nshow/~VbGd>SNgzZ\nshow off/V/\nshowbiz/~Ng\nshowboat/NgSVdG\nshowcase/~NgSVGd\nshowdown/~NgS\nshower/~NgVdG\nshowerproof/JV\nshowery/J\nshowgirl/NgS\nshowground/NS\nshowily/Ry\nshowiness/Ng\nshowing/~V6Ng\nshowjumping/Ng\nshowman/N0g\nshowmanship/Ngm\nshowmen/N9\nshown/~VT\nshowoff/NSg\nshowpiece/NSg\nshowplace/NSg\nshowroom/~NgSV\nshowrunner/NgS\nshowstopper/NgS\nshowstopping/J\nshowtime/~Nmg\nshowy/~J^>p\nshpt/N\nshrank/~VN\nshrapnel/~Ng\nshred/NgSVJ\nshredded/~VtTJ\nshredder/NgS\nshredding/NmV6\nshrew/~NgSV\nshrewd/~J>Y^p\nshrewdness/Ng\nshrewish/J\nshriek/NgSVdG\nshrift/Ng\nshrike/~NgS\nshrill/J^>pVdGSN\nshrillness/Nmg\nshrilly/JRy\nshrimp/~NwgS09Vd>GZ # singular and plural, also has a plural in -s\nshrine/~NgSV\nshrink/~VGSNgB\nshrinkage/Nmg\nshrinker/NgS\nshrinkflation/Nmg\nshrive/VGdS\nshrivel/VbSGd\nshrivelled/JVtT!@_₹\nshrivelling/V6N!@_₹\nshriven/V\nshroud/~NgSVGd\nshrub/~NgSV\nshrubbery/NSg\nshrubby/J>^\nshrug/NgSVb\nshrugged/VtT\nshrugging/V6N\nshrunk/~VJn\nshtick/NgS\nshuck/NgSVGd\nshucks/NSV\nshudder/VdGSNg\nshuffle/~NgSVGdr\nshuffleboard/NSg\nshuffler/NSg\nshun/~VS\nshunned/~VtT\nshunning/V6N\nshunt/VdGSNg\nshush/VdSG\nshut/~VbtTSJN\nshut down/V/\nshut off/V/\nshutdown/~NSg\nshuteye/Ng\nshutoff/NSg\nshutout/~NSg\nshutter/~NSgVdG\nshutterbug/NgS\nshutting/~V6N\nshuttle/~NSgVdG\nshuttlecock/NgSVGd\nshy/~J^Y>VGdSNg\nshyer/JcN\nshyest/Ju\nshyness/Ng\nshyster/NSgV\nsibilant/JNSg\nsibling/~NSg\nsibyl/NgS\nsibylline/JN\nsic/~VS\nsicced/VtT\nsiccing/V6\nsick/~J^Y>pNSVGdXn\nsickbay/NS\nsickbed/NSg\nsicken/VdG\nsickening/V6JYN\nsickie/NgS\nsickish/J\nsickle/~NgSVJ\nsickly/~J^>V\nsickness/~NwgS\nsicko/~NgSJ\nsickout/NSg\nsickroom/NgS\nside/~NSJVGdr\nside's\nsidearm/NSgV\nsidebar/~NSgV\nsideboard/NSgV\nsideburns/Ng\nsidecar/NSg\nsidekick/~NSg\nsidelight/NgS\nsideline/~NSgVdG\nsideload/VdGS\nsidelong/J\nsideman/~Ng\nsidemen/9\nsidepiece/NgS\nsidereal/J\nsidesaddle/NgS\nsideshow/~NgS\nsidesplitting/J\nsidestep/NgSV\nsidestepped/VtT\nsidestepping/V6N\nsidestroke/NSgdG\nsideswipe/NSgVdG\nsidetrack/NSgVdG\nsidewalk/~NgS\nsidewall/NgS\nsideways/~NJ\nsidewinder/NSg\nsiding/~NgSV6\nsidle/VGdSNg\nsiege/~NgSV\nsienna/NgJ\nsierra/~NgS\nsiesta/NgSV\nsieve/NgSVGd\nsift/VGd>SNZ\nsifted/JVtTU\nsifter/Ng\nsigh/~VGdNg\nsighs/NVh\nsight/~NwgSVGdz\nsighting/~NgV6\nsightless/J\nsightly/J^>U\nsightread/Vb\nsightseeing/~NgV6\nsightseer/NgS\nsigma/~NgS\nsign/~NSVGdrWe\nsign in/V/\nsign off/V/\nsign on/V\nsign-on/NgS\nsign out/V/\nsign up/V/\nsign-up/NgS\nsign's/e\nsignage/~Nmg\nsignal/~NgSVd>GJYZ\nsignaler/Ng\nsignalisation/N!_₹\nsignalise/VGdS!_₹\nsignalization/Ng\nsignalize/VGdS\nsignalled/VtT!@_₹\nsignaller/NgS!@_₹\nsignalling/V6N!@_₹\nsignalman/Ng\nsignalmen/9\nsignatory/~NSgJ\nsignature/~NgSJ\nsignboard/NgS\nsigned/~JVtTU\nsigner/~NgSe\nsignet/~NgS\nsignificance/~Ngi\nsignificant/~JYNi\nsignification/Ng\nsignify/~VdSGXn\nsigning's/e\nsignings/~N9\nsignor/N0gSW\nsignora/N0Sg\nsignore/N9\nsignori/N9\nsignorina/N0gS\nsignorine/N9\nsignpost/NSgVGd\nsilage/NgV\nsilence/~NSgVd>GZ\nsilencer/Ng\nsilent/~J>Y^NgS\nsilhouette/~NSgVdG\nsilica/~Ng\nsilicate/~NgS\nsiliceous/J\nsilicon/~NSg\nsilicone/~NgVJ\nsilicosis/Ng\nsilk/~NwgSVn\nsilkily/Ry\nsilkiness/Ng\nsilkscreen/NSgVd    # past form used re pcb's\nsilkworm/~NgS\nsilky/~J^>pN\nsill/~NgSJ\nsilliness/Ng\nsilly/~J^>pNSg\nsilo/~NgSVdG\nsilovik/NgS\nsiloviki/9\nsilt/~NgSVGd\nsilty/J^>\nsilver/~NmgSJVGd\nsilverfish/N09gS    # singular and plural, also has a plural in -s\nsilverish/J\nsilversmith/Ng\nsilversmiths/N\nsilverware/~Nmg\nsilvery/~J\nsim/~NSgV\nsimian/JNgS\nsimilar/~JYN\nsimilarity/~NSgE\nsimile/NgS\nsimilitude/NgE\nsimmer/VGdSNg\nsimonise/Vb!_₹\nsimonize/VbdSG\nsimonized/VtT!_₹\nsimonizes/Vh!_₹\nsimonizing/V6!_₹\nsimony/Ng\nsimp/NSgVdG\nsimpatico/J\nsimper/VbGdSNg\nsimpering/JYV6N\nsimple/~J^>pNV\nsimpleminded/J\nsimpleness/Ng\nsimpleton/NSg\nsimplex/~JN\nsimplicity/~NwgS\nsimplification/~NwSg\nsimplify/~VdSGXn\nsimplistic/~JQ\nsimply/~Ry\nsimulacra/N9\nsimulacrum/N0S\nsimulate/~VdSGJEn\nsimulation/~Nw0gE\nsimulations/~N9\nsimulator/~NgSE\nsimulcast/~NgSVGd\nsimultaneity/Ng\nsimultaneous/~JY\nsin/~NSgVr\nsince/~PC\nsincere/~JY^i\nsincerer/Jc\nsincerity/~Nmgi\nsine/~NgS\nsinecure/NgSJV\nsinew/NwgSV\nsinewy/J\nsinful/~JYp\nsinfulness/Ng\nsing/~VbGd>SNgYBZ\nsingalong/NSJ\nsinge/VSNg\nsingeing/V6N\nsinger/~Ng\nsinging/~NgJV6\nsingle/~JpN0gSVGd\nsingle-handedly/Ry\nsingleness/Ng\nsingles/~JN9gVh\nsinglet/NS\nsingleton/~NSg\nsingletree/NSg\nsingsong/NSgJVdG\nsingular/~JYNSg\nsingularity/~NSg\nsingulative/NSgJ\nsinister/~J\nsink/~VG>SNgBZ\nsinkable/JU\nsinker/Ng\nsinkhole/NSgV\nsinless/J\nsinned/VtT\nsinner/~NgS\nsinning/V6N\nsinology/N\nsinuosity/Ng\nsinuous/JY\nsinus/~NgS\nsinusitis/Ng\nsinusoidal/~JN\nsip/~NSgV\nsiphon/~NgSVGd\nsipped/VtT\nsipper/NSg\nsipping/V6N\nsir/~NSgVXn\nsire/~NgSVGde\nsiren/~NgVJ\nsirloin/NSg\nsirocco/NSg\nsirrah/N\nsirree/Ng\nsirtuin/NgS         # enzyme\nsis/~NgSI\nsisal/Ng\nsissified/JV\nsissy/NSgJ^>V\nsister/~NSgVr\nsisterhood/~NgS\nsisterliness/Ng\nsisterly/Jp\nsit/~VbSN\nsitar/NSg\nsitarist/NgS\nsitcom/~NSg\nsite/~NgSVGd\nsitemap/NSg\nsitewide/JR\nsitter/NSg\nsitting/~NSgV6J\nsitu/~N\nsituate/VdSGJXn\nsituation/~Ng\nsituational/~J\nsix/~NgSH\nsix-footer/NgS\nsix-pack/NgS\nsixfold/J\nsixpence/NgS\nsixshooter/Ng\nsixteen/~SgH\nsixteenth/~JN0g\nsixteenths/N9\nsixth/~JN0gV\nsixths/N9\nsixtieth/JN0g\nsixtieths/N9\nsixty/~SgH\nsizable/~J\nsize/~NwSVGdr\nsize's\nsizeable/J!_₹\nsizer/N\nsizing/NgV6\nsizzle/Vd>GSNgZ\nska/~Nmg\nskate/~NgSVGd>JZ\nskateboard/~NgSVd>GZ\nskateboarder/Ng\nskateboarding/~VNmg\nskater/~Ng\nskating/~V6Ng\nskedaddle/VGdSNg\nskeet/NgV>Z\nskein/NgSV\nskeletal/~NJ\nskeleton/~NSgV\nskeptic/~NSgJ<\nskeptical/~JY<\nskepticism/~Nmg<\nsketch/~Vd>GSNgJZ\nsketchbook/NS\nsketcher/Ng\nsketchily/Ry\nsketchiness/Nmg\nsketchpad/NS\nsketchy/J>^p\nskew/~Vd>GSJNgZ\nskewbald/JNS\nskewer/NgVdGJ\nski/~NSgVGd>Z\nskibob/NSV\nskid/~NgSV\nskidded/VtT\nskidding/V6N\nskidpan/NS\nskier/~Ng\nskiff/NSgV\nskiffle/N\nskiing/~V6Ng\nskilful/JYp!@_₹\nskilfulness/Nmg!@_₹\nskill/~Nw☁SJVde\nskill's\nskilled/~JV6U\nskillet/~NSgV\nskillful/~JYU\nskillfulness/Nmg\nskim/VSJNg\nskimmed/VtT\nskimmer/NSgV\nskimming/~V6N\nskimp/VdGSJN\nskimpily/Ry\nskimpiness/Ng\nskimpy/J>^pN\nskin/~NwgSV\nskincare/Ng\nskinflint/NgS\nskinful/N\nskinhead/NgS\nskinless/J\nskinned/~JVtT\nskinniness/Ng\nskinning/V6JN\nskinny/~J^>pNgV\nskint/J\nskintight/J\nskip/~VSNg\nskipjack/Ng\nskipped/~VtT\nskipper/~NSgVdG\nskipping/~V6N\nskirmish/~NgSVGd>Z\nskirt/~NSgVdG\nskit/~NgSV\nskitter/VGdSN\nskittish/JYp\nskittishness/Ng\nskittle/NSV\nskive/Vd>GSNZ\nskivvy/NSgVdG\nskoal/VSg\nskua/~NSV\nskulduggery/Ng\nskulk/NSVd>GZ\nskulker/Ng\nskull/~NSgV\nskullcap/NgS\nskunk/~NSgVdG\nsky/~NwSgVG\nskycap/NSg\nskydive/NSVbd>GZ\nskydiver/Ng\nskydiving/NgV6\nskyjack/VbGd>SNzZ\nskyjacker/Ng\nskyjacking/V6Ng\nskylark/NSgVGd\nskylight/NgS\nskyline/~NSgV\nskyrocket/NSgVGd\nskyscraper/~NSg\nskyward/JS\nskywriter/NSg\nskywriting/Nmg\nslab/~NgSVJ\nslabbed/VtT\nslabbing/V6N\nslack/~NgSJ^Y>pVGdXZn\nslacken/VdG\nslacker/Ng\nslackness/Nmg\nslacks/N9gVh\nslag/NwgSV\nslagged/VtT\nslagging/V6\nslagheap/NS\nslain/~VTN\nslake/VGdSN\nslalom/~NgSVdG\nslam/~VbSNg\nslammed/~VtTJ\nslammer/NSg\nslamming/V6JN\nslander/~NgSVGd>Z\nslanderer/Ng\nslanderous/J\nslang/~NmgV\nslangy/J>^\nslant/~NgSVdGJ\nslanting/JYV6N\nslantwise/J\nslap/~NgSVJ\nslapdash/JV\nslaphappy/J\nslapped/~VtT\nslapper/NS\nslapping/~V6NJ\nslapstick/~Ng\nslash/~NgSVd>GCZ\nslasher/~Ng\nslat/NgSVdG\nslate/~NSgJV\nslather/VdGSN\nslatted/JVtT\nslattern/NSgY\nslaughter/~NgSVd>GZ\nslaughterer/Ng\nslaughterhouse/~NgS\nslave/~NSgVd>GZ\nslaveholder/NgS\nslaver/VdGNg\nslavery/~NgJ\nslavish/JYp\nslavishness/Ng\nslavocracy/NgS\nslaw/Nmg\nslay/~Vd>GSNZz\nslayer/~NgS\nslaying/~V6Ng\nsleaze/NSgV\nsleazebag/NS\nsleazeball/NS\nsleazily/Ry\nsleaziness/Ng\nsleazy/J>^p\nsled/~NgSVb\nsledded/VtT\nsledder/NSg\nsledding/V6N\nsledge/~NSgVdG\nsledgehammer/NSgVGdJ\nsleek/JY^>pVdGSN\nsleekness/Ng\nsleep/~V>GSNw☁gZ\nsleeper/~NgV\nsleepily/Ry\nsleepiness/Ng\nsleepless/~JYp\nsleeplessness/Ng\nsleepover/NSg\nsleepwalk/VGSd>Z\nsleepwalker/Ng\nsleepwalking/NgV6\nsleepwear/Nmg\nsleepy/~J>^pN\nsleepyhead/NgS\nsleet/NmSgVdG\nsleety/J\nsleeve/~NSgVd\nsleeveless/J\nsleigh/~N0gVdGJ\nsleighs/N9Vh\nsleight/NSg\nslender/~J>^Yp\nslenderize/VdSG\nslenderness/Nmg\nslept/~VtT\nsleuth/~N0gVG\nsleuths/N9V\nslew/~NgSVtdG\nslice/~NSgVd>GJZ\nslicer/NgS\nslick/~JY^>pNSgVdGZ\nslicker/JcNgV\nslickness/Ng\nslid/~VtT\nslide/~V>GSNgZ\nslider/NgS\nslideshow/~NgS\nslight/~JY^>pVdGSNg\nslightness/Ng\nslim/~JpNSV\nslime/~NmgV\nsliminess/Nmg\nslimline/J\nslimmed/VtT\nslimmer/JcNS\nslimmest/Ju\nslimming/JV6Ng\nslimness/Nmg\nslimy/J>^pN\nsling/~VGSNg\nslingback/NS\nslingshot/~NSgV\nslink/VGSNJ\nslinky/J>^\nslip/~VSNg\nslipcase/NgS\nslipcover/NgS\nslipknot/NgS\nslippage/NgS\nslipped/~JVtT\nslipper/NSgJV\nslipperiness/Ng\nslippery/~J>^p\nslipping/~V6N\nslippy/J\nslipshod/J\nslipstream/NSgV\nslipway/NSg\nslit/~NgSVJ\nslither/VGdSJNg\nslithery/J\nslitter/N\nslitting/V6N\nsliver/NSgVGd\nslob/NgSV\nslobbed/VtT\nslobber/NmgSVdG\nslobbery/JN\nslobbing/V6\nsloe/NgS\nslog/NgSV\nslogan/~NSg\nsloganeering/VNm\nslogged/VtT\nslogging/V6N\nsloop/~NSg\nslop/NwgSVdG\nslope/~NSgVJ\nslopped/VtT\nsloppily/Ry\nsloppiness/Nmg\nslopping/V6N\nsloppy/~J^>p\nslops/NgVh\nslosh/VdGSN\nslot/~NgSV\nsloth/N0wgV\nslothful/JYp\nslothfulness/Ng\nsloths/N9\nslotted/~JVtT\nslotting/V6N\nslouch/NgSVGd>Z\nsloucher/Ng\nslouchy/J^>\nslough/~N0gVGd\nsloughs/N9Vh\nsloven/NSgY\nslovenliness/Nmg\nslovenly/J^>p\nslow/~JY^>pVdGSN\nslow down/V/\nslowcoach/NS\nslowdown/~NSg\nslowness/Nmg\nslowpoke/NSg\nsludge/~NwgV\nsludgy/J>^\nslue/VGdSNg\nslug/~NgSV\nsluggard/NgS\nslugged/VtT\nslugger/~NSg\nslugging/~V6N\nsluggish/~JYp\nsluggishness/Nmg\nsluice/NSgVdG\nslum/~NgSV\nslumber/NmSgVGd\nslumberous/J\nslumdog/NSg\nslumlord/NgS\nslummed/VtT\nslummer/N\nslumming/V6N\nslummy/J>^\nslump/~VdGSNg\nslung/VtT\nslunk/NV\nslur/~NgSV\nslurp/VdGSNg\nslurred/VtT\nslurring/V6N\nslurry/NSgVJ\nslush/NmgV\nslushiness/Nmg\nslushy/J>^pN\nslut/NgSV\nsluttish/J\nslutty/J>^\nsly/~J^>Y\nslyer/Jc!@_₹\nslyest/Ju!@_₹\nslyness/Nmg\nsmack/~NSgVd>GZ\nsmacker/Ng\nsmall/~J^>pNSgV\nsmallholder/NS\nsmallholding/NS\nsmallish/J\nsmallness/Nmg\nsmallpox/~Nmg\nsmarmy/J>^\nsmart/~Vd>GSJY^pNgnX\nsmarten/VdG\nsmartness/Nmg\nsmartphone/~NSg\nsmarts/VhNg\nsmartwatch/NgS\nsmarty/NSg\nsmartypants/Ng\nsmash/~NgSVd>GZ\nsmasher/Ng\nsmashup/NSg\nsmattering/NgSV\nsmear/~VdGSNg\nsmeary/J>^\nsmell/~NwSgVdG\nsmelliness/Ng\nsmelly/J>^pN\nsmelt/NSgVd>GZ\nsmelter/Ng\nsmidge/NgS\nsmidgen/NgS\nsmilax/Ng\nsmile/~NSgVdG\nsmiley/~JNSg\nsmiling/~JYNmV6\nsmirch/NgSVGd\nsmirk/NSgVdGJ\nsmite/VGSN\nsmith/~N0gV\nsmithereens/Ng\nsmithery/NgS\nsmiths/~N9V\nsmithy/NSgV\nsmitten/JV\nsmock/NSgJVdG\nsmocking/NmgV\nsmog/NwgSV\nsmoggy/J>^\nsmoke/~NwSgVd>GZ\nsmokehouse/NgS\nsmokeless/J\nsmoker/~NgS\nsmokescreen/NSg\nsmokestack/NSg\nsmokey/~JN\nsmokiness/Nmg\nsmoking/~VJNmg\nsmoky/~J>^p\nsmolder/VGdSNg\nsmooch/NgSVdG\nsmoochy/J\nsmooth/~JY^>pNVdG\nsmoothie/NwgS\nsmoothness/Ng\nsmooths/NVh\nsmorgasbord/NSg\nsmote/V\nsmother/VGdSNg\nsmoulder/VGdSNg!@_₹\nsmudge/NSgVdG\nsmudgy/J^>\nsmug/JYpVN\nsmugger/Jc\nsmuggest/Ju\nsmuggle/~VGd>SZ\nsmuggler/~Ng\nsmuggling/~V6Ng\nsmugness/Nmg\nsmurf/NSV\nsmut/NwgSV\nsmuttiness/Nmg\nsmutty/J^>pV\nsnack/~NSgVdG\nsnaffle/NSgVdG\nsnafu/NSgV\nsnag/NgSV\nsnagged/VtTJ\nsnagging/V6N\nsnail/~NSgVdG\nsnake/~NSgVdG\nsnakebite/NgS\nsnakelike/J\nsnakeskin/NmJ\nsnaky/J>^\nsnap/~NSVJU\nsnap's\nsnapdragon/NSg\nsnapped/~VtTU\nsnapper/~NgSV\nsnappily/Ry\nsnappiness/Nmg\nsnapping/~V6NU\nsnappish/JYp\nsnappishness/Nmg\nsnappy/J^>p\nsnapshot/~NSgV\nsnapshotted/VtT\nsnapshotting/V6\nsnare/~NSgVdG\nsnarf/VSdG\nsnark/NSV\nsnarky/J^>\nsnarl/VdGSNU\nsnarl's\nsnarling/JYNV6\nsnarly/J^>\nsnatch/~VGd>SNgZ\nsnatcher/Ng\nsnazzily/Ry\nsnazzy/J^>\nsneak/~NSgVbd>GJZ\nsneaker/NgS\nsneakily/Ry\nsneakiness/Nmg\nsneaking/NJYV6\nsneaky/~J^>pN\nsneer/VdGSNgz\nsneering/JYV6N\nsneeze/VdGSNg\nsnick/Vd>GSNZ\nsnicker/NgVdG\nsnide/J>Y^N\nsniff/Vd>GSNgZ\nsniffable/NJ\nsniffer/Ng\nsniffle/VdGSNg\nsniffy/J>^\nsnifter/VSNg\nsnip/Vd>GSNgZ\nsnipe/~NSgV\nsniper/~NgS\nsnipped/VtTJ\nsnippet/NSgV\nsnipping/V6N\nsnippy/J>^\nsnips/NgVh\nsnit/NgS\nsnitch/VdGSNg\nsnivel/Vd>GSNgZ\nsniveler/Ng\nsnivelled/VtTJ!@_₹\nsniveller/NSg!@_₹\nsnivelling/V6N!@_₹\nsnob/NgS\nsnobbery/Nmg\nsnobbish/JYp\nsnobbishness/Nmg\nsnobby/J>^\nsnog/VSN\nsnogged/VtT\nsnogging/V6\nsnood/NSgV\nsnooker/~NmgSVdG\nsnoop/~Vd>GSNgZ\nsnooper/Ng\nsnoopy/J^>\nsnoot/NSgV\nsnootily/Ry\nsnootiness/Nmg\nsnooty/J^>p\nsnooze/VdGSNg\nsnore/Vd>GSNgZ\nsnorer/Ng\nsnorkel/NgSVGd>Z\nsnorkeler/Ng\nsnorkeling/NgV6\nsnorkelled/VtT!@_₹\nsnorkelling/NV6!@_₹\nsnort/NSgVd>GZ\nsnorter/Ng\nsnot/NwgSV\nsnottily/Ry\nsnottiness/Nmg\nsnotty/J^>pN\nsnout/~NSgV\nsnow/~NwgSVdG\nsnowball/~NSgJVGd\nsnowbank/NSg\nsnowbird/NSg\nsnowblower/NgS\nsnowboard/~NgSVGd>Z\nsnowboarder/Ng\nsnowboarding/~NgV\nsnowbound/J\nsnowcat/NgS\nsnowdrift/NSg\nsnowdrop/NSgV\nsnowfall/~NSg\nsnowfield/NSg\nsnowflake/~NSgV\nsnowiness/Ng\nsnowline/N\nsnowmaking/Ng\nsnowman/N0g\nsnowmen/N9\nsnowmobile/NSgVdG\nsnowplough/N0gV!_₹\nsnowploughs/N9Vh!_₹\nsnowplow/NSgVGd\nsnowplowed/VtT!_₹\nsnowplowing/V6!_₹\nsnowshed/N\nsnowshoe/~NSgV\nsnowshoeing/V6Nmg\nsnowstorm/NSg\nsnowsuit/NSg\nsnowy/~J>^pN\nsnub/~JNgSV\nsnubbed/VtT\nsnubbing/V6N\nsnuck/VtT\nsnuff/~NSgVd>GYZ\nsnuffbox/NgS\nsnuffer/Ng\nsnuffle/VGdSNg\nsnug/JYpNgSV\nsnugged/VtT\nsnugger/NJc\nsnuggest/Ju\nsnugging/V6\nsnuggle/NgSVGd\nsnugness/Ng\nso/~CR%JI           # removed marginal noun sense\nso-called/J\nsoak/VdGSNgz\nsoaking/~V6NgJ\nsoap/~NwgSVdG\nsoapbox/~NgSV\nsoapiness/Ng\nsoapstone/NgV\nsoapsuds/Ng\nsoapy/J>^pN\nsoar/~VdGSNg\nsob/NSgV\nsobbed/VtT\nsobbing/V6NJY\nsober/~JY^>pVSdG\nsoberness/Nmg\nsobriety/Nmgi\nsobriquet/NSg\nsoc/~N\nsoccer/~NgV\nsociability/Nmg\nsociable/JNSg\nsociably/Ry\nsocial/~JYNSg\nsocialisation/Nmg!_₹\nsocialise/VdSG!_₹\nsocialism/~Nmg\nsocialist/~JNSg\nsocialistic/J\nsocialite/~NSg\nsocialization/~Nmg\nsocialize/VdSG\nsocietal/~J\nsociety/~NwSg\nsocio-political/J\nsociocultural/J\nsocioeconomic/~JQ\nsociological/~JY\nsociologist/~NSg\nsociology/~Nmg\nsociopath/Ng\nsociopathic/J\nsociopaths/N\nsociopathy/NwgS\nsociopolitical/J\nsock/~NgSVdGJ\nsocket/~NSgVd\nsockeye/NSg\nsod/~NSgVJ\nsoda/~NwgS\nsodded/VtT\nsodden/JYV\nsodding/V6J\nsodium/~Nmg\nsodomise/VGdS!_₹\nsodomite/NgS\nsodomize/VGdS\nsodomy/~Nmg\nsoever/\nsofa/NgSV\nsoft/~J>Y^pNnX\nsoftback/N\nsoftball/~NgS\nsoftbound/J\nsoftcover/~JN\nsoften/~Vd>GZ\nsoftener/Ng\nsofthearted/J\nsoftness/Ng\nsoftware/~Nmg\nsoftwood/~NSg\nsofty/NSg\nsoggily/Ry\nsogginess/Ng\nsoggy/~J>^p\nsoigne/J\nsoignee/J\nsoil/~NwgSVdG\nsoiled/VtTJU\nsoiree/NSg\nsojourn/~NgSVGd>Z\nsojourner/Ng\nsoju/NwgS\nsol/~NSg\nsolace/~NSgVdG\nsolar/~JN\nsolaria/N9\nsolarium/N0g\nsold/~VtTN\nsolder/NmSgVGd>Zr\nsolderer/NgS\nsoldier/~NgSVdGY\nsoldiery/Nmg\nsole/~JNSgVdGW\nsolecism/NwSg\nsolely/~R%\nsolemn/~J^>Yp\nsolemness/Ng\nsolemnify/VdSG\nsolemnisation/Ng!_₹\nsolemnise/VdSG!_₹\nsolemnity/NSg\nsolemnization/Ng\nsolemnize/VdSG\nsolemnness/Ng\nsolenoid/NgS\nsolicit/~VGdSN\nsolicitation/NwSg\nsolicited/~VtTU\nsolicitor/~NSg\nsolicitous/JYp\nsolicitousness/Ng\nsolicitude/Ng\nsolid/~J>Y^pNSg\nsolid-state/J\nsolidarity/~Ng\nsolidi/~N\nsolidification/Ng\nsolidify/~VdSGn\nsolidity/Ng\nsolidness/Ng\nsolidus/~Ng\nsoliloquies/N9V\nsoliloquise/VdSG!_₹\nsoliloquize/VdSG\nsoliloquy/N0gV\nsolipsism/Ng\nsolipsistic/J\nsolitaire/~NgSJ\nsolitariness/Ng\nsolitary/~NSgJp\nsolitude/~Ng\nsolo/~NgSJVdG\nsoloist/~NgS\nsolstice/~NgS\nsolubility/~Nmgi\nsoluble/~JSg\nsolute/JN0VrXn\nsolute's\nsolutes/N9\nsolution/~NwgS\nsolution's/rE\nsolvable/JiU\nsolve/~VdGSNEr\nsolved/~JVtTU\nsolvency/Nmgi\nsolvent/~NgSJi\nsolver/NSg\nsomatic/J\nsomatosensory/J\nsomber/~JYpV\nsomberness/Nmg<\nsombre/JYpNV!@_₹\nsombreness/Nmg!@_₹\nsombrero/NgS\nsome/~IRJDq\nsomebody/~INSg\nsomeday/~\nsomehow/~R\nsomeone/~INgS\nsomeplace/N\nsomersault/NgSVdG\nsomerset/~NSgV      # archaic word for somersault\nsomersetted/VtT\nsomersetting/V6\nsomething/~IJNSg\nsometime/~J\nsometimes/R8\nsomeway/\nsomeways/R\nsomewhat/~INSR\nsomewhere/~N\nsomnambulism/Nmg\nsomnambulist/NSg\nsomnolence/Nmg\nsomnolent/J\nson/~NSgV\nsonar/~NSg\nsonata/~NSg\nsonatina/NSg\nsong/~NwgS\nsongbird/NSg\nsongbook/~NSg\nsongfest/NSg\nsongster/NgS\nsongstress/NgS\nsongwriter/~NSg\nsongwriting/~Nmg\nsonic/~J\nsonnet/~NSgV\nsonny/~NSg\nsonogram/NSgV\nsonoluminescence/Ng\nsonoluminescent/J\nsonority/Ng\nsonorous/JYp\nsonorousness/Ng\nsonsofbitches/N9\nsoon/~J>^R\nsoonish/R\nsoot/~NgV\nsooth/NgSJ>VdGZ\nsoothe/V\nsoother/NgV\nsoothing/JYV6N\nsoothsayer/NgS\nsoothsaying/Ng\nsooty/~J^>V\nsop/~NSgV\nsoph/N\nsophism/Ng\nsophist/~NgS\nsophistic/JN\nsophistical/J\nsophisticate/VdGSJNgn\nsophisticated/~JVU\nsophistication/~Ng\nsophistry/NwSg\nsophomore/~JNgS\nsophomoric/J\nsoporific/NgSJQ\nsopped/VtT\nsopping/JV6N\nsoppy/J>^\nsoprano/~NgSV\nsorbet/NwSg\nsorcerer/~NgS\nsorceress/NgS\nsorcery/~Ng\nsordid/JYp\nsordidness/Nmg\nsore/~JY^>pNgSV\nsorehead/NgS\nsoreness/Nmg\nsorghum/~Nmg\nsorority/~NSg\nsorrel/~NwSgJ\nsorrily/Ry\nsorriness/Ng\nsorrow/~Nw☁SgVdG\nsorrowful/JYp\nsorrowfulness/Nmg\nsorry/~J^>pNV\nsort/~NSgVGdWr\nsorta/              # 'sort of'\nsortable/J\nsorted/~VtTJU\nsorter/NSg\nsortie/NSgVd\nsortieing/V6\nsot/NSgVJ\nsottish/J\nsou/~NSgH\nsou'wester/N\nsouffle/NwSgV\nsough/VdGNg\nsoughs/V\nsought/~VtTU\nsouk/NS\nsoul/~NwgSV\nsoulful/JYpN\nsoulfulness/Nmg\nsoulless/JYp\nsoulmate/NSg\nsound/~JY^>pNwSgVdGzZ\nsound wave/NgS\nsoundalike/NS\nsoundbar/NS\nsoundbite/NS\nsoundboard/NgS\nsoundcheck/NSV\nsounder/JcNg\nsounding/~NgJV6\nsoundless/JY\nsoundness/NmgU\nsoundproof/JVGdS\nsoundproofing/~VNmg\nsoundscape/NSgV\nsoundtrack/~NSgV\nsoup/~NwgSVdG\nsoupcon/NgS\nsoupy/J>^\nsour/~JY^>pNgSVdG\nsource/~NwSgVdGr\nsource code/Nmg\nsourdough/Nw0g\nsourdoughs/N9\nsourish/J\nsourness/Nmg\nsourpuss/NgS\nsousaphone/NgS\nsouse/NSgVdG\nsouth/~NgJV\nsouthbound/~J\nsoutheast/~NgJ>Z\nsoutheaster/NgY\nsoutheastern/~J\nsoutheastward/JNS\nsoutherly/~NSgJ\nsouthern/~J>NSgZ\nsoutherner/Ng\nsouthernmost/~J\nsouthpaw/NSg\nsouthward/~NgSJ\nsouthwest/~NgJ>Z\nsouthwester/NgY\nsouthwestern/~J\nsouthwestward/JS\nsouvenir/~NSgV\nsovereign/~JNSgV\nsovereignty/~Nmg\nsoviet/~NSgJ\nsow/~NSVGdr\nsow's\nsower/~NSgJ\nsown/~VNr\nsoy/~NmgJV\nsoybean/~NgS\nsozzled/JVtT\nspa/~NSg\nspace/~NwSgVd>GZ\nspace bar/NgS\nspacecraft/~NgS09   # singular and plural, also has a plural in -s\nspaceflight/~NgS\nspaceman/N0g\nspacemen/N9\nspaceport/~NSg\nspacer/Ng\nspaceship/~NSg\nspacesuit/NSg\nspacetime/~N\nspacewalk/~NSgVGd\nspacewoman/Ng\nspacewomen/9\nspacey/J\nspacial/J\nspacier/Jc\nspaciest/Ju\nspaciness/Nmg\nspacing/~VNmgJ\nspacious/~JYp\nspaciousness/Ng\nspade/~NSgVdG\nspadeful/NgS\nspadework/Ng\nspadices/9\nspadix/Ng\nspaghetti/~NmgV\nspake/JV\nspam/~NgSV\nspammed/VtT\nspammer/NSg\nspamming/~V6N\nspan/~NgSV\nspandex/~Ng\nspangle/NSgVdG\nspangly/J\nspaniel/NSgV\nspank/VdGSNgz\nspanking/V6JNg\nspanned/~VtT\nspanner/NSgV\nspanning/~V6N\nspar/~NgSV\nspare/~JY^>pNSgVdG\nspareness/Ng\nspareribs/Ng\nsparing/JYV6NU\nspark/~NSgVdGY\nsparkle/~NSgVd>GZ\nsparkler/Ng\nsparky/~J>^N\nsparred/VtT\nsparring/V6N\nsparrow/~NSg\nsparrowhawk/NS\nsparse/~JY^>pV\nsparseness/Ng\nsparsity/Ng\nspartan/~J\nspasm/~NSgV\nspasmodic/JNQ\nspastic/JNSg\nspat/~VSNg\nspate/~NSgV\nspathe/NSg\nspatial/~JY\nspatted/JVtT\nspatter/VGdSNg\nspatting/V6\nspatula/NSgV\nspavin/NgVd\nspawn/~VdGSNg\nspay/VdGSN\nspeak/~V>GSNZz\nspeakeasy/~NSg\nspeaker/~Ng\nspeakerphone/NS\nspear/~NSgVdGJ\nspearfish/N09gSVGd  # singular and plural, also has a plural in -s\nspeargun/N\nspearhead/~NgSVGd\nspearmint/Ng\nspec/~NgSV\nspecial/~JYpNSgV\nspecialisation/NgS!_₹\nspecialise/VGdS!_₹\nspecialism/NS\nspecialist/~JNgS\nspeciality/NwSg!_₹\nspecialization/~NgS\nspecialize/~VGdS\nspecialty/~NwSg\nspecie/NSg\nspecies/~Ng09       # singular and plural\nspecif/\nspecifiable/J\nspecific/~JNgSQ\nspecification/~Ng\nspecificity/~NgS\nspecified/~JVtTU\nspecify/~Vd>SGXnZ\nspecimen/~NSg\nspecious/JYp\nspeciousness/Ng\nspeck/NSgVdG\nspeckle/NgSVGd\nspecs/N9gV\nspectacle/~N0wSg\nspectacles/~N9g\nspectacular/~JYNgS\nspectate/VdSG\nspectator/~NSg\nspecter/~NgSr\nspectra/~9\nspectral/~J\nspectre/NgS!@_₹\nspectrometer/~NgS\nspectroscope/NgS\nspectroscopic/~J\nspectroscopy/~Ng\nspectrum/~NgS\nspeculate/~VdSGXnv\nspeculation/~Nmg\nspeculative/~JY\nspeculator/NgS\nsped/VtTN\nspeech/~NwgSV\nspeechify/VdSG\nspeechless/JYp\nspeechlessness/Ng\nspeechwriter/NS\nspeed/~Nw☁SgV>GZ\nspeedboat/NSgV\nspeeder/Ng\nspeedily/~Ry\nspeediness/Ng\nspeeding/~VJNg\nspeedo/NgS\nspeedometer/NgS\nspeedrun/NgSV\nspeedrunner/NgS\nspeedrunning/NgV6\nspeedster/NSg\nspeedup/NgS\nspeedway/~NSg\nspeedwell/Ng\nspeedy/~J^>pV\nspeleological/J\nspeleologist/NgS\nspeleology/Ng\nspell/~NSgVd>GzZ\nspell checker/NgS\nspellbind/VG>SZ\nspellbinder/Ng\nspellbound/J\nspellcheck/NgSVdG\nspelldown/NSg\nspeller/Ng\nspelling/~V6Ng\nspelt/VN!_₹\nspelunker/NgS\nspelunking/NgV\nspend/~V>GSNBZ\nspender/Ng\nspending/~NgV\nspendthrift/JNgS\nspent/~JVtTU\nsperm/~NSgV\nspermatozoa/N\nspermatozoon/Ng\nspermicidal/JN\nspermicide/NwgS\nspew/Vd>GSNmgZ\nspewer/Ng\nsphagnum/NgS\nsphere/~NSgV\nspherical/~JY\nspheroid/JNSg\nspheroidal/JN\nsphincter/NgS\nsphinx/~NgSV\nspic/NS\nspice/~NwSgVdG\nspicily/Ry\nspiciness/Ng\nspicule/NgS\nspicy/~J>^p\nspider/~NSgV\nspiderweb/NwgSV\nspidery/J\nspiel/NSgVdG\nspiff/JNSVdG\nspiffy/J^>N\nspigot/NSgV\nspike/~NSgVdG\nspikiness/Nmg\nspiky/J>^p\nspill/~VdGSNg\nspillage/NwgS\nspillover/NSg\nspillway/~NgS\nspilt/JV!_₹\nspin/~VSNg\nspinach/~Ng\nspinal/~JYNSg\nspindle/~NgSVGd\nspindly/J^>\nspine/~NSg\nspineless/JYp\nspinet/NSg\nspinless/J\nspinnaker/NSgV\nspinner/~NgS\nspinneret/NSg\nspinney/NS\nspinning/~NgV6\nspinny/J>^p\nspinster/NSg\nspinsterhood/Nmg\nspinsterish/J\nspiny/~J>^N\nspiracle/NSg\nspiraea/NgS!_₹\nspiral/~NSgJYVGd\nspiralled/VtT!@_₹\nspiralling/V6N!@_₹\nspire/~NSViWr\nspire's\nspirea/NSg\nspirit/~NSVGdi\nspirit's\nspirited/~VJY\nspiritless/J\nspiritual/~JYNgS\nspiritualism/~Ng\nspiritualist/~NgSJ\nspiritualistic/J\nspirituality/~Nmg\nspirituous/J\nspirochaete/NSg!_₹\nspirochete/NSg\nspiry/J\nspit/~NwgSVdG\nspitball/NSgV\nspite/~NSgVPr\nspiteful/JYp\nspitefuller/Jc\nspitefullest/Ju\nspitefulness/Ng\nspitfire/~NSg\nspitted/VtTJ\nspitting/~V6N\nspittle/NmgV\nspittoon/NgS\nspiv/NS\nsplanchnic/J\nsplash/~NgSVGd\nsplash down/V/\nsplashdown/NgS\nsplashily/Ry\nsplashiness/Nmg\nsplashy/J>^p\nsplat/NSgV\nsplatted/VtT\nsplatter/NwSgVGd\nsplatting/V6N\nsplay/~VdGSJNg\nsplayfeet/9\nsplayfoot/Ngd\nspleen/~NSgV\nsplendid/~J>Y^\nsplendor/~NgS<\nsplendorous/J\nsplendour/NwSg!@_₹\nsplenectomy/N\nsplenetic/JN\nsplice/~NSgVd>GZ\nsplicer/Ng\nspliff/NSV\nspline/NSV\nsplint/NSgVGd>Z\nsplinter/~NgVdG\nsplintery/J\nsplit/~VSJNg\nsplitting/~NgSJV6\nsplodge/NSV\nsplosh/VdGSN\nsplotch/NgSVdG\nsplotchy/J^>\nsplurge/VdGSNg\nsplutter/NgSVGd\nspoil/~Vd>GSNeZ\nspoil's\nspoilage/Ng\nspoiled/~VJU\nspoiler/~NgVe\nspoilsport/NgSJ\nspoilt/JV!_₹\nspoke/~NSgVt\nspoken/~JVTU\nspokesman/~N0g\nspokesmen/N9\nspokespeople/N9\nspokesperson/~N0gS\nspokeswoman/~Ng\nspokeswomen/9\nspoliation/Nge\nsponge/~NwSgVd>GZ\nsponger/Ng\nsponginess/Ng\nspongy/J>^p\nsponsor/~NgSVdG\nsponsorship/~NgS\nspontaneity/~Ng\nspontaneous/~JY\nspoof/~NSgJVdG\nspook/~NSgVdG\nspookiness/Ng\nspooky/~J>^p\nspool/NSgVdG>\nspoon/~NSgVdG\nspoonbill/~NgS\nspoonerism/NgS\nspoonfed/VtTJ\nspoonfeed/VSG\nspoonful/NSg\nspoor/NSgVdG\nsporadic/~JQ\nspore/~NSgVdG\nsporran/NS\nsport/~NSgVdGv\nsportiness/Ng\nsporting/~VJYN\nsportive/JYN\nsportscast/NgS>GZ\nsportscaster/~Ng\nsportsman/~N0g\nsportsmanlike/JU\nsportsmanship/~Nmg\nsportsmen/~N9\nsportspeople/~N9\nsportsperson/N\nsportswear/~Nmg\nsportswoman/N0g\nsportswomen/N9\nsportswriter/~NSg\nsporty/~J^>p\nspot/~NgSVJe\nspot on/J\nspotless/JYp\nspotlessness/Nmg\nspotlight/~NSgVGd\nspotlit/V\nspotted/~JVtT\nspotter/NgS\nspottily/Ry\nspottiness/Ng\nspotting/~V6N\nspotty/J^>pN\nspousal/JNgS\nspouse/~NSgV\nspout/~NSgVdG\nsprain/VGdSNg\nsprang/~V\nsprat/NSgV\nsprawl/VGdSNwg\nspray/~NwSVdGr\nspray's\nsprayer/NgS\nspread/~VbtTG>SNwgZB\nspreadeagled/V\nspreader/Ng\nspreadsheet/~NgSV\nspree/~NSgVd\nspreeing/V6\nsprig/NSgV\nsprigged/VtT\nsprightliness/Ng\nsprightly/J>^p\nspring/~VbGSNwg\nspring-load/VSdG\nspringboard/~NgSV\nspringbok/NgS\nspringily/Ry\nspringiness/Ng\nspringlike/J\nspringtime/~Ng\nspringy/J>^p\nsprinkle/Vd>GSNgzZ\nsprinkler/NgV\nsprinkling/V6Ng\nsprint/~NSgVGd>Z\nsprinter/~Ng\nsprite/~NSgV\nspritz/NgSVGd>Z\nspritzer/NwgS\nsprocket/~NgS\nsprog/NSV\nsprout/~NSgVGd\nspruce/~NSgJY^>pVdG\nspruceness/Ng\nsprung/~VJU\nspry/J>Y^\nspryness/Nmg\nspud/NOSgV\nspudger/NgS\nspume/NSgVdG\nspumoni/Ng\nspumy/J\nspun/~V\nspunk/NSgV\nspunky/~J^>\nspur/~NgSV\nspurge/~NgSVdG\nspurious/~JYp\nspuriousness/Ng\nspurn/VdGSN\nspurred/~VtTJ\nspurring/V6N\nspurt/VdGSNg\nsputa/N\nsputnik/~NgS\nsputter/NgSVdG\nsputum/Ng\nspy/~NSgVGd\nspyglass/NgS\nspymaster/NS\nspyware/~Nmg\nsq/~J\nsqq\nsquab/NSgVJ\nsquabble/NgSVGd>Z\nsquabbler/Ng\nsquad/~NSgV\nsquadron/~NgSV\nsqualid/J^>YpN\nsqualidness/Nmg\nsquall/VGdSNg\nsqually/J\nsqualor/Ng\nsquamous/J\nsquander/VGdS\nsquare/~NSgJY^>pVdG\nsquareness/Ng\nsquarish/J\nsquash/~NgSVGd\nsquashy/J^>\nsquat/~JpNSgV\nsquatness/Nmg\nsquatted/VtT\nsquatter/NgSJc\nsquattest/Ju\nsquatting/NV6\nsquaw/NSg\nsquawk/NSgVGd>Z\nsquawker/Ng\nsqueak/NSgVGd>Z\nsqueaker/Ng\nsqueakily/Ry\nsqueakiness/Ng\nsqueaky/J^>p\nsqueal/NSgVGd>Z\nsquealer/Ng\nsqueamish/JYp\nsqueamishness/Ng\nsqueegee/NgSVd\nsqueegeeing/V6\nsqueeze/~VGd>SNgBZ\nsqueezebox/NS\nsqueezer/Ng\nsqueezy/J\nsquelch/VGdSNg\nsquelchy/J\nsquib/NSgV\nsquid/~NSg09V       # singular and plural, also has a plural in -s\nsquidgy/JN\nsquiffy/J\nsquiggle/NSgVdG\nsquiggly/JNgS\nsquint/VGd>SNgJ^\nsquire/~NSgVdG\nsquirm/VGdSNg\nsquirmy/J>^\nsquirrel/~NSgVGd\nsquirrelled/VtT!@_₹\nsquirrelling/V6N!@_₹\nsquirt/NSgVGd\nsquish/NgSVGd\nsquishy/J>^N\nsriracha/N\nssh/~VO\nst/~N\nstab/~NgSVJY\nstabbed/~VtT\nstabber/NgS\nstabbing/~JNgSV6\nstabilisation/Ng!_₹\nstabilise/VdSGe!_₹\nstabiliser/NgS!_₹\nstability/~Nmgi\nstabilization/~Nmge\nstabilize/~VdSGer\nstabilizer/NgS\nstable/~NSgVd>GJ^\nstableman/Ng\nstablemate/NS\nstablemen/9\nstably/NRyU\nstaccato/NgSJ\nstack/~NSgVdGB\nstack overflow/NSg\nstadium/~NgS\nstaff/~NwSVdGr\nstaff's\nstaffer/~NgS\nstaffing/~V6Ng\nstag/~NgSVdGz\nstage/~NSgVdGU\nstagecoach/~NgSV\nstagecraft/Nmg\nstagehand/NgS\nstagestruck/J\nstagflation/NwSg\nstagger/NgSVdG\nstaggering/~VJYN\nstaging/~VNg\nstagnancy/Ng\nstagnant/~JY\nstagnate/VdSGJn\nstagnation/~NwSg\nstagy/J>^\nstaid/JY^>pV\nstaidness/Ng\nstain/~NSgVdG\nstained/~JVU\nstainless/~JNg\nstair/~NSg\nstaircase/~NgSV\nstairway/~NgS\nstairwell/~NSg\nstake/~NSgVdG\nstakeholder/~NgS\nstakeout/NSg\nstalactite/NgS\nstalagmite/NgS\nstale/~J^>pNSVdG\nstalemate/~NSgVdG\nstaleness/Ng\nstalk/~NSgVd>GzZ\nstalker/~Ng\nstalking/~VNg\nstall/~NSVdG\nstall's\nstallholder/NS\nstallion/~NgS\nstalwart/~JYNgS\nstamen/NSg\nstamina/~N9g\nstammer/VGd>SNgZ\nstammerer/Ng\nstammering/NVY\nstamp/~NSgVd>Z\nstampede/~NgSVGd\nstamper/Ng\nstamping/NgS\nstance/~NSgVi\nstanch/J^>VGdSN\nstanchion/NSgV\nstand/~V>GSNgzZ\nstand down/V\nstand-down/NgS\nstand-in/NgS\nstand off/V/\nstand out/V/\nstand-up/JN\nstandalone/~JN\nstandard/~JNgS\nstandard-bearer/NgS\nstandardisation/Ng!_₹\nstandardise/VdSG!_₹\nstandardization/~NgS\nstandardize/~VdSG\nstandby/~N0g\nstandbys/N9\nstandee/NgS\nstander/Ng\nstanding/~VJNg\nstandoff/~NgSJV\nstandoffish/J\nstandout/~JNgS\nstandpipe/NSg\nstandpoint/~NgS\nstandstill/NgS\nstank/VJN\nstanza/~NSg\nstaph/Ng\nstaphylococcal/J\nstaphylococci/N\nstaphylococcus/~Ng\nstaple/~NSgVd>GJZ\nstapler/Ng\nstar/~NgSVd>GZ\nstarboard/~NgV\nstarburst/~NSV\nstarch/~NgSVGdJ\nstarchily/Ry\nstarchiness/Nmg\nstarchy/J^>p\nstardom/~Nmg\nstardust/~Nmg\nstare/~VSNg\nstarer/Ng\nstarfish/~N09gSV    # singular and plural, also has a plural in -s\nstarfruit/Nmg\nstargate/~NgS\nstargaze/Vd>SGZ\nstargazer/~NgS\nstark/~JY^>pVZ\nstarkness/Nmg\nstarless/J\nstarlet/NgSJ\nstarlight/~Ng\nstarling/~NSg\nstarlit/J\nstarred/~VtTJ\nstarring/~V6NJ\nstarry/~J^>\nstarship/NSg\nstarstruck/J\nstart/~NSgVdGr\nstart up/V/\nstarter/~NwgS\nstartingly/Ry\nstartle/VbGdSN\nstartling/~V6JYNm\nstartup/~NgS\nstarvation/~Nmg\nstarve/~VdSGz\nstarveling/NgSJ\nstash/NgSVbdG\nstasis/~Nmg\nstat/~JNgSV\nstate/~NwSgVbd>GnLX\nstatecraft/~Nmg\nstated/~VtTJU\nstateful/JYp\nstatehood/~Nmg\nstatehouse/NgS\nstateless/Jp\nstatelessness/Nmg\nstateliness/Nmg\nstately/~J>^p\nstatement/~NgSJVr\nstatemented/JV\nstatementing/NV\nstateroom/NgS\nstateside/~J\nstatesman/~N0g\nstatesmanlike/J\nstatesmanship/Nmg\nstatesmen/~N9\nstateswoman/N0g\nstateswomen/N9\nstatewide/~JN\nstatic/~JNmSg\nstatically/Ry\nstation/~NgVd>GZ\nstationary/~JN\nstationer/Ng\nstationery/~NmgJ\nstationmaster/NS\nstatism/Nmg\nstatist/JNgs\nstatistic/~JNgSV\nstatistical/~JY\nstatistician/~NSg\nstatuary/NmgJ\nstatue/~NSgV\nstatuesque/J\nstatuette/~NgS\nstature/~NgSd\nstatus/~NgS\nstatute/~NgS\nstatutorily/Ry\nstatutory/~J\nstaunch/~JY^>pVdGSN\nstaunchness/Ng\nstave/~NSgVdG\nstay/~Vd>GSNgJZ\nstay behind/V\nstay-behind/NgS\nstead/~NSgV\nsteadfast/~JYp\nsteadfastness/Nmg\nsteadily/~RyU\nsteadiness/NmgU\nsteady/~J^>pVGdSNg\nsteak/~NwSgV\nsteakhouse/NSg\nsteal/~VGSNgH\nstealer/NgS\nstealth/~NgVJ\nstealthily/Ry\nstealthiness/Ng\nstealthy/J^>p\nsteam/~NwSgVd>GJZ\nsteamboat/~NgSV\nsteamer/~NgV\nsteamfitter/NSg\nsteamfitting/Ng\nsteaminess/Nmg\nsteampunk/NV\nsteamroll/VGd>SZ\nsteamroller/NgVdG\nsteamship/~NgS\nsteamy/J^>p\nsteed/~NSg\nsteel/~NOwSgJVdG\nsteeliness/Ng\nsteelmaker/NS\nsteelworker/NSg\nsteelworks/~Ng\nsteely/~J^>p\nsteelyard/NSg\nsteep/~JY^>pNSgVdGnX\nsteepen/VGd\nsteeple/~NgSV\nsteeplechase/~NgSV\nsteeplejack/NSg\nsteepness/Ng\nsteer/~VdGSNgB\nsteerage/Ng\nsteering/~V6Ng\nsteersman/Ng\nsteersmen/N9\nsteganography/Nmg\nstegosauri/N9\nstegosaurus/N0gS\nstein/~NSg\nstellar/~J\nstem/~NgSV\nstemless/J\nstemmed/~JVtT\nstemming/~V6N\nstemware/Nmg\nstench/NwgSV\nstencil/~NgSVGd\nstencilled/VtTJ!@_₹\nstencilling/V6N!@_₹\nsteno/NSg\nstenographer/NSg\nstenographic/J\nstenography/Nmg\nstenosis/~N\nstent/NSgV\nstentorian/J\nstep/~NgSVi\nstepbrother/NSg\nstepchild/Ng\nstepchildren/9g\nstepdad/NgS\nstepdaughter/~NSg\nstepfather/~NSg\nstepladder/NgS\nstepmom/NgS\nstepmother/~NSg\nstepparent/NSg\nsteppe/~NSgd>GZ\nstepper/Ng\nsteppingstone/NSg\nstepsister/NgS\nstepson/~NgS\nstereo/~NSgJV\nstereogram/NgS\nstereophonic/J\nstereoscope/NgS\nstereoscopic/~J\nstereotype/~NSgVdG\nstereotypical/~J\nsterile/~J\nsterilisation/NgS!_₹\nsterilise/Vd>SGZ!_₹\nsteriliser/Ng!_₹\nsterility/Ng\nsterilization/NSg\nsterilize/Vd>SGZ\nsterilizer/Ng\nsterling/~NgJ\nstern/~JY^>pNSgV\nsternness/Ng\nsternum/NgS\nsteroid/~NgS\nsteroidal/J\nstertorous/J\nstet/NSV\nstethoscope/NgSV\nstetson/NgS\nstetted/VtT\nstetting/V6\nstevedore/NSgV\nstew/~NwgSVdG\nsteward/~NgSVGd\nstewardess/NgS\nstewardship/~Ng\nstick/~NSgV>GJZ\nsticker/~NgVdGJ\nstickily/Ry\nstickiness/Ng\nstickleback/NSg\nstickler/NgS\nstickpin/NgS\nstickup/NgS\nsticky/~J^>pNSgV\nstiff/~JY^>pNSgVdGnX\nstiffen/VGd>Z\nstiffener/Ng\nstiffening/NgV\nstiffness/~Ng\nstifle/~VdGSNz\nstifling/JYVN\nstigma/~NSg\nstigmata/N\nstigmatic/JN\nstigmatisation/Ng!_₹\nstigmatise/VGdS!_₹\nstigmatization/Nge\nstigmatize/VGdSe\nstile/NSgV\nstiletto/NSgV\nstill/~J^RNSVGdi\nstill's\nstillbirth/Ng\nstillbirths/N\nstillborn/~JN\nstilled/JVtTi!_₹\nstiller/~JN\nstilling/V6Ni!_₹\nstillness/Ng\nstilt/~NSgVd\nstilted/JYV\nstimulant/NSgJ\nstimulate/~VdSGnv\nstimulation/~Ng\nstimuli/~N9\nstimulus/~N0g\nsting/~NSgVG>Z\nstinger/~Ng\nstingily/Ry\nstinginess/Ng\nstingray/~NSg\nstingy/J>^p\nstink/VG>SNmgJZ\nstinkbug/NSg\nstinker/Ng\nstinky/J>^N\nstint/~VGdSNg\nstipend/~NSgV\nstipendiary/JNS\nstipple/NSgVdG\nstippling/VNg\nstipulate/VdSGJXn\nstipulation/~Ng\nstir/~VSNg\nstirred/~VtT\nstirrer/NSg\nstirring/~JYV6SN\nstirrup/NSgJ\nstitch/~NSVdGr\nstitch's\nstitchery/Ng\nstitching/NgV\nstoat/NSg\nstochastic/~J\nstock/~NwSVGdJr\nstock's\nstockade/~NSgVdG\nstockbreeder/NgS\nstockbroker/NSg\nstockbroking/Nmg\nstockholder/NSg\nstockily/Ry\nstockiness/Ng\nstockinette/Ng\nstocking/~NSgV\nstockist/NS\nstockpile/~NgSVGd\nstockpot/NSg\nstockroom/NgS\nstocktaking/Ng\nstocky/J>^p\nstockyard/NgS\nstodge/VN\nstodgily/Ry\nstodginess/Ng\nstodgy/J>^p\nstogie/NgS\nstoic/~NSgJ\nstoical/JY\nstoicism/Ng\nstoke/~Vd>GSNZ\nstoker/Ng\nstole/~VtSNg\nstolen/~VTJN\nstolid/J>Y^p\nstolidity/Ng\nstolidness/Ng\nstolon/NgS\nstomach/~N0gVd>GZ\nstomachache/NSg\nstomacher/Ng\nstomachs/N9V\nstomp/~VGdSNg\nstone/~NwSg09Vd>GJZ # weight sense in UK is singular and plural\nstonemason/~NgS\nstoner/~Ng\nstonewall/~NSVGdJ\nstoneware/Nmg\nstonewashed/J\nstonework/~Ng\nstonily/Ry\nstoniness/Ng\nstonkered/VJ\nstonking/JV\nstony/~J^>p\nstood/~VtT\nstooge/NgSV\nstool/~NSgV\nstoop/NSgVGd\nstop/~NSgVU\nstop's\nstopcock/NSgV\nstopgap/NSgJV\nstoplight/NgS\nstopover/NgS\nstoppable/JU\nstoppage/~NwgS\nstopped/~VtTJU\nstopper/NSgVGd\nstopping/~V6NU\nstopple/NSgVdG\nstopwatch/NgS\nstorage/~NmgV\nstore/~NSVdGr\nstore's\nstorefront/~NgS\nstorehouse/NgSV\nstorekeeper/NSg\nstoreroom/NSg\nstorey/NgS!@_₹\nstork/~NSg\nstorm/~NSgVGd\nstormfront/NgS\nstormily/Ry\nstorminess/Nmg\nstormtrooper/NSg\nstormy/~J>^p\nstory/~NSgVd\nstoryboard/~NgSV\nstorybook/~NSgJ\nstorylines/~NgS\nstoryteller/~NgS\nstorytelling/~Ng\nstoup/NSgV\nstout/~J^Y>pNSgV\nstouthearted/J\nstoutness/Ng\nstove/~NSgV\nstovepipe/NSgV\nstow/~NSVdG\nstowage/Ng\nstowaway/NgS\nstraddle/Vd>GSNgZ\nstraddler/Ng\nstrafe/VGdSNg\nstraggle/Vd>GSNZ\nstraggler/Ng\nstraggly/J^>\nstraight/~J^Y>pNSgVRy%Xn\nstraight away/R     # see also `straightaway` n. & adj.\nstraight up/R\nstraight-up/J\nstraightaway/NSgJ\nstraightedge/JNSg\nstraighten/VGd>Z\nstraightener/Ng\nstraightforward/~JYpS\nstraightforwardness/Nmg\nstraightness/Nmg\nstraightway/N\nstrain/~NwSVdGWr\nstrain's\nstrainer/NSgr\nstrait/~JNgSVnX\nstraiten/VGd\nstraitjacket/NSgVGd\nstraitlaced/J\nstrand/~NgSVdG\nstrange/~JY^>pVNZ\nstrangeness/Nmg\nstranger/~JNgV\nstrangle/VGd>SNZ\nstranglehold/NSgV\nstrangler/NgS\nstrangulate/VGdSn\nstrangulation/~Ng\nstrap/~NSVU\nstrap's\nstrapless/JNgS\nstrapped/~VtTJU\nstrapping/V6JNg\nstrata/~N9\nstratagem/NSg\nstrategic/~JS\nstrategical/JY\nstrategics/Ng\nstrategist/~NSg\nstrategize/VdSG\nstrategy/~NwSg\nstrati/N\nstratification/~Nmg\nstratify/VdSGn\nstratosphere/NSg\nstratospheric/J\nstratum/~N0g\nstratus/N0g\nstraw/~NwSgJVGd\nstrawberry/~NwSgJV\nstray/~NSgVGdJ\nstreak/~NgSVd>GZ\nstreaker/Ng\nstreaky/J^>\nstream/~NgSVd>GZ\nstreamable/J\nstreamer/~Ng\nstreamline/~NSVdG\nstreet/~NgSJV\nstreetcar/~NgS\nstreetlamp/NS\nstreetlight/NSg\nstreetwalker/NSg\nstreetwise/J\nstrength/~Nw0gV\nstrengthen/~VGdSr\nstrengthener/NgS\nstrengths/~N9V\nstrenuous/~JYp\nstrenuousness/Nmg\nstrep/Nmg\nstreptococcal/~J\nstreptococci/N9\nstreptococcus/~N0g\nstreptomycin/Ng\nstress/~NwgSVdG\nstressed/~VtTJU\nstressful/~JU\nstressors/N9\nstretch/~VGd>SNwgBZ\nstretcher/~NgVdG\nstretchmarks/N9\nstretchy/J^>\nstrew/VGSdH\nstrewn/V\nstria/N0g\nstriae/N9\nstriated/JV\nstriation/NgS\nstricken/~JV\nstrict/~J>Y^p\nstrictness/Nmg\nstricture/NSg\nstridden/V\nstride/~VGSNg\nstridency/Nmg\nstrident/JYN\nstrife/~Nmg\nstrike/~VG>SNgZz\nstrikebound/J\nstrikebreaker/NSg\nstrikebreaking/V6NJ\nstrikeout/NgSV\nstriker/~NgS\nstriking/~JYV6N\nstring/~NgSVd>GZ\nstringency/Nmg\nstringent/~JY\nstringer/~NgS\nstringification/Nmg\nstringify/VdSG\nstringiness/Ng\nstringy/J^>p\nstrip/~NSgVdG\nstripdown/NgS\nstripe/~NgSV\nstripey/JN\nstripling/NgS\nstripped/~JVtT\nstripper/~NgS\nstripping/~V6Ng\nstriptease/NgSVGd>Z\nstripteaser/Ng\nstripy/J\nstrive/~VGSN\nstriven/V\nstrobe/~NgSV\nstroboscope/NgS\nstroboscopic/J\nstrode/V\nstroke/~NgSVGd\nstroll/~NgSVd>GZ\nstroller/Ng\nstrong/~J>Y^\nstrongbox/NgS\nstronghold/~NgS\nstrongman/~Ng\nstrongmen/9\nstrongroom/NS\nstrontium/~Ng\nstrop/NSgV\nstrophe/NSg\nstrophic/J\nstropped/VtT\nstroppily/Ry\nstropping/V6N\nstroppy/J^>p\nstrove/~V\nstruck/~V\nstruct/NgS\nstructural/~JYN\nstructuralism/N\nstructuralist/JNS\nstructure/~NwSVGdr\nstructure's\nstructured/~JVU\nstrudel/~NSg\nstruggle/~NgSVGd\nstrum/VSNg\nstrummed/VtT\nstrumming/V6N\nstrumpet/NgSV\nstrung/~VUr\nstrut/~VSNgJ\nstrutted/VtT\nstrutting/V6N\nstrychnine/Ng\nstub/~NgSV\nstubbed/VtTJ\nstubbing/V6N\nstubble/NmgV\nstubbly/J\nstubborn/~J>Y^pN\nstubbornness/Ng\nstubby/~J>^N\nstucco/~Nm0gVdG\nstuccoes/N9\nstuck/~VJNU\nstud/~NgSVY\nstudbook/NgS\nstudded/~JVtT\nstudding/V6Ng\nstudent/~NSg\nstudentship/NS\nstudied/~VtTJU\nstudiedly/Ry\nstudio/~NgS\nstudious/JYp\nstudiousness/Ng\nstudly/J>^\nstudy/~VGdSNr\nstudy's\nstuff/~NmSgVGdz\nstuffily/Ry\nstuffiness/Ng\nstuffing/V6Ng\nstuffy/J>^pN\nstultification/Ng\nstultify/VdSGn\nstumble/~NSgVd>GZ\nstumbler/Ng\nstump/~NSgVGd\nstumpy/J^>N\nstun/~VSN\nstung/~VT\nstunk/VT\nstunned/~JVtT\nstunner/NS\nstunning/~JYV6N\nstunt/~NSgVGd\nstuntman/~N\nstuntmen/9\nstupa/~NgS\nstupefaction/Nmg\nstupefy/VdSG\nstupendous/JY\nstupid/~J^>YNgS\nstupidity/~NSg\nstupor/NgSV\nsturdily/Ry\nsturdiness/Ng\nsturdy/~J^>pN\nsturgeon/~NSg\nstutter/~Vd>GSNgZ\nstutterer/Ng\nsty/~NSgV\nstyle/~NSVdGr\nstyle's\nstylesheet/NSg\nstyli/N\nstylisation/Sg!_₹\nstylise/VdSG!_₹\nstylish/~JYp\nstylishness/Nmg\nstylist/~NSg\nstylistic/~JSQ\nstylization/Sg\nstylize/VdSG\nstylus/~NgS\nstymie/NgSVd\nstymieing/V\nstyptic/JNSg\nstyrofoam/NmSg\nsuasion/NgE\nsuave/J>Y^pN\nsuaveness/Ng\nsuavity/Ng\nsub/~NSgVP(\nsubaltern/JNgS\nsubaqua/J\nsubarctic/~ONJ\nsubarea/NgS\nsubarray/NgS\nsubassembly/NgS\nsubatomic/J\nsubbasement/NSg\nsubbed/VtT\nsubbing/V6N\nsubbranch/NgS\nsubcategory/~NSg\nsubclass/~NVG\nsubcognitive/JYN\nsubcommand/NSg\nsubcommittee/~NSg\nsubcompact/NSgJ\nsubconscious/~JYpNg\nsubconsciousness/Ng\nsubcontinent/~NOSg\nsubcontinental/JN\nsubcontract/VdGSNg\nsubcontractor/NgS\nsubculture/~NgSV\nsubcutaneous/~JY\nsubdirectory/NgS\nsubdivide/VGdS\nsubdivision/~NSgV\nsubdomain/NgS\nsubdominant/N\nsubdue/~VdSG\nsubeditor/NS\nsubfamily/~NSg\nsubfield/NgS\nsubflow/NSg\nsubfolder/NgS\nsubframe/NgS\nsubfreezing/J\nsubgroup/~NgSV\nsubhead/NgSGz\nsubheading/Ng\nsubhuman/JNgS\nsubj/N\nsubject/~JNgSVGdv\nsubjecthood/Nmg\nsubjection/Nmg\nsubjective/~JYN\nsubjectivity/~Ng\nsubjectivization/Ng\nsubjoin/VGdSN\nsubjugate/VGdSJn\nsubjugation/~NwSg\nsubjunctive/~JNSg\nsublease/NgSVGd\nsublet/VSNg\nsubletting/V6N\nsublicense/NgSVdG\nsublieutenant/NS\nsublimate/VGdSNn\nsublimation/~Ng\nsublime/~VGd>SJY^N\nsubliminal/~JYN\nsublimity/Ng\nsublingual/JN\nsubmachine/VSNg\nsubmarginal/J\nsubmarine/~J>NgSVZ\nsubmariner/Ng\nsubmerge/VGdS\nsubmergence/Nmg\nsubmerse/VGdSJn\nsubmersible/JNgS\nsubmersion/Ng\nsubmicroscopic/J\nsubmission/~NgSr\nsubmissive/~JYpN\nsubmissiveness/Ng\nsubmit/~VSr\nsubmitted/~jrVtT\nsubmitter/N\nsubmitting/~V6Nr\nsubmodule/NgS\nsubnet/NgSV\nsubnode/NSg\nsubnormal/JN\nsuboptimal/J\nsuborbital/JN\nsuborder/~NgSV\nsubordinate/~JNSgVdGn\nsubordination/~Ngi\nsuborn/VSGd\nsubornation/Ng\nsubpage/NgS\nsubpar/J\nsubparagraph/NgSV\nsubpart/N\nsubplot/~NgSV\nsubpoena/~NgSVGd\nsubpolar/J\nsubprime/JN\nsubprocess/NgS\nsubprofessional/JNSg\nsubprogram/NSg\nsubquery/NSVGd\nsubroutine/NSg\nsubscribe/~VSdGUr\nsubscriber/~NgS\nsubscript/NgSVdGJ\nsubscription/~NwgS\nsubsection/~NgSV\nsubsequence/NgS\nsubsequent/~JYN\nsubservience/Ng\nsubservient/JY\nsubset/~NSgV\nsubshell/NSg\nsubside/VGdS\nsubsidence/~Ng\nsubsidiarity/N\nsubsidiary/~JNSg\nsubsidisation/Ng!_₹\nsubsidise/VGd>SZ!_₹\nsubsidiser/Ng!_₹\nsubsidization/Ng\nsubsidize/VGd>SZ\nsubsidizer/Ng\nsubsidy/~NSg\nsubsist/VSdG\nsubsistence/~Ng\nsubsoil/NgV\nsubsonic/~JN\nsubspace/~N\nsubspecies/~Ng\nsubstance/~NSgV\nsubstandard/J\nsubstantial/~JYNi\nsubstantiate/~VGdSnX\nsubstantiated/~VU\nsubstantiation/NgW\nsubstantive/~JYNSgV\nsubstation/~NgS\nsubstituent/N\nsubstitute/~VGdSNgXn\nsubstitution/~Ng\nsubstrata/N\nsubstrate/~NgSVJ\nsubstratum/Ng\nsubstring/NSgV\nsubstructure/NSg\nsubsume/VdSG\nsubsumption/N\nsubsurface/~NgJ\nsubsystem/~NSg\nsubtask/NSg\nsubteen/JNSg\nsubtenancy/Ng\nsubtenant/NSgV\nsubtend/VSdG\nsubterfuge/NSg\nsubterranean/~J\nsubtext/NSgV\nsubtitle/~NSgVdG\nsubtle/~J^>\nsubtlety/NSg\nsubtly/~Ry\nsubtopic/NSg\nsubtotal/NSgVGdJ\nsubtotalled/VtT!@_₹\nsubtotalling/V6!@_₹\nsubtract/VGSd\nsubtraction/~NwSg\nsubtrahend/NSg\nsubtree/NSg\nsubtropic/NS\nsubtropical/~JN\nsubtropics/N9g\nsubtype/~NgS\nsuburb/~NgS\nsuburban/~JNSg\nsuburbanite/NSg\nsuburbia/Ng\nsubvention/NSgV\nsubversion/Ng\nsubversive/~JYpNSg\nsubversiveness/Ng\nsubvert/~VdGSN\nsubway/~NgSV\nsubwoofer/NgS\nsubzero/J\nsucceed/~VGdS\nsuccess/~NwgSv\nsuccessful/~JYU\nsuccession/~NSg\nsuccessive/~JY\nsuccessor/~NSg\nsuccinct/J>Y^p\nsuccinctness/Nmg\nsuccor/NmSgVGd\nsuccotash/Ng\nsuccour/NgSVGd!@_₹\nsuccubi/N9\nsuccubus/N0g\nsucculence/Nmg\nsucculency/Nmg\nsucculent/~JNSg\nsuccumb/~VGdS\nsuch/~IN\nsuchlike/JIN\nsuck/~NgSVd>GZ\nsucker/~NgVGd\nsuckle/NSVdGz\nsuckling/NgV\nsucky/J\nsucrose/~Nmg\nsuction/~NwSgVdG\nsudden/~JYpN\nsuddenness/Nmg\nsuds/NgV\nsudsy/J^>\nsue/~VdSG\nsuede/~NgJV\nsuet/~Ng\nsuety/J\nsuffer/~Vd>GSZz\nsufferance/Ng\nsufferer/Ng\nsuffering/~JNgV\nsuffice/~VdSG\nsufficiency/~Ngi\nsufficient/~JYi\nsuffix/~NgSVdG\nsuffixation/Ng\nsuffocate/VGdSJn\nsuffocation/Ng\nsuffragan/~NgS\nsuffrage/~Ng\nsuffragette/~NSg\nsuffragist/~NgS\nsuffuse/VdSGJn\nsuffusion/Ng\nsugar/~NwSgVGd\nsugarcane/~Ng\nsugarcoat/VGdS\nsugarless/J\nsugarplum/NgS\nsugary/J>^\nsuggest/~VGSd>v\nsuggestibility/Nmg\nsuggestible/J\nsuggestion/~NwSg\nsuggestive/~JYp\nsuggestiveness/Ng\nsui generis/JRN\nsuicidal/~JN\nsuicide/~NwSgV\nsuit/~NgSVdGB\nsuitability/~NmgU\nsuitableness/Ng\nsuitably/~RyU\nsuitcase/~NSgV\nsuite/~NSg\nsuited/~JVU\nsuiting/VNg\nsuitor/~NgSV\nsukiyaki/Ng\nsulfa/JNg\nsulfate/~NSgV\nsulfide/~NSg\nsulfonamides/N\nsulfur/~NmgSJVdG\nsulfuric/~J\nsulfurous/J\nsulk/VdGSNg\nsulkily/Ry\nsulkiness/Ng\nsulky/J^>pNSg\nsullen/JY^>pNV\nsullenness/Ng\nsullied/JVU\nsully/~VGdSN\nsulphate/NwgSV!@_₹\nsulphide/NgS!@_₹\nsulphur/NmSgVdG!@_₹\nsulphuric/J!@_₹\nsulphurous/J!@_₹\nsultan/~NgS\nsultana/~NSg\nsultanate/~NgS\nsultrily/Ry\nsultriness/Ng\nsultry/J>^p\nsum/~NSgV\nsumac/~NgV\nsummarily/~Ry\nsummarise/VGdS!_₹\nsummarization/NgS\nsummarize/~VGdS\nsummarizer/NgS\nsummary/~JNSg\nsummat/\nsummation/~NgSW\nsummed/~VtT\nsummer/~NwgSVdG\nsummerhouse/NSg\nsummertime/~Ng\nsummery/JN\nsumming/~V6N\nsummit/~NgSVdG\nsummitry/Ng\nsummitted/VtT\nsummitting/V6\nsummon/~Vd>GSNZ\nsummoner/Ng\nsummons/~NgSVGd\nsumo/~Ng\nsump/~NgSV\nsumptuous/JYp\nsumptuousness/Ng\nsun/~ONSgV\nsunbath/N0gSGd>Z\nsunbathe/VN\nsunbather/Ng\nsunbathing/NgV6\nsunbaths/N9\nsunbeam/~NSg\nsunbed/NS\nsunbelt/NSg\nsunblock/NgS\nsunbonnet/NSg\nsunburn/NSgVGd\nsunburst/NgS\nsundae/NgS\nsundeck/NS\nsunder/VdGSN\nsundial/~NSg\nsundown/~NSgV\nsundress/NS\nsundries/Ng\nsundry/JNSI\nsunfish/N09gSV      # singular and plural, also has a plural in -s\nsunflower/~NgS\nsung/~VTU\nsunglasses/~N9g\nsunhat/NS\nsunk/~Vn\nsunken/JT\nsunlamp/NSg\nsunless/J\nsunlight/~NgV\nsunlit/J\nsunned/VtT\nsunniness/Nmg\nsunning/V6\nsunny/~J^>pN\nsunrise/~NSgV\nsunroof/NSg\nsunscreen/NgS\nsunset/~NgSV\nsunshade/NgS\nsunshine/~NmgJ\nsunshiny/J\nsunspot/NSg\nsunstroke/Ng\nsuntan/NgSV\nsuntanned/JVtT\nsuntanning/V6\nsuntrap/NS\nsunup/Ng\nsup/~V>SNgJZ\nsuper/~JNgV(\nsuperabundance/NwgS\nsuperabundant/J\nsuperannuate/VGdSn\nsuperannuation/Nmg\nsuperb/~J>Y^\nsupercar/~NSg\nsupercargo/N0g\nsupercargoes/N9\nsupercharge/VGd>SNZ\nsupercharger/Ng\nsupercilious/JYp\nsuperciliousness/Ng\nsupercity/NSg\nsupercluster/NgS\nsupercomputer/~NgS\nsuperconducting/J\nsuperconductive/J\nsuperconductivity/Ng\nsuperconductor/NSg\nsupercritical/J\nsuperego/NgS\nsupererogation/Ng\nsupererogatory/J\nsuperfast/JR\nsuperficial/~JYN\nsuperficiality/Nmg\nsuperfine/J\nsuperfluity/Ng\nsuperfluous/~JYp\nsuperfluousness/Ng\nsuperfood/NgS\nsuperfund/~NgS\nsuperglue/NV\nsupergrass/NS\nsuperheat/VdSG\nsuperhero/~N0gS\nsuperheroes/~N9\nsuperhighway/NSg\nsuperhuman/~JNY\nsuperimpose/VGdS\nsuperimposition/Ng\nsuperintelligence/NwSg\nsuperintend/VdSG\nsuperintendence/Ng\nsuperintendency/Ng\nsuperintendent/~NSgJ\nsuperior/~JNgS\nsuperiority/~Ng\nsuperlative/~NSgJY\nsuperlinear/JY\nsupermajority/NgS\nsuperman/~Ng\nsupermarket/~NSg\nsupermassive/J\nsupermen/9\nsupermodel/~NSg\nsupermom/NgS\nsupernal/J\nsupernatural/~JYNS\nsupernormal/J\nsupernova/~NgS\nsupernovae/~9\nsupernumerary/NSgJ\nsuperpose/VGdS\nsuperposition/~Ng\nsuperpower/~NSgV\nsupersaturate/VGdSn\nsupersaturation/Ng\nsuperscribe/VGdS\nsuperscript/NgSJV\nsuperscription/Ng\nsupersede/VGdSN\nsuperset/NgSV\nsupersetted/VtT\nsupersetting/NV6J\nsupersize/VGdSJ\nsupersonic/~JN\nsuperspreader/NSg\nsuperstar/~NgS\nsuperstardom/N\nsuperstate/NS\nsuperstition/~NgS\nsuperstitious/JY\nsuperstore/NgS\nsuperstructure/~NgS\nsupertanker/NgS\nsuperuser/NSg\nsupervene/VGdS\nsupervention/Ng\nsupervise/~VGdSXn\nsupervised/~VJU\nsupervision/~Nmg\nsupervisor/~NgS\nsupervisory/~J\nsuperweapon/NgS\nsuperwoman/Ng\nsuperwomen/N9\nsupine/JYN\nsupp/~Nd>GZ\nsupper/~NgV\nsuppertime/N\nsuppl/N\nsupplant/VSdG\nsupple/J^>pVL\nsupplement/~NgSVdG\nsupplemental/~JN\nsupplementary/~JN\nsupplementation/~Nmg\nsuppleness/Ng\nsuppliant/JNSg\nsupplicant/JNgS\nsupplicate/VGdS\nsupplication/Ng\nsupplier/~Ng\nsupply/~VGd>SNgZXn\nsupport/~Vd>GSNwgBZv\nsupportable/JUi\nsupported/~JVU\nsupporter/~Ng\nsuppose/~VGdS\nsupposed/~VJY\nsupposition/NgS\nsuppository/NSg\nsuppress/~VGdSv\nsuppressant/NgS\nsuppressible/J\nsuppression/~NwgS\nsuppressor/~NSg\nsuppurate/VdSGn\nsuppuration/Ng\nsupra/~N\nsuprachiasmatic/J\nsupranational/JN\nsupremacist/~JNgS\nsupremacy/~Ng\nsupreme/~JYVN\nsupremo/NS\nsupt/V\n# sur               # prefixes that are not also words in their own right don't belong in the dictionary\nsurcease/NSgVdG\nsurcharge/NSgVdG\nsurcingle/NSgV\nsure/~J^>p\nsurefire/J\nsurefooted/J\nsurely/R            # adverb of probability/certainty/affirmation; modal adverb\nsureness/Ng\nsurety/NSg\nsurf/~NmgSVd>GZ\nsurface/~NSVGdr\nsurface-to-air/J\nsurface's\nsurfboard/NgSVdG\nsurfeit/JNgSVdG\nsurfer/~NgS\nsurfing/~V6Ng\nsurge/~NSgVdG\nsurgeon/~NgS\nsurgery/~NwSg\nsurgical/~JY\nsurliness/Ng\nsurly/J^>p\nsurmise/NgSVGd\nsurmount/VdGSB\nsurmountable/Ji\nsurname/~NgSV\nsurpass/~VGdS\nsurpassed/~VtTU\nsurplice/NgS\nsurplus/~NgSJV\nsurplussed/VtT\nsurplussing/V6\nsurprise/~NSg☁VdGz\nsurprising/~VJYNU\nsurreal/~JN\nsurrealism/~Ng\nsurrealist/~JNSg\nsurrealistic/JQ\nsurrender/~VdGSNg\nsurreptitious/JYp\nsurreptitiousness/Ng\nsurrey/~NgS\nsurrogacy/Ng\nsurrogate/~NSgJV\nsurround/~VGdSNz\nsurrounding/~VNg\nsurroundings/~Ng\nsurtax/NgSVdG\nsurtitle/NSV\nsurveil/VGdS\nsurveillance/~Ng\nsurvey/~NSVdGr\nsurvey's\nsurveying/~NgV\nsurveyor/~NSg\nsurvivability/Nmg\nsurvivable/J\nsurvival/~NSg\nsurvivalist/NSg\nsurvive/~VdSGB\nsurvivor/~NSg\nsurvivorship/NSg\nsusceptibility/~NwSg\nsusceptible/~JNi\nsushi/~Ng\nsuspect/~VdGSNgJ\nsuspected/~JVU\nsuspend/~VSd>GZ\nsuspender/Ng\nsuspense/~NgJXn\nsuspenseful/J\nsuspension/~Ng\nsuspicion/~NSgV\nsuspicious/~JY\nsuss/NSJVdG\nsuss out/V\nsussed out/V\nsusses out/V\nsussing out/V\nsustain/~VdGSNB\nsustainability/~Nmg\nsustainable/~JNU\nsustainably/Ry\nsustenance/Ng\nsutler/NgS\nsuttee/N\nsuture/~NgSVGd\nsuzerain/NgS\nsuzerainty/~Ng\nsvelte/J^>\nswab/NgSV\nswabbed/VtT\nswabbing/V6N\nswaddle/VdGSN\nswag/VSNg\nswagged/VtT\nswagger/Vd>GSNgJ\nswagging/V6\nswain/~NSg\nswallow/~VGdSNg\nswallowtail/NgS\nswam/~Vt\nswami/~NSg\nswamp/~NSgVGd\nswampland/NwgS\nswampy/~J>^\nswan/~NgSV\nswank/J^>NSgVGd\nswankily/Ry\nswankiness/Nmg\nswanky/J>^pN\nswanned/VtT\nswanning/V6\nswansong/NS\nswap/~VSNg\nswappable/J\nswapped/~VtT\nswapper/NgS\nswapping/~NV6J\nsward/NSgV\nswarf/Nmg\nswarm/~NSgVGd\nswarthy/J^>N\nswash/NgSVGdJ\nswashbuckler/NSg\nswashbuckling/Jg\nswastika/NSg\nswat/~VSNg\nswatch/NgSV\nswath/NgSGd<\nswathe/NgV!@_₹\nswaths/N<\nswatted/VtT\nswatter/NSgVdG\nswatting/V6N\nsway/~NgSVdG\nswayback/Ngd\nswayed/~VJU\nswear/~VG>SNJZ\nswearer/Ng\nswearword/NgS\nsweat/~NwSgVGd>Z\nsweatband/NgS\nsweater/~NgV\nsweatpants/Ng\nsweats/NgV\nsweatshirt/NSg\nsweatshop/NgS\nsweatsuit/NS\nsweaty/J>^N\nswede/~NSgV\nsweep/~VG>SNgZz\nsweeper/Ng\nsweeping/~VNgJY\nsweepings/Ng\nsweepstake/Ng!_₹\nsweepstakes/~Ng\nsweet/~J^Y>pNSgVXn\nsweetbread/NSg\nsweetbrier/NSg\nsweetcorn/N\nsweetened/~VJU\nsweetener/~NgS\nsweetening/NgV\nsweetgrass/NSg\nsweetheart/~NSg\nsweetie/NSg\nsweetish/J\nsweetmeat/NgS\nsweetness/~Ng\nswell/~VGd>SNgJ^z\nswellhead/NgSd\nswelling/~NgV6\nswelter/VGdSNg\nswept/~JVtT\nsweptback/J\nswerve/VGdSNg\nswerving/JNVU\nswift/~J^>YpNSg\nswiftness/Ng\nswig/VSNg\nswigged/VtT\nswigging/V6\nswill/NSgVGd\nswim/~VSNg\nswimmer/~NSg\nswimming/~NgV6\nswimmingly/Ry\nswimsuit/NSg\nswimwear/~Nmg\nswindle/~Vd>GSNgZ\nswindler/Ng\nswine/~NSg\nswineherd/NSg\nswing/~VG>SNgZ\nswingeing/JV\nswinger/Ng\nswinish/J\nswipe/VdGSNg\nswirl/VGdSNg\nswirly/JN\nswish/J^>NgSVGd\nswitch/~NgSVd>GJZB\nswitchback/NgSV\nswitchblade/NSgV\nswitchboard/NSg\nswitcher/Ng\nswitchover/N\nswivel/NgSVdG\nswivelled/VtT!@_₹\nswivelling/V6N!@_₹\nswiz/N\nswizz/NV\nswizzle/NSVdG\nswollen/~JV\nswoon/NSgVGd\nswoop/VGdSNg\nswoosh/VdGSNg\nsword/~NSgV\nswordfish/~N09gSV   # singular and plural, also has a plural in -s\nswordplay/Ng\nswordsman/~N0g\nswordsmanship/Nmg\nswordsmen/N9\nswore/~V\nsworn/~VJ\nswot/VSN\nswotted/VtT\nswotting/V6\nswum/VT\nswung/~VT\nsybarite/NSgJ\nsybaritic/J\nsycamore/~NgS\nsycophancy/Nmg\nsycophant/NSgV\nsycophantic/J\nsyllabic/~JN\nsyllabicate/VGdSn\nsyllabication/Nmg\nsyllabification/Nmg\nsyllabify/VdSGn\nsyllable/~NgSV\nsyllabub/NS\nsyllabus/~NgS\nsyllogism/NgS\nsyllogistic/J\nsylph/Ng\nsylphic/J\nsylphlike/J\nsylphs/N\nsylvan/~JN\nsymbioses/N9V\nsymbiosis/N0g\nsymbiotic/~JNQ\nsymbol/~NgSV\nsymbolic/~J\nsymbolical/JY\nsymbolisation/Ng!_₹\nsymbolise/VdSG!_₹\nsymbolism/~Nmg\nsymbolization/Ng\nsymbolize/~VdSG\nsymbology/Nmg\nsymlink/NgSVdG\nsymmetric/~J\nsymmetrical/~JY\nsymmetry/~NSg\nsympathetic/~JNUQ\nsympathies/~Ng\nsympathise/VGd>SZ!_₹\nsympathiser/Ng!_₹\nsympathize/~VGd>SZ\nsympathizer/Ng\nsympathy/~NSg\nsymphonic/~J\nsymphony/~NSg\nsymplectic/J\nsymposium/~NgS\nsymptom/~NgS\nsymptomatic/~JNQ\nsyn/~JN\nsynæsthesia/Nmg\nsynaesthesia/Nmg\nsynagogal/J\nsynagogue/~NSg\nsynapse/~NgSV\nsynaptic/~J\nsync/~NmgSVdG\nsynch/Nmg\nsynchronicity/N\nsynchronisation/NmgS!_₹\nsynchronise/VGdS!_₹eU\nsynchronization/~NmSg\nsynchronize/VGdSeU\nsynchronous/~JY\nsynchrony/N\nsyncopate/VdSGn\nsyncopation/Ng\nsyncope/Ng\nsyncretic/~J\nsyncretism/Nmg\nsyndicalism/N\nsyndicalist/NS\nsyndicate/~NSgVdGn\nsyndication/~Ng\nsyndrome/~NSg\nsynergism/Ng\nsynergistic/J\nsynergize/VSdG\nsynergy/~NSg\nsynesthesia/Nmg\nsynfuel/NgS\nsynod/~NSg\nsynonym/~NSg\nsynonymous/~J\nsynonymy/Ng\nsynopses/N\nsynopsis/~Ng\nsynoptic/~J\nsynovial/~J\nsyntactic/~J\nsyntactical/JY\nsyntax/~Nmg\nsynth/N0g\nsynth-pop/Nmg\nsyntheses/N9\nsynthesis/~N0wg\nsynthesise/V!_₹\nsynthesize/~VGd>SZ\nsynthesizer/~NgS\nsynthetic/~JNSgQ\nsynths/N9V\nsyphilis/~Nmg\nsyphilitic/JNSg\nsyringe/NSgVdG\nsyrup/~NwSgV\nsyrupy/J\nsysadmin/NgS\nsyscall/NgS\nsysop/~NgSV\nsystem/~NSg\nsystematic/~JU\nsystematical/JY\nsystematisation/Nmg!_₹\nsystematise/VGdS!_₹\nsystematization/Nmg\nsystematize/VGdS\nsystemic/~JSgQ\nsystemize/VGdS\nsystemwide/J\nsystole/NSg\nsystolic/JN\nt/NSdGnXBz\nta/~PN\nta-da\ntab/~NSgV\ntabbed/JVtT\ntabbing/V6N\ntabbouleh/Nmg\ntabby/~NSgJV\ntabernacle/~NSgV\ntabla/NgS\ntable/~NgSVGd\ntableau/~Ng\ntableaux/N\ntablecloth/N0g\ntablecloths/N9\ntableland/NSg\ntablespoon/NSg\ntablespoonful/NSg\ntablet/~NSgV\ntabletop/~NgSJV\ntableware/Nmg\ntabloid/~NSgJ\ntaboo/~NgSJVdG\ntabor/~NgSV\ntabular/JN\ntabulate/VdGSNJnX\ntabulation/NwSg\ntabulator/NSg\ntachograph/N0\ntachographs/N9\ntachometer/NSg\ntachycardia/~Ng\ntachyon/N\ntacit/~JYp\ntacitness/Nmg\ntaciturn/JY\ntaciturnity/Nmg\ntack/~NgSVGd>Z\ntacker/NgS\ntackiness/Nmg\ntackle/~NSgVd>GZ\ntackler/NgS\ntacky/J>^pN\ntaco/~NgSV\ntact/~NgVW\ntactful/JYp\ntactfulness/Nmg\ntactic/~NSgJ\ntactical/~JYN\ntactician/NgS\ntactile/~J\ntactility/Nmg\ntactless/JYp\ntactlessness/Nmg\ntad/~NSg\ntadpole/NgS\ntaekwondo/Nmg\ntaffeta/Nmg\ntaffrail/NSg\ntaffy/NwSg\ntag/~NSgVB\ntagged/~JVtT\ntagger/NSg\ntagging/~V6N\ntagliatelle/Nmg\ntagline/~NgSV\ntai chi/Nmg\ntaiga/~NgS\ntail/~NSgVdGJre\ntailback/NgS\ntailboard/NSg\ntailbone/NSg\ntailcoat/NgS\ntailgate/~NgSVGd>Z\ntailgater/NgS\ntailless/J\ntaillight/NgS\ntailor/~NSgVGd\ntailoring/VNg\ntailpiece/~NSg\ntailpipe/NSgV\ntailspin/NSgV\ntailwind/NSgV\ntaint/NgSVdG\ntainted/~JVtTU\ntake/~VSNgri\ntake down/V/\ntake-home/JNgS\ntake off/V/\ntake out/V/\ntakeaway/JNwgS\ntakedown/NSg\ntaken/~JVTdr\ntakeoff/~NgS\ntakeout/JNwgS\ntakeover/~NSgV\ntaker/~NgS\ntaking/~JNSgV6\ntakings/N9g\ntalc/NwgV\ntalcum/NgV\ntale/~NgSV\ntalebearer/NgS\ntalent/~NwSgd\ntalented/~JU\ntali/N\ntalisman/~NgSV\ntalk/~VGd>SNwgZ\ntalkative/JYp\ntalkativeness/Nmg\ntalker/NgS\ntalkie/NSg>^\ntalky/J\ntall/~J^>pN\ntallboy/NgS\ntallier/Ng\ntallish/J\ntallness/Nmg\ntallow/NgV\ntallowy/J\ntally/~NSgVd>GZ\ntallyho/NgSVdG\ntalon/~NgS\ntalus/NgS\ntam/~NSg\ntamale/NSg\ntamarack/NgS\ntamarind/NgS\ntambourine/~NgSV\ntame/~JY^>pVGdSBZ\ntamed/JVtTU\ntameness/Nmg\ntamer/NgSJ\ntamoxifen/N\ntamp/VGd>SZ\ntamper/NVGd>Z\ntamperer/NgS\ntampon/NSgV\ntan/~NSgJV\ntanager/NgS\ntanbark/Nmg\ntandem/~NSgJV\ntandoor/NgS\ntandoori/JNg\ntang/~NgSV\ntangelo/NgS\ntangent/~NgSJ\ntangential/~JY\ntangerine/~NgSJ\ntangibility/Ngi\ntangible/~JNgSi\ntangibleness/Ng\ntangibly/Ryi\ntangle/~VdGSNU\ntangle's/VGd>SZ\ntango/~NgSVdG\ntangy/J>^\ntank/~NgSVGd>Z\ntankard/NgS\ntanker/~NgV\ntankful/NgS\ntankie/NgS\ntankless/J\ntanned/JVtTU\ntanner/~NSgJc\ntannery/NSg\ntannest/Ju\ntannin/NwgS\ntanning/~V6Ng\ntansy/Ng\ntantalisation/Nmg!_₹\ntantalise/VGd>SZ!_₹\ntantaliser/NgS!_₹\ntantalising/V6JYN!_₹\ntantalization/Nmg\ntantalize/VGd>SZ\ntantalizer/NgS\ntantalizing/JYV6N\ntantalum/~NwgS      # plural can be used for capacitors\ntantamount/JVN\ntantra/~Ng\ntantrum/NSgV\ntap/~NSgVGd>Z\ntapas/N9\ntape/~NwgSV\ntapeline/NgS\ntaper/~NgVdGJ\ntapestried/J\ntapestry/~NwSgV\ntapeworm/NgSV\ntapioca/Nmg\ntapir/NgS\ntapped/~VtTJU\ntapper/NgS\ntappet/NgS\ntapping/~NmV6\ntaproom/NSg\ntaproot/NSg\ntar/~NwSgVGd\ntaramasalata/N\ntarantella/NgS\ntarantula/NSg\ntarball/NSV\ntardily/Ry\ntardiness/Nmg\ntardy/J^>pNV\ntare/NgSV\ntarget/~NgSVdG\ntariff/~NgSVdG\ntarmac/NwgSV\ntarmacadam/NV\ntarmacked/V\ntarmacking/V\ntarn/~NgS\ntarnish/NgSVbGd\ntarnished/~VtTJU\ntaro/~NgS\ntarot/~NgS\ntarp/NgSV\ntarpaulin/NgSV\ntarpit/NgS\ntarpon/NgS\ntarragon/NSg\ntarred/VtT\ntarring/V6N\ntarry/VGd>SNJ^\ntarsal/JNgS\ntarsi/N9\ntarsus/~N0g\ntart/~J^Y>pNgSVGd\ntartan/~NgSJV\ntartar/NwgS\ntartaric/J\ntartness/Nmg\ntarty/J^\ntaser/NgSVGd\ntask/~NgSVGd\ntaskbar/NgS\ntaskmaster/NgS\ntaskmistress/NgS\ntassel/NgSVdG\ntasselled/J!@_₹\ntasselling/V6N!@_₹\ntaste/~NgSVGd>JzZ\ntasted/~VU\ntasteful/JYpE\ntastefulness/NmgE\ntasteless/~JYp\ntastelessness/Nmg\ntaster/Ng\ntastily/Ry\ntastiness/Nmg\ntasting/~NgV\ntasty/~J^>pN\ntat/~NSV>Z\ntatami/N09gS\ntater/Ng\ntatted/VtTJ\ntatter/NgSVdG\ntatterdemalion/JNgS\ntattie/N\ntatting/NgV6\ntattle/VGd>SNgZ\ntattler/Ng\ntattletale/JNgSV\ntattoo/~NgSVd>GZ\ntattooer/NgS\ntattooist/NSg\ntatty/NSJ^>\ntau/~NSg\ntaught/~VtTUr\ntaunt/VGd>SNgJZ\ntaunter/Ng\ntaunting/~V6NY\ntaupe/NgJ\ntaut/J^Y>pVXn\ntauten/VdG\ntautness/Nmg\ntautological/JY\ntautologous/J\ntautology/NwSg\ntavern/~NgS\ntawdrily/Ry\ntawdriness/Nmg\ntawdry/NJ>^p\ntawny/~J^>VNg\ntax/~NwgSVGd>BZ\ntax-exempt/J\ntaxa/~N9\ntaxation/~NgS\ntaxer/Ng\ntaxi/~NgSVGd\ntaxicab/NSgV\ntaxidermist/NSg\ntaxidermy/NgV\ntaximeter/NgS\ntaxiway/~NS\ntaxman/~N9\ntaxmen/N9\ntaxon/~N0g\ntaxonomic/~JQ\ntaxonomist/NgS\ntaxonomy/~NwSg\ntaxpayer/~NgS\ntaxpaying/J\ntb/~NS\ntbsp/N\ntea/~NwSgV\nteabag/NSV\nteacake/NSg\nteach/~VG>SNZBz\nteachable/JNU\nteacher/~NgSY\nteaching/~NwSgV6\nteacup/NgSJ\nteacupful/NgS\nteak/NwgSJ\nteakettle/NSgV\nteal/~NwgSJ\ntealight/NgS\nteam/~NgSVGd\nteammate/~NgS\nteamster/NgS\nteamwork/~Ng\nteapot/NgS\ntear/~VGdSNg\ntearaway/NS\nteardrop/~NSg\ntearful/JY\nteargas/NwgSV\nteargassed/VtT\nteargassing/V6\ntearjerker/NgS\ntearoom/NSg\nteary/J^>\ntease/~VGd>SNgZ\nteasel/NgSV\nteaser/~NgS\nteasing/~V6NY\nteaspoon/NSgV\nteaspoonful/NSg\nteat/NgS\nteatime/NwgS\ntech/~N0mg\ntech-savvy/J\ntechie/NSJ\ntechnetium/~Nmg\ntechnical/~JYN\ntechnicality/NSg\ntechnician/~NSg\ntechnicolor/~JNm\ntechnique/~NwSg\ntechno/~Nmg\ntechnobabble/Nmg\ntechnocracy/NSg\ntechnocrat/NgS\ntechnocratic/J\ntechnological/~JY\ntechnologist/NgS\ntechnology/~NwSg\ntechnophobe/NgS\ntechs/N9V\ntectonic/~JS\ntectonics/~Ng\nted/~NSV\nteddy/~NS\ntedious/~JYp\ntediousness/Ng\ntedium/Nmg\ntee/~NSgVd\nteeing/V6\nteem/VGdS\nteen/~NgSJV\nteenage/~J>NZ\nteenager/~Ng\nteeny/J^>\nteeny-tiny/J\nteenybopper/NgS\nteeter/VdGSNg\nteeth/N9\nteethe/VGdS\nteething/NgV6\nteetotal/J>NVZ\nteetotaler/Ng\nteetotalism/Ng\nteetotaller/NgS!@_₹\ntektite/NSg\ntel/~N\n# tele              # prefixes that are not also words in their own right don't belong in the dictionary\ntelecast/~VG>SNgZ\ntelecaster/Ng\ntelecom/NgS\ntelecommunication/~NgS\ntelecommunications/~Nmg\ntelecommute/VGd>SNZ\ntelecommuter/NgS\ntelecommuting/NmgV\nteleconference/NgSVGd\nteleconferencing/NmgV\ntelegenic/J\ntelegram/~NgSV\ntelegraph/~N0gVd>GZ\ntelegrapher/NgS\ntelegraphese/Nmg\ntelegraphic/JQ\ntelegraphist/NSg\ntelegraphs/N9Vh\ntelegraphy/~Nmg\ntelekinesis/Nmg\ntelekinetic/JN\ntelemarketer/NSg\ntelemarketing/~Ng\ntelemedicine/Sg\ntelemeter/NSgV\ntelemetry/NSg\nteleological/J\nteleology/N\ntelepath/NgS\ntelepathic/~JQ\ntelepathy/Nmg\ntelephone/~NSgVd>GZ\ntelephoner/NgS\ntelephonic/J\ntelephonist/NS\ntelephony/~Nmg\ntelephoto/JNSgV\ntelephotography/Nmg\nteleplay/~NgS\nteleport/~VdGSNg\nteleportation/~Nmg\nteleprinter/NgS\nteleprocessing/Nmg\nteleprompter/NSg\ntelesales/Nmg\ntelescope/~NSgVdG\ntelescopic/~JQ\nteletext/NwgS\ntelethon/~NgS\nteletype/NSV\nteletypewriter/NgS\ntelevangelism/Nmg\ntelevangelist/NgS\ntelevise/VGdSXn\ntelevision/~NwgV\nteleworker/NgS\nteleworking/V\ntelex/NgSVdG\ntell/~VbGSNr\nteller/~NSg\ntelling/~V6JYN\ntelltale/~NSgJ\ntellurium/Nmg\ntelly/~NSgJ\ntelnet/NV\ntemblor/NgS\ntemerity/Ng\ntemp/~NgSJ^>VdGZ\ntemper/~NgVdG\ntempera/NSgL\ntemperament/~NgS\ntemperamental/JY\ntemperance/~Ngi\ntemperate/~JYVi\ntemperateness/Nmg\ntemperature/~NSg\ntempest/~NSgV\ntempestuous/JYp\ntempestuousness/Nmg\ntemplate/~NgSVdG\ntemplate's\ntemple/~NSgV\ntempo/~NwSg\ntemporal/~JYN\ntemporarily/~R      # adverb of duration\ntemporariness/Nmg\ntemporary/~JNSgW\ntemporise/VGd>SZ!_₹\ntemporiser/Ng!_₹\ntemporize/VGd>SZ\ntemporizer/Ng\ntempt/VSd>GZ\ntemptation/~NwgS\ntempter/NgS\ntempting/~JYV6N\ntemptress/NgS\ntempura/Nmg\nten/~NgBH\ntenability/Nmg\ntenable/JU\ntenably/RyU\ntenacious/~JYp\ntenaciousness/Ng\ntenacity/~Nmg\ntenancy/~NSg\ntenant/~NSgVdG\ntenanted/VU\ntenantry/Ng\ntench/N\ntend/~VbdGSiEW\ntended/~VtTU\ntendency/~NSg\ntendentious/JYp\ntendentiousness/Nmg\ntender/~JY^>pNSgVdG\ntenderfoot/NgS\ntenderhearted/Jp\ntenderheartedness/Ng\ntenderise/VGd>SZ!_₹\ntenderiser/Ng!_₹\ntenderize/VGd>SZ\ntenderizer/Ng\ntenderloin/NSg\ntenderness/~Nmg\ntendinitis/Ng\ntendon/~NwSg\ntendril/NSgJ\ntenement/~NSg\ntenet/~NSg\ntenfold/JV\ntenner/NS\ntennis/~NgV\ntenon/NSgVdG\ntenor/~NSgJ\ntenpin/NSg\ntenpins/Ng\ntense/~NSgVd>GJY^pnX\ntenseness/Nmg\ntensile/~J\ntension/~NwSgVE\ntensioner/NgS\ntensity/Ngi\ntensor/~NSgV\ntent/~NSgVdG\ntentacle/NSgVd\ntentative/~NJYp\ntentativeness/Nmg\ntenterhook/NgS\ntenth/~JYN0gV\ntenths/N9\ntenuity/Ng\ntenuous/~JYp\ntenuousness/Nmg\ntenure/~NSgVdG\ntepee/NSg\ntepid/JYp\ntepidity/Ng\ntepidness/Ng\ntequila/NSg\nterabit/NSg\nterabyte/NgS\nteraflop/NgS\nterahertz/Ng\nterajoule/NS\nterapixel/NgS\nterawatt/NS\nterbium/Nmg\ntercentenary/NSgJ\ntercentennial/NSg\nteriyaki/N\nterm/~NgSVdGJY\ntermagant/NgSJ\nterminable/Jie\nterminal/~NgSJYV\nterminate/~VdSGJnX\ntermination/~NSge\nterminative/JNgS\nterminator/~NSg\nterminatory/J\ntermini/~N\nterminological/JY\nterminology/~NwSg\nterminus/~Ng\ntermite/~NSgV\ntern/~NgSJi\nternary/JNSg\nterr/~N\nterrace/~NSgVdG\nterracotta/~NgJ\nterrain/~NwSg\nterrapin/NgS\nterrarium/NSg\nterrazzo/NgS\nterrestrial/~NSgJY\nterrible/~Jp\nterribleness/Ng\nterribly/~Ry%\nterrier/~Ng\nterrific/~JQ\nterrify/VGdS\nterrifying/~JYV6\nterrine/NS\nterritorial/~JNgS\nterritoriality/Nmg\nterritory/~NwSg\nterror/~NwSg\nterrorise/VdSG!_₹\nterrorism/~Nmg\nterrorist/~NSgJ\nterroristic/JQ\nterrorize/VdSG\nterry/~Ng>Z\nterrycloth/Ng\nterse/J>Y^p\nterseness/Nmg\ntertiary/~JN\ntessellate/JVdSGXn\ntessellation/NwgS\ntesseract/NgS\ntest/~NSVdGrKe\ntest's/rWK\ntestability/Nmg\ntestable/JeW\ntestament/~NgSV\ntestamentary/J\ntestate/JNS\ntestator/NgS\ntestatrices/N9\ntestatrix/N0g\ntested/~VU\ntester/~NSgK\ntestes/N9\ntesticle/NgS\ntesticular/J\ntestifier/Ng\ntestify/~VGd>SZ\ntestily/Ry\ntestimonial/~NgSJ\ntestimony/~NSg\ntestiness/Ng\ntestings/N\ntestis/N0g\ntestosterone/~Nmg\ntesty/J>^p\ntetanus/Nmg\ntetchily/Ry\ntetchy/J>^p\ntether/NSgVdG\ntetra/NSg\ntetracycline/Ng\ntetrahedral/~J\ntetrahedron/~NgS\ntetrameter/NSg\ntext/~NwgSVW\ntextbased/J\ntextbook/~NSgJ\ntexted/VtT\ntextile/~NwgSJ\ntexting/V6Nm\ntextual/~JYW\ntextualization/NwgS\ntextural/J\ntexture/~NgSVGd\nthalami/N9\nthalamus/N0g\nthalidomide/Nmg\nthallium/Nmg\nthan/~CP\nthane/NSg\nthank/~NSVdG\nthankful/JYp\nthankfulness/Nmg\nthankless/JYp\nthanklessness/Nmg\nthanksgiving/~NSg\nthat/~CIDMg\nthat'd/\nthat'll/\nthatch/NgSVd>GZ\nthatcher/~NgS\nthatching/NgV\nthaw/~VdGSNg\nthe/~Dz             # removed `+` preposition: archaic\ntheater/~NwSg<\ntheatergoer/NSg\ntheatre/NwSg!@_₹\ntheatregoer/NgS!@_₹\ntheatrical/~JYNS\ntheatricality/Nmg\ntheatricals/Ng\ntheatrics/N9g\nthee/~I2o\ntheft/~NwSg\ntheir/~D5\ntheirs/~I\ntheism/~Nmg\ntheist/NSg\ntheistic/~J\nthem/~Ia3o:g        # I~pronoun a~personal 3~person :~plural o~object (g=them's as in (one of) them is/has)\nthematic/~JNQ\nthematically/Ry\ntheme/~NSgVdG\nthemselves/~Ia3F:   # I~pronoun a~personal 3~person :~plural F~reflexive\nthen/~RJNgC\nthence/~\nthenceforth/\nthenceforward/\ntheobromide/Nmg\ntheobromine/Nmg\ntheocracy/NwSg\ntheocratic/J\ntheodolite/NgS\ntheologian/~NSg\ntheological/~JY\ntheologist/NSg\ntheology/~NSg\ntheorem/~NgSV\ntheoretic/~J\ntheoretical/~JY\ntheoretician/NSg\ntheorise/VdSG!_₹\ntheorist/~NSg\ntheorize/VdSG\ntheory/~NwSg\ntheosophic/J\ntheosophical/~J\ntheosophist/NSg\ntheosophy/Nmg\ntherapeutic/~JNSQ\ntherapeutics/~Nmg\ntherapist/~NSg\ntherapy/~NwSgV\nthere/~R\nthere'd/\nthere'll/\nthere's/~\nthereabout/RS\nthereafter/~N\nthereat/\nthereby/~R\ntherefor/R\ntherefore/~R\ntherefrom/\ntherein/~R\ntheremin/NSg\nthereof/~R\nthereon/\nthereto/\ntheretofore/\nthereunder/\nthereunto/\nthereupon/~R\ntherewith/\ntherm/NSgV\nthermal/~JYNgSV\nthermionic/J\nthermodynamic/~JS\nthermodynamics/~Nmg\nthermometer/NgS\nthermometric/J\nthermonuclear/~JN\nthermoplastic/JNSg\nthermos/NgS\nthermostat/NgS\nthermostatic/JQ\nthesauri/N9\nthesaurus/N0gS\nthese/~IDM\ntheses/~N9\nthesis/~N0g\nthespian/JNSg\ntheta/~NSg\nthew/NgSV\nthey/~Ia3s:         # I~pronoun a~personal 3~person :~plural s:~subject\nthey'd/\nthey'll/\nthey're/\nthey've/\nthiamine/Nmg\nthick/~JY^>pNgVnX\nthicken/Vd>GzZ\nthickener/~NwSg\nthickening/~NgVJ\nthicket/~NgS\nthickheaded/Jg\nthickish/J\nthickness/~NgSV\nthicko/NS\nthickset/JN\nthief/~N0mg\nthieve/VdG\nthievery/Nmg\nthieves/N9\nthieving/VJNg\nthievish/J\nthigh/~N0wg         # `S` here results in the wrong `thighes` instead of `thighs`\nthighbone/NgS\nthighs/N9\nthimble/NgSV\nthimbleful/NSg\nthin/~JYpNSV\nthine/I\nthing/~NSg\nthingamabob/NSg\nthingamajig/NSg\nthingumabob/NSg\nthingummy/NSg\nthingy/NSIJ\nthink/~V>GSNgBZ     # `M` for 's as in What do you think's going on?\nthinkable/JU\nthinker/~NgS\nthinking's\nthinned/VtT\nthinner/~JcNgS\nthinness/Nmg\nthinnest/Ju\nthinning/V6NJ\nthird/~JYNSgV\nthird-party/J\nthirst/~NmSgVGd\nthirstily/Ry\nthirstiness/Nmg\nthirsty/~J^>pN\nthirteen/~SgH\nthirteenth/~JNg\nthirteenths/N\nthirtieth/JNg\nthirtieths/N\nthirty/~NSgH\nthis/~IDM\nthistle/~NgS\nthistledown/Ng\nthither/J\ntho/~DIC\nthole/VSNg\nthong/~NSg\nthoracic/~JN\nthorax/~NgS\nthorium/~Nmg\nthorn/~NSgV\nthorniness/Ng\nthorny/~J>^p\nthorough/~J>Y^pPN\nthoroughbred/~JNgS\nthoroughfare/~NmgS\nthoroughgoing/J\nthoroughness/Nmg\nthose/~IDM\nthou/~I2s\nthough/~C\nthought/~NwSgVtT\nthought out/V\nthought-out/J\nthought-provoking/J\nthoughtful/~JYp\nthoughtfulness/Nmg\nthoughtless/JYp\nthoughtlessness/Nmg\nthousand/~NgSH\nthousandfold/J\nthousandth/JNg\nthousandths/N\nthraldom/Ng!_₹\nthrall/NSgJVdG\nthralldom/Ng\nthrash/~Vd>GSNgzZ\nthrasher/Ng\nthrashing/VNg\nthread/~NwSgVd>GZr\nthreadbare/J\nthreader/Ng\nthreadlike/J\nthready/J^>\nthreat/~NSgVnX\nthreaten/~VdG\nthreatening/~VJYN\nthree/~NSg\nthree-quarters/N\nthreefold/~JNV\nthreepence/Ng\nthreescore/NgS\nthreesome/NSg\nthrenody/NSg\nthresh/Vd>SGgZ\nthresher/Ng\nthreshold/~NSgG\nthrew/~Vt\nthrice/~\nthrift/~NSgV\nthriftily/Ry\nthriftiness/Ng\nthriftless/J\nthrifty/J^>p\nthrill/~Vd>GSNgZ\nthriller/~Ng\nthrilling/~V6JYN\nthrive/~VdSG\nthroat/~NSgV\nthroatily/Ry\nthroatiness/Ng\nthroaty/J>^p\nthrob/VSNg\nthrobbed/VtT\nthrobbing/V6JN\nthroe/NSgV\nthrombi/N\nthrombolytic/JN\nthromboses/N9V\nthrombosis/~N0g\nthrombotic/J\nthrombus/Ng\nthrone/~NSV\nthrone's\nthrong/NSgVGdJ\nthrottle/~NSgVd>GZ\nthrottler/Ng\nthrough/~PJN\nthroughout/~P\nthroughput/~Ng\nthroughway/NgS!@_₹\nthrow/~V>GSNgZ\nthrow back/V/\nthrow up/V/\nthrowaway/JNSg\nthrowback/NSg\nthrower/~Ng\nthrown/~VTJ\nthru/~P\nthrum/NSgVJ\nthrummed/VtTJ\nthrumming/V6N\nthrush/~NgS\nthrust/~NSgVG\nthruster/NgS\nthruway/~NgS\nthud/NgSV\nthudded/VtT\nthudding/V6N\nthug/~NgSV\nthuggery/Ng\nthuggish/J\nthulium/Nmg\nthumb/~NSgVdG\nthumbnail/~NSgVdG\nthumbprint/NSg\nthumbscrew/NSg\nthumbtack/NSgV\nthump/NSgVdG\nthumping/JNgV\nthunder/~NgSVGd>Z\nthunderbolt/~NSgV\nthunderclap/NSgV\nthundercloud/NgS\nthunderer/Ng\nthunderhead/NSg\nthunderous/JY\nthundershower/NSg\nthunderstorm/~NSg\nthunderstruck/J\nthundery/J\nthunk/VSN\nthus/~N\nthwack/VGd>SNgZ\nthwacker/Ng\nthwart/~JPVGdSNg\nthy/~D\nthyme/~Ng\nthymine/Ng\nthymus/NgS\nthyroid/~JNgS\nthyroidal/J\nthyself/IF\nti/~Ng>Z\ntiara/~NSgV\ntibia/~Ng\ntibiae/9\ntibial/JN\ntic/~NSgV\ntick/~NgSVd>GZ\nticker/~Ng\nticket/~NSgVGd\nticking/NgV\ntickle/NSgVd>GJZ\ntickler/Ng\nticklish/JYp\nticklishness/Ng\n#ticktacktoe/Ng     # tic-tac-toe\nticktock/VSNg\ntidal/~JY\ntidbit/NSg\ntiddler/NSg\ntiddly/NJ\ntiddlywink/NSV\ntiddlywinks/NgV\ntide/~NgSVGdz\ntideland/NSg\ntidemark/NS\ntidewater/~NgS\ntideway/NgS\ntidily/RyU\ntidiness/NgU\ntidings/Ng\ntidy/~J^>pVdGSNg\ntie/~NSVdrU\ntie back/V/\ntie's\ntieback/NgS\ntiebreak/NSV>GZ\ntiebreaker/~Ng\ntiepin/NS\ntier/~NgVd\ntiff/NgSVdG\ntiger/~NSg\ntigerish/J\ntight/~JY^>pVSnX\ntighten/~VGd>Z\ntightener/Ng\ntightfisted/J\ntightness/Ng\ntightrope/~NgSV\ntights/~Ng\ntightwad/NgS\ntigress/NgS\ntil/~CPN\ntilapia/N\ntilde/NSg\ntile/~NwgSVGd>Z\ntiler/Ng\ntiling/~NgV\ntill/~PCNSVd>GEZ\ntill's\ntillable/J\ntillage/Ng\ntilled/VtTJE!_₹\ntiller/NgVE\ntilling/V6NE!_₹\ntilt/~VdGSNg\ntimber/~NSgVdG\ntimberland/NSg\ntimberline/~NgS\ntimbre/~NSg\ntimbrel/NSgV\ntime/~NwgSVGdYZz\ntime-consuming/JY\ntime frame/NgS\ntime-honored/J<\ntime-honoured/J!@_₹\ntime-share/NgSVdG\ntime zone/NgS!₹\ntimekeeper/NgS\ntimekeeping/NgV\ntimeless/~JYpN\ntimelessness/Ng\ntimeline/~NgSV\ntimeliness/NmgU\ntimely/~J>^pU\ntimeout/NSg\ntimepiece/NgS\ntimer/~NgS\ntimescale/~NS\ntimeserver/NSg\ntimeserving/NgJ\ntimeshare/NSg\ntimesheet/NgS\ntimestamp/NSgVd\ntimestep/NSg\ntimetable/~NSgVdG\ntimeworn/J\ntimezone/~NgS<\ntimid/~J>Y^p\ntimidity/Nmg\ntimidness/Nmg\ntiming/~NmgV6\ntimorous/JYp\ntimorousness/Ng\ntimothy/~Ng\ntimpani/~Ng\ntimpanist/NSg\ntin/~NwSgJV\ntincture/NwgSVGd\ntinder/NgV\ntinderbox/NgS\ntine/NgSJV\ntinfoil/NmgV\nting/~NgVdGY\ntinge/NSgV\ntingeing/V\ntingle/VdGSNgz\ntingling/NgV\ntininess/Nmg\ntinker/~NSgVGd>Z\ntinkerer/Ng\ntinkle/VdGSNg\ntinned/VtTJ\ntinniness/Nmg\ntinning/V6N\ntinnitus/Nmg\ntinny/J>^pN\ntinplate/NgV\ntinpot/JN\ntinsel/NSgJVGd\ntinselled/VtT!@_₹\ntinselling/V6!@_₹\ntinsmith/NSg\ntinsmiths/N\ntint/~NgSVdG\ntintinnabulation/NgS\ntintype/NgSV\ntinware/Nmg\ntiny/~J>^pN\ntip/~NSgV\ntipped/~VtT\ntipper/NSg\ntippet/NSg\ntippex/VGdSN\ntipping/~NV6\ntipple/NSgVd>GZ\ntippler/Ng\ntipsily/Ry\ntipsiness/Ng\ntipster/NgS\ntipsy/J>^p\ntiptoe/NSgJVd\ntiptoeing/V\ntiptop/NSg\ntirade/NSgV\ntiramisu/NgS\ntire/~VGdSNr\ntire's\ntired/~V>JY^p\ntiredness/Nmg\ntireless/~JYp\ntirelessness/Ng\ntiresome/JYp\ntiresomeness/Ng\ntissue/~NwSgV\ntit/~NSgVx\ntit for tat/N\ntit-for-tat/J\ntitan/~NSg\ntitanic/~J\ntitanium/~Nmg\ntitbit/NSg!_₹\ntitch/NSV\ntitchy/J\ntithe/~NSgJ>VdGZ\ntither/Ng\ntitian/~NgJ\ntitillate/VdSGn\ntitillating/VJY\ntitillation/Ng\ntitivate/VdSGn\ntitivation/Ng\ntitle/~NSgVdG\ntitled/~JVU\ntitleholder/NgS\ntitlist/NgS\ntitmice/N9\ntitmouse/N0g\ntitration/NgS\ntitter/VGdSNg\ntittle/NSgV\ntitty/NSx\ntitular/~JN\ntizz/N\ntizzy/NSg\ntl;dr/\ntn/~N\ntnpk/N\nto/~PiU\nto-do/NgS\ntoad/~NgSV\ntoadstool/NgS\ntoady/NSgVdGJ\ntoadyism/Nmg\ntoast/~NwSgVd>GZ\ntoaster/~NgS\ntoastmaster/NSg\ntoastmistress/NgS\ntoasty/J^>NS\ntobacco/~NwgS\ntobacconist/NSg\ntoboggan/NSgVGd>Z\ntobogganer/Ng\ntobogganing/VNmg\ntoccata/NwgS\ntocopherol/N\ntocsin/NSg\ntoday/~NgJ\ntoddle/Vd>GSNgZ\ntoddler/~Ng\ntoddy/NSg\ntoe/~NSgVd\ntoecap/NSg\ntoehold/NgS\ntoeing/V6N\ntoenail/NgSV\ntoerag/NS\ntoff/NS\ntoffee/NwSgV\ntofu/~Nwg\ntog/NSgV\ntoga/NgSd\ntogether/~Jp\ntogetherness/Nmg\ntogged/JtT\ntogging/V6\ntoggle/NSgVdGB\ntogs/NgV\ntoil/NgSVd>GZ\ntoiler/Ng\ntoilet/~NgSVdG\ntoiletry/NSg\ntoilette/Ng\ntoilsome/J\ntoke/NgSVGd\ntoken/~NSgJV\ntokenism/Nmg\ntokenization/Nmg\ntokenize/VdSG\ntokenizer/NgS\ntold/~jtTrU\ntole/NgV\ntolerable/Ji\ntolerably/Ryi\ntolerance/~N0wgSVi\ntolerances/N9V\ntolerant/~JYi\ntolerate/~VGdSn\ntoleration/~Ng\ntoll/~NgSVdG\ntollbooth/Ng\ntollbooths/N\ntollgate/NSgV\ntollway/NSg\ntoluene/NSg\ntom/~NSgV\ntom yam/Ng\ntomahawk/~NSgVGd\ntomato/~Nw0gV\ntomatoes/~N9\ntomb/~NgSVdG\ntombola/NS\ntomboy/NgS\ntomboyish/J\ntombstone/~NgSV\ntomcat/~NgSV\ntome/~NgS\ntomfoolery/NSg\ntomographic/J\ntomography/~Nmg\ntomorrow/~NgS\ntomtit/NgS\nton/~NSg\ntonal/~JYN\ntonality/~NwSgs\ntone/~NwSVGd>IiZ\ntone's\ntonearm/NSg\ntoneless/JY\ntoner/Nwgi\ntong/~NgSVdG\ntongue/~NwgSVGd\ntongueless/J\ntonic/~JNwSgV\ntonight/~Ng\ntonnage/~NSg\ntonne/~NSg\ntonogenesis/Nmg\ntonsil/NgS\ntonsillectomy/NSg\ntonsillitis/Ng\ntonsorial/J\ntonsure/VdGSNg\ntony/~J>^N\ntoo/~R%\ntook/~Vtr\ntool/~NSVdGr\ntool's\ntoolbar/~NSg\ntoolbox/~NgS\ntoolchain/NgS\ntoolkit/~NgS\ntoolless/J\ntoolmaker/NgS\ntoolset/NgS\ntoolshed/NgS\ntooltip/NgS\ntoot/NgSVd>GZ\ntooter/Ng\ntooth/~N0gVd\ntoothache/NgS\ntoothbrush/NgSV\ntoothfish/NgS09     # singular and plural, also has a plural in -s\ntoothily/Ry\ntoothless/J\ntoothpaste/NSg\ntoothpick/NSgV\ntoothsome/J\ntoothy/J>^\ntootle/VGdSN\ntootsie/NS\ntop/~NSgVJ\ntop-end/J\ntopaz/~NwgSJ\ntopcoat/NSgV\ntopdressing/VSNg\ntopee/NS\ntopflight/J\ntopi/N\ntopiary/JNg\ntopic/~JNSg\ntopical/~JYN\ntopicalisation/Nmg!_₹\ntopicalise/Vd>SGZ!_₹\ntopicality/Nmg\ntopicalization/Nmg\ntopicalize/Vd>SGZ\ntopknot/NSg\ntopless/~JN\ntopline/NSgVdG\ntopmast/NSg\ntopmost/J\ntopnotch/J\ntopographer/NSg\ntopographic/~J\ntopographical/~JY\ntopography/~NwSg\ntopological/~JY\ntopology/~N\ntopped/~JVtT\ntopper/~NgS\ntopping/~V6SJNwg\ntopple/VGdSN\ntopsail/NSg\ntopside/NwSgJ\ntopsoil/NgV\ntopspin/NgV\ntoque/NSg\ntor/~NSgJ\ntorch/~NgSVGd\ntorchbearer/NgS\ntorchlight/Nwg\ntore/~JVN\ntoreador/NgS\ntorment/~NwSgVdG\ntormenting/VJYN\ntormentor/NgS\ntorn/~VJ\ntornado/~N0gV\ntornadoes/~N9\ntorpedo/~N0gVGd\ntorpedoes/~N9V\ntorpid/JYN\ntorpidity/Nmg\ntorpor/Nmg\ntorque/~NmgSVGd\ntorquey/J\ntorrent/~NSgJV\ntorrential/J\ntorrid/JYp\ntorridity/Nmg\ntorridness/Nmg\ntorsion/~Nwg\ntorsional/J\ntorso/~NSg\ntort/~NSJWEr\ntort's\ntorte/NSg\ntortellini/Nmg\ntortilla/NgS\ntortoise/~NgS\ntortoiseshell/NSgJ\ntortoni/Ng\ntortuous/JYp\ntortuousness/Nmg\ntorture/~NmSgVd>GZ\ntorturer/Ng\ntorturous/J\ntorus/~N\ntosh/~NVJ\ntoss/~NgSVd>GZ\ntoss up/V/\ntossup/NgS\ntot/~NSgVGd\ntotal/~NSgJVGd\ntotalisator/NgS!@_₹\ntotalitarian/~JNSg\ntotalitarianism/~Nmg\ntotality/~NwSg\ntotalizator/NSg\ntotalize/VSdG\ntotalled/VtTJ!@_₹\ntotalling/V6!@_₹\ntotally/R%\ntote/NgSV\ntotem/~NSg\ntotemic/J\ntotted/VtT\ntotter/VGd>SNgZ\ntotterer/Ng\ntotting/V6N\ntoucan/NgS\ntouch/~VGdSNwgr\ntouchdown/~NSg\ntouche/Bz\ntouched/~JVtTU\ntouchily/Ry\ntouchiness/Nmg\ntouching/~V6JYPN\ntouchline/NS\ntouchpad/NSg\ntouchpaper/NS\ntouchscreen/NgS\ntouchstone/~NgS\ntouchy/J>^p\ntough/~J^Y>pNgVGdXn\ntoughen/VGd>Z\ntoughener/Ng\ntoughie/NSg\ntoughness/~Ng\ntoughs/N\ntoupee/NgS\ntour/~NSgVGdeW\ntourism/~Nmg\ntourist/~NgSV\ntouristed/J\ntouristic/J\ntouristy/J\ntourmaline/Ng\ntournament/~NSg\ntourney/NgSV\ntourniquet/NgSV\ntousle/VGdSN\ntout/~NgSVdG\ntow/~VGd>SNgZ\ntoward/~PJ\ntowards/~P\ntowboat/NgS\ntowel/~NSgVGdz\ntowelette/NSg\ntoweling/NgV6\ntowelled/JVtT!@_₹\ntowelling/NSgV6!@_₹\ntower/~NgVGd\ntowhead/NgSd\ntowhee/NgS\ntowline/NgS\ntown/~NgS\ntownee/NS\ntownhome/NgS\ntownhouse/~NgS\ntownie/NgS\ntownsfolk/Ng\ntownship/~NgS\ntownsman/Ng\ntownsmen/9\ntownspeople/~N9g\ntownswoman/Ng\ntownswomen/9\ntowpath/Ng\ntowpaths/N\ntowrope/NSg\ntoxaemia/Ng!_₹\ntoxemia/Ng\ntoxic/~J\ntoxicity/~NSg\ntoxicological/J\ntoxicologist/NSg\ntoxicology/~Ng\ntoxin/~NSg\ntoy/~NSgVGdJ\ntoyboy/NS\ntr/~NJ\ntrabecula/N\ntrabeculae/N!@_₹\ntrabecular/J\ntrabecule/N\ntrace/~NSgVd>GzZ\ntraceability/Nmg\ntraceable/JU\ntraceback/NgS\ntracer/~Ng\ntracery/NSg\ntrachea/N0g\ntracheae/9\ntracheal/J\ntracheotomy/NSg\ntracing/~NgV\ntrack/~NSgVGd>Z\ntrackball/NSg\ntracker/~NgS\ntrackless/J\ntrackpad/NgS\ntracksuit/NS\ntract/~NSVeEKWr\ntract's\ntractability/Nmgi\ntractable/Ji\ntractably/Ryi\ntraction/~NmgVEWreK\ntractor/~NgSVWeK\ntrad/~JN\ntrade/~NwSgVd>GJzZ\ntrade in/V\ntrade-in/NgS\ntrademark/~NSgVGdJ\ntradeoff/NSg\ntrader/~NgS\ntradesman/N0g\ntradesmen/N9\ntradespeople/N9g\ntradeswoman/N0g\ntradeswomen/N9\ntradie/NgS\ntrading/~V6JNmg\ntradition/~NwgSV\ntraditional/~JYN\ntraditionalism/Ng\ntraditionalist/~NSgJ\ntraduce/Vd>SGZ\ntraducer/Ng\ntraffic/~NmSgVJ\ntrafficked/JVtT\ntrafficker/NSg\ntrafficking/~V6Ng\ntragedian/NSg\ntragedienne/NgS\ntragedy/~NwSg\ntragic/~JN\ntragically/~Ry\ntragicomedy/NwSg\ntragicomic/J\ntrail/~VGd>SNgZ\ntrailblazer/NgS\ntrailblazing/JV6g\ntrailer/~NgSVdG\ntrain/~NSgVGd>ZB\ntrained/~JVtTU\ntrainee/~NSg\ntrainer/~Ng\ntraining/~V6Nmg\ntrainload/NgS\ntrainman/N0g\ntrainmen/N9g\ntrainspotter/NSg\ntrainspotting/~Nm\ntraipse/VdGSNg\ntrait/~NSg\ntraitor/~NSgVJ\ntraitorous/JY\ntrajectory/~NSg\ntram/~NgSV\ntramcar/NS\ntramlines/N9V\ntrammed/VtT\ntrammel/NSgVGd\ntrammeled/VtTU<\ntrammelled/VtTU!@_₹\ntrammelling/V6N!@_₹\ntramming/V6\ntramp/~NSgVGd>Z\ntramper/Ng\ntrample/Vd>GSNgZ\ntrampler/Ng\ntrampoline/NgSVGd\ntramway/~NS\ntrance/~NgSV\ntranche/~NSV\ntranquil/~J>Y^\ntranquility/~Ng\ntranquilize/VGd>SZ\ntranquilizer/Ng\ntranquillise/Vd>SGZ!_₹\ntranquilliser/Ng!_₹\ntranquillity/Ng!_₹\ntrans/~JNV(i\ntransact/VdGS\ntransaction/~NSg\ntransactional/J\ntransactionalism/Ng\ntransactionalist/NSg\ntransactor/NgS\ntransatlantic/~J\ntransaxle/NSg\ntransceiver/NSg\ntranscend/~VGSd\ntranscendence/~Nmg\ntranscendent/~JN\ntranscendental/~NJY\ntranscendentalism/Ng\ntranscendentalist/NSg\ntranscode/VGdSNg\ntranscoder/NgS\ntranscontinental/~JN\ntranscribe/~VGd>SZ\ntranscriber/Ng\ntranscript/~NgSV\ntranscription/~NwSg\ntransducer/~NgS\ntransduction/~Nmg\ntransect/VdGSN\ntransept/~NgS\ntransfer/~VSNgB\ntransferal/NgS\ntransferee/NgS\ntransference/Ng\ntransferred/~VtT\ntransferring/~V6N\ntransfiguration/~Ng\ntransfigure/VGdS\ntransfinite/JN\ntransfix/VdGSN\ntransform/~VGd>SNgBZ\ntransformation/~NSg\ntransformational/~J\ntransformative/~J\ntransformer/~Ng\ntransfuse/VdSGXn\ntransfusion/Nwg\ntransgender/~JNSV\ntransgenic/JN\ntransgress/VGdS\ntransgression/~NSg\ntransgressive/~NSg\ntransgressor/NSg\ntranshumanism/Nmg\ntranshumanist/NgS\ntransience/Ng\ntransiency/Ng\ntransient/~JYNSg\ntransistor/~NSg\ntransistorise/VdSG!_₹\ntransistorize/VdSG\ntransit/~NSgVGd\ntransition/~NSgVGd\ntransitional/~JY\ntransitive/~JYNSgi\ntransitiveness/Ng\ntransitivity/Ng\ntransitory/J\ntransl/~\ntranslatable/JU\ntranslate/~VdGSNnBX\ntranslated/~VU\ntranslation/~NwgS\ntranslator/~NSg\ntransliterate/VdSGnX\ntransliteration/~NwgS\ntranslocation/Nmg\ntranslucence/Nmg\ntranslucency/~Nmg\ntranslucent/~JY\ntransmigrate/VGdSn\ntransmigration/NwSg\ntransmissible/J\ntransmission/~NwgS\ntransmit/~VS\ntransmittable/J\ntransmittal/Ng\ntransmittance/Nmg\ntransmitted/~JVtT\ntransmitter/~NSg\ntransmitting/~V6N\ntransmogrification/Nmg\ntransmogrify/VdSGn\ntransmutation/~NwSg\ntransmute/VdSGB\ntransnational/~JNgS\ntransoceanic/J\ntransom/NSg\ntranspacific/J\ntransparency/~NwSg\ntransparent/~JYU\ntransphobia/Nmg\ntransphobic/J\ntranspilation/NwgS\ntranspile/VSdG\ntranspiler/NgS\ntranspiration/Nmg\ntranspire/VdSG\ntransplant/~VdGSNg\ntransplantation/~Nmg\ntranspolar/J\ntransponder/NSg\ntransport/~VGd>SNwgBZ\ntransportation/~Nmg\ntransporter/~Ng\ntranspose/~VdGSJN\ntransposition/~NgSV\ntranssexual/JNSg\ntranssexualism/Ng\ntransship/VSL\ntransshipment/Ng\ntransshipped/VtT\ntransshipping/V6N\ntransubstantiation/Ng\ntransversal/JN\ntransverse/~JYNgSV\ntransvestism/Ng\ntransvestite/NgS\ntrap/~NgSV\ntrapdoor/~NgSV\ntrapeze/NSgV\ntrapezium/NSg\ntrapezoid/~NSg\ntrapezoidal/J\ntrappable/J\ntrapped/~JVtT\ntrapper/~NSg\ntrapping/~V6SNw\ntrappings/~Nmg\ntrapshooting/Ng\ntrash/~NwgSVGd\ntrashcan/NgS\ntrashiness/Nmg\ntrashy/J>^p\ntrauma/~NwgS\ntraumatic/~JNQ\ntraumatise/VGdS!_₹\ntraumatize/VGdS\ntravail/~NSgVGd\ntravel/~Vd>GSNwgZz\ntraveled/~JVtTU<\ntraveler/~Ng<\ntraveling/~V6NgJ<\ntravelled/JVtT!@_₹\ntraveller/NSg!@_₹\ntravelling/V6SNgJ!@_₹\ntravelog/NgS<\ntravelogue/~NgS\ntraversal/NSg\ntraverse/~NSgVdGJ\ntravertine/~NSg\ntravesty/NSgVGd\ntrawl/NSgVGd>Z\ntrawler/Ng\ntray/~NgSV\ntreacherous/~JYp\ntreacherousness/Nmg\ntreachery/~NSg\ntreacle/NmgV\ntreacly/J\ntread/~VGSNgr\ntreadle/NSgVdG\ntreadmill/NgSV\ntreas\ntreason/~NgB\ntreasonous/J\ntreasure/~NwSgVd>GZ\ntreasurer/~Ng\ntreasury/~NSg\ntreat/~VGdSNgr\ntreatable/J\ntreated/~VtTJU\ntreatise/~NSg\ntreatment/~NwgS\ntreaty/~NSgV\ntreble/~JNgSVGd\ntree/~NgSVd\ntreeing/V6NJ\ntreeless/J\ntreelike/J\ntreeline/N\ntreetop/NSg\ntrefoil/~NSg\ntrek/~NgSV\ntrekked/VtT\ntrekker/NSg\ntrekking/~V6N\ntrellis/NgSVGd\ntrematode/NgS\ntremble/VdGSNg\ntremendous/~JY\ntremolo/~NSg\ntremor/~NgSV\ntremulous/JYp\ntremulousness/Ng\ntrench/~NSVdGr\ntrench's\ntrenchancy/Ng\ntrenchant/JY\ntrencher/NgS\ntrencherman/Ng\ntrenchermen/9\ntrend/~NSgVGd\ntrendily/Ry\ntrendiness/Nmg\ntrendsetter/NS\ntrendsetting/J\ntrendy/~J>^pNSg\ntrepidation/Nmg\ntrespass/~NgSVd>GZ\ntrespasser/Ng\ntress/NgSVE\ntrestle/~NgS\ntrews/N\ntrey/~NgS\n# tri               # prefixes that are not also words in their own right don't belong in the dictionary\ntriad/~NSg\ntriage/NmgVd\ntriager/NSg\ntrial/~NSgJVr\ntrialed/V\ntrialing/VN\ntrialled/VtT!@_₹\ntrialling/V6N!@_₹\ntriangle/~NSg\ntriangular/~JY\ntriangulate/VGdSJn\ntriangulation/~Nmg\ntriathlete/NS\ntriathlon/NSg\ntribal/~JN\ntribalism/Nmg\ntribalistic/J\ntribe/~NSgV\ntribesman/Ng\ntribesmen/~9\ntribeswoman/Ng\ntribeswomen/9\ntriboluminescence/Ng\ntriboluminescent/J\ntribulation/NSg\ntribunal/~NSg\ntribune/~NgS\ntributary/~NSgJ\ntribute/~NSVW\ntribute's\ntrice/VNg\ntricentennial/NgSJ\ntriceps/NgS\ntriceratops/Ng09S   # singular and plural, also has a plural in -s\ntrichina/Ng\ntrichinae/9\ntrichinosis/Ng\ntrick/~NSgVGdJ\ntrickery/Nmg\ntrickily/Ry\ntrickiness/Ng\ntrickle/~NgSVGd\ntrickster/~NSgV\ntricky/~J^>p\ntricolor/~JNSg\ntricolour/NgSJ!@_₹\ntricycle/NSgV\ntrident/~NgS\ntried/~JVU\ntriennial/JYNgS\ntrier/~NSg\ntrifecta/NSg\ntrifle/NgSVGd>Z\ntrifler/Ng\ntrifocals/Ng\ntrig/~JNgV\ntrigger/~NgSVdGJ\ntriggerable/J\ntriglyceride/NgS\ntrigonometric/~J\ntrigonometrical/J\ntrigonometry/~Ng\ntrike/NSgV\ntrilateral/~JS\ntrilby/NSg\ntrill/NSgVGdJ\ntrillion/~NSgH\ntrillionaire/NSg\ntrillionth/JNg\ntrillionths/N\ntrillium/Nmg\ntrilobite/~NSg\ntrilogy/~NSg\ntrim/~VSNgJYp\ntrimaran/NgS\ntrimester/NSg\ntrimmed/~VtTJU\ntrimmer/JcNSg\ntrimmest/JuV\ntrimming/~NSgV6\ntrimmings/Ng\ntrimness/Ng\ntrimonthly/JN\ntrinitrotoluene/Ng\ntrinity/~NSg\ntrinket/NSgV\ntrio/~NgS\ntriode/NgS\ntrip/~NgSVJY\ntripartite/~J\ntripe/~Ng\ntriple/~JNgSVGd\ntriplet/~NSg\ntriplex/JNgSV\ntriplicate/JNgSVGd\ntripod/~NgSV\ntripodal/J\ntripos/N\ntripped/~VtT\ntripper/NSg\ntripping/~V6JN\ntrippy/J^S\ntriptych/~N0g\ntriptychs/N9\ntripwire/NSV\ntrireme/NSg\ntrisect/VSdG\ntrisection/Ng\ntrite/JY^pNW\ntriteness/NgW\ntriter/Jc\ntritium/~Nmg\ntriumph/~N0wgVbGd\ntriumphal/~JN\ntriumphalism/N\ntriumphalist/JN\ntriumphant/~JY\ntriumphs/~N9V6\ntriumvir/NgS\ntriumvirate/~NSg\ntrivalent/JN\ntrivet/NgS\ntrivia/~Nmg\ntrivial/~JYN\ntrivialisation/NwSg!_₹\ntrivialise/VGdS!_₹\ntriviality/NwSg\ntrivialization/NwSg\ntrivialize/VGdS\ntrivium/Nmg\ntrochaic/JN\ntrochee/NSg\ntrod/VtNrU\ntrodden/JVTr\ntroglodyte/NSg\ntroika/NgS\ntrojan/NgSVAdG\ntroll/~NSgVGd\ntrolley/~NSgV\ntrolleybus/~NgS\ntrollop/NSgV\ntrombone/~NgSV\ntrombonist/~NgS\ntromp/VGdSN\ntron/~NS\ntroop/~NSgVGd>Z\ntrooper/~NgV\ntroopship/NgS\ntrope/NSgV\ntrophy/~NSgV\ntropic/~NgSJ\ntropical/~JYN\ntropicalization/Nmg\ntropicalize/VSdG\ntropics/~N9g\ntropism/NSg\ntroposphere/NSg\ntrot/~NgSV\ntroth/NgV\ntrotted/VtT\ntrotter/~NSg\ntrotting/~JNV6\ntroubadour/~NgS\ntrouble/~NwSgVdG\ntroubled/~JVtTU\ntroublemaker/NgS\ntroubleshoot/Vd>GSZ\ntroubleshooter/Ng\ntroubleshooting/NmgV6\ntroubleshot/VtT\ntroublesome/~JY\ntrough/~N0gV\ntroughs/N9\ntrounce/Vd>GSNZ\ntrouncer/Ng\ntroupe/~NgSVGd>Z\ntrouper/Ng\ntrouser/~NSgV\ntrousers/~N9g\ntrousseau/Ng\ntrousseaux/N\ntrout/~NSg09V       # singular and plural, also has a plural in -s\ntrove/NSg\ntrow/VdGSN\ntrowel/NgSVdG\ntrowelled/VtT!@_₹\ntrowelling/V6!@_₹\ntroy/~JS\ntruancy/Ng\ntruant/JNgSVGd\ntruce/~NSg\ntruck/~NSgVGd>Z\ntrucker/~NgJ\ntrucking/~NgV\ntruckle/NgSVGd\ntruckload/NSg\ntruculence/Ng\ntruculent/JY\ntrudge/NgSVGd\ntrue/~J^>NgSVGd\ntruelove/NSg\ntruffle/NgS\ntrug/NS\ntruism/NgS\ntruly/~JRy%U\ntrump/~NSgVGd\ntrumpery/NgJ\ntrumpet/~NgSVGd>Z\ntrumpeter/~NgS\ntruncate/VGdSJn\ntruncation/Nmg\ntruncheon/NSgV\ntrundle/NgSVGd>Z\ntrundler/Ng\ntrunk/~NSgVG\ntruss/~NgSVGd\ntrust/~Nw☁SgVGdJE\ntrustee/~NgSV\ntrusteeship/NwSg\ntrustful/JYE\ntrustfulness/Ng\ntrusting/~VJY\ntrustworthiness/Ng\ntrustworthy/~J^>p\ntrusty/J^>NSg\ntruth/~N0w☁gV>Z\ntruther/NgS\ntruthful/~JYpU\ntruthfulness/NmgU\ntruthiness/Nm\ntruths/~N9VU\ntry/~VGdSNJr\ntry out/V/\ntry's\ntrying/~JYV6N\ntryout/~NSg\ntryptophan/N\ntryst/NSgVdG\ntsar/NgS!_₹\ntsarists/N\ntsetse/NgS\ntsp/N\ntsunami/~NSg\nttys\ntub/~NSgVGd>Z\ntuba/~NgS\ntubal/J\ntubbed/JVtT\ntubbing/NgV6J\ntubby/J^>N\ntube/~NgSV\ntubeless/Jg\ntuber/~Ng\ntubercle/NSg\ntubercular/JN\ntuberculin/Ng\ntuberculosis/~Ng\ntuberculous/J\ntuberose/JNg\ntuberous/J\ntubful/NgS\ntubing/~NgV6\ntubular/~J\ntubule/NgS\ntuck/~Vd>GSNgZ\ntucker/~VdGNg\ntuft/NgSVd>GZ\ntufter/Ng\ntug/~VSNg\ntugboat/~NgS\ntugged/VtT\ntugging/V6N\ntuition/~Ngi\ntularaemia/N!_₹\ntularemia/Ng\ntulip/NSg\ntulle/Ng\ntum/~NS\ntumble/NSgVd>GZ\ntumbledown/J\ntumbler/Ng\ntumbleweed/NSg\ntumbling/~V6Ng\ntumbrel/NSg\ntumbril/NSg!_₹\ntumescence/Ng\ntumescent/J\ntumid/J\ntumidity/Ng\ntummy/NSg\ntumor/~NSg\ntumorous/J\ntumour/NSg!@_₹\ntumult/NSgV\ntumultuous/~JY\ntun/~NSgVGd>Z\ntuna/~NwgS\ntundra/~NSg\ntune/~NgSV\ntune up/V/\ntuneful/JYp\ntunefulness/Ng\ntuneless/JY\ntuner/~Ng\ntuneup/NSg\ntungsten/~Ng\ntunic/~NSg\ntunnel/~NSgVd>GzZ\ntunneler/Ng\ntunnelled/VtT!@_₹\ntunneller/NSg!@_₹\ntunnelling/V6SN!@_₹\ntunny/NSg\ntuple/~NS\ntuppence/N\ntuppenny/JN\ntuque/NSg\nturban/~NSgVd\nturbid/J\nturbidity/Ng\nturbine/~NSg\nturbo/~NSgJV\nturbocharge/VGd>SZ\nturbocharger/Ng\nturbofan/NSg\nturbojet/NSg\nturboprop/~NSg\nturbot/NSg\nturbulence/~Ng\nturbulent/~JY\nturd/NgSVx\nturducken/NSg\ntureen/NSg\nturf/~NgSVdG\nturfy/J\nturgid/JY\nturgidity/Ng\nturkey/~NwSg\nturmeric/~NSg\nturmoil/~NgSV\nturn/~Vd>GSNgrZ\nturn about/V/\nturn around/V/\nturn off/V/\nturn out/V/\nturnabout/NSg\nturnaround/~NSg\nturnbuckle/NSg\nturncoat/NSgV\nturner/~Ngr\nturning/~NgSV6\nturnip/~NSgV\nturnkey/JNgSV\nturnoff/NgS\nturnout/~NgS\nturnover/~NgSJ\nturnpike/~NgSV\nturnstile/NSg\nturntable/~NSgV\nturpentine/NgV\nturpitude/Ng\nturps/N\nturquoise/~NSgJ\nturret/~NSgd\nturtle/~NSgVdG\nturtledove/NSg\nturtleneck/NSgVdG\ntush/~NgSV\ntusk/~NgSVd\ntussle/NSgVdG\ntussock/NgS\ntussocky/J\ntut/VSNg\ntutelage/~Ng\ntutelary/JN\ntutor/~NSgVdG\ntutored/~VtTU\ntutorial/~JNSg\ntutorship/Ng\ntutted/VtT\ntutti/~JNSg\ntutting/V6N\ntutu/NgSV\ntux/NgS\ntuxedo/~NSg\ntwaddle/NgSVGd>Z\ntwaddler/Ng\ntwain/~JNgV\ntwang/NSgVdG\ntwangy/J>^\ntwas/\ntwat/NSVx\ntweak/VdGSNg\ntwee/JN\ntweed/~NSg\ntweeds/Ng\ntweedy/J>^\ntween/NVJ\ntweet/NSVdGr\ntweet's\ntweeter/NSg\ntweezers/~Ng\ntwelfth/~JN0g\ntwelfths/N9\ntwelve/~NSg\ntwelvemonth/Ng\ntwelvemonths/N\ntwentieth/~JN0g\ntwentieths/N9\ntwenty/~NSgH\ntwerk/NSVdG\ntwerp/NSg\ntwice/~R\ntwiddle/VGdSNg\ntwiddly/J\ntwig/NgSV\ntwigged/VtT\ntwigging/V6\ntwiggy/~J^>\ntwilight/~NmgJV\ntwilit/VJ\ntwill/NmgVd\ntwin/~NgSVd>GJZ\ntwine/NwSgV\ntwiner/Ng\ntwinge/VdGSNg\ntwink/VSNY\ntwinkle/~VGdSNgz\ntwinkling/JV6SNwg\ntwinned/~VtT6J^\ntwinning/~V6NJ\ntwinset/NS\ntwirl/NSgVd>GZ\ntwirler/Ng\ntwirly/JN\ntwist/~NSVdGU\ntwist's\ntwister/~NgS\ntwisty/J^>N\ntwit/VSNg\ntwitch/~NgSVGd\ntwitchy/J>^\ntwitted/VtT\ntwitter/~NgSVdG\ntwittery/J\ntwitting/V6N\ntwixt/P\ntwo/~NSg\ntwo-door/JNgS\ntwo-thirds/N\ntwofer/NSg\ntwofold/~J\ntwopence/NSg\ntwopenny/JN\ntwosome/JNSg\ntwp/NJ\ntycoon/~NSg\ntying/~NVrU\ntyke/~NgS\ntympani/Ng\ntympanic/J\ntympanist/NgS\ntympanum/NSg\ntype/~NSVGdr\ntype-check/VSdG\ntype checking/Ng\ntype-in/NgS\ntype's\ntypeahead/Ng\ntypecast/VGS\ntypeface/~NgS\ntypeform/NgS\ntypeset/VSJ\ntypesetter/NgS\ntypesetting/NgV6\ntypewrite/V>SGZ\ntypewriter/~Ng\ntypewriting/NgV\ntypewritten/JV\ntypewrote/V\ntyphoid/~JNmg\ntyphoon/~NgSV\ntyphus/~Nmg\ntypical/~JYNU\ntypicality/Nmg\ntypification/Nmg\ntypify/VGdSn\ntyping/~NwgSV\ntypist/NSg\ntypo/~NgSV\ntypographer/NSg\ntypographic/J\ntypographical/JY\ntypography/~Nmg\ntypological/JQ\ntypology/~NwSg\ntyposquat/NgSV\ntyposquatted/VtT\ntyposquatter/NgS\ntyposquatting/V6\ntyrannic/J\ntyrannical/JY\ntyrannicidal/J\ntyrannicide/NmS\ntyrannise/VGdS!_₹\ntyrannize/VGdS\ntyrannosaur/NgS\ntyrannosaurus/NgS\ntyrannous/J\ntyranny/~NwSg\ntyrant/~NSgJV\ntyre/NgSV!_₹\ntyro/NgS\ntyrosine/Nmg\ntzatziki/Nmg\nubiquitous/~JY\nubiquity/Nmg\nudder/NSg\nufologist/NSg\nufology/Nmg\nugh/~\nuglification/NwgS\nugliness/Nmg\nugly/~J^>pNV\nuh/~N\nuh-huh\nuh-oh\nuhf/~\nukase/NSg\nukulele/~NSg\nulcer/NSg\nulcerate/JVdSGXn\nulceration/~Ng\nulcerous/J\nulna/~N0g\nulnae/N9\nulnar/~J\nulster/~NgS\nult/~N\nulterior/J\nultimate/~JYNgV\nultimatum/~NgS\nultimo/~JN\nultra/~JNSg(\nultraconservative/JNSg\nultrahigh/J\nultraist/NSg\nultralight/~JNSg\nultramarine/JNg\nultramodern/J\nultrasensitive/J\nultrashort/JN\nultrasonic/~JQ\nultrasound/~NgSV\nultraviolet/~JNg\nululate/VdSGnX\nululation/Ng\num/~V\numami/Nmg\numbel/NSg\number/~NgJV\numbilical/JNgS\numbilici/N\numbilicus/Ng\numbra/NSg\numbrage/NgV\numbrella/~NSgV\numiak/NSg\numlaut/NgSV\nump/NSgVGd\numpire/~NgSVGd\numpteen/H\n# un                # prefixes that are not also words in their own right don't belong in the dictionary\nun-American/J\nunabridged/~JNgS\nunacceptability/Nmg\nunacceptable/~JN\nunaccommodating/J\nunaccountably/Ry\nunadventurous/J\nunaesthetic/J\nunaffected/J\nunaffordable/J\nunalive/NgSVdGJ\nunallocated/J\nunalterably/Ry\nunambitious/J\nunanimity/Ng\nunanimous/~JY\nunanswered/J\nunapparent/J\nunappetising/J!_₹\nunappetizing/J\nunappreciative/J\nunary/JN\nunashamed/J\nunassertive/J\nunassimilable/J\nunassuming/JY\nunauthorised/J!_₹\nunauthorized/J\nunavailing/JY\nunaware/~JS\nunban/VS\nunbanned/VtT\nunbanning/V6\nunbeknown/J!_₹\nunbeknownst/~\nunbend/VSG\nunbent/VJ\nunbid/JV\nunbirth/NgS\nunblinking/JY\nunblushing/JYV\nunbosom/VdG\nunbound/~VdJ\nunbox/VGdS\nunbreakable/JN\nunbroken/~J\nuncanny/~J^N\nuncap/VS\nuncaring/JN\nuncatalogued/J\nuncategorized/J\nunceasing/JY\nunchangeable/JN\nuncharacteristic/J\nuncharitable/J\nunchaste/J>^\nuncheck/Sg\nunchurched/J\nuncial/JNg\nuncle/~NSgV\nunclean/~J>^pd\nuncleanly/J^Ry\nunclear/~J^>Vd\nunclipped/JVtT\nunclipping/V6\nuncomfortable/~J\nuncomment/VSdG\nuncommon/~J^\nuncompelling/J\nuncomplaining/JY\nuncomplicated/VJ\nuncomprehending/JY\nuncompress/VGdS\nuncompromising/~JY\nunconditional/~JYN\nunconfigured/J\nuncongenial/J\nunconscionable/J\nunconscionably/Ry\nunconscious/~JNg\nunconstitutional/~JY\nuncontrollably/Ry\nuncontroversial/~J\nuncool/J\nuncooperative/J\nuncopyrightable/J\nuncorrupted/J\nuncouth/JY\nuncredited/J\nuncrewed/J\nuncrushable/J\nunction/~NSg\nunctuous/JYp\nunctuousness/Ng\nuncut/~J\nundaunted/JY\nundead/JN\nundecided/~JNSgV\nundefine/VGdS\nundemonstrative/JY\nundeniably/Ry\nunder/~PJN(\nunderachieve/VGd>SLZ\nunderachiever/Ng\nunderact/VSdG\nunderage/~JN\nunderappreciated/VtTJ\nunderarm/NSgJV\nunderbelly/~NSg\nunderbid/VbtTdSN\nunderbidding/V6\nunderbody/NgS\nunderbrush/NgV\nundercarriage/NgS\nundercharge/VGdSNg\nunderclass/NgS\nunderclassman/Ng\nunderclassmen/9\nunderclock/VSdG\nunderclothes/Nmg\nunderclothing/Nmg\nundercoat/NwSgVGdz\nundercoating/NgV\nundercount/NSVdG\nundercover/~JNV\nundercurrent/NSgV\nundercut/NSgVJ\nundercutting/V6N\nunderdeliver/VSdG\nunderdelivery/NgS\nunderdeveloped/~JV\nunderdevelopment/Nmg\nunderdog/~NSg\nunderdone/J\nunderemployed/J\nunderemployment/Ng\nunderestimate/VdGSNgnX\nunderestimation/Ng\nunderexpose/VGdSJ\nunderexposure/NgS\nunderfed/JVtT\nunderfeed/VGS\nunderfloor/JN\nunderflow/NV\nunderfoot/JNV\nunderfund/VSdG\nunderfur/Ng\nundergarment/NSg\nundergird/VSdG\nundergo/~VG\nundergoes/~V\nundergone/~V\nundergrad/NS\nundergraduate/~NSgJ\nunderground/~JNgSV\nundergrowth/Nmg\nunderhand/JVN\nunderhanded/JYpVN\nunderhandedness/Ng\nunderhood/J\nunderinflated/V\nunderinsured/J\nunderinvest/VGdS\nunderlaid/tT\nunderlain/V\nunderlay/VSGNg\nunderlie/VS\nunderline/~NgSVGdJ\nunderling/NgS\nunderlip/NSg\nunderlying/~JNV6\nundermanned/VtTJ\nundermentioned/J\nundermine/~VGdS\nundermost/J\nunderneath/~PJNg\nunderneaths/N\nundernourished/J\nundernourishment/Ng\nunderpaid/J\nunderpants/Ng\nunderpart/VSNg\nunderpass/~NgS\nunderpay/VGSL\nunderpayment/NwSg\nunderperform/VGdS\nunderperformance/Ng\nunderperformer/NgS\nunderpin/VS\nunderpinned/VtT\nunderpinning/V6SNg\nunderplay/NSVdG\nunderpopulated/J\nunderpower/VSdG\nunderprepared/J\nunderprivileged/~JN\nunderproduction/Nmg\nunderrate/VGdSN\nunderrepresent/VdGS\nunderscore/NSgVdG\nundersea/~JS\nunderseal/NSgdG\nundersecretary/~NSg\nundersell/VGS\nunderserve/VdSG\nundersexed/J\nundershirt/NSg\nundershoot/VGSN\nundershorts/Ng\nundershot/VJN\nunderside/~NgS\nundersign/VdGS\nundersigned/JNg\nundersized/J\nunderskirt/NSg\nundersold/VtTdJ\nunderspent/V\nunderstaff/VSdG\nunderstand/~VbSGBz\nunderstandably/~Ry\nunderstanding/~NwgJYV6\nunderstate/VdSGL\nunderstatement/NSg\nunderstood/~JVtT\nunderstudy/~VGdSNg\nundertake/~VG>SNZz\nundertaken/~V\nundertaker/~NgS\nundertaking/~NgV\nunderthings/Ng\nundertone/NgSV\nundertook/~V\nundertow/VSNg\nunderused/JV\nunderutilised/JV!_₹\nunderutilized/JV\nundervaluation/Ng\nundervalue/VdGSN\nunderwater/~JNV\nunderway/~N\nunderwear/~Nmg\nunderweight/JNgV\nunderwent/~V\nunderwhelm/VdGS\nunderwire/NSVd\nunderworld/~NgS\nunderwrite/VG>SZ\nunderwriter/Ng\nunderwritten/V\nunderwrote/V\nundesirable/~JNgS\nundiagnosed/J\nundies/NgV\nundirected/J\nundiscouraged/J\nundisputedly/Ry\nundo/~VNJ\nundoubted/J\nundoubtedly/R       # adverb of certainty aka viewpoint/sentence adverb\nundramatic/J\nundue/~J\nundulant/J\nundulate/VdSGJXn\nundulation/Ng\nundying/JV\nunearthliness/Ng\nunease/NgV\nuneasy/~J^\nuneatable/J\nuneconomic/J\nuneditable/J\nunelected/J\nunemployed/~Jg\nunencrypted/J\nunending/J\nunenterprising/J\nunequal/~JYNd\nunerase/VSdG\nunerring/JY\nunessential/J\nunevacuated/J\nunevaluated/J\nuneven/~JYV\nunexceptionably/R   # viewpoint/stance adverb aka comment/sentence adverb\nunexcited/J\nunexciting/J\nunexpanded/J\nunexpected/~JYpN\nunexpectedness/Ng\nunexplainable/J\nunexploded/J\nunfailing/JY\nunfair/~J^Y>pV\nunfaltering/J\nunfamiliar/~JN\nunfathomably/Ry%\nunfed/JN\nunfeeling/JY\nunfeminine/J\nunfit/~JVS\nunfitting/J\nunfix/VGdSB\nunflagging/JY\nunflappability/Nmg\nunflappable/J\nunflappably/Ry\nunflattering/JV\nunflinching/JY\nunfollow/VSdG\nunforgettably/R%y\nunforgivably/R%\nunforgiven/JN\nunfortunate/~JNgS\nunfree/J\nunfriendly/J^N\nunfrock/VdG\nunfruitful/J\nunfunny/J\nungainliness/Nmg\nungainly/J>^pN\nungenerous/J\nungentle/J\nungodly/J^\nungraceful/JY\nungrounded/J\nungrudging/JY\nunguarded/J\nunguent/NSgJ\nungulate/JNgS\nunhandled/J\nunhandy/J^\nunhappy/~J^NV\nunhealthful/J\nunhealthy/~J^\nunhistorical/J\nunholy/~J^\nunhurt/J\n# uni               # prefixes that are not also words in their own right don't belong in the dictionary\nunibody/NSg\nunicameral/~J\nunicellular/JN\nunicorn/~NSgVJ\nunicycle/NSgV\nunidirectional/JN\nunification/~NwSgr\nunifier/NgS\nuniform/~NSgJYVdG\nuniformity/~Nmg\nunify/~VGdSrn\nunignorable/J\nunilateral/~JY\nunilateralism/Nm\nunimportant/~J\nunimpressive/J\nuninflected/J\nuninformative/J\nuninhibited/JY\nuninstallation/NSg\nuninsurable/J\nuninsured/JN\nunintelligent/J\nunintended/~J\nuninteresting/J\nuninterrupted/~JY\nuninterruptible/J\nunintuitive/~JYpN\nuninvested/J\nuninviting/J\nunion/~NSgVJr\nunionism/Nmg\nunionist/~JNgS\nunique/~JY^>pN\nuniqueness/~Nmg\nunironic/JQ\nunisex/JNg\nunison/~Ng\nunit/~NSg\nunitary/~JN\nunite/~VGdSNrE\nunitedly/Ry\nunities/N\nunitise/VdSG!_₹\nunitize/VdSG\nunity/~NmgE\nunivalent/JN\nunivalve/JNSg\nuniversal/~JYNgS\nuniversalise/VdSG!_₹\nuniversalism/~N\nuniversalist/~JN\nuniversality/Nmg\nuniversalize/VdSG\nuniverse/~ONSg\nuniversity/~NSg\nunivocal/JN\nunjust/~JY\nunkempt/J\nunkillable/J\nunkind/J^\nunkindly/J^\nunknowable/JNg\nunknown/~JNSgV\nunleaded/JVNg\nunless/~C\nunlicense/VGdS\nunlike/~JpPNVB\nunlikely/~J^N\nunlink/NgSVdG\nunlit/J\nunlivable/J!_₹\nunlock/~VdGSN\nunlockable/J\nunlovable/J\nunlovely/J^>N\nunloving/JV\nunlucky/~J^\nunmagnetised/J!_₹\nunmagnetized/J\nunmanly/J^\nunmarried/~JN\nunmeaning/JN\nunmedicated/J\nunmentionable/JNgS\nunmentionables/Ng\nunmerged/J\nunmet/J\nunmindful/J\nunmissable/J\nunmistakably/Ry\nunmoral/J\nunmount/VdSG\nunmovable/J\nunmusical/J\nunmute/VSGd\nunnecessary/~J\nunnerving/VJY\nunnest/VSGd\nunobservant/J\nunobtanium/Nmg\nunoffensive/J\nunofficial/~JY\nunopen/J\nunoptimized/VJ\nunoriginal/JN\nunpause/VdSG\nunpayable/J\nunpeople/V9\nunperceptive/J\nunpersuasive/J\nunpick/VGdS\nunpin/VS\nunpleasing/J\nunpolitical/J\nunpolymerised/J!_₹\nunpolymerized/J\nunpopular/~J\nunpowered/J\nunpractical/J\nunprecedented/~JY\nunpredicted/J\nunprofessional/JYN\nunpromising/JV\nunpropitious/J\nunprosperous/J\nunprovokedly/Ry\nunquestioning/JY\nunquiet/J^>V\nunravelling/V6N!@_₹\nunread/JVNB\nunready/J\nunreal/~J\nunreasoning/J\nunreflectively/Ry\nunregenerate/J\nunrelated/~J\nunrelenting/JY\nunrelieved/JY\nunremarkable/~J\nunremitting/JY\nunrepairable/J\nunrepentant/J\nunreported/J\nunrepresentative/J\nunrest/~Nmg\nunrestfully/Ry\nunrestored/J\nunrevealing/J\nunripe/J^>\nunroll/VGdS\nunromantic/J\nunruliness/Nmg\nunruly/~J>^p\nunsafe/~JY^>V\nunsalable/NJ!@_₹\nunsaleable/JN\nunsavory/J<\nunsavoury/J!@_₹\nunscathed/J\nunsee/VS\nunseeing/JY\nunseemly/J^\nunseen/~JVNg\nunselect/VGdS\nunsentimental/J\nunset/JV\nunsettlingly/R\nunshakable/J\nunshakably/Ry\nunshakeable/J!_₹\nunshapely/J\nunshockable/J\nunshorn/J\nunsightliness/Ng\nunsightly/J^p\nunskillful/JY!@_₹\nunskippable/J\nunsmiling/J\nunsociable/JN\nunsocial/J\nunsold/~J\nunsound/J>Y^p\nunspeakable/JN\nunspeakably/Ry\nunspecific/J\nunspectacular/J\nunsporting/J\nunstable/~JV\nunstage/VdSG\nunsteady/J^>pV\nunstick/VSG\nunstinting/JY\nunstoppably/Ry\nunstrapping/V6\nunstuck/VtT\nunsubscriber/NgS\nunsubstantial/J\nunsubtle/J\nunsuitable/~J\nunsure/~J\nunsuspecting/~JY\nunsustainable/JY\nunsymmetrical/J\nuntactful/J\nuntagged/JVtT\nuntagging/V6\nuntar/VbS\nuntarred/VtT\nuntarring/V6\nuntaxed/J\nunterminated/J\nunthinkably/R%\nunthinking/JYV\nunthoughtful/J\nuntidy/J^>pV\nuntil/~PC\nuntimely/~J^\nuntiring/JY\nuntouchable/JNgS\nuntoward/J\nuntracked/J\nuntraveled/J!@_₹\nuntrue/~J>^\nuntrusted/J\nuntrustworthy/J\nuntruth/NwgS\nuntyped/J\nunusually/R\nunutterable/JN\nunutterably/R%\nunvaccinated/J\nunwarrantable/J\nunwary/J^\nunwavering/J\nunwed/JNV\nunwelcome/~JVG\nunwell/J\nunwieldiness/Ng\nunwieldy/~J^>p\nunwinder/NSg\nunwise/J>Y^\nunworried/J\nunworthy/~J^N\nunwound/V\nunwrapping/V6N\nunyielding/J\nup/~PJNSV\nup front/JR\nupbeat/~JNgS\nupbraid/VGdSN\nupbringing/~NgS\nupchuck/NSVGd\nupcoming/~JNV\nupcountry/JNg\nupdate/~NgSVGd>\nupdation/NgS₹\nupdraft/~NgS\nupdraught/NSg!_₹\nupend/VSGd\nupfront/JNV\nupgradable/J\nupgrade/~NgSVGd\nupheaval/~NgS\nupheld/~V\nuphill/~JNgS\nuphold/~VG>SZ\nupholder/Ng\nupholster/VGdSNr\nupholsterer/NgS\nupholstery/~Ng\nupkeep/~NgV\nupland/~NgSJ\nuplift/~VdGSNgz\nuplink/NgSVdG\nupload/~VdGSN\nuploader/NgS\nupmarket/~JV\nupmost/J\nupon/~P\nupped/VtT\nupper/~JNSg\nuppercase/JNgSVdG\nupperclassman/Ng\nupperclassmen/9\nupperclasswoman/N\nupperclasswomen/9\nuppercut/NgSV\nuppercutting/V6\nuppermost/~J\nupping/V6N\nuppish/J\nuppity/J\nupraise/VdSG\nuprate/VdSG\nuprear/VGSd\nupright/~JYpNgSV\nuprightness/Ng\nuprising/~NSgV\nupriver/~J\nuproar/~NSgV\nuproarious/JY\nuproot/VGdSN\nupsample/SGg\nupscale/~JVSdG\nupscaler/NgS\nupset/~JNSgV\nupsetting/~V6NJ\nupshot/NSg\nupside/~NSgP\nupsilon/~NgS\nupskill/VdSG\nupstage/NSJVGd\nupstairs/~JN\nupstanding/JV\nupstart/~NgSJVdG\nupstate/~NgJ\nupstream/~JVN\nupstroke/NSg\nupsurge/NgSVGd\nupswing/NgSV\nuptake/~NSgV\nuptempo/J\nupthrust/NSgVG\nuptick/NSg\nuptight/JN\nuptown/~NgJ\nuptrend/NV\nupturn/NSgVGd\nupvote/NgSVdG\nupward/~NSJY\nupwind/JV\nuracil/Ng\nuraemia/Ng!_₹\nuraemic/J!_₹\nuranium/~Nmg\nurban/~J\nurbane/J>Y^\nurbanisation/Ng!_₹\nurbanise/VdSG!_₹\nurbanism/~Nmg\nurbanite/NgS\nurbanity/Ng\nurbanization/~Nwg\nurbanize/VdSG\nurbanologist/NgS\nurbanology/Ng\nurchin/NSg\nurea/~Ng\nuremia/Ng\nuremic/J\nureter/NSg\nurethane/Ng\nurethra/Ng\nurethrae/9\nurethral/J\nurge/~NgSVGd\nurgency/~Ng\nurgent/~JY\nuric/J\nurinal/NSgJ\nurinalyses/N\nurinalysis/Ng\nurinary/~JN\nurinate/VGdSn\nurination/Ng\nurine/~NmgV\nurn/~NSgV\nurogenital/J\nurological/J\nurologist/NgS\nurology/Nmg\nursine/JN\nurticaria/Ng\nus/~Ia1o:           # I~pronoun a~personal 1~person :~plural o~object\nusability/~Nmg\nusable/~JUr\nusage/~NwSg\nuse/~NwSgVbdGrE\nuse case/NgS\nused/~VtTJU\nuseful/~JYp\nusefulness/~Nmg\nuseless/~JYp\nuselessness/Nmg\nuser/~NgS\nuser-friendly/J\nuserland/NgS\nusername/~NgS\nusher/~NSgVdG\nusherette/NSg\nusu/~J\nusual/~JNU\nusually/R8\nusual's\nusurer/NSg\nusurious/J\nusurp/VSd>GZ\nusurpation/Ng\nusurper/~NgS\nusury/~Nmg\nute/NSg_            # Australian pickup truck\nutensil/NSg\nuteri/N9\nuterine/~JN\nuterus/~N0g\nutil/NgS\nutilisation/Ng!_₹\nutilise/VGdSB!_₹\nutilitarian/~JNgS\nutilitarianism/~Nmg\nutility/~NwSgJ\nutilization/~Ng\nutilize/~VGdSB\nutmost/~JNg\nutopia/~NSg\nutopian/~J\nutter/~JYVSdG\nutterance/~NSg\nuttermost/JNg\nuveitis/N\nuvula/NSg\nuvular/JNgS\nuxorious/J\nv/NSPr\nvac/NSV\nvacancy/~NwSg\nvacant/~JY\nvacate/~VdSG\nvacation/~NgSVGd>Z\nvacationer/Ng\nvacationist/NSg\nvaccinate/VGdSnX\nvaccination/~Ng\nvaccine/~JNwSgV\nvacillate/VGdSXn\nvacillation/Ng\nvacuity/Ng\nvacuole/NgS\nvacuous/JYp\nvacuousness/Ng\nvacuum/~NSgVGd\nvagabond/NSgVdGJ\nvagabondage/Ng\nvagarious/J\nvagary/NSg\nvagina/~NSg\nvaginae/9\nvaginal/~JY\nvaginitis/N\nvagrancy/Ng\nvagrant/~NgSJ\nvague/~JY^>pNV\nvagueness/Ng\nvagus/N\nvain/~JY^>V\nvainglorious/JY\nvainglory/NgV\nval/~N\nvalance/~NgS\nvale/~NgS\nvalediction/NmgS\nvaledictorian/NSg\nvaledictory/JNSg\nvalence/~NgS\nvalency/NSg\nvalentine/~NSg\nvalet/~NSgVdG\nvaletudinarian/JNgS\nvaletudinarianism/Nmg\nvaliance/Ng\nvaliant/~JYN\nvalid/~JY\nvalidate/~VGdSin\nvalidation/~NwSgi\nvalidations/N\nvalidator/NgS\nvalidity/~Ngi\nvalidness/Ng\nvaline/NgS\nvalise/NSg\nvalley/~NSgV\nvalor/~Nmg<\nvalorous/JY\nvalour/Nmg!@_₹\nvaluable/~JNgS\nvaluate/VdSG\nvaluation/~NgSer\nvalue/~NwSVGder\nvalue's\nvalueless/J\nvaluer/NSg\nvalve/~NSgVdG\nvalveless/J\nvalvular/J\nvamoose/VdSG\nvamp/NgSVdGr\nvampire/~NSgV\nvampiric/J\nvan/~NSgV\nvanadium/~Ng\nvandal/~NSg\nvandalise/VbdSG!_₹\nvandalism/~Ng\nvandalization/Ng\nvandalize/VbdSG\nvane/~NgS\nvanguard/~NgS\nvanilla/~NSgJ\nvanish/~VdGSNz\nvanity/~NSg\nvanned/VtT\nvanning/V6N\nvanquish/VGd>SZ\nvanquisher/Ng\nvantage/~NSgV\nvape/NSVGd\nvapid/JYp\nvapidity/Nmg\nvapidness/Nmg\nvapor/~NwSgV\nvaporisation/Ng!_₹\nvaporise/Vd>SGZ!_₹\nvaporiser/NgS!_₹\nvaporization/Nmg\nvaporize/Vd>SGZ\nvaporizer/NgS\nvaporous/J\nvaporware/Nmg<\nvapory/J<\nvapour/NmgSV!@_₹\nvapoury/J!@_₹\nvaquero/NgS\nvar/~NS\nvariability/~Nmgi\nvariable/~JNSgi\nvariably/Ryi\nvariadic/JNgS\nvariance/~NSg\nvariant/~JNgS\nvariate/NVnX\nvariation/~NwgS\nvaricolored/J<\nvaricoloured/J!@_₹\nvaricose/J\nvaried/~VtTJU\nvariegate/VdSGJn\nvariegation/Ng\nvarietal/JNSg\nvariety/~NwSg\nvarious/~JY\nvarlet/NSg\nvarmint/NgS\nvarnish/NwgSVGd\nvarnished/VtTJU\nvarsity/~NSg\nvary/~VdGSN\nvarying/~V6NU\nvascular/~J\nvascularize/VdSG\nvase/~NgSV\nvasectomy/NSg\nvasoconstriction/Nmg\nvasomotor/J\nvassal/~NSgJV\nvassalage/Ng\nvast/~J>Y^pNgS\nvastness/Ng\nvat/~NSgVJ\nvatted/VtT\nvatting/V6\nvaudeville/~Ng\nvaudevillian/NgSJ\nvault/~NSgVd>GZ\nvaulter/Ng\nvaulting/NgVJ\nvaunt/VdGSNg\nvb/~N\nveal/NmgV\nvector/~NSgVGd\nvectorization/Nmg\nvectorize/VdSG>\nveejay/NSgV\nveep/NgS\nveer/~VdGSNg\nveg/JNmgV\nvegan/~JNSg\nveganism/Nmg\nvegeburger/NS\nveges/NV\nvegetable/~NSgJ\nvegetarian/~NSgJ\nvegetarianism/~Nmg\nvegetate/VGdSnv\nvegetation/~Nmg\nvegged/VtT\nvegges/Vh\nveggie/NSgJ\nveggieburger/NS\nvegging/V6\nvehemence/Nmg\nvehemency/Nmg\nvehement/JY\nvehicle/~NgSV\nvehicular/~J\nveil/~NSVdGU\nveil's\nvein/~NgSVdG\nvela/~N\nvelar/~JNSg\nveld/NgS\nvellum/Nmg\nvelocipede/NgSV\nvelocity/~NwSg\nvelodrome/~NS\nvelour/NgS\nvelum/Nmg\nvelvet/~NmgVJ\nvelveteen/Nmg\nvelvety/J\nvenal/JY\nvenality/Nmg\nvenation/Ng\nvend/VdGSN\nvendetta/~NSg\nvendible/JN\nvendor/~NgSVdG\nveneer/NgSVdG\nvenerability/Ng\nvenerable/~J\nvenerate/VdSGn\nveneration/~Ng\nvenereal/J\nvengeance/~Ng\nvengeful/~JYr\nvenial/J\nvenireman/Ng\nveniremen/9\nvenison/Ng\nvenom/~NgVJ\nvenomous/~JY\nvenous/~J\nvent/~NSVdG\nvent's\nventilate/VGdSn\nventilation/~Ng\nventilator/NSg\nventilatory/J\nventral/~JN\nventricle/~NSg\nventricular/~J\nventriloquism/Ng\nventriloquist/NSg\nventriloquy/Ng\nventure/~NSgVdG\nventuresome/JYp\nventuresomeness/Ng\nventurous/JYp\nventurousness/Ng\nvenue/~NSgr\nveracious/JY\nveracity/~Nmg\nveranda/NSg!@<₹\nverandah/NSg_\nverapamil/N\nverb/~NgSVK\nverbal/~JYNgSV\nverbalisation/NwSg!_₹\nverbalise/VGdS!_₹\nverbalization/NwSg\nverbalize/VGdS\nverbatim/~JN\nverbena/NSg\nverbiage/NgS\nverbose/~JY\nverbosity/Nmg\nverboten/J\nverdant/JY\nverdict/~NSg\nverdigris/NgSVGd\nverdure/NmgV\nverge/~NSVdGW\nverge's\nverger/NgS\nverifiable/~JU\nverifiably/RyU\nverification/~NwgS\nverified/~VtTJNU\nverifier/NgS\nverify/~VdSGn\nverily/R            # adverb of affirmation/certainty; modal adverb\nverisimilitude/Ng\nveritable/~J\nveritably/Ry\nverity/~NSg\nvermicelli/Nmg\nvermiculite/Ng\nvermiform/J\nvermilion/~NmgJV\nvermin/Nmg\nverminous/J\nvermouth/NwgS\nvernacular/~NwgSJ\nvernal/J\nvernier/NSg\nveronica/~NgV\nverruca/N0Sg\nverrucae/9\nversa/~\nversatile/~J\nversatility/~Nmg\nverse/~NgSVGdrWnX\nversed/~JVtTU\nversification/Nmg\nversifier/Ng\nversify/VGd>SZn\nversion/~NgSVrWi\nversioned/JVtT\nversioning/~NmgV6\nverso/~NSg\nversus/~PV\nvert/~NJVr\nvertebra/~N0g\nvertebrae/~N9\nvertebral/~JN\nvertebrate/~JNgSi\nvertex/~N0gS\nvertical/~JYNgS\nvertices/~N9\nvertiginous/J\nvertigo/~Nmg\nverve/~Ng\nvery/~R%J>^         # very is an adverb of debree but not an adverb of manner\nvesicle/~NSg\nvesicular/J\nvesiculate/VJ\nvesiculopapular/J\nvesper/NgSJ\nvessel/~NgSV\nvest/~NSVdGiL\nvest's\nvestal/~JNgS\nvestibular/J\nvestibule/NgSV\nvestige/NSg\nvestigial/~JYN\nvesting/NgV\nvestment/NgSi\nvestry/~NSg\nvestryman/Ng\nvestrymen/9\nvet/~NSgV\nvetch/NgS\nveteran/~NSgJ\nveterinarian/~NgSJ\nveterinary/~JNSg\nveto/~N0gVdG\nvetoes/N9V\nvetted/VtTJ\nvetting/~V6N\nvex/VGdSN\nvexation/NSg\nvexatious/JY\nvhf/~\nvi/~N\nvia/~NP\nviability/~Nmg\nviable/~JNU\nviably/Ry\nviaduct/~NSg\nvial/NgSV\nviand/NSg\nvibe/~NgSVdG\nvibe-code/VSdG      # as used by Collins\nvibe coder/NgS      # as used by Collins\nvibe coding/Nmg     # as used by Collins and Merriam-Webster\nvibraharp/NSg\nvibrancy/Nmg\nvibrant/~JYN\nvibraphone/~NgS\nvibraphonist/NgS\nvibrate/VGdSNnX\nvibration/~Ng\nvibrational/J\nvibrato/~NgS\nvibrator/NSg\nvibratory/J\nviburnum/NSg\nvicar/~NSg\nvicarage/~NSg\nvicarious/JYp\nvicariousness/Ng\nvice/~NgSVJP(e\nviced/JVtT\nvicegerent/NSgJ\nvicennial/JN\nviceregal/~JN\nviceroy/~NgS\nvichyssoise/Ng\nvicing/V6\nvicinity/~Ng\nvicious/~JYp\nviciousness/Ng\nvicissitude/NSg\nvictim/~NgSV\nvictimisation/Nmg!_₹\nvictimise/VGdS!_₹\nvictimization/Nmg\nvictimize/VGdS\nvictimless/J\nvictor/~NgS\nvictorious/~JY\nvictory/~NwSgV\nvictual/NSgVdG\nvictualled/VtT!@_₹\nvictualling/V6N!@_₹\nvicuña/NgS\nvicuna/NgS\nvidelicet/\nvideo/~NwSgVGd\nvideo game/NgS\nvideocassette/NSg\nvideoconferencing/VNmg\nvideodisc/NgS\nvideophone/NgS\nvideotape/~NwSgVdG\nvideotex/Nmg\nvie/~VdSN\nview/~NgSVd>GrZ\nviewable/J\nviewer/~NgSr\nviewership/~Nmg\nviewfinder/~NSg\nviewing/~V6SNwgJ\nviewpoint/~NgS\nviewport/NSgV\nvigesimal/JN\nvigil/~NSgV\nvigilance/~Ng\nvigilant/~JY\nvigilante/~NSg\nvigilantism/Ng\nvigilantist/Jg\nvignette/~NSgVdG\nvignettist/NgS\nvigor/~Ng\nvigorous/~JY\nvigour/Ng!@_₹\nvii/~N\nviii/~\nviking/~NgS\nvile/~JY^>p\nvileness/Ng\nvilification/Ng\nvilify/VdSGn\nvilla/~NSg\nvillage/~NSg>Z\nvillager/Ng\nvillain/~NSgV\nvillainize/VGdS\nvillainous/~J\nvillainy/NSgJ\nvillein/NSg\nvilleinage/Ng\nvilli/N\nvillus/Ng\nvim/Ng\nvinaigrette/Ng\nvincible/Ji\nvindicate/VdSGXn\nvindication/Ng\nvindicator/NgS\nvindictive/JYp\nvindictiveness/Ng\nvine/~NgS\nvinegar/~NgV\nvinegary/J\nvineyard/~NgS\nvino/Ng\nvinous/J\nvintage/~NgSJV\nvintner/NgS\nvinyl/~NSgJ\nviol/~NgSVB\nviola/~NSg\nviolable/Ji\nviolate/~VGdSnX\nviolation/~Ng\nviolative/J\nviolator/NSg\nviolence/~NmgV\nviolent/~JYVN\nviolet/~NgSJ\nviolin/~NgSV\nviolincello/NS\nviolinist/~NSg\nviolist/NgS\nvioloncellist/NSg\nvioloncello/NgS\nviper/~NSg\nviperous/J\nvirago/N0g\nviragoes/N9\nviral/~JN\nvireo/~NSg\nvirgin/~NgSJ\nvirginal/JNSg\nvirginity/~Ng\nvirgule/NgS\nvirile/J\nvirility/Nmg\nvirologist/NSg\nvirology/~Ng\nvirtual/~JYN\nvirtualisation/NwSg!_₹\nvirtualise/VdSG!_₹\nvirtualization/~NwSg\nvirtualize/VdSG\nvirtue/~NSg\nvirtuosity/Ng\nvirtuoso/~NgJ\nvirtuous/~JYp\nvirtuousness/Ng\nvirulence/~Ng\nvirulent/~JY\nvirus/~NgSV\nvis-à-vis/P\nvisa/~NgSVdG\nvisage/NgS\nviscera/N\nvisceral/~JY\nviscid/J\nviscose/Ng\nviscosity/~Ng\nviscount/~NSg\nviscountcy/NSg\nviscountess/NgS\nviscous/~J\nviscus/Ng\nvise/NgSVGdre\nvisibility/~Nmgi\nvisible/~Ji\nvisibly/~Ryi\nvision/~NwSgVGdK\nvisionary/~JNSg\nvisit/~VGdSNr\nvisit's\nvisitant/NgSJ\nvisitation/~NgS\nvisitor/~NgS\nvisor/NSgV\nvista/~NSgV\nvisual/~JYNSg\nvisualisation/NSg!_₹\nvisualise/Vd>SGZ!_₹\nvisualiser/Ng!_₹\nvisualization/~NSg\nvisualize/~Vd>SGZ\nvisualizer/Ng\nvita/~Ng\nvitae/~9\nvital/~JYS\nvitalisation/Ngr!_₹\nvitalise/VGSder!_₹\nvitality/~Nmg\nvitalization/Ngr\nvitalize/VGSder\nvitals/Ng\nvitamin/~NgSV\nvitiate/VGdSn\nvitiation/Ng\nviticulture/~Nmg\nviticulturist/NgS\nvitreous/JN\nvitrifaction/Nmg\nvitrification/Nmg\nvitrify/VGdSn\nvitrine/NSg\nvitriol/NgV\nvitriolic/JQ\nvittles/NgV\nvituperate/VGdSJnv\nvituperation/Ng\nviva/~VSNg\nvivace/JN\nvivacious/JYp\nvivaciousness/Ng\nvivacity/Ng\nvivaria/N9\nvivarium/N0Sg\nvivid/~J>Y^pN\nvividness/Ng\nvivify/VdSGr\nviviparous/J\nvivisect/VdGS\nvivisection/Nmg\nvivisectional/J\nvivisectionist/NSg\nvixen/~NSg\nvixenish/JY\nviz/~JVN\nvizier/~NSg\nvlf\nvlog/NSgVbn\nvlogged/VtT\nvlogger/NgS\nvlogging/V6Nmg\nvocab/N\nvocable/NgSJ\nvocabulary/~NSg\nvocal/~JYNSg\nvocalic/J\nvocalisation/NSg!_₹\nvocalise/VdGSN!_₹\nvocalist/~NSg\nvocalization/NgS\nvocalize/VdSG\nvocation/~NSgWiKr\nvocational/~JY\nvocative/JNgS\nvociferate/VdSGn\nvociferation/Ng\nvociferous/JYp\nvociferousness/Ng\nvocoder/NgS\nvodka/~NwSg\nvogue/~NSgV\nvoguish/J\nvoice/~NSgVdGi\nvoice-over/NgS\nvoiced/~VtTJU\nvoiceless/~JYp\nvoicelessness/Ng\nvoicemail/~NSgV\nvoid/~JNgSVdGB\nvoilà\nvoila/\nvoile/Ng\nvol/~NS\nvolatile/~JN\nvolatilise/VdSG!_₹\nvolatility/~Ng\nvolatilize/VdSG\nvolcanic/~JN\nvolcanism/~Nmg\nvolcano/~N0gV\nvolcanoes/~N9\nvole/~NgSV\nvolition/~Nmg\nvolitional/JN\nvolley/~NSgVGd\nvolleyball/~NgS\nvolt/~NgSr\nvoltage/~NgS\nvoltaic/J\nvoltmeter/NSg\nvolubility/Ng\nvoluble/J\nvolubly/Ry\nvolume/~NwSgV\nvolumetric/J\nvoluminous/JYp\nvoluminousness/Ng\nvoluntarily/~Ryi\nvoluntarism/Ng\nvoluntary/~JNSg\nvolunteer/~NSgVGd\nvolunteerism/Ng\nvoluptuary/NSgJ\nvoluptuous/JYp\nvoluptuousness/Ng\nvolute/NSgJ\nvomit/VdGSNmg\nvon Neumann/O\nvoodoo/~NSgVGd\nvoodooism/Ng\nvoracious/JYp\nvoraciousness/Ng\nvoracity/Ng\nvortex/~NgSV\nvortices/9\nvotary/JNSg\nvote/~NSVGdv\nvote's\nvoter/~NSg\nvouch/Vd>GSNZ\nvoucher/NgV\nvouchsafe/VdSG\nvow/~NSgVGd\nvowel/~NSgV\nvoxel/NSg\nvoyage/~NgSVGd>Z\nvoyager/~Ng\nvoyageur/NSg\nvoyeur/NgS\nvoyeurism/Ng\nvoyeuristic/J\nvs./~               # versus\nvtable/NgS\nvulcanisation/Ng!_₹\nvulcanise/VGdS!_₹\nvulcanization/Nmg\nvulcanize/VGdS\nvulgar/~J>Y^N\nvulgarian/NgSJ\nvulgarisation/Ng!_₹\nvulgarise/VGd>SZ!_₹\nvulgariser/Ng!_₹\nvulgarism/NgS\nvulgarity/NSg\nvulgarization/Ng\nvulgarize/VGd>SZ\nvulgarizer/Ng\nvulnerabilities/~N9\nvulnerability/~N0wgi\nvulnerable/~Ji\nvulnerably/Ryi\nvulpine/JN\nvulture/~NSgVJ\nvulturous/J\nvulva/Ng\nvulvae/9\nvuvuzela/NgS\nvying/V6N\nwabbit/JNS\nwack/J>^NgS\nwackiness/Ng\nwacko/JNSg\nwacky/~J>^pN\nwad/NSgVGd>Z\nwadded/VtT\nwadding/~NgV6\nwaddle/NSgVdG\nwade/~VSNg\nwader/Ng\nwaders/Ng\nwadge/NS\nwadi/~NgS\nwafer/~NSgV\nwaffle/NgSVGd>Z\nwaffler/Ng\nwaft/VdGSNg\nwag/~VGd>SNgZ\nwage/~NgSV\nwaged/~VtTU\nwager/~NgVGd>Z\nwagerer/Ng\nwagged/VtT\nwaggery/NSg\nwagging/V6N\nwaggish/JYp\nwaggishness/Nmg\nwaggle/VGdSNg\nwagon/~NSgV>Z\nwagoner/Ng\nwagtail/~NSg\nwaif/NgSV\nwail/Vd>GSNgZ\nwailer/Ng\nwailing/NgV\nwain/NgSV\nwainscot/NSgVdGz\nwainscoting/NmgV6\nwainscotted/JVtT@\nwainscotting/NgSV6@\nwainwright/~NgS\nwaist/~NSg\nwaistband/NgS\nwaistcoat/NgS\nwaistline/NgS\nwait/~VdGSNg\nwaiter/~NgV\nwaiting/~V6Ng\nwaitperson/N0gS\nwaitress/~NgSV\nwaitstaff/Nmg\nwaivable/J\nwaive/~Vd>GSNZ\nwaiver/~NgV\nwake/~VGdSNgz\nwakeful/JYp\nwakefulness/Ng\nwaken/VGSd\nwakeup/NgS\nwaldo/~N0S\nwaldoes/N9\nwale/NgSVGd\nwalk/~Vbd>GSNgZ\nwalk out/V/\nwalk through/V\nwalk-through/J\nwalkable/J\nwalkabout/~NS\nwalkaway/NgS\nwalker/~Ng\nwalkie-talkie/NgS\nwalkies/N\nwalking/~VJNg\nwalkout/NSgV\nwalkover/NgS\nwalkthrough/N0g\nwalkthroughs/N9\nwalkway/~NSg\nwall/~NgSVdG\nwallaby/~NSg\nwallah/N\nwallahs/N\nwallboard/Ng\nwallet/~NgS\nwalleye/NSgd\nwallflower/NgSV\nwallop/NgSVdGz\nwalloping/JNgV\nwallow/VdGSNgJ\nwallowy/J\nwallpaper/~NwSgVdG\nwally/~NSJV\nwalnut/~NwgSJ\nwalrus/~NgSV\nwaltz/~NgSVGd>Z\nwaltzer/NgS\nwampum/Ng\nwan/~JYpNVGd\nwand/~NgSV\nwander/~Vd>GSNzZ\nwanderer/~NgS\nwanderings/NSg\nwanderlust/NSgV\nwane/~NgSV\nwangle/VGd>SNgZ\nwangler/Ng\nwank/Vd>GSNZx\nwanky/Jx\nwanna/~\nwannabe/NSg\nwannabee/NS\nwanner/Jc\nwanness/Ng\nwannest/Ju\nwant/~VdGSNg\nwanted/~JVtTU\nwanton/~JYpNgSVdG\nwantonness/Nmg\nwapiti/NgS\nwar/~NwSgV\nwar game/NgS\nwarble/VGd>SNgZ\nwarbler/~NgS\nwarbonnet/NSg\nwarcraft/Nmg\nward/~NgSVdGr\nwarden/~NgSV\nwarder/NgS\nwardress/NgS\nwardrobe/~NSgV\nwardroom/NSg\nware/~JNwgSV\nwarehouse/~NSgVdG\nwarez/NV\nwarfare/~NmgV\nwarfarin/Nmg\nwarhead/~NgS\nwarhorse/NSg\nwarily/RyU\nwariness/NgU\nwarlike/~J\nwarlock/~NgS\nwarlord/~NgS\nwarm/~JY^>pVdGSNHZ\nwarm up/V/\nwarm-up/NgS\nwarmblooded/J\nwarmer/~JNg\nwarmhearted/Jp\nwarmheartedness/Ng\nwarmish/J\nwarmness/Nmg\nwarmonger/NSgVG\nwarmongering/VNg\nwarmth/~Nmg\nwarn/~VdGSz\nwarning/~V6SNwg\nwarp/~NgSVdG\nwarpage/Nmg\nwarpaint/N\nwarpath/N0g\nwarpaths/N9\nwarplane/NgS\nwarrant/~NgSVGd\nwarranted/~VJU\nwarranty/NSgVdG\nwarred/VtT\nwarren/~NgS\nwarring/~JNV6\nwarrior/~NSg\nwarship/~NSg\nwart/NgS\nwarthog/NSg\nwartime/~Ng\nwarty/J^>\nwary/~J^>pVU\nwas/~Vlt\nwasabi/Nmg\nwash/~Vd>GSNgBzZ\nwash out/V/\nwashable/JNSg\nwashbasin/NSg\nwashboard/NSgV\nwashbowl/NSg\nwashcloth/N0g\nwashcloths/N9\nwashed/~VtTJU\nwasher/~NgSV\nwasherwoman/N0g\nwasherwomen/N9\nwashing/~NgV6\nwashout/NgS\nwashrag/NgS\nwashroom/NgS\nwashstand/NSg\nwashtub/NgS\nwashy/J^>N\nwasn't/~Vt\nwasp/~NgSV\nwaspish/JYp\nwaspishness/Ng\nwassail/NSgVdG\nwast/VN\nwastage/Ng\nwaste/~NSgJ>VdGZ\nwastebasket/NgSV\nwasteful/~JYp\nwastefulness/Nmg\nwastegate/NgS\nwasteland/~NwSg\nwasteman/N0g\nwastemen/N9\nwastepaper/Nmg\nwaster/NgS\nwastewater/~N\nwastrel/NSg\nwat/~NSg\nwatch/~NgSVGd>BZr\nwatchable/JNU\nwatchband/NgS\nwatchdog/~NSgV\nwatcher/~NgS\nwatchful/JYp\nwatchfulness/Ng\nwatchmaker/NgS\nwatchmaking/Nmg\nwatchman/~N0g\nwatchmen/~N9\nwatchstrap/NgS\nwatchtower/~NSg\nwatchword/NgS\nwater/~NwSgVGd>\nwaterbed/NgS\nwaterbird/NSg\nwaterboard/NgSVdGz\nwaterboarding/NgV6\nwaterborne/J\nwatercolor/NgSJ\nwatercolour/NgSJV!@_₹\nwatercourse/~NSg\nwatercraft/~Ng09S   # singular and plural, also has a plural in -s\nwatercress/Ng\nwaterfall/~NSgV\nwaterfowl/~NSg\nwaterfront/~NgS\nwaterhole/NSg\nwateriness/Ng\nwaterlily/NSg\nwaterline/NgS\nwaterlogged/JV\nwatermark/NgSVdG\nwatermelon/~NwSg\nwatermill/~NgS\nwaterproof/~JVdGSNg\nwaterproofing/VNg\nwaters/~NgV\nwatershed/~NgSJ\nwaterside/NgSJ\nwaterspout/NSg\nwatertight/J\nwaterway/~NgS\nwaterwheel/~NSg\nwaterworks/~Ng\nwatery/~J^>p\nwatt/~NgS\nwattage/Ng\nwattle/~NgSVGd\nwave/~VGd>SNgZ\nwaveband/NS\nwaveform/~N\nwavefront/NSg\nwavelength/~Ng\nwavelengths/~N\nwavelet/NSg\nwavelike/J\nwavenumber/NgS\nwaver/VGd>NgZ\nwaverer/Ng\nwavering/JYNV\nwavetable/NgS\nwaviness/Ng\nwavy/~J>^pN\nwax/~NwgSJVGdn\nwaxiness/Nmg\nwaxwing/NSg\nwaxwork/NwSg\nwaxy/J>^pN\nway/~NSgJ\nwaybill/NSgV\nwayfarer/NgS\nwayfaring/JNSgV\nwaylaid/V\nwaylay/V>SGZ\nwaylayer/Ng\nwaypoint/NgS\nwayside/NSgJ\nwayward/~JYp\nwaywardness/Nmg\nwazoo/NSg\nwe/~Ia1s:           # I~pronoun a~personal 1~person :~plural s~subject\nwe'd/\nwe'll/\nwe're/~\nwe've/\nweak/~J>Y^pnX\nweaken/~Vd>GZ\nweakener/Ng\nweakfish/N09gS      # singular and plural, also has a plural in -s\nweakish/J\nweakling/NSgJ\nweakness/~NwgS\nweal/NgSVH\nwealth/~Nwg\nwealthiness/Ng\nwealthy/~J^>pN\nwean/VdGSN\nweapon/~NgSV\nweaponization/Nmg\nweaponize/VGdS\nweaponless/J\nweaponry/~Nmg\nweapons-grade/J\nwear/~V>GSNgBzZ\nwearable/JNgSU\nwearer/~NgS\nwearied/VU\nwearily/Ry\nweariness/Nmg\nwearisome/JY\nweary/~J^>pVGdS\nweasel/~NgSVdGY\nweaselled/VtT!_₹\nweaselling/V6!_₹\nweather/~NmSgJVdG\nweather-beaten/J\nweatherboard/~NSVG\nweathercock/NgSV\nweathering/~NgV\nweatherise/VdSG!_₹\nweatherization/Ng\nweatherize/VdSG\nweatherman/N0g\nweathermen/N9\nweatherperson/N0gS\nweatherproof/JVGSd\nweatherstrip/NSV\nweatherstripped/VtT\nweatherstripping/NgV6\nweave/~Vbd>GSNgZ\nweaver/~Ng\nweaving/~NgV6\nweb/~NOSgV\nweb API/NgS\nweb app/NgS\nweb dev/NgS\nweb page/~NSg\nweb server/NgS\nwebbed/~JVtT\nwebbing/~NgV6\nwebcam/~NgSV\nwebcast/NSgVG\nwebfeet/9\nwebfoot/Ng\nwebhook/NgS\nwebinar/NSg\nwebisode/NgS\nweblog/NgS\nwebmaster/NSg\nwebmistress/NgS\nwebsite/~NSg\nwebstore/NgS\nwed/~VSr\nwedded/JVtTr\nwedder/N\nwedding/~V6SNg\nwedge/~NSgVdG\nwedgie/NgSV\nwedlock/~Nmg\nwee/~J^>NSgVI\nweed/~NwgSVd>GZ\nweeder/Ng\nweedkiller/NwgS\nweedless/J\nweedy/J^>\nweeing/V6\nweek/~NgSY\nweekday/~NSg\nweekend/~NSgVGd>JZ\nweekly/~JNSg\nweeknight/~NSg\nween/NSVdG\nweenie/NgS^>\nweensy/J>^\nweeny/JN\nweep/~V>GSNgzZ\nweeper/Ng\nweepie/N\nweepy/J^>NSg\nweevil/~NgS\nweft/NgS\nweigh/~VGdNr\nweigh's\nweighbridge/NS\nweighs/~Vr\nweight/~NwgSVdGz\nweighted/~VtTJU\nweightily/Ry\nweightiness/Ng\nweightless/JYp\nweightlessness/Ng\nweightlifter/~NgS\nweightlifting/~Ng\nweighty/J^>p\nweir/~NgS\nweird/~J^Y>pNV\nweirdie/NgS\nweirdness/Nmg\nweirdo/NgS\nwelch plug/NSg\nwelcome/~JNgSVGd\nweld/~NgSVd>GBZ\nwelder/Ng\nwelfare/~NmgV\nwelkin/Ng\nwell/~JpNgSVdGRy\nwell-adjusted/J\nwell-balanced/J\nwell-being/Nmg\nwell-established/J\nwell-known/J\nwell-made/J\nwell-received/J\nwell-respected/J\nwell-timed/J\nwell-trodden/J\nwell-used/J\nwellhead/NSg\nwellie/N\nwellington/~NgS\nwellness/~Nmg\nwellspring/NgS\nwelly/NS\nwelsh/~VGd>SZ\nwelsher/Ng\nwelt/~Vd>GSNgZ\nwelter/NgVGdJ\nwelterweight/~JNSg\nwen/~NgCI\nwench/NgSV\nwend/VdGSN\nwent/~VtN\nwept/V\nwere/~VltN\nweren't/Vt\nwerewolf/~N0g\nwerewolves/N9\nwest/~NgJV\nwestbound/~J\nwesterly/~JNSg\nwestern/~J>NSgZ\nwesterner/Ng\nwesternisation/Ng!_₹\nwesternise/VGdS!_₹\nwesternism/Nmg\nwesternization/Ng\nwesternize/VGdS\nwesternmost/~J\nwestward/~JNS\nwet/~JYpNSgVtT\nwetback/NSg\nwetland/~NSg\nwetness/Nmg\nwetter/~JcNSg\nwettest/~JuV\nwetting/V6NJ\nwetware/Nmg\nwhack/NSgVGd>JzZ\nwhacker/Ng\nwhale/~NSgVd>GZ\nwhaleboat/NgS\nwhalebone/Ng\nwhaler/Ng\nwhaling/~NgV\nwham/~NgSV\nwhammed/VtT\nwhamming/V6\nwhammy/NSg\nwharf/~NgV\nwharves/~N\nwhat/~INS\nwhat'll/\nwhat's/\nwhataboutism/Ng\nwhatchamacallit/NgS\nwhatever/~IJNg\nwhatnot/NgS\nwhatshername/I\nwhatshisname/N\nwhatsit/NS\nwhatsoever/~I\nwheal/NSgV\nwheat/~NgJn\nwheatgerm/N\nwheatmeal/N\nwhee/V\nwheedle/Vd>GSNZ\nwheedler/Ng\nwheel/~NSgVdG\nwheelbarrow/NSgV\nwheelbase/~NSg\nwheelchair/~NSg\nwheeler/NgS\nwheelhouse/NgS\nwheelie/NSgVJ\nwheelwright/NgS\nwheeze/VdGSNg\nwheezily/Ry\nwheeziness/Ng\nwheezy/J>^p\nwhelk/NSgd\nwhelm/VdGSN\nwhelp/NSgVdG\nwhen/~CINgS\nwhence/~C\nwhenever/~C\nwhensoever/\nwhere/~CNSgR\nwhere'd/\nwhereabouts/~Ng\nwhereas/~CN\nwhereat/C\nwhereby/~\nwherefore/CNgS\nwherein/~C\nwhereof/C\nwhereon/\nwheresoever/C\nwhereto/\nwhereupon/~C\nwherever/~C\nwherewith/N\nwherewithal/Ng\nwherry/NSgV\nwhet/VSN\nwhether/~CI\nwhetstone/NSgV\nwhetted/JVtT\nwhetting/V6N\nwhew/V\nwhey/Ng\nwhich/~CI\nwhichever/~I\nwhiff/NSgVdGJ\nwhiffletree/NgS\nwhile/~NSgCPVdG\nwhilom/JC\nwhilst/~C\nwhim/~NgSV\nwhimper/NgSVdG\nwhimsical/~JY\nwhimsicality/Nmg\nwhimsy/NSgVJ\nwhine/NSgVd>GZ\nwhiner/Ng\nwhinge/Vd>GSNZ!_₹\nwhingeing/VN!_₹\nwhinny/NSgVGd\nwhiny/J>^\nwhip/~NgSV\nwhipcord/Ng\nwhiplash/~NgSV\nwhipped/~JVtT\nwhipper/NgS\nwhippersnapper/NgS\nwhippet/NgS\nwhipping/~NSgV6\nwhippletree/NSg\nwhippoorwill/NgS\nwhipsaw/NgSVdGJ\nwhir/NgSV\nwhirl/VdGSNg\nwhirligig/NgS\nwhirlpool/~NgSV\nwhirlwind/~NgSJ\nwhirlybird/NSg\nwhirr/VdGSNg!_₹\nwhirred/VtT\nwhirring/NV6J\nwhisk/NSgVd>GZ\nwhisker/NgSd\nwhiskery/JN\nwhiskey/~NwgS\nwhisky/N0wSg!@_₹\nwhiskys/N9g\nwhisper/~NgSVd>GZ\nwhisperer/NgS\nwhispering/NwgS\nwhist/NgVJ\nwhistle/~NgSVGd>Z\nwhistleblower/~NgS\nwhistler/~Ng\nwhit/~NgSPd>^GnXz\nwhite/~JpNwSgV\nwhite out/V/\nwhite paper/NgS\nwhitebait/NV\nwhiteboard/NSV\nwhitecap/NSg\nwhitefish/~N09gSV   # singular and plural, also has a plural in -s\nwhitehead/~NgS\nwhitelist/NSVGd\nwhiten/VGd>Zz\nwhitener/Ng\nwhiteness/Nmg\nwhitening/VNg\nwhiteout/NSg\nwhitetail/NgS\nwhitewall/JNSg\nwhitewash/~NgSVdG\nwhitewater/~Ng\nwhitey/~JNSg\nwhither/NV\nwhiting/~N09wgSV\nwhitish/~J\nwhittle/~NSVGd>Z\nwhittler/Ng\nwhiz/VNgP\nwhizkid/Ng\nwhizz/NgSVdG!_₹\nwhizzbang/NgS\nwhizzed/VtT\nwhizzes/NVh\nwhizzing/V6NJ\nwho/~Ig\nwho'd/\nwho'll/\nwho're/\nwho've/\nwhoa/V\nwhodunit/NgS\nwhoever/~I\nwhoever's\nwhole/~JpNSg\nwholefood/NS\nwholegrain/Nm\nwholehearted/JYp\nwholeheartedness/Nmg\nwholemeal/JNm\nwholeness/Nmg\nwholesale/~NgSJ>VGdZ\nwholesaler/~NSg\nwholesome/~JpU\nwholesomely/Ry\nwholesomeness/NmgU\nwholewheat/J\nwholly/~Ry\nwhom/~I\nwhomever/I\nwhomsoever/I\nwhoop/NSgVd>GZ\nwhoopee/VS\nwhooper/Ng\nwhoopsie/NgS\nwhoosh/NgSVdG\nwhop/VSN\nwhopped/VtT\nwhopper/NSg\nwhopping/JV6N\nwhore/~NSgVGx\nwhorehouse/NgS\nwhoreish/J\nwhorish/J\nwhorl/NSgVd\nwhose/~I\nwhoso/I\nwhosoever/I\nwhup/VS\nwhupped/VtT\nwhupping/V6N\nwhy/~NgV\nwhy'd/\nwhys/N\nwick/~NgSVd>JZ\nwicked/~J^Y>pV\nwickedness/~Nmg\nwicker/~NgJ\nwickerwork/Nmg\nwicket/~NSg\nwide/~JY^>pN\nwidebody/NgS\nwidemouthed/J\nwiden/~VSd>GZ\nwidener/NSg\nwideness/Nmg\nwidescale/J\nwidescreen/~NgSJ\nwidespread/~J\nwidget/NS\nwidow/~NSgVd>GZ\nwidower/~Ng\nwidowhood/~Nmg\nwidth/~Nwg\nwidths/~N\nwield/~Vd>GSNZ\nwielder/Ng\nwiener/~NSg\nwienie/NSg\nwife/~NgVY\nwifeless/J\nwig/~NSgV\nwigeon/Ng\nwigged/VtTJ\nwigging/V6N\nwiggle/~Vd>GSNgZ\nwiggler/Ng\nwiggly/J^>\nwight/~NSgJ\nwiglet/NSg\nwigwag/NSgVb\nwigwagged/VtT\nwigwagging/V6\nwigwam/NSgV\nwiki/~NgSV\nwild/~JY^>pNgSV\nwildcard/~NgSV\nwildcat/~NgSJV\nwildcatted/VtT\nwildcatter/NgS\nwildcatting/V6\nwildebeest/NgS\nwilderness/~NgS\nwildfire/~NgS\nwildflower/NSg\nwildfowl/~NgV\nwildlife/~Nmg\nwildness/Ng\nwilds/~NgV\nwile/~NgSVGd\nwilful/JYp!@_₹\nwilfulness/Ng!@_₹\nwiliness/Ng\nwill/~NgSAd\nwillful/JYp\nwillfulness/Ng\nwillies/Ng\nwilling/~JYpNV6U\nwillingness/~NgU\nwilliwaw/NgS\nwillow/~NwSgV\nwillowy/J\nwillpower/Ng\nwilly/~JNSV\nwilt/~VdGSNg\nwily/J>^p\nwimp/NgSVdGJ\nwimpish/J\nwimple/NSgVdG\nwimpy/J>^\nwin/~VbGdSNg\nwin-win/NJ\nwince/NSgVdG\nwinch/~NgSVdG\nwind/~NwSVGUr\nwind's\nwindage/Ng\nwindbag/NSgV\nwindblown/J\nwindbreak/NSg>Z\nwindbreaker/Ng\nwindburn/Ngd\nwindcheater/NS\nwindchill/Ng\nwinded/VtTJ\nwinder/~NSgV\nwindfall/NgS\nwindflower/NgS\nwindily/Ry\nwindiness/Nmg\nwinding's\nwindjammer/NSg\nwindlass/NgSV\nwindless/JN\nwindmill/~NgSVdG\nwindow/~NSgVdG\nwindowless/J\nwindowpane/NSg\nwindowsill/NSg\nwindpipe/NgS\nwindproof/JV\nwindrow/NSgV\nwindscreen/~NSgV\nwindshield/~NSgV\nwindsock/NgS\nwindstorm/NgS\nwindsurf/VGd>SNZ\nwindsurfer/Ng\nwindsurfing/~NgV\nwindswept/J\nwindup/NSgJ\nwindward/~JNg\nwindy/~J>^pN\nwine/~NwgSV\nwineglass/NgS\nwinegrower/NgS\nwinemaker/NgS\nwinery/~NSg\nwing/~NgSVd>GZ\nwingding/NgS\nwingless/J\nwinglike/J\nwingman/Ng\nwingmen/9\nwingnut/NSg\nwingspan/~NgS\nwingspread/NSg\nwingtip/NSg\nwink/~Vd>GSNgZ\nwinker/~NgS\nwinkle/~NSgVdG\nwinnable/JU\nwinner/~NSg\nwinning/~V6SJYNg\nwinnow/VGd>SNZ\nwinnower/NgS\nwino/NgS\nwinsome/JY^>p\nwinsomeness/Ng\nwinter/~NwSgVGd\nwintergreen/Ng\nwinterise/VGdS!_₹\nwinterize/VGdS\nwintertime/Nmg\nwintry/J^>\nwiny/J>^\nwipe/~VGd>SNgZ\nwipe out/V/\nwipeout/NgS\nwiper/Ng\nwire/~NwSVGdr\nwire's\nwired/~JVtT\nwirehair/NgS\nwireless/~JYNgSV\nwiretap/NgSV\nwiretapped/VtTJ\nwiretapper/NSg\nwiretapping/NgV6\nwiriness/Nmg\nwiring/~VNg\nwiry/J>^p\nwisdom/~Nmg\nwise/~JY^>VGdSNg\nwiseacre/NSgV\nwisecrack/NgSVdG\nwiseguy/NS\nwish/~NgSVd>GZ\nwishbone/~NSgV\nwisher/Ng\nwishful/JY\nwishlist's\nwishy-washy/J\nwisp/NgSV\nwispy/J>^\nwist/V\nwisteria/NSg\nwistful/JYp\nwistfulness/Nmg\nwit/~Nw☁SgVP\nwitch/~NgSVdG\nwitchcraft/~Nmg\nwitchery/Nmg\nwith/~P\nwithal/P\nwithdraw/~VGSN\nwithdrawal/~NwgS\nwithdrawn/~JV\nwithdrew/~V\nwithe/NSgVd>GZ\nwither/VGdNz\nwithering/JYV6N\nwithers/~NgVh\nwithheld/~VtTJ\nwithhold/~VbGSN\nwithholding/~V6SNg\nwithin/~PJg\nwithout/~PC\nwithstand/~VbGS\nwithstood/~VtT\nwitless/JYp\nwitlessness/Ng\nwitness/~NgSVdG\nwits/~Ng\nwitted/~JVtT\nwitter/VSGdJ\nwitticism/NSg\nwittily/Ry\nwittiness/Ng\nwitting/NJYV6U\nwitty/~J>^p\nwive/VGdS\nwiz/~NVP\nwizard/~NSgJYV\nwizardry/~Nmg\nwizened/VJ\nwk/NY\nwoad/NgV\nwobble/NgSVGd>\nwobbliness/Ng\nwobbly/J>^pN\nwodge/NS\nwoe/~NSgJ\nwoebegone/J\nwoeful/JYp\nwoefuller/Jc\nwoefullest/Ju\nwoefulness/Nmg\nwog/NSV\nwok/NSgVn\nwoke/~JpNV\nwold/NgSJ\nwolf/~NgSVdG\nwolfhound/NSg\nwolfish/J\nwolfram/~Ng\nwolverine/~NSg\nwolves/~N9V\nwoman/~N0gV\nwomanhood/Nmg\nwomanise/Vd>SGZ!_₹\nwomaniser/NgS!_₹\nwomanish/JV\nwomanize/Vd>SGZ\nwomanizer/NgS\nwomankind/Nmg\nwomanlike/Jg\nwomanliness/Ng\nwomanly/J>^p\nwomb/~NgSV\nwombat/NgS\nwomble/NSV\nwomen/~N9g\nwomenfolk/N9Sg\nwomenfolks/9g\nwon/~VtTNg09          # singular and plural\nwon't/VA\nwonder/~NwgSVdGL\nwonderful/~JYp\nwonderfulness/Nmg\nwondering/~VNJY\nwonderland/~NgS\nwonderment/Nmg\nwondrous/JY\nwonk/NgS\nwonky/J^>N\nwont/NgJVd\nwonted/JU\nwoo/~VGd>SJNZ\nwood/~NwgSVdGJn\nwoodbine/~Ng\nwoodblock/NgS\nwoodcarver/NgS\nwoodcarving/NSg\nwoodchuck/NgS\nwoodcock/~NSg\nwoodcraft/NwgV\nwoodcut/~NSg\nwoodcutter/NSg\nwoodcutting/Nwg\nwooden/~J>Y^p\nwoodenness/Nmg\nwoodiness/Nmg\nwoodland/~JNSg\nwoodlice/N9\nwoodlot/NSg\nwoodlouse/N0\nwoodman/~N0g\nwoodmen/N9\nwoodpecker/~NgS\nwoodpile/NSg\nwoods/~NgV\nwoodshed/NSgV\nwoodsiness/Ng\nwoodsman/N0g\nwoodsmen/N9\nwoodsy/J>^p\nwoodwind/NgS\nwoodwork/~NgV>GZ\nwoodworker/Ng\nwoodworking/~NgV\nwoodworm/NS\nwoody/~J^>pNSg\nwooer/Ng\nwoof/NgSVd>GZ\nwoofer/Ng\nwoohoo\nwool/~NwgnX\nwoolen/~JNg\nwoolgathering/Nmg\nwooliness/Nmg\nwoollen/JNSg!@_₹\nwoolliness/Nmg\nwoolly/~J>^pNSg\nwoozily/Ry\nwooziness/Nmg\nwoozy/J^>p\nwop/~NSV!_₹\nword/~NSVdGr\nword's\nwordage/Nmg\nwordbook/NSg\nwordily/Ry\nwordiness/Nmg\nwording/~NwSgV6\nwordless/JY\nwordlist/NgS\nwordplay/Nmg\nwordsmith/N0Vb\nwordsmiths/N9Vh\nwordy/J^>p\nwore/~Vt\nwork/~NwSVdGrz\nwork around/V/\nwork out/V/\nwork's\nworkable/~JU\nworkaday/JN\nworkaholic/NSgJ\nworkaround/NS\nworkbasket/NS\nworkbench/NgS\nworkbook/NgS\nworkday/NSgJ\nworker/~NgS\nworkfare/Nmg\nworkflow/NgS\nworkforce/~NgS\nworkgroup/NSg\nworkhorse/NSg\nworkhouse/~NSgV\nworking-class/NgSJ\nworking's\nworkingman/N0g\nworkingmen/N9\nworkings/~N9g\nworkingwoman/N0g\nworkingwomen/N9\nworkload/~NgS\nworkman/~N0g\nworkmanlike/J\nworkmanship/Nmg\nworkmate/NgS\nworkmen/~N9\nworkout/~NSg\nworkplace/~NgS\nworkroom/NgS\nworks/~NgV\nworksheet/NgSV\nworkshop/~NgSV\nworkshopper/NgS\nworkshy/J\nworksite/NS\nworkspace/NgS\nworkstation/~NgS\nworktable/NgS\nworktop/NS\nworkup/NgS\nworkweek/NSg\nworld/~NSgV\nworld-class/J\nworldlier/Jc\nworldliness/NmgU\nworldly/~J^pU\nworldview/~NSg\nworldwide/~J\nworm/~NgSVdG\nwormhole/~NgSV\nwormwood/Nmg\nwormy/J^>\nworn/~JVTU\nworried/~JYVtT\nworrier/Ng\nworriment/Ng\nworrisome/J\nworry/~VGd>SNw☁gZz\nworrying/~JYV6N\nworrywart/NSg\nworse/~JcNgV\nworsen/~VdSG\nworship/~NSgVGd>Z\nworshiper/Ng\nworshipful/~JN\nworshipped/VtT!@_₹\nworshipper/NgS!@_₹\nworshipping/V6N!@_₹\nworst/~JuVGd        # removed noun sense\nworsted/NgVJ\nwort/~Ng\nworth/~JNgV\nworthies/N\nworthily/RyU\nworthiness/NmgU\nworthless/~JYp\nworthlessness/Nmg\nworthwhile/~J\nworthy/~J^>pNVU\nworthy's\nwot/VI\nwotcha/\nwould/~A            # removed `NS` noun and plural seem very marginal\nwould-be/J\nwould've/\nwouldn't/A\nwouldst/V\nwound/~NSgVtTGd>\nwove/VtJr\nwoven/~JNVTrU\nwow/~VGdSNg\nwpm/N\nwrack/NSgVGd\nwraith/N0g\nwraiths/N9\nwrangle/Vd>GSNgZz\nwrangler/~NgS\nwrap/~VSNwUr\nwrap's\nwraparound/JNSg\nwrapped/~VtTJU\nwrapper/~NSg\nwrapping/~NwgSV6\nwrasse/NgS\nwrath/~NmgVJ\nwrathful/JY\nwreak/VGdSN\nwreath/~N0gSVdG\nwreathe/V\nwreaths/N9V\nwreck/~NSgVGd>Z\nwreckage/~Nmg\nwrecker/Ng\nwren/~NgS\nwrench/~NgSVdG\nwrest/~VGdSNg\nwrestle/~NgSVGd>Z\nwrestler/~Ng\nwrestling/~V6Nmg\nwretch/NgSV\nwretched/~J^>Yp\nwretchedness/Nmg\nwriggle/VGd>SNgZ\nwriggler/NgS\nwriggly/J\nwright/~NgSV\nwring/V6G>SNgZ\nwringer/Ng\nwrinkle/NgSVGd\nwrinkled/~JVtTU\nwrinkly/J^>NSg\nwrist/~NSgV\nwristband/NgS\nwristwatch/NgS\nwrit/~NgSV>GBzZ\nwrite/~VSN\nwrite off/V\nwrite-off/NgS\nwrite-up/NgS\nwriter/~NSg\nwrithe/VGdSNg\nwriting/~NgSV6\nwritten/~JVTrU\nwrong/~J^Y>pNSgVGdRy\nwrongdoer/NSg\nwrongdoing/~NSgV\nwrongful/~JYp\nwrongfulness/Nmg\nwrongheaded/JYp\nwrongheadedness/Ng\nwrongness/Ng\nwrote/~Vtr\nwroth/J\nwrought/~JV\nwrung/V\nwry/~JYVN\nwryer/Jc\nwryest/Ju\nwryness/Nmg\nwt/PI\nwunderkind/NS\nwurst/NSg\nwuss/NgSV\nwussy/J>^NSg\nx/~                 # removed `5` and `7` adjective and `conjunction`\nx-axis/Ng\nx64/Ng\nx86/~Ng\nxci\nxcii\nxciv\nxcix\nxcvi\nxcvii\nxenohormesis/Nmg\nxenomorph/NgS\nxenon/~Nmg\nxenophobe/NgS\nxenophobia/Ng\nxenophobic/~JN\nxerographic/J\nxerography/Nmg\nxerox/~NgSVdG\nxi/~NSg\nxii/~\nxiii/~\nxiv/~\nxix/~\nxor/~NC\nxref/S\nxterm/g\nxv/~\nxvi/~\nxvii/~\nxviii/~\nxx/~\nxxi/~\nxxii/~\nxxiii/~\nxxiv/~\nxxix\nxxv/~\nxxvi/~\nxxvii\nxxviii/~\nxxx/~N\nxxxi/~\nxxxii\nxxxiii\nxxxiv\nxxxix\nxxxv\nxxxvi\nxxxvii\nxxxviii\nxylem/Ng\nxylene/N\nxylophone/NSgV\nxylophonist/NgS\ny\ny-axis/Ng\ny'all/IV\nya/~IN\nyacht/~NSgVdG\nyachting/~V6Ng\nyachtsman/Ng\nyachtsmen/9\nyachtswoman/Ng\nyachtswomen/9\nyahoo/~NSgV\nyak/~NSgV\nyakked/VtT\nyakking/V6\nyakuza/NgS09        # singular and plural, also has a plural in -s\nyam/~NSgV\nyammer/VGd>SNgZ\nyammerer/NgS\nyang/~NgV\nyank/~NgSVdG\nyap/~NSgV\nyapped/VtTJ\nyapping/V6N\nyard/~NgSV\nyardage/~NgS\nyardarm/NgS\nyardman/Ng\nyardmaster/NgS\nyardmen/9\nyardstick/NgS\nyarmulke/NSg\nyarn/~NgSV\nyarrow/~Ng\nyashmak/NS\nyaw/~NSgVGd\nyawl/NgSV\nyawn/Vd>GSNgZ\nyawner/Ng\nyaws/NgV\nyay\nyd/~N\nye/~IDNS>^\nyea/~CNSg\nyeah/~Ng\nyeahs/N\nyear/~NgS\nyear-over-year/J\nyearbook/~NgS\nyearling/NgS\nyearlong/J\nyearly/~JRySg\nyearn/VGdSNz\nyearning/NgV\nyeast/~NSgV\nyeasty/J>^\nyegg/NgSV\nyell/~VdGSNgJ\nyellow/~J^>pNgSVdG\nyellowhammer/NS\nyellowish/~J\nyellowness/Ng\nyellowy/J\nyelp/NgSVdG\nyen/~NSg09V         # singular and plural, currency plural is yen, desire plural is yens\nyeoman/~Ng\nyeomanry/~Ng\nyeomen/~9\nyep/NSg\nyes/~NgSVb\nyeshiva/~NSg\nyessed/VtT\nyessing/V6\nyesterday/~NgS\nyesteryear/Ng\nyet/~CVN\nyeti/NgS\nyew/~NSgJI\nyid/NS\nyield/~VGdSNgz\nyikes/\nyin/~Ng\nyip/~NSgV\nyipe/\nyipped/VtT\nyippee/\nyipping/V6N\nyo/~INV\nyob/NS\nyobbo/NS\nyodel/Vd>GSNgZ\nyodeler/Ng\nyodelled/VtT!@_₹\nyodeller/NgS!@_₹\nyodelling/V6N!@_₹\nyoga/~Ng\nyoghurt/NwgS!_₹\nyogi/~NgSV\nyogic/J\nyogourt/NwgS@\nyogurt/~NwSg\nyoke/~NSVGdU\nyoke's\nyokel/NSg\nyolk/NwgSVd\nyon/~I\nyonder/~JN\nyonks/N\nyore/Ng\nyou/~Ia2so.:        # I~pronoun a~personal 2~person :~plural s:~subject o~object\nyou'd/\nyou'll/\nyou're/~\nyou've/\nyoung/~J^>NgV\nyoungish/J\nyoungster/~NgS\nyour/~D5\nyours/~I\nyourself/~Ia2F.     # I~pronoun a~personal 2~person F~reflexive\nyourselves/~Ia2F:   # I~pronoun a~personal 2~person :~plural F~reflexive\nyouth/~Ng\nyouthful/~JYp\nyouthfulness/Ng\nyouths/~9\nyow/N\nyowie/NgS           # Australian mythological creature\nyowl/NgSVdG\nyr/~NS\nytterbium/Nmg\nyttrium/Nmg\nyuan/~Ng09S         # singular and plural, also has a plural in -s\nyucca/~NwSg\nyuck/NV\nyucky/J^>\nyuk/~NSgV\nyukked/VtT\nyukking/V6\nyukky/J\nyule/~Ng\nyuletide/Ng\nyum/JO\nyummy/J^>N\nyup/NSg\nyuppie/NgS\nyuppify/VGdS\nyurt/NgS\nz/d^GnXz\nz-axis/Ng\nzaniness/Nmg\nzany/J^>pNSgV\nzap/~NSgV\nzapped/VtT\nzapper/NgS\nzapping/V6N\nzappy/J\nzeal/~Nmg\nzealot/NgS\nzealotry/Nmg\nzealous/~JYp\nzealousness/Nmg\nzebra/~NSg\nzebu/NgS\nzed/~NSgV\nzeitgeist/~NSg\nzenith/~N0g\nzeniths/N9\nzenned\nzeolite/NS\nzephyr/~NgSV\nzeppelin/~NgS\nzero/~N0gSJVdGH\nzeroes/N9Vh\nzest/~NwgSV\nzestful/JYp\nzestfulness/Ng\nzesty/J>^\nzeta/~NgS\nzigzag/NSgJV\nzigzagged/VtT\nzigzagging/V6JN\nzilch/NgJV\nzillion/NgS\nzinc/~NgSV\nzincked/VtT\nzincking/V6\nzine/~NS\nzinfandel/Ng\nzing/NgVd>GZ\nzinger/NgS\nzingy/J>^\nzinnia/NgS\nzip/~NSVU\nzip's\nzipped/VtTJU\nzipper/~NgSVdG\nzipping/V6U\nzippy/J^>\nzircon/NgS\nzirconium/~Ng\nzit/NSg\nzither/NgSV\nzloty/NSg\nzlotys/N\nzodiac/~NgS\nzodiacal/J\nzombie/~NgS\nzonal/~JY\nzone/~NSVGdr\nzone's\nzoning/~V6Ng\nzonked/J\nzoo/~NSg\nzookeeper/NSg\nzoological/~JY\nzoologist/~NSg\nzoology/~Nmg\nzoom/~NgSVdG\nzoomer/NgS\nzoophyte/NSg\nzoophytic/J\nzooplankton/N\nzorch/VN\nzoster/~N\nzounds/\nzucchini/NgS\nzwieback/Ng\nzydeco/Ng\nzygote/NSg\nzygotic/~J\nzymurgy/Ng\n\n# End of original dictionary imports\n# Words below this point are now also sorted alphabetically, case-sensitive\n# This section contains mostly programming and technical terms\n# Some words may be very domain-specific, proprietary, or trademarked\n\n0s/~9               # not sure how well \"words\" starting with numbers are handled\n1Password/Og        # password manager\n1s/~9               # not sure how well \"words\" starting with numbers are handled\n3D/J                # not sure how well \"words\" starting with numbers are handled\nAAC/Ng              # audio format\nAArch64/Og          # see also ARM64\nACM/Ng\nADT/NgS             # abstract data type, algebraic data type\nAGI/Sg              # artificial general intelligence\nAMC/NOSg            # old car brand\n#ANN/Ng             # artificial neural network !! TODO causes \"Ann\" to be flagged by `SpellCheck\nAOC/Og              # US politician Alexandria Ocasio-Cortez\nAPFS/Og             # Apple file system\nARM64/Og            # see also AArch64\nASLR/Ng             # Address Space Layout Randomization\nASM/N               # assembly language - should \"asm\" be included as well/instead?\nASMR/Nmg            # \"Autonomous Sensory Meridian Response\"\nASUS/Og\nATF/Ng              # automatic transmission fluid\nAVC/Ng              # H.264 video format\nAVL tree/NgS        # data structure\nAfroasiatic/OmgJ.   # linguistics\nAirbnb/ONSg\nAkismet/Og\nAlexa/Og            # voice assistant\nAlexandre/OgS\nAliExpress/Og\nAlibaba/Og\nAlphaFold/Og        # Google DeepMind project\nAmbien/NSg          # insomnia treatment\nAngularJS/Og\nAnker/Sg\nAnki/Og             # flashcard app\nAnthropic/Og        # AI company\nAppKit/Og           # macOS framework\nArchytas/Sg         # !! please check and comment !! we also have archytas\nAtlassian/Og        # Company behind Jira, Confluence, Bitbucket\nAutoGPT/Og\nAutomattic/Og       # WordPress company\nAutomattician/Sg\nB&B/Ng\nB2B/J               # business-to-business\nBCD/Ng              # binary coded decimal\nBCPL/Ng             # old programming language\nBERT/Og             # Bidirectional Encoder Representations from Transformers\nBLM/Ng\nBOM/NSg             # Byte Order Mark\nBPE/NgS             # Byte Pair Encoding\nBRICS/              # intergovernmental organization\nBSON/Ng             # binary JSON\nBSP/NSg             # data structure\nBYD/OgS             # Chinese automobile manufacturer\nBachiyski/Sg\nBadgerDB/Og         # key-value database\nBezos/O             # Surname, Amazon founder\nBinance/Og\nBing/Og             # Microsoft product\nBitKeeper/Og        # version control\nBitbucket/Og        # GitHub alternative\nBitwarden/Og        # password manager\nBlasterHacks/Sg\nBluesky/Og\nBoxster/NOSg        # car model\nBrembo/OgS          # brake company\nBtrfs/Ng            # file system\nBurpSuite/ONSg\nC++/OgS             # programming language\nCAPTCHA/NgS\nCCP/OS              # Chinese Communist Party\nCDMA/NSg\nCDN/NSg             # content delivery network\nCEO/NSg             # chief executive officer\nCERN/Og             # intergovernmental organization\nCI/NSg              # continuous integration\nCISC/Ng             # cpu architecture\nCLR/Og              # common language runtime\nCMOS/N              # microchip process\nCMS/NSg             # content management system\nCMYK                # colour model\nCMake/Sg            # build tool\nCORS                # web: cross-origin resource sharing\nCPython/Og          # Python implementation\nCQL/N\nCRC/NgS             # cyclic redundancy check\nCRDT/NSg\nCRM/NOSg\nCSON/Ng             # CoffeeScript Object Notation (JSON like format)\nCTE/NS\nCTF/NSg             # capture the flag\nCVE/NSg             # Common Vulnerabilities and Exposures\nChatGPT/Og          # OpenAI product\nClickHouse/Og\nCloudFront/Og       # CDN service\nCloudflare/Og\nCockroachDB/Og      # distributed database\nCodeberg/Og         # GitHub alternative\nColemak/NgJ\nCommonMark/g\nCompUSA             # retailer\nConda/Og            # package manager for Python and R\nCorretto/Sg\nCouchDB/Og          # NoSQL database\nCouchbase/Og        # NoSQL database\nCoursera/Og\nCrowdsignal/Og\nCypher/ONg\nDATETIME/NgS        # dictionaries prefer: datetime\nDBMS/NOSg           # database management system\nDBus/Og             # message bus system\nDCT/NgS             # discrete cosine transform\nDDoS/Ng\nDEI\nDFA/NgS\nDKIM/NSg\nDLL/NgS             # dynamic link library\nDM/NSgVb\nDM'd/V              # direct message\nDMed/VtT\nDMing/V6\nDNS/OgS             # domain name system\nDOM/NSg             # document object model\nDRM/Ng              # digital rights management\nDSL/NSg             # domain-specific language\nDX/Ng               # developer experience\nDashlane/Og         # password manager\nDataDog/Og          # monitoring service\nDeepMind/Og\nDeepSeek/Og         # AI company\nDeno/Og\nDevOps/Sg\nDirectX/Og\nDocker/Og\nDockerfile/NgS\nDreamcast/OgS       # game console\nDuckDuckGo/Og       # search engine\nDuolingo/Og         # language app\nEBITDA/N            # earnings before interest, taxes, depreciation, and amortization\nECMA/Og             # European Computer Manufacturers Association\nEEA/O               # European Economic Area\nEFI/Og              # Extensible Firmware Interface\nEGR/                # exhaust gas recirculation\nELIZA/Og\nEMR/NOSg\nEOF/NgS             # end of file\nEPUB/NOSg           # e-book format\nESLint/Og           # JavaScript linter\nESP32/Og            # microcontroller family\nESP8266/Og          # microcontroller family\nEV/NSg              # electric vehicle\nEXIF                # metadata\nElasticSearch/Sg\nElectron/Og         # web-tech framework for desktop apps\nElon/Og\nErdoğan/Og          # surname, Turkish politician\nEthereum/Og         # digital currency\nEvo/OgS             # car model\nExpedia/Og\nExynos/OgJ          # Samsung SoC series.\nFAANG/NSg           # Facebook, Amazon, Apple, Netflix, Google\nFAT32/Ng            # file system\nFFI/Ng              # foreign function interface - see also interop\nFFmpeg/Og\nFIBA/Ng             # international basketball federation\nFIDO/NOSg\nFIFA/Ng             # football/soccer association\nFOSDEM/Og           # Free and Open source Software Developers' European Meeting\nFOSS/Og             # free and open-source software\nFOV/Ng              # field of view\nFPGA/NSg            # field-programmable gate array\nFPM/Sg\nFSB/Og              # Russian intelligence agency\nFSD/Ng              # full self-driving\nFamicom/NOSg        # game console\nFigma/Og\nFireWire/Sg         # trademark\nFirestore/Og\nFoddy/Sg\nForgejo/Og          # programming forge / git host\nFrankl/Sg\nFreeBSD/Og          # operating system\nFreeType/ONg        # typography library\nGAN/NgS             # generative adversarial network\nGLFW/Og\nGPG/Og              # GNU Privacy Guard\nGPIO/Ng             # general purpose input/output\nGPL/Og              # GNU General Public License\nGPLv1/Og\nGPLv2/Og\nGPLv3/Og\nGPT/NSg             # generative pre-trained transformer\nGPU/NS              # graphics processing unit\nGRU/Og              # Russian intelligence agency\nGRUB/Og             # Grand Unified Bootloader\nGSM/OJ              # Global System for Mobile Communications\nGTK/O               # GIMP Toolkit\nGUID/Og             # globally unique identifier\nGaneti/Sg\nGateron/Sg\nGeForce/Og\nGeoJSON/Og          # geographic data format (JSON based)\nGerber/Ng           # file format\nGhidra/Og           # reverse engineering\nGitLab/Sg           # GitHub alternative\nGmail/ONSgV\nGolang/Sg           # programming language\nGoleman/Sg\nGradle/Sg           # build tool\nGrafana/Sg\nGrammarly/Og        # grammar checker\nGrandey/Sg\nGraphQL/Og\nGraphviz/Sg\nGravatar/Og\nH.265/ONSg          # High Efficiency Video Coding\nHAProxy/Og          # high availability proxy\nHDR/J               # high dynamic range\nHEIC/ONSg           # High Efficiency Image Container\nHEIF/ONSg           # High Efficiency Image Format\nHEVC/ONSg           # High Efficiency Video Coding\nHMAC/Ng             # Hash-based Message Authentication Code\nHQL/N\nHTML5\nHasan/OgS           # surname, given name\nHashiCorp/Og        # software company: Consul, Terraform, Vault, etc.\nHiera/Sg\nHmong-Mien/Omg      # linguistics\nHolmdel/Sg\nHugging Face/Og\nIBAN/NgS            # International Bank Account Number\nICMP/Og             # internet control message protocol\nID3                 # audio metadata\nIDA/Og              # reverse engineering software\nIFRS/Og             # International Financial Reporting Standards\nIIFE/NgS            # immediately-invoked function expression\nIMAP/Sg             # internet message access protocol\nIME/NgS             # input method editor\nIMSI/N              # international mobile subscriber identity\nIPC/Ng              # interprocess communication\nIPCC/Og\nIPS/J               # in-plane switching (screen technology)\nIPv4/OgS\nIPv6/OgS\nISA/NOSg            # instruction set architecture; industry standard architecture\nIndo-Aryan/OmgSJ    # linguistics\nIndo-European/OmSgJ # linguistics\nIndo-Iranian/NmgJ   # linguistics\nIntelliJ/Sg\nIntelliSense/Og\nIoT/Ng              # internet of things\nJNI/Og              # Java Native Interface\nJS/Ng               # JavaScript\nJSDoc/Sg\nJSON/Og             # data format\nJSONP/Og\nJVM/Sg              # Java virtual machine\nJWT/Ng              # JSON Web Token\nJacoco/Sg\nJaponic/OmgJ        # linguistics\nJavaDoc/Sg\nJavaScript/ONSg     # programming language\nJetBrains/Og\nJetpack/Og\nJira/Og             # issue tracker\nJoomla/Sg\nJupyter/Og\nKDE/Og              # K Desktop Environment\nKSQL/N\nKVM/NSg             # keyboard-video-mouse\nKagi/Sg\nKahneman/Sg\nKanBan/Ng\nKartvelian/OmgJ     # linguistics\nKiCad/Og            # software\nKia/ONSg            # automobile brand\nKra-Dai/OmgJ        # linguistics\nKubernetes/OgS\nLADAR\nLDAP/Og             # Lightweight Directory Access Protocol\nLEGO/NSg            # official trademark form of Lego\nLFG/Omg             # Lexical Functional Grammar\nLIBOR/N             # London Interbank Offered Rate\nLIDAR/N             # FIXME! elsewhere we have LiDAR\nLLM/NgS             # large language model\nLLVM/Ng             # compiler system\nLOC/9               # source lines of code\nLRU                 # least recently used\nLSB/NOgS            # least significant bit/byte; Linux Standard Base\nLSP/NgS             # language server protocol\nLSTM/NgS            # long short-term memory\nLTE/NOJ             # long-term evolution\nLTS/NSg\nLUT/NgS             # lookup table\nLVM/Sg\nLaTeX/Og            # Typesetting system, based on TeX engine\nLabriola/OgS\nLanguageTool/g      # grammar checker\nLaravel/g\nLato/ONg\nLeetCode/Og         # programming contest\nLenovo/Og           # computer manufacturer\nLevenshtein/g       # surname, mathematician\nLiDAR/N             # FIXME! elsewhere we have LIDAR\nLinkedIn/Og\nLoRA/NwSg           # low-rank adaptation\nLoctite/Ogm         # product\nLogotherapy/Sg\nLongreads/Og\nLua/Og              # programming language\nLuaTeX/Og           # TeX-based typesetting engine\nMAGA/ONwgS\nMCP/Ng              # model context protocol\nMMO/NgS             # massively multiplayer online\nMMX/Ng              # multimedia extension\nMPC/ONg\nMQTT/Og             # messaging protocol\nMRU                 # most recently used\nMSB/NgS             # most significant bit/byte\nMSE/NgS             # mean squared error\nMSNBC/Og            # media company\nMSVC                # Microsoft Visual C++\nMTA/NSg\nMVC                 # model-view-controller\nMacBook/OgS         # Apple product\nManilas/N\nManilla/Og\nMapReduce/N\nMarchus/Sg\nMbps                # megabits per second\nMediaWiki/Og        # the software Wikimedia runs on\n#Metal/Og           # 3D graphics API - not working yet due to canonical spelling bug\nMetasploit/ONSg\nMinecraft/Og\nMinhaj/OgS\nMinix/Og            # old hobby operating system\nMockito/Sg\nMolex/NOSg          # Molex connector\nMullenweg/g\nMunin/Sg\nMurcielago/OgS\nN.S.A./OgS          # FIXME! elsewhere we have NSA\nN1/Og\nN2/Og\nN3/Og\nN4/Og\nN5/Og\nNAT/Ng              # network address translation/translator\nNFA/NgS\nNLP/g\nNMI/NgS             # non-maskable interrupt\nNPC/Sg\nNPM/Sg\nNTP/N               # network time protocol\nNYTimes/Sg\nNYU/Og\nNaN/NgS\nNeo4J/ONg\nNeovim/g            # code editor\nNetBSD/Og           # operating system\nNetlify/Og          # cloud\nNext.js/ONg         # framework\nNikolay/Sg\nNilotic/OmgJ        # linguistics\nNixOS/Og\nNoSQL/N\nNode.js/Og          # official spelling has dot\nNumPy/ONg\nNvidia/Og           # FIXME! elsewhere we have NVIDIA\nO'Reilly/OgS\nOAuth/g             # open authentication\nOCaml/Og            # programming language\nOG/NgS\nOOP/Nmg\nORM/NOS             # object-relational mapping\nOSINT/Nmg\nObsidian/Og         # note-taking app\nOllama/Og           # AI tool\nOpenAI/Og\nOpenBSD/Og          # operating system\nOpenCV/Og\nOpenGL/Sg           # open graphics library\nOpenID/Og\nOpenMetrics/Sg\nOpenPGP/Sg\nOpenSearch/Sg\nOpenZFS/Ng          # file system\nP2/Sg\nP2P/ONg\nPCH/Og              # highway\nPDP/NSg             # old computer\nPII/NSg\nPIO/NgS             # programmed I/O\nPKCS/Sg\nPOP3/OgS2x\nPOSIX/Og            # unix standard\nPRQL/N\nPTSD/NSg            # post-traumatic stress disorder\nPWA/ONSg\nPandoc/Ng           # FIXME! elsewhere we have pandoc\nParth/Sg\nPatreon/OgS\nPolldaddy/Og\nPolymarket/Og\nPostfix/Sg\nPostgres/Og\nPowerShell/Sg       # Microsoft product\nProlog/Og           # old programming language\nPromQL/Sg\nPyPI/Og             # Python Package Index\nPyTorch/Og          # framework\nQ1\nQ2\nQ3\nQ4\nQQ/NSg              # instant messaging app\nQUERTY/Sg           # !! mistake for QWERTY? !!\nQUIC/OgS\nQin/OgS\nQoL/Nmg             # quality of life\nQoS/Nmg             # quality of service\nQuickLook/Og        # Apple product\nQuora/Og            # Q&A platform\nRAII                # resource acquisition is initialization\nRDBMS/NOSg          # relational database management system\nREPL/NgS            # read evaluate print loop\nRFID/ONg            # radio frequency identification\nRISC/Ng             # cpu architecture\nRJ45/Ng             # ethernet connector\nRL/Nmg              # reinforcement learning\nRNN/NgS             # recurrent neural network\nRPC/ONSg            # remote procedure call\nRPG/NgS             # role-playing game\nRTX/NSg\nRaytheon/Og\nReact Native/Og     # framework\nReactJS/Og\nRed Hat/Og\nReddit/Og\nReLU/NwgS           # rectifier linear unit\nRivian/Sg           # ev company\nRoblox/Og           # game\nRoumania/Og         # pre-WWII spelling\nRustConf/Og         # conference\nRyzen/ONgS\nSCM/Ng              # source code management\nSDK/NSg             # software development kit\nSDL/Og              # Simple DirectMedia Layer\nSGD/Nmg             # stochastic gradient descent\nSHA/ONg             # Secure Hash Algorithm\nSIGINT/Nmg          # signals intelligence\nSIMD/NSg            # single instruction, multiple data\nSLA/NSg\nSLOC/9              # source lines of code\nSMS/N0gVb\nSMSed/VtT\nSMSes/N9Vh\nSMSing/V6\nSMTP                # Simple Mail Transfer Protocol\nSNL/Og              # Saturday Night Live\nSQLAlchemy/N\nSSID/NgS\nSSL/Og              # Secure Sockets Layer\nSVG/ONs             # scalable vector graphics\nSVGA/N              # super VGA\nSharman/OgS\nShellsort/NgS       # algorithm\nShibuya/Og\nShinjuku/Og\nShopify/Og          # company\nSimplenote/Og\nSino-Tibetan/NmgJ   # linguistics\nSioyek/Ng\nSiri/Og             # voice assistant\nSkia/Og             # 2d graphics library\nSnapchat/Sg\nSolidJS/Og          # ui lib\nSoros/Og            # financier George Soros\nSpaceX/Og\nSpotify/Og\nStellantis/Og       # car company\nSubstack/Og\nSubversion/Og       # version control\nSvelte/Og           # js framework\nSwiftUI/Og          # Apple framework\nSystemd/Sg          # Linux system software\nTARGET2/O           # RTGS system for the Eurozone\nTCP/JOgS            # internet protocol\nTEU/O               # Treaty on the European Union\nTFEU/O              # Treaty on the Functioning of the European Union\nTL;DR               # internet slang\nTLS/Og              # Transport Layer Security\nTODO                # FIXME! elsewhere in Harper we refer to Todo and to-do\nTOML/Ng             # configuration file format\nTOS/N9              # Terms of Service - also spelled \"ToS\"\nTOTP/Ng             # time-based one-time password\nTSMC/Og             # Taiwanese Semiconductor Manufacturing Company\nTSR/NgS             # terminate and stay resident\nTTS/Ng              # text-to-speech\nTUI/NOSg            # text user interface\nTandy/Og            # surname, given name, old computer company\nTauri/Og            # web-tech framework for desktop apps\nTeX/Og              # Typesetting engine; must come after Tex!\nTeXes\nTechCrunch/g\nTencent/Og\nTensorFlow/Og\nTextMate/Og         # text editor and syntax highlighting standard\nThinkPad/OgS        # pc brand\nTikTok/Sg\nToS/N9              # Terms of Service - also spelled \"TOS\"\nTodo                # FIXME! elsewhere in Harper we refer to TODO and to-do\nTopcoder/Og         # programming contest\nToronado/OgS        # car brand\nTree-sitter/Og      # parsing\nTrinitron/NOSg      # CRT\nTrocla/Sg\nTrueNAS/Sg\nTumblr/Og\nTypst/Sg\nUAC                 # User Account Control (Windows)\nUDP/NOSg            # internet protocol\nUEFI/Og             # Unified Extensible Firmware Interface\nUIKit/Og            # Apple framework\nULA/NgS             # uncommitted logic array\nURI/NSg             # uniform resource identifier\nUUID/NgS            # universal unique identifier\nUX/Ng               # user experience\nUpCloud/Og          # cloud service provider\nVAG/Og              # car company\nVARCHAR/NgS\nVCS/Ng              # version control system\nVFD/NgS             # vacuum fluorescent display\nVMware/ONSg\nVPN/NSg             # virtual private network\nVR/Og\nVS Code/Og\nVaadin/Sg\nVaultPress/Og\nVercel/Og           # cloud\nVideoPress/Og\nViktor/Sg\nVimeo/Og            # video platform\nVirtualBox/ONSg\nVite/Sg\nVue/Og              # framework\nVulkan/Og           # 3D graphics API\nWAL/ONSg\nWASI/Sg\nWASM/Sg             # see WebAssembly\nWD40/Ng\nWIP/Ng              # work in progress\nWPA/Og\nWPA2/Og\nWSL/Og              # windows subsystem for linux\nWaymo/Og\nWeChat/Og\nWebAssembly/g       # see WASM\nWebDAV/Og\nWebGL/Og\nWebGPU/Sg\nWebKit/Og\nWebRTC/Og\nWebSocket/Sg\nWestphalian/J       # political science and international relations\nWhatsApp/NOgVG      # messaging app\nWikilink/NSg        # !! please check and comment !! elsewhere we have wikilink\nWikimedia/Og        # foundation that runs Wikipedia etc.\nWireGuard/Sg\nWooCommerce/Og\nXFS/Ng              # file system\nXLR/Ng              # connector\nXPath/Og            # XML path language\nXbox/NOSg\nXcode/Og            # Apple IDE\nXeTeX/Og            # TeX typesetting engine\nXorg/ONSg\nY2K/g               # year 2000\nYAML/OgS            # markup language\nYazi/ONSg\nYoast/Og            # seo\nYubiKey/Sg\nZFS/Ng              # file system\nZettelkasten/Ng\nZig/Og              # programming language\nZigbee/Og           # wireless protocol\nZuckerberg/OgS      # surname, Facebook founder\na11n/N\na12s/9\na8c/Sg\nambitransitive/J    # verb which is both transitive and intransitive\nantimalware/Nmg\narXiv/Og            # research archive\narchytas/Sg         # !! please check and comment !! we also have Archytas\nautoconfig/Ng\nautoconfiguration/Ng\nautoconfigure/VSdG\nautodifferentiation/Nmg\nautoencoder/NgS\nautoregression/Nmg\nautoprefixer/NgS\nautosave/VSdGNg\nawk/Og              # *nix tool\nbackend/NSg         # dictionaries prefer: back end\nbackoff/NsG\nbacktest/NgSVdG\nbaz/~               # cf. foo, bar\nbitfield/NgS        # in this section since it's not in Cambridge, Collins, Longman, OED, Oxford, or Websters\nblogpost/NgS        # !! blog post is many times more popular; both appear in some dictionaries\nchroot/NgS\nclickstream/NgS\nconcat/VSdG\nconfig/NSgV         # not marked as a verb since \"configed\" and \"configing\" look wrong\nconfigurator/NgS\ncorpo/NgS\ncronjob/NgS\ndatagram/NgS\ndatetime/NgS\ndecomp/NgSVdG       # decompile/decompilation\ndedup/Ng            # not well covered by dictionaries. wiktionary has only singular noun. cf. dedupe\ndedupe/NSgVdG       # not well covered by dictionaries. wiktionary has noun and verb. cf. dedup\ndiahcronic/JQ       # linguistics\ndiarization/NmgS    # used in voice recognition\ndocstring/NSg\ndoomerism/Nmg\ndoomscrolling/V6NJ\ndotfile/~NSg        # not well covered by dictionaries.\neVTOL/NgS\nenshittify/VSdG\nenshittification/Nmg\next2/Ng             # file system\next3/Ng             # file system\next4/Ng             # file system\nfailable/J\nfailover/NwgS\nfalsy/J\nfeedforward/NmJ\nfilepath/NgS\nfilesystem/~Sg      # dictionaries prefer: file system\nfreemium/J\nfrontend/NSg        # dictionaries prefer: front end\nfuser/NgS\ngRPC/OgS            # framework\ngcd/Ng              # greatest common divisor\ngen AI/Ng\ngeodata/Nwg\ngeofence/NgSVdG\nglymph/Sg           # !! please check and comment !!\ngzip/VS             # GNU compression utility\ngzipped/VtT\ngzipping/V6\nhardcode/VGdS       # dictionaries prefer: hard code\nhashmap/NgS         # data structure\nheapsort\nhoster/NgS\nhostname/NSg\nhotwire/VGB         # dictionaries prefer: hot-wire\ni18n/Nm             # internationalization\niPadOS/Og\niTerm2/Og           # macOS terminal emulator\nidiolect/NSg        # linguistics\niframe/NgS\ninfosec/NmG         # information security\ninpaint/VGdS\ninterop/NmgS        # interoperability - see also FFI\ninterpretability/Nmg\ninvokable/J         # not in most dictionaries, used in computing\njQuery/Og\nkeybind/NgS         # key binding\nkeyserver/NgS\nlabriola/Sg         # !! please check and comment !! - should be uppercase surname?\nlingua franca/NSg\nlinguæ francæ/N9g\nlinguae francae/N9g\nlinkification/Nmg\nmanip/NgS           # gamer slang manipulation\nmegatron/NgS\nmemecoin/NgS\nmergesort\nmicroframework/NgS\nmulticast/JVSdG\nnonmutating/J\nnpm/Og              # node package manager\nnullish/J\nolds/~              # common in phrasing such as \"twenty year olds\"\npandoc/Sg           # !! please check and comment !! elsewhere we have Pandoc\npastebin/NgS\npdfTeX/Og           # Program, extension for TeX engine\npentest/VSdG\npentester/NSg       # penetration tester\npentesting/NmgV6\nplist/NgS           # Apple property list\npolysyntheses/N9    # linguistics\npolysynthesis/Nw0g  # linguistics\npolysynthetic/J.    # linguistics\npostfix/NgSVdG\npre/~PNV(           # !! please check and comment !! dictionaries only list prefix pre-\npreshared/J\nquadtree/NgS        # data structure\nquicksort/NgSVdG    # algo\nraytracer/N         # dictionaries prefer: ray tracer\nrearchitect/VdGS\nredump/VdGS\nremux/VdGS\nreranker/NgS\nroadmap/NgS         # overtook \"road map\" c. 2000 but not in dictionaries yet\nroguelike/NgS\nroyale/~NSgJ        # !! please check and comment !! dictionaries only list noun sense type of custard\nrunahead/NgS\ns.t./~              # !! please check and comment !!\nsRGB/Og             # colour space\nscatterplot/NSgVG   # dictionaries prefer: scatter plot\nscreencast/VdSG\nscrollbar/NSg       # dictionaries prefer: scroll bar\nsed/Og              # *nix tool / language\nsigil/NgS\nsingleplayer/J\nsioyek/Sg           # !! please check and comment !!\nsociolect/NSg\nstacktrace/NSg      # dictionaries prefer: stack trace\nstandup/Sg          # dictionaries prefer: stand-up\nstd/~               # doesn't really behave like any normal POS but more like an affix that's not attached\nstdio/Og            # behaves like a proper noun despite lowercase since not normally used with 'a' or pluralized. But can be used with 'the'\nstdlib/Og           # behaves like a proper noun despite lowercase since not normally used with 'a' or pluralized. But can be used with 'the'\nstrat/NgS           # gamer slang strategy\nsubchannel/NgS\nsubkey/NgS\nsubreddit/NgS       # see Reddit\nsupersequence/NgS\nsynchronic/JQ       # linguistics\ntagset/NgS\nterraform/VGdS\ntimespan/NgS\ntmux/Og             # terminal multiplexer, uncapitalized proper noun\ntrie/NgS            # data structure\ntruthy/J\nunicast/JVSdG\nunlintable/J\nupsert/VdSGNg       # database operation: update or insert\nupsertion/NgS       # database operation: update or insert\nuptime/NwgS\nvid/NgS             # video\nvolitive/NSgJ\nwaitlist/NgS\nwatchOS/Og\nwebpack/Og\nwhitespace/~NSg     # dictionaries prefer: white space\nwikilink/~NSg       # !! please check and comment !! elsewhere we have Wikilink\nz-buffer/NgS\n\n# New entries may be added below this line\n# If you're not confident in using the affix annotations, add missing words here\n# And they will be reviewed\n# Words added using the `just addnoun` command will be added here\n\nagnatic/J           # Most often in the phrase \"agnatic primogeniture\"\nAPAC/gO             # Acronym for Asia-Pacific\narchipelagic/J      # As found in the phrase \"Archipelagic state\" in the \"United Nations Convention on the Law of the Sea\"\nchorded/J           # music: As refers to \"chorded instruments\"\ncognatic/J          # As with \"agnatic\"\ncomital/J           # Adjective version of the noble rank \"count/countess/earl\"\nCompline/NO         # Final prayer of the day in the Christian Daily Office and/or Liturgy of the Hours\ncovenantal/JQ\ncupbearer/NSg\nDACH/gO             # Acronym for Deutschland, Austria, Switzerland\nEMEA/gO             # Acronym for Europe, the Middle East and Africa\nexocentric/JQ\nfae/Nmg             # fantasy alternative for \"fey\"\niaido/Nmg           # martial art\nkalimba/NSg\nlicensor/NSg\nmenarche/Nmg        # medicine\nmicronutrient/NSg\nmonolatrous/J\nmonolatry/Nmg\nofferor/NSg\nomnipredicativity/N0\northopractic/J\northopraxy/Nwg\npiebaldism/Nmg      # medicine\npraxis/Nmg\nqueenship/Nwg\nresolutive/J\nsortition/Nmg       # Political science: a method of appointment to office by random draw\nsubvocalization/Nwg # phonetics\nsupervenience/Nmg   # From emergentist ontology\ntrimeter/NgS        # poetry\ntrimetre/NgS!@_₹    # poetry\ntrimetric/J\nunminted/J\nvicomital/J         # Adjective version of \"viscount/viscountess\"\nvicontiel/J         #  As above, alternative version\nviscomital/J        # As above, alternative version\nWordCamp/Og\nworldbuild/V>G\n"
  },
  {
    "path": "harper-core/irregular_nouns.json",
    "content": "[\n\t\"// comments can appear in the line before an entry\",\n\t\"// or in place of an entry\",\n\t[\"addendum\", \"addenda\"],\n\t[\"aircraft\", \"aircraft\"],\n\t[\"aircraftman\", \"aircraftmen\"],\n\t[\"aircraftwoman\", \"aircraftwomen\"],\n\t[\"airman\", \"airmen\"],\n\t[\"alderman\", \"aldermen\"],\n\t[\"alga\", \"algae\"],\n\t[\"alveolus\", \"alveoli\"],\n\t[\"anchorman\", \"anchormen\"],\n\t[\"anchorwoman\", \"anchorwomen\"],\n\t[\"atrium\", \"atria\"],\n\t[\"axis\", \"axes\"],\n\t[\"bacillus\", \"bacilli\"],\n\t[\"bacterium\", \"bacteria\"],\n\t[\"bandsman\", \"bandsmen\"],\n\t[\"bargeman\", \"bargemen\"],\n\t[\"bellman\", \"bellmen\"],\n\t[\"biceps\", \"biceps\"],\n\t[\"boatman\", \"boatmen\"],\n\t[\"bronchus\", \"bronchi\"],\n\t[\"businesswoman\", \"businesswomen\"],\n\t[\"cactus\", \"cacti\"],\n\t[\"cameraperson\", \"camerapeople\"],\n\t[\"candelabrum\", \"candelabra\"],\n\t[\"catharsis\", \"catharses\"],\n\t[\"chairman\", \"chairmen\"],\n\t[\"chairwoman\", \"chairwomen\"],\n\t[\"child\", \"children\"],\n\t[\"churchwoman\", \"churchwomen\"],\n\t[\"clansman\", \"clansmen\"],\n\t[\"clanswoman\", \"clanswomen\"],\n\t[\"committeeman\", \"committeemen\"],\n\t[\"committeewoman\", \"committeewomen\"],\n\t[\"continuum\", \"continua\"],\n\t[\"corpus\", \"corpora\"],\n\t[\"craftsman\", \"craftsmen\"],\n\t[\"craftswoman\", \"craftswomen\"],\n\t[\"crisis\", \"crises\"],\n\t[\"cyclops\", \"cyclopes\"],\n\t[\"datum\", \"data\"],\n\t[\"deer\", \"deer\"],\n\t[\"diaeresis\", \"diaereses\"],\n\t[\"diagnosis\", \"diagnoses\"],\n\t[\"dominatrix\", \"dominatrices\"],\n\t[\"draughtsman\", \"draughtsmen\"],\n\t[\"draughtswoman\", \"draughtswomen\"],\n\t[\"effluvium\", \"effluvia\"],\n\t[\"emphasis\", \"emphases\"],\n\t[\"esophagus\", \"esophagi\"],\n\t[\"extremum\", \"extrema\"],\n\t[\"fish\", \"fish\"],\n\t[\"foot\", \"feet\"],\n\t[\"footman\", \"footmen\"],\n\t[\"formula\", \"formulae\"],\n\t[\"forum\", \"fora\"],\n\t[\"freeman\", \"freemen\"],\n\t[\"frontiersman\", \"frontiersmen\"],\n\t[\"frontierswoman\", \"frontierswomen\"],\n\t[\"garbageman\", \"garbagemen\"],\n\t[\"genesis\", \"geneses\"],\n\t[\"genie\", \"genii\"],\n\t[\"genius\", \"genii\"],\n\t[\"genus\", \"genera\"],\n\t[\"glissando\", \"glissandi\"],\n\t[\"goose\", \"geese\"],\n\t[\"graffito\", \"graffiti\"],\n\t[\"grandchild\", \"grandchildren\"],\n\t[\"handyman\", \"handymen\"],\n\t[\"hitman\", \"hitmen\"],\n\t[\"houseman\", \"housemen\"],\n\t[\"iceman\", \"icemen\"],\n\t[\"ilium\", \"ilia\"],\n\t[\"index\", \"indices\"],\n\t[\"intermezzo\", \"intermezzi\"],\n\t[\"journeyman\", \"journeymen\"],\n\t[\"labium\", \"labia\"],\n\t[\"lamina\", \"laminae\"],\n\t[\"laundrywoman\", \"laundrywomen\"],\n\t[\"laywoman\", \"laywomen\"],\n\t[\"linesman\", \"linesmen\"],\n\t[\"lira\", \" lire\"],\n\t[\"longshoreman\", \"longshoremen\"],\n\t[\"louse\", \"lice\"],\n\t[\"madman\", \"madmen\"],\n\t[\"mailman\", \"mailmen\"],\n\t[\"man\", \"men\"],\n\t[\"memorandum\", \"memoranda\"],\n\t[\"metathesis\", \"metatheses\"],\n\t[\"minimum\", \"minima\"],\n\t[\"mitosis\", \"mitoses\"],\n\t[\"motorman\", \"motormen\"],\n\t[\"mouse\", \"mice\"],\n\t[\"muscleman\", \"musclemen\"],\n\t[\"nemesis\", \"nemeses\"],\n\t[\"nightwatchman\", \"nightwatchmen\"],\n\t[\"oarsman\", \"oarsmen\"],\n\t[\"oarswoman\", \"oarswomen\"],\n\t[\"oasis\", \"oases\"],\n\t[\"ombudsman\", \"ombudsmen\"],\n\t[\"optimum\", \"optima\"],\n\t[\"ox\", \"oxen\"],\n\t[\"palazzo\", \"palazzi\"],\n\t[\"papyrus\", \"papyri\"],\n\t[\"parenthesis\", \"parentheses\"],\n\t[\"patina\", \"patinae\"],\n\t[\"patrolman\", \"patrolmen\"],\n\t[\"pericardium\", \"pericardia\"],\n\t[\"periphrasis\", \"periphrases\"],\n\t[\"person\", \"people\"],\n\t[\"pharynx\", \"pharynges\"],\n\t[\"phenomenon\", \"phenomena\"],\n\t[\"plainclothesman\", \"plainclothesmen\"],\n\t[\"pneumococcus\", \"pneumococci\"],\n\t[\"pressman\", \"pressmen\"],\n\t[\"prosthesis\", \"protheses\"],\n\t[\"quantum\", \"quanta\"],\n\t[\"radius\", \"radii\"],\n\t[\"radix\", \"radices\"],\n\t[\"repairman\", \"repairmen\"],\n\t[\"salesman\", \"salesmen\"],\n\t[\"saleswoman\", \"saleswomen\"],\n\t[\"sandman\", \"sandmen\"],\n\t[\"schema\", \"schemata\"],\n\t[\"seraph\", \"seraphim\"],\n\t[\"sheep\", \"sheep\"],\n\t[\"shoreman\", \"shoremen\"],\n\t[\"signore\", \"signori\"],\n\t[\"simulacrum\", \"simulacra\"],\n\t[\"solarium\", \"solaria\"],\n\t[\"species\", \"species\"],\n\t[\"spokesman\", \"spokesmen\"],\n\t[\"spokesperson\", \"spokespeople\"],\n\t[\"spokeswoman\", \"spokeswomen\"],\n\t[\"statesman\", \"statesmen\"],\n\t[\"stateswoman\", \"stateswomen\"],\n\t[\"steersman\", \"steersmen\"],\n\t[\"stratum\", \"strata\"],\n\t[\"streptococcus\", \"streptococci\"],\n\t[\"succubus\", \"succubi\"],\n\t[\"symbiosis\", \"symbioses\"],\n\t[\"tarsus\", \"tarsi\"],\n\t[\"taxon\", \"taxa\"],\n\t[\"testatrix\", \"testatrices\"],\n\t[\"testis\", \"testes\"],\n\t[\"thesis\", \"theses\"],\n\t[\"thrombosis\", \"thromboses\"],\n\t[\"tooth\", \"teeth\"],\n\t[\"townsman\", \"townsmen\"],\n\t[\"townswoman\", \"townswomen\"],\n\t[\"tradesman\", \"tradesmen\"],\n\t[\"tradeswoman\", \"tradeswomen\"],\n\t[\"uterus\", \"uteri\"],\n\t[\"vertebra\", \"vertebrae\"],\n\t[\"vertex\", \"vertices\"],\n\t[\"vivarium\", \"vivaria\"],\n\t[\"washerwoman\", \"washerwomen\"],\n\t[\"woman\", \"women\"],\n\t[\"woodlouse\", \"woodlice\"],\n\t[\"workingwoman\", \"workingwomen\"],\n\t[\"workman\", \"workmen\"]\n]\n"
  },
  {
    "path": "harper-core/irregular_verbs.json",
    "content": "[\n\t\"// comments can appear in the line before an entry\",\n\t\"// or in place of an entry\",\n\t[\"arise\", \"arose\", \"arisen\"],\n\t[\"awake\", \"awoke\", \"awoken\"],\n\t\"// be/am/are/is -- was/were -- been\",\n\t[\"bear\", \"bore\", \"born\"],\n\t[\"become\", \"became\", \"become\"],\n\t[\"begin\", \"began\", \"begun\"],\n\t[\"bend\", \"bent\", \"bent\"],\n\t[\"bet\", \"bet\", \"bet\"],\n\t[\"bid\", \"bade\", \"bidden\"],\n\t[\"bind\", \"bound\", \"bound\"],\n\t[\"bite\", \"bit\", \"bitten\"],\n\t[\"bleed\", \"bled\", \"bled\"],\n\t[\"blow\", \"blew\", \"blown\"],\n\t[\"break\", \"broke\", \"broken\"],\n\t[\"breed\", \"bred\", \"bred\"],\n\t[\"bring\", \"brought\", \"brought\"],\n\t[\"build\", \"built\", \"built\"],\n\t[\"burst\", \"burst\", \"burst\"],\n\t[\"buy\", \"bought\", \"bought\"],\n\t[\"catch\", \"caught\", \"caught\"],\n\t[\"choose\", \"chose\", \"chosen\"],\n\t[\"come\", \"came\", \"come\"],\n\t[\"cost\", \"cost\", \"cost\"],\n\t[\"cut\", \"cut\", \"cut\"],\n\t[\"dive\", \"dove\", \"dove\"],\n\t[\"do\", \"did\", \"done\"],\n\t[\"drink\", \"drank\", \"drunk\"],\n\t[\"drive\", \"drove\", \"driven\"],\n\t[\"eat\", \"ate\", \"eaten\"],\n\t[\"fall\", \"fell\", \"fallen\"],\n\t[\"feed\", \"fed\", \"fed\"],\n\t[\"feel\", \"felt\", \"felt\"],\n\t[\"fight\", \"fought\", \"fought\"],\n\t[\"find\", \"found\", \"found\"],\n\t[\"fly\", \"flew\", \"flown\"],\n\t[\"forget\", \"forgot\", \"forgotten\"],\n\t[\"forgo\", \"forwent\", \"forgone\"],\n\t[\"freeze\", \"froze\", \"frozen\"],\n\t\"// get -- got -- gotten\",\n\t[\"get\", \"got\", \"got\"],\n\t[\"give\", \"gave\", \"given\"],\n\t[\"go\", \"went\", \"gone\"],\n\t[\"grow\", \"grew\", \"grown\"],\n\t[\"have\", \"had\", \"had\"],\n\t[\"hear\", \"heard\", \"heard\"],\n\t[\"hit\", \"hit\", \"hit\"],\n\t[\"hold\", \"held\", \"held\"],\n\t[\"hurt\", \"hurt\", \"hurt\"],\n\t[\"input\", \"input\", \"input\"],\n\t[\"keep\", \"kept\", \"kept\"],\n\t[\"kneel\", \"knelt\", \"knelt\"],\n\t[\"know\", \"knew\", \"known\"],\n\t\"// lay -- laid -- lain\",\n\t[\"lay\", \"laid\", \"laid\"],\n\t[\"lead\", \"led\", \"led\"],\n\t[\"leave\", \"left\", \"left\"],\n\t[\"lend\", \"lent\", \"lent\"],\n\t[\"let\", \"let\", \"let\"],\n\t[\"lie\", \"lay\", \"lain\"],\n\t[\"light\", \"lit\", \"lit\"],\n\t[\"lose\", \"lost\", \"lost\"],\n\t[\"make\", \"made\", \"made\"],\n\t[\"mean\", \"meant\", \"meant\"],\n\t[\"meet\", \"met\", \"met\"],\n\t[\"mistake\", \"mistook\", \"mistaken\"],\n\t[\"output\", \"output\", \"output\"],\n\t[\"overtake\", \"overtook\", \"overtaken\"],\n\t[\"overthrow\", \"overthrew\", \"overthrown\"],\n\t[\"overwind\", \"overwound\", \"overwound\"],\n\t[\"overwrite\", \"overwrote\", \"overwritten\"],\n\t[\"partake\", \"partook\", \"partaken\"],\n\t[\"pay\", \"paid\", \"paid\"],\n\t\"// prove -- proved -- proven/proved\",\n\t[\"put\", \"put\", \"put\"],\n\t[\"read\", \"read\", \"read\"],\n\t[\"redo\", \"redid\", \"redone\"],\n\t[\"remake\", \"remade\", \"remade\"],\n\t[\"reread\", \"reread\", \"reread\"],\n\t[\"reset\", \"reset\", \"reset\"],\n\t[\"ride\", \"rode\", \"ridden\"],\n\t[\"ring\", \"rang\", \"rung\"],\n\t[\"rise\", \"rose\", \"risen\"],\n\t[\"run\", \"ran\", \"run\"],\n\t[\"see\", \"saw\", \"seen\"],\n\t[\"sell\", \"sold\", \"sold\"],\n\t[\"send\", \"sent\", \"sent\"],\n\t[\"set\", \"set\", \"set\"],\n\t[\"sew\", \"sewed\", \"sewn\"],\n\t[\"shake\", \"shook\", \"shaken\"],\n\t[\"shed\", \"shed\", \"shed\"],\n\t[\"shine\", \"shone\", \"shone\"],\n\t[\"shoe\", \"shod\", \"shod\"],\n\t[\"shoot\", \"shot\", \"shot\"],\n\t[\"show\", \"showed\", \"shown\"],\n\t[\"shrink\", \"shrank\", \"shrunk\"],\n\t[\"shut\", \"shut\", \"shut\"],\n\t[\"sing\", \"sang\", \"sung\"],\n\t\"// sink -- sank -- sunken??\",\n\t[\"sink\", \"sank\", \"sunk\"],\n\t[\"sit\", \"sat\", \"sat\"],\n\t[\"slay\", \"slew\", \"slain\"],\n\t[\"sleep\", \"slept\", \"slept\"],\n\t[\"slide\", \"slid\", \"slid\"],\n\t[\"slit\", \"slit\", \"slit\"],\n\t\"// sneak -- sneaked/snuck -- sneaked/snuck\",\n\t[\"speak\", \"spoke\", \"spoken\"],\n\t[\"spend\", \"spent\", \"spent\"],\n\t[\"spin\", \"spun\", \"spun\"],\n\t[\"spit\", \"spat\", \"spat\"],\n\t[\"split\", \"split\", \"split\"],\n\t[\"spread\", \"spread\", \"spread\"],\n\t[\"spring\", \"sprang\", \"sprung\"],\n\t[\"stand\", \"stood\", \"stood\"],\n\t[\"steal\", \"stole\", \"stolen\"],\n\t[\"stick\", \"stuck\", \"stuck\"],\n\t[\"sting\", \"stung\", \"stung\"],\n\t[\"stink\", \"stank\", \"stunk\"],\n\t[\"stride\", \"strode\", \"stridden\"],\n\t[\"strike\", \"struck\", \"stricken\"],\n\t[\"string\", \"strung\", \"strung\"],\n\t[\"swear\", \"swore\", \"sworn\"],\n\t[\"sweep\", \"swept\", \"swept\"],\n\t[\"swell\", \"swelled\", \"swollen\"],\n\t[\"swim\", \"swam\", \"swum\"],\n\t[\"swing\", \"swung\", \"swung\"],\n\t[\"take\", \"took\", \"taken\"],\n\t[\"teach\", \"taught\", \"taught\"],\n\t[\"tear\", \"tore\", \"torn\"],\n\t[\"think\", \"thought\", \"thought\"],\n\t[\"throw\", \"threw\", \"thrown\"],\n\t[\"tread\", \"trod\", \"trodden\"],\n\t[\"undo\", \"undid\", \"undone\"],\n\t[\"wake\", \"woke\", \"woken\"],\n\t[\"wear\", \"wore\", \"worn\"],\n\t[\"weave\", \"wove\", \"woven\"],\n\t[\"weep\", \"wept\", \"wept\"],\n\t\"// wet -- wetted -- wetted\",\n\t[\"wet\", \"wet\", \"wet\"],\n\t[\"win\", \"won\", \"won\"],\n\t[\"wind\", \"wound\", \"wound\"],\n\t[\"write\", \"wrote\", \"written\"]\n]\n"
  },
  {
    "path": "harper-core/proper_noun_rules.json",
    "content": "{\n\t\"Americas\": {\n\t\t\"canonical\": [\"South America\", \"North America\", \"Central America\"],\n\t\t\"description\": \"When referring to North, Central, and South America, make sure to treat them as a proper noun.\"\n\t},\n\t\"Australia\": {\n\t\t\"canonical\": [\n\t\t\t\"Australian Capital Territory\",\n\t\t\t\"New South Wales\",\n\t\t\t\"Northern Territory\",\n\t\t\t\"South Australia\",\n\t\t\t\"Western Australia\",\n\t\t\t\"Alice Springs\",\n\t\t\t\"Gold Coast\",\n\t\t\t\"Sunshine Coast\"\n\t\t],\n\t\t\"description\": \"When referring to states, territories, and cities in Australia, make sure to treat them as a proper noun.\"\n\t},\n\t\"OceansAndSeas\": {\n\t\t\"canonical\": [\n\t\t\t\"Atlantic Ocean\",\n\t\t\t\"Pacific Ocean\",\n\t\t\t\"Indian Ocean\",\n\t\t\t\"Southern Ocean\",\n\t\t\t\"Arctic Ocean\",\n\t\t\t\"Mediterranean Sea\",\n\t\t\t\"Caribbean Sea\",\n\t\t\t\"Baltic Sea\",\n\t\t\t\"Red Sea\",\n\t\t\t\"Black Sea\",\n\t\t\t\"Caspian Sea\",\n\t\t\t\"Coral Sea\",\n\t\t\t\"Bering Sea\",\n\t\t\t\"North Sea\",\n\t\t\t\"South China Sea\"\n\t\t],\n\t\t\"description\": \"When referring to the world's oceans and seas, ensure they are treated as proper nouns.\"\n\t},\n\t\"Canada\": {\n\t\t\"canonical\": [\n\t\t\t\"British Columbia\",\n\t\t\t\"New Brunswick\",\n\t\t\t\"Northwest Territories\",\n\t\t\t\"Nova Scotia\",\n\t\t\t\"Prince Edward Island\",\n\t\t\t\"Quebec City\"\n\t\t],\n\t\t\"description\": \"When referring to provinces, territories, and cities in Canada, make sure to treat them as a proper noun.\"\n\t},\n\t\"Laos\": {\n\t\t\"canonical\": [\"La Mam\", \"Luang Namtha\", \"Luang Prabang\", \"Xam Neua\"],\n\t\t\"description\": \"When referring to provinces and cities in Laos, make sure to treat them as a proper noun.\"\n\t},\n\t\"Malaysia\": {\n\t\t\"canonical\": [\n\t\t\t\"Alor Setar\",\n\t\t\t\"George Town\",\n\t\t\t\"Johor Bahru\",\n\t\t\t\"Kota Bahru\",\n\t\t\t\"Kota Kinabalu\",\n\t\t\t\"Kuala Lumpur\",\n\t\t\t\"Kuala Terengganu\",\n\t\t\t\"Negeri Sembilan\",\n\t\t\t\"Shah Alam\"\n\t\t],\n\t\t\"description\": \"When referring to the states of Malaysia and their capitals, make sure to treat them as a proper noun.\"\n\t},\n\t\"Countries\": {\n\t\t\"canonical\": [\n\t\t\t\"Equatorial Guinea\",\n\t\t\t\"Papua New Guinea\",\n\t\t\t\"Cayman Islands\",\n\t\t\t\"Falkland Islands\",\n\t\t\t\"Marshall Islands\",\n\t\t\t\"Solomon Islands\",\n\t\t\t\"British Virgin Islands\",\n\t\t\t\"United States Virgin Islands\",\n\t\t\t\"Northern Mariana Islands\",\n\t\t\t\"New Caledonia\",\n\t\t\t\"New Zealand\",\n\t\t\t\"Northern Cyprus\",\n\t\t\t\"Northern Ireland\",\n\t\t\t\"Central African Republic\",\n\t\t\t\"Czech Republic\",\n\t\t\t\"Dominican Republic\",\n\t\t\t\"Saint Helena\",\n\t\t\t\"Saint Lucia\",\n\t\t\t\"Saint Martin\",\n\t\t\t\"South Africa\",\n\t\t\t\"South Ossetia\",\n\t\t\t\"South Sudan\",\n\t\t\t\"American Samoa\",\n\t\t\t\"Antigua and Barbuda\",\n\t\t\t\"Bosnia and Herzegovina\",\n\t\t\t\"Burkina Faso\",\n\t\t\t\"Cape Verde\",\n\t\t\t\"Costa Rica\",\n\t\t\t\"Democratic Republic of the Congo\",\n\t\t\t\"East Timor\",\n\t\t\t\"El Salvador\",\n\t\t\t\"French Polynesia\",\n\t\t\t\"Guinea-Bissau\",\n\t\t\t\"Isle of Man\",\n\t\t\t\"Ivory Coast\",\n\t\t\t\"North Macedonia\",\n\t\t\t\"Puerto Rico\",\n\t\t\t\"São Tomé and Príncipe\",\n\t\t\t\"Saudi Arabia\",\n\t\t\t\"Sierra Leone\",\n\t\t\t\"Sint Maarten\",\n\t\t\t\"Sri Lanka\",\n\t\t\t\"Trinidad and Tobago\",\n\t\t\t\"Western Sahara\"\n\t\t],\n\t\t\"description\": \"When referring to Countries, make sure to treat it as a proper noun.\"\n\t},\n\t\"NationalCapitals\": {\n\t\t\"canonical\": [\n\t\t\t\"Abu Dhabi\",\n\t\t\t\"Addis Ababa\",\n\t\t\t\"Andorra la Vella\",\n\t\t\t\"Bandar Seri Begawan\",\n\t\t\t\"Belize City\",\n\t\t\t\"Buenos Aires\",\n\t\t\t\"Cape Town\",\n\t\t\t\"Dar es Salaam\",\n\t\t\t\"Diego Garcia\",\n\t\t\t\"George Town\",\n\t\t\t\"Guatemala City\",\n\t\t\t\"Ho Chi Minh City\",\n\t\t\t\"Kuwait City\",\n\t\t\t\"La Paz\",\n\t\t\t\"Mexico City\",\n\t\t\t\"New Delhi\",\n\t\t\t\"Pago Pago\",\n\t\t\t\"Panama City\",\n\t\t\t\"Phnom Penh\",\n\t\t\t\"Port-au-Prince\",\n\t\t\t\"Port Louis\",\n\t\t\t\"Port Moresby\",\n\t\t\t\"Port of Spain\",\n\t\t\t\"Port Vila\",\n\t\t\t\"Porto-Novo\",\n\t\t\t\"Saint Kitts and Nevis\",\n\t\t\t\"Saint Pierre and Miquelon\",\n\t\t\t\"Saint Vincent and the Grenadines\",\n\t\t\t\"San José\",\n\t\t\t\"San Juan\",\n\t\t\t\"San Marino\",\n\t\t\t\"San Salvador\",\n\t\t\t\"Santo Domingo\",\n\t\t\t\"São Tomé\",\n\t\t\t\"The Bahamas\",\n\t\t\t\"The Hague\",\n\t\t\t\"Vatican City\"\n\t\t],\n\t\t\"description\": \"When referring to national capitals, make sure to treat it as a proper noun.\"\n\t},\n\t\"ChineseCommunistParty\": {\n\t\t\"canonical\": [\"Chinese Communist Party\"],\n\t\t\"description\": \"When referring to the political party, make sure to treat them as a proper noun.\"\n\t},\n\t\"UnitedOrganizations\": {\n\t\t\"canonical\": [\n\t\t\t\"United Nations\",\n\t\t\t\"United States\",\n\t\t\t\"United Kingdom\",\n\t\t\t\"United Airlines\",\n\t\t\t\"United Arab Emirates\"\n\t\t],\n\t\t\"description\": \"When referring to national or international organizations, make sure to treat them as a proper noun.\"\n\t},\n\t\"Holidays\": {\n\t\t\"canonical\": [\n\t\t\t\"Absolution Day\",\n\t\t\t\"Admission Day\",\n\t\t\t\"Alaska Day\",\n\t\t\t\"Anzac Day\",\n\t\t\t\"Arbor Day\",\n\t\t\t\"Armistice Day\",\n\t\t\t\"Ascension Day\",\n\t\t\t\"Australia Day\",\n\t\t\t\"Bastille Day\",\n\t\t\t\"Boxing Day\",\n\t\t\t\"Canada Day\",\n\t\t\t\"Christmas Day\",\n\t\t\t\"Columbus Day\",\n\t\t\t\"Commonwealth Day\",\n\t\t\t\"Darwin Day\",\n\t\t\t\"Discovery Day\",\n\t\t\t\"Dominion Day\",\n\t\t\t\"Earth Day\",\n\t\t\t\"Easter Day\",\n\t\t\t\"Election Day\",\n\t\t\t\"Emancipation Day\",\n\t\t\t\"Empire Day\",\n\t\t\t\"Father's Day\",\n\t\t\t\"Flag Day\",\n\t\t\t\"Freedom Day\",\n\t\t\t\"Galentine's Day\",\n\t\t\t\"Groundhog Day\",\n\t\t\t\"Halloween\",\n\t\t\t\"Independence Day\",\n\t\t\t\"Jamhuri Day\",\n\t\t\t\"Jubilee Day\",\n\t\t\t\"Kamehameha Day\",\n\t\t\t\"Kenyatta Day\",\n\t\t\t\"Labor Day\",\n\t\t\t\"Labour Day\",\n\t\t\t\"Madaraka Day\",\n\t\t\t\"Mashujaa Day\",\n\t\t\t\"May Day\",\n\t\t\t\"Memorial Day\",\n\t\t\t\"Merdeka Day\",\n\t\t\t\"Mother's Day\",\n\t\t\t\"National Freedom Day\",\n\t\t\t\"New Year's Day\",\n\t\t\t\"Patrick's Day\",\n\t\t\t\"Presidents' Day\",\n\t\t\t\"Remembrance Day\",\n\t\t\t\"Republic Day\",\n\t\t\t\"Rizal Day\",\n\t\t\t\"Thanksgiving Day\",\n\t\t\t\"Ulster Day\",\n\t\t\t\"Valentine's Day\",\n\t\t\t\"Veterans Day\",\n\t\t\t\"Victoria Day\",\n\t\t\t\"Victory Day\",\n\t\t\t\"Waitangi Day\",\n\t\t\t\"Wattle Day\",\n\t\t\t\"Year's Day\",\n\t\t\t\"Youth Day\",\n\t\t\t\"Black Friday\",\n\t\t\t\"Cyber Monday\"\n\t\t],\n\t\t\"description\": \"When referring to holidays, make sure to treat them as a proper noun.\"\n\t},\n\t\"Koreas\": {\n\t\t\"canonical\": [\"South Korea\", \"North Korea\"],\n\t\t\"description\": \"When referring to the nations, make sure to treat them as a proper noun.\"\n\t},\n\t\"AmazonNames\": {\n\t\t\"canonical\": [\n\t\t\t\"Amazon Shopping\",\n\t\t\t\"Amazon Web Services\",\n\t\t\t\"Amazon Lambda\",\n\t\t\t\"Amazon RDS\",\n\t\t\t\"Amazon DynamoDB\",\n\t\t\t\"Amazon SageMaker\",\n\t\t\t\"Amazon Rekognition\",\n\t\t\t\"Amazon CloudFront\",\n\t\t\t\"Amazon ECS\",\n\t\t\t\"Amazon EKS\",\n\t\t\t\"Amazon CloudWatch\",\n\t\t\t\"Amazon IAM\",\n\t\t\t\"Amazon Prime\",\n\t\t\t\"Amazon Kindle\"\n\t\t],\n\t\t\"description\": \"When referring to the various products of Amazon.com, make sure to treat them as a proper noun.\"\n\t},\n\t\"GoogleNames\": {\n\t\t\"canonical\": [\n\t\t\t\"Google Search\",\n\t\t\t\"Google Cloud\",\n\t\t\t\"Google Maps\",\n\t\t\t\"Google Docs\",\n\t\t\t\"Google Sheets\",\n\t\t\t\"Google Slides\",\n\t\t\t\"Google Drive\",\n\t\t\t\"Google Meet\",\n\t\t\t\"Google Gmail\",\n\t\t\t\"Google Calendar\",\n\t\t\t\"Google Chrome\",\n\t\t\t\"Google ChromeOS\",\n\t\t\t\"Google Android\",\n\t\t\t\"Google Play\",\n\t\t\t\"Google Bard\",\n\t\t\t\"Google Gemini\",\n\t\t\t\"Google YouTube\",\n\t\t\t\"Google Photos\",\n\t\t\t\"Google Analytics\",\n\t\t\t\"Google AdSense\",\n\t\t\t\"Google Pixel\",\n\t\t\t\"Google Nest\",\n\t\t\t\"Google Workspace\",\n\t\t\t\"Chrome Web Store\",\n\t\t\t\"Google Chrome Web Store\"\n\t\t],\n\t\t\"description\": \"When referring to Google products and services, make sure to treat them as proper nouns.\"\n\t},\n\t\"AzureNames\": {\n\t\t\"canonical\": [\n\t\t\t\"Azure DevOps\",\n\t\t\t\"Azure Functions\",\n\t\t\t\"Azure Cosmos DB\",\n\t\t\t\"Azure SQL Database\",\n\t\t\t\"Azure Kubernetes Service\",\n\t\t\t\"Azure Virtual Machines\",\n\t\t\t\"Azure Monitor\",\n\t\t\t\"Azure Storage\",\n\t\t\t\"Azure Active Directory\",\n\t\t\t\"Azure App Service\",\n\t\t\t\"Azure Key Vault\",\n\t\t\t\"Azure Cognitive Services\",\n\t\t\t\"Azure Service Bus\",\n\t\t\t\"Azure Event Hub\"\n\t\t],\n\t\t\"description\": \"When referring to Azure cloud services, make sure to treat them as proper nouns.\"\n\t},\n\t\"MicrosoftNames\": {\n\t\t\"canonical\": [\n\t\t\t\"Microsoft Bing\",\n\t\t\t\"Microsoft Dynamics\",\n\t\t\t\"Microsoft Edge\",\n\t\t\t\"Microsoft Excel\",\n\t\t\t\"Microsoft Office\",\n\t\t\t\"Microsoft OneDrive\",\n\t\t\t\"Microsoft Outlook\",\n\t\t\t\"Microsoft PowerPoint\",\n\t\t\t\"Microsoft SharePoint\",\n\t\t\t\"Microsoft Surface\",\n\t\t\t\"Microsoft Teams\",\n\t\t\t\"Microsoft Visual Studio\",\n\t\t\t\"Microsoft Windows\",\n\t\t\t\"Microsoft Word\",\n\t\t\t\"Microsoft Xbox\",\n\t\t\t\"VS Code\"\n\t\t],\n\t\t\"description\": \"When referring to Microsoft products and services, make sure to treat them as proper nouns.\"\n\t},\n\t\"AppleNames\": {\n\t\t\"canonical\": [\n\t\t\t\"Apple iPhone\",\n\t\t\t\"Apple iPad\",\n\t\t\t\"Apple iMac\",\n\t\t\t\"Apple MacBook\",\n\t\t\t\"Apple Watch\",\n\t\t\t\"Apple TV\",\n\t\t\t\"Apple Music\",\n\t\t\t\"Apple Arcade\",\n\t\t\t\"Apple iCloud\",\n\t\t\t\"Apple Safari\",\n\t\t\t\"Apple HomeKit\",\n\t\t\t\"Apple CarPlay\",\n\t\t\t\"Apple MacBook Pro\",\n\t\t\t\"Apple MacBook Air\",\n\t\t\t\"Apple Mac Pro\",\n\t\t\t\"Apple Mac Mini\",\n\t\t\t\"Apple AirPods\",\n\t\t\t\"Apple AirPods Pro\",\n\t\t\t\"Apple AirPods Max\",\n\t\t\t\"Apple Vision Pro\"\n\t\t],\n\t\t\"description\": \"When referring to Apple products and services, make sure to treat them as proper nouns.\"\n\t},\n\t\"MetaNames\": {\n\t\t\"canonical\": [\n\t\t\t\"Meta Oculus\",\n\t\t\t\"Meta Portals\",\n\t\t\t\"Meta Quest\",\n\t\t\t\"Meta Gaming\",\n\t\t\t\"Meta Horizon\",\n\t\t\t\"Meta Reality Labs\"\n\t\t],\n\t\t\"description\": \"When referring to Meta products and services, make sure to treat them as proper nouns.\"\n\t},\n\t\"JetpackNames\": {\n\t\t\"canonical\": [\n\t\t\t\"Jetpack VaultPress Backup\",\n\t\t\t\"Jetpack VaultPress\",\n\t\t\t\"Jetpack Scan\",\n\t\t\t\"Jetpack Akismet Anti-spam\",\n\t\t\t\"Jetpack Stats\",\n\t\t\t\"Jetpack Social\",\n\t\t\t\"Jetpack Blaze\",\n\t\t\t\"Jetpack AI Assistant\",\n\t\t\t\"Jetpack Site Search\",\n\t\t\t\"Jetpack Boost\",\n\t\t\t\"Jetpack VideoPress\",\n\t\t\t\"Jetpack For Agencies\",\n\t\t\t\"Jetpack CRM\"\n\t\t],\n\t\t\"description\": \"Ensure proper capitalization of Jetpack-related terms.\"\n\t},\n\t\"TumblrNames\": {\n\t\t\"canonical\": [\n\t\t\t\"Tumblr Blaze\",\n\t\t\t\"Tumblr Pro\",\n\t\t\t\"Tumblr Live\",\n\t\t\t\"Tumblr Ads\",\n\t\t\t\"Tumblr Communities\",\n\t\t\t\"Tumblr Shop\",\n\t\t\t\"Tumblr Dashboard\"\n\t\t],\n\t\t\"description\": \"Ensure proper capitalization of Tumblr-related terms.\"\n\t},\n\t\"PocketCastsNames\": {\n\t\t\"canonical\": [\"Pocket Casts\", \"Pocket Casts Plus\"],\n\t\t\"description\": \"Ensure proper capitalization of Pocket Casts and Pocket Casts Plus as brand names.\"\n\t},\n\t\"DayOneNames\": {\n\t\t\"canonical\": [\"Day One\", \"Day One Premium\"],\n\t\t\"description\": \"Ensure proper capitalization of Day One and Day One Premium as brand names.\"\n\t},\n\t\"USUniversities\": {\n\t\t\"canonical\": [\n\t\t\t\"Harvard University\",\n\t\t\t\"Stanford University\",\n\t\t\t\"Massachusetts Institute of Technology\",\n\t\t\t\"California Institute of Technology\",\n\t\t\t\"Princeton University\",\n\t\t\t\"Yale University\",\n\t\t\t\"Columbia University\",\n\t\t\t\"University of Chicago\",\n\t\t\t\"University of Pennsylvania\",\n\t\t\t\"Johns Hopkins University\",\n\t\t\t\"Duke University\",\n\t\t\t\"Northwestern University\",\n\t\t\t\"University of California\",\n\t\t\t\"University of Michigan\",\n\t\t\t\"University of Virginia\",\n\t\t\t\"University of North Carolina\",\n\t\t\t\"University of Wisconsin\",\n\t\t\t\"University of Texas\",\n\t\t\t\"University of Florida\",\n\t\t\t\"University of Washington\",\n\t\t\t\"University of Southern California\",\n\t\t\t\"New York University\",\n\t\t\t\"Cornell University\",\n\t\t\t\"Brown University\",\n\t\t\t\"Dartmouth College\",\n\t\t\t\"Carnegie Mellon University\",\n\t\t\t\"Georgetown University\",\n\t\t\t\"Rice University\",\n\t\t\t\"Vanderbilt University\",\n\t\t\t\"Washington University\",\n\t\t\t\"Emory University\",\n\t\t\t\"University of Notre Dame\",\n\t\t\t\"Boston University\",\n\t\t\t\"Boston College\",\n\t\t\t\"University of Miami\",\n\t\t\t\"University of Illinois\",\n\t\t\t\"Ohio State University\",\n\t\t\t\"Pennsylvania State University\",\n\t\t\t\"Purdue University\",\n\t\t\t\"Texas A&M University\",\n\t\t\t\"Georgia Institute of Technology\",\n\t\t\t\"University of Minnesota\",\n\t\t\t\"Michigan State University\",\n\t\t\t\"Indiana University\",\n\t\t\t\"University of Colorado\",\n\t\t\t\"University of Arizona\",\n\t\t\t\"University of Pittsburgh\",\n\t\t\t\"University of Maryland\",\n\t\t\t\"Rutgers University\",\n\t\t\t\"University of Rochester\",\n\t\t\t\"University of Connecticut\",\n\t\t\t\"University of Georgia\",\n\t\t\t\"University of Iowa\",\n\t\t\t\"University of Kansas\",\n\t\t\t\"University of Kentucky\",\n\t\t\t\"University of Missouri\",\n\t\t\t\"University of Nebraska\",\n\t\t\t\"University of Tennessee\",\n\t\t\t\"University of Utah\",\n\t\t\t\"University of Oklahoma\",\n\t\t\t\"University of Oregon\",\n\t\t\t\"University of South Carolina\",\n\t\t\t\"University of Alabama\",\n\t\t\t\"University of Central Florida\",\n\t\t\t\"University of Houston\",\n\t\t\t\"University of Delaware\",\n\t\t\t\"University of Mississippi\",\n\t\t\t\"University of Arkansas\",\n\t\t\t\"Florida State University\",\n\t\t\t\"Arizona State University\",\n\t\t\t\"Colorado State University\",\n\t\t\t\"North Carolina State University\",\n\t\t\t\"Iowa State University\",\n\t\t\t\"Kansas State University\",\n\t\t\t\"Louisiana State University\",\n\t\t\t\"Oregon State University\",\n\t\t\t\"South Carolina State University\",\n\t\t\t\"Virginia Tech\",\n\t\t\t\"Auburn University\",\n\t\t\t\"Temple University\",\n\t\t\t\"University of Massachusetts\",\n\t\t\t\"Baylor University\",\n\t\t\t\"Southern Methodist University\",\n\t\t\t\"Wake Forest University\",\n\t\t\t\"George Washington University\",\n\t\t\t\"American University\",\n\t\t\t\"Villanova University\",\n\t\t\t\"Marquette University\",\n\t\t\t\"Pepperdine University\",\n\t\t\t\"Loyola Marymount University\",\n\t\t\t\"Santa Clara University\",\n\t\t\t\"Fordham University\",\n\t\t\t\"DePaul University\",\n\t\t\t\"Syracuse University\",\n\t\t\t\"Rensselaer Polytechnic Institute\",\n\t\t\t\"Stevens Institute of Technology\",\n\t\t\t\"Illinois Institute of Technology\",\n\t\t\t\"Clark University\",\n\t\t\t\"Tufts University\",\n\t\t\t\"Brandeis University\",\n\t\t\t\"Case Western Reserve University\",\n\t\t\t\"Drexel University\",\n\t\t\t\"Lehigh University\",\n\t\t\t\"Howard University\",\n\t\t\t\"Spelman College\",\n\t\t\t\"Morehouse College\",\n\t\t\t\"Hampton University\",\n\t\t\t\"Xavier University of Louisiana\",\n\t\t\t\"Tuskegee University\",\n\t\t\t\"Florida A&M University\",\n\t\t\t\"Colorado School of Mines\"\n\t\t],\n\t\t\"description\": \"Ensure proper capitalization of major universities in the United States.\"\n\t},\n\t\"NotablePlaces\": {\n\t\t\"canonical\": [\n\t\t\t\"Big Sur\",\n\t\t\t\"Bretton Woods\",\n\t\t\t\"Coney Island\",\n\t\t\t\"Darien Gap\",\n\t\t\t\"Des Moines\",\n\t\t\t\"El Paso\",\n\t\t\t\"Hong Kong\",\n\t\t\t\"Las Palmas\",\n\t\t\t\"Las Vegas\",\n\t\t\t\"Los Angeles\",\n\t\t\t\"New York\",\n\t\t\t\"New York City\",\n\t\t\t\"Niagara Falls\",\n\t\t\t\"Novi Sad\",\n\t\t\t\"Panama Canal\",\n\t\t\t\"Rio de Janeiro\",\n\t\t\t\"San Francisco\"\n\t\t],\n\t\t\"description\": \"Ensure proper capitalization of notable places that are significant regional centers, travel destinations, or have international importance.\"\n\t},\n\t\"ProperNouns\": {\n\t\t\"canonical\": [\"Bhagavad Gita\", \"Gilded Age\", \"Pax Americana\"],\n\t\t\"description\": \"Ensure proper capitalization of proper nouns.\"\n\t},\n\t\"CompaniesProductsAndTrademarks\": {\n\t\t\"canonical\": [\"Stack Exchange\", \"Stack Overflow\"],\n\t\t\"description\": \"Ensure proper capitalization of companies, products, and trademarks.\"\n\t}\n}\n"
  },
  {
    "path": "harper-core/src/case.rs",
    "content": "use std::borrow::Borrow;\n\nuse smallvec::SmallVec;\n\nuse crate::{CharString, char_string::CHAR_STRING_INLINE_SIZE};\n\n/// Apply the casing of `template` to `target`.\n///\n/// If `template` is shorter than `target`, the casing of the last character of `template` will be reused for\n/// the rest of the string.\n///\n/// If `template` is empty, all characters will be lowercased.\n#[must_use]\npub fn copy_casing(\n    template: impl IntoIterator<Item = impl Borrow<char>>,\n    target: impl IntoIterator<Item = impl Borrow<char>>,\n) -> CharString {\n    target\n        .into_iter()\n        .scan(\n            (template.into_iter().get_casing(), Case::Lower),\n            |(template, prev_case), c| {\n                // Skip non-alphabetic characters in `target` without advancing `template`.\n                if c.borrow().is_alphabetic()\n                    && let Some(template_case) = template.next()\n                {\n                    *prev_case = template_case;\n                };\n                Some(prev_case.apply_to(*c.borrow()))\n            },\n        )\n        .flatten()\n        .collect()\n}\n\n/// Represents the casing of a character.\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum Case {\n    Upper,\n    Lower,\n}\n\nimpl Case {\n    /// Apply the casing to a provided character.\n    ///\n    /// This essentially calls [`char::to_uppercase()`] or [`char::to_lowercase()`] depending on\n    /// the state of `self`. Similarly to those functions, it returns an iterator of the resulting\n    /// character(s).\n    pub fn apply_to(&self, char: char) -> impl Iterator<Item = char> + use<> {\n        match self {\n            Self::Upper => char.to_uppercase().collect::<SmallVec<[char; 2]>>(),\n            Self::Lower => char.to_lowercase().collect::<SmallVec<[char; 2]>>(),\n        }\n        .into_iter()\n    }\n}\n\nimpl TryFrom<char> for Case {\n    type Error = ();\n\n    /// Try to get the casing from the given character.\n    ///\n    /// This fails if the character is neither uppercase nor lowercase.\n    fn try_from(value: char) -> Result<Self, Self::Error> {\n        if value.is_uppercase() {\n            Ok(Self::Upper)\n        } else if value.is_lowercase() {\n            Ok(Self::Lower)\n        } else {\n            Err(())\n        }\n    }\n}\n\n// TODO: maybe move this functionality to CharStringExt if and when CharStringExt can be\n// generalized to work with char iterators.\npub trait CaseIterExt {\n    fn get_casing(self) -> impl Iterator<Item = Case>;\n    fn get_casing_unfiltered(self) -> SmallVec<[Option<Case>; CHAR_STRING_INLINE_SIZE]>;\n}\nimpl<I: IntoIterator<Item = T>, T: Borrow<char>> CaseIterExt for I {\n    /// Get an iterator of [`Case`] from a collection of characters. Note that this will not\n    /// include cases for characters that are neither uppercase nor lowercase.\n    fn get_casing(self) -> impl Iterator<Item = Case> {\n        self.into_iter()\n            .filter_map(|char| (*char.borrow()).try_into().ok())\n    }\n\n    /// Get casing for the provided string. Unlike [`Self::get_casing`], the output will always\n    /// be the same length as the input string. If a character is neither uppercase nor lowercase,\n    /// its corresponding case will be `None`.\n    fn get_casing_unfiltered(self) -> SmallVec<[Option<Case>; CHAR_STRING_INLINE_SIZE]> {\n        self.into_iter()\n            .map(|c| Case::try_from(*c.borrow()).ok())\n            .collect()\n    }\n}\n"
  },
  {
    "path": "harper-core/src/char_ext.rs",
    "content": "use unicode_script::{Script, UnicodeScript};\nuse unicode_width::UnicodeWidthChar;\n\nuse crate::Punctuation;\n\nmod private {\n    pub trait Sealed {}\n\n    impl Sealed for char {}\n}\n\npub trait CharExt: private::Sealed {\n    fn is_cjk(&self) -> bool;\n    /// Whether a character can be a component of an English word.\n    fn is_english_lingual(&self) -> bool;\n    fn is_emoji(&self) -> bool;\n    fn is_punctuation(&self) -> bool;\n    /// Whether the character is an (English) vowel.\n    ///\n    /// Checks whether the character is in the set (A, E, I, O, U); case-insensitive.\n    fn is_vowel(&self) -> bool;\n    fn normalized(&self) -> Self;\n}\n\nimpl CharExt for char {\n    fn is_english_lingual(&self) -> bool {\n        !self.is_whitespace()\n            && !self.is_numeric()\n            && !self.is_emoji()\n            && matches!(self.width(), Some(1..))\n            && !self.is_punctuation()\n            && self.is_alphabetic()\n            && !self.is_cjk()\n            && self.script() == Script::Latin\n    }\n\n    fn normalized(&self) -> Self {\n        match self {\n            '\\u{2018}' | '\\u{2019}' | '\\u{02BC}' | '\\u{FF07}' => '\\'',\n            '\\u{201C}' | '\\u{201D}' | '\\u{FF02}' => '\"',\n            '\\u{2013}' | '\\u{2014}' | '\\u{2212}' | '\\u{FF0D}' => '-',\n            _ => *self,\n        }\n    }\n\n    fn is_emoji(&self) -> bool {\n        let Some(block) = unicode_blocks::find_unicode_block(*self) else {\n            return false;\n        };\n\n        let blocks = [\n            unicode_blocks::SPECIALS,\n            unicode_blocks::EMOTICONS,\n            unicode_blocks::MISCELLANEOUS_SYMBOLS,\n            unicode_blocks::VARIATION_SELECTORS,\n            unicode_blocks::SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS,\n        ];\n\n        blocks.contains(&block)\n    }\n\n    fn is_cjk(&self) -> bool {\n        let Some(block) = unicode_blocks::find_unicode_block(*self) else {\n            return false;\n        };\n\n        let blocks = [\n            unicode_blocks::CJK_UNIFIED_IDEOGRAPHS,\n            unicode_blocks::CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A,\n            unicode_blocks::CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B,\n            unicode_blocks::CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C,\n            unicode_blocks::CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D,\n            unicode_blocks::CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E,\n            unicode_blocks::CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F,\n            unicode_blocks::CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G,\n            unicode_blocks::CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H,\n            unicode_blocks::CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I,\n            unicode_blocks::HANGUL_JAMO,\n            unicode_blocks::HANGUL_SYLLABLES,\n            unicode_blocks::HANGUL_JAMO_EXTENDED_A,\n            unicode_blocks::HANGUL_JAMO_EXTENDED_B,\n            unicode_blocks::HANGUL_COMPATIBILITY_JAMO,\n            unicode_blocks::CJK_SYMBOLS_AND_PUNCTUATION,\n            unicode_blocks::CJK_STROKES,\n            unicode_blocks::CJK_COMPATIBILITY,\n            unicode_blocks::CJK_COMPATIBILITY_FORMS,\n            unicode_blocks::CJK_COMPATIBILITY_IDEOGRAPHS,\n            unicode_blocks::CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT,\n            unicode_blocks::CJK_RADICALS_SUPPLEMENT,\n            unicode_blocks::ENCLOSED_CJK_LETTERS_AND_MONTHS,\n            unicode_blocks::HIRAGANA,\n        ];\n\n        blocks.contains(&block)\n    }\n\n    fn is_punctuation(&self) -> bool {\n        Punctuation::from_char(*self).is_some()\n    }\n\n    fn is_vowel(&self) -> bool {\n        matches!(self.to_ascii_lowercase(), 'a' | 'e' | 'i' | 'o' | 'u')\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::CharExt;\n\n    #[test]\n    fn cjk_is_not_english_lingual() {\n        assert!(!'世'.is_english_lingual())\n    }\n}\n"
  },
  {
    "path": "harper-core/src/char_string.rs",
    "content": "use crate::char_ext::CharExt;\nuse std::borrow::Cow;\n\nuse smallvec::SmallVec;\n\n// TODO: remove this when `SmallVec` allows retrieving this value in a const context.\npub(crate) const CHAR_STRING_INLINE_SIZE: usize = 16;\n\n/// A char sequence that improves cache locality.\n/// Most English words are fewer than 12 characters.\npub type CharString = SmallVec<[char; CHAR_STRING_INLINE_SIZE]>;\n\nmod private {\n    pub trait Sealed {}\n\n    impl Sealed for [char] {}\n}\n\n/// Extensions to character sequences that make them easier to wrangle.\npub trait CharStringExt: private::Sealed {\n    /// Convert all characters to lowercase, returning a new owned vector if any changes were made.\n    fn to_lower(&'_ self) -> Cow<'_, [char]>;\n\n    /// Normalize the character sequence according to the dictionary's standard character set.\n    fn normalized(&'_ self) -> Cow<'_, [char]>;\n\n    /// Convert the character sequence to a String.\n    fn to_string(&self) -> String;\n\n    /// Case-insensitive comparison with a character slice, assuming the right-hand side is lowercase ASCII.\n    /// Only normalizes the left side to lowercase and avoids allocations.\n    fn eq_ignore_ascii_case_chars(&self, other: &[char]) -> bool;\n\n    /// Case-insensitive comparison with a string slice, assuming the right-hand side is lowercase ASCII.\n    /// Only normalizes the left side to lowercase and avoids allocations.\n    fn eq_ignore_ascii_case_str(&self, other: &str) -> bool;\n\n    /// Case-insensitive comparison with any of a list of string slices, assuming the right-hand side is lowercase ASCII.\n    /// Only normalizes the left side to lowercase and avoids allocations.\n    fn eq_any_ignore_ascii_case_str(&self, others: &[&str]) -> bool;\n\n    /// Case-insensitive comparison with any of a list of character slices, assuming the right-hand side is lowercase ASCII.\n    /// Only normalizes the left side to lowercase and avoids allocations.\n    fn eq_any_ignore_ascii_case_chars(&self, others: &[&[char]]) -> bool;\n\n    /// Case-insensitive check if the string starts with the given ASCII prefix.\n    /// The prefix is assumed to be lowercase.\n    fn starts_with_ignore_ascii_case_str(&self, prefix: &str) -> bool;\n\n    /// Case-insensitive check if the string starts with any of the given ASCII prefixes.\n    /// The prefixes are assumed to be lowercase.\n    fn starts_with_any_ignore_ascii_case_str(&self, prefixes: &[&str]) -> bool;\n\n    /// Case-insensitive check if the string ends with the given ASCII suffix.\n    /// The suffix is assumed to be lowercase.\n    fn ends_with_ignore_ascii_case_chars(&self, suffix: &[char]) -> bool;\n\n    /// Case-insensitive check if the string ends with the given ASCII suffix.\n    /// The suffix is assumed to be lowercase.\n    fn ends_with_ignore_ascii_case_str(&self, suffix: &str) -> bool;\n\n    /// Case-insensitive check if the string ends with any of the given ASCII suffixes.\n    /// The suffixes are assumed to be lowercase.\n    fn ends_with_any_ignore_ascii_case_chars(&self, suffixes: &[&[char]]) -> bool;\n\n    /// Check if the string contains any vowels\n    fn contains_vowel(&self) -> bool;\n}\n\nimpl CharStringExt for [char] {\n    fn to_lower(&'_ self) -> Cow<'_, [char]> {\n        if self.iter().all(|c| c.is_lowercase()) {\n            return Cow::Borrowed(self);\n        }\n\n        let mut out = CharString::with_capacity(self.len());\n\n        out.extend(self.iter().flat_map(|v| v.to_lowercase()));\n\n        Cow::Owned(out.to_vec())\n    }\n\n    fn to_string(&self) -> String {\n        self.iter().collect()\n    }\n\n    /// Convert a given character sequence to the standard character set\n    /// the dictionary is in.\n    fn normalized(&'_ self) -> Cow<'_, [char]> {\n        if self.as_ref().iter().any(|c| c.normalized() != *c) {\n            Cow::Owned(\n                self.as_ref()\n                    .iter()\n                    .copied()\n                    .map(|c| c.normalized())\n                    .collect(),\n            )\n        } else {\n            Cow::Borrowed(self)\n        }\n    }\n\n    fn eq_ignore_ascii_case_str(&self, other: &str) -> bool {\n        let mut chit = self.iter();\n        let mut strit = other.chars();\n\n        loop {\n            let (c, s) = (chit.next(), strit.next());\n            match (c, s) {\n                (Some(c), Some(s)) => {\n                    if c.to_ascii_lowercase() != s {\n                        return false;\n                    }\n                }\n                (None, None) => return true,\n                _ => return false,\n            }\n        }\n    }\n\n    fn eq_ignore_ascii_case_chars(&self, other: &[char]) -> bool {\n        self.len() == other.len()\n            && self\n                .iter()\n                .zip(other.iter())\n                .all(|(a, b)| a.to_ascii_lowercase() == *b)\n    }\n\n    fn eq_any_ignore_ascii_case_str(&self, others: &[&str]) -> bool {\n        others.iter().any(|str| self.eq_ignore_ascii_case_str(str))\n    }\n\n    fn eq_any_ignore_ascii_case_chars(&self, others: &[&[char]]) -> bool {\n        others\n            .iter()\n            .any(|chars| self.eq_ignore_ascii_case_chars(chars))\n    }\n\n    fn starts_with_ignore_ascii_case_str(&self, prefix: &str) -> bool {\n        let prefix_len = prefix.chars().count();\n        if self.len() < prefix_len {\n            return false;\n        }\n        self.iter()\n            .take(prefix_len)\n            .zip(prefix.chars())\n            .all(|(a, b)| a.to_ascii_lowercase() == b)\n    }\n\n    fn starts_with_any_ignore_ascii_case_str(&self, prefixes: &[&str]) -> bool {\n        prefixes\n            .iter()\n            .any(|prefix| self.starts_with_ignore_ascii_case_str(prefix))\n    }\n\n    fn ends_with_ignore_ascii_case_str(&self, suffix: &str) -> bool {\n        let suffix_len = suffix.chars().count();\n        if self.len() < suffix_len {\n            return false;\n        }\n        self.iter()\n            .rev()\n            .take(suffix_len)\n            .rev()\n            .zip(suffix.chars())\n            .all(|(a, b)| a.to_ascii_lowercase() == b)\n    }\n\n    fn ends_with_ignore_ascii_case_chars(&self, suffix: &[char]) -> bool {\n        let suffix_len = suffix.len();\n        if self.len() < suffix_len {\n            return false;\n        }\n        self.iter()\n            .rev()\n            .take(suffix_len)\n            .rev()\n            .zip(suffix.iter())\n            .all(|(a, b)| a.to_ascii_lowercase() == *b)\n    }\n\n    fn ends_with_any_ignore_ascii_case_chars(&self, suffixes: &[&[char]]) -> bool {\n        suffixes\n            .iter()\n            .any(|suffix| self.ends_with_ignore_ascii_case_chars(suffix))\n    }\n\n    fn contains_vowel(&self) -> bool {\n        self.iter().any(|c| c.is_vowel())\n    }\n}\n\nmacro_rules! char_string {\n    ($string:literal) => {{\n        use crate::char_string::CharString;\n\n        $string.chars().collect::<CharString>()\n    }};\n}\n\npub(crate) use char_string;\n\n#[cfg(test)]\nmod tests {\n    use super::CharStringExt;\n\n    #[test]\n    fn eq_ignore_ascii_case_chars_matches_lowercase() {\n        assert!(['H', 'e', 'l', 'l', 'o'].eq_ignore_ascii_case_chars(&['h', 'e', 'l', 'l', 'o']));\n    }\n\n    #[test]\n    fn eq_ignore_ascii_case_chars_does_not_match_different_word() {\n        assert!(!['H', 'e', 'l', 'l', 'o'].eq_ignore_ascii_case_chars(&['w', 'o', 'r', 'l', 'd']));\n    }\n\n    #[test]\n    fn eq_ignore_ascii_case_str_matches_lowercase() {\n        assert!(['H', 'e', 'l', 'l', 'o'].eq_ignore_ascii_case_str(\"hello\"));\n    }\n\n    #[test]\n    fn eq_ignore_ascii_case_str_does_not_match_different_word() {\n        assert!(!['H', 'e', 'l', 'l', 'o'].eq_ignore_ascii_case_str(\"world\"));\n    }\n\n    #[test]\n    fn ends_with_ignore_ascii_case_chars_matches_suffix() {\n        assert!(['H', 'e', 'l', 'l', 'o'].ends_with_ignore_ascii_case_chars(&['l', 'o']));\n    }\n\n    #[test]\n    fn ends_with_ignore_ascii_case_chars_does_not_match_different_suffix() {\n        assert!(\n            !['H', 'e', 'l', 'l', 'o']\n                .ends_with_ignore_ascii_case_chars(&['w', 'o', 'r', 'l', 'd'])\n        );\n    }\n\n    #[test]\n    fn ends_with_ignore_ascii_case_str_matches_suffix() {\n        assert!(['H', 'e', 'l', 'l', 'o'].ends_with_ignore_ascii_case_str(\"lo\"));\n    }\n\n    #[test]\n    fn ends_with_ignore_ascii_case_str_does_not_match_different_suffix() {\n        assert!(!['H', 'e', 'l', 'l', 'o'].ends_with_ignore_ascii_case_str(\"world\"));\n    }\n\n    #[test]\n    fn differs_only_by_length_1() {\n        assert!(!['b', 'b'].eq_ignore_ascii_case_str(\"b\"));\n    }\n\n    #[test]\n    fn differs_only_by_length_2() {\n        assert!(!['c'].eq_ignore_ascii_case_str(\"cc\"));\n    }\n}\n"
  },
  {
    "path": "harper-core/src/currency.rs",
    "content": "use is_macro::Is;\nuse serde::{Deserialize, Serialize};\n\nuse crate::Number;\n\n/// A national or international currency\n#[derive(Debug, Is, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Hash)]\npub enum Currency {\n    // $\n    Dollar,\n    // ¢\n    Cent,\n    // €\n    Euro,\n    // ₽\n    Ruble,\n    // ₺\n    Lira,\n    // £\n    Pound,\n    // ¥\n    Yen,\n    // ฿\n    Baht,\n    // ₩\n    Won,\n    // ₭,\n    Kip,\n    // ₹\n    Rupee,\n}\n\nimpl Currency {\n    pub fn from_char(c: char) -> Option<Self> {\n        let cur = match c {\n            '$' => Self::Dollar,\n            '¢' => Self::Cent,\n            '€' => Self::Euro,\n            '₽' => Self::Ruble,\n            '₺' => Self::Lira,\n            '£' => Self::Pound,\n            '¥' => Self::Yen,\n            '฿' => Self::Baht,\n            '₩' => Self::Won,\n            '₭' => Self::Kip,\n            '₹' => Self::Rupee,\n            _ => return None,\n        };\n\n        Some(cur)\n    }\n\n    pub fn to_char(&self) -> char {\n        match self {\n            Self::Dollar => '$',\n            Self::Cent => '¢',\n            Self::Euro => '€',\n            Self::Ruble => '₽',\n            Self::Lira => '₺',\n            Self::Pound => '£',\n            Self::Yen => '¥',\n            Self::Baht => '฿',\n            Self::Won => '₩',\n            Self::Kip => '₭',\n            Self::Rupee => '₹',\n        }\n    }\n\n    /// Format an amount of the specific currency.\n    pub fn format_amount(&self, amount: &Number) -> String {\n        let c = self.to_char();\n\n        let amount = amount.to_string();\n\n        match self {\n            Currency::Dollar => format!(\"{c}{amount}\"),\n            Currency::Cent => format!(\"{amount}{c}\"),\n            Currency::Euro => format!(\"{c}{amount}\"),\n            Currency::Ruble => format!(\"{amount} {c}\"),\n            Currency::Lira => format!(\"{amount} {c}\"),\n            Currency::Pound => format!(\"{c}{amount}\"),\n            Currency::Yen => format!(\"{c} {amount}\"),\n            Currency::Baht => format!(\"{amount} {c}\"),\n            Currency::Won => format!(\"{c} {amount}\"),\n            Currency::Kip => format!(\"{c}{amount}\"),\n            Currency::Rupee => format!(\"{c}{amount}\"),\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/dict_word_metadata.rs",
    "content": "use harper_brill::UPOS;\nuse is_macro::Is;\nuse itertools::Itertools;\nuse paste::paste;\nuse serde::{Deserialize, Serialize};\nuse smallvec::SmallVec;\nuse strum::{EnumCount as _, VariantArray as _};\nuse strum_macros::{Display, EnumCount, EnumIter, EnumString, VariantArray};\n\nuse std::convert::TryFrom;\n\nuse crate::dict_word_metadata_orthography::OrthFlags;\nuse crate::spell::WordId;\nuse crate::{Document, TokenKind, TokenStringExt};\n\n/// This represents a \"lexeme\" or \"headword\" which is case-folded but affix-expanded.\n/// So not only lemmata but also inflected forms are stored here, with \"horn\" and \"horns\" each\n/// having their own lexeme, but \"Ivy\" and \"ivy\" sharing the same lexeme.\n#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, PartialOrd, Hash)]\npub struct DictWordMetadata {\n    /// The main parts of speech which have extra data.\n    pub noun: Option<NounData>,\n    pub pronoun: Option<PronounData>,\n    pub verb: Option<VerbData>,\n    pub adjective: Option<AdjectiveData>,\n    pub adverb: Option<AdverbData>,\n    pub conjunction: Option<ConjunctionData>,\n    pub determiner: Option<DeterminerData>,\n    pub affix: Option<AffixData>,\n    /// Parts of speech which don't have extra data.\n    /// Whether the word is a [preposition](https://www.merriam-webster.com/dictionary/preposition).\n    #[serde(default = \"default_false\")]\n    pub preposition: bool,\n    /// Whether the word is an offensive word.\n    pub swear: Option<bool>,\n    /// The dialects this word belongs to.\n    /// If no dialects are defined, it can be assumed that the word is\n    /// valid in all dialects of English.\n    #[serde(default = \"default_default\")]\n    pub dialects: DialectFlags,\n    /// Orthographic information: letter case, spaces, hyphens, etc.\n    #[serde(default = \"OrthFlags::empty\")]\n    pub orth_info: OrthFlags,\n    /// Whether the word is considered especially common.\n    #[serde(default = \"default_false\")]\n    pub common: bool,\n    #[serde(default = \"default_none\")]\n    pub derived_from: Option<WordId>,\n    /// Generated by a chunker. Declares whether the word is a member of a nominal phrase. Using\n    /// this should be preferred over the similarly named `Pattern`.\n    ///\n    /// For more details, see [the announcement blog post](https://elijahpotter.dev/articles/training_a_chunker_with_burn).\n    pub np_member: Option<bool>,\n    /// Generated by a POS tagger. Declares what it inferred the word's part of speech to be.\n    pub pos_tag: Option<UPOS>,\n}\n\n/// Needed for `serde`\nfn default_false() -> bool {\n    false\n}\n\n/// Needed for `serde`\nfn default_none<T>() -> Option<T> {\n    None\n}\n\n/// Needed for `serde`\nfn default_default<T: Default>() -> T {\n    T::default()\n}\n\nmacro_rules! generate_metadata_queries {\n    ($($category:ident has $($sub:ident),*).*) => {\n        paste! {\n            pub fn is_likely_homograph(&self) -> bool {\n                [self.is_determiner(), self.preposition, $(\n                    self.[< is_ $category >](),\n                )*].iter().map(|b| *b as u8).sum::<u8>() > 1\n            }\n\n            /// How different is this word from another?\n            pub fn difference(&self, other: &Self) -> u32 {\n                [\n                    $(\n                        Self::[< is_ $category >],\n                        $(\n                            Self::[< is_ $sub _ $category >],\n                            Self::[< is_non_ $sub _ $category >],\n                        )*\n                    )*\n                ]\n                .iter()\n                .fold(0, |acc, func| acc + (func(self) ^ func(other)) as u32)\n            }\n\n            $(\n                #[doc = concat!(\"Checks if the word is definitely a \", stringify!($category), \".\")]\n                pub fn [< is_ $category >](&self) -> bool {\n                    self.$category.is_some()\n                }\n\n                $(\n                    #[doc = concat!(\"Checks if the word is definitely a \", stringify!($category), \" and more specifically is labeled as (a) \", stringify!($sub), \".\")]\n                    pub fn [< is_ $sub _ $category >](&self) -> bool {\n                        matches!(\n                            self.$category,\n                            Some([< $category:camel Data >]{\n                                [< is_ $sub >]: Some(true),\n                                ..\n                            })\n                        ) }\n\n                    #[doc = concat!(\"Checks if the word is definitely a \", stringify!($category), \" and more specifically is labeled as __not__ (a) \", stringify!($sub), \".\")]\n                    pub fn [< is_non_ $sub _ $category >](&self) -> bool {\n                        matches!(\n                            self.$category,\n                            Some([< $category:camel Data >]{\n                                [< is_ $sub >]: None | Some(false),\n                                ..\n                            })\n                        )\n                    }\n                )*\n            )*\n        }\n    };\n}\n\nimpl DictWordMetadata {\n    /// If there is only one possible interpretation of the metadata, infer its UPOS tag.\n    pub fn infer_pos_tag(&self) -> Option<UPOS> {\n        // If an explicit POS tag exists, return it immediately.\n        if let Some(pos) = self.pos_tag {\n            return Some(pos);\n        }\n\n        // Collect all possible POS tags from metadata\n        let mut candidates = SmallVec::<[UPOS; 14]>::with_capacity(14);\n\n        if self.is_proper_noun() {\n            candidates.push(UPOS::PROPN);\n        }\n\n        if self.is_pronoun() {\n            candidates.push(UPOS::PRON);\n        }\n        if self.is_noun() {\n            candidates.push(UPOS::NOUN);\n        }\n        if self.is_verb() {\n            // Distinguish auxiliary verbs\n            if let Some(data) = &self.verb {\n                if data.is_auxiliary == Some(true) {\n                    candidates.push(UPOS::AUX);\n                } else {\n                    candidates.push(UPOS::VERB);\n                }\n            } else {\n                candidates.push(UPOS::VERB);\n            }\n        }\n        if self.is_adjective() {\n            candidates.push(UPOS::ADJ);\n        }\n        if self.is_adverb() {\n            candidates.push(UPOS::ADV);\n        }\n        if self.is_conjunction() {\n            candidates.push(UPOS::CCONJ);\n        }\n        if self.is_determiner() {\n            candidates.push(UPOS::DET);\n        }\n        if self.preposition {\n            candidates.push(UPOS::ADP);\n        }\n\n        // Remove duplicates\n        candidates.sort();\n        candidates.dedup();\n\n        candidates.into_iter().exactly_one().ok()\n    }\n\n    /// Produce a copy of `self` with the known properties of `other` set.\n    pub fn or(&self, other: &Self) -> Self {\n        let mut clone = self.clone();\n        clone.merge(other);\n        clone\n    }\n\n    /// Given a UPOS tag, discard any metadata that would disagree with the given POS tag.\n    /// For example, if the metadata suggests a word could either be a noun or an adjective, and we\n    /// provide a [`UPOS::NOUN`], this function will remove the adjective data.\n    ///\n    /// Additionally, if the metadata does not currently declare the potential of the word to be\n    /// the specific POS, it becomes so. That means if we provide a [`UPOS::ADJ`] to the function\n    /// for a metadata whose `Self::adjective = None`, it will become `Some`.\n    pub fn enforce_pos_exclusivity(&mut self, pos: &UPOS) {\n        use UPOS::*;\n        match pos {\n            NOUN => {\n                if let Some(noun) = self.noun {\n                    self.noun = Some(NounData {\n                        is_proper: Some(false),\n                        ..noun\n                    })\n                } else {\n                    self.noun = Some(NounData {\n                        is_proper: Some(false),\n                        is_singular: None,\n                        is_plural: None,\n                        is_countable: None,\n                        is_mass: None,\n                        is_possessive: None,\n                    })\n                }\n\n                self.pronoun = None;\n                self.verb = None;\n                self.adjective = None;\n                self.adverb = None;\n                self.conjunction = None;\n                self.determiner = None;\n                self.affix = None;\n                self.preposition = false;\n            }\n            PROPN => {\n                if let Some(noun) = self.noun {\n                    self.noun = Some(NounData {\n                        is_proper: Some(true),\n                        ..noun\n                    })\n                } else {\n                    self.noun = Some(NounData {\n                        is_proper: Some(true),\n                        is_singular: None,\n                        is_plural: None,\n                        is_countable: None,\n                        is_mass: None,\n                        is_possessive: None,\n                    })\n                }\n\n                self.pronoun = None;\n                self.verb = None;\n                self.adjective = None;\n                self.adverb = None;\n                self.conjunction = None;\n                self.determiner = None;\n                self.affix = None;\n                self.preposition = false;\n            }\n            PRON => {\n                if self.pronoun.is_none() {\n                    self.pronoun = Some(PronounData::default())\n                }\n\n                self.noun = None;\n                self.verb = None;\n                self.adjective = None;\n                self.adverb = None;\n                self.conjunction = None;\n                self.determiner = None;\n                self.affix = None;\n                self.preposition = false;\n            }\n            VERB => {\n                if let Some(verb) = self.verb {\n                    self.verb = Some(VerbData {\n                        is_auxiliary: Some(false),\n                        ..verb\n                    })\n                } else {\n                    self.verb = Some(VerbData {\n                        is_auxiliary: Some(false),\n                        ..Default::default()\n                    })\n                }\n\n                self.noun = None;\n                self.pronoun = None;\n                self.adjective = None;\n                self.adverb = None;\n                self.conjunction = None;\n                self.determiner = None;\n                self.affix = None;\n                self.preposition = false;\n            }\n            AUX => {\n                if let Some(verb) = self.verb {\n                    self.verb = Some(VerbData {\n                        is_auxiliary: Some(true),\n                        ..verb\n                    })\n                } else {\n                    self.verb = Some(VerbData {\n                        is_auxiliary: Some(true),\n                        ..Default::default()\n                    })\n                }\n\n                self.noun = None;\n                self.pronoun = None;\n                self.adjective = None;\n                self.adverb = None;\n                self.conjunction = None;\n                self.determiner = None;\n                self.affix = None;\n                self.preposition = false;\n            }\n            ADJ => {\n                if self.adjective.is_none() {\n                    self.adjective = Some(AdjectiveData::default())\n                }\n\n                self.noun = None;\n                self.pronoun = None;\n                self.verb = None;\n                self.adverb = None;\n                self.conjunction = None;\n                self.determiner = None;\n                self.affix = None;\n                self.preposition = false;\n            }\n            ADV => {\n                if self.adverb.is_none() {\n                    self.adverb = Some(AdverbData::default())\n                }\n\n                self.noun = None;\n                self.pronoun = None;\n                self.verb = None;\n                self.adjective = None;\n                self.conjunction = None;\n                self.determiner = None;\n                self.affix = None;\n                self.preposition = false;\n            }\n            ADP => {\n                self.noun = None;\n                self.pronoun = None;\n                self.verb = None;\n                self.adjective = None;\n                self.adverb = None;\n                self.conjunction = None;\n                self.determiner = None;\n                self.affix = None;\n                self.preposition = true;\n            }\n            DET => {\n                self.noun = None;\n                self.pronoun = None;\n                self.verb = None;\n                self.adjective = None;\n                self.adverb = None;\n                self.conjunction = None;\n                self.affix = None;\n                self.preposition = false;\n                self.determiner = Some(DeterminerData::default());\n            }\n            CCONJ | SCONJ => {\n                if self.conjunction.is_none() {\n                    self.conjunction = Some(ConjunctionData::default())\n                }\n\n                self.noun = None;\n                self.pronoun = None;\n                self.verb = None;\n                self.adjective = None;\n                self.adverb = None;\n                self.determiner = None;\n                self.affix = None;\n                self.preposition = false;\n            }\n            _ => {}\n        }\n    }\n\n    generate_metadata_queries!(\n        // Singular and countable default to true, so their metadata queries are not generated.\n        noun has proper, plural, mass, possessive.\n        pronoun has personal, singular, plural, possessive, reflexive, subject, object.\n        determiner has demonstrative, possessive, quantifier.\n        verb has linking, auxiliary.\n        conjunction has.\n        adjective has.\n        adverb has manner, frequency, degree\n    );\n\n    // Manual metadata queries\n\n    // Pronoun metadata queries\n\n    pub fn get_person(&self) -> Option<Person> {\n        self.pronoun.as_ref().and_then(|p| p.person)\n    }\n\n    pub fn is_first_person_plural_pronoun(&self) -> bool {\n        matches!(\n            self.pronoun,\n            Some(PronounData {\n                person: Some(Person::First),\n                is_plural: Some(true),\n                ..\n            })\n        )\n    }\n\n    pub fn is_first_person_singular_pronoun(&self) -> bool {\n        matches!(\n            self.pronoun,\n            Some(PronounData {\n                person: Some(Person::First),\n                is_singular: Some(true),\n                ..\n            })\n        )\n    }\n\n    pub fn is_third_person_plural_pronoun(&self) -> bool {\n        matches!(\n            self.pronoun,\n            Some(PronounData {\n                person: Some(Person::Third),\n                is_plural: Some(true),\n                ..\n            })\n        )\n    }\n\n    pub fn is_third_person_singular_pronoun(&self) -> bool {\n        matches!(\n            self.pronoun,\n            Some(PronounData {\n                person: Some(Person::Third),\n                is_singular: Some(true),\n                ..\n            })\n        )\n    }\n\n    pub fn is_third_person_pronoun(&self) -> bool {\n        matches!(\n            self.pronoun,\n            Some(PronounData {\n                person: Some(Person::Third),\n                ..\n            })\n        )\n    }\n\n    pub fn is_second_person_pronoun(&self) -> bool {\n        matches!(\n            self.pronoun,\n            Some(PronounData {\n                person: Some(Person::Second),\n                ..\n            })\n        )\n    }\n\n    // Lemma is default if no verb form is specified in the dictionary\n    pub fn is_verb_lemma(&self) -> bool {\n        if let Some(verb) = self.verb {\n            if let Some(forms) = verb.verb_forms {\n                return forms.is_empty() || forms.contains(VerbFormFlags::LEMMA);\n            } else {\n                return true;\n            }\n        }\n        false\n    }\n\n    pub fn is_verb_past_form(&self) -> bool {\n        self.verb.is_some_and(|v| {\n            v.verb_forms\n                .is_some_and(|vf| vf.contains(VerbFormFlags::PAST))\n        })\n    }\n\n    pub fn is_verb_simple_past_form(&self) -> bool {\n        self.verb.is_some_and(|v| {\n            v.verb_forms\n                .is_some_and(|vf| vf.contains(VerbFormFlags::PRETERITE))\n        })\n    }\n\n    pub fn is_verb_past_participle_form(&self) -> bool {\n        self.verb.is_some_and(|v| {\n            v.verb_forms\n                .is_some_and(|vf| vf.contains(VerbFormFlags::PAST_PARTICIPLE))\n        })\n    }\n\n    pub fn is_verb_progressive_form(&self) -> bool {\n        self.verb.is_some_and(|v| {\n            v.verb_forms\n                .is_some_and(|vf| vf.contains(VerbFormFlags::PROGRESSIVE))\n        })\n    }\n\n    pub fn is_verb_third_person_singular_present_form(&self) -> bool {\n        self.verb.is_some_and(|v| {\n            v.verb_forms\n                .is_some_and(|vf| vf.contains(VerbFormFlags::THIRD_PERSON_SINGULAR))\n        })\n    }\n\n    // Noun metadata queries\n\n    // Singular is default if number is not marked in the dictionary.\n    pub fn is_singular_noun(&self) -> bool {\n        if let Some(noun) = self.noun {\n            matches!(\n                (noun.is_singular, noun.is_plural),\n                (Some(true), _) | (None | Some(false), None | Some(false))\n            )\n        } else {\n            false\n        }\n    }\n    pub fn is_non_singular_noun(&self) -> bool {\n        if let Some(noun) = self.noun {\n            !matches!(\n                (noun.is_singular, noun.is_plural),\n                (Some(true), _) | (None | Some(false), None | Some(false))\n            )\n        } else {\n            false\n        }\n    }\n\n    // Countable is default if countability is not marked in the dictionary.\n    pub fn is_countable_noun(&self) -> bool {\n        if let Some(noun) = self.noun {\n            matches!(\n                (noun.is_countable, noun.is_mass),\n                (Some(true), _) | (None | Some(false), None | Some(false))\n            )\n        } else {\n            false\n        }\n    }\n    pub fn is_non_countable_noun(&self) -> bool {\n        if let Some(noun) = self.noun {\n            !matches!(\n                (noun.is_countable, noun.is_mass),\n                (Some(true), _) | (None | Some(false), None | Some(false))\n            )\n        } else {\n            false\n        }\n    }\n\n    // Most mass nouns also have countable senses. Match those that are only mass nouns.\n    pub fn is_mass_noun_only(&self) -> bool {\n        if let Some(noun) = self.noun {\n            matches!(\n                (noun.is_countable, noun.is_mass),\n                (None | Some(false), Some(true))\n            )\n        } else {\n            false\n        }\n    }\n\n    // Nominal metadata queries (noun + pronoun)\n\n    /// Checks if the word is definitely nominal.\n    pub fn is_nominal(&self) -> bool {\n        self.is_noun() || self.is_pronoun()\n    }\n\n    /// Checks if the word is definitely a nominal and more specifically is labeled as (a) singular.\n    pub fn is_singular_nominal(&self) -> bool {\n        self.is_singular_noun() || self.is_singular_pronoun()\n    }\n\n    /// Checks if the word is definitely a nominal and more specifically is labeled as (a) plural.\n    pub fn is_plural_nominal(&self) -> bool {\n        self.is_plural_noun() || self.is_plural_pronoun()\n    }\n\n    /// Checks if the word is definitely a nominal and more specifically is labeled as (a) possessive.\n    /// NOTE: `possessive pronoun`s are not qualifiers, but words like `mine`, `yours`, etc.\n    /// The terminology of `possessive noun`, `possessive pronoun` and `possessive determiner` only\n    /// tends to reinforce this confusion.\n    pub fn is_possessive_nominal(&self) -> bool {\n        self.is_possessive_noun() || self.is_possessive_determiner()\n    }\n\n    /// Checks if the word is definitely a nominal and more specifically is labeled as __not__ (a) singular.\n    pub fn is_non_singular_nominal(&self) -> bool {\n        self.is_non_singular_noun() || self.is_non_singular_pronoun()\n    }\n\n    /// Checks if the word is definitely a nominal and more specifically is labeled as __not__ (a) plural.\n    pub fn is_non_plural_nominal(&self) -> bool {\n        self.is_non_plural_noun() || self.is_non_plural_pronoun()\n    }\n\n    // Adjective metadata queries\n\n    pub fn get_degree(&self) -> Option<Degree> {\n        self.adjective.as_ref().and_then(|a| a.degree)\n    }\n\n    pub fn is_comparative_adjective(&self) -> bool {\n        matches!(\n            self.adjective,\n            Some(AdjectiveData {\n                degree: Some(Degree::Comparative)\n            })\n        )\n    }\n\n    pub fn is_superlative_adjective(&self) -> bool {\n        matches!(\n            self.adjective,\n            Some(AdjectiveData {\n                degree: Some(Degree::Superlative)\n            })\n        )\n    }\n\n    // Degree::Positive is the default if degree is not marked in the dictionary.\n    pub fn is_positive_adjective(&self) -> bool {\n        match self.adjective {\n            Some(AdjectiveData {\n                degree: Some(Degree::Positive),\n            }) => true,\n            Some(AdjectiveData { degree: None }) => true,\n            Some(AdjectiveData {\n                degree: Some(degree),\n            }) => !matches!(degree, Degree::Comparative | Degree::Superlative),\n            _ => false,\n        }\n    }\n\n    // Determiner metadata queries\n\n    // Checks if the word is definitely a determiner and more specifically is labeled as (a) quantifier.\n    pub fn is_quantifier(&self) -> bool {\n        self.is_quantifier_determiner()\n    }\n\n    // Non-POS queries\n\n    /// Checks whether a word is _definitely_ a swear.\n    pub fn is_swear(&self) -> bool {\n        matches!(self.swear, Some(true))\n    }\n\n    // Orthographic queries\n\n    /// Does the metadata for this word cover an all-lowercase variant? (e.g., \"hello\")\n    ///\n    /// This returns true if all letters in the word are lowercase. Words containing\n    /// non-letter characters (like numbers or symbols) are only considered if all\n    /// letter characters are lowercase.\n    pub fn is_lowercase(&self) -> bool {\n        self.orth_info.contains(OrthFlags::LOWERCASE)\n    }\n    /// Does the metadata for this word cover a titlecase variant? (e.g., \"Hello\")\n    ///\n    /// This returns true if the word is in titlecase form, which means:\n    /// - The first letter is uppercase\n    /// - All other letters are lowercase\n    /// - The word is at least 2 characters long\n    ///\n    /// Examples: \"Hello\", \"World\"\n    ///\n    /// Note: Words with internal capital letters (like \"McDonald\") or apostrophes (like \"O'Reilly\")\n    /// are not considered titlecase - they are classified as UPPER_CAMEL instead.\n    pub fn is_titlecase(&self) -> bool {\n        self.orth_info.contains(OrthFlags::TITLECASE)\n    }\n    /// Does the metadata for this word cover an all-uppercase variant? (e.g., \"HELLO\")\n    ///\n    /// This returns true if all letters in the word are uppercase. Words containing\n    /// non-letter characters (like numbers or symbols) are only considered if all\n    /// letter characters are uppercase.\n    ///\n    /// Examples: \"HELLO\", \"NASA\", \"I\"\n    pub fn is_allcaps(&self) -> bool {\n        self.orth_info.contains(OrthFlags::ALLCAPS)\n    }\n    /// Does the metadata for this word cover a lower camel case variant? (e.g., \"helloWorld\")\n    ///\n    /// This returns true if the word is in lower camel case, which means:\n    /// - The first letter is lowercase\n    /// - There is at least one uppercase letter after the first character\n    /// - The word must be at least 2 characters long\n    ///\n    /// Examples: \"helloWorld\", \"getHTTPResponse\", \"eBay\"\n    ///\n    /// Note: Single words that are all lowercase will return false.\n    /// Words starting with an uppercase letter will return false (those would be UpperCamel).\n    pub fn is_lower_camel(&self) -> bool {\n        self.orth_info.contains(OrthFlags::LOWER_CAMEL)\n    }\n    /// Does the metadata for this word cover an upper camel case / pascal case variant? (e.g., \"HelloWorld\")\n    ///\n    /// This returns true if the word is in upper camel case (also known as Pascal case), which means:\n    /// - The first letter is uppercase\n    /// - There is at least one other uppercase letter after the first character\n    /// - There is at least one lowercase letter after the first uppercase letter\n    /// - The word must be at least 3 characters long\n    ///\n    /// Examples:\n    /// - \"HelloWorld\" (standard Pascal case)\n    /// - \"McDonald\" (name with internal caps)\n    /// - \"O'Reilly\" (name with apostrophe and internal caps)\n    /// - \"HttpRequest\" (initialism followed by word)\n    ///\n    /// Note: Single words that are titlecase (like \"Hello\") will return false.\n    /// Words that are all uppercase (like \"NASA\") will also return false.\n    pub fn is_upper_camel(&self) -> bool {\n        self.orth_info.contains(OrthFlags::UPPER_CAMEL)\n    }\n\n    /// Does the metadata for this word cover an apostrophized variant? (e.g., \"doesn't\")\n    pub fn is_apostrophized(&self) -> bool {\n        self.orth_info.contains(OrthFlags::APOSTROPHE)\n    }\n\n    pub fn is_roman_numerals(&self) -> bool {\n        self.orth_info.contains(OrthFlags::ROMAN_NUMERALS)\n    }\n\n    /// Same thing as [`Self::or`], except in-place rather than a clone.\n    pub fn merge(&mut self, other: &Self) -> &mut Self {\n        macro_rules! merge {\n            ($a:expr, $b:expr) => {\n                match ($a, $b) {\n                    (Some(a), Some(b)) => Some(a.or(&b)),\n                    (Some(a), None) => Some(a),\n                    (None, Some(b)) => Some(b),\n                    (None, None) => None,\n                }\n            };\n        }\n\n        self.noun = merge!(self.noun, other.noun);\n        self.pronoun = merge!(self.pronoun, other.pronoun);\n        self.verb = merge!(self.verb, other.verb);\n        self.adjective = merge!(self.adjective, other.adjective);\n        self.adverb = merge!(self.adverb, other.adverb);\n        self.conjunction = merge!(self.conjunction, other.conjunction);\n        self.determiner = merge!(self.determiner, other.determiner);\n        self.affix = merge!(self.affix, other.affix);\n        self.preposition |= other.preposition;\n        self.dialects |= other.dialects;\n        self.orth_info |= other.orth_info;\n        self.swear = self.swear.or(other.swear);\n        self.common |= other.common;\n        self.derived_from = self.derived_from.or(other.derived_from);\n        self.pos_tag = self.pos_tag.or(other.pos_tag);\n        self.np_member = self.np_member.or(other.np_member);\n\n        self\n    }\n}\n\n// These verb forms are morphological variations, distinct from TAM (Tense-Aspect-Mood)\n// Each form can be used in various TAM combinations:\n// - Lemma form (infinitive, citation form, dictionary form)\n//   Used in infinitives (e.g., \"to sleep\"), imperatives (e.g., \"sleep!\"), and with modals (e.g., \"will sleep\")\n// - Past form (past participle and simple past)\n//   Used as verbs (e.g., \"slept\") or adjectives (e.g., \"closed door\")\n// - Progressive form (present participle and gerund)\n//   Used as verbs (e.g., \"sleeping\"), nouns (e.g., \"sleeping is important\"), or adjectives (e.g., \"sleeping dog\")\n// - Third person singular present (-s/-es)\n//   Used for third person singular subjects (e.g., \"he sleeps\", \"she reads\")\n//\n// Important notes:\n// 1. English expresses time through auxiliary verbs, not verb form alone\n// 2. Irregular verbs can have different forms for past participle and simple past\n// 3. Future is always expressed through auxiliary verbs (e.g., \"will sleep\", \"going to sleep\")\n#[repr(u32)]\npub enum VerbForm {\n    /// The uninflected verb form: \"walk\", \"eat\"\n    LemmaForm = 1 << 0,\n    /// The past form for regular verbs: \"walked\"\n    PastForm = 1 << 1,\n    /// The simple past/preterite form for irregular verbs: \"ate\"\n    SimplePastForm = 1 << 2,\n    /// The past participle form for irregular verbs: \"eaten\"\n    PastParticipleForm = 1 << 3,\n    /// The progressive/continuous/gerund/present participle form: \"walking\", \"eating\"\n    ProgressiveForm = 1 << 4,\n    /// The third person singular present form: \"walks\", \"eats\"\n    ThirdPersonSingularPresentForm = 1 << 5,\n}\n\n/// The underlying type used for verb form flags.\npub type VerbFormFlagsUnderlyingType = u32;\n\nbitflags::bitflags! {\n    /// A collection of bit flags used to represent verb forms.\n    ///\n    /// This allows a word to be tagged with multiple verb forms when applicable.\n    #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, PartialOrd, Eq, Hash, Default)]\n    #[serde(transparent)]\n    pub struct VerbFormFlags: VerbFormFlagsUnderlyingType {\n        const LEMMA = VerbForm::LemmaForm as VerbFormFlagsUnderlyingType;\n        const PAST = VerbForm::PastForm as VerbFormFlagsUnderlyingType;\n        const PRETERITE = VerbForm::SimplePastForm as VerbFormFlagsUnderlyingType;\n        const PAST_PARTICIPLE = VerbForm::PastParticipleForm as VerbFormFlagsUnderlyingType;\n        const PROGRESSIVE = VerbForm::ProgressiveForm as VerbFormFlagsUnderlyingType;\n        const THIRD_PERSON_SINGULAR = VerbForm::ThirdPersonSingularPresentForm as VerbFormFlagsUnderlyingType;\n    }\n}\n\n#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, PartialOrd, Eq, Hash, Default)]\npub struct VerbData {\n    pub is_linking: Option<bool>,\n    pub is_auxiliary: Option<bool>,\n    #[serde(rename = \"verb_form\", default)]\n    pub verb_forms: Option<VerbFormFlags>,\n}\n\nimpl VerbData {\n    /// Produce a copy of `self` with the known properties of `other` set.\n    pub fn or(&self, other: &Self) -> Self {\n        let verb_forms = match (self.verb_forms, other.verb_forms) {\n            (Some(self_verb_forms), Some(other_verb_forms)) => {\n                Some(self_verb_forms | other_verb_forms)\n            }\n            (Some(self_verb_forms), None) => Some(self_verb_forms),\n            (None, Some(other_verb_forms)) => Some(other_verb_forms),\n            (None, None) => None,\n        };\n\n        Self {\n            is_linking: self.is_linking.or(other.is_linking),\n            is_auxiliary: self.is_auxiliary.or(other.is_auxiliary),\n            verb_forms,\n        }\n    }\n}\n\n// nouns can be both singular and plural: \"aircraft\", \"biceps\", \"fish\", \"sheep\"\n// TODO other noun properties may be worth adding: abstract\n#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, PartialOrd, Eq, Hash, Default)]\npub struct NounData {\n    pub is_proper: Option<bool>,\n    pub is_singular: Option<bool>,\n    pub is_plural: Option<bool>,\n    pub is_countable: Option<bool>,\n    pub is_mass: Option<bool>,\n    pub is_possessive: Option<bool>,\n}\n\nimpl NounData {\n    /// Produce a copy of `self` with the known properties of `other` set.\n    pub fn or(&self, other: &Self) -> Self {\n        Self {\n            is_proper: self.is_proper.or(other.is_proper),\n            is_singular: self.is_singular.or(other.is_singular),\n            is_plural: self.is_plural.or(other.is_plural),\n            is_countable: self.is_countable.or(other.is_countable),\n            is_mass: self.is_mass.or(other.is_mass),\n            is_possessive: self.is_possessive.or(other.is_possessive),\n        }\n    }\n}\n\n// Person is a property of pronouns; the verb 'be', plus all verbs reflect 3rd person singular with -s\n#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, PartialOrd, Is, Hash)]\npub enum Person {\n    First,\n    Second,\n    Third,\n}\n\n// TODO for now focused on personal pronouns?\n#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, PartialOrd, Eq, Hash, Default)]\npub struct PronounData {\n    pub is_personal: Option<bool>,\n    pub is_singular: Option<bool>,\n    pub is_plural: Option<bool>,\n    pub is_possessive: Option<bool>,\n    pub is_reflexive: Option<bool>,\n    pub person: Option<Person>,\n    pub is_subject: Option<bool>,\n    pub is_object: Option<bool>,\n}\n\nimpl PronounData {\n    /// Produce a copy of `self` with the known properties of `other` set.\n    pub fn or(&self, other: &Self) -> Self {\n        Self {\n            is_personal: self.is_personal.or(other.is_personal),\n            is_singular: self.is_singular.or(other.is_singular),\n            is_plural: self.is_plural.or(other.is_plural),\n            is_possessive: self.is_possessive.or(other.is_possessive),\n            is_reflexive: self.is_reflexive.or(other.is_reflexive),\n            person: self.person.or(other.person),\n            is_subject: self.is_subject.or(other.is_subject),\n            is_object: self.is_object.or(other.is_object),\n        }\n    }\n}\n\n/// Additional metadata for determiners\n#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, PartialOrd, Eq, Hash, Default)]\npub struct DeterminerData {\n    pub is_demonstrative: Option<bool>,\n    pub is_possessive: Option<bool>,\n    pub is_quantifier: Option<bool>,\n}\n\nimpl DeterminerData {\n    /// Produce a copy of `self` with the known properties of `other` set.\n    pub fn or(&self, other: &Self) -> Self {\n        Self {\n            is_demonstrative: self.is_demonstrative.or(other.is_demonstrative),\n            is_possessive: self.is_possessive.or(other.is_possessive),\n            is_quantifier: self.is_quantifier.or(other.is_quantifier),\n        }\n    }\n}\n\n/// Degree is a property of adjectives: positive is not inflected\n/// Comparative is inflected with -er or comes after the word \"more\"\n/// Superlative is inflected with -est or comes after the word \"most\"\n#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, PartialOrd, Is, Hash)]\npub enum Degree {\n    Positive,\n    Comparative,\n    Superlative,\n}\n\n/// Some adjectives are not comparable so don't have -er or -est forms and can't be used with \"more\" or \"most\".\n/// Some adjectives can only be used \"attributively\" (before a noun); some only predicatively (after \"is\" etc.).\n/// In old grammars words like the articles and determiners are classified as adjectives but behave differently.\n#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, PartialOrd, Eq, Hash, Default)]\npub struct AdjectiveData {\n    pub degree: Option<Degree>,\n}\n\nimpl AdjectiveData {\n    /// Produce a copy of `self` with the known properties of `other` set.\n    pub fn or(&self, other: &Self) -> Self {\n        Self {\n            degree: self.degree.or(other.degree),\n        }\n    }\n}\n\n/// Adverb can be a \"junk drawer\" category for words which don't fit the other major categories.\n/// The typical adverbs are \"adverbs of manner\", those derived from adjectives in -ly\n/// other adverbs (time, place, etc) should probably not be considered adverbs for Harper's purposes\n#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, PartialOrd, Eq, Hash, Default)]\npub struct AdverbData {\n    pub is_manner: Option<bool>,\n    pub is_frequency: Option<bool>,\n    pub is_degree: Option<bool>,\n}\n\nimpl AdverbData {\n    /// Produce a copy of `self` with the known properties of `other` set.\n    pub fn or(&self, _other: &Self) -> Self {\n        Self {\n            is_manner: self.is_manner.or(_other.is_manner),\n            is_frequency: self.is_frequency.or(_other.is_frequency),\n            is_degree: self.is_degree.or(_other.is_degree),\n        }\n    }\n}\n\n#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, PartialOrd, Eq, Hash, Default)]\npub struct ConjunctionData {}\n\nimpl ConjunctionData {\n    /// Produce a copy of `self` with the known properties of `other` set.\n    pub fn or(&self, _other: &Self) -> Self {\n        Self {}\n    }\n}\n\n#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, PartialOrd, Eq, Hash, Default)]\npub struct AffixData {\n    pub is_prefix: Option<bool>,\n    pub is_suffix: Option<bool>,\n}\n\nimpl AffixData {\n    /// Produce a copy of `self` with the known properties of `other` set.\n    pub fn or(&self, _other: &Self) -> Self {\n        Self {\n            is_prefix: self.is_prefix.or(_other.is_prefix),\n            is_suffix: self.is_suffix.or(_other.is_suffix),\n        }\n    }\n}\n\n/// A regional dialect.\n///\n/// Note: these have bit-shifted values so that they can ergonomically integrate with\n/// `DialectFlags`. Each value here must have a unique bit index inside\n/// `DialectsUnderlyingType`.\n#[derive(\n    Debug,\n    Clone,\n    Copy,\n    Serialize,\n    Deserialize,\n    PartialEq,\n    PartialOrd,\n    Eq,\n    Hash,\n    EnumCount,\n    EnumString,\n    EnumIter,\n    Display,\n    VariantArray,\n)]\npub enum Dialect {\n    American = 1 << 0,\n    Canadian = 1 << 1,\n    Australian = 1 << 2,\n    British = 1 << 3,\n    Indian = 1 << 4,\n}\nimpl Dialect {\n    /// Tries to guess the dialect used in the document by finding which dialect is used the most.\n    /// Returns `None` if it fails to find a single dialect that is used the most.\n    #[must_use]\n    pub fn try_guess_from_document(document: &Document) -> Option<Self> {\n        Self::try_from(DialectFlags::get_most_used_dialects_from_document(document)).ok()\n    }\n\n    /// Tries to get a dialect from its abbreviation. Returns `None` if the abbreviation is not\n    /// recognized.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use harper_core::Dialect;\n    ///\n    /// let abbrs = [\"US\", \"CA\", \"AU\", \"GB\", \"IN\"];\n    /// let mut dialects = abbrs.iter().map(|abbr| Dialect::try_from_abbr(abbr));\n    ///\n    /// assert_eq!(Some(Dialect::American), dialects.next().unwrap()); // US\n    /// assert_eq!(Some(Dialect::Canadian), dialects.next().unwrap()); // CA\n    /// assert_eq!(Some(Dialect::Australian), dialects.next().unwrap()); // AU\n    /// assert_eq!(Some(Dialect::British), dialects.next().unwrap()); // GB\n    /// assert_eq!(Some(Dialect::Indian), dialects.next().unwrap()); // IN\n    /// ```\n    #[must_use]\n    pub fn try_from_abbr(abbr: &str) -> Option<Self> {\n        match abbr {\n            \"US\" => Some(Self::American),\n            \"CA\" => Some(Self::Canadian),\n            \"AU\" => Some(Self::Australian),\n            \"GB\" => Some(Self::British),\n            \"IN\" => Some(Self::Indian),\n            _ => None,\n        }\n    }\n}\nimpl TryFrom<DialectFlags> for Dialect {\n    type Error = ();\n\n    /// Attempts to convert `DialectFlags` to a single `Dialect`.\n    ///\n    /// # Errors\n    ///\n    /// Will return `Err` if more than one dialect is enabled or if an undefined dialect is\n    /// enabled.\n    fn try_from(dialect_flags: DialectFlags) -> Result<Self, Self::Error> {\n        // Ensure only one dialect is enabled before converting.\n        if dialect_flags.bits().count_ones() == 1 {\n            match dialect_flags {\n                df if df.is_dialect_enabled_strict(Dialect::American) => Ok(Dialect::American),\n                df if df.is_dialect_enabled_strict(Dialect::Canadian) => Ok(Dialect::Canadian),\n                df if df.is_dialect_enabled_strict(Dialect::Australian) => Ok(Dialect::Australian),\n                df if df.is_dialect_enabled_strict(Dialect::British) => Ok(Dialect::British),\n                df if df.is_dialect_enabled_strict(Dialect::Indian) => Ok(Dialect::Indian),\n                _ => Err(()),\n            }\n        } else {\n            // More than one dialect enabled; can't soundly convert.\n            Err(())\n        }\n    }\n}\n\n// The underlying type used for DialectFlags.\n// At the time of writing, this is currently a `u8`. If we want to define more than 8 dialects in\n// the future, we will need to switch this to a larger type.\ntype DialectFlagsUnderlyingType = u8;\n\nbitflags::bitflags! {\n    /// A collection of bit flags used to represent enabled dialects.\n    ///\n    /// This is generally used to allow a word (or similar) to be tagged with multiple dialects.\n    #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, PartialOrd, Eq, Hash)]\n    #[serde(transparent)]\n    pub struct DialectFlags: DialectFlagsUnderlyingType {\n        const AMERICAN = Dialect::American as DialectFlagsUnderlyingType;\n        const CANADIAN = Dialect::Canadian as DialectFlagsUnderlyingType;\n        const AUSTRALIAN = Dialect::Australian as DialectFlagsUnderlyingType;\n        const BRITISH = Dialect::British as DialectFlagsUnderlyingType;\n        const INDIAN = Dialect::Indian as DialectFlagsUnderlyingType;\n    }\n}\nimpl DialectFlags {\n    /// Checks if the provided dialect is enabled.\n    /// If no dialect is explicitly enabled, it is assumed that all dialects are enabled.\n    #[must_use]\n    pub fn is_dialect_enabled(self, dialect: Dialect) -> bool {\n        self.is_empty() || self.intersects(Self::from_dialect(dialect))\n    }\n\n    /// Checks if the provided dialect is ***explicitly*** enabled.\n    ///\n    /// Unlike `is_dialect_enabled`, this will return false when no dialects are explicitly\n    /// enabled.\n    #[must_use]\n    pub fn is_dialect_enabled_strict(self, dialect: Dialect) -> bool {\n        self.intersects(Self::from_dialect(dialect))\n    }\n\n    /// Constructs a `DialectFlags` from the provided `Dialect`, with only that dialect being\n    /// enabled.\n    ///\n    /// # Panics\n    ///\n    /// This will panic if `dialect` represents a dialect that is not defined in\n    /// `DialectFlags`.\n    #[must_use]\n    pub fn from_dialect(dialect: Dialect) -> Self {\n        let Some(out) = Self::from_bits(dialect as DialectFlagsUnderlyingType) else {\n            panic!(\"The '{dialect}' dialect isn't defined in DialectFlags!\");\n        };\n        out\n    }\n\n    /// Gets the most commonly used dialect(s) in the document.\n    ///\n    /// If multiple dialects are used equally often, they will all be enabled in the returned\n    /// `DialectFlags`. On the other hand, if there is a single dialect that is used the most, it\n    /// will be the only one enabled.\n    #[must_use]\n    pub fn get_most_used_dialects_from_document(document: &Document) -> Self {\n        // Initialize counters.\n        let mut dialect_counters: [(Dialect, usize); Dialect::COUNT] = Dialect::VARIANTS\n            .iter()\n            .map(|d| (*d, 0))\n            .collect_array()\n            .unwrap();\n\n        // Count word dialects.\n        document.iter_words().for_each(|w| {\n            if let TokenKind::Word(Some(lexeme_metadata)) = &w.kind {\n                // If the token is a word, iterate though the dialects in `dialect_counters` and\n                // increment those counters where the word has the respective dialect enabled.\n                dialect_counters.iter_mut().for_each(|(dialect, count)| {\n                    if lexeme_metadata.dialects.is_dialect_enabled(*dialect) {\n                        *count += 1;\n                    }\n                });\n            }\n        });\n\n        // Find max counter.\n        let max_counter = dialect_counters\n            .iter()\n            .map(|(_, count)| count)\n            .max()\n            .unwrap();\n        // Get and convert the collection of most used dialects into a `DialectFlags`.\n        dialect_counters\n            .into_iter()\n            .filter(|(_, count)| count == max_counter)\n            .fold(DialectFlags::empty(), |acc, dialect| {\n                // Fold most used dialects into `DialectFlags` via bitwise or.\n                acc | Self::from_dialect(dialect.0)\n            })\n    }\n}\nimpl Default for DialectFlags {\n    /// A default value with no dialects explicitly enabled.\n    /// Implicitly, this state corresponds to all dialects being enabled.\n    fn default() -> Self {\n        Self::empty()\n    }\n}\n\n#[cfg(test)]\npub mod tests {\n    use crate::DictWordMetadata;\n    use crate::spell::{Dictionary, FstDictionary};\n\n    // Helper function to get metadata from the curated dictionary\n    pub fn md(word: &str) -> DictWordMetadata {\n        FstDictionary::curated()\n            .get_word_metadata_str(word)\n            .unwrap_or_else(|| panic!(\"Word '{word}' not found in dictionary\"))\n            .into_owned()\n    }\n\n    mod dialect {\n        use super::super::{Dialect, DialectFlags};\n        use crate::Document;\n\n        #[test]\n        fn guess_british_dialect() {\n            let document = Document::new_plain_english_curated(\"Aluminium was used.\");\n            let df = DialectFlags::get_most_used_dialects_from_document(&document);\n            assert!(\n                df.is_dialect_enabled_strict(Dialect::British)\n                    && !df.is_dialect_enabled_strict(Dialect::American)\n            );\n        }\n\n        #[test]\n        fn guess_american_dialect() {\n            let document = Document::new_plain_english_curated(\"Aluminum was used.\");\n            let df = DialectFlags::get_most_used_dialects_from_document(&document);\n            assert!(\n                df.is_dialect_enabled_strict(Dialect::American)\n                    && !df.is_dialect_enabled_strict(Dialect::British)\n            );\n        }\n    }\n\n    mod noun {\n        use crate::dict_word_metadata::tests::md;\n\n        #[test]\n        fn puppy_is_noun() {\n            assert!(md(\"puppy\").is_noun());\n        }\n\n        #[test]\n        fn prepare_is_not_noun() {\n            assert!(!md(\"prepare\").is_noun());\n        }\n\n        #[test]\n        fn paris_is_proper_noun() {\n            assert!(md(\"Paris\").is_proper_noun());\n        }\n\n        #[test]\n        fn permit_is_non_proper_noun() {\n            assert!(md(\"lapdog\").is_non_proper_noun());\n        }\n\n        #[test]\n        fn hound_is_singular_noun() {\n            assert!(md(\"hound\").is_singular_noun());\n        }\n\n        #[test]\n        fn pooches_is_non_singular_noun() {\n            assert!(md(\"pooches\").is_non_singular_noun());\n        }\n\n        // Make sure is_non_xxx_noun methods don't behave like is_not_xxx_noun.\n        // In other words, make sure they don't return true for words that are not nouns.\n        // They must only pass for words that are nouns but not singular etc.\n        #[test]\n        fn loyal_doesnt_pass_is_non_singular_noun() {\n            assert!(!md(\"loyal\").is_non_singular_noun());\n        }\n\n        #[test]\n        fn hounds_is_plural_noun() {\n            assert!(md(\"hounds\").is_plural_noun());\n        }\n\n        #[test]\n        fn pooch_is_non_plural_noun() {\n            assert!(md(\"pooch\").is_non_plural_noun());\n        }\n\n        #[test]\n        fn fish_is_singular_noun() {\n            assert!(md(\"fish\").is_singular_noun());\n        }\n\n        #[test]\n        fn fish_is_plural_noun() {\n            assert!(md(\"fish\").is_plural_noun());\n        }\n\n        #[test]\n        fn fishes_is_plural_noun() {\n            assert!(md(\"fishes\").is_plural_noun());\n        }\n\n        #[test]\n        fn sheep_is_singular_noun() {\n            assert!(md(\"sheep\").is_singular_noun());\n        }\n\n        #[test]\n        fn sheep_is_plural_noun() {\n            assert!(md(\"sheep\").is_plural_noun());\n        }\n\n        #[test]\n        #[should_panic]\n        fn sheeps_is_not_word() {\n            md(\"sheeps\");\n        }\n\n        #[test]\n        fn bicep_is_singular_noun() {\n            assert!(md(\"bicep\").is_singular_noun());\n        }\n\n        #[test]\n        fn biceps_is_singular_noun() {\n            assert!(md(\"biceps\").is_singular_noun());\n        }\n\n        #[test]\n        fn biceps_is_plural_noun() {\n            assert!(md(\"biceps\").is_plural_noun());\n        }\n\n        #[test]\n        fn aircraft_is_singular_noun() {\n            assert!(md(\"aircraft\").is_singular_noun());\n        }\n\n        #[test]\n        fn aircraft_is_plural_noun() {\n            assert!(md(\"aircraft\").is_plural_noun());\n        }\n\n        #[test]\n        #[should_panic]\n        fn aircrafts_is_not_word() {\n            md(\"aircrafts\");\n        }\n\n        #[test]\n        fn dog_apostrophe_s_is_possessive_noun() {\n            assert!(md(\"dog's\").is_possessive_noun());\n        }\n\n        #[test]\n        fn dogs_is_non_possessive_noun() {\n            assert!(md(\"dogs\").is_non_possessive_noun());\n        }\n\n        // noun countability\n\n        #[test]\n        fn dog_is_countable() {\n            assert!(md(\"dog\").is_countable_noun());\n        }\n        #[test]\n        fn dog_is_non_mass_noun() {\n            assert!(md(\"dog\").is_non_mass_noun());\n        }\n\n        #[test]\n        fn furniture_is_mass_noun() {\n            assert!(md(\"furniture\").is_mass_noun());\n        }\n        #[test]\n        fn furniture_is_non_countable_noun() {\n            assert!(md(\"furniture\").is_non_countable_noun());\n        }\n\n        #[test]\n        fn equipment_is_mass_noun() {\n            assert!(md(\"equipment\").is_mass_noun());\n        }\n        #[test]\n        fn equipment_is_non_countable_noun() {\n            assert!(md(\"equipment\").is_non_countable_noun());\n        }\n\n        #[test]\n        fn beer_is_countable_noun() {\n            assert!(md(\"beer\").is_countable_noun());\n        }\n        #[test]\n        fn beer_is_mass_noun() {\n            assert!(md(\"beer\").is_mass_noun());\n        }\n    }\n\n    mod pronoun {\n        use crate::dict_word_metadata::tests::md;\n\n        mod i_me_myself {\n            use crate::dict_word_metadata::tests::md;\n\n            #[test]\n            fn i_is_pronoun() {\n                assert!(md(\"I\").is_pronoun());\n            }\n            #[test]\n            fn i_is_personal_pronoun() {\n                assert!(md(\"I\").is_personal_pronoun());\n            }\n            #[test]\n            fn i_is_singular_pronoun() {\n                assert!(md(\"I\").is_singular_pronoun());\n            }\n            #[test]\n            fn i_is_subject_pronoun() {\n                assert!(md(\"I\").is_subject_pronoun());\n            }\n\n            #[test]\n            fn me_is_pronoun() {\n                assert!(md(\"me\").is_pronoun());\n            }\n            #[test]\n            fn me_is_personal_pronoun() {\n                assert!(md(\"me\").is_personal_pronoun());\n            }\n            #[test]\n            fn me_is_singular_pronoun() {\n                assert!(md(\"me\").is_singular_pronoun());\n            }\n            #[test]\n            fn me_is_object_pronoun() {\n                assert!(md(\"me\").is_object_pronoun());\n            }\n\n            #[test]\n            fn myself_is_pronoun() {\n                assert!(md(\"myself\").is_pronoun());\n            }\n            #[test]\n            fn myself_is_personal_pronoun() {\n                assert!(md(\"myself\").is_personal_pronoun());\n            }\n            #[test]\n            fn myself_is_singular_pronoun() {\n                assert!(md(\"myself\").is_singular_pronoun());\n            }\n            #[test]\n            fn myself_is_reflexive_pronoun() {\n                assert!(md(\"myself\").is_reflexive_pronoun());\n            }\n        }\n\n        mod we_us_ourselves {\n            use crate::dict_word_metadata::tests::md;\n\n            #[test]\n            fn we_is_pronoun() {\n                assert!(md(\"we\").is_pronoun());\n            }\n            #[test]\n            fn we_is_personal_pronoun() {\n                assert!(md(\"we\").is_personal_pronoun());\n            }\n            #[test]\n            fn we_is_plural_pronoun() {\n                assert!(md(\"we\").is_plural_pronoun());\n            }\n            #[test]\n            fn we_is_subject_pronoun() {\n                assert!(md(\"we\").is_subject_pronoun());\n            }\n\n            #[test]\n            fn us_is_pronoun() {\n                assert!(md(\"us\").is_pronoun());\n            }\n            #[test]\n            fn us_is_personal_pronoun() {\n                assert!(md(\"us\").is_personal_pronoun());\n            }\n            #[test]\n            fn us_is_plural_pronoun() {\n                assert!(md(\"us\").is_plural_pronoun());\n            }\n            #[test]\n            fn us_is_object_pronoun() {\n                assert!(md(\"us\").is_object_pronoun());\n            }\n\n            #[test]\n            fn ourselves_is_pronoun() {\n                assert!(md(\"ourselves\").is_pronoun());\n            }\n            #[test]\n            fn ourselves_is_personal_pronoun() {\n                assert!(md(\"ourselves\").is_personal_pronoun());\n            }\n            #[test]\n            fn ourselves_is_plural_pronoun() {\n                assert!(md(\"ourselves\").is_plural_pronoun());\n            }\n            #[test]\n            fn ourselves_is_reflexive_pronoun() {\n                assert!(md(\"ourselves\").is_reflexive_pronoun());\n            }\n        }\n\n        mod you_yourself {\n            use crate::dict_word_metadata::tests::md;\n\n            #[test]\n            fn you_is_pronoun() {\n                assert!(md(\"you\").is_pronoun());\n            }\n            #[test]\n            fn you_is_personal_pronoun() {\n                assert!(md(\"you\").is_personal_pronoun());\n            }\n            #[test]\n            fn you_is_singular_pronoun() {\n                assert!(md(\"you\").is_singular_pronoun());\n            }\n            #[test]\n            fn you_is_plural_pronoun() {\n                assert!(md(\"you\").is_plural_pronoun());\n            }\n            #[test]\n            fn you_is_subject_pronoun() {\n                assert!(md(\"you\").is_subject_pronoun());\n            }\n            #[test]\n            fn you_is_object_pronoun() {\n                assert!(md(\"you\").is_object_pronoun());\n            }\n            #[test]\n            fn yourself_is_pronoun() {\n                assert!(md(\"yourself\").is_pronoun());\n            }\n            #[test]\n            fn yourself_is_personal_pronoun() {\n                assert!(md(\"yourself\").is_personal_pronoun());\n            }\n            #[test]\n            fn yourself_is_singular_pronoun() {\n                assert!(md(\"yourself\").is_singular_pronoun());\n            }\n            #[test]\n            fn yourself_is_reflexive_pronoun() {\n                assert!(md(\"yourself\").is_reflexive_pronoun());\n            }\n        }\n\n        mod he_him_himself {\n            use crate::dict_word_metadata::tests::md;\n\n            #[test]\n            fn he_is_pronoun() {\n                assert!(md(\"he\").is_pronoun());\n            }\n            #[test]\n            fn he_is_personal_pronoun() {\n                assert!(md(\"he\").is_personal_pronoun());\n            }\n            #[test]\n            fn he_is_singular_pronoun() {\n                assert!(md(\"he\").is_singular_pronoun());\n            }\n            #[test]\n            fn he_is_subject_pronoun() {\n                assert!(md(\"he\").is_subject_pronoun());\n            }\n\n            #[test]\n            fn him_is_pronoun() {\n                assert!(md(\"him\").is_pronoun());\n            }\n            #[test]\n            fn him_is_personal_pronoun() {\n                assert!(md(\"him\").is_personal_pronoun());\n            }\n            #[test]\n            fn him_is_singular_pronoun() {\n                assert!(md(\"him\").is_singular_pronoun());\n            }\n            #[test]\n            fn him_is_object_pronoun() {\n                assert!(md(\"him\").is_object_pronoun());\n            }\n\n            #[test]\n            fn himself_is_pronoun() {\n                assert!(md(\"himself\").is_pronoun());\n            }\n            #[test]\n            fn himself_is_personal_pronoun() {\n                assert!(md(\"himself\").is_personal_pronoun());\n            }\n            #[test]\n            fn himself_is_singular_pronoun() {\n                assert!(md(\"himself\").is_singular_pronoun());\n            }\n            #[test]\n            fn himself_is_reflexive_pronoun() {\n                assert!(md(\"himself\").is_reflexive_pronoun());\n            }\n        }\n\n        mod she_her_herself {\n            use crate::dict_word_metadata::tests::md;\n\n            #[test]\n            fn she_is_pronoun() {\n                assert!(md(\"she\").is_pronoun());\n            }\n            #[test]\n            fn she_is_personal_pronoun() {\n                assert!(md(\"she\").is_personal_pronoun());\n            }\n            #[test]\n            fn she_is_singular_pronoun() {\n                assert!(md(\"she\").is_singular_pronoun());\n            }\n            #[test]\n            fn she_is_subject_pronoun() {\n                assert!(md(\"she\").is_subject_pronoun());\n            }\n\n            #[test]\n            fn her_is_pronoun() {\n                assert!(md(\"her\").is_pronoun());\n            }\n            #[test]\n            fn her_is_personal_pronoun() {\n                assert!(md(\"her\").is_personal_pronoun());\n            }\n            #[test]\n            fn her_is_singular_pronoun() {\n                assert!(md(\"her\").is_singular_pronoun());\n            }\n            #[test]\n            fn her_is_object_pronoun() {\n                assert!(md(\"her\").is_object_pronoun());\n            }\n\n            #[test]\n            fn herself_is_pronoun() {\n                assert!(md(\"herself\").is_pronoun());\n            }\n            #[test]\n            fn herself_is_personal_pronoun() {\n                assert!(md(\"herself\").is_personal_pronoun());\n            }\n            #[test]\n            fn herself_is_singular_pronoun() {\n                assert!(md(\"herself\").is_singular_pronoun());\n            }\n            #[test]\n            fn herself_is_reflexive_pronoun() {\n                assert!(md(\"herself\").is_reflexive_pronoun());\n            }\n        }\n\n        mod it_itself {\n            use crate::dict_word_metadata::tests::md;\n\n            #[test]\n            fn it_is_pronoun() {\n                assert!(md(\"it\").is_pronoun());\n            }\n            #[test]\n            fn it_is_personal_pronoun() {\n                assert!(md(\"it\").is_personal_pronoun());\n            }\n            #[test]\n            fn it_is_singular_pronoun() {\n                assert!(md(\"it\").is_singular_pronoun());\n            }\n            #[test]\n            fn it_is_subject_pronoun() {\n                assert!(md(\"it\").is_subject_pronoun());\n            }\n            #[test]\n            fn it_is_object_pronoun() {\n                assert!(md(\"it\").is_object_pronoun());\n            }\n\n            #[test]\n            fn itself_is_pronoun() {\n                assert!(md(\"itself\").is_pronoun());\n            }\n            #[test]\n            fn itself_is_personal_pronoun() {\n                assert!(md(\"itself\").is_personal_pronoun());\n            }\n            #[test]\n            fn itself_is_singular_pronoun() {\n                assert!(md(\"itself\").is_singular_pronoun());\n            }\n            #[test]\n            fn itself_is_reflexive_pronoun() {\n                assert!(md(\"itself\").is_reflexive_pronoun());\n            }\n        }\n\n        mod they_them_themselves {\n            use crate::dict_word_metadata::tests::md;\n\n            #[test]\n            fn they_is_pronoun() {\n                assert!(md(\"they\").is_pronoun());\n            }\n            #[test]\n            fn they_is_personal_pronoun() {\n                assert!(md(\"they\").is_personal_pronoun());\n            }\n            #[test]\n            fn they_is_plural_pronoun() {\n                assert!(md(\"they\").is_plural_pronoun());\n            }\n            #[test]\n            fn they_is_subject_pronoun() {\n                assert!(md(\"they\").is_subject_pronoun());\n            }\n\n            #[test]\n            fn them_is_pronoun() {\n                assert!(md(\"them\").is_pronoun());\n            }\n            #[test]\n            fn them_is_personal_pronoun() {\n                assert!(md(\"them\").is_personal_pronoun());\n            }\n            #[test]\n            fn them_is_plural_pronoun() {\n                assert!(md(\"them\").is_plural_pronoun());\n            }\n            #[test]\n            fn them_is_object_pronoun() {\n                assert!(md(\"them\").is_object_pronoun());\n            }\n\n            #[test]\n            fn themselves_is_pronoun() {\n                assert!(md(\"themselves\").is_pronoun());\n            }\n            #[test]\n            fn themselves_is_personal_pronoun() {\n                assert!(md(\"themselves\").is_personal_pronoun());\n            }\n            #[test]\n            fn themselves_is_plural_pronoun() {\n                assert!(md(\"themselves\").is_plural_pronoun());\n            }\n            #[test]\n            fn themselves_is_reflexive_pronoun() {\n                assert!(md(\"themselves\").is_reflexive_pronoun());\n            }\n        }\n\n        // Possessive pronouns (not to be confused with possessive adjectives/determiners)\n        #[test]\n        fn mine_is_pronoun() {\n            assert!(md(\"mine\").is_pronoun());\n        }\n        #[test]\n        fn ours_is_pronoun() {\n            assert!(md(\"ours\").is_pronoun());\n        }\n        #[test]\n        fn yours_is_pronoun() {\n            assert!(md(\"yours\").is_pronoun());\n        }\n        #[test]\n        fn his_is_pronoun() {\n            assert!(md(\"his\").is_pronoun());\n        }\n        #[test]\n        fn hers_is_pronoun() {\n            assert!(md(\"hers\").is_pronoun());\n        }\n        #[test]\n        fn its_is_pronoun() {\n            assert!(md(\"its\").is_pronoun());\n        }\n        #[test]\n        fn theirs_is_pronoun() {\n            assert!(md(\"theirs\").is_pronoun());\n        }\n\n        // archaic pronouns\n        #[test]\n        fn archaic_pronouns() {\n            assert!(md(\"thou\").is_pronoun());\n            assert!(md(\"thee\").is_pronoun());\n            assert!(md(\"thyself\").is_pronoun());\n            assert!(md(\"thine\").is_pronoun());\n        }\n\n        // generic pronouns\n        #[test]\n        fn generic_pronouns() {\n            assert!(md(\"one\").is_pronoun());\n            assert!(md(\"oneself\").is_pronoun());\n        }\n\n        // relative and interrogative pronouns\n        #[test]\n        fn relative_and_interrogative_pronouns() {\n            assert!(md(\"who\").is_pronoun());\n            assert!(md(\"whom\").is_pronoun());\n            assert!(md(\"whose\").is_pronoun());\n            assert!(md(\"which\").is_pronoun());\n            assert!(md(\"what\").is_pronoun());\n        }\n\n        // nonstandard pronouns\n        #[test]\n        #[ignore = \"not in dictionary\"]\n        fn nonstandard_pronouns() {\n            assert!(md(\"themself\").pronoun.is_some());\n            assert!(md(\"y'all'\").pronoun.is_some());\n        }\n    }\n\n    mod nominal {\n        use crate::dict_word_metadata::tests::md;\n\n        #[test]\n        fn my_is_possessive_nominal() {\n            assert!(md(\"my\").is_possessive_nominal());\n        }\n\n        #[test]\n        fn mine_is_not_possessive_nominal() {\n            assert!(!md(\"mine\").is_possessive_nominal());\n        }\n\n        #[test]\n        fn freds_is_possessive_nominal() {\n            assert!(md(\"Fred's\").is_possessive_nominal());\n        }\n\n        #[test]\n        fn fred_is_not_possessive_nominal() {\n            assert!(!md(\"Fred\").is_possessive_nominal());\n        }\n\n        #[test]\n        fn dogs_is_possessive_nominal() {\n            assert!(md(\"dog's\").is_possessive_nominal());\n        }\n\n        #[test]\n        fn microsofts_is_possessive_nominal() {\n            assert!(md(\"Microsoft's\").is_possessive_nominal());\n        }\n    }\n\n    mod adjective {\n        use crate::{Degree, dict_word_metadata::tests::md};\n\n        // Getting degrees\n\n        #[test]\n        #[ignore = \"not marked yet because it might not be reliable\"]\n        fn big_is_positive() {\n            assert_eq!(md(\"big\").get_degree(), Some(Degree::Positive));\n        }\n\n        #[test]\n        fn bigger_is_comparative() {\n            assert_eq!(md(\"bigger\").get_degree(), Some(Degree::Comparative));\n        }\n\n        #[test]\n        fn biggest_is_superlative() {\n            assert_eq!(md(\"biggest\").get_degree(), Some(Degree::Superlative));\n        }\n\n        #[test]\n        #[should_panic(expected = \"Word 'bigly' not found in dictionary\")]\n        fn bigly_is_not_an_adjective_form_we_track() {\n            assert_eq!(md(\"bigly\").get_degree(), None);\n        }\n\n        // Calling is_ methods\n\n        // TODO: positive degree not implemented\n\n        #[test]\n        fn bigger_is_comparative_adjective() {\n            assert!(md(\"bigger\").is_comparative_adjective());\n        }\n\n        #[test]\n        fn biggest_is_superlative_adjective() {\n            assert!(md(\"biggest\").is_superlative_adjective());\n        }\n    }\n\n    #[test]\n    fn the_is_determiner() {\n        assert!(md(\"the\").is_determiner());\n    }\n    #[test]\n    fn this_is_demonstrative_determiner() {\n        assert!(md(\"this\").is_demonstrative_determiner());\n    }\n    #[test]\n    fn your_is_possessive_determiner() {\n        assert!(md(\"your\").is_possessive_determiner());\n    }\n\n    #[test]\n    fn every_is_quantifier() {\n        assert!(md(\"every\").is_quantifier());\n    }\n\n    #[test]\n    fn the_isnt_quantifier() {\n        assert!(!md(\"the\").is_quantifier());\n    }\n\n    #[test]\n    fn equipment_is_mass_noun() {\n        assert!(md(\"equipment\").is_mass_noun());\n    }\n\n    #[test]\n    fn equipment_is_non_countable_noun() {\n        assert!(md(\"equipment\").is_non_countable_noun());\n    }\n\n    #[test]\n    fn equipment_isnt_countable_noun() {\n        assert!(!md(\"equipment\").is_countable_noun());\n    }\n\n    mod verb {\n        use crate::dict_word_metadata::tests::md;\n\n        #[test]\n        fn lemma_walk() {\n            let md = md(\"walk\");\n            assert!(md.is_verb_lemma())\n        }\n\n        #[test]\n        fn lemma_fix() {\n            let md = md(\"fix\");\n            assert!(md.is_verb_lemma())\n        }\n\n        #[test]\n        fn progressive_walking() {\n            let md = md(\"walking\");\n            assert!(md.is_verb_progressive_form())\n        }\n\n        #[test]\n        fn past_walked() {\n            let md = md(\"walked\");\n            assert!(md.is_verb_past_form())\n        }\n\n        #[test]\n        fn simple_past_ate() {\n            let md = md(\"ate\");\n            assert!(md.is_verb_simple_past_form())\n        }\n\n        #[test]\n        fn past_participle_eaten() {\n            let md = md(\"eaten\");\n            assert!(md.is_verb_past_participle_form())\n        }\n\n        #[test]\n        fn third_pers_sing_walks() {\n            let md = md(\"walks\");\n            assert!(md.is_verb_third_person_singular_present_form())\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/dict_word_metadata_orthography.rs",
    "content": "use crate::CharStringExt;\nuse crate::char_ext::CharExt;\nuse serde::{Deserialize, Serialize};\n\n/// Orthography information.\npub enum Orthography {\n    /// Every char that is a letter is lowercase.\n    Lowercase = 1 << 0,\n    /// First char is uppercase, the rest is lowercase (but multi-word?)\n    Titlecase = 1 << 1,\n    /// Every char that is a letter is uppercase (including single-letter uppercase)\n    AllCaps = 1 << 2,\n    /// Starts with a lowercase letter but also contains uppercase letters.\n    LowerCamel = 1 << 3,\n    /// Starts with an uppercase letter but also contains lowercase letters. (Superset of Titlecase.)\n    UpperCamel = 1 << 4,\n    /// Contains at least one space.\n    Multiword = 1 << 5,\n    /// Contains at least one hyphen.\n    Hyphenated = 1 << 6,\n    /// Contains an apostrophe, so it's a possessive or a contraction.\n    Apostrophe = 1 << 7,\n    /// Could be Roman numerals.\n    RomanNumerals = 1 << 8,\n}\n\n/// The underlying type used for OrthographyFlags.\n/// At the time of writing, this is currently a `u8`. If we want to define more than 8 orthographic\n/// properties in the future, we will need to switch this to a larger type.\ntype OrthographyFlagsUnderlyingType = u16;\n\nbitflags::bitflags! {\n    /// A collection of bit flags used to represent orthographic properties of a word.\n    ///\n    /// This is generally used to allow a word (or similar) to be tagged with multiple orthographic\n    /// properties.\n    #[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, PartialOrd, Serialize)]\n    pub struct OrthFlags: OrthographyFlagsUnderlyingType {\n        const LOWERCASE = Orthography::Lowercase as OrthographyFlagsUnderlyingType;\n        const TITLECASE = Orthography::Titlecase as OrthographyFlagsUnderlyingType;\n        const ALLCAPS = Orthography::AllCaps as OrthographyFlagsUnderlyingType;\n        const LOWER_CAMEL = Orthography::LowerCamel as OrthographyFlagsUnderlyingType;\n        const UPPER_CAMEL = Orthography::UpperCamel as OrthographyFlagsUnderlyingType;\n        const MULTIWORD = Orthography::Multiword as OrthographyFlagsUnderlyingType;\n        const HYPHENATED = Orthography::Hyphenated as OrthographyFlagsUnderlyingType;\n        const APOSTROPHE = Orthography::Apostrophe as OrthographyFlagsUnderlyingType;\n        const ROMAN_NUMERALS = Orthography::RomanNumerals as OrthographyFlagsUnderlyingType;\n    }\n}\nimpl Default for OrthFlags {\n    fn default() -> Self {\n        Self::empty()\n    }\n}\n\nimpl OrthFlags {\n    /// Construct orthography flags for a given sequence of letters.\n    pub fn from_letters(letters: &[char]) -> Self {\n        let mut ortho_flags = Self::default();\n        let mut all_lower = true;\n        let mut all_upper = true;\n        let mut first_is_upper = false;\n        let mut first_is_lower = false;\n        let mut saw_upper_after_first = false;\n        let mut saw_lower_after_first = false;\n        let mut is_first_char = true;\n        let mut upper_to_lower = false;\n        let mut lower_to_upper = false;\n        let letter_count = letters.iter().filter(|c| c.is_english_lingual()).count();\n\n        for &c in letters {\n            if c == ' ' {\n                ortho_flags |= Self::MULTIWORD;\n                continue;\n            }\n\n            if c == '-' {\n                ortho_flags |= Self::HYPHENATED;\n                continue;\n            }\n\n            if c.normalized() == '\\'' {\n                ortho_flags |= Self::APOSTROPHE;\n                continue;\n            }\n\n            if !c.is_english_lingual() {\n                continue;\n            }\n\n            if c.is_lowercase() {\n                all_upper = false;\n                if is_first_char {\n                    first_is_lower = true;\n                } else {\n                    saw_lower_after_first = true;\n                    if upper_to_lower {\n                        lower_to_upper = true;\n                    }\n                    upper_to_lower = true;\n                }\n            } else if c.is_uppercase() {\n                all_lower = false;\n                if is_first_char {\n                    first_is_upper = true;\n                } else {\n                    saw_upper_after_first = true;\n                    if lower_to_upper {\n                        upper_to_lower = true;\n                    }\n                    lower_to_upper = true;\n                }\n            } else {\n                first_is_upper = false;\n                first_is_lower = false;\n                upper_to_lower = false;\n                lower_to_upper = false;\n            }\n            is_first_char = false;\n        }\n\n        if letter_count > 0 {\n            if all_lower {\n                ortho_flags |= Self::LOWERCASE;\n            }\n            if all_upper {\n                ortho_flags |= Self::ALLCAPS;\n            }\n            if letter_count > 1 && first_is_upper && !saw_upper_after_first {\n                ortho_flags |= Self::TITLECASE;\n            }\n            if first_is_lower && saw_upper_after_first {\n                ortho_flags |= Self::LOWER_CAMEL;\n            }\n            if first_is_upper && saw_lower_after_first && saw_upper_after_first {\n                ortho_flags |= Self::UPPER_CAMEL;\n            }\n        }\n\n        if looks_like_roman_numerals(letters) && is_really_roman_numerals(&letters.to_lower()) {\n            ortho_flags |= Self::ROMAN_NUMERALS;\n        }\n\n        ortho_flags\n    }\n}\n\nfn looks_like_roman_numerals(word: &[char]) -> bool {\n    let mut is_roman = false;\n    let first_char_upper;\n\n    if let Some((&first, rest)) = word.split_first()\n        && \"mdclxvi\".contains(first.to_ascii_lowercase())\n    {\n        first_char_upper = first.is_uppercase();\n\n        for &c in rest {\n            if !\"mdclxvi\".contains(c.to_ascii_lowercase()) || c.is_uppercase() != first_char_upper {\n                return false;\n            }\n        }\n        is_roman = true;\n    }\n    is_roman\n}\n\nfn is_really_roman_numerals(word: &[char]) -> bool {\n    let s: String = word.iter().collect();\n    let mut chars = s.chars().peekable();\n\n    let mut m_count = 0;\n    while m_count < 4 && chars.peek() == Some(&'m') {\n        chars.next();\n        m_count += 1;\n    }\n\n    if !check_roman_group(&mut chars, 'c', 'd', 'm') {\n        return false;\n    }\n\n    if !check_roman_group(&mut chars, 'x', 'l', 'c') {\n        return false;\n    }\n\n    if !check_roman_group(&mut chars, 'i', 'v', 'x') {\n        return false;\n    }\n\n    if chars.next().is_some() {\n        return false;\n    }\n\n    true\n}\n\nfn check_roman_group<I: Iterator<Item = char>>(\n    chars: &mut std::iter::Peekable<I>,\n    one: char,\n    five: char,\n    ten: char,\n) -> bool {\n    match chars.peek() {\n        Some(&c) if c == one => {\n            chars.next();\n            match chars.peek() {\n                Some(&next) if next == ten || next == five => {\n                    chars.next();\n                    true\n                }\n                _ => {\n                    let mut count = 0;\n                    while count < 2 && chars.peek() == Some(&one) {\n                        chars.next();\n                        count += 1;\n                    }\n                    true\n                }\n            }\n        }\n        Some(&c) if c == five => {\n            chars.next();\n            let mut count = 0;\n            while count < 3 && chars.peek() == Some(&one) {\n                chars.next();\n                count += 1;\n            }\n            true\n        }\n        _ => true,\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::CharString;\n    use crate::dict_word_metadata::tests::md;\n    use crate::dict_word_metadata_orthography::OrthFlags;\n\n    fn orth_flags(s: &str) -> OrthFlags {\n        let letters: CharString = s.chars().collect();\n        OrthFlags::from_letters(&letters)\n    }\n\n    #[test]\n    fn test_lowercase_flags() {\n        let flags = orth_flags(\"hello\");\n        assert!(flags.contains(OrthFlags::LOWERCASE));\n        assert!(!flags.contains(OrthFlags::TITLECASE));\n        assert!(!flags.contains(OrthFlags::ALLCAPS));\n        assert!(!flags.contains(OrthFlags::LOWER_CAMEL));\n        assert!(!flags.contains(OrthFlags::UPPER_CAMEL));\n\n        let flags = orth_flags(\"hello123\");\n        assert!(flags.contains(OrthFlags::LOWERCASE));\n    }\n\n    #[test]\n    fn test_titlecase_flags() {\n        let flags = orth_flags(\"Hello\");\n        assert!(!flags.contains(OrthFlags::LOWERCASE));\n        assert!(flags.contains(OrthFlags::TITLECASE));\n        assert!(!flags.contains(OrthFlags::ALLCAPS));\n        assert!(!flags.contains(OrthFlags::LOWER_CAMEL));\n        assert!(!flags.contains(OrthFlags::UPPER_CAMEL));\n\n        assert!(orth_flags(\"World\").contains(OrthFlags::TITLECASE));\n        assert!(orth_flags(\"Something\").contains(OrthFlags::TITLECASE));\n        assert!(!orth_flags(\"McDonald\").contains(OrthFlags::TITLECASE));\n        assert!(!orth_flags(\"O'Reilly\").contains(OrthFlags::TITLECASE));\n        assert!(!orth_flags(\"A\").contains(OrthFlags::TITLECASE));\n    }\n\n    #[test]\n    fn test_allcaps_flags() {\n        let flags = orth_flags(\"HELLO\");\n        assert!(!flags.contains(OrthFlags::LOWERCASE));\n        assert!(!flags.contains(OrthFlags::TITLECASE));\n        assert!(flags.contains(OrthFlags::ALLCAPS));\n        assert!(!flags.contains(OrthFlags::LOWER_CAMEL));\n        assert!(!flags.contains(OrthFlags::UPPER_CAMEL));\n\n        assert!(orth_flags(\"NASA\").contains(OrthFlags::ALLCAPS));\n        assert!(orth_flags(\"I\").contains(OrthFlags::ALLCAPS));\n    }\n\n    #[test]\n    fn test_lower_camel_flags() {\n        let flags = orth_flags(\"helloWorld\");\n        assert!(!flags.contains(OrthFlags::LOWERCASE));\n        assert!(!flags.contains(OrthFlags::TITLECASE));\n        assert!(!flags.contains(OrthFlags::ALLCAPS));\n        assert!(flags.contains(OrthFlags::LOWER_CAMEL));\n        assert!(!flags.contains(OrthFlags::UPPER_CAMEL));\n\n        assert!(orth_flags(\"getHTTPResponse\").contains(OrthFlags::LOWER_CAMEL));\n        assert!(orth_flags(\"eBay\").contains(OrthFlags::LOWER_CAMEL));\n        assert!(!orth_flags(\"hello\").contains(OrthFlags::LOWER_CAMEL));\n        assert!(!orth_flags(\"HelloWorld\").contains(OrthFlags::LOWER_CAMEL));\n    }\n\n    #[test]\n    fn test_upper_camel_flags() {\n        let flags = orth_flags(\"HelloWorld\");\n        assert!(!flags.contains(OrthFlags::LOWERCASE));\n        assert!(!flags.contains(OrthFlags::TITLECASE));\n        assert!(!flags.contains(OrthFlags::ALLCAPS));\n        assert!(!flags.contains(OrthFlags::LOWER_CAMEL));\n        assert!(flags.contains(OrthFlags::UPPER_CAMEL));\n\n        assert!(orth_flags(\"HttpRequest\").contains(OrthFlags::UPPER_CAMEL));\n        assert!(orth_flags(\"McDonald\").contains(OrthFlags::UPPER_CAMEL));\n        assert!(orth_flags(\"O'Reilly\").contains(OrthFlags::UPPER_CAMEL));\n        assert!(orth_flags(\"XMLHttpRequest\").contains(OrthFlags::UPPER_CAMEL));\n        assert!(!orth_flags(\"Hello\").contains(OrthFlags::UPPER_CAMEL));\n        assert!(!orth_flags(\"NASA\").contains(OrthFlags::UPPER_CAMEL));\n        assert!(!orth_flags(\"Hi\").contains(OrthFlags::UPPER_CAMEL));\n    }\n\n    #[test]\n    fn test_roman_numeral_flags() {\n        assert!(orth_flags(\"MCMXCIV\").contains(OrthFlags::ROMAN_NUMERALS));\n        assert!(orth_flags(\"mdccclxxi\").contains(OrthFlags::ROMAN_NUMERALS));\n        assert!(orth_flags(\"MMXXI\").contains(OrthFlags::ROMAN_NUMERALS));\n        assert!(orth_flags(\"mcmxciv\").contains(OrthFlags::ROMAN_NUMERALS));\n        assert!(orth_flags(\"MCMXCIV\").contains(OrthFlags::ROMAN_NUMERALS));\n        assert!(orth_flags(\"MMI\").contains(OrthFlags::ROMAN_NUMERALS));\n        assert!(orth_flags(\"MMXXV\").contains(OrthFlags::ROMAN_NUMERALS));\n    }\n\n    #[test]\n    fn test_single_roman_numeral_flags() {\n        assert!(orth_flags(\"i\").contains(OrthFlags::ROMAN_NUMERALS));\n    }\n\n    #[test]\n    fn empty_string_is_not_roman_numeral() {\n        assert!(!orth_flags(\"\").contains(OrthFlags::ROMAN_NUMERALS));\n    }\n\n    #[test]\n    fn dont_allow_mixed_case_roman_numerals() {\n        assert!(!orth_flags(\"MCMlxxxVIII\").contains(OrthFlags::ROMAN_NUMERALS));\n    }\n\n    #[test]\n    fn dont_allow_looks_like_but_isnt_roman_numeral() {\n        assert!(!orth_flags(\"mdxlivx\").contains(OrthFlags::ROMAN_NUMERALS));\n        assert!(!orth_flags(\"XIXIVV\").contains(OrthFlags::ROMAN_NUMERALS));\n    }\n\n    #[test]\n    fn australia_lexeme_is_titlecase_even_when_word_is_lowercase() {\n        assert!(md(\"australia\").orth_info.contains(OrthFlags::TITLECASE));\n    }\n\n    #[test]\n    fn australia_lexeme_is_titlecase_even_when_word_is_all_caps() {\n        assert!(md(\"AUSTRALIA\").orth_info.contains(OrthFlags::TITLECASE));\n    }\n\n    #[test]\n    fn australia_lexeme_is_titlecase_even_when_word_is_mixed_case() {\n        assert!(md(\"AuStrAlIA\").orth_info.contains(OrthFlags::TITLECASE));\n    }\n\n    #[test]\n    fn db_and_kw_symbols_are_lower_camel_case() {\n        // dB, kW\n        assert!(md(\"db\").orth_info.contains(OrthFlags::LOWER_CAMEL));\n    }\n\n    #[test]\n    fn am_is_lowercase_and_titlecase_and_all_caps() {\n        // am, Am, AM\n        let metadata = md(\"am\");\n        assert!(metadata.orth_info.contains(OrthFlags::LOWERCASE));\n        assert!(metadata.orth_info.contains(OrthFlags::TITLECASE));\n        assert!(metadata.orth_info.contains(OrthFlags::ALLCAPS));\n    }\n\n    #[test]\n    fn reading_is_both_lowercase_and_titlecase() {\n        // Reading is a town in England\n        let metadata = md(\"reading\");\n        assert!(metadata.orth_info.contains(OrthFlags::LOWERCASE));\n        assert!(metadata.orth_info.contains(OrthFlags::TITLECASE));\n    }\n\n    #[test]\n    fn ebay_and_esim_are_lower_camel() {\n        // eBay eSIM\n        let md1 = md(\"ebay\");\n        assert!(md1.orth_info.contains(OrthFlags::LOWER_CAMEL));\n        let md2 = md(\"esim\");\n        assert!(md2.orth_info.contains(OrthFlags::LOWER_CAMEL));\n    }\n}\n"
  },
  {
    "path": "harper-core/src/document.rs",
    "content": "use std::cmp::Ordering;\nuse std::collections::VecDeque;\nuse std::fmt::Display;\n\nuse harper_brill::{Chunker, Tagger, brill_tagger, burn_chunker};\nuse itertools::Itertools;\nuse paste::paste;\n\nuse crate::expr::{Expr, ExprExt, FirstMatchOf, Repeating, SequenceExpr};\nuse crate::parsers::{Markdown, MarkdownOptions, Parser, PlainEnglish};\nuse crate::punctuation::Punctuation;\nuse crate::spell::{Dictionary, FstDictionary};\nuse crate::vec_ext::VecExt;\nuse crate::{CharStringExt, FatStringToken, FatToken, Lrc, Token, TokenKind, TokenStringExt};\nuse crate::{OrdinalSuffix, Span};\n\n/// A document containing some amount of lexed and parsed English text.\n#[derive(Debug, Clone)]\npub struct Document {\n    source: Lrc<Vec<char>>,\n    tokens: Vec<Token>,\n}\n\nimpl Default for Document {\n    fn default() -> Self {\n        Self::new(\"\", &PlainEnglish, &FstDictionary::curated())\n    }\n}\n\nimpl Document {\n    /// Locate all the tokens that intersect a provided span.\n    ///\n    /// Desperately needs optimization.\n    pub fn token_indices_intersecting(&self, span: Span<char>) -> Vec<usize> {\n        self.tokens()\n            .enumerate()\n            .filter_map(|(idx, tok)| tok.span.overlaps_with(span).then_some(idx))\n            .collect()\n    }\n\n    /// Locate all the tokens that intersect a provided span and convert them to [`FatToken`]s.\n    ///\n    /// Desperately needs optimization.\n    pub fn fat_tokens_intersecting(&self, span: Span<char>) -> Vec<FatToken> {\n        let indices = self.token_indices_intersecting(span);\n\n        indices\n            .into_iter()\n            .map(|i| self.tokens[i].to_fat(&self.source))\n            .collect()\n    }\n\n    /// Lexes and parses text to produce a document using a provided language\n    /// parser and dictionary.\n    pub fn new(text: &str, parser: &impl Parser, dictionary: &impl Dictionary) -> Self {\n        let source: Vec<_> = text.chars().collect();\n\n        Self::new_from_vec(Lrc::new(source), parser, dictionary)\n    }\n\n    /// Lexes and parses text to produce a document using a provided language\n    /// parser and the included curated dictionary.\n    pub fn new_curated(text: &str, parser: &impl Parser) -> Self {\n        let source: Vec<_> = text.chars().collect();\n\n        Self::new_from_vec(Lrc::new(source), parser, &FstDictionary::curated())\n    }\n\n    /// Lexes and parses text to produce a document using a provided language\n    /// parser and dictionary.\n    pub fn new_from_vec(\n        source: Lrc<Vec<char>>,\n        parser: &impl Parser,\n        dictionary: &impl Dictionary,\n    ) -> Self {\n        let tokens = parser.parse(&source);\n\n        let mut document = Self { source, tokens };\n        document.parse(dictionary);\n\n        document\n    }\n\n    /// Create a new document from character data using the built-in [`PlainEnglish`]\n    /// parser and curated dictionary. This avoids string-to-char conversions.\n    pub fn new_plain_english_curated_chars(source: &[char]) -> Self {\n        Self::new_from_vec(\n            Lrc::new(source.to_vec()),\n            &PlainEnglish,\n            &FstDictionary::curated(),\n        )\n    }\n\n    /// Parse text to produce a document using the built-in [`PlainEnglish`]\n    /// parser and curated dictionary.\n    pub fn new_plain_english_curated(text: &str) -> Self {\n        Self::new(text, &PlainEnglish, &FstDictionary::curated())\n    }\n\n    /// Create a new document simply by tokenizing the provided input and applying fix-ups. The\n    /// contained words will not contain any metadata.\n    ///\n    /// This avoids running potentially expensive metadata generation code, so this is more\n    /// efficient if you don't need that information.\n    pub(crate) fn new_basic_tokenize(text: &str, parser: &impl Parser) -> Self {\n        let source = Lrc::new(text.chars().collect_vec());\n        let tokens = parser.parse(&source);\n        let mut document = Self { source, tokens };\n        document.apply_fixups();\n        document\n    }\n\n    /// Parse text to produce a document using the built-in [`PlainEnglish`]\n    /// parser and a provided dictionary.\n    pub fn new_plain_english(text: &str, dictionary: &impl Dictionary) -> Self {\n        Self::new(text, &PlainEnglish, dictionary)\n    }\n\n    /// Parse text to produce a document using the built-in [`Markdown`] parser\n    /// and curated dictionary.\n    pub fn new_markdown_curated(text: &str, markdown_options: MarkdownOptions) -> Self {\n        Self::new(\n            text,\n            &Markdown::new(markdown_options),\n            &FstDictionary::curated(),\n        )\n    }\n\n    /// Create a new document from character data using the built-in [`Markdown`] parser\n    /// and curated dictionary. This avoids string-to-char conversions.\n    pub fn new_markdown_default_curated_chars(chars: &[char]) -> Self {\n        Self::new_from_vec(\n            chars.to_vec().into(),\n            &Markdown::default(),\n            &FstDictionary::curated(),\n        )\n    }\n\n    /// Parse text to produce a document using the built-in [`Markdown`] parser\n    /// and curated dictionary with the default Markdown configuration.\n    pub fn new_markdown_default_curated(text: &str) -> Self {\n        Self::new_markdown_curated(text, MarkdownOptions::default())\n    }\n\n    /// Parse text to produce a document using the built-in [`PlainEnglish`]\n    /// parser and the curated dictionary.\n    pub fn new_markdown(\n        text: &str,\n        markdown_options: MarkdownOptions,\n        dictionary: &impl Dictionary,\n    ) -> Self {\n        Self::new(text, &Markdown::new(markdown_options), dictionary)\n    }\n\n    /// Parse text to produce a document using the built-in [`PlainEnglish`]\n    /// parser and the curated dictionary with the default Markdown configuration.\n    pub fn new_markdown_default(text: &str, dictionary: &impl Dictionary) -> Self {\n        Self::new_markdown(text, MarkdownOptions::default(), dictionary)\n    }\n\n    fn apply_fixups(&mut self) {\n        self.condense_spaces();\n        self.condense_newlines();\n        self.newlines_to_breaks();\n        self.condense_dotted_initialisms();\n        self.condense_number_suffixes();\n        self.condense_ellipsis();\n        self.condense_dotted_truncations();\n        self.condense_common_top_level_domains();\n        self.condense_filename_extensions();\n        self.condense_tldr();\n        self.condense_ampersand_pairs();\n        self.condense_slash_pairs();\n        self.match_quotes();\n    }\n\n    /// Re-parse important language constructs.\n    ///\n    /// Should be run after every change to the underlying [`Self::source`].\n    fn parse(&mut self, dictionary: &impl Dictionary) {\n        self.apply_fixups();\n\n        let chunker = burn_chunker();\n        let tagger = brill_tagger();\n\n        for sent in self.tokens.iter_sentences_mut() {\n            let token_strings: Vec<_> = sent\n                .iter()\n                .filter(|t| !t.kind.is_whitespace())\n                .map(|t| t.span.get_content_string(&self.source))\n                .collect();\n\n            let token_tags = tagger.tag_sentence(&token_strings);\n            let np_flags = chunker.chunk_sentence(&token_strings, &token_tags);\n\n            let mut i = 0;\n\n            // Annotate DictWord metadata\n            for token in sent.iter_mut() {\n                if let TokenKind::Word(meta) = &mut token.kind {\n                    let word_source = token.span.get_content(&self.source);\n                    let mut found_meta = dictionary\n                        .get_word_metadata(word_source)\n                        .map(|c| c.into_owned());\n\n                    if let Some(inner) = &mut found_meta {\n                        inner.pos_tag = token_tags[i].or_else(|| inner.infer_pos_tag());\n                        inner.np_member = Some(np_flags[i]);\n                    }\n\n                    *meta = found_meta;\n                    i += 1;\n                } else if !token.kind.is_whitespace() {\n                    i += 1;\n                }\n            }\n        }\n    }\n\n    /// Convert all sets of newlines greater than 2 to paragraph breaks.\n    fn newlines_to_breaks(&mut self) {\n        for token in &mut self.tokens {\n            if let TokenKind::Newline(n) = token.kind\n                && n >= 2\n            {\n                token.kind = TokenKind::ParagraphBreak;\n            }\n        }\n    }\n\n    /// Given a list of indices, this function removes the subsequent\n    /// `stretch_len - 1` elements after each index.\n    ///\n    /// Will extend token spans to include removed elements.\n    /// Assumes condensed tokens are contiguous in source text.\n    fn condense_indices(&mut self, indices: &[usize], stretch_len: usize) {\n        // Update spans\n        for idx in indices {\n            let end_tok = self.tokens[idx + stretch_len - 1].clone();\n            let start_tok = &mut self.tokens[*idx];\n\n            start_tok.span.end = end_tok.span.end;\n        }\n\n        // Trim\n        let old = self.tokens.clone();\n        self.tokens.clear();\n\n        // Keep first chunk.\n        self.tokens\n            .extend_from_slice(&old[0..indices.first().copied().unwrap_or(indices.len())]);\n\n        let mut iter = indices.iter().peekable();\n\n        while let (Some(a_idx), b) = (iter.next(), iter.peek()) {\n            self.tokens.push(old[*a_idx].clone());\n\n            if let Some(b_idx) = b {\n                self.tokens\n                    .extend_from_slice(&old[a_idx + stretch_len..**b_idx]);\n            }\n        }\n\n        // Keep last chunk.\n        self.tokens.extend_from_slice(\n            &old[indices\n                .last()\n                .map(|v| v + stretch_len)\n                .unwrap_or(indices.len())..],\n        );\n    }\n\n    pub fn get_token_at_char_index(&self, char_index: usize) -> Option<&Token> {\n        let index = self\n            .tokens\n            .binary_search_by(|t| {\n                if t.span.overlaps_with(Span::new_with_len(char_index, 1)) {\n                    Ordering::Equal\n                } else {\n                    t.span.start.cmp(&char_index)\n                }\n            })\n            .ok()?;\n\n        Some(&self.tokens[index])\n    }\n\n    /// Defensively attempt to grab a specific token.\n    pub fn get_token(&self, index: usize) -> Option<&Token> {\n        self.tokens.get(index)\n    }\n\n    /// Get a token at a signed offset from a base index, or None if out of bounds.\n    pub fn get_token_offset(&self, base: usize, offset: isize) -> Option<&Token> {\n        match base.checked_add_signed(offset) {\n            None => None,\n            Some(idx) => self.get_token(idx),\n        }\n    }\n\n    /// Get an iterator over all the tokens contained in the document.\n    pub fn tokens(&self) -> impl Iterator<Item = &Token> + '_ {\n        self.tokens.iter()\n    }\n\n    pub fn iter_nominal_phrases(&self) -> impl Iterator<Item = &[Token]> {\n        fn is_np_member(t: &Token) -> bool {\n            t.kind\n                .as_word()\n                .and_then(|x| x.as_ref())\n                .and_then(|w| w.np_member)\n                .unwrap_or(false)\n        }\n\n        fn trim(slice: &[Token]) -> &[Token] {\n            let mut start = 0;\n            let mut end = slice.len();\n            while start < end && slice[start].kind.is_whitespace() {\n                start += 1;\n            }\n            while end > start && slice[end - 1].kind.is_whitespace() {\n                end -= 1;\n            }\n            &slice[start..end]\n        }\n\n        self.tokens\n            .as_slice()\n            .split(|t| !(is_np_member(t) || t.kind.is_whitespace()))\n            .filter_map(|s| {\n                let s = trim(s);\n                if s.iter().any(is_np_member) {\n                    Some(s)\n                } else {\n                    None\n                }\n            })\n    }\n\n    /// Get an iterator over all the tokens contained in the document.\n    pub fn fat_tokens(&self) -> impl Iterator<Item = FatToken> + '_ {\n        self.tokens().map(|token| token.to_fat(&self.source))\n    }\n\n    /// Get the next or previous word token relative to a base index, if separated by whitespace.\n    /// Returns None if the next/previous token is not a word or does not exist.\n    pub fn get_next_word_from_offset(&self, base: usize, offset: isize) -> Option<&Token> {\n        // Look for whitespace at the expected offset\n        if !self.get_token_offset(base, offset)?.kind.is_whitespace() {\n            return None;\n        }\n        // Now look beyond the whitespace for a word token\n        let word_token = self.get_token_offset(base, offset + offset.signum());\n        let word_token = word_token?;\n        word_token.kind.is_word().then_some(word_token)\n    }\n\n    /// Get an iterator over all the tokens contained in the document.\n    pub fn fat_string_tokens(&self) -> impl Iterator<Item = FatStringToken> + '_ {\n        self.fat_tokens().map(|t| t.into())\n    }\n\n    pub fn get_span_content(&self, span: &Span<char>) -> &[char] {\n        span.get_content(&self.source)\n    }\n\n    pub fn get_span_content_str(&self, span: &Span<char>) -> String {\n        String::from_iter(self.get_span_content(span))\n    }\n\n    pub fn get_full_string(&self) -> String {\n        self.get_span_content_str(&Span::new(0, self.source.len()))\n    }\n\n    pub fn get_full_content(&self) -> &[char] {\n        &self.source\n    }\n\n    pub fn get_source(&self) -> &[char] {\n        &self.source\n    }\n\n    pub fn get_tokens(&self) -> &[Token] {\n        &self.tokens\n    }\n\n    /// Searches for quotation marks and fills the\n    /// [`Punctuation::Quote::twin_loc`] field. This is on a best-effort\n    /// basis.\n    ///\n    /// Current algorithm is based on https://leancrew.com/all-this/2025/03/a-mac-smart-quote-curiosity\n    fn match_quotes(&mut self) {\n        let mut pg_indices: Vec<_> = vec![0];\n        pg_indices.extend(self.iter_paragraph_break_indices());\n        pg_indices.push(self.tokens.len());\n\n        // Avoid allocation in loop\n        let mut quote_indices = Vec::new();\n        let mut open_quote_indices = Vec::new();\n\n        for (start, end) in pg_indices.into_iter().tuple_windows() {\n            let pg = &mut self.tokens[start..end];\n\n            quote_indices.clear();\n            quote_indices.extend(pg.iter_quote_indices());\n            open_quote_indices.clear();\n\n            // Find open quotes first.\n            for quote in &quote_indices {\n                let is_open = *quote == 0\n                    || pg[0..*quote].iter_word_likes().next().is_none()\n                    || pg[quote - 1].kind.is_whitespace()\n                    || matches!(\n                        pg[quote - 1].kind.as_punctuation(),\n                        Some(Punctuation::LessThan)\n                            | Some(Punctuation::OpenRound)\n                            | Some(Punctuation::OpenSquare)\n                            | Some(Punctuation::OpenCurly)\n                            | Some(Punctuation::Apostrophe)\n                    );\n\n                if is_open {\n                    open_quote_indices.push(*quote);\n                }\n            }\n\n            while let Some(open_idx) = open_quote_indices.pop() {\n                let Some(close_idx) = pg[open_idx + 1..].iter_quote_indices().next() else {\n                    continue;\n                };\n\n                if pg[close_idx + open_idx + 1]\n                    .kind\n                    .as_quote()\n                    .unwrap()\n                    .twin_loc\n                    .is_some()\n                {\n                    continue;\n                }\n\n                pg[open_idx].kind.as_mut_quote().unwrap().twin_loc =\n                    Some(close_idx + open_idx + start + 1);\n                pg[close_idx + open_idx + 1]\n                    .kind\n                    .as_mut_quote()\n                    .unwrap()\n                    .twin_loc = Some(open_idx + start);\n            }\n        }\n    }\n\n    /// Searches for number suffixes and condenses them down into single tokens\n    fn condense_number_suffixes(&mut self) {\n        if self.tokens.len() < 2 {\n            return;\n        }\n\n        let mut replace_starts = Vec::new();\n\n        for idx in 0..self.tokens.len() - 1 {\n            let b = &self.tokens[idx + 1];\n            let a = &self.tokens[idx];\n\n            // TODO: Allow spaces between `a` and `b`\n\n            if let (TokenKind::Number(..), TokenKind::Word(..)) = (&a.kind, &b.kind)\n                && let Some(found_suffix) =\n                    OrdinalSuffix::from_chars(self.get_span_content(&b.span))\n            {\n                self.tokens[idx].kind.as_mut_number().unwrap().suffix = Some(found_suffix);\n                replace_starts.push(idx);\n            }\n        }\n\n        self.condense_indices(&replace_starts, 2);\n    }\n\n    /// Searches for multiple sequential space tokens and condenses them down\n    /// into one.\n    fn condense_spaces(&mut self) {\n        let mut cursor = 0;\n        let copy = self.tokens.clone();\n\n        let mut remove_these = VecDeque::new();\n\n        while cursor < self.tokens.len() {\n            // Locate a stretch of one or more newline tokens.\n            let start_tok = &mut self.tokens[cursor];\n\n            if let TokenKind::Space(start_count) = &mut start_tok.kind {\n                loop {\n                    cursor += 1;\n\n                    if cursor >= copy.len() {\n                        break;\n                    }\n\n                    let child_tok = &copy[cursor];\n\n                    // Only condense adjacent spans\n                    if start_tok.span.end != child_tok.span.start {\n                        break;\n                    }\n\n                    if let TokenKind::Space(n) = child_tok.kind {\n                        *start_count += n;\n                        start_tok.span.end = child_tok.span.end;\n                        remove_these.push_back(cursor);\n                        cursor += 1;\n                    } else {\n                        break;\n                    };\n                }\n            }\n\n            cursor += 1;\n        }\n\n        self.tokens.remove_indices(remove_these);\n    }\n\n    thread_local! {\n        static DOTTED_TRUNCATION_EXPR: Lrc<FirstMatchOf> = Document::uncached_dotted_truncation_expr();\n    }\n\n    fn uncached_dotted_truncation_expr() -> Lrc<FirstMatchOf> {\n        Lrc::new(FirstMatchOf::new(vec![\n            Box::new(SequenceExpr::word_set(&[\"esp\", \"etc\", \"vs\"]).then_period()),\n            Box::new(\n                SequenceExpr::aco(\"et\")\n                    .then_whitespace()\n                    .t_aco(\"al\")\n                    .then_period(),\n            ),\n        ]))\n    }\n\n    /// Assumes that the first matched token is the canonical one to be condensed into.\n    /// Takes a callback that can be used to retroactively edit the canonical token afterwards.\n    fn condense_expr<F>(&mut self, expr: &impl Expr, edit: F)\n    where\n        F: Fn(&mut Token),\n    {\n        let matches = expr.iter_matches_in_doc(self).collect::<Vec<_>>();\n\n        let mut remove_indices = VecDeque::with_capacity(matches.len());\n\n        for m in matches {\n            remove_indices.extend(m.start + 1..m.end);\n            self.tokens[m.start].span = self.tokens[m.into_iter()].span().unwrap();\n            edit(&mut self.tokens[m.start]);\n        }\n\n        self.tokens.remove_indices(remove_indices);\n    }\n\n    fn condense_dotted_truncations(&mut self) {\n        self.condense_expr(&Self::DOTTED_TRUNCATION_EXPR.with(|v| v.clone()), |_| {})\n    }\n\n    /// Searches for multiple sequential newline tokens and condenses them down\n    /// into one.\n    fn condense_newlines(&mut self) {\n        let mut cursor = 0;\n        let copy = self.tokens.clone();\n\n        let mut remove_these = VecDeque::new();\n\n        while cursor < self.tokens.len() {\n            // Locate a stretch of one or more newline tokens.\n            let start_tok = &mut self.tokens[cursor];\n\n            if let TokenKind::Newline(start_count) = &mut start_tok.kind {\n                loop {\n                    cursor += 1;\n\n                    if cursor >= copy.len() {\n                        break;\n                    }\n\n                    let child_tok = &copy[cursor];\n                    if let TokenKind::Newline(n) = child_tok.kind {\n                        *start_count += n;\n                        start_tok.span.end = child_tok.span.end;\n                        remove_these.push_back(cursor);\n                        cursor += 1;\n                    } else {\n                        break;\n                    };\n                }\n            }\n\n            cursor += 1;\n        }\n\n        self.tokens.remove_indices(remove_these);\n    }\n\n    /// Condenses words like \"i.e.\", \"e.g.\" and \"N.S.A.\" down to single words\n    /// using a state machine.\n    fn condense_dotted_initialisms(&mut self) {\n        if self.tokens.len() < 2 {\n            return;\n        }\n\n        let mut to_remove = VecDeque::new();\n\n        let mut cursor = 1;\n\n        let mut initialism_start = None;\n\n        loop {\n            let a = &self.tokens[cursor - 1];\n            let b = &self.tokens[cursor];\n\n            let is_initialism_chunk = a.kind.is_word() && a.span.len() == 1 && b.kind.is_period();\n\n            if is_initialism_chunk {\n                if initialism_start.is_none() {\n                    initialism_start = Some(cursor - 1);\n                } else {\n                    to_remove.push_back(cursor - 1);\n                }\n\n                to_remove.push_back(cursor);\n                cursor += 1;\n            } else {\n                if let Some(start) = initialism_start {\n                    let end = self.tokens[cursor - 2].span.end;\n                    let start_tok: &mut Token = &mut self.tokens[start];\n                    start_tok.span.end = end;\n                }\n\n                initialism_start = None;\n            }\n\n            cursor += 1;\n\n            if cursor >= self.tokens.len() - 1 {\n                break;\n            }\n        }\n\n        self.tokens.remove_indices(to_remove);\n    }\n\n    /// Condenses likely filename extensions down to single tokens.\n    fn condense_filename_extensions(&mut self) {\n        if self.tokens.len() < 2 {\n            return;\n        }\n\n        let mut to_remove = VecDeque::new();\n\n        let mut cursor = 1;\n\n        let mut ext_start = None;\n\n        loop {\n            // left context, dot, extension, right context\n            let l = self.get_token_offset(cursor, -2);\n            let d = &self.tokens[cursor - 1];\n            let x = &self.tokens[cursor];\n            let r = self.get_token_offset(cursor, 1);\n\n            let is_ext_chunk = d.kind.is_period()\n                && x.kind.is_word()\n                && x.span.len() <= 3\n                && ((l.is_none_or(|t| t.kind.is_whitespace())\n                    && r.is_none_or(|t| t.kind.is_whitespace()))\n                    || (l.is_some_and(|t| t.kind.is_open_round())\n                        && r.is_some_and(|t| t.kind.is_close_round())))\n                && {\n                    let ext_chars = x.span.get_content(&self.source);\n                    ext_chars.iter().all(|c| c.is_ascii_lowercase())\n                        || ext_chars.iter().all(|c| c.is_ascii_uppercase())\n                };\n\n            if is_ext_chunk {\n                if ext_start.is_none() {\n                    ext_start = Some(cursor - 1);\n                    self.tokens[cursor - 1].kind = TokenKind::Unlintable;\n                } else {\n                    to_remove.push_back(cursor - 1);\n                }\n\n                to_remove.push_back(cursor);\n                cursor += 1;\n            } else {\n                if let Some(start) = ext_start {\n                    let end = self.tokens[cursor - 2].span.end;\n                    let start_tok: &mut Token = &mut self.tokens[start];\n                    start_tok.span.end = end;\n                }\n\n                ext_start = None;\n            }\n\n            cursor += 1;\n\n            if cursor >= self.tokens.len() {\n                break;\n            }\n        }\n\n        self.tokens.remove_indices(to_remove);\n    }\n\n    /// Condenses common top-level domains (for example: `.blog`, `.com`) down to single tokens.\n    fn condense_common_top_level_domains(&mut self) {\n        const COMMON_TOP_LEVEL_DOMAINS: &[&str; 106] = &[\n            \"ai\", \"app\", \"blog\", \"co\", \"com\", \"dev\", \"edu\", \"gov\", \"info\", \"io\", \"me\", \"mil\",\n            \"net\", \"org\", \"shop\", \"tech\", \"uk\", \"us\", \"xyz\", \"jp\", \"de\", \"fr\", \"br\", \"it\", \"ru\",\n            \"es\", \"pl\", \"ca\", \"au\", \"cn\", \"in\", \"nl\", \"eu\", \"ch\", \"id\", \"at\", \"kr\", \"cz\", \"mx\",\n            \"be\", \"tv\", \"se\", \"tr\", \"tw\", \"al\", \"ua\", \"ir\", \"vn\", \"cl\", \"sk\", \"ly\", \"cc\", \"to\",\n            \"no\", \"fi\", \"pt\", \"dk\", \"ar\", \"hu\", \"tk\", \"gr\", \"il\", \"news\", \"ro\", \"my\", \"biz\", \"ie\",\n            \"za\", \"nz\", \"sg\", \"ee\", \"th\", \"pe\", \"bg\", \"hk\", \"rs\", \"lt\", \"link\", \"ph\", \"club\", \"si\",\n            \"site\", \"mobi\", \"by\", \"cat\", \"wiki\", \"la\", \"ga\", \"xxx\", \"cf\", \"hr\", \"ng\", \"jobs\",\n            \"online\", \"kz\", \"ug\", \"gq\", \"ae\", \"is\", \"lv\", \"pro\", \"fm\", \"tips\", \"ms\", \"sa\", \"int\",\n        ];\n\n        if self.tokens.len() < 2 {\n            return;\n        }\n\n        let mut to_remove = VecDeque::new();\n        for cursor in 1..self.tokens.len() {\n            // left context, dot, tld, right context\n            let l = self.get_token_offset(cursor, -2);\n            let d = &self.tokens[cursor - 1];\n            let tld = &self.tokens[cursor];\n            let r = self.get_token_offset(cursor, 1);\n\n            let is_tld_chunk = d.kind.is_period()\n                && tld.kind.is_word()\n                && tld\n                    .span\n                    .get_content(&self.source)\n                    .iter()\n                    .all(|c| c.is_ascii_alphabetic())\n                && tld\n                    .span\n                    .get_content(&self.source)\n                    .eq_any_ignore_ascii_case_str(COMMON_TOP_LEVEL_DOMAINS)\n                && ((l.is_none_or(|t| t.kind.is_whitespace())\n                    && r.is_none_or(|t| t.kind.is_whitespace()))\n                    || (l.is_some_and(|t| t.kind.is_open_round())\n                        && r.is_some_and(|t| t.kind.is_close_round())));\n\n            if is_tld_chunk {\n                self.tokens[cursor - 1].kind = TokenKind::Unlintable;\n                self.tokens[cursor - 1].span.end = self.tokens[cursor].span.end;\n                to_remove.push_back(cursor);\n            }\n        }\n\n        self.tokens.remove_indices(to_remove);\n    }\n\n    /// Condenses \"tl;dr\" down to a single word token.\n    fn condense_tldr(&mut self) {\n        if self.tokens.len() < 3 {\n            return;\n        }\n\n        let mut to_remove = VecDeque::new();\n        let mut cursor = 2;\n\n        loop {\n            let tl = &self.tokens[cursor - 2];\n            let simicolon = &self.tokens[cursor - 1];\n            let dr = &self.tokens[cursor];\n\n            let is_tldr_chunk = tl.kind.is_word()\n                && tl.span.len() == 2\n                && tl\n                    .span\n                    .get_content(&self.source)\n                    .eq_ignore_ascii_case_chars(&['t', 'l'])\n                && simicolon.kind.is_semicolon()\n                && dr.kind.is_word()\n                && dr.span.len() >= 2\n                && dr.span.len() <= 3\n                && dr\n                    .span\n                    .get_content(&self.source)\n                    .eq_any_ignore_ascii_case_chars(&[&['d', 'r'], &['d', 'r', 's']]);\n\n            if is_tldr_chunk {\n                // Update the first token to be the full \"tl;dr\" as a word\n                self.tokens[cursor - 2].span = Span::new(\n                    self.tokens[cursor - 2].span.start,\n                    self.tokens[cursor].span.end,\n                );\n\n                // Mark the semicolon and \"dr\" tokens for removal\n                to_remove.push_back(cursor - 1);\n                to_remove.push_back(cursor);\n            }\n\n            // Skip ahead since we've processed these tokens\n            cursor += 1;\n\n            if cursor >= self.tokens.len() {\n                break;\n            }\n        }\n\n        // Remove the marked tokens in reverse order to maintain correct indices\n        self.tokens.remove_indices(to_remove);\n    }\n\n    /// Allows condensing of delimited pairs of tokens into a single token.\n    ///\n    /// # Arguments\n    ///\n    /// * `is_delimiter` - A function that returns `true` if the token is a delimiter.\n    /// * `valid_pairs` - A slice of tuples representing the valid pairs of tokens to condense.\n    ///\n    fn condense_delimited_pairs<F>(&mut self, is_delimiter: F, valid_pairs: &[(char, char)])\n    where\n        F: Fn(&TokenKind) -> bool,\n    {\n        if self.tokens.len() < 3 {\n            return;\n        }\n\n        let mut to_remove = VecDeque::new();\n        let mut cursor = 2;\n\n        loop {\n            let l1 = &self.tokens[cursor - 2];\n            let delim = &self.tokens[cursor - 1];\n            let l2 = &self.tokens[cursor];\n\n            let is_delimited_chunk = l1.kind.is_word()\n                && l1.span.len() == 1\n                && is_delimiter(&delim.kind)\n                && l2.kind.is_word()\n                && l2.span.len() == 1;\n\n            if is_delimited_chunk {\n                let (l1, l2) = (\n                    l1.span.get_content(&self.source).first(),\n                    l2.span.get_content(&self.source).first(),\n                );\n\n                let is_valid_pair = match (l1, l2) {\n                    (Some(l1), Some(l2)) => {\n                        let pair = (l1.to_ascii_lowercase(), l2.to_ascii_lowercase());\n                        valid_pairs.contains(&pair)\n                    }\n                    _ => false,\n                };\n\n                if is_valid_pair {\n                    self.tokens[cursor - 2].span = Span::new(\n                        self.tokens[cursor - 2].span.start,\n                        self.tokens[cursor].span.end,\n                    );\n                    to_remove.push_back(cursor - 1);\n                    to_remove.push_back(cursor);\n                }\n            }\n\n            cursor += 1;\n            if cursor >= self.tokens.len() {\n                break;\n            }\n        }\n\n        self.tokens.remove_indices(to_remove);\n    }\n\n    // Condenses \"ampersand pairs\" such as \"R&D\" or \"Q&A\" into single tokens.\n    fn condense_ampersand_pairs(&mut self) {\n        self.condense_delimited_pairs(\n            |kind| kind.is_ampersand(),\n            &[\n                ('b', 'b'), // bed & breakfast\n                ('b', 'w'), // black & white\n                ('g', 't'), // gin & tonic\n                ('k', 'r'), // Kernighan & Ritchie\n                ('q', 'a'), // question & answer\n                ('r', 'b'), // rhythm & blues\n                ('r', 'd'), // research & development\n                ('r', 'r'), // rest & relaxation\n                ('s', 'p'), // Standard & Poor's\n            ],\n        );\n    }\n\n    // Condenses \"slash pairs\" such as \"I/O\" into single tokens.\n    fn condense_slash_pairs(&mut self) {\n        self.condense_delimited_pairs(\n            |kind| kind.is_slash(),\n            &[\n                ('a', 'c'), // aircon; alternating current\n                ('b', 'w'), // black and white\n                ('c', 'o'), // care of\n                ('d', 'c'), // direct current\n                ('d', 'l'), // download\n                ('i', 'o'), // input/output\n                ('j', 'k'), // just kidding\n                ('n', 'a'), // not applicable\n                ('r', 'c'), // radio control\n                ('s', 'n'), // serial number\n                ('y', 'n'), // yes/no\n                ('y', 'o'), // years old\n            ],\n        );\n    }\n\n    fn uncached_ellipsis_pattern() -> Lrc<Repeating> {\n        let period = SequenceExpr::default().then_period();\n        Lrc::new(Repeating::new(Box::new(period), 2))\n    }\n\n    thread_local! {\n        static ELLIPSIS_EXPR: Lrc<Repeating> = Document::uncached_ellipsis_pattern();\n    }\n\n    fn condense_ellipsis(&mut self) {\n        let expr = Self::ELLIPSIS_EXPR.with(|v| v.clone());\n        self.condense_expr(&expr, |tok| {\n            tok.kind = TokenKind::Punctuation(Punctuation::Ellipsis)\n        });\n    }\n}\n\n/// Creates functions necessary to implement [`TokenStringExt]` on a document.\nmacro_rules! create_fns_on_doc {\n    ($thing:ident) => {\n        paste! {\n            fn [< first_ $thing >](&self) -> Option<&Token> {\n                self.tokens.[< first_ $thing >]()\n            }\n\n            fn [< last_ $thing >](&self) -> Option<&Token> {\n                self.tokens.[< last_ $thing >]()\n            }\n\n            fn [< last_ $thing _index>](&self) -> Option<usize> {\n                self.tokens.[< last_ $thing _index >]()\n            }\n\n            fn [<iter_ $thing _indices>](&self) -> impl DoubleEndedIterator<Item = usize> + '_ {\n                self.tokens.[< iter_ $thing _indices >]()\n            }\n\n            fn [<iter_ $thing s>](&self) -> impl Iterator<Item = &Token> + '_ {\n                self.tokens.[< iter_ $thing s >]()\n            }\n        }\n    };\n}\n\nimpl TokenStringExt for Document {\n    create_fns_on_doc!(adjective);\n    create_fns_on_doc!(apostrophe);\n    create_fns_on_doc!(at);\n    create_fns_on_doc!(chunk_terminator);\n    create_fns_on_doc!(comma);\n    create_fns_on_doc!(conjunction);\n    create_fns_on_doc!(currency);\n    create_fns_on_doc!(ellipsis);\n    create_fns_on_doc!(hostname);\n    create_fns_on_doc!(likely_homograph);\n    create_fns_on_doc!(noun);\n    create_fns_on_doc!(number);\n    create_fns_on_doc!(paragraph_break);\n    create_fns_on_doc!(pipe);\n    create_fns_on_doc!(preposition);\n    create_fns_on_doc!(punctuation);\n    create_fns_on_doc!(quote);\n    create_fns_on_doc!(sentence_terminator);\n    create_fns_on_doc!(space);\n    create_fns_on_doc!(unlintable);\n    create_fns_on_doc!(verb);\n    create_fns_on_doc!(word);\n    create_fns_on_doc!(word_like);\n    create_fns_on_doc!(heading_start);\n\n    fn first_sentence_word(&self) -> Option<&Token> {\n        self.tokens.first_sentence_word()\n    }\n\n    fn first_non_whitespace(&self) -> Option<&Token> {\n        self.tokens.first_non_whitespace()\n    }\n\n    fn span(&self) -> Option<Span<char>> {\n        self.tokens.span()\n    }\n\n    fn iter_linking_verb_indices(&self) -> impl Iterator<Item = usize> + '_ {\n        self.tokens.iter_linking_verb_indices()\n    }\n\n    fn iter_linking_verbs(&self) -> impl Iterator<Item = &Token> + '_ {\n        self.tokens.iter_linking_verbs()\n    }\n\n    fn iter_chunks(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {\n        self.tokens.iter_chunks()\n    }\n\n    fn iter_paragraphs(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {\n        self.tokens.iter_paragraphs()\n    }\n\n    fn iter_headings(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {\n        self.tokens.iter_headings()\n    }\n\n    fn iter_sentences(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {\n        self.tokens.iter_sentences()\n    }\n\n    fn iter_sentences_mut(&mut self) -> impl Iterator<Item = &'_ mut [Token]> + '_ {\n        self.tokens.iter_sentences_mut()\n    }\n}\n\nimpl Display for Document {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        for token in &self.tokens {\n            write!(f, \"{}\", self.get_span_content_str(&token.span))?;\n        }\n\n        Ok(())\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use itertools::Itertools;\n\n    use super::Document;\n    use crate::TokenStringExt;\n    use crate::{Span, parsers::MarkdownOptions};\n\n    fn assert_condensed_contractions(text: &str, final_tok_count: usize) {\n        let document = Document::new_plain_english_curated(text);\n\n        assert_eq!(document.tokens.len(), final_tok_count);\n\n        let document = Document::new_markdown_curated(text, MarkdownOptions::default());\n\n        assert_eq!(document.tokens.len(), final_tok_count);\n    }\n\n    #[test]\n    fn simple_contraction() {\n        assert_condensed_contractions(\"isn't\", 1);\n    }\n\n    #[test]\n    fn simple_contraction2() {\n        assert_condensed_contractions(\"wasn't\", 1);\n    }\n\n    #[test]\n    fn simple_contraction3() {\n        assert_condensed_contractions(\"There's\", 1);\n    }\n\n    #[test]\n    fn simple_contraction4() {\n        assert_condensed_contractions(\"doesn't\", 1);\n    }\n\n    #[test]\n    fn medium_contraction() {\n        assert_condensed_contractions(\"isn't wasn't\", 3);\n    }\n\n    #[test]\n    fn medium_contraction2() {\n        assert_condensed_contractions(\"There's no way\", 5);\n    }\n\n    #[test]\n    fn selects_token_at_char_index() {\n        let text = \"There were three little pigs. They built three little homes.\";\n        let document = Document::new_plain_english_curated(text);\n\n        let got = document.get_token_at_char_index(19).unwrap();\n\n        assert!(got.kind.is_word());\n        assert_eq!(got.span, Span::new(17, 23));\n    }\n\n    fn assert_token_count(source: &str, count: usize) {\n        let document = Document::new_plain_english_curated(source);\n\n        dbg!(document.tokens().map(|t| t.kind.clone()).collect_vec());\n        assert_eq!(document.tokens.len(), count);\n    }\n\n    #[test]\n    fn condenses_number_suffixes() {\n        assert_token_count(\"1st\", 1);\n        assert_token_count(\"This is the 2nd test\", 9);\n        assert_token_count(\"This is the 3rd test\", 9);\n        assert_token_count(\n            \"It works even with weird capitalization like this: 600nD\",\n            18,\n        );\n    }\n\n    #[test]\n    fn condenses_ie() {\n        assert_token_count(\"There is a thing (i.e. that one)\", 15);\n        assert_token_count(\"We are trying to condense \\\"i.e.\\\"\", 13);\n        assert_token_count(r#\"Condenses words like \"i.e.\", \"e.g.\" and \"N.S.A.\"\"#, 20);\n    }\n\n    #[test]\n    fn condenses_eg() {\n        assert_token_count(\"We are trying to condense \\\"e.g.\\\"\", 13);\n        assert_token_count(r#\"Condenses words like \"i.e.\", \"e.g.\" and \"N.S.A.\"\"#, 20);\n    }\n\n    #[test]\n    fn condenses_nsa() {\n        assert_token_count(r#\"Condenses words like \"i.e.\", \"e.g.\" and \"N.S.A.\"\"#, 20);\n    }\n\n    #[test]\n    fn parses_ellipsis() {\n        assert_token_count(\"...\", 1);\n    }\n\n    #[test]\n    fn parses_long_ellipsis() {\n        assert_token_count(\".....\", 1);\n    }\n\n    #[test]\n    fn parses_short_ellipsis() {\n        assert_token_count(\"..\", 1);\n    }\n\n    #[test]\n    fn selects_token_at_offset() {\n        let doc = Document::new_plain_english_curated(\"Foo bar baz\");\n\n        let tok = doc.get_token_offset(1, -1).unwrap();\n\n        assert_eq!(tok.span, Span::new(0, 3));\n    }\n\n    #[test]\n    fn cant_select_token_before_start() {\n        let doc = Document::new_plain_english_curated(\"Foo bar baz\");\n\n        let tok = doc.get_token_offset(0, -1);\n\n        assert!(tok.is_none());\n    }\n\n    #[test]\n    fn select_next_word_pos_offset() {\n        let doc = Document::new_plain_english_curated(\"Foo bar baz\");\n\n        let bar = doc.get_next_word_from_offset(0, 1).unwrap();\n        let bar = doc.get_span_content(&bar.span);\n        assert_eq!(bar, ['b', 'a', 'r']);\n    }\n\n    #[test]\n    fn select_next_word_neg_offset() {\n        let doc = Document::new_plain_english_curated(\"Foo bar baz\");\n\n        let bar = doc.get_next_word_from_offset(2, -1).unwrap();\n        let bar = doc.get_span_content(&bar.span);\n        assert_eq!(bar, ['F', 'o', 'o']);\n    }\n\n    #[test]\n    fn cant_select_next_word_not_from_whitespace() {\n        let doc = Document::new_plain_english_curated(\"Foo bar baz\");\n\n        let tok = doc.get_next_word_from_offset(0, 2);\n\n        assert!(tok.is_none());\n    }\n\n    #[test]\n    fn cant_select_next_word_before_start() {\n        let doc = Document::new_plain_english_curated(\"Foo bar baz\");\n\n        let tok = doc.get_next_word_from_offset(0, -1);\n\n        assert!(tok.is_none());\n    }\n\n    #[test]\n    fn cant_select_next_word_with_punctuation_instead_of_whitespace() {\n        let doc = Document::new_plain_english_curated(\"Foo, bar, baz\");\n\n        let tok = doc.get_next_word_from_offset(0, 1);\n\n        assert!(tok.is_none());\n    }\n\n    #[test]\n    fn cant_select_next_word_with_punctuation_after_whitespace() {\n        let doc = Document::new_plain_english_curated(\"Foo \\\"bar\\\", baz\");\n\n        let tok = doc.get_next_word_from_offset(0, 1);\n\n        assert!(tok.is_none());\n    }\n\n    #[test]\n    fn condenses_filename_extensions() {\n        let doc = Document::new_plain_english_curated(\".c and .exe and .js\");\n        assert!(doc.tokens[0].kind.is_unlintable());\n        assert!(doc.tokens[4].kind.is_unlintable());\n        assert!(doc.tokens[8].kind.is_unlintable());\n    }\n\n    #[test]\n    fn condense_filename_extension_ok_at_start_and_end() {\n        let doc = Document::new_plain_english_curated(\".c and .EXE\");\n        assert!(doc.tokens.len() == 5);\n        assert!(doc.tokens[0].kind.is_unlintable());\n        assert!(doc.tokens[4].kind.is_unlintable());\n    }\n\n    #[test]\n    fn doesnt_condense_filename_extensions_with_mixed_case() {\n        let doc = Document::new_plain_english_curated(\".c and .Exe\");\n        assert!(doc.tokens.len() == 6);\n        assert!(doc.tokens[0].kind.is_unlintable());\n        assert!(doc.tokens[4].kind.is_punctuation());\n        assert!(doc.tokens[5].kind.is_word());\n    }\n\n    #[test]\n    fn doesnt_condense_filename_extensions_with_non_letters() {\n        let doc = Document::new_plain_english_curated(\".COM and .C0M\");\n        assert!(doc.tokens.len() == 6);\n        assert!(doc.tokens[0].kind.is_unlintable());\n        assert!(doc.tokens[4].kind.is_punctuation());\n        assert!(doc.tokens[5].kind.is_word());\n    }\n\n    #[test]\n    fn doesnt_condense_filename_extensions_longer_than_three() {\n        let doc = Document::new_plain_english_curated(\".dll and .dlls\");\n        assert!(doc.tokens.len() == 6);\n        assert!(doc.tokens[0].kind.is_unlintable());\n        assert!(doc.tokens[4].kind.is_punctuation());\n        assert!(doc.tokens[5].kind.is_word());\n    }\n\n    #[test]\n    fn condense_filename_extension_in_parens() {\n        let doc = Document::new_plain_english_curated(\n            \"true for the manual installation when trying to run the executable(.exe) after a manual download\",\n        );\n        assert!(doc.tokens.len() > 23);\n        assert!(doc.tokens[21].kind.is_open_round());\n        assert!(doc.tokens[22].kind.is_unlintable());\n        assert!(doc.tokens[23].kind.is_close_round());\n    }\n\n    #[test]\n    fn condense_tldr_uppercase() {\n        let doc = Document::new_plain_english_curated(\"TL;DR\");\n        assert!(doc.tokens.len() == 1);\n        assert!(doc.tokens[0].kind.is_word());\n        assert!(doc.tokens[0].span.len() == 5);\n    }\n\n    #[test]\n    fn condense_tldr_lowercase() {\n        let doc = Document::new_plain_english_curated(\"tl;dr\");\n        assert!(doc.tokens.len() == 1);\n        assert!(doc.tokens[0].kind.is_word());\n    }\n\n    #[test]\n    fn condense_tldr_mixed_case_1() {\n        let doc = Document::new_plain_english_curated(\"tl;DR\");\n        assert!(doc.tokens.len() == 1);\n        assert!(doc.tokens[0].kind.is_word());\n    }\n\n    #[test]\n    fn condense_tldr_mixed_case_2() {\n        let doc = Document::new_plain_english_curated(\"TL;Dr\");\n        assert!(doc.tokens.len() == 1);\n        assert!(doc.tokens[0].kind.is_word());\n    }\n\n    #[test]\n    fn condense_tldr_pural() {\n        let doc = Document::new_plain_english_curated(\n            \"managing the flow between components to produce relevant TL;DRs of current news articles\",\n        );\n        // no token is a punctuation token - only words with whitespace between\n        assert!(\n            doc.tokens\n                .iter()\n                .all(|t| t.kind.is_word() || t.kind.is_whitespace())\n        );\n        // one of the word tokens contains a ';' character\n        let tldrs = doc\n            .tokens\n            .iter()\n            .filter(|t| t.span.get_content(&doc.source).contains(&';'))\n            .collect_vec();\n        assert!(tldrs.len() == 1);\n        assert!(tldrs[0].span.get_content_string(&doc.source) == \"TL;DRs\");\n    }\n\n    #[test]\n    fn condense_common_top_level_domains() {\n        let doc = Document::new_plain_english_curated(\".blog and .com and .NET\");\n        assert!(doc.tokens.len() == 9);\n        assert!(doc.tokens[0].kind.is_unlintable());\n        assert!(doc.tokens[4].kind.is_unlintable());\n        assert!(doc.tokens[8].kind.is_unlintable());\n    }\n\n    #[test]\n    fn condense_common_top_level_domains_in_parens() {\n        let doc = Document::new_plain_english_curated(\"(.blog)\");\n        assert!(doc.tokens.len() == 3);\n        assert!(doc.tokens[0].kind.is_open_round());\n        assert!(doc.tokens[1].kind.is_unlintable());\n        assert!(doc.tokens[2].kind.is_close_round());\n    }\n\n    #[test]\n    fn doesnt_condense_unknown_top_level_domains() {\n        let doc = Document::new_plain_english_curated(\".harper\");\n        assert!(doc.tokens.len() == 2);\n        assert!(doc.tokens[0].kind.is_punctuation());\n        assert!(doc.tokens[1].kind.is_word());\n    }\n\n    #[test]\n    fn condense_r_and_d_caps() {\n        let doc = Document::new_plain_english_curated(\"R&D\");\n        assert!(doc.tokens.len() == 1);\n        assert!(doc.tokens[0].kind.is_word());\n    }\n\n    #[test]\n    fn condense_r_and_d_mixed_case() {\n        let doc = Document::new_plain_english_curated(\"R&d\");\n        assert!(doc.tokens.len() == 1);\n        assert!(doc.tokens[0].kind.is_word());\n    }\n\n    #[test]\n    fn condense_r_and_d_lowercase() {\n        let doc = Document::new_plain_english_curated(\"r&d\");\n        assert!(doc.tokens.len() == 1);\n        assert!(doc.tokens[0].kind.is_word());\n    }\n\n    #[test]\n    fn dont_condense_r_and_d_with_spaces() {\n        let doc = Document::new_plain_english_curated(\"R & D\");\n        assert!(doc.tokens.len() == 5);\n        assert!(doc.tokens[0].kind.is_word());\n        assert!(doc.tokens[1].kind.is_whitespace());\n        assert!(doc.tokens[2].kind.is_ampersand());\n        assert!(doc.tokens[3].kind.is_whitespace());\n        assert!(doc.tokens[4].kind.is_word());\n    }\n\n    #[test]\n    fn condense_q_and_a() {\n        let doc =\n            Document::new_plain_english_curated(\"A Q&A platform software for teams at any scales.\");\n        assert!(doc.tokens.len() >= 3);\n        assert!(doc.tokens[2].kind.is_word());\n        assert!(doc.tokens[2].span.get_content_string(&doc.source) == \"Q&A\");\n    }\n\n    #[test]\n    fn dont_allow_mixed_r_and_d_with_q_and_a() {\n        let doc = Document::new_plain_english_curated(\"R&A or Q&D\");\n        assert!(doc.tokens.len() == 9);\n        assert!(doc.tokens[1].kind.is_ampersand() || doc.tokens[7].kind.is_ampersand());\n    }\n\n    #[test]\n    fn condense_io() {\n        let doc = Document::new_plain_english_curated(\"I/O\");\n        assert!(doc.tokens.len() == 1);\n        assert!(doc.tokens[0].kind.is_word());\n    }\n\n    #[test]\n    fn finds_unmatched_quotes_in_document() {\n        let raw = r#\"\nThis is a paragraph with a single word \"quoted.\"\n\nThis is a second paragraph with no quotes.\n\nThis is a third paragraph with a single erroneous \"quote.\n\nThis is a final paragraph with a weird \"quote and a not-weird \"quote\".\n            \"#;\n\n        let doc = Document::new_markdown_default_curated(raw);\n\n        let quote_twins: Vec<_> = doc\n            .iter_quotes()\n            .map(|t| t.kind.as_quote().unwrap().twin_loc)\n            .collect();\n\n        assert_eq!(\n            quote_twins,\n            vec![Some(19), Some(16), None, None, Some(89), Some(87)]\n        )\n    }\n\n    #[test]\n    fn issue_1901() {\n        let raw = r#\"\n\"A quoted line\"\n\"A quote without a closing mark\n\"Another quoted lined\"\n\"The last quoted line\"\n            \"#;\n\n        let doc = Document::new_markdown_default_curated(raw);\n\n        let quote_twins: Vec<_> = doc\n            .iter_quotes()\n            .map(|t| t.kind.as_quote().unwrap().twin_loc)\n            .collect();\n\n        assert_eq!(\n            quote_twins,\n            vec![\n                Some(6),\n                Some(0),\n                None,\n                Some(27),\n                Some(21),\n                Some(37),\n                Some(29)\n            ]\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/edit_distance.rs",
    "content": "// Computes the Levenshtein edit distance between two patterns.\n// This is accomplished via a memory-optimized Wagner-Fischer algorithm\n//\n// This variant avoids allocation if you already have buffers.\n#[inline]\npub fn edit_distance_min_alloc(\n    source: &[char],\n    target: &[char],\n    previous_row: &mut Vec<u8>,\n    current_row: &mut Vec<u8>,\n) -> u8 {\n    if cfg!(debug_assertions) {\n        assert!(source.len() <= 255 && target.len() <= 255);\n    }\n\n    let row_width = source.len();\n    let col_height = target.len();\n\n    previous_row.clear();\n    previous_row.extend(0u8..=row_width as u8);\n    // Alright if not zeroed, since we overwrite it anyway.\n    current_row.resize(row_width + 1, 0);\n\n    for j in 1..=col_height {\n        current_row[0] = j as u8;\n\n        for i in 1..=row_width {\n            let cost = if source[i - 1] == target[j - 1] { 0 } else { 1 };\n\n            current_row[i] = (previous_row[i] + 1)\n                .min(current_row[i - 1] + 1)\n                .min(previous_row[i - 1] + cost);\n        }\n\n        std::mem::swap(previous_row, current_row);\n    }\n\n    previous_row[row_width]\n}\n\npub fn edit_distance(source: &[char], target: &[char]) -> u8 {\n    edit_distance_min_alloc(source, target, &mut Vec::new(), &mut Vec::new())\n}\n\n#[cfg(test)]\nmod tests {\n    use super::edit_distance;\n\n    fn assert_edit_dist(source: &str, target: &str, expected: u8) {\n        let source: Vec<_> = source.chars().collect();\n        let target: Vec<_> = target.chars().collect();\n\n        let dist = edit_distance(&source, &target);\n        assert_eq!(dist, expected)\n    }\n\n    #[test]\n    fn simple_edit_distance_1() {\n        assert_edit_dist(\"kitten\", \"sitting\", 3)\n    }\n\n    #[test]\n    fn simple_edit_distance_2() {\n        assert_edit_dist(\"saturday\", \"sunday\", 3)\n    }\n\n    #[test]\n    fn one_edit_distance() {\n        let source: Vec<_> = \"hello\".chars().collect();\n        let target: Vec<_> = \"hellos\".chars().collect();\n        assert_eq!(edit_distance(&source, &target), 1);\n\n        let target: Vec<_> = \"hell\".chars().collect();\n        assert_eq!(edit_distance(&source, &target), 1);\n\n        let target: Vec<_> = \"hell\".chars().collect();\n        assert_eq!(edit_distance(&source, &target), 1);\n\n        let target: Vec<_> = \"hvllo\".chars().collect();\n        assert_eq!(edit_distance(&source, &target), 1);\n\n        let target: Vec<_> = \"Hello\".chars().collect();\n        assert_eq!(edit_distance(&source, &target), 1);\n    }\n\n    #[test]\n    fn zero_edit_distance() {\n        let source: Vec<_> = \"hello\".chars().collect();\n        let target: Vec<_> = \"hello\".chars().collect();\n        assert_eq!(edit_distance(&source, &target), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/all.rs",
    "content": "use crate::{Span, Token, expr::Expr};\n\n/// An [`Expr`] that matches against tokens if and only if all of its children do.\n/// This can be useful for situations where you have multiple expressions that represent a grammatical\n/// error, but you need _all_ of them to match to be certain.\n///\n/// It will return the position of the farthest window.\n#[derive(Default)]\npub struct All {\n    children: Vec<Box<dyn Expr>>,\n}\n\nimpl All {\n    pub fn new(children: Vec<Box<dyn Expr>>) -> Self {\n        Self { children }\n    }\n\n    pub fn add(&mut self, e: impl Expr + 'static) {\n        self.children.push(Box::new(e));\n    }\n}\n\nimpl Expr for All {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        let mut longest: Option<Span<Token>> = None;\n\n        for expr in self.children.iter() {\n            let window = expr.run(cursor, tokens, source)?;\n\n            if let Some(longest_window) = longest {\n                if window.len() > longest_window.len() {\n                    longest = Some(window);\n                }\n            } else {\n                longest = Some(window);\n            }\n        }\n\n        longest\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/anchor_end.rs",
    "content": "use crate::Token;\n\nuse super::Step;\n\n/// A [`Step`] which will match only if the cursor is over the last non-whitespace character in stream.\n/// It will return that token.\n///\n/// For example, if you built `SequenceExpr::default().t_aco(\"word\").then(AnchorEnd)` and ran it on `This is a word`, the resulting `Span` would only cover the final word token.\npub struct AnchorEnd;\n\nimpl Step for AnchorEnd {\n    fn step(&self, tokens: &[Token], cursor: usize, _source: &[char]) -> Option<isize> {\n        if tokens\n            .iter()\n            .enumerate()\n            .rev()\n            .filter(|(_, t)| !t.kind.is_whitespace())\n            .map(|(i, _)| i)\n            .next()\n            == Some(cursor)\n        {\n            Some(0)\n        } else {\n            None\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::expr::ExprExt;\n    use crate::{Document, Span};\n\n    use super::AnchorEnd;\n\n    #[test]\n    fn matches_period() {\n        let document = Document::new_markdown_default_curated(\"This is a test.\");\n        let matches: Vec<_> = AnchorEnd.iter_matches_in_doc(&document).collect();\n\n        assert_eq!(matches, vec![Span::new(7, 7)])\n    }\n\n    #[test]\n    fn does_not_match_empty() {\n        let document = Document::new_markdown_default_curated(\"\");\n        let matches: Vec<_> = AnchorEnd.iter_matches_in_doc(&document).collect();\n\n        assert_eq!(matches, vec![])\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/anchor_start.rs",
    "content": "use crate::{Token, TokenStringExt};\n\nuse super::Step;\n\n/// A [`Step`] which will match only if the cursor is over the first word-like of a token stream.\n/// It will return that token.\npub struct AnchorStart;\n\nimpl Step for AnchorStart {\n    fn step(&self, tokens: &[Token], cursor: usize, _source: &[char]) -> Option<isize> {\n        if tokens.iter_word_like_indices().next() == Some(cursor) {\n            Some(0)\n        } else {\n            None\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::expr::ExprExt;\n    use crate::{Document, Span};\n\n    use super::AnchorStart;\n\n    #[test]\n    fn matches_first_word() {\n        let document = Document::new_markdown_default_curated(\"This is a test.\");\n        let matches: Vec<_> = AnchorStart.iter_matches_in_doc(&document).collect();\n\n        assert_eq!(matches, vec![Span::new(0, 0)])\n    }\n\n    #[test]\n    fn does_not_match_empty() {\n        let document = Document::new_markdown_default_curated(\"\");\n        let matches: Vec<_> = AnchorStart.iter_matches_in_doc(&document).collect();\n\n        assert_eq!(matches, vec![])\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/duration_expr.rs",
    "content": "use crate::patterns::{IndefiniteArticle, WordSet};\nuse crate::{Span, Token};\n\nuse super::{Expr, SequenceExpr, SpelledNumberExpr};\n\n#[derive(Default)]\npub struct DurationExpr;\n\nimpl Expr for DurationExpr {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        if tokens.is_empty() {\n            return None;\n        }\n\n        let units = WordSet::new(&[\n            \"minute\", \"minutes\", \"hour\", \"hours\", \"day\", \"days\", \"week\", \"weeks\", \"month\",\n            \"months\", \"year\", \"years\",\n        ]);\n\n        let expr = SequenceExpr::longest_of(vec![\n            Box::new(SpelledNumberExpr),\n            Box::new(SequenceExpr::default().then_number()),\n            Box::new(IndefiniteArticle::default()),\n        ])\n        .then_whitespace()\n        .then(units);\n\n        expr.run(cursor, tokens, source)\n    }\n}\n\n#[cfg(test)]\npub mod tests {\n    use super::DurationExpr;\n    use crate::Document;\n    use crate::expr::ExprExt;\n    use crate::linting::tests::SpanVecExt;\n\n    #[test]\n    fn detect_10_days() {\n        let doc = Document::new_markdown_default_curated(\"Is 10 days a long time?\");\n        let matches = DurationExpr.iter_matches_in_doc(&doc).collect::<Vec<_>>();\n        assert_eq!(matches.to_strings(&doc), vec![\"10 days\"]);\n    }\n\n    #[test]\n    fn detect_ten_days() {\n        let doc = Document::new_markdown_default_curated(\"I think ten days is a long time.\");\n        let matches = DurationExpr.iter_matches_in_doc(&doc).collect::<Vec<_>>();\n        assert_eq!(matches.to_strings(&doc), vec![\"ten days\"]);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/expr_map.rs",
    "content": "use crate::LSend;\nuse crate::Span;\nuse crate::Token;\n\nuse super::Expr;\n\n/// A map from an [`Expr`] to arbitrary data.\n///\n/// It has been a common pattern for rule authors to build a list of expressions that match a\n/// grammatical error.\n/// Then, depending on which expression was matched, a suggestion is chosen from another list.\n///\n/// The [`ExprMap`] unifies these two lists into one.\n///\n/// When used as a [`Expr`] in and of itself, it simply iterates through\n/// all contained expressions, returning the first match found.\n/// You should not assume this search is deterministic.\npub struct ExprMap<T>\nwhere\n    T: LSend,\n{\n    rows: Vec<Row<T>>,\n}\n\nstruct Row<T>\nwhere\n    T: LSend,\n{\n    pub key: Box<dyn Expr>,\n    pub element: T,\n}\n\nimpl<T> Default for ExprMap<T>\nwhere\n    T: LSend,\n{\n    fn default() -> Self {\n        Self {\n            rows: Default::default(),\n        }\n    }\n}\n\nimpl<T> ExprMap<T>\nwhere\n    T: LSend,\n{\n    pub fn insert(&mut self, expr: impl Expr + 'static, value: T) {\n        self.rows.push(Row {\n            key: Box::new(expr),\n            element: value,\n        });\n    }\n\n    /// Look up the corresponding value for the given map.\n    pub fn lookup(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<&T> {\n        self.rows\n            .iter()\n            .find(|row| row.key.run(cursor, tokens, source).is_some())\n            .map(|row| &row.element)\n    }\n}\n\nimpl<T> Expr for ExprMap<T>\nwhere\n    T: LSend,\n{\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        self.rows\n            .iter()\n            .find_map(|row| row.key.run(cursor, tokens, source))\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/filter.rs",
    "content": "use crate::{Span, Token};\n\nuse super::Expr;\n\n/// An expression that wraps other expressions to build a filter-line pipeline.\n///\n/// For example, let's say you wanted to build an expression that matches the spaces between two\n/// specific words.\n/// To do this, you could start with expression A that detects the pattern `<WORD> <WORD>`. That is,\n/// a word, followed by a space, followed by a second word. You could then build Expression B, that\n/// simply matches the space. By combining these using a filter, you end up building an expression\n/// that matches expression A first, then narrows the result further to only match the resulting\n/// space.\n///\n/// ``` rust\n/// use harper_core::patterns::WhitespacePattern;\n/// use harper_core::expr::{SequenceExpr, Filter, ExprExt};\n/// use harper_core::{Span, Document};\n///\n/// let a = SequenceExpr::aco(\"chock\").t_ws().t_aco(\"full\");\n/// let b = WhitespacePattern;\n///\n/// let filter = Filter::new(vec![Box::new(a), Box::new(b)]);\n/// let doc = Document::new_markdown_default_curated(\"This test is chock full of insights.\");\n///\n/// let matches: Vec<_> = filter.iter_matches_in_doc(&doc).collect();\n/// assert_eq!(vec![Span::new(7, 8)], matches)\n/// ```\npub struct Filter {\n    steps: Vec<Box<dyn Expr>>,\n}\n\nimpl Filter {\n    pub fn new(steps: Vec<Box<dyn Expr>>) -> Self {\n        Self { steps }\n    }\n}\n\nimpl Expr for Filter {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        let mut result = self.steps.first()?.run(cursor, tokens, source)?;\n\n        for step in self.steps.iter().skip(1) {\n            let mut found = false;\n\n            for i in 0..result.len() {\n                let step_res = step.run(i, result.get_content(tokens), source);\n\n                if let Some(step) = step_res {\n                    result = step.pushed_by(result.start);\n                    found = true;\n                    break;\n                }\n            }\n\n            if !found {\n                return None;\n            }\n        }\n\n        Some(result)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/first_match_of.rs",
    "content": "use super::Expr;\nuse crate::{Span, Token};\n\n/// A naive expr collection that naively iterates through a list of patterns,\n/// returning the first one that matches.\n///\n/// Compare to [`LongestMatchOf`](super::LongestMatchOf), which returns the longest match.\n#[derive(Default)]\npub struct FirstMatchOf {\n    exprs: Vec<Box<dyn Expr>>,\n}\n\nimpl FirstMatchOf {\n    pub fn new(exprs: Vec<Box<dyn Expr>>) -> Self {\n        Self { exprs }\n    }\n\n    pub fn add(&mut self, expr: impl Expr + 'static) {\n        self.exprs.push(Box::new(expr));\n    }\n\n    pub fn add_boxed(&mut self, expr: Box<dyn Expr>) {\n        self.exprs.push(Box::new(expr));\n    }\n}\n\nimpl Expr for FirstMatchOf {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        self.exprs\n            .iter()\n            .find_map(|p| p.run(cursor, tokens, source))\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/fixed_phrase.rs",
    "content": "use crate::parsers::PlainEnglish;\nuse crate::patterns::Word;\nuse crate::{Document, Span, Token, TokenKind};\n\nuse super::{Expr, SequenceExpr};\n\n/// Matches a fixed sequence of tokens as they appear in the input.\n/// Case-insensitive for words but maintains exact matching for other token types.\n///\n/// # Example\n///\n/// ```rust\n/// use harper_core::expr::{FixedPhrase, Expr};\n/// use harper_core::Document;\n///\n/// let doc = Document::new_plain_english_curated(\"Hello, world!\");\n/// let phrase = FixedPhrase::from_phrase(\"Hello, world!\");\n/// assert!(phrase.run(0, doc.get_tokens(), doc.get_source()).is_some());\n/// ```\npub struct FixedPhrase {\n    inner: SequenceExpr,\n}\n\nimpl FixedPhrase {\n    /// Creates a [`FixedPhrase`] from a plaintext string.\n    /// Uses plain English tokenization rules.\n    pub fn from_phrase(text: &str) -> Self {\n        let document = Document::new_basic_tokenize(text, &PlainEnglish);\n        Self::from_document(&document)\n    }\n\n    /// Creates a [`FixedPhrase`] from a pre-tokenized document.\n    /// Allows custom tokenization by creating a `Document` first.\n    pub fn from_document(doc: &Document) -> Self {\n        let mut phrase = SequenceExpr::default();\n\n        for token in doc.fat_tokens() {\n            match token.kind {\n                TokenKind::Word(_lexeme_metadata) => {\n                    phrase = phrase.then(Word::from_chars(token.content.as_slice()));\n                }\n                TokenKind::Space(_) => {\n                    phrase = phrase.then_whitespace();\n                }\n                TokenKind::Punctuation(p) => {\n                    phrase = phrase\n                        .then_kind_where(move |kind| kind.as_punctuation().cloned() == Some(p));\n                }\n                TokenKind::ParagraphBreak => {\n                    phrase = phrase.then_whitespace();\n                }\n                TokenKind::Number(_) => phrase = phrase.then_kind_where(|kind| kind.is_number()),\n                _ => panic!(\"Fell out of expected document formats.\"),\n            }\n        }\n\n        Self { inner: phrase }\n    }\n}\n\nimpl Expr for FixedPhrase {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        self.inner.run(cursor, tokens, source)\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::FixedPhrase;\n    use crate::expr::Expr;\n    use crate::{Document, Span};\n\n    #[test]\n    fn test_not_case_sensitive() {\n        let doc_lower = Document::new_plain_english_curated(\"hello world\");\n        let doc_upper = Document::new_plain_english_curated(\"HELLO WORLD\");\n        let doc_title = Document::new_plain_english_curated(\"Hello World\");\n        let phrase = FixedPhrase::from_document(&doc_lower);\n        assert_eq!(\n            phrase.run(0, doc_lower.get_tokens(), doc_title.get_source()),\n            Some(Span::new(0, 3))\n        );\n        assert_eq!(\n            phrase.run(0, doc_lower.get_tokens(), doc_upper.get_source()),\n            Some(Span::new(0, 3))\n        );\n        assert_eq!(\n            phrase.run(0, doc_title.get_tokens(), doc_lower.get_source()),\n            Some(Span::new(0, 3))\n        );\n        assert_eq!(\n            phrase.run(0, doc_title.get_tokens(), doc_upper.get_source()),\n            Some(Span::new(0, 3))\n        );\n        assert_eq!(\n            phrase.run(0, doc_upper.get_tokens(), doc_lower.get_source()),\n            Some(Span::new(0, 3))\n        );\n        assert_eq!(\n            phrase.run(0, doc_upper.get_tokens(), doc_title.get_source()),\n            Some(Span::new(0, 3))\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/longest_match_of.rs",
    "content": "use crate::{Span, Token, expr::Expr};\n\n/// An [`Expr`] that returns the farthest offset of the longest match in a list of expressions.\n#[derive(Default)]\npub struct LongestMatchOf {\n    exprs: Vec<Box<dyn Expr>>,\n}\n\nimpl LongestMatchOf {\n    pub fn new(exprs: Vec<Box<dyn Expr>>) -> Self {\n        Self { exprs }\n    }\n\n    pub fn add(&mut self, expr: impl Expr + 'static) {\n        self.exprs.push(Box::new(expr));\n    }\n}\n\nimpl Expr for LongestMatchOf {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        self.exprs\n            .iter()\n            .filter_map(|expr| expr.run(cursor, tokens, source))\n            .max_by_key(Span::len)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/mergeable_words.rs",
    "content": "use std::sync::Arc;\n\nuse super::{Expr, SequenceExpr};\nuse crate::spell::{Dictionary, FstDictionary};\nuse crate::{CharString, DictWordMetadata, Span, Token};\n\ntype PredicateFn =\n    dyn Fn(Option<&DictWordMetadata>, Option<&DictWordMetadata>) -> bool + Send + Sync;\n\n/// An [`Expr`] that identifies adjacent words that could potentially be merged into a single word.\n///\n/// This checks if two adjacent words could form a valid compound word, but first verifies\n/// that the two words aren't already a valid entry in the dictionary (like \"straight away\").\npub struct MergeableWords {\n    inner: SequenceExpr,\n    dict: Arc<FstDictionary>,\n    predicate: Box<PredicateFn>,\n}\n\nimpl MergeableWords {\n    pub fn new(\n        predicate: impl Fn(Option<&DictWordMetadata>, Option<&DictWordMetadata>) -> bool\n        + Send\n        + Sync\n        + 'static,\n    ) -> Self {\n        Self {\n            inner: SequenceExpr::any_word().t_ws_h().then_any_word(),\n            dict: FstDictionary::curated(),\n            predicate: Box::new(predicate),\n        }\n    }\n\n    /// Get the merged word from the dictionary if these words can be merged.\n    /// Returns None if the words should remain separate (according to the predicate).\n    pub fn get_merged_word(\n        &self,\n        word_a: &Token,\n        word_b: &Token,\n        source: &[char],\n    ) -> Option<CharString> {\n        let a_chars: CharString = word_a.span.get_content(source).into();\n        let b_chars: CharString = word_b.span.get_content(source).into();\n\n        // First check if the open compound exists in the dictionary\n        let mut compound = a_chars.clone();\n        compound.push(' ');\n        compound.extend_from_slice(&b_chars);\n        let meta_open = self.dict.get_word_metadata(&compound);\n\n        // Then check if the closed compound exists in the dictionary\n        compound.remove(a_chars.len());\n        let meta_closed = self.dict.get_word_metadata(&compound);\n\n        if (self.predicate)(meta_closed.as_deref(), meta_open.as_deref()) {\n            return Some(compound);\n        }\n\n        None\n    }\n}\n\nimpl Expr for MergeableWords {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        let inner_match = self.inner.run(cursor, tokens, source)?;\n\n        if inner_match.len() != 3 {\n            return None;\n        }\n\n        if self\n            .get_merged_word(&tokens[cursor], &tokens[cursor + 2], source)\n            .is_some()\n        {\n            return Some(inner_match);\n        }\n\n        None\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::MergeableWords;\n    use crate::{DictWordMetadata, Document};\n\n    fn predicate(\n        meta_closed: Option<&DictWordMetadata>,\n        meta_open: Option<&DictWordMetadata>,\n    ) -> bool {\n        meta_open.is_none() && meta_closed.is_some_and(|m| m.is_noun() && !m.is_proper_noun())\n    }\n\n    #[test]\n    fn merges_open_compound_not_in_dict() {\n        // note book is not in the dictionary, but notebook is\n        let doc = Document::new_plain_english_curated(\"note book\");\n        let a = doc.tokens().next().unwrap();\n        let b = doc.tokens().nth(2).unwrap();\n\n        let merged = MergeableWords::new(predicate).get_merged_word(a, b, doc.get_source());\n\n        assert_eq!(merged, Some(\"notebook\".chars().collect()));\n    }\n\n    #[test]\n    fn does_not_merge_open_compound_in_dict() {\n        // straight away is in the dictionary, and straightaway is\n        let doc = Document::new_plain_english_curated(\"straight away\");\n        let a = doc.tokens().next().unwrap();\n        let b = doc.tokens().nth(2).unwrap();\n\n        let merged = MergeableWords::new(predicate).get_merged_word(a, b, doc.get_source());\n\n        assert_eq!(merged, None);\n    }\n\n    #[test]\n    fn does_not_merge_invalid_compound() {\n        // neither quick for nor quickfox are in the dictionary\n        let doc = Document::new_plain_english_curated(\"quick fox\");\n        let a = doc.tokens().next().unwrap();\n        let b = doc.tokens().nth(2).unwrap();\n\n        let merged = MergeableWords::new(predicate).get_merged_word(a, b, doc.get_source());\n\n        assert_eq!(merged, None);\n    }\n\n    #[test]\n    fn merges_open_compound() {\n        // Dictionary has \"frontline\" but not \"front line\"\n        let doc = Document::new_plain_english_curated(\"front line\");\n        let a = doc.tokens().next().unwrap();\n        let b = doc.tokens().nth(2).unwrap();\n\n        let merged = MergeableWords::new(predicate).get_merged_word(a, b, doc.get_source());\n\n        assert_eq!(merged, Some(\"frontline\".chars().collect()));\n    }\n\n    #[test]\n    fn merges_hyphenated_compound() {\n        // Doesn't check for \"front-line\" in the dictionary but matches it and \"frontline\" is in the dictionary\n        let doc = Document::new_plain_english_curated(\"front-line\");\n        let a = doc.tokens().next().unwrap();\n        let b = doc.tokens().nth(2).unwrap();\n\n        let merged = MergeableWords::new(predicate).get_merged_word(a, b, doc.get_source());\n\n        assert_eq!(merged, Some(\"frontline\".chars().collect()));\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/mod.rs",
    "content": "//! An `Expr` is a declarative way to express whether a certain set of tokens fulfill a criteria.\n//!\n//! For example, if we want to look for the word \"that\" followed by an adjective, we could build an\n//! expression to do so.\n//!\n//! The actual searching is done by another system (usually a part of the [lint framework](crate::linting::ExprLinter)).\n//! It iterates through a document, checking if each index matches the criteria.\n//!\n//! When supplied a specific position in a token stream, the technical job of an `Expr` is to determine the window of tokens (including the cursor itself) that fulfills whatever criteria the author desires.\n//!\n//! The goal of the `Expr` initiative is to make rules easier to _read_ as well as to write.\n//! Gone are the days of trying to manually parse the logic of another man's Rust code.\n//!\n//! See also: [`SequenceExpr`].\n\nmod all;\nmod anchor_end;\nmod anchor_start;\nmod duration_expr;\nmod expr_map;\nmod filter;\nmod first_match_of;\nmod fixed_phrase;\nmod longest_match_of;\nmod mergeable_words;\nmod optional;\nmod reflexive_pronoun;\nmod repeating;\nmod sequence_expr;\nmod similar_to_phrase;\nmod space_or_hyphen;\nmod spelled_number_expr;\nmod step;\nmod time_unit_expr;\nmod unless_step;\nmod word_expr_group;\n\n#[cfg(not(feature = \"concurrent\"))]\nuse std::rc::Rc;\nuse std::sync::Arc;\n\npub use all::All;\npub use anchor_end::AnchorEnd;\npub use anchor_start::AnchorStart;\npub use duration_expr::DurationExpr;\npub use expr_map::ExprMap;\npub use filter::Filter;\npub use first_match_of::FirstMatchOf;\npub use fixed_phrase::FixedPhrase;\npub use longest_match_of::LongestMatchOf;\npub use mergeable_words::MergeableWords;\npub use optional::Optional;\npub use reflexive_pronoun::ReflexivePronoun;\npub use repeating::Repeating;\npub use sequence_expr::SequenceExpr;\npub use similar_to_phrase::SimilarToPhrase;\npub use space_or_hyphen::SpaceOrHyphen;\npub use spelled_number_expr::SpelledNumberExpr;\npub use step::Step;\npub use time_unit_expr::TimeUnitExpr;\npub use unless_step::UnlessStep;\npub use word_expr_group::WordExprGroup;\n\nuse crate::{Document, LSend, Span, Token};\n\npub trait Expr: LSend {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>>;\n}\n\nimpl<S> Expr for S\nwhere\n    S: Step + ?Sized,\n{\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        self.step(tokens, cursor, source).map(|s| {\n            if s >= 0 {\n                Span::new_with_len(cursor, s as usize)\n            } else {\n                Span::new(add(cursor, s).unwrap(), cursor)\n            }\n        })\n    }\n}\n\nimpl<E> Expr for Arc<E>\nwhere\n    E: Expr,\n{\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        self.as_ref().run(cursor, tokens, source)\n    }\n}\n\nimpl Expr for Box<dyn Expr> {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        self.as_ref().run(cursor, tokens, source)\n    }\n}\n\n#[cfg(not(feature = \"concurrent\"))]\nimpl<E> Expr for Rc<E>\nwhere\n    E: Expr,\n{\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        self.as_ref().run(cursor, tokens, source)\n    }\n}\n\nfn add(u: usize, i: isize) -> Option<usize> {\n    if i.is_negative() {\n        u.checked_sub(i.wrapping_abs() as u32 as usize)\n    } else {\n        u.checked_add(i as usize)\n    }\n}\n\npub trait ExprExt {\n    /// Iterate over all matches of this expression in the document, automatically filtering out\n    /// overlapping matches, preferring the first.\n    fn iter_matches<'a>(\n        &'a self,\n        tokens: &'a [Token],\n        source: &'a [char],\n    ) -> Box<dyn Iterator<Item = Span<Token>> + 'a>;\n\n    fn iter_matches_in_doc<'a>(\n        &'a self,\n        doc: &'a Document,\n    ) -> Box<dyn Iterator<Item = Span<Token>> + 'a>;\n}\n\nimpl<E: ?Sized> ExprExt for E\nwhere\n    E: Expr,\n{\n    fn iter_matches<'a>(\n        &'a self,\n        tokens: &'a [Token],\n        source: &'a [char],\n    ) -> Box<dyn Iterator<Item = Span<Token>> + 'a> {\n        let mut last_end = 0usize;\n\n        Box::new((0..tokens.len()).filter_map(move |i| {\n            let span = self.run(i, tokens, source)?;\n            if span.start >= last_end {\n                last_end = span.end;\n                Some(span)\n            } else {\n                None\n            }\n        }))\n    }\n\n    fn iter_matches_in_doc<'a>(\n        &'a self,\n        doc: &'a Document,\n    ) -> Box<dyn Iterator<Item = Span<Token>> + 'a> {\n        Box::new(self.iter_matches(doc.get_tokens(), doc.get_source()))\n    }\n}\n\npub trait OwnedExprExt {\n    fn or(self, other: impl Expr + 'static) -> FirstMatchOf;\n    fn and(self, other: impl Expr + 'static) -> All;\n    fn and_not(self, other: impl Expr + 'static) -> All;\n    fn or_longest(self, other: impl Expr + 'static) -> LongestMatchOf;\n}\n\nimpl<E> OwnedExprExt for E\nwhere\n    E: Expr + 'static,\n{\n    /// Returns an expression that matches either the current one or the expression contained in `other`.\n    fn or(self, other: impl Expr + 'static) -> FirstMatchOf {\n        FirstMatchOf::new(vec![Box::new(self), Box::new(other)])\n    }\n\n    /// Returns an expression that matches only if both the current one and the expression contained in `other` do.\n    fn and(self, other: impl Expr + 'static) -> All {\n        All::new(vec![Box::new(self), Box::new(other)])\n    }\n\n    /// Returns an expression that matches only if the current one matches and the expression contained in `other` does not.\n    fn and_not(self, other: impl Expr + 'static) -> All {\n        self.and(UnlessStep::new(other, |_tok: &Token, _src: &[char]| true))\n    }\n\n    /// Returns an expression that matches the longest of the current one or the expression contained in `other`.\n    ///\n    /// If you don't need the longest match, prefer using the short-circuiting [`Self::or()`] instead.\n    fn or_longest(self, other: impl Expr + 'static) -> LongestMatchOf {\n        LongestMatchOf::new(vec![Box::new(self), Box::new(other)])\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/optional.rs",
    "content": "use crate::{Span, Token};\n\nuse super::Expr;\n\n/// An optional expression.\n/// Forces the optional expression to always return Some by transmuting `None` into\n/// `Some(cursor..cursor)`.\npub struct Optional {\n    inner: Box<dyn Expr>,\n}\n\nimpl Optional {\n    pub fn new(inner: impl Expr + 'static) -> Self {\n        Self {\n            inner: Box::new(inner),\n        }\n    }\n}\n\nimpl Expr for Optional {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        let res = self.inner.run(cursor, tokens, source);\n\n        if res.is_none() {\n            Some(Span::empty(cursor))\n        } else {\n            res\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/reflexive_pronoun.rs",
    "content": "use crate::{\n    Span, Token,\n    expr::{Expr, FirstMatchOf},\n    patterns::WordSet,\n};\n\n// These are considered ungrammatical, or are at least not in `dictionary.dict` but are commonly used anyway.\n// The tests below check if this changes so we can update this `Expr`\nconst BAD_REFLEXIVE_PRONOUNS: &[&str] = &[\n    \"hisself\",\n    \"oneselves\",\n    \"theirself\",\n    \"theirselves\",\n    \"themself\",\n];\n\n/// Matches reflexive pronouns with configurable strictness.\n///\n/// By default, only matches standard English reflexive pronouns. Use `with_common_errors()` to include\n/// frequently encountered non-standard forms like \"hisself\" or \"theirself\".\npub struct ReflexivePronoun {\n    include_common_errors: bool,\n}\n\nimpl Default for ReflexivePronoun {\n    fn default() -> Self {\n        Self::standard()\n    }\n}\n\nimpl ReflexivePronoun {\n    /// Creates a matcher for standard English reflexive pronouns.\n    ///\n    /// Matches only the correct forms: \"myself\", \"yourself\", \"himself\", \"herself\", \"itself\",\n    /// \"ourselves\", \"yourselves\", and \"themselves\".\n    pub fn standard() -> Self {\n        Self {\n            include_common_errors: false,\n        }\n    }\n\n    /// Creates a matcher that includes non-standard but commonly used reflexive pronouns.\n    ///\n    /// In addition to standard forms, matches common errors like \"hisself\", \"theirself\",\n    /// and other non-standard forms that are frequently seen in user-generated content.\n    pub fn with_common_errors() -> Self {\n        Self {\n            include_common_errors: true,\n        }\n    }\n}\n\nimpl Expr for ReflexivePronoun {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        let good_pronouns = |token: &Token, _: &[char]| token.kind.is_reflexive_pronoun();\n        let mut expr = FirstMatchOf::new(vec![Box::new(good_pronouns)]);\n        if self.include_common_errors {\n            expr.add(WordSet::new(BAD_REFLEXIVE_PRONOUNS));\n        }\n        expr.run(cursor, tokens, source)\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::{\n        Document, TokenKind,\n        expr::{ExprExt, ReflexivePronoun, reflexive_pronoun::BAD_REFLEXIVE_PRONOUNS},\n    };\n\n    // These are considered grammatically correct, or are at least in `dictionary.dict`.\n    // The tests below check if this changes so we can update this `Expr`\n    const GOOD_REFLEXIVE_PRONOUNS: &[&str] = &[\n        \"herself\",\n        \"himself\",\n        \"itself\",\n        \"myself\",\n        \"oneself\",\n        \"ourself\",\n        \"ourselves\",\n        \"themselves\",\n        \"thyself\",\n        \"yourself\",\n        \"yourselves\",\n    ];\n\n    fn test_pronoun(word: &str) {\n        let doc = Document::new_plain_english_curated(word);\n        let token = doc.tokens().next().expect(\"No tokens in document\");\n\n        let is_good_pron = GOOD_REFLEXIVE_PRONOUNS.contains(&word);\n        let is_bad_pron = BAD_REFLEXIVE_PRONOUNS.contains(&word);\n\n        match (is_good_pron, is_bad_pron, &token.kind) {\n            (true, false, TokenKind::Word(Some(md))) => {\n                assert!(md.is_pronoun());\n                assert!(md.is_reflexive_pronoun());\n            }\n            (true, false, TokenKind::Word(None)) => {\n                panic!(\"Widely accepted pronoun '{word}' has gone missing from the dictionary!\")\n            }\n            (false, true, TokenKind::Word(Some(_))) => panic!(\n                \"Unaccepted pronoun '{word}' that's used in bad English is now in the dictionary!\"\n            ),\n            (false, true, TokenKind::Word(None)) => {}\n            (false, false, TokenKind::Word(Some(_))) => panic!(\n                \"non-pronoun '{word}' is made up just for testing but is now in the dictionary!\"\n            ),\n            (false, false, TokenKind::Word(None)) => {}\n            (true, true, _) => panic!(\"'{word}' is in both good and bad lists\"),\n            _ => panic!(\"'{word}' doesn't match any expected case\"),\n        }\n    }\n\n    #[test]\n    fn test_good_reflexive_pronouns() {\n        for word in GOOD_REFLEXIVE_PRONOUNS {\n            test_pronoun(word);\n        }\n    }\n\n    #[test]\n    fn test_bad_reflexive_pronouns() {\n        for word in BAD_REFLEXIVE_PRONOUNS {\n            test_pronoun(word);\n        }\n    }\n\n    // It's expected that nobody uses these words even in bad English.\n    #[test]\n    fn test_non_pronouns() {\n        test_pronoun(\"myselves\");\n        test_pronoun(\"weselves\");\n        test_pronoun(\"usself\");\n        test_pronoun(\"usselves\");\n    }\n\n    #[test]\n    fn ensure_standard_ctor_includes_myself() {\n        let doc =\n            Document::new_plain_english_curated(\"If you want something done, do it yourself.\");\n        let rp = ReflexivePronoun::standard();\n        let matches = rp.iter_matches_in_doc(&doc);\n        assert_eq!(matches.count(), 1);\n    }\n\n    #[test]\n    fn ensure_default_ctor_includes_myself() {\n        let doc = Document::new_plain_english_curated(\n            \"I wanted a reflexive pronoun module, so I wrote one myself.\",\n        );\n        let rp = ReflexivePronoun::default();\n        let matches = rp.iter_matches_in_doc(&doc);\n        assert_eq!(matches.count(), 1);\n    }\n\n    #[test]\n    fn ensure_with_common_errors_includes_hisself() {\n        let doc = Document::new_plain_english_curated(\"He teached hisself English.\");\n        let rp = ReflexivePronoun::with_common_errors();\n        let matches = rp.iter_matches_in_doc(&doc);\n        assert_eq!(matches.count(), 1);\n    }\n\n    #[test]\n    fn ensure_standard_ctor_excludes_hisself() {\n        let doc = Document::new_plain_english_curated(\"Was he pleased with hisself?\");\n        let rp = ReflexivePronoun::standard();\n        let matches = rp.iter_matches_in_doc(&doc);\n        assert_eq!(matches.count(), 0);\n    }\n\n    #[test]\n    fn ensure_default_ctor_excludes_theirself() {\n        let doc = Document::new_plain_english_curated(\"They look at theirself in the mirror.\");\n        let rp = ReflexivePronoun::default();\n        let matches = rp.iter_matches_in_doc(&doc);\n        assert_eq!(matches.count(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/repeating.rs",
    "content": "use super::Expr;\nuse crate::{Span, Token};\n\n/// An expression that will match one or more repetitions of the same expression.\n///\n/// Somewhat reminiscent of the `+*` operator in Regex.\npub struct Repeating {\n    inner: Box<dyn Expr>,\n    required_repetitions: usize,\n}\n\nimpl Repeating {\n    pub fn new(expr: Box<dyn Expr>, required_repetitions: usize) -> Self {\n        Self {\n            inner: expr,\n            required_repetitions,\n        }\n    }\n}\n\nimpl Expr for Repeating {\n    fn run(&self, mut cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        let mut window = Span::empty(cursor);\n        let mut repetition = 0;\n\n        loop {\n            let res = self.inner.run(cursor, tokens, source);\n\n            if let Some(res) = res {\n                window.expand_to_include(res.start);\n                window.expand_to_include(res.end - 1);\n\n                if res.start < cursor {\n                    cursor = res.start;\n                } else {\n                    cursor = res.end;\n                }\n\n                if res.is_empty() {\n                    return Some(window);\n                }\n\n                repetition += 1;\n            } else if repetition >= self.required_repetitions {\n                return Some(window);\n            } else {\n                return None;\n            }\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n\n    use super::Repeating;\n    use crate::expr::{ExprExt, SequenceExpr};\n    use crate::patterns::AnyPattern;\n    use crate::{Document, Span};\n\n    #[test]\n    fn matches_anything() {\n        let doc = Document::new_plain_english_curated(\n            \"This matcher will match the entirety of any document!\",\n        );\n        let pat = Repeating::new(Box::new(SequenceExpr::from(AnyPattern)), 0);\n\n        assert_eq!(\n            pat.iter_matches(doc.get_tokens(), doc.get_source()).next(),\n            Some(Span::new(0, doc.get_tokens().len()))\n        )\n    }\n\n    #[test]\n    fn does_not_match_short() {\n        let doc = Document::new_plain_english_curated(\"No match\");\n        let pat = Repeating::new(Box::new(SequenceExpr::from(AnyPattern)), 4);\n\n        assert_eq!(\n            pat.iter_matches(doc.get_tokens(), doc.get_source()).next(),\n            None\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/sequence_expr.rs",
    "content": "use paste::paste;\n\nuse crate::{\n    CharStringExt, Lrc, Span, Token, TokenKind,\n    expr::{FirstMatchOf, FixedPhrase, LongestMatchOf},\n    patterns::{AnyPattern, IndefiniteArticle, WhitespacePattern, Word, WordSet},\n};\n\nuse super::{Expr, Optional, OwnedExprExt, Repeating, Step, UnlessStep};\n\n#[derive(Default)]\npub struct SequenceExpr {\n    exprs: Vec<Box<dyn Expr>>,\n}\n\n/// Generate a `then_*` method from an available `is_*` function on [`TokenKind`].\nmacro_rules! gen_then_from_is {\n    ($quality:ident) => {\n        paste! {\n            #[doc = concat!(\"Adds a step matching a token where [`TokenKind::is_\", stringify!($quality), \"()`] returns true.\")]\n            pub fn [< then_$quality >] (self) -> Self{\n                self.then_kind_where(|kind| {\n                    kind.[< is_$quality >]()\n                })\n            }\n\n            #[doc = concat!(\"Adds an optional step matching a token where [`TokenKind::is_\", stringify!($quality), \"()`] returns true.\")]\n            pub fn [< then_optional_$quality >] (self) -> Self{\n                self.then_optional(|tok: &Token, _source: &[char]| {\n                    tok.kind.[< is_$quality >]()\n                })\n            }\n\n            #[doc = concat!(\"Adds a step matching one or more consecutive tokens where [`TokenKind::is_\", stringify!($quality), \"()`] returns true.\")]\n            pub fn [< then_one_or_more_$quality s >] (self) -> Self{\n                self.then_one_or_more(Box::new(|tok: &Token, _source: &[char]| {\n                    tok.kind.[< is_$quality >]()\n                }))\n            }\n\n            #[doc = concat!(\"Adds a step matching a token where [`TokenKind::is_\", stringify!($quality), \"()`] returns false.\")]\n            pub fn [< then_anything_but_$quality >] (self) -> Self{\n                self.then_kind_where(|kind| {\n                    !kind.[< is_$quality >]()\n                })\n            }\n        }\n    };\n}\n\nimpl Expr for SequenceExpr {\n    /// Run the expression starting at an index, returning the total matched window.\n    ///\n    /// If any step returns `None`, the entire expression does as well.\n    fn run(&self, mut cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        let mut window = Span::empty(cursor);\n\n        for cur_expr in &self.exprs {\n            let out = cur_expr.run(cursor, tokens, source)?;\n\n            // Only expand the window if the match actually covers some tokens\n            if out.end > out.start {\n                window.expand_to_include(out.start);\n                window.expand_to_include(out.end.checked_sub(1).unwrap_or(out.start));\n            }\n\n            // Only advance cursor if we actually matched something\n            if out.end > cursor {\n                cursor = out.end;\n            } else if out.start < cursor {\n                cursor = out.start;\n            }\n            // If both start and end are equal to cursor, don't move the cursor\n        }\n\n        Some(window)\n    }\n}\n\nimpl SequenceExpr {\n    // Constructor methods\n\n    // Match an [expression](Expr).\n    pub fn with(expr: impl Expr + 'static) -> Self {\n        Self::default().then(expr)\n    }\n\n    // Single token methods\n\n    /// Construct a new sequence with an [`AnyPattern`] at the beginning of the operation list.\n    pub fn anything() -> Self {\n        Self::default().then_anything()\n    }\n\n    // Single word token methods\n\n    /// Construct a new sequence with a [`Word`] at the beginning of the operation list.\n    pub fn any_capitalization_of(word: &'static str) -> Self {\n        Self::default().then_any_capitalization_of(word)\n    }\n\n    /// Shorthand for [`Self::any_capitalization_of`].\n    pub fn aco(word: &'static str) -> Self {\n        Self::any_capitalization_of(word)\n    }\n\n    /// Match any word from the given set of words, case-insensitive.\n    pub fn word_set(words: &'static [&'static str]) -> Self {\n        Self::default().then_word_set(words)\n    }\n\n    /// Match any word.\n    pub fn any_word() -> Self {\n        Self::default().then_any_word()\n    }\n\n    // Expressions of more than one token\n\n    /// Optionally match an expression.\n    pub fn optional(expr: impl Expr + 'static) -> Self {\n        Self::default().then_optional(expr)\n    }\n\n    /// Match a fixed phrase.\n    pub fn fixed_phrase(phrase: &'static str) -> Self {\n        Self::default().then_fixed_phrase(phrase)\n    }\n\n    // Multiple expressions\n\n    /// Match the first of multiple expressions.\n    pub fn any_of(exprs: Vec<Box<dyn Expr>>) -> Self {\n        Self::default().then_any_of(exprs)\n    }\n\n    /// Match the longest of multiple expressions.\n    pub fn longest_of(exprs: Vec<Box<dyn Expr>>) -> Self {\n        Self::default().then_longest_of(exprs)\n    }\n\n    pub fn whitespace() -> Self {\n        Self::default().then_whitespace()\n    }\n\n    /// Will be accepted unless the condition matches.\n    pub fn unless(condition: impl Expr + 'static) -> Self {\n        Self::default().then_unless(condition)\n    }\n\n    // Builder methods\n\n    /// Push an [expression](Expr) to the operation list.\n    pub fn then(mut self, expr: impl Expr + 'static) -> Self {\n        self.exprs.push(Box::new(expr));\n        self\n    }\n\n    /// Push an already-boxed [expression](Expr) to the operation list.\n    pub fn then_boxed(mut self, expr: Box<dyn Expr>) -> Self {\n        self.exprs.push(expr);\n        self\n    }\n\n    /// Pushes an expression that could move the cursor to the sequence, but does not require it.\n    pub fn then_optional(mut self, expr: impl Expr + 'static) -> Self {\n        self.exprs.push(Box::new(Optional::new(expr)));\n        self\n    }\n\n    /// Pushes an expression that will match any of the provided expressions.\n    ///\n    /// If more than one of the provided expressions match, this function provides no guarantee\n    /// as to which match will end up being used. If you need to get the longest of multiple\n    /// matches, use [`Self::then_longest_of()`] instead.\n    pub fn then_any_of(mut self, exprs: Vec<Box<dyn Expr>>) -> Self {\n        self.exprs.push(Box::new(FirstMatchOf::new(exprs)));\n        self\n    }\n\n    /// Pushes an expression that will match the longest of the provided expressions.\n    ///\n    /// If you don't need the longest match, prefer using the short-circuiting\n    /// [`Self::then_any_of()`] instead.\n    pub fn then_longest_of(mut self, exprs: Vec<Box<dyn Expr>>) -> Self {\n        self.exprs.push(Box::new(LongestMatchOf::new(exprs)));\n        self\n    }\n\n    /// Appends the steps in `other` onto the end of `self`.\n    /// This is more efficient than [`Self::then`] because it avoids pointer redirection.\n    pub fn then_seq(mut self, mut other: Self) -> Self {\n        self.exprs.append(&mut other.exprs);\n        self\n    }\n\n    /// Pushes an expression that will match any word from the given set of words, case-insensitive.\n    pub fn then_word_set(self, words: &'static [&'static str]) -> Self {\n        self.then(WordSet::new(words))\n    }\n\n    /// Shorthand for [`Self::then_word_set`].\n    pub fn t_set(self, words: &'static [&'static str]) -> Self {\n        self.then_word_set(words)\n    }\n\n    /// Match against one or more whitespace tokens.\n    pub fn then_whitespace(self) -> Self {\n        self.then(WhitespacePattern)\n    }\n\n    /// Shorthand for [`Self::then_whitespace`].\n    pub fn t_ws(self) -> Self {\n        self.then_whitespace()\n    }\n\n    /// Match against one or more whitespace tokens.\n    pub fn then_whitespace_or_hyphen(self) -> Self {\n        self.then(WhitespacePattern.or(|tok: &Token, _: &[char]| tok.kind.is_hyphen()))\n    }\n\n    /// Shorthand for [`Self::then_whitespace_or_hyphen`].\n    pub fn t_ws_h(self) -> Self {\n        self.then_whitespace_or_hyphen()\n    }\n\n    /// Match against zero or more occurrences of the given expression. Like `*` in regex.\n    pub fn then_zero_or_more(self, expr: impl Expr + 'static) -> Self {\n        self.then(Repeating::new(Box::new(expr), 0))\n    }\n\n    /// Match against one or more occurrences of the given expression. Like `+` in regex.\n    pub fn then_one_or_more(self, expr: impl Expr + 'static) -> Self {\n        self.then(Repeating::new(Box::new(expr), 1))\n    }\n\n    /// Match against zero or more whitespace-separated occurrences of the given expression.\n    pub fn then_zero_or_more_spaced(self, expr: impl Expr + 'static) -> Self {\n        let expr = Lrc::new(expr);\n        self.then(SequenceExpr::with(expr.clone()).then(Repeating::new(\n            Box::new(SequenceExpr::default().t_ws().then(expr)),\n            0,\n        )))\n    }\n\n    /// Create a new condition that will step one token forward if met.\n    /// If the condition is _not_ met, the whole expression returns `None`.\n    ///\n    /// This can be used to build out exceptions to other rules.\n    ///\n    /// See [`UnlessStep`] for more info.\n    pub fn then_unless(self, condition: impl Expr + 'static) -> Self {\n        self.then(UnlessStep::new(condition, |_tok: &Token, _src: &[char]| {\n            true\n        }))\n    }\n\n    /// Match any single token.\n    ///\n    /// See [`AnyPattern`] for more info.\n    pub fn then_anything(self) -> Self {\n        self.then(AnyPattern)\n    }\n\n    /// Match any single token.\n    ///\n    /// Shorthand for [`Self::then_anything`].\n    pub fn t_any(self) -> Self {\n        self.then_anything()\n    }\n\n    // Word matching methods\n\n    /// Matches any word.\n    pub fn then_any_word(self) -> Self {\n        self.then_kind_where(|kind| kind.is_word())\n    }\n\n    /// Match examples of `word` that have any capitalization.\n    pub fn then_any_capitalization_of(self, word: &'static str) -> Self {\n        self.then(Word::new(word))\n    }\n\n    /// Shorthand for [`Self::then_any_capitalization_of`].\n    pub fn t_aco(self, word: &'static str) -> Self {\n        self.then_any_capitalization_of(word)\n    }\n\n    /// Match examples of `word` case-sensitively.\n    pub fn then_exact_word(self, word: &'static str) -> Self {\n        self.then(Word::new_exact(word))\n    }\n\n    /// Match a fixed phrase.\n    pub fn then_fixed_phrase(self, phrase: &'static str) -> Self {\n        self.then(FixedPhrase::from_phrase(phrase))\n    }\n\n    /// Match any word except the ones in `words`.\n    pub fn then_word_except(self, words: &'static [&'static str]) -> Self {\n        self.then(move |tok: &Token, src: &[char]| {\n            !tok.kind.is_word()\n                || !words\n                    .iter()\n                    .any(|&word| tok.span.get_content(src).eq_ignore_ascii_case_str(word))\n        })\n    }\n\n    // Token kind/predicate matching methods\n\n    // One kind\n\n    /// Matches any token whose `Kind` exactly matches.\n    pub fn then_kind(self, kind: TokenKind) -> Self {\n        self.then_kind_where(move |k| kind == *k)\n    }\n\n    /// Matches a token where the provided closure returns true for the token's kind.\n    pub fn then_kind_where<F>(mut self, predicate: F) -> Self\n    where\n        F: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.exprs\n            .push(Box::new(move |tok: &Token, _source: &[char]| {\n                predicate(&tok.kind)\n            }));\n        self\n    }\n\n    /// Match a token of a given kind which is not in the list of words.\n    pub fn then_kind_except<F>(self, pred_is: F, ex: &'static [&'static str]) -> Self\n    where\n        F: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then(move |tok: &Token, src: &[char]| {\n            pred_is(&tok.kind)\n                && !ex\n                    .iter()\n                    .any(|&word| tok.span.get_content(src).eq_ignore_ascii_case_str(word))\n        })\n    }\n\n    // Two kinds\n\n    /// Match a token where both token kind predicates return true.\n    /// For instance, a word that can be both noun and verb.\n    pub fn then_kind_both<F1, F2>(self, pred_is_1: F1, pred_is_2: F2) -> Self\n    where\n        F1: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n        F2: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then_kind_where(move |k| pred_is_1(k) && pred_is_2(k))\n    }\n\n    /// Match a token where either of the two token kind predicates returns true.\n    /// For instance, an adjective or an adverb.\n    pub fn then_kind_either<F1, F2>(self, pred_is_1: F1, pred_is_2: F2) -> Self\n    where\n        F1: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n        F2: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then_kind_where(move |k| pred_is_1(k) || pred_is_2(k))\n    }\n\n    /// Match a token where neither of the two token kind predicates returns true.\n    /// For instance, a word that can't be a verb or a noun.\n    pub fn then_kind_neither<F1, F2>(self, pred_isnt_1: F1, pred_isnt_2: F2) -> Self\n    where\n        F1: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n        F2: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then_kind_where(move |k| !pred_isnt_1(k) && !pred_isnt_2(k))\n    }\n\n    /// Match a token where the first token kind predicate returns true and the second returns false.\n    /// For instance, a word that can be a noun but cannot be a verb.\n    pub fn then_kind_is_but_is_not<F1, F2>(self, pred_is: F1, pred_not: F2) -> Self\n    where\n        F1: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n        F2: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then_kind_where(move |k| pred_is(k) && !pred_not(k))\n    }\n\n    /// Match a token where the first token kind predicate returns true and the second returns false,\n    /// and the token is not in the list of exceptions.\n    pub fn then_kind_is_but_is_not_except<F1, F2>(\n        self,\n        pred_is: F1,\n        pred_not: F2,\n        ex: &'static [&'static str],\n    ) -> Self\n    where\n        F1: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n        F2: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then(move |tok: &Token, src: &[char]| {\n            pred_is(&tok.kind)\n                && !pred_not(&tok.kind)\n                && !ex\n                    .iter()\n                    .any(|&word| tok.span.get_content(src).eq_ignore_ascii_case_str(word))\n        })\n    }\n\n    /// Match a token where the first token kind predicate returns true and all of the second return false.\n    /// For instance, a word that can be a verb but not a noun or an adjective.\n    pub fn then_kind_is_but_isnt_any_of<F1, F2>(\n        self,\n        pred_is: F1,\n        preds_isnt: &'static [F2],\n    ) -> Self\n    where\n        F1: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n        F2: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then_kind_where(move |k| pred_is(k) && !preds_isnt.iter().any(|pred| pred(k)))\n    }\n\n    /// Match a token where the first token kind predicate returns true and all of the second return false,\n    /// and the token is not in the list of exceptions.\n    /// For instance, an adjective that isn't also a verb or adverb or the word \"likely\".\n    pub fn then_kind_is_but_isnt_any_of_except<F1, F2>(\n        self,\n        pred_is: F1,\n        preds_isnt: &'static [F2],\n        ex: &'static [&'static str],\n    ) -> Self\n    where\n        F1: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n        F2: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then(move |tok: &Token, src: &[char]| {\n            pred_is(&tok.kind)\n                && !preds_isnt.iter().any(|pred| pred(&tok.kind))\n                && !ex\n                    .iter()\n                    .any(|&word| tok.span.get_content(src).eq_ignore_ascii_case_str(word))\n        })\n    }\n\n    // More than two kinds\n\n    /// Match a token where both of the first two token kind predicates return true,\n    /// and the third returns false.\n    /// For instance, a word that must be both noun and verb, but not adjective.\n    pub fn then_kind_both_but_not<F1, F2, F3>(\n        self,\n        (pred_is_1, pred_is_2): (F1, F2),\n        pred_not: F3,\n    ) -> Self\n    where\n        F1: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n        F2: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n        F3: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then_kind_where(move |k| pred_is_1(k) && pred_is_2(k) && !pred_not(k))\n    }\n\n    /// Match a token where any of the token kind predicates returns true.\n    /// Like `then_kind_either` but for more than two predicates.\n    pub fn then_kind_any<F>(self, preds_is: &'static [F]) -> Self\n    where\n        F: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then_kind_where(move |k| preds_is.iter().any(|pred| pred(k)))\n    }\n\n    /// Match a token where none of the token kind predicates returns true.\n    /// Like `then_kind_neither` but for more than two predicates.\n    pub fn then_kind_none_of<F>(self, preds_isnt: &'static [F]) -> Self\n    where\n        F: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then_kind_where(move |k| preds_isnt.iter().all(|pred| !pred(k)))\n    }\n\n    /// Match a token where any of the token kind predicates returns true,\n    /// and the word is not in the list of exceptions.\n    pub fn then_kind_any_except<F>(\n        self,\n        preds_is: &'static [F],\n        ex: &'static [&'static str],\n    ) -> Self\n    where\n        F: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then(move |tok: &Token, src: &[char]| {\n            preds_is.iter().any(|pred| pred(&tok.kind))\n                && !ex\n                    .iter()\n                    .any(|&word| tok.span.get_content(src).eq_ignore_ascii_case_str(word))\n        })\n    }\n\n    /// Match a token where any of the token kind predicates returns true,\n    /// or the token is in the list of words.\n    pub fn then_kind_any_or_words<F>(\n        self,\n        preds: &'static [F],\n        words: &'static [&'static str],\n    ) -> Self\n    where\n        F: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then(move |tok: &Token, src: &[char]| {\n            preds.iter().any(|pred| pred(&tok.kind))\n                || words\n                    .iter()\n                    .any(|&word| tok.span.get_content(src).eq_ignore_ascii_case_str(word))\n        })\n    }\n\n    /// Match a token where any of the first token kind predicates returns true,\n    /// the second returns false, and the token is not in the list of exceptions.    \n    pub fn then_kind_any_but_not_except<F1, F2>(\n        self,\n        preds_is: &'static [F1],\n        pred_not: F2,\n        ex: &'static [&'static str],\n    ) -> Self\n    where\n        F1: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n        F2: Fn(&TokenKind) -> bool + Send + Sync + 'static,\n    {\n        self.then(move |tok: &Token, src: &[char]| {\n            preds_is.iter().any(|pred| pred(&tok.kind))\n                && !pred_not(&tok.kind)\n                && !ex\n                    .iter()\n                    .any(|&word| tok.span.get_content(src).eq_ignore_ascii_case_str(word))\n        })\n    }\n\n    // Word property matching methods\n\n    // Out-of-vocabulary word. (Words not in the dictionary)\n    gen_then_from_is!(oov);\n    gen_then_from_is!(swear);\n\n    // Part-of-speech matching methods\n\n    // Nominals (nouns and pronouns)\n\n    gen_then_from_is!(nominal);\n    gen_then_from_is!(plural_nominal);\n    gen_then_from_is!(non_plural_nominal);\n    gen_then_from_is!(possessive_nominal);\n\n    // Nouns\n\n    gen_then_from_is!(noun);\n    gen_then_from_is!(proper_noun);\n    gen_then_from_is!(plural_noun);\n    gen_then_from_is!(singular_noun);\n    gen_then_from_is!(mass_noun_only);\n\n    // Pronouns\n\n    gen_then_from_is!(pronoun);\n    gen_then_from_is!(personal_pronoun);\n    gen_then_from_is!(first_person_singular_pronoun);\n    gen_then_from_is!(first_person_plural_pronoun);\n    gen_then_from_is!(second_person_pronoun);\n    gen_then_from_is!(third_person_pronoun);\n    gen_then_from_is!(third_person_singular_pronoun);\n    gen_then_from_is!(third_person_plural_pronoun);\n    gen_then_from_is!(subject_pronoun);\n    gen_then_from_is!(object_pronoun);\n\n    // Verbs\n\n    gen_then_from_is!(verb);\n    gen_then_from_is!(auxiliary_verb);\n    gen_then_from_is!(linking_verb);\n    gen_then_from_is!(verb_lemma);\n    gen_then_from_is!(verb_simple_past_form);\n    gen_then_from_is!(verb_past_participle_form);\n    gen_then_from_is!(verb_progressive_form);\n    gen_then_from_is!(verb_third_person_singular_present_form);\n\n    // Adjectives\n\n    gen_then_from_is!(adjective);\n    gen_then_from_is!(positive_adjective);\n    gen_then_from_is!(comparative_adjective);\n    gen_then_from_is!(superlative_adjective);\n\n    // Adverbs\n\n    gen_then_from_is!(adverb);\n    gen_then_from_is!(frequency_adverb);\n    gen_then_from_is!(degree_adverb);\n\n    // Determiners\n\n    gen_then_from_is!(determiner);\n    gen_then_from_is!(demonstrative_determiner);\n    gen_then_from_is!(possessive_determiner);\n    gen_then_from_is!(quantifier);\n    gen_then_from_is!(non_quantifier_determiner);\n    gen_then_from_is!(non_demonstrative_determiner);\n\n    /// Push an [`IndefiniteArticle`] to the end of the operation list.\n    pub fn then_indefinite_article(self) -> Self {\n        self.then(IndefiniteArticle::default())\n    }\n\n    // Other parts of speech\n\n    gen_then_from_is!(conjunction);\n    gen_then_from_is!(preposition);\n\n    // Numbers\n\n    gen_then_from_is!(number);\n    gen_then_from_is!(cardinal_number);\n    gen_then_from_is!(ordinal_number);\n\n    // Punctuation\n\n    gen_then_from_is!(punctuation);\n    gen_then_from_is!(apostrophe);\n    gen_then_from_is!(comma);\n    gen_then_from_is!(hyphen);\n    gen_then_from_is!(period);\n    gen_then_from_is!(semicolon);\n    gen_then_from_is!(acute);\n    gen_then_from_is!(quote);\n    gen_then_from_is!(backslash);\n    gen_then_from_is!(slash);\n    gen_then_from_is!(percent);\n\n    // Other\n\n    gen_then_from_is!(case_separator);\n    gen_then_from_is!(likely_homograph);\n    gen_then_from_is!(sentence_terminator);\n}\n\nimpl<S> From<S> for SequenceExpr\nwhere\n    S: Step + 'static,\n{\n    fn from(step: S) -> Self {\n        Self {\n            exprs: vec![Box::new(step)],\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::{\n        Document, TokenKind,\n        expr::{ExprExt, SequenceExpr},\n        linting::tests::SpanVecExt,\n    };\n\n    #[test]\n    fn test_kind_both() {\n        let noun_and_verb =\n            SequenceExpr::default().then_kind_both(TokenKind::is_noun, TokenKind::is_verb);\n        let doc = Document::new_plain_english_curated(\"Use a good example.\");\n        let matches = noun_and_verb.iter_matches_in_doc(&doc).collect::<Vec<_>>();\n        assert_eq!(matches.to_strings(&doc), vec![\"Use\", \"good\", \"example\"]);\n    }\n\n    #[test]\n    fn test_adjective_or_determiner() {\n        let expr = SequenceExpr::default()\n            .then_kind_either(TokenKind::is_adjective, TokenKind::is_determiner);\n        let doc = Document::new_plain_english_curated(\"Use a good example.\");\n        let matches = expr.iter_matches_in_doc(&doc).collect::<Vec<_>>();\n        assert_eq!(matches.to_strings(&doc), vec![\"a\", \"good\"]);\n    }\n\n    #[test]\n    fn test_noun_but_not_adjective() {\n        let expr = SequenceExpr::default()\n            .then_kind_is_but_is_not(TokenKind::is_noun, TokenKind::is_adjective);\n        let doc = Document::new_plain_english_curated(\"Use a good example.\");\n        let matches = expr.iter_matches_in_doc(&doc).collect::<Vec<_>>();\n        assert_eq!(matches.to_strings(&doc), vec![\"Use\", \"example\"]);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/similar_to_phrase.rs",
    "content": "use crate::patterns::{WithinEditDistance, Word};\nuse crate::{Document, Span, Token, TokenKind};\n\nuse super::{Expr, SequenceExpr};\n\npub struct SimilarToPhrase {\n    phrase: SequenceExpr,\n    fuzzy_phrase: SequenceExpr,\n}\n\nimpl SimilarToPhrase {\n    /// Create an error-tolerant SequenceExpr that looks for phrases similar to (but not the same as) that contained\n    /// in the provided text.\n    ///\n    /// This is an expensive operation, so try to only do it at startup and in tests.\n    ///\n    /// It will panic if your document is too complex, so only run this with curated phrases.\n    pub fn from_phrase(text: &str, max_edit_dist: u8) -> Self {\n        let document = Document::new_plain_english_curated(text);\n\n        Self::from_doc(&document, max_edit_dist)\n    }\n\n    /// Create an error-tolerant SequenceExpr that looks for phrases similar to (but not the same as) that contained\n    /// in the provided document.\n    ///\n    /// This is an expensive operation, so try to only do it at startup and in tests.\n    ///\n    /// It will panic if your document contains certain token types, so only run this with curated phrases.\n    pub fn from_doc(document: &Document, max_edit_dist: u8) -> Self {\n        let mut phrase = SequenceExpr::default();\n        let mut fuzzy_phrase = SequenceExpr::default();\n\n        for token in document.fat_tokens() {\n            match token.kind {\n                TokenKind::Word(_lexeme_metadata) => {\n                    phrase = phrase.then(Word::from_chars(token.content.as_slice()));\n                    fuzzy_phrase = fuzzy_phrase\n                        .then(WithinEditDistance::new(token.content.into(), max_edit_dist));\n                }\n                TokenKind::Space(_) => {\n                    fuzzy_phrase = fuzzy_phrase.then_whitespace();\n                    phrase = phrase.then_whitespace();\n                }\n                TokenKind::ParagraphBreak => {\n                    fuzzy_phrase = fuzzy_phrase.then_whitespace();\n                    phrase = phrase.then_whitespace();\n                }\n                _ => panic!(\"Fell out of expected document formats.\"),\n            }\n        }\n\n        Self {\n            phrase,\n            fuzzy_phrase,\n        }\n    }\n}\n\nimpl Expr for SimilarToPhrase {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        if self.phrase.run(cursor, tokens, source).is_some() {\n            return None;\n        }\n        self.fuzzy_phrase.run(cursor, tokens, source)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/space_or_hyphen.rs",
    "content": "use crate::expr::FirstMatchOf;\nuse crate::patterns::WhitespacePattern;\nuse crate::{Span, Token};\n\nuse super::Expr;\n\n/// Matches either a space or a hyphen, useful for matching compound words.\n#[derive(Default)]\npub struct SpaceOrHyphen;\n\nimpl Expr for SpaceOrHyphen {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        FirstMatchOf::new(vec![\n            Box::new(WhitespacePattern),\n            Box::new(|tok: &Token, _source: &[char]| tok.kind.is_hyphen()),\n        ])\n        .run(cursor, tokens, source)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/spelled_number_expr.rs",
    "content": "use crate::expr::LongestMatchOf;\nuse crate::patterns::{WhitespacePattern, WordSet};\nuse crate::{Span, Token};\n\nuse super::{Expr, SequenceExpr};\n\n/// Matches spelled-out numbers from one to ninety-nine\n#[derive(Default)]\npub struct SpelledNumberExpr;\n\nimpl Expr for SpelledNumberExpr {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        if tokens.is_empty() {\n            return None;\n        }\n\n        // The numbers that can be in the 2nd position of a compound number.\n        // A subset of the standalone numbers since we can't say \"twenty zero\" or \"twenty eleven\"\n        // \"Zero\" and \"ten\" don't belong: twenty-one ✅ twenty-zero ❌ twenty-ten ❌\n        let units = &[\n            \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\",\n        ];\n\n        // These can't make a compound with `tens` but they can stand alone\n        let teens = &[\n            \"ten\",\n            \"eleven\",\n            \"twelve\",\n            \"thirteen\",\n            \"fourteen\",\n            \"fifteen\",\n            \"sixteen\",\n            \"seventeen\",\n            \"eighteen\",\n            \"nineteen\",\n        ];\n\n        // These can make a compound with the part_2 standalones above.\n        // \"Ten\" and \"hundred\" don't belong: twenty-one ✅ ten-one ❌ hundred-one ❌\n        let tens = &[\n            \"twenty\", \"thirty\", \"forty\", \"fifty\", \"sixty\", \"seventy\", \"eighty\", \"ninety\",\n        ];\n\n        let single_words = WordSet::new(\n            &units\n                .iter()\n                .chain(teens.iter())\n                .chain(tens.iter())\n                .copied()\n                .chain(std::iter::once(\"zero\"))\n                .collect::<Vec<&str>>(),\n        );\n\n        let tens_units_compounds = SequenceExpr::word_set(tens)\n            .then_any_of(vec![\n                Box::new(|t: &Token, _s: &[char]| t.kind.is_hyphen()),\n                Box::new(WhitespacePattern),\n            ])\n            .then_word_set(units);\n\n        let expr =\n            LongestMatchOf::new(vec![Box::new(single_words), Box::new(tens_units_compounds)]);\n\n        expr.run(cursor, tokens, source)\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::SpelledNumberExpr;\n    use crate::Document;\n    use crate::expr::ExprExt;\n    use crate::linting::tests::SpanVecExt;\n\n    #[test]\n    fn matches_single_digit() {\n        let doc = Document::new_markdown_default_curated(\"one two three\");\n        let matches = SpelledNumberExpr.iter_matches_in_doc(&doc);\n        assert_eq!(matches.count(), 3);\n    }\n\n    #[test]\n    fn matches_teens() {\n        let doc = Document::new_markdown_default_curated(\"ten eleven twelve\");\n        let matches = SpelledNumberExpr.iter_matches_in_doc(&doc);\n        assert_eq!(matches.count(), 3);\n    }\n\n    #[test]\n    fn matches_tens() {\n        let doc = Document::new_markdown_default_curated(\"twenty thirty forty\");\n        let matches = SpelledNumberExpr.iter_matches_in_doc(&doc);\n        assert_eq!(matches.count(), 3);\n    }\n\n    #[test]\n    fn matches_compound_numbers() {\n        let doc = Document::new_markdown_default_curated(\"twenty-one thirty-two\");\n        let matches = SpelledNumberExpr\n            .iter_matches_in_doc(&doc)\n            .collect::<Vec<_>>();\n\n        // Debug output\n        println!(\"Found {} matches:\", matches.len());\n        for m in &matches {\n            let text: String = doc.get_tokens()[m.start..m.end]\n                .iter()\n                .map(|t| doc.get_span_content_str(&t.span))\n                .collect();\n            println!(\"- '{text}' (span: {m:?})\");\n        }\n\n        assert_eq!(matches.len(), 2);\n    }\n\n    #[test]\n    fn deep_thought() {\n        let doc = Document::new_markdown_default_curated(\n            \"the answer to the ultimate question of life, the universe, and everything is forty-two\",\n        );\n        let matches = SpelledNumberExpr\n            .iter_matches_in_doc(&doc)\n            .collect::<Vec<_>>();\n\n        dbg!(&matches);\n        dbg!(matches.to_strings(&doc));\n\n        assert_eq!(matches.to_strings(&doc), vec![\"forty-two\"]);\n    }\n\n    #[test]\n    fn jacksons() {\n        let doc = Document::new_markdown_default_curated(\n            \"A, B, C It's easy as one, two, three. Or simple as Do-Re-Mi\",\n        );\n        let matches = SpelledNumberExpr\n            .iter_matches_in_doc(&doc)\n            .collect::<Vec<_>>();\n\n        assert_eq!(matches.to_strings(&doc), vec![\"one\", \"two\", \"three\"]);\n    }\n\n    #[test]\n    fn orwell() {\n        let doc = Document::new_markdown_default_curated(\"Nineteen Eighty-Four\");\n        let matches = SpelledNumberExpr\n            .iter_matches_in_doc(&doc)\n            .collect::<Vec<_>>();\n\n        assert_eq!(matches.to_strings(&doc), vec![\"Nineteen\", \"Eighty-Four\"]);\n    }\n\n    #[test]\n    fn get_smart() {\n        let doc = Document::new_markdown_default_curated(\n            \"Maxwell Smart was Agent Eighty-Six, but who was Agent Ninety-Nine?\",\n        );\n        let matches = SpelledNumberExpr\n            .iter_matches_in_doc(&doc)\n            .collect::<Vec<_>>();\n\n        assert_eq!(matches.to_strings(&doc), vec![\"Eighty-Six\", \"Ninety-Nine\"]);\n    }\n\n    #[test]\n    fn hyphens_or_spaces() {\n        let doc = Document::new_markdown_default_curated(\n            \"twenty-one, thirty two, forty-three, fifty four, sixty-five, seventy six, eighty-seven, ninety eight\",\n        );\n        let matches = SpelledNumberExpr\n            .iter_matches_in_doc(&doc)\n            .collect::<Vec<_>>();\n\n        assert_eq!(\n            matches.to_strings(&doc),\n            vec![\n                \"twenty-one\",\n                \"thirty two\",\n                \"forty-three\",\n                \"fifty four\",\n                \"sixty-five\",\n                \"seventy six\",\n                \"eighty-seven\",\n                \"ninety eight\",\n            ]\n        );\n    }\n\n    #[test]\n    fn waiting_since() {\n        let doc = Document::new_markdown_default_curated(\"I have been waiting since two hours.\");\n        let matches = SpelledNumberExpr\n            .iter_matches_in_doc(&doc)\n            .collect::<Vec<_>>();\n\n        assert_eq!(matches.to_strings(&doc), vec![\"two\"]);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/step.rs",
    "content": "use crate::{LSend, Token, patterns::Pattern};\n\n/// An atomic step within a larger expression.\n///\n/// Its principle job is to identify (if any) the next position of the cursor.\n/// When cursor is moved, all tokens between the current cursor and the target position will be\n/// added to the match group.\npub trait Step: LSend {\n    fn step(&self, tokens: &[Token], cursor: usize, source: &[char]) -> Option<isize>;\n}\n\nimpl<P> Step for P\nwhere\n    P: Pattern,\n{\n    fn step(&self, tokens: &[Token], cursor: usize, source: &[char]) -> Option<isize> {\n        self.matches(&tokens[cursor..], source).map(|i| i as isize)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/time_unit_expr.rs",
    "content": "use crate::expr::LongestMatchOf;\nuse crate::patterns::WordSet;\nuse crate::{Span, Token};\n\nuse super::Expr;\n\n/// Matches a time unit.\n///\n/// Matches standard units from microsecond to decade.\n/// Matches other 'units' such as moment, night, weekend.\n/// Matches singular and plural forms.\n/// Matches possessive forms (which are also common misspellings for the plurals).\n/// Matches abbreviations.\n#[derive(Default)]\npub struct TimeUnitExpr;\n\nimpl Expr for TimeUnitExpr {\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        if tokens.is_empty() {\n            return None;\n        }\n\n        let units_definite_singular = WordSet::new(&[\n            \"microsecond\",\n            \"millisecond\",\n            \"second\",\n            \"minute\",\n            \"hour\",\n            \"day\",\n            \"week\",\n            \"month\",\n            \"year\",\n            \"decade\",\n        ]);\n\n        let units_definite_plural = WordSet::new(&[\n            \"microseconds\",\n            \"milliseconds\",\n            \"seconds\",\n            \"minutes\",\n            \"hours\",\n            \"days\",\n            \"weeks\",\n            \"months\",\n            \"years\",\n            \"decades\",\n        ]);\n\n        let units_definite_apos = WordSet::new(&[\n            \"microsecond's\",\n            \"millisecond's\",\n            \"second's\",\n            \"minute's\",\n            \"hour's\",\n            \"day's\",\n            \"week's\",\n            \"month's\",\n            \"year's\",\n            \"decade's\",\n        ]);\n\n        // ms\n        let units_definite_abbrev = WordSet::new(&[\"ms\"]);\n\n        let units_other_singular = WordSet::new(&[\"moment\", \"night\", \"weekend\"]);\n        let units_other_plural = WordSet::new(&[\"moments\", \"nights\", \"weekends\"]);\n        let units_other_apos = WordSet::new(&[\"moment's\", \"night's\", \"weekend's\"]);\n\n        let units = LongestMatchOf::new(vec![\n            Box::new(units_definite_singular),\n            Box::new(units_definite_plural),\n            Box::new(units_other_singular),\n            Box::new(units_other_plural),\n            Box::new(units_definite_abbrev),\n            Box::new(units_definite_apos),\n            Box::new(units_other_apos),\n        ]);\n\n        units.run(cursor, tokens, source)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/unless_step.rs",
    "content": "use crate::{Token, expr::Expr};\n\nuse super::Step;\n\n/// Provides the ability to use an expression as a condition.\n/// If the condition does __not match__, it will return the result of the provided step.\npub struct UnlessStep<E: Expr, S: Step> {\n    condition: E,\n    step: S,\n}\n\nimpl<E, S> UnlessStep<E, S>\nwhere\n    E: Expr,\n    S: Step,\n{\n    pub fn new(condition: E, step: S) -> Self {\n        Self { condition, step }\n    }\n}\n\nimpl<E: Expr, S: Step> Step for UnlessStep<E, S> {\n    fn step(&self, tokens: &[Token], cursor: usize, source: &[char]) -> Option<isize> {\n        if self.condition.run(cursor, tokens, source).is_none() {\n            self.step.step(tokens, cursor, source)\n        } else {\n            None\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/expr/word_expr_group.rs",
    "content": "use hashbrown::HashMap;\n\nuse super::first_match_of::FirstMatchOf;\nuse super::{Expr, SequenceExpr};\nuse crate::{CharString, Span, Token};\n\n/// An expression collection to look for expressions that start with a specific\n/// word.\n///\n/// The benefit of using this struct over other methods increases for larger collections.\n#[derive(Default)]\npub struct WordExprGroup<E>\nwhere\n    E: Expr,\n{\n    exprs: HashMap<CharString, E>,\n}\n\nimpl WordExprGroup<FirstMatchOf> {\n    pub fn add(&mut self, word: &str, expr: impl Expr + 'static) {\n        let chars = word.chars().collect();\n\n        if let Some(group) = self.exprs.get_mut(&chars) {\n            group.add(expr);\n        } else {\n            let mut group = FirstMatchOf::default();\n            group.add(expr);\n            self.exprs.insert(chars, group);\n        }\n    }\n\n    /// Add a pattern that matches just a word on its own, without anything else required to match.\n    pub fn add_word(&mut self, word: &'static str) {\n        self.add(word, SequenceExpr::default().then_exact_word(word));\n    }\n}\n\nimpl<E> Expr for WordExprGroup<E>\nwhere\n    E: Expr,\n{\n    fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Option<Span<Token>> {\n        let first = tokens.get(cursor)?;\n        if !first.kind.is_word() {\n            return None;\n        }\n\n        let word_chars = first.span.get_content(source);\n        let inner_pattern = self.exprs.get(word_chars)?;\n\n        inner_pattern.run(cursor, tokens, source)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/fat_token.rs",
    "content": "use serde::{Deserialize, Serialize};\n\nuse crate::{CharStringExt, TokenKind};\n\n/// A [`Token`](crate::Token) that holds its content as a fat [`Vec<char>`] rather than as a\n/// [`Span`](crate::Span).\n#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, PartialOrd, Hash, Eq)]\npub struct FatToken {\n    pub content: Vec<char>,\n    pub kind: TokenKind,\n}\n\nimpl From<FatStringToken> for FatToken {\n    fn from(value: FatStringToken) -> Self {\n        Self {\n            content: value.content.chars().collect(),\n            kind: value.kind,\n        }\n    }\n}\n\n/// Similar to a [`FatToken`], but uses a [`String`] as the underlying store.\n#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, PartialOrd, Hash, Eq)]\npub struct FatStringToken {\n    pub content: String,\n    pub kind: TokenKind,\n}\n\nimpl From<FatToken> for FatStringToken {\n    fn from(value: FatToken) -> Self {\n        Self {\n            content: value.content.to_string(),\n            kind: value.kind,\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/ignored_lints/lint_context.rs",
    "content": "use std::hash::{DefaultHasher, Hash, Hasher};\n\nuse serde::{Deserialize, Serialize};\n\nuse crate::{\n    Document, FatToken,\n    linting::{Lint, LintKind, Suggestion},\n};\n\n/// A location-agnostic structure that attempts to captures the context and content that a [`Lint`]\n/// occurred.\n#[derive(Debug, Hash, Serialize, Deserialize)]\npub struct LintContext {\n    pub lint_kind: LintKind,\n    pub suggestions: Vec<Suggestion>,\n    pub message: String,\n    pub priority: u8,\n    pub tokens: Vec<FatToken>,\n}\n\nimpl LintContext {\n    pub fn from_lint(lint: &Lint, document: &Document) -> Self {\n        let Lint {\n            lint_kind,\n            suggestions,\n            message,\n            priority,\n            ..\n        } = lint.clone();\n\n        let problem_tokens = document.token_indices_intersecting(lint.span);\n        let prequel_tokens = lint\n            .span\n            .with_len(2)\n            .pulled_by(2)\n            .map(|v| document.token_indices_intersecting(v))\n            .unwrap_or_default();\n        let sequel_tokens = document.token_indices_intersecting(lint.span.with_len(2).pushed_by(2));\n\n        let tokens = prequel_tokens\n            .into_iter()\n            .chain(problem_tokens)\n            .chain(sequel_tokens)\n            .flat_map(|idx| document.get_token(idx))\n            .map(|t| t.to_fat(document.get_source()))\n            .collect();\n\n        Self {\n            lint_kind,\n            suggestions,\n            message,\n            priority,\n            tokens,\n        }\n    }\n\n    pub fn default_hash(&self) -> u64 {\n        let mut hasher = DefaultHasher::default();\n        self.hash(&mut hasher);\n\n        hasher.finish()\n    }\n}\n"
  },
  {
    "path": "harper-core/src/ignored_lints/mod.rs",
    "content": "mod lint_context;\n\nuse hashbrown::HashSet;\npub use lint_context::LintContext;\nuse serde::{Deserialize, Serialize};\n\nuse crate::{Document, linting::Lint};\n\n/// A structure that keeps track of lints that have been ignored by users.\n///\n/// To use this structure, apply [`Self::remove_ignored`] on the output of a\n/// [`Linter`](crate::linting::Linter).\n#[derive(Debug, Default, Serialize, Deserialize)]\npub struct IgnoredLints {\n    context_hashes: HashSet<u64>,\n}\n\nimpl IgnoredLints {\n    pub fn new() -> Self {\n        Self::default()\n    }\n\n    /// Move entries from another instance to this one.\n    pub fn append(&mut self, other: Self) {\n        self.context_hashes.extend(other.context_hashes)\n    }\n\n    /// Add a lint to the list.\n    pub fn ignore_lint(&mut self, lint: &Lint, document: &Document) {\n        let context = LintContext::from_lint(lint, document);\n        let context_hash = context.default_hash();\n\n        self.ignore_hash(context_hash);\n    }\n\n    /// Add a context hash to the list of ignored lints.\n    pub fn ignore_hash(&mut self, hash: u64) {\n        self.context_hashes.insert(hash);\n    }\n\n    pub fn is_ignored(&self, lint: &Lint, document: &Document) -> bool {\n        let context = LintContext::from_lint(lint, document);\n        let hash = context.default_hash();\n\n        self.context_hashes.contains(&hash)\n    }\n\n    /// Remove ignored Lints from a [`Vec`].\n    pub fn remove_ignored(&self, lints: &mut Vec<Lint>, document: &Document) {\n        if self.context_hashes.is_empty() {\n            return;\n        }\n\n        lints.retain(|lint| !self.is_ignored(lint, document));\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use quickcheck::TestResult;\n    use quickcheck_macros::quickcheck;\n\n    use super::IgnoredLints;\n    use crate::spell::FstDictionary;\n    use crate::{\n        Dialect, Document,\n        linting::{LintGroup, Linter},\n    };\n\n    #[quickcheck]\n    fn can_ignore_all(text: String) -> bool {\n        let document = Document::new_markdown_default_curated(&text);\n\n        let mut lints =\n            LintGroup::new_curated(FstDictionary::curated(), Dialect::American).lint(&document);\n\n        let mut ignored = IgnoredLints::new();\n\n        for lint in &lints {\n            ignored.ignore_lint(lint, &document);\n        }\n\n        ignored.remove_ignored(&mut lints, &document);\n        lints.is_empty()\n    }\n\n    #[quickcheck]\n    fn can_ignore_first(text: String) -> TestResult {\n        let document = Document::new_markdown_default_curated(&text);\n\n        let mut lints =\n            LintGroup::new_curated(FstDictionary::curated(), Dialect::American).lint(&document);\n\n        let Some(first) = lints.first().cloned() else {\n            return TestResult::discard();\n        };\n\n        let mut ignored = IgnoredLints::new();\n        ignored.ignore_lint(&first, &document);\n\n        ignored.remove_ignored(&mut lints, &document);\n\n        TestResult::from_bool(!lints.contains(&first))\n    }\n\n    // Check that ignoring the nth lint found in source text actually removes it (and no others).\n    fn assert_ignore_lint_reduction(source: &str, nth_lint: usize) {\n        let document = Document::new_markdown_default_curated(source);\n\n        let mut lints =\n            LintGroup::new_curated(FstDictionary::curated(), Dialect::American).lint(&document);\n\n        let nth = lints.get(nth_lint).cloned().unwrap_or_else(|| {\n            panic!(\"If ignoring the lint at {nth_lint}, make sure there are enough problems.\")\n        });\n\n        let mut ignored = IgnoredLints::new();\n        ignored.ignore_lint(&nth, &document);\n\n        let prev_count = lints.len();\n\n        ignored.remove_ignored(&mut lints, &document);\n\n        assert_eq!(prev_count, lints.len() + 1);\n        assert!(!lints.contains(&nth));\n    }\n\n    #[test]\n    fn an_a() {\n        let source = \"There is an problem in this text. Here is an second one.\";\n\n        assert_ignore_lint_reduction(source, 0);\n        assert_ignore_lint_reduction(source, 1);\n    }\n\n    #[test]\n    fn spelling() {\n        let source = \"There is a problm in this text. Here is a scond one.\";\n\n        assert_ignore_lint_reduction(source, 0);\n        assert_ignore_lint_reduction(source, 1);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/indefinite_article.rs",
    "content": "use std::borrow::Cow;\n\nuse itertools::Itertools;\n\nuse crate::case::Case::Upper;\nuse crate::char_ext::CharExt;\nuse crate::{CaseIterExt, Dialect};\n\n#[derive(PartialEq)]\npub enum InitialSound {\n    Vowel,\n    Consonant,\n    Either, // for SQL\n}\n\n/// Checks whether a provided word begins with a vowel _sound_. Returns `None` if `word` is empty.\n///\n/// It was produced through trial and error.\n/// Matches with 99.71% and 99.77% of vowels and non-vowels in the\n/// Carnegie-Mellon University word -> pronunciation dataset.\npub fn starts_with_vowel(word: &[char], dialect: Dialect) -> Option<InitialSound> {\n    if word.is_empty() {\n        return None;\n    }\n\n    if matches!(word, ['S', 'Q', 'L'] | ['L', 'E', 'D']) {\n        return Some(InitialSound::Either);\n    }\n\n    // Try to get the first chunk of a word that appears to be a partial initialism.\n    // For example:\n    // - `RFL` from `RFLink`\n    // - `m` from `mDNS`\n    let word = {\n        let word_casing = word.get_casing_unfiltered();\n        match word_casing.as_slice() {\n            // Lower-upper or upper-upper, possibly a (partial) initialism.\n            [Some(first_char_case), Some(Upper), ..] => {\n                &word[0..word_casing\n                    .iter()\n                    .position(|c| *c != Some(*first_char_case))\n                    .unwrap_or(word.len())]\n            }\n            // Lower-lower or upper-lower, unlikely to be a partial initialism.\n            _ => word,\n        }\n    };\n\n    let is_likely_initialism = word.iter().all(|c| !c.is_alphabetic() || c.is_uppercase());\n\n    if word.len() == 1 || (is_likely_initialism && !is_likely_acronym(word)) {\n        return Some(\n            if matches!(\n                word[0].to_ascii_uppercase(),\n                'A' | 'E' | 'F' | 'H' | 'I' | 'L' | 'M' | 'N' | 'O' | 'R' | 'S' | 'X'\n            ) {\n                InitialSound::Vowel\n            } else {\n                InitialSound::Consonant\n            },\n        );\n    }\n\n    let word = to_lower_word(word);\n    let word = word.as_ref();\n\n    if matches!(word, ['u', 'b', 'i', ..]) {\n        return Some(InitialSound::Either);\n    }\n\n    if matches!(word, ['e', 'u', 'l', 'e', ..]) {\n        return Some(InitialSound::Vowel);\n    }\n\n    if matches!(\n        word,\n        ['u', 'k', ..]\n            | ['u', 'd', 'e', ..] // for 'udev'\n            | ['e', 'u', 'p', 'h', ..]\n            | ['e', 'u', 'g' | 'l' | 'c', ..]\n            | ['o', 'n', 'e', ..]\n            | ['o', 'n', 'c', 'e']\n    ) {\n        return Some(InitialSound::Consonant);\n    }\n\n    if matches!(\n        word,\n        ['h', 'o', 'u', 'r', ..]\n            | ['u', 'n', 'i', 'n' | 'm', ..]\n            | ['u', 'n', 'a' | 'u', ..]\n            | ['u', 'r', 'b', ..]\n            | ['i', 'n', 't', ..]\n    ) {\n        return Some(InitialSound::Vowel);\n    }\n\n    if matches!(word, ['h', 'e', 'r', 'b', ..] if dialect == Dialect::American || dialect == Dialect::Canadian)\n    {\n        return Some(InitialSound::Vowel);\n    }\n\n    if matches!(word, ['u', 'n' | 's', 'i' | 'a' | 'u', ..]) {\n        return Some(InitialSound::Consonant);\n    }\n\n    if matches!(word, ['u', 'n', ..]) {\n        return Some(InitialSound::Vowel);\n    }\n\n    if matches!(word, ['u', 'r', 'g', ..]) {\n        return Some(InitialSound::Vowel);\n    }\n\n    if matches!(word, ['u', 't', 't', ..]) {\n        return Some(InitialSound::Vowel);\n    }\n\n    if matches!(\n        word,\n        ['u', 't' | 'r' | 'n', ..] | ['e', 'u', 'r', ..] | ['u', 'w', ..] | ['u', 's', 'e', ..]\n    ) {\n        return Some(InitialSound::Consonant);\n    }\n\n    if matches!(word, ['o', 'n', 'e', 'a' | 'e' | 'i' | 'u', 'l' | 'd', ..]) {\n        return Some(InitialSound::Vowel);\n    }\n\n    if matches!(word, ['o', 'n', 'e', 'a' | 'e' | 'i' | 'u' | '-' | 's', ..]) {\n        return Some(InitialSound::Consonant);\n    }\n\n    if matches!(\n        word,\n        ['s', 'o', 's']\n            | ['r', 'z', ..]\n            | ['n', 'g', ..]\n            | ['n', 'v', ..]\n            | ['x', 'b', 'o', 'x']\n            | ['h', 'e', 'i', 'r', ..]\n            | ['h', 'o', 'n', 'o', 'r', ..]\n            | ['h', 'o', 'n', 'e', 's', ..]\n    ) {\n        return Some(InitialSound::Vowel);\n    }\n\n    if matches!(\n        word,\n        ['j', 'u' | 'o', 'n', ..] | ['j', 'u', 'r', 'a' | 'i' | 'o', ..]\n    ) {\n        return Some(InitialSound::Consonant);\n    }\n\n    if matches!(word, ['x', '-' | '\\'' | '.' | 'o' | 's', ..]) {\n        return Some(InitialSound::Vowel);\n    }\n\n    if word[0].is_vowel() {\n        return Some(InitialSound::Vowel);\n    }\n\n    Some(InitialSound::Consonant)\n}\n\nfn to_lower_word(word: &[char]) -> Cow<'_, [char]> {\n    if word.iter().any(|c| c.is_uppercase()) {\n        Cow::Owned(\n            word.iter()\n                .flat_map(|c| c.to_lowercase())\n                .collect::<Vec<_>>(),\n        )\n    } else {\n        Cow::Borrowed(word)\n    }\n}\n\nfn is_likely_acronym(word: &[char]) -> bool {\n    /// Does the word contain any sequences that might indicate it's not an acronym?\n    fn word_contains_false_positive_sequence(word: &[char]) -> bool {\n        let likely_false_positive_sequences = [['V', 'C']];\n        for fp_sequence in likely_false_positive_sequences {\n            if word\n                .windows(fp_sequence.len())\n                .any(|subslice| subslice == fp_sequence)\n            {\n                return true;\n            }\n        }\n        false\n    }\n\n    // If the initialism is shorter than this, skip it.\n    const MIN_LEN: usize = 3;\n\n    if let Some(first_chars) = word.get(..MIN_LEN)\n        // Unlikely to be an acronym if it contains non-alphabetic characters.\n        && first_chars.iter().copied().all(char::is_alphabetic)\n        && !word_contains_false_positive_sequence(word)\n    {\n        let vowel_map = first_chars\n            .iter()\n            .map(CharExt::is_vowel)\n            .collect_array::<MIN_LEN>()\n            .unwrap();\n        matches!(vowel_map, [false, true, false] | [false, true, true])\n    } else {\n        false\n    }\n}\n"
  },
  {
    "path": "harper-core/src/irregular_nouns.rs",
    "content": "use serde::Deserialize;\nuse std::sync::{Arc, LazyLock};\n\ntype Noun = (String, String);\n\n#[derive(Debug, Deserialize)]\npub struct IrregularNouns {\n    nouns: Vec<Noun>,\n}\n\n/// The uncached function that is used to produce the original copy of the\n/// irregular noun table.\nfn uncached_inner_new() -> Arc<IrregularNouns> {\n    IrregularNouns::from_json_file(include_str!(\"../irregular_nouns.json\"))\n        .map(Arc::new)\n        .unwrap_or_else(|e| panic!(\"Failed to load irregular noun table: {}\", e))\n}\n\nstatic NOUNS: LazyLock<Arc<IrregularNouns>> = LazyLock::new(uncached_inner_new);\n\nimpl IrregularNouns {\n    pub fn new() -> Self {\n        Self { nouns: vec![] }\n    }\n\n    pub fn from_json_file(json: &str) -> Result<Self, serde_json::Error> {\n        // Deserialize into Vec<serde_json::Value> to handle mixed types\n        let values: Vec<serde_json::Value> =\n            serde_json::from_str(json).expect(\"Failed to parse irregular nouns JSON\");\n\n        let mut nouns = Vec::new();\n\n        for value in values {\n            match value {\n                serde_json::Value::Array(arr) if arr.len() == 2 => {\n                    // Handle array of 2 strings\n                    if let (Some(singular), Some(plural)) = (arr[0].as_str(), arr[1].as_str()) {\n                        nouns.push((singular.to_string(), plural.to_string()));\n                    }\n                }\n                // Strings are used for comments to guide contributors editing the file\n                serde_json::Value::String(_) => {}\n                _ => {}\n            }\n        }\n\n        Ok(Self { nouns })\n    }\n\n    pub fn curated() -> Arc<Self> {\n        (*NOUNS).clone()\n    }\n\n    pub fn get_plural_for_singular(&self, singular: &str) -> Option<&str> {\n        self.nouns\n            .iter()\n            .find(|(sg, _)| sg.eq_ignore_ascii_case(singular))\n            .map(|(_, pl)| pl.as_str())\n    }\n\n    pub fn get_singular_for_plural(&self, plural: &str) -> Option<&str> {\n        self.nouns\n            .iter()\n            .find(|(_, pl)| pl.eq_ignore_ascii_case(plural))\n            .map(|(sg, _)| sg.as_str())\n    }\n}\n\nimpl Default for IrregularNouns {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn can_find_irregular_plural_for_singular_lowercase() {\n        assert_eq!(\n            IrregularNouns::curated().get_plural_for_singular(\"man\"),\n            Some(\"men\")\n        );\n    }\n\n    #[test]\n    fn can_find_irregular_plural_for_singular_uppercase() {\n        assert_eq!(\n            IrregularNouns::curated().get_plural_for_singular(\"WOMAN\"),\n            Some(\"women\")\n        );\n    }\n\n    #[test]\n    fn can_find_singular_for_irregular_plural() {\n        assert_eq!(\n            IrregularNouns::curated().get_singular_for_plural(\"children\"),\n            Some(\"child\")\n        );\n    }\n\n    #[test]\n    fn cant_find_regular_plural() {\n        assert_eq!(\n            IrregularNouns::curated().get_plural_for_singular(\"car\"),\n            None\n        );\n    }\n\n    #[test]\n    fn cant_find_non_noun() {\n        assert_eq!(\n            IrregularNouns::curated().get_plural_for_singular(\"the\"),\n            None\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/irregular_verbs.rs",
    "content": "use serde::Deserialize;\nuse std::sync::{Arc, LazyLock};\n\ntype Verb = (String, String, String);\n\n#[derive(Debug, Deserialize)]\npub struct IrregularVerbs {\n    verbs: Vec<Verb>,\n}\n\n/// The uncached function that is used to produce the original copy of the\n/// irregular verb table.\nfn uncached_inner_new() -> Arc<IrregularVerbs> {\n    IrregularVerbs::from_json_file(include_str!(\"../irregular_verbs.json\"))\n        .map(Arc::new)\n        .unwrap_or_else(|e| panic!(\"Failed to load irregular verb table: {}\", e))\n}\n\nstatic VERBS: LazyLock<Arc<IrregularVerbs>> = LazyLock::new(uncached_inner_new);\n\nimpl IrregularVerbs {\n    pub fn new() -> Self {\n        Self { verbs: vec![] }\n    }\n\n    pub fn from_json_file(json: &str) -> Result<Self, serde_json::Error> {\n        // Deserialize into Vec<serde_json::Value> to handle mixed types\n        let values: Vec<serde_json::Value> =\n            serde_json::from_str(json).expect(\"Failed to parse irregular verbs JSON\");\n\n        let mut verbs = Vec::new();\n\n        for value in values {\n            match value {\n                serde_json::Value::Array(arr) if arr.len() == 3 => {\n                    // Handle array of 3 strings\n                    if let (Some(lemma), Some(preterite), Some(past_participle)) =\n                        (arr[0].as_str(), arr[1].as_str(), arr[2].as_str())\n                    {\n                        verbs.push((\n                            lemma.to_string(),\n                            preterite.to_string(),\n                            past_participle.to_string(),\n                        ));\n                    }\n                }\n                // Strings are used for comments to guide contributors editing the file\n                serde_json::Value::String(_) => {}\n                _ => {}\n            }\n        }\n\n        Ok(Self { verbs })\n    }\n\n    pub fn curated() -> Arc<Self> {\n        (*VERBS).clone()\n    }\n\n    pub fn get_past_participle_for_preterite(&self, preterite: &str) -> Option<&str> {\n        self.verbs\n            .iter()\n            .find(|(_, pt, _)| pt.eq_ignore_ascii_case(preterite))\n            .map(|(_, _, pp)| pp.as_str())\n    }\n\n    pub fn get_lemma_for_preterite(&self, preterite: &str) -> Option<&str> {\n        self.verbs\n            .iter()\n            .find(|(_, pt, _)| pt.eq_ignore_ascii_case(preterite))\n            .map(|(lemma, _, _)| lemma.as_str())\n    }\n\n    pub fn get_pasts_for_lemma(&self, lemma: &str) -> Option<(&str, &str)> {\n        self.verbs\n            .iter()\n            .find(|(l, _, _)| l.eq_ignore_ascii_case(lemma))\n            .map(|(_, pt, pp)| (pt.as_str(), pp.as_str()))\n    }\n}\n\nimpl Default for IrregularVerbs {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn can_find_irregular_past_participle_for_preterite_lowercase() {\n        assert_eq!(\n            IrregularVerbs::curated().get_past_participle_for_preterite(\"arose\"),\n            Some(\"arisen\")\n        );\n    }\n\n    #[test]\n    fn can_find_irregular_past_participle_for_preterite_uppercase() {\n        assert_eq!(\n            IrregularVerbs::curated().get_past_participle_for_preterite(\"WENT\"),\n            Some(\"gone\")\n        );\n    }\n\n    #[test]\n    fn can_find_irregular_past_participle_same_as_past_tense() {\n        assert_eq!(\n            IrregularVerbs::curated().get_past_participle_for_preterite(\"taught\"),\n            Some(\"taught\")\n        );\n    }\n\n    #[test]\n    fn cant_find_regular_past_participle() {\n        assert_eq!(\n            IrregularVerbs::curated().get_past_participle_for_preterite(\"walked\"),\n            None\n        );\n    }\n\n    #[test]\n    fn cant_find_non_verb() {\n        assert_eq!(\n            IrregularVerbs::curated().get_past_participle_for_preterite(\"the\"),\n            None\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/language_detection.rs",
    "content": "//! This module implements rudimentary, dictionary-based English language detection.\n\nuse crate::spell::Dictionary;\nuse crate::{Document, Token, TokenKind};\n\n/// Check if the contents of the document are likely intended to represent\n/// English.\npub fn is_doc_likely_english(doc: &Document, dict: &impl Dictionary) -> bool {\n    is_likely_english(doc.get_tokens(), doc.get_source(), dict)\n}\n\n/// Check if given tokens are likely intended to represent English.\npub fn is_likely_english(toks: &[Token], source: &[char], dict: &impl Dictionary) -> bool {\n    let mut total_words = 0;\n    let mut valid_words = 0;\n    let mut punctuation = 0;\n    let mut unlintable = 0;\n\n    for token in toks {\n        match token.kind {\n            TokenKind::Word(_) => {\n                total_words += 1;\n\n                let word_content = token.span.get_content(source);\n                if dict.contains_word(word_content) {\n                    valid_words += 1;\n                }\n            }\n            TokenKind::Punctuation(_) => punctuation += 1,\n            TokenKind::Unlintable => unlintable += 1,\n            _ => (),\n        }\n    }\n\n    if total_words <= 7 && total_words - valid_words > 0 {\n        return false;\n    }\n\n    if unlintable > valid_words {\n        return false;\n    }\n\n    if (punctuation as f32 * 1.25) > valid_words as f32 {\n        return false;\n    }\n\n    if (valid_words as f64 / total_words as f64) < 0.7 {\n        return false;\n    }\n\n    true\n}\n\n#[cfg(test)]\nmod tests {\n    use super::is_doc_likely_english;\n    use crate::Document;\n    use crate::spell::FstDictionary;\n\n    fn assert_not_english(source: &'static str) {\n        let dict = FstDictionary::curated();\n        let doc = Document::new_plain_english(source, &dict);\n        let is_likely_english = is_doc_likely_english(&doc, &dict);\n        dbg!(source);\n        assert!(!is_likely_english);\n    }\n\n    fn assert_english(source: &'static str) {\n        let dict = FstDictionary::curated();\n        let doc = Document::new_plain_english(source, &dict);\n        let is_likely_english = is_doc_likely_english(&doc, &dict);\n        dbg!(source);\n        assert!(is_likely_english);\n    }\n\n    #[test]\n    fn detects_spanish() {\n        assert_not_english(\"Esto es español. Harper no debería marcarlo como inglés.\");\n    }\n\n    #[test]\n    fn detects_french() {\n        assert_not_english(\n            \"C'est du français. Il ne devrait pas être marqué comme anglais par Harper.\",\n        );\n    }\n\n    #[test]\n    fn detects_shebang() {\n        assert_not_english(\"#! /bin/bash\");\n        assert_not_english(\"#! /usr/bin/fish\");\n    }\n\n    #[test]\n    fn detects_short_english() {\n        assert_english(\"This is English!\");\n    }\n\n    #[test]\n    fn detects_english() {\n        assert_english(\"This is perfectly valid English, evn if it has a cople typos.\")\n    }\n\n    #[test]\n    fn detects_expressive_english() {\n        assert_english(\"Look above! That is real English! So is this: bippity bop!\")\n    }\n\n    /// Useful for detecting commented-out code.\n    #[test]\n    fn detects_python_fib() {\n        assert_not_english(\n            r\"\ndef fibIter(n):\n    if n < 2:\n        return n\n    fibPrev = 1\n    fib = 1\n    for _ in range(2, n):\n        fibPrev, fib = fib, fib + fibPrev\n    return fib\n        \",\n        );\n    }\n\n    #[test]\n    fn mixed_french_english_park() {\n        assert_not_english(\"Je voudrais promener au the park a huit heures with ma voisine\");\n    }\n\n    #[test]\n    fn mixed_french_english_drunk() {\n        assert_not_english(\"Je ne suis pas drunk, je suis only ivre by you\");\n    }\n\n    #[test]\n    fn mixed_french_english_dress() {\n        assert_not_english(\n            \"Je buy une robe nouveau chaque Tuesday, mais aujourd'hui, je don't have temps\",\n        );\n    }\n\n    #[test]\n    fn english_motto() {\n        assert_english(\"I have a simple motto in life\");\n    }\n}\n"
  },
  {
    "path": "harper-core/src/lexing/email_address.rs",
    "content": "use itertools::Itertools;\n\nuse super::FoundToken;\nuse super::hostname::lex_hostname;\nuse crate::TokenKind;\n\n/// The maximum length of an email address, in characters.\npub(crate) const MAX_EMAIL_LEN: usize = 254;\n\npub fn lex_email_address(source: &[char]) -> Option<FoundToken> {\n    let source = &source[..usize::min(source.len(), MAX_EMAIL_LEN)];\n\n    // Location of the @ sign\n    let at_loc = {\n        let mut iter = source.iter().enumerate();\n        // Assuming we don't start lexing in the middle of a local-part, i.e. we start unquoted.\n        let mut in_quote = false;\n        // Loop until we find an acceptable '@' or a reason to early-exit.\n        loop {\n            match iter.next()? {\n                (_, '\"') => in_quote = !in_quote,\n                // Unquoted space; can't be a valid local-part.\n                (_, ' ') if !in_quote => return None,\n                (i, '@') if !in_quote => break i,\n                _ => {}\n            }\n        }\n    };\n\n    let local_part = &source[0..at_loc];\n\n    if !validate_local_part(local_part) {\n        return None;\n    }\n\n    let domain_part_len = lex_hostname(&source[at_loc + 1..])?;\n\n    if domain_part_len == 0 {\n        return None;\n    }\n\n    Some(FoundToken {\n        next_index: at_loc + 1 + domain_part_len,\n        token: TokenKind::EmailAddress,\n    })\n}\n\n/// Check to see if a given slice is a valid local part of an email address.\nfn validate_local_part(mut local_part: &[char]) -> bool {\n    if local_part.len() > 64 || local_part.is_empty() {\n        return false;\n    }\n\n    let is_quoted =\n        local_part.first().cloned() == Some('\"') && local_part.last().cloned() == Some('\"');\n\n    if is_quoted && local_part.len() < 2 {\n        return false;\n    }\n\n    if is_quoted {\n        local_part = &local_part[1..local_part.len() - 1];\n    }\n\n    if !is_quoted {\n        if !local_part.iter().cloned().all(valid_unquoted_character) {\n            return false;\n        }\n\n        if local_part.first().cloned().unwrap() == '.' || local_part.last().cloned().unwrap() == '.'\n        {\n            return false;\n        }\n\n        for (c, n) in local_part.iter().tuple_windows() {\n            if *c == '.' && *n == '.' {\n                return false;\n            }\n        }\n    } else {\n        let mut iter = local_part.iter().cloned();\n\n        while let Some(c) = iter.next() {\n            if c == '\\\\' {\n                iter.next();\n                continue;\n            }\n\n            let also_valid = ['(', ')', ',', ':', ';', '<', '>', '@', '[', ']', ' '];\n\n            if !valid_unquoted_character(c) && !also_valid.contains(&c) {\n                return false;\n            }\n        }\n    }\n\n    true\n}\n\n/// Check if a given character is valid in an unquoted local part of an address\nfn valid_unquoted_character(c: char) -> bool {\n    if matches!(c,\n        'A'..='Z' |\n        'a'..='z' |\n        '0'..='9'\n    ) {\n        return true;\n    }\n\n    if c > '\\u{007F}' {\n        return true;\n    }\n\n    let others = [\n        '!', '#', '$', '%', '&', '\\'', '*', '+', '-', '/', '=', '?', '^', '_', '`', '{', '|', '}',\n        '~', '.',\n    ];\n\n    if others.contains(&c) {\n        return true;\n    }\n\n    false\n}\n\n#[cfg(test)]\nmod tests {\n    use rand::RngExt;\n\n    use super::super::hostname::tests::example_domain_parts;\n    use super::{lex_email_address, validate_local_part};\n\n    fn example_local_parts() -> impl Iterator<Item = Vec<char>> {\n        [\n            r\"simple\",\n            r\"very.common\",\n            r\"x\",\n            r\"long.email-address-with-hyphens\",\n            r\"user.name+tag+sorting\",\n            r\"name/surname\",\n            r\"admin\",\n            r\"example\",\n            r#\"\" \"\"#,\n            r#\"\"john..doe\"\"#,\n            r\"mailhost!username\",\n            r#\"\"very.(),:;<>[]\\\".VERY.\\\"very@\\\\ \\\"very\\\".unusual\"\"#,\n            r\"user%example.com\",\n            r\"user-\",\n            r\"postmaster\",\n            r\"postmaster\",\n            r\"_test\",\n        ]\n        .into_iter()\n        .map(|s| s.chars().collect())\n    }\n\n    #[test]\n    fn example_local_parts_pass_validation() {\n        for local in example_local_parts() {\n            dbg!(local.iter().collect::<String>());\n            assert!(validate_local_part(&local));\n        }\n    }\n\n    #[test]\n    fn test_many_example_email_addresses() {\n        for local in example_local_parts() {\n            for mut domain in example_domain_parts() {\n                // Generate email address\n                let mut address = local.clone();\n                address.push('@');\n                address.append(&mut domain);\n\n                dbg!(address.iter().collect::<String>());\n                let found = lex_email_address(&address).unwrap();\n                assert_eq!(found.next_index, address.len());\n            }\n        }\n    }\n\n    #[test]\n    fn does_not_allow_empty_domain() {\n        for local in example_local_parts() {\n            // Generate invalid email address\n            let mut address = local.clone();\n            address.push('@');\n            address.push(' ');\n\n            assert!(lex_email_address(&address).is_none());\n        }\n    }\n\n    /// Tests that the email parser will not throw a panic under some random\n    /// situations.\n    #[test]\n    fn survives_random_chars() {\n        let mut rng = rand::rng();\n\n        let mut buf = [' '; 128];\n\n        for _ in 0..1 << 16 {\n            buf.fill_with(|| rng.random());\n\n            lex_email_address(&buf);\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/lexing/hostname.rs",
    "content": "use crate::TokenKind;\n\nuse super::FoundToken;\n\n/// Lex a hostname token.\npub fn lex_hostname_token(source: &[char]) -> Option<FoundToken> {\n    let len = lex_hostname(source)?;\n\n    // Might be word, just skip it.\n    if len <= 1 {\n        return None;\n    }\n\n    if !source.get(1..len - 1)?.contains(&'.') {\n        return None;\n    }\n\n    if source.get(len - 1) == Some(&'.') {\n        return None;\n    }\n\n    // For the sake of semantics and downstream grammar checking.\n    if !ends_with_common_tld(&source[0..len]) {\n        return None;\n    }\n\n    Some(FoundToken {\n        next_index: len,\n        token: TokenKind::Hostname,\n    })\n}\n\npub fn lex_hostname(source: &[char]) -> Option<usize> {\n    let mut passed_chars = 0;\n\n    // The beginning has different requirements from the rest of the hostname.\n    let first = source.first()?;\n\n    if !matches!(first,  'A'..='Z' |  'a'..='z' | '0'..='9' ) {\n        return None;\n    }\n\n    for label in source.split(|c| *c == '.') {\n        for c in label {\n            passed_chars += 1;\n            if !matches!(c,  'A'..='Z' |  'a'..='z' | '0'..='9' | '-') {\n                return Some(passed_chars - 1);\n            }\n        }\n\n        passed_chars += 1;\n    }\n\n    if passed_chars == 0 {\n        None\n    } else {\n        Some(passed_chars - 1)\n    }\n}\n\nconst COMMON_TLDS: &[&[char]] = &[\n    &['c', 'o', 'm'],\n    &['n', 'e', 't'],\n    &['o', 'r', 'g'],\n    &['e', 'd', 'u'],\n    &['g', 'o', 'v'],\n    &['m', 'i', 'l'],\n    &['t', 'x', 't'],\n    &['i', 'o'],\n    &['c', 'o'],\n    &['u', 's'],\n    &['u', 'k'],\n    &['d', 'e'],\n    &['c', 'a'],\n    &['a', 'u'],\n    &['j', 'p'],\n];\n\nfn ends_with_common_tld(input: &[char]) -> bool {\n    for tld in COMMON_TLDS {\n        let n = tld.len();\n        if input.len() >= n && &input[input.len() - n..] == *tld {\n            return true;\n        }\n    }\n    false\n}\n\n#[cfg(test)]\npub mod tests {\n    use super::lex_hostname;\n\n    pub fn example_domain_parts() -> impl Iterator<Item = Vec<char>> {\n        [\n            r\"example.com\",\n            r\"example.com\",\n            r\"example.com\",\n            r\"and.subdomains.example.com\",\n            r\"example.com\",\n            r\"example.com\",\n            r\"example\",\n            r\"s.example\",\n            r\"example.org\",\n            r\"example.org\",\n            r\"example.org\",\n            r\"strange.example.com\",\n            r\"example.org\",\n            r\"example.org\",\n        ]\n        .into_iter()\n        .map(|s| s.chars().collect())\n    }\n\n    #[test]\n    fn can_parse_example_hostnames() {\n        for domain in example_domain_parts() {\n            dbg!(domain.iter().collect::<String>());\n            assert_eq!(lex_hostname(&domain), Some(domain.len()));\n        }\n    }\n\n    #[test]\n    fn hyphen_cannot_open_hostname() {\n        let host: Vec<_> = \"-something.com\".chars().collect();\n        assert!(lex_hostname(&host).is_none())\n    }\n}\n"
  },
  {
    "path": "harper-core/src/lexing/mod.rs",
    "content": "mod email_address;\nmod hostname;\nmod url;\n\nuse hostname::lex_hostname_token;\nuse ordered_float::OrderedFloat;\nuse url::lex_url;\n\nuse self::email_address::lex_email_address;\nuse crate::char_ext::CharExt;\nuse crate::punctuation::{Punctuation, Quote};\nuse crate::{Number, Span, Token, TokenKind};\n\n#[derive(Debug, Eq, PartialEq)]\npub struct FoundToken {\n    /// The index of the character __after__ the lexed token\n    pub next_index: usize,\n    /// Token lexed\n    pub token: TokenKind,\n}\n\n/// Lex `source` with the provided `lex_fn`.\n///\n/// `lex_fn` should be a function that takes a subslice of the source, and returns the first found\n/// token.\npub fn lex_with(source: &[char], lex_fn: fn(&[char]) -> FoundToken) -> Vec<Token> {\n    let mut cursor = 0;\n    let mut tokens = Vec::new();\n\n    loop {\n        if cursor >= source.len() {\n            return tokens;\n        }\n\n        let FoundToken { token, next_index } = lex_fn(&source[cursor..]);\n\n        tokens.push(Token {\n            span: Span::new(cursor, cursor + next_index),\n            kind: token,\n        });\n        cursor += next_index;\n    }\n}\n\npub fn lex_weir_token(source: &[char]) -> FoundToken {\n    [\n        lex_punctuation,\n        lex_tabs,\n        lex_spaces,\n        lex_newlines,\n        lex_plural_digit, // Before lex_number, which would match the initial digit\n        lex_hex_number,   // Before lex_number, which would match the initial 0\n        lex_long_decade,  // Before lex_number, which would match the digits up to the -s\n        lex_number,\n        lex_url,\n        lex_email_address,\n        lex_hostname_token,\n        lex_word,\n    ]\n    .into_iter()\n    .find_map(|lexer| lexer(source))\n    .unwrap_or_else(lex_catch)\n}\n\npub fn lex_english_token(source: &[char]) -> FoundToken {\n    [\n        lex_regexish,\n        lex_punctuation,\n        lex_tabs,\n        lex_spaces,\n        lex_newlines,\n        lex_plural_digit, // Before lex_number, which would match the initial digit\n        lex_hex_number,   // Before lex_number, which would match the initial 0\n        lex_long_decade,  // Before lex_number, which would match the digits up to the -s\n        lex_number,\n        lex_url,\n        lex_email_address,\n        lex_hostname_token,\n        lex_word,\n    ]\n    .into_iter()\n    .find_map(|lexer| lexer(source))\n    .unwrap_or_else(lex_catch)\n}\n\nfn lex_word(source: &[char]) -> Option<FoundToken> {\n    let is_tack = |c: char| lex_punctuation(&[c]).is_some_and(|t| t.token.is_apostrophe());\n\n    let mut end = source\n        .iter()\n        .position(|c| !c.is_english_lingual() && !c.is_ascii_digit() && !is_tack(*c))\n        .unwrap_or(source.len());\n\n    while end >= 1 && is_tack(source[end - 1]) {\n        end -= 1;\n    }\n\n    if end == 0 {\n        None\n    } else {\n        Some(FoundToken {\n            next_index: end,\n            token: TokenKind::Word(None),\n        })\n    }\n}\n\nfn lex_number(source: &[char]) -> Option<FoundToken> {\n    if source.is_empty() {\n        return None;\n    }\n\n    if !source[0].is_numeric() {\n        return None;\n    }\n\n    let end = source\n        .iter()\n        .enumerate()\n        .rev()\n        .find_map(|(i, v)| v.is_ascii_digit().then_some(i))?;\n\n    let mut s: String = source[0..end + 1].iter().collect();\n\n    // Find the longest possible valid number\n    while !s.is_empty() {\n        if let Ok(n) = s.parse::<f64>() {\n            let precision = s.chars().rev().position(|c| c == '.').unwrap_or_default();\n\n            if !s.ends_with('.') {\n                return Some(FoundToken {\n                    token: TokenKind::Number(Number {\n                        value: n.into(),\n                        suffix: None,\n                        radix: 10,\n                        precision,\n                    }),\n                    next_index: s.len(),\n                });\n            }\n        }\n\n        s.pop();\n    }\n\n    None\n}\n\n// Often in comments we mention partial- or pseudo- regexes. Here's an example from Ghidra:\n// ([a-z0-9]+ only) - We previously flagged just the z0 in the middle of it.\nfn lex_regexish(src: &[char]) -> Option<FoundToken> {\n    let l = src.len();\n    let mut i = 0;\n\n    if i >= l || src[i] != '[' {\n        return None;\n    }\n    i += 1;\n\n    loop {\n        if i >= l || !src[i].is_alphanumeric() {\n            return None;\n        }\n        i += 1;\n        if i < l && src[i] == '-' {\n            i += 1;\n            if i >= l || !src[i].is_alphanumeric() {\n                return None;\n            }\n            i += 1;\n        }\n\n        if i >= l || src[i] != ']' {\n            continue;\n        }\n        break;\n    }\n\n    Some(FoundToken {\n        token: TokenKind::Regexish,\n        next_index: i + 1,\n    })\n}\n\nfn lex_hex_number(source: &[char]) -> Option<FoundToken> {\n    // < 3 to avoid accepting 0x alone\n    if source.len() < 3 || source[0] != '0' || source[1] != 'x' || !source[2].is_ascii_hexdigit() {\n        return None;\n    }\n\n    let mut i = 2;\n    let len = source.len();\n\n    while i < len {\n        let next = source[i];\n\n        if !next.is_ascii_hexdigit() {\n            if !next.is_alphanumeric() {\n                break;\n            } else {\n                return None;\n            }\n        }\n\n        i += 1;\n    }\n\n    let s: String = source[2..i].iter().collect();\n\n    // Should always succeed unless the logic above is broken\n    if let Ok(n) = u64::from_str_radix(&s, 16) {\n        return Some(FoundToken {\n            token: TokenKind::Number(Number {\n                value: OrderedFloat(n as f64),\n                suffix: None,\n                radix: 16,\n                precision: 0,\n            }),\n            next_index: s.len() + 2,\n        });\n    }\n\n    None\n}\n\nfn lex_long_decade(source: &[char]) -> Option<FoundToken> {\n    // lex 4-digit decades in their plural such as: 1980s 1990s 2000s 2020s\n    if source.len() < 5 {\n        return None;\n    }\n    if source[0] != '1' && source[0] != '2' {\n        return None;\n    }\n    if !source[1].is_ascii_digit() {\n        return None;\n    }\n    if !source[2].is_ascii_digit() {\n        return None;\n    }\n    if source[3] != '0' {\n        return None;\n    }\n    if source[4] != 's' {\n        return None;\n    }\n\n    Some(FoundToken {\n        token: TokenKind::Decade,\n        next_index: 5,\n    })\n}\n\nfn lex_plural_digit(src: &[char]) -> Option<FoundToken> {\n    // Issue #774\n    let l = src.len();\n    let mut i = 0;\n\n    if src.is_empty() || !src[i].is_ascii_alphanumeric() {\n        return None;\n    }\n    i += 1;\n\n    if l > i && src[i] == '\\'' {\n        i += 1;\n    }\n\n    if l > i && src[i] == 's' {\n        i += 1;\n\n        if l == i || !src[i].is_ascii_alphanumeric() {\n            return Some(FoundToken {\n                token: TokenKind::Word(None),\n                next_index: i,\n            });\n        }\n    }\n    None\n}\n\nfn lex_newlines(source: &[char]) -> Option<FoundToken> {\n    let count = source.iter().take_while(|c| **c == '\\n').count();\n\n    if count > 0 {\n        Some(FoundToken {\n            token: TokenKind::Newline(count),\n            next_index: count,\n        })\n    } else {\n        None\n    }\n}\n\nfn lex_tabs(source: &[char]) -> Option<FoundToken> {\n    let count = source.iter().take_while(|c| **c == '\\t').count();\n\n    if count > 0 {\n        Some(FoundToken {\n            token: TokenKind::Space(count * 2),\n            next_index: count,\n        })\n    } else {\n        None\n    }\n}\n\nfn lex_spaces(source: &[char]) -> Option<FoundToken> {\n    let count = source.iter().take_while(|c| **c == ' ').count();\n\n    if count > 0 {\n        Some(FoundToken {\n            token: TokenKind::Space(count),\n            next_index: count,\n        })\n    } else {\n        None\n    }\n}\n\nfn lex_punctuation(source: &[char]) -> Option<FoundToken> {\n    if let Some(found) = lex_quote(source) {\n        return Some(found);\n    }\n\n    let c = source.first()?;\n    let punct = Punctuation::from_char(*c)?;\n\n    Some(FoundToken {\n        next_index: 1,\n        token: TokenKind::Punctuation(punct),\n    })\n}\n\nfn lex_quote(source: &[char]) -> Option<FoundToken> {\n    let c = *source.first()?;\n\n    if c == '\\\"' || c == '“' || c == '”' {\n        Some(FoundToken {\n            next_index: 1,\n            token: TokenKind::Punctuation(Punctuation::Quote(Quote { twin_loc: None })),\n        })\n    } else {\n        None\n    }\n}\n\n/// Covers cases not covered by the other lints.\nfn lex_catch() -> FoundToken {\n    FoundToken {\n        next_index: 1,\n        token: TokenKind::Unlintable,\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::Punctuation;\n    use crate::char_string::char_string;\n    use crate::lexing::lex_plural_digit;\n\n    use super::lex_english_token;\n    use super::lex_hex_number;\n    use super::lex_long_decade;\n    use super::lex_number;\n    use super::lex_word;\n    use super::{FoundToken, TokenKind};\n\n    // test various kinds of number\n    #[test]\n    fn lexes_0() {\n        let source: Vec<_> = \"0\".chars().collect();\n        assert!(matches!(\n            lex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_0_point_0() {\n        let source: Vec<_> = \"0.0\".chars().collect();\n        assert!(matches!(\n            lex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_00() {\n        let source: Vec<_> = \"00\".chars().collect();\n        assert!(matches!(\n            lex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[ignore = \"Negative numbers are not yet supported\"]\n    fn lexes_negative_1() {\n        let source: Vec<_> = \"-1\".chars().collect();\n        assert!(matches!(\n            lex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[ignore = \"Positive numbers with a leading + are not supported\"]\n    fn lexes_positive_1() {\n        let source: Vec<_> = \"+1\".chars().collect();\n        assert!(matches!(\n            lex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_pi() {\n        let source: Vec<_> = \"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\".chars().collect();\n        assert!(matches!(\n            lex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_speed_of_light() {\n        let source: Vec<_> = \"3.00e8\".chars().collect();\n        assert!(matches!(\n            lex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn doesnt_lex_cjk_numeral() {\n        let source: Vec<_> = \"二\".chars().collect();\n        assert!(lex_number(&source).is_none());\n    }\n\n    #[test]\n    fn doesnt_lex_thai_digit() {\n        let source: Vec<_> = \"๑\".chars().collect();\n        assert!(lex_number(&source).is_none());\n    }\n\n    #[test]\n    fn lexes_cjk_as_unlintable() {\n        let source: Vec<_> = \"世\".chars().collect();\n        assert!(lex_word(&source).is_none());\n    }\n\n    #[test]\n    fn lexes_youtube_as_hostname() {\n        let source: Vec<_> = \"youtube.com\".chars().collect();\n        assert_eq!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Hostname,\n                next_index: source.len()\n            }\n        );\n    }\n\n    #[test]\n    fn doesnt_lex_regex_mini_range() {\n        let source: Vec<_> = \"[]\".chars().collect();\n        assert!(!matches!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                next_index: 2\n            }\n        ))\n    }\n\n    #[test]\n    fn lexes_regex_one_letter() {\n        let source: Vec<_> = \"[a]\".chars().collect();\n        assert_eq!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                next_index: 3\n            }\n        );\n    }\n\n    #[test]\n    fn lexes_regex_two_letters() {\n        let source: Vec<_> = \"[az]\".chars().collect();\n        assert_eq!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                next_index: 4\n            }\n        );\n    }\n\n    #[test]\n    fn lexes_regex_digits() {\n        let source: Vec<_> = \"[123]\".chars().collect();\n        assert_eq!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                next_index: 5\n            }\n        );\n    }\n\n    #[test]\n    fn lexes_regex_two_alphanumeric() {\n        let source: Vec<_> = \"[a0b1c2]\".chars().collect();\n        assert_eq!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                next_index: 8\n            }\n        );\n    }\n\n    #[test]\n    fn lexes_regex_one_range() {\n        let source: Vec<_> = \"[a-z]\".chars().collect();\n        assert_eq!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                next_index: 5\n            }\n        );\n    }\n\n    #[test]\n    fn lexes_regex_letter_plus_range() {\n        let source: Vec<_> = \"[ax-z]\".chars().collect();\n        assert_eq!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                next_index: 6\n            }\n        );\n    }\n\n    #[test]\n    fn lexes_regex_range_plus_letter() {\n        let source: Vec<_> = \"[a-cz]\".chars().collect();\n        assert_eq!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                next_index: 6\n            }\n        );\n    }\n\n    #[test]\n    fn lexes_regex_two_ranges() {\n        let source: Vec<_> = \"[a-cx-z]\".chars().collect();\n        assert_eq!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                next_index: 8\n            }\n        );\n    }\n\n    #[test]\n    fn doesnt_lex_regex_broken_two_ranges() {\n        // You can't end a range and start a range with a single letter\n        let source: Vec<_> = \"[a-x-z]\".chars().collect();\n        assert_eq!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Punctuation(Punctuation::OpenSquare),\n                next_index: 1\n            }\n        );\n    }\n\n    #[test]\n    fn doesnt_lex_regex_hyphen_at_start() {\n        let source: Vec<_> = \"[a-]\".chars().collect();\n        assert!(!matches!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                ..\n            }\n        ));\n    }\n\n    #[test]\n    fn doesnt_lex_regex_hyphen_at_end() {\n        let source: Vec<_> = \"[-z]\".chars().collect();\n        assert!(!matches!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Regexish,\n                ..\n            }\n        ));\n    }\n\n    #[test]\n    fn lexes_good_hex_numeric() {\n        let source: Vec<_> = \"0x0\".chars().collect();\n        assert!(matches!(\n            lex_hex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_good_hex_lowercase() {\n        let source: Vec<_> = \"0xa\".chars().collect();\n        assert!(matches!(\n            lex_hex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_good_hex_uppercase() {\n        let source: Vec<_> = \"0xF\".chars().collect();\n        assert!(matches!(\n            lex_hex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_good_hex_mixed_case() {\n        let source: Vec<_> = \"0xaF\".chars().collect();\n        assert!(matches!(\n            lex_hex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_good_hex_lowercase_long() {\n        let source: Vec<_> = \"0x0123456789abcdef\".chars().collect();\n        assert!(matches!(\n            lex_hex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_good_hex_uppercase_long() {\n        let source: Vec<_> = \"0x0123456789ABCDEF\".chars().collect();\n        assert!(matches!(\n            lex_hex_number(&source),\n            Some(FoundToken {\n                token: TokenKind::Number(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn does_not_lex_prefix_only() {\n        let source: Vec<_> = \"0x\".chars().collect();\n        assert!(lex_hex_number(&source).is_none());\n    }\n\n    #[test]\n    fn does_not_lex_bad_alphabetic() {\n        let source: Vec<_> = \"0xg\".chars().collect();\n        assert!(lex_hex_number(&source).is_none());\n    }\n\n    #[test]\n    fn does_not_lex_bad_after_good() {\n        let source: Vec<_> = \"0x123g\".chars().collect();\n        assert!(lex_hex_number(&source).is_none());\n    }\n\n    #[test]\n    fn does_not_lex_uppercase_prefix() {\n        let source: Vec<_> = \"0Xf00d\".chars().collect();\n        assert!(lex_hex_number(&source).is_none());\n    }\n\n    #[test]\n    fn lexes_0s() {\n        let source: Vec<_> = \"0s\".chars().collect();\n        assert!(matches!(\n            // lex_token(&source),\n            lex_plural_digit(&source),\n            Some(FoundToken {\n                token: TokenKind::Word(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_1_apostrophe_s() {\n        let source: Vec<_> = \"1's\".chars().collect();\n        assert!(matches!(\n            // lex_token(&source),\n            lex_plural_digit(&source),\n            Some(FoundToken {\n                token: TokenKind::Word(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_0s_and_1s() {\n        let source: Vec<_> = \"0s and 1s\".chars().collect();\n        assert!(matches!(\n            // lex_token(&source),\n            lex_plural_digit(&source),\n            Some(FoundToken {\n                token: TokenKind::Word(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_1s_and_0s_apostrophes() {\n        let source: Vec<_> = \"1's and 0's\".chars().collect();\n        assert!(matches!(\n            // lex_token(&source),\n            lex_plural_digit(&source),\n            Some(FoundToken {\n                token: TokenKind::Word(_),\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn doesnt_lex_0s_joined_letter() {\n        let source: Vec<_> = \"0ss\".chars().collect();\n        assert!(lex_plural_digit(&source).is_none());\n    }\n\n    #[test]\n    fn doesnt_lex_1s_apostrophe_joined_number() {\n        let source: Vec<_> = \"1's1\".chars().collect();\n        assert!(lex_plural_digit(&source).is_none());\n    }\n\n    #[test]\n    fn lexes_20c_decade() {\n        let source: Vec<_> = \"1980s\".chars().collect();\n        assert!(matches!(\n            lex_long_decade(&source),\n            Some(FoundToken {\n                token: TokenKind::Decade,\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_21c_decade() {\n        let source: Vec<_> = \"2020s\".chars().collect();\n        assert!(matches!(\n            lex_long_decade(&source),\n            Some(FoundToken {\n                token: TokenKind::Decade,\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_ancient_decade() {\n        let source: Vec<_> = \"1010s\".chars().collect();\n        assert!(matches!(\n            lex_long_decade(&source),\n            Some(FoundToken {\n                token: TokenKind::Decade,\n                ..\n            })\n        ));\n    }\n\n    #[test]\n    fn lexes_word_before_decade() {\n        let source: Vec<_> = \"late 1980s\".chars().collect();\n        assert!(matches!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Word(_),\n                ..\n            }\n        ));\n    }\n\n    #[test]\n    fn lexes_word_after_decade() {\n        let source: Vec<_> = \"1980s and\".chars().collect();\n        assert!(matches!(\n            lex_english_token(&source),\n            FoundToken {\n                token: TokenKind::Decade,\n                ..\n            }\n        ));\n    }\n\n    #[test]\n    fn doesnt_lex_far_future_decade() {\n        let source: Vec<_> = \"3190s\".chars().collect();\n        assert!(lex_long_decade(&source).is_none());\n    }\n\n    #[test]\n    fn doesnt_lex_too_ancient_decade() {\n        let source: Vec<_> = \"100s\".chars().collect();\n        assert!(lex_long_decade(&source).is_none());\n    }\n\n    #[test]\n    fn doesnt_lex_0_prefixed_decade() {\n        let source: Vec<_> = \"0100s\".chars().collect();\n        assert!(lex_long_decade(&source).is_none());\n    }\n\n    #[test]\n    fn doesnt_lex_uppercase_decade() {\n        let source: Vec<_> = \"2000S\".chars().collect();\n        assert!(lex_long_decade(&source).is_none());\n    }\n\n    #[test]\n    fn doesnt_lex_overlong_decade() {\n        let source: Vec<_> = \"20000s\".chars().collect();\n        assert!(lex_long_decade(&source).is_none());\n    }\n\n    #[test]\n    fn doesnt_lex_apostrophe_long_decade() {\n        let source: Vec<_> = \"2020's\".chars().collect();\n        assert!(lex_long_decade(&source).is_none());\n    }\n\n    #[test]\n    fn doesnt_lex_bad_apostrophe_short_decade() {\n        let source: Vec<_> = \"80's\".chars().collect();\n        assert!(lex_long_decade(&source).is_none());\n    }\n\n    #[test]\n    fn doesnt_lex_good_apostrophe_short_decade() {\n        let source: Vec<_> = \"'90s\".chars().collect();\n        assert!(lex_long_decade(&source).is_none());\n    }\n\n    #[test]\n    fn accepts_sentence_with_decade() {\n        let sentence: Vec<_> = \"To the early 1990s there were a lot of Movies where the bad guys were former Russian intelligence agents.\".chars().collect();\n        let expected_tokens = [\n            TokenKind::Word(None),\n            TokenKind::Space(1),\n            TokenKind::Word(None),\n            TokenKind::Space(1),\n            TokenKind::Word(None),\n            TokenKind::Space(1),\n            TokenKind::Decade,\n        ];\n\n        let mut next_index = 0;\n\n        for expected_token in expected_tokens.iter() {\n            if next_index >= sentence.len() {\n                break; // Exit if we've processed the entire source\n            }\n\n            let token = lex_english_token(&sentence[next_index..]);\n            assert_eq!(token.token, *expected_token);\n            next_index += token.next_index;\n        }\n    }\n\n    #[test]\n    fn rejects_sentence_with_number() {\n        let sentence: Vec<_> = \"To the early 1990s there were a lot of Movies where the bad guys were former Russian intelligence agents.\".chars().collect();\n        let expected_tokens = [\n            TokenKind::Word(None),\n            TokenKind::Space(1),\n            TokenKind::Word(None),\n            TokenKind::Space(1),\n            TokenKind::Word(None),\n            TokenKind::Space(1),\n            TokenKind::Number(Default::default()),\n        ];\n\n        let mut next_index = 0;\n\n        for (i, expected_token) in expected_tokens.iter().enumerate() {\n            if next_index >= sentence.len() {\n                break; // Exit if we've processed the entire source\n            }\n\n            let token = lex_english_token(&sentence[next_index..]);\n\n            if i < 6 {\n                assert_eq!(token.token, *expected_token);\n            } else {\n                assert_ne!(token.token, *expected_token);\n            }\n\n            next_index += token.next_index;\n        }\n    }\n\n    #[test]\n    fn issue_1010() {\n        let source = char_string!(\"3.\");\n\n        let tok = lex_number(&source).unwrap();\n        assert_eq!(tok.next_index, 1);\n    }\n\n    #[test]\n    fn lexes_full_number() {\n        let source = char_string!(\"3.0\");\n\n        let tok = lex_number(&source).unwrap();\n        assert_eq!(tok.next_index, 3);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/lexing/url.rs",
    "content": "/// This module implements parsing of URIs.\n/// See RFC 1738 for more information.\nuse super::{FoundToken, hostname::lex_hostname};\nuse crate::TokenKind;\n\npub fn lex_url(source: &[char]) -> Option<FoundToken> {\n    let sep = {\n        let mut iter = source.iter().enumerate();\n        loop {\n            match iter.next()? {\n                // Must begin with an alphabetic character.\n                (0, c) if !c.is_ascii_alphabetic() => return None,\n                // This check must happen before the `valid_scheme_char` check.\n                (i, ':') => break i,\n                (_, c) if !valid_scheme_char(*c) => return None,\n                _ => {}\n            }\n        }\n    };\n\n    let url_end = lex_ip_schemepart(&source[sep + 1..])?;\n\n    Some(FoundToken {\n        next_index: url_end + sep + 1,\n        token: TokenKind::Url,\n    })\n}\n\nfn lex_ip_schemepart(source: &[char]) -> Option<usize> {\n    if !matches!(source, ['/', '/', ..]) {\n        return None;\n    }\n\n    let rest = &source[2..];\n\n    let login_end = lex_login(rest).unwrap_or(0);\n\n    let mut cursor = login_end;\n\n    // Parse endpoint path\n    while cursor != rest.len() {\n        if rest[cursor] != '/' {\n            break;\n        }\n\n        cursor += 1;\n\n        let next_idx = lex_xchar_string(&rest[cursor..]);\n\n        if next_idx == 0 {\n            break;\n        }\n\n        cursor += next_idx;\n    }\n\n    Some(cursor + 2)\n}\n\nfn lex_login(source: &[char]) -> Option<usize> {\n    let hostport_start = if let Some(cred_end) = source.iter().position(|c| *c == '@') {\n        if let Some(pass_beg) = source[0..cred_end].iter().position(|c| *c == ':')\n            && !is_uchar_plus_string(&source[pass_beg + 1..cred_end])\n        {\n            return None;\n        }\n\n        // Check username\n        if !is_uchar_plus_string(&source[0..cred_end]) {\n            return None;\n        }\n\n        cred_end + 1\n    } else {\n        0\n    };\n\n    let hostport_source = &source[hostport_start..];\n\n    let hostport_end = lex_hostport(hostport_source)?;\n\n    Some(hostport_start + hostport_end)\n}\n\nfn lex_hostport(source: &[char]) -> Option<usize> {\n    let hostname_end = lex_hostname(source)?;\n\n    if source.get(hostname_end) == Some(&':') {\n        Some(\n            source\n                .iter()\n                .enumerate()\n                .find(|(_, c)| !{\n                    let c = **c;\n                    c.is_ascii_digit()\n                })\n                .map(|(i, _)| i)\n                .unwrap_or(source.len()),\n        )\n    } else {\n        Some(hostname_end)\n    }\n}\n\nfn valid_scheme_char(c: char) -> bool {\n    c.is_ascii_alphabetic() || c.is_ascii_digit() || matches!(c, '.' | '-' | '+')\n}\n\nfn is_reserved(c: char) -> bool {\n    matches!(c, ';' | '/' | '?' | ':' | '@' | '&' | '=' | '#')\n}\n\nfn is_safe(c: char) -> bool {\n    matches!(c, '$' | '-' | '_' | '.' | '+')\n}\n\nfn is_extra(c: char) -> bool {\n    matches!(c, '!' | '*' | '\\'' | '(' | ')' | ',')\n}\n\nfn is_unreserved(c: char) -> bool {\n    c.is_ascii_alphabetic() || c.is_ascii_digit() || is_safe(c) || is_extra(c)\n}\n\nfn is_hex(c: char) -> bool {\n    c.is_ascii_hexdigit()\n}\n\n/// Lex an escaped hex code, returning the subsequent index\nfn lex_escaped(source: &[char]) -> Option<usize> {\n    if source.len() < 3 {\n        return None;\n    }\n\n    if source[0] == '%' && is_hex(source[1]) && is_hex(source[2]) {\n        Some(3)\n    } else {\n        None\n    }\n}\n\nfn lex_xchar_string(source: &[char]) -> usize {\n    let mut cursor = 0;\n\n    while cursor != source.len() {\n        let Some(next) = lex_xchar(&source[cursor..]) else {\n            break;\n        };\n\n        cursor += next;\n    }\n\n    cursor\n}\n\nfn is_xchar_string(source: &[char]) -> bool {\n    lex_xchar_string(source) == source.len()\n}\n\n/// Used for passwords and usernames\nfn is_uchar_plus_string(source: &[char]) -> bool {\n    let mut cursor = 0;\n\n    while cursor != source.len() {\n        if matches!(source[cursor], ';' | '?' | '&' | '=') {\n            cursor += 1;\n            continue;\n        }\n\n        let Some(next) = lex_uchar(&source[cursor..]) else {\n            return false;\n        };\n\n        cursor += next;\n    }\n\n    true\n}\n\nfn lex_xchar(source: &[char]) -> Option<usize> {\n    if is_reserved(source[0]) {\n        return Some(1);\n    }\n\n    lex_uchar(source)\n}\n\nfn lex_uchar(source: &[char]) -> Option<usize> {\n    if is_unreserved(source[0]) {\n        return Some(1);\n    }\n\n    lex_escaped(source)\n}\n\n#[cfg(test)]\nmod tests {\n    use rand::RngExt;\n\n    use super::lex_url;\n\n    fn assert_consumes_full(url: &str) {\n        assert_consumes_part(url, url.len());\n    }\n\n    fn assert_consumes_part(url: &str, len: usize) {\n        let url = url.chars().collect::<Vec<_>>();\n\n        assert_eq!(lex_url(&url).unwrap().next_index, len);\n    }\n\n    #[test]\n    fn consumes_google() {\n        assert_consumes_full(\"https://google.com\")\n    }\n\n    #[test]\n    fn consumes_wikipedia() {\n        assert_consumes_full(\"https://wikipedia.com\")\n    }\n\n    #[test]\n    fn consumes_youtube() {\n        assert_consumes_full(\"https://youtube.com\")\n    }\n\n    #[test]\n    fn consumes_youtube_not_garbage() {\n        assert_consumes_part(\"https://youtube.com aklsjdha\", 19);\n    }\n\n    #[test]\n    fn consumes_with_path() {\n        assert_consumes_full(\"https://elijahpotter.dev/articles/quantifying_hope_on_a_global_scale\")\n    }\n\n    #[test]\n    fn consumes_issue_142() {\n        assert_consumes_full(\"https://github.com/nodesource/distributions#debinstall\")\n    }\n\n    /// Tests that the URL parser will not throw a panic under some random\n    /// situations.\n    #[test]\n    fn survives_random_chars() {\n        let mut rng = rand::rng();\n\n        let mut buf = [' '; 128];\n\n        for _ in 0..1 << 16 {\n            buf.fill_with(|| rng.random());\n\n            lex_url(&buf);\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/lib.rs",
    "content": "#![doc = include_str!(\"../README.md\")]\n#![allow(dead_code)]\n\nmod case;\nmod char_ext;\nmod char_string;\nmod currency;\nmod dict_word_metadata;\nmod dict_word_metadata_orthography;\nmod document;\nmod edit_distance;\npub mod expr;\nmod fat_token;\nmod ignored_lints;\nmod indefinite_article;\nmod irregular_nouns;\nmod irregular_verbs;\npub mod language_detection;\nmod lexing;\npub mod linting;\nmod mask;\nmod number;\nmod offsets;\npub mod parsers;\npub mod patterns;\nmod punctuation;\nmod render_markdown;\nmod span;\npub mod spell;\nmod sync;\nmod thesaurus_helper;\nmod title_case;\nmod token;\nmod token_kind;\nmod token_string_ext;\nmod vec_ext;\npub mod weir;\npub mod weirpack;\n\nuse render_markdown::render_markdown;\nuse std::collections::{BTreeMap, VecDeque};\n\npub use case::{Case, CaseIterExt};\npub use char_string::{CharString, CharStringExt};\npub use currency::Currency;\npub use dict_word_metadata::{\n    AdverbData, ConjunctionData, Degree, DeterminerData, Dialect, DialectFlags, DictWordMetadata,\n    NounData, PronounData, VerbData, VerbForm, VerbFormFlags,\n};\npub use dict_word_metadata_orthography::{OrthFlags, Orthography};\npub use document::Document;\npub use fat_token::{FatStringToken, FatToken};\npub use ignored_lints::{IgnoredLints, LintContext};\npub use indefinite_article::{InitialSound, starts_with_vowel};\npub use irregular_nouns::IrregularNouns;\npub use irregular_verbs::IrregularVerbs;\nuse linting::Lint;\npub use mask::{Mask, Masker, RegexMasker};\npub use number::{Number, OrdinalSuffix};\npub use punctuation::{Punctuation, Quote};\npub use span::Span;\npub use sync::{LSend, Lrc};\npub use title_case::{make_title_case, make_title_case_str};\npub use token::Token;\npub use token_kind::TokenKind;\npub use token_string_ext::TokenStringExt;\npub use vec_ext::VecExt;\n\n/// Return `harper-core` version\npub fn core_version() -> &'static str {\n    env!(\"CARGO_PKG_VERSION\")\n}\n\n/// A utility function that removes overlapping lints in a vector,\n/// keeping the more important ones.\n///\n/// Note: this function will change the ordering of the lints.\npub fn remove_overlaps(lints: &mut Vec<Lint>) {\n    if lints.len() < 2 {\n        return;\n    }\n\n    let mut remove_indices = VecDeque::new();\n    lints.sort_by_key(|l| l.priority);\n    lints.sort_by_key(|l| (l.span.start, !0 - l.span.end));\n\n    let mut cur = 0;\n\n    for (i, lint) in lints.iter().enumerate() {\n        if lint.span.start < cur {\n            remove_indices.push_back(i);\n            continue;\n        }\n        cur = lint.span.end;\n    }\n\n    lints.remove_indices(remove_indices);\n}\n\n/// Remove overlapping lints from a map keyed by rule name, similar to [`remove_overlaps`].\n///\n/// The map is treated as if all contained lints were in a single flat collection, ensuring the\n/// same lint would be kept regardless of whether it originated from `lint` or `organized_lints`.\npub fn remove_overlaps_map<K: Ord>(lint_map: &mut BTreeMap<K, Vec<Lint>>) {\n    let total: usize = lint_map.values().map(Vec::len).sum();\n    if total < 2 {\n        return;\n    }\n\n    struct IndexedSpan {\n        rule_idx: usize,\n        lint_idx: usize,\n        priority: u8,\n        start: usize,\n        end: usize,\n    }\n\n    let mut removal_flags: Vec<Vec<bool>> = lint_map\n        .values()\n        .map(|lints| vec![false; lints.len()])\n        .collect();\n\n    let mut spans = Vec::with_capacity(total);\n    for (rule_idx, (_, lints)) in lint_map.iter().enumerate() {\n        for (lint_idx, lint) in lints.iter().enumerate() {\n            spans.push(IndexedSpan {\n                priority: lint.priority,\n                rule_idx,\n                lint_idx,\n                start: lint.span.start,\n                end: lint.span.end,\n            });\n        }\n    }\n\n    spans.sort_by_key(|span| span.priority);\n    spans.sort_by_key(|span| (span.start, usize::MAX - span.end));\n\n    let mut cur = 0;\n    for span in spans {\n        if span.start < cur {\n            removal_flags[span.rule_idx][span.lint_idx] = true;\n        } else {\n            cur = span.end;\n        }\n    }\n\n    for (rule_idx, (_, lints)) in lint_map.iter_mut().enumerate() {\n        if removal_flags[rule_idx].iter().all(|flag| !*flag) {\n            continue;\n        }\n\n        let mut idx = 0;\n        lints.retain(|_| {\n            let remove = removal_flags[rule_idx][idx];\n            idx += 1;\n            !remove\n        });\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use std::hash::DefaultHasher;\n    use std::hash::{Hash, Hasher};\n\n    use itertools::Itertools;\n    use quickcheck_macros::quickcheck;\n\n    use crate::linting::Lint;\n    use crate::remove_overlaps_map;\n    use crate::spell::FstDictionary;\n    use crate::{\n        Dialect, Document,\n        linting::{LintGroup, Linter},\n        remove_overlaps,\n    };\n\n    #[test]\n    fn keeps_space_lint() {\n        let doc = Document::new_plain_english_curated(\"Ths  tet\");\n\n        let mut linter = LintGroup::new_curated(FstDictionary::curated(), Dialect::American);\n\n        let mut lints = linter.lint(&doc);\n\n        dbg!(&lints);\n        remove_overlaps(&mut lints);\n        dbg!(&lints);\n\n        assert_eq!(lints.len(), 3);\n    }\n\n    #[quickcheck]\n    fn overlap_removals_have_equivalent_behavior(s: String) {\n        let doc = Document::new_plain_english_curated(&s);\n        let mut linter = LintGroup::new_curated(FstDictionary::curated(), Dialect::American);\n\n        let mut lint_map = linter.organized_lints(&doc);\n        let mut lint_flat: Vec<_> = lint_map.values().flatten().cloned().collect();\n\n        remove_overlaps_map(&mut lint_map);\n        remove_overlaps(&mut lint_flat);\n\n        let post_removal_flat: Vec<_> = lint_map.values().flatten().cloned().collect();\n\n        fn hash_lint(lint: &Lint) -> u64 {\n            let mut hasher = DefaultHasher::new();\n            lint.hash(&mut hasher);\n            hasher.finish()\n        }\n\n        // We want to ignore ordering, so let us hash these first and sort them.\n        let lint_flat_hashes: Vec<_> = lint_flat.iter().map(hash_lint).sorted().collect();\n        let post_removal_flat_hashes: Vec<_> =\n            post_removal_flat.iter().map(hash_lint).sorted().collect();\n\n        assert_eq!(post_removal_flat_hashes, lint_flat_hashes);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/a_part.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::FixedPhrase;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct APart {\n    expr: FirstMatchOf,\n}\n\nimpl Default for APart {\n    fn default() -> Self {\n        let pattern = FirstMatchOf::new(vec![\n            Box::new(FixedPhrase::from_phrase(\"a part from\")),\n            Box::new(FixedPhrase::from_phrase(\"apart of\")),\n            Box::new(FixedPhrase::from_phrase(\"fall a part\")),\n            Box::new(FixedPhrase::from_phrase(\"far a part\")),\n        ]);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for APart {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let text: String = span.get_content(source).iter().collect();\n        let text_lower = text.to_lowercase();\n\n        let (suggestions, message) = match text_lower.as_str() {\n            // Not always a mistake:\n            // I ordered a part from an online store\n            \"a part from\" => (\n                vec![\n                    Suggestion::ReplaceWith(\"apart from\".chars().collect()),\n                    Suggestion::ReplaceWith(\"a part of\".chars().collect()),\n                ],\n                \"If you mean 'except for', use 'apart from'. If you mean 'a piece belonging to', use 'a part of'. Keep it this way if referring to the origin of a piece.\",\n            ),\n            \"apart of\" => (\n                vec![\n                    Suggestion::ReplaceWith(\"a part of\".chars().collect()),\n                    Suggestion::ReplaceWith(\"apart from\".chars().collect()),\n                ],\n                \"Did you mean 'a part of' (a piece belonging to) or 'apart from' (except for)?\",\n            ),\n            // Not necessarily always a mistake:\n            // How would you detect how far a part is from another part?\n            // Any one else amazed with how far a part will travel if you accidentally drop a little model piece?\n            // ... how far a part of the value of the relevant step is attributable to the overseas part of the tax ...\n            //\n            // If the previous word before \"far\" is \"how\" or \"so\", it's still ambiguous\n            // But could the next word after \"part\" help us understand if it's a mistake?\n            \"far a part\" => (\n                vec![Suggestion::ReplaceWith(\"far apart\".chars().collect())],\n                \"If you mean 'separated by a distance', use 'far apart'. If referring to the distance of a piece, keep it this way.\",\n            ),\n            \"fall a part\" => (\n                vec![Suggestion::ReplaceWith(\"fall apart\".chars().collect())],\n                \"'Fall apart' meaning 'collapse into pieces' or 'stop functioning' is written as two words.\",\n            ),\n            _ => return None,\n        };\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions,\n            message: message.to_owned(),\n            priority: 50,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Finds and corrects common mistakes between 'a part' and 'apart'\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::APart;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn allow_normal_use_of_a_part() {\n        assert_lint_count(\n            \"That's not the whole truth, it's just a part.\",\n            APart::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_normal_use_of_apart() {\n        assert_lint_count(\"You shouldn't have taken it apart.\", APart::default(), 0);\n    }\n\n    #[test]\n    fn allow_normal_use_of_a_part_of() {\n        assert_lint_count(\"The elbow is a part of the arm.\", APart::default(), 0);\n    }\n\n    #[test]\n    fn allow_normal_use_of_apart_from() {\n        assert_lint_count(\"Apart from one error, the code works.\", APart::default(), 0);\n    }\n\n    #[test]\n    fn allow_normal_us_of_fall_apart() {\n        assert_lint_count(\"The roof fell apart.\", APart::default(), 0);\n    }\n\n    #[test]\n    fn allow_normal_use_of_far_apart() {\n        assert_lint_count(\"Okinawa and Hokkaido are far apart.\", APart::default(), 0);\n    }\n\n    #[test]\n    fn corrects_a_part_from_to_apart_from_format() {\n        assert_suggestion_result(\n            \"Is it correct that the output file seems to be the same of the input file a part from the format (input: jpg, output: png)?\",\n            APart::default(),\n            \"Is it correct that the output file seems to be the same of the input file apart from the format (input: jpg, output: png)?\",\n        );\n    }\n\n    #[test]\n    fn corrects_a_part_from_to_apart_from_english() {\n        assert_suggestion_result(\n            \"Do you know there are more languages out there a part from English right?\",\n            APart::default(),\n            \"Do you know there are more languages out there apart from English right?\",\n        )\n    }\n\n    #[test]\n    fn corrects_a_part_from_to_a_part_of() {\n        assert_suggestion_result(\n            \"An easy tool to generate backdoor with msfvenom (a part from metasploit framework).\",\n            APart::default(),\n            \"An easy tool to generate backdoor with msfvenom (a part of metasploit framework).\",\n        )\n    }\n\n    #[test]\n    fn corrects_apart_of_to_apart_from_cflinuxfs() {\n        assert_suggestion_result(\n            \"Doesn't work with any stacks apart of cflinuxfs2 and cflinuxfs3\",\n            APart::default(),\n            \"Doesn't work with any stacks apart from cflinuxfs2 and cflinuxfs3\",\n        )\n    }\n\n    #[test]\n    fn corrects_apart_of_to_apart_from_using() {\n        assert_suggestion_result(\n            \"apart of using filter, i can't find it in the documentation\",\n            APart::default(),\n            \"apart from using filter, i can't find it in the documentation\",\n        )\n    }\n\n    #[test]\n    fn corrects_apart_of_to_a_part_of_openai() {\n        assert_suggestion_result(\n            \"export 'Usage' class as apart of openai.types\",\n            APart::default(),\n            \"export 'Usage' class as a part of openai.types\",\n        )\n    }\n\n    #[test]\n    fn corrects_apart_of_to_a_part_of_formly() {\n        assert_suggestion_result(\n            \"FormlyDatepickerTypeComponent is not listed as apart of the Formly Public API\",\n            APart::default(),\n            \"FormlyDatepickerTypeComponent is not listed as a part of the Formly Public API\",\n        )\n    }\n\n    #[test]\n    fn corrects_far_a_part() {\n        assert_suggestion_result(\n            \"That leaves you only the other hand on the keyboard and you don't want the keys to be that far a part.\",\n            APart::default(),\n            \"That leaves you only the other hand on the keyboard and you don't want the keys to be that far apart.\",\n        )\n    }\n\n    #[test]\n    fn corrects_so_far_a_part_from_being_taken() {\n        assert_suggestion_result(\n            \"I can't see in the code what is done really with this session_timeout so far a part from being taken from the conf if defined there or setup ...\",\n            APart::default(),\n            \"I can't see in the code what is done really with this session_timeout so far apart from being taken from the conf if defined there or setup ...\",\n        )\n    }\n\n    #[test]\n    fn corrects_so_far_a_part_from_version_upgrade() {\n        assert_suggestion_result(\n            \"Any workaround so far a part from the version upgrade?\",\n            APart::default(),\n            \"Any workaround so far apart from the version upgrade?\",\n        )\n    }\n\n    #[test]\n    fn corrects_fall_a_part() {\n        assert_suggestion_result(\n            \"When I set up a script I set up card priority based on my frontline but sometimes a servant dies which sometimes causes things to fall a part.\",\n            APart::default(),\n            \"When I set up a script I set up card priority based on my frontline but sometimes a servant dies which sometimes causes things to fall apart.\",\n        )\n    }\n\n    // Sentences from GitHub I can't understand so can't suggest a fix\n\n    // Use Reanimated to create Animated Map Components and provide as **a part from** library.\n    // I'm trying to add tokens to the bucket **apart of** the time so this can help to have distributed rate-limiting so that\n    // Slice **apart of** slice apart breaks after slightest change to sliced model\n    // Docker image running as different user **apart of** multiple groups\n    // Diamond Checker is a cookie checker **apart of** the DIamond Software\n    // fetchParent() doesn't work properly with foreign key referencing just a part from a composed primary key\n}\n"
  },
  {
    "path": "harper-core/src/linting/a_while.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::char_string::char_string;\nuse crate::expr::{Expr, ExprMap, SequenceExpr};\nuse crate::patterns::UPOSSet;\nuse crate::{CharString, Token, TokenStringExt};\n\nuse super::expr_linter::Chunk;\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\n\npub struct AWhile {\n    expr: ExprMap<(CharString, &'static str)>,\n}\n\nimpl Default for AWhile {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        let a = SequenceExpr::with(UPOSSet::new(&[UPOS::VERB]))\n            .t_ws()\n            .t_aco(\"a\")\n            .t_ws()\n            .t_aco(\"while\");\n\n        map.insert(\n            a,\n            (\n                char_string!(\"awhile\"),\n                \"Use the single word `awhile` when it follows a verb.\",\n            ),\n        );\n\n        let b = SequenceExpr::unless(UPOSSet::new(&[UPOS::VERB]))\n            .t_ws()\n            .t_aco(\"awhile\");\n\n        map.insert(\n            b,\n            (\n                char_string!(\"a while\"),\n                \"When not used after a verb, spell this duration as `a while`.\",\n            ),\n        );\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for AWhile {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let &(ref suggestion, message) = self.expr.lookup(0, matched_tokens, source)?;\n        let span = matched_tokens[2..].span()?;\n        let suggestion =\n            Suggestion::replace_with_match_case(suggestion.to_vec(), span.get_content(source));\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![suggestion],\n            message: message.to_owned(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Enforces `awhile` after verbs and `a while` everywhere else.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::AWhile;\n\n    #[test]\n    fn allow_issue_2144() {\n        assert_no_lints(\n            \"After thinking awhile, I decided to foo a bar.\",\n            AWhile::default(),\n        );\n        assert_no_lints(\n            \"After thinking for a while, I decided to foo a bar.\",\n            AWhile::default(),\n        );\n    }\n\n    #[test]\n    fn fix_issue_2144() {\n        assert_suggestion_result(\n            \"After thinking a while, I decided to foo a bar.\",\n            AWhile::default(),\n            \"After thinking awhile, I decided to foo a bar.\",\n        );\n    }\n\n    #[test]\n    fn correct_in_quite_a_while() {\n        assert_suggestion_result(\n            \"I haven't seen him in quite awhile.\",\n            AWhile::default(),\n            \"I haven't seen him in quite a while.\",\n        );\n    }\n\n    #[test]\n    fn correct_in_a_while() {\n        assert_suggestion_result(\n            \"I haven't checked in awhile.\",\n            AWhile::default(),\n            \"I haven't checked in a while.\",\n        );\n    }\n\n    #[test]\n    fn correct_for_awhile() {\n        assert_suggestion_result(\n            \"Video Element Error: MEDA_ERR_DECODE when chrome is left open for awhile\",\n            AWhile::default(),\n            \"Video Element Error: MEDA_ERR_DECODE when chrome is left open for a while\",\n        );\n    }\n\n    #[test]\n    fn correct_after_awhile() {\n        assert_suggestion_result(\n            \"Links on portal stop working after awhile, requiring page refresh.\",\n            AWhile::default(),\n            \"Links on portal stop working after a while, requiring page refresh.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/addicting.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{All, AnchorEnd, Expr, FirstMatchOf, LongestMatchOf, ReflexivePronoun, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct Addicting {\n    expr: LongestMatchOf,\n}\n\nimpl Default for Addicting {\n    fn default() -> Self {\n        Self {\n            expr: LongestMatchOf::new(vec![\n                // matches `addicting` without anything after\n                Box::new(SequenceExpr::aco(\"addicting\").then(AnchorEnd)),\n                // matches `addicting` <ws> [ any word but not a reflexive pronoun or object pronoun ]\n                Box::new(\n                    SequenceExpr::aco(\"addicting\")\n                        .then_whitespace()\n                        .then(All::new(vec![\n                            // positive - any word\n                            Box::new(SequenceExpr::any_word()),\n                            // negative - reflexive pronoun or object pronoun\n                            Box::new(SequenceExpr::unless(FirstMatchOf::new(vec![\n                                Box::new(ReflexivePronoun::with_common_errors()),\n                                Box::new(SequenceExpr::default().then_object_pronoun()),\n                            ]))),\n                        ])),\n                ),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for Addicting {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let tok = toks.first()?;\n\n        Some(Lint {\n            span: tok.span,\n            lint_kind: LintKind::Style,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"addictive\".chars().collect(),\n                tok.span.get_content(src),\n            )],\n            message: \"When used as an adjective, `addictive` is the traditional and more f form.\"\n                .to_owned(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Replaces `addicting` with `addictive` when used as an adjective.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Addicting;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fix_addicting() {\n        assert_suggestion_result(\n            \"It is addicting like heroin.\",\n            Addicting::default(),\n            \"It is addictive like heroin.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_addicting_object_pronoun() {\n        assert_lint_count(\"It is addicting me.\", Addicting::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_addicting_reflexive_pronoun() {\n        assert_lint_count(\"He is addicting himself.\", Addicting::default(), 0);\n    }\n\n    #[test]\n    fn fix_yet_highly_addicting() {\n        assert_suggestion_result(\n            \"The objective of the game is simple yet highly addicting, you start out with the four basic elements.\",\n            Addicting::default(),\n            \"The objective of the game is simple yet highly addictive, you start out with the four basic elements.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_addicting_them_on() {\n        assert_no_lints(\n            \"Helping humans on their daily tasks instead of addicting them on social networks of all sorts.\",\n            Addicting::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"False positive since `myself` is not an object pronoun in this construction\"]\n    fn fix_find_things_addicting_myself() {\n        assert_suggestion_result(\n            \"Yeah, I find taking the functional approach for these kinds of problems rather addicting myself :)\",\n            Addicting::default(),\n            \"Yeah, I find taking the functional approach for these kinds of problems rather addictive myself :)\",\n        );\n    }\n\n    #[test]\n    fn dont_fix_coerced_into_addicting_themselves() {\n        assert_no_lints(\n            \"The British, in another display of gunboat diplomacy, coerced countless innocent people into addicting themselves to opium.\",\n            Addicting::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/adjective_double_degree.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    CharStringExt, Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct AdjectiveDoubleDegree {\n    expr: SequenceExpr,\n}\n\nimpl Default for AdjectiveDoubleDegree {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"more\", \"most\"])\n                .t_ws()\n                .then_kind_where(|kind| {\n                    kind.is_comparative_adjective() || kind.is_superlative_adjective()\n                }),\n        }\n    }\n}\n\nimpl ExprLinter for AdjectiveDoubleDegree {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let phrase_span = toks.span()?;\n        let phrase_chars = phrase_span.get_content(src);\n\n        let adj_chars = toks.last()?.span.get_content(src);\n\n        let (lint_kind, message, suggestions) = match (\n            &toks.first()?.span.get_content(src).to_lower().as_ref(),\n            toks.last()?.kind.is_comparative_adjective(),\n            toks.last()?.kind.is_superlative_adjective(),\n        ) {\n            (['m', 'o', 'r', 'e'], true, false) => (\n                LintKind::Redundancy,\n                \"Using `more` and the comparative form of the adjective together is redundant.\"\n                    .to_string(),\n                vec![Suggestion::replace_with_match_case(\n                    adj_chars.to_vec(),\n                    phrase_chars,\n                )],\n            ),\n            (['m', 'o', 's', 't'], false, true) => (\n                LintKind::Redundancy,\n                \"Using `most` and the superlative form of the adjective together is redundant.\"\n                    .to_string(),\n                vec![Suggestion::replace_with_match_case(\n                    adj_chars.to_vec(),\n                    phrase_chars,\n                )],\n            ),\n            _ => {\n                let other_adj_degree = match adj_chars {\n                    &['b', 'e', 't', 't', 'e', 'r'] => vec!['b', 'e', 's', 't'],\n                    &['b', 'e', 's', 't'] => vec!['b', 'e', 't', 't', 'e', 'r'],\n                    &['w', 'o', 'r', 's', 'e'] => vec!['w', 'o', 'r', 's', 't'],\n                    &['w', 'o', 'r', 's', 't'] => vec!['w', 'o', 'r', 's', 'e'],\n                    adj_chars if adj_chars.ends_with(&['r']) => {\n                        let len = adj_chars.len() + 1;\n                        let mut other = vec!['\\0'; len];\n                        other[..len - 2].copy_from_slice(&adj_chars[..len - 2]);\n                        other[len - 2] = 's';\n                        other[len - 1] = 't';\n                        other\n                    }\n                    adj_chars if adj_chars.ends_with(&['s', 't']) => {\n                        let len = adj_chars.len() - 1;\n                        let mut other = vec!['\\0'; len];\n                        other[..len - 1].copy_from_slice(&adj_chars[..len - 1]);\n                        other[len - 1] = 'r';\n                        other\n                    }\n                    _ => return None,\n                };\n\n                (\n                    LintKind::WordChoice,\n                    \"The degree of the adverb conflicts with the degree of the adjective.\"\n                        .to_string(),\n                    vec![\n                        Suggestion::replace_with_match_case(adj_chars.to_vec(), phrase_chars),\n                        Suggestion::replace_with_match_case(other_adj_degree, phrase_chars),\n                    ],\n                )\n            }\n        };\n\n        Some(Lint {\n            span: phrase_span,\n            lint_kind,\n            message,\n            suggestions,\n            priority: 126,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Finds adjectives that are used as double degrees (e.g. `more prettier`).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AdjectiveDoubleDegree;\n    use crate::linting::tests::{assert_good_and_bad_suggestions, assert_suggestion_result};\n\n    #[test]\n    fn fix_double_regular_superlative() {\n        assert_suggestion_result(\n            \"The most easiest to use, self-service open BI reporting and BI dashboard and BI monitor screen platform.\",\n            AdjectiveDoubleDegree::default(),\n            \"The easiest to use, self-service open BI reporting and BI dashboard and BI monitor screen platform.\",\n        );\n    }\n\n    #[test]\n    fn fix_double_regular_comparative() {\n        assert_suggestion_result(\n            \"how can make docx gennerate more faster?\",\n            AdjectiveDoubleDegree::default(),\n            \"how can make docx gennerate faster?\",\n        );\n    }\n\n    #[test]\n    fn fix_double_irregular_comparative() {\n        assert_suggestion_result(\n            \"Find alternative product name more better than age .\",\n            AdjectiveDoubleDegree::default(),\n            \"Find alternative product name better than age .\",\n        );\n    }\n\n    #[test]\n    fn fix_double_irregular_superlative() {\n        assert_suggestion_result(\n            \"how can i get a most best quality file\",\n            AdjectiveDoubleDegree::default(),\n            \"how can i get a best quality file\",\n        );\n    }\n\n    #[test]\n    fn conflicting_moster_offers_two_suggestions() {\n        assert_good_and_bad_suggestions(\n            \"application which students to learn most faster in efficient way.\",\n            AdjectiveDoubleDegree::default(),\n            &[\n                \"application which students to learn faster in efficient way.\",\n                \"application which students to learn fastest in efficient way.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn conflicting_morest_offers_two_suggestions() {\n        assert_good_and_bad_suggestions(\n            \"I suggest migrating to vite that more flexible and more fastest.\",\n            AdjectiveDoubleDegree::default(),\n            &[\n                \"I suggest migrating to vite that more flexible and faster.\",\n                \"I suggest migrating to vite that more flexible and fastest.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn conflicting_most_better_offers_two_suggestions() {\n        assert_good_and_bad_suggestions(\n            \"But first logo is most better for me.\",\n            AdjectiveDoubleDegree::default(),\n            &[\n                \"But first logo is better for me.\",\n                \"But first logo is best for me.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn conflicting_most_worse_offers_two_suggestions() {\n        assert_good_and_bad_suggestions(\n            \"We also see the need of a generic solution built-in in Pimcore, but currently it's probably the most worse time to implement a new solution.\",\n            AdjectiveDoubleDegree::default(),\n            &[\n                // TODO: special-case after \"the\" since that implies a superlative\n                \"We also see the need of a generic solution built-in in Pimcore, but currently it's probably the worse time to implement a new solution.\",\n                \"We also see the need of a generic solution built-in in Pimcore, but currently it's probably the worst time to implement a new solution.\",\n            ],\n            &[],\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/adjective_of_a.rs",
    "content": "use super::{Lint, LintKind, Linter, Suggestion};\nuse crate::{Document, Span, TokenStringExt};\n\n/// Detect sequences of words of the form \"adjective of a\".\n#[derive(Debug, Clone, Copy, Default)]\npub struct AdjectiveOfA;\n\nconst ADJECTIVE_WHITELIST: &[&str] = &[\"bad\", \"big\", \"good\", \"large\", \"long\", \"vague\"];\n\nconst CONTEXT_WORDS: &[&str] = &[\n    \"as\", \"how\", // but \"how much of a\"\n    \"that\", \"this\", \"too\",\n];\n\nconst ADJECTIVE_BLACKLIST: &[&str] = &[\"much\", \"part\"];\n\nfn has_context_word(document: &Document, adj_idx: usize) -> bool {\n    if adj_idx < 2 {\n        // Need at least 2 tokens before the adjective (word + space)\n        return false;\n    }\n\n    // Get the token before the adjective (should be a space)\n    if let Some(space_token) = document.get_token(adj_idx - 1) {\n        if !space_token.kind.is_whitespace() {\n            return false;\n        }\n\n        // Get the token before the space (should be our context word)\n        if let Some(word_token) = document.get_token(adj_idx - 2) {\n            if !word_token.kind.is_word() {\n                return false;\n            }\n\n            let word = document.get_span_content_str(&word_token.span);\n\n            return CONTEXT_WORDS.iter().any(|&w| w.eq_ignore_ascii_case(&word));\n        }\n    }\n\n    false\n}\n\nfn is_good_adjective(word: &str) -> bool {\n    ADJECTIVE_WHITELIST\n        .iter()\n        .any(|&adj| word.eq_ignore_ascii_case(adj))\n}\n\nfn is_bad_adjective(word: &str) -> bool {\n    ADJECTIVE_BLACKLIST\n        .iter()\n        .any(|&adj| word.eq_ignore_ascii_case(adj))\n}\n\nimpl Linter for AdjectiveOfA {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for i in document.iter_adjective_indices() {\n            let adjective = document.get_token(i).unwrap();\n            let space_1 = document.get_token(i + 1);\n            let word_of = document.get_token(i + 2);\n            let space_2 = document.get_token(i + 3);\n            let a_or_an = document.get_token(i + 4);\n            let adj_str = document\n                .get_span_content_str(&adjective.span)\n                .to_lowercase();\n\n            // Only flag adjectives known to use this construction\n            // Unless we have a clearer context\n            if !is_good_adjective(&adj_str) && !has_context_word(document, i) {\n                continue;\n            }\n            // Some adjectives still create false positives even with the extra context\n            if is_bad_adjective(&adj_str) {\n                continue;\n            }\n\n            // Rule out comparatives and superlatives.\n\n            // Pros:\n            // \"for the better of a day\"\n            // \"might not be the best of a given run\"\n            // \"Which brings me to my best of a bad situation.\"\n            //\n            // Cons:\n            // \"see if you can give us a little better of an answer\"\n            // \"hopefully it won't be too much worse of a problem\"\n            // \"seems far worse of a result to me\"\n            if adj_str.ends_with(\"er\") || adj_str.ends_with(\"st\") {\n                continue;\n            }\n            // Rule out present participles (e.g. \"beginning of a\")\n            // The -ing form of a verb acts as an adjective called a present participle\n            // and also acts as a noun called a gerund.\n            if adj_str.ends_with(\"ing\") && (adjective.kind.is_noun() || adjective.kind.is_verb()) {\n                continue;\n            }\n\n            if space_1.is_none() || word_of.is_none() || space_2.is_none() || a_or_an.is_none() {\n                continue;\n            }\n            let space_1 = space_1.unwrap();\n            if !space_1.kind.is_whitespace() {\n                continue;\n            }\n            let word_of = word_of.unwrap();\n            if !word_of.kind.is_word() {\n                continue;\n            }\n            let word_of = document.get_span_content_str(&word_of.span).to_lowercase();\n            if word_of != \"of\" {\n                continue;\n            }\n            let space_2 = space_2.unwrap();\n            if !space_2.kind.is_whitespace() {\n                continue;\n            }\n            let a_or_an = a_or_an.unwrap();\n            if !a_or_an.kind.is_word() {\n                continue;\n            }\n            let a_or_an_str = document.get_span_content_str(&a_or_an.span).to_lowercase();\n            if a_or_an_str != \"a\" && a_or_an_str != \"an\" {\n                continue;\n            }\n\n            // Whitespace may differ, add the other replacement if so\n            let mut sugg_1 = Vec::new();\n            sugg_1.extend_from_slice(document.get_span_content(&adjective.span));\n            sugg_1.extend_from_slice(document.get_span_content(&space_1.span));\n            sugg_1.extend_from_slice(document.get_span_content(&a_or_an.span));\n\n            let mut sugg_2 = Vec::new();\n            sugg_2.extend_from_slice(document.get_span_content(&adjective.span));\n            sugg_2.extend_from_slice(document.get_span_content(&space_2.span));\n            sugg_2.extend_from_slice(document.get_span_content(&a_or_an.span));\n\n            let mut suggestions = vec![Suggestion::ReplaceWith(sugg_1.clone())];\n            if sugg_1 != sugg_2 {\n                suggestions.push(Suggestion::ReplaceWith(sugg_2));\n            }\n\n            lints.push(Lint {\n                span: Span::new(adjective.span.start, a_or_an.span.end),\n                lint_kind: LintKind::Style,\n                suggestions,\n                message: \"The word `of` is not needed here.\".to_string(),\n                priority: 63,\n            });\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"This rule looks for sequences of words of the form `adjective of a`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AdjectiveOfA;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn correct_large_of_a() {\n        assert_suggestion_result(\n            \"Yeah I'm using as large of a batch size as I can on this machine\",\n            AdjectiveOfA,\n            \"Yeah I'm using as large a batch size as I can on this machine\",\n        )\n    }\n\n    #[test]\n    fn correct_bad_of_an() {\n        assert_suggestion_result(\n            \"- If forking is really that bad of an option, let's first decide where to put this.\",\n            AdjectiveOfA,\n            \"- If forking is really that bad an option, let's first decide where to put this.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_comparative() {\n        assert_lint_count(\n            \"I only worked with custom composer installers for the better of a day, so please excuse me if I missed a thing.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_superlative() {\n        assert_lint_count(\n            \"I am trying to use composites to visualize the worst of a set of metrics.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_kind() {\n        // Adjective as in \"a kind person\" vs noun as in \"A kind of person\"\n        assert_lint_count(\n            \"Log.txt file automatic creation in PWD is kind of an anti-feature\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_part() {\n        // Can be an adjective in e.g. \"He is just part owner\"\n        assert_lint_count(\n            \"cannot delete a food that is no longer part of a recipe\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_much() {\n        // \"much of\" is correct idiomatic usage\n        assert_lint_count(\n            \"How much of a performance impact when switching from rails to rails-api ?\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_part_uppercase() {\n        // Can be an adjective in e.g. \"Part man, part machine\"\n        assert_lint_count(\n            \"Quarkus Extension as Part of a Project inside a Monorepo?\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_all_of() {\n        // \"all of\" is correct idiomatic usage\n        assert_lint_count(\n            \"This repository is deprecated. All of its content and history has been moved.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_inside() {\n        // \"inside of\" is idiomatic usage\n        assert_lint_count(\n            \"Michael and Brock sat inside of a diner in Brandon\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_out() {\n        // \"out of\" is correct idiomatic usage\n        assert_lint_count(\n            \"not only would he potentially be out of a job and back to sort of poverty\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_full() {\n        // \"full of\" is correct idiomatic usage\n        assert_lint_count(\n            \"fortunately I happen to have this Tupperware full of an unceremoniously disassembled LED Mac Mini\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_something() {\n        // Can be a noun in e.g. \"a certain something\"\n        assert_lint_count(\n            \"Well its popularity seems to be taking something of a dip right now.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_short() {\n        // Can be a noun in e.g. \"use a multimeter to find the short\"\n        assert_lint_count(\n            \"I found one Youtube short of an indonesian girl.\",\n            AdjectiveOfA,\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_bottom() {\n        // Can be an adjective in e.g. \"bottom bunk\"\n        assert_lint_count(\n            \"When leaves are just like coming out individually from the bottom of a fruit.\",\n            AdjectiveOfA,\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_left() {\n        // Can be an adjective in e.g. \"left hand\"\n        assert_lint_count(\"and what is left of a 12vt coil\", AdjectiveOfA, 0)\n    }\n\n    #[test]\n    fn dont_flag_full_uppercase() {\n        assert_lint_count(\"Full of a bunch varnish like we get.\", AdjectiveOfA, 0);\n    }\n\n    #[test]\n    fn dont_flag_head() {\n        // Can be an adjective in e.g. \"the head cook\"\n        assert_lint_count(\n            \"You need to get out if you're the head of an education department and you're not using AI\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_middle() {\n        // Can be an adjective in e.g. \"middle child\"\n        assert_lint_count(\n            \"just to get to that part in the middle of a blizzard\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_chance() {\n        // Can be an adjective in e.g. \"a chance encounter\"\n        assert_lint_count(\n            \"products that you overpay for because there are subtle details in the terms and conditions that reduce the size or chance of a payout.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_potential() {\n        // Can be an adjective in e.g. \"a potential candidate\"\n        assert_lint_count(\n            \"People that are happy to accept it for the potential of a reward.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_sound() {\n        // Can be an adjective in e.g. \"sound advice\"\n        assert_lint_count(\"the sound of an approaching Krampus\", AdjectiveOfA, 0);\n    }\n\n    #[test]\n    fn dont_flag_rid() {\n        // I removed the `5` flag from `rid` in `dictionary.dict`\n        // because dictionaries say the sense is archaic.\n        assert_lint_count(\"I need to get rid of a problem\", AdjectiveOfA, 0);\n    }\n\n    #[test]\n    fn dont_flag_precision() {\n        // Can be an adjective in e.g. \"a precision instrument\"\n        assert_lint_count(\n            \"a man whose crew cut has the precision of a targeted drone strike\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_back() {\n        // Can be an adjective in e.g. \"back door\"\n        assert_lint_count(\n            \"a man whose crew cut has the back of a targeted drone strike\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_emblematic() {\n        // \"emblematic of\" is correct idiomatic usage\n        assert_lint_count(\n            \"... situation was emblematic of a publication that ...\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_half() {\n        // Can be an adjective in e.g. \"half man, half machine\"\n        assert_lint_count(\"And now I only have half of a CyberTruck\", AdjectiveOfA, 0);\n    }\n\n    #[test]\n    fn dont_flag_bit() {\n        // Technically also an adj as in \"that guy's bit - he'll turn into a zombie\"\n        assert_lint_count(\"we ran into a bit of an issue\", AdjectiveOfA, 0);\n    }\n\n    #[test]\n    fn dont_flag_dream() {\n        // Can be an adjective in e.g. \"we built our dream house\"\n        assert_lint_count(\"When the dream of a united Europe began\", AdjectiveOfA, 0);\n    }\n\n    #[test]\n    fn dont_flag_beginning() {\n        // Present participles have properties of adjectives, nouns, and verbs\n        assert_lint_count(\"That's the beginning of a conversation.\", AdjectiveOfA, 0);\n    }\n\n    #[test]\n    fn dont_flag_side() {\n        // Can be an adjective in e.g. \"via a side door\"\n        assert_lint_count(\n            \"it hit the barrier on the side of a highway\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_derivative() {\n        // Adj: \"a derivative story\", Noun: \"stocks and derivatives\"\n        assert_lint_count(\n            \"Techniques for evaluating the *partial derivative of a function\",\n            AdjectiveOfA,\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_equivalent() {\n        assert_lint_count(\n            \"Rust's equivalent of a switch statement is a match expression\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_up() {\n        assert_lint_count(\n            \"Yeah gas is made up of a bunch of teenytiny particles all moving around.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_eighth() {\n        assert_lint_count(\n            \"It's about an eighth of an inch or whatever\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_shy() {\n        assert_lint_count(\n            \"... or just shy of a third of the country's total trade deficit.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_fun() {\n        assert_lint_count(\n            \"Remember that $4,000 Hermes horse bag I was making fun of a little while ago.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_off() {\n        // Can be an adjective in e.g. \"The TV is off\".\n        // This should be in a different lint that handles based on/off/off of.\n        assert_lint_count(\n            \"can't identify a person based off of an IP from 10 years ago\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_borderline_of() {\n        assert_lint_count(\n            \"it's very very on the borderline of a rock pop ballad\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_light() {\n        assert_lint_count(\"The light of a star.\", AdjectiveOfA, 0);\n    }\n\n    #[test]\n    fn dont_flag_multiple() {\n        assert_lint_count(\n            \"The image needs to be a multiple of a certain size.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_red() {\n        assert_lint_count(\"The red of a drop of blood.\", AdjectiveOfA, 0);\n    }\n\n    #[test]\n    fn dont_flag_top() {\n        assert_lint_count(\"The top of a hill.\", AdjectiveOfA, 0);\n    }\n\n    #[test]\n    fn dont_flag_slack() {\n        assert_lint_count(\n            \"They've been picking up the slack of a federal government mostly dominated by whatever this is.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_illustrative() {\n        assert_lint_count(\n            \"Yet, the fact that they clearly give a one-sided account of most of their case studies is illustrative of a bias.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_perspective() {\n        assert_lint_count(\n            \"I always assess software by looking at it from the perspective of a new user.\",\n            AdjectiveOfA,\n            0,\n        );\n    }\n\n    #[test]\n    fn correct_too_large_of_a() {\n        assert_suggestion_result(\n            \"Warn users if setting too large of a session object\",\n            AdjectiveOfA,\n            \"Warn users if setting too large a session object\",\n        )\n    }\n\n    #[test]\n    fn correct_too_long_of_a() {\n        assert_suggestion_result(\n            \"An Org Role with Too Long of a Name Hides Delete Option\",\n            AdjectiveOfA,\n            \"An Org Role with Too Long a Name Hides Delete Option\",\n        )\n    }\n\n    #[test]\n    fn correct_too_big_of_a() {\n        assert_suggestion_result(\n            \"StepButton has too big of a space to click\",\n            AdjectiveOfA,\n            \"StepButton has too big a space to click\",\n        )\n    }\n\n    #[test]\n    fn correct_too_vague_of_a() {\n        assert_suggestion_result(\n            \"\\\"No Speech provider is registered.\\\" is too vague of an error\",\n            AdjectiveOfA,\n            \"\\\"No Speech provider is registered.\\\" is too vague an error\",\n        )\n    }\n\n    #[test]\n    fn correct_too_dumb_of_a() {\n        assert_suggestion_result(\n            \"Hopefully this isn't too dumb of a question.\",\n            AdjectiveOfA,\n            \"Hopefully this isn't too dumb a question.\",\n        )\n    }\n\n    #[test]\n    fn correct_how_important_of_a() {\n        assert_suggestion_result(\n            \"This should tell us how important of a use case that is and how often writing a type literal in a case is deliberate.\",\n            AdjectiveOfA,\n            \"This should tell us how important a use case that is and how often writing a type literal in a case is deliberate.\",\n        )\n    }\n\n    #[test]\n    fn correct_that_rare_of_an() {\n        assert_suggestion_result(\n            \"so making changes isn't that rare of an occurrence for me.\",\n            AdjectiveOfA,\n            \"so making changes isn't that rare an occurrence for me.\",\n        )\n    }\n\n    #[test]\n    fn correct_as_important_of_a() {\n        assert_suggestion_result(\n            \"Might be nice to have it draggable from other places as well, but not as important of a bug anymore.\",\n            AdjectiveOfA,\n            \"Might be nice to have it draggable from other places as well, but not as important a bug anymore.\",\n        )\n    }\n\n    #[test]\n    fn correct_too_short_of_a() {\n        assert_suggestion_result(\n            \"I login infrequently as well and 6 months is too short of a time.\",\n            AdjectiveOfA,\n            \"I login infrequently as well and 6 months is too short a time.\",\n        )\n    }\n\n    #[test]\n    fn correct_that_common_of_a() {\n        assert_suggestion_result(\n            \"that common of a name for a cluster role its hard to rule out\",\n            AdjectiveOfA,\n            \"that common a name for a cluster role its hard to rule out\",\n        )\n    }\n\n    #[test]\n    fn correct_as_great_of_an() {\n        assert_suggestion_result(\n            \"the w factor into the u factor to as great of an extent as possible.\",\n            AdjectiveOfA,\n            \"the w factor into the u factor to as great an extent as possible.\",\n        )\n    }\n\n    #[test]\n    fn correct_too_uncommon_of_a() {\n        assert_suggestion_result(\n            \"but this is probably too uncommon of a practice to be the default\",\n            AdjectiveOfA,\n            \"but this is probably too uncommon a practice to be the default\",\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/after_later.rs",
    "content": "use crate::Token;\nuse crate::expr::{DurationExpr, Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::token_string_ext::TokenStringExt;\n\npub struct AfterLater {\n    expr: SequenceExpr,\n}\n\nimpl Default for AfterLater {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"after\")\n                .t_ws()\n                .then_optional(\n                    SequenceExpr::word_set(&[\n                        \"about\",\n                        \"almost\",\n                        \"approximately\",\n                        \"around\",\n                        \"circa\",\n                        \"exactly\",\n                        \"just\",\n                        \"maybe\",\n                        \"nearly\",\n                        \"only\",\n                        \"perhaps\",\n                        \"precisely\",\n                        \"probably\",\n                        \"roughly\",\n                    ])\n                    .t_ws(),\n                )\n                .then(DurationExpr)\n                .t_ws()\n                .t_aco(\"later\"),\n        }\n    }\n}\n\nimpl ExprLinter for AfterLater {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let without_after: Vec<char> = toks[2..].span()?.get_content(src).to_vec();\n        let without_later: Vec<char> = toks[..toks.len() - 2].span()?.get_content(src).to_vec();\n\n        let template_chars = toks.span()?.get_content(src);\n\n        Some(Lint {\n            span: toks.span()?,\n            lint_kind: LintKind::Redundancy,\n            message: \"Don't use `later` following `after [a period of time]`\".to_string(),\n            suggestions: vec![\n                Suggestion::replace_with_match_case(without_after, template_chars),\n                Suggestion::replace_with_match_case(without_later, template_chars),\n            ],\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Checks for the word `later` following `after [a period of time]`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AfterLater;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn after_90_days_later() {\n        assert_suggestion_result(\n            \"Try to rename your organization after 90 days later because of GitHub official documentation it said.\",\n            AfterLater::default(),\n            \"Try to rename your organization after 90 days because of GitHub official documentation it said.\",\n        );\n    }\n\n    #[test]\n    fn after_about_30_minutes_later() {\n        assert_suggestion_result(\n            \"It plays like 1 minute of the song and then stops, and after about 30 minutes later, the bot disconnects an throws DisTubeError\",\n            AfterLater::default(),\n            \"It plays like 1 minute of the song and then stops, and about 30 minutes later, the bot disconnects an throws DisTubeError\",\n        );\n    }\n\n    #[test]\n    fn after_14_days_later() {\n        assert_suggestion_result(\n            \"After 14 days later, the cache expired.\",\n            AfterLater::default(),\n            \"After 14 days, the cache expired.\",\n        );\n    }\n\n    #[test]\n    fn after_exactly_5_minutes_later() {\n        assert_suggestion_result(\n            \"After exactly 5 minutes later, they try again and the cluster is formed then.\",\n            AfterLater::default(),\n            \"Exactly 5 minutes later, they try again and the cluster is formed then.\",\n        );\n    }\n\n    #[test]\n    fn after_22_years_later_1() {\n        assert_suggestion_result(\n            \"Completed YR campaign for 2nd time after 22 years later.\",\n            AfterLater::default(),\n            \"Completed YR campaign for 2nd time after 22 years.\",\n        );\n    }\n\n    #[test]\n    fn after_almost_2_years_later() {\n        assert_suggestion_result(\n            \"This buyer contacted me after almost 2 years later.\",\n            AfterLater::default(),\n            \"This buyer contacted me almost 2 years later.\",\n        );\n    }\n\n    #[test]\n    fn after_2_years_later() {\n        assert_suggestion_result(\n            \"Is Jedi Survivor better now after 2 years later?\",\n            AfterLater::default(),\n            \"Is Jedi Survivor better now after 2 years?\",\n        );\n    }\n\n    #[test]\n    fn after_a_year_later() {\n        assert_suggestion_result(\n            \"Even after a year later, I don’t know how to get my self-love back.\",\n            AfterLater::default(),\n            \"Even a year later, I don’t know how to get my self-love back.\",\n        );\n    }\n\n    #[test]\n    fn after_22_years_later_2() {\n        assert_suggestion_result(\n            \"After 22 years later, my top 1 game was Zeroed\",\n            AfterLater::default(),\n            \"After 22 years, my top 1 game was Zeroed\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/all_hell_break_loose.rs",
    "content": "use crate::{\n    Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct AllHellBreakLoose {\n    expr: SequenceExpr,\n}\n\nimpl Default for AllHellBreakLoose {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"all\")\n                .t_ws()\n                .t_aco(\"hell\")\n                .t_ws()\n                .then_word_set(&[\"break\", \"breaking\", \"breaks\", \"broke\", \"broken\"])\n                .t_ws()\n                .t_aco(\"out\"),\n        }\n    }\n}\n\nimpl ExprLinter for AllHellBreakLoose {\n    type Unit = Chunk;\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let outtok = toks.last()?;\n        let outspan = outtok.span;\n        let outchars = outspan.get_content(src);\n\n        Some(Lint {\n            lint_kind: LintKind::Eggcorn,\n            span: outspan,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\"loose\", outchars)],\n            message: \"The correct idiom is `all hell breaks loose`.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects forms of `all hell breaks out` to `all hell breaks loose`.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AllHellBreakLoose;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn fix_break() {\n        assert_suggestion_result(\n            \"Just run around planting satchels charges while you're alive and let all hell break out when you die.\",\n            AllHellBreakLoose::default(),\n            \"Just run around planting satchels charges while you're alive and let all hell break loose when you die.\",\n        );\n    }\n\n    #[test]\n    fn fix_breaks() {\n        assert_suggestion_result(\n            \"we upgraded 2 months ago, and now we upgrade prod and all hell breaks out\",\n            AllHellBreakLoose::default(),\n            \"we upgraded 2 months ago, and now we upgrade prod and all hell breaks loose\",\n        );\n    }\n\n    #[test]\n    fn fix_breaking() {\n        assert_suggestion_result(\n            \"Next scene, all hell breaking out!\",\n            AllHellBreakLoose::default(),\n            \"Next scene, all hell breaking loose!\",\n        );\n    }\n\n    #[test]\n    fn fix_broke() {\n        assert_suggestion_result(\n            \"this time going from 1.3.4 to 1.4.2 and all hell broke out\",\n            AllHellBreakLoose::default(),\n            \"this time going from 1.3.4 to 1.4.2 and all hell broke loose\",\n        );\n    }\n\n    #[test]\n    fn fix_broken() {\n        assert_suggestion_result(\n            \"I’m using silenced weapons but as soon as I fire it’s all hell broken out.\",\n            AllHellBreakLoose::default(),\n            \"I’m using silenced weapons but as soon as I fire it’s all hell broken loose.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/all_intents_and_purposes.rs",
    "content": "use crate::Token;\nuse crate::char_string::CharStringExt;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::token_string_ext::TokenStringExt;\n\npub struct AllIntentsAndPurposes {\n    expr: SequenceExpr,\n}\n\nimpl Default for AllIntentsAndPurposes {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::default()\n                .then_preposition() // Only \"for\" or \"to\" are OK\n                .t_ws()\n                .t_aco(\"all\")\n                .t_ws()\n                .then_any_of(vec![\n                    Box::new(\n                        SequenceExpr::word_set(&[\n                            \"intents\", // Correct, as long as it follows \"for\" or \"to\"\n                            \"extents\", \"intense\", // Incorrect, no matter the preposition\n                        ])\n                        .t_ws()\n                        .t_aco(\"and\"),\n                    ),\n                    Box::new(SequenceExpr::word_set(&[\n                        \"intended\",\n                        \"intense\",\n                        \"intensive\",\n                        \"intrinsic\",\n                    ])),\n                ])\n                .t_ws()\n                .t_aco(\"purposes\"),\n        }\n    }\n}\n\nimpl ExprLinter for AllIntentsAndPurposes {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let whole_span = toks.span()?;\n        let whole_str = whole_span.get_content_string(src);\n\n        // \"for\" is first since \"to\" is listed as a UK variant in some dictionaries\n        const LEGIT: [&str; 2] = [\n            \"for all intents and purposes\",\n            \"to all intents and purposes\",\n        ];\n\n        if LEGIT.iter().any(|s| s.eq_ignore_ascii_case(&whole_str)) {\n            return None;\n        }\n\n        let prep_text = toks.first().unwrap().span.get_content(src);\n\n        let mut suggs = LEGIT.to_vec();\n\n        // Suggest \"to\" first if the text uses \"to\", otherwise \"for\" first\n        if prep_text.eq_ignore_ascii_case_chars(&['t', 'o']) {\n            suggs.swap(0, 1);\n        }\n\n        let suggs = suggs\n            .into_iter()\n            .map(|s| Suggestion::replace_with_match_case_str(s, whole_span.get_content(src)))\n            .collect::<Vec<_>>();\n\n        let message = format!(\n            \"The correct form is '{} all intents and purposes'.\",\n            prep_text.iter().collect::<String>().to_ascii_lowercase()\n        );\n\n        Some(Lint {\n            span: whole_span,\n            lint_kind: LintKind::Nonstandard,\n            suggestions: suggs,\n            message,\n            priority: 50,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Finds and corrects common wrong forms of the phrase 'for all intents and purposes' / 'to all intents and purposes'.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AllIntentsAndPurposes;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    // Adjectives without \"and\"\n\n    #[test]\n    fn fix_for_intended() {\n        assert_suggestion_result(\n            \"The details tag should be treated like a div for all intended purposes, but unsure where in the selection logic\",\n            AllIntentsAndPurposes::default(),\n            \"The details tag should be treated like a div for all intents and purposes, but unsure where in the selection logic\",\n        );\n    }\n\n    #[test]\n    fn fix_for_intense() {\n        assert_suggestion_result(\n            \"For all intense purposes, I thought your code was really well written\",\n            AllIntentsAndPurposes::default(),\n            \"For all intents and purposes, I thought your code was really well written\",\n        );\n    }\n\n    #[test]\n    fn fix_for_intensive() {\n        assert_suggestion_result(\n            \"MultiNode could be for all intensive purposes, the same as Node sans the way it creates the command line arguments for the process.\",\n            AllIntentsAndPurposes::default(),\n            \"MultiNode could be for all intents and purposes, the same as Node sans the way it creates the command line arguments for the process.\",\n        );\n    }\n\n    #[test]\n    fn fix_for_intrinsic_purposes() {\n        assert_suggestion_result(\n            \"For all intrinsic purposes I think you are wrong.\",\n            AllIntentsAndPurposes::default(),\n            \"For all intents and purposes I think you are wrong.\",\n        );\n    }\n\n    #[test]\n    fn fix_in_intense_purposes() {\n        assert_suggestion_result(\n            \"the solution has some rules than in all intense purposes is not necessarily database driven\",\n            AllIntentsAndPurposes::default(),\n            \"the solution has some rules than for all intents and purposes is not necessarily database driven\",\n        );\n    }\n\n    #[test]\n    fn fix_to_intensive_purposes() {\n        assert_suggestion_result(\n            \"To all intensive purposes, for the consumer, a view is a table\",\n            AllIntentsAndPurposes::default(),\n            \"To all intents and purposes, for the consumer, a view is a table\",\n        );\n    }\n\n    // Nouns with \"and\"\n\n    #[test]\n    fn fix_at_intents_and() {\n        assert_suggestion_result(\n            \"can be thought of, at all intents and purposes, as a controlled cache\",\n            AllIntentsAndPurposes::default(),\n            \"can be thought of, for all intents and purposes, as a controlled cache\",\n        );\n    }\n\n    #[test]\n    fn fix_by_intents_and() {\n        assert_suggestion_result(\n            \"so by all intents and purposes one is not nested into another\",\n            AllIntentsAndPurposes::default(),\n            \"so for all intents and purposes one is not nested into another\",\n        );\n    }\n\n    #[test]\n    fn fix_for_extents_and() {\n        assert_suggestion_result(\n            \"#include, for all extents and purposes (if you take the preprocessor out) just copies the file\",\n            AllIntentsAndPurposes::default(),\n            \"#include, for all intents and purposes (if you take the preprocessor out) just copies the file\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_for_intents_and() {\n        assert_no_lints(\n            \"with the previous previous setting still present and for all intents and purposes seems enabled\",\n            AllIntentsAndPurposes::default(),\n        );\n    }\n\n    #[test]\n    fn fix_from_intents_and() {\n        assert_suggestion_result(\n            \"act as a full archive node from all intents and purposes\",\n            AllIntentsAndPurposes::default(),\n            \"act as a full archive node for all intents and purposes\",\n        );\n    }\n\n    #[test]\n    fn fix_in_intents_and() {\n        assert_suggestion_result(\n            \"I posted #20493 asking about, in all intents and purposes, deno info\",\n            AllIntentsAndPurposes::default(),\n            \"I posted #20493 asking about, for all intents and purposes, deno info\",\n        );\n    }\n\n    #[test]\n    fn fix_on_intents_and() {\n        assert_suggestion_result(\n            \"It depends on all intents and purposes what you want to do.\",\n            AllIntentsAndPurposes::default(),\n            \"It depends for all intents and purposes what you want to do.\",\n        );\n    }\n\n    #[test]\n    fn fix_through_intents_and() {\n        assert_suggestion_result(\n            \"While, I know through all intents and purposes it is an ugly url to look at\",\n            AllIntentsAndPurposes::default(),\n            \"While, I know for all intents and purposes it is an ugly url to look at\",\n        );\n    }\n\n    #[test]\n    fn fix_to_extents_and() {\n        assert_suggestion_result(\n            \"and they were trying to find out how that would also affect the the personnel to all extents and purposes.\",\n            AllIntentsAndPurposes::default(),\n            \"and they were trying to find out how that would also affect the the personnel to all intents and purposes.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_to_intents_and() {\n        assert_no_lints(\n            \"and they were trying to find out how that would also affect the the personnel to all intents and purposes.\",\n            AllIntentsAndPurposes::default(),\n        );\n    }\n\n    #[test]\n    fn fix_with_intents_and() {\n        assert_suggestion_result(\n            \"With all intents and purposes the array should be As String since all values I'll be dealing with will be strings.\",\n            AllIntentsAndPurposes::default(),\n            \"For all intents and purposes the array should be As String since all values I'll be dealing with will be strings.\",\n        );\n    }\n\n    // Adjectives with \"and\"!\n\n    #[test]\n    fn fix_by_intensive_purposes() {\n        assert_suggestion_result(\n            \"By all intensive purposes this should be working\",\n            AllIntentsAndPurposes::default(),\n            \"For all intents and purposes this should be working\",\n        );\n    }\n\n    #[test]\n    fn fix_for_intense_and() {\n        assert_suggestion_result(\n            \"to test my site, which for all intense and purposes works\",\n            AllIntentsAndPurposes::default(),\n            \"to test my site, which for all intents and purposes works\",\n        );\n    }\n\n    #[test]\n    fn fix_in_intensive_purposes() {\n        assert_suggestion_result(\n            \"it should in all intensive purposes keep running\",\n            AllIntentsAndPurposes::default(),\n            \"it should for all intents and purposes keep running\",\n        );\n    }\n\n    #[test]\n    fn fix_to_intense_and() {\n        assert_suggestion_result(\n            \"The other type, is to all intense and purposes a submit button to the browser\",\n            AllIntentsAndPurposes::default(),\n            \"The other type, is to all intents and purposes a submit button to the browser\",\n        );\n    }\n\n    // Doesn't try to deal with qualified \"all\"\n\n    #[test]\n    fn dont_flag_for_basically_all_intents_and_purposes() {\n        assert_no_lints(\n            \"For basically all intents and purposes, this works fine.\",\n            AllIntentsAndPurposes::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_for_nearly_all_intents_and_purposes() {\n        assert_no_lints(\n            \"but for nearly all intents and purposes this should be negligable\",\n            AllIntentsAndPurposes::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_for_pretty_much_all_intents_and_purposes() {\n        assert_no_lints(\n            \"or for pretty much all intents and purposes, between Android devices\",\n            AllIntentsAndPurposes::default(),\n        );\n    }\n\n    // Strange false positives\n\n    #[test]\n    #[ignore = \"Rare and unusual false positive\"]\n    fn false_positive_for_99_percent_of_all_intents_and_purposes() {\n        assert_no_lints(\n            \"But for 99% of all intents and purposes they can be treated as lists.\",\n            AllIntentsAndPurposes::default(),\n        );\n    }\n\n    // US Constitution false positive\n\n    #[test]\n    fn false_positive_for_us_constitution_space() {\n        assert_no_lints(\n            \"Amendments, which, in either Case, shall be valid to all Intents and Purposes, as Part of this Constitution\",\n            AllIntentsAndPurposes::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"The linefeed should be treated as a space!\"]\n    fn false_positive_for_us_constitution_line_break() {\n        assert_no_lints(\n            \"Amendments, which, in either Case, shall be valid to all Intents and\\nPurposes, as Part of this Constitution\",\n            AllIntentsAndPurposes::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/allow_to.rs",
    "content": "use crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind};\nuse crate::token::Token;\nuse crate::token_string_ext::TokenStringExt;\n\npub struct AllowTo {\n    exp: SequenceExpr,\n}\n\nimpl Default for AllowTo {\n    fn default() -> Self {\n        Self {\n            // Note: Does not include \"allowed to\", which is a legitimate usage in its own right.\n            exp: SequenceExpr::word_set(&[\"allow\", \"allowing\", \"allows\"])\n                .t_ws()\n                .t_aco(\"to\")\n                .then_optional(SequenceExpr::default().t_ws().then_adverb())\n                .t_ws()\n                .then_any_word(),\n        }\n    }\n}\n\nimpl ExprLinter for AllowTo {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.exp\n    }\n\n    fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {\n        let span = toks.span()?;\n        let first = toks.first()?;\n        let allow = first.span.get_content_string(_src);\n\n        let message = format!(\n            \"For correct usage, either add a subject between `{allow}` and `to` (e.g., `{allow} someone to do`) or use the present participle (e.g., `{allow} doing`).\"\n        );\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![],\n            message,\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags erroneous usage of `allow to` without a subject.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AllowTo;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints};\n\n    #[test]\n    fn flag_allow_to() {\n        assert_lint_count(\n            \"Allow to change approval policy during running task # 4394.\",\n            AllowTo::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn flag_allowing_to() {\n        assert_lint_count(\n            \"Allowing to have multiple views with different filtering # 952.\",\n            AllowTo::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn flag_allows_to() {\n        assert_lint_count(\n            \"It is easily doable for classic IHostBuilder, because its extension allows to pass configure action\",\n            AllowTo::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn dont_flag_allowed_to() {\n        assert_no_lints(\n            \"In C and C++ aliasing has to do with what expression types we are allowed to access stored values through.\",\n            AllowTo::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_allow_pronoun_to() {\n        assert_no_lints(\n            \"It would be really great to allow me to enter body data using multipart form\",\n            AllowTo::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_allow_noun_to() {\n        assert_no_lints(\n            \"Allows users to export SMART statistics from any connected hard drive\",\n            AllowTo::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_allow_np_to() {\n        assert_no_lints(\n            \"This vulnerability allows an authenticated attacker to infer data from the database by measuring response times\",\n            AllowTo::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/am_in_the_morning.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Span, Token, TokenStringExt,\n    expr::{Expr, FixedPhrase, LongestMatchOf, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct AmInTheMorning {\n    expr: SequenceExpr,\n}\n\nimpl Default for AmInTheMorning {\n    fn default() -> Self {\n        let am = WordSet::new(&[\"am\", \"a.m.\"]);\n        let pm = WordSet::new(&[\"pm\", \"p.m.\"]);\n\n        let maybe_ws_am = LongestMatchOf::new(vec![\n            Box::new(SequenceExpr::with(am.clone())),\n            Box::new(SequenceExpr::whitespace().then(am)),\n        ]);\n        let maybe_ws_pm = LongestMatchOf::new(vec![\n            Box::new(SequenceExpr::with(pm.clone())),\n            Box::new(SequenceExpr::whitespace().then(pm)),\n        ]);\n\n        let ws_in_periods = SequenceExpr::fixed_phrase(\" in the \").then_word_set(&[\n            \"morning\",\n            \"afternoon\",\n            \"evening\",\n            \"night\",\n        ]);\n\n        let ws_at_periods = FixedPhrase::from_phrase(\" at night\");\n\n        let expr = SequenceExpr::any_of(vec![Box::new(maybe_ws_am), Box::new(maybe_ws_pm)])\n            .then_any_of(vec![Box::new(ws_in_periods), Box::new(ws_at_periods)]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for AmInTheMorning {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let all_after_number_span = toks[0..].span()?;\n        let am_pm_idx = if toks[0].kind.is_whitespace() { 1 } else { 0 };\n\n        let maybe_ws_am_pm_span = Span::new(toks[0].span.start, toks[am_pm_idx].span.end);\n        let sugg_am_pm_only =\n            Suggestion::ReplaceWith(maybe_ws_am_pm_span.get_content(src).to_vec());\n\n        let ws_prep_period = Span::new(toks[am_pm_idx + 1].span.start, all_after_number_span.end);\n        let sugg_prep_period_only =\n            Suggestion::ReplaceWith(ws_prep_period.get_content(src).to_vec());\n\n        Some(Lint {\n            span: all_after_number_span,\n            lint_kind: LintKind::Redundancy,\n            suggestions: vec![sugg_am_pm_only, sugg_prep_period_only],\n            message: \"The time period is redundant because it repeats what's already specified by the AM/PM indicator.\".to_owned(),            priority: 50,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Finds redundant am/pm indicators used together with time periods such as 'in the morning' or 'at night'.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AmInTheMorning;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn flag_at_4am_in_the_morning() {\n        assert_lint_count(\"At 4am in the morning\", AmInTheMorning::default(), 1);\n    }\n\n    #[test]\n    fn fix_at_4am_in_the_morning() {\n        assert_suggestion_result(\"At 4am in the morning\", AmInTheMorning::default(), \"At 4am\");\n    }\n\n    #[test]\n    fn flag_at_4_am_in_the_morning() {\n        assert_lint_count(\"At 4 am in the morning\", AmInTheMorning::default(), 1);\n    }\n\n    #[test]\n    fn fix_at_4_am_in_the_morning() {\n        assert_suggestion_result(\n            \"At 4 am in the morning\",\n            AmInTheMorning::default(),\n            \"At 4 am\",\n        );\n    }\n\n    #[test]\n    fn flag_at_4am_in_the_morning_caps() {\n        assert_lint_count(\"At 4AM in the morning\", AmInTheMorning::default(), 1);\n    }\n\n    #[test]\n    fn fix_at_4am_in_the_morning_caps() {\n        assert_suggestion_result(\"At 4AM in the morning\", AmInTheMorning::default(), \"At 4AM\");\n    }\n\n    #[test]\n    fn flag_at_4_am_in_the_morning_caps() {\n        assert_lint_count(\"At 4 AM in the morning\", AmInTheMorning::default(), 1);\n    }\n\n    #[test]\n    fn fix_at_4_am_in_the_morning_caps() {\n        assert_suggestion_result(\n            \"At 4 AM in the morning\",\n            AmInTheMorning::default(),\n            \"At 4 AM\",\n        );\n    }\n\n    #[test]\n    fn at_4_a_dot_m_dot_in_the_morning() {\n        assert_lint_count(\"At 4 a.m. in the morning\", AmInTheMorning::default(), 1)\n    }\n\n    #[test]\n    fn fix_at_4_a_dot_m_dot_in_the_morning() {\n        assert_suggestion_result(\n            \"At 4 a.m. in the morning\",\n            AmInTheMorning::default(),\n            \"At 4 a.m.\",\n        );\n    }\n\n    // real-world examples\n\n    #[test]\n    fn fix_real_world_1_am_in_the_morning() {\n        assert_suggestion_result(\n            \"I wrote this whole program as a joke, at 1 AM in the morning. Nothing else to say.\",\n            AmInTheMorning::default(),\n            \"I wrote this whole program as a joke, at 1 AM. Nothing else to say.\",\n        );\n        assert_suggestion_result(\n            \"I wrote this whole program as a joke, at 1 AM in the morning. Nothing else to say.\",\n            AmInTheMorning::default(),\n            \"I wrote this whole program as a joke, at 1 in the morning. Nothing else to say.\",\n        );\n    }\n\n    #[test]\n    fn fix_real_world_3am_in_the_morning() {\n        assert_suggestion_result(\n            \"Luckily I was at home, but it was not fun at 3am in the morning.\",\n            AmInTheMorning::default(),\n            \"Luckily I was at home, but it was not fun at 3am.\",\n        );\n        assert_suggestion_result(\n            \"Luckily I was at home, but it was not fun at 3am in the morning.\",\n            AmInTheMorning::default(),\n            \"Luckily I was at home, but it was not fun at 3 in the morning.\",\n        );\n    }\n\n    #[test]\n    fn fix_real_world_3am_at_night() {\n        assert_suggestion_result(\n            \"If I want to run my script or some cron job at 3am at night, it seems to be not possible after macOS is in sleep mode.\",\n            AmInTheMorning::default(),\n            \"If I want to run my script or some cron job at 3am, it seems to be not possible after macOS is in sleep mode.\",\n        );\n        assert_suggestion_result(\n            \"If I want to run my script or some cron job at 3am at night, it seems to be not possible after macOS is in sleep mode.\",\n            AmInTheMorning::default(),\n            \"If I want to run my script or some cron job at 3 at night, it seems to be not possible after macOS is in sleep mode.\",\n        );\n    }\n\n    #[test]\n    fn fix_real_world_9pm_at_night() {\n        assert_suggestion_result(\n            \"The servers stop at 9PM at night and starts again at 9AM.\",\n            AmInTheMorning::default(),\n            \"The servers stop at 9PM and starts again at 9AM.\",\n        );\n        assert_suggestion_result(\n            \"The servers stop at 9PM at night and starts again at 9AM.\",\n            AmInTheMorning::default(),\n            \"The servers stop at 9 at night and starts again at 9AM.\",\n        );\n    }\n\n    #[test]\n    fn fix_real_world_3_30_am_in_the_morning() {\n        assert_suggestion_result(\n            \"Hello I can't believe my neighbor had the nerve to knock on my door at 3:30 AM in the morning.\",\n            AmInTheMorning::default(),\n            \"Hello I can't believe my neighbor had the nerve to knock on my door at 3:30 AM.\",\n        );\n        assert_suggestion_result(\n            \"Hello I can't believe my neighbor had the nerve to knock on my door at 3:30 AM in the morning.\",\n            AmInTheMorning::default(),\n            \"Hello I can't believe my neighbor had the nerve to knock on my door at 3:30 in the morning.\",\n        );\n    }\n\n    #[test]\n    fn fix_real_world_5_pm_in_the_afternoon_caps_dots() {\n        assert_suggestion_result(\n            \"Style issues get a blue marker: It's 5 P.M. in the afternoon.\",\n            AmInTheMorning::default(),\n            \"Style issues get a blue marker: It's 5 P.M..\",\n        );\n        assert_suggestion_result(\n            \"Style issues get a blue marker: It's 5 P.M. in the afternoon.\",\n            AmInTheMorning::default(),\n            \"Style issues get a blue marker: It's 5 in the afternoon.\",\n        );\n    }\n\n    #[test]\n    fn fix_real_world_5_pm_in_the_afternoon_caps() {\n        assert_suggestion_result(\n            \"Its a impressively versatile tool if youd like to tell a colleague from over sea's about at 5 PM in the afternoon on Monday, 27 May 2007.\",\n            AmInTheMorning::default(),\n            \"Its a impressively versatile tool if youd like to tell a colleague from over sea's about at 5 PM on Monday, 27 May 2007.\",\n        );\n        assert_suggestion_result(\n            \"Its a impressively versatile tool if youd like to tell a colleague from over sea's about at 5 PM in the afternoon on Monday, 27 May 2007.\",\n            AmInTheMorning::default(),\n            \"Its a impressively versatile tool if youd like to tell a colleague from over sea's about at 5 in the afternoon on Monday, 27 May 2007.\",\n        );\n    }\n\n    #[test]\n    fn fix_real_world_6_pm_in_the_evening() {\n        assert_suggestion_result(\n            \"I am in China and it is six pm in the evening.\",\n            AmInTheMorning::default(),\n            \"I am in China and it is six pm.\",\n        );\n        assert_suggestion_result(\n            \"I am in China and it is six pm in the evening.\",\n            AmInTheMorning::default(),\n            \"I am in China and it is six in the evening.\",\n        );\n    }\n\n    #[test]\n    fn fix_real_world_4_am_in_the_morning() {\n        assert_suggestion_result(\n            \"On the second application, we normally have the 503 between 1am and 4 am in the morning, almost every day.\",\n            AmInTheMorning::default(),\n            \"On the second application, we normally have the 503 between 1am and 4 am, almost every day.\",\n        );\n        assert_suggestion_result(\n            \"On the second application, we normally have the 503 between 1am and 4 am in the morning, almost every day.\",\n            AmInTheMorning::default(),\n            \"On the second application, we normally have the 503 between 1am and 4 in the morning, almost every day.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/amounts_for.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt, patterns::WordSet};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct AmountsFor {\n    expr: FirstMatchOf,\n}\n\nimpl Default for AmountsFor {\n    fn default() -> Self {\n        let singular_context = WordSet::new(&[\"that\", \"which\", \"it\", \"this\"]);\n\n        let singular_pattern = SequenceExpr::with(singular_context)\n            .then_whitespace()\n            .then_fixed_phrase(\"amounts for\");\n\n        let singular_context = WordSet::new(&[\n            \"they\", \"can\", \"could\", \"may\", \"might\", \"must\", \"should\", \"will\", \"would\",\n        ]);\n\n        let plural_pattern = SequenceExpr::with(singular_context)\n            .then_whitespace()\n            .then_fixed_phrase(\"amount for\");\n\n        Self {\n            expr: FirstMatchOf::new(vec![Box::new(singular_pattern), Box::new(plural_pattern)]),\n        }\n    }\n}\n\nimpl ExprLinter for AmountsFor {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let content = toks.span()?.get_content_string(src).to_lowercase();\n\n        if content.ends_with(\"amounts for\") {\n            let span = toks[2..5].span()?;\n\n            return Some(Lint {\n                span,\n                lint_kind: LintKind::WordChoice,\n                suggestions: vec![\n                    Suggestion::replace_with_match_case(\n                        \"amounts to\".chars().collect(),\n                        span.get_content(src),\n                    ),\n                    Suggestion::replace_with_match_case(\n                        \"accounts for\".chars().collect(),\n                        span.get_content(src),\n                    ),\n                ],\n                message: \"`amounts for` is not idiomatic English. You probably meant `amounts to` or `accounts for`.\".to_owned(),\n                priority: 63,\n            });\n        }\n\n        if content.ends_with(\"amount for\") {\n            let span = toks[2..5].span()?;\n\n            return Some(Lint {\n                span,\n                lint_kind: LintKind::WordChoice,\n                suggestions: vec![\n                    Suggestion::replace_with_match_case(\n                        \"amount to\".chars().collect(),\n                        span.get_content(src),\n                    ),\n                    Suggestion::replace_with_match_case(\n                        \"account for\".chars().collect(),\n                        span.get_content(src),\n                    ),\n                ],\n                message: \"`amounts for` is not idiomatic English. You probably meant `amounts to` or `accounts for`.\".to_owned(),\n                priority: 63,\n            });\n        }\n\n        None\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `amounts for` to either `amounts to` or `accounts for`\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AmountsFor;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn corrects_that_amounts_for_to_amounts_to_entire_value() {\n        assert_suggestion_result(\n            \"Skyler stated the car wash is worth close to $800k, that amounts for the entire value of the company\",\n            AmountsFor::default(),\n            \"Skyler stated the car wash is worth close to $800k, that amounts to the entire value of the company\",\n        );\n    }\n\n    #[test]\n    fn corrects_that_amounts_for_to_amounts_to_percent() {\n        assert_suggestion_result(\n            \"Together, that amounts for 1157 calls or 60% of the failures.\",\n            AmountsFor::default(),\n            \"Together, that amounts to 1157 calls or 60% of the failures.\",\n        );\n    }\n\n    #[test]\n    fn corrects_that_amounts_for_to_accounts_for_setting_up() {\n        assert_suggestion_result(\n            \"One solution to this would be to have separate controllers but the amount of code that amounts for setting up, processing and calling\",\n            AmountsFor::default(),\n            \"One solution to this would be to have separate controllers but the amount of code that accounts for setting up, processing and calling\",\n        );\n    }\n\n    #[test]\n    fn corrects_which_amounts_for_to_accounts_for_16k() {\n        assert_suggestion_result(\n            \"It has an offset of 0xC000 which amounts for the 16k.\",\n            AmountsFor::default(),\n            \"It has an offset of 0xC000 which accounts for the 16k.\",\n        );\n    }\n\n    #[test]\n    fn corrects_this_amounts_for_to_accounts_for_large_part() {\n        assert_suggestion_result(\n            \"I'm pretty sure that this amounts for a large part of the speed I gained when typing, in addition to touch-typing.\",\n            AmountsFor::default(),\n            \"I'm pretty sure that this accounts for a large part of the speed I gained when typing, in addition to touch-typing.\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_amount_for_to_amount_to_16kb() {\n        assert_suggestion_result(\n            \"it is obvious that the messages are being held \\\"somewhere\\\" until they amount for 16kB and then the whole lot come at once.\",\n            AmountsFor::default(),\n            \"it is obvious that the messages are being held \\\"somewhere\\\" until they amount to 16kB and then the whole lot come at once.\",\n        );\n    }\n\n    #[test]\n    fn corrects_which_amounts_for_to_amounts_to_10_minutes() {\n        assert_suggestion_result(\n            \"set a small TTL for your hostname (like 600 which amounts for 10 minutes).\",\n            AmountsFor::default(),\n            \"set a small TTL for your hostname (like 600 which amounts to 10 minutes).\",\n        );\n    }\n\n    #[test]\n    fn corrects_it_amounts_for_to_amounts_to_redefinition() {\n        assert_suggestion_result(\n            \"included for convenience to get a Lorentz invariant result (it amounts for a redefinition of ap).\",\n            AmountsFor::default(),\n            \"included for convenience to get a Lorentz invariant result (it amounts to a redefinition of ap).\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_amount_for_to_amount_to_nothing() {\n        assert_suggestion_result(\n            \"Matter and antimatter are spread throughout the Universe, and in total, they amount for nothing\",\n            AmountsFor::default(),\n            \"Matter and antimatter are spread throughout the Universe, and in total, they amount to nothing\",\n        );\n    }\n\n    #[test]\n    fn would_amount_for_to_amount_to_api_requests() {\n        assert_suggestion_result(\n            \"10% of 6,782,091 would amount for 678,209 API requests\",\n            AmountsFor::default(),\n            \"10% of 6,782,091 would amount to 678,209 API requests\",\n        );\n    }\n\n    #[test]\n    fn will_amount_for_to_amount_to_relationships() {\n        assert_suggestion_result(\n            \"Consider this statistic from Gartner, that artificial intelligence will amount for 85% of customer relationships by 2020.\",\n            AmountsFor::default(),\n            \"Consider this statistic from Gartner, that artificial intelligence will amount to 85% of customer relationships by 2020.\",\n        );\n    }\n\n    #[test]\n    fn should_amount_for_to_amount_to_half_pack() {\n        assert_suggestion_result(\n            \"It doesn't seem realistic that this single elite should amount for half the pack\",\n            AmountsFor::default(),\n            \"It doesn't seem realistic that this single elite should amount to half the pack\",\n        );\n    }\n\n    #[test]\n    fn can_amount_for_to_amount_to_draw_calls() {\n        assert_suggestion_result(\n            \"That can amount for a lot of draw calls and work for the engine to cull. \",\n            AmountsFor::default(),\n            \"That can amount to a lot of draw calls and work for the engine to cull. \",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/an_a.rs",
    "content": "use itertools::Itertools;\n\nuse crate::indefinite_article::{InitialSound, starts_with_vowel};\nuse crate::linting::{Lint, LintKind, Linter, Suggestion};\nuse crate::{Dialect, Document, TokenStringExt};\n\n#[derive(Debug)]\npub struct AnA {\n    dialect: Dialect,\n}\n\nimpl AnA {\n    pub fn new(dialect: Dialect) -> Self {\n        Self { dialect }\n    }\n}\n\nimpl Linter for AnA {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for chunk in document.iter_chunks() {\n            for (first_idx, second_idx) in chunk.iter_word_indices().tuple_windows() {\n                // [`TokenKind::Unlintable`] might have semantic meaning.\n                if chunk[first_idx..second_idx].iter_unlintables().count() > 0\n                    || chunk[first_idx + 1..second_idx]\n                        .iter_word_like_indices()\n                        .count()\n                        > 0\n                {\n                    continue;\n                }\n\n                let first = &chunk[first_idx];\n                let second = &chunk[second_idx];\n\n                let chars_first = document.get_span_content(&first.span);\n                let chars_second = document.get_span_content(&second.span);\n                // Break the second word on hyphens for this lint.\n                // Example: \"An ML-based\" is an acceptable noun phrase.\n                let chars_second = chars_second\n                    .split(|c| !c.is_alphanumeric())\n                    .next()\n                    .unwrap_or(chars_second);\n\n                let is_a_an = match chars_first {\n                    ['a'] => Some(true),\n                    ['A'] => Some(true),\n                    ['a', 'n'] => Some(false),\n                    ['A', 'n'] => Some(false),\n                    _ => None,\n                };\n\n                let Some(a_an) = is_a_an else {\n                    continue;\n                };\n\n                let should_be_a_an = match starts_with_vowel(chars_second, self.dialect)\n                    .expect(\"No empty word tokens\")\n                {\n                    InitialSound::Vowel => false,\n                    InitialSound::Consonant => true,\n                    InitialSound::Either => return lints,\n                };\n\n                if a_an != should_be_a_an {\n                    let replacement = match a_an {\n                        true => vec!['a', 'n'],\n                        false => vec!['a'],\n                    };\n\n                    lints.push(Lint {\n                        span: first.span,\n                        lint_kind: LintKind::Miscellaneous,\n                        suggestions: vec![Suggestion::replace_with_match_case(\n                            replacement,\n                            chars_first,\n                        )],\n                        message: \"Incorrect indefinite article.\".to_string(),\n                        priority: 31,\n                    })\n                }\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &'static str {\n        \"A rule that looks for incorrect indefinite articles. For example, `this is an mule` would be flagged as incorrect.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AnA;\n    use crate::Dialect;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn detects_html_as_vowel() {\n        assert_lint_count(\"Here is a HTML document.\", AnA::new(Dialect::American), 1);\n    }\n\n    #[test]\n    fn detects_llm_as_vowel() {\n        assert_lint_count(\"Here is a LLM document.\", AnA::new(Dialect::American), 1);\n    }\n\n    #[test]\n    fn detects_llm_hyphen_as_vowel() {\n        assert_lint_count(\n            \"Here is a LLM-based system.\",\n            AnA::new(Dialect::American),\n            1,\n        );\n    }\n\n    #[test]\n    fn detects_euler_as_vowel() {\n        assert_lint_count(\"This is an Euler brick.\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\n            \"The graph has an Eulerian tour.\",\n            AnA::new(Dialect::American),\n            0,\n        );\n    }\n\n    #[test]\n    fn capitalized_fourier() {\n        assert_lint_count(\n            \"Then, perform a Fourier transform.\",\n            AnA::new(Dialect::American),\n            0,\n        );\n    }\n\n    #[test]\n    fn once_over() {\n        assert_lint_count(\"give this a once-over.\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn issue_196() {\n        assert_lint_count(\n            \"This is formatted as an `ext4` file system.\",\n            AnA::new(Dialect::American),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_lowercase_vowels() {\n        assert_lint_count(\"not an error\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn allows_lowercase_consonants() {\n        assert_lint_count(\"not a crash\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn disallows_lowercase_vowels() {\n        assert_lint_count(\"not a error\", AnA::new(Dialect::American), 1);\n    }\n\n    #[test]\n    fn disallows_lowercase_consonants() {\n        assert_lint_count(\"not an crash\", AnA::new(Dialect::American), 1);\n    }\n\n    #[test]\n    fn allows_uppercase_vowels() {\n        assert_lint_count(\"not an Error\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn allows_uppercase_consonants() {\n        assert_lint_count(\"not a Crash\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn disallows_uppercase_vowels() {\n        assert_lint_count(\"not a Error\", AnA::new(Dialect::American), 1);\n    }\n\n    #[test]\n    fn disallows_uppercase_consonants() {\n        assert_lint_count(\"not an Crash\", AnA::new(Dialect::American), 1);\n    }\n\n    #[test]\n    fn disallows_a_interface() {\n        assert_lint_count(\n            \"A interface for an object that can perform linting actions.\",\n            AnA::new(Dialect::American),\n            1,\n        );\n    }\n\n    #[test]\n    fn allow_issue_751() {\n        assert_lint_count(\n            \"He got a 52% approval rating.\",\n            AnA::new(Dialect::American),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_an_mp_and_an_mp3() {\n        assert_lint_count(\"an MP and an MP3?\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn disallow_a_mp_and_a_mp3() {\n        assert_lint_count(\"a MP and a MP3?\", AnA::new(Dialect::American), 2);\n    }\n\n    #[test]\n    fn recognize_acronyms() {\n        // a\n        assert_lint_count(\"using a MAC address\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"a NASA spacecraft\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"a NAT\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"a REST API\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"a LIBERO\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"a README\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"a LAN\", AnA::new(Dialect::American), 0);\n\n        // an\n        assert_lint_count(\"an RA message\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"an SI unit\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\n            \"he is an MA of both Oxford and Cambridge\",\n            AnA::new(Dialect::American),\n            0,\n        );\n        assert_lint_count(\n            \"in an FA Cup 6th Round match\",\n            AnA::new(Dialect::American),\n            0,\n        );\n        assert_lint_count(\"a AM transmitter\", AnA::new(Dialect::American), 1);\n    }\n\n    #[test]\n    fn dont_misrecognize_as_acronym() {\n        assert_lint_count(\"a UPD connection\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"a UPB device\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"a UPS or power device\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"a USB 2.0 port\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"an HEVC HLS stream\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn a_udev() {\n        assert_lint_count(\"a udev rule\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn an_mdns() {\n        assert_lint_count(\"an mDNS tool\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn an_rflink() {\n        assert_lint_count(\"an RFLink device\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn an_ffmpeg() {\n        assert_lint_count(\n            \"an FFmpeg-compatible input file\",\n            AnA::new(Dialect::American),\n            0,\n        );\n    }\n\n    #[test]\n    fn a_honey() {\n        assert_lint_count(\"a Honeywell alarm panel\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn an_onedrive() {\n        assert_lint_count(\"a OneDrive folder\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn a_ubiquiti() {\n        assert_lint_count(\n            \"a Ubiquiti UniFi Network application\",\n            AnA::new(Dialect::American),\n            0,\n        );\n    }\n\n    #[test]\n    fn an_honest() {\n        assert_lint_count(\"an honest mistake\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn dont_flag_an_herb_for_american() {\n        assert_lint_count(\"an herb\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn dont_flag_a_herb_for_british() {\n        assert_lint_count(\"a herb\", AnA::new(Dialect::British), 0);\n    }\n\n    #[test]\n    fn correct_an_herb_for_australian() {\n        assert_suggestion_result(\"an herb\", AnA::new(Dialect::Australian), \"a herb\");\n    }\n\n    #[test]\n    fn correct_a_herb_for_canadian() {\n        assert_suggestion_result(\"a herb\", AnA::new(Dialect::Canadian), \"an herb\");\n    }\n\n    #[test]\n    fn dont_flag_a_sql() {\n        assert_lint_count(\"a SQL query\", AnA::new(Dialect::American), 0);\n    }\n\n    #[test]\n    fn dont_flag_an_sql() {\n        assert_lint_count(\"an SQL query\", AnA::new(Dialect::Australian), 0);\n    }\n\n    #[test]\n    fn allow_an_and_a_for_led_2550() {\n        assert_lint_count(\"an LED\", AnA::new(Dialect::American), 0);\n        assert_lint_count(\"a LED\", AnA::new(Dialect::American), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/and_in.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\n\npub struct AndIn {\n    expr: SequenceExpr,\n}\n\nimpl Default for AndIn {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::fixed_phrase(\"an in\").then_optional_hyphen(),\n        }\n    }\n}\n\nimpl ExprLinter for AndIn {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        if toks.len() != 3 {\n            return None;\n        }\n\n        Some(Lint {\n            span: toks[0].span,\n            lint_kind: LintKind::Typo,\n            message: \"Did you mean `and in`?\".to_string(),\n            suggestions: vec![Suggestion::replace_with_match_case(\n                ['a', 'n', 'd'].to_vec(),\n                toks[2].span.get_content(src),\n            )],\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Fixes the incorrect phrase `an in` to `and in` for proper conjunction usage.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AndIn;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn dont_flag_an_in_house() {\n        assert_no_lints(\n            \"for several years as an in-house engine, used to ...\",\n            AndIn::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_an_in_memory() {\n        assert_no_lints(\n            \"including an in-memory real-time Vector Index,\",\n            AndIn::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_an_in_the_moment() {\n        assert_no_lints(\n            \"His words serve as an in-the-moment explanation for what had happened.\",\n            AndIn::default(),\n        );\n    }\n\n    #[test]\n    fn fix_an_in_to_and_in() {\n        assert_suggestion_result(\n            \"This is an expensive operation, so try to only do it at startup an in tests.\",\n            AndIn::default(),\n            \"This is an expensive operation, so try to only do it at startup and in tests.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"This is a known false positive - `an in` can be valid in some contexts\"]\n    fn dont_flag_an_in_with_company() {\n        assert_no_lints(\n            \"His parents got him an in with the company.\",\n            AndIn::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/and_the_like.rs",
    "content": "use crate::expr::{All, Expr, FixedPhrase, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, LintKind, Suggestion};\nuse crate::patterns::WordSet;\nuse crate::token_string_ext::TokenStringExt;\nuse crate::{Lint, Token};\n\npub struct AndTheLike {\n    expr: All,\n}\n\nimpl Default for AndTheLike {\n    fn default() -> Self {\n        Self {\n            expr: All::new(vec![\n                Box::new(\n                    // All known variants seen in the wild, good and bad\n                    SequenceExpr::word_set(&[\"and\", \"or\", \"an\"])\n                        .t_ws()\n                        .then_optional(SequenceExpr::aco(\"the\").t_ws())\n                        .then_word_set(&[\"alike\", \"alikes\", \"like\", \"likes\"]),\n                ),\n                Box::new(SequenceExpr::unless(\n                    SequenceExpr::word_set(&[\"and\", \"or\"])\n                        .t_ws()\n                        .then_any_of(vec![\n                            // But not the correct variants\n                            Box::new(FixedPhrase::from_phrase(\"the like\")),\n                            // And not the phrases that were coincidentally caught in the net\n                            Box::new(WordSet::new(&[\"like\", \"likes\"])),\n                        ]),\n                )),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for AndTheLike {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let (conj, ws) = (&toks[0], &toks[1]);\n\n        let conj = if conj.span.get_content(src)[0] == 'a' {\n            \"and\"\n        } else {\n            \"or\"\n        };\n\n        let corrected = format!(\"{}{}the like\", conj, ws.span.get_content_string(src));\n\n        Some(Lint {\n            span: toks.span()?,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                corrected.chars().collect(),\n                toks.span()?.get_content(src),\n            )],\n            message: \"If you intended the idiom meaning `similar things`, the correct form is with `the like`.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects mistakes in `and the like` and `or the like`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AndTheLike;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn dont_flag_and_the_like() {\n        assert_no_lints(\n            \"The color of brackets and the like appears to be incorrect ...\",\n            AndTheLike::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_or_the_like() {\n        assert_no_lints(\n            \"Does WCAG apply only to English (or the like), or does it aim to cover all languages?\",\n            AndTheLike::default(),\n        );\n    }\n\n    #[test]\n    fn flag_an_the_likes() {\n        assert_suggestion_result(\n            \"Allow jsSourceDir (an the likes) to refer to the project root. #5\",\n            AndTheLike::default(),\n            \"Allow jsSourceDir (and the like) to refer to the project root. #5\",\n        );\n    }\n\n    #[test]\n    fn flag_and_alike() {\n        assert_suggestion_result(\n            \"Latest release breaks FilePicker and alike\",\n            AndTheLike::default(),\n            \"Latest release breaks FilePicker and the like\",\n        );\n    }\n\n    #[test]\n    fn flag_and_alikes() {\n        assert_suggestion_result(\n            \"Compiled functions (and alikes) need to keep references for their module objects\",\n            AndTheLike::default(),\n            \"Compiled functions (and the like) need to keep references for their module objects\",\n        );\n    }\n\n    #[test]\n    fn flag_and_the_alike() {\n        assert_suggestion_result(\n            \"Suggestions, comments and the alike are welcome on http://waa.ai/4xtC\",\n            AndTheLike::default(),\n            \"Suggestions, comments and the like are welcome on http://waa.ai/4xtC\",\n        );\n    }\n\n    #[test]\n    fn flag_and_the_likes() {\n        assert_suggestion_result(\n            \"Don't report \\\"expected semicolon or line break\\\", \\\"expected comma\\\" and the likes at every token boundary\",\n            AndTheLike::default(),\n            \"Don't report \\\"expected semicolon or line break\\\", \\\"expected comma\\\" and the like at every token boundary\",\n        );\n    }\n\n    #[test]\n    fn flag_or_alike() {\n        assert_suggestion_result(\n            \"enable biome extension to \\\"monitor or alike\\\" the workspace.\",\n            AndTheLike::default(),\n            \"enable biome extension to \\\"monitor or the like\\\" the workspace.\",\n        );\n    }\n\n    #[test]\n    fn flag_or_alikes() {\n        assert_suggestion_result(\n            \"Persistent Compiler Caching with ccache or alikes\",\n            AndTheLike::default(),\n            \"Persistent Compiler Caching with ccache or the like\",\n        );\n    }\n\n    #[test]\n    fn flag_or_the_likes() {\n        assert_suggestion_result(\n            \"Description of the problem: Implement aria2c or the likes to resume partial downloads.\",\n            AndTheLike::default(),\n            \"Description of the problem: Implement aria2c or the like to resume partial downloads.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/another_thing_coming.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\n/// Both `another thing coming` and `another think coming` are correct, but `another think coming` is more common.\npub struct AnotherThingComing {\n    expr: SequenceExpr,\n}\n\nimpl Default for AnotherThingComing {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"had\", \"has\", \"have\", \"got\"])\n                .then_fixed_phrase(\" another think coming\"),\n        }\n    }\n}\n\nimpl ExprLinter for AnotherThingComing {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        Some(Lint {\n            span: toks[2..].span()?,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"another thing coming\",\n                toks.span()?.get_content(src),\n            )],\n            message: \"Corrects `another think coming` to `another thing coming`\".to_string(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Though `another think coming` is the original phrase, `another thing coming` is now more common.\"\n    }\n}\n\n#[cfg(test)]\npub mod tests {\n    use super::AnotherThingComing;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn fix_have_another_think_coming() {\n        assert_suggestion_result(\n            \"If you think that, you have another think coming, English.\",\n            AnotherThingComing::default(),\n            \"If you think that, you have another thing coming, English.\",\n        );\n    }\n\n    #[test]\n    fn fix_has_another_think_coming() {\n        assert_suggestion_result(\n            \"If the wage earner thinks that he will obtain anything from either of the old parties he has another think coming.\",\n            AnotherThingComing::default(),\n            \"If the wage earner thinks that he will obtain anything from either of the old parties he has another thing coming.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"A lettercase bug results in 'another thiNG COMing.'\"]\n    fn fix_got_another_think_coming() {\n        assert_suggestion_result(\n            \"The correct phrase is, “You've got another THINK coming.”\",\n            AnotherThingComing::default(),\n            \"The correct phrase is, “You've got another THING coming.”\",\n        );\n    }\n\n    #[test]\n    fn fix_had_another_think_coming() {\n        assert_suggestion_result(\n            \"Guess I had another think coming.\",\n            AnotherThingComing::default(),\n            \"Guess I had another thing coming.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/another_think_coming.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\n/// Both `another thing coming` and `another think coming` are correct, but `another think coming` is the original.\npub struct AnotherThinkComing {\n    expr: SequenceExpr,\n}\n\nimpl Default for AnotherThinkComing {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"had\", \"has\", \"have\", \"got\"])\n                .then_fixed_phrase(\" another thing coming\"),\n        }\n    }\n}\n\nimpl ExprLinter for AnotherThinkComing {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        Some(Lint {\n            span: toks[2..].span()?,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"another think coming\",\n                toks.span()?.get_content(src),\n            )],\n            message: \"Corrects `another thing coming` to `another think coming`\".to_string(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Though `another thing coming` is now more common, `another think coming` is the original phrase.\"\n    }\n}\n\n#[cfg(test)]\npub mod tests {\n    use super::AnotherThinkComing;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn fix_got_another_thing_coming() {\n        assert_suggestion_result(\n            \"If Microsoft thinks my Team and I are going to REINSTALL Windows fresh on over 1500 PC's they've got another thing coming!!\",\n            AnotherThinkComing::default(),\n            \"If Microsoft thinks my Team and I are going to REINSTALL Windows fresh on over 1500 PC's they've got another think coming!!\",\n        );\n    }\n\n    #[test]\n    fn fix_has_another_thing_coming() {\n        assert_suggestion_result(\n            \"Anyone who thinks it's easy to raise a child has another thing coming.\",\n            AnotherThinkComing::default(),\n            \"Anyone who thinks it's easy to raise a child has another think coming.\",\n        );\n    }\n\n    #[test]\n    fn fix_have_another_thing_coming() {\n        assert_suggestion_result(\n            \"And if you think they're predictable, you have another thing coming still.\",\n            AnotherThinkComing::default(),\n            \"And if you think they're predictable, you have another think coming still.\",\n        );\n    }\n\n    #[test]\n    fn fix_had_another_thing_coming() {\n        assert_suggestion_result(\n            \"And wouldn't you know it I had another thing coming.\",\n            AnotherThinkComing::default(),\n            \"And wouldn't you know it I had another think coming.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/apart_from.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\n\npub struct ApartFrom {\n    expr: SequenceExpr,\n}\n\nimpl Default for ApartFrom {\n    fn default() -> Self {\n        let expr = SequenceExpr::any_capitalization_of(\"apart\")\n            .t_ws()\n            .then_any_capitalization_of(\"form\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for ApartFrom {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.last()?.span;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"from\",\n                span.get_content(source),\n            )],\n            message: \"Use `from` to spell `apart from`.\".to_owned(),\n            priority: 50,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags the misspelling `apart form` and suggests `apart from`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ApartFrom;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_basic_typo() {\n        assert_suggestion_result(\n            \"Christianity was set apart form other religions.\",\n            ApartFrom::default(),\n            \"Christianity was set apart from other religions.\",\n        );\n    }\n\n    #[test]\n    fn corrects_title_case() {\n        assert_suggestion_result(\n            \"Apart Form these files, everything uploaded fine.\",\n            ApartFrom::default(),\n            \"Apart From these files, everything uploaded fine.\",\n        );\n    }\n\n    #[test]\n    fn corrects_all_caps() {\n        assert_suggestion_result(\n            \"APART FORM THE REST OF THE FIELD.\",\n            ApartFrom::default(),\n            \"APART FROM THE REST OF THE FIELD.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_comma() {\n        assert_suggestion_result(\n            \"It was apart form, not apart from, the original plan.\",\n            ApartFrom::default(),\n            \"It was apart from, not apart from, the original plan.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_newline() {\n        assert_suggestion_result(\n            \"They stood apart\\nform everyone else at the rally.\",\n            ApartFrom::default(),\n            \"They stood apart\\nfrom everyone else at the rally.\",\n        );\n    }\n\n    #[test]\n    fn corrects_extra_spacing() {\n        assert_suggestion_result(\n            \"We keep the archive apart   form public assets.\",\n            ApartFrom::default(),\n            \"We keep the archive apart   from public assets.\",\n        );\n    }\n\n    #[test]\n    fn allows_correct_phrase() {\n        assert_lint_count(\n            \"Lebanon's freedoms set it apart from other Arab states.\",\n            ApartFrom::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_hyphenated() {\n        assert_lint_count(\n            \"Their apart-form design wasn’t what we needed.\",\n            ApartFrom::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_split_by_comma() {\n        assert_lint_count(\n            \"They stood apart, form lines when asked.\",\n            ApartFrom::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_unrelated_form_usage() {\n        assert_lint_count(\n            \"The form was kept apart to dry after printing.\",\n            ApartFrom::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/ask_no_preposition.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Span, Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct AskNoPreposition {\n    expr: SequenceExpr,\n}\n\nimpl Default for AskNoPreposition {\n    fn default() -> Self {\n        let verbs = WordSet::new(&[\n            \"ask\", \"asks\", \"asked\", \"asking\", \"tell\", \"tells\", \"told\", \"telling\",\n        ]);\n\n        let objs = WordSet::new(&[\"me\", \"you\", \"him\", \"her\", \"it\", \"us\", \"them\", \"one\"]);\n\n        let pattern = SequenceExpr::with(verbs)\n            .then_whitespace()\n            .t_aco(\"to\")\n            .then_whitespace()\n            .then(objs);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for AskNoPreposition {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        if toks.len() < 5 {\n            return None;\n        }\n\n        let verb = toks[0].span.get_content_string(src).to_lowercase();\n        let span = Span::new(toks[2].span.start, toks[3].span.end);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::ReplaceWith(Vec::new())],\n            message: format!(\n                \"The verb `to {verb} someone` should not be preceded by the preposition `to`.\"\n            ),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Identifies sequences like `ask to us` or `tell to him` and recommends removing the superfluous “to”.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AskNoPreposition;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn flags_ask() {\n        assert_suggestion_result(\n            \"Nora asked to us about the concert lineup.\",\n            AskNoPreposition::default(),\n            \"Nora asked us about the concert lineup.\",\n        );\n    }\n\n    #[test]\n    fn flags_ask_all_caps() {\n        assert_suggestion_result(\n            \"NORA ASKED TO US ABOUT THE CONCERT LINEUP.\",\n            AskNoPreposition::default(),\n            \"NORA ASKED US ABOUT THE CONCERT LINEUP.\",\n        );\n    }\n\n    #[test]\n    fn flags_tell() {\n        assert_suggestion_result(\n            \"Please tell to him the results promptly.\",\n            AskNoPreposition::default(),\n            \"Please tell him the results promptly.\",\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage() {\n        assert_lint_count(\n            \"She asked her mentor a difficult question.\",\n            AskNoPreposition::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn flags_ask_us() {\n        assert_suggestion_result(\n            \"Can you ask to us for directions?\",\n            AskNoPreposition::default(),\n            \"Can you ask us for directions?\",\n        );\n    }\n\n    #[test]\n    fn flags_asks_him() {\n        assert_suggestion_result(\n            \"Julia asks to him every morning about the report.\",\n            AskNoPreposition::default(),\n            \"Julia asks him every morning about the report.\",\n        );\n    }\n\n    #[test]\n    fn flags_asked_me() {\n        assert_suggestion_result(\n            \"They asked to me why I left early.\",\n            AskNoPreposition::default(),\n            \"They asked me why I left early.\",\n        );\n    }\n\n    #[test]\n    fn flags_told_one() {\n        assert_suggestion_result(\n            \"The guide told to one the secret path.\",\n            AskNoPreposition::default(),\n            \"The guide told one the secret path.\",\n        );\n    }\n\n    #[test]\n    fn flags_telling_it() {\n        assert_suggestion_result(\n            \"She is telling to it with gentle words.\",\n            AskNoPreposition::default(),\n            \"She is telling it with gentle words.\",\n        );\n    }\n\n    #[test]\n    fn flags_tells_them() {\n        assert_suggestion_result(\n            \"He tells to them stories at night.\",\n            AskNoPreposition::default(),\n            \"He tells them stories at night.\",\n        );\n    }\n\n    #[test]\n    fn flags_telling_him() {\n        assert_suggestion_result(\n            \"I was telling to him the latest news.\",\n            AskNoPreposition::default(),\n            \"I was telling him the latest news.\",\n        );\n    }\n\n    #[test]\n    fn flags_asking_you() {\n        assert_suggestion_result(\n            \"Someone is asking to you for help.\",\n            AskNoPreposition::default(),\n            \"Someone is asking you for help.\",\n        );\n    }\n\n    #[test]\n    fn ignores_ask_question() {\n        assert_lint_count(\n            \"Ask her the question directly.\",\n            AskNoPreposition::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_told_to_leave() {\n        assert_lint_count(\n            \"He was told to leave immediately.\",\n            AskNoPreposition::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_tell_us() {\n        assert_lint_count(\"Please tell us your name.\", AskNoPreposition::default(), 0);\n    }\n\n    #[test]\n    fn ignores_ask_about() {\n        assert_lint_count(\n            \"They asked about the schedule.\",\n            AskNoPreposition::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/avoid_curses.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::{LintKind, Suggestion};\n\nuse super::{ExprLinter, Lint};\nuse crate::linting::expr_linter::Chunk;\n\npub struct AvoidCurses {\n    expr: SequenceExpr,\n}\n\nimpl Default for AvoidCurses {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::default().then_swear(),\n        }\n    }\n}\n\nimpl ExprLinter for AvoidCurses {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        if toks.len() != 1 {\n            return None;\n        }\n\n        let tok = &toks[0];\n        let span = tok.span;\n        let bad_word_chars = span.get_content(src);\n        let bad_word_str = span.get_content_string(src);\n        let bad_word_norm = bad_word_str.to_lowercase();\n\n        // Define offensive morphemes which are common parts of multiple words\n        // Each entry maps a morpheme to an optional censored version.\n        const MORPHEMES: &[(&str, Option<&str>)] = &[\n            (\"arse\", None),\n            (\"ass\", Some(\"a**\")),\n            (\"cock\", Some(\"c**k\")),\n            (\"cunt\", Some(\"c**t\")),\n            (\"dick\", Some(\"d**k\")),\n            (\"fuck\", Some(\"f**k\")),\n            (\"piss\", Some(\"p**s\")),\n            (\"shit\", Some(\"sh*t\")),\n            (\"wank\", Some(\"w**k\")),\n        ];\n\n        // Define offensive words and their possible replacements\n        const WORDS: &[(&str, &[&str])] = &[\n            (\"apeshit\", &[\"crazy\", \"mad\", \"insane\", \"wild\"]),\n            (\n                \"arse\",\n                &[\"bum\", \"buttocks\", \"backside\", \"bottom\", \"rump\", \"posterior\"],\n            ),\n            (\n                \"arses\",\n                &[\n                    \"bums\",\n                    \"buttocks\",\n                    \"backsides\",\n                    \"bottoms\",\n                    \"rumps\",\n                    \"posteriors\",\n                ],\n            ),\n            (\"arsed\", &[\"bothered\"]),\n            (\"arsehole\", &[\"bumhole\"]),\n            (\n                \"ass\",\n                &[\n                    \"butt\",\n                    \"buttocks\",\n                    \"backside\",\n                    \"bottom\",\n                    \"rump\",\n                    \"posterior\",\n                    \"tuchus\",\n                    \"tush\",\n                ],\n            ),\n            (\n                \"asses\",\n                &[\n                    \"butts\",\n                    \"buttocks\",\n                    \"backsides\",\n                    \"bottoms\",\n                    \"rumps\",\n                    \"posteriors\",\n                    \"tuchuses\",\n                    \"tushes\",\n                ],\n            ),\n            (\"asshole\", &[\"butthole\"]),\n            // batshit\n            // birdshit\n            (\"bullshit\", &[\"bullcrap\", \"bulldust\", \"lie\", \"lies\"]),\n            (\"bullshitted\", &[\"bullcrapped\", \"lied\"]),\n            (\"bullshitting\", &[\"bullcrapping\", \"lying\"]),\n            (\"bullshitter\", &[\"liar\"]),\n            // bullshittery\n            (\"chickenshit\", &[\"gutless\", \"cowardly\"]),\n            (\"cock\", &[\"pee-pee\", \"willy\", \"penis\", \"phallus\", \"member\"]),\n            (\n                \"cocks\",\n                &[\"pee-pees\", \"willies\", \"penises\", \"phalluses\", \"members\"],\n            ),\n            // cocksucker\n            (\"cunt\", &[\"vagina\"]),\n            (\"cunts\", &[\"vaginas\"]),\n            (\"dick\", &[\"pee-pee\", \"penis\"]),\n            (\"dicks\", &[\"pee-pees\", \"penises\"]),\n            (\"dickhead\", &[\"jerk\", \"idiot\"]),\n            (\"dichheads\", &[\"jerks\", \"idiots\"]),\n            // dipshit\n            (\"dumbass\", &[\"idiot\", \"fool\"]),\n            (\"dumbasses\", &[\"idiots\", \"fools\"]),\n            (\"fart\", &[\"gas\", \"wind\", \"break wind\"]),\n            (\"farts\", &[\"gas\", \"wind\", \"breaks wind\"]),\n            (\"farted\", &[\"broke wind\", \"broken wind\"]),\n            (\"farting\", &[\"breaking wind\"]),\n            (\"fuck\", &[\"fudge\", \"screw\", \"damn\", \"hoot\"]),\n            (\"fucks\", &[\"screws\"]),\n            (\"fucked\", &[\"screwed\"]),\n            (\"fucking\", &[\"screwing\"]),\n            (\"fucker\", &[\"jerk\"]),\n            (\"fuckers\", &[\"jerks\"]),\n            // fuckhead\n            (\"horseshit\", &[\"nonsense\"]),\n            // mindfuck\n            // motherfucker\n            // nigga\n            // nigger\n            (\"piss\", &[\"pee\", \"urine\", \"urinate\"]),\n            (\"pisses\", &[\"pees\", \"urinates\"]),\n            (\"pissed\", &[\"peed\", \"urinated\"]),\n            (\"pissing\", &[\"peeing\", \"urinating\"]),\n            (\"pisser\", &[\"toilet\", \"bathroom\", \"restroom\", \"washroom\"]),\n            // pissy\n            (\n                \"shit\",\n                &[\"crap\", \"poo\", \"poop\", \"feces\", \"dung\", \"damn\", \"hoot\"],\n            ),\n            (\"shits\", &[\"craps\", \"poos\", \"poops\"]),\n            (\"shitted\", &[\"crapped\", \"pooed\", \"pooped\"]),\n            (\"shitting\", &[\"crapping\", \"pooing\", \"pooping\"]),\n            // shitcoin\n            // shitfaced\n            // shitfest\n            // shithead\n            (\"shitless\", &[\"witless\"]),\n            (\n                \"shitload\",\n                &[\"crapload\", \"shedload\", \"shirtload\", \"load\", \"tons\", \"pile\"],\n            ),\n            (\n                \"shitloads\",\n                &[\n                    \"craploads\",\n                    \"shedloads\",\n                    \"shirtloads\",\n                    \"loads\",\n                    \"tons\",\n                    \"piles\",\n                ],\n            ),\n            // shitpost\n            (\"shitty\", &[\"shirty\", \"crappy\", \"inferior\"]),\n            (\"shittier\", &[\"crappier\", \"shirtier\"]),\n            (\"shittiest\", &[\"crappiest\", \"shirtiest\"]),\n            (\"tit\", &[\"boob\", \"breast\"]),\n            (\"tits\", &[\"boobs\", \"breasts\"]),\n            (\"titty\", &[\"boob\", \"breast\"]),\n            (\"titties\", &[\"boobs\", \"breasts\"]),\n            (\"turd\", &[\"poo\", \"poop\", \"feces\", \"dung\"]),\n            (\"turds\", &[\"poos\", \"poops\", \"feces\", \"dung\"]),\n            (\"twat\", &[\"vagina\"]),\n            // wank\n            (\"wanker\", &[\"jerk\"]),\n            // wanky\n            (\"whore\", &[\"prostitute\"]),\n        ];\n\n        // Replace common morphemes with both specific censored versions and all-asterisk versions\n        let morpheme_replacements: Vec<String> = MORPHEMES\n            .iter()\n            .filter(|(m, _)| bad_word_norm.contains(m))\n            .flat_map(|(m, censored)| {\n                let mut replacements = Vec::new();\n\n                // Add all-asterisk version for the censored morpheme only\n                let asterisked = \"*\".repeat(m.len());\n                let asterisked_word = bad_word_norm.replace(m, &asterisked);\n                replacements.push(asterisked_word);\n\n                // Add specific censored version if it exists\n                if let Some(c) = censored {\n                    let censored_word = bad_word_norm.replace(m, c);\n                    replacements.push(censored_word);\n                }\n\n                replacements\n            })\n            .collect();\n\n        // Find all replacement suggestions for the bad word\n        let word_replacements: Vec<&str> = WORDS\n            .iter()\n            .filter(|(bad, _)| *bad == bad_word_norm)\n            .flat_map(|(_, suggestions)| suggestions.iter().copied())\n            .collect();\n\n        if morpheme_replacements.is_empty() && word_replacements.is_empty() {\n            return None;\n        }\n\n        let m_suggestions: Vec<Suggestion> = morpheme_replacements\n            .into_iter()\n            .map(|replacement| {\n                Suggestion::replace_with_match_case(replacement.chars().collect(), bad_word_chars)\n            })\n            .collect();\n\n        let w_suggestions: Vec<Suggestion> = word_replacements\n            .into_iter()\n            .map(|replacement| {\n                Suggestion::replace_with_match_case(replacement.chars().collect(), bad_word_chars)\n            })\n            .collect();\n\n        let suggestions = m_suggestions.into_iter().chain(w_suggestions).collect();\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions,\n            message: \"Try to avoid offensive language.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags offensive language and offers various ways to censor or replace with euphemisms.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::AvoidCurses;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn detects_shit() {\n        assert_lint_count(\n            \"He ate shit when he fell off the bike.\",\n            AvoidCurses::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn fix_shit() {\n        assert_suggestion_result(\"shit\", AvoidCurses::default(), \"crap\")\n    }\n\n    #[test]\n    fn fix_shit_titlecase() {\n        assert_suggestion_result(\"Shit\", AvoidCurses::default(), \"Crap\")\n    }\n\n    #[test]\n    fn fix_shit_allcaps() {\n        assert_suggestion_result(\"SHIT\", AvoidCurses::default(), \"CRAP\")\n    }\n\n    #[test]\n    fn fix_f_word_to_all_asterisks() {\n        assert_suggestion_result(\n            \"fuck those fucking fuckers\",\n            AvoidCurses::default(),\n            \"**** those ****ing ****ers\",\n        )\n    }\n\n    #[test]\n    fn fix_shit_with_single_asterisk() {\n        assert_suggestion_result(\"shit\", AvoidCurses::default(), \"sh*t\")\n    }\n\n    #[test]\n    fn fix_shite_all_caps_with_single_asterisk() {\n        assert_suggestion_result(\"SHIT\", AvoidCurses::default(), \"SH*T\")\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/back_in_the_day.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::FixedPhrase;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::{\n    Lrc, Token, TokenStringExt,\n    patterns::{Pattern, WordSet},\n};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct BackInTheDay {\n    expr: LongestMatchOf,\n    // The trailing words that should tell us to ignore the rule.\n    exceptions: Lrc<WordSet>,\n}\n\nimpl Default for BackInTheDay {\n    fn default() -> Self {\n        let exceptions = Lrc::new(WordSet::new(&[\"before\", \"of\", \"when\"]));\n        let phrase = Lrc::new(FixedPhrase::from_phrase(\"back in the days\"));\n\n        let pattern = SequenceExpr::with(phrase.clone())\n            .then_whitespace()\n            .then(exceptions.clone())\n            .or_longest(phrase);\n\n        Self {\n            expr: pattern,\n            exceptions,\n        }\n    }\n}\n\nimpl ExprLinter for BackInTheDay {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        if let Some(tail) = matched_tokens.get(8..)\n            && self.exceptions.matches(tail, source).is_some()\n        {\n            return None;\n        }\n\n        let span = matched_tokens.span()?;\n        let chars = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"back in the day\".chars().collect(),\n                chars,\n            )],\n            message: \"Use the more idiomatic version of this phrase.\".to_owned(),\n            priority: 127,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"This linter flags instances of the nonstandard phrase `back in the days`. The correct, more accepted form is `back in the day`\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::BackInTheDay;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn detects_gem_update_case() {\n        assert_suggestion_result(\n            \"... has been resolved through a gem update back in the days\",\n            BackInTheDay::default(),\n            \"... has been resolved through a gem update back in the day\",\n        );\n    }\n\n    #[test]\n    fn detects_install_case() {\n        assert_suggestion_result(\n            \"Back in the days we're used to install it directly from ...\",\n            BackInTheDay::default(),\n            \"Back in the day we're used to install it directly from ...\",\n        );\n    }\n\n    #[test]\n    fn detects_composer_json_case() {\n        assert_suggestion_result(\n            \"Back in the days there was only composer.json and ...\",\n            BackInTheDay::default(),\n            \"Back in the day there was only composer.json and ...\",\n        );\n    }\n\n    #[test]\n    fn detects_version_release_case() {\n        assert_suggestion_result(\n            \"... should have been released back in the days in a version 11\",\n            BackInTheDay::default(),\n            \"... should have been released back in the day in a version 11\",\n        );\n    }\n\n    #[test]\n    fn avoids_false_positive_springfox() {\n        assert_lint_count(\n            \"Back in the days of SpringFox, there were several requests to ...\",\n            BackInTheDay::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn avoids_false_positive_ie() {\n        assert_lint_count(\n            \"Back in the days of IE, Powershell used to ...\",\n            BackInTheDay::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn avoids_false_positive_code_usage() {\n        assert_lint_count(\n            \"Back in the days when I had 100% of my code in ...\",\n            BackInTheDay::default(),\n            0,\n        );\n    }\n    #[test]\n    fn catches_uppercase() {\n        assert_lint_count(\n            \"Back in the days, we went for a walk.\",\n            BackInTheDay::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn catches_lowercase() {\n        assert_lint_count(\n            \"We used to go for walks back in the days.\",\n            BackInTheDay::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_false_positive_of() {\n        assert_lint_count(\n            \"Back in the days of CRTs, computers were expensive.\",\n            BackInTheDay::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_false_positive_when() {\n        assert_lint_count(\n            \"Back in the days when videogame arcades were popular.\",\n            BackInTheDay::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn catches_comma_when() {\n        assert_lint_count(\n            \"Back in the days, when we were children, we played outside.\",\n            BackInTheDay::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_false_positive_before() {\n        assert_lint_count(\n            \"Back in the days before laptops we had \\\"luggables\\\".\",\n            BackInTheDay::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn catches_comma_before() {\n        assert_lint_count(\n            \"Back in the days, before laptops.\",\n            BackInTheDay::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_qualified_days() {\n        assert_lint_count(\n            \"Back in the old days we did this by hand.\",\n            BackInTheDay::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/be_allowed.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{Expr, ExprMap, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct BeAllowed {\n    expr: ExprMap<usize>,\n}\n\nimpl Default for BeAllowed {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        map.insert(\n            SequenceExpr::default()\n                .t_aco(\"will\")\n                .t_ws()\n                .then_word_set(&[\"not\"])\n                .t_ws()\n                .t_aco(\"allowed\")\n                .t_ws()\n                .t_aco(\"to\")\n                .t_ws()\n                .then_verb(),\n            4,\n        );\n\n        map.insert(\n            SequenceExpr::default()\n                .t_aco(\"won't\")\n                .t_ws()\n                .t_aco(\"allowed\")\n                .t_ws()\n                .t_aco(\"to\")\n                .t_ws()\n                .then_verb(),\n            2,\n        );\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for BeAllowed {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let allowed_index = *self.expr.lookup(0, matched_tokens, source)?;\n        let allowed_token = matched_tokens.get(allowed_index)?;\n        let span = allowed_token.span;\n        let template = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"be allowed\".chars().collect(),\n                template,\n            )],\n            message: \"Add `be` so this reads `be allowed`.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Ensures the passive form uses `be allowed` after future negatives.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::BeAllowed;\n\n    #[test]\n    fn corrects_basic_sentence() {\n        assert_suggestion_result(\n            \"You will not allowed to enter the lab.\",\n            BeAllowed::default(),\n            \"You will not be allowed to enter the lab.\",\n        );\n    }\n\n    #[test]\n    fn corrects_first_person_subject() {\n        assert_suggestion_result(\n            \"I will not allowed to go tonight.\",\n            BeAllowed::default(),\n            \"I will not be allowed to go tonight.\",\n        );\n    }\n\n    #[test]\n    fn corrects_plural_subject() {\n        assert_suggestion_result(\n            \"Students will not allowed to submit late work.\",\n            BeAllowed::default(),\n            \"Students will not be allowed to submit late work.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_intro_clause() {\n        assert_suggestion_result(\n            \"Because of policy, workers will not allowed to take photos.\",\n            BeAllowed::default(),\n            \"Because of policy, workers will not be allowed to take photos.\",\n        );\n    }\n\n    #[test]\n    fn corrects_contracted_form() {\n        assert_suggestion_result(\n            \"They won't allowed to park here during events.\",\n            BeAllowed::default(),\n            \"They won't be allowed to park here during events.\",\n        );\n    }\n\n    #[test]\n    fn corrects_all_caps() {\n        assert_suggestion_result(\n            \"THEY WILL NOT ALLOWED TO ENTER.\",\n            BeAllowed::default(),\n            \"THEY WILL NOT BE ALLOWED TO ENTER.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_trailing_clause() {\n        assert_suggestion_result(\n            \"Without a permit, guests will not allowed to stay overnight at the cabin.\",\n            BeAllowed::default(),\n            \"Without a permit, guests will not be allowed to stay overnight at the cabin.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_modal_context() {\n        assert_suggestion_result(\n            \"Even with approval, contractors will not allowed to access production.\",\n            BeAllowed::default(),\n            \"Even with approval, contractors will not be allowed to access production.\",\n        );\n    }\n\n    #[test]\n    fn leaves_correct_phrase_untouched() {\n        assert_suggestion_result(\n            \"They will not be allowed to park here during events.\",\n            BeAllowed::default(),\n            \"They will not be allowed to park here during events.\",\n        );\n    }\n\n    #[test]\n    fn leaves_other_verbs_alone() {\n        assert_lint_count(\n            \"We will not allow visitors after nine.\",\n            BeAllowed::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn leaves_similar_sequence_without_to() {\n        assert_lint_count(\n            \"They won't be allowed to park here during events.\",\n            BeAllowed::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/be_worried.rs",
    "content": "use crate::{\n    CharStringExt, Token,\n    expr::{All, Expr, OwnedExprExt, SequenceExpr},\n    linting::{\n        ExprLinter, Lint, LintKind, Suggestion,\n        expr_linter::{Chunk, followed_by_hyphen, followed_by_word},\n    },\n    patterns::{Word, WordSet},\n};\n\npub struct BeWorried {\n    expr: All,\n}\n\nimpl Default for BeWorried {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::default()\n                .then_any_of(vec![\n                    Box::new(\n                        SequenceExpr::default()\n                            .then_subject_pronoun()\n                            .t_ws()\n                            .t_set(&[\"am\", \"are\", \"is\", \"was\", \"were\"]),\n                    ),\n                    Box::new(WordSet::new(&[\n                        \"i'm\", \"we're\", \"you're\", \"he's\", \"she's\", \"they're\",\n                    ])),\n                ])\n                .t_ws()\n                .t_aco(\"worry\")\n                .and_not(Word::new(\"it\")),\n        }\n    }\n}\n\nimpl ExprLinter for BeWorried {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        let wtok = toks.last()?;\n\n        if followed_by_hyphen(ctx)\n            || followed_by_word(ctx, |w| {\n                w.span\n                    .get_content(src)\n                    .eq_any_ignore_ascii_case_str(&[\"free\", \"warts\"])\n            })\n        {\n            return None;\n        }\n\n        Some(Lint {\n            span: wtok.span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"worried\",\n                wtok.span.get_content(src),\n            )],\n            message: \"Use 'worried' instead of 'worry'.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects incorrect use of 'be worry' instead of `be worried`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{\n        assert_good_and_bad_suggestions, assert_no_lints, assert_suggestion_result,\n    };\n\n    use super::BeWorried;\n\n    #[test]\n    fn he_is() {\n        assert_suggestion_result(\n            \"I guess he is worry about \\\" * user * \\\" tag.\",\n            BeWorried::default(),\n            \"I guess he is worried about \\\" * user * \\\" tag.\",\n        );\n    }\n\n    #[test]\n    fn he_was() {\n        assert_suggestion_result(\n            \"So he was worry about her. Especially, when he got no response by calling her on her phone nor ranging her doorbell.\",\n            BeWorried::default(),\n            \"So he was worried about her. Especially, when he got no response by calling her on her phone nor ranging her doorbell.\",\n        );\n    }\n\n    #[test]\n    fn i_am() {\n        assert_suggestion_result(\n            \"I didn't see any section dedicated to this so I am worry about:\",\n            BeWorried::default(),\n            \"I didn't see any section dedicated to this so I am worried about:\",\n        );\n    }\n\n    #[test]\n    fn i_was() {\n        assert_suggestion_result(\n            \"So that's why I was worry.\",\n            BeWorried::default(),\n            \"So that's why I was worried.\",\n        );\n    }\n\n    #[test]\n    fn i_were() {\n        assert_suggestion_result(\n            \"The only things that I were worry about is the data that could be lost using this deletion.\",\n            BeWorried::default(),\n            \"The only things that I were worried about is the data that could be lost using this deletion.\",\n        );\n    }\n\n    #[test]\n    fn they_are() {\n        assert_suggestion_result(\n            \"at the same time they are worry about the price for the upgrade each 3 years\",\n            BeWorried::default(),\n            \"at the same time they are worried about the price for the upgrade each 3 years\",\n        );\n    }\n\n    #[test]\n    fn theyre_worry() {\n        assert_suggestion_result(\n            \"Because they're worry this link is spam or they scare have to pay more money.\",\n            BeWorried::default(),\n            \"Because they're worried this link is spam or they scare have to pay more money.\",\n        );\n    }\n\n    #[test]\n    fn we_are() {\n        assert_suggestion_result(\n            \"We are analised this and we are worry because when our platform go to market\",\n            BeWorried::default(),\n            \"We are analised this and we are worried because when our platform go to market\",\n        );\n    }\n\n    #[test]\n    fn were() {\n        assert_suggestion_result(\n            \"We're worry about all kinds of minority representation in TV.\",\n            BeWorried::default(),\n            \"We're worried about all kinds of minority representation in TV.\",\n        );\n    }\n\n    #[test]\n    fn you_are() {\n        assert_suggestion_result(\n            \"You are worry because we are not annotating view interface itself, right?\",\n            BeWorried::default(),\n            \"You are worried because we are not annotating view interface itself, right?\",\n        );\n    }\n\n    #[test]\n    fn youre() {\n        assert_suggestion_result(\n            \"You're worry about memory usage and wanna be sure that a Sequence-class won't hold your activity against GC — declare this class as static\",\n            BeWorried::default(),\n            \"You're worried about memory usage and wanna be sure that a Sequence-class won't hold your activity against GC — declare this class as static\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_it_is() {\n        assert_no_lints(\n            \"Part of it is worry that my bosses will get angry and fire me.\",\n            BeWorried::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_it_was() {\n        assert_no_lints(\n            \"Because what followed wasn't indifference, it was worry.\",\n            BeWorried::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_she_was_worry_free() {\n        assert_no_lints(\"textFinally, she was worry-free.\", BeWorried::default());\n    }\n\n    #[test]\n    fn dont_flag_theyre_worry_free() {\n        assert_no_lints(\n            \"They don't pretend they're worry-free.\",\n            BeWorried::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_worry_warts() {\n        assert_no_lints(\n            \"Thanks to jQuery, we're worry warts from browser compatibility.\",\n            BeWorried::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_were_worry_space_free() {\n        assert_no_lints(\n            \"Thanks to jQuery, we're worry free from browser compatibility.\",\n            BeWorried::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"edge case not yet handled\"]\n    fn cant_fix_edge_case_yet() {\n        assert_good_and_bad_suggestions(\n            \"Myself along with others are using it on an iPad successfully, so it is worry to hear that is broken for you.\",\n            BeWorried::default(),\n            &[\n                \"Myself along with others are using it on an iPad successfully, so it is worrying to hear that is broken for you.\",\n                \"Myself along with others are using it on an iPad successfully, so it is a worry to hear that is broken for you.\",\n            ],\n            &[],\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/behind_the_scenes.rs",
    "content": "use crate::{\n    Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct BehindTheScenes {\n    expr: SequenceExpr,\n}\n\nimpl Default for BehindTheScenes {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"behind\")\n                .t_ws_h()\n                .t_aco(\"the\")\n                .t_ws_h()\n                .t_aco(\"scene\"),\n        }\n    }\n}\n\nimpl ExprLinter for BehindTheScenes {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects `behind the scene` to `behind the scenes`.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        if let Some((before, _)) = ctx\n            && before.last().is_some_and(|t| t.kind.is_hyphen())\n        {\n            return None;\n        }\n\n        let span = toks.last()?.span;\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Usage,\n            suggestions: [Suggestion::replace_with_match_case_str(\n                \"scenes\",\n                span.get_content(src),\n            )]\n            .to_vec(),\n            message: \"This idiom uses the plural `scenes`.\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::{\n        behind_the_scenes::BehindTheScenes,\n        tests::{assert_no_lints, assert_suggestion_result},\n    };\n\n    #[test]\n    fn pluralize_work_bts() {\n        assert_suggestion_result(\n            \"How does this tool work behind the scene.\",\n            BehindTheScenes::default(),\n            \"How does this tool work behind the scenes.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Correcting hyphenation is not yet implemented.\"]\n    fn pluralize_and_hyphenate() {\n        assert_suggestion_result(\n            \"So, to open the 'real' behind the scene menu i need to do these steps:\",\n            BehindTheScenes::default(),\n            \"So, to open the 'real' behind-the-scenes menu i need to do these steps:\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_when_hyphenated_to_previous_word() {\n        assert_no_lints(\n            \"Contribute to techking11/react-behind-the-scene development by creating an account on GitHub.\",\n            BehindTheScenes::default(),\n        );\n    }\n\n    #[test]\n    fn pluralize_bts_processing() {\n        assert_suggestion_result(\n            \"Behind-the-scene processing details are printed in the Log window.\",\n            BehindTheScenes::default(),\n            \"Behind-the-scenes processing details are printed in the Log window.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/best_of_all_time.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion, expr_linter::Sentence};\n\npub struct BestOfAllTime {\n    expr: SequenceExpr,\n}\n\nimpl Default for BestOfAllTime {\n    fn default() -> Self {\n        // Best, Biggest\n        let inflection_superlative = SequenceExpr::default().then_superlative_adjective();\n        // Most interesting\n        let most_superlative = SequenceExpr::default()\n            .t_aco(\"most\")\n            .t_ws()\n            .then_positive_adjective();\n        // Some resources call 'favourite' an 'absolute adjective', some consider it a superlative.\n        let fave_or_top = SequenceExpr::word_set(&[\"favorite\", \"favourite\", \"top\"]);\n\n        // We can't use the noun phrase Expr because it allows determiners before the nouns and \"best the thing\" wouldn't be right\n        let expr = SequenceExpr::any_of(vec![\n            Box::new(inflection_superlative),\n            Box::new(most_superlative),\n            Box::new(fave_or_top),\n        ])\n        // There is no non-greedy `Repeating` in Harper, so we have to do match non-noun-oov tokens\n        // rather than matching arbitrary tokens.\n        // We include OOV because novel words not in the dictionary tend to be nouns.\n        .then_zero_or_more(|tok: &Token, _: &[char]| !tok.kind.is_noun() && !tok.kind.is_oov())\n        .then_kind_where(|kind| kind.is_noun() || kind.is_oov())\n        .then_zero_or_more(\n            SequenceExpr::default()\n                .t_ws()\n                .then_kind_where(|kind| kind.is_noun() || kind.is_oov()),\n        )\n        .then_fixed_phrase(\" of all times\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for BestOfAllTime {\n    type Unit = Sentence;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let times_span = toks.last()?.span;\n\n        if let Some((_, time_singular)) = times_span.get_content(src).split_last() {\n            return Some(Lint {\n                span: times_span,\n                lint_kind: LintKind::WordChoice,\n                suggestions: vec![Suggestion::ReplaceWith(time_singular.to_vec())],\n                message: \"This expression uses singular `time`\".to_string(),\n                ..Default::default()\n            });\n        }\n\n        None\n    }\n\n    fn description(&self) -> &'static str {\n        \"Checks for nonstandard `of all times` in superlatives instead of singular `time`\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::BestOfAllTime;\n\n    #[test]\n    fn dont_flag_list_of_all_times() {\n        assert_lint_count(\n            \"Provides a formatted list of all times that SDO was non-nominal\",\n            BestOfAllTime::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_after_best() {\n        assert_suggestion_result(\n            \"And also in the best IDE of all times Visual Studio\",\n            BestOfAllTime::default(),\n            \"And also in the best IDE of all time Visual Studio\",\n        );\n    }\n\n    #[test]\n    fn fix_after_greatest() {\n        assert_suggestion_result(\n            \"This app shows you why Sachin Tendulkar is the greatest cricket of all times, by using interactive stories.\",\n            BestOfAllTime::default(),\n            \"This app shows you why Sachin Tendulkar is the greatest cricket of all time, by using interactive stories.\",\n        );\n    }\n\n    #[test]\n    fn fix_after_biggest() {\n        assert_suggestion_result(\n            \"THIS IS THE BIGGEST QUESTIONS OF ALL TIMES...\",\n            BestOfAllTime::default(),\n            \"THIS IS THE BIGGEST QUESTIONS OF ALL TIME...\",\n        );\n    }\n\n    #[test]\n    fn fix_after_most_influential() {\n        assert_suggestion_result(\n            \"It is an open source project that aggregates multiple lists of \\\"the best/most influential games of all times\\\"\",\n            BestOfAllTime::default(),\n            \"It is an open source project that aggregates multiple lists of \\\"the best/most influential games of all time\\\"\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_sum_of_all_times() {\n        assert_lint_count(\n            \"The original TotalTime seems not be the sum of all times\",\n            BestOfAllTime::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_history_stacks_of_all_times() {\n        assert_lint_count(\n            \"Didn't this imply all history stacks of all times, which itself implied all those saved.\",\n            BestOfAllTime::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_after_favorite() {\n        assert_suggestion_result(\n            \"Red Dead Redemption 2 is my nr 1 favorite game of all times\",\n            BestOfAllTime::default(),\n            \"Red Dead Redemption 2 is my nr 1 favorite game of all time\",\n        );\n    }\n\n    #[test]\n    fn fix_after_favourite() {\n        assert_suggestion_result(\n            \"Just made this website to show you my favourite movies of all times.\",\n            BestOfAllTime::default(),\n            \"Just made this website to show you my favourite movies of all time.\",\n        );\n    }\n\n    #[test]\n    fn fix_top_out_of_vocabulary() {\n        assert_suggestion_result(\n            \"Can I Play the Top 10 Basslines of All Times?\",\n            BestOfAllTime::default(),\n            \"Can I Play the Top 10 Basslines of All Time?\",\n        );\n    }\n\n    #[test]\n    fn fix_compound_noun() {\n        assert_suggestion_result(\n            \"Is he the best bass guitarist of all times?\",\n            BestOfAllTime::default(),\n            \"Is he the best bass guitarist of all time?\",\n        );\n    }\n\n    #[test]\n    fn fix_containing_commas() {\n        assert_suggestion_result(\n            \"I am the biggest, best, and most humble of all times\",\n            BestOfAllTime::default(),\n            \"I am the biggest, best, and most humble of all time\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/boring_words.rs",
    "content": "use itertools::Itertools;\n\nuse crate::expr::{Expr, FirstMatchOf, WordExprGroup};\nuse crate::thesaurus_helper;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind};\nuse crate::linting::expr_linter::Chunk;\n\npub struct BoringWords {\n    expr: WordExprGroup<FirstMatchOf>,\n}\n\nimpl Default for BoringWords {\n    fn default() -> Self {\n        let mut expr = WordExprGroup::default();\n\n        expr.add_word(\"very\");\n        expr.add_word(\"interesting\");\n        expr.add_word(\"several\");\n        expr.add_word(\"most\");\n        expr.add_word(\"many\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for BoringWords {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let matched_word = matched_tokens.span()?.get_content_string(source);\n\n        Some(Lint {\n            span: matched_tokens.span()?,\n            lint_kind: LintKind::Enhancement,\n            suggestions: thesaurus_helper::get_synonym_replacement_suggestions(\n                &matched_word,\n                &matched_tokens[0].kind,\n            )\n            .take(5)\n            .collect_vec(),\n            message: format!(\n                \"“{matched_word}” is a boring word. Try something a little more exotic.\"\n            ),\n            priority: 127,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"This rule looks for particularly boring or overused words. Using varied language is an easy way to keep a reader's attention.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/bought.rs",
    "content": "use super::{ExprLinter, Lint, LintKind};\nuse crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::Suggestion;\nuse crate::linting::expr_linter::Chunk;\n\npub struct Bought {\n    expr: SequenceExpr,\n}\n\nimpl Default for Bought {\n    fn default() -> Self {\n        let subject = SequenceExpr::with(Self::is_subject_pronoun_like)\n            .t_ws()\n            .then_optional(SequenceExpr::default().then_adverb().t_ws())\n            .then_optional(SequenceExpr::default().then_auxiliary_verb().t_ws())\n            .then_optional(SequenceExpr::default().then_adverb().t_ws())\n            .then_any_capitalization_of(\"bough\");\n\n        Self { expr: subject }\n    }\n}\n\nimpl ExprLinter for Bought {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let typo = matched_tokens.last()?;\n\n        Some(Lint {\n            span: typo.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"bought\".chars().collect(),\n                typo.span.get_content(source),\n            )],\n            message: \"Prefer the past-tense form `bought` here.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Replaces the incorrect past-tense spelling `bough` with `bought` after subject pronouns.\"\n    }\n}\n\nimpl Bought {\n    fn is_subject_pronoun_like(token: &Token, source: &[char]) -> bool {\n        if token.kind.is_subject_pronoun() {\n            return true;\n        }\n\n        if !token.kind.is_word() || !token.kind.is_apostrophized() {\n            return false;\n        }\n\n        let text = token.span.get_content_string(source);\n        let lower = text.to_ascii_lowercase();\n\n        let Some((stem, suffix)) = lower.split_once('\\'') else {\n            return false;\n        };\n\n        let is_subject_stem = matches!(stem, \"i\" | \"you\" | \"we\" | \"they\" | \"he\" | \"she\" | \"it\");\n        let is_supported_suffix = matches!(suffix, \"d\" | \"ve\");\n\n        is_subject_stem && is_supported_suffix\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Bought;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn corrects_he_bough() {\n        assert_suggestion_result(\n            \"He bough a laptop yesterday.\",\n            Bought::default(),\n            \"He bought a laptop yesterday.\",\n        );\n    }\n\n    #[test]\n    fn corrects_she_never_bough() {\n        assert_suggestion_result(\n            \"She never bough fresh herbs there.\",\n            Bought::default(),\n            \"She never bought fresh herbs there.\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_already_bough() {\n        assert_suggestion_result(\n            \"They already bough the train tickets.\",\n            Bought::default(),\n            \"They already bought the train tickets.\",\n        );\n    }\n\n    #[test]\n    fn corrects_we_have_bough() {\n        assert_suggestion_result(\n            \"We have bough extra paint.\",\n            Bought::default(),\n            \"We have bought extra paint.\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_have_never_bough() {\n        assert_suggestion_result(\n            \"They have never bough theatre seats online.\",\n            Bought::default(),\n            \"They have never bought theatre seats online.\",\n        );\n    }\n\n    #[test]\n    fn corrects_ive_bough() {\n        assert_suggestion_result(\n            \"I've bough the ingredients already.\",\n            Bought::default(),\n            \"I've bought the ingredients already.\",\n        );\n    }\n\n    #[test]\n    fn corrects_wed_bough() {\n        assert_suggestion_result(\n            \"We'd bough snacks before the film.\",\n            Bought::default(),\n            \"We'd bought snacks before the film.\",\n        );\n    }\n\n    #[test]\n    fn no_lint_for_tree_bough() {\n        assert_no_lints(\"The heavy bough cracked under the snow.\", Bought::default());\n    }\n\n    #[test]\n    fn no_lint_for_he_bought() {\n        assert_no_lints(\"He bought a laptop yesterday.\", Bought::default());\n    }\n\n    #[test]\n    fn no_lint_for_plural_boughs() {\n        assert_no_lints(\"Boughs swayed in the evening breeze.\", Bought::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/brand_brandish.rs",
    "content": "use crate::{\n    Lint, Token, TokenKind,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct BrandBrandish {\n    expr: SequenceExpr,\n}\n\nimpl Default for BrandBrandish {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"brandish\", \"brandished\", \"brandishes\", \"brandishing\"])\n                .t_ws()\n                // \"her\" is also a possessive determiner as in \"she brandished her sword\"\n                // \"it\" and \"them\" can refer to objects as in \"draw your sword(s) and brandish it/them\"\n                .then_kind_except(TokenKind::is_object_pronoun, &[\"her\", \"it\", \"them\"]),\n        }\n    }\n}\n\nimpl ExprLinter for BrandBrandish {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let verb_span = toks.first()?.span;\n        let verb_chars = verb_span.get_content(src);\n\n        enum Form {\n            Base,\n            Past,\n            ThirdPerson,\n            Ing,\n        }\n\n        let infl = match verb_chars.last().map(|c| c.to_ascii_lowercase()) {\n            Some('h') => Form::Base,\n            Some('d') => Form::Past,\n            Some('s') => Form::ThirdPerson,\n            Some('g') => Form::Ing,\n            _ => return None,\n        };\n\n        Some(Lint {\n            span: verb_span,\n            lint_kind: LintKind::Malapropism,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                match infl {\n                    Form::Base => \"brand\",\n                    Form::Past => \"branded\",\n                    Form::ThirdPerson => \"brands\",\n                    Form::Ing => \"branding\",\n                },\n                verb_chars,\n            )],\n            message: \"`Brandish` means to wield a weapon. You probably mean `brand`.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Looks for `brandish` wrongly used when `brand` is intended.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::{brand_brandish::BrandBrandish, tests::assert_suggestion_result};\n\n    #[test]\n    fn correct_brandish_a_traitor() {\n        assert_suggestion_result(\n            \"Unretire Gretzky's sweater . Brandish him a traitor.\",\n            BrandBrandish::default(),\n            \"Unretire Gretzky's sweater . Brand him a traitor.\",\n        );\n    }\n\n    #[test]\n    fn correct_brandish_a_criminal() {\n        assert_suggestion_result(\n            \"lied to stop kuma's ideology from taking root and to brandish him a criminal that they could arrest\",\n            BrandBrandish::default(),\n            \"lied to stop kuma's ideology from taking root and to brand him a criminal that they could arrest\",\n        );\n    }\n\n    #[test]\n    fn correct_brandish_as_a() {\n        assert_suggestion_result(\n            \"he was so afraid his thoughts could brandish him as a paedophile\",\n            BrandBrandish::default(),\n            \"he was so afraid his thoughts could brand him as a paedophile\",\n        );\n    }\n\n    #[test]\n    fn correct_brandish_an_offender() {\n        assert_suggestion_result(\n            \"Chanel Oberlin's reason for purposely leading on Pete Martinez in order to humiliate him and brandish him a registered sex offender\",\n            BrandBrandish::default(),\n            \"Chanel Oberlin's reason for purposely leading on Pete Martinez in order to humiliate him and brand him a registered sex offender\",\n        );\n    }\n\n    #[test]\n    fn correct_brandish_with_nicknames() {\n        assert_suggestion_result(\n            \"?? spoke out over the move by Kenyans to continuously brandish him with nicknames even after ...\",\n            BrandBrandish::default(),\n            \"?? spoke out over the move by Kenyans to continuously brand him with nicknames even after ...\",\n        );\n    }\n\n    #[test]\n    fn correct_brandish_as_a_aymbol() {\n        assert_suggestion_result(\n            \"brandish him as an acclaimed symbol of humility, integrity and incorruptibility in the face of today's corrupt economic and political elite1\",\n            BrandBrandish::default(),\n            \"brand him as an acclaimed symbol of humility, integrity and incorruptibility in the face of today's corrupt economic and political elite1\",\n        );\n    }\n\n    #[test]\n    fn correct_brandish_as_illegal() {\n        assert_suggestion_result(\n            \"To attempt to brandish him as an “illegal immigrant” is absolutely ridiculous and warrants an immediate retraction and apology.\",\n            BrandBrandish::default(),\n            \"To attempt to brand him as an “illegal immigrant” is absolutely ridiculous and warrants an immediate retraction and apology.\",\n        );\n    }\n\n    #[test]\n    fn correct_brandish_with_nickname() {\n        assert_suggestion_result(\n            \"The small minded townsfolk brandish him with the nickname \\\"Genepool\\\" due to his physical and cognitive shortcomings.\",\n            BrandBrandish::default(),\n            \"The small minded townsfolk brand him with the nickname \\\"Genepool\\\" due to his physical and cognitive shortcomings.\",\n        );\n    }\n\n    #[test]\n    fn correct_brandish_with_label() {\n        assert_suggestion_result(\n            \"One such reason that critics brandish him with this label is due to Peterson's opposition to Canada's Bill C-16\",\n            BrandBrandish::default(),\n            \"One such reason that critics brand him with this label is due to Peterson's opposition to Canada's Bill C-16\",\n        );\n    }\n\n    #[test]\n    fn correct_brandished_us() {\n        assert_suggestion_result(\n            \"The mark they brandished us with will fade to dust when we finally meet our end.\",\n            BrandBrandish::default(),\n            \"The mark they branded us with will fade to dust when we finally meet our end.\",\n        )\n    }\n\n    #[test]\n    fn correct_brandishing_him() {\n        assert_suggestion_result(\n            \"he said some words trying to hit back at the center for brandishing him as a Pakistani at an NRC rally\",\n            BrandBrandish::default(),\n            \"he said some words trying to hit back at the center for branding him as a Pakistani at an NRC rally\",\n        )\n    }\n\n    #[test]\n    fn correct_brandish_us() {\n        assert_suggestion_result(\n            \"Our resolute determination for the ultimate quality and all-inclusive directory of food commodities brandish us as a flawless associate in B2B\",\n            BrandBrandish::default(),\n            \"Our resolute determination for the ultimate quality and all-inclusive directory of food commodities brand us as a flawless associate in B2B\",\n        )\n    }\n\n    #[test]\n    fn correct_brandished_him() {\n        assert_suggestion_result(\n            \"Frank discovers Myra brandished him with the letter 'R', for rapist.\",\n            BrandBrandish::default(),\n            \"Frank discovers Myra branded him with the letter 'R', for rapist.\",\n        )\n    }\n\n    #[test]\n    fn correct_brandishes_him() {\n        assert_suggestion_result(\n            \"Whether one turns a blind eye to Tim's wrongs or brandishes him a traitor will plant audiences in their own personal line in the sand.\",\n            BrandBrandish::default(),\n            \"Whether one turns a blind eye to Tim's wrongs or brands him a traitor will plant audiences in their own personal line in the sand.\",\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/by_accident.rs",
    "content": "/*\nlet message \"Did you mean `by accident`?\"\nlet description \"Incorrect preposition: `by accident` is the idiomatic expression.\"\n */\n\nuse crate::{\n    Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct ByAccident {\n    expr: SequenceExpr,\n}\n\nimpl Default for ByAccident {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"on\")\n                .t_ws()\n                .then_optional(\n                    SequenceExpr::word_set(&[\n                        \"complete\", \"happy\", \"literal\", \"mere\", \"pure\", \"sheer\", \"total\",\n                    ])\n                    .t_ws(),\n                )\n                .t_aco(\"accident\"),\n        }\n    }\n}\n\nimpl ExprLinter for ByAccident {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Incorrect preposition: `by accident` is the idiomatic expression.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let span = toks.first()?.span;\n        let suggestions = vec![Suggestion::replace_with_match_case_str(\n            \"by\",\n            span.get_content(src),\n        )];\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Usage,\n            suggestions,\n            message: \"Did you mean `by accident`?\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ByAccident;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn fix_on_accident() {\n        assert_suggestion_result(\n            \"Snapshot revert feature is unintuitive and easy to use on accident.\",\n            ByAccident::default(),\n            \"Snapshot revert feature is unintuitive and easy to use by accident.\",\n        );\n    }\n\n    #[test]\n    fn fix_on_complete_accident() {\n        assert_suggestion_result(\n            \"I Came across this comment on complete accident, however, I did notice the same thing with a slowdown in chrome for android\",\n            ByAccident::default(),\n            \"I Came across this comment by complete accident, however, I did notice the same thing with a slowdown in chrome for android\",\n        );\n    }\n\n    #[test]\n    fn fix_on_happy_accident() {\n        assert_suggestion_result(\n            \"Just did this on happy accident the other day with my partner.\",\n            ByAccident::default(),\n            \"Just did this by happy accident the other day with my partner.\",\n        );\n    }\n\n    #[test]\n    fn fix_on_literal_accident() {\n        assert_suggestion_result(\n            \"I did this on literal accident, trying to prove someone wrong that its not that easy.\",\n            ByAccident::default(),\n            \"I did this by literal accident, trying to prove someone wrong that its not that easy.\",\n        );\n    }\n\n    #[test]\n    fn fix_on_mere_accident() {\n        assert_suggestion_result(\n            \"I hated this challenge and nope I don't I completed it on mere accident.\",\n            ByAccident::default(),\n            \"I hated this challenge and nope I don't I completed it by mere accident.\",\n        );\n    }\n\n    #[test]\n    fn fix_on_pure_accident() {\n        assert_suggestion_result(\n            \"I got this on pure accident after forgetting to enable WebGL on LibreWolf\",\n            ByAccident::default(),\n            \"I got this by pure accident after forgetting to enable WebGL on LibreWolf\",\n        );\n    }\n\n    #[test]\n    fn fix_on_sheer_accident() {\n        assert_suggestion_result(\n            \"I more of think of things that got discovered on sheer accident, something no normal human would just do and expect results.\",\n            ByAccident::default(),\n            \"I more of think of things that got discovered by sheer accident, something no normal human would just do and expect results.\",\n        );\n    }\n\n    #[test]\n    fn fix_on_total_accident() {\n        assert_suggestion_result(\n            \"On Total Accident, I Found Out Yona's True Title.\",\n            ByAccident::default(),\n            \"By Total Accident, I Found Out Yona's True Title.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/call_them.rs",
    "content": "use std::{ops::Range, sync::Arc};\n\nuse crate::expr::{Expr, ExprMap, SequenceExpr};\nuse crate::patterns::DerivedFrom;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct CallThem {\n    expr: ExprMap<Range<usize>>,\n}\n\nimpl Default for CallThem {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        let post_exception = Arc::new(SequenceExpr::default().t_ws().then_word_set(&[\"if\", \"it\"]));\n\n        map.insert(\n            SequenceExpr::with(DerivedFrom::new_from_str(\"call\"))\n                .t_ws()\n                .then_pronoun()\n                .t_ws()\n                .t_aco(\"as\")\n                .then_unless(post_exception.clone()),\n            3..5,\n        );\n\n        map.insert(\n            SequenceExpr::with(DerivedFrom::new_from_str(\"call\"))\n                .t_ws()\n                .t_aco(\"as\")\n                .t_ws()\n                .then_pronoun()\n                .then_unless(post_exception.clone()),\n            1..3,\n        );\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for CallThem {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let removal_range = self.expr.lookup(0, matched_tokens, source)?.clone();\n        let offending_tokens = matched_tokens.get(removal_range)?;\n\n        Some(Lint {\n            span: offending_tokens.span()?,\n            lint_kind: LintKind::Redundancy,\n            suggestions: vec![Suggestion::Remove],\n            message: \"`as` is redundant in this context.\".to_owned(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Addresses the non-idiomatic phrases `call them as`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    #[allow(unused_imports)]\n    use crate::Document;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::CallThem;\n\n    #[test]\n    fn prefer_plug_and_receptacle() {\n        assert_suggestion_result(\n            r#\"I prefer to call them as Plug (male) and Receptacle (female). Receptacles are seen in laptops, mobile phones etc..\"#,\n            CallThem::default(),\n            r#\"I prefer to call them Plug (male) and Receptacle (female). Receptacles are seen in laptops, mobile phones etc..\"#,\n        );\n    }\n\n    #[test]\n    fn builtins_id() {\n        assert_suggestion_result(\n            r#\"I’d categorically ignore *id* as a builtin, and when you do need it in a module, make it super explicit and `import builtins` and call it as `builtins.id`.\"#,\n            CallThem::default(),\n            r#\"I’d categorically ignore *id* as a builtin, and when you do need it in a module, make it super explicit and `import builtins` and call it `builtins.id`.\"#,\n        );\n    }\n\n    #[test]\n    fn non_modal_dialogue() {\n        assert_suggestion_result(\n            r#\"We usually call it as non-modal dialogue e.g. when hit Gmail compose button, a nonmodal dialogue opens.\"#,\n            CallThem::default(),\n            r#\"We usually call it non-modal dialogue e.g. when hit Gmail compose button, a nonmodal dialogue opens.\"#,\n        );\n    }\n\n    #[test]\n    fn prefer_to_call_them() {\n        assert_suggestion_result(\n            r#\"So, how do you typically prefer to call them as?\"#,\n            CallThem::default(),\n            r#\"So, how do you typically prefer to call them?\"#,\n        );\n    }\n\n    #[test]\n    fn called_them_allies() {\n        assert_suggestion_result(\n            r#\"Yes as tribes or nomads you called them as allies but you didn’t get their levies as your own.\"#,\n            CallThem::default(),\n            r#\"Yes as tribes or nomads you called them allies but you didn’t get their levies as your own.\"#,\n        );\n    }\n\n    #[test]\n    fn character_development() {\n        assert_suggestion_result(\n            r#\"I call this as character development.\"#,\n            CallThem::default(),\n            r#\"I call this character development.\"#,\n        );\n    }\n\n    #[test]\n    fn fate_or_time() {\n        assert_suggestion_result(\n            r#\"Should I Call It As Fate Or Time\"#,\n            CallThem::default(),\n            r#\"Should I Call It Fate Or Time\"#,\n        );\n    }\n\n    #[test]\n    fn abstract_latte_art() {\n        assert_suggestion_result(\n            r#\"Can we just call it as abstract latte art.\"#,\n            CallThem::default(),\n            r#\"Can we just call it abstract latte art.\"#,\n        );\n    }\n\n    #[test]\n    fn sounding_boards() {\n        assert_suggestion_result(\n            r#\"I call them as my ‘sounding boards’\"#,\n            CallThem::default(),\n            r#\"I call them my ‘sounding boards’\"#,\n        );\n    }\n\n    #[test]\n    fn calling_them_disaster() {\n        assert_suggestion_result(\n            r#\"I totally disagree with your point listed and calling them as disaster.\"#,\n            CallThem::default(),\n            r#\"I totally disagree with your point listed and calling them disaster.\"#,\n        );\n    }\n\n    #[test]\n    fn battle_of_boxes() {\n        assert_suggestion_result(\n            r#\"Windows Sandbox and VirtualBox or I would like to call this as “Battle of Boxes.”\"#,\n            CallThem::default(),\n            r#\"Windows Sandbox and VirtualBox or I would like to call this “Battle of Boxes.”\"#,\n        );\n    }\n\n    #[test]\n    fn called_her_shinnasan() {\n        assert_suggestion_result(\n            r#\"Nice meeting a follower from reddit I called her as Shinna-san, welcome again to Toram!!\"#,\n            CallThem::default(),\n            r#\"Nice meeting a follower from reddit I called her Shinna-san, welcome again to Toram!!\"#,\n        );\n    }\n\n    #[test]\n    fn calling_it_otp() {\n        assert_suggestion_result(\n            r#\"Calling it as OTP in this case misleading\"#,\n            CallThem::default(),\n            r#\"Calling it OTP in this case misleading\"#,\n        );\n    }\n\n    #[test]\n    fn call_it_procrastination() {\n        assert_suggestion_result(\n            r#\"To summarise it in just one word I would call it as procrastination.\"#,\n            CallThem::default(),\n            r#\"To summarise it in just one word I would call it procrastination.\"#,\n        );\n    }\n\n    #[test]\n    fn call_her_important() {\n        assert_suggestion_result(\n            r#\"Liked the article overall but to call her as important to rap as Jay or Dre is a bold overstatement.\"#,\n            CallThem::default(),\n            r#\"Liked the article overall but to call her important to rap as Jay or Dre is a bold overstatement.\"#,\n        );\n    }\n\n    #[test]\n    fn call_him_kindles() {\n        assert_suggestion_result(\n            r#\"The days when I had my first best friend, I would rather call him as human version of kindle audiobook, who keeps on talking about everything under the umbrella.\"#,\n            CallThem::default(),\n            r#\"The days when I had my first best friend, I would rather call him human version of kindle audiobook, who keeps on talking about everything under the umbrella.\"#,\n        );\n    }\n\n    #[test]\n    fn call_them_defenders() {\n        assert_suggestion_result(\n            r#\"Declaring war challenging land of a vassal should call them as defenders!\"#,\n            CallThem::default(),\n            r#\"Declaring war challenging land of a vassal should call them defenders!\"#,\n        );\n    }\n\n    #[test]\n    fn call_it_magical() {\n        assert_suggestion_result(\n            r#\"I would like to call it as magical.\"#,\n            CallThem::default(),\n            r#\"I would like to call it magical.\"#,\n        );\n    }\n\n    #[test]\n    fn forward_lateral() {\n        assert_suggestion_result(\n            r#\"Surprised the refs didn’t call this as a forward lateral.\"#,\n            CallThem::default(),\n            r#\"Surprised the refs didn’t call this a forward lateral.\"#,\n        );\n    }\n\n    #[test]\n    fn calling_best_friend() {\n        assert_suggestion_result(\n            r#\"Meet my buddy! I love calling him as my best friend, because he never failed to bring some cheer in me!\"#,\n            CallThem::default(),\n            r#\"Meet my buddy! I love calling him my best friend, because he never failed to bring some cheer in me!\"#,\n        );\n    }\n\n    #[test]\n    fn calling_everyone_titles() {\n        assert_suggestion_result(\n            r#\"Currently, I’m teaching in Asia and the students have the local custom of calling everyone as Mr. Givenname or Miss Givenname\"#,\n            CallThem::default(),\n            r#\"Currently, I’m teaching in Asia and the students have the local custom of calling everyone Mr. Givenname or Miss Givenname\"#,\n        );\n    }\n\n    #[test]\n    fn called_as_he() {\n        assert_suggestion_result(\n            r#\"I prefer to be called as he when referred in 3rd person and I’m sure that everyone would be ok to call me as he.\"#,\n            CallThem::default(),\n            r#\"I prefer to be called he when referred in 3rd person and I’m sure that everyone would be ok to call me he.\"#,\n        );\n    }\n\n    #[test]\n    fn calls_him_bob() {\n        assert_suggestion_result(\n            r#\"In Twelve Monkeys, Cole hears someone who calls him as “Bob”\"#,\n            CallThem::default(),\n            r#\"In Twelve Monkeys, Cole hears someone who calls him “Bob”\"#,\n        );\n    }\n\n    #[test]\n    fn pliny_called_it() {\n        assert_suggestion_result(\n            r#\"Pliny the Elder called it as lake of Gennesaret or Taricheae in his encyclopedia, Natural History.\"#,\n            CallThem::default(),\n            r#\"Pliny the Elder called it lake of Gennesaret or Taricheae in his encyclopedia, Natural History.\"#,\n        );\n    }\n\n    #[test]\n    fn students_call_you() {\n        assert_suggestion_result(\n            r#\"In the same way your students will call you as ~先生 even after they graduated/move to higher education.\"#,\n            CallThem::default(),\n            r#\"In the same way your students will call you ~先生 even after they graduated/move to higher education.\"#,\n        );\n    }\n\n    #[test]\n    fn paradoxical_reaction() {\n        assert_suggestion_result(\n            r#\"We can call it as Paradoxical Reaction which means a medicine which is used to reduce pain increases the pain when it is\"#,\n            CallThem::default(),\n            r#\"We can call it Paradoxical Reaction which means a medicine which is used to reduce pain increases the pain when it is\"#,\n        );\n    }\n\n    #[test]\n    fn rust_module() {\n        assert_no_lints(\n            \"I want to call them as if they were just another Rust module\",\n            CallThem::default(),\n        );\n    }\n\n    #[test]\n    fn want_to_do() {\n        assert_no_lints(\n            \"however its a design choice to not call it as it does things I don't want to do.\",\n            CallThem::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/cant.rs",
    "content": "use super::{ExprLinter, Suggestion};\nuse crate::Lint;\nuse crate::expr::{Expr, LongestMatchOf, SequenceExpr};\nuse crate::linting::LintKind;\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::expr_linter::find_the_only_token_matching;\nuse crate::{CharStringExt, Token};\n\npub struct Cant {\n    expr: LongestMatchOf,\n}\n\nimpl Default for Cant {\n    fn default() -> Self {\n        let nom_cant = SequenceExpr::default()\n            .then_kind_except(|kind| kind.is_nominal(), &[\"or\"])\n            .t_ws()\n            .t_aco(\"cant\");\n        let cant_pron = SequenceExpr::aco(\"cant\").t_ws().then_personal_pronoun();\n        let cant_verb = SequenceExpr::aco(\"cant\")\n            .t_ws()\n            .then_kind_is_but_is_not(|kind| kind.is_verb_lemma(), |kind| kind.is_noun());\n\n        Self {\n            expr: LongestMatchOf::new(vec![\n                Box::new(nom_cant),\n                Box::new(cant_pron),\n                Box::new(cant_verb),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for Cant {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let token = find_the_only_token_matching(toks, src, |tok, src| {\n            tok.span\n                .get_content(src)\n                .eq_ignore_ascii_case_chars(&['c', 'a', 'n', 't'])\n        })?;\n\n        let jargon = token.span.get_content(src);\n        let cannot = \"can't\";\n\n        Some(Lint {\n            span: token.span,\n            lint_kind: LintKind::Enhancement,\n            suggestions: vec![Suggestion::replace_with_match_case_str(cannot, jargon)],\n            message: \"`Cant` is secret language or jargon. If that's not what you mean you should use `can't` here.\".to_string(),\n            priority: 127,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Suggests correcting `cant` to `can't`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Cant;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_pronoun_cant() {\n        assert_suggestion_result(\n            \"I cant go to the store.\",\n            Cant::default(),\n            \"I can't go to the store.\",\n        );\n    }\n\n    #[test]\n    fn corrects_proper_noun_cant() {\n        assert_suggestion_result(\n            \"Bob cant go to the store.\",\n            Cant::default(),\n            \"Bob can't go to the store.\",\n        );\n    }\n\n    #[test]\n    fn corrects_common_noun_cant() {\n        // \"dog\" and \"cat\" are\n        assert_suggestion_result(\n            \"A horse cant drink bottled water.\",\n            Cant::default(),\n            \"A horse can't drink bottled water.\",\n        );\n    }\n\n    #[test]\n    fn corrects_cant_pronoun() {\n        assert_suggestion_result(\n            \"Cant you go to the store?\",\n            Cant::default(),\n            \"Can't you go to the store?\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_if_cant_is_part_of_noun_phrase() {\n        assert_lint_count(\"Cant cant be the same as jargon.\", Cant::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_cant_project() {\n        assert_lint_count(\n            \"The CANT project is designed to allow people to screw around with CAN easily at layers 1/2.\",\n            Cant::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"'Convert' is also a noun, so a 'cant convert' could be a person who switched to speaking jargon\"]\n    fn corrects_cant_verb() {\n        assert_suggestion_result(\n            \"Cant convert widget to input\",\n            Cant::default(),\n            \"Can't convert widget to input\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_legit_noun_sense() {\n        assert_lint_count(\n            \"CB Slang Dictionary is the distinctive anti-language, argot or cant which developed amongst users of citizens' band radio (CB), especially truck drivers\",\n            Cant::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/capitalize_personal_pronouns.rs",
    "content": "use crate::TokenStringExt;\n\nuse super::{Lint, LintKind, Linter, Suggestion};\n\n/// A linter that makes sure you capitalize \"I\" and its contractions.\n#[derive(Default)]\npub struct CapitalizePersonalPronouns;\n\nimpl Linter for CapitalizePersonalPronouns {\n    fn lint(&mut self, document: &crate::Document) -> Vec<Lint> {\n        document\n            .iter_words()\n            .filter_map(|tok| {\n                let span_content = document.get_span_content(&tok.span);\n\n                if matches!(\n                    span_content,\n                    ['i']\n                        | ['i', '\\'', 'd']\n                        | ['i', '\\'', 'd', '\\'', 'v', 'e']\n                        | ['i', '\\'', 'l', 'l']\n                        | ['i', '\\'', 'm']\n                        | ['i', '\\'', 'v', 'e']\n                ) {\n                    let mut replacement = span_content.to_vec();\n                    replacement[0] = 'I';\n                    Some(Lint {\n                        span: tok.span,\n                        lint_kind: LintKind::Capitalization,\n                        suggestions: vec![Suggestion::ReplaceWith(replacement)],\n                        message: \"The first-person singular subject pronoun must be capitalized.\"\n                            .to_string(),\n                        priority: 31,\n                    })\n                } else {\n                    None\n                }\n            })\n            .collect()\n    }\n\n    fn description(&self) -> &'static str {\n        \"Forgetting to capitalize personal pronouns, like \\\"I\\\" or \\\"I'm\\\" is one of the most common errors. This rule helps with that.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::CapitalizePersonalPronouns;\n\n    #[test]\n    fn start() {\n        assert_suggestion_result(\"i am hungry\", CapitalizePersonalPronouns, \"I am hungry\");\n    }\n\n    #[test]\n    fn end() {\n        assert_suggestion_result(\n            \"There is no one stronger than i\",\n            CapitalizePersonalPronouns,\n            \"There is no one stronger than I\",\n        );\n    }\n\n    #[test]\n    fn middle() {\n        assert_suggestion_result(\n            \"First of all, i am not happy with this.\",\n            CapitalizePersonalPronouns,\n            \"First of all, I am not happy with this.\",\n        );\n    }\n\n    #[test]\n    fn issue_365() {\n        assert_lint_count(\n            \"access will succeed, unlike with UDEREF/i386.\",\n            CapitalizePersonalPronouns,\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_id() {\n        assert_suggestion_result(\"i'd\", CapitalizePersonalPronouns, \"I'd\");\n    }\n\n    #[test]\n    fn correct_real_world_id() {\n        assert_suggestion_result(\n            \"Personal Homebrew tap with tools i'd like to use\",\n            CapitalizePersonalPronouns,\n            \"Personal Homebrew tap with tools I'd like to use\",\n        )\n    }\n\n    #[test]\n    fn corrects_idve() {\n        assert_suggestion_result(\"i'd've\", CapitalizePersonalPronouns, \"I'd've\");\n    }\n\n    #[test]\n    fn correct_real_world_idve() {\n        assert_suggestion_result(\n            \"... i'd've loved this even more twice length , but let not get greedy\",\n            CapitalizePersonalPronouns,\n            \"... I'd've loved this even more twice length , but let not get greedy\",\n        )\n    }\n\n    #[test]\n    fn corrects_ill() {\n        assert_suggestion_result(\"i'll\", CapitalizePersonalPronouns, \"I'll\");\n    }\n\n    #[test]\n    fn correct_real_world_ill() {\n        assert_suggestion_result(\n            \"Hey i deploy my contract it give me error and i'll match with the script file both are same if someone have idea how i slove this please ...\",\n            CapitalizePersonalPronouns,\n            \"Hey I deploy my contract it give me error and I'll match with the script file both are same if someone have idea how I slove this please ...\",\n        )\n    }\n\n    #[test]\n    fn corrects_im() {\n        assert_suggestion_result(\"i'm\", CapitalizePersonalPronouns, \"I'm\");\n    }\n\n    #[test]\n    fn correct_real_world_im() {\n        assert_suggestion_result(\n            \"Grid view not working, i'm not using any template\",\n            CapitalizePersonalPronouns,\n            \"Grid view not working, I'm not using any template\",\n        )\n    }\n\n    #[test]\n    fn corrects_ive() {\n        assert_suggestion_result(\"i've\", CapitalizePersonalPronouns, \"I've\");\n    }\n\n    #[test]\n    fn correct_real_world_ive() {\n        assert_suggestion_result(\n            \"Can't use Github Pro although i've verified for student pack\",\n            CapitalizePersonalPronouns,\n            \"Can't use Github Pro although I've verified for student pack\",\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/cautionary_tale.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\n/// Corrects the homophone confusion between \"tale\" (story) and \"tail\" (appendage)\n/// in common phrases like \"cautionary tale\" and \"inspirational tale\".\npub struct CautionaryTale {\n    expr: SequenceExpr,\n}\n\nimpl Default for CautionaryTale {\n    fn default() -> Self {\n        let adjectives = WordSet::new(&[\"cautionary\", \"inspirational\"]);\n\n        let pattern = SequenceExpr::with(adjectives).t_ws().t_aco(\"tail\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for CautionaryTale {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let tail_span = toks.last()?.span;\n        let tail_text = tail_span.get_content(src);\n\n        Some(Lint {\n            span: tail_span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                ['t', 'a', 'l', 'e'].to_vec(),\n                tail_text,\n            )],\n            message: \"Did you mean `tale` (story)?\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects confusion between `tale` (story) and `tail` (appendage) in common phrases.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::CautionaryTale;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn catches_cautionary_tail() {\n        assert_suggestion_result(\n            \"It serves as a cautionary tail.\",\n            CautionaryTale::default(),\n            \"It serves as a cautionary tale.\",\n        );\n    }\n\n    #[test]\n    fn catches_inspirational_tail() {\n        assert_suggestion_result(\n            \"Her journey is an inspirational tail of perseverance.\",\n            CautionaryTale::default(),\n            \"Her journey is an inspirational tale of perseverance.\",\n        );\n    }\n\n    #[test]\n    fn catches_capitalized_cautionary_tail() {\n        assert_suggestion_result(\n            \"The article discusses a Cautionary Tail about privacy.\",\n            CautionaryTale::default(),\n            \"The article discusses a Cautionary Tale about privacy.\",\n        );\n    }\n\n    #[test]\n    fn catches_uppercase_cautionary_tail() {\n        assert_suggestion_result(\n            \"THE STORY IS A CAUTIONARY TAIL.\",\n            CautionaryTale::default(),\n            \"THE STORY IS A CAUTIONARY TALE.\",\n        );\n    }\n\n    #[test]\n    fn catches_mixed_case() {\n        assert_suggestion_result(\n            \"This serves as an inspirational Tail for all.\",\n            CautionaryTale::default(),\n            \"This serves as an inspirational Tale for all.\",\n        );\n    }\n\n    #[test]\n    fn allows_actual_tail() {\n        assert_lint_count(\n            \"The dog wagged its tail happily.\",\n            CautionaryTale::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_different_adjective_with_tail() {\n        assert_lint_count(\"The cat has a long tail.\", CautionaryTale::default(), 0);\n    }\n\n    #[test]\n    fn allows_correct_tale() {\n        assert_lint_count(\n            \"It serves as a cautionary tale.\",\n            CautionaryTale::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_inspirational_tale() {\n        assert_lint_count(\n            \"Her story is an inspirational tale.\",\n            CautionaryTale::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn catches_in_longer_text() {\n        assert_suggestion_result(\n            \"The movie presents a cautionary tail about the dangers of AI. It's really scary.\",\n            CautionaryTale::default(),\n            \"The movie presents a cautionary tale about the dangers of AI. It's really scary.\",\n        );\n    }\n\n    #[test]\n    fn catches_multiple_occurrences() {\n        assert_lint_count(\n            \"This cautionary tail is also an inspirational tail about overcoming adversity.\",\n            CautionaryTale::default(),\n            2,\n        );\n    }\n\n    #[test]\n    fn allows_tail_in_different_context() {\n        assert_lint_count(\n            \"The inspirational speaker told the tale of a dog's tail.\",\n            CautionaryTale::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn catches_at_start_of_sentence() {\n        assert_suggestion_result(\n            \"Cautionary tail: don't trust strangers.\",\n            CautionaryTale::default(),\n            \"Cautionary tale: don't trust strangers.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/change_tack.rs",
    "content": "use crate::{\n    Token,\n    expr::{Expr, FirstMatchOf, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::Word,\n};\n\npub struct ChangeTack {\n    expr: FirstMatchOf,\n}\n\nimpl Default for ChangeTack {\n    fn default() -> Self {\n        let verb_forms = &[\"change\", \"changes\", \"changing\", \"changed\"];\n        let noun_forms = &verb_forms[..3];\n        let eggcorns = &[\"tact\", \"tacks\", \"tacts\"];\n\n        Self {\n            expr: FirstMatchOf::new(vec![\n                Box::new(\n                    SequenceExpr::longest_of(vec![\n                        Box::new(SequenceExpr::word_set(verb_forms).then_optional(\n                            SequenceExpr::default().t_ws().then_any_of(vec![\n                                Box::new(SequenceExpr::default().then_possessive_determiner()),\n                                Box::new(Word::new(\"it's\")),\n                            ]),\n                        )),\n                        Box::new(SequenceExpr::word_set(noun_forms).t_ws().t_aco(\"of\")),\n                    ])\n                    .t_ws()\n                    .then_word_set(eggcorns),\n                ),\n                Box::new(SequenceExpr::aco(\"different\").t_ws().t_aco(\"tact\")),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for ChangeTack {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let tact_tok = toks.last()?;\n        let tact_span = tact_tok.span;\n        let tact_chars = tact_span.get_content(src);\n\n        Some(Lint {\n            span: tact_span,\n            lint_kind: LintKind::Eggcorn,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                ['t', 'a', 'c', 'k'].to_vec(),\n                tact_chars,\n            )],\n            message: \"A change in direction or approach is a change of `tack`. Not `tact` (or `tacks` or `tacts`).\".to_owned(),\n            priority: 32,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Locates errors in the idioms `to change tack` and `change of tack` to convey the correct meaning of altering one's course or strategy.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ChangeTack;\n    use crate::linting::tests::assert_suggestion_result;\n\n    // Verbs: change tack\n\n    #[test]\n    fn change_tact_atomic() {\n        assert_suggestion_result(\"change tact\", ChangeTack::default(), \"change tack\");\n    }\n\n    #[test]\n    fn changed_tacks_atomic() {\n        assert_suggestion_result(\"changed tacks\", ChangeTack::default(), \"changed tack\");\n    }\n\n    #[test]\n    fn changes_tacts_atomic() {\n        assert_suggestion_result(\"changes tacts\", ChangeTack::default(), \"changes tack\");\n    }\n\n    #[test]\n    fn changing_tact_atomic() {\n        assert_suggestion_result(\"changing tact\", ChangeTack::default(), \"changing tack\");\n    }\n\n    // Nouns: change of tack\n\n    #[test]\n    fn change_of_tacks_atomic() {\n        assert_suggestion_result(\"change of tacks\", ChangeTack::default(), \"change of tack\");\n    }\n\n    #[test]\n    fn change_of_tact_real_world() {\n        assert_suggestion_result(\n            \"Change of tact : come give your concerns - Death Knight\",\n            ChangeTack::default(),\n            \"Change of tack : come give your concerns - Death Knight\",\n        );\n    }\n\n    #[test]\n    fn change_of_tacts_real_world() {\n        assert_suggestion_result(\n            \"2013.08.15 - A Change of Tacts | Hero MUX Wiki | Fandom\",\n            ChangeTack::default(),\n            \"2013.08.15 - A Change of Tack | Hero MUX Wiki | Fandom\",\n        );\n    }\n\n    #[test]\n    fn changing_of_tacks_real_world() {\n        assert_suggestion_result(\n            \"Duffy's changing of tacks hidden in her poetry collection ...\",\n            ChangeTack::default(),\n            \"Duffy's changing of tack hidden in her poetry collection ...\",\n        );\n    }\n\n    #[test]\n    fn changes_of_tact_real_world() {\n        assert_suggestion_result(\n            \"While the notes and the changes of tact started to ...\",\n            ChangeTack::default(),\n            \"While the notes and the changes of tack started to ...\",\n        );\n    }\n\n    // With possessive determiners\n\n    #[test]\n    fn changed_my_tact() {\n        assert_suggestion_result(\n            \"I have changed my tact this year, and have two second dates in the next week.\",\n            ChangeTack::default(),\n            \"I have changed my tack this year, and have two second dates in the next week.\",\n        );\n    }\n\n    #[test]\n    fn changed_our_tact() {\n        assert_suggestion_result(\n            \"That being said we have changed our tact slightly and gone for making all UI elements lazy.\",\n            ChangeTack::default(),\n            \"That being said we have changed our tack slightly and gone for making all UI elements lazy.\",\n        );\n    }\n\n    #[test]\n    fn change_your_tact() {\n        assert_suggestion_result(\n            \"If you've ever heard the phrase “you've got to change your tact”, this is probably where it comes from.\",\n            ChangeTack::default(),\n            \"If you've ever heard the phrase “you've got to change your tack”, this is probably where it comes from.\",\n        );\n    }\n\n    #[test]\n    fn change_his_tact() {\n        assert_suggestion_result(\n            \"Why did Sephiroth change his tact with Cloud midway through the game?\",\n            ChangeTack::default(),\n            \"Why did Sephiroth change his tack with Cloud midway through the game?\",\n        );\n    }\n\n    #[test]\n    fn changed_her_tact() {\n        assert_suggestion_result(\n            \"Only the last commitment ceremony I think she changed her tact and went on about George needing to be the real George.\",\n            ChangeTack::default(),\n            \"Only the last commitment ceremony I think she changed her tack and went on about George needing to be the real George.\",\n        );\n    }\n\n    #[test]\n    fn change_its_tact() {\n        assert_suggestion_result(\n            \"The show seems to change its tact depending on the episode.\",\n            ChangeTack::default(),\n            \"The show seems to change its tack depending on the episode.\",\n        );\n    }\n\n    #[test]\n    fn changing_its_tact_apostrophe() {\n        assert_suggestion_result(\n            \"FYI, USL is changing it's tact internally about MLS II teams.\",\n            ChangeTack::default(),\n            \"FYI, USL is changing it's tack internally about MLS II teams.\",\n        );\n    }\n\n    #[test]\n    fn changes_their_tact() {\n        assert_suggestion_result(\n            \"As we become inoculated to attention grifts, the grifter changes their tact.\",\n            ChangeTack::default(),\n            \"As we become inoculated to attention grifts, the grifter changes their tack.\",\n        );\n    }\n\n    #[test]\n    fn different_tact() {\n        assert_suggestion_result(\n            \"So, I recently took a different tact: I put all my models etc. in a single folder.\",\n            ChangeTack::default(),\n            \"So, I recently took a different tack: I put all my models etc. in a single folder.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/chock_full.rs",
    "content": "use crate::expr::Expr;\nuse crate::weir::weir_expr_to_expr;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ChockFull {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ChockFull {\n    fn default() -> Self {\n        Self {\n            expr: weir_expr_to_expr(\"[chalk, choke][( ), -]full\").unwrap(),\n        }\n    }\n}\n\nimpl ExprLinter for ChockFull {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_toks: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_toks.span()?;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"chock-full\",\n                span.get_content(source),\n            )],\n            message: format!(\n                \"The standard term is \\\"chock-full\\\"{}.\",\n                if matched_toks[1].kind.is_whitespace() {\n                    \", and it should be hyphenated\"\n                } else {\n                    \"\"\n                }\n            ),\n            priority: 126,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags common soundalikes of \\\"chock-full\\\" and makes sure they're hyphenated.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ChockFull;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn allows_correct_form() {\n        assert_lint_count(\n            \"'Chalk full', 'chalk-full', 'choke full', and 'choke-full' are nonstandard forms of 'chock-full'.\",\n            ChockFull::default(),\n            4,\n        );\n    }\n\n    #[test]\n    fn lower_space_chalk() {\n        assert_suggestion_result(\n            \"The codebase is chalk full of errors that we need to address.\",\n            ChockFull::default(),\n            \"The codebase is chock-full of errors that we need to address.\",\n        );\n    }\n\n    #[test]\n    fn lower_space_choke() {\n        assert_suggestion_result(\n            \"The project is choke full of questionable decisions that we need to revisit.\",\n            ChockFull::default(),\n            \"The project is chock-full of questionable decisions that we need to revisit.\",\n        );\n    }\n\n    #[test]\n    fn upper_space_chalk() {\n        assert_suggestion_result(\n            \"Chalk full of deprecated methods; we should refactor.\",\n            ChockFull::default(),\n            \"Chock-full of deprecated methods; we should refactor.\",\n        );\n    }\n\n    #[test]\n    fn upper_space_choke() {\n        assert_suggestion_result(\n            \"Choke full of unnecessary complexity; simplify it.\",\n            ChockFull::default(),\n            \"Chock-full of unnecessary complexity; simplify it.\",\n        );\n    }\n\n    #[test]\n    fn lower_hyphen_chalk() {\n        assert_suggestion_result(\n            \"The code is chalk-full of bugs; we need to debug before release.\",\n            ChockFull::default(),\n            \"The code is chock-full of bugs; we need to debug before release.\",\n        );\n    }\n\n    #[test]\n    fn lower_hyphen_choke() {\n        assert_suggestion_result(\n            \"The project is choke-full of warnings; we should address them.\",\n            ChockFull::default(),\n            \"The project is chock-full of warnings; we should address them.\",\n        );\n    }\n\n    #[test]\n    fn upper_hyphen_chalk() {\n        assert_suggestion_result(\n            \"Chalk-full of features, but we only need a few.\",\n            ChockFull::default(),\n            \"Chock-full of features, but we only need a few.\",\n        );\n    }\n\n    #[test]\n    fn upper_hyphen_choke() {\n        assert_suggestion_result(\n            \"Choke-full of pitfalls; let's consider alternatives.\",\n            ChockFull::default(),\n            \"Chock-full of pitfalls; let's consider alternatives.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/closed_compounds.rs",
    "content": "use crate::linting::LintGroup;\n\nuse super::MapPhraseLinter;\n\npub fn lint_group() -> LintGroup {\n    let mut group = LintGroup::empty();\n\n    macro_rules! add_compound_mappings {\n        ($group:expr, { $($name:expr => ($bad:expr, $good:expr)),+ $(,)? }) => {\n            $(\n                $group.add(\n                    $name,\n                    Box::new(MapPhraseLinter::new_closed_compound($bad, $good)),\n                );\n            )+\n        };\n    }\n\n    // These are compound words that should be condensed.\n    // The first column is the name of the rule (which shows up in settings).\n    // The second column is the incorrect form of the word and the third column is the correct\n    // form.\n    add_compound_mappings!(group, {\n        \"Anybody\"         => (\"any body\", \"anybody\"),\n        \"Anyhow\"          => (\"any how\", \"anyhow\"),\n        \"Anywhere\"        => (\"any where\", \"anywhere\"),\n        \"Backplane\"       => (\"back plane\", \"backplane\"),\n        \"Bypass\"          => (\"by pass\", \"bypass\"),\n        \"Chalkboard\"      => (\"chalk board\", \"chalkboard\"),\n        \"Deadlift\"        => (\"dead lift\", \"deadlift\"),\n        \"Desktop\"         => (\"desk top\", \"desktop\"),\n        \"Devops\"          => (\"dev ops\", \"devops\"),\n        \"Everybody\"       => (\"every body\", \"everybody\"),\n        \"Everyone\"        => (\"every one\", \"everyone\"),\n        \"Everywhere\"      => (\"every where\", \"everywhere\"),\n        \"Furthermore\"     => (\"further more\", \"furthermore\"),\n        \"Henceforth\"      => (\"hence forth\", \"henceforth\"),\n        \"However\"         => (\"how ever\", \"however\"),\n        \"Insofar\"         => (\"in so far\", \"insofar\"),\n        \"Instead\"         => (\"in stead\", \"instead\"),\n        \"Intact\"          => (\"in tact\", \"intact\"),\n        \"Itself\"          => (\"it self\", \"itself\"),\n        \"Keystroke\"       => (\"key stoke\", \"keystroke\"),\n        \"Keystrokes\"      => (\"key stokes\", \"keystrokes\"),\n        \"Laptop\"          => (\"lap top\", \"laptop\"),\n        \"Middleware\"      => (\"middle ware\", \"middleware\"),\n        \"Misunderstand\"   => (\"miss understand\", \"misunderstand\"),\n        \"Misunderstood\"   => (\"miss understood\", \"misunderstood\"),\n        \"Misuse\"          => (\"miss use\", \"misuse\"),\n        \"Misused\"         => (\"miss used\", \"misused\"),\n        \"Multicore\"       => (\"multi core\", \"multicore\"),\n        \"Multimedia\"      => (\"multi media\", \"multimedia\"),\n        \"Multithreading\"  => (\"multi threading\", \"multithreading\"),\n        \"Myself\"          => (\"my self\", \"myself\"),\n        \"Nonetheless\"     => (\"none the less\", \"nonetheless\"),\n        \"Nowhere\"         => (\"no where\", \"nowhere\"),\n        \"Nothing\"         => (\"no thing\", \"nothing\"),\n        \"Notwithstanding\" => (\"not with standing\", \"notwithstanding\"),\n        \"Overall\"         => (\"over all\", \"overall\"),\n        \"Overclocking\"    => (\"over clocking\", \"overclocking\"),\n        \"Overload\"        => (\"over load\", \"overload\"),\n        \"Overnight\"       => (\"over night\", \"overnight\"),\n        \"Postpone\"        => (\"post pone\", \"postpone\"),\n        \"Proofread\"       => (\"proof read\", \"proofread\"),\n        \"Regardless\"      => (\"regard less\", \"regardless\"),\n        \"Shortcoming\"     => (\"short coming\", \"shortcoming\"),\n        \"Shortcomings\"    => (\"short comings\", \"shortcomings\"),\n        \"Somebody\"        => (\"some body\", \"somebody\"),\n        \"Somehow\"         => (\"some how\", \"somehow\"),\n        \"Someone\"         => (\"some one\", \"someone\"),\n        \"Somewhere\"       => (\"some where\", \"somewhere\"),\n        \"There\"           => (\"the re\", \"there\"),\n        \"Therefore\"       => (\"there fore\", \"therefore\"),\n        \"Thereupon\"       => (\"there upon\", \"thereupon\"),\n        \"Underclock\"      => (\"under clock\", \"underclock\"),\n        \"Upset\"           => (\"up set\", \"upset\"),\n        \"Upward\"          => (\"up ward\", \"upward\"),\n        \"Whereupon\"       => (\"where upon\", \"whereupon\"),\n        \"Widespread\"      => (\"wide spread\", \"widespread\"),\n        \"Without\"         => (\"with out\", \"without\"),\n        \"Worldwide\"       => (\"world wide\", \"worldwide\"),\n    });\n\n    group.set_all_rules_to(Some(true));\n\n    group\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::lint_group;\n\n    #[test]\n    fn it_self() {\n        let test_sentence = \"The project, it self, was quite challenging.\";\n        let expected = \"The project, itself, was quite challenging.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn my_self() {\n        let test_sentence = \"He treated my self with respect.\";\n        let expected = \"He treated myself with respect.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn there_fore() {\n        let test_sentence = \"This is the reason; there fore, this is true.\";\n        let expected = \"This is the reason; therefore, this is true.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn mis_understood() {\n        let test_sentence = \"She miss understood the instructions.\";\n        let expected = \"She misunderstood the instructions.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn mis_use() {\n        let test_sentence = \"He tends to miss use the tool.\";\n        let expected = \"He tends to misuse the tool.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn mis_used() {\n        let test_sentence = \"The software was miss used.\";\n        let expected = \"The software was misused.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn world_wide() {\n        let test_sentence = \"The world wide impact was significant.\";\n        let expected = \"The worldwide impact was significant.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn over_all() {\n        let test_sentence = \"The over all performance was good.\";\n        let expected = \"The overall performance was good.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn how_ever() {\n        let test_sentence = \"This is true, how ever, details matter.\";\n        let expected = \"This is true, however, details matter.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn wide_spread() {\n        let test_sentence = \"The news was wide spread throughout the region.\";\n        let expected = \"The news was widespread throughout the region.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn not_with_standing() {\n        let test_sentence = \"They decided to proceed not with standing any further delay.\";\n        let expected = \"They decided to proceed notwithstanding any further delay.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn any_how() {\n        let test_sentence = \"She solved the problem any how, even under pressure.\";\n        let expected = \"She solved the problem anyhow, even under pressure.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn none_the_less() {\n        let test_sentence = \"The results were disappointing, none the less, they continued.\";\n        let expected = \"The results were disappointing, nonetheless, they continued.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn there_upon() {\n        let test_sentence = \"A decision was made there upon reviewing the data.\";\n        let expected = \"A decision was made thereupon reviewing the data.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn in_so_far() {\n        let test_sentence = \"This rule applies in so far as it covers all cases.\";\n        let expected = \"This rule applies insofar as it covers all cases.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn where_upon() {\n        let test_sentence = \"They acted where upon the circumstances allowed.\";\n        let expected = \"They acted whereupon the circumstances allowed.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn up_ward() {\n        let test_sentence = \"The temperature moved up ward during the afternoon.\";\n        let expected = \"The temperature moved upward during the afternoon.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn hence_forth() {\n        let test_sentence = \"All new policies apply hence forth immediately.\";\n        let expected = \"All new policies apply henceforth immediately.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn regard_less() {\n        let test_sentence = \"The decision was made, regard less of the opposition.\";\n        let expected = \"The decision was made, regardless of the opposition.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn over_night() {\n        let test_sentence = \"They set off on their journey over night.\";\n        let expected = \"They set off on their journey overnight.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn by_pass() {\n        let test_sentence = \"Please by pass this check for now.\";\n        let expected = \"Please bypass this check for now.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn dead_lift() {\n        let test_sentence = \"I can dead lift 200 kg.\";\n        let expected = \"I can deadlift 200 kg.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn chalk_board() {\n        let test_sentence = \"The teacher wrote the equation on the chalk board.\";\n        let expected = \"The teacher wrote the equation on the chalkboard.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn key_stoke() {\n        let test_sentence = \"Use this key stoke to open search.\";\n        let expected = \"Use this keystroke to open search.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn in_tact() {\n        let test_sentence = \"The code remains in tact after the merge.\";\n        let expected = \"The code remains intact after the merge.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn intact_is_allowed() {\n        assert_no_lints(\"The data set remains intact.\", lint_group());\n    }\n\n    #[test]\n    fn key_stokes() {\n        let test_sentence = \"These key stokes are hard to memorize.\";\n        let expected = \"These keystrokes are hard to memorize.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn with_out() {\n        let test_sentence = \"We left with out a map.\";\n        let expected = \"We left without a map.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn the_re() {\n        let test_sentence = \"The re are too many popups on this page.\";\n        let expected = \"There are too many popups on this page.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn short_coming() {\n        let test_sentence = \"That bug is a short coming in the current release.\";\n        let expected = \"That bug is a shortcoming in the current release.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n\n    #[test]\n    fn short_comings() {\n        let test_sentence = \"We listed three short comings in the postmortem.\";\n        let expected = \"We listed three shortcomings in the postmortem.\";\n        assert_suggestion_result(test_sentence, lint_group(), expected);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/comma_fixes.rs",
    "content": "use super::{Lint, LintKind, Linter, Suggestion};\nuse crate::{\n    Span,\n    TokenKind::{Space, Unlintable, Word},\n    TokenStringExt,\n};\n\nconst MSG_SPACE_BEFORE: &str = \"Don't use a space before a comma.\";\nconst MSG_AVOID_ASIAN: &str = \"Avoid East Asian commas in English contexts.\";\nconst MSG_SPACE_AFTER: &str = \"Use a space after a comma.\";\n\n/// A linter that fixes common comma errors:\n/// No space after.\n/// Inappropriate space before.\n/// Asian commas instead of English commas.\n/// This linter only Asian commas anywhere, and wrong spacing of commas between words.\n/// Commas between numbers are used differently in different contexts and these are not checked:\n/// Lists of numbers: 1, 2, 3\n/// Thousands separators: 1,000,000\n/// Decimal points used mistakenly by Europeans: 3,14159\n#[derive(Debug, Default)]\npub struct CommaFixes;\n\nimpl Linter for CommaFixes {\n    fn lint(&mut self, document: &crate::Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n        let source = document.get_source();\n\n        for ci in document.iter_comma_indices() {\n            let mut toks = (None, None, document.get_token(ci).unwrap(), None, None);\n            toks.0 = (ci >= 2).then(|| document.get_token(ci - 2).unwrap());\n            toks.1 = (ci >= 1).then(|| document.get_token(ci - 1).unwrap());\n            toks.3 = document.get_token(ci + 1);\n            toks.4 = document.get_token(ci + 2);\n\n            let kinds = (\n                toks.0.map(|t| &t.kind),\n                toks.1.map(|t| &t.kind),\n                *toks.2.span.get_content(source).first().unwrap(),\n                toks.3.map(|t| &t.kind),\n                toks.4.map(|t| &t.kind),\n            );\n\n            let (span, suggestion, message) = match kinds {\n                (_, Some(Word(_)), '、' | '，', Some(Space(_)), Some(Word(_))) => (\n                    toks.2.span,\n                    Suggestion::ReplaceWith(vec![',']),\n                    vec![MSG_AVOID_ASIAN],\n                ),\n\n                (Some(Word(_)), Some(Space(_)), ',', Some(Space(_)), Some(Word(_))) => (\n                    toks.1.unwrap().span,\n                    Suggestion::Remove,\n                    vec![MSG_SPACE_BEFORE],\n                ),\n\n                (Some(Word(_)), Some(Space(_)), '、' | '，', Some(Space(_)), Some(Word(_))) => (\n                    Span::new(toks.1.unwrap().span.start, toks.2.span.end),\n                    Suggestion::ReplaceWith(vec![',']),\n                    vec![MSG_SPACE_BEFORE, MSG_AVOID_ASIAN],\n                ),\n\n                (_, Some(Word(_)), ',', Some(Word(_)), _) => (\n                    toks.2.span,\n                    Suggestion::InsertAfter(vec![' ']),\n                    vec![MSG_SPACE_AFTER],\n                ),\n\n                (_, Some(Word(_)), '、' | '，', Some(Word(_)), _) => (\n                    toks.2.span,\n                    Suggestion::ReplaceWith(vec![',', ' ']),\n                    vec![MSG_AVOID_ASIAN, MSG_SPACE_AFTER],\n                ),\n\n                (Some(Word(_)), Some(Space(_)), ',', Some(Word(_)), _) => (\n                    Span::new(toks.1.unwrap().span.start, toks.2.span.end),\n                    Suggestion::ReplaceWith(vec![',', ' ']),\n                    vec![MSG_SPACE_BEFORE, MSG_SPACE_AFTER],\n                ),\n\n                (Some(Word(_)), Some(Space(_)), '、' | '，', Some(Word(_)), _) => (\n                    Span::new(toks.1.unwrap().span.start, toks.2.span.end),\n                    Suggestion::ReplaceWith(vec![',', ' ']),\n                    vec![MSG_SPACE_BEFORE, MSG_AVOID_ASIAN, MSG_SPACE_AFTER],\n                ),\n\n                // Handles Asian commas in all other contexts\n                // Unlintable is used for non-English tokens to prevent changing commas in CJK text\n                (_, Some(Unlintable), '、' | '，', _, _) => continue,\n                (_, _, '、' | '，', Some(Unlintable), _) => continue,\n\n                (_, _, '、' | '，', _, _) => (\n                    toks.2.span,\n                    Suggestion::ReplaceWith(vec![',']),\n                    vec![MSG_AVOID_ASIAN],\n                ),\n\n                _ => continue,\n            };\n\n            lints.push(Lint {\n                span,\n                lint_kind: LintKind::Punctuation,\n                suggestions: vec![suggestion],\n                message: message.join(\" \"),\n                priority: 32,\n            });\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &'static str {\n        \"Fix common comma errors such as no space after, erroneous space before, etc., Asian commas instead of English commas, etc.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::CommaFixes;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn allows_english_comma_atomic() {\n        assert_lint_count(\",\", CommaFixes, 0);\n    }\n\n    #[test]\n    fn flags_fullwidth_comma_atomic() {\n        assert_lint_count(\"，\", CommaFixes, 1);\n    }\n\n    #[test]\n    fn flags_ideographic_comma_atomic() {\n        assert_lint_count(\"、\", CommaFixes, 1);\n    }\n\n    #[test]\n    fn corrects_fullwidth_comma_real_world() {\n        assert_suggestion_result(\n            \"higher 2 bits of the number of nodes， whether abandoned or not decided by .index section\",\n            CommaFixes,\n            \"higher 2 bits of the number of nodes, whether abandoned or not decided by .index section\",\n        );\n    }\n\n    #[test]\n    fn corrects_ideographic_comma_real_world() {\n        assert_suggestion_result(\"cout、endl、string\", CommaFixes, \"cout, endl, string\")\n    }\n\n    #[test]\n    fn doesnt_flag_comma_space_between_words() {\n        assert_lint_count(\"foo, bar\", CommaFixes, 0);\n    }\n\n    #[test]\n    fn flags_fullwidth_comma_space_between_words() {\n        assert_lint_count(\"foo， bar\", CommaFixes, 1);\n    }\n\n    #[test]\n    fn flags_ideographic_comma_space_between_words() {\n        assert_lint_count(\"foo、 bar\", CommaFixes, 1);\n    }\n\n    #[test]\n    fn doesnt_flag_semicolon_space_between_words() {\n        assert_lint_count(\"foo; bar\", CommaFixes, 0);\n    }\n\n    #[test]\n    fn corrects_comma_between_words_with_no_space() {\n        assert_suggestion_result(\"foo,bar\", CommaFixes, \"foo, bar\")\n    }\n\n    #[test]\n    fn corrects_asian_comma_between_words_with_no_space() {\n        assert_suggestion_result(\"foo，bar\", CommaFixes, \"foo, bar\")\n    }\n\n    #[test]\n    fn corrects_space_on_wrong_side_of_comma_between_words() {\n        assert_suggestion_result(\"foo ,bar\", CommaFixes, \"foo, bar\")\n    }\n\n    #[test]\n    fn corrects_comma_on_wrong_side_of_asian_comma_between_words() {\n        assert_suggestion_result(\"foo ，bar\", CommaFixes, \"foo, bar\")\n    }\n\n    #[test]\n    fn corrects_comma_between_words_with_space_on_both_sides() {\n        assert_suggestion_result(\"foo , bar\", CommaFixes, \"foo, bar\")\n    }\n\n    #[test]\n    fn corrects_asian_comma_between_words_with_space_on_both_sides() {\n        assert_suggestion_result(\"foo 、 bar\", CommaFixes, \"foo, bar\")\n    }\n\n    #[test]\n    fn doesnt_correct_comma_between_non_english_tokens() {\n        assert_lint_count(\"严禁采摘花、 果、叶，挖掘树根、草药!\", CommaFixes, 0);\n    }\n\n    #[test]\n    fn issue_2233() {\n        assert_no_lints(\n            \"In foobar, apple is a fruit, and \\\"beer\\\" is not a fruit.\",\n            CommaFixes,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/compound_nouns/compound_noun_after_det_adj.rs",
    "content": "use crate::expr::All;\nuse crate::expr::Expr;\nuse crate::expr::MergeableWords;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::patterns::InflectionOfBe;\nuse crate::{CharStringExt, TokenStringExt, linting::ExprLinter};\n\nuse super::{Lint, LintKind, Suggestion, is_content_word, predicate};\nuse crate::linting::expr_linter::Chunk;\n\nuse crate::{Lrc, Token};\n\n/// Two adjacent words separated by whitespace that if joined would be a valid noun.\npub struct CompoundNounAfterDetAdj {\n    expr: Box<dyn Expr>,\n    split_expr: Lrc<MergeableWords>,\n}\n\n// This heuristic identifies potential compound nouns by:\n// 1. Looking for a determiner or adjective (e.g., \"a\", \"big\", \"red\")\n// 2. Followed by two content words (not determiners, adverbs, or prepositions)\n// 3. Finally, checking if the combination forms a noun in the dictionary\n//    that is not also an adjective\nimpl Default for CompoundNounAfterDetAdj {\n    fn default() -> Self {\n        let context_expr = SequenceExpr::with(|tok: &Token, src: &[char]| {\n            tok.kind.is_determiner()\n                || (tok.kind.is_adjective() && *tok.span.get_content(src).to_lower() != ['g', 'o'])\n        })\n        .t_ws()\n        .then(is_content_word)\n        .t_ws()\n        .then(is_content_word.and_not(InflectionOfBe::default()));\n\n        let split_expr = Lrc::new(MergeableWords::new(|meta_closed, meta_open| {\n            predicate(meta_closed, meta_open)\n        }));\n\n        let mut expr = All::default();\n        expr.add(context_expr);\n        expr.add(SequenceExpr::anything().t_any().then(split_expr.clone()));\n\n        Self {\n            expr: Box::new(expr),\n            split_expr,\n        }\n    }\n}\n\nimpl ExprLinter for CompoundNounAfterDetAdj {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        if matched_tokens\n            .first()?\n            .span\n            .get_content(source)\n            .eq_ignore_ascii_case_str(\"that\")\n        {\n            return None;\n        }\n\n        let span = matched_tokens[2..].span()?;\n        let orig = span.get_content(source);\n        // If the pattern matched, this will not return `None`.\n        let word =\n            self.split_expr\n                .get_merged_word(&matched_tokens[2], &matched_tokens[4], source)?;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(word.to_vec(), orig)],\n            message: format!(\n                \"Did you mean the closed compound noun “{}”?\",\n                word.to_string()\n            ),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects compound nouns split by a space and suggests merging them when both parts form a valid noun. Has checks to avoid erroneous cases.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/compound_nouns/compound_noun_after_possessive.rs",
    "content": "use crate::expr::All;\nuse crate::expr::Expr;\nuse crate::expr::MergeableWords;\nuse crate::expr::SequenceExpr;\nuse crate::{CharStringExt, Lrc, TokenStringExt, linting::ExprLinter};\n\nuse super::{Lint, LintKind, Suggestion, is_content_word, predicate};\nuse crate::linting::expr_linter::Chunk;\n\nuse crate::Token;\n\n/// Looks for closed compound nouns which can be condensed due to their position after a\n/// possessive noun (which implies ownership).\n/// See also:\n/// harper-core/src/linting/lets_confusion/mod.rs\n/// harper-core/src/linting/lets_confusion/let_us_redundancy.rs\n/// harper-core/src/linting/lets_confusion/no_contraction_with_verb.rs\n/// harper-core/src/linting/pronoun_contraction/should_contract.rs\npub struct CompoundNounAfterPossessive {\n    expr: Box<dyn Expr>,\n    split_pattern: Lrc<MergeableWords>,\n}\n\nimpl Default for CompoundNounAfterPossessive {\n    fn default() -> Self {\n        let context_pattern = SequenceExpr::default()\n            .then_possessive_nominal()\n            .t_ws()\n            .then(is_content_word)\n            .t_ws()\n            .then(is_content_word);\n\n        let split_pattern = Lrc::new(MergeableWords::new(|meta_closed, meta_open| {\n            predicate(meta_closed, meta_open)\n        }));\n\n        let mut pattern = All::default();\n\n        pattern.add(context_pattern);\n        pattern.add(SequenceExpr::anything().t_any().then(split_pattern.clone()));\n\n        Self {\n            expr: Box::new(pattern),\n            split_pattern,\n        }\n    }\n}\n\nimpl ExprLinter for CompoundNounAfterPossessive {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        // \"Let's\" can technically be a possessive noun (of a lease, or a let in tennis, etc.)\n        // but in practice it's almost always a contraction of \"let us\" before a verb\n        // or a mistake for \"lets\", the 3rd person singular present form of \"to let\".\n        let word_apostrophe_s = matched_tokens[0]\n            .span\n            .get_content_string(source)\n            .to_lowercase()\n            .replace('’', \"'\");\n        if word_apostrophe_s == \"let's\" || word_apostrophe_s == \"that's\" {\n            return None;\n        }\n        let span = matched_tokens[2..].span()?;\n        // If the pattern matched, this will not return `None`.\n        let word =\n            self.split_pattern\n                .get_merged_word(&matched_tokens[2], &matched_tokens[4], source)?;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::ReplaceWith(word.to_vec())],\n            message: format!(\n                \"The possessive noun implies ownership of the closed compound noun “{}”.\",\n                word.to_string()\n            ),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects split compound nouns following a possessive noun and suggests merging them.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::CompoundNounAfterPossessive;\n    use crate::linting::tests::assert_lint_count;\n\n    #[test]\n    fn lets_is_not_possessive() {\n        assert_lint_count(\n            \"Let's check out this article.\",\n            CompoundNounAfterPossessive::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn lets_is_not_possessive_typographic_apostrophe() {\n        assert_lint_count(\n            \"“Let’s go on with the game,” the Queen said to Alice;\",\n            CompoundNounAfterPossessive::default(),\n            0,\n        )\n    }\n\n    #[test]\n    fn thats_is_not_possessive() {\n        assert_lint_count(\n            \"And you might not be thinking that that's a very big issue, but ...\",\n            CompoundNounAfterPossessive::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/compound_nouns/compound_noun_before_aux_verb.rs",
    "content": "use crate::expr::All;\nuse crate::expr::Expr;\nuse crate::expr::MergeableWords;\nuse crate::expr::SequenceExpr;\nuse crate::{CharStringExt, Lrc, TokenStringExt, linting::ExprLinter};\n\nuse super::{Lint, LintKind, Suggestion, is_content_word, predicate};\n\nuse crate::Token;\nuse crate::linting::expr_linter::Chunk;\n\n/// Two adjacent words separated by whitespace that if joined would be a valid noun.\npub struct CompoundNounBeforeAuxVerb {\n    expr: Box<dyn Expr>,\n    split_pattern: Lrc<MergeableWords>,\n}\n\nimpl Default for CompoundNounBeforeAuxVerb {\n    fn default() -> Self {\n        let context_pattern = SequenceExpr::with(is_content_word)\n            .t_ws()\n            .then(is_content_word)\n            .then_auxiliary_verb();\n\n        let split_pattern = Lrc::new(MergeableWords::new(|meta_closed, meta_open| {\n            predicate(meta_closed, meta_open)\n        }));\n\n        let mut expr = All::default();\n        expr.add(context_pattern);\n        expr.add(SequenceExpr::with(split_pattern.clone()).t_any().t_any());\n\n        Self {\n            expr: Box::new(expr),\n            split_pattern,\n        }\n    }\n}\n\nimpl ExprLinter for CompoundNounBeforeAuxVerb {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens[0..3].span()?;\n        let orig = span.get_content(source);\n        // If the pattern matched, this will not return `None`.\n        let word =\n            self.split_pattern\n                .get_merged_word(&matched_tokens[0], &matched_tokens[2], source)?;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(word.to_vec(), orig)],\n            message: format!(\n                \"The auxiliary verb “{}” implies the existence of the closed compound noun “{}”.\",\n                matched_tokens[4].span.get_content(source).to_string(),\n                word.to_string()\n            ),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects split compound nouns preceding an action and suggests merging them.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/compound_nouns/mod.rs",
    "content": "mod compound_noun_after_det_adj;\nmod compound_noun_after_possessive;\nmod compound_noun_before_aux_verb;\n\nuse super::{Lint, LintKind, Suggestion, merge_linters::merge_linters};\nuse crate::{CharStringExt, DictWordMetadata, Token};\n\n// Helper function to check if a token is a content word (not a function word)\npub(crate) fn is_content_word(tok: &Token, src: &[char]) -> bool {\n    let Some(Some(meta)) = tok.kind.as_word() else {\n        return false;\n    };\n\n    tok.span.len() > 1\n        && (meta.is_noun() || meta.is_adjective() || meta.is_verb() || meta.is_adverb())\n        && !(meta.is_determiner() || meta.is_conjunction())\n        && (!meta.preposition || tok.span.get_content(src).eq_ignore_ascii_case_str(\"bar\"))\n}\n\npub(crate) fn predicate(\n    closed: Option<&DictWordMetadata>,\n    open: Option<&DictWordMetadata>,\n) -> bool {\n    open.is_none() && closed.is_some_and(|m| m.is_noun() && !m.is_proper_noun())\n}\n\nuse compound_noun_after_det_adj::CompoundNounAfterDetAdj;\nuse compound_noun_after_possessive::CompoundNounAfterPossessive;\nuse compound_noun_before_aux_verb::CompoundNounBeforeAuxVerb;\n\nmerge_linters!(CompoundNouns => CompoundNounAfterDetAdj, CompoundNounBeforeAuxVerb, CompoundNounAfterPossessive => \"Detects compound nouns split by a space and suggests merging them when both parts form a valid noun.\" );\n\n#[cfg(test)]\nmod tests {\n    use super::CompoundNouns;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn web_cam() {\n        let test_sentence = \"The web cam captured a stunning image.\";\n        let expected = \"The webcam captured a stunning image.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn note_book() {\n        let test_sentence = \"She always carries a note book to jot down ideas.\";\n        let expected = \"She always carries a notebook to jot down ideas.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn mother_board() {\n        let test_sentence = \"After the upgrade, the mother board was replaced.\";\n        let expected = \"After the upgrade, the motherboard was replaced.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn smart_phone() {\n        let test_sentence = \"He bought a new smart phone last week.\";\n        let expected = \"He bought a new smartphone last week.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn firm_ware() {\n        let test_sentence = \"The device's firm ware was updated overnight.\";\n        let expected = \"The device's firmware was updated overnight.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn back_plane() {\n        let test_sentence = \"A reliable back plane is essential for high-speed data transfer.\";\n        let expected = \"A reliable backplane is essential for high-speed data transfer.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn spread_sheet() {\n        let test_sentence = \"The accountant reviewed the spread sheet carefully.\";\n        let expected = \"The accountant reviewed the spreadsheet carefully.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn side_bar() {\n        let test_sentence = \"The website's side bar offers quick navigation links.\";\n        let expected = \"The website's sidebar offers quick navigation links.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn back_pack() {\n        let test_sentence = \"I packed my books in my back pack before leaving.\";\n        let expected = \"I packed my books in my backpack before leaving.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn cup_board() {\n        let test_sentence = \"She stored the dishes in the old cup board.\";\n        let expected = \"She stored the dishes in the old cupboard.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn key_board() {\n        let test_sentence = \"My key board stopped working during the meeting.\";\n        let expected = \"My keyboard stopped working during the meeting.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn touch_screen() {\n        let test_sentence = \"The device features a responsive touch screen.\";\n        let expected = \"The device features a responsive touchscreen.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn head_set() {\n        let test_sentence = \"He bought a new head set for his workouts.\";\n        let expected = \"He bought a new headset for his workouts.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn frame_work() {\n        let test_sentence = \"The frame work of the app was built with care.\";\n        let expected = \"The framework of the app was built with care.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn touch_pad() {\n        let test_sentence = \"The touch pad on my laptop is very sensitive.\";\n        let expected = \"The touchpad on my laptop is very sensitive.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn micro_processor() {\n        let test_sentence = \"This micro processor is among the fastest available.\";\n        let expected = \"This microprocessor is among the fastest available.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn head_phone() {\n        let test_sentence = \"I lost my head phone at the gym.\";\n        let expected = \"I lost my headphone at the gym.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn micro_services() {\n        let test_sentence = \"Our architecture now relies on micro services.\";\n        let expected = \"Our architecture now relies on microservices.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn dash_board() {\n        let test_sentence = \"The dash board shows real-time analytics.\";\n        let expected = \"The dashboard shows real-time analytics.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn site_map() {\n        let test_sentence = \"A site map is provided at the footer of the website.\";\n        let expected = \"A sitemap is provided at the footer of the website.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn fire_wall() {\n        let test_sentence = \"A robust fire wall is essential for network security.\";\n        let expected = \"A robust firewall is essential for network security.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn bit_stream() {\n        let test_sentence = \"The bit stream was interrupted during transmission.\";\n        let expected = \"The bitstream was interrupted during transmission.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn block_chain() {\n        let test_sentence = \"The block chain is revolutionizing the financial sector.\";\n        let expected = \"The blockchain is revolutionizing the financial sector.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn thumb_nail() {\n        let test_sentence = \"I saved the image as a thumb nail.\";\n        let expected = \"I saved the image as a thumbnail.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn bath_room() {\n        let test_sentence = \"They remodeled the bath room entirely.\";\n        let expected = \"They remodeled the bathroom entirely.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    #[ignore = \"\\\"everyone\\\" is not a valid compound noun, it's a pronoun\"]\n    fn every_one() {\n        let test_sentence = \"Every one should have access to quality education.\";\n        let expected = \"Everyone should have access to quality education.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn play_ground() {\n        let test_sentence = \"The kids spent the afternoon at the play ground.\";\n        let expected = \"The kids spent the afternoon at the playground.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn run_way() {\n        let test_sentence = \"The airplane taxied along the run way.\";\n        let expected = \"The airplane taxied along the runway.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn cyber_space() {\n        let test_sentence = \"Hackers roam the cyber space freely.\";\n        let expected = \"Hackers roam the cyberspace freely.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn cyber_attack() {\n        let test_sentence = \"The network was hit by a cyber attack.\";\n        let expected = \"The network was hit by a cyberattack.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn web_socket() {\n        let test_sentence = \"Real-time updates are sent via a web socket.\";\n        let expected = \"Real-time updates are sent via a websocket.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn finger_print() {\n        let test_sentence = \"The detective collected a finger print as evidence.\";\n        let expected = \"The detective collected a fingerprint as evidence.\";\n        assert_suggestion_result(test_sentence, CompoundNouns::default(), expected);\n    }\n\n    #[test]\n    fn got_is_not_possessive() {\n        assert_lint_count(\"I got here by car...\", CompoundNouns::default(), 0);\n    }\n\n    #[test]\n    fn allow_issue_662() {\n        assert_lint_count(\n            \"They are as old as *modern* computers \",\n            CompoundNouns::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_issue_661() {\n        assert_lint_count(\"I may be wrong.\", CompoundNouns::default(), 0);\n    }\n\n    #[test]\n    fn allow_issue_704() {\n        assert_lint_count(\n            \"Here are some ways to do that:\",\n            CompoundNouns::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_issue_721() {\n        assert_lint_count(\n            \"So if you adjust any one of these adjusters that can have a negative or a positive effect.\",\n            CompoundNouns::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_678() {\n        assert_lint_count(\n            \"they can't catch all the bugs.\",\n            CompoundNouns::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ina_not_suggested() {\n        assert_lint_count(\n            \"past mistakes or a character in a looping reality facing personal challenges.\",\n            CompoundNouns::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_suppress_or() {\n        assert_lint_count(\n            \"He must decide whether to suppress or coexist with his doppelgänger.\",\n            CompoundNouns::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_an_arm_and_a_leg() {\n        assert_lint_count(\n            \"I have to pay an arm and a leg get a worker to come and be my assistant baker.\",\n            CompoundNouns::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_well_and_723() {\n        assert_lint_count(\n            \"I understood very well and decided to go.\",\n            CompoundNouns::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_can_not() {\n        assert_lint_count(\"Size can not be determined.\", CompoundNouns::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_lot_to() {\n        assert_lint_count(\n            \"but you'd have to raise taxes a lot to do it.\",\n            CompoundNouns::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_to_me() {\n        assert_lint_count(\n            \"There's no massive damage to the rockers or anything that to me would indicate that like the whole front of the car was off\",\n            CompoundNouns::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_issue_1553() {\n        assert_no_lints(\n            \"I'm not sure if there's anyone else that may be interested in more fine-grained control, but as it stands, having the domain level toggle is sufficient for me.\",\n            CompoundNouns::default(),\n        );\n    }\n\n    #[test]\n    fn allow_issue_1496() {\n        assert_no_lints(\n            \"I am not able to respond to messages.\",\n            CompoundNouns::default(),\n        );\n    }\n\n    #[test]\n    fn allow_issue_1298() {\n        assert_no_lints(\n            \"A series of tests that cover all possible cases.\",\n            CompoundNouns::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_project_or() {\n        assert_no_lints(\n            \"You can star or watch this project or follow author to get release notifications in time.\",\n            CompoundNouns::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/compound_subject_i.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenKind,\n    expr::{AnchorStart, Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\nconst POSSESSIVE_DETERMINERS: &[&str] = &[\"my\", \"your\", \"her\", \"his\", \"their\", \"our\"];\n\npub struct CompoundSubjectI {\n    expr: SequenceExpr,\n}\n\nimpl Default for CompoundSubjectI {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(AnchorStart)\n            .then_optional(\n                SequenceExpr::default()\n                    .then_quote()\n                    .then_optional(SequenceExpr::default().t_ws()),\n            )\n            .then_optional(\n                SequenceExpr::default()\n                    .then_punctuation()\n                    .then_optional(SequenceExpr::default().t_ws()),\n            )\n            .then_word_set(POSSESSIVE_DETERMINERS)\n            .t_ws()\n            .then_nominal()\n            .t_ws()\n            .t_aco(\"and\")\n            .t_ws()\n            .t_aco(\"me\")\n            .t_ws()\n            .then_kind_either(TokenKind::is_verb, TokenKind::is_auxiliary_verb);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for CompoundSubjectI {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let pronoun = matched_tokens.iter().find(|tok| {\n            tok.kind.is_word()\n                && tok\n                    .span\n                    .get_content_string(source)\n                    .eq_ignore_ascii_case(\"me\")\n        })?;\n        Some(Lint {\n            span: pronoun.span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![Suggestion::ReplaceWith(\"I\".chars().collect())],\n            message: \"Use `I` when this pronoun is part of a compound subject.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Promotes `I` in compound subjects headed by a possessive determiner.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::CompoundSubjectI;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_my_mother_and_me() {\n        assert_suggestion_result(\n            \"My mother and me went to California.\",\n            CompoundSubjectI::default(),\n            \"My mother and I went to California.\",\n        );\n    }\n\n    #[test]\n    fn corrects_my_brother_and_me() {\n        assert_suggestion_result(\n            \"My brother and me would often go to the cinema.\",\n            CompoundSubjectI::default(),\n            \"My brother and I would often go to the cinema.\",\n        );\n    }\n\n    #[test]\n    fn corrects_your_friend_and_me() {\n        assert_suggestion_result(\n            \"Your friend and me are heading out.\",\n            CompoundSubjectI::default(),\n            \"Your friend and I are heading out.\",\n        );\n    }\n\n    #[test]\n    fn corrects_her_manager_and_me() {\n        assert_suggestion_result(\n            \"Her manager and me have talked about it.\",\n            CompoundSubjectI::default(),\n            \"Her manager and I have talked about it.\",\n        );\n    }\n\n    #[test]\n    fn corrects_his_cat_and_me() {\n        assert_suggestion_result(\n            \"His cat and me were inseparable.\",\n            CompoundSubjectI::default(),\n            \"His cat and I were inseparable.\",\n        );\n    }\n\n    #[test]\n    fn corrects_their_kids_and_me() {\n        assert_suggestion_result(\n            \"Their kids and me will play outside.\",\n            CompoundSubjectI::default(),\n            \"Their kids and I will play outside.\",\n        );\n    }\n\n    #[test]\n    fn corrects_our_neighbor_and_me() {\n        assert_suggestion_result(\n            \"Our neighbor and me can help tomorrow.\",\n            CompoundSubjectI::default(),\n            \"Our neighbor and I can help tomorrow.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_quote_prefix() {\n        assert_suggestion_result(\n            \"\\\"My mother and me went to California,\\\" she said.\",\n            CompoundSubjectI::default(),\n            \"\\\"My mother and I went to California,\\\" she said.\",\n        );\n    }\n\n    #[test]\n    fn corrects_all_caps() {\n        assert_suggestion_result(\n            \"MY BROTHER AND ME WILL HANDLE IT.\",\n            CompoundSubjectI::default(),\n            \"MY BROTHER AND I WILL HANDLE IT.\",\n        );\n    }\n\n    #[test]\n    fn ignores_between_you_and_me() {\n        assert_lint_count(\n            \"Between you and me, this stays here.\",\n            CompoundSubjectI::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_comma_after_me() {\n        assert_lint_count(\n            \"My mother and me, as usual, went to the park.\",\n            CompoundSubjectI::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/confident.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{Token, patterns::Word};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\n\npub struct Confident {\n    expr: SequenceExpr,\n}\n\nimpl Default for Confident {\n    fn default() -> Self {\n        let pattern = SequenceExpr::with(\n            SequenceExpr::from(|tok: &Token, _source: &[char]| {\n                tok.kind.is_verb() || tok.kind.is_determiner()\n            })\n            .or(Word::new(\"very\")),\n        )\n        .then_whitespace()\n        .t_aco(\"confidant\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for Confident {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.last()?.span;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::ReplaceWith(\"confident\".chars().collect())],\n            message: \"Use the adjective.\".to_owned(),\n            priority: 127,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"This linter detects instances where the noun `confidant` is incorrectly used in place of the adjective `confident`. `Confidant` refers to a trusted person, whereas `confident` describes certainty or self-assurance. The rule suggests replacing `confidant` with `confident` when used in an adjectival context.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Confident;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn describing_person_incorrect() {\n        assert_suggestion_result(\n            \"She felt confidant about her presentation.\",\n            Confident::default(),\n            \"She felt confident about her presentation.\",\n        );\n    }\n\n    #[test]\n    fn describing_person_correct() {\n        assert_lint_count(\n            \"She felt confident about her presentation.\",\n            Confident::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn certainty_incorrect() {\n        assert_suggestion_result(\n            \"I am confidant the test results are accurate.\",\n            Confident::default(),\n            \"I am confident the test results are accurate.\",\n        );\n    }\n\n    #[test]\n    fn certainty_correct() {\n        assert_lint_count(\n            \"I am confident the test results are accurate.\",\n            Confident::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn demeanor_incorrect() {\n        assert_suggestion_result(\n            \"He walked to the stage with a confidant stride.\",\n            Confident::default(),\n            \"He walked to the stage with a confident stride.\",\n        );\n    }\n\n    #[test]\n    fn demeanor_correct() {\n        assert_lint_count(\n            \"He walked to the stage with a confident stride.\",\n            Confident::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn professional_incorrect() {\n        assert_suggestion_result(\n            \"You should sound confidant during job interviews.\",\n            Confident::default(),\n            \"You should sound confident during job interviews.\",\n        );\n    }\n\n    #[test]\n    fn professional_correct() {\n        assert_lint_count(\n            \"You should sound confident during job interviews.\",\n            Confident::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn assured_tone_incorrect() {\n        assert_suggestion_result(\n            \"Present your argument in a confidant, persuasive manner.\",\n            Confident::default(),\n            \"Present your argument in a confident, persuasive manner.\",\n        );\n    }\n\n    #[test]\n    fn assured_tone_correct() {\n        assert_lint_count(\n            \"Present your argument in a confident, persuasive manner.\",\n            Confident::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn extra_text_between() {\n        assert_suggestion_result(\n            \"She felt very confidant about her presentation.\",\n            Confident::default(),\n            \"She felt very confident about her presentation.\",\n        );\n    }\n\n    #[test]\n    fn linking_verb_was_confidant() {\n        assert_suggestion_result(\n            \"She was confidant about her presentation.\",\n            Confident::default(),\n            \"She was confident about her presentation.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/correct_number_suffix.rs",
    "content": "use super::{Lint, LintKind, Linter, Suggestion};\nuse crate::{Document, OrdinalSuffix, Span, TokenKind};\nuse crate::{Number, TokenStringExt};\n\n/// Detect incorrect number suffix (e.g. \"2st\").\n#[derive(Debug, Clone, Copy, Default)]\npub struct CorrectNumberSuffix;\n\nimpl Linter for CorrectNumberSuffix {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut output = Vec::new();\n\n        for number_tok in document.iter_numbers() {\n            let Some(suffix_span) = Span::new_with_len(number_tok.span.end, 2).pulled_by(2) else {\n                continue;\n            };\n\n            if let TokenKind::Number(Number {\n                value,\n                suffix: Some(suffix),\n                ..\n            }) = number_tok.kind\n                && let Some(correct_suffix) = OrdinalSuffix::correct_suffix_for(value)\n                && suffix != correct_suffix\n            {\n                output.push(Lint {\n                    span: suffix_span,\n                    lint_kind: LintKind::Miscellaneous,\n                    message: \"This number needs a different suffix to sound right.\".to_string(),\n                    suggestions: vec![Suggestion::ReplaceWith(correct_suffix.to_chars().to_vec())],\n                    ..Default::default()\n                })\n            }\n        }\n\n        output\n    }\n\n    fn description(&self) -> &'static str {\n        \"When making quick edits, it is common for authors to change the value of a number without changing its suffix. This rule looks for these cases, for example: `2st`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::CorrectNumberSuffix;\n    use crate::linting::tests::assert_lint_count;\n\n    #[test]\n    fn passes_correct_cases() {\n        assert_lint_count(\"2nd\", CorrectNumberSuffix, 0);\n        assert_lint_count(\"101st\", CorrectNumberSuffix, 0);\n        assert_lint_count(\"1012th\", CorrectNumberSuffix, 0);\n    }\n\n    #[test]\n    fn detects_incorrect_cases() {\n        assert_lint_count(\"2st\", CorrectNumberSuffix, 1);\n        assert_lint_count(\"101nd\", CorrectNumberSuffix, 1);\n        assert_lint_count(\"1012rd\", CorrectNumberSuffix, 1);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/criteria_phenomena.rs",
    "content": "use super::Suggestion;\nuse super::expr_linter::ExprLinter;\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::linting::LintKind;\nuse crate::linting::expr_linter::Chunk;\nuse crate::patterns::WordSet;\nuse crate::{Lint, Lrc, Token, TokenStringExt};\n\n/// Linter that checks if 'criteria' or 'phenomena' is used as singular.\npub struct CriteriaPhenomena {\n    expr: SequenceExpr,\n    plural_words: Lrc<WordSet>,\n    singular_modifiers: Lrc<WordSet>,\n}\n\nimpl CriteriaPhenomena {\n    fn new() -> Self {\n        let plural_words = Lrc::new(WordSet::new(&[\"criteria\", \"phenomena\"]));\n\n        let singular_modifiers = Lrc::new(WordSet::new(&[\"this\", \"that\", \"a\", \"one\"]));\n\n        Self {\n            expr: SequenceExpr::with(singular_modifiers.clone())\n                .then_whitespace()\n                .then(plural_words.clone()),\n            plural_words,\n            singular_modifiers,\n        }\n    }\n}\n\nimpl ExprLinter for CriteriaPhenomena {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let mut second_word: String = matched_tokens[2]\n            .span\n            .get_content(source)\n            .iter()\n            .copied()\n            .collect();\n        second_word.make_ascii_lowercase();\n\n        let suggestions = match second_word.as_str() {\n            \"criteria\" => vec![Suggestion::ReplaceWith(\"criterion\".chars().collect())],\n            \"phenomena\" => vec![Suggestion::ReplaceWith(\"phenomenon\".chars().collect())],\n            _ => panic!(\"Don't know what to say about '{second_word}'!\"),\n        };\n\n        Some(Lint {\n            span: matched_tokens.span()?,\n            lint_kind: LintKind::Repetition,\n            message: \"You used a plural noun as singular.\".to_owned(),\n            priority: 63,\n            suggestions,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"The words “criteria” and “phenomena” are the plurals of “criterion” and “phenomenon”, respectively. They are often incorrectly used as singular.\"\n    }\n}\n\nimpl Default for CriteriaPhenomena {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::CriteriaPhenomena;\n    use crate::linting::tests::assert_lint_count;\n\n    #[test]\n    fn can_detect_incorrect_criteria() {\n        assert_lint_count(\n            \"...One criteria is essential...\",\n            CriteriaPhenomena::new(),\n            1,\n        )\n    }\n\n    #[test]\n    fn can_detect_incorrect_phenomena() {\n        assert_lint_count(\n            \"...I would like to see that phenomena.\",\n            CriteriaPhenomena::new(),\n            1,\n        )\n    }\n\n    #[test]\n    fn allows_correct_criteria() {\n        assert_lint_count(\n            \"...She disagrees with those criteria.\",\n            CriteriaPhenomena::new(),\n            0,\n        )\n    }\n\n    #[test]\n    fn allows_correct_phenomena() {\n        assert_lint_count(\n            \"...Many phenomena were on display.\",\n            CriteriaPhenomena::new(),\n            0,\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/cure_for.rs",
    "content": "use crate::{\n    Span, Token,\n    expr::{Expr, SequenceExpr},\n    linting::expr_linter::Chunk,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::DerivedFrom,\n};\n\npub struct CureFor {\n    expr: SequenceExpr,\n}\n\nimpl Default for CureFor {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(DerivedFrom::new_from_str(\"cure\"))\n            .t_ws()\n            .t_aco(\"against\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for CureFor {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let against = matched_tokens.last()?;\n\n        let template: Vec<char> = against.span.get_content(source).to_vec();\n        let suggestion = Suggestion::replace_with_match_case_str(\"for\", &template);\n\n        Some(Lint {\n            span: Span::new(against.span.start, against.span.end),\n            lint_kind: LintKind::Usage,\n            suggestions: vec![suggestion],\n            message: \"Prefer `cure for` when describing a treatment target.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Flags `cure against` and prefers the standard `cure for` pairing.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::CureFor;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_simple_cure_against() {\n        assert_suggestion_result(\n            \"Researchers sought a cure against the stubborn illness.\",\n            CureFor::default(),\n            \"Researchers sought a cure for the stubborn illness.\",\n        );\n    }\n\n    #[test]\n    fn corrects_plural_cures_against() {\n        assert_suggestion_result(\n            \"Doctors insist this serum cures against the new variant.\",\n            CureFor::default(),\n            \"Doctors insist this serum cures for the new variant.\",\n        );\n    }\n\n    #[test]\n    fn corrects_past_participle_cured_against() {\n        assert_suggestion_result(\n            \"The remedy was cured against the infection last spring.\",\n            CureFor::default(),\n            \"The remedy was cured for the infection last spring.\",\n        );\n    }\n\n    #[test]\n    fn corrects_uppercase_against() {\n        assert_suggestion_result(\n            \"We still trust the cure AGAINST the dreaded plague.\",\n            CureFor::default(),\n            \"We still trust the cure FOR the dreaded plague.\",\n        );\n    }\n\n    #[test]\n    fn corrects_at_sentence_start() {\n        assert_suggestion_result(\n            \"Cure against that condition became the rallying cry.\",\n            CureFor::default(),\n            \"Cure for that condition became the rallying cry.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_cure_for() {\n        assert_lint_count(\n            \"They finally found a cure for the fever.\",\n            CureFor::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_cure_from() {\n        assert_lint_count(\n            \"A cure from this rare herb is on the horizon.\",\n            CureFor::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_with_comma() {\n        assert_lint_count(\n            \"A cure, against all odds, appeared in the files.\",\n            CureFor::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_unrelated_against() {\n        assert_lint_count(\n            \"Travelers stand against the roaring wind on the cliffs.\",\n            CureFor::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_secure_against() {\n        assert_lint_count(\n            \"The fortress stayed secure against the invaders.\",\n            CureFor::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/currency_placement.rs",
    "content": "use itertools::Itertools;\n\nuse crate::{Document, Span, Token, TokenStringExt, remove_overlaps};\n\nuse super::{Lint, LintKind, Linter, Suggestion};\n\n#[derive(Debug, Default)]\npub struct CurrencyPlacement {}\n\nimpl Linter for CurrencyPlacement {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for chunk in document.iter_chunks() {\n            for (a, b) in chunk.iter().tuple_windows() {\n                lints.extend(generate_lint_for_tokens(a, b, document));\n            }\n\n            for (p, a, b, c) in chunk.iter().tuple_windows() {\n                if !b.kind.is_whitespace() || p.kind.is_currency() {\n                    continue;\n                }\n\n                lints.extend(generate_lint_for_tokens(a, c, document));\n            }\n        }\n\n        remove_overlaps(&mut lints);\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"The location of currency symbols varies by country. The rule looks for and corrects improper positioning.\"\n    }\n}\n\n// Given two tokens that may have an error, check if they do and create a [`Lint`].\nfn generate_lint_for_tokens(a: &Token, b: &Token, document: &Document) -> Option<Lint> {\n    let punct = a.kind.as_punctuation().or(b.kind.as_punctuation())?;\n    let currency = punct.as_currency()?;\n\n    let number = a.kind.as_number().or(b.kind.as_number())?;\n\n    let span = Span::new(a.span.start, b.span.end);\n\n    let correct: Vec<_> = currency.format_amount(number).chars().collect();\n    let actual = document.get_span_content(&span);\n\n    if correct != actual {\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Formatting,\n            suggestions: vec![Suggestion::ReplaceWith(correct)],\n            message: \"The position of the currency symbol matters.\".to_string(),\n            priority: 63,\n        })\n    } else {\n        None\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{\n        assert_lint_count, assert_markdown_suggestion_result, assert_suggestion_result,\n    };\n\n    use super::CurrencyPlacement;\n\n    #[test]\n    fn eof() {\n        assert_suggestion_result(\n            \"It was my last bill worth more than 4$.\",\n            CurrencyPlacement::default(),\n            \"It was my last bill worth more than $4.\",\n        );\n    }\n\n    #[test]\n    fn blog_title_allows_correct() {\n        assert_lint_count(\"The Best $25 I Ever Spent\", CurrencyPlacement::default(), 0);\n    }\n\n    #[test]\n    fn blog_title() {\n        assert_suggestion_result(\n            \"The Best 25$ I Ever Spent\",\n            CurrencyPlacement::default(),\n            \"The Best $25 I Ever Spent\",\n        );\n    }\n\n    #[test]\n    fn blog_title_cents() {\n        assert_suggestion_result(\n            \"The Best ¢25 I Ever Spent\",\n            CurrencyPlacement::default(),\n            \"The Best 25¢ I Ever Spent\",\n        );\n    }\n\n    #[test]\n    fn blog_title_with_space() {\n        assert_suggestion_result(\n            \"The Best 25   $ I Ever Spent\",\n            CurrencyPlacement::default(),\n            \"The Best $25 I Ever Spent\",\n        );\n    }\n\n    #[test]\n    fn multiple_dollar_markdown() {\n        assert_markdown_suggestion_result(\n            \"They were either 25\\\\$ 24\\\\$ or 23\\\\$.\",\n            CurrencyPlacement::default(),\n            \"They were either $25 $24 or $23.\",\n        );\n    }\n\n    #[test]\n    fn multiple_dollar_plain_english() {\n        assert_suggestion_result(\n            \"They were either 25$ 24$ or 23$.\",\n            CurrencyPlacement::default(),\n            \"They were either $25 $24 or $23.\",\n        );\n    }\n\n    #[test]\n    fn multiple_pound() {\n        assert_suggestion_result(\n            \"They were either 25£ 24£ or 23£.\",\n            CurrencyPlacement::default(),\n            \"They were either £25 £24 or £23.\",\n        );\n    }\n\n    #[test]\n    fn suffix() {\n        assert_suggestion_result(\n            \"It was my 20th$.\",\n            CurrencyPlacement::default(),\n            \"It was my $20th.\",\n        );\n    }\n\n    #[test]\n    fn seven_even_two_decimal_clean() {\n        assert_lint_count(\"$7.00\", CurrencyPlacement::default(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/damages.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Sentence},\n};\n\nstatic KEYWORDS: &[&str] = &[\n    \"case\",\n    \"cases\",\n    \"claim\",\n    \"claims\",\n    \"judgment\",\n    \"judgments\",\n    \"liabilities\",\n    \"liability\",\n    \"liable\",\n    \"settlement\",\n    \"settlements\",\n    \"warranty\",\n];\n\npub struct Damages {\n    expr: SequenceExpr,\n}\n\nimpl Default for Damages {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"damages\", \"damage\"]),\n        }\n    }\n}\n\nimpl ExprLinter for Damages {\n    type Unit = Sentence;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        let (pretoks, postoks) = ctx?;\n        let damage_idx = 0;\n        let damage_tok = &toks[damage_idx];\n        let damage_span = damage_tok.span;\n        let damage_chars = damage_span.get_content(src);\n\n        // Singular noun/verb lemma is not an error but during development we'll print uses of it\n        //  to observe its context.\n        if damage_chars.eq_ignore_ascii_case_chars(&['d', 'a', 'm', 'a', 'g', 'e']) {\n            return None;\n        }\n\n        // If the word after \"damages\" is a noun or object pronoun, it's the object and \"damages\" is a verb.\n        let next_word_tok = match (postoks.first(), postoks.get(1)) {\n            (Some(sp), Some(w)) if sp.kind.is_whitespace() && w.kind.is_word() => Some(w),\n            _ => None,\n        };\n\n        if next_word_tok.is_some_and(|nwt| nwt.kind.is_object_pronoun() || nwt.kind.is_noun()) {\n            return None;\n        }\n\n        // The word before \"damages\" may help us narrow down whether it's a noun or verb.\n        let prev_word_tok = match (pretoks.get(pretoks.len() - 2), pretoks.last()) {\n            (Some(w), Some(sp)) if sp.kind.is_whitespace() && w.kind.is_word() => Some(w),\n            _ => None,\n        };\n\n        #[derive(PartialEq)]\n        enum CanPrecede {\n            Unknown,\n            NeitherNounNorVerb,\n            Noun,\n            Verb,\n            EitherNounOrVerb,\n        }\n\n        // Try to disambiguate whether \"damages\" is a noun or verb.\n        let can_precede = prev_word_tok.map_or(CanPrecede::Unknown, |prev_word| {\n            let mut can: CanPrecede = CanPrecede::Unknown;\n\n            if (prev_word.kind.is_adjective()\n                || prev_word.kind.is_determiner()\n                || prev_word.kind.is_preposition())\n                && !prev_word\n                    .span\n                    .get_content(src)\n                    .eq_ignore_ascii_case_chars(&['t', 'o'])\n            {\n                can = CanPrecede::Noun;\n            }\n\n            if prev_word.kind.is_auxiliary_verb() {\n                can = if can == CanPrecede::Noun {\n                    CanPrecede::EitherNounOrVerb\n                } else {\n                    CanPrecede::Verb\n                };\n            }\n\n            can\n        });\n\n        if can_precede == CanPrecede::Verb {\n            return None;\n        }\n\n        // We now know \"damages\" isn't unambiguously a verb, but it could still be an ambiguous verb-noun.\n        // Or it could be a noun. Or it could still be unknown.\n\n        // Check if it's the object of the verb \"to pay\"\n        let pay_det = SequenceExpr::word_set(&[\"paid\", \"pay\", \"paying\", \"pays\"])\n            .then_optional(SequenceExpr::default().t_ws().then_determiner())\n            .t_ws();\n\n        if pretoks\n            .windows(2)\n            .enumerate()\n            .rev()\n            .take_while(|(i, _)| pay_det.run(*i, pretoks, src).is_none())\n            .count()\n            < pretoks.len() / 2\n        {\n            return None;\n        }\n\n        // Check all the tokens for words that are used in the legal compesation context\n        // TODO: this fails when \"damages\" is misuses in a diclaimer:\n        // 1. \"If you encounter any issues, errors, or damages resulting from the use of these templates,\n        //     the repository author assumes no responsibility or liability.\"\n        // 2. \"The author will not be liable for any losses and/or damages in connection with the use of our website\"\n        if pretoks.iter().any(|t| {\n            t.span\n                .get_content(src)\n                .eq_any_ignore_ascii_case_str(KEYWORDS)\n        }) || postoks.iter().any(|t| {\n            t.span\n                .get_content(src)\n                .eq_any_ignore_ascii_case_str(KEYWORDS)\n        }) {\n            return None;\n        }\n\n        Some(Lint {\n            span: damage_span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                damage_chars[..6].to_vec(),\n                damage_chars,\n            )],\n            message: \"Singular `damage` is correct when not refering to a court case.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Checks for plural `damages` not in the context of a court case.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Damages;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    // Examples of the error from GitHub:\n\n    #[test]\n    fn fix_robust_against_damages_by_prev_preposition() {\n        assert_suggestion_result(\n            \"Flow networks robust against damages are simple model networks described in a series of publications by Kaluza et al.\",\n            Damages::default(),\n            \"Flow networks robust against damage are simple model networks described in a series of publications by Kaluza et al.\",\n        );\n    }\n\n    #[test]\n    fn fix_vehicle_damages_on_a_car_by_fall_through() {\n        assert_suggestion_result(\n            \"POC to select vehicle damages on a car and mark the severity - sudheeshcm/vehicle-damage-selector.\",\n            Damages::default(),\n            \"POC to select vehicle damage on a car and mark the severity - sudheeshcm/vehicle-damage-selector.\",\n        );\n    }\n\n    #[test]\n    fn fix_damages_on_mangoes() {\n        assert_suggestion_result(\n            \"This is a web application that detects damages on mangoes using a TensorFlow model with Django as the frontend framework\",\n            Damages::default(),\n            \"This is a web application that detects damage on mangoes using a TensorFlow model with Django as the frontend framework\",\n        );\n    }\n\n    #[test]\n    fn fix_types_of_damages_of_roads() {\n        assert_suggestion_result(\n            \"Detecting different types of damages of roads like cracks and potholes for the given image/video of the road.\",\n            Damages::default(),\n            \"Detecting different types of damage of roads like cracks and potholes for the given image/video of the road.\",\n        );\n    }\n\n    // Examples from GitHub where it seems to be used correctly in regard to financial compensation:\n\n    // TODO: would the word \"calculate\" before \"damages\" be a good heuristic?\n    #[test]\n    fn ignore_damages_in_lost_chance_cases() {\n        assert_no_lints(\n            \"Code used for calculating damages in lost chance cases.\",\n            Damages::default(),\n        );\n    }\n\n    #[test]\n    fn ignore_claim_for_damages() {\n        assert_no_lints(\n            \"Where the dispute involves a claim for damages in respect of a motor accident for cost of rental of a replacement vehicle\",\n            Damages::default(),\n        );\n    }\n\n    #[test]\n    fn ignore_pay_damages() {\n        assert_no_lints(\n            \"Under this section, the Commercial Contributor would have to\n            defend claims against the other Contributors related to those\n            performance claims and warranties, and if a court requires any other\n            Contributor to pay any damages as a result, the Commercial Contributor\n            must pay those damages.\",\n            Damages::default(),\n        );\n    }\n\n    // Examples from GitHub where it's not an error but a verb:\n\n    #[test]\n    fn ignore_damages_them() {\n        assert_no_lints(\n            \"Profiles pb's and damages them when their runtime goes over a set value - sirhamsteralot/HaE-PBLimiter.\",\n            Damages::default(),\n        );\n    }\n\n    #[test]\n    fn ignore_damages_firefox() {\n        assert_no_lints(\n            \"Opening Wayland-native terminal damages Firefox\",\n            Damages::default(),\n        );\n    }\n\n    #[test]\n    fn ignore_damages_underlaying_windows() {\n        assert_no_lints(\n            \"Open File Requester damages underlaying windows when moved\",\n            Damages::default(),\n        );\n    }\n\n    // Examples from GitHub that are too hard to call - maybe they are talking about financial compensation?\n\n    #[test]\n    #[ignore = \"too close to call for now\"]\n    fn ignore_estimate_the_damages_and_the_damages_result() {\n        assert_no_lints(\n            \"The goal is to estimate the damages of each link in the Graph object using the Damages result (estimating the damages for each segment of a Network).\",\n            Damages::default(),\n        );\n    }\n\n    // https://github.com › dpasmat › cartel-damages-inference\n    #[test]\n    #[ignore = \"too close to call for now\"]\n    fn ignore_damages_inference() {\n        assert_no_lints(\n            \"This repository contains code to conduct statistical inference in cartel damages estimation. It will be updated to include a Stata .do file which approximates the standard error of total damages from a fixed effects panel data model, using the delta method.\",\n            Damages::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"too close to call for now\"]\n    fn ignore_received_errors() {\n        assert_no_lints(\n            \"Financial damages caused by received errors $$$$.\",\n            Damages::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"too close to call for now\"]\n    fn ignore_asset_level_damages() {\n        assert_no_lints(\n            \"It would be useful to be able to see asset-level damages after running FDA 2.0.\",\n            Damages::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/dashes.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\nconst EN_DASH: char = '–';\nconst EM_DASH: char = '—';\n\npub struct Dashes {\n    expr: LongestMatchOf,\n}\n\nimpl Default for Dashes {\n    fn default() -> Self {\n        let en_dash = SequenceExpr::default().then_hyphen().then_hyphen();\n        let em_dash_or_longer = SequenceExpr::default()\n            .then_hyphen()\n            .then_hyphen()\n            .then_one_or_more_hyphens();\n\n        let pattern = LongestMatchOf::new(vec![Box::new(em_dash_or_longer), Box::new(en_dash)]);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for Dashes {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let lint_kind = LintKind::Formatting;\n\n        match matched_tokens.len() {\n            2 => Some(Lint {\n                span,\n                lint_kind,\n                suggestions: vec![Suggestion::ReplaceWith(vec![EN_DASH])],\n                message: \"Replace these two hyphens with an en dash (–).\".to_owned(),\n                priority: 63,\n            }),\n            3 => Some(Lint {\n                span,\n                lint_kind,\n                suggestions: vec![Suggestion::ReplaceWith(vec![EM_DASH])],\n                message: \"Replace these three hyphens with an em dash (—).\".to_owned(),\n                priority: 63,\n            }),\n            4.. => None, // Ignore longer hyphen sequences.\n            _ => panic!(\"Received unexpected number of tokens.\"),\n        }\n    }\n\n    fn description(&self) -> &'static str {\n        \"Writers often type `--` or `---` expecting their editor to convert them into proper dashes. Replace these sequences with the correct characters: use an en dash (–) for ranges or connections and an em dash (—) for a break in thought.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_suggestion_count, assert_suggestion_result};\n\n    use super::Dashes;\n    use super::{EM_DASH, EN_DASH};\n\n    #[test]\n    fn catches_en_dash() {\n        assert_suggestion_result(\n            \"pre--Industrial Revolution\",\n            Dashes::default(),\n            &format!(\"pre{EN_DASH}Industrial Revolution\"),\n        );\n    }\n\n    #[test]\n    fn catches_em_dash() {\n        assert_suggestion_result(\n            \"'There is no box' --- Scott\",\n            Dashes::default(),\n            &format!(\"'There is no box' {EM_DASH} Scott\"),\n        );\n    }\n\n    #[test]\n    fn no_overlaps() {\n        assert_suggestion_count(\"'There is no box' --- Scott\", Dashes::default(), 1);\n    }\n\n    #[test]\n    fn no_lint_for_long_hyphen_sequences() {\n        assert_suggestion_count(\"'There is no box' ------ Scott\", Dashes::default(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/day_and_age.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Span, Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct DayAndAge {\n    expr: SequenceExpr,\n}\n\nimpl Default for DayAndAge {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"this\", \"these\"])\n                .t_ws()\n                .then_word_set(&[\"day\", \"days\"])\n                .t_ws()\n                .then_word_set(&[\"and\", \"in\", \"an\", \"on\"])\n                .t_ws()\n                .then_word_set(&[\"age\", \"ages\"]),\n        }\n    }\n}\n\nimpl ExprLinter for DayAndAge {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Fixes wrong variants of the idiom `in this day and age`.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        main_toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        let before = ctx?.0;\n        let prep_span = if let (Some(penult), Some(last)) = (before.get_rel(-2), before.get_rel(-1))\n            && last.kind.is_whitespace()\n            && (penult.kind.is_preposition()\n                || penult\n                    .span\n                    .get_content(src)\n                    .eq_any_ignore_ascii_case_chars(&[&['i', 's'], &['i', 't']]))\n        {\n            Some(penult.span)\n        } else {\n            None\n        };\n        let prep_chars = prep_span.map(|span| span.get_content(src));\n        let main_span = main_toks.span()?;\n        let toks = main_toks.iter().step_by(2).collect::<Vec<_>>();\n        let spans = toks.iter().map(|t| t.span).collect::<Vec<_>>();\n        let chars = spans.iter().map(|s| s.get_content(src)).collect::<Vec<_>>();\n\n        let good: &[&[char]] = &[\n            &['t', 'h', 'i', 's'],\n            &['d', 'a', 'y'],\n            &['a', 'n', 'd'],\n            &['a', 'g', 'e'],\n        ];\n\n        let bads: Vec<bool> = chars\n            .iter()\n            .zip(good.iter())\n            .map(|(actual, &good)| !actual.eq_ignore_ascii_case_chars(good))\n            .collect();\n\n        let good_main = !bads.iter().any(|&b| b);\n\n        let (span, replacement): (Span<char>, &str) = if prep_chars\n            .is_some_and(|p| p.eq_ignore_ascii_case_chars(&['s', 'i', 'n', 'c', 'e']))\n        {\n            // \"since\" is a preposition but it's also a conjunction, so keep it but add \"in\" after it\n            (main_span, \"in this day and age\")\n        } else {\n            match (prep_chars, good_main) {\n                // We have a preposition and the idiom is correct\n                (Some(prep_chars), true) => {\n                    // If the preposition is \"in\" or \"for\" there's nothing to fix\n                    if prep_chars.eq_any_ignore_ascii_case_chars(&[&['i', 'n'], &['f', 'o', 'r']]) {\n                        return None;\n                    }\n                    // Otherwise replace the preposition\n                    (prep_span.unwrap(), \"in\")\n                }\n                // We have a preposition but the idiom is wrong\n                (Some(_), false) => (\n                    Span::new(prep_span.unwrap().start, main_span.end),\n                    \"in this day and age\",\n                ),\n                // We only need to insert \"in\" but since we have common Suggestion logic we'll replace the whole thing\n                (None, true) => (main_span, \"in this day and age\"),\n                // The preposition is missing and the idiom is wrong, replace the whole thing\n                (None, false) => (main_span, \"in this day and age\"),\n            }\n        };\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                replacement.chars().collect(),\n                span.get_content(src),\n            )],\n            message: \"The correct idiom is `in this day and age`.\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::DayAndAge;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    // True negatives\n\n    #[test]\n    fn allow_in_this_day_and_age() {\n        assert_no_lints(\n            \"I do belive in this day and age with the amount of printer on the market \",\n            DayAndAge::default(),\n        );\n    }\n\n    #[test]\n    fn for_this_day_and_age_seems_to_be_acceptable() {\n        assert_no_lints(\n            \"As for my specs, I understand that my PC is quite underpowered for this day and age, but I'd say it's still within the hardware combos that ...\",\n            DayAndAge::default(),\n        );\n    }\n\n    // True positives\n\n    #[test]\n    fn at_this_day_and_age() {\n        assert_suggestion_result(\n            \"How would one add diagnostics to the compiler at this day and age?\",\n            DayAndAge::default(),\n            \"How would one add diagnostics to the compiler in this day and age?\",\n        );\n    }\n\n    #[test]\n    fn by_this_day_in_age() {\n        assert_suggestion_result(\n            \"Don't most people by this day in age, just have a spare laptop in their kitchens\",\n            DayAndAge::default(),\n            \"Don't most people in this day and age, just have a spare laptop in their kitchens\",\n        );\n    }\n\n    #[test]\n    fn in_these_day_and_age() {\n        assert_suggestion_result(\n            \"still don't come with load sharing components built in these day and age.\",\n            DayAndAge::default(),\n            \"still don't come with load sharing components built in this day and age.\",\n        );\n    }\n\n    #[test]\n    fn in_these_days_and_age() {\n        assert_suggestion_result(\n            \"But in these days and age floppies are replaced by USB flash drives.\",\n            DayAndAge::default(),\n            \"But in this day and age floppies are replaced by USB flash drives.\",\n        );\n    }\n\n    #[test]\n    fn in_these_days_in_age() {\n        assert_suggestion_result(\n            \"In these days in age, this is considered as 'heresy'.\",\n            DayAndAge::default(),\n            \"In this day and age, this is considered as 'heresy'.\",\n        );\n    }\n\n    #[test]\n    fn in_this_day_an_age() {\n        assert_suggestion_result(\n            \"but in this day an age things progressed a tad so might it be the time for increasing it?\",\n            DayAndAge::default(),\n            \"but in this day and age things progressed a tad so might it be the time for increasing it?\",\n        );\n    }\n\n    #[test]\n    fn in_this_day_and_ages() {\n        assert_suggestion_result(\n            \"or at least it should be in this day and ages\",\n            DayAndAge::default(),\n            \"or at least it should be in this day and age\",\n        );\n    }\n\n    #[test]\n    fn in_this_day_in_age() {\n        assert_suggestion_result(\n            \"or anything else that in this day in age is useful to have a reminder about\",\n            DayAndAge::default(),\n            \"or anything else that in this day and age is useful to have a reminder about\",\n        );\n    }\n\n    #[test]\n    fn in_this_days_and_age() {\n        assert_suggestion_result(\n            \"We as a whole realize that in this days and age being on social networking has got a sort of ...\",\n            DayAndAge::default(),\n            \"We as a whole realize that in this day and age being on social networking has got a sort of ...\",\n        );\n    }\n\n    #[test]\n    fn is_this_day_and_age_typo() {\n        assert_suggestion_result(\n            \"Agreed, dark mode is a necessity is this day and age.\",\n            DayAndAge::default(),\n            \"Agreed, dark mode is a necessity in this day and age.\",\n        );\n    }\n\n    #[test]\n    fn it_this_day_and_age_typo() {\n        assert_suggestion_result(\n            \"And it this day and age you really shouldn't but asking people to download random files\",\n            DayAndAge::default(),\n            \"And in this day and age you really shouldn't but asking people to download random files\",\n        );\n    }\n\n    #[test]\n    fn of_this_day_and_age() {\n        assert_suggestion_result(\n            \"it is completely incompatible with Juice Shop of this day and age\",\n            DayAndAge::default(),\n            \"it is completely incompatible with Juice Shop in this day and age\",\n        );\n    }\n\n    #[test]\n    fn to_this_day_and_age() {\n        assert_suggestion_result(\n            \"Still can't believe this has to be done in Safari to this day and age with responsive images\",\n            DayAndAge::default(),\n            \"Still can't believe this has to be done in Safari in this day and age with responsive images\",\n        );\n    }\n\n    #[test]\n    fn no_prep_this_day_in_age() {\n        assert_suggestion_result(\n            \"if that is how gpu programming is still done this day in age then id have a very hard time seeing valhalla ever run on a gpu\",\n            DayAndAge::default(),\n            \"if that is how gpu programming is still done in this day and age then id have a very hard time seeing valhalla ever run on a gpu\",\n        );\n    }\n\n    #[test]\n    fn no_prep_these_days_and_ages() {\n        assert_suggestion_result(\n            \"Btw I think you should write React the React Hooks way these days and ages, where you'll never see this keyword` again\",\n            DayAndAge::default(),\n            \"Btw I think you should write React the React Hooks way in this day and age, where you'll never see this keyword` again\",\n        );\n    }\n\n    #[test]\n    fn since_is_a_preposition_but_also_a_conjunction() {\n        assert_suggestion_result(\n            \"and since these days and age storage is usually not a problem, I usually play it safe and just don't bother\",\n            DayAndAge::default(),\n            \"and since in this day and age storage is usually not a problem, I usually play it safe and just don't bother\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/despite_it_is.rs",
    "content": "//! Linter for correcting \"despite\" used with incorrect verb forms.\n//!\n//! Handles cases like \"despite it is\" -> \"despite it being\" or \"despite its being\"\n\nuse crate::{\n    CharStringExt, Token, TokenStringExt,\n    dict_word_metadata::Person,\n    expr::{Expr, SequenceExpr},\n    linting::{\n        ExprLinter, Lint, LintKind, Suggestion,\n        expr_linter::{Chunk, followed_by_word},\n    },\n    patterns::WordSet,\n};\n\n/// Linter that corrects incorrect verb forms after \"despite\".\n///\n/// For example:\n/// - \"despite it is\" -> \"despite it being\" or \"despite its being\"\n/// - \"despite I am\" -> \"despite me being\" or \"despite my being\"\npub struct DespiteItIs {\n    expr: SequenceExpr,\n}\n\nimpl Default for DespiteItIs {\n    fn default() -> Self {\n        let subj = SequenceExpr::default().then_subject_pronoun();\n        let be = WordSet::new(&[\"am\", \"are\", \"is\", \"was\", \"were\"]);\n\n        let expr = SequenceExpr::aco(\"despite\")\n            .t_ws()\n            .then(subj)\n            .t_ws()\n            .then(be);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for DespiteItIs {\n    type Unit = Chunk;\n\n    fn description(&self) -> &'static str {\n        \"Corrects `despite` being used with the wrong form of `is`.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        let next_is_ing = followed_by_word(ctx, |nw| nw.kind.is_verb_progressive_form());\n\n        let subj = toks.get(2)?;\n        let be = toks.get(4)?;\n\n        let subj_kind = &subj.kind;\n\n        // Only handle personal subject pronouns\n        if !(subj_kind.is_personal_pronoun() && subj_kind.is_subject_pronoun()) {\n            return None;\n        }\n\n        let subj_chars = subj.span.get_content(src);\n        let be_chars = be.span.get_content(src);\n        let pron_be_toks = &toks[2..5];\n\n        let subj_pers = subj_kind.get_pronoun_person()?;\n\n        // BUT BUT BUT\n        // despite I  am happy   -> me/my  being happy\n        // despite I  am eating  -> me/my        eating\n        // despite it is big     ->        being\n        //                       -> it/its being big\n        // despite it is running -> it           running\n        //                       -> it/its       running\n\n        let (obj, poss) = match (\n            subj_pers,\n            subj_kind.is_singular_pronoun(),\n            subj_kind.is_plural_pronoun(),\n        ) {\n            (Person::First, true, false) => (\"me\", \"my\"),\n            (Person::First, false, true) => (\"us\", \"our\"),\n            (Person::Second, true, true) => (\"you\", \"your\"),\n            (Person::Third, false, true) => (\"them\", \"their\"),\n            (Person::Third, true, false) => match subj_chars {\n                chs if chs.eq_ignore_ascii_case_chars(&['h', 'e']) => (\"him\", \"his\"),\n                chs if chs.eq_ignore_ascii_case_chars(&['s', 'h', 'e']) => (\"her\", \"her\"),\n                chs if chs.eq_ignore_ascii_case_chars(&['i', 't']) => (\"it\", \"its\"),\n                _ => return None,\n            },\n            _ => return None,\n        };\n\n        let mut suggestions = Vec::with_capacity(3);\n\n        // Special case for \"it\" which can also be omitted\n        if subj_chars.eq_any_ignore_ascii_case_str(&[\"it\", \"they\"]) {\n            suggestions.push(Suggestion::replace_with_match_case_str(\"being\", be_chars));\n        }\n\n        let [obj_vec, poss_vec] = [obj, poss].map(|pron| {\n            if !next_is_ing {\n                format!(\"{} being\", pron).chars().collect()\n            } else {\n                pron.chars().collect()\n            }\n        });\n\n        suggestions.push(Suggestion::replace_with_match_case(obj_vec, be_chars));\n        suggestions.push(Suggestion::replace_with_match_case(poss_vec, be_chars));\n\n        if suggestions.is_empty() {\n            return None;\n        }\n\n        let span_to_replace = pron_be_toks.span()?;\n\n        Some(Lint {\n            span: span_to_replace,\n            lint_kind: LintKind::Grammar,\n            suggestions,\n            message: \"Use the gerund form of the verb after `despite`.\".into(),\n            ..Lint::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::DespiteItIs;\n    use crate::linting::tests::{assert_good_and_bad_suggestions, assert_no_lints};\n\n    #[test]\n    fn despite_i_am() {\n        assert_good_and_bad_suggestions(\n            \"Cronicle shuts down randomly despite I am running simple Python scripts via \\\"Test Plugin\\\"\",\n            DespiteItIs::default(),\n            &[\n                \"Cronicle shuts down randomly despite me running simple Python scripts via \\\"Test Plugin\\\"\",\n                \"Cronicle shuts down randomly despite my running simple Python scripts via \\\"Test Plugin\\\"\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn despite_it_is_available() {\n        assert_good_and_bad_suggestions(\n            \"Actual behavior Extension not installed despite it is available in PECL\",\n            DespiteItIs::default(),\n            &[\n                \"Actual behavior Extension not installed despite being available in PECL\",\n                \"Actual behavior Extension not installed despite it being available in PECL\",\n                \"Actual behavior Extension not installed despite its being available in PECL\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn despite_it_is_detected() {\n        assert_good_and_bad_suggestions(\n            \"FP2 not detected despite it is detected - split brain?\",\n            DespiteItIs::default(),\n            &[\n                \"FP2 not detected despite being detected - split brain?\",\n                \"FP2 not detected despite it being detected - split brain?\",\n                \"FP2 not detected despite its being detected - split brain?\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn despite_i_am_in() {\n        assert_good_and_bad_suggestions(\n            \"My application was rejected due to location basis despite I am in the same city as my campus.\",\n            DespiteItIs::default(),\n            &[\n                \"My application was rejected due to location basis despite me being in the same city as my campus.\",\n                \"My application was rejected due to location basis despite my being in the same city as my campus.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    #[ignore = \"negatives are not handled yet\"]\n    fn despite_it_was_not() {\n        assert_good_and_bad_suggestions(\n            \"despite it was not able to fulfill desired ordering with these modules\",\n            DespiteItIs::default(),\n            &[\n                \"despite it not being able to fulfill desired ordering with these modules\",\n                \"despite its not being able to fulfill desired ordering with these modules\",\n                \"despite not being able to fulfill desired ordering with these modules\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn despite_we_are_using() {\n        assert_good_and_bad_suggestions(\n            \"However, GFW still can decode the content despite we are using overlapped ip fragmentation.\",\n            DespiteItIs::default(),\n            &[\n                \"However, GFW still can decode the content despite us using overlapped ip fragmentation.\",\n                \"However, GFW still can decode the content despite our using overlapped ip fragmentation.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn despite_they_are_already() {\n        assert_good_and_bad_suggestions(\n            \"v5.7.2 keeps adding temperature commands on start_gcode despite they are already present\",\n            DespiteItIs::default(),\n            &[\n                \"v5.7.2 keeps adding temperature commands on start_gcode despite them being already present\",\n                \"v5.7.2 keeps adding temperature commands on start_gcode despite their being already present\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn despite_it_was_removed() {\n        assert_good_and_bad_suggestions(\n            \"Freshwater Research Station is selectable as starting location despite it was removed by Dark Days of the Dead mod\",\n            DespiteItIs::default(),\n            &[\n                \"Freshwater Research Station is selectable as starting location despite being removed by Dark Days of the Dead mod\",\n                // TODO: Freshwater Research Station is selectable as starting location despite having been removed by Dark Days of the Dead mod\n                \"Freshwater Research Station is selectable as starting location despite it being removed by Dark Days of the Dead mod\",\n                // TODO: Freshwater Research Station is selectable as starting location despite it having been removed by Dark Days of the Dead mod\n                \"Freshwater Research Station is selectable as starting location despite its being removed by Dark Days of the Dead mod\",\n                // TODO: Freshwater Research Station is selectable as starting location despite its having been removed by Dark Days of the Dead mod\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn ignore_despite_they_shouldnt() {\n        assert_no_lints(\n            \"Some tools and gears have attack damage values despite they shouldn't\",\n            DespiteItIs::default(),\n        );\n    }\n\n    #[test]\n    fn ignore_despite_i_was_playing() {\n        assert_good_and_bad_suggestions(\n            \"it showed me Maria despite I was playing someone else\",\n            DespiteItIs::default(),\n            &[\n                \"it showed me Maria despite me playing someone else\",\n                \"it showed me Maria despite my playing someone else\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn ignore_despite_they_were_valid() {\n        assert_good_and_bad_suggestions(\n            \"You'll get pages that becomes invalid with time despite they were valid before\",\n            DespiteItIs::default(),\n            &[\n                \"You'll get pages that becomes invalid with time despite being valid before\",\n                \"You'll get pages that becomes invalid with time despite them being valid before\",\n                \"You'll get pages that becomes invalid with time despite their being valid before\",\n            ],\n            &[],\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/despite_of.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct DespiteOf {\n    expr: SequenceExpr,\n}\n\nimpl Default for DespiteOf {\n    fn default() -> Self {\n        let pattern = SequenceExpr::aco(\"despite\")\n            .then_whitespace()\n            .then_exact_word(\"of\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for DespiteOf {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched.span()?;\n        let matched = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![\n                Suggestion::replace_with_match_case_str(\"despite\", matched),\n                Suggestion::replace_with_match_case_str(\"in spite of\", matched)\n            ],\n            message: \"The phrase “despite of” is incorrect. Please use either “despite” or “in spite of” instead.\".to_string(),\n            priority: 126,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects the misuse of `despite of` and suggests the proper alternatives `despite` or `in spite of`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::DespiteOf;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn catches_lowercase() {\n        assert_suggestion_result(\n            \"The team performed well, despite of the difficulties they faced.\",\n            DespiteOf::default(),\n            \"The team performed well, despite the difficulties they faced.\",\n        );\n    }\n\n    #[test]\n    fn catches_different_cases() {\n        assert_lint_count(\n            \"Despite of the rain, we went for a walk.\",\n            DespiteOf::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn likes_correction() {\n        assert_lint_count(\n            \"The team performed well, despite the difficulties they faced. In spite of the rain, we went for a walk.\",\n            DespiteOf::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/determiner_without_noun.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct DeterminerWithoutNoun {\n    expr: SequenceExpr,\n}\n\nimpl Default for DeterminerWithoutNoun {\n    fn default() -> Self {\n        let expr = SequenceExpr::default()\n            .then_kind_where(|kind| kind.is_determiner())\n            .t_ws()\n            .then_conjunction();\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for DeterminerWithoutNoun {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: Vec::<Suggestion>::new(),\n            message: \"A determiner should not be immediately followed by a conjunction.\"\n                .to_string(),\n            priority: 32,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags sequences where a determiner (`a`, `an`, `the`, etc.) is directly followed by a coordinating or subordinating conjunction (`and`, `or`, `but`, `because`, etc.), indicating a missing noun.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::DeterminerWithoutNoun;\n    use crate::linting::tests::assert_lint_count;\n\n    #[test]\n    fn flags_determiner_followed_by_conjunction() {\n        assert_lint_count(\n            \"The and other options were ignored.\",\n            DeterminerWithoutNoun::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn flags_indefinite_article_followed_by_conjunction() {\n        assert_lint_count(\"A because I said so.\", DeterminerWithoutNoun::default(), 1);\n        assert_lint_count(\"An because I said so.\", DeterminerWithoutNoun::default(), 1);\n    }\n\n    #[test]\n    fn allows_correct_use_with_noun() {\n        assert_lint_count(\"The dog barked.\", DeterminerWithoutNoun::default(), 0);\n    }\n\n    #[test]\n    fn allows_determiner_noun_then_conjunction() {\n        assert_lint_count(\n            \"The dog and the cat played.\",\n            DeterminerWithoutNoun::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/did_past.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    char_ext::CharExt,\n    expr::{Expr, FixedPhrase, SequenceExpr},\n    irregular_verbs::IrregularVerbs,\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::WordSet,\n    spell::Dictionary,\n};\n\npub struct DidPast<D> {\n    expr: SequenceExpr,\n    dict: D,\n}\n\nimpl<D> DidPast<D>\nwhere\n    D: Dictionary,\n{\n    pub fn new(dict: D) -> Self {\n        Self {\n            expr: SequenceExpr::longest_of(vec![\n                Box::new(WordSet::new(&[\"did\", \"didn't\", \"didnt\"])),\n                Box::new(FixedPhrase::from_phrase(\"did not\")),\n            ])\n            .then_optional(SequenceExpr::default().t_ws().then_subject_pronoun())\n            .t_ws()\n            // Note that 'simple past forms' may apply only to irregular verbs\n            // Note and that 'past forms' applies to regular verbs where preterite and participle share a form\n            .then_kind_where(|k| {\n                (k.is_verb_simple_past_form() || k.is_verb_past_form()) && !k.is_verb_lemma()\n            }),\n            dict,\n        }\n    }\n\n    fn keep_suggestion_if_lemma(&self, suggs: &mut Vec<Vec<char>>, candidate: &[char]) {\n        if self\n            .dict\n            .get_word_metadata(candidate)\n            .is_some_and(|md| md.is_verb_lemma())\n        {\n            suggs.push(candidate.to_vec());\n        }\n    }\n}\n\nimpl<D> ExprLinter for DidPast<D>\nwhere\n    D: Dictionary,\n{\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects past forms of verbs to their base form, when used together with \\\"did\\\".\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let vspan = toks.last()?.span;\n        let vchars = vspan.get_content(src);\n        let vstr = vspan.get_content_string(src);\n\n        let mut suggs = vec![];\n\n        // Chop -d/-ed off regular verbs\n\n        if vchars.ends_with_ignore_ascii_case_chars(&['d']) {\n            let without_d = &vchars[..vchars.len() - 1];\n\n            if without_d.ends_with_ignore_ascii_case_chars(&['e']) {\n                let without_ed = &without_d[..without_d.len() - 1];\n\n                self.keep_suggestion_if_lemma(&mut suggs, without_ed);\n\n                // If the stem without -ed now ends in -i, try changing that to -y to find the lemma\n                if without_ed.ends_with_ignore_ascii_case_chars(&['i']) {\n                    let mut with_final_y = without_ed[..without_ed.len() - 1].to_vec();\n                    with_final_y.push('y');\n                    self.keep_suggestion_if_lemma(&mut suggs, &with_final_y);\n                }\n\n                // If the stem without -ed ends in a doubled consonant, try with just a single one\n                if without_ed.last().is_some_and(|c| !c.is_vowel()) {\n                    let without_doubled_consonant = without_ed[..without_ed.len() - 1].to_vec();\n                    self.keep_suggestion_if_lemma(&mut suggs, &without_doubled_consonant);\n                }\n            }\n            self.keep_suggestion_if_lemma(&mut suggs, without_d);\n        }\n\n        // Look up irregular verbs\n\n        if let Some(lemma) = IrregularVerbs::curated().get_lemma_for_preterite(&vstr) {\n            suggs.push(lemma.chars().collect());\n        }\n\n        if !suggs.is_empty() {\n            Some(Lint {\n                span: vspan,\n                lint_kind: LintKind::Redundancy,\n                suggestions: suggs\n                    .into_iter()\n                    .map(|s| Suggestion::replace_with_match_case(s, vchars))\n                    .collect(),\n                message: \"Use the base form of the verb with \\\"did\\\".\".to_string(),\n                ..Default::default()\n            })\n        } else {\n            None\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::DidPast;\n    use crate::{\n        linting::tests::{assert_no_lints, assert_suggestion_result},\n        spell::FstDictionary,\n    };\n\n    // Test basic 'true positive' regular verb cases\n\n    // Regular verb where past is lemma+ed\n\n    #[test]\n    fn ed_did_forked() {\n        assert_suggestion_result(\n            \"Did they forked the repo?\",\n            DidPast::new(FstDictionary::curated()),\n            \"Did they fork the repo?\",\n        );\n    }\n\n    // Regular verb where past is lemma+d\n\n    #[test]\n    fn d_did_used() {\n        assert_suggestion_result(\n            \"It didn't used a macro.\",\n            DidPast::new(FstDictionary::curated()),\n            \"It didn't use a macro.\",\n        );\n    }\n\n    // Regular verb where past is lemma -y +ied\n\n    #[test]\n    fn y_did_fried() {\n        assert_suggestion_result(\n            \"I hope that didn't fried any chips!\",\n            DidPast::new(FstDictionary::curated()),\n            \"I hope that didn't fry any chips!\",\n        );\n    }\n\n    // Regular verb where past doubled the final consonant\n\n    #[test]\n    fn doubed_consonant_logged() {\n        assert_suggestion_result(\n            \"There was a segfault but it did logged the error.\",\n            DidPast::new(FstDictionary::curated()),\n            \"There was a segfault but it did log the error.\",\n        );\n    }\n\n    // Test basic 'true positive' irregular verb cases\n\n    #[test]\n    fn did_past() {\n        assert_suggestion_result(\"Did went\", DidPast::new(FstDictionary::curated()), \"Did go\");\n    }\n\n    #[test]\n    fn did_past_with_apostrophe() {\n        assert_suggestion_result(\n            \"Didn't saw\",\n            DidPast::new(FstDictionary::curated()),\n            \"Didn't see\",\n        );\n    }\n\n    #[test]\n    fn didnt_past_no_apostrophe() {\n        assert_suggestion_result(\n            \"Didnt had\",\n            DidPast::new(FstDictionary::curated()),\n            \"Didnt have\",\n        );\n    }\n\n    #[test]\n    fn did_i_heard() {\n        assert_suggestion_result(\n            \"Did I heard\",\n            DidPast::new(FstDictionary::curated()),\n            \"Did I hear\",\n        );\n    }\n\n    #[test]\n    fn did_i_heard_with_apostrophe() {\n        assert_suggestion_result(\n            \"Didn't we heard\",\n            DidPast::new(FstDictionary::curated()),\n            \"Didn't we hear\",\n        );\n    }\n\n    #[test]\n    fn didnt_i_forgot_no_apostrophe() {\n        assert_suggestion_result(\n            \"Didnt he forgot\",\n            DidPast::new(FstDictionary::curated()),\n            \"Didnt he forget\",\n        );\n    }\n\n    // Test basic 'true negative' cases - verb is valid as both lemma and simple past\n\n    #[test]\n    fn ignore_lemma_same_as_past_tense() {\n        assert_no_lints(\"Did read\", DidPast::new(FstDictionary::curated()));\n    }\n\n    // Real-world examples\n\n    #[test]\n    fn fix_did_you_cmae() {\n        assert_suggestion_result(\n            \"How did you came to this\",\n            DidPast::new(FstDictionary::curated()),\n            \"How did you come to this\",\n        );\n    }\n\n    #[test]\n    fn fix_did_you_wrote() {\n        assert_suggestion_result(\n            \"I'm very interested in the script, if you did wrote it.\",\n            DidPast::new(FstDictionary::curated()),\n            \"I'm very interested in the script, if you did write it.\",\n        );\n    }\n\n    #[test]\n    fn fix_didnt_had() {\n        assert_suggestion_result(\n            \"and i DO know that i didnt had any Terracota\",\n            DidPast::new(FstDictionary::curated()),\n            \"and i DO know that i didnt have any Terracota\",\n        );\n    }\n\n    #[test]\n    fn did_you_went() {\n        assert_suggestion_result(\n            \"Did you went out of memory maybe?\",\n            DidPast::new(FstDictionary::curated()),\n            \"Did you go out of memory maybe?\",\n        );\n    }\n\n    #[test]\n    fn fix_did_needed() {\n        assert_suggestion_result(\n            \"since our CI was broken this did needed to be done\",\n            DidPast::new(FstDictionary::curated()),\n            \"since our CI was broken this did need to be done\",\n        );\n    }\n\n    #[test]\n    fn fix_did_thought() {\n        assert_suggestion_result(\n            \"I did thought of adding it as a tooltip on hover\",\n            DidPast::new(FstDictionary::curated()),\n            \"I did think of adding it as a tooltip on hover\",\n        );\n    }\n\n    #[test]\n    fn fix_did_wanted() {\n        assert_suggestion_result(\n            \"I did wanted catch all errors in my previous example.\",\n            DidPast::new(FstDictionary::curated()),\n            \"I did want catch all errors in my previous example.\",\n        );\n    }\n\n    #[test]\n    fn fix_did_not_changed() {\n        assert_suggestion_result(\n            \"freeing space and reboot frequently did not changed anything\",\n            DidPast::new(FstDictionary::curated()),\n            \"freeing space and reboot frequently did not change anything\",\n        );\n    }\n\n    #[test]\n    fn ignore_did_you_read() {\n        assert_no_lints(\n            \"Did You Read the Instructions?\",\n            DidPast::new(FstDictionary::curated()),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/didnt.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\n\npub struct Didnt {\n    expr: SequenceExpr,\n}\n\nimpl Default for Didnt {\n    fn default() -> Self {\n        let pattern = SequenceExpr::default()\n            .then_subject_pronoun()\n            .t_ws()\n            .t_aco(\"dint\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for Didnt {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let suspect = toks.last()?;\n\n        Some(Lint {\n            span: suspect.span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"didn't\",\n                suspect.span.get_content(src),\n            )],\n            message: \"Consider using `didn't` here.\".to_string(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `dint` to `didn't` after subject pronouns.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Didnt;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn corrects_i_dint() {\n        assert_suggestion_result(\n            \"I dint lock the gate.\",\n            Didnt::default(),\n            \"I didn't lock the gate.\",\n        );\n    }\n\n    #[test]\n    fn corrects_you_dint() {\n        assert_suggestion_result(\n            \"You dint look this way.\",\n            Didnt::default(),\n            \"You didn't look this way.\",\n        );\n    }\n\n    #[test]\n    fn corrects_he_dint() {\n        assert_suggestion_result(\n            \"He dint see the sign.\",\n            Didnt::default(),\n            \"He didn't see the sign.\",\n        );\n    }\n\n    #[test]\n    fn corrects_she_dint() {\n        assert_suggestion_result(\n            \"She dint call me back.\",\n            Didnt::default(),\n            \"She didn't call me back.\",\n        );\n    }\n\n    #[test]\n    fn corrects_we_dint() {\n        assert_suggestion_result(\n            \"We dint sleep much.\",\n            Didnt::default(),\n            \"We didn't sleep much.\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_dint() {\n        assert_suggestion_result(\n            \"They dint enjoy the show.\",\n            Didnt::default(),\n            \"They didn't enjoy the show.\",\n        );\n    }\n\n    #[test]\n    fn corrects_it_dint() {\n        assert_suggestion_result(\n            \"It dint rain today.\",\n            Didnt::default(),\n            \"It didn't rain today.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_dint_noun() {\n        assert_no_lints(\"The blow left a small dint in the metal.\", Didnt::default());\n    }\n\n    #[test]\n    fn does_not_flag_quoted_dint() {\n        assert_no_lints(\"He muttered 'dint' under his breath.\", Didnt::default());\n    }\n\n    #[test]\n    fn does_not_flag_past_tense_with_not() {\n        assert_lint_count(\"I did not lock the gate.\", Didnt::default(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/discourse_markers.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::expr::{Expr, FirstMatchOf, FixedPhrase, SequenceExpr};\nuse crate::patterns::UPOSSet;\nuse crate::{Document, Token, TokenStringExt};\n\nuse super::{Lint, LintKind, Linter, Suggestion};\n\npub struct DiscourseMarkers {\n    expr: SequenceExpr,\n}\n\nimpl DiscourseMarkers {\n    pub fn new() -> Self {\n        let phrases = &[\n            \"however\",\n            \"therefore\",\n            \"meanwhile\",\n            \"furthermore\",\n            \"nevertheless\",\n            \"consequently\",\n            \"thus\",\n            \"instead\",\n            \"moreover\",\n            \"honestly\",\n            \"alternatively\",\n            \"frankly\",\n            \"additionally\",\n            \"subsequently\",\n            \"accordingly\",\n            \"otherwise\",\n            \"incidentally\",\n            \"conversely\",\n            \"notwithstanding\",\n            \"hence\",\n            \"indeed\",\n            \"for example\",\n            \"on the other hand\",\n        ];\n\n        let phrases_expr = FirstMatchOf::new(\n            phrases\n                .iter()\n                .map(|text: &&str| Box::new(FixedPhrase::from_phrase(text)) as Box<dyn Expr>)\n                .collect(),\n        );\n\n        Self {\n            expr: SequenceExpr::with(phrases_expr)\n                .t_ws()\n                .then_unless(UPOSSet::new(&[\n                    UPOS::ADJ,\n                    UPOS::ADV,\n                    UPOS::ADP,\n                    UPOS::CCONJ,\n                ])),\n        }\n    }\n\n    fn lint_sentence(&self, sent: &[Token], source: &[char]) -> Option<Lint> {\n        let first_word_idx = sent.iter_word_indices().next()?;\n\n        if let Some(matched_phrase) = self.expr.run(first_word_idx, sent, source) {\n            Some(Lint {\n                span: sent[matched_phrase.start..matched_phrase.end - 2].span()?,\n                lint_kind: LintKind::Punctuation,\n                suggestions: vec![Suggestion::InsertAfter(vec![','])],\n                message: \"Discourse markers at the beginning of a sentence should be followed by a comma.\".into(),\n                priority: 31,\n            })\n        } else {\n            None\n        }\n    }\n}\n\nimpl Default for DiscourseMarkers {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl Linter for DiscourseMarkers {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        document\n            .iter_sentences()\n            .flat_map(|sent| self.lint_sentence(sent, document.get_source()))\n            .collect()\n    }\n\n    fn description(&self) -> &str {\n        \"Flags sentences that begin with a discourse marker but omit the required following comma.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::DiscourseMarkers;\n\n    #[test]\n    fn corrects_frankly() {\n        assert_suggestion_result(\n            \"Frankly I think he is wrong.\",\n            DiscourseMarkers::default(),\n            \"Frankly, I think he is wrong.\",\n        );\n    }\n\n    #[test]\n    fn corrects_however() {\n        assert_suggestion_result(\n            \"However I disagree with your conclusion.\",\n            DiscourseMarkers::default(),\n            \"However, I disagree with your conclusion.\",\n        );\n    }\n\n    #[test]\n    fn corrects_therefore() {\n        assert_suggestion_result(\n            \"Therefore we must act now.\",\n            DiscourseMarkers::default(),\n            \"Therefore, we must act now.\",\n        );\n    }\n\n    #[test]\n    fn corrects_meanwhile() {\n        assert_suggestion_result(\n            \"Meanwhile preparations continued in the background.\",\n            DiscourseMarkers::default(),\n            \"Meanwhile, preparations continued in the background.\",\n        );\n    }\n\n    #[test]\n    fn corrects_furthermore() {\n        assert_suggestion_result(\n            \"Furthermore this approach reduces complexity.\",\n            DiscourseMarkers::default(),\n            \"Furthermore, this approach reduces complexity.\",\n        );\n    }\n\n    #[test]\n    fn corrects_nevertheless() {\n        assert_suggestion_result(\n            \"Nevertheless we persevered despite the odds.\",\n            DiscourseMarkers::default(),\n            \"Nevertheless, we persevered despite the odds.\",\n        );\n    }\n\n    #[test]\n    fn corrects_consequently() {\n        assert_suggestion_result(\n            \"Consequently the system halted unexpectedly.\",\n            DiscourseMarkers::default(),\n            \"Consequently, the system halted unexpectedly.\",\n        );\n    }\n\n    #[test]\n    fn corrects_thus() {\n        assert_suggestion_result(\n            \"Thus we arrive at the final verdict.\",\n            DiscourseMarkers::default(),\n            \"Thus, we arrive at the final verdict.\",\n        );\n    }\n\n    #[test]\n    fn allows_thus_far() {\n        assert_no_lints(\n            \"Thus far there have been no problems.\",\n            DiscourseMarkers::default(),\n        );\n    }\n\n    #[test]\n    fn corrects_instead() {\n        assert_suggestion_result(\n            \"Instead he chose a different path.\",\n            DiscourseMarkers::default(),\n            \"Instead, he chose a different path.\",\n        );\n    }\n\n    #[test]\n    fn corrects_moreover() {\n        assert_suggestion_result(\n            \"Moreover this solution is more efficient.\",\n            DiscourseMarkers::default(),\n            \"Moreover, this solution is more efficient.\",\n        );\n    }\n\n    #[test]\n    fn corrects_alternatively() {\n        assert_suggestion_result(\n            \"Alternatively we could defer the decision.\",\n            DiscourseMarkers::default(),\n            \"Alternatively, we could defer the decision.\",\n        );\n    }\n\n    #[test]\n    fn no_suggestion_if_comma_present() {\n        assert_no_lints(\n            \"However, I disagree with your point.\",\n            DiscourseMarkers::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_for_mid_sentence_marker() {\n        assert_no_lints(\n            \"I said however I would consider it.\",\n            DiscourseMarkers::default(),\n        );\n    }\n\n    #[test]\n    fn preserves_whitespace() {\n        assert_suggestion_result(\n            \"However   I disagree.\",\n            DiscourseMarkers::default(),\n            \"However,   I disagree.\",\n        );\n    }\n\n    #[test]\n    fn corrects_semicolon_case() {\n        assert_suggestion_result(\n            \"However I disagree.\",\n            DiscourseMarkers::default(),\n            \"However, I disagree.\",\n        );\n    }\n\n    #[test]\n    fn corrects_multiple_sentences() {\n        assert_suggestion_result(\n            \"However I disagree. Therefore I propose an alternative.\",\n            DiscourseMarkers::default(),\n            \"However, I disagree. Therefore, I propose an alternative.\",\n        );\n    }\n\n    #[test]\n    fn allows_single_word_sentence() {\n        assert_no_lints(\"Thus\", DiscourseMarkers::default());\n    }\n\n    #[test]\n    fn corrects_for_example() {\n        assert_suggestion_result(\n            \"For example I recommend updating the configuration.\",\n            DiscourseMarkers::default(),\n            \"For example, I recommend updating the configuration.\",\n        );\n    }\n\n    #[test]\n    fn no_suggestion_if_comma_after_for_example() {\n        assert_no_lints(\n            \"For example, I recommend updating the configuration.\",\n            DiscourseMarkers::default(),\n        );\n    }\n\n    #[test]\n    fn preserves_whitespace_for_example() {\n        assert_suggestion_result(\n            \"For example   the outcome was unexpected.\",\n            DiscourseMarkers::default(),\n            \"For example,   the outcome was unexpected.\",\n        );\n    }\n\n    #[test]\n    fn corrects_on_the_other_hand() {\n        assert_suggestion_result(\n            \"On the other hand we could delay the deployment.\",\n            DiscourseMarkers::default(),\n            \"On the other hand, we could delay the deployment.\",\n        );\n    }\n\n    #[test]\n    fn no_lint_for_mid_sentence_on_the_other_hand() {\n        assert_no_lints(\n            \"We might postpone, on the other hand this introduces risk.\",\n            DiscourseMarkers::default(),\n        );\n    }\n\n    #[test]\n    fn check_2966_is_avoided() {\n        assert_no_lints(\n            \"Honestly and graciously convince someone of something.\",\n            DiscourseMarkers::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/disjoint_prefixes.rs",
    "content": "use crate::{\n    Lint, Token, TokenKind, TokenStringExt,\n    expr::{All, Expr, OwnedExprExt, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    spell::Dictionary,\n};\n\npub struct DisjointPrefixes<D> {\n    expr: All,\n    dict: D,\n}\n\n// Known false positives not to join to these prefixes:\nconst OUT_EXCEPTIONS: &[&str] = &[\"boxes\", \"facing\", \"live\", \"numbers\", \"playing\"];\nconst OVER_EXCEPTIONS: &[&str] = &[\"all\", \"joy\", \"long\", \"night\", \"reading\", \"steps\", \"time\"];\nconst UNDER_EXCEPTIONS: &[&str] = &[\"development\", \"mine\"];\nconst UP_EXCEPTIONS: &[&str] = &[\"loading\", \"right\", \"state\", \"time\", \"trend\"];\n\nimpl<D> DisjointPrefixes<D>\nwhere\n    D: Dictionary,\n{\n    pub fn new(dict: D) -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\n                // These prefixes rarely cause false positives\n                \"anti\", \"auto\", \"bi\", \"counter\", \"de\", \"dis\", \"extra\", \"fore\", \"hyper\", \"il\", \"im\",\n                \"inter\", \"ir\", \"macro\", \"mal\", \"micro\", \"mid\", \"mini\", \"mis\", \"mono\", \"multi\",\n                \"non\", \"omni\", \"post\", \"pre\", \"pro\", \"re\", \"semi\", \"sub\", \"super\", \"trans\", \"tri\",\n                \"ultra\", \"un\", \"uni\",\n                // \"co\" has one very common false positive: co-op != coop\n                \"co\",\n                // These prefixes are all also words in their own right, which leads to more false positives.\n                \"out\", \"over\", \"under\",\n                \"up\",\n                // These prefixes are commented out due to too many false positives\n                // or incorrect transformations:\n                // \"a\": a live -> alive\n                // \"in\": in C -> inc; in action -> inaction\n            ])\n            .t_ws_h()\n            .then_kind_either(TokenKind::is_verb, TokenKind::is_noun)\n            .then_optional_hyphen()\n            .and_not(SequenceExpr::any_of(vec![\n                // No trailing hyphen. Ex: Custom patterns take precedence over built-in patterns -> overbuilt\n                Box::new(SequenceExpr::anything().t_any().t_any().then_hyphen()),\n                // Don't merge \"co op\" whether separated by space or hyphen.\n                Box::new(SequenceExpr::aco(\"co\").t_any().t_set(&[\"op\", \"ops\"])),\n                // Merge these if they're separated by hyphen, but not space.\n                Box::new(SequenceExpr::aco(\"out\").t_ws().t_set(OUT_EXCEPTIONS)),\n                Box::new(SequenceExpr::aco(\"over\").t_ws().t_set(OVER_EXCEPTIONS)),\n                Box::new(SequenceExpr::aco(\"under\").t_ws().t_set(UNDER_EXCEPTIONS)),\n                Box::new(SequenceExpr::aco(\"up\").t_ws().t_set(UP_EXCEPTIONS)),\n            ])),\n            dict,\n        }\n    }\n}\n\nimpl<D> ExprLinter for DisjointPrefixes<D>\nwhere\n    D: Dictionary,\n{\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        let toks_span = toks.span()?;\n        let (pre, _) = ctx?;\n\n        // Cloud Native Pub-Sub System at Pinterest -> subsystem\n        if pre.last().is_some_and(|p| p.kind.is_hyphen()) {\n            return None;\n        }\n\n        // Avoid including text from unlintable sections between tokens\n        // that could result from naively using toks.span()?.get_content_string(src)\n        let original = format!(\n            \"{}{}{}\",\n            toks[0].span.get_content_string(src),\n            if toks[1].kind.is_hyphen() { '-' } else { ' ' },\n            toks[2].span.get_content_string(src)\n        );\n\n        // If the original form is in the dictionary, return None\n        if self.dict.contains_word_str(&original) {\n            return None;\n        }\n\n        let mut hyphenated = None;\n        if !toks[1].kind.is_hyphen() {\n            hyphenated = Some(format!(\n                \"{}-{}\",\n                toks[0].span.get_content_string(src),\n                toks[2].span.get_content_string(src)\n            ));\n        }\n        let joined = Some(format!(\n            \"{}{}\",\n            toks[0].span.get_content_string(src),\n            toks[2].span.get_content_string(src)\n        ));\n\n        // Check if either joined or hyphenated form is in the dictionary\n        let joined_valid = joined\n            .as_ref()\n            .is_some_and(|j| self.dict.contains_word_str(j));\n        let hyphenated_valid = hyphenated\n            .as_ref()\n            .is_some_and(|h| self.dict.contains_word_str(h));\n\n        if !joined_valid && !hyphenated_valid {\n            return None;\n        }\n\n        // Joining with a hyphen when original is separated by space is more likely correct\n        //   if hyphenated form is in the dictionary. So add first if verified.\n        // Joining when separated by a space is more common but also has more false positives, so add them second.\n        let suggestions = [(&hyphenated, hyphenated_valid), (&joined, joined_valid)]\n            .into_iter()\n            .filter_map(|(word, is_valid)| word.as_ref().filter(|_| is_valid))\n            .collect::<Vec<_>>();\n\n        let suggestions = suggestions\n            .iter()\n            .map(|s| {\n                Suggestion::replace_with_match_case(s.chars().collect(), toks_span.get_content(src))\n            })\n            .collect();\n\n        Some(Lint {\n            span: toks_span,\n            lint_kind: LintKind::Spelling,\n            suggestions,\n            message: \"This looks like a prefix that can be joined with the rest of the word.\"\n                .to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Looks for words with their prefixes written with a space or hyphen between instead of joined.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::DisjointPrefixes;\n    use crate::{\n        linting::tests::{assert_no_lints, assert_suggestion_result},\n        spell::FstDictionary,\n    };\n\n    #[test]\n    fn fix_hyphenated_to_joined() {\n        assert_suggestion_result(\n            \"Download pre-built binaries or build from source.\",\n            DisjointPrefixes::new(FstDictionary::curated()),\n            \"Download prebuilt binaries or build from source.\",\n        );\n    }\n\n    #[test]\n    fn fix_open_to_joined() {\n        assert_suggestion_result(\n            \"Advanced Nginx configuration available for super users\",\n            DisjointPrefixes::new(FstDictionary::curated()),\n            \"Advanced Nginx configuration available for superusers\",\n        );\n    }\n\n    #[test]\n    fn dont_join_open_co_op() {\n        assert_no_lints(\n            \"They are cheaper at the co op.\",\n            DisjointPrefixes::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_join_hyphenated_co_op() {\n        assert_no_lints(\n            \"Almost everything is cheaper at the co-op.\",\n            DisjointPrefixes::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn fix_open_to_hyphenated() {\n        assert_suggestion_result(\n            \"My hobby is de extinction of the dinosaurs.\",\n            DisjointPrefixes::new(FstDictionary::curated()),\n            \"My hobby is de-extinction of the dinosaurs.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/do_mistake.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, FixedPhrase, SequenceExpr},\n    linting::{\n        ExprLinter, LintKind, Suggestion,\n        expr_linter::{Chunk, followed_by_word},\n    },\n    patterns::WordSet,\n};\n\npub struct DoMistake {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for DoMistake {\n    fn default() -> Self {\n        Self {\n            expr: Box::new(\n                SequenceExpr::word_set(&[\"do\", \"did\", \"does\", \"doing\", \"done\"])\n                    .t_ws()\n                    .then_longest_of(vec![\n                        Box::new(WordSet::new(&[\n                            \"a\", \"an\", \"the\", \"that\", \"these\", \"this\", \"those\", \"another\", \"many\",\n                            \"several\", \"some\", \"my\", \"our\", \"your\", \"his\", \"her\", \"its\", \"their\",\n                        ])),\n                        Box::new(FixedPhrase::from_phrase(\"a lot of\")),\n                        Box::new(FixedPhrase::from_phrase(\"lots of\")),\n                        Box::new(FixedPhrase::from_phrase(\"that kind of\")),\n                        Box::new(FixedPhrase::from_phrase(\"these kinds of\")),\n                        Box::new(FixedPhrase::from_phrase(\"this kind of\")),\n                        Box::new(FixedPhrase::from_phrase(\"those kinds of\")),\n                        Box::new(FixedPhrase::from_phrase(\"so many\")),\n                        Box::new(FixedPhrase::from_phrase(\"too many\")),\n                        Box::new(FixedPhrase::from_phrase(\"tons of\")),\n                        Box::new(FixedPhrase::from_phrase(\"tonnes of\")),\n                    ])\n                    .t_ws()\n                    .then_word_set(&[\"mistake\", \"mistakes\"]),\n            ),\n        }\n    }\n}\n\nimpl ExprLinter for DoMistake {\n    type Unit = Chunk;\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        let tok = toks.first()?;\n        let span = tok.span;\n        let chars = span.get_content(src);\n\n        if followed_by_word(ctx, |nw| {\n            nw.kind.is_verb() && !nw.kind.is_verb_progressive_form()\n        }) {\n            return None;\n        }\n\n        let make = if chars.eq_ignore_ascii_case_str(\"do\") {\n            \"make\"\n        } else if chars.eq_ignore_ascii_case_str(\"did\") || chars.eq_ignore_ascii_case_str(\"done\") {\n            \"made\"\n        } else if chars.eq_ignore_ascii_case_str(\"does\") {\n            \"makes\"\n        } else if chars.eq_ignore_ascii_case_str(\"doing\") {\n            \"making\"\n        } else {\n            return None;\n        }\n        .chars()\n        .collect();\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case(make, chars)],\n            message: \"In English we `make` mistakes, not `do` them\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `do a mistake` to `make a mistake`.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &*self.expr\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::DoMistake;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn did_a_mistake() {\n        assert_suggestion_result(\n            \"Hi, I did a mistake in my NGINX config file and so once the container is launched, it logs the error...\",\n            DoMistake::default(),\n            \"Hi, I made a mistake in my NGINX config file and so once the container is launched, it logs the error...\",\n        );\n    }\n\n    #[test]\n    fn did_my_mistakes() {\n        assert_suggestion_result(\n            \"Where i did my mistakes?\",\n            DoMistake::default(),\n            \"Where i made my mistakes?\",\n        );\n    }\n\n    #[test]\n    fn did_several_mistakes() {\n        assert_suggestion_result(\n            \"Maybe I did several mistakes, but I can only find a message about one?\",\n            DoMistake::default(),\n            \"Maybe I made several mistakes, but I can only find a message about one?\",\n        );\n    }\n\n    #[test]\n    fn did_some_mistakes() {\n        assert_suggestion_result(\n            \"I made this program to learn goto use. but did some mistakes somewhere\",\n            DoMistake::default(),\n            \"I made this program to learn goto use. but made some mistakes somewhere\",\n        );\n    }\n\n    #[test]\n    fn did_that_mistake() {\n        assert_suggestion_result(\n            \"and believe me, I did that mistake too\",\n            DoMistake::default(),\n            \"and believe me, I made that mistake too\",\n        );\n    }\n\n    #[test]\n    fn did_the_mistake() {\n        assert_suggestion_result(\n            \"The issue describe is the person who did the mistake in the past & that same person is NOW correcting other people\",\n            DoMistake::default(),\n            \"The issue describe is the person who made the mistake in the past & that same person is NOW correcting other people\",\n        );\n    }\n\n    #[test]\n    fn did_this_mistake() {\n        assert_suggestion_result(\n            \"Are there famous mathematicians who did this mistake?\",\n            DoMistake::default(),\n            \"Are there famous mathematicians who made this mistake?\",\n        );\n    }\n\n    #[test]\n    fn do_many_mistakes() {\n        assert_suggestion_result(\n            \"I observed that my coworkers do many mistakes using the field calculator\",\n            DoMistake::default(),\n            \"I observed that my coworkers make many mistakes using the field calculator\",\n        );\n    }\n\n    #[test]\n    fn do_mistake() {\n        assert_suggestion_result(\n            \"If you do a mistake that causes alot of problems, please use the command to redo\",\n            DoMistake::default(),\n            \"If you make a mistake that causes alot of problems, please use the command to redo\",\n        );\n    }\n\n    #[test]\n    fn do_some_mistakes() {\n        assert_suggestion_result(\n            \"so probably if my colleagues do some mistakes I tend to learn them as well\",\n            DoMistake::default(),\n            \"so probably if my colleagues make some mistakes I tend to learn them as well\",\n        );\n    }\n\n    #[test]\n    fn do_the_mistake() {\n        assert_suggestion_result(\n            \"do I need to explicitly mention that I did not do the mistake to do not lose the point?\",\n            DoMistake::default(),\n            \"do I need to explicitly mention that I did not make the mistake to do not lose the point?\",\n        );\n    }\n\n    #[test]\n    fn do_this_mistake() {\n        assert_suggestion_result(\n            \"I barely remember any frontend developer that wouldn't do this mistake at least once.\",\n            DoMistake::default(),\n            \"I barely remember any frontend developer that wouldn't make this mistake at least once.\",\n        );\n    }\n\n    #[test]\n    fn do_this_mistakes() {\n        assert_suggestion_result(\n            \"I do this mistakes to check the command detekt with type resolution\",\n            DoMistake::default(),\n            \"I make this mistakes to check the command detekt with type resolution\",\n        );\n    }\n\n    #[test]\n    fn do_those_mistakes() {\n        assert_suggestion_result(\n            \"An experienced developer could do those mistakes as well\",\n            DoMistake::default(),\n            \"An experienced developer could make those mistakes as well\",\n        );\n    }\n\n    #[test]\n    fn doing_a_mistake() {\n        assert_suggestion_result(\n            \"Here at work, a colleague asked if we were doing a mistake by using the ReactDOM.renderToStaticMarkup on the client side.\",\n            DoMistake::default(),\n            \"Here at work, a colleague asked if we were making a mistake by using the ReactDOM.renderToStaticMarkup on the client side.\",\n        );\n    }\n\n    #[test]\n    fn doing_several_mistakes() {\n        assert_suggestion_result(\n            \"I realized I was doing several mistakes\",\n            DoMistake::default(),\n            \"I realized I was making several mistakes\",\n        );\n    }\n\n    #[test]\n    fn doing_the_mistkae() {\n        assert_suggestion_result(\n            \"where am i doing the mistake?\",\n            DoMistake::default(),\n            \"where am i making the mistake?\",\n        );\n    }\n\n    #[test]\n    fn done_some_mistake() {\n        assert_suggestion_result(\n            \"Might be I have done some mistake, that I do not know.\",\n            DoMistake::default(),\n            \"Might be I have made some mistake, that I do not know.\",\n        );\n    }\n\n    #[test]\n    fn done_this_mistake() {\n        assert_suggestion_result(\n            \"how many more users have done this mistake?\",\n            DoMistake::default(),\n            \"how many more users have made this mistake?\",\n        );\n    }\n\n    // False positives\n\n    #[test]\n    fn dont_flag_when_does_a_mistake() {\n        assert_no_lints(\n            \"When does a mistake become standard usage? \",\n            DoMistake::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_did_that_mistake_verb() {\n        assert_no_lints(\n            \"Did that mistake occurred before or after the day 2 backup?\",\n            DoMistake::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_does_this_mistake_verb() {\n        assert_no_lints(\n            \"Does this mistake invalidate your thesis?\",\n            DoMistake::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_does_the_mistake_verb() {\n        assert_no_lints(\n            \"Does the mistake change the meaning of the quotation?\",\n            DoMistake::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/dot_initialisms.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::expr::WordExprGroup;\nuse hashbrown::HashMap;\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\nuse crate::{Token, TokenStringExt};\n\npub struct DotInitialisms {\n    expr: WordExprGroup<FirstMatchOf>,\n    corrections: HashMap<&'static str, &'static str>,\n}\n\nimpl Default for DotInitialisms {\n    fn default() -> Self {\n        let mut patterns = WordExprGroup::default();\n\n        let mut corrections = HashMap::new();\n        corrections.insert(\"ie\", \"i.e.\");\n        corrections.insert(\"eg\", \"e.g.\");\n\n        for target in corrections.keys() {\n            let pattern = SequenceExpr::default()\n                .then_exact_word(target)\n                .then_punctuation();\n\n            patterns.add(target, pattern);\n        }\n\n        Self {\n            expr: patterns,\n            corrections,\n        }\n    }\n}\n\nimpl ExprLinter for DotInitialisms {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let found_word_tok = matched_tokens.first()?;\n        let found_word = found_word_tok.span.get_content_string(source);\n\n        let correction = self.corrections.get(found_word.as_str())?;\n\n        Some(Lint {\n            span: matched_tokens.span()?,\n            lint_kind: LintKind::Formatting,\n            suggestions: vec![Suggestion::ReplaceWith(correction.chars().collect())],\n            message: \"Initialisms should have dot-separated letters.\".to_owned(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Ensures common initialisms (like \\\"i.e.\\\") are properly dot-separated.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::DotInitialisms;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn matches_eg() {\n        assert_suggestion_result(\n            \"Some text here (eg. more text).\",\n            DotInitialisms::default(),\n            \"Some text here (e.g. more text).\",\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/double_click.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenKind, TokenStringExt,\n    expr::{Expr, ExprMap, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct DoubleClick {\n    expr: ExprMap<usize>,\n}\n\nimpl DoubleClick {\n    fn double_click_sequence() -> SequenceExpr {\n        SequenceExpr::default()\n            .t_aco(\"double\")\n            .t_ws()\n            .then_word_set(&[\"click\", \"clicked\", \"clicking\", \"clicks\"])\n    }\n}\n\nimpl Default for DoubleClick {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        map.insert(\n            SequenceExpr::default()\n                .then_seq(Self::double_click_sequence())\n                .t_ws()\n                .then_any_word(),\n            0,\n        );\n\n        map.insert(\n            SequenceExpr::default()\n                .then_seq(Self::double_click_sequence())\n                .then_punctuation(),\n            0,\n        );\n\n        map.insert(\n            SequenceExpr::default()\n                .then_seq(Self::double_click_sequence())\n                .t_ws()\n                .then_kind_is_but_is_not(TokenKind::is_word, TokenKind::is_verb),\n            0,\n        );\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for DoubleClick {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let double_idx = *self.expr.lookup(0, matched_tokens, source)?;\n        let click_idx = 2;\n        let span = matched_tokens.get(double_idx..=click_idx)?.span()?;\n        let template = span.get_content(source);\n\n        let double_word = matched_tokens.get(double_idx)?.span.get_content(source);\n        let click_word = matched_tokens.get(click_idx)?.span.get_content(source);\n\n        let replacement: Vec<char> = double_word\n            .iter()\n            .copied()\n            .chain(['-'])\n            .chain(click_word.iter().copied())\n            .collect();\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Punctuation,\n            suggestions: vec![Suggestion::replace_with_match_case(replacement, template)],\n            message: \"Add a hyphen to this command.\".to_owned(),\n            priority: 40,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Encourages hyphenating `double-click` and its inflections.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::DoubleClick;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_basic_command() {\n        assert_suggestion_result(\n            \"Double click the icon.\",\n            DoubleClick::default(),\n            \"Double-click the icon.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_preposition() {\n        assert_suggestion_result(\n            \"Please double click on the link.\",\n            DoubleClick::default(),\n            \"Please double-click on the link.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_pronoun() {\n        assert_suggestion_result(\n            \"You should double click it to open.\",\n            DoubleClick::default(),\n            \"You should double-click it to open.\",\n        );\n    }\n\n    #[test]\n    fn corrects_plural_form() {\n        assert_suggestion_result(\n            \"Double clicks are recorded in the log.\",\n            DoubleClick::default(),\n            \"Double-clicks are recorded in the log.\",\n        );\n    }\n\n    #[test]\n    fn corrects_past_tense() {\n        assert_suggestion_result(\n            \"They double clicked the submit button.\",\n            DoubleClick::default(),\n            \"They double-clicked the submit button.\",\n        );\n    }\n\n    #[test]\n    fn corrects_gerund() {\n        assert_suggestion_result(\n            \"Double clicking the item highlights it.\",\n            DoubleClick::default(),\n            \"Double-clicking the item highlights it.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_caps() {\n        assert_suggestion_result(\n            \"He DOUBLE CLICKED the file.\",\n            DoubleClick::default(),\n            \"He DOUBLE-CLICKED the file.\",\n        );\n    }\n\n    #[test]\n    fn corrects_multiline() {\n        assert_suggestion_result(\n            \"Double\\nclick the checkbox.\",\n            DoubleClick::default(),\n            \"Double-click the checkbox.\",\n        );\n    }\n\n    #[test]\n    fn corrects_at_sentence_end() {\n        assert_suggestion_result(\n            \"Just double click.\",\n            DoubleClick::default(),\n            \"Just double-click.\",\n        );\n    }\n\n    #[test]\n    fn allows_hyphenated_form() {\n        assert_lint_count(\"Double-click the icon.\", DoubleClick::default(), 0);\n    }\n\n    #[test]\n    fn ignores_other_double_words() {\n        assert_lint_count(\n            \"She said the double rainbow was beautiful.\",\n            DoubleClick::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/double_modal.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::patterns::ModalVerb;\nuse crate::{Token, TokenStringExt};\n\nuse super::Suggestion;\nuse super::{ExprLinter, Lint, LintKind};\nuse crate::linting::expr_linter::Chunk;\n\npub struct DoubleModal {\n    expr: SequenceExpr,\n}\n\nimpl Default for DoubleModal {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(ModalVerb::default())\n            .t_ws()\n            .then(ModalVerb::default());\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for DoubleModal {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let first_chars = matched_tokens.first()?.span.get_content(source);\n        let second_chars = matched_tokens.last()?.span.get_content(source);\n\n        Some(Lint {\n            span: matched_tokens.span()?,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![\n                Suggestion::ReplaceWith(first_chars.into()),\n                Suggestion::ReplaceWith(second_chars.into()),\n            ],\n            message: \"Two modal verbs in a row are rarely grammatical; remove one.\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Two modal verbs in a row are rarely grammatical; remove one of them.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::DoubleModal;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn detects_might_could() {\n        assert_lint_count(\n            \"They might could finish the project by Friday.\",\n            DoubleModal::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn detects_should_ought() {\n        assert_lint_count(\"You should ought to apologize.\", DoubleModal::default(), 1);\n    }\n\n    #[test]\n    fn allows_single_modal() {\n        assert_lint_count(\"She must leave early.\", DoubleModal::default(), 0);\n    }\n\n    #[test]\n    fn detects_two_double_modals() {\n        assert_lint_count(\n            \"He may can join us, and you might could too.\",\n            DoubleModal::default(),\n            2,\n        );\n    }\n\n    #[test]\n    fn suggests_removing_second_modal_keeps_first() {\n        assert_suggestion_result(\n            \"They might could finish the project by Friday.\",\n            DoubleModal::default(),\n            \"They might finish the project by Friday.\",\n        );\n    }\n\n    #[test]\n    fn suggests_removing_second_modal_keeps_first_variant_order() {\n        assert_suggestion_result(\n            \"You could might want to double-check that.\",\n            DoubleModal::default(),\n            \"You could want to double-check that.\",\n        );\n    }\n\n    #[test]\n    fn suggests_removing_second_modal_keeps_first_capitalised() {\n        assert_suggestion_result(\n            \"We Must Should be consistent.\",\n            DoubleModal::default(),\n            \"We Must be consistent.\",\n        );\n    }\n\n    #[test]\n    fn allows_will_need() {\n        assert_no_lints(\n            \"You will need administrator or editor level access\",\n            DoubleModal::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/ellipsis_length.rs",
    "content": "use itertools::Itertools;\n\nuse super::{Lint, LintKind, Linter, Suggestion};\nuse crate::TokenStringExt;\n\n/// A linter that checks that an ellipsis doesn't contain too many periods (or\n/// too few).\n#[derive(Debug, Default)]\npub struct EllipsisLength;\n\nimpl Linter for EllipsisLength {\n    fn lint(&mut self, document: &crate::Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for tok in document.iter_ellipsiss() {\n            let tok_content = document.get_span_content(&tok.span);\n\n            if tok_content.is_empty() {\n                continue;\n            }\n\n            if tok_content.first().cloned() == Some('.')\n                && tok_content.iter().all_equal()\n                && tok_content.len() != 3\n            {\n                lints.push(Lint {\n                    span: tok.span,\n                    lint_kind: LintKind::Formatting,\n                    suggestions: vec![Suggestion::ReplaceWith(vec!['.', '.', '.'])],\n                    message: \"Horizontal ellipsis must have 3 dots.\".to_string(),\n                    priority: 31,\n                })\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &'static str {\n        \"Make sure you have the correct number of dots in your ellipsis.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::EllipsisLength;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn allows_correct_ellipsis() {\n        assert_lint_count(\"...\", EllipsisLength, 0);\n    }\n\n    #[test]\n    fn corrects_long_ellipsis() {\n        assert_lint_count(\".....\", EllipsisLength, 1);\n        assert_suggestion_result(\".....\", EllipsisLength, \"...\");\n    }\n\n    #[test]\n    fn corrects_short_ellipsis() {\n        assert_lint_count(\"..\", EllipsisLength, 1);\n        assert_suggestion_result(\"..\", EllipsisLength, \"...\");\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/else_possessive.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct ElsePossessive {\n    expr: SequenceExpr,\n}\n\nimpl Default for ElsePossessive {\n    fn default() -> Self {\n        let pronouns = WordSet::new(&[\n            \"somebody\",\n            \"someone\",\n            \"anybody\",\n            \"anyone\",\n            \"everybody\",\n            \"everyone\",\n            \"nobody\",\n        ])\n        .or(SequenceExpr::aco(\"no\").then_whitespace().t_aco(\"one\"));\n\n        let pattern = SequenceExpr::with(pronouns)\n            .then_whitespace()\n            .t_aco(\"elses\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for ElsePossessive {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {\n        let offender = toks.last()?;\n        Some(Lint {\n            span: offender.span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::ReplaceWith(\"else's\".chars().collect())],\n            message: \"Add the missing possessive apostrophe: use `else’s`.\".to_owned(),\n            priority: 60,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects missing apostrophes in phrases like `someone elses book` and suggests the correct possessive form `else’s`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ElsePossessive;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn fixes_no_one_elses() {\n        assert_suggestion_result(\n            \"It's no one elses problem.\",\n            ElsePossessive::default(),\n            \"It's no one else's problem.\",\n        );\n    }\n\n    #[test]\n    fn fixes_someone_elses() {\n        assert_suggestion_result(\n            \"It's someone elses problem.\",\n            ElsePossessive::default(),\n            \"It's someone else's problem.\",\n        );\n    }\n\n    #[test]\n    fn fixes_anybody_elses() {\n        assert_suggestion_result(\n            \"Was that anybody elses idea?\",\n            ElsePossessive::default(),\n            \"Was that anybody else's idea?\",\n        );\n    }\n\n    #[test]\n    fn fixes_everyone_elses() {\n        assert_suggestion_result(\n            \"He echoed everyone elses concerns.\",\n            ElsePossessive::default(),\n            \"He echoed everyone else's concerns.\",\n        );\n    }\n\n    #[test]\n    fn ignores_correct_form() {\n        assert_lint_count(\n            \"She borrowed someone else's notes.\",\n            ElsePossessive::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/ever_every.rs",
    "content": "use crate::{\n    Lint, Token,\n    expr::{All, Expr, OwnedExprExt, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::{ModalVerb, WordSet},\n};\n\npub struct EverEvery {\n    expr: All,\n}\n\nimpl Default for EverEvery {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::any_of(vec![\n                Box::new(WordSet::new(&[\n                    \"are\", \"aren't\", \"arent\", \"did\", \"didn't\", \"didnt\", \"do\", \"does\", \"doesn't\",\n                    \"doesnt\", \"dont\", \"don't\", \"had\", \"hadn't\", \"hadnt\", \"has\", \"hasn't\", \"hasnt\",\n                    \"have\", \"haven't\", \"havent\", \"is\", \"isn't\", \"isnt\", \"was\", \"wasn't\", \"wasnt\",\n                    \"were\", \"weren't\", \"werent\",\n                ])),\n                Box::new(ModalVerb::with_common_errors()),\n            ])\n            .t_ws()\n            .then_subject_pronoun()\n            .t_ws()\n            .t_aco(\"every\")\n            .and_not(SequenceExpr::anything().t_any().t_aco(\"it\")),\n        }\n    }\n}\n\nimpl ExprLinter for EverEvery {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let span = toks[4].span;\n        let content = span.get_content(src);\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                content[..content.len() - 1].to_vec(),\n                content,\n            )],\n            message: \"Is this `every` a typo that should be `ever`?\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Tries to correct typos of `every` instead of `ever`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::EverEvery;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fix_can_i_every() {\n        assert_suggestion_result(\n            \"Odd, how can i every become negative in that case?\",\n            EverEvery::default(),\n            \"Odd, how can i ever become negative in that case?\",\n        );\n    }\n\n    #[test]\n    fn fix_can_they_every() {\n        assert_suggestion_result(\n            \"if each component has its own instance of NameService, how can they every share state?\",\n            EverEvery::default(),\n            \"if each component has its own instance of NameService, how can they ever share state?\",\n        )\n    }\n\n    #[test]\n    fn fix_can_we_every() {\n        assert_suggestion_result(\n            \"can we every have a good dev UX?\",\n            EverEvery::default(),\n            \"can we ever have a good dev UX?\",\n        );\n    }\n\n    #[test]\n    fn fix_did_we_every() {\n        assert_suggestion_result(\n            \"Did we every fix that?\",\n            EverEvery::default(),\n            \"Did we ever fix that?\",\n        )\n    }\n\n    #[test]\n    fn fix_did_you_every() {\n        assert_suggestion_result(\n            \"Did you every get vtsls working properly?\",\n            EverEvery::default(),\n            \"Did you ever get vtsls working properly?\",\n        )\n    }\n\n    #[test]\n    fn fix_do_i_every() {\n        assert_suggestion_result(\n            \"Rarely do I every look forward to the new ui.\",\n            EverEvery::default(),\n            \"Rarely do I ever look forward to the new ui.\",\n        )\n    }\n\n    #[test]\n    fn fix_do_we_every() {\n        assert_suggestion_result(\n            \"do we every stop learning new things?\",\n            EverEvery::default(),\n            \"do we ever stop learning new things?\",\n        )\n    }\n\n    #[test]\n    fn fix_do_you_every() {\n        assert_suggestion_result(\n            \"Do you every faced the issue or have any idea why this could happen?\",\n            EverEvery::default(),\n            \"Do you ever faced the issue or have any idea why this could happen?\",\n        )\n    }\n\n    #[test]\n    fn fix_dont_i_every() {\n        assert_suggestion_result(\n            \"WHY DONT I EVERY SEE OR HEAR ABOUT THINGS HAPPENING IN SOUTHPORT?\",\n            EverEvery::default(),\n            \"WHY DONT I EVER SEE OR HEAR ABOUT THINGS HAPPENING IN SOUTHPORT?\",\n        )\n    }\n\n    #[test]\n    fn fix_dont_they_every() {\n        assert_suggestion_result(\n            \"And why dont they every smile first?\",\n            EverEvery::default(),\n            \"And why dont they ever smile first?\",\n        )\n    }\n\n    #[test]\n    fn fix_dont_you_every() {\n        assert_suggestion_result(\n            \"Dont you every forget this and believe nothing else.\",\n            EverEvery::default(),\n            \"Dont you ever forget this and believe nothing else.\",\n        )\n    }\n\n    #[test]\n    fn fix_have_you_every() {\n        assert_suggestion_result(\n            \"Have you every wanted to generate geometric structures from data.frames\",\n            EverEvery::default(),\n            \"Have you ever wanted to generate geometric structures from data.frames\",\n        )\n    }\n\n    #[test]\n    fn fix_should_i_every() {\n        assert_suggestion_result(\n            \"I.e. why would I every use deepcopy ?\",\n            EverEvery::default(),\n            \"I.e. why would I ever use deepcopy ?\",\n        )\n    }\n\n    #[test]\n    fn fix_should_we_every() {\n        assert_suggestion_result(\n            \"Should we every meet, I'll get you a beverage of your choosing!\",\n            EverEvery::default(),\n            \"Should we ever meet, I'll get you a beverage of your choosing!\",\n        )\n    }\n\n    #[test]\n    fn fix_should_you_every() {\n        assert_suggestion_result(\n            \"but you will always have a place in his home should you every truly desire it\",\n            EverEvery::default(),\n            \"but you will always have a place in his home should you ever truly desire it\",\n        )\n    }\n\n    #[test]\n    fn fix_would_i_every() {\n        assert_suggestion_result(\n            \"Why would I every do that?\",\n            EverEvery::default(),\n            \"Why would I ever do that?\",\n        )\n    }\n\n    #[test]\n    fn fix_would_they_every() {\n        assert_suggestion_result(\n            \"Would they every be installed together?\",\n            EverEvery::default(),\n            \"Would they ever be installed together?\",\n        )\n    }\n\n    // known false positive - future contributors: please feel free to tackle this!\n\n    #[test]\n    #[ignore = \"unusual but not wrong position of time phrase, maybe should have commas?\"]\n    fn dont_flag_should_we_every() {\n        assert_no_lints(\n            \"MM: should we every month or two have a roundup of what's been happening in WGSL\",\n            EverEvery::default(),\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/everyday.rs",
    "content": "use super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::expr::All;\nuse crate::expr::Expr;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{Lrc, Punctuation, Token, TokenKind, TokenStringExt, patterns::Word};\n\npub struct Everyday {\n    expr: LongestMatchOf,\n}\n\nimpl Default for Everyday {\n    fn default() -> Self {\n        let everyday = Word::new(\"everyday\");\n        let every_day = Lrc::new(SequenceExpr::aco(\"every\").t_ws().t_aco(\"day\"));\n\n        let everyday_bad_after = All::new(vec![\n            Box::new(SequenceExpr::with(everyday.clone()).t_ws().then_any_word()),\n            Box::new(SequenceExpr::anything().t_any().then_kind_where(|kind| {\n                !kind.is_noun() && !kind.is_oov() && !kind.is_verb_progressive_form()\n            })),\n        ]);\n\n        let bad_before_every_day = All::new(vec![\n            Box::new(SequenceExpr::any_word().t_ws().then(every_day.clone())),\n            Box::new(|tok: &Token, _src: &[char]| {\n                // \"this\" and \"that\" are both determiners and pronouns\n                tok.kind.is_determiner() && !tok.kind.is_pronoun()\n            }),\n        ]);\n\n        // (why does) everyday feel the (same ?)\n        let everyday_ambiverb_after_then_noun = All::new(vec![\n            Box::new(\n                SequenceExpr::with(everyday.clone())\n                    .t_ws()\n                    .then_any_word()\n                    .t_ws()\n                    .then_any_word(),\n            ),\n            Box::new(\n                SequenceExpr::anything()\n                    .t_any()\n                    .then_kind_both(TokenKind::is_noun, TokenKind::is_verb)\n                    .t_any()\n                    .then_determiner(),\n            ),\n        ]);\n\n        // (Do you actually improve if you draw) everyday?\n        let everyday_punctuation_after = All::new(vec![\n            Box::new(SequenceExpr::with(everyday.clone()).then_punctuation()),\n            Box::new(SequenceExpr::anything().then_kind_where(|kind| {\n                matches!(\n                    kind,\n                    TokenKind::Punctuation(\n                        Punctuation::Question | Punctuation::Comma | Punctuation::Period\n                    )\n                )\n            })),\n        ]);\n\n        // (However, the message goes far beyond) every day things.\n        let every_day_noun_after_then_punctuation = All::new(vec![\n            Box::new(\n                SequenceExpr::with(every_day.clone())\n                    .t_ws()\n                    .then_plural_noun()\n                    .then_punctuation(),\n            ),\n            Box::new(\n                SequenceExpr::anything()\n                    .t_any()\n                    .t_any()\n                    .t_any()\n                    .t_any()\n                    .then_kind_where(|kind| {\n                        matches!(\n                            kind,\n                            TokenKind::Punctuation(\n                                Punctuation::Question | Punctuation::Comma | Punctuation::Period\n                            )\n                        )\n                    }),\n            ),\n        ]);\n\n        // Can we detect all mistakes with just one token before or after?\n\n        // ❌ after adjective ✅ after adverb\n        // $ (end of chunk)\n\n        // ✅ after adjective ❌ after adverb\n        // singular count noun: \"An everyday task\"\n\n        // ✅ after adjective ✅ after adverb - can't disambiguate!\n        // plural noun: \"Everyday tasks are boring.\" vs \"Every day tasks get completed.\"\n        // mass noun: \"Everyday information\" vs \"Every day information gets processed.\"\n\n        // ❌ before adjective ✅ before adverb\n        // none found yet\n\n        // ✅ before adjective ❌ before adverb\n        // none found yet\n\n        // ✅ before adjective ✅ before adverb - can't disambiguate!\n        // \"some\": \"some everyday tasks\" / \"Do some every day\"\n        // verb, past form: \"I coded every day\" / \"I learned everyday phrases\"\n\n        Self {\n            expr: LongestMatchOf::new(vec![\n                Box::new(everyday_bad_after),\n                Box::new(bad_before_every_day),\n                Box::new(everyday_ambiverb_after_then_noun),\n                Box::new(everyday_punctuation_after),\n                Box::new(every_day_noun_after_then_punctuation),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for Everyday {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        // Helper functions make the match tables more compact and readable.\n        let norm = |i: usize| toks[i].span.get_content_string(src).to_lowercase();\n        let isws = |i: usize| toks[i].kind.is_whitespace();\n        let tokspan = |i: usize| toks[i].span;\n        let slicespan = |i: usize| toks[i..i + 3].span().unwrap();\n\n        let (span, replacement, pos) = match toks.len() {\n            2 => match (norm(0).as_str(), norm(1).as_str()) {\n                (\"everyday\", _) => Some((tokspan(0), \"every day\", \"adverb\")),\n                _ => None,\n            },\n            3 => match (norm(0).as_str(), norm(2).as_str()) {\n                (\"everyday\", _) if isws(1) => Some((tokspan(0), \"every day\", \"adverb\")),\n                (_, \"everyday\") if isws(1) => Some((tokspan(2), \"every day\", \"adverb\")),\n                _ => None,\n            },\n            5 => match (norm(0).as_str(), norm(2).as_str(), norm(4).as_str()) {\n                (\"every\", \"day\", _) if isws(1) && isws(3) => {\n                    Some((slicespan(0), \"everyday\", \"adjective\"))\n                }\n                (_, \"every\", \"day\") if isws(1) && isws(3) => {\n                    Some((slicespan(2), \"everyday\", \"adjective\"))\n                }\n                (\"everyday\", _, _) if isws(1) && isws(3) => {\n                    Some((tokspan(0), \"every day\", \"adverb\"))\n                }\n                _ => None,\n            },\n            6 => match (\n                norm(0).as_str(),\n                norm(2).as_str(),\n                norm(4).as_str(),\n                norm(5).as_str(),\n            ) {\n                (\"every\", \"day\", _, _) if isws(1) && isws(3) => {\n                    Some((slicespan(0), \"everyday\", \"adjective\"))\n                }\n                _ => None,\n            },\n            _ => None,\n        }?;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                replacement,\n                span.get_content(src),\n            )],\n            message: format!(\"You probably mean the {pos} `{replacement}` here.\"),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"This rule tries to sort out confusing the adjective `everyday` and the adverb `every day`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Everyday;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn dont_flag_lone_adjective() {\n        assert_lint_count(\"everyday\", Everyday::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_lone_adverb() {\n        assert_lint_count(\"every day\", Everyday::default(), 0);\n    }\n\n    #[test]\n    fn correct_adjective_at_end_of_chunk() {\n        assert_suggestion_result(\n            \"This is something I do everyday.\",\n            Everyday::default(),\n            \"This is something I do every day.\",\n        );\n    }\n\n    #[test]\n    fn correct_adverb_after_article_before_noun() {\n        assert_suggestion_result(\n            \"It's nothing special, just an every day thing.\",\n            Everyday::default(),\n            \"It's nothing special, just an everyday thing.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Can't yet match end-of-chunk after it. Adjective before is legit for both adjective and adverb.\"]\n    fn correct_adjective_without_following_noun() {\n        assert_suggestion_result(\n            \"Some git commands used everyday\",\n            Everyday::default(),\n            \"Some git commands used every day\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_everyday_adjective_before_dev() {\n        assert_lint_count(\n            \"At everyday dev, engineering isn't just a job - it's our passion.\",\n            Everyday::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_everyday_adjective_before_present_participle() {\n        assert_lint_count(\"Everyday coding projects.\", Everyday::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_everyday_adjective_before_plural_noun() {\n        assert_lint_count(\n            \"Exploring Everyday Things with R and Ruby\",\n            Everyday::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn correct_everyday_at_end_of_sentence_after_past_verb() {\n        assert_suggestion_result(\n            \"Trying to write about what I learned everyday.\",\n            Everyday::default(),\n            \"Trying to write about what I learned every day.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_every_day_at_start_of_sentence_before_comma() {\n        assert_lint_count(\n            \"Every day, a new concept or improvement will be shared\",\n            Everyday::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_every_day_at_start_of_sentence_before_copula() {\n        assert_lint_count(\"Every day is worth remembering...\", Everyday::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_every_day_at_end_of_sentence_after_noun() {\n        assert_lint_count(\"You learn new stuff every day.\", Everyday::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_every_day_after_noun_before_conjunction() {\n        assert_lint_count(\n            \"Pick a different test item every day and confirm it is present.\",\n            Everyday::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"replace_with_match_case_str converts to EveryDay instead of Everyday\"]\n    fn correct_every_day_after_article() {\n        assert_suggestion_result(\n            \"The Every Day Calendar with Dark Mode\",\n            Everyday::default(),\n            \"The Everyday Calendar with Dark Mode\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_everyday_before_unknown_word() {\n        assert_lint_count(\n            \"It's just a normal everyday splorg.\",\n            Everyday::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_every_day_at_end_of_chunk_after_adverb() {\n        assert_lint_count(\n            \"I use the same amount of energy basically every day\",\n            Everyday::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_every_day_after_verb_before_if() {\n        assert_lint_count(\n            \"This would happen every day if left alone.\",\n            Everyday::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_every_day_after_noun_before_preposition() {\n        assert_lint_count(\n            \"An animal can do training and inference every day of its existence until the day of its death.\",\n            Everyday::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_every_day_after_time() {\n        assert_lint_count(\n            \"Can I take a picture at 12:00 every day?\",\n            Everyday::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_every_day_at_start_of_chunk_before_np() {\n        assert_lint_count(\n            \"Every day the application crashes several times on macOS Sequoia version 15.3\",\n            Everyday::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_everyday_and_every_day_used_wrongly() {\n        assert_suggestion_result(\n            \"Each and everyday you ought to strive to learn something that is not an every day thing.\",\n            Everyday::default(),\n            \"Each and every day you ought to strive to learn something that is not an everyday thing.\",\n        );\n    }\n\n    #[test]\n    fn fix_reddit_why_does_everyday() {\n        assert_suggestion_result(\n            \"Why does everyday feel the same?\",\n            Everyday::default(),\n            \"Why does every day feel the same?\",\n        );\n    }\n\n    #[test]\n    fn fix_reddit_everyday_is_going_to() {\n        assert_suggestion_result(\n            \"... everyday is going to be a good day that's just the way it is!\",\n            Everyday::default(),\n            \"... every day is going to be a good day that's just the way it is!\",\n        );\n    }\n\n    #[test]\n    fn fix_reddit_draw_everyday() {\n        assert_suggestion_result(\n            \"Do you actually improve if you draw everyday?\",\n            Everyday::default(),\n            \"Do you actually improve if you draw every day?\",\n        );\n    }\n\n    #[test]\n    fn fix_reddit_two_bad_out_of_three() {\n        assert_suggestion_result(\n            \"Yes you can jog everyday, not a personal best every day, but a steady pace run everyday.\",\n            Everyday::default(),\n            \"Yes you can jog every day, not a personal best every day, but a steady pace run every day.\",\n        );\n    }\n\n    #[test]\n    fn fix_reddit_every_day_routine() {\n        assert_suggestion_result(\n            \"Habit stacking - stacking the small skill with something that's already worked into my every day routine.\",\n            Everyday::default(),\n            \"Habit stacking - stacking the small skill with something that's already worked into my everyday routine.\",\n        );\n    }\n\n    #[test]\n    fn fix_stackoverflow_every_day_things() {\n        assert_suggestion_result(\n            \"However, the message goes far beyond every day things.\",\n            Everyday::default(),\n            \"However, the message goes far beyond everyday things.\",\n        );\n    }\n\n    #[test]\n    fn fix_reddit_everyday_is_same() {\n        assert_suggestion_result(\n            \"Everyday is exactly the same\",\n            Everyday::default(),\n            \"Every day is exactly the same\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"doesn't work yet because title case demands 'Every Day' but we get 'Every day'\"]\n    fn fix_medium_little_bit_everyday() {\n        assert_suggestion_result(\n            \"Does Learning A Little Bit Everyday Actually Work?\",\n            Everyday::default(),\n            \"Does Learning A Little Bit Every Day Actually Work?\",\n        );\n    }\n\n    #[test]\n    fn fix_stackexchange_use_everyday() {\n        assert_suggestion_result(\n            \"We use this everyday without noticing, but we hate it when ...\",\n            Everyday::default(),\n            \"We use this every day without noticing, but we hate it when ...\",\n        );\n    }\n\n    #[test]\n    fn fix_github_what_i_learned_everyday() {\n        assert_suggestion_result(\n            \"Trying to write about what I learned everyday.\",\n            Everyday::default(),\n            \"Trying to write about what I learned every day.\",\n        );\n    }\n\n    #[test]\n    fn fix_medium_one_bad_out_of_three() {\n        assert_suggestion_result(\n            \"Even inside a routine, everyday we adapt to changes and challenges ... We are not the same person every day, but every day we are ourselves…\",\n            Everyday::default(),\n            \"Even inside a routine, every day we adapt to changes and challenges ... We are not the same person every day, but every day we are ourselves…\",\n        );\n    }\n\n    #[test]\n    fn fix_medium_doing_something_everyday() {\n        assert_suggestion_result(\n            \"There was nothing wrong with my braincells processing the concepts of doing something everyday and ...\",\n            Everyday::default(),\n            \"There was nothing wrong with my braincells processing the concepts of doing something every day and ...\",\n        );\n    }\n\n    #[test]\n    fn fix_medium_all_caps() {\n        assert_suggestion_result(\n            \"MEET SOMEONE NEW EVERYDAY.\",\n            Everyday::default(),\n            \"MEET SOMEONE NEW EVERY DAY.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_every_day_singular_noun_2020() {\n        assert_no_lints(\"50 requests per day, every day free.\", Everyday::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/expand_memory_shorthands.rs",
    "content": "use std::sync::Arc;\n\nuse super::{ExprLinter, Lint, LintKind};\nuse crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::Suggestion;\nuse crate::linting::expr_linter::Chunk;\nuse crate::patterns::{ImpliesQuantity, WordSet};\n\npub struct ExpandMemoryShorthands {\n    expr: SequenceExpr,\n}\n\nimpl ExpandMemoryShorthands {\n    pub fn new() -> Self {\n        let hotwords = Arc::new(WordSet::new(&[\n            \"B\", \"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\", \"RB\", \"QB\", \"KiB\", \"MiB\", \"GiB\",\n            \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\", \"RiB\", \"QiB\",\n        ]));\n\n        Self {\n            expr: SequenceExpr::with(ImpliesQuantity).then_longest_of(vec![\n                Box::new(SequenceExpr::with(hotwords.clone())),\n                Box::new(SequenceExpr::default().t_ws_h().then(hotwords.clone())),\n            ]),\n        }\n    }\n\n    fn get_replacement(abbreviation: &str, plural: Option<bool>) -> Option<&'static str> {\n        let is_plural = plural.unwrap_or(abbreviation.ends_with('s'));\n        match abbreviation {\n            \"B\" => Some(if is_plural { \"bytes\" } else { \"byte\" }),\n            \"kB\" => Some(if is_plural { \"kilobytes\" } else { \"kilobyte\" }),\n            \"MB\" => Some(if is_plural { \"megabytes\" } else { \"megabyte\" }),\n            \"GB\" => Some(if is_plural { \"gigabytes\" } else { \"gigabyte\" }),\n            \"TB\" => Some(if is_plural { \"terabytes\" } else { \"terabyte\" }),\n            \"PB\" => Some(if is_plural { \"petabytes\" } else { \"petabyte\" }),\n            \"EB\" => Some(if is_plural { \"exabytes\" } else { \"exabyte\" }),\n            \"ZB\" => Some(if is_plural { \"zettabytes\" } else { \"zettabyte\" }),\n            \"YB\" => Some(if is_plural { \"yottabytes\" } else { \"yottabyte\" }),\n            \"RB\" => Some(if is_plural { \"ronnabytes\" } else { \"ronnabyte\" }),\n            \"QB\" => Some(if is_plural {\n                \"quettabytes\"\n            } else {\n                \"quettabyte\"\n            }),\n            \"KiB\" => Some(if is_plural { \"kibibytes\" } else { \"kibibyte\" }),\n            \"MiB\" => Some(if is_plural { \"mebibytes\" } else { \"mebibyte\" }),\n            \"GiB\" => Some(if is_plural { \"gibibytes\" } else { \"gibibyte\" }),\n            \"TiB\" => Some(if is_plural { \"tebibytes\" } else { \"tebibyte\" }),\n            \"PiB\" => Some(if is_plural { \"pebibytes\" } else { \"pebibyte\" }),\n            \"EiB\" => Some(if is_plural { \"exbibytes\" } else { \"exbibyte\" }),\n            \"ZiB\" => Some(if is_plural { \"zebibytes\" } else { \"zebibyte\" }),\n            \"YiB\" => Some(if is_plural { \"yobibytes\" } else { \"yobibyte\" }),\n            \"RiB\" => Some(if is_plural { \"robibytes\" } else { \"robibyte\" }),\n            \"QiB\" => Some(if is_plural { \"quebibytes\" } else { \"quebibyte\" }),\n\n            _ => None,\n        }\n    }\n}\n\nimpl Default for ExpandMemoryShorthands {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl ExprLinter for ExpandMemoryShorthands {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offending_span = matched_tokens.last()?.span;\n        let implies_plural = ImpliesQuantity::implies_plurality(matched_tokens.first()?, source);\n\n        let offending_text = offending_span.get_content(source);\n\n        let replacement =\n            Self::get_replacement(&offending_text.iter().collect::<String>(), implies_plural)?;\n\n        let mut replacement_chars = Vec::new();\n\n        // If there isn't spacing, insert a space\n        if matched_tokens.len() == 2 {\n            replacement_chars.push(' ');\n        }\n\n        replacement_chars.extend(replacement.chars());\n\n        if replacement_chars == offending_text {\n            return None;\n        }\n\n        Some(Lint {\n            span: offending_span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::ReplaceWith(replacement_chars)],\n            message: format!(\"Did you mean `{replacement}`?\"),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Expands memory-related abbreviations (`B`, `kB`, `MB`, `GB`, `TB`, `PB`, `KiB`, `MiB`, `GiB`, `TiB`, `PiB`, etc.) to their full forms (`byte`, `kilobyte`, `megabyte`, `gigabyte`, `terabyte`, `petabyte`, `kibibyte`, `mebibyte`, `gibibyte`, `tebibyte`, `pebibyte`, etc.).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::ExpandMemoryShorthands;\n\n    #[test]\n    fn detects_bytes() {\n        assert_suggestion_result(\"5 B\", ExpandMemoryShorthands::new(), \"5 bytes\");\n    }\n\n    #[test]\n    fn detects_kilobytes() {\n        assert_suggestion_result(\"10 kB\", ExpandMemoryShorthands::new(), \"10 kilobytes\");\n    }\n\n    #[test]\n    fn detects_megabytes() {\n        assert_suggestion_result(\"30 MB\", ExpandMemoryShorthands::new(), \"30 megabytes\");\n    }\n\n    #[test]\n    fn detects_gigabytes() {\n        assert_suggestion_result(\"16 GB\", ExpandMemoryShorthands::new(), \"16 gigabytes\");\n    }\n\n    #[test]\n    fn detects_terabytes() {\n        assert_suggestion_result(\"2 TB\", ExpandMemoryShorthands::new(), \"2 terabytes\");\n    }\n\n    #[test]\n    fn detects_kibibytes() {\n        assert_suggestion_result(\"1024 KiB\", ExpandMemoryShorthands::new(), \"1024 kibibytes\");\n    }\n\n    #[test]\n    fn detects_mebibytes() {\n        assert_suggestion_result(\"2048 MiB\", ExpandMemoryShorthands::new(), \"2048 mebibytes\");\n    }\n\n    #[test]\n    fn detects_gibibytes() {\n        assert_suggestion_result(\"4 GiB\", ExpandMemoryShorthands::new(), \"4 gibibytes\");\n    }\n\n    #[test]\n    fn detects_tebibytes() {\n        assert_suggestion_result(\"8 TiB\", ExpandMemoryShorthands::new(), \"8 tebibytes\");\n    }\n\n    #[test]\n    fn detects_petabytes() {\n        assert_suggestion_result(\"1 PB\", ExpandMemoryShorthands::new(), \"1 petabyte\");\n    }\n\n    #[test]\n    fn detects_exabytes() {\n        assert_suggestion_result(\"1 EB\", ExpandMemoryShorthands::new(), \"1 exabyte\");\n    }\n\n    #[test]\n    fn detects_zettabytes() {\n        assert_suggestion_result(\"1 ZB\", ExpandMemoryShorthands::new(), \"1 zettabyte\");\n    }\n\n    #[test]\n    fn detects_yottabytes() {\n        assert_suggestion_result(\"1 YB\", ExpandMemoryShorthands::new(), \"1 yottabyte\");\n    }\n\n    #[test]\n    fn detects_quettabytes() {\n        assert_suggestion_result(\"1 QB\", ExpandMemoryShorthands::new(), \"1 quettabyte\");\n    }\n\n    #[test]\n    fn detects_pebibytes() {\n        assert_suggestion_result(\"1 PiB\", ExpandMemoryShorthands::new(), \"1 pebibyte\");\n    }\n\n    #[test]\n    fn detects_exbibytes() {\n        assert_suggestion_result(\"1 EiB\", ExpandMemoryShorthands::new(), \"1 exbibyte\");\n    }\n\n    #[test]\n    fn detects_zebibytes() {\n        assert_suggestion_result(\"1 ZiB\", ExpandMemoryShorthands::new(), \"1 zebibyte\");\n    }\n\n    #[test]\n    fn detects_yobibytes() {\n        assert_suggestion_result(\"1 YiB\", ExpandMemoryShorthands::new(), \"1 yobibyte\");\n    }\n\n    #[test]\n    fn detects_robibytes() {\n        assert_suggestion_result(\"1 RiB\", ExpandMemoryShorthands::new(), \"1 robibyte\");\n    }\n\n    #[test]\n    fn detects_quebibytes() {\n        assert_suggestion_result(\"1 QiB\", ExpandMemoryShorthands::new(), \"1 quebibyte\");\n    }\n\n    #[test]\n    fn handles_punctuation() {\n        assert_suggestion_result(\"8 GB.\", ExpandMemoryShorthands::new(), \"8 gigabytes.\");\n    }\n\n    #[test]\n    fn handles_adjacent_number() {\n        assert_suggestion_result(\"16GB\", ExpandMemoryShorthands::new(), \"16 gigabytes\");\n    }\n\n    #[test]\n    fn handles_hyphen_separated() {\n        assert_suggestion_result(\"32-GB\", ExpandMemoryShorthands::new(), \"32-gigabytes\");\n    }\n\n    #[test]\n    fn doesnt_handle_wrong_kb_cases() {\n        assert_lint_count(\n            \"48kb and 64 KB were common in the 8-bit era.\",\n            ExpandMemoryShorthands::new(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/expand_time_shorthands.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse std::sync::Arc;\n\nuse super::{ExprLinter, Lint, LintKind};\nuse crate::Token;\nuse crate::linting::Suggestion;\nuse crate::linting::expr_linter::Chunk;\nuse crate::patterns::{ImpliesQuantity, WordSet};\n\npub struct ExpandTimeShorthands {\n    expr: SequenceExpr,\n}\n\nimpl ExpandTimeShorthands {\n    pub fn new() -> Self {\n        let hotwords = Arc::new(WordSet::new(&[\n            \"hr\", \"hrs\", \"min\", \"mins\", \"sec\", \"secs\", \"ms\", \"msec\", \"msecs\",\n        ]));\n\n        Self {\n            expr: SequenceExpr::with(ImpliesQuantity).then_longest_of(vec![\n                Box::new(SequenceExpr::with(hotwords.clone())),\n                Box::new(SequenceExpr::default().t_ws_h().then(hotwords.clone())),\n            ]),\n        }\n    }\n\n    fn get_replacement(abbreviation: &str, plural: Option<bool>) -> Option<&'static str> {\n        let is_plural = plural.unwrap_or(matches!(abbreviation, \"hrs\" | \"mins\" | \"secs\" | \"msecs\"));\n        match abbreviation {\n            \"hr\" | \"hrs\" => Some(if is_plural { \"hours\" } else { \"hour\" }),\n            \"min\" | \"mins\" => Some(if is_plural { \"minutes\" } else { \"minute\" }),\n            \"sec\" | \"secs\" => Some(if is_plural { \"seconds\" } else { \"second\" }),\n            \"ms\" | \"msec\" | \"msecs\" => Some(if is_plural {\n                \"milliseconds\"\n            } else {\n                \"millisecond\"\n            }),\n            _ => None,\n        }\n    }\n}\n\nimpl Default for ExpandTimeShorthands {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl ExprLinter for ExpandTimeShorthands {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offending_span = matched_tokens.last()?.span;\n        let implies_plural = ImpliesQuantity::implies_plurality(matched_tokens.first()?, source);\n\n        let offending_text = offending_span.get_content(source);\n\n        let replacement =\n            Self::get_replacement(&offending_text.iter().collect::<String>(), implies_plural)?;\n\n        let mut replacement_chars = Vec::new();\n\n        // If there isn't spacing, insert a space\n        if matched_tokens.len() == 2 {\n            replacement_chars.push(' ');\n        }\n\n        replacement_chars.extend(replacement.chars());\n\n        if replacement_chars == offending_text {\n            return None;\n        }\n\n        Some(Lint {\n            span: offending_span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::ReplaceWith(replacement_chars)],\n            message: format!(\"Did you mean `{replacement}`?\"),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Expands time-related abbreviations (`hr`, `hrs`, `min`, `mins`, `sec`, `secs`, `ms`, `msec`, `msecs`) to their full forms (`hour`, `hours`, `minute`, `minutes`, `second`, `seconds`, `millisecond`, `milliseconds`).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::ExpandTimeShorthands;\n\n    #[test]\n    fn detects_singular_hour() {\n        assert_suggestion_result(\"5 hr\", ExpandTimeShorthands::new(), \"5 hours\");\n    }\n\n    #[test]\n    fn detects_singular_minute() {\n        assert_suggestion_result(\"10 min\", ExpandTimeShorthands::new(), \"10 minutes\");\n    }\n\n    #[test]\n    fn detects_singular_second() {\n        assert_suggestion_result(\"30 sec\", ExpandTimeShorthands::new(), \"30 seconds\");\n    }\n\n    #[test]\n    fn detects_plural_hours() {\n        assert_suggestion_result(\"5 hrs\", ExpandTimeShorthands::new(), \"5 hours\");\n    }\n\n    #[test]\n    fn detects_plural_minutes() {\n        assert_suggestion_result(\"10 mins\", ExpandTimeShorthands::new(), \"10 minutes\");\n    }\n\n    #[test]\n    fn detects_plural_seconds() {\n        assert_suggestion_result(\"30 secs\", ExpandTimeShorthands::new(), \"30 seconds\");\n    }\n\n    #[test]\n    fn detects_millisecond() {\n        assert_suggestion_result(\"5 ms\", ExpandTimeShorthands::new(), \"5 milliseconds\");\n    }\n\n    #[test]\n    fn detects_milliseconds() {\n        assert_suggestion_result(\"10 msecs\", ExpandTimeShorthands::new(), \"10 milliseconds\");\n    }\n\n    #[test]\n    fn handles_punctuation_hour() {\n        assert_suggestion_result(\"5 hr.\", ExpandTimeShorthands::new(), \"5 hours.\");\n    }\n\n    #[test]\n    fn handles_punctuation_minute() {\n        assert_suggestion_result(\"10 min,\", ExpandTimeShorthands::new(), \"10 minutes,\");\n    }\n\n    #[test]\n    fn handles_punctuation_second() {\n        assert_suggestion_result(\"30 sec!\", ExpandTimeShorthands::new(), \"30 seconds!\");\n    }\n\n    #[test]\n    fn handles_adjacent_number_hour() {\n        assert_suggestion_result(\"5hr\", ExpandTimeShorthands::new(), \"5 hours\");\n    }\n\n    #[test]\n    fn handles_adjacent_number_minute() {\n        assert_suggestion_result(\"10-min\", ExpandTimeShorthands::new(), \"10-minutes\");\n    }\n\n    #[test]\n    fn handles_adjacent_number_second() {\n        assert_suggestion_result(\"30sec\", ExpandTimeShorthands::new(), \"30 seconds\");\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/expr_linter.rs",
    "content": "use crate::expr::{Expr, ExprExt};\nuse blanket::blanket;\n\nuse crate::{Document, LSend, Token, TokenStringExt};\n\nuse super::{Lint, Linter};\n\npub trait DocumentIterator {\n    type Unit;\n\n    fn iter_units<'a>(document: &'a Document) -> Box<dyn Iterator<Item = &'a [Token]> + 'a>;\n}\n\n/// Process text in chunks (clauses between commas)\npub struct Chunk;\n/// Process text in full sentences\npub struct Sentence;\n\nimpl DocumentIterator for Chunk {\n    type Unit = Chunk;\n\n    fn iter_units<'a>(document: &'a Document) -> Box<dyn Iterator<Item = &'a [Token]> + 'a> {\n        Box::new(document.iter_chunks())\n    }\n}\n\nimpl DocumentIterator for Sentence {\n    type Unit = Sentence;\n\n    fn iter_units<'a>(document: &'a Document) -> Box<dyn Iterator<Item = &'a [Token]> + 'a> {\n        Box::new(document.iter_sentences())\n    }\n}\n\n/// A trait that searches for tokens that fulfil [`Expr`]s in a [`Document`].\n///\n/// Makes use of [`TokenStringExt::iter_chunks`] by default, or [`TokenStringExt::iter_sentences`] to process either\n/// a chunk (clause) or a sentence at a time.\n#[blanket(derive(Box))]\npub trait ExprLinter: LSend {\n    type Unit: DocumentIterator;\n\n    /// A simple getter for the expression you want Harper to search for.\n    fn expr(&self) -> &dyn Expr;\n    /// If any portions of a [`Document`] match [`Self::expr`], they are passed through [`ExprLinter::match_to_lint`]\n    /// or [`ExprLinter::match_to_lint_with_context`] to be transformed into a [`Lint`] for editor consumption.\n    ///\n    /// Transform matched tokens into a [`Lint`] for editor consumption.\n    ///\n    /// This is the simple version that only sees the matched tokens. For context-aware linting,\n    /// implement `match_to_lint_with_context` instead.\n    ///\n    /// Return `None` to skip producing a lint for this match.\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        self.match_to_lint_with_context(matched_tokens, source, None)\n    }\n\n    /// Transform matched tokens into a [`Lint`] with access to surrounding context.\n    ///\n    /// The context provides access to tokens before and after the match. When implementing\n    /// this method, you can call `self.match_to_lint()` as a fallback if the context isn't needed.\n    ///\n    /// Return `None` to skip producing a lint for this match.\n    fn match_to_lint_with_context(\n        &self,\n        matched_tokens: &[Token],\n        source: &[char],\n        _context: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        // Default implementation falls back to the simple version\n        self.match_to_lint(matched_tokens, source)\n    }\n    /// A user-facing description of what kinds of grammatical errors this rule looks for.\n    /// It is usually shown in settings menus.\n    fn description(&self) -> &str;\n}\n\n/// Helper function to find the only occurrence of a token matching a predicate\n///\n/// Returns `Some(token)` if exactly one token matches the predicate, `None` otherwise.\n/// TODO: This can be used in the [`ThenThan`] linter when #1819 is merged.\npub fn find_the_only_token_matching<'a, F>(\n    tokens: &'a [Token],\n    source: &[char],\n    predicate: F,\n) -> Option<&'a Token>\nwhere\n    F: Fn(&Token, &[char]) -> bool,\n{\n    let mut matches = tokens.iter().filter(|&tok| predicate(tok, source));\n    match (matches.next(), matches.next()) {\n        (Some(tok), None) => Some(tok),\n        _ => None,\n    }\n}\n\nimpl<L, U> Linter for L\nwhere\n    L: ExprLinter<Unit = U>,\n    U: DocumentIterator,\n{\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n        let source = document.get_source();\n\n        for unit in U::iter_units(document) {\n            lints.extend(run_on_chunk(self, unit, source));\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        self.description()\n    }\n}\n\npub fn run_on_chunk<'a>(\n    linter: &'a impl ExprLinter,\n    unit: &'a [Token],\n    source: &'a [char],\n) -> impl Iterator<Item = Lint> + 'a {\n    linter\n        .expr()\n        .iter_matches(unit, source)\n        .filter_map(|match_span| {\n            linter.match_to_lint_with_context(\n                &unit[match_span.start..match_span.end],\n                source,\n                Some((&unit[..match_span.start], &unit[match_span.end..])),\n            )\n        })\n}\n\n/// Check for sentence continuation after a matched span.\n///\n/// Validates that the \"after\" context starts with whitespace followed by a word token,\n/// allowing flexible inspection of that word's properties (POS tags, etc.) via the predicate.\n/// The predicate can be used to confirm matches, suppress false positives, or apply conditional logic.\n///\n/// Returns `false` if context is `None`, missing tokens, or the structure is malformed.\npub fn followed_by_word(\n    context: Option<(&[Token], &[Token])>,\n    predicate: impl Fn(&Token) -> bool,\n) -> bool {\n    if let Some((_, after)) = context\n        && let [ws, word, ..] = after\n        && ws.kind.is_whitespace()\n    {\n        return predicate(word);\n    }\n    false\n}\n\npub fn followed_by_hyphen(context: Option<(&[Token], &[Token])>) -> bool {\n    context\n        .and_then(|(_, after)| after.first())\n        .is_some_and(|hy| hy.kind.is_hyphen())\n}\n\npub fn preceded_by_word(\n    context: Option<(&[Token], &[Token])>,\n    predicate: impl Fn(&Token) -> bool,\n) -> bool {\n    if let Some((before, _)) = context\n        && let [.., word, ws] = before\n        && ws.kind.is_whitespace()\n    {\n        return predicate(word);\n    }\n    false\n}\n\n#[cfg(test)]\nmod tests_context {\n    use crate::expr::{Expr, FixedPhrase};\n    use crate::linting::expr_linter::{Chunk, Sentence};\n    use crate::linting::tests::assert_suggestion_result;\n    use crate::linting::{ExprLinter, Suggestion};\n    use crate::token_string_ext::TokenStringExt;\n    use crate::{Lint, Token};\n\n    pub struct TestSimpleLinter {\n        expr: Box<dyn Expr>,\n    }\n\n    impl Default for TestSimpleLinter {\n        fn default() -> Self {\n            Self {\n                expr: Box::new(FixedPhrase::from_phrase(\"two\")),\n            }\n        }\n    }\n\n    impl ExprLinter for TestSimpleLinter {\n        type Unit = Chunk;\n\n        fn expr(&self) -> &dyn Expr {\n            &*self.expr\n        }\n\n        fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {\n            Some(Lint {\n                span: toks.span()?,\n                message: \"simple\".to_string(),\n                suggestions: vec![Suggestion::ReplaceWith(vec!['2'])],\n                ..Default::default()\n            })\n        }\n\n        fn description(&self) -> &str {\n            \"test linter\"\n        }\n    }\n\n    pub struct TestContextLinter {\n        expr: Box<dyn Expr>,\n    }\n\n    impl Default for TestContextLinter {\n        fn default() -> Self {\n            Self {\n                expr: Box::new(FixedPhrase::from_phrase(\"two\")),\n            }\n        }\n    }\n\n    impl ExprLinter for TestContextLinter {\n        type Unit = Chunk;\n\n        fn expr(&self) -> &dyn Expr {\n            &*self.expr\n        }\n\n        fn match_to_lint_with_context(\n            &self,\n            toks: &[Token],\n            src: &[char],\n            context: Option<(&[Token], &[Token])>,\n        ) -> Option<Lint> {\n            if let Some((before, after)) = context {\n                let before = before.span()?.get_content_string(src);\n                let after = after.span()?.get_content_string(src);\n\n                let (message, suggestions) = if before.eq_ignore_ascii_case(\"one \")\n                    && after.eq_ignore_ascii_case(\" three\")\n                {\n                    (\n                        \"ascending\".to_string(),\n                        vec![Suggestion::ReplaceWith(vec!['>'])],\n                    )\n                } else if before.eq_ignore_ascii_case(\"three \")\n                    && after.eq_ignore_ascii_case(\" one\")\n                {\n                    (\n                        \"descending\".to_string(),\n                        vec![Suggestion::ReplaceWith(vec!['<'])],\n                    )\n                } else {\n                    (\n                        \"dunno\".to_string(),\n                        vec![Suggestion::ReplaceWith(vec!['?'])],\n                    )\n                };\n\n                return Some(Lint {\n                    span: toks.span()?,\n                    message,\n                    suggestions,\n                    ..Default::default()\n                });\n            } else {\n                None\n            }\n        }\n\n        fn description(&self) -> &str {\n            \"context linter\"\n        }\n    }\n\n    pub struct TestSentenceLinter {\n        expr: Box<dyn Expr>,\n    }\n\n    impl Default for TestSentenceLinter {\n        fn default() -> Self {\n            Self {\n                expr: Box::new(FixedPhrase::from_phrase(\"two, two\")),\n            }\n        }\n    }\n\n    impl ExprLinter for TestSentenceLinter {\n        type Unit = Sentence;\n\n        fn expr(&self) -> &dyn Expr {\n            self.expr.as_ref()\n        }\n\n        fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {\n            Some(Lint {\n                span: toks.span()?,\n                message: \"sentence\".to_string(),\n                suggestions: vec![Suggestion::ReplaceWith(vec!['2', '&', '2'])],\n                ..Default::default()\n            })\n        }\n\n        fn description(&self) -> &str {\n            \"sentence linter\"\n        }\n    }\n\n    #[test]\n    fn simple_test_123() {\n        assert_suggestion_result(\"one two three\", TestSimpleLinter::default(), \"one 2 three\");\n    }\n\n    #[test]\n    fn context_test_123() {\n        assert_suggestion_result(\"one two three\", TestContextLinter::default(), \"one > three\");\n    }\n\n    #[test]\n    fn context_test_321() {\n        assert_suggestion_result(\"three two one\", TestContextLinter::default(), \"three < one\");\n    }\n\n    #[test]\n    fn sentence_test_123() {\n        assert_suggestion_result(\n            \"one, two, two, three\",\n            TestSentenceLinter::default(),\n            \"one, 2&2, three\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/far_be_it.rs",
    "content": "use crate::char_string::CharStringExt;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::token::Token;\n\npub struct FarBeIt {\n    expr: SequenceExpr,\n}\n\nimpl Default for FarBeIt {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::default()\n                .t_aco(\"far\")\n                .t_ws()\n                .t_aco(\"be\")\n                .t_ws()\n                .t_aco(\"it\")\n                .t_ws()\n                .then_word_except(&[\"from\"]),\n        }\n    }\n}\n\nimpl ExprLinter for FarBeIt {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let span = toks.last()?.span;\n        let content = span.get_content(src);\n\n        // We can only correct using `far be it for`, otherwise we recommend rephrasing the sentence.\n        let (suggestions, message) = if span.get_content(src).eq_ignore_ascii_case_str(\"for\") {\n            (\n                vec![Suggestion::replace_with_match_case(\n                    vec!['f', 'r', 'o', 'm'],\n                    content,\n                )],\n                \"`Far be it for` is a common error for `far be it from`\".to_string(),\n            )\n        } else {\n            (vec![], \"The correct usage of the idiom is `far be it from` [someone] to [do something]. Try to rephrase the sentence.\".to_string())\n        };\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Usage,\n            suggestions,\n            message,\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags misuse of `far be it` and suggests using `from` when it is followed by `for`\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::FarBeIt;\n    use crate::linting::tests::{\n        assert_no_lints, assert_suggestion_count, assert_suggestion_result,\n    };\n\n    #[test]\n    fn far_be_it_for_me_capitalized() {\n        assert_suggestion_result(\n            \"Far be it for me to suggestion that additional cardinality be added to the already TOO MUCH CARDINALITY metric space.\",\n            FarBeIt::default(),\n            \"Far be it from me to suggestion that additional cardinality be added to the already TOO MUCH CARDINALITY metric space.\",\n        );\n    }\n\n    #[test]\n    fn far_be_it_for_me_lowercase() {\n        assert_suggestion_result(\n            \"Far be it for me to tell people what to do so I'm not earnestly proposing to take away the ability to add literals to lazyframes.\",\n            FarBeIt::default(),\n            \"Far be it from me to tell people what to do so I'm not earnestly proposing to take away the ability to add literals to lazyframes.\",\n        );\n    }\n\n    #[test]\n    fn far_be_it_that() {\n        assert_suggestion_count(\n            \"Far be it that I get in the middle of this thread (and the complexity WebAuthn has spawned)\",\n            FarBeIt::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn far_be_it_for_the_software() {\n        assert_suggestion_result(\n            \"Far be it for the software to give any indication of that fact.\",\n            FarBeIt::default(),\n            \"Far be it from the software to give any indication of that fact.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"No punctuation between '... so far' and 'be it ...'\"]\n    fn missing_punctuation_false_positive() {\n        assert_no_lints(\n            \"but it is failing for master and all the 11.x branches i have tried so far be it 11.0.0, 11.0.1 ...\",\n            FarBeIt::default(),\n        );\n    }\n\n    #[test]\n    fn far_be_it_to() {\n        assert_suggestion_count(\n            \"I'm not a marketing guy, so far be it to second guess that.\",\n            FarBeIt::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/fascinated_by.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct FascinatedBy {\n    expr: SequenceExpr,\n}\n\nimpl Default for FascinatedBy {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"fascinated\").t_ws().then_preposition(),\n        }\n    }\n}\n\nimpl ExprLinter for FascinatedBy {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let prep_span = toks.last()?.span;\n        let prep_chars = prep_span.get_content(src);\n        if prep_chars.eq_any_ignore_ascii_case_str(&[\"by\", \"with\"]) {\n            return None;\n        }\n\n        Some(Lint {\n            span: prep_span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![\n                Suggestion::replace_with_match_case_str(\"by\", prep_chars),\n                Suggestion::replace_with_match_case_str(\"with\", prep_chars),\n            ],\n            message: \"The correct prepositions to use with `fascinated` are `by` or `with`.\"\n                .to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Ensures the correct prepositions are used with `fascinated` (e.g., `fascinated by` or `fascinated with`).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::{fascinated_by::FascinatedBy, tests::assert_good_and_bad_suggestions};\n\n    #[test]\n    fn fix_amiga() {\n        assert_good_and_bad_suggestions(\n            \"Now, one aspect of the Amiga that I've always been fascinated about is making my own games for the Amiga.\",\n            FascinatedBy::default(),\n            &[\n                \"Now, one aspect of the Amiga that I've always been fascinated by is making my own games for the Amiga.\",\n                \"Now, one aspect of the Amiga that I've always been fascinated with is making my own games for the Amiga.\",\n            ][..],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_microbit() {\n        assert_good_and_bad_suggestions(\n            \"also why I am very fascinated about the micro:bit itself\",\n            FascinatedBy::default(),\n            &[\n                \"also why I am very fascinated by the micro:bit itself\",\n                \"also why I am very fascinated with the micro:bit itself\",\n            ][..],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_software_development() {\n        assert_good_and_bad_suggestions(\n            \"Self-learner, fascinated about software development, especially computer graphics and web - marcus-phi.\",\n            FascinatedBy::default(),\n            &[\n                \"Self-learner, fascinated by software development, especially computer graphics and web - marcus-phi.\",\n                \"Self-learner, fascinated with software development, especially computer graphics and web - marcus-phi.\",\n            ][..],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_computer_science() {\n        assert_good_and_bad_suggestions(\n            \"Fascinated about Computer Science, Finance and Statistics.\",\n            FascinatedBy::default(),\n            &[\n                \"Fascinated by Computer Science, Finance and Statistics.\",\n                \"Fascinated with Computer Science, Finance and Statistics.\",\n            ][..],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_possibilities() {\n        assert_good_and_bad_suggestions(\n            \"m relatively new to deCONZ and Conbee2 but already very fascinated about the possibilities compared to Philips and Ikea's\",\n            FascinatedBy::default(),\n            &[\n                \"m relatively new to deCONZ and Conbee2 but already very fascinated by the possibilities compared to Philips and Ikea's\",\n                \"m relatively new to deCONZ and Conbee2 but already very fascinated with the possibilities compared to Philips and Ikea's\",\n            ][..],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_project() {\n        assert_good_and_bad_suggestions(\n            \"I have been using browser use in local mode for a while and i am pretty fascinated about the project.\",\n            FascinatedBy::default(),\n            &[\n                \"I have been using browser use in local mode for a while and i am pretty fascinated by the project.\",\n                \"I have been using browser use in local mode for a while and i am pretty fascinated with the project.\",\n            ][..],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_work() {\n        assert_good_and_bad_suggestions(\n            \"Hey guys, I am really fascinated about your work and I tried to build Magisk so I will be able to contribute for the project.\",\n            FascinatedBy::default(),\n            &[\n                \"Hey guys, I am really fascinated by your work and I tried to build Magisk so I will be able to contribute for the project.\",\n                \"Hey guys, I am really fascinated with your work and I tried to build Magisk so I will be able to contribute for the project.\",\n            ][..],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_ais() {\n        assert_good_and_bad_suggestions(\n            \"I am a retired Dutch telecom engineer and fascinated about AIS applications.\",\n            FascinatedBy::default(),\n            &[\n                \"I am a retired Dutch telecom engineer and fascinated by AIS applications.\",\n                \"I am a retired Dutch telecom engineer and fascinated with AIS applications.\",\n            ][..],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_innovative_ideas() {\n        assert_good_and_bad_suggestions(\n            \"Software Developer fascinated about innovative ideas, love to learn and share new technologies and ideas.\",\n            FascinatedBy::default(),\n            &[\n                \"Software Developer fascinated by innovative ideas, love to learn and share new technologies and ideas.\",\n                \"Software Developer fascinated with innovative ideas, love to learn and share new technologies and ideas.\",\n            ][..],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_coding() {\n        assert_good_and_bad_suggestions(\n            \"m fascinated about coding and and sharing my code to the world.\",\n            FascinatedBy::default(),\n            &[\n                \"m fascinated by coding and and sharing my code to the world.\",\n                \"m fascinated with coding and and sharing my code to the world.\",\n            ][..],\n            &[],\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/fed_up_with.rs",
    "content": "use crate::{\n    Dialect, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct FedUpWith {\n    expr: SequenceExpr,\n    dialect: Dialect,\n}\n\nimpl FedUpWith {\n    pub fn new(dialect: Dialect) -> Self {\n        let expr = SequenceExpr::fixed_phrase(\"fed up of\");\n\n        Self { expr, dialect }\n    }\n}\n\nimpl ExprLinter for FedUpWith {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        if self.dialect == Dialect::British {\n            return None;\n        }\n\n        let oftok = toks.last()?;\n        let ofspan = oftok.span;\n\n        Some(Lint {\n            span: ofspan,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"with\",\n                ofspan.get_content(src),\n            )],\n            message: \"`Fed up of` is not accepted outside of British English.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `fed up of` to `fed up with` in dialects other than British English.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::FedUpWith;\n    use crate::Dialect;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn correct_fed_up_of_in_us_english() {\n        assert_suggestion_result(\n            \"I am fed up of Bugzilla reports being ignored.\",\n            FedUpWith::new(Dialect::American),\n            \"I am fed up with Bugzilla reports being ignored.\",\n        );\n    }\n\n    #[test]\n    fn correct_fed_up_of_in_canadian_english() {\n        assert_suggestion_result(\n            \"Fed up of long links ??? Use ✨ Linsh ✨, a CLI tool to shorten links.\",\n            FedUpWith::new(Dialect::Canadian),\n            \"Fed up with long links ??? Use ✨ Linsh ✨, a CLI tool to shorten links.\",\n        );\n    }\n\n    #[test]\n    fn correct_fed_up_of_in_aus_english() {\n        assert_suggestion_result(\n            \"Fed up of the lack of Twitter embedded timeline styling options?\",\n            FedUpWith::new(Dialect::Australian),\n            \"Fed up with the lack of Twitter embedded timeline styling options?\",\n        );\n    }\n\n    #[test]\n    fn correct_fed_up_of_in_indian_english() {\n        assert_suggestion_result(\n            \"I got fed up of finding my IP (v4) address in the big pile of text that ifconfig outputs on OS X.\",\n            FedUpWith::new(Dialect::Indian),\n            \"I got fed up with finding my IP (v4) address in the big pile of text that ifconfig outputs on OS X.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_fed_up_of_in_british_english() {\n        assert_no_lints(\n            \"Fed up of having to repeat the same actions for installing webmin so here's a script for 16.04+\",\n            FedUpWith::new(Dialect::British),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/feel_fell.rs",
    "content": "use crate::Token;\nuse crate::char_string::CharStringExt;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::expr_linter::find_the_only_token_matching;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\n\npub struct FeelFell {\n    expr: SequenceExpr,\n}\n\nimpl Default for FeelFell {\n    fn default() -> Self {\n        let with_word_before = SequenceExpr::word_set(&[\"didn't\", \"doesn't\"])\n            .t_ws()\n            .t_aco(\"fell\");\n\n        let with_word_after = SequenceExpr::default()\n            .t_aco(\"fell\")\n            .t_ws()\n            .then_word_set(&[\n                \"comfortable\",\n                \"free\",\n                \"good\",\n                \"I\",\n                \"I'm\",\n                \"it\",\n                \"it's\",\n                \"like\",\n                \"that\",\n                \"we\",\n                \"you\",\n            ]);\n\n        Self {\n            expr: SequenceExpr::any_of(vec![Box::new(with_word_before), Box::new(with_word_after)]),\n        }\n    }\n}\n\nimpl ExprLinter for FeelFell {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let fell_token = find_the_only_token_matching(toks, src, |tok, src| {\n            tok.span\n                .get_content(src)\n                .eq_ignore_ascii_case_chars(&['f', 'e', 'l', 'l'])\n        })?;\n\n        Some(Lint {\n            span: fell_token.span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"feel\",\n                fell_token.span.get_content(src),\n            )],\n            message: \"It looks like this is a typo, did you mean `feel`?\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects some expressions using `fell` where `feel` is correct.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::FeelFell;\n\n    #[test]\n    fn fix_i_fell_like() {\n        assert_suggestion_result(\n            \"But I fell like i am having a knot in my brain ...\",\n            FeelFell::default(),\n            \"But I feel like i am having a knot in my brain ...\",\n        );\n    }\n\n    #[test]\n    fn fix_if_you_fell_like_it() {\n        assert_suggestion_result(\n            \"If you fell like it create w2ui-postgres for server side implementation\",\n            FeelFell::default(),\n            \"If you feel like it create w2ui-postgres for server side implementation\",\n        );\n    }\n\n    #[test]\n    fn fix_i_dont_fell_like() {\n        assert_suggestion_result(\n            \"But with this bug in place, I don't fell like asking the student to work with this tool\",\n            FeelFell::default(),\n            \"But with this bug in place, I don't feel like asking the student to work with this tool\",\n        );\n    }\n\n    #[test]\n    fn fix_fell_comfortable() {\n        assert_suggestion_result(\n            \"Technology that I fell comfortable to wok Php,Laravel, Javascript,Vue, Jquery, MySqli, sqLite.\",\n            FeelFell::default(),\n            \"Technology that I feel comfortable to wok Php,Laravel, Javascript,Vue, Jquery, MySqli, sqLite.\",\n        );\n    }\n\n    #[test]\n    fn fix_fell_good() {\n        assert_suggestion_result(\n            \"I've ha a touch of the flu and didn't fell good enough to mess with the computer.\",\n            FeelFell::default(),\n            \"I've ha a touch of the flu and didn't feel good enough to mess with the computer.\",\n        );\n    }\n\n    #[test]\n    fn fix_didnt_fell() {\n        assert_suggestion_result(\n            \"They have served me well, and I didn't fell that it's a gamble.\",\n            FeelFell::default(),\n            \"They have served me well, and I didn't feel that it's a gamble.\",\n        );\n    }\n\n    #[test]\n    fn fix_fell_free() {\n        assert_suggestion_result(\n            \"Please fell free to add more songs.\",\n            FeelFell::default(),\n            \"Please feel free to add more songs.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Needs more context or better heuristics\"]\n    fn fix_fell_right() {\n        assert_suggestion_result(\n            \"It may fell right first but only causes confusion in long run.\",\n            FeelFell::default(),\n            \"It may feel right first but only causes confusion in long run.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_fell_right_into() {\n        assert_no_lints(\n            \"I followed the instructions in the browser, and waited, then it fell right into shape, and the system is working out.\",\n            FeelFell::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_fell_right_through() {\n        assert_no_lints(\n            \"In this case the whole Piper context menu entry is missing since the uncaught exception fell right through the whole context menu factory.\",\n            FeelFell::default(),\n        );\n    }\n\n    #[test]\n    fn fix_does_not_fell_comfortable() {\n        assert_suggestion_result(\n            \"she does not fell comfortable with the \\\" iso \\\"-format\",\n            FeelFell::default(),\n            \"she does not feel comfortable with the \\\" iso \\\"-format\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Needs more context or better heuristics\"]\n    fn dont_flag_didnt_fell_for_it() {\n        assert_no_lints(\n            \"I even tried to trick someone else to delete and add the device but he didn't fell for it...\",\n            FeelFell::default(),\n        );\n    }\n\n    #[test]\n    fn fix_fell_that() {\n        assert_suggestion_result(\n            \"I fell that a libSQL adapter would be a reasonable addition to the core offering.\",\n            FeelFell::default(),\n            \"I feel that a libSQL adapter would be a reasonable addition to the core offering.\",\n        );\n    }\n\n    #[test]\n    fn fix_fell_it() {\n        assert_suggestion_result(\n            \"I personally fell it makes the screens difficult to use\",\n            FeelFell::default(),\n            \"I personally feel it makes the screens difficult to use\",\n        );\n    }\n\n    #[test]\n    fn fix_fell_its() {\n        assert_suggestion_result(\n            \"but I fell it's too late to update that specific part of the API\",\n            FeelFell::default(),\n            \"but I feel it's too late to update that specific part of the API\",\n        );\n    }\n\n    #[test]\n    fn fix_fell_im() {\n        assert_suggestion_result(\n            \"I fell I'm missing sth and I need help.\",\n            FeelFell::default(),\n            \"I feel I'm missing sth and I need help.\",\n        );\n    }\n\n    #[test]\n    fn fix_fell_we() {\n        assert_suggestion_result(\n            \"i fell we will have to directly use BigDecimal here for Json encoding\",\n            FeelFell::default(),\n            \"i feel we will have to directly use BigDecimal here for Json encoding\",\n        );\n    }\n\n    #[test]\n    fn fix_fell_i() {\n        assert_suggestion_result(\n            \"feel free to reopen if you fell I have missed something\",\n            FeelFell::default(),\n            \"feel free to reopen if you feel I have missed something\",\n        );\n    }\n\n    #[test]\n    fn fix_fell_you() {\n        assert_suggestion_result(\n            \"But, I maybe fell you are stepping away from what a Markdown link actually is\",\n            FeelFell::default(),\n            \"But, I maybe feel you are stepping away from what a Markdown link actually is\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/few_units_of_time_ago.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::expr::TimeUnitExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    linting::{ExprLinter, Lint, Suggestion},\n};\n\npub struct FewUnitsOfTimeAgo {\n    expr: SequenceExpr,\n}\n\nimpl Default for FewUnitsOfTimeAgo {\n    fn default() -> Self {\n        let units = TimeUnitExpr;\n\n        let start = SequenceExpr::default().then_word_except(&[\"a\"]).t_ws();\n\n        let expr = SequenceExpr::with(start)\n            .t_aco(\"few\")\n            .then_whitespace()\n            .then(units)\n            .then_whitespace()\n            .t_aco(\"ago\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for FewUnitsOfTimeAgo {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let mut span = None;\n\n        for tok in toks.iter().take(3) {\n            if tok.span.get_content_string(src).eq_ignore_ascii_case(\"few\") {\n                span = Some(tok.span);\n                break;\n            }\n        }\n\n        span?;\n\n        Some(Lint {\n            span: span.unwrap(),\n            message: \"In this construction you need to use `a few` instead of just `few`.\"\n                .to_string(),\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"a few\",\n                span.unwrap().get_content(src),\n            )],\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects some expressions using `few` where `a few` is correct.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    // Basic unit tests\n\n    #[test]\n    #[ignore = \"Needs ^ zero-width anchor that matches the start of a chunk\"]\n    fn fix_few_minutes_ago() {\n        assert_suggestion_result(\n            \"Few minutes ago\",\n            FewUnitsOfTimeAgo::default(),\n            \"A few minutes ago\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_a_few_minutes_ago() {\n        assert_lint_count(\"A few minutes ago\", FewUnitsOfTimeAgo::default(), 0);\n    }\n\n    #[test]\n    fn fix_done_few_minutes_ago() {\n        assert_suggestion_result(\n            \"Done few minutes ago\",\n            FewUnitsOfTimeAgo::default(),\n            \"Done a few minutes ago\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_done_a_few_minutes_ago() {\n        assert_lint_count(\"Done a few minutes ago\", FewUnitsOfTimeAgo::default(), 0);\n    }\n\n    #[test]\n    #[ignore = \"Needs ^ zero-width anchor that matches the start of a chunk\"]\n    fn fix_after_space() {\n        assert_suggestion_result(\n            \" Few minutes ago.\",\n            FewUnitsOfTimeAgo::default(),\n            \" A few minutes ago.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Needs ^ zero-width anchor that matches the start of a chunk\"]\n    fn fix_2nd_sentence() {\n        assert_suggestion_result(\n            \"Hello World. Few minutes ago I bought your planet.\",\n            FewUnitsOfTimeAgo::default(),\n            \"Hello World. A few minutes ago I bought your planet.\",\n        );\n    }\n\n    // Real world examples from GitHub\n\n    #[test]\n    fn fix_days() {\n        assert_suggestion_result(\n            \"My jupyter kernel always says restarting and never ever runs i ran into the problem few days ago before it was fine dont know what happened\",\n            FewUnitsOfTimeAgo::default(),\n            \"My jupyter kernel always says restarting and never ever runs i ran into the problem a few days ago before it was fine dont know what happened\",\n        );\n    }\n\n    #[test]\n    fn fix_decades() {\n        assert_suggestion_result(\n            \"This is very old piece of software I wrote few decades ago.\",\n            FewUnitsOfTimeAgo::default(),\n            \"This is very old piece of software I wrote a few decades ago.\",\n        );\n    }\n\n    #[test]\n    fn fix_hours() {\n        assert_suggestion_result(\n            \"I just updated my index file few hours ago and there's this error.\",\n            FewUnitsOfTimeAgo::default(),\n            \"I just updated my index file a few hours ago and there's this error.\",\n        );\n    }\n\n    #[test]\n    fn fix_minutes() {\n        assert_suggestion_result(\n            \"mysql installed few minutes ago somehow , ubuntu bash thinks its not installed.\",\n            FewUnitsOfTimeAgo::default(),\n            \"mysql installed a few minutes ago somehow , ubuntu bash thinks its not installed.\",\n        );\n    }\n\n    #[test]\n    fn fix_months() {\n        assert_suggestion_result(\n            \"Hello, I was working with D455 few months ago, and everything was working fine.\",\n            FewUnitsOfTimeAgo::default(),\n            \"Hello, I was working with D455 a few months ago, and everything was working fine.\",\n        );\n    }\n\n    #[test]\n    fn fix_ms() {\n        assert_suggestion_result(\n            \"So I not sure, by getting old signal (get from few ms ago), will it affected my result badly?\",\n            FewUnitsOfTimeAgo::default(),\n            \"So I not sure, by getting old signal (get from a few ms ago), will it affected my result badly?\",\n        );\n    }\n\n    #[test]\n    fn fix_seconds() {\n        assert_suggestion_result(\n            \"I have submitted the same issue few seconds ago.\",\n            FewUnitsOfTimeAgo::default(),\n            \"I have submitted the same issue a few seconds ago.\",\n        );\n    }\n\n    #[test]\n    fn fix_weekends() {\n        assert_suggestion_result(\n            \"This challenge is a Python jail escape and lucky for me our team had just done one few weekends ago so I was fairly familiar with the tricks to break out.\",\n            FewUnitsOfTimeAgo::default(),\n            \"This challenge is a Python jail escape and lucky for me our team had just done one a few weekends ago so I was fairly familiar with the tricks to break out.\",\n        );\n    }\n\n    #[test]\n    fn fix_weeks() {\n        assert_suggestion_result(\n            \"Terraform cloud crashes on plan (same configuration worked few weeks ago)\",\n            FewUnitsOfTimeAgo::default(),\n            \"Terraform cloud crashes on plan (same configuration worked a few weeks ago)\",\n        );\n    }\n\n    #[test]\n    fn fix_years() {\n        assert_suggestion_result(\n            \"sandbox-exec was deprecated on MacOS few years ago\",\n            FewUnitsOfTimeAgo::default(),\n            \"sandbox-exec was deprecated on MacOS a few years ago\",\n        );\n    }\n\n    // Real world non-errors from GitHub\n\n    #[test]\n    fn dont_flag_centuries() {\n        assert_lint_count(\n            \"Would have been useful a few centuries ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_days() {\n        assert_lint_count(\n            \"A few days ago, I upgraded ComfyUI to the latest version, then the prompt node can't upload prompt list text file in Ubuntu\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_decades() {\n        assert_lint_count(\n            \"With your QA background you may have heard of the IBM black team of testers back a few decades ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_hours() {\n        assert_lint_count(\n            \"It was working well and we could see the installation page a few hours ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_milliseconds() {\n        assert_lint_count(\n            \"It is actually the true motor angle observed a few milliseconds ago (pd latency).\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_minutes() {\n        assert_lint_count(\n            \"Example from DoD The following was circulated a few minutes ago on an IDESG/NSTIC list\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_moments() {\n        assert_lint_count(\n            \"Our microservices started failing a few moments ago when creating new...\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_months() {\n        assert_lint_count(\n            \"A few months ago there was an mixed reality project.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_nights() {\n        assert_lint_count(\n            \"As an example, a few nights ago I was working on my laptop and stuff that had been working stopped working.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_seconds() {\n        assert_lint_count(\n            \"0 - 45 seconds, a few seconds ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_weeks() {\n        assert_lint_count(\n            \"It was all working perfectly till a few weeks ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_years() {\n        assert_lint_count(\n            \"Hello, I've been an intensive user of your dada2 pipeline until a few years ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    // Real world non-errors from GitHub (but using singular forms)\n\n    #[test]\n    fn dont_flag_decade() {\n        assert_lint_count(\n            \"With your QA background you may have heard of the IBM black team of testers back a few decade ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_hour() {\n        assert_lint_count(\n            \"It was working well and we could see the installation page a few hour ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_millennia() {\n        assert_lint_count(\n            \"A few millennia ago, there was a civilization here\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_minute() {\n        assert_lint_count(\n            \"Example from DoD The following was circulated a few minute ago on an IDESG/NSTIC list\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_moment() {\n        assert_lint_count(\n            \"No problem should be in the updated version pushed a few moment ago will be live in beta in about 10 min.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_month() {\n        assert_lint_count(\n            \"I noticed the same thing a few month ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_second() {\n        assert_lint_count(\n            \"Bug it doesnt even answer me rn, like a few second ago he did\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_week() {\n        assert_lint_count(\n            \"A few week ago, when logging in the usual way\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_year() {\n        assert_lint_count(\n            \"Hello, I've been an intensive user of your dada2 pipeline until a few year ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    // Real world non-errors from GitHub using apostrophes\n\n    #[test]\n    fn dont_flag_days_apos() {\n        assert_lint_count(\n            \"And finally it got released a few day's ago.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_months_apos() {\n        assert_lint_count(\n            \"I had thought that since I had done this process a few month's ago the database could just be updated.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_weeks_apos() {\n        assert_lint_count(\n            \"A few week's ago, I was alerted in Webmin that Webmin was eligible to upgrade to 1.880 which I did through Webmin.\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_years_apos() {\n        assert_lint_count(\n            \"A few year's ago a spammer registered an unused base url\",\n            FewUnitsOfTimeAgo::default(),\n            0,\n        );\n    }\n\n    // Real world mistakes from GitHub using singular forms\n\n    #[test]\n    fn fix_day() {\n        assert_suggestion_result(\n            \"That worked few day ago with the same setting.\",\n            FewUnitsOfTimeAgo::default(),\n            \"That worked a few day ago with the same setting.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Needs ^ zero-width anchor that matches the start of a chunk\"]\n    fn fix_decade() {\n        assert_suggestion_result(\n            \"few decade ago, African Americans weren't allowed to swim in public\",\n            FewUnitsOfTimeAgo::default(),\n            \"a few decade ago, African Americans weren't allowed to swim in public\",\n        );\n    }\n\n    #[test]\n    fn fix_minute() {\n        assert_suggestion_result(\n            \"All works fine, but few minute ago the device stop responding from web\",\n            FewUnitsOfTimeAgo::default(),\n            \"All works fine, but a few minute ago the device stop responding from web\",\n        );\n    }\n\n    #[test]\n    fn fix_weekend() {\n        assert_suggestion_result(\n            \"I have done this few weekend ago.\",\n            FewUnitsOfTimeAgo::default(),\n            \"I have done this a few weekend ago.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/filler_words.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Lrc, Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct FillerWords {\n    expr: SequenceExpr,\n}\n\nimpl Default for FillerWords {\n    // A filler is unlikely to be completely on its own, so check for and remove with whitespace either before or after.\n    fn default() -> Self {\n        let filler_words = Lrc::new(WordSet::new(&[\"uh\", \"um\"]));\n\n        let pattern = SequenceExpr::any_of(vec![\n            Box::new(SequenceExpr::with(filler_words.clone()).then_whitespace()),\n            Box::new(SequenceExpr::whitespace().then(filler_words)),\n        ]);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for FillerWords {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {\n        // A filler is unlikely to be completely on its own, so check for and remove with whitespace either before or after.\n        Some(Lint {\n            span: toks.span()?,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::Remove],\n            message: \"Remove this unnecessary filler word.\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Removes filler words.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::FillerWords;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn remove_uh() {\n        assert_suggestion_result(\n            \"Let's remove all the uh filler words.\",\n            FillerWords::default(),\n            \"Let's remove all the filler words.\",\n        );\n    }\n\n    #[test]\n    fn remove_um_st_start() {\n        assert_suggestion_result(\n            \"Um but I'll just add some context for this.\",\n            FillerWords::default(),\n            \"but I'll just add some context for this.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/find_fine.rs",
    "content": "use crate::Token;\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::patterns::InflectionOfBe;\n\nuse super::expr_linter::Chunk;\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\n\npub struct FindFine {\n    expr: SequenceExpr,\n}\n\nimpl Default for FindFine {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(InflectionOfBe::default())\n            .t_ws()\n            .t_aco(\"find\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for FindFine {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offending_word = matched_tokens.get(2)?;\n\n        Some(Lint {\n            span: offending_word.span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"fine\",\n                offending_word.span.get_content(source),\n            )],\n            message: \"Did you mean `fine`?\".to_owned(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Fixes the common typo where writers write `find` when they mean `fine`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::FindFine;\n\n    #[test]\n    fn issue_2115() {\n        assert_suggestion_result(\n            \"I was using oil.nvim from an year and everything was find for me but I was missing a very key feature\",\n            FindFine::default(),\n            \"I was using oil.nvim from an year and everything was fine for me but I was missing a very key feature\",\n        );\n        assert_suggestion_result(\n            \"I made several observations throughout the evening and everything was find.\",\n            FindFine::default(),\n            \"I made several observations throughout the evening and everything was fine.\",\n        );\n        assert_suggestion_result(\n            \"I am find not using GPU at all for open3d.\",\n            FindFine::default(),\n            \"I am fine not using GPU at all for open3d.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/first_aid_kit.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct FirstAidKit {\n    expr: SequenceExpr,\n}\n\nimpl Default for FirstAidKit {\n    fn default() -> Self {\n        let supply_words = WordSet::new(&[\"aid\", \"starter\", \"travel\", \"tool\"]);\n        let pattern = SequenceExpr::with(supply_words)\n            .then_whitespace()\n            .then_any_capitalization_of(\"kid\");\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for FirstAidKit {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let typo_token = tokens.last()?;\n        let typo_span = typo_token.span;\n        let typo_text = typo_span.get_content(source);\n        Some(Lint {\n            span: typo_span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"kit\".chars().collect(),\n                typo_text,\n            )],\n            message: \"Did you mean `kit` (a set of items) instead of “kid”?\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects when “kid” after “aid”, “starter”, “travel”, or “tool” should be “kit” (a set of supplies).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::FirstAidKit;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_first_aid_kid() {\n        assert_suggestion_result(\n            \"A first aid kid is a collection of medical supplies.\",\n            FirstAidKit::default(),\n            \"A first aid kit is a collection of medical supplies.\",\n        );\n    }\n\n    #[test]\n    fn corrects_starter_kid() {\n        assert_suggestion_result(\n            \"Check the starter kid before proceeding.\",\n            FirstAidKit::default(),\n            \"Check the starter kit before proceeding.\",\n        );\n    }\n\n    #[test]\n    fn corrects_travel_kid() {\n        assert_suggestion_result(\n            \"Pack your travel kid for the trip.\",\n            FirstAidKit::default(),\n            \"Pack your travel kit for the trip.\",\n        );\n    }\n\n    #[test]\n    fn corrects_tool_kid() {\n        assert_suggestion_result(\n            \"Don't forget the tool kid for assembly.\",\n            FirstAidKit::default(),\n            \"Don't forget the tool kit for assembly.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_kid_in_other_contexts() {\n        assert_lint_count(\n            \"The kid ran through the aid station.\",\n            FirstAidKit::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/flesh_out_vs_full_fledged.rs",
    "content": "use crate::{\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    {CharStringExt, Lint, Token, TokenStringExt},\n};\n\npub struct FleshOutVsFullFledged {\n    expr: SequenceExpr,\n}\n\nimpl Default for FleshOutVsFullFledged {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::optional(SequenceExpr::word_set(&[\"full\", \"fully\"]).t_ws_h())\n                .then_word_set(&[\n                    \"fledge\", \"fledged\", \"fledged\", \"fledges\", \"fledging\", \"flesh\", \"fleshed\",\n                    \"fleshed\", \"fleshes\", \"fleshing\", \"pledge\", \"pledged\", \"pledged\", \"pledges\",\n                    \"pledging\",\n                ])\n                .then_optional(SequenceExpr::default().t_ws_h().t_aco(\"out\")),\n        }\n    }\n}\n\nimpl ExprLinter for FleshOutVsFullFledged {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        // Is the first word is \"full\" or \"fully\"?\n        let has_full_y = toks\n            .first()\n            .map(|t| {\n                t.span\n                    .get_content(src)\n                    .eq_any_ignore_ascii_case_str(&[\"full\", \"fully\"])\n            })\n            .unwrap_or(false);\n\n        // Is the last word is \"out\"?\n        let mut has_out = toks\n            .last()\n            .map(|t| t.span.get_content(src).eq_ignore_ascii_case_str(\"out\"))\n            .unwrap_or(false);\n\n        // Adjust tokens to exclude \"out\" when it's part of a hyphenated compound\n        let toks = if has_out\n            && ctx\n                .is_some_and(|(_, next)| next.first().map(|t| t.kind.is_hyphen()).unwrap_or(false))\n        {\n            has_out = false;\n            &toks[..toks.len() - 2]\n        } else {\n            toks\n        };\n\n        // Parse the verb form (tense)\n\n        enum Form {\n            Lemma,\n            Past,\n            ThirdPersonSingular,\n            Ing,\n        }\n\n        let vtok_idx = if has_full_y { 2 } else { 0 };\n        let vtok = &toks[vtok_idx];\n        let vtok_chars = vtok.span.get_content(src);\n\n        let form = match vtok_chars.last() {\n            Some('d') => Form::Past,\n            Some('s') => Form::ThirdPersonSingular,\n            Some('g') => Form::Ing,\n            _ => Form::Lemma,\n        };\n\n        // Parse which verb\n\n        enum Verb {\n            Fledge,\n            Flesh,\n            Pledge,\n        }\n\n        let verb = if vtok_chars.starts_with_ignore_ascii_case_str(\"fledg\") {\n            Verb::Fledge\n        } else if vtok_chars.starts_with_ignore_ascii_case_str(\"flesh\") {\n            Verb::Flesh\n        } else {\n            Verb::Pledge\n        };\n\n        // Separated by spaces or hyphens? Abort if it's mixed.\n\n        let mut sep_flags = 0;\n        for sep_tok in toks.iter().skip(1).step_by(2) {\n            if sep_tok.kind.is_hyphen() {\n                sep_flags |= 1;\n            } else if sep_tok.kind.is_whitespace() {\n                sep_flags |= 2;\n            } else {\n                sep_flags |= 4;\n            }\n        }\n        let is_hy = match sep_flags {\n            1 => true,\n            2 => false,\n            _ => return None,\n        };\n\n        match (has_full_y, verb, &form, has_out) {\n            // full pledge(d) -> full fledged\n            // full fledge -> full fledged\n            (true, Verb::Pledge, Form::Lemma | Form::Past, false)\n            | (true, Verb::Fledge, Form::Lemma, false) => {\n                let verb_and_sep_toks = &toks[0..2];\n                let verb_and_sep_span = verb_and_sep_toks.span()?;\n\n                Some(Lint {\n                    span: toks.span()?,\n                    lint_kind: LintKind::Usage,\n                    suggestions: vec![Suggestion::replace_with_match_case(\n                        format!(\"{}fledged\", verb_and_sep_span.get_content_string(src))\n                            .chars()\n                            .collect(),\n                        verb_and_sep_span.get_content(src),\n                    )],\n                    message: \"This idiom uses the word `fledged`.\".to_string(),\n                    ..Default::default()\n                })\n            }\n            // fledge out -> flesh out\n            (false, Verb::Fledge | Verb::Pledge, _, true) => Some(Lint {\n                span: vtok.span,\n                lint_kind: LintKind::Usage,\n                suggestions: vec![Suggestion::replace_with_match_case_str(\n                    match &form {\n                        Form::Lemma => \"flesh\",\n                        Form::Past => \"fleshed\",\n                        Form::Ing => \"fleshing\",\n                        Form::ThirdPersonSingular => \"fleshes\",\n                    },\n                    vtok_chars,\n                )],\n                message: \"This idiom uses the word `flesh`.\".to_string(),\n                ..Default::default()\n            }),\n            // TODO: only with \"fully\" and not \"full\"?\n            // fully fledged/pledged out -> fully fledged / fully fleshed out\n            // fully fleshed             -> fully fledged / fully fleshed out\n            (true, Verb::Fledge | Verb::Pledge, Form::Past, true)\n            | (true, Verb::Flesh, Form::Past, false) => Some(Lint {\n                span: toks[vtok_idx..].span()?,\n                lint_kind: LintKind::Usage,\n                suggestions: vec![\n                    Suggestion::replace_with_match_case_str(\"fledged\", vtok_chars),\n                    Suggestion::replace_with_match_case(\n                        format!(\"fleshed{}out\", if is_hy { '-' } else { ' ' })\n                            .chars()\n                            .collect(),\n                        vtok_chars,\n                    ),\n                ],\n                message: \"Perhaps you're confusing `fully fledged` and `fleshed out`?\".to_string(),\n                ..Default::default()\n            }),\n            _ => None,\n        }\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects mixing up `flesh out` and `full fledged`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::{\n        flesh_out_vs_full_fledged::FleshOutVsFullFledged,\n        tests::{assert_good_and_bad_suggestions, assert_suggestion_result},\n    };\n\n    // FULL\n\n    // full Vlemma\n\n    #[test]\n    fn full_fledge_hyphen() {\n        assert_suggestion_result(\n            \"Or do we want to become a full-fledge out-of-core ml library?\",\n            FleshOutVsFullFledged::default(),\n            \"Or do we want to become a full-fledged out-of-core ml library?\",\n        );\n    }\n\n    // full Vpast\n\n    #[test]\n    fn full_fleshed_space() {\n        assert_suggestion_result(\n            \"Run a full fleshed ubuntu in termux without rooting your android.\",\n            FleshOutVsFullFledged::default(),\n            \"Run a full fledged ubuntu in termux without rooting your android.\",\n        );\n    }\n\n    #[test]\n    fn full_fleshed_webscraper_hyphen() {\n        assert_suggestion_result(\n            \"A full-fleshed webscraper web app build on Next.js13 with tracking the prices of different product you want\",\n            FleshOutVsFullFledged::default(),\n            \"A full-fledged webscraper web app build on Next.js13 with tracking the prices of different product you want\",\n        );\n    }\n\n    #[test]\n    fn full_fleshed_implementation_hyphen() {\n        assert_suggestion_result(\n            \"almost provides a full-fleshed implementation allowing to read binary files into a tensor in a torchscript-compatible way.\",\n            FleshOutVsFullFledged::default(),\n            \"almost provides a full-fledged implementation allowing to read binary files into a tensor in a torchscript-compatible way.\",\n        );\n    }\n\n    #[test]\n    fn full_pledged_space() {\n        assert_suggestion_result(\n            \"Any plan to make full pledged php server with swoole?\",\n            FleshOutVsFullFledged::default(),\n            \"Any plan to make full fledged php server with swoole?\",\n        );\n    }\n\n    #[test]\n    fn full_pledged_hyphen() {\n        assert_suggestion_result(\n            \"Not yet, but I am considering the full-pledged snapshotting built-in.\",\n            FleshOutVsFullFledged::default(),\n            \"Not yet, but I am considering the full-fledged snapshotting built-in.\",\n        );\n    }\n\n    // FULLY\n\n    // fully Vpast - out\n\n    #[test]\n    fn not_fully_fledged_out() {\n        assert_good_and_bad_suggestions(\n            \"There, it's not fully fledged out yet, but it's just an idea for now.\",\n            FleshOutVsFullFledged::default(),\n            &[\n                \"There, it's not fully fleshed out yet, but it's just an idea for now.\",\n                \"There, it's not fully fledged yet, but it's just an idea for now.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fully_fledged_out() {\n        assert_good_and_bad_suggestions(\n            \"Is the spawning process fully fledged out yet or am I joining the party too early?\",\n            FleshOutVsFullFledged::default(),\n            &[\n                \"Is the spawning process fully fleshed out yet or am I joining the party too early?\",\n                \"Is the spawning process fully fledged yet or am I joining the party too early?\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fully_fleshed_space() {\n        assert_good_and_bad_suggestions(\n            \"A Fully Fleshed E-Commerce web application, built with React, Redux and Firebase\",\n            FleshOutVsFullFledged::default(),\n            &[\n                \"A Fully Fledged E-Commerce web application, built with React, Redux and Firebase\",\n                \"A Fully Fleshed out E-Commerce web application, built with React, Redux and Firebase\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fully_fleshed_hyphen() {\n        assert_good_and_bad_suggestions(\n            \"This issue tracks the current progress towards publishing a fully-fleshed Fabric version of Gallery\",\n            FleshOutVsFullFledged::default(),\n            &[\n                \"This issue tracks the current progress towards publishing a fully-fleshed-out Fabric version of Gallery\",\n                \"This issue tracks the current progress towards publishing a fully-fledged Fabric version of Gallery\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fully_pledged_space() {\n        assert_suggestion_result(\n            \"Overall, we are already moving closer to having a fully pledged distributed recording and replay.\",\n            FleshOutVsFullFledged::default(),\n            \"Overall, we are already moving closer to having a fully fledged distributed recording and replay.\",\n        );\n    }\n\n    // V.LEMMA - out\n\n    #[test]\n    fn fledge_out() {\n        assert_suggestion_result(\n            \"For this we could fledge out the rule evaluation in a library and link this library to the server.\",\n            FleshOutVsFullFledged::default(),\n            \"For this we could flesh out the rule evaluation in a library and link this library to the server.\",\n        );\n    }\n\n    // V.PAST - out\n\n    #[test]\n    fn fledged_out_space() {\n        assert_suggestion_result(\n            \"We will be talking more about this when the technical details a more fledged out.\",\n            FleshOutVsFullFledged::default(),\n            \"We will be talking more about this when the technical details a more fleshed out.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/for_noun.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::{\n    Token,\n    patterns::{NominalPhrase, Word},\n};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ForNoun {\n    expr: SequenceExpr,\n}\n\nimpl Default for ForNoun {\n    fn default() -> Self {\n        let pattern = SequenceExpr::aco(\"fro\")\n            .then_whitespace()\n            .then(NominalPhrase.or(Word::new(\"sure\")));\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for ForNoun {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.first()?.span;\n        let problem_chars = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"for\",\n                problem_chars,\n            )],\n            message: \"`For` is more common in this context.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects the archaic or mistaken `fro` to `for` when followed by a noun.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ForNoun;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_fro_basic_correction() {\n        assert_suggestion_result(\n            \"I got a text fro Sarah.\",\n            ForNoun::default(),\n            \"I got a text for Sarah.\",\n        );\n    }\n\n    #[test]\n    fn allows_for_clean() {\n        assert_lint_count(\"I got a text for Sarah.\", ForNoun::default(), 0);\n    }\n\n    #[test]\n    fn corrects_fro_sure() {\n        assert_suggestion_result(\n            \"He was away fro sure!\",\n            ForNoun::default(),\n            \"He was away for sure!\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/free_predicate.rs",
    "content": "use crate::Token;\nuse crate::TokenKind;\nuse crate::char_string::CharStringExt;\nuse crate::expr::{Expr, ExprMap, SequenceExpr};\nuse crate::patterns::WhitespacePattern;\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct FreePredicate {\n    expr: ExprMap<usize>,\n}\n\nimpl Default for FreePredicate {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        let no_modifier = SequenceExpr::with(linking_like)\n            .t_ws()\n            .then(matches_fee)\n            .then_optional(WhitespacePattern)\n            .then(follows_fee);\n\n        map.insert(no_modifier, 2);\n\n        let with_adverb = SequenceExpr::with(linking_like)\n            .t_ws()\n            .then_adverb()\n            .t_ws()\n            .then(matches_fee)\n            .then_optional(WhitespacePattern)\n            .then(follows_fee);\n\n        map.insert(with_adverb, 4);\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for FreePredicate {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offending_idx = *self.expr.lookup(0, matched_tokens, source)?;\n        let offending = matched_tokens.get(offending_idx)?;\n\n        Some(Lint {\n            span: offending.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"free\",\n                offending.span.get_content(source),\n            )],\n            message: \"Use `free` here to show that something costs nothing.\".to_owned(),\n            priority: 38,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Helps swap in `free` when a linking verb is followed by the noun `fee`.\"\n    }\n}\n\nfn matches_fee(token: &Token, source: &[char]) -> bool {\n    if !token.kind.is_noun() {\n        return false;\n    }\n\n    const FEE: [char; 3] = ['f', 'e', 'e'];\n    let content = token.span.get_content(source);\n\n    content.len() == FEE.len()\n        && content\n            .iter()\n            .zip(FEE)\n            .all(|(actual, expected)| actual.eq_ignore_ascii_case(&expected))\n}\n\nfn follows_fee(token: &Token, _source: &[char]) -> bool {\n    if token.kind.is_hyphen() {\n        return false;\n    }\n\n    token.kind.is_preposition()\n        || token.kind.is_conjunction()\n        || matches!(token.kind, TokenKind::Punctuation(_))\n}\n\nfn linking_like(token: &Token, source: &[char]) -> bool {\n    const BE_FORMS: [&str; 8] = [\"be\", \"is\", \"am\", \"are\", \"was\", \"were\", \"being\", \"been\"];\n    let content = token.span.get_content(source);\n\n    BE_FORMS\n        .iter()\n        .any(|form| content.eq_ignore_ascii_case_str(form))\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    use super::FreePredicate;\n\n    #[test]\n    fn corrects_is_fee_for() {\n        assert_suggestion_result(\n            \"The trial is fee for new members.\",\n            FreePredicate::default(),\n            \"The trial is free for new members.\",\n        );\n    }\n\n    #[test]\n    fn corrects_totally_fee() {\n        assert_suggestion_result(\n            \"Customer support is totally fee.\",\n            FreePredicate::default(),\n            \"Customer support is totally free.\",\n        );\n    }\n\n    #[test]\n    fn corrects_really_fee_to() {\n        assert_suggestion_result(\n            \"The workshop is really fee to attend.\",\n            FreePredicate::default(),\n            \"The workshop is really free to attend.\",\n        );\n    }\n\n    #[test]\n    fn corrects_fee_with_comma() {\n        assert_suggestion_result(\n            \"Our platform is fee, and always available.\",\n            FreePredicate::default(),\n            \"Our platform is free, and always available.\",\n        );\n    }\n\n    #[test]\n    fn corrects_fee_period() {\n        assert_suggestion_result(\n            \"Access is fee.\",\n            FreePredicate::default(),\n            \"Access is free.\",\n        );\n    }\n\n    #[test]\n    fn corrects_fee_past_tense() {\n        assert_suggestion_result(\n            \"The program was fee for nonprofits.\",\n            FreePredicate::default(),\n            \"The program was free for nonprofits.\",\n        );\n    }\n\n    #[test]\n    fn allows_fee_based() {\n        assert_no_lints(\"The pricing model is fee-based.\", FreePredicate::default());\n    }\n\n    #[test]\n    fn allows_fee_paying() {\n        assert_no_lints(\"The membership is fee-paying.\", FreePredicate::default());\n    }\n\n    #[test]\n    fn allows_fee_schedule_statement() {\n        assert_no_lints(\n            \"This plan has a fee for standard support.\",\n            FreePredicate::default(),\n        );\n    }\n\n    #[test]\n    fn allows_fee_free_phrase() {\n        assert_no_lints(\n            \"Our service is fee-free for students.\",\n            FreePredicate::default(),\n        );\n    }\n\n    #[test]\n    fn counts_single_lint() {\n        assert_lint_count(\n            \"The upgrade is fee for existing users.\",\n            FreePredicate::default(),\n            1,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/friend_of_me.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct FriendOfMe {\n    expr: SequenceExpr,\n}\n\nimpl Default for FriendOfMe {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"friend\", \"friends\", \"enemy\", \"enemies\"])\n                .then_whitespace()\n                .t_aco(\"of\")\n                .t_ws()\n                .then_object_pronoun(),\n        }\n    }\n}\n\nimpl ExprLinter for FriendOfMe {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let obj_pron_tok = toks.last()?;\n        let obj_pron_str = obj_pron_tok.span.get_content_string(src);\n\n        let poss_pron_str = match obj_pron_str.as_str() {\n            \"me\" => \"mine\",\n            \"you\" => \"yours\",\n            \"him\" => \"his\",\n            // \"her\" is also a possessive determiner, which leads to many false positives\n            \"her\" => return None,\n            \"it\" => return None,\n            \"us\" => \"ours\",\n            \"them\" => \"theirs\",\n            _ => return None,\n        };\n\n        Some(Lint {\n            span: obj_pron_tok.span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                poss_pron_str,\n                obj_pron_tok.span.get_content(src),\n            )],\n            message: format!(\"Use `{poss_pron_str}` instead of `{obj_pron_str}`.\"),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects wrong pronoun usage in constructions like `a friend of me`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::FriendOfMe;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn corrects_friend_of_me() {\n        assert_suggestion_result(\n            \"Last year a friend of me died unexpectedly (not a close friend).\",\n            FriendOfMe::default(),\n            \"Last year a friend of mine died unexpectedly (not a close friend).\",\n        );\n    }\n\n    #[test]\n    fn corrects_friend_of_you() {\n        assert_suggestion_result(\n            \"imagine a friend of you wants to disturb your call, and send you a session-terminate with a wrong SID\",\n            FriendOfMe::default(),\n            \"imagine a friend of yours wants to disturb your call, and send you a session-terminate with a wrong SID\",\n        );\n    }\n\n    #[test]\n    fn corrects_friend_of_us() {\n        assert_suggestion_result(\n            \"You have denounced a friend of us! You have denounced an enemy of us.\",\n            FriendOfMe::default(),\n            \"You have denounced a friend of ours! You have denounced an enemy of ours.\",\n        );\n    }\n\n    #[test]\n    fn corrects_friends_of_them() {\n        assert_suggestion_result(\n            \"guest has friend and they see which friends of them are comming\",\n            FriendOfMe::default(),\n            \"guest has friend and they see which friends of theirs are comming\",\n        );\n    }\n\n    #[test]\n    fn corrects_friend_of_him() {\n        assert_suggestion_result(\n            \"Ah, got it, i thought you may was a friend of him\",\n            FriendOfMe::default(),\n            \"Ah, got it, i thought you may was a friend of his\",\n        );\n    }\n\n    #[test]\n    fn corrects_friends_of_me() {\n        assert_suggestion_result(\n            \"guest has friend and they see which friends of me are comming\",\n            FriendOfMe::default(),\n            \"guest has friend and they see which friends of mine are comming\",\n        );\n    }\n\n    #[test]\n    fn corrects_friends_of_us() {\n        assert_suggestion_result(\n            \"This project was created for friends of us.\",\n            FriendOfMe::default(),\n            \"This project was created for friends of ours.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/go_so_far_as_to.rs",
    "content": "use crate::Token;\nuse crate::TokenStringExt;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::Suggestion;\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind};\n\npub struct GoSoFarAsTo {\n    exp: SequenceExpr,\n}\n\nimpl Default for GoSoFarAsTo {\n    fn default() -> Self {\n        Self {\n            exp: SequenceExpr::word_set(&[\"go\", \"goes\", \"going\", \"gone\", \"went\"])\n                .then_fixed_phrase(\" so far to \")\n                .then_optional(SequenceExpr::default().then_adverb().t_ws())\n                .then_any_word(),\n        }\n    }\n}\n\nimpl ExprLinter for GoSoFarAsTo {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.exp\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let toks_len = toks.len();\n\n        if toks_len != 9 && toks_len != 11 {\n            return None;\n        }\n\n        let last = toks.last().unwrap();\n        let penult = &toks[toks_len - 3];\n\n        match (toks_len, penult.kind.is_adverb(), last.kind.is_verb_lemma()) {\n            (11, true, true) => (),\n            (9, _, true) => (),\n            _ => return None,\n        }\n\n        let go_so_far_to_toks = &toks[0..=6];\n        let go_so_far_to_span = go_so_far_to_toks.span()?;\n        let go_so_far_toks = &toks[0..=4];\n        let to_tok = &toks[6];\n\n        let sugg = Suggestion::replace_with_match_case(\n            format!(\n                \"{} as {}\",\n                go_so_far_toks.span()?.get_content_string(src),\n                to_tok.span.get_content_string(src)\n            )\n            .chars()\n            .collect(),\n            go_so_far_to_span.get_content(src),\n        );\n\n        Some(Lint {\n            span: go_so_far_to_span,\n            lint_kind: LintKind::Nonstandard,\n            suggestions: vec![sugg],\n            message: \"If this is intended to express going beyond what's expected, the standard idiom is `go so far as to`\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags 'go so far to' when it should be 'go so far as to' to express going beyond expectations\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::GoSoFarAsTo;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn go_so_far_to() {\n        assert_suggestion_result(\n            \"I'd even go so far to say as it's a good way to get started with getting things onto ...\",\n            GoSoFarAsTo::default(),\n            \"I'd even go so far as to say as it's a good way to get started with getting things onto ...\",\n        );\n    }\n\n    #[test]\n    fn goes_so_far_to() {\n        assert_suggestion_result(\n            \"I believe Java goes so far to even throw a runtime exception.\",\n            GoSoFarAsTo::default(),\n            \"I believe Java goes so far as to even throw a runtime exception.\",\n        );\n    }\n\n    #[test]\n    fn gone_so_far_to() {\n        assert_suggestion_result(\n            \"I've gone so far to reinstall Mac OS, which got the runner to finally start\",\n            GoSoFarAsTo::default(),\n            \"I've gone so far as to reinstall Mac OS, which got the runner to finally start\",\n        );\n    }\n\n    #[test]\n    fn went_so_far_to() {\n        assert_suggestion_result(\n            \"I've read these posts but only went so far to conclude that I need to potentially add sql statements into the blocks\",\n            GoSoFarAsTo::default(),\n            \"I've read these posts but only went so far as to conclude that I need to potentially add sql statements into the blocks\",\n        );\n    }\n\n    #[test]\n    fn went_so_far_to_adverb() {\n        assert_suggestion_result(\n            \"I even went so far to manually replace the .AppImage with a different file in the Applications folder\",\n            GoSoFarAsTo::default(),\n            \"I even went so far as to manually replace the .AppImage with a different file in the Applications folder\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"A false positive we can't detect due to the next word being a verb lemma\"]\n    fn dont_flag_going_so_far_to() {\n        assert_no_lints(\n            \"Why dictate that the system must be canonically described through a textual syntax – especially after going so far to make that unnecessary?\",\n            GoSoFarAsTo::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_goes_so_far_to() {\n        assert_no_lints(\n            \"... even so much that one line goes so far to the right\",\n            GoSoFarAsTo::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_go_so_far_to() {\n        assert_no_lints(\n            \"Unfortunetly, our logs don't go so far to that time, but I found something interesting.\",\n            GoSoFarAsTo::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/go_to_war.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct GoToWar {\n    expr: SequenceExpr,\n}\n\nimpl Default for GoToWar {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"go\", \"goes\", \"going\", \"gone\", \"went\"])\n                .t_ws()\n                .then_preposition()\n                .t_ws()\n                .then_word_set(&[\"war\"]),\n        }\n    }\n}\n\nimpl ExprLinter for GoToWar {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Replaces `go at war` with `go to war`.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let prep_idx = 2;\n        let prep_tok = &toks[prep_idx];\n        let prep_span = prep_tok.span;\n        let prep_chars = prep_span.get_content(src);\n\n        if prep_chars.eq_ignore_ascii_case_chars(&['t', 'o']) {\n            return None;\n        }\n\n        Some(Lint {\n            span: prep_span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\"to\", prep_chars)],\n            message: \"Use `to` instead of `at`.\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\npub mod tests {\n    use super::GoToWar;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn go_at() {\n        assert_suggestion_result(\n            \"specialization makes you vulnerable if you go at war with your trading partners\",\n            GoToWar::default(),\n            \"specialization makes you vulnerable if you go to war with your trading partners\",\n        );\n    }\n\n    #[test]\n    fn go_in() {\n        assert_suggestion_result(\n            \"for whatever reason, it would go in war with another town\",\n            GoToWar::default(),\n            \"for whatever reason, it would go to war with another town\",\n        );\n    }\n\n    #[test]\n    fn go_on() {\n        assert_suggestion_result(\n            \"How much time do we have before Youtube starts to go on war with Revanced?\",\n            GoToWar::default(),\n            \"How much time do we have before Youtube starts to go to war with Revanced?\",\n        );\n    }\n\n    #[test]\n    fn goes_on() {\n        assert_suggestion_result(\n            \"It would be the same case if USA goes on war with Canada and Mexico.\",\n            GoToWar::default(),\n            \"It would be the same case if USA goes to war with Canada and Mexico.\",\n        );\n    }\n\n    #[test]\n    fn going_at() {\n        assert_suggestion_result(\n            \"So instead of going at war with technology, let's be friends and work better.\",\n            GoToWar::default(),\n            \"So instead of going to war with technology, let's be friends and work better.\",\n        );\n    }\n\n    #[test]\n    fn going_on() {\n        assert_suggestion_result(\n            \"How consequences of India going on war with Pakistan after the recent Uri Terror attack?\",\n            GoToWar::default(),\n            \"How consequences of India going to war with Pakistan after the recent Uri Terror attack?\",\n        );\n    }\n\n    #[test]\n    fn went_at() {\n        assert_suggestion_result(\n            \"the magic energy released since the colleges went at war with each others\",\n            GoToWar::default(),\n            \"the magic energy released since the colleges went to war with each others\",\n        );\n    }\n\n    #[test]\n    fn went_in() {\n        assert_suggestion_result(\n            \"even America wanted to expand its territories and they went in War with Mexico\",\n            GoToWar::default(),\n            \"even America wanted to expand its territories and they went to War with Mexico\",\n        );\n    }\n\n    #[test]\n    fn went_on() {\n        assert_suggestion_result(\n            \"I used to skip clubman and make as many vills as i can and then went on war with ai\",\n            GoToWar::default(),\n            \"I used to skip clubman and make as many vills as i can and then went to war with ai\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/good_at.rs",
    "content": "use crate::{\n    Lint, Token, TokenStringExt,\n    expr::{Expr, FirstMatchOf, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::{InflectionOfBe, WordSet},\n};\n\npub struct GoodAt {\n    expr: FirstMatchOf,\n}\n\nimpl Default for GoodAt {\n    fn default() -> Self {\n        let we_re_not_always_very_good_in_sth = SequenceExpr::any_of(vec![\n            Box::new(InflectionOfBe::default()),\n            Box::new(WordSet::new(&[\n                \"I'm\", \"we're\", \"you're\", \"he's\", \"she's\", \"it's\", \"they're\", \"Im\", \"were\",\n                \"youre\", \"your\", \"hes\", \"shes\", \"its\", \"theyre\",\n            ])),\n        ])\n        .t_ws()\n        .then_optional(SequenceExpr::aco(\"not\").t_ws())\n        .then_optional(SequenceExpr::default().then_frequency_adverb().t_ws())\n        .then_optional(SequenceExpr::default().then_degree_adverb().t_ws())\n        .then_word_set(&[\"good\", \"bad\", \"great\", \"okay\", \"OK\"])\n        .t_ws()\n        .t_aco(\"in\")\n        .t_ws()\n        .then_any_word();\n\n        let good_in_skill_or_subject =\n            SequenceExpr::word_set(&[\"good\", \"bad\", \"great\", \"okay\", \"OK\"])\n                .t_ws()\n                .t_aco(\"in\")\n                .t_ws()\n                .then_word_set(&[\n                    // sciences\n                    \"biology\",\n                    \"chemistry\",\n                    \"math\",\n                    \"mathematics\",\n                    \"physics\",\n                    // programming\n                    \"programming\",\n                    \"coding\",\n                    \"c\", // Note: C++ would be multiple tokens\n                    \"debugging\",\n                    \"go\",\n                    \"java\",\n                    \"javascript\",\n                    \"laravel\",\n                    \"python\",\n                    \"ruby\",\n                    // languages\n                    \"english\",\n                    \"chinese\",\n                    \"french\",\n                    \"german\",\n                    \"japanese\",\n                    \"spanish\",\n                ]);\n\n        let expr = FirstMatchOf::new(vec![\n            Box::new(we_re_not_always_very_good_in_sth),\n            Box::new(good_in_skill_or_subject),\n        ]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for GoodAt {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let prep_span = toks.get_rel(-3)?.span;\n\n        Some(Lint {\n            span: prep_span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"at\".chars().collect(),\n                prep_span.get_content(src),\n            )],\n            message: \"Use 'good at' to describe proficiency with a skill.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Checks for `good in` used instead of `good at` to describe proficiency with a skill.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::GoodAt;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn fix_good_in_being_frugal() {\n        assert_suggestion_result(\n            \"but we found that Claude is not always very good in being frugal ( Gemini seemed better at it ) .\",\n            GoodAt::default(),\n            \"but we found that Claude is not always very good at being frugal ( Gemini seemed better at it ) .\",\n        );\n    }\n\n    #[test]\n    fn fix_im_not_good_in_python() {\n        assert_suggestion_result(\n            \"can't run it i'm not good in python\",\n            GoodAt::default(),\n            \"can't run it i'm not good at python\",\n        );\n    }\n\n    #[test]\n    fn fix_not_good_in_go() {\n        assert_suggestion_result(\n            \"Hi, I have very similar problem and I'm not good in go either.\",\n            GoodAt::default(),\n            \"Hi, I have very similar problem and I'm not good at go either.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_good_in_coding_stuff() {\n        assert_suggestion_result(\n            \"Unfortunately I can't help in anyway but testing, because I'm not good in coding stuff.\",\n            GoodAt::default(),\n            \"Unfortunately I can't help in anyway but testing, because I'm not good at coding stuff.\",\n        );\n    }\n\n    #[test]\n    fn fix_very_good_in_mathematics() {\n        assert_suggestion_result(\n            \"They were very good in Mathematics and were the pets of Ranjani Ma'am.\",\n            GoodAt::default(),\n            \"They were very good at Mathematics and were the pets of Ranjani Ma'am.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_good_in_coding() {\n        assert_suggestion_result(\n            \"Didnt know these things.. and since im not good in coding, maybe one day someone will work on this.\",\n            GoodAt::default(),\n            \"Didnt know these things.. and since im not good at coding, maybe one day someone will work on this.\",\n        );\n    }\n\n    #[test]\n    fn fix_very_good_in_most_things() {\n        assert_suggestion_result(\n            \"But I do want to continue using riverpod because its very good in most things I need from my app.\",\n            GoodAt::default(),\n            \"But I do want to continue using riverpod because its very good at most things I need from my app.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_good_in_laravel() {\n        assert_suggestion_result(\n            \"im not good in laravel.\",\n            GoodAt::default(),\n            \"im not good at laravel.\",\n        );\n    }\n\n    #[test]\n    fn fixim_not_good_in_english() {\n        assert_suggestion_result(\n            \"Sorry about my grammar im not good in English.\",\n            GoodAt::default(),\n            \"Sorry about my grammar im not good at English.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_all_good_in_english() {\n        assert_suggestion_result(\n            \"I think if there is translation support will be great, our school society not all good in english.\",\n            GoodAt::default(),\n            \"I think if there is translation support will be great, our school society not all good at english.\",\n        );\n    }\n\n    #[test]\n    fn fix_i_am_not_good_in_english() {\n        assert_suggestion_result(\n            \"I am in Togo, i am not good in english but i will ask you to apologize me for my speaking.\",\n            GoodAt::default(),\n            \"I am in Togo, i am not good at english but i will ask you to apologize me for my speaking.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_good_in_programming() {\n        assert_suggestion_result(\n            \"Is it My Drive,Chess or \\\"My Drive\\\",\\\"Chess\\\" or what? Because I'm not good in programming.\",\n            GoodAt::default(),\n            \"Is it My Drive,Chess or \\\"My Drive\\\",\\\"Chess\\\" or what? Because I'm not good at programming.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_so_good_in_coding() {\n        assert_suggestion_result(\n            \"I'm not so good in coding to understand how to handle all these bytes...\",\n            GoodAt::default(),\n            \"I'm not so good at coding to understand how to handle all these bytes...\",\n        );\n    }\n\n    #[test]\n    fn fix_im_not_good_in_programming() {\n        assert_suggestion_result(\n            \"Im not good in programming , but can i ask what is the password of your codes?\",\n            GoodAt::default(),\n            \"Im not good at programming , but can i ask what is the password of your codes?\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/handful.rs",
    "content": "use crate::expr::{Expr, SequenceExpr, SpaceOrHyphen};\nuse crate::linting::expr_linter::Chunk;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\n\npub struct Handful {\n    expr: SequenceExpr,\n}\n\nimpl Default for Handful {\n    fn default() -> Self {\n        let expr = SequenceExpr::any_capitalization_of(\"hand\")\n            .then_one_or_more(SpaceOrHyphen)\n            .then_any_capitalization_of(\"full\")\n            .then_one_or_more(SpaceOrHyphen)\n            .then_any_capitalization_of(\"of\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for Handful {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        if matched_tokens.len() < 2 {\n            return None;\n        }\n\n        let mut highlight_end = matched_tokens.len() - 1;\n        while highlight_end > 0 {\n            let prev = &matched_tokens[highlight_end - 1];\n            if prev.kind.is_whitespace() || prev.kind.is_hyphen() {\n                highlight_end -= 1;\n            } else {\n                break;\n            }\n        }\n\n        if highlight_end == 0 {\n            return None;\n        }\n\n        let replacement = &matched_tokens[..highlight_end];\n        let span = replacement.span()?;\n        let template = matched_tokens.first()?.span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::BoundaryError,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"handful\".chars().collect(),\n                template,\n            )],\n            message: \"Write this quantity as the single word `handful`.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Keeps the palm-sized quantity expressed by `handful` as one word.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Handful;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn suggests_plain_spacing() {\n        assert_suggestion_result(\n            \"Her basket held a hand full of berries.\",\n            Handful::default(),\n            \"Her basket held a handful of berries.\",\n        );\n    }\n\n    #[test]\n    fn suggests_capitalized_form() {\n        assert_suggestion_result(\n            \"Hand full of tales lined the shelf.\",\n            Handful::default(),\n            \"Handful of tales lined the shelf.\",\n        );\n    }\n\n    #[test]\n    fn suggests_hyphenated_form() {\n        assert_suggestion_result(\n            \"A hand-full of marbles scattered across the floor.\",\n            Handful::default(),\n            \"A handful of marbles scattered across the floor.\",\n        );\n    }\n\n    #[test]\n    fn suggests_space_hyphen_combo() {\n        assert_suggestion_result(\n            \"A hand - full of seeds spilled on the workbench.\",\n            Handful::default(),\n            \"A handful of seeds spilled on the workbench.\",\n        );\n    }\n\n    #[test]\n    fn suggests_initial_hyphen_variants() {\n        assert_suggestion_result(\n            \"Hand-Full of furniture, the cart creaked slowly.\",\n            Handful::default(),\n            \"Handful of furniture, the cart creaked slowly.\",\n        );\n    }\n\n    #[test]\n    fn flags_multiple_instances() {\n        assert_lint_count(\n            \"She carried a hand full of carrots and a hand full of radishes.\",\n            Handful::default(),\n            2,\n        );\n    }\n\n    #[test]\n    fn allows_correct_handful() {\n        assert_no_lints(\n            \"A handful of volunteers arrived in time.\",\n            Handful::default(),\n        );\n    }\n\n    #[test]\n    fn allows_parenthetical_hand() {\n        assert_no_lints(\n            \"His hand, full of ink, kept writing without pause.\",\n            Handful::default(),\n        );\n    }\n\n    #[test]\n    fn allows_hand_is_full() {\n        assert_no_lints(\"The hand is full of water.\", Handful::default());\n    }\n\n    #[test]\n    fn allows_handfull_typo() {\n        assert_no_lints(\n            \"The word handfull is an incorrect spelling.\",\n            Handful::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/have_pronoun.rs",
    "content": "use crate::expr::{AnchorStart, Expr, SequenceExpr};\nuse crate::{Token, TokenKind};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct HavePronoun {\n    expr: SequenceExpr,\n}\n\nimpl Default for HavePronoun {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(AnchorStart)\n            .t_aco(\"has\")\n            .t_ws()\n            .then_kind_either(\n                TokenKind::is_first_person_singular_pronoun,\n                TokenKind::is_plural_pronoun,\n            );\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for HavePronoun {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        // First real word in the match is always \"has\".\n        let has_tok = toks.iter().find(|t| t.kind.is_word())?;\n        let span = has_tok.span;\n        let original = span.get_content(src);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Agreement,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"have\".chars().collect(),\n                original,\n            )],\n            message: \"Use `have` with first-person singular or plural pronouns.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags questions that begin with `has` followed by a pronoun that requires `have`, \\\n         such as `Has we …` or `Has I …`, and suggests the correct auxiliary.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::HavePronoun;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_has_we() {\n        assert_suggestion_result(\n            \"Has we finished the report?\",\n            HavePronoun::default(),\n            \"Have we finished the report?\",\n        );\n    }\n\n    #[test]\n    fn corrects_has_you() {\n        assert_suggestion_result(\n            \"Has you misunderstood?\",\n            HavePronoun::default(),\n            \"Have you misunderstood?\",\n        );\n    }\n\n    #[test]\n    fn corrects_has_i() {\n        assert_suggestion_result(\n            \"Has I misunderstood?\",\n            HavePronoun::default(),\n            \"Have I misunderstood?\",\n        );\n    }\n\n    #[test]\n    fn corrects_has_they() {\n        assert_suggestion_result(\n            \"Has they arrived yet?\",\n            HavePronoun::default(),\n            \"Have they arrived yet?\",\n        );\n    }\n\n    #[test]\n    fn allows_has_he() {\n        assert_lint_count(\"Has he arrived yet?\", HavePronoun::default(), 0);\n    }\n\n    #[test]\n    fn ignores_non_initial_usage() {\n        assert_lint_count(\n            \"The system has we confused for a moment.\",\n            HavePronoun::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/have_take_a_look.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Dialect, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct HaveTakeALook {\n    expr: SequenceExpr,\n    dialect: Dialect,\n}\n\nimpl HaveTakeALook {\n    pub fn new(dialect: Dialect) -> Self {\n        let light_verb = match dialect {\n            // Match the opposite of what is used in the dialect.\n            Dialect::British | Dialect::Australian => &[\"take\", \"took\", \"taken\", \"takes\", \"taking\"],\n            _ => &[\"have\", \"had\", \"had\", \"has\", \"having\"],\n        };\n\n        let expr = SequenceExpr::word_set(light_verb)\n            .t_ws()\n            .then_fixed_phrase(\"a look\");\n\n        Self { expr, dialect }\n    }\n}\n\nimpl ExprLinter for HaveTakeALook {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let light_verb_tok = toks.first().unwrap();\n        let light_verb_str = light_verb_tok.span.get_content_string(src);\n        let light_verb = light_verb_str.to_ascii_lowercase();\n\n        let translated_light_verb: &[&str] = match light_verb.as_str() {\n            \"have\" => &[\"take\"],\n            \"had\" => &[\"took\", \"taken\"],\n            \"has\" => &[\"takes\"],\n            \"having\" => &[\"taking\"],\n            \"take\" => &[\"have\"],\n            \"took\" => &[\"had\"],\n            \"taken\" => &[\"had\"],\n            \"takes\" => &[\"has\"],\n            \"taking\" => &[\"having\"],\n            _ => return None,\n        };\n\n        let suggestions = translated_light_verb\n            .iter()\n            .map(|s| {\n                Suggestion::replace_with_match_case(\n                    s.chars().collect(),\n                    light_verb_tok.span.get_content(src),\n                )\n            })\n            .collect();\n\n        let message = format!(\n            \"{} English prefers {} over `{} a look`.\",\n            self.dialect,\n            translated_light_verb\n                .iter()\n                .map(|lv| format!(\"`{lv} a look`\"))\n                .collect::<Vec<_>>()\n                .join(\" or \"),\n            light_verb,\n        );\n\n        Some(Lint {\n            span: light_verb_tok.span,\n            lint_kind: LintKind::Regionalism,\n            suggestions,\n            message,\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects either `have a look` or `take a look` to the other, depending on the dialect.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::HaveTakeALook;\n    use crate::{Dialect, linting::tests::assert_suggestion_result};\n\n    #[test]\n    fn correct_taking_a_look() {\n        assert_suggestion_result(\n            \"Consider taking a look at crossorigin attribute.\",\n            HaveTakeALook::new(Dialect::British),\n            \"Consider having a look at crossorigin attribute.\",\n        );\n    }\n\n    #[test]\n    fn correct_take_a_look() {\n        assert_suggestion_result(\n            \"Have time to help take a look at the jdk21 upgrade issue.\",\n            HaveTakeALook::new(Dialect::Australian),\n            \"Have time to help have a look at the jdk21 upgrade issue.\",\n        );\n    }\n\n    #[test]\n    fn correct_have_a_look() {\n        assert_suggestion_result(\n            \"Have a look at this question crashing histoire using init-state and ref.\",\n            HaveTakeALook::new(Dialect::American),\n            \"Take a look at this question crashing histoire using init-state and ref.\",\n        );\n    }\n\n    #[test]\n    fn correct_taken_a_look() {\n        assert_suggestion_result(\n            \"Have you taken a look at HQEMU?\",\n            HaveTakeALook::new(Dialect::British),\n            \"Have you had a look at HQEMU?\",\n        );\n    }\n\n    #[test]\n    fn correct_had_a_look() {\n        assert_suggestion_result(\n            \"I had a look at the podman.go and have some theories I could test.\",\n            HaveTakeALook::new(Dialect::Canadian),\n            \"I took a look at the podman.go and have some theories I could test.\",\n        );\n    }\n\n    #[test]\n    fn correct_took_a_look() {\n        assert_suggestion_result(\n            \"I though GitHub's “Dashboard” page might help with this, so I took a look.\",\n            HaveTakeALook::new(Dialect::Australian),\n            \"I though GitHub's “Dashboard” page might help with this, so I had a look.\",\n        );\n    }\n\n    #[test]\n    fn correct_takes_a_look() {\n        assert_suggestion_result(\n            \"I'm closing this one, but it would be nice if someone takes a look at the notes in the original issue.\",\n            HaveTakeALook::new(Dialect::British),\n            \"I'm closing this one, but it would be nice if someone has a look at the notes in the original issue.\",\n        );\n    }\n\n    #[test]\n    fn correct_having_a_look() {\n        assert_suggestion_result(\n            \"It only appeared after I was having a look through the files.\",\n            HaveTakeALook::new(Dialect::American),\n            \"It only appeared after I was taking a look through the files.\",\n        );\n    }\n\n    #[test]\n    fn correct_has_a_look() {\n        assert_suggestion_result(\n            \"When Serializing messages the code in SchemaRegistrySerde has a look into the registry using the topic name.\",\n            HaveTakeALook::new(Dialect::Canadian),\n            \"When Serializing messages the code in SchemaRegistrySerde takes a look into the registry using the topic name.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/hedging.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::FixedPhrase;\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind};\nuse crate::{Token, TokenStringExt};\n\n/// A linter that detects hedging language.\npub struct Hedging {\n    expr: FirstMatchOf,\n}\n\nimpl Default for Hedging {\n    fn default() -> Self {\n        let phrases = vec![\"I would argue that\", \", so to speak\", \"to a certain degree\"];\n\n        let patterns: Vec<Box<dyn Expr>> = phrases\n            .into_iter()\n            .map(|s| Box::new(FixedPhrase::from_phrase(s)) as Box<dyn Expr>)\n            .collect();\n\n        Self {\n            expr: FirstMatchOf::new(patterns),\n        }\n    }\n}\n\nimpl ExprLinter for Hedging {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: Vec::new(),\n            message: \"You're hedging.\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Flags hedging language (e.g. `I would argue that`, `..., so to speak`, `to a certain degree`).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Hedging;\n    use crate::linting::tests::assert_lint_count;\n\n    #[test]\n    fn detects_hedging_phrase() {\n        assert_lint_count(\"I would argue that this is correct.\", Hedging::default(), 1);\n    }\n\n    #[test]\n    fn does_not_flag_clean_text() {\n        assert_lint_count(\"This is clear and direct.\", Hedging::default(), 0);\n    }\n\n    #[test]\n    fn lowercase_hedging() {\n        assert_lint_count(\n            \"i would argue that the outcome is uncertain.\",\n            Hedging::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn incomplete_phrase_not_flagged() {\n        assert_lint_count(\"I would argue the data is clear.\", Hedging::default(), 0);\n    }\n\n    #[test]\n    fn phrase_with_trailing_comma() {\n        let text = \"I would argue that, this method works.\";\n        assert_lint_count(text, Hedging::default(), 1);\n    }\n\n    #[test]\n    fn phrase_with_extra_whitespace() {\n        assert_lint_count(\n            \"to   a   certain   degree the results are ambiguous.\",\n            Hedging::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_similar_but_incorrect_phrase() {\n        assert_lint_count(\n            \"He spoke so to speakingly about the event.\",\n            Hedging::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn phrase_split_by_line_break() {\n        assert_lint_count(\n            \"I would argue\\nthat this approach fails.\",\n            Hedging::default(),\n            1,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/hello_greeting.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{AnchorStart, Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct HelloGreeting {\n    expr: SequenceExpr,\n}\n\nimpl Default for HelloGreeting {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(AnchorStart)\n            .then_optional(SequenceExpr::default().t_ws())\n            .then_optional(\n                SequenceExpr::default()\n                    .then_quote()\n                    .then_optional(SequenceExpr::default().t_ws()),\n            )\n            .t_aco(\"halo\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for HelloGreeting {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let word = matched_tokens.iter().find(|tok| tok.kind.is_word())?;\n        let span = word.span;\n        let original = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"hello\".chars().collect(),\n                original,\n            )],\n            message: \"Prefer `hello` as a greeting; `halo` refers to the optical effect.\"\n                .to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Encourages greeting someone with `hello` instead of the homophone `halo`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::HelloGreeting;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_basic_greeting() {\n        assert_suggestion_result(\"Halo John!\", HelloGreeting::default(), \"Hello John!\");\n    }\n\n    #[test]\n    fn corrects_with_comma() {\n        assert_suggestion_result(\"Halo, Jane.\", HelloGreeting::default(), \"Hello, Jane.\");\n    }\n\n    #[test]\n    fn corrects_with_world() {\n        assert_suggestion_result(\"Halo world!\", HelloGreeting::default(), \"Hello world!\");\n    }\n\n    #[test]\n    fn corrects_without_punctuation() {\n        assert_suggestion_result(\n            \"Halo there friend.\",\n            HelloGreeting::default(),\n            \"Hello there friend.\",\n        );\n    }\n\n    #[test]\n    fn corrects_single_word_sentence() {\n        assert_suggestion_result(\"Halo!\", HelloGreeting::default(), \"Hello!\");\n    }\n\n    #[test]\n    fn corrects_question() {\n        assert_suggestion_result(\"Halo?\", HelloGreeting::default(), \"Hello?\");\n    }\n\n    #[test]\n    fn corrects_uppercase() {\n        assert_suggestion_result(\"HALO!\", HelloGreeting::default(), \"HELLO!\");\n    }\n\n    #[test]\n    fn no_lint_for_optical_term() {\n        assert_lint_count(\n            \"The halo around the moon glowed softly.\",\n            HelloGreeting::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_mid_sentence() {\n        assert_lint_count(\n            \"They shouted hello, not Halo, during rehearsal.\",\n            HelloGreeting::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_in_quotes() {\n        assert_suggestion_result(\n            \"\\\"Halo John!\\\"\",\n            HelloGreeting::default(),\n            \"\\\"Hello John!\\\"\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/hereby.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct Hereby {\n    expr: SequenceExpr,\n}\n\nimpl Default for Hereby {\n    fn default() -> Self {\n        let pattern = SequenceExpr::aco(\"here\")\n            .then_whitespace()\n            .t_aco(\"by\")\n            .then_whitespace()\n            .then_verb();\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for Hereby {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens[0..3].span()?;\n        let orig_chars = span.get_content(source);\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"hereby\".chars().collect(),\n                orig_chars,\n            )],\n            message: \"Did you mean the closed compound `hereby`?\".to_owned(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"`Here by` in some contexts should be `hereby`\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::Hereby;\n\n    #[test]\n    fn declare() {\n        assert_suggestion_result(\n            \"I here by declare this state to be free.\",\n            Hereby::default(),\n            \"I hereby declare this state to be free.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/hop_hope/mod.rs",
    "content": "use super::merge_linters::merge_linters;\n\nmod to_hop;\nmod to_hope;\nuse to_hop::ToHop;\nuse to_hope::ToHope;\n\nmerge_linters!(HopHope => ToHop, ToHope => \"Handles common errors involving `hop` and `hope`. Ensures `hop` is used correctly in phrases like `hop on a bus` while correcting mistaken uses of `hope` in contexts where `hop` is expected.\");\n\n#[cfg(test)]\nmod tests {\n    use super::HopHope;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn corrects_hop_to_hope() {\n        assert_suggestion_result(\n            \"I hop we can clarify this soon.\",\n            HopHope::default(),\n            \"I hope we can clarify this soon.\",\n        );\n    }\n\n    #[test]\n    fn does_not_correct_unrelated_use() {\n        assert_suggestion_result(\n            \"I hop on one foot for fun.\",\n            HopHope::default(),\n            \"I hop on one foot for fun.\",\n        );\n    }\n\n    #[test]\n    fn corrects_mixed_case_hop() {\n        assert_suggestion_result(\n            \"I HoP we can find a solution.\",\n            HopHope::default(),\n            \"I HoPE we can find a solution.\",\n        );\n    }\n\n    #[test]\n    fn corrects_hoping_on_call() {\n        assert_suggestion_result(\n            \"I was hoping on a call to discuss this.\",\n            HopHope::default(),\n            \"I was hopping on a call to discuss this.\",\n        );\n    }\n\n    #[test]\n    fn corrects_hoped_on_plane() {\n        assert_suggestion_result(\n            \"She hoped on an airplane to visit family.\",\n            HopHope::default(),\n            \"She hopped on an airplane to visit family.\",\n        );\n    }\n\n    #[test]\n    fn corrects_hope_on_bus() {\n        assert_suggestion_result(\n            \"They hope on a bus every morning.\",\n            HopHope::default(),\n            \"They hop on a bus every morning.\",\n        );\n    }\n\n    #[test]\n    fn does_not_correct_unrelated_context() {\n        assert_suggestion_result(\n            \"I hope everything goes well with your project.\",\n            HopHope::default(),\n            \"I hope everything goes well with your project.\",\n        );\n    }\n\n    #[test]\n    fn corrects_mixed_case() {\n        assert_suggestion_result(\n            \"She HoPeD on a train to get home.\",\n            HopHope::default(),\n            \"She HoPpED on a train to get home.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/hop_hope/to_hop.rs",
    "content": "use super::super::{ExprLinter, Lint, LintKind};\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::linting::Suggestion;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{CharString, CharStringExt};\nuse crate::{Token, char_string::char_string};\n\npub struct ToHop {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ToHop {\n    fn default() -> Self {\n        let pattern = SequenceExpr::word_set(&[\"hoping\", \"hoped\", \"hope\"])\n            .then_whitespace()\n            .t_aco(\"on\")\n            .then_whitespace()\n            .then_determiner()\n            .then_whitespace()\n            .then_word_set(&[\"airplane\", \"plane\", \"bus\", \"call\", \"train\"]);\n\n        Self {\n            expr: Box::new(pattern),\n        }\n    }\n}\n\nimpl ToHop {\n    fn to_correct(word: &str) -> Option<CharString> {\n        Some(match word.to_lowercase().as_str() {\n            \"hoping\" => char_string!(\"hopping\"),\n            \"hoped\" => char_string!(\"hopped\"),\n            \"hope\" => char_string!(\"hop\"),\n            _ => return None,\n        })\n    }\n}\n\nimpl ExprLinter for ToHop {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offending_word = &matched_tokens[0];\n        let word_chars = offending_word.span.get_content(source);\n        let word = word_chars.to_string();\n        let correct = Self::to_correct(&word)?;\n\n        Some(Lint {\n            span: offending_word.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                correct.to_vec(),\n                word_chars,\n            )],\n            message: format!(\n                \"Did you mean to use {word} instead of {} in this context?\",\n                correct.to_string()\n            ),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects incorrect usage of the words 'hoping,' 'hoped,' or 'hope' when referring to boarding or entering a mode of transportation. Suggests replacing them with the correct verb form such as 'hopping,' 'hopped,' or 'hop.'\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/hop_hope/to_hope.rs",
    "content": "use super::super::{ExprLinter, Lint, LintKind};\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::linting::Suggestion;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{Token, char_string::char_string};\n\npub struct ToHope {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ToHope {\n    fn default() -> Self {\n        let pattern = SequenceExpr::default()\n            .then_nominal()\n            .then_whitespace()\n            .then_word_set(&[\"hop\", \"hopped\"])\n            .then_whitespace()\n            .then_nominal();\n\n        Self {\n            expr: Box::new(pattern),\n        }\n    }\n}\n\nimpl ExprLinter for ToHope {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offending_word = &matched_tokens[2];\n        let word_chars = offending_word.span.get_content(source);\n\n        Some(Lint {\n            span: offending_word.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                char_string!(\"hope\").to_vec(),\n                word_chars,\n            )],\n            message: \"Did you mean to use 'hope' instead of 'hop' in this context?\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects incorrect use of 'hop' when the correct verb 'hope' should be used in a sentence.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/hope_youre.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::SequenceExpr,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct HopeYoure {\n    expr: SequenceExpr,\n}\n\nimpl Default for HopeYoure {\n    fn default() -> Self {\n        let loc = WordSet::new(&[\"here\", \"there\"]);\n\n        let prep = SequenceExpr::default().t_ws().then_preposition();\n\n        let expr = SequenceExpr::aco(\"hope\")\n            .t_ws()\n            .t_aco(\"your\")\n            .t_ws()\n            .then_adjective()\n            .then_optional(prep)\n            .t_ws()\n            .then(loc);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for HopeYoure {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn crate::expr::Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let your_tok = toks.get(2)?;\n        let span = your_tok.span;\n        let original = span.get_content(src);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"you're\".chars().collect(),\n                original,\n            )],\n            message: \"Prefer `you're`—the contraction of “you are”—when expressing a hope about someone’s condition.\"\n                .into(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects the misuse of possessive **your** after “hope” and an adjective \\\n         (e.g., “I hope your well”) and advises using **you’re** to supply the \\\n         missing verb “are.”\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::HopeYoure;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_excited_here() {\n        assert_suggestion_result(\n            \"I hope your excited here.\",\n            HopeYoure::default(),\n            \"I hope you're excited here.\",\n        );\n    }\n\n    #[test]\n    fn corrects_safe_there() {\n        assert_suggestion_result(\n            \"I hope your safe there.\",\n            HopeYoure::default(),\n            \"I hope you're safe there.\",\n        );\n    }\n\n    #[test]\n    fn corrects_safe_over_there() {\n        assert_suggestion_result(\n            \"I hope your safe over there.\",\n            HopeYoure::default(),\n            \"I hope you're safe over there.\",\n        );\n    }\n\n    #[test]\n    fn corrects_fine_here() {\n        assert_suggestion_result(\n            \"I hope your fine here.\",\n            HopeYoure::default(),\n            \"I hope you're fine here.\",\n        );\n    }\n\n    #[test]\n    fn corrects_happy_there() {\n        assert_suggestion_result(\n            \"I hope your happy there.\",\n            HopeYoure::default(),\n            \"I hope you're happy there.\",\n        );\n    }\n\n    #[test]\n    fn corrects_healthy_out_here() {\n        assert_suggestion_result(\n            \"I hope your healthy out here.\",\n            HopeYoure::default(),\n            \"I hope you're healthy out here.\",\n        );\n    }\n\n    #[test]\n    fn corrects_strong_there() {\n        assert_suggestion_result(\n            \"We hope your strong there.\",\n            HopeYoure::default(),\n            \"We hope you're strong there.\",\n        );\n    }\n\n    #[test]\n    fn corrects_sorry_here() {\n        assert_suggestion_result(\n            \"Hope your sorry here.\",\n            HopeYoure::default(),\n            \"Hope you're sorry here.\",\n        );\n    }\n\n    #[test]\n    fn no_lint_with_contraction() {\n        assert_lint_count(\"I hope you're excited here.\", HopeYoure::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_without_adjective() {\n        assert_lint_count(\"I hope your trip went well.\", HopeYoure::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_with_following_clause() {\n        assert_lint_count(\n            \"I hope your friends are well there.\",\n            HopeYoure::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_when_possessive_context() {\n        assert_lint_count(\n            \"I hope your advice on punctuation is helpful.\",\n            HopeYoure::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/how_to.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenKind, TokenStringExt,\n    expr::{All, Expr, OwnedExprExt, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::{InflectionOfBe, UPOSSet},\n};\n\npub struct HowTo {\n    expr: All,\n}\n\nimpl Default for HowTo {\n    fn default() -> Self {\n        let mut pattern = All::default();\n\n        let pos_pattern = SequenceExpr::anything()\n            .then_anything()\n            .t_aco(\"how\")\n            .then_whitespace()\n            .then_verb_lemma();\n        pattern.add(pos_pattern);\n\n        let exceptions = SequenceExpr::unless(UPOSSet::new(&[UPOS::PART]))\n            .then_anything()\n            .then_unless(|tok: &Token, _: &[char]| tok.kind.is_np_member())\n            .then_anything()\n            .then_unless(\n                InflectionOfBe::new().or(SequenceExpr::default().then_kind_any_or_words(\n                    &[\n                        TokenKind::is_auxiliary_verb,\n                        TokenKind::is_adjective,\n                        TokenKind::is_conjunction,\n                        TokenKind::is_proper_noun,\n                    ] as &[_],\n                    &[\"did\", \"come\", \"does\"],\n                )),\n            );\n\n        pattern.add(exceptions);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for HowTo {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {\n        let span = toks[2..4].span()?;\n        let fix: Vec<char> = \"to \".chars().collect();\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::InsertAfter(fix)],\n            message: \"Insert `to` after `how` (e.g., `how to clone`).\".into(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects the omission of `to` in constructions like `how clone / how install` and suggests `how to …`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::HowTo;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn flags_missing_to() {\n        assert_suggestion_result(\n            \"Here's how clone the repository.\",\n            HowTo::default(),\n            \"Here's how to clone the repository.\",\n        );\n    }\n\n    #[test]\n    fn ignores_correct_phrase() {\n        assert_lint_count(\"Here's how to clone the repository.\", HowTo::default(), 0);\n    }\n\n    #[test]\n    fn flags_other_verbs() {\n        assert_suggestion_result(\n            \"Learn how install Rust.\",\n            HowTo::default(),\n            \"Learn how to install Rust.\",\n        );\n    }\n\n    #[test]\n    fn ros_package_install() {\n        assert_suggestion_result(\n            \"Can someone explain how install this ROS package on Humble?\",\n            HowTo::default(),\n            \"Can someone explain how to install this ROS package on Humble?\",\n        );\n    }\n\n    #[test]\n    fn extract_and_install_app() {\n        assert_suggestion_result(\n            \"Here’s a quick guide on how install an app you’ve extracted from a tarball.\",\n            HowTo::default(),\n            \"Here’s a quick guide on how to install an app you’ve extracted from a tarball.\",\n        );\n    }\n\n    #[test]\n    fn dll_files() {\n        assert_suggestion_result(\n            \"This video shows how fix missing DLL files on Windows.\",\n            HowTo::default(),\n            \"This video shows how to fix missing DLL files on Windows.\",\n        );\n    }\n\n    #[test]\n    fn dofus_on_ubuntu() {\n        assert_suggestion_result(\n            \"Full tutorial on how install Dofus under Ubuntu.\",\n            HowTo::default(),\n            \"Full tutorial on how to install Dofus under Ubuntu.\",\n        );\n    }\n\n    #[test]\n    fn tar_gz_install() {\n        assert_suggestion_result(\n            \"Find out how install software shipped as a .tar.gz archive.\",\n            HowTo::default(),\n            \"Find out how to install software shipped as a .tar.gz archive.\",\n        );\n    }\n\n    #[test]\n    fn thrift_libraries() {\n        assert_suggestion_result(\n            \"Anyone know how install the Thrift libraries from source?\",\n            HowTo::default(),\n            \"Anyone know how to install the Thrift libraries from source?\",\n        );\n    }\n\n    #[test]\n    fn windows_adk() {\n        assert_suggestion_result(\n            \"Lost the Windows ADK again—remind me how install it?\",\n            HowTo::default(),\n            \"Lost the Windows ADK again—remind me how to install it?\",\n        );\n    }\n\n    #[test]\n    fn accounting_errors() {\n        assert_suggestion_result(\n            \"Eight common accounting errors and how fix them.\",\n            HowTo::default(),\n            \"Eight common accounting errors and how to fix them.\",\n        );\n    }\n\n    #[test]\n    fn sentence_fragments() {\n        assert_suggestion_result(\n            \"Here’s what sentence fragments are and how fix them.\",\n            HowTo::default(),\n            \"Here’s what sentence fragments are and how to fix them.\",\n        );\n    }\n\n    #[test]\n    fn zipper_slider() {\n        assert_suggestion_result(\n            \"Quick demo on how fix a broken zipper slider.\",\n            HowTo::default(),\n            \"Quick demo on how to fix a broken zipper slider.\",\n        );\n    }\n\n    #[test]\n    fn door_lock() {\n        assert_suggestion_result(\n            \"Tips on how fix a door that won’t lock.\",\n            HowTo::default(),\n            \"Tips on how to fix a door that won’t lock.\",\n        );\n    }\n\n    #[test]\n    fn already_correct_install() {\n        assert_lint_count(\n            \"See how to install the package with apt.\",\n            HowTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn already_correct_fix() {\n        assert_lint_count(\n            \"He showed me how to fix the zipper in ten minutes.\",\n            HowTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn how_are_you() {\n        assert_lint_count(\"How are you?\", HowTo::default(), 0);\n    }\n\n    #[test]\n    fn how_calm_you_are() {\n        assert_lint_count(\"I like how calm you are.\", HowTo::default(), 0);\n    }\n\n    #[test]\n    fn how_will_you_make_up() {\n        assert_lint_count(\n            \"How will you make up for your mistakes?\",\n            HowTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn storytelling_clause() {\n        assert_lint_count(\n            \"I will tell about how leaving my husband led to my dog winning a Nobel Prize.\",\n            HowTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_how_did_you() {\n        assert_lint_count(\"How did you get to school every day?\", HowTo::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_how_come() {\n        assert_lint_count(\n            \"How come this has to be a special case?\",\n            HowTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_how_has() {\n        assert_lint_count(\"How Has This Been Tested?\", HowTo::default(), 0);\n    }\n\n    #[test]\n    fn issue_1492() {\n        assert_no_lints(\n            \"I hope to provide some insight into correct HTML formatting, in addition to how authors can avoid these issues.\",\n            HowTo::default(),\n        );\n\n        assert_no_lints(\"But how does something like this...\", HowTo::default());\n    }\n\n    #[test]\n    fn allow_issue_1298() {\n        assert_no_lints(\n            \"The story of how and why things came to this point.\",\n            HowTo::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_false_positive_pr_1846() {\n        assert_no_lints(\n            \"About how Microsoft, Google, and others are training people in Rust.\",\n            HowTo::default(),\n        )\n    }\n\n    #[test]\n    fn dont_flag_false_positives_1492_how_indexes() {\n        assert_no_lints(\n            \"controls how indexes will be added to unwrapped keys of flat array-like objects\",\n            HowTo::default(),\n        );\n    }\n\n    #[test]\n    fn issue_2124() {\n        assert_no_lints(\n            \"I like how discord shows Spotify status on your profile.\",\n            HowTo::default(),\n        );\n        assert_no_lints(\n            \"To be determined based on how error handling is done in new paradigm.\",\n            HowTo::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/hyphenate_number_day.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, patterns::NominalPhrase};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct HyphenateNumberDay {\n    expr: SequenceExpr,\n}\n\nimpl Default for HyphenateNumberDay {\n    fn default() -> Self {\n        let pattern = SequenceExpr::default()\n            .then_number()\n            .then_whitespace()\n            .t_aco(\"day\")\n            .then_longest_of(vec![\n                Box::new(SequenceExpr::whitespace().then(NominalPhrase)),\n                Box::new(\n                    SequenceExpr::default()\n                        .then_hyphen()\n                        .then_adjective()\n                        .then_whitespace()\n                        .then(NominalPhrase),\n                ),\n            ]);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for HyphenateNumberDay {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> Option<Lint> {\n        let number = matched_tokens[0].kind.as_number()?;\n        let space = &matched_tokens[1];\n\n        Some(Lint {\n            span: space.span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::ReplaceWith(vec!['-'])],\n            message: format!(\"Use a hyphen in `{number}-day` when forming an adjectival compound.\"),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Ensures a hyphen is used in `X-day` when it is part of a compound adjective, such as `4-day work week`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::HyphenateNumberDay;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn corrects_three_day_training() {\n        assert_suggestion_result(\n            \"The company offers a 3 day training program.\",\n            HyphenateNumberDay::default(),\n            \"The company offers a 3-day training program.\",\n        );\n    }\n\n    #[test]\n    fn corrects_five_day_challenge() {\n        assert_suggestion_result(\n            \"Join the 5 day challenge to improve your skills.\",\n            HyphenateNumberDay::default(),\n            \"Join the 5-day challenge to improve your skills.\",\n        );\n    }\n\n    #[test]\n    fn corrects_seven_day_plan() {\n        assert_suggestion_result(\n            \"She followed a strict 7 day meal plan.\",\n            HyphenateNumberDay::default(),\n            \"She followed a strict 7-day meal plan.\",\n        );\n    }\n\n    #[test]\n    fn does_not_correct_when_not_adjective() {\n        assert_suggestion_result(\n            \"The seminar lasts for 2 days.\",\n            HyphenateNumberDay::default(),\n            \"The seminar lasts for 2 days.\",\n        );\n    }\n\n    #[test]\n    fn corrects_varied_phrases() {\n        assert_suggestion_result(\n            \"They implemented a new 6 day work schedule.\",\n            HyphenateNumberDay::default(),\n            \"They implemented a new 6-day work schedule.\",\n        );\n\n        assert_suggestion_result(\n            \"Enroll in our 10 day fitness bootcamp!\",\n            HyphenateNumberDay::default(),\n            \"Enroll in our 10-day fitness bootcamp!\",\n        );\n    }\n\n    #[test]\n    fn edge_case_day_long() {\n        assert_suggestion_result(\n            \"The 4 day-long seminar was insightful.\",\n            HyphenateNumberDay::default(),\n            \"The 4-day-long seminar was insightful.\",\n        );\n    }\n\n    #[test]\n    fn edge_case_plural_days() {\n        assert_suggestion_result(\n            \"The trip was a fun 5 day experience.\",\n            HyphenateNumberDay::default(),\n            \"The trip was a fun 5-day experience.\",\n        );\n    }\n\n    #[test]\n    fn ignores_spelled_out_numbers() {\n        assert_suggestion_result(\n            \"We had a three day holiday.\",\n            HyphenateNumberDay::default(),\n            \"We had a three day holiday.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/i_am_agreement.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Lrc, Token, TokenStringExt,\n    expr::{AnchorStart, Expr, FirstMatchOf, FixedPhrase, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct IAmAgreement {\n    expr: FirstMatchOf,\n}\n\nimpl Default for IAmAgreement {\n    fn default() -> Self {\n        let i_are = Lrc::new(FixedPhrase::from_phrase(\"I are\"));\n\n        let nothing_before_i_are = SequenceExpr::with(AnchorStart).then(i_are.clone());\n\n        let non_and_word_before_i_are = SequenceExpr::default()\n            .then_word_except(&[\"and\"])\n            .t_ws()\n            .then(i_are);\n\n        let expr = FirstMatchOf::new(vec![\n            Box::new(nothing_before_i_are),\n            Box::new(non_and_word_before_i_are),\n        ]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for IAmAgreement {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let toks = &toks[toks.len() - 3..];\n        Some(Lint {\n            span: toks.span()?,\n            lint_kind: LintKind::Agreement,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"I am\".chars().collect(),\n                toks.span()?.get_content(src),\n            )],\n            message: \"The first-person singular pronoun `I` requires the verb form `am`; `are` belongs to second-person or plural contexts.\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `I are` to `I am`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_i_are_simple() {\n        assert_suggestion_result(\"I are\", IAmAgreement::default(), \"I am\");\n    }\n\n    #[test]\n    fn corrects_i_are() {\n        assert_suggestion_result(\n            \"I are really happy about this release.\",\n            IAmAgreement::default(),\n            \"I am really happy about this release.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_you_and_i_are() {\n        assert_lint_count(\n            \"You know, you and I are sitting on the Titanic and the iceberg is over there.\",\n            IAmAgreement::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_mention_and_i_are() {\n        assert_lint_count(\n            \"Hello, @another-rex and I are attempting to package packageurl-go for Debian as we need it for a build dependency.\",\n            IAmAgreement::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_z_and_i_are() {\n        assert_lint_count(\n            \"The url is copied from a manual search, and Z and I are modified.\",\n            IAmAgreement::default(),\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_name_and_i_are() {\n        assert_lint_count(\n            \"Paper that Lena Baunaz and I are working on as part of my SNSF-funded 'Focus in diachrony'\",\n            IAmAgreement::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_so_i_are() {\n        assert_suggestion_result(\n            \"I have not yet been able to reproduce this issue in my environment, so I are still trying to figure it out\",\n            IAmAgreement::default(),\n            \"I have not yet been able to reproduce this issue in my environment, so I am still trying to figure it out\",\n        );\n    }\n\n    #[test]\n    fn fix_if_i_are() {\n        assert_suggestion_result(\n            \"If i are on creative inventory, and try to clean my inventory holding shift is disconnected too.\",\n            IAmAgreement::default(),\n            \"If i am on creative inventory, and try to clean my inventory holding shift is disconnected too.\",\n        );\n    }\n\n    #[test]\n    fn fix_what_i_are() {\n        assert_suggestion_result(\n            \"in this situation I can't see what I are typing\",\n            IAmAgreement::default(),\n            \"in this situation I can't see what I am typing\",\n        );\n    }\n\n    #[test]\n    fn fix_where_i_are() {\n        assert_suggestion_result(\n            \"I have a logging application where I are append to a topic\",\n            IAmAgreement::default(),\n            \"I have a logging application where I am append to a topic\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/if_wouldve.rs",
    "content": "use crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, LintKind, Suggestion};\nuse crate::patterns::{NominalPhrase, WordSet};\nuse crate::token_string_ext::TokenStringExt;\nuse crate::{CharStringExt, Lint, Token};\n\npub struct IfWouldve {\n    expr: SequenceExpr,\n}\n\nimpl Default for IfWouldve {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"if\")\n                .t_ws()\n                .then(NominalPhrase)\n                .t_ws()\n                .then_any_of(vec![\n                    Box::new(\n                        SequenceExpr::word_set(&[\"would\", \"had\"])\n                            .t_ws()\n                            .then_word_set(&[\"have\", \"of\"]),\n                    ),\n                    Box::new(WordSet::new(&[\"would've\", \"wouldve\", \"had've\", \"hadve\"])),\n                ])\n                .t_ws()\n                .then_verb_past_participle_form(),\n        }\n    }\n}\n\nimpl ExprLinter for IfWouldve {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    /// Identifies and corrects incorrect conditional phrases like \"would've\", \"would have\", \"would of\", etc.\n    /// to use the correct \"had\" construction in conditional statements.\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        // We examine tokens in pairs, moving backwards from the end of the phrase\n        // to find the incorrect verb construction to replace with \"had\".\n        // The pattern we're looking for is: [if] [NP] [would/had] [have/of/ve] [verb]\n\n        // Start from the end of the token sequence (before the verb)\n        let matched_tokens = (2..toks.len() - 2)\n            .rev()\n            .step_by(2) // Check every other token since we're looking at pairs\n            .find_map(|i| {\n                let prev = toks[i - 2].span.get_content(src);\n                let curr = toks[i].span.get_content(src);\n\n                let would_had = &[\"would\", \"had\"];\n\n                // Determine which tokens to replace based on the pattern\n                match () {\n                    // Handle contractions like \"would've\" or \"had've\"\n                    _ if curr.ends_with_ignore_ascii_case_str(\"ve\") => {\n                        if curr.starts_with_any_ignore_ascii_case_str(would_had) {\n                            Some(&toks[i..=i]) // Single token like \"would've\"\n                        } else if prev.starts_with_any_ignore_ascii_case_str(would_had) {\n                            Some(&toks[i - 2..=i]) // Two tokens like \"would have\"\n                        } else {\n                            None\n                        }\n                    }\n                    // Handle \"would of\" / \"had of\"\n                    _ if curr.ends_with_ignore_ascii_case_str(\"of\")\n                        && prev.starts_with_any_ignore_ascii_case_str(would_had) =>\n                    {\n                        Some(&toks[i - 2..=i])\n                    }\n                    _ => None,\n                }\n            });\n\n        matched_tokens.and_then(|tokens_to_replace| {\n            let span = tokens_to_replace.span()?;\n\n            Some(Lint {\n                span,\n                lint_kind: LintKind::Nonstandard,\n                suggestions: vec![Suggestion::replace_with_match_case(\n                    vec!['h', 'a', 'd'],\n                    span.get_content(src),\n                )],\n                message: \"If this is counterfactual or hypothetical, use `had` after `if` rather than `would have` or `had have`.\".to_string(),\n                ..Default::default()\n            })\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `if I would've done` etc. to `if I had done` etc.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::*;\n\n    #[test]\n    fn flag_if_i_wouldve_done_x() {\n        assert_suggestion_result(\n            \"If I would've done X...\",\n            IfWouldve::default(),\n            \"If I had done X...\",\n        );\n    }\n\n    #[test]\n    fn flag_if_you_would_have_done_y() {\n        assert_suggestion_result(\n            \"If you would have done Y...\",\n            IfWouldve::default(),\n            \"If you had done Y...\",\n        );\n    }\n\n    #[test]\n    fn flag_if_we_would_of_z() {\n        assert_suggestion_result(\n            \"If we would of done Z...\",\n            IfWouldve::default(),\n            \"If we had done Z...\",\n        );\n    }\n\n    #[test]\n    fn flag_if_he_hadve_done_w() {\n        assert_suggestion_result(\n            \"If he hadve done W...\",\n            IfWouldve::default(),\n            \"If he had done W...\",\n        );\n    }\n\n    #[test]\n    fn flag_if_she_hadve_done_x() {\n        assert_suggestion_result(\n            \"If she had've done X...\",\n            IfWouldve::default(),\n            \"If she had done X...\",\n        );\n    }\n\n    #[test]\n    fn flag_if_it_had_of_done_x() {\n        assert_suggestion_result(\n            \"If it had of done X...\",\n            IfWouldve::default(),\n            \"If it had done X...\",\n        );\n    }\n\n    #[test]\n    fn flag_if_np_wouldve() {\n        assert_suggestion_result(\n            \"If that guy would've thought it through...\",\n            IfWouldve::default(),\n            \"If that guy had thought it through...\",\n        );\n    }\n\n    // The linter cannot yet detect when this pattern is a counterfactual.\n    // If you can improve this linter to do so, here are some example sentences.\n\n    #[test]\n    #[ignore = \"Can't detect correct use not in counterfactual\"]\n    fn dont_flag_non_counterfactual_done() {\n        assert_no_lints(\n            \"I don't know if they would have done that for a designer\",\n            IfWouldve::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"Can't detect correct use not in counterfactual\"]\n    fn dont_flag_non_counterfactual_gotten() {\n        assert_no_lints(\n            \"I don't know if a normal programmer would have gotten that treatment.\",\n            IfWouldve::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"Can't detect correct use not in counterfactual\"]\n    fn dont_flag_non_counterfactual_been() {\n        assert_no_lints(\n            \"I don't know if they would have been interested anyway\",\n            IfWouldve::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/in_on_the_cards.rs",
    "content": "use crate::{\n    CharStringExt, Dialect, Token,\n    expr::{Expr, FirstMatchOf, SequenceExpr},\n    linting::{LintKind, Suggestion},\n    patterns::{InflectionOfBe, WordSet},\n};\n\nuse super::{ExprLinter, Lint};\nuse crate::linting::expr_linter::Chunk;\n\npub struct InOnTheCards {\n    expr: SequenceExpr,\n    dialect: Dialect,\n}\n\nimpl InOnTheCards {\n    pub fn new(dialect: Dialect) -> Self {\n        // Quick research suggested that Australian and Canadian English agree with American English.\n        let preposition = match dialect {\n            Dialect::British => \"in\",\n            _ => \"on\",\n        };\n\n        let pre_context = FirstMatchOf::new(vec![\n            Box::new(InflectionOfBe::new()),\n            Box::new(WordSet::new(&[\n                \"isn't\", \"it's\", \"wasn't\", \"weren't\", \"not\", \"isnt\", \"its\", \"wasnt\", \"werent\",\n            ])),\n        ]);\n\n        let expr = SequenceExpr::with(pre_context)\n            .t_ws()\n            .t_aco(preposition)\n            .then_fixed_phrase(\" the cards\");\n\n        Self { expr, dialect }\n    }\n}\n\nimpl ExprLinter for InOnTheCards {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let prep_span = toks[2].span;\n        let prep = prep_span.get_content(src);\n\n        let new_prep = [\n            match prep[0] {\n                'i' => 'o',\n                'o' => 'i',\n                'I' => 'O',\n                'O' => 'I',\n                _ => return None,\n            },\n            prep[1],\n        ];\n\n        let sugg = Suggestion::ReplaceWith(new_prep.to_vec());\n\n        let message = format!(\n            \"Use `{} the cards` instead of `{} the cards` in {} English.\",\n            new_prep.to_string(),\n            prep.to_string(),\n            self.dialect,\n        );\n\n        Some(Lint {\n            span: prep_span,\n            lint_kind: LintKind::Regionalism,\n            suggestions: vec![sugg],\n            message,\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects either `in the cards` or `on the cards` to the other, depending on the dialect.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::InOnTheCards;\n    use crate::{\n        Dialect,\n        linting::tests::{assert_lint_count, assert_suggestion_result},\n    };\n\n    // On the cards\n\n    #[test]\n    fn correct_are_on_for_american() {\n        assert_suggestion_result(\n            \"Both these features are on the cards, but for now we want to let users know if they have requested an invalid example.\",\n            InOnTheCards::new(Dialect::American),\n            \"Both these features are in the cards, but for now we want to let users know if they have requested an invalid example.\",\n        );\n    }\n\n    #[test]\n    fn dont_correct_is_on_for_british() {\n        assert_lint_count(\n            \"Yes, I think this is on the cards.\",\n            InOnTheCards::new(Dialect::British),\n            0,\n        );\n    }\n\n    #[test]\n    fn correct_not_on_for_american() {\n        assert_suggestion_result(\n            \"If a permanent unique identifier is not on the cards any time soon for WebHID, we should consider a WebUSB alternative.\",\n            InOnTheCards::new(Dialect::American),\n            \"If a permanent unique identifier is not in the cards any time soon for WebHID, we should consider a WebUSB alternative.\",\n        );\n    }\n\n    #[test]\n    fn correct_be_on_for_american() {\n        assert_suggestion_result(\n            \"a full breach of genomics (patient?) data can be on the cards since S3 AWS bucket credentials can be slurped from the process's memory\",\n            InOnTheCards::new(Dialect::American),\n            \"a full breach of genomics (patient?) data can be in the cards since S3 AWS bucket credentials can be slurped from the process's memory\",\n        );\n    }\n\n    #[test]\n    fn correct_was_on_for_american() {\n        assert_suggestion_result(\n            \"Virtualising the message summaries ObservableCollection was on the cards so I also take note of your last point.\",\n            InOnTheCards::new(Dialect::American),\n            \"Virtualising the message summaries ObservableCollection was in the cards so I also take note of your last point.\",\n        );\n    }\n\n    #[test]\n    fn correct_isnt_on_no_apostrophe_for_american() {\n        assert_suggestion_result(\n            \"parallelising that part isnt on the cards since there would be no noticeable ...\",\n            InOnTheCards::new(Dialect::American),\n            \"parallelising that part isnt in the cards since there would be no noticeable ...\",\n        );\n    }\n\n    #[test]\n    fn correct_its_on_for_american() {\n        assert_suggestion_result(\n            \"Regarding extensive documentation, as mentioned, its on the cards, project being sponsored by the aforementioned organisations.\",\n            InOnTheCards::new(Dialect::American),\n            \"Regarding extensive documentation, as mentioned, its in the cards, project being sponsored by the aforementioned organisations.\",\n        );\n    }\n\n    #[test]\n    fn correct_were_on_for_american() {\n        assert_suggestion_result(\n            \"lots of high altitudes were on the cards again\",\n            InOnTheCards::new(Dialect::American),\n            \"lots of high altitudes were in the cards again\",\n        );\n    }\n\n    #[test]\n    fn correct_isnt_on_for_american() {\n        assert_suggestion_result(\n            \"downgrading to an end-of-life operating system isn't on the cards\",\n            InOnTheCards::new(Dialect::American),\n            \"downgrading to an end-of-life operating system isn't in the cards\",\n        );\n    }\n\n    #[test]\n    fn correct_wasnt_on_for_american() {\n        assert_suggestion_result(\n            \"it's only a middleground for an org because passwordless wasn't on the cards previously\",\n            InOnTheCards::new(Dialect::American),\n            \"it's only a middleground for an org because passwordless wasn't in the cards previously\",\n        );\n    }\n\n    // In the cards\n\n    #[test]\n    fn correct_was_in_for_british() {\n        assert_suggestion_result(\n            \"Just wondering if it was in the cards or not for something like the Quest3 to get support in the future.\",\n            InOnTheCards::new(Dialect::British),\n            \"Just wondering if it was on the cards or not for something like the Quest3 to get support in the future.\",\n        );\n    }\n\n    #[test]\n    fn dont_correct_is_in_for_american() {\n        assert_lint_count(\n            \"Not sure if such a project is in the cards\",\n            InOnTheCards::new(Dialect::American),\n            0,\n        );\n    }\n\n    #[test]\n    fn correct_not_in_for_british() {\n        assert_suggestion_result(\n            \"Is that just not in the cards for WASM at this time?\",\n            InOnTheCards::new(Dialect::British),\n            \"Is that just not on the cards for WASM at this time?\",\n        );\n    }\n\n    #[test]\n    fn correct_be_in_for_british() {\n        assert_suggestion_result(\n            \"Would this be in the cards?\",\n            InOnTheCards::new(Dialect::British),\n            \"Would this be on the cards?\",\n        );\n    }\n\n    #[test]\n    fn correct_are_in_for_british() {\n        assert_suggestion_result(\n            \"Manifest files are in the cards but haven't been implemented yet.\",\n            InOnTheCards::new(Dialect::British),\n            \"Manifest files are on the cards but haven't been implemented yet.\",\n        );\n    }\n\n    #[test]\n    fn correct_its_in_for_british() {\n        assert_suggestion_result(\n            \"As far as an error, that probably would be helpful but doesn't sound like its in the cards.\",\n            InOnTheCards::new(Dialect::British),\n            \"As far as an error, that probably would be helpful but doesn't sound like its on the cards.\",\n        );\n    }\n\n    #[test]\n    fn correct_were_in_for_british() {\n        assert_suggestion_result(\n            \"a year or two given the major overhauls that were in the cards at the time\",\n            InOnTheCards::new(Dialect::British),\n            \"a year or two given the major overhauls that were on the cards at the time\",\n        );\n    }\n\n    #[test]\n    fn correct_isnt_in_for_british() {\n        assert_suggestion_result(\n            \"I'm going to close this as opting out of the installation framework that Electron gives us isn't in the cards for the project at this time.\",\n            InOnTheCards::new(Dialect::British),\n            \"I'm going to close this as opting out of the installation framework that Electron gives us isn't on the cards for the project at this time.\",\n        );\n    }\n\n    #[test]\n    fn correct_wasnt_in_for_british() {\n        assert_suggestion_result(\n            \"doing something better than just swapping our internal log package for glog wasn’t in the cards back then\",\n            InOnTheCards::new(Dialect::British),\n            \"doing something better than just swapping our internal log package for glog wasn’t on the cards back then\",\n        );\n    }\n\n    #[test]\n    fn correct_werent_in_for_british() {\n        assert_suggestion_result(\n            \"I had thought stacked borrows was mostly in a final tweaking phase and major changes weren't in the cards.\",\n            InOnTheCards::new(Dialect::British),\n            \"I had thought stacked borrows was mostly in a final tweaking phase and major changes weren't on the cards.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/inflected_verb_after_to.rs",
    "content": "use super::{Lint, LintKind, Linter, Suggestion};\nuse crate::char_string::CharStringExt;\nuse crate::spell::Dictionary;\nuse crate::{Document, Span, TokenStringExt};\n\npub struct InflectedVerbAfterTo<T>\nwhere\n    T: Dictionary,\n{\n    dictionary: T,\n}\n\nimpl<T: Dictionary> InflectedVerbAfterTo<T> {\n    pub fn new(dictionary: T) -> Self {\n        Self { dictionary }\n    }\n}\n\nimpl<T: Dictionary> Linter for InflectedVerbAfterTo<T> {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n        for pi in document.iter_preposition_indices() {\n            let prep = document.get_token(pi).unwrap();\n            let Some(space) = document.get_token(pi + 1) else {\n                continue;\n            };\n            let Some(word) = document.get_token(pi + 2) else {\n                continue;\n            };\n            if !space.kind.is_whitespace() || !word.kind.is_word() {\n                continue;\n            }\n            let prep_to = document.get_span_content(&prep.span);\n            if !prep_to.eq_ignore_ascii_case_chars(&['t', 'o']) {\n                continue;\n            }\n\n            let chars = document.get_span_content(&word.span);\n\n            if chars.len() < 4 {\n                continue;\n            }\n\n            let check_stem = |stem: &[char]| {\n                if let Some(metadata) = self.dictionary.get_word_metadata(stem)\n                    && metadata.is_verb()\n                    && !metadata.is_noun()\n                {\n                    return true;\n                }\n                false\n            };\n\n            let mut lint_from_stem = |stem: &[char]| {\n                lints.push(Lint {\n                    span: Span::new(prep.span.start, word.span.end),\n                    lint_kind: LintKind::WordChoice,\n                    message: \"The base form of the verb is needed here.\".to_string(),\n                    suggestions: vec![Suggestion::ReplaceWith(\n                        prep_to\n                            .iter()\n                            .chain([' '].iter())\n                            .chain(stem.iter())\n                            .copied()\n                            .collect(),\n                    )],\n                    ..Default::default()\n                });\n            };\n\n            #[derive(PartialEq)]\n            enum ToVerbExpects {\n                ExpectsInfinitive,\n                ExpectsNominal,\n            }\n\n            use ToVerbExpects::*;\n\n            let ed_specific_heuristics = || {\n                if let Some(prev) = document.get_next_word_from_offset(pi, -1) {\n                    let prev_chars = document.get_span_content(&prev.span);\n                    if let Some(metadata) = self.dictionary.get_word_metadata(prev_chars) {\n                        // adj: \"able to\" expects an infinitive verb\n                        // verb: \"have/had/has/having to\" expect an infinitive verb\n                        if metadata.is_adjective() || metadata.is_verb() {\n                            return ToVerbExpects::ExpectsInfinitive;\n                        }\n                    }\n                } else {\n                    // Assume a chunk beginning with \"to\" and a verb in -ed should expect an infinitive verb\n                    return ToVerbExpects::ExpectsInfinitive;\n                }\n                // Default assumption is that \"to\" is a preposition so a noun etc. should come after it\n                ToVerbExpects::ExpectsNominal\n            };\n\n            if chars.ends_with(&['e', 'd']) {\n                let ed = check_stem(&chars[..chars.len() - 2]);\n                if ed && ed_specific_heuristics() == ExpectsInfinitive {\n                    lint_from_stem(&chars[..chars.len() - 2]);\n                };\n                let d = check_stem(&chars[..chars.len() - 1]);\n                // Add -d specific heuristics when needed\n                if d {\n                    lint_from_stem(&chars[..chars.len() - 1]);\n                };\n            }\n            if chars.ends_with(&['e', 's']) {\n                let es = check_stem(&chars[..chars.len() - 2]);\n                // Add -es specific heuristics when needed\n                if es {\n                    lint_from_stem(&chars[..chars.len() - 2]);\n                };\n            }\n            if chars.ends_with(&['s']) {\n                let s = check_stem(&chars[..chars.len() - 1]);\n                // Add -s specific heuristics when needed\n                if s {\n                    lint_from_stem(&chars[..chars.len() - 1]);\n                };\n            }\n        }\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"This rule looks for `to verb` where `verb` is not in the infinitive form.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::InflectedVerbAfterTo;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n    use crate::spell::FstDictionary;\n\n    #[test]\n    fn dont_flag_to_check_both_verb_and_noun() {\n        assert_lint_count(\n            \"to check\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_to_checks_both_verb_and_noun() {\n        assert_lint_count(\n            \"to checks\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_to_cheques_not_a_verb() {\n        assert_lint_count(\n            \"to cheques\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"-ing forms can act as nouns, current heuristics cannot distinguish\"]\n    fn flag_to_checking() {\n        assert_lint_count(\n            \"to checking\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            1,\n        );\n    }\n\n    #[test]\n    fn dont_flag_check_ed() {\n        assert_lint_count(\n            \"to checked\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_noun_belief_s() {\n        assert_lint_count(\n            \"to beliefs\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_noun_meat_s() {\n        assert_lint_count(\n            \"to meats\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"can't check yet. 'capture' is noun as well as verb. \\\"to nouns\\\" is good English. we can't disambiguate verbs from nouns.\"]\n    fn check_993_suggestions() {\n        assert_suggestion_result(\n            \"A location-agnostic structure that attempts to captures the context and content that a Lint occurred.\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            \"A location-agnostic structure that attempts to capture the context and content that a Lint occurred.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_embarrass_not_in_dictionary() {\n        assert_lint_count(\n            \"Second I'm going to embarrass you for a.\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_exist_s() {\n        assert_suggestion_result(\n            \"A valid solution is expected to exists.\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            \"A valid solution is expected to exist.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"can't check yet. 'catch' is noun as well as verb. 'to nouns' is good English. we can't disambiguate verbs from nouns.\"]\n    fn corrects_es_ending() {\n        assert_suggestion_result(\n            \"I need it to catches every exception.\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            \"I need it to catch every exception.\",\n        );\n    }\n\n    #[test]\n    fn corrects_ed_ending() {\n        assert_suggestion_result(\n            \"I had to expanded my horizon.\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            \"I had to expand my horizon.\",\n        );\n    }\n\n    #[test]\n    fn flags_expire_d() {\n        assert_lint_count(\n            \"I didn't know it was going to expired.\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            1,\n        );\n    }\n\n    #[test]\n    fn corrects_explain_ed() {\n        assert_suggestion_result(\n            \"To explained the rules to the team.\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            \"To explain the rules to the team.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"can't check yet. surprisingly, 'explore' is noun as well as verb. 'to nouns' is good English. we can't disambiguate verbs from nouns.\"]\n    fn corrects_explor_ed() {\n        assert_suggestion_result(\n            \"I went to explored distant galaxies.\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            \"I went to explore distant galaxies.\",\n        );\n    }\n\n    #[test]\n    fn cant_flag_express_ed_also_noun() {\n        assert_lint_count(\n            \"I failed to clearly expressed my point.\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            0,\n        );\n    }\n\n    #[test]\n    fn correct_feign_ed() {\n        // adj \"able\" before \"to\" works with \"to\", making \"to\" part of an infinitive verb\n        assert_suggestion_result(\n            \"I was able to feigned ignorance.\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            \"I was able to feign ignorance.\",\n        );\n    }\n\n    #[test]\n    fn issue_241() {\n        // Hypothesis: when before \"to\" is not an adj, assume \"to\" is a preposition\n        assert_lint_count(\n            \"Comparison to Expected Results\",\n            InflectedVerbAfterTo::new(FstDictionary::curated()),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/initialism_linter.rs",
    "content": "use crate::expr::Expr;\n\nuse crate::{Token, patterns::Word};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\n/// Alias for a word in an initialism expansion\ntype InitialismWord = Vec<char>;\n/// Alias for a phrase an initialism expands to\ntype InitialismPhrase = Vec<InitialismWord>;\n\n/// A struct that can be composed to expand initialisms, respecting the capitalization of each\n/// item.\npub struct InitialismLinter {\n    expr: Word,\n    /// The lowercase-normalized expansion of the initialism.\n    expansions_lower: Vec<InitialismPhrase>,\n}\n\nimpl InitialismLinter {\n    /// Construct a linter that can correct an initialism to\n    pub fn new(initialism: &str, expansions: &[&str]) -> Self {\n        let expansions_lower = expansions\n            .iter()\n            .map(|expansion| {\n                expansion\n                    .split(' ')\n                    .map(|s| s.chars().map(|v| v.to_ascii_lowercase()).collect())\n                    .collect()\n            })\n            .collect();\n\n        Self {\n            expr: Word::from_char_string(initialism.chars().collect()),\n            expansions_lower,\n        }\n    }\n}\n\nimpl ExprLinter for InitialismLinter {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let tok = matched_tokens.first()?;\n        let source = tok.span.get_content(source);\n\n        let suggestions = self\n            .expansions_lower\n            .iter()\n            .map(|expansion_lower| {\n                let mut expansion = expansion_lower.clone();\n                let first_letter = &mut expansion[0][0];\n                *first_letter = if source[0].is_ascii_uppercase() {\n                    first_letter.to_ascii_uppercase()\n                } else {\n                    first_letter.to_ascii_lowercase()\n                };\n                Suggestion::ReplaceWith(\n                    expansion\n                        .iter()\n                        .flat_map(|word| std::iter::once(' ').chain(word.iter().copied()))\n                        .skip(1)\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n\n        Some(Lint {\n            span: tok.span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions,\n            message: \"Try expanding this initialism.\".to_owned(),\n            priority: 127,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Expands an initialism.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {}\n"
  },
  {
    "path": "harper-core/src/linting/initialisms.rs",
    "content": "use crate::linting::LintGroup;\n\nuse super::InitialismLinter;\n\npub fn lint_group() -> LintGroup {\n    let mut group = LintGroup::empty();\n\n    macro_rules! add_initialism_mappings {\n        ($group:expr, { $($name:expr => ($initialism:expr, $expanded:expr)),+ $(,)? }) => {\n            $(\n                $group.add_chunk_expr_linter(\n                    $name,\n                    Box::new(InitialismLinter::new($initialism, $expanded)),\n                );\n            )+\n        };\n    }\n\n    add_initialism_mappings!(group, {\n        \"AsFarAsIKnow\"           => (\"afaik\", &[\"as far as I know\"]),\n        \"AsSoonAsPossible\"       => (\"asap\", &[\"as soon as possible\"]),\n        \"BeRightBack\"            => (\"brb\", &[\"be right back\"]),\n        \"ByTheWay\"               => (\"btw\", &[\"by the way\"]),\n        \"ExplainLikeImFive\"      => (\"eli5\", &[\"explain like i'm five\"]),\n        \"ForWhatItsWorth\"        => (\"fwiw\", &[\"for what it's worth\"]),\n        \"ForYourInformation\"     => (\"fyi\", &[\"for your information\"]),\n        \"IDontKnow\"              => (\"idk\", &[\"I don't know\"]),\n        \"IfIRecallCorrectly\"     => (\"iirc\", &[\"if I recall correctly\"]),\n        \"IfIUnderstandCorrectly\" => (\"iiuc\", &[\"if I understand correctly\"]),\n        \"IfYouKnowYouKnow\"       => (\"iykyk\", &[\"if you know, you know\"]),\n        \"InCaseYouMissedIt\"      => (\"icymi\", &[\"in case you missed it\"]),\n        \"InMyHumbleOpinion\"      => (\"imho\", &[\"in my humble opinion\", \"in my honest opinion\"]),\n        \"InMyOpinion\"            => (\"imo\", &[\"in my opinion\"]),\n        \"InRealLife\"             => (\"irl\", &[\"in real life\"]),\n        \"NeverMind\"              => (\"nvm\", &[\"never mind\"]),\n        \"OhMyGod\"                => (\"omg\", &[\"oh my god\"]),\n        \"PleaseTakeALook\"        => (\"ptal\", &[\"please take a look\"]),\n        \"Really\"                 => (\"rly\", &[\"really\"]),\n        \"TalkToYouLater\"         => (\"ttyl\", &[\"talk to you later\"]),\n        \"ToBeHonest\"             => (\"tbh\", &[\"to be honest\"]),\n    });\n\n    group.set_all_rules_to(Some(true));\n\n    group\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_good_and_bad_suggestions, assert_suggestion_result};\n\n    use super::lint_group;\n\n    #[test]\n    fn corrects_btw() {\n        assert_suggestion_result(\n            \"Btw, are you ready to go shopping soon?\",\n            lint_group(),\n            \"By the way, are you ready to go shopping soon?\",\n        );\n    }\n\n    #[test]\n    fn corrects_style() {\n        assert_suggestion_result(\n            \"I love the fit, btw.\",\n            lint_group(),\n            \"I love the fit, by the way.\",\n        );\n    }\n\n    #[test]\n    fn corrects_fyi() {\n        assert_suggestion_result(\n            \"Fyi, the meeting is at 3.\",\n            lint_group(),\n            \"For your information, the meeting is at 3.\",\n        );\n    }\n\n    #[test]\n    fn corrects_asap() {\n        assert_suggestion_result(\n            \"Please respond asap.\",\n            lint_group(),\n            \"Please respond as soon as possible.\",\n        );\n    }\n\n    #[test]\n    fn corrects_imo() {\n        assert_suggestion_result(\n            \"Imo, that is the best option.\",\n            lint_group(),\n            \"In my opinion, that is the best option.\",\n        );\n    }\n\n    #[test]\n    fn corrects_omg() {\n        assert_suggestion_result(\n            \"Omg! That's incredible!\",\n            lint_group(),\n            \"Oh my god! That's incredible!\",\n        );\n    }\n\n    #[test]\n    fn corrects_brb() {\n        assert_suggestion_result(\"Hold on, brb.\", lint_group(), \"Hold on, be right back.\");\n    }\n\n    #[test]\n    fn corrects_tbh() {\n        assert_suggestion_result(\n            \"Tbh, I'm not impressed.\",\n            lint_group(),\n            \"To be honest, I'm not impressed.\",\n        );\n    }\n\n    #[test]\n    fn corrects_rly() {\n        assert_suggestion_result(\n            \"Rly excited for this.\",\n            lint_group(),\n            \"Really excited for this.\",\n        );\n    }\n\n    #[test]\n    fn issue_2181() {\n        assert_suggestion_result(\n            \"AFAIK, we don't currently have an issue for it.\",\n            lint_group(),\n            \"As far as i know, we don't currently have an issue for it.\",\n        );\n    }\n\n    #[test]\n    fn corrects_eli5() {\n        assert_suggestion_result(\n            \"Can you eli5 how this works?\",\n            lint_group(),\n            \"Can you explain like i'm five how this works?\",\n        );\n    }\n\n    #[test]\n    fn corrects_fwiw() {\n        assert_suggestion_result(\n            \"Fwiw, I think it's a good idea.\",\n            lint_group(),\n            \"For what it's worth, I think it's a good idea.\",\n        );\n    }\n\n    #[test]\n    fn corrects_idk() {\n        assert_suggestion_result(\n            \"Idk if I'll make it to the party.\",\n            lint_group(),\n            \"I don't know if I'll make it to the party.\",\n        );\n    }\n\n    #[test]\n    fn corrects_iirc() {\n        assert_suggestion_result(\n            \"Iirc, the event starts at 6 PM.\",\n            lint_group(),\n            \"If i recall correctly, the event starts at 6 PM.\",\n        );\n    }\n\n    #[test]\n    fn corrects_iykyk() {\n        assert_suggestion_result(\n            \"Iykyk, this place is amazing.\",\n            lint_group(),\n            \"If you know, you know, this place is amazing.\",\n        );\n    }\n\n    #[test]\n    fn corrects_icymi() {\n        assert_suggestion_result(\n            \"Icymi, the deadline is tomorrow.\",\n            lint_group(),\n            \"In case you missed it, the deadline is tomorrow.\",\n        );\n    }\n\n    #[test]\n    fn corrects_irl() {\n        assert_suggestion_result(\n            \"We should meet irl sometime.\",\n            lint_group(),\n            \"We should meet in real life sometime.\",\n        );\n    }\n\n    #[test]\n    fn corrects_ptal() {\n        assert_suggestion_result(\n            \"Ptal at the document I sent.\",\n            lint_group(),\n            \"Please take a look at the document I sent.\",\n        );\n    }\n\n    #[test]\n    fn expands_imho_both_ways() {\n        assert_good_and_bad_suggestions(\n            \"Imho, this is a good idea.\",\n            lint_group(),\n            &[\n                \"In my humble opinion, this is a good idea.\",\n                \"In my honest opinion, this is a good idea.\",\n            ],\n            &[\"In my horrible opinion, this is a good idea.\"],\n        );\n    }\n\n    #[test]\n    fn corrects_iiuc() {\n        assert_suggestion_result(\n            \"iiuc build caching in hol4 works at the file level\",\n            lint_group(),\n            \"if i understand correctly build caching in hol4 works at the file level\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/interested_in.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    CharStringExt, Token, TokenKind,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct InterestedIn {\n    expr: SequenceExpr,\n}\n\nimpl Default for InterestedIn {\n    fn default() -> Self {\n        let pattern = SequenceExpr::default()\n            .t_aco(\"interested\")\n            .t_ws()\n            .then_kind_except(\n                TokenKind::is_preposition,\n                &[\"around\", \"for\", \"through\", \"to\", \"within\"],\n            );\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for InterestedIn {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let prep_span = tokens.last().unwrap().span;\n        let prep_chars = prep_span.get_content(source);\n\n        if prep_chars.eq_ignore_ascii_case_chars(&['i', 'n']) {\n            return None;\n        }\n\n        Some(Lint {\n            span: prep_span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"in\".chars().collect(),\n                prep_chars,\n            )],\n            message: \"The correct preposition to use with `interested` is `in`.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Ensures the correct preposition is used with the word `interested` (e.g. `interested in`).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::InterestedIn;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn fix_about() {\n        assert_suggestion_result(\n            \"It suggests some useful programs the user could be interested about - NyarchLinux/NyarchWizard.\",\n            InterestedIn::default(),\n            \"It suggests some useful programs the user could be interested in - NyarchLinux/NyarchWizard.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_around() {\n        assert_lint_count(\n            \"We want to figure out why this is, and how to keep those interested around for longer.\",\n            InterestedIn::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_at() {\n        assert_suggestion_result(\n            \"If someone is interested at the processed data, please email me.\",\n            InterestedIn::default(),\n            \"If someone is interested in the processed data, please email me.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Requires more context because 'interested for now/for sure' are not errors\"]\n    fn fix_for() {\n        assert_suggestion_result(\n            \"but the user is only interested for the examples in one of the modes\",\n            InterestedIn::default(),\n            \"but the user is only interested in the examples in one of the modes\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_for_sure() {\n        assert_lint_count(\"I am interested for sure!\", InterestedIn::default(), 0);\n    }\n\n    #[test]\n    fn fix_into() {\n        assert_suggestion_result(\n            \"This is one of the first complex software I wrote, and it prefigures so much of the reasons why I was interested into working on designing HTML and CSS.\",\n            InterestedIn::default(),\n            \"This is one of the first complex software I wrote, and it prefigures so much of the reasons why I was interested in working on designing HTML and CSS.\",\n        );\n    }\n\n    #[test]\n    fn fix_of() {\n        assert_suggestion_result(\n            \"If you are interested of tinkering.\",\n            InterestedIn::default(),\n            \"If you are interested in tinkering.\",\n        );\n    }\n\n    #[test]\n    fn fix_on() {\n        assert_suggestion_result(\n            \"The creator of Photopea, a great free alternative to Photoshop, is not interested on making an offline version, so I took it upon myself to make it.\",\n            InterestedIn::default(),\n            \"The creator of Photopea, a great free alternative to Photoshop, is not interested in making an offline version, so I took it upon myself to make it.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_through() {\n        assert_lint_count(\n            \"I'm happy to help walk anyone interested through doing this\",\n            InterestedIn::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_to() {\n        assert_lint_count(\n            \"Hi, As title suggest i am interested to know if we can run a custom model trained on yolov9 inference running on two GPU-s.\",\n            InterestedIn::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_with() {\n        assert_suggestion_result(\n            \"no_std support (is anybody interested with this?)\",\n            InterestedIn::default(),\n            \"no_std support (is anybody interested in this?)\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_within() {\n        assert_lint_count(\n            \"But with no one being interested within 8 months, what help would it be.\",\n            InterestedIn::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/it_is.rs",
    "content": "use crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenKind,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct ItIs {\n    expr: SequenceExpr,\n}\n\nimpl Default for ItIs {\n    fn default() -> Self {\n        let pattern = SequenceExpr::default()\n            .t_aco(\"its\")\n            .then_whitespace()\n            .then_kind_except(\n                TokenKind::is_adjective,\n                &[\n                    \"1st\",\n                    \"animal\",\n                    \"assault\",\n                    \"body\",\n                    \"budget\",\n                    \"business\",\n                    \"center\",\n                    \"centre\",\n                    \"frontline\",\n                    \"head\",\n                    \"key\",\n                    \"mainline\",\n                    \"material\",\n                    \"mean\",\n                    \"own\",\n                    \"power\",\n                    \"regulation\",\n                    \"runtime\",\n                    \"size\",\n                    \"state\",\n                    \"team\",\n                    \"turnover\",\n                    \"utility\",\n                    \"woman\",\n                ],\n            )\n            .then_whitespace()\n            .then_preposition();\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for ItIs {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let its_token = &tokens[0];\n        let span = its_token.span;\n        let text = span.get_content(source);\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"it's\".chars().collect(),\n                text,\n            )],\n            message: \"Consider using 'it's' (it is) instead of 'its' (possessive form).\"\n                .to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects when “its” is used before an adjective + preposition and suggests the contraction “it's”.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ItIs;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn flags_simple_case() {\n        assert_suggestion_result(\n            \"Its amazing to see this.\",\n            ItIs::default(),\n            \"It's amazing to see this.\",\n        );\n    }\n\n    #[test]\n    fn flags_with_preposition() {\n        assert_suggestion_result(\n            \"Its critical for the project.\",\n            ItIs::default(),\n            \"It's critical for the project.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_exception_own() {\n        assert_lint_count(\"Its own design is unique.\", ItIs::default(), 0);\n    }\n\n    #[test]\n    fn does_not_flag_exception_team() {\n        assert_lint_count(\"Its team lead is excellent.\", ItIs::default(), 0);\n    }\n\n    #[test]\n    #[ignore = \"This case fails, but I think that's acceptable\"]\n    fn does_not_flag_non_adjective() {\n        assert_lint_count(\n            \"The cat chased its tail around the room.\",\n            ItIs::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_already_correct() {\n        assert_lint_count(\"It's important to note.\", ItIs::default(), 0);\n    }\n\n    #[test]\n    fn flags_search_filter_context() {\n        assert_suggestion_result(\n            \"Its important to note that the search filter will currently only search the current page.\",\n            ItIs::default(),\n            \"It's important to note that the search filter will currently only search the current page.\",\n        );\n    }\n\n    #[test]\n    fn flags_ens_restart_context() {\n        assert_suggestion_result(\n            \"Today is the third day and I am still stuck on Register. Its important to note that after hours of waiting, I tried to restart the process and clicked on register again but it gets stuck at TX pending.\",\n            ItIs::default(),\n            \"Today is the third day and I am still stuck on Register. It's important to note that after hours of waiting, I tried to restart the process and clicked on register again but it gets stuck at TX pending.\",\n        );\n    }\n\n    #[test]\n    fn flags_academics_support_context() {\n        assert_suggestion_result(\n            \"To assist learners, because its critical for academics to support their ideas and arguments with sources of published research.\",\n            ItIs::default(),\n            \"To assist learners, because it's critical for academics to support their ideas and arguments with sources of published research.\",\n        );\n    }\n\n    #[test]\n    fn flags_parents_explain_context() {\n        assert_suggestion_result(\n            \"I also think its critical for parents to explain their reason for saying no though I would advise against attempting to use logic in the face of either toddler or teenage rage.\",\n            ItIs::default(),\n            \"I also think it's critical for parents to explain their reason for saying no though I would advise against attempting to use logic in the face of either toddler or teenage rage.\",\n        );\n    }\n\n    #[test]\n    fn flags_chapter_context() {\n        assert_suggestion_result(\n            \"I think it's okay since its critical for the rest of the chapter in terms of tone and approach.\",\n            ItIs::default(),\n            \"I think it's okay since it's critical for the rest of the chapter in terms of tone and approach.\",\n        );\n    }\n\n    #[test]\n    fn flags_microsoft_work_context() {\n        assert_suggestion_result(\n            \"... Need help, its critical for my work, as i am a technical blog writer ...\",\n            ItIs::default(),\n            \"... Need help, it's critical for my work, as i am a technical blog writer ...\",\n        );\n    }\n\n    #[test]\n    fn flags_feminists_context() {\n        assert_suggestion_result(\n            \"when it comes to the teaching of grammar and diverse linguistics practices. Its critical for feminists to think about the ways in which they frame language.\",\n            ItIs::default(),\n            \"when it comes to the teaching of grammar and diverse linguistics practices. It's critical for feminists to think about the ways in which they frame language.\",\n        );\n    }\n\n    #[test]\n    fn flags_students_proofreading_context() {\n        assert_suggestion_result(\n            \"its critical for students to develop a similarly sharp eye for misspellings and grammatical errors.\",\n            ItIs::default(),\n            \"it's critical for students to develop a similarly sharp eye for misspellings and grammatical errors.\",\n        );\n    }\n\n    #[test]\n    fn flags_americans_context() {\n        assert_suggestion_result(\n            \"Its critical for Americans to realize that Fox has nothing to do with news.\",\n            ItIs::default(),\n            \"It's critical for Americans to realize that Fox has nothing to do with news.\",\n        );\n    }\n\n    // Negative guard: correct possessive use\n    #[test]\n    fn does_not_flag_its_team_lead() {\n        assert_lint_count(\"Its team lead is excellent.\", ItIs::default(), 0);\n    }\n\n    // Imagined edge cases based on real usage:\n    #[test]\n    fn flags_crucial_api_context() {\n        assert_suggestion_result(\n            \"Its crucial to understand the API before using it.\",\n            ItIs::default(),\n            \"It's crucial to understand the API before using it.\",\n        );\n    }\n\n    #[test]\n    fn flags_essential_standards_context() {\n        assert_suggestion_result(\n            \"Its essential to follow the coding standards in this project.\",\n            ItIs::default(),\n            \"It's essential to follow the coding standards in this project.\",\n        );\n    }\n\n    #[test]\n    fn flags_vital_dependencies_context() {\n        assert_suggestion_result(\n            \"Its vital to keep dependencies up to date.\",\n            ItIs::default(),\n            \"It's vital to keep dependencies up to date.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/it_looks_like_that.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::token_string_ext::TokenStringExt;\n\npub struct ItLooksLikeThat {\n    expr: SequenceExpr,\n}\n\nimpl Default for ItLooksLikeThat {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::fixed_phrase(\"it looks like that\")\n                .then_whitespace()\n                .then_kind_where(|kind| {\n                    // Heuristics on the word after \"that\" which show \"that\" was used\n                    // as a relative pronoun, which is a mistake\n                    let is_subj = kind.is_subject_pronoun();\n                    let is_ing = kind.is_verb_progressive_form();\n                    let is_definitely_rel_pron = is_subj || is_ing;\n\n                    // Heuristics on the word after \"that\" which show \"that\"\n                    // could possibly be a legitimate demonstrative pronoun or determiner\n                    // as a demonstrative pronoun or a determiner\n                    // which would not be a mistake.\n                    let is_v3psgpres = kind.is_verb_third_person_singular_present_form();\n                    // NOTE: we don't have .is_modal_verb() but maybe we need it now!\n                    let is_vmodal_or_aux = kind.is_auxiliary_verb();\n                    let is_vpret = kind.is_verb_simple_past_form();\n                    let is_noun = kind.is_noun();\n                    let is_oov = kind.is_oov();\n\n                    let maybe_demonstrative_or_determiner =\n                        is_v3psgpres || is_vmodal_or_aux || is_vpret || is_noun || is_oov;\n\n                    is_definitely_rel_pron || !maybe_demonstrative_or_determiner\n                }),\n        }\n    }\n}\n\nimpl ExprLinter for ItLooksLikeThat {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], _: &[char]) -> Option<Lint> {\n        let that_span = toks[6..8].span()?;\n\n        Some(Lint {\n            span: that_span,\n            lint_kind: LintKind::Redundancy,\n            suggestions: vec![Suggestion::Remove],\n            message: \"`that` is redundant and ungrammatical here\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `it looks like that` to just `it looks like`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    mod that_noun {\n        use super::super::ItLooksLikeThat;\n        use crate::linting::tests::assert_no_lints;\n\n        #[test]\n        fn dont_flag_that_noun_is_also_verb_part_of_np() {\n            // \"that\" could be legit demonstrative, indicating which 'file tree view'\n            // \"file\" is both a noun and a verb\n            assert_no_lints(\n                \"It looks like that file tree view is just for things that have already been committed?\",\n                ItLooksLikeThat::default(),\n            );\n        }\n        #[test]\n        fn dont_flag_that_noun_is_also_adj() {\n            // \"metric\" is both a noun and an adjective\n            assert_no_lints(\n                \"Yes, unfortunately it looks like that metric kind isn't supported yet.\",\n                ItLooksLikeThat::default(),\n            );\n        }\n        #[test]\n        fn cant_flag_that_noun_is_also_verb_function() {\n            // \"that\" is not demonstrative, but heuristics can't determine that.\n            // \"function\" is both a noun and a verb\n            assert_no_lints(\n                \"It looks like that function Config.validate_doc_path is only called in one place\",\n                ItLooksLikeThat::default(),\n            );\n        }\n        #[test]\n        fn dont_flag_that_noun_is_also_verb_test() {\n            assert_no_lints(\n                \"It looks like that test runs with -sOFFSCREEN_FRAMEBUFFER\",\n                ItLooksLikeThat::default(),\n            );\n        }\n\n        #[test]\n        fn dont_flag_that_oov() {\n            // \"that\" could be legit demonstrative, indicating which 'nms'\n            // because OOV words are most commonly nouns.\n            assert_no_lints(\n                \"It looks like that nms is not working.\",\n                ItLooksLikeThat::default(),\n            );\n        }\n\n        #[test]\n        fn dont_flag_that_noun_pad() {\n            assert_no_lints(\n                \"It looks like that pad was not covered in solder mask or glue\",\n                ItLooksLikeThat::default(),\n            );\n        }\n\n        #[test]\n        fn dont_flag_that_noun_plural() {\n            assert_no_lints(\n                \"The issue we're running into is that it looks like that nodes not only want to peer via raft\",\n                ItLooksLikeThat::default(),\n            );\n        }\n    }\n\n    mod that_det {\n        use super::super::ItLooksLikeThat;\n        use crate::linting::tests::assert_suggestion_result;\n\n        #[test]\n        fn fix_that_the() {\n            // \"that\" is being wrongly used as a relative pronoun\n            assert_suggestion_result(\n                \"it looks like that the original products should have NULL in the value column\",\n                ItLooksLikeThat::default(),\n                \"it looks like the original products should have NULL in the value column\",\n            );\n        }\n\n        #[test]\n        fn fix_that_some() {\n            assert_suggestion_result(\n                \"From first expresion it looks like that some tokkens or what was cached\",\n                ItLooksLikeThat::default(),\n                \"From first expresion it looks like some tokkens or what was cached\",\n            );\n        }\n    }\n\n    mod that_verb {\n        use super::super::ItLooksLikeThat;\n        use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n        #[test]\n        fn dont_flag_that_verb_3p_sing_pres_is() {\n            // \"that\" is definitely legit demonstrative pronoun\n            // Because \"is\" is a linking verb in 3rd person singular present form.\n            assert_no_lints(\n                \"Looking at the code it looks like that is not the case\",\n                ItLooksLikeThat::default(),\n            );\n        }\n\n        #[test]\n        fn dont_flag_that_verb_3p_sing_pres_comes() {\n            assert_no_lints(\n                \"it looks like that comes with additional compile-time dependencies\",\n                ItLooksLikeThat::default(),\n            );\n        }\n\n        #[test]\n        fn fix_that_it_verb_lemma() {\n            // \"that\" is being wrongly used as a relative pronoun\n            // But it's hard to check because 'renovate' is a verb but is being used as a noun\n            assert_suggestion_result(\n                \"It looks like that Renovate decides to not reuse the branch when there are no changes in it\",\n                ItLooksLikeThat::default(),\n                \"It looks like Renovate decides to not reuse the branch when there are no changes in it\",\n            );\n        }\n\n        #[test]\n        fn dont_flag_that_modal_verb_might() {\n            assert_no_lints(\n                \"It looks like that might be exactly what I needed!\",\n                ItLooksLikeThat::default(),\n            );\n        }\n\n        #[test]\n        fn dont_flag_that_verb_modal_would() {\n            assert_no_lints(\n                \"but it looks like that would require writing the data out to vsimem and reading it back\",\n                ItLooksLikeThat::default(),\n            );\n        }\n\n        #[test]\n        fn fix_that_verb_ing_have() {\n            // Verbs in -ing are also gerunds, which are nouns.\n            // But at least in this case, \"having\", it doesn't work after \"that\".\n            assert_suggestion_result(\n                \"It looks like that having <br> tags inside them breaks the rendering\",\n                ItLooksLikeThat::default(),\n                \"It looks like having <br> tags inside them breaks the rendering\",\n            );\n        }\n\n        #[test]\n        fn fix_that_verb_ing_using() {\n            assert_suggestion_result(\n                \"it looks like that using TensorFlow in conjunction with packages that use pybind11_abseil will fail\",\n                ItLooksLikeThat::default(),\n                \"it looks like using TensorFlow in conjunction with packages that use pybind11_abseil will fail\",\n            );\n        }\n\n        #[test]\n        fn dont_flag_that_verb_simple_past() {\n            assert_no_lints(\n                \"but it looks like that got accidentally reverted at some point\",\n                ItLooksLikeThat::default(),\n            );\n        }\n    }\n\n    mod pronoun {\n        use super::super::ItLooksLikeThat;\n        use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n        #[test]\n        fn fix_that_subj_obj_pronoun_it_was() {\n            // \"that\" is being wrongly used as a relative pronoun\n            assert_suggestion_result(\n                \"It looks like that it was not improved a lot.\",\n                ItLooksLikeThat::default(),\n                \"It looks like it was not improved a lot.\",\n            );\n        }\n        #[test]\n        fn fix_that_subj_obj_pronoun_it_works() {\n            // \"that\" is being wrongly used as a relative pronoun\n            assert_suggestion_result(\n                \"Thx, it looks like that it works for Inpainting itself\",\n                ItLooksLikeThat::default(),\n                \"Thx, it looks like it works for Inpainting itself\",\n            );\n        }\n\n        #[test]\n        fn fix_that_subj_obj_pronoun_you() {\n            assert_suggestion_result(\n                \"It looks like that you can't use the files in combination.\",\n                ItLooksLikeThat::default(),\n                \"It looks like you can't use the files in combination.\",\n            );\n        }\n\n        #[test]\n        fn dont_flag_thats() {\n            assert_no_lints(\n                \"it looks like that's how you access the system changeset functionality\",\n                ItLooksLikeThat::default(),\n            );\n        }\n    }\n\n    mod conjunction {\n        use super::super::ItLooksLikeThat;\n        use crate::linting::tests::assert_no_lints;\n\n        #[test]\n        fn cant_flag_that_if() {\n            // This can be read two ways, so we can't flag it\n            assert_no_lints(\n                \"It looks like that if the server goes away in the middle of a request, and a request is cancelled\",\n                ItLooksLikeThat::default(),\n            );\n        }\n\n        #[test]\n        fn cant_flag_that_but() {\n            // This can be read two ways, so we can't flag it\n            assert_no_lints(\n                \"Yes, it looks like that but it is unreasonable since the shim executable is in the same directory\",\n                ItLooksLikeThat::default(),\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/it_would_be.rs",
    "content": "use crate::expr::{Expr, FirstMatchOf, OwnedExprExt, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct ItWouldBe {\n    expr: FirstMatchOf,\n}\n\nimpl Default for ItWouldBe {\n    fn default() -> Self {\n        /* ─────────────── helpers ─────────────── */\n        let head_verbs = WordSet::new(&[\"believe\", \"doubt\", \"think\", \"assume\", \"guess\"]);\n        let modals = WordSet::new(&[\"might\", \"would\", \"will\"]);\n        let adjectives = WordSet::new(&[\"good\", \"bad\", \"wonderful\", \"real\"]);\n        let tail_nouns = WordSet::new(&[\n            \"bummer\",\n            \"pity\",\n            \"shame\",\n            \"pleasure\",\n            \"idea\",\n            \"experience\",\n            \"problem\",\n            \"catastrophe\",\n            \"disaster\",\n            \"trap\",\n            \"challenge\",\n        ]);\n\n        let branch = |has_not: bool, has_adj: bool| {\n            let mut p = SequenceExpr::with(head_verbs.clone())\n                .then_whitespace()\n                .t_aco(\"i\") // the mistaken pronoun\n                .then_whitespace()\n                .then(modals.clone());\n\n            if has_not {\n                p = p.then_whitespace().t_aco(\"not\");\n            }\n\n            p = p.then_whitespace().t_aco(\"be\").then_whitespace().t_aco(\"a\");\n\n            if has_adj {\n                p = p.then_whitespace().then(adjectives.clone());\n            }\n\n            p.then_whitespace().then(tail_nouns.clone())\n        };\n\n        let combined = branch(false, false)\n            .or(branch(false, true))\n            .or(branch(true, false))\n            .or(branch(true, true));\n\n        Self { expr: combined }\n    }\n}\n\nimpl ExprLinter for ItWouldBe {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {\n        let pronoun = &toks[2];\n        let span = pronoun.span;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::ReplaceWith(\"it\".chars().collect())],\n            message: \"In this construction the pronoun should be “it”, not “I”. \\\n                      e.g. *“I think **it** would be a shame …”*\"\n                .to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Replaces the incorrect sequence “I might/would/will (not) be a …” with “it …”, \\\n         as in “I think **it** would be a shame.”\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ItWouldBe;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn flags_simple_shame() {\n        assert_suggestion_result(\n            \"I think I would be a shame if this happened.\",\n            ItWouldBe::default(),\n            \"I think it would be a shame if this happened.\",\n        );\n    }\n\n    #[test]\n    fn flags_believe_bummer() {\n        assert_suggestion_result(\n            \"We believe I might not be a bummer after all.\",\n            ItWouldBe::default(),\n            \"We believe it might not be a bummer after all.\",\n        );\n    }\n\n    #[test]\n    fn flags_doubt_good_idea() {\n        assert_suggestion_result(\n            \"They doubt I will be a good idea for the team.\",\n            ItWouldBe::default(),\n            \"They doubt it will be a good idea for the team.\",\n        );\n    }\n\n    #[test]\n    fn ignores_correct_it() {\n        assert_lint_count(\n            \"I think it would be a shame if this happened.\",\n            ItWouldBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_first_person_statement() {\n        assert_lint_count(\n            \"I would be a good fit for the role.\",\n            ItWouldBe::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/its_contraction/general.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::{\n    Document, Token, TokenStringExt,\n    expr::{All, Expr, ExprExt, OwnedExprExt, SequenceExpr},\n    linting::{Lint, LintKind, Linter, Suggestion},\n    patterns::{NominalPhrase, Pattern, UPOSSet, WordSet},\n};\n\npub struct General {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for General {\n    fn default() -> Self {\n        let positive = SequenceExpr::default().t_aco(\"its\").then_whitespace().then(\n            UPOSSet::new(&[UPOS::VERB, UPOS::AUX, UPOS::DET, UPOS::PRON])\n                .or(WordSet::new(&[\n                    \"anywhere\",\n                    \"everywhere\",\n                    \"somewhere\",\n                    \"nowhere\",\n                ]))\n                .or(WordSet::new(&[\"because\"])),\n        );\n\n        let exceptions = SequenceExpr::anything()\n            .then_anything()\n            .then_word_set(&[\"own\", \"intended\"]);\n\n        let inverted = SequenceExpr::unless(exceptions);\n\n        let expr = All::new(vec![Box::new(positive), Box::new(inverted)]).or_longest(\n            SequenceExpr::aco(\"its\")\n                .t_ws()\n                .then(UPOSSet::new(&[UPOS::ADJ]))\n                .t_ws()\n                .then(UPOSSet::new(&[UPOS::SCONJ, UPOS::PART])),\n        );\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl Linter for General {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n        let source = document.get_source();\n\n        for chunk in document.iter_chunks() {\n            lints.extend(\n                self.expr\n                    .iter_matches(chunk, source)\n                    .filter_map(|match_span| {\n                        self.match_to_lint(&chunk[match_span.start..], source)\n                    }),\n            );\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"Detects the possessive `its` before `had`, `been`, or `got` and offers `it's` or `it has`.\"\n    }\n}\n\nimpl General {\n    fn match_to_lint(&self, toks: &[Token], source: &[char]) -> Option<Lint> {\n        let offender = toks.first()?;\n        let offender_chars = offender.span.get_content(source);\n\n        let modifier = toks.get(2)?;\n        let modifier_text = modifier.span.get_content_string(source);\n        let modifier_lower = modifier_text.to_ascii_lowercase();\n        let next_kind = toks.get(4).map(|tok| tok.kind.clone());\n\n        if preceding_word(source, offender.span.start).as_deref() == Some(\"at\")\n            && matches!(\n                modifier_text.as_str(),\n                \"highest\" | \"lowest\" | \"best\" | \"worst\"\n            )\n        {\n            return None;\n        }\n\n        let exact_contraction_words = [\n            \"anybody\",\n            \"anyone\",\n            \"anything\",\n            \"anywhere\",\n            \"everybody\",\n            \"everyone\",\n            \"everything\",\n            \"everywhere\",\n            \"nobody\",\n            \"nothing\",\n            \"nowhere\",\n            \"somebody\",\n            \"someone\",\n            \"something\",\n            \"somewhere\",\n            \"because\",\n        ];\n\n        let determiner_like_words = [\n            \"a\", \"an\", \"my\", \"your\", \"his\", \"her\", \"our\", \"their\", \"this\", \"that\",\n        ];\n\n        let contraction_adjectives = [\"common\", \"easy\", \"hard\"];\n\n        let strong_predicative_verbs = [\n            \"had\", \"been\", \"got\", \"called\", \"named\", \"known\", \"termed\", \"titled\",\n        ];\n\n        let should_consider = if exact_contraction_words.contains(&modifier_lower.as_str())\n            || determiner_like_words.contains(&modifier_lower.as_str())\n        {\n            true\n        } else if modifier.kind.is_upos(UPOS::ADJ) {\n            contraction_adjectives.contains(&modifier_lower.as_str())\n                && next_kind\n                    .is_some_and(|kind| kind.is_upos(UPOS::SCONJ) || kind.is_upos(UPOS::PART))\n        } else if modifier.kind.is_upos(UPOS::VERB) || modifier.kind.is_upos(UPOS::AUX) {\n            let blocks_contraction = !strong_predicative_verbs.contains(&modifier_lower.as_str())\n                && (next_non_whitespace_word(source, modifier.span.end).is_some_and(|word| {\n                    matches!(\n                        word.as_str(),\n                        \"is\" | \"was\" | \"were\" | \"be\" | \"been\" | \"being\" | \"to\"\n                    )\n                }) || next_kind.is_some_and(|kind| kind.is_noun() || kind.is_proper_noun()));\n\n            !blocks_contraction\n        } else {\n            false\n        };\n\n        if !should_consider {\n            return None;\n        }\n\n        if modifier.kind.is_upos(UPOS::VERB)\n            && NominalPhrase.matches(&toks[2..], source).is_some()\n            && !Self::is_likely_predicative_participle(modifier, source)\n        {\n            return None;\n        }\n\n        // Past-participle modifiers can be tagged as verbs even in possessive noun phrases:\n        // \"its abetted parameter\", \"its associated parameter\", etc.\n        if self.is_possessive_participle_noun_phrase(toks, source) {\n            return None;\n        }\n\n        Some(Lint {\n            span: offender.span,\n            lint_kind: LintKind::Punctuation,\n            suggestions: vec![\n                Suggestion::replace_with_match_case_str(\"it's\", offender_chars),\n                Suggestion::replace_with_match_case_str(\"it has\", offender_chars),\n            ],\n            message: \"Use `it's` (short for `it has` or `it is`) here, not the possessive `its`.\"\n                .to_owned(),\n            priority: 54,\n        })\n    }\n\n    fn is_possessive_participle_noun_phrase(&self, toks: &[Token], source: &[char]) -> bool {\n        let Some(modifier) = toks.get(2) else {\n            return false;\n        };\n        let Some(gap) = toks.get(3) else {\n            return false;\n        };\n        let Some(head) = toks.get(4) else {\n            return false;\n        };\n\n        if !modifier.kind.is_verb_past_participle_form() || !gap.kind.is_whitespace() {\n            return false;\n        }\n\n        if !(head.kind.is_noun() || head.kind.is_proper_noun()) {\n            return false;\n        }\n\n        if Self::is_likely_predicative_participle(modifier, source) {\n            return false;\n        }\n\n        let modifier_text = modifier.span.get_content_string(source);\n\n        ![\"had\", \"been\", \"got\"]\n            .iter()\n            .any(|word| modifier_text.eq_ignore_ascii_case(word))\n    }\n\n    fn is_likely_predicative_participle(tok: &Token, source: &[char]) -> bool {\n        let text = tok.span.get_content_string(source);\n\n        [\"called\", \"named\", \"known\", \"termed\", \"titled\"]\n            .iter()\n            .any(|word| text.eq_ignore_ascii_case(word))\n    }\n}\n\nfn preceding_word(source: &[char], offset: usize) -> Option<String> {\n    let prefix = source.get(..offset)?;\n    let mut i = prefix.len().checked_sub(1)?;\n\n    while prefix[i].is_whitespace() {\n        i = i.checked_sub(1)?;\n    }\n\n    let start = prefix[..=i]\n        .iter()\n        .rposition(|c| c.is_whitespace())\n        .map(|pos| pos + 1)\n        .unwrap_or(0);\n\n    Some(\n        prefix[start..=i]\n            .iter()\n            .collect::<String>()\n            .to_ascii_lowercase(),\n    )\n}\n\nfn next_non_whitespace_word(source: &[char], offset: usize) -> Option<String> {\n    let suffix = source.get(offset..)?;\n    let mut iter = suffix\n        .iter()\n        .enumerate()\n        .skip_while(|(_, c)| c.is_whitespace());\n    let start = iter.next()?.0;\n    let end = suffix[start..]\n        .iter()\n        .position(|c| c.is_whitespace() || c.is_ascii_punctuation())\n        .map(|len| start + len)\n        .unwrap_or(suffix.len());\n\n    Some(\n        suffix[start..end]\n            .iter()\n            .collect::<String>()\n            .to_ascii_lowercase(),\n    )\n}\n"
  },
  {
    "path": "harper-core/src/linting/its_contraction/mod.rs",
    "content": "use super::merge_linters::merge_linters;\n\nmod general;\nmod proper_noun;\n\nuse general::General;\nuse proper_noun::ProperNoun;\n\nmerge_linters!(\n    ItsContraction => General, ProperNoun =>\n    \"Detects places where the possessive `its` should be the contraction `it's`, including before verbs/clauses and before proper nouns after opinion verbs.\"\n);\n\n#[cfg(test)]\nmod tests {\n    use super::ItsContraction;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fix_had() {\n        assert_suggestion_result(\n            \"Its had an enormous effect.\",\n            ItsContraction::default(),\n            \"It's had an enormous effect.\",\n        );\n    }\n\n    #[test]\n    fn fix_been() {\n        assert_suggestion_result(\n            \"Its been months since we spoke.\",\n            ItsContraction::default(),\n            \"It's been months since we spoke.\",\n        );\n    }\n\n    #[test]\n    fn fix_got() {\n        assert_suggestion_result(\n            \"I think its got nothing to do with us.\",\n            ItsContraction::default(),\n            \"I think it's got nothing to do with us.\",\n        );\n    }\n\n    #[test]\n    fn fixes_its_common() {\n        assert_suggestion_result(\n            \"Its common for users to get frustrated.\",\n            ItsContraction::default(),\n            \"It's common for users to get frustrated.\",\n        );\n    }\n\n    #[test]\n    fn ignore_correct_contraction() {\n        assert_lint_count(\n            \"It's been a long year for everyone.\",\n            ItsContraction::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignore_possessive() {\n        assert_lint_count(\n            \"The company revised its policies last week.\",\n            ItsContraction::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignore_coroutine() {\n        assert_lint_count(\n            \"Launch each task within its own child coroutine.\",\n            ItsContraction::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn issue_381() {\n        assert_suggestion_result(\n            \"Its a nice day.\",\n            ItsContraction::default(),\n            \"It's a nice day.\",\n        );\n    }\n\n    #[test]\n    fn ignore_nominal_progressive() {\n        assert_lint_count(\n            \"The class preserves its existing properties.\",\n            ItsContraction::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"past participles are not always adjectives ('cared' for instance)\"]\n    fn ignore_nominal_perfect() {\n        assert_lint_count(\n            \"The robot followed its predetermined route.\",\n            ItsContraction::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignore_nominal_long() {\n        assert_lint_count(\n            \"I think of its exploding marvelous spectacular output.\",\n            ItsContraction::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_because() {\n        assert_suggestion_result(\n            \"Its because they don't want to.\",\n            ItsContraction::default(),\n            \"It's because they don't want to.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_hard() {\n        assert_suggestion_result(\n            \"Its hard to believe that.\",\n            ItsContraction::default(),\n            \"It's hard to believe that.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_easy() {\n        assert_suggestion_result(\n            \"Its easy if you try.\",\n            ItsContraction::default(),\n            \"It's easy if you try.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_a_picnic() {\n        assert_suggestion_result(\n            \"Its a beautiful day for a picnic\",\n            ItsContraction::default(),\n            \"It's a beautiful day for a picnic\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_my() {\n        assert_suggestion_result(\n            \"Its my favorite song.\",\n            ItsContraction::default(),\n            \"It's my favorite song.\",\n        );\n    }\n\n    #[test]\n    fn allows_its_new() {\n        assert_no_lints(\n            \"The company announced its new product line. \",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_own_charm() {\n        assert_no_lints(\"The house has its own charm. \", ItsContraction::default());\n    }\n\n    #[test]\n    fn allows_its_victory() {\n        assert_no_lints(\n            \"The team celebrated its victory. \",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_history() {\n        assert_no_lints(\n            \"The country is proud of its history. \",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_secrets() {\n        assert_no_lints(\n            \"The book contains its own secrets. \",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn corrects_think_google() {\n        assert_suggestion_result(\n            \"I think its Google, not Microsoft.\",\n            ItsContraction::default(),\n            \"I think it's Google, not Microsoft.\",\n        );\n    }\n\n    #[test]\n    fn corrects_hope_katie() {\n        assert_suggestion_result(\n            \"I hope its Katie.\",\n            ItsContraction::default(),\n            \"I hope it's Katie.\",\n        );\n    }\n\n    #[test]\n    fn corrects_guess_date() {\n        assert_suggestion_result(\n            \"I guess its March 6.\",\n            ItsContraction::default(),\n            \"I guess it's March 6.\",\n        );\n    }\n\n    #[test]\n    fn corrects_assume_john() {\n        assert_suggestion_result(\n            \"We assume its John.\",\n            ItsContraction::default(),\n            \"We assume it's John.\",\n        );\n    }\n\n    #[test]\n    fn corrects_doubt_tesla() {\n        assert_suggestion_result(\n            \"They doubt its Tesla this year.\",\n            ItsContraction::default(),\n            \"They doubt it's Tesla this year.\",\n        );\n    }\n\n    #[test]\n    fn handles_two_word_name() {\n        assert_suggestion_result(\n            \"She thinks its New York.\",\n            ItsContraction::default(),\n            \"She thinks it's New York.\",\n        );\n    }\n\n    #[test]\n    fn ignores_existing_contraction() {\n        assert_lint_count(\"I think it's Google.\", ItsContraction::default(), 0);\n    }\n\n    #[test]\n    fn ignores_possessive_noun_after_name() {\n        assert_lint_count(\n            \"I think its Google product launch.\",\n            ItsContraction::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_without_opinion_verb() {\n        assert_lint_count(\n            \"Its Google Pixel lineup is impressive.\",\n            ItsContraction::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_common_noun_target() {\n        assert_lint_count(\n            \"We hope its accuracy improves.\",\n            ItsContraction::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn issue_2547() {\n        assert_no_lints(\n            \"using the foo feature and its associated parameter\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn ignore_past_participle_noun_phrase() {\n        assert_no_lints(\n            \"using the foo feature and its abetted parameter\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn corrects_predicative_called() {\n        assert_suggestion_result(\n            \"Its called recursion.\",\n            ItsContraction::default(),\n            \"It's called recursion.\",\n        );\n    }\n\n    #[test]\n    fn corrects_predicative_named() {\n        assert_suggestion_result(\n            \"Its named Manhattan.\",\n            ItsContraction::default(),\n            \"It's named Manhattan.\",\n        );\n    }\n\n    #[test]\n    fn allows_possessive_generated_code() {\n        assert_no_lints(\n            \"The compiler emits its generated code.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn corrects_its_anybody() {\n        assert_suggestion_result(\n            \"Its anybody who volunteers should speak up.\",\n            ItsContraction::default(),\n            \"It's anybody who volunteers should speak up.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_anyone() {\n        assert_suggestion_result(\n            \"Its anyone you ping will be looped in automatically.\",\n            ItsContraction::default(),\n            \"It's anyone you ping will be looped in automatically.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_everyone() {\n        assert_suggestion_result(\n            \"Its everyone on the thread noticed the spike.\",\n            ItsContraction::default(),\n            \"It's everyone on the thread noticed the spike.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_everything() {\n        assert_suggestion_result(\n            \"Its everything we collect ends up in the archive.\",\n            ItsContraction::default(),\n            \"It's everything we collect ends up in the archive.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_somebody() {\n        assert_suggestion_result(\n            \"Its somebody on call right now.\",\n            ItsContraction::default(),\n            \"It's somebody on call right now.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_somewhere() {\n        assert_suggestion_result(\n            \"Its somewhere safe to stash the nightly dump.\",\n            ItsContraction::default(),\n            \"It's somewhere safe to stash the nightly dump.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_nobody() {\n        assert_suggestion_result(\n            \"Its nobody left who can approve this.\",\n            ItsContraction::default(),\n            \"It's nobody left who can approve this.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_anywhere() {\n        assert_suggestion_result(\n            \"Its anywhere the monitors blink red.\",\n            ItsContraction::default(),\n            \"It's anywhere the monitors blink red.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_anything() {\n        assert_suggestion_result(\n            \"Its anything worth keeping should be archived.\",\n            ItsContraction::default(),\n            \"It's anything worth keeping should be archived.\",\n        );\n    }\n\n    #[test]\n    fn corrects_its_something() {\n        assert_suggestion_result(\n            \"Its something that keeps restarting the job.\",\n            ItsContraction::default(),\n            \"It's something that keeps restarting the job.\",\n        );\n    }\n\n    #[test]\n    fn allows_its_tail() {\n        assert_no_lints(\n            \"Its tail twitches every time I call it.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_release_pipeline() {\n        assert_no_lints(\n            \"Its release pipeline is stable in production.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_nodes() {\n        assert_no_lints(\n            \"The cluster updates its nodes nightly.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_cover_page() {\n        assert_no_lints(\n            \"Its cover page mentions all contributors.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_not_anybody() {\n        assert_no_lints(\n            \"Its not anybody to blame despite the outage.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_never_anywhere() {\n        assert_no_lints(\n            \"Its never anywhere near the ideal timing we hoped for.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_at_its_highest() {\n        assert_no_lints(\n            \"Curiosity about Gatsby was at its highest that night.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_pull_is() {\n        assert_no_lints(\n            \"The Earth is huge, so its pull is super strong.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_unforeseen_consequences() {\n        assert_no_lints(\n            \"The experiment continued despite its unforeseen consequences.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_potential_to_benefit() {\n        assert_no_lints(\n            \"The proposal emphasized its potential to benefit local businesses.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_cover_was() {\n        assert_no_lints(\n            \"Its cover was intricately engraved with floral patterns.\",\n            ItsContraction::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_starting_level() {\n        assert_no_lints(\n            \"Reduce the tracker to its starting level.\",\n            ItsContraction::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/its_contraction/proper_noun.rs",
    "content": "use std::ops::Range;\n\nuse harper_brill::UPOS;\n\nuse crate::{\n    Document, Token, TokenStringExt,\n    expr::{ExprExt, ExprMap, OwnedExprExt, SequenceExpr},\n    linting::{Lint, LintKind, Linter, Suggestion},\n    patterns::{DerivedFrom, UPOSSet},\n};\n\npub struct ProperNoun {\n    expr: ExprMap<Range<usize>>,\n}\n\nimpl Default for ProperNoun {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        let opinion_verbs = DerivedFrom::new_from_str(\"think\")\n            .or(DerivedFrom::new_from_str(\"hope\"))\n            .or(DerivedFrom::new_from_str(\"assume\"))\n            .or(DerivedFrom::new_from_str(\"doubt\"))\n            .or(DerivedFrom::new_from_str(\"guess\"));\n\n        let capitalized_word = |tok: &Token, src: &[char]| {\n            tok.kind.is_word()\n                && tok\n                    .span\n                    .get_content(src)\n                    .first()\n                    .map(|c| c.is_uppercase())\n                    .unwrap_or(false)\n        };\n\n        let name_head = UPOSSet::new(&[UPOS::PROPN]).or(capitalized_word);\n\n        let lookahead_word = SequenceExpr::default().t_ws().then_any_word();\n\n        map.insert(\n            SequenceExpr::with(opinion_verbs)\n                .t_ws()\n                .t_aco(\"its\")\n                .t_ws()\n                .then(name_head)\n                .then_optional(lookahead_word),\n            2..3,\n        );\n\n        Self { expr: map }\n    }\n}\n\nimpl Linter for ProperNoun {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n        let source = document.get_source();\n\n        for chunk in document.iter_chunks() {\n            lints.extend(\n                self.expr\n                    .iter_matches(chunk, source)\n                    .filter_map(|match_span| {\n                        let matched = &chunk[match_span.start..match_span.end];\n                        self.match_to_lint(matched, source)\n                    }),\n            );\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"Suggests the contraction `it's` after opinion verbs when it introduces a proper noun.\"\n    }\n}\n\nimpl ProperNoun {\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        if matched_tokens.len() >= 7\n            && let Some(next_word) = matched_tokens.get(6)\n        {\n            let is_lowercase = next_word\n                .span\n                .get_content(source)\n                .first()\n                .map(|c| c.is_lowercase())\n                .unwrap_or(false);\n\n            if is_lowercase\n                && (next_word.kind.is_upos(UPOS::NOUN) || next_word.kind.is_upos(UPOS::ADJ))\n            {\n                return None;\n            }\n        }\n\n        let range = self.expr.lookup(0, matched_tokens, source)?.clone();\n        let offending = matched_tokens.get(range.start)?;\n        let offender_text = offending.span.get_content(source);\n\n        Some(Lint {\n            span: offending.span,\n            lint_kind: LintKind::Punctuation,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"it's\",\n                offender_text,\n            )],\n            message: \"Use `it's` (short for \\\"it is\\\") before a proper noun in this construction.\"\n                .to_owned(),\n            priority: 31,\n        })\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/its_possessive.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::Token;\nuse crate::expr::AnchorStart;\nuse crate::expr::Expr;\nuse crate::expr::ExprMap;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::patterns::UPOSSet;\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ItsPossessive {\n    expr: ExprMap<usize>,\n}\n\nimpl Default for ItsPossessive {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        let adj_term_mid_sentence = SequenceExpr::default()\n            .t_ws()\n            .then(UPOSSet::new(&[UPOS::ADJ]));\n\n        let mid_sentence = SequenceExpr::with(UPOSSet::new(&[UPOS::VERB, UPOS::ADP]))\n            .t_ws()\n            .t_aco(\"it's\")\n            .then_optional(adj_term_mid_sentence)\n            .t_ws()\n            .then(\n                UPOSSet::new(&[UPOS::NOUN, UPOS::PROPN]).or(|tok: &Token, _: &[char]| {\n                    tok.kind.as_number().is_some_and(|n| n.suffix.is_some())\n                }),\n            );\n\n        map.insert(mid_sentence, 2);\n\n        let start_of_sentence_noun = SequenceExpr::with(AnchorStart)\n            .t_aco(\"it's\")\n            .t_ws()\n            .then(\n                UPOSSet::new(&[UPOS::NOUN, UPOS::PROPN]).or(|tok: &Token, _: &[char]| {\n                    tok.kind.as_number().is_some_and(|n| n.suffix.is_some())\n                }),\n            )\n            .then_unless(SequenceExpr::default().t_ws().then(UPOSSet::new(&[\n                UPOS::VERB,\n                UPOS::PART,\n                UPOS::ADP,\n                UPOS::NOUN,\n                UPOS::PRON,\n                UPOS::SCONJ,\n                UPOS::CCONJ,\n                UPOS::ADV,\n            ])));\n\n        map.insert(start_of_sentence_noun, 0);\n\n        let start_of_sentence_noun_subject = SequenceExpr::with(AnchorStart)\n            .t_aco(\"it's\")\n            .t_ws()\n            .then(\n                UPOSSet::new(&[UPOS::NOUN, UPOS::PROPN]).or(|tok: &Token, _: &[char]| {\n                    tok.kind.as_number().is_some_and(|n| n.suffix.is_some())\n                        || ((tok.kind.is_noun() || tok.kind.is_proper_noun())\n                            && !tok.kind.is_adjective()\n                            && !tok.kind.is_adverb())\n                }),\n            )\n            .t_ws()\n            .then(UPOSSet::new(&[UPOS::VERB, UPOS::AUX]));\n\n        map.insert(start_of_sentence_noun_subject, 0);\n\n        let start_of_sentence_adjective = SequenceExpr::with(AnchorStart)\n            .t_aco(\"it's\")\n            .t_ws()\n            .then(UPOSSet::new(&[UPOS::ADJ]))\n            .t_ws()\n            .then_unless(UPOSSet::new(&[\n                UPOS::VERB,\n                UPOS::PART,\n                UPOS::ADP,\n                UPOS::NOUN,\n                UPOS::PRON,\n                UPOS::SCONJ,\n                UPOS::CCONJ,\n                UPOS::ADV,\n            ]));\n\n        map.insert(start_of_sentence_adjective, 0);\n\n        let start_of_chunk_after_conjunction = SequenceExpr::with(AnchorStart)\n            .then(UPOSSet::new(&[UPOS::CCONJ]))\n            .t_ws()\n            .t_aco(\"it's\")\n            .t_ws()\n            .then(\n                UPOSSet::new(&[UPOS::NOUN, UPOS::PROPN]).or(|tok: &Token, _: &[char]| {\n                    tok.kind.as_number().is_some_and(|n| n.suffix.is_some())\n                }),\n            )\n            .then_unless(SequenceExpr::default().t_ws().then(UPOSSet::new(&[\n                UPOS::VERB,\n                UPOS::PART,\n                UPOS::ADP,\n                UPOS::NOUN,\n                UPOS::PRON,\n                UPOS::SCONJ,\n                UPOS::CCONJ,\n                UPOS::ADV,\n            ])));\n\n        map.insert(start_of_chunk_after_conjunction, 2);\n\n        let special = SequenceExpr::aco(\"it's\").t_ws().t_aco(\"various\");\n\n        map.insert(special, 0);\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for ItsPossessive {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offending_idx = self.expr.lookup(0, matched_tokens, source).unwrap();\n        let span = matched_tokens[*offending_idx].span;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Agreement,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"its\",\n                span.get_content(source),\n            )],\n            message: \"Use the possessive pronoun `its` (without an apostrophe) to show ownership. The word `it's` (with an apostrophe) is a contraction of 'it is' or 'it has' and should not be used to indicate possession.\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"In English, possessive pronouns never take an apostrophe. Use `its` to show ownership (e.g. “its texture”) and avoid confusing it with `it's`, which always means “it is” or “it has.”\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    use super::ItsPossessive;\n\n    #[test]\n    fn corrects_its_various() {\n        assert_suggestion_result(\n            \"I like it's various colors.\",\n            ItsPossessive::default(),\n            \"I like its various colors.\",\n        );\n    }\n\n    #[test]\n    fn fixes_inspiration() {\n        assert_suggestion_result(\n            \"I would just put `Orthography` and it's various function implementations in their own `orthography.rs` file.\",\n            ItsPossessive::default(),\n            \"I would just put `Orthography` and its various function implementations in their own `orthography.rs` file.\",\n        );\n    }\n\n    #[test]\n    fn engine_lost_its_compression() {\n        assert_lint_count(\n            \"The engine lost it's compression.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn admired_sculpture_for_its_intricacy() {\n        assert_suggestion_result(\n            \"I admired the sculpture for it's intricacy.\",\n            ItsPossessive::default(),\n            \"I admired the sculpture for its intricacy.\",\n        );\n    }\n\n    #[test]\n    fn paris_is_known_for_its_architecture() {\n        assert_lint_count(\n            \"Paris is known for it's architecture.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn plain_sentence_with_apostrophe_s() {\n        assert_suggestion_result(\n            \"It's benefits are numerous.\",\n            ItsPossessive::default(),\n            \"Its benefits are numerous.\",\n        );\n    }\n\n    #[test]\n    fn fixes_its_ancestor() {\n        assert_suggestion_result(\n            \"It's ancestor is still around.\",\n            ItsPossessive::default(),\n            \"Its ancestor is still around.\",\n        );\n    }\n\n    #[test]\n    fn device_reached_its_100th_cycle() {\n        assert_lint_count(\n            \"The device reached it's 100th cycle.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn oddly_its_wheels_misaligned() {\n        assert_lint_count(\n            \"Oddly, it's wheels were misaligned.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn leaking_oil_constant_issue() {\n        assert_lint_count(\"It's leaking oil constantly.\", ItsPossessive::default(), 0);\n    }\n\n    #[test]\n    fn fiftyth_anniversary() {\n        assert_lint_count(\n            \"The company celebrated it's 50th anniversary.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn second_attempt() {\n        assert_lint_count(\"He failed it's 2nd attempt.\", ItsPossessive::default(), 1);\n    }\n\n    #[test]\n    fn third_iteration() {\n        assert_lint_count(\n            \"The program finished it's 3rd iteration.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn tenth_milestone() {\n        assert_lint_count(\n            \"They reached it's 10th milestone.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn seventh_chapter() {\n        assert_lint_count(\n            \"The novel lost it's 7th chapter.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn fifth_version() {\n        assert_lint_count(\n            \"Software updated to it's 5th version.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn eighth_floor() {\n        assert_lint_count(\n            \"Elevator stopped at it's 8th floor.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn twelfth_episode() {\n        assert_lint_count(\n            \"Series ended it's 12th episode.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn fourth_draft() {\n        assert_lint_count(\"He completed it's 4th draft.\", ItsPossessive::default(), 1);\n    }\n\n    #[test]\n    fn ninth_revision() {\n        assert_lint_count(\n            \"The report saved it's 9th revision.\",\n            ItsPossessive::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn allows_hard_to_tell() {\n        assert_no_lints(\"It's hard to tell from here.\", ItsPossessive::default());\n    }\n\n    #[test]\n    fn allows_illegible() {\n        assert_no_lints(\n            \"When you write in cursive, its illegible\",\n            ItsPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn allows_good_practice() {\n        assert_no_lints(\n            \"it's good practice to review the general settings\",\n            ItsPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn allows_understandable() {\n        assert_no_lints(\n            \"It's understandable that you'd feel the weight of responsibility.\",\n            ItsPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn allows_insincere() {\n        assert_no_lints(\n            \"But feel free to omit it if you feel it's insincere.\",\n            ItsPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn allows_its_possible() {\n        assert_no_lints(\n            \"It's possible that a record was improperly handled. \",\n            ItsPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn allows_many_times_harder() {\n        assert_no_lints(\n            \"It's many times harder to do this than that.\",\n            ItsPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn allow_issue_1658() {\n        assert_no_lints(\n            \"It's kind of a nuisance, but it will work.\",\n            ItsPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn allow_issue_2001() {\n        assert_no_lints(\n            \"It's worth highlighting that while using a fork instead of a spoon is easy, it sometimes isn't.\",\n            ItsPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_issue_1722_its_whats_accessible() {\n        assert_no_lints(\n            \"The base execution context is the global execution context: it's what's accessible everywhere in your code.\",\n            ItsPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_issue_1722_its_early_and() {\n        assert_no_lints(\n            \"it's early and there's plenty of room for novel and potentially\",\n            ItsPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_issue_1722_its_big_enough() {\n        assert_no_lints(\"It's big enough.\", ItsPossessive::default());\n    }\n\n    #[test]\n    fn allows_its_awesome() {\n        assert_no_lints(\"It's awesome.\", ItsPossessive::default());\n    }\n\n    #[test]\n    fn flags_all_its_possessive_in_list() {\n        assert_lint_count(\n            \"Understand it's code, it's values, and it's purpose.\",\n            ItsPossessive::default(),\n            3,\n        );\n    }\n\n    #[test]\n    fn fixes_all_its_possessive_in_list() {\n        assert_suggestion_result(\n            \"Understand it's code, it's values, and it's purpose.\",\n            ItsPossessive::default(),\n            \"Understand its code, its values, and its purpose.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/jealous_of.rs",
    "content": "use crate::{\n    Token,\n    expr::{Expr, SequenceExpr},\n    linting::expr_linter::Chunk,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct JealousOf {\n    expr: SequenceExpr,\n}\n\nimpl Default for JealousOf {\n    fn default() -> Self {\n        let valid_object = |tok: &Token, _source: &[char]| {\n            (tok.kind.is_nominal() || !tok.kind.is_verb())\n                && (tok.kind.is_oov() || tok.kind.is_nominal())\n                && !tok.kind.is_preposition()\n        };\n\n        let pattern = SequenceExpr::default()\n            .t_aco(\"jealous\")\n            .t_ws()\n            .t_aco(\"from\")\n            .t_ws()\n            .then_optional(SequenceExpr::default().then_determiner().t_ws())\n            .then(valid_object);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for JealousOf {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let from_token = &tokens[2];\n\n        Some(Lint {\n            span: from_token.span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"of\",\n                from_token.span.get_content(source),\n            )],\n            message: \"Use `of` after `jealous`.\".to_owned(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Encourages the standard preposition after `jealous`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::JealousOf;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn replaces_basic_from() {\n        assert_suggestion_result(\n            \"She was jealous from her sister's success.\",\n            JealousOf::default(),\n            \"She was jealous of her sister's success.\",\n        );\n    }\n\n    #[test]\n    fn handles_optional_determiner() {\n        assert_suggestion_result(\n            \"He grew jealous from the attention.\",\n            JealousOf::default(),\n            \"He grew jealous of the attention.\",\n        );\n    }\n\n    #[test]\n    fn fixes_pronoun_object() {\n        assert_suggestion_result(\n            \"They became jealous from him.\",\n            JealousOf::default(),\n            \"They became jealous of him.\",\n        );\n    }\n\n    #[test]\n    fn allows_oov_target() {\n        assert_suggestion_result(\n            \"I'm jealous from Zybrix.\",\n            JealousOf::default(),\n            \"I'm jealous of Zybrix.\",\n        );\n    }\n\n    #[test]\n    fn corrects_uppercase_preposition() {\n        assert_suggestion_result(\n            \"Jealous FROM his fame.\",\n            JealousOf::default(),\n            \"Jealous OF his fame.\",\n        );\n    }\n\n    #[test]\n    fn fixes_longer_phrase() {\n        assert_suggestion_result(\n            \"They felt jealous from the sudden praise she received.\",\n            JealousOf::default(),\n            \"They felt jealous of the sudden praise she received.\",\n        );\n    }\n\n    #[test]\n    fn fixes_minimal_phrase() {\n        assert_suggestion_result(\n            \"jealous from success\",\n            JealousOf::default(),\n            \"jealous of success\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_correct_usage() {\n        assert_lint_count(\n            \"She was jealous of her sister's success.\",\n            JealousOf::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_other_preposition_sequence() {\n        assert_lint_count(\n            \"They stayed jealous from within the fortress.\",\n            JealousOf::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fixes_following_gerund() {\n        assert_suggestion_result(\n            \"He was jealous from being ignored.\",\n            JealousOf::default(),\n            \"He was jealous of being ignored.\",\n        );\n    }\n\n    #[test]\n    fn ignores_numbers_after_from() {\n        assert_lint_count(\n            \"She remained jealous from 2010 through 2015.\",\n            JealousOf::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/johns_hopkins.rs",
    "content": "use crate::{\n    CharStringExt, Token,\n    expr::{Expr, SequenceExpr},\n    linting::expr_linter::Chunk,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct JohnsHopkins {\n    expr: SequenceExpr,\n}\n\nimpl Default for JohnsHopkins {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(|tok: &Token, src: &[char]| {\n            tok.kind.is_proper_noun() && tok.span.get_content(src).eq_ignore_ascii_case_str(\"john\")\n        })\n        .t_ws()\n        .then(|tok: &Token, src: &[char]| {\n            tok.kind.is_proper_noun()\n                && tok\n                    .span\n                    .get_content(src)\n                    .eq_ignore_ascii_case_str(\"hopkins\")\n        });\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for JohnsHopkins {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.first()?.span;\n        let template = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\"Johns\", template)],\n            message: \"Use `Johns Hopkins` for this name.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Recommends the proper spelling `Johns Hopkins`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::JohnsHopkins;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_university_reference() {\n        assert_suggestion_result(\n            \"I applied to John Hopkins University last fall.\",\n            JohnsHopkins::default(),\n            \"I applied to Johns Hopkins University last fall.\",\n        );\n    }\n\n    #[test]\n    fn corrects_hospital_reference() {\n        assert_suggestion_result(\n            \"She works at the John Hopkins hospital.\",\n            JohnsHopkins::default(),\n            \"She works at the Johns Hopkins hospital.\",\n        );\n    }\n\n    #[test]\n    fn corrects_standalone_name() {\n        assert_suggestion_result(\n            \"We toured John Hopkins yesterday.\",\n            JohnsHopkins::default(),\n            \"We toured Johns Hopkins yesterday.\",\n        );\n    }\n\n    #[test]\n    fn corrects_lowercase_usage() {\n        assert_suggestion_result(\n            \"I studied at john hopkins online.\",\n            JohnsHopkins::default(),\n            \"I studied at johns hopkins online.\",\n        );\n    }\n\n    #[test]\n    fn corrects_across_newline_whitespace() {\n        assert_suggestion_result(\n            \"We met at John\\nHopkins for lunch.\",\n            JohnsHopkins::default(),\n            \"We met at Johns\\nHopkins for lunch.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_trailing_punctuation() {\n        assert_suggestion_result(\n            \"I toured John Hopkins, and it was great.\",\n            JohnsHopkins::default(),\n            \"I toured Johns Hopkins, and it was great.\",\n        );\n    }\n\n    #[test]\n    fn corrects_before_hyphenated_unit() {\n        assert_suggestion_result(\n            \"She joined the John Hopkins-affiliated lab.\",\n            JohnsHopkins::default(),\n            \"She joined the Johns Hopkins-affiliated lab.\",\n        );\n    }\n\n    #[test]\n    fn allows_correct_spelling() {\n        assert_lint_count(\n            \"Johns Hopkins University has a great program.\",\n            JohnsHopkins::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_apostrophized_form() {\n        assert_lint_count(\n            \"John Hopkins's novel won awards.\",\n            JohnsHopkins::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_reversed_name_order() {\n        assert_lint_count(\"Hopkins, John is a contact.\", JohnsHopkins::default(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/lead_rise_to.rs",
    "content": "use crate::{\n    Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct LeadRiseTo {\n    expr: SequenceExpr,\n}\n\nimpl Default for LeadRiseTo {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"lead\", \"led\", \"leads\", \"leading\"])\n                .t_ws()\n                .t_aco(\"rise\")\n                .t_ws()\n                .t_aco(\"to\"),\n        }\n    }\n}\n\nimpl ExprLinter for LeadRiseTo {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects `leads rise to` to `gives rise to`.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let ltok = toks.first()?;\n        let lspan = ltok.span;\n        let lchars = lspan.get_content(src);\n\n        const GAVE: &[char] = &['g', 'a', 'v', 'e'];\n        const GIVE: &[char] = &['g', 'i', 'v', 'e'];\n        const GIVEN: &[char] = &['g', 'i', 'v', 'e', 'n'];\n        const GIVES: &[char] = &['g', 'i', 'v', 'e', 's'];\n        const GIVING: &[char] = &['g', 'i', 'v', 'i', 'n', 'g'];\n\n        const GAVE_GIVEN: &[&[char]] = &[GAVE, GIVEN];\n        const GIVE_GAVE_GIVEN: &[&[char]] = &[GIVE, GAVE, GIVEN];\n\n        let gchars: &[&[char]] = match lchars {\n            ['l', 'e', 'a', 'd'] => GIVE_GAVE_GIVEN,\n            ['l', 'e', 'd'] => GAVE_GIVEN,\n            ['l', 'e', 'a', 'd', 's'] => &[GIVES][..],\n            ['l', 'e', 'a', 'd', 'i', 'n', 'g'] => &[GIVING][..],\n            _ => return None,\n        };\n\n        let suggestions: Vec<Suggestion> = gchars\n            .iter()\n            .map(|l| Suggestion::replace_with_match_case(l.to_vec(), lspan.get_content(src)))\n            .collect();\n\n        Some(Lint {\n            span: lspan,\n            lint_kind: LintKind::Usage,\n            suggestions,\n            message: \"The correct idiom is `give rise to`.\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::LeadRiseTo;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn fix_led_simple_past() {\n        assert_suggestion_result(\n            \"In this way, it led rise to a kind of monotheism in Egypt.\",\n            LeadRiseTo::default(),\n            \"In this way, it gave rise to a kind of monotheism in Egypt.\",\n        );\n    }\n\n    #[test]\n    fn fix_led_past_participle() {\n        assert_suggestion_result(\n            \"This had led rise to some issues, such as #2777 and some over Slack\",\n            LeadRiseTo::default(),\n            \"This had given rise to some issues, such as #2777 and some over Slack\",\n        );\n    }\n\n    #[test]\n    fn fix_lead_spello_for_led() {\n        assert_suggestion_result(\n            \"This lead rise to a fair number of complaints over image quality which were not down to RPT.\",\n            LeadRiseTo::default(),\n            \"This gave rise to a fair number of complaints over image quality which were not down to RPT.\",\n        );\n    }\n\n    #[test]\n    fn fix_lead_not_spello() {\n        assert_suggestion_result(\n            \"Philosophy is important because it raises the questions that lead rise to the sciences.\",\n            LeadRiseTo::default(),\n            \"Philosophy is important because it raises the questions that give rise to the sciences.\",\n        );\n    }\n\n    #[test]\n    fn fix_leads() {\n        assert_suggestion_result(\n            \"This leads rise to another question of mine\",\n            LeadRiseTo::default(),\n            \"This gives rise to another question of mine\",\n        );\n    }\n\n    #[test]\n    fn fix_leading() {\n        assert_suggestion_result(\n            \"The severe bushfires have also created their own weather, leading rise to a phenomenon known as pyrocumulonimbus (pyroCB) storms.\",\n            LeadRiseTo::default(),\n            \"The severe bushfires have also created their own weather, giving rise to a phenomenon known as pyrocumulonimbus (pyroCB) storms.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/left_right_hand.rs",
    "content": "use crate::Token;\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct LeftRightHand {\n    expr: SequenceExpr,\n}\n\nimpl Default for LeftRightHand {\n    fn default() -> Self {\n        let pattern = SequenceExpr::word_set(&[\"left\", \"right\"])\n            .then_whitespace()\n            .t_aco(\"hand\")\n            .then_whitespace()\n            .then_noun();\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for LeftRightHand {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> Option<Lint> {\n        let space = &matched_tokens[1];\n\n        Some(Lint {\n            span: space.span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::ReplaceWith(vec!['-'])],\n            message: \"Use a hyphen in `left-hand` or `right-hand` when modifying a noun.\"\n                .to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Ensures `left hand` and `right hand` are hyphenated when used as adjectives before a noun, such as in `left-hand side` or `right-hand corner`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::LeftRightHand;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn corrects_left_hand_side() {\n        assert_suggestion_result(\n            \"You'll see it on the left hand side.\",\n            LeftRightHand::default(),\n            \"You'll see it on the left-hand side.\",\n        );\n    }\n\n    #[test]\n    fn corrects_right_hand_corner() {\n        assert_suggestion_result(\n            \"It's in the right hand corner.\",\n            LeftRightHand::default(),\n            \"It's in the right-hand corner.\",\n        );\n    }\n\n    #[test]\n    fn does_not_correct_noun_usage() {\n        assert_suggestion_result(\n            \"She raised her right hand.\",\n            LeftRightHand::default(),\n            \"She raised her right hand.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/less_worse.rs",
    "content": "use crate::expr::{Expr, SequenceExpr};\nuse crate::{CharStringExt, Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct LessWorse {\n    expr: SequenceExpr,\n}\n\nimpl Default for LessWorse {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"less\", \"least\"])\n                .t_ws_h()\n                .then_word_set(&[\"worse\", \"worst\"]),\n        }\n    }\n}\n\nimpl ExprLinter for LessWorse {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        if toks.len() != 3 {\n            return None;\n        }\n\n        let span = toks.span()?;\n\n        let how_little = toks[0].span.get_content(src).to_lower();\n        let space_or_hyphen = &toks[1];\n        let how_bad = toks[2].span.get_content(src).to_lower();\n\n        let (suggestions, message): (&[&[char]], &str) = match (\n            how_little.as_ref(),\n            space_or_hyphen.kind.is_hyphen(),\n            how_bad.as_ref(),\n        ) {\n            // \"Least worst\": Not standard or grammatical but idiomatic and popular.\n            (['l', 'e', 'a', 's', 't'], false, ['w', 'o', 'r', 's', 't']) => (\n                &[&['l', 'e', 'a', 's', 't', ' ', 'b', 'a', 'd']],\n                \"Though `least worst` is a common idiom, `least bad` is the standard way to compare bad options.\",\n            ),\n            // \"Least-worst\": As above but also the hyphen is incorrect.\n            (['l', 'e', 'a', 's', 't'], true, ['w', 'o', 'r', 's', 't']) => (\n                &[\n                    &['l', 'e', 'a', 's', 't', ' ', 'w', 'o', 'r', 's', 't'],\n                    &['l', 'e', 'a', 's', 't', ' ', 'b', 'a', 'd'],\n                ],\n                \"`Least worst` (without the hyphen) is a common idiom, but `least bad` is the standard way to compare bad options.\",\n            ),\n            // About 1/3 as common as \"least worst\" so less acceptable as an idiom.\n            (['l', 'e', 's', 's'], _, ['w', 'o', 'r', 's', 'e']) => (\n                &[&['l', 'e', 's', 's', ' ', 'b', 'a', 'd']],\n                \"The standard way to compare bad options is `less bad`.\",\n            ),\n            // Ambiguous. Is it supposed to be comparative or superlative?\n            (['l', 'e', 's', 's'], _, ['w', 'o', 'r', 's', 't']) => (\n                &[\n                    &['l', 'e', 's', 's', ' ', 'b', 'a', 'd'],\n                    &['l', 'e', 'a', 's', 't', ' ', 'b', 'a', 'd'],\n                ],\n                \"These words conflict with each other. Choose `less bad` or `least bad`.\",\n            ),\n            // Ambiguous. Probably a non-native speaker that means \"least worst\", but offer all three options.\n            (['l', 'e', 'a', 's', 't'], _, ['w', 'o', 'r', 's', 'e']) => (\n                &[\n                    &['l', 'e', 'a', 's', 't', ' ', 'w', 'o', 'r', 's', 't'],\n                    &['l', 'e', 'a', 's', 't', ' ', 'b', 'a', 'd'],\n                    &['l', 'e', 's', 's', ' ', 'b', 'a', 'd'],\n                ],\n                \"These words conflict with each other. Choose `less bad` or `least bad` for more standard English, or `least worst` for more idiomatic English.\",\n            ),\n            _ => return None,\n        };\n\n        let template = span.get_content(src);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: suggestions\n                .iter()\n                .map(|s| Suggestion::replace_with_match_case(s.to_vec(), template))\n                .collect::<Vec<_>>(),\n            message: message.to_string(),\n            priority: 126,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Suggests alternatives to `less/least worse/worst` for more standard, clearer comparisons.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_good_and_bad_suggestions, assert_suggestion_result};\n\n    use super::LessWorse;\n\n    #[test]\n    fn correct_least_worse() {\n        assert_good_and_bad_suggestions(\n            \"Maybe downstream packaging folks could advice what would be least worse option.\",\n            LessWorse::default(),\n            &[\n                \"Maybe downstream packaging folks could advice what would be least worst option.\",\n                \"Maybe downstream packaging folks could advice what would be least bad option.\",\n                \"Maybe downstream packaging folks could advice what would be less bad option.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_least_worst_hyphen() {\n        assert_good_and_bad_suggestions(\n            \"async-dropper is probably the least-worst ad-hoc AsyncDrop implementation you've seen.\",\n            LessWorse::default(),\n            &[\n                \"async-dropper is probably the least worst ad-hoc AsyncDrop implementation you've seen.\",\n                \"async-dropper is probably the least bad ad-hoc AsyncDrop implementation you've seen.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_less_worse() {\n        assert_suggestion_result(\n            \"Professionally I've convinced the team at @Roave to pay me for making their PHP code marginally less worse.\",\n            LessWorse::default(),\n            \"Professionally I've convinced the team at @Roave to pay me for making their PHP code marginally less bad.\",\n        );\n    }\n\n    #[test]\n    fn correct_less_worst() {\n        assert_good_and_bad_suggestions(\n            \"May be the less worst choice for some little playlists.\",\n            LessWorse::default(),\n            &[\n                \"May be the less bad choice for some little playlists.\",\n                \"May be the least bad choice for some little playlists.\",\n            ],\n            &[],\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/let_to_do.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::{LintKind, Suggestion};\nuse crate::token_string_ext::TokenStringExt;\n\nuse super::{ExprLinter, Lint};\nuse crate::linting::expr_linter::Chunk;\n\npub struct LetToDo {\n    expr: SequenceExpr,\n}\n\nimpl Default for LetToDo {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"let\", \"lets\", \"let's\"])\n                .t_ws()\n                .then_any_of(vec![\n                    Box::new(SequenceExpr::default().then_object_pronoun()),\n                    Box::new(SequenceExpr::word_set(&[\n                        // Elective existential indefinite pronouns\n                        \"anybody\",\n                        \"anyone\",\n                        // Universal indefinite pronouns\n                        \"everybody\",\n                        \"everyone\",\n                        // Negative indefinite pronouns (correct)\n                        \"nobody\",\n                        // Negative indefinite pronouns (incorrect)\n                        \"noone\",\n                        // Assertive existential indefinite pronouns\n                        \"somebody\",\n                        \"someone\",\n                    ])),\n                    Box::new(\n                        SequenceExpr::word_set(&[\"any\", \"every\", \"no\", \"some\"])\n                            .t_ws()\n                            .then_word_set(&[\"body\", \"one\"]),\n                    ),\n                ])\n                .t_ws()\n                .t_aco(\"to\"),\n        }\n    }\n}\n\nimpl ExprLinter for LetToDo {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {\n        Some(Lint {\n            span: toks[toks.len() - 2..].span()?,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::Remove],\n            message: \"The word `to` should not be used with `let` in this way.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects extraneous `to` after `let`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::LetToDo;\n    use crate::linting::tests::assert_suggestion_result;\n\n    // let\n\n    #[test]\n    fn let_me_to() {\n        assert_suggestion_result(\n            \"Let me to decide show player controls or not\",\n            LetToDo::default(),\n            \"Let me decide show player controls or not\",\n        );\n    }\n\n    #[test]\n    fn let_you_to() {\n        assert_suggestion_result(\n            \"Azure provider does not let you to ask for approval\",\n            LetToDo::default(),\n            \"Azure provider does not let you ask for approval\",\n        );\n    }\n\n    #[test]\n    fn let_us_to() {\n        assert_suggestion_result(\n            \"Currently JavaScript syntax does not let us to pick one or more properties from an object\",\n            LetToDo::default(),\n            \"Currently JavaScript syntax does not let us pick one or more properties from an object\",\n        );\n    }\n\n    #[test]\n    fn let_it_to() {\n        assert_suggestion_result(\n            \"I modified the load_checkpoints and let it to only load the autoencoder's checkpoint.\",\n            LetToDo::default(),\n            \"I modified the load_checkpoints and let it only load the autoencoder's checkpoint.\",\n        );\n    }\n\n    #[test]\n    fn let_him_to() {\n        assert_suggestion_result(\n            \"let him to delete the information he wrote\",\n            LetToDo::default(),\n            \"let him delete the information he wrote\",\n        );\n    }\n\n    #[test]\n    fn let_anybody_to() {\n        assert_suggestion_result(\n            \"but at least will not let anybody to sub from tls as far as i understood this properly\",\n            LetToDo::default(),\n            \"but at least will not let anybody sub from tls as far as i understood this properly\",\n        );\n    }\n\n    #[test]\n    fn let_anyone_to() {\n        assert_suggestion_result(\n            \"How would you let anyone to help you?\",\n            LetToDo::default(),\n            \"How would you let anyone help you?\",\n        );\n    }\n\n    #[test]\n    fn let_any_one_to() {\n        assert_suggestion_result(\n            \"set up a mcp server to let any one to query how to use the api in the repo\",\n            LetToDo::default(),\n            \"set up a mcp server to let any one query how to use the api in the repo\",\n        );\n    }\n\n    #[test]\n    fn let_everybody_to() {\n        assert_suggestion_result(\n            \"on a project that let everybody to create things\",\n            LetToDo::default(),\n            \"on a project that let everybody create things\",\n        );\n    }\n\n    #[test]\n    fn let_everyone_to() {\n        assert_suggestion_result(\n            \"We want to let everyone to be able to select between the servers we have right now\",\n            LetToDo::default(),\n            \"We want to let everyone be able to select between the servers we have right now\",\n        );\n    }\n\n    #[test]\n    fn let_every_one_to() {\n        assert_suggestion_result(\n            \"you SHOULDN'T DO THIS because you let every one to upload an executable\",\n            LetToDo::default(),\n            \"you SHOULDN'T DO THIS because you let every one upload an executable\",\n        );\n    }\n\n    #[test]\n    fn let_nobody_to() {\n        assert_suggestion_result(\n            \"i wouldn't let nobody to snoop on user's data\",\n            LetToDo::default(),\n            \"i wouldn't let nobody snoop on user's data\",\n        );\n    }\n\n    #[test]\n    fn let_no_one_to() {\n        assert_suggestion_result(\n            \"hide video download link in wordpress - let no one to see video download link\",\n            LetToDo::default(),\n            \"hide video download link in wordpress - let no one see video download link\",\n        );\n    }\n\n    #[test]\n    fn let_somebody_to() {\n        assert_suggestion_result(\n            \"So it should be the same let somebody to make required for reviewers.\",\n            LetToDo::default(),\n            \"So it should be the same let somebody make required for reviewers.\",\n        );\n    }\n\n    #[test]\n    fn let_some_one_to() {\n        assert_suggestion_result(\n            \"let some one to help me who can do it\",\n            LetToDo::default(),\n            \"let some one help me who can do it\",\n        );\n    }\n\n    // lets\n\n    #[test]\n    fn lets_me_to() {\n        assert_suggestion_result(\n            \"Also, clicking on the gear lets me to put login credentials\",\n            LetToDo::default(),\n            \"Also, clicking on the gear lets me put login credentials\",\n        );\n    }\n\n    #[test]\n    fn lets_you_to() {\n        assert_suggestion_result(\n            \"A chrome extension which lets you to create your own customised text snippets and use in your browser.\",\n            LetToDo::default(),\n            \"A chrome extension which lets you create your own customised text snippets and use in your browser.\",\n        );\n    }\n\n    #[test]\n    fn lets_us_to() {\n        assert_suggestion_result(\n            \"A menu which lets us to get money\",\n            LetToDo::default(),\n            \"A menu which lets us get money\",\n        );\n    }\n\n    #[test]\n    fn lets_anyone_to() {\n        assert_suggestion_result(\n            \"fake ssh server that lets anyone to connect and monitor their activty\",\n            LetToDo::default(),\n            \"fake ssh server that lets anyone connect and monitor their activty\",\n        );\n    }\n\n    #[test]\n    fn lets_everybody_to() {\n        assert_suggestion_result(\n            \"Use set.seed function which lets everybody to check your result on their computers.\",\n            LetToDo::default(),\n            \"Use set.seed function which lets everybody check your result on their computers.\",\n        );\n    }\n\n    #[test]\n    fn lets_everyone_to() {\n        assert_suggestion_result(\n            \"what lets everyone to know what to expect\",\n            LetToDo::default(),\n            \"what lets everyone know what to expect\",\n        );\n    }\n\n    #[test]\n    fn lets_someone_to() {\n        assert_suggestion_result(\n            \"it works correctly and lets someone to connect using telnet\",\n            LetToDo::default(),\n            \"it works correctly and lets someone connect using telnet\",\n        );\n    }\n\n    // erroneous let's\n\n    #[test]\n    fn lets_me_to_apostrophe() {\n        assert_suggestion_result(\n            \"I need be able to clone receiver, which crossbeam let's me to do.\",\n            LetToDo::default(),\n            \"I need be able to clone receiver, which crossbeam let's me do.\",\n        );\n    }\n\n    #[test]\n    fn lets_us_to_apostrophe() {\n        assert_suggestion_result(\n            \"this option let's us to cut the whole project in smaller pieces, like time based sprites.\",\n            LetToDo::default(),\n            \"this option let's us cut the whole project in smaller pieces, like time based sprites.\",\n        );\n    }\n\n    #[test]\n    fn lets_you_to_apostrophe() {\n        assert_suggestion_result(\n            \"Let's you to migrate/transfer save files from older outward versions to outward definitive edition.\",\n            LetToDo::default(),\n            \"Let's you migrate/transfer save files from older outward versions to outward definitive edition.\",\n        );\n    }\n\n    #[test]\n    fn lets_him_to_apostrophe() {\n        assert_suggestion_result(\n            \"A good woman gives wings to a man and let's him to take on the whole world\",\n            LetToDo::default(),\n            \"A good woman gives wings to a man and let's him take on the whole world\",\n        );\n    }\n\n    #[test]\n    fn lets_her_to_apostrophe() {\n        assert_suggestion_result(\n            \"if Igor let's her to be with Wonder she would crush everyone\",\n            LetToDo::default(),\n            \"if Igor let's her be with Wonder she would crush everyone\",\n        );\n    }\n\n    #[test]\n    fn lets_it_to_apostrophe() {\n        assert_suggestion_result(\n            \"It's as accurate as your GPS let's it to be.\",\n            LetToDo::default(),\n            \"It's as accurate as your GPS let's it be.\",\n        );\n    }\n\n    #[test]\n    fn lets_them_to_apostrophe() {\n        assert_suggestion_result(\n            \"it does not cut the dataset into 2 separate subsets in each step but let's them to get predictions from both branches\",\n            LetToDo::default(),\n            \"it does not cut the dataset into 2 separate subsets in each step but let's them get predictions from both branches\",\n        );\n    }\n\n    #[test]\n    fn lets_anyone_to_apostrophe() {\n        assert_suggestion_result(\n            \"It let's anyone to discover, take, or even teach a class.\",\n            LetToDo::default(),\n            \"It let's anyone discover, take, or even teach a class.\",\n        );\n    }\n\n    #[test]\n    fn lets_any_one_to_apostrophe() {\n        assert_suggestion_result(\n            \"Whyyyy hashmeet let's any one to create their own tinder like swipe clubs or groups?\",\n            LetToDo::default(),\n            \"Whyyyy hashmeet let's any one create their own tinder like swipe clubs or groups?\",\n        );\n    }\n\n    #[test]\n    fn lets_everyone_to_apostrophe() {\n        assert_suggestion_result(\n            \"How do you feel that America let's everyone to have guns\",\n            LetToDo::default(),\n            \"How do you feel that America let's everyone have guns\",\n        );\n    }\n\n    #[test]\n    fn lets_someone_to_apostrophe() {\n        assert_suggestion_result(\n            \"Commands and attributes let's someone to compare it with other TRV\",\n            LetToDo::default(),\n            \"Commands and attributes let's someone compare it with other TRV\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/lets_confusion/let_us_redundancy.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt};\n\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\n\n/// See also:\n/// harper-core/src/linting/compound_nouns/implied_ownership_compound_nouns.rs\n/// harper-core/src/linting/lets_confusion/mod.rs\n/// harper-core/src/linting/lets_confusion/no_contraction_with_verb.rs\n/// harper-core/src/linting/pronoun_contraction/should_contract.rs\npub struct LetUsRedundancy {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for LetUsRedundancy {\n    fn default() -> Self {\n        let pattern = SequenceExpr::aco(\"let's\").then_whitespace().then_pronoun();\n\n        Self {\n            expr: Box::new(pattern),\n        }\n    }\n}\n\nimpl ExprLinter for LetUsRedundancy {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let template = matched_tokens.span()?.get_content(source);\n        let pronoun = matched_tokens.last()?.span.get_content_string(source);\n\n        Some(Lint {\n            span: matched_tokens.span()?,\n            lint_kind: LintKind::Repetition,\n            suggestions: vec![\n                Suggestion::replace_with_match_case(\n                    format!(\"lets {pronoun}\").chars().collect(),\n                    template,\n                ),\n                Suggestion::replace_with_match_case(\n                    \"let's\".to_string().chars().collect(),\n                    template,\n                ),\n            ],\n            message: \"`let's` stands for `let us`, so including another pronoun is redundant.\"\n                .to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Many are not aware that the contraction `let's` is short for `let us`. As a result, many will incorrectly use it before a pronoun, such as in the phrase `let's us do`.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/lets_confusion/mod.rs",
    "content": "mod let_us_redundancy;\nmod no_contraction_with_verb;\n\nuse super::merge_linters::merge_linters;\nuse let_us_redundancy::LetUsRedundancy;\nuse no_contraction_with_verb::NoContractionWithVerb;\n\n// See also:\n// harper-core/src/linting/compound_nouns/implied_ownership_compound_nouns.rs\n// harper-core/src/linting/lets_confusion/let_us_redundancy.rs\n// harper-core/src/linting/lets_confusion/no_contraction_with_verb.rs\n// harper-core/src/linting/pronoun_contraction/should_contract.rs\nmerge_linters!(LetsConfusion => LetUsRedundancy, NoContractionWithVerb => \"It's often hard to determine where the subject should go with the word `let`. This rule attempts to find common errors with redundancy and contractions that may lead to confusion for readers.\");\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::LetsConfusion;\n\n    #[test]\n    fn walking() {\n        assert_suggestion_result(\n            \"The crutch let's him walk.\",\n            LetsConfusion::default(),\n            \"The crutch lets him walk.\",\n        );\n    }\n\n    #[test]\n    fn issue_426_us() {\n        assert_suggestion_result(\"let's us do\", LetsConfusion::default(), \"lets us do\");\n    }\n\n    #[test]\n    fn issue_426_me() {\n        assert_suggestion_result(\"let's me do\", LetsConfusion::default(), \"lets me do\");\n    }\n\n    #[test]\n    fn from_harper_docs() {\n        assert_suggestion_result(\n            \"Often the longest and the shortest words are the most helpful, so lets push them first.\",\n            LetsConfusion::default(),\n            \"Often the longest and the shortest words are the most helpful, so let's push them first.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"\\\"play\\\" is also a noun so in a context like \\\"Sometimes the umpire lets play continue\\\"\"]\n    fn issue_470_missing_apostrophe_play() {\n        assert_suggestion_result(\"lets play\", LetsConfusion::default(), \"let's play\");\n    }\n\n    #[test]\n    #[ignore]\n    fn issue_470_missing_subject_play() {\n        assert_suggestion_result(\"let play\", LetsConfusion::default(), \"let's play\");\n    }\n\n    #[test]\n    fn issue_470_missing_apostrophe_proceed() {\n        assert_suggestion_result(\"lets proceed\", LetsConfusion::default(), \"let's proceed\");\n    }\n\n    #[test]\n    fn issue_470_missing_subject_proceed() {\n        assert_suggestion_result(\"let proceed\", LetsConfusion::default(), \"let's proceed\");\n    }\n\n    #[test]\n    fn issue_548() {\n        assert_lint_count(\n            \"A simple web app that lets you fetch random issues.\",\n            LetsConfusion::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/lets_confusion/no_contraction_with_verb.rs",
    "content": "use crate::TokenKind;\nuse crate::expr::Expr;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::{\n    Token,\n    linting::{Lint, LintKind, Suggestion},\n};\n\nuse crate::linting::ExprLinter;\nuse crate::linting::expr_linter::Chunk;\n\n/// See also:\n/// harper-core/src/linting/compound_nouns/implied_ownership_compound_nouns.rs\n/// harper-core/src/linting/lets_confusion/mod.rs\n/// harper-core/src/linting/lets_confusion/let_us_redundancy.rs\n/// harper-core/src/linting/pronoun_contraction/should_contract.rs\npub struct NoContractionWithVerb {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for NoContractionWithVerb {\n    fn default() -> Self {\n        // Only tests \"let\".\n        let let_ws = SequenceExpr::word_set(&[\"lets\", \"let\"]).then_whitespace();\n\n        let non_ing_verb = SequenceExpr::default().then_kind_is_but_isnt_any_of(\n            TokenKind::is_verb,\n            &[\n                TokenKind::is_noun,\n                TokenKind::is_adjective,\n                TokenKind::is_verb_progressive_form,\n            ] as &[_],\n        );\n\n        // Ambiguous word is a verb determined by heuristic of following word's part of speech\n        // Tests the next two words after \"let\".\n        let verb_due_to_following_pos = SequenceExpr::default()\n            .then_verb()\n            .then_whitespace()\n            .then_kind_any(&[\n                TokenKind::is_determiner,\n                TokenKind::is_pronoun,\n                TokenKind::is_conjunction,\n            ] as &[_]);\n\n        let let_then_verb = let_ws.then(LongestMatchOf::new(vec![\n            Box::new(non_ing_verb),\n            Box::new(verb_due_to_following_pos),\n        ]));\n\n        Self {\n            expr: Box::new(let_then_verb),\n        }\n    }\n}\n\nimpl ExprLinter for NoContractionWithVerb {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let (let_string, verb_string) = (\n            matched_tokens[0].span.get_content_string(source),\n            matched_tokens[2].span.get_content_string(source),\n        );\n\n        // \"to let go\" is a phrasal verb but \"lets go\" is quite a common mistake for \"let's go\"\n        if let_string == \"let\" && verb_string == \"go\" {\n            return None;\n        }\n\n        let problem_span = matched_tokens.first()?.span;\n        let template = problem_span.get_content(source);\n\n        Some(Lint {\n            span: problem_span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![\n                Suggestion::replace_with_match_case_str(\"let's\", template),\n                Suggestion::replace_with_match_case_str(\"let us\", template),\n            ],\n            message: \"To suggest an action, use 'let's' or 'let us'.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Checks for `lets` meaning `permits` when the context is about suggesting an action.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::NoContractionWithVerb;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    // Correct unambiguous verb\n\n    #[test]\n    fn fix_lets_inspect() {\n        assert_suggestion_result(\n            \"In the end lets inspect with git-blame the results.\",\n            NoContractionWithVerb::default(),\n            \"In the end let's inspect with git-blame the results.\",\n        );\n    }\n\n    // False positives where verb is also a noun\n\n    #[test]\n    fn dont_flag_let_chance() {\n        assert_lint_count(\"Let chance decide\", NoContractionWithVerb::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_let_time() {\n        assert_lint_count(\n            \"Let time granularity be parametrized\",\n            NoContractionWithVerb::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_lets_staff() {\n        assert_lint_count(\n            \"A plugin that backs up player's inventories and lets staff restore them or export it as a shulker.\",\n            NoContractionWithVerb::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_lets_time() {\n        assert_lint_count(\n            \"This is very different than demo recording, which just simulates a network level connection and lets time move at its own rate.\",\n            NoContractionWithVerb::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_lets_play() {\n        assert_lint_count(\n            \"Sometimes the umpire lets play continue\",\n            NoContractionWithVerb::default(),\n            0,\n        );\n    }\n\n    // False positives where verb is a gerund/past participle\n\n    #[test]\n    fn dont_flag_let_sleeping() {\n        assert_lint_count(\n            \"Let sleeping logs lie.\",\n            NoContractionWithVerb::default(),\n            0,\n        );\n    }\n\n    // False positives where verb is also an adjective\n\n    #[test]\n    fn dont_flag_let_processed() {\n        assert_lint_count(\n            \"Let processed response be a new structure analogous to server auction response.\",\n            NoContractionWithVerb::default(),\n            0,\n        );\n    }\n\n    // Correct disambiguated noun/verb by following determiner\n\n    #[test]\n    fn corrects_lets_make_this() {\n        assert_suggestion_result(\n            \"Lets make this joke repo into one of the best.\",\n            NoContractionWithVerb::default(),\n            \"Let's make this joke repo into one of the best.\",\n        );\n    }\n\n    // Correct disambiguated verb by following pronoun\n\n    #[test]\n    fn corrects_lets_mock_them() {\n        assert_suggestion_result(\n            \"Then lets mock them using Module._load based mocker.\",\n            NoContractionWithVerb::default(),\n            \"Then let's mock them using Module._load based mocker.\",\n        );\n    }\n\n    // False positives / edge cases filed on GitHub\n\n    #[test]\n    fn dont_flag_let_us() {\n        assert_lint_count(\"Let us do this.\", NoContractionWithVerb::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_let_go_1202() {\n        assert_lint_count(\n            \"... until you hit your opponent, then let go and quickly retap\",\n            NoContractionWithVerb::default(),\n            0,\n        );\n    }\n\n    // False positive wrongly flagged by previous version of this linter\n\n    #[test]\n    fn dont_flag_let_in_and() {\n        assert_lint_count(\n            \"Japanese is good enough to be let in and.\",\n            NoContractionWithVerb::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/likewise.rs",
    "content": "use crate::expr::All;\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct Likewise {\n    expr: All,\n}\nimpl Default for Likewise {\n    fn default() -> Self {\n        let mut expr = All::default();\n\n        expr.add(SequenceExpr::aco(\"like\").then_whitespace().t_aco(\"wise\"));\n        expr.add(SequenceExpr::unless(\n            SequenceExpr::anything()\n                .then_whitespace()\n                .then_anything()\n                .then_whitespace()\n                .then_noun(),\n        ));\n\n        Self { expr }\n    }\n}\nimpl ExprLinter for Likewise {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let orig_chars = span.get_content(source);\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"likewise\".chars().collect(),\n                orig_chars,\n            )],\n            message: format!(\"Did you mean the closed compound `{}`?\", \"likewise\"),\n            ..Default::default()\n        })\n    }\n    fn description(&self) -> &'static str {\n        \"Looks for incorrect spacing inside the closed compound `likewise`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::Likewise;\n\n    #[test]\n    fn wise_men() {\n        assert_suggestion_result(\n            \"Like wise men, we waited.\",\n            Likewise::default(),\n            \"Like wise men, we waited.\",\n        );\n    }\n\n    #[test]\n    fn like_wise() {\n        assert_suggestion_result(\n            \"He acted, like wise, without hesitation.\",\n            Likewise::default(),\n            \"He acted, likewise, without hesitation.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/lint.rs",
    "content": "use std::hash::{DefaultHasher, Hash, Hasher};\n\nuse serde::{Deserialize, Serialize};\n\nuse crate::{Span, render_markdown::render_markdown};\n\nuse super::{LintKind, Suggestion};\n\n/// An error found in text.\n#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Hash)]\npub struct Lint {\n    /// The location in the source text the error lies.\n    /// Important for automatic lint resolution through [`Self::suggestions`].\n    pub span: Span<char>,\n    /// The general category the lint belongs to.\n    /// Mostly used for UI elements in integrations.\n    pub lint_kind: LintKind,\n    /// A list of zero or more suggested edits that would resolve the underlying problem.\n    /// See [`Suggestion`].\n    pub suggestions: Vec<Suggestion>,\n    /// A message to be displayed to the user describing the specific error found.\n    ///\n    /// You may use the [`format`] macro to generate more complex messages.\n    pub message: String,\n    /// A numerical value for the importance of a lint.\n    /// Lower = more important.\n    pub priority: u8,\n}\n\nimpl Lint {\n    /// Creates a SHA-3 hash of all elements of the lint, sans [`Self::span`].\n    /// This is useful for comparing lints while ignoring their position within the document.\n    ///\n    /// Do not assume that these hash values are stable across Harper versions.\n    pub fn spanless_hash(&self) -> u64 {\n        let mut hasher = DefaultHasher::new();\n\n        self.lint_kind.hash(&mut hasher);\n        self.suggestions.hash(&mut hasher);\n        self.message.hash(&mut hasher);\n        self.priority.hash(&mut hasher);\n\n        hasher.finish()\n    }\n\n    /// Interpret the message as Markdown and render it to HTML.\n    pub fn message_html(&self) -> String {\n        render_markdown(&self.message)\n    }\n}\n\nimpl Default for Lint {\n    fn default() -> Self {\n        Self {\n            span: Default::default(),\n            lint_kind: Default::default(),\n            suggestions: Default::default(),\n            message: Default::default(),\n            priority: 127,\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/lint_group.rs",
    "content": "use std::collections::BTreeMap;\nuse std::hash::Hash;\nuse std::hash::{BuildHasher, Hasher};\nuse std::mem;\nuse std::num::NonZero;\nuse std::sync::Arc;\n\nuse cached::proc_macro::cached;\nuse foldhash::quality::RandomState;\nuse hashbrown::HashMap;\nuse lru::LruCache;\nuse serde::{Deserialize, Deserializer, Serialize, Serializer};\n\nuse super::a_part::APart;\nuse super::a_while::AWhile;\nuse super::addicting::Addicting;\nuse super::adjective_double_degree::AdjectiveDoubleDegree;\nuse super::adjective_of_a::AdjectiveOfA;\nuse super::after_later::AfterLater;\nuse super::all_hell_break_loose::AllHellBreakLoose;\nuse super::all_intents_and_purposes::AllIntentsAndPurposes;\nuse super::allow_to::AllowTo;\nuse super::am_in_the_morning::AmInTheMorning;\nuse super::amounts_for::AmountsFor;\nuse super::an_a::AnA;\nuse super::and_in::AndIn;\nuse super::and_the_like::AndTheLike;\nuse super::another_thing_coming::AnotherThingComing;\nuse super::another_think_coming::AnotherThinkComing;\nuse super::apart_from::ApartFrom;\nuse super::ask_no_preposition::AskNoPreposition;\nuse super::avoid_curses::AvoidCurses;\nuse super::back_in_the_day::BackInTheDay;\nuse super::be_allowed::BeAllowed;\nuse super::be_worried::BeWorried;\nuse super::behind_the_scenes::BehindTheScenes;\nuse super::best_of_all_time::BestOfAllTime;\nuse super::boring_words::BoringWords;\nuse super::bought::Bought;\nuse super::brand_brandish::BrandBrandish;\nuse super::by_accident::ByAccident;\nuse super::cant::Cant;\nuse super::capitalize_personal_pronouns::CapitalizePersonalPronouns;\nuse super::cautionary_tale::CautionaryTale;\nuse super::change_tack::ChangeTack;\nuse super::chock_full::ChockFull;\nuse super::comma_fixes::CommaFixes;\nuse super::compound_nouns::CompoundNouns;\nuse super::compound_subject_i::CompoundSubjectI;\nuse super::confident::Confident;\nuse super::correct_number_suffix::CorrectNumberSuffix;\nuse super::criteria_phenomena::CriteriaPhenomena;\nuse super::cure_for::CureFor;\nuse super::currency_placement::CurrencyPlacement;\nuse super::damages::Damages;\nuse super::day_and_age::DayAndAge;\nuse super::despite_it_is::DespiteItIs;\nuse super::despite_of::DespiteOf;\nuse super::did_past::DidPast;\nuse super::didnt::Didnt;\nuse super::discourse_markers::DiscourseMarkers;\nuse super::disjoint_prefixes::DisjointPrefixes;\nuse super::do_mistake::DoMistake;\nuse super::dot_initialisms::DotInitialisms;\nuse super::double_click::DoubleClick;\nuse super::double_modal::DoubleModal;\nuse super::ellipsis_length::EllipsisLength;\nuse super::else_possessive::ElsePossessive;\nuse super::ever_every::EverEvery;\nuse super::everyday::Everyday;\nuse super::expand_memory_shorthands::ExpandMemoryShorthands;\nuse super::expand_time_shorthands::ExpandTimeShorthands;\nuse super::expr_linter::run_on_chunk;\nuse super::far_be_it::FarBeIt;\nuse super::fascinated_by::FascinatedBy;\nuse super::fed_up_with::FedUpWith;\nuse super::feel_fell::FeelFell;\nuse super::few_units_of_time_ago::FewUnitsOfTimeAgo;\nuse super::filler_words::FillerWords;\nuse super::find_fine::FindFine;\nuse super::first_aid_kit::FirstAidKit;\nuse super::flesh_out_vs_full_fledged::FleshOutVsFullFledged;\nuse super::for_noun::ForNoun;\nuse super::free_predicate::FreePredicate;\nuse super::friend_of_me::FriendOfMe;\nuse super::go_so_far_as_to::GoSoFarAsTo;\nuse super::go_to_war::GoToWar;\nuse super::good_at::GoodAt;\nuse super::handful::Handful;\nuse super::have_pronoun::HavePronoun;\nuse super::have_take_a_look::HaveTakeALook;\nuse super::hedging::Hedging;\nuse super::hello_greeting::HelloGreeting;\nuse super::hereby::Hereby;\nuse super::hop_hope::HopHope;\nuse super::how_to::HowTo;\nuse super::hyphenate_number_day::HyphenateNumberDay;\nuse super::i_am_agreement::IAmAgreement;\nuse super::if_wouldve::IfWouldve;\nuse super::in_on_the_cards::InOnTheCards;\nuse super::inflected_verb_after_to::InflectedVerbAfterTo;\nuse super::interested_in::InterestedIn;\nuse super::it_looks_like_that::ItLooksLikeThat;\nuse super::its_contraction::ItsContraction;\nuse super::its_possessive::ItsPossessive;\nuse super::jealous_of::JealousOf;\nuse super::johns_hopkins::JohnsHopkins;\nuse super::lead_rise_to::LeadRiseTo;\nuse super::left_right_hand::LeftRightHand;\nuse super::less_worse::LessWorse;\nuse super::let_to_do::LetToDo;\nuse super::lets_confusion::LetsConfusion;\nuse super::likewise::Likewise;\nuse super::long_sentences::LongSentences;\nuse super::look_down_ones_nose::LookDownOnesNose;\nuse super::looking_forward_to::LookingForwardTo;\nuse super::mass_nouns::MassNouns;\nuse super::means_a_lot_to::MeansALotTo;\nuse super::merge_words::MergeWords;\nuse super::missing_preposition::MissingPreposition;\nuse super::missing_to::MissingTo;\nuse super::misspell::Misspell;\nuse super::mixed_bag::MixedBag;\nuse super::modal_be_adjective::ModalBeAdjective;\nuse super::modal_of::ModalOf;\nuse super::modal_seem::ModalSeem;\nuse super::months::Months;\nuse super::more_adjective::MoreAdjective;\nuse super::more_better::MoreBetter;\nuse super::most_number::MostNumber;\nuse super::most_of_the_times::MostOfTheTimes;\nuse super::multiple_frequency_adverbs::MultipleFrequencyAdverbs;\nuse super::multiple_sequential_pronouns::MultipleSequentialPronouns;\nuse super::nail_on_the_head::NailOnTheHead;\nuse super::need_to_noun::NeedToNoun;\nuse super::no_french_spaces::NoFrenchSpaces;\nuse super::no_longer::NoLonger;\nuse super::no_match_for::NoMatchFor;\nuse super::no_oxford_comma::NoOxfordComma;\nuse super::nobody::Nobody;\nuse super::nominal_wants::NominalWants;\nuse super::nor_modal_pronoun::NorModalPronoun;\nuse super::not_only_inversion::NotOnlyInversion;\nuse super::noun_verb_confusion::NounVerbConfusion;\nuse super::number_suffix_capitalization::NumberSuffixCapitalization;\nuse super::obsess_preposition::ObsessPreposition;\nuse super::of_course::OfCourse;\nuse super::oldest_in_the_book::OldestInTheBook;\nuse super::on_floor::OnFloor;\nuse super::once_or_twice::OnceOrTwice;\nuse super::one_and_the_same::OneAndTheSame;\nuse super::one_of_the_singular::OneOfTheSingular;\nuse super::open_the_light::OpenTheLight;\nuse super::orthographic_consistency::OrthographicConsistency;\nuse super::ought_to_be::OughtToBe;\nuse super::out_of_date::OutOfDate;\nuse super::oxford_comma::OxfordComma;\nuse super::oxymorons::Oxymorons;\nuse super::phrasal_verb_as_compound_noun::PhrasalVerbAsCompoundNoun;\nuse super::pique_interest::PiqueInterest;\nuse super::plural_decades::PluralDecades;\nuse super::plural_wrong_word_of_phrase::PluralWrongWordOfPhrase;\nuse super::possessive_noun::PossessiveNoun;\nuse super::possessive_your::PossessiveYour;\nuse super::progressive_needs_be::ProgressiveNeedsBe;\nuse super::pronoun_are::PronounAre;\nuse super::pronoun_contraction::PronounContraction;\nuse super::pronoun_inflection_be::PronounInflectionBe;\nuse super::pronoun_knew::PronounKnew;\nuse super::pronoun_verb_agreement::PronounVerbAgreement;\nuse super::proper_noun_capitalization_linters;\nuse super::quantifier_needs_of::QuantifierNeedsOf;\nuse super::quantifier_numeral_conflict::QuantifierNumeralConflict;\nuse super::quite_quiet::QuiteQuiet;\nuse super::quote_spacing::QuoteSpacing;\nuse super::reason_for_doing::ReasonForDoing;\nuse super::redundant_acronyms::RedundantAcronyms;\nuse super::redundant_additive_adverbs::RedundantAdditiveAdverbs;\nuse super::redundant_progressive_comparative::RedundantProgressiveComparative;\nuse super::regionalisms::Regionalisms;\nuse super::regular_irregulars::RegularIrregulars;\nuse super::repeated_words::RepeatedWords;\nuse super::respond::Respond;\nuse super::right_click::RightClick;\nuse super::rise_the_ranks::RiseTheRanks;\nuse super::roller_skated::RollerSkated;\nuse super::safe_to_save::SafeToSave;\nuse super::save_to_safe::SaveToSafe;\nuse super::sentence_capitalization::SentenceCapitalization;\nuse super::shoot_oneself_in_the_foot::ShootOneselfInTheFoot;\nuse super::simple_past_to_past_participle::SimplePastToPastParticiple;\nuse super::since_duration::SinceDuration;\nuse super::single_be::SingleBe;\nuse super::some_without_article::SomeWithoutArticle;\nuse super::something_is::SomethingIs;\nuse super::somewhat_something::SomewhatSomething;\nuse super::soon_to_be::SoonToBe;\nuse super::sought_after::SoughtAfter;\nuse super::spaces::Spaces;\nuse super::spell_check::SpellCheck;\nuse super::spelled_numbers::SpelledNumbers;\nuse super::split_words::SplitWords;\nuse super::subject_pronoun::SubjectPronoun;\nuse super::take_a_look_to::TakeALookTo;\nuse super::take_medicine::TakeMedicine;\nuse super::that_than::ThatThan;\nuse super::that_which::ThatWhich;\nuse super::the_how_why::TheHowWhy;\nuse super::the_my::TheMy;\nuse super::the_point_for::ThePointFor;\nuse super::the_proper_noun_possessive::TheProperNounPossessive;\nuse super::then_than::ThenThan;\nuse super::theres::Theres;\nuse super::theses_these::ThesesThese;\nuse super::theyre_confusions::TheyreConfusions;\nuse super::thing_think::ThingThink;\nuse super::this_type_of_thing::ThisTypeOfThing;\nuse super::though_thought::ThoughThought;\nuse super::throw_away::ThrowAway;\nuse super::throw_rubbish::ThrowRubbish;\nuse super::to_adverb::ToAdverb;\nuse super::to_two_too::ToTwoToo;\nuse super::touristic::Touristic;\nuse super::transposed_space::TransposedSpace;\nuse super::try_ones_hand_at::TryOnesHandAt;\nuse super::unclosed_quotes::UnclosedQuotes;\nuse super::update_place_names::UpdatePlaceNames;\nuse super::use_title_case::UseTitleCase;\nuse super::verb_to_adjective::VerbToAdjective;\nuse super::very_unique::VeryUnique;\nuse super::vice_versa::ViceVersa;\nuse super::vicious_loop::ViciousCircle;\nuse super::vicious_loop::ViciousCircleOrCycle;\nuse super::vicious_loop::ViciousCycle;\nuse super::was_aloud::WasAloud;\nuse super::way_too_adjective::WayTooAdjective;\nuse super::well_educated::WellEducated;\nuse super::were_where::WereWhere;\nuse super::whereas::Whereas;\nuse super::whom_subject_of_verb::WhomSubjectOfVerb;\nuse super::widely_accepted::WidelyAccepted;\nuse super::win_prize::WinPrize;\nuse super::wish_could::WishCould;\nuse super::wordpress_dotcom::WordPressDotcom;\nuse super::worth_to_do::WorthToDo;\nuse super::would_never_have::WouldNeverHave;\nuse super::wrong_apostrophe::WrongApostrophe;\n\nuse super::{ExprLinter, Lint};\nuse super::{HtmlDescriptionLinter, Linter};\nuse crate::linting::dashes::Dashes;\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::open_compounds::OpenCompounds;\nuse crate::linting::{closed_compounds, initialisms, phrase_set_corrections, weir_rules};\nuse crate::spell::{Dictionary, MutableDictionary};\nuse crate::{CharString, Dialect, Document, TokenStringExt};\n\nfn ser_ordered<S>(map: &HashMap<String, Option<bool>>, ser: S) -> Result<S::Ok, S::Error>\nwhere\n    S: Serializer,\n{\n    let ordered: BTreeMap<_, _> = map.iter().map(|(k, v)| (k.clone(), *v)).collect();\n    ordered.serialize(ser)\n}\n\nfn de_hashbrown<'de, D>(de: D) -> Result<HashMap<String, Option<bool>>, D::Error>\nwhere\n    D: Deserializer<'de>,\n{\n    let ordered: BTreeMap<String, Option<bool>> = BTreeMap::deserialize(de)?;\n    Ok(ordered.into_iter().collect())\n}\n\n/// The configuration for a [`LintGroup`].\n/// Each child linter can be enabled, disabled, or set to a curated value.\n#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq)]\n#[serde(transparent)]\npub struct LintGroupConfig {\n    /// We do this shenanigans with the [`BTreeMap`] to keep the serialized format consistent.\n    #[serde(serialize_with = \"ser_ordered\", deserialize_with = \"de_hashbrown\")]\n    inner: HashMap<String, Option<bool>>,\n}\n\n#[cached]\nfn curated_config() -> LintGroupConfig {\n    // The Dictionary and Dialect do not matter, we're just after the config.\n    let group = LintGroup::new_curated(MutableDictionary::new().into(), Dialect::American);\n    group.config\n}\n\nimpl LintGroupConfig {\n    /// Check if a rule exists in the configuration.\n    pub fn has_rule(&self, key: impl AsRef<str>) -> bool {\n        self.inner.contains_key(key.as_ref())\n    }\n\n    pub fn set_rule_enabled(&mut self, key: impl ToString, val: bool) {\n        self.inner.insert(key.to_string(), Some(val));\n    }\n\n    /// Remove any configuration attached to a rule.\n    /// This allows it to assume its default (curated) state.\n    pub fn unset_rule_enabled(&mut self, key: impl AsRef<str>) {\n        self.inner.remove(key.as_ref());\n    }\n\n    pub fn set_rule_enabled_if_unset(&mut self, key: impl AsRef<str>, val: bool) {\n        if !self.inner.contains_key(key.as_ref()) {\n            self.set_rule_enabled(key.as_ref().to_string(), val);\n        }\n    }\n\n    pub fn is_rule_enabled(&self, key: &str) -> bool {\n        self.inner.get(key).cloned().flatten().unwrap_or(false)\n    }\n\n    /// Clear all config options.\n    /// This will reset them all to disable them.\n    pub fn clear(&mut self) {\n        for val in self.inner.values_mut() {\n            *val = None\n        }\n    }\n\n    /// Merge the contents of another [`LintGroupConfig`] into this one.\n    /// The other config will be left empty after this operation.\n    ///\n    /// Conflicting keys will be overridden by the value in the other group.\n    pub fn merge_from(&mut self, other: &mut LintGroupConfig) {\n        for (key, val) in other.inner.iter() {\n            if val.is_none() {\n                continue;\n            }\n\n            self.inner.insert(key.to_string(), *val);\n        }\n\n        other.clear();\n    }\n\n    /// Fill the group with the values for the curated lint group.\n    pub fn fill_with_curated(&mut self) {\n        let mut temp = Self::new_curated();\n        mem::swap(self, &mut temp);\n        self.merge_from(&mut temp);\n    }\n\n    pub fn new_curated() -> Self {\n        curated_config()\n    }\n}\n\nimpl Hash for LintGroupConfig {\n    fn hash<H: Hasher>(&self, hasher: &mut H) {\n        for (key, value) in &self.inner {\n            hasher.write(key.as_bytes());\n            if let Some(value) = value {\n                hasher.write_u8(1);\n                hasher.write_u8(*value as u8);\n            } else {\n                // Do it twice so we fill the same number of bytes as the other branch.\n                hasher.write_u8(0);\n                hasher.write_u8(0);\n            }\n        }\n    }\n}\n\n/// A struct for collecting the output of a number of individual [Linter]s.\n/// Each child can be toggled via the public, mutable `Self::config` object.\npub struct LintGroup {\n    pub config: LintGroupConfig,\n    /// We use a binary map here so the ordering is stable.\n    linters: BTreeMap<String, Box<dyn Linter>>,\n    /// We use a binary map here so the ordering is stable.\n    chunk_expr_linters: BTreeMap<String, Box<dyn ExprLinter<Unit = Chunk>>>,\n    /// Since [`ExprLinter`]s operate on a chunk-basis, we can store a\n    /// mapping of `Chunk -> Lint` and only re-run the expr linters\n    /// when a chunk changes.\n    ///\n    /// Since the expr linter results also depend on the config, we hash it and pass it as part\n    /// of the key.\n    chunk_expr_cache: LruCache<(CharString, u64), BTreeMap<String, Vec<Lint>>>,\n    hasher_builder: RandomState,\n    clashing_linter_names: Option<Vec<String>>,\n}\n\nimpl LintGroup {\n    // Constructor methods\n\n    pub fn empty() -> Self {\n        Self {\n            config: LintGroupConfig::default(),\n            linters: BTreeMap::new(),\n            chunk_expr_linters: BTreeMap::new(),\n            chunk_expr_cache: LruCache::new(NonZero::new(1000).unwrap()),\n            hasher_builder: RandomState::default(),\n            clashing_linter_names: None,\n        }\n    }\n\n    // Non-constructor methods\n\n    /// Check if the group already contains a linter with a given name.\n    pub fn contains_key(&self, name: impl AsRef<str>) -> bool {\n        self.linters.contains_key(name.as_ref())\n            || self.chunk_expr_linters.contains_key(name.as_ref())\n    }\n\n    /// Add a [`Linter`] to the group, returning whether the operation was successful.\n    /// If it returns `false`, it is because a linter with that key already existed in the group.\n    pub fn add(&mut self, name: impl AsRef<str>, linter: impl Linter + 'static) -> bool {\n        if self.contains_key(&name) {\n            if self.clashing_linter_names.is_none() {\n                self.clashing_linter_names = Some(vec![name.as_ref().to_string()]);\n            } else if let Some(clashing_names) = &mut self.clashing_linter_names {\n                clashing_names.push(name.as_ref().to_string());\n            }\n            false\n        } else {\n            self.linters\n                .insert(name.as_ref().to_string(), Box::new(linter));\n            true\n        }\n    }\n\n    /// Add a chunk-based [`ExprLinter`] to the group, returning whether the operation was successful.\n    /// If it returns `false`, it is because a linter with that key already existed in the group.\n    ///\n    /// This function is not significantly different from [`Self::add`], but allows us to take\n    /// advantage of some properties of chunk-based [`ExprLinter`]s for cache optimization.\n    pub fn add_chunk_expr_linter(\n        &mut self,\n        name: impl AsRef<str>,\n        // linter: impl ExprLinter + 'static,\n        linter: impl ExprLinter<Unit = Chunk> + 'static,\n    ) -> bool {\n        if self.contains_key(&name) {\n            if self.clashing_linter_names.is_none() {\n                self.clashing_linter_names = Some(vec![name.as_ref().to_string()]);\n            } else if let Some(clashing_names) = &mut self.clashing_linter_names {\n                clashing_names.push(name.as_ref().to_string());\n            }\n            false\n        } else {\n            self.chunk_expr_linters\n                .insert(name.as_ref().to_string(), Box::new(linter) as _);\n            true\n        }\n    }\n\n    /// Merge the contents of another [`LintGroup`] into this one.\n    /// The other lint group will be left empty after this operation.\n    pub fn merge_from(&mut self, other: &mut LintGroup) {\n        self.config.merge_from(&mut other.config);\n\n        let other_linters = std::mem::take(&mut other.linters);\n        if let Some((conflicting_key, _)) = other_linters.iter().find(|(k, _)| self.contains_key(k))\n        {\n            if self.clashing_linter_names.is_none() {\n                self.clashing_linter_names = Some(vec![conflicting_key.clone()]);\n            } else if let Some(clashing_names) = &mut self.clashing_linter_names {\n                clashing_names.push(conflicting_key.clone());\n            }\n        }\n        self.linters.extend(other_linters);\n\n        let other_expr_linters = std::mem::take(&mut other.chunk_expr_linters);\n        if let Some((conflicting_key, _)) = other_expr_linters\n            .iter()\n            .find(|(k, _)| self.contains_key(k))\n        {\n            if self.clashing_linter_names.is_none() {\n                self.clashing_linter_names = Some(vec![conflicting_key.clone()]);\n            } else if let Some(clashing_names) = &mut self.clashing_linter_names {\n                clashing_names.push(conflicting_key.clone());\n            }\n        }\n        self.chunk_expr_linters.extend(other_expr_linters);\n    }\n\n    pub fn iter_keys(&self) -> impl Iterator<Item = &str> {\n        self.linters\n            .keys()\n            .chain(self.chunk_expr_linters.keys())\n            .map(|v| v.as_str())\n    }\n\n    /// Set all contained rules to a specific value.\n    /// Passing `None` will unset that rule, allowing it to assume its default state.\n    pub fn set_all_rules_to(&mut self, enabled: Option<bool>) {\n        let keys = self.iter_keys().map(|v| v.to_string()).collect::<Vec<_>>();\n\n        for key in keys {\n            match enabled {\n                Some(v) => self.config.set_rule_enabled(key, v),\n                None => self.config.unset_rule_enabled(key),\n            }\n        }\n    }\n\n    /// Get map from each contained linter's name to its associated description.\n    pub fn all_descriptions(&self) -> HashMap<&str, &str> {\n        self.linters\n            .iter()\n            .map(|(key, value)| (key.as_str(), value.description()))\n            .chain(\n                self.chunk_expr_linters\n                    .iter()\n                    .map(|(key, value)| (key.as_str(), ExprLinter::description(value))),\n            )\n            .collect()\n    }\n\n    /// Get map from each contained linter's name to its associated description, rendered to HTML.\n    pub fn all_descriptions_html(&self) -> HashMap<&str, String> {\n        self.linters\n            .iter()\n            .map(|(key, value)| (key.as_str(), value.description_html()))\n            .chain(\n                self.chunk_expr_linters\n                    .iter()\n                    .map(|(key, value)| (key.as_str(), value.description_html())),\n            )\n            .collect()\n    }\n\n    /// Swap out [`Self::config`] with another [`LintGroupConfig`].\n    pub fn with_lint_config(mut self, config: LintGroupConfig) -> Self {\n        self.config = config;\n        self\n    }\n\n    pub fn new_curated(dictionary: Arc<impl Dictionary + 'static>, dialect: Dialect) -> Self {\n        let mut out = Self::empty();\n\n        /// Add a `Linter` to the group, setting it to be enabled or disabled.\n        macro_rules! insert_struct_rule {\n            ($rule:ident, $default_config:expr) => {\n                out.add(stringify!($rule), $rule::default());\n                out.config\n                    .set_rule_enabled(stringify!($rule), $default_config);\n            };\n        }\n\n        /// Add a `Linter` that requires a `Dictionary` to the group, setting it to be enabled or disabled.\n        macro_rules! insert_struct_rule_with_dict {\n            ($rule:ident, $default_config:expr) => {\n                out.add(stringify!($rule), $rule::new(dictionary.clone()));\n                out.config\n                    .set_rule_enabled(stringify!($rule), $default_config);\n            };\n        }\n\n        /// Add a `Linter` that requires a `Dialect` to the group, setting it to be enabled or disabled.\n        macro_rules! insert_struct_rule_with_dialect {\n            ($rule:ident, $default_config:expr) => {\n                out.add(stringify!($rule), $rule::new(dialect));\n                out.config\n                    .set_rule_enabled(stringify!($rule), $default_config);\n            };\n        }\n\n        /// Add a chunk-based `ExprLinter` to the group, setting it to be enabled or disabled.\n        /// While you _can_ pass an `ExprLinter` to `insert_struct_rule`, using this macro instead\n        /// will allow it to use more aggressive caching strategies.\n        macro_rules! insert_expr_rule {\n            ($rule:ident, $default_config:expr) => {\n                out.add_chunk_expr_linter(stringify!($rule), $rule::default());\n                out.config\n                    .set_rule_enabled(stringify!($rule), $default_config);\n            };\n        }\n\n        /// Add a chunk-based `ExprLinter` that requires a `Dictionary` to the group, setting it to be enabled or disabled.\n        macro_rules! insert_expr_rule_with_dict {\n            ($rule:ident, $default_config:expr) => {\n                out.add_chunk_expr_linter(stringify!($rule), $rule::new(dictionary.clone()));\n                out.config\n                    .set_rule_enabled(stringify!($rule), $default_config);\n            };\n        }\n\n        /// Add a chunk-based `ExprLinter` that requires a `Dialect` to the group, setting it to be enabled or disabled.\n        macro_rules! insert_expr_rule_with_dialect {\n            ($rule:ident, $default_config:expr) => {\n                out.add_chunk_expr_linter(stringify!($rule), $rule::new(dialect));\n                out.config\n                    .set_rule_enabled(stringify!($rule), $default_config);\n            };\n        }\n\n        out.merge_from(&mut weir_rules::lint_group());\n        out.merge_from(&mut phrase_set_corrections::lint_group());\n        out.merge_from(&mut proper_noun_capitalization_linters::lint_group(\n            dictionary.clone(),\n        ));\n        out.merge_from(&mut closed_compounds::lint_group());\n        out.merge_from(&mut initialisms::lint_group());\n\n        // Add all the more complex rules to the group.\n        // Please maintain alphabetical order.\n        // On *nix you can maintain sort order with `sort -t'(' -k2`\n        insert_expr_rule!(APart, true);\n        insert_expr_rule!(AWhile, true);\n        insert_expr_rule!(Addicting, true);\n        insert_expr_rule!(AdjectiveDoubleDegree, true);\n        insert_struct_rule!(AdjectiveOfA, true);\n        insert_expr_rule!(AfterLater, true);\n        insert_expr_rule!(AllHellBreakLoose, true);\n        insert_expr_rule!(AllIntentsAndPurposes, true);\n        insert_expr_rule!(AllowTo, true);\n        insert_expr_rule!(AmInTheMorning, true);\n        insert_expr_rule!(AmountsFor, true);\n        insert_struct_rule_with_dialect!(AnA, true);\n        insert_expr_rule!(AndIn, true);\n        insert_expr_rule!(AndTheLike, true);\n        insert_expr_rule!(AnotherThingComing, true);\n        insert_expr_rule!(AnotherThinkComing, false);\n        insert_expr_rule!(ApartFrom, true);\n        insert_expr_rule!(AskNoPreposition, true);\n        insert_expr_rule!(AvoidCurses, true);\n        insert_expr_rule!(BackInTheDay, true);\n        insert_expr_rule!(BeAllowed, true);\n        insert_expr_rule!(BeWorried, true);\n        insert_expr_rule!(BehindTheScenes, true);\n        insert_struct_rule!(BestOfAllTime, true);\n        insert_expr_rule!(BoringWords, false);\n        insert_expr_rule!(Bought, true);\n        insert_expr_rule!(BrandBrandish, true);\n        insert_expr_rule!(ByAccident, true);\n        insert_expr_rule!(Cant, true);\n        insert_struct_rule!(CapitalizePersonalPronouns, true);\n        insert_expr_rule!(CautionaryTale, true);\n        insert_expr_rule!(ChangeTack, true);\n        insert_expr_rule!(ChockFull, true);\n        insert_struct_rule!(CommaFixes, true);\n        insert_struct_rule!(CompoundNouns, true);\n        insert_expr_rule!(CompoundSubjectI, true);\n        insert_expr_rule!(Confident, true);\n        insert_struct_rule!(CorrectNumberSuffix, true);\n        insert_expr_rule!(CriteriaPhenomena, true);\n        insert_expr_rule!(CureFor, true);\n        insert_struct_rule!(CurrencyPlacement, true);\n        insert_expr_rule!(Dashes, true);\n        insert_expr_rule!(DayAndAge, true);\n        insert_expr_rule!(DespiteItIs, true);\n        insert_expr_rule!(DespiteOf, true);\n        insert_expr_rule_with_dict!(DidPast, true);\n        insert_expr_rule!(Didnt, true);\n        insert_struct_rule!(DiscourseMarkers, true);\n        insert_expr_rule_with_dict!(DisjointPrefixes, true);\n        insert_expr_rule!(DoMistake, true);\n        insert_expr_rule!(DotInitialisms, true);\n        insert_expr_rule!(DoubleClick, true);\n        insert_expr_rule!(DoubleModal, true);\n        insert_struct_rule!(EllipsisLength, true);\n        insert_expr_rule!(ElsePossessive, true);\n        insert_expr_rule!(EverEvery, true);\n        insert_expr_rule!(Everyday, true);\n        insert_expr_rule!(ExpandMemoryShorthands, true);\n        insert_expr_rule!(ExpandTimeShorthands, true);\n        insert_expr_rule!(FarBeIt, true);\n        insert_expr_rule!(FascinatedBy, true);\n        insert_expr_rule_with_dialect!(FedUpWith, true);\n        insert_expr_rule!(FeelFell, true);\n        insert_expr_rule!(FewUnitsOfTimeAgo, true);\n        insert_expr_rule!(FillerWords, true);\n        insert_struct_rule!(FindFine, true);\n        insert_expr_rule!(FirstAidKit, true);\n        insert_expr_rule!(FleshOutVsFullFledged, true);\n        insert_expr_rule!(ForNoun, true);\n        insert_expr_rule!(FreePredicate, true);\n        insert_expr_rule!(FriendOfMe, true);\n        insert_expr_rule!(GoSoFarAsTo, true);\n        insert_expr_rule!(GoToWar, true);\n        insert_expr_rule!(GoodAt, true);\n        insert_expr_rule!(Handful, true);\n        insert_expr_rule!(HavePronoun, true);\n        insert_struct_rule_with_dialect!(HaveTakeALook, true);\n        insert_expr_rule!(Hedging, true);\n        insert_expr_rule!(HelloGreeting, true);\n        insert_expr_rule!(Hereby, true);\n        insert_struct_rule!(HopHope, true);\n        insert_expr_rule!(HowTo, true);\n        insert_expr_rule!(HyphenateNumberDay, true);\n        insert_expr_rule!(IAmAgreement, true);\n        insert_expr_rule!(IfWouldve, true);\n        insert_struct_rule_with_dialect!(InOnTheCards, true);\n        insert_struct_rule_with_dict!(InflectedVerbAfterTo, true);\n        insert_expr_rule!(InterestedIn, true);\n        insert_expr_rule!(ItLooksLikeThat, true);\n        insert_struct_rule!(ItsContraction, true);\n        insert_expr_rule!(ItsPossessive, true);\n        insert_expr_rule!(JealousOf, true);\n        insert_expr_rule!(JohnsHopkins, true);\n        insert_expr_rule!(LeadRiseTo, true);\n        insert_expr_rule!(LeftRightHand, true);\n        insert_expr_rule!(LessWorse, true);\n        insert_expr_rule!(LetToDo, true);\n        insert_struct_rule!(LetsConfusion, true);\n        insert_expr_rule!(Likewise, true);\n        insert_struct_rule!(LongSentences, true);\n        insert_expr_rule!(LookDownOnesNose, true);\n        insert_expr_rule!(LookingForwardTo, true);\n        insert_struct_rule_with_dict!(MassNouns, true);\n        insert_expr_rule!(MeansALotTo, true);\n        insert_struct_rule!(MergeWords, true);\n        insert_expr_rule!(MissingPreposition, true);\n        insert_expr_rule!(MissingTo, true);\n        insert_expr_rule!(Misspell, true);\n        insert_expr_rule!(MixedBag, true);\n        insert_expr_rule!(ModalBeAdjective, true);\n        insert_expr_rule!(ModalOf, true);\n        insert_expr_rule!(ModalSeem, true);\n        insert_expr_rule!(Months, true);\n        insert_expr_rule_with_dict!(MoreAdjective, true);\n        insert_expr_rule!(MoreBetter, true);\n        insert_expr_rule!(MostNumber, true);\n        insert_expr_rule!(MostOfTheTimes, true);\n        insert_expr_rule!(MultipleSequentialPronouns, true);\n        insert_expr_rule!(NailOnTheHead, true);\n        insert_expr_rule!(NeedToNoun, true);\n        insert_struct_rule!(NoFrenchSpaces, true);\n        insert_expr_rule!(NoLonger, true);\n        insert_expr_rule!(NoMatchFor, true);\n        insert_struct_rule!(NoOxfordComma, false);\n        insert_expr_rule!(Nobody, true);\n        insert_expr_rule!(NominalWants, true);\n        insert_expr_rule!(NorModalPronoun, true);\n        insert_expr_rule!(NotOnlyInversion, true);\n        insert_struct_rule!(NounVerbConfusion, true);\n        insert_struct_rule!(NumberSuffixCapitalization, true);\n        insert_expr_rule!(ObsessPreposition, true);\n        insert_expr_rule!(OfCourse, true);\n        insert_expr_rule!(OldestInTheBook, true);\n        insert_expr_rule!(OnFloor, true);\n        insert_expr_rule!(OnceOrTwice, true);\n        insert_expr_rule!(OneAndTheSame, true);\n        insert_expr_rule_with_dict!(OneOfTheSingular, true);\n        insert_expr_rule!(OpenCompounds, true);\n        insert_expr_rule!(OpenTheLight, true);\n        insert_expr_rule!(OrthographicConsistency, true);\n        insert_expr_rule!(OughtToBe, true);\n        insert_expr_rule!(OutOfDate, true);\n        insert_struct_rule!(OxfordComma, true);\n        insert_expr_rule!(Oxymorons, true);\n        insert_struct_rule!(PhrasalVerbAsCompoundNoun, true);\n        insert_expr_rule!(PiqueInterest, true);\n        insert_expr_rule!(PluralWrongWordOfPhrase, true);\n        insert_struct_rule_with_dict!(PossessiveNoun, false);\n        insert_expr_rule!(PossessiveYour, true);\n        insert_expr_rule!(ProgressiveNeedsBe, true);\n        insert_expr_rule!(PronounAre, true);\n        insert_struct_rule!(PronounContraction, true);\n        insert_expr_rule!(PronounInflectionBe, true);\n        insert_expr_rule!(PronounKnew, true);\n        insert_expr_rule_with_dict!(PronounVerbAgreement, true);\n        insert_expr_rule!(QuantifierNeedsOf, true);\n        insert_expr_rule!(QuantifierNumeralConflict, true);\n        insert_expr_rule!(QuiteQuiet, true);\n        insert_struct_rule!(QuoteSpacing, true);\n        insert_expr_rule!(ReasonForDoing, true);\n        insert_expr_rule!(RedundantAcronyms, true);\n        insert_expr_rule!(RedundantAdditiveAdverbs, true);\n        insert_expr_rule!(RedundantProgressiveComparative, true);\n        insert_struct_rule_with_dialect!(Regionalisms, true);\n        insert_expr_rule_with_dict!(RegularIrregulars, true);\n        insert_struct_rule!(RepeatedWords, true);\n        insert_expr_rule!(Respond, true);\n        insert_expr_rule!(RightClick, true);\n        insert_expr_rule!(RiseTheRanks, true);\n        insert_expr_rule!(RollerSkated, true);\n        insert_expr_rule!(SafeToSave, true);\n        insert_expr_rule!(SaveToSafe, true);\n        insert_struct_rule_with_dict!(SentenceCapitalization, true);\n        insert_expr_rule!(ShootOneselfInTheFoot, true);\n        insert_expr_rule!(SimplePastToPastParticiple, true);\n        insert_expr_rule!(SinceDuration, true);\n        insert_expr_rule!(SingleBe, true);\n        insert_expr_rule!(SomeWithoutArticle, true);\n        insert_expr_rule!(SomethingIs, true);\n        insert_expr_rule!(SomewhatSomething, true);\n        insert_expr_rule!(SoonToBe, true);\n        insert_expr_rule!(SoughtAfter, true);\n        insert_struct_rule!(Spaces, true);\n        insert_struct_rule!(SpelledNumbers, false);\n        insert_expr_rule!(SplitWords, true);\n        insert_struct_rule!(SubjectPronoun, true);\n        insert_expr_rule!(TakeALookTo, true);\n        insert_expr_rule!(TakeMedicine, true);\n        insert_expr_rule!(ThatThan, true);\n        insert_expr_rule!(ThatWhich, true);\n        insert_expr_rule!(TheHowWhy, true);\n        insert_expr_rule!(TheMy, true);\n        insert_expr_rule!(ThePointFor, true);\n        insert_expr_rule!(TheProperNounPossessive, true);\n        insert_expr_rule!(ThenThan, true);\n        insert_expr_rule!(Theres, true);\n        insert_expr_rule!(ThesesThese, true);\n        insert_struct_rule!(TheyreConfusions, true);\n        insert_expr_rule!(ThingThink, true);\n        insert_expr_rule!(ThisTypeOfThing, true);\n        insert_expr_rule!(ThoughThought, true);\n        insert_expr_rule!(ThrowAway, true);\n        insert_struct_rule!(ThrowRubbish, true);\n        insert_expr_rule!(ToAdverb, true);\n        insert_struct_rule!(ToTwoToo, true);\n        insert_expr_rule!(Touristic, true);\n        insert_expr_rule_with_dict!(TransposedSpace, true);\n        insert_expr_rule!(TryOnesHandAt, true);\n        insert_struct_rule!(UnclosedQuotes, true);\n        insert_expr_rule!(UpdatePlaceNames, true);\n        insert_struct_rule_with_dict!(UseTitleCase, true);\n        insert_expr_rule!(VerbToAdjective, true);\n        insert_expr_rule!(VeryUnique, true);\n        insert_expr_rule!(ViceVersa, true);\n        insert_expr_rule!(ViciousCircle, true);\n        insert_expr_rule!(ViciousCircleOrCycle, false);\n        insert_expr_rule!(ViciousCycle, false);\n        insert_expr_rule!(WasAloud, true);\n        insert_expr_rule!(WayTooAdjective, true);\n        insert_expr_rule!(WellEducated, true);\n        insert_expr_rule!(WereWhere, true);\n        insert_expr_rule!(Whereas, true);\n        insert_expr_rule!(WhomSubjectOfVerb, true);\n        insert_expr_rule!(WidelyAccepted, true);\n        insert_expr_rule!(WinPrize, true);\n        insert_expr_rule!(WishCould, true);\n        insert_struct_rule!(WordPressDotcom, true);\n        insert_expr_rule_with_dict!(WorthToDo, true);\n        insert_expr_rule!(WouldNeverHave, true);\n        insert_expr_rule!(WrongApostrophe, true);\n\n        // Uses Sentence rather than Chunk\n        out.add(\"Damages\", Damages::default());\n        out.config.set_rule_enabled(\"Damages\", true);\n\n        // Uses Sentence rather than Chunk\n        out.add(\n            \"MultipleFrequencyAdverbs\",\n            MultipleFrequencyAdverbs::default(),\n        );\n        out.config\n            .set_rule_enabled(\"MultipleFrequencyAdverbs\", true);\n\n        // Uses Sentence rather than Chunk\n        out.add(\"PluralDecades\", PluralDecades::default());\n        out.config.set_rule_enabled(\"PluralDecades\", true);\n\n        // Uses Dictionary and Dialect\n        out.add(\"SpellCheck\", SpellCheck::new(dictionary.clone(), dialect));\n        out.config.set_rule_enabled(\"SpellCheck\", true);\n\n        out\n    }\n\n    /// Create a new curated group with all config values cleared out.\n    pub fn new_curated_empty_config(\n        dictionary: Arc<impl Dictionary + 'static>,\n        dialect: Dialect,\n    ) -> Self {\n        let mut group = Self::new_curated(dictionary, dialect);\n        group.config.clear();\n        group\n    }\n\n    pub fn organized_lints(&mut self, document: &Document) -> BTreeMap<String, Vec<Lint>> {\n        let mut results = BTreeMap::new();\n\n        // Normal linters\n        for (key, linter) in &mut self.linters {\n            if self.config.is_rule_enabled(key) {\n                results.insert(key.clone(), linter.lint(document));\n            }\n        }\n\n        // Expr linters\n        for chunk in document.iter_chunks() {\n            let Some(chunk_span) = chunk.span() else {\n                continue;\n            };\n\n            let chunk_chars = document.get_span_content(&chunk_span);\n            let config_hash = self.hasher_builder.hash_one(&self.config);\n            let cache_key = (chunk_chars.into(), config_hash);\n\n            let mut chunk_results = if let Some(hit) = self.chunk_expr_cache.get(&cache_key) {\n                hit.clone()\n            } else {\n                let mut pattern_lints = BTreeMap::new();\n\n                for (key, linter) in &mut self.chunk_expr_linters {\n                    if self.config.is_rule_enabled(key) {\n                        let lints =\n                            run_on_chunk(linter, chunk, document.get_source()).map(|mut l| {\n                                l.span.pull_by(chunk_span.start);\n                                l\n                            });\n\n                        pattern_lints.insert(key.clone(), lints.collect());\n                    }\n                }\n\n                self.chunk_expr_cache.put(cache_key, pattern_lints.clone());\n                pattern_lints\n            };\n\n            // Bring the spans back into document-space\n            for value in chunk_results.values_mut() {\n                for lint in value {\n                    lint.span.push_by(chunk_span.start);\n                }\n            }\n\n            for (key, mut vec) in chunk_results {\n                results.entry(key).or_default().append(&mut vec);\n            }\n        }\n\n        results\n    }\n}\n\nimpl Default for LintGroup {\n    fn default() -> Self {\n        Self::empty()\n    }\n}\n\nimpl Linter for LintGroup {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        self.organized_lints(document)\n            .into_values()\n            .flatten()\n            .collect()\n    }\n\n    fn description(&self) -> &str {\n        \"A collection of linters that can be run as one.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use std::sync::Arc;\n\n    use super::{LintGroup, LintGroupConfig};\n    use crate::linting::LintKind;\n    use crate::linting::tests::assert_no_lints;\n    use crate::spell::{FstDictionary, MutableDictionary};\n    use crate::{Dialect, Document, linting::Linter};\n\n    fn test_group() -> LintGroup {\n        LintGroup::new_curated(Arc::new(MutableDictionary::curated()), Dialect::American)\n    }\n\n    #[test]\n    fn clean_interjection() {\n        assert_no_lints(\n            \"Although I only saw the need to interject once, I still saw it.\",\n            test_group(),\n        );\n    }\n\n    #[test]\n    fn clean_consensus() {\n        assert_no_lints(\"But there is less consensus on this.\", test_group());\n    }\n\n    #[test]\n    fn can_get_all_descriptions() {\n        let group =\n            LintGroup::new_curated(Arc::new(MutableDictionary::default()), Dialect::American);\n        group.all_descriptions();\n    }\n\n    #[test]\n    fn can_get_all_descriptions_as_html() {\n        let group =\n            LintGroup::new_curated(Arc::new(MutableDictionary::default()), Dialect::American);\n        group.all_descriptions_html();\n    }\n\n    #[test]\n    fn dont_flag_low_hanging_fruit_msg() {\n        assert_no_lints(\n            \"The standard form is low-hanging fruit with a hyphen and singular form.\",\n            test_group(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_low_hanging_fruit_desc() {\n        assert_no_lints(\n            \"Corrects nonstandard variants of low-hanging fruit.\",\n            test_group(),\n        );\n    }\n\n    /// Tests that no linters' descriptions contain errors handled by other linters.\n    ///\n    /// This test verifies that the description of each linter (which is written in natural language)\n    /// doesn't trigger any other linter's rules, with the exception of certain linters that\n    /// suggest mere alternatives rather than flagging actual errors.\n    ///\n    /// For example, we disable the \"MoreAdjective\" linter since some comparative and superlative\n    /// adjectives can be more awkward than their two-word counterparts, even if technically correct.\n    ///\n    /// If this test fails, it means either:\n    /// 1. A linter's description contains an actual error that should be fixed, or\n    /// 2. A linter is being too aggressive in flagging text that is actually correct English\n    ///    in the context of another linter's description.\n    #[test]\n    fn lint_descriptions_are_clean() {\n        let lints_to_check = LintGroup::new_curated(FstDictionary::curated(), Dialect::American);\n\n        let enforcer_config = LintGroupConfig::new_curated();\n        let mut lints_to_enforce =\n            LintGroup::new_curated(FstDictionary::curated(), Dialect::American)\n                .with_lint_config(enforcer_config);\n\n        let name_description_pairs: Vec<_> = lints_to_check\n            .all_descriptions()\n            .into_iter()\n            .map(|(n, d)| (n.to_string(), d.to_string()))\n            .collect();\n\n        for (lint_name, description) in name_description_pairs {\n            let doc = Document::new_markdown_default_curated(&description);\n            eprintln!(\"{lint_name}: {description}\");\n\n            let mut lints = lints_to_enforce.lint(&doc);\n\n            // Remove ones related to style\n            lints.retain(|l| l.lint_kind != LintKind::Style);\n\n            if !lints.is_empty() {\n                dbg!(lints);\n                panic!();\n            }\n        }\n    }\n\n    #[test]\n    fn no_linter_names_clash() {\n        let group =\n            LintGroup::new_curated(Arc::new(MutableDictionary::default()), Dialect::American);\n\n        if let Some(names) = &group.clashing_linter_names {\n            if !names.is_empty() {\n                panic!(\n                    \"⚠️ Found {} clashing linter names: {}\",\n                    names.len(),\n                    names.join(\", \")\n                );\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/lint_kind.rs",
    "content": "use std::fmt::Display;\n\nuse is_macro::Is;\nuse serde::{Deserialize, Serialize};\n\n/// The general category a [`Lint`](super::Lint) falls into.\n/// There's no reason not to add a new item here if you are adding a new rule that doesn't fit\n/// the existing categories.\n#[derive(Debug, Clone, Copy, Serialize, Deserialize, Is, Default, Hash, PartialEq, Eq)]\npub enum LintKind {\n    Agreement,\n    /// For errors where words are joined or split at the wrong boundaries\n    /// (e.g., \"each and everyone\" vs. \"each and every one\")\n    BoundaryError,\n    Capitalization,\n    /// For cases where a word or phrase is misused for a similar-sounding word or phrase,\n    /// where the incorrect version makes logical sense (e.g., 'egg corn' for 'acorn',\n    /// 'on mass' for 'en masse').\n    Eggcorn,\n    /// For suggesting improvements that enhance clarity or impact without fixing errors\n    Enhancement,\n    Formatting,\n    Grammar,\n    /// For cases where a word is mistakenly used for a similar-sounding word with a different meaning\n    /// (e.g., 'eluded to' instead of 'alluded to'). Unlike eggcorns, these don't create new meanings.\n    Malapropism,\n    /// For any other lint that doesn't fit neatly into the other categories\n    #[default]\n    Miscellaneous,\n    Nonstandard,\n    /// For issues with punctuation, including hyphenation in compound adjectives\n    /// (e.g., \"face first\" vs. \"face-first\" when used before a noun)\n    Punctuation,\n    Readability,\n    /// For cases where words duplicate meaning that's already expressed\n    /// (e.g., \"basic fundamentals\" → \"fundamentals\", \"free gift\" → \"gift\")\n    Redundancy,\n    /// For variations that are standard in some regions or dialects but not others\n    Regionalism,\n    Repetition,\n    /// When your brain doesn't know the right spelling.\n    /// This should only be used by linters doing spellcheck on individual words.\n    Spelling,\n    /// For cases where multiple options are correct but one is preferred for style or clarity,\n    /// such as expanding abbreviations in formal writing (e.g., 'min' → 'minimum')\n    Style,\n    /// When your brain knows the right spelling but your fingers made a mistake.\n    /// (e.g., 'can be seem' → 'can be seen')\n    Typo,\n    /// For conventional word usage and standard collocations\n    /// (e.g., 'by accident' vs. 'on accident' in standard English)\n    Usage,\n    /// For choosing between different words or phrases in a given context\n    WordChoice,\n}\n\nimpl LintKind {\n    /// The inverse of [`Self::to_string_key`]\n    pub fn from_string_key(s: &str) -> Option<Self> {\n        match s {\n            \"Agreement\" => Some(LintKind::Agreement),\n            \"BoundaryError\" => Some(LintKind::BoundaryError),\n            \"Capitalization\" => Some(LintKind::Capitalization),\n            \"Eggcorn\" => Some(LintKind::Eggcorn),\n            \"Enhancement\" => Some(LintKind::Enhancement),\n            \"Formatting\" => Some(LintKind::Formatting),\n            \"Grammar\" => Some(LintKind::Grammar),\n            \"Malapropism\" => Some(LintKind::Malapropism),\n            \"Miscellaneous\" => Some(LintKind::Miscellaneous),\n            \"Nonstandard\" => Some(LintKind::Nonstandard),\n            \"Punctuation\" => Some(LintKind::Punctuation),\n            \"Readability\" => Some(LintKind::Readability),\n            \"Redundancy\" => Some(LintKind::Redundancy),\n            \"Regionalism\" => Some(LintKind::Regionalism),\n            \"Repetition\" => Some(LintKind::Repetition),\n            \"Spelling\" => Some(LintKind::Spelling),\n            \"Style\" => Some(LintKind::Style),\n            \"Typo\" => Some(LintKind::Typo),\n            \"Usage\" => Some(LintKind::Usage),\n            \"WordChoice\" => Some(LintKind::WordChoice),\n            _ => None,\n        }\n    }\n\n    /// Produce a string representation, which can be used as keys in a map or CSS variables.\n    pub fn to_string_key(&self) -> String {\n        match self {\n            LintKind::Agreement => \"Agreement\",\n            LintKind::BoundaryError => \"BoundaryError\",\n            LintKind::Capitalization => \"Capitalization\",\n            LintKind::Eggcorn => \"Eggcorn\",\n            LintKind::Enhancement => \"Enhancement\",\n            LintKind::Formatting => \"Formatting\",\n            LintKind::Grammar => \"Grammar\",\n            LintKind::Malapropism => \"Malapropism\",\n            LintKind::Miscellaneous => \"Miscellaneous\",\n            LintKind::Nonstandard => \"Nonstandard\",\n            LintKind::Punctuation => \"Punctuation\",\n            LintKind::Readability => \"Readability\",\n            LintKind::Redundancy => \"Redundancy\",\n            LintKind::Regionalism => \"Regionalism\",\n            LintKind::Repetition => \"Repetition\",\n            LintKind::Spelling => \"Spelling\",\n            LintKind::Style => \"Style\",\n            LintKind::Typo => \"Typo\",\n            LintKind::Usage => \"Usage\",\n            LintKind::WordChoice => \"WordChoice\",\n        }\n        .to_owned()\n    }\n}\n\nimpl Display for LintKind {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        let s = match self {\n            LintKind::Agreement => \"Agreement\",\n            LintKind::BoundaryError => \"BoundaryError\",\n            LintKind::Capitalization => \"Capitalization\",\n            LintKind::Eggcorn => \"Eggcorn\",\n            LintKind::Enhancement => \"Enhancement\",\n            LintKind::Formatting => \"Formatting\",\n            LintKind::Grammar => \"Grammar\",\n            LintKind::Malapropism => \"Malapropism\",\n            LintKind::Miscellaneous => \"Miscellaneous\",\n            LintKind::Nonstandard => \"Nonstandard\",\n            LintKind::Punctuation => \"Punctuation\",\n            LintKind::Readability => \"Readability\",\n            LintKind::Redundancy => \"Redundancy\",\n            LintKind::Regionalism => \"Regionalism\",\n            LintKind::Repetition => \"Repetition\",\n            LintKind::Spelling => \"Spelling\",\n            LintKind::Style => \"Style\",\n            LintKind::Typo => \"Typo\",\n            LintKind::Usage => \"Usage\",\n            LintKind::WordChoice => \"Word Choice\",\n        };\n\n        write!(f, \"{s}\")\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/long_sentences.rs",
    "content": "use super::{Lint, LintKind, Linter};\nuse crate::TokenStringExt;\nuse crate::{Document, Span};\n\n/// Detect and warn that the sentence is too long.\n#[derive(Debug, Clone, Copy, Default)]\npub struct LongSentences;\n\nimpl Linter for LongSentences {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut output = Vec::new();\n\n        for sentence in document.iter_sentences() {\n            let word_count = sentence.iter_words().count();\n\n            if word_count > 40 {\n                output.push(Lint {\n                    span: Span::new(\n                        sentence.first_word().unwrap().span.start,\n                        sentence.last().unwrap().span.end,\n                    ),\n                    lint_kind: LintKind::Readability,\n                    message: format!(\"This sentence is {word_count} words long.\"),\n                    ..Default::default()\n                })\n            }\n        }\n\n        output\n    }\n\n    fn description(&self) -> &'static str {\n        \"This rule looks for run-on sentences, which can make your work harder to grok.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/look_down_ones_nose.rs",
    "content": "use crate::{\n    Lint, Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct LookDownOnesNose {\n    expr: SequenceExpr,\n}\n\nimpl Default for LookDownOnesNose {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"look\", \"looked\", \"looking\", \"looks\"])\n                .t_ws()\n                .then_possessive_determiner()\n                .t_ws()\n                .then_word_set(&[\"nose\", \"noses\"])\n                .t_ws()\n                .t_aco(\"down\"),\n        }\n    }\n}\n\nimpl ExprLinter for LookDownOnesNose {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects `look one's nose down` to `look down one's nose`\"\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let (looktok, prontok, nosetok) = (toks.first()?, toks.get(2)?, toks.get(4)?);\n        let (lookspan, pronspan, nosespan) = (looktok.span, prontok.span, nosetok.span);\n        let (lookstr, pronstr, nosestr) = (\n            lookspan.get_content_string(src),\n            pronspan.get_content_string(src),\n            nosespan.get_content_string(src),\n        );\n\n        Some(Lint {\n            lint_kind: LintKind::Usage,\n            span: toks.span()?,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                format!(\"{lookstr} down {pronstr} {nosestr}\")\n                    .chars()\n                    .collect(),\n                toks.span()?.get_content(src),\n            )],\n            message: \"The correct idiom is `look down one's nose`.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::LookDownOnesNose;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn look_his_nose() {\n        assert_suggestion_result(\n            \"He seemed to look his nose down upon everything\",\n            LookDownOnesNose::default(),\n            \"He seemed to look down his nose upon everything\",\n        );\n    }\n\n    #[test]\n    fn look_my_nose() {\n        assert_suggestion_result(\n            \"I'm the last one to look my nose down at what people do from a moral perspective.\",\n            LookDownOnesNose::default(),\n            \"I'm the last one to look down my nose at what people do from a moral perspective.\",\n        );\n    }\n\n    #[test]\n    fn look_their_nose() {\n        assert_suggestion_result(\n            \"I hate how humans look their nose down on certain animals\",\n            LookDownOnesNose::default(),\n            \"I hate how humans look down their nose on certain animals\",\n        );\n    }\n\n    #[test]\n    fn look_their_noses() {\n        assert_suggestion_result(\n            \"Yet many look their noses down at the right as if it were a used Kleenex.\",\n            LookDownOnesNose::default(),\n            \"Yet many look down their noses at the right as if it were a used Kleenex.\",\n        );\n    }\n\n    #[test]\n    fn look_your_nose() {\n        assert_suggestion_result(\n            \"You look your nose down on me like I am only a breathing object\",\n            LookDownOnesNose::default(),\n            \"You look down your nose on me like I am only a breathing object\",\n        );\n    }\n\n    #[test]\n    fn looking_her_nose() {\n        assert_suggestion_result(\n            \"The long nose definitely helps give the feel of her looking her nose down on others\",\n            LookDownOnesNose::default(),\n            \"The long nose definitely helps give the feel of her looking down her nose on others\",\n        );\n    }\n\n    #[test]\n    fn looking_his_nose() {\n        assert_suggestion_result(\n            \"literally looking his nose down at the commoners\",\n            LookDownOnesNose::default(),\n            \"literally looking down his nose at the commoners\",\n        );\n    }\n\n    #[test]\n    fn looking_their_noses() {\n        assert_suggestion_result(\n            \"It makes no sense that the princesses are looking their noses down on her\",\n            LookDownOnesNose::default(),\n            \"It makes no sense that the princesses are looking down their noses on her\",\n        );\n    }\n\n    #[test]\n    fn looking_your_nose() {\n        assert_suggestion_result(\n            \"Whatever you do, don’t fall into the trap of looking your nose down at the customer.\",\n            LookDownOnesNose::default(),\n            \"Whatever you do, don’t fall into the trap of looking down your nose at the customer.\",\n        );\n    }\n\n    #[test]\n    fn looks_her_nose() {\n        assert_suggestion_result(\n            \"Daenerys looks her nose down at them.\",\n            LookDownOnesNose::default(),\n            \"Daenerys looks down her nose at them.\",\n        );\n    }\n\n    #[test]\n    fn looks_his_nose() {\n        assert_suggestion_result(\n            \"He probably looks his nose down on Wraith, who don't eat inbred humans.\",\n            LookDownOnesNose::default(),\n            \"He probably looks down his nose on Wraith, who don't eat inbred humans.\",\n        );\n    }\n\n    #[test]\n    fn looks_their_nose() {\n        assert_suggestion_result(\n            \"Your friend looks their nose down at them and wants to unfriend them based on how little money they have.\",\n            LookDownOnesNose::default(),\n            \"Your friend looks down their nose at them and wants to unfriend them based on how little money they have.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/looking_forward_to.rs",
    "content": "use hashbrown::HashSet;\n\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{Expr, FixedPhrase, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct LookingForwardTo {\n    expr: SequenceExpr,\n}\n\nimpl Default for LookingForwardTo {\n    fn default() -> Self {\n        let looking_forward_to = FixedPhrase::from_phrase(\"looking forward to\");\n\n        let pattern = SequenceExpr::with(looking_forward_to)\n            .t_ws()\n            // TODO: update the use the verb with progressive tense function later\n            .then_verb();\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for LookingForwardTo {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], src: &[char]) -> Option<Lint> {\n        let span = matched_tokens.last()?.span;\n        let verb = matched_tokens.last()?.span.get_content_string(src);\n        if verb.ends_with(\"ing\") {\n            return None;\n        }\n\n        // TODO: create a util function to handle the appending of -ing\n        // to verbs, taking into account exceptions and irregular forms.\n        let exception_word: HashSet<&str> = [\n            // Verbs ending in -ee\n            \"see\",\n            \"flee\",\n            \"agree\",\n            \"knee\",\n            \"guarantee\",\n            // Verbs ending in -oe\n            \"hoe\",\n            \"toe\",\n            // Verbs ending in -ye or to avoid confusion\n            \"dye\",\n            \"eye\",\n            // Irregular/spelling clarification\n            \"singe\",\n            \"tinge\",\n        ]\n        .iter()\n        .cloned()\n        .collect();\n\n        let gerund_form: String =\n            if verb.to_lowercase().ends_with('e') && !exception_word.contains(verb.as_str()) {\n                verb.trim_end_matches('e').to_string() + \"ing\"\n            } else {\n                format!(\"{verb}ing\")\n            };\n\n        println!(\"gerund_form: -{gerund_form}- -- verb: -{verb}-\");\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            message: format!(\n                \"The verb `{verb}` must be in the gerund form (verb + -ing) after 'looking forward to'.\",\n            ),\n            suggestions: vec![Suggestion::replace_with_match_case(\n                gerund_form.chars().collect(),\n                span.get_content(src),\n            )],\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"This rule identifies instances where the phrase `looking forward to` is followed by a base form verb instead of the required gerund (verb + `-ing` form).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::LookingForwardTo;\n\n    #[test]\n    fn not_lint_with_correct_verb() {\n        assert_suggestion_result(\n            \"She was looking forward to see the grandchildren again.\",\n            LookingForwardTo::default(),\n            \"She was looking forward to seeing the grandchildren again.\",\n        );\n        // assert_lint_count(\n        //     \"She was looking forward to seeing the grandchildren again.\",\n        //     LookingForwardTo::default(),\n        //     0,\n        // );\n    }\n\n    #[test]\n    fn lint_with_incorrect_verb() {\n        assert_suggestion_result(\n            \"She was looking forward to see the grandchildren again.\",\n            LookingForwardTo::default(),\n            \"She was looking forward to seeing the grandchildren again.\",\n        );\n    }\n\n    #[test]\n    fn lint_with_incorrect_verb_ending_in_e() {\n        assert_suggestion_result(\n            \"She was looking forward to make the grandchildren happy.\",\n            LookingForwardTo::default(),\n            \"She was looking forward to making the grandchildren happy.\",\n        );\n    }\n\n    #[test]\n    fn not_lint_with_non_verb() {\n        assert_lint_count(\n            \"She was looking forward to the grandchildren's visit.\",\n            LookingForwardTo::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/map_phrase_linter.rs",
    "content": "use super::{ExprLinter, Lint, LintKind};\nuse crate::expr::Expr;\nuse crate::expr::FixedPhrase;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::SimilarToPhrase;\nuse crate::linting::Suggestion;\nuse crate::linting::expr_linter::Chunk;\nuse crate::weir::weir_expr_to_expr;\nuse crate::{Token, TokenStringExt};\n\npub struct MapPhraseLinter {\n    description: String,\n    expr: Box<dyn Expr>,\n    correct_forms: Vec<String>,\n    message: String,\n    lint_kind: LintKind,\n}\n\nimpl MapPhraseLinter {\n    pub fn new(\n        expr: Box<dyn Expr>,\n        correct_forms: impl IntoIterator<Item = impl ToString>,\n        message: impl ToString,\n        description: impl ToString,\n        lint_kind: Option<LintKind>,\n    ) -> Self {\n        Self {\n            description: description.to_string(),\n            expr,\n            correct_forms: correct_forms.into_iter().map(|f| f.to_string()).collect(),\n            message: message.to_string(),\n            lint_kind: lint_kind.unwrap_or(LintKind::Miscellaneous),\n        }\n    }\n\n    pub fn new_similar_to_phrase(phrase: &'static str, detectable_distance: u8) -> Self {\n        Self::new(\n            Box::new(SimilarToPhrase::from_phrase(phrase, detectable_distance)),\n            [phrase],\n            format!(\"Did you mean the phrase `{phrase}`?\"),\n            format!(\"Looks for slight improper modifications to the phrase `{phrase}`.\"),\n            None,\n        )\n    }\n\n    pub fn new_fixed_phrases(\n        phrase: impl IntoIterator<Item = impl AsRef<str>>,\n        correct_forms: impl IntoIterator<Item = impl ToString>,\n        message: impl ToString,\n        description: impl ToString,\n        lint_kind: Option<LintKind>,\n    ) -> Self {\n        let patterns = LongestMatchOf::new(\n            phrase\n                .into_iter()\n                .map(|p| {\n                    let expr: Box<dyn Expr> = Box::new(weir_expr_to_expr(p.as_ref()).unwrap());\n                    expr\n                })\n                .collect(),\n        );\n\n        Self::new(\n            Box::new(patterns),\n            correct_forms,\n            message,\n            description,\n            lint_kind,\n        )\n    }\n\n    pub fn new_fixed_phrase(\n        phrase: impl AsRef<str>,\n        correct_forms: impl IntoIterator<Item = impl ToString>,\n        message: impl ToString,\n        description: impl ToString,\n        lint_kind: Option<LintKind>,\n    ) -> Self {\n        Self::new(\n            Box::new(FixedPhrase::from_phrase(phrase.as_ref())),\n            correct_forms,\n            message,\n            description,\n            lint_kind,\n        )\n    }\n\n    pub fn new_closed_compound(phrase: impl AsRef<str>, correct_form: impl ToString) -> Self {\n        let message = format!(\n            \"Did you mean the closed compound `{}`?\",\n            correct_form.to_string()\n        );\n\n        let description = format!(\n            \"Looks for incorrect spacing inside the closed compound `{}`.\",\n            correct_form.to_string()\n        );\n\n        Self::new_fixed_phrase(\n            phrase,\n            [correct_form],\n            message,\n            description,\n            Some(LintKind::Miscellaneous),\n        )\n    }\n}\n\nimpl ExprLinter for MapPhraseLinter {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let matched_text = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: self.lint_kind,\n            suggestions: self\n                .correct_forms\n                .iter()\n                .map(|correct_form| {\n                    Suggestion::replace_with_match_case(\n                        correct_form.chars().collect(),\n                        matched_text,\n                    )\n                })\n                .collect(),\n            message: self.message.to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        self.description.as_str()\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/map_phrase_set_linter.rs",
    "content": "use super::{ExprLinter, Lint, LintKind};\nuse crate::CharStringExt;\nuse crate::expr::Expr;\nuse crate::expr::FixedPhrase;\nuse crate::expr::LongestMatchOf;\nuse crate::linting::Suggestion;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{Token, TokenStringExt};\n\npub struct MapPhraseSetLinter<'a> {\n    description: String,\n    expr: LongestMatchOf,\n    wrong_forms_to_correct_forms: &'a [(&'a str, &'a str)],\n    multi_wrong_forms_to_multi_correct_forms: &'a [(&'a [&'a str], &'a [&'a str])],\n    message: String,\n    lint_kind: LintKind,\n}\n\nimpl<'a> MapPhraseSetLinter<'a> {\n    pub fn one_to_one(\n        wrong_forms_to_correct_forms: &'a [(&'a str, &'a str)],\n        message: impl ToString,\n        description: impl ToString,\n        lint_kind: Option<LintKind>,\n    ) -> Self {\n        let expr = LongestMatchOf::new(\n            wrong_forms_to_correct_forms\n                .iter()\n                .map(|(wrong_form, _correct_form)| {\n                    let expr: Box<dyn Expr> = Box::new(FixedPhrase::from_phrase(wrong_form));\n                    expr\n                })\n                .collect(),\n        );\n\n        Self {\n            description: description.to_string(),\n            expr,\n            wrong_forms_to_correct_forms,\n            multi_wrong_forms_to_multi_correct_forms: &[],\n            message: message.to_string(),\n            lint_kind: lint_kind.unwrap_or(LintKind::Miscellaneous),\n        }\n    }\n\n    pub fn many_to_many(\n        multi_wrong_forms_to_multi_correct_forms: &'a [(&'a [&'a str], &'a [&'a str])],\n        message: impl ToString,\n        description: impl ToString,\n        lint_kind: Option<LintKind>,\n    ) -> Self {\n        let mut lmo = LongestMatchOf::new(Vec::new());\n        for (wrong_forms, _correct_forms) in multi_wrong_forms_to_multi_correct_forms {\n            for wrong_form in wrong_forms.iter() {\n                lmo.add(FixedPhrase::from_phrase(wrong_form));\n            }\n        }\n        let expr = lmo;\n\n        Self {\n            description: description.to_string(),\n            expr,\n            wrong_forms_to_correct_forms: &[],\n            multi_wrong_forms_to_multi_correct_forms,\n            message: message.to_string(),\n            lint_kind: lint_kind.unwrap_or(LintKind::Miscellaneous),\n        }\n    }\n}\n\nimpl<'a> ExprLinter for MapPhraseSetLinter<'a> {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let matched_text = span.get_content(source);\n\n        let mut suggestions: Vec<_> = self\n            .wrong_forms_to_correct_forms\n            .iter()\n            .filter(|(wrong_form, _)| matched_text.eq_ignore_ascii_case_str(wrong_form))\n            .map(|(_, correct_form)| {\n                Suggestion::replace_with_match_case(correct_form.chars().collect(), matched_text)\n            })\n            .collect();\n\n        let many_to_many_suggestions: Vec<_> = self\n            .multi_wrong_forms_to_multi_correct_forms\n            .iter()\n            .flat_map(|(wrong_forms, correct_forms)| {\n                wrong_forms\n                    .iter()\n                    .filter(move |&&wrong_form| matched_text.eq_ignore_ascii_case_str(wrong_form))\n                    .flat_map(move |_| {\n                        correct_forms.iter().map(move |correct_form| {\n                            Suggestion::replace_with_match_case(\n                                correct_form.chars().collect(),\n                                matched_text,\n                            )\n                        })\n                    })\n            })\n            .collect();\n\n        suggestions.extend(many_to_many_suggestions);\n\n        if suggestions.is_empty() {\n            return None;\n        }\n\n        Some(Lint {\n            span,\n            lint_kind: self.lint_kind,\n            suggestions,\n            message: self.message.to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        self.description.as_str()\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/mass_nouns/mass_plurals.rs",
    "content": "use hashbrown::HashSet;\n\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    CharStringExt, Token, TokenStringExt,\n    expr::{All, Expr, FirstMatchOf, FixedPhrase, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    spell::Dictionary,\n};\n\npub struct MassPlurals<D> {\n    expr: Box<dyn Expr>,\n    dict: D,\n}\n\nimpl<D> MassPlurals<D>\nwhere\n    D: Dictionary,\n{\n    pub fn new(dict: D) -> Self {\n        let oov = SequenceExpr::default().then_oov();\n        let looks_plural = SequenceExpr::with(|tok: &Token, src: &[char]| {\n            tok.span\n                .get_content(src)\n                .ends_with_ignore_ascii_case_chars(&['s'])\n        });\n        let oov_looks_plural = All::new(vec![Box::new(oov), Box::new(looks_plural)]);\n\n        let phrases = FirstMatchOf::new(vec![\n            Box::new(FixedPhrase::from_phrase(\"real estates\")),\n            Box::new(FixedPhrase::from_phrase(\"source codes\")),\n            Box::new(FixedPhrase::from_phrase(\"wear and tears\")),\n        ]);\n\n        Self {\n            expr: Box::new(FirstMatchOf::new(vec![\n                Box::new(oov_looks_plural),\n                Box::new(phrases),\n            ])),\n            dict,\n        }\n    }\n\n    fn is_mass_noun_in_dictionary(&self, chars: &[char]) -> bool {\n        self.dict\n            .get_word_metadata(chars)\n            .is_some_and(|wmd| wmd.is_mass_noun_only())\n    }\n\n    fn is_mass_noun_in_dictionary_str(&self, s: &str) -> bool {\n        self.dict\n            .get_word_metadata_str(s)\n            .is_some_and(|wmd| wmd.is_mass_noun_only())\n    }\n}\n\nimpl<D> ExprLinter for MassPlurals<D>\nwhere\n    D: Dictionary,\n{\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let invalid_plural_toks = toks;\n\n        let mut valid_singulars: HashSet<Box<[char]>> = HashSet::new();\n\n        if invalid_plural_toks.len() != 1 {\n            // Multiple tokens means we matched a fixed phrase\n            let phrase = invalid_plural_toks.span()?.get_content(src);\n            valid_singulars.insert(phrase[..phrase.len() - 1].into());\n        } else {\n            let invalid_plural_tok = &invalid_plural_toks[0];\n            // Not a fixed phrase, so it's a single word that's not in the dictionary and ends with -s\n            let mut remaining_chars = invalid_plural_tok.span.get_content(src);\n\n            // -s\n            if remaining_chars.ends_with(&['s']) {\n                remaining_chars = &remaining_chars[..remaining_chars.len() - 1];\n\n                if self.is_mass_noun_in_dictionary(remaining_chars) {\n                    valid_singulars.insert(remaining_chars.into());\n                }\n\n                // -es\n                if remaining_chars.ends_with(&['e']) {\n                    remaining_chars = &remaining_chars[..remaining_chars.len() - 1];\n\n                    if self.is_mass_noun_in_dictionary(remaining_chars) {\n                        valid_singulars.insert(remaining_chars.into());\n                    }\n\n                    // -ies -> -y\n                    if remaining_chars.ends_with(&['i']) {\n                        remaining_chars = &remaining_chars[..remaining_chars.len() - 1];\n\n                        let y_singular = format!(\"{}y\", remaining_chars.to_string());\n                        if self.is_mass_noun_in_dictionary_str(&y_singular) {\n                            let y_singular_chars: Box<[char]> =\n                                y_singular.chars().collect::<Vec<char>>().into_boxed_slice();\n                            valid_singulars.insert(y_singular_chars.clone());\n                        }\n                    }\n                }\n            }\n        }\n\n        if valid_singulars.is_empty() {\n            return None;\n        }\n\n        let message = format!(\n            \"The {} `{}` is a mass noun and should not be pluralized.\",\n            if invalid_plural_toks.len() == 1 {\n                \"word\"\n            } else {\n                \"term\"\n            },\n            valid_singulars\n                .iter()\n                .map(|s| s.to_string())\n                .collect::<Vec<String>>()\n                .join(\"`, `\")\n        );\n\n        let span = invalid_plural_toks.span()?;\n\n        let suggestions: Vec<Suggestion> = valid_singulars\n            .iter()\n            .map(|sing| {\n                Suggestion::replace_with_match_case(sing.clone().into(), span.get_content(src))\n            })\n            .collect();\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Grammar,\n            suggestions,\n            message,\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Looks for plural forms of mass nouns that have no plural.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::{\n        linting::tests::{assert_lint_count, assert_suggestion_result},\n        spell::FstDictionary,\n    };\n\n    use super::MassPlurals;\n\n    #[test]\n    fn flag_advicess() {\n        assert_lint_count(\n            \"You gave me bad advices.\",\n            MassPlurals::new(FstDictionary::curated()),\n            1,\n        );\n    }\n\n    #[test]\n    fn flag_source_codes_and_softwares() {\n        assert_lint_count(\n            \"Do we have the source codes for these softwares?\",\n            MassPlurals::new(FstDictionary::curated()),\n            2,\n        );\n    }\n\n    #[test]\n    fn flag_noun_ending_in_ies() {\n        assert_lint_count(\n            \"Celibacies are better than sex.\",\n            MassPlurals::new(FstDictionary::curated()),\n            1,\n        );\n    }\n\n    #[test]\n    fn flag_real_estates() {\n        assert_lint_count(\n            \"Instead of giving any of her many luxury real estates or multi-million dollar fortune ...\",\n            MassPlurals::new(FstDictionary::curated()),\n            1,\n        );\n    }\n\n    #[test]\n    fn flag_wear_and_tears() {\n        assert_lint_count(\n            \"Transit costs were high in terms of time, finances, and vehicle wear and tears, which posed significant obstacles to international commerce\",\n            MassPlurals::new(FstDictionary::curated()),\n            1,\n        );\n    }\n\n    #[test]\n    fn fix_wear_and_tears() {\n        assert_suggestion_result(\n            \"Transit costs were high in terms of time, finances, and vehicle wear and tears, which posed significant obstacles to international commerce\",\n            MassPlurals::new(FstDictionary::curated()),\n            \"Transit costs were high in terms of time, finances, and vehicle wear and tear, which posed significant obstacles to international commerce\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/mass_nouns/mod.rs",
    "content": "mod mass_plurals;\nmod noun_countability;\n\nuse mass_plurals::MassPlurals;\nuse noun_countability::NounCountability;\n\nuse crate::{\n    Document,\n    linting::{Lint, Linter},\n    remove_overlaps,\n    spell::Dictionary,\n};\n\npub struct MassNouns<D> {\n    mass_plurals: MassPlurals<D>,\n    noun_countability: NounCountability,\n}\n\nimpl<D> MassNouns<D>\nwhere\n    D: Dictionary + Clone,\n{\n    pub fn new(dict: D) -> Self {\n        Self {\n            mass_plurals: MassPlurals::new(dict.clone()),\n            noun_countability: NounCountability::default(),\n        }\n    }\n}\n\nimpl<D> Linter for MassNouns<D>\nwhere\n    D: Dictionary,\n{\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        lints.extend(self.mass_plurals.lint(document));\n        lints.extend(self.noun_countability.lint(document));\n\n        remove_overlaps(&mut lints);\n\n        lints\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects mass nouns used as countable nouns.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::{\n        linting::tests::{assert_lint_count, assert_suggestion_result},\n        spell::FstDictionary,\n    };\n\n    use super::MassNouns;\n\n    #[test]\n    fn flag_advices_and_an_advice() {\n        assert_lint_count(\n            \"I asked for an advice and he gave me two advices!\",\n            MassNouns::new(FstDictionary::curated()),\n            2,\n        );\n    }\n\n    #[test]\n    fn correct_a_luggage() {\n        assert_suggestion_result(\n            \"I managed to pack all my clothing into one luggage.\",\n            MassNouns::new(FstDictionary::curated()),\n            \"I managed to pack all my clothing into one suitcase.\",\n        );\n    }\n\n    #[test]\n    fn correct_clothings() {\n        assert_suggestion_result(\n            \"I managed to pack all my clothings into one suitcase.\",\n            MassNouns::new(FstDictionary::curated()),\n            \"I managed to pack all my clothing into one suitcase.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/mass_nouns/noun_countability.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Lrc, Span, Token, TokenStringExt,\n    expr::{Expr, LongestMatchOf, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::{IndefiniteArticle, WordSet},\n};\n\n#[derive(Debug, Clone, Copy)]\npub enum Correction {\n    // Drop the determiner or quantifier\n    DropDQ,\n    // Replace the determiner or quantifier with a string\n    ReplaceDQWith(&'static str),\n    // Insert a string between the determiner or quantifier and the mass noun\n    InsertBetween(&'static str),\n    // Replace the mass noun with a string\n    ReplaceNounWith(&'static str),\n}\n\nuse Correction::*;\n\npub struct NounCountability {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for NounCountability {\n    fn default() -> Self {\n        let quantifier = WordSet::new(&[\n            \"another\", \"both\", \"each\", \"every\", \"few\", \"fewer\", \"many\", \"multiple\", \"one\",\n            \"several\",\n        ]);\n\n        // A determiner or quantifier followed by a mass noun\n        let detquant_mass = Lrc::new(\n            SequenceExpr::any_of(vec![\n                Box::new(IndefiniteArticle::default()),\n                Box::new(quantifier),\n            ])\n            .then_whitespace()\n            .then_mass_noun_only(),\n        );\n\n        let detauant_mass_then_hyphen =\n            Lrc::new(SequenceExpr::with(detquant_mass.clone()).then_hyphen());\n\n        let detquant_mass_following_context = Lrc::new(\n            SequenceExpr::with(detquant_mass.clone())\n                .then_whitespace()\n                // If we don't get the word, this won't be the longest match\n                .then_any_word(),\n        );\n\n        Self {\n            expr: Box::new(LongestMatchOf::new(vec![\n                Box::new(detquant_mass),\n                Box::new(detauant_mass_then_hyphen),\n                Box::new(detquant_mass_following_context),\n            ])),\n        }\n    }\n}\n\nimpl ExprLinter for NounCountability {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let toks_chars = toks.span()?.get_content(src);\n\n        // 4 tokens means the phrase was followed by a hyphen\n        if toks.len() == 4 {\n            return None;\n        }\n        // 3 tokens means the phrase was at the end of a chunk/sentence.\n        // 5 tokens means the phrase was in the middle of a chunk/sentence.\n        // If it's in the middle then we check if the next word token is a noun or OOV.\n        // Since the last token of our phrase is the mass noun, this would make it part of a compound noun.\n        if toks.len() == 5 && (toks.last()?.kind.is_noun() || toks.last()?.kind.is_oov()) {\n            return None;\n        }\n\n        // the determiner or quantifier\n        let dq = toks[0].span.get_content_string(src).to_lowercase();\n\n        // the mass noun\n        let noun = toks[2].span.get_content_string(src).to_lowercase();\n\n        let synonym_corrections: &'static [Correction] = match (noun.as_str(), dq.as_str()) {\n            (\"advice\", \"a\" | \"an\" | \"another\" | \"each\" | \"every\" | \"one\") => &[\n                ReplaceNounWith(\"tip\"),\n                ReplaceNounWith(\"suggestion\"),\n                ReplaceNounWith(\"recommendation\"),\n            ],\n            (\"advice\", \"both\" | \"many\" | \"multiple\" | \"several\") => &[\n                ReplaceNounWith(\"tips\"),\n                ReplaceNounWith(\"suggestions\"),\n                ReplaceNounWith(\"recommendations\"),\n            ],\n            (\"clothing\", \"a\" | \"an\" | \"another\" | \"each\" | \"every\" | \"one\") => {\n                &[ReplaceNounWith(\"garment\")]\n            }\n            (\"clothing\", \"both\" | \"many\" | \"multiple\" | \"several\") => {\n                &[ReplaceNounWith(\"garments\")]\n            }\n            (\"luggage\", \"a\" | \"an\" | \"another\" | \"each\" | \"every\" | \"one\") => {\n                &[ReplaceNounWith(\"suitcase\"), ReplaceNounWith(\"bag\")]\n            }\n            (\"luggage\", \"both\" | \"many\" | \"multiple\" | \"several\") => {\n                &[ReplaceNounWith(\"suitcases\"), ReplaceNounWith(\"bags\")]\n            }\n            (\"punctuation\", \"a\" | \"an\" | \"another\" | \"each\" | \"every\" | \"one\") => {\n                &[ReplaceNounWith(\"punctuation mark\")]\n            }\n            (\"punctuation\", \"both\" | \"many\" | \"multiple\" | \"several\") => {\n                &[ReplaceNounWith(\"punctuation marks\")]\n            }\n            (\"software\", \"a\") => &[\n                ReplaceNounWith(\"program\"),\n                ReplaceNounWith(\"software package\"),\n                ReplaceNounWith(\"software tool\"),\n            ],\n            (\"software\", \"an\" | \"another\" | \"each\" | \"every\" | \"one\") => &[\n                ReplaceNounWith(\"app\"),\n                ReplaceNounWith(\"application\"),\n                ReplaceNounWith(\"program\"),\n                ReplaceNounWith(\"software package\"),\n                ReplaceNounWith(\"software tool\"),\n            ],\n            (\"software\", \"both\" | \"many\" | \"multiple\" | \"several\") => &[\n                ReplaceNounWith(\"apps\"),\n                ReplaceNounWith(\"applications\"),\n                ReplaceNounWith(\"programs\"),\n                ReplaceNounWith(\"software packages\"),\n                ReplaceNounWith(\"software tools\"),\n            ],\n            _ => &[],\n        };\n\n        let no_piece = matches!(noun.as_str(), \"punctuation\" | \"traffic\");\n\n        let basic_corrections: &'static [Correction] = match (dq.as_str(), no_piece) {\n            (\"a\" | \"an\", true) => &[DropDQ, ReplaceDQWith(\"some\")],\n            (\"a\" | \"an\", false) => &[DropDQ, ReplaceDQWith(\"some\"), ReplaceDQWith(\"a piece of\")],\n            (\"another\" | \"each\" | \"every\" | \"one\", true) => &[],\n            (\"another\" | \"each\" | \"every\" | \"one\", false) => &[InsertBetween(\"piece of\")],\n            (\"both\" | \"multiple\" | \"several\", true) => &[],\n            (\"both\" | \"multiple\" | \"several\", false) => &[InsertBetween(\"pieces of\")],\n            (\"few\", true) => &[ReplaceDQWith(\"little\")],\n            (\"few\", false) => &[ReplaceDQWith(\"little\"), InsertBetween(\"pieces of\")],\n            (\"fewer\", true) => &[ReplaceDQWith(\"less\")],\n            (\"fewer\", false) => &[ReplaceDQWith(\"less\"), InsertBetween(\"pieces of\")],\n            (\"many\", true) => &[ReplaceDQWith(\"much\"), ReplaceDQWith(\"a lot of\")],\n            (\"many\", false) => &[\n                ReplaceDQWith(\"much\"),\n                ReplaceDQWith(\"a lot of\"),\n                InsertBetween(\"pieces of\"),\n            ],\n            _ => &[],\n        };\n\n        let mut suggestions = Vec::new();\n\n        for correction in synonym_corrections {\n            let parts = match correction {\n                ReplaceNounWith(w) => &[&dq, *w],\n                _ => return None,\n            };\n            suggestions.push(Suggestion::replace_with_match_case(\n                parts.join(\" \").chars().collect(),\n                toks_chars,\n            ));\n        }\n\n        suggestions.extend(basic_corrections.iter().map(|correction| {\n            let parts: &[&str] = match correction {\n                DropDQ => &[&noun],\n                ReplaceDQWith(w) => &[w, &noun],\n                InsertBetween(w) => &[&dq, w, &noun],\n                ReplaceNounWith(w) => &[&dq, w],\n            };\n            Suggestion::replace_with_match_case(parts.join(\" \").chars().collect(), toks_chars)\n        }));\n\n        Some(Lint {\n            span: Span::new(toks[0].span.start, toks[2].span.end),\n            lint_kind: LintKind::Agreement,\n            suggestions,\n            message: format!(\"`{noun}` is a mass noun.\"),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Correct mass nouns that are preceded by the wrong determiners or quantifiers.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::NounCountability;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_a() {\n        assert_suggestion_result(\n            \"If the unit turns out to be noisy, can I expect a firmware with phase ...\",\n            NounCountability::default(),\n            \"If the unit turns out to be noisy, can I expect some firmware with phase ...\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"replace_with_match_case matches by index, not by lower vs title vs upper\"]\n    fn corrects_a_title_case() {\n        assert_suggestion_result(\n            \"Simple POC of a Ransomware.\",\n            NounCountability::default(),\n            \"Simple POC of a piece of Ransomware.\",\n        );\n    }\n\n    #[test]\n    fn corrects_an() {\n        assert_suggestion_result(\n            \"The PlaySEM platform provides an infrastructure for playing and rendering sensory effects in multimedia applications.\",\n            NounCountability::default(),\n            \"The PlaySEM platform provides infrastructure for playing and rendering sensory effects in multimedia applications.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"replace_with_match_case matches by index, not by lower vs title vs upper\"]\n    fn corrects_an_title_case() {\n        assert_suggestion_result(\n            \"An Infrastructure for Integrated EDA.\",\n            NounCountability::default(),\n            \"Infrastructure for Integrated EDA.\",\n        );\n    }\n\n    #[test]\n    fn corrects_another() {\n        assert_suggestion_result(\n            \"Another ransomware made by me for fun.\",\n            NounCountability::default(),\n            \"Another piece of ransomware made by me for fun.\",\n        );\n    }\n\n    #[test]\n    fn corrects_both() {\n        assert_suggestion_result(\n            \"Make a terminal show both information of your CPU and GPU!\",\n            NounCountability::default(),\n            \"Make a terminal show both pieces of information of your CPU and GPU!\",\n        );\n    }\n\n    #[test]\n    // \"piece of traffic\" sounds very weird\n    fn can_correct_each_with_traffic() {\n        assert_suggestion_result(\n            \"Beside each traffic there is also a pedestrian traffic light.\",\n            NounCountability::default(),\n            \"Beside each traffic there is also a pedestrian traffic light.\",\n        );\n    }\n\n    #[test]\n    fn corrects_every() {\n        assert_suggestion_result(\n            \"Capacitor plugin to get access to every info about the device software and hardware.\",\n            NounCountability::default(),\n            \"Capacitor plugin to get access to every piece of info about the device software and hardware.\",\n        );\n    }\n\n    #[test]\n    fn corrects_few() {\n        assert_suggestion_result(\n            \"Displays a few information to help you rotating through your spells.\",\n            NounCountability::default(),\n            \"Displays a few pieces of information to help you rotating through your spells.\",\n        );\n    }\n\n    #[test]\n    fn corrects_many() {\n        assert_suggestion_result(\n            \"It shows clearly how many information about objects you can get with old search ...\",\n            NounCountability::default(),\n            \"It shows clearly how much information about objects you can get with old search ...\",\n        );\n    }\n\n    #[test]\n    fn corrects_one() {\n        assert_suggestion_result(\n            \"For example, it only makes sense to compare global protein q-value filtering in one software with that in another.\",\n            NounCountability::default(),\n            \"For example, it only makes sense to compare global protein q-value filtering in one application with that in another.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"'in' = noun because conflated with 'IN' (Indiana)\"]\n    fn corrects_several() {\n        assert_suggestion_result(\n            \"The program takes in input a single XML file and outputs several info in different files.\",\n            NounCountability::default(),\n            \"The program takes in input a single XML file and outputs several pieces of info in different files.\",\n        );\n    }\n\n    #[test]\n    fn dont_correct_many_compound() {\n        assert_lint_count(\n            \"Additionally, many software development platforms also provide access to a community of developers.\",\n            NounCountability::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore]\n    fn dont_correct_first_do_correct_second() {\n        assert_suggestion_result(\n            \"A advice description is required for each advice.\",\n            NounCountability::default(),\n            \"A advice description is required for each piece of advice.\",\n        );\n    }\n\n    #[test]\n    fn corrects_an_advice() {\n        assert_suggestion_result(\n            \"Origin will not always provide the right method when an advice is applied to a bridged method.\",\n            NounCountability::default(),\n            \"Origin will not always provide the right method when an tip is applied to a bridged method.\",\n        );\n    }\n\n    #[test]\n    fn corrects_one_advice() {\n        assert_suggestion_result(\n            \"Is it possible to use more than one advice on the same method?\",\n            NounCountability::default(),\n            \"Is it possible to use more than one tip on the same method?\",\n        );\n    }\n\n    #[test]\n    fn corrects_every_advice() {\n        assert_suggestion_result(\n            \"Ideally every advice would have a unique identifier.\",\n            NounCountability::default(),\n            \"Ideally every tip would have a unique identifier.\",\n        );\n    }\n\n    #[test]\n    fn corrects_a_advice() {\n        assert_suggestion_result(\n            \"Hello! I need a advice.\",\n            NounCountability::default(),\n            \"Hello! I need a tip.\",\n        );\n    }\n\n    #[test]\n    fn corrects_a_software() {\n        assert_suggestion_result(\n            \"HGroup-DIA, a software for analyzing multiple DIA data files.\",\n            NounCountability::default(),\n            \"HGroup-DIA, a software package for analyzing multiple DIA data files.\",\n        );\n    }\n\n    #[test]\n    fn corrects_a_luggage() {\n        assert_suggestion_result(\n            \"A luggage with a little engine, sensors (gps, ultrasounds, etc...) and bluetooth connection that will follow you everywhere.\",\n            NounCountability::default(),\n            \"A suitcase with a little engine, sensors (gps, ultrasounds, etc...) and bluetooth connection that will follow you everywhere.\",\n        );\n    }\n\n    #[test]\n    fn corrects_multiple_advice() {\n        assert_suggestion_result(\n            \"Update Advice API doc for event and data params, multiple advice.\",\n            NounCountability::default(),\n            \"Update Advice API doc for event and data params, multiple suggestions.\",\n        );\n    }\n\n    #[test]\n    fn corrects_every_software() {\n        assert_suggestion_result(\n            \"Rewrite every software known to man in Rust.\",\n            NounCountability::default(),\n            \"Rewrite every application known to man in Rust.\",\n        );\n    }\n\n    #[test]\n    fn corrects_each_furniture() {\n        assert_suggestion_result(\n            \"the position (x, y) and size (height, width, length) of each furniture\",\n            NounCountability::default(),\n            \"the position (x, y) and size (height, width, length) of each piece of furniture\",\n        );\n    }\n\n    #[test]\n    fn corrects_one_clothing() {\n        assert_suggestion_result(\n            \"Each list element represents one clothing based on weather conditions.\",\n            NounCountability::default(),\n            \"Each list element represents one garment based on weather conditions.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_compound_nouns() {\n        assert_lint_count(\n            \"Fill in the blanks following the creation of each Furniture class instance.\",\n            NounCountability::default(),\n            0,\n        );\n        assert_lint_count(\n            \"This project is a clothing shop that let users buy and pay for they purchases.\",\n            NounCountability::default(),\n            0,\n        );\n        assert_lint_count(\n            \"Yet another software router.\",\n            NounCountability::default(),\n            0,\n        );\n        assert_lint_count(\n            \"Calculate a rate for every software component.\",\n            NounCountability::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_fewer() {\n        assert_suggestion_result(\n            \"Why do my packages have fewer information?\",\n            NounCountability::default(),\n            \"Why do my packages have less information?\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_fewer_in_compound_noun() {\n        assert_lint_count(\n            \"Additionally, less traffic leads to fewer traffic jams, resulting in a more fluent, thus more efficient, trip.\",\n            NounCountability::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_mass_noun_part_of_hyphenated_compound() {\n        assert_lint_count(\n            \"Internally, we have a hardware-in-the-loop Jenkins test suite that builds and unit tests the various processes.\",\n            NounCountability::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_punctuation() {\n        assert_suggestion_result(\n            \"Not in this form because it currently works with one punctuation with one letter either side.\",\n            NounCountability::default(),\n            \"Not in this form because it currently works with one punctuation mark with one letter either side.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/means_a_lot_to.rs",
    "content": "use crate::{\n    Lint, Token, TokenStringExt,\n    expr::{Expr, FixedPhrase, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::WordSet,\n};\n\npub struct MeansALotTo {\n    expr: SequenceExpr,\n}\n\nimpl Default for MeansALotTo {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::default()\n                // Note that \"meaning a lot to\" is not used.\n                .t_set(&[\"mean\", \"means\", \"meant\"])\n                .t_ws()\n                .then_any_of(vec![\n                    Box::new(FixedPhrase::from_phrase(\"a lot\")),\n                    Box::new(WordSet::new(&[\"alot\", \"lot\"])),\n                ])\n                .t_ws()\n                .t_aco(\"for\"),\n        }\n    }\n}\n\nimpl ExprLinter for MeansALotTo {\n    type Unit = Chunk;\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        if ![5, 7].contains(&toks.len()) {\n            return None;\n        }\n\n        let (span, sug, msg) = match toks.len() {\n            5 => (\n                toks[2..5].span()?,\n                \"a lot to\",\n                \"In this phrase the correct spelling is `a lot` and the correct preposition is `to`.\",\n            ),\n            7 => (\n                toks.last()?.span,\n                \"to\",\n                \"The correct preposition in this phrase is `to`.\",\n            ),\n            _ => return None,\n        };\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                sug.chars().collect(),\n                span.get_content(src),\n            )],\n            message: msg.to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects wrong variants of `means a lot for [someone]` to `means a lot to [someone]`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::MeansALotTo;\n\n    #[test]\n    fn fix_mean_a_lot_for() {\n        assert_suggestion_result(\n            \"It would mean a lot for me and save me a lot of time and effort\",\n            MeansALotTo::default(),\n            \"It would mean a lot to me and save me a lot of time and effort\",\n        );\n    }\n\n    #[test]\n    fn fix_mean_alot_for() {\n        assert_suggestion_result(\n            \"Appreciate it! Would mean alot for me!\",\n            MeansALotTo::default(),\n            \"Appreciate it! Would mean a lot to me!\",\n        );\n    }\n\n    #[test]\n    fn fix_mean_lot_for() {\n        assert_suggestion_result(\n            \"It would be very grateful to achieve number of sponsors for me and it mean lot for me.\",\n            MeansALotTo::default(),\n            \"It would be very grateful to achieve number of sponsors for me and it mean a lot to me.\",\n        );\n    }\n\n    #[test]\n    fn fix_means_a_lot_for() {\n        assert_suggestion_result(\n            \"Your star means a lot for us to develop this project!\",\n            MeansALotTo::default(),\n            \"Your star means a lot to us to develop this project!\",\n        );\n    }\n\n    #[test]\n    fn fix_means_alot_for() {\n        assert_suggestion_result(\n            \"Even a single sponsor means alot for me.\",\n            MeansALotTo::default(),\n            \"Even a single sponsor means a lot to me.\",\n        );\n    }\n\n    #[test]\n    fn fix_means_lot_for() {\n        assert_suggestion_result(\n            \"Any help means lot for me.\",\n            MeansALotTo::default(),\n            \"Any help means a lot to me.\",\n        );\n    }\n\n    #[test]\n    fn fix_meant_a_lot_for() {\n        assert_suggestion_result(\n            \"It meant a lot for me to improve this library further.\",\n            MeansALotTo::default(),\n            \"It meant a lot to me to improve this library further.\",\n        );\n    }\n\n    #[test]\n    fn fix_meant_alot_for() {\n        assert_suggestion_result(\n            \"Thanks a lot by the way. this meant alot for me.\",\n            MeansALotTo::default(),\n            \"Thanks a lot by the way. this meant a lot to me.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/merge_linters.rs",
    "content": "macro_rules! merge_linters {\n    ($name:ident => $($linter:ident),* => $desc:expr) => {\n        pub use merge_rule_hidden::$name;\n\n        mod merge_rule_hidden {\n            use paste::paste;\n            use crate::{Document, linting::{Lint, Linter}, remove_overlaps};\n\n            $(\n                use super::$linter;\n            )*\n\n            paste! {\n                #[derive(Default)]\n                pub struct $name {\n                    $(\n                        [< $linter:snake >]: $linter,\n                    )*\n                }\n\n                impl Linter for $name {\n                    fn lint(&mut self, document: &Document) -> Vec<Lint>{\n                        let mut lints = Vec::new();\n\n                        $(\n                            lints.extend(self.[< $linter:snake >].lint(document));\n                        )*\n\n                        remove_overlaps(&mut lints);\n\n                        lints\n                    }\n\n                    fn description(&self) -> &'static str {\n                        $desc\n                    }\n                }\n            }\n        }\n    };\n}\n\npub(crate) use merge_linters;\n"
  },
  {
    "path": "harper-core/src/linting/merge_words.rs",
    "content": "use std::sync::Arc;\n\nuse itertools::Itertools;\n\nuse super::{Lint, LintKind, Linter, Suggestion};\nuse crate::spell::{Dictionary, FstDictionary};\nuse crate::{CharString, Document, Span};\n\npub struct MergeWords {\n    dict: Arc<FstDictionary>,\n}\n\nimpl MergeWords {\n    pub fn new() -> Self {\n        Self {\n            dict: FstDictionary::curated(),\n        }\n    }\n}\n\nimpl Default for MergeWords {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl Linter for MergeWords {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        let mut merged_word = CharString::new();\n\n        for (a, w, b) in document.tokens().tuple_windows() {\n            if !a.kind.is_word() || !w.kind.is_whitespace() || !b.kind.is_word() {\n                continue;\n            }\n\n            let a_chars = document.get_span_content(&a.span);\n            let b_chars = document.get_span_content(&b.span);\n\n            if (a_chars.len() == 1 && a_chars[0].is_uppercase())\n                || (b_chars.len() == 1 && b_chars[0].is_uppercase())\n            {\n                continue;\n            }\n\n            // Not super helpful in this case, so we skip it\n            if matches!(a_chars, ['a']) || matches!(b_chars, ['a']) {\n                continue;\n            }\n\n            merged_word.clear();\n            merged_word.extend_from_slice(a_chars);\n            merged_word.extend_from_slice(b_chars);\n\n            if self.dict.contains_word(&merged_word)\n                && (!self.dict.contains_word(a_chars) || !self.dict.contains_word(b_chars))\n            {\n                lints.push(Lint {\n                    span: Span::new(a.span.start, b.span.end),\n                    lint_kind: LintKind::WordChoice,\n                    suggestions: vec![Suggestion::ReplaceWith(merged_word.to_vec())],\n                    message: \"It seems these words would go better together.\".to_owned(),\n                    priority: 63,\n                });\n            }\n\n            merged_word.clear();\n            merged_word.extend_from_slice(a_chars);\n            merged_word.push('\\'');\n            merged_word.extend_from_slice(b_chars);\n\n            if self.dict.contains_word(&merged_word)\n                && (!self.dict.contains_word(a_chars) || !self.dict.contains_word(b_chars))\n            {\n                lints.push(Lint {\n                    span: Span::new(a.span.start, b.span.end),\n                    lint_kind: LintKind::WordChoice,\n                    suggestions: vec![Suggestion::ReplaceWith(merged_word.to_vec())],\n                    message: \"It seems you intended to make this a contraction.\".to_owned(),\n                    priority: 63,\n                });\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"Accidentally inserting a space inside a word is common. This rule looks for valid words that are split by whitespace.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::MergeWords;\n\n    #[test]\n    fn clean() {\n        assert_lint_count(\n            \"When referring to the political party, make sure to treat them as a proper noun.\",\n            MergeWords::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn heretofore() {\n        assert_lint_count(\n            \"This is a her etofore unseen problem.\",\n            MergeWords::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn therefore() {\n        assert_lint_count(\"The refore\", MergeWords::default(), 1);\n    }\n\n    #[test]\n    fn that_is_contraction() {\n        assert_suggestion_result(\"That s\", MergeWords::default(), \"That's\");\n    }\n\n    #[test]\n    fn allows_issue_722() {\n        assert_lint_count(\"Leaving S and K alone.\", MergeWords::default(), 0);\n        assert_lint_count(\"Similarly an S with a line.\", MergeWords::default(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/missing_preposition.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::expr::AnchorStart;\nuse crate::expr::Expr;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::patterns::AnyPattern;\nuse crate::patterns::UPOSSet;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind};\nuse crate::linting::expr_linter::Chunk;\n\npub struct MissingPreposition {\n    expr: SequenceExpr,\n}\n\nimpl Default for MissingPreposition {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(\n            AnchorStart.or_longest(\n                SequenceExpr::default()\n                    .then_non_quantifier_determiner()\n                    .t_ws(),\n            ),\n        )\n        .then(UPOSSet::new(&[UPOS::NOUN, UPOS::PRON, UPOS::PROPN]))\n        .t_ws()\n        .then(UPOSSet::new(&[UPOS::AUX]))\n        .t_ws()\n        .then(UPOSSet::new(&[UPOS::ADJ]))\n        .t_ws()\n        .then(UPOSSet::new(&[UPOS::NOUN, UPOS::PRON, UPOS::PROPN]))\n        .then_optional(AnyPattern)\n        .then_optional(AnyPattern);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for MissingPreposition {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> Option<Lint> {\n        if matched_tokens.last()?.kind.is_upos(UPOS::ADP) {\n            return None;\n        }\n\n        Some({\n            Lint {\n                span: matched_tokens[2..4].span()?,\n                lint_kind: LintKind::Miscellaneous,\n                suggestions: vec![],\n                message: \"You may be missing a preposition here.\".to_owned(),\n                priority: 31,\n            }\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Locates potentially missing prepositions.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_no_lints};\n\n    use super::MissingPreposition;\n\n    #[test]\n    fn fixes_issue_1513() {\n        assert_lint_count(\n            \"The city is famous its beaches.\",\n            MissingPreposition::default(),\n            1,\n        );\n        assert_lint_count(\n            \"The students are interested learning.\",\n            MissingPreposition::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn allows_corrected_issue_1513() {\n        assert_no_lints(\n            \"The city is famous for its beaches.\",\n            MissingPreposition::default(),\n        );\n        assert_no_lints(\n            \"The students are interested in learning.\",\n            MissingPreposition::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_without_adj_noun_sequence() {\n        assert_lint_count(\"She is happy.\", MissingPreposition::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_with_preposition_present() {\n        assert_lint_count(\"They are fond of music.\", MissingPreposition::default(), 0);\n        assert_lint_count(\n            \"Students are interested in history.\",\n            MissingPreposition::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn flag_adj_pron_pair() {\n        assert_lint_count(\"He was angry him.\", MissingPreposition::default(), 1);\n    }\n\n    #[test]\n    fn no_lint_empty() {\n        assert_lint_count(\"\", MissingPreposition::default(), 0);\n    }\n\n    #[test]\n    fn allows_tired_herself() {\n        assert_no_lints(\n            \"She had tired herself out with trying.\",\n            MissingPreposition::default(),\n        );\n    }\n\n    #[test]\n    fn allows_terrible_stuff() {\n        assert_no_lints(\n            \"Either it was terrible stuff or the whiskey distorted things.\",\n            MissingPreposition::default(),\n        );\n    }\n\n    #[test]\n    fn allows_issue_1585() {\n        assert_no_lints(\n            \"Each agent has specific tools and tasks orchestrated through a crew workflow.\",\n            MissingPreposition::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/missing_space.rs",
    "content": "use itertools::Itertools;\n\nuse crate::{Document, Punctuation};\n\nuse super::{Lint, LintKind, Linter, Suggestion};\n\npub struct MissingSpace;\n\nimpl Linter for MissingSpace {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for (a, b, c) in document.tokens().tuple_windows() {\n            if let Some(punct) = b.kind.as_punctuation()\n                && [\n                    Punctuation::Period,\n                    Punctuation::Bang,\n                    Punctuation::Question,\n                    Punctuation::Semicolon,\n                ]\n                .contains(punct)\n                && a.kind.is_word()\n                && c.kind.is_word()\n            {\n                lints.push(Lint {\n                    span: b.span,\n                    lint_kind: LintKind::Formatting,\n                    suggestions: vec![Suggestion::InsertAfter(vec![' '])],\n                    message: \"It looks like you're missing a space here.\".to_owned(),\n                    priority: 31,\n                });\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"Looks for missing spaces after a comma or period.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::MissingSpace;\n\n    #[test]\n    fn issue_2191() {\n        assert_suggestion_result(\n            \"people that can help us.So I feel like there\",\n            MissingSpace,\n            \"people that can help us. So I feel like there\",\n        );\n    }\n\n    #[test]\n    fn coffee_table() {\n        assert_suggestion_result(\n            \"The coffee cooled on the table.The room stayed quiet.\",\n            MissingSpace,\n            \"The coffee cooled on the table. The room stayed quiet.\",\n        );\n    }\n\n    #[test]\n    fn open_window() {\n        assert_suggestion_result(\n            \"A small breeze moved through the open window.The curtains lifted and fell in slow waves.\",\n            MissingSpace,\n            \"A small breeze moved through the open window. The curtains lifted and fell in slow waves.\",\n        );\n    }\n\n    #[test]\n    fn hallway_cat() {\n        assert_suggestion_result(\n            \"The cat watched the hallway.Its tail twitched with steady focus.\",\n            MissingSpace,\n            \"The cat watched the hallway. Its tail twitched with steady focus.\",\n        );\n    }\n\n    #[test]\n    fn rain_glass() {\n        assert_suggestion_result(\n            \"Rain tapped against the glass.The sound made the afternoon feel longer.\",\n            MissingSpace,\n            \"Rain tapped against the glass. The sound made the afternoon feel longer.\",\n        );\n    }\n\n    #[test]\n    fn cyclist_house() {\n        assert_suggestion_result(\n            \"A cyclist passed by the house.The wheels hummed softly on the road.\",\n            MissingSpace,\n            \"A cyclist passed by the house. The wheels hummed softly on the road.\",\n        );\n    }\n\n    #[test]\n    fn kettle_stove() {\n        assert_suggestion_result(\n            \"The kettle hissed on the stove.A thin ribbon of steam curled toward the ceiling.\",\n            MissingSpace,\n            \"The kettle hissed on the stove. A thin ribbon of steam curled toward the ceiling.\",\n        );\n    }\n\n    #[test]\n    fn sparrow_fence() {\n        assert_suggestion_result(\n            \"A sparrow landed on the fence.Its wings fluttered once before it settled.\",\n            MissingSpace,\n            \"A sparrow landed on the fence. Its wings fluttered once before it settled.\",\n        );\n    }\n\n    #[test]\n    fn streetlamp_dusk() {\n        assert_suggestion_result(\n            \"The streetlamp flickered at dusk.A pale glow spread across the sidewalk.\",\n            MissingSpace,\n            \"The streetlamp flickered at dusk. A pale glow spread across the sidewalk.\",\n        );\n    }\n\n    #[test]\n    fn distant_laughter() {\n        assert_suggestion_result(\n            \"Someone laughed in the distance.The echo drifted between the buildings.\",\n            MissingSpace,\n            \"Someone laughed in the distance. The echo drifted between the buildings.\",\n        );\n    }\n\n    #[test]\n    fn notebook_desk() {\n        assert_suggestion_result(\n            \"A notebook lay open on the desk.Its blank pages waited for a pen.\",\n            MissingSpace,\n            \"A notebook lay open on the desk. Its blank pages waited for a pen.\",\n        );\n    }\n\n    #[test]\n    fn question_mark_mid_sentence() {\n        assert_suggestion_result(\n            \"Where are you?I looked around the room.\",\n            MissingSpace,\n            \"Where are you? I looked around the room.\",\n        );\n    }\n\n    #[test]\n    fn question_mark_before_name() {\n        assert_suggestion_result(\n            \"Are you coming?Elijah is already waiting.\",\n            MissingSpace,\n            \"Are you coming? Elijah is already waiting.\",\n        );\n    }\n\n    #[test]\n    fn exclamation_mid_sentence() {\n        assert_suggestion_result(\n            \"The door slammed shut!Everyone in the hall jumped.\",\n            MissingSpace,\n            \"The door slammed shut! Everyone in the hall jumped.\",\n        );\n    }\n\n    #[test]\n    fn exclamation_before_clause() {\n        assert_suggestion_result(\n            \"You actually solved it!That changes everything.\",\n            MissingSpace,\n            \"You actually solved it! That changes everything.\",\n        );\n    }\n\n    #[test]\n    fn semicolon_before_adverb() {\n        assert_suggestion_result(\n            \"He wanted to leave;however, he stayed until the end.\",\n            MissingSpace,\n            \"He wanted to leave; however, he stayed until the end.\",\n        );\n    }\n\n    #[test]\n    fn semicolon_connecting_clauses() {\n        assert_suggestion_result(\n            \"The night was cold;stars glittered above the dark field.\",\n            MissingSpace,\n            \"The night was cold; stars glittered above the dark field.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/missing_to.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{Expr, ExprMap, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct MissingTo {\n    map: ExprMap<usize>,\n}\n\nimpl MissingTo {\n    fn strict_controller_words() -> WordSet {\n        WordSet::new(&[\n            \"eager\",\n            \"fail\",\n            \"failed\",\n            \"failing\",\n            \"fails\",\n            \"incline\",\n            \"inclined\",\n            \"inclines\",\n            \"inclining\",\n            \"manage\",\n            \"managed\",\n            \"manages\",\n            \"managing\",\n            \"ready\",\n        ])\n    }\n\n    fn permissive_controller_words() -> WordSet {\n        WordSet::new(&[\n            \"aim\",\n            \"aimed\",\n            \"aiming\",\n            \"aims\",\n            \"agree\",\n            \"agreed\",\n            \"agreeing\",\n            \"agrees\",\n            \"arrange\",\n            \"arranged\",\n            \"arranges\",\n            \"arranging\",\n            \"aspire\",\n            \"aspired\",\n            \"aspires\",\n            \"aspiring\",\n            \"attempt\",\n            \"attempted\",\n            \"attempting\",\n            \"attempts\",\n            \"decide\",\n            \"decided\",\n            \"decides\",\n            \"deciding\",\n            \"endeavor\",\n            \"endeavored\",\n            \"endeavoring\",\n            \"endeavors\",\n            \"endeavour\",\n            \"endeavoured\",\n            \"endeavouring\",\n            \"endeavours\",\n            \"eager\",\n            \"expect\",\n            \"expected\",\n            \"expecting\",\n            \"expects\",\n            \"forget\",\n            \"forgot\",\n            \"forgotten\",\n            \"forgetting\",\n            \"forgets\",\n            \"hope\",\n            \"hoped\",\n            \"hopes\",\n            \"hoping\",\n            \"intend\",\n            \"intended\",\n            \"intending\",\n            \"intends\",\n            \"learn\",\n            \"learned\",\n            \"learning\",\n            \"learns\",\n            \"learnt\",\n            \"long\",\n            \"longed\",\n            \"longing\",\n            \"longs\",\n            \"mean\",\n            \"means\",\n            \"meant\",\n            \"need\",\n            \"needed\",\n            \"needing\",\n            \"needs\",\n            \"neglect\",\n            \"neglected\",\n            \"neglecting\",\n            \"neglects\",\n            \"prepare\",\n            \"prepared\",\n            \"prepares\",\n            \"preparing\",\n            \"refuse\",\n            \"refused\",\n            \"refuses\",\n            \"refusing\",\n            \"resolve\",\n            \"resolved\",\n            \"resolves\",\n            \"resolving\",\n            \"struggle\",\n            \"struggled\",\n            \"struggles\",\n            \"struggling\",\n            \"try\",\n            \"tried\",\n            \"trying\",\n            \"tries\",\n            \"want\",\n            \"wanted\",\n            \"wanting\",\n            \"wants\",\n        ])\n    }\n\n    fn previous_word_with_span(source: &[char], start: usize) -> Option<(String, usize)> {\n        let mut cursor = start;\n\n        while cursor > 0 && source[cursor - 1].is_whitespace() {\n            cursor -= 1;\n        }\n\n        if cursor == 0 {\n            return None;\n        }\n\n        let end = cursor;\n\n        while cursor > 0 {\n            let ch = source[cursor - 1];\n            if ch.is_alphabetic() || ch == '\\'' {\n                cursor -= 1;\n            } else {\n                break;\n            }\n        }\n\n        if cursor == end {\n            return None;\n        }\n\n        Some((\n            source[cursor..end]\n                .iter()\n                .collect::<String>()\n                .to_ascii_lowercase(),\n            cursor,\n        ))\n    }\n\n    fn previous_word(source: &[char], start: usize) -> Option<String> {\n        Self::previous_word_with_span(source, start).map(|(word, _)| word)\n    }\n\n    fn previous_non_whitespace_char(source: &[char], start: usize) -> Option<char> {\n        let mut cursor = start;\n\n        while cursor > 0 {\n            cursor -= 1;\n            let ch = source[cursor];\n            if !ch.is_whitespace() {\n                return Some(ch);\n            }\n        }\n\n        None\n    }\n\n    fn next_non_whitespace_char(source: &[char], start: usize) -> Option<char> {\n        let mut cursor = start;\n\n        while cursor < source.len() {\n            let ch = source[cursor];\n            if !ch.is_whitespace() {\n                return Some(ch);\n            }\n            cursor += 1;\n        }\n\n        None\n    }\n\n    fn determiner_within_three(source: &[char], controller_span_start: usize) -> bool {\n        let mut determiner_scan_cursor = controller_span_start;\n\n        for _ in 0..3 {\n            let Some((word, start)) = Self::previous_word_with_span(source, determiner_scan_cursor)\n            else {\n                break;\n            };\n            let word = word.as_str();\n\n            if matches!(word, \"and\" | \"or\" | \"but\") {\n                determiner_scan_cursor = start;\n                continue;\n            }\n\n            if matches!(\n                word,\n                \"a\" | \"an\" | \"the\" | \"this\" | \"that\" | \"these\" | \"those\"\n            ) {\n                return true;\n            }\n\n            determiner_scan_cursor = start;\n        }\n\n        false\n    }\n}\n\nimpl Default for MissingTo {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        let strict_pattern = SequenceExpr::with(Self::strict_controller_words())\n            .t_ws()\n            .then_kind_where(|kind| kind.is_upos(UPOS::VERB));\n        map.insert(strict_pattern, 0);\n\n        let permissive_pattern = SequenceExpr::with(Self::permissive_controller_words())\n            .t_ws()\n            .then_kind_where(|kind| kind.is_verb_lemma());\n        map.insert(permissive_pattern, 0);\n\n        Self { map }\n    }\n}\n\nimpl ExprLinter for MissingTo {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.map\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offending_idx = *self.map.lookup(0, matched_tokens, source)?;\n        let controller = &matched_tokens[offending_idx];\n        let span = controller.span;\n\n        let controller_text = controller.span.get_content_string(source).to_lowercase();\n        let controller_text = controller_text.as_str();\n\n        let is_adjective_controller = matches!(controller_text, \"eager\" | \"inclined\" | \"ready\");\n\n        if controller.kind.is_upos(UPOS::ADJ) && !is_adjective_controller {\n            return None;\n        }\n\n        if !controller.kind.is_upos(UPOS::VERB) && !is_adjective_controller {\n            return None;\n        }\n\n        let previous_word_info = Self::previous_word_with_span(source, span.start);\n        let previous_word = previous_word_info.as_ref().map(|(word, _)| word.as_str());\n\n        if matches!(\n            previous_word,\n            Some(\"a\" | \"an\" | \"the\" | \"this\" | \"that\" | \"these\" | \"those\")\n                | Some(\"very\" | \"so\" | \"too\" | \"quite\" | \"rather\")\n        ) {\n            return None;\n        }\n\n        let controller_text_ends_with_d_or_en =\n            controller_text.ends_with('d') || controller_text.ends_with(\"en\");\n\n        if previous_word == Some(\"of\") && controller_text_ends_with_d_or_en {\n            return None;\n        }\n\n        if previous_word.is_some_and(|word| word.ends_with(\"ly\"))\n            && controller_text_ends_with_d_or_en\n        {\n            return None;\n        }\n\n        if controller_text.starts_with(\"hope\") && previous_word == Some(\"of\") {\n            return None;\n        }\n\n        if controller_text == \"needs\" && previous_word == Some(\"must\") {\n            return None;\n        }\n\n        let prev_non_whitespace_char = Self::previous_non_whitespace_char(source, span.start);\n\n        if controller_text == \"prepare\"\n            && matches!(prev_non_whitespace_char, None | Some('.' | '!' | '?'))\n        {\n            return None;\n        }\n\n        let next_token = matched_tokens\n            .iter()\n            .skip(offending_idx + 1)\n            .find(|tok| !tok.kind.is_whitespace())?;\n\n        let next_text = next_token.span.get_content_string(source).to_lowercase();\n\n        if controller_text.starts_with(\"try\") && next_text == \"and\" {\n            return None;\n        }\n\n        if next_text.ends_with(\"ing\") {\n            return None;\n        }\n\n        // Ugly workaround since `Option::flatten` doesn't work with `Option<&Option<...>>`.\n        let next_upos = next_token\n            .kind\n            .as_word()\n            .and_then(Option::as_ref)\n            .and_then(|word| word.pos_tag);\n\n        let next_is_verb = next_upos == Some(UPOS::VERB);\n        let next_is_noun = matches!(next_upos, Some(UPOS::NOUN | UPOS::PROPN | UPOS::ADJ));\n\n        let determiner_within_three = Self::determiner_within_three(source, span.start);\n\n        if next_token.kind.is_np_member()\n            && !next_is_verb\n            && (previous_word == Some(\"to\") || determiner_within_three)\n        {\n            return None;\n        }\n\n        if !next_is_verb\n            && matches!(\n                next_upos,\n                Some(UPOS::ADV | UPOS::ADJ | UPOS::ADP | UPOS::SCONJ | UPOS::CCONJ)\n            )\n        {\n            return None;\n        }\n\n        let next_is_noun_but_not_verb = next_is_noun && !next_is_verb;\n\n        if matches!(\n            controller_text,\n            \"learn\" | \"learned\" | \"learning\" | \"learns\" | \"learnt\" | \"mean\" | \"means\" | \"meant\"\n        ) && next_is_noun_but_not_verb\n        {\n            return None;\n        }\n\n        if matches!(controller_text, \"hope\" | \"hoped\" | \"hopes\" | \"hoping\")\n            && (next_is_noun_but_not_verb || next_upos == Some(UPOS::AUX))\n        {\n            return None;\n        }\n\n        let next_non_whitespace_char = Self::next_non_whitespace_char(source, next_token.span.end);\n\n        if matches!(controller_text, \"need\" | \"needed\" | \"needing\" | \"needs\")\n            && (next_is_noun_but_not_verb\n                || next_text == \"help\"\n                || next_non_whitespace_char == Some('-'))\n        {\n            return None;\n        }\n\n        if next_upos == Some(UPOS::PROPN)\n            && matches!(\n                prev_non_whitespace_char,\n                Some('\"' | '\\'' | '”' | '’' | '!' | '?' | ',')\n            )\n        {\n            return None;\n        }\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::InsertAfter(\" to\".chars().collect())],\n            message: \"Insert `to` to complete the infinitive (e.g., `need to talk`).\".to_string(),\n            priority: 62,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Flags verbs and adjectives like `need`, `want`, or `ready` that are missing `to` before an infinitive.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::MissingTo;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn inserts_to_after_meant() {\n        assert_suggestion_result(\n            \"I meant call you last night.\",\n            MissingTo::default(),\n            \"I meant to call you last night.\",\n        );\n    }\n\n    #[test]\n    fn inserts_to_after_wants() {\n        assert_suggestion_result(\n            \"She wants finish early.\",\n            MissingTo::default(),\n            \"She wants to finish early.\",\n        );\n    }\n\n    #[test]\n    fn inserts_to_after_need() {\n        assert_suggestion_result(\n            \"We need talk about pricing.\",\n            MissingTo::default(),\n            \"We need to talk about pricing.\",\n        );\n    }\n\n    #[test]\n    fn inserts_to_after_agreed() {\n        assert_suggestion_result(\n            \"They agreed meet at dawn.\",\n            MissingTo::default(),\n            \"They agreed to meet at dawn.\",\n        );\n    }\n\n    #[test]\n    fn inserts_to_after_forgot() {\n        assert_suggestion_result(\n            \"He forgot send the file.\",\n            MissingTo::default(),\n            \"He forgot to send the file.\",\n        );\n    }\n\n    #[test]\n    fn inserts_to_after_trying() {\n        assert_suggestion_result(\n            \"I'm trying get better at chess.\",\n            MissingTo::default(),\n            \"I'm trying to get better at chess.\",\n        );\n    }\n\n    #[test]\n    fn inserts_to_after_refused() {\n        assert_suggestion_result(\n            \"She refused answer the question.\",\n            MissingTo::default(),\n            \"She refused to answer the question.\",\n        );\n    }\n\n    #[test]\n    fn inserts_to_after_ready() {\n        assert_suggestion_result(\n            \"We're ready start the meeting.\",\n            MissingTo::default(),\n            \"We're ready to start the meeting.\",\n        );\n    }\n\n    #[test]\n    fn inserts_to_after_eager() {\n        assert_suggestion_result(\n            \"I'm eager see the results.\",\n            MissingTo::default(),\n            \"I'm eager to see the results.\",\n        );\n    }\n\n    #[test]\n    fn inserts_to_after_inclined() {\n        assert_suggestion_result(\n            \"I'm inclined believe you.\",\n            MissingTo::default(),\n            \"I'm inclined to believe you.\",\n        );\n    }\n\n    #[test]\n    fn inserts_to_after_resolved() {\n        assert_suggestion_result(\n            \"She resolved solve the case.\",\n            MissingTo::default(),\n            \"She resolved to solve the case.\",\n        );\n    }\n\n    #[test]\n    fn no_lint_when_to_present() {\n        assert_lint_count(\"She wants to finish early.\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_with_noun_after_controller() {\n        assert_lint_count(\"They arranged a meeting at noon.\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_needs_follow_up_appointments() {\n        assert_lint_count(\n            \"Gus is recovering well, though he needs follow-up appointments.\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_delays_meant_decisions() {\n        assert_lint_count(\n            \"The delays meant decisions were often made on outdated information, hindering agility and potentially impacting return on investment.\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_bouquet_of_roses() {\n        assert_lint_count(\n            \"I made a note to request a small bouquet of roses for his room, a simple gesture that I hoped would bring a moment of solace.\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_for_intended_word_phrase() {\n        assert_lint_count(\n            \"Detects incorrect usage of `peak` when the intended word is `pique`.\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_long_passage() {\n        assert_lint_count(\n            \"Before her was another long passage illuminated by lamps.\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_long_island_sound() {\n        assert_lint_count(\n            \"The sailboat drifted along Long Island Sound at sunrise.\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_learn_tag_probabilities() {\n        assert_lint_count(\n            \"These models learn tag probabilities from annotated corpora.\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_standard_feature_nominal_phrase() {\n        assert_lint_count(\n            \"This is a standard and expected feature for any e-commerce site selling visually-driven products.\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_mixing_bowl_nominal_phrase() {\n        assert_lint_count(\n            \"This is a 2-quart mixing bowl, ideal for everything from whipping cream to preparing cake batter.\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_try_and_say() {\n        assert_lint_count(\n            \"I'll try and say hello before I leave.\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_failed_edit_attempts() {\n        assert_lint_count(\"failed edit attempts\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_ready_work() {\n        assert_lint_count(\"ready work\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_bad_at_managing_side_effects() {\n        assert_lint_count(\"Bad at managing side-effects\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_a_fully_resolved_conflict() {\n        assert_lint_count(\"a fully resolved conflict\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_a_resolved_configuration() {\n        assert_lint_count(\"A resolved configuration\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_a_fully_resolved_configuration() {\n        assert_lint_count(\"A fully resolved configuration\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_a_resolved_set_of_configuration() {\n        assert_lint_count(\"A resolved set of configuration\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_a_fully_resolved_set_of_configuration() {\n        assert_lint_count(\n            \"A fully resolved set of configuration\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_system_produced_a_fully_resolved_set_of_dependencies() {\n        assert_lint_count(\n            \"System produced a fully resolved set of dependencies\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_a_resolved_list_of_parameters() {\n        assert_lint_count(\"A resolved list of parameters\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_a_fully_resolved_list_of_parameters() {\n        assert_lint_count(\n            \"A fully resolved list of parameters\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_a_prepared_stranger() {\n        assert_lint_count(\"A prepared stranger\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_a_fully_prepared_stranger() {\n        assert_lint_count(\"A fully prepared stranger\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_a_prepared_group_of_strangers() {\n        assert_lint_count(\"A prepared group of strangers\", MissingTo::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_a_fully_prepared_group_of_strangers() {\n        assert_lint_count(\n            \"A fully prepared group of strangers\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_a_nicely_arranged_set_of_flowers() {\n        assert_lint_count(\n            \"A nicely arranged bunch of flowers\",\n            MissingTo::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_a_recently_forgotten_list_of_names() {\n        assert_lint_count(\n            \"A recently forgotten list of names\",\n            MissingTo::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/misspell.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct Misspell {\n    expr: SequenceExpr,\n}\n\nimpl Default for Misspell {\n    fn default() -> Self {\n        let expr = SequenceExpr::word_set(&[\"miss\"]).t_ws_h().then_word_set(&[\n            \"spell\",\n            \"spelled\",\n            \"spelling\",\n            \"spells\",\n            \"spellings\",\n        ]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for Misspell {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let misspell_variant = matched_tokens.last()?;\n\n        let variant_chars = misspell_variant.span.get_content(source);\n        let variant_lower = variant_chars\n            .iter()\n            .map(|c| c.to_ascii_lowercase())\n            .collect::<String>();\n\n        let replacement = match variant_lower.as_str() {\n            \"spell\" => \"misspell\",\n            \"spelled\" => \"misspelled\",\n            \"spelling\" => \"misspelling\",\n            \"spells\" => \"misspells\",\n            \"spellings\" => \"misspellings\",\n            _ => return None,\n        };\n\n        let suggestions = vec![Suggestion::replace_with_match_case(\n            replacement.chars().collect(),\n            span.get_content(source),\n        )];\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::BoundaryError,\n            suggestions,\n            message: \"Write `misspell` and its inflections as a single word.\".to_string(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Ensures `misspell` and its inflected forms are written as a single word.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::Misspell;\n\n    #[test]\n    fn base_form() {\n        assert_suggestion_result(\n            \"They often miss spell names in the log.\",\n            Misspell::default(),\n            \"They often misspell names in the log.\",\n        );\n    }\n\n    #[test]\n    fn past_tense() {\n        assert_suggestion_result(\n            \"She miss spelled the answer on the quiz.\",\n            Misspell::default(),\n            \"She misspelled the answer on the quiz.\",\n        );\n    }\n\n    #[test]\n    fn past_tense_hyphen() {\n        assert_suggestion_result(\n            \"She miss-spelled the answer on the quiz.\",\n            Misspell::default(),\n            \"She misspelled the answer on the quiz.\",\n        );\n    }\n\n    #[test]\n    fn gerund_form() {\n        assert_suggestion_result(\n            \"His constant miss spelling frustrated the team.\",\n            Misspell::default(),\n            \"His constant misspelling frustrated the team.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/mixed_bag.rs",
    "content": "use crate::CharStringExt;\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::expr_linter::find_the_only_token_matching;\nuse crate::linting::{ExprLinter, LintKind, Suggestion};\nuse crate::{\n    Lint, Token, TokenKind,\n    expr::{Expr, SequenceExpr},\n};\n\npub struct MixedBag {\n    expr: SequenceExpr,\n}\n\nimpl Default for MixedBag {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::default()\n                .then_kind_any_or_words(\n                    &[TokenKind::is_adjective, TokenKind::is_adverb] as &[_],\n                    &[\"a\"],\n                )\n                .t_ws()\n                .t_aco(\"mixed\")\n                .t_ws()\n                .t_aco(\"bad\"),\n        }\n    }\n}\n\nimpl ExprLinter for MixedBag {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let bad_span = find_the_only_token_matching(toks, src, |tok, _src| {\n            tok.span\n                .get_content(src)\n                .eq_ignore_ascii_case_chars(&['b', 'a', 'd'])\n        })?\n        .span;\n\n        Some(Lint {\n            span: bad_span,\n            lint_kind: LintKind::Eggcorn,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"bag\",\n                bad_span.get_content(src),\n            )],\n            message: \"Corrects the eggcorn `mixed bad` to `mixed bag`.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects the eggcorn `mixed bad` to `mixed bag`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::MixedBag;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn a_mixed_bad() {\n        assert_suggestion_result(\n            \"CommandLine interface is already a mixed bad of wstring and #ifdef to   string or wstring.\",\n            MixedBag::default(),\n            \"CommandLine interface is already a mixed bag of wstring and #ifdef to   string or wstring.\",\n        );\n    }\n\n    #[test]\n    fn big_mixed_bag() {\n        assert_suggestion_result(\n            \"Speaking of dungeons , the dungeons in this game are a big mixed bad.\",\n            MixedBag::default(),\n            \"Speaking of dungeons , the dungeons in this game are a big mixed bag.\",\n        );\n    }\n\n    #[test]\n    fn damn_mixed_bag() {\n        assert_suggestion_result(\n            \"This is a damn mixed bad which left me frustrated, and yet longing for more.\",\n            MixedBag::default(),\n            \"This is a damn mixed bag which left me frustrated, and yet longing for more.\",\n        );\n    }\n\n    #[test]\n    fn huge_mixed_bag() {\n        assert_suggestion_result(\n            \"Also a huge mixed bad of no name monitors of different sizes that all have different color settings on.\",\n            MixedBag::default(),\n            \"Also a huge mixed bag of no name monitors of different sizes that all have different color settings on.\",\n        );\n    }\n\n    #[test]\n    fn large_mixed_bag() {\n        assert_suggestion_result(\n            \"I’m still struggling to comprehend how it throws such a large mixed bad of symptoms in the mix this time.\",\n            MixedBag::default(),\n            \"I’m still struggling to comprehend how it throws such a large mixed bag of symptoms in the mix this time.\",\n        );\n    }\n\n    #[test]\n    fn massive_mixed_bad() {\n        assert_suggestion_result(\n            \"Anyway. In topic, Swano was a massive mixed bad in this game.\",\n            MixedBag::default(),\n            \"Anyway. In topic, Swano was a massive mixed bag in this game.\",\n        );\n    }\n\n    #[test]\n    fn massively_mixed_bag() {\n        assert_suggestion_result(\n            \"While certain things are more common to be either way, it's a massively mixed bad overall.\",\n            MixedBag::default(),\n            \"While certain things are more common to be either way, it's a massively mixed bag overall.\",\n        );\n    }\n\n    #[test]\n    fn pretty_mixed_bag() {\n        assert_suggestion_result(\n            \"It's a pretty mixed bad for me: Evolution Xavier for comic Xavier. Evolution Magneto for comic Magneto.\",\n            MixedBag::default(),\n            \"It's a pretty mixed bag for me: Evolution Xavier for comic Xavier. Evolution Magneto for comic Magneto.\",\n        );\n    }\n\n    #[test]\n    fn rather_mixed_bag() {\n        assert_suggestion_result(\n            \"Well chaps, as expected the TS contains a rather mixed bad of promise and disappointment.\",\n            MixedBag::default(),\n            \"Well chaps, as expected the TS contains a rather mixed bag of promise and disappointment.\",\n        );\n    }\n\n    #[test]\n    fn really_mixed_bag() {\n        assert_suggestion_result(\n            \"This is a really mixed bad On one hand you have some of Eminem's highest highs and his lowest lows but ever.\",\n            MixedBag::default(),\n            \"This is a really mixed bag On one hand you have some of Eminem's highest highs and his lowest lows but ever.\",\n        );\n    }\n\n    #[test]\n    fn slightly_mixed_bag() {\n        assert_suggestion_result(\n            \"I absolutely love Yes Minister and Yes Prime Minister but it did end up a slightly mixed bad in terms of impact.\",\n            MixedBag::default(),\n            \"I absolutely love Yes Minister and Yes Prime Minister but it did end up a slightly mixed bag in terms of impact.\",\n        );\n    }\n\n    #[test]\n    fn somewhat_mixed_bag() {\n        assert_suggestion_result(\n            \"A somewhat mixed bad. The space is pleasant with a rustic vibe.\",\n            MixedBag::default(),\n            \"A somewhat mixed bag. The space is pleasant with a rustic vibe.\",\n        );\n    }\n\n    #[test]\n    fn very_mixed_bag() {\n        assert_suggestion_result(\n            \"AVAILABLE MEN is a very mixed bad of short films about gay subjects that very from excellent to weak.\",\n            MixedBag::default(),\n            \"AVAILABLE MEN is a very mixed bag of short films about gay subjects that very from excellent to weak.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/mod.rs",
    "content": "//! Frameworks and rules that locate errors in text.\n//!\n//! See the [`Linter`] trait and the [documentation for authoring a rule](https://writewithharper.com/docs/contributors/author-a-rule) for more information.\n\nmod a_part;\nmod a_while;\nmod addicting;\nmod adjective_double_degree;\nmod adjective_of_a;\nmod after_later;\nmod all_hell_break_loose;\nmod all_intents_and_purposes;\nmod allow_to;\nmod am_in_the_morning;\nmod amounts_for;\nmod an_a;\nmod and_in;\nmod and_the_like;\nmod another_thing_coming;\nmod another_think_coming;\nmod apart_from;\nmod ask_no_preposition;\nmod avoid_curses;\nmod back_in_the_day;\nmod be_allowed;\nmod be_worried;\nmod behind_the_scenes;\nmod best_of_all_time;\nmod boring_words;\nmod bought;\nmod brand_brandish;\nmod by_accident;\nmod call_them;\nmod cant;\nmod capitalize_personal_pronouns;\nmod cautionary_tale;\nmod change_tack;\nmod chock_full;\nmod closed_compounds;\nmod comma_fixes;\nmod compound_nouns;\nmod compound_subject_i;\nmod confident;\nmod correct_number_suffix;\nmod criteria_phenomena;\nmod cure_for;\nmod currency_placement;\nmod damages;\nmod dashes;\nmod day_and_age;\nmod despite_it_is;\nmod despite_of;\nmod determiner_without_noun;\nmod did_past;\nmod didnt;\nmod discourse_markers;\nmod disjoint_prefixes;\nmod do_mistake;\nmod dot_initialisms;\nmod double_click;\nmod double_modal;\nmod ellipsis_length;\nmod else_possessive;\nmod ever_every;\nmod everyday;\nmod expand_memory_shorthands;\nmod expand_time_shorthands;\nmod expr_linter;\nmod far_be_it;\nmod fascinated_by;\nmod fed_up_with;\nmod feel_fell;\nmod few_units_of_time_ago;\nmod filler_words;\nmod find_fine;\nmod first_aid_kit;\nmod flesh_out_vs_full_fledged;\nmod for_noun;\nmod free_predicate;\nmod friend_of_me;\nmod go_so_far_as_to;\nmod go_to_war;\nmod good_at;\nmod handful;\nmod have_pronoun;\nmod have_take_a_look;\nmod hedging;\nmod hello_greeting;\nmod hereby;\nmod hop_hope;\nmod hope_youre;\nmod how_to;\nmod hyphenate_number_day;\nmod i_am_agreement;\nmod if_wouldve;\nmod in_on_the_cards;\nmod inflected_verb_after_to;\nmod initialism_linter;\nmod initialisms;\nmod interested_in;\nmod it_is;\nmod it_looks_like_that;\nmod it_would_be;\nmod its_contraction;\nmod its_possessive;\nmod jealous_of;\nmod johns_hopkins;\nmod lead_rise_to;\nmod left_right_hand;\nmod less_worse;\nmod let_to_do;\nmod lets_confusion;\nmod likewise;\nmod lint;\nmod lint_group;\nmod lint_kind;\nmod long_sentences;\nmod look_down_ones_nose;\nmod looking_forward_to;\nmod map_phrase_linter;\nmod map_phrase_set_linter;\nmod mass_nouns;\nmod means_a_lot_to;\nmod merge_linters;\nmod merge_words;\nmod missing_preposition;\nmod missing_space;\nmod missing_to;\nmod misspell;\nmod mixed_bag;\nmod modal_be_adjective;\nmod modal_of;\nmod modal_seem;\nmod months;\nmod more_adjective;\nmod more_better;\nmod most_number;\nmod most_of_the_times;\nmod multiple_frequency_adverbs;\nmod multiple_sequential_pronouns;\nmod nail_on_the_head;\nmod need_to_noun;\nmod no_french_spaces;\nmod no_longer;\nmod no_match_for;\nmod no_oxford_comma;\nmod nobody;\nmod nominal_wants;\nmod nor_modal_pronoun;\nmod not_only_inversion;\nmod noun_verb_confusion;\nmod number_suffix_capitalization;\nmod obsess_preposition;\nmod of_course;\nmod oldest_in_the_book;\nmod on_floor;\nmod once_or_twice;\nmod one_and_the_same;\nmod one_of_the_singular;\nmod open_compounds;\nmod open_the_light;\nmod orthographic_consistency;\nmod ought_to_be;\nmod out_of_date;\nmod oxford_comma;\nmod oxymorons;\nmod phrasal_verb_as_compound_noun;\nmod phrase_set_corrections;\nmod pique_interest;\nmod plural_decades;\nmod plural_wrong_word_of_phrase;\nmod possessive_noun;\nmod possessive_your;\nmod progressive_needs_be;\nmod pronoun_are;\nmod pronoun_contraction;\nmod pronoun_inflection_be;\nmod pronoun_knew;\nmod pronoun_verb_agreement;\nmod proper_noun_capitalization_linters;\nmod quantifier_needs_of;\nmod quantifier_numeral_conflict;\nmod quite_quiet;\nmod quote_spacing;\nmod reason_for_doing;\nmod redundant_acronyms;\nmod redundant_additive_adverbs;\nmod redundant_progressive_comparative;\nmod regionalisms;\nmod regular_irregulars;\nmod repeated_words;\nmod respond;\nmod right_click;\nmod rise_the_ranks;\nmod roller_skated;\nmod safe_to_save;\nmod save_to_safe;\nmod sentence_capitalization;\nmod shoot_oneself_in_the_foot;\nmod simple_past_to_past_participle;\nmod since_duration;\nmod single_be;\nmod some_without_article;\nmod something_is;\nmod somewhat_something;\nmod soon_to_be;\nmod sought_after;\nmod spaces;\nmod spell_check;\nmod spelled_numbers;\nmod split_words;\nmod subject_pronoun;\nmod suggestion;\nmod take_a_look_to;\nmod take_medicine;\nmod take_serious;\nmod that_than;\nmod that_which;\nmod the_how_why;\nmod the_my;\nmod the_point_for;\nmod the_proper_noun_possessive;\nmod then_than;\nmod theres;\nmod theses_these;\nmod theyre_confusions;\nmod thing_think;\nmod this_type_of_thing;\nmod though_thought;\nmod throw_away;\nmod throw_rubbish;\nmod to_adverb;\nmod to_two_too;\nmod touristic;\nmod transposed_space;\nmod try_ones_hand_at;\nmod unclosed_quotes;\nmod update_place_names;\nmod use_title_case;\nmod verb_to_adjective;\nmod very_unique;\nmod vice_versa;\nmod vicious_loop;\nmod was_aloud;\nmod way_too_adjective;\nmod weir_rules;\nmod well_educated;\nmod were_where;\nmod whereas;\nmod whom_subject_of_verb;\nmod widely_accepted;\nmod win_prize;\nmod wish_could;\nmod wordpress_dotcom;\nmod worth_to_do;\nmod would_never_have;\nmod wrong_apostrophe;\n\npub use expr_linter::{Chunk, ExprLinter};\npub use initialism_linter::InitialismLinter;\npub use lint::Lint;\npub use lint_group::{LintGroup, LintGroupConfig};\npub use lint_kind::LintKind;\npub use map_phrase_linter::MapPhraseLinter;\npub use map_phrase_set_linter::MapPhraseSetLinter;\npub use suggestion::{Suggestion, SuggestionCollectionExt};\n\nuse crate::{Document, LSend, render_markdown};\n\n/// A __stateless__ rule that searches documents for grammatical errors.\n///\n/// Commonly implemented via [`ExprLinter`].\n///\n/// See also: [`LintGroup`].\npub trait Linter: LSend {\n    /// Analyzes a document and produces zero or more [`Lint`]s.\n    /// We pass `self` mutably for caching purposes.\n    fn lint(&mut self, document: &Document) -> Vec<Lint>;\n    /// A user-facing description of what kinds of grammatical errors this rule looks for.\n    /// It is usually shown in settings menus.\n    fn description(&self) -> &str;\n}\n\n/// A blanket-implemented trait that renders the Markdown description field of a linter to HTML.\npub trait HtmlDescriptionLinter {\n    fn description_html(&self) -> String;\n}\n\nimpl<L: ?Sized> HtmlDescriptionLinter for L\nwhere\n    L: Linter,\n{\n    fn description_html(&self) -> String {\n        let desc = self.description();\n        render_markdown(desc)\n    }\n}\n\npub mod debug {\n    use crate::Token;\n\n    /// Formats a lint match with surrounding context for debug output.\n    ///\n    /// The function takes the same `matched_tokens` and `source`, and `context` parameters\n    /// passed to `[match_to_lint_with_context]`.\n    ///\n    /// # Arguments\n    /// * `log` - `matched_tokens`\n    /// * `ctx` - `context`, or `None` if calling from `[match_to_lint]`\n    /// * `src` - `source` from `[match_to_lint]` / `[match_to_lint_with_context]`\n    ///\n    /// # Returns\n    /// A string with ANSI escape codes where:\n    /// - Context tokens are dimmed before and after the matched tokens in normal weight.\n    /// - Markup and formatting text hidden in whitespace tokens is filtered out.\n    pub fn format_lint_match(\n        log: &[Token],\n        ctx: Option<(&[Token], &[Token])>,\n        src: &[char],\n    ) -> String {\n        let fmt = |tokens: &[Token]| {\n            tokens\n                .iter()\n                .filter(|t| !t.kind.is_unlintable())\n                .map(|t| t.span.get_content_string(src))\n                .collect::<String>()\n        };\n\n        if let Some((pro, epi)) = ctx {\n            format!(\n                \"\\x1b[2m{}\\x1b[0m{}\\x1b[2m{}\\x1b[0m\",\n                fmt(pro),\n                fmt(log),\n                fmt(epi)\n            )\n        } else {\n            fmt(log)\n        }\n    }\n}\n\n#[cfg(test)]\npub mod tests {\n    use crate::{Document, Span, Token, linting::Linter};\n    use hashbrown::HashSet;\n\n    /// Extension trait for converting spans of tokens back to their original text\n    pub trait SpanVecExt {\n        fn to_strings(&self, doc: &Document) -> Vec<String>;\n    }\n\n    impl SpanVecExt for Vec<Span<Token>> {\n        fn to_strings(&self, doc: &Document) -> Vec<String> {\n            self.iter()\n                .map(|sp| {\n                    doc.get_tokens()[sp.start..sp.end]\n                        .iter()\n                        .map(|tok| doc.get_span_content_str(&tok.span))\n                        .collect::<String>()\n                })\n                .collect()\n        }\n    }\n\n    // Special Linter just for testing\n    use crate::{\n        CharStringExt, Lint, TokenStringExt,\n        linting::{LintKind, Suggestion},\n    };\n\n    /// Type alias for many:many error-to-fix mappings used in testing\n    /// Each error pattern can map to multiple possible fixes\n    pub type TestLinterMap<'a> = &'a [(&'a [&'a str], &'a [&'a str])];\n\n    #[derive(Clone)]\n    pub struct TestLinter<'a> {\n        map: TestLinterMap<'a>,\n    }\n    impl<'a> TestLinter<'a> {\n        pub fn new(map: TestLinterMap<'a>) -> Self {\n            Self { map }\n        }\n    }\n    impl<'a> Linter for TestLinter<'a> {\n        fn lint(&mut self, doc: &Document) -> Vec<Lint> {\n            let mut corr: Vec<(Span<char>, &[char], &[&str])> = Vec::new();\n            for wordtok in doc.iter_words() {\n                let wordspan = wordtok.span;\n                let word_chars = wordspan.get_content(doc.get_source());\n                // Check if word matches any of the patterns in the map\n                for (errors, fixes) in self.map {\n                    // if any of the errors match, add all of the corrections\n                    if errors\n                        .iter()\n                        .any(|&e| word_chars.eq_ignore_ascii_case_str(e))\n                    {\n                        corr.push((wordspan, word_chars, fixes))\n                    }\n                }\n            }\n            corr.iter()\n                .map(|(ws, wch, cstr)| {\n                    // Create suggestions for all possible fixes\n                    let suggestions: Vec<Suggestion> = cstr\n                        .iter()\n                        .map(|&suggestion_str| {\n                            Suggestion::replace_with_match_case(\n                                suggestion_str.chars().collect(),\n                                wch.to_owned(),\n                            )\n                        })\n                        .collect();\n\n                    Lint {\n                        span: *ws,\n                        lint_kind: LintKind::Spelling,\n                        suggestions,\n                        message: \"Test linter for 'linting assertion' tests\".to_string(),\n                        ..Default::default()\n                    }\n                })\n                .collect()\n        }\n        fn description(&self) -> &str {\n            \"Test linter for 'linting assertion' tests\"\n        }\n    }\n\n    // Before the asserts, let's test that the test linter itself has the behaviours we intend\n    mod linter_tests {\n        use super::{TestLinter, assert_suggestion_result};\n\n        #[test]\n        fn test_1_to_1_error_to_fix() {\n            assert_suggestion_result(\"bad\", TestLinter::new(&[(&[\"bad\"], &[\"good\"])]), \"good\");\n        }\n\n        #[test]\n        fn test_1_to_2_error_to_fixes() {\n            let linter = TestLinter::new(&[(&[\"bad\"], &[\"good1\", \"good2\"])]);\n            assert_suggestion_result(\"bad\", linter.clone(), \"good1\");\n            assert_suggestion_result(\"bad\", linter, \"good2\");\n        }\n\n        #[test]\n        fn test_2_to_1_errors_to_fix() {\n            let linter = TestLinter::new(&[(&[\"bad1\", \"bad2\"], &[\"good\"])]);\n            assert_suggestion_result(\"bad1\", linter.clone(), \"good\");\n            assert_suggestion_result(\"bad2\", linter, \"good\");\n        }\n\n        #[test]\n        fn test_2_to_2_errors_to_fixes() {\n            let linter = TestLinter::new(&[(&[\"bad1\", \"bad2\"], &[\"good1\", \"good2\"])]);\n            assert_suggestion_result(\"bad1\", linter.clone(), \"good1\");\n            assert_suggestion_result(\"bad2\", linter.clone(), \"good2\");\n            assert_suggestion_result(\"bad1\", linter.clone(), \"good2\");\n            assert_suggestion_result(\"bad2\", linter, \"good1\");\n        }\n    }\n\n    #[track_caller]\n    pub fn assert_no_lints(text: &str, linter: impl Linter) {\n        assert_lint_count(text, linter, 0);\n    }\n\n    #[test]\n    fn verify_no_lints() {\n        assert_no_lints(\"hello world\", TestLinter::new(&[]));\n    }\n\n    #[track_caller]\n    pub fn assert_lint_count(text: &str, mut linter: impl Linter, count: usize) {\n        let test = Document::new_plain_english_curated(text);\n        let lints = linter.lint(&test);\n        // dbg!(&lints);\n        if lints.len() != count {\n            panic!(\n                \"Expected \\\"{text}\\\" to create {count} lints, but it created {}.\",\n                lints.len()\n            );\n        }\n    }\n\n    #[test]\n    fn verify_1_lint() {\n        assert_lint_count(\n            \"heloo world\",\n            TestLinter::new(&[(&[\"heloo\"], &[\"hello\"])]),\n            1,\n        );\n    }\n\n    #[test]\n    fn verify_2_lints() {\n        assert_lint_count(\n            \"heloo wolrd\",\n            TestLinter::new(&[(&[\"heloo\"], &[\"hello\"]), (&[\"wolrd\"], &[\"world\"])]),\n            2,\n        );\n    }\n\n    /// Assert the total number of suggestions produced by a [`Linter`], spread across all produced\n    /// [`Lint`]s.\n    #[track_caller]\n    pub fn assert_suggestion_count(text: &str, mut linter: impl Linter, count: usize) {\n        let test = Document::new_plain_english_curated(text);\n        let lints = linter.lint(&test);\n        eprintln!(\n            \"{}\",\n            lints\n                .iter()\n                .map(|l| l\n                    .suggestions\n                    .iter()\n                    .map(|s| s.to_string())\n                    .collect::<Vec<_>>()\n                    .join(\", \"))\n                .collect::<Vec<_>>()\n                .join(\"\\n\")\n        );\n        assert_eq!(\n            lints.iter().map(|l| l.suggestions.len()).sum::<usize>(),\n            count\n        );\n    }\n\n    #[test]\n    fn verify_no_suggestions() {\n        assert_suggestion_count(\"afjehwkf\", TestLinter::new(&[]), 0);\n    }\n\n    #[test]\n    fn verify_1_suggestion() {\n        assert_suggestion_count(\n            \"dictionery\",\n            TestLinter::new(&[(&[\"dictionery\"], &[\"dictionary\"])]),\n            1,\n        );\n    }\n\n    /// Document types for suggestion search testing\n    #[derive(Debug, Clone, Copy)]\n    enum DocumentType {\n        PlainEnglish,\n        Markdown,\n    }\n\n    /// Creates a document of the specified type from character data\n    fn create_document(chars: &[char], doc_type: DocumentType) -> Document {\n        match doc_type {\n            DocumentType::PlainEnglish => Document::new_plain_english_curated_chars(chars),\n            DocumentType::Markdown => Document::new_markdown_default_curated_chars(chars),\n        }\n    }\n\n    /// Applies suggestions iteratively until any combination produces the expected result.\n    ///\n    /// Explores all possible suggestion branches (depth-first search) until finding a path\n    /// that produces the expected result. Stops after 100 iterations to prevent infinite loops.\n    ///\n    /// Use this when you want to verify that *some* suggestion sequence produces the\n    /// expected result, without caring which specific suggestions are used.\n    ///\n    /// See issue #950: https://github.com/Automattic/harper/issues/950\n    #[track_caller]\n    pub fn assert_suggestion_result(text: &str, mut linter: impl Linter, needle: &str) {\n        if search_for_suggestion(DocumentType::PlainEnglish, text, &mut linter, needle, 0) {\n            return;\n        }\n\n        panic!(\n            \"No suggestion sequence produced the expected result.\\n\\\n            Expected: \\\"{needle}\\\"\"\n        );\n    }\n\n    /// DFS implementation using markdown instead of plain English\n    #[track_caller]\n    pub fn assert_markdown_suggestion_result(text: &str, mut linter: impl Linter, needle: &str) {\n        if !search_for_suggestion(DocumentType::Markdown, text, &mut linter, needle, 0) {\n            panic!(\"No suggestion sequence produced the expected result.\\nExpected: {needle}\");\n        }\n    }\n\n    /// Recursively searches all suggestion combinations using depth-first search.\n    /// Returns true if any path reaches the expected result, false otherwise.\n    fn search_for_suggestion(\n        doc_type: DocumentType,\n        text: &str,\n        linter: &mut impl Linter,\n        needle: &str,\n        depth: usize,\n    ) -> bool {\n        // Prevent infinite recursion (e.g. cycles in suggestions)\n        if depth > 100 {\n            eprintln!(\"⚠️  Reached depth limit (100)\");\n            return false;\n        }\n\n        // Check if we've reached the expected result\n        if text == needle {\n            return true;\n        }\n\n        // Lint current text and try each suggestion branch\n        let chars: Vec<char> = text.chars().collect();\n        let document = create_document(&chars, doc_type);\n        let lints = linter.lint(&document);\n\n        if let Some(lint) = lints.first() {\n            for sug in lint.suggestions.iter() {\n                let mut chars_copy = chars.clone();\n                sug.apply(lint.span, &mut chars_copy);\n                let next: String = chars_copy.iter().collect();\n\n                // Recursively search this branch\n                if search_for_suggestion(doc_type, &next, linter, needle, depth + 1) {\n                    return true;\n                }\n            }\n        }\n\n        false\n    }\n\n    #[test]\n    fn verify_fix_one_lint() {\n        assert_suggestion_result(\n            \"find the misstake and fix it\",\n            TestLinter::new(&[(&[\"misstake\"], &[\"mistake\"])]),\n            \"find the mistake and fix it\",\n        );\n    }\n\n    #[test]\n    #[should_panic]\n    fn verify_unable_to_fix_one_spanish_lint() {\n        assert_suggestion_result(\"Hay una orrrer\", TestLinter::new(&[]), \"Hay una error\");\n    }\n\n    #[test]\n    fn verify_fix_two_lints() {\n        assert_suggestion_result(\n            \"find two misstakes and fix theem\",\n            TestLinter::new(&[(&[\"misstakes\"], &[\"mistakes\"]), (&[\"theem\"], &[\"them\"])]),\n            \"find two mistakes and fix them\",\n        );\n    }\n\n    // Stress test: multiple errors in one sentence, DFS must find correct suggestion path\n    // Note: This test is known to be brittle - it depends on SpellCheck dictionary and\n    // suggestion ranking. If it fails after a dictionary update, try different word combinations.\n    // Uses common misspellings that have unambiguous correct suggestions in the top 3.\n    #[test]\n    fn verify_fix_five_typos() {\n        assert_suggestion_result(\n            \"Please recieve teh payment untill thier authorization occured\",\n            TestLinter::new(&[\n                (&[\"recieve\"], &[\"receive\"]),\n                (&[\"teh\"], &[\"the\"]),\n                (&[\"untill\"], &[\"until\"]),\n                (&[\"thier\"], &[\"their\"]),\n                (&[\"occured\"], &[\"occurred\"]),\n            ]),\n            \"Please receive the payment until their authorization occurred\",\n        );\n    }\n\n    /// Asserts that none of the suggestions from the linter match the given text.\n    #[track_caller]\n    pub fn assert_not_in_suggestion_result(\n        text: &str,\n        mut linter: impl Linter,\n        bad_suggestion: &str,\n    ) {\n        if !search_for_suggestion(\n            DocumentType::PlainEnglish,\n            text,\n            &mut linter,\n            bad_suggestion,\n            0,\n        ) {\n            return;\n        }\n\n        panic!(\n            \"A suggestion sequence produced the undesired result.\\n\\\n            Undesired: \\\"{bad_suggestion}\\\"\"\n        );\n    }\n\n    #[test]\n    fn verify_sole_suggestion_is_the_one_we_wanted() {\n        assert_not_in_suggestion_result(\n            \"Baby cats are called kitens\",\n            TestLinter::new(&[]),\n            \"Baby cats are called puppies\",\n        );\n    }\n\n    // TODO verify sole suggestion is not the one we wanted fails\n\n    #[test]\n    #[should_panic]\n    fn verify_sole_suggestion_not_in_result_fails() {\n        assert_not_in_suggestion_result(\n            \"heloo\",\n            TestLinter::new(&[(&[\"heloo\"], &[\"hello\"])]),\n            \"hello\",\n        );\n    }\n\n    // TODO verify many suggestions including the one we want succeeds\n    // TODO verify many suggestions but not the one we want fails\n\n    /// Asserts both that the given text matches the expected good suggestions and that none of the\n    /// suggestions are in the bad suggestions list.\n    /// TODO: Reimplement similar to `search_suggestion_tree`\n    #[track_caller]\n    pub fn assert_good_and_bad_suggestions(\n        text: &str,\n        mut linter: impl Linter,\n        good: &[&str],\n        bad: &[&str],\n    ) {\n        let test = Document::new_plain_english_curated(text);\n        let lints = linter.lint(&test);\n\n        let mut unseen_good: HashSet<_> = good.iter().cloned().collect();\n        let mut found_bad = Vec::new();\n        let mut found_good = Vec::new();\n\n        for (i, lint) in lints.into_iter().enumerate() {\n            for (j, suggestion) in lint.suggestions.into_iter().enumerate() {\n                let mut text_chars: Vec<char> = text.chars().collect();\n                suggestion.apply(lint.span, &mut text_chars);\n                let suggestion_text: String = text_chars.into_iter().collect();\n\n                // Check for bad suggestions\n                if bad.contains(&&*suggestion_text) {\n                    found_bad.push((i, j, suggestion_text.clone()));\n                    eprintln!(\n                        \"  ❌ Found bad suggestion at lint[{i}].suggestions[{j}]: \\\"{suggestion_text}\\\"\"\n                    );\n                }\n                // Check for good suggestions\n                else if good.contains(&&*suggestion_text) {\n                    found_good.push((i, j, suggestion_text.clone()));\n                    eprintln!(\n                        \"  ✅ Found good suggestion at lint[{i}].suggestions[{j}]: \\\"{suggestion_text}\\\"\"\n                    );\n                    unseen_good.remove(suggestion_text.as_str());\n                }\n            }\n        }\n\n        // Print summary\n        if !found_bad.is_empty() || !unseen_good.is_empty() {\n            eprintln!(\"\\n=== Test Summary ===\");\n\n            // In the summary section, change these loops:\n            if !found_bad.is_empty() {\n                eprintln!(\"\\n❌ Found {} bad suggestions:\", found_bad.len());\n                for (i, j, text) in &found_bad {\n                    eprintln!(\"  - lint[{i}].suggestions[{j}]: \\\"{text}\\\"\");\n                }\n            }\n\n            // And for the good suggestions:\n            if !unseen_good.is_empty() {\n                eprintln!(\n                    \"\\n❌ Missing {} expected good suggestions:\",\n                    unseen_good.len()\n                );\n                for text in &unseen_good {\n                    eprintln!(\"  - \\\"{text}\\\"\");\n                }\n            }\n\n            eprintln!(\"\\n✅ Found {} good suggestions\", found_good.len());\n            eprintln!(\"==================\\n\");\n\n            if !found_bad.is_empty() || !unseen_good.is_empty() {\n                panic!(\"Test failed - see error output above\");\n            }\n        } else {\n            eprintln!(\n                \"\\n✅ All {} good suggestions found, no bad suggestions\\n\",\n                found_good.len()\n            );\n        }\n    }\n\n    // TODO test that having all the good and none of the bad succeeds\n    // TODO test that missing one of the good fails\n    // TODO test that having one of the bads fails\n\n    #[test]\n    #[should_panic]\n    fn verify_mutal_corrections_cause_failure() {\n        assert_suggestion_result(\n            \"gooder\",\n            TestLinter::new(&[(&[\"gooder\"], &[\"more good\"])]),\n            \"better\",\n        );\n    }\n\n    /// Asserts that the lint's message matches the expected message.\n    #[track_caller]\n    pub fn assert_lint_message(text: &str, mut linter: impl Linter, expected_message: &str) {\n        let test = Document::new_plain_english_curated(text);\n        let lints = linter.lint(&test);\n\n        // Just check the first lint for now - TODO\n        if let Some(lint) = lints.first()\n            && lint.message != expected_message\n        {\n            panic!(\n                \"Expected lint message \\\"{expected_message}\\\", but got \\\"{}\\\"\",\n                lint.message\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/modal_be_adjective.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token, TokenKind,\n    expr::{Expr, SequenceExpr},\n    linting::{\n        ExprLinter, Suggestion,\n        expr_linter::{Chunk, followed_by_word},\n    },\n    patterns::ModalVerb,\n};\n\npub struct ModalBeAdjective {\n    expr: SequenceExpr,\n}\n\nimpl Default for ModalBeAdjective {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::with(ModalVerb::default())\n                .t_ws()\n                .then_kind_is_but_isnt_any_of_except(\n                    TokenKind::is_adjective,\n                    &[\n                        TokenKind::is_verb_lemma,  // set\n                        TokenKind::is_adverb,      // ever\n                        TokenKind::is_preposition, // on\n                        TokenKind::is_determiner,  // all\n                        TokenKind::is_pronoun,     // all\n                    ] as &[_],\n                    &[\n                        \"backup\", // adjective commonly misused as a verb\n                        \"likely\", // adjective but with special usage\n                    ] as &[_],\n                ),\n        }\n    }\n}\n\nimpl ExprLinter for ModalBeAdjective {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        if followed_by_word(ctx, |nw| {\n            (nw.kind.is_noun()\n                && !nw\n                    .span\n                    .get_content(src)\n                    .eq_any_ignore_ascii_case_str(&[\"at\", \"by\", \"if\"]))\n                || (toks\n                    .last()\n                    .unwrap()\n                    .span\n                    .get_content(src)\n                    .eq_ignore_ascii_case_str(\"kind\")\n                    && nw.span.get_content(src).eq_ignore_ascii_case_str(\"of\"))\n        }) {\n            return None;\n        }\n\n        Some(Lint {\n            span: toks[0].span,\n            suggestions: vec![Suggestion::InsertAfter(\" be\".chars().collect())],\n            message: \"You may be missing the word `be` between this modal verb and adjective.\"\n                .to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Looks for `be` missing between a modal verb and adjective.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::ModalBeAdjective;\n\n    #[test]\n    fn fix_would_nice() {\n        assert_suggestion_result(\n            \"It would nice if Harper could detect this.\",\n            ModalBeAdjective::default(),\n            \"It would be nice if Harper could detect this.\",\n        );\n    }\n\n    #[test]\n    fn fix_could_configured() {\n        assert_suggestion_result(\n            \"It could configured by parameters and the commands above effectively disable it.\",\n            ModalBeAdjective::default(),\n            \"It could be configured by parameters and the commands above effectively disable it.\",\n        );\n    }\n\n    #[test]\n    fn fix_will_accessible() {\n        assert_suggestion_result(\n            \"Your WordPress site will accessible at http://localhost\",\n            ModalBeAdjective::default(),\n            \"Your WordPress site will be accessible at http://localhost\",\n        );\n    }\n\n    #[test]\n    fn ignore_would_external_traffic() {\n        assert_no_lints(\n            \"And why would external traffic be trying to access my server if I don't know who or what it is?\",\n            ModalBeAdjective::default(),\n        )\n    }\n\n    #[test]\n    fn ignore_could_kind_of() {\n        assert_no_lints(\"you could kind of see the ...\", ModalBeAdjective::default())\n    }\n\n    // Known false positives. You may want to improve the code to handle some of these.\n\n    #[test]\n    #[ignore = \"false positive: 'backup' is an adjective but also a spello for the verb 'back up'\"]\n    fn ignore_you_can_backup() {\n        assert_no_lints(\"You can backup Userdata.\", ModalBeAdjective::default());\n    }\n\n    #[test]\n    #[ignore = \"false positive: 'incorrect' should be 'incorrectly'.\"]\n    fn ignore_would_incorrect() {\n        assert_no_lints(\n            \"Bug in versions 4.0 and 4.1 would incorrect list the address module\",\n            ModalBeAdjective::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"false positive: 'upper-bound' is an ad-hoc verb here.\"]\n    fn ignore_should_upper() {\n        assert_no_lints(\n            \"we should upper-bound it to the next MAJOR version.\",\n            ModalBeAdjective::default(),\n        );\n        assert_no_lints(\n            \"some older software (filezilla on debian-stable) cannot passive-mode with TLS\",\n            ModalBeAdjective::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/modal_of.rs",
    "content": "use crate::{\n    Lrc, Token, TokenStringExt,\n    expr::{Expr, FirstMatchOf, LongestMatchOf, OwnedExprExt, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::{ModalVerb, Word},\n};\n\npub struct ModalOf {\n    expr: LongestMatchOf,\n}\n\nimpl Default for ModalOf {\n    fn default() -> Self {\n        // Note 1. \"shan't of\" is plausible but very unlikely\n        // Note 2. \"had of\" has trickier false positives and is less common anyway\n        // \"The only other report we've had of this kind of problem ...\"\n        // \"The code I had of this used to work fine ...\"\n\n        let modal_of = Lrc::new(\n            SequenceExpr::with(ModalVerb::default())\n                .then_whitespace()\n                .t_aco(\"of\")\n                .and_not(FirstMatchOf::new(vec![\n                    Box::new(Word::new(\"can\")),\n                    Box::new(Word::new_exact(\"May\")),\n                ])),\n        );\n\n        // \"will of\" is a false positive if \"will\" is a noun\n        // \"The will of the many\"\n        let noun_will_of_naive = Lrc::new(\n            SequenceExpr::word_set(&[\"the\", \"a\"])\n                .then_whitespace()\n                .t_aco(\"will\")\n                .then_whitespace()\n                .t_aco(\"of\"),\n        );\n\n        let ws_course = Lrc::new(SequenceExpr::whitespace().t_aco(\"course\"));\n\n        let modal_of_course =\n            Lrc::new(SequenceExpr::with(modal_of.clone()).then(ws_course.clone()));\n\n        let anyword_might_of = Lrc::new(\n            SequenceExpr::any_word()\n                .then_whitespace()\n                .t_aco(\"might\")\n                .then_whitespace()\n                .t_aco(\"of\"),\n        );\n\n        let anyword_might_of_course =\n            Lrc::new(SequenceExpr::with(anyword_might_of.clone()).then(ws_course.clone()));\n\n        Self {\n            expr: LongestMatchOf::new(vec![\n                Box::new(anyword_might_of_course),\n                Box::new(modal_of_course),\n                Box::new(anyword_might_of),\n                Box::new(noun_will_of_naive),\n                Box::new(modal_of),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for ModalOf {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_toks: &[Token], source_chars: &[char]) -> Option<Lint> {\n        let modal_index = match matched_toks.len() {\n            // Without context, always an error from the start\n            3 => 0,\n            5 => {\n                // False positives: modal _ of _ course / adj. _ might _ of / art. _ might _ of\n                let w3_text = matched_toks\n                    .last()\n                    .unwrap()\n                    .span\n                    .get_content(source_chars)\n                    .iter()\n                    .collect::<String>();\n                if w3_text.as_str() != \"of\" {\n                    return None;\n                }\n                let w1_kind = &matched_toks.first().unwrap().kind;\n                // the might of something, great might of something\n                if w1_kind.is_adjective() || w1_kind.is_determiner() {\n                    return None;\n                }\n                // not a false positive, skip context before\n                2\n            }\n            // False positive: <word> _ might _ of _ course\n            7 => return None,\n            _ => unreachable!(),\n        };\n\n        let span_modal_of = matched_toks[modal_index..modal_index + 3].span().unwrap();\n\n        let modal_have = format!(\n            \"{} have\",\n            matched_toks[modal_index]\n                .span\n                .get_content_string(source_chars)\n        )\n        .chars()\n        .collect();\n\n        Some(Lint {\n            span: span_modal_of,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                modal_have,\n                span_modal_of.get_content(source_chars),\n            )],\n            message: \"Use `have` rather than `of` here.\".to_string(),\n            priority: 126,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects `of` mistakenly used with `would`, `could`, `should`, etc.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ModalOf;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    // atomic unit tests\n\n    #[test]\n    fn test_lowercase() {\n        assert_suggestion_result(\"could of\", ModalOf::default(), \"could have\");\n    }\n\n    #[test]\n    fn test_negative() {\n        assert_suggestion_result(\"mightn't of\", ModalOf::default(), \"mightn't have\");\n    }\n\n    #[test]\n    fn test_uppercase_negative() {\n        assert_suggestion_result(\"Mustn't of\", ModalOf::default(), \"Mustn't have\");\n    }\n\n    #[test]\n    fn test_false_positive_of_course() {\n        assert_lint_count(\"should of course\", ModalOf::default(), 0);\n    }\n\n    #[test]\n    fn test_false_positive_the_might_of() {\n        assert_lint_count(\"the might of\", ModalOf::default(), 0);\n    }\n\n    #[test]\n    fn test_false_positive_great_might_of() {\n        assert_lint_count(\"great might of\", ModalOf::default(), 0);\n    }\n\n    #[test]\n    fn test_false_positive_capital_negative() {\n        assert_lint_count(\"Wouldn't of course\", ModalOf::default(), 0);\n    }\n\n    // real-world tests\n\n    #[test]\n    fn test_buggy_implementation() {\n        assert_lint_count(\n            \"... could of just been a buggy implementation\",\n            ModalOf::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn test_missed_one() {\n        assert_lint_count(\n            \"We already have a function ... that nedb can understand so we might of missed one.\",\n            ModalOf::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn test_user_option() {\n        assert_lint_count(\n            \"im more likely to believe you might of left in the 'user' option\",\n            ModalOf::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn catches_must_of() {\n        assert_suggestion_result(\n            \"Ah I must of missed that part.\",\n            ModalOf::default(),\n            \"Ah I must have missed that part.\",\n        );\n    }\n\n    #[test]\n    fn catches_should_of() {\n        assert_lint_count(\n            \"Yeah I should of just mentioned it should of been a for of.\",\n            ModalOf::default(),\n            2,\n        );\n    }\n\n    #[test]\n    fn catches_would_of() {\n        assert_suggestion_result(\n            \"now this issue would of caused hundreds of thousands of extra lines\",\n            ModalOf::default(),\n            \"now this issue would have caused hundreds of thousands of extra lines\",\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_you_could_of_course() {\n        assert_lint_count(\n            \"You could of course explicit the else with each possibility\",\n            ModalOf::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_compiler_could_of_course() {\n        assert_lint_count(\n            \"The compiler could of course detect this too\",\n            ModalOf::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_might_of_course_be() {\n        assert_lint_count(\n            \"There might of course be other places where not implementing the IMemberSource might break ...\",\n            ModalOf::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_not_a_must_of_course() {\n        assert_lint_count(\n            \"Not a must of course if the convention should be .ts\",\n            ModalOf::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_must_of_course_also() {\n        assert_lint_count(\n            \"the schedular must of course also have run through\",\n            ModalOf::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_should_of_course_not() {\n        assert_lint_count(\n            \"not being local should of course not be supported\",\n            ModalOf::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_would_of_course_just() {\n        assert_lint_count(\n            \"I would of course just test this by compiling with MATX_MULTI_GPU=ON\",\n            ModalOf::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn doesnt_catch_to_take_on_the_full_might_of_nato() {\n        assert_lint_count(\"To take on the full might of NATO.\", ModalOf::default(), 0);\n    }\n\n    #[test]\n    fn doesnt_catch_mixed_case_of_course() {\n        assert_lint_count(\n            \"... for now you could of Course put ...\",\n            ModalOf::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn catches_mixed_case_could_of_put() {\n        assert_lint_count(\"... for now you could of Put ...\", ModalOf::default(), 1);\n    }\n\n    #[test]\n    fn doesnt_catch_noun_will_of() {\n        assert_lint_count(\"the will of the many\", ModalOf::default(), 0);\n    }\n\n    #[test]\n    fn doesnt_catch_noun_will_of_edgecase() {\n        assert_lint_count(\"he sent us a will of his\", ModalOf::default(), 0);\n    }\n\n    #[test]\n    fn catch_modal_will_of() {\n        assert_lint_count(\"that will of an impact\", ModalOf::default(), 1);\n    }\n\n    #[test]\n    fn catch_may_of() {\n        assert_suggestion_result(\n            \"I may of made a mistake\",\n            ModalOf::default(),\n            \"I may have made a mistake\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_in_may_of_last_year_bug_2786() {\n        assert_no_lints(\"This happened in May of last year.\", ModalOf::default());\n    }\n\n    #[test]\n    fn dont_flag_can_of_red_bull_2807() {\n        assert_no_lints(\"I drank a can of Red Bull.\", ModalOf::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/modal_seem.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    CharStringExt, Token,\n    expr::{Expr, ExprMap, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::ModalVerb,\n};\n\n#[derive(Clone, Copy, Default)]\nstruct MatchContext {\n    modal_index: usize,\n}\n\npub struct ModalSeem {\n    expr: ExprMap<MatchContext>,\n}\n\nimpl ModalSeem {\n    fn base_sequence() -> SequenceExpr {\n        SequenceExpr::with(ModalVerb::default())\n            .t_ws()\n            .t_aco(\"seen\")\n    }\n\n    fn adjective_step() -> SequenceExpr {\n        SequenceExpr::default()\n            .t_ws()\n            .then_kind_where(|kind| kind.is_adjective())\n    }\n\n    fn adverb_then_adjective_step() -> SequenceExpr {\n        SequenceExpr::default()\n            .t_ws()\n            .then_kind_where(|kind| kind.is_adverb())\n            .t_ws()\n            .then_kind_where(|kind| kind.is_adjective())\n    }\n}\n\nimpl Default for ModalSeem {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        map.insert(\n            SequenceExpr::default()\n                .then_seq(Self::base_sequence())\n                .then(Self::adjective_step()),\n            MatchContext::default(),\n        );\n\n        map.insert(\n            SequenceExpr::default()\n                .then_seq(Self::base_sequence())\n                .then(Self::adverb_then_adjective_step()),\n            MatchContext::default(),\n        );\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for ModalSeem {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let context = self.expr.lookup(0, matched_tokens, source)?;\n\n        let seen_token = matched_tokens\n            .iter()\n            .skip(context.modal_index)\n            .find(|tok| {\n                tok.span\n                    .get_content(source)\n                    .eq_ignore_ascii_case_str(\"seen\")\n            })?;\n\n        let span = seen_token.span;\n        let original = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![\n                Suggestion::replace_with_match_case(\"seem\".chars().collect(), original),\n                Suggestion::replace_with_match_case(\"be\".chars().collect(), original),\n            ],\n            message: \"Swap `seen` for a linking verb when it follows a modal before an adjective.\"\n                .to_owned(),\n            priority: 32,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects modal verbs followed by `seen` before adjectives and suggests `seem` or `be`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ModalSeem;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn corrects_basic_case() {\n        assert_suggestion_result(\n            \"It may seen impossible to finish.\",\n            ModalSeem::default(),\n            \"It may seem impossible to finish.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_adverb() {\n        assert_suggestion_result(\n            \"That might seen utterly ridiculous.\",\n            ModalSeem::default(),\n            \"That might seem utterly ridiculous.\",\n        );\n    }\n\n    #[test]\n    fn offers_be_option() {\n        assert_suggestion_result(\n            \"It may seen impossible to finish.\",\n            ModalSeem::default(),\n            \"It may be impossible to finish.\",\n        );\n    }\n\n    #[test]\n    fn respects_uppercase() {\n        assert_suggestion_result(\n            \"THIS COULD SEEN TERRIBLE.\",\n            ModalSeem::default(),\n            \"THIS COULD SEEM TERRIBLE.\",\n        );\n    }\n\n    #[test]\n    fn corrects_before_punctuation() {\n        assert_suggestion_result(\n            \"Still, it may seen absurd, but we will continue.\",\n            ModalSeem::default(),\n            \"Still, it may seem absurd, but we will continue.\",\n        );\n    }\n\n    #[test]\n    fn corrects_across_newline() {\n        assert_suggestion_result(\n            \"It may seen\\n impossible to pull off.\",\n            ModalSeem::default(),\n            \"It may seem\\n impossible to pull off.\",\n        );\n    }\n\n    #[test]\n    fn ignores_correct_seem() {\n        assert_no_lints(\"It may seem impossible to finish.\", ModalSeem::default());\n    }\n\n    #[test]\n    fn ignores_modal_with_be_seen() {\n        assert_no_lints(\"It may be seen as unfair.\", ModalSeem::default());\n    }\n\n    #[test]\n    fn ignores_modal_seen_noun() {\n        assert_no_lints(\n            \"It may seen results sooner than expected.\",\n            ModalSeem::default(),\n        );\n    }\n\n    #[test]\n    fn ignores_modal_seen_clause() {\n        assert_lint_count(\n            \"It may seen that we are improving.\",\n            ModalSeem::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/months.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Lrc, Token, TokenKind,\n    expr::{Expr, FirstMatchOf, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\n// Static array of all month names\nconst ALL_MONTHS: &[&str] = &[\n    \"january\",\n    \"february\",\n    \"march\",\n    \"april\",\n    \"may\",\n    \"june\",\n    \"july\",\n    \"august\",\n    \"september\",\n    \"october\",\n    \"november\",\n    \"december\",\n];\n\npub struct Months {\n    expr: SequenceExpr,\n}\n\nimpl Default for Months {\n    fn default() -> Self {\n        // Define ambiguous months (those that are also common words)\n        let ambiguous_months = Lrc::new(WordSet::new(&[\"march\", \"may\", \"august\"]));\n\n        // The unambiguous months\n        let only_months: Vec<&str> = ALL_MONTHS\n            .iter()\n            .filter(|&&m| !ambiguous_months.contains(m))\n            .copied()\n            .collect();\n\n        let only_months = WordSet::new(&only_months);\n\n        let before_month_sense_only = WordSet::new(&[\n            // Determiners.\n            // These words won't disambiguate months: \"each\", \"this\", \"that\"\n            // \"each may do as he likes\"\n            // \"this may be the best month\"\n            \"every\",\n            // Prepositions.\n            // Possible false positives:\n            // \"the first word at the beginning of the next may be fragmented\"\n            // \"Next may be to offer all the color tables in some way\"\n            // \"First and last may have been swapped\"\n            \"by\", \"during\", \"in\", \"last\", \"next\", \"of\", \"until\",\n        ]);\n\n        let year_or_day_of_month = SequenceExpr::default().then_kind_where(|kind| {\n            if let TokenKind::Number(number) = &kind {\n                let v = number.value.into_inner() as u32;\n                (1500..=2500).contains(&v) || (1..=31).contains(&v)\n            } else {\n                false\n            }\n        });\n\n        // An Expr that matches either a plain month\n        // Or an ambiguous month after a disambiguating word\n        let month_expr = SequenceExpr::with(FirstMatchOf::new(vec![\n            Box::new(only_months),\n            Box::new(\n                SequenceExpr::with(before_month_sense_only)\n                    .then_whitespace()\n                    .then(ambiguous_months.clone()),\n            ),\n            Box::new(\n                SequenceExpr::with(ambiguous_months)\n                    .then_whitespace()\n                    .then(year_or_day_of_month),\n            ),\n        ]));\n\n        Self { expr: month_expr }\n    }\n}\n\nimpl ExprLinter for Months {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], src: &[char]) -> Option<Lint> {\n        // `find` which token is the month by seeing which tok's content (lowercased) is in ALL_MONTHS\n        let month_tok = tokens.iter().find(|token| {\n            let token_str = token.span.get_content_string(src);\n            ALL_MONTHS.iter().any(|&m| m == token_str.to_lowercase())\n        })?; // Return None if no month token found\n\n        // let month_tok = tokens.last().unwrap();\n        let month_ch = month_tok.span.get_content(src);\n\n        if month_ch[0].is_uppercase() {\n            return None;\n        }\n\n        let mut month_vec = month_ch.to_vec();\n        month_vec[0] = month_vec[0].to_ascii_uppercase();\n\n        Some(Lint {\n            span: month_tok.span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::ReplaceWith(month_vec)],\n            message: \"Months should be written with a capital letter.\".to_string(),\n            priority: 126,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects months written with a lowercase first letter.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Months;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn fix_in_august() {\n        assert_suggestion_result(\n            \"I worked for WebstaurantStore doing Quality Assurance Automation and am now transitioning to a new graduate developer role at BNY Mellon, starting in august.\",\n            Months::default(),\n            \"I worked for WebstaurantStore doing Quality Assurance Automation and am now transitioning to a new graduate developer role at BNY Mellon, starting in August.\",\n        );\n    }\n\n    #[test]\n    fn fix_in_march() {\n        assert_suggestion_result(\n            \"This game was originally written by me in march 2000.\",\n            Months::default(),\n            \"This game was originally written by me in March 2000.\",\n        );\n    }\n\n    #[test]\n    fn fix_in_may() {\n        assert_suggestion_result(\n            \"typo in may 2024 updates\",\n            Months::default(),\n            \"typo in May 2024 updates\",\n        );\n    }\n\n    #[test]\n    fn fix_last_august() {\n        assert_suggestion_result(\n            \"since last august smart has been leading talks to open up japan\",\n            Months::default(),\n            \"since last August smart has been leading talks to open up japan\",\n        );\n    }\n\n    #[test]\n    fn fix_last_may() {\n        assert_suggestion_result(\n            \"I have a 2019 mini countryman that i purchased last may.\",\n            Months::default(),\n            \"I have a 2019 mini countryman that i purchased last May.\",\n        );\n    }\n\n    #[test]\n    fn fix_of_august() {\n        assert_suggestion_result(\n            \"change abbreviation of august for Indonesian locale\",\n            Months::default(),\n            \"change abbreviation of August for Indonesian locale\",\n        )\n    }\n\n    #[test]\n    fn fix_march_2019() {\n        assert_suggestion_result(\n            \"How to disable drop cap today (late march 2019)\",\n            Months::default(),\n            \"How to disable drop cap today (late March 2019)\",\n        );\n    }\n\n    #[test]\n    fn fix_may_2022() {\n        assert_suggestion_result(\n            \"That will be ende from 30 may 2022.\",\n            Months::default(),\n            \"That will be ende from 30 May 2022.\",\n        );\n    }\n\n    #[test]\n    fn fix_days() {\n        assert_suggestion_result(\n            \"Between march 15 and august 27.\",\n            Months::default(),\n            \"Between March 15 and August 27.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/more_adjective.rs",
    "content": "use itertools::Itertools;\n\nuse crate::{\n    char_ext::CharExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    spell::Dictionary,\n    {CharStringExt, Lint, Token, TokenStringExt},\n};\n\npub struct MoreAdjective<D> {\n    expr: SequenceExpr,\n    dict: D,\n}\n\nimpl<D> MoreAdjective<D>\nwhere\n    D: Dictionary,\n{\n    pub fn new(dict: D) -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"more\", \"most\"])\n                .t_ws()\n                .then_positive_adjective(),\n            dict,\n        }\n    }\n\n    fn add_valid_candidate(&self, candidates: &mut Vec<String>, candidate: String) -> bool {\n        if let Some(metadata) = self.dict.get_word_metadata_str(&candidate)\n            && (metadata.is_comparative_adjective() || metadata.is_superlative_adjective())\n        {\n            candidates.push(candidate);\n            true\n        } else {\n            false\n        }\n    }\n}\n\nimpl<D> ExprLinter for MoreAdjective<D>\nwhere\n    D: Dictionary,\n{\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        // Check invariants just in case the Expr changes\n        if toks.len() != 3 || !toks[1].kind.is_whitespace() || !toks[2].kind.is_positive_adjective()\n        {\n            return None;\n        }\n\n        let phrase = toks.span()?;\n\n        enum Degree {\n            Comparative,\n            Superlative,\n        }\n\n        let degree_tok = &toks[0];\n        let degree_chars = degree_tok.span.get_content(src);\n\n        let degree = if degree_chars.eq_ignore_ascii_case_str(\"more\") {\n            Degree::Comparative\n        } else if degree_chars.eq_ignore_ascii_case_str(\"most\") {\n            Degree::Superlative\n        } else {\n            return None;\n        };\n\n        let ending = match degree {\n            Degree::Comparative => \"er\",\n            Degree::Superlative => \"est\",\n        };\n\n        let adj_tok = &toks[2];\n        let adj_span = adj_tok.span;\n        let adj_chars = adj_span.get_content(src);\n        let adj_str = adj_span.get_content_string(src);\n\n        if adj_chars.len() < 2 {\n            return None;\n        }\n\n        // \"humaner\" = \"more humane\", not \"more human\"\n        if adj_str == \"human\" {\n            return None;\n        }\n\n        let mut candidates: Vec<String> = vec![];\n\n        // Only a handful of adjectives are irregular\n        let new_candidates = match adj_str.as_str() {\n            \"bad\" => match degree {\n                Degree::Comparative => Some(&[\"worse\"][..]),\n                Degree::Superlative => Some(&[\"worst\"][..]),\n            },\n            \"good\" => match degree {\n                Degree::Comparative => Some(&[\"better\"][..]),\n                Degree::Superlative => Some(&[\"best\"][..]),\n            },\n            \"far\" => match degree {\n                Degree::Comparative => Some(&[\"further\", \"farther\"][..]),\n                Degree::Superlative => Some(&[\"furthest\", \"farthest\"][..]),\n            },\n            _ => None,\n        };\n        if let Some(irregulars) = new_candidates {\n            candidates.extend(irregulars.iter().map(|c| c.to_string()));\n        }\n\n        // Just add the ending: smart -> smarter/smartest\n        self.add_valid_candidate(&mut candidates, format!(\"{}{}\", adj_str, ending));\n\n        // Double consonant: big -> bigger/biggest\n        let penult = adj_chars[adj_chars.len() - 2];\n        let last = adj_chars[adj_chars.len() - 1];\n        if penult.is_vowel() && !last.is_vowel() {\n            self.add_valid_candidate(&mut candidates, format!(\"{}{}{}\", adj_str, last, ending));\n        }\n\n        if last == 'y' {\n            // smelly -> smellier/smelliest\n            self.add_valid_candidate(\n                &mut candidates,\n                format!(\n                    \"{}i{}\",\n                    &adj_chars[0..adj_chars.len() - 1].iter().collect::<String>(),\n                    ending\n                ),\n            );\n        } else if last == 'e' {\n            // cute -> cuter/cutest\n            self.add_valid_candidate(\n                &mut candidates,\n                format!(\n                    \"{}{}\",\n                    &adj_chars[0..adj_chars.len() - 1].iter().collect::<String>(),\n                    ending\n                ),\n            );\n        }\n\n        if candidates.is_empty() {\n            return None;\n        }\n\n        let suggestions = candidates\n            .iter()\n            .map(|c| {\n                Suggestion::replace_with_match_case(\n                    c.chars().collect_vec(),\n                    phrase.get_content(src),\n                )\n            })\n            .collect::<Vec<Suggestion>>();\n\n        Some(Lint {\n            span: phrase,\n            lint_kind: LintKind::Style,\n            suggestions,\n            message: \"This is not an error, but an inflected form of this adjective also exists\"\n                .to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Looks for comparative adjective constructions with `more` than could use inflected forms.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::linting::tests::{\n        assert_good_and_bad_suggestions, assert_no_lints, assert_suggestion_result,\n    };\n    use crate::spell::FstDictionary;\n\n    // True positives\n\n    #[test]\n    fn add_er() {\n        assert_suggestion_result(\n            \"The red car is more fast.\",\n            MoreAdjective::new(FstDictionary::curated()),\n            \"The red car is faster.\",\n        );\n    }\n\n    #[test]\n    fn add_r() {\n        assert_suggestion_result(\n            \"The fluffy one is more cute.\",\n            MoreAdjective::new(FstDictionary::curated()),\n            \"The fluffy one is cuter.\",\n        );\n    }\n\n    #[test]\n    fn double_final_consonant() {\n        assert_suggestion_result(\n            \"You'll find out when you're more big.\",\n            MoreAdjective::new(FstDictionary::curated()),\n            \"You'll find out when you're bigger.\",\n        )\n    }\n\n    #[test]\n    fn final_y() {\n        assert_suggestion_result(\n            \"That one was even more smelly!\",\n            MoreAdjective::new(FstDictionary::curated()),\n            \"That one was even smellier!\",\n        );\n    }\n\n    #[test]\n    fn irregular_good() {\n        assert_suggestion_result(\n            \"I bet you couldn't do more good.\",\n            MoreAdjective::new(FstDictionary::curated()),\n            \"I bet you couldn't do better.\",\n        );\n    }\n\n    #[test]\n    fn irregular_far() {\n        assert_good_and_bad_suggestions(\n            \"Is it much more far?\",\n            MoreAdjective::new(FstDictionary::curated()),\n            &[\"Is it much further?\", \"Is it much farther?\"],\n            &[],\n        );\n    }\n\n    #[test]\n    fn humane() {\n        assert_suggestion_result(\n            \"That Klingon is more humane than the humans!\",\n            MoreAdjective::new(FstDictionary::curated()),\n            \"That Klingon is humaner than the humans!\",\n        );\n    }\n\n    // False positives\n\n    #[test]\n    fn dont_flag_more_time() {\n        assert_no_lints(\n            \"I need more time.\",\n            MoreAdjective::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_more_model() {\n        assert_no_lints(\n            \"Expanded access to more model architectures\",\n            MoreAdjective::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_more_human() {\n        assert_no_lints(\n            \"I am more human than machine.\",\n            MoreAdjective::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_more_battle() {\n        assert_no_lints(\n            \"and has more battle-tested defaults\",\n            MoreAdjective::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_more_like() {\n        assert_no_lints(\n            \"It's more like a suggestion than a mistake.\",\n            MoreAdjective::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_more_ground() {\n        assert_no_lints(\n            \"This E2E security scan covers more ground\",\n            MoreAdjective::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_more_foreign() {\n        assert_no_lints(\n            \"There are more foreign visitors this year.\",\n            MoreAdjective::new(FstDictionary::curated()),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/more_better.rs",
    "content": "use crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::token::Token;\nuse crate::token_string_ext::TokenStringExt;\n\npub struct MoreBetter {\n    expr: SequenceExpr,\n}\n\nimpl Default for MoreBetter {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::any_of(vec![\n                Box::new(\n                    SequenceExpr::default()\n                        .t_aco(\"more\")\n                        .t_ws()\n                        .then_comparative_adjective(),\n                ),\n                Box::new(\n                    SequenceExpr::default()\n                        .t_aco(\"most\")\n                        .t_ws()\n                        .then_superlative_adjective(),\n                ),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for MoreBetter {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let phrase_span = toks.span()?;\n\n        let degree_str = toks.first()?.span.get_content_string(src);\n        let adj_span = toks.last()?.span;\n\n        let suggestion = Suggestion::replace_with_match_case(\n            adj_span.get_content(src).to_vec(),\n            phrase_span.get_content(src),\n        );\n\n        let message = format!(\n            \"{} is already in the {} form, the {} is redundant\",\n            adj_span.get_content_string(src),\n            if degree_str.eq_ignore_ascii_case(\"more\") {\n                \"comparative\"\n            } else {\n                \"superlative\"\n            },\n            degree_str,\n        );\n\n        Some(Lint {\n            span: phrase_span,\n            lint_kind: LintKind::Redundancy,\n            suggestions: vec![suggestion],\n            message,\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Finds redundant paring of `more` or `most` with adjectives already in the comparative or superlative form.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::MoreBetter;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn flag_most_biggest() {\n        assert_suggestion_result(\"Most biggest\", MoreBetter::default(), \"Biggest\");\n    }\n\n    #[test]\n    fn flag_more_better_and_more_better() {\n        assert_suggestion_result(\n            \"More bigger is more better\",\n            MoreBetter::default(),\n            \"Bigger is better\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/most_number.rs",
    "content": "use crate::expr::All;\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct MostNumber {\n    expr: All,\n}\n\nimpl Default for MostNumber {\n    fn default() -> Self {\n        Self {\n            expr: All::new(vec![\n                // Main pattern\n                Box::new(\n                    SequenceExpr::default()\n                        .t_aco(\"most\")\n                        .t_ws()\n                        .then_word_set(&[\"amount\", \"number\"]),\n                ),\n                // Context pattern\n                Box::new(\n                    SequenceExpr::anything()\n                        .then_anything()\n                        .then_anything()\n                        .then_anything()\n                        .t_aco(\"of\"),\n                ),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for MostNumber {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], source: &[char]) -> Option<Lint> {\n        let most_amt_num_span = toks[0..3].span()?;\n        let noun_string = toks[2].span.get_content_string(source);\n        let superlatives = if noun_string == \"amount\" {\n            vec![\"largest\", \"greatest\", \"maximum\"]\n        } else {\n            vec![\"highest\", \"largest\", \"maximum\"]\n        };\n        let suggestions = superlatives\n            .into_iter()\n            .map(|superlative| {\n                Suggestion::replace_with_match_case(\n                    format!(\"{superlative} {noun_string}\").chars().collect(),\n                    most_amt_num_span.get_content(source),\n                )\n            })\n            .collect();\n        Some(Lint {\n            span: most_amt_num_span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions,\n            message: format!(\n                \"`Most` is not standard before `{}`.\",\n                toks[2].span.get_content_string(source)\n            ),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `most number` and `most amount`\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::MostNumber;\n\n    #[test]\n    fn corrects_most_number() {\n        assert_suggestion_result(\n            \"Find artists that have been on Spotify the most number of times.\",\n            MostNumber::default(),\n            \"Find artists that have been on Spotify the highest number of times.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"replace_with_match_case currently produces 'GreatEst'\"]\n    fn corrects_most_amount_title_case() {\n        assert_suggestion_result(\n            \"Area of Container with the Most Amount of Water\",\n            MostNumber::default(),\n            \"Area of Container with the Greatest Amount of Water\",\n        );\n    }\n\n    #[test]\n    fn corrects_most_amount() {\n        assert_suggestion_result(\n            \"I just wanted to make sure it's good for the most amount of people, not just what I like.\",\n            MostNumber::default(),\n            \"I just wanted to make sure it's good for the greatest amount of people, not just what I like.\",\n        );\n    }\n\n    #[test]\n    fn dont_correct_most_number_without_context() {\n        assert_lint_count(\n            \"The random non-sequential nature should prevent most number gaming/sniping/lunging.\",\n            MostNumber::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_most_amount_with_maximum() {\n        assert_suggestion_result(\n            \"If you want to support the most amount of different architectures ...\",\n            MostNumber::default(),\n            \"If you want to support the maximum amount of different architectures ...\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/most_of_the_times.rs",
    "content": "use crate::expr::{Expr, FixedPhrase, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, LintKind, Suggestion};\nuse crate::patterns::Word;\nuse crate::{Lint, Token};\n\npub struct MostOfTheTimes {\n    expr: SequenceExpr,\n}\n\nimpl Default for MostOfTheTimes {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::any_of(vec![\n                Box::new(FixedPhrase::from_phrase(\"a lot\")),\n                Box::new(Word::new(\"most\")),\n            ])\n            .t_ws()\n            .then_fixed_phrase(\"of the times\"),\n        }\n    }\n}\n\nimpl ExprLinter for MostOfTheTimes {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let span = toks.last()?.span;\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"time\".chars().collect(),\n                span.get_content(src),\n            )],\n            message: \"Singular `time` is usually the correct form in this context.\".to_string(),\n            priority: 32,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `a lot of the times` and `most of the times` to use singular `time`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::MostOfTheTimes;\n\n    #[test]\n    fn hangs_forever() {\n        assert_suggestion_result(\n            \"restic backup hangs forever most of the times · Issue #2834\",\n            MostOfTheTimes::default(),\n            \"restic backup hangs forever most of the time · Issue #2834\",\n        );\n    }\n\n    #[test]\n    fn options_are_ignored() {\n        assert_suggestion_result(\n            \"but other options like device and options are ignored most of the times\",\n            MostOfTheTimes::default(),\n            \"but other options like device and options are ignored most of the time\",\n        );\n    }\n\n    #[test]\n    fn parenthesized() {\n        assert_suggestion_result(\n            \"prompted html code gets (most of the times) read by copilot but is not displayed.\",\n            MostOfTheTimes::default(),\n            \"prompted html code gets (most of the time) read by copilot but is not displayed.\",\n        );\n    }\n\n    #[test]\n    fn i_cant_play() {\n        assert_suggestion_result(\n            \"I cannot get the version 1.0 without c so I cant play a lot of the times with other people\",\n            MostOfTheTimes::default(),\n            \"I cannot get the version 1.0 without c so I cant play a lot of the time with other people\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/multiple_frequency_adverbs.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, expr_linter::Sentence},\n};\n\npub struct MultipleFrequencyAdverbs {\n    expr: SequenceExpr,\n}\n\nimpl Default for MultipleFrequencyAdverbs {\n    fn default() -> Self {\n        let adverb_of_frequency = |t: &Token, s: &[char]| {\n            t.kind.is_frequency_adverb()\n                && !t\n                    .span\n                    .get_content(s)\n                    .eq_ignore_ascii_case_chars(&['o', 'n', 'l', 'y'])\n        };\n\n        Self {\n            expr: SequenceExpr::default()\n                .then(adverb_of_frequency)\n                .then_optional_comma()\n                .t_ws()\n                .then(adverb_of_frequency),\n        }\n    }\n}\n\nimpl ExprLinter for MultipleFrequencyAdverbs {\n    // We have to use `Sentence` if our `Expr` includes commas!\n    type Unit = Sentence;\n\n    fn description(&self) -> &str {\n        \"Looks for adjacent adverbs of frequency, which will be either redundant or contradictory.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let (adv1tok, adv2tok) = (toks.first()?, toks.last()?);\n        let (adv1span, adv2span) = (adv1tok.span, adv2tok.span);\n        let (adv1ch, adv2ch) = (adv1span.get_content(src), adv2span.get_content(src));\n\n        if !adv1ch.eq_ignore_ascii_case_chars(adv2ch) {\n            Some(Lint {\n                span: toks.span()?,\n                lint_kind: LintKind::Usage,\n                suggestions: vec![],\n                message: format!(\n                    \"The adverbs of frequency ‘{}’ and ‘{}’ are either redundant or contradictory\",\n                    adv1ch.to_string(),\n                    adv2ch.to_string()\n                ),\n                ..Default::default()\n            })\n        } else {\n            None\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::MultipleFrequencyAdverbs;\n    use crate::linting::tests::assert_lint_count;\n\n    #[test]\n    fn often_never_without_comma() {\n        assert_lint_count(\"People have often never even heard of nutrinos, but yeah, about 100 billion solar nutrinos are passing through your thumbnail every second.\n\", MultipleFrequencyAdverbs::default(), 1);\n    }\n\n    #[test]\n    fn often_never_with_comma() {\n        assert_lint_count(\"often, never\", MultipleFrequencyAdverbs::default(), 1);\n    }\n\n    #[test]\n    fn sometimes_never() {\n        assert_lint_count(\n            \"Using @ directive in comments renders modal/portal that is sometimes never destroyed until app is closed.\",\n            MultipleFrequencyAdverbs::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn usually_always() {\n        assert_lint_count(\n            \"Unfortunately, I can't switch to Pip with Mamba (to avoid conda), which I usually always do.\",\n            MultipleFrequencyAdverbs::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn sometimes_usually() {\n        assert_lint_count(\n            \"I do my best to fix stuff when some issues pop up, but it sometimes usually doesn't work out.\",\n            MultipleFrequencyAdverbs::default(),\n            1,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/multiple_sequential_pronouns.rs",
    "content": "use crate::{\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    {Lint, Lrc, Token, TokenStringExt},\n};\n\n/// Linter that checks if multiple pronouns are being used right after each\n/// other. This is a common mistake to make during the revision process.\npub struct MultipleSequentialPronouns {\n    expr: SequenceExpr,\n}\n\nimpl MultipleSequentialPronouns {\n    fn new() -> Self {\n        let pronouns = Lrc::new(|t: &Token, _s: &[char]| {\n            t.kind.is_subject_pronoun() // e.g. I\n                || t.kind.is_object_pronoun() // e.g. me\n                || t.kind.is_possessive_pronoun() // e.g. mine\n                || t.kind.is_possessive_determiner() // e.g. my\n        });\n\n        Self {\n            expr: SequenceExpr::with(pronouns.clone())\n                .then_one_or_more(SequenceExpr::whitespace().then(pronouns.clone())),\n        }\n    }\n}\n\nimpl ExprLinter for MultipleSequentialPronouns {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let mut suggestions = Vec::new();\n\n        if matched_tokens.len() == 3 {\n            let first_word_tok = &matched_tokens[0];\n            let second_word_tok = &matched_tokens[2];\n\n            let first_word_raw = first_word_tok.span.get_content(source);\n            let second_word_raw = second_word_tok.span.get_content(source);\n            // Bug 578: \"I can lend you my car\" - if 1st is object and second is possessive adjective, don't lint\n            if first_word_tok.kind.is_object_pronoun()\n                && second_word_tok.kind.is_possessive_determiner()\n            {\n                return None;\n            }\n            // Bug 724: \"One told me they were able to begin reading\" - if 1st is object ans second is subject, don't lint\n            if first_word_tok.kind.is_object_pronoun() && second_word_tok.kind.is_subject_pronoun()\n            {\n                return None;\n            }\n\n            // US is a qualifier meaning American, so uppercase after a possessive is OK.\n            // Likewise, IT means Information Technology, as in \"our IT director\"\n            if first_word_tok.kind.is_possessive_determiner()\n                && (second_word_raw == ['U', 'S'] || second_word_raw == ['I', 'T'])\n            {\n                return None;\n            }\n\n            // The same applies to uppercase before a subject pronoun\n            if first_word_raw == ['U', 'S'] && second_word_tok.kind.is_subject_pronoun() {\n                return None;\n            }\n\n            suggestions.push(Suggestion::ReplaceWith(\n                matched_tokens[0].span.get_content(source).to_vec(),\n            ));\n            suggestions.push(Suggestion::ReplaceWith(\n                matched_tokens[2].span.get_content(source).to_vec(),\n            ));\n        }\n\n        Some(Lint {\n            span: matched_tokens.span()?,\n            lint_kind: LintKind::Repetition,\n            message: \"There are too many personal pronouns in sequence here.\".to_owned(),\n            priority: 63,\n            suggestions,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"When editing work to change point of view (i.e. first-person or third-person) it is common to add pronouns while neglecting to remove old ones. This rule catches cases where you have multiple disparate pronouns in sequence.\"\n    }\n}\n\nimpl Default for MultipleSequentialPronouns {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::MultipleSequentialPronouns;\n    use crate::linting::tests::assert_lint_count;\n\n    #[test]\n    fn can_detect_two_pronouns() {\n        assert_lint_count(\n            \"...little bit about my I want to do.\",\n            MultipleSequentialPronouns::new(),\n            1,\n        )\n    }\n\n    #[test]\n    fn can_detect_three_pronouns() {\n        assert_lint_count(\n            \"...little bit about my I you want to do.\",\n            MultipleSequentialPronouns::new(),\n            1,\n        )\n    }\n\n    #[test]\n    fn allows_single_pronouns() {\n        assert_lint_count(\n            \"...little bit about I want to do.\",\n            MultipleSequentialPronouns::new(),\n            0,\n        )\n    }\n\n    #[test]\n    fn detects_multiple_pronouns_at_end() {\n        assert_lint_count(\n            \"...I need to explain this to you them.\",\n            MultipleSequentialPronouns::new(),\n            1,\n        )\n    }\n\n    #[test]\n    fn comma_separated() {\n        assert_lint_count(\"To prove it, we...\", MultipleSequentialPronouns::new(), 0)\n    }\n\n    #[test]\n    fn dont_flag_578() {\n        assert_lint_count(\n            \"I can lend you my car.\",\n            MultipleSequentialPronouns::new(),\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_724() {\n        assert_lint_count(\n            \"One told me they were able to begin reading.\",\n            MultipleSequentialPronouns::new(),\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_us() {\n        assert_lint_count(\n            \"Take the plunge and pull plug from their US tech.\",\n            MultipleSequentialPronouns::new(),\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_my_us_your_us() {\n        assert_lint_count(\n            \"My US passport looks different from your US passport.\",\n            MultipleSequentialPronouns::new(),\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_subject_after_usa() {\n        assert_lint_count(\n            \"And if it’s manufactured in the US it may have more automation.\",\n            MultipleSequentialPronouns::new(),\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_case_insensitive_cost_him_his_life() {\n        assert_lint_count(\n            \"to the point where it very well likely cost Him his life\",\n            MultipleSequentialPronouns::new(),\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_2870() {\n        assert_lint_count(\n            \"their sales derp was just having none of it when our IT director told him, point blank, that we're not moving anything into the cloud\",\n            MultipleSequentialPronouns::new(),\n            0,\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/nail_on_the_head.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct NailOnTheHead {\n    expr: SequenceExpr,\n}\n\nimpl Default for NailOnTheHead {\n    fn default() -> Self {\n        let mis = WordSet::new(&[\"hat\", \"had\", \"hit\", \"hid\"]);\n        let pattern = SequenceExpr::default()\n            .t_aco(\"nail\")\n            .then_whitespace()\n            .t_aco(\"on\")\n            .then_whitespace()\n            .t_aco(\"the\")\n            .then_whitespace()\n            .then(mis);\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for NailOnTheHead {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {\n        let offender = toks.last()?;\n        Some(Lint {\n            span: offender.span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::ReplaceWith(\"head\".chars().collect())],\n            message: \"Did you mean `head`?\".to_owned(),\n            priority: 45,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Replaces hat/had/hit/hid in the idiom `nail on the head` with `head`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::NailOnTheHead;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn fix_hat() {\n        assert_suggestion_result(\n            \"She hit the nail on the hat.\",\n            NailOnTheHead::default(),\n            \"She hit the nail on the head.\",\n        );\n    }\n\n    #[test]\n    fn fix_had() {\n        assert_suggestion_result(\n            \"You really put the nail on the had with that comment.\",\n            NailOnTheHead::default(),\n            \"You really put the nail on the head with that comment.\",\n        );\n    }\n\n    #[test]\n    fn fix_hit() {\n        assert_suggestion_result(\n            \"They hit the nail on the hit regarding our problem.\",\n            NailOnTheHead::default(),\n            \"They hit the nail on the head regarding our problem.\",\n        );\n    }\n\n    #[test]\n    fn fix_hid() {\n        assert_suggestion_result(\n            \"The article nails the nail on the hid this time.\",\n            NailOnTheHead::default(),\n            \"The article nails the nail on the head this time.\",\n        );\n    }\n\n    #[test]\n    fn ignore_correct() {\n        assert_lint_count(\"She hit the nail on the head.\", NailOnTheHead::default(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/need_to_noun.rs",
    "content": "use crate::Token;\nuse crate::char_string::char_string;\nuse crate::expr::{All, Expr, LongestMatchOf, OwnedExprExt, SequenceExpr, UnlessStep};\nuse crate::patterns::DerivedFrom;\nuse crate::patterns::WordSet;\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct NeedToNoun {\n    expr: All,\n}\n\nimpl Default for NeedToNoun {\n    fn default() -> Self {\n        let postfix_exceptions = LongestMatchOf::new(vec![\n            Box::new(|tok: &Token, _: &[char]| {\n                tok.kind.is_adverb()\n                    || tok.kind.is_determiner()\n                    || tok.kind.is_unlintable()\n                    || tok.kind.is_pronoun()\n            }),\n            Box::new(WordSet::new(&[\"about\", \"into\", \"it\"])),\n        ]);\n\n        let exceptions = SequenceExpr::anything()\n            .t_any()\n            .t_any()\n            .t_any()\n            .then_word_set(&[\"be\", \"match\"]);\n\n        let a = SequenceExpr::default()\n            .then_kind_where(|kind| kind.is_nominal() && !kind.is_likely_homograph())\n            .t_ws()\n            .then_unless(postfix_exceptions);\n\n        // Bare words after infinitive `to` are the hardest cases to disambiguate.\n        // If the token is a noun/verb homograph, prefer not linting over inserting\n        // `the` into a potentially valid verb phrase.\n        let b = SequenceExpr::default().then_kind_where(|kind| {\n            kind.is_nominal() && !kind.is_verb() && !kind.is_likely_homograph()\n        });\n\n        let expr = SequenceExpr::with(DerivedFrom::new_from_str(\"need\"))\n            .t_ws()\n            .t_aco(\"to\")\n            .t_ws()\n            .then(a.or(b));\n\n        Self {\n            expr: expr.and(UnlessStep::new(exceptions, |_: &Token, _: &[char]| true)),\n        }\n    }\n}\n\nimpl ExprLinter for NeedToNoun {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let to_idx = 2;\n        let to_token = &matched_tokens[to_idx];\n\n        let noun_idx = 4;\n        let noun_token = &matched_tokens[noun_idx];\n\n        let noun_text = noun_token.span.get_content_string(source);\n        let span = to_token.span;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![Suggestion::ReplaceWith(char_string!(\"the\").to_vec())],\n            message: format!(\n                \"`need to` should be followed by a verb, not a noun or pronoun like `{noun_text}`.\"\n            ),\n            priority: 48,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags `need to` when it is immediately followed by a noun, which usually means the infinitive verb is missing.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::NeedToNoun;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn flags_need_to_noun() {\n        assert_suggestion_result(\n            \"I need to information now.\",\n            NeedToNoun::default(),\n            \"I need the information now.\",\n        );\n    }\n\n    #[test]\n    fn allows_need_to_verb() {\n        assert_lint_count(\"I need to leave now.\", NeedToNoun::default(), 0);\n    }\n\n    #[test]\n    fn allows_need_to_finish() {\n        assert_lint_count(\n            \"I need to finish this report by tomorrow.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_need_to_call() {\n        assert_lint_count(\n            \"You need to call your mother tonight.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_need_to_talk() {\n        assert_lint_count(\n            \"We need to talk about the budget.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_need_to_leave() {\n        assert_lint_count(\n            \"They need to leave early to catch the train.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_need_to_practice() {\n        assert_lint_count(\n            \"She needs to practice her German more often.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_need_to_fix() {\n        assert_lint_count(\n            \"He needs to fix his bike before the weekend.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_need_to_decide() {\n        assert_lint_count(\n            \"We need to decide where to go for dinner.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_need_to_update() {\n        assert_lint_count(\n            \"You need to update your password.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_need_to_take() {\n        assert_lint_count(\n            \"I need to take a break and get some fresh air.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_need_to_clean() {\n        assert_lint_count(\n            \"They need to clean the house before guests arrive.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn avoids_false_positive_for_need_to_verify() {\n        assert_lint_count(\n            \"I need to verify the expenses before submission.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn flags_need_to_compiler() {\n        assert_suggestion_result(\n            \"We simply don't need to compiler to do as much work anymore.\",\n            NeedToNoun::default(),\n            \"We simply don't need the compiler to do as much work anymore.\",\n        );\n    }\n\n    #[test]\n    fn flags_need_to_verification() {\n        assert_suggestion_result(\n            \"I need to verification before logging in.\",\n            NeedToNoun::default(),\n            \"I need the verification before logging in.\",\n        );\n    }\n\n    #[test]\n    fn allows_need_to_report() {\n        assert_no_lints(\n            \"We need to report before the meeting starts.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_password() {\n        assert_no_lints(\n            \"You need to password to access the server.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn flags_need_to_data() {\n        assert_suggestion_result(\n            \"They need to data analyzed by tomorrow.\",\n            NeedToNoun::default(),\n            \"They need the data analyzed by tomorrow.\",\n        );\n    }\n\n    #[test]\n    fn flags_need_to_approval() {\n        assert_suggestion_result(\n            \"She will need to approval of her manager first.\",\n            NeedToNoun::default(),\n            \"She will need the approval of her manager first.\",\n        );\n    }\n\n    #[test]\n    fn allows_need_to_backup() {\n        assert_no_lints(\n            \"We might need to backup if the main system fails.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_permit() {\n        assert_no_lints(\n            \"He didn’t realize he would need to permit to film there.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_tools() {\n        assert_no_lints(\n            \"You’ll need to right tools to fix that.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_context() {\n        assert_no_lints(\n            \"We need to context to make sense of his decision.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_funds() {\n        assert_no_lints(\n            \"They need to funds released before construction begins.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_silence() {\n        assert_no_lints(\"I need to silence to think clearly.\", NeedToNoun::default());\n    }\n\n    #[test]\n    fn flags_needs_to_approval() {\n        assert_suggestion_result(\n            \"She needs to approval from her advisor.\",\n            NeedToNoun::default(),\n            \"She needs the approval from her advisor.\",\n        );\n    }\n\n    #[test]\n    fn avoids_false_positive_for_needs_to_coordinate() {\n        assert_lint_count(\n            \"She needs to collaborate with everyone on the plan.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn flags_needs_to_verification() {\n        assert_suggestion_result(\n            \"He needs to verification ready before the audit.\",\n            NeedToNoun::default(),\n            \"He needs the verification ready before the audit.\",\n        );\n    }\n\n    #[test]\n    fn allows_needs_to_finalize() {\n        assert_lint_count(\n            \"She needs to finalize the schedule.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_needed_to_permit() {\n        assert_no_lints(\n            \"They needed to permit before entering the site.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn avoids_false_positive_for_needed_to_explain() {\n        assert_lint_count(\n            \"They needed to explain the new policy carefully.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn catches_false_negative_for_needed_to_authorization() {\n        assert_suggestion_result(\n            \"They needed to authorization before proceeding.\",\n            NeedToNoun::default(),\n            \"They needed the authorization before proceeding.\",\n        );\n    }\n\n    #[test]\n    fn allows_needed_to_file() {\n        assert_lint_count(\n            \"They needed to file the paperwork before noon.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn flags_needing_to_documentation() {\n        assert_suggestion_result(\n            \"Needing to documentation slowed the entire process.\",\n            NeedToNoun::default(),\n            \"Needing the documentation slowed the entire process.\",\n        );\n    }\n\n    #[test]\n    fn avoids_false_positive_for_needing_to_calibrate() {\n        assert_lint_count(\n            \"Needing to calibrate the equipment delayed us slightly.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn catches_false_negative_for_needing_to_confirmation() {\n        assert_suggestion_result(\n            \"Needing to confirmation from legal stalled the launch.\",\n            NeedToNoun::default(),\n            \"Needing the confirmation from legal stalled the launch.\",\n        );\n    }\n\n    #[test]\n    fn allows_needing_to_call() {\n        assert_lint_count(\n            \"Needing to call your mother is stressful.\",\n            NeedToNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_issue_2252() {\n        assert_no_lints(\"Things I need to do today:\", NeedToNoun::default());\n    }\n\n    #[test]\n    fn allows_install() {\n        assert_no_lints(\n            \"You need to install it separately, as it's a standalone application.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_lay() {\n        assert_no_lints(\n            \"Okay, this is a long one, but I feel like I need to lay everything out.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_overcome() {\n        assert_no_lints(\n            \"We believe every family deserves the opportunity to flourish, and we are committed to providing the resources they need to overcome adversity.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_run_into_2433() {\n        assert_no_lints(\n            \"So that they don't need to run into this problem in the future.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_match_2446() {\n        assert_no_lints(\n            \"You don't need to match string errors explicitly.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_match_exactly_2446() {\n        assert_no_lints(\"They need to match exactly.\", NeedToNoun::default());\n    }\n\n    #[test]\n    fn allows_need_to_use_php_code_fuzz() {\n        assert_no_lints(\n            \"To display the custom field data on your website, you'll likely need to use PHP code within your theme files.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_display_images_fuzz() {\n        assert_no_lints(\n            \"I'm building a photography portfolio site for a client and need to display images in a responsive gallery.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_build_brighter_futures_fuzz() {\n        assert_no_lints(\n            \"At Haven House, our mission is to provide families with the resources they need to build brighter futures.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_redefine_success_fuzz() {\n        assert_no_lints(\n            \"We need to redefine success to include wellbeing and sustainability.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_shift_from_fuzz() {\n        assert_no_lints(\n            \"We need to shift from a deficit model to an abundance model.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_research_and_choose_fuzz() {\n        assert_no_lints(\n            \"This means you need to research and choose adapters carefully.\",\n            NeedToNoun::default(),\n        );\n    }\n\n    #[test]\n    fn allows_need_to_model_healthy_habits_fuzz() {\n        assert_no_lints(\n            \"Leaders need to model healthy work habits and create a safe space for employees.\",\n            NeedToNoun::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/no_french_spaces.rs",
    "content": "use super::{Lint, LintKind, Linter, Suggestion};\nuse crate::TokenStringExt;\nuse crate::{Document, TokenKind};\n\n#[derive(Debug, Default)]\npub struct NoFrenchSpaces;\n\nimpl Linter for NoFrenchSpaces {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut output = Vec::new();\n\n        for sentence in document.iter_sentences() {\n            if let Some(space_idx) = sentence.iter_space_indices().next() {\n                let space = &sentence[space_idx];\n\n                if matches!(space.kind, TokenKind::Space(0)) {\n                    continue;\n                }\n                if space_idx == 0 && space.span.len() != 1 {\n                    output.push(Lint {\n                        span: space.span,\n                        lint_kind: LintKind::Formatting,\n                        suggestions: vec![Suggestion::ReplaceWith(vec![' '])],\n                        message: \"French spaces are generally not recommended.\".to_owned(),\n                        priority: 15,\n                    })\n                }\n            }\n        }\n\n        output\n    }\n\n    fn description(&self) -> &str {\n        \"Stops users from accidentally inserting French spaces.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::NoFrenchSpaces;\n\n    #[test]\n    fn fixes_basic() {\n        assert_suggestion_result(\n            \"This is a short sentence.  This is another short sentence.\",\n            NoFrenchSpaces::default(),\n            \"This is a short sentence. This is another short sentence.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/no_longer.rs",
    "content": "use crate::{\n    Lint, Token, TokenKind,\n    expr::{All, Expr, OwnedExprExt, SequenceExpr},\n    linting::{Chunk, ExprLinter, LintKind, Suggestion},\n};\n\npub struct NoLonger {\n    expr: All,\n}\n\nimpl Default for NoLonger {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"not\")\n                .t_ws()\n                .t_aco(\"longer\")\n                .then_optional(SequenceExpr::default().t_ws().then_kind_any(\n                    &[\n                        TokenKind::is_verb_lemma,\n                        TokenKind::is_verb_third_person_singular_present_form,\n                        TokenKind::is_verb_past_participle_form,\n                        TokenKind::is_verb_progressive_form,\n                        TokenKind::is_adjective,\n                    ][..],\n                ))\n                .and_not(\n                    SequenceExpr::anything()\n                        .t_any()\n                        .t_any()\n                        .t_any()\n                        .t_aco(\"than\"),\n                ),\n        }\n    }\n}\n\nimpl ExprLinter for NoLonger {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `not longer` when it should be `no longer`.\"\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        Some(Lint {\n            span: toks[0].span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"no\",\n                toks[0].span.get_content(src),\n            )],\n            message: \"The correct expression is `no longer`.\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::NoLonger;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    // Don't flag\n\n    #[test]\n    fn ignore_than() {\n        assert_no_lints(\"My arm is not longer than my leg.\", NoLonger::default())\n    }\n\n    // Flag not longer <verb>\n\n    #[test]\n    fn fix_can_modal() {\n        // TODO: would an improvement always be? - no longer can -> can no longer\n        assert_suggestion_result(\n            \"and I've found out that I not longer can launch Kitty from the menus\",\n            NoLonger::default(),\n            \"and I've found out that I no longer can launch Kitty from the menus\",\n        );\n    }\n\n    #[test]\n    fn fix_done_past_participle() {\n        assert_suggestion_result(\n            \"I've noticed that the ML stuff is not longer done on the more recent photos.\",\n            NoLonger::default(),\n            \"I've noticed that the ML stuff is no longer done on the more recent photos.\",\n        );\n    }\n\n    #[test]\n    fn fix_exist() {\n        assert_suggestion_result(\n            \"Vendoring means that the transitive dependencies do not longer exist from the point of view of the consumer.\",\n            NoLonger::default(),\n            \"Vendoring means that the transitive dependencies do no longer exist from the point of view of the consumer.\",\n        );\n    }\n\n    #[test]\n    fn fix_exists_3rd_person_singular_present() {\n        assert_suggestion_result(\n            \"this script is mentioned in the RF3 Readme but the script not longer exists\",\n            NoLonger::default(),\n            \"this script is mentioned in the RF3 Readme but the script no longer exists\",\n        );\n    }\n\n    #[test]\n    fn fix_render() {\n        assert_suggestion_result(\n            \"auto comments will not longer render annotations in such a way as to make them valid annotation links\",\n            NoLonger::default(),\n            \"auto comments will no longer render annotations in such a way as to make them valid annotation links\",\n        );\n    }\n\n    #[test]\n    fn fix_saved_regular_past() {\n        assert_suggestion_result(\n            \"edit notes are not longer saved on mobile\",\n            NoLonger::default(),\n            \"edit notes are no longer saved on mobile\",\n        );\n    }\n\n    #[test]\n    fn fix_saving_present_participle() {\n        assert_suggestion_result(\n            \"After Updating to 4.3.2 from 4.2.1 the JSON Editor is not longer saving the metadata.\",\n            NoLonger::default(),\n            \"After Updating to 4.3.2 from 4.2.1 the JSON Editor is no longer saving the metadata.\",\n        );\n    }\n\n    #[test]\n    fn fix_written_past_participle() {\n        assert_suggestion_result(\n            \"I get this error and the fasta file is not longer written\",\n            NoLonger::default(),\n            \"I get this error and the fasta file is no longer written\",\n        );\n    }\n\n    // Flag not longer <adjective>\n\n    #[test]\n    fn fix_able() {\n        assert_suggestion_result(\n            \"I am not longer able to set multi-cursors in Zed 0.190.6.\",\n            NoLonger::default(),\n            \"I am no longer able to set multi-cursors in Zed 0.190.6.\",\n        );\n    }\n\n    #[test]\n    fn fix_affordable() {\n        assert_suggestion_result(\n            \"No not Oakland, it's not longer affordable.\",\n            NoLonger::default(),\n            \"No not Oakland, it's no longer affordable.\",\n        );\n    }\n\n    #[test]\n    fn fix_bad() {\n        assert_suggestion_result(\n            \"How many times does this have to happen before its not longer bad luck?\",\n            NoLonger::default(),\n            \"How many times does this have to happen before its no longer bad luck?\",\n        );\n    }\n\n    #[test]\n    fn fix_best() {\n        assert_suggestion_result(\n            \"AWS Java V1 is not longer best practice as specified in this Github page\",\n            NoLonger::default(),\n            \"AWS Java V1 is no longer best practice as specified in this Github page\",\n        );\n    }\n\n    #[test]\n    fn fix_effective() {\n        assert_suggestion_result(\n            \"when you delete those keys from the dict, it is not longer effective\",\n            NoLonger::default(),\n            \"when you delete those keys from the dict, it is no longer effective\",\n        );\n    }\n\n    #[test]\n    fn fix_empty() {\n        assert_suggestion_result(\n            \"not only set as username, it sets common name as well and is not longer empty\",\n            NoLonger::default(),\n            \"not only set as username, it sets common name as well and is no longer empty\",\n        );\n    }\n\n    #[test]\n    fn fix_enough() {\n        assert_suggestion_result(\n            \"the message body is not longer enough\",\n            NoLonger::default(),\n            \"the message body is no longer enough\",\n        );\n    }\n\n    #[test]\n    fn fix_equal() {\n        assert_suggestion_result(\n            \"once the size of the current batch is not longer equal to batch_size , I used the temporary batch\",\n            NoLonger::default(),\n            \"once the size of the current batch is no longer equal to batch_size , I used the temporary batch\",\n        );\n    }\n\n    #[test]\n    fn fix_equivalent() {\n        assert_suggestion_result(\n            \"the lambda is not longer equivalent to how std::isspace would behave as a unary predicate\",\n            NoLonger::default(),\n            \"the lambda is no longer equivalent to how std::isspace would behave as a unary predicate\",\n        );\n    }\n\n    #[test]\n    fn fix_free() {\n        assert_suggestion_result(\n            \"so if i understand it correct, myteslamate is not longer free? \",\n            NoLonger::default(),\n            \"so if i understand it correct, myteslamate is no longer free? \",\n        );\n    }\n\n    #[test]\n    fn fix_good() {\n        assert_suggestion_result(\n            \"Just in case that link is not longer good I'll reproduce the code here.\",\n            NoLonger::default(),\n            \"Just in case that link is no longer good I'll reproduce the code here.\",\n        );\n    }\n\n    #[test]\n    fn fix_near() {\n        assert_suggestion_result(\n            \"reminder that they are not longer near each other\",\n            NoLonger::default(),\n            \"reminder that they are no longer near each other\",\n        );\n    }\n\n    #[test]\n    fn fix_open() {\n        assert_suggestion_result(\n            \"removing old breakpoints from a project which was not longer open\",\n            NoLonger::default(),\n            \"removing old breakpoints from a project which was no longer open\",\n        );\n    }\n\n    #[test]\n    fn fix_possible() {\n        assert_suggestion_result(\n            \"As far as I can set tell it is not longer possible to set these programmatically.\",\n            NoLonger::default(),\n            \"As far as I can set tell it is no longer possible to set these programmatically.\",\n        );\n    }\n\n    #[test]\n    fn fix_relevant() {\n        assert_suggestion_result(\n            \"individual remuneration is not longer relevant as we can produce enough\",\n            NoLonger::default(),\n            \"individual remuneration is no longer relevant as we can produce enough\",\n        );\n    }\n\n    #[test]\n    fn fix_sufficient() {\n        assert_suggestion_result(\n            \"the fichier.close() command is not longer sufficient to close the file\",\n            NoLonger::default(),\n            \"the fichier.close() command is no longer sufficient to close the file\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/no_match_for.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    CharStringExt, Token, TokenStringExt,\n    expr::{Expr, FirstMatchOf, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::{InflectionOfBe, WordSet},\n};\n\npub struct NoMatchFor {\n    expr: SequenceExpr,\n}\n\nimpl Default for NoMatchFor {\n    fn default() -> Self {\n        let pre_context = FirstMatchOf::new(vec![\n            Box::new(InflectionOfBe::default()),\n            Box::new(WordSet::new(&[\n                \"I'm\", \"we're\", \"you're\", \"he's\", \"she's\", \"it's\", \"they're\", \"Im\", \"were\",\n                \"youre\", \"hes\", \"shes\", \"its\", \"theyre\",\n            ])),\n        ]);\n\n        let expr = SequenceExpr::with(pre_context)\n            .then_whitespace()\n            .t_aco(\"no\")\n            .then_whitespace()\n            .t_aco(\"match\")\n            .then_whitespace()\n            .then_preposition();\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for NoMatchFor {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let prep_tok = toks.last()?;\n        let prep_chars = prep_tok.span.get_content(src);\n        if prep_chars.eq_ignore_ascii_case_chars(&['f', 'o', 'r']) {\n            return None;\n        }\n\n        let phrase_toks = &toks[2..];\n        let phrase_span = phrase_toks.span()?;\n\n        let suggestion =\n            Suggestion::replace_with_match_case_str(\"no match for\", phrase_span.get_content(src));\n\n        Some(Lint {\n            span: phrase_span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![suggestion],\n            message: \"If you mean the idiom, it's `no match for`.\".to_owned(),\n            priority: 55,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"No match for\"\n    }\n}\n\n#[cfg(test)]\npub mod tests {\n    use super::NoMatchFor;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn fix_against() {\n        assert_suggestion_result(\n            \"Erlang was no match against my sweeping gale.\",\n            NoMatchFor::default(),\n            \"Erlang was no match for my sweeping gale.\",\n        );\n    }\n\n    #[test]\n    fn fix_to() {\n        assert_suggestion_result(\n            \"My BW5 was no match to his BW7.\",\n            NoMatchFor::default(),\n            \"My BW5 was no match for his BW7.\",\n        );\n    }\n\n    #[test]\n    fn fix_of() {\n        assert_suggestion_result(\n            \"This Attack Plane Was No Match Of Me So I Did This To Him\",\n            NoMatchFor::default(),\n            \"This Attack Plane Was No Match For Me So I Did This To Him\",\n        );\n    }\n\n    #[test]\n    fn fix_its_to() {\n        assert_suggestion_result(\n            \"cuz AI is bull crap and its no match to human voice\",\n            NoMatchFor::default(),\n            \"cuz AI is bull crap and its no match for human voice\",\n        );\n    }\n\n    #[test]\n    fn fix_im_to() {\n        assert_suggestion_result(\n            \"Im no match to you but like let me no what u think\",\n            NoMatchFor::default(),\n            \"Im no match for you but like let me no what u think\",\n        );\n    }\n\n    #[test]\n    fn theyre_to() {\n        assert_suggestion_result(\n            \"Theyre no match to late 60s early 70s sansuis.\",\n            NoMatchFor::default(),\n            \"Theyre no match for late 60s early 70s sansuis.\",\n        );\n    }\n\n    #[test]\n    fn fix_hes_to() {\n        assert_suggestion_result(\n            \"Even ouki on drinks with renpa said hes no match to him.\",\n            NoMatchFor::default(),\n            \"Even ouki on drinks with renpa said hes no match for him.\",\n        );\n    }\n\n    #[test]\n    fn fix_shes_to() {\n        assert_suggestion_result(\n            \"Izma tries to struggle but she's no match to your superior strength\",\n            NoMatchFor::default(),\n            \"Izma tries to struggle but she's no match for your superior strength\",\n        );\n    }\n\n    #[test]\n    fn dont_fix_for() {\n        assert_lint_count(\n            \"Type to search appears even there is no match for search term when autoFocus is true.\",\n            NoMatchFor::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/no_oxford_comma.rs",
    "content": "use crate::expr::ExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::{Document, Token, TokenStringExt, patterns::NominalPhrase};\n\nuse super::{Lint, LintKind, Linter, Suggestion};\n\npub struct NoOxfordComma {\n    expr: SequenceExpr,\n}\n\nimpl NoOxfordComma {\n    pub fn new() -> Self {\n        Self {\n            expr: {\n                let this = {\n                    let this = SequenceExpr::default();\n                    this.then(NominalPhrase)\n                }\n                .then_comma()\n                .then_whitespace();\n                this.then(NominalPhrase)\n            }\n            .then_comma()\n            .then_whitespace()\n            .then_word_set(&[\"and\", \"or\", \"nor\"]),\n        }\n    }\n\n    fn match_to_lint(&self, matched_toks: &[Token], _source: &[char]) -> Option<Lint> {\n        let last_comma_index = matched_toks.last_comma_index()?;\n        let offender = &matched_toks[last_comma_index];\n\n        Some(Lint {\n            span: offender.span,\n            lint_kind: LintKind::Style,\n            suggestions: vec![Suggestion::Remove],\n            message: \"Remove the Oxford comma here.\".to_owned(),\n            priority: 31,\n        })\n    }\n}\n\nimpl Default for NoOxfordComma {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl Linter for NoOxfordComma {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for sentence in document.iter_sentences() {\n            for match_span in self.expr.iter_matches(sentence, document.get_source()) {\n                let lint = self.match_to_lint(\n                    &sentence[match_span.start..match_span.end],\n                    document.get_source(),\n                );\n                lints.extend(lint);\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"The Oxford comma is one of the more controversial rules in common use today. Enabling this lint checks that there is no comma before `and`, `or` or `nor` when listing out more than two ideas.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::NoOxfordComma;\n\n    #[test]\n    fn fruits() {\n        assert_lint_count(\n            \"An apple, a banana, and a pear\",\n            NoOxfordComma::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn people() {\n        assert_suggestion_result(\n            \"Nancy, Steve, and Carl are going to the coffee shop.\",\n            NoOxfordComma::default(),\n            \"Nancy, Steve and Carl are going to the coffee shop.\",\n        );\n    }\n\n    #[test]\n    fn places() {\n        assert_suggestion_result(\n            \"I've always wanted to visit Paris, Tokyo, and Rome.\",\n            NoOxfordComma::default(),\n            \"I've always wanted to visit Paris, Tokyo and Rome.\",\n        );\n    }\n\n    #[test]\n    fn foods() {\n        assert_suggestion_result(\n            \"My favorite foods are pizza, sushi, tacos, and burgers.\",\n            NoOxfordComma::default(),\n            \"My favorite foods are pizza, sushi, tacos and burgers.\",\n        );\n    }\n\n    #[test]\n    fn allows_clean_music() {\n        assert_lint_count(\n            \"I enjoy listening to pop music, rock, hip-hop, electronic dance and classical music.\",\n            NoOxfordComma::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_clean_nations() {\n        assert_lint_count(\n            \"The team consists of players from different countries: France, Germany, Italy and Spain.\",\n            NoOxfordComma::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn or_writing() {\n        assert_suggestion_result(\n            \"Harper can be a lifesaver when writing technical documents, emails, or other formal forms of communication.\",\n            NoOxfordComma::default(),\n            \"Harper can be a lifesaver when writing technical documents, emails or other formal forms of communication.\",\n        );\n    }\n\n    #[test]\n    fn sports() {\n        assert_suggestion_result(\n            \"They enjoy playing soccer, basketball, or tennis.\",\n            NoOxfordComma::default(),\n            \"They enjoy playing soccer, basketball or tennis.\",\n        );\n    }\n\n    #[test]\n    fn nor_vegetables() {\n        assert_suggestion_result(\n            \"I like carrots, kale, nor broccoli.\",\n            NoOxfordComma::default(),\n            \"I like carrots, kale nor broccoli.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/nobody.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct Nobody {\n    expr: SequenceExpr,\n}\n\nimpl Default for Nobody {\n    fn default() -> Self {\n        let pattern = SequenceExpr::aco(\"no\")\n            .then_whitespace()\n            .t_aco(\"body\")\n            .then_whitespace()\n            .then_verb();\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for Nobody {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens[0..3].span()?;\n        let orig_chars = span.get_content(source);\n\n        if next_non_whitespace_char(source, span.end).is_some_and(|ch| ch == ',') {\n            return None;\n        }\n\n        if next_non_whitespace_word(source, span.end).is_some_and(|word| {\n            matches!(\n                word.as_str(),\n                \"is\" | \"was\" | \"were\" | \"be\" | \"been\" | \"being\"\n            )\n        }) {\n            return None;\n        }\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"nobody\".chars().collect(),\n                orig_chars,\n            )],\n            message: format!(\"Did you mean the closed compound `{}`?\", \"nobody\"),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Looks for incorrect spacing inside the closed compound `nobody`.\"\n    }\n}\n\nfn next_non_whitespace_char(source: &[char], offset: usize) -> Option<char> {\n    source\n        .get(offset..)?\n        .iter()\n        .find(|c| !c.is_whitespace())\n        .copied()\n}\n\nfn next_non_whitespace_word(source: &[char], offset: usize) -> Option<String> {\n    let suffix = source.get(offset..)?;\n    let mut iter = suffix\n        .iter()\n        .enumerate()\n        .skip_while(|(_, c)| c.is_whitespace());\n    let start = iter.next()?.0;\n    let end = suffix[start..]\n        .iter()\n        .position(|c| c.is_whitespace() || c.is_ascii_punctuation())\n        .map(|len| start + len)\n        .unwrap_or(suffix.len());\n\n    Some(\n        suffix[start..end]\n            .iter()\n            .collect::<String>()\n            .to_ascii_lowercase(),\n    )\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::Nobody;\n\n    #[test]\n    fn both_valid_and_invalid() {\n        assert_suggestion_result(\n            \"No body told me. I have a head but no body.\",\n            Nobody::default(),\n            \"Nobody told me. I have a head but no body.\",\n        );\n    }\n\n    #[test]\n    fn ignores_no_body_was_found() {\n        assert_lint_count(\"No body was found after the search.\", Nobody::default(), 0);\n    }\n\n    #[test]\n    fn ignores_no_body_comma() {\n        assert_lint_count(\n            \"No body, no signs of a struggle, no answers.\",\n            Nobody::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/nominal_wants.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::CharStringExt;\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    dict_word_metadata::Person,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct NominalWants {\n    expr: SequenceExpr,\n}\n\nimpl Default for NominalWants {\n    fn default() -> Self {\n        fn is_applicable_pronoun(tok: &Token, src: &[char]) -> bool {\n            if tok.kind.is_pronoun() && tok.kind.is_upos(UPOS::PRON) {\n                let pron = tok.span.get_content(src);\n                !pron.eq_any_ignore_ascii_case_chars(&[\n                    // \"That\" can act as two kinds of pronoun: demonstrative and relative.\n                    // As a demonstrative pronoun, it's third person singular.\n                    // As a relative pronoun, it's behaves as any person:\n                    // I am the one that wants to. He is the one that wants to.\n                    &['t', 'h', 'a', 't'],\n                    // Personal pronouns have case. Object case personal pronouns\n                    // can come after \"want\":\n                    // Make them want to believe.\n                    // Note: \"you\" and \"it\" are both subject and object case.\n                    &['m', 'e'],\n                    &['u', 's'],\n                    // \"you\" is subject and object both OK before \"want\".\n                    &['h', 'i', 'm'],\n                    &['h', 'e', 'r'],\n                    // \"it\" is both subject and object. Subject before \"wants\", object before \"want\".\n                    &['i', 't'],\n                    &['t', 'h', 'e', 'm'],\n                    &['w', 'h', 'o'],\n                ])\n            } else {\n                false\n            }\n        }\n\n        let miss = WordSet::new(&[\"wont\", \"wonts\", \"want\", \"wants\"]);\n        let pattern = SequenceExpr::with(is_applicable_pronoun)\n            .then_whitespace()\n            .then(miss);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for NominalWants {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], source: &[char]) -> Option<Lint> {\n        let subject = toks.first()?;\n        let offender = &toks.last()?;\n\n        let plural = subject.kind.is_plural_nominal();\n\n        let person = subject\n            .kind\n            .as_word()\n            .unwrap()\n            .clone()\n            .unwrap()\n            .pronoun\n            .and_then(|p| p.person)\n            .unwrap_or(Person::Third);\n\n        let replacement = if person == Person::Third {\n            if plural { \"want\" } else { \"wants\" }\n        } else {\n            \"want\"\n        };\n\n        let replacement_chars: Vec<char> = replacement.chars().collect();\n\n        let offender_span = offender.span;\n        let offender_chars = offender_span.get_content(source);\n\n        if offender_chars.eq_ignore_ascii_case_chars(&replacement_chars) {\n            return None;\n        }\n\n        Some(Lint {\n            span: offender_span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                replacement_chars,\n                offender_chars,\n            )],\n            message: format!(\"Did you mean `{replacement}`?\"),\n            priority: 55,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Ensures you use the correct `want` / `wants` after a nominal.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::NominalWants;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fixes_he_wonts() {\n        assert_suggestion_result(\n            \"He wonts to join us.\",\n            NominalWants::default(),\n            \"He wants to join us.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"This is not a grammar error if the previous word is `help`, `let`, or `make`.\"]\n    fn fixes_it_wont() {\n        assert_suggestion_result(\n            \"It wont to move forward.\",\n            NominalWants::default(),\n            \"It wants to move forward.\",\n        );\n    }\n\n    #[test]\n    fn fixes_she_wont() {\n        assert_suggestion_result(\n            \"She wont to leave early.\",\n            NominalWants::default(),\n            \"She wants to leave early.\",\n        );\n    }\n\n    #[test]\n    fn fixes_i_wont() {\n        assert_suggestion_result(\n            \"I wonts to leave early.\",\n            NominalWants::default(),\n            \"I want to leave early.\",\n        );\n    }\n\n    #[test]\n    fn allows_you_want() {\n        assert_lint_count(\"What size do you want to be?\", NominalWants::default(), 0);\n    }\n\n    #[test]\n    fn fixes_you_wants() {\n        assert_suggestion_result(\n            \"What do you wants?\",\n            NominalWants::default(),\n            \"What do you want?\",\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_they() {\n        assert_lint_count(\"They want to help.\", NominalWants::default(), 0);\n    }\n\n    #[test]\n    fn ignores_correct_usage_he() {\n        assert_lint_count(\"He wants to help.\", NominalWants::default(), 0);\n    }\n\n    #[test]\n    fn ignores_correct_usage_that_1298() {\n        assert_lint_count(\n            \"The projects that want to take it seriously are the best.\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_make_me() {\n        assert_lint_count(\n            \"Take another person code make me want to die.\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_makes_me() {\n        assert_lint_count(\n            \"It makes me want to not use GitHub at all.\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_make_us() {\n        assert_lint_count(\n            \"... try harder to make us want to implement it.\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_made_us() {\n        assert_lint_count(\n            \"This change made us want to adopt luxon's strict mode\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_help_us() {\n        assert_lint_count(\"... help us want to help you.\", NominalWants::default(), 0);\n    }\n\n    #[test]\n    fn ignores_correct_usage_make_you() {\n        assert_lint_count(\n            \"I can certainly see why that would make you want to ditch Linux packaging.\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_makes_you() {\n        assert_lint_count(\n            \"If something happens that makes you want to scream from the top of your lungs\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_made_you() {\n        assert_lint_count(\n            \"What made you want to leave the LibFuzzer ...\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_make_him() {\n        assert_lint_count(\n            \"make him want to help with your issue\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_make_her() {\n        assert_lint_count(\n            \"... and make her want to get into coding.\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_make_it() {\n        assert_lint_count(\n            \"you just make it want to appear as a drama\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_makes_it() {\n        assert_lint_count(\n            \"using UHD makes it want to put labels in the corner saying UHD\",\n            NominalWants::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage_make_them() {\n        assert_lint_count(\n            \"And make them want to believe in it.\",\n            NominalWants::default(),\n            0,\n        )\n    }\n\n    #[test]\n    fn ignores_correct_usage_making_them() {\n        assert_lint_count(\n            \"you're annoying ALMOST ALL of the users and making them want to switch to another ...\",\n            NominalWants::default(),\n            0,\n        )\n    }\n\n    #[test]\n    fn ignores_correct_usage_help_them() {\n        assert_lint_count(\"And help them want to do it.\", NominalWants::default(), 0)\n    }\n\n    #[test]\n    fn allows_want_to() {\n        assert_no_lints(\n            \"Harper is a grammar checker for people who want to write fast.\",\n            NominalWants::default(),\n        );\n    }\n\n    #[test]\n    fn test_2007() {\n        assert_no_lints(\n            \"### 🙌 **We Want to Hear From You!**\",\n            NominalWants::default(),\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/nor_modal_pronoun.rs",
    "content": "use crate::{\n    Lint, Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::ModalVerb,\n};\n\npub struct NorModalPronoun {\n    expr: SequenceExpr,\n}\n\nimpl Default for NorModalPronoun {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"nor\")\n                .t_ws()\n                .then_subject_pronoun()\n                .t_ws()\n                .then(ModalVerb::with_common_errors()),\n        }\n    }\n}\n\nimpl ExprLinter for NorModalPronoun {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects the order of the pronoun and modal verb after `nor`.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        if ctx\n            .map(|(pre, _)| {\n                // Check for pattern 1: subject pronoun [ws]\n                let is_subj_pronoun = pre\n                    .get_rel(-1)\n                    .filter(|t| t.kind.is_whitespace())\n                    .and_then(|_| pre.get_rel(-2))\n                    .is_some_and(|t| t.kind.is_subject_pronoun());\n\n                // Check for pattern 2: possessive [ws] noun [ws]\n                let is_poss_and_noun = pre\n                    .get_rel(-1)\n                    .filter(|t| t.kind.is_whitespace())\n                    .and_then(|_| pre.get_rel(-2))\n                    .filter(|t| t.kind.is_noun())\n                    .and_then(|_| pre.get_rel(-3))\n                    .filter(|t| t.kind.is_whitespace())\n                    .and_then(|_| pre.get_rel(-4))\n                    .is_some_and(|t| t.kind.is_possessive_determiner());\n\n                is_subj_pronoun || is_poss_and_noun\n            })\n            .unwrap_or(false)\n        {\n            return None;\n        }\n\n        let (pron_tok, modal_tok) = (toks.get_rel(-3)?, toks.get_rel(-1)?);\n        let pron_ws_modal_toks = toks.get_rel_slice(-3, -1)?;\n        let (pron_span, modal_span) = (pron_tok.span, modal_tok.span);\n        let pron_modal_span = pron_ws_modal_toks.span()?;\n\n        let value = format!(\n            \"{} {}\",\n            modal_span.get_content_string(src),\n            pron_span.get_content_string(src)\n        )\n        .chars()\n        .collect();\n\n        // Avoid capitalizing the modals verbs just because the pronoun was \"I\"\n        let suggestion = if pron_span.get_content(src) == ['I'] {\n            Suggestion::ReplaceWith(value)\n        } else {\n            Suggestion::replace_with_match_case(value, pron_modal_span.get_content(src))\n        };\n\n        Some(Lint {\n            span: pron_modal_span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![suggestion],\n            message: \"After `nor`, the modal verb should come before the pronoun.\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::NorModalPronoun;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fix_nor_i_can() {\n        assert_suggestion_result(\n            \"i can't see the menu nor i can see the features of your app or how it looks !\",\n            NorModalPronoun::default(),\n            \"i can't see the menu nor can i see the features of your app or how it looks !\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_i_could() {\n        assert_suggestion_result(\n            \"but never saw any warnings nor I could read messages until I debugged\",\n            NorModalPronoun::default(),\n            \"but never saw any warnings nor could I read messages until I debugged\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_i_will() {\n        assert_suggestion_result(\n            \"I am not the author of the plugins nor I will be updating bugged/unavailable plugins.\",\n            NorModalPronoun::default(),\n            \"I am not the author of the plugins nor will I be updating bugged/unavailable plugins.\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_i_would() {\n        assert_suggestion_result(\n            \"I would not like to own a Pollock, nor I would hang one of his paintings on a wall inside my home\",\n            NorModalPronoun::default(),\n            \"I would not like to own a Pollock, nor would I hang one of his paintings on a wall inside my home\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_it_can() {\n        assert_suggestion_result(\n            \"However, since several days ago FreeTube simply doesn't open ANY videos nor it can search.\",\n            NorModalPronoun::default(),\n            \"However, since several days ago FreeTube simply doesn't open ANY videos nor can it search.\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_it_should() {\n        assert_suggestion_result(\n            \"Since the code doesn't guard against it (nor it should), internalModule.stripBOM is called with an undefined\",\n            NorModalPronoun::default(),\n            \"Since the code doesn't guard against it (nor should it), internalModule.stripBOM is called with an undefined\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_it_will() {\n        assert_suggestion_result(\n            \"It will never \\\"create a table\\\", nor it will issue any query - it will only create the entity instance.\",\n            NorModalPronoun::default(),\n            \"It will never \\\"create a table\\\", nor will it issue any query - it will only create the entity instance.\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_it_would() {\n        assert_suggestion_result(\n            \"Neither whitespace (excepting NL and CR) is special char in this sense, nor it would destroy something, if it gets \\\"escaped\\\" as variable\",\n            NorModalPronoun::default(),\n            \"Neither whitespace (excepting NL and CR) is special char in this sense, nor would it destroy something, if it gets \\\"escaped\\\" as variable\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_they_can() {\n        assert_suggestion_result(\n            \"Currently these assets don't include the code provided by the submodules nor they can be disabled\",\n            NorModalPronoun::default(),\n            \"Currently these assets don't include the code provided by the submodules nor can they be disabled\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_we_can() {\n        assert_suggestion_result(\n            \"The NSLayoutConstraint errors are really Apple bugs, not our fault, nor we can fix them, but they are harmless.\",\n            NorModalPronoun::default(),\n            \"The NSLayoutConstraint errors are really Apple bugs, not our fault, nor can we fix them, but they are harmless.\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_you_can() {\n        assert_suggestion_result(\n            \"You cannot create a view to do it, nor you can have a function to do it\",\n            NorModalPronoun::default(),\n            \"You cannot create a view to do it, nor can you have a function to do it\",\n        );\n    }\n\n    #[test]\n    fn fix_nor_you_should() {\n        assert_suggestion_result(\n            \"I believe you cannot create two sessions through one signin, and maybe nor you should.\",\n            NorModalPronoun::default(),\n            \"I believe you cannot create two sessions through one signin, and maybe nor should you.\",\n        );\n    }\n\n    // Potential false positives\n\n    #[test]\n    fn ignore_neither_they_nor_i_could() {\n        assert_no_lints(\n            \"One of my users was unable to install tools via mise, but neither they nor I could initially figure out why.\",\n            NorModalPronoun::default(),\n        );\n    }\n\n    #[test]\n    fn ignore_neither_my_tool_nor_i_shall() {\n        assert_no_lints(\n            \"but neither my tool nor I shall feel disrespected\",\n            NorModalPronoun::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/not_only_inversion.rs",
    "content": "use crate::{\n    Lint, Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, debug::format_lint_match, expr_linter::Chunk},\n};\n\npub struct NotOnlyInversion {\n    expr: SequenceExpr,\n}\n\nimpl Default for NotOnlyInversion {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"not\")\n                .t_ws()\n                .t_aco(\"only\")\n                .t_ws()\n                .then_word_set(&[\"I\", \"we\", \"you\", \"he\", \"she\", \"it\", \"they\"])\n                .t_ws()\n                .then_word_set(&[\"am\", \"are\", \"is\", \"was\", \"were\"]),\n        }\n    }\n}\n\nimpl ExprLinter for NotOnlyInversion {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects `not only it is` to `not only is it`\"\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        eprintln!(\"🍭 {}\", format_lint_match(toks, ctx, src));\n        let (prontok, betok) = (toks.get_rel(-3)?, toks.get_rel(-1)?);\n        let (pronspan, bespan) = (prontok.span, betok.span);\n        let (pronch, bech) = (pronspan.get_content(src), bespan.get_content(src));\n\n        let pronbetoks = toks.get_rel_slice(-3, -1)?;\n        eprintln!(\"🍭🍭 '{}'\", pronbetoks.span()?.get_content_string(src));\n\n        let inverted = [bech.to_vec(), vec![' '], pronch.to_vec()].concat();\n\n        Some(Lint {\n            span: pronbetoks.span()?,\n            lint_kind: LintKind::Grammar,\n            message: \"After `not only` the subject and verb should be inverted.\".to_string(),\n            suggestions: vec![Suggestion::replace_with_match_case(\n                inverted,\n                pronbetoks.span()?.get_content(src),\n            )],\n            ..Default::default()\n        })\n        // None\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::NotOnlyInversion;\n\n    #[test]\n    fn fix_not_only_he_is() {\n        assert_suggestion_result(\n            \"not only he is discouraged from look at them but he can't manipulate them\",\n            NotOnlyInversion::default(),\n            \"not only is he discouraged from look at them but he can't manipulate them\",\n        );\n    }\n\n    #[test]\n    fn fix_not_only_he_was() {\n        assert_suggestion_result(\n            \"not only he was born as a man, he was the Promised Messiah\",\n            NotOnlyInversion::default(),\n            \"not only was he born as a man, he was the Promised Messiah\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"replace_with_match_case goes by character index matching\"]\n    fn fix_not_only_i_am() {\n        assert_suggestion_result(\n            \"Not only I am proud of the work we have accomplished together but also I have learned so much from you about statistics, sciences and beyond.\",\n            NotOnlyInversion::default(),\n            \"Not only am I proud of the work we have accomplished together but also I have learned so much from you about statistics, sciences and beyond.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"replace_with_match_case goes by character index matching\"]\n    fn fix_not_only_i_was() {\n        assert_suggestion_result(\n            \"Not only I was wrong in saying the right meaning, I was also wrong in stating the parts of speech\",\n            NotOnlyInversion::default(),\n            \"Not only was I wrong in saying the right meaning, I was also wrong in stating the parts of speech\",\n        );\n    }\n\n    #[test]\n    fn fix_not_only_it_is() {\n        assert_suggestion_result(\n            \"Not only it is not the same problem, #899 is a solution suggested in #969.\",\n            NotOnlyInversion::default(),\n            \"Not only is it not the same problem, #899 is a solution suggested in #969.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_only_it_was() {\n        assert_suggestion_result(\n            \"because not only it was unlikely that I could answer any question I also felt that I cannot even ask any on-topic question\",\n            NotOnlyInversion::default(),\n            \"because not only was it unlikely that I could answer any question I also felt that I cannot even ask any on-topic question\",\n        );\n    }\n\n    #[test]\n    fn fix_not_only_they_are() {\n        assert_suggestion_result(\n            \"Not only they are written in much cleaner and verbose way, they are also available in 6 languages like russian.\",\n            NotOnlyInversion::default(),\n            \"Not only are they written in much cleaner and verbose way, they are also available in 6 languages like russian.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_only_they_were() {\n        assert_suggestion_result(\n            \"Not only they were tall, but also they were strong. \",\n            NotOnlyInversion::default(),\n            \"Not only were they tall, but also they were strong. \",\n        );\n    }\n\n    #[test]\n    fn fix_not_only_we_are() {\n        assert_suggestion_result(\n            \"Here not only we are using multiline string to create an HTML output but we also are binding variable using expression language.\",\n            NotOnlyInversion::default(),\n            \"Here not only are we using multiline string to create an HTML output but we also are binding variable using expression language.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_only_we_were() {\n        assert_suggestion_result(\n            \"Not only we were using an old version of our front end library (React), but we were also locked into a version of our functional programming utility package (Lodash) released more than three years ago.\",\n            NotOnlyInversion::default(),\n            \"Not only were we using an old version of our front end library (React), but we were also locked into a version of our functional programming utility package (Lodash) released more than three years ago.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_only_you_are() {\n        assert_suggestion_result(\n            \"So not only you are a perfect reference, but also a viable candidate for drop-n-use.\",\n            NotOnlyInversion::default(),\n            \"So not only are you a perfect reference, but also a viable candidate for drop-n-use.\",\n        );\n    }\n\n    #[test]\n    fn fix_not_only_you_were() {\n        assert_suggestion_result(\n            \"because not only you were able to explain it but you were able to show me how to sort it so it would displayed\",\n            NotOnlyInversion::default(),\n            \"because not only were you able to explain it but you were able to show me how to sort it so it would displayed\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/noun_verb_confusion/effect_affect/affect_to_effect.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    CharStringExt, Token, TokenKind,\n    expr::{Expr, ExprMap, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::{ModalVerb, Pattern, UPOSSet},\n};\n\npub(super) struct AffectToEffect {\n    expr: ExprMap<usize>,\n}\n\nimpl Default for AffectToEffect {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        let adj_then_noun_follow = SequenceExpr::with(|tok: &Token, source: &[char]| {\n            matches_preceding_context_adj_noun(tok, source)\n        })\n        .t_ws()\n        .then(|tok: &Token, source: &[char]| is_affect_word(tok, source))\n        .t_ws()\n        .then(UPOSSet::new(&[UPOS::ADJ]))\n        .t_ws()\n        .then(UPOSSet::new(&[UPOS::NOUN]));\n\n        map.insert(adj_then_noun_follow, 2);\n\n        let word_follow = SequenceExpr::with(|tok: &Token, source: &[char]| {\n            matches_preceding_context(tok, source)\n        })\n        .t_ws()\n        .then(|tok: &Token, source: &[char]| is_affect_word(tok, source))\n        .t_ws()\n        .then(UPOSSet::new(&[\n            UPOS::PROPN,\n            UPOS::INTJ,\n            UPOS::ADP,\n            UPOS::SCONJ,\n        ]));\n\n        map.insert(word_follow, 2);\n\n        let verb_follow = SequenceExpr::with(|tok: &Token, source: &[char]| {\n            matches_preceding_context_verb_follow(tok, source)\n        })\n        .t_ws()\n        .then(|tok: &Token, source: &[char]| is_affect_word(tok, source))\n        .t_ws()\n        .then(UPOSSet::new(&[UPOS::AUX, UPOS::VERB]));\n\n        map.insert(verb_follow, 2);\n\n        let punctuation_follow = SequenceExpr::with(|tok: &Token, source: &[char]| {\n            matches_preceding_context(tok, source)\n        })\n        .t_ws()\n        .then(|tok: &Token, source: &[char]| is_affect_word(tok, source))\n        .then_kind_where(|kind| kind.is_punctuation());\n\n        map.insert(punctuation_follow, 2);\n\n        let great_affect = SequenceExpr::default()\n            .t_aco(\"great\")\n            .t_ws()\n            .then(|tok: &Token, source: &[char]| is_affect_word(tok, source));\n\n        map.insert(great_affect, 2);\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for AffectToEffect {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offending_index = *self.expr.lookup(0, matched_tokens, source)?;\n        let target = &matched_tokens[offending_index];\n\n        let preceding = matched_tokens[..offending_index]\n            .iter()\n            .rfind(|tok| !tok.kind.is_whitespace());\n\n        if preceding.is_some_and(|tok| {\n            (tok.kind.is_pronoun() || tok.kind.is_upos(UPOS::PRON))\n                && !tok.kind.is_possessive_pronoun()\n        }) {\n            // Pronouns like \"it\" or \"they\" almost always introduce the verb form (\"it affects\").\n            return None;\n        }\n\n        let token_text = target.span.get_content_string(source);\n        let lower = token_text.to_lowercase();\n        let replacement = match lower.as_str() {\n            \"affect\" => \"effect\",\n            \"affects\" => \"effects\",\n            _ => return None,\n        };\n\n        Some(Lint {\n            span: target.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                replacement,\n                target.span.get_content(source),\n            )],\n            message: \"`affect` is usually a verb; use `effect` here for the result or outcome.\"\n                .into(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects `affect` to `effect` when the context shows the noun meaning `result`.\"\n    }\n}\n\nfn is_affect_word(token: &Token, source: &[char]) -> bool {\n    const AFFECT: &[char] = &['a', 'f', 'f', 'e', 'c', 't'];\n    const AFFECTS: &[char] = &['a', 'f', 'f', 'e', 'c', 't', 's'];\n\n    if !matches!(token.kind, TokenKind::Word(_)) {\n        return false;\n    }\n\n    let text = token.span.get_content(source);\n    text.eq_ignore_ascii_case_chars(AFFECT) || text.eq_ignore_ascii_case_chars(AFFECTS)\n}\n\nfn is_take_form(chars: &[char]) -> bool {\n    chars.eq_ignore_ascii_case_str(\"take\")\n        || chars.eq_ignore_ascii_case_str(\"takes\")\n        || chars.eq_ignore_ascii_case_str(\"taking\")\n        || chars.eq_ignore_ascii_case_str(\"took\")\n        || chars.eq_ignore_ascii_case_str(\"taken\")\n}\n\nfn is_modal_like(token: &Token, source: &[char], prev: &[char]) -> bool {\n    if ModalVerb::default()\n        .matches(std::slice::from_ref(token), source)\n        .is_some()\n    {\n        return true;\n    }\n\n    prev.eq_ignore_ascii_case_str(\"do\")\n        || prev.eq_ignore_ascii_case_str(\"does\")\n        || prev.eq_ignore_ascii_case_str(\"did\")\n        || prev.eq_ignore_ascii_case_str(\"don't\")\n        || prev.eq_ignore_ascii_case_str(\"dont\")\n        || prev.eq_ignore_ascii_case_str(\"doesn't\")\n        || prev.eq_ignore_ascii_case_str(\"doesnt\")\n        || prev.eq_ignore_ascii_case_str(\"didn't\")\n        || prev.eq_ignore_ascii_case_str(\"didnt\")\n}\n\nfn matches_preceding_context(token: &Token, source: &[char]) -> bool {\n    matches_preceding_context_impl(token, source, true, true)\n}\n\nfn matches_preceding_context_adj_noun(token: &Token, source: &[char]) -> bool {\n    matches_preceding_context_impl(token, source, false, true)\n}\n\nfn matches_preceding_context_verb_follow(token: &Token, source: &[char]) -> bool {\n    matches_preceding_context_impl(token, source, true, false)\n}\n\nfn matches_preceding_context_impl(\n    token: &Token,\n    source: &[char],\n    allow_noun_like: bool,\n    allow_verb_like: bool,\n) -> bool {\n    if token.kind.is_possessive_nominal() {\n        return false;\n    }\n\n    if !is_preceding_context(token) {\n        return false;\n    }\n\n    let content = token.span.get_content(source);\n    let is_take_form_word = is_take_form(content);\n\n    if behaves_like_verb(token, source, content) && !is_take_form_word {\n        return false;\n    }\n\n    if !allow_verb_like && token.kind.is_upos(UPOS::VERB) && !is_take_form_word {\n        return false;\n    }\n\n    if !allow_noun_like\n        && (token.kind.is_noun() || token.kind.is_proper_noun())\n        && !is_take_form_word\n    {\n        return false;\n    }\n\n    true\n}\n\nfn behaves_like_verb(token: &Token, source: &[char], prev: &[char]) -> bool {\n    token.kind.is_upos(UPOS::AUX)\n        || token.kind.is_auxiliary_verb()\n        || is_modal_like(token, source, prev)\n}\n\nfn is_preceding_context(token: &Token) -> bool {\n    if token.kind.is_upos(UPOS::ADV) {\n        return false;\n    }\n\n    matches!(token.kind, TokenKind::Punctuation(_))\n        || token.kind.is_preposition()\n        || token.kind.is_conjunction()\n        || token.kind.is_proper_noun()\n        || token.kind.is_verb()\n        || token.kind.is_adjective()\n        || token.kind.is_determiner()\n        || token.kind.is_noun()\n}\n"
  },
  {
    "path": "harper-core/src/linting/noun_verb_confusion/effect_affect/effect_to_affect.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    CharStringExt, Token, TokenKind,\n    expr::{Expr, ExprMap, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WhitespacePattern,\n};\n\npub(super) struct EffectToAffect {\n    expr: ExprMap<usize>,\n}\n\nimpl Default for EffectToAffect {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        let context = SequenceExpr::with(matches_preceding_context)\n            .t_ws()\n            .then(|tok: &Token, source: &[char]| is_effect_word(tok, source))\n            .t_ws()\n            .then(matches_following_context)\n            .then_optional(WhitespacePattern)\n            .then_optional(matches_optional_following)\n            .then_optional(WhitespacePattern);\n\n        map.insert(context, 2);\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for EffectToAffect {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offending_idx = *self.expr.lookup(0, matched_tokens, source)?;\n        let target = &matched_tokens[offending_idx];\n\n        let preceding = matched_tokens[..offending_idx]\n            .iter()\n            .rfind(|tok| !tok.kind.is_whitespace());\n\n        let mut following = matched_tokens[offending_idx + 1..]\n            .iter()\n            .filter(|tok| !tok.kind.is_whitespace());\n\n        let first_following = following.next()?;\n        let second_following = following.next();\n\n        if let Some(prev) = preceding {\n            let lower_prev = prev.span.get_content_string(source).to_lowercase();\n\n            if matches!(\n                lower_prev.as_str(),\n                \"take\" | \"takes\" | \"taking\" | \"took\" | \"taken\"\n            ) {\n                return None;\n            }\n        }\n\n        if first_following.kind.is_upos(UPOS::AUX) || first_following.kind.is_linking_verb() {\n            return None;\n        }\n\n        let first_following_lower = first_following\n            .span\n            .get_content_string(source)\n            .to_lowercase();\n\n        if matches!(\n            first_following_lower.as_str(),\n            \"is\" | \"are\" | \"was\" | \"were\" | \"be\" | \"been\" | \"being\"\n        ) {\n            return None;\n        }\n\n        // Avoid \"to effect change\", which uses the legitimate verb \"effect\".\n        if let Some(prev) = preceding\n            && is_token_to(prev, source)\n            && is_change_like(first_following, source)\n        {\n            return None;\n        }\n\n        if first_following.kind.is_upos(UPOS::VERB)\n            && preceding.is_some_and(|tok| {\n                tok.kind.is_upos(UPOS::NOUN)\n                    || tok.kind.is_upos(UPOS::DET)\n                    || tok.kind.is_upos(UPOS::ADJ)\n                    || (tok.kind.is_noun()\n                        && !tok.kind.is_upos(UPOS::VERB)\n                        && !tok.kind.is_upos(UPOS::AUX))\n            })\n        {\n            return None;\n        }\n\n        // Skip when the context already shows a clear noun usage (e.g., \"the effect your idea had\").\n        if let Some(prev) = preceding\n            && (prev.kind.is_upos(UPOS::DET) || prev.kind.is_upos(UPOS::ADJ))\n        {\n            return None;\n        }\n\n        // Do not flag when the following noun is clearly the result of \"effect\" in the idiomatic sense.\n        if let Some(next) = second_following\n            && next.kind.is_noun()\n            && is_change_like(next, source)\n        {\n            return None;\n        }\n\n        let token_text = target.span.get_content_string(source);\n        let lower = token_text.to_lowercase();\n\n        if lower.as_str() == \"effects\" && preceding.is_some_and(|tok| tok.kind.is_upos(UPOS::VERB))\n        {\n            // Imperative phrases like \"Avoid effects\" legitimately use the noun.\n            return None;\n        }\n\n        let replacement = match lower.as_str() {\n            \"effect\" => \"affect\",\n            \"effects\" => \"affects\",\n            _ => return None,\n        };\n\n        Some(Lint {\n            span: target.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                replacement,\n                target.span.get_content(source),\n            )],\n            message:\n                \"Use `affect` for the verb meaning to influence; `effect` usually names the result.\"\n                    .into(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects `effect` to `affect` when the context shows the verb meaning `influence`.\"\n    }\n}\n\nfn is_effect_word(token: &Token, source: &[char]) -> bool {\n    if !matches!(token.kind, TokenKind::Word(_)) {\n        return false;\n    }\n\n    const EFFECT: &[char] = &['e', 'f', 'f', 'e', 'c', 't'];\n    const EFFECTS: &[char] = &['e', 'f', 'f', 'e', 'c', 't', 's'];\n\n    let text = token.span.get_content(source);\n    text.eq_ignore_ascii_case_chars(EFFECT) || text.eq_ignore_ascii_case_chars(EFFECTS)\n}\n\nfn is_token_to(token: &Token, source: &[char]) -> bool {\n    token\n        .span\n        .get_content(source)\n        .eq_ignore_ascii_case_chars(&['t', 'o'])\n}\n\nfn is_change_like(token: &Token, source: &[char]) -> bool {\n    if !token.kind.is_word() {\n        return false;\n    }\n\n    matches!(\n        token\n            .span\n            .get_content_string(source)\n            .to_lowercase()\n            .as_str(),\n        \"change\" | \"changes\" | \"substitution\" | \"substitutions\"\n    )\n}\n\nfn matches_preceding_context(token: &Token, _source: &[char]) -> bool {\n    tag_matches_any(\n        token,\n        &[\n            UPOS::PART,\n            UPOS::NOUN,\n            UPOS::PRON,\n            UPOS::PROPN,\n            UPOS::ADV,\n            UPOS::AUX,\n            UPOS::VERB,\n            UPOS::ADJ,\n        ],\n    )\n}\n\nfn matches_following_context(token: &Token, _source: &[char]) -> bool {\n    tag_matches_any(\n        token,\n        &[\n            UPOS::ADV,\n            UPOS::AUX,\n            UPOS::PRON,\n            UPOS::PROPN,\n            UPOS::VERB,\n            UPOS::NUM,\n            UPOS::NOUN,\n            UPOS::INTJ,\n            UPOS::SCONJ,\n            UPOS::DET,\n            UPOS::ADJ,\n        ],\n    )\n}\n\nfn matches_optional_following(token: &Token, _source: &[char]) -> bool {\n    if token.kind.is_punctuation() {\n        return true;\n    }\n\n    tag_matches_any(token, &[UPOS::NOUN])\n}\n\nfn tag_matches_any(token: &Token, allowed: &[UPOS]) -> bool {\n    let Some(word_meta_opt) = token.kind.as_word() else {\n        return false;\n    };\n\n    match word_meta_opt {\n        Some(meta) => meta.pos_tag.is_none_or(|tag| allowed.contains(&tag)),\n        None => true,\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/noun_verb_confusion/effect_affect/mod.rs",
    "content": "mod affect_to_effect;\nmod effect_to_affect;\n\nuse affect_to_effect::AffectToEffect;\nuse effect_to_affect::EffectToAffect;\n\nuse crate::linting::merge_linters::merge_linters;\n\nmerge_linters!(\n    EffectAffect =>\n        EffectToAffect,\n        AffectToEffect\n    => \"Guides writers toward the right choice between `effect` and `affect`, correcting each term when it shows up in the other one's role.\"\n);\n"
  },
  {
    "path": "harper-core/src/linting/noun_verb_confusion/mod.rs",
    "content": "use super::merge_linters::merge_linters;\n\nmod effect_affect;\nmod noun_instead_of_verb;\nmod verb_instead_of_noun;\n\n// Common noun-verb pairs that are often confused\n// See also [`NounInsteadOfVerb``]\npub(crate) const NOUN_VERB_PAIRS: &[(&str, &str)] = &[\n    (\"advice\", \"advise\"),\n    (\"belief\", \"believe\"),\n    (\"breath\", \"breathe\"),\n    (\"effect\", \"affect\"), // \"Effect\" is also a verb meaning \"to bring about\". \"Affect\" is a noun in psychology.\n    (\"emphasis\", \"emphasize\"), // TODO how to handle \"emphasise\" as well as \"emphasize\"?\n    (\"intent\", \"intend\"),\n    // (\"proof\", \"prove\"),  // \"Proof\" is also a verb, a synonym of \"proofread\".\n    (\"weight\", \"weigh\"),\n    // Add more pairs here as needed\n];\n\nuse noun_instead_of_verb::NounInsteadOfVerb;\nuse verb_instead_of_noun::VerbInsteadOfNoun;\n\nmerge_linters! {\n    NounVerbConfusion =>\n        NounInsteadOfVerb,\n        VerbInsteadOfNoun\n        => \"Handles common confusions between related nouns and verbs (e.g., 'advice/advise', 'breath/breathe')\"\n}\n\n#[cfg(test)]\nmod tests {\n    use super::NounVerbConfusion;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn corrects_good_advise() {\n        assert_suggestion_result(\"Good advise\", NounVerbConfusion::default(), \"Good advice\");\n    }\n\n    #[test]\n    fn corrects_bad_advise() {\n        assert_suggestion_result(\n            \"I just wanted to bring attention to this because it stood out to me as potentially bad advise.\",\n            NounVerbConfusion::default(),\n            \"I just wanted to bring attention to this because it stood out to me as potentially bad advice.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_correct_better_advise() {\n        assert_lint_count(\n            \"Hello! I am an engineer at Plexon and am conducting tests with Kilosort4 so we can better advise our clients.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"'better advise' can be correct as above, or a mistake like here\"]\n    fn correct_better_advise() {\n        assert_suggestion_result(\n            \"Maybe this will be a decent idea, .or anybody has better advise :)\",\n            NounVerbConfusion::default(),\n            \"Maybe this will be a decent idea, .or anybody has better advice :)\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_correct_better_believe() {\n        assert_lint_count(\n            \"You'd better believe this is bbedit-gist-maker.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn correct_strong_believe() {\n        assert_suggestion_result(\n            \"cause my strong believe is that we must give any user to describe whether a post is meant factual\",\n            NounVerbConfusion::default(),\n            \"cause my strong belief is that we must give any user to describe whether a post is meant factual\",\n        );\n    }\n\n    #[test]\n    fn correct_deep_breathe() {\n        assert_suggestion_result(\n            \"Take deep breathe and Do it again!\",\n            NounVerbConfusion::default(),\n            \"Take deep breath and Do it again!\",\n        );\n    }\n\n    #[test]\n    fn correct_bad_intend() {\n        assert_suggestion_result(\n            \"What do you do if you only see slightly longer posts that may still be acceptable (and not bad intend from the poster)\",\n            NounVerbConfusion::default(),\n            \"What do you do if you only see slightly longer posts that may still be acceptable (and not bad intent from the poster)\",\n        );\n    }\n\n    #[test]\n    fn corrects_belief_instead_of_verb() {\n        assert_suggestion_result(\n            \"I belief in you.\",\n            NounVerbConfusion::default(),\n            \"I believe in you.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"`to` can't disambiguate since it's valid between verbs and nouns\"]\n    fn corrects_breath_instead_of_verb() {\n        assert_suggestion_result(\n            \"Remember to breath deeply.\",\n            NounVerbConfusion::default(),\n            \"Remember to breathe deeply.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_correct_believe() {\n        assert_lint_count(\"I believe in you.\", NounVerbConfusion::default(), 0);\n    }\n\n    #[test]\n    fn does_not_flag_correct_breath() {\n        assert_lint_count(\"Take a deep breath.\", NounVerbConfusion::default(), 0);\n    }\n\n    // real-world example unit tests\n\n    #[test]\n    fn fix_when_i_breath_you_breath() {\n        assert_suggestion_result(\n            \"When I breath, you breath!\",\n            NounVerbConfusion::default(),\n            \"When I breathe, you breathe!\",\n        );\n    }\n\n    #[test]\n    fn fix_weather_climate_and_the_air_we_breath() {\n        assert_suggestion_result(\n            \"Weather Climate and the Air We Breath\",\n            NounVerbConfusion::default(),\n            \"Weather Climate and the Air We Breathe\",\n        );\n    }\n\n    #[test]\n    fn fix_always_breath() {\n        assert_suggestion_result(\n            \"breathing. remember to always breath.\",\n            NounVerbConfusion::default(),\n            \"breathing. remember to always breathe.\",\n        );\n    }\n\n    #[test]\n    fn fix_never_breath_a_word() {\n        assert_suggestion_result(\n            \"And never breath a word about your loss; If you can force your heart and nerve and sinew.\",\n            NounVerbConfusion::default(),\n            \"And never breathe a word about your loss; If you can force your heart and nerve and sinew.\",\n        );\n    }\n\n    #[test]\n    fn fix_breath_for_seconds() {\n        assert_suggestion_result(\n            \"Once turned on, the LED on the TX unit would breath for a few seconds, then go completely dead and not responding to objects in front of the sensors.\",\n            NounVerbConfusion::default(),\n            \"Once turned on, the LED on the TX unit would breathe for a few seconds, then go completely dead and not responding to objects in front of the sensors.\",\n        );\n    }\n\n    #[test]\n    fn fix_breath_a_little_more_life() {\n        assert_suggestion_result(\n            \"... up to 12% more performance, could breath a little more life into systems as old as Sandy Bridge.\",\n            NounVerbConfusion::default(),\n            \"... up to 12% more performance, could breathe a little more life into systems as old as Sandy Bridge.\",\n        );\n    }\n\n    #[test]\n    fn fix_the_diversity_we_breath() {\n        assert_suggestion_result(\n            \"The Diversity We Breath: Community Diversity\",\n            NounVerbConfusion::default(),\n            \"The Diversity We Breathe: Community Diversity\",\n        );\n    }\n\n    #[test]\n    fn fix_belief() {\n        assert_suggestion_result(\n            \"While I have no plans to return to aerospace I belief it gives me a unique perspective to many challenges.\",\n            NounVerbConfusion::default(),\n            \"While I have no plans to return to aerospace I believe it gives me a unique perspective to many challenges.\",\n        );\n    }\n\n    #[test]\n    fn fix_we_belief() {\n        assert_suggestion_result(\n            \"In contrast to other vendors in e-mobility, we belief that true transparency is only trustworthy if the entire process ...\",\n            NounVerbConfusion::default(),\n            \"In contrast to other vendors in e-mobility, we believe that true transparency is only trustworthy if the entire process ...\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"`underwater` is a marginal noun so `breath underwater` matches the compound noun test.\"]\n    fn fix_i_can_breath() {\n        assert_suggestion_result(\n            \"Steps to reproduce Expected behaviour I can breath underwater.\",\n            NounVerbConfusion::default(),\n            \"Steps to reproduce Expected behaviour I can breathe underwater.\",\n        );\n    }\n\n    #[test]\n    fn fix_caps_should_breath() {\n        assert_suggestion_result(\n            \"CAPS 1 2 3 4 5 A B C D SHOULD BREATH A BIT MORE ?\",\n            NounVerbConfusion::default(),\n            \"CAPS 1 2 3 4 5 A B C D SHOULD BREATHE A BIT MORE ?\",\n        );\n    }\n\n    #[test]\n    fn fix_can_you_advice_me() {\n        assert_suggestion_result(\n            \"Can you advice me how to train?\",\n            NounVerbConfusion::default(),\n            \"Can you advise me how to train?\",\n        );\n    }\n\n    #[test]\n    fn fix_we_can_advice_you() {\n        assert_suggestion_result(\n            \"Feel free to share more details about your use case, so we can advice you specifically based on your case.\",\n            NounVerbConfusion::default(),\n            \"Feel free to share more details about your use case, so we can advise you specifically based on your case.\",\n        );\n    }\n\n    #[test]\n    fn fix_would_advice_against() {\n        assert_suggestion_result(\n            \"So that I would advice against using a spindle in laser mode.\",\n            NounVerbConfusion::default(),\n            \"So that I would advise against using a spindle in laser mode.\",\n        );\n    }\n\n    #[test]\n    fn fix_advice_to_listen() {\n        assert_suggestion_result(\n            \"The idea of this applicaton was inspired by Ray Dalio, who always advice to listen to people who know more than us by experience.\",\n            NounVerbConfusion::default(),\n            \"The idea of this applicaton was inspired by Ray Dalio, who always advise to listen to people who know more than us by experience.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"`You` is an object pronoun in this example. `It` is also both subject and object.\"]\n    fn dont_fix_advice_on_that() {\n        assert_lint_count(\n            \"I don't do table returning functions in my code so can't offer you advice on that.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_advice_to_stick_with_openvscode() {\n        assert_suggestion_result(\n            \"But unless you really need it, I would advice to stick with openvscode as there are nearly the same.\",\n            NounVerbConfusion::default(),\n            \"But unless you really need it, I would advise to stick with openvscode as there are nearly the same.\",\n        );\n    }\n\n    #[test]\n    fn fix_advice_to_back_up_os_image() {\n        assert_suggestion_result(\n            \"I would advice to back up all OS image before any update, because you could lose something what was working previously.\",\n            NounVerbConfusion::default(),\n            \"I would advise to back up all OS image before any update, because you could lose something what was working previously.\",\n        );\n    }\n\n    #[test]\n    fn fix_advice_to_use_ms_store() {\n        assert_suggestion_result(\n            \"I know we can always advice to use the MS store to download JASP instead\",\n            NounVerbConfusion::default(),\n            \"I know we can always advise to use the MS store to download JASP instead\",\n        );\n    }\n\n    #[test]\n    fn fix_should_intent_be() {\n        assert_suggestion_result(\n            \"Should intent be on the blocklist?\",\n            NounVerbConfusion::default(),\n            \"Should intent be on the blocklist?\",\n        );\n    }\n\n    #[test]\n    fn fix_if_you_intent() {\n        assert_suggestion_result(\n            \"If you intent to use a 64 bits machine, change line 74\",\n            NounVerbConfusion::default(),\n            \"If you intend to use a 64 bits machine, change line 74\",\n        );\n    }\n\n    #[test]\n    fn fix_what_you_would_intent_to_do() {\n        assert_suggestion_result(\n            \"May I ask what you would intent to do with such a feature?\",\n            NounVerbConfusion::default(),\n            \"May I ask what you would intend to do with such a feature?\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_intent_records() {\n        assert_lint_count(\n            \"there are always intent records associated to the txns\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_did_you_always_intent_to() {\n        assert_suggestion_result(\n            \"Did you always intent to fight malware? No.\",\n            NounVerbConfusion::default(),\n            \"Did you always intend to fight malware? No.\",\n        );\n    }\n\n    #[test]\n    fn fix_we_recommend_you_create_a_new_issue_on_github_explaining_what_you_intent_to_do() {\n        assert_suggestion_result(\n            \"... we recommend you create a new issue on github explaining what you intent to do.\",\n            NounVerbConfusion::default(),\n            \"... we recommend you create a new issue on github explaining what you intend to do.\",\n        );\n    }\n\n    #[test]\n    fn fix_intent_to_use_non_imported_symbol() {\n        assert_suggestion_result(\n            \"There's a warning reported for this code, saying that it may intent to use non-imported symbol\",\n            NounVerbConfusion::default(),\n            \"There's a warning reported for this code, saying that it may intend to use non-imported symbol\",\n        );\n    }\n\n    // tests for preceding \"to\"\n\n    #[test]\n    fn fix_to_emphasis_the() {\n        assert_suggestion_result(\n            \"This one could be used in a dialog to emphasis the surprise.\",\n            NounVerbConfusion::default(),\n            \"This one could be used in a dialog to emphasize the surprise.\",\n        );\n    }\n\n    #[test]\n    fn allow_to_emphasis_at_end() {\n        assert_lint_count(\n            \"Changes literal underscores to emphasis\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_to_intent_adjective() {\n        assert_lint_count(\n            \"Cleanup passing statistics to intent aware iterator\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_to_advice_a_class() {\n        assert_suggestion_result(\n            \"How to advice a class that have been intercepted by another javaagent\",\n            NounVerbConfusion::default(),\n            \"How to advise a class that have been intercepted by another javaagent\",\n        );\n    }\n\n    #[test]\n    fn fix_to_breath_some() {\n        assert_suggestion_result(\n            \"You go to the balcony to breath some fresh air and look down at the things outside.\",\n            NounVerbConfusion::default(),\n            \"You go to the balcony to breathe some fresh air and look down at the things outside.\",\n        );\n    }\n\n    #[test]\n    fn fix_to_emphasis_a() {\n        assert_suggestion_result(\n            \"we'd like to emphasis a few points below\",\n            NounVerbConfusion::default(),\n            \"we'd like to emphasize a few points below\",\n        );\n    }\n\n    #[test]\n    fn fix_to_advice_their() {\n        assert_suggestion_result(\n            \"People who are managing this situation tend to advice their users to lock+unlock their screen\",\n            NounVerbConfusion::default(),\n            \"People who are managing this situation tend to advise their users to lock+unlock their screen\",\n        );\n    }\n\n    // affect vs. effect sentences gathered from user reports\n\n    #[test]\n    fn fix_positive_affect_on_small_businesses() {\n        assert_suggestion_result(\n            \"The new law had a positive affect on small businesses.\",\n            NounVerbConfusion::default(),\n            \"The new law had a positive effect on small businesses.\",\n        );\n    }\n\n    #[test]\n    fn fix_measured_the_affect_of_caffeine() {\n        assert_suggestion_result(\n            \"We measured the affect of caffeine on reaction time.\",\n            NounVerbConfusion::default(),\n            \"We measured the effect of caffeine on reaction time.\",\n        );\n    }\n\n    #[test]\n    fn fix_side_affects_included_nausea() {\n        assert_suggestion_result(\n            \"The side affects included nausea and fatigue.\",\n            NounVerbConfusion::default(),\n            \"The side effects included nausea and fatigue.\",\n        );\n    }\n\n    #[test]\n    fn fix_cause_and_affect_not_same() {\n        assert_suggestion_result(\n            \"Cause and affect are not the same thing.\",\n            NounVerbConfusion::default(),\n            \"Cause and effect are not the same thing.\",\n        );\n    }\n\n    #[test]\n    fn fix_change_will_have_an_affect_on_revenue() {\n        assert_suggestion_result(\n            \"The change will have an affect on our revenue.\",\n            NounVerbConfusion::default(),\n            \"The change will have an effect on our revenue.\",\n        );\n    }\n\n    #[test]\n    fn fix_medicine_took_affect_within_minutes() {\n        assert_suggestion_result(\n            \"The medicine took affect within minutes.\",\n            NounVerbConfusion::default(),\n            \"The medicine took effect within minutes.\",\n        );\n    }\n\n    #[test]\n    fn fix_policy_will_come_into_affect() {\n        assert_suggestion_result(\n            \"The policy will come into affect on October 1.\",\n            NounVerbConfusion::default(),\n            \"The policy will come into effect on October 1.\",\n        );\n    }\n\n    #[test]\n    fn fix_rules_are_now_in_affect() {\n        assert_suggestion_result(\n            \"The rules are now in affect.\",\n            NounVerbConfusion::default(),\n            \"The rules are now in effect.\",\n        );\n    }\n\n    #[test]\n    fn fix_with_immediate_affect_office_closed() {\n        assert_suggestion_result(\n            \"With immediate affect, the office is closed.\",\n            NounVerbConfusion::default(),\n            \"With immediate effect, the office is closed.\",\n        );\n    }\n\n    #[test]\n    fn fix_stunning_special_affects() {\n        assert_suggestion_result(\n            \"The director used stunning special affects.\",\n            NounVerbConfusion::default(),\n            \"The director used stunning special effects.\",\n        );\n    }\n\n    #[test]\n    fn fix_placebo_affect_can_be_powerful() {\n        assert_suggestion_result(\n            \"The placebo affect can be powerful.\",\n            NounVerbConfusion::default(),\n            \"The placebo effect can be powerful.\",\n        );\n    }\n\n    #[test]\n    fn fix_ripple_affect_across_market() {\n        assert_suggestion_result(\n            \"We felt the ripple affect across the entire market.\",\n            NounVerbConfusion::default(),\n            \"We felt the ripple effect across the entire market.\",\n        );\n    }\n\n    #[test]\n    fn fix_snowball_affect_amplified_problem() {\n        assert_suggestion_result(\n            \"The snowball affect amplified the problem.\",\n            NounVerbConfusion::default(),\n            \"The snowball effect amplified the problem.\",\n        );\n    }\n\n    #[test]\n    fn fix_knock_on_affect_throughout_team() {\n        assert_suggestion_result(\n            \"That decision had a knock-on affect throughout the team.\",\n            NounVerbConfusion::default(),\n            \"That decision had a knock-on effect throughout the team.\",\n        );\n    }\n\n    #[test]\n    fn fix_greenhouse_affect_warms_planet() {\n        assert_suggestion_result(\n            \"The greenhouse affect warms the planet.\",\n            NounVerbConfusion::default(),\n            \"The greenhouse effect warms the planet.\",\n        );\n    }\n\n    #[test]\n    fn fix_apology_had_little_affect() {\n        assert_suggestion_result(\n            \"Her apology had little affect.\",\n            NounVerbConfusion::default(),\n            \"Her apology had little effect.\",\n        );\n    }\n\n    #[test]\n    fn fix_settings_go_into_affect() {\n        assert_suggestion_result(\n            \"The new settings go into affect after a restart.\",\n            NounVerbConfusion::default(),\n            \"The new settings go into effect after a restart.\",\n        );\n    }\n\n    #[test]\n    fn fix_put_plan_into_affect() {\n        assert_suggestion_result(\n            \"They put the new plan into affect last week.\",\n            NounVerbConfusion::default(),\n            \"They put the new plan into effect last week.\",\n        );\n    }\n\n    #[test]\n    fn fix_contract_comes_into_affect() {\n        assert_suggestion_result(\n            \"The contract comes into affect at midnight.\",\n            NounVerbConfusion::default(),\n            \"The contract comes into effect at midnight.\",\n        );\n    }\n\n    #[test]\n    fn fix_warning_had_no_affect_on_behavior() {\n        assert_suggestion_result(\n            \"The warning had no affect on his behavior.\",\n            NounVerbConfusion::default(),\n            \"The warning had no effect on his behavior.\",\n        );\n    }\n\n    #[test]\n    fn fix_inflation_had_opposite_affect() {\n        assert_suggestion_result(\n            \"Inflation had the opposite affect than expected.\",\n            NounVerbConfusion::default(),\n            \"Inflation had the opposite effect than expected.\",\n        );\n    }\n\n    #[test]\n    fn fix_regulation_remains_in_affect() {\n        assert_suggestion_result(\n            \"The regulation remains in affect until further notice.\",\n            NounVerbConfusion::default(),\n            \"The regulation remains in effect until further notice.\",\n        );\n    }\n\n    #[test]\n    fn fix_app_changes_take_affect() {\n        assert_suggestion_result(\n            \"The app changes take affect next week.\",\n            NounVerbConfusion::default(),\n            \"The app changes take effect next week.\",\n        );\n    }\n\n    #[test]\n    fn fix_sound_affects_were_added() {\n        assert_suggestion_result(\n            \"Sound affects were added in post.\",\n            NounVerbConfusion::default(),\n            \"Sound effects were added in post.\",\n        );\n    }\n\n    // Effect/affect-specific checks\n    // `effect` mistakenly used as the verb `affect`.\n    #[test]\n    fn corrects_noun_subject_effects_object() {\n        assert_suggestion_result(\n            \"System outages effect our customers.\",\n            NounVerbConfusion::default(),\n            \"System outages affect our customers.\",\n        );\n    }\n\n    #[test]\n    fn corrects_effects_variant() {\n        assert_suggestion_result(\n            \"This policy effects employee morale.\",\n            NounVerbConfusion::default(),\n            \"This policy affects employee morale.\",\n        );\n    }\n\n    #[test]\n    fn ignores_effect_change_idiom() {\n        assert_lint_count(\n            \"Leaders work to effect change in their communities.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_effect_noun_phrase() {\n        assert_lint_count(\n            \"The effect your plan had was dramatic.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_effect_as_result_noun() {\n        assert_lint_count(\n            \"The effect was immediate and obvious.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_to_effect_substitutions() {\n        assert_lint_count(\n            \"or it may be desired to effect substitutions\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_effect_followed_by_of_phrase() {\n        assert_lint_count(\n            \"We measured the effect of caffeine on sleep.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_side_effects_usage() {\n        assert_lint_count(\n            \"Side effects may include mild nausea.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_special_effects_phrase() {\n        assert_lint_count(\n            \"She admired the special effects in the film.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_effect_in_cause_and_effect() {\n        assert_lint_count(\n            \"The diagram explains cause and effect relationships.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_effects_with_pronoun_subject() {\n        assert_lint_count(\n            \"Those effects were less severe than expected.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_tariff_effect_import_prices() {\n        assert_suggestion_result(\n            \"The new tariff will effect import prices next quarter.\",\n            NounVerbConfusion::default(),\n            \"The new tariff will affect import prices next quarter.\",\n        );\n    }\n\n    #[test]\n    fn corrects_droughts_effect_crop_yields() {\n        assert_suggestion_result(\n            \"Prolonged droughts severely effect crop yields across the valley.\",\n            NounVerbConfusion::default(),\n            \"Prolonged droughts severely affect crop yields across the valley.\",\n        );\n    }\n\n    #[test]\n    fn corrects_caffeine_effect_sleep() {\n        assert_suggestion_result(\n            \"Caffeine can effect your sleep architecture.\",\n            NounVerbConfusion::default(),\n            \"Caffeine can affect your sleep architecture.\",\n        );\n    }\n\n    #[test]\n    fn corrects_bug_effect_devices() {\n        assert_suggestion_result(\n            \"The firmware bug doesn't effect older devices.\",\n            NounVerbConfusion::default(),\n            \"The firmware bug doesn't affect older devices.\",\n        );\n    }\n\n    #[test]\n    fn corrects_sarcasm_effect_morale() {\n        assert_suggestion_result(\n            \"Her sarcasm seemed to effect the team's morale.\",\n            NounVerbConfusion::default(),\n            \"Her sarcasm seemed to affect the team's morale.\",\n        );\n    }\n\n    #[test]\n    fn corrects_outage_effect_timeline() {\n        assert_suggestion_result(\n            \"How will this outage effect our deployment timeline?\",\n            NounVerbConfusion::default(),\n            \"How will this outage affect our deployment timeline?\",\n        );\n    }\n\n    #[test]\n    fn corrects_temperatures_effect_battery() {\n        assert_suggestion_result(\n            \"Cold temperatures drastically effect lithium-ion battery performance.\",\n            NounVerbConfusion::default(),\n            \"Cold temperatures drastically affect lithium-ion battery performance.\",\n        );\n    }\n\n    #[test]\n    fn corrects_policy_effect_eligibility() {\n        assert_suggestion_result(\n            \"The policy change could effect your eligibility for benefits.\",\n            NounVerbConfusion::default(),\n            \"The policy change could affect your eligibility for benefits.\",\n        );\n    }\n\n    #[test]\n    fn corrects_variables_effect_results() {\n        assert_suggestion_result(\n            \"These confounding variables may effect the study's results.\",\n            NounVerbConfusion::default(),\n            \"These confounding variables may affect the study's results.\",\n        );\n    }\n\n    #[test]\n    fn corrects_fans_effect_concentration() {\n        assert_suggestion_result(\n            \"The noisy HVAC fans constantly effect concentration in the lab.\",\n            NounVerbConfusion::default(),\n            \"The noisy HVAC fans constantly affect concentration in the lab.\",\n        );\n    }\n\n    #[test]\n    fn corrects_hormones_effect_immunity() {\n        assert_suggestion_result(\n            \"Stress hormones can effect immune response during recovery.\",\n            NounVerbConfusion::default(),\n            \"Stress hormones can affect immune response during recovery.\",\n        );\n    }\n\n    #[test]\n    fn corrects_pacing_effect_engagement() {\n        assert_suggestion_result(\n            \"The instructor's pacing tended to effect student engagement.\",\n            NounVerbConfusion::default(),\n            \"The instructor's pacing tended to affect student engagement.\",\n        );\n    }\n\n    #[test]\n    fn corrects_humidity_effect_paint() {\n        assert_suggestion_result(\n            \"Humidity levels directly effect paint curing time.\",\n            NounVerbConfusion::default(),\n            \"Humidity levels directly affect paint curing time.\",\n        );\n    }\n\n    #[test]\n    fn corrects_exchange_effect_invoice() {\n        assert_suggestion_result(\n            \"The exchange rate will surely effect the final invoice.\",\n            NounVerbConfusion::default(),\n            \"The exchange rate will surely affect the final invoice.\",\n        );\n    }\n\n    #[test]\n    fn corrects_brightness_effect_contrast() {\n        assert_suggestion_result(\n            \"Screen brightness settings can effect perceived contrast.\",\n            NounVerbConfusion::default(),\n            \"Screen brightness settings can affect perceived contrast.\",\n        );\n    }\n\n    #[test]\n    fn corrects_medication_effect_him() {\n        assert_suggestion_result(\n            \"The medication didn't effect him the way the doctor expected.\",\n            NounVerbConfusion::default(),\n            \"The medication didn't affect him the way the doctor expected.\",\n        );\n    }\n\n    #[test]\n    fn corrects_payments_effect_credit() {\n        assert_suggestion_result(\n            \"Late payments will negatively effect your credit score.\",\n            NounVerbConfusion::default(),\n            \"Late payments will negatively affect your credit score.\",\n        );\n    }\n\n    #[test]\n    fn corrects_wording_effect_interpretation() {\n        assert_suggestion_result(\n            \"Minor wording tweaks shouldn't effect the legal interpretation.\",\n            NounVerbConfusion::default(),\n            \"Minor wording tweaks shouldn't affect the legal interpretation.\",\n        );\n    }\n\n    #[test]\n    fn corrects_traffic_effect_delivery() {\n        assert_suggestion_result(\n            \"Traffic patterns often effect delivery windows downtown.\",\n            NounVerbConfusion::default(),\n            \"Traffic patterns often affect delivery windows downtown.\",\n        );\n    }\n\n    #[test]\n    fn corrects_rumor_effect_confidence() {\n        assert_suggestion_result(\n            \"The rumor started to effect investor confidence by noon.\",\n            NounVerbConfusion::default(),\n            \"The rumor started to affect investor confidence by noon.\",\n        );\n    }\n\n    #[test]\n    fn corrects_allergies_effect_productivity() {\n        assert_suggestion_result(\n            \"Seasonal allergies badly effect her productivity each April.\",\n            NounVerbConfusion::default(),\n            \"Seasonal allergies badly affect her productivity each April.\",\n        );\n    }\n\n    #[test]\n    fn corrects_feedback_effect_roadmap() {\n        assert_suggestion_result(\n            \"Your feedback won't immediately effect the roadmap.\",\n            NounVerbConfusion::default(),\n            \"Your feedback won't immediately affect the roadmap.\",\n        );\n    }\n\n    #[test]\n    fn corrects_rules_effect_honeypot() {\n        assert_suggestion_result(\n            \"I cant seem to get my additional rules to effect the honeypot\",\n            NounVerbConfusion::default(),\n            \"I cant seem to get my additional rules to affect the honeypot\",\n        );\n    }\n\n    #[test]\n    fn corrects_bandwidth_effect_video() {\n        assert_suggestion_result(\n            \"Fluctuating bandwidth can effect video call quality.\",\n            NounVerbConfusion::default(),\n            \"Fluctuating bandwidth can affect video call quality.\",\n        );\n    }\n\n    #[test]\n    fn corrects_gradient_effect_sensor() {\n        assert_suggestion_result(\n            \"The temperature gradient might effect the sensor's calibration.\",\n            NounVerbConfusion::default(),\n            \"The temperature gradient might affect the sensor's calibration.\",\n        );\n    }\n\n    #[test]\n    fn corrects_delays_effect_satisfaction() {\n        assert_suggestion_result(\n            \"Even tiny delays can effect user satisfaction metrics.\",\n            NounVerbConfusion::default(),\n            \"Even tiny delays can affect user satisfaction metrics.\",\n        );\n    }\n\n    #[test]\n    fn corrects_architecture_effect_gps() {\n        assert_suggestion_result(\n            \"The surrounding architecture can effect GPS accuracy.\",\n            NounVerbConfusion::default(),\n            \"The surrounding architecture can affect GPS accuracy.\",\n        );\n    }\n\n    #[test]\n    fn corrects_lighting_effect_color() {\n        assert_suggestion_result(\n            \"Lighting conditions strongly effect color perception.\",\n            NounVerbConfusion::default(),\n            \"Lighting conditions strongly affect color perception.\",\n        );\n    }\n\n    #[test]\n    fn corrects_coach_effect_roles() {\n        assert_suggestion_result(\n            \"The new coach's strategy will effect players' roles.\",\n            NounVerbConfusion::default(),\n            \"The new coach's strategy will affect players' roles.\",\n        );\n    }\n\n    #[test]\n    fn corrects_overtraining_effect_reaction() {\n        assert_suggestion_result(\n            \"Overtraining can effect reaction time and coordination.\",\n            NounVerbConfusion::default(),\n            \"Overtraining can affect reaction time and coordination.\",\n        );\n    }\n\n    #[test]\n    fn corrects_label_effect_behavior() {\n        assert_suggestion_result(\n            \"The warning label may effect how consumers use the product.\",\n            NounVerbConfusion::default(),\n            \"The warning label may affect how consumers use the product.\",\n        );\n    }\n\n    // `affect` mistakenly used as the noun `effect`.\n    #[test]\n    fn corrects_because_affect_is() {\n        assert_suggestion_result(\n            \"I worry because affect is hidden.\",\n            NounVerbConfusion::default(),\n            \"I worry because effect is hidden.\",\n        );\n    }\n\n    #[test]\n    fn ignores_psychology_usage() {\n        assert_lint_count(\n            \"The patient's affect is flat.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_positive_affect_on() {\n        assert_suggestion_result(\n            \"The new law had a positive affect on small businesses.\",\n            NounVerbConfusion::default(),\n            \"The new law had a positive effect on small businesses.\",\n        );\n    }\n\n    #[test]\n    fn corrects_great_affect() {\n        assert_suggestion_result(\n            \"badges that they provide to users to allow them to promote their projects to great affect\",\n            NounVerbConfusion::default(),\n            \"badges that they provide to users to allow them to promote their projects to great effect\",\n        );\n    }\n\n    #[test]\n    fn corrects_affect_of() {\n        assert_suggestion_result(\n            \"We measured the affect of caffeine on reaction time.\",\n            NounVerbConfusion::default(),\n            \"We measured the effect of caffeine on reaction time.\",\n        );\n    }\n\n    #[test]\n    fn corrects_side_affects() {\n        assert_suggestion_result(\n            \"The side affects included nausea and fatigue.\",\n            NounVerbConfusion::default(),\n            \"The side effects included nausea and fatigue.\",\n        );\n    }\n\n    #[test]\n    fn corrects_cause_and_affect() {\n        assert_suggestion_result(\n            \"Cause and affect are not the same thing.\",\n            NounVerbConfusion::default(),\n            \"Cause and effect are not the same thing.\",\n        );\n    }\n\n    #[test]\n    fn corrects_have_an_affect_on() {\n        assert_suggestion_result(\n            \"The change will have an affect on our revenue.\",\n            NounVerbConfusion::default(),\n            \"The change will have an effect on our revenue.\",\n        );\n    }\n\n    #[test]\n    fn corrects_took_affect() {\n        assert_suggestion_result(\n            \"The medicine took affect within minutes.\",\n            NounVerbConfusion::default(),\n            \"The medicine took effect within minutes.\",\n        );\n    }\n\n    #[test]\n    fn corrects_come_into_affect() {\n        assert_suggestion_result(\n            \"The policy will come into affect on October 1.\",\n            NounVerbConfusion::default(),\n            \"The policy will come into effect on October 1.\",\n        );\n    }\n\n    #[test]\n    fn corrects_in_affect_sentence() {\n        assert_suggestion_result(\n            \"The rules are now in affect.\",\n            NounVerbConfusion::default(),\n            \"The rules are now in effect.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_immediate_affect() {\n        assert_suggestion_result(\n            \"With immediate affect, the office is closed.\",\n            NounVerbConfusion::default(),\n            \"With immediate effect, the office is closed.\",\n        );\n    }\n\n    #[test]\n    fn corrects_special_affects() {\n        assert_suggestion_result(\n            \"The director used stunning special affects.\",\n            NounVerbConfusion::default(),\n            \"The director used stunning special effects.\",\n        );\n    }\n\n    #[test]\n    fn corrects_placebo_affect() {\n        assert_suggestion_result(\n            \"The placebo affect can be powerful.\",\n            NounVerbConfusion::default(),\n            \"The placebo effect can be powerful.\",\n        );\n    }\n\n    #[test]\n    fn corrects_ripple_affect() {\n        assert_suggestion_result(\n            \"We felt the ripple affect across the entire market.\",\n            NounVerbConfusion::default(),\n            \"We felt the ripple effect across the entire market.\",\n        );\n    }\n\n    #[test]\n    fn corrects_snowball_affect() {\n        assert_suggestion_result(\n            \"The snowball affect amplified the problem.\",\n            NounVerbConfusion::default(),\n            \"The snowball effect amplified the problem.\",\n        );\n    }\n\n    #[test]\n    fn corrects_knock_on_affect() {\n        assert_suggestion_result(\n            \"That decision had a knock-on affect throughout the team.\",\n            NounVerbConfusion::default(),\n            \"That decision had a knock-on effect throughout the team.\",\n        );\n    }\n\n    #[test]\n    fn corrects_greenhouse_affect() {\n        assert_suggestion_result(\n            \"The greenhouse affect warms the planet.\",\n            NounVerbConfusion::default(),\n            \"The greenhouse effect warms the planet.\",\n        );\n    }\n\n    #[test]\n    fn corrects_little_affect() {\n        assert_suggestion_result(\n            \"Her apology had little affect.\",\n            NounVerbConfusion::default(),\n            \"Her apology had little effect.\",\n        );\n    }\n\n    #[test]\n    fn corrects_go_into_affect() {\n        assert_suggestion_result(\n            \"The new settings go into affect after a restart.\",\n            NounVerbConfusion::default(),\n            \"The new settings go into effect after a restart.\",\n        );\n    }\n\n    #[test]\n    fn corrects_put_plan_into_affect() {\n        assert_suggestion_result(\n            \"They put the new plan into affect last week.\",\n            NounVerbConfusion::default(),\n            \"They put the new plan into effect last week.\",\n        );\n    }\n\n    #[test]\n    fn corrects_contract_into_affect() {\n        assert_suggestion_result(\n            \"The contract comes into affect at midnight.\",\n            NounVerbConfusion::default(),\n            \"The contract comes into effect at midnight.\",\n        );\n    }\n\n    #[test]\n    fn corrects_no_affect_on_behavior() {\n        assert_suggestion_result(\n            \"The warning had no affect on his behavior.\",\n            NounVerbConfusion::default(),\n            \"The warning had no effect on his behavior.\",\n        );\n    }\n\n    #[test]\n    fn corrects_opposite_affect() {\n        assert_suggestion_result(\n            \"Inflation had the opposite affect than expected.\",\n            NounVerbConfusion::default(),\n            \"Inflation had the opposite effect than expected.\",\n        );\n    }\n\n    #[test]\n    fn corrects_remains_in_affect() {\n        assert_suggestion_result(\n            \"The regulation remains in affect until further notice.\",\n            NounVerbConfusion::default(),\n            \"The regulation remains in effect until further notice.\",\n        );\n    }\n\n    #[test]\n    fn corrects_take_affect_next_week() {\n        assert_suggestion_result(\n            \"The app changes take affect next week.\",\n            NounVerbConfusion::default(),\n            \"The app changes take effect next week.\",\n        );\n    }\n\n    #[test]\n    fn corrects_sound_affects() {\n        assert_suggestion_result(\n            \"Sound affects were added in post.\",\n            NounVerbConfusion::default(),\n            \"Sound effects were added in post.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_best_affect() {\n        assert_lint_count(\n            \"Using linear regression to predict and understand what factors best affect house price\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_sound_affect() {\n        assert_lint_count(\n            \"The goal of this study was to learn what properties of sound affect human focus the most.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_sound_affect() {\n        assert_suggestion_result(\n            \"Diesel Generator's animation returns to 'idle' state, but it's sound affect remains in the 'work' state.\",\n            NounVerbConfusion::default(),\n            \"Diesel Generator's animation returns to 'idle' state, but it's sound effect remains in the 'work' state.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_affect_as_verb() {\n        assert_lint_count(\n            \"The change will affect our revenue significantly.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_affects_as_verb() {\n        assert_lint_count(\n            \"This policy directly affects remote workers.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_correct_effect_noun() {\n        assert_lint_count(\n            \"The placebo effect can be powerful.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_sound_effects() {\n        assert_lint_count(\n            \"Sound effects were added in post.\",\n            NounVerbConfusion::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn issue_1997() {\n        assert_no_lints(\n            \"It depends on which sources it affects, what parameters it uses, etc.\",\n            NounVerbConfusion::default(),\n        );\n    }\n\n    #[test]\n    fn issue_1996() {\n        assert_no_lints(\n            \"Avoid effects outside of functions.\",\n            NounVerbConfusion::default(),\n        );\n    }\n\n    #[test]\n    fn issue_2008() {\n        assert_no_lints(\n            \"Changes that only affect static types, without breaking runtime behavior.\",\n            NounVerbConfusion::default(),\n        );\n    }\n\n    #[test]\n    fn issue_2041() {\n        assert_suggestion_result(\n            \"Let me give you a piece of advise.\",\n            NounVerbConfusion::default(),\n            \"Let me give you a piece of advice.\",\n        );\n    }\n\n    #[test]\n    fn fix_helps_you_weight() {\n        assert_suggestion_result(\n            \"An iOS app that helps you weight small things on the screen of your iPhone / iPad.\",\n            NounVerbConfusion::default(),\n            \"An iOS app that helps you weigh small things on the screen of your iPhone / iPad.\",\n        );\n    }\n\n    #[test]\n    fn fix_do_you_weight() {\n        assert_suggestion_result(\n            \"How much do you weight?\",\n            NounVerbConfusion::default(),\n            \"How much do you weigh?\",\n        );\n    }\n\n    #[test]\n    fn fix_more_than_you_weight() {\n        assert_suggestion_result(\n            \"contributed more than you weight\",\n            NounVerbConfusion::default(),\n            \"contributed more than you weigh\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/noun_verb_confusion/noun_instead_of_verb/general.rs",
    "content": "use crate::{\n    CharStringExt, Lrc, Token,\n    expr::{Expr, FirstMatchOf, LongestMatchOf, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::{ModalVerb, Word, WordSet},\n};\n\nuse super::super::NOUN_VERB_PAIRS;\n\n/// Pronouns that can come before verbs but not nouns\nconst PRONOUNS: &[&str] = &[\"he\", \"I\", \"it\", \"she\", \"they\", \"we\", \"who\", \"you\"];\n\n/// Linter that corrects common noun/verb confusions\npub(super) struct GeneralNounInsteadOfVerb {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for GeneralNounInsteadOfVerb {\n    fn default() -> Self {\n        // Adverbs that can come before verbs but not nouns\n        // Note: \"Sometimes\" can come before a noun.\n        let adverb_of_frequency = |tok: &Token, src: &[char]| {\n            tok.kind.is_frequency_adverb()\n                && !tok\n                    .span\n                    .get_content(src)\n                    .eq_ignore_ascii_case_str(\"sometimes\")\n        };\n\n        let pre_context = FirstMatchOf::new(vec![\n            Box::new(WordSet::new(PRONOUNS)),\n            Box::new(ModalVerb::with_common_errors()),\n            Box::new(WordSet::new(&[\"do\", \"don't\", \"dont\"])),\n            Box::new(adverb_of_frequency),\n            Box::new(Word::new(\"to\")),\n        ]);\n\n        let nouns = Lrc::new(WordSet::new(\n            &NOUN_VERB_PAIRS\n                .iter()\n                .map(|&(noun, _)| noun)\n                .collect::<Vec<_>>(),\n        ));\n\n        let basic_pattern = Lrc::new(\n            SequenceExpr::with(pre_context)\n                .then_whitespace()\n                .then(nouns.clone()),\n        );\n\n        let pattern_followed_by_punctuation =\n            SequenceExpr::with(basic_pattern.clone()).then_punctuation();\n\n        let pattern_followed_by_word = SequenceExpr::with(basic_pattern.clone())\n            .then_whitespace()\n            .then_any_word();\n\n        Self {\n            expr: Box::new(LongestMatchOf::new(vec![\n                Box::new(pattern_followed_by_punctuation),\n                Box::new(pattern_followed_by_word),\n                Box::new(basic_pattern),\n            ])),\n        }\n    }\n}\n\nimpl ExprLinter for GeneralNounInsteadOfVerb {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let prev_tok = &toks[0];\n\n        // If we have the next word token, try to rule out compound nouns\n        if toks.len() > 4 {\n            let following_tok = &toks[4];\n            if following_tok.kind.is_noun()\n                && !following_tok.kind.is_proper_noun()\n                && !following_tok.kind.is_preposition()\n            {\n                // But first rule out marginal \"nouns\"\n                if !following_tok\n                    .span\n                    .get_content(src)\n                    .eq_any_ignore_ascii_case_str(&[\"it\", \"me\", \"on\", \"that\"])\n                {\n                    return None;\n                }\n            }\n\n            // If the previous word is \"to\", use the following word to disambiguate\n            if prev_tok\n                .span\n                .get_content(src)\n                .eq_ignore_ascii_case_chars(&['t', 'o'])\n                && !following_tok.kind.is_determiner()\n            {\n                return None;\n            }\n        }\n\n        // If we don't have the next word token, don't continue if the previous token is \"to\"\n        // since \"to\" is a preposition and an infinitive marker and there's not enough context to disambiguate.\n        if toks.len() <= 4\n            && prev_tok\n                .span\n                .get_content(src)\n                .eq_ignore_ascii_case_chars(&['t', 'o'])\n        {\n            return None;\n        }\n\n        let noun_tok = &toks[2];\n        let noun_chars = noun_tok.span.get_content(src);\n        let noun_text = noun_tok.span.get_content_string(src);\n        let noun_lower = noun_text.to_lowercase();\n\n        let verb = NOUN_VERB_PAIRS\n            .iter()\n            .find(|(noun, _)| *noun == noun_lower)\n            .map(|(_, verb)| verb)?;\n\n        Some(Lint {\n            span: noun_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                verb.chars().collect(),\n                noun_chars,\n            )],\n            message: format!(\"`{noun_text}` is a noun, the verb should be `{verb}`.\"),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects nouns used instead of verbs when the two are related.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/noun_verb_confusion/noun_instead_of_verb/mod.rs",
    "content": "mod general;\n\nuse super::effect_affect::EffectAffect;\nuse crate::linting::merge_linters::merge_linters;\nuse general::GeneralNounInsteadOfVerb;\n\nmerge_linters! {\n    NounInsteadOfVerb =>\n        GeneralNounInsteadOfVerb,\n        EffectAffect\n    => \"Corrects noun/verb confusions such as `advice/advise` and handles the common `effect/affect` mix-up.\"\n}\n"
  },
  {
    "path": "harper-core/src/linting/noun_verb_confusion/verb_instead_of_noun.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Lrc, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::{UPOSSet, WordSet},\n};\nuse harper_brill::UPOS;\n\nuse super::NOUN_VERB_PAIRS;\n\npub struct VerbInsteadOfNoun {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for VerbInsteadOfNoun {\n    fn default() -> Self {\n        let verbs = Lrc::new(WordSet::new(\n            &NOUN_VERB_PAIRS\n                .iter()\n                .map(|&(_, verb)| verb)\n                .collect::<Vec<_>>(),\n        ));\n        Self {\n            expr: Box::new(\n                SequenceExpr::with(UPOSSet::new(&[UPOS::ADJ, UPOS::ADP]))\n                    .then_whitespace()\n                    .then(verbs.clone()),\n            ),\n        }\n    }\n}\n\nimpl ExprLinter for VerbInsteadOfNoun {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let adj_tok = &toks.first()?;\n        let verb_tok = &toks.last()?;\n\n        let adj_text = adj_tok.span.get_content_string(src);\n        let verb_text = verb_tok.span.get_content_string(src);\n        let verb_lower = verb_text.to_lowercase();\n\n        if adj_tok.kind.is_auxiliary_verb() || adj_tok.kind.is_upos(UPOS::AUX) {\n            return None;\n        }\n\n        let noun = NOUN_VERB_PAIRS\n            .iter()\n            .find(|(_, verb)| *verb == verb_lower)\n            .map(|(noun, _)| noun)?;\n\n        // Don't flag \"so I better advise you\", \"you'd better believe this\", \"you'd best listen to me\".\n        if adj_text == \"better\" || adj_text == \"best\" {\n            return None;\n        }\n\n        // \"Sound\" is both adjective and noun. We want to flag the common \"sound advise\"\n        // But not \"sound affect\", which is just as correct as \"sound effect\".\n        if adj_text == \"sound\" && verb_text == \"affect\" {\n            return None;\n        }\n\n        Some(Lint {\n            span: verb_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                noun.chars().collect(),\n                verb_tok.span.get_content(src),\n            )],\n            message: format!(\"`{verb_text}` is a verb, the noun should be `{noun}`.\"),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects verbs used instead of nouns when the two are related.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/number_suffix_capitalization.rs",
    "content": "use super::{Lint, LintKind, Linter, Suggestion};\nuse crate::{Document, Span, TokenKind};\nuse crate::{Number, TokenStringExt};\n\n/// Detect incorrect capitalization for number suffixes (e.g. \"2ND\").\n#[derive(Debug, Clone, Copy, Default)]\npub struct NumberSuffixCapitalization;\n\nimpl Linter for NumberSuffixCapitalization {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut output = Vec::new();\n\n        for number_tok in document.iter_numbers() {\n            if let TokenKind::Number(Number { suffix: None, .. }) = number_tok.kind {\n                continue;\n            }\n\n            let suffix_span = Span::new_with_len(number_tok.span.end, 2)\n                .pulled_by(2)\n                .unwrap();\n            let chars = document.get_span_content(&suffix_span);\n\n            if chars.iter().any(|c| !c.is_lowercase()) {\n                output.push(Lint {\n                    span: suffix_span,\n                    lint_kind: LintKind::Capitalization,\n                    message: \"This suffix should be lowercase\".to_string(),\n                    suggestions: vec![Suggestion::ReplaceWith(\n                        chars.iter().map(|c| c.to_ascii_lowercase()).collect(),\n                    )],\n                    ..Default::default()\n                })\n            }\n        }\n\n        output\n    }\n\n    fn description(&self) -> &'static str {\n        \"You should never capitalize number suffixes.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::NumberSuffixCapitalization;\n    use crate::linting::tests::assert_lint_count;\n\n    #[test]\n    fn detects_uppercase_suffix() {\n        assert_lint_count(\"2ND\", NumberSuffixCapitalization, 1);\n    }\n\n    #[test]\n    fn detects_inconsistent_suffix() {\n        assert_lint_count(\"2nD\", NumberSuffixCapitalization, 1);\n    }\n\n    #[test]\n    fn passes_correct_case() {\n        assert_lint_count(\"2nd\", NumberSuffixCapitalization, 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/obsess_preposition.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct ObsessPreposition {\n    expr: SequenceExpr,\n}\n\nimpl Default for ObsessPreposition {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"obsess\", \"obsessed\", \"obsesses\", \"obsessing\"])\n                .t_ws()\n                .then_preposition(),\n        }\n    }\n}\n\nimpl ExprLinter for ObsessPreposition {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn description(&self) -> &str {\n        \"Ensures valid prepositions are used with `obsess`\"\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let verb_idx = 0;\n        let verb_tok = toks.get(verb_idx)?;\n        let verb_span = verb_tok.span;\n        let verb_chars = verb_span.get_content(src);\n\n        let prep_idx = toks.len() - 1;\n        let prep_tok = toks.get(prep_idx)?;\n        let prep_span = prep_tok.span;\n        let prep_chars = prep_span.get_content(src);\n\n        #[derive(PartialEq)]\n        enum Conj {\n            Lemma,\n            Ed,\n            Es,\n            Ing,\n        }\n\n        let conj = if verb_chars.ends_with_ignore_ascii_case_chars(&['e', 'd']) {\n            Conj::Ed\n        } else if verb_chars.ends_with_ignore_ascii_case_chars(&['e', 's']) {\n            Conj::Es\n        } else if verb_chars.ends_with_ignore_ascii_case_chars(&['i', 'n', 'g']) {\n            Conj::Ing\n        } else {\n            Conj::Lemma\n        };\n\n        // 👍\n        // obsess* over - pay close attention to details\n        // obsessed with - excessively preoccupied with\n        // 👎\n        // obsessed of\n\n        if prep_chars.eq_ignore_ascii_case_str(\"over\") {\n            return None;\n        }\n\n        if conj == Conj::Ed && prep_chars.eq_ignore_ascii_case_str(\"with\") {\n            return None;\n        }\n\n        let ok_prep_vec: &[&str] = if conj == Conj::Ed {\n            &[\"over\", \"with\"]\n        } else {\n            &[\"over\"]\n        };\n\n        let suggestions = ok_prep_vec\n            .iter()\n            .map(|p| Suggestion::replace_with_match_case(p.chars().collect(), prep_chars))\n            .collect();\n\n        let message = if ok_prep_vec.len() == 1 {\n            format!(\"Use 'over' instead of '{}'.\", String::from_iter(prep_chars))\n        } else {\n            \"For `excessively preoccupied with` use `obsessed with`. For `paid close attention to details` use `obsessed over`\".to_string()\n        };\n\n        Some(Lint {\n            span: prep_span,\n            lint_kind: LintKind::Usage,\n            suggestions,\n            message,\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ObsessPreposition;\n    use crate::linting::tests::{assert_lint_message, assert_suggestion_result};\n\n    #[test]\n    fn fix_obsess_on() {\n        assert_suggestion_result(\n            \"Obsess on collecting good answers and you might be precise but irrelevant.\",\n            ObsessPreposition::default(),\n            \"Obsess over collecting good answers and you might be precise but irrelevant.\",\n        );\n    }\n\n    #[test]\n    fn fix_obsessing_on() {\n        assert_suggestion_result(\n            \"Obsessing on finding new solutions to old problems with AI.\",\n            ObsessPreposition::default(),\n            \"Obsessing over finding new solutions to old problems with AI.\",\n        );\n    }\n\n    #[test]\n    fn fix_obsessing_with() {\n        assert_suggestion_result(\n            \"I spent too long checking my code over and over, obsessing with just what might cause this\",\n            ObsessPreposition::default(),\n            \"I spent too long checking my code over and over, obsessing over just what might cause this\",\n        );\n    }\n\n    #[test]\n    fn fix_obsess_with() {\n        assert_suggestion_result(\n            \"And as a programmer I've been taught to obsess with that.\",\n            ObsessPreposition::default(),\n            \"And as a programmer I've been taught to obsess over that.\",\n        );\n    }\n\n    #[test]\n    fn fix_obsesses_with() {\n        assert_suggestion_result(\n            \"Every developer obsesses with micro-optimizations must be made to read it over and over again.\",\n            ObsessPreposition::default(),\n            \"Every developer obsesses over micro-optimizations must be made to read it over and over again.\",\n        );\n    }\n\n    #[test]\n    fn fix_obsessed_on() {\n        assert_suggestion_result(\n            \"Secondly, if you get obsessed on any idea, then delve in it and don't worry about anything others until you get there.\",\n            ObsessPreposition::default(),\n            \"Secondly, if you get obsessed with any idea, then delve in it and don't worry about anything others until you get there.\",\n        );\n    }\n\n    #[test]\n    fn fix_obsess_about_2743() {\n        assert_lint_message(\n            \"but don't obsess about it\",\n            ObsessPreposition::default(),\n            \"Use 'over' instead of 'about'.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/of_course.rs",
    "content": "//! Corrects common mistaken forms of \"of course\" while ignoring valid phrases like\n//! \"kind of curse\".\n\nuse crate::expr::{Expr, LongestMatchOf, OwnedExprExt, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct OfCourse {\n    expr: LongestMatchOf,\n}\n\nimpl Default for OfCourse {\n    fn default() -> Self {\n        let curse_or_corse = SequenceExpr::default()\n            .t_aco(\"of\")\n            .then_whitespace()\n            .then(WordSet::new(&[\"curse\", \"corse\"]));\n\n        let off_course_or_coarse = SequenceExpr::default()\n            .t_aco(\"off\")\n            .then_whitespace()\n            .then(WordSet::new(&[\"course\", \"coarse\"]));\n\n        let expr = curse_or_corse\n            .or_longest(off_course_or_coarse)\n            .or_longest(\n                SequenceExpr::default()\n                    .t_aco(\"o\")\n                    .then_whitespace()\n                    .t_aco(\"course\"),\n            )\n            .or_longest(WordSet::new(&[\"ofcourse\"]));\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for OfCourse {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched: &[Token], source: &[char]) -> Option<Lint> {\n        let phrase_span = matched.span()?;\n        let phrase = phrase_span.get_content_string(source);\n\n        if (phrase.eq_ignore_ascii_case(\"of curse\") || phrase.eq_ignore_ascii_case(\"of corse\"))\n            && preceding_word(source, matched.first()?.span.start)\n                .is_some_and(|prev| matches!(prev.as_str(), \"kind\" | \"sort\"))\n        {\n            return None;\n        }\n\n        if phrase.eq_ignore_ascii_case(\"off course\")\n            && preceding_non_whitespace_char(source, matched.first()?.span.start)\n                .is_some_and(|ch| ch.is_alphanumeric())\n        {\n            return None;\n        }\n\n        Some(Lint {\n            span: phrase_span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"of course\",\n                phrase_span.get_content(source),\n            )],\n            message: \"Did you mean `of course`?\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects common mistaken forms of `of course`, including `of curse`, `off course`, and `ofcourse`, while ignoring valid phrases like `kind of curse`.\"\n    }\n}\n\nfn preceding_word(source: &[char], offset: usize) -> Option<String> {\n    let prefix = source.get(..offset)?;\n    let mut i = prefix.len().checked_sub(1)?;\n\n    while prefix[i].is_whitespace() {\n        i = i.checked_sub(1)?;\n    }\n\n    let start = prefix[..=i]\n        .iter()\n        .rposition(|c| c.is_whitespace())\n        .map(|pos| pos + 1)\n        .unwrap_or(0);\n\n    Some(\n        prefix[start..=i]\n            .iter()\n            .collect::<String>()\n            .to_ascii_lowercase(),\n    )\n}\n\nfn preceding_non_whitespace_char(source: &[char], offset: usize) -> Option<char> {\n    let prefix = source.get(..offset)?;\n    prefix.iter().rev().find(|c| !c.is_whitespace()).copied()\n}\n\n#[cfg(test)]\nmod tests {\n    use super::OfCourse;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn flags_of_curse() {\n        assert_suggestion_result(\"Yes, of curse!\", OfCourse::default(), \"Yes, of course!\");\n    }\n\n    #[test]\n    fn flags_of_corse() {\n        assert_suggestion_result(\n            \"Well, of corse we can.\",\n            OfCourse::default(),\n            \"Well, of course we can.\",\n        );\n    }\n\n    #[test]\n    fn ignores_kind_of_curse() {\n        assert_lint_count(\"This kind of curse is dangerous.\", OfCourse::default(), 0);\n    }\n\n    #[test]\n    fn ignores_sort_of_curse() {\n        assert_lint_count(\"It's a sort of curse that lingers.\", OfCourse::default(), 0);\n    }\n\n    #[test]\n    fn ignores_curse_of_title() {\n        assert_lint_count(\n            \"The Curse of Strahd is a famous module.\",\n            OfCourse::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn flags_off_course() {\n        assert_suggestion_result(\n            \"Yes, off course we should do that.\",\n            OfCourse::default(),\n            \"Yes, of course we should do that.\",\n        );\n    }\n\n    #[test]\n    fn flags_o_course() {\n        assert_suggestion_result(\n            \"Yes, o course we should do that.\",\n            OfCourse::default(),\n            \"Yes, of course we should do that.\",\n        );\n    }\n\n    #[test]\n    fn flags_ofcourse() {\n        assert_suggestion_result(\n            \"Ofcourse, I like other languages.\",\n            OfCourse::default(),\n            \"Of course, I like other languages.\",\n        );\n    }\n\n    #[test]\n    fn flags_off_coarse() {\n        assert_suggestion_result(\n            \"Off coarse, the web service will still be operational.\",\n            OfCourse::default(),\n            \"Of course, the web service will still be operational.\",\n        );\n    }\n\n    #[test]\n    fn ignores_literal_off_course() {\n        assert_lint_count(\n            \"Her sailboat had been driven off course by the storm.\",\n            OfCourse::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/oldest_in_the_book.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, Repeating, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct OldestInTheBook {\n    expr: SequenceExpr,\n}\n\nimpl Default for OldestInTheBook {\n    fn default() -> Self {\n        let adj = |t: &Token, s: &[char]| {\n            let k = &t.kind;\n            (k.is_np_member() || k.is_adjective())\n                && !k.is_noun()\n                && !t\n                    .span\n                    .get_content(s)\n                    .eq_ignore_ascii_case_chars(&['i', 'n'])\n        };\n\n        // Zero or more adjectives\n        let adjseq = Repeating::new(Box::new(SequenceExpr::with(adj).t_ws()), 0);\n\n        let noun = |t: &Token, s: &[char]| {\n            let k = &t.kind;\n            (k.is_np_member() || k.is_noun() || k.is_oov())\n                && !t\n                    .span\n                    .get_content(s)\n                    .eq_ignore_ascii_case_chars(&['i', 'n'])\n        };\n\n        // One or more nouns\n        let nounseq = SequenceExpr::with(noun).then_optional(Repeating::new(\n            Box::new(SequenceExpr::default().t_ws().then(noun)),\n            1,\n        ));\n\n        let noun_phrase = SequenceExpr::optional(adjseq).then(nounseq);\n\n        Self {\n            expr: SequenceExpr::fixed_phrase(\"oldest \")\n                .then(noun_phrase)\n                .then_fixed_phrase(\" in the books\"),\n        }\n    }\n}\n\nimpl ExprLinter for OldestInTheBook {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        _ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        let np = &toks[2..toks.len() - 4];\n        let tricky = np.iter().any(|n| {\n            n.span\n                .get_content(src)\n                .eq_any_ignore_ascii_case_str(&[\"trick\", \"tricks\"])\n        });\n\n        let message = if tricky {\n            \"This idiom should use singular `book` instead of plural `books`.\"\n        } else {\n            \"If this is a play on the idiom `oldest trick in the book`, it should use singular `book` instead of plural `books`.\"\n        }\n        .to_string();\n\n        Some(Lint {\n            span: toks.last()?.span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"book\",\n                toks.last()?.span.get_content(src),\n            )],\n            message,\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects the idiom `oldest X in the books`, which should use singular `book`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::OldestInTheBook;\n    use crate::linting::tests::{assert_lint_message, assert_suggestion_result};\n\n    // Probable references to the idiom \"oldest trick in the book\"\n\n    #[test]\n    fn fix_delphi_mistake() {\n        assert_suggestion_result(\n            \"This is the oldest Delphi mistake in the books and I'm sure you've made it before (we all have), and I'm sure you recognise it when you see it.\",\n            OldestInTheBook::default(),\n            \"This is the oldest Delphi mistake in the book and I'm sure you've made it before (we all have), and I'm sure you recognise it when you see it.\",\n        );\n    }\n\n    #[test]\n    fn fix_trick() {\n        assert_suggestion_result(\n            \"... oldest trick in the books, a restart and it works all the times(for now).\",\n            OldestInTheBook::default(),\n            \"... oldest trick in the book, a restart and it works all the times(for now).\",\n        );\n    }\n\n    #[test]\n    fn fix_virus_trick() {\n        assert_suggestion_result(\n            \"Once the OS is started the MBR is typically protected for virus reasons - this is one of the oldest virus tricks in the books - goes back to ...\",\n            OldestInTheBook::default(),\n            \"Once the OS is started the MBR is typically protected for virus reasons - this is one of the oldest virus tricks in the book - goes back to ...\",\n        )\n    }\n\n    #[test]\n    fn fix_mistake() {\n        assert_suggestion_result(\n            \"Ok, I realized now that I was making the oldest mistake in the books with my code, dividing my v by 2 instead of dividing it by 5.\",\n            OldestInTheBook::default(),\n            \"Ok, I realized now that I was making the oldest mistake in the book with my code, dividing my v by 2 instead of dividing it by 5.\",\n        );\n    }\n\n    #[test]\n    fn fix_tricks() {\n        assert_suggestion_result(\n            \"He enables the oldest tricks in the books, create fear from thing like prosperity (we really don't need Foxconn?)\",\n            OldestInTheBook::default(),\n            \"He enables the oldest tricks in the book, create fear from thing like prosperity (we really don't need Foxconn?)\",\n        );\n    }\n\n    #[test]\n    fn fix_military_plays() {\n        assert_suggestion_result(\n            \"Isnt that like one of the oldest military plays in the books?\",\n            OldestInTheBook::default(),\n            \"Isnt that like one of the oldest military plays in the book?\",\n        );\n    }\n\n    // Test messages\n\n    #[test]\n    fn is_oldest_trick_in_the_books_ref_to_idom() {\n        assert_lint_message(\n            \"This is one of the oldest trick in the books\",\n            OldestInTheBook::default(),\n            \"This idiom should use singular `book` instead of plural `books`.\",\n        );\n    }\n\n    #[test]\n    fn is_chromatic_alterations_ref_to_idom() {\n        assert_lint_message(\n            \"One of the oldest chromatic alterations in the books is the raising of the leading tone\",\n            OldestInTheBook::default(),\n            \"If this is a play on the idiom `oldest trick in the book`, it should use singular `book` instead of plural `books`.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/on_floor.rs",
    "content": "use crate::CharStringExt;\nuse crate::expr::Expr;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::patterns::WordSet;\nuse crate::{\n    Lrc, Token, TokenStringExt,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct OnFloor {\n    expr: LongestMatchOf,\n}\n\nimpl Default for OnFloor {\n    fn default() -> Self {\n        let preposition = WordSet::new(&[\"in\", \"at\"]);\n\n        let on_the_floor = Lrc::new(\n            SequenceExpr::with(preposition)\n                .t_ws()\n                .t_aco(\"the\")\n                .t_ws()\n                .t_any()\n                .t_ws()\n                .t_aco(\"floor\"),\n        );\n\n        let look_up_phrase = Lrc::new(\n            SequenceExpr::word_set(&[\"look\", \"looking\", \"looks\", \"looked\"])\n                .t_ws()\n                .t_aco(\"up\"),\n        );\n\n        let stop = Lrc::new(WordSet::new(&[\"stop\", \"stopping\", \"stops\", \"stopped\"]));\n        let exceptions = Lrc::new(LongestMatchOf::new(vec![\n            Box::new(SequenceExpr::with(look_up_phrase.clone())),\n            Box::new(SequenceExpr::with(stop.clone())),\n        ]));\n\n        let pattern = LongestMatchOf::new(vec![\n            Box::new(on_the_floor.clone()),\n            Box::new(\n                SequenceExpr::with(exceptions.clone())\n                    .t_ws()\n                    .then(on_the_floor.clone()),\n            ),\n        ]);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for OnFloor {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let incorrect_preposition = matched_tokens[0..1].span()?.get_content(source).to_string();\n        // if the first token is not \"in\" or \"at\", means that the match is belong to the exceptions\n        // so we don't need to lint it\n        if ![\"in\", \"at\"].contains(&incorrect_preposition.to_lowercase().as_str()) {\n            return None;\n        }\n        let span = matched_tokens[0..1].span()?;\n\n        Some(Lint {\n            lint_kind: LintKind::WordChoice,\n            span,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"on\",\n                span.get_content(source),\n            )],\n            message: format!(\n                \"Corrects `{incorrect_preposition}` to `on` when talking about position inside a building\",\n            )\n            .to_string(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"This rule identifies incorrect uses of the prepositions `in` or `at` when referring to locations inside a building and recommends using `on the floor` instead.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::OnFloor;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn not_lint_with_correct_phrase() {\n        assert_lint_count(\n            \"I'm living on the 3rd floor of a building.\",\n            OnFloor::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn lint_with_in() {\n        assert_suggestion_result(\n            \"I'm living in the 3rd floor of a building.\",\n            OnFloor::default(),\n            \"I'm living on the 3rd floor of a building.\",\n        );\n    }\n\n    #[test]\n    fn lint_with_at() {\n        assert_suggestion_result(\n            \"I'm living at the second floor of a building.\",\n            OnFloor::default(),\n            \"I'm living on the second floor of a building.\",\n        );\n    }\n\n    #[test]\n    fn in_the_start_of_sentence() {\n        assert_suggestion_result(\n            \"In the 3rd floor of a building.\",\n            OnFloor::default(),\n            \"On the 3rd floor of a building.\",\n        );\n    }\n\n    #[test]\n    fn at_the_start_of_sentence() {\n        assert_suggestion_result(\n            \"At the second floor of a building.\",\n            OnFloor::default(),\n            \"On the second floor of a building.\",\n        );\n    }\n\n    #[test]\n    fn no_lint_with_look_up_at() {\n        assert_lint_count(\"She looked up at the third floor.\", OnFloor::default(), 0);\n    }\n\n    #[test]\n    fn no_lint_with_stop_at() {\n        assert_lint_count(\n            \"The elevator stops at the 3rd floor of a building.\",\n            OnFloor::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_with_looking_up_at() {\n        assert_lint_count(\n            \"The workers are looking up at the 3rd floor of a building.\",\n            OnFloor::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/once_or_twice.rs",
    "content": "use crate::CharStringExt;\nuse crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct OnceOrTwice {\n    expr: SequenceExpr,\n}\n\nimpl Default for OnceOrTwice {\n    fn default() -> Self {\n        let pattern = SequenceExpr::aco(\"once\")\n            .then_whitespace()\n            .t_aco(\"a\")\n            .then_whitespace()\n            .t_aco(\"twice\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for OnceOrTwice {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let article = matched_tokens.iter().find(|token| {\n            token.kind.is_word() && token.span.get_content(source).eq_ignore_ascii_case_str(\"a\")\n        })?;\n\n        let span = article.span;\n        let original = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\"or\", original)],\n            message: \"Did you mean “or”?\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects the mistaken phrase `once a twice` and suggests `once or twice`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::OnceOrTwice;\n\n    #[test]\n    fn corrects_once_a_twice() {\n        assert_suggestion_result(\n            \"He wants to do it once a twice a month.\",\n            OnceOrTwice::default(),\n            \"He wants to do it once or twice a month.\",\n        );\n    }\n\n    #[test]\n    fn allows_once_or_twice() {\n        assert_no_lints(\n            \"He wants to do it once or twice a month.\",\n            OnceOrTwice::default(),\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_sentence_start() {\n        assert_suggestion_result(\n            \"Once a twice, we gathered for coffee.\",\n            OnceOrTwice::default(),\n            \"Once or twice, we gathered for coffee.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_uppercase() {\n        assert_suggestion_result(\n            \"ONCE A TWICE WE MET.\",\n            OnceOrTwice::default(),\n            \"ONCE OR TWICE WE MET.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_mixed_case() {\n        assert_suggestion_result(\n            \"once a Twice sounds odd.\",\n            OnceOrTwice::default(),\n            \"once or Twice sounds odd.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_with_exclamation() {\n        assert_suggestion_result(\n            \"Let's do it once a twice!\",\n            OnceOrTwice::default(),\n            \"Let's do it once or twice!\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_with_question_mark() {\n        assert_suggestion_result(\n            \"You really tried once a twice?\",\n            OnceOrTwice::default(),\n            \"You really tried once or twice?\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_inside_quotes() {\n        assert_suggestion_result(\n            \"He said, \\\"once a twice\\\" without thinking.\",\n            OnceOrTwice::default(),\n            \"He said, \\\"once or twice\\\" without thinking.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_with_comma() {\n        assert_suggestion_result(\n            \"We planned it once a twice, but never finished.\",\n            OnceOrTwice::default(),\n            \"We planned it once or twice, but never finished.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_with_parentheses() {\n        assert_suggestion_result(\n            \"Try it (just once a twice) before judging.\",\n            OnceOrTwice::default(),\n            \"Try it (just once or twice) before judging.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_after_colon() {\n        assert_suggestion_result(\n            \"My answer is simple: once a twice is too many.\",\n            OnceOrTwice::default(),\n            \"My answer is simple: once or twice is too many.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_with_double_space() {\n        assert_suggestion_result(\n            \"We tested once a twice  before launch.\",\n            OnceOrTwice::default(),\n            \"We tested once or twice  before launch.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_before_semicolon() {\n        assert_suggestion_result(\n            \"They tried once a twice; it still failed.\",\n            OnceOrTwice::default(),\n            \"They tried once or twice; it still failed.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_newline_split() {\n        assert_suggestion_result(\n            \"We met once a twice\\nwhen the cafe was quiet.\",\n            OnceOrTwice::default(),\n            \"We met once or twice\\nwhen the cafe was quiet.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_with_tab() {\n        assert_suggestion_result(\n            \"Schedule it once a twice\\tfor testing.\",\n            OnceOrTwice::default(),\n            \"Schedule it once or twice\\tfor testing.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_multiple_sentences() {\n        assert_suggestion_result(\n            \"Do it once a twice. Then rest.\",\n            OnceOrTwice::default(),\n            \"Do it once or twice. Then rest.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_before_period() {\n        assert_suggestion_result(\n            \"He rehearsed once a twice.\",\n            OnceOrTwice::default(),\n            \"He rehearsed once or twice.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_with_trailing_space() {\n        assert_suggestion_result(\n            \"Practice once a twice .\",\n            OnceOrTwice::default(),\n            \"Practice once or twice .\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_before_dash() {\n        assert_suggestion_result(\n            \"He called once a twice—no response.\",\n            OnceOrTwice::default(),\n            \"He called once or twice—no response.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_around_em_dash() {\n        assert_suggestion_result(\n            \"She visits once a twice—maybe thrice.\",\n            OnceOrTwice::default(),\n            \"She visits once or twice—maybe thrice.\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_before_quote() {\n        assert_suggestion_result(\n            \"We heard once a twice, \\\"she's late.\\\"\",\n            OnceOrTwice::default(),\n            \"We heard once or twice, \\\"she's late.\\\"\",\n        );\n    }\n\n    #[test]\n    fn corrects_once_a_twice_all_caps_sentence() {\n        assert_suggestion_result(\n            \"DO IT ONCE A TWICE RIGHT NOW!\",\n            OnceOrTwice::default(),\n            \"DO IT ONCE OR TWICE RIGHT NOW!\",\n        );\n    }\n\n    #[test]\n    fn allows_once_a_time_story() {\n        assert_no_lints(\"Once a time, in a distant land...\", OnceOrTwice::default());\n    }\n\n    #[test]\n    fn allows_once_a_week_routine() {\n        assert_no_lints(\"We meet once a week to sync up.\", OnceOrTwice::default());\n    }\n\n    #[test]\n    fn allows_once_a_while_phrase() {\n        assert_no_lints(\n            \"Check in every once a while to stay updated.\",\n            OnceOrTwice::default(),\n        );\n    }\n\n    #[test]\n    fn allows_once_or_twice_uppercase() {\n        assert_no_lints(\"ONCE OR TWICE, WE MADE IT WORK.\", OnceOrTwice::default());\n    }\n\n    #[test]\n    fn allows_twice_without_once() {\n        assert_no_lints(\n            \"We only managed it twice this year.\",\n            OnceOrTwice::default(),\n        );\n    }\n\n    #[test]\n    fn allows_once_and_twice_separated() {\n        assert_no_lints(\"Once I tried; twice I failed.\", OnceOrTwice::default());\n    }\n\n    #[test]\n    fn allows_oncemisatypo() {\n        assert_no_lints(\"oncemisatypo appears once a line.\", OnceOrTwice::default());\n    }\n\n    #[test]\n    fn allows_spaced_words() {\n        assert_no_lints(\n            \"We say once at twice distance to be safe.\",\n            OnceOrTwice::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/one_and_the_same.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::FixedPhrase;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::{Lrc, Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct OneAndTheSame {\n    expr: LongestMatchOf,\n}\n\nimpl Default for OneAndTheSame {\n    fn default() -> Self {\n        let one_in_the_same = Lrc::new(FixedPhrase::from_phrase(\"one in the same\"));\n\n        Self {\n            expr: LongestMatchOf::new(vec![\n                Box::new(\n                    SequenceExpr::word_set(&[\"are\", \"were\"])\n                        .t_ws()\n                        .then(one_in_the_same.clone()),\n                ),\n                Box::new(\n                    SequenceExpr::with(one_in_the_same.clone())\n                        .t_ws()\n                        .t_aco(\"as\"),\n                ),\n            ]),\n        }\n    }\n}\n\nfn ws_word(word: &'static str) -> SequenceExpr {\n    SequenceExpr::default().t_ws().t_aco(word)\n}\n\nimpl ExprLinter for OneAndTheSame {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let phrase = if matched_tokens.last()?.span.get_content(source) == ['a', 's'] {\n            matched_tokens[0..matched_tokens.len() - 2].span()?\n        } else {\n            matched_tokens[2..].span()?\n        };\n\n        Some(Lint {\n            span: phrase,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"one and the same\".chars().collect(),\n                phrase.get_content(source),\n            )],\n            message: \"The actual idiom is with the word `and`.\".to_owned(),\n            priority: 127,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"This linter flags instances of the nonstandard phrase `one in the same`. The correct, more accepted form is `one and the same`\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::OneAndTheSame;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_after_are_atomic() {\n        assert_suggestion_result(\n            \"... are one in the same ...\",\n            OneAndTheSame::default(),\n            \"... are one and the same ...\",\n        );\n    }\n\n    #[test]\n    fn corrects_after_were_atomic() {\n        assert_suggestion_result(\n            \"... were one in the same ...\",\n            OneAndTheSame::default(),\n            \"... were one and the same ...\",\n        );\n    }\n\n    #[test]\n    fn doesnt_flag_after_other_words_atomic() {\n        assert_lint_count(\n            \"... and another one in the same place ...\",\n            OneAndTheSame::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_github_are() {\n        assert_suggestion_result(\n            \"Yes, I believe they are one in the same.\",\n            OneAndTheSame::default(),\n            \"Yes, I believe they are one and the same.\",\n        );\n    }\n\n    #[test]\n    fn corrects_github_were() {\n        assert_suggestion_result(\n            \"As prior to OpenShift 4.0, OAuth and Kubernetes REST API were one in the same, option (2) above should still work there.\",\n            OneAndTheSame::default(),\n            \"As prior to OpenShift 4.0, OAuth and Kubernetes REST API were one and the same, option (2) above should still work there.\",\n        );\n    }\n\n    #[test]\n    fn corrects_before_as_atomic() {\n        assert_suggestion_result(\n            \"... one in the same as ...\",\n            OneAndTheSame::default(),\n            \"... one and the same as ...\",\n        );\n    }\n\n    #[test]\n    fn corrects_before_as_github() {\n        assert_suggestion_result(\n            \"In our case the slicedState is one in the same as the featureState\",\n            OneAndTheSame::default(),\n            \"In our case the slicedState is one and the same as the featureState\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"needs zero-width end-of-chunk pattern akin to regex `$`\"]\n    fn corrects_at_end() {\n        assert_suggestion_result(\n            \"I think this is one in the same.\",\n            OneAndTheSame::default(),\n            \"I think this is one and the same.\",\n        );\n    }\n\n    #[test]\n    fn corrects_is_as() {\n        assert_suggestion_result(\n            \"I believe this and this issue is one in the same as Next.js uses cloudflare workers for it's edge infra.\",\n            OneAndTheSame::default(),\n            \"I believe this and this issue is one and the same as Next.js uses cloudflare workers for it's edge infra.\",\n        );\n    }\n\n    #[test]\n    fn avoids_false_positive() {\n        assert_lint_count(\n            \"If there is no postgresql.pg_hba either there is one in the same section of patroni.yaml or pg_hba.conf is not managed by Patroni.\",\n            OneAndTheSame::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"Cannot detect unexpected ungrammatical `same of`\"]\n    fn corrects_is_of() {\n        assert_suggestion_result(\n            \"R3 that Stephan Buhre noted is one-in-the-same of what I posted.\",\n            OneAndTheSame::default(),\n            \"R3 that Stephan Buhre noted is one and the same of what I posted.\",\n        );\n    }\n\n    #[test]\n    fn doesnt_flag_ambiguous_before_noun() {\n        assert_lint_count(\n            \"I'm guessing this is one in the same request.\",\n            OneAndTheSame::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/one_of_the_singular.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    spell::Dictionary,\n};\n\npub struct OneOfTheSingular<D: Dictionary + 'static> {\n    expr: SequenceExpr,\n    dict: D,\n}\n\npub trait SeqExprExt {\n    fn then_my_noun_or_adjective(self) -> Self;\n}\n\nimpl SeqExprExt for SequenceExpr {\n    fn then_my_noun_or_adjective(self) -> Self {\n        self.then(|t: &Token, s: &[char]| {\n            // We can't restrict to singular nouns because it will match and then flag the part of a phrase\n            // leading up to but not including a plural noun, even when that plural noun is the result of\n            // this linter having corrected a mistake.\n            // eg. \"one of the train station\" -> \"one of the train stations\" will now match on \"one of the train\".\n            (t.kind.is_non_possessive_noun() || t.kind.is_adjective())\n                && !t.kind.is_preposition() // \"in\" etc.\n                && !t.kind.is_pronoun() // \"who\" etc.\n                && !t\n                    .span\n                    .get_content(s)\n                    .eq_any_ignore_ascii_case_str(&[\"ah\", \"few\", \"first\", \"said\", \"uh\"])\n        })\n    }\n}\n\nimpl<D: Dictionary + 'static> OneOfTheSingular<D> {\n    pub fn new(dict: D) -> Self {\n        let advs =\n            SequenceExpr::default().then_zero_or_more_spaced(SequenceExpr::default().then_adverb());\n\n        let adj_or_nouns = SequenceExpr::default()\n            .then_zero_or_more_spaced(SequenceExpr::default().then_my_noun_or_adjective());\n\n        Self {\n            expr: SequenceExpr::fixed_phrase(\"one of the \")\n                .then(SequenceExpr::optional(advs.t_ws()).then(adj_or_nouns)),\n            dict,\n        }\n    }\n}\n\nimpl<D: Dictionary + 'static> ExprLinter for OneOfTheSingular<D> {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects 'one of the [singular]' to 'one of the [plural]'\"\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        let nountok = toks.last()?;\n        // It's only a mistake if the noun phrase ends with a singular noun.\n        if !nountok.kind.is_singular_noun()\n        // \"Being\" in eg. one of the most widely used being the bi-directional inference algorithm.\n        || nountok.kind.is_verb_progressive_form()\n        {\n            return None;\n        }\n        // If any token is a singular noun that's not also a plural noun, don't continue.\n        if toks\n            .iter()\n            .any(|t| t.kind.is_plural_noun() && !t.kind.is_singular_noun())\n        {\n            return None;\n        }\n        // But if not if it's part of a hyphenated compound.\n        if let Some(next) = ctx?.1.first()\n            && (next.kind.is_hyphen() || next.kind.is_comma())\n        {\n            return None;\n        }\n        let nounspan = nountok.span;\n        let singular = nounspan.get_content(src);\n        let mut plural_s = singular.to_vec();\n        let mut plural_es = singular.to_vec();\n        plural_s.push('s');\n        plural_es.extend(['e', 's']);\n\n        let mut suggestions = vec![];\n\n        if self\n            .dict\n            .get_word_metadata(&plural_s)\n            .is_some_and(|m| m.is_plural_noun())\n        {\n            suggestions.push(Suggestion::replace_with_match_case(plural_s, singular));\n        }\n        if self\n            .dict\n            .get_word_metadata(&plural_es)\n            .is_some_and(|m| m.is_plural_noun())\n        {\n            suggestions.push(Suggestion::replace_with_match_case(plural_es, singular));\n        }\n\n        if singular.ends_with_ignore_ascii_case_chars(&['y']) {\n            // Handle words ending in 'y' -> 'ies' (e.g., \"city\" -> \"cities\")\n            let mut plural_ies = singular[..singular.len() - 1].to_vec();\n            plural_ies.extend(['i', 'e', 's']);\n            if self\n                .dict\n                .get_word_metadata(&plural_ies)\n                .is_some_and(|m| m.is_plural_noun())\n            {\n                suggestions.push(Suggestion::replace_with_match_case(plural_ies, singular));\n            }\n        }\n\n        if singular.ends_with_ignore_ascii_case_chars(&['f', 'e']) {\n            // Handle words ending in 'fe' -> 'ves' (e.g., \"wife\" -> \"wives\")\n            let mut plural_ves = singular[..singular.len() - 2].to_vec();\n            plural_ves.extend(['v', 'e', 's']);\n            if self\n                .dict\n                .get_word_metadata(&plural_ves)\n                .is_some_and(|m| m.is_plural_noun())\n            {\n                suggestions.push(Suggestion::replace_with_match_case(plural_ves, singular));\n            }\n        }\n\n        Some(Lint {\n            span: nounspan,\n            lint_kind: LintKind::Usage,\n            suggestions,\n            message: \"The construction `one of the ...` should use a plural noun.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::OneOfTheSingular;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n    use crate::spell::FstDictionary;\n\n    #[test]\n    fn fix_one_of_the_noun() {\n        assert_suggestion_result(\n            \"one of the noun\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"one of the nouns\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_noun_noun() {\n        assert_suggestion_result(\n            \"one of the car park\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"one of the car parks\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_adj_noun() {\n        assert_suggestion_result(\n            \"one of the best noun\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"one of the best nouns\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_adv_adv_adj_adj_noun_noun() {\n        assert_suggestion_result(\n            \"one of the really incredibly big red rubber ball\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"one of the really incredibly big red rubber balls\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_best_tutorial() {\n        assert_suggestion_result(\n            \"Bro casually dropped one of the best graphics tutorial I've ever seen and thought we wouldn't notice\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"Bro casually dropped one of the best graphics tutorials I've ever seen and thought we wouldn't notice\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_neat_trick() {\n        assert_suggestion_result(\n            \"One of the neat trick with AVX-512 is that given a mask\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"One of the neat tricks with AVX-512 is that given a mask\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_latest_version() {\n        assert_suggestion_result(\n            \"Footer line shown since one of the latest version\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"Footer line shown since one of the latest versions\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_node() {\n        assert_suggestion_result(\n            \"... noticed occasional production issue when one of the node loses connection\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"... noticed occasional production issue when one of the nodes loses connection\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_unstaged_file() {\n        assert_suggestion_result(\n            \"Sublime Merge hangs if one of the unstaged file is a pretty ...\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"Sublime Merge hangs if one of the unstaged files is a pretty ...\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_tedious_things() {\n        assert_suggestion_result(\n            \"One of the tedious thing in Stack Overflow is to grab example data provided by users\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"One of the tedious things in Stack Overflow is to grab example data provided by users\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_brave_process() {\n        assert_suggestion_result(\n            \"One of the Brave Process is consuming almost 170%\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"One of the Brave Processes is consuming almost 170%\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_most_cumbersome_thing() {\n        assert_suggestion_result(\n            \"One of the most cumbersome thing to create in markdown is a table.\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"One of the most cumbersome things to create in markdown is a table.\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_test() {\n        assert_suggestion_result(\n            \"Not passing one of the test\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"Not passing one of the tests\",\n        );\n    }\n\n    #[test]\n    fn fix_one_of_the_process_main_thread() {\n        assert_suggestion_result(\n            \"And those threads life cycle is very long, sometimes, it will be one of the process main thread\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n            \"And those threads life cycle is very long, sometimes, it will be one of the process main threads\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_being() {\n        assert_no_lints(\n            \"HMMs underlie the functioning of stochastic taggers and are used in various algorithms one of the most widely used being the bi-directional inference algorithm.\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_one_of_the_rabbits_gloves() {\n        assert_no_lints(\n            \"As she said this she looked down at her hands, and was surprised to see that she had put on one of the Rabbit’s little white kid gloves while she was talking.\",\n            OneOfTheSingular::new(FstDictionary::curated()),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/open_compounds.rs",
    "content": "use crate::expr::{Expr, LongestMatchOf, SequenceExpr};\nuse crate::{Lrc, Token, patterns::WordSet};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\nuse hashbrown::HashMap;\n\npub struct OpenCompounds {\n    expr: LongestMatchOf,\n    compound_to_phrase: HashMap<String, String>,\n}\n\nimpl Default for OpenCompounds {\n    fn default() -> Self {\n        let phrases = [\n            \"a few\",\n            \"a lot\",\n            \"as well\",\n            \"at all\",\n            \"at least\",\n            \"each other\",\n            \"in case\",\n            \"in fact\",\n            \"in front\",\n            \"up to\",\n        ];\n        let mut compound_to_phrase = HashMap::new();\n        for phrase in phrases {\n            compound_to_phrase.insert(\n                phrase\n                    .split_whitespace()\n                    .map(|s| s.to_lowercase())\n                    .collect::<String>(),\n                phrase.to_string(),\n            );\n        }\n\n        let mut compound_wordset = WordSet::default();\n        for compound in compound_to_phrase.keys().cloned().collect::<Vec<_>>() {\n            compound_wordset.add(&compound);\n        }\n        let compound = Lrc::new(SequenceExpr::with(compound_wordset));\n\n        let with_prev = SequenceExpr::anything().then(compound.clone());\n\n        let with_next = SequenceExpr::with(compound.clone()).then_anything();\n\n        let with_prev_and_next = SequenceExpr::anything()\n            .then(compound.clone())\n            .then_anything();\n\n        Self {\n            expr: LongestMatchOf::new(vec![\n                Box::new(with_prev_and_next),\n                Box::new(with_prev),\n                Box::new(with_next),\n                Box::new(compound),\n            ]),\n            compound_to_phrase,\n        }\n    }\n}\n\nimpl ExprLinter for OpenCompounds {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_toks: &[Token], source_chars: &[char]) -> Option<Lint> {\n        // Because we don't have anything like regex captures we need to find which token matched which compound\n        let index = self\n            .compound_to_phrase\n            .keys()\n            .find_map(|compound| get_compound_idx(matched_toks, source_chars, compound))?;\n\n        let span = matched_toks[index].span;\n        let compound_string = span.get_content(source_chars).iter().collect::<String>();\n\n        // Ignore if there's a hyphen immediately on either side\n        if (0..matched_toks.len())\n            .filter(|&i| i != index)\n            .any(|i| matched_toks[i].kind.is_hyphen())\n        {\n            return None;\n        }\n\n        // Ignore trademarks etc. like InFront, inFront\n        let phrase = self\n            .compound_to_phrase\n            .get(&compound_string.to_lowercase())?;\n        if compound_string\n            .chars()\n            .nth(phrase.find(' ')?)?\n            .is_uppercase()\n        {\n            return None;\n        }\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::BoundaryError,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                phrase.chars().collect(),\n                span.get_content(source_chars),\n            )],\n            message: format!(\"`{phrase}` should be written as two words.\"),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects compound words that should be written as two words.\"\n    }\n}\n\nfn get_compound_idx(toks: &[Token], src: &[char], compound: &str) -> Option<usize> {\n    let len = compound.len();\n    let tok_count = toks.len();\n\n    match tok_count {\n        1 => Some(0),\n        3 => Some(1),\n        2 => {\n            let [tok0, tok1] = toks else { return None };\n            let [len0, len1] = [tok0.span.len(), tok1.span.len()];\n\n            if len0 == len && len1 != len {\n                Some(0)\n            } else if len1 == len && len0 != len {\n                Some(1)\n            } else if tok0.kind.is_word() && !tok1.kind.is_word() {\n                Some(0)\n            } else if !tok0.kind.is_word() && tok1.kind.is_word() {\n                Some(1)\n            } else {\n                Some(\n                    !tok0\n                        .span\n                        .get_content(src)\n                        .iter()\n                        .collect::<String>()\n                        .eq_ignore_ascii_case(compound) as usize,\n                )\n            }\n        }\n        _ => None,\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::OpenCompounds;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    // In front\n\n    #[test]\n    fn corrects_lone_infront() {\n        assert_suggestion_result(\n            \"Button always overlaps (infront) of other views.\",\n            OpenCompounds::default(),\n            \"Button always overlaps (in front) of other views.\",\n        );\n    }\n\n    #[test]\n    fn corrects_infront() {\n        assert_suggestion_result(\n            \"So if i have no variable or a running process id/name which indicates that liveley is infront/fullscreen i can't do anything further via batch and must wait ...\",\n            OpenCompounds::default(),\n            \"So if i have no variable or a running process id/name which indicates that liveley is in front/fullscreen i can't do anything further via batch and must wait ...\",\n        );\n    }\n\n    #[test]\n    fn ignores_pascalcase() {\n        assert_lint_count(\n            \"InFront Labs, LLC has 16 repositories available. Follow their code on GitHub.\",\n            OpenCompounds::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_camelcase() {\n        assert_lint_count(\n            \"Click the \\\"toggle\\\" button to see how wrapping changes when an inFront is added to a letter in a word.\",\n            OpenCompounds::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn correct_with_period_after() {\n        assert_suggestion_result(\n            \"Car with a reversed ramp infront.\",\n            OpenCompounds::default(),\n            \"Car with a reversed ramp in front.\",\n        );\n    }\n\n    #[test]\n    fn ignore_hyphen_before() {\n        assert_lint_count(\"-infront\", OpenCompounds::default(), 0);\n    }\n\n    #[test]\n    fn ignore_hyphen_after() {\n        assert_lint_count(\"infront-\", OpenCompounds::default(), 0);\n    }\n\n    #[test]\n    fn ignores_with_hyphen_before() {\n        assert_lint_count(\n            \"Instantly share code, notes, and snippets. @yossi-infront\",\n            OpenCompounds::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_with_hyphen_after() {\n        assert_lint_count(\n            \"infront-cycle.ipe · infront-cycle.ipe · infront-cycle.svg · infront-cycle.svg · infront-s1s2.ipe · infront-s1s2.ipe · infront-s1s2.svg · infront-s1s2.svg.\",\n            OpenCompounds::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn even_repeated_infront_works() {\n        assert_suggestion_result(\n            \"infront infront\",\n            OpenCompounds::default(),\n            \"in front in front\",\n        );\n    }\n\n    // A few\n\n    #[test]\n    fn correct_afew_atomic() {\n        assert_suggestion_result(\n            \"ITK code to generate anisotropic metrics, mostly Riemannian metrics and afew particular cases of Finslerian metrics.\",\n            OpenCompounds::default(),\n            \"ITK code to generate anisotropic metrics, mostly Riemannian metrics and a few particular cases of Finslerian metrics.\",\n        );\n    }\n\n    // A lot\n\n    #[test]\n    fn correct_alot_atomic() {\n        assert_suggestion_result(\"Alot\", OpenCompounds::default(), \"A lot\");\n    }\n\n    // As well\n\n    #[test]\n    fn correct_aswell_atomic() {\n        assert_suggestion_result(\"Aswell\", OpenCompounds::default(), \"As well\");\n    }\n\n    #[test]\n    fn corrects_as_keyboards_aswell() {\n        assert_suggestion_result(\n            \"Tool to read physical joystick devices, keyboards aswell, and create virtual joystick devices and output keyboard presses on a Linux system.\",\n            OpenCompounds::default(),\n            \"Tool to read physical joystick devices, keyboards as well, and create virtual joystick devices and output keyboard presses on a Linux system.\",\n        );\n    }\n\n    #[test]\n    fn corrects_aswell_as() {\n        assert_suggestion_result(\n            \"When UseAcrylic is true in Focused aswell as Unfocused Apearance , changing enableUnfocusedAcrylic at runtime doesn't work\",\n            OpenCompounds::default(),\n            \"When UseAcrylic is true in Focused as well as Unfocused Apearance , changing enableUnfocusedAcrylic at runtime doesn't work\",\n        );\n    }\n\n    #[test]\n    fn corrects_toml_aswell() {\n        assert_suggestion_result(\n            \"format Cargo.toml aswell #5893 - rust-lang/rustfmt\",\n            OpenCompounds::default(),\n            \"format Cargo.toml as well #5893 - rust-lang/rustfmt\",\n        );\n    }\n\n    #[test]\n    fn correct_aswell() {\n        assert_suggestion_result(\n            \"'wejoy' is a tool to read physical joystick devices, aswell as keyboards, create virtual joystick devices and output keyboard presses on a Linux system.\",\n            OpenCompounds::default(),\n            \"'wejoy' is a tool to read physical joystick devices, as well as keyboards, create virtual joystick devices and output keyboard presses on a Linux system.\",\n        );\n    }\n\n    // At all\n\n    #[test]\n    fn correct_atall() {\n        assert_suggestion_result(\n            \"claude code with vs code extension not working atall\",\n            OpenCompounds::default(),\n            \"claude code with vs code extension not working at all\",\n        );\n    }\n\n    // At least\n\n    #[test]\n    fn correct_atleast_atomic() {\n        assert_suggestion_result(\"Atleast\", OpenCompounds::default(), \"At least\");\n    }\n\n    #[test]\n    fn ignore_atleast_pascalcase() {\n        assert_lint_count(\n            \"I want to understand if we are using AtLeast correctly.\",\n            OpenCompounds::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignore_atleast_camelcase() {\n        assert_lint_count(\n            \"verfiy with atLeast = 0 should pass even if the mocked function is never called.\",\n            OpenCompounds::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn correct_atleast() {\n        assert_suggestion_result(\n            \"Mar 22, 2562 BE — constructor - expected atleast one input #250.\",\n            OpenCompounds::default(),\n            \"Mar 22, 2562 BE — constructor - expected at least one input #250.\",\n        );\n    }\n\n    // Each other\n\n    #[test]\n    fn correct_eachother_atomic() {\n        assert_suggestion_result(\"Eachother\", OpenCompounds::default(), \"Each other\");\n    }\n\n    #[test]\n    fn correct_eachother() {\n        assert_suggestion_result(\n            \"Script parsing fails when two scenes reference eachother\",\n            OpenCompounds::default(),\n            \"Script parsing fails when two scenes reference each other\",\n        );\n    }\n\n    // In case\n\n    #[test]\n    fn correct_incase_atomic() {\n        assert_suggestion_result(\"Incase\", OpenCompounds::default(), \"In case\");\n    }\n\n    #[test]\n    fn correct_in_case() {\n        assert_suggestion_result(\n            \"Support for enum variable incase of reusable enum class\",\n            OpenCompounds::default(),\n            \"Support for enum variable in case of reusable enum class\",\n        );\n    }\n\n    #[test]\n    fn ignore_incase_pascalcase() {\n        assert_lint_count(\n            \"InCase save your secrets for a friend, so they can use in case it in case you went \\\"missing\\\".\",\n            OpenCompounds::default(),\n            0,\n        );\n    }\n\n    // In fact\n\n    #[test]\n    fn correct_infact_atomic() {\n        assert_suggestion_result(\n            \"Yes I do infact exist :O\",\n            OpenCompounds::default(),\n            \"Yes I do in fact exist :O\",\n        );\n    }\n\n    // up to\n\n    #[test]\n    fn correct_upto() {\n        assert_suggestion_result(\n            \"Free for upto 10k subscribers, unlimited push notifications, in-browser messaging\",\n            OpenCompounds::default(),\n            \"Free for up to 10k subscribers, unlimited push notifications, in-browser messaging\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/open_the_light.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::{\n    Lrc, Token, TokenStringExt,\n    linting::{LintKind, Suggestion},\n};\n\nuse super::{ExprLinter, Lint};\nuse crate::linting::expr_linter::Chunk;\n\npub struct OpenTheLight {\n    expr: LongestMatchOf,\n}\n\nimpl Default for OpenTheLight {\n    fn default() -> Self {\n        const TO_OPEN: &[&str] = &[\"open\", \"opens\", \"opened\", \"opening\"];\n        const DEVICES: &[&str] = &[\n            \"air conditioner\",\n            \"air conditioning\",\n            \"aircon\",\n            \"cellphone\",\n            \"fan\",\n            \"handphone\",\n            \"heater\",\n            \"heating\",\n            \"lamp\",\n            \"light\",\n            \"lights\",\n            \"radio\",\n            \"telephone\",\n            \"television\",\n            \"TV\",\n        ];\n\n        let open_the_device = Lrc::new(\n            SequenceExpr::word_set(TO_OPEN)\n                .t_ws()\n                .then_determiner()\n                .t_ws()\n                .then_word_set(DEVICES),\n        );\n\n        let open_the_device_then_noun = SequenceExpr::with(open_the_device.clone())\n            .t_ws()\n            .then_noun();\n\n        let expr = LongestMatchOf::new(vec![\n            Box::new(open_the_device),\n            Box::new(open_the_device_then_noun),\n        ]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for OpenTheLight {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        // If I try to do this in the Pattern, the shorter pattern matches, without the context token.\n        if toks.len() == 7 {\n            let (device_tok, context_tok) = (toks.get_rel(-3)?, toks.get_rel(-1)?);\n            // The device word is part of compound noun if it's singular and followed by another noun\n            if !device_tok.kind.is_plural_noun() || !context_tok.kind.is_noun() {\n                return None;\n            }\n        }\n\n        const ING: &[char] = &['i', 'n', 'g'];\n        const ED: &[char] = &['e', 'd'];\n        const ES: &[char] = &['e', 's'];\n        const LEMMA: &[char] = &[];\n\n        let verb: &[char] = toks.first()?.span.get_content(src);\n\n        let (e, n, d) = (\n            verb[verb.len() - 3],\n            verb[verb.len() - 2],\n            verb[verb.len() - 1],\n        );\n\n        let (turn_ending, switch_ending) = match (e, n, d) {\n            ('i', 'n', 'g') => (ING, ING),\n            (_, 'e', 'd') => (ED, ED),\n            (_, _, 's') => (&ES[1..], ES),\n            _ => (LEMMA, LEMMA),\n        };\n\n        let mut turn_end_on: [char; 7 + 3] =\n            ['t', 'u', 'r', 'n', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0'];\n        let mut switch_end_on: [char; 9 + 3] = [\n            's', 'w', 'i', 't', 'c', 'h', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0',\n        ];\n\n        // paste in the inflected ending\n        turn_end_on[4..4 + turn_ending.len()].copy_from_slice(turn_ending);\n        switch_end_on[6..6 + switch_ending.len()].copy_from_slice(switch_ending);\n\n        turn_end_on[4 + turn_ending.len()..4 + turn_ending.len() + 3]\n            .copy_from_slice(&[' ', 'o', 'n']);\n        switch_end_on[6 + switch_ending.len()..6 + switch_ending.len() + 3]\n            .copy_from_slice(&[' ', 'o', 'n']);\n\n        let turn = &turn_end_on[..4 + turn_ending.len() + 3];\n        let switch = &switch_end_on[..6 + switch_ending.len() + 3];\n\n        Some(Lint {\n            span: toks.first()?.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![\n                Suggestion::replace_with_match_case(turn.to_vec(), toks.span()?.get_content(src)),\n                Suggestion::replace_with_match_case(switch.to_vec(), toks.span()?.get_content(src)),\n            ],\n            message: \"Are you accessing the device's internals or `turning` it `on`?\".to_owned(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects using `open` instead of `turn on` or `switch on`\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::OpenTheLight;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    // made-up unit tests\n\n    #[test]\n    fn fix_open_the_tv() {\n        assert_suggestion_result(\"open the TV\", OpenTheLight::default(), \"turn on the TV\");\n    }\n\n    #[test]\n    fn fix_he_opens_the_tv() {\n        assert_suggestion_result(\n            \"he opens the TV\",\n            OpenTheLight::default(),\n            \"he turns on the TV\",\n        );\n    }\n\n    #[test]\n    fn fix_she_opened_the_tv() {\n        assert_suggestion_result(\n            \"she opened the TV\",\n            OpenTheLight::default(),\n            \"she turned on the TV\",\n        );\n    }\n\n    #[test]\n    fn opening_the_tv() {\n        assert_suggestion_result(\n            \"opening the TV\",\n            OpenTheLight::default(),\n            \"turning on the TV\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_open_the_tv_app() {\n        assert_lint_count(\"open the TV app\", OpenTheLight::default(), 0);\n    }\n\n    #[test]\n    fn fix_open_the_tv_to_watch_the_news() {\n        assert_suggestion_result(\n            \"open the TV to watch the news\",\n            OpenTheLight::default(),\n            \"turn on the TV to watch the news\",\n        );\n    }\n\n    #[test]\n    fn fix_dont_forget_to_open_the_lights() {\n        assert_suggestion_result(\n            \"Don't forget to open the lights when you enter the room.\",\n            OpenTheLight::default(),\n            \"Don't forget to turn on the lights when you enter the room.\",\n        );\n    }\n\n    #[test]\n    fn fix_can_you_open_the_fan() {\n        assert_suggestion_result(\n            \"Can you open the fan? It's quite stuffy.\",\n            OpenTheLight::default(),\n            \"Can you turn on the fan? It's quite stuffy.\",\n        );\n    }\n\n    #[test]\n    fn fix_opened_the_radio() {\n        assert_suggestion_result(\n            \"I opened the radio to listen to the morning show.\",\n            OpenTheLight::default(),\n            \"I turned on the radio to listen to the morning show.\",\n        );\n    }\n\n    #[test]\n    fn fix_open_the_aircon() {\n        assert_suggestion_result(\n            \"Can you open the aircon? It's hot.\",\n            OpenTheLight::default(),\n            \"Can you turn on the aircon? It's hot.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_open_the_tv_mode() {\n        assert_lint_count(\"open the TV mode\", OpenTheLight::default(), 0);\n    }\n\n    // real world examples\n\n    #[test]\n    fn dont_flag_radio_configuration() {\n        assert_lint_count(\n            \"To open the Radio Configuration click on the three dots on the top right side.\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"Requires much more complex context parsing\"]\n    fn dont_flag_open_the_lamp() {\n        assert_lint_count(\n            \"Now you will need to open your lamp and solder everything together according to schematics.\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_open_tv_up_to() {\n        assert_lint_count(\n            \"it opens the TV up to a massive library of software\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"Requires more complex context parsing\"]\n    fn dont_flag_open_the_light_slash_sound() {\n        assert_lint_count(\n            \"To do so, open the light/sound configuration.\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"Not common enough\"]\n    fn dont_flag_cutting_open() {\n        assert_lint_count(\n            \"However, instead of cutting open the lights, I opted to 3D print the Minecraft Torch Nightlight\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_open_the_light_source() {\n        assert_lint_count(\n            \"open the light source light and regulate it to the suitable luminance\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"Requires more complex context parsing\"]\n    fn dont_flag_opening_lamp() {\n        assert_lint_count(\n            \"After opening the lamp, you need to solder 4 wires to the board in order to connect the USB-to-Serial adapter.\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_fan_control() {\n        assert_lint_count(\n            \"It seems like it opens the fan control? \",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"Requires more complex context parsing\"]\n    fn dont_flag_open_tv_to_access_eeprom() {\n        assert_lint_count(\n            \"Involves opening your TV and directly accessing the an EEPROM IC.\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_open_tv_viewing_application() {\n        assert_lint_count(\n            \"Open your TV viewing application or platform.\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"Requires more complex context parsing\"]\n    fn dont_flag_open_as_noun() {\n        assert_lint_count(\n            \"when we press open the lamp will be on\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"Requires more complex context parsing\"]\n    fn dont_flag_opening_as_noun() {\n        assert_lint_count(\n            \"and through that opening the light was streaming in\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_opening_fan() {\n        assert_suggestion_result(\n            \"If the CO2 passed a set point, it would open the fan, and close it once CO2 dropped enough.\",\n            OpenTheLight::default(),\n            \"If the CO2 passed a set point, it would turn on the fan, and close it once CO2 dropped enough.\",\n        );\n    }\n\n    #[test]\n    fn fix_opening_tv() {\n        assert_suggestion_result(\n            \"This was to prevent me from falling back into the temptation of opening the TV and breaking up the rule I wanted to implement.\",\n            OpenTheLight::default(),\n            \"This was to prevent me from falling back into the temptation of turning on the TV and breaking up the rule I wanted to implement.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"We don't yet handle hyphenated words\"]\n    fn dont_flag_opens_fan_like() {\n        assert_lint_count(\n            \"Out by the garden fence the high ice plant opens its fan-like petals to the sun.\",\n            OpenTheLight::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_opening_lights() {\n        assert_suggestion_result(\n            \"Steering wheel remains blocked until I open my lights.\",\n            OpenTheLight::default(),\n            \"Steering wheel remains blocked until I turn on my lights.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/orthographic_consistency.rs",
    "content": "use std::sync::Arc;\n\nuse crate::{\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion, expr_linter::Chunk},\n    spell::{Dictionary, FstDictionary},\n    {OrthFlags, Token},\n};\n\npub struct OrthographicConsistency {\n    dict: Arc<FstDictionary>,\n    expr: SequenceExpr,\n}\n\nimpl OrthographicConsistency {\n    pub fn new() -> Self {\n        Self {\n            dict: FstDictionary::curated(),\n            expr: SequenceExpr::any_word(),\n        }\n    }\n}\n\nimpl Default for OrthographicConsistency {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl ExprLinter for OrthographicConsistency {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Ensures word casing matches the dictionary's canonical orthography.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        matched_tokens: &[Token],\n        source: &[char],\n        context: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        if let Some((pre, post)) = context {\n            if let Some(pre_tok) = pre.last()\n                && pre_tok.kind.is_hyphen()\n            {\n                return None;\n            }\n\n            if let Some(post_tok) = post.first()\n                && post_tok.kind.is_hyphen()\n            {\n                return None;\n            }\n        }\n\n        let word = &matched_tokens[0];\n\n        let Some(Some(metadata)) = word.kind.as_word() else {\n            return None;\n        };\n\n        let chars = word.span.get_content(source);\n\n        let cur_flags = OrthFlags::from_letters(chars);\n\n        if metadata.is_allcaps()\n            && !metadata.is_lowercase()\n            && !metadata.is_upper_camel()\n            && !cur_flags.contains(OrthFlags::ALLCAPS)\n        {\n            return Some(Lint {\n                span: word.span,\n                lint_kind: LintKind::Capitalization,\n                suggestions: vec![Suggestion::ReplaceWith(\n                    chars.iter().map(|c| c.to_ascii_uppercase()).collect(),\n                )],\n                message: \"This word's canonical spelling is all-caps.\".to_owned(),\n                priority: 127,\n            });\n        }\n\n        let canonical_flags = metadata.orth_info;\n        let flags_to_check = [\n            OrthFlags::LOWER_CAMEL,\n            OrthFlags::UPPER_CAMEL,\n            OrthFlags::APOSTROPHE,\n            OrthFlags::HYPHENATED,\n        ];\n\n        if flags_to_check\n            .into_iter()\n            .filter(|flag| canonical_flags.contains(*flag) != cur_flags.contains(*flag))\n            .count()\n            == 1\n            && let Some(canonical) = self.dict.get_correct_capitalization_of(chars)\n            && alphabetic_differs(canonical, chars)\n        {\n            return Some(Lint {\n                span: word.span,\n                lint_kind: LintKind::Capitalization,\n                suggestions: vec![Suggestion::ReplaceWith(canonical.to_vec())],\n                message: format!(\n                    \"The canonical dictionary spelling is `{}`.\",\n                    canonical.iter().collect::<String>()\n                ),\n                priority: 31,\n            });\n        }\n\n        if metadata.is_titlecase()\n            && cur_flags.contains(OrthFlags::LOWERCASE)\n            && let Some(canonical) = self.dict.get_correct_capitalization_of(chars)\n            && alphabetic_differs(canonical, chars)\n        {\n            return Some(Lint {\n                span: word.span,\n                lint_kind: LintKind::Capitalization,\n                suggestions: vec![Suggestion::ReplaceWith(canonical.to_vec())],\n                message: format!(\n                    \"The canonical dictionary spelling is title case: `{}`.\",\n                    canonical.iter().collect::<String>()\n                ),\n                priority: 127,\n            });\n        }\n\n        None\n    }\n}\n\n/// Check if the alphabetic characters in the string differ from one another.\n/// Ignores non-alphabetic characters.\nfn alphabetic_differs(a: &[char], b: &[char]) -> bool {\n    a.iter()\n        .zip(b.iter())\n        .any(|(a, b)| a.is_alphabetic() && b.is_alphabetic() && a != b)\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::OrthographicConsistency;\n\n    #[test]\n    fn nasa_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Nasa is a governmental institution.\",\n            OrthographicConsistency::default(),\n            \"NASA is a governmental institution.\",\n        );\n    }\n\n    #[test]\n    fn ikea_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Ikea operates a vast retail network.\",\n            OrthographicConsistency::default(),\n            \"IKEA operates a vast retail network.\",\n        );\n    }\n\n    #[test]\n    fn lego_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Lego bricks encourage creativity.\",\n            OrthographicConsistency::default(),\n            \"LEGO bricks encourage creativity.\",\n        );\n    }\n\n    #[test]\n    fn nato_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Nato is a military alliance.\",\n            OrthographicConsistency::default(),\n            \"NATO is a military alliance.\",\n        );\n    }\n\n    #[test]\n    fn fbi_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Fbi investigates federal crimes.\",\n            OrthographicConsistency::default(),\n            \"FBI investigates federal crimes.\",\n        );\n    }\n\n    #[test]\n    fn cia_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Cia gathers intelligence.\",\n            OrthographicConsistency::default(),\n            \"CIA gathers intelligence.\",\n        );\n    }\n\n    #[test]\n    fn hiv_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Hiv is a virus.\",\n            OrthographicConsistency::default(),\n            \"HIV is a virus.\",\n        );\n    }\n\n    #[test]\n    fn dna_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Dna carries genetic information.\",\n            OrthographicConsistency::default(),\n            \"DNA carries genetic information.\",\n        );\n    }\n\n    #[test]\n    fn rna_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Rna participates in protein synthesis.\",\n            OrthographicConsistency::default(),\n            \"RNA participates in protein synthesis.\",\n        );\n    }\n\n    #[test]\n    fn cpu_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Cpu executes instructions.\",\n            OrthographicConsistency::default(),\n            \"CPU executes instructions.\",\n        );\n    }\n\n    #[test]\n    fn gpu_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Gpu accelerates graphics.\",\n            OrthographicConsistency::default(),\n            \"GPU accelerates graphics.\",\n        );\n    }\n\n    #[test]\n    fn html_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Html structures web documents.\",\n            OrthographicConsistency::default(),\n            \"HTML structures web documents.\",\n        );\n    }\n\n    #[test]\n    fn url_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Url identifies a resource.\",\n            OrthographicConsistency::default(),\n            \"URL identifies a resource.\",\n        );\n    }\n\n    #[test]\n    fn faq_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Faq answers common questions.\",\n            OrthographicConsistency::default(),\n            \"FAQ answers common questions.\",\n        );\n    }\n\n    #[test]\n    fn linkedin_should_use_canonical_case() {\n        assert_suggestion_result(\n            \"I updated my linkedin profile yesterday.\",\n            OrthographicConsistency::default(),\n            \"I updated my LinkedIn profile yesterday.\",\n        );\n    }\n\n    #[test]\n    fn wordpress_should_use_canonical_case() {\n        assert_suggestion_result(\n            \"She writes daily on her wordpress blog.\",\n            OrthographicConsistency::default(),\n            \"She writes daily on her WordPress blog.\",\n        );\n    }\n\n    #[test]\n    fn pdf_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Pdf preserves formatting.\",\n            OrthographicConsistency::default(),\n            \"PDF preserves formatting.\",\n        );\n    }\n\n    #[test]\n    fn ceo_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Our Ceo approved the budget.\",\n            OrthographicConsistency::default(),\n            \"Our CEO approved the budget.\",\n        );\n    }\n\n    #[test]\n    fn cfo_should_be_all_caps() {\n        assert_suggestion_result(\n            \"The Cfo presented the report.\",\n            OrthographicConsistency::default(),\n            \"The CFO presented the report.\",\n        );\n    }\n\n    #[test]\n    fn hr_should_be_all_caps() {\n        assert_suggestion_result(\n            \"The Hr team scheduled interviews.\",\n            OrthographicConsistency::default(),\n            \"The HR team scheduled interviews.\",\n        );\n    }\n\n    #[test]\n    fn ai_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Ai enables new capabilities.\",\n            OrthographicConsistency::default(),\n            \"AI enables new capabilities.\",\n        );\n    }\n\n    #[test]\n    fn ufo_should_be_all_caps() {\n        assert_suggestion_result(\n            \"Ufo sightings provoke debate.\",\n            OrthographicConsistency::default(),\n            \"UFO sightings provoke debate.\",\n        );\n    }\n\n    #[test]\n    fn markdown_should_be_caps() {\n        assert_suggestion_result(\n            \"I adore markdown.\",\n            OrthographicConsistency::default(),\n            \"I adore Markdown.\",\n        );\n    }\n\n    #[test]\n    fn canonical_forms_should_not_be_flagged() {\n        let sentences = [\n            \"NASA is a governmental institution.\",\n            \"IKEA operates a vast retail network.\",\n            \"LEGO bricks encourage creativity.\",\n            \"NATO is a military alliance.\",\n            \"FBI investigates federal crimes.\",\n            \"CIA gathers intelligence.\",\n            \"HIV is a virus.\",\n            \"DNA carries genetic information.\",\n            \"RNA participates in protein synthesis.\",\n            \"CPU executes instructions.\",\n            \"GPU accelerates graphics.\",\n            \"HTML structures web documents.\",\n            \"URL identifies a resource.\",\n            \"FAQ answers common questions.\",\n            \"I updated my LinkedIn profile yesterday.\",\n            \"She writes daily on her WordPress blog.\",\n            \"PDF preserves formatting.\",\n            \"Our CEO approved the budget.\",\n            \"The CFO presented the report.\",\n            \"The HR team scheduled interviews.\",\n            \"AI enables new capabilities.\",\n            \"UFO sightings provoke debate.\",\n            \"I adore Markdown.\",\n        ];\n\n        for sentence in sentences {\n            assert_no_lints(sentence, OrthographicConsistency::default());\n        }\n    }\n\n    #[test]\n    fn allows_news() {\n        assert_no_lints(\n            \"This is the best part of the news broadcast.\",\n            OrthographicConsistency::default(),\n        );\n    }\n\n    #[test]\n    fn allows_issue_2465() {\n        assert_no_lints(\n            \"The post’s problem was not in its complexity.\",\n            OrthographicConsistency::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/ought_to_be.rs",
    "content": "use crate::TokenKind;\nuse crate::expr::{AnchorStart, Expr, ExprMap, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\n/// Detects the eggcorn `out to be` when the intended phrase is `ought to be`.\n///\n/// Legitimate phrasal-verb uses like `turn out to be`, `work out to be`, or\n/// `make it out to be` are ignored.\npub struct OughtToBe {\n    expr: ExprMap<usize>, // index of the `out` token within the match\n}\n\nimpl Default for OughtToBe {\n    fn default() -> Self {\n        // We’ll construct three branches and record where the `out` token sits in each.\n        // 1) non-verb word + pronoun + \"out to be\"  → index of `out` = 4 tokens after start\n        //    [word(!verb)] [ws] [pronoun] [ws] [out] [ws] [to] [ws] [be]\n        let branch_nonverb_pronoun = SequenceExpr::default()\n            .then_kind_is_but_is_not(TokenKind::is_word, TokenKind::is_verb)\n            .then_whitespace()\n            .then_pronoun()\n            .then_whitespace()\n            .then_fixed_phrase(\"out to be\");\n\n        // 2) start-of-sentence + pronoun + \"out to be\" → index of `out` = 2 tokens after start\n        //    [AnchorStart] [pronoun] [ws] [out] [ws] [to] [ws] [be]\n        let branch_anchor_pronoun = SequenceExpr::with(AnchorStart)\n            .then_pronoun()\n            .then_whitespace()\n            .then_fixed_phrase(\"out to be\");\n\n        // 3) punctuation + pronoun + \"out to be\" → index of `out` = 4 tokens after start\n        //    [punct] [ws] [pronoun] [ws] [out] [ws] [to] [ws] [be]\n        let branch_punct_pronoun = SequenceExpr::default()\n            .then_punctuation()\n            .then_whitespace()\n            .then_pronoun()\n            .then_whitespace()\n            .then_fixed_phrase(\"out to be\");\n\n        let mut map = ExprMap::default();\n        map.insert(branch_nonverb_pronoun, 4);\n        map.insert(branch_anchor_pronoun, 2);\n        map.insert(branch_punct_pronoun, 4);\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for OughtToBe {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched: &[Token], source: &[char]) -> Option<Lint> {\n        // Find which branch matched and where the `out` token sits.\n        let out_index = *self.expr.lookup(0, matched, source)?;\n        let out_tok = matched.get(out_index)?;\n        let replace_span = out_tok.span; // only replace the word `out`\n        let original = replace_span.get_content(source);\n        Some(Lint {\n            span: replace_span,\n            lint_kind: LintKind::Eggcorn,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"ought\".chars().collect(),\n                original,\n            )],\n            message: \"Did you mean `ought to be` (expressing expectation or obligation)?\"\n                .to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects the mistaken `out to be` and suggests `ought to be`, while ignoring legitimate phrasal-verb uses such as `turn out to be` and `make it out to be`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::OughtToBe;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    // Flagged examples\n    #[test]\n    fn flags_you_out_to_be_able_to_see() {\n        assert_suggestion_result(\n            \"you out to be able to see\",\n            OughtToBe::default(),\n            \"you ought to be able to see\",\n        );\n    }\n\n    #[test]\n    fn flags_as_it_out_to_be() {\n        assert_suggestion_result(\"as it out to be\", OughtToBe::default(), \"as it ought to be\");\n    }\n\n    #[test]\n    fn flags_then_it_out_to_be() {\n        assert_suggestion_result(\n            \"then it out to be\",\n            OughtToBe::default(),\n            \"then it ought to be\",\n        );\n    }\n\n    // Legit phrasal-verb cases that should be ignored\n    #[test]\n    fn ignores_turned_out_to_be() {\n        assert_lint_count(\"It turned out to be fine.\", OughtToBe::default(), 0);\n    }\n\n    #[test]\n    fn ignores_turns_out_to_be() {\n        assert_lint_count(\"It turns out to be fine.\", OughtToBe::default(), 0);\n    }\n\n    #[test]\n    fn ignores_make_it_out_to_be() {\n        assert_lint_count(\n            \"It's not as simple as they make it out to be.\",\n            OughtToBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_makes_it_out_to_be() {\n        assert_lint_count(\n            \"I think this rule may not be as smart as its definition makes it out to be.\",\n            OughtToBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_worked_out_to_be() {\n        assert_lint_count(\"It worked out to be $5.\", OughtToBe::default(), 0);\n    }\n\n    #[test]\n    fn ignores_figured_it_out_to_be() {\n        assert_lint_count(\n            \"I figured it out to be a memory issue.\",\n            OughtToBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_try_it_out_to_be() {\n        assert_lint_count(\"Try it out to be sure.\", OughtToBe::default(), 0);\n    }\n\n    #[test]\n    fn ignores_separate_it_out_to_be() {\n        assert_lint_count(\n            \"I want to separate it out to be able to process it later.\",\n            OughtToBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_rotate_it_out_to_be() {\n        assert_lint_count(\n            \"We will rotate it out to be eventually deleted.\",\n            OughtToBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_flesh_it_out_to_be() {\n        assert_lint_count(\n            \"This needs some work to flesh it out to be usable.\",\n            OughtToBe::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/out_of_date.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::FixedPhrase;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct OutOfDate {\n    expr: FirstMatchOf,\n}\n\nimpl Default for OutOfDate {\n    fn default() -> Self {\n        let pattern = FirstMatchOf::new(vec![\n            Box::new(FixedPhrase::from_phrase(\"out of date\")),\n            Box::new(FixedPhrase::from_phrase(\"out-of date\")),\n            Box::new(FixedPhrase::from_phrase(\"out of-date\")),\n        ]);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for OutOfDate {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let problem_text = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"out-of-date\".chars().collect(),\n                problem_text,\n            )],\n            message: \"Did you mean the compound adjective?\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Ensures that the phrase `out of date` is written with a hyphen as `out-of-date` when used as a compound adjective.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::OutOfDate;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn corrects_out_of_date() {\n        assert_suggestion_result(\n            \"The software is out of date.\",\n            OutOfDate::default(),\n            \"The software is out-of-date.\",\n        );\n    }\n\n    #[test]\n    fn corrects_out_of_date_with_variation() {\n        assert_suggestion_result(\n            \"This information is out of-date.\",\n            OutOfDate::default(),\n            \"This information is out-of-date.\",\n        );\n    }\n\n    #[test]\n    fn allows_correct_usage() {\n        assert_suggestion_result(\n            \"The guidelines are out-of-date.\",\n            OutOfDate::default(),\n            \"The guidelines are out-of-date.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/oxford_comma.rs",
    "content": "use crate::expr::ExprExt;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::{Lrc, Token, TokenStringExt, linting::Linter};\n\nuse super::{super::Lint, LintKind, Suggestion};\n\npub struct OxfordComma {\n    expr: SequenceExpr,\n}\n\nimpl Default for OxfordComma {\n    fn default() -> Self {\n        let item = Lrc::new(\n            SequenceExpr::default()\n                .then_determiner()\n                .then_whitespace()\n                .then_nominal()\n                .or_longest(SequenceExpr::default().then_nominal()),\n        );\n\n        let item_chunk = SequenceExpr::with(item.clone())\n            .then_comma()\n            .then_whitespace();\n\n        let pattern = SequenceExpr::default()\n            .then_one_or_more(item_chunk)\n            .then(item.clone())\n            .then_whitespace()\n            .then_word_set(&[\"and\", \"or\", \"nor\"])\n            .then_whitespace()\n            .then(item.clone());\n\n        Self { expr: pattern }\n    }\n}\n\nimpl OxfordComma {\n    fn match_to_lint(&self, matched_toks: &[Token], _source: &[char]) -> Option<Lint> {\n        let conj_index = matched_toks.last_conjunction_index()?;\n        let offender = &matched_toks[conj_index - 2];\n\n        Some(Lint {\n            span: offender.span,\n            lint_kind: LintKind::Style,\n            suggestions: vec![Suggestion::InsertAfter(vec![','])],\n            message: \"An Oxford comma is necessary here.\".to_owned(),\n            priority: 31,\n        })\n    }\n}\n\nimpl Linter for OxfordComma {\n    fn lint(&mut self, document: &crate::Document) -> Vec<crate::linting::Lint> {\n        let mut lints = Vec::new();\n        for sentence in document.iter_sentences() {\n            let mut skip = 0;\n\n            let mut words = sentence\n                .iter_words()\n                .filter_map(|v| v.kind.as_word())\n                .flatten();\n\n            if let (Some(first), Some(second)) = (words.next(), words.next())\n                && first.preposition\n                && second.is_likely_homograph()\n            {\n                skip = sentence\n                    .iter()\n                    .position(|t| t.kind.is_comma())\n                    .unwrap_or(sentence.iter().len())\n            }\n\n            let sentence = &sentence[skip..];\n\n            for match_span in self.expr.iter_matches(sentence, document.get_source()) {\n                let lint = self.match_to_lint(\n                    &sentence[match_span.start..match_span.end],\n                    document.get_source(),\n                );\n                lints.extend(lint);\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"The Oxford comma is one of the more controversial rules in common use today. Enabling this lint checks that there is a comma before `and`, `or`, or `nor` when listing out more than two ideas.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::OxfordComma;\n\n    #[test]\n    fn fruits() {\n        assert_lint_count(\n            \"An apple, a banana and a pear walk into a bar.\",\n            OxfordComma::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn people() {\n        assert_suggestion_result(\n            \"Nancy, Steve and Carl are going to the coffee shop.\",\n            OxfordComma::default(),\n            \"Nancy, Steve, and Carl are going to the coffee shop.\",\n        );\n    }\n\n    #[test]\n    fn places() {\n        assert_suggestion_result(\n            \"I've always wanted to visit Paris, Tokyo and Rome.\",\n            OxfordComma::default(),\n            \"I've always wanted to visit Paris, Tokyo, and Rome.\",\n        );\n    }\n\n    #[test]\n    fn foods() {\n        assert_suggestion_result(\n            \"My favorite foods are pizza, sushi, tacos and burgers.\",\n            OxfordComma::default(),\n            \"My favorite foods are pizza, sushi, tacos, and burgers.\",\n        );\n    }\n\n    #[test]\n    fn allows_clean_music() {\n        assert_lint_count(\n            \"I enjoy listening to pop music, rock, hip-hop, electronic dance, and classical music.\",\n            OxfordComma::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_clean_nations() {\n        assert_lint_count(\n            \"The team consists of players from different countries: France, Germany, Italy, and Spain.\",\n            OxfordComma::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn or_writing() {\n        assert_suggestion_result(\n            \"Harper can be a lifesaver when writing technical documents, emails or other formal forms of communication.\",\n            OxfordComma::default(),\n            \"Harper can be a lifesaver when writing technical documents, emails, or other formal forms of communication.\",\n        );\n    }\n\n    #[test]\n    fn sports() {\n        assert_suggestion_result(\n            \"They enjoy playing soccer, basketball or tennis.\",\n            OxfordComma::default(),\n            \"They enjoy playing soccer, basketball, or tennis.\",\n        );\n    }\n\n    #[test]\n    fn nor_vegetables() {\n        assert_suggestion_result(\n            \"I like carrots, kale nor broccoli.\",\n            OxfordComma::default(),\n            \"I like carrots, kale, nor broccoli.\",\n        );\n    }\n\n    #[test]\n    fn allow_non_list_transportation() {\n        assert_lint_count(\n            \"In transportation, autonomous vehicles and smart traffic management systems promise to reduce accidents and optimize travel routes.\",\n            OxfordComma::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_pill() {\n        assert_lint_count(\n            \"Develop a pill that causes partial amnesia, affecting relationships and identity.\",\n            OxfordComma::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_at_first() {\n        assert_lint_count(\n            \"In the heart of a bustling city, Sarah finds herself trapped in an endless cycle of the same day. Each morning, she awakens to find the date unchanged, her life on repeat. At first, confusion and frustration cloud her thoughts, but soon she notices something peculiar—each day has tiny differences, subtle changes that hint at a larger pattern.\",\n            OxfordComma::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_standoff() {\n        assert_lint_count(\n            \"In a tense standoff, Alex and his reflection engage in a battle of wills.\",\n            OxfordComma::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/oxymorons.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::FixedPhrase;\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind};\nuse crate::{Token, TokenStringExt};\n\n/// A linter that flags oxymoronic phrases.\npub struct Oxymorons {\n    expr: FirstMatchOf,\n}\n\nimpl Oxymorons {\n    pub fn new() -> Self {\n        // List of phrases that are considered oxymoronic.\n        let phrases = vec![\n            \"amateur expert\",\n            \"increasingly less\",\n            \"advancing backwards?\",\n            \"alludes explicitly to\",\n            \"explicitly alludes to\",\n            \"totally obsolescent\",\n            \"completely obsolescent\",\n            \"generally always\",\n            \"usually always\",\n            \"build down\",\n            \"conspicuous absence\",\n            \"exact estimate\",\n            \"found missing\",\n            \"intense apathy\",\n            \"mandatory choice\",\n            \"nonworking mother\",\n            \"organized mess\",\n        ];\n\n        // Build a vector of exact-match patterns for each oxymoron.\n        let exprs: Vec<Box<dyn Expr>> = phrases\n            .into_iter()\n            .map(|s| Box::new(FixedPhrase::from_phrase(s)) as Box<dyn Expr>)\n            .collect();\n\n        Self {\n            expr: FirstMatchOf::new(exprs),\n        }\n    }\n}\n\nimpl Default for Oxymorons {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl ExprLinter for Oxymorons {\n    type Unit = Chunk;\n\n    /// Returns the underlying pattern.\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let matched_text: String = span.get_content(source).iter().collect();\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: Vec::new(),\n            message: format!(\"'{matched_text}' is an oxymoron.\"),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Flags oxymoronic phrases (e.g. `amateur expert`, `increasingly less`, etc.).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Oxymorons;\n    use crate::linting::tests::assert_lint_count;\n\n    #[test]\n    fn detects_amateur_expert() {\n        assert_lint_count(\"The amateur expert gave his opinion.\", Oxymorons::new(), 1);\n    }\n\n    #[test]\n    fn detects_increasingly_less() {\n        assert_lint_count(\n            \"The solution was increasingly less effective.\",\n            Oxymorons::new(),\n            1,\n        );\n    }\n\n    #[test]\n    fn detects_advancing_backwards() {\n        assert_lint_count(\"The project is advancing backwards?\", Oxymorons::new(), 1);\n    }\n\n    #[test]\n    fn detects_alludes_explicitly_to() {\n        assert_lint_count(\n            \"The report alludes explicitly to several issues.\",\n            Oxymorons::new(),\n            1,\n        );\n    }\n\n    #[test]\n    fn detects_explicitly_alludes_to() {\n        assert_lint_count(\n            \"The report explicitly alludes to several issues.\",\n            Oxymorons::new(),\n            1,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_clean_text() {\n        assert_lint_count(\"The expert provided clear advice.\", Oxymorons::new(), 0);\n    }\n\n    #[test]\n    fn lowercase_match() {\n        assert_lint_count(\n            \"the amateur expert is often unreliable.\",\n            Oxymorons::new(),\n            1,\n        );\n    }\n\n    #[test]\n    fn phrase_with_extra_whitespace() {\n        assert_lint_count(\"An organized    mess was found.\", Oxymorons::new(), 1);\n    }\n\n    #[test]\n    fn phrase_split_by_line_break() {\n        assert_lint_count(\n            \"nonworking\\nmother is not a term to be used.\",\n            Oxymorons::new(),\n            1,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/phrasal_verb_as_compound_noun.rs",
    "content": "use std::sync::Arc;\n\nuse super::{Lint, LintKind, Linter, Suggestion};\nuse crate::spell::{Dictionary, FstDictionary};\nuse crate::{CharStringExt, Document, Span, TokenStringExt};\n\n/// Detect phrasal verbs written as compound nouns.\npub struct PhrasalVerbAsCompoundNoun {\n    dict: Arc<FstDictionary>,\n}\n\n#[derive(Debug)]\nenum Confidence {\n    DefinitelyVerb,\n    PossiblyVerb,\n}\n\nimpl PhrasalVerbAsCompoundNoun {\n    pub fn new() -> Self {\n        Self {\n            dict: FstDictionary::curated(),\n        }\n    }\n}\n\nimpl Default for PhrasalVerbAsCompoundNoun {\n    fn default() -> Self {\n        Self {\n            dict: FstDictionary::curated(),\n        }\n    }\n}\n\n#[derive(Debug, PartialEq)]\nenum Why {\n    ItsAProperNounOrVerb,\n    ItContainsSpaceHyphenOrApostrophe,\n    ItsAKnownFalsePositive,\n    ItDoesntEndWithOneOfTheParticles,\n    NeitherTheWholeWordNorThePartBeforeTheParticleIsAVerb,\n    ItsInIsolation,\n    IHaveNoConfidenceThatItsAVerb,\n    TheresAnAdjectiveOrDeterminerBeforeIt,\n    ItsPrecededByANonPluralNoun,\n    ItsAnItemInAListOfNouns,\n    ItsPrecededByAPreposition,\n    ItsPrecededByAnUnknownWord,\n    TheresNothingBeforeItAndAPrepositionAfterIt,\n    ItsFollowedByThatOrWhich,\n    ItsActuallyPartOfANounPhrase,\n    TheresNothingWrongWithIt,\n}\n\nimpl PhrasalVerbAsCompoundNoun {\n    fn logic_and_heuristics(\n        &self,\n        document: &Document,\n        i: usize,\n        token: &crate::Token,\n    ) -> Result<(String, Confidence), Why> {\n        // It would be handy if there could be a dict flag for nouns which are compounds of phrasal verbs.\n        // Instead, let's use a few heuristics.\n\n        // let no_phrasal_verb = String::new();\n        // * Can't also be a proper noun or a real verb.\n        if token.kind.is_proper_noun() || token.kind.is_verb() {\n            return Err(Why::ItsAProperNounOrVerb);\n        }\n        let nountok_charsl = document.get_span_content(&token.span);\n        // * Can't contain space, hyphen or apostrophe\n        if nountok_charsl.contains(&' ')\n            || nountok_charsl.contains(&'-')\n            || nountok_charsl.contains(&'\\'')\n            || nountok_charsl.contains(&'’')\n        {\n            return Err(Why::ItContainsSpaceHyphenOrApostrophe);\n        }\n\n        let nountok_lower = nountok_charsl.to_lower();\n        let nountok_lower = nountok_lower.as_ref();\n\n        // * Must not be in the set of known false positives.\n        if nountok_lower == ['g', 'a', 'l', 'l', 'o', 'n']\n            || nountok_lower == ['d', 'r', 'a', 'g', 'o', 'n']\n        {\n            return Err(Why::ItsAKnownFalsePositive);\n        }\n\n        // * Must end with the same letters as one of the particles used in phrasal verbs.\n        let particle_endings: &[&[char]] = &[\n            &['a', 'r', 'o', 'u', 'n', 'd'],\n            &['b', 'a', 'c', 'k'],\n            &['d', 'o', 'w', 'n'],\n            &['i', 'n'],\n            &['o', 'n'],\n            &['o', 'f', 'f'],\n            &['o', 'u', 't'],\n            &['o', 'v', 'e', 'r'],\n            &['u', 'p'],\n        ];\n\n        let mut found_particle_len = 0;\n        if !particle_endings.iter().any(|ending| {\n            let ending_len = ending.len();\n            if ending_len <= nountok_charsl.len()\n                && ending\n                    .iter()\n                    .eq(nountok_charsl[nountok_charsl.len() - ending_len..].iter())\n            {\n                found_particle_len = ending_len;\n                true\n            } else {\n                false\n            }\n        }) {\n            return Err(Why::ItDoesntEndWithOneOfTheParticles);\n        }\n\n        let verb_part = &nountok_charsl[..nountok_charsl.len() - found_particle_len];\n        let particle_part = &nountok_charsl[nountok_charsl.len() - found_particle_len..];\n        let phrasal_verb: String = verb_part\n            .iter()\n            .chain(std::iter::once(&' '))\n            .chain(particle_part.iter())\n            .collect();\n\n        // Check if both things are verbs.\n        // So far we only have a small number of phrasal verbs in the dictionary.\n        let (verb_part_is_verb, phrasal_verb_is_verb) = (\n            self.dict\n                .get_word_metadata(verb_part)\n                .is_some_and(|md| md.verb.is_some()),\n            self.dict\n                .get_word_metadata_str(&phrasal_verb)\n                .is_some_and(|md| md.verb.is_some()),\n        );\n\n        // If neither is a verb, then it's not a phrasal verb\n        if !verb_part_is_verb && !phrasal_verb_is_verb {\n            return Err(Why::NeitherTheWholeWordNorThePartBeforeTheParticleIsAVerb);\n        }\n\n        // Now we know it matches the pattern of a phrasal verb erroneously written as a compound noun.\n        // But we have to check if it's an actual compound noun rather than an error.\n        // For that we need some heuristics based on the surrounding context.\n        // Let's try to get the word before and the word after.\n        // To do that we have to get the tokens immediately before and after, which we expect to be whitespace.\n        let maybe_prev_tok = document.get_next_word_from_offset(i, -1);\n        let maybe_next_tok = document.get_next_word_from_offset(i, 1);\n\n        // If it's in isolation, a compound noun is fine.\n        if maybe_prev_tok.is_none() && maybe_next_tok.is_none() {\n            return Err(Why::ItsInIsolation);\n        }\n\n        let confidence = match (phrasal_verb_is_verb, verb_part_is_verb) {\n            (true, _) => Confidence::DefinitelyVerb,\n            (false, true) => Confidence::PossiblyVerb,\n            _ => return Err(Why::IHaveNoConfidenceThatItsAVerb),\n        };\n\n        if let Some(prev_tok) = maybe_prev_tok {\n            if prev_tok.kind.is_adjective() || prev_tok.kind.is_determiner() {\n                return Err(Why::TheresAnAdjectiveOrDeterminerBeforeIt);\n            }\n\n            // \"dictionary lookup\" is not a mistake but \"couples breakup\" is.\n            // But \"settings plugin\" is not.\n            if prev_tok.kind.is_noun() && !prev_tok.kind.is_plural_noun()\n                || prev_tok\n                    .span\n                    .get_content(document.get_source())\n                    .eq_ignore_ascii_case_str(\"settings\")\n            {\n                return Err(Why::ItsPrecededByANonPluralNoun);\n            }\n\n            if is_part_of_noun_list(document, i) {\n                return Err(Why::ItsAnItemInAListOfNouns);\n            }\n\n            // If the previous word is (only) a preposition, this word is surely a noun\n            if prev_tok.kind.is_preposition()\n                && !prev_tok\n                    .span\n                    .get_content(document.get_source())\n                    .eq_ignore_ascii_case_str(\"to\")\n            {\n                return Err(Why::ItsPrecededByAPreposition);\n            }\n\n            // If the previous word is OOV, those are most commonly nouns\n            if prev_tok.kind.is_oov() {\n                return Err(Why::ItsPrecededByAnUnknownWord);\n            }\n        }\n\n        // A preposition may follow either a verb or a noun.\n        // A previous word can help us decide. Without one we can't decide so we won't flag it.\n        // ❌ I will never breakup with Gym.\n        // ✅ Plugin for text editors.\n        // ✅ Plug in for faster performance.\n        if maybe_prev_tok.is_none() && maybe_next_tok.is_some_and(|t| t.kind.is_preposition()) {\n            return Err(Why::TheresNothingBeforeItAndAPrepositionAfterIt);\n        }\n\n        if let Some(next_tok) = maybe_next_tok {\n            // \"That\" or \"which\" can follow a noun as relative pronouns.\n            if next_tok.kind.is_pronoun()\n                && next_tok\n                    .span\n                    .get_content(document.get_source())\n                    .eq_any_ignore_ascii_case_chars(&[\n                        &['t', 'h', 'a', 't'][..],\n                        &['w', 'h', 'i', 'c', 'h'][..],\n                    ])\n            {\n                return Err(Why::ItsFollowedByThatOrWhich);\n            }\n        }\n\n        // If the compound noun is followed by another noun, check for larger compound nouns.\n        if let Some(next_tok) = maybe_next_tok.filter(|tok| tok.kind.is_noun())\n            && match nountok_lower {\n                ['b', 'a', 'c', 'k', 'u', 'p'] => &[\n                    \"file\",\n                    \"images\",\n                    \"link\",\n                    \"links\",\n                    \"location\",\n                    \"plan\",\n                    \"sites\",\n                    \"snapshots\",\n                ][..],\n                ['c', 'a', 'l', 'l', 'b', 'a', 'c', 'k'] => &[\"function\", \"handlers\"][..],\n                ['l', 'a', 'y', 'o', 'u', 't'] => &[\"estimation\"][..],\n                ['m', 'a', 'r', 'k', 'u', 'p'] => &[\"language\", \"languages\"][..],\n                ['m', 'o', 'u', 's', 'e', 'o', 'v', 'e', 'r'] => &[\"hints\"][..],\n                ['p', 'l', 'a', 'y', 'b', 'a', 'c', 'k'] => &[\"latency\", \"speed\"][..],\n                ['p', 'l', 'u', 'g', 'i', 'n'] => &[\n                    \"architecture\",\n                    \"classes\",\n                    \"development\",\n                    \"developer\",\n                    \"docs\",\n                    \"ecosystem\",\n                    \"files\",\n                    \"interface\",\n                    \"name\",\n                    \"packages\",\n                    \"suite\",\n                    \"support\",\n                ][..],\n                ['p', 'o', 'p', 'u', 'p'] => &[\"window\"][..],\n                ['r', 'o', 'l', 'l', 'o', 'u', 't'] => &[\"logic\", \"status\"][..],\n                ['s', 't', 'a', 'r', 't', 'u', 'p'] => &[\"environments\"][..],\n                ['t', 'h', 'r', 'o', 'w', 'b', 'a', 'c', 'k'] => &[\"machine\"][..],\n                ['w', 'o', 'r', 'k', 'o', 'u', 't'] => &[\"constraints\", \"preference\"][..],\n                _ => &[],\n            }\n            .contains(\n                &next_tok\n                    .span\n                    .get_content_string(document.get_source())\n                    .to_lowercase()\n                    .as_ref(),\n            )\n        {\n            return Err(Why::ItsActuallyPartOfANounPhrase);\n        }\n\n        Ok((phrasal_verb, confidence))\n    }\n}\n\nimpl Linter for PhrasalVerbAsCompoundNoun {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for i in document.iter_noun_indices() {\n            let token = document.get_token(i).unwrap();\n\n            if let Ok((phrasal_verb, confidence)) = self.logic_and_heuristics(document, i, token) {\n                let message = match confidence {\n                    Confidence::DefinitelyVerb => {\n                        \"This word should be a phrasal verb, not a compound noun.\"\n                    }\n                    Confidence::PossiblyVerb => {\n                        \"This word might be a phrasal verb rather than a compound noun.\"\n                    }\n                };\n\n                lints.push(Lint {\n                    span: Span::new(token.span.start, token.span.end),\n                    lint_kind: LintKind::WordChoice,\n                    suggestions: vec![Suggestion::ReplaceWith(phrasal_verb.chars().collect())],\n                    message: message.to_string(),\n                    priority: 63,\n                });\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"This rule looks for phrasal verbs written as compound nouns.\"\n    }\n}\n\n/// Checks if the current token is part of a list of nouns\nfn is_part_of_noun_list(document: &Document, current_index: usize) -> bool {\n    // Check for a conjunction before the current word (-1 is whitespace, -2 is the conjunction)\n    if !matches!(\n        document.get_next_word_from_offset(current_index, -1),\n        Some(tok) if tok.kind.is_conjunction()\n    ) {\n        return false;\n    }\n\n    // Check the token sequence before the conjunction\n    match document.get_token_offset(current_index, -3) {\n        // A comma without the space, assume we're in a list of nouns.\n        Some(tok) if tok.kind.is_comma() => true,\n\n        // Whitespace. If the token before that is a noun or a comma, assume we're in a list of nouns.\n        Some(ws) if ws.kind.is_whitespace() => {\n            document\n                .get_token_offset(current_index, -4)\n                // `noun and` or `, and`\n                .is_some_and(|tok| tok.kind.is_noun() || tok.kind.is_comma())\n        }\n\n        _ => false,\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::PhrasalVerbAsCompoundNoun;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn flag_breakup_and_workout() {\n        assert_lint_count(\n            \"I will never breakup with Gym. We just seem to workout.\",\n            PhrasalVerbAsCompoundNoun::default(),\n            2,\n        );\n    }\n\n    #[test]\n    fn correct_breakup_and_workout() {\n        assert_suggestion_result(\n            \"I will never breakup with Gym. We just seem to workout.\",\n            PhrasalVerbAsCompoundNoun::default(),\n            \"I will never break up with Gym. We just seem to work out.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_random_words_that_happen_to_end_like_a_particle() {\n        assert_no_lints(\"I like bacon.\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    #[test]\n    fn dont_flag_non_verb_particles() {\n        assert_no_lints(\"non\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    #[test]\n    fn correct_after_i() {\n        assert_suggestion_result(\n            \"I backup\",\n            PhrasalVerbAsCompoundNoun::default(),\n            \"I back up\",\n        );\n    }\n\n    #[test]\n    fn correct_after_we() {\n        assert_suggestion_result(\n            \"we breakup\",\n            PhrasalVerbAsCompoundNoun::default(),\n            \"we break up\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_checkin() {\n        // It's actually not a noun in English.\n        assert_no_lints(\"checkin\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    #[test]\n    fn dont_flag_cleanup() {\n        assert_no_lints(\"cleanup\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    #[test]\n    fn correct_after_you_lowercase() {\n        assert_suggestion_result(\n            \"you checkout\",\n            PhrasalVerbAsCompoundNoun::default(),\n            \"you check out\",\n        );\n    }\n\n    #[test]\n    fn correct_after_you_capitalized() {\n        assert_suggestion_result(\n            \"You checkout\",\n            PhrasalVerbAsCompoundNoun::default(),\n            \"You check out\",\n        );\n    }\n\n    #[test]\n    fn flag_checkout_after_you() {\n        assert_lint_count(\"you checkout\", PhrasalVerbAsCompoundNoun::default(), 1);\n    }\n\n    #[test]\n    fn correct_after_they_lowercase() {\n        assert_suggestion_result(\n            \"they cleanup\",\n            PhrasalVerbAsCompoundNoun::default(),\n            \"they clean up\",\n        );\n    }\n\n    #[test]\n    fn flag_cleanup_after_they() {\n        assert_lint_count(\"they cleanup\", PhrasalVerbAsCompoundNoun::default(), 1);\n    }\n\n    #[test]\n    fn dont_flag_dictionary_lookup() {\n        assert_no_lints(\"dictionary lookup\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    #[test]\n    fn flag_couples_breakup() {\n        assert_lint_count(\"couples breakup\", PhrasalVerbAsCompoundNoun::default(), 1);\n    }\n\n    #[test]\n    fn dont_flag_gallon() {\n        assert_no_lints(\"gallon\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    // Maybe this works by accident because \"given\" is also an adjective.\n    // It should be because \"funding\" is a noun, but it's a gerund, which makes it also a verb.\n    // Still, \"given start up\" doesn't make sense so maybe this test if fine.\n    #[test]\n    fn dont_flag_startup_funding() {\n        assert_no_lints(\n            \"Yarvin has actually given startup funding. They hang out and party together\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_huge_markup() {\n        assert_no_lints(\n            \"Sell it back to Russia at a huge markup.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_another_layoff() {\n        assert_no_lints(\n            \"And now just announced another layoff\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"\\\"Shakedown\\\" is a compound noun -- it's part of a comma-separated list with another noun \\\"threat\\\"\\nBut this is not easy to check for so is not implemented yet.\"]\n    fn dont_flag_a_threat_or_shakedown() {\n        assert_no_lints(\n            \"Just a threat or Shakedown.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_a_flyover() {\n        assert_no_lints(\n            \"if I'm the Brits I'm doing a flyover\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_mafia_style_shakedown() {\n        assert_no_lints(\n            \"Basically it's kind of a mafia style shakedown of Ukraine\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_my_meetup_repository() {\n        assert_no_lints(\n            \"I might have in my Meetup repository\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn ignore_multi_word() {\n        assert_no_lints(\"I like this add-on!\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    #[test]\n    fn dont_flag_list_of_nouns_1298() {\n        assert_no_lints(\n            \"A printable format and layout.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_oov_nvim_plugin_1280() {\n        assert_no_lints(\n            \"This is the nvim plugin for you.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn flag_title_case() {\n        assert_lint_count(\n            \"I Will Never Breakup With Gym. We Just Seem To Workout.\",\n            PhrasalVerbAsCompoundNoun::default(),\n            2,\n        );\n    }\n\n    #[test]\n    fn dont_flag_all_caps() {\n        assert_no_lints(\n            \"I WILL NEVER BREAKUP WITH GYM. WE JUST SEEM TO WORKOUT.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn false_positive_issue_1495() {\n        assert_no_lints(\n            \"Color schemes are available by using the Style Settings plugin.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_thanks_a_lot_linter_description() {\n        assert_lint_count(\n            \"Thanks a lot` is the fixed, widely accepted form, while variants like `thanks lot` or `thanks alot` are non-standard and can jar readers.\",\n            PhrasalVerbAsCompoundNoun::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_backup_location() {\n        assert_no_lints(\n            \"Backup location: `%APPDATA%\\\\Cursor\\\\User\\\\globalStorage\\\\backups`\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_backup_plan() {\n        assert_no_lints(\n            \"Every backup plan is unique, based on your risk assessment.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_backup_program() {\n        assert_no_lints(\n            \"restic is a backup program that is fast, efficient and secure\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_backup_solution_or_backup_problems() {\n        assert_no_lints(\n            \"NPBackup is a multiparadigm backup solution which tries to solve two major backup problems\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_backup_utilities_backup_system_or_backup_snapshots() {\n        assert_no_lints(\n            \"GitHub Enterprise Server Backup Utilities is a backup system you install on a separate host, which takes backup snapshots\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_backup_images() {\n        assert_no_lints(\n            \"This App creates and stores backup images of your Nextcloud.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn fix_backup_individual_apps() {\n        assert_suggestion_result(\n            \"It requires root and allows you to backup individual apps and their data.\",\n            PhrasalVerbAsCompoundNoun::default(),\n            \"It requires root and allows you to back up individual apps and their data.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_backup_strategy() {\n        assert_no_lints(\n            \"This is for you if you want to quickly set up a backup strategy without much fuss.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_helm_backup_plugin() {\n        assert_no_lints(\"Helm Backup Plugin.\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    #[test]\n    fn dont_flag_callback_function() {\n        assert_no_lints(\n            \"By the time the `setTimeout` callback function was invoked\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_playback_latency() {\n        assert_no_lints(\n            \"Low-Latency HLS is a recently standardized variant of the protocol that allows to greatly reduce playback latency.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_workout_constraints() {\n        assert_no_lints(\"Workout constraints\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    #[test]\n    fn dont_flag_workout_preference() {\n        assert_no_lints(\"Workout preference\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    #[test]\n    fn dont_flag_rollout_status() {\n        assert_no_lints(\n            \"Rollout Status of Latest Image Release\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn font_flag_with_plugin() {\n        assert_no_lints(\n            \"**Xcode** (8.0+, otherwise [with plugin](https://github.com/robertvojta/LigatureXcodePlugin))\",\n            PhrasalVerbAsCompoundNoun::default(),\n        )\n    }\n\n    #[test]\n    fn dont_flag_and_layout_of_data() {\n        assert_no_lints(\n            \"shape, memory space, and layout of data, while performing the complicated indexing for the user\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_in_noun_list_without_space_after_comma() {\n        assert_no_lints(\n            \"shape, memory space,and layout of data\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_layout_estimation() {\n        assert_no_lints(\n            \"Layout estimation focuses on predicting architectural elements, i.e., walls, doors, and windows, within an indoor scene.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_plugin_that() {\n        assert_no_lints(\n            \"plugin that provides way for auto-loading of Golang SDK\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_load_balancing_and_failover() {\n        assert_no_lints(\n            \"resilient mid-tier load balancing and failover\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_plugin_for() {\n        assert_no_lints(\n            \"Plugin for text editors and IDEs.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_markup_language() {\n        assert_no_lints(\n            \"Markup language used for websites & web apps.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_plugin_ecosystem_or_plugin_development() {\n        assert_no_lints(\n            \"## 🧩 Plugin Ecosystem\\n### Plugin Development\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_plugin_files_or_plugin_packages() {\n        assert_no_lints(\n            \"plugin files between plugin packages installed with pip must have unique filenames.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_plugin_docs() {\n        assert_no_lints(\n            \"building your own plugin: [Plugin Docs]\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_plugin_suite() {\n        assert_no_lints(\n            \"An all-in-one digital audio workstation (DAW) and plugin suite.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_hacker_news_throwback_machine() {\n        assert_no_lints(\n            \"| Hacker News Throwback Machine | Shows what was popular on Hacker News on this day in previous years.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_plugin_interface() {\n        assert_no_lints(\"[Plugin interface]\", PhrasalVerbAsCompoundNoun::default());\n    }\n\n    #[test]\n    fn issue_1918() {\n        assert_no_lints(\n            \"Boost your productivity with our JetBrains plugin!\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_pop_up_2217() {\n        assert_no_lints(\n            \"Popup window instead of command line.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn issue_1772() {\n        assert_no_lints(\n            \"By default, only one tile size is instantiated for each data type, math instruction, and layout.\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn issue_2369() {\n        assert_no_lints(\n            \"## Plugin developer documentation\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn issue_2505_dont_flag_backup_links() {\n        assert_no_lints(\n            \"seamless switching to one of the backup links ideally happens without packet drops\",\n            PhrasalVerbAsCompoundNoun::default(),\n        );\n    }\n\n    #[test]\n    fn issue_2505_correct_setup_but_dont_flag_backup_link() {\n        assert_suggestion_result(\n            \"How to properly setup a backup link (and have it act like a backup again after stop/start of master link)\",\n            PhrasalVerbAsCompoundNoun::default(),\n            \"How to properly set up a backup link (and have it act like a backup again after stop/start of master link)\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/phrase_set_corrections/mod.rs",
    "content": "use crate::linting::LintKind;\n\nuse super::{LintGroup, MapPhraseSetLinter};\n\n#[cfg(test)]\nmod tests;\n\n/// Produce a [`LintGroup`] that looks for errors in sets of common phrases.\npub fn lint_group() -> LintGroup {\n    let mut group = LintGroup::default();\n\n    // Each correction pair has a single bad form and a single correct form.\n    macro_rules! add_1_to_1_mappings {\n        ($group:expr, {\n            $($name:expr => ($input_correction_pairs:expr, $message:expr, $description:expr $(, $lint_kind:expr)?)),+ $(,)?\n        }) => {\n            $(\n                $group.add_chunk_expr_linter(\n                    $name,\n                    Box::new(\n                        MapPhraseSetLinter::one_to_one(\n                            $input_correction_pairs,\n                            $message,\n                            $description,\n                            None$(.or(Some($lint_kind)))?,\n                        ),\n                    ),\n                );\n            )+\n        };\n    }\n\n    // Each correction pair has multiple bad forms and multiple correct forms.\n    macro_rules! add_many_to_many_mappings {\n        ($group:expr, {\n            $($name:expr => ($input_correction_multi_pairs:expr, $message:expr, $description:expr $(, $lint_kind:expr)?)),+ $(,)?\n        }) => {\n            $(\n                $group.add_chunk_expr_linter(\n                    $name,\n                    Box::new(\n                        MapPhraseSetLinter::many_to_many(\n                            $input_correction_multi_pairs,\n                            $message,\n                            $description,\n                            None$(.or(Some($lint_kind)))?,\n                        ),\n                    ),\n                );\n            )+\n        };\n    }\n\n    add_1_to_1_mappings!(group, {\n        \"Ado\" => (\n            &[\n                (\"further adieu\", \"further ado\"),\n                (\"much adieu\", \"much ado\"),\n            ],\n            \"Don't confuse the French/German `adieu`, meaning `farewell`, with the English `ado`, meaning `fuss`.\",\n            \"Corrects `adieu` to `ado`.\",\n            LintKind::Eggcorn\n        ),\n        \"Bollocks\" => (\n            &[\n                (\"bullocks!\", \"bollocks!\"),\n                (\"complete bullocks\", \"complete bollocks\"),\n                (\"dogs bullocks\", \"dogs bollocks\"),\n                (\"dog's bullocks\", \"dog's bollocks\"),\n                (\"is bullocks\", \"is bollocks\"),\n                (\"it's bullocks\", \"it's bollocks\"),\n                (\"its bullocks\", \"its bollocks\"),\n                (\"such bullocks\", \"such bollocks\"),\n                (\"that's bullocks\", \"that's bollocks\"),\n                (\"thats bullocks\", \"thats bollocks\"),\n                (\"total bullocks\", \"total bollocks\"),\n                (\"utter bullocks\", \"utter bollocks\"),\n                (\"was bullocks\", \"was bollocks\"),\n                (\"what bullocks\", \"what bollocks\"),\n            ],\n            \"The slang word for `nonsense` is `bollocks`. `Bullocks` are male cattle.\",\n            \"Corrects `bullocks` to `bollocks` when the meaning is `nonsense`.\",\n            LintKind::Spelling\n        ),\n        \"ChampAtTheBit\" => (\n            &[\n                (\"chomp at the bit\", \"champ at the bit\"),\n                (\"chomped at the bit\", \"champed at the bit\"),\n                (\"chomping at the bit\", \"champing at the bit\"),\n                (\"chomps at the bit\", \"champs at the bit\"),\n            ],\n            \"The correct idiom is `champ at the bit`.\",\n            \"Corrects `chomp at the bit` to the idiom `champ at the bit`, which has an equestrian origin referring to the way an anxious horse grinds its teeth against the metal part of the bridle.\",\n            LintKind::Eggcorn\n        ),\n        \"ClientOrServerSide\" => (\n            &[\n                (\"client's side\", \"client-side\"),\n                (\"server's side\", \"server-side\"),\n            ],\n            \"`Client-side` and `server-side` do not use an apostrophe.\",\n            \"Corrects extraneous apostrophe in `client's side` and `server's side`.\",\n            LintKind::Punctuation\n        ),\n        \"CompulseToCompel\" => (\n            &[\n                (\"compulse\", \"compel\"),\n                (\"compulsed\", \"compelled\"),\n                (\"compulses\", \"compels\"),\n                (\"compulsing\", \"compelling\"),\n            ],\n            \"Did you mean `compel` rather than the obsolete or archaic (and non-standard) `compulse`?\",\n            \"Suggests replacing the obsolete or archaic verb `compulse` with the standard `compel`.\",\n            LintKind::Nonstandard\n        ),\n        \"ConfirmThat\" => (\n            &[\n                (\"conform that\", \"confirm that\"),\n                (\"conformed that\", \"confirmed that\"),\n                (\"conforms that\", \"confirms that\"),\n                // Note: false positives in this inflection:\n                // \"is there any example of a case that isn't fully conforming that is supported today?\"\n                (\"conforming that\", \"confirming that\"),\n            ],\n            \"Did you mean `confirm` rather than `conform`?\",\n            \"Corrects `conform` typos to `confirm`.\",\n            LintKind::Typo\n        ),\n        \"DefiniteArticle\" => (\n            &[\n                (\"definitive article\", \"definite article\"),\n                (\"definitive articles\", \"definite articles\")\n            ],\n            \"The correct term for `the` is `definite article`.\",\n            \"The name of the word `the` is `definite article`.\",\n            LintKind::Usage\n        ),\n        \"DigestiveTract\" => (\n            &[\n                (\"digestive track\", \"digestive tract\"),\n                (\"digestive tracks\", \"digestive tracts\"),\n            ],\n            \"The correct term is digestive `tract`.\",\n            \"Corrects `digestive track` to `digestive tract`.\",\n            LintKind::WordChoice\n        ),\n        \"Discuss\" => (\n            &[\n                (\"discuss about\", \"discuss\"),\n                (\"discussed about\", \"discussed\"),\n                (\"discusses about\", \"discusses\"),\n                (\"discussing about\", \"discussing\"),\n            ],\n            \"`About` is redundant\",\n            \"Removes unnecessary `about` after `discuss`.\",\n            // or maybe Redundancy?\n            LintKind::Usage\n        ),\n        \"DoesOrDose\" => (\n            &[\n                // Negatives\n                (\"dose not\", \"does not\"),\n                // Pronouns\n                (\"he dose\", \"he does\"),\n                (\"it dose\", \"it does\"),\n                (\"she dose\", \"she does\"),\n                (\"someone dose\", \"someone does\"),\n                // Interrogatives\n                (\"how dose\", \"how does\"),\n                (\"when dose\", \"when does\"),\n                (\"where dose\", \"where does\"),\n                (\"who dose\", \"who does\"),\n                (\"why dose\", \"why does\"),\n            ],\n            \"This may be a typo for `does`.\",\n            \"Tries to correct typos of `dose` to `does`.\",\n            LintKind::Typo\n        ),\n        \"ExpandArgument\" => (\n            &[\n                (\"arg\", \"argument\"),\n                (\"args\", \"arguments\"),\n            ],\n            \"Use `argument` instead of `arg`\",\n            \"Expands the abbreviation `arg` to the full word `argument` for clarity.\",\n            LintKind::Style\n        ),\n        \"ExpandDependencies\" => (\n            &[\n                (\"dep\", \"dependency\"),\n                (\"deps\", \"dependencies\"),\n            ],\n            \"Use `dependencies` instead of `deps`\",\n            \"Expands the abbreviation `deps` to the full word `dependencies` for clarity.\",\n            LintKind::Style\n        ),\n        \"ExpandDeref\" => (\n            &[\n                (\"deref\", \"dereference\"),\n                (\"derefs\", \"dereferences\"),\n            ],\n            \"Use `dereference` instead of `deref`\",\n            \"Expands the abbreviation `deref` to the full word `dereference` for clarity.\",\n            LintKind::Style\n        ),\n        \"ExpandParameter\" => (\n            &[\n                (\"param\", \"parameter\"),\n                (\"params\", \"parameters\"),\n            ],\n            \"Use `parameter` instead of `param`\",\n            \"Expands the abbreviation `param` to the full word `parameter` for clarity.\",\n            LintKind::Style\n        ),\n        \"ExpandPointer\" => (\n            &[\n                (\"ptr\", \"pointer\"),\n                (\"ptrs\", \"pointers\"),\n            ],\n            \"Use `pointer` instead of `ptr`\",\n            \"Expands the abbreviation `ptr` to the full word `pointer` for clarity.\",\n            LintKind::Style\n        ),\n        \"ExpandStandardInputAndOutput\" => (\n            &[\n                (\"stdin\", \"standard input\"),\n                (\"stdout\", \"standard output\"),\n                (\"stderr\", \"standard error\"),\n            ],\n            \"Use `standard input`, `standard output`, and `standard error` instead of `stdin`, `stdout`, and `stderr`\",\n            \"Expands the abbreviations `stdin`, `stdout`, and `stderr` to the full words `standard input`, etc. for clarity.\",\n            LintKind::Style\n        ),\n        \"ExplanationMark\" => (\n            &[\n                (\"explanation mark\", \"exclamation mark\"),\n                (\"explanation marks\", \"exclamation marks\"),\n                (\"explanation point\", \"exclamation point\"),\n            ],\n            \"The correct names for the `!` punctuation are `exclamation mark` and `exclamation point`.\",\n            \"Corrects the eggcorn `explanation mark/point` to `exclamation mark/point`.\",\n            LintKind::Usage\n        ),\n        \"ExtendOrExtent\" => (\n            &[\n                (\"a certain extend\", \"a certain extent\"),\n                (\"to an extend\", \"to an extent\"),\n                (\"to some extend\", \"to some extent\"),\n                (\"to the extend that\", \"to the extent that\")\n            ],\n            \"Use `extent` for the noun and `extend` for the verb.\",\n            \"Corrects `extend` to `extent` when the context is a noun.\",\n            // ConfusedPair??\n            LintKind::WordChoice\n        ),\n        \"FlauntForFlout\" => (\n            &[\n                (\"flaunt the rules\", \"flout the rules\"),\n                (\"flaunts the rules\", \"flouts the rules\"),\n                (\"flaunted the rules\", \"flouted the rules\"),\n                (\"flaunting the rules\", \"flouting the rules\"),\n                (\"flaunt the law\", \"flout the law\"),\n                (\"flaunts the law\", \"flouts the law\"),\n                (\"flaunted the law\", \"flouted the law\"),\n                (\"flaunting the law\", \"flouting the law\"),\n                (\"flaunt the regulations\", \"flout the regulations\"),\n                (\"flaunt authority\", \"flout authority\"),\n                (\"flaunts authority\", \"flouts authority\"),\n                (\"flaunted authority\", \"flouted authority\"),\n                (\"flaunting authority\", \"flouting authority\"),\n                (\"flaunt convention\", \"flout convention\"),\n                (\"flaunts convention\", \"flouts convention\"),\n                (\"flaunted convention\", \"flouted convention\"),\n                (\"flaunting convention\", \"flouting convention\"),\n            ],\n            \"`Flaunt` means to show off. Use `flout` when you mean to openly disregard rules or conventions.\",\n            \"Corrects `flaunt` to `flout` when used with rule-like nouns.\",\n            LintKind::WordChoice\n        ),\n        \"FoamAtTheMouth\" => (\n            &[\n                (\"foam out the mouth\", \"foam at the mouth\"),\n                (\"foamed out the mouth\", \"foamed at the mouth\"),\n                (\"foaming out the mouth\", \"foaming at the mouth\"),\n                (\"foams out the mouth\", \"foams at the mouth\"),\n            ],\n            \"The correct idiom is `foam at the mouth`.\",\n            \"Corrects the idiom `foam out the mouth` to the standard `foam at the mouth`.\",\n            LintKind::Nonstandard\n        ),\n        \"FootTheBill\" => (\n            &[\n                (\"flip the bill\", \"foot the bill\"),\n                (\"flipped the bill\", \"footed the bill\"),\n                (\"flipping the bill\", \"footing the bill\"),\n                (\"flips the bill\", \"foots the bill\"),\n            ],\n            \"The standard expression is `foot the bill`.\",\n            \"Corrects `flip the bill` to `foot the bill`.\",\n            LintKind::Nonstandard\n        ),\n        \"GetUsedTo\" => (\n            &[\n                (\"get used of\", \"get used to\"),\n                (\"gets used of\", \"gets used to\"),\n                (\"getting used of\", \"getting used to\"),\n                (\"got used of\", \"got used to\"),\n                (\"gotten used of\", \"gotten used to\"),\n            ],\n            \"Use `used to` instead of `used of`.\",\n            \"Corrects `used of` to `used to`.\",\n            LintKind::Usage\n        ),\n        \"GrindToAHalt\" => (\n            &[\n                (\"grind to halt\", \"grind to a halt\"),\n                (\"grinding to halt\", \"grinding to a halt\"),\n                (\"grinds to halt\", \"grinds to a halt\"),\n                (\"ground to halt\", \"ground to a halt\"),\n            ],\n            \"You are missing the indefinite article `a` before `halt`.\",\n            \"Corrects the idiom `grind to halt` to the standard `grind to a halt`.\",\n            LintKind::Nonstandard\n        ),\n        \"HavePassed\" => (\n            &[\n                (\"had past\", \"had passed\"),\n                (\"has past\", \"has passed\"),\n                (\"have past\", \"have passed\"),\n                (\"having past\", \"having passed\"),\n            ],\n            \"Did you mean the verb `passed`?\",\n            \"Suggests `past` for `passed` in case a verb was intended.\",\n            // ConfusedPair?\n            LintKind::WordChoice\n        ),\n        \"HitTheNailOnTheHead\" => (\n            &[\n                (\"hit the nail in the head\", \"hit the nail on the head\"),\n                (\"hits the nail in the head\", \"hits the nail on the head\"),\n                (\"hitting the nail in the head\", \"hitting the nail on the head\"),\n                (\"hitted the nail in the head\", \"hitted the nail on the head\")\n            ],\n            \"The correct preposition in this idiom is `on`.\",\n            \"Corrects the eggcorn `hit the nail in the head` to the standard `hit the nail on the head`.\",\n            LintKind::Eggcorn\n        ),\n        \"HomeInOn\" => (\n            &[\n                (\"hone in on\", \"home in on\"),\n                (\"honed in on\", \"homed in on\"),\n                (\"hones in on\", \"homes in on\"),\n                (\"honing in on\", \"homing in on\"),\n            ],\n            \"Use `home in on` rather than `hone in on`\",\n            \"Corrects `hone in on` to `home in on`.\",\n            LintKind::Eggcorn\n        ),\n        \"InDetail\" => (\n            &[\n                (\"in details\", \"in detail\"),\n                (\"in more details\", \"in more detail\"),\n            ],\n            \"Use singular `in detail` for referring to a detailed description.\",\n            \"Corrects unidiomatic plural `in details` to `in detail`.\",\n            LintKind::Usage\n        ),\n        \"InvestIn\" => (\n            &[\n                // Verb\n                (\"invest into\", \"invest in\"),\n                (\"invested into\", \"invested in\"),\n                (\"investing into\", \"investing in\"),\n                (\"invests into\", \"invests in\"),\n                // Noun\n                (\"investment into\", \"investment in\"),\n                // Note \"investments into\" can be correct in some contexts\n            ],\n            \"Traditionally `invest` uses the preposition `in`.\",\n            \"`Invest` is traditionally followed by 'in,' not `into.`\",\n            LintKind::Usage\n        ),\n        \"LayoutVerb\" => (\n            &[\n                (\"layouted\", \"laid out\"),\n                (\"layouting\", \"laying out\"),\n                // Note \"layout\" and \"layouts\" are valid as nouns\n            ],\n            \"`layouted` and `layouting` are non-standard verb forms. Use `laid out` and `laying out` instead.\",\n            \"Flags nonstandard verb forms of `layout` (like `layouted` and `layouting`) and suggests the standard English verb forms (`laid out` and `laying out`).\",\n            LintKind::Usage\n        ),\n\n        // General litotes (double negatives) → direct positive suggestions\n        \"LitotesDirectPositive\" => (\n            &[\n                (\"not uncommon\", \"common\"),\n                (\"not unusual\", \"common\"),\n                (\"not insignificant\", \"significant\"),\n                (\"not unimportant\", \"important\"),\n                (\"not unlikely\", \"likely\"),\n                (\"not infrequent\", \"frequent\"),\n                (\"not inaccurate\", \"accurate\"),\n                (\"not unclear\", \"clear\"),\n                (\"not irrelevant\", \"relevant\"),\n                (\"not unpredictable\", \"predictable\"),\n                (\"not inadequate\", \"adequate\"),\n                (\"not unpleasant\", \"pleasant\"),\n                (\"not unreasonable\", \"reasonable\"),\n                (\"not impossible\", \"possible\"),\n                (\"more preferable\", \"preferable\"),\n                (\"not online\", \"offline\"),\n                (\"not offline\", \"online\"),\n            ],\n            \"Consider the direct form.\",\n            \"Offers direct-positive alternatives when double negatives might feel heavy.\",\n            LintKind::Style\n        ),\n\n        \"MakeDoWith\" => (\n            &[\n                (\"make due with\", \"make do with\"),\n                (\"made due with\", \"made do with\"),\n                (\"makes due with\", \"makes do with\"),\n                (\"making due with\", \"making do with\"),\n            ],\n            \"Use `do` instead of `due` when referring to a resource scarcity.\",\n            \"Corrects `make due` to `make do` when followed by `with`.\"\n        ),\n        \"MakeSense\" => (\n            &[\n                (\"make senses\", \"make sense\"),\n                (\"made senses\", \"made sense\"),\n                (\"makes senses\", \"makes sense\"),\n                (\"making senses\", \"making sense\")\n            ],\n            \"Use `sense` instead of `senses`.\",\n            \"Corrects `make senses` to `make sense`.\",\n            LintKind::Usage\n        ),\n        \"MootPoint\" => (\n            &[\n                (\"mute point\", \"moot point\"),\n                (\"point is mute\", \"point is moot\"),\n            ],\n            \"Use `moot` instead of `mute` when referring to a debatable or irrelevant point.\",\n            \"Corrects `mute` to `moot` in the phrase `moot point`.\",\n            LintKind::Eggcorn\n        ),\n        \"OperatingSystem\" => (\n            &[\n                (\"operative system\", \"operating system\"),\n                (\"operative systems\", \"operating systems\"),\n            ],\n            \"Did you mean `operating system`?\",\n            \"Ensures `operating system` is used correctly instead of `operative system`.\",\n            LintKind::Usage\n        ),\n        \"PassersBy\" => (\n            &[\n                (\"passerbys\", \"passersby\"),\n                (\"passer-bys\", \"passers-by\"),\n            ],\n            \"The correct plural is `passersby` or `passers-by`.\",\n            \"Corrects `passerbys` and `passer-bys` to `passersby` or `passers-by`.\",\n            LintKind::Grammar\n        ),\n        \"PeekBehindTheCurtain\" => (\n            &[\n                (\"peak behind the curtain\", \"peek behind the curtain\"),\n                (\"peaked behind the curtain\", \"peeked behind the curtain\"),\n                (\"peaking behind the curtain\", \"peeking behind the curtain\"),\n                (\"peaks behind the curtain\", \"peeks behind the curtain\"),\n            ],\n            \"The correct idiom is `peek behind the curtain`.\",\n            \"Corrects `peak behind the curtain` to `peek behind the curtain`.\",\n            LintKind::Eggcorn\n        ),\n        \"Piggyback\" => (\n            &[\n                (\"piggy bag\", \"piggyback\"),\n                (\"piggy bagged\", \"piggybacked\"),\n                (\"piggy bagging\", \"piggybacking\"),\n            ],\n            \"Did you mean `piggyback`?\",\n            \"Corrects the eggcorn `piggy bag` to `piggyback`, which is the proper term for riding on someone’s back or using an existing system.\",\n            LintKind::Eggcorn\n        ),\n        // Redundant degree modifiers on positives (double positives) → base form\n        \"RedundantSuperlatives\" => (\n            &[\n                (\"more optimal\", \"optimal\"),\n                (\"most optimal\", \"optimal\"),\n                (\"more ideal\", \"ideal\"),\n                (\"most ideal\", \"ideal\"),\n            ],\n            \"Avoid redundant degree modifiers; prefer the base adjective.\",\n            \"Simplifies redundant double positives like `most optimal` to the base form.\",\n            LintKind::Redundancy\n        ),\n        \"ResponsibilityFor\" => (\n            &[\n                (\"take responsibility of\", \"take responsibility for\"),\n                (\"took responsibility of\", \"took responsibility for\"),\n                (\"taken responsibility of\", \"taken responsibility for\"),\n                (\"taking responsibility of\", \"taking responsibility for\"),\n                (\"takes responsibility of\", \"takes responsibility for\"),\n                (\"assume responsibility of\", \"assume responsibility for\"),\n                (\"assumed responsibility of\", \"assumed responsibility for\"),\n                (\"assuming responsibility of\", \"assuming responsibility for\"),\n                (\"assumes responsibility of\", \"assumes responsibility for\"),\n                (\"claim responsibility of\", \"claim responsibility for\"),\n                (\"claimed responsibility of\", \"claimed responsibility for\"),\n                (\"claiming responsibility of\", \"claiming responsibility for\"),\n                (\"claims responsibility of\", \"claims responsibility for\"),\n            ],\n            \"The correct preposition is `for`, not `of`.\",\n            \"Corrects `take/assume/claim responsibility of` to `take/assume/claim responsibility for`.\",\n            LintKind::Usage\n        ),\n        \"ScapeGoat\" => (\n            &[\n                (\"an escape goat\", \"a scapegoat\"),\n                (\"escape goat\", \"scapegoat\"),\n                (\"escape goats\", \"scapegoats\"),\n            ],\n            \"If you're referring someone is being blamed unfairly, write it as a single word: `scapegoat`.\",\n            \"Corrects `scape goat` to `scapegoat`, which is the proper term for a person blamed for others' failures.\",\n            LintKind::Eggcorn\n        ),\n        \"SeamToSeem\" => (\n            &[\n                (\"seam to be\", \"seem to be\"),\n                (\"seams to be\", \"seems to be\"),\n                (\"i seam\", \"i seem\"),\n                (\"we seam\", \"we seem\"),\n                (\"we all seam\", \"we all seem\"),\n                (\"we both seam\", \"we both seem\"),\n                (\"you seam\", \"you seem\"),\n                (\"you all seam\", \"you all seem\"),\n                (\"you both seam\", \"you both seem\"),\n                (\"he seams\", \"he seems\"),\n                (\"she seams\", \"she seems\"),\n                (\"it seams\", \"it seems\"),\n                (\"they seam\", \"they seem\"),\n                (\"they all seam\", \"they all seem\"),\n                (\"they both seam\", \"they both seem\"),\n                (\"everything seams\", \"everything seems\"),\n                (\"everybody seams\", \"everybody seems\"),\n                (\"everyone seams\", \"everyone seems\")\n            ],\n            \"Did you mean `seem`? `Seam` refers to a line where two pieces of material are sewn together.\",\n            \"Corrects `seam` to `seem` when used as a verb meaning `to appear` or `to give the impression`.\",\n            LintKind::Spelling\n        ),\n        \"SubjunctiveWasToWere\" => (\n            &[\n                (\"if only there was\", \"if only there were\"),\n                (\"if only i was\", \"if only i were\"),\n                (\"if only he was\", \"if only he were\"),\n                (\"if only she was\", \"if only she were\"),\n                (\"if only it was\", \"if only it were\"),\n                (\"i wish there was\", \"i wish there were\"),\n                (\"i wish i was\", \"i wish i were\"),\n                (\"i wish he was\", \"i wish he were\"),\n                (\"i wish she was\", \"i wish she were\"),\n                (\"i wish it was\", \"i wish it were\")\n            ],\n            \"Use the subjunctive mood with `if only` or `I wish`. The correct form is `were`, not `was`.\",\n            \"Ensures proper use of the subjunctive mood in counterfactual conditional statements starting with `if only` or `I wish`.\",\n            LintKind::Grammar\n        ),\n        \"WreakHavoc\" => (\n            &[\n                (\"wreck havoc\", \"wreak havoc\"),\n                (\"wrecked havoc\", \"wreaked havoc\"),\n                (\"wrecking havoc\", \"wreaking havoc\"),\n                (\"wrecks havoc\", \"wreaks havoc\"),\n            ],\n            \"Did you mean `wreak havoc`?\",\n            \"Corrects the eggcorn `wreck havoc` to `wreak havoc`, which is the proper term for causing chaos or destruction.\",\n            LintKind::Eggcorn\n        ),\n        \"WroteToRote\" => (\n            &[\n                (\"by wrote\", \"by rote\"),\n                (\"by-wrote\", \"by-rote\"),\n                (\"wrote learning\", \"rote learning\"),\n                (\"wrote memorisation\", \"rote memorisation\"),\n                (\"wrote-memorisation\", \"rote-memorisation\"),\n                (\"wrote memorization\", \"rote memorization\"),\n                (\"wrote-memorization\", \"rote-memorization\"),\n                (\"wrote memorizing\", \"rote memorizing\"),\n            ],\n            \"Did you mean `rote` (mechanical memorization) instead of `wrote`?\",\n            \"Corrects `by wrote` to `by rote`.\",\n            LintKind::Eggcorn\n        )\n    });\n\n    add_many_to_many_mappings!(group, {\n        \"AwaitFor\" => (\n            &[\n                (&[\"await for\"], &[\"await\", \"wait for\"]),\n                (&[\"awaited for\"], &[\"awaited\", \"waited for\"]),\n                (&[\"awaiting for\"], &[\"awaiting\", \"waiting for\"]),\n                (&[\"awaits for\"], &[\"awaits\", \"waits for\"])\n            ],\n            \"`Await` and `for` are redundant when used together - use one or the other\",\n            \"Suggests using either `await` or `wait for` but not both, as they express the same meaning.\",\n            LintKind::Redundancy\n        ),\n        \"CommitmentTo\" => (\n            &[\n                (&[\"commitment toward\", \"commitment towards\"], &[\"commitment to\"]),\n                (&[\"commitments toward\", \"commitments towards\"], &[\"commitments to\"]),\n            ],\n            \"The correct preposition to use with `commitment` is `to`, not `toward` or `towards`.\",\n            \"Corrects `commitment toward/towards` to `commitment to`.\",\n            LintKind::Usage\n        ),\n        \"Copyright\" => (\n            &[\n                (&[\"copywrite\"], &[\"copyright\"]),\n                (&[\"copywrites\"], &[\"copyrights\"]),\n                (&[\"copywriting\"], &[\"copyrighting\"]),\n                (&[\"copywritten\", \"copywrited\", \"copywrote\"], &[\"copyrighted\"]),\n            ],\n            \"Did you mean `copyright`? `Copywrite` means to write copy (advertising text), while `copyright` is the legal right to control use of creative works.\",\n            \"Corrects `copywrite` to `copyright`. `Copywrite` refers to writing copy, while `copyright` is the legal right to creative works.\",\n            LintKind::WordChoice\n        ),\n        \"DoubleEdgedSword\" => (\n            &[\n                (&[\"double edge sword\", \"double-edge sword\", \"double edge-sword\", \"double-edge-sword\",\n                   \"double edged sword\", \"double edged-sword\", \"double-edged-sword\"], &[\"double-edged sword\"]),\n                (&[\"double edge swords\", \"double-edge swords\", \"double edge-swords\", \"double-edge-swords\",\n                   \"double edged swords\", \"double edged-swords\", \"double-edged-swords\"], &[\"double-edged swords\"]),\n            ],\n            \"Did you mean `double-edged sword`?\",\n            \"Corrects variants of `double-edged sword`.\",\n            LintKind::Spelling\n        ),\n        \"ExpandAlloc\" => (\n            &[\n                (&[\"alloc\"], &[\"allocate\", \"allocation\"]),\n                (&[\"allocs\"], &[\"allocates\", \"allocations\"]),\n            ],\n            \"Use `allocate` or `allocation` instead of `alloc`\",\n            \"Expands the abbreviation `alloc` to the full word `allocate` or `allocation` for clarity.\",\n            LintKind::Style\n        ),\n        \"ExpandDecl\" => (\n            &[\n                (&[\"decl\"], &[\"declaration\", \"declarator\"]),\n                (&[\"decls\"], &[\"declarations\", \"declarators\"])\n            ],\n            \"Use `declaration` or `declarator` instead of `decl`\",\n            \"Expands the abbreviation `decl` to the full word `declaration` or `declarator` for clarity.\",\n            LintKind::Style\n        ),\n        \"Expat\" => (\n            &[\n                (&[\"ex-pat\", \"ex pat\"], &[\"expat\"]),\n                (&[\"ex-pats\", \"ex pats\"], &[\"expats\"]),\n                (&[\"ex-pat's\", \"ex pat's\"], &[\"expat's\"]),\n            ],\n            \"The correct spelling is `expat` with no hyphen or space.\",\n            \"Corrects the mistake of writing `expat` as two words.\",\n            LintKind::Spelling\n        ),\n        \"Expatriate\" => (\n            &[\n                (&[\"ex-patriot\", \"expatriot\", \"ex patriot\"], &[\"expatriate\"]),\n                (&[\"ex-patriots\", \"expatriots\", \"ex patriots\"], &[\"expatriates\"]),\n                (&[\"ex-patriot's\", \"expatriot's\", \"ex patriot's\"], &[\"expatriate's\"]),\n            ],\n            \"Use the correct term for someone living abroad.\",\n            \"Fixes the misinterpretation of `expatriate`, ensuring the correct term is used for individuals residing abroad.\",\n            LintKind::Eggcorn\n        ),\n        \"GetRidOf\" => (\n            &[\n                (&[\"get rid off\", \"get ride of\", \"get ride off\"], &[\"get rid of\"]),\n                (&[\"gets rid off\", \"gets ride of\", \"gets ride off\"], &[\"gets rid of\"]),\n                (&[\"getting rid off\", \"getting ride of\", \"getting ride off\"], &[\"getting rid of\"]),\n                (&[\"got rid off\", \"got ride of\", \"got ride off\"], &[\"got rid of\"]),\n                (&[\"gotten rid off\", \"gotten ride of\", \"gotten ride off\"], &[\"gotten rid of\"]),\n            ],\n            \"The idiom is `to get rid of`, not `off` or `ride`.\",\n            \"Corrects common misspellings of the idiom `get rid of`.\",\n            LintKind::Typo\n        ),\n        \"HolyWar\" => (\n            &[\n                (&[\"holey war\", \"holly war\"], &[\"holy war\"]),\n                (&[\"holey wars\", \"holly wars\"], &[\"holy wars\"]),\n            ],\n            \"Literally for religious conflicts and metaphorically for tech preference debats, the correct spelling is `holy war`.\",\n            \"Corrects misspellings of `holy war`.\",\n            LintKind::Malapropism\n        ),\n        \"HowItLooksLike\" => (\n            &[\n                (&[\"how he looks like\"], &[\"how he looks\", \"what he looks like\"]),\n                (&[\"how it looks like\", \"how it look like\", \"how it look's like\"], &[\"how it looks\", \"what it looks like\"]),\n                (&[\"how she looks like\"], &[\"how she looks\", \"what she looks like\"]),\n                (&[\"how they look like\", \"how they looks like\"], &[\"how they look\", \"what they look like\"]),\n            ],\n            \"Don't use both `how` and `like` together to express similarity.\",\n            \"Corrects `how ... looks like` to `how ... looks` or `what ... looks like`.\",\n            LintKind::Grammar\n        ),\n        \"MakeItSeem\" => (\n            &[\n                (&[\"make it seems\"], &[\"make it seem\"]),\n                (&[\"made it seems\", \"made it seemed\"], &[\"made it seem\"]),\n                (&[\"makes it seems\"], &[\"makes it seem\"]),\n                (&[\"making it seems\"], &[\"making it seem\"]),\n            ],\n            \"Don't inflect `seem` in `make it seem`.\",\n            \"Corrects `make it seems` to `make it seem`.\"\n        ),\n        \"NervousWreck\" => (\n            &[\n                (&[\"nerve wreck\", \"nerve-wreck\"], &[\"nervous wreck\"]),\n                (&[\"nerve wrecks\", \"nerve-wrecks\"], &[\"nervous wrecks\"]),\n            ],\n            \"Use `nervous wreck` when referring to a person who is extremely anxious or upset. `Nerve wreck` is non-standard but sometimes used for events or situations.\",\n            \"Suggests using `nervous wreck` when referring to a person's emotional state.\",\n            LintKind::Eggcorn\n        ),\n        \"NotOnly\" => (\n            &[\n                (&[\"no only are\"], &[\"not only are\"]),\n                (&[\"no only is\"], &[\"not only is\"]),\n                (&[\"no only was\"], &[\"not only was\"]),\n                (&[\"no only were\"], &[\"not only were\"]),\n            ],\n            \"Use `not only` instead of `no only` in this expression.\",\n            \"Corrects `no only` to `not only` before forms of `to be`.\",\n            LintKind::Grammar\n        ),\n        \"RiseTheQuestion\" => (\n            &[\n                (&[\"rise the question\", \"arise the question\"], &[\"raise the question\"]),\n                (&[\"rises the question\", \"arises the question\"], &[\"raises the question\"]),\n                (\n                    &[\n                        \"risen the question\", \"rose the question\", \"rised the question\",\n                        \"arisen the question\", \"arose the question\", \"arised the question\"\n                    ],\n                    &[\"raised the question\"]\n                ),\n                (&[\"rising the question\", \"arising the question\"], &[\"raising the question\"])\n            ],\n            \"Use `raise` instead of `rise` when referring to the act of asking a question.\",\n            \"Corrects `rise the question` to `raise the question`.\",\n            LintKind::Grammar\n        ),\n        \"ToTooIdioms\" => (\n            &[\n                (&[\"a bridge to far\"], &[\"a bridge too far\"]),\n                (&[\"cake and eat it to\"], &[\"cake and eat it too\"]),\n                // \"a few to many\" has many false positives\n\n                (&[\"go to far\"], &[\"go too far\"]),\n                (&[\"goes to far\"], &[\"goes too far\"]),\n                (&[\"going to far\"], &[\"going too far\"]),\n                (&[\"gone to far\"], &[\"gone too far\"]),\n                (&[\"went to far\"], &[\"went too far\"]),\n\n                // \"in to deep\" has many false positives\n                (&[\"life's to short\", \"lifes to short\"], &[\"life's too short\"]),\n                (&[\"life is to short\"], &[\"life is too short\"]),\n\n                // \"one to many\" has many false positives\n                (&[\"put to fine a point\"], &[\"put too fine a point\"], ),\n\n                (&[\"speak to soon\"], &[\"speak too soon\"]),\n                (&[\"speaking to soon\"], &[\"speaking too soon\"]),\n                // \"speaks to soon\" is very rare\n                (&[\"spoke to soon\"], &[\"spoke too soon\"]),\n                (&[\"spoken to soon\"], &[\"spoken too soon\"]),\n\n                (&[\"think to much\"], &[\"think too much\"]),\n                (&[\"to big for\"], &[\"too big for\"]),\n                (&[\"to big to fail\"], &[\"too big to fail\"]),\n                (&[\"to good to be true\", \"too good too be true\"], &[\"too good to be true\"]),\n                (&[\"to much information\"], &[\"too much information\"]),\n            ],\n            \"Use `too` rather than `to` in this expression.\",\n            \"Corrects `to` used instead of `too`.\",\n            LintKind::Grammar\n        ),\n        \"TooTo\" => (\n            &[\n                (&[\"too big too fail\"], &[\"too big to fail\"])\n            ],\n            \"Use `to` rather than `too` in this expression.\",\n            \"Corrects `too` used instead of `to`.\",\n            LintKind::Grammar\n        ),\n        \"WholeEntire\" => (\n            &[\n                (&[\"whole entire\"], &[\"whole\", \"entire\"]),\n                // Avoid suggestions resulting in \"a entire ....\"\n                (&[\"a whole entire\"], &[\"a whole\", \"an entire\"]),\n            ],\n            \"Avoid redundancy. Use either `whole` or `entire` for referring to the complete amount or extent.\",\n            \"Corrects the redundancy in `whole entire` to `whole` or `entire`.\",\n            LintKind::Redundancy\n        ),\n        \"WorseOrWorst\" => (\n            &[\n                // worst -> worse\n                (&[\"a lot worst\", \"alot worst\"], &[\"a lot worse\"]),\n                (&[\"become worst\"], &[\"become worse\"]),\n                (&[\"became worst\"], &[\"became worse\"]),\n                (&[\"becomes worst\"], &[\"becomes worse\"]),\n                (&[\"becoming worst\"], &[\"becoming worse\"]),\n                (&[\"far worst\"], &[\"far worse\"]),\n                (&[\"get worst\"], &[\"get worse\"]),\n                (&[\"gets worst\"], &[\"gets worse\"]),\n                (&[\"getting worst\"], &[\"getting worse\"]),\n                (&[\"got worst\"], &[\"got worse\"]),\n                (&[\"gotten worst\"], &[\"gotten worse\"]),\n                (&[\"make it worst\"], &[\"make it worse\"]),\n                (&[\"made it worst\"], &[\"made it worse\"]),\n                (&[\"makes it worst\"], &[\"makes it worse\"]),\n                (&[\"making it worst\"], &[\"making it worse\"]),\n                (&[\"make them worst\"], &[\"make them worse\"]),\n                (&[\"made them worst\"], &[\"made them worse\"]),\n                (&[\"makes them worst\"], &[\"makes them worse\"]),\n                (&[\"making them worst\"], &[\"making them worse\"]),\n                (&[\"much worst\"], &[\"much worse\"]),\n                (&[\"turn for the worst\"], &[\"turn for the worse\"]),\n                (&[\"worst and worst\", \"worse and worst\", \"worst and worse\"], &[\"worse and worse\"]),\n                (&[\"worst than\"], &[\"worse than\"]),\n                // worse -> worst\n                (&[\"at worse\"], &[\"at worst\"]),\n                (&[\"worse case scenario\", \"worse-case scenario\", \"worse-case-scenario\"], &[\"worst-case scenario\"]),\n                (&[\"worse ever\"], &[\"worst ever\"]),\n            ],\n            \"`Worse` is for comparing and `worst` is for the extreme case.\",\n            \"Corrects `worse` and `worst` used in contexts where the other belongs.\",\n            LintKind::Agreement\n        )\n    });\n\n    group.set_all_rules_to(Some(true));\n\n    group\n}\n"
  },
  {
    "path": "harper-core/src/linting/phrase_set_corrections/tests.rs",
    "content": "use crate::linting::tests::{\n    assert_good_and_bad_suggestions, assert_lint_count, assert_no_lints, assert_suggestion_result,\n};\n\nuse super::lint_group;\n\n// 1:1 tests\n\n// Ado\n\n#[test]\nfn corrects_further_ado() {\n    assert_suggestion_result(\n        \"... but we finally hit a great spot, so without further adieu.\",\n        lint_group(),\n        \"... but we finally hit a great spot, so without further ado.\",\n    );\n}\n\n#[test]\nfn corrects_much_ado() {\n    assert_suggestion_result(\n        \"After much adieu this functionality is now available.\",\n        lint_group(),\n        \"After much ado this functionality is now available.\",\n    );\n}\n\n// Bollocks\n\n#[test]\nfn fix_complete_bullocks() {\n    assert_suggestion_result(\n        \"why you think some of them are complete bullocks or would be a bad idea\",\n        lint_group(),\n        \"why you think some of them are complete bollocks or would be a bad idea\",\n    );\n}\n\n#[test]\nfn fix_dogs() {\n    assert_suggestion_result(\n        \"The cat's ass, priceless! I have to steal that one. My go to phrase is “The dog's bullocks.\",\n        lint_group(),\n        \"The cat's ass, priceless! I have to steal that one. My go to phrase is “The dog's bollocks.\",\n    );\n}\n\n#[test]\nfn fix_dogs_no_apostrophe_bullocks() {\n    assert_suggestion_result(\n        \"some dumb rubbish that i do not give a dogs bullocks about\",\n        lint_group(),\n        \"some dumb rubbish that i do not give a dogs bollocks about\",\n    );\n}\n\n#[test]\nfn fix_is_bullocks() {\n    assert_suggestion_result(\n        \"for me this is bullocks, when the same user can sudo rm -rf\",\n        lint_group(),\n        \"for me this is bollocks, when the same user can sudo rm -rf\",\n    );\n}\n\n#[test]\nfn fix_its_bullocks() {\n    assert_suggestion_result(\n        \"I'm too lazy to explain why, but I think it's bullocks.\",\n        lint_group(),\n        \"I'm too lazy to explain why, but I think it's bollocks.\",\n    );\n}\n\n#[test]\nfn fix_its_no_apostrophe_bullocks() {\n    assert_suggestion_result(\n        \"but lance, dont claim to be clean, because we all know its bullocks\",\n        lint_group(),\n        \"but lance, dont claim to be clean, because we all know its bollocks\",\n    );\n}\n\n#[test]\nfn fix_such_bullocks() {\n    assert_suggestion_result(\n        \"This is why numerology is such bullocks.\",\n        lint_group(),\n        \"This is why numerology is such bollocks.\",\n    );\n}\n\n#[test]\nfn fix_thats_bullocks() {\n    assert_suggestion_result(\n        \"Respectfully, that's bullocks.\",\n        lint_group(),\n        \"Respectfully, that's bollocks.\",\n    );\n}\n\n#[test]\nfn fix_thats_no_apostrophe_bullocks() {\n    assert_suggestion_result(\n        \"In CSS thats bullocks as directives have priority in the order they are defined.\",\n        lint_group(),\n        \"In CSS thats bollocks as directives have priority in the order they are defined.\",\n    );\n}\n\n#[test]\nfn fix_total_bullocks() {\n    assert_suggestion_result(\n        \"Pointing out to the audience that their gravity explanation is total bullocks would seem an ethical must as well.\",\n        lint_group(),\n        \"Pointing out to the audience that their gravity explanation is total bollocks would seem an ethical must as well.\",\n    );\n}\n\n#[test]\nfn fix_utter_bullocks() {\n    assert_suggestion_result(\n        \"what utter bullocks a self employed person will get £94 under corona virus crisis\",\n        lint_group(),\n        \"what utter bollocks a self employed person will get £94 under corona virus crisis\",\n    );\n}\n\n#[test]\nfn fix_was_bullocks() {\n    assert_suggestion_result(\n        \"a few years ago I thought that was bullocks\",\n        lint_group(),\n        \"a few years ago I thought that was bollocks\",\n    );\n}\n\n#[test]\nfn fix_bullocks_exclamation() {\n    assert_suggestion_result(\n        \"throw(new Error('Bullocks!')));\",\n        lint_group(),\n        \"throw(new Error('Bollocks!')));\",\n    );\n}\n\n#[test]\nfn dont_flag_herd_of_bullocks() {\n    assert_no_lints(\n        \"driven back (literally) by a herd of bullocks across the path\",\n        lint_group(),\n    );\n}\n\n// ChampAtTheBit\n#[test]\nfn correct_chomp_at_the_bit() {\n    assert_suggestion_result(\n        \"so other than rolling back to older drivers i might have to chomp at the bit for a while longer yet\",\n        lint_group(),\n        \"so other than rolling back to older drivers i might have to champ at the bit for a while longer yet\",\n    );\n}\n\n#[test]\nfn correct_chomped_at_the_bit() {\n    assert_suggestion_result(\n        \"I chomped at the bit, frustrated by my urge to go faster, while my husband chafed at what I thought was a moderate pace.\",\n        lint_group(),\n        \"I champed at the bit, frustrated by my urge to go faster, while my husband chafed at what I thought was a moderate pace.\",\n    );\n}\n\n#[test]\nfn correct_chomping_at_the_bit() {\n    assert_suggestion_result(\n        \"Checking in to see when the Windows install will be ready. I am chomping at the bit!\",\n        lint_group(),\n        \"Checking in to see when the Windows install will be ready. I am champing at the bit!\",\n    );\n}\n\n#[test]\nfn correct_chomps_at_the_bit() {\n    assert_suggestion_result(\n        \"nobody chomps at the bit to make sure these are maintained, current, complete, and error free\",\n        lint_group(),\n        \"nobody champs at the bit to make sure these are maintained, current, complete, and error free\",\n    );\n}\n\n// ClientOrServerSide\n\n// -client's side-\n#[test]\nfn correct_clients_side() {\n    assert_suggestion_result(\n        \"I want to debug this server-side as I cannot find out why the connection is being refused from the client's side.\",\n        lint_group(),\n        \"I want to debug this server-side as I cannot find out why the connection is being refused from the client-side.\",\n    );\n}\n\n// -server's side-\n#[test]\nfn correct_servers_side() {\n    assert_suggestion_result(\n        \"A client-server model where the client can execute commands in a terminal on the server's side\",\n        lint_group(),\n        \"A client-server model where the client can execute commands in a terminal on the server-side\",\n    );\n}\n\n// CompulseToCompel\n\n#[test]\nfn correct_compulse() {\n    assert_suggestion_result(\n        \"Play Store will soon compulse to use SDK 30 on any app updates , and it's mandatory to have SDK 30 for new apps.\",\n        lint_group(),\n        \"Play Store will soon compel to use SDK 30 on any app updates , and it's mandatory to have SDK 30 for new apps.\",\n    );\n}\n\n#[test]\nfn correct_compulsed() {\n    assert_suggestion_result(\n        \"Just alpha, but now i am compulsed to work 10.6 into the github actions and insane docker environment :)\",\n        lint_group(),\n        \"Just alpha, but now i am compelled to work 10.6 into the github actions and insane docker environment :)\",\n    );\n}\n\n#[test]\nfn correct_compulses() {\n    assert_suggestion_result(\n        \"Occasionally, a film comes along that compulses me to make a fan poster.\",\n        lint_group(),\n        \"Occasionally, a film comes along that compels me to make a fan poster.\",\n    );\n}\n\n#[test]\nfn correct_compulsing() {\n    assert_suggestion_result(\n        \"We have an button enabled to prompt user to download the app whenever we find difference in version number in our servlet war file and apk verision compulsing user to update.\",\n        lint_group(),\n        \"We have an button enabled to prompt user to download the app whenever we find difference in version number in our servlet war file and apk verision compelling user to update.\",\n    );\n}\n\n// ConfirmThat\n\n#[test]\nfn correct_conform_that() {\n    assert_suggestion_result(\n        \"the WCAG requires every view of the page to conform that we move this\",\n        lint_group(),\n        \"the WCAG requires every view of the page to confirm that we move this\",\n    );\n}\n\n#[test]\nfn corrects_conformed_that() {\n    assert_suggestion_result(\n        \"I have conformed that works now.\",\n        lint_group(),\n        \"I have confirmed that works now.\",\n    );\n}\n\n#[test]\nfn corrects_conforms_that() {\n    assert_suggestion_result(\n        \"I conformed that with the correct configuration, this is working correctly.\",\n        lint_group(),\n        \"I confirmed that with the correct configuration, this is working correctly.\",\n    );\n}\n\n#[test]\n#[ignore = \"False positive not yet handled.\"]\nfn dont_flag_conforming_that() {\n    assert_lint_count(\n        \"is there any example of a case that isn't fully conforming that is supported today?\",\n        lint_group(),\n        0,\n    );\n}\n\n#[test]\nfn corrects_conforming_that() {\n    assert_suggestion_result(\n        \"Thanks for conforming that this issue is fixed in the latest version.\",\n        lint_group(),\n        \"Thanks for confirming that this issue is fixed in the latest version.\",\n    );\n}\n\n// DefiniteArticle\n\n#[test]\nfn corrects_definite_article() {\n    assert_suggestion_result(\n        \"As for format of outputs: the spec defines the field as using the singular definitive article \\\"the\\\"\",\n        lint_group(),\n        \"As for format of outputs: the spec defines the field as using the singular definite article \\\"the\\\"\",\n    );\n}\n\n#[test]\n#[ignore = \"Title case capitalization problem causes this one to fail too.\"]\nfn corrects_definite_articles_title_case() {\n    assert_suggestion_result(\n        \"01 Definitive Articles: De or Het. Before starting more complicated topics in Dutch grammar, you should be aware of the articles.\",\n        lint_group(),\n        \"01 Definite Articles: De or Het. Before starting more complicated topics in Dutch grammar, you should be aware of the articles.\",\n    );\n}\n\n#[test]\nfn corrects_definite_articles_lowercase() {\n    assert_suggestion_result(\n        \".. definitive articles -та /-ta/ and -те /-te/ (postfixed in Bulgarian).\",\n        lint_group(),\n        \".. definite articles -та /-ta/ and -те /-te/ (postfixed in Bulgarian).\",\n    );\n}\n\n// DigestiveTract\n\n#[test]\nfn dont_flag_digestive_track() {\n    assert_suggestion_result(\n        \"In infants less than a year old, because their digestive track is not finished developing yet\",\n        lint_group(),\n        \"In infants less than a year old, because their digestive tract is not finished developing yet\",\n    );\n}\n\n#[test]\nfn corrects_digestive_tracks() {\n    assert_suggestion_result(\n        \"The digestive tracks of mammals are complex and diverse, with each species having its own unique digestive system.\",\n        lint_group(),\n        \"The digestive tracts of mammals are complex and diverse, with each species having its own unique digestive system.\",\n    );\n}\n\n// Discuss\n// -none-\n\n// DoesOrDose\n\n// -does not-\n#[test]\nfn corrects_dose_not() {\n    assert_suggestion_result(\n        \"It dose not run windows ?\",\n        lint_group(),\n        \"It does not run windows ?\",\n    );\n}\n\n// -dose it true positive-\n#[test]\n#[ignore = \"due to false positives this can't be fixed yet\"]\nfn corrects_dose_it() {\n    assert_suggestion_result(\n        \"dose it support zh_cn ？\",\n        lint_group(),\n        \"does it support zh_cn ？\",\n    );\n}\n\n// -dose it- noun false positives\n\n// it should be noted that (in an excessive dose) (it might have an opposite effect)\n#[test]\n#[ignore = \"would be a false positive in a naive implementation\"]\nfn dont_flag_excessive_dose_it_might() {\n    assert_lint_count(\n        \"it should be noted that in an excessive dose it might have an opposite effect\",\n        lint_group(),\n        0,\n    );\n}\n\n// When the person receives (a prescribed second dose) (it is not counted ttwice)\n#[test]\n#[ignore = \"would be a false positive in a naive implementation\"]\nfn dont_flag_second_dose_it_is_not() {\n    assert_lint_count(\n        \"When the person receives a prescribed second dose it is not counted ttwice\",\n        lint_group(),\n        0,\n    );\n}\n\n// (At that small a dose) (it was pleasent).\n#[test]\n#[ignore = \"would be a false positive in a naive implementation\"]\nfn dont_flag_a_dose_it_was() {\n    assert_lint_count(\"At that small a dose it was pleasent.\", lint_group(), 0);\n}\n\n// I do not know (what dose) (it takes) to trip out, but I don't think I could stay awake to find out.\n#[test]\n#[ignore = \"would be a false positive in a naive implementation\"]\nfn dont_flag_what_dose_it_takes() {\n    assert_lint_count(\n        \"I do not know what dose it takes to trip out, but I don't think I could stay awake to find out.\",\n        lint_group(),\n        0,\n    );\n}\n\n// -dose it- verb false positives\n\n#[test]\n#[ignore = \"would be a false positive in a naive implementation\"]\nfn dont_flag_to_dose_it() {\n    assert_lint_count(\n        \"And then I have to re-add the salts back to it to dose it back up to drinkable.\",\n        lint_group(),\n        0,\n    );\n}\n\n#[test]\n#[ignore = \"would be a false positive in a naive implementation\"]\nfn dont_flag_dont_dose_it_too_high() {\n    assert_lint_count(\n        \"So my conclusion is: don't dose it too high or it actually is dangerous and not pleasant at all\",\n        lint_group(),\n        0,\n    );\n}\n\n#[test]\n#[ignore = \"would be a false positive in a naive implementation\"]\nfn dont_flag_to_dose_it_off() {\n    assert_lint_count(\n        \"the only solution the other hopefully-dominant-reasonable-adult-human mind can find, is to dose it off, hoping the drowsiness can keep the fear at bay\",\n        lint_group(),\n        0,\n    );\n}\n\n// -he/she/it does-\n#[test]\nfn corrects_he_does() {\n    assert_suggestion_result(\n        \"This validate each and every field of your from with nice dotted red color warring for the user, incase he dose some mistakes.\",\n        lint_group(),\n        \"This validate each and every field of your from with nice dotted red color warring for the user, incase he does some mistakes.\",\n    );\n}\n\n#[test]\nfn corrects_she_does() {\n    assert_suggestion_result(\n        \"we wont agree on everything she dose thats what a real person would feel like\",\n        lint_group(),\n        \"we wont agree on everything she does thats what a real person would feel like\",\n    );\n}\n\n// -it does-\n#[test]\nfn corrects_it_dose() {\n    assert_suggestion_result(\n        \"it dose work without WEBP enabled\",\n        lint_group(),\n        \"it does work without WEBP enabled\",\n    );\n}\n\n// -someone does-\n#[test]\nfn corrects_someone_dose() {\n    assert_suggestion_result(\n        \"Hopefully someone dose, I'm not good at C programing....\",\n        lint_group(),\n        \"Hopefully someone does, I'm not good at C programing....\",\n    );\n}\n\n// -interrogatives-\n#[test]\nfn corrects_how_dose() {\n    assert_suggestion_result(\n        \"How dose qsv-copy works?\",\n        lint_group(),\n        \"How does qsv-copy works?\",\n    );\n}\n\n#[test]\n#[ignore = \"false positive not yet detected\"]\nfn dont_fix_how_dose_false_positive() {\n    assert_lint_count(\n        \"Work in progress exploration of how dose modifications throughout a trial can also induce bias in the exposure-response relationships.\",\n        lint_group(),\n        0,\n    );\n}\n\n#[test]\nfn corrects_when_dose() {\n    assert_suggestion_result(\n        \"When dose reusebale variable sync between device? #2634\",\n        lint_group(),\n        \"When does reusebale variable sync between device? #2634\",\n    );\n}\n\n#[test]\n#[ignore = \"false positive not yet detected\"]\nfn dont_fix_when_dose_false_positive() {\n    assert_lint_count(\n        \"Should we remove the dose when dose has been applied\",\n        lint_group(),\n        0,\n    );\n}\n\n#[test]\nfn corrects_where_dose() {\n    assert_suggestion_result(\n        \"where dose the password store?\",\n        lint_group(),\n        \"where does the password store?\",\n    );\n}\n\n#[test]\n#[ignore = \"false positive not yet detected\"]\nfn dont_fix_where_dose_false_positive() {\n    assert_lint_count(\n        \"added some better error handling for the weird case where dose files have no dose...\",\n        lint_group(),\n        0,\n    );\n}\n\n#[test]\nfn corrects_who_dose() {\n    assert_suggestion_result(\n        \"Who dose knows the problem?\",\n        lint_group(),\n        \"Who does knows the problem?\",\n    );\n}\n\n#[test]\nfn corrects_why_dose() {\n    assert_suggestion_result(\n        \"why dose the path is random ?\",\n        lint_group(),\n        \"why does the path is random ?\",\n    );\n}\n\n// Note: no false positive detected for 'why does'. Only true positives.\n\n// ExpandArgument\n\n#[test]\nfn corrects_arg() {\n    assert_suggestion_result(\n        \"but I cannot figure out how to flag an arg as required\",\n        lint_group(),\n        \"but I cannot figure out how to flag an argument as required\",\n    );\n}\n\n#[test]\nfn corrects_args() {\n    assert_suggestion_result(\n        \"but every test I've done shows args as being about 65% faster\",\n        lint_group(),\n        \"but every test I've done shows arguments as being about 65% faster\",\n    );\n}\n\n// ExpandDecl\n\n#[test]\nfn corrects_decl() {\n    assert_suggestion_result(\n        \"Yeah, I agree a forward decl would be preferable in this case.\",\n        lint_group(),\n        \"Yeah, I agree a forward declaration would be preferable in this case.\",\n    );\n}\n\n#[test]\nfn corrects_decls() {\n    assert_suggestion_result(\n        \"Accessing type decls from pointer types\",\n        lint_group(),\n        \"Accessing type declarations from pointer types\",\n    );\n}\n\n// ExpandDependency\n// -none-\n\n// ExpandDereference\n\n#[test]\nfn expand_deref() {\n    assert_suggestion_result(\n        \"Should raw pointer deref/projections have to be in-bounds?\",\n        lint_group(),\n        \"Should raw pointer dereference/projections have to be in-bounds?\",\n    );\n}\n\n#[test]\nfn corrects_derefs() {\n    assert_suggestion_result(\n        \"A contiguous-in-memory double-ended queue that derefs into a slice - gnzlbg/slice_deque.\",\n        lint_group(),\n        \"A contiguous-in-memory double-ended queue that dereferences into a slice - gnzlbg/slice_deque.\",\n    );\n}\n\n// ExpandParam\n\n#[test]\nfn corrects_param() {\n    assert_suggestion_result(\n        \"If I use the following to set an endDate param with a default value\",\n        lint_group(),\n        \"If I use the following to set an endDate parameter with a default value\",\n    );\n}\n\n#[test]\nfn corrects_params() {\n    assert_suggestion_result(\n        \"the params are not loaded in the R environment when using the terminal\",\n        lint_group(),\n        \"the parameters are not loaded in the R environment when using the terminal\",\n    );\n}\n\n// ExpandPointer\n\nfn correct_ptr() {\n    assert_suggestion_result(\n        \"How else would you construct a slice from a ptr and a length?\",\n        lint_group(),\n        \"How else would you construct a slice from a pointer and a length?\",\n    );\n}\n\nfn correct_ptrs() {\n    assert_suggestion_result(\n        \"FixedBufferAllocator.free not freeing ptrs\",\n        lint_group(),\n        \"FixedBufferAllocator.free not freeing pointers\",\n    );\n}\n\n// ExpandSpecification\n\n// ExpandStandardInput\n// -none-\n\n// ExpandStandardOutput\n// -none-\n\n// ExplanationMark\n#[test]\nfn detect_explanation_mark_atomic() {\n    assert_suggestion_result(\"explanation mark\", lint_group(), \"exclamation mark\");\n}\n\n#[test]\nfn detect_explanation_marks_atomic() {\n    assert_suggestion_result(\"explanation marks\", lint_group(), \"exclamation marks\");\n}\n\n#[test]\nfn detect_explanation_mark_real_world() {\n    assert_suggestion_result(\n        \"Note that circled explanation mark, question mark, plus and arrows may be significantly harder to distinguish than their uncircled variants.\",\n        lint_group(),\n        \"Note that circled exclamation mark, question mark, plus and arrows may be significantly harder to distinguish than their uncircled variants.\",\n    );\n}\n\n#[test]\nfn detect_explanation_marks_real_world() {\n    assert_suggestion_result(\n        \"this issue: html: properly handle explanation marks in comments\",\n        lint_group(),\n        \"this issue: html: properly handle exclamation marks in comments\",\n    );\n}\n\n#[test]\nfn detect_explanation_point_atomic() {\n    assert_suggestion_result(\"explanation point\", lint_group(), \"exclamation point\");\n}\n\n#[test]\nfn detect_explanation_point_real_world() {\n    assert_suggestion_result(\n        \"js and makes an offhand mention that you can disable inbuilt plugin with an explanation point (e.g. !error ).\",\n        lint_group(),\n        \"js and makes an offhand mention that you can disable inbuilt plugin with an exclamation point (e.g. !error ).\",\n    );\n}\n\n// ExtendOrExtent\n\n#[test]\nfn correct_certain_extend() {\n    assert_suggestion_result(\n        \"This is a PowerShell script to automate client pentests / checkups - at least to a certain extend.\",\n        lint_group(),\n        \"This is a PowerShell script to automate client pentests / checkups - at least to a certain extent.\",\n    );\n}\n\n#[test]\nfn correct_to_the_extend() {\n    assert_suggestion_result(\n        \"Our artifacts are carefully documented and well-structured to the extend that reuse is facilitated.\",\n        lint_group(),\n        \"Our artifacts are carefully documented and well-structured to the extent that reuse is facilitated.\",\n    );\n}\n\n#[test]\nfn correct_to_some_extend() {\n    assert_suggestion_result(\n        \"Hi, I'm new to Pydantic and to some extend python, and I have a question that I haven't been able to figure out from the Docs.\",\n        lint_group(),\n        \"Hi, I'm new to Pydantic and to some extent python, and I have a question that I haven't been able to figure out from the Docs.\",\n    );\n}\n\n#[test]\nfn correct_to_an_extend() {\n    assert_suggestion_result(\n        \"It mimics (to an extend) the way in which Chrome requests SSO cookies with the Windows 10 accounts extension.\",\n        lint_group(),\n        \"It mimics (to an extent) the way in which Chrome requests SSO cookies with the Windows 10 accounts extension.\",\n    );\n}\n\n// FlauntForFlout\n\n#[test]\nfn corrects_flaunt_the_rules() {\n    assert_suggestion_result(\n        \"Some users flaunt the rules of punctuation.\",\n        lint_group(),\n        \"Some users flout the rules of punctuation.\",\n    );\n}\n\n#[test]\nfn corrects_flaunted_the_law() {\n    assert_suggestion_result(\n        \"He flaunted the law for personal gain.\",\n        lint_group(),\n        \"He flouted the law for personal gain.\",\n    );\n}\n\n#[test]\nfn corrects_flaunting_authority() {\n    assert_suggestion_result(\n        \"She was flaunting authority at every turn.\",\n        lint_group(),\n        \"She was flouting authority at every turn.\",\n    );\n}\n\n#[test]\nfn allows_flaunt_wealth() {\n    assert_no_lints(\"He likes to flaunt his wealth.\", lint_group());\n}\n\n// FoamAtTheMouth\n\n#[test]\nfn correct_foam_out_the_mouth() {\n    assert_suggestion_result(\n        \"and he gave him a drink that made him foam out the mouth and die\",\n        lint_group(),\n        \"and he gave him a drink that made him foam at the mouth and die\",\n    );\n}\n\n#[test]\nfn correct_foamed_out_the_mouth() {\n    assert_suggestion_result(\n        \"You can see in some shots they've foamed out the mouth, and it's apparent their poisoned.\",\n        lint_group(),\n        \"You can see in some shots they've foamed at the mouth, and it's apparent their poisoned.\",\n    );\n}\n\n#[test]\nfn correct_foaming_out_the_mouth() {\n    assert_suggestion_result(\n        \"choking or foaming out the mouth or something like that, leading up to death\",\n        lint_group(),\n        \"choking or foaming at the mouth or something like that, leading up to death\",\n    );\n}\n\n#[test]\nfn correct_foams_out_the_mouth() {\n    assert_suggestion_result(\n        \"Elaine can't swallow, foams out the mouth and Kramer says she has rabies just like his friend Bob Sacamano after she gets bit by the guy's dog\",\n        lint_group(),\n        \"Elaine can't swallow, foams at the mouth and Kramer says she has rabies just like his friend Bob Sacamano after she gets bit by the guy's dog\",\n    );\n}\n\n// FootTheBill\n\n#[test]\nfn correct_flip_the_bill() {\n    assert_suggestion_result(\n        \"- SQL Compare (If the company will flip the bill)\",\n        lint_group(),\n        \"- SQL Compare (If the company will foot the bill)\",\n    );\n}\n\n#[test]\nfn correct_flipped_the_bill() {\n    assert_suggestion_result(\n        \"As a meetup we were extremely lucky that NOVI flipped the bill for our in-person events.\",\n        lint_group(),\n        \"As a meetup we were extremely lucky that NOVI footed the bill for our in-person events.\",\n    );\n}\n\n#[test]\nfn correct_flipping_the_bill() {\n    assert_suggestion_result(\n        \"for the simple reason that there were no multimillion dollar company flipping the bill\",\n        lint_group(),\n        \"for the simple reason that there were no multimillion dollar company footing the bill\",\n    );\n}\n\n#[test]\nfn correct_flips_the_bill() {\n    assert_suggestion_result(\n        \"There seems to be a perennial debate in Illinois between urbanites and rural folk about who really flips the bill.\",\n        lint_group(),\n        \"There seems to be a perennial debate in Illinois between urbanites and rural folk about who really foots the bill.\",\n    );\n}\n\n// GetUsedTo\n\n//-get used of-\n#[test]\nfn corrects_get_used_of() {\n    assert_suggestion_result(\n        \"I am following the examples in the documentation in order to get used of comets.\",\n        lint_group(),\n        \"I am following the examples in the documentation in order to get used to comets.\",\n    );\n}\n\n//-gets used of-\n#[test]\nfn corrects_gets_used_of() {\n    assert_suggestion_result(\n        \"its like she gets used of her food and becomes spoiled\",\n        lint_group(),\n        \"its like she gets used to her food and becomes spoiled\",\n    );\n}\n\n//-getting used of-\n#[test]\nfn corrects_getting_used_of() {\n    assert_suggestion_result(\n        \"Here you can find a guide to getting used of the most important methods of magum.\",\n        lint_group(),\n        \"Here you can find a guide to getting used to the most important methods of magum.\",\n    );\n}\n\n//-got used of-\n#[test]\nfn corrects_got_used_of() {\n    assert_suggestion_result(\n        \"we users actually got used of such delays\",\n        lint_group(),\n        \"we users actually got used to such delays\",\n    );\n}\n\n//-gotten used of-\n#[test]\nfn corrects_gotten_used_of() {\n    assert_suggestion_result(\n        \"The tutorial has indeed been of help, and I've gotten used of using Hull.\",\n        lint_group(),\n        \"The tutorial has indeed been of help, and I've gotten used to using Hull.\",\n    );\n}\n\n// GrindToAHalt\n\n#[test]\nfn corrects_grind_to_halt() {\n    // Without this it will eventually grind to halt as it backs up upon itself\n    assert_suggestion_result(\n        \"Without this it will eventually grind to halt as it backs up upon itself\",\n        lint_group(),\n        \"Without this it will eventually grind to a halt as it backs up upon itself\",\n    );\n}\n\n#[test]\n#[ignore = \"Fails due to how replace_with_matched_case works\"]\nfn corrects_grind_to_halt_title_case() {\n    assert_suggestion_result(\n        \"Smart Search Tools Cause System to Grind to Halt\",\n        lint_group(),\n        \"Smart Search Tools Cause System to Grind to a Halt\",\n    );\n}\n\n#[test]\nfn corrects_grinding_to_halt() {\n    assert_suggestion_result(\n        \"app grinding to halt when loading many objects\",\n        lint_group(),\n        \"app grinding to a halt when loading many objects\",\n    );\n}\n\n#[test]\nfn corrects_grinds_to_halt() {\n    assert_suggestion_result(\n        \"If your machine grinds to halt due to memory oversubscription, you may want to try to set the MOLD_JOBS environment variable to 1\",\n        lint_group(),\n        \"If your machine grinds to a halt due to memory oversubscription, you may want to try to set the MOLD_JOBS environment variable to 1\",\n    );\n}\n\n#[test]\nfn corrects_ground_to_halt() {\n    assert_suggestion_result(\n        \"As you have probably guessed, my work on my fork has ground to halt.\",\n        lint_group(),\n        \"As you have probably guessed, my work on my fork has ground to a halt.\",\n    );\n}\n\n// HavePassed\n\n#[test]\nfn correct_has_past() {\n    assert_suggestion_result(\n        \"Track the amount of time that has past since a point in time.\",\n        lint_group(),\n        \"Track the amount of time that has passed since a point in time.\",\n    );\n}\n\n#[test]\nfn correct_have_past() {\n    assert_suggestion_result(\n        \"Another 14+ days have past, any updates on this?\",\n        lint_group(),\n        \"Another 14+ days have passed, any updates on this?\",\n    );\n}\n\n#[test]\nfn correct_had_past() {\n    assert_suggestion_result(\n        \"Few days had past, so im starting to thinks there is a problem in my local version.\",\n        lint_group(),\n        \"Few days had passed, so im starting to thinks there is a problem in my local version.\",\n    );\n}\n\n#[test]\nfn correct_having_past() {\n    assert_suggestion_result(\n        \"Return to computer, with enough time having past for the computer to go to full sleep.\",\n        lint_group(),\n        \"Return to computer, with enough time having passed for the computer to go to full sleep.\",\n    );\n}\n\n// HitTheNailOnTheHead\n\n#[test]\nfn correct_hit_the_nail() {\n    assert_suggestion_result(\n        \"Ahh, found it! You hit the nail in the head once again.\",\n        lint_group(),\n        \"Ahh, found it! You hit the nail on the head once again.\",\n    );\n}\n\n#[test]\nfn correct_hits_the_nail() {\n    assert_suggestion_result(\n        \"I'm not sure if this sentence hits the nail in the head\",\n        lint_group(),\n        \"I'm not sure if this sentence hits the nail on the head\",\n    );\n}\n\n#[test]\nfn correct_hitting_the_nail() {\n    assert_suggestion_result(\n        \"You are hitting the nail in the head of my issue with this game, too.\",\n        lint_group(),\n        \"You are hitting the nail on the head of my issue with this game, too.\",\n    );\n}\n\n#[test]\nfn correct_hitted_the_nail() {\n    assert_suggestion_result(\n        \"I mean, you just kinda hitted the nail in the head. You cannot do anything with this that you couldn't do in a Raspberry PI.\",\n        lint_group(),\n        \"I mean, you just kinda hitted the nail on the head. You cannot do anything with this that you couldn't do in a Raspberry PI.\",\n    );\n}\n\n// HomeInOn\n\n#[test]\nfn correct_hone_in_on() {\n    assert_suggestion_result(\n        \"This way you can use an object detector algorithm to hone in on subjects and tell sam to only focus in certain areas when looking to extend ...\",\n        lint_group(),\n        \"This way you can use an object detector algorithm to home in on subjects and tell sam to only focus in certain areas when looking to extend ...\",\n    );\n}\n\n#[test]\nfn correct_honing_in_on() {\n    assert_suggestion_result(\n        \"I think I understand the syntax limitation you're honing in on.\",\n        lint_group(),\n        \"I think I understand the syntax limitation you're homing in on.\",\n    );\n}\n\n#[test]\nfn correct_hones_in_on() {\n    assert_suggestion_result(\n        \"[FEATURE] Add a magnet that hones in on mobs\",\n        lint_group(),\n        \"[FEATURE] Add a magnet that homes in on mobs\",\n    );\n}\n\n#[test]\nfn correct_honed_in_on() {\n    assert_suggestion_result(\n        \"But it took me quite a bit of faffing about checking things out before I honed in on the session as the problem and tried to dump out the ...\",\n        lint_group(),\n        \"But it took me quite a bit of faffing about checking things out before I homed in on the session as the problem and tried to dump out the ...\",\n    );\n}\n\n// InDetail\n\n// -in details-\n#[test]\nfn in_detail_atomic() {\n    assert_suggestion_result(\"in details\", lint_group(), \"in detail\");\n}\n\n#[test]\nfn in_detail_real_world() {\n    assert_suggestion_result(\n        \"c++ - who can tell me \\\"*this pointer\\\" in details?\",\n        lint_group(),\n        \"c++ - who can tell me \\\"*this pointer\\\" in detail?\",\n    )\n}\n\n// -in more details-\n#[test]\nfn in_more_detail_atomic() {\n    assert_suggestion_result(\"in more details\", lint_group(), \"in more detail\");\n}\n\n#[test]\nfn in_more_detail_real_world() {\n    assert_suggestion_result(\n        \"Document the interface in more details · Issue #3 · owlbarn ...\",\n        lint_group(),\n        \"Document the interface in more detail · Issue #3 · owlbarn ...\",\n    );\n}\n\n// InvestIn\n\n#[test]\nfn corrects_invest_into() {\n    assert_suggestion_result(\n        \"which represents the amount of money they want to invest into a particular deal.\",\n        lint_group(),\n        \"which represents the amount of money they want to invest in a particular deal.\",\n    );\n}\n\n#[test]\nfn corrects_investing_into() {\n    assert_suggestion_result(\n        \"Taking dividends in cash (rather than automatically re-investing into the originating fund) can help alleviate the need for rebalancing.\",\n        lint_group(),\n        \"Taking dividends in cash (rather than automatically re-investing in the originating fund) can help alleviate the need for rebalancing.\",\n    );\n}\n\n#[test]\nfn corrects_invested_into() {\n    assert_suggestion_result(\n        \"it's all automatically invested into a collection of loans that match the criteria that ...\",\n        lint_group(),\n        \"it's all automatically invested in a collection of loans that match the criteria that ...\",\n    );\n}\n\n#[test]\nfn corrects_invests_into() {\n    assert_suggestion_result(\n        \"If a user invests into the protocol first using USDC but afterward changing to DAI, ...\",\n        lint_group(),\n        \"If a user invests in the protocol first using USDC but afterward changing to DAI, ...\",\n    );\n}\n\n#[test]\nfn corrects_investment_into() {\n    assert_suggestion_result(\n        \"A $10,000 investment into the fund made on February 28, 1997 would have grown to a value of $42,650 at the end of the 20-year period.\",\n        lint_group(),\n        \"A $10,000 investment in the fund made on February 28, 1997 would have grown to a value of $42,650 at the end of the 20-year period.\",\n    );\n}\n\n// LayoutVerb\n\n#[test]\nfn corrects_layouted() {\n    assert_suggestion_result(\n        \"only the views that neeed it will be measured and layouted when the superview changes\",\n        lint_group(),\n        \"only the views that neeed it will be measured and laid out when the superview changes\",\n    );\n}\n\n#[test]\nfn corrects_layouting() {\n    assert_suggestion_result(\n        \"An R package for layouting tables, using the S4 method\",\n        lint_group(),\n        \"An R package for laying out tables, using the S4 method\",\n    );\n}\n\n// LitotesDirectPositive\n\n#[test]\nfn litotes_not_uncommon_atomic() {\n    assert_suggestion_result(\"not uncommon\", lint_group(), \"common\");\n}\n\n#[test]\nfn litotes_not_uncommon_sentence() {\n    assert_suggestion_result(\n        \"It is not uncommon to see outages during storms.\",\n        lint_group(),\n        \"It is common to see outages during storms.\",\n    );\n}\n\n#[test]\nfn litotes_not_unlikely() {\n    assert_suggestion_result(\n        \"This outcome is not unlikely given the data.\",\n        lint_group(),\n        \"This outcome is likely given the data.\",\n    );\n}\n\n#[test]\nfn litotes_not_insignificant() {\n    assert_suggestion_result(\n        \"That is not insignificant progress.\",\n        lint_group(),\n        \"That is significant progress.\",\n    );\n}\n\n#[test]\nfn litotes_more_preferable() {\n    assert_suggestion_result(\n        \"Is it more preferable to use process.env.variable or env.parsed.variable?\",\n        lint_group(),\n        \"Is it preferable to use process.env.variable or env.parsed.variable?\",\n    );\n}\n\n// MakeDoWith\n\n#[test]\nfn corrects_make_due_with() {\n    assert_suggestion_result(\n        \"For now, I can make due with a bash script I have\",\n        lint_group(),\n        \"For now, I can make do with a bash script I have\",\n    );\n}\n\n#[test]\nfn corrects_made_due_with() {\n    assert_suggestion_result(\n        \"I made due with using actions.push for now but will try to do a codepen soon\",\n        lint_group(),\n        \"I made do with using actions.push for now but will try to do a codepen soon\",\n    );\n}\n\n#[test]\nfn corrects_makes_due_with() {\n    assert_suggestion_result(\n        \"but the code makes due with what is available\",\n        lint_group(),\n        \"but the code makes do with what is available\",\n    );\n}\n\n#[test]\nfn corrects_making_due_with() {\n    assert_suggestion_result(\n        \"I've been making due with the testMultiple script I wrote above.\",\n        lint_group(),\n        \"I've been making do with the testMultiple script I wrote above.\",\n    );\n}\n\n// MakeSense\n\n#[test]\nfn fix_make_senses() {\n    assert_suggestion_result(\n        \"some symbols make senses only if you have a certain keyboard\",\n        lint_group(),\n        \"some symbols make sense only if you have a certain keyboard\",\n    );\n}\n\n#[test]\nfn fix_made_senses() {\n    assert_suggestion_result(\n        \"Usually on the examples of matlab central I have found all with positive magnitude and made senses to me.\",\n        lint_group(),\n        \"Usually on the examples of matlab central I have found all with positive magnitude and made sense to me.\",\n    );\n}\n\n#[test]\nfn fix_makes_senses() {\n    assert_suggestion_result(\n        \"If it makes senses I can open a PR.\",\n        lint_group(),\n        \"If it makes sense I can open a PR.\",\n    );\n}\n\n#[test]\nfn fix_making_senses() {\n    assert_suggestion_result(\n        \"I appreciate you mentioned the two use cases, which are making senses for both.\",\n        lint_group(),\n        \"I appreciate you mentioned the two use cases, which are making sense for both.\",\n    );\n}\n\n// MootPoint\n\n// -point is mute-\n#[test]\nfn point_is_moot() {\n    assert_suggestion_result(\"Your point is mute.\", lint_group(), \"Your point is moot.\");\n}\n\n// OperatingSystem\n\n#[test]\nfn operative_system() {\n    assert_suggestion_result(\n        \"COS is a operative system made with the COSMOS Kernel and written in C#, COS its literally the same than MS-DOS but written in C# and open-source.\",\n        lint_group(),\n        \"COS is a operating system made with the COSMOS Kernel and written in C#, COS its literally the same than MS-DOS but written in C# and open-source.\",\n    );\n}\n\n#[test]\nfn operative_systems() {\n    assert_suggestion_result(\n        \"My dotfiles for my operative systems and other configurations.\",\n        lint_group(),\n        \"My dotfiles for my operating systems and other configurations.\",\n    );\n}\n\n// PassersBy\n#[test]\nfn correct_passerbys() {\n    assert_suggestion_result(\n        \"For any passerbys, you may replace visibility: hidden/collapsed with: opacity: 0; pointer-events: none;.\",\n        lint_group(),\n        \"For any passersby, you may replace visibility: hidden/collapsed with: opacity: 0; pointer-events: none;.\",\n    );\n}\n\n#[test]\nfn correct_passer_bys_hyphen() {\n    assert_suggestion_result(\n        \"Is there any way for random willing passer-bys to help with this effort?\",\n        lint_group(),\n        \"Is there any way for random willing passers-by to help with this effort?\",\n    );\n}\n\n// PeekBehindTheCurtain\n\n#[test]\nfn fix_peak() {\n    assert_suggestion_result(\n        \"Offer a peak behind the curtain of what I look for when baselining a software installation.\",\n        lint_group(),\n        \"Offer a peek behind the curtain of what I look for when baselining a software installation.\",\n    );\n}\n\n#[test]\nfn fix_peaked() {\n    assert_suggestion_result(\n        \"I peaked behind the curtain of the new Autodraw tool and noticed some expected similarities to what I saw in Quickdraw.\",\n        lint_group(),\n        \"I peeked behind the curtain of the new Autodraw tool and noticed some expected similarities to what I saw in Quickdraw.\",\n    );\n}\n\n#[test]\nfn fix_peaking() {\n    assert_suggestion_result(\n        \"I can see how peaking behind the curtain got me to where I am today.\",\n        lint_group(),\n        \"I can see how peeking behind the curtain got me to where I am today.\",\n    );\n}\n\n#[test]\nfn fix_peaks() {\n    assert_suggestion_result(\n        \"The Daily Vlog Series that peaks behind the curtain of an Entrepreneur's day to day life in 2016 building a business.\",\n        lint_group(),\n        \"The Daily Vlog Series that peeks behind the curtain of an Entrepreneur's day to day life in 2016 building a business.\",\n    );\n}\n\n// Piggyback\n// -none-\n\n// RedundantSuperlatives\n\n#[test]\nfn redundant_more_optimal() {\n    assert_suggestion_result(\"Is this more optimal?\", lint_group(), \"Is this optimal?\");\n}\n\n#[test]\nfn redundant_most_ideal() {\n    assert_suggestion_result(\n        \"This is the most ideal scenario.\",\n        lint_group(),\n        \"This is the ideal scenario.\",\n    );\n}\n\n// ResponsibilityFor\n\n#[test]\nfn fix_take() {\n    assert_suggestion_result(\n        \"Is anyone wanting to step up and take responsibility of this library, or should I put it in EOL and redirect to another tool? \",\n        lint_group(),\n        \"Is anyone wanting to step up and take responsibility for this library, or should I put it in EOL and redirect to another tool? \",\n    );\n}\n\n#[test]\nfn fix_taken() {\n    assert_suggestion_result(\n        \"if it had only taken responsibility of the manifest/info additions and extensionsID it would have made our life easier\",\n        lint_group(),\n        \"if it had only taken responsibility for the manifest/info additions and extensionsID it would have made our life easier\",\n    );\n}\n\n#[test]\nfn fix_takes() {\n    assert_suggestion_result(\n        \"If I have a message that i want to encode, who takes responsibility of pointers?\",\n        lint_group(),\n        \"If I have a message that i want to encode, who takes responsibility for pointers?\",\n    );\n}\n\n#[test]\nfn fix_taking() {\n    assert_suggestion_result(\n        \"This issue is about taking responsibility of the feature area auto indentation and start solving the bugs in the feature area.\",\n        lint_group(),\n        \"This issue is about taking responsibility for the feature area auto indentation and start solving the bugs in the feature area.\",\n    );\n}\n\n#[test]\nfn fix_took() {\n    assert_suggestion_result(\n        \"If the driver took responsibility of the locking, it could let these HTTP calls happen in parallel\",\n        lint_group(),\n        \"If the driver took responsibility for the locking, it could let these HTTP calls happen in parallel\",\n    );\n}\n\n#[test]\nfn fix_assume() {\n    assert_suggestion_result(\n        \"it's a relatively big chunk of behavior to assume responsibility of\",\n        lint_group(),\n        \"it's a relatively big chunk of behavior to assume responsibility for\",\n    );\n}\n\n#[test]\nfn fix_assumed() {\n    assert_suggestion_result(\n        \"and assumed responsibility of project managing the transition of Barclays\",\n        lint_group(),\n        \"and assumed responsibility for project managing the transition of Barclays\",\n    );\n}\n\n#[test]\nfn fix_assumes() {\n    assert_suggestion_result(\n        \"It means that the core development team assumes responsibility of the module\",\n        lint_group(),\n        \"It means that the core development team assumes responsibility for the module\",\n    );\n}\n\n#[test]\nfn fix_assuming() {\n    assert_suggestion_result(\n        \"The point of extract is essentially that you're assuming responsibility of maintenance for that version of the formula.\",\n        lint_group(),\n        \"The point of extract is essentially that you're assuming responsibility for maintenance for that version of the formula.\",\n    );\n}\n\n#[test]\nfn fix_claim() {\n    assert_suggestion_result(\n        \"so it doesn't need to claim responsibility of the reappearing containers lifecycle\",\n        lint_group(),\n        \"so it doesn't need to claim responsibility for the reappearing containers lifecycle\",\n    );\n}\n\n#[test]\nfn fix_claimed() {\n    assert_suggestion_result(\n        \"a group called The Impact Team had claimed responsibility of the data breach\",\n        lint_group(),\n        \"a group called The Impact Team had claimed responsibility for the data breach\",\n    );\n}\n\n#[test]\nfn fix_claiming() {\n    assert_suggestion_result(\n        \"I feel that there should be some other way of claiming responsibility of the promise's continuation.\",\n        lint_group(),\n        \"I feel that there should be some other way of claiming responsibility for the promise's continuation.\",\n    );\n}\n\n#[test]\nfn fix_claims() {\n    assert_suggestion_result(\n        \"yet the Lord claims responsibility of those boundaries\",\n        lint_group(),\n        \"yet the Lord claims responsibility for those boundaries\",\n    );\n}\n\n// ScapeGoat\n\n#[test]\nfn fix_an_escape_goat() {\n    assert_suggestion_result(\n        \"I see too many times the cable and ps thingy being used as an escape goat.\",\n        lint_group(),\n        \"I see too many times the cable and ps thingy being used as a scapegoat.\",\n    );\n}\n\n#[test]\nfn fix_escape_goat() {\n    assert_suggestion_result(\n        \"It helps shift the reason for the failure on to what the manager did not do (making them the escape goat when it fails).\",\n        lint_group(),\n        \"It helps shift the reason for the failure on to what the manager did not do (making them the scapegoat when it fails).\",\n    );\n}\n\n#[test]\nfn fix_escape_goats() {\n    assert_suggestion_result(\n        \"People might be using Americans as escape goats for this, but these mishearings are becoming as common as a bowl in a china shop!\",\n        lint_group(),\n        \"People might be using Americans as scapegoats for this, but these mishearings are becoming as common as a bowl in a china shop!\",\n    );\n}\n\n// SeamToSeem\n\n//-seam to be-\n#[test]\nfn fix_seam_to_be() {\n    assert_suggestion_result(\n        \"amdvlk is deprecated but my system still uses it as default and I can't seam to be able to change it.\",\n        lint_group(),\n        \"amdvlk is deprecated but my system still uses it as default and I can't seem to be able to change it.\",\n    );\n}\n\n//-seams to be-\nfn fix_seams_to_be() {\n    assert_suggestion_result(\n        \"Problem: Docker image is seriously broken and everything seams to be related to trivial things like creating directory or dumping key\",\n        lint_group(),\n        \"Problem: Docker image is seriously broken and everything seems to be related to trivial things like creating directory or dumping key\",\n    );\n}\n\n//-I seam-\n#[test]\nfn fix_i_seam() {\n    assert_suggestion_result(\n        \"so now whatever i seam to try it doesnt work\",\n        lint_group(),\n        \"so now whatever i seem to try it doesnt work\",\n    );\n}\n\n//-we seam-\n#[test]\nfn fix_we_seam() {\n    assert_suggestion_result(\n        \"using a 4G network we seam to get ICE messages mixing Ipv6 and Ipv4\",\n        lint_group(),\n        \"using a 4G network we seem to get ICE messages mixing Ipv6 and Ipv4\",\n    );\n}\n\n//-we-all-seam-\n#[test]\nfn fix_we_all_seam() {\n    assert_suggestion_result(\n        \"if it is your own nation then we all seam to get the update\",\n        lint_group(),\n        \"if it is your own nation then we all seem to get the update\",\n    );\n}\n\n//-we-both-seam-\n#[test]\n// because we both seam to have enough for frivolous things\nfn fix_we_both_seam() {\n    assert_suggestion_result(\n        \"because we both seam to have enough for frivolous things\",\n        lint_group(),\n        \"because we both seem to have enough for frivolous things\",\n    );\n}\n\n//-you seam-\n#[test]\nfn fix_you_seam() {\n    assert_suggestion_result(\n        \"Assigning you, since you seam to have already made the fix.\",\n        lint_group(),\n        \"Assigning you, since you seem to have already made the fix.\",\n    );\n}\n\n//-you-all-seam\n#[test]\nfn fix_you_all_seam() {\n    assert_suggestion_result(\n        \"That's a good advice which you all seam to agree upon.\",\n        lint_group(),\n        \"That's a good advice which you all seem to agree upon.\",\n    );\n}\n\n//-you-both-seam\n#[test]\nfn fix_you_both_seam() {\n    assert_suggestion_result(\n        \"since you both seam to like the game\",\n        lint_group(),\n        \"since you both seem to like the game\",\n    );\n}\n\n//-he seams-\n#[test]\nfn fix_he_seams() {\n    assert_suggestion_result(\n        \"tagging @PedroTroller as he seams to still be active on this project.\",\n        lint_group(),\n        \"tagging @PedroTroller as he seems to still be active on this project.\",\n    );\n}\n\n//-she seams-\n#[test]\nfn fix_she_seams() {\n    assert_suggestion_result(\n        \"Here is the exact timestamp where she seams to talk about exactly this -> video.\",\n        lint_group(),\n        \"Here is the exact timestamp where she seems to talk about exactly this -> video.\",\n    );\n}\n\n//-it seams-\n#[test]\nfn fix_it_seams() {\n    assert_suggestion_result(\n        \"It seams i cannot use $tries and $timeout properties on my queued listener class?\",\n        lint_group(),\n        \"It seems i cannot use $tries and $timeout properties on my queued listener class?\",\n    );\n}\n\n//-they seam-\n#[test]\nfn fix_they_seam() {\n    assert_suggestion_result(\n        \"Lets start with the \\\"not\\\" and \\\"and\\\" gates because they seam the easiest.\",\n        lint_group(),\n        \"Lets start with the \\\"not\\\" and \\\"and\\\" gates because they seem the easiest.\",\n    );\n}\n\n//-they all seam-\n#[test]\nfn fix_they_all_seam() {\n    assert_suggestion_result(\n        \"I have tried the sum, product, max and min functions and they all seam to work.\",\n        lint_group(),\n        \"I have tried the sum, product, max and min functions and they all seem to work.\",\n    );\n}\n\n//-they-both-seam-\n#[test]\nfn fix_they_both_seam() {\n    assert_suggestion_result(\n        \"It's probably cause they both seam to combine martial arts with animal instincts\",\n        lint_group(),\n        \"It's probably cause they both seem to combine martial arts with animal instincts\",\n    );\n}\n\n//-everything seams-\n#[test]\nfn fix_everything_seams() {\n    assert_suggestion_result(\n        \"Note that if you try to slider the slider first to the right and then to the left, everything seams alright.\",\n        lint_group(),\n        \"Note that if you try to slider the slider first to the right and then to the left, everything seems alright.\",\n    );\n}\n\n//-everybody seams-\n#[test]\nfn fix_everybody_seams() {\n    assert_suggestion_result(\n        \"I'm currently a little disappointed because everybody seams to care only about the Rails framework\",\n        lint_group(),\n        \"I'm currently a little disappointed because everybody seems to care only about the Rails framework\",\n    );\n}\n\n//-everyone seams-\n#[test]\nfn fix_everyone_seams() {\n    assert_suggestion_result(\n        \"everyone seams to use the editor now a days plus there is a tun of extensions available\",\n        lint_group(),\n        \"everyone seems to use the editor now a days plus there is a tun of extensions available\",\n    );\n}\n\n// SubjunctiveWasToWere\n\n// -if only there was-\n#[test]\nfn if_only_there_was() {\n    assert_suggestion_result(\n        \"if only there was an endpoint do to so\",\n        lint_group(),\n        \"if only there were an endpoint do to so\",\n    );\n}\n\n// -if only I-\n#[test]\nfn if_only_i_was() {\n    assert_suggestion_result(\n        \"Oh If only I was that clever !!\",\n        lint_group(),\n        \"Oh If only I were that clever !!\",\n    );\n}\n\n// -if only he-\n#[test]\nfn if_only_he_was() {\n    assert_suggestion_result(\n        \"If only he was kind enough to attempt to contact me in private first\",\n        lint_group(),\n        \"If only he were kind enough to attempt to contact me in private first\",\n    );\n}\n\n// -if only she-\n#[test]\nfn if_only_she_was() {\n    assert_suggestion_result(\n        \"If only she was right.\",\n        lint_group(),\n        \"If only she were right.\",\n    );\n}\n\n// -it-\n#[test]\nfn if_only_it_was() {\n    assert_suggestion_result(\n        \"if only it was accessible via USB connection - hint hint\",\n        lint_group(),\n        \"if only it were accessible via USB connection - hint hint\",\n    );\n}\n\n// -I wish there was-\n#[test]\nfn i_wish_there_was() {\n    assert_suggestion_result(\n        \"I wish there was a keyboard shortcut or something that was \\\"bring back the suggestion you just made in the last 3 seconds\\\".\",\n        lint_group(),\n        \"I wish there were a keyboard shortcut or something that was \\\"bring back the suggestion you just made in the last 3 seconds\\\".\",\n    );\n}\n\n// -I wish I was-\n#[test]\nfn i_wish_i_was() {\n    assert_suggestion_result(\n        \"I wish I was as smart as I think I am.\",\n        lint_group(),\n        \"I wish I were as smart as I think I am.\",\n    );\n}\n\n// -I wish he was-\n#[test]\nfn i_wish_he_was() {\n    assert_suggestion_result(\n        \"However I wish he was that smart about ARM chips present in the current mobile devices.\",\n        lint_group(),\n        \"However I wish he were that smart about ARM chips present in the current mobile devices.\",\n    );\n}\n\n// -I wish she was-\n#[test]\nfn i_wish_she_was() {\n    assert_suggestion_result(\n        \"I wish she was more accepting of her own interests.\",\n        lint_group(),\n        \"I wish she were more accepting of her own interests.\",\n    );\n}\n\n// -I wish it was-\n#[test]\nfn i_wish_it_was() {\n    assert_suggestion_result(\n        \"but I wish it was more friendly to existing ecosystems\",\n        lint_group(),\n        \"but I wish it were more friendly to existing ecosystems\",\n    );\n}\n\n// WreakHavoc\n\n#[test]\nfn fix_wreck_havoc() {\n    assert_suggestion_result(\n        \"Tables with a \\\".\\\" in the name wreck havoc with the system\",\n        lint_group(),\n        \"Tables with a \\\".\\\" in the name wreak havoc with the system\",\n    );\n}\n\n#[test]\nfn fix_wrecked_havoc() {\n    assert_suggestion_result(\n        \"It would have been some weird local configuration of LO that wrecked havoc.\",\n        lint_group(),\n        \"It would have been some weird local configuration of LO that wreaked havoc.\",\n    );\n}\n\n#[test]\nfn fix_wrecking_havoc() {\n    assert_suggestion_result(\n        \"Multi-line edit is wrecking havoc with indention\",\n        lint_group(),\n        \"Multi-line edit is wreaking havoc with indention\",\n    );\n}\n\n#[test]\nfn fix_wrecks_havoc() {\n    assert_suggestion_result(\n        \"Small POC using rust with ptrace that wrecks havoc on msync\",\n        lint_group(),\n        \"Small POC using rust with ptrace that wreaks havoc on msync\",\n    );\n}\n\n// WroteToRote\n\n#[test]\nfn fix_by_wrote() {\n    assert_suggestion_result(\n        \"Until one repeats and learns a fact by wrote it is the picture that sustains us.\",\n        lint_group(),\n        \"Until one repeats and learns a fact by rote it is the picture that sustains us.\",\n    );\n}\n\n#[test]\nfn fix_by_wrote_hyphen() {\n    assert_suggestion_result(\n        \"This specification may then be translated into a recursive-decent parser almost by-wrote.\",\n        lint_group(),\n        \"This specification may then be translated into a recursive-decent parser almost by-rote.\",\n    );\n}\n\n#[test]\nfn fix_wrote_learning() {\n    assert_suggestion_result(\n        \"I found that what turned me off math class was that teachers encouraged wrote learning instead of understanding.\",\n        lint_group(),\n        \"I found that what turned me off math class was that teachers encouraged rote learning instead of understanding.\",\n    );\n}\n\n#[test]\nfn fix_wrote_memorisation() {\n    assert_suggestion_result(\n        \"Not much of a wrote memorisation kind of guy, so I preferred to commit them to memory by framing them in the context of a paragraph.\",\n        lint_group(),\n        \"Not much of a rote memorisation kind of guy, so I preferred to commit them to memory by framing them in the context of a paragraph.\",\n    );\n}\n\n#[test]\nfn fix_wrote_memorisation_hyphen() {\n    assert_suggestion_result(\n        \"I find it helps me retain information much better and for longer compared to when I just blindly did wrote-memorisation.\",\n        lint_group(),\n        \"I find it helps me retain information much better and for longer compared to when I just blindly did rote-memorisation.\",\n    );\n}\n\n#[test]\nfn fix_wrote_memorization() {\n    assert_suggestion_result(\n        \"Outside websites are also no-go, exacerbating the need for wrote memorization.\",\n        lint_group(),\n        \"Outside websites are also no-go, exacerbating the need for rote memorization.\",\n    );\n}\n\n#[test]\nfn fix_wrote_memorization_hyphen() {\n    assert_suggestion_result(\n        \"The voicings was the biggest game-changer for me, coming from a wrote-memorization type classical piano background.\",\n        lint_group(),\n        \"The voicings was the biggest game-changer for me, coming from a rote-memorization type classical piano background.\",\n    );\n}\n\n#[test]\nfn fix_wrote_memorizing() {\n    assert_suggestion_result(\n        \"I have never been good at wrote memorizing abbreviations, initialisms, or acronyms.\",\n        lint_group(),\n        \"I have never been good at rote memorizing abbreviations, initialisms, or acronyms.\",\n    );\n}\n\n// Many to many tests\n\n// AwaitFor\n\n#[test]\nfn correct_awaits_for() {\n    assert_good_and_bad_suggestions(\n        \"Headless mode awaits for requested user feedback without showing any text for what that feedback should be\",\n        lint_group(),\n        &[\n            \"Headless mode awaits requested user feedback without showing any text for what that feedback should be\",\n            \"Headless mode waits for requested user feedback without showing any text for what that feedback should be\",\n        ],\n        &[],\n    );\n}\n\n#[test]\nfn correct_awaiting_for() {\n    assert_good_and_bad_suggestions(\n        \"gpg import fails awaiting for prompt answer\",\n        lint_group(),\n        &[\n            \"gpg import fails waiting for prompt answer\",\n            \"gpg import fails awaiting prompt answer\",\n        ],\n        &[],\n    );\n}\n\n#[test]\nfn correct_await_for() {\n    assert_good_and_bad_suggestions(\n        \"I still await for a college course on \\\"Followership 101\\\"\",\n        lint_group(),\n        &[\n            \"I still wait for a college course on \\\"Followership 101\\\"\",\n            \"I still await a college course on \\\"Followership 101\\\"\",\n        ],\n        &[],\n    );\n}\n\n#[test]\nfn correct_awaited_for() {\n    assert_good_and_bad_suggestions(\n        \"I have long awaited for the rise of the Dagoat agenda, and it is glorious.\",\n        lint_group(),\n        &[\n            \"I have long awaited the rise of the Dagoat agenda, and it is glorious.\",\n            \"I have long waited for the rise of the Dagoat agenda, and it is glorious.\",\n        ],\n        &[],\n    );\n}\n\n// CommitmentTo\n\n#[test]\nfn singular_towards() {\n    assert_suggestion_result(\n        \"the platform's focus on multimedia projects and VideoLAN's long history of commitment towards free and open multimedia\",\n        lint_group(),\n        \"the platform's focus on multimedia projects and VideoLAN's long history of commitment to free and open multimedia\",\n    );\n}\n\n#[test]\nfn plural_towards() {\n    assert_suggestion_result(\n        \"the signer may express multiple commitments towards the data objects\",\n        lint_group(),\n        \"the signer may express multiple commitments to the data objects\",\n    );\n}\n\n#[test]\nfn singular_toward() {\n    assert_suggestion_result(\n        \"This document outlines the current level of commitment toward Linux distributions and packaging formats.\",\n        lint_group(),\n        \"This document outlines the current level of commitment to Linux distributions and packaging formats.\",\n    );\n}\n\n#[test]\nfn plural_toward() {\n    assert_suggestion_result(\n        \"... and are expected to inform parties in updating their commitments toward the Paris Agreement\",\n        lint_group(),\n        \"... and are expected to inform parties in updating their commitments to the Paris Agreement\",\n    );\n}\n\n// Copyright\n\n#[test]\nfn copywritten() {\n    assert_suggestion_result(\n        \"Including digital copies of copywritten artwork with the project isn't advised.\",\n        lint_group(),\n        \"Including digital copies of copyrighted artwork with the project isn't advised.\",\n    );\n}\n\n#[test]\nfn copywrites() {\n    assert_suggestion_result(\n        \"Code is 99% copy/pasted from OpenSSH with an attempt to retain all copywrites\",\n        lint_group(),\n        \"Code is 99% copy/pasted from OpenSSH with an attempt to retain all copyrights\",\n    );\n}\n\n#[test]\nfn copywrited() {\n    assert_suggestion_result(\n        \"Proprietary copywrited code\",\n        lint_group(),\n        \"Proprietary copyrighted code\",\n    );\n}\n\n#[test]\nfn copywrited_all_caps() {\n    assert_suggestion_result(\n        \"URLS MAY CONTAIN COPYWRITED MATERIAL\",\n        lint_group(),\n        \"URLS MAY CONTAIN COPYRIGHTED MATERIAL\",\n    );\n}\n\n#[test]\nfn copywrote() {\n    assert_suggestion_result(\n        \"How do you find out if someone copywrote a movie\",\n        lint_group(),\n        \"How do you find out if someone copyrighted a movie\",\n    );\n}\n\n// DoubleEdgedSword\n\n#[test]\nfn correct_double_edge_hyphen() {\n    assert_suggestion_result(\n        \"I thought the global defaultTranslationValues was potentially a double-edge sword as it also obfuscates the full set of values\",\n        lint_group(),\n        \"I thought the global defaultTranslationValues was potentially a double-edged sword as it also obfuscates the full set of values\",\n    );\n}\n\n#[test]\nfn correct_double_edge_space() {\n    assert_suggestion_result(\n        \"It becomes a double edge sword when it should not be used in cases like this.\",\n        lint_group(),\n        \"It becomes a double-edged sword when it should not be used in cases like this.\",\n    );\n}\n\n#[test]\nfn correct_double_edge_space_plural() {\n    assert_suggestion_result(\n        \"Wake locks are really double edge swords.\",\n        lint_group(),\n        \"Wake locks are really double-edged swords.\",\n    );\n}\n\n#[test]\nfn correct_double_edged_space() {\n    assert_suggestion_result(\n        \"Use case. currently OPTIMIZE is a double edged sword and potentially a very dangerous tool to use.\",\n        lint_group(),\n        \"Use case. currently OPTIMIZE is a double-edged sword and potentially a very dangerous tool to use.\",\n    );\n}\n\n#[test]\nfn correct_double_edged_space_plural() {\n    assert_suggestion_result(\n        \"Change: Ambushers and Crusaders now protect their targets too, making them double edged swords\",\n        lint_group(),\n        \"Change: Ambushers and Crusaders now protect their targets too, making them double-edged swords\",\n    );\n}\n\n// ExpandAlloc\n\n#[test]\nfn corrects_allocs() {\n    assert_suggestion_result(\n        \"cmd/compile: avoid allocs by better tracking of literals for interface conversions and make\",\n        lint_group(),\n        \"cmd/compile: avoid allocations by better tracking of literals for interface conversions and make\",\n    );\n}\n\n#[test]\nfn expand_alloc() {\n    assert_suggestion_result(\n        \"Used to find system libraries that alloc RWX regions on load.\",\n        lint_group(),\n        \"Used to find system libraries that allocate RWX regions on load.\",\n    );\n}\n\n// Expat\n\n#[test]\nfn correct_ex_pat_hyphen() {\n    assert_suggestion_result(\n        \"It seems ex-pat means the person will be in a foreign country temporarily\",\n        lint_group(),\n        \"It seems expat means the person will be in a foreign country temporarily\",\n    );\n}\n\n#[test]\nfn correct_ex_pats_hyphen() {\n    assert_suggestion_result(\n        \"So, it might be correct to call most Brits ex-pats.\",\n        lint_group(),\n        \"So, it might be correct to call most Brits expats.\",\n    );\n}\n\n#[test]\nfn correct_ex_pat_space() {\n    assert_suggestion_result(\n        \"For me, the term ex pat embodies the exquisite hypocrisy of certain people feeling entitled\",\n        lint_group(),\n        \"For me, the term expat embodies the exquisite hypocrisy of certain people feeling entitled\",\n    );\n}\n\n#[test]\n#[ignore = \"replace_with_match_case results in ExPats\"]\nfn correct_ex_pats_space() {\n    assert_suggestion_result(\n        \"Why are Brits who emigrate \\\"Ex Pats\\\" but people who come here \\\"immigrants\\\"?\",\n        lint_group(),\n        \"Why are Brits who emigrate \\\"Expats\\\" but people who come here \\\"immigrants\\\"?\",\n    );\n}\n\n// Expatriate\n\n#[test]\nfn correct_expatriot() {\n    assert_suggestion_result(\n        \"Another expatriot of the era, James Joyce, also followed Papa's writing and drinking schedule.\",\n        lint_group(),\n        \"Another expatriate of the era, James Joyce, also followed Papa's writing and drinking schedule.\",\n    );\n}\n\n#[test]\nfn correct_expatriots() {\n    assert_suggestion_result(\n        \"Expatriots, upon discovering the delightful nuances of Dutch pronunciation, often find themselves in stitches.\",\n        lint_group(),\n        \"Expatriates, upon discovering the delightful nuances of Dutch pronunciation, often find themselves in stitches.\",\n    );\n}\n\n#[test]\nfn correct_ex_patriot_hyphen() {\n    assert_suggestion_result(\n        \"Then I added we should all be using the word 移民 immigrant, not ex-patriot, not 外国人 gaikokujin, and definitely not 外人 gaijin\",\n        lint_group(),\n        \"Then I added we should all be using the word 移民 immigrant, not expatriate, not 外国人 gaikokujin, and definitely not 外人 gaijin\",\n    );\n}\n\n#[test]\nfn correct_ex_patriots_hyphen() {\n    assert_suggestion_result(\n        \"Ex-patriots who move to Hong Kong to seek greener pastures and to experience a new culture seem to bring their own cultural baggage with them.\",\n        lint_group(),\n        \"Expatriates who move to Hong Kong to seek greener pastures and to experience a new culture seem to bring their own cultural baggage with them.\",\n    );\n}\n\n// GetRidOf\n\n#[test]\nfn get_rid_off() {\n    assert_suggestion_result(\n        \"Please bump axios version to get rid off npm warning #624\",\n        lint_group(),\n        \"Please bump axios version to get rid of npm warning #624\",\n    );\n}\n\n#[test]\nfn gets_rid_off() {\n    assert_suggestion_result(\n        \"Adding at as a runtime dependency gets rid off that error\",\n        lint_group(),\n        \"Adding at as a runtime dependency gets rid of that error\",\n    );\n}\n\n#[test]\nfn getting_rid_off() {\n    assert_suggestion_result(\n        \"getting rid off of all the complexity of the different accesses method of API service providers\",\n        lint_group(),\n        \"getting rid of of all the complexity of the different accesses method of API service providers\",\n    );\n}\n\n#[test]\nfn got_rid_off() {\n    assert_suggestion_result(\n        \"For now we got rid off circular deps in model tree structure and it's API.\",\n        lint_group(),\n        \"For now we got rid of circular dependencies in model tree structure and it's API.\",\n    );\n}\n\n#[test]\nfn gotten_rid_off() {\n    assert_suggestion_result(\n        \"The baX variable thingy I have gotten rid off, that was due to a bad character in the encryption key.\",\n        lint_group(),\n        \"The baX variable thingy I have gotten rid of, that was due to a bad character in the encryption key.\",\n    );\n}\n\n#[test]\nfn get_ride_of() {\n    assert_suggestion_result(\n        \"Get ride of \\\"WARNING Deprecated: markdown_github. Use gfm\\\"\",\n        lint_group(),\n        \"Get rid of \\\"WARNING Deprecated: markdown_github. Use gfm\\\"\",\n    );\n}\n\n#[test]\nfn get_ride_off() {\n    assert_suggestion_result(\n        \"This exact hack was what I trying to get ride off. \",\n        lint_group(),\n        \"This exact hack was what I trying to get rid of. \",\n    );\n}\n\n#[test]\nfn getting_ride_of() {\n    assert_suggestion_result(\n        \"If you have any idea how to fix this without getting ride of bootstrap I would be thankfull.\",\n        lint_group(),\n        \"If you have any idea how to fix this without getting rid of bootstrap I would be thankfull.\",\n    );\n}\n\n#[test]\nfn gets_ride_of() {\n    assert_suggestion_result(\n        \".. gets ride of a central back-end/server and eliminates all the risks associated to it.\",\n        lint_group(),\n        \".. gets rid of a central back-end/server and eliminates all the risks associated to it.\",\n    );\n}\n\n#[test]\nfn gotten_ride_of() {\n    assert_suggestion_result(\n        \"I have gotten ride of the react-table and everything works just fine.\",\n        lint_group(),\n        \"I have gotten rid of the react-table and everything works just fine.\",\n    );\n}\n\n#[test]\nfn got_ride_of() {\n    assert_suggestion_result(\n        \"I had to adjust the labels on the free version because you guys got ride of ...\",\n        lint_group(),\n        \"I had to adjust the labels on the free version because you guys got rid of ...\",\n    );\n}\n\n// HolyWar\n\n#[test]\n#[ignore = \"Known failure due to replace_with_match_case working by character index\"]\nfn correct_holy_war() {\n    assert_suggestion_result(\n        \"I know it is Holly War about idempotent in HTTP and DELETE\",\n        lint_group(),\n        \"I know it is Holy War about idempotent in HTTP and DELETE\",\n    );\n}\n\n#[test]\nfn correct_holly_wars() {\n    assert_suggestion_result(\n        \"Anyway I'm not starting some holly wars about this point.\",\n        lint_group(),\n        \"Anyway I'm not starting some holy wars about this point.\",\n    );\n}\n\n// HowItLooksLike\n\n#[test]\nfn correct_how_it_looks_like_1() {\n    assert_suggestion_result(\n        \"And here is how it looks like: As you can see, there is no real difference in the diagram itself.\",\n        lint_group(),\n        \"And here is how it looks: As you can see, there is no real difference in the diagram itself.\",\n    );\n}\n\n#[test]\nfn correct_how_it_looks_like_2() {\n    assert_suggestion_result(\n        \"This is how it looks like when run from Windows PowerShell or Cmd: image.\",\n        lint_group(),\n        \"This is what it looks like when run from Windows PowerShell or Cmd: image.\",\n    );\n}\n\n#[test]\nfn correct_how_they_look_like_1() {\n    assert_suggestion_result(\n        \"This is a sample project illustrating a demo of how to use the new Material 3 components and how they look like.\",\n        lint_group(),\n        \"This is a sample project illustrating a demo of how to use the new Material 3 components and how they look.\",\n    );\n}\n\n#[test]\nfn correct_how_they_look_like_2() {\n    assert_suggestion_result(\n        \"So for now I'll just leave this issue here of how they look like in the XLSX\",\n        lint_group(),\n        \"So for now I'll just leave this issue here of what they look like in the XLSX\",\n    );\n}\n\n#[test]\nfn correct_how_they_looks_like_1() {\n    assert_suggestion_result(\n        \"Here I demonstrate how disney works and how they looks like Don't miss to give me a star.\",\n        lint_group(),\n        \"Here I demonstrate how disney works and how they look Don't miss to give me a star.\",\n    );\n}\n\n#[test]\nfn correct_how_they_looks_like_2() {\n    assert_suggestion_result(\n        \"You can check how they looks like on Android app by this command:\",\n        lint_group(),\n        \"You can check what they look like on Android app by this command:\",\n    );\n}\n\n#[test]\nfn correct_how_she_looks_like_1() {\n    assert_suggestion_result(\n        \"You all know how she looks like.\",\n        lint_group(),\n        \"You all know how she looks.\",\n    );\n}\n\n#[test]\nfn correct_how_he_looks_like_2() {\n    assert_suggestion_result(\n        \"Here's how he looks like, when he's supposed to just look like his old fatui design.\",\n        lint_group(),\n        \"Here's what he looks like, when he's supposed to just look like his old fatui design.\",\n    );\n}\n\n#[test]\nfn correct_how_it_look_like_1() {\n    assert_suggestion_result(\n        \"And I don't mind how it look like, language code subpath or the last subpath as below.\",\n        lint_group(),\n        \"And I don't mind how it looks, language code subpath or the last subpath as below.\",\n    );\n}\n\n#[test]\nfn correct_how_it_look_like_2() {\n    assert_suggestion_result(\n        \"Here is how it look like in your browser:\",\n        lint_group(),\n        \"Here is what it looks like in your browser:\",\n    );\n}\n\n#[test]\nfn correct_how_it_looks_like_with_apostrophe() {\n    assert_suggestion_result(\n        \"In the picture we can see how It look's like on worker desktop.\",\n        lint_group(),\n        \"In the picture we can see how It looks on worker desktop.\",\n    );\n}\n\n// MakeItSeem\n\n#[test]\nfn corrects_make_it_seems() {\n    assert_suggestion_result(\n        \"but put it into unlisted list may make it seems like listed for GitHub\",\n        lint_group(),\n        \"but put it into unlisted list may make it seem like listed for GitHub\",\n    );\n}\n\n#[test]\nfn corrects_made_it_seems() {\n    assert_suggestion_result(\n        \"previous explanations made it seems like it would be n\",\n        lint_group(),\n        \"previous explanations made it seem like it would be n\",\n    );\n}\n\n#[test]\nfn corrects_makes_it_seems() {\n    assert_suggestion_result(\n        \"bundle gives an error that makes it seems like esbuild is trying to use lib/index.js from main\",\n        lint_group(),\n        \"bundle gives an error that makes it seem like esbuild is trying to use lib/index.js from main\",\n    );\n}\n\n#[test]\nfn corrects_making_it_seems() {\n    assert_suggestion_result(\n        \"Is it possible to teach the concept of assignment/reassignment at the very beginner stage instead of making it seems like constants?\",\n        lint_group(),\n        \"Is it possible to teach the concept of assignment/reassignment at the very beginner stage instead of making it seem like constants?\",\n    );\n}\n\n#[test]\nfn corrects_made_it_seemed() {\n    assert_suggestion_result(\n        \"The path made it seemed a bit \\\"internal\\\".\",\n        lint_group(),\n        \"The path made it seem a bit \\\"internal\\\".\",\n    );\n}\n\n// NervousWreck\n\n#[test]\n#[ignore = \"Harper matches case by letter index as 'How Not to Be a Complete NervoUs wreck in an Interview'\"]\nfn correct_nerve_wreck_space_title_case() {\n    assert_suggestion_result(\n        \"How Not to Be a Complete Nerve Wreck in an Interview\",\n        lint_group(),\n        \"How Not to Be a Complete Nervous Wreck in an Interview\",\n    );\n}\n\n#[test]\nfn correct_nerve_wreck_space() {\n    assert_suggestion_result(\n        \"The nerve wreck you are makes you seem anxious and agitated so your employer will believe the complaints.\",\n        lint_group(),\n        \"The nervous wreck you are makes you seem anxious and agitated so your employer will believe the complaints.\",\n    );\n}\n\n#[test]\nfn correct_nerve_wreck_hyphen() {\n    assert_suggestion_result(\n        \"the child receives little education and grows up to be a nerve-wreck\",\n        lint_group(),\n        \"the child receives little education and grows up to be a nervous wreck\",\n    );\n}\n\n#[test]\nfn correct_nerve_wreck_hyphen_plural() {\n    assert_suggestion_result(\n        \"This helps us not to become nerve wrecks while looking at the side mirrors\",\n        lint_group(),\n        \"This helps us not to become nervous wrecks while looking at the side mirrors\",\n    );\n}\n\n#[test]\n#[ignore = \"We can't detect when the altered form is used for an event rather than a person.\"]\nfn dont_correct_it_was_a_nerve_wreck() {\n    assert_no_lints(\n        \"It was a nerve-wreck, but I was also excited to see what would happen next.\",\n        lint_group(),\n    );\n}\n\n#[test]\n#[ignore = \"We can't detect when the altered form is used for an event rather than a person.\"]\nfn dont_correct_so_much_nerve_wreck() {\n    assert_no_lints(\n        \"So much nerve wreck for such a simple game ...\",\n        lint_group(),\n    );\n}\n\n// NotOnly\n\n// -not only are-\n#[test]\nfn fix_no_only_are() {\n    assert_suggestion_result(\n        \"No only are tests run on my pipeline but once successful, my app is deployed differently\",\n        lint_group(),\n        \"Not only are tests run on my pipeline but once successful, my app is deployed differently\",\n    );\n}\n\n// -not only is-\n#[test]\nfn fix_no_only_is() {\n    assert_suggestion_result(\n        \"No only is it simple, it's efficient!\",\n        lint_group(),\n        \"Not only is it simple, it's efficient!\",\n    );\n}\n\n// -not only was-\n#[test]\nfn fix_no_only_was() {\n    assert_suggestion_result(\n        \"No only was he happily creating shapes, but he was actively using distances and angles to do so.\",\n        lint_group(),\n        \"Not only was he happily creating shapes, but he was actively using distances and angles to do so.\",\n    );\n}\n\n// -not only were-\n#[test]\nfn fix_no_only_were() {\n    assert_suggestion_result(\n        \"No only were there UI inconsistencies, but Safari lags behind chrome with things like the Popover API\",\n        lint_group(),\n        \"Not only were there UI inconsistencies, but Safari lags behind chrome with things like the Popover API\",\n    );\n}\n\n// RaiseTheQuestion\n\n// -raise the question-\n#[test]\nfn detect_rise_the_question() {\n    assert_suggestion_result(\n        \"That would rise the question how to deal with syntax errors etc.\",\n        lint_group(),\n        \"That would raise the question how to deal with syntax errors etc.\",\n    );\n}\n\n#[test]\nfn detect_arise_the_question() {\n    assert_suggestion_result(\n        \"As e.g. UTC+1, might arise the question whether it includes summer and winter time\",\n        lint_group(),\n        \"As e.g. UTC+1, might raise the question whether it includes summer and winter time\",\n    );\n}\n\n// -raises the question-\n#[test]\nfn detect_rises_the_question() {\n    assert_suggestion_result(\n        \"However, this rises the question as to whether this test is conceptually sound.\",\n        lint_group(),\n        \"However, this raises the question as to whether this test is conceptually sound.\",\n    );\n}\n\n#[test]\nfn detect_arises_the_question() {\n    assert_suggestion_result(\n        \"And it arises the question, why?\",\n        lint_group(),\n        \"And it raises the question, why?\",\n    );\n}\n\n// -raising the question-\n#[test]\nfn detect_rising_the_question() {\n    assert_suggestion_result(\n        \"as soon as a infoHash query is performed, a Torrent file is retried, rising the question of:\",\n        lint_group(),\n        \"as soon as a infoHash query is performed, a Torrent file is retried, raising the question of:\",\n    );\n}\n\n#[test]\nfn detect_arising_the_question() {\n    assert_suggestion_result(\n        \"arising the question whether the requirement of wgpu::Features::DEPTH24PLUS_STENCIL8 is precise\",\n        lint_group(),\n        \"raising the question whether the requirement of wgpu::Features::DEPTH24PLUS_STENCIL8 is precise\",\n    );\n}\n\n// -raised the question-\n#[test]\nfn detect_rose_the_question() {\n    assert_suggestion_result(\n        \"Here is an example that rose the question at first: What works.\",\n        lint_group(),\n        \"Here is an example that raised the question at first: What works.\",\n    );\n}\n\n#[test]\nfn detect_risen_the_question() {\n    assert_suggestion_result(\n        \"That has risen the question in my mind if it is still possible to embed your own Flash player on Facebook today?\",\n        lint_group(),\n        \"That has raised the question in my mind if it is still possible to embed your own Flash player on Facebook today?\",\n    );\n}\n\n#[test]\nfn detect_rised_the_question() {\n    assert_suggestion_result(\n        \"I rised the question to Emax Support and they just came back to me inmediately with the below response.\",\n        lint_group(),\n        \"I raised the question to Emax Support and they just came back to me inmediately with the below response.\",\n    );\n}\n\n#[test]\n#[ignore = \"Not actually an error after when it's 'there arose'\"]\nfn dont_fag_there_arose_the_question() {\n    assert_suggestion_result(\n        \"Hello, while I have been using modals manager there arose the question related to customizing of modal header.\",\n        lint_group(),\n        \"Hello, while I have been using modals manager there arose the question related to customizing of modal header.\",\n    );\n}\n\n#[test]\nfn detect_arised_the_question() {\n    assert_suggestion_result(\n        \"and that fact arised the question in my mind, what does exactly is happening\",\n        lint_group(),\n        \"and that fact raised the question in my mind, what does exactly is happening\",\n    );\n}\n\n#[test]\nfn detect_arose_the_question() {\n    assert_suggestion_result(\n        \"This arose the question, could I store 32 digits on the stack?\",\n        lint_group(),\n        \"This raised the question, could I store 32 digits on the stack?\",\n    );\n}\n\n#[test]\nfn detect_arisen_the_question() {\n    assert_suggestion_result(\n        \"Some have arisen the question like how to use this wireless HD mini camera\",\n        lint_group(),\n        \"Some have raised the question like how to use this wireless HD mini camera\",\n    );\n}\n\n// ToToo\n\n// -a bridge too far-\n#[test]\nfn fix_a_bridge_too_far() {\n    assert_suggestion_result(\n        \"If Winforms can ever be conquered by the Mono developers may be a bridge to far.\",\n        lint_group(),\n        \"If Winforms can ever be conquered by the Mono developers may be a bridge too far.\",\n    );\n}\n\n// -cake and eat it too-\n#[test]\nfn fix_cake_and_eat_it_too() {\n    assert_suggestion_result(\n        \"The solution: wouldn't it be great if I could have my cake and eat it to?\",\n        lint_group(),\n        \"The solution: wouldn't it be great if I could have my cake and eat it too?\",\n    );\n}\n\n// -go to far-\n#[test]\nfn fix_go_to_far() {\n    assert_suggestion_result(\n        \"It's difficult to be sure when we go to far sometime when you don't exactly how the beast works in the background .\",\n        lint_group(),\n        \"It's difficult to be sure when we go too far sometime when you don't exactly how the beast works in the background .\",\n    );\n}\n\n// -goes to far-\n#[test]\nfn fix_goes_to_far() {\n    assert_suggestion_result(\n        \"Memory consumption and cpu consumption goes to far like 900% and more than this\",\n        lint_group(),\n        \"Memory consumption and cpu consumption goes too far like 900% and more than this\",\n    );\n}\n\n// -going to far-\n#[test]\nfn fix_going_to_far() {\n    assert_suggestion_result(\n        \"wsrun is going to far on this because debug 's devDependency shouldn't be considered in the cycle detection, should it?\",\n        lint_group(),\n        \"wsrun is going too far on this because debug 's devDependency shouldn't be considered in the cycle detection, should it?\",\n    );\n}\n\n// -gone to far-\n#[test]\nfn fix_gone_to_far() {\n    assert_suggestion_result(\n        \"I might have gone to far with opening issues for small things.\",\n        lint_group(),\n        \"I might have gone too far with opening issues for small things.\",\n    );\n}\n\n// -went to far-\n#[test]\nfn fix_went_to_far() {\n    assert_suggestion_result(\n        \"But I went to far compared to the initial request that seems talk about ...\",\n        lint_group(),\n        \"But I went too far compared to the initial request that seems talk about ...\",\n    );\n}\n\n// -life's too short-\n#[test]\nfn fix_life_s_too_short() {\n    assert_suggestion_result(\n        \"Life's to short for messing around with git add , writing commit message.\",\n        lint_group(),\n        \"Life's too short for messing around with git add , writing commit message.\",\n    );\n}\n\n#[test]\nfn fix_lifes_to_short() {\n    assert_suggestion_result(\n        \"I wouldn't go back after the 3rd interview lifes to short.\",\n        lint_group(),\n        \"I wouldn't go back after the 3rd interview life's too short.\",\n    );\n}\n\n// -life is too short-\n#[test]\nfn fix_life_is_too_short() {\n    assert_suggestion_result(\n        \"[Life is to short to use dated cli tools that suck]\",\n        lint_group(),\n        \"[Life is too short to use dated cli tools that suck]\",\n    );\n}\n\n// -put too fine a point-\n#[test]\nfn fix_put_too_fine_a_point() {\n    assert_suggestion_result(\n        \"Not to put to fine a point on it... that's not the kind of team I think we want to be.\",\n        lint_group(),\n        \"Not to put too fine a point on it... that's not the kind of team I think we want to be.\",\n    );\n}\n\n// -speak too soon-\n#[test]\nfn fix_speak_too_soon() {\n    assert_suggestion_result(\n        \"I don't want to speak to soon but I kept everything as I had before but included: http = httplib2.Http()\",\n        lint_group(),\n        \"I don't want to speak too soon but I kept everything as I had before but included: http = httplib2.Http()\",\n    );\n}\n\n// -speaking too soon-\n#[test]\nfn fix_speaking_too_soon() {\n    assert_suggestion_result(\n        \"EDIT: Thats what I get for speaking to soon...\",\n        lint_group(),\n        \"EDIT: Thats what I get for speaking too soon...\",\n    );\n}\n\n// -spoke too soon-\n#[test]\nfn fix_spoke_too_soon() {\n    assert_suggestion_result(\n        \"I spoke to soon. Ignore the previous post.\",\n        lint_group(),\n        \"I spoke too soon. Ignore the previous post.\",\n    );\n}\n\n// -spoken too soon-\n#[test]\nfn fix_spoken_too_soon() {\n    assert_suggestion_result(\n        \"EDIT: I might have spoken to soon...\",\n        lint_group(),\n        \"EDIT: I might have spoken too soon...\",\n    );\n}\n\n// -think to much-\n#[test]\nfn fix_think_too_much() {\n    assert_suggestion_result(\n        \"I don't think to much about it, but I don't think it's a big deal.\",\n        lint_group(),\n        \"I don't think too much about it, but I don't think it's a big deal.\",\n    );\n}\n\n// -too big for-\n#[test]\nfn fix_too_big_for() {\n    assert_suggestion_result(\n        \"ng-relations form to big for small screens\",\n        lint_group(),\n        \"ng-relations form too big for small screens\",\n    );\n}\n\n// -too big to fail-\n#[test]\nfn fix_too_big_to_fail() {\n    assert_suggestion_result(\n        \"The core alone has 50k LOC. Reminds me of \\\"to big to fail\\\".\",\n        lint_group(),\n        \"The core alone has 50k LOC. Reminds me of \\\"too big to fail\\\".\",\n    );\n}\n\n// -too good to be true-\n#[test]\nfn fix_too_good_to_be_true() {\n    assert_suggestion_result(\n        \"This seemed to good to be true, but local to scene resources will not work when they are not contained in a node.\",\n        lint_group(),\n        \"This seemed too good to be true, but local to scene resources will not work when they are not contained in a node.\",\n    );\n}\n\n#[test]\nfn fix_too_good_too_be_true() {\n    assert_suggestion_result(\n        \"The normalization of rewards is making the plot in tensorboard look too good too be true, because they are not the actual reward ...\",\n        lint_group(),\n        \"The normalization of rewards is making the plot in tensorboard look too good to be true, because they are not the actual reward ...\",\n    );\n}\n\n// -too much information-\n#[test]\nfn fix_too_much_information() {\n    assert_suggestion_result(\n        \"Live test are printing way to much information and is polluting our test output\",\n        lint_group(),\n        \"Live test are printing way too much information and is polluting our test output\",\n    );\n}\n\n// TooTo\n\n// -too big too fail-\n#[test]\nfn fix_too_big_too_fail() {\n    assert_suggestion_result(\n        \"In other words, pointer arithmetic is, at this point, too big too fail, regardless of the clever and sophisticated way C++ lawyercats worded it.\",\n        lint_group(),\n        \"In other words, pointer arithmetic is, at this point, too big to fail, regardless of the clever and sophisticated way C++ lawyercats worded it.\",\n    );\n}\n\n// WholeEntire\n\n#[test]\nfn detect_atomic_whole_entire() {\n    assert_suggestion_result(\"whole entire\", lint_group(), \"whole\");\n}\n\n#[test]\nfn correct_real_world_whole_entire() {\n    assert_suggestion_result(\n        \"[FR] support use system dns in whole entire app\",\n        lint_group(),\n        \"[FR] support use system dns in whole app\",\n    );\n}\n\n// -a whole entire-\n#[test]\nfn correct_atomic_a_whole_entire_to_a_whole() {\n    assert_suggestion_result(\"a whole entire\", lint_group(), \"a whole\");\n}\n\n#[test]\nfn correct_atomic_a_whole_entire_to_an_entire() {\n    assert_suggestion_result(\"a whole entire\", lint_group(), \"an entire\");\n}\n\n#[test]\nfn correct_real_world_a_whole_entire_to_a_whole() {\n    assert_suggestion_result(\n        \"Start mapping a whole entire new planet using NASA’s MOLA.\",\n        lint_group(),\n        \"Start mapping a whole new planet using NASA’s MOLA.\",\n    );\n}\n\n#[test]\nfn correct_real_world_a_whole_entire_to_an_entire() {\n    assert_suggestion_result(\n        \"I am not sure I can pass in a whole entire query via the include.\",\n        lint_group(),\n        \"I am not sure I can pass in an entire query via the include.\",\n    );\n}\n\n// WorseOrWorst\n\n// -a lot worst-\n#[test]\nfn detect_a_lot_worse_atomic() {\n    assert_suggestion_result(\"a lot worst\", lint_group(), \"a lot worse\");\n}\n\n#[test]\nfn detect_a_lot_worse_real_world() {\n    assert_suggestion_result(\n        \"On a debug build, it's even a lot worst.\",\n        lint_group(),\n        \"On a debug build, it's even a lot worse.\",\n    );\n}\n\n// -become worst-\n#[test]\nfn fix_became_worst() {\n    assert_suggestion_result(\n        \"The problem became worst lately.\",\n        lint_group(),\n        \"The problem became worse lately.\",\n    );\n}\n\n#[test]\nfn fix_become_worst() {\n    assert_suggestion_result(\n        \"But results seems stay at one place or become worst.\",\n        lint_group(),\n        \"But results seems stay at one place or become worse.\",\n    );\n}\n\n#[test]\nfn fix_becomes_worst() {\n    assert_suggestion_result(\n        \"This becomes worst if you have an x64 dll and an x86 dll that you don't have thier source codes and want to use them in same project!\",\n        lint_group(),\n        \"This becomes worse if you have an x64 dll and an x86 dll that you don't have thier source codes and want to use them in same project!\",\n    );\n}\n\n#[test]\nfn fix_becoming_worst() {\n    assert_suggestion_result(\n        \"France is becoming worst than the Five Eyes\",\n        lint_group(),\n        \"France is becoming worse than the Five Eyes\",\n    );\n}\n\n// -far worse-\n#[test]\nfn detect_far_worse_atomic() {\n    assert_suggestion_result(\"far worst\", lint_group(), \"far worse\");\n}\n\n#[test]\nfn detect_far_worse_real_world() {\n    assert_suggestion_result(\n        \"I mainly use Firefox (personal preference) and have noticed it has far worst performance than Chrome\",\n        lint_group(),\n        \"I mainly use Firefox (personal preference) and have noticed it has far worse performance than Chrome\",\n    );\n}\n\n// -get worst-\n#[test]\nfn fix_get_worse() {\n    assert_suggestion_result(\n        \"and the problem appears to get worst with 2025.5.1 and 2025.5.2.\",\n        lint_group(),\n        \"and the problem appears to get worse with 2025.5.1 and 2025.5.2.\",\n    );\n}\n\n#[test]\nfn fix_gets_worse() {\n    assert_suggestion_result(\n        \"It just starts after about 15 minutes of work and gradually gets worst.\",\n        lint_group(),\n        \"It just starts after about 15 minutes of work and gradually gets worse.\",\n    );\n}\n\n#[test]\n#[ignore = \"This kind of false positive is probably too subtle to detect\"]\nfn dont_flag_getting_worst() {\n    // Here \"getting\" probably belongs to \"I am getting\" rather than \"getting worst\".\n    // Which would not be an error but \"I am getting the worst accuracy\" would be better.\n    // TODO: Maybe a noun following \"getting\" is enough context?\n    assert_lint_count(\n        \"I am getting worst accuracy on the same dataste and 3 different models.\",\n        lint_group(),\n        0,\n    );\n}\n\n#[test]\nfn fix_getting_worst() {\n    assert_suggestion_result(\n        \"But, as I said, it is getting worst...\",\n        lint_group(),\n        \"But, as I said, it is getting worse...\",\n    );\n}\n\n#[test]\nfn fix_got_worst() {\n    assert_suggestion_result(\n        \"typescript support got worst.\",\n        lint_group(),\n        \"typescript support got worse.\",\n    );\n}\n\n#[test]\nfn fix_gotten_worst() {\n    assert_suggestion_result(\n        \"Has Claude gotten worst?\",\n        lint_group(),\n        \"Has Claude gotten worse?\",\n    );\n}\n\n// -much worse-\n#[test]\nfn detect_much_worse_atomic() {\n    assert_suggestion_result(\"much worst\", lint_group(), \"much worse\");\n}\n\n#[test]\nfn detect_much_worse_real_world() {\n    assert_suggestion_result(\n        \"the generated image quality is much worst (actually nearly broken)\",\n        lint_group(),\n        \"the generated image quality is much worse (actually nearly broken)\",\n    );\n}\n\n// -turn for the worse-\n#[test]\nfn detect_turn_for_the_worse_atomic() {\n    assert_suggestion_result(\"turn for the worst\", lint_group(), \"turn for the worse\");\n}\n\n#[test]\nfn detect_turn_for_the_worse_real_world() {\n    assert_suggestion_result(\n        \"Very surprised to see this repo take such a turn for the worst.\",\n        lint_group(),\n        \"Very surprised to see this repo take such a turn for the worse.\",\n    );\n}\n\n// -worse than-\n#[test]\nfn detect_worse_than_atomic() {\n    assert_suggestion_result(\"worst than\", lint_group(), \"worse than\");\n}\n\n#[test]\nfn detect_worse_than_real_world() {\n    assert_suggestion_result(\n        \"Project real image - inversion quality is worst than in StyleGAN2\",\n        lint_group(),\n        \"Project real image - inversion quality is worse than in StyleGAN2\",\n    );\n}\n\n// -worst ever-\n#[test]\nfn detect_worst_ever_atomic() {\n    assert_suggestion_result(\"worse ever\", lint_group(), \"worst ever\");\n}\n\n#[test]\nfn detect_worst_ever_real_world() {\n    assert_suggestion_result(\n        \"The Bcl package family is one of the worse ever published by Microsoft.\",\n        lint_group(),\n        \"The Bcl package family is one of the worst ever published by Microsoft.\",\n    );\n}\n\n// -worse and worse-\n#[test]\nfn detect_worst_and_worst_atomic() {\n    assert_suggestion_result(\"worst and worst\", lint_group(), \"worse and worse\");\n}\n\n#[test]\nfn detect_worst_and_worst_real_world() {\n    assert_suggestion_result(\n        \"This control-L trick does not work for me. The padding is getting worst and worst.\",\n        lint_group(),\n        \"This control-L trick does not work for me. The padding is getting worse and worse.\",\n    );\n}\n\n#[test]\nfn detect_worse_and_worst_real_world() {\n    assert_suggestion_result(\n        \"This progressively got worse and worst to the point that the machine (LEAD 1010) stopped moving alltogether.\",\n        lint_group(),\n        \"This progressively got worse and worse to the point that the machine (LEAD 1010) stopped moving alltogether.\",\n    );\n}\n\n// -at worst-\n#[test]\nfn detect_at_worst_atomic() {\n    assert_suggestion_result(\n        \"Partial moving of core objects to interpreter state is incorrect at best, unsafe at worse.\",\n        lint_group(),\n        \"Partial moving of core objects to interpreter state is incorrect at best, unsafe at worst.\",\n    );\n}\n\n// -worst case scenario-\n#[test]\nfn correct_worse_case_space() {\n    assert_suggestion_result(\n        \"In the worse case scenario, remote code execution could be achieved.\",\n        lint_group(),\n        \"In the worst-case scenario, remote code execution could be achieved.\",\n    );\n}\n\n#[test]\nfn correct_worse_case_hyphen() {\n    assert_suggestion_result(\n        \"Basically I want my pods to get the original client IP address... or at least have X-Forwarded-For header, in a worse-case scenario.\",\n        lint_group(),\n        \"Basically I want my pods to get the original client IP address... or at least have X-Forwarded-For header, in a worst-case scenario.\",\n    );\n}\n\n#[test]\nfn correct_worse_case_two_hyphens() {\n    assert_suggestion_result(\n        \"In a worse-case-scenario, the scenario class code and the results being analysed, become out of sync, and so the wrong labels are applied.\",\n        lint_group(),\n        \"In a worst-case scenario, the scenario class code and the results being analysed, become out of sync, and so the wrong labels are applied.\",\n    );\n}\n\n// -make it worst-\n#[test]\nfn detect_make_it_worst_atomic() {\n    assert_suggestion_result(\n        \"And if you try to access before that, CloudFront will cache the error and it'll make it worst.\",\n        lint_group(),\n        \"And if you try to access before that, CloudFront will cache the error and it'll make it worse.\",\n    );\n}\n\n// -made it worst-\n#[test]\nfn detect_made_it_worst_atomic() {\n    assert_suggestion_result(\n        \"However in couple of occasions the refresh made it worst and it showed commit differences that were already commited and pushed to origin.\",\n        lint_group(),\n        \"However in couple of occasions the refresh made it worse and it showed commit differences that were already commited and pushed to origin.\",\n    );\n}\n\n// -makes it worst-\n#[test]\nfn detect_makes_it_worst_atomic() {\n    assert_suggestion_result(\n        \"What makes it worst, is if I use the returned SHA to try and update the newly created file I get the same error I show below.\",\n        lint_group(),\n        \"What makes it worse, is if I use the returned SHA to try and update the newly created file I get the same error I show below.\",\n    );\n}\n\n// -making it worst-\n#[test]\nfn detect_making_it_worst_atomic() {\n    assert_suggestion_result(\n        \"PLease ai realled need help with this I think I'm making it worst.\",\n        lint_group(),\n        \"PLease ai realled need help with this I think I'm making it worse.\",\n    );\n}\n\n// -make them worst-\n#[test]\nfn detect_make_them_worst_atomic() {\n    assert_suggestion_result(\n        \"Not sure if this makes things clearer or make them worst.\",\n        lint_group(),\n        \"Not sure if this makes things clearer or make them worse.\",\n    );\n}\n\n// -made them worst-\n#[test]\nfn detect_made_them_worst_atomic() {\n    assert_suggestion_result(\n        \"if not outroght caused them / made them worst\",\n        lint_group(),\n        \"if not outroght caused them / made them worse\",\n    );\n}\n\n// -makes them worst-\n#[test]\nfn detect_makes_them_worst_atomic() {\n    assert_suggestion_result(\n        \"(tried ~14 different hyperparameter and data format combos), however, always just makes them worst, they go from \\\"slightly\\\" wrong to \\\"complete nonsense\\\".\",\n        lint_group(),\n        \"(tried ~14 different hyperparameter and data format combos), however, always just makes them worse, they go from \\\"slightly\\\" wrong to \\\"complete nonsense\\\".\",\n    );\n}\n\n#[test]\n#[ignore = \"This false positive is not handled yet\"]\nfn dont_flag_makes_them_worst_case() {\n    assert_lint_count(\n        \"Note 1: all hash tables has an Achilles heel that makes them worst case O(N)\",\n        lint_group(),\n        0,\n    );\n}\n\n// -making them worst-\n#[test]\nfn detect_making_them_worst_atomic() {\n    assert_suggestion_result(\n        \"As for the last part about Apple deliberately making them worst in order for us to buy the 3s\",\n        lint_group(),\n        \"As for the last part about Apple deliberately making them worse in order for us to buy the 3s\",\n    );\n}\n"
  },
  {
    "path": "harper-core/src/linting/pique_interest.rs",
    "content": "use crate::TokenKind;\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::{CharString, CharStringExt, Token, char_string::char_string};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct PiqueInterest {\n    expr: SequenceExpr,\n}\n\nimpl Default for PiqueInterest {\n    fn default() -> Self {\n        let pattern =\n            SequenceExpr::word_set(&[\"peak\", \"peaked\", \"peek\", \"peeked\", \"peeking\", \"peaking\"])\n                .then_whitespace()\n                .then_kind_either(\n                    TokenKind::is_non_plural_nominal,\n                    TokenKind::is_possessive_determiner,\n                )\n                .then_whitespace()\n                .t_aco(\"interest\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl PiqueInterest {\n    fn to_correct(word: &str) -> Option<CharString> {\n        Some(match word.to_lowercase().as_str() {\n            \"peak\" => char_string!(\"pique\"),\n            \"peek\" => char_string!(\"pique\"),\n            \"peeked\" => char_string!(\"piqued\"),\n            \"peaked\" => char_string!(\"piqued\"),\n            \"peaking\" => char_string!(\"piquing\"),\n            \"peeking\" => char_string!(\"piquing\"),\n            _ => return None,\n        })\n    }\n}\n\nimpl ExprLinter for PiqueInterest {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens[0].span;\n        let word = span.get_content_string(source).to_lowercase();\n        let correct = Self::to_correct(&word)?;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                correct.to_vec(),\n                matched_tokens[0].span.get_content(source),\n            )],\n            message: format!(\n                \"Did you mean `{}` instead of `{}`?\",\n                correct.to_string(),\n                word,\n            ),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects incorrect usage of `peak` or `peek` when the intended word is `pique`, as in the phrase `you've peaked my interest`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::PiqueInterest;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn corrects_peak_interest() {\n        assert_suggestion_result(\n            \"The story managed to peak his interest.\",\n            PiqueInterest::default(),\n            \"The story managed to pique his interest.\",\n        );\n    }\n\n    #[test]\n    fn corrects_peeked_interest_at_start() {\n        assert_suggestion_result(\n            \"Peeked his interest, did she?\",\n            PiqueInterest::default(),\n            \"Piqued his interest, did she?\",\n        );\n    }\n\n    #[test]\n    fn corrects_peak_interest_in_middle() {\n        assert_suggestion_result(\n            \"She tried to peak his interest during the lecture.\",\n            PiqueInterest::default(),\n            \"She tried to pique his interest during the lecture.\",\n        );\n    }\n\n    #[test]\n    fn corrects_peaked_interest_at_end() {\n        assert_suggestion_result(\n            \"All along, she hoped she peaked his interest.\",\n            PiqueInterest::default(),\n            \"All along, she hoped she piqued his interest.\",\n        );\n    }\n\n    #[test]\n    fn does_not_correct_unrelated_peak() {\n        assert_suggestion_result(\n            \"He reached the peak of the mountain.\",\n            PiqueInterest::default(),\n            \"He reached the peak of the mountain.\",\n        );\n    }\n\n    #[test]\n    fn corrects_peaking_interest() {\n        assert_suggestion_result(\n            \"She was peaking his interest with her stories.\",\n            PiqueInterest::default(),\n            \"She was piquing his interest with her stories.\",\n        );\n    }\n\n    #[test]\n    fn corrects_peaked_my_interest() {\n        assert_suggestion_result(\n            \"you've peaked my interest.\",\n            PiqueInterest::default(),\n            \"you've piqued my interest.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/plural_decades/four_digits.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token, TokenStringExt,\n    linting::{LintKind, Suggestion},\n};\n\npub fn match_to_lint_four_digits(\n    toks: &[Token],\n    src: &[char],\n    decade: &[char],\n    suffix: &[char],\n    pre: Option<&[Token]>,\n    post: Option<&[Token]>,\n) -> Option<Lint> {\n    enum UsageJudgment {\n        NotMistake,\n        IsMistake,\n        Unsure,\n    }\n\n    struct Context<'a> {\n        sep_is_hyphen: bool,\n        word: &'a [char],\n    }\n\n    let before = if pre.is_some_and(|b| b.len() >= 2)\n        && let [.., pw, psep] = pre.unwrap()\n        && (psep.kind.is_whitespace() || psep.kind.is_hyphen())\n        && pw.kind.is_word()\n    {\n        Some(Context {\n            sep_is_hyphen: psep.kind.is_hyphen(),\n            word: pw.span.get_content(src),\n        })\n    } else {\n        None\n    };\n\n    let after = if post.is_some_and(|a| a.len() >= 2)\n        && let [nsep, nw, ..] = post.unwrap()\n        && (nsep.kind.is_whitespace() || nsep.kind.is_hyphen())\n        && nw.kind.is_word()\n    {\n        Some(Context {\n            sep_is_hyphen: nsep.kind.is_hyphen(),\n            word: nw.span.get_content(src),\n        })\n    } else {\n        None\n    };\n\n    let judgment = match (&before, &after) {\n        // Words before the decade which suggest the apostrophe is a mistake\n        (Some(before), _)\n            if before\n                .word\n                .eq_any_ignore_ascii_case_str(&[\"early\", \"mid\", \"late\"]) =>\n        {\n            UsageJudgment::IsMistake\n        }\n        // Hyphen before suggests username, not a mistake\n        (Some(before), _) if before.sep_is_hyphen => UsageJudgment::NotMistake,\n        // \"style\" after the decade suggests the apostrophe is a mistake\n        (_, Some(after)) if after.word.eq_ignore_ascii_case_str(\"style\") => {\n            UsageJudgment::IsMistake\n        }\n        (Some(before), _)\n            if !before.sep_is_hyphen && before.word.eq_ignore_ascii_case_str(\"the\") =>\n        {\n            // Go back one more word and look for \"in the\" before the decade\n            if let [.., ppw, ppsep, _, _] = pre.unwrap()\n                && ppsep.kind.is_whitespace()\n                && ppw.kind.is_preposition()\n            {\n                UsageJudgment::IsMistake\n            } else {\n                UsageJudgment::Unsure\n            }\n        }\n        _ => UsageJudgment::Unsure,\n    };\n\n    if !matches!(judgment, UsageJudgment::IsMistake) {\n        return None;\n    }\n\n    Some(Lint {\n        span: toks.span()?,\n        lint_kind: LintKind::Usage,\n        message: \"Plural decades do not use an apostrophe before the `s`\".to_string(),\n        suggestions: vec![Suggestion::ReplaceWith([decade, suffix].concat())],\n        ..Default::default()\n    })\n}\n\n#[cfg(test)]\nmod lints {\n    use super::super::PluralDecades;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    // Made-up examples\n\n    #[test]\n    fn eighties() {\n        assert_lint_count(\"in the 1980's\", PluralDecades::default(), 1);\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn nineties() {\n        assert_lint_count(\"the 1990’s were a bit grungy\", PluralDecades::default(), 1);\n    }\n\n    #[test]\n    fn dont_flag_three_digits() {\n        assert_lint_count(\n            \"200's doesn't look like a decade\",\n            PluralDecades::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_five_digits() {\n        assert_lint_count(\n            \"20000's doesn't look like a decade\",\n            PluralDecades::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_with_thousands_separator() {\n        assert_lint_count(\n            \"Nobody says \\\"in the 1,950's\\\".\",\n            PluralDecades::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_not_ending_with_0() {\n        assert_lint_count(\"1977's best month was October\", PluralDecades::default(), 0);\n    }\n\n    // Real-world examples using sentences found on GitHub\n\n    // 1900s (2 examples)\n\n    #[test]\n    #[ignore = \"Too ambiguous to lint?\"]\n    // 1900 is probably a username, but otherwise it looks like a decade with the common apostrophe error\n    fn dont_flag_ambiguous_1900s_nppl() {\n        assert_no_lints(\n            \"star and fork 1900's gists by creating an account on GitHub.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_in_1900s_npsg() {\n        assert_suggestion_result(\n            \"Children Aged 0-4 in 1900's Norway.\",\n            PluralDecades::default(),\n            \"Children Aged 0-4 in 1900s Norway.\",\n        );\n    }\n\n    // 1910s (1 example)\n\n    #[test]\n    #[ignore = \"Looks like a product name, not a decade\"]\n    fn ignore_hp_1910s() {\n        assert_no_lints(\"Add support for HP 1910's\", PluralDecades::default());\n    }\n\n    // 1920s (3 examples)\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_the_roaring_1920s() {\n        assert_suggestion_result(\n            \"The \\\"Roaring 1920's\\\" wasn't just about the economy and technology.\",\n            PluralDecades::default(),\n            \"The \\\"Roaring 1920s\\\" wasn't just about the economy and technology.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_special_1920s_touch() {\n        assert_suggestion_result(\n            \"It is beautiful and easily readable with that special 1920's touch.\",\n            PluralDecades::default(),\n            \"It is beautiful and easily readable with that special 1920s touch.\",\n        );\n    }\n\n    #[test]\n    fn fix_in_the_1920s() {\n        assert_suggestion_result(\n            \"Sir Josiah Stamp, president of the Bank of England and the second richest man in Britain in the 1920's, speaking at the University of Texas in 1927.\",\n            PluralDecades::default(),\n            \"Sir Josiah Stamp, president of the Bank of England and the second richest man in Britain in the 1920s, speaking at the University of Texas in 1927.\",\n        );\n    }\n\n    // 1950s (7 examples)\n\n    #[test]\n    #[ignore = \"Grammar would be correct but the computer is from 1951 so must be a mistake for 1950s\"]\n    fn dont_flag_ambiguous_1950s_npsg() {\n        assert_no_lints(\n            \"Simulator for 1950's MIT Whirlwind Computer.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn fix_in_the_1950s() {\n        assert_suggestion_result(\n            \"Using the sandbox on the right, write and execute a query to return people born in the 1950's (1950 - 1959)\",\n            PluralDecades::default(),\n            \"Using the sandbox on the right, write and execute a query to return people born in the 1950s (1950 - 1959)\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_a_adj_1950s_npsg() {\n        assert_suggestion_result(\n            \"Wave digital filter based emulation of a famous 1950's tube stereo limiter.\",\n            PluralDecades::default(),\n            \"Wave digital filter based emulation of a famous 1950s tube stereo limiter.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_1950s_npsg() {\n        assert_suggestion_result(\n            \"1950's elevator randomly gets stuck\",\n            PluralDecades::default(),\n            \"1950s elevator randomly gets stuck\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_from_1950s_npsg() {\n        assert_suggestion_result(\n            \"documenting my family's camera business, from 1950's England, run by my father\",\n            PluralDecades::default(),\n            \"documenting my family's camera business, from 1950s England, run by my father\",\n        );\n    }\n\n    #[test]\n    fn fix_from_1950() {\n        assert_suggestion_result(\n            \"Plot the top ten most common baby names for New South Wales by year from the 1950's\",\n            PluralDecades::default(),\n            \"Plot the top ten most common baby names for New South Wales by year from the 1950s\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_1950s_brick_built_house() {\n        assert_suggestion_result(\n            \"We live in a 3 bedroom 1950's brick built house in the UK.\",\n            PluralDecades::default(),\n            \"We live in a 3 bedroom 1950s brick built house in the UK.\",\n        );\n    }\n\n    // 1960s (4 examples)\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_a_adj_1960s_npsg() {\n        assert_suggestion_result(\n            \"Emulating a rare 1960's educational computer.\",\n            PluralDecades::default(),\n            \"Emulating a rare 1960s educational computer.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Ambiguous - could be referring to the specific year 1960 or the decade 1960s\"]\n    fn ignore_ambiguous_1960s_npsg() {\n        assert_no_lints(\n            \"MyTheil - 1960's IP Sprint Hillarity.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_1960s_npsg() {\n        assert_suggestion_result(\n            \"Punchbag game inspired by 1960's TV Show Batman!\",\n            PluralDecades::default(),\n            \"Punchbag game inspired by 1960s TV Show Batman!\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"ambiguous, not sure what it means\"]\n    fn ignore_in_1960s_aperture() {\n        assert_no_lints(\n            \"Several \\\"SP entrances\\\" in 1960's Aperture have visible nodraw around entrance door\",\n            PluralDecades::default(),\n        );\n    }\n\n    // 1970s (11 examples)\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_1970s_npsg() {\n        assert_suggestion_result(\n            \"1970's chess engine CHEKMO-II + UCI adapter.\",\n            PluralDecades::default(),\n            \"1970s chess engine CHEKMO-II + UCI adapter.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_vprog_1970s_nppl_dates() {\n        assert_suggestion_result(\n            \"listsockets printing 1970's dates.\",\n            PluralDecades::default(),\n            \"listsockets printing 1970s dates.\",\n        );\n    }\n\n    #[test]\n    fn fix_in_a_1970s_style_npsg() {\n        assert_suggestion_result(\n            \"I tried to create some catwalk in a 1970's style level.\",\n            PluralDecades::default(),\n            \"I tried to create some catwalk in a 1970s style level.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Grammar would be correct but Pong is from 1972 so must be a mistake for 1970s\"]\n    fn fix_1970s_pong_game() {\n        assert_suggestion_result(\n            \"1970's Pong game rewritten in C++.\",\n            PluralDecades::default(),\n            \"1970s Pong game rewritten in C++.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_1970s_in_parens() {\n        assert_suggestion_result(\n            \"Convert a MIDI file to a record compatible with vintage (1970's) Fisher Price music box record players\",\n            PluralDecades::default(),\n            \"Convert a MIDI file to a record compatible with vintage (1970s) Fisher Price music box record players\",\n        );\n    }\n\n    #[test]\n    fn fix_in_the_1970s() {\n        assert_suggestion_result(\n            \"may have begun, depending on when you start counting, in the 1970's.\",\n            PluralDecades::default(),\n            \"may have begun, depending on when you start counting, in the 1970s.\",\n        );\n    }\n\n    #[test]\n    fn ignore_username_hyphen_1970s_gists() {\n        assert_no_lints(\n            \"GitHub Gist: star and fork ricardo-reis-1970's gists by creating an account on GitHub.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_after_1970s_nppl_minicomputers() {\n        assert_suggestion_result(\n            \"I'm also working on extending it as my CPU is modelled after 1970's minicomputers\",\n            PluralDecades::default(),\n            \"I'm also working on extending it as my CPU is modelled after 1970s minicomputers\",\n        );\n    }\n\n    #[test]\n    fn fix_of_the_1970s() {\n        assert_suggestion_result(\n            \"I despise both as outdated, hard to use relics of the 1970's.\",\n            PluralDecades::default(),\n            \"I despise both as outdated, hard to use relics of the 1970s.\",\n        );\n    }\n\n    #[test]\n    fn fix_couples_in_the_1970s() {\n        assert_suggestion_result(\n            \"This visualization tracks a sample of couples in the 1970's to show how long they transition through relationship stages.\",\n            PluralDecades::default(),\n            \"This visualization tracks a sample of couples in the 1970s to show how long they transition through relationship stages.\",\n        );\n    }\n\n    #[test]\n    fn fix_developed_in_early_1970s() {\n        assert_suggestion_result(\n            \"GPS, originally developed in the early 1970's, is a unidirectional (broadcast only) system\",\n            PluralDecades::default(),\n            \"GPS, originally developed in the early 1970s, is a unidirectional (broadcast only) system\",\n        );\n    }\n\n    // 1980s (13 examples)\n\n    #[test]\n    fn fix_from_the_1980s_like() {\n        assert_suggestion_result(\n            \"Old Stern tables from the 1980's like Flight 2000, Catacomb, etc. are playing audio samples twice, it seems.\",\n            PluralDecades::default(),\n            \"Old Stern tables from the 1980s like Flight 2000, Catacomb, etc. are playing audio samples twice, it seems.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_its_the_1980s() {\n        assert_suggestion_result(\n            \"Declarative Rapid Application Development like it's the 1980's again.\",\n            PluralDecades::default(),\n            \"Declarative Rapid Application Development like it's the 1980s again.\",\n        );\n    }\n\n    #[test]\n    fn fix_from_the_1980s_end() {\n        assert_suggestion_result(\n            \"Former countries from the 1980's\",\n            PluralDecades::default(),\n            \"Former countries from the 1980s\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_a_1980s_npsg() {\n        assert_suggestion_result(\n            \"A re-imiplementation of a classic 1980's DOS game, but in D.\",\n            PluralDecades::default(),\n            \"A re-imiplementation of a classic 1980s DOS game, but in D.\",\n        );\n    }\n\n    #[test]\n    fn fix_of_the_1980s() {\n        assert_suggestion_result(\n            \"The Pugputer is a little labor of love, made as a tribute to the early home computers of the 1980's.\",\n            PluralDecades::default(),\n            \"The Pugputer is a little labor of love, made as a tribute to the early home computers of the 1980s.\",\n        );\n    }\n\n    #[test]\n    fn fix_of_the_1980s_npsg() {\n        assert_suggestion_result(\n            \"FPGA implementation of the 1980's \\\"Music 5000\\\" wavetable synthesiser\",\n            PluralDecades::default(),\n            \"FPGA implementation of the 1980s \\\"Music 5000\\\" wavetable synthesiser\",\n        );\n    }\n\n    #[test]\n    fn fix_based_off_of_the_1980s_npsg() {\n        assert_suggestion_result(\n            \"Space Fortress is based off of the 1980's vector-based arcade game by Cinematronics called Star Castle.\",\n            PluralDecades::default(),\n            \"Space Fortress is based off of the 1980s vector-based arcade game by Cinematronics called Star Castle.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Ambiguous - could be referring to the specific year 1980 or the decade 1980s\"]\n    fn ignore_ambiguous_1980s() {\n        assert_no_lints(\n            \"1980's Old aperture coop checkpoint uses the timer signage instead of checkmarks.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_1980s_nppl() {\n        assert_suggestion_result(\n            \"A project resurrecting the classic 1980's Usborne Computer Guide books, for a new generation of programmers.\",\n            PluralDecades::default(),\n            \"A project resurrecting the classic 1980s Usborne Computer Guide books, for a new generation of programmers.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Missing determiner is out of the scope of the current version of this linter\"]\n    fn fix_the_end_of_missing_determiner_1980s() {\n        assert_suggestion_result(\n            \"System software for TIM011, a school computer from the end of 1980's made in former Yugoslavia\",\n            PluralDecades::default(),\n            \"System software for TIM011, a school computer from the end of the 1980s made in former Yugoslavia\",\n        );\n    }\n\n    #[test]\n    fn fix_in_the_1980s_for() {\n        assert_suggestion_result(\n            \"HMSL was originally released in the 1980's for Mac Plus and Amiga\",\n            PluralDecades::default(),\n            \"HMSL was originally released in the 1980s for Mac Plus and Amiga\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_the_adj_1980s_npsg() {\n        assert_suggestion_result(\n            \"Modern remake of Pole Position, the classic 1980's arcade racing game from Atari.\",\n            PluralDecades::default(),\n            \"Modern remake of Pole Position, the classic 1980s arcade racing game from Atari.\",\n        );\n    }\n\n    #[test]\n    fn fix_since_the_1980s() {\n        assert_suggestion_result(\n            \"Since the 1980's the most common way to interact with a computer is via the graphical user interface (GUI)\",\n            PluralDecades::default(),\n            \"Since the 1980s the most common way to interact with a computer is via the graphical user interface (GUI)\",\n        );\n    }\n\n    // 1990s (12 examples)\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_the_adj_1990s_npsg() {\n        assert_suggestion_result(\n            \"42 3d Graphics Project, recreating the classic 1990's game Wolfienstien 3d\",\n            PluralDecades::default(),\n            \"42 3d Graphics Project, recreating the classic 1990s game Wolfienstien 3d\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_a_1990s_npsg() {\n        assert_suggestion_result(\n            \"A 1990's Retro linux-rice for Hyprland or Sway, based on Quickshell.\",\n            PluralDecades::default(),\n            \"A 1990s Retro linux-rice for Hyprland or Sway, based on Quickshell.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Missing determiner is out of the scope of the current version of this linter\"]\n    fn lacks_determiner_stuck_in_1990s() {\n        assert_suggestion_result(\n            \"Docs are stuck in 1990's - need AWS or Azure example\",\n            PluralDecades::default(),\n            \"Docs are stuck in the 1990s - need AWS or Azure example\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_the_1990s_npsg() {\n        assert_suggestion_result(\n            \"This program recreates the 1990's arcade game \\\"Boulder Dash.\\\"\",\n            PluralDecades::default(),\n            \"This program recreates the 1990s arcade game \\\"Boulder Dash.\\\"\",\n        );\n    }\n\n    #[test]\n    fn fix_in_the_1990s_comma() {\n        assert_suggestion_result(\n            \"In the 1990's, Innovative Computer Solutions released multiple programs for the Newton MessagePad as shareware\",\n            PluralDecades::default(),\n            \"In the 1990s, Innovative Computer Solutions released multiple programs for the Newton MessagePad as shareware\",\n        );\n    }\n\n    #[test]\n    fn fix_a_mid_1990s_npsg() {\n        assert_suggestion_result(\n            \"This repository is a modernization of a mid 1990's implementation of the ZMODEM protocol called 'zmtx-zmrx'.\",\n            PluralDecades::default(),\n            \"This repository is a modernization of a mid 1990s implementation of the ZMODEM protocol called 'zmtx-zmrx'.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Missing determiner is out of the scope of the current version of this linter\"]\n    fn lacks_determiner_written_in_java_in_1990s() {\n        assert_suggestion_result(\n            \"JMud, mud server written in Java in 1990's.\",\n            PluralDecades::default(),\n            \"JMud, mud server written in Java in the 1990s.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_a_adj_1990s_npsg() {\n        assert_suggestion_result(\n            \"Port of a famous 1990's fighting game to MSX2.\",\n            PluralDecades::default(),\n            \"Port of a famous 1990s fighting game to MSX2.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"circa 1990s doesn't sound like natural English. changing to 'circa the 1990s' is out of scope for this linter\"]\n    fn fix_circa_1990s() {\n        assert_suggestion_result(\n            \"Inspired by Digimon \\\"Digivices\\\" tamagotchis circa 1990's.\",\n            PluralDecades::default(),\n            \"Inspired by Digimon \\\"Digivices\\\" tamagotchis circa the 1990s.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_for_1990s_nppl() {\n        assert_suggestion_result(\n            \"Daughter-board for reprogramming 1990's Toyota ECUs\",\n            PluralDecades::default(),\n            \"Daughter-board for reprogramming 1990s Toyota ECUs\",\n        );\n    }\n\n    #[test]\n    fn fix_the_1990s_classic_mario_hit() {\n        assert_suggestion_result(\n            \"A remake of the 1990's classic mario hit.\",\n            PluralDecades::default(),\n            \"A remake of the 1990s classic mario hit.\",\n        );\n    }\n\n    #[test]\n    fn fix_developed_in_early_1990s() {\n        assert_suggestion_result(\n            \"The code was originally developed in the early 1990's\",\n            PluralDecades::default(),\n            \"The code was originally developed in the early 1990s\",\n        );\n    }\n\n    // 2000s (10 example)\n\n    #[test]\n    fn fix_2000s_style() {\n        assert_suggestion_result(\n            \"2000's-style media library for vintage cellphones (Nokia, etc.)\",\n            PluralDecades::default(),\n            \"2000s-style media library for vintage cellphones (Nokia, etc.)\",\n        );\n    }\n\n    #[test]\n    fn ignore_fork_username_hyphen_2000s_nppl() {\n        assert_no_lints(\n            \"star and fork vishal-2000's gists by creating an account on GitHub.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn fix_in_the_2000s() {\n        assert_suggestion_result(\n            \"Simulator engine for reproducing LCD games made by McDonald's in the 2000's.\",\n            PluralDecades::default(),\n            \"Simulator engine for reproducing LCD games made by McDonald's in the 2000s.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Missing determiner is out of the scope of the current version of this linter\"]\n    fn fix_in_the_early_2000s_missing_determiner() {\n        assert_suggestion_result(\n            \"Silo was originally released in early 2000's using LLNL-home-grown license verbiage.\",\n            PluralDecades::default(),\n            \"Silo was originally released in the early 2000s using LLNL-home-grown license verbiage.\",\n        );\n    }\n\n    #[test]\n    fn ignore_view_username_hyphen_2000s_npsg() {\n        assert_no_lints(\n            \"View lxw-2000's full-sized avatar.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn fix_early_2000s_style_npsg() {\n        assert_suggestion_result(\n            \"Early 2000's Style Personal Webpage.\",\n            PluralDecades::default(),\n            \"Early 2000s Style Personal Webpage.\",\n        );\n    }\n\n    #[test]\n    fn fix_from_the_mid_2000s() {\n        assert_suggestion_result(\n            \"Modeled after the now-defunct Geosense game from the mid 2000's\",\n            PluralDecades::default(),\n            \"Modeled after the now-defunct Geosense game from the mid 2000s\",\n        );\n    }\n\n    #[test]\n    fn fix_for_the_early_2000s_games() {\n        assert_suggestion_result(\n            \"GothicKit is a community-run organization hosting libraries and tools for the early 2000's games Gothic and Gothic II.\",\n            PluralDecades::default(),\n            \"GothicKit is a community-run organization hosting libraries and tools for the early 2000s games Gothic and Gothic II.\",\n        );\n    }\n\n    #[test]\n    fn fix_back_in_the_2000s() {\n        assert_suggestion_result(\n            \"A basic music player/organizer I created back in the 2000's - carderne/CAMO.\",\n            PluralDecades::default(),\n            \"A basic music player/organizer I created back in the 2000s - carderne/CAMO.\",\n        );\n    }\n\n    #[test]\n    fn fix_mid_2000s() {\n        assert_suggestion_result(\n            \"Things I wrote about RDF from the mid-2000's.\",\n            PluralDecades::default(),\n            \"Things I wrote about RDF from the mid-2000s.\",\n        );\n    }\n\n    // 2010s (4 examples)\n\n    #[test]\n    #[ignore = \"Sinnemäki 2010 here refers to the author's publication from 2010\"]\n    fn ignore_author_2010s_publication_reference() {\n        assert_no_lints(\n            \"CLDF version of Sinnemäki 2010's dataset on zero marking and word order\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"Looks like a product name, not a decade\"]\n    fn ignore_bazel_calls_vs_2010s_cl() {\n        assert_no_lints(\n            \"Bazel calls VS 2010's cl with /DEBUG:FASTLINK\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn fix_since_the_early_2010s() {\n        assert_suggestion_result(\n            \"the degree of drop-off of CouchDB online community activity since the early-2010's NoSQL craze faded\",\n            PluralDecades::default(),\n            \"the degree of drop-off of CouchDB online community activity since the early-2010s NoSQL craze faded\",\n        );\n    }\n\n    #[test]\n    fn fix_blog_posts_of_the_2010s() {\n        assert_suggestion_result(\n            \"It's jumped off the esoteric analytics blog posts of the 2010's and on to your television screens and into your video games\",\n            PluralDecades::default(),\n            \"It's jumped off the esoteric analytics blog posts of the 2010s and on to your television screens and into your video games\",\n        );\n    }\n\n    // 2020s (10 examples)\n\n    #[test]\n    #[ignore = \"Ambiguous. Looks like awkward wording for `the IEEE CEC's 2020 Strategy Card Game AI Competition\"]\n    fn ignore_ambiguous_2020s() {\n        assert_no_lints(\n            \"This is a bot for Legends of Code and Magic submitted to the IEEE CEC 2020's Strategy Card Game AI Competition.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"Ambiguous. Maybe awkward wording for `CSSPI Fall 2020's frontend`??\"]\n    fn ignore_ambiguous_2020s_2() {\n        assert_no_lints(\n            \"CSSPI Fall 2020's frontend mobile web application utilizing React Native.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"A human can tell from the comparison to `2024's` that `2020's` refers to a specific year/version/release. Harper has no way to tell.\"]\n    fn ignore_ambiguous_2020s_2024s() {\n        assert_no_lints(\n            \"App that converts MSFS 2020's DDS texture format to MSFS 2024's KTX2 format\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"eRum 2020 is probably an event name, not a decade\"]\n    fn ignore_erum_2020s() {\n        assert_no_lints(\n            \"A repository for purposes of eRum 2020's workshop \\\"Image processing and computer vision with R\\\", held on Saturday, June 20, 2020.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"Ambiguous. Not sure what it means\"]\n    fn ignore_ambiguous_2020s_3() {\n        assert_no_lints(\n            \"Crashing upon loading saved game in 2020's\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"DEF CON 2020's is probably an event name, not a decade\"]\n    fn ignore_defcon_2020s_event() {\n        assert_no_lints(\n            \"Reimplementation of DEF CON 2020's Pinboool Binary - pinboool.py.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn ignore_username_hyphen_2020s_avatar() {\n        assert_no_lints(\n            \"View theredpill-2020's full-sized avatar.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"Ambiguous. Not sure what it means\"]\n    fn ignore_ambiguous_2020s_scipy() {\n        assert_no_lints(\n            \"No imread() in 2020's Scipy v1.5.x.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"ambiguous\"]\n    fn ignore_pull_into_2020s() {\n        assert_no_lints(\"Pull into the 2020's.\", PluralDecades::default());\n    }\n\n    #[test]\n    #[ignore = \"Odd. Looks like it should be `Blasas et al's 2020 \\\"FUT9-driven ...\\\"`\"]\n    fn ignore_blasas_et_al_2020s() {\n        assert_no_lints(\n            \"Scripts that were used to create figure 5 in Blasas et al. 2020's \\\"FUT9-driven programming of colon cancer cells towards a stem cell-like state\\\"\",\n            PluralDecades::default(),\n        );\n    }\n\n    // Multiple decades (11 examples)\n\n    #[test]\n    fn fix_in_the_1990s_and_the_2000s() {\n        assert_suggestion_result(\n            \"NTXShape, a converter I developed in the 1990's and maintained through the 2000's\",\n            PluralDecades::default(),\n            \"NTXShape, a converter I developed in the 1990s and maintained through the 2000s\",\n        );\n    }\n\n    #[test]\n    fn fix_early_2000s_early_1990s_early_1980s() {\n        assert_suggestion_result(\n            \"CDISC since 2005, XML since the early 2000's, @SAS since the early 1990's, Programming since the early 1980's.\",\n            PluralDecades::default(),\n            \"CDISC since 2005, XML since the early 2000s, @SAS since the early 1990s, Programming since the early 1980s.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_dates_in_the_1960s_comma_1950s_early_1900s() {\n        assert_suggestion_result(\n            \"OK for dates in the 1960's, 1950's... Now... I expect 1939-12-31T23 ... Was Belgium ever not in UTC+1 timezone in early 1900's ?\",\n            PluralDecades::default(),\n            \"OK for dates in the 1960s, 1950s... Now... I expect 1939-12-31T23 ... Was Belgium ever not in UTC+1 timezone in early 1900s ?\",\n        );\n    }\n\n    #[test]\n    fn fix_late_1970s_early_1980s() {\n        assert_suggestion_result(\n            \"Late 1970's/Early 1980's Text Adventure Game from the Mainframe era\",\n            PluralDecades::default(),\n            \"Late 1970s/Early 1980s Text Adventure Game from the Mainframe era\",\n        );\n    }\n\n    #[test]\n    fn fix_in_the_1970s_and_early_1980s() {\n        assert_suggestion_result(\n            \"We modeled the gas mileage of 398 cars built in the 1970's and early 1980's\",\n            PluralDecades::default(),\n            \"We modeled the gas mileage of 398 cars built in the 1970s and early 1980s\",\n        );\n    }\n\n    #[test]\n    fn fix_from_the_late_1970s_early_1980s() {\n        assert_suggestion_result(\n            \"Europe Card Bus (ECB) is a Retro CPU Bus standard from the late 1970's / early 1980's.\",\n            PluralDecades::default(),\n            \"Europe Card Bus (ECB) is a Retro CPU Bus standard from the late 1970s / early 1980s.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Unnatural English where 'on [decade]' should be 'in the [decade]'\"]\n    fn ignore_on_80s_on_90s_on_2000s_on_2010s_on_2020s() {\n        assert_no_lints(\n            \"Developer on 80's, software engineer on 90's, tech lead on 2000's, manager from 2010's on and CIO/CDO/CTO on 2020's\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_in_the_80s_in_the_90s_2000s_2010s() {\n        assert_suggestion_result(\n            \"UUCP BBS in the 80's Winternet / ABX Net Un Hacking in the 90's FOU 2000's CIS Inc. 2010's For Every Hacker there is an Equal and Opposite Hacker.\",\n            PluralDecades::default(),\n            \"UUCP BBS in the 80s Winternet / ABX Net Un Hacking in the 90s FOU 2000s CIS Inc. 2010s For Every Hacker there is an Equal and Opposite Hacker.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_in_the_1990s_and_2000s() {\n        assert_suggestion_result(\n            \"Edelman and his colleagues in the 1990's and 2000's.\",\n            PluralDecades::default(),\n            \"Edelman and his colleagues in the 1990s and 2000s.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_1930s_ampersand_1940s() {\n        assert_suggestion_result(\n            \"DJ and collector of quality tango music from the golden era (1930's & 1940's)\",\n            PluralDecades::default(),\n            \"DJ and collector of quality tango music from the golden era (1930s & 1940s)\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_80s_90s_2000s_2020s() {\n        assert_suggestion_result(\n            \"Nerdy coder-kid on ZX81 and Oric 1 in the 80's, nerdy teen-tech writer on PC in 90's, nerdy engineer in the 2000's, 2020's MongoDB addict, Databricks fan now!\",\n            PluralDecades::default(),\n            \"Nerdy coder-kid on ZX81 and Oric 1 in the 80s, nerdy teen-tech writer on PC in 90s, nerdy engineer in the 2000s, 2020s MongoDB addict, Databricks fan now!\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/plural_decades/mod.rs",
    "content": "mod four_digits;\nmod two_digits;\n\nuse crate::{\n    Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, expr_linter::Sentence},\n};\n\nuse four_digits::match_to_lint_four_digits;\nuse two_digits::match_to_lint_two_digits;\n\npub struct PluralDecades {\n    expr: SequenceExpr,\n}\n\nimpl Default for PluralDecades {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::default()\n                .then_cardinal_number()\n                .then_apostrophe()\n                .t_aco(\"s\"),\n        }\n    }\n}\n\nimpl ExprLinter for PluralDecades {\n    type Unit = Sentence;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn description(&self) -> &str {\n        \"Flags plural decades erroneously using an apostrophe before the `s`\"\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        // eprintln!(\"📅 {}\", crate::linting::debug::format_lint_match(toks, ctx, src));\n        if toks.len() != 3 {\n            return None;\n        }\n\n        let (decade_chars, _s_chars) =\n            (toks[0].span.get_content(src), toks[2].span.get_content(src));\n\n        // TODO does not yet support two-digit decades like 80's\n        // if decade_chars.len() != 4 || !decade_chars.ends_with(&['0']) {\n        if ![2, 4].contains(&decade_chars.len()) || !decade_chars.ends_with(&['0']) {\n            return None;\n        }\n\n        let (decade_chars, s_chars) =\n            (toks[0].span.get_content(src), toks[2].span.get_content(src));\n\n        let (before_context, after_context): (Option<&[Token]>, Option<&[Token]>) = match ctx {\n            Some((pw, nw)) => {\n                if pw.is_empty() {\n                    if nw.is_empty() {\n                        (None, None)\n                    } else {\n                        (None, Some(nw))\n                    }\n                } else if nw.is_empty() {\n                    (Some(pw), None)\n                } else {\n                    (Some(pw), Some(nw))\n                }\n            }\n            None => (None, None),\n        };\n\n        if decade_chars.len() == 4 {\n            match_to_lint_four_digits(\n                toks,\n                src,\n                decade_chars,\n                s_chars,\n                before_context,\n                after_context,\n            )\n        } else {\n            match_to_lint_two_digits(\n                toks,\n                src,\n                decade_chars,\n                s_chars,\n                before_context,\n                after_context,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/plural_decades/two_digits.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token, TokenKind, TokenStringExt,\n    linting::{LintKind, Suggestion},\n};\n\n#[derive(PartialEq)]\nenum UsageJudgment {\n    NotMistake,\n    IsMistakeForDecade,\n    IsMistakeForAgeRange,\n    Unsure,\n}\n\n// Simplified `TokenType` that works with pattern matching\nenum Tok<'a> {\n    Whitespace,\n    Hyphen,\n    Plus,\n    Word(&'a [char]),\n}\n\npub fn match_to_lint_two_digits(\n    toks: &[Token],\n    src: &[char],\n    decade: &[char],\n    suffix: &[char],\n    before: Option<&[Token]>,\n    after: Option<&[Token]>,\n) -> Option<Lint> {\n    let get_tok = |context: Option<&[Token]>, offset: isize| -> Option<Tok<'_>> {\n        if let Some(toks) = context\n            && let Some(tok) = toks.get_rel(offset)\n        {\n            if tok.kind.is_whitespace() {\n                return Some(Tok::Whitespace);\n            } else if tok.kind.is_hyphen() {\n                return Some(Tok::Hyphen);\n            } else if tok.kind.is_plus() {\n                return Some(Tok::Plus);\n            } else if tok.kind.is_word() {\n                return Some(Tok::Word(tok.span.get_content(src)));\n            }\n        }\n        None\n    };\n\n    let get_kind = |context: Option<&[Token]>, offset: isize| -> Option<TokenKind> {\n        context\n            .and_then(|toks| toks.get_rel(offset))\n            .map(|tok| tok.kind.clone())\n    };\n\n    let get_tok_with_kind =\n        |context: Option<&[Token]>, offset: isize| -> Option<(Tok<'_>, TokenKind)> {\n            let toks = context?;\n            let tok = toks.get_rel(offset)?;\n\n            Some((\n                if tok.kind.is_whitespace() {\n                    Tok::Whitespace\n                } else if tok.kind.is_hyphen() {\n                    Tok::Hyphen\n                } else if tok.kind.is_plus() {\n                    Tok::Plus\n                } else if tok.kind.is_word() {\n                    Tok::Word(tok.span.get_content(src))\n                } else {\n                    return None;\n                },\n                tok.kind.clone(),\n            ))\n        };\n\n    let judge = || {\n        let tok1 = get_tok(before, -1);\n        if let Some(tok1) = tok1 {\n            // _20's / _80's\n            if matches!(tok1, Tok::Whitespace)\n                && let Some((tok2, kind2)) = get_tok_with_kind(before, -2)\n            {\n                // in the 80's\n                if matches!(tok2, Tok::Word(w) if w.eq_ignore_ascii_case_str(\"the\"))\n                    && get_kind(before, -3).is_some_and(|k| k.is_whitespace())\n                    && get_kind(before, -4).is_some_and(|k| k.is_preposition())\n                {\n                    return UsageJudgment::IsMistakeForDecade;\n                }\n                // my 20's\n                if kind2.is_possessive_determiner() {\n                    return UsageJudgment::IsMistakeForAgeRange;\n                }\n                // Windows 10's / Xcode 10's\n                if decade.eq_ignore_ascii_case_str(\"10\")\n                    && matches!(tok2, Tok::Word(w) if w.eq_any_ignore_ascii_case_str(&[\"windows\", \"xcode\", \"android\"]))\n                {\n                    return UsageJudgment::NotMistake;\n                }\n            }\n            // early_20's / late-80's\n            if matches!(tok1, Tok::Whitespace | Tok::Hyphen) && get_tok(before, -2).is_some_and(|t| matches!(t, Tok::Word(w) if w.eq_any_ignore_ascii_case_str(&[\"early\", \"mid\", \"late\"]))) {\n                // my early_20s\n                if get_tok(before, -3).is_some_and(|t| matches!(t, Tok::Whitespace)) && get_kind(before, -4).is_some_and(|k| k.is_possessive_determiner()) {\n                    return UsageJudgment::IsMistakeForAgeRange;\n                }\n                // mid-90's\n                return UsageJudgment::IsMistakeForDecade;\n            }\n            // +10's\n            if matches!(tok1, Tok::Plus)\n                && decade.eq_ignore_ascii_case_str(\"20\")\n                && get_tok(before, -2).is_some_and(|t| matches!(t, Tok::Plus))\n                && get_tok(before, -3)\n                    .is_some_and(|t| matches!(t, Tok::Word(w) if w.eq_ignore_ascii_case_str(\"c\")))\n            {\n                // C++10's\n                return UsageJudgment::NotMistake;\n            }\n        }\n        // 70's_style / 80's-style\n        if get_tok(after, 0).is_some_and(|t| matches!(t, Tok::Whitespace | Tok::Hyphen))\n            && get_tok(after, 1)\n                .is_some_and(|t| matches!(t, Tok::Word(w) if w.eq_ignore_ascii_case_str(\"style\")))\n        {\n            return UsageJudgment::IsMistakeForDecade;\n        }\n        UsageJudgment::Unsure\n    };\n\n    let judgement = judge();\n\n    let with_apostrophe_before = [&['\\''], decade, suffix].concat();\n    let without_apostrophe = &with_apostrophe_before[1..];\n\n    let mut suggestions = vec![];\n\n    if judgement == UsageJudgment::NotMistake {\n        return None;\n    }\n    if judgement == UsageJudgment::IsMistakeForDecade {\n        suggestions.push(Suggestion::ReplaceWith(with_apostrophe_before.to_vec()));\n    }\n    if judgement == UsageJudgment::IsMistakeForAgeRange {\n        suggestions.push(Suggestion::ReplaceWith(without_apostrophe.to_vec()));\n    }\n\n    Some(Lint {\n        span: toks.span()?,\n        lint_kind: LintKind::Usage,\n        suggestions,\n        message: \"To refer to a decade the apostrophe must be before the decade. To refer to an age range, use no apostrophe.\".to_string(),\n        ..Default::default()\n    })\n}\n\n#[cfg(test)]\nmod lints {\n    use super::super::PluralDecades;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    // Made-up examples\n\n    #[test]\n    fn eighties() {\n        assert_lint_count(\"in the 80's\", PluralDecades::default(), 1);\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn nineties() {\n        assert_lint_count(\"the 90’s were a bit grungy\", PluralDecades::default(), 1);\n    }\n\n    #[test]\n    fn dont_flag_three_digits() {\n        assert_no_lints(\"200's doesn't look like a decade\", PluralDecades::default());\n    }\n\n    #[test]\n    fn dont_flag_one_digit() {\n        assert_no_lints(\"0's doesn't look like a decade\", PluralDecades::default());\n    }\n\n    #[test]\n    fn dont_flag_not_ending_with_0() {\n        assert_no_lints(\"'77's best month was October\", PluralDecades::default());\n    }\n\n    // Real-world examples using sentences found on GitHub\n\n    // 10s\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn dont_flag_dot_version_numbers() {\n        assert_no_lints(\n            \"A bug is apparently in FOG 1.5.10's normalize() function inside init.xz.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_showing_the_10s_of_hours() {\n        assert_suggestion_result(\n            \"It took 10's of hours to debug this issue\",\n            PluralDecades::default(),\n            \"It took 10s of hours to debug this issue\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_windows_10() {\n        assert_no_lints(\n            \"How about Windows 10's taskbar progress bar?\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn dont_flag_space_version_numbers_resharper_10() {\n        assert_no_lints(\n            \"\\\"gd\\\" doesn't work correctly with ReSharper 10's \\\"Usage-aware Go to Declaration\\\"\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn dont_flag_space_version_numbers_mermaid_10() {\n        assert_no_lints(\n            \"mermaid 10's ESM only support breaks compat with many apps\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn dont_flag_npm_10s_npsg() {\n        assert_no_lints(\n            \"Align npm packages to npm 10's node engine range\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_xcode_10s_version_number() {\n        assert_no_lints(\n            \"Leverage Xcode 10's new \\\"File list\\\" feature for input/output files of Run Script build phases\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"non-well-known products couldn't really be checked for though\"]\n    fn dont_flag_modo_10s_version_number() {\n        assert_no_lints(\n            \"Modo 10's Unreal editor plugin (for loading PBR materials / textures)\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_windows_10s_touch_keyboard() {\n        assert_no_lints(\n            \"Arrow Key Command History Navigation Not Working Using Windows 10's Built-in 'Touch Keyboard'\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_android_10s_scoped_storage() {\n        assert_no_lints(\n            \"Android 10's Scoped storage using Image picker (Gallery / Camera) with compression example.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_windows_10s_openssh() {\n        assert_no_lints(\n            \"If I try to set Windows 10's OpenSSH ssh-agent.exe as the pageant executable, I get an error message\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"release/version number?\"]\n    fn dont_flag_node10s_resolution_algorithm() {\n        assert_no_lints(\n            \"node10 encoded Node.js 10's resolution algorithm, which predates ESM support\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_xcode_10s_new_build_system() {\n        assert_no_lints(\n            \"Fixes the third party dependency issues introduced by Xcode 10's new build system.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_windows_10s_controlled_folder_access() {\n        assert_no_lints(\n            \"NVDA install fails when Windows 10's Controlled Folder Access is enabled\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_windows_10s_wsl() {\n        assert_no_lints(\n            \"By default Windows 10's WSL has trouble opening paths on mounted VeraCrypt volumes.\",\n            PluralDecades::default(),\n        );\n    }\n\n    // 20s\n\n    #[test]\n    fn dont_flag_cpp20s_std_span() {\n        assert_no_lints(\n            \"This repository contains a single-header implementation of C++20's std::span, conforming to the C++20 committee draft.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn dont_flag_space_version_numbers_virtualenv_20() {\n        assert_no_lints(\n            \"Clarifying virtualenv 20's -p behavior\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn dont_flag_hyphenated_version_numbers_soi_20() {\n        assert_no_lints(\"View soi-20's full-sized avatar.\", PluralDecades::default());\n    }\n\n    #[test]\n    fn dont_flag_cpp20s_concepts() {\n        assert_no_lints(\n            \"Replace SFINAE with C++20's Concepts and Constraints\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn dont_flag_cpp20s_std_latch() {\n        assert_no_lints(\n            \"As part of an experiment I recently switched from ducc's latch class to C++20's std::latch, and to my surprise I noticed a significant speedup\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn dont_flag_team_20s_application() {\n        assert_no_lints(\n            \"Team 20's application for the 2020 Teens In AI Global COVID Hackathon.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"should we detect lesson numbers?\"]\n    fn dont_flag_lesson_20s_sql_query() {\n        assert_no_lints(\n            \"Lesson 20's SQL Query is too inefficient\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_cpp20s_initialization_change() {\n        assert_no_lints(\n            \"Potential issue with C++20's initialization change.\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn fix_my_20s() {\n        assert_suggestion_result(\n            \"Just a software engineer in his 20's.\",\n            PluralDecades::default(),\n            \"Just a software engineer in his 20s.\",\n        );\n    }\n\n    #[test]\n    fn fix_my_early_20s() {\n        assert_suggestion_result(\n            \"Thank you Steve Wozniak :-) it was the dream machine of my early 20's.\",\n            PluralDecades::default(),\n            \"Thank you Steve Wozniak :-) it was the dream machine of my early 20s.\",\n        );\n    }\n\n    #[test]\n    fn fix_my_late_20s() {\n        assert_suggestion_result(\n            \"I only decided that I wanted to work in the field at my late 20's when I chose a graduation course\",\n            PluralDecades::default(),\n            \"I only decided that I wanted to work in the field at my late 20s when I chose a graduation course\",\n        );\n    }\n\n    // 30s\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn dont_flag_sdk_versions() {\n        assert_no_lints(\n            \"binder: We call SDK 30's bindServiceAsUser() and SDK 26's bindDeviceAdminServiceAsUser() methods without a runtime check\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn dont_flag_jxn_hyphen_30s_username() {\n        assert_no_lints(\n            \"GitHub Gist: star and fork jxn-30's gists by creating an account on GitHub\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn fix_my_30s() {\n        assert_suggestion_result(\n            \"I'm a developer in my 30's.\",\n            PluralDecades::default(),\n            \"I'm a developer in my 30s.\",\n        );\n    }\n\n    #[test]\n    fn fix_my_mid_30s() {\n        assert_suggestion_result(\n            \"Today, in my mid 30's, I am proficient in a wide range of programming languages and environments.\",\n            PluralDecades::default(),\n            \"Today, in my mid 30s, I am proficient in a wide range of programming languages and environments.\",\n        );\n    }\n\n    #[test]\n    fn fix_my_early_30s() {\n        assert_suggestion_result(\n            \"Software Developer in my early 30's.\",\n            PluralDecades::default(),\n            \"Software Developer in my early 30s.\",\n        );\n    }\n\n    // 40s\n\n    #[test]\n    #[ignore = \"might be too ambiguous to detect?\"]\n    fn dont_flag_group_40s() {\n        assert_no_lints(\"Group 40's team maths game.\", PluralDecades::default());\n    }\n\n    #[test]\n    fn fix_my_40s() {\n        assert_suggestion_result(\n            \"I'm a married father of two in my 40's who currently programs at work by day, and, well, at home by night.\",\n            PluralDecades::default(),\n            \"I'm a married father of two in my 40s who currently programs at work by day, and, well, at home by night.\",\n        );\n    }\n\n    #[test]\n    fn fix_their_40s() {\n        assert_suggestion_result(\n            \"for a person in their 40's you're awfully bitter\",\n            PluralDecades::default(),\n            \"for a person in their 40s you're awfully bitter\",\n        );\n    }\n\n    #[test]\n    fn fix_my_mid_40s() {\n        assert_suggestion_result(\n            \"I am a system developer in my mid 40's working in the health care sector at DNV Imatis AS.\",\n            PluralDecades::default(),\n            \"I am a system developer in my mid 40s working in the health care sector at DNV Imatis AS.\",\n        );\n    }\n\n    #[test]\n    fn fix_their_mid_40s() {\n        assert_suggestion_result(\n            \"even my parents who are in their mid-40's can manage to use the default interface\",\n            PluralDecades::default(),\n            \"even my parents who are in their mid-40s can manage to use the default interface\",\n        );\n    }\n\n    // 50s\n\n    #[test]\n    #[ignore = \"here it's a username but Harper has no way to know\"]\n    fn dont_flag_50s_username() {\n        assert_no_lints(\"View 50's full-sized avatar.\", PluralDecades::default());\n    }\n\n    // 60s\n\n    #[test]\n    #[ignore = \"here it means 60+ seconds\"]\n    fn dont_flag_60_seconds() {\n        assert_no_lints(\"WSL cold startup 60's +\", PluralDecades::default());\n    }\n\n    #[test]\n    fn fix_my_late_60s() {\n        assert_suggestion_result(\n            \"Comment: i'm a white woman in my late 60's and believe me, they are not too crazy about me\",\n            PluralDecades::default(),\n            \"Comment: i'm a white woman in my late 60s and believe me, they are not too crazy about me\",\n        );\n    }\n\n    // 70s\n\n    #[test]\n    #[ignore = \"ambiguous: version number?\"]\n    fn dont_flag_dotnet_runtime_70s() {\n        assert_no_lints(\n            \"dotnet-runtime-70's release of 16th of May is causing \\\"version `GLIBC_2.34' not found\\\"\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn fix_late_hyphen_70s() {\n        assert_suggestion_result(\n            \"Retrocomputer built from late-70's TTL logic chips\",\n            PluralDecades::default(),\n            \"Retrocomputer built from late-'70s TTL logic chips\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_a_fun_70s_industrial() {\n        assert_suggestion_result(\n            \"A fun 70's industrial \\\"launch\\\" control panel with a Yubikey key switch\",\n            PluralDecades::default(),\n            \"A fun '70s industrial \\\"launch\\\" control panel with a Yubikey key switch\",\n        );\n    }\n\n    // 80s\n\n    #[test]\n    fn fix_of_the_80s_npsg() {\n        assert_suggestion_result(\n            \"A reboot of the 80's Microwriter accessible chord keyboard done using an Arduino.\",\n            PluralDecades::default(),\n            \"A reboot of the '80s Microwriter accessible chord keyboard done using an Arduino.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_an_80s_npsg() {\n        assert_suggestion_result(\n            \"A remake of an 80's card game classic \\\"Around the World\\\"\",\n            PluralDecades::default(),\n            \"A remake of an '80s card game classic \\\"Around the World\\\"\",\n        );\n    }\n\n    #[test]\n    fn fix_the_80s_npsg() {\n        assert_suggestion_result(\n            \"Small remake of the 80's legendary paperboy arcade game\",\n            PluralDecades::default(),\n            \"Small remake of the '80s legendary paperboy arcade game\",\n        );\n    }\n\n    #[test]\n    fn fix_the_80s_style_game_breakout() {\n        assert_suggestion_result(\n            \"I called this pong but then was reminded that it more closely resembles the 80's style game Breakout.\",\n            PluralDecades::default(),\n            \"I called this pong but then was reminded that it more closely resembles the '80s style game Breakout.\",\n        );\n    }\n\n    #[test]\n    fn fix_the_80s_microwriter() {\n        assert_suggestion_result(\n            \"A reboot of the 80's Microwriter accessible chord keyboard done using an Arduino.\",\n            PluralDecades::default(),\n            \"A reboot of the '80s Microwriter accessible chord keyboard done using an Arduino.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_80s_neon_theme() {\n        assert_suggestion_result(\n            \"A flat, 80's neon inspired theme for JupyterLab.\",\n            PluralDecades::default(),\n            \"A flat, '80s neon inspired theme for JupyterLab.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_80s_neon_theme_colors() {\n        assert_suggestion_result(\n            \"Cool UI Theme for Atom based on 80's neon colors with big tabs for easy files Switch.\",\n            PluralDecades::default(),\n            \"Cool UI Theme for Atom based on '80s neon colors with big tabs for easy files Switch.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_80s_synthwave_theme() {\n        assert_suggestion_result(\n            \"An clean 80's synthwave / outrun inspired theme for Vim.\",\n            PluralDecades::default(),\n            \"An clean '80s synthwave / outrun inspired theme for Vim.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_80s_3d_era() {\n        assert_suggestion_result(\n            \"Experimenting with writing 80's era 3D code but in Javascript and with HTML5 Canvas acting as display buffer.\",\n            PluralDecades::default(),\n            \"Experimenting with writing '80s era 3D code but in Javascript and with HTML5 Canvas acting as display buffer.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_80s_theme_80s_aesthetics() {\n        assert_suggestion_result(\n            \"Vibrant 80's Klipper Mainsail Theme, based around 80's Dark Neon Aesthetics.\",\n            PluralDecades::default(),\n            \"Vibrant '80s Klipper Mainsail Theme, based around '80s Dark Neon Aesthetics.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_80s_dark_retro_theme() {\n        assert_suggestion_result(\n            \"80's dark retro theme for VS Code and Sublime Text\",\n            PluralDecades::default(),\n            \"'80s dark retro theme for VS Code and Sublime Text\",\n        );\n    }\n\n    #[test]\n    fn fix_80s_chorus_effect() {\n        assert_suggestion_result(\n            \"An 80's style chorus effect for your KORG 'logue synthesizers - hammondeggs/hera.\",\n            PluralDecades::default(),\n            \"An '80s style chorus effect for your KORG 'logue synthesizers - hammondeggs/hera.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Does this mean a Chrome browser version? If so what's the possessive for?\"]\n    fn dont_flag_chrome_80s() {\n        assert_no_lints(\n            \"Ready for Chrome 80's [Cookies default to SameSite=Lax] ?\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    fn fix_80s_style() {\n        assert_suggestion_result(\n            \"Made your RStudio 80's style only after the sun goes down.\",\n            PluralDecades::default(),\n            \"Made your RStudio '80s style only after the sun goes down.\",\n        );\n    }\n\n    #[test]\n    fn fix_early_80s() {\n        assert_suggestion_result(\n            \"Hardware and a game for the early 80's Z8671 MCU with built-in BASIC\",\n            PluralDecades::default(),\n            \"Hardware and a game for the early '80s Z8671 MCU with built-in BASIC\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_modest_80s_fighter_game() {\n        assert_suggestion_result(\n            \"An attempt by the MEGA65 community to write a modest 80's fighter game with BASIC 65 + Eleven\",\n            PluralDecades::default(),\n            \"An attempt by the MEGA65 community to write a modest '80s fighter game with BASIC 65 + Eleven\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"probably nonnative Engish for 'from the 80s'\"]\n    fn fix_straight_from_80s() {\n        assert_suggestion_result(\n            \"Straight from 80's\",\n            PluralDecades::default(),\n            \"Straight from the '80s\",\n        );\n    }\n\n    // 90s\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_the_90s_were() {\n        assert_suggestion_result(\n            \"Generate animated vector graphics for old-school 90's demos, like ST_NICCC\",\n            PluralDecades::default(),\n            \"Generate animated vector graphics for old-school '90s demos, like ST_NICCC\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"we detect `your 90's` as an age range, not a decade\"]\n    fn fix_late_90s() {\n        assert_suggestion_result(\n            \"gmdrec is a USB interface between your late 90's Sony portable MiniDisc recorder and your PC.\",\n            PluralDecades::default(),\n            \"gmdrec is a USB interface between your late '90s Sony portable MiniDisc recorder and your PC.\",\n        );\n    }\n\n    #[test]\n    fn fix_the_90s_npsg() {\n        assert_suggestion_result(\n            \"A modern vision on the 90's game Log!cal.\",\n            PluralDecades::default(),\n            \"A modern vision on the '90s game Log!cal.\",\n        );\n    }\n\n    #[test]\n    fn fix_from_the_90s() {\n        assert_suggestion_result(\n            \"Digital Sound and Music Interface (from the 90's).\",\n            PluralDecades::default(),\n            \"Digital Sound and Music Interface (from the '90s).\",\n        );\n    }\n\n    #[test]\n    fn fix_the_late_90s() {\n        assert_suggestion_result(\n            \"A modified CircleMUD that ran in the late 90's.\",\n            PluralDecades::default(),\n            \"A modified CircleMUD that ran in the late '90s.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_rad_90s_website() {\n        assert_suggestion_result(\n            \"This is our rad 90's website.\",\n            PluralDecades::default(),\n            \"This is our rad '90s website.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"mixed 80 with no 's next to 90's with 's might be too oddball\"]\n    fn fix_mixed_80s_and_90s() {\n        // We could 'half-fix' just the 90's -> '90s part ...\n        assert_suggestion_result(\n            \"\\\"ワープロ明朝\\\" is a font that reproduced the smoothing algorithm used in the 80-90's Japanese word processors.\",\n            PluralDecades::default(),\n            \"\\\"ワープロ明朝\\\" is a font that reproduced the smoothing algorithm used in the 80s-'90s Japanese word processors.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"90 degrees\"]\n    fn dont_flag_all_90_degrees() {\n        assert_no_lints(\n            \"get_map(\\\"Slope Degrees\\\") returns all 90's unless projected crs is specified\",\n            PluralDecades::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_a_90s_workstation() {\n        assert_suggestion_result(\n            \"a 90's workstation; now likely too small\",\n            PluralDecades::default(),\n            \"a '90s workstation; now likely too small\",\n        );\n    }\n\n    #[test]\n    fn fix_domains_in_the_90s() {\n        assert_suggestion_result(\n            \"Whois for gems, because gem names are like domains in the 90's\",\n            PluralDecades::default(),\n            \"Whois for gems, because gem names are like domains in the '90s\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_the_classic_90s_game() {\n        assert_suggestion_result(\n            \"Dragon Court, the classic 90's game by Fred Haslam\",\n            PluralDecades::default(),\n            \"Dragon Court, the classic '90s game by Fred Haslam\",\n        );\n    }\n\n    // Multiple decades\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_multiple_ages() {\n        assert_suggestion_result(\n            \"It generates 100,000 random \\\"people\\\" and randomly assigns them as being in their 20's, 30's, 40's, 50's, 60's, or 70's.\",\n            PluralDecades::default(),\n            \"It generates 100,000 random \\\"people\\\" and randomly assigns them as being in their 20s, 30s, 40s, 50s, 60s, or 70s.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"not sure if we should support missing 'the', especially when there's two decades\"]\n    fn fix_missing_the() {\n        assert_suggestion_result(\n            \"A thoughtful full-stack reimplementation of gaming in 80's and 90's.\",\n            PluralDecades::default(),\n            \"A thoughtful full-stack reimplementation of gaming in the '80s and '90s.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wip\"]\n    fn fix_my_20s_and_30s() {\n        assert_suggestion_result(\n            \"I spend my 20's and 30's as an officer with Royal Caribbean Cruises\",\n            PluralDecades::default(),\n            \"I spend my 20s and 30s as an officer with Royal Caribbean Cruises\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/plural_wrong_word_of_phrase.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct PluralWrongWordOfPhrase {\n    expr: SequenceExpr,\n}\n\n// If a noun needs other than an -s suffix to be pluralized, include it as the 2nd array element.\nconst PATTERNS: &[(&[&str], &str, &[&str])] = &[\n    (&[\"body\", \"bodies\"], \"in\", &[\"white\"]),\n    (&[\"flash\", \"flashes\"], \"in the\", &[\"pan\"]),\n    (&[\"flash\", \"flashes\"], \"in-the\", &[\"pan\"]),\n    (&[\"line\"], \"of\", &[\"code\"]),\n    (&[\"part\"], \"of\", &[\"speech\", \"speeches\"]),\n    (&[\"point\"], \"of\", &[\"view\"]),\n    (&[\"rule\"], \"of\", &[\"thumb\"]),\n];\n\nimpl Default for PluralWrongWordOfPhrase {\n    fn default() -> Self {\n        let word_str = |w| {\n            SequenceExpr::with(move |t: &Token, s: &[char]| {\n                t.kind.is_word() && t.span.get_content(s).eq_ignore_ascii_case_str(w)\n            })\n        };\n\n        let word_string = |w: String| {\n            SequenceExpr::with(move |t: &Token, s: &[char]| {\n                t.kind.is_word() && t.span.get_content(s).eq_ignore_ascii_case_str(&w)\n            })\n        };\n\n        let mut mistakes = vec![];\n\n        for &(main_noun, mid, last_noun) in PATTERNS {\n            let main_pl = if main_noun.len() == 2 {\n                main_noun[1].to_string()\n            } else {\n                format!(\"{}s\", main_noun[0])\n            };\n            let last_pl = if last_noun.len() == 2 {\n                last_noun[1].to_string()\n            } else {\n                format!(\"{}s\", last_noun[0])\n            };\n\n            mistakes.push(Box::new(\n                SequenceExpr::any_of(vec![\n                    Box::new(word_str(main_noun[0])),\n                    Box::new(word_string(main_pl)),\n                ])\n                .t_ws_h()\n                .then_fixed_phrase(mid)\n                .t_ws_h()\n                .then(word_string(last_pl)),\n            ) as Box<dyn Expr>);\n        }\n\n        Self {\n            expr: SequenceExpr::any_of(mistakes),\n        }\n    }\n}\n\nimpl ExprLinter for PluralWrongWordOfPhrase {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects noun phrases that pluralize the last noun instead of the main noun.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let (main_noun_tok, last_noun_tok) = (toks.first()?, toks.last()?);\n        let (main_noun_span, last_noun_span) = (main_noun_tok.span, last_noun_tok.span);\n        let (main_noun_chars, last_noun_chars) = (\n            main_noun_span.get_content(src),\n            last_noun_span.get_content(src),\n        );\n\n        let (main_noun, mid, last_noun) = PATTERNS.iter().find(|(main, _, last)| {\n            main_noun_chars.starts_with_ignore_ascii_case_str(main[0])\n                && last_noun_chars.starts_with_ignore_ascii_case_str(last[0])\n        })?;\n\n        let main_noun_pl = if main_noun.len() == 2 {\n            main_noun[1].to_string()\n        } else {\n            format!(\"{}s\", main_noun[0])\n        };\n\n        Some(Lint {\n            lint_kind: LintKind::Usage,\n            span: toks.span()?,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                format!(\"{} {} {}\", main_noun_pl, mid, last_noun[0])\n                    .chars()\n                    .collect::<Vec<char>>(),\n                toks.span()?.get_content(src),\n            )],\n            message: \"This phrase is pluralized on the main noun, not on the last noun.\"\n                .to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::PluralWrongWordOfPhrase;\n    use crate::linting::tests::assert_suggestion_result;\n\n    // LinesOfCode\n\n    #[test]\n    fn corrects_line_of_codes() {\n        assert_suggestion_result(\n            \"desktop application used to estimate the line of codes to certain software application\",\n            PluralWrongWordOfPhrase::default(),\n            \"desktop application used to estimate the lines of code to certain software application\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Wrong letters capitalized due to how `Suggstion::replace_with_match_case` works by index.\"]\n    fn corrects_line_of_codes_title_case() {\n        assert_suggestion_result(\n            \"A simple tool for Line Of Codes (LOC) calculation.\",\n            PluralWrongWordOfPhrase::default(),\n            \"A simple tool for Lines Of Code (LOC) calculation.\",\n        );\n    }\n\n    #[test]\n    fn corrects_lines_of_codes() {\n        assert_suggestion_result(\n            \"I myself don't have something against giving users the ability to show the lines of codes they wrote.\",\n            PluralWrongWordOfPhrase::default(),\n            \"I myself don't have something against giving users the ability to show the lines of code they wrote.\",\n        );\n    }\n\n    // PartsOfSpeech\n\n    #[test]\n    fn corrects_part_of_speeches() {\n        assert_suggestion_result(\n            \"The part of speeches (POS) or as follows:\",\n            PluralWrongWordOfPhrase::default(),\n            \"The parts of speech (POS) or as follows:\",\n        )\n    }\n\n    #[test]\n    fn corrects_parts_of_speeches() {\n        assert_suggestion_result(\n            \"It can connect different parts of speeches e.g noun to adjective, adjective to adverb, noun to verb etc.\",\n            PluralWrongWordOfPhrase::default(),\n            \"It can connect different parts of speech e.g noun to adjective, adjective to adverb, noun to verb etc.\",\n        )\n    }\n\n    // PointsOfView\n\n    #[test]\n    fn corrects_point_of_views() {\n        assert_suggestion_result(\n            \"This will produce a huge amount of raw data, representing the region in multiple point of views.\",\n            PluralWrongWordOfPhrase::default(),\n            \"This will produce a huge amount of raw data, representing the region in multiple points of view.\",\n        )\n    }\n\n    #[test]\n    fn corrects_points_of_views() {\n        assert_suggestion_result(\n            \"log events, places, moods and self-reflect from various points of views\",\n            PluralWrongWordOfPhrase::default(),\n            \"log events, places, moods and self-reflect from various points of view\",\n        )\n    }\n\n    // RulesOfThumb\n\n    #[test]\n    fn correct_rule_of_thumbs() {\n        assert_suggestion_result(\n            \"Thanks. 0.2 is just from my rule of thumbs.\",\n            PluralWrongWordOfPhrase::default(),\n            \"Thanks. 0.2 is just from my rules of thumb.\",\n        );\n    }\n\n    #[test]\n    fn correct_rules_of_thumbs() {\n        assert_suggestion_result(\n            \"But as rules of thumbs, what is said in config file should be respected whatever parameter (field or directory) is passed to php-cs-fixer.phar.\",\n            PluralWrongWordOfPhrase::default(),\n            \"But as rules of thumb, what is said in config file should be respected whatever parameter (field or directory) is passed to php-cs-fixer.phar.\",\n        );\n    }\n\n    #[test]\n    fn correct_rules_of_thumbs_hyphenated() {\n        assert_suggestion_result(\n            \"Add rule-of-thumbs for basic metrics, like \\\"Spill more than 1GB is a red flag\\\".\",\n            PluralWrongWordOfPhrase::default(),\n            \"Add rules of thumb for basic metrics, like \\\"Spill more than 1GB is a red flag\\\".\",\n        );\n    }\n\n    // BodiesInWhite\n\n    #[test]\n    fn correct_body_in_whites_1() {\n        assert_suggestion_result(\n            \"Normally, when they manufacture these body in whites, they would spot weld a lot of the components on.\",\n            PluralWrongWordOfPhrase::default(),\n            \"Normally, when they manufacture these bodies in white, they would spot weld a lot of the components on.\",\n        );\n    }\n\n    #[test]\n    fn correct_body_in_whites_2() {\n        assert_suggestion_result(\n            \"I'm not sure, but just having seen a lot of body in whites, I know normally they try to spot weld it.\",\n            PluralWrongWordOfPhrase::default(),\n            \"I'm not sure, but just having seen a lot of bodies in white, I know normally they try to spot weld it.\",\n        );\n    }\n\n    // FlashesInThePan\n\n    #[test]\n    fn correct_flash_in_the_pans() {\n        assert_suggestion_result(\n            \"I wish they do more flash in the pans, like the suggestions they do on ERB2 could be such a good way to see if these suggestions are worthy.\",\n            PluralWrongWordOfPhrase::default(),\n            \"I wish they do more flashes in the pan, like the suggestions they do on ERB2 could be such a good way to see if these suggestions are worthy.\",\n        );\n    }\n\n    #[test]\n    fn correct_flash_in_the_pans_hyphenated() {\n        assert_suggestion_result(\n            \"what makes 'Super Hexagon' rise above other nostalgic flash-in-the-pans is that there is a game to be learned here\",\n            PluralWrongWordOfPhrase::default(),\n            \"what makes 'Super Hexagon' rise above other nostalgic flashes in the pan is that there is a game to be learned here\",\n        );\n    }\n\n    #[test]\n    fn correct_flashes_in_the_pans() {\n        assert_suggestion_result(\n            \"Who are some of the biggest flashes in the pans in wrestling history?\",\n            PluralWrongWordOfPhrase::default(),\n            \"Who are some of the biggest flashes in the pan in wrestling history?\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/possessive_noun.rs",
    "content": "use harper_brill::UPOS;\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::expr::{All, Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::patterns::{UPOSSet, WordSet};\nuse crate::spell::Dictionary;\nuse crate::{Token, TokenKind};\n\npub struct PossessiveNoun<D> {\n    expr: All,\n    dict: D,\n}\n\nimpl<D> PossessiveNoun<D>\nwhere\n    D: Dictionary,\n{\n    pub fn new(dict: D) -> Self {\n        let expr = SequenceExpr::with(UPOSSet::new(&[UPOS::DET, UPOS::PROPN]))\n            .t_ws()\n            .then_kind_is_but_is_not(TokenKind::is_plural_nominal, TokenKind::is_singular_nominal)\n            .t_ws()\n            .then(UPOSSet::new(&[UPOS::NOUN, UPOS::PROPN]))\n            .then_optional(SequenceExpr::anything().t_any());\n\n        let additional_req = SequenceExpr::anything().t_any().t_any().t_any().then_noun();\n\n        let exceptions =\n            SequenceExpr::unless(|tok: &Token, _: &[char]| tok.kind.is_demonstrative_determiner())\n                .t_any()\n                .then_unless(WordSet::new(&[\"flags\", \"checks\", \"catches\", \"you\"]))\n                .t_any()\n                .then_unless(WordSet::new(&[\"form\", \"go\"]));\n\n        Self {\n            expr: All::new(vec![\n                Box::new(expr),\n                Box::new(additional_req),\n                Box::new(exceptions),\n            ]),\n            dict,\n        }\n    }\n}\n\nimpl<D> ExprLinter for PossessiveNoun<D>\nwhere\n    D: Dictionary,\n{\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> Option<Lint> {\n        let last_kind = &matched_tokens.last()?.kind;\n\n        if last_kind.is_upos(UPOS::ADV) {\n            return None;\n        }\n\n        let first = matched_tokens.get(2)?;\n\n        let span = first.span;\n        let plural = span.get_content_string(_source);\n        let singular = if plural.ends_with('s') {\n            &plural[..plural.len() - 1]\n        } else {\n            &plural\n        };\n\n        let replacement = format!(\"{singular}'s\");\n\n        if !self.dict.contains_word_str(&replacement) {\n            return None;\n        }\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::ReplaceWith(replacement.chars().collect())],\n            message: self.description().to_string(),\n            priority: 10,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Use an apostrophe and `s` to form a noun’s possessive.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use std::sync::Arc;\n\n    use super::PossessiveNoun;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n    use crate::spell::FstDictionary;\n\n    fn test_linter() -> PossessiveNoun<Arc<FstDictionary>> {\n        PossessiveNoun::new(FstDictionary::curated())\n    }\n\n    /// Sourced from a Hacker News comment\n    #[test]\n    fn fixes_hn() {\n        assert_suggestion_result(\n            \"Me and Jennifer went to have seen the ducks cousin.\",\n            test_linter(),\n            \"Me and Jennifer went to have seen the duck's cousin.\",\n        );\n    }\n\n    #[test]\n    fn fixes_cats_tail() {\n        assert_suggestion_result(\n            \"The cats tail is long.\",\n            test_linter(),\n            \"The cat's tail is long.\",\n        );\n    }\n\n    #[test]\n    fn fixes_children_toys() {\n        assert_suggestion_result(\n            \"The children toys were scattered.\",\n            test_linter(),\n            \"The children's toys were scattered.\",\n        );\n    }\n\n    #[test]\n    fn fixes_teachers_lounge() {\n        assert_suggestion_result(\n            \"Many schools have a teachers lounge.\",\n            test_linter(),\n            \"Many schools have a teacher's lounge.\",\n        );\n    }\n\n    #[test]\n    fn fixes_ducks_park() {\n        assert_suggestion_result(\n            \"Kids played in the ducks park.\",\n            test_linter(),\n            \"Kids played in the duck's park.\",\n        );\n    }\n\n    #[test]\n    fn no_lint_for_already_possessive() {\n        assert_lint_count(\"The duck's cousin visited.\", test_linter(), 0);\n    }\n\n    #[test]\n    fn no_lint_for_alrreaady_possessive() {\n        assert_lint_count(\"The duck's cousin visited.\", test_linter(), 0);\n    }\n\n    #[test]\n    fn fixes_dogs_bone() {\n        assert_suggestion_result(\n            \"The dogs bone is delicious.\",\n            test_linter(),\n            \"The dog's bone is delicious.\",\n        );\n    }\n\n    #[test]\n    fn fixes_students_books() {\n        assert_suggestion_result(\n            \"The students books are on the desk.\",\n            test_linter(),\n            \"The student's books are on the desk.\",\n        );\n    }\n\n    #[test]\n    fn fixes_farmers_field() {\n        assert_suggestion_result(\n            \"The farmers field looked beautiful.\",\n            test_linter(),\n            \"The farmer's field looked beautiful.\",\n        );\n    }\n\n    #[test]\n    fn fixes_women_dress() {\n        assert_suggestion_result(\n            \"The women dress was elegant.\",\n            test_linter(),\n            \"The women's dress was elegant.\",\n        );\n    }\n\n    #[test]\n    fn fixes_birds_song() {\n        assert_suggestion_result(\n            \"We heard the birds song.\",\n            test_linter(),\n            \"We heard the bird's song.\",\n        );\n    }\n\n    #[test]\n    fn fixes_scientists_research() {\n        assert_suggestion_result(\n            \"The scientists research was groundbreaking.\",\n            test_linter(),\n            \"The scientist's research was groundbreaking.\",\n        );\n    }\n\n    #[test]\n    fn fixes_artists_gallery() {\n        assert_suggestion_result(\n            \"The artists gallery is open.\",\n            test_linter(),\n            \"The artist's gallery is open.\",\n        );\n    }\n\n    #[test]\n    fn no_lint_for_plural_noun() {\n        assert_lint_count(\"The ducks are swimming.\", test_linter(), 0);\n    }\n\n    #[test]\n    fn no_lint_for_proper_noun() {\n        assert_lint_count(\"John's car is red.\", test_linter(), 0);\n    }\n\n    #[test]\n    fn fixes_the_students_assignment() {\n        assert_suggestion_result(\n            \"The students assignment was due yesterday.\",\n            test_linter(),\n            \"The student's assignment was due yesterday.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_birds_flight() {\n        assert_suggestion_result(\n            \"The birds flight was graceful.\",\n            test_linter(),\n            \"The bird's flight was graceful.\",\n        );\n    }\n\n    #[test]\n    fn allows_the_city_lights() {\n        assert_lint_count(\n            \"The city lights twinkled in the distance.\",\n            test_linter(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fixes_the_farmers_crops() {\n        assert_suggestion_result(\n            \"The farmers crops were bountiful this year.\",\n            test_linter(),\n            \"The farmer's crops were bountiful this year.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_artists_inspiration() {\n        assert_suggestion_result(\n            \"The artists inspiration came from nature.\",\n            test_linter(),\n            \"The artist's inspiration came from nature.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_scientists_discovery() {\n        assert_suggestion_result(\n            \"The scientists discovery revolutionized the field.\",\n            test_linter(),\n            \"The scientist's discovery revolutionized the field.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_writers_novel() {\n        assert_suggestion_result(\n            \"The writers novel was a bestseller.\",\n            test_linter(),\n            \"The writer's novel was a bestseller.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_students_presentation() {\n        assert_suggestion_result(\n            \"The students presentation was well-received.\",\n            test_linter(),\n            \"The student's presentation was well-received.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_teams_victory() {\n        assert_suggestion_result(\n            \"The teams victory was celebrated by the fans.\",\n            test_linter(),\n            \"The team's victory was celebrated by the fans.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_museums_collection() {\n        assert_suggestion_result(\n            \"The museums collection included many artifacts.\",\n            test_linter(),\n            \"The museum's collection included many artifacts.\",\n        );\n    }\n\n    #[test]\n    fn no_lint_for_already_possessive_2() {\n        assert_lint_count(\"John's car is red.\", test_linter(), 0);\n    }\n\n    #[test]\n    fn no_lint_for_proper_noun_2() {\n        assert_lint_count(\"Mary went to the store.\", test_linter(), 0);\n    }\n\n    #[test]\n    fn fixes_the_doctors_office() {\n        assert_suggestion_result(\n            \"The doctors office is on Main Street.\",\n            test_linter(),\n            \"The doctor's office is on Main Street.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_neighbors_garden() {\n        assert_suggestion_result(\n            \"The neighbors garden is beautiful.\",\n            test_linter(),\n            \"The neighbor's garden is beautiful.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_architects_design() {\n        assert_suggestion_result(\n            \"The architects design was innovative.\",\n            test_linter(),\n            \"The architect's design was innovative.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_bakers_shop() {\n        assert_suggestion_result(\n            \"The bakers shop is famous for its bread.\",\n            test_linter(),\n            \"The baker's shop is famous for its bread.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_musics_performance() {\n        assert_suggestion_result(\n            \"The musics performance was captivating.\",\n            test_linter(),\n            \"The music's performance was captivating.\",\n        );\n    }\n\n    #[test]\n    fn fixes_the_flowers_scent() {\n        assert_suggestion_result(\n            \"The flowers scent filled the room.\",\n            test_linter(),\n            \"The flower's scent filled the room.\",\n        );\n    }\n\n    #[test]\n    fn allows_birds_hurried() {\n        assert_lint_count(\"The birds hurried off.\", test_linter(), 0);\n    }\n\n    #[test]\n    #[ignore = \"false positive issue 1582\"]\n    fn allows_1582_harms_readability() {\n        assert_lint_count(\n            \"This harms readability and maintainability.\",\n            test_linter(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"false positive issue 1582\"]\n    fn allows_1582_imports_couples() {\n        assert_lint_count(\n            \"Since using Webpack syntax in the imports couples the code to a module bundler\",\n            test_linter(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"false positive issue 1582\"]\n    fn allows_1582_graphics_programmer() {\n        assert_lint_count(\n            \"Are you a graphics programmer or Rust developer?\",\n            test_linter(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"false positive issue 1582\"]\n    fn allows_1582_data_sources() {\n        assert_lint_count(\n            \"these data sources can be queried using a full SQL dialect\",\n            test_linter(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/possessive_your.rs",
    "content": "use crate::{\n    Token, TokenKind,\n    expr::{Expr, SequenceExpr},\n    linting::{\n        ExprLinter, Lint, LintKind, Suggestion,\n        expr_linter::{Chunk, preceded_by_word},\n    },\n};\n\npub struct PossessiveYour {\n    expr: SequenceExpr,\n}\n\nimpl Default for PossessiveYour {\n    fn default() -> Self {\n        let pattern = SequenceExpr::aco(\"you\")\n            .then_whitespace()\n            .then_kind_is_but_is_not_except(\n                TokenKind::is_nominal,\n                TokenKind::is_likely_homograph,\n                &[\"guys\", \"what's\"],\n            );\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for PossessiveYour {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        matched_tokens: &[Token],\n        source: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        if preceded_by_word(ctx, |pw| pw.kind.is_verb()) {\n            return None;\n        }\n\n        let span = matched_tokens.first()?.span;\n        let orig_chars = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![\n                Suggestion::replace_with_match_case(\"your\".chars().collect(), orig_chars),\n                Suggestion::replace_with_match_case(\"you're a\".chars().collect(), orig_chars),\n                Suggestion::replace_with_match_case(\"you're an\".chars().collect(), orig_chars),\n            ],\n            message: \"The possessive version of this word is more common in this context.\"\n                .to_owned(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"The possessive form of `you` is more likely before nouns.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    use super::PossessiveYour;\n\n    #[test]\n    #[ignore = \"currently fails because comments is a homographs (verb or noun)\"]\n    fn your_comments() {\n        assert_suggestion_result(\n            \"You comments may end up in the documentation.\",\n            PossessiveYour::default(),\n            \"Your comments may end up in the documentation.\",\n        );\n    }\n\n    #[test]\n    fn allow_intro_page() {\n        assert_lint_count(\n            \"You can try out an editor that uses Harper under-the-hood here.\",\n            PossessiveYour::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_you_guys() {\n        assert_lint_count(\n            \"I mean I'm pretty sure you guys can't do anything with this stuff.\",\n            PossessiveYour::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn test_suggestion_your() {\n        assert_suggestion_result(\n            \"You combination of artist and teacher.\",\n            PossessiveYour::default(),\n            \"Your combination of artist and teacher.\",\n        );\n    }\n\n    #[test]\n    fn test_suggestion_youre_a() {\n        assert_suggestion_result(\n            \"You combination of artist and teacher.\",\n            PossessiveYour::default(),\n            \"You're a combination of artist and teacher.\",\n        );\n    }\n\n    #[test]\n    #[ignore]\n    fn test_suggestion_multiple() {\n        assert_suggestion_result(\n            \"You knowledge. You imagination. You icosahedron\",\n            PossessiveYour::default(),\n            \"Your knowledge. Your imagination. You're an icosahedron\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_just_showing_you() {\n        assert_lint_count(\n            \"I'm just showing you what's available and how to use it.\",\n            PossessiveYour::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_issue_1583() {\n        assert_no_lints(\n            \"Note that in a world with modules everywhere, you almost never need an IIFE\",\n            PossessiveYour::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_1919_brought_you() {\n        assert_lint_count(\n            \"team who also brought you [BloodHound Enterprise](http://specterops.io/bloodhound-verview/).\",\n            PossessiveYour::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_1919_teaches_you() {\n        assert_lint_count(\n            \"Teaches you PyTorch and many machine learning concepts in a hands-on, code-first way.\",\n            PossessiveYour::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/progressive_needs_be.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ProgressiveNeedsBe {\n    expr: SequenceExpr,\n}\n\nimpl Default for ProgressiveNeedsBe {\n    fn default() -> Self {\n        // Support both contracted (I've/We've/You've/They've) and non-contracted\n        // (I have/We have/You have/They have) forms before a progressive verb.\n        let contracted = SequenceExpr::word_set(&[\n            \"I've\", \"We've\", \"You've\", \"They've\", \"Ive\", \"Weve\", \"Youve\", \"Theyve\",\n        ])\n        .t_ws()\n        .then_verb_progressive_form();\n\n        let non_contracted = SequenceExpr::word_set(&[\"I\", \"We\", \"You\", \"They\"])\n            .t_ws()\n            .then_any_capitalization_of(\"have\")\n            .t_ws()\n            .then_verb_progressive_form();\n\n        let expr = SequenceExpr::any_of(vec![Box::new(contracted), Box::new(non_contracted)]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for ProgressiveNeedsBe {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        use crate::CharStringExt;\n\n        // Collect the word tokens in the matched slice\n        let word_toks: Vec<&Token> = toks.iter().filter(|t| t.kind.is_word()).collect();\n        let first_word = *word_toks.first()?; // contraction or pronoun\n\n        // If this is the non-contracted pattern, extend the replacement span to include \"have\"\n        let have_tok_opt = word_toks\n            .iter()\n            .find(|t| t.span.get_content(src).eq_ignore_ascii_case_str(\"have\"))\n            .copied();\n\n        let span = if let Some(have_tok) = have_tok_opt {\n            crate::Span::new(first_word.span.start, have_tok.span.end)\n        } else {\n            first_word.span\n        };\n\n        // Choose the correct \"be\" contraction based on the pronoun\n        let pronoun = first_word.span.get_content(src);\n        let progressive_replacement = if pronoun.starts_with_ignore_ascii_case_str(\"i\") {\n            \"I'm\"\n        } else if pronoun.starts_with_ignore_ascii_case_str(\"we\") {\n            \"We're\"\n        } else if pronoun.starts_with_ignore_ascii_case_str(\"you\") {\n            \"You're\"\n        } else if pronoun.starts_with_ignore_ascii_case_str(\"they\") {\n            \"They're\"\n        } else {\n            \"I'm\"\n        };\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![\n                Suggestion::replace_with_match_case(\n                    progressive_replacement.chars().collect(),\n                    span.get_content(src),\n                ),\n                Suggestion::InsertAfter(\" been\".chars().collect()),\n            ],\n            message: \"Use present progressive (`…'re/…'m …`) or present perfect progressive (`… have been …`/`…'ve been …`) instead of `… have …ing` or `…'ve …ing`.\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects the ungrammatical patterns `<pronoun> have …ing` (e.g., `I have …ing`) and `<pronoun>'ve …ing` (e.g., `I've …ing`) and suggests either the present progressive (e.g., `I'm/We're/You're/They're …`) or the present perfect progressive (e.g., `I/We/You/They have been …` or `I've/We've/You've/They've been …`).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ProgressiveNeedsBe;\n    use crate::linting::tests::{\n        assert_good_and_bad_suggestions, assert_lint_count, assert_suggestion_result,\n    };\n\n    #[test]\n    fn suggests_im_looking() {\n        assert_suggestion_result(\n            \"I've looking into it.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm looking into it.\",\n        );\n    }\n\n    #[test]\n    fn corrects_basic_im() {\n        assert_suggestion_result(\n            \"I've looking into it.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm looking into it.\",\n        );\n    }\n\n    #[test]\n    fn offers_both_suggestions() {\n        assert_good_and_bad_suggestions(\n            \"I've looking into it.\",\n            ProgressiveNeedsBe::default(),\n            &[\"I'm looking into it.\", \"I've been looking into it.\"],\n            &[],\n        );\n    }\n\n    #[test]\n    fn allows_ive_looked() {\n        assert_lint_count(\"I've looked into it.\", ProgressiveNeedsBe::default(), 0);\n    }\n\n    #[test]\n    fn allows_ive_been_looking() {\n        assert_lint_count(\n            \"I've been looking into it.\",\n            ProgressiveNeedsBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_ive_seen() {\n        assert_lint_count(\"I've seen the results.\", ProgressiveNeedsBe::default(), 0);\n    }\n\n    #[test]\n    fn allows_ive_long_been_looking() {\n        assert_lint_count(\n            \"I've long been looking into it.\",\n            ProgressiveNeedsBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_match_with_punctuation_between() {\n        assert_lint_count(\"I've, looking into it.\", ProgressiveNeedsBe::default(), 0);\n    }\n\n    #[test]\n    fn handles_newline_whitespace() {\n        assert_suggestion_result(\n            \"I've\\nlooking into it.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm\\nlooking into it.\",\n        );\n    }\n\n    #[test]\n    fn capitalization_all_caps_base() {\n        assert_suggestion_result(\n            \"I'VE looking into it.\",\n            ProgressiveNeedsBe::default(),\n            \"I'M looking into it.\",\n        );\n    }\n\n    #[test]\n    fn works_for_weve() {\n        assert_suggestion_result(\n            \"We've looking into it.\",\n            ProgressiveNeedsBe::default(),\n            \"We're looking into it.\",\n        );\n    }\n\n    #[test]\n    fn suggests_im_looking_non_contracted() {\n        assert_suggestion_result(\n            \"I have looking into it.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm looking into it.\",\n        );\n    }\n\n    #[test]\n    fn offers_both_suggestions_non_contracted() {\n        assert_good_and_bad_suggestions(\n            \"They have looking into it.\",\n            ProgressiveNeedsBe::default(),\n            &[\n                \"They're looking into it.\",\n                \"They have been looking into it.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn allows_i_have_been_looking() {\n        assert_lint_count(\n            \"I have been looking into it.\",\n            ProgressiveNeedsBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_i_have_looked() {\n        assert_lint_count(\"I have looked into it.\", ProgressiveNeedsBe::default(), 0);\n    }\n\n    // Additional generalized cases\n    // Contracted: I've/We've/You've/They've + gerund\n    #[test]\n    fn ive_working() {\n        assert_suggestion_result(\n            \"I've working on it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm working on it today.\",\n        );\n    }\n    #[test]\n    fn weve_working() {\n        assert_suggestion_result(\n            \"We've working on it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're working on it today.\",\n        );\n    }\n    #[test]\n    fn youve_working() {\n        assert_suggestion_result(\n            \"You've working on it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're working on it today.\",\n        );\n    }\n    #[test]\n    fn theyve_working() {\n        assert_suggestion_result(\n            \"They've working on it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're working on it today.\",\n        );\n    }\n\n    #[test]\n    fn ive_eating() {\n        assert_suggestion_result(\n            \"I've eating it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm eating it today.\",\n        );\n    }\n    #[test]\n    fn weve_eating() {\n        assert_suggestion_result(\n            \"We've eating it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're eating it today.\",\n        );\n    }\n    #[test]\n    fn youve_eating() {\n        assert_suggestion_result(\n            \"You've eating it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're eating it today.\",\n        );\n    }\n    #[test]\n    fn theyve_eating() {\n        assert_suggestion_result(\n            \"They've eating it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're eating it today.\",\n        );\n    }\n\n    #[test]\n    fn ive_reading() {\n        assert_suggestion_result(\n            \"I've reading it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm reading it today.\",\n        );\n    }\n    #[test]\n    fn weve_reading() {\n        assert_suggestion_result(\n            \"We've reading it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're reading it today.\",\n        );\n    }\n    #[test]\n    fn youve_reading() {\n        assert_suggestion_result(\n            \"You've reading it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're reading it today.\",\n        );\n    }\n    #[test]\n    fn theyve_reading() {\n        assert_suggestion_result(\n            \"They've reading it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're reading it today.\",\n        );\n    }\n\n    #[test]\n    fn ive_writing() {\n        assert_suggestion_result(\n            \"I've writing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm writing it today.\",\n        );\n    }\n    #[test]\n    fn weve_writing() {\n        assert_suggestion_result(\n            \"We've writing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're writing it today.\",\n        );\n    }\n    #[test]\n    fn youve_writing() {\n        assert_suggestion_result(\n            \"You've writing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're writing it today.\",\n        );\n    }\n    #[test]\n    fn theyve_writing() {\n        assert_suggestion_result(\n            \"They've writing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're writing it today.\",\n        );\n    }\n\n    #[test]\n    fn ive_speaking() {\n        assert_suggestion_result(\n            \"I've speaking about it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm speaking about it today.\",\n        );\n    }\n    #[test]\n    fn weve_speaking() {\n        assert_suggestion_result(\n            \"We've speaking about it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're speaking about it today.\",\n        );\n    }\n    #[test]\n    fn youve_speaking() {\n        assert_suggestion_result(\n            \"You've speaking about it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're speaking about it today.\",\n        );\n    }\n    #[test]\n    fn theyve_speaking() {\n        assert_suggestion_result(\n            \"They've speaking about it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're speaking about it today.\",\n        );\n    }\n\n    #[test]\n    fn ive_studying() {\n        assert_suggestion_result(\n            \"I've studying it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm studying it today.\",\n        );\n    }\n    #[test]\n    fn weve_studying() {\n        assert_suggestion_result(\n            \"We've studying it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're studying it today.\",\n        );\n    }\n    #[test]\n    fn youve_studying() {\n        assert_suggestion_result(\n            \"You've studying it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're studying it today.\",\n        );\n    }\n    #[test]\n    fn theyve_studying() {\n        assert_suggestion_result(\n            \"They've studying it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're studying it today.\",\n        );\n    }\n\n    #[test]\n    fn ive_testing() {\n        assert_suggestion_result(\n            \"I've testing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm testing it today.\",\n        );\n    }\n    #[test]\n    fn weve_testing() {\n        assert_suggestion_result(\n            \"We've testing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're testing it today.\",\n        );\n    }\n    #[test]\n    fn youve_testing() {\n        assert_suggestion_result(\n            \"You've testing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're testing it today.\",\n        );\n    }\n    #[test]\n    fn theyve_testing() {\n        assert_suggestion_result(\n            \"They've testing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're testing it today.\",\n        );\n    }\n\n    #[test]\n    fn ive_using() {\n        assert_suggestion_result(\n            \"I've using it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm using it today.\",\n        );\n    }\n    #[test]\n    fn weve_using() {\n        assert_suggestion_result(\n            \"We've using it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're using it today.\",\n        );\n    }\n    #[test]\n    fn youve_using() {\n        assert_suggestion_result(\n            \"You've using it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're using it today.\",\n        );\n    }\n    #[test]\n    fn theyve_using() {\n        assert_suggestion_result(\n            \"They've using it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're using it today.\",\n        );\n    }\n\n    // Non-contracted: I/We/You/They have + gerund\n    #[test]\n    fn i_have_working() {\n        assert_suggestion_result(\n            \"I have working on it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm working on it today.\",\n        );\n    }\n    #[test]\n    fn we_have_working() {\n        assert_suggestion_result(\n            \"We have working on it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're working on it today.\",\n        );\n    }\n    #[test]\n    fn you_have_working() {\n        assert_suggestion_result(\n            \"You have working on it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're working on it today.\",\n        );\n    }\n    #[test]\n    fn they_have_working() {\n        assert_suggestion_result(\n            \"They have working on it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're working on it today.\",\n        );\n    }\n\n    #[test]\n    fn i_have_eating() {\n        assert_suggestion_result(\n            \"I have eating it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm eating it today.\",\n        );\n    }\n    #[test]\n    fn we_have_eating() {\n        assert_suggestion_result(\n            \"We have eating it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're eating it today.\",\n        );\n    }\n    #[test]\n    fn you_have_eating() {\n        assert_suggestion_result(\n            \"You have eating it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're eating it today.\",\n        );\n    }\n    #[test]\n    fn they_have_eating() {\n        assert_suggestion_result(\n            \"They have eating it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're eating it today.\",\n        );\n    }\n\n    #[test]\n    fn i_have_reading() {\n        assert_suggestion_result(\n            \"I have reading it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm reading it today.\",\n        );\n    }\n    #[test]\n    fn we_have_reading() {\n        assert_suggestion_result(\n            \"We have reading it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're reading it today.\",\n        );\n    }\n    #[test]\n    fn you_have_reading() {\n        assert_suggestion_result(\n            \"You have reading it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're reading it today.\",\n        );\n    }\n    #[test]\n    fn they_have_reading() {\n        assert_suggestion_result(\n            \"They have reading it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're reading it today.\",\n        );\n    }\n\n    #[test]\n    fn i_have_writing() {\n        assert_suggestion_result(\n            \"I have writing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm writing it today.\",\n        );\n    }\n    #[test]\n    fn we_have_writing() {\n        assert_suggestion_result(\n            \"We have writing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're writing it today.\",\n        );\n    }\n    #[test]\n    fn you_have_writing() {\n        assert_suggestion_result(\n            \"You have writing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're writing it today.\",\n        );\n    }\n    #[test]\n    fn they_have_writing() {\n        assert_suggestion_result(\n            \"They have writing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're writing it today.\",\n        );\n    }\n\n    #[test]\n    fn i_have_speaking() {\n        assert_suggestion_result(\n            \"I have speaking about it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm speaking about it today.\",\n        );\n    }\n    #[test]\n    fn we_have_speaking() {\n        assert_suggestion_result(\n            \"We have speaking about it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're speaking about it today.\",\n        );\n    }\n    #[test]\n    fn you_have_speaking() {\n        assert_suggestion_result(\n            \"You have speaking about it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're speaking about it today.\",\n        );\n    }\n    #[test]\n    fn they_have_speaking() {\n        assert_suggestion_result(\n            \"They have speaking about it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're speaking about it today.\",\n        );\n    }\n\n    #[test]\n    fn i_have_studying() {\n        assert_suggestion_result(\n            \"I have studying it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm studying it today.\",\n        );\n    }\n    #[test]\n    fn we_have_studying() {\n        assert_suggestion_result(\n            \"We have studying it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're studying it today.\",\n        );\n    }\n    #[test]\n    fn you_have_studying() {\n        assert_suggestion_result(\n            \"You have studying it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're studying it today.\",\n        );\n    }\n    #[test]\n    fn they_have_studying() {\n        assert_suggestion_result(\n            \"They have studying it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're studying it today.\",\n        );\n    }\n\n    #[test]\n    fn i_have_testing() {\n        assert_suggestion_result(\n            \"I have testing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm testing it today.\",\n        );\n    }\n    #[test]\n    fn we_have_testing() {\n        assert_suggestion_result(\n            \"We have testing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're testing it today.\",\n        );\n    }\n    #[test]\n    fn you_have_testing() {\n        assert_suggestion_result(\n            \"You have testing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're testing it today.\",\n        );\n    }\n    #[test]\n    fn they_have_testing() {\n        assert_suggestion_result(\n            \"They have testing it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're testing it today.\",\n        );\n    }\n\n    #[test]\n    fn i_have_using() {\n        assert_suggestion_result(\n            \"I have using it today.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm using it today.\",\n        );\n    }\n    #[test]\n    fn we_have_using() {\n        assert_suggestion_result(\n            \"We have using it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're using it today.\",\n        );\n    }\n    #[test]\n    fn you_have_using() {\n        assert_suggestion_result(\n            \"You have using it today.\",\n            ProgressiveNeedsBe::default(),\n            \"You're using it today.\",\n        );\n    }\n    #[test]\n    fn they_have_using() {\n        assert_suggestion_result(\n            \"They have using it today.\",\n            ProgressiveNeedsBe::default(),\n            \"They're using it today.\",\n        );\n    }\n\n    // Both-suggestion checks\n    #[test]\n    fn both_suggestions_ive_working() {\n        assert_good_and_bad_suggestions(\n            \"I've working today.\",\n            ProgressiveNeedsBe::default(),\n            &[\"I'm working today.\", \"I've been working today.\"],\n            &[],\n        );\n    }\n    #[test]\n    fn both_suggestions_we_have_reading() {\n        assert_good_and_bad_suggestions(\n            \"We have reading it today.\",\n            ProgressiveNeedsBe::default(),\n            &[\"We're reading it today.\", \"We have been reading it today.\"],\n            &[],\n        );\n    }\n    #[test]\n    fn both_suggestions_youve_reading() {\n        assert_good_and_bad_suggestions(\n            \"You've reading today.\",\n            ProgressiveNeedsBe::default(),\n            &[\"You're reading today.\", \"You've been reading today.\"],\n            &[],\n        );\n    }\n    #[test]\n    fn both_suggestions_they_have_writing() {\n        assert_good_and_bad_suggestions(\n            \"They have writing today.\",\n            ProgressiveNeedsBe::default(),\n            &[\"They're writing today.\", \"They have been writing today.\"],\n            &[],\n        );\n    }\n\n    // Non-match and allowed-form checks\n    fn no_match_punctuation_contracted() {\n        assert_lint_count(\"I've, working today.\", ProgressiveNeedsBe::default(), 0);\n    }\n    #[test]\n    fn no_match_punctuation_non_contracted() {\n        assert_lint_count(\"I have, working today.\", ProgressiveNeedsBe::default(), 0);\n    }\n    #[test]\n    fn no_match_adverb_interruption() {\n        assert_lint_count(\n            \"I have quickly working today.\",\n            ProgressiveNeedsBe::default(),\n            0,\n        );\n    }\n    #[test]\n    fn allowed_contracted_have_been() {\n        assert_lint_count(\n            \"You've been studying today.\",\n            ProgressiveNeedsBe::default(),\n            0,\n        );\n    }\n    #[test]\n    fn allowed_non_contracted_have_been() {\n        assert_lint_count(\n            \"You have been studying today.\",\n            ProgressiveNeedsBe::default(),\n            0,\n        );\n    }\n    #[test]\n    fn allowed_they_have_been() {\n        assert_lint_count(\n            \"They have been testing today.\",\n            ProgressiveNeedsBe::default(),\n            0,\n        );\n    }\n    #[test]\n    fn allowed_theyve_been() {\n        assert_lint_count(\n            \"They've been testing today.\",\n            ProgressiveNeedsBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn capitalization_variants_non_contracted() {\n        assert_suggestion_result(\n            \"WE HAVE working today.\",\n            ProgressiveNeedsBe::default(),\n            \"WE'RE working today.\",\n        );\n    }\n    #[test]\n    fn newline_variants_non_contracted() {\n        assert_suggestion_result(\n            \"We have\\nworking on it today.\",\n            ProgressiveNeedsBe::default(),\n            \"We're\\nworking on it today.\",\n        );\n    }\n\n    //////////\n\n    #[test]\n    #[ignore = \"Handling the progressive `being` will need a special case\"]\n    fn test_ive_being() {\n        assert_good_and_bad_suggestions(\n            \"I've being playing with languages.toml\",\n            ProgressiveNeedsBe::default(),\n            &[\n                \"I've been playing with languages.toml\",\n                \"I'm playing with languages.toml\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn test_ive_doing_no_apostrophe() {\n        assert_suggestion_result(\n            \"Ive always seen the variables and debug into it, and thats what ive doing.\",\n            ProgressiveNeedsBe::default(),\n            \"Ive always seen the variables and debug into it, and thats what i'm doing.\",\n        );\n    }\n\n    #[test]\n    fn test_ive_looking_no_apostrophe() {\n        assert_suggestion_result(\n            \"Ive looking for a way to get temperature and humidity for all of our rooms within for a reasonable price in Germany.\",\n            ProgressiveNeedsBe::default(),\n            \"I'm looking for a way to get temperature and humidity for all of our rooms within for a reasonable price in Germany.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Handling the progressive `being` will need a special case\"]\n    fn test_youve_being() {\n        assert_suggestion_result(\n            \"Thanks for all the work you've being doing for this project btw!\",\n            ProgressiveNeedsBe::default(),\n            \"Thanks for all the work you're doing for this project btw!\",\n        );\n    }\n\n    #[test]\n    fn test_theyve_doing() {\n        assert_suggestion_result(\n            \"it’s also kind of implied users read the documentation or generally have a sense of what they’ve doing and what could go wrong\",\n            ProgressiveNeedsBe::default(),\n            \"it’s also kind of implied users read the documentation or generally have a sense of what they're doing and what could go wrong\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/pronoun_are.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\n/// Corrects the shorthand `r` after plural first- and second-person pronouns.\npub struct PronounAre {\n    expr: SequenceExpr,\n}\n\nimpl Default for PronounAre {\n    fn default() -> Self {\n        let expr = SequenceExpr::default()\n            .then_kind_where(|kind| {\n                kind.is_pronoun()\n                    && kind.is_subject_pronoun()\n                    && (kind.is_second_person_pronoun()\n                        || kind.is_first_person_plural_pronoun()\n                        || kind.is_third_person_plural_pronoun())\n            })\n            .t_ws()\n            .t_aco(\"r\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for PronounAre {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = tokens.span()?;\n        let pronoun = tokens.first()?;\n        let gap = tokens.get(1)?;\n        let letter = tokens.get(2)?;\n\n        let pronoun_chars = pronoun.span.get_content(source);\n        let gap_chars = gap.span.get_content(source);\n        let letter_chars = letter.span.get_content(source);\n\n        let all_pronoun_letters_uppercase = pronoun_chars\n            .iter()\n            .filter(|c| c.is_alphabetic())\n            .all(|c| c.is_uppercase());\n        let letter_has_uppercase = letter_chars.iter().any(|c| c.is_uppercase());\n        let uppercase_suffix = letter_has_uppercase || all_pronoun_letters_uppercase;\n\n        let are_suffix: Vec<char> = if uppercase_suffix {\n            vec!['A', 'R', 'E']\n        } else {\n            vec!['a', 'r', 'e']\n        };\n\n        let re_suffix: Vec<char> = if uppercase_suffix {\n            vec!['R', 'E']\n        } else {\n            vec!['r', 'e']\n        };\n\n        let mut with_are = pronoun_chars.to_vec();\n        with_are.extend_from_slice(gap_chars);\n        with_are.extend(are_suffix);\n\n        let mut with_contraction = pronoun_chars.to_vec();\n        with_contraction.push('\\'');\n        with_contraction.extend(re_suffix);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![\n                Suggestion::ReplaceWith(with_are),\n                Suggestion::ReplaceWith(with_contraction),\n            ],\n            message: \"Use the full verb or the contraction after this pronoun.\".to_owned(),\n            priority: 40,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Spots the letter `r` used in place of `are` or `you're` after plural first- or second-person pronouns.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::PronounAre;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn fixes_you_r() {\n        assert_suggestion_result(\n            \"You r absolutely right.\",\n            PronounAre::default(),\n            \"You are absolutely right.\",\n        );\n    }\n\n    #[test]\n    fn offers_contraction_option() {\n        assert_suggestion_result(\n            \"You r absolutely right.\",\n            PronounAre::default(),\n            \"You're absolutely right.\",\n        );\n    }\n\n    #[test]\n    fn keeps_uppercase_pronoun() {\n        assert_suggestion_result(\n            \"YOU r welcome here.\",\n            PronounAre::default(),\n            \"YOU ARE welcome here.\",\n        );\n    }\n\n    #[test]\n    fn fixes_they_r_with_comma() {\n        assert_suggestion_result(\n            \"They r, of course, arriving tomorrow.\",\n            PronounAre::default(),\n            \"They are, of course, arriving tomorrow.\",\n        );\n    }\n\n    #[test]\n    fn fixes_we_r_lowercase() {\n        assert_suggestion_result(\n            \"we r ready now.\",\n            PronounAre::default(),\n            \"we are ready now.\",\n        );\n    }\n\n    #[test]\n    fn fixes_they_r_sentence_start() {\n        assert_suggestion_result(\n            \"They r planning ahead.\",\n            PronounAre::default(),\n            \"They are planning ahead.\",\n        );\n    }\n\n    #[test]\n    fn fixes_lowercase_sentence() {\n        assert_suggestion_result(\n            \"they r late again.\",\n            PronounAre::default(),\n            \"they are late again.\",\n        );\n    }\n\n    #[test]\n    fn handles_line_break() {\n        assert_suggestion_result(\n            \"We r\\nready to go.\",\n            PronounAre::default(),\n            \"We are\\nready to go.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_contraction() {\n        assert_lint_count(\"You're looking great.\", PronounAre::default(), 0);\n    }\n\n    #[test]\n    fn does_not_flag_full_form() {\n        assert_lint_count(\"They are excited about it.\", PronounAre::default(), 0);\n    }\n\n    #[test]\n    fn ignores_similar_word() {\n        assert_lint_count(\"Your results impressed everyone.\", PronounAre::default(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/pronoun_contraction/avoid_contraction.rs",
    "content": "use crate::expr::{Expr, SequenceExpr};\nuse crate::{Token, TokenKind};\n\nuse super::super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct AvoidContraction {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for AvoidContraction {\n    fn default() -> Self {\n        let pattern = SequenceExpr::aco(\"you're\")\n            .then_whitespace()\n            .then_kind_is_but_is_not(TokenKind::is_nominal, TokenKind::is_likely_homograph);\n\n        Self {\n            expr: Box::new(pattern),\n        }\n    }\n}\n\nimpl ExprLinter for AvoidContraction {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let word = matched_tokens[0].span.get_content(source);\n\n        Some(Lint {\n            span: matched_tokens[0].span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                vec!['y', 'o', 'u', 'r'],\n                word,\n            )],\n            message: \"It appears you intended to use the possessive version of this word\"\n                .to_owned(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"This rule looks for situations where a contraction was used where it shouldn't have been.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/pronoun_contraction/mod.rs",
    "content": "use super::merge_linters::merge_linters;\n\nmod avoid_contraction;\nmod should_contract;\n\nuse avoid_contraction::AvoidContraction;\nuse should_contract::ShouldContract;\n\nmerge_linters! {PronounContraction => ShouldContract, AvoidContraction => \"Choosing when to contract pronouns is a challenging art. This rule looks for faults.\" }\n\n#[cfg(test)]\nmod tests {\n    use super::PronounContraction;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn issue_225() {\n        assert_suggestion_result(\n            \"Your the man\",\n            PronounContraction::default(),\n            \"You're the man\",\n        );\n    }\n\n    #[test]\n    fn were_team() {\n        assert_suggestion_result(\n            \"Were the best team.\",\n            PronounContraction::default(),\n            \"We're the best team.\",\n        );\n    }\n\n    #[test]\n    fn issue_139() {\n        assert_suggestion_result(\n            \"it would be great if you're PR was merged into tower-lsp\",\n            PronounContraction::default(),\n            \"it would be great if your PR was merged into tower-lsp\",\n        );\n    }\n\n    #[test]\n    fn car() {\n        assert_suggestion_result(\n            \"You're car is black.\",\n            PronounContraction::default(),\n            \"Your car is black.\",\n        );\n    }\n\n    #[test]\n    fn allows_you_are_still() {\n        assert_lint_count(\n            \"In case you're still not convinced.\",\n            PronounContraction::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn issue_576() {\n        assert_lint_count(\n            \"If you're not happy you try again.\",\n            PronounContraction::default(),\n            0,\n        );\n        assert_lint_count(\"No you're not.\", PronounContraction::default(), 0);\n        assert_lint_count(\n            \"Even if you're not fluent in arm assembly, you surely noticed this.\",\n            PronounContraction::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/pronoun_contraction/should_contract.rs",
    "content": "use std::sync::Arc;\n\nuse crate::TokenKind;\nuse crate::expr::AnchorStart;\nuse crate::expr::Expr;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, patterns::WordSet};\n\nuse crate::Lint;\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, LintKind, Suggestion};\n\n/// See also:\n/// harper-core/src/linting/compound_nouns/implied_ownership_compound_nouns.rs\n/// harper-core/src/linting/lets_confusion/mod.rs\n/// harper-core/src/linting/lets_confusion/let_us_redundancy.rs\n/// harper-core/src/linting/lets_confusion/no_contraction_with_verb.rs\npub struct ShouldContract {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ShouldContract {\n    fn default() -> Self {\n        let cap = Arc::new(\n            SequenceExpr::word_set(&[\"your\", \"were\"])\n                .then_whitespace()\n                .then_kind_is_but_is_not(\n                    TokenKind::is_non_quantifier_determiner,\n                    TokenKind::is_pronoun,\n                )\n                .then_whitespace()\n                .then_adjective(),\n        );\n\n        let start = SequenceExpr::with(AnchorStart).then(cap.clone());\n        let mid = SequenceExpr::unless(WordSet::new(&[\"what\"]))\n            .t_ws()\n            .then(cap);\n\n        Self {\n            expr: Box::new(start.or(mid)),\n        }\n    }\n}\n\nimpl ShouldContract {\n    fn mistake_to_correct(mistake: &str) -> Option<Vec<Vec<char>>> {\n        let words = match mistake.to_lowercase().as_str() {\n            \"your\" => vec![\"you're\", \"you are\"],\n            \"were\" => vec![\"we're\", \"we are\"],\n            _ => return None,\n        }\n        .into_iter()\n        .map(|v| v.chars().collect())\n        .collect();\n\n        Some(words)\n    }\n}\n\nimpl ExprLinter for ShouldContract {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        // Locate the mistake\n        let possible_mistakes = [matched_tokens[0].span, matched_tokens[1].span];\n\n        let mut correct = None;\n        let mut span = None;\n\n        for p_mist in possible_mistakes {\n            let mistake = p_mist.get_content_string(source);\n            let correct_cand = Self::mistake_to_correct(&mistake);\n            if correct_cand.is_some() {\n                correct = correct_cand;\n                span = Some(p_mist);\n            }\n        }\n\n        let correct = correct?;\n        let span = span?;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: correct\n                .into_iter()\n                .map(|v| Suggestion::replace_with_match_case(v, span.get_content(source)))\n                .collect(),\n            message: \"Use the contraction or separate the words instead.\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Neglecting the apostrophe when contracting pronouns with \\\"are\\\" (like \\\"your\\\" and \\\"you are\\\") is a fatal, but extremely common mistake to make.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ShouldContract;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn contracts_your_correctly() {\n        assert_suggestion_result(\n            \"your the best\",\n            ShouldContract::default(),\n            \"you're the best\",\n        );\n    }\n\n    #[test]\n    fn contracts_were_complex_correctly() {\n        assert_suggestion_result(\n            \"were a good team\",\n            ShouldContract::default(),\n            \"we're a good team\",\n        );\n    }\n\n    #[test]\n    fn case_insensitive_handling() {\n        assert_suggestion_result(\n            \"Your the best\",\n            ShouldContract::default(),\n            \"You're the best\",\n        );\n    }\n\n    #[test]\n    fn no_match_without_the() {\n        assert_lint_count(\"your best\", ShouldContract::default(), 0);\n        assert_lint_count(\"were best\", ShouldContract::default(), 0);\n    }\n\n    #[test]\n    fn no_match_with_punctuation() {\n        assert_lint_count(\"your, the best\", ShouldContract::default(), 0);\n    }\n\n    #[test]\n    fn allow_norm() {\n        assert_lint_count(\n            \"Let's start this story by going back to the dark ages before internet applications were the norm.\",\n            ShouldContract::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_issue_1508() {\n        assert_no_lints(\"Were any other toys fun?\", ShouldContract::default());\n        assert_no_lints(\"You were his closest friend.\", ShouldContract::default());\n    }\n\n    #[test]\n    fn allows_issue_1673() {\n        assert_no_lints(\"What were the action items?\", ShouldContract::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/pronoun_inflection_be.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::expr::{All, AnchorStart, Expr, ExprMap, SequenceExpr};\nuse crate::patterns::{NominalPhrase, UPOSSet};\nuse crate::{Lrc, Token, TokenKind, TokenStringExt};\n\nuse super::Suggestion;\nuse super::{ExprLinter, Lint, LintKind};\nuse crate::linting::expr_linter::Chunk;\n\npub struct PronounInflectionBe {\n    expr: All,\n    map: Lrc<ExprMap<&'static str>>,\n}\n\nimpl PronounInflectionBe {\n    pub fn new() -> Self {\n        let mod_term = Lrc::new(\n            SequenceExpr::default()\n                .t_ws()\n                .then(UPOSSet::new(&[UPOS::ADJ, UPOS::ADV])),\n        );\n\n        let mut map = ExprMap::default();\n\n        let are = SequenceExpr::default()\n            .then_third_person_singular_pronoun()\n            .then_optional(mod_term.clone())\n            .t_ws()\n            .t_aco(\"are\")\n            .t_any()\n            .then_unless(NominalPhrase);\n        map.insert(are, \"is\");\n\n        let are_at_start = SequenceExpr::with(AnchorStart)\n            .then_third_person_singular_pronoun()\n            .then_optional(mod_term.clone())\n            .t_ws()\n            .t_aco(\"are\")\n            .t_any()\n            .t_any();\n        map.insert(are_at_start, \"is\");\n\n        let arent = SequenceExpr::default()\n            .then_third_person_singular_pronoun()\n            .then_optional(mod_term.clone())\n            .t_ws()\n            .t_aco(\"aren't\")\n            .t_any()\n            .t_any();\n        map.insert(arent, \"isn't\");\n\n        let is = SequenceExpr::default()\n            .then_kind_where(|kind| {\n                kind.as_word()\n                    .as_ref()\n                    .and_then(|m| m.as_ref().and_then(|m| m.np_member))\n                    .unwrap_or_default()\n            })\n            .then_whitespace()\n            .then_third_person_plural_pronoun()\n            .then_optional(mod_term.clone())\n            .t_ws()\n            .t_aco(\"is\")\n            .t_any()\n            .t_any();\n        map.insert(is, \"are\");\n\n        let is_at_start = SequenceExpr::with(AnchorStart)\n            .then_third_person_plural_pronoun()\n            .then_optional(mod_term.clone())\n            .t_ws()\n            .t_aco(\"is\")\n            .t_any()\n            .t_any();\n        map.insert(is_at_start, \"are\");\n\n        let isnt = SequenceExpr::default()\n            .then_third_person_plural_pronoun()\n            .then_optional(mod_term.clone())\n            .t_ws()\n            .t_aco(\"isn't\")\n            .t_any()\n            .t_any();\n        map.insert(isnt, \"aren't\");\n\n        let was = SequenceExpr::default()\n            .then_first_person_plural_pronoun()\n            .then_optional(mod_term.clone())\n            .t_ws()\n            .t_aco(\"was\")\n            .t_any()\n            .t_any();\n        map.insert(was, \"were\");\n\n        // Special case for second and third-person\n        let was_third = SequenceExpr::with(AnchorStart)\n            .then_kind_either(\n                TokenKind::is_third_person_plural_pronoun,\n                TokenKind::is_second_person_pronoun,\n            )\n            .then_optional(mod_term.clone())\n            .t_ws()\n            .t_aco(\"was\")\n            .t_any()\n            .t_any();\n        map.insert(was_third, \"were\");\n\n        let were = SequenceExpr::with(AnchorStart)\n            .then_kind_either(\n                TokenKind::is_first_person_singular_pronoun,\n                TokenKind::is_third_person_singular_pronoun,\n            )\n            .then_optional(mod_term.clone())\n            .t_ws()\n            .t_aco(\"were\")\n            .t_any()\n            .t_any();\n\n        map.insert(were, \"was\");\n\n        let map = Lrc::new(map);\n\n        let mut all = All::default();\n        all.add(map.clone());\n        all.add(|tok: &Token, _: &[char]| tok.kind.is_upos(UPOS::PRON));\n\n        Self { expr: all, map }\n    }\n}\n\nimpl Default for PronounInflectionBe {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl ExprLinter for PronounInflectionBe {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.get_rel(-3)?.span;\n\n        // Determine the correct inflection of \"be\".\n        let correct = self.map.lookup(0, matched_tokens, source)?;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Agreement,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                correct,\n                span.get_content(source),\n            )],\n            message: \"Make the verb agree with its subject.\".to_owned(),\n            priority: 30,\n        })\n    }\n    fn description(&self) -> &str {\n        \"Checks subject–verb agreement for the verb `be`. Third-person singular \\\n         pronouns (`he`, `she`, `it`) require the singular form `is`, while the \\\n         plural pronoun `they` takes `are`. The linter flags mismatches such as \\\n         `He are` or `They is` and offers the correct concord.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    use super::PronounInflectionBe;\n\n    #[test]\n    fn corrects_he_are() {\n        assert_suggestion_result(\n            \"He are my best friend.\",\n            PronounInflectionBe::default(),\n            \"He is my best friend.\",\n        );\n    }\n\n    #[test]\n    fn corrects_she_are() {\n        assert_suggestion_result(\n            \"She are my best friend.\",\n            PronounInflectionBe::default(),\n            \"She is my best friend.\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_is() {\n        assert_suggestion_result(\n            \"They is my best friend.\",\n            PronounInflectionBe::default(),\n            \"They are my best friend.\",\n        );\n    }\n\n    #[test]\n    fn allows_they_are() {\n        assert_lint_count(\n            \"They are my best friend.\",\n            PronounInflectionBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_it_are() {\n        assert_suggestion_result(\n            \"It are on the table.\",\n            PronounInflectionBe::default(),\n            \"It is on the table.\",\n        );\n    }\n\n    #[test]\n    fn corrects_he_are_negation() {\n        assert_suggestion_result(\n            \"He are not amused.\",\n            PronounInflectionBe::default(),\n            \"He is not amused.\",\n        );\n    }\n\n    #[test]\n    fn corrects_she_are_progressive() {\n        assert_suggestion_result(\n            \"She are going to win.\",\n            PronounInflectionBe::default(),\n            \"She is going to win.\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_is_negation() {\n        assert_suggestion_result(\n            \"They is not ready.\",\n            PronounInflectionBe::default(),\n            \"They are not ready.\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_is_progressive() {\n        assert_suggestion_result(\n            \"They is planning a trip.\",\n            PronounInflectionBe::default(),\n            \"They are planning a trip.\",\n        );\n    }\n\n    #[test]\n    fn allows_he_is() {\n        assert_lint_count(\"He is my best friend.\", PronounInflectionBe::default(), 0);\n    }\n\n    #[test]\n    fn allows_she_is_lowercase() {\n        assert_lint_count(\"she is excited to go.\", PronounInflectionBe::default(), 0);\n    }\n\n    #[test]\n    fn allows_it_is() {\n        assert_lint_count(\"It is what it is.\", PronounInflectionBe::default(), 0);\n    }\n\n    #[test]\n    fn allows_they_are_negation() {\n        assert_lint_count(\n            \"They are not interested.\",\n            PronounInflectionBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_they_were() {\n        assert_lint_count(\"They were already here.\", PronounInflectionBe::default(), 0);\n    }\n\n    #[test]\n    fn allows_asdf_is() {\n        assert_lint_count(\"asdf is not a word\", PronounInflectionBe::default(), 0);\n    }\n\n    #[test]\n    fn no_subject() {\n        assert_lint_count(\"is set\", PronounInflectionBe::default(), 0);\n    }\n\n    #[test]\n    fn corrects_i_were() {\n        assert_suggestion_result(\n            \"I were the best player on the field.\",\n            PronounInflectionBe::default(),\n            \"I was the best player on the field.\",\n        );\n    }\n\n    #[test]\n    fn corrects_we_was() {\n        assert_suggestion_result(\n            \"We was the best players on the field.\",\n            PronounInflectionBe::default(),\n            \"We were the best players on the field.\",\n        );\n    }\n\n    #[test]\n    fn corrects_you_was() {\n        assert_suggestion_result(\n            \"You was my best friend.\",\n            PronounInflectionBe::default(),\n            \"You were my best friend.\",\n        );\n    }\n\n    #[test]\n    fn allows_you_were() {\n        assert_lint_count(\n            \"You were my best friend.\",\n            PronounInflectionBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_he_were() {\n        assert_suggestion_result(\n            \"He were late.\",\n            PronounInflectionBe::default(),\n            \"He was late.\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_was() {\n        assert_suggestion_result(\n            \"They was on time.\",\n            PronounInflectionBe::default(),\n            \"They were on time.\",\n        );\n    }\n\n    #[test]\n    fn allows_he_was() {\n        assert_lint_count(\"He was here.\", PronounInflectionBe::default(), 0);\n    }\n\n    #[test]\n    fn allows_we_were() {\n        assert_lint_count(\"We were excited.\", PronounInflectionBe::default(), 0);\n    }\n\n    #[test]\n    fn corrects_he_arent() {\n        assert_suggestion_result(\n            \"He aren't ready.\",\n            PronounInflectionBe::default(),\n            \"He isn't ready.\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_isnt() {\n        assert_suggestion_result(\n            \"They isn't coming.\",\n            PronounInflectionBe::default(),\n            \"They aren't coming.\",\n        );\n    }\n\n    #[test]\n    fn allows_he_isnt() {\n        assert_lint_count(\"He isn't ready.\", PronounInflectionBe::default(), 0);\n    }\n\n    #[test]\n    fn allows_they_arent() {\n        assert_lint_count(\"They aren't coming.\", PronounInflectionBe::default(), 0);\n    }\n\n    #[test]\n    fn corrects_she_really_are() {\n        assert_suggestion_result(\n            \"She really are talented.\",\n            PronounInflectionBe::default(),\n            \"She really is talented.\",\n        );\n    }\n\n    #[test]\n    fn corrects_they_often_is() {\n        assert_suggestion_result(\n            \"They often is late.\",\n            PronounInflectionBe::default(),\n            \"They often are late.\",\n        );\n    }\n\n    #[test]\n    fn corrects_because_he_are() {\n        assert_suggestion_result(\n            \"because he are tired.\",\n            PronounInflectionBe::default(),\n            \"because he is tired.\",\n        );\n    }\n\n    #[test]\n    fn allow_behind_him() {\n        assert_no_lints(\n            \"Behind him are new shadows.\",\n            PronounInflectionBe::default(),\n        );\n    }\n\n    #[test]\n    fn issue_1682() {\n        assert_no_lints(\n            \"Understanding them is significant\",\n            PronounInflectionBe::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/pronoun_knew.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::expr::Expr;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct PronounKnew {\n    expr: LongestMatchOf,\n}\n\ntrait PronounKnewExt {\n    fn then_pronoun(self) -> Self;\n}\n\nimpl Default for PronounKnew {\n    fn default() -> Self {\n        // The pronoun that would occur before a verb would be a subject pronoun.\n        // But \"its\" commonly occurs before \"new\" and is a possessive pronoun. (Much more commonly a determiner)\n        // Since \"his\" and \"her\" are possessive and object pronouns respectively, we ignore them too.\n        let pronoun_pattern = |tok: &Token, source: &[char]| {\n            if !tok.kind.is_upos(UPOS::PRON) {\n                return false;\n            }\n\n            if tok.kind.is_possessive_determiner() || !tok.kind.is_pronoun() {\n                return false;\n            }\n\n            let pronorm = tok.span.get_content_string(source).to_lowercase();\n            let excluded = [\"every\", \"something\", \"nothing\"];\n            !excluded.contains(&&*pronorm)\n        };\n\n        let pronoun_then_new = SequenceExpr::with(pronoun_pattern)\n            .then_whitespace()\n            .then_any_capitalization_of(\"new\");\n\n        let pronoun_adverb_then_new = SequenceExpr::with(pronoun_pattern)\n            .then_whitespace()\n            .then_word_set(&[\"always\", \"never\", \"also\", \"often\"])\n            .then_whitespace()\n            .then_any_capitalization_of(\"new\");\n\n        let combined_pattern = LongestMatchOf::new(vec![\n            Box::new(pronoun_then_new),\n            Box::new(pronoun_adverb_then_new),\n        ]);\n\n        Self {\n            expr: combined_pattern,\n        }\n    }\n}\n\nimpl ExprLinter for PronounKnew {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let typo_token = tokens.last()?;\n        let typo_span = typo_token.span;\n        let typo_text = typo_span.get_content(source);\n\n        Some(Lint {\n            span: typo_span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"knew\".chars().collect(),\n                typo_text,\n            )],\n            message: \"Did you mean “knew” (the past tense of “know”)?\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects when “new” following a pronoun (optionally with an adverb) is a typo for the past tense “knew.”\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::PronounKnew;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn simple_pronoun_new() {\n        assert_suggestion_result(\n            \"I new you would say that.\",\n            PronounKnew::default(),\n            \"I knew you would say that.\",\n        );\n    }\n\n    #[test]\n    fn with_adverb() {\n        assert_suggestion_result(\n            \"She often new the answer.\",\n            PronounKnew::default(),\n            \"She often knew the answer.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_without_pronoun() {\n        assert_lint_count(\"The software is new.\", PronounKnew::default(), 0);\n    }\n\n    #[test]\n    fn does_not_flag_other_context() {\n        assert_lint_count(\"They called it \\\"new\\\".\", PronounKnew::default(), 0);\n    }\n\n    #[test]\n    fn does_not_flag_with_its() {\n        assert_lint_count(\n            \"In 2015, the US was paying on average around 2% for its new issuance bonds.\",\n            PronounKnew::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_with_his() {\n        assert_lint_count(\"His new car is fast.\", PronounKnew::default(), 0);\n    }\n\n    #[test]\n    fn does_not_flag_with_her() {\n        assert_lint_count(\"Her new car is fast.\", PronounKnew::default(), 0);\n    }\n\n    #[test]\n    fn does_not_flag_with_nothing_1298() {\n        assert_lint_count(\"This is nothing new.\", PronounKnew::default(), 0);\n    }\n\n    #[test]\n    fn issue_1381_tricks() {\n        assert_lint_count(\"To learn some new tricks.\", PronounKnew::default(), 0);\n    }\n\n    #[test]\n    fn issue_1381_template() {\n        assert_lint_count(\n            \"Let's build this new template function.\",\n            PronounKnew::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn issue_1381_file() {\n        assert_lint_count(\n            \"Move the function definition inside of that new file.\",\n            PronounKnew::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fixes_i_knew_what() {\n        assert_suggestion_result(\n            \"I new what to do.\",\n            PronounKnew::default(),\n            \"I knew what to do.\",\n        );\n    }\n\n    #[test]\n    fn fixes_she_knew_what() {\n        assert_suggestion_result(\n            \"She new what to do.\",\n            PronounKnew::default(),\n            \"She knew what to do.\",\n        );\n    }\n\n    #[test]\n    fn flags_she_new_danger() {\n        assert_lint_count(\"She new danger lurked nearby.\", PronounKnew::default(), 1);\n    }\n\n    #[test]\n    fn allows_issue_1518() {\n        assert_no_lints(\"If you're new to GitHub, welcome.\", PronounKnew::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/pronoun_verb_agreement.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token, TokenKind,\n    expr::{Expr, FirstMatchOf, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    spell::Dictionary,\n};\n\nstatic NON_MODAL_AUX: &[&str] = &[\n    \"do\", \"don't\", \"does\", \"doesn't\", \"have\", \"has\", \"haven't\", \"hasn't\", \"dont\", \"doesnt\",\n    \"havent\", \"hasnt\",\n];\nstatic IRREGULAR: &[(&str, &str)] = &[(\"don't\", \"doesn't\"), (\"have\", \"has\"), (\"haven't\", \"hasn't\")];\nstatic SUBJUNCTIVE: &[&str] = &[\n    // \"if\" and \"that\" can take the subjunctive mood: \"if he go\", \"that he go\" - as in the US constitution\n    // \"if\" TODO: \"if\" is more complicated to support than \"that\"\n    \"that\",\n    // Verbs that take the subjunctive mood can omit the \"that\":\n    \"demanded\",\n    \"demanding\",\n    \"insisted\",\n    \"insisting\",\n    \"recommended\",\n    \"recommending\",\n    \"requested\",\n    \"requesting\",\n    \"suggested\",\n    \"suggesting\",\n];\nstatic DITRANSITIVE: &[&str] = &[\n    \"give\", \"gave\", \"given\", \"gives\", \"giving\", \"lose\", \"lost\", \"loses\", \"losing\",\n];\n\npub struct PronounVerbAgreement<D> {\n    expr: FirstMatchOf,\n    dict: D,\n}\n\nimpl<D> PronounVerbAgreement<D>\nwhere\n    D: Dictionary,\n{\n    pub fn new(dict: D) -> Self {\n        // TODO: allowing \"you\" leads to false positives:\n        // \"8 years to give you rewards\", \"all I can do is give you examples\"\n        let non_3p_sing_pres_pron_with_3p_sing_pres_verb = SequenceExpr::default()\n            .then_kind_both_but_not(\n                (\n                    TokenKind::is_personal_pronoun,\n                    TokenKind::is_subject_pronoun,\n                ),\n                TokenKind::is_third_person_singular_pronoun,\n            )\n            .t_ws()\n            // NOTE: allowing verbs that are also nouns leads to false positives:\n            // \"Are they colors or colours?\"\n            // \"8 years to give you rewards\"\n            // \"all I can do is give you examples\"\n            .then_verb_third_person_singular_present_form();\n\n        // NOTE: But excluding them causes many more false positives:\n        // boxes, does, drops, flies, gets, goes, likes, site, wakes\n        // .then_kind_where(|k| k.is_verb_third_person_singular_present_form() && !k.is_plural_noun());\n\n        let third_person_sing_pres_pron = |t: &Token, _: &[char]| {\n            t.kind.is_subject_pronoun()\n                && !t.kind.is_object_pronoun()\n                && t.kind.is_personal_pronoun()\n                && t.kind.is_third_person_singular_pronoun()\n                && !t.kind.is_plural_pronoun()\n        };\n\n        let verb_lemma = |t: &Token, src: &[char]| {\n            t.kind.is_verb_lemma()\n                && !t.kind.is_verb_third_person_singular_present_form()\n                && !t.kind.is_verb_simple_past_form() // eg. not \"put\"\n                && !t.kind.is_adverb() // eg. not \"even\"\n                && !t.kind.is_conjunction() // \"and\"\n                && (!t.kind.is_auxiliary_verb() // \"I go\"≠\"he goes\" but \"I can\"=\"he can\"\n                // We don't want modals because they don't inflect, but we want the other auxiliaries.\n                || t.span.get_content(src).eq_any_ignore_ascii_case_str(NON_MODAL_AUX))\n        };\n\n        Self {\n            expr: FirstMatchOf::new(vec![\n                // One Expr for the \"I walks\" type:\n                Box::new(non_3p_sing_pres_pron_with_3p_sing_pres_verb),\n                // Two Expr's for the \"he walk\" type:\n                Box::new(\n                    SequenceExpr::with(third_person_sing_pres_pron)\n                        .t_ws()\n                        .then(verb_lemma),\n                ),\n                Box::new(SequenceExpr::aco(\"it\").t_ws().t_aco(\"don't\")),\n            ]),\n            dict,\n        }\n    }\n\n    fn third_person_singular_present_to_lemma(&self, form: &[char]) -> Vec<Vec<char>> {\n        let mut words: Vec<Vec<char>> = Vec::new();\n\n        // -s\n        if form.ends_with_ignore_ascii_case_chars(&['s']) {\n            words.push(form[0..form.len() - 1].to_vec());\n\n            // -es\n            if form.ends_with_ignore_ascii_case_chars(&['e', 's']) {\n                words.push(form[0..form.len() - 2].to_vec());\n\n                // -ies -> -y\n                if form.ends_with_ignore_ascii_case_chars(&['i', 'e', 's']) {\n                    words.push(\n                        format!(\"{}y\", &form[0..form.len() - 3].iter().collect::<String>())\n                            .chars()\n                            .collect(),\n                    );\n                }\n            }\n        }\n\n        if let Some((lemma, _)) = IRREGULAR\n            .iter()\n            .find(|(_, f)| form.eq_ignore_ascii_case_str(f))\n        {\n            words.push(lemma.chars().collect::<Vec<char>>());\n        }\n\n        words\n            .iter()\n            .filter(|&w| {\n                self.dict\n                    .get_word_metadata(w)\n                    .is_some_and(|md| md.is_verb_lemma())\n            })\n            .map(|w| w.to_vec())\n            .collect()\n    }\n\n    fn lemma_to_third_person_singular_present(&self, input: &str) -> Vec<Vec<char>> {\n        let mut words: Vec<Vec<char>> = Vec::new();\n\n        words.push(format!(\"{input}s\").chars().collect());\n        words.push(format!(\"{input}es\").chars().collect());\n\n        if input.ends_with(\"y\") {\n            words.push(\n                format!(\"{}ies\", &input[0..input.len() - 1])\n                    .chars()\n                    .collect(),\n            );\n        }\n\n        if let Some((_, form)) = IRREGULAR\n            .iter()\n            .find(|(lemma, _)| input.eq_ignore_ascii_case(lemma))\n        {\n            words.push(form.chars().collect());\n        }\n\n        words\n            .iter()\n            .filter(|&w| {\n                self.dict\n                    .get_word_metadata(w)\n                    .is_some_and(|md| md.is_verb_third_person_singular_present_form())\n            })\n            .map(|w| w.to_vec())\n            .collect()\n    }\n}\n\nimpl<D> ExprLinter for PronounVerbAgreement<D>\nwhere\n    D: Dictionary,\n{\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        let pron_tok = &toks[0];\n        let is_3psg = pron_tok.kind.is_third_person_singular_pronoun();\n\n        let verb_tok = toks.last()?;\n\n        if let Some((before, _)) = ctx\n            && let [.., prev_word_tok, ws_tok] = before\n            && ws_tok.kind.is_whitespace()\n        {\n            let prev_word = prev_word_tok.span.get_content(src);\n            let is_exempt = if is_3psg {\n                prev_word_tok.kind.is_auxiliary_verb()\n                    || prev_word.eq_any_ignore_ascii_case_str(SUBJUNCTIVE)\n            } else if pron_tok.kind.is_subject_pronoun() {\n                // Clause structure: (... in you) is ... ≠ you is\n                // Look for \"true\" prepositions, not ones that are more like adverbial particles\n                prev_word_tok.kind.is_preposition() && !prev_word.eq_ignore_ascii_case_str(\"up\")\n                    // When the verb is ditransitive, the pronoun is object case, the verb position is actually a noun\n                    || (prev_word.eq_any_ignore_ascii_case_str(DITRANSITIVE) && verb_tok.kind.is_noun())\n            } else {\n                false\n            };\n\n            if is_exempt {\n                return None;\n            }\n        }\n\n        let verb_span = verb_tok.span;\n        let verb_chars = verb_tok.span.get_content(src);\n        let verb_str = verb_tok.span.get_content_string(src);\n\n        let suggs = if is_3psg {\n            self.lemma_to_third_person_singular_present(&verb_str)\n        } else {\n            self.third_person_singular_present_to_lemma(verb_chars)\n        };\n\n        let suggestions = suggs\n            .into_iter()\n            .map(|s| Suggestion::replace_with_match_case(s, verb_chars))\n            .collect();\n\n        Some(Lint {\n            span: verb_span,\n            lint_kind: LintKind::Agreement,\n            suggestions,\n            message: \"The form of the verb must agree in grammatical number with the pronoun.\"\n                .to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Ensures pronouns agree with their verbs.\"\n    }\n}\n\n#[cfg(test)]\nmod lints {\n    use super::PronounVerbAgreement;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n    use crate::spell::FstDictionary;\n\n    // Expected to be fixed, but there are exceptions\n\n    #[test]\n    fn issue_233_1() {\n        assert_suggestion_result(\n            \"I likes this place.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"I like this place.\",\n        );\n    }\n\n    #[test]\n    fn issue_233_2() {\n        assert_suggestion_result(\n            \"I sits under the AC.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"I sit under the AC.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"because 'like' is an adjective as well as a verb.\"]\n    fn issue_233_1_reverse() {\n        assert_suggestion_result(\n            \"He like this place.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"He likes this place.\",\n        );\n    }\n\n    #[test]\n    fn why_we_cant_flag_like_yet() {\n        assert_no_lints(\n            \"What is he like?\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn issue_233_2_reverse() {\n        assert_suggestion_result(\n            \"She sit under the AC.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"She sits under the AC.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_correct_agreement() {\n        assert_no_lints(\n            \"He likes this place. I sit under the AC.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    // Every pronoun systematically\n\n    // Expected to get corrected\n\n    #[test]\n    fn fixes_i() {\n        assert_suggestion_result(\n            \"I wakes up.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"I wake up.\",\n        );\n    }\n\n    #[test]\n    fn fixes_we() {\n        assert_suggestion_result(\n            \"We gets dressed.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"We get dressed.\",\n        );\n    }\n\n    #[test]\n    fn fixes_you() {\n        assert_suggestion_result(\n            \"You drops off the kids.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"You drop off the kids.\",\n        );\n    }\n\n    #[test]\n    fn fixes_he() {\n        assert_suggestion_result(\n            \"He work hard.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"He works hard.\",\n        );\n    }\n\n    #[test]\n    fn fixes_she() {\n        assert_suggestion_result(\n            \"She study hard.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"She studies hard.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Becasue 'it' is also object case. Eg. 'watch it break down'\"]\n    fn we_cant_fix_it_yet() {\n        assert_suggestion_result(\n            \"It break down.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"It breaks down.\",\n        );\n    }\n\n    #[test]\n    fn why_we_cant_fix_it_yet() {\n        assert_no_lints(\n            \"I heard it break down.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn fixes_they() {\n        assert_suggestion_result(\n            \"They repairs it.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"They repair it.\",\n        )\n    }\n\n    // Correct phrases that are expected not to get corrected\n\n    #[test]\n    fn dont_flag_i() {\n        assert_no_lints(\"I eat\", PronounVerbAgreement::new(FstDictionary::curated()));\n    }\n\n    #[test]\n    fn dont_flag_we() {\n        assert_no_lints(\n            \"We drink\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_you() {\n        assert_no_lints(\n            \"You walk\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_he() {\n        assert_no_lints(\n            \"He runs\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_she() {\n        assert_no_lints(\n            \"She swims\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_it() {\n        assert_no_lints(\n            \"It works!\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn dont_flag_they() {\n        assert_no_lints(\n            \"They finish\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    // Ceck changing verb endings\n\n    // -ies ↔ -y\n    #[test]\n    fn fix_flies() {\n        assert_suggestion_result(\n            \"I flies\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"I fly\",\n        );\n    }\n    #[test]\n    fn fix_cry() {\n        assert_suggestion_result(\n            \"He cry\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"He cries\",\n        );\n    }\n\n    // -o ↔ -oes\n    #[test]\n    fn fix_go() {\n        assert_suggestion_result(\n            \"She go\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"She goes\",\n        );\n    }\n    #[test]\n    fn fix_goes() {\n        assert_suggestion_result(\n            \"They goes\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"They go\",\n        );\n    }\n\n    // Check irregular changes\n\n    // has ↔ have\n    #[test]\n    fn fix_has() {\n        assert_suggestion_result(\n            \"You has\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"You have\",\n        );\n    }\n    #[test]\n    fn fix_have() {\n        assert_suggestion_result(\n            \"She have\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"She has\",\n        );\n    }\n\n    // hasn't ↔ haven't\n    #[test]\n    fn fix_hasnt() {\n        assert_suggestion_result(\n            \"You hasn't\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"You haven't\",\n        );\n    }\n    #[test]\n    fn fix_havent() {\n        assert_suggestion_result(\n            \"He haven't\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"He hasn't\",\n        );\n    }\n\n    // -es\n    #[test]\n    fn fix_box() {\n        assert_suggestion_result(\n            \"He box\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"He boxes\",\n        );\n    }\n    #[test]\n    fn fix_boxes() {\n        assert_suggestion_result(\n            \"You boxes\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"You box\",\n        );\n    }\n\n    // TODO: Are there any double consonant endings to change?\n    // TODO: Are there any f ↔ v endings to change?\n\n    // Negative contractions\n\n    // doesn't ↔ don't\n    #[test]\n    fn fix_doesnt() {\n        assert_suggestion_result(\n            \"We doesn't\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"We don't\",\n        );\n    }\n    #[test]\n    // Note: This requires a dedicated branch of the `[Expr]`\n    fn fix_dont() {\n        assert_suggestion_result(\n            \"It don't\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"It doesn't\",\n        );\n    }\n\n    // Does do ↔ does behave differently to box ↔ boxes due to being an auxiliary verb?\n    #[test]\n    fn fix_do() {\n        assert_suggestion_result(\n            \"He do\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"He does\",\n        );\n    }\n    #[test]\n    fn fix_does() {\n        assert_suggestion_result(\n            \"You does\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n            \"You do\",\n        );\n    }\n\n    // False positives found by Elijah\n\n    #[test]\n    fn false_positive_she_consider() {\n        assert_no_lints(\n            \"On April 10th, I suggested she consider a smaller, more intimate gathering.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn false_positive_she_sell() {\n        assert_no_lints(\n            \"I suggested she sell it and use the proceeds to help with her relocation expenses, or perhaps rent a similar camera while in Barcelona.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn false_positive_she_rent() {\n        assert_no_lints(\n            \"I suggested she sell it and use the proceeds to help with her relocation expenses, or perhaps rent a similar camera while in Barcelona.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn false_positive_he_donned() {\n        assert_no_lints(\n            \"He donned his heavy oilskins and descended the winding staircase, his boots echoing in the hollow tower.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn false_positive_he_cannot() {\n        assert_no_lints(\n            \"Surely, he cannot offer the same sum as the developers.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn false_positive_insisting_she_return() {\n        assert_no_lints(\n            \"Am I the asshole for insisting she return the dress?\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn false_positive_pride_in_you_is() {\n        assert_no_lints(\n            \"It’s also important to recognize that your family's pride in you is a genuine reflection of your value.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn false_positive_she_sought() {\n        assert_no_lints(\n            \"She sought out Mrs. Hawthorne, the village’s oldest resident, a woman known for her vast knowledge of local history and her unsettlingly accurate intuition.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn false_positive_lose_you_points() {\n        assert_no_lints(\n            \"I admire your dedication to consistently drafting players who are actively trying to lose you points.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn false_positive_she_hung_up() {\n        assert_no_lints(\n            \"When I reiterated the conditions I'd previously set, she hung up on me.\",\n            PronounVerbAgreement::new(FstDictionary::curated()),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/proper_noun_capitalization_linters.rs",
    "content": "use crate::expr::{Expr, ExprMap, FixedPhrase};\nuse hashbrown::HashMap;\nuse serde::{Deserialize, Serialize};\n\nuse super::{ExprLinter, LintGroup};\nuse super::{Lint, LintKind, Suggestion};\nuse crate::Document;\nuse crate::linting::expr_linter::Chunk;\nuse crate::parsers::PlainEnglish;\nuse crate::spell::Dictionary;\nuse crate::{Token, TokenStringExt};\nuse std::sync::Arc;\n\n/// A linter that corrects the capitalization of multi-word proper nouns.\n/// They are corrected to a \"canonical capitalization\" provided at construction.\n///\n/// If you would like to add a proper noun to Harper, see `proper_noun_rules.json`.\npub struct ProperNounCapitalizationLinter<D: Dictionary + 'static> {\n    pattern_map: ExprMap<Document>,\n    description: String,\n    dictionary: Arc<D>,\n}\n\nimpl<D: Dictionary + 'static> ProperNounCapitalizationLinter<D> {\n    /// Create a linter that corrects the capitalization of phrases provided.\n    pub fn new_strs(\n        canonical_versions: impl IntoIterator<Item = impl AsRef<str>>,\n        description: impl ToString,\n        dictionary: D,\n    ) -> Self {\n        let dictionary = Arc::new(dictionary);\n\n        let mut expr_map = ExprMap::default();\n\n        for can_vers in canonical_versions {\n            let doc = Document::new_basic_tokenize(can_vers.as_ref(), &PlainEnglish);\n\n            let expr = FixedPhrase::from_document(&doc);\n\n            expr_map.insert(expr, doc);\n        }\n\n        Self {\n            pattern_map: expr_map,\n            dictionary: dictionary.clone(),\n            description: description.to_string(),\n        }\n    }\n}\n\nimpl<D: Dictionary + 'static> ExprLinter for ProperNounCapitalizationLinter<D> {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.pattern_map\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let canonical_case = self.pattern_map.lookup(0, matched_tokens, source).unwrap();\n\n        let mut broken = false;\n\n        for (err_token, correct_token) in matched_tokens.iter().zip(canonical_case.fat_tokens()) {\n            let err_chars = err_token.span.get_content(source);\n            if err_chars != correct_token.content {\n                broken = true;\n                break;\n            }\n        }\n\n        if !broken {\n            return None;\n        }\n\n        Some(Lint {\n            span: matched_tokens.span()?,\n            lint_kind: LintKind::Capitalization,\n            suggestions: vec![Suggestion::ReplaceWith(\n                canonical_case.get_source().to_vec(),\n            )],\n            message: self.description.to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        self.description.as_str()\n    }\n}\n\n#[derive(Serialize, Deserialize)]\nstruct RuleEntry {\n    canonical: Vec<String>,\n    description: String,\n}\n\n/// For the time being, this panics on invalid JSON.\n/// Do not use with user provided JSON.\nfn lint_group_from_json(json: &str, dictionary: Arc<impl Dictionary + 'static>) -> LintGroup {\n    let mut group = LintGroup::empty();\n\n    let rules: HashMap<String, RuleEntry> = serde_json::from_str(json).unwrap();\n\n    for (key, rule) in rules.into_iter() {\n        group.add_chunk_expr_linter(\n            key,\n            Box::new(ProperNounCapitalizationLinter::new_strs(\n                rule.canonical,\n                rule.description,\n                dictionary.clone(),\n            )),\n        );\n    }\n\n    group.set_all_rules_to(Some(true));\n\n    group\n}\n\npub fn lint_group(dictionary: Arc<impl Dictionary + 'static>) -> LintGroup {\n    lint_group_from_json(include_str!(\"../../proper_noun_rules.json\"), dictionary)\n}\n\n#[cfg(test)]\nmod tests {\n    use super::lint_group;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n    use crate::spell::FstDictionary;\n\n    #[test]\n    fn americas_lowercase() {\n        assert_suggestion_result(\n            \"south america\",\n            lint_group(FstDictionary::curated()),\n            \"South America\",\n        );\n        assert_suggestion_result(\n            \"north america\",\n            lint_group(FstDictionary::curated()),\n            \"North America\",\n        );\n    }\n\n    #[test]\n    fn americas_uppercase() {\n        assert_suggestion_result(\n            \"SOUTH AMERICA\",\n            lint_group(FstDictionary::curated()),\n            \"South America\",\n        );\n        assert_suggestion_result(\n            \"NORTH AMERICA\",\n            lint_group(FstDictionary::curated()),\n            \"North America\",\n        );\n    }\n\n    #[test]\n    fn americas_allow_correct() {\n        assert_lint_count(\"South America\", lint_group(FstDictionary::curated()), 0);\n        assert_lint_count(\"North America\", lint_group(FstDictionary::curated()), 0);\n    }\n\n    #[test]\n    fn issue_798() {\n        assert_suggestion_result(\n            \"The United states is a big country.\",\n            lint_group(FstDictionary::curated()),\n            \"The United States is a big country.\",\n        );\n    }\n\n    #[test]\n    fn united_nations_uppercase() {\n        assert_suggestion_result(\n            \"UNITED NATIONS\",\n            lint_group(FstDictionary::curated()),\n            \"United Nations\",\n        );\n    }\n\n    #[test]\n    fn united_arab_emirates_lowercase() {\n        assert_suggestion_result(\n            \"UNITED ARAB EMIRATES\",\n            lint_group(FstDictionary::curated()),\n            \"United Arab Emirates\",\n        );\n    }\n\n    #[test]\n    fn united_nations_allow_correct() {\n        assert_lint_count(\"United Nations\", lint_group(FstDictionary::curated()), 0);\n    }\n\n    #[test]\n    fn meta_allow_correct() {\n        assert_lint_count(\"Meta Quest\", lint_group(FstDictionary::curated()), 0);\n    }\n\n    #[test]\n    fn microsoft_lowercase() {\n        assert_suggestion_result(\n            \"microsoft visual studio\",\n            lint_group(FstDictionary::curated()),\n            \"Microsoft Visual Studio\",\n        );\n    }\n\n    #[test]\n    fn microsoft_first_word_is_correct() {\n        assert_suggestion_result(\n            \"Microsoft visual studio\",\n            lint_group(FstDictionary::curated()),\n            \"Microsoft Visual Studio\",\n        );\n    }\n\n    #[test]\n    fn test_atlantic_ocean_lowercase() {\n        let dictionary = FstDictionary::curated();\n        assert_suggestion_result(\"atlantic ocean\", lint_group(dictionary), \"Atlantic Ocean\");\n    }\n\n    #[test]\n    fn test_pacific_ocean_lowercase() {\n        let dictionary = FstDictionary::curated();\n        assert_suggestion_result(\"pacific ocean\", lint_group(dictionary), \"Pacific Ocean\");\n    }\n\n    #[test]\n    fn test_indian_ocean_lowercase() {\n        let dictionary = FstDictionary::curated();\n        assert_suggestion_result(\"indian ocean\", lint_group(dictionary), \"Indian Ocean\");\n    }\n\n    #[test]\n    fn test_southern_ocean_lowercase() {\n        let dictionary = FstDictionary::curated();\n        assert_suggestion_result(\"southern ocean\", lint_group(dictionary), \"Southern Ocean\");\n    }\n\n    #[test]\n    fn test_arctic_ocean_lowercase() {\n        let dictionary = FstDictionary::curated();\n        assert_suggestion_result(\"arctic ocean\", lint_group(dictionary), \"Arctic Ocean\");\n    }\n\n    #[test]\n    fn test_mediterranean_sea_lowercase() {\n        let dictionary = FstDictionary::curated();\n        assert_suggestion_result(\n            \"mediterranean sea\",\n            lint_group(dictionary),\n            \"Mediterranean Sea\",\n        );\n    }\n\n    #[test]\n    fn test_caribbean_sea_lowercase() {\n        let dictionary = FstDictionary::curated();\n        assert_suggestion_result(\"caribbean sea\", lint_group(dictionary), \"Caribbean Sea\");\n    }\n\n    #[test]\n    fn test_south_china_sea_lowercase() {\n        let dictionary = FstDictionary::curated();\n        assert_suggestion_result(\"south china sea\", lint_group(dictionary), \"South China Sea\");\n    }\n\n    #[test]\n    fn test_atlantic_ocean_correct() {\n        let dictionary = FstDictionary::curated();\n        assert_lint_count(\"Atlantic Ocean\", lint_group(dictionary), 0);\n    }\n\n    #[test]\n    fn test_pacific_ocean_correct() {\n        let dictionary = FstDictionary::curated();\n        assert_lint_count(\"Pacific Ocean\", lint_group(dictionary), 0);\n    }\n\n    #[test]\n    fn test_indian_ocean_correct() {\n        let dictionary = FstDictionary::curated();\n        assert_lint_count(\"Indian Ocean\", lint_group(dictionary), 0);\n    }\n\n    #[test]\n    fn test_mediterranean_sea_correct() {\n        let dictionary = FstDictionary::curated();\n        assert_lint_count(\"Mediterranean Sea\", lint_group(dictionary), 0);\n    }\n\n    #[test]\n    fn test_south_china_sea_correct() {\n        let dictionary = FstDictionary::curated();\n        assert_lint_count(\"South China Sea\", lint_group(dictionary), 0);\n    }\n\n    #[test]\n    fn day_one_in_sentence() {\n        assert_suggestion_result(\n            \"I love day one. It is the best journaling app.\",\n            lint_group(FstDictionary::curated()),\n            \"I love Day One. It is the best journaling app.\",\n        );\n    }\n\n    #[test]\n    fn gilded_age_in_sentence() {\n        assert_suggestion_result(\n            \"Mani-Chess Destiny is a JavaScript based computer game built off of chess, but in the style of the gilded age.\",\n            lint_group(FstDictionary::curated()),\n            \"Mani-Chess Destiny is a JavaScript based computer game built off of chess, but in the style of the Gilded Age.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/quantifier_needs_of.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\n/// Flags phrases like `a couple months` → should be `a couple **of** months`.\npub struct QuantifierNeedsOf {\n    expr: SequenceExpr,\n}\n\nimpl Default for QuantifierNeedsOf {\n    fn default() -> Self {\n        let expr = SequenceExpr::default()\n            .then_indefinite_article()\n            .t_ws()\n            .then_word_set(&[\"couple\", \"lot\"])\n            .t_ws()\n            .then_plural_nominal();\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for QuantifierNeedsOf {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> Option<Lint> {\n        Some(Lint {\n            span: matched_tokens.get(2)?.span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::InsertAfter(\" of\".chars().collect())],\n            message: \"Add `of` in this quantity phrase.\".to_owned(),\n            priority: 32,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects missing `of` after the quantifier “a couple” when it precedes a plural noun\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::QuantifierNeedsOf;\n\n    #[test]\n    fn fixes_a_couple_months() {\n        assert_suggestion_result(\n            \"A couple months ago...\",\n            QuantifierNeedsOf::default(),\n            \"A couple of months ago...\",\n        );\n    }\n\n    #[test]\n    fn fixes_a_couple_weeks() {\n        assert_suggestion_result(\n            \"A couple weeks ago...\",\n            QuantifierNeedsOf::default(),\n            \"A couple of weeks ago...\",\n        );\n    }\n\n    #[test]\n    fn fixes_a_couple_days() {\n        assert_suggestion_result(\n            \"A couple days ago...\",\n            QuantifierNeedsOf::default(),\n            \"A couple of days ago...\",\n        );\n    }\n\n    #[test]\n    fn fixes_a_couple_seconds() {\n        assert_suggestion_result(\n            \"A couple seconds ago...\",\n            QuantifierNeedsOf::default(),\n            \"A couple of seconds ago...\",\n        );\n    }\n\n    #[test]\n    fn fixes_a_couple_minutes() {\n        assert_suggestion_result(\n            \"A couple minutes ago...\",\n            QuantifierNeedsOf::default(),\n            \"A couple of minutes ago...\",\n        );\n    }\n\n    #[test]\n    fn fixes_a_couple_houses() {\n        assert_suggestion_result(\n            \"A couple houses ago...\",\n            QuantifierNeedsOf::default(),\n            \"A couple of houses ago...\",\n        );\n    }\n\n    #[test]\n    fn fixes_a_couple_centuries() {\n        assert_suggestion_result(\n            \"A couple centuries ago...\",\n            QuantifierNeedsOf::default(),\n            \"A couple of centuries ago...\",\n        );\n    }\n\n    #[test]\n    fn fixes_a_couple_people() {\n        assert_suggestion_result(\n            \"I saw a couple people walk by a few minutes ago.\",\n            QuantifierNeedsOf::default(),\n            \"I saw a couple of people walk by a few minutes ago.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/quantifier_numeral_conflict.rs",
    "content": "use crate::expr::{All, Expr, SequenceExpr, SpelledNumberExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, LintKind, Suggestion};\nuse crate::patterns::{NominalPhrase, WordSet};\nuse crate::token_string_ext::TokenStringExt;\nuse crate::{CharStringExt, Lint, Token};\n\npub struct QuantifierNumeralConflict {\n    expr: All,\n}\n\nimpl Default for QuantifierNumeralConflict {\n    fn default() -> Self {\n        Self {\n            expr: All::new(vec![\n                Box::new(\n                    SequenceExpr::default()\n                        .then_quantifier()\n                        .t_ws()\n                        .then_longest_of(vec![\n                            Box::new(SpelledNumberExpr),\n                            Box::new(SequenceExpr::default().then_cardinal_number()),\n                        ]),\n                ),\n                Box::new(SequenceExpr::unless(SequenceExpr::any_of(vec![\n                    Box::new(WordSet::new(&[\"all\", \"any\", \"every\", \"no\"])),\n                    Box::new(\n                        SequenceExpr::word_set(&[\"each\", \"some\"])\n                            .t_ws()\n                            .t_aco(\"one\"),\n                    ),\n                ]))),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for QuantifierNumeralConflict {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        // If there's a hyphen straight after the number it's probably part of a compound\n        if let Some((_, [next_tok, ..])) = ctx\n            && next_tok.kind.is_hyphen()\n        {\n            return None;\n        }\n\n        let qtok = toks.first().unwrap();\n        let quant = qtok.span.get_content_string(src);\n\n        // Handle special cases for \"least\", \"most\", \"each\", and \"both\"\n        match quant.to_ascii_lowercase().as_str() {\n            \"least\" | \"most\" => {\n                if let Some((previous, _)) = ctx\n                    && let [.., prev_word, prev_space] = previous\n                    && prev_space.kind.is_whitespace()\n                    && prev_word.kind.is_word()\n                    && prev_word\n                        .span\n                        .get_content(src)\n                        .eq_ignore_ascii_case_chars(&['a', 't'])\n                {\n                    return None;\n                }\n            }\n\n            \"each\" => {\n                return Some(Lint {\n                    span: qtok.span,\n                    lint_kind: LintKind::Usage,\n                    suggestions: vec![Suggestion::replace_with_match_case(\n                        \"every\".chars().collect(),\n                        qtok.span.get_content(src),\n                    )],\n                    message: \"Use 'every' instead of 'each' before a number.\".to_owned(),\n                    ..Default::default()\n                });\n            }\n\n            \"both\" => {\n                if let Some((_, following)) = ctx\n                    && let Some(noun_phrase_span) = NominalPhrase.run(1, following, src)\n                    && let [ws, conj, ..] = following.get(noun_phrase_span.end..).unwrap_or(&[])\n                    && ws.kind.is_whitespace()\n                    && conj.kind.is_conjunction()\n                    && conj\n                        .span\n                        .get_content_string(src)\n                        .eq_ignore_ascii_case(\"and\")\n                {\n                    return None;\n                }\n            }\n\n            _ => {} // Continue with the default case\n        }\n\n        Some(Lint {\n            span: toks.span()?,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![],\n            message: format!(\"The word '{quant}' should not be used before a number.\"),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects quantifier-numeral conflicts\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    use super::QuantifierNumeralConflict;\n\n    #[test]\n    fn flag_several_two() {\n        assert_lint_count(\n            \"A few minutes ago, there was an outage due to several two hosts being down at the same time.\",\n            QuantifierNumeralConflict::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn dont_flag_at_least() {\n        assert_no_lints(\n            \"Serving a company that encourages the \\\"996\\\" work schedule usually means working for at least 60 hours per week.\",\n            QuantifierNumeralConflict::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_at_most() {\n        assert_no_lints(\n            \"But don't worry, the second machine takes at most 3 years.\",\n            QuantifierNumeralConflict::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_both_32_bit_and_64_bit() {\n        assert_no_lints(\n            \"Both 32 bit and 64 bit architectures are supported.\",\n            QuantifierNumeralConflict::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_more_1_click() {\n        assert_no_lints(\n            \"For more 1-click cloud deployments, see [Cloud Deployment\",\n            QuantifierNumeralConflict::default(),\n        );\n    }\n\n    #[test]\n    fn correct_each_2() {\n        assert_suggestion_result(\n            \"OSSEC by default run rootkit check each 2 hours.\",\n            QuantifierNumeralConflict::default(),\n            \"OSSEC by default run rootkit check every 2 hours.\",\n        );\n    }\n\n    #[test]\n    fn ignore_no_two_adjacent_characters_2486() {\n        assert_no_lints(\n            \"No two adjacent characters are the same.\",\n            QuantifierNumeralConflict::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/quite_quiet.rs",
    "content": "use crate::expr::{Expr, FirstMatchOf, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::{CharStringExt, Token, TokenKind, TokenStringExt};\n\npub struct QuiteQuiet {\n    expr: FirstMatchOf,\n}\n\nimpl Default for QuiteQuiet {\n    fn default() -> Self {\n        let quiet_word = SequenceExpr::default()\n            .t_aco(\"quiet\")\n            .t_ws()\n            .then_kind_any_but_not_except(\n                &[\n                    TokenKind::is_adjective,\n                    TokenKind::is_adverb,\n                    TokenKind::is_verb,\n                ] as &[_],\n                TokenKind::is_noun,\n                &[\"here\", \"up\"],\n            );\n\n        let negative_contraction_quiet = SequenceExpr::with(|tok: &Token, src: &[char]| {\n            if !tok.kind.is_verb() || !tok.kind.is_apostrophized() {\n                return false;\n            }\n            tok.span\n                .get_content(src)\n                .ends_with_any_ignore_ascii_case_chars(&[&['n', '\\'', 't'], &['n', '’', 't']])\n        })\n        .t_ws()\n        .t_aco(\"quiet\");\n\n        let adverb_quite = SequenceExpr::default()\n            .then_kind_except(\n                TokenKind::is_adverb,\n                &[\"actually\", \"never\", \"not\", \"really\", \"generally\"],\n            )\n            .t_ws()\n            .t_aco(\"quite\");\n\n        Self {\n            expr: FirstMatchOf::new(vec![\n                Box::new(quiet_word),\n                Box::new(negative_contraction_quiet),\n                Box::new(adverb_quite),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for QuiteQuiet {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let text = toks.span()?.get_content_string(src).to_lowercase();\n\n        if text.ends_with(\"quite\") {\n            let quite_span = toks.last()?.span;\n\n            return Some(Lint {\n                span: quite_span,\n                lint_kind: LintKind::Typo,\n                suggestions: vec![Suggestion::replace_with_match_case(\n                    \"quiet\".chars().collect(),\n                    quite_span.get_content(src),\n                )],\n                message: \"‘Quite’ might be a typo here. It means ‘rather’ but you might be trying to say ‘quiet’ (not noisy).\".to_string(),\n                priority: 63,\n            });\n        } else if text.starts_with(\"quiet\") {\n            let quiet_span = toks.first()?.span;\n\n            return Some(Lint {\n                span: quiet_span,\n                lint_kind: LintKind::Typo,\n                suggestions: vec![Suggestion::replace_with_match_case(\n                    \"quite\".chars().collect(),\n                    quiet_span.get_content(src),\n                )],\n                message: \"‘Quiet’ might be a typo here. It means ‘not noisy’ but you might be trying to say ‘quite’ (rather).\".to_string(),\n                priority: 63,\n            });\n        } else if text.ends_with(\"quiet\") {\n            let quiet_span = toks.last()?.span;\n\n            return Some(Lint {\n                span: quiet_span,\n                lint_kind: LintKind::Typo,\n                suggestions: vec![Suggestion::replace_with_match_case(\n                    \"quite\".chars().collect(),\n                    quiet_span.get_content(src),\n                )],\n                message: \"‘Quiet’ might be a typo here. It means ‘not noisy’ but you might be trying to say ‘quite’ (rather).\".to_string(),\n                priority: 63,\n            });\n        }\n\n        None\n    }\n\n    fn description(&self) -> &str {\n        \"Helps distinguish between ‘quiet’ (making ‘little noise’) and ‘quite’ (meaning ‘rather’).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::QuiteQuiet;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fix_quiet_adverb() {\n        assert_suggestion_result(\n            \"Rendering videos 145 frames, with lightx loras for 2.1 i experience reboots quiet often.\",\n            QuiteQuiet::default(),\n            \"Rendering videos 145 frames, with lightx loras for 2.1 i experience reboots quite often.\",\n        );\n    }\n\n    #[test]\n    fn fix_quiet_adjective() {\n        assert_suggestion_result(\n            \"... has been already reported multiple times and I find it quiet dumb that it still exists\",\n            QuiteQuiet::default(),\n            \"... has been already reported multiple times and I find it quite dumb that it still exists\",\n        );\n    }\n\n    #[test]\n    fn fix_very_quite() {\n        assert_suggestion_result(\n            \"It's very quite here at night.\",\n            QuiteQuiet::default(),\n            \"It's very quiet here at night.\",\n        );\n    }\n\n    #[test]\n    fn fix_doesnt_quiet() {\n        assert_suggestion_result(\"doesn't quiet\", QuiteQuiet::default(), \"doesn't quite\");\n    }\n\n    #[test]\n    fn fix_doesnt_quiet_typographical_apostrophe() {\n        assert_suggestion_result(\"doesn’t quiet\", QuiteQuiet::default(), \"doesn’t quite\");\n    }\n\n    #[test]\n    fn fix_doesnt_quiet_in_context() {\n        assert_suggestion_result(\n            \"When we got the car back into the workshop, we actually managed to get it running and driving, but it doesn't quiet run right, and doesn't really let me rev it.\",\n            QuiteQuiet::default(),\n            \"When we got the car back into the workshop, we actually managed to get it running and driving, but it doesn't quite run right, and doesn't really let me rev it.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_quiet_light() {\n        assert_lint_count(\"The quiet lights in the houses\", QuiteQuiet::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_quiet_till() {\n        assert_lint_count(\n            \"You’d better try and sit quiet till morning.\",\n            QuiteQuiet::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_cant_quiet() {\n        assert_suggestion_result(\n            \"I can't quiet read it\",\n            QuiteQuiet::default(),\n            \"I can't quite read it\",\n        );\n    }\n\n    #[test]\n    fn fix_wont_quiet() {\n        assert_suggestion_result(\n            \"It won't quiet fit\",\n            QuiteQuiet::default(),\n            \"It won't quite fit\",\n        );\n    }\n\n    #[test]\n    fn fix_couldnt_quiet() {\n        assert_suggestion_result(\n            \"I couldn't quiet understand everything\",\n            QuiteQuiet::default(),\n            \"I couldn't quite understand everything\",\n        );\n    }\n\n    #[test]\n    fn fix_but_its_not_quite_clear_1956() {\n        assert_no_lints(\"But it's not quite clear\", QuiteQuiet::default());\n    }\n\n    #[test]\n    fn dont_flag_adv_quite_1971() {\n        assert_no_lints(\n            \"It’s actually quite smart. It’s really quite smart. The proof is actually quite neat. Actually really quite simple. It’s actually quite strong. The Sneetches got really quite smart on that day.\",\n            QuiteQuiet::default(),\n        );\n    }\n\n    #[test]\n    fn issue_2003() {\n        assert_no_lints(\n            \"The namespaces are generally quite short\",\n            QuiteQuiet::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/quote_spacing.rs",
    "content": "use crate::expr::{ExprExt, SequenceExpr};\nuse crate::linting::LintKind;\nuse crate::{Document, TokenStringExt};\n\nuse super::{Lint, Linter};\n\npub struct QuoteSpacing {\n    expr: SequenceExpr,\n}\n\nimpl QuoteSpacing {\n    pub fn new() -> Self {\n        Self {\n            expr: SequenceExpr::any_word().then_quote().then_any_word(),\n        }\n    }\n}\n\nimpl Default for QuoteSpacing {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl Linter for QuoteSpacing {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for m in self.expr.iter_matches_in_doc(document) {\n            let matched_tokens = m.get_content(document.get_tokens());\n\n            let Some(span) = matched_tokens.span() else {\n                continue;\n            };\n\n            lints.push(Lint {\n                span,\n                lint_kind: LintKind::Formatting,\n                suggestions: vec![],\n                message: \"A quote must be preceded or succeeded by a space.\".to_owned(),\n                priority: 31,\n            })\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"Checks that quotation marks are preceded or succeeded by whitespace.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::QuoteSpacing;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints};\n\n    #[test]\n    fn flags_missing_space_before_quote() {\n        assert_lint_count(\"He said\\\"hello\\\" to me.\", QuoteSpacing::default(), 1);\n    }\n\n    #[test]\n    fn flags_missing_space_after_quote() {\n        assert_lint_count(\n            \"She whispered \\\"hurry\\\"and left.\",\n            QuoteSpacing::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn allows_quotes_with_spacing() {\n        assert_no_lints(\"They shouted \\\"charge\\\" together.\", QuoteSpacing::default());\n    }\n\n    #[test]\n    fn allows_quotes_at_end_of_sentence() {\n        assert_no_lints(\"They shouted \\\"charge.\\\"\", QuoteSpacing::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/reason_for_doing.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{\n        ExprLinter, LintKind, Suggestion,\n        expr_linter::{Chunk, preceded_by_word},\n    },\n};\n\npub struct ReasonForDoing {\n    expr: SequenceExpr,\n}\n\nimpl Default for ReasonForDoing {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"reason\", \"reasons\"])\n                .t_ws()\n                .t_aco(\"of\")\n                .t_ws()\n                .then_verb_progressive_form(),\n        }\n    }\n}\n\nimpl ExprLinter for ReasonForDoing {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `reason of doing` to `reason for doing` etc.\"\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        if toks.len() != 5 {\n            return None;\n        }\n        const REASON: usize = 0;\n        const OF: usize = 2;\n        // let reasontok = &toks[REASON];\n        // let reasonspan = reasontok.span;\n        let reasonchars = toks[REASON].span.get_content(src);\n        // let oftok = &toks[OF];\n        let ofspan = toks[OF].span;\n        // let ofchars = ofspan.get_content(src);\n\n        // \"for reasons of doing\" is a legit construction. TODO: Usually, but not always!\n        if reasonchars.last()? == &'s'\n            && preceded_by_word(ctx, |t| {\n                t.span\n                    .get_content(src)\n                    .eq_ignore_ascii_case_chars(&['f', 'o', 'r'])\n            })\n        {\n            return None;\n        }\n\n        Some(Lint {\n            span: ofspan,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"for\",\n                ofspan.get_content(src),\n            )],\n            message: \"Use 'for' instead of 'of' with 'reason' and progressive verbs.\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::ReasonForDoing;\n\n    #[test]\n    fn fix_sg_of_doing() {\n        assert_suggestion_result(\n            \"However i could not find any valid reason of doing this in one project, it's still possible.\",\n            ReasonForDoing::default(),\n            \"However i could not find any valid reason for doing this in one project, it's still possible.\",\n        );\n    }\n\n    #[test]\n    fn fix_pl_of_doing() {\n        assert_suggestion_result(\n            \"It actually helped me a lot understanding what is your recommended way of implementing safe-listing and your reasons of doing it this way.\",\n            ReasonForDoing::default(),\n            \"It actually helped me a lot understanding what is your recommended way of implementing safe-listing and your reasons for doing it this way.\",\n        );\n    }\n\n    #[test]\n    fn fix_sg_of_having() {\n        assert_suggestion_result(\n            \"what's the reason of having USE_INTERPOLATION_TABLES in UserParams then?\",\n            ReasonForDoing::default(),\n            \"what's the reason for having USE_INTERPOLATION_TABLES in UserParams then?\",\n        );\n    }\n\n    #[test]\n    fn fix_pl_of_having() {\n        assert_suggestion_result(\n            \"Any reasons of having other implementation than specified in docs?\",\n            ReasonForDoing::default(),\n            \"Any reasons for having other implementation than specified in docs?\",\n        );\n    }\n\n    #[test]\n    fn ignore_for_reasons_of_logging() {\n        assert_no_lints(\n            \"whether for reasons of logging, monitoring, etc.\",\n            ReasonForDoing::default(),\n        );\n    }\n\n    #[test]\n    fn fix_sg_of_making() {\n        assert_suggestion_result(\n            \"The fact is that I am seeing where is it being used and I cannot understand the reason of making it boolean.\",\n            ReasonForDoing::default(),\n            \"The fact is that I am seeing where is it being used and I cannot understand the reason for making it boolean.\",\n        );\n    }\n\n    #[test]\n    fn fix_pl_of_making() {\n        assert_suggestion_result(\n            \"So for the reasons of making it self describable as much as possible, I think it is important to express version there.\",\n            ReasonForDoing::default(),\n            \"So for the reasons for making it self describable as much as possible, I think it is important to express version there.\",\n        );\n    }\n\n    #[test]\n    fn allow_for_reasons_of_making() {\n        assert_no_lints(\n            \"That said, and just for reasons of making the simple-openai code more robust, one could verify that it is not null and throw the appropriate exceptions\",\n            ReasonForDoing::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"Known false negative where we should't allow 'reasons of doing' just because it follows 'for'\"]\n    fn fix_for_reasons_of_doing_this() {\n        assert_suggestion_result(\n            \"For reasons of doing this, it is because I have some ops that need to carefully sort their execution orders in not only forward pass\",\n            ReasonForDoing::default(),\n            \"For reasons for doing this, it is because I have some ops that need to carefully sort their execution orders in not only forward pass\",\n        );\n    }\n\n    #[test]\n    fn fix_sg_of_needing() {\n        assert_suggestion_result(\n            \"I just came to the same conclusion for the same reason of needing a scoped dependency in my DbContext to support global query filtering.\",\n            ReasonForDoing::default(),\n            \"I just came to the same conclusion for the same reason for needing a scoped dependency in my DbContext to support global query filtering.\",\n        );\n    }\n\n    #[test]\n    fn fix_sg_of_opening() {\n        assert_suggestion_result(\n            \"Hi, What is reason of opening DB exception \\\"UnknownError: Internal error opening backing store for indexedDB\\\"?\",\n            ReasonForDoing::default(),\n            \"Hi, What is reason for opening DB exception \\\"UnknownError: Internal error opening backing store for indexedDB\\\"?\",\n        );\n    }\n\n    #[test]\n    fn fix_sg_of_saving() {\n        assert_suggestion_result(\n            \"be notified about document save events with source/reason of saving\",\n            ReasonForDoing::default(),\n            \"be notified about document save events with source/reason for saving\",\n        );\n    }\n\n    #[test]\n    fn fix_sg_of_wanting() {\n        assert_suggestion_result(\n            \"How do you use Severity and what is the impact/reason of wanting to having different values to you (i.e. what difference does it make to you)?\",\n            ReasonForDoing::default(),\n            \"How do you use Severity and what is the impact/reason for wanting to having different values to you (i.e. what difference does it make to you)?\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"We don't yet handle words between 'for' and 'reasons of'\"]\n    fn allow_for_reasons_of_wanting() {\n        assert_no_lints(\n            \"Ideally we don't want to reduce the idleTimeout (currently set to 120s) for the standard reasons of wanting to be able to handle bursty traffic.\",\n            ReasonForDoing::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/redundant_acronyms.rs",
    "content": "use crate::{\n    CharStringExt, Token,\n    expr::{Expr, FirstMatchOf, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::Word,\n    token_string_ext::TokenStringExt,\n};\n\n// (acronym, first_words, last_word)\nconst ACRONYMS: &[(&str, &[&str], &str)] = &[\n    (\"ATM\", &[\"automated teller\", \"automatic teller\"], \"machine\"),\n    (\"GUI\", &[\"graphical user\"], \"interface\"),\n    (\"LCD\", &[\"liquid crystal\"], \"display\"),\n    // Note: \"pin number\" (not capitalized) is used to refer to GPIO pins etc.\n    (\"PIN\", &[\"personal identification\"], \"number\"),\n    (\"TUI\", &[\"text-based user\", \"terminal user\"], \"interface\"),\n    (\"UI\", &[\"user\"], \"interface\"),\n    (\"VIN\", &[\"vehicle identification\"], \"number\"),\n];\n\npub struct RedundantAcronyms {\n    expr: FirstMatchOf,\n}\n\nimpl Default for RedundantAcronyms {\n    fn default() -> Self {\n        let exprs: Vec<Box<dyn Expr>> = ACRONYMS\n            .iter()\n            .map(|&(acronym, _, last_str)| {\n                let last_string = last_str.to_string();\n                Box::new(SequenceExpr::aco(acronym).t_ws().then_any_of(vec![\n                    Box::new(Word::new(last_str)),\n                    Box::new(move |t: &Token, src: &[char]| {\n                        t.span\n                            .get_content(src)\n                            .eq_ignore_ascii_case_str(&format!(\"{last_string}s\"))\n                    }),\n                ])) as Box<dyn Expr>\n            })\n            .collect();\n\n        Self {\n            expr: FirstMatchOf::new(exprs),\n        }\n    }\n}\n\nimpl ExprLinter for RedundantAcronyms {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let last_word_span = toks.last()?.span;\n        let last_word_chars = last_word_span.get_content(src);\n        let acronym_str = toks.first()?.span.get_content_string(src);\n\n        // \"pin number\" (lowercase) is used to refer to the pins on microchips, etc.\n        if acronym_str.eq_ignore_ascii_case(\"PIN\") && acronym_str != \"PIN\" {\n            return None;\n        }\n\n        let (_, middle_words, _) = ACRONYMS\n            .iter()\n            .find(|(a, _, _)| (*a).eq_ignore_ascii_case(&acronym_str))?;\n\n        let is_all_caps = last_word_chars\n            .iter()\n            .all(|c| c.is_ascii_alphabetic() && c.is_ascii_uppercase());\n\n        let plural_ending = last_word_chars\n            .last()\n            .filter(|&&c| c.eq_ignore_ascii_case(&'s'))\n            .map(|c| c.to_string())\n            .unwrap_or_default();\n\n        let suggestions: Vec<Suggestion> = std::iter::once(Suggestion::ReplaceWith(\n            format!(\"{acronym_str}{plural_ending}\").chars().collect(),\n        ))\n        .chain(middle_words.iter().map(|mw| {\n            let middle_words = if is_all_caps {\n                mw.to_ascii_uppercase()\n            } else {\n                mw.to_string()\n            };\n            Suggestion::ReplaceWith(\n                format!(\"{middle_words} {}\", last_word_span.get_content_string(src))\n                    .chars()\n                    .collect(),\n            )\n        }))\n        .collect();\n\n        Some(Lint {\n        span: toks.span()?,\n        lint_kind: LintKind::Redundancy,\n        suggestions,\n        message: \"The acronym's last letter already stands for the last word. Use just the acronym or the full phrase.\".to_string(),\n        ..Default::default()\n    })\n    }\n\n    fn description(&self) -> &str {\n        \"Identifies redundant acronyms where the last word repeats the last letter's meaning (e.g., `ATM machine` → `ATM` or `automated teller machine`).\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::RedundantAcronyms;\n    use crate::linting::tests::{assert_good_and_bad_suggestions, assert_no_lints};\n\n    #[test]\n    fn test_made_up() {\n        assert_good_and_bad_suggestions(\n            \"I forgot my PIN number!\",\n            RedundantAcronyms::default(),\n            &[\n                \"I forgot my PIN!\",\n                \"I forgot my personal identification number!\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn test_all_caps_singular() {\n        assert_good_and_bad_suggestions(\n            \"CAN TWO CARS HAVE THE SAME VIN NUMBER?\",\n            RedundantAcronyms::default(),\n            &[\n                \"CAN TWO CARS HAVE THE SAME VIN?\",\n                \"CAN TWO CARS HAVE THE SAME VEHICLE IDENTIFICATION NUMBER?\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn test_all_caps_plural() {\n        assert_good_and_bad_suggestions(\n            \"THESE ATM MACHINES ALL HAVE HIGH FEES!\",\n            RedundantAcronyms::default(),\n            &[\n                \"THESE ATMS ALL HAVE HIGH FEES!\",\n                \"THESE AUTOMATED TELLER MACHINES ALL HAVE HIGH FEES!\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn test_all_lowercase_singular() {\n        assert_good_and_bad_suggestions(\n            \"the atm machine at my card\",\n            RedundantAcronyms::default(),\n            &[\n                \"the atm at my card\",\n                \"the automated teller machine at my card\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn test_all_lowercase_plural() {\n        assert_good_and_bad_suggestions(\n            \"gui interfaces were sooo trendy in 1984!\",\n            RedundantAcronyms::default(),\n            &[\n                \"guis were sooo trendy in 1984!\",\n                \"graphical user interfaces were sooo trendy in 1984!\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_atm_machine() {\n        assert_good_and_bad_suggestions(\n            \"Developed an ATM machine application for Raspberry Pi\",\n            RedundantAcronyms::default(),\n            &[\n                \"Developed an ATM application for Raspberry Pi\",\n                \"Developed an automatic teller machine application for Raspberry Pi\",\n                \"Developed an automated teller machine application for Raspberry Pi\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_atm_machines() {\n        assert_good_and_bad_suggestions(\n            \"ATM machines allow 4 or 6 digit PIN codes\",\n            RedundantAcronyms::default(),\n            &[\n                \"ATMs allow 4 or 6 digit PIN codes\",\n                \"automated teller machines allow 4 or 6 digit PIN codes\",\n                \"automatic teller machines allow 4 or 6 digit PIN codes\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_gui_interface() {\n        assert_good_and_bad_suggestions(\n            \"This project develops using java language with GUI interface.\",\n            RedundantAcronyms::default(),\n            &[\n                \"This project develops using java language with GUI.\",\n                \"This project develops using java language with graphical user interface.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_gui_interfaces() {\n        assert_good_and_bad_suggestions(\n            \"In non-crafting GUI interfaces, such as a mod's own recipe tree, the shortcut key cannot be used to view item usage or crafting methods.\",\n            RedundantAcronyms::default(),\n            &[\n                \"In non-crafting GUIs, such as a mod's own recipe tree, the shortcut key cannot be used to view item usage or crafting methods.\",\n                \"In non-crafting graphical user interfaces, such as a mod's own recipe tree, the shortcut key cannot be used to view item usage or crafting methods.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_lcd_display() {\n        assert_good_and_bad_suggestions(\n            \"This function accepts I2C shield address for LCD display, number of columns, rows and dot size\",\n            RedundantAcronyms::default(),\n            &[\n                \"This function accepts I2C shield address for LCD, number of columns, rows and dot size\",\n                \"This function accepts I2C shield address for liquid crystal display, number of columns, rows and dot size\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_lcd_displays() {\n        assert_good_and_bad_suggestions(\n            \"ScreenUi makes it easy to build simple or complex character based user interfaces on small LCD displays like those commonly used with Arduinos.\",\n            RedundantAcronyms::default(),\n            &[\n                \"ScreenUi makes it easy to build simple or complex character based user interfaces on small LCDs like those commonly used with Arduinos.\",\n                \"ScreenUi makes it easy to build simple or complex character based user interfaces on small liquid crystal displays like those commonly used with Arduinos.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_pin_numbers_caps() {\n        assert_good_and_bad_suggestions(\n            \"Randomly generating PIN numbers for ATM access.\",\n            RedundantAcronyms::default(),\n            &[\n                \"Randomly generating PINs for ATM access.\",\n                \"Randomly generating personal identification numbers for ATM access.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_pin_number_all_caps() {\n        assert_good_and_bad_suggestions(\n            \"DON'T LET ANYONE SEE YOUR PIN NUMBER\",\n            RedundantAcronyms::default(),\n            &[\n                \"DON'T LET ANYONE SEE YOUR PIN\",\n                \"DON'T LET ANYONE SEE YOUR PERSONAL IDENTIFICATION NUMBER\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn dont_correct_pin_number_lowercase() {\n        assert_no_lints(\n            \"GPIO 26 (pin 37) on the Pi4 is mapped to pin nummer GPIO 425 on the pi5\",\n            RedundantAcronyms::default(),\n        );\n    }\n\n    #[test]\n    fn dont_correct_pin_number_titlecase() {\n        assert_no_lints(\n            \"Pin Number Match Project in Javascript.\",\n            RedundantAcronyms::default(),\n        )\n    }\n\n    #[test]\n    fn correct_tui_interface() {\n        assert_good_and_bad_suggestions(\n            \"Could a history search TUI interface be added for xonsh?\",\n            RedundantAcronyms::default(),\n            &[\n                \"Could a history search TUI be added for xonsh?\",\n                \"Could a history search text-based user interface be added for xonsh?\",\n                \"Could a history search terminal user interface be added for xonsh?\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_ui_interface() {\n        assert_good_and_bad_suggestions(\n            \"call ESPUI.begin(\\\"Some Title\\\"); to start the UI interface\",\n            RedundantAcronyms::default(),\n            &[\n                \"call ESPUI.begin(\\\"Some Title\\\"); to start the UI\",\n                \"call ESPUI.begin(\\\"Some Title\\\"); to start the user interface\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_vin_numbers() {\n        assert_good_and_bad_suggestions(\n            \"That was actually accurate in decoding the VIN numbers but it costed me a 1000 USD.\",\n            RedundantAcronyms::default(),\n            &[\n                \"That was actually accurate in decoding the VINs but it costed me a 1000 USD.\",\n                \"That was actually accurate in decoding the vehicle identification numbers but it costed me a 1000 USD.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn correct_vin_number() {\n        assert_good_and_bad_suggestions(\n            \"we have implemented verification algorithms, which ensure that VIN number received is correct\",\n            RedundantAcronyms::default(),\n            &[\n                \"we have implemented verification algorithms, which ensure that VIN received is correct\",\n                \"we have implemented verification algorithms, which ensure that vehicle identification number received is correct\",\n            ],\n            &[],\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/redundant_additive_adverbs.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Lrc, Token, TokenStringExt,\n    expr::{Expr, FirstMatchOf, FixedPhrase, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct RedundantAdditiveAdverbs {\n    expr: SequenceExpr,\n}\n\nimpl Default for RedundantAdditiveAdverbs {\n    fn default() -> Self {\n        let also_too = WordSet::new(&[\"also\", \"too\"]);\n        let as_well = FixedPhrase::from_phrase(\"as well\");\n\n        let additive_adverb = Lrc::new(FirstMatchOf::new(vec![\n            Box::new(also_too),\n            Box::new(as_well),\n        ]));\n\n        let multiple_additive_adverbs = SequenceExpr::with(additive_adverb.clone())\n            .then_one_or_more(SequenceExpr::whitespace().then(additive_adverb.clone()))\n            .then_optional(SequenceExpr::whitespace().t_aco(\"as\"));\n\n        Self {\n            expr: multiple_additive_adverbs,\n        }\n    }\n}\n\nimpl ExprLinter for RedundantAdditiveAdverbs {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let phrase_string = toks.span()?.get_content_string(src).to_lowercase();\n\n        // Rule out `also too` as in `This is also too slow`.\n        if phrase_string.eq(\"also too\") {\n            return None;\n        }\n\n        let mut toks = toks;\n\n        // Check for the `as well as` false positive at the end\n        if phrase_string.ends_with(\" as well as\") {\n            // three word tokens and three whitespace tokens\n            if toks.len() >= 6 {\n                toks = &toks[..toks.len() - 6];\n            }\n        }\n\n        let mut additive_adverbs: Vec<&[char]> = vec![];\n\n        for word in toks\n            .iter()\n            .filter(|tok| tok.kind.is_word())\n            .map(|tok| tok.span.get_content(src))\n            .collect::<Vec<_>>()\n        {\n            let term: &[char] = match word {\n                ['a', 's'] | ['w', 'e', 'l', 'l'] => &['a', 's', ' ', 'w', 'e', 'l', 'l'],\n                _ => word,\n            };\n            if !additive_adverbs.contains(&term) {\n                additive_adverbs.push(term);\n            }\n        }\n\n        // Because of the possible `as well as` false positive, we might only have one additive adverb left.\n        if additive_adverbs.len() < 2 {\n            return None;\n        }\n\n        let suggestions = additive_adverbs\n            .iter()\n            .filter_map(|adverb| {\n                Some(Suggestion::replace_with_match_case(\n                    adverb.to_vec(),\n                    toks.span()?.get_content(src),\n                ))\n            })\n            .collect::<Vec<_>>();\n\n        let message = format!(\n            \"Use just one of `{}`.\",\n            additive_adverbs\n                .iter()\n                .map(|s| s.iter().collect::<String>())\n                .collect::<Vec<_>>()\n                .join(\"` or `\")\n        );\n\n        Some(Lint {\n            span: toks.span()?,\n            lint_kind: LintKind::Redundancy,\n            suggestions,\n            message,\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects redundant additive adverbs.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::RedundantAdditiveAdverbs;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    // Basic unit tests\n\n    #[test]\n    fn flag_as_well_too() {\n        assert_suggestion_result(\n            \"Yeah, we definitely miss him on this episode here, but you could probably get him on a podcast that's more focused on what Equinix is doing as well too, specifically.\",\n            RedundantAdditiveAdverbs::default(),\n            \"Yeah, we definitely miss him on this episode here, but you could probably get him on a podcast that's more focused on what Equinix is doing as well, specifically.\",\n        );\n    }\n\n    #[test]\n    fn flag_too_also() {\n        assert_suggestion_result(\n            \"The #1 uptime service with many servers and is easy to setup. It is free too also.\",\n            RedundantAdditiveAdverbs::default(),\n            \"The #1 uptime service with many servers and is easy to setup. It is free also.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_also_too() {\n        assert_lint_count(\n            \"The version update is also too slow.\",\n            RedundantAdditiveAdverbs::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_also_as_well_as() {\n        assert_lint_count(\n            \"Believe there are stable packages in the readme also as well as a link to an old version of forge in the ...\",\n            RedundantAdditiveAdverbs::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn do_flag_too_also_as_well_as() {\n        assert_lint_count(\n            \"What would happen with a sentence that included too also as well as?\",\n            RedundantAdditiveAdverbs::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn flag_too_as_well() {\n        assert_suggestion_result(\n            \"Module name itself was changed too as well.\",\n            RedundantAdditiveAdverbs::default(),\n            \"Module name itself was changed as well.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/redundant_progressive_comparative.rs",
    "content": "use crate::{\n    CharStringExt, Span, Token, TokenKind,\n    expr::{Expr, SequenceExpr},\n    linting::{Chunk, ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct RedundantProgressiveComparative {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for RedundantProgressiveComparative {\n    fn default() -> Self {\n        Self {\n            expr: Box::new(\n                SequenceExpr::aco(\"increasingly\")\n                    .t_ws()\n                    .then_word_set(&[\"more\", \"less\"])\n                    .t_ws()\n                    .then_kind_either(TokenKind::is_adjective, TokenKind::is_adverb),\n            ),\n        }\n    }\n}\n\nimpl ExprLinter for RedundantProgressiveComparative {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], src: &[char]) -> Option<Lint> {\n        let first = matched_tokens.first()?;\n        let second = matched_tokens.get(2)?;\n\n        let (replacement, message) = if second\n            .span\n            .get_content(src)\n            .eq_ignore_ascii_case_str(\"more\")\n        {\n            (\n                \"more and more\",\n                \"This phrasing is redundant; use a direct comparative like `more and more`.\",\n            )\n        } else if second\n            .span\n            .get_content(src)\n            .eq_ignore_ascii_case_str(\"less\")\n        {\n            (\n                \"less and less\",\n                \"This phrasing is redundant; use a direct comparative like `less and less`.\",\n            )\n        } else {\n            return None;\n        };\n\n        let span = Span::new(first.span.start, second.span.end);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Redundancy,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                replacement,\n                span.get_content(src),\n            )],\n            message: message.to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects redundant comparatives like `increasingly more` and `increasingly less`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::RedundantProgressiveComparative;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fixes_increasingly_more() {\n        assert_suggestion_result(\n            \"The issue is increasingly more prevalent in distributed systems.\",\n            RedundantProgressiveComparative::default(),\n            \"The issue is more and more prevalent in distributed systems.\",\n        );\n    }\n\n    #[test]\n    fn fixes_increasingly_less() {\n        assert_suggestion_result(\n            \"The outages are increasingly less frequent after the migration.\",\n            RedundantProgressiveComparative::default(),\n            \"The outages are less and less frequent after the migration.\",\n        );\n    }\n\n    #[test]\n    fn preserves_match_case_title() {\n        assert_suggestion_result(\n            \"The bug is Increasingly More Prevalent in nightly builds.\",\n            RedundantProgressiveComparative::default(),\n            \"The bug is More and more Prevalent in nightly builds.\",\n        );\n    }\n\n    #[test]\n    fn preserves_match_case_all_caps() {\n        assert_suggestion_result(\n            \"The bug is INCREASINGLY MORE PREVALENT in nightly builds.\",\n            RedundantProgressiveComparative::default(),\n            \"The bug is MORE AND MORE PREVALENT in nightly builds.\",\n        );\n    }\n\n    #[test]\n    fn preserves_match_case_less_all_caps() {\n        assert_suggestion_result(\n            \"The regressions are INCREASINGLY LESS SEVERE with each patch.\",\n            RedundantProgressiveComparative::default(),\n            \"The regressions are LESS AND LESS SEVERE with each patch.\",\n        );\n    }\n\n    #[test]\n    fn ignores_progressively_more() {\n        assert_no_lints(\n            \"These failures are progressively more severe in production.\",\n            RedundantProgressiveComparative::default(),\n        );\n    }\n\n    #[test]\n    fn ignores_steadily_more() {\n        assert_no_lints(\n            \"The interface is steadily more accessible each release.\",\n            RedundantProgressiveComparative::default(),\n        );\n    }\n\n    #[test]\n    fn ignores_progressively_less() {\n        assert_no_lints(\n            \"The warnings became progressively less noticeable over time.\",\n            RedundantProgressiveComparative::default(),\n        );\n    }\n\n    #[test]\n    fn ignores_steadily_less() {\n        assert_no_lints(\n            \"The logs are steadily less noisy in recent builds.\",\n            RedundantProgressiveComparative::default(),\n        );\n    }\n\n    #[test]\n    fn ignores_more_than() {\n        assert_no_lints(\n            \"The issue is increasingly more than a minor annoyance.\",\n            RedundantProgressiveComparative::default(),\n        );\n    }\n\n    #[test]\n    fn ignores_less_than() {\n        assert_no_lints(\n            \"The issue is increasingly less than a minor annoyance.\",\n            RedundantProgressiveComparative::default(),\n        );\n    }\n\n    #[test]\n    fn ignores_noun_after_more() {\n        assert_no_lints(\n            \"The issue is increasingly more people reporting crashes.\",\n            RedundantProgressiveComparative::default(),\n        );\n    }\n\n    #[test]\n    fn ignores_noun_after_less() {\n        assert_no_lints(\n            \"The issue is increasingly less people reporting crashes.\",\n            RedundantProgressiveComparative::default(),\n        );\n    }\n\n    #[test]\n    fn ignores_without_comparator() {\n        assert_no_lints(\n            \"The issue is increasingly prevalent in this subsystem.\",\n            RedundantProgressiveComparative::default(),\n        );\n    }\n\n    #[test]\n    fn ignores_other_adverbial_comparatives() {\n        assert_no_lints(\n            \"The issue is much more prevalent in this subsystem.\",\n            RedundantProgressiveComparative::default(),\n        );\n        assert_no_lints(\n            \"The issue is significantly less prevalent in this subsystem.\",\n            RedundantProgressiveComparative::default(),\n        );\n        assert_no_lints(\n            \"The issue is ever more prevalent in this subsystem.\",\n            RedundantProgressiveComparative::default(),\n        );\n    }\n\n    #[test]\n    fn message_mentions_less_and_less_for_less_branch() {\n        use crate::linting::tests::assert_lint_message;\n\n        assert_lint_message(\n            \"The trend is increasingly less stable over time.\",\n            RedundantProgressiveComparative::default(),\n            \"This phrasing is redundant; use a direct comparative like `less and less`.\",\n        );\n    }\n\n    #[test]\n    fn emits_expected_lint_count() {\n        assert_lint_count(\n            \"The trend is increasingly more likely in larger teams.\",\n            RedundantProgressiveComparative::default(),\n            1,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/regionalisms.rs",
    "content": "use crate::{\n    Dialect::{self, American, Australian, British, Canadian, Indian},\n    Token, TokenStringExt,\n    expr::{Expr, FirstMatchOf, FixedPhrase},\n    linting::{Lint, LintKind, Suggestion},\n};\n\nuse super::ExprLinter;\nuse crate::linting::expr_linter::Chunk;\n\n#[derive(PartialEq)]\nenum CanFlag {\n    /// Flag this term as a regionalism that should be suggested against\n    Flag,\n    /// Don't flag this term because it's universally understood across dialects\n    UniversalTerm,\n    /// Don't flag this term because it has other common meanings that could cause false positives\n    HasOtherMeanings,\n}\n\nuse CanFlag::*;\n\n/// Represents a unique concept that has different regional terms across English dialects.\n/// Each is named by an alphabetical concatenation of the terms that refer to the same concept.\n/// This allows us to suggest appropriate regional alternatives when a term from another dialect is detected.\n#[derive(PartialEq)]\nenum Concept {\n    AubergineBrinjalEggplant,\n    AuberginesBrinjalsEggplants,\n    BharatIndia,\n    // BiscuitCookie - biscuit names different foods in UK/Aus vs US; cookie has other meanings\n    // BiscuitCracker - cracker also has other meanings\n    BloodNoseNosebleed,\n    BritBritisher,\n    BritsBritishers,\n    BumBagFannyPack,\n    BurglarizeBurgle,\n    CampervanRv,\n    CaravanTrailer,\n    CatsupKetchupTomatoSauce,\n    CellPhoneMobilePhone,\n    CoolboxCoolerEsky,\n    ChipsCrisps,\n    CilantroCoriander,\n    Crore,\n    Crores,\n    DiaperNappy,\n    DoonaDuvet,\n    DummyPacifier,\n    FaucetTap,\n    FlashlightTorch,\n    FootballSoccer,\n    FootpathPavementSidewalk,\n    GasolinePetrol,\n    GasStationPetrolStationServiceStation,\n    // HooverVacuumCleaner - Hoover is also a surname and vacuum cleaner is universal.\n    JumperSweater,\n    Lakh,\n    Lakhs,\n    LightBulbLightGlobe,\n    LorryTruck,\n    MotorhomeRv,\n    PhotocopierXerox,\n    PhotocopyXerox,\n    PickupUte,\n    PramStroller,\n    Prepone,\n    SpannerWrench,\n    StationWagonEstate,\n    UpdateUpdation,\n    UpdatesUpdations,\n    WindscreenWindshield,\n}\n\nuse Concept::*;\n\n/// Represents a single entry in our regional terms database\nstruct Term<'a> {\n    /// The term (e.g., \"light globe\", \"sidewalk\")\n    term: &'a str,\n    /// Whether to flag this term or only suggest it.\n    /// We don't want to flag universal terms just because they have a regional synonym.\n    /// We also don't want to flag terms that are common in other senses.\n    flag: CanFlag,\n    /// The dialect(s) this term is associated with.\n    dialects: &'a [Dialect],\n    /// The concept this term is associated with.\n    /// Named by concatenating all the associated terms in alphabetical order.\n    concept: Concept,\n}\n\nconst REGIONAL_TERMS: &[Term<'_>] = &[\n    Term {\n        term: \"aubergine\",\n        flag: Flag,\n        dialects: &[British],\n        concept: AubergineBrinjalEggplant,\n    },\n    Term {\n        term: \"aubergines\",\n        flag: Flag,\n        dialects: &[British],\n        concept: AuberginesBrinjalsEggplants,\n    },\n    Term {\n        term: \"Bharat\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: BharatIndia,\n    },\n    Term {\n        term: \"brinjal\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: AubergineBrinjalEggplant,\n    },\n    Term {\n        term: \"brinjals\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: AuberginesBrinjalsEggplants,\n    },\n    Term {\n        term: \"Brit\",\n        flag: UniversalTerm,\n        dialects: &[American, Australian, British, Canadian],\n        concept: BritBritisher,\n    },\n    Term {\n        term: \"Brits\",\n        flag: UniversalTerm,\n        dialects: &[American, Australian, British, Canadian],\n        concept: BritsBritishers,\n    },\n    Term {\n        term: \"Britisher\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: BritBritisher,\n    },\n    Term {\n        term: \"Britishers\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: BritsBritishers,\n    },\n    Term {\n        term: \"blood nose\",\n        flag: Flag,\n        dialects: &[Australian],\n        concept: BloodNoseNosebleed,\n    },\n    Term {\n        term: \"bum bag\",\n        flag: Flag,\n        dialects: &[Australian],\n        concept: BumBagFannyPack,\n    },\n    Term {\n        term: \"burglarize\",\n        flag: Flag,\n        dialects: &[American],\n        concept: BurglarizeBurgle,\n    },\n    Term {\n        term: \"burgle\",\n        flag: Flag,\n        dialects: &[British],\n        concept: BurglarizeBurgle,\n    },\n    Term {\n        term: \"campervan\",\n        flag: Flag,\n        dialects: &[Australian, British],\n        concept: CampervanRv,\n    },\n    Term {\n        term: \"caravan\",\n        flag: UniversalTerm,\n        dialects: &[Australian, British],\n        concept: CaravanTrailer,\n    },\n    Term {\n        term: \"catsup\",\n        flag: Flag,\n        dialects: &[American],\n        concept: CatsupKetchupTomatoSauce,\n    },\n    Term {\n        term: \"cellphone\",\n        flag: Flag,\n        dialects: &[American],\n        concept: CellPhoneMobilePhone,\n    },\n    Term {\n        term: \"chips\",\n        flag: UniversalTerm,\n        dialects: &[American, Australian],\n        concept: ChipsCrisps,\n    },\n    Term {\n        term: \"cilantro\",\n        flag: Flag,\n        dialects: &[American],\n        concept: CilantroCoriander,\n    },\n    Term {\n        term: \"coolbox\",\n        flag: Flag,\n        dialects: &[British],\n        concept: CoolboxCoolerEsky,\n    },\n    Term {\n        term: \"cooler\",\n        flag: HasOtherMeanings,\n        dialects: &[American, Canadian],\n        concept: CoolboxCoolerEsky,\n    },\n    Term {\n        term: \"coriander\",\n        flag: Flag,\n        dialects: &[Australian, British],\n        concept: CilantroCoriander,\n    },\n    Term {\n        term: \"crisps\",\n        flag: Flag,\n        dialects: &[British],\n        concept: ChipsCrisps,\n    },\n    Term {\n        term: \"crore\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: Crore,\n    },\n    Term {\n        term: \"crores\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: Crores,\n    },\n    Term {\n        term: \"diaper\",\n        flag: Flag,\n        dialects: &[American, Canadian],\n        concept: DiaperNappy,\n    },\n    Term {\n        term: \"doona\",\n        flag: Flag,\n        dialects: &[Australian],\n        concept: DoonaDuvet,\n    },\n    Term {\n        term: \"dummy\",\n        flag: HasOtherMeanings,\n        dialects: &[Australian],\n        concept: DummyPacifier,\n    },\n    Term {\n        term: \"duvet\",\n        flag: Flag,\n        dialects: &[Australian],\n        concept: DoonaDuvet,\n    },\n    Term {\n        term: \"eggplant\",\n        flag: Flag,\n        dialects: &[American, Australian],\n        concept: AubergineBrinjalEggplant,\n    },\n    Term {\n        term: \"eggplants\",\n        flag: Flag,\n        dialects: &[American, Australian],\n        concept: AuberginesBrinjalsEggplants,\n    },\n    Term {\n        term: \"esky\",\n        flag: Flag,\n        dialects: &[Australian],\n        concept: CoolboxCoolerEsky,\n    },\n    Term {\n        term: \"estate\",\n        flag: HasOtherMeanings,\n        dialects: &[British],\n        concept: StationWagonEstate,\n    },\n    Term {\n        term: \"fanny pack\",\n        flag: Flag,\n        dialects: &[American, Canadian],\n        concept: BumBagFannyPack,\n    },\n    Term {\n        term: \"faucet\",\n        flag: Flag,\n        dialects: &[American],\n        concept: FaucetTap,\n    },\n    Term {\n        term: \"flashlight\",\n        flag: Flag,\n        dialects: &[American, Canadian],\n        concept: FlashlightTorch,\n    },\n    Term {\n        term: \"football\",\n        flag: HasOtherMeanings,\n        dialects: &[British],\n        concept: FootballSoccer,\n    },\n    Term {\n        term: \"footpath\",\n        flag: Flag,\n        dialects: &[Australian],\n        concept: FootpathPavementSidewalk,\n    },\n    Term {\n        term: \"gas\",\n        flag: HasOtherMeanings,\n        dialects: &[American, Canadian],\n        concept: GasolinePetrol,\n    },\n    Term {\n        term: \"gas station\",\n        flag: Flag,\n        dialects: &[American, Canadian],\n        concept: GasStationPetrolStationServiceStation,\n    },\n    Term {\n        term: \"gasoline\",\n        flag: Flag,\n        dialects: &[American],\n        concept: GasolinePetrol,\n    },\n    Term {\n        term: \"India\",\n        flag: UniversalTerm,\n        dialects: &[American, Australian, British, Canadian, Indian],\n        concept: BharatIndia,\n    },\n    Term {\n        term: \"jumper\",\n        flag: HasOtherMeanings,\n        dialects: &[Australian],\n        concept: JumperSweater,\n    },\n    Term {\n        term: \"ketchup\",\n        flag: Flag,\n        dialects: &[American, Canadian],\n        concept: CatsupKetchupTomatoSauce,\n    },\n    Term {\n        term: \"lakh\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: Lakh,\n    },\n    Term {\n        term: \"lakhs\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: Lakhs,\n    },\n    Term {\n        term: \"light bulb\",\n        flag: UniversalTerm,\n        dialects: &[American, Australian, British, Canadian],\n        concept: LightBulbLightGlobe,\n    },\n    Term {\n        term: \"light globe\",\n        flag: Flag,\n        dialects: &[Australian],\n        concept: LightBulbLightGlobe,\n    },\n    Term {\n        term: \"lorry\",\n        flag: Flag,\n        dialects: &[British],\n        concept: LorryTruck,\n    },\n    Term {\n        term: \"mobile phone\",\n        flag: Flag,\n        dialects: &[Australian, British],\n        concept: CellPhoneMobilePhone,\n    },\n    Term {\n        term: \"motorhome\",\n        flag: Flag,\n        dialects: &[Australian, British],\n        concept: MotorhomeRv,\n    },\n    Term {\n        term: \"nappy\",\n        flag: Flag,\n        dialects: &[Australian, British],\n        concept: DiaperNappy,\n    },\n    Term {\n        term: \"nosebleed\",\n        flag: UniversalTerm,\n        dialects: &[American, Australian, British, Canadian],\n        concept: BloodNoseNosebleed,\n    },\n    Term {\n        term: \"pacifier\",\n        flag: Flag,\n        dialects: &[American],\n        concept: DummyPacifier,\n    },\n    Term {\n        term: \"pavement\",\n        flag: HasOtherMeanings,\n        dialects: &[British],\n        concept: FootpathPavementSidewalk,\n    },\n    Term {\n        term: \"petrol\",\n        flag: Flag,\n        dialects: &[Australian, British],\n        concept: GasolinePetrol,\n    },\n    Term {\n        term: \"petrol station\",\n        flag: Flag,\n        dialects: &[Australian, British],\n        concept: GasStationPetrolStationServiceStation,\n    },\n    Term {\n        term: \"photocopier\",\n        flag: Flag,\n        dialects: &[Australian, British, Canadian],\n        concept: PhotocopierXerox,\n    },\n    Term {\n        term: \"photocopy\",\n        flag: Flag,\n        dialects: &[Australian, British, Canadian],\n        concept: PhotocopyXerox,\n    },\n    Term {\n        term: \"pickup truck\",\n        flag: Flag,\n        dialects: &[American],\n        concept: PickupUte,\n    },\n    Term {\n        term: \"pram\",\n        flag: Flag,\n        dialects: &[Australian, British],\n        concept: PramStroller,\n    },\n    Term {\n        term: \"prepone\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: Prepone,\n    },\n    Term {\n        // Must be normalized to lowercase\n        term: \"rv\",\n        flag: Flag,\n        dialects: &[American],\n        concept: CampervanRv,\n    },\n    Term {\n        term: \"rv\",\n        flag: Flag,\n        dialects: &[American],\n        concept: MotorhomeRv,\n    },\n    Term {\n        term: \"sidewalk\",\n        flag: Flag,\n        dialects: &[American, Canadian],\n        concept: FootpathPavementSidewalk,\n    },\n    Term {\n        term: \"soccer\",\n        flag: Flag,\n        dialects: &[American, Australian],\n        concept: FootballSoccer,\n    },\n    Term {\n        term: \"spanner\",\n        flag: Flag,\n        dialects: &[Australian, British],\n        concept: SpannerWrench,\n    },\n    Term {\n        term: \"station wagon\",\n        flag: Flag,\n        dialects: &[American, Australian],\n        concept: StationWagonEstate,\n    },\n    Term {\n        term: \"stroller\",\n        flag: Flag,\n        dialects: &[American, Australian],\n        concept: PramStroller,\n    },\n    Term {\n        term: \"sweater\",\n        flag: Flag,\n        dialects: &[American],\n        concept: JumperSweater,\n    },\n    Term {\n        term: \"tap\",\n        flag: HasOtherMeanings,\n        dialects: &[Australian, British],\n        concept: FaucetTap,\n    },\n    Term {\n        term: \"tomato sauce\",\n        flag: HasOtherMeanings,\n        dialects: &[Australian],\n        concept: CatsupKetchupTomatoSauce,\n    },\n    Term {\n        term: \"torch\",\n        flag: HasOtherMeanings,\n        dialects: &[Australian, British],\n        concept: FlashlightTorch,\n    },\n    Term {\n        term: \"trailer\",\n        flag: HasOtherMeanings,\n        dialects: &[American],\n        concept: CaravanTrailer,\n    },\n    Term {\n        term: \"truck\",\n        flag: HasOtherMeanings,\n        dialects: &[American, Australian, Canadian],\n        concept: LorryTruck,\n    },\n    Term {\n        term: \"update\",\n        flag: UniversalTerm,\n        dialects: &[American, Australian, British, Canadian],\n        concept: UpdateUpdation,\n    },\n    Term {\n        term: \"updates\",\n        flag: UniversalTerm,\n        dialects: &[American, Australian, British, Canadian],\n        concept: UpdateUpdation,\n    },\n    Term {\n        term: \"updation\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: UpdateUpdation,\n    },\n    Term {\n        term: \"updations\",\n        flag: Flag,\n        dialects: &[Indian],\n        concept: UpdatesUpdations,\n    },\n    Term {\n        term: \"ute\",\n        flag: Flag,\n        dialects: &[Australian],\n        concept: PickupUte,\n    },\n    Term {\n        term: \"xerox\",\n        dialects: &[American],\n        flag: Flag,\n        concept: PhotocopierXerox,\n    },\n    Term {\n        term: \"xerox\",\n        flag: Flag,\n        dialects: &[American],\n        concept: PhotocopyXerox,\n    },\n    Term {\n        term: \"wrench\",\n        flag: Flag,\n        dialects: &[American],\n        concept: SpannerWrench,\n    },\n    Term {\n        term: \"windscreen\",\n        flag: Flag,\n        dialects: &[British, Australian],\n        concept: WindscreenWindshield,\n    },\n    Term {\n        term: \"windshield\",\n        flag: Flag,\n        dialects: &[American, Canadian],\n        concept: WindscreenWindshield,\n    },\n];\n\npub struct Regionalisms {\n    expr: FirstMatchOf,\n    dialect: Dialect,\n}\n\nimpl Regionalisms {\n    pub fn new(dialect: Dialect) -> Self {\n        let terms: Vec<Box<dyn Expr>> = REGIONAL_TERMS\n            .iter()\n            .filter(|row| row.flag == Flag)\n            .map(|row| Box::new(FixedPhrase::from_phrase(row.term)) as Box<dyn Expr>)\n            .collect();\n\n        Self {\n            expr: FirstMatchOf::new(terms),\n            dialect,\n        }\n    }\n}\n\nimpl ExprLinter for Regionalisms {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let span = toks.span()?;\n        let flagged_term_chars = span.get_content(src);\n        let flagged_term_string = span.get_content_string(src).to_lowercase();\n\n        let linter_dialect = self.dialect;\n\n        // If this term is used in the linter dialect, then we don't want to lint it.\n        if REGIONAL_TERMS\n            .iter()\n            .any(|row| row.term == flagged_term_string && row.dialects.contains(&linter_dialect))\n        {\n            return None;\n        }\n\n        let concept = match REGIONAL_TERMS\n            .iter()\n            .find(|row| row.term == flagged_term_string)\n        {\n            Some(term) => &term.concept,\n            None => return None, // No matching term found, so nothing to lint\n        };\n\n        let other_terms = REGIONAL_TERMS\n            .iter()\n            .filter(|row| row.concept == *concept)\n            .filter_map(|row| {\n                if row.dialects.contains(&linter_dialect) {\n                    Some(&row.term)\n                } else {\n                    None\n                }\n            })\n            .collect::<Vec<_>>();\n\n        let suggestions = other_terms\n            .iter()\n            .map(|term| Suggestion::replace_with_match_case_str(term, flagged_term_chars))\n            .collect::<Vec<_>>();\n\n        let message = if other_terms.len() == 1 {\n            format!(\n                \"`{flagged_term_string}` isn't used in {linter_dialect} English. Use `{}` instead.\",\n                other_terms[0]\n            )\n        } else {\n            format!(\"`{flagged_term_string}` isn't used in {linter_dialect} English.\")\n        };\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Regionalism,\n            suggestions,\n            message,\n            priority: 64,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Regionalisms\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn uk_to_us_food() {\n        assert_suggestion_result(\n            \"I can't eat aubergine or coriander, so I'll just have a bag of crisps.\",\n            Regionalisms::new(Dialect::American),\n            \"I can't eat eggplant or cilantro, so I'll just have a bag of chips.\",\n        );\n    }\n\n    #[test]\n    fn au_to_us_phone() {\n        assert_suggestion_result(\n            \"I dropped my mobile phone in the esky and now it's covered in tomato sauce.\",\n            Regionalisms::new(Dialect::American),\n            // Tomato sauce is valid in American English, it just means pasta sauce rather than ketchup.\n            \"I dropped my cellphone in the cooler and now it's covered in tomato sauce.\",\n        )\n    }\n\n    #[test]\n    fn au_to_uk_cars() {\n        assert_suggestion_result(\n            \"Drive the station wagon onto the footpath and hand me that spanner.\",\n            Regionalisms::new(Dialect::British),\n            \"Drive the estate onto the pavement and hand me that spanner.\",\n        )\n    }\n\n    #[test]\n    fn au_to_us_cars() {\n        assert_suggestion_result(\n            \"Drive the station wagon onto the footpath and hand me that spanner.\",\n            Regionalisms::new(Dialect::American),\n            \"Drive the station wagon onto the sidewalk and hand me that wrench.\",\n        )\n    }\n\n    #[test]\n    fn us_to_au_baby() {\n        assert_suggestion_result(\n            \"Wash the pacifier under the faucet.\",\n            Regionalisms::new(Dialect::Australian),\n            \"Wash the dummy under the tap.\",\n        )\n    }\n\n    #[test]\n    fn us_to_uk_fuel() {\n        assert_suggestion_result(\n            \"I needed more gasoline to drive the truck to the soccer match.\",\n            Regionalisms::new(Dialect::British),\n            \"I needed more petrol to drive the truck to the football match.\",\n        )\n    }\n\n    #[test]\n    fn au_to_uk_light() {\n        assert_suggestion_result(\n            \"Can you sell me a light globe for this torch?\",\n            Regionalisms::new(Dialect::British),\n            \"Can you sell me a light bulb for this torch?\",\n        )\n    }\n\n    #[test]\n    fn us_to_au_oops() {\n        assert_suggestion_result(\n            \"I spilled ketchup on my clean sweater.\",\n            Regionalisms::new(Dialect::Australian),\n            \"I spilled tomato sauce on my clean jumper.\",\n        )\n    }\n\n    #[test]\n    fn caravan_doesnt_always_mean_trailer() {\n        assert_lint_count(\n            \"A caravan (from Persian کاروان kârvân) is a group of people traveling together, often on a trade expedition. Caravans were used mainly in desert areas.\",\n            Regionalisms::new(Dialect::British),\n            0,\n        )\n    }\n\n    #[test]\n    fn uk_to_us_windscreen() {\n        assert_suggestion_result(\n            \"Detect raindrops on vehicle windscreen by combining various region proposal algorithm with Convolutional Neural Network.\",\n            Regionalisms::new(Dialect::American),\n            \"Detect raindrops on vehicle windshield by combining various region proposal algorithm with Convolutional Neural Network.\",\n        )\n    }\n\n    #[test]\n    fn au_to_uk_blood_nose() {\n        assert_suggestion_result(\n            \"Oh no! I got a blood nose.\",\n            Regionalisms::new(Dialect::British),\n            \"Oh no! I got a nosebleed.\",\n        )\n    }\n\n    #[test]\n    fn in_to_non_in_updation() {\n        assert_suggestion_result(\n            \"Add apps to queue for updation or installation and resize it.\",\n            Regionalisms::new(Dialect::American),\n            \"Add apps to queue for update or installation and resize it.\",\n        )\n    }\n\n    #[test]\n    fn dont_flag_update_or_updation_for_indian() {\n        assert_lint_count(\n            \"Hey, the colab notebook which you have provided, required lot of updations, Can you pls update it.\",\n            Regionalisms::new(Dialect::Indian),\n            0,\n        )\n    }\n\n    #[test]\n    fn flag_crore_and_lakh_for_non_indian() {\n        assert_lint_count(\n            \"There are 100 lakhs in one crore.\",\n            Regionalisms::new(Dialect::American),\n            2,\n        )\n    }\n\n    #[test]\n    fn dont_flag_lakh_or_crore_for_indian() {\n        assert_lint_count(\n            \"There are 100 lakhs in one crore.\",\n            Regionalisms::new(Dialect::Indian),\n            0,\n        )\n    }\n\n    #[test]\n    fn a_brinjal_is_an_aubergine() {\n        assert_suggestion_result(\n            \"Is brinjal used in curries or chutneys?\",\n            Regionalisms::new(Dialect::British),\n            \"Is aubergine used in curries or chutneys?\",\n        );\n    }\n\n    #[test]\n    fn a_brinjal_is_an_eggplant() {\n        assert_suggestion_result(\n            \"Is brinjal used in curries or chutneys?\",\n            Regionalisms::new(Dialect::Australian),\n            \"Is eggplant used in curries or chutneys?\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/regular_irregulars.rs",
    "content": "use crate::{\n    Token,\n    char_string::CharStringExt,\n    expr::Expr,\n    irregular_nouns::IrregularNouns,\n    irregular_verbs::IrregularVerbs,\n    linting::{ExprLinter, Lint, LintKind, Suggestion, expr_linter::Chunk},\n    spell::Dictionary,\n};\nuse hashbrown::HashSet;\n\npub struct RegularIrregulars<D> {\n    exp: Box<dyn Expr>,\n    dict: D,\n}\n\nimpl<D> RegularIrregulars<D>\nwhere\n    D: Dictionary,\n{\n    pub fn new(dict: D) -> Self {\n        Self {\n            exp: Box::new(|tok: &Token, src: &[char]| {\n                tok.kind.is_oov()\n                    && tok\n                        .span\n                        .get_content(src)\n                        .ends_with_any_ignore_ascii_case_chars(&[\n                            &['s'],\n                            &['e', 'd'],\n                            &['e', 'r'],\n                            &['e', 's', 't'],\n                        ])\n            }),\n            dict,\n        }\n    }\n}\n\nimpl<D> ExprLinter for RegularIrregulars<D>\nwhere\n    D: Dictionary,\n{\n    type Unit = Chunk;\n\n    fn description(&self) -> &'static str {\n        \"Replaces wrong regular inflections of words with their correct irregular forms.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        self.exp.as_ref()\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        if toks.len() != 1 {\n            return None;\n        }\n        let tok = &toks[0];\n        let span = tok.span;\n        let chars = span.get_content(src);\n        let word = span.get_content_string(src);\n\n        let mut suggs: HashSet<String> = HashSet::new();\n\n        handle_plural_nouns(&self.dict, &mut suggs, chars);\n        handle_past_verbs(&self.dict, &mut suggs, chars);\n        handle_adjectives(&mut suggs, chars);\n\n        let suggestions: Vec<_> = suggs\n            .iter()\n            .map(|good_str| Suggestion::replace_with_match_case(good_str.chars().collect(), chars))\n            .collect();\n\n        if suggestions.is_empty() {\n            return None;\n        }\n        let irregulars = suggs\n            .iter()\n            .map(|s| format!(\"'{}'\", s))\n            .collect::<Vec<_>>()\n            .join(\" or \");\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Grammar,\n            message: format!(\n                \"Use the irregular form {} instead of '{}'\",\n                irregulars, word\n            ),\n            suggestions,\n            ..Default::default()\n        })\n    }\n}\n\nfn get_irreg_compar(word: &str) -> Option<&'static [&'static str]> {\n    match word {\n        \"good\" => Some(&[\"better\"]),\n        \"far\" => Some(&[\"farther\", \"further\"]),\n        \"well\" => Some(&[\"better\"]),\n        \"bad\" => Some(&[\"worse\"]),\n        _ => None,\n    }\n}\n\nfn get_irreg_super(word: &str) -> Option<&'static [&'static str]> {\n    match word {\n        \"good\" => Some(&[\"best\"]),\n        \"far\" => Some(&[\"farthest\", \"furthest\"]),\n        \"well\" => Some(&[\"best\"]),\n        \"bad\" => Some(&[\"worst\"]),\n        _ => None,\n    }\n}\n\nfn handle_adjectives(suggs: &mut HashSet<String>, chars: &[char]) {\n    if chars.ends_with_ignore_ascii_case_str(\"er\") {\n        // Irregular comparatives: gooder -> better etc.\n        let key = chars[..chars.len() - 2].iter().collect::<String>();\n        if let Some(forms) = get_irreg_compar(&key) {\n            suggs.extend(forms.iter().map(|s| s.to_string()));\n        }\n    }\n\n    if chars.ends_with_ignore_ascii_case_str(\"est\") {\n        // Irregular superlatives: goodest -> best etc.\n        let key = chars[..chars.len() - 2].iter().collect::<String>();\n        if let Some(forms) = get_irreg_super(&key) {\n            suggs.extend(forms.iter().map(|s| s.to_string()));\n        }\n    }\n}\n\nfn handle_plural_nouns(dict: &dyn Dictionary, suggs: &mut HashSet<String>, chars: &[char]) {\n    let mut plurals = vec![];\n    let mut sg_candidates = vec![];\n\n    if let Some(drop_s) = chars.strip_suffix(&['s']) {\n        sg_candidates.push(drop_s);\n\n        if let Some(drop_es) = drop_s.strip_suffix(&['e']) {\n            sg_candidates.push(drop_es);\n        }\n\n        let singulars = sg_candidates.iter().filter(|sg| {\n            dict.get_word_metadata(sg)\n                .is_some_and(|m| m.is_singular_noun())\n        });\n\n        singulars.into_iter().for_each(|sg| {\n            // irregular plurals\n            if let Some(pl) =\n                IrregularNouns::curated().get_plural_for_singular(&sg.iter().collect::<String>())\n            {\n                plurals.push(pl.chars().collect());\n            }\n\n            // skys -> sky -> skies etc.\n            if let Some(drop_y) = sg.strip_suffix(&['y']) {\n                let mut add_ies = drop_y.to_vec();\n                add_ies.extend(['i', 'e', 's']);\n                if dict\n                    .get_word_metadata(&add_ies)\n                    .is_some_and(|m| m.is_plural_noun())\n                {\n                    plurals.push(add_ies);\n                }\n            }\n\n            // knifes -> knife -> knives etc. (No because \"knifes\" is a legit verb)\n            if let Some(drop_fe) = sg.strip_suffix(&['f', 'e']) {\n                let mut add_ves = drop_fe.to_vec();\n                add_ves.extend(['v', 'e', 's']);\n                if dict\n                    .get_word_metadata(&add_ves)\n                    .is_some_and(|m| m.is_plural_noun())\n                {\n                    plurals.push(add_ves);\n                }\n            }\n            // calfs -> calf -> calves etc.\n            if let Some(drop_f) = sg.strip_suffix(&['f']) {\n                let mut add_ves = drop_f.to_vec();\n                add_ves.extend(['v', 'e', 's']);\n                if dict\n                    .get_word_metadata(&add_ves)\n                    .is_some_and(|m| m.is_plural_noun())\n                {\n                    plurals.push(add_ves);\n                }\n            }\n            // tomatos -> tomato -> tomatoes etc.\n            // TODO: boxs -> box -> boxes ?\n            if sg.ends_with_ignore_ascii_case_chars(&['o']) {\n                let mut add_es = sg.to_vec();\n                add_es.extend(['e', 's']);\n                if dict\n                    .get_word_metadata(&add_es)\n                    .is_some_and(|m| m.is_plural_noun())\n                {\n                    plurals.push(add_es);\n                }\n            }\n\n            // TODO are there words which double the last consonant to pluralize? gas? whiz?\n        });\n\n        plurals.iter().for_each(|pl| {\n            suggs.insert(pl.iter().collect());\n        });\n    }\n}\n\nfn handle_past_verbs(dict: &dyn Dictionary, suggs: &mut HashSet<String>, chars: &[char]) {\n    let mut pasts: HashSet<Vec<char>> = HashSet::new();\n    let mut vp_candidates = vec![];\n\n    if chars.ends_with_ignore_ascii_case_chars(&['e', 'd']) {\n        vp_candidates.push(&chars[..chars.len() - 2]); // drop_ed\n        vp_candidates.push(&chars[..chars.len() - 1]); // drop_d\n\n        // Handle doubled consonant before -ed (e.g., \"resetted\" -> \"reset\")\n        // Check if position len-3 and len-4 are same char (the doubled consonant)\n        if chars.len() >= 5 && chars[chars.len() - 3] == chars[chars.len() - 4] {\n            vp_candidates.push(&chars[..chars.len() - 3]); // drop one of the doubled consonants + ed\n        }\n    }\n\n    let lemmata = vp_candidates.into_iter().filter(|vp| {\n        dict.get_word_metadata(vp)\n            .is_some_and(|m| m.is_verb_lemma())\n    });\n\n    lemmata.into_iter().for_each(|lem| {\n        let lem_str = lem.iter().collect::<String>();\n\n        // Irregular verbs\n        if let Some((pt, pp)) = IrregularVerbs::curated().get_pasts_for_lemma(&lem_str) {\n            pasts.insert(pt.chars().collect());\n            pasts.insert(pp.chars().collect());\n        }\n    });\n\n    pasts.iter().for_each(|p| {\n        suggs.insert(p.iter().collect());\n    });\n}\n\n#[cfg(test)]\nmod tests {\n    mod nouns {\n        use super::super::RegularIrregulars;\n        use crate::linting::tests::assert_suggestion_result;\n        use crate::spell::FstDictionary;\n\n        #[test]\n        fn fix_irregulars() {\n            assert_suggestion_result(\n                \"Womans and childs first\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                \"Women and children first\",\n            );\n        }\n\n        #[test]\n        fn fix_ys_and_fs() {\n            assert_suggestion_result(\n                \"Kittys playing on the shelfs.\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                \"Kitties playing on the shelves.\",\n            );\n        }\n\n        #[test]\n        fn fix_os_and_oes() {\n            assert_suggestion_result(\n                \"The heros climb the volcanos\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                \"The heroes climb the volcanoes\",\n            );\n        }\n\n        #[test]\n        fn fix_oxen_and_meatloaves() {\n            assert_suggestion_result(\n                \"These meatloafs are made out of oxes.\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                \"These meatloaves are made out of oxen.\",\n            );\n        }\n    }\n\n    mod verbs {\n        use super::super::RegularIrregulars;\n        use crate::linting::tests::assert_suggestion_result;\n        use crate::spell::FstDictionary;\n\n        #[test]\n        fn fix_irregular_past_verb() {\n            assert_suggestion_result(\n                \"I eated the banana.\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                \"I ate the banana.\",\n            );\n        }\n\n        #[test]\n        fn fix_readed() {\n            assert_suggestion_result(\n                \"He readed the newspaper\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                \"He read the newspaper\",\n            );\n        }\n\n        #[test]\n        fn fix_writed() {\n            assert_suggestion_result(\n                \"She writed many lines of code.\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                \"She wrote many lines of code.\",\n            );\n        }\n\n        #[test]\n        fn fix_runned() {\n            assert_suggestion_result(\n                \"I runned faster than ever!\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                \"I ran faster than ever!\",\n            );\n        }\n\n        #[test]\n        fn fix_resetted() {\n            assert_suggestion_result(\n                \"I resetted the phone to factory settings.\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                \"I reset the phone to factory settings.\",\n            );\n        }\n\n        #[test]\n        fn fix_eat_drink_sleep() {\n            assert_suggestion_result(\n                \"I eated and drinked too much but I sleeped good.\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                \"I ate and drank too much but I slept good.\",\n            );\n        }\n    }\n\n    mod adjectives {\n        use super::super::RegularIrregulars;\n        use crate::linting::tests::assert_good_and_bad_suggestions;\n        use crate::spell::FstDictionary;\n\n        #[test]\n        fn fix_adjectives() {\n            assert_good_and_bad_suggestions(\n                \"This way is farer.\",\n                RegularIrregulars::new(FstDictionary::curated()),\n                &[\"This way is farther.\", \"This way is further.\"],\n                &[],\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/repeated_words.rs",
    "content": "use super::{Lint, LintKind, Linter, Suggestion};\nuse crate::TokenStringExt;\nuse crate::char_string::char_string;\nuse crate::{CharString, CharStringExt, Document, Span};\n\n#[derive(Debug, Clone)]\npub struct RepeatedWords {\n    /// Words that we need to make sure are detected.\n    /// We use a `Vec` since there aren't a whole lot of 'em.\n    special_cases: Vec<CharString>,\n}\nimpl RepeatedWords {\n    pub fn new() -> Self {\n        Self {\n            special_cases: vec![char_string!(\"this\")],\n        }\n    }\n\n    fn is_special_case(&self, chars: &[char]) -> bool {\n        let lower = chars.to_lower();\n\n        self.special_cases\n            .iter()\n            .any(|v| v.as_slice() == lower.as_ref())\n    }\n}\n\nimpl Default for RepeatedWords {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl Linter for RepeatedWords {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for chunk in document.iter_chunks() {\n            let mut iter = chunk.iter_word_indices().zip(chunk.iter_words()).peekable();\n\n            while let (Some((idx_a, tok_a)), Some((idx_b, tok_b))) = (iter.next(), iter.peek()) {\n                let word_a = document.get_span_content(&tok_a.span);\n                let word_b = document.get_span_content(&tok_b.span);\n\n                let prev_tok = document.get_token_offset(idx_a, -1);\n                let next_tok = document.get_token_offset(*idx_b, 1);\n\n                if prev_tok.is_some_and(|t| t.kind.is_hyphen())\n                    || next_tok.is_some_and(|t| t.kind.is_hyphen())\n                {\n                    continue;\n                }\n\n                if (tok_a.kind.is_preposition()\n                    || tok_a.kind.is_conjunction()\n                    || !tok_a.kind.is_likely_homograph()\n                    || self.is_special_case(word_a)\n                    || tok_a.kind.is_adverb()\n                    || tok_a.kind.is_determiner())\n                    && word_a.to_lower() == word_b.to_lower()\n                {\n                    let intervening_tokens = &chunk[idx_a + 1..*idx_b];\n\n                    if intervening_tokens.iter().any(|t| !t.kind.is_whitespace()) {\n                        continue;\n                    }\n\n                    lints.push(Lint {\n                        span: Span::new(tok_a.span.start, tok_b.span.end),\n                        lint_kind: LintKind::Repetition,\n                        suggestions: vec![Suggestion::ReplaceWith(\n                            document.get_span_content(&tok_a.span).to_vec(),\n                        )],\n                        message: \"Did you mean to repeat this word?\".to_string(),\n                        ..Default::default()\n                    })\n                }\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &'static str {\n        \"This rule looks for repetitions of words that are not homographs.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::super::tests::assert_lint_count;\n    use super::RepeatedWords;\n\n    #[test]\n    fn catches_basic() {\n        assert_lint_count(\"I wanted the the banana.\", RepeatedWords::default(), 1)\n    }\n\n    #[test]\n    fn does_not_lint_homographs_address() {\n        assert_lint_count(\"To address address problems.\", RepeatedWords::default(), 0);\n    }\n\n    #[test]\n    fn does_not_lint_homographs_record() {\n        assert_lint_count(\"To record record profits.\", RepeatedWords::default(), 0);\n    }\n\n    #[test]\n    fn issue_253() {\n        assert_lint_count(\n            \"this paper shows that, while the method may be more accurate accurate, the turnout overestimate suggests that self-selection bias is not sufficiently reduced\",\n            RepeatedWords::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn issue_333() {\n        assert_suggestion_result(\n            \"This is is a test\",\n            RepeatedWords::default(),\n            \"This is a test\",\n        );\n    }\n\n    #[test]\n    fn double_a() {\n        assert_suggestion_result(\n            \"This is a a test\",\n            RepeatedWords::default(),\n            \"This is a test\",\n        );\n    }\n\n    #[test]\n    fn double_and() {\n        assert_suggestion_result(\n            \"And and this is also a test\",\n            RepeatedWords::default(),\n            \"And this is also a test\",\n        );\n    }\n\n    #[test]\n    fn on_on_github() {\n        assert_suggestion_result(\n            \"Take a look at the project on on GitHub.\",\n            RepeatedWords::default(),\n            \"Take a look at the project on GitHub.\",\n        );\n    }\n\n    #[test]\n    fn as_as() {\n        assert_suggestion_result(\n            \"he is as as hard as nails\",\n            RepeatedWords::default(),\n            \"he is as hard as nails\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_first_hyphenated() {\n        assert_lint_count(\n            \"The driver-facing camera and microphone are only logged if you explicitly opt-in in settings.\",\n            RepeatedWords::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_hyphenated_either_side() {\n        assert_lint_count(\"foo-foo foo bar bar-bar\", RepeatedWords::default(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/respond.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, ExprMap, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\n\npub struct Respond {\n    expr: ExprMap<usize>,\n}\n\nimpl Default for Respond {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        let helper_verb = |tok: &Token, src: &[char]| {\n            if tok.kind.is_auxiliary_verb() {\n                return true;\n            }\n\n            if !tok.kind.is_verb() {\n                return false;\n            }\n\n            let lower = tok.span.get_content_string(src).to_lowercase();\n            matches!(\n                lower.as_str(),\n                \"do\" | \"did\" | \"does\" | \"won't\" | \"don't\" | \"didn't\" | \"doesn't\"\n            )\n        };\n\n        map.insert(\n            SequenceExpr::default()\n                .then_nominal()\n                .t_ws()\n                .then(helper_verb)\n                .t_ws()\n                .t_aco(\"response\"),\n            4,\n        );\n\n        map.insert(\n            SequenceExpr::default()\n                .then_nominal()\n                .t_ws()\n                .then(helper_verb)\n                .t_ws()\n                .then_adverb()\n                .t_ws()\n                .t_aco(\"response\"),\n            6,\n        );\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for Respond {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let response_index = *self.expr.lookup(0, matched_tokens, source)?;\n        let response_token = matched_tokens.get(response_index)?;\n\n        Some(Lint {\n            span: response_token.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"respond\",\n                response_token.span.get_content(source),\n            )],\n            message: \"Use the verb `respond` here.\".to_owned(),\n            priority: 40,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags uses of the noun `response` where the verb `respond` is needed after an auxiliary.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Respond;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fixes_will_response() {\n        assert_suggestion_result(\n            \"He will response soon.\",\n            Respond::default(),\n            \"He will respond soon.\",\n        );\n    }\n\n    #[test]\n    fn fixes_can_response() {\n        assert_suggestion_result(\n            \"They can response to the survey.\",\n            Respond::default(),\n            \"They can respond to the survey.\",\n        );\n    }\n\n    #[test]\n    fn fixes_did_not_response() {\n        assert_suggestion_result(\n            \"I did not response yesterday.\",\n            Respond::default(),\n            \"I did not respond yesterday.\",\n        );\n    }\n\n    #[test]\n    fn fixes_might_quickly_response() {\n        assert_suggestion_result(\n            \"She might quickly response to feedback.\",\n            Respond::default(),\n            \"She might quickly respond to feedback.\",\n        );\n    }\n\n    #[test]\n    fn fixes_wont_response() {\n        assert_suggestion_result(\n            \"They won't response in time.\",\n            Respond::default(),\n            \"They won't respond in time.\",\n        );\n    }\n\n    #[test]\n    fn fixes_would_response() {\n        assert_suggestion_result(\n            \"We would response if we could.\",\n            Respond::default(),\n            \"We would respond if we could.\",\n        );\n    }\n\n    #[test]\n    fn fixes_should_response() {\n        assert_suggestion_result(\n            \"You should response politely.\",\n            Respond::default(),\n            \"You should respond politely.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_correct_respond() {\n        assert_no_lints(\"Please respond when you can.\", Respond::default());\n    }\n\n    #[test]\n    fn does_not_flag_noun_use() {\n        assert_no_lints(\"The response time was great.\", Respond::default());\n    }\n\n    #[test]\n    fn does_not_flag_question_subject() {\n        assert_lint_count(\"Should response times be logged?\", Respond::default(), 0);\n    }\n\n    #[test]\n    fn does_not_flag_response_as_object() {\n        assert_no_lints(\"I have no response for that.\", Respond::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/right_click.rs",
    "content": "use crate::{\n    Token, TokenStringExt,\n    expr::{Expr, ExprMap, SequenceExpr},\n    linting::expr_linter::Chunk,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::DerivedFrom,\n};\n\npub struct RightClick {\n    expr: ExprMap<usize>,\n}\n\nimpl Default for RightClick {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        map.insert(\n            SequenceExpr::word_set(&[\"right\", \"left\", \"middle\"])\n                .t_ws()\n                .then(DerivedFrom::new_from_str(\"click\")),\n            0,\n        );\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for RightClick {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let start_idx = *self.expr.lookup(0, matched_tokens, source)?;\n        let click_idx = matched_tokens.len().checked_sub(1)?;\n        let span = matched_tokens.get(start_idx..=click_idx)?.span()?;\n        let template = span.get_content(source);\n\n        let direction = matched_tokens.get(start_idx)?.span.get_content(source);\n        let click = matched_tokens.get(click_idx)?.span.get_content(source);\n\n        let replacement: Vec<char> = direction\n            .iter()\n            .copied()\n            .chain(['-'])\n            .chain(click.iter().copied())\n            .collect();\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Punctuation,\n            suggestions: vec![Suggestion::replace_with_match_case(replacement, template)],\n            message: \"Hyphenate this mouse command.\".to_owned(),\n            priority: 40,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Hyphenates right-click style mouse commands.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::RightClick;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn hyphenates_basic_command() {\n        assert_suggestion_result(\n            \"Right click the icon.\",\n            RightClick::default(),\n            \"Right-click the icon.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_with_preposition() {\n        assert_suggestion_result(\n            \"Please right click on the link.\",\n            RightClick::default(),\n            \"Please right-click on the link.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_past_tense() {\n        assert_suggestion_result(\n            \"They right clicked the submit button.\",\n            RightClick::default(),\n            \"They right-clicked the submit button.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_gerund() {\n        assert_suggestion_result(\n            \"Right clicking the item highlights it.\",\n            RightClick::default(),\n            \"Right-clicking the item highlights it.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_plural_noun() {\n        assert_suggestion_result(\n            \"Right clicks are tracked in the log.\",\n            RightClick::default(),\n            \"Right-clicks are tracked in the log.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_all_caps() {\n        assert_suggestion_result(\n            \"He RIGHT CLICKED the file.\",\n            RightClick::default(),\n            \"He RIGHT-CLICKED the file.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_left_click() {\n        assert_suggestion_result(\n            \"Left click the checkbox.\",\n            RightClick::default(),\n            \"Left-click the checkbox.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_middle_click() {\n        assert_suggestion_result(\n            \"Middle click to open in a new tab.\",\n            RightClick::default(),\n            \"Middle-click to open in a new tab.\",\n        );\n    }\n\n    #[test]\n    fn allows_hyphenated_form() {\n        assert_lint_count(\"Right-click the icon.\", RightClick::default(), 0);\n    }\n\n    #[test]\n    fn ignores_unrelated_right_and_click() {\n        assert_lint_count(\n            \"Click the right button to continue.\",\n            RightClick::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/rise_the_ranks.rs",
    "content": "use crate::{\n    Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, debug::format_lint_match, expr_linter::Chunk},\n};\n\npub struct RiseTheRanks {\n    expr: SequenceExpr,\n}\n\nimpl Default for RiseTheRanks {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\n                // legit forms of the legit verb \"rise\"\n                \"rise\", \"risen\", \"rising\", \"rose\",\n                // wrong forms of the legit verb \"rise\"\n                \"rised\", // forms of wrong verbs used instead of forms of \"rise\"\n                        // \"arise\", \"arised\", \"arisen\", \"arising\", \"arose\", \"raise\", \"raised\", \"raises\",\n                        // \"raising\",\n            ])\n            .t_ws()\n            // .then_optional(\n            //     SequenceExpr::optional(SequenceExpr::aco(\"up\").t_ws())\n            //         // modern \"through\", traditional \"from\"\n            //         // also seen: \"in\", \"up\"\n            //         .then_preposition()\n            //         .t_ws(),\n            // )\n            .t_aco(\"the\")\n            .t_ws()\n            // .t_set(&[\"ranks\", \"rank\"]),\n            .t_aco(\"ranks\"),\n        }\n    }\n}\n\nimpl ExprLinter for RiseTheRanks {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects the nonstandard phrase `rise the ranks` to the standard `rise through the ranks` or `rise from the ranks`\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        eprintln!(\"🧵 {}\", format_lint_match(toks, ctx, src));\n\n        Some(Lint {\n            span: toks[0].span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![\n                Suggestion::InsertAfter(vec![' ', 't', 'h', 'r', 'o', 'u', 'g', 'h']),\n                Suggestion::InsertAfter(vec![' ', 'f', 'r', 'o', 'm']),\n            ],\n            message: \"Use either the modern standard 'rise through the ranks' or the traditional 'rise from the ranks'. 'Rise the ranks' is nonstandard.\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::RiseTheRanks;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fix_rise_the_ranks() {\n        assert_suggestion_result(\n            \"Rise the ranks from Division 8 to the Champion!\",\n            RiseTheRanks::default(),\n            \"Rise through the ranks from Division 8 to the Champion!\",\n        );\n    }\n\n    #[test]\n    fn fix_rised_the_ranks() {\n        assert_suggestion_result(\n            \"while there I've rised the ranks from L1 Tech > L2 Tech > Team lead and now Manager\",\n            RiseTheRanks::default(),\n            \"while there I've rised through the ranks from L1 Tech > L2 Tech > Team lead and now Manager\",\n        );\n    }\n\n    #[test]\n    fn fix_risen_the_ranks() {\n        assert_suggestion_result(\n            \"AngularJS has risen the ranks of popularity a lot over the last couple of years.\",\n            RiseTheRanks::default(),\n            \"AngularJS has risen through the ranks of popularity a lot over the last couple of years.\",\n        );\n    }\n\n    #[test]\n    fn fix_rising_the_ranks() {\n        assert_suggestion_result(\n            \"Rust is new coding language rising the ranks, aiming at safe concurrency, data safe programming at zero abstraction cost.\",\n            RiseTheRanks::default(),\n            \"Rust is new coding language rising through the ranks, aiming at safe concurrency, data safe programming at zero abstraction cost.\",\n        );\n    }\n\n    #[test]\n    fn fix_rose_the_ranks() {\n        assert_suggestion_result(\n            \"we follow these women as they quickly rose the ranks of NASA alongside many of history's greatest minds\",\n            RiseTheRanks::default(),\n            \"we follow these women as they quickly rose through the ranks of NASA alongside many of history's greatest minds\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_rise_through_the_ranks() {\n        assert_no_lints(\n            \"I hadn't noticed any particular suspicious behavior during my slow but steady rise through the ranks.\",\n            RiseTheRanks::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_rises_through_the_ranks() {\n        assert_no_lints(\n            \"Vito Scaletta rises through the ranks of the mafia, becoming a powerful don.\",\n            RiseTheRanks::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_rising_from_the_ranks() {\n        assert_no_lints(\n            \"Rising from the ranks of a sailor, he seems to have embodied the American Dream among a navy full of elites.\",\n            RiseTheRanks::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_rising_through_the_ranks() {\n        assert_no_lints(\n            \"From a tranquil town, he discovered his passion in online gaming tournaments, rising through the ranks with unwavering dedication.\",\n            RiseTheRanks::default(),\n        );\n    }\n\n    // #[test]\n    // fn fix_raise_in_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"I am trying to raise in the ranks to be more helpful so I would appreciate comments, and upvotes if this was helpful.\",\n    //         RiseTheRanks::default(),\n    //         \"I am trying to rise through the ranks to be more helpful so I would appreciate comments, and upvotes if this was helpful.\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_raise_up_in_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"And the rejects that make it back successfully raise up in the ranks.\",\n    //         RiseTheRanks::default(),\n    //         \"And the rejects that make it back successfully rise through the ranks.\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_raise_up_through_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"characters who use their intelligence, charms ETC. to gain power and raise up through the ranks\",\n    //         RiseTheRanks::default(),\n    //         \"characters who use their intelligence, charms ETC. to gain power and rise through the ranks\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_raised_through_the_rank() {\n    //     assert_suggestion_result(\n    //         \"I raised through the rank to be responsible of all the main offensive wars and managed to help my ruler build a respectable kingdom\",\n    //         RiseTheRanks::default(),\n    //         \"I rose through the ranks to be responsible of all the main offensive wars and managed to help my ruler build a respectable kingdom\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_raises_through_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"He raises through the ranks pretty quickly. Ensign. Lieutenant. Senior Lieutenant.\",\n    //         RiseTheRanks::default(),\n    //         \"He rises through the ranks pretty quickly. Ensign. Lieutenant. Senior Lieutenant.\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_raising_through_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"The signals were reinforced by the people whom I saw raising through the ranks while those around them burnt out.\",\n    //         RiseTheRanks::default(),\n    //         \"The signals were reinforced by the people whom I saw rising through the ranks while those around them burnt out.\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_raising_up_in_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"I would have rather stayed as a blacksmith son raising up in the ranks.\",\n    //         RiseTheRanks::default(),\n    //         \"I would have rather stayed as a blacksmith son rising through the ranks.\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_raising_up_through_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"then it's through completing the foraging club missions and raising up through the ranks\",\n    //         RiseTheRanks::default(),\n    //         \"then it's through completing the foraging club missions and rising through the ranks\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_rise_up_in_the_rank() {\n    //     assert_suggestion_result(\n    //         \"Supposing I am a soldier in the Qin military,what should I do to rise up in the rank?\",\n    //         RiseTheRanks::default(),\n    //         \"Supposing I am a soldier in the Qin military,what should I do to rise through the ranks?\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_rise_up_in_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"It requires weeding out those that would stop or rise up in the ranks against communist control.\",\n    //         RiseTheRanks::default(),\n    //         \"It requires weeding out those that would stop or rise through the ranks against communist control.\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_rise_up_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"It is far easier to rise up the ranks quickly in a new space than in an old, crowded space.\",\n    //         RiseTheRanks::default(),\n    //         \"It is far easier to rise through the ranks quickly in a new space than in an old, crowded space.\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_rise_up_through_the_rank() {\n    //     assert_suggestion_result(\n    //         \"Gau really rise up through the rank after they finally settle him on wind/lightning lol.\",\n    //         RiseTheRanks::default(),\n    //         \"Gau really rise through the ranks after they finally settle him on wind/lightning lol.\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_rise_up_through_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"There's no obligation to do this, but it does help users to rise up through the ranks, or sometimes, simply to feel helpful\",\n    //         RiseTheRanks::default(),\n    //         \"There's no obligation to do this, but it does help users to rise through the ranks, or sometimes, simply to feel helpful\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_rised_through_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"The eldest brother quickly rised through the ranks of the legion.\",\n    //         RiseTheRanks::default(),\n    //         \"The eldest brother quickly rose through the ranks of the legion.\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_rised_up_in_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"infiltrated the council and rised up in the ranks but couldn't pretend to be Mystogan for less than a week\",\n    //         RiseTheRanks::default(),\n    //         \"infiltrated the council and rose through the ranks but couldn't pretend to be Mystogan for less than a week\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_risen_in_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"Python has risen in the ranks, surpassing C# this year, much like it surpassed PHP last year.\",\n    //         RiseTheRanks::default(),\n    //         \"Python has risen through the ranks, surpassing C# this year, much like it surpassed PHP last year.\",\n    //     );\n    // }\n\n    // #[test]\n    // fn fix_rising_up_through_the_ranks() {\n    //     assert_suggestion_result(\n    //         \"It's hard to even imagine rising up through the ranks, grinding out the decades, and then retiring - with a penchant - all at a single company.\",\n    //         RiseTheRanks::default(),\n    //         \"It's hard to even imagine rising through the ranks, grinding out the decades, and then retiring - with a penchant - all at a single company.\",\n    //     );\n    // }\n}\n"
  },
  {
    "path": "harper-core/src/linting/roller_skated.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenKind, TokenStringExt,\n    expr::{AnchorStart, Expr, ExprMap, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\n/// Suggests hyphenating the past tense of `roller-skate`.\npub struct RollerSkated {\n    expr: ExprMap<usize>,\n}\n\nimpl RollerSkated {\n    fn roller_pair() -> SequenceExpr {\n        SequenceExpr::default()\n            .t_aco(\"roller\")\n            .t_ws()\n            .t_aco(\"skated\")\n    }\n}\n\nimpl Default for RollerSkated {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        map.insert(\n            SequenceExpr::default()\n                .then_kind_is_but_is_not(\n                    |kind| matches!(kind, TokenKind::Word(_)),\n                    |kind| kind.is_determiner(),\n                )\n                .then_whitespace()\n                .then_seq(Self::roller_pair()),\n            2,\n        );\n\n        map.insert(\n            SequenceExpr::default()\n                .then_punctuation()\n                .then_whitespace()\n                .then_seq(Self::roller_pair()),\n            2,\n        );\n\n        map.insert(\n            SequenceExpr::default()\n                .then_punctuation()\n                .then_seq(Self::roller_pair()),\n            1,\n        );\n\n        map.insert(\n            SequenceExpr::with(AnchorStart).then_seq(Self::roller_pair()),\n            0,\n        );\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for RollerSkated {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let roller_idx = *self.expr.lookup(0, matched_tokens, source)?;\n        let skated_idx = roller_idx.checked_add(2)?;\n        let window = matched_tokens.get(roller_idx..=skated_idx)?;\n        let span = window.span()?;\n        let original = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Punctuation,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"roller-skated\".chars().collect(),\n                original,\n            )],\n            message: \"Hyphenate this verb as `roller-skated`.\".to_owned(),\n            priority: 40,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Encourages hyphenating the past tense of `roller-skate`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::RollerSkated;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_basic_sentence() {\n        assert_suggestion_result(\n            \"He roller skated down the hill.\",\n            RollerSkated::default(),\n            \"He roller-skated down the hill.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_adverb() {\n        assert_suggestion_result(\n            \"They roller skated quickly around the rink.\",\n            RollerSkated::default(),\n            \"They roller-skated quickly around the rink.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_auxiliary() {\n        assert_suggestion_result(\n            \"She had roller skated there before.\",\n            RollerSkated::default(),\n            \"She had roller-skated there before.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_contraction() {\n        assert_suggestion_result(\n            \"They'd roller skated all night.\",\n            RollerSkated::default(),\n            \"They'd roller-skated all night.\",\n        );\n    }\n\n    #[test]\n    fn corrects_caps() {\n        assert_suggestion_result(\n            \"They ROLLER SKATED yesterday.\",\n            RollerSkated::default(),\n            \"They ROLLER-SKATED yesterday.\",\n        );\n    }\n\n    #[test]\n    fn corrects_in_quotes() {\n        assert_suggestion_result(\n            \"\\\"We roller skated together,\\\" she said.\",\n            RollerSkated::default(),\n            \"\\\"We roller-skated together,\\\" she said.\",\n        );\n    }\n\n    #[test]\n    fn corrects_across_line_break() {\n        assert_suggestion_result(\n            \"We\\nroller skated whenever we could.\",\n            RollerSkated::default(),\n            \"We\\nroller-skated whenever we could.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_trailing_punctuation() {\n        assert_suggestion_result(\n            \"He roller skated, laughed, and waved.\",\n            RollerSkated::default(),\n            \"He roller-skated, laughed, and waved.\",\n        );\n    }\n\n    #[test]\n    fn corrects_without_space_after_punctuation() {\n        assert_suggestion_result(\n            \"He roller skated,laughed, and waved.\",\n            RollerSkated::default(),\n            \"He roller-skated,laughed, and waved.\",\n        );\n    }\n\n    #[test]\n    fn allows_hyphenated_form() {\n        assert_lint_count(\"They roller-skated yesterday.\", RollerSkated::default(), 0);\n    }\n\n    #[test]\n    fn allows_subject_named_roller() {\n        assert_lint_count(\n            \"The roller skated across the stage.\",\n            RollerSkated::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_other_compounds() {\n        assert_lint_count(\n            \"Their roller skating routine impressed everyone.\",\n            RollerSkated::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/safe_to_save.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::expr::Expr;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::patterns::{ModalVerb, UPOSSet, WordSet};\nuse crate::{\n    Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct SafeToSave {\n    expr: LongestMatchOf,\n}\n\nimpl Default for SafeToSave {\n    fn default() -> Self {\n        let with_adv = SequenceExpr::with(ModalVerb::default())\n            .then_whitespace()\n            .then(UPOSSet::new(&[UPOS::ADV]))\n            .then_whitespace()\n            .t_aco(\"safe\")\n            .then_whitespace()\n            .then_unless(WordSet::new(&[\"to\"]));\n\n        let without_adv = SequenceExpr::with(ModalVerb::default())\n            .then_whitespace()\n            .t_aco(\"safe\")\n            .then_whitespace()\n            .then_unless(WordSet::new(&[\"to\"]));\n\n        let pattern = with_adv.or_longest(without_adv);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for SafeToSave {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let safe_idx = toks\n            .iter()\n            .position(|t| t.span.get_content_string(src).to_lowercase() == \"safe\")?;\n\n        let safe_tok = &toks[safe_idx];\n\n        Some(Lint {\n            span: safe_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::ReplaceWith(\"save\".chars().collect())],\n            message: \"The word `safe` is an adjective. Did you mean the verb `save`?\".to_string(),\n            priority: 57,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects `safe` (adjective) when `save` (verb) is intended after modal verbs like `could` or `should`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::SafeToSave;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn corrects_could_safe() {\n        assert_suggestion_result(\n            \"He could safe my life.\",\n            SafeToSave::default(),\n            \"He could save my life.\",\n        );\n    }\n\n    #[test]\n    fn corrects_should_safe() {\n        assert_suggestion_result(\n            \"You should safe your work frequently.\",\n            SafeToSave::default(),\n            \"You should save your work frequently.\",\n        );\n    }\n\n    #[test]\n    fn corrects_will_safe() {\n        assert_suggestion_result(\n            \"This will safe you time.\",\n            SafeToSave::default(),\n            \"This will save you time.\",\n        );\n    }\n\n    #[test]\n    fn corrects_would_safe() {\n        assert_suggestion_result(\n            \"It would safe us money.\",\n            SafeToSave::default(),\n            \"It would save us money.\",\n        );\n    }\n\n    #[test]\n    fn corrects_can_safe() {\n        assert_suggestion_result(\n            \"You can safe the document now.\",\n            SafeToSave::default(),\n            \"You can save the document now.\",\n        );\n    }\n\n    #[test]\n    fn corrects_might_safe() {\n        assert_suggestion_result(\n            \"This might safe the company.\",\n            SafeToSave::default(),\n            \"This might save the company.\",\n        );\n    }\n\n    #[test]\n    fn corrects_must_safe() {\n        assert_suggestion_result(\n            \"We must safe our resources.\",\n            SafeToSave::default(),\n            \"We must save our resources.\",\n        );\n    }\n\n    #[test]\n    fn corrects_may_safe() {\n        assert_suggestion_result(\n            \"You may safe your progress here.\",\n            SafeToSave::default(),\n            \"You may save your progress here.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_adverb() {\n        assert_suggestion_result(\n            \"You should definitely safe your changes.\",\n            SafeToSave::default(),\n            \"You should definitely save your changes.\",\n        );\n    }\n\n    #[test]\n    fn corrects_shall_safe() {\n        assert_suggestion_result(\n            \"We shall safe the nation.\",\n            SafeToSave::default(),\n            \"We shall save the nation.\",\n        );\n    }\n\n    #[test]\n    fn corrects_couldnt_safe() {\n        assert_suggestion_result(\n            \"I couldn't safe the file.\",\n            SafeToSave::default(),\n            \"I couldn't save the file.\",\n        );\n    }\n\n    #[test]\n    fn allows_safe_to_verb() {\n        assert_no_lints(\"It is safe to assume.\", SafeToSave::default());\n    }\n\n    #[test]\n    fn allows_safe_noun() {\n        assert_no_lints(\"Put the money in the safe today.\", SafeToSave::default());\n    }\n\n    #[test]\n    fn allows_correct_save() {\n        assert_no_lints(\"You should save your work.\", SafeToSave::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/save_to_safe.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::OwnedExprExt;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::{InflectionOfBe, Word},\n};\n\npub struct SaveToSafe {\n    expr: SequenceExpr,\n}\n\nimpl Default for SaveToSafe {\n    fn default() -> Self {\n        let pattern = SequenceExpr::with(InflectionOfBe::new().or(Word::new(\"it\")))\n            .then_whitespace()\n            .t_aco(\"save\")\n            .then_whitespace()\n            .t_aco(\"to\")\n            .then_whitespace()\n            .then_verb();\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for SaveToSafe {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let save_tok = &toks.get(2)?;\n        let verb_tok = &toks.get(4)?;\n        let verb = verb_tok.span.get_content_string(src).to_lowercase();\n        Some(Lint {\n            span: save_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::ReplaceWith(\"safe\".chars().collect())],\n            message: format!(\"Did you mean `safe to {verb}`?\"),\n            priority: 57,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `save to <verb>` to `safe to <verb>` after a form of `be`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::SaveToSafe;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn fix_ignore() {\n        assert_suggestion_result(\n            \"It is save to ignore trivial code.\",\n            SaveToSafe::default(),\n            \"It is safe to ignore trivial code.\",\n        );\n    }\n\n    #[test]\n    fn fix_travel() {\n        assert_suggestion_result(\n            \"Is it save to travel abroad now?\",\n            SaveToSafe::default(),\n            \"Is it safe to travel abroad now?\",\n        );\n    }\n\n    #[test]\n    fn ignore_correct() {\n        assert_lint_count(\"It is safe to assume nothing.\", SaveToSafe::default(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/sentence_capitalization.rs",
    "content": "use super::Suggestion;\nuse super::{Lint, LintKind, Linter};\nuse crate::document::Document;\nuse crate::spell::Dictionary;\nuse crate::{Token, TokenKind, TokenStringExt};\n\npub struct SentenceCapitalization<T>\nwhere\n    T: Dictionary,\n{\n    dictionary: T,\n}\n\nimpl<T: Dictionary> SentenceCapitalization<T> {\n    pub fn new(dictionary: T) -> Self {\n        Self { dictionary }\n    }\n}\n\nimpl<T: Dictionary> Linter for SentenceCapitalization<T> {\n    /// A linter that checks to make sure the first word of each sentence is\n    /// capitalized.\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for paragraph in document.iter_paragraphs() {\n            // Allows short, label-like comments in code.\n            if paragraph.iter_sentences().count() == 1 {\n                let only_sentence = paragraph.iter_sentences().next().unwrap();\n\n                if !only_sentence\n                    .iter_chunks()\n                    .map(|c| c.iter_words().count())\n                    .any(|c| c > 5)\n                {\n                    continue;\n                }\n            }\n\n            for sentence in paragraph.iter_sentences() {\n                if !is_full_sentence(sentence) {\n                    continue;\n                }\n\n                if let Some(first_word) = sentence.first_non_whitespace() {\n                    if !first_word.kind.is_word() {\n                        continue;\n                    }\n\n                    let word_chars = document.get_span_content(&first_word.span);\n\n                    if let Some(first_char) = word_chars.first()\n                        && first_char.is_alphabetic()\n                        && !first_char.is_uppercase()\n                    {\n                        if let Some(canonical_spelling) =\n                            self.dictionary.get_correct_capitalization_of(word_chars)\n                        {\n                            // Skip if it's a proper noun or contains uppercase letters before a separator\n                            if first_word.kind.is_proper_noun() {\n                                continue;\n                            }\n\n                            // Check for uppercase letters in the rest of the word before any separators\n                            if canonical_spelling\n                                .iter()\n                                .skip(1)\n                                .take_while(|&c| !c.is_whitespace() && *c != '-' && *c != '\\'')\n                                .any(|&c| c.is_uppercase())\n                            {\n                                continue;\n                            }\n                        }\n\n                        let target_span = first_word.span;\n                        let mut replacement_chars =\n                            document.get_span_content(&target_span).to_vec();\n                        replacement_chars[0] = replacement_chars[0].to_ascii_uppercase();\n\n                        lints.push(Lint {\n                            span: target_span,\n                            lint_kind: LintKind::Capitalization,\n                            suggestions: vec![Suggestion::ReplaceWith(replacement_chars)],\n                            priority: 31,\n                            message: \"This sentence does not start with a capital letter\"\n                                .to_string(),\n                        });\n                    }\n                }\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &'static str {\n        \"The opening word of a sentence should almost always be capitalized.\"\n    }\n}\n\nfn is_full_sentence(toks: &[Token]) -> bool {\n    let mut has_nominal = false;\n    let mut has_verb = false;\n\n    for tok in toks {\n        if let TokenKind::Word(Some(metadata)) = &tok.kind {\n            if metadata.is_nominal() {\n                has_nominal = true;\n            }\n\n            if metadata.is_verb() {\n                has_verb = true;\n            }\n        }\n    }\n\n    has_nominal && has_verb\n}\n\n#[cfg(test)]\nmod tests {\n    use super::super::tests::assert_lint_count;\n    use super::SentenceCapitalization;\n    use crate::spell::FstDictionary;\n\n    #[test]\n    fn catches_basic() {\n        assert_lint_count(\n            \"there is no way she is not guilty.\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            1,\n        )\n    }\n\n    #[test]\n    fn no_period() {\n        assert_lint_count(\n            \"there is no way she is not guilty\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            1,\n        )\n    }\n\n    #[test]\n    fn two_sentence() {\n        assert_lint_count(\n            \"i have complete conviction in this. she is absolutely guilty\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            2,\n        )\n    }\n\n    #[test]\n    fn start_with_number() {\n        assert_lint_count(\n            \"53 is the length of the longest word.\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_unlintable() {\n        assert_lint_count(\n            \"[`misspelled_word`] is assumed to be quite small (n < 100). \",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            0,\n        )\n    }\n\n    #[test]\n    fn unfazed_unlintable() {\n        assert_lint_count(\n            \"the linter should not be affected by `this` unlintable.\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            1,\n        )\n    }\n\n    #[test]\n    fn unfazed_ellipsis() {\n        assert_lint_count(\n            \"the linter should not be affected by... that ellipsis.\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            1,\n        )\n    }\n\n    #[test]\n    fn unfazed_comma() {\n        assert_lint_count(\n            \"the linter should not be affected by, that comma.\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            1,\n        )\n    }\n\n    #[test]\n    fn issue_228_allows_labels() {\n        assert_lint_count(\n            \"python lsp (fork of pyright)\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            0,\n        )\n    }\n\n    #[test]\n    fn allow_camel_case_trademarks() {\n        // Some words are marked as proper nouns in `dictionary.dict` but are lower camel case.\n        assert_lint_count(\n            \"macOS 16 could be called something like Redwood or Shasta\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            0,\n        )\n    }\n\n    #[test]\n    #[ignore = \"This can't work because currently hyphens are not included in tokenized words\\nalthough they are now permitted in `dictionary.dict`\"]\n    fn uppercase_unamerican_at_start() {\n        assert_lint_count(\n            \"un-American starts with a lowercase letter and contains an uppercase letter, but is not a proper noun or trademark.\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            1,\n        )\n    }\n\n    #[test]\n    fn allow_lowercase_proper_nouns() {\n        // A very few words are marked as proper nouns even though they're all lowercase.\n        // https://css-tricks.com/start-sentence-npm/\n        assert_lint_count(\n            concat!(\n                \"npm is the world's largest software registry. Open source developers from every \",\n                \"continent use npm to share and borrow packages, and many organizations use npm to \",\n                \"manage private development as well.\"\n            ),\n            SentenceCapitalization::new(FstDictionary::curated()),\n            0,\n        )\n    }\n\n    #[test]\n    fn doesnt_flag_after_esp_issue_2753() {\n        assert_lint_count(\n            \"I'll go, esp. if it's a free event.\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            0,\n        );\n    }\n\n    #[test]\n    fn allow_lower_camel_case_non_proper_nouns() {\n        // A very few words are not considered proper nouns but still start with a lowercase letter that shouldn't be uppercased at the start of a sentence.\n        assert_lint_count(\n            \"mRNA is synthesized from the coding sequence of a gene during the transcriptional process.\",\n            SentenceCapitalization::new(FstDictionary::curated()),\n            0,\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/shoot_oneself_in_the_foot.rs",
    "content": "use crate::{\n    CharStringExt, Span, Token,\n    expr::{Expr, ReflexivePronoun, SequenceExpr},\n    linting::Suggestion,\n    patterns::WordSet,\n};\n\nuse super::{ExprLinter, Lint, LintKind};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ShootOneselfInTheFoot {\n    pattern: SequenceExpr,\n}\n\nimpl Default for ShootOneselfInTheFoot {\n    fn default() -> Self {\n        let verb_forms = WordSet::new(&[\"shoot\", \"shooting\", \"shoots\", \"shot\", \"shooted\"]);\n\n        let body_parts = WordSet::new(&[\"foot\", \"feet\", \"leg\", \"legs\"]);\n\n        let pattern = SequenceExpr::with(verb_forms)\n            .t_ws()\n            .then(ReflexivePronoun::default())\n            .t_ws()\n            .then_preposition()\n            .t_ws()\n            .then_determiner()\n            .t_ws()\n            .then(body_parts);\n        Self { pattern }\n    }\n}\n\nimpl ExprLinter for ShootOneselfInTheFoot {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.pattern\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let pron = &toks.get(2)?.span.get_content(src);\n        let prep = &toks.get(4)?.span.get_content(src);\n        let det = &toks.get(6)?.span.get_content(src);\n        let body_part = &toks.get(8)?.span.get_content(src);\n\n        let plural_pron = pron.ends_with_ignore_ascii_case_str(\"elves\");\n        let plural_foot = toks.get(8)?.kind.is_plural_noun();\n\n        let is_in = prep.eq_ignore_ascii_case_str(\"in\");\n        let is_the = det.eq_ignore_ascii_case_str(\"the\");\n        let is_foot = body_part.eq_ignore_ascii_case_str(\"foot\");\n\n        let foot_ok = is_foot || (plural_pron && plural_foot);\n\n        if is_in && is_the && foot_ok {\n            return None;\n        }\n\n        let in_the_foot = Span::new(toks.get(4)?.span.start, toks.get(8)?.span.end);\n\n        let mut suggestions = vec![Suggestion::replace_with_match_case_str(\n            \"in the foot\",\n            in_the_foot.get_content(src),\n        )];\n\n        if plural_pron {\n            suggestions.push(Suggestion::replace_with_match_case_str(\n                \"in the feet\",\n                in_the_foot.get_content(src),\n            ));\n        }\n\n        Some(Lint {\n            span: in_the_foot,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions,\n            message: \"The standard idiom is 'shoot oneself in the foot'.\".to_string(),\n            priority: 50,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects nonstandard variants of 'shoot oneself in the foot'.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ShootOneselfInTheFoot;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn ignore_correct() {\n        assert_lint_count(\n            \"Don't shoot yourself in the foot.\",\n            ShootOneselfInTheFoot::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignore_title_case() {\n        assert_lint_count(\n            \"Don't Shoot Yourself In The Foot.\",\n            ShootOneselfInTheFoot::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignore_all_caps() {\n        assert_lint_count(\n            \"DON'T SHOOT YOURSELF IN THE FOOT.\",\n            ShootOneselfInTheFoot::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_shoot_leg() {\n        assert_suggestion_result(\n            \"I managed to shoot myself in the leg when using CF Workers deployment\",\n            ShootOneselfInTheFoot::default(),\n            \"I managed to shoot myself in the foot when using CF Workers deployment\",\n        );\n    }\n\n    #[test]\n    fn fix_shoot_into_foot() {\n        assert_suggestion_result(\n            \"Or should we keep them to prevent users from shooting themselves into the foot?\",\n            ShootOneselfInTheFoot::default(),\n            \"Or should we keep them to prevent users from shooting themselves in the foot?\",\n        );\n    }\n\n    #[test]\n    fn fix_shoot_into_feet() {\n        assert_suggestion_result(\n            \"(to prevent you from shooting yourself into the feet)\",\n            ShootOneselfInTheFoot::default(),\n            \"(to prevent you from shooting yourself in the foot)\",\n        );\n    }\n\n    #[test]\n    fn ignore_themselves_foot() {\n        assert_lint_count(\n            \"Thou shalt not make a rule that prevents C++ programmers from shooting themselves in the foot.\",\n            ShootOneselfInTheFoot::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignore_ourselves_feet() {\n        assert_lint_count(\n            \"It will help avoiding shooting ourselves in the feet.\",\n            ShootOneselfInTheFoot::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_a_foot() {\n        assert_suggestion_result(\n            \"Shot ourselves in a foot, \\\"Wrong X-Request-Key\\\" error #589.\",\n            ShootOneselfInTheFoot::default(),\n            \"Shot ourselves in the foot, \\\"Wrong X-Request-Key\\\" error #589.\",\n        );\n    }\n\n    #[test]\n    fn ignore_shoots_himself() {\n        assert_suggestion_result(\n            \"the administrator shoots himself in the foot and then hops around\",\n            ShootOneselfInTheFoot::default(),\n            \"the administrator shoots himself in the foot and then hops around\",\n        );\n    }\n\n    #[test]\n    fn ignore_shooting_oneself_in_the_foot() {\n        assert_lint_count(\n            \"A historical document of shooting oneself in the foot, if you will.\",\n            ShootOneselfInTheFoot::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_oneself_in_a_foot() {\n        assert_suggestion_result(\n            \"Forgetting to declare some variable local withing a function definition is a common way to shoot oneself in a foot\",\n            ShootOneselfInTheFoot::default(),\n            \"Forgetting to declare some variable local withing a function definition is a common way to shoot oneself in the foot\",\n        );\n    }\n\n    #[test]\n    fn fix_oneself_in_the_feet() {\n        assert_suggestion_result(\n            \"Forgetting to declare some variable local withing a function definition is a common way to shoot oneself in the feet\",\n            ShootOneselfInTheFoot::default(),\n            \"Forgetting to declare some variable local withing a function definition is a common way to shoot oneself in the foot\",\n        );\n    }\n\n    #[test]\n    fn fix_oneself_into_the_leg() {\n        assert_suggestion_result(\n            \"Forgetting to declare some variable local withing a function definition is a common way to shoot oneself into the foot\",\n            ShootOneselfInTheFoot::default(),\n            \"Forgetting to declare some variable local withing a function definition is a common way to shoot oneself in the foot\",\n        );\n    }\n\n    #[test]\n    fn ignore_oneself_in_the_toes() {\n        assert_lint_count(\n            \"Forgetting to declare some variable local withing a function definition is a common way to shoot oneself in the toes\",\n            ShootOneselfInTheFoot::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/simple_past_to_past_participle.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{All, Expr, FirstMatchOf, SequenceExpr},\n    irregular_verbs::IrregularVerbs,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::{InflectionOfBe, WordSet},\n};\n\n/// Corrects simple past tense verbs to past participle after auxiliary verbs like \"have\" or \"be\".\npub struct SimplePastToPastParticiple {\n    expr: All,\n}\n\nimpl Default for SimplePastToPastParticiple {\n    fn default() -> Self {\n        Self {\n            expr: All::new(vec![\n                // positive: the general case\n                Box::new(\n                    SequenceExpr::any_of(vec![\n                        // for perfect tenses\n                        Box::new(WordSet::new(&[\"have\", \"had\", \"has\", \"having\"])),\n                        // for passive voice\n                        Box::new(InflectionOfBe::default()),\n                        // pronoun + have contractions\n                        Box::new(WordSet::new(&[\n                            \"I've\", \"I'd\", \"we've\", \"we'd\", \"you've\", \"you'd\", \"he's\", \"he'd\",\n                            \"she's\", \"she'd\", \"it's\", \"it'd\", \"they've\", \"they'd\",\n                        ])),\n                        // pronoun + have contractions missing apostrophes\n                        Box::new(WordSet::new(&[\n                            \"Ive\", \"Id\", \"weve\", \"wed\", \"youve\", \"youd\", \"hes\", \"hed\", \"shes\",\n                            \"shed\", \"its\", \"itd\", \"theyve\", \"theyd\",\n                        ])),\n                    ])\n                    .t_ws()\n                    .then_verb_simple_past_form(),\n                ),\n                // negative: exceptions\n                Box::new(SequenceExpr::unless(FirstMatchOf::new(vec![\n                    Box::new(\n                        SequenceExpr::with(InflectionOfBe::default())\n                            .t_any()\n                            .t_aco(\"woke\"),\n                    ),\n                    Box::new(\n                        SequenceExpr::aco(\"id\")\n                            .t_any()\n                            .then_word_set(&[\"came\", \"did\", \"went\"]),\n                    ),\n                ]))),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for SimplePastToPastParticiple {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        if toks.len() != 3 || !toks[1].kind.is_whitespace() || !toks[2].kind.is_verb() {\n            return None;\n        }\n\n        let verb_tok = &toks[2];\n\n        let simple_past = verb_tok.span.get_content_string(src);\n\n        if let Some(past_participle) = IrregularVerbs::curated()\n            .get_past_participle_for_preterite(&simple_past)\n            .filter(|pp| pp != &simple_past)\n        {\n            let suggestions = vec![Suggestion::replace_with_match_case(\n                past_participle.chars().collect(),\n                verb_tok.span.get_content(src),\n            )];\n\n            let message = format!(\n                \"Use the past participle `{}` instead of `{}` when using compound tenses or passive voice.\",\n                past_participle, simple_past\n            );\n\n            Some(Lint {\n                span: verb_tok.span,\n                lint_kind: LintKind::Grammar,\n                suggestions,\n                message,\n                ..Default::default()\n            })\n        } else {\n            None\n        }\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects simple past tense verbs to past participle after auxiliary verbs like \\\"have\\\" or \\\"be\\\".\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::SimplePastToPastParticiple;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    // \"Be\" and \"have\"\n\n    #[test]\n    fn correct_have_went() {\n        assert_suggestion_result(\n            \"I have went into the btle.py file and added a print statement in _connect()\",\n            SimplePastToPastParticiple::default(),\n            \"I have gone into the btle.py file and added a print statement in _connect()\",\n        );\n    }\n\n    #[test]\n    fn correct_had_went() {\n        assert_suggestion_result(\n            \"Not sure if TroLoos had went from Tasmota->minimal->Tasmota, or directly Minimal->Tasmota, but going ESPHome->Minimal->Tasmota is not possible\",\n            SimplePastToPastParticiple::default(),\n            \"Not sure if TroLoos had gone from Tasmota->minimal->Tasmota, or directly Minimal->Tasmota, but going ESPHome->Minimal->Tasmota is not possible\",\n        );\n    }\n\n    #[test]\n    fn correct_having_went() {\n        assert_suggestion_result(\n            \"Having went through the setup guidelines and picking react starter, running npm run watch results in an error\",\n            SimplePastToPastParticiple::default(),\n            \"Having gone through the setup guidelines and picking react starter, running npm run watch results in an error\",\n        );\n    }\n\n    #[test]\n    fn correct_has_went() {\n        assert_suggestion_result(\n            \"I would like to report that the package request which you are loading has went into maintenance mode.\",\n            SimplePastToPastParticiple::default(),\n            \"I would like to report that the package request which you are loading has gone into maintenance mode.\",\n        );\n    }\n\n    #[test]\n    fn correct_have_wrote() {\n        assert_suggestion_result(\n            \"and while people have wrote partial ImGuiStyle save and ...\",\n            SimplePastToPastParticiple::default(),\n            \"and while people have written partial ImGuiStyle save and ...\",\n        );\n    }\n\n    #[test]\n    fn correct_has_came() {\n        assert_suggestion_result(\n            \"and mail has came to a work account\",\n            SimplePastToPastParticiple::default(),\n            \"and mail has come to a work account\",\n        );\n    }\n\n    #[test]\n    fn correct_have_took() {\n        assert_suggestion_result(\n            \"The Keychain took longer than I'd like it to have took, but it still works\",\n            SimplePastToPastParticiple::default(),\n            \"The Keychain took longer than I'd like it to have taken, but it still works\",\n        );\n    }\n\n    #[test]\n    fn correct_have_did() {\n        assert_suggestion_result(\n            \"so I have did like below: cd ~/.pub-cache/hosted/pub.dev/\",\n            SimplePastToPastParticiple::default(),\n            \"so I have done like below: cd ~/.pub-cache/hosted/pub.dev/\",\n        );\n    }\n\n    #[test]\n    fn correct_has_fell() {\n        assert_suggestion_result(\n            \"ScopedHistory instance has fell out of scope ...\",\n            SimplePastToPastParticiple::default(),\n            \"ScopedHistory instance has fallen out of scope ...\",\n        );\n    }\n\n    #[test]\n    fn correct_have_broke() {\n        assert_suggestion_result(\n            \"PlanningEnitity to see the hard constraints that it may have broke\",\n            SimplePastToPastParticiple::default(),\n            \"PlanningEnitity to see the hard constraints that it may have broken\",\n        );\n    }\n\n    #[test]\n    fn correct_had_began() {\n        assert_suggestion_result(\n            \"I had began learning Android App development since Aug 2021\",\n            SimplePastToPastParticiple::default(),\n            \"I had begun learning Android App development since Aug 2021\",\n        );\n    }\n\n    #[test]\n    fn correct_have_gave() {\n        assert_suggestion_result(\n            \"I'm not aware we have gave up SM75, why are you asking this?\",\n            SimplePastToPastParticiple::default(),\n            \"I'm not aware we have given up SM75, why are you asking this?\",\n        );\n    }\n\n    #[test]\n    fn correct_have_saw() {\n        assert_suggestion_result(\n            \"I have saw that your paper has been accepted by JAIR\",\n            SimplePastToPastParticiple::default(),\n            \"I have seen that your paper has been accepted by JAIR\",\n        );\n    }\n\n    #[test]\n    fn correct_have_spoke() {\n        assert_suggestion_result(\n            \"so i may have spoke in error\",\n            SimplePastToPastParticiple::default(),\n            \"so i may have spoken in error\",\n        );\n    }\n\n    #[test]\n    fn correct_has_became() {\n        assert_suggestion_result(\n            \"but it has became failed after v2.6.1\",\n            SimplePastToPastParticiple::default(),\n            \"but it has become failed after v2.6.1\",\n        );\n    }\n\n    #[test]\n    fn correct_have_knew() {\n        assert_suggestion_result(\n            \"Oh, I have knew this. You can decrypted it in \\\"Assetstudio\\\".\",\n            SimplePastToPastParticiple::default(),\n            \"Oh, I have known this. You can decrypted it in \\\"Assetstudio\\\".\",\n        );\n    }\n\n    #[test]\n    fn correct_have_drank() {\n        assert_suggestion_result(\n            \"User should be able to see approximately how much water they have drank today\",\n            SimplePastToPastParticiple::default(),\n            \"User should be able to see approximately how much water they have drunk today\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"'Woke' is also an adjective these days\"]\n    fn being_woke() {\n        assert_suggestion_result(\n            \"and the containers will not being woke up until I execute a \\\"docker ps\\\"\",\n            SimplePastToPastParticiple::default(),\n            \"and the containers will not being woken up until I execute a \\\"docker ps\\\"\",\n        );\n    }\n\n    #[test]\n    fn correct_has_flew() {\n        assert_suggestion_result(\n            \"Well time has flew and I was quite busy but I remember this conversation so I am sharing this with you.\",\n            SimplePastToPastParticiple::default(),\n            \"Well time has flown and I was quite busy but I remember this conversation so I am sharing this with you.\",\n        );\n    }\n\n    #[test]\n    fn correct_being_stole() {\n        assert_suggestion_result(\n            \"any requests to obtain the hostname will return the hostname of the container being stole\",\n            SimplePastToPastParticiple::default(),\n            \"any requests to obtain the hostname will return the hostname of the container being stolen\",\n        );\n    }\n\n    #[test]\n    fn correct_are_broke() {\n        assert_suggestion_result(\n            \"They all worked wonderfully under 3.4.2 and all are broke under 3.5.1.\",\n            SimplePastToPastParticiple::default(),\n            \"They all worked wonderfully under 3.4.2 and all are broken under 3.5.1.\",\n        );\n    }\n\n    #[test]\n    fn correct_were_gave() {\n        assert_suggestion_result(\n            \"Some devices were gave up during a storm recently, but some are still the same as before.\",\n            SimplePastToPastParticiple::default(),\n            \"Some devices were given up during a storm recently, but some are still the same as before.\",\n        );\n    }\n\n    #[test]\n    fn correct_be_saw() {\n        assert_suggestion_result(\n            \"Currently, it's 14560/14550 for default mavlink RX/TX, which can be saw in wfb-cli .\",\n            SimplePastToPastParticiple::default(),\n            \"Currently, it's 14560/14550 for default mavlink RX/TX, which can be seen in wfb-cli .\",\n        );\n    }\n\n    #[test]\n    fn correct_was_began() {\n        assert_suggestion_result(\n            \"The initial intent, when v1alpha3 was began, was that almost all usages of InitConfiguration outside of kubeadm init code, could be easily replaced\",\n            SimplePastToPastParticiple::default(),\n            \"The initial intent, when v1alpha3 was begun, was that almost all usages of InitConfiguration outside of kubeadm init code, could be easily replaced\",\n        );\n    }\n\n    #[test]\n    fn correct_was_gave() {\n        assert_suggestion_result(\n            \"you will find the config file path was gave by -c argument\",\n            SimplePastToPastParticiple::default(),\n            \"you will find the config file path was given by -c argument\",\n        );\n    }\n\n    #[test]\n    fn correct_be_began() {\n        assert_suggestion_result(\n            \"Ticket requires something from design before it can be began.\",\n            SimplePastToPastParticiple::default(),\n            \"Ticket requires something from design before it can be begun.\",\n        );\n    }\n\n    #[test]\n    fn correct_being_took() {\n        assert_suggestion_result(\n            \"Dunno, I saw some old threads about port not being took into account in asw-sdk library but seems fixed on aws side.\",\n            SimplePastToPastParticiple::default(),\n            \"Dunno, I saw some old threads about port not being taken into account in asw-sdk library but seems fixed on aws side.\",\n        );\n    }\n\n    #[test]\n    fn correct_are_took() {\n        assert_suggestion_result(\n            \"In the example provided, TP53 and LMNB1 genes are took as seeds.\",\n            SimplePastToPastParticiple::default(),\n            \"In the example provided, TP53 and LMNB1 genes are taken as seeds.\",\n        );\n    }\n\n    // Contractions\n\n    #[test]\n    fn correct_ive_went() {\n        assert_suggestion_result(\n            \"I've went through some tutorials and went back and forth with AI translating programs from one language to the other.\",\n            SimplePastToPastParticiple::default(),\n            \"I've gone through some tutorials and went back and forth with AI translating programs from one language to the other.\",\n        );\n    }\n\n    #[test]\n    fn correct_ive_went_no_apostrophe() {\n        assert_suggestion_result(\n            \"I've went thru all the steps to help fix this Virus issue and im locked up.\",\n            SimplePastToPastParticiple::default(),\n            \"I've gone thru all the steps to help fix this Virus issue and im locked up.\",\n        );\n    }\n\n    #[test]\n    fn correct_id_did() {\n        assert_suggestion_result(\n            \"I'd did a calibration after the FW update now.\",\n            SimplePastToPastParticiple::default(),\n            \"I'd done a calibration after the FW update now.\",\n        );\n    }\n\n    #[test]\n    fn correct_weve_went() {\n        assert_suggestion_result(\n            \"Thanks for the feedback, but the issue is no longer relevant since we've went with different approach.\",\n            SimplePastToPastParticiple::default(),\n            \"Thanks for the feedback, but the issue is no longer relevant since we've gone with different approach.\",\n        );\n    }\n\n    #[test]\n    fn correct_wed_chose() {\n        assert_suggestion_result(\n            \"whatever number we'd chose, only one tab will be allowed to run\",\n            SimplePastToPastParticiple::default(),\n            \"whatever number we'd chosen, only one tab will be allowed to run\",\n        );\n    }\n\n    #[test]\n    fn correct_youve_wrote() {\n        assert_suggestion_result(\n            \"I love this project, it's impressing how many refactoring you've wrote in a limited amount of time.\",\n            SimplePastToPastParticiple::default(),\n            \"I love this project, it's impressing how many refactoring you've written in a limited amount of time.\",\n        );\n    }\n\n    #[test]\n    fn correct_youve_ran_no_apostrophe() {\n        assert_suggestion_result(\n            \"after youve ran it, execute the file_mover.ps1 using powershell\",\n            SimplePastToPastParticiple::default(),\n            \"after youve run it, execute the file_mover.ps1 using powershell\",\n        );\n    }\n\n    #[test]\n    fn correct_youd_wrote() {\n        assert_suggestion_result(\n            \"When I saw you'd wrote a terminal emulator I had to try it and so far it's amazing.\",\n            SimplePastToPastParticiple::default(),\n            \"When I saw you'd written a terminal emulator I had to try it and so far it's amazing.\",\n        );\n    }\n\n    #[test]\n    fn correct_its_broke() {\n        assert_suggestion_result(\n            \"Not sure why it's broke for me but not for you.\",\n            SimplePastToPastParticiple::default(),\n            \"Not sure why it's broken for me but not for you.\",\n        );\n    }\n\n    #[test]\n    fn correct_its_broke_no_apostrophe() {\n        assert_suggestion_result(\n            \"Now its broke and won't do batch images (decoding error).\",\n            SimplePastToPastParticiple::default(),\n            \"Now its broken and won't do batch images (decoding error).\",\n        );\n    }\n\n    #[test]\n    fn correct_theyve_broke() {\n        assert_suggestion_result(\n            \"They've broke something again :D.\",\n            SimplePastToPastParticiple::default(),\n            \"They've broken something again :D.\",\n        );\n    }\n\n    #[test]\n    fn correct_theyd_forgot() {\n        assert_suggestion_result(\n            \"they found the process they'd forgot they were running\",\n            SimplePastToPastParticiple::default(),\n            \"they found the process they'd forgotten they were running\",\n        );\n    }\n\n    // Known exceptions\n\n    #[test]\n    fn dont_flag_being_woke() {\n        assert_no_lints(\n            \"Being woke to gender discrimination is difficult\",\n            SimplePastToPastParticiple::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_be_woke() {\n        assert_no_lints(\n            \"So You Want To Be Woke. The path to becoming woke is hard\",\n            SimplePastToPastParticiple::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_id_did() {\n        assert_no_lints(\n            \"Prop id did not match.\",\n            SimplePastToPastParticiple::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_id_came() {\n        assert_no_lints(\n            \"I'm a longtime user of UniFi and site ID came around after my account was established.\",\n            SimplePastToPastParticiple::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_id_went() {\n        assert_no_lints(\n            \"Could not determine debug ID went away after cleaning the dist/ before the build, so that's unrelated.\",\n            SimplePastToPastParticiple::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/since_duration.rs",
    "content": "use crate::expr::{DurationExpr, Expr, SequenceExpr};\nuse crate::{CharStringExt, Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\nconst AGO_VARIANTS: [&[char]; 3] = [&['a', 'g', 'o'], &['A', 'g', 'o'], &['A', 'G', 'O']];\nconst FOR_VARIANTS: [&[char]; 3] = [&['f', 'o', 'r'], &['F', 'o', 'r'], &['F', 'O', 'R']];\n\nfn match_case_string<'a>(template: &[char], variants: [&'a [char]; 3]) -> &'a [char] {\n    let c1 = template.first().copied().unwrap();\n    let c2 = template.get(1).copied().unwrap_or(' ');\n    if c1.is_uppercase() && c2.is_uppercase() {\n        variants[2]\n    } else if c1.is_uppercase() {\n        variants[1]\n    } else {\n        variants[0]\n    }\n}\n\npub struct SinceDuration {\n    expr: SequenceExpr,\n}\n\nimpl Default for SinceDuration {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::any_capitalization_of(\"since\")\n                .then_whitespace()\n                .then(DurationExpr)\n                .then_optional(\n                    SequenceExpr::default()\n                        .t_ws()\n                        .then_word_set(&[\"ago\", \"old\"]),\n                ),\n        }\n    }\n}\n\nimpl ExprLinter for SinceDuration {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let last = toks.last()?;\n        if last\n            .span\n            .get_content(src)\n            .eq_any_ignore_ascii_case_chars(&[&['a', 'g', 'o'], &['o', 'l', 'd']])\n        {\n            return None;\n        }\n\n        let since_duration_span = toks.span()?;\n\n        let mut since_point_in_time = since_duration_span.get_content(src).to_vec();\n        since_point_in_time.push(' ');\n        let unit_template = toks.last()?.span.get_content(src);\n        since_point_in_time.extend(\n            match_case_string(unit_template, AGO_VARIANTS)\n                .iter()\n                .copied(),\n        );\n        let ago_suggestion = Suggestion::ReplaceWith(since_point_in_time);\n\n        let duration = toks[1..].span()?.get_content(src);\n        let since_template = toks.first()?.span.get_content(src);\n        let mut for_duration = match_case_string(since_template, FOR_VARIANTS).to_vec();\n        for_duration.extend(duration);\n        let for_suggestion = Suggestion::ReplaceWith(for_duration);\n\n        Some(Lint {\n            span: since_duration_span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![for_suggestion, ago_suggestion],\n            message: \"For a duration, use 'for' instead of 'since'. Or for a point in time, add 'ago' at the end.\".to_string(),\n            priority: 50,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects the use of 'since' with a duration instead of a point in time.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::SinceDuration;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn catches_spelled() {\n        assert_lint_count(\n            \"I have been waiting since two hours.\",\n            SinceDuration::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn permits_spelled_with_ago() {\n        assert_no_lints(\n            \"I have been waiting since two hours ago.\",\n            SinceDuration::default(),\n        );\n    }\n\n    #[test]\n    fn catches_numerals() {\n        assert_lint_count(\n            \"I have been waiting since 2 hours.\",\n            SinceDuration::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn permits_numerals_with_ago() {\n        assert_no_lints(\n            \"I have been waiting since 2 hours ago.\",\n            SinceDuration::default(),\n        );\n    }\n\n    #[test]\n    fn correct_without_issues() {\n        assert_suggestion_result(\n            \"I'm running v2.2.1 on bare metal (no docker, vm) since two weeks without issues.\",\n            SinceDuration::default(),\n            \"I'm running v2.2.1 on bare metal (no docker, vm) for two weeks without issues.\",\n        );\n    }\n\n    #[test]\n    fn correct_anything_back() {\n        assert_suggestion_result(\n            \"I have not heard anything back since three months.\",\n            SinceDuration::default(),\n            \"I have not heard anything back for three months.\",\n        );\n    }\n\n    #[test]\n    fn correct_get_done() {\n        assert_suggestion_result(\n            \"I am trying to get this done since two days, someone please help.\",\n            SinceDuration::default(),\n            \"I am trying to get this done for two days, someone please help.\",\n        );\n    }\n\n    #[test]\n    fn correct_deprecated() {\n        assert_suggestion_result(\n            \"This project is now officially deprecated, since I worked with virtualabs on the next version of Mirage since three years now: an ecosystem of tools named WHAD.\",\n            SinceDuration::default(),\n            \"This project is now officially deprecated, since I worked with virtualabs on the next version of Mirage for three years now: an ecosystem of tools named WHAD.\",\n        );\n    }\n\n    #[test]\n    fn correct_same() {\n        assert_suggestion_result(\n            \"Same! Since two days.\",\n            SinceDuration::default(),\n            \"Same! For two days.\",\n        );\n    }\n\n    #[test]\n    fn correct_what_changed() {\n        assert_suggestion_result(\n            \"What changed since two weeks?\",\n            SinceDuration::default(),\n            \"What changed since two weeks ago?\",\n        );\n    }\n\n    #[test]\n    fn correct_with_period() {\n        assert_suggestion_result(\n            \"I have been waiting since two hours.\",\n            SinceDuration::default(),\n            \"I have been waiting since two hours ago.\",\n        );\n    }\n\n    #[test]\n    fn correct_with_exclamation() {\n        assert_suggestion_result(\n            \"I have been waiting since two hours!\",\n            SinceDuration::default(),\n            \"I have been waiting since two hours ago!\",\n        );\n    }\n\n    #[test]\n    fn correct_with_question_mark() {\n        assert_suggestion_result(\n            \"Have you been waiting since two hours?\",\n            SinceDuration::default(),\n            \"Have you been waiting for two hours?\",\n        );\n    }\n\n    #[test]\n    fn correct_with_comma() {\n        assert_suggestion_result(\n            \"Since two days, I have been trying to get this done.\",\n            SinceDuration::default(),\n            \"For two days, I have been trying to get this done.\",\n        );\n    }\n\n    #[test]\n    fn correct_for_title_case() {\n        assert_suggestion_result(\n            \"Since 45 Minutes I See The Following Picture In The Terminal.\",\n            SinceDuration::default(),\n            \"For 45 Minutes I See The Following Picture In The Terminal.\",\n        );\n    }\n\n    #[test]\n    fn correct_for_all_caps() {\n        assert_suggestion_result(\n            \"STOPPED SINCE 12 HOURS WITH EXIT CODE 0\",\n            SinceDuration::default(),\n            \"STOPPED FOR 12 HOURS WITH EXIT CODE 0\",\n        );\n    }\n\n    #[test]\n    fn correct_ago_title_case() {\n        assert_suggestion_result(\n            \"It Is In Development Since Two Years.\",\n            SinceDuration::default(),\n            \"It Is In Development Since Two Years Ago.\",\n        );\n    }\n\n    #[test]\n    fn correct_ago_all_caps() {\n        assert_suggestion_result(\n            \"BUG: SINCE 6 MONTHS UNLOAD CHECKPOINT\",\n            SinceDuration::default(),\n            \"BUG: SINCE 6 MONTHS AGO UNLOAD CHECKPOINT\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"We can't yet handle modifiers like 'over'. Plus it doesn't work with 'ago'.\"]\n    fn not_yet_handled() {\n        assert_suggestion_result(\n            \"It's an asked feature since over 9 years\",\n            SinceDuration::default(),\n            \"It's an asked feature for over 9 years.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"We can't yet handle modifiers like 'more than'. Plus it doesn't work with 'ago'.\"]\n    fn not_yet_handled_2() {\n        assert_suggestion_result(\n            \"It's an asked feature since more than 9 years\",\n            SinceDuration::default(),\n            \"It's an asked feature for more than 9 years.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"We can't yet handle indefinite numbers.\"]\n    fn not_yet_handled_3() {\n        assert_suggestion_result(\n            \"I use a Wacom Cintiq 27QHDT since several years on Linux\",\n            SinceDuration::default(),\n            \"I use a Wacom Cintiq 27QHDT for several years on Linux\",\n        );\n    }\n\n    #[test]\n    fn ignore_since_years_old() {\n        assert_no_lints(\n            \"I've been coding since 11 years old and I'm now 57\",\n            SinceDuration::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/single_be.rs",
    "content": "use crate::dict_word_metadata::VerbFormFlags;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Span, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::{DerivedFrom, InflectionOfBe},\n};\n\nfn be_forms(token: &Token) -> Option<VerbFormFlags> {\n    let metadata = token\n        .kind\n        .as_word()\n        .and_then(|metadata| metadata.as_ref())?;\n    let verb_data = metadata.verb.as_ref()?;\n\n    verb_data.verb_forms\n}\n\nfn is_past_flag(forms: VerbFormFlags) -> bool {\n    forms.intersects(VerbFormFlags::PAST | VerbFormFlags::PRETERITE)\n}\n\nfn looks_like_be_contraction(token: &Token, source: &[char]) -> bool {\n    let Some(_) = token.kind.as_word() else {\n        return false;\n    };\n\n    if token.kind.is_possessive_nominal() && token.kind.is_proper_noun() {\n        return false;\n    }\n\n    let content = token.span.get_content(source);\n    let Some(apostrophe_idx) = content.iter().rposition(|c| matches!(*c, '\\'' | '’')) else {\n        return false;\n    };\n    let base_slice = &content[..apostrophe_idx];\n    if token.kind.is_possessive_nominal() && token.kind.is_proper_noun() {\n        return false;\n    }\n    if base_slice\n        .first()\n        .is_some_and(|c| c.is_uppercase() && token.kind.is_nominal() && !token.kind.is_pronoun())\n    {\n        return false;\n    }\n    let base: Vec<char> = base_slice.iter().map(|c| c.to_ascii_lowercase()).collect();\n    if base == ['l', 'e', 't'] {\n        return false;\n    }\n    let suffix: Vec<char> = content[apostrophe_idx + 1..]\n        .iter()\n        .map(|c| c.to_ascii_lowercase())\n        .collect();\n\n    matches!(suffix.as_slice(), ['s'] | ['r', 'e'] | ['m']) && apostrophe_idx > 0\n}\n\npub struct SingleBe {\n    expr: SequenceExpr,\n}\n\nimpl Default for SingleBe {\n    fn default() -> Self {\n        fn be_like_expr() -> SequenceExpr {\n            SequenceExpr::any_of(vec![\n                Box::new(InflectionOfBe::new()),\n                Box::new(DerivedFrom::new_from_str(\"be\")),\n                Box::new(looks_like_be_contraction),\n            ])\n        }\n\n        let expr = SequenceExpr::with(be_like_expr())\n            .t_ws()\n            .then(be_like_expr());\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for SingleBe {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let first = matched_tokens.first()?;\n        let second = matched_tokens.last()?;\n\n        if first.kind.is_possessive_nominal() && first.kind.is_proper_noun() {\n            return None;\n        }\n        if first.kind.is_possessive_nominal()\n            && first\n                .span\n                .get_content(source)\n                .first()\n                .is_some_and(|c| c.is_uppercase())\n        {\n            return None;\n        }\n\n        let progressive_like = |tok: &Token| {\n            be_forms(tok).map_or_else(\n                || false,\n                |forms| {\n                    forms.intersects(VerbFormFlags::PROGRESSIVE | VerbFormFlags::PAST_PARTICIPLE)\n                },\n            )\n        };\n        if progressive_like(first) || progressive_like(second) {\n            return None;\n        }\n\n        let first_is_past = be_forms(first)\n            .map(is_past_flag)\n            .unwrap_or_else(|| first.kind.is_verb_past_form());\n        let second_is_past = be_forms(second)\n            .map(is_past_flag)\n            .unwrap_or_else(|| second.kind.is_verb_past_form());\n\n        let first_chars = first.span.get_content(source);\n        let base_before_apostrophe = first_chars\n            .iter()\n            .rposition(|c| matches!(*c, '\\'' | '’'))\n            .map(|idx| &first_chars[..idx]);\n\n        if let Some(base) = base_before_apostrophe {\n            let base_first_upper = base.first().is_some_and(|c| c.is_uppercase());\n            let base_lower: Vec<char> = base.iter().map(|c| c.to_ascii_lowercase()).collect();\n            let is_common_pronoun = matches!(\n                base_lower.as_slice(),\n                ['i']\n                    | ['w', 'e']\n                    | ['t', 'h', 'e', 'y']\n                    | ['y', 'o', 'u']\n                    | ['h', 'e']\n                    | ['s', 'h', 'e']\n                    | ['i', 't']\n                    | ['t', 'h', 'a', 't']\n                    | ['t', 'h', 'e', 'r', 'e']\n            );\n\n            if base_first_upper && !first.kind.is_pronoun() && !is_common_pronoun {\n                return None;\n            }\n        }\n\n        if first_is_past && second_is_past {\n            return None;\n        }\n\n        let whitespace_start = matched_tokens.get(1)?.span.start;\n        let second_be_end = second.span.end;\n\n        Some(Lint {\n            span: Span::new(whitespace_start, second_be_end),\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![Suggestion::Remove],\n            message: \"Drop the repeated verb form so only one instance of `be` remains.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Removes adjacent duplicate inflections of `be`, including contracted forms followed by another `be` verb.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    use super::SingleBe;\n\n    #[test]\n    fn removes_double_is() {\n        assert_suggestion_result(\n            \"The server is is slow.\",\n            SingleBe::default(),\n            \"The server is slow.\",\n        );\n    }\n\n    #[test]\n    fn removes_is_are() {\n        assert_suggestion_result(\n            \"This is are unusual.\",\n            SingleBe::default(),\n            \"This is unusual.\",\n        );\n    }\n\n    #[test]\n    fn removes_are_were_mismatch() {\n        assert_suggestion_result(\n            \"They are were excited.\",\n            SingleBe::default(),\n            \"They are excited.\",\n        );\n    }\n\n    #[test]\n    fn removes_mismatched_pair() {\n        assert_suggestion_result(\"That is was odd.\", SingleBe::default(), \"That is odd.\");\n    }\n\n    #[test]\n    fn handles_s_contraction() {\n        assert_suggestion_result(\n            \"The error's are gone.\",\n            SingleBe::default(),\n            \"The error's gone.\",\n        );\n    }\n\n    #[test]\n    fn handles_re_contraction() {\n        assert_suggestion_result(\n            \"We're are ready to ship.\",\n            SingleBe::default(),\n            \"We're ready to ship.\",\n        );\n    }\n\n    #[test]\n    fn handles_m_contraction() {\n        assert_suggestion_result(\"I'm am aware.\", SingleBe::default(), \"I'm aware.\");\n    }\n\n    #[test]\n    fn handles_future_repetition() {\n        assert_suggestion_result(\n            \"That will be be an issue.\",\n            SingleBe::default(),\n            \"That will be an issue.\",\n        );\n    }\n\n    #[test]\n    fn skips_being_chain() {\n        assert_no_lints(\"It's been being rebuilt for months.\", SingleBe::default());\n    }\n\n    #[test]\n    fn allows_simple_be_statement() {\n        assert_no_lints(\"Let's be honest.\", SingleBe::default());\n    }\n\n    #[test]\n    fn allows_possessive_before_are() {\n        assert_no_lints(\n            \"Stories like Mateo's are the heart of what we do.\",\n            SingleBe::default(),\n        );\n    }\n\n    #[test]\n    fn removes_across_newline() {\n        assert_suggestion_result(\n            \"That is\\nis tricky.\",\n            SingleBe::default(),\n            \"That is tricky.\",\n        );\n    }\n\n    #[test]\n    fn ignores_separated_forms() {\n        assert_no_lints(\"The server is not is down.\", SingleBe::default());\n    }\n\n    #[test]\n    fn ignores_single_be() {\n        assert_no_lints(\"This is ready.\", SingleBe::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/some_without_article.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct SomeWithoutArticle {\n    expr: SequenceExpr,\n}\n\nimpl Default for SomeWithoutArticle {\n    fn default() -> Self {\n        let expr = SequenceExpr::any_capitalization_of(\"the\")\n            .t_ws()\n            .then_any_capitalization_of(\"some\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for SomeWithoutArticle {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let template = span.get_content(source);\n        let some_chars = matched_tokens.last()?.span.get_content(source);\n\n        let suggestions = vec![\n            Suggestion::ReplaceWith(some_chars.to_vec()),\n            Suggestion::replace_with_match_case(\"the same\".chars().collect(), template),\n        ];\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            message:\n                \"Use `some` on its own here, or switch to `the same` if that was the intention.\"\n                    .to_owned(),\n            suggestions,\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects the redundant article in front of `some` and suggests more natural phrasing.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::SomeWithoutArticle;\n\n    #[test]\n    fn fixes_simple_lowercase() {\n        assert_suggestion_result(\n            \"We interviewed the some candidates today.\",\n            SomeWithoutArticle::default(),\n            \"We interviewed some candidates today.\",\n        );\n    }\n\n    #[test]\n    fn fixes_sentence_case() {\n        assert_suggestion_result(\n            \"The Some volunteers arrived early.\",\n            SomeWithoutArticle::default(),\n            \"Some volunteers arrived early.\",\n        );\n    }\n\n    #[test]\n    fn preserves_uppercase_block() {\n        assert_suggestion_result(\n            \"THE SOME OPTIONS WERE LISTED.\",\n            SomeWithoutArticle::default(),\n            \"SOME OPTIONS WERE LISTED.\",\n        );\n    }\n\n    #[test]\n    fn second_suggestion_produces_the_same() {\n        assert_suggestion_result(\n            \"We kept the some approach from last year.\",\n            SomeWithoutArticle::default(),\n            \"We kept the same approach from last year.\",\n        );\n    }\n\n    #[test]\n    fn ignores_already_correct_some() {\n        assert_lint_count(\n            \"We interviewed some candidates today.\",\n            SomeWithoutArticle::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_the_same() {\n        assert_lint_count(\n            \"We kept the same approach from last year.\",\n            SomeWithoutArticle::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_the_something() {\n        assert_lint_count(\n            \"We interviewed the something else entirely.\",\n            SomeWithoutArticle::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn works_before_comma() {\n        assert_suggestion_result(\n            \"They reviewed the some, then finalized the list.\",\n            SomeWithoutArticle::default(),\n            \"They reviewed some, then finalized the list.\",\n        );\n    }\n\n    #[test]\n    fn works_before_possessive_noun() {\n        assert_suggestion_result(\n            \"The report praised the some team's effort.\",\n            SomeWithoutArticle::default(),\n            \"The report praised some team's effort.\",\n        );\n    }\n\n    #[test]\n    fn handles_line_break_spacing() {\n        assert_suggestion_result(\n            \"We invited the some\\nartists to perform.\",\n            SomeWithoutArticle::default(),\n            \"We invited some\\nartists to perform.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/something_is.rs",
    "content": "use crate::expr::{Expr, SequenceExpr};\nuse crate::patterns::WordSet;\nuse crate::{Token, TokenKind};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct SomethingIs {\n    expr: SequenceExpr,\n}\n\nimpl Default for SomethingIs {\n    fn default() -> Self {\n        let forms = WordSet::new(&[\"somethings\", \"anythings\", \"everythings\", \"nothings\"]);\n\n        let expr = SequenceExpr::with(forms)\n            .t_ws()\n            .then_optional(SequenceExpr::default().then_one_or_more_adverbs().t_ws())\n            .then_kind_any(&[TokenKind::is_verb_progressive_form]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for SomethingIs {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offender = matched_tokens.first()?;\n        let original = offender.span.get_content(source);\n        let stem_len = original.len().checked_sub(1)?;\n        let stem = original[..stem_len].to_vec();\n\n        let mut contraction = stem.clone();\n        contraction.extend(['\\'', 's']);\n\n        let mut expanded = stem;\n        expanded.push(' ');\n        expanded.extend(['i', 's']);\n\n        Some(Lint {\n            span: offender.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![\n                Suggestion::replace_with_match_case(contraction, original),\n                Suggestion::replace_with_match_case(expanded, original),\n            ],\n            message: \"Prefer the contraction or full `is` rather than pluralizing this pronoun.\"\n                .into(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Flags forms like `somethings` before progressive verbs and suggests using `something's` or `something is`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::SomethingIs;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fixes_somethings_going() {\n        assert_suggestion_result(\n            \"Somethings going well today.\",\n            SomethingIs::default(),\n            \"Something's going well today.\",\n        );\n    }\n\n    #[test]\n    fn fixes_anythings_happening() {\n        assert_suggestion_result(\n            \"Anythings happening tonight?\",\n            SomethingIs::default(),\n            \"Anything's happening tonight?\",\n        );\n    }\n\n    #[test]\n    fn fixes_everythings_working() {\n        assert_suggestion_result(\n            \"Everythings working smoothly.\",\n            SomethingIs::default(),\n            \"Everything's working smoothly.\",\n        );\n    }\n\n    #[test]\n    fn fixes_nothings_changing() {\n        assert_suggestion_result(\n            \"Nothings changing around here.\",\n            SomethingIs::default(),\n            \"Nothing's changing around here.\",\n        );\n    }\n\n    #[test]\n    fn fixes_with_adverb() {\n        assert_suggestion_result(\n            \"Somethings really happening now.\",\n            SomethingIs::default(),\n            \"Something's really happening now.\",\n        );\n    }\n\n    #[test]\n    fn fixes_uppercase() {\n        assert_suggestion_result(\n            \"SOMETHINGS HAPPENING NOW!\",\n            SomethingIs::default(),\n            \"SOMETHING'S HAPPENING NOW!\",\n        );\n    }\n\n    #[test]\n    fn offers_is_expansion() {\n        assert_suggestion_result(\n            \"Somethings going wrong.\",\n            SomethingIs::default(),\n            \"Something is going wrong.\",\n        );\n    }\n\n    #[test]\n    fn no_lint_when_contracted() {\n        assert_no_lints(\"Something's going well today.\", SomethingIs::default());\n    }\n\n    #[test]\n    fn no_lint_when_plural_noun() {\n        assert_lint_count(\n            \"Somethings in the attic kept us awake.\",\n            SomethingIs::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_lint_at_sentence_end() {\n        assert_no_lints(\"Somethings.\", SomethingIs::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/somewhat_something.rs",
    "content": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct SomewhatSomething {\n    expr: SequenceExpr,\n}\n\nimpl Default for SomewhatSomething {\n    fn default() -> Self {\n        let pattern = SequenceExpr::aco(\"somewhat\")\n            .then_whitespace()\n            .t_aco(\"of\")\n            .then_whitespace()\n            .t_aco(\"a\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for SomewhatSomething {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.first()?.span;\n        let og = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Style,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\"something\", og)],\n            message: \"Consider using `something of a` in more formal writing.\".to_owned(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags the phrase `somewhat of a` in favor of `something of a`, which can be considered more traditional.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::SomewhatSomething;\n\n    #[test]\n    fn issue_414() {\n        assert_suggestion_result(\n            \"This may be somewhat of a surprise.\",\n            SomewhatSomething::default(),\n            \"This may be something of a surprise.\",\n        );\n    }\n\n    #[test]\n    fn flag_these() {\n        assert_suggestion_result(\n            \"These are somewhat of a cult data structure.\",\n            SomewhatSomething::default(),\n            \"These are something of a cult data structure.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/soon_to_be.rs",
    "content": "use std::ops::Range;\n\nuse crate::{\n    Token, TokenKind, TokenStringExt,\n    expr::{Expr, ExprMap, SequenceExpr},\n    linting::expr_linter::Chunk,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::NominalPhrase,\n};\n\npub struct SoonToBe {\n    expr: ExprMap<Range<usize>>,\n}\n\nimpl Default for SoonToBe {\n    fn default() -> Self {\n        let mut map = ExprMap::default();\n\n        let soon_to_be = || {\n            SequenceExpr::default()\n                .t_aco(\"soon\")\n                .t_ws()\n                .t_aco(\"to\")\n                .t_ws()\n                .t_aco(\"be\")\n        };\n\n        let nominal_tail = || {\n            SequenceExpr::optional(SequenceExpr::default().then_one_or_more_adverbs().t_ws())\n                .then(NominalPhrase)\n        };\n\n        let hyphenated_number_modifier = || {\n            SequenceExpr::default()\n                .then_number()\n                .then_hyphen()\n                .then_nominal()\n                .then_optional(SequenceExpr::default().then_hyphen().then_adjective())\n                .t_ws()\n                .then_nominal()\n        };\n\n        let hyphenated_compound = || {\n            SequenceExpr::default()\n                .then_kind_any(&[TokenKind::is_word_like as fn(&TokenKind) -> bool])\n                .then_hyphen()\n                .then_nominal()\n        };\n\n        let trailing_phrase = || {\n            SequenceExpr::any_of(vec![\n                Box::new(hyphenated_number_modifier()),\n                Box::new(hyphenated_compound()),\n                Box::new(nominal_tail()),\n            ])\n        };\n\n        map.insert(\n            SequenceExpr::default()\n                .then_determiner()\n                .t_ws()\n                .then_seq(soon_to_be())\n                .t_ws()\n                .then_seq(trailing_phrase()),\n            2usize..7usize,\n        );\n\n        map.insert(\n            SequenceExpr::default()\n                .then_seq(soon_to_be())\n                .t_ws()\n                .then_seq(trailing_phrase()),\n            0usize..5usize,\n        );\n\n        Self { expr: map }\n    }\n}\n\nimpl ExprLinter for SoonToBe {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let range = self.expr.lookup(0, matched_tokens, source)?;\n        let span = matched_tokens.get(range.start..range.end)?.span()?;\n        let template = span.get_content(source);\n\n        let mut nominal_found = false;\n        for tok in matched_tokens.iter().skip(range.end) {\n            if tok.kind.is_whitespace() || tok.kind.is_hyphen() {\n                continue;\n            }\n\n            if tok.kind.is_punctuation() {\n                break;\n            }\n\n            if tok.kind.is_nominal() {\n                if tok.kind.is_preposition() {\n                    continue;\n                } else {\n                    nominal_found = true;\n                    break;\n                }\n            }\n        }\n\n        if !nominal_found {\n            return None;\n        }\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"soon-to-be\",\n                template,\n            )],\n            message: \"Use hyphens when `soon to be` modifies a noun.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Hyphenates `soon-to-be` when it appears before a noun.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::SoonToBe;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn hyphenates_possessive_phrase() {\n        assert_suggestion_result(\n            \"We met his soon to be boss at lunch.\",\n            SoonToBe::default(),\n            \"We met his soon-to-be boss at lunch.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_article_phrase() {\n        assert_suggestion_result(\n            \"They toasted the soon to be couple.\",\n            SoonToBe::default(),\n            \"They toasted the soon-to-be couple.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_sentence_start() {\n        assert_suggestion_result(\n            \"Soon to be parents filled the classroom.\",\n            SoonToBe::default(),\n            \"Soon-to-be parents filled the classroom.\",\n        );\n    }\n\n    #[test]\n    fn allows_existing_hyphens() {\n        assert_no_lints(\"We met his soon-to-be boss yesterday.\", SoonToBe::default());\n    }\n\n    #[test]\n    fn keeps_non_adjectival_use() {\n        assert_no_lints(\"The concert is soon to be over.\", SoonToBe::default());\n    }\n\n    #[test]\n    fn hyphenates_with_adverb() {\n        assert_suggestion_result(\n            \"Our soon to be newly married friends visited.\",\n            SoonToBe::default(),\n            \"Our soon-to-be newly married friends visited.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_hyphenated_number_phrase() {\n        assert_suggestion_result(\n            \"Our soon to be 5-year-old son starts school.\",\n            SoonToBe::default(),\n            \"Our soon-to-be 5-year-old son starts school.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_in_law_phrase() {\n        assert_suggestion_result(\n            \"She thanked her soon to be in-laws for hosting.\",\n            SoonToBe::default(),\n            \"She thanked her soon-to-be in-laws for hosting.\",\n        );\n    }\n\n    #[test]\n    fn hyphenates_future_event() {\n        assert_suggestion_result(\n            \"We reserved space for our soon to be celebration.\",\n            SoonToBe::default(),\n            \"We reserved space for our soon-to-be celebration.\",\n        );\n    }\n\n    #[test]\n    fn ignores_misaligned_verb_chain() {\n        assert_lint_count(\n            \"They will soon to be moving overseas.\",\n            SoonToBe::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn hyphenates_guest_example() {\n        assert_suggestion_result(\n            \"I cooked for my soon to be guests.\",\n            SoonToBe::default(),\n            \"I cooked for my soon-to-be guests.\",\n        );\n    }\n\n    #[test]\n    fn ignores_rearranged_phrase() {\n        assert_no_lints(\"We hope to soon be home.\", SoonToBe::default());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/sought_after.rs",
    "content": "use crate::expr::{Expr, SequenceExpr};\nuse crate::{Token, TokenKind};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct SoughtAfter {\n    expr: SequenceExpr,\n}\n\nimpl Default for SoughtAfter {\n    fn default() -> Self {\n        let pattern = SequenceExpr::any_of(vec![\n            Box::new(\n                SequenceExpr::default()\n                    .then_kind_except(TokenKind::is_adverb, &[\"always\", \"maybe\", \"not\", \"perhaps\"]),\n            ),\n            Box::new(SequenceExpr::word_set(&[\n                \"abit\", // Typo for \"a bit\"\n                \"are\",  // may cause false positive, but few found so far.\n                \"bit\",\n                // \"is\" causes many false postivies and disambiguating looks tricky.\n                // \"maybe\" causes many false postivies and disambiguating looks tricky.\n                \"of\", \"quiet\", // Common typo for \"quite\".\n            ])),\n        ])\n        .t_ws()\n        .t_aco(\"sort\")\n        .t_ws_h()\n        .t_aco(\"after\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for SoughtAfter {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let span = toks[2].span;\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Eggcorn,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"sought\",\n                span.get_content(src),\n            )],\n            message: \"The correct word in this context is `sought`.\".to_owned(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Correct `sort after` to `sought after`\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    use super::SoughtAfter;\n\n    #[test]\n    fn fix_abit_sort_after() {\n        assert_suggestion_result(\n            \"Blue mountain buffalo no damage abit sort after,$120 ono.\",\n            SoughtAfter::default(),\n            \"Blue mountain buffalo no damage abit sought after,$120 ono.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_always_sort_after() {\n        assert_lint_count(\n            \"Always sort after converting your set into list objects\",\n            SoughtAfter::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_are_sort_after() {\n        assert_suggestion_result(\n            \"Ux engineers are sort after, but it requires experience.\",\n            SoughtAfter::default(),\n            \"Ux engineers are sought after, but it requires experience.\",\n        )\n    }\n\n    #[test]\n    fn fix_are_sort_after_hyphenated() {\n        assert_suggestion_result(\n            \"optimistic people are sort-after for their life\",\n            SoughtAfter::default(),\n            \"optimistic people are sought-after for their life\",\n        );\n    }\n\n    #[test]\n    fn fix_bit_sort_after() {\n        assert_suggestion_result(\n            \"It's the early enduro model getting a bit sort after now\",\n            SoughtAfter::default(),\n            \"It's the early enduro model getting a bit sought after now\",\n        );\n    }\n\n    #[test]\n    fn fix_extremely_sort_after() {\n        assert_suggestion_result(\n            \"3 extremely sort after Pokémon trading cards.\",\n            SoughtAfter::default(),\n            \"3 extremely sought after Pokémon trading cards.\",\n        );\n    }\n\n    #[test]\n    fn fix_fairly_sort_after() {\n        assert_suggestion_result(\n            \"The ability for editors to add tables to pages is a fairly sort after piece of functionality\",\n            SoughtAfter::default(),\n            \"The ability for editors to add tables to pages is a fairly sought after piece of functionality\",\n        );\n    }\n\n    #[test]\n    fn fix_highly_sort_after() {\n        assert_suggestion_result(\n            \"Wrestlemania 2K adds three highly sort after features\",\n            SoughtAfter::default(),\n            \"Wrestlemania 2K adds three highly sought after features\",\n        );\n    }\n\n    #[test]\n    fn fix_hugely_sort_after() {\n        assert_suggestion_result(\n            \"Currently the hugely sort after and most highly prized variety is the electric neon blue Paraiba Tourmaline.\",\n            SoughtAfter::default(),\n            \"Currently the hugely sought after and most highly prized variety is the electric neon blue Paraiba Tourmaline.\",\n        );\n    }\n\n    #[test]\n    fn fix_incredibly_sort_after() {\n        assert_suggestion_result(\n            \"This is no surprise as it's been an incredibly sort after and top choice amongst outdoorists from all walks of life.\",\n            SoughtAfter::default(),\n            \"This is no surprise as it's been an incredibly sought after and top choice amongst outdoorists from all walks of life.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"'Is' is a bit more subtle to handle correctly\"]\n    fn fix_is_sort_after() {\n        assert_suggestion_result(\n            \"White bait is sort after by many fisherman because they  are a delicacy.\",\n            SoughtAfter::default(),\n            \"White bait is sought after by many fisherman because they  are a delicacy.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_is_sort_after() {\n        assert_lint_count(\n            \"What I would do is sort after the union or join.\",\n            SoughtAfter::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_kinda_sort_after() {\n        assert_suggestion_result(\n            \"If so is the US bond still kinda sort after as it's tied to USD (that's how I took OPs post).\",\n            SoughtAfter::default(),\n            \"If so is the US bond still kinda sought after as it's tied to USD (that's how I took OPs post).\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_maybe_sort_after() {\n        assert_lint_count(\n            \"Or maybe sort after adding the index?\",\n            SoughtAfter::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_most_sort_after() {\n        assert_suggestion_result(\n            \"This has got to be one of the most sort after solutions.\",\n            SoughtAfter::default(),\n            \"This has got to be one of the most sought after solutions.\",\n        );\n    }\n\n    #[test]\n    fn fix_mostly_sort_after() {\n        assert_suggestion_result(\n            \"What color and size is mostly sort after In ladies footwear\",\n            SoughtAfter::default(),\n            \"What color and size is mostly sought after In ladies footwear\",\n        );\n    }\n\n    #[test]\n    fn fix_much_sort_after() {\n        assert_suggestion_result(\n            \"Sending audio files is a much sort after feature in chat apps.\",\n            SoughtAfter::default(),\n            \"Sending audio files is a much sought after feature in chat apps.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_not_sort_after() {\n        assert_lint_count(\n            \"My issue is that it does not sort after the startyear\",\n            SoughtAfter::default(),\n            0,\n        );\n    }\n\n    // This part is occasionally sort after and if they were easily available I reckon you'd sell a few easily enough.\n    #[test]\n    fn fix_occasionally_sort_after() {\n        assert_suggestion_result(\n            \"This part is occasionally sort after and if they were easily available I reckon you'd sell a few easily enough.\",\n            SoughtAfter::default(),\n            \"This part is occasionally sought after and if they were easily available I reckon you'd sell a few easily enough.\",\n        );\n    }\n\n    #[test]\n    fn fix_of_sort_after() {\n        assert_suggestion_result(\n            \"A couple of sort after casserole pots .\",\n            SoughtAfter::default(),\n            \"A couple of sought after casserole pots .\",\n        );\n    }\n\n    #[test]\n    fn fix_often_sort_after() {\n        assert_suggestion_result(\n            \"North American countries (ok, there are only two) often sort after the total amount of medals.\",\n            SoughtAfter::default(),\n            \"North American countries (ok, there are only two) often sought after the total amount of medals.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"'Perhaps' is a bit more subtle to handle correctly\"]\n    fn fix_perhaps_sort_after() {\n        assert_suggestion_result(\n            \"Perhaps sort after guitar teachers could do a similar teaching tour to a few major cities\",\n            SoughtAfter::default(),\n            \"Perhaps sought after guitar teachers could do a similar teaching tour to a few major cities\",\n        );\n    }\n\n    #[test]\n    fn dont_flat_perhaps_sort_after() {\n        assert_lint_count(\n            \"min_Vround: perhaps sort after min_breadth.\",\n            SoughtAfter::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn flag_pretty_sort_after() {\n        assert_suggestion_result(\n            \"But just like jin and V, he is also pretty sort after\",\n            SoughtAfter::default(),\n            \"But just like jin and V, he is also pretty sought after\",\n        );\n    }\n\n    #[test]\n    fn fix_quiet_sort_after_sic() {\n        assert_suggestion_result(\n            \"MBA in Christ (deemed university) is quiet sort after in South India\",\n            SoughtAfter::default(),\n            \"MBA in Christ (deemed university) is quiet sought after in South India\",\n        );\n    }\n\n    // The university that i studied my MBBS from offers the course as well and it is quite sort after for the above said course.\n    #[test]\n    fn fix_quite_sort_after() {\n        assert_suggestion_result(\n            \"The university that i studied my MBBS from offers the course as well and it is quite sort after for the above said course.\",\n            SoughtAfter::default(),\n            \"The university that i studied my MBBS from offers the course as well and it is quite sought after for the above said course.\",\n        );\n    }\n\n    #[test]\n    fn fix_rather_sort_after() {\n        assert_suggestion_result(\n            \"In a bid to satisfy an innate inquisitive hunger for a rather sort after phenomenon that only a few could precisely speak\",\n            SoughtAfter::default(),\n            \"In a bid to satisfy an innate inquisitive hunger for a rather sought after phenomenon that only a few could precisely speak\",\n        );\n    }\n\n    #[test]\n    fn fix_really_sort_after() {\n        assert_suggestion_result(\n            \"Creators - especially women in their 30s, 40s, 50s and 60s are really sort after.\",\n            SoughtAfter::default(),\n            \"Creators - especially women in their 30s, 40s, 50s and 60s are really sought after.\",\n        );\n    }\n\n    #[test]\n    fn fix_sometimes_sort_after() {\n        assert_suggestion_result(\n            \"the N15 1.6L gearbox is sometimes sort after for the micra\",\n            SoughtAfter::default(),\n            \"the N15 1.6L gearbox is sometimes sought after for the micra\",\n        );\n    }\n\n    #[test]\n    fn fix_somewhat_sort_after() {\n        assert_suggestion_result(\n            \"I know tri res boots used to be somewhat sort after, but not sure now!\",\n            SoughtAfter::default(),\n            \"I know tri res boots used to be somewhat sought after, but not sure now!\",\n        );\n    }\n\n    #[test]\n    fn fix_strongly_sort_after() {\n        assert_suggestion_result(\n            \"This eventually leads to the growth that is so strongly sort after.\",\n            SoughtAfter::default(),\n            \"This eventually leads to the growth that is so strongly sought after.\",\n        );\n    }\n\n    #[test]\n    fn fix_vastly_sort_after() {\n        assert_suggestion_result(\n            \"Hardie stuff no longer vastly sort after as it was years ago , hasn't been for decades.\",\n            SoughtAfter::default(),\n            \"Hardie stuff no longer vastly sought after as it was years ago , hasn't been for decades.\",\n        );\n    }\n\n    #[test]\n    fn fix_very_sort_after() {\n        assert_suggestion_result(\n            \"I could imagine, this functionality very sort after.\",\n            SoughtAfter::default(),\n            \"I could imagine, this functionality very sought after.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/spaces.rs",
    "content": "use super::{Lint, LintKind, Linter, Suggestion};\nuse crate::TokenStringExt;\nuse crate::{Document, Token, TokenKind};\n\n#[derive(Debug, Default)]\npub struct Spaces;\n\nimpl Linter for Spaces {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut output = Vec::new();\n\n        for sentence in document.iter_sentences() {\n            for space_idx in sentence.iter_space_indices() {\n                if space_idx == 0 {\n                    continue;\n                }\n\n                let space = &sentence[space_idx];\n\n                let TokenKind::Space(count) = space.kind else {\n                    panic!(\"The space iterator should only return spaces.\")\n                };\n\n                if count > 1 {\n                    output.push(Lint {\n                        span: space.span,\n                        lint_kind: LintKind::Formatting,\n                        suggestions: vec![Suggestion::ReplaceWith(vec![' '])],\n                        message: format!(\n                            \"There are {count} spaces where there should be only one.\"\n                        ),\n                        priority: 15,\n                    })\n                }\n            }\n\n            if matches!(\n                sentence,\n                [\n                    ..,\n                    Token {\n                        kind: TokenKind::Word(_),\n                        ..\n                    },\n                    Token {\n                        kind: TokenKind::Space(_),\n                        ..\n                    },\n                    Token {\n                        kind: TokenKind::Punctuation(_),\n                        ..\n                    }\n                ]\n            ) && let Some(space) = sentence.get_rel(-2)\n            {\n                output.push(Lint {\n                    span: space.span,\n                    lint_kind: LintKind::Formatting,\n                    suggestions: vec![Suggestion::Remove],\n                    message: \"Unnecessary space at the end of the sentence.\".to_string(),\n                    priority: 63,\n                })\n            }\n        }\n\n        output\n    }\n\n    fn description(&self) -> &'static str {\n        \"Words should be separated by at most one space.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Spaces;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints};\n\n    #[test]\n    fn detects_space_before_period() {\n        let source = \"There is a space at the end of this sentence .\";\n\n        assert_lint_count(source, Spaces, 1)\n    }\n\n    #[test]\n    fn allows_period_without_space() {\n        let source = \"There isn't a space at the end of this sentence.\";\n\n        assert_lint_count(source, Spaces, 0)\n    }\n\n    #[test]\n    fn ignores_french_spacing() {\n        assert_no_lints(\n            \"This is a short sentence.  This is another short sentence.\",\n            Spaces,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/spell_check.rs",
    "content": "use std::num::NonZero;\n\nuse lru::LruCache;\nuse smallvec::ToSmallVec;\n\nuse super::Suggestion;\nuse super::{Lint, LintKind, Linter};\nuse crate::document::Document;\nuse crate::spell::{Dictionary, suggest_correct_spelling};\nuse crate::{CharString, CharStringExt, Dialect, TokenStringExt};\n\npub struct SpellCheck<T>\nwhere\n    T: Dictionary,\n{\n    dictionary: T,\n    suggestion_cache: LruCache<CharString, Vec<CharString>>,\n    dialect: Dialect,\n}\n\nimpl<T: Dictionary> SpellCheck<T> {\n    pub fn new(dictionary: T, dialect: Dialect) -> Self {\n        Self {\n            dictionary,\n            suggestion_cache: LruCache::new(NonZero::new(10000).unwrap()),\n            dialect,\n        }\n    }\n\n    const MAX_SUGGESTIONS: usize = 3;\n\n    fn suggest_correct_spelling(&mut self, word: &[char]) -> Vec<CharString> {\n        if let Some(hit) = self.suggestion_cache.get(word) {\n            hit.clone()\n        } else {\n            let suggestions = self.uncached_suggest_correct_spelling(word);\n            self.suggestion_cache.put(word.into(), suggestions.clone());\n            suggestions\n        }\n    }\n    fn uncached_suggest_correct_spelling(&self, word: &[char]) -> Vec<CharString> {\n        // Back off until we find a match.\n        for dist in 2..5 {\n            let suggestions: Vec<CharString> =\n                suggest_correct_spelling(word, 200, dist, &self.dictionary)\n                    .into_iter()\n                    .filter(|v| {\n                        // Ignore entries outside the configured dialect\n                        self.dictionary\n                            .get_word_metadata(v)\n                            .unwrap()\n                            .dialects\n                            .is_dialect_enabled(self.dialect)\n                    })\n                    .map(|v| v.to_smallvec())\n                    .take(Self::MAX_SUGGESTIONS)\n                    .collect();\n\n            if !suggestions.is_empty() {\n                return suggestions;\n            }\n        }\n\n        // no suggestions found\n        Vec::new()\n    }\n}\n\nimpl<T: Dictionary> Linter for SpellCheck<T> {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for word in document.iter_words() {\n            let word_chars = document.get_span_content(&word.span);\n\n            if let Some(metadata) = word.kind.as_word().unwrap()\n                && metadata.dialects.is_dialect_enabled(self.dialect)\n                && (self.dictionary.contains_exact_word(word_chars)\n                    || self.dictionary.contains_exact_word(&word_chars.to_lower()))\n            {\n                continue;\n            };\n\n            let mut possibilities = self.suggest_correct_spelling(word_chars);\n\n            // If the misspelled word is capitalized, capitalize the results too.\n            if let Some(mis_f) = word_chars.first()\n                && mis_f.is_uppercase()\n            {\n                for sug_f in possibilities.iter_mut().filter_map(|w| {\n                    // Skip words that have uppercase chars in any position except the first.\n                    // (For words with specific capitalization, like 'macOS')\n                    w.iter()\n                        .skip(1)\n                        .all(|c| !c.is_uppercase())\n                        .then_some(w.first_mut())\n                        .flatten()\n                }) {\n                    *sug_f = sug_f.to_uppercase().next().unwrap();\n                }\n            }\n\n            let suggestions: Vec<_> = possibilities\n                .iter()\n                .map(|sug| Suggestion::ReplaceWith(sug.to_vec()))\n                .collect();\n\n            // If there's only one suggestion, save the user a step in the GUI\n            let message = if suggestions.len() == 1 {\n                format!(\n                    \"Did you mean `{}`?\",\n                    possibilities.first().unwrap().iter().collect::<String>()\n                )\n            } else {\n                format!(\n                    \"Did you mean to spell `{}` this way?\",\n                    document.get_span_content_str(&word.span)\n                )\n            };\n\n            lints.push(Lint {\n                span: word.span,\n                lint_kind: LintKind::Spelling,\n                suggestions,\n                message,\n                priority: 63,\n            })\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &'static str {\n        \"Looks and provides corrections for misspelled words.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use strum::IntoEnumIterator;\n\n    use super::SpellCheck;\n    use crate::dict_word_metadata::DialectFlags;\n    use crate::linting::Linter;\n    use crate::linting::tests::{assert_good_and_bad_suggestions, assert_no_lints};\n    use crate::spell::{Dictionary, FstDictionary, MergedDictionary, MutableDictionary};\n    use crate::{\n        Dialect,\n        linting::tests::{assert_lint_count, assert_suggestion_result},\n    };\n    use crate::{DictWordMetadata, Document};\n\n    // Capitalization tests\n\n    #[test]\n    fn america_capitalized() {\n        assert_suggestion_result(\n            \"The word america should be capitalized.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"The word America should be capitalized.\",\n        );\n    }\n\n    // Dialect tests\n\n    #[test]\n    fn harper_automattic_capitalized() {\n        assert_lint_count(\n            \"So should harper and automattic.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            2,\n        );\n    }\n\n    #[test]\n    fn american_color_in_british_dialect() {\n        assert_lint_count(\n            \"Do you like the color?\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            1,\n        );\n    }\n\n    #[test]\n    fn canadian_words_in_australian_dialect() {\n        assert_lint_count(\n            \"Does your mom like yogourt?\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Australian),\n            2,\n        );\n    }\n\n    #[test]\n    fn australian_words_in_canadian_dialect() {\n        assert_lint_count(\n            \"We mine bauxite to make aluminium.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Canadian),\n            1,\n        );\n    }\n\n    #[test]\n    fn mum_and_mummy_not_just_commonwealth() {\n        assert_lint_count(\n            \"Mum's the word about that Egyptian mummy.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            0,\n        );\n    }\n\n    #[test]\n    fn australian_verandah() {\n        assert_lint_count(\n            \"Our house has a verandah.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Australian),\n            0,\n        );\n    }\n\n    #[test]\n    fn australian_verandah_in_american_dialect() {\n        assert_lint_count(\n            \"Our house has a verandah.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            1,\n        );\n    }\n\n    #[test]\n    fn australian_verandah_in_british_dialect() {\n        assert_lint_count(\n            \"Our house has a verandah.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            1,\n        );\n    }\n\n    #[test]\n    fn australian_verandah_in_canadian_dialect() {\n        assert_lint_count(\n            \"Our house has a verandah.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Canadian),\n            1,\n        );\n    }\n\n    #[test]\n    fn mixing_australian_and_canadian_dialects() {\n        assert_lint_count(\n            \"In summer we sit on the verandah and eat yogourt.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Australian),\n            1,\n        );\n    }\n\n    #[test]\n    fn mixing_canadian_and_australian_dialects() {\n        assert_lint_count(\n            \"In summer we sit on the verandah and eat yogourt.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Canadian),\n            1,\n        );\n    }\n\n    #[test]\n    fn australian_and_canadian_spellings_that_are_not_american() {\n        assert_lint_count(\n            \"In summer we sit on the verandah and eat yogourt.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            2,\n        );\n    }\n\n    #[test]\n    fn australian_and_canadian_spellings_that_are_not_british() {\n        assert_lint_count(\n            \"In summer we sit on the verandah and eat yogourt.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            2,\n        );\n    }\n\n    #[test]\n    fn australian_labour_vs_labor() {\n        assert_lint_count(\n            \"In Australia we write 'labour' but the political party is the 'Labor Party'.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Australian),\n            0,\n        )\n    }\n\n    #[test]\n    fn australian_words_flagged_for_american_english() {\n        assert_lint_count(\n            \"There's an esky full of beers in the back of the ute.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            2,\n        );\n    }\n\n    #[test]\n    fn american_words_not_flagged_for_australian_english() {\n        assert_lint_count(\n            \"In general, utes have unibody construction while pickups have frames.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Australian),\n            0,\n        );\n    }\n\n    #[test]\n    fn abandonware_correction() {\n        assert_suggestion_result(\n            \"abanonedware\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Australian),\n            \"abandonware\",\n        );\n    }\n\n    // Unit tests for specific spellcheck corrections\n\n    #[test]\n    fn corrects_abandonedware_1131_1166() {\n        // assert_suggestion_result(\n        assert_suggestion_result(\n            \"Abandonedware is abandoned. Do not bother submitting issues about the empty page bug. Author moved to greener pastures\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"Abandonware is abandoned. Do not bother submitting issues about the empty page bug. Author moved to greener pastures\",\n        );\n    }\n\n    #[test]\n    fn afterwards_not_us() {\n        assert_lint_count(\n            \"afterwards\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            1,\n        );\n    }\n\n    #[test]\n    fn afterward_is_us() {\n        assert_lint_count(\n            \"afterward\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            0,\n        );\n    }\n\n    #[test]\n    fn afterward_not_au() {\n        assert_lint_count(\n            \"afterward\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Australian),\n            1,\n        );\n    }\n\n    #[test]\n    fn afterwards_is_au() {\n        assert_lint_count(\n            \"afterwards\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Australian),\n            0,\n        );\n    }\n\n    #[test]\n    fn afterward_not_ca() {\n        assert_lint_count(\n            \"afterward\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Canadian),\n            1,\n        );\n    }\n\n    #[test]\n    fn afterwards_is_ca() {\n        assert_lint_count(\n            \"afterwards\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Canadian),\n            0,\n        );\n    }\n\n    #[test]\n    fn afterward_not_uk() {\n        assert_lint_count(\n            \"afterward\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            1,\n        );\n    }\n\n    #[test]\n    fn afterwards_is_uk() {\n        assert_lint_count(\n            \"afterwards\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            0,\n        );\n    }\n\n    #[test]\n    fn corrects_hes() {\n        assert_suggestion_result(\n            \"hes\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"he's\",\n        );\n    }\n\n    #[test]\n    fn corrects_shes() {\n        assert_suggestion_result(\n            \"shes\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"she's\",\n        );\n    }\n\n    #[test]\n    fn issue_1876() {\n        let user_dialect = Dialect::American;\n\n        // Create a user dictionary with a word normally of another dialect in it.\n        let mut user_dict = MutableDictionary::new();\n        user_dict.append_word_str(\n            \"Calibre\",\n            DictWordMetadata {\n                dialects: DialectFlags::from_dialect(user_dialect),\n                ..Default::default()\n            },\n        );\n\n        // Create a merged dictionary, using curated first.\n        let mut merged_dict = MergedDictionary::new();\n        merged_dict.add_dictionary(FstDictionary::curated());\n        merged_dict.add_dictionary(std::sync::Arc::from(user_dict));\n        assert!(merged_dict.contains_word_str(\"Calibre\"));\n\n        // No dialect issues should be found if the word from another dialect is in our user dictionary.\n        assert_eq!(\n            SpellCheck::new(merged_dict.clone(), user_dialect)\n                .lint(&Document::new_markdown_default(\n                    \"I like to use the software Calibre.\",\n                    &merged_dict\n                ))\n                .len(),\n            0,\n            \"Calibre is not part of the user's dialect!\"\n        );\n\n        assert_eq!(\n            SpellCheck::new(merged_dict.clone(), user_dialect)\n                .lint(&Document::new_markdown_default(\n                    \"I like to use the spelling colour.\",\n                    &merged_dict\n                ))\n                .len(),\n            1\n        );\n    }\n\n    #[test]\n    fn matt_is_allowed() {\n        for dialect in Dialect::iter() {\n            dbg!(dialect);\n            assert_no_lints(\n                \"Matt is a great name.\",\n                SpellCheck::new(FstDictionary::curated(), dialect),\n            );\n        }\n    }\n\n    #[test]\n    fn issue_2026() {\n        assert_suggestion_result(\n            \"'Tere' is supposed to be 'There'\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"'There' is supposed to be 'There'\",\n        );\n\n        assert_suggestion_result(\n            \"'fll' is supposed to be 'fill'\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"'fill' is supposed to be 'fill'\",\n        );\n    }\n    #[test]\n    fn issue_2261() {\n        assert_suggestion_result(\n            \"Generaly\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"Generally\",\n        );\n    }\n\n    #[test]\n    fn flag_prepone_in_non_indian_english() {\n        assert_lint_count(\n            \"We had to prepone the meeting\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            1,\n        );\n    }\n\n    #[test]\n    fn dont_flag_prepone_in_indian_english() {\n        assert_no_lints(\n            \"We had to prepone the meeting\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::Indian),\n        );\n    }\n\n    #[test]\n    fn dont_flag_pr() {\n        assert_no_lints(\n            \"PR\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n        );\n    }\n\n    #[test]\n    fn no_improper_suggestion_for_macos() {\n        assert_good_and_bad_suggestions(\n            \"MacOS\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            &[\"macOS\"],\n            &[\"MacOS\"],\n        );\n    }\n\n    // Tests that were previously in `spell/mod.rs`\n\n    // Tests for dialect-specific misspelling patterns\n\n    // is_ou_misspelling\n    #[test]\n    fn suggest_color_for_colour_lowercase() {\n        assert_suggestion_result(\n            \"colour\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"color\",\n        );\n    }\n\n    #[test]\n    fn suggest_colour_for_color_lowercase() {\n        assert_suggestion_result(\n            \"color\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"colour\",\n        );\n    }\n\n    // titlecase\n    #[test]\n    fn suggest_color_for_colour_titlecase() {\n        assert_suggestion_result(\n            \"Colour\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"Color\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_colour_for_color_titlecase() {\n        assert_suggestion_result(\n            \"Color\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"Colour\",\n        );\n    }\n\n    // all-caps\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_color_for_colour_all_caps() {\n        assert_suggestion_result(\n            \"COLOUR\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"COLOR\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_colour_for_color_all_caps() {\n        assert_suggestion_result(\n            \"COLOR\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"COLOUR\",\n        );\n    }\n\n    // is_cksz_misspelling\n\n    // s/z as in realise/realize\n    #[test]\n    #[ignore = \"both spellings are acceptable in UK, AU, and IN despite popular opinion\"]\n    fn suggest_realise_for_realize() {\n        assert_suggestion_result(\n            \"realize\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"realise\",\n        );\n    }\n\n    #[test]\n    fn suggest_realize_for_realise() {\n        assert_suggestion_result(\n            \"realise\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"realize\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"both spellings are acceptable in UK, AU, and IN despite popular opinion\"]\n    fn suggest_realise_for_realize_titlecase() {\n        assert_suggestion_result(\n            \"Realize\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"Realise\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_realize_for_realise_titlecase() {\n        assert_suggestion_result(\n            \"Realise\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"Realize\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_realise_for_realize_all_caps() {\n        assert_suggestion_result(\n            \"REALIZE\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"REALISE\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_realize_for_realise_all_caps() {\n        assert_suggestion_result(\n            \"REALISE\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"REALIZE\",\n        );\n    }\n\n    // s/c as in defense/defence\n    #[test]\n    fn suggest_defence_for_defense() {\n        assert_suggestion_result(\n            \"defense\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"defence\",\n        );\n    }\n\n    #[test]\n    fn suggest_defense_for_defence() {\n        assert_suggestion_result(\n            \"defence\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"defense\",\n        );\n    }\n\n    #[test]\n    fn suggest_defense_for_defence_titlecase() {\n        assert_suggestion_result(\n            \"Defense\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"Defence\",\n        );\n    }\n\n    #[test]\n    fn suggest_defence_for_defense_titlecase() {\n        assert_suggestion_result(\n            \"Defence\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"Defense\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_defense_for_defence_all_caps() {\n        assert_suggestion_result(\n            \"DEFENSE\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"DEFENCE\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_defence_for_defense_all_caps() {\n        assert_suggestion_result(\n            \"DEFENCE\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"DEFENSE\",\n        );\n    }\n\n    // k/c as in skeptic/sceptic\n    #[test]\n    fn suggest_sceptic_for_skeptic() {\n        assert_suggestion_result(\n            \"skeptic\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"sceptic\",\n        );\n    }\n\n    #[test]\n    fn suggest_skeptic_for_sceptic() {\n        assert_suggestion_result(\n            \"sceptic\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"skeptic\",\n        );\n    }\n\n    #[test]\n    fn suggest_sceptic_for_skeptic_titlecase() {\n        assert_suggestion_result(\n            \"Skeptic\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"Sceptic\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_skeptic_for_sceptic_titlecase() {\n        assert_suggestion_result(\n            \"Sceptic\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"Skeptic\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_skeptic_for_sceptic_all_caps() {\n        assert_suggestion_result(\n            \"SKEPTIC\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"SCEPTIC\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_sceptic_for_skeptic_all_caps() {\n        assert_suggestion_result(\n            \"SCEPTIC\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"SKEPTIC\",\n        );\n    }\n\n    // is_er_misspelling\n    // as in meter/metre\n    #[test]\n    fn suggest_centimeter_for_centimetre() {\n        assert_suggestion_result(\n            \"centimetre\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"centimeter\",\n        );\n    }\n\n    #[test]\n    fn suggest_centimetre_for_centimeter() {\n        assert_suggestion_result(\n            \"centimeter\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"centimetre\",\n        );\n    }\n\n    #[test]\n    fn suggest_centimeter_for_centimetre_titlecase() {\n        assert_suggestion_result(\n            \"Centimetre\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"Centimeter\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_centimetre_for_centimeter_titlecase() {\n        assert_suggestion_result(\n            \"Centimeter\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"Centimetre\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_centimeter_for_centimetre_all_caps() {\n        assert_suggestion_result(\n            \"CENTIMETRE\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"CENTIMETER\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_centimetre_for_centimeter_all_caps() {\n        assert_suggestion_result(\n            \"CENTIMETER\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"CENTIMETRE\",\n        );\n    }\n\n    // is_ll_misspelling\n    // as in traveller/traveler\n    #[test]\n    fn suggest_traveler_for_traveller() {\n        assert_suggestion_result(\n            \"traveller\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"traveler\",\n        );\n    }\n\n    #[test]\n    fn suggest_traveller_for_traveler() {\n        assert_suggestion_result(\n            \"traveler\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"traveller\",\n        );\n    }\n\n    #[test]\n    fn suggest_traveler_for_traveller_titlecase() {\n        assert_suggestion_result(\n            \"Traveller\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"Traveler\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_traveller_for_traveler_titlecase() {\n        assert_suggestion_result(\n            \"Traveler\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"Traveller\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_traveler_for_traveller_all_caps() {\n        assert_suggestion_result(\n            \"TRAVELLER\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"TRAVELER\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_traveller_for_traveler_all_caps() {\n        assert_suggestion_result(\n            \"TRAVELER\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"TRAVELLER\",\n        );\n    }\n\n    // is_ay_ey_misspelling\n    // as in gray/grey\n\n    #[test]\n    fn suggest_grey_for_gray_in_non_american() {\n        assert_suggestion_result(\n            \"I've got a gray cat.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"I've got a grey cat.\",\n        );\n    }\n\n    #[test]\n    fn suggest_gray_for_grey_in_american() {\n        assert_suggestion_result(\n            \"It's a greyscale photo.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"It's a grayscale photo.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_grey_for_gray_in_non_american_titlecase() {\n        assert_suggestion_result(\n            \"I've Got a Gray Cat.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"I've Got a Grey Cat.\",\n        );\n    }\n\n    #[test]\n    fn suggest_gray_for_grey_in_american_titlecase() {\n        assert_suggestion_result(\n            \"It's a Greyscale Photo.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"It's a Grayscale Photo.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_grey_for_gray_in_non_american_all_caps() {\n        assert_suggestion_result(\n            \"GRAY\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"GREY\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn suggest_gray_for_grey_in_american_all_caps() {\n        assert_suggestion_result(\n            \"GREY\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::American),\n            \"GRAY\",\n        );\n    }\n\n    // Tests for non-dialectal misspelling patterns\n\n    // is_ei_ie_misspelling\n    #[test]\n    fn fix_cheif_and_recieved() {\n        assert_suggestion_result(\n            \"The cheif recieved a letter.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"The chief received a letter.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn fix_cheif_and_recieved_titlecase() {\n        assert_suggestion_result(\n            \"The Cheif Recieved a Letter.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"The Chief Received a Letter.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"known failure due to bug\"]\n    fn fix_cheif_and_recieved_all_caps() {\n        assert_suggestion_result(\n            \"THE CHEIF RECIEVED A LETTER.\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"THE CHEIF RECEIVED A LETTER.\",\n        );\n    }\n\n    #[test]\n    fn fix_vs_apostrophe() {\n        assert_suggestion_result(\n            \"v's\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"vs\",\n        );\n    }\n\n    #[test]\n    fn fix_vs_typographical_apostrophe() {\n        assert_suggestion_result(\n            \"v’s\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"vs\",\n        );\n    }\n\n    #[test]\n    fn fix_childrens_missing_apostrophe() {\n        assert_suggestion_result(\n            \"childrens\",\n            SpellCheck::new(FstDictionary::curated(), Dialect::British),\n            \"children's\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/spelled_numbers.rs",
    "content": "use crate::linting::{LintKind, Linter, Suggestion};\nuse crate::{Document, Lint, Number, TokenStringExt};\n\n/// Linter that checks to make sure small integers (< 10) are spelled\n/// out.\n#[derive(Default, Clone, Copy)]\npub struct SpelledNumbers;\n\nimpl Linter for SpelledNumbers {\n    fn lint(&mut self, document: &Document) -> Vec<crate::Lint> {\n        let mut lints = Vec::new();\n\n        for number_tok in document.iter_numbers() {\n            let Number {\n                value,\n                suffix: None,\n                ..\n            } = number_tok.kind.as_number().unwrap()\n            else {\n                continue;\n            };\n            let value: f64 = (*value).into();\n\n            if (value - value.floor()).abs() < f64::EPSILON && value < 10. {\n                lints.push(Lint {\n                    span: number_tok.span,\n                    lint_kind: LintKind::Readability,\n                    suggestions: vec![Suggestion::ReplaceWith(\n                        spell_out_number(value as u64).unwrap().chars().collect(),\n                    )],\n                    message: \"Try to spell out numbers less than ten.\".to_string(),\n                    priority: 63,\n                })\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &'static str {\n        \"Most style guides recommend that you spell out numbers less than ten.\"\n    }\n}\n\n/// Converts a number to its spelled-out variant.\n///\n/// For example: 100 -> one hundred.\n///\n/// Works for numbers up to 999, but can be expanded to include more powers of 10.\nfn spell_out_number(num: u64) -> Option<String> {\n    if num > 999 {\n        return None;\n    }\n\n    Some(match num {\n        0 => \"zero\".to_string(),\n        1 => \"one\".to_string(),\n        2 => \"two\".to_string(),\n        3 => \"three\".to_string(),\n        4 => \"four\".to_string(),\n        5 => \"five\".to_string(),\n        6 => \"six\".to_string(),\n        7 => \"seven\".to_string(),\n        8 => \"eight\".to_string(),\n        9 => \"nine\".to_string(),\n        10 => \"ten\".to_string(),\n        11 => \"eleven\".to_string(),\n        12 => \"twelve\".to_string(),\n        13 => \"thirteen\".to_string(),\n        14 => \"fourteen\".to_string(),\n        15 => \"fifteen\".to_string(),\n        16 => \"sixteen\".to_string(),\n        17 => \"seventeen\".to_string(),\n        18 => \"eighteen\".to_string(),\n        19 => \"nineteen\".to_string(),\n        20 => \"twenty\".to_string(),\n        30 => \"thirty\".to_string(),\n        40 => \"forty\".to_string(),\n        50 => \"fifty\".to_string(),\n        60 => \"sixty\".to_string(),\n        70 => \"seventy\".to_string(),\n        80 => \"eighty\".to_string(),\n        90 => \"ninety\".to_string(),\n        hundred if hundred % 100 == 0 => {\n            format!(\"{} hundred\", spell_out_number(hundred / 100).unwrap())\n        }\n        _ => {\n            let n = 10u64.pow((num as f32).log10() as u32);\n            let parent = (num / n) * n; // truncate\n            let child = num % n;\n\n            format!(\n                \"{}{}{}\",\n                spell_out_number(parent).unwrap(),\n                if num <= 99 { '-' } else { ' ' },\n                spell_out_number(child).unwrap()\n            )\n        }\n    })\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::{SpelledNumbers, spell_out_number};\n\n    #[test]\n    fn produces_zero() {\n        assert_eq!(spell_out_number(0), Some(\"zero\".to_string()))\n    }\n\n    #[test]\n    fn produces_eighty_two() {\n        assert_eq!(spell_out_number(82), Some(\"eighty-two\".to_string()))\n    }\n\n    #[test]\n    fn produces_nine_hundred_ninety_nine() {\n        assert_eq!(\n            spell_out_number(999),\n            Some(\"nine hundred ninety-nine\".to_string())\n        )\n    }\n\n    #[test]\n    fn corrects_nine() {\n        assert_suggestion_result(\"There are 9 pigs.\", SpelledNumbers, \"There are nine pigs.\");\n    }\n\n    #[test]\n    fn does_not_correct_ten() {\n        assert_suggestion_result(\"There are 10 pigs.\", SpelledNumbers, \"There are 10 pigs.\");\n    }\n\n    /// Check that the algorithm won't stack overflow or return `None` for any numbers within the specified range.\n    #[test]\n    fn services_range() {\n        for i in 0..1000 {\n            spell_out_number(i).unwrap();\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/split_words.rs",
    "content": "use std::sync::Arc;\n\nuse hashbrown::HashSet;\n\nuse crate::expr::Expr;\nuse crate::linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk};\nuse crate::spell::{Dictionary, FstDictionary, TrieDictionary};\nuse crate::{Lint, Token};\n\npub struct SplitWords {\n    dict: Arc<TrieDictionary<Arc<FstDictionary>>>,\n    expr: Box<dyn Expr>,\n}\n\nimpl SplitWords {\n    pub fn new() -> Self {\n        Self {\n            dict: TrieDictionary::curated(),\n            expr: Box::new(|tok: &Token, _: &[char]| tok.kind.is_word()),\n        }\n    }\n}\n\nimpl Default for SplitWords {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl ExprLinter for SplitWords {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Finds missing spaces in improper compound words.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let word = &matched_tokens[0];\n\n        // If it's a recognized word, we don't care about it.\n        if word.kind.as_word().unwrap().is_some() {\n            return None;\n        }\n\n        let chars = &word.span.get_content(source);\n\n        // Get all possible prefix candidates from trie and extract valid split positions\n        let candidates = self.dict.find_words_with_common_prefix(chars);\n        let len = chars.len();\n        let mut valid_positions: HashSet<usize> = HashSet::new();\n\n        for candidate in candidates {\n            if candidate.len() >= len {\n                continue;\n            }\n            valid_positions.insert(candidate.len());\n        }\n\n        // Generate middle-outward position order based on heuristic from PR #885:\n        // Missing spaces are more likely near the middle of a word\n        let mid = len / 2;\n        let mut positions: Vec<usize> = Vec::new();\n        positions.push(mid);\n\n        for offset in 1..len {\n            if mid >= offset {\n                positions.push(mid - offset);\n            }\n            if mid + offset < len {\n                positions.push(mid + offset);\n            }\n        }\n\n        let mut suggestions = Vec::new();\n        let mut message: Option<String> = None;\n\n        // Check positions in middle-outward order\n        for split_pos in positions {\n            if split_pos == 0 || split_pos >= len || !valid_positions.contains(&split_pos) {\n                continue;\n            }\n\n            let candidate = &chars[..split_pos];\n            let remainder = &chars[split_pos..];\n\n            // Both parts must be valid common words\n            if let Some(cand_meta) = self.dict.get_word_metadata(candidate) {\n                if !cand_meta.common {\n                    continue;\n                }\n            } else {\n                continue;\n            }\n\n            if let Some(rem_meta) = self.dict.get_word_metadata(remainder) {\n                if !rem_meta.common {\n                    continue;\n                }\n            } else {\n                continue;\n            }\n\n            // Valid split found\n            let mut suggestion = Vec::new();\n            suggestion.extend(candidate.iter());\n            suggestion.push(' ');\n            suggestion.extend(remainder.iter());\n\n            suggestions.push(Suggestion::ReplaceWith(suggestion));\n            if suggestions.len() == 1 {\n                message = Some(format!(\n                    \"`{}` should probably be written as `{} {}`.\",\n                    chars.iter().collect::<String>(),\n                    candidate.iter().collect::<String>(),\n                    remainder.iter().collect::<String>()\n                ));\n            }\n        }\n\n        if !suggestions.is_empty() {\n            let original_word: String = chars.iter().collect();\n\n            if suggestions.len() != 1 {\n                message = Some(format!(\n                    \"`{original_word}` has a missing space between words.\"\n                ));\n            }\n\n            return Some(Lint {\n                span: word.span,\n                lint_kind: LintKind::Typo,\n                suggestions,\n                message: message?,\n                priority: 31,\n            });\n        }\n\n        None\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{\n        assert_good_and_bad_suggestions, assert_no_lints, assert_suggestion_result,\n    };\n\n    use super::SplitWords;\n\n    #[test]\n    fn issue_1905() {\n        assert_suggestion_result(\n            \"I want to try this insteadof that.\",\n            SplitWords::default(),\n            \"I want to try this instead of that.\",\n        );\n    }\n\n    /// Same as above, but with the longer component word at the end.\n    #[test]\n    fn issue_1905_rev() {\n        assert_suggestion_result(\n            \"I want to try thisinstead of that.\",\n            SplitWords::default(),\n            \"I want to try this instead of that.\",\n        );\n    }\n\n    #[test]\n    fn split_common() {\n        assert_suggestion_result(\n            \"This is notnot a problem.\",\n            SplitWords::default(),\n            \"This is not not a problem.\",\n        );\n    }\n\n    #[test]\n    fn splits_multiple_compound_words() {\n        assert_suggestion_result(\n            \"We stared intothe darkness and kindof panicked about sortof everything.\",\n            SplitWords::default(),\n            \"We stared into the darkness and kind of panicked about sort of everything.\",\n        );\n    }\n\n    #[test]\n    fn splits_word_with_longer_prefix() {\n        assert_suggestion_result(\n            \"The astronauts waited on the landingpad for hours.\",\n            SplitWords::default(),\n            \"The astronauts waited on the landing pad for hours.\",\n        );\n    }\n\n    #[test]\n    fn splits_before_punctuation() {\n        assert_suggestion_result(\n            \"This was kindof, actually, hilarious.\",\n            SplitWords::default(),\n            \"This was kind of, actually, hilarious.\",\n        );\n    }\n\n    #[test]\n    fn ignores_known_compound_words() {\n        assert_no_lints(\"Someone left early.\", SplitWords::default());\n    }\n\n    #[test]\n    fn ignores_prefix_without_valid_remainder() {\n        assert_no_lints(\"The monkeyxyz escaped unnoticed.\", SplitWords::default());\n    }\n\n    #[test]\n    fn test_atall_to_at_all() {\n        assert_suggestion_result(\n            \"don't seem to support symbolic links atall.\",\n            SplitWords::default(),\n            \"don't seem to support symbolic links at all.\",\n        );\n    }\n\n    #[test]\n    fn test_atall_to_a_tall() {\n        assert_suggestion_result(\"atall\", SplitWords::default(), \"a tall\");\n    }\n\n    #[test]\n    fn atall_should_split_to_a_tall_and_at_all() {\n        assert_good_and_bad_suggestions(\"atall\", SplitWords::default(), &[\"a tall\", \"at all\"], &[]);\n    }\n\n    #[test]\n    fn issue_2763_leaves() {\n        assert_suggestion_result(\n            \"I love to eat cornleaves.\",\n            SplitWords::default(),\n            \"I love to eat corn leaves.\",\n        );\n    }\n\n    #[test]\n    fn issue_2763_husks() {\n        assert_suggestion_result(\n            \"I love to eat cornhusks.\",\n            SplitWords::default(),\n            \"I love to eat corn husks.\",\n        );\n    }\n\n    #[test]\n    fn issue_2763_singular() {\n        assert_suggestion_result(\n            \"I would love to eat a cornleaf.\",\n            SplitWords::default(),\n            \"I would love to eat a corn leaf.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/subject_pronoun.rs",
    "content": "use crate::expr::{AnchorStart, Expr, SequenceExpr};\nuse crate::{Token, TokenStringExt};\n\nuse super::expr_linter::Chunk;\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\n\npub struct SubjectPronoun {\n    expr: SequenceExpr,\n}\n\nimpl Default for SubjectPronoun {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(AnchorStart)\n            .t_aco(\"me\")\n            .t_ws()\n            .t_aco(\"and\")\n            .t_ws()\n            .then_proper_noun();\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for SubjectPronoun {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n\n        let mut suggestion_chars = Vec::new();\n        suggestion_chars.extend_from_slice(matched_tokens.last()?.span.get_content(source));\n        suggestion_chars.extend(\" and I\".chars());\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![Suggestion::ReplaceWith(suggestion_chars)],\n            message: \"Put the other person first and use `I` in this compound subject.\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Fixes sentences that start with `me and X` by putting the proper noun first and using `I`.\"\n    }\n}\n\nfn append_token_chars(chars: &mut Vec<char>, token: &Token, source: &[char]) {\n    chars.extend(token.span.get_content(source).iter().copied());\n}\n\nfn append_tokens_chars(chars: &mut Vec<char>, tokens: &[Token], source: &[char]) {\n    for token in tokens {\n        append_token_chars(chars, token, source);\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::SubjectPronoun;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn alex_ladder() {\n        assert_suggestion_result(\n            \"Me and Alex carried the huge ladder.\",\n            SubjectPronoun::default(),\n            \"Alex and I carried the huge ladder.\",\n        );\n    }\n\n    #[test]\n    fn jordan_lamp() {\n        assert_suggestion_result(\n            \"Me and Jordan fixed the broken lamp.\",\n            SubjectPronoun::default(),\n            \"Jordan and I fixed the broken lamp.\",\n        );\n    }\n\n    #[test]\n    fn taylor_crate() {\n        assert_suggestion_result(\n            \"Me and Taylor opened the dusty crate.\",\n            SubjectPronoun::default(),\n            \"Taylor and I opened the dusty crate.\",\n        );\n    }\n\n    #[test]\n    fn kayla_dog() {\n        assert_suggestion_result(\n            \"Me and Kayla chased the noisy dog.\",\n            SubjectPronoun::default(),\n            \"Kayla and I chased the noisy dog.\",\n        );\n    }\n\n    #[test]\n    fn madison_yard() {\n        assert_suggestion_result(\n            \"Me and Madison painted the small yard shed.\",\n            SubjectPronoun::default(),\n            \"Madison and I painted the small yard shed.\",\n        );\n    }\n\n    #[test]\n    fn avery_tree() {\n        assert_suggestion_result(\n            \"Me and Avery climbed the old tree.\",\n            SubjectPronoun::default(),\n            \"Avery and I climbed the old tree.\",\n        );\n    }\n\n    #[test]\n    fn blake_room() {\n        assert_suggestion_result(\n            \"Me and Blake cleaned the crowded room.\",\n            SubjectPronoun::default(),\n            \"Blake and I cleaned the crowded room.\",\n        );\n    }\n\n    #[test]\n    fn riley_train() {\n        assert_suggestion_result(\n            \"Me and Riley watched the slow train go by.\",\n            SubjectPronoun::default(),\n            \"Riley and I watched the slow train go by.\",\n        );\n    }\n\n    #[test]\n    fn cameron_door() {\n        assert_suggestion_result(\n            \"Me and Cameron fixed the loose door hinge.\",\n            SubjectPronoun::default(),\n            \"Cameron and I fixed the loose door hinge.\",\n        );\n    }\n\n    #[test]\n    fn jamie_bag() {\n        assert_suggestion_result(\n            \"Me and Jamie carried the heavy shopping bag.\",\n            SubjectPronoun::default(),\n            \"Jamie and I carried the heavy shopping bag.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/suggestion.rs",
    "content": "use std::{\n    borrow::Borrow,\n    fmt::{Debug, Display},\n};\n\nuse is_macro::Is;\nuse serde::{Deserialize, Serialize};\n\nuse crate::{Span, case};\n\n/// A suggested edit that could resolve a [`Lint`](super::Lint).\n#[derive(Clone, Serialize, Deserialize, Is, PartialEq, Eq, Hash)]\npub enum Suggestion {\n    /// Replace the offending text with a specific character sequence.\n    ReplaceWith(Vec<char>),\n    /// Insert the provided characters _after_ the offending text.\n    InsertAfter(Vec<char>),\n    /// Remove the offending text.\n    Remove,\n}\n\nimpl Suggestion {\n    /// Variant of [`Self::replace_with_match_case`] that accepts a static string.\n    pub fn replace_with_match_case_str(\n        value: &str,\n        template: impl IntoIterator<Item = impl Borrow<char>>,\n    ) -> Self {\n        Self::replace_with_match_case(value.chars().collect(), template)\n    }\n\n    /// Construct an instance of [`Self::ReplaceWith`], but make the content match the case of the\n    /// provided template.\n    ///\n    /// For example, if we want to replace \"You're\" with \"You are\", we can provide \"you are\" and\n    /// \"You're\".\n    pub fn replace_with_match_case(\n        value: Vec<char>,\n        template: impl IntoIterator<Item = impl Borrow<char>>,\n    ) -> Self {\n        Self::ReplaceWith(case::copy_casing(template, value).to_vec())\n    }\n\n    /// Apply a suggestion to a given text.\n    pub fn apply(&self, span: Span<char>, source: &mut Vec<char>) {\n        match self {\n            Self::ReplaceWith(chars) => {\n                // Avoid allocation if possible\n                if chars.len() == span.len() {\n                    for (index, c) in chars.iter().enumerate() {\n                        source[index + span.start] = *c\n                    }\n                } else {\n                    let popped = source.split_off(span.start);\n\n                    source.extend(chars);\n                    source.extend(popped.into_iter().skip(span.len()));\n                }\n            }\n            Self::Remove => {\n                for i in span.end..source.len() {\n                    source[i - span.len()] = source[i];\n                }\n\n                source.truncate(source.len() - span.len());\n            }\n            Self::InsertAfter(chars) => {\n                let popped = source.split_off(span.end);\n                source.extend(chars);\n                source.extend(popped);\n            }\n        }\n    }\n}\n\nimpl Display for Suggestion {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        match self {\n            Suggestion::ReplaceWith(with) => {\n                write!(f, \"Replace with: “{}”\", with.iter().collect::<String>())\n            }\n            Suggestion::InsertAfter(with) => {\n                write!(f, \"Insert “{}”\", with.iter().collect::<String>())\n            }\n            Suggestion::Remove => write!(f, \"Remove error\"),\n        }\n    }\n}\n\n// To make debug output more readable.\n// The default debug implementation for Vec<char> isn't ideal in this scenario, as it prints\n// characters one at a time, line by line.\nimpl Debug for Suggestion {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        <Self as Display>::fmt(self, f)\n    }\n}\n\npub trait SuggestionCollectionExt {\n    fn to_replace_suggestions(\n        self,\n        case_template: impl IntoIterator<Item = impl Borrow<char>> + Clone,\n    ) -> impl Iterator<Item = Suggestion>;\n}\n\nimpl<I, T> SuggestionCollectionExt for I\nwhere\n    I: IntoIterator<Item = T>,\n    T: AsRef<str>,\n{\n    fn to_replace_suggestions(\n        self,\n        case_template: impl IntoIterator<Item = impl Borrow<char>> + Clone,\n    ) -> impl Iterator<Item = Suggestion> {\n        self.into_iter().map(move |s| {\n            Suggestion::replace_with_match_case_str(s.as_ref(), case_template.clone())\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::Span;\n\n    use super::Suggestion;\n\n    #[test]\n    fn insert_comma_after() {\n        let source = \"This is a test\";\n        let mut source_chars = source.chars().collect();\n        let sug = Suggestion::InsertAfter(vec![',']);\n        sug.apply(Span::new(0, 4), &mut source_chars);\n\n        assert_eq!(source_chars, \"This, is a test\".chars().collect::<Vec<_>>());\n    }\n\n    #[test]\n    fn suggestion_your_match_case() {\n        let template: Vec<_> = \"You're\".chars().collect();\n        let value: Vec<_> = \"you are\".chars().collect();\n\n        let correct = \"You are\".chars().collect();\n\n        assert_eq!(\n            Suggestion::replace_with_match_case(value, &template),\n            Suggestion::ReplaceWith(correct)\n        )\n    }\n\n    #[test]\n    fn issue_1065() {\n        let template: Vec<_> = \"Stack Overflow\".chars().collect();\n        let value: Vec<_> = \"stackoverflow\".chars().collect();\n\n        let correct = \"StackOverflow\".chars().collect();\n\n        assert_eq!(\n            Suggestion::replace_with_match_case(value, &template),\n            Suggestion::ReplaceWith(correct)\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/take_a_look_to.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{\n        ExprLinter, LintKind, Suggestion,\n        expr_linter::{Chunk, followed_by_word},\n    },\n    patterns::WordSet,\n};\n\nstatic TAKE_FORMS: &[&str] = &[\"take\", \"took\", \"taken\", \"takes\", \"taking\"];\nstatic HAVE_FORMS: &[&str] = &[\"have\", \"had\", \"has\", \"having\"];\n\npub struct TakeALookTo {\n    pub expr: SequenceExpr,\n}\n\nimpl Default for TakeALookTo {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::any_of(vec![\n                Box::new(WordSet::new(TAKE_FORMS)),\n                Box::new(WordSet::new(HAVE_FORMS)),\n            ])\n            .t_ws()\n            .t_aco(\"a\")\n            .t_ws()\n            .t_aco(\"look\")\n            .t_ws()\n            .t_aco(\"to\"),\n        }\n    }\n}\n\nimpl ExprLinter for TakeALookTo {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects `take a look to`/`have a look to` to correctly use `at`.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        if followed_by_word(ctx, |nw| {\n            nw.kind.is_verb_lemma()\n                // Exception 1. Have/take a look to see if everything is ok\n                || (nw.span.get_content(src).eq_ignore_ascii_case_str(\"it\")\n                    // Exception 2. It has a look to it that I don't like\n                    && toks.first().is_some_and(|tok| {\n                        tok.span\n                            .get_content(src)\n                            .eq_any_ignore_ascii_case_str(HAVE_FORMS)\n                    }))\n        }) {\n            return None;\n        }\n\n        let to_span = toks.last()?.span;\n\n        Some(Lint {\n            lint_kind: LintKind::Usage,\n            span: to_span,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                vec!['a', 't'],\n                to_span.get_content(src),\n            )],\n            message: \"This phrase uses `to` rather than `at`\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::TakeALookTo;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn take_a_look_to_a_new() {\n        assert_suggestion_result(\n            \"Hello, I am Drago and in this video we're going to take a look to a new AI CLI and VS Code extension tool\",\n            TakeALookTo::default(),\n            \"Hello, I am Drago and in this video we're going to take a look at a new AI CLI and VS Code extension tool\",\n        );\n    }\n\n    #[test]\n    fn have_a_look_to_url() {\n        assert_suggestion_result(\n            \"If you haven't yet, please have a look to https://docs.conan.io/2/devops/devops_local_recipes_index.html\",\n            TakeALookTo::default(),\n            \"If you haven't yet, please have a look at https://docs.conan.io/2/devops/devops_local_recipes_index.html\",\n        );\n    }\n\n    #[test]\n    fn having_a_look_to_mode() {\n        assert_suggestion_result(\n            \"Having a look to mode and overScaleMode , I see they are scriptable\",\n            TakeALookTo::default(),\n            \"Having a look at mode and overScaleMode , I see they are scriptable\",\n        );\n    }\n\n    #[test]\n    fn taking_a_look_to_this() {\n        assert_suggestion_result(\n            \"after taking a look to this issue and making some test I figure out that it likely to be an error\",\n            TakeALookTo::default(),\n            \"after taking a look at this issue and making some test I figure out that it likely to be an error\",\n        );\n    }\n\n    #[test]\n    fn have_had_a_look_to_your() {\n        assert_suggestion_result(\n            \"I have had a look to your conanfile.py and it is strange that it fails.\",\n            TakeALookTo::default(),\n            \"I have had a look at your conanfile.py and it is strange that it fails.\",\n        );\n    }\n\n    #[test]\n    fn took_a_look_to_both() {\n        assert_suggestion_result(\n            \"Since I have some knowledge in programing I took a look to both codes (LK and XCS)\",\n            TakeALookTo::default(),\n            \"Since I have some knowledge in programing I took a look at both codes (LK and XCS)\",\n        );\n    }\n\n    #[test]\n    fn taken_a_look_to_that() {\n        assert_suggestion_result(\n            \"Yeah I've taken a look to that, but I really need to use classes on this one\",\n            TakeALookTo::default(),\n            \"Yeah I've taken a look at that, but I really need to use classes on this one\",\n        );\n    }\n\n    #[test]\n    fn takes_a_look_to_the() {\n        assert_suggestion_result(\n            \"basically, it takes a look to the signing request\",\n            TakeALookTo::default(),\n            \"basically, it takes a look at the signing request\",\n        );\n    }\n\n    // Make sure we avoid potential false positives\n\n    #[test]\n    fn dont_flag_have_a_look_to_see_if() {\n        assert_no_lints(\n            \"@budarin can you have a look to see if it addresses your concerns?\",\n            TakeALookTo::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_taking_a_look_to_decide() {\n        assert_no_lints(\n            \"Would be worth taking a look to decide which way to go.\",\n            TakeALookTo::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_takes_a_look_to_see() {\n        assert_no_lints(\n            \"It attempts to open the URL in a new window and then after 2s it takes a look to see if it can read the location.\",\n            TakeALookTo::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_has_a_look_to_it() {\n        assert_no_lints(\n            \"The ecosystem's UI certainly has a look to it but inside of your app you could implement a different look as long as it's consistent.\",\n            TakeALookTo::default(),\n        );\n    }\n\n    #[test]\n    fn but_dont_ignore_takes_a_look_to_it() {\n        assert_suggestion_result(\n            \"When he gets back I hope he takes a look to it\",\n            TakeALookTo::default(),\n            \"When he gets back I hope he takes a look at it\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/take_medicine.rs",
    "content": "use crate::{\n    Token,\n    expr::{Expr, OwnedExprExt, SequenceExpr},\n    linting::expr_linter::Chunk,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::DerivedFrom,\n};\n\npub struct TakeMedicine {\n    expr: SequenceExpr,\n}\n\nimpl Default for TakeMedicine {\n    fn default() -> Self {\n        let eat_verb = DerivedFrom::new_from_str(\"eat\")\n            .or(DerivedFrom::new_from_str(\"eats\"))\n            .or(DerivedFrom::new_from_str(\"ate\"))\n            .or(DerivedFrom::new_from_str(\"eating\"))\n            .or(DerivedFrom::new_from_str(\"eaten\"));\n\n        let medication = DerivedFrom::new_from_str(\"antibiotic\")\n            .or(DerivedFrom::new_from_str(\"medicine\"))\n            .or(DerivedFrom::new_from_str(\"medication\"))\n            .or(DerivedFrom::new_from_str(\"pill\"))\n            .or(DerivedFrom::new_from_str(\"tablet\"))\n            .or(DerivedFrom::new_from_str(\"aspirin\"))\n            .or(DerivedFrom::new_from_str(\"paracetamol\"));\n\n        let modifiers = SequenceExpr::any_of(vec![\n            Box::new(SequenceExpr::default().then_determiner()),\n            Box::new(SequenceExpr::default().then_possessive_determiner()),\n            Box::new(SequenceExpr::default().then_quantifier()),\n        ])\n        .t_ws();\n\n        let adjectives = SequenceExpr::default().then_one_or_more_adjectives().t_ws();\n\n        let pattern = SequenceExpr::with(eat_verb)\n            .t_ws()\n            .then_optional(modifiers)\n            .then_optional(adjectives)\n            .then(medication);\n\n        Self { expr: pattern }\n    }\n}\n\nfn replacement_for(\n    verb: &Token,\n    source: &[char],\n    base: &str,\n    third_person: &str,\n    past: &str,\n    past_participle: &str,\n    progressive: &str,\n) -> Suggestion {\n    let replacement = if verb.kind.is_verb_progressive_form() {\n        progressive\n    } else if verb.kind.is_verb_third_person_singular_present_form() {\n        third_person\n    } else if verb.kind.is_verb_past_participle_form() && !verb.kind.is_verb_simple_past_form() {\n        past_participle\n    } else if verb.kind.is_verb_simple_past_form() {\n        past\n    } else {\n        base\n    };\n\n    Suggestion::replace_with_match_case(\n        replacement.chars().collect(),\n        verb.span.get_content(source),\n    )\n}\n\nimpl ExprLinter for TakeMedicine {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let verb = matched_tokens.first()?;\n        let span = verb.span;\n\n        let suggestions = vec![\n            replacement_for(verb, source, \"take\", \"takes\", \"took\", \"taken\", \"taking\"),\n            replacement_for(\n                verb,\n                source,\n                \"swallow\",\n                \"swallows\",\n                \"swallowed\",\n                \"swallowed\",\n                \"swallowing\",\n            ),\n        ];\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Usage,\n            suggestions,\n            message: \"Use a verb like `take` or `swallow` with medicine instead of `eat`.\"\n                .to_string(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Encourages pairing medicine-related nouns with verbs like `take` or `swallow` instead of `eat`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::TakeMedicine;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn swaps_ate_antibiotics() {\n        assert_suggestion_result(\n            \"I ate antibiotics for a week.\",\n            TakeMedicine::default(),\n            \"I took antibiotics for a week.\",\n        );\n    }\n\n    #[test]\n    fn swaps_eat_medicine() {\n        assert_suggestion_result(\n            \"You should eat the medicine now.\",\n            TakeMedicine::default(),\n            \"You should take the medicine now.\",\n        );\n    }\n\n    #[test]\n    fn swaps_eats_medication() {\n        assert_suggestion_result(\n            \"She eats medication daily.\",\n            TakeMedicine::default(),\n            \"She takes medication daily.\",\n        );\n    }\n\n    #[test]\n    fn swaps_eating_medicines() {\n        assert_suggestion_result(\n            \"Are you eating medicines for that illness?\",\n            TakeMedicine::default(),\n            \"Are you taking medicines for that illness?\",\n        );\n    }\n\n    #[test]\n    fn swaps_eaten_medication() {\n        assert_suggestion_result(\n            \"He has eaten medication already.\",\n            TakeMedicine::default(),\n            \"He has taken medication already.\",\n        );\n    }\n\n    #[test]\n    fn swaps_eat_pills() {\n        assert_suggestion_result(\n            \"He ate the pills without water.\",\n            TakeMedicine::default(),\n            \"He took the pills without water.\",\n        );\n    }\n\n    #[test]\n    fn swaps_eating_paracetamol() {\n        assert_suggestion_result(\n            \"She is eating paracetamol for her headache.\",\n            TakeMedicine::default(),\n            \"She is taking paracetamol for her headache.\",\n        );\n    }\n\n    #[test]\n    fn handles_possessive_modifier() {\n        assert_suggestion_result(\n            \"Please eat my antibiotics.\",\n            TakeMedicine::default(),\n            \"Please take my antibiotics.\",\n        );\n    }\n\n    #[test]\n    fn handles_adjectives() {\n        assert_suggestion_result(\n            \"They ate the prescribed antibiotics.\",\n            TakeMedicine::default(),\n            \"They took the prescribed antibiotics.\",\n        );\n    }\n\n    #[test]\n    fn supports_uppercase() {\n        assert_suggestion_result(\n            \"Eat antibiotics with water.\",\n            TakeMedicine::default(),\n            \"Take antibiotics with water.\",\n        );\n    }\n\n    #[test]\n    fn offers_swallow_alternative() {\n        assert_suggestion_result(\n            \"He ate the medication without water.\",\n            TakeMedicine::default(),\n            \"He swallowed the medication without water.\",\n        );\n    }\n\n    #[test]\n    fn ignores_correct_usage() {\n        assert_lint_count(\n            \"She took antibiotics last winter.\",\n            TakeMedicine::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_unrelated_eat() {\n        assert_lint_count(\n            \"They ate dinner after taking medicine.\",\n            TakeMedicine::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/take_serious.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::NominalPhrase,\n};\n\n/// Linter that corrects \"take X serious\" to \"take X seriously\".\n///\n/// This linter identifies and corrects the common mistake of using the adjective \"serious\"\n/// instead of the adverb \"seriously\" in phrases like \"take it serious\".\npub struct TakeSerious {\n    expr: SequenceExpr,\n}\n\nimpl Default for TakeSerious {\n    /// Creates a new `TakeSerious` instance with the default pattern.\n    ///\n    /// The pattern matches:\n    /// - Any form of \"take\" (take/takes/taking/took/taken)\n    /// - Followed by a nominal phrase\n    /// - Ending with \"serious\"\n    fn default() -> Self {\n        let pattern = SequenceExpr::word_set(&[\"take\", \"taken\", \"takes\", \"taking\", \"took\"])\n            .t_ws()\n            .then(NominalPhrase)\n            .t_ws()\n            .t_aco(\"serious\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for TakeSerious {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let whole_phrase_span = matched_tokens.span()?;\n        let all_but_last_token = matched_tokens[..matched_tokens.len() - 1].span()?;\n\n        let mut sugg_value = all_but_last_token.get_content(source).to_vec();\n        sugg_value.extend_from_slice(&['s', 'e', 'r', 'i', 'o', 'u', 's', 'l', 'y']);\n\n        let sugg_template = whole_phrase_span.get_content(source);\n\n        let suggestions = vec![Suggestion::replace_with_match_case(\n            sugg_value,\n            sugg_template,\n        )];\n\n        Some(Lint {\n            span: whole_phrase_span,\n            lint_kind: LintKind::WordChoice,\n            suggestions,\n            message: \"Take seriously\".to_string(),\n            priority: 63,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Ensures the correct use of the adverb `seriously` instead of the adjective `serious` in phrases like `take it seriously`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::TakeSerious;\n\n    #[test]\n    fn take_it() {\n        assert_suggestion_result(\n            \"I take it serious.\",\n            TakeSerious::default(),\n            \"I take it seriously.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"'This' and 'that', which can be determiners and pronouns, are not handled properly by `NominalPhrase`\"]\n    fn take_this() {\n        assert_suggestion_result(\n            \"What's more important is, that it's impossible to actually take this serious when ...\",\n            TakeSerious::default(),\n            \"What's more important is, that it's impossible to actually take this seriously when ...\",\n        );\n    }\n\n    #[test]\n    fn not_take_security() {\n        assert_suggestion_result(\n            \"When you say someone does not take security serious you are being judgemental / destructive.\",\n            TakeSerious::default(),\n            \"When you say someone does not take security seriously you are being judgemental / destructive.\",\n        );\n    }\n\n    #[test]\n    fn we_take_security() {\n        assert_suggestion_result(\n            \"We take security serious.\",\n            TakeSerious::default(),\n            \"We take security seriously.\",\n        );\n    }\n\n    #[test]\n    fn take_me() {\n        assert_suggestion_result(\n            \"Yeah , don't take me serious , i do this as a hobby - jusspatel.\",\n            TakeSerious::default(),\n            \"Yeah , don't take me seriously , i do this as a hobby - jusspatel.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Passive voice and adverbs are not yet supported\"]\n    fn taken_adv() {\n        assert_suggestion_result(\n            \"This is not meant to be taken overly serious\",\n            TakeSerious::default(),\n            \"This is not meant to be taken overly seriously\",\n        );\n    }\n\n    #[test]\n    fn takes_these_numbers() {\n        assert_suggestion_result(\n            \"if a program actually takes these numbers serious the results could be catastrophic.\",\n            TakeSerious::default(),\n            \"if a program actually takes these numbers seriously the results could be catastrophic.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"'No one' is not handled properly by `NominalPhrase`\"]\n    fn takes_bf() {\n        assert_suggestion_result(\n            \"And obviously no one takes brainfuck serious as a language.\",\n            TakeSerious::default(),\n            \"And obviously no one takes brainfuck seriously as a language.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Adverbs are not yet supported\"]\n    fn taken_very() {\n        assert_suggestion_result(\n            \"Hmm flaky soldering iron is something that must be taken very serious.\",\n            TakeSerious::default(),\n            \"Hmm flaky soldering iron is something that must be taken very seriously.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/that_than.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenKind,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct ThatThan {\n    expr: SequenceExpr,\n}\n\nimpl Default for ThatThan {\n    fn default() -> Self {\n        let adjective_er_that_nextword = SequenceExpr::default()\n            .then_kind_except(\n                TokenKind::is_comparative_adjective,\n                &[\"better\", \"later\", \"number\"],\n            )\n            .t_ws()\n            .t_aco(\"that\")\n            .t_ws()\n            .then_word_except(&[\"way\"]);\n\n        Self {\n            expr: adjective_er_that_nextword,\n        }\n    }\n}\n\nimpl ExprLinter for ThatThan {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        if toks.len() != 5 {\n            return None;\n        }\n\n        let that_tok = &toks[2];\n\n        Some(Lint {\n            span: that_tok.span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"than\",\n                that_tok.span.get_content(src),\n            )],\n            message: \"This looks like a comparison that should use `than` rather than `that`.\"\n                .to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects the typo `that` to `than` in comparisons.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ThatThan;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    // adj-er that\n\n    #[test]\n    fn fix_slower_that() {\n        assert_suggestion_result(\n            \"Local installed PHAR 5x times slower that the same PHAR installed globally\",\n            ThatThan::default(),\n            \"Local installed PHAR 5x times slower than the same PHAR installed globally\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_more_that() {\n        assert_lint_count(\n            \"so it's probably more that Croatian had an easier test\",\n            ThatThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_easier_that_way() {\n        assert_lint_count(\n            \"Given svelte now has signals, it might actually be easier that way.\",\n            ThatThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_better_that() {\n        assert_lint_count(\n            \"So I am wondering if its better that I run SCENIC+ once on the integrated dataset or 3 times on the individual datasets\",\n            ThatThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    #[ignore = \"not handled because 'better' results in false positives\"]\n    fn fix_better_that() {\n        assert_suggestion_result(\n            \"Examples of how different cards perform far better that others.\",\n            ThatThan::default(),\n            \"Examples of how different cards perform far better than others.\",\n        );\n    }\n\n    #[test]\n    fn fix_smaller_that() {\n        assert_suggestion_result(\n            \"When the resulting part is smaller that the build plate, it gets re-arranged.\",\n            ThatThan::default(),\n            \"When the resulting part is smaller than the build plate, it gets re-arranged.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"not handled because 'bigger' results in false positives\"]\n    fn cant_flag_bigger_that() {\n        assert_suggestion_result(\n            \"Enable bigger that 1024*768 window for world builder.\",\n            ThatThan::default(),\n            \"Enable bigger than 1024*768 window for world builder.\",\n        );\n    }\n\n    #[test]\n    fn fix_longer_that() {\n        assert_suggestion_result(\n            \"Window list in CodeBrowser can be longer that screen height.\",\n            ThatThan::default(),\n            \"Window list in CodeBrowser can be longer than screen height.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"'less that' also occurs in false positives\"]\n    fn fix_less_that() {\n        assert_suggestion_result(\n            \"Collector Not collecting metrics if the collection interval is less that the metric generation interval.\",\n            ThatThan::default(),\n            \"Collector Not collecting metrics if the collection interval is less than the metric generation interval.\",\n        );\n    }\n\n    #[test]\n    fn fix_faster_that() {\n        assert_suggestion_result(\n            \"with the general case performing approximately 4x faster that a Vec based implementation\",\n            ThatThan::default(),\n            \"with the general case performing approximately 4x faster than a Vec based implementation\",\n        );\n    }\n\n    #[test]\n    fn fix_taller_that() {\n        assert_suggestion_result(\n            \"Notice that people we've already placed are not taller that the current person.\",\n            ThatThan::default(),\n            \"Notice that people we've already placed are not taller than the current person.\",\n        );\n    }\n\n    #[test]\n\n    fn dont_fix_faster_that_way() {\n        assert_lint_count(\n            \"You will get an answer quicker that way!\",\n            ThatThan::default(),\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_fix_lighter_that() {\n        assert_lint_count(\n            \"This is the code for Seed-Studio-based timer and desk lighter that I built as a gift for a good friend.\",\n            ThatThan::default(),\n            0,\n        )\n    }\n\n    // more/less adj that\n\n    #[test]\n    fn dont_flag_more_explicit_that() {\n        assert_lint_count(\n            \"make it more explicit that those files are auto ...\",\n            ThatThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_more_clear_that() {\n        assert_lint_count(\n            \"Make it more clear that users need to download the VS tooling installer for .NET Core in VS.\",\n            ThatThan::default(),\n            0,\n        );\n    }\n\n    // False positives from The Great Gatsby\n\n    #[test]\n    fn dont_flag_i_gathered_later_that() {\n        assert_lint_count(\n            \"and I gathered later that he was a photographer\",\n            ThatThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_its_better_that() {\n        assert_lint_count(\n            \"It’s better that the shock should all come at once.\",\n            ThatThan::default(),\n            0,\n        )\n    }\n\n    #[test]\n    fn dont_flag_number_that_1663() {\n        assert_lint_count(\n            \" 455 │ `MAJOR.MINOR.PATCH` version number that increments with:\",\n            ThatThan::default(),\n            0,\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/that_which.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::expr::WordExprGroup;\nuse itertools::Itertools;\n\nuse crate::{Lrc, Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ThatWhich {\n    expr: WordExprGroup<FirstMatchOf>,\n}\n\nimpl Default for ThatWhich {\n    fn default() -> Self {\n        let mut pattern = WordExprGroup::default();\n\n        let matching_pattern = Lrc::new(\n            SequenceExpr::any_capitalization_of(\"that\")\n                .then_whitespace()\n                .then_any_capitalization_of(\"that\"),\n        );\n\n        pattern.add(\"that\", matching_pattern.clone());\n        pattern.add(\"That\", matching_pattern);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for ThatWhich {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let suggestion = format!(\n            \"{} which\",\n            matched_tokens[0]\n                .span\n                .get_content(source)\n                .iter()\n                .collect::<String>()\n        )\n        .chars()\n        .collect_vec();\n\n        Some(Lint {\n            span: matched_tokens.span()?,\n            lint_kind: LintKind::Repetition,\n            suggestions: vec![Suggestion::ReplaceWith(suggestion)],\n            message: \"“that that” sometimes means “that which”, which is clearer.\".to_string(),\n            priority: 126,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Repeating the word \\\"that\\\" is often redundant. The phrase `that which` is easier to read.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::super::tests::assert_lint_count;\n    use super::ThatWhich;\n\n    #[test]\n    fn catches_lowercase() {\n        assert_lint_count(\n            \"To reiterate, that that is cool is not uncool.\",\n            ThatWhich::default(),\n            1,\n        );\n    }\n\n    #[test]\n    fn catches_different_cases() {\n        assert_lint_count(\"That that is cool is not uncool.\", ThatWhich::default(), 1);\n    }\n\n    #[test]\n    fn likes_correction() {\n        assert_lint_count(\n            \"To reiterate, that which is cool is not uncool.\",\n            ThatWhich::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/the_how_why.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\n/// Suggests removing `the` when followed by how/why/who/when/what,\n/// skipping cases like `how to` and `who's who`.\npub struct TheHowWhy {\n    expr: FirstMatchOf,\n}\n\nimpl Default for TheHowWhy {\n    fn default() -> Self {\n        let the_how = SequenceExpr::default()\n            .t_aco(\"the\")\n            .then_whitespace()\n            .t_aco(\"how\")\n            .then_unless(SequenceExpr::whitespace().t_aco(\"to\"));\n\n        let the_who = SequenceExpr::default()\n            .t_aco(\"the\")\n            .then_whitespace()\n            .t_aco(\"who\")\n            .then_unless(\n                SequenceExpr::whitespace()\n                    .t_aco(\"'s\")\n                    .then_whitespace()\n                    .t_aco(\"who\"),\n            );\n\n        let the_why = SequenceExpr::default()\n            .t_aco(\"the\")\n            .then_whitespace()\n            .t_aco(\"why\");\n\n        let the_when = SequenceExpr::default()\n            .t_aco(\"the\")\n            .then_whitespace()\n            .t_aco(\"when\");\n\n        let the_what = SequenceExpr::default()\n            .t_aco(\"the\")\n            .then_whitespace()\n            .t_aco(\"what\");\n\n        let expr = FirstMatchOf::new(vec![\n            Box::new(the_how),\n            Box::new(the_who),\n            Box::new(the_why),\n            Box::new(the_when),\n            Box::new(the_what),\n        ]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for TheHowWhy {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let the_token_span = matched_tokens[0..2].span()?;\n        let question_word_token = matched_tokens.get(2)?;\n        let question_word = question_word_token.span.get_content(source);\n\n        Some(Lint {\n            span: the_token_span,\n            lint_kind: LintKind::Miscellaneous,\n            message: format!(\n                \"Remove `the` before `{}`. In most contexts, `{}` alone is clearer.\",\n                question_word.iter().collect::<String>(),\n                question_word.iter().collect::<String>()\n            ),\n            suggestions: vec![Suggestion::Remove],\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Removes the extra `the` from expressions like `the how`, skipping `how to` and `who's who`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::TheHowWhy;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn basic_the_how() {\n        assert_suggestion_result(\n            \"This is the how it all started.\",\n            TheHowWhy::default(),\n            \"This is how it all started.\",\n        );\n    }\n\n    #[test]\n    fn the_why() {\n        assert_suggestion_result(\n            \"The important part is the why it matters.\",\n            TheHowWhy::default(),\n            \"The important part is why it matters.\",\n        );\n    }\n\n    #[test]\n    fn skip_how_to() {\n        assert_lint_count(\n            \"I'd like to explain the how to install this properly.\",\n            TheHowWhy::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn skip_whos_who() {\n        assert_lint_count(\n            \"We covered the who's who of corporate leadership last time.\",\n            TheHowWhy::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn the_who() {\n        assert_suggestion_result(\n            \"We must identify the who is responsible.\",\n            TheHowWhy::default(),\n            \"We must identify who is responsible.\",\n        );\n    }\n\n    #[test]\n    fn the_when() {\n        assert_suggestion_result(\n            \"He outlined the when the new phase will start.\",\n            TheHowWhy::default(),\n            \"He outlined when the new phase will start.\",\n        );\n    }\n\n    #[test]\n    fn the_what() {\n        assert_suggestion_result(\n            \"The presentation clarifies the what we intend to build.\",\n            TheHowWhy::default(),\n            \"The presentation clarifies what we intend to build.\",\n        );\n    }\n\n    #[test]\n    fn no_false_positive() {\n        assert_lint_count(\n            \"These tips examine the how to fix your code quickly, plus the what's next.\",\n            TheHowWhy::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/the_my.rs",
    "content": "use super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    CharStringExt, Token, TokenStringExt,\n    patterns::{Word, WordSet},\n};\n\npub struct TheMy {\n    expr: FirstMatchOf,\n}\n\nimpl Default for TheMy {\n    fn default() -> Self {\n        let the = Word::new(\"the\");\n        let any_possessive = WordSet::new(&[\"my\", \"your\", \"his\", \"her\", \"its\", \"our\", \"their\"]);\n\n        let the_poss = SequenceExpr::with(the.clone())\n            .then_whitespace()\n            .then(any_possessive.clone());\n\n        let poss_the = SequenceExpr::with(any_possessive)\n            .then_whitespace()\n            .then(the);\n\n        Self {\n            expr: FirstMatchOf::new(vec![Box::new(the_poss), Box::new(poss_the)]),\n        }\n    }\n}\n\nimpl ExprLinter for TheMy {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span().unwrap();\n        let span_content = span.get_content(source);\n\n        let first_word = matched_tokens[0].span.get_content(source);\n        let second_word = matched_tokens[2].span.get_content(source);\n\n        let first_word_string: String = first_word.to_string();\n\n        let possessive = if first_word_string.eq_ignore_ascii_case(\"the\") {\n            second_word\n        } else {\n            first_word\n        };\n\n        // Don't flag \"the My\" or \"my The\" since they could be titles of things\n        if second_word[0].is_uppercase() {\n            return None;\n        }\n\n        // Don't flag \"her the\" since her is also the object case pronoun: \"give her the book\"\n        if first_word_string.eq_ignore_ascii_case(\"her\") {\n            return None;\n        }\n\n        let suggestions = vec![\n            Suggestion::replace_with_match_case(possessive.to_vec(), span_content),\n            Suggestion::replace_with_match_case(\"the\".chars().collect(), span_content),\n        ];\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Repetition,\n            suggestions,\n            message: \"Use either the definite article 'the' or the possessive. Using both together is ungrammatical in English.\".to_owned(),\n            priority: 127,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags the definite article used together with a possessive.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::TheMy;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn correct_the_my_atomic_lowercase() {\n        assert_suggestion_result(\"the my\", TheMy::default(), \"my\");\n    }\n\n    #[test]\n    fn correct_the_my_atomic_2nd_suggestion() {\n        assert_suggestion_result(\"the my\", TheMy::default(), \"the\");\n    }\n\n    #[test]\n    fn correct_the_my_atomic_uppercase() {\n        assert_suggestion_result(\"The my\", TheMy::default(), \"My\");\n    }\n\n    #[test]\n    fn correct_my_the_atomic_lowercase() {\n        assert_suggestion_result(\"my the\", TheMy::default(), \"my\");\n    }\n\n    #[test]\n    fn correct_my_the_atomic_2nd_suggestion() {\n        assert_suggestion_result(\"my the\", TheMy::default(), \"the\");\n    }\n\n    #[test]\n    fn correct_my_the_atomic_uppercase() {\n        assert_suggestion_result(\"My the\", TheMy::default(), \"My\");\n    }\n\n    #[test]\n    fn dont_correct_capitalized_possessive() {\n        assert_lint_count(\"For some time the My Projects personal page was \\\"sluggish\\\" or took some time to generate the miniature depicting the project, now it seems completely stuck ...\n\", TheMy::default(), 0);\n    }\n\n    #[test]\n    fn correct_the_my_github() {\n        assert_suggestion_result(\n            \"When I try to configure the my react-native app to support koltin file, this library gives these errors\",\n            TheMy::default(),\n            \"When I try to configure my react-native app to support koltin file, this library gives these errors\",\n        );\n    }\n\n    #[test]\n    fn correct_the_our_github() {\n        assert_suggestion_result(\n            \"Source codes of the our paper titled \\\"Multi-level Textual-Visual Alignment and Fusion Network for Multimodal Aspect-based Sentiment Analysis\\\"\",\n            TheMy::default(),\n            \"Source codes of our paper titled \\\"Multi-level Textual-Visual Alignment and Fusion Network for Multimodal Aspect-based Sentiment Analysis\\\"\",\n        );\n    }\n\n    #[test]\n    fn correct_the_their_github() {\n        assert_suggestion_result(\n            \"the slider cannot render when i use again the their component on NextJS app\",\n            TheMy::default(),\n            \"the slider cannot render when i use again their component on NextJS app\",\n        );\n    }\n\n    #[test]\n    fn correct_your_the_github() {\n        assert_suggestion_result(\n            \"This plugin allows you to view your the information about order and customer from your spree store on zendesk\",\n            TheMy::default(),\n            \"This plugin allows you to view your information about order and customer from your spree store on zendesk\",\n        );\n    }\n\n    #[test]\n    fn correct_my_the_github() {\n        assert_suggestion_result(\n            \"Scripts used my the project to collect, process and store social media data from a number of sources\",\n            TheMy::default(),\n            \"Scripts used my project to collect, process and store social media data from a number of sources\",\n        );\n    }\n\n    #[test]\n    fn dont_correct_the_your_github() {\n        assert_lint_count(\n            \"What exactly is the sort order of list names on the Your Stars page?\",\n            TheMy::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_correct_my_the_github() {\n        assert_lint_count(\n            \"My The Frame TV is not pulling information properly\",\n            TheMy::default(),\n            0,\n        )\n    }\n\n    #[test]\n    fn correct_our_the_github() {\n        assert_suggestion_result(\n            \"Companion Repository to our the whitepaper \\\"Towards Reliable and Scalable Linux Kernel CVE Attribution in Automated Static Firmware Analyses\\\"\",\n            TheMy::default(),\n            \"Companion Repository to our whitepaper \\\"Towards Reliable and Scalable Linux Kernel CVE Attribution in Automated Static Firmware Analyses\\\"\",\n        )\n    }\n\n    #[test]\n    fn correct_their_the_github() {\n        assert_suggestion_result(\n            \"Types exported by @_exported remember only their the original module\",\n            TheMy::default(),\n            \"Types exported by @_exported remember only their original module\",\n        )\n    }\n\n    #[test]\n    fn dont_correct_her_the_github() {\n        assert_lint_count(\n            \"Create an admin role for boba-tan and give her the GoreMaster role only in !gore\",\n            TheMy::default(),\n            0,\n        )\n    }\n\n    #[test]\n    fn correct_the_his_github() {\n        assert_suggestion_result(\n            \"Allows the user to specify the his last name.\",\n            TheMy::default(),\n            \"Allows the user to specify his last name.\",\n        )\n    }\n\n    #[test]\n    fn correct_his_the_github() {\n        assert_suggestion_result(\n            \"One interesting creation was his the Schelling segregation model\",\n            TheMy::default(),\n            \"One interesting creation was his Schelling segregation model\",\n        )\n    }\n\n    #[test]\n    fn correct_the_her_github() {\n        assert_suggestion_result(\n            \"In memory of the occasion when our Queen Victoria graciously came to see our Island, and the her Royal Consort Albert landed at Ramsey\",\n            TheMy::default(),\n            \"In memory of the occasion when our Queen Victoria graciously came to see our Island, and her Royal Consort Albert landed at Ramsey\",\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/the_point_for.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::WordSet,\n};\n\npub struct ThePointFor {\n    expr: SequenceExpr,\n}\n\nimpl Default for ThePointFor {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::any_of(vec![Box::new(WordSet::new(&[\n                // \"that's\" leads to false positives: \"that's the point for me\"\n                \"is\", \"was\", \"what's\", \"whats\",\n            ]))])\n            .t_ws()\n            .t_aco(\"the\")\n            .t_ws()\n            .t_aco(\"point\")\n            .t_ws()\n            .t_aco(\"for\"),\n        }\n    }\n}\n\nimpl ExprLinter for ThePointFor {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Corrects `the point for` to `the point of`\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        // Avoid flagging things like \"p0 is the point for which we want to find the closest point to the line\"\n        if let Some((_, after)) = ctx\n            && after.len() >= 2\n            && after[0].kind.is_whitespace()\n            && after[1]\n                .span\n                .get_content(src)\n                .eq_ignore_ascii_case_str(\"which\")\n        {\n            return None;\n        }\n\n        let forspan = toks.last()?.span;\n        Some(Lint {\n            span: forspan,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"of\",\n                forspan.get_content(src),\n            )],\n            message: \"Did you mean `the point of`?\".to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ThePointFor;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fix_is() {\n        assert_suggestion_result(\n            \"What is the point for this check?\",\n            ThePointFor::default(),\n            \"What is the point of this check?\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"'that' is disabled to avoid false positives until the heuristics can be improved\"]\n    fn fix_thats_the_point_no_apostrophe() {\n        assert_suggestion_result(\n            \"You should also keep an eye on the issue list because thats the point for being public\",\n            ThePointFor::default(),\n            \"You should also keep an eye on the issue list because thats the point of being public\",\n        );\n    }\n\n    #[test]\n    fn fix_was_the_point() {\n        assert_suggestion_result(\n            \"But avoiding to learn qraphql to find out the proper query was the point for asking for this convenience command.\",\n            ThePointFor::default(),\n            \"But avoiding to learn qraphql to find out the proper query was the point of asking for this convenience command.\",\n        );\n    }\n\n    #[test]\n    fn fix_whats_the_point() {\n        assert_suggestion_result(\n            \"What's the point for IRepository?\",\n            ThePointFor::default(),\n            \"What's the point of IRepository?\",\n        );\n    }\n\n    #[test]\n    fn fix_whats_the_point_no_apostrophe() {\n        // Whats the point for using a reader like feedly, if the articles open in their native website\n        assert_suggestion_result(\n            \"## I dont get RSS. Whats the point for using a reader like feedly, if the articles open in their native website\",\n            ThePointFor::default(),\n            \"## I dont get RSS. Whats the point of using a reader like feedly, if the articles open in their native website\",\n        );\n    }\n\n    #[test]\n    fn avoid_flagging_the_point_for_which() {\n        assert_no_lints(\n            \"p0 is the point for which we want to find the closest point to the line\",\n            ThePointFor::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/the_proper_noun_possessive.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct TheProperNounPossessive {\n    expr: SequenceExpr,\n}\n\nimpl Default for TheProperNounPossessive {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"the\")\n                .t_ws()\n                .then(|t: &Token, s: &[char]| {\n                    // TODO: should use `k.is_proper_noun()` when #2327 is fixed\n                    // TODO: should use `k.is_common_noun()` which doesn't exist yet\n                    t.kind.is_possessive_noun()\n                        && t.kind.is_titlecase()\n                        && !t.kind.is_lowercase()\n                        && !t\n                            .span\n                            .get_content(s)\n                            .eq_any_ignore_ascii_case_str(&[\"internet's\", \"internet’s\"])\n                }),\n        }\n    }\n}\n\nimpl ExprLinter for TheProperNounPossessive {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], _: &[char]) -> Option<Lint> {\n        Some(Lint {\n            span: toks[..2].span()?,\n            lint_kind: LintKind::Redundancy,\n            suggestions: vec![Suggestion::Remove],\n            message:\n                \"The definite article `the` is redundant before a proper noun in the possessive.\"\n                    .to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Checks for redundant `the` before possessive proper noun such as `The London's population`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::{\n        tests::{assert_no_lints, assert_suggestion_result},\n        the_proper_noun_possessive::TheProperNounPossessive,\n    };\n\n    #[test]\n    fn fix_the_putins_war() {\n        assert_suggestion_result(\n            \"The Putin's war\",\n            TheProperNounPossessive::default(),\n            \"Putin's war\",\n        );\n    }\n\n    #[test]\n    fn fix_the_londons_population() {\n        assert_suggestion_result(\n            \"The London's population.\",\n            TheProperNounPossessive::default(),\n            \"London's population.\",\n        )\n    }\n\n    #[test]\n    fn dont_flag_common_noun_in_titlecase() {\n        assert_no_lints(\"The Dog's Dinner\", TheProperNounPossessive::default())\n    }\n\n    #[test]\n    #[ignore = \"Can't currently do this due to issue #???\"]\n    fn fix_proper_noun_stylized_to_begin_lowercase() {\n        assert_suggestion_result(\n            \"The macOS's Finder\",\n            TheProperNounPossessive::default(),\n            \"macOS's Finder\",\n        );\n    }\n\n    #[test]\n    fn fix_even_when_capitalisation_omitted() {\n        assert_suggestion_result(\n            \"the egypt's pyramids\",\n            TheProperNounPossessive::default(),\n            \"egypt's pyramids\",\n        )\n    }\n\n    #[test]\n    fn dont_flag_proper_noun_thats_also_common_noun() {\n        assert_no_lints(\"the china's broken\", TheProperNounPossessive::default());\n    }\n\n    #[test]\n    fn dont_flag_the_internets() {\n        assert_no_lints(\n            \"The internet's most popular icon toolkit has been redesigned\",\n            TheProperNounPossessive::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_the_internets_curly_apostrophe() {\n        assert_no_lints(\n            \"The internet’s most popular icon toolkit has been redesigned\",\n            TheProperNounPossessive::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/then_than.rs",
    "content": "use super::{ExprLinter, Lint, LintKind};\nuse crate::expr::{All, Expr, FirstMatchOf, FixedPhrase, SequenceExpr};\nuse crate::linting::Suggestion;\nuse crate::linting::expr_linter::Chunk;\nuse crate::patterns::{Invert, Word, WordSet};\nuse crate::{CharStringExt, Token, TokenKind};\n\n/// Corrects the misuse of `then` to `than`.\npub struct ThenThan {\n    expr: FirstMatchOf,\n}\n\nimpl ThenThan {\n    pub fn new() -> Self {\n        let comparison = All::new(vec![\n            Box::new(FirstMatchOf::new(vec![\n                // Comparative form of adjective\n                Box::new(\n                    SequenceExpr::with(Box::new(|tok: &Token, source: &[char]| {\n                        is_comparative(tok, source)\n                    }))\n                    .t_ws()\n                    .t_aco(\"then\")\n                    .t_ws()\n                    .then_unless(Word::new(\"that\")),\n                ),\n                // Positive form of adjective following \"more\" or \"less\"\n                Box::new(\n                    SequenceExpr::word_set(&[\"more\", \"less\"])\n                        .t_ws()\n                        .then_kind_either(TokenKind::is_adjective, TokenKind::is_adverb)\n                        .t_ws()\n                        .t_aco(\"then\")\n                        .t_ws()\n                        .then_unless(Word::new(\"that\")),\n                ),\n            ])),\n            // Exceptions to the rule.\n            Box::new(Invert::new(WordSet::new(&[\"back\", \"this\", \"so\", \"but\"]))),\n        ]);\n\n        Self {\n            expr: FirstMatchOf::new(vec![\n                Box::new(comparison),\n                Box::new(FixedPhrase::from_phrase(\"easier said then done\")),\n                Box::new(FixedPhrase::from_phrase(\"now and than\")),\n                Box::new(FixedPhrase::from_phrase(\"other then\")),\n                Box::new(FixedPhrase::from_phrase(\"rather then\")),\n                Box::new(FixedPhrase::from_phrase(\"than again\")),\n                Box::new(FixedPhrase::from_phrase(\"until than\")),\n            ]),\n        }\n    }\n}\n\nfn is_comparative(tok: &Token, source: &[char]) -> bool {\n    tok.kind.is_comparative_adjective()\n        || tok\n            .span\n            .get_content(source)\n            .eq_any_ignore_ascii_case_chars(&[&['l', 'e', 's', 's'], &['m', 'o', 'r', 'e']])\n}\n\nimpl Default for ThenThan {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl ExprLinter for ThenThan {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let mut thans_and_thens = matched_tokens.iter().filter(|tok| {\n            tok.span\n                .get_content(source)\n                .eq_any_ignore_ascii_case_chars(&[&['t', 'h', 'a', 'n'], &['t', 'h', 'e', 'n']])\n        });\n\n        // Get the first match and ensure there's exactly one\n        let span = match (thans_and_thens.next(), thans_and_thens.next()) {\n            (Some(token), None) => token.span,\n            _ => return None,\n        };\n\n        let offending_text = span.get_content(source);\n\n        let new_text = if offending_text.eq_ignore_ascii_case_chars(&['t', 'h', 'e', 'n']) {\n            \"than\"\n        } else {\n            \"then\"\n        };\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                new_text.chars().collect(),\n                offending_text,\n            )],\n            message: format!(\"Did you mean `{new_text}`?\"),\n            priority: 31,\n        })\n    }\n    fn description(&self) -> &'static str {\n        \"Corrects mixing up `then` and `than`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ThenThan;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn allows_back_then() {\n        assert_lint_count(\"I was a gross kid back then.\", ThenThan::default(), 0);\n    }\n\n    #[test]\n    fn catches_shorter_then() {\n        assert_suggestion_result(\n            \"One was shorter then the other.\",\n            ThenThan::default(),\n            \"One was shorter than the other.\",\n        );\n    }\n\n    #[test]\n    fn catches_better_then() {\n        assert_suggestion_result(\n            \"One was better then the other.\",\n            ThenThan::default(),\n            \"One was better than the other.\",\n        );\n    }\n\n    #[test]\n    fn catches_longer_then() {\n        assert_suggestion_result(\n            \"One was longer then the other.\",\n            ThenThan::default(),\n            \"One was longer than the other.\",\n        );\n    }\n\n    #[test]\n    fn catches_less_then() {\n        assert_suggestion_result(\n            \"I eat less then you.\",\n            ThenThan::default(),\n            \"I eat less than you.\",\n        );\n    }\n\n    #[test]\n    fn catches_more_then() {\n        assert_suggestion_result(\n            \"I eat more then you.\",\n            ThenThan::default(),\n            \"I eat more than you.\",\n        );\n    }\n\n    #[test]\n    fn stronger_should_change() {\n        assert_suggestion_result(\n            \"a chain is no stronger then its weakest link\",\n            ThenThan::default(),\n            \"a chain is no stronger than its weakest link\",\n        );\n    }\n\n    #[test]\n    fn half_a_loaf_should_change() {\n        assert_suggestion_result(\n            \"half a loaf is better then no bread\",\n            ThenThan::default(),\n            \"half a loaf is better than no bread\",\n        );\n    }\n\n    #[test]\n    fn then_everyone_clapped_should_be_allowed() {\n        assert_lint_count(\"and then everyone clapped\", ThenThan::default(), 0);\n    }\n\n    #[test]\n    fn crazier_than_rat_should_change() {\n        assert_suggestion_result(\n            \"crazier then a shithouse rat\",\n            ThenThan::default(),\n            \"crazier than a shithouse rat\",\n        );\n    }\n\n    #[test]\n    fn poke_in_eye_should_change() {\n        assert_suggestion_result(\n            \"better then a poke in the eye with a sharp stick\",\n            ThenThan::default(),\n            \"better than a poke in the eye with a sharp stick\",\n        );\n    }\n\n    #[test]\n    fn other_then_should_change() {\n        assert_suggestion_result(\n            \"There was no one other then us at the campsite.\",\n            ThenThan::default(),\n            \"There was no one other than us at the campsite.\",\n        );\n    }\n\n    #[test]\n    fn allows_and_then() {\n        assert_lint_count(\"And then we left.\", ThenThan::default(), 0);\n    }\n\n    #[test]\n    fn allows_this_then() {\n        assert_lint_count(\"Do this then that.\", ThenThan::default(), 0);\n    }\n\n    #[test]\n    fn allows_issue_720() {\n        assert_lint_count(\n            \"And if just one of those is set incorrectly or it has the tiniest bit of dirt inside then that will wreak havoc with the engine's running ability.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\"So let's check it out then.\", ThenThan::default(), 0);\n        assert_lint_count(\n            \"And if just the tiniest bit of dirt gets inside then that will wreak havoc.\",\n            ThenThan::default(),\n            0,\n        );\n\n        assert_lint_count(\n            \"He was always a top student in school but then his argument is that grades don't define intelligence.\",\n            ThenThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_issue_744() {\n        assert_lint_count(\n            \"So then after talking about how he would, he didn't.\",\n            ThenThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn issue_720_school_but_then_his() {\n        assert_lint_count(\n            \"She loved the atmosphere of the school but then his argument is that it lacks proper resources for students.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"The teacher praised the efforts of the school but then his argument is that the curriculum needs to be updated.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"They were excited about the new program at school but then his argument is that it won't be effective without proper training.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"The community supported the school but then his argument is that funding is still a major issue.\",\n            ThenThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn issue_720_so_then_these_resistors() {\n        assert_lint_count(\n            \"So then these resistors are connected up in parallel to reduce the overall resistance.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"So then these resistors are connected up to ensure the current flows properly.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"So then these resistors are connected up to achieve the desired voltage drop.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"So then these resistors are connected up to demonstrate the principles of series and parallel circuits.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"So then these resistors are connected up to optimize the circuit's performance.\",\n            ThenThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn issue_720_yes_so_then_sorry() {\n        assert_lint_count(\n            \"Yes so then sorry you didn't receive the memo about the meeting changes.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"Yes so then sorry you had to wait so long for a response from our team.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"Yes so then sorry you felt left out during the discussion; we value your input.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"Yes so then sorry you missed the deadline; we can discuss an extension.\",\n            ThenThan::default(),\n            0,\n        );\n        assert_lint_count(\n            \"Yes so then sorry you encountered issues with the software; let me help you troubleshoot.\",\n            ThenThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn more_talented_then_her_issue_720() {\n        assert_suggestion_result(\n            \"He was more talented then her at writing code.\",\n            ThenThan::default(),\n            \"He was more talented than her at writing code.\",\n        );\n    }\n\n    #[test]\n    fn simpler_then_hers_issue_720() {\n        assert_suggestion_result(\n            \"The design was simpler then hers in layout and color scheme.\",\n            ThenThan::default(),\n            \"The design was simpler than hers in layout and color scheme.\",\n        );\n    }\n\n    #[test]\n    fn earlier_then_him_issue_720() {\n        assert_suggestion_result(\n            \"We arrived earlier then him at the event.\",\n            ThenThan::default(),\n            \"We arrived earlier than him at the event.\",\n        );\n    }\n\n    #[test]\n    fn more_robust_then_his_issue_720() {\n        assert_suggestion_result(\n            \"This approach is more robust then his for handling edge cases.\",\n            ThenThan::default(),\n            \"This approach is more robust than his for handling edge cases.\",\n        );\n    }\n\n    #[test]\n    fn patch_more_recently_then_last_week_issue_720() {\n        assert_suggestion_result(\n            \"We submitted the patch more recently then last week, so they should have it already.\",\n            ThenThan::default(),\n            \"We submitted the patch more recently than last week, so they should have it already.\",\n        );\n    }\n\n    #[test]\n    fn allows_well_then() {\n        assert_lint_count(\n            \"Well then we're just going to raise all of these taxes\",\n            ThenThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_nervous_then() {\n        assert_lint_count(\n            \"I think both of us were getting nervous then because the system would have automatically aborted.\",\n            ThenThan::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn flags_stupider_then_and_more_and_less_stupid_then() {\n        assert_lint_count(\n            \"He was stupider then her but she was more stupid then some. Then again he was less stupid then some too.\",\n            ThenThan::default(),\n            3,\n        );\n    }\n\n    #[test]\n    fn patch_worse_then() {\n        assert_suggestion_result(\n            \"He was worse then her at writing code.\",\n            ThenThan::default(),\n            \"He was worse than her at writing code.\",\n        );\n    }\n\n    #[test]\n    fn patch_rather_then() {\n        assert_suggestion_result(\n            \"If copy-paste has to be prevented, I'd prefer it if paste rather then copy would be disabled\",\n            ThenThan::default(),\n            \"If copy-paste has to be prevented, I'd prefer it if paste rather than copy would be disabled\",\n        );\n    }\n\n    #[test]\n    fn patch_easier_said_then_done() {\n        assert_suggestion_result(\n            \"This is currently easier said then done because you cannot press Ctrl+A in the debug console\",\n            ThenThan::default(),\n            \"This is currently easier said than done because you cannot press Ctrl+A in the debug console\",\n        );\n    }\n\n    #[test]\n    fn patch_every_now_and_than() {\n        assert_suggestion_result(\n            \"I was testing every now and than after an upgrade on the home assistant plugin.\",\n            ThenThan::default(),\n            \"I was testing every now and then after an upgrade on the home assistant plugin.\",\n        );\n    }\n\n    #[test]\n    fn patch_until_than() {\n        assert_suggestion_result(\n            \"For the case anyone else ever hits this and the problem is not solved until than, this is a working workaround for the problem\",\n            ThenThan::default(),\n            \"For the case anyone else ever hits this and the problem is not solved until then, this is a working workaround for the problem\",\n        );\n    }\n\n    #[test]\n    fn patch_now_and_than() {\n        assert_suggestion_result(\n            \"sounds good if golang-set becomes an issue between now and than…just let me know!\",\n            ThenThan::default(),\n            \"sounds good if golang-set becomes an issue between now and then…just let me know!\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/theres.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenKind,\n    expr::SequenceExpr,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct Theres {\n    expr: SequenceExpr,\n}\n\nimpl Default for Theres {\n    fn default() -> Self {\n        let expr = SequenceExpr::aco(\"their's\").t_ws().then_kind_any_or_words(\n            &[TokenKind::is_determiner, TokenKind::is_quantifier] as &[_],\n            &[\"no\", \"enough\"],\n        );\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for Theres {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn crate::expr::Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offender = tokens.first()?;\n        let span = offender.span;\n        let template = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\"there's\", template)],\n            message: \"Use `there's`—the contraction of “there is”—for this construction.\".into(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Replaces the mistaken possessive `their's` before a determiner with the contraction `there's`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Theres;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_lowercase_before_the() {\n        assert_suggestion_result(\n            \"We realized their's the clue we missed.\",\n            Theres::default(),\n            \"We realized there's the clue we missed.\",\n        );\n    }\n\n    #[test]\n    fn corrects_sentence_start() {\n        assert_suggestion_result(\n            \"Their's the solution on the table.\",\n            Theres::default(),\n            \"There's the solution on the table.\",\n        );\n    }\n\n    #[test]\n    fn corrects_before_no() {\n        assert_suggestion_result(\n            \"I promise their's no extra charge.\",\n            Theres::default(),\n            \"I promise there's no extra charge.\",\n        );\n    }\n\n    #[test]\n    fn corrects_before_an() {\n        assert_suggestion_result(\n            \"I suspect their's an error in the log.\",\n            Theres::default(),\n            \"I suspect there's an error in the log.\",\n        );\n    }\n\n    #[test]\n    fn corrects_before_a() {\n        assert_suggestion_result(\n            \"Maybe their's a better route available.\",\n            Theres::default(),\n            \"Maybe there's a better route available.\",\n        );\n    }\n\n    #[test]\n    fn corrects_before_another() {\n        assert_suggestion_result(\n            \"Their's another round after this.\",\n            Theres::default(),\n            \"There's another round after this.\",\n        );\n    }\n\n    #[test]\n    fn corrects_before_enough() {\n        assert_suggestion_result(\n            \"Their's enough context in the report.\",\n            Theres::default(),\n            \"There's enough context in the report.\",\n        );\n    }\n\n    #[test]\n    fn allows_possessive_pronoun_form() {\n        assert_lint_count(\"Theirs is the final draft.\", Theres::default(), 0);\n    }\n\n    #[test]\n    fn ignores_without_determiner_afterward() {\n        assert_lint_count(\"I think their's better already.\", Theres::default(), 0);\n    }\n\n    #[test]\n    fn ignores_correct_contraction() {\n        assert_lint_count(\"There's a bright sign ahead.\", Theres::default(), 0);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/theses_these.rs",
    "content": "use super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::patterns::UPOSSet;\nuse harper_brill::UPOS;\n\npub struct ThesesThese {\n    expr: SequenceExpr,\n}\n\nimpl Default for ThesesThese {\n    fn default() -> Self {\n        let expr = SequenceExpr::default()\n            .t_aco(\"theses\")\n            .t_ws()\n            .then(UPOSSet::new(&[UPOS::NOUN, UPOS::PROPN]));\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for ThesesThese {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let theses_token = matched_tokens.first()?;\n\n        let content = theses_token.span.get_content(source);\n\n        let suggestions = vec![Suggestion::replace_with_match_case_str(\"these\", content)];\n\n        Some(Lint {\n            span: theses_token.span,\n            lint_kind: LintKind::Spelling,\n            suggestions,\n            message: \"Did you mean `these`?\".to_string(),\n            priority: 1,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects the common misspelling of `these` as `theses`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    use super::ThesesThese;\n\n    #[test]\n    fn corrects_theses_scenes() {\n        assert_suggestion_result(\n            \"Are theses scenes from a novel?\",\n            ThesesThese::default(),\n            \"Are these scenes from a novel?\",\n        );\n    }\n\n    #[test]\n    fn corrects_theses_days() {\n        assert_suggestion_result(\n            \"That's why the two countries look as they do theses days.\",\n            ThesesThese::default(),\n            \"That's why the two countries look as they do these days.\",\n        );\n    }\n\n    #[test]\n    fn allows_correct_theses() {\n        assert_no_lints(\n            \"There are universities that are dedicated just to this field, thousands of people doing theses on Picasso, for example.\",\n            ThesesThese::default(),\n        );\n    }\n\n    #[test]\n    fn allows_theses_followed_by_verb() {\n        assert_no_lints(\n            \"Theses are the times that try men's souls.\",\n            ThesesThese::default(),\n        );\n    }\n\n    #[test]\n    fn works_with_capitalization() {\n        assert_suggestion_result(\n            \"THESES BOOKS ARE GREAT.\",\n            ThesesThese::default(),\n            \"THESE BOOKS ARE GREAT.\",\n        );\n    }\n\n    #[test]\n    fn works_with_mixed_capitalization() {\n        assert_suggestion_result(\n            \"Theses Books Are My Favorite.\",\n            ThesesThese::default(),\n            \"These Books Are My Favorite.\",\n        );\n    }\n\n    #[test]\n    fn simple_case() {\n        assert_suggestion_result(\n            \"I like theses apples.\",\n            ThesesThese::default(),\n            \"I like these apples.\",\n        );\n    }\n\n    #[test]\n    fn with_punctuation() {\n        assert_no_lints(\"Are theses, books good?\", ThesesThese::default());\n    }\n\n    #[test]\n    fn in_the_middle_of_sentence() {\n        assert_suggestion_result(\n            \"I saw theses movies yesterday.\",\n            ThesesThese::default(),\n            \"I saw these movies yesterday.\",\n        );\n    }\n\n    #[test]\n    fn another_example() {\n        assert_lint_count(\"I have theses books.\", ThesesThese::default(), 1);\n    }\n\n    #[test]\n    fn allows_band_name() {\n        assert_no_lints(\"Theses are a great band.\", ThesesThese::default());\n    }\n\n    #[test]\n    fn does_not_correct_valid_theses() {\n        assert_no_lints(\n            \"She wrote multiple theses on the topic.\",\n            ThesesThese::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/theyre_confusions/mod.rs",
    "content": "mod over_theyre_to_there;\nmod typographic_theyre_to_their;\n\nuse crate::Token;\nuse crate::char_ext::CharExt;\nuse crate::char_string::CharStringExt;\n\nuse super::merge_linters::merge_linters;\nuse over_theyre_to_there::OverTheyreToThere;\nuse typographic_theyre_to_their::TypographicTheyreToTheir;\n\nfn token_is_theyre(token: &Token, source: &[char]) -> bool {\n    if !token.kind.is_word() {\n        return false;\n    }\n\n    token\n        .span\n        .get_content(source)\n        .normalized()\n        .eq_ignore_ascii_case_str(\"they're\")\n}\n\nfn token_is_typographic_theyre(token: &Token, source: &[char]) -> bool {\n    if !token.kind.is_word() {\n        return false;\n    }\n\n    let content = token.span.get_content(source);\n    content.iter().any(|c| c.normalized() != *c)\n        && content.normalized().eq_ignore_ascii_case_str(\"they're\")\n}\n\nfn token_is_likely_their_possession(token: &Token, source: &[char]) -> bool {\n    if !token.kind.is_word() {\n        return false;\n    }\n\n    let normalized = token.span.get_content(source).normalized();\n    matches!(\n        normalized.as_ref(),\n        ['b', 'a', 'c', 'k', 'p', 'a', 'c', 'k', 's']\n            | ['p', 'a', 't', 'i', 'e', 'n', 'c', 'e']\n            | ['d', 'o', 'g']\n            | ['p', 'r', 'o', 'p', 'o', 's', 'a', 'l']\n            | ['l', 'a', 'u', 'g', 'h', 't', 'e', 'r']\n            | ['l', 'a', 'd', 'd', 'e', 'r']\n            | ['a', 'p', 'a', 'r', 't', 'm', 'e', 'n', 't']\n            | ['m', 'i', 't', 't', 'e', 'n', 's']\n            | ['a', 'n', 's', 'w', 'e', 'r']\n            | ['s', 'k', 'e', 't', 'c', 'h', 'e', 's']\n            | ['s', 'e', 'r', 'v', 'e', 'r']\n            | ['b', 'a', 'c', 'k', 'u', 'p']\n            | ['e', 'v', 'i', 'd', 'e', 'n', 'c', 'e']\n            | ['g', 'a', 'r', 'd', 'e', 'n']\n            | ['m', 'a', 'p', 's']\n            | ['t', 'e', 'a', 'm']\n            | ['p', 'a', 's', 't']\n            | ['n', 'e', 'e', 'd', 's']\n            | ['p', 'a', 'w', 'n']\n            | ['a', 'b', 'i', 'l', 'i', 't', 'y']\n            | ['r', 'e', 't', 'u', 'r', 'n']\n            | ['h', 'e', 'a', 'r', 'i', 'n', 'g']\n            | ['h', 'o', 'u', 's', 'e']\n            | ['c', 'o', 'a', 't', 's']\n            | ['p', 'r', 'o', 'b', 'l', 'e', 'm', 's']\n            | [\n                'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 'i', 'n', 'g'\n            ]\n            | ['n', 'e', 'w']\n    )\n}\n\nmerge_linters!(\n    TheyreConfusions => OverTheyreToThere, TypographicTheyreToTheir =>\n    \"Detects apostrophe and locative edge cases that are awkward to model with standard contraction checks.\"\n);\n"
  },
  {
    "path": "harper-core/src/linting/theyre_confusions/over_theyre_to_there.rs",
    "content": "use super::token_is_theyre;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::SequenceExpr,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct OverTheyreToThere {\n    expr: Box<dyn crate::expr::Expr>,\n}\n\nimpl Default for OverTheyreToThere {\n    fn default() -> Self {\n        let expr = SequenceExpr::aco(\"over\")\n            .t_ws()\n            .then(token_is_theyre as fn(&Token, &[char]) -> bool);\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for OverTheyreToThere {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn crate::expr::Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offender = matched_tokens.last()?;\n        let template = offender.span.get_content(source);\n\n        Some(Lint {\n            span: offender.span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\"there\", template)],\n            message: \"Did you mean `there`?\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects locative `over they're` to `over there`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::OverTheyreToThere;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_locative_ascii_apostrophe() {\n        assert_suggestion_result(\n            \"Put the chairs over they're by the window.\",\n            OverTheyreToThere::default(),\n            \"Put the chairs over there by the window.\",\n        );\n    }\n\n    #[test]\n    fn corrects_locative_smart_apostrophe() {\n        assert_suggestion_result(\n            \"Is that their car parked over they’re?\",\n            OverTheyreToThere::default(),\n            \"Is that their car parked over there?\",\n        );\n    }\n\n    #[test]\n    fn ignores_correct_form() {\n        assert_lint_count(\n            \"Put the chairs over there by the window.\",\n            OverTheyreToThere::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/theyre_confusions/typographic_theyre_to_their.rs",
    "content": "use super::{token_is_likely_their_possession, token_is_typographic_theyre};\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::SequenceExpr,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct TypographicTheyreToTheir {\n    expr: Box<dyn crate::expr::Expr>,\n}\n\nimpl Default for TypographicTheyreToTheir {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(token_is_typographic_theyre as fn(&Token, &[char]) -> bool)\n            .t_ws()\n            .then(token_is_likely_their_possession as fn(&Token, &[char]) -> bool);\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for TypographicTheyreToTheir {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn crate::expr::Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let offender = matched_tokens.first()?;\n        let template = offender.span.get_content(source);\n\n        Some(Lint {\n            span: offender.span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\"their\", template)],\n            message: \"Did you mean `their`?\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects smart-apostrophe `they’re` to `their` in possessive noun contexts.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::TypographicTheyreToTheir;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_smart_apostrophe_possessive() {\n        assert_suggestion_result(\n            \"I think they’re house is the blue one.\",\n            TypographicTheyreToTheir::default(),\n            \"I think their house is the blue one.\",\n        );\n    }\n\n    #[test]\n    fn ignores_ascii_form_for_existing_rule() {\n        assert_lint_count(\n            \"I think they're house is the blue one.\",\n            TypographicTheyreToTheir::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_non_possessive_usage() {\n        assert_lint_count(\n            \"I think they’re coming tonight.\",\n            TypographicTheyreToTheir::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn ignores_contraction_examples_from_books() {\n        assert_lint_count(\"No, they’re not.\", TypographicTheyreToTheir::default(), 0);\n        assert_lint_count(\n            \"I don’t know what they’re like.\",\n            TypographicTheyreToTheir::default(),\n            0,\n        );\n        assert_lint_count(\n            \"They’re all over crumbs.\",\n            TypographicTheyreToTheir::default(),\n            0,\n        );\n        assert_lint_count(\n            \"They’re done with blacking, I believe.\",\n            TypographicTheyreToTheir::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/thing_think.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{Expr, FirstMatchOf, FixedPhrase, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\n/// Corrects the typo \"thing\" for \"think\".\npub struct ThingThink {\n    expr: SequenceExpr,\n}\n\nimpl Default for ThingThink {\n    fn default() -> Self {\n        let subject_pronouns = WordSet::new(&[\"I\", \"you\", \"we\", \"they\"]);\n        let indefinite_pronouns = FirstMatchOf::new(vec![\n            Box::new(WordSet::new(&[\n                \"anybody\",\n                \"anyone\",\n                \"everybody\",\n                \"everyone\",\n            ])),\n            // \"Any one thing\", \"every one thing\", \"any body thing\" cause false positives.\n            Box::new(FixedPhrase::from_phrase(\"every body\")),\n        ]);\n        let pronoun = FirstMatchOf::new(vec![\n            Box::new(subject_pronouns),\n            Box::new(indefinite_pronouns),\n        ]);\n\n        let verb_to = SequenceExpr::word_set(&[\n            \"have\", \"had\", \"has\", \"having\", \"need\", \"needed\", \"needs\", \"needing\", \"want\", \"wanted\",\n            \"wants\", \"wanting\", \"try\", \"tried\", \"tries\", \"trying\",\n        ])\n        .t_ws()\n        .t_aco(\"to\");\n\n        let modal = WordSet::new(&[\n            \"can\",\n            \"cannot\",\n            \"can't\",\n            \"could\",\n            \"couldn't\",\n            \"may\",\n            \"might\",\n            \"mightn't\",\n            \"must\",\n            \"mustn't\",\n            \"shall\",\n            \"shan't\",\n            \"should\",\n            \"shouldn't\",\n            \"will\",\n            \"won't\",\n        ]);\n\n        let adverb_of_frequency =\n            WordSet::new(&[\"always\", \"sometimes\", \"often\", \"usually\", \"never\"]);\n\n        let pre_context = FirstMatchOf::new(vec![\n            Box::new(pronoun),\n            Box::new(verb_to),\n            Box::new(modal),\n            Box::new(adverb_of_frequency),\n        ]);\n\n        let pattern = SequenceExpr::with(pre_context).t_ws().t_aco(\"thing\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for ThingThink {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let thing_span = toks.last()?.span;\n\n        Some(Lint {\n            span: thing_span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                ['t', 'h', 'i', 'n', 'k'].to_vec(),\n                thing_span.get_content(src),\n            )],\n            message: \"Did you mean `think`?\".to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects the typo `thing` when it should be `think`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ThingThink;\n    use crate::linting::tests::assert_suggestion_result;\n\n    // Pronouns\n\n    #[test]\n    fn fix_you_thing() {\n        assert_suggestion_result(\n            \"Whad do you thing about tinygo?\",\n            ThingThink::default(),\n            \"Whad do you think about tinygo?\",\n        );\n    }\n\n    #[test]\n    fn fix_i_thing() {\n        assert_suggestion_result(\n            \"bcz i thing hugging face embeddings and models are very complex\",\n            ThingThink::default(),\n            \"bcz i think hugging face embeddings and models are very complex\",\n        );\n    }\n\n    #[test]\n    fn fix_we_thing() {\n        assert_suggestion_result(\n            \"which information we thing to be missing\",\n            ThingThink::default(),\n            \"which information we think to be missing\",\n        );\n    }\n\n    #[test]\n    fn fix_they_thing() {\n        assert_suggestion_result(\n            \"they thing something is a good idea\",\n            ThingThink::default(),\n            \"they think something is a good idea\",\n        );\n    }\n\n    #[test]\n    fn fix_everyone_thing() {\n        assert_suggestion_result(\n            \"What does everyone thing here?\",\n            ThingThink::default(),\n            \"What does everyone think here?\",\n        );\n    }\n\n    #[test]\n    fn fix_anyone_thing() {\n        assert_suggestion_result(\n            \"Can anyone thing of a (reasonable) way to align them such that the 'a's in all 4 words will be in (more or less) the same vertical position?\",\n            ThingThink::default(),\n            \"Can anyone think of a (reasonable) way to align them such that the 'a's in all 4 words will be in (more or less) the same vertical position?\",\n        );\n    }\n\n    #[test]\n    fn fix_anybody_thing() {\n        assert_suggestion_result(\n            \"If anybody thing there is an issue in Karma, please re-open.\",\n            ThingThink::default(),\n            \"If anybody think there is an issue in Karma, please re-open.\",\n        );\n    }\n\n    #[test]\n    fn fix_every_body_thing() {\n        assert_suggestion_result(\n            \"What does every body thing I should do with my Randy Johnson rookie card.\",\n            ThingThink::default(),\n            \"What does every body think I should do with my Randy Johnson rookie card.\",\n        );\n    }\n\n    // Verb to\n\n    #[test]\n    fn fix_have_to_thing() {\n        assert_suggestion_result(\n            \"I always have to thing what button does what action.\",\n            ThingThink::default(),\n            \"I always have to think what button does what action.\",\n        );\n    }\n\n    #[test]\n    fn fix_need_to_thing() {\n        assert_suggestion_result(\n            \"No need to thing about the REGEX.\",\n            ThingThink::default(),\n            \"No need to think about the REGEX.\",\n        );\n    }\n\n    #[test]\n    fn fix_want_to_thing() {\n        assert_suggestion_result(\n            \"maybe you want to thing of this also as a feature enhancement.\",\n            ThingThink::default(),\n            \"maybe you want to think of this also as a feature enhancement.\",\n        );\n    }\n\n    #[test]\n    fn fix_having_to_thing() {\n        assert_suggestion_result(\n            \"it has saved me personally hours in combined time not having to thing about whether something is in seconds or milliseconds\",\n            ThingThink::default(),\n            \"it has saved me personally hours in combined time not having to think about whether something is in seconds or milliseconds\",\n        );\n    }\n\n    #[test]\n    fn fix_needs_to() {\n        assert_suggestion_result(\n            \"When implementing any functionality once needs to thing aboiut how it is going to be used.\",\n            ThingThink::default(),\n            \"When implementing any functionality once needs to think aboiut how it is going to be used.\",\n        );\n    }\n\n    #[test]\n    fn fix_needed_to() {\n        assert_suggestion_result(\n            \"Even in that case we needed to thing about the syntax so that we wouldn't need to change existing syntax\",\n            ThingThink::default(),\n            \"Even in that case we needed to think about the syntax so that we wouldn't need to change existing syntax\",\n        );\n    }\n\n    #[test]\n    fn fix_had_to() {\n        assert_suggestion_result(\n            \"I had to thing in ways of making people more interested in it\",\n            ThingThink::default(),\n            \"I had to think in ways of making people more interested in it\",\n        );\n    }\n\n    #[test]\n    fn fix_trying_to_thing() {\n        assert_suggestion_result(\n            \"Here I'm trying to thing about the following questions:\",\n            ThingThink::default(),\n            \"Here I'm trying to think about the following questions:\",\n        );\n    }\n\n    // Modal verbs\n\n    #[test]\n    fn fix_can_thing() {\n        assert_suggestion_result(\n            \"The exe file dosen't work allways, because antivirus can thing it is a virus.\",\n            ThingThink::default(),\n            \"The exe file dosen't work allways, because antivirus can think it is a virus.\",\n        );\n    }\n\n    #[test]\n    fn fix_could_thing() {\n        assert_suggestion_result(\n            \"\\\"doesNotReturnSameInstanceWhenCalledMultipleTimes\\\" is a terrible name, but the only one i could thing of immediately.\",\n            ThingThink::default(),\n            \"\\\"doesNotReturnSameInstanceWhenCalledMultipleTimes\\\" is a terrible name, but the only one i could think of immediately.\",\n        );\n    }\n\n    #[test]\n    fn fix_might_thing() {\n        assert_suggestion_result(\n            \"Consider what a reader might thing when reading a switch\",\n            ThingThink::default(),\n            \"Consider what a reader might think when reading a switch\",\n        );\n    }\n\n    #[test]\n    fn fix_should_thing() {\n        assert_suggestion_result(\n            \"And we should thing to add a flag so the user could decide if internal top level extension functions are ok or not.\",\n            ThingThink::default(),\n            \"And we should think to add a flag so the user could decide if internal top level extension functions are ok or not.\",\n        );\n    }\n\n    #[test]\n    fn fix_may_thing() {\n        assert_suggestion_result(\n            \"It is easier than you may thing to run both bands with hostapd.\",\n            ThingThink::default(),\n            \"It is easier than you may think to run both bands with hostapd.\",\n        );\n    }\n\n    #[test]\n    fn fix_cannot_thing() {\n        assert_suggestion_result(\n            \"I cannot thing of a simple way to implement compensation of a change in Fnco.\",\n            ThingThink::default(),\n            \"I cannot think of a simple way to implement compensation of a change in Fnco.\",\n        );\n    }\n\n    #[test]\n    fn fix_will_thing() {\n        assert_suggestion_result(\n            \"So user will thing that delete operation is fine but its not this code deletes the wrong page and make one extra page which wrong.\",\n            ThingThink::default(),\n            \"So user will think that delete operation is fine but its not this code deletes the wrong page and make one extra page which wrong.\",\n        );\n    }\n\n    #[test]\n    fn fix_cant_thing() {\n        assert_suggestion_result(\n            \"can't thing of another place, which could have such effect\",\n            ThingThink::default(),\n            \"can't think of another place, which could have such effect\",\n        );\n    }\n\n    #[test]\n    fn fix_couldnt_thing() {\n        assert_suggestion_result(\n            \"I couldn't thing about a better title, but I run into problems since the new dplyr release.\",\n            ThingThink::default(),\n            \"I couldn't think about a better title, but I run into problems since the new dplyr release.\",\n        );\n    }\n\n    #[test]\n    fn fix_shouldnt_thing() {\n        assert_suggestion_result(\n            \"When dealing with a multi-tenanted system, users shouldn't thing about 'Databases', they should think about Tenants.\",\n            ThingThink::default(),\n            \"When dealing with a multi-tenanted system, users shouldn't think about 'Databases', they should think about Tenants.\",\n        );\n    }\n\n    #[test]\n    fn fix_wont_thing() {\n        assert_suggestion_result(\n            \"I think you need to use an io.Pipe so the Go HTTP Request won't thing the buf has been fulling read.\",\n            ThingThink::default(),\n            \"I think you need to use an io.Pipe so the Go HTTP Request won't think the buf has been fulling read.\",\n        );\n    }\n\n    // Adverb of frequency\n\n    #[test]\n    fn fix_always_thing() {\n        assert_suggestion_result(\n            \"one should always thing of whether the efforts are better targeted to the improvement\",\n            ThingThink::default(),\n            \"one should always think of whether the efforts are better targeted to the improvement\",\n        );\n    }\n\n    #[test]\n    fn fix_sometimes_thing() {\n        assert_suggestion_result(\n            \"One thing that I sometimes thing would be nice is if I could make different instances\",\n            ThingThink::default(),\n            \"One thing that I sometimes think would be nice is if I could make different instances\",\n        );\n    }\n\n    #[test]\n    fn fix_often_thing() {\n        assert_suggestion_result(\n            \"When working with workflows on many forms I often thing I need to do the same over and over\",\n            ThingThink::default(),\n            \"When working with workflows on many forms I often think I need to do the same over and over\",\n        );\n    }\n\n    #[test]\n    fn fix_never_thing() {\n        assert_suggestion_result(\n            \"just use UUIDv7 and never thing about those details again\",\n            ThingThink::default(),\n            \"just use UUIDv7 and never think about those details again\",\n        );\n    }\n\n    #[test]\n    fn fix_usually_thing() {\n        assert_suggestion_result(\n            \"And the order of that relationship might be reversed from what one might usually thing.\",\n            ThingThink::default(),\n            \"And the order of that relationship might be reversed from what one might usually think.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/this_type_of_thing.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::WordSet,\n};\n\npub struct ThisTypeOfThing {\n    expr: SequenceExpr,\n}\n\nimpl Default for ThisTypeOfThing {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"this\", \"these\", \"that\", \"those\"])\n                .t_ws()\n                .then(\n                    SequenceExpr::word_set(&[\"kind\", \"kinds\", \"sort\", \"sorts\", \"type\", \"types\"])\n                        .t_ws(),\n                )\n                .t_aco(\"of\")\n                .t_ws()\n                .then_any_of(vec![\n                    // \"thing\" is common in this construction and won't be part of a compound noun.\n                    Box::new(WordSet::new(&[\"thing\", \"things\"])),\n                    // Other singular nouns may be part of hard-to-determine compound nouns, but plural nouns won't.\n                    Box::new(\n                        SequenceExpr::default()\n                            .then_kind_where(|k| k.is_plural_noun() && !k.is_singular_noun()),\n                    ),\n                ]),\n        }\n    }\n}\n\nimpl ExprLinter for ThisTypeOfThing {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn description(&self) -> &str {\n        \"Checks that the parts of `this/these type(s) of thing(s)` agree in grammatical number\"\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        #[derive(PartialEq)]\n        enum Num {\n            Sg,\n            Pl,\n        }\n\n        let (det_tok, type_tok, thing_tok) = (toks.first()?, toks.get(2)?, toks.last()?);\n        let (type_kind, thing_kind) = (&type_tok.kind, &thing_tok.kind);\n        let (det_span, type_span) = (det_tok.span, type_tok.span);\n        let (det_chars, type_chars) = (det_span.get_content(src), type_span.get_content(src));\n        let (det_num, type_num, thing_num) = (\n            if det_chars.eq_any_ignore_ascii_case_str(&[\"this\", \"that\"]) {\n                Num::Sg\n            } else {\n                Num::Pl\n            },\n            if type_kind.is_plural_noun() {\n                Num::Pl\n            } else {\n                Num::Sg\n            },\n            if thing_kind.is_plural_noun() {\n                Num::Pl\n            } else {\n                Num::Sg\n            },\n        );\n        if det_num == type_num && type_num == thing_num {\n            return None;\n        };\n\n        enum Deixis {\n            Proximal,\n            Distal,\n        }\n        let deixis = if det_chars.eq_any_ignore_ascii_case_str(&[\"this\", \"these\"]) {\n            Deixis::Proximal\n        } else {\n            Deixis::Distal\n        };\n\n        enum Specie {\n            Kind,\n            Sort,\n            Type,\n        }\n        let specie = match type_chars.first()? {\n            'k' | 'K' => Specie::Kind,\n            's' | 'S' => Specie::Sort,\n            't' | 'T' => Specie::Type,\n            _ => return None,\n        };\n\n        // Due to the logic above, when we get here we either have 1 singular and 2 plurals or 2 plurals and 1 singular.\n        // Meaning one of the three varying words does not agree in number with the other two.\n        let bad_tok = match (&det_num, &type_num, &thing_num) {\n            (Num::Sg, Num::Sg, Num::Pl) => thing_tok,\n            (Num::Sg, Num::Pl, Num::Sg) => type_tok,\n            (Num::Sg, Num::Pl, Num::Pl) => det_tok,\n            (Num::Pl, Num::Sg, Num::Sg) => det_tok,\n            (Num::Pl, Num::Sg, Num::Pl) => type_tok,\n            (Num::Pl, Num::Pl, Num::Sg) => thing_tok,\n            _ => return None,\n        };\n\n        Some(Lint {\n            span: bad_tok.span,\n            lint_kind: LintKind::Agreement,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                if bad_tok == det_tok {\n                    match (det_num, deixis) {\n                        (Num::Sg, Deixis::Proximal) => \"these\",\n                        (Num::Sg, Deixis::Distal) => \"those\",\n                        (Num::Pl, Deixis::Proximal) => \"this\",\n                        (Num::Pl, Deixis::Distal) => \"that\",\n                    }\n                } else if bad_tok == type_tok {\n                    match (type_num, specie) {\n                        (Num::Sg, Specie::Kind) => \"kinds\",\n                        (Num::Pl, Specie::Kind) => \"kind\",\n                        (Num::Sg, Specie::Sort) => \"sorts\",\n                        (Num::Pl, Specie::Sort) => \"sort\",\n                        (Num::Sg, Specie::Type) => \"types\",\n                        (Num::Pl, Specie::Type) => \"type\",\n                    }\n                } else if bad_tok == thing_tok {\n                    match thing_num {\n                        Num::Sg => \"things\",\n                        Num::Pl => \"thing\",\n                    }\n                } else {\n                    return None;\n                }\n                .chars()\n                .collect(),\n                bad_tok.span.get_content(src),\n            )],\n            message: \"The grammatical number of the determiner and the two nouns must agree.\"\n                .to_string(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::{tests::assert_suggestion_result, this_type_of_thing::ThisTypeOfThing};\n\n    #[test]\n    fn fix_that_kind_of_things() {\n        assert_suggestion_result(\n            \"it's specific to TypeScript and not Go nor Python can do that kind of things\",\n            ThisTypeOfThing::default(),\n            \"it's specific to TypeScript and not Go nor Python can do that kind of thing\",\n        );\n    }\n\n    #[test]\n    fn fix_that_sort_of_things() {\n        assert_suggestion_result(\n            \"there isn't a trivial stb-like ready-to-use C++ library to do that sort of things\",\n            ThisTypeOfThing::default(),\n            \"there isn't a trivial stb-like ready-to-use C++ library to do that sort of thing\",\n        );\n    }\n\n    #[test]\n    fn fix_these_kind_of_things() {\n        assert_suggestion_result(\n            \"For these kind of things, I think it would be great to have a user-defined field which can be used to search for files.\",\n            ThisTypeOfThing::default(),\n            \"For these kinds of things, I think it would be great to have a user-defined field which can be used to search for files.\",\n        );\n    }\n\n    #[test]\n    fn fix_these_sort_of_thing() {\n        assert_suggestion_result(\n            \"People from npm actually get death threats for these sort of thing\",\n            ThisTypeOfThing::default(),\n            \"People from npm actually get death threats for this sort of thing\",\n        );\n    }\n\n    #[test]\n    fn fix_these_sort_of_things() {\n        assert_suggestion_result(\n            \"I suppose doing these sort of things should be legal\",\n            ThisTypeOfThing::default(),\n            \"I suppose doing these sorts of things should be legal\",\n        );\n    }\n\n    #[test]\n    fn fix_these_sorts_of_thing() {\n        assert_suggestion_result(\n            \"What I would like to understand is what the syntactic structure is for these sorts of things.\",\n            ThisTypeOfThing::default(),\n            \"What I would like to understand is what the syntactic structure is for these sorts of things.\",\n        );\n    }\n\n    #[test]\n    fn fix_these_type_of_things() {\n        assert_suggestion_result(\n            \"You can use the Symfony validator to validate these type of things easily.\",\n            ThisTypeOfThing::default(),\n            \"You can use the Symfony validator to validate these types of things easily.\",\n        );\n    }\n\n    #[test]\n    fn fix_this_kind_of_things() {\n        assert_suggestion_result(\n            \"this kind of things could exists in languages like Haskell which supports higher kinded types\",\n            ThisTypeOfThing::default(),\n            \"this kind of thing could exists in languages like Haskell which supports higher kinded types\",\n        );\n    }\n\n    #[test]\n    fn fix_this_sort_of_things() {\n        assert_suggestion_result(\n            \"I have heard this sort of things happening in the movie industry but it's appalling that it happens in the business world too\",\n            ThisTypeOfThing::default(),\n            \"I have heard this sort of thing happening in the movie industry but it's appalling that it happens in the business world too\",\n        );\n    }\n\n    #[test]\n    fn fix_this_type_of_things() {\n        assert_suggestion_result(\n            \"how to handle this type of things\",\n            ThisTypeOfThing::default(),\n            \"how to handle this type of thing\",\n        );\n    }\n\n    #[test]\n    fn fix_those_kind_of_things() {\n        assert_suggestion_result(\n            \"uh, so I was playing both of those kind of things\",\n            ThisTypeOfThing::default(),\n            \"uh, so I was playing both of those kinds of things\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/though_thought.rs",
    "content": "use crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::expr_linter::find_the_only_token_matching;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::{CharStringExt, Token, TokenKind};\n\npub struct ThoughThought {\n    expr: SequenceExpr,\n}\n\nimpl Default for ThoughThought {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::default()\n                .then_kind_is_but_is_not(\n                    TokenKind::is_subject_pronoun,\n                    TokenKind::is_object_pronoun,\n                )\n                .t_ws()\n                .t_aco(\"though\")\n                .t_ws()\n                .then_any_of(vec![\n                    Box::new(SequenceExpr::default().then_subject_pronoun()),\n                    Box::new(SequenceExpr::aco(\"that\")),\n                ]),\n        }\n    }\n}\n\nimpl ExprLinter for ThoughThought {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let tok = find_the_only_token_matching(toks, src, |tok, src| {\n            tok.span\n                .get_content(src)\n                .eq_ignore_ascii_case_chars(&['t', 'h', 'o', 'u', 'g', 'h'])\n        })?;\n\n        Some(Lint {\n            span: tok.span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"thought\",\n                tok.span.get_content(src),\n            )],\n            message: \"Is this a typo for `thought`?\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Corrects `though` when it's a typo for `thought`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ThoughThought;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn fix_i_though_i() {\n        assert_suggestion_result(\n            \"Looking at those I though I had to draw imgui into separate renderpass\",\n            ThoughThought::default(),\n            \"Looking at those I thought I had to draw imgui into separate renderpass\",\n        );\n    }\n\n    #[test]\n    fn fix_i_though_it() {\n        assert_suggestion_result(\n            \"and I though it was a shame because the data it provides can be ...\",\n            ThoughThought::default(),\n            \"and I thought it was a shame because the data it provides can be ...\",\n        );\n    }\n\n    #[test]\n    fn fix_i_though_that() {\n        assert_suggestion_result(\n            \"I though that there may be other solutions as in other here\",\n            ThoughThought::default(),\n            \"I thought that there may be other solutions as in other here\",\n        );\n    }\n\n    #[test]\n    fn fix_i_though_they() {\n        assert_suggestion_result(\n            \"path parsin error ( i though they were extincted )\",\n            ThoughThought::default(),\n            \"path parsin error ( i thought they were extincted )\",\n        );\n    }\n\n    #[test]\n    fn fix_i_though_we() {\n        assert_suggestion_result(\n            \"and that way I though we need something universial\",\n            ThoughThought::default(),\n            \"and that way I thought we need something universial\",\n        );\n    }\n\n    #[test]\n    fn fix_i_though_you() {\n        assert_suggestion_result(\n            \"I though you resolved the issue, so I updated my version\",\n            ThoughThought::default(),\n            \"I thought you resolved the issue, so I updated my version\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_it_though_i() {\n        assert_no_lints(\n            \"am including it though i believe it's nto the case because before this\",\n            ThoughThought::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_it_though_it() {\n        assert_no_lints(\n            \"Prisma works with it though it is not officially supported by Prisma yet.\",\n            ThoughThought::default(),\n        );\n    }\n\n    #[test]\n    #[ignore = \"TODO: Can't check because `it` is both subject and object\"]\n    fn fix_you_though_it() {\n        assert_suggestion_result(\n            \"it may reveal that the bug is not where you though it was\",\n            ThoughThought::default(),\n            \"it may reveal that the bug is not where you thought it was\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_you_though_that_1() {\n        // Ambiguous: \"I can tell you, though, that a project...\" vs \"I can tell (that) you thought that a project...\"\n        assert_no_lints(\n            \"I can tell you though that a project not using headers at all will likely be compiling much faster.\",\n            ThoughThought::default(),\n        );\n    }\n\n    #[test]\n    fn dont_flag_you_though_that_2() {\n        assert_no_lints(\n            \"I agree with you though that 2D lat/lon grids are unnecessarily confusing\",\n            ThoughThought::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/throw_away.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct ThrowAway {\n    expr: SequenceExpr,\n}\n\nimpl Default for ThrowAway {\n    fn default() -> Self {\n        let expr = SequenceExpr::default()\n            .t_aco(\"through\")\n            .t_ws()\n            .t_aco(\"away\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for ThrowAway {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let typo = matched_tokens.first()?;\n        let original = typo.span.get_content(source);\n\n        Some(Lint {\n            span: typo.span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![\n                Suggestion::replace_with_match_case_str(\"throw\", original),\n                Suggestion::replace_with_match_case_str(\"threw\", original),\n            ],\n            message: \"Use `throw away` or `threw away`, depending on the tense you need.\"\n                .to_string(),\n            priority: 60,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Finds the typo `through away` and suggests `throw away` or `threw away` instead.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ThrowAway;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn corrects_simple_case() {\n        assert_suggestion_result(\n            \"We through away the old code.\",\n            ThrowAway::default(),\n            \"We throw away the old code.\",\n        );\n    }\n\n    #[test]\n    fn offers_past_tense_option() {\n        assert_suggestion_result(\n            \"We through away the old code.\",\n            ThrowAway::default(),\n            \"We threw away the old code.\",\n        );\n    }\n\n    #[test]\n    fn corrects_sentence_start_capital() {\n        assert_suggestion_result(\n            \"Through away this document when you're done.\",\n            ThrowAway::default(),\n            \"Throw away this document when you're done.\",\n        );\n    }\n\n    #[test]\n    fn corrects_all_caps_instance() {\n        assert_suggestion_result(\n            \"Please THROUGH AWAY THE TRASH.\",\n            ThrowAway::default(),\n            \"Please THROW AWAY THE TRASH.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_extra_whitespace() {\n        assert_suggestion_result(\n            \"We through  away the leftovers.\",\n            ThrowAway::default(),\n            \"We throw  away the leftovers.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_throw_away() {\n        assert_no_lints(\n            \"They throw away the packaging every time.\",\n            ThrowAway::default(),\n        );\n    }\n\n    #[test]\n    fn does_not_flag_through_tunnel() {\n        assert_no_lints(\n            \"They walked through the tunnel away from danger.\",\n            ThrowAway::default(),\n        );\n    }\n\n    #[test]\n    fn flags_multiple_occurrences() {\n        assert_lint_count(\n            \"We through away the forks and through away the spoons.\",\n            ThrowAway::default(),\n            2,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_thorough() {\n        assert_no_lints(\n            \"She gave the room a thorough, away-from-home cleaning.\",\n            ThrowAway::default(),\n        );\n    }\n\n    #[test]\n    fn corrects_with_contraction() {\n        assert_suggestion_result(\n            \"Don't through away your shot.\",\n            ThrowAway::default(),\n            \"Don't throw away your shot.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_spread_words() {\n        assert_no_lints(\n            \"They pushed through as the crowd moved away.\",\n            ThrowAway::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/throw_rubbish.rs",
    "content": "use std::sync::LazyLock;\n\nuse super::{Lint, LintKind, Linter};\nuse crate::{Document, Span, TokenStringExt, linting::Suggestion};\nuse hashbrown::HashSet;\n\nstatic THROW: LazyLock<HashSet<&'static str>> =\n    LazyLock::new(|| HashSet::from([\"throw\", \"throws\", \"threw\", \"thrown\", \"throwing\"]));\n\nstatic JUNK: LazyLock<HashSet<&'static str>> =\n    LazyLock::new(|| HashSet::from([\"rubbish\", \"trash\", \"garbage\", \"junk\"]));\n\nstatic ADV_PREP: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {\n    HashSet::from([\n        // adverbs\n        \"away\",\n        \"out\",\n        \"back\",\n        \"everywhere\",\n        // prepositions\n        \"in\",\n        \"into\",\n        \"at\",\n        \"on\",\n    ])\n});\n\n#[derive(Debug, Default)]\npub struct ThrowRubbish;\n\nimpl Linter for ThrowRubbish {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for chunk in document.iter_chunks() {\n            for verb_i in chunk.iter_verb_indices() {\n                let verb_token = &chunk[verb_i];\n                let verb_str = document\n                    .get_span_content_str(&verb_token.span)\n                    .to_lowercase();\n\n                if !THROW.contains(verb_str.as_str()) {\n                    continue;\n                }\n\n                let chunk_rest = &chunk[verb_i + 1..];\n                let mut adv_prep_seen = false;\n                let mut junk_seen = false;\n                let mut last_i = None;\n\n                for (rest_i, token) in chunk_rest.iter().enumerate() {\n                    let chunk_i = verb_i + rest_i + 1;\n                    let token_str = document.get_span_content_str(&token.span).to_lowercase();\n\n                    if ADV_PREP.contains(token_str.as_str()) {\n                        adv_prep_seen = true;\n                        last_i = Some(chunk_i);\n                        if junk_seen {\n                            break;\n                        }\n                    }\n                    if JUNK.contains(token_str.as_str()) {\n                        // Check if this is being used as a qualifier for another noun\n                        // by looking at the next token after any whitespace\n                        if let Some(next_token) = document.get_next_word_from_offset(chunk_i, 1)\n                            && next_token.kind.is_noun()\n                            && !is_progressive_verb_form(document, next_token)\n                        {\n                            continue; // Skip if it's being used as an adjective\n                        }\n                        junk_seen = true;\n                        last_i = Some(chunk_i);\n                        if adv_prep_seen {\n                            break;\n                        }\n                    }\n                }\n\n                if junk_seen && !adv_prep_seen {\n                    let span = Span::new(chunk[verb_i].span.start, chunk[last_i.unwrap()].span.end);\n\n                    let verb = document.get_span_content_str(&chunk[verb_i].span);\n\n                    let rest = document.get_span_content_str(&Span::new(\n                        chunk[verb_i].span.end,\n                        chunk[last_i.unwrap()].span.end,\n                    ));\n\n                    // Generate all possible suggestions\n                    let suggestions = [\"away\", \"out\"]\n                        .iter()\n                        .flat_map(|adv| {\n                            [format!(\"{verb} {adv}{rest}\"), format!(\"{verb}{rest} {adv}\")]\n                        })\n                        .map(|sugg| Suggestion::ReplaceWith(sugg.chars().collect()))\n                        .collect();\n\n                    lints.push(Lint {\n                        span,\n                        lint_kind: LintKind::Miscellaneous,\n                        suggestions,\n                        message: \"To dispose of rubbish we don't just throw it, we throw it away\"\n                            .to_string(),\n                        priority: 63,\n                    });\n                }\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"Checks for throwing rubbish rather than throwing it away.\"\n    }\n}\n\n// TODO replace this when we have proper support for progressive verb form in metadata\nfn is_progressive_verb_form(document: &Document, token: &crate::Token) -> bool {\n    token.kind.is_verb_progressive_form()\n        && document\n            .get_span_content_str(&token.span)\n            .to_lowercase()\n            .ends_with(\"ing\")\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ThrowRubbish;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    // Test correct patterns (should not trigger lint)\n    #[test]\n    fn allow_throw_away_rubbish() {\n        assert_lint_count(\"Throw away the rubbish\", ThrowRubbish, 0);\n    }\n\n    #[test]\n    fn allow_throws_garbage_away() {\n        assert_lint_count(\"He throws garbage away\", ThrowRubbish, 0);\n    }\n\n    #[test]\n    fn allow_threw_out_trash() {\n        assert_lint_count(\"I threw out the trash\", ThrowRubbish, 0);\n    }\n\n    #[test]\n    fn allow_throw_junk_into() {\n        assert_lint_count(\"Throw that junk into the bin!\", ThrowRubbish, 0);\n    }\n\n    // Test incorrect patterns (should trigger lint)\n    #[test]\n    fn reject_throw_garbage() {\n        assert_lint_count(\"You should throw garbage\", ThrowRubbish, 1);\n    }\n\n    #[test]\n    fn reject_throwing_rubbish() {\n        assert_lint_count(\"Throwing rubbish is not a good idea\", ThrowRubbish, 1);\n    }\n\n    // Test suggestions\n    #[test]\n    fn correct_thrown_some_trash() {\n        assert_suggestion_result(\n            \"I've thrown some trash\",\n            ThrowRubbish,\n            \"I've thrown some trash away\",\n        );\n    }\n\n    #[test]\n    fn correct_throws_garbage() {\n        assert_suggestion_result(\n            \"That guy just throws his garbage\",\n            ThrowRubbish,\n            \"That guy just throws out his garbage\",\n        );\n    }\n\n    // Test edge cases\n    #[test]\n    fn ignore_throw_ball() {\n        assert_lint_count(\"Can you throw the ball?\", ThrowRubbish, 0);\n    }\n\n    // Sentences from GitHub\n    #[test]\n    fn correct_come_close_to_throw_trash() {\n        assert_suggestion_result(\n            \"Smart Dustbin is a trash bin that automatically opens when you come close to throw trash.\",\n            ThrowRubbish,\n            \"Smart Dustbin is a trash bin that automatically opens when you come close to throw away trash.\",\n        );\n    }\n\n    #[test]\n    fn correct_thrown_rubbish() {\n        assert_suggestion_result(\n            \"Add a script that draws the bin behind thrown rubbish.\",\n            ThrowRubbish,\n            \"Add a script that draws the bin behind thrown away rubbish.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"`on` doesn't go with `throw` but with `daily basis`\"]\n    fn correct_encourage_people_to_throw_trash() {\n        assert_suggestion_result(\n            \"The app main goal is to encourage people to throw trash they can found on a daily basis.\",\n            ThrowRubbish,\n            \"The app main goal is to encourage people to throw away trash they can found on a daily basis.\",\n        );\n    }\n\n    #[test]\n    fn correct_a_person_throwing_trash() {\n        assert_suggestion_result(\n            \"I think personally the icons look okay, aside from the clear prompt one, as it's currently accented on a person throwing trash.\",\n            ThrowRubbish,\n            \"I think personally the icons look okay, aside from the clear prompt one, as it's currently accented on a person throwing away trash.\",\n        );\n    }\n\n    #[test]\n    fn allow_at_and_back() {\n        assert_lint_count(\n            \"Throw garbage at a program, it will throw garbage back.\",\n            ThrowRubbish,\n            0,\n        );\n    }\n\n    #[test]\n    fn correct_responsibly_throw_trash() {\n        assert_suggestion_result(\n            \"Reward system for people responsibly throwing trash saving the environment.\",\n            ThrowRubbish,\n            \"Reward system for people responsibly throwing away trash saving the environment.\",\n        );\n    }\n\n    // False positive when \"rubbish\" is a qualifier for another word\n    #[test]\n    fn dont_flag_throws_junk_errors() {\n        assert_lint_count(\n            \"Experimental init throws junk errors, Ignore.\",\n            ThrowRubbish,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_throwing_garbage_data() {\n        assert_lint_count(\n            \"I can resolve this in various ways, such as by not throwing garbage data at Typesense\",\n            ThrowRubbish,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_throwing_garbage_value() {\n        assert_lint_count(\"Fix Spill tree Throwing garbage value\", ThrowRubbish, 0);\n    }\n\n    #[test]\n    fn correct_threw_trash_properly() {\n        assert_suggestion_result(\n            \"we want to know which student threw trash properly so that we can reward that student\",\n            ThrowRubbish,\n            \"we want to know which student threw away trash properly so that we can reward that student\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_throw_junk_bytes() {\n        assert_lint_count(\n            \"the most efficient way to enforce the buffer size and throw junk bytes is to have a local (to the reception function) buffer\",\n            ThrowRubbish,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_throw_trash_everywhere() {\n        assert_lint_count(\n            \"People throw trash everywhere and this tendency is very harmful.\",\n            ThrowRubbish,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_throws_garbage_comments() {\n        assert_lint_count(\n            \"We dont need guys that throws garbage comments based on theyr lack of knowledge.\",\n            ThrowRubbish,\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_trash_can_be_thrown_into_the_trash() {\n        assert_lint_count(\n            \"Trash balls generated during cutting can be thrown into the trash\",\n            ThrowRubbish,\n            0,\n        );\n    }\n\n    #[test]\n    fn correct_throwing_rubbish() {\n        assert_suggestion_result(\n            \"Admiring paintings, throwing rubbish, greeting.\",\n            ThrowRubbish,\n            \"Admiring paintings, throwing away rubbish, greeting.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_adverb.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::expr::{Expr, OwnedExprExt, SequenceExpr};\nuse crate::patterns::{UPOSSet, WordSet};\nuse crate::{Span, Token};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\nconst AMBIGUOUS_ADVERBS: &[&str] = &[\"just\", \"not\"];\n\npub struct ToAdverb {\n    expr: SequenceExpr,\n}\n\nimpl Default for ToAdverb {\n    fn default() -> Self {\n        let expr = SequenceExpr::default()\n            .t_aco(\"to\")\n            .t_ws()\n            .then(UPOSSet::new(&[UPOS::ADV]).or(WordSet::new(AMBIGUOUS_ADVERBS)))\n            .t_ws()\n            .t_aco(\"to\")\n            .t_ws()\n            .then_verb();\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for ToAdverb {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let first_to = tokens.first()?;\n        let second_to_idx = 4;\n        let second_to = tokens.get(second_to_idx)?;\n\n        let adverb_idx = 2;\n\n        let adverb = tokens.get(adverb_idx)?;\n\n        let span = Span::new(first_to.span.start, second_to.span.end);\n        let keep_first_variant = source[first_to.span.start..adverb.span.end].to_vec();\n        let drop_first_variant = source[adverb.span.start..second_to.span.end].to_vec();\n\n        if keep_first_variant.is_empty() || drop_first_variant.is_empty() {\n            return None;\n        }\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![\n                Suggestion::ReplaceWith(keep_first_variant),\n                Suggestion::ReplaceWith(drop_first_variant),\n            ],\n            message: \"Remove the repeated `to` in this infinitive.\".to_owned(),\n            priority: 40,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Flags duplicated `to` around certain adverbs (e.g. `to never to`) and offers fixes that keep only one `to`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ToAdverb;\n    use crate::linting::tests::{\n        assert_lint_count, assert_suggestion_count, assert_suggestion_result,\n    };\n\n    #[test]\n    fn corrects_to_never_to() {\n        assert_suggestion_result(\n            \"Tom has decided to never to do that again.\",\n            ToAdverb::default(),\n            \"Tom has decided to never do that again.\",\n        );\n    }\n\n    #[test]\n    fn alternative_moves_adverb() {\n        assert_suggestion_result(\n            \"Tom has decided to never to do that again.\",\n            ToAdverb::default(),\n            \"Tom has decided never to do that again.\",\n        );\n    }\n\n    #[test]\n    fn corrects_to_maybe_to() {\n        assert_suggestion_result(\n            \"The next step is to maybe to take a language class.\",\n            ToAdverb::default(),\n            \"The next step is to maybe take a language class.\",\n        );\n    }\n\n    #[test]\n    fn corrects_to_not_to() {\n        assert_suggestion_result(\n            \"He tells the monitor to not to collect anything.\",\n            ToAdverb::default(),\n            \"He tells the monitor to not collect anything.\",\n        );\n    }\n\n    #[test]\n    fn corrects_to_just_to() {\n        assert_suggestion_result(\n            \"She told me to just to keep the peace.\",\n            ToAdverb::default(),\n            \"She told me to just keep the peace.\",\n        );\n    }\n\n    #[test]\n    fn corrects_to_really_to() {\n        assert_suggestion_result(\n            \"They plan to really to push the release.\",\n            ToAdverb::default(),\n            \"They plan to really push the release.\",\n        );\n    }\n\n    #[test]\n    fn offers_two_suggestions() {\n        assert_suggestion_count(\n            \"He agreed to probably to lead the effort.\",\n            ToAdverb::default(),\n            2,\n        );\n    }\n\n    #[test]\n    fn allows_single_to_with_adverb() {\n        assert_lint_count(\"He wants to always win the match.\", ToAdverb::default(), 0);\n    }\n\n    #[test]\n    fn corrects_to_quickly_to() {\n        assert_suggestion_result(\n            \"They hoped to quickly to solve it.\",\n            ToAdverb::default(),\n            \"They hoped to quickly solve it.\",\n        );\n    }\n\n    #[test]\n    fn ignores_missing_verb_after_second_to() {\n        assert_lint_count(\"We tried to eventually to.\", ToAdverb::default(), 0);\n    }\n\n    #[test]\n    fn handles_capitalized_to() {\n        assert_suggestion_result(\n            \"To Always to succeed is the goal.\",\n            ToAdverb::default(),\n            \"To Always succeed is the goal.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_two_too/mod.rs",
    "content": "mod to_too_adjective_end;\nmod to_too_adjective_punct;\nmod to_too_adjverb_ed_punct;\nmod to_too_adverb;\nmod to_too_chunk_start_comma;\nmod to_too_degree_words;\nmod to_too_eos;\nmod to_too_pronoun_end;\nmod too_to;\n\nuse super::merge_linters::merge_linters;\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse to_too_adjective_end::ToTooAdjectiveEnd;\nuse to_too_adjective_punct::ToTooAdjectivePunct;\nuse to_too_adjverb_ed_punct::ToTooAdjVerbEdPunct;\nuse to_too_adverb::ToTooAdverb;\nuse to_too_chunk_start_comma::ToTooChunkStartComma;\nuse to_too_degree_words::ToTooDegreeWords;\nuse to_too_eos::ToTooEos;\nuse to_too_pronoun_end::ToTooPronounEnd;\nuse too_to::TooTo;\n\nmerge_linters!(\n    ToTwoToo =>\n        ToTooAdjectiveEnd,\n        ToTooAdjectivePunct,\n        ToTooAdverb,\n        ToTooAdjVerbEdPunct,\n        ToTooChunkStartComma,\n        ToTooDegreeWords,\n        ToTooPronounEnd,\n        ToTooEos,\n        TooTo\n    => \"Corrects homophone confusion between `to` and `too`.\"\n);\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    use super::ToTwoToo;\n\n    #[test]\n    fn fixes_to_ambitious() {\n        assert_suggestion_result(\n            \"The project scope is to ambitious\",\n            ToTwoToo::default(),\n            \"The project scope is too ambitious\",\n        );\n    }\n\n    #[test]\n    fn fixes_end_of_sent() {\n        assert_suggestion_result(\n            \"She wants ice cream, to.\",\n            ToTwoToo::default(),\n            \"She wants ice cream, too.\",\n        );\n    }\n\n    #[test]\n    fn flags_to_hungry() {\n        assert_lint_count(\"I am to hungry.\", ToTwoToo::default(), 1);\n    }\n\n    #[test]\n    fn no_lint_on_proper_too() {\n        assert_no_lints(\"I am too hungry.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn flags_to_with_irregular_whitespace() {\n        assert_lint_count(\"She was to\\t   tired.\", ToTwoToo::default(), 1);\n        assert_lint_count(\"He felt it was\\nto cold.\", ToTwoToo::default(), 1);\n    }\n\n    #[test]\n    fn flags_to_with_trailing_punct() {\n        assert_lint_count(\"He spoke to loud!\", ToTwoToo::default(), 1);\n        assert_lint_count(\"He spoke to loud?\", ToTwoToo::default(), 1);\n        assert_lint_count(\"He spoke to loud.\", ToTwoToo::default(), 1);\n    }\n\n    #[test]\n    fn no_lint_to_eat() {\n        assert_no_lints(\n            \"Please remember to eat your vegetables.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_to_nashville_or_you() {\n        assert_no_lints(\"I’m going to Nashville next week.\", ToTwoToo::default());\n        assert_no_lints(\"Talk to you later.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn no_lint_distance_from_center() {\n        assert_no_lints(\"Distance from the center to any face\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn fixes_too_go() {\n        assert_suggestion_result(\n            \"I want too go abroad.\",\n            ToTwoToo::default(),\n            \"I want to go abroad.\",\n        );\n    }\n\n    #[test]\n    fn fixes_too_him() {\n        assert_suggestion_result(\n            \"Give it too him as a gift\",\n            ToTwoToo::default(),\n            \"Give it to him as a gift\",\n        );\n    }\n\n    #[test]\n    fn fixes_too_the() {\n        assert_suggestion_result(\n            \"We're going too the conference.\",\n            ToTwoToo::default(),\n            \"We're going to the conference.\",\n        );\n    }\n\n    #[test]\n    fn fixes_too_a() {\n        assert_suggestion_result(\n            \"We're going too a concert.\",\n            ToTwoToo::default(),\n            \"We're going to a concert.\",\n        );\n    }\n\n    #[test]\n    fn fixes_to_hard() {\n        assert_suggestion_result(\n            \"It's not to hard, is it?\",\n            ToTwoToo::default(),\n            \"It's not too hard, is it?\",\n        );\n    }\n\n    #[test]\n    fn no_lint_too_hot() {\n        assert_no_lints(\"The coffee is too hot to drink.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn no_lint_too_loud() {\n        assert_no_lints(\n            \"The music was too loud, making it hard to hear.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_too_shy() {\n        assert_no_lints(\"He's too shy to speak in public.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn no_lint_too_sweet() {\n        assert_no_lints(\"The cake is too sweet for my taste.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn no_lint_too_expensive() {\n        assert_no_lints(\n            \"It's too expensive for me to buy right now.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_too_hard() {\n        assert_no_lints(\n            \"She worked too hard and ended up getting sick.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_too_complicated() {\n        assert_no_lints(\n            \"The instructions were too complicated to understand.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_too_too() {\n        assert_no_lints(\n            \"I like apples, and my brother does too.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_too_too_2() {\n        assert_no_lints(\n            \"She's coming to the party, and he is too.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_too_too_3() {\n        assert_no_lints(\n            \"I want to go to the beach, and you do too?\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_too_too_4() {\n        assert_no_lints(\n            \"He's a talented musician, and a great friend too.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_too_too_5() {\n        assert_no_lints(\n            \"The movie was good, and the popcorn was delicious too.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_too_difficult_too_close() {\n        assert_no_lints(\n            \"The problem is too difficult, and the deadline is too close.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_too_good_too_nice() {\n        assert_no_lints(\n            \"He's too good at the game, and he's too nice to win.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn allow_young_musicians() {\n        assert_no_lints(\n            \"Bringing Hope and Opportunity to Young Musicians\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn allow_semicolon() {\n        assert_no_lints(\"Attendees can look forward to:\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn allow_build_brighter() {\n        assert_no_lints(\n            \"We're empowering them to build brighter futures.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn allow_delegate() {\n        assert_no_lints(\n            \"I’d like you to consciously delegate one task\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_soundscapes() {\n        assert_no_lints(\n            \"Soundscapes are not merely environmental features; they are integral to human identity and cultural expression.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_speed_flexibility() {\n        assert_no_lints(\n            \"Its speed, flexibility, and seamless integration with FZF make it a compelling alternative to traditional fuzzy finding solutions.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_explicitly_cast() {\n        assert_no_lints(\n            \"Attempted to explicitly cast the result back to a string\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_buried_under_data() {\n        assert_no_lints(\n            \"They felt buried under the data, unable to proactively address emerging threats.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_familiarize() {\n        assert_no_lints(\n            \"Familiarize yourself with these resources to learn how to effectively utilize the plugin’s features.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_great_deal_of_energy() {\n        assert_no_lints(\n            \"It takes a great deal of energy to consistently operate under that kind of pressure.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_occasionally_troubleshoot() {\n        assert_no_lints(\n            \"Just be prepared to occasionally troubleshoot the debugger itself.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn ccoveille_suggestion() {\n        assert_no_lints(\"He goes too far with bets.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn no_lint_auto_detect_debuggers() {\n        assert_no_lints(\n            \"Daprio attempts to auto-detect debugger servers and configurations, which can save significant time, especially for common languages.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_commitment_open_source() {\n        assert_no_lints(\n            \"I believe a commitment to open-source solutions and internal skill development would ultimately yield a more sustainable and ethical approach.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_feeling_confident_dominate() {\n        assert_no_lints(\n            \"I'm feeling confident, and I suspect you all should be too – because I’m about to dominate.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_egyptian_smiling_faces_commentary() {\n        assert_no_lints(\n            \"Today I learned that the ubiquitous, seemingly cheerful faces carved into ancient Egyptian relief sculptures – often referred to as “smiling faces” – weren’t simply a stylistic choice reflecting happiness. Recent scholarship suggests they functioned as a subtle, often satirical, form of social commentary, particularly targeting individuals who were arrogant, boastful, or otherwise deserving of ridicule.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_intended_to_leave_it_to() {\n        assert_no_lints(\n            \"Beatrice never explicitly said who she intended to leave it to.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_time_for_good_girl_to_bed() {\n        assert_no_lints(\"Time for this good girl to go to bed.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn no_lint_connected_to_many_other_fields() {\n        assert_no_lints(\n            \"The study is connected to many other fields.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_till_she_too_began_dreaming() {\n        assert_no_lints(\n            \"till she too began dreaming after a fashion\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_to_quickly_find_a_factory() {\n        assert_no_lints(\n            \"To quickly find a factory, look for a map.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_asking_to_simply_in_scare_quotes() {\n        assert_no_lints(\n            \"He was asking to simply \\\"show up\\\" for the meeting.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_llm_as_judge_to_automatically_score() {\n        assert_no_lints(\n            \"We used an LLM-as-judge to automatically score agent trajectories.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_all_the_way_to_advanced_usage() {\n        assert_no_lints(\n            \"All the way to advanced usage, like an expert.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_access_to_over_400_integrations() {\n        assert_no_lints(\n            \"You'll have access to over 400 integrations.\",\n            ToTwoToo::default(),\n        );\n    }\n\n    #[test]\n    fn no_lint_accustomed_to_precision() {\n        assert_no_lints(\"I’m rather accustomed to precision.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn no_lint_prone_to_melancholy() {\n        assert_no_lints(\"He wasn’t a man prone to melancholy.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn no_lint_superlative_range() {\n        assert_no_lints(\"Sort speeds from slowest to fastest.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn no_lint_comparative_range() {\n        assert_no_lints(\"We rank tasks from harder to easier.\", ToTwoToo::default());\n    }\n\n    #[test]\n    fn still_lints_positive_adjective_end() {\n        assert_lint_count(\"The room felt to cold.\", ToTwoToo::default(), 1);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_two_too/to_too_adjective_end.rs",
    "content": "use crate::{\n    Token, TokenKind,\n    char_string::CharStringExt,\n    expr::{Expr, SequenceExpr},\n    patterns::{SingleTokenPattern, WhitespacePattern, prepositional_preceder},\n};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ToTooAdjectiveEnd {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ToTooAdjectiveEnd {\n    fn default() -> Self {\n        let expr = SequenceExpr::optional(SequenceExpr::any_word().t_ws())\n            .t_aco(\"to\")\n            .t_ws()\n            .then_kind_is_but_is_not_except(\n                TokenKind::is_adjective,\n                TokenKind::is_verb,\n                &[\"standard\"],\n            )\n            .then_optional(WhitespacePattern)\n            .then_optional(SequenceExpr::any_word())\n            .then_optional(WhitespacePattern)\n            .then_optional(SequenceExpr::default().then_punctuation());\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for ToTooAdjectiveEnd {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        // Find the `to` token\n        let to_index = tokens.iter().position(|t| {\n            t.span\n                .get_content(source)\n                .eq_ignore_ascii_case_chars(&['t', 'o'])\n        })?;\n\n        // First non-whitespace after `to` should be the adjective\n        let mut idx = to_index + 1;\n        while idx < tokens.len() && tokens[idx].kind.is_whitespace() {\n            idx += 1;\n        }\n        if idx >= tokens.len()\n            || !tokens[idx].kind.is_adjective()\n            || !tokens[idx].kind.is_positive_adjective()\n        {\n            return None;\n        }\n        let prev_non_ws = tokens[..to_index].iter().rfind(|t| !t.kind.is_whitespace());\n        if tokens[idx].kind.is_preposition() {\n            return None;\n        }\n\n        if let Some(prev_token) = prev_non_ws\n            && prepositional_preceder().matches_token(prev_token, source)\n        {\n            return None;\n        }\n\n        // Find the next non-whitespace after the adjective\n        let mut j = idx + 1;\n        while j < tokens.len() && tokens[j].kind.is_whitespace() {\n            j += 1;\n        }\n\n        let should_lint = if j >= tokens.len() {\n            true\n        } else if tokens[j].kind.is_punctuation() {\n            let punct: String = tokens[j].span.get_content(source).iter().collect();\n            !matches!(\n                punct.as_str(),\n                \"`\" | \"\\\"\" | \"'\" | \"“\" | \"”\" | \"‘\" | \"’\" | \"-\" | \"–\" | \"—\"\n            )\n        } else {\n            false\n        };\n\n        if !should_lint {\n            return None;\n        }\n\n        let to_tok = &tokens[to_index];\n\n        Some(Lint {\n            span: to_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"too\",\n                to_tok.span.get_content(source),\n            )],\n            message: \"Use `too` here to mean ‘also’ or an excessive degree.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects `to` before an adjective when no word follows (end or punct).\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_two_too/to_too_adjective_punct.rs",
    "content": "use crate::{\n    Token, TokenKind,\n    char_string::CharStringExt,\n    expr::{Expr, SequenceExpr},\n    patterns::{SingleTokenPattern, WhitespacePattern, prepositional_preceder},\n};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ToTooAdjectivePunct {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ToTooAdjectivePunct {\n    fn default() -> Self {\n        let expr = SequenceExpr::optional(SequenceExpr::any_word().t_ws())\n            .t_aco(\"to\")\n            .t_ws()\n            .then_kind_is_but_is_not_except(\n                TokenKind::is_adjective,\n                TokenKind::is_verb,\n                &[\"standard\"],\n            )\n            .then_optional(WhitespacePattern)\n            .then_sentence_terminator();\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for ToTooAdjectivePunct {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let to_index = tokens.iter().position(|t| {\n            t.span\n                .get_content(source)\n                .eq_ignore_ascii_case_chars(&['t', 'o'])\n        })?;\n\n        let mut idx = to_index + 1;\n        while idx < tokens.len() && tokens[idx].kind.is_whitespace() {\n            idx += 1;\n        }\n        if idx >= tokens.len() {\n            return None;\n        }\n        let adjective = &tokens[idx];\n        if !adjective.kind.is_adjective() || !adjective.kind.is_positive_adjective() {\n            return None;\n        }\n        if adjective.kind.is_preposition() {\n            return None;\n        }\n\n        let prev_non_ws = tokens[..to_index].iter().rfind(|t| !t.kind.is_whitespace());\n        if let Some(prev_token) = prev_non_ws\n            && prepositional_preceder().matches_token(prev_token, source)\n        {\n            return None;\n        }\n\n        let to_tok = &tokens[to_index];\n\n        Some(Lint {\n            span: to_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"too\",\n                to_tok.span.get_content(source),\n            )],\n            message: \"Use `too` here to mean ‘also’ or an excessive degree.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects `to` before an adjective when followed by punctuation.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_two_too/to_too_adjverb_ed_punct.rs",
    "content": "use crate::char_string::CharStringExt;\nuse crate::{\n    Token,\n    expr::{Expr, SequenceExpr},\n};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ToTooAdjVerbEdPunct {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ToTooAdjVerbEdPunct {\n    fn default() -> Self {\n        let expr = SequenceExpr::default()\n            .t_aco(\"to\")\n            .t_ws()\n            .then(|tok: &crate::Token, src: &[char]| {\n                tok.kind.is_adjective()\n                    && tok.kind.is_verb()\n                    && !tok.kind.is_noun()\n                    && tok\n                        .span\n                        .get_content(src)\n                        .ends_with_ignore_ascii_case_chars(&['e', 'd'])\n            })\n            .then_sentence_terminator();\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for ToTooAdjVerbEdPunct {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let to_tok = tokens.iter().find(|t| {\n            t.span\n                .get_content(source)\n                .eq_ignore_ascii_case_chars(&['t', 'o'])\n        })?;\n\n        Some(Lint {\n            span: to_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"too\",\n                to_tok.span.get_content(source),\n            )],\n            message: \"Use `too` here to mean ‘also’ or an excessive degree.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects `to` before words that are adj/verb ending with `ed`, followed by punctuation.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_two_too/to_too_adverb.rs",
    "content": "use crate::patterns::WhitespacePattern;\nuse crate::{\n    Token, TokenKind,\n    char_string::CharStringExt,\n    expr::{AnchorEnd, Expr, SequenceExpr},\n};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Sentence;\n\npub struct ToTooAdverb {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ToTooAdverb {\n    fn default() -> Self {\n        let expr = SequenceExpr::default()\n            .t_aco(\"to\")\n            .t_ws()\n            .then_kind_is_but_is_not_except(TokenKind::is_adverb, TokenKind::is_determiner, &[\"as\"])\n            .then_optional(WhitespacePattern)\n            .then_any_of(vec![\n                Box::new(SequenceExpr::default().then_kind_is_but_is_not_except(\n                    TokenKind::is_punctuation,\n                    |_| false,\n                    &[\"`\", \"\\\"\", \"'\", \"“\", \"”\", \"‘\", \"’\", \"-\", \"–\", \"—\"],\n                )),\n                Box::new(AnchorEnd),\n            ]);\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for ToTooAdverb {\n    type Unit = Sentence;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let to_tok = tokens.iter().find(|t| {\n            t.span\n                .get_content(source)\n                .eq_ignore_ascii_case_chars(&['t', 'o'])\n        })?;\n\n        Some(Lint {\n            span: to_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"too\",\n                to_tok.span.get_content(source),\n            )],\n            message: \"Use `too` here to mean ‘also’ or an excessive degree.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects `to` before an adverb when it should be `too`.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_two_too/to_too_chunk_start_comma.rs",
    "content": "use crate::{\n    Token,\n    char_string::CharStringExt,\n    expr::{AnchorStart, Expr, SequenceExpr},\n    patterns::WhitespacePattern,\n};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ToTooChunkStartComma {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ToTooChunkStartComma {\n    fn default() -> Self {\n        let expr = SequenceExpr::with(AnchorStart)\n            .t_aco(\"to\")\n            .then_optional(WhitespacePattern)\n            .then_comma();\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for ToTooChunkStartComma {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let to_tok = tokens.iter().find(|t| {\n            t.span\n                .get_content(source)\n                .eq_ignore_ascii_case_chars(&['t', 'o'])\n        })?;\n\n        Some(Lint {\n            span: to_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"too\",\n                to_tok.span.get_content(source),\n            )],\n            message: \"Use `too` here to mean ‘also’ or an excessive degree.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects `to` at the start of a clause before a comma.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_two_too/to_too_degree_words.rs",
    "content": "use crate::{\n    Token, TokenKind,\n    char_string::CharStringExt,\n    expr::{AnchorEnd, Expr, SequenceExpr},\n};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ToTooDegreeWords {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ToTooDegreeWords {\n    fn default() -> Self {\n        // Only flag `to` before degree words when the phrase ends the clause\n        // (punctuation or end). Avoids false positives like \"connected to many X\".\n        let expr = SequenceExpr::default()\n            .t_aco(\"to\")\n            .t_ws()\n            .then_word_set(&[\"many\", \"much\", \"few\"])\n            .then_any_of(vec![\n                Box::new(SequenceExpr::default().then_kind_is_but_is_not_except(\n                    TokenKind::is_punctuation,\n                    |_| false,\n                    &[\"`\", \"\\\"\", \"'\", \"“\", \"”\", \"‘\", \"’\", \"-\", \"–\", \"—\"],\n                )),\n                Box::new(AnchorEnd),\n            ]);\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for ToTooDegreeWords {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let to_tok = tokens.iter().find(|t| {\n            t.span\n                .get_content(source)\n                .eq_ignore_ascii_case_chars(&['t', 'o'])\n        })?;\n\n        Some(Lint {\n            span: to_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"too\",\n                to_tok.span.get_content(source),\n            )],\n            message: \"Use `too` here to mean ‘also’ or an excessive degree.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects `to` used before degree words like `many`, `much`, or `few`.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_two_too/to_too_eos.rs",
    "content": "use crate::{\n    Document,\n    expr::{ExprExt, SequenceExpr},\n    linting::Linter,\n};\n\nuse super::{Lint, LintKind, Suggestion};\n\npub struct ToTooEos {\n    expr: SequenceExpr,\n}\n\nimpl ToTooEos {\n    pub fn new() -> Self {\n        Self {\n            expr: SequenceExpr::default()\n                .then_comma()\n                .t_ws()\n                .t_aco(\"to\")\n                .then_sentence_terminator(),\n        }\n    }\n}\n\nimpl Default for ToTooEos {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl Linter for ToTooEos {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let matches = self.expr.iter_matches_in_doc(document);\n\n        matches\n            .map(|m| {\n                let tok = &m.get_content(document.get_tokens())[2];\n\n                Lint {\n                    span: tok.span,\n                    lint_kind: LintKind::Typo,\n                    suggestions: vec![Suggestion::replace_with_match_case_str(\n                        \"too\",\n                        tok.span.get_content(document.get_source()),\n                    )],\n                    message: \"Use `too` when expressing similarity.\".to_owned(),\n                    priority: 63,\n                }\n            })\n            .collect()\n    }\n\n    fn description(&self) -> &str {\n        \"Identifies incorrect usage of the term `to` at the end of a sentence.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_two_too/to_too_pronoun_end.rs",
    "content": "use crate::{\n    Token, TokenKind,\n    char_string::CharStringExt,\n    expr::{AnchorEnd, AnchorStart, Expr, SequenceExpr},\n    patterns::WhitespacePattern,\n};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct ToTooPronounEnd {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for ToTooPronounEnd {\n    fn default() -> Self {\n        // Match at clause start or after punctuation to avoid cases like\n        // \"leave it to.\" where `it` is an object pronoun.\n        let expr = SequenceExpr::any_of(vec![\n            Box::new(SequenceExpr::with(AnchorStart)),\n            Box::new(\n                SequenceExpr::default()\n                    .then_kind_is_but_is_not_except(\n                        TokenKind::is_punctuation,\n                        |_| false,\n                        &[\"`\", \"\\\"\", \"'\", \"“\", \"”\", \"‘\", \"’\"],\n                    )\n                    .then_optional(WhitespacePattern),\n            ),\n        ])\n        .then_pronoun()\n        .t_ws()\n        .t_aco(\"to\")\n        .then_any_of(vec![\n            Box::new(SequenceExpr::default().then_kind_is_but_is_not_except(\n                TokenKind::is_punctuation,\n                |_| false,\n                &[\"`\", \"\\\"\", \"'\", \"“\", \"”\", \"‘\", \"’\"],\n            )),\n            Box::new(AnchorEnd),\n        ]);\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for ToTooPronounEnd {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let to_tok = tokens.iter().find(|t| {\n            t.span\n                .get_content(source)\n                .eq_ignore_ascii_case_chars(&['t', 'o'])\n        })?;\n\n        Some(Lint {\n            span: to_tok.span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"too\",\n                to_tok.span.get_content(source),\n            )],\n            message: \"Use `too` here to mean ‘also’ or an excessive degree.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Detects `to` after a pronoun at clause end (e.g., `Me to!`).\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/to_two_too/too_to.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::Token;\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::patterns::UPOSSet;\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct TooTo {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for TooTo {\n    fn default() -> Self {\n        let expr = SequenceExpr::aco(\"too\").t_ws().then(UPOSSet::new(&[\n            UPOS::NOUN,\n            UPOS::PRON,\n            UPOS::PROPN,\n            UPOS::VERB,\n            UPOS::DET,\n        ]));\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for TooTo {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let too_token = &matched_tokens[0];\n        let span = too_token.span;\n        let text = span.get_content(source);\n\n        if let Some(next_tok) = matched_tokens.get(2)\n            && next_tok.kind.is_upos(UPOS::VERB)\n            && !next_tok.kind.is_verb_lemma()\n        {\n            return None;\n        }\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![\n                Suggestion::replace_with_match_case(\"to\".chars().collect(), text)\n            ],\n            message: \"Use the infinitive marker `to` here instead of the adverb `too`, which indicates excess degree.\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Handles the transition from `too` -> `to`.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/touristic.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    expr::{Expr, LongestMatchOf, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]\npub enum SuggestionPreference {\n    /// Explicitly allow this suggestion\n    Allow,\n    /// Explicitly deny this suggestion\n    Deny,\n    /// Not explicitly allowed or denied\n    #[default]\n    Neutral,\n}\n\nuse SuggestionPreference::*;\n\npub struct Touristic {\n    expr: LongestMatchOf,\n}\n\n// \"touristy\" doesn't sound natural with these words\nconst BLACKLIST: &[&str] = &[\n    \"app\",\n    \"apps\",\n    \"data\",\n    \"content\",\n    \"establishment\",\n    \"establishments\",\n    \"info\",\n    \"information\",\n    \"interest\",\n    \"platform\",\n    \"platforms\",\n    \"service\",\n    \"services\",\n];\n\n// \"touristy\" sounds natural with these words\nconst WHITELIST: &[&str] = &[\n    \"activity\",\n    \"activities\",\n    \"area\",\n    \"areas\",\n    \"destination\",\n    \"destinations\",\n    \"location\",\n    \"locations\",\n    \"place\",\n    \"places\",\n    \"route\",\n    \"routes\",\n    \"spot\",\n    \"spots\",\n];\n\nimpl Default for Touristic {\n    fn default() -> Self {\n        let with_prev_and_next_word = SequenceExpr::any_word()\n            .t_ws()\n            .t_aco(\"touristic\")\n            .t_ws()\n            .then_any_word();\n\n        let with_prev_word = SequenceExpr::any_word().t_ws().t_aco(\"touristic\");\n\n        let with_next_word = SequenceExpr::default()\n            .t_aco(\"touristic\")\n            .t_ws()\n            .then_any_word();\n\n        let pattern = LongestMatchOf::new(vec![\n            Box::new(with_prev_and_next_word),\n            Box::new(with_prev_word),\n            Box::new(with_next_word),\n            Box::new(SequenceExpr::default().t_aco(\"touristic\")),\n        ]);\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for Touristic {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let tok_span_content_string = toks.span()?.get_content_string(src);\n        let tok_span_content_string = tok_span_content_string.to_lowercase();\n\n        let mut touristy_pref = Neutral;\n        let mut noun_forms_pref = Neutral;\n\n        let span_number = match (\n            toks.len(),\n            tok_span_content_string.starts_with(\"touristic \"),\n            tok_span_content_string.ends_with(\" touristic\"),\n        ) {\n            (1, _, _) => {\n                noun_forms_pref = Allow;\n                touristy_pref = Allow;\n                0\n            }\n            (3, true, false) => {\n                let next_word = toks[2].span.get_content_string(src);\n                let next_kind = &toks[2].kind;\n\n                if next_kind.is_noun() {\n                    if WHITELIST.contains(&next_word.as_str()) {\n                        touristy_pref = Allow;\n                    }\n                    if BLACKLIST.contains(&next_word.as_str()) {\n                        touristy_pref = Deny;\n                    }\n                }\n                0\n            }\n            (3, false, true) => {\n                let prev_kind = &toks[0].kind;\n                noun_forms_pref = if prev_kind.is_adjective() || prev_kind.is_linking_verb() {\n                    Deny\n                } else {\n                    Allow\n                };\n                2\n            }\n            (5, _, _) => {\n                let _prev_word = toks[0].span.get_content_string(src).to_lowercase();\n                let prev_kind = &toks[0].kind;\n                let next_word = toks[4].span.get_content_string(src).to_lowercase();\n                let next_kind = &toks[4].kind;\n\n                if prev_kind.is_adverb() {\n                    noun_forms_pref = Deny;\n                }\n\n                if next_kind.is_noun() {\n                    if WHITELIST.contains(&next_word.as_str()) {\n                        touristy_pref = Allow;\n                    }\n                    if BLACKLIST.contains(&next_word.as_str()) {\n                        touristy_pref = Deny;\n                    }\n                }\n\n                if next_kind.is_adjective() && !next_kind.is_noun() {\n                    noun_forms_pref = Deny;\n                    touristy_pref = Allow;\n                }\n                2\n            }\n            _ => return None,\n        };\n\n        let mut suggested = Vec::new();\n        if noun_forms_pref != Deny {\n            suggested.push(\"tourist\");\n            suggested.push(\"tourism\");\n        }\n        if touristy_pref != Deny {\n            suggested.push(\"touristy\");\n        }\n\n        let span = toks[span_number].span;\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: suggested\n                .into_iter()\n                .map(|s| Suggestion::replace_with_match_case_str(s, span.get_content(src)))\n                .collect(),\n            message: \"The word `touristic` is rarely used by native speakers.\".to_string(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Suggests replacing the uncommon word `touristic` with `tourist`, `tourism`, and/or `touristy`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::Touristic;\n    use crate::linting::tests::assert_good_and_bad_suggestions;\n\n    #[test]\n    fn fixes_touristic_alone() {\n        assert_good_and_bad_suggestions(\n            \"touristic\",\n            Touristic::default(),\n            &[\"tourist\", \"tourism\", \"touristy\"],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fixes_very_t() {\n        assert_good_and_bad_suggestions(\n            \"very touristic\",\n            Touristic::default(),\n            &[\"very touristy\"],\n            &[\"very tourist\", \"very tourism\"],\n        );\n    }\n\n    #[test]\n    fn fixes_t_location_good_and_bad() {\n        assert_good_and_bad_suggestions(\n            \"touristic location\",\n            Touristic::default(),\n            &[\"tourist location\", \"tourism location\", \"touristy location\"],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fixes_is_t() {\n        assert_good_and_bad_suggestions(\n            \"That place is touristic\",\n            Touristic::default(),\n            &[\"That place is touristy\"],\n            &[\"That place is tourist\", \"That place is tourism\"],\n        );\n    }\n\n    #[test]\n    fn fixes_t_information() {\n        assert_good_and_bad_suggestions(\n            \"The AI Touristic Information Tool for Liquid Galaxy is a Flutter-based Android tablet application that simplifies and enhances travel planning.\",\n            Touristic::default(),\n            &[\n                \"The AI Tourist Information Tool for Liquid Galaxy is a Flutter-based Android tablet application that simplifies and enhances travel planning.\",\n                \"The AI Tourism Information Tool for Liquid Galaxy is a Flutter-based Android tablet application that simplifies and enhances travel planning.\",\n            ],\n            &[\n                \"The AI Touristy Information Tool for Liquid Galaxy is a Flutter-based Android tablet application that simplifies and enhances travel planning.\",\n            ],\n        );\n    }\n\n    #[test]\n    fn fixes_t_data() {\n        assert_good_and_bad_suggestions(\n            \"Official API to access Apidae touristic data.\",\n            Touristic::default(),\n            &[\n                \"Official API to access Apidae tourist data.\",\n                \"Official API to access Apidae tourism data.\",\n            ],\n            &[\"Official API to access Apidae touristy data.\"],\n        );\n    }\n\n    #[test]\n    fn corrects_t_information_2() {\n        assert_good_and_bad_suggestions(\n            \"Oppidums is open source app that provide cultural, historical and touristic information on different cities.\",\n            Touristic::default(),\n            &[\n                \"Oppidums is open source app that provide cultural, historical and tourist information on different cities.\",\n                \"Oppidums is open source app that provide cultural, historical and tourism information on different cities.\",\n            ],\n            &[\n                \"Oppidums is open source app that provide cultural, historical and touristy information on different cities.\",\n            ],\n        );\n    }\n\n    #[test]\n    fn corrects_very_t_spot() {\n        assert_good_and_bad_suggestions(\n            \"The destination is a very touristic spot, many people visit this place at the weekend.\",\n            Touristic::default(),\n            &[\n                \"The destination is a very touristy spot, many people visit this place at the weekend.\",\n            ],\n            &[\n                \"The destination is a very tourist spot, many people visit this place at the weekend.\",\n                \"The destination is a very tourism spot, many people visit this place at the weekend.\",\n            ],\n        );\n    }\n\n    #[test]\n    #[ignore = \"Checks previous word but results depend on the next word\"]\n    fn fixes_t_platform() {\n        assert_good_and_bad_suggestions(\n            \"Incuti is touristic platform for African destinations.\",\n            Touristic::default(),\n            &[\n                \"Incuti is tourist platform for African destinations.\",\n                \"Incuti is tourism platform for African destinations.\",\n            ],\n            &[\"Incuti is touristy platform for African destinations.\"],\n        );\n    }\n\n    #[test]\n    fn fixes_t_service_providers() {\n        assert_good_and_bad_suggestions(\n            \"Onlim API is a tool that touristic service providers utilize to generate social media posts by injecting data about their offers into some templates.\",\n            Touristic::default(),\n            &[\n                \"Onlim API is a tool that tourist service providers utilize to generate social media posts by injecting data about their offers into some templates.\",\n                \"Onlim API is a tool that tourism service providers utilize to generate social media posts by injecting data about their offers into some templates.\",\n            ],\n            &[\n                \"Onlim API is a tool that touristy service providers utilize to generate social media posts by injecting data about their offers into some templates.\",\n            ],\n        );\n    }\n\n    #[test]\n    fn fixes_are_t_areas() {\n        assert_good_and_bad_suggestions(\n            \"We can determine that most of the busier areas are touristic areas, which in return helps with the high demand for the shared bikes.\",\n            Touristic::default(),\n            &[\n                \"We can determine that most of the busier areas are tourist areas, which in return helps with the high demand for the shared bikes.\",\n                \"We can determine that most of the busier areas are tourism areas, which in return helps with the high demand for the shared bikes.\",\n                \"We can determine that most of the busier areas are touristy areas, which in return helps with the high demand for the shared bikes.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fixes_very_t_area() {\n        assert_good_and_bad_suggestions(\n            \"This is Manhattan, a very popular, very touristic area of New York.\",\n            Touristic::default(),\n            &[\"This is Manhattan, a very popular, very touristy area of New York.\"],\n            &[\n                \"This is Manhattan, a very popular, very tourist area of New York.\",\n                \"This is Manhattan, a very popular, very tourism area of New York.\",\n            ],\n        );\n    }\n\n    #[test]\n    fn fixes_for_t_photographic() {\n        assert_good_and_bad_suggestions(\n            \"Python implementation of my clustering-based recommendation system for touristic photographic spots.\",\n            Touristic::default(),\n            &[\n                \"Python implementation of my clustering-based recommendation system for touristy photographic spots.\",\n            ],\n            &[\n                \"Python implementation of my clustering-based recommendation system for tourist photographic spots.\",\n                \"Python implementation of my clustering-based recommendation system for tourism photographic spots.\",\n            ],\n        );\n    }\n\n    #[test]\n    fn fixes_czech_t_routes() {\n        assert_good_and_bad_suggestions(\n            \"Management and Control Application for Czech Touristic Routes in OSM.\",\n            Touristic::default(),\n            &[\n                \"Management and Control Application for Czech Tourist Routes in OSM.\",\n                \"Management and Control Application for Czech Tourism Routes in OSM.\",\n                \"Management and Control Application for Czech Touristy Routes in OSM.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fixes_promote_t_activities() {\n        assert_good_and_bad_suggestions(\n            \"Application to promote touristic activities in Valencia.\",\n            Touristic::default(),\n            &[\n                \"Application to promote tourist activities in Valencia.\",\n                \"Application to promote tourism activities in Valencia.\",\n                \"Application to promote touristy activities in Valencia.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fixes_a_t_flutter() {\n        assert_good_and_bad_suggestions(\n            \"A Touristic Flutter App.\",\n            Touristic::default(),\n            &[\"A Tourist Flutter App.\", \"A Tourism Flutter App.\"],\n            &[\n                // \"app\" would be fine in the blacklist, but \"Flutter\" would be going too far\n                // \"A Touristy Flutter App.\",\n            ],\n        );\n    }\n\n    #[test]\n    fn fixes_of_t_interest() {\n        assert_good_and_bad_suggestions(\n            \"ARCHEO: a python lib for sound event detection in areas of touristic Interest.\",\n            Touristic::default(),\n            &[\n                \"ARCHEO: a python lib for sound event detection in areas of tourist Interest.\",\n                \"ARCHEO: a python lib for sound event detection in areas of tourism Interest.\",\n            ],\n            &[\"ARCHEO: a python lib for sound event detection in areas of touristy Interest.\"],\n        );\n    }\n\n    #[test]\n    fn fixes_t_establishments() {\n        assert_good_and_bad_suggestions(\n            \"Touristic establishments by EUROSTAT NUTS regions.\",\n            Touristic::default(),\n            &[\n                \"Tourist establishments by EUROSTAT NUTS regions.\",\n                \"Tourism establishments by EUROSTAT NUTS regions.\",\n            ],\n            &[\"Touristy establishments by EUROSTAT NUTS regions.\"],\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/transposed_space.rs",
    "content": "use crate::{\n    Lint, Token, TokenStringExt,\n    expr::{Expr, FirstMatchOf, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    spell::Dictionary,\n};\n\npub struct TransposedSpace<D: Dictionary + 'static> {\n    expr: FirstMatchOf,\n    dict: D,\n}\n\nimpl<D: Dictionary + 'static> TransposedSpace<D> {\n    pub fn new(dict: D) -> Self {\n        Self {\n            expr: FirstMatchOf::new(vec![Box::new(\n                SequenceExpr::default().then_oov().t_ws().then_oov(),\n            )]),\n            dict,\n        }\n    }\n\n    pub fn sensitive(dict: D) -> Self {\n        Self {\n            expr: FirstMatchOf::new(vec![\n                Box::new(SequenceExpr::default().then_oov().t_ws().then_any_word()),\n                Box::new(SequenceExpr::any_word().t_ws().then_oov()),\n                Box::new(SequenceExpr::default().then_oov().t_ws().then_oov()),\n            ]),\n            dict,\n        }\n    }\n}\n\nfn keep_unique(values: &mut Vec<String>, word1: &[char], word2: &[char]) {\n    let value = format!(\n        \"{} {}\",\n        word1.iter().collect::<String>(),\n        word2.iter().collect::<String>()\n    );\n    if !values.contains(&value) {\n        values.push(value);\n    }\n}\n\nimpl<D: Dictionary + 'static> ExprLinter for TransposedSpace<D> {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let toks_span = toks.span()?;\n\n        // \"thec\" \"at\" / \"th ecat\"\n        let word1 = toks.first()?.span.get_content(src);\n        let word2 = toks.last()?.span.get_content(src);\n\n        // \"thec\" -> \"the c\"\n        let w1_start = &word1[..word1.len() - 1];\n        let w1_last = word1.iter().last()?;\n\n        // \"ecat\" -> \"e cat\"\n        let w2_first = word2.first()?;\n        let w2_end = &word2[1..];\n\n        // \"c\" + \"at\" -> \"cat\"\n        let mut w1_last_plus_w2 = word2.to_vec();\n        w1_last_plus_w2.insert(0, *w1_last);\n\n        // \"th\" + \"e\" -> \"the\"\n        let mut w1_plus_w2_first = word1.to_vec();\n        w1_plus_w2_first.push(*w2_first);\n\n        let mut values = vec![];\n\n        // \"thec\" \"at\" -> \"the cat\"\n        if self.dict.contains_word(w1_start) && self.dict.contains_word(&w1_last_plus_w2) {\n            let maybe_canon_w2 = self.dict.get_correct_capitalization_of(&w1_last_plus_w2);\n            if let Some(canon_w1) = self.dict.get_correct_capitalization_of(w1_start) {\n                if let Some(canon_w2) = maybe_canon_w2 {\n                    keep_unique(&mut values, canon_w1, canon_w2);\n                } else {\n                    keep_unique(&mut values, canon_w1, &w1_last_plus_w2);\n                }\n            } else if let Some(canon_w2) = maybe_canon_w2 {\n                keep_unique(&mut values, w1_start, canon_w2);\n            }\n\n            keep_unique(&mut values, w1_start, &w1_last_plus_w2);\n        }\n\n        // \"th\" \"ecat\" -> \"the cat\"\n        if self.dict.contains_word(&w1_plus_w2_first) && self.dict.contains_word(w2_end) {\n            let maybe_canon_w2 = self.dict.get_correct_capitalization_of(w2_end);\n            if let Some(canon_w1) = self.dict.get_correct_capitalization_of(&w1_plus_w2_first) {\n                if let Some(canon_w2) = maybe_canon_w2 {\n                    keep_unique(&mut values, canon_w1, canon_w2);\n                } else {\n                    keep_unique(&mut values, canon_w1, w2_end);\n                }\n            } else if let Some(canon_w2) = maybe_canon_w2 {\n                keep_unique(&mut values, &w1_plus_w2_first, canon_w2);\n            }\n\n            keep_unique(&mut values, &w1_plus_w2_first, w2_end);\n        }\n\n        if values.is_empty() {\n            return None;\n        }\n\n        let suggestions = values\n            .iter()\n            .map(|value| {\n                Suggestion::replace_with_match_case(\n                    value.chars().collect(),\n                    toks_span.get_content(src),\n                )\n            })\n            .collect();\n\n        Some(Lint {\n            span: toks_span,\n            lint_kind: LintKind::Typo,\n            suggestions,\n            message: format!(\n                \"Is the space between `{}` and `{}` one character out of place?\",\n                word1.iter().collect::<String>(),\n                word2.iter().collect::<String>()\n            ),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Looks for a space one character too early or too late between words.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::TransposedSpace;\n    use crate::{linting::tests::assert_suggestion_result, spell::FstDictionary};\n\n    #[test]\n    fn space_too_early() {\n        assert_suggestion_result(\n            \"Th ecat sat on the mat.\",\n            TransposedSpace::sensitive(FstDictionary::curated()),\n            \"The cat sat on the mat.\",\n        );\n    }\n\n    #[test]\n    fn space_too_late() {\n        assert_suggestion_result(\n            \"Thec at sat on the mat.\",\n            TransposedSpace::sensitive(FstDictionary::curated()),\n            \"The cat sat on the mat.\",\n        );\n    }\n\n    #[test]\n    fn test_early() {\n        assert_suggestion_result(\n            \"Sometimes the spac eis one character early.\",\n            TransposedSpace::new(FstDictionary::curated()),\n            \"Sometimes the space is one character early.\",\n        );\n    }\n    #[test]\n    fn test_late() {\n        assert_suggestion_result(\n            \"Ands ometimes the space is a character late.\",\n            TransposedSpace::new(FstDictionary::curated()),\n            \"And sometimes the space is a character late.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/try_ones_hand_at.rs",
    "content": "use crate::{\n    Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\npub struct TryOnesHandAt {\n    expr: SequenceExpr,\n}\n\nimpl Default for TryOnesHandAt {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"try\", \"tried\", \"tries\", \"trying\"])\n                .t_ws()\n                .then_possessive_determiner()\n                .t_ws()\n                .t_aco(\"hands\")\n                .t_ws()\n                .t_aco(\"at\"),\n        }\n    }\n}\n\nimpl ExprLinter for TryOnesHandAt {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let hands_idx = 4;\n        let hands_tok = toks.get(hands_idx)?;\n        let hands_span = hands_tok.span;\n        let hands_chars = hands_span.get_content(src);\n\n        Some(Lint {\n            span: hands_span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                vec!['h', 'a', 'n', 'd'],\n                hands_chars,\n            )],\n            message: \"This idiom uses the singular `hand`.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `try one's hands at` to `try one's hand at`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::TryOnesHandAt;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn fix_tried_my() {\n        assert_suggestion_result(\n            \"I tried my hands at a little test to see how different parameters I get for the same deck and the same material.\",\n            TryOnesHandAt::default(),\n            \"I tried my hand at a little test to see how different parameters I get for the same deck and the same material.\",\n        )\n    }\n\n    #[test]\n    fn fix_tried_their() {\n        assert_suggestion_result(\n            \"If there isn't any obvious reason why no one has tried their hands at it yet, I might try implementing it.\",\n            TryOnesHandAt::default(),\n            \"If there isn't any obvious reason why no one has tried their hand at it yet, I might try implementing it.\",\n        )\n    }\n\n    #[test]\n    fn fix_tries_his() {\n        assert_suggestion_result(\n            \"A fellow programmer from India who tries his hands at everything he can.\",\n            TryOnesHandAt::default(),\n            \"A fellow programmer from India who tries his hand at everything he can.\",\n        )\n    }\n\n    #[test]\n    fn fix_try_my() {\n        assert_suggestion_result(\n            \"I am happy to try my hands at implementing one, but not being that proficient in C/C++ need some guidance on where to start.\",\n            TryOnesHandAt::default(),\n            \"I am happy to try my hand at implementing one, but not being that proficient in C/C++ need some guidance on where to start.\",\n        )\n    }\n\n    #[test]\n    fn fix_try_our() {\n        assert_suggestion_result(\n            \"One way to make some of the requirements for this more concrete is to try our hands at implementing a language server.\",\n            TryOnesHandAt::default(),\n            \"One way to make some of the requirements for this more concrete is to try our hand at implementing a language server.\",\n        )\n    }\n\n    #[test]\n    fn fix_try_their() {\n        assert_suggestion_result(\n            \"At the end the user will be able to create a list of decimal numbers to try their hands at the Diagonal Argument on their own.\",\n            TryOnesHandAt::default(),\n            \"At the end the user will be able to create a list of decimal numbers to try their hand at the Diagonal Argument on their own.\",\n        )\n    }\n\n    #[test]\n    fn fix_try_your() {\n        assert_suggestion_result(\n            \"You'll likely need to try your hands at a bit of Lua to make it work.\",\n            TryOnesHandAt::default(),\n            \"You'll likely need to try your hand at a bit of Lua to make it work.\",\n        )\n    }\n\n    #[test]\n    fn fix_trying_my() {\n        assert_suggestion_result(\n            \"I wouldn't mind trying my hands at a PR if the solution would be accepted.\",\n            TryOnesHandAt::default(),\n            \"I wouldn't mind trying my hand at a PR if the solution would be accepted.\",\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/unclosed_quotes.rs",
    "content": "use super::{Lint, LintKind, Linter};\nuse crate::document::Document;\nuse crate::{Punctuation, Quote, TokenKind};\n\n#[derive(Debug, Clone, Copy, Default)]\npub struct UnclosedQuotes;\n\nimpl Linter for UnclosedQuotes {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        // TODO: Try zipping quote positions\n        for token in document.tokens() {\n            if let TokenKind::Punctuation(Punctuation::Quote(Quote { twin_loc: None })) = token.kind\n            {\n                lints.push(Lint {\n                    span: token.span,\n                    lint_kind: LintKind::Formatting,\n                    suggestions: vec![],\n                    message: \"This quote has no termination.\".to_string(),\n                    priority: 255,\n                })\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &'static str {\n        \"Quotation marks should always be closed. Unpaired quotation marks are a hallmark of sloppy work.\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/update_place_names.rs",
    "content": "use crate::expr::{Expr, FixedPhrase, LongestMatchOf};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, LintKind, Suggestion};\nuse crate::{Lint, Token, TokenStringExt};\n\ntype PlaceNameMappings<'a> = &'a [((i16, &'a str), &'a [&'a str])];\n\npub struct UpdatePlaceNames<'a> {\n    expr: LongestMatchOf,\n    place_name_mappings: PlaceNameMappings<'a>,\n}\n\nimpl<'a> Default for UpdatePlaceNames<'a> {\n    fn default() -> Self {\n        let place_name_mappings: PlaceNameMappings<'a> = &[\n            // // Africa\n            ((1984, \"Burkina Faso\"), &[\"Upper Volta\"]),\n            ((1985, \"Côte d'Ivoire\"), &[\"Ivory Coast\"]), // TODO: Can we recommend Cote d'Ivoire as well?\n            ((2018, \"Eswatini\"), &[\"Swaziland\"]),\n            // ((1995, \"Janjanbureh\"), &[\"Georgetown\"]), // Too many places named Georgetown / George Town\n            // Australia\n            ((1993, \"Kata Tjuta\"), &[\"The Olgas\"]), // TODO: Can we recommend the spelling with the underscore letter(s) as well?\n            ((1993, \"Uluru\"), &[\"Ayers Rock\"]), // TODO: Can we recommend the spelling with the underscore letter as well?\n            // Central Asia\n            ((1961, \"Dushanbe\"), &[\"Stalinabad\"]),\n            // East Asia\n            ((1979, \"Beijing\"), &[\"Peking\"]),\n            ((0, \"Guangzhou\"), &[\"Canton\"]),\n            ((1945, \"Taiwan\"), &[\"Formosa\"]),\n            ((1991, \"Ulaanbaatar\"), &[\"Ulan Bator\"]),\n            // Europe (and nearby)\n            ((1945, \"Gdańsk\"), &[\"Danzig\"]), // TODO: Can we recommend Gdansk as well?\n            ((1992, \"Podgorica\"), &[\"Titograd\"]),\n            ((1936, \"Tbilisi\"), &[\"Tiflis\"]),\n            ((2022, \"Türkiye\"), &[\"Turkey\"]), // TODO: Can we recommend Turkiye as well?\n            // India\n            ((2006, \"Bengaluru\"), &[\"Bangalore\"]),\n            ((1996, \"Chennai\"), &[\"Madras\"]),\n            ((2007, \"Kochi\"), &[\"Cochin\"]),\n            ((2001, \"Kolkata\"), &[\"Calcutta\"]),\n            ((1995, \"Mumbai\"), &[\"Bombay\"]),\n            ((2014, \"Mysuru\"), &[\"Mysore\"]),\n            ((2006, \"Puducherry\"), &[\"Pondicherry\"]),\n            ((1978, \"Pune\"), &[\"Poona\"]),\n            ((1991, \"Thiruvananthapuram\"), &[\"Trivandrum\"]),\n            // Latin America\n            ((2013, \"CDMX\"), &[\"DF\"]),\n            // Pacific Island nations\n            ((1997, \"Samoa\"), &[\"Western Samoa\"]),\n            ((1980, \"Vanuatu\"), &[\"New Hebrides\"]),\n            // Russia\n            ((1946, \"Kaliningrad\"), &[\"Königsberg\"]), // TODO: can we handle Konigsberg and Koenigsberg?\n            ((1991, \"Saint Petersburg\"), &[\"Leningrad\", \"Petrograd\"]), // TODO: can we add St. Petersburg?\n            ((1961, \"Volgograd\"), &[\"Stalingrad\"]),\n            // South Asia\n            ((2000, \"Busan\"), &[\"Pusan\"]),\n            ((2018, \"Chattogram\"), &[\"Chittagong\"]),\n            ((1982, \"Dhaka\"), &[\"Dacca\"]),\n            ((1972, \"Sri Lanka\"), &[\"Ceylon\"]),\n            // Southeast Asia\n            ((1989, \"Cambodia\"), &[\"Kampuchea\"]),\n            ((1976, \"Ho Chi Minh City\"), &[\"Saigon\"]),\n            ((2017, \"Melaka\"), &[\"Malacca\"]),\n            ((1989, \"Myanmar\"), &[\"Burma\"]),\n            ((1939, \"Thailand\"), &[\"Siam\"]),\n            ((2002, \"Timor-Leste\"), &[\"East Timor\"]),\n            ((1989, \"Yangon\"), &[\"Rangoon\"]),\n            // Ukraine\n            ((1992, \"Kharkiv\"), &[\"Kharkov\"]),\n            ((1992, \"Kyiv\"), &[\"Kiev\"]),\n            ((1992, \"Luhansk\"), &[\"Lugansk\"]),\n            ((1992, \"Lviv\"), &[\"Lvov\"]),\n            ((1992, \"Odesa\"), &[\"Odessa\"]),\n            ((1992, \"Vinnytsia\"), &[\"Vinnitsa\"]),\n            ((1992, \"Zaporizhzhia\"), &[\"Zaporozhye\"]),\n        ];\n\n        let expr = LongestMatchOf::new(\n            place_name_mappings\n                .iter()\n                .flat_map(|(_, old_names)| old_names.iter())\n                .map(|old_name| Box::new(FixedPhrase::from_phrase(old_name)) as Box<dyn Expr>)\n                .collect(),\n        );\n\n        Self::new(expr, place_name_mappings)\n    }\n}\n\nimpl<'a> UpdatePlaceNames<'a> {\n    pub fn new(expr: LongestMatchOf, place_name_mappings: PlaceNameMappings<'a>) -> Self {\n        Self {\n            expr,\n            place_name_mappings,\n        }\n    }\n}\n\nimpl<'a> ExprLinter for UpdatePlaceNames<'a> {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let old_name = toks.span()?.get_content_string(src);\n        let (year, new_name) =\n            self.place_name_mappings\n                .iter()\n                .find_map(|((year, new_name), old_names)| {\n                    old_names\n                        .iter()\n                        .any(|n| n == &old_name)\n                        .then_some((year, *new_name))\n                })?;\n\n        let suggestions = vec![Suggestion::ReplaceWith(new_name.chars().collect())];\n\n        let message = match year {\n            1.. => format!(\"This place has been officially known as '{new_name}' since {year}\"),\n            _ => format!(\"This place is now officially known as '{new_name}'\"),\n        };\n\n        Some(Lint {\n            span: toks.span()?,\n            lint_kind: LintKind::WordChoice,\n            suggestions,\n            message,\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"This rule looks for deprecated place names and offers to update them.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::{\n        tests::{assert_lint_count, assert_suggestion_result},\n        update_place_names::UpdatePlaceNames,\n    };\n\n    #[test]\n    fn update_single_word_name_alone() {\n        assert_suggestion_result(\"Bombay\", UpdatePlaceNames::default(), \"Mumbai\");\n    }\n\n    #[test]\n    fn update_single_word_name_after_space() {\n        assert_suggestion_result(\" Bombay\", UpdatePlaceNames::default(), \" Mumbai\");\n    }\n\n    #[test]\n    fn update_single_word_name_after_punctuation() {\n        assert_suggestion_result(\";Bombay\", UpdatePlaceNames::default(), \";Mumbai\");\n    }\n\n    #[test]\n    fn update_two_word_name_to_single_word_alone() {\n        assert_suggestion_result(\"Ayers Rock\", UpdatePlaceNames::default(), \"Uluru\");\n    }\n\n    #[test]\n    fn update_two_word_name_to_single_word_after_space() {\n        assert_suggestion_result(\" Ayers Rock\", UpdatePlaceNames::default(), \" Uluru\");\n    }\n\n    #[test]\n    fn update_two_word_name_to_single_word_after_punctuation() {\n        assert_suggestion_result(\";Ayers Rock\", UpdatePlaceNames::default(), \";Uluru\");\n    }\n\n    #[test]\n    fn update_single_word_name_to_multi_word_name_alone() {\n        assert_suggestion_result(\"Saigon\", UpdatePlaceNames::default(), \"Ho Chi Minh City\");\n    }\n\n    #[test]\n    fn update_two_word_name_to_two_word_name_alone() {\n        assert_suggestion_result(\"The Olgas\", UpdatePlaceNames::default(), \"Kata Tjuta\");\n    }\n\n    #[test]\n    fn dont_flag_multiword_name_with_non_space() {\n        assert_lint_count(\"The, Olgas\", UpdatePlaceNames::default(), 0);\n    }\n\n    #[test]\n    fn dont_flag_multiword_name_with_hyphen() {\n        assert_lint_count(\"The-Olgas\", UpdatePlaceNames::default(), 0);\n    }\n\n    // TODO: when both old and new names contain whitespace we don't copy the whitespace\n    #[test]\n    #[ignore = \"tabs not supported as whitespace?\"]\n    fn flag_multiword_name_with_tabs() {\n        assert_lint_count(\"The\\tOlgas\", UpdatePlaceNames::default(), 1);\n    }\n\n    // TODO: when both old and new names contain whitespace we don't copy the whitespace\n    #[test]\n    #[ignore = \"newlines not supported as whitespace?\"]\n    fn flag_multiword_name_with_newline() {\n        assert_lint_count(\"The\\nOlgas\", UpdatePlaceNames::default(), 1);\n    }\n\n    #[test]\n    fn update_two_word_name_to_single_word_at_end_of_sentence() {\n        assert_suggestion_result(\n            \"It's dangerous to climb Ayers Rock.\",\n            UpdatePlaceNames::default(),\n            \"It's dangerous to climb Uluru.\",\n        );\n    }\n\n    #[test]\n    fn update_two_word_name_to_single_word_at_start_of_sentence() {\n        assert_suggestion_result(\n            \"Ayers Rock is dangerous to climb.\",\n            UpdatePlaceNames::default(),\n            \"Uluru is dangerous to climb.\",\n        );\n    }\n\n    #[test]\n    fn update_first_old_name() {\n        assert_suggestion_result(\"Leningrad\", UpdatePlaceNames::default(), \"Saint Petersburg\");\n    }\n\n    #[test]\n    fn update_second_old_name() {\n        assert_suggestion_result(\n            \"Have you ever been to Petrograd before?\",\n            UpdatePlaceNames::default(),\n            \"Have you ever been to Saint Petersburg before?\",\n        );\n    }\n\n    #[test]\n    fn update_two_word_name_with_two_word_name() {\n        assert_suggestion_result(\n            \"Upper Volta is in Africa.\",\n            UpdatePlaceNames::default(),\n            \"Burkina Faso is in Africa.\",\n        )\n    }\n\n    #[test]\n    fn dont_flag_czech_republic() {\n        assert_lint_count(\n            \"The Czech Republic is in Europe.\",\n            UpdatePlaceNames::default(),\n            0,\n        );\n    }\n\n    // NOTE: Can't handle place names with obligatory or compulsory \"The\" perfectly.\n    #[test]\n    fn update_to_name_with_punctuation() {\n        assert_suggestion_result(\n            \"I've never been to Ivory Coast.\",\n            UpdatePlaceNames::default(),\n            \"I've never been to Côte d'Ivoire.\",\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/use_title_case.rs",
    "content": "use crate::{Document, TokenStringExt, spell::Dictionary, title_case::try_make_title_case};\n\nuse super::{Lint, LintKind, Linter, Suggestion};\n\npub struct UseTitleCase<D: Dictionary + 'static> {\n    dict: D,\n}\n\nimpl<D: Dictionary + 'static> UseTitleCase<D> {\n    pub fn new(dict: D) -> Self {\n        Self { dict }\n    }\n}\n\nimpl<D: Dictionary + 'static> Linter for UseTitleCase<D> {\n    fn lint(&mut self, document: &Document) -> Vec<Lint> {\n        let mut lints = Vec::new();\n\n        for heading in document.iter_headings() {\n            let Some(span) = heading.span() else {\n                continue;\n            };\n\n            if let Some(title_case) =\n                try_make_title_case(heading, document.get_source(), &self.dict)\n            {\n                lints.push(Lint {\n                    span,\n                    lint_kind: LintKind::Capitalization,\n                    suggestions: vec![Suggestion::ReplaceWith(title_case)],\n                    message: \"Try to use title case in headings.\".to_owned(),\n                    priority: 127,\n                });\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"Prompts you to use title case in relevant headings.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_markdown_suggestion_result, assert_no_lints};\n    use crate::spell::FstDictionary;\n\n    use super::UseTitleCase;\n\n    #[test]\n    fn simple_correction() {\n        assert_markdown_suggestion_result(\n            \"# This is a title\",\n            UseTitleCase::new(FstDictionary::curated()),\n            \"# This Is a Title\",\n        );\n    }\n\n    #[test]\n    fn double_correction() {\n        assert_markdown_suggestion_result(\n            \"# This is a title\\n\\n## This is a subtitle\",\n            UseTitleCase::new(FstDictionary::curated()),\n            \"# This Is a Title\\n\\n## This Is a Subtitle\",\n        );\n    }\n\n    #[test]\n    fn doesnt_lowercase_this_in_github_template_title() {\n        assert_no_lints(\n            \"# How Has This Been Tested?\",\n            UseTitleCase::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn shoud_uppercase_possessive_determiners() {\n        assert_markdown_suggestion_result(\n            \"# my/our/your/his/her/its/their\",\n            UseTitleCase::new(FstDictionary::curated()),\n            \"# My/Our/Your/His/Her/Its/Their\",\n        );\n    }\n\n    #[test]\n    fn ignores_leading_number_list_marker_in_heading() {\n        assert_no_lints(\n            \"### 1. To Do a Thing\",\n            UseTitleCase::new(FstDictionary::curated()),\n        );\n    }\n\n    #[test]\n    fn still_fixes_non_first_small_words_after_leading_number() {\n        assert_markdown_suggestion_result(\n            \"### 1. To do a thing\",\n            UseTitleCase::new(FstDictionary::curated()),\n            \"### 1. To Do a Thing\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/verb_to_adjective.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::patterns::WordSet;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind};\nuse crate::linting::expr_linter::Chunk;\n\npub struct VerbToAdjective {\n    expr: SequenceExpr,\n}\n\nimpl Default for VerbToAdjective {\n    fn default() -> Self {\n        let expr = SequenceExpr::word_set(&[\"the\", \"a\", \"an\"])\n            .t_ws()\n            .then_kind_where(|kind| kind.is_degree_adverb())\n            .t_ws()\n            .then_kind_where(|kind| kind.is_noun() && kind.is_verb_progressive_form())\n            .t_ws()\n            .then(WordSet::new(&[\"of\"]));\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for VerbToAdjective {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let words: Vec<_> = matched_tokens\n            .iter()\n            .filter(|tok| tok.kind.is_word())\n            .collect();\n        let [_, adverb, noun, _] = words.as_slice() else {\n            return None;\n        };\n\n        Some(Lint {\n            span: matched_tokens.span()?,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![],\n            message: format!(\n                \"`{}` is an adverb. Before the noun `{}`, this phrase more likely needs an adjective.\",\n                adverb.span.get_content_string(source),\n                noun.span.get_content_string(source),\n            ),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Looks for article-led gerund noun phrases like `a fully accounting of`, where an adjective is more likely than an adverb.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::{assert_lint_count, assert_lint_message, assert_no_lints};\n\n    use super::VerbToAdjective;\n\n    fn assert_each_lints(cases: &[&str]) {\n        for case in cases {\n            assert_lint_count(case, VerbToAdjective::default(), 1);\n        }\n    }\n\n    fn assert_each_no_lints(cases: &[&str]) {\n        for case in cases {\n            assert_no_lints(case, VerbToAdjective::default());\n        }\n    }\n\n    #[test]\n    fn flags_issue_2855_and_similar_gerund_noun_phrases() {\n        assert_each_lints(&[\n            \"By scheduling time to do a fully accounting of where your CPU cycles are going, you can preemptively save yourself (and your contributors) a lot of time.\",\n            \"We need a fully understanding of the risk before launch.\",\n            \"The mockup offered a fully rendering of the scene.\",\n            \"An entirely recording of the hearing was never released.\",\n            \"The appendix contained a completely listing of every exception.\",\n            \"The report ended with a highly framing of the debate.\",\n            \"A fully mapping of the cave is still useful to explorers.\",\n            \"The board requested a truly accounting of the losses.\",\n        ]);\n    }\n\n    #[test]\n    fn message_points_to_the_adverb_and_noun() {\n        assert_lint_message(\n            \"We need a fully understanding of the risk before launch.\",\n            VerbToAdjective::default(),\n            \"`fully` is an adverb. Before the noun `understanding`, this phrase more likely needs an adjective.\",\n        );\n    }\n\n    #[test]\n    fn allows_the_issue_2855_regressions() {\n        assert_each_no_lints(&[\n            \"South Korea Set To Get a Fully Functioning Google Maps integration.\",\n            \"This allows our clients to embrace a truly data-driven approach.\",\n            \"Before he could press the transmit button, the sphere emitted a high-pitched whine.\",\n            \"The target of coordinated, algorithmic pursuit kept moving.\",\n            \"A fully functioning prototype shipped yesterday.\",\n            \"A truly remarkable outcome followed.\",\n            \"A completely different problem remains.\",\n            \"A fully rendered image loaded instantly.\",\n        ]);\n    }\n\n    #[test]\n    fn allows_correct_adjective_plus_gerund_noun_of_phrases() {\n        assert_each_no_lints(&[\n            \"We need a full understanding of the risk before launch.\",\n            \"The audit delivered a full accounting of the losses.\",\n            \"The appendix included a complete listing of the requirements.\",\n            \"The demo provided a detailed rendering of the scene.\",\n            \"They archived a proper recording of the interview.\",\n            \"The memo offered a clear framing of the issue.\",\n            \"The atlas provides a partial mapping of the cave.\",\n            \"The exhibit included the recording of the speech.\",\n        ]);\n    }\n\n    #[test]\n    fn allows_nonmatching_determiner_phrases_and_previous_regressions() {\n        assert_each_no_lints(&[\n            \"I really like my new car.\",\n            \"I want you to write a new sentence for me.\",\n            \"Ensure the correct term is used for individuals residing abroad.\",\n            \"It is something that causes amazement.\",\n            \"Can you suggest a correct auxiliary?\",\n            \"This is the email address that will receive the submitted form data.\",\n            \"Not the unexplored territories, ripe for discovery, but the areas actively erased, obscured, or simply deemed unworthy of representation?\",\n            \"A local mapping service is sufficient here.\",\n            \"The transmit queue drained normally.\",\n            \"A mostly accurate summary is still useful.\",\n        ]);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/very_unique.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct VeryUnique {\n    expr: SequenceExpr,\n}\n\nimpl Default for VeryUnique {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\n                \"fairly\", \"pretty\", \"rather\", \"quite\", \"somewhat\", \"very\",\n            ])\n            .t_ws()\n            .t_aco(\"unique\"),\n        }\n    }\n}\n\nimpl ExprLinter for VeryUnique {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let very_unique_span = toks.span()?;\n        let very_unique_chars = very_unique_span.get_content(src);\n        let qualifier_tok = &toks.first()?;\n        let qualifier_str = qualifier_tok.span.get_content_string(src);\n\n        let adjectives = [\"special\", \"rare\", \"unusual\"];\n\n        let suggestions = adjectives\n            .iter()\n            .map(|adj| {\n                Suggestion::replace_with_match_case(\n                    format!(\"{qualifier_str} {adj}\").chars().collect(),\n                    very_unique_chars,\n                )\n            })\n            .chain(std::iter::once(Suggestion::replace_with_match_case(\n                \"unique\".chars().collect(),\n                very_unique_chars,\n            )))\n            .collect::<Vec<_>>();\n\n        Some(Lint {\n            span: very_unique_span,\n            lint_kind: LintKind::WordChoice,\n            suggestions,\n            message: \"`Unique` is absolute, so consider using `unique` alone or a more precise adjective such as `special`, `rare`, or `unusual`.\".to_string(),\n            priority: 57,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Flags phrases like `very unique`, `pretty unique`, etc., and suggests using `unique` alone or a more precise adjective such as `special`, `rare`, or `unusual`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::VeryUnique;\n    use crate::linting::tests::{assert_good_and_bad_suggestions, assert_suggestion_result};\n\n    #[test]\n    fn fix_very_unique() {\n        assert_good_and_bad_suggestions(\n            \"I'm not sure whether Llama Stack or ollama are generating the chat completion ids, but they are not very unique.\",\n            VeryUnique::default(),\n            &[\n                \"I'm not sure whether Llama Stack or ollama are generating the chat completion ids, but they are not unique.\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_pretty_unique() {\n        assert_suggestion_result(\n            \"Numerous accounts with my exact full name/surname (which is pretty unique) has been created (most recently).\",\n            VeryUnique::default(),\n            \"Numerous accounts with my exact full name/surname (which is pretty rare) has been created (most recently).\",\n        );\n    }\n\n    #[test]\n    fn fix_fairly_unique() {\n        assert_good_and_bad_suggestions(\n            \"In browsers, the first chars are obtained from the user agent string (which is fairly unique), and the supported mimeTypes\",\n            VeryUnique::default(),\n            &[\n                \"In browsers, the first chars are obtained from the user agent string (which is unique), and the supported mimeTypes\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_somewhat_unique() {\n        assert_suggestion_result(\n            \"A new pack of somewhat unique upgrades for R.E.P.O.!\",\n            VeryUnique::default(),\n            \"A new pack of somewhat unusual upgrades for R.E.P.O.!\",\n        );\n    }\n\n    #[test]\n    fn fix_quite_unique() {\n        assert_good_and_bad_suggestions(\n            \"Now I understand that this is quite unique to insta and if it's not useful I am also going to investigate alternatives\",\n            VeryUnique::default(),\n            &[\n                \"Now I understand that this is unique to insta and if it's not useful I am also going to investigate alternatives\",\n            ],\n            &[],\n        );\n    }\n\n    #[test]\n    fn fix_rather_unique() {\n        assert_suggestion_result(\n            \"I regret using the Vue compiler because the resulting AST is rather unique.\",\n            VeryUnique::default(),\n            \"I regret using the Vue compiler because the resulting AST is rather unusual.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/vice_versa.rs",
    "content": "use crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::{Token, TokenStringExt};\n\nfn matches_hyphen(token: &Token, _source: &[char]) -> bool {\n    token.kind.is_hyphen()\n}\n\nfn replacement_for(template: &[char]) -> Vec<char> {\n    let mut replacement = \"vice versa\".chars().collect::<Vec<_>>();\n\n    let mut has_upper = false;\n    let mut has_lower = false;\n    let mut first_alpha_upper = None;\n\n    for ch in template.iter().copied() {\n        if !ch.is_alphabetic() {\n            continue;\n        }\n\n        has_upper |= ch.is_uppercase();\n        has_lower |= ch.is_lowercase();\n\n        if first_alpha_upper.is_none() {\n            first_alpha_upper = Some(ch.is_uppercase());\n        }\n    }\n\n    if has_upper && !has_lower {\n        for ch in replacement.iter_mut() {\n            if ch.is_alphabetic() {\n                *ch = ch.to_ascii_uppercase();\n            }\n        }\n\n        return replacement;\n    }\n\n    if !has_upper {\n        return replacement;\n    }\n\n    if first_alpha_upper.unwrap_or(false) {\n        let mut capitalized_first = false;\n\n        for ch in replacement.iter_mut() {\n            if !ch.is_alphabetic() {\n                continue;\n            }\n\n            if !capitalized_first {\n                *ch = ch.to_ascii_uppercase();\n                capitalized_first = true;\n            } else {\n                *ch = ch.to_ascii_lowercase();\n            }\n        }\n\n        return replacement;\n    }\n\n    for ch in replacement.iter_mut() {\n        if ch.is_alphabetic() {\n            *ch = ch.to_ascii_lowercase();\n        }\n    }\n\n    replacement\n}\n\npub struct ViceVersa {\n    expr: SequenceExpr,\n}\n\nimpl Default for ViceVersa {\n    fn default() -> Self {\n        let expr = SequenceExpr::word_set(&[\"vice\", \"vise\"])\n            .then(matches_hyphen)\n            .then_optional(SequenceExpr::aco(\"a\").then(matches_hyphen))\n            .t_aco(\"versa\");\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for ViceVersa {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let template = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Punctuation,\n            suggestions: vec![Suggestion::ReplaceWith(replacement_for(template))],\n            message: \"The expression \\\"vice versa\\\" is spelled without hyphens.\".to_owned(),\n            priority: 60,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Recommends writing ‘vice versa’ without hyphens.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ViceVersa;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_basic_hyphenated() {\n        assert_suggestion_result(\n            \"We swapped the arguments vice-versa this time.\",\n            ViceVersa::default(),\n            \"We swapped the arguments vice versa this time.\",\n        );\n    }\n\n    #[test]\n    fn corrects_leading_capitalization() {\n        assert_suggestion_result(\n            \"Vice-Versa, the movie, was interesting.\",\n            ViceVersa::default(),\n            \"Vice versa, the movie, was interesting.\",\n        );\n    }\n\n    #[test]\n    fn corrects_all_caps() {\n        assert_suggestion_result(\n            \"They agreed VICE-VERSA on the clause.\",\n            ViceVersa::default(),\n            \"They agreed VICE VERSA on the clause.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_extra_a() {\n        assert_suggestion_result(\n            \"The logic works vice-a-versa as well.\",\n            ViceVersa::default(),\n            \"The logic works vice versa as well.\",\n        );\n    }\n\n    #[test]\n    fn corrects_vise_variant() {\n        assert_suggestion_result(\n            \"The rule applies vise-versa too.\",\n            ViceVersa::default(),\n            \"The rule applies vice versa too.\",\n        );\n    }\n\n    #[test]\n    fn corrects_vise_extra_a_variant() {\n        assert_suggestion_result(\n            \"The rule applies Vise-A-Versa too.\",\n            ViceVersa::default(),\n            \"The rule applies Vice versa too.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_trailing_suffix() {\n        assert_suggestion_result(\n            \"That was a vice-versa-like transformation.\",\n            ViceVersa::default(),\n            \"That was a vice versa-like transformation.\",\n        );\n    }\n\n    #[test]\n    fn allows_correct_spelling() {\n        assert_lint_count(\n            \"We swapped the arguments vice versa this time.\",\n            ViceVersa::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_sentence_case() {\n        assert_lint_count(\n            \"Vice versa, the movie, was interesting.\",\n            ViceVersa::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn does_not_flag_unrelated_words() {\n        assert_lint_count(\n            \"Their service-versa mapping was custom.\",\n            ViceVersa::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/vicious_loop/mod.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token, TokenStringExt,\n    expr::{Expr, OwnedExprExt, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n};\n\n#[derive(PartialEq)]\nenum Prefer {\n    Circle,\n    Cycle,\n    DontCare,\n}\n\npub struct ViciousCircle {\n    expr: Box<dyn Expr>,\n}\npub struct ViciousCycle {\n    expr: Box<dyn Expr>,\n}\npub struct ViciousCircleOrCycle {\n    expr: Box<dyn Expr>,\n}\n\n// The Expr must have all three tokens because they should only be flagged when used together.\n// But we don't want to flag the legitimate combinations, and which those are depends on the user's preferences.\nfn build_expr(flag: Prefer) -> Box<dyn Expr> {\n    let seq = SequenceExpr::word_set(&[\"vicious\", \"virtuous\", \"viscous\"])\n        .t_ws()\n        .then_word_set(&[\"circle\", \"circles\", \"cycle\", \"cycles\"]);\n\n    match flag {\n        Prefer::Circle => Box::new(\n            seq.and_not(\n                SequenceExpr::default()\n                    .then_word_except(&[\"viscous\"])\n                    .t_ws()\n                    .then_word_set(&[\"circle\", \"circles\"]),\n            ),\n        ),\n        Prefer::Cycle => Box::new(\n            seq.and_not(\n                SequenceExpr::default()\n                    .then_word_except(&[\"viscous\"])\n                    .t_ws()\n                    .then_word_set(&[\"cycle\", \"cycles\"]),\n            ),\n        ),\n        Prefer::DontCare => {\n            Box::new(seq.and_not(SequenceExpr::default().then_word_except(&[\"viscous\"])))\n        }\n    }\n}\n\nfn to_lint(toks: &[Token], src: &[char], pref: Prefer) -> Option<Lint> {\n    let tokspan = toks.span()?;\n    let (adjtok, nountok) = (toks.first()?, toks.last()?);\n\n    let badadj = adjtok\n        .span\n        .get_content(src)\n        .eq_ignore_ascii_case_chars(&['v', 'i', 's', 'c', 'o', 'u', 's']);\n\n    let badnoun = match pref {\n        Prefer::Circle => nountok\n            .span\n            .get_content(src)\n            .starts_with_ignore_ascii_case_str(\"cycle\"),\n        Prefer::Cycle => nountok\n            .span\n            .get_content(src)\n            .starts_with_ignore_ascii_case_str(\"circle\"),\n        Prefer::DontCare => false,\n    };\n\n    let is_plural = matches!(nountok.span.get_content(src).last(), Some('s' | 'S'));\n\n    // The noun doesn't match the user's preferred word.\n    if badnoun && !badadj {\n        return Some(Lint {\n            span: nountok.span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                match (&pref, is_plural) {\n                    (Prefer::Circle, false) => \"circle\",\n                    (Prefer::Circle, true) => \"circles\",\n                    (Prefer::Cycle, false) => \"cycle\",\n                    (Prefer::Cycle, true) => \"cycles\",\n                    _ => unreachable!(),\n                },\n                nountok.span.get_content(src),\n            )],\n            message: if pref == Prefer::Circle {\n                \"This idiom originally used `circle`, not `cycle`\".to_string()\n            } else {\n                \"Though this idiom originally used `circle`, `cycle` is preferred.\".to_string()\n            },\n            ..Default::default()\n        });\n    }\n\n    // The noun doesn't match the user's preference *and* the adjective also needs to be corrected from \"viscous\" to \"vicious\"\n    if badnoun && badadj {\n        let nouns = &[\"circle\", \"cycle\"];\n        let i = match pref {\n            Prefer::Circle => 0,\n            Prefer::Cycle => 1,\n            Prefer::DontCare => return None, // Unreachable, but we don't risk crashing the LSP.\n        };\n\n        let message = format!(\n            \"The idiom uses the word `vicious`, not `viscous`, which describes thick liquids. And we prefer `{}` over `{}`.\",\n            nouns[i],\n            nouns[1 - i],\n        );\n\n        return Some(Lint {\n            span: tokspan,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                match (&pref, is_plural) {\n                    (Prefer::Circle, false) => \"vicious circle\",\n                    (Prefer::Circle, true) => \"vicious circles\",\n                    (Prefer::Cycle, false) => \"vicious cycle\",\n                    (Prefer::Cycle, true) => \"vicious cycles\",\n                    _ => return None, // Unreachable, but we don't risk crashing the LSP.\n                },\n                tokspan.get_content(src),\n            )],\n            message,\n            ..Default::default()\n        });\n    }\n\n    // Nouns are fine, but we need to correct \"viscous\" to \"vicious\".\n    if badadj {\n        return Some(Lint {\n            span: adjtok.span,\n            lint_kind: LintKind::Usage,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"vicious\",\n                adjtok.span.get_content(src),\n            )],\n            message:\n                \"The idiom uses the word `vicious`, not `viscous`, which describes thick liquids.\"\n                    .to_string(),\n            ..Default::default()\n        });\n    }\n\n    None\n}\n\nmacro_rules! impl_expr_linter {\n    ($name:ident, $pref:expr, $desc:expr) => {\n        impl Default for $name {\n            fn default() -> Self {\n                Self {\n                    expr: build_expr($pref),\n                }\n            }\n        }\n\n        impl ExprLinter for $name {\n            type Unit = Chunk;\n\n            fn description(&self) -> &str {\n                $desc\n            }\n\n            fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n                to_lint(toks, src, $pref)\n            }\n\n            fn expr(&self) -> &dyn Expr {\n                self.expr.as_ref()\n            }\n        }\n    };\n}\n\nimpl_expr_linter!(\n    ViciousCircle,\n    Prefer::Circle,\n    \"Corrects and standardizes common errors and variants of `vicious/virtuous circle`.\"\n);\n\nimpl_expr_linter!(\n    ViciousCycle,\n    Prefer::Cycle,\n    \"Corrects and standardizes common errors and variants of `vicious/virtuous cycle`.\"\n);\n\nimpl_expr_linter!(\n    ViciousCircleOrCycle,\n    Prefer::DontCare,\n    \"Corrects common errors in `vicious/virtuous circle/cycle`.\"\n);\n\n#[cfg(test)]\nmod tests {\n    use super::{ViciousCircle, ViciousCircleOrCycle, ViciousCycle};\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    // Prefer \"circle\" -  Made up, simple examples\n\n    #[test]\n    fn vicious_singular() {\n        assert_suggestion_result(\"vicious cycle\", ViciousCircle::default(), \"vicious circle\");\n    }\n    #[test]\n    fn vicious_plural() {\n        assert_suggestion_result(\n            \"vicious cycles\",\n            ViciousCircle::default(),\n            \"vicious circles\",\n        );\n    }\n    #[test]\n    fn viscous_singular() {\n        assert_suggestion_result(\"viscous cycle\", ViciousCircle::default(), \"vicious circle\");\n    }\n    #[test]\n    fn viscous_plural() {\n        assert_suggestion_result(\n            \"viscous cycles\",\n            ViciousCircle::default(),\n            \"vicious circles\",\n        );\n    }\n\n    #[test]\n    fn ignore_vicious_singular() {\n        assert_no_lints(\"vicious circle\", ViciousCircle::default());\n    }\n    #[test]\n    fn ignore_virtuous_plural() {\n        assert_no_lints(\"virtuous circles\", ViciousCircle::default());\n    }\n\n    // Prefer \"circle\" -  Real-world examples\n\n    #[test]\n    fn fix_singular_and_plural_nouns() {\n        assert_suggestion_result(\n            \"The file Vicious Cycle Dataset.ods contains 33 vicious cycles from 13 open source systems studied in our paper.\",\n            ViciousCircle::default(),\n            \"The file Vicious Circle Dataset.ods contains 33 vicious circles from 13 open source systems studied in our paper.\",\n        );\n    }\n\n    #[test]\n    fn fix_virtuous() {\n        assert_suggestion_result(\n            \"FlashInfer-Bench is a benchmark suite and production workflow designed to build a virtuous cycle of self-improving AI systems.\",\n            ViciousCircle::default(),\n            \"FlashInfer-Bench is a benchmark suite and production workflow designed to build a virtuous circle of self-improving AI systems.\",\n        );\n    }\n\n    // Prefer \"cycle\" - Made up, simple examples\n\n    #[test]\n    fn fix_singular() {\n        assert_suggestion_result(\"vicious circle\", ViciousCycle::default(), \"vicious cycle\");\n    }\n    #[test]\n    fn fix_plural() {\n        assert_suggestion_result(\n            \"virtuous circles\",\n            ViciousCycle::default(),\n            \"virtuous cycles\",\n        );\n    }\n    #[test]\n    fn fix_viscous_singular() {\n        assert_suggestion_result(\"viscous circle\", ViciousCycle::default(), \"vicious cycle\");\n    }\n    #[test]\n    fn fix_viscous_plural() {\n        assert_suggestion_result(\"viscous circles\", ViciousCycle::default(), \"vicious cycles\");\n    }\n    #[test]\n    fn dont_flag_singular() {\n        assert_no_lints(\"viscious cycle\", ViciousCycle::default());\n    }\n    #[test]\n    fn dont_flag_plural() {\n        assert_no_lints(\"virtuous cycles\", ViciousCycle::default());\n    }\n\n    // Prefer \"cycle\" -  Real-world examples\n\n    #[test]\n    fn fix_its_a_virtuous() {\n        assert_suggestion_result(\n            \"It's a virtuous circle: if it's interesting to do a project, a person spends a lot of time on it\",\n            ViciousCycle::default(),\n            \"It's a virtuous cycle: if it's interesting to do a project, a person spends a lot of time on it\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Harper currently misinterprets the words around the ellipses as a hostname\"]\n    fn fix_viscous() {\n        assert_suggestion_result(\n            \"However, adding it to $connectionsToTransact causes the tests to stop running...viscous circle.\",\n            ViciousCycle::default(),\n            \"However, adding it to $connectionsToTransact causes the tests to stop running...vicious cycle.\",\n        );\n    }\n\n    // No preference - both \"circle\" and \"cycle\" are fine.\n\n    #[test]\n    fn dont_flag_either() {\n        assert_no_lints(\n            \"vicious circle, virtuous cycle, vicious cycles, virtuous circles\",\n            ViciousCircleOrCycle::default(),\n        );\n    }\n\n    #[test]\n    fn fix_both_viscous() {\n        assert_suggestion_result(\n            \"viscous circle, viscous cycles\",\n            ViciousCircleOrCycle::default(),\n            \"vicious circle, vicious cycles\",\n        );\n    }\n\n    // No preference - Real-world examples\n\n    #[test]\n    fn dont_flag_combo() {\n        assert_no_lints(\n            \"Instead of a vicious cycle, popularity creates a virtuous circle.\",\n            ViciousCircleOrCycle::default(),\n        );\n    }\n\n    #[test]\n    fn fix_its_a_viscous_cycle() {\n        assert_suggestion_result(\n            \"Its a viscous cycle that started back in 1.13 for a few plugins but is now hurting every single world generation plugin\",\n            ViciousCircleOrCycle::default(),\n            \"Its a vicious cycle that started back in 1.13 for a few plugins but is now hurting every single world generation plugin\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/was_aloud.rs",
    "content": "use super::{ExprLinter, Lint, LintKind};\nuse crate::Token;\nuse crate::TokenStringExt;\nuse crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::linting::Suggestion;\nuse crate::linting::expr_linter::Chunk;\n\npub struct WasAloud {\n    expr: SequenceExpr,\n}\n\nimpl Default for WasAloud {\n    fn default() -> Self {\n        let pattern = SequenceExpr::word_set(&[\"was\", \"were\", \"be\", \"been\"])\n            .then_whitespace()\n            .then_exact_word(\"aloud\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for WasAloud {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let verb = matched_tokens[0].span.get_content_string(source);\n\n        Some(Lint {\n            span: matched_tokens.span()?,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                format!(\"{verb} allowed\").chars().collect(),\n                matched_tokens[0].span.get_content(source),\n            )],\n            message: format!(\"Did you mean `{verb} allowed`?\"),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Ensures `was aloud` and `were aloud` are corrected to `was allowed` or `were allowed` when referring to permission.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::WasAloud;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn corrects_was_aloud() {\n        assert_suggestion_result(\n            \"He was aloud to enter the room.\",\n            WasAloud::default(),\n            \"He was allowed to enter the room.\",\n        );\n    }\n\n    #[test]\n    fn corrects_were_aloud() {\n        assert_suggestion_result(\n            \"They were aloud to participate.\",\n            WasAloud::default(),\n            \"They were allowed to participate.\",\n        );\n    }\n\n    #[test]\n    fn does_not_correct_proper_use_of_aloud() {\n        assert_suggestion_result(\n            \"She read the passage aloud to the class.\",\n            WasAloud::default(),\n            \"She read the passage aloud to the class.\",\n        );\n    }\n\n    #[test]\n    fn does_not_flag_unrelated_text() {\n        assert_suggestion_result(\n            \"The concert was loud and exciting.\",\n            WasAloud::default(),\n            \"The concert was loud and exciting.\",\n        );\n    }\n\n    #[test]\n    fn be_aloud() {\n        assert_suggestion_result(\n            \"You may be aloud to enter the room.\",\n            WasAloud::default(),\n            \"You may be allowed to enter the room.\",\n        );\n    }\n\n    #[test]\n    fn been_aloud() {\n        assert_suggestion_result(\n            \"If I had been aloud to enter I would've jumped at the chance.\",\n            WasAloud::default(),\n            \"If I had been allowed to enter I would've jumped at the chance.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/way_too_adjective.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::Token;\nuse crate::expr::{All, Expr, OwnedExprExt, SequenceExpr};\nuse crate::patterns::{UPOSSet, WordSet};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct WayTooAdjective {\n    expr: All,\n}\n\nimpl Default for WayTooAdjective {\n    fn default() -> Self {\n        let base = SequenceExpr::default()\n            .t_aco(\"way\")\n            .t_ws()\n            .t_aco(\"to\")\n            .t_ws()\n            .then(UPOSSet::new(&[UPOS::ADJ]).or(WordSet::new(&[\"much\"])));\n\n        let exceptions = SequenceExpr::anything()\n            .t_any()\n            .t_any()\n            .t_any()\n            .then_word_set(&[\"surface\", \"return\", \"aqua\"]);\n\n        let expr = All::new(vec![\n            Box::new(base),\n            Box::new(SequenceExpr::unless(exceptions)),\n        ]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for WayTooAdjective {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let to_tok = toks.get(2)?;\n        let span = to_tok.span;\n        let original = span.get_content(src);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"too\".chars().collect(),\n                original,\n            )],\n            message: \"Did you mean “too”?\".into(),\n            priority: 25,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Replaces the preposition `to` with the adverb `too` after `way` when followed by an \\\n         adjective (e.g. `way too fast`)\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::WayTooAdjective;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_way_to_fast() {\n        assert_suggestion_result(\n            \"You drive way to fast.\",\n            WayTooAdjective::default(),\n            \"You drive way too fast.\",\n        );\n    }\n\n    #[test]\n    fn corrects_way_to_complicated() {\n        assert_suggestion_result(\n            \"I think this would be way to complicated to implement.\",\n            WayTooAdjective::default(),\n            \"I think this would be way too complicated to implement.\",\n        );\n    }\n\n    #[test]\n    fn corrects_way_to_much() {\n        assert_suggestion_result(\n            \"…and ate way to much.\",\n            WayTooAdjective::default(),\n            \"…and ate way too much.\",\n        );\n    }\n\n    #[test]\n    fn allows_fast_way_to_test() {\n        assert_lint_count(\n            \"Fast way to test daily defence teams?\",\n            WayTooAdjective::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ACoupleMore.weir",
    "content": "expr main (a couple of more)\n\nlet message \"The correct wording is `a couple more`, without the `of`.\"\nlet description \"Corrects `a couple of more` to `a couple more`.\"\nlet kind \"Redundancy\"\nlet becomes \"a couple more\"\n\ntest \"There are a couple of more rules that could be added, how can I contribute?\" \"There are a couple more rules that could be added, how can I contribute?\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ALongTime.weir",
    "content": "expr main (along time)\n\nlet message \"Use `a long time` for referring to a duration of time.\"\nlet description \"Corrects `along time` to `a long time`.\"\nlet kind \"Grammar\"\nlet becomes \"a long time\"\n\ntest \"along time\" \"a long time\"\ntest \"Fast refreshing is very slow had to wait along time for it to update.\" \"Fast refreshing is very slow had to wait a long time for it to update.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AOkHyphen.weir",
    "content": "expr main a [ok, okay]\n\nlet message \"Use `A-OK` when stating that something is acceptable or ready.\"\nlet description \"Replaces the loose article-plus-abbreviation pairing with the standard hyphenated form whenever a linking verb describes readiness or approval.\"\nlet kind \"Style\"\nlet becomes \"A-OK\"\n\ntest \"I am a ok with the plan.\" \"I am a-ok with the plan.\"\ntest \"We are totally a ok team before the launch.\" \"We are totally a-ok team before the launch.\"\ntest \"The crew was pretty a okay about the repairs.\" \"The crew was pretty a-ok about the repairs.\"\ntest \"It will be a ok once the update reaches the fleet.\" \"It will be a-ok once the update reaches the fleet.\"\ntest \"You are very a ok partner for the call.\" \"You are very a-ok partner for the call.\"\ntest \"This is almost a ok outcome for the holiday.\" \"This is almost a-ok outcome for the holiday.\"\ntest \"I am just a okay voice on the call.\" \"I am just a-ok voice on the call.\"\ntest \"We were really a ok group at the summit.\" \"We were really a-ok group at the summit.\"\ntest \"It is a ok moment to decide.\" \"It is a-ok moment to decide.\"\ntest \"The product is pretty a ok example of resilience.\" \"The product is pretty a-ok example of resilience.\"\ntest \"The service was totally a okay signal.\" \"The service was totally a-ok signal.\"\ntest \"Are you a ok with this change?\" \"Are you a-ok with this change?\"\ntest \"It is A OK to proceed.\" \"It is A-OK to proceed.\"\ntest \"I was a ok support while the team was busy.\" \"I was a-ok support while the team was busy.\"\ntest \"You were totally a ok host.\" \"You were totally a-ok host.\"\ntest \"Being a ok line of communication matters.\" \"Being a-ok line of communication matters.\"\ntest \"It has been a ok solution in the past.\" \"It has been a-ok solution in the past.\"\n\nallows \"The dashboard shows A-OK feedback.\"\nallows \"Our status is OK.\"\nallows \"This is a good plan.\"\nallows \"AOK signals readiness.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/AdNauseam.weir",
    "content": "expr main (as nauseam)\n\nlet message \"This phrase comes from Latin, where `ad` means `to`.\"\nlet description \"Corrects `as nauseam` to `ad nauseam`.\"\nlet kind \"Spelling\"\nlet becomes \"ad nauseam\"\n\ntest \"As you say, discussed as nauseam, but no nearer a solution.\" \"As you say, discussed ad nauseam, but no nearer a solution.\"\ntest \"no more autism please, hearing about it as nauseam is starting to make me sick\" \"no more autism please, hearing about it ad nauseam is starting to make me sick\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AfterAWhile.weir",
    "content": "expr main (after while)\n\nlet message \"When describing a timeframe, use `a while`.\"\nlet description \"Corrects the missing article in `after while`, forming `after a while`.\"\nlet kind \"Grammar\"\nlet becomes \"after a while\"\n\ntest \"bromite Crashes on all sites after while.\" \"bromite Crashes on all sites after a while.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AfterAll.weir",
    "content": "expr main (afterall)\n\nlet message \"Did you mean `after all`?\"\nlet description \"Corrects `afterall` to `after all`.\"\nlet kind \"BoundaryError\"\nlet becomes \"after all\"\n\ntest \"I hope it will pop up afterall but that remains to be seen.\" \"I hope it will pop up after all but that remains to be seen.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AheadAnd.weir",
    "content": "expr main (ahead an)\n\nlet message \"Did you make a typo? Shouldn't it be `and`?\"\nlet description \"Corrects `an` to `and` after `ahead`.\"\nlet becomes \"ahead and\"\n\ntest \"If it's important, go ahead an open an issue.\" \"If it's important, go ahead and open an issue.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Albeit.weir",
    "content": "expr main [(all be it), (al be it), (al beit), (all beit), (allbe it)]\n\nlet message \"This should be written as a single word with a single `l`: `albeit`.\"\nlet description \"Corrects this expression to the standard `albeit`.\"\nlet kind \"Spelling\"\nlet becomes \"albeit\"\n\ntest \"If I type in the path to the upstats.html file I do get the page all be it with no data\" \"If I type in the path to the upstats.html file I do get the page albeit with no data\"\ntest \"only one developer, al be it they have been very responsive to my issues\" \"only one developer, albeit they have been very responsive to my issues\"\ntest \"I am one of those idiots, al beit I did it when I was young\" \"I am one of those idiots, albeit I did it when I was young\"\ntest \"the red error mesages display in the console, all beit to quick to read\" \"the red error mesages display in the console, albeit to quick to read\"\ntest \"i think this persons theory is worng allbe it very impresive\" \"i think this persons theory is worng albeit very impresive\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/AllOfASudden.weir",
    "content": "expr main [(all of the sudden), (all of sudden), (all the sudden)]\n\nlet message \"Prefer the standard phrasing `all of a sudden`.\"\nlet description \"Guides this expression toward the standard `all of a sudden`.\"\nlet kind \"Nonstandard\"\nlet becomes \"all of a sudden\"\n\ntest \"On an app that has been released since December, all of the sudden around February 5th ANRs started going up.\" \"On an app that has been released since December, all of a sudden around February 5th ANRs started going up.\"\ntest \"It happened all the sudden when the lights went out.\" \"It happened all of a sudden when the lights went out.\"\ntest \"All the sudden the room fell quiet.\" \"All of a sudden the room fell quiet.\"\ntest \"The music stopped, all the sudden, during the chorus.\" \"The music stopped, all of a sudden, during the chorus.\"\ntest \"Did the power cut all the sudden?\" \"Did the power cut all of a sudden?\"\ntest \"He whispered, \\\"all the sudden we were alone.\\\"\" \"He whispered, \\\"all of a sudden we were alone.\\\"\"\ntest \"ALL THE SUDDEN THE ROOM WENT DARK.\" \"ALL OF A SUDDEN THE ROOM WENT DARK.\"\ntest \"They were laughing all the sudden.\" \"They were laughing all of a sudden.\"\ntest \"It stormed all of sudden after a warm morning.\" \"It stormed all of a sudden after a warm morning.\"\nallows \"Their excitement and suddenness were all the suddenness she remembered.\"\ntest \"This all the sudden change surprised everyone.\" \"This all of a sudden change surprised everyone.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AllReady.weir",
    "content": "expr main <(all ready ADJ), (all ready)>\n\nlet message \"Use `already` before adjectives instead of the two-word phrase.\"\nlet description \"Flags `all ready` when it precedes an adjective so the adverb `already` can take its place.\"\nlet kind \"Grammar\"\nlet becomes \"already\"\n\n# True positives\ntest \"The device is all ready available in Korea.\" \"The device is already available in Korea.\"\ntest \"Everything is all ready clear before the deadline.\" \"Everything is already clear before the deadline.\"\ntest \"The firmware is all ready stable on the new hardware.\" \"The firmware is already stable on the new hardware.\"\ntest \"They were all ready aware of the security policy.\" \"They were already aware of the security policy.\"\ntest \"Our team is all ready excited to release the patch.\" \"Our team is already excited to release the patch.\"\ntest \"It is all ready possible to switch to the new plan.\" \"It is already possible to switch to the new plan.\"\ntest \"The training is all ready complete for the next cohort.\" \"The training is already complete for the next cohort.\"\ntest \"Her notes are all ready relevant to the presentation.\" \"Her notes are already relevant to the presentation.\"\ntest \"The content is all ready public on the blog.\" \"The content is already public on the blog.\"\ntest \"ALL READY AVAILABLE data arrived yesterday.\" \"ALREADY AVAILABLE data arrived yesterday.\"\ntest \"The settings are all ready consistent across environments.\" \"The settings are already consistent across environments.\"\ntest \"Our docs are all ready accurate for the release notes.\" \"Our docs are already accurate for the release notes.\"\n\n# False negatives (these contexts still need the correction)\ntest \"All ready solid documentation should go live soon.\" \"Already solid documentation should go live soon.\"\ntest \"The plan is all ready steady for roll out.\" \"The plan is already steady for roll out.\"\ntest \"The board felt all ready confident in the direction.\" \"The board felt already confident in the direction.\"\n\n# Guardrails / False positives (these should remain untouched)\ntest \"Are you all ready for the show?\" \"Are you all ready for the show?\"\ntest \"We were all ready to leave as soon as the bell rang.\" \"We were all ready to leave as soon as the bell rang.\"\ntest \"Your crew was all ready and waiting for the signal.\" \"Your crew was all ready and waiting for the signal.\"\ntest \"You can keep all ready supplies in the closet.\" \"You can keep all ready supplies in the closet.\"\ntest \"I saw that they were all ready when the curtains opened.\" \"I saw that they were all ready when the curtains opened.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AllThough.weir",
    "content": "expr main all though\n\nlet message \"Merge `all` and `though` into the conjunction `although`.\"\nlet description \"Nobody means to write the two-word phrase `all though` when the single word `although` is intended.\"\nlet kind \"Typo\"\nlet becomes \"although\"\nlet strategy \"Exact\"\ntest \"All though I liked the book, I had to stop reading it.\" \"although I liked the book, I had to stop reading it.\"\ntest \"all though the schedule is tight, I'll try.\" \"although the schedule is tight, I'll try.\"\ntest \"ALL THOUGH the rules are set, we questioned them.\" \"although the rules are set, we questioned them.\"\ntest \"All Though we planned carefully, things shifted.\" \"although we planned carefully, things shifted.\"\ntest \"He kept asking all though she already declined.\" \"He kept asking although she already declined.\"\ntest \"All though.\" \"although.\"\ntest \"Everyone cheered all though the score was clear.\" \"Everyone cheered although the score was clear.\"\ntest \"All though, the pilot stayed calm.\" \"although, the pilot stayed calm.\"\ntest \"All though they tried, the system failed.\" \"although they tried, the system failed.\"\ntest \"All though the evidence is sparse, the team persisted.\" \"although the evidence is sparse, the team persisted.\"\ntest \"All though we expect the meeting to end early, we prepared backup.\" \"although we expect the meeting to end early, we prepared backup.\"\ntest \"All, though, the plan still faltered.\" \"All, though, the plan still faltered.\"\ntest \"We covered all the parts, though, until the hour.\" \"We covered all the parts, though, until the hour.\"\ntest \"She knows all of the relevant rules though.\" \"She knows all of the relevant rules though.\"\ntest \"Although we disagree, this is still valid.\" \"Although we disagree, this is still valid.\"\ntest \"He said all of his reasons, though it was long.\" \"He said all of his reasons, though it was long.\"\ntest \"They discussed all of the topics, though briefly.\" \"They discussed all of the topics, though briefly.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Alongside.weir",
    "content": "expr main (along side)\n\nlet message \"Use the single word `alongside`.\"\nlet description \"Replaces the spaced form `along side` with `alongside`.\"\nlet kind \"WordChoice\"\nlet becomes \"alongside\"\n\ntest \"They walked along side the river.\" \"They walked alongside the river.\"\ntest \"Along side the road, we saw a parade.\" \"Alongside the road, we saw a parade.\"\ntest \"The banner read ALONG SIDE THE TEAM!\" \"The banner read ALONGSIDE THE TEAM!\"\ntest \"The skiff pulled along side.\" \"The skiff pulled alongside.\"\ntest \"\\\"We drifted along side,\\\" she said.\" \"\\\"We drifted alongside,\\\" she said.\"\ntest \"They stood along side, waiting patiently.\" \"They stood alongside, waiting patiently.\"\ntest \"Cars lined up along side the curb.\" \"Cars lined up alongside the curb.\"\nallows \"They walked alongside the river.\"\nallows \"They walked along the side of the river.\"\nallows \"We camped along the lakeside all weekend.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/AlzheimersDisease.weir",
    "content": "expr main (old-timers' disease)\n\nlet message \"Use the correct medical term.\"\nlet description \"Fixes the common misnomer `old-timers' disease`, ensuring the correct medical term `Alzheimer’s disease` is used.\"\nlet kind \"Eggcorn\"\nlet becomes \"Alzheimer’s disease\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AnAnother.weir",
    "content": "expr main [(an another), (a another)]\n\nlet message \"Use `another` on its own.\"\nlet description \"Corrects `an another` and `a another`.\"\nlet kind \"Redundancy\"\nlet becomes \"another\"\n\ntest \"Render shader to use it as texture in an another shader.\" \"Render shader to use it as texture in another shader.\"\ntest \"Audit login is a another package for laravel framework.\" \"Audit login is another package for laravel framework.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AnotherAn.weir",
    "content": "expr main (another an)\n\nlet message \"Use `another` on its own.\"\nlet description \"Corrects `another an` to `another`.\"\nlet kind \"Redundancy\"\nlet becomes \"another\"\n\ntest \"Yet another an atomic deployment tool.\" \"Yet another atomic deployment tool.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AnotherOnes.weir",
    "content": "expr main (another ones)\n\nlet message \"`another` is singular but `ones` is plural. Or maybe you meant the possessive `one's`.\"\nlet description \"Corrects `another ones`.\"\nlet kind \"Agreement\"\nlet becomes [\"another one\", \"another one's\", \"other ones\"]\n\ntest \"Change list params of a resource, another ones change too\" \"Change list params of a resource, other ones change too\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AnotherThings.weir",
    "content": "expr main (another things)\n\nlet message \"`another` is singular but `things` is plural.\"\nlet description \"Corrects `another things`.\"\nlet kind \"Agreement\"\nlet becomes [\"another thing\", \"other things\"]\n\ntest \"Another things to fix in the Mask editor\" \"Other things to fix in the Mask editor\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ArriveOnWeekday.weir",
    "content": "expr weekdays [Monday, Mon, Tuesday, Tue, Wednesday, Wed, Thursday, Thu, Thur, Thurs, Friday, Fri, Saturday, Sat, Sunday, Sun]\nexpr arriveWeekdayGap <(arrive @weekdays), ( )>\nexpr main @arriveWeekdayGap\n\nlet message \"Add 'on' after 'arrive' when it is immediately followed by a weekday.\"\nlet description \"Keeps schedules explicit by preferring the familiar `arrive on Friday` pattern instead of a bare weekday.\"\nlet kind \"Style\"\nlet becomes \" on \"\n\n# true positives\n\n# weekday spelled out\ntest \"I plan to arrive Monday afternoon.\" \"I plan to arrive on Monday afternoon.\"\n\n# abbreviated day\ntest \"Please arrive Tue before noon.\" \"Please arrive on Tue before noon.\"\n\ntest \"Make sure we arrive Thursday prepared.\" \"Make sure we arrive on Thursday prepared.\"\n\ntest \"Arrive fri if you want to join.\" \"Arrive on fri if you want to join.\"\n\ntest \"arrive SUN this time around.\" \"arrive on SUN this time around.\"\n\ntest \"arrive Wed, I mean it.\" \"arrive on Wed, I mean it.\"\n\ntest \"We should arrive Mon and start with the briefing.\" \"We should arrive on Mon and start with the briefing.\"\n\ntest \"He asked if we could arrive Thurs for setup.\" \"He asked if we could arrive on Thurs for setup.\"\n\ntest \"Arrive Tue, please.\" \"Arrive on Tue, please.\"\n\n# true negatives and guardrails\n\ntest \"Please arrive on Monday.\" \"Please arrive on Monday.\"\n\ntest \"We can arrive tomorrow.\" \"We can arrive tomorrow.\"\n\ntest \"Arrive after Monday to avoid traffic.\" \"Arrive after Monday to avoid traffic.\"\n\ntest \"Arrive Monday's crew already left.\" \"Arrive Monday's crew already left.\"\n\ntest \"They plan to arrive in May.\" \"They plan to arrive in May.\"\n\ntest \"Arrive before noon, so we can prep.\" \"Arrive before noon, so we can prep.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AsEvidentBy.weir",
    "content": "expr main [<(as is evident by), evident>, <(as evident by), evident>, <(is evident by), evident>]\n\nlet message \"Did you mean `evidenced`? The correct phrase uses the past participle of the verb `evidence`.\"\nlet description \"Corrects `evident by` to `evidenced by` in passive constructions where `evidence` is used as a verb.\"\nlet kind \"Grammar\"\nlet becomes \"evidenced\"\nlet strategy \"MatchCase\"\n\n# True positives (from real-world examples in issue #2895)\n\ntest \"as many others have differing preferences as is evident by the differing feedback\" \"as many others have differing preferences as is evidenced by the differing feedback\"\ntest \"But as is evident by this bug, I'm not certain this will always be the case.\" \"But as is evidenced by this bug, I'm not certain this will always be the case.\"\ntest \"This is evident by the call to remove_connection by the establish_connection method.\" \"This is evidenced by the call to remove_connection by the establish_connection method.\"\ntest \"I noticed it always gets compiled, as evident by the cranelift log.\" \"I noticed it always gets compiled, as evidenced by the cranelift log.\"\ntest \"As evident by gits history, it was made on purpose.\" \"As evidenced by gits history, it was made on purpose.\"\ntest \"Errors thrown synchronously are caught (as evident by the stacktrace).\" \"Errors thrown synchronously are caught (as evidenced by the stacktrace).\"\ntest \"I had the wrong username (as evident by my server's ssh log).\" \"I had the wrong username (as evidenced by my server's ssh log).\"\ntest \"AS IS EVIDENT BY the data, this approach works.\" \"AS IS EVIDENCED BY the data, this approach works.\"\n\n# True negatives\n\nallows \"As evidenced by the data, this approach works.\"\nallows \"This is evidenced by the test results.\"\nallows \"The trend is evident from the chart.\"\nallows \"It was evident in his tone of voice.\"\nallows \"The answer is self-evident.\"\nallows \"This problem is not evident to new users.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AsFarBackAs.weir",
    "content": "expr main (as early back as)\n\nlet message \"Use `as far back as` for referring to a time in the past.\"\nlet description \"Corrects nonstandard `as early back as` to `as far back as`.\"\nlet kind \"WordChoice\"\nlet becomes \"as far back as\"\n\ntest \"as early back as\" \"as far back as\"\ntest \"skin overrides also supports a wide variety of minecraft versions - as early back as 1.14.4.\" \"skin overrides also supports a wide variety of minecraft versions - as far back as 1.14.4.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AsFollows.weir",
    "content": "expr main (as follow)\n\nlet message \"Use `as follows`.\"\nlet description \"Corrects the phrase `as follow`, which is sometimes produced by overcorrection. While it appeared briefly in 19th-century English, it is now considered archaic; modern standard usage requires `as follows` regardless of number.\"\nlet kind \"Grammar\"\nlet becomes \"as follows\"\n\ntest \"The main points are as follow:\" \"The main points are as follows:\"\ntest \"Please read the steps as follow before you begin.\" \"Please read the steps as follows before you begin.\"\ntest \"As follow you requested, I have compiled the list.\" \"As follows you requested, I have compiled the list.\"\ntest \"I write this as follow for future reference.\" \"I write this as follows for future reference.\"\ntest \"as follow\" \"as follows\"\ntest \"AS FOLLOW\" \"AS FOLLOWS\"\ntest \"The instructions are listed as follow in the appendix.\" \"The instructions are listed as follows in the appendix.\"\ntest \"We were told as follow the timeline would slip.\" \"We were told as follows the timeline would slip.\"\ntest \"Is this description as follow the sample?\" \"Is this description as follows the sample?\"\ntest \"You can verify as follow once the build completes.\" \"You can verify as follows once the build completes.\"\n\n# Ensure unrelated uses of \"follow\" are not affected\nallows \"Follow the instructions as written.\"\nallows \"We follow-up on these requests weekly.\"\nallows \"This is the way to follow as best you can.\"\nallows \"As follows the plan will unfold.\"\nallows \"I will follow your lead.\"\nallows \"The as follows section is helpful.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/AsIfThough.weir",
    "content": "expr main (as if though)\n\nlet message \"This should be `as if` or `as though`.\"\nlet description \"Corrects redundant `as if though`.\"\nlet kind \"Redundancy\"\nlet becomes [\"as if\", \"as though\"]\n\ntest \"It's coming back to you. and looking as if though it's very bright red.\" \"It's coming back to you. and looking as if it's very bright red.\"\ntest \"it passes right on by it as if though nothing happened.\" \"it passes right on by it as though nothing happened.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AsItHappens.weir",
    "content": "expr main (as it so happens)\n\nlet message \"Did you mean `as it happens`?\"\nlet description \"Corrects `as it so happens` to `as it happens`.\"\nlet kind \"Usage\"\nlet becomes \"as it happens\"\n\ntest \"As it so happens, we have language currently in review that basically states that a major version break means backwards incompatibility ...\" \"As it happens, we have language currently in review that basically states that a major version break means backwards incompatibility ...\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AsLongAs.weir",
    "content": "expr main (aslong as)\n\nlet message \"`As long` should be written as two words.\"\nlet description \"Corrects `aslong as` to `as long as`.\"\nlet kind \"BoundaryError\"\nlet becomes \"as long as\"\n\ntest \"server loads up fine but cant log on client side aslong as the plugin is installed\" \"server loads up fine but cant log on client side as long as the plugin is installed\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AsOfCurrently.weir",
    "content": "expr main (as of currently)\n\nlet message \"Standard equivalents are `currently` or `as of now`.\"\nlet description \"Corrects `as of currently` to `currently` or `as of now`.\"\nlet kind \"WordChoice\"\nlet becomes [\"currently\", \"as of now\"]\n\ntest \"Note that, as of currently, selecting a method on the list leaves it highlighted as such, until the script is changed.\" \"Note that, currently, selecting a method on the list leaves it highlighted as such, until the script is changed.\"\ntest \"As of currently, Cervo offers a set of inferers, noise generators (for continuous-action/parametrized policies), and a unified asset format.\" \"As of now, Cervo offers a set of inferers, noise generators (for continuous-action/parametrized policies), and a unified asset format.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/AsOfLately.weir",
    "content": "expr main (as of lately)\n\nlet message \"Standard equivalents are `lately` or `as of late`.\"\nlet description \"Corrects `as of lately` to `lately` or `as of late`.\"\nlet kind \"WordChoice\"\nlet becomes [\"lately\", \"as of late\"]\n\ntest \"I haven't noticed any crashing with AMDGPU as of lately, so this looks to not be an issue anymore.\" \"I haven't noticed any crashing with AMDGPU as of late, so this looks to not be an issue anymore.\"\ntest \"As of lately, I've been more active on Gitlab.\" \"As of late, I've been more active on Gitlab.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AsOpposedTo.weir",
    "content": "expr main (as oppose to)\n\nlet message \"Did you mean `as opposed to`?\"\nlet description \"Corrects `as oppose to` to `as opposed to`.\"\nlet kind \"Usage\"\nlet becomes \"as opposed to\"\n\ntest \"Distorted image upon opening the app as oppose to running the app after successful build\" \"Distorted image upon opening the app as opposed to running the app after successful build\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AtFaceValue.weir",
    "content": "expr main (on face value)\n\nlet message \"`at face value is more idiomatic and more common.\"\nlet description \"Corrects `on face value` to the more usual `at face value`.\"\nlet kind \"WordChoice\"\nlet becomes \"at face value\"\n\ntest \"Obviously what you want is possible and on face value it's a trivial change on our end.\" \"Obviously what you want is possible and at face value it's a trivial change on our end.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AtTheEndOfTheDay.weir",
    "content": "expr main (in the end of the day)\n\nlet message \"Did you mean `at the end of the day`?\"\nlet description \"Corrects `in the end of the day` to `at the end of the day`.\"\nlet kind \"WordChoice\"\nlet becomes \"at the end of the day\"\n\ntest \"In the end of the day, it's not a big deal.\" \"At the end of the day, it's not a big deal.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AtTheExpenseOf.weir",
    "content": "expr main [(at the expanse of), (at the expance of), (at the expenses of)]\n\nlet message \"In the context of tradeoffs, use `at the expense of`. `Expanse` means \"\nlet description \"The correct idiom is `at the expense of`, with singular `expense`. But retain `expanse` if this phrase refers to a wide area.\"\nlet kind \"Eggcorn\"\nlet becomes \"at the expense of\"\n\ntest \"for those who wish to favor code size and compilation time at the expanse of slightly less efficient code\" \"for those who wish to favor code size and compilation time at the expense of slightly less efficient code\"\ntest \"That - at least for me - increases the database performce at the expance of the speed of synchronisation between container and host.\" \"That - at least for me - increases the database performce at the expense of the speed of synchronisation between container and host.\"\ntest \"we, users, can solve this by ourselves, at the expenses of using more votes\" \"we, users, can solve this by ourselves, at the expense of using more votes\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/AvoidAndAlso.weir",
    "content": "expr main (and also)\n\nlet message \"Consider using just `and`.\"\nlet description \"Reduces redundancy by replacing `and also` with `and`.\"\nlet kind \"Redundancy\"\nlet becomes \"and\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/AwareOf.weir",
    "content": "expr main (aware about)\n\nlet message \"Use `aware of` instead of `aware about`.\"\nlet description \"Corrects `aware about` to the standard `aware of`.\"\nlet kind \"Usage\"\nlet becomes \"aware of\"\n\ntest \"\\\"no-member\\\" checks is not aware about the scope\" \"\\\"no-member\\\" checks is not aware of the scope\"\ntest \"OP-TEE core will still be aware about that id, but at least we will be able to change it in runtime.\" \"OP-TEE core will still be aware of that id, but at least we will be able to change it in runtime.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/BadRap.weir",
    "content": "expr main [(bed rap), (bad rep)]\n\nlet message \"Did you mean `bad rap`?\"\nlet description \"Changes `bed rap` to the proper idiom `bad rap`.\"\nlet kind \"Eggcorn\"\nlet becomes \"bad rap\"\n\ntest \"bad rep\" \"bad rap\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/BanTogether.weir",
    "content": "expr main (ban together)\n\nlet message \"Did you mean `band together`?\"\nlet description \"Detects and corrects the common error of using `ban together` instead of the idiom `band together`, which means to unite or join forces.\"\nlet kind \"Eggcorn\"\nlet becomes \"band together\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/BareInMind.weir",
    "content": "expr main (bare in mind)\n\nlet message \"Did you mean `bear in mind`?\"\nlet description \"Ensures the phrase `bear in mind` is used correctly instead of `bare in mind`.\"\nlet kind \"Eggcorn\"\nlet becomes \"bear in mind\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/BatedBreath.weir",
    "content": "expr main (baited breath)\n\nlet message \"Did you mean `bated breath`?\"\nlet description \"Changes `baited breath` to the correct `bated breath`.\"\nlet kind \"Eggcorn\"\nlet becomes \"bated breath\"\n\ntest \"baited breath\" \"bated breath\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/BeckAndCall.weir",
    "content": "expr main (back and call)\n\nlet message \"Did you mean `beck and call`?\"\nlet description \"Fixes `back and call` to `beck and call`.\"\nlet kind \"Eggcorn\"\nlet becomes \"beck and call\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/BeenThere.weir",
    "content": "expr main (bee there)\n\nlet message \"Did you mean `been there`?\"\nlet description \"Corrects the misspelling `bee there` to the proper phrase `been there`.\"\nlet kind \"Typo\"\nlet becomes \"been there\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Beforehand.weir",
    "content": "expr main [(before hand), (before-hand)]\n\nlet message \"Prefer the single-word adverb `beforehand`.\"\nlet description \"`Beforehand` functions as a fixed adverb meaning ‘in advance’; writing it as two words or with a hyphen is nonstandard and can jar readers.\"\nlet becomes \"beforehand\"\n\ntest \"Let me know before hand if you will attend.\" \"Let me know beforehand if you will attend.\"\ntest \"I prepared the documents before-hand.\" \"I prepared the documents beforehand.\"\nallows \"We finished the preparations beforehand.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/BesideThePoint.weir",
    "content": "expr main (besides the point)\n\nlet message \"Use `beside` in the idiom `beside the point`.\"\nlet description \"Corrects `besides the point` to `beside the point`.\"\nlet kind \"Eggcorn\"\nlet becomes \"beside the point\"\n\ntest \"we kind of focus on GPUs a lot but uh that's besides the point so uh sometime ago\" \"we kind of focus on GPUs a lot but uh that's beside the point so uh sometime ago\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/BestRegards.weir",
    "content": "expr main (beat regards)\n\nlet message \"Use `best regards` to convey sincere well wishes in a closing.\"\nlet description \"In valedictions, `best` expresses your highest regard—avoid the typo `beat regards`.\"\nlet kind \"Typo\"\nlet becomes \"best regards\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/BetterOffWith.weir",
    "content": "expr main (better of with)\n\nlet message \"This phrase uses the word `off`.\"\nlet description \"Corrects `better of with` to `better off with`.\"\nlet kind \"Typo\"\nlet becomes \"better off with\"\n\ntest \"If you're wanting dynamic meta data, your might be better of with getServerSideProps .\" \"If you're wanting dynamic meta data, your might be better off with getServerSideProps .\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/BewareOf.weir",
    "content": "expr main [(beware with regard to), (beware about), (beware with), (beware regarding), (beware concerning), (beware against), (beware for), (beware in), (beware on), (beware at), (beware among), (beware between)]\n\nlet message \"Use `beware of` when naming the object you want readers to avoid.\"\nlet description \"The verb `beware` naturally pairs with `of` before the noun being warned about, so swap other prepositions for clarity.\"\nlet kind \"Usage\"\nlet becomes \"beware of\"\nlet strategy \"MatchCase\"\n\ntest \"Beware about scams that arrive by email.\" \"Beware of scams that arrive by email.\"\ntest \"beware with the loose wires behind the TV.\" \"beware of the loose wires behind the TV.\"\ntest \"Beware with regard to the rusted railing.\" \"Beware of the rusted railing.\"\ntest \"Beware regarding the crumbling guardrail.\" \"Beware of the crumbling guardrail.\"\ntest \"Beware concerning the expired coupon.\" \"Beware of the expired coupon.\"\ntest \"Beware against mixing cleaning chemicals.\" \"Beware of mixing cleaning chemicals.\"\ntest \"Beware for the slippery tile near the pool.\" \"Beware of the slippery tile near the pool.\"\ntest \"Beware in the area where the fog hides the cliffs.\" \"Beware of the area where the fog hides the cliffs.\"\ntest \"Beware on the step that squeaks.\" \"Beware of the step that squeaks.\"\ntest \"Beware at that crossing when traffic is heavy.\" \"Beware of that crossing when traffic is heavy.\"\ntest \"Beware among the wild animals outside the park.\" \"Beware of the wild animals outside the park.\"\ntest \"Beware between the gaps in the scaffolding.\" \"Beware of the gaps in the scaffolding.\"\ntest \"BEWARE WITH THE LOUD CRASHING.\" \"BEWARE OF THE LOUD CRASHING.\"\n\nallows \"Beware of the dog that guards the porch.\"\nallows \"Beware the gap between the platforms.\"\nallows \"Beware every time you go near the cliff.\"\nallows \"Some people say beware: the path narrows.\"\nallows \"Beware of tall waves on this beach.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/BlacklistWhitelist.weir",
    "content": "expr colors [black, white]\nexpr items [list, lists]\n\nexpr main @colors @items\n\nlet message \"Treat color-based deny/allow lists as single words like `blacklist` or `whitelist`.\"\nlet description \"Normalize the two-word sequence `black list`/`white list` so it matches the established compound noun or verb.\"\nlet kind \"Usage\"\nlet becomes [\"blacklist\", \"whitelist\"]\n\n# True positives\ntest \"We need to black list that vendor.\" \"We need to blacklist that vendor.\"\ntest \"I told the compliance team to white list our partners.\" \"I told the compliance team to whitelist our partners.\"\ntest \"Black list suspicious spikes before the release.\" \"Blacklist suspicious spikes before the release.\"\ntest \"White list the new IPs before the demo.\" \"Whitelist the new IPs before the demo.\"\ntest \"Do not black list folks lightly.\" \"Do not blacklist folks lightly.\"\ntest \"Please white list those domains.\" \"Please whitelist those domains.\"\ntest \"The policy will black list multiple addresses.\" \"The policy will blacklist multiple addresses.\"\ntest \"White list the staging nodes before testing.\" \"Whitelist the staging nodes before testing.\"\ntest \"Black list any host that misbehaves.\" \"Blacklist any host that misbehaves.\"\ntest \"White list their servers before the big push.\" \"Whitelist their servers before the big push.\"\n\n# False positives / true negatives\nallows \"The color black is on this list.\"\nallows \"Please keep the list of white items up to date.\"\nallows \"The existing blacklist already contains these values.\"\nallows \"We've been using whitelist entries for weeks.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/BlanketStatement.weir",
    "content": "expr main (blanketed statement)\n\nlet message \"Use the more idiomatic phrasing.\"\nlet description \"Corrects common errors in the phrase `blanket statement`.\"\nlet kind \"Usage\"\nlet becomes \"blanket statement\"\n\ntest \"This seems like a blanketed statement and I have not found any info to back up whether PyJWT is affected.\" \"This seems like a blanket statement and I have not found any info to back up whether PyJWT is affected.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Brutality.weir",
    "content": "expr main (brutalness)\n\nlet message \"This word has a more standard, more common synonym.\"\nlet description \"Suggests the more standard and common synonym `brutality`.\"\nlet kind \"WordChoice\"\nlet becomes \"brutality\"\n\ntest \"the mildness and brutalness of the story rises.\" \"the mildness and brutality of the story rises.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/BuiltIn.weir",
    "content": "expr main [(in built), (in-built), (built in)]\n\nlet message \"Prefer the hyphenated compound `built-in`.\"\nlet description \"English convention treats `built-in` as a single, attributive adjective—meaning something integrated from the outset—whereas other forms like `in built` are nonstandard and can feel awkward to readers.\"\nlet becomes \"built-in\"\nlet kind \"Punctuation\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/CanBeSeen.weir",
    "content": "expr main (can be seem)\n\nlet message \"Did you mean `can be seen`?\"\nlet description \"Corrects `can be seem` to the proper phrase `can be seen`.\"\nlet kind \"Typo\"\nlet becomes \"can be seen\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/CaseInPoint.weir",
    "content": "expr main (case and point)\n\nlet message \"`Case in point` is the correct form of the phrase.\"\nlet description \"Corrects `case and point` to `case in point`.\"\nlet kind \"Malapropism\"\nlet becomes \"case in point\"\n\ntest \"They are just not as high of a priority as other tasks that user's are requesting for, a case and point is I have never ran into this issue.\" \"They are just not as high of a priority as other tasks that user's are requesting for, a case in point is I have never ran into this issue.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/CaseSensitive.weir",
    "content": "expr main (case sensitive)\n\nlet message \"Use the hyphenated form for `case-sensitive`.\"\nlet description \"Ensures `case-sensitive` is correctly hyphenated.\"\nlet kind \"Punctuation\"\nlet becomes \"case-sensitive\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ClickThroughRate.weir",
    "content": "expr metricHeads [click, view]\nexpr metricNouns [rate, rates, conversion, conversions, optimization, optimizations]\nexpr main <((@metricHeads through) @metricNouns), (@metricHeads through)>\n\nlet message \"Keep the metric modifier bonded so the compound explicitly names the analytics signal.\"\nlet description \"Hyphenates the verb+preposition pair when it directly precedes rate-style nouns, mirroring how these terms are commonly styled in analytics writing.\"\nlet kind \"Punctuation\"\nlet becomes [\"click-through\", \"view-through\"]\nlet strategy \"MatchCase\"\n\n# True positives\n# These sequences should become hyphenated because they describe a compound metric modifier.\ntest \"The click through rate improved.\" \"The click-through rate improved.\"\ntest \"Our click through rates are trending up.\" \"Our click-through rates are trending up.\"\ntest \"We monitor the click through conversion for each campaign.\" \"We monitor the click-through conversion for each campaign.\"\ntest \"Click through conversions kept climbing overnight.\" \"Click-through conversions kept climbing overnight.\"\ntest \"A sudden click through optimization push arrived.\" \"A sudden click-through optimization push arrived.\"\ntest \"The latest click through rate dashboard arrived.\" \"The latest click-through rate dashboard arrived.\"\ntest \"click through conversions stay on the board.\" \"click-through conversions stay on the board.\"\ntest \"CLICK THROUGH RATES stay on the board.\" \"CLICK-THROUGH RATES stay on the board.\"\ntest \"After the launch, the click through conversion number improved.\" \"After the launch, the click-through conversion number improved.\"\ntest \"The view through optimization performed well.\" \"The view-through optimization performed well.\"\n\n# False positives / true negatives\n# Keep the rule from firing when the modifier simply describes a navigation action or lacks a metric noun.\ntest \"Click through the next tab when ready.\" \"Click through the next tab when ready.\"\ntest \"We click through every data point before shipping.\" \"We click through every data point before shipping.\"\ntest \"Please click through the menu options slowly.\" \"Please click through the menu options slowly.\"\ntest \"If you click through this screen, let me know.\" \"If you click through this screen, let me know.\"\ntest \"She needs to view through the samples before approving.\" \"She needs to view through the samples before approving.\"\ntest \"Click through, at your leisure, to see the preview.\" \"Click through, at your leisure, to see the preview.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ComprisesOf.weir",
    "content": "expr main (comprises of)\n\nlet message \"Avoid `comprises of`; let `comprises` stand on its own or choose `consists of`.\"\nlet description \"`Comprises` already contains the notion of `of`, so following it with another `of` is redundant.\"\nlet kind \"Usage\"\nlet becomes [\"comprises\", \"is comprised of\"]\n\ntest \"The playlist comprises of twelve tracks.\" \"The playlist comprises twelve tracks.\"\ntest \"Our team comprises of specialists with diverse expertise.\" \"Our team comprises specialists with diverse expertise.\"\ntest \"The committee comprises of members from each department.\" \"The committee comprises members from each department.\"\ntest \"The community comprises of volunteers and donors.\" \"The community comprises volunteers and donors.\"\ntest \"The project comprises of multiple modules.\" \"The project comprises multiple modules.\"\ntest \"The project comprises of multiple modules.\" \"The project is comprised of multiple modules.\"\ntest \"His speech comprises of anecdotes.\" \"His speech comprises anecdotes.\"\ntest \"This portfolio comprises of leading companies.\" \"This portfolio comprises leading companies.\"\ntest \"Comprises of rare objects, the exhibit feels curated.\" \"Comprises rare objects, the exhibit feels curated.\"\ntest \"COMPRISES OF outdated references, the memo loses credibility.\" \"COMPRISES outdated references, the memo loses credibility.\"\n\ntest \"The team comprises consultants from all regions.\" \"The team comprises consultants from all regions.\"\ntest \"Her summary comprises a list of skills.\" \"Her summary comprises a list of skills.\"\ntest \"The board comprises directors of multiple backgrounds.\" \"The board comprises directors of multiple backgrounds.\"\ntest \"It comprises a mix of fans and critics.\" \"It comprises a mix of fans and critics.\"\ntest \"I know what comprises the committee.\" \"I know what comprises the committee.\"\ntest \"A phrase like comprises-of should stay untouched.\" \"A phrase like comprises-of should stay untouched.\"\ntest \"Comprising the look of the thing, the design stands out.\" \"Comprising the look of the thing, the design stands out.\"\ntest \"The comprise of energy issues is complex.\" \"The comprise of energy issues is complex.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/CondenseAllThe.weir",
    "content": "expr main (all of the)\n\nlet message \"Consider simplifying to `all the`.\"\nlet description \"Suggests removing `of` in `all of the` for a more concise phrase.\"\nlet kind \"Redundancy\"\nlet becomes \"all the\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/CoursingThroughVeins.weir",
    "content": "expr main (cursing through veins)\n\nlet message \"In this idiom, blood `courses` (flows) through veins, not `curses`.\"\nlet description \"In English idioms, `to course` means to flow rapidly—so avoid the eggcorn `cursing through veins.`\"\nlet kind \"Eggcorn\"\nlet becomes \"coursing through veins\"\n\ntest \"cursing through veins\" \"coursing through veins\"\ntest \"It felt like the drugs were cursing through veins.\" \"It felt like the drugs were coursing through veins.\"\nallows \"He was cursing through the entire meeting.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/CuttingAgeEggcorn.weir",
    "content": "expr main [(cutting age), (cutting-age)]\n\nlet message \"Did you mean `cutting-edge` (adjective before a noun) or `cutting edge` (in other positions)?\"\nlet description \"Corrects the eggcorn `cutting age` or `cutting-age` to `cutting-edge` or `cutting edge`.\"\nlet kind \"Eggcorn\"\nlet becomes [\"cutting-edge\", \"cutting edge\"]\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"We use cutting age technology.\" \"We use cutting-edge technology.\"\ntest \"This is a cutting age framework.\" \"This is a cutting-edge framework.\"\ntest \"They deliver cutting-age solutions to clients.\" \"They deliver cutting-edge solutions to clients.\"\ntest \"CUTTING AGE software is our specialty.\" \"CUTTING-EDGE software is our specialty.\"\ntest \"The cutting age approach impressed everyone.\" \"The cutting-edge approach impressed everyone.\"\ntest \"We chose cutting age tools for this project.\" \"We chose cutting-edge tools for this project.\"\n\n# True negatives\n\nallows \"We use cutting-edge technology.\"\nallows \"This is a cutting-edge framework.\"\nallows \"The cutting edge of research is exciting.\"\nallows \"She is cutting the age requirement in half.\"\nallows \"Cutting edge solutions are our focus.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Cybersec.weir",
    "content": "expr main (cybersec)\n\nlet message \"Use `cybersecurity` instead of `cybersec`.\"\nlet description \"Expands the informal abbreviation `cybersec` to `cybersecurity`.\"\nlet kind \"Style\"\nlet becomes \"cybersecurity\"\nlet strategy \"MatchCase\"\n\ntest \"We hired a cybersec analyst.\" \"We hired a cybersecurity analyst.\"\ntest \"Cybersec teams are growing.\" \"Cybersecurity teams are growing.\"\ntest \"CYBERSEC is a priority.\" \"CYBERSECURITY is a priority.\"\ntest \"Our cybersec program needs funding.\" \"Our cybersecurity program needs funding.\"\ntest \"They focus on cybersec in healthcare.\" \"They focus on cybersecurity in healthcare.\"\ntest \"cybersec.\" \"cybersecurity.\"\ntest \"cybersec,\" \"cybersecurity,\"\ntest \"cybersec?\" \"cybersecurity?\"\ntest \"cybersec!\" \"cybersecurity!\"\ntest \"The cybersec training starts Monday.\" \"The cybersecurity training starts Monday.\"\ntest \"A cybersec role opened today.\" \"A cybersecurity role opened today.\"\ntest \"We discussed cybersec risks.\" \"We discussed cybersecurity risks.\"\n\ntest \"Cybersecurity is important.\" \"Cybersecurity is important.\"\ntest \"cybersecurity is important.\" \"cybersecurity is important.\"\ntest \"This is about cyber-sec systems.\" \"This is about cyber-sec systems.\"\ntest \"We build cybersecops tooling.\" \"We build cybersecops tooling.\"\ntest \"The cybersecx team is separate.\" \"The cybersecx team is separate.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/DampSquib.weir",
    "content": "expr main (damp squid)\n\nlet message \"Use the correct phrase for a disappointing outcome.\"\nlet description \"Corrects the eggcorn `damp squid` to `damp squib`, ensuring the intended meaning of a failed or underwhelming outcome.\"\nlet kind \"Eggcorn\"\nlet becomes \"damp squib\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/DegreesKelvin.weir",
    "content": "expr main [(degrees kelvin), (degrees Kelvin), (degree kelvin), (degree Kelvin)]\n\nlet message \"Use `kelvins` when discussing the unit Kelvin.\"\nlet description \"Corrects use of `degrees kelvin` to `kelvins`.\"\nlet kind \"Usage\"\nlet becomes [\"kelvins\", \"kelvin\"]\n\ntest \"degrees kelvin\" \"kelvins\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/DegreesKelvinSymbol.weir",
    "content": "expr main (°K)\n\nlet message \"Use just the symbol `K` when discussing the unit Kelvin.\"\nlet description \"Corrects use of `°K` to `K`.\"\nlet kind \"Usage\"\nlet becomes \"K\"\n\ntest \"°K\" \"K\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/DoIAdjective.weir",
    "content": "expr main <([(Do I [interested, excited, tired, ready, curious, comfortable, prepared, overwhelmed, confident, available, worried, annoyed, relieved, frustrated, surprised, anxious, calm, satisfied, concerned]), (Do I not [interested, excited, tired, ready, curious, comfortable, prepared, overwhelmed, confident, available, worried, annoyed, relieved, frustrated, surprised, anxious, calm, satisfied, concerned])]), Do>\n\nlet message \"When describing how you feel, `I` pairs with `am`, not `do`.\"\nlet description \"Swaps the helping verb `do` for `am` in `Do I <adjective>` questions so they use the correct linking verb.\"\nlet kind \"Grammar\"\nlet becomes \"am\"\n\ntest \"Do I interested in music?\" \"Am I interested in music?\"\ntest \"Do I excited about the launch?\" \"Am I excited about the launch?\"\ntest \"Do I tired after the hike?\" \"Am I tired after the hike?\"\ntest \"Do I ready for the interview?\" \"Am I ready for the interview?\"\ntest \"Do I curious what they decide?\" \"Am I curious what they decide?\"\ntest \"Do I comfortable sharing that detail?\" \"Am I comfortable sharing that detail?\"\ntest \"Do I prepared to join the call?\" \"Am I prepared to join the call?\"\ntest \"Do I overwhelmed by the inbox?\" \"Am I overwhelmed by the inbox?\"\ntest \"Do I confident in that plan?\" \"Am I confident in that plan?\"\ntest \"Do I not interested in attending?\" \"Am I not interested in attending?\"\ntest \"Do I not ready yet?\" \"Am I not ready yet?\"\ntest \"do I concerned about the changes?\" \"am I concerned about the changes?\"\n\nallows \"Do I want to help you?\"\nallows \"Do I need to finish this tonight?\"\nallows \"Do I have to explain everything?\"\nallows \"Do I run the tests again?\"\nallows \"Do I look like I'm not listening?\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/DoNotWant.weir",
    "content": "expr main [(don't wan), (do not wan)]\n\nlet message \"Use the full verb `want` after negation: `don't want` or `do not want.`\"\nlet description \"In English, negation still requires the complete verb form (`want`), so avoid truncating it to `wan.`\"\nlet kind \"Typo\"\nlet becomes [\"don't want\", \"do not want\"]\n\ntest \"I don't wan to pay for this.\" \"I don't want to pay for this.\"\ntest \"Don't Wan that option.\" \"Don't Want that option.\"\nallows \"I don't want to leave.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/DoToDueTo.weir",
    "content": "expr main <([(![PRON, INTJ, PART, ADV, CCONJ, SCONJ, ADP, DET] do to [ADJ, NOUN, VERB, PROPN] NOUN), (![PRON, INTJ, PART, ADV, CCONJ, SCONJ, ADP, DET] do to DET * NOUN), (![PRON, INTJ, PART, ADV, CCONJ, SCONJ, ADP, DET] ADV do to [ADJ, NOUN, VERB, PROPN] NOUN), (![PRON, INTJ, PART, ADV, CCONJ, SCONJ, ADP, DET] ADV do to DET * NOUN)]), (do to)>\n\nlet message \"Did you mean `due to`?\"\nlet description \"Corrects the typo `do to` when it is intended to mean `due to` in causal phrases.\"\nlet kind \"Usage\"\nlet becomes \"due to\"\n\ntest \"Many restaurants will close do to the corona restrictions.\" \"Many restaurants will close due to the corona restrictions.\"\ntest \"The event was canceled do to bad weather.\" \"The event was canceled due to bad weather.\"\ntest \"Production stopped do to a supply shortage.\" \"Production stopped due to a supply shortage.\"\ntest \"Flights were delayed do to heavy fog.\" \"Flights were delayed due to heavy fog.\"\ntest \"The server rebooted do to power issues.\" \"The server rebooted due to power issues.\"\ntest \"They left early do to a family emergency.\" \"They left early due to a family emergency.\"\ntest \"The cancelation happened do to unexpected maintenance.\" \"The cancelation happened due to unexpected maintenance.\"\ntest \"Our plan changed do to the new policy.\" \"Our plan changed due to the new policy.\"\ntest \"The app crashed do to memory leaks.\" \"The app crashed due to memory leaks.\"\ntest \"Tickets sold quickly do to a viral post.\" \"Tickets sold quickly due to a viral post.\"\ntest \"It failed do to data loss.\" \"It failed due to data loss.\"\n\nallows \"What did you do to the file?\"\nallows \"Please do to the file what you did to the other one.\"\nallows \"Don't do to others what you wouldn't want done to you.\"\nallows \"We need to do to this spreadsheet what we did last week.\"\nallows \"She asked what the update would do to her settings.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/DontCan.weir",
    "content": "expr main (don't can)\n\nlet message \"The grammatically correct form is `can't` or `cannot`.\"\nlet description \"Corrects `don't can` to `can't` or `cannot`.\"\nlet kind \"Grammar\"\nlet becomes [\"can't\", \"cannot\"]\n\ntest \"And currently uh I'm looking at it when I don't can see it like you know where it is, right?\" \"And currently uh I'm looking at it when I can't see it like you know where it is, right?\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/DoubleNegative.weir",
    "content": "expr main <([(didn't), (did not), (did n't)] [need, have, want, make, take, get] no), no>\n\nlet message \"With `didn't/did not`, using `no` creates a double negative; replace `no` with `any` to keep a single negation.\"\nlet description \"Replaces the determiner `no` with `any` when it follows the auxiliary `didn't/did not` plus a main verb (e.g., have, need, want, make, take, get) so the clause contains only one negation.\"\nlet kind \"Grammar\"\nlet becomes \"any\"\n\ntest \"I didn't have no idea what to say.\" \"I didn't have any idea what to say.\"\ntest \"She didn't want no trouble last night.\" \"She didn't want any trouble last night.\"\ntest \"He did not make no progress this week.\" \"He did not make any progress this week.\"\ntest \"We didn't take no for an answer.\" \"We didn't take any for an answer.\"\ntest \"They didn't get no signal from the device.\" \"They didn't get any signal from the device.\"\ntest \"You didn't need no permission to do that.\" \"You didn't need any permission to do that.\"\ntest \"I didn't have no choice after the meeting.\" \"I didn't have any choice after the meeting.\"\ntest \"I didn't want no part of it.\" \"I didn't want any part of it.\"\ntest \"The driver didn't take no excuses.\" \"The driver didn't take any excuses.\"\ntest \"I didn't have no time for that.\" \"I didn't have any time for that.\"\ntest \"I DIDN'T HAVE NO IDEA WHEN THIS WOULD END.\" \"I DIDN'T HAVE ANY IDEA WHEN THIS WOULD END.\"\ntest \"She did not make no progress yet.\" \"She did not make any progress yet.\"\n\n# Should not change when there's no double negative `no`\nallows \"I didn't have any idea what to do.\"\nallows \"I didn't say no to the invitation.\"\nallows \"She doesn't have any idea why the alarm rang.\"\nallows \"I did not see any sign of trouble.\"\nallows \"No friends came over.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/DueDiligence.weir",
    "content": "expr main (do diligence)\n\nlet message \"If this phrase should function as a noun it should be `due diligence`. If it should function as a verb it should be `do due diligence\"\nlet description \"Corrects `do diligence` to `due diligence`.\"\nlet kind \"Usage\"\nlet becomes [\"due diligence\", \"do due diligence\"]\n\ntest \"Thank you for your time, I am trying to do my do diligence and find some answers.\" \"Thank you for your time, I am trying to do my due diligence and find some answers.\"\ntest \"The Technical Committee (TC) will do diligence, write a report, and attach that report to the GitHub issue.\" \"The Technical Committee (TC) will do due diligence, write a report, and attach that report to the GitHub issue.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/DuringAges.weir",
    "content": "expr main <((during ages) ![NUM, :]), (during)>\n\nlet message \"Use `for ages` instead of `during ages` when referring to a vague stretch of time.\"\nlet description \"The idiomatic duration is 'for ages', so swap the initial preposition whenever the words refer to a general span.\"\nlet kind \"Usage\"\nlet becomes \"for\"\nlet strategy \"MatchCase\"\n\n# True positives\n# Replace `during ages` with `for ages` when the phrase describes a vague stretch of time.\ntest \"Stories accumulate during ages past.\" \"Stories accumulate for ages past.\"\ntest \"During ages of exile, they remained resolute.\" \"For ages of exile, they remained resolute.\"\ntest \"She waited during ages for the letter.\" \"She waited for ages for the letter.\"\ntest \"We have been friends during ages long.\" \"We have been friends for ages long.\"\ntest \"During ages gone by, the valley slept.\" \"For ages gone by, the valley slept.\"\ntest \"People argued during ages on behalf of the plan.\" \"People argued for ages on behalf of the plan.\"\ntest \"During ages past, kings ruled here.\" \"For ages past, kings ruled here.\"\ntest \"I reminisced during ages about the river.\" \"I reminisced for ages about the river.\"\ntest \"During ages of waiting he kept faith.\" \"For ages of waiting he kept faith.\"\ntest \"Why do you speak during ages like that?\" \"Why do you speak for ages like that?\"\ntest \"During ages after the fall they rebuilt.\" \"For ages after the fall they rebuilt.\"\ntest \"She sang during ages when storms howled.\" \"She sang for ages when storms howled.\"\n\n# Guardrails\n# Numeric age ranges should remain untouched.\n# Keep the precise age range framing.\nallows \"During ages: 35 to 40, we recorded the decline.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/EachAndEveryOne.weir",
    "content": "expr main (each and everyone)\n\nlet message \"Use `each and every one` for referring to a group of people or things.\"\nlet description \"Corrects `each and everyone` to `each and every one`.\"\nlet kind \"BoundaryError\"\nlet becomes \"each and every one\"\n\ntest \"each and everyone\" \"each and every one\"\ntest \"I have modified each and everyone of them to keep only the best of the best!\" \"I have modified each and every one of them to keep only the best of the best!\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/EagleEyed.weir",
    "content": "expr main (eagle eyed)\n\nlet message \"Hyphenate `eagle eyed` when it acts as a single adjective before a noun.\"\nlet description \"Treats the phrase as a compound modifier and replaces the space with a hyphen so it reads like one idea.\"\nlet kind \"Punctuation\"\nlet becomes \"eagle-eyed\"\nlet strategy \"MatchCase\"\n\n# True positives\n# Ensure the hyphen appears before a noun when `eagle eyed` describes it.\ntest \"The eagle eyed analyst noticed the bug.\" \"The eagle-eyed analyst noticed the bug.\"\ntest \"Our eagle eyed intern flagged the missing reference.\" \"Our eagle-eyed intern flagged the missing reference.\"\ntest \"An eagle eyed reviewer spotted the mismatch.\" \"An eagle-eyed reviewer spotted the mismatch.\"\ntest \"Eagle eyed mentors guide the new hires.\" \"Eagle-eyed mentors guide the new hires.\"\ntest \"That eagle eyed editor catches grammar slips.\" \"That eagle-eyed editor catches grammar slips.\"\ntest \"I rely on eagle eyed assistants for QA.\" \"I rely on eagle-eyed assistants for QA.\"\ntest \"Her eagle eyed focus kept the doc clean.\" \"Her eagle-eyed focus kept the doc clean.\"\ntest \"Late-night eagle eyed editors keep releases stable.\" \"Late-night eagle-eyed editors keep releases stable.\"\ntest \"Eagle eyed scientists double-check the data.\" \"Eagle-eyed scientists double-check the data.\"\ntest \"The eagle eyed security team audits every deploy.\" \"The eagle-eyed security team audits every deploy.\"\ntest \"Our eagle eyed partner shared the warning.\" \"Our eagle-eyed partner shared the warning.\"\ntest \"He admired their eagle eyed vigilance.\" \"He admired their eagle-eyed vigilance.\"\n\n# False negatives (capitalization should not stop the correction)\ntest \"Eagle Eyed reviewers always respond quickly.\" \"Eagle-Eyed reviewers always respond quickly.\"\ntest \"EAGLE EYED surveyors noticed the shift.\" \"EAGLE-EYED surveyors noticed the shift.\"\ntest \"An Eagle Eyed champion kept tabs on the data.\" \"An Eagle-Eyed champion kept tabs on the data.\"\n\n# True negatives / false positives\nallows \"Eagle-eyed editors already finished the article.\"\nallows \"The eagle eyedness they display is a point of pride.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/EggYolk.weir",
    "content": "expr main (egg yoke)\n\nlet message \"Use `egg yolk` when you mean the yellow portion of an egg.\"\nlet description \"Corrects the eggcorn `egg yoke`, replacing it with the standard culinary term `egg yolk`.\"\nlet kind \"Eggcorn\"\nlet becomes \"egg yolk\"\n\ntest \"She whisked the egg yoke briskly.\" \"She whisked the egg yolk briskly.\"\ntest \"Egg yoke is rich in nutrients.\" \"Egg yolk is rich in nutrients.\"\ntest \"Add the EGG YOKE to the batter.\" \"Add the EGG YOLK to the batter.\"\ntest \"Separate the egg yoke, then fold it in.\" \"Separate the egg yolk, then fold it in.\"\ntest \"The runny egg yoke spilled over the toast.\" \"The runny egg yolk spilled over the toast.\"\ntest \"Blend the cream with each egg yoke before baking.\" \"Blend the cream with each egg yolk before baking.\"\nallows \"The custard calls for one egg yolk.\"\nallows \"Reserve the egg yolks for later.\"\nallows \"The artisan carved a wooden yoke for the oxen.\"\nallows \"Crack the eggs so no yoke spills.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/EludedTo.weir",
    "content": "expr main (eluded to)\n\nlet message \"Did you mean `alluded to`?\"\nlet description \"Corrects `eluded to` to `alluded to` in contexts referring to indirect references.\"\nlet kind \"Malapropism\"\nlet becomes \"alluded to\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/EnMasse.weir",
    "content": "expr main [(on mass), (on masse), (in mass)]\n\nlet message \"Did you mean `en masse`?\"\nlet description \"Detects variants like `on mass` or `in mass` and suggests `en masse`.\"\nlet kind \"Eggcorn\"\nlet becomes \"en masse\"\n\ntest \"in mass\" \"en masse\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/EnRoute.weir",
    "content": "expr main [(on route to), (in route to), (on-route to), (in-route to)]\n\nlet message \"Did you mean `en route`?\"\nlet description \"Detects variants like `on route` or `in route` and suggests `en route`.\"\nlet kind \"Eggcorn\"\nlet becomes [\"en route to\", \"en-route to\"]\n\ntest \"on route to\" \"en route to\"\ntest \"in route to\" \"en route to\"\ntest \"vehicles may already be on route to one end of a Shipment\" \"vehicles may already be en route to one end of a Shipment\"\ntest \"TF-South is in route to conduct SSE on the strike.\" \"TF-South is en route to conduct SSE on the strike.\"\ntest \"I ultimately just want a slight preference for matches that are on-route to correct cases like the above.\" \"I ultimately just want a slight preference for matches that are en-route to correct cases like the above.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/EverPresent.weir",
    "content": "expr main (ever present)\n\nlet message \"Hyphenate `ever-present` when it functions as a compound adjective.\"\nlet description \"Corrects the missing hyphen in `ever present` to the compound adjective `ever-present`.\"\nlet kind \"Punctuation\"\nlet becomes \"ever-present\"\n\ntest \"ever present\" \"ever-present\"\ntest \"Distrust was an ever present tension in the negotiations.\" \"Distrust was an ever-present tension in the negotiations.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/EverSince.weir",
    "content": "expr main (every since)\n\nlet message \"Did you mean `ever since`?\"\nlet description \"Corrects `every since` to `ever since`.\"\nlet kind \"Typo\"\nlet becomes \"ever since\"\n\ntest \"einstein been real quiet every since this dropped\" \"einstein been real quiet ever since this dropped\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/EveryOnceAndAgain.weir",
    "content": "expr main (every once and again)\n\nlet message \"For things that happen only occasionaly use `every once in a while. For things that persistently happen use `once again`.\"\nlet description \"Corrects `every once and again` to `every once in a while` or `once again`.\"\nlet kind \"Usage\"\nlet becomes [\"every once in a while\", \"once again\"]\n\ntest \"Ys have been replaced with Ps, happens randomly every once and again with different letters\" \"Ys have been replaced with Ps, happens randomly every once in a while with different letters\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/EveryTime.weir",
    "content": "expr main (everytime)\n\nlet message \"`Everytime` as a single word is proscribed. Use `every time` instead.\"\nlet description \"Corrects `everytime` to `every time`.\"\nlet kind \"Usage\"\nlet becomes \"every time\"\n\ntest \"Init tool everytime a file in a directory is modified\" \"Init tool every time a file in a directory is modified\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Excellent.weir",
    "content": "expr main (very good)\n\nlet message \"Vocabulary enhancement: use `excellent` instead of `very good`\"\nlet description \"Provides a stronger word choice by replacing `very good` with `excellent` for clarity and emphasis.\"\nlet kind \"Enhancement\"\nlet becomes \"excellent\"\n\ntest \"Her results were very good this semester.\" \"Her results were excellent this semester.\"\nallows \"The performance was excellent, drawing praise from all critics.\"\nallows \"He radiated a sense of very goodness in his charitable acts.\"\ntest \"She generally gave herself very good advice\" \"She generally gave herself excellent advice\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ExpandBecause.weir",
    "content": "expr main (cuz)\n\nlet message \"Use `because` instead of informal `cuz`\"\nlet description \"Expands the informal abbreviation `cuz` to the full word `because` for formality.\"\nlet kind \"Style\"\nlet becomes \"because\"\n\ntest \"Stick around cuz I got a surprise for you at the end.\" \"Stick around because I got a surprise for you at the end.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ExpandControl.weir",
    "content": "expr main (ctrl)\n\nlet message \"Use `control` instead of informal `ctrl`\"\nlet description \"Expands the informal abbreviation `ctrl` to the full word `control` for clarity.\"\nlet kind \"Style\"\nlet becomes \"control\"\n\ntest \"Ctrl+click\" \"Control+click\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ExpandForward.weir",
    "content": "expr main (fwd)\n\nlet message \"Use `forward` instead of `fwd`\"\nlet description \"Expands the abbreviation `fwd` to the full word `forward` for clarity.\"\nlet kind \"Style\"\nlet becomes \"forward\"\n\ntest \"Now I look fwd to the interior, the color, etc.\" \"Now I look forward to the interior, the color, etc.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ExpandMinimum.weir",
    "content": "expr main (min)\n\nlet message \"Use `minimum` instead of `min`\"\nlet description \"Expands the abbreviation `min` to the full word `minimum` for clarity.\"\nlet kind \"Style\"\nlet becomes \"minimum\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ExpandPrevious.weir",
    "content": "expr main (prev)\n\nlet message \"Use `previous` instead of `prev`\"\nlet description \"Expands the abbreviation `prev` to the full word `previous` for clarity.\"\nlet kind \"Style\"\nlet becomes \"previous\"\n\ntest \"Just change :after by :before in the code above. Otherwise, you'll see the default prev/next images + the font awesome chevrons.Read\" \"Just change :after by :before in the code above. Otherwise, you'll see the default previous/next images + the font awesome chevrons.Read\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/ExpandThrough.weir",
    "content": "expr main (thru)\n\nlet message \"Use `thru` instead of `through`\"\nlet description \"Expands the informal spelling `thru` to the standard word `through`.\"\nlet kind \"Style\"\nlet becomes \"through\"\n\ntest \"Switch with coloned value parsed differently when invoking with pass thru args\" \"Switch with coloned value parsed differently when invoking with pass through args\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/ExpandWith.weir",
    "content": "expr main (w/)\n\nlet message \"Use `with` instead of `w/`\"\nlet description \"Expands the abbreviation `w/` to the full word `with` for clarity.\"\nlet kind \"Style\"\nlet becomes \"with\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ExpandWithout.weir",
    "content": "expr main (w/o)\n\nlet message \"Use `without` instead of `w/o`\"\nlet description \"Expands the abbreviation `w/o` to the full word `without` for clarity.\"\nlet kind \"Style\"\nlet becomes \"without\"\n\ntest \"She lacks w/o experience.\" \"She lacks without experience.\"\ntest \"He has w/o skills w/o knowledge.\" \"He has without skills without knowledge.\"\ntest \"The report includes w/o details.\" \"The report includes without details.\"\nallows \"She works with out effort.\"\ntest \"She’s w/o a plan.\" \"She’s without a plan.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/FaceFirst.weir",
    "content": "expr main (face first into)\n\nlet message \"Should this be `face-first`?\"\nlet description \"Ensures `face first` is correctly hyphenated as `face-first` when used before `into`.\"\nlet kind \"Punctuation\"\nlet becomes \"face-first into\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/FairBit.weir",
    "content": "expr main (fare bit)\n\nlet message \"A `decent amount` is a `fair bit`. `Fare` is the price of a ticket.\"\nlet description \"Corrects malapropisms of `a fair bit`.\"\nlet kind \"Eggcorn\"\nlet becomes \"fair bit\"\n\ntest \"I've read through a fare bit of the ecosystem framework, but I am not clear on what is modified...\" \"I've read through a fair bit of the ecosystem framework, but I am not clear on what is modified...\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/FarAndFewBetween.weir",
    "content": "expr main (far and few between)\n\nlet message \"The correct idiom is `few and far between`?\"\nlet description \"Corrects `far and few between` to the standard idiom `few and far between`.\"\nlet kind \"Eggcorn\"\nlet becomes \"few and far between\"\n\ntest \"Their neighbors were far and few between, which only made it even more unlikely that surveillance footage recovered from their properties could help.\" \"Their neighbors were few and far between, which only made it even more unlikely that surveillance footage recovered from their properties could help.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/FastPaste.weir",
    "content": "expr main [(fast paste), (fast-paste)]\n\nlet message \"Did you mean `fast-paced`?\"\nlet description \"Detects incorrect usage of `fast paste` or `fast-paste` and suggests `fast-paced` as the correct phrase.\"\nlet kind \"Eggcorn\"\nlet becomes \"fast-paced\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/FatalOutcome.weir",
    "content": "expr main (fatal outcome)\n\nlet message \"Consider using `death` for clarity.\"\nlet description \"Replaces `fatal outcome` with the more direct term `death` for conciseness.\"\nlet kind \"Style\"\nlet becomes \"death\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/FetalPosition.weir",
    "content": "expr main (the feeble position)\n\nlet message \"Use the correct term for a curled-up posture.\"\nlet description \"Ensures the correct use of `fetal position`, avoiding confusion with `feeble position`, which is not a standard phrase.\"\nlet kind \"Malapropism\"\nlet becomes \"the fetal position\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ForALongTime.weir",
    "content": "expr main (for along time)\n\nlet message \"Use the standard phrase `for a long time` to indicate an extended duration.\"\nlet description \"Eliminates the incorrect merging in `for along time`.\"\nlet kind \"Grammar\"\nlet becomes \"for a long time\"\n\ntest \"I was stuck there for along time.\" \"I was stuck there for a long time.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ForAWhile.weir",
    "content": "expr main (for while)\n\nlet message \"When describing a timeframe, use `a while`.\"\nlet description \"Corrects the missing article in `for while`, forming `for a while`.\"\nlet kind \"Typo\"\nlet becomes \"for a while\"\n\ntest \"Build flutter releases in github actions for production only android for while.\" \"Build flutter releases in github actions for production only android for a while.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ForArgumentsSake.weir",
    "content": "expr main [(for argument sake), (for arguments sake)]\n\nlet message \"Use the possessive `argument's`.\"\nlet description \"Corrects `for argument sake` to `for argument's sake`.\"\nlet kind \"Usage\"\nlet becomes \"for argument's sake\"\n\ntest \"I'm sure it would be incorrect to do so, but for argument sake, if I change\" \"I'm sure it would be incorrect to do so, but for argument's sake, if I change\"\ntest \"In my app, for arguments sake user hits button which sets search_term\" \"In my app, for argument's sake user hits button which sets search_term\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/ForTheMostPart.weir",
    "content": "expr main (for most part)\n\nlet message \"Use `for the most part` instead of `for most part`.\"\nlet description \"Corrects `for most part` to `for the most part`.\"\nlet kind \"Usage\"\nlet becomes [\"for the most part\"]\n\ntest \"Got bot working for most part but he has trouble with vendor potions\" \"Got bot working for the most part but he has trouble with vendor potions\"\ntest \"it's unresponsive for most part and the only thing you can do is to restart for most part\" \"it's unresponsive for the most part and the only thing you can do is to restart for the most part\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/FreeRein.weir",
    "content": "expr main (free reign)\n\nlet message \"Use the correct phrase for unrestricted control.\"\nlet description \"Ensures the correct use of `free rein`, avoiding confusion with `free reign`, which incorrectly suggests authority rather than freedom of action.\"\nlet kind \"Eggcorn\"\nlet becomes \"free rein\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Freezing.weir",
    "content": "expr main [(very cold), (really cold), (extremely cold)]\n\nlet message \"A more vivid adjective would better capture extreme cold.\"\nlet description \"Encourages vivid writing by suggesting `freezing` instead of weaker expressions like `very cold.`\"\nlet kind \"Enhancement\"\nlet becomes \"freezing\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/FromTheGetGo.weir",
    "content": "expr main (from the get go)\n\nlet message \"Use the hyphenated form: `from the get-go`.\"\nlet description \"Ensures `from the get-go` is correctly hyphenated, preserving the idiom’s meaning of ‘from the very beginning’.\"\nlet kind \"Punctuation\"\nlet becomes \"from the get-go\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/GildedAge.weir",
    "content": "expr main (guilded age)\n\nlet message \"The period of economic prosperity is called the `Gilded Age`.\"\nlet description \"If referring to the period of economic prosperity, the correct term is `Gilded Age`.\"\nlet kind \"Eggcorn\"\nlet becomes \"Gilded Age\"\nlet strategy \"Exact\"\n\ntest \"It is especially a reflection of the socio-economic patterns in the Guilded Age.\" \"It is especially a reflection of the socio-economic patterns in the Gilded Age.\"\ntest \"It is especially a reflection of the socio-economic patterns in the guilded age.\" \"It is especially a reflection of the socio-economic patterns in the Gilded Age.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/GoggleBrand.weir",
    "content": "expr googleMispellings [goggle, googol]\nexpr main <(@googleMispellings [ads, analytics, calendar, chrome, classroom, docs, drive, forms, hangouts, mail, maps, news, photos, search, sheets, slides, translate, workspace]), @googleMispellings>\n\nlet message \"You probably meant to spell the company name `Google`.\"\nlet description \"Replaces the misspelling `goggle` when it is paired with a well-known Google service.\"\nlet kind \"Typo\"\nlet becomes \"Google\"\nlet strategy \"Exact\"\n\ntest \"goggle docs keeps syncing in the background.\" \"Google docs keeps syncing in the background.\"\ntest \"GOGGLE analytics shows the same anomaly.\" \"Google analytics shows the same anomaly.\"\ntest \"I bookmarked the goggle maps route for tomorrow.\" \"I bookmarked the Google maps route for tomorrow.\"\ntest \"Please open goggle slides before the meeting.\" \"Please open Google slides before the meeting.\"\ntest \"We archived the goggle forms responses for later.\" \"We archived the Google forms responses for later.\"\ntest \"The goggle drive link expired yesterday.\" \"The Google drive link expired yesterday.\"\ntest \"His goggle search history is a little wild.\" \"His Google search history is a little wild.\"\ntest \"Goggle workspace just announced a redesign.\" \"Google workspace just announced a redesign.\"\ntest \"goggle mail and goggle calendar both flagged the alert.\" \"Google mail and Google calendar both flagged the alert.\"\ntest \"Send the screenshot to goggle photos support.\" \"Send the screenshot to Google photos support.\"\ntest \"Send the screenshot to googol photos support.\" \"Send the screenshot to Google photos support.\"\n\ntest \"She wore a goggle when swimming.\" \"She wore a goggle when swimming.\"\ntest \"The archaeologist examined the ancient goggle carefully.\" \"The archaeologist examined the ancient goggle carefully.\"\ntest \"This goggle strap needs tightening.\" \"This goggle strap needs tightening.\"\ntest \"Goggle is a brand of swimwear.\" \"Goggle is a brand of swimwear.\"\ntest \"Let's goggle the data and see what pops up.\" \"Let's goggle the data and see what pops up.\"\ntest \"Goggles help keep sand out of the eyes.\" \"Goggles help keep sand out of the eyes.\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/GoingTo.weir",
    "content": "expr main (gong to)\n\nlet message \"Did you mean `going to`?\"\nlet description \"Corrects `gong to` to the intended phrase `going to`.\"\nlet kind \"Typo\"\nlet becomes \"going to\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/GuineaBissau.weir",
    "content": "expr main (Guinea Bissau)\n\nlet message \"The official spelling is hyphenated.\"\nlet description \"Checks for the correct official name of the African country.\"\nlet kind \"Punctuation\"\nlet becomes \"Guinea-Bissau\"\n\ntest \"Guinea Bissau\" \"Guinea-Bissau\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/HadOf.weir",
    "content": "expr main (had of)\n\nlet message \"Did you mean `had have` or `had've`?\"\nlet description \"Flags the unnecessary use of `of` after `had` and suggests the correct forms.\"\nlet kind \"Grammar\"\nlet becomes [\"had have\", \"had've\"]\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/HalfAnHour.weir",
    "content": "expr main (half an our)\n\nlet message \"Remember the silent 'h' when writing `hour`: `half an hour`.\"\nlet description \"Fixes the eggcorn `half an our` to the accepted `half an hour`.\"\nlet kind \"Typo\"\nlet becomes \"half an hour\"\n\ntest \"It took half an our to get there.\" \"It took half an hour to get there.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Haphazard.weir",
    "content": "expr main [(half hazard), (half-hazard), (halfhazard)]\n\nlet message \"Use `haphazard` for randomness or lack of organization.\"\nlet description \"Corrects the eggcorn `half hazard` to `haphazard`, which properly means lacking organization or being random.\"\nlet kind \"Eggcorn\"\nlet becomes \"haphazard\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/HeDos.weir",
    "content": "expr main <([(he dos), (he ADV dos), (she dos), (she ADV dos), (it dos), (it ADV dos)]), dos>\n\nlet message \"Did you mean `does`?\"\nlet description \"Corrects the misspelling `dos` after `he`, `she`, or `it`.\"\nlet kind \"Typo\"\nlet becomes \"does\"\n\ntest \"He dos not want to go.\" \"He does not want to go.\"\ntest \"She dos it.\" \"She does it.\"\ntest \"It dos work.\" \"It does work.\"\ntest \"he dos not like it.\" \"he does not like it.\"\ntest \"HE DOS IT.\" \"HE DOES IT.\"\ntest \"He just dos it.\" \"He just does it.\"\ntest \"She never dos that.\" \"She never does that.\"\ntest \"It really dos.\" \"It really does.\"\ntest \"He dos.\" \"He does.\"\ntest \"She dos, then she stops.\" \"She does, then she stops.\"\nallows \"I dos it.\"\nallows \"They dos it.\"\nallows \"Dos is Spanish for two.\"\nallows \"He does it.\"\nallows \"He doso it.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/HeartToHeard.weir",
    "content": "expr main <([([have, has, had] [I, you, he, she, it, we, they] [heart, herd] [of, about, from, in, on, for, to, with]), ([have, has, had] [I, you, he, she, it, we, they] ADV [heart, herd] [of, about, from, in, on, for, to, with]), ([have, has, had] n't [I, you, he, she, it, we, they] [heart, herd] [of, about, from, in, on, for, to, with]), ([have, has, had] n't [I, you, he, she, it, we, they] ADV [heart, herd] [of, about, from, in, on, for, to, with]), ([have, has, had] DET NOUN ADV [heart, herd] [of, about, from, in, on, for, to, with]), ([have, has, had] n't DET NOUN ADV [heart, herd] [of, about, from, in, on, for, to, with]), ([haven't, hasn't, hadn't] [I, you, he, she, it, we, they] [heart, herd] [of, about, from, in, on, for, to, with]), ([haven't, hasn't, hadn't] [I, you, he, she, it, we, they] ADV [heart, herd] [of, about, from, in, on, for, to, with]), ([haven't, hasn't, hadn't] DET NOUN ADV [heart, herd] [of, about, from, in, on, for, to, with])]), [heart, herd]>\n\nlet message \"Did you mean the verb `heard` (= past tense of `hear`)?\"\nlet description \"Corrects `heart` or `herd` to `heard` in common `have ... heard of/about` questions.\"\nlet kind \"Usage\"\nlet becomes \"heard\"\n\ntest \"Have you heart of this band?\" \"Have you heard of this band?\"\ntest \"Have you herd of this band?\" \"Have you heard of this band?\"\ntest \"Have you ever heart of this band?\" \"Have you ever heard of this band?\"\ntest \"Have you ever herd of this band?\" \"Have you ever heard of this band?\"\ntest \"Has she heart of the update?\" \"Has she heard of the update?\"\ntest \"Has she ever heart of the update?\" \"Has she ever heard of the update?\"\ntest \"Had they heart of the plan?\" \"Had they heard of the plan?\"\ntest \"Have the police ever heart of this?\" \"Have the police ever heard of this?\"\ntest \"Have the staff ever herd of the policy?\" \"Have the staff ever heard of the policy?\"\ntest \"Haven't you heart of that movie?\" \"Haven't you heard of that movie?\"\ntest \"Haven't you ever herd of that movie?\" \"Haven't you ever heard of that movie?\"\nallows \"Have you heard of this band?\"\nallows \"Have the police heard of this?\"\nallows \"Have the heart of this story been told?\"\nallows \"I have a herd of cattle.\"\nallows \"I have heart of the matter already.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/HiddenIn.weir",
    "content": "expr main (hidden into)\n\nlet message \"Did you mean `hidden in`?\"\nlet description \"Corrects `hidden into` to `hidden in`.\"\nlet kind \"Usage\"\nlet becomes \"hidden in\"\n\ntest \"The button is hidden into the exam settings menu or something like that.\" \"The button is hidden in the exam settings menu or something like that.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/HowMach.weir",
    "content": "expr main <(how [mach, match] !PUNCT), [mach, match]>\n\nlet message \"Use `how much` when you're asking about quantity, not the brand name or verb.\"\nlet description \"Swaps `how mach` or `how match` with the correct quantifier `how much`.\"\nlet kind \"Typo\"\nlet becomes \"much\"\n\ntest \"Do you know how mach it weighs?\" \"Do you know how much it weighs?\"\ntest \"Tell me how match sugar you want.\" \"Tell me how much sugar you want.\"\ntest \"How mach are we supposed to study?\" \"How much are we supposed to study?\"\ntest \"How match time have we spent already?\" \"How much time have we spent already?\"\ntest \"He wondered how mach courage it takes.\" \"He wondered how much courage it takes.\"\ntest \"She asked how match water to add.\" \"She asked how much water to add.\"\ntest \"Ask how mach light you need.\" \"Ask how much light you need.\"\ntest \"How mach did you train for this race?\" \"How much did you train for this race?\"\ntest \"How match of those settings are legal?\" \"How much of those settings are legal?\"\ntest \"HOW MACH DO YOU WANT IT?\" \"HOW MUCH DO YOU WANT IT?\"\nallows \"Now that we know how match() works, let's refactor.\"\nallows \"How Match.com Got Women to Sign Up for Online Dating.\"\nallows \"The engine develops 131.7kN and the speed of the aircraft is Mach 2.\"\nallows \"Tell me how much time you need.\"\nallows \"I can't decide how much of this to keep.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/HumanBeings.weir",
    "content": "expr main [(human's beings), (humans beings)]\n\nlet message \"Use `human beings` to refer to people collectively.\"\nlet description \"Eliminates the incorrect possessive/plural usage like `human's beings` or `humans beings`.\"\nlet kind \"Grammar\"\nlet becomes \"human beings\"\n\ntest \"All humans beings deserve empathy.\" \"All human beings deserve empathy.\"\ntest \"We should respect a human's beings fundamental rights.\" \"We should respect a human beings fundamental rights.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/HumanLife.weir",
    "content": "expr main (human live)\n\nlet message \"Did you mean `human life`?\"\nlet description \"Changes `human live` to `human life`.\"\nlet kind \"Typo\"\nlet becomes \"human life\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/HungerPang.weir",
    "content": "expr main (hunger pain)\n\nlet message \"Did you mean `hunger pang`?\"\nlet description \"Corrects `hunger pain` to `hunger pang`.\"\nlet kind \"Eggcorn\"\nlet becomes \"hunger pang\"\n\ntest \"hunger pain\" \"hunger pang\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/IAm.weir",
    "content": "expr main (I a m)\n\nlet message \"Did you mean `I am`?\"\nlet description \"Fixes the incorrect spacing in `I a m` to properly form `I am`.\"\nlet kind \"Typo\"\nlet becomes \"I am\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/IDo.weir",
    "content": "expr main (I does)\n\nlet message \"`I` pairs with the bare verb `do`; the –s inflection `does` is reserved for third-person singular subjects.\"\nlet description \"Corrects `I does` to `I do`.\"\nlet kind \"Agreement\"\nlet becomes \"I do\"\n\ntest \"I does enjoy writing Rust.\" \"I do enjoy writing Rust.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ImitateFrom.weir",
    "content": "expr imitateVerbs [imitate, imitates, imitated, imitating]\n\nexpr main <([(@imitateVerbs * from *), (@imitateVerbs * from * *), (@imitateVerbs * from * * *), (@imitateVerbs * * from *), (@imitateVerbs * * from * *), (@imitateVerbs * * from * * *), (@imitateVerbs * * * from *), (@imitateVerbs * * * from * *), (@imitateVerbs * * * from * * *), (@imitateVerbs * * * * from *), (@imitateVerbs * * * * from * *), (@imitateVerbs * * * * from * * *)]), (from)>\n\nlet message \"Use `of` with `imitate` when naming the source you copy.\"\nlet description \"After `imitate ...`, idiomatic phrasing points to the inspiration with `of` instead of `from`.\"\nlet kind \"Usage\"\nlet becomes \"of\"\n\n# True positives\ntest \"They imitate the rhythm from their mentor.\" \"They imitate the rhythm of their mentor.\"\ntest \"She imitates every gesture from her teacher.\" \"She imitates every gesture of her teacher.\"\ntest \"We imitated the cadence from the recording.\" \"We imitated the cadence of the recording.\"\ntest \"He imitates the haircut from the cover model.\" \"He imitates the haircut of the cover model.\"\ntest \"They are imitating the protocol from their architects.\" \"They are imitating the protocol of their architects.\"\ntest \"The troupe imitates every flourish from the original cast.\" \"The troupe imitates every flourish of the original cast.\"\ntest \"Our design imitates the polish from Picasso's gouache.\" \"Our design imitates the polish of Picasso's gouache.\"\ntest \"The coach imitates the pace from the champion.\" \"The coach imitates the pace of the champion.\"\ntest \"I imitated the approach from the guide.\" \"I imitated the approach of the guide.\"\ntest \"We imitate the vibe from our favorite show.\" \"We imitate the vibe of our favorite show.\"\ntest \"She imitates that electric rhythm from the rehearsal tape.\" \"She imitates that electric rhythm of the rehearsal tape.\"\ntest \"They imitate him from the clip to get the cadence right.\" \"They imitate him of the clip to get the cadence right.\"\n\n# Guardrails / False positives\nallows \"They imitate from memory.\"\nallows \"He imitates from scratch.\"\nallows \"The mimic imitates from afar.\"\nallows \"Imitate from this formula only when you intend to copy exact numbers.\"\nallows \"Our dancer imitates from the safety of the balcony.\"\nallows \"She imitates from the stage instead of the audience.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/InAHurry.weir",
    "content": "expr main (in hurry)\n\nlet message \"The correct idiom is `in a hurry`.\"\nlet description \"Corrects `in hurry` to `in a hurry`.\"\nlet kind \"Usage\"\nlet becomes \"in a hurry\"\n\ntest \"helpful when JSON is huge and developer is in hurry\" \"helpful when JSON is huge and developer is in a hurry\"\ntest \"eLab report making service for people in hurry.\" \"eLab report making service for people in a hurry.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/InAWhile.weir",
    "content": "expr main (in while)\n\nlet message \"When describing a timeframe, use `a while`.\"\nlet description \"Corrects the missing article in `in while`, forming `in a while`.\"\nlet kind \"Grammar\"\nlet becomes \"in a while\"\n\ntest \"We’ll talk again in while.\" \"We’ll talk again in a while.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/InAnyWay.weir",
    "content": "expr main (in anyway)\n\nlet message \"Use `in any way` for emphasizing a point.\"\nlet description \"Corrects ungrammatical `in anyway` to `in any way`.\"\nlet kind \"BoundaryError\"\nlet becomes \"in any way\"\n\ntest \"in anyway\" \"in any way\"\ntest \"The names should not affect your application in anyway and you can override extension names.\" \"The names should not affect your application in any way and you can override extension names.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/InLieuOf.weir",
    "content": "expr main (in lue of)\n\nlet message \"Did you mean `in lieu of`?\"\nlet description \"Corrects the misspelling `in lue of` to `in lieu of`.\"\nlet kind \"Spelling\"\nlet becomes \"in lieu of\"\n\ntest \"Controller Emulation in lue of Direct Controller binding\" \"Controller Emulation in lieu of Direct Controller binding\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/InNeedOf.weir",
    "content": "expr main (in need for)\n\nlet message \"Use `in need of` for when something is required or necessary.\"\nlet description \"Corrects `in need for` to `in need of`.\"\nlet kind \"Usage\"\nlet becomes \"in need of\"\n\ntest \"In need for a native control for map symbols (map legend) #5203.\" \"In need of a native control for map symbols (map legend) #5203.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/InOfItself.weir",
    "content": "expr main (in of itself)\n\nlet message \"Use `in itself` (more common) or `in and of itself` (more formal) to mean 'intrinsically'.\"\nlet description \"Corrects nonstandard `in of itself` to standard `in itself` or `in and of itself`.\"\nlet kind \"Usage\"\nlet becomes [\"in itself\", \"in and of itself\"]\n\ntest \"in of itself\" \"in and of itself\"\ntest \"This is not entirely unexpected in of itself, as Git and GitHub Desktop both generally prove fairly bad at delineating context intelligently...\" \"This is not entirely unexpected in and of itself, as Git and GitHub Desktop both generally prove fairly bad at delineating context intelligently...\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/InThe.weir",
    "content": "expr main (int he)\n\nlet message \"Did you mean `in the`?\"\nlet description \"Detects and corrects a spacing error where `in the` is mistakenly written as `int he`. Proper spacing is essential for readability and grammatical correctness in common phrases.\"\nlet kind \"Typo\"\nlet becomes \"in the\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Initiatively.weir",
    "content": "expr main initiatively\n\nlet message \"Did you mean `proactive` (taking initiative, acting in advance) or `initially` (at first, in the beginning)?\"\nlet description \"Corrects nonstandard `initiatively`.\"\nlet kind \"Nonstandard\"\nlet becomes [\"proactively\", \"initially\"]\n\ntest \"I have initiatively signed up for the course.\" \"I have proactively signed up for the course.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Insensitive.weir",
    "content": "expr main (unsensitive)\n\nlet message \"This word has a more standard, more common synonym.\"\nlet description \"Suggests the more standard and common synonym `insensitive`.\"\nlet kind \"WordChoice\"\nlet becomes \"insensitive\"\n\ntest \"We want to potentially make an unsensitive header\" \"We want to potentially make an insensitive header\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/InsteadOf.weir",
    "content": "expr main (in stead of)\n\nlet message \"Use the modern single word `instead of` to indicate a replacement.\"\nlet description \"Corrects the archaic or mistaken separation `in stead of` to `instead of` in everyday usage.\"\nlet kind \"BoundaryError\"\nlet becomes \"instead of\"\n\ntest \"He used water in stead of soda.\" \"He used water instead of soda.\"\nallows \"He used water instead of soda.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/Insurmountable.weir",
    "content": "expr main (unsurmountable)\n\nlet message \"This word has a more standard, more common synonym.\"\nlet description \"Suggests the more standard and common synonym `insurmountable`.\"\nlet kind \"WordChoice\"\nlet becomes \"insurmountable\"\n\ntest \"That being said, if you find upgrading to newer versions to be unsurmountable, please open an issue.\" \"That being said, if you find upgrading to newer versions to be insurmountable, please open an issue.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/IsKnownFor.weir",
    "content": "expr main (is know for)\n\nlet message \"Did you mean `is known for`?\"\nlet description \"Typo: `known` is the correct past participle.\"\nlet kind \"Typo\"\nlet becomes \"is known for\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ItCan.weir",
    "content": "expr main (It cam)\n\nlet message \"Did you mean `It can`?\"\nlet description \"Corrects the misspelling `It cam` to the proper phrase `It can`.\"\nlet kind \"Typo\"\nlet becomes \"It can\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/IveGotTo.weir",
    "content": "expr main (I've go to)\n\nlet message \"Use `I've got to` for necessity or obligation.\"\nlet description \"Corrects the slip `I've go to` to the idiomatic `I've got to`.\"\nlet kind \"Typo\"\nlet becomes \"I've got to\"\n\ntest \"I've go to finish this before Monday.\" \"I've got to finish this before Monday.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/JawDropping.weir",
    "content": "expr main (jar-dropping)\n\nlet message \"Use the correct phrase for something astonishing.\"\nlet description \"Corrects `jar-dropping` to `jaw-dropping`, ensuring the intended meaning of something that causes amazement.\"\nlet kind \"Eggcorn\"\nlet becomes \"jaw-dropping\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/JustDeserts.weir",
    "content": "expr main (just desserts)\n\nlet message \"Use the correct phrase for receiving what one deserves.\"\nlet description \"Ensures `just deserts` is used correctly, preserving its meaning of receiving an appropriate outcome for one's actions.\"\nlet kind \"Spelling\"\nlet becomes \"just deserts\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/KindOf.weir",
    "content": "expr main (kinda of)\n\nlet message \"`Kinda` already means `kind of`, so `kinda of` is redundant.\"\nlet description \"Corrects `kinda of` to `kind of`.\"\nlet kind \"Redundancy\"\nlet becomes [\"kind of\", \"kinda\"]\n\ntest \"Some kinda of Sync issue only with 0.79.1\" \"Some kind of Sync issue only with 0.79.1\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/KindRegards.weir",
    "content": "expr main (kid regards)\n\nlet message \"Did you mean `kind regards`?\"\nlet description \"Changes `kid regards` to `kind regards`.\"\nlet kind \"Typo\"\nlet becomes \"kind regards\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/KindSortOf.weir",
    "content": "expr connector [kind, sort]\nexpr wrongprep [if, off]\nexpr guard ![PRON, INTJ, PART, CCONJ, SCONJ, ADP, PUNCT, this, that, these, those, there, here]\n\nexpr main <((@connector @wrongprep) @guard), (@wrongprep)>\n\nlet message \"Use `of` after `kind` or `sort` when you mean the softening filler instead of the typo.\"\nlet description \"Flags `kind if` or `sort off` that stand before qualifiers so the filler `of` stays intact.\"\nlet kind \"Typo\"\nlet becomes \"of\"\n\n# True positives\n\ntest \"I'm kind if tired today.\" \"I'm kind of tired today.\"\ntest \"Sort off the new theme looked strange.\" \"Sort of the new theme looked strange.\"\ntest \"This is kind if a stretch for sure.\" \"This is kind of a stretch for sure.\"\ntest \"We saw sort off the same glitch twice.\" \"We saw sort of the same glitch twice.\"\ntest \"Kind off serious bugs remain.\" \"Kind of serious bugs remain.\"\ntest \"Sort off a few people ignored the warning.\" \"Sort of a few people ignored the warning.\"\ntest \"KIND IF IMPORTANT signals lit up the board.\" \"KIND OF IMPORTANT signals lit up the board.\"\ntest \"kind off perfectly tuned feedback arrived.\" \"kind of perfectly tuned feedback arrived.\"\ntest \"Sort off a steady trend emerges soon.\" \"Sort of a steady trend emerges soon.\"\n\n# True negatives / false positives\n\ntest \"Be kind if you can.\" \"Be kind if you can.\"\ntest \"Sort if that path seems safe.\" \"Sort if that path seems safe.\"\ntest \"Kind if there is time, I'll help.\" \"Kind if there is time, I'll help.\"\ntest \"Sort if this plan feels solid.\" \"Sort if this plan feels solid.\"\n\n# Known false negatives\n\ntest \"Kind if, at first, the logs were quiet.\" \"Kind if, at first, the logs were quiet.\"\ntest \"Sort off, despite the caveats, the data feels solid.\" \"Sort off, despite the caveats, the data feels solid.\"\ntest \"kind if whatever, I trust the fix.\" \"kind if whatever, I trust the fix.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/LastButNotLeast.weir",
    "content": "expr main [(last but not the least), (last, but not the least), (last but, not least), (last but not last)]\n\nlet message \"Use the more idiomatic phrasing.\"\nlet description \"Corrects common errors in the phrase `last but not least`.\"\nlet kind \"Usage\"\nlet becomes \"last but not least\"\n\ntest \"Last but not the least, with VS2013 you can use Web Essentials 2013\" \"Last but not least, with VS2013 you can use Web Essentials 2013\"\ntest \"Last but not last, I'd like to thank my parents.\" \"Last but not least, I'd like to thank my parents.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/LastDitch.weir",
    "content": "expr main [(last ditch), (last ditched), (last-ditched)]\n\nlet message \"In this idiom, `ditch` is a noun and a hyphen is needed.\"\nlet description \"Corrects wrong variations of the idiomatic adjective `last-ditch`.\"\nlet kind \"Usage\"\nlet becomes \"last-ditch\"\n\ntest \"I was actually just trying that as a last ditched attempt to get it working, previously those ...\" \"I was actually just trying that as a last-ditch attempt to get it working, previously those ...\"\ntest \"There are unique use cases and is meant to be a last ditch option.\" \"There are unique use cases and is meant to be a last-ditch option.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/LastNight.weir",
    "content": "expr main (yesterday night)\n\nlet message \"The idiomatic phrase is `last night`.\"\nlet description \"Flags `yesterday night` and suggests the standard phrasing `last night`.\"\nlet kind \"WordChoice\"\nlet becomes \"last night\"\n\ntest \"I was there yesterday night.\" \"I was there last night.\"\ntest \"Yesterday night was fun.\" \"Last night was fun.\"\ntest \"Yesterday night, we watched a movie.\" \"Last night, we watched a movie.\"\ntest \"They left yesterday night after the show.\" \"They left last night after the show.\"\nallows \"I remember last night clearly.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/LaughOfAt.weir",
    "content": "expr main <([laugh, laughs, laughed, laughing] of [PRON, PROPN]), of>\n\nlet message \"Use `laugh at ...` instead of `laugh of ...` when pointing at someone.\"\nlet description \"Warns when `laugh` takes `of` before a person or pronoun and nudges writers toward the conventional `at`.\"\nlet kind \"Usage\"\nlet becomes \"at\"\n\ntest \"I laugh of him.\" \"I laugh at him.\"\ntest \"She laughs of her teacher.\" \"She laughs at her teacher.\"\ntest \"They laughed of us in the hallway.\" \"They laughed at us in the hallway.\"\ntest \"He's laughing of them already.\" \"He's laughing at them already.\"\ntest \"We laugh of you whenever you wear that hat.\" \"We laugh at you whenever you wear that hat.\"\ntest \"Laugh of John while he waits.\" \"Laugh at John while he waits.\"\ntest \"Don't laugh of your teammate again.\" \"Don't laugh at your teammate again.\"\ntest \"The crowd laughs of Mary when she trips.\" \"The crowd laughs at Mary when she trips.\"\ntest \"I was laughing of Alex when the joke landed.\" \"I was laughing at Alex when the joke landed.\"\ntest \"They laugh of me even when I'm serious.\" \"They laugh at me even when I'm serious.\"\nallows \"The laugh of the audience shook the rafters.\"\nallows \"That's the laugh of the most relentless critic.\"\nallows \"The laugh of the baby warmed everyone.\"\nallows \"We had a laugh of relief when it ended.\"\nallows \"A laugh of astonishment escaped him.\"\nallows \"Her laugh of disbelief made us pause.\"\nallows \"The laugh of a friend sounded distant.\"\nallows \"I savor the laugh of children playing outside.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/LeaveToFor.weir",
    "content": "expr main <([leave, leaves, left, leaving] to [PROPN] [next, tomorrow, soon]), to>\n\nlet message \"Use `for` when pointing a departure toward a place.\"\nlet description \"When describing travel plans that include a destination and a time frame, prefer `leave for a destination` instead of `leave to a destination`.\"\nlet kind \"Usage\"\nlet becomes \"for\"\nlet strategy \"MatchCase\"\n\ntest \"They are leaving to England soon.\" \"They are leaving for England soon.\"\ntest \"We leave to Japan tomorrow morning.\" \"We leave for Japan tomorrow morning.\"\ntest \"He leaves to Canada next week.\" \"He leaves for Canada next week.\"\ntest \"We're leaving to Morocco next fall.\" \"We're leaving for Morocco next fall.\"\ntest \"They're leaving to France tomorrow.\" \"They're leaving for France tomorrow.\"\ntest \"My team leaves to London soon for the conference.\" \"My team leaves for London soon for the conference.\"\ntest \"We are leaving to Brazil soon.\" \"We are leaving for Brazil soon.\"\ntest \"I leave to Spain next Monday.\" \"I leave for Spain next Monday.\"\ntest \"He left to Italy soon after the ceremony.\" \"He left for Italy soon after the ceremony.\"\ntest \"The crew is leaving to Paris soon.\" \"The crew is leaving for Paris soon.\"\nallows \"I leave it to you.\"\nallows \"Leave it to me, and I'll handle it.\"\nallows \"We are leaving to the west soon.\"\nallows \"We left to surprise them.\"\nallows \"They leave to inform the board tomorrow.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/LetAlone.weir",
    "content": "expr main (let along)\n\nlet message \"Did you mean `let alone`?\"\nlet description \"Changes `let along` to `let alone`.\"\nlet kind \"Typo\"\nlet becomes \"let alone\"\n\ntest \"let along\" \"let alone\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/LikeAsIf.weir",
    "content": "expr main (like as if)\n\nlet message \"Avoid redundancy. Use either `like` or `as if`.\"\nlet description \"Corrects redundant `like as if` to `like` or `as if`.\"\nlet becomes [\"like\", \"as if\"]\n\ntest \"And looks like as if linux-personality hasn't got any changes for 8 years.\" \"And looks as if linux-personality hasn't got any changes for 8 years.\"\ntest \"She looks like as if she’s tired.\" \"She looks as if she’s tired.\"\ntest \"He seems like as if he’s happy.\" \"He seems as if he’s happy.\"\ntest \"It feels like as if it’s a dream.\" \"It feels as if it’s a dream.\"\nallows \"She acts like a hero.\"\ntest \"She seems like as if she’s in love.\" \"She seems as if she’s in love.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/LikeThePlague.weir",
    "content": "expr main (like a plague)\n\nlet message \"`Things are avoided `like the plague` not `like a plague`.\"\nlet description \"Corrects `like a plague` to `like the plague`.\"\nlet kind \"Usage\"\nlet becomes \"like the plague\"\n\ntest \"Below is the worst example of them all (avoid such coding like a plague):\" \"Below is the worst example of them all (avoid such coding like the plague):\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/LikeTheresNoTomorrow.weir",
    "content": "expr main (like no tomorrow)\n\nlet message \"The correct phrase is `like there's no tomorrow`.\"\nlet description \"Corrects `like no tomorrow` to `like there's no tomorrow`.\"\nlet kind \"Usage\"\nlet becomes \"like there's no tomorrow\"\n\ntest \"Also, AI is getting pushed like no tomorrow, on so many levels im personally seeing it's honestly staggering.\" \"Also, AI is getting pushed like there's no tomorrow, on so many levels im personally seeing it's honestly staggering.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/LikelyHood.weir",
    "content": "expr main (likely hood)\n\nlet message \"Merge `likely hood` into the established noun `likelihood`.\"\nlet description \"Treat the split tokens as one compound word (`likelihood`) whenever the adjective `likely` precedes `hood`.\"\nlet kind \"Usage\"\nlet becomes \"likelihood\"\nlet strategy \"MatchCase\"\n\n# True positives\ntest \"likely hood\" \"likelihood\"\ntest \"Likely hood\" \"Likelihood\"\ntest \"The likely hood of rain has me packing an umbrella.\" \"The likelihood of rain has me packing an umbrella.\"\ntest \"We treat that likely hood as a probability metric.\" \"We treat that likelihood as a probability metric.\"\ntest \"An analyst improved on his likely hood forecast.\" \"An analyst improved on his likelihood forecast.\"\ntest \"The likely hood of data loss grows with age.\" \"The likelihood of data loss grows with age.\"\ntest \"Another likely hood sample shows the same pattern.\" \"Another likelihood sample shows the same pattern.\"\ntest \"My likely hood estimation improved yesterday.\" \"My likelihood estimation improved yesterday.\"\ntest \"Likely hood matters more than a coin flip.\" \"Likelihood matters more than a coin flip.\"\ntest \"Treat that likely hood carefully.\" \"Treat that likelihood carefully.\"\n\n# Seek to leave everything else untouched\nallows \"The hood is dark and damp.\"\nallows \"I like your hooded jacket; it's warm.\"\nallows \"Likely, the hood is black tonight.\"\nallows \"The likelihood is already high so we celebrate.\"\nallows \"He feared the hoods in the alley.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/LinesOfCode.weir",
    "content": "expr main [(line of codes), (lines of codes)]\n\nlet message \"The correct plural is `lines of code`.\"\nlet description \"Corrects pluralizing the wrong noun in `lines of code`.\"\nlet kind \"Usage\"\nlet becomes \"lines of code\"\n\ntest \"These are line of codes we should refactor.\" \"These are lines of code we should refactor.\"\ntest \"We removed several lines of codes yesterday.\" \"We removed several lines of code yesterday.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/LooksLikes.weir",
    "content": "expr main <([looks, looked, looking] likes), likes>\n\nlet message \"Drop the extra `s` in `likes` when it immediately follows a form of `look`.\"\nlet description \"This rule turns `looks likes`, `looked likes`, and `looking likes` into the idiomatic `look ... like`.\"\nlet kind \"Typo\"\nlet becomes \"like\"\n\ntest \"It looks likes the same story.\" \"It looks like the same story.\"\ntest \"The memoir looked likes a diary.\" \"The memoir looked like a diary.\"\ntest \"The detective is looking likes the culprit.\" \"The detective is looking like the culprit.\"\ntest \"She looks likes, honestly, a champion.\" \"She looks like, honestly, a champion.\"\ntest \"LOOKS LIKES a bad omen.\" \"LOOKS LIKE a bad omen.\"\ntest \"It looked LIKES a mirage.\" \"It looked LIKE a mirage.\"\ntest \"He is looking LIKES his brother.\" \"He is looking LIKE his brother.\"\ntest \"Looks likes both people are arriving.\" \"Looks like both people are arriving.\"\ntest \"She looked likes, well there it is.\" \"She looked like, well there it is.\"\ntest \"Those who are looking likes a miracle never arrive.\" \"Those who are looking like a miracle never arrive.\"\ntest \"Looks  likes the worst scenario.\" \"Looks  like the worst scenario.\"\n\nallows \"Looks like the winner.\"\nallows \"He likes to code every day.\"\nallows \"She looked like a star.\"\nallows \"I was looking carefully.\"\nallows \"I like how it looks.\"\nallows \"Like how he likes the team.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/LowHangingFruit.weir",
    "content": "expr main [(low[-, ( )]hanging fruits), (low hanging fruit)]\n\nlet message \"The standard form is `low-hanging fruit` with a hyphen and singular form.\"\nlet description \"Corrects nonstandard variants of `low-hanging fruit`.\"\nlet kind \"Usage\"\nlet becomes \"low-hanging fruit\"\n\ntest \"If you add me as a collaborator i can start merging some of the low hanging fruit.\" \"If you add me as a collaborator i can start merging some of the low-hanging fruit.\"\ntest \"Field guide to gather low-hanging fruits.\" \"Field guide to gather low-hanging fruit.\"\ntest \"Will search for low hanging fruits and useful information for escalation on a compromised workstation.\" \"Will search for low-hanging fruit and useful information for escalation on a compromised workstation.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ManagerialReins.weir",
    "content": "expr main (managerial reigns)\n\nlet message \"Swap in `reins` when talking about control of a team or project.\"\nlet description \"Corrects the eggcorn `managerial reigns` to the idiomatic `managerial reins`.\"\nlet kind \"Eggcorn\"\nlet becomes \"managerial reins\"\n\ntest \"She grabbed the managerial reigns during the crisis.\" \"She grabbed the managerial reins during the crisis.\"\ntest \"Managerial reigns are never easy to hand over.\" \"Managerial reins are never easy to hand over.\"\ntest \"The managerial reigns belong to Carla now.\" \"The managerial reins belong to Carla now.\"\ntest \"By winter, he held the managerial reigns, and morale improved.\" \"By winter, he held the managerial reins, and morale improved.\"\ntest \"Who will hold the managerial reigns after April?\" \"Who will hold the managerial reins after April?\"\ntest \"\\\"managerial reigns\\\" showed up in the draft notes.\" \"\\\"managerial reins\\\" showed up in the draft notes.\"\nallows \"He kept the managerial reins despite the reshuffle.\"\nallows \"Legends of ancient reigns filled the museum.\"\ntest \"They debated who should manage the managerial reigns for the quarter.\" \"They debated who should manage the managerial reins for the quarter.\"\ntest \"Their memo shouted MANAGERIAL REIGNS.\" \"Their memo shouted MANAGERIAL REINS.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/MercedesBenzHyphen.weir",
    "content": "expr main (Mercedes Benz)\n\nlet message \"Hyphenate the two components of this classic Mercedes-Benz trademark.\"\nlet description \"Connect the separate words `Mercedes` and `Benz` whenever they appear together so the brand stays consistent with its official styling.\"\nlet kind \"Spelling\"\nlet becomes \"Mercedes-Benz\"\nlet strategy \"Exact\"\n\n# True positives\ntest \"Mercedes Benz is iconic.\" \"Mercedes-Benz is iconic.\"\ntest \"Have you seen Mercedes Benz commercials?\" \"Have you seen Mercedes-Benz commercials?\"\ntest \"I booked a Mercedes Benz for the demo.\" \"I booked a Mercedes-Benz for the demo.\"\ntest \"mercedes benz is fast.\" \"Mercedes-Benz is fast.\"\ntest \"MERCEDES BENZ leads the standings.\" \"Mercedes-Benz leads the standings.\"\ntest \"My neighbor bought a Mercedes Benz.\" \"My neighbor bought a Mercedes-Benz.\"\ntest \"The Mercedes Benz, as a brand, makes waves.\" \"The Mercedes-Benz, as a brand, makes waves.\"\ntest \"Mercedes Benz should never be split.\" \"Mercedes-Benz should never be split.\"\ntest \"Mercedes Benz and BMW kept things exciting.\" \"Mercedes-Benz and BMW kept things exciting.\"\ntest \"The factory's Mercedes Benz fleet grows.\" \"The factory's Mercedes-Benz fleet grows.\"\ntest \"Mercedes Benz will celebrate 100 years next year.\" \"Mercedes-Benz will celebrate 100 years next year.\"\ntest \"Testing shows Mercedes Benz is still relevant.\" \"Testing shows Mercedes-Benz is still relevant.\"\n\n# False positives / true negatives\nallows \"Mercedes-Benz is in the race.\"\nallows \"I drove a Benz and a Mercedes the same day.\"\n\n# False negatives (current limitation: possessive suffix)\nallows \"Mercedes Benz's heritage is storied.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/MissingDeterminer.weir",
    "content": "expr techNoun [bug, case, change, comment, feature, fix, log, note, problem, reason, report, repro, reproduction, request, response, scenario, screenshot, solution, step, summary, test, ticket, answer, example, explanation, idea, issue, update]\nexpr requestNounHead @techNoun\nexpr requestBareNounPhrase [@requestNounHead, (ADJ @requestNounHead), (ADJ ADJ @requestNounHead), (ADV ADJ @requestNounHead), (ADV ADJ ADJ @requestNounHead), (@requestNounHead @requestNounHead), (ADJ @requestNounHead @requestNounHead), (ADV ADJ @requestNounHead @requestNounHead)]\nexpr narrativeNoun [portrait, nest, glass, hand, coin, toy, victor]\nexpr narrativeBareNounPhrase [@narrativeNoun, (ADJ @narrativeNoun)]\n\nexpr requestMissingDet <([get, provide, give, send, share, attach, include, add, need, want, see, submit, create, report, file, reproduce] @requestBareNounPhrase), ( )>\nexpr narrativeVerbObjectMissingDet <([painted, built, dropped, raised, found, hid, cheered] @narrativeBareNounPhrase), ( )>\nexpr narrativePrepObjectMissingDet <([in, on] [studio, tree, floor]), ( )>\n\nexpr main [@requestMissingDet, @narrativeVerbObjectMissingDet, @narrativePrepObjectMissingDet]\n\nlet message \"Add a determiner before this noun phrase.\"\nlet description \"Detects likely missing determiners in common request phrases and offers to insert one where necessary.\"\nlet kind \"Grammar\"\nlet becomes [\" the \", \" a \", \" an \"]\n\ntest \"would it be possible to get reproducible example of this?\" \"would it be possible to get a reproducible example of this?\"\ntest \"Would it be possible to get reproducible bug report?\" \"Would it be possible to get a reproducible bug report?\"\ntest \"Please provide detailed reproduction of this issue.\" \"Please provide a detailed reproduction of this issue.\"\ntest \"Can you send minimal test case?\" \"Can you send a minimal test case?\"\ntest \"We need quick response.\" \"We need a quick response.\"\ntest \"I can attach short log.\" \"I can attach a short log.\"\ntest \"Please share minimal repro.\" \"Please share a minimal repro.\"\ntest \"Could you submit small change?\" \"Could you submit a small change?\"\ntest \"Please provide reproducible example, thanks.\" \"Please provide a reproducible example, thanks.\"\ntest \"We should create clear summary.\" \"We should create a clear summary.\"\ntest \"Please provide the report.\" \"Please provide the report.\"\ntest \"Please provide your report.\" \"Please provide your report.\"\ntest \"Please provide another report.\" \"Please provide another report.\"\ntest \"Please provide more detailed report.\" \"Please provide a more detailed report.\"\ntest \"We can file short ticket.\" \"We can file a short ticket.\"\ntest \"Could you reproduce minimal scenario?\" \"Could you reproduce a minimal scenario?\"\ntest \"Please send clear explanation.\" \"Please send a clear explanation.\"\ntest \"We need simple fix.\" \"We need a simple fix.\"\ntest \"I want quick update.\" \"I want a quick update.\"\ntest \"Could you share detailed response?\" \"Could you share a detailed response?\"\ntest \"Please attach short screenshot.\" \"Please attach a short screenshot.\"\ntest \"We should include short note.\" \"We should include a short note.\"\ntest \"Please give minimal reproduction.\" \"Please give a minimal reproduction.\"\ntest \"Can you add brief comment?\" \"Can you add a brief comment?\"\ntest \"We want new feature.\" \"We want a new feature.\"\ntest \"They need clear solution.\" \"They need a clear solution.\"\n\nallows \"Please provide an example of this.\"\nallows \"Please provide the example.\"\nallows \"Please provide your example.\"\nallows \"Please provide another example.\"\ntest \"We want detailed explanation.\" \"We want a detailed explanation.\"\ntest \"We need quick answer.\" \"We need a quick answer.\"\ntest \"Please send clear update.\" \"Please send a clear update.\"\ntest \"Please provide brief summary.\" \"Please provide a brief summary.\"\n\ntest \"The artist painted portrait in studio.\" \"The artist painted a portrait in the studio.\"\ntest \"The bird built nest in tree.\" \"The bird built a nest in the tree.\"\ntest \"The child dropped glass on floor.\" \"The child dropped the glass on the floor.\"\ntest \"The student raised hand quietly.\" \"The student raised a hand quietly.\"\ntest \"The child found coin outside.\" \"The child found a coin outside.\"\ntest \"The child hid toy nearby.\" \"The child hid a toy nearby.\"\ntest \"The crowd cheered victor loudly.\" \"The crowd cheered the victor loudly.\"\n\nallows \"Let's do this for good measure.\"\nallows \"This is a test to make sure we don't split up paragraphs on newlines.\"\nallows \"This URL is used by the console to properly generate URLs when using the Artisan command line tool.\"\nallows \"The timezone is set to \\\"UTC\\\" by default as it is suitable for most use cases.\"\nallows \"This option can be set to any locale for which you plan to have translation strings.\"\nallows \"Use it to show ownership.\"\nallows \"This rule attempts to find common errors with redundancy and contractions that may lead to confusion for readers.\"\nallows \"ACF is a powerful tool that allows you to add custom fields to your content, providing greater flexibility in how you manage and display information.\"\nallows \"Historical records, colonial archives (however problematic their provenance), and oral histories from surviving communities, even if fragmented and distorted, provide crucial data points.\"\nallows \"Traditional cartography relies on observable features – mountains, rivers, coastlines – to create representations of space.\"\nallows \"My grandfather built timepieces to mark the passage of moments.\"\nallows \"I made a note to encourage Eleanor to share more stories with him; reminiscing often proved beneficial for patients struggling with respiratory distress.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Monumentous.weir",
    "content": "expr main (monumentous)\n\nlet message \"Retain `monumentous` for jocular effect. Otherwise `momentous` indicates great signifcance while `monumental` indicates imposing size.\"\nlet description \"Advises using `momentous` or `monumental` instead of `monumentous` for serious usage.\"\nlet kind \"Nonstandard\"\nlet becomes [\"momentous\", \"monumental\"]\n\ntest \"monumentous\" \"momentous\"\ntest \"I think that would be a monumentous step in the right direction, and would DEFINATLY turn heads in not just the music industry, but every ...\" \"I think that would be a momentous step in the right direction, and would DEFINATLY turn heads in not just the music industry, but every ...\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/MoreThatLikely.weir",
    "content": "expr main <(more that likely), that>\n\nlet message \"Did you mean `more than likely`?\"\nlet description \"Corrects the common typo `more that likely` to `more than likely`.\"\nlet kind \"Typo\"\nlet becomes \"than\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"It is more that likely a typo.\" \"It is more than likely a typo.\"\ntest \"More that likely this is due to a config issue.\" \"More than likely this is due to a config issue.\"\ntest \"There is more that likely some obvious solution.\" \"There is more than likely some obvious solution.\"\ntest \"It's more that likely that I messed something up.\" \"It's more than likely that I messed something up.\"\ntest \"MORE THAT LIKELY this broke in the last release.\" \"MORE THAN LIKELY this broke in the last release.\"\ntest \"So it is more that likely a bug.\" \"So it is more than likely a bug.\"\n\n# False positives / true negatives\n\nallows \"It is more than likely a typo.\"\nallows \"More than likely this is a config issue.\"\nallows \"There is more that I need to tell you.\"\nallows \"I know more that could help.\"\nallows \"He said more that day than usual.\"\nallows \"She offered more that the others couldn't.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/MyHouse.weir",
    "content": "expr main (mu house)\n\nlet message \"Did you mean `my house`?\"\nlet description \"Fixes the typo `mu house` to `my house`.\"\nlet kind \"Typo\"\nlet becomes \"my house\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/NeedHelp.weir",
    "content": "expr main (ned help)\n\nlet message \"Did you mean `need help`?\"\nlet description \"Changes `ned help` to the correct `need help`.\"\nlet kind \"Typo\"\nlet becomes \"need help\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/NerveRacking.weir",
    "content": "expr main [(nerve racking), (nerve wracking), (nerve wrecking), (nerve-wracking), (nerve-wrecking)]\n\nlet message \"Use `nerve-racking` for something that causes anxiety or tension.\"\nlet description \"Corrects common misspellings and missing hyphen in `nerve-racking`.\"\nlet kind \"Eggcorn\"\nlet becomes \"nerve-racking\"\n\ntest \"We've gone through several major changes / upgrades to atlantis, and it's always a little bit nerve-wracking because if we mess something up we ...\" \"We've gone through several major changes / upgrades to atlantis, and it's always a little bit nerve-racking because if we mess something up we ...\"\ntest \"The issue happens to me on a daily basis, and it is nerve-wrecking because I become unsure if I have actually saved the diagram, but every time ...\" \"The issue happens to me on a daily basis, and it is nerve-racking because I become unsure if I have actually saved the diagram, but every time ...\"\ntest \"Very nerve wracking landing in an unfamiliar mountainous airport in dead of night with no radar to show surrounding terrain.\" \"Very nerve-racking landing in an unfamiliar mountainous airport in dead of night with no radar to show surrounding terrain.\"\ntest \"I appreciate any kind of help since this is kind of nerve wrecking.\" \"I appreciate any kind of help since this is kind of nerve-racking.\"\ntest \"It's nerve racking to think about it because I have code inside the callback that resolves the member and somehow I feel like it's so ..\" \"It's nerve-racking to think about it because I have code inside the callback that resolves the member and somehow I feel like it's so ..\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/NobelPeacePrize.weir",
    "content": "expr main [(noble [peace, piece] [price, prize, prise]), (nobel piece [price, prize, prise]), (nobel peace price), (nobel peace prise)]\n\nlet message \"Spell the name of the international peace award as Nobel Peace Prize.\"\nlet description \"Corrects the frequent typos that swap the Nobel/Peace/Prize spelling when people mention the prize.\"\nlet kind \"Typo\"\nlet becomes \"Nobel Peace Prize\"\nlet strategy \"Exact\"\n# True positives\ntest \"He accepted the Noble Peace Price at the ceremony.\" \"He accepted the Nobel Peace Prize at the ceremony.\"\ntest \"Our timeline mentions the Noble peace price until 1950.\" \"Our timeline mentions the Nobel Peace Prize until 1950.\"\ntest \"noble peace price facts are easy to recap.\" \"Nobel Peace Prize facts are easy to recap.\"\ntest \"Nobel piece price committees meet tonight.\" \"Nobel Peace Prize committees meet tonight.\"\ntest \"nobel piece prize winners shared stories.\" \"Nobel Peace Prize winners shared stories.\"\ntest \"Nobel piece prise ceremonies look ready.\" \"Nobel Peace Prize ceremonies look ready.\"\ntest \"NOBLE PIECE PRICE stands out in the article.\" \"Nobel Peace Prize stands out in the article.\"\ntest \"She referenced the noble piece price memo.\" \"She referenced the Nobel Peace Prize memo.\"\ntest \"Noble Peace Prise references appear frequently.\" \"Nobel Peace Prize references appear frequently.\"\ntest \"nobel peace prise news alerted the team.\" \"Nobel Peace Prize news alerted the team.\"\ntest \"nobel piece price reports track the conference.\" \"Nobel Peace Prize reports track the conference.\"\ntest \"The noble piece prise historian wrote a book.\" \"The Nobel Peace Prize historian wrote a book.\"\n\n# True negatives / false positives\ntest \"The Nobel Peace Prize ceremony is broadcast worldwide.\" \"The Nobel Peace Prize ceremony is broadcast worldwide.\"\ntest \"Nobel Prize for Peace winners remain inspiring.\" \"Nobel Prize for Peace winners remain inspiring.\"\ntest \"Peace Prize winners celebrate after the award.\" \"Peace Prize winners celebrate after the award.\"\n\n# Known false negatives\ntest \"The Nobel Peace Prices for the exhibition confuse some visitors.\" \"The Nobel Peace Prices for the exhibition confuse some visitors.\"\ntest \"Stories mention the Noble Peace Prizes across years.\" \"Stories mention the Noble Peace Prizes across years.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/NotBeAfterNot.weir",
    "content": "expr beforms [am, is, are, was, were, be, been, being, I'm, you're, we're, they're, he's, she's, it's]\nexpr complements [ADJ, ADP, ADV, DET, NOUN, NUM, PRON, PROPN, VERB, VBN, VBG]\n\nexpr main <(@beforms not be @complements), (not be)>\n\nlet message \"When a negative clause already uses `be`, drop the extra `be` that follows `not`.\"\nlet description \"Removes the redundant linking verb that sneaks in between `not` and the predicate after a conjugated `be`.\"\nlet kind \"Grammar\"\nlet becomes \"not\"\n\n# True positives\ntest \"I am not be happy today.\" \"I am not happy today.\"\ntest \"They are not be ready for the call.\" \"They are not ready for the call.\"\ntest \"We were not be asked anything.\" \"We were not asked anything.\"\ntest \"She is not be aware of the change.\" \"She is not aware of the change.\"\ntest \"I am not be a doctor yet.\" \"I am not a doctor yet.\"\ntest \"I'm not be prepared for that kind of question.\" \"I'm not prepared for that kind of question.\"\ntest \"He was not be allowed to speak last night.\" \"He was not allowed to speak last night.\"\ntest \"If you are not be careful, the paint will drip.\" \"If you are not careful, the paint will drip.\"\ntest \"The group was not be thinking about that possibility.\" \"The group was not thinking about that possibility.\"\ntest \"I am not be in the mood today.\" \"I am not in the mood today.\"\ntest \"They were not be sure yet.\" \"They were not sure yet.\"\ntest \"He is not be already there.\" \"He is not already there.\"\ntest \"You are not be of much help today.\" \"You are not of much help today.\"\ntest \"The team were not be attending the show.\" \"The team were not attending the show.\"\ntest \"I am not be comfortable sharing that yet.\" \"I am not comfortable sharing that yet.\"\n\n# True negatives / false-positive guards\nallows \"They will not be ready for the call.\"\nallows \"I am not being difficult with you.\"\nallows \"We are not the group who can finish this.\"\nallows \"She was not a fan of the show.\"\nallows \"I'm not sure if that will work.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/NotIn.weir",
    "content": "expr main (no in)\n\nlet message \"Use `not in` for correct grammar.\"\nlet description \"Replaces `no in` with `not in`.\"\nlet kind \"Typo\"\nlet becomes \"not in\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/NotTo.weir",
    "content": "expr main (no to)\n\nlet message \"Did you mean `not to`?\"\nlet description \"Corrects `no to` to `not to`, ensuring proper negation.\"\nlet kind \"Typo\"\nlet becomes \"not to\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/NowWay.weir",
    "content": "expr main <([(now way [to, of, for, finished, workflows]), (of now way), (in now way)]), now>\n\nlet message \"Did you mean `no way`?\"\nlet description \"Corrects `now way` to `no way` in high-confidence contexts while avoiding comparative contexts like `now way too`.\"\nlet kind \"Typo\"\nlet becomes \"no\"\nlet strategy \"MatchCase\"\n\n# True positives\ntest \"However, there is now way to open this console.\" \"However, there is no way to open this console.\"\ntest \"it's in now way finished or usable (which, quite honestly, is a shame....).\" \"it's in no way finished or usable (which, quite honestly, is a shame....).\"\ntest \"There is now way of retrieving info about a directive at startup.\" \"There is no way of retrieving info about a directive at startup.\"\ntest \"I know of now way, especially programmatically, to get the latest version of Cursor available.\" \"I know of no way, especially programmatically, to get the latest version of Cursor available.\"\ntest \"there is now way to enable 24bit colors in windows powershell / pwsh\" \"there is no way to enable 24bit colors in windows powershell / pwsh\"\ntest \"Basically, in now way, shape, or form should use lib be part of the solution here.\" \"Basically, in no way, shape, or form should use lib be part of the solution here.\"\ntest \"As of now there is now way to document the concurrent statements in doxygen.\" \"As of now there is no way to document the concurrent statements in doxygen.\"\ntest \"But there seems now way for the extension to do that.\" \"But there seems no way for the extension to do that.\"\ntest \"No we tried to make it work using the current props, but there was just now way to do it using options and value\" \"No we tried to make it work using the current props, but there was just no way to do it using options and value\"\ntest \"There is currently now way workflows can store custom variables/values in a deterministic and persistent way.\" \"There is currently no way workflows can store custom variables/values in a deterministic and persistent way.\"\ntest \"You found now way to use atuin for its syncing features, but use fzf for fuzzy searching the atuin history then?\" \"You found no way to use atuin for its syncing features, but use fzf for fuzzy searching the atuin history then?\"\n\n# Guardrails / false positives\nallows \"Sorry, but it's now way beyond my OpenGL knowledge.\"\nallows \"Popups are now way too intrusive, they block the rest of the screen and make it unresponsive\"\nallows \"not a good practice since SB 4 has now way more starters for testing\"\nallows \"in the middle of rewriting a big update for a game im now way past schedule for\"\nallows \"the thumbnail and previews created are now way too light and unusable\"\nallows \"There are now way less vague and more specific cases of export behaviour I don't understand or I think are just wrong.\"\nallows \"ready to be read after the (now way shorter) expiration\"\nallows \"but I think the references are now way more consistent in Conan\"\n\n# Ambiguous intent\nallows \"It was quite helpful with longer prompts that tend to be now way less precise due to the lack of todo tool and loss of context mid response.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/OffTheCuff.weir",
    "content": "expr main (off the cuff)\n\nlet message \"Use the hyphenated form for `off-the-cuff`.\"\nlet description \"Ensures `off-the-cuff` is correctly hyphenated.\"\nlet kind \"Punctuation\"\nlet becomes \"off-the-cuff\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/OldWivesTale.weir",
    "content": "expr main (old wise tale)\n\nlet message \"Use the correct phrase for a superstition or myth.\"\nlet description \"Corrects `old wise tale` to `old wives' tale`, preserving the phrase’s meaning as an unfounded traditional belief.\"\nlet kind \"Eggcorn\"\nlet becomes \"old wives' tale\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/OnFirstGlance.weir",
    "content": "expr main <([(on first glance), (on a first glance), (on the first glance)]), ([on])>\n\nlet message \"Use `at first glance` instead of `on first glance` when describing an immediate impression.\"\nlet description \"The standard idiom starts with `at` for quick appraisals, so swap the preposition to keep the phrase idiomatic.\"\nlet kind \"Usage\"\nlet becomes \"at\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"On first glance it seems like a good plan.\" \"At first glance it seems like a good plan.\"\ntest \"On first glance, the homepage felt fast.\" \"At first glance, the homepage felt fast.\"\ntest \"On a first glance the credential list looked complete.\" \"At a first glance the credential list looked complete.\"\ntest \"On the first glance I took at the draft, the tone felt steady.\" \"At the first glance I took at the draft, the tone felt steady.\"\ntest \"ON FIRST GLANCE the tab looked empty.\" \"AT FIRST GLANCE the tab looked empty.\"\ntest \"On first glance we thought the fix had landed.\" \"At first glance we thought the fix had landed.\"\n\n# False negatives (should also trigger)\n\ntest \"On first glance? the fix seemed ready.\" \"At first glance? the fix seemed ready.\"\ntest \"On a first glance when scanning the changelog, there were no errors.\" \"At a first glance when scanning the changelog, there were no errors.\"\ntest \"On the first glance at the dashboard nothing seemed off.\" \"At the first glance at the dashboard nothing seemed off.\"\ntest \"On first glance--before the audit--the facade looked clean.\" \"At first glance--before the audit--the facade looked clean.\"\n\n# Guardrails / false positives / true negatives\n\ntest \"At first glance the patch was a keeper.\" \"At first glance the patch was a keeper.\"\ntest \"My first glance at the console logs offered little insight.\" \"My first glance at the console logs offered little insight.\"\ntest \"First glance data points still need verification.\" \"First glance data points still need verification.\"\ntest \"The timeline on the first slide looked accurate.\" \"The timeline on the first slide looked accurate.\"\ntest \"He always writes `on first` as part of a headline.\" \"He always writes `on first` as part of a headline.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/OnSecondThought.weir",
    "content": "expr main <([on, my] second though), (second though)>\n\nlet message \"Idiomatic expression: use `on second thought` instead of `on second though`\"\nlet description \"Replaces the nonstandard `on second though` with the common idiom `on second thought` to indicate reconsideration.\"\nlet kind \"Typo\"\nlet becomes \"second thought\"\n\ntest \"I was going to buy it, but on second though, maybe I'll wait.\" \"I was going to buy it, but on second thought, maybe I'll wait.\"\nallows \"She considered driving home, but on second thought, she decided to walk.\"\ntest \"My second though is that I'd prefer something else entirely.\" \"My second thought is that I'd prefer something else entirely.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/OnTheSpurOfTheMoment.weir",
    "content": "expr main [(on the spurt of the moment), (at the spur of the moment), (in the spur of the moment), (in the spurt of the moment)]\n\nlet message \"Use the correct phrase for acting spontaneously.\"\nlet description \"Ensures the correct use of `on the spur of the moment`, avoiding nonstandard variations.\"\nlet kind \"Eggcorn\"\nlet becomes \"on the spur of the moment\"\n\ntest \"Quite often in the spurt of the moment, someone will say something which they think is witty.\" \"Quite often on the spur of the moment, someone will say something which they think is witty.\"\ntest \"but at the spur of the moment, I'd say that ansible-lint should work exactly like ansible\" \"but on the spur of the moment, I'd say that ansible-lint should work exactly like ansible\"\ntest \"an assortment of things I started yesterday in the spur of the moment\" \"an assortment of things I started yesterday on the spur of the moment\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/OnTopOf.weir",
    "content": "expr main [(ontop of), (in top of)]\n\nlet message \"Did you mean `on top of`?\"\nlet description \"Corrects `ontop of` and `in top of` to `on top of`.\"\nlet kind \"Usage\"\nlet becomes \"on top of\"\n\ntest \"Initcpio hooks for overlayfs ontop of root.\" \"Initcpio hooks for overlayfs on top of root.\"\ntest \"This project is a proof of concept to enable all the awesome features of BrowserSync in top of a Play Framework server.\" \"This project is a proof of concept to enable all the awesome features of BrowserSync on top of a Play Framework server.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/OnceInAWhile.weir",
    "content": "expr main [(once a while), (once and a while)]\n\nlet message \"The correct idiom is `once in a while`.\"\nlet description \"Corrects two common malapropisms of `once in a while`.\"\nlet kind \"Usage\"\nlet becomes \"once in a while\"\n\ntest \"For me it is a SMB mount I have on the client device that I sync only once a while for a backup into the cloud.\" \"For me it is a SMB mount I have on the client device that I sync only once in a while for a backup into the cloud.\"\ntest \"Every once and a while all the links on my page seem to stop working.\" \"Every once in a while all the links on my page seem to stop working.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/OneFellSwoop.weir",
    "content": "expr main [(one foul swoop), (one fowl swoop)]\n\nlet message \"Use the correct phrase for something happening suddenly.\"\nlet description \"Corrects `one foul swoop` to `one fell swoop`, preserving the phrase’s original meaning of sudden and complete action.\"\nlet kind \"Eggcorn\"\nlet becomes \"one fell swoop\"\n\ntest \"I just want to turn OFF all of the Controllers with one foul swoop.\" \"I just want to turn OFF all of the Controllers with one fell swoop.\"\ntest \"I am trying to delete the image and it's associated thumbnail in one fowl swoop.\" \"I am trying to delete the image and it's associated thumbnail in one fell swoop.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/OneHanded.weir",
    "content": "expr main <([one, two] handed ![DET, PRON, ADP, PUNCT]), ([one, two] handed)>\n\nlet message \"Keep the numeral and 'handed' joined as a hyphenated modifier when they describe a noun.\"\nlet description \"Treat 'one handed' and 'two handed' as single adjectives before nouns so the measurement stays attached to 'handed'.\"\nlet kind \"Punctuation\"\nlet becomes [\"one-handed\", \"two-handed\"]\nlet strategy \"MatchCase\"\n\n# True positives\n# The hyphenated form is preferred whenever the compound modifies a noun.\ntest \"A one handed catch can seal the win.\" \"A one-handed catch can seal the win.\"\ntest \"We built two handed handles for the door.\" \"We built two-handed handles for the door.\"\ntest \"The mechanic admired that one handed tool.\" \"The mechanic admired that one-handed tool.\"\ntest \"Two handed swords need extra clearance.\" \"Two-handed swords need extra clearance.\"\ntest \"one handed work is still performed by skilled climbers.\" \"one-handed work is still performed by skilled climbers.\"\ntest \"Our Two Handed lift completed the load.\" \"Our Two-Handed lift completed the load.\"\ntest \"Two handed heavy lifts stress the crew.\" \"Two-handed heavy lifts stress the crew.\"\ntest \"Her one handed strike knocked them down.\" \"Her one-handed strike knocked them down.\"\ntest \"The two handed mammal puppet looked real.\" \"The two-handed mammal puppet looked real.\"\ntest \"ONE HANDED MOVES LOOK ELEGANT ON STAGE.\" \"ONE-HANDED MOVES LOOK ELEGANT ON STAGE.\"\ntest \"The two handed steel brace kept flex to a minimum.\" \"The two-handed steel brace kept flex to a minimum.\"\ntest \"Our two handed design earned praise from the panel.\" \"Our two-handed design earned praise from the panel.\"\ntest \"a one handed grip is required for that maneuver.\" \"a one-handed grip is required for that maneuver.\"\n\n# True negatives / false positives\n# These scenarios treat 'handed' as a verb or object, so they should stay untouched.\ntest \"No one handed them anything.\" \"No one handed them anything.\"\ntest \"One handed me a basket and left.\" \"One handed me a basket and left.\"\ntest \"All but one handed in their notices.\" \"All but one handed in their notices.\"\ntest \"One handed the baton to his mate.\" \"One handed the baton to his mate.\"\ntest \"Two handed the paperwork to the new hire.\" \"Two handed the paperwork to the new hire.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/OutOfSync.weir",
    "content": "expr main (out of sink)\n\nlet message \"Did you mean `out of sync` or `out of synch`?\"\nlet description \"Corrects `out of sink` to `out of sync` or `out of synch`.\"\nlet kind \"Spelling\"\nlet becomes [\"out of sync\", \"out of synch\"]\n\ntest \"This results in the NavigationStack getting out of sink\" \"This results in the NavigationStack getting out of sync\"\ntest \"Currently, data/costs.scv file is out of sink with the model and must be updated to match the requirements of the sector-coupled version.\" \"Currently, data/costs.scv file is out of synch with the model and must be updated to match the requirements of the sector-coupled version.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/PartsOfSpeech.weir",
    "content": "expr main [(part of speeches), (parts of speeches)]\n\nlet message \"The correct plural is `parts of speech`.\"\nlet description \"Corrects pluralizing the wrong noun in `part of speech`.\"\nlet kind \"Grammar\"\nlet becomes \"parts of speech\"\n\ntest \"Learning the part of speeches is important.\" \"Learning the parts of speech is important.\"\ntest \"We studied parts of speeches yesterday.\" \"We studied parts of speech yesterday.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/PasswordProtectedHyphen.weir",
    "content": "expr main <(password protected [(area), (areas), (document), (documents), (doc), (docs), (spreadsheet), (spreadsheets), (archive), (archives), (zip), (zips), (pdf), (pdfs), (folder), (folders), (system), (systems), (page), (pages), (website), (websites), (site), (sites), (file), (files), (account), (accounts), (drive), (drives), (stick), (sticks), (usb), (usbs), (excel), (apps), (app), (cd), (cds), (dropbox), (dropboxes), (email), (emails), (gallery), (galleries), (iphone), (iphones)]), (password protected)>\n\nlet message \"Hyphenate `password-protected` when the phrase modifies a following resource.\"\nlet description \"Keeps the compound adjective together before nouns like folders, files, or web pages so the dependency between them is clear.\"\nlet kind \"Style\"\nlet becomes \"password-protected\"\n\ntest \"A password protected area restricts access.\" \"A password-protected area restricts access.\"\ntest \"We store logs in a password protected folder.\" \"We store logs in a password-protected folder.\"\ntest \"Please send the password protected document tomorrow.\" \"Please send the password-protected document tomorrow.\"\ntest \"The password protected spreadsheet contains numbers.\" \"The password-protected spreadsheet contains numbers.\"\ntest \"They locked the password protected archive.\" \"They locked the password-protected archive.\"\ntest \"Bring the password protected pdf to the meeting.\" \"Bring the password-protected pdf to the meeting.\"\ntest \"That password protected page requires a login.\" \"That password-protected page requires a login.\"\ntest \"This password protected website is for beta users.\" \"This password-protected website is for beta users.\"\ntest \"Our password protected file sits on the drive.\" \"Our password-protected file sits on the drive.\"\ntest \"The password protected account holds secrets.\" \"The password-protected account holds secrets.\"\ntest \"Their password protected app went live.\" \"Their password-protected app went live.\"\ntest \"We updated the password protected system this morning.\" \"We updated the password-protected system this morning.\"\ntest \"These password protected folders double as backups.\" \"These password-protected folders double as backups.\"\ntest \"Password protected emails pile up.\" \"Password-protected emails pile up.\"\ntest \"The password protected gallery remains hidden.\" \"The password-protected gallery remains hidden.\"\ntest \"A password protected iphone case is ready.\" \"A password-protected iphone case is ready.\"\ntest \"A password protected drive keeps everything safe.\" \"A password-protected drive keeps everything safe.\"\nallows \"The area is password protected.\"\nallows \"She mentioned password protected with no follow-up.\"\nallows \"The password protected from clause does not match.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/PeaceOfMind.weir",
    "content": "expr main (piece of mind)\n\nlet message \"The phrase is `peace of mind`, meaning `calm`. A `piece` is a `part` of something.\"\nlet description \"Corrects `piece of mind` to `peace of mind`.\"\nlet kind \"Eggcorn\"\nlet becomes \"peace of mind\"\n\ntest \"A Discord bot that gives you piece of mind knowing you are free from obnoxious intrusions in a Discord Voice Channel\" \"A Discord bot that gives you peace of mind knowing you are free from obnoxious intrusions in a Discord Voice Channel\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/PedalToTheMetal.weir",
    "content": "expr main pedal to the medal\n\nlet message \"Use the idiom `pedal to the metal`.\"\nlet description \"Corrects the eggcorn `pedal to the medal` to the standard idiom `pedal to the metal`, meaning to accelerate at full speed.\"\nlet kind \"Typo\"\nlet becomes \"pedal to the metal\"\n\ntest \"pedal to the medal\" \"pedal to the metal\"\ntest \"Pedal to the medal when you see the green flag.\" \"Pedal to the metal when you see the green flag.\"\ntest \"The coach shouted pedal to the medal before the jump.\" \"The coach shouted pedal to the metal before the jump.\"\ntest \"We pedal to the medal whenever the lights go yellow.\" \"We pedal to the metal whenever the lights go yellow.\"\ntest \"Pedal to the medal is how you fly out of the gate.\" \"Pedal to the metal is how you fly out of the gate.\"\ntest \"He loves to say pedal to the medal while revving engines.\" \"He loves to say pedal to the metal while revving engines.\"\ntest \"Pedal to the medal in these conditions and the tyres scream.\" \"Pedal to the metal in these conditions and the tyres scream.\"\ntest \"Pedal to the medal, please, once we cross the start line.\" \"Pedal to the metal, please, once we cross the start line.\"\ntest \"Keep saying pedal to the medal until the rival hears it.\" \"Keep saying pedal to the metal until the rival hears it.\"\ntest \"PEDAL TO THE MEDAL seems to be the rally cry.\" \"PEDAL TO THE METAL seems to be the rally cry.\"\n\nallows \"Pedal to the metal is the correct idiom.\"\nallows \"She earned a medal for her performance.\"\nallows \"The medal ceremony happened before the race.\"\nallows \"Pedal to the mettle, not the medal, outlines courage.\"\nallows \"The medal in our archive dates to 1895.\"\nallows \"They pedaled to the medal.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/PerSe.weir",
    "content": "expr main [(per say), (per-se), (per-say)]\n\nlet message \"The correct spelling is `per se` (with no hyphen)\"\nlet description \"Corrects common misspellings of `per se`.\"\nlet kind \"Spelling\"\nlet becomes \"per se\"\n\ntest \"It's not a problem per-se, but it would make the desktop more consistent when using QT and KDE apps.\" \"It's not a problem per se, but it would make the desktop more consistent when using QT and KDE apps.\"\ntest \"Hi all - not really an issue per say, but more of a request for some suggestions and guidance.\" \"Hi all - not really an issue per se, but more of a request for some suggestions and guidance.\"\ntest \"Whilst I don't think this is wrong per-say, I'm not confident it is necessary.\" \"Whilst I don't think this is wrong per se, I'm not confident it is necessary.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/PointsOfView.weir",
    "content": "expr main (point of views)\n\nlet message \"The correct plural is `points of view`.\"\nlet description \"Corrects pluralizing the wrong noun in `point of view`.\"\nlet kind \"Grammar\"\nlet becomes \"points of view\"\n\ntest \"This will produce a huge amount of raw data, representing the region in multiple point of views.\" \"This will produce a huge amount of raw data, representing the region in multiple points of view.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/PortAuPrince.weir",
    "content": "expr main (Port au Prince)\n\nlet message \"The official spelling is hyphenated.\"\nlet description \"Checks for the correct official name of the capital of Haiti.\"\nlet kind \"Punctuation\"\nlet becomes \"Port-au-Prince\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/PortoNovo.weir",
    "content": "expr main (Porto Novo)\n\nlet message \"The official spelling is hyphenated.\"\nlet description \"Checks for the correct official name of the capital of Benin.\"\nlet kind \"Punctuation\"\nlet becomes \"Porto-Novo\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/PrayingMantis.weir",
    "content": "expr main (preying mantis)\n\nlet message \"Use the insect's correct name.\"\nlet description \"Corrects `preying mantis` to `praying mantis`, ensuring accurate reference to the insect’s characteristic pose.\"\nlet kind \"Eggcorn\"\nlet becomes \"praying mantis\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/QuiteMany.weir",
    "content": "expr main (quite many)\n\nlet message \"Use `quite a few` instead of `quite many`.\"\nlet description \"Corrects `quite many` to `quite a few`, which is the more natural and idiomatic phrase in standard English. `Quite many` is considered nonstandard usage.\"\nlet kind \"Nonstandard\"\nlet becomes \"quite a few\"\n\ntest \"To me it seems it might be caused by a2aaa55 which contains quite many build-related changes.\" \"To me it seems it might be caused by a2aaa55 which contains quite a few build-related changes.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/RainbowColoredHyphen.weir",
    "content": "expr main <(([rainbow, cream] [colored, coloured]) NOUN), ( )>\n\nlet message \"Keep these compound color modifiers hyphenated before their nouns.\"\nlet description \"When rainbow-colored or cream-colored describe a noun, replace the space between the color words with a hyphen to keep the modifier cohesive.\"\nlet kind \"Style\"\nlet becomes \"-\"\n\ntest \"The rainbow colored leaves shimmered in the morning light.\" \"The rainbow-colored leaves shimmered in the morning light.\"\ntest \"A cream colored sofa anchored the living room.\" \"A cream-colored sofa anchored the living room.\"\ntest \"Bright rainbow colored banners lined the promenade.\" \"Bright rainbow-colored banners lined the promenade.\"\ntest \"Bring the cream colored napkins to the table.\" \"Bring the cream-colored napkins to the table.\"\ntest \"RAINBOW COLORED FLAGS fluttered over the pier.\" \"RAINBOW-COLORED FLAGS fluttered over the pier.\"\ntest \"Our designer introduced cream coloured sneakers for fall.\" \"Our designer introduced cream-coloured sneakers for fall.\"\ntest \"These rainbow colored posters mark the festival days.\" \"These rainbow-colored posters mark the festival days.\"\ntest \"Cream coloured curtains softened the gallery lights.\" \"Cream-coloured curtains softened the gallery lights.\"\ntest \"The designer chose rainbow colored tiles for the backsplash.\" \"The designer chose rainbow-colored tiles for the backsplash.\"\ntest \"Our lineup now shows cream colored lipsticks and rainbow colored gloss.\" \"Our lineup now shows cream-colored lipsticks and rainbow-colored gloss.\"\n\nallows \"The rainbow colored the sky with a soft gradient.\"\nallows \"She rainbow colored every triangle on the quilt.\"\nallows \"The artist cream colored the mural in minutes.\"\nallows \"The leaves were rainbow colored after the festival lights.\"\nallows \"Cream colored the vase intentionally for the commission.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/RallyToReally.weir",
    "content": "expr main <([(am rally PROG), (am not rally PROG), (am PRON rally PROG), (am PRON not rally PROG), (is rally PROG), (is not rally PROG), (is PRON rally PROG), (is PRON not rally PROG), (isn't rally PROG), (isn't PRON rally PROG), (are rally PROG), (are not rally PROG), (are PRON rally PROG), (are PRON not rally PROG), (aren't rally PROG), (aren't PRON rally PROG), (was rally PROG), (was not rally PROG), (was PRON rally PROG), (was PRON not rally PROG), (wasn't rally PROG), (wasn't PRON rally PROG), (were rally PROG), (were not rally PROG), (were PRON rally PROG), (were PRON not rally PROG), (weren't rally PROG), (weren't PRON rally PROG), (be rally PROG), (be not rally PROG), (be PRON rally PROG), (be PRON not rally PROG), (being rally PROG), (being not rally PROG), (been rally PROG), (been not rally PROG), (ain't rally PROG), (ain't PRON rally PROG)]), (rally)>\n\nlet message \"Replace `rally` with `really` whenever a form of `be` introduces a progressive verb.\"\nlet description \"Catches the typo where `rally` sneaks into `be + ...ing` constructions, including common contractions.\"\nlet kind \"Typo\"\nlet becomes \"really\"\nlet strategy \"MatchCase\"\n\ntest \"It is rally going to happen.\" \"It is really going to happen.\"\ntest \"We are rally getting closer to shipping.\" \"We are really getting closer to shipping.\"\ntest \"I am rally trying to finish this before midnight.\" \"I am really trying to finish this before midnight.\"\ntest \"She is not rally learning the concept.\" \"She is not really learning the concept.\"\ntest \"It isn't rally raining anymore.\" \"It isn't really raining anymore.\"\ntest \"They were rally practicing their lines.\" \"They were really practicing their lines.\"\ntest \"It was not rally raining on our drive.\" \"It was not really raining on our drive.\"\ntest \"He had been rally preparing to leave.\" \"He had been really preparing to leave.\"\ntest \"Ain't rally happening yet?\" \"Ain't really happening yet?\"\ntest \"Weren't we rally celebrating that plan?\" \"Weren't we really celebrating that plan?\"\nallows \"Be rally precise when you describe the steps.\"\ntest \"He was RALLY going to go all night.\" \"He was REALLY going to go all night.\"\n\nallows \"The rally celebrating our victory lasted forever.\"\nallows \"I really appreciate your effort.\"\nallows \"Rally fans gathered outside the stadium.\"\nallows \"We had a rally before the game.\"\nallows \"The news rallied the team but left them motivated.\"\nallows \"We were ready to rally around the idea.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/RapidFire.weir",
    "content": "expr main (rapid fire)\n\nlet message \"It is more idiomatic to hypenate `rapid-fire`.\"\nlet description \"Checks to ensure writers hyphenate `rapid-fire`.\"\nlet kind \"Punctuation\"\nlet becomes \"rapid-fire\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/RealTrouper.weir",
    "content": "expr main (real trooper)\n\nlet message \"Use the correct phrase for someone who perseveres.\"\nlet description \"Ensures the correct use of `real trouper`, distinguishing it from `trooper`, which refers to a soldier or police officer.\"\nlet kind \"Eggcorn\"\nlet becomes \"real trouper\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/RedundantIIRC.weir",
    "content": "expr main [(if IIRC), (IIRC correctly)]\n\nlet message \"`IIRC` already means 'if I recall correctly', so adding 'if' or 'correctly' is redundant.\"\nlet description \"Flags redundant use of 'if' or 'correctly' with `IIRC`, since `IIRC` already stands for 'if I recall correctly'.\"\nlet kind \"Redundancy\"\nlet becomes \"IIRC\"\nlet strategy \"Exact\"\n\ntest \"This is due to the fact that if IIRC up to 2 processes mpirun will bind to core and then it will be socket.\" \"This is due to the fact that IIRC up to 2 processes mpirun will bind to core and then it will be socket.\"\ntest \"if iirc getting it to work with the SQLite storage engine was turning into a whole project and we decided to punt it\" \"IIRC getting it to work with the SQLite storage engine was turning into a whole project and we decided to punt it\"\ntest \"IIRC correctly, someone on the Home Assistant forums went as far as discovering that RS-485 was being used.\" \"IIRC, someone on the Home Assistant forums went as far as discovering that RS-485 was being used.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/RedundantPretty.weir",
    "content": "expr main (pretty decent)\n\nlet message \"Avoid redundancy.\"\nlet description \"`Pretty` is redundant when modifying `decent`. Use `decent` alone.\"\nlet kind \"Style\"\nlet becomes \"decent\"\n\ntest \"The movie was pretty decent.\" \"The movie was decent.\"\ntest \"It is pretty decent work.\" \"It is decent work.\"\ntest \"She did a pretty decent job.\" \"She did a decent job.\"\ntest \"That sounds pretty decent to me.\" \"That sounds decent to me.\"\ntest \"We had a pretty decent time.\" \"We had a decent time.\"\n\ntest \"The movie was Pretty Decent.\" \"The movie was Decent.\"\ntest \"The movie was PRETTY DECENT.\" \"The movie was DECENT.\"\n\nallows \"The movie was pretty good.\"\nallows \"The movie was decent.\"\nallows \"It was quite decent.\"\nallows \"Pretty much anything works.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/RedundantThat.weir",
    "content": "expr main (that that)\n\nlet message \"Consider whether the second `that` adds meaning in this context.\"\nlet description \"There is rarely a situation where `that that` cannot be condensed into a single token.\"\nlet kind \"Repetition\"\nlet becomes \"that\"\n\ntest \"I know that that answer is correct\" \"I know that answer is correct\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/RifeWith.weir",
    "content": "expr main (ripe with)\n\nlet message \"Use the correct phrase for something abundant.\"\nlet description \"Corrects `ripe with` to `rife with`, preserving the phrase’s meaning of being filled with something, often undesirable.\"\nlet kind \"Eggcorn\"\nlet becomes \"rife with\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/RoadMap.weir",
    "content": "expr main (roadmap)\n\nlet message \"Did you mean `road map`?\"\nlet description \"Detects when `roadmap` is used instead of `road map`, prompting the correct spacing.\"\nlet kind \"WordChoice\"\nlet becomes \"road map\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/RulesOfThumb.weir",
    "content": "expr main [(rule of thumbs), (rule-of-thumbs)]\n\nlet message \"The correct plural is `rules of thumb`.\"\nlet description \"Corrects pluralizing the wrong noun in `rule of thumb`.\"\nlet kind \"Grammar\"\nlet becomes \"rules of thumb\"\n\ntest \"Thanks. 0.2 is just from my rule of thumbs.\" \"Thanks. 0.2 is just from my rules of thumb.\"\ntest \"Add rule-of-thumbs for basic metrics, like \\\"Spill more than 1GB is a red flag\\\".\" \"Add rules of thumb for basic metrics, like \\\"Spill more than 1GB is a red flag\\\".\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SameAs.weir",
    "content": "expr main (same then)\n\nlet message \"Did you mean `same as`?\"\nlet description \"Corrects the incorrect phrase `same then` to the standard `same as`.\"\nlet kind \"Grammar\"\nlet becomes \"same as\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ScantilyClad.weir",
    "content": "expr main (scandally clad)\n\nlet message \"Use the correct phrase for minimal attire.\"\nlet description \"Fixes `scandally clad` to `scantily clad`, ensuring clarity in describing minimal attire.\"\nlet kind \"Eggcorn\"\nlet becomes \"scantily clad\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SendAnEmailTo.weir",
    "content": "expr main (send an email to)\n\nlet message \"Use the shorter verb form.\"\nlet description \"Replaces the verbose phrase `send an email to` with the concise verb `email`.\"\nlet kind \"Style\"\nlet becomes \"email\"\nlet strategy \"Exact\"\n\ntest \"Please send an email to John.\" \"Please email John.\"\ntest \"I will send an email to the team later.\" \"I will email the team later.\"\ntest \"SEND AN EMAIL TO support.\" \"email support.\"\ntest \"Send An Email To HR.\" \"email HR.\"\ntest \"Can you send an email to her?\" \"Can you email her?\"\ntest \"They decided to send an email to all users.\" \"They decided to email all users.\"\ntest \"Send an email to John, please.\" \"email John, please.\"\ntest \"Before noon, send an email to marketing.\" \"Before noon, email marketing.\"\nallows \"Please write an email to John.\"\nallows \"She sent a message to John.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/ShutdownVerb.weir",
    "content": "expr helper [AUX, will, would, should, could, can, may, might, must, has, have, had, is, are, was, were, am, do, does, did]\nexpr subject [PRON, PROPN, NOUN]\nexpr main <([( @helper shutdown), (@helper @subject shutdown), (@helper not shutdown), (@helper @subject not shutdown), (@helper not @subject shutdown)]), shutdown>\n\nlet message \"Use the verbal phrase `shut down` whenever an auxiliary verb is pulling `shutdown` into a predicate.\"\nlet description \"Keeps `shutdown` as a noun when it stands alone but swaps it for the phrasal verb `shut down` whenever an auxiliary precedes it.\"\nlet kind \"Grammar\"\nlet becomes \"shut down\"\n\n# True positives\n# These are scenarios where `shutdown` is acting like the verb, so the rule should rehydrate it into two words.\ntest \"I will shutdown the server after work.\" \"I will shut down the server after work.\"\ntest \"You can shutdown the old cluster tonight.\" \"You can shut down the old cluster tonight.\"\ntest \"He has shutdown the backup process already.\" \"He has shut down the backup process already.\"\ntest \"They have not shutdown the service yet.\" \"They have not shut down the service yet.\"\ntest \"Should we shutdown the build manually?\" \"Should we shut down the build manually?\"\ntest \"Would John shutdown the demo if we ask?\" \"Would John shut down the demo if we ask?\"\ntest \"Could you not shutdown the database until backups finish?\" \"Could you not shut down the database until backups finish?\"\ntest \"She won't shutdown the fleet until the engineers arrive.\" \"She won't shut down the fleet until the engineers arrive.\"\ntest \"Can Alice shutdown this branch for me?\" \"Can Alice shut down this branch for me?\"\ntest \"I shouldn't shutdown the node without warning.\" \"I shouldn't shut down the node without warning.\"\ntest \"Has he shutdown the node yet?\" \"Has he shut down the node yet?\"\n\n# True negatives (these should remain untouched)\ntest \"The shutdown lasted ten minutes.\" \"The shutdown lasted ten minutes.\"\ntest \"Our planned shutdown is scheduled for Friday.\" \"Our planned shutdown is scheduled for Friday.\"\ntest \"They shut down the network yesterday.\" \"They shut down the network yesterday.\"\ntest \"Shutdown procedures are in the handbook.\" \"Shutdown procedures are in the handbook.\"\ntest \"A forced shutdown is rare in this cluster.\" \"A forced shutdown is rare in this cluster.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SimilarLike.weir",
    "content": "expr main similar like\n\nlet message \"Prefer 'similar to' instead of 'similar like'.\"\nlet description \"The adjective 'similar' pairs with the preposition 'to', so never follow it with 'like'.\"\nlet kind \"Usage\"\nlet becomes \"similar to\"\nlet strategy \"MatchCase\"\n\n# True positives\ntest \"similar like\" \"similar to\"\ntest \"Similar like\" \"Similar to\"\ntest \"SIMILAR LIKE\" \"SIMILAR TO\"\ntest \"My idea is similar like yours.\" \"My idea is similar to yours.\"\ntest \"We noticed similar like behavior in each release.\" \"We noticed similar to behavior in each release.\"\ntest \"Tell me if this sample feels similar like the old version.\" \"Tell me if this sample feels similar to the old version.\"\ntest \"The proof seemed similar like every previous argument.\" \"The proof seemed similar to every previous argument.\"\ntest \"A similar like token often flags the wrong preposition.\" \"A similar to token often flags the wrong preposition.\"\n\n# True negatives / guardrails\ntest \"The two items are similar too.\" \"The two items are similar too.\"\ntest \"She is similar in taste.\" \"She is similar in taste.\"\ntest \"similar to\" \"similar to\"\ntest \"This word similarlike is unusual.\" \"This word similarlike is unusual.\"\ntest \"His similar likeness is uncanny.\" \"His similar likeness is uncanny.\"\ntest \"I enjoy similar lighting at dusk.\" \"I enjoy similar lighting at dusk.\"\ntest \"She mentioned similar limitations yesterday.\" \"She mentioned similar limitations yesterday.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SimpleGrammatical.weir",
    "content": "expr main (simply grammatical)\n\nlet message \"Use `simple grammatical` for correct adjective usage.\"\nlet description \"Corrects `simply grammatical` to `simple grammatical` for proper adjective usage.\"\nlet kind \"Usage\"\nlet becomes \"simple grammatical\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SneakingSuspicion.weir",
    "content": "expr main (sneaky suspicion)\n\nlet message \"Did you mean `sneaking suspicion`?\"\nlet description \"Changes `sneaky suspicion` to `sneaking suspicion`.\"\nlet kind \"Eggcorn\"\nlet becomes \"sneaking suspicion\"\n\ntest \"sneaky suspicion\" \"sneaking suspicion\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SomeOfThe.weir",
    "content": "expr main (some the)\n\nlet message \"Add `of` to form the partitive phrase: `some of the`.\"\nlet description \"Quantity words such as `some` normally take `of` before a definite article. Including `of` signals that you mean a subset of a larger set, preventing a momentary stumble in comprehension.\"\nlet kind \"Typo\"\nlet becomes \"some of the\"\n\ntest \"Some the trees are too thick to climb.\" \"Some of the trees are too thick to climb.\"\ntest \"You have misplaced some the config files.\" \"You have misplaced some of the config files.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SomebodyElses.weir",
    "content": "expr main [(somebody's else), (somebody's else's)]\n\nlet message \"This should be `somebody else's`?\"\nlet description \"Corrects `somebody else's` when the `'s` is in the wrong place.\"\nlet kind \"Grammar\"\nlet becomes \"somebody else's\"\n\ntest \"I really like your component and change to somebody's else would be really bad for now.\" \"I really like your component and change to somebody else's would be really bad for now.\"\ntest \"Nice to know it's somebody's else's problem for a change.\" \"Nice to know it's somebody else's problem for a change.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SoonerOrLater.weir",
    "content": "expr main (sooner than later)\n\nlet message \"Did you mean `sooner rather than later` or `sooner or later`?\"\nlet description \"Fixes the improper phrase `sooner than later` by suggesting standard alternatives.\"\nlet kind \"Usage\"\nlet becomes [\"sooner rather than later\", \"sooner or later\"]\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SpecialAttention.weir",
    "content": "expr main (spacial attention)\n\nlet message \"Did you mean `special attention`?\"\nlet description \"Changes `spacial attention` to `special attention`.\"\nlet kind \"Typo\"\nlet becomes \"special attention\"\n\ntest \"spacial attention\" \"special attention\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SpinalChord.weir",
    "content": "expr main <([(spinal [chord, chords]), (vocal [chord, chords]), (umbilical [chord, chords]), (electrical [chord, chords])]), ([chord, chords])>\n\nlet message \"Drop the `h` after these anatomical or wiring descriptors; the structure is a `cord`.\"\nlet description \"The words `spinal`, `vocal`, `umbilical`, and `electrical` are followed by `cord`, so replace accidental `chord`/`chords`.\"\nlet kind \"Typo\"\nlet becomes [\"cord\", \"cords\"]\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"The patient injured the spinal chord this week.\" \"The patient injured the spinal cord this week.\"\ntest \"Musicians talked about the vocal chord vibrations.\" \"Musicians talked about the vocal cord vibrations.\"\ntest \"Doctors monitor the umbilical chord after delivery.\" \"Doctors monitor the umbilical cord after delivery.\"\ntest \"Electrical chord damage can start a fire.\" \"Electrical cord damage can start a fire.\"\ntest \"We studied the spinal chords in anatomy class.\" \"We studied the spinal cords in anatomy class.\"\ntest \"The singer's vocal chords were sore.\" \"The singer's vocal cords were sore.\"\ntest \"Umbilical chords should remain intact until clamping.\" \"Umbilical cords should remain intact until clamping.\"\ntest \"Electrical chords spark when overloaded.\" \"Electrical cords spark when overloaded.\"\ntest \"Spinal chord repair takes steady hands.\" \"Spinal cord repair takes steady hands.\"\ntest \"Vocal chord therapy helped the speaker.\" \"Vocal cord therapy helped the speaker.\"\ntest \"Umbilical chord issues raised concern.\" \"Umbilical cord issues raised concern.\"\ntest \"The crew replaced the electrical chords on stage.\" \"The crew replaced the electrical cords on stage.\"\ntest \"Spinal chords often accompany nerve damage.\" \"Spinal cords often accompany nerve damage.\"\ntest \"Vocal chords sustain the melody.\" \"Vocal cords sustain the melody.\"\ntest \"Electrical chords run along the wall.\" \"Electrical cords run along the wall.\"\n\n# False positives / true negatives\n\nallows \"A guitar chord can sound beautiful.\"\nallows \"The lamp cord is frayed but still works.\"\nallows \"Spinal cord injuries require care.\"\nallows \"Vocal cords vibrate when we sing.\"\nallows \"Umbilical cord clamping is a delicate step.\"\nallows \"Remember to unplug the electrical cord before repairs.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/Starving.weir",
    "content": "expr main [(very hungry), (really hungry), (extremely hungry)]\n\nlet message \"A more vivid adjective would better convey intense hunger.\"\nlet description \"Encourages vivid writing by suggesting `starving` instead of weaker expressions like `very hungry.`\"\nlet kind \"Enhancement\"\nlet becomes \"starving\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/StateOfTheArt.weir",
    "content": "expr main (state of art)\n\nlet message \"Did you mean `state of the art`?\"\nlet description \"Detects incorrect usage of `state of art` and suggests `state of the art` as the correct phrase.\"\nlet kind \"Usage\"\nlet becomes \"state of the art\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/StatuteOfLimitations.weir",
    "content": "expr main (statue of limitations)\n\nlet message \"A `statue` is a sculpture; in legal terms, the correct word is `statute`.\"\nlet description \"Corrects `statue of limitations` to `statute of limitations`.\"\nlet kind \"Eggcorn\"\nlet becomes \"statute of limitations\"\n\ntest \"Shouldn't there be a grandfathered-in or statue of limitations for posts before the original punishment?\" \"Shouldn't there be a grandfathered-in or statute of limitations for posts before the original punishment?\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/StrikeChord.weir",
    "content": "expr main (strike a cord)\n\nlet message \"Use the idiom with `chord` when describing a feeling or reaction.\"\nlet description \"The phrase about resonating with someone is spelled with a chord, not a cord, so fix the typo and keep the idiom intact.\"\nlet kind \"Typo\"\nlet becomes \"strike a chord\"\nlet strategy \"MatchCase\"\n\n# True positives\ntest \"A heartfelt verse might strike a cord in every reader.\" \"A heartfelt verse might strike a chord in every reader.\"\ntest \"He tried to strike a cord during the keynote.\" \"He tried to strike a chord during the keynote.\"\ntest \"This rally plan is designed to strike a cord with voters.\" \"This rally plan is designed to strike a chord with voters.\"\ntest \"Will this line strike a cord, or will it fall flat?\" \"Will this line strike a chord, or will it fall flat?\"\ntest \"Our new video is meant to strike a cord across cultures.\" \"Our new video is meant to strike a chord across cultures.\"\ntest \"When they strike a cord, the crowd remembers the old anthem.\" \"When they strike a chord, the crowd remembers the old anthem.\"\ntest \"Strike a cord with humor and you win the room.\" \"Strike a chord with humor and you win the room.\"\ntest \"STRIKE A CORD BEFORE THE DROP.\" \"STRIKE A CHORD BEFORE THE DROP.\"\ntest \"It might strike a cord, then fade.\" \"It might strike a chord, then fade.\"\ntest \"Strike a cord - just not the one you are thinking of.\" \"Strike a chord - just not the one you are thinking of.\"\n\n# False negatives (these contexts should also resolve to the idiom)\ntest \"We plan to strike a cord; the sentiment should spread.\" \"We plan to strike a chord; the sentiment should spread.\"\ntest \"The song will strike a cord? We'll see.\" \"The song will strike a chord? We'll see.\"\ntest \"Do not wait until the chorus to strike a cord.\" \"Do not wait until the chorus to strike a chord.\"\ntest \"I hope we strike a cord tomorrow.\" \"I hope we strike a chord tomorrow.\"\ntest \"As soon as they strike a cord, the thread goes viral.\" \"As soon as they strike a chord, the thread goes viral.\"\n\n# False positives / true negatives\nallows \"I want to strike a chord tonight.\"\nallows \"He plugged the cord into the amp before playing.\"\nallows \"The guitar teacher told him to strike the chord on beat.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SufficeItToSay.weir",
    "content": "expr main (suffice to say)\n\nlet message \"`Suffice it to say` is the more standard and more common variant.\"\nlet description \"Corrects `suffice to say` to `suffice it to say`.\"\nlet kind \"Usage\"\nlet becomes \"suffice it to say\"\n\ntest \"I don't fully grok the bug, but suffice to say it is not an RCD issue.\" \"I don't fully grok the bug, but suffice it to say it is not an RCD issue.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/SupposedTo.weir",
    "content": "expr main (suppose to)\n\nlet message \"Did you mean `supposed to`?\"\nlet description \"Fixes `suppose to` to the correct `supposed to`.\"\nlet kind \"Usage\"\nlet becomes \"supposed to\"\n\ntest \"suppose to\" \"supposed to\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TakeItPersonally.weir",
    "content": "expr main (take it personal)\n\nlet message \"The more standard, less colloquial form is `take it personally`.\"\nlet description \"Corrects `take it personal` to `take it personally`.\"\nlet kind \"Usage\"\nlet becomes \"take it personally\"\n\ntest \"This is not personal, do not take it personal, we also think Thingsboard is a extraordinary tool (we are using in several scenarios in fact)\" \"This is not personal, do not take it personally, we also think Thingsboard is a extraordinary tool (we are using in several scenarios in fact)\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ThanksALot.weir",
    "content": "expr main (thanks lot)\n\nlet message \"The indefinite article `a` is required in `thanks a lot`.\"\nlet description \"Corrects the missing article in `thanks lot`, forming `thanks a lot`.\"\nlet kind \"Grammar\"\nlet becomes \"thanks a lot\"\n\ntest \"thanks lot\" \"thanks a lot\"\nallows \"thanks a lot\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/ThatChallenged.weir",
    "content": "expr main (the challenged)\n\nlet message \"Use `that challenged` for correct relative clause.\"\nlet description \"Corrects `the challenged` to `that challenged` for proper relative clause usage.\"\nlet becomes \"that challenged\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ThatThis.weir",
    "content": "expr main (the this)\n\nlet message \"Did you mean `that this`?\"\nlet description \"Fixes `the this` to the correct phrase `that this`.\"\nlet kind \"Typo\"\nlet becomes \"that this\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/The.weir",
    "content": "expr main [(teh), (te)]\n\nlet message \"Did you mean the definite article?\"\nlet description \"Fixes especially common misspellings of the word `the`\"\nlet kind \"Typo\"\nlet becomes \"the\"\n\ntest \"I adore teh light of the moon.\" \"I adore the light of the moon.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TheAnother.weir",
    "content": "expr main (the another)\n\nlet message \"Use `the other` or `another`, not both.\"\nlet description \"Corrects `the another`.\"\nlet kind \"Grammar\"\nlet becomes [\"the other\", \"another\"]\n\ntest \"Another possible cause is simply that the application does not have file creation permissions on the another machine.\" \"Another possible cause is simply that the application does not have file creation permissions on the other machine.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TheDifferenceBetween.weir",
    "content": "expr main [(the different between), (the differents between)]\n\nlet message \"The correct word is `difference`, not `different` or `differents`.\"\nlet description \"Corrects `the different(s) between to `the difference between`.\"\nlet kind \"Usage\"\nlet becomes \"the difference between\"\n\ntest \"What is the different between the two msi files of the latest version?\" \"What is the difference between the two msi files of the latest version?\"\ntest \"what's the differents between \\\"await page.$(selector)\\\" and \\\"page.$(selector)\\\" ?\" \"what's the difference between \\\"await page.$(selector)\\\" and \\\"page.$(selector)\\\" ?\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/TheirToThere.weir",
    "content": "expr main [<(their [is, are, was, were, isn't, aren't, wasn't, weren't, (will be), (can be), (could be), (should be), (would be), (may be), (might be), (must be), (has been), (have been)]), their>, <(their [on, after, beside, in, by, until, again, to, and, right, at]), their>, <((over their), their)>, <((over they're), they're)>, <(their,), their>, their's]\n\nlet message \"Did you mean `there`?\"\nlet description \"Corrects `their` when the intended meaning is `there`.\"\nlet kind \"Grammar\"\nlet becomes [\"there\", \"there's\", \"there's\"]\n\ntest \"Their is a problem with the build.\" \"There is a problem with the build.\"\ntest \"Their are several options to consider.\" \"There are several options to consider.\"\ntest \"Their was a delay in the rollout.\" \"There was a delay in the rollout.\"\ntest \"Their were no updates last week.\" \"There were no updates last week.\"\ntest \"Their isn't any time left.\" \"There isn't any time left.\"\ntest \"Their aren't enough chairs.\" \"There aren't enough chairs.\"\ntest \"Their wasn't a clear answer.\" \"There wasn't a clear answer.\"\ntest \"Their weren't any tickets left.\" \"There weren't any tickets left.\"\ntest \"Their will be more questions.\" \"There will be more questions.\"\ntest \"Their can be a conflict of interest.\" \"There can be a conflict of interest.\"\ntest \"Their could be a better approach.\" \"There could be a better approach.\"\ntest \"Their should be a warning.\" \"There should be a warning.\"\ntest \"Their would be a delay if we waited.\" \"There would be a delay if we waited.\"\ntest \"Their may be changes later.\" \"There may be changes later.\"\ntest \"Their might be issues later.\" \"There might be issues later.\"\ntest \"Their must be a simpler way.\" \"There must be a simpler way.\"\ntest \"Their has been a change in scope.\" \"There has been a change in scope.\"\ntest \"Their have been delays all week.\" \"There have been delays all week.\"\n\nallows \"Their car is in the driveway.\"\nallows \"We used their tools for the repair.\"\nallows \"Their team was excited.\"\nallows \"I appreciate their help.\"\nallows \"Their willpower is strong.\"\ntest \"Their is a cat sleeping on the radiator.\" \"There is a cat sleeping on the radiator.\"\ntest \"I left the keys their on the counter.\" \"I left the keys there on the counter.\"\ntest \"Their are three clean mugs in the cupboard.\" \"There are three clean mugs in the cupboard.\"\ntest \"We should meet their after work, near the fountain.\" \"We should meet there after work, near the fountain.\"\ntest \"Their was a strange echo in the stairwell.\" \"There was a strange echo in the stairwell.\"\ntest \"Put the blue folder their, beside the printer.\" \"Put the blue folder there, beside the printer.\"\ntest \"Their will be a storm tonight, so bring the plants in.\" \"There will be a storm tonight, so bring the plants in.\"\ntest \"I've never been their, but I've read about it.\" \"I've never been there, but I've read about it.\"\ntest \"Their isn't enough coffee for everyone.\" \"There isn't enough coffee for everyone.\"\ntest \"She paused their, mid-sentence, as if listening.\" \"She paused there, mid-sentence, as if listening.\"\ntest \"Their were fingerprints on the glass.\" \"There were fingerprints on the glass.\"\ntest \"We can stop their and refuel before the mountains.\" \"We can stop there and refuel before the mountains.\"\ntest \"Their's a tiny crack in the screen.\" \"There's a tiny crack in the screen.\"\ntest \"I saw him standing their, perfectly still.\" \"I saw him standing there, perfectly still.\"\ntest \"Their are more questions than answers.\" \"There are more questions than answers.\"\ntest \"Leave the umbrella their by the door.\" \"Leave the umbrella there by the door.\"\ntest \"Their must be a simpler explanation.\" \"There must be a simpler explanation.\"\ntest \"I wish I could go their again in summer.\" \"I wish I could go there again in summer.\"\ntest \"Their is no shortcut through this part of the forest.\" \"There is no shortcut through this part of the forest.\"\ntest \"He moved the chair their to catch the sunlight.\" \"He moved the chair there to catch the sunlight.\"\ntest \"Their were candles on every windowsill.\" \"There were candles on every windowsill.\"\ntest \"You can park their, but only after 6 p.m.\" \"You can park there, but only after 6 p.m.\"\ntest \"Their's a note taped under the table.\" \"There's a note taped under the table.\"\ntest \"She felt safer their, among familiar faces.\" \"She felt safer there, among familiar faces.\"\ntest \"Their were no footprints their in the fresh snow.\" \"There were no footprints there in the fresh snow.\"\ntest \"I'll wait their until you arrive.\" \"I'll wait there until you arrive.\"\ntest \"Their is a quiet confidence in her voice.\" \"There is a quiet confidence in her voice.\"\ntest \"The answer is right their in the first paragraph.\" \"The answer is right there in the first paragraph.\"\ntest \"Their are deadlines, and then their are consequences.\" \"There are deadlines, and then there are consequences.\"\ntest \"I can't believe you're still standing their, smiling.\" \"I can't believe you're still standing there, smiling.\"\ntest \"I left my keys over their on the table.\" \"I left my keys over there on the table.\"\ntest \"We should meet their at noon.\" \"We should meet there at noon.\"\ntest \"Their is no reason to panic.\" \"There is no reason to panic.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TheirToTheyre.weir",
    "content": "expr main [<(their [AUX, (supposed to), (allowed to), (invited to), (going to), (trying to), (coming over), (coming tonight), (leaving in), (moving to), (planning a), (waiting for), (answering any), (wondering where), (running behind), (running through), (far too), even, (already here), (in the), (on the), (at the), (a lot), an, two, offline, (ADV [PROG, AUX]), (ADV VERB), (PART [PROG, VERB, ADJ, AUX]), (ready to), (always [late, early]), the]), their>, <(there [(moving next), (planning a)]), there>]\n\nlet message \"Did you mean `they're`?\"\nlet description \"Corrects `their` when the intended meaning is `they're`.\"\nlet kind \"Grammar\"\nlet becomes [\"they're\", \"they're \"]\n\ntest \"Their going to be late.\" \"They're going to be late.\"\ntest \"I think their already here.\" \"I think they're already here.\"\ntest \"Their not sure what to do next.\" \"They're not sure what to do next.\"\ntest \"Their coming over after work.\" \"They're coming over after work.\"\ntest \"Tell them their invited to the meeting.\" \"Tell them they're invited to the meeting.\"\ntest \"Their trying to fix the bug right now.\" \"They're trying to fix the bug right now.\"\ntest \"Their going to love this movie.\" \"They're going to love this movie.\"\ntest \"Their the fastest team in the league.\" \"They're the fastest team in the league.\"\ntest \"Their supposed to call you back today.\" \"They're supposed to call you back today.\"\ntest \"Their leaving in five minutes.\" \"They're leaving in five minutes.\"\ntest \"I heard their moving to Denver.\" \"I heard they're moving to Denver.\"\ntest \"Their just kidding--don't worry.\" \"They're just kidding--don't worry.\"\ntest \"Their going to email the final draft tonight.\" \"They're going to email the final draft tonight.\"\ntest \"Their not available until Tuesday.\" \"They're not available until Tuesday.\"\ntest \"Their planning a surprise party.\" \"They're planning a surprise party.\"\ntest \"Looks like their running behind schedule.\" \"Looks like they're running behind schedule.\"\ntest \"Their the ones who approved it.\" \"They're the ones who approved it.\"\ntest \"Their going to miss the train.\" \"They're going to miss the train.\"\ntest \"Their still waiting for the test results.\" \"They're still waiting for the test results.\"\ntest \"Their not allowed to park here.\" \"They're not allowed to park here.\"\ntest \"Their going to change the policy.\" \"They're going to change the policy.\"\ntest \"Their ready to start whenever you are.\" \"They're ready to start whenever you are.\"\ntest \"Their not answering any messages.\" \"They're not answering any messages.\"\ntest \"Their going to be a problem if we don't hurry.\" \"They're going to be a problem if we don't hurry.\"\ntest \"Their probably wondering where we went.\" \"They're probably wondering where we went.\"\ntest \"Their always late.\" \"They're always late.\"\ntest \"Their going to the store after work.\" \"They're going to the store after work.\"\ntest \"Do you know if their coming tonight?\" \"Do you know if they're coming tonight?\"\ntest \"The neighbors said there moving next month.\" \"The neighbors said they're moving next month.\"\ntest \"I saw their running through the park.\" \"I saw they're running through the park.\"\ntest \"I heard there planning a surprise party.\" \"I heard they're planning a surprise party.\"\n\nallows \"Their backpacks were stacked neatly by the door.\"\nallows \"I admired their patience during the long, glitchy delay.\"\nallows \"Their dog sprinted across the yard like a furry comet.\"\nallows \"The committee revised their proposal after the budget changed.\"\nallows \"Their laughter drifted down the hallway, bright and unguarded.\"\nallows \"We borrowed their ladder to reach the stubborn light fixture.\"\nallows \"Their apartment smells like coffee, citrus, and old paperbacks.\"\nallows \"The kids lost their mittens somewhere between the car and the rink.\"\nallows \"Their answer was careful, precise, and unexpectedly kind.\"\nallows \"The artists framed their sketches before the gallery opened.\"\nallows \"Their server crashed, but their backup plan worked flawlessly.\"\nallows \"I couldn't ignore their evidence; it was meticulously documented.\"\nallows \"Their garden is a riot of basil, tomatoes, and bee traffic.\"\nallows \"The hikers checked their maps twice before leaving the trailhead.\"\nallows \"Their team celebrated quietly--relieved more than triumphant.\"\nallows \"Users should be able to visualize their connected notes as a knowledge graph, allowing them to explore relationships and identify patterns.\"\nallows \"The frustration was palpable; the team felt they were fighting a constant uphill battle against their own data infrastructure.\"\nallows \"Historians and sociologists have long examined how societies construct and maintain narratives about their past.\"\nallows \"Traditional maps, often produced by the colonizers, replaced native nomenclature with European equivalents, effectively severing a vital link between people and their ancestral lands.\"\nallows \"She believes I should prioritize their needs above my own.\"\nallows \"Each player places their pawn on GRI Headquarters (designated space on the board).\"\nallows \"This fragmented view hindered their ability to make timely adjustments, ultimately impacting their return on investment.\"\nallows \"My shift was nearing its end, and I was conducting my final rounds, ensuring each patient was comfortable and their needs were met.\"\nallows \"Upon opening the application, users see a prioritized list of information cards related to their most recently accessed projects or tasks in connected applications.\"\nallows \"For instance, a musician who has lost their hearing might collaborate with a visual artist to create a series of abstract paintings that attempt to translate the emotional impact of music into a visual form.\"\nallows \"Their relatively low density facilitates handling and transportation.\"\nallows \"The growing interest in mycelium-based construction materials stems from their potential to offer a sustainable alternative to conventional building materials.\"\nallows \"Similarly, the individual experiencing sensory loss must actively reconstruct their understanding of the world, mapping the contours of their new, altered reality.\"\ntest \"Their far too warm for that.\" \"They're far too warm for that.\"\ntest \"Their far too cold for that.\" \"They're far too cold for that.\"\ntest \"Their even, just as I said!\" \"They're even, just as I said!\"\n\ntest \"Their in the kitchen already.\" \"They're in the kitchen already.\"\ntest \"Their on the way to the airport.\" \"They're on the way to the airport.\"\ntest \"Their at the wrong address.\" \"They're at the wrong address.\"\n\ntest \"Their a lot of people waiting outside.\" \"They're a lot of people waiting outside.\"\ntest \"Their an example of how not to do it.\" \"They're an example of how not to do it.\"\ntest \"Their two options left.\" \"They're two options left.\"\n\ntest \"Their to blame for the mistake.\" \"They're to blame for the mistake.\"\ntest \"Their to meet us after work.\" \"They're to meet us after work.\"\n\ntest \"Their offline right now, try again later.\" \"They're offline right now, try again later.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ThereToTheir.weir",
    "content": "expr main [<(there [NOUN, (NOUN NOUN), mittens, sketches, past, needs, pawn, ability, return]), there>, <(there connected notes), there>, <(there own data infrastructure), there>, <(there ancestral lands), there>, <(there relatively low density), there>, <(there potential to), there>, <(there backup plan), there>, <(there most recently accessed projects), there>, <(there new), there>]\n\nlet message \"Did you mean `their`?\"\nlet description \"Corrects `there` when the intended meaning is `their`.\"\nlet kind \"Grammar\"\nlet becomes \"their\"\n\ntest \"There backpacks were stacked neatly by the door.\" \"Their backpacks were stacked neatly by the door.\"\ntest \"Is that there dog?\" \"Is that their dog?\"\ntest \"There dog is barking again.\" \"Their dog is barking again.\"\ntest \"The students forgot there backpacks.\" \"The students forgot their backpacks.\"\ntest \"I admired there patience during the long, glitchy delay.\" \"I admired their patience during the long, glitchy delay.\"\ntest \"There dog sprinted across the yard like a furry comet.\" \"Their dog sprinted across the yard like a furry comet.\"\ntest \"The committee revised there proposal after the budget changed.\" \"The committee revised their proposal after the budget changed.\"\ntest \"There laughter drifted down the hallway, bright and unguarded.\" \"Their laughter drifted down the hallway, bright and unguarded.\"\ntest \"We borrowed there ladder to reach the stubborn light fixture.\" \"We borrowed their ladder to reach the stubborn light fixture.\"\ntest \"There apartment smells like coffee, citrus, and old paperbacks.\" \"Their apartment smells like coffee, citrus, and old paperbacks.\"\ntest \"The kids lost there mittens somewhere between the car and the rink.\" \"The kids lost their mittens somewhere between the car and the rink.\"\ntest \"There answer was careful, precise, and unexpectedly kind.\" \"Their answer was careful, precise, and unexpectedly kind.\"\ntest \"The artists framed there sketches before the gallery opened.\" \"The artists framed their sketches before the gallery opened.\"\ntest \"There server crashed, but there backup plan worked flawlessly.\" \"Their server crashed, but their backup plan worked flawlessly.\"\ntest \"I couldn't ignore there evidence; it was meticulously documented.\" \"I couldn't ignore their evidence; it was meticulously documented.\"\ntest \"There garden is a riot of basil, tomatoes, and bee traffic.\" \"Their garden is a riot of basil, tomatoes, and bee traffic.\"\ntest \"The hikers checked there maps twice before leaving the trailhead.\" \"The hikers checked their maps twice before leaving the trailhead.\"\ntest \"They left there books in the classroom.\" \"They left their books in the classroom.\"\ntest \"There team celebrated quietly--relieved more than triumphant.\" \"Their team celebrated quietly--relieved more than triumphant.\"\ntest \"Users should be able to visualize there connected notes as a knowledge graph, allowing them to explore relationships and identify patterns.\" \"Users should be able to visualize their connected notes as a knowledge graph, allowing them to explore relationships and identify patterns.\"\ntest \"The frustration was palpable; the team felt they were fighting a constant uphill battle against there own data infrastructure.\" \"The frustration was palpable; the team felt they were fighting a constant uphill battle against their own data infrastructure.\"\ntest \"Historians and sociologists have long examined how societies construct and maintain narratives about there past.\" \"Historians and sociologists have long examined how societies construct and maintain narratives about their past.\"\ntest \"Traditional maps, often produced by the colonizers, replaced native nomenclature with European equivalents, effectively severing a vital link between people and there ancestral lands.\" \"Traditional maps, often produced by the colonizers, replaced native nomenclature with European equivalents, effectively severing a vital link between people and their ancestral lands.\"\ntest \"She believes I should prioritize there needs above my own.\" \"She believes I should prioritize their needs above my own.\"\ntest \"Each player places there pawn on GRI Headquarters (designated space on the board).\" \"Each player places their pawn on GRI Headquarters (designated space on the board).\"\ntest \"This fragmented view hindered there ability to make timely adjustments, ultimately impacting there return on investment.\" \"This fragmented view hindered their ability to make timely adjustments, ultimately impacting their return on investment.\"\ntest \"My shift was nearing its end, and I was conducting my final rounds, ensuring each patient was comfortable and there needs were met.\" \"My shift was nearing its end, and I was conducting my final rounds, ensuring each patient was comfortable and their needs were met.\"\ntest \"Upon opening the application, users see a prioritized list of information cards related to there most recently accessed projects or tasks in connected applications.\" \"Upon opening the application, users see a prioritized list of information cards related to their most recently accessed projects or tasks in connected applications.\"\ntest \"For instance, a musician who has lost there hearing might collaborate with a visual artist to create a series of abstract paintings that attempt to translate the emotional impact of music into a visual form.\" \"For instance, a musician who has lost their hearing might collaborate with a visual artist to create a series of abstract paintings that attempt to translate the emotional impact of music into a visual form.\"\ntest \"There relatively low density facilitates handling and transportation.\" \"Their relatively low density facilitates handling and transportation.\"\ntest \"The growing interest in mycelium-based construction materials stems from there potential to offer a sustainable alternative to conventional building materials.\" \"The growing interest in mycelium-based construction materials stems from their potential to offer a sustainable alternative to conventional building materials.\"\ntest \"Similarly, the individual experiencing sensory loss must actively reconstruct there understanding of the world, mapping the contours of there new, altered reality.\" \"Similarly, the individual experiencing sensory loss must actively reconstruct their understanding of the world, mapping the contours of their new, altered reality.\"\n\nallows \"There are several options to consider.\"\nallows \"I left the keys there on the counter.\"\nallows \"We should meet there after work, near the fountain.\"\nallows \"There will be more questions.\"\nallows \"There isn't any time left.\"\nallows \"There's a note taped under the table.\"\nallows \"I saw him standing there, perfectly still.\"\nallows \"Leave the umbrella there by the door.\"\nallows \"The answer is right there in the first paragraph.\"\nallows \"Are there known issues between these specific versions of Elementor and ACF that I’m unaware of?\"\nallows \"There are lots of different phases.\"\nallows \"Yet, there are pockets of silence, moments where the urban soundscape recedes.\"\nallows \"While there are areas for improvement, the plugin is already a valuable tool for developers who want a modern and efficient debugging experience.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TheyToThem.weir",
    "content": "expr main <([to, with, for, about, against, between, among, around, toward, towards, through, beyond, behind, across, near, inside, outside, call, contact, invite, remind, ask, see, watch, help, trust, send, support, follow, visit, tell, thank, mention, show] they), they>\n\nlet message \"Use `them` when the pronoun follows a preposition or transitive verb.\"\nlet description \"Converts `they` to `them` whenever the pronoun serves as an object after common prepositions or actions that take direct objects.\"\nlet kind \"Grammar\"\nlet becomes \"them\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"Talk to they about the plan.\" \"Talk to them about the plan.\"\ntest \"I will ask they for consent.\" \"I will ask them for consent.\"\ntest \"Send they the invitation.\" \"Send them the invitation.\"\ntest \"Call they when you arrive.\" \"Call them when you arrive.\"\ntest \"Contact they via email.\" \"Contact them via email.\"\ntest \"Thank they for their help.\" \"Thank them for their help.\"\ntest \"I remind they as soon as possible.\" \"I remind them as soon as possible.\"\ntest \"Discuss with they the new requirements.\" \"Discuss with them the new requirements.\"\ntest \"We fought against they for fairness.\" \"We fought against them for fairness.\"\ntest \"Between they and us, the message is clear.\" \"Between them and us, the message is clear.\"\ntest \"Tell they the good news.\" \"Tell them the good news.\"\ntest \"CALL THEY TODAY.\" \"CALL THEM TODAY.\"\ntest \"Support they during the transition.\" \"Support them during the transition.\"\ntest \"Show they how the tool works.\" \"Show them how the tool works.\"\n\ntest \"Mention they in your update.\" \"Mention them in your update.\"\n\n# True negatives\n\ntest \"They went to the store.\" \"They went to the store.\"\ntest \"I know they will arrive soon.\" \"I know they will arrive soon.\"\ntest \"Because they are busy, we rescheduled.\" \"Because they are busy, we rescheduled.\"\ntest \"They told us they would stay.\" \"They told us they would stay.\"\ntest \"They announced the event yesterday.\" \"They announced the event yesterday.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TheyreToTheir.weir",
    "content": "expr main <(they're [backpacks, patience, dog, proposal, laughter, ladder, apartment, mittens, answer, sketches, server, backup, evidence, garden, maps, team, past, needs, pawn, ability, return, hearing, house, coats, problems, (connected notes), (own data infrastructure), (ancestral lands), (most recently accessed projects), (potential to), (understanding), (new), (relatively low density)]), they're>\n\nlet message \"Did you mean `their`?\"\nlet description \"Corrects `they're` when the intended meaning is `their`.\"\nlet kind \"Grammar\"\nlet becomes \"their\"\n\nallows \"They're going to be late.\"\nallows \"I think they're already here.\"\nallows \"They're not sure what to do next.\"\nallows \"They're coming over after work.\"\nallows \"Tell them they're invited to the meeting.\"\nallows \"They're trying to fix the bug right now.\"\nallows \"They're going to love this movie.\"\nallows \"They're the fastest team in the league.\"\nallows \"They're supposed to call you back today.\"\nallows \"They're leaving in five minutes.\"\nallows \"I heard they're moving to Denver.\"\nallows \"They're just kidding--don't worry.\"\nallows \"They're going to email the final draft tonight.\"\nallows \"They're not available until Tuesday.\"\nallows \"They're planning a surprise party.\"\nallows \"Looks like they're running behind schedule.\"\nallows \"They're the ones who approved it.\"\nallows \"They're going to miss the train.\"\nallows \"They're still waiting for the test results.\"\nallows \"They're not allowed to park here.\"\nallows \"They're going to change the policy.\"\nallows \"They're ready to start whenever you are.\"\nallows \"They're not answering any messages.\"\nallows \"They're going to be a problem if we don't hurry.\"\nallows \"They're probably wondering where we went.\"\nallows \"No, they're not.\"\nallows \"They're done with blacking, I believe.\"\nallows \"I don't know what they're like.\"\nallows \"They're all over crumbs.\"\ntest \"They're backpacks were stacked neatly by the door.\" \"Their backpacks were stacked neatly by the door.\"\ntest \"What are they're problems?\" \"What are their problems?\"\ntest \"I think they're house is the blue one.\" \"I think their house is the blue one.\"\ntest \"I admired they're patience during the long, glitchy delay.\" \"I admired their patience during the long, glitchy delay.\"\ntest \"They're dog sprinted across the yard like a furry comet.\" \"Their dog sprinted across the yard like a furry comet.\"\ntest \"The committee revised they're proposal after the budget changed.\" \"The committee revised their proposal after the budget changed.\"\ntest \"They're laughter drifted down the hallway, bright and unguarded.\" \"Their laughter drifted down the hallway, bright and unguarded.\"\ntest \"We borrowed they're ladder to reach the stubborn light fixture.\" \"We borrowed their ladder to reach the stubborn light fixture.\"\ntest \"They're apartment smells like coffee, citrus, and old paperbacks.\" \"Their apartment smells like coffee, citrus, and old paperbacks.\"\ntest \"The kids lost they're mittens somewhere between the car and the rink.\" \"The kids lost their mittens somewhere between the car and the rink.\"\ntest \"They're answer was careful, precise, and unexpectedly kind.\" \"Their answer was careful, precise, and unexpectedly kind.\"\ntest \"The artists framed they're sketches before the gallery opened.\" \"The artists framed their sketches before the gallery opened.\"\ntest \"They're server crashed, but they're backup plan worked flawlessly.\" \"Their server crashed, but their backup plan worked flawlessly.\"\ntest \"I couldn't ignore they're evidence; it was meticulously documented.\" \"I couldn't ignore their evidence; it was meticulously documented.\"\ntest \"They're garden is a riot of basil, tomatoes, and bee traffic.\" \"Their garden is a riot of basil, tomatoes, and bee traffic.\"\ntest \"The hikers checked they're maps twice before leaving the trailhead.\" \"The hikers checked their maps twice before leaving the trailhead.\"\ntest \"They're team celebrated quietly--relieved more than triumphant.\" \"Their team celebrated quietly--relieved more than triumphant.\"\ntest \"Users should be able to visualize they're connected notes as a knowledge graph, allowing them to explore relationships and identify patterns.\" \"Users should be able to visualize their connected notes as a knowledge graph, allowing them to explore relationships and identify patterns.\"\ntest \"The frustration was palpable; the team felt they were fighting a constant uphill battle against they're own data infrastructure.\" \"The frustration was palpable; the team felt they were fighting a constant uphill battle against their own data infrastructure.\"\ntest \"Historians and sociologists have long examined how societies construct and maintain narratives about they're past.\" \"Historians and sociologists have long examined how societies construct and maintain narratives about their past.\"\ntest \"Traditional maps, often produced by the colonizers, replaced native nomenclature with European equivalents, effectively severing a vital link between people and they're ancestral lands.\" \"Traditional maps, often produced by the colonizers, replaced native nomenclature with European equivalents, effectively severing a vital link between people and their ancestral lands.\"\ntest \"She believes I should prioritize they're needs above my own.\" \"She believes I should prioritize their needs above my own.\"\ntest \"Each player places they're pawn on GRI Headquarters (designated space on the board).\" \"Each player places their pawn on GRI Headquarters (designated space on the board).\"\ntest \"This fragmented view hindered they're ability to make timely adjustments, ultimately impacting they're return on investment.\" \"This fragmented view hindered their ability to make timely adjustments, ultimately impacting their return on investment.\"\ntest \"My shift was nearing its end, and I was conducting my final rounds, ensuring each patient was comfortable and they're needs were met.\" \"My shift was nearing its end, and I was conducting my final rounds, ensuring each patient was comfortable and their needs were met.\"\ntest \"Upon opening the application, users see a prioritized list of information cards related to they're most recently accessed projects or tasks in connected applications.\" \"Upon opening the application, users see a prioritized list of information cards related to their most recently accessed projects or tasks in connected applications.\"\ntest \"For instance, a musician who has lost they're hearing might collaborate with a visual artist to create a series of abstract paintings that attempt to translate the emotional impact of music into a visual form.\" \"For instance, a musician who has lost their hearing might collaborate with a visual artist to create a series of abstract paintings that attempt to translate the emotional impact of music into a visual form.\"\ntest \"They're relatively low density facilitates handling and transportation.\" \"Their relatively low density facilitates handling and transportation.\"\ntest \"The growing interest in mycelium-based construction materials stems from they're potential to offer a sustainable alternative to conventional building materials.\" \"The growing interest in mycelium-based construction materials stems from their potential to offer a sustainable alternative to conventional building materials.\"\ntest \"Similarly, the individual experiencing sensory loss must actively reconstruct they're understanding of the world, mapping the contours of they're new, altered reality.\" \"Similarly, the individual experiencing sensory loss must actively reconstruct their understanding of the world, mapping the contours of their new, altered reality.\"\ntest \"Can you hand me they're coats?\" \"Can you hand me their coats?\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ThoughtProcess.weir",
    "content": "expr main (though process)\n\nlet message \"Did you mean `thought process`?\"\nlet description \"Changes `though process` to `thought process`.\"\nlet kind \"Typo\"\nlet becomes \"thought process\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ThreatenVerb.weir",
    "content": "expr modalAux [will, would, should, could, can, may, might, must, shall, won't, wouldn't, shouldn't, couldn't, can't, mustn't]\n\nexpr subject [(DET NOUN), (DET PROPN), PRON, NOUN, PROPN]\nexpr main <([( @modalAux threat), (@modalAux @subject threat)]), threat>\n\nlet message \"Modal verbs followed by `threat` almost always intend the verb `threaten`.\"\nlet description \"Normalize `threat` to `threaten` when it is used after modals (or their contractions) because the noun form is being mistaken for a verb.\"\nlet kind \"Grammar\"\nlet becomes \"threaten\"\nlet strategy \"MatchCase\"\n\ntest \"I will threat the vendor if they miss another check-in.\" \"I will threaten the vendor if they miss another check-in.\"\ntest \"You shouldn't threat the partnership over a misunderstanding.\" \"You shouldn't threaten the partnership over a misunderstanding.\"\ntest \"We could threat the release if the bug persists.\" \"We could threaten the release if the bug persists.\"\ntest \"They might threat the roadmap during the review.\" \"They might threaten the roadmap during the review.\"\ntest \"You must threat the issue before it escalates.\" \"You must threaten the issue before it escalates.\"\ntest \"He should threat his backup plan.\" \"He should threaten his backup plan.\"\ntest \"We wouldn't threat our customers for honest feedback.\" \"We wouldn't threaten our customers for honest feedback.\"\ntest \"She can't threat the crew without checking policy.\" \"She can't threaten the crew without checking policy.\"\ntest \"I would threat the system again if it keeps failing.\" \"I would threaten the system again if it keeps failing.\"\ntest \"May I threat them later?\" \"May I threaten them later?\"\ntest \"Might you threat the schedule to force a fix?\" \"Might you threaten the schedule to force a fix?\"\ntest \"You won't threat me with the same ultimatum twice.\" \"You won't threaten me with the same ultimatum twice.\"\ntest \"Should they threat the platform to pressure the release?\" \"Should they threaten the platform to pressure the release?\"\ntest \"I WILL threat the contract if the clauses keep changing.\" \"I WILL threaten the contract if the clauses keep changing.\"\ntest \"They mustn't threat the new hires.\" \"They mustn't threaten the new hires.\"\n\nallows \"The threat on the board made everyone nervous.\"\nallows \"This threat level matches last winter's storms.\"\nallows \"Threat modeling exercises take several days.\"\nallows \"Treat each threat seriously, but don't confuse the noun with the verb.\"\nallows \"A threat scenario looks at possible attackers and motives.\"\nallows \"Her tone sounded like the threat of a storm, not a promise.\"\nallows \"Threat actors often test the defenses before committing to a breach.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TickingTimeClock.weir",
    "content": "expr main (ticking time clock)\n\nlet message \"Use `ticking time bomb` for disastrous consequences, otherwise avoid redundancy with just `ticking clock`.\"\nlet description \"Corrects `ticking time clock` to `ticking time bomb` for idiomatic urgency or `ticking clock` otherwise.\"\nlet kind \"Usage\"\nlet becomes [\"ticking time bomb\", \"ticking clock\"]\n\ntest \"One element that can help up the stakes (and tension!) is a \\“ticking time clock.\\”\" \"One element that can help up the stakes (and tension!) is a \\“ticking time bomb.\\”\"\ntest \"The opportunity itself has a ticking time clock as all great opportunities do.\" \"The opportunity itself has a ticking clock as all great opportunities do.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ToBackOut.weir",
    "content": "expr main (to backout)\n\nlet message \"Separate `backout` into the verb `back out` after `to`.\"\nlet description \"Treats `to backout` as a mistyped infinitive and prefers the two-word verb.\"\nlet kind \"Usage\"\nlet becomes \"to back out\"\n\n# True positives\ntest \"There's still time to backout of the deal.\" \"There's still time to back out of the deal.\"\ntest \"Make sure to backout that commit before merging.\" \"Make sure to back out that commit before merging.\"\ntest \"I told them to BACKOUT once the bug surfaced.\" \"I told them to BACK OUT once the bug surfaced.\"\ntest \"Please remember to backout the change if it breaks tests.\" \"Please remember to back out the change if it breaks tests.\"\ntest \"To backout, you can cancel the pipeline.\" \"To back out, you can cancel the pipeline.\"\ntest \"We still might need to backout this feature.\" \"We still might need to back out this feature.\"\ntest \"If we have to TO BACKOUT now, we should warn everyone.\" \"If we have to TO BACK OUT now, we should warn everyone.\"\ntest \"We might need to backout; let us know.\" \"We might need to back out; let us know.\"\n\n# False negative coverage (punctuation and casing should still trigger).\ntest \"to backout?\" \"to back out?\"\ntest \"to backout!\" \"to back out!\"\n\n# True negatives (these contexts should stay untouched).\ntest \"We plan to back out after the meeting.\" \"We plan to back out after the meeting.\"\ntest \"The backout plan came with the release.\" \"The backout plan came with the release.\"\ntest \"Backout is spelled as a noun in this paragraph.\" \"Backout is spelled as a noun in this paragraph.\"\ntest \"to back out\" \"to back out\"\n\n# False positives (near misses that should not change).\ntest \"This doc mentions to backouts and other options.\" \"This doc mentions to backouts and other options.\"\ntest \"They call it the backout-ary clause.\" \"They call it the backout-ary clause.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ToDoHyphen.weir",
    "content": "expr main (todo)\n\nlet message \"Hyphenate `to-do`.\"\nlet description \"Ensures `to-do` is correctly hyphenated.\"\nlet becomes \"to-do\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ToGreatLengths.weir",
    "content": "expr main [(through great lengths), (to a great length)]\n\nlet message \"The idiom is to go `to great lengths`.\"\nlet description \"Corrects `through great lengths` to `to great lengths`.\"\nlet becomes \"to great lengths\"\n\ntest \"Bloomberg's sponsored paid for content goes through great lengths to market Nvidia's products and in particular its AI products that we've frequently criticized.\" \"Bloomberg's sponsored paid for content goes to great lengths to market Nvidia's products and in particular its AI products that we've frequently criticized.\"\ntest \"While ratatui-image goes to a great length to detect a rendered image's pixel size in terms of \\\"character cells that will be covered\\\", via font pixel size detection, ultimately it's up to the terminal emulator to decide what exactly a pixel is.\" \"While ratatui-image goes to great lengths to detect a rendered image's pixel size in terms of \\\"character cells that will be covered\\\", via font pixel size detection, ultimately it's up to the terminal emulator to decide what exactly a pixel is.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ToLoseTooLoose.weir",
    "content": "expr main [(to loose), (too lose)]\n\nlet message \"For `not to win`, use `to lose`. For `not tight enough`, use `too loose`.\"\nlet description \"Corrects mixing up `to` with `too` and `lose` with `loose`.\"\nlet kind \"Spelling\"\nlet becomes [\"to lose\", \"too loose\"]\n\ntest \"Bits and pieces of legacy code that are lying around on my system and that it would be a pity to loose\" \"Bits and pieces of legacy code that are lying around on my system and that it would be a pity to lose\"\ntest \"infinite recursion caused by transforms that have their preconditions too lose and/or conflict with each other\" \"infinite recursion caused by transforms that have their preconditions too loose and/or conflict with each other\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/ToSomeDegree.weir",
    "content": "expr main (in some degree)\n\nlet message \"The correct preposition in this phrase is 'to', not 'in'.\"\nlet description \"Corrects `in some degree` to `to some degree`, meaning to a certain extent.\"\nlet kind \"Eggcorn\"\nlet becomes \"to some degree\"\n\ntest \"It would be prescriptive in some degree, but we could use MUST / MAY / SHOULD as like the current spec and IETF RFCs.\" \"It would be prescriptive to some degree, but we could use MUST / MAY / SHOULD as like the current spec and IETF RFCs.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/ToTheMannerBorn.weir",
    "content": "expr main (to the manor born)\n\nlet message \"Use the correct phrase for being naturally suited to something.\"\nlet description \"Corrects `to the manor born` to `to the manner born`, ensuring the intended meaning of being naturally suited to a way of life.\"\nlet kind \"Eggcorn\"\nlet becomes \"to the manner born\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/ToWorryAbout.weir",
    "content": "expr main (to worried about)\n\nlet message \"Did you mean the progressive form?\"\nlet description \"Fixes incorrect use of `to worried about`.\"\nlet becomes [\"to worry about\", \"too worried about\"]\n\ntest \"I don't want you to worried about it.\" \"I don't want you to worry about it.\"\ntest \"I don't want you to worried about it.\" \"I don't want you too worried about it.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TongueInCheek.weir",
    "content": "expr main (tongue and cheek)\n\nlet message \"Use `tongue in cheek` for the idiom.\"\nlet description \"Corrects the idiom when `and` replaces the needed preposition.\"\nlet kind \"WordChoice\"\nlet becomes \"tongue in cheek\"\n\ntest \"The remark was entirely tongue and cheek.\" \"The remark was entirely tongue in cheek.\"\ntest \"It was a tongue and cheek response.\" \"It was a tongue in cheek response.\"\ntest \"He delivered it tongue and cheek, expecting a laugh.\" \"He delivered it tongue in cheek, expecting a laugh.\"\ntest \"\\\"tongue and cheek\\\" jokes are tough to read.\" \"\\\"tongue in cheek\\\" jokes are tough to read.\"\ntest \"Their tone was TONGUE AND CHEEK all night.\" \"Their tone was TONGUE IN CHEEK all night.\"\ntest \"Tongue and cheek banter kept the meeting light.\" \"Tongue in cheek banter kept the meeting light.\"\ntest \"Her note (totally tongue and cheek) made us smile.\" \"Her note (totally tongue in cheek) made us smile.\"\ntest \"Was that tongue and cheek or sincere?\" \"Was that tongue in cheek or sincere?\"\nallows \"Their comments were deliberately tongue in cheek.\"\nallows \"That was a tongue-in-cheek reply.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/Towards.weir",
    "content": "expr main (to towards)\n\nlet message \"Use `towards` without the preceding `to`.\"\nlet description \"Removes redundant `to` before `towards`.\"\nlet kind \"Redundancy\"\nlet becomes \"towards\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TrialAndError.weir",
    "content": "expr main (trail and error)\n\nlet message \"You misspelled `trial`.\"\nlet description \"Corrects `trail` to `trial` in `trial and error`.\"\nlet kind \"Typo\"\nlet becomes \"trial and error\"\n\ntest \"It was produced through trail and error.\" \"It was produced through trial and error.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TrueToWord.weir",
    "content": "expr main <(true to [my, your, his, her, its, our, their, one's] words), words>\n\nlet message \"Replace the plural `words` with the idiomatic singular form when someone stays true to a promise.\"\nlet description \"Normalizes phrasing around `true to <possessive>` so it follows the conventional `true to one's word`.\"\nlet kind \"Style\"\nlet becomes \"word\"\n\ntest \"She was true to her words.\" \"She was true to her word.\"\ntest \"He stays TRUE to his words daily.\" \"He stays TRUE to his word daily.\"\ntest \"We're true to our words even when it's hard.\" \"We're true to our word even when it's hard.\"\ntest \"You're true to your words, no matter what.\" \"You're true to your word, no matter what.\"\ntest \"I try to be true to my words.\" \"I try to be true to my word.\"\ntest \"They remain true to their words after the announcement.\" \"They remain true to their word after the announcement.\"\ntest \"True to one's words, the promise held.\" \"True to one's word, the promise held.\"\ntest \"True to its words, the contract stands.\" \"True to its word, the contract stands.\"\ntest \"He has been true to her words through thick and thin.\" \"He has been true to her word through thick and thin.\"\ntest \"They were true to THEIR words, so the customers celebrated.\" \"They were true to THEIR word, so the customers celebrated.\"\ntest \"One stays true to one's words while keeping a diary.\" \"One stays true to one's word while keeping a diary.\"\ntest \"I'm true to my words.\" \"I'm true to my word.\"\ntest \"True to your words, you resumed the pledge.\" \"True to your word, you resumed the pledge.\"\n\nallows \"She was true to her word.\"\nallows \"They were true to the words they heard in class.\"\nallows \"Being true to your word is the goal.\"\nallows \"The article praised her true words.\"\nallows \"Our team is true to the word we said earlier.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/TuffEnough.weir",
    "content": "expr main <(tuff [enough, like]), (tuff)>\n\nlet message \"Swap `tuff` for `tough` when it describes strength or difficulty followed by 'enough' or 'like'.\"\nlet description \"The adjective `tough` pairs with words like `enough` or `like`, so correct the common typo `tuff` in those constructions.\"\nlet kind \"Typo\"\nlet becomes \"tough\"\nlet strategy \"MatchCase\"\n\n# True positives\n# These examples should be rewritten with 'tough'.\ntest \"He was tuff enough to lift it.\" \"He was tough enough to lift it.\"\ntest \"That plan needs to be tuff enough to withstand critique.\" \"That plan needs to be tough enough to withstand critique.\"\ntest \"Tuff enough, he still tried.\" \"Tough enough, he still tried.\"\ntest \"I'm feeling tuff like a warrior today.\" \"I'm feeling tough like a warrior today.\"\ntest \"Her tuff enough answer silenced the crowd.\" \"Her tough enough answer silenced the crowd.\"\ntest \"The tuff like textures on the armor impressed me.\" \"The tough like textures on the armor impressed me.\"\ntest \"They need to be tuff enough to finish the run.\" \"They need to be tough enough to finish the run.\"\ntest \"Tuff like this builds character.\" \"Tough like this builds character.\"\ntest \"She acted tuff enough to merge the teams.\" \"She acted tough enough to merge the teams.\"\ntest \"Tuff like steel, the hinge kept swinging.\" \"Tough like steel, the hinge kept swinging.\"\ntest \"The argument must be tuff enough to sway them.\" \"The argument must be tough enough to sway them.\"\ntest \"Tuff enough socks keep the feet warm.\" \"Tough enough socks keep the feet warm.\"\n\n# True negatives\n# The rule should not fire when `tuff` is part of a name or followed by other words.\ntest \"Tuff City hosts the festival.\" \"Tuff City hosts the festival.\"\ntest \"He called the passage tuff and unforgiving.\" \"He called the passage tuff and unforgiving.\"\ntest \"She grabbed a tuff bar before the workout.\" \"She grabbed a tuff bar before the workout.\"\n\nallows \"Stay tuff, friend.\"\nallows \"Tuff, the nickname, belonged to his grandfather.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/TurnItOff.weir",
    "content": "expr main [(turn it of), (turn i of)]\n\nlet message \"Did you mean `turn it off`?\"\nlet description \"Fixes the mistake in the phrase `turn it off`.\"\nlet kind \"Typo\"\nlet becomes \"turn it off\"\n\ntest \"Turn it of\" \"Turn it off\"\ntest \"Turn i of\" \"Turn it off\"\nallows \"turn it off\"\nallows \"Turn it off\"\nallows \"run by one\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/Unless.weir",
    "content": "expr main (unless if)\n\nlet message \"`Unless if` is not idiomatic English. `Unless`, `except if`, and `except when` express a condition that is true in all cases except one.\"\nlet description \"Corrects `unless if`.\"\nlet kind \"Usage\"\nlet becomes [\"unless\", \"except if\", \"except when\"]\n\ntest \"Simplex does not interpret the following invite link as an invite link unless if it has https:// in front of it.\" \"Simplex does not interpret the following invite link as an invite link unless it has https:// in front of it.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/VeryKnown.weir",
    "content": "expr main (very known)\n\nlet message \"Replace `very known` with the idiomatic phrasing that mentions recognition explicitly.\"\nlet description \"`very well-known` (or `well-known`) is the standard way to describe something widely recognized, so we flag the uncommon `very known` word pair.\"\nlet kind \"Usage\"\nlet becomes [\"very well-known\", \"well-known\"]\nlet strategy \"MatchCase\"\n\ntest \"He is a very known actor.\" \"He is a very well-known actor.\"\ntest \"Her work is very known among the local schools.\" \"Her work is very well-known among the local schools.\"\ntest \"Our very known product draws new users every month.\" \"Our very well-known product draws new users every month.\"\ntest \"The very known landmark draws visitors all year.\" \"The very well-known landmark draws visitors all year.\"\ntest \"Very known memes cycle through the forum quickly.\" \"Very well-known memes cycle through the forum quickly.\"\ntest \"I saw a very known engineer presenting at yesterday's event.\" \"I saw a very well-known engineer presenting at yesterday's event.\"\ntest \"This very known rumor sparked debate on social feeds.\" \"This very well-known rumor sparked debate on social feeds.\"\ntest \"They keep very known influencers on the payroll.\" \"They keep very well-known influencers on the payroll.\"\ntest \"Is that a very known bug in this app?\" \"Is that a very well-known bug in this app?\"\ntest \"It's a very known trick in debugging.\" \"It's a very well-known trick in debugging.\"\ntest \"Very known incidents are still in the news.\" \"Very well-known incidents are still in the news.\"\ntest \"A very known glitch pops up when we run the suite.\" \"A very well-known glitch pops up when we run the suite.\"\ntest \"The very known singer clicked with fans again.\" \"The very well-known singer clicked with fans again.\"\ntest \"We handle very known customers personally.\" \"We handle very well-known customers personally.\"\ntest \"Any very known shortcut is documented.\" \"Any very well-known shortcut is documented.\"\n\nallows \"It is known very well, so we can move on.\"\nallows \"The very knowledge that matters is intangible.\"\nallows \"The very-known cover art is a nice throwback.\"\nallows \"The team is very knowledgeable about the API.\"\nallows \"They are extremely known for their tone.\"\nallows \"Known very well, the trick still surprises people.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/VeryLess.weir",
    "content": "expr main (very less)\n\nlet message \"English doesn't use `very` with `less`.\"\nlet description \"Corrects `very less`.\"\nlet kind \"Grammar\"\nlet becomes [\"much less\", \"far less\", \"a lot less\"]\n\ntest \"here is a simple way to do it with very less coding ... ;)\" \"here is a simple way to do it with much less coding ... ;)\"\ntest \"algorithm for processing large datasets with very less pre-configuration\" \"algorithm for processing large datasets with far less pre-configuration\"\ntest \"Also the gpu memory usage is very less.\" \"Also the gpu memory usage is a lot less.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/WantBe.weir",
    "content": "expr main (want be)\n\nlet message \"Did you mean `won't be` or `want to be`?\"\nlet description \"Detects incorrect usage of `want be` and suggests `won't be` or `want to be` based on context.\"\nlet becomes [\"won't be\", \"want to be\"]\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/WaveFunction.weir",
    "content": "expr main (wavefunction)\n\nlet message \"Did you mean `wave function`?\"\nlet description \"Identifies the mistake of merging `wave` and `function` into one word. In quantum mechanics, a `wave function` (written as two words) describes the mathematical function that represents the quantum state of a particle or system. Correct usage is crucial for clear and accurate scientific communication.\"\nlet kind \"WordChoice\"\nlet becomes \"wave function\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/WellBeing.weir",
    "content": "expr main (wellbeing)\n\nlet message \"Use the hyphenated form for `well-being`.\"\nlet description \"Ensures `well-being` is correctly hyphenated.\"\nlet kind \"Punctuation\"\nlet becomes \"well-being\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/WellKept.weir",
    "content": "expr main [(highly-kept), (highly kept)]\n\nlet message \"`Highly-kept` is not standard. To describe secrets, `well-kept` is the most used phrase.\"\nlet description \"Flags `highly-kept` and recommends `well-kept` as an alternative.\"\nlet kind \"Usage\"\nlet becomes \"well-kept\"\n\ntest \"I assure you that frequency/angle dependence is a highly kept secret.\" \"I assure you that frequency/angle dependence is a well-kept secret.\"\ntest \"Well, Kushina's giving birth was already a highly-kept secret so it makes sense to operate with only the completely necessary personnel.\" \"Well, Kushina's giving birth was already a well-kept secret so it makes sense to operate with only the completely necessary personnel.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/WhetYourAppetite.weir",
    "content": "expr main (wet your appetite)\n\nlet message \"Use the correct phrase for stimulating desire.\"\nlet description \"Ensures `whet your appetite` is used correctly, distinguishing it from the incorrect `wet` variation.\"\nlet kind \"Eggcorn\"\nlet becomes \"whet your appetite\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/WillContain.weir",
    "content": "expr main (will contains)\n\nlet message \"Did you mean `will contain`?\"\nlet description \"Incorrect verb form: `will` should be followed by the base form `contain`.\"\nlet kind \"Agreement\"\nlet becomes \"will contain\"\n\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/WithoutOut.weir",
    "content": "expr main without out\n\nlet message \"Drop the duplicated `out` when it follows `without`.\"\nlet description \"When writers accidentally type `without out`, Harper can collapse the two words back into the single preposition.\"\nlet kind \"Typo\"\nlet becomes \"without\"\nlet strategy \"MatchCase\"\n\ntest \"Without out a doubt, the team delivered.\" \"Without a doubt, the team delivered.\"\ntest \"She ran without out hesitation this morning.\" \"She ran without hesitation this morning.\"\ntest \"Without out fail, the backup completed.\" \"Without fail, the backup completed.\"\ntest \"We proceed without out complaint from clients.\" \"We proceed without complaint from clients.\"\ntest \"Without out this addition, the plan collapses.\" \"Without this addition, the plan collapses.\"\ntest \"Without out any warning, the lights went out.\" \"Without any warning, the lights went out.\"\ntest \"Without OUT, the process would stop.\" \"Without, the process would stop.\"\ntest \"WITHOUT OUT luck, the players backed down.\" \"WITHOUT luck, the players backed down.\"\ntest \"without out all hope, we succeeded.\" \"without all hope, we succeeded.\"\ntest \"Last week we moved without out delay.\" \"Last week we moved without delay.\"\nallows \"Without outstanding debts we can pivot.\"\nallows \"There is a without output fallback.\"\nallows \"The absence of outbuildings was puzzling.\"\nallows \"Without doubt, the plan succeeded.\"\nallows \"Mind the output to ensure correctness.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/WorstCaseScenario.weir",
    "content": "expr main [(worst case scenario), (worst-case-scenario)]\n\nlet message \"Hyphenate `worst-case`.\"\nlet description \"Corrects `worst-case scenario` when the hyphen is missing or `worse` is used instead of `worst`.\"\nlet kind \"Punctuation\"\nlet becomes \"worst-case scenario\"\n\ntest \"The worst case scenario can be calculated without looking at streams of data.\" \"The worst-case scenario can be calculated without looking at streams of data.\"\ntest \"CAPD worst-case-scenario cloud simulator for naughty clouds.\" \"CAPD worst-case scenario cloud simulator for naughty clouds.\"\nallows \"Those are now on hold for month.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/WroughtIron.weir",
    "content": "expr main [(rod iron), (rot iron), (rod-iron), (rot-iron)]\n\nlet message \"Prefer the standard term `wrought iron`.\"\nlet description \"`Wrought iron` is low-carbon, malleable iron used for decorative work; variants like `rod iron` or `rot iron` are phonetic misspellings that may confuse readers.\"\nlet kind \"Eggcorn\"\nlet becomes \"wrought iron\"\n\ntest \"The gate was crafted from rod iron.\" \"The gate was crafted from wrought iron.\"\ntest \"The artisan works in rot iron.\" \"The artisan works in wrought iron.\"\nallows \"She specialized in wrought iron artwork.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/YeaToYeah.weir",
    "content": "expr main (yea)\n\nlet message \"If you mean the informal word for `yes` and not the biblical or legalistic `yea`, the standard spelling is `yeah`.\"\nlet description \"Corrects `yea` to `yeah`.\"\nlet kind \"Spelling\"\nlet becomes \"yeah\"\n\ntest \"The very core basics are essentially the same because yea - it's just a web browser.\" \"The very core basics are essentially the same because yeah - it's just a web browser.\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/YehToYeah.weir",
    "content": "expr main (yeh)\n\nlet message \"If you mean the informal word for `yes`, the standard spelling is `yeah`.\"\nlet description \"Corrects `yeh` to `yeah`.\"\nlet kind \"Spelling\"\nlet becomes \"yeah\"\n\ntest \"But yeh, it seems I'm the only one that feels that way\" \"But yeah, it seems I'm the only one that feels that way\""
  },
  {
    "path": "harper-core/src/linting/weir_rules/YourPredicateAdjective.weir",
    "content": "expr main [<([your, yr, ur, ya] [cool, serious, ready, proud, patient, committed, calm, brave, excited, kind, delightful, awake, dedicated, loyal, (really patient), (very patient), (totally committed), (surprisingly calm), (exceptionally brave), (so excited), (very very kind), (absolutely delightful), (barely awake), (really dedicated)]), [your, yr, ur, ya]>]\n\nlet message \"Use the contraction `you're` (you are) before predicate adjectives instead of the possessive `your` or its variants.\"\nlet description \"Catches cases where a predicate adjective follows `your`, `yr`, `ur`, or `ya` and suggests the proper contraction so the sentence states how someone is feeling or behaving.\"\nlet kind \"Grammar\"\nlet becomes \"you're\"\nlet strategy \"MatchCase\"\n\ntest \"Your cool.\" \"You're cool.\"\ntest \"your serious?\" \"you're serious?\"\ntest \"UR ready?\" \"YOU'RE ready?\"\ntest \"ya proud?\" \"you're proud?\"\ntest \"Your really patient.\" \"You're really patient.\"\ntest \"Your very patient.\" \"You're very patient.\"\ntest \"your totally committed?\" \"you're totally committed?\"\ntest \"UR surprisingly calm.\" \"YOU'RE surprisingly calm.\"\ntest \"Ya exceptionally brave?\" \"You're exceptionally brave?\"\ntest \"Your so excited?\" \"You're so excited?\"\ntest \"your very very kind.\" \"you're very very kind.\"\ntest \"YA absolutely delightful.\" \"YOU'RE absolutely delightful.\"\ntest \"ur barely awake.\" \"you're barely awake.\"\ntest \"Ya really dedicated.\" \"You're really dedicated.\"\ntest \"yr loyal?\" \"you're loyal?\"\n\ntest \"Your favorite color is blue.\" \"Your favorite color is blue.\"\ntest \"Your excitement is contagious.\" \"Your excitement is contagious.\"\ntest \"UR car is parked outside.\" \"UR car is parked outside.\"\ntest \"ya favorite flavor is mint.\" \"ya favorite flavor is mint.\"\ntest \"Your very good idea is interesting.\" \"Your very good idea is interesting.\"\ntest \"Ur new plan looks solid.\" \"Ur new plan looks solid.\"\n"
  },
  {
    "path": "harper-core/src/linting/weir_rules/mod.rs",
    "content": "use super::LintGroup;\nuse crate::weir::WeirLinter;\n\nmacro_rules! generate_boilerplate {\n    ([$($name:ident),+ $(,)?]) => {\n        pub fn lint_group() -> LintGroup {\n            let mut group = LintGroup::default();\n\n                {\n                    $(\n                        group.add_chunk_expr_linter(stringify!($name), WeirLinter::new(include_str!(concat!(env!(\"WEIR_RULE_DIR\"), \"/\", stringify!($name), \".weir\"))).unwrap());\n                    )+\n                }\n\n            group.set_all_rules_to(Some(true));\n\n            group\n        }\n\n        #[cfg(test)]\n        mod tests {\n            use paste::paste;\n            use crate::weir::tests::assert_passes_all;\n            use crate::weir::WeirLinter;\n\n            $(\n                paste! {\n                    #[test]\n                    fn [<run_tests_for_ $name:snake>](){\n                        let mut linter = WeirLinter::new(include_str!(concat!(env!(\"WEIR_RULE_DIR\"), \"/\", stringify!($name), \".weir\"))).unwrap();\n                        assert_passes_all(&mut linter);\n                    }\n                }\n            )+\n        }\n    };\n}\n\ninclude!(env!(\"WEIR_RULE_LIST\"));\n"
  },
  {
    "path": "harper-core/src/linting/well_educated.rs",
    "content": "use crate::{\n    Token, TokenStringExt,\n    expr::{Expr, SequenceExpr},\n    patterns::{WhitespacePattern, WordSet},\n};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct WellEducated {\n    expr: SequenceExpr,\n}\n\nimpl Default for WellEducated {\n    fn default() -> Self {\n        let combined = WordSet::new(&[\"good-educated\"]);\n\n        let separated = SequenceExpr::default()\n            .t_aco(\"good\")\n            .then_optional(WhitespacePattern)\n            .then_hyphen()\n            .then_optional(WhitespacePattern)\n            .t_aco(\"educated\");\n\n        let expr = SequenceExpr::any_of(vec![Box::new(combined), Box::new(separated)]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for WellEducated {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let original = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                \"well-educated\".chars().collect(),\n                original,\n            )],\n            message: \"Prefer `well-educated` for this compound.\".into(),\n            priority: 35,\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"Replaces `good-educated` with the accepted compound `well-educated`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::WellEducated;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn corrects_simple_sentence() {\n        assert_suggestion_result(\n            \"She is good-educated.\",\n            WellEducated::default(),\n            \"She is well-educated.\",\n        );\n    }\n\n    #[test]\n    fn corrects_in_clause() {\n        assert_suggestion_result(\n            \"The panel found him good-educated and articulate.\",\n            WellEducated::default(),\n            \"The panel found him well-educated and articulate.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_modifier() {\n        assert_suggestion_result(\n            \"They considered her very good-educated for her age.\",\n            WellEducated::default(),\n            \"They considered her very well-educated for her age.\",\n        );\n    }\n\n    #[test]\n    fn corrects_all_caps() {\n        assert_suggestion_result(\n            \"Their mentors are GOOD-EDUCATED leaders.\",\n            WellEducated::default(),\n            \"Their mentors are WELL-EDUCATED leaders.\",\n        );\n    }\n\n    #[test]\n    fn corrects_title_case() {\n        assert_suggestion_result(\n            \"The report lauded Good-Educated Candidates.\",\n            WellEducated::default(),\n            \"The report lauded Well-Educated Candidates.\",\n        );\n    }\n\n    #[test]\n    fn corrects_with_quotes() {\n        assert_suggestion_result(\n            \"He called them \\\"good-educated\\\" professionals.\",\n            WellEducated::default(),\n            \"He called them \\\"well-educated\\\" professionals.\",\n        );\n    }\n\n    #[test]\n    fn corrects_split_tokens() {\n        assert_suggestion_result(\n            \"Their children are good - educated despite the odds.\",\n            WellEducated::default(),\n            \"Their children are well-educated despite the odds.\",\n        );\n    }\n\n    #[test]\n    fn allows_well_educated() {\n        assert_lint_count(\"She is well-educated.\", WellEducated::default(), 0);\n    }\n\n    #[test]\n    fn allows_good_education_phrase() {\n        assert_lint_count(\n            \"They received a good education.\",\n            WellEducated::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn allows_good_to_be_educated() {\n        assert_lint_count(\n            \"It is good to be educated about local history.\",\n            WellEducated::default(),\n            0,\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/were_where.rs",
    "content": "use harper_brill::UPOS;\n\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    CharStringExt, Token, TokenKind,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::UPOSSet,\n};\n\npub struct WereWhere {\n    expr: SequenceExpr,\n}\n\nimpl Default for WereWhere {\n    fn default() -> Self {\n        // === where → were ===\n\n        // \"they/we\" are unambiguous plural subject pronouns — \"where\" directly after\n        // them is almost certainly a typo for \"were\".\n        // e.g. \"they where going\" → \"they were going\"\n        let unambiguous_pronoun_where = SequenceExpr::word_set(&[\"they\", \"we\"])\n            .t_ws()\n            .t_aco(\"where\");\n\n        // \"you where\" alone is ambiguous (\"I'll show you where to go\"), so only flag\n        // it when followed by a verb, auxiliary, or adjective — confirming a verb slot.\n        // e.g. \"you where going\" → \"you were going\"\n        let you_where_verb = SequenceExpr::aco(\"you\")\n            .t_ws()\n            .t_aco(\"where\")\n            .t_ws()\n            .then(UPOSSet::new(&[UPOS::VERB, UPOS::AUX, UPOS::ADJ]));\n\n        // === were → where ===\n\n        // A verb of cognition or motion followed directly by \"were\" and then a\n        // pronoun, determiner, or proper noun indicates the start of a relative or\n        // indirect question — where \"were\" should be \"where\".\n        // e.g. \"I know were they went\"  → \"I know where they went\"\n        // e.g. \"I found were the book was\" → \"I found where the book was\"\n        //\n        // \"they were going\" does NOT match: \"they\" (PRON) precedes \"were\", not VERB.\n        // \"I think they were going\" does NOT match: \"they\" sits between \"think\" and \"were\".\n        let verb_were_clause =\n            SequenceExpr::with(|tok: &Token, _: &[char]| tok.kind.is_upos(UPOS::VERB))\n                .t_ws()\n                .t_aco(\"were\")\n                .t_ws()\n                .then(UPOSSet::new(&[UPOS::PRON, UPOS::DET, UPOS::PROPN]));\n\n        Self {\n            expr: SequenceExpr::any_of(vec![\n                Box::new(unambiguous_pronoun_where),\n                Box::new(you_where_verb),\n                Box::new(verb_were_clause),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for WereWhere {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        const WHERE: &[char] = &['w', 'h', 'e', 'r', 'e'];\n        const WERE: &[char] = &['w', 'e', 'r', 'e'];\n\n        // Check if \"where\" appears in the match (where → were case)\n        let where_tok = toks.iter().find(|tok| {\n            matches!(tok.kind, TokenKind::Word(_))\n                && tok.span.get_content(src).eq_ignore_ascii_case_chars(WHERE)\n        });\n\n        // Check if \"were\" appears in the match (were → where case)\n        let were_tok = toks.iter().find(|tok| {\n            matches!(tok.kind, TokenKind::Word(_))\n                && tok.span.get_content(src).eq_ignore_ascii_case_chars(WERE)\n        });\n\n        if let Some(tok) = where_tok {\n            Some(Lint {\n                span: tok.span,\n                lint_kind: LintKind::Typo,\n                suggestions: vec![Suggestion::replace_with_match_case_str(\n                    \"were\",\n                    tok.span.get_content(src),\n                )],\n                message: \"It looks like this is a typo, did you mean `were`?\".to_string(),\n                ..Default::default()\n            })\n        } else {\n            were_tok.map(|tok| Lint {\n                span: tok.span,\n                lint_kind: LintKind::Typo,\n                suggestions: vec![Suggestion::replace_with_match_case_str(\n                    \"where\",\n                    tok.span.get_content(src),\n                )],\n                message: \"It looks like this is a typo, did you mean `where`?\".to_string(),\n                ..Default::default()\n            })\n        }\n    }\n\n    fn description(&self) -> &'static str {\n        \"Detects mixing up `were` and `where`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::WereWhere;\n    use crate::linting::tests::{assert_no_lints, assert_suggestion_result};\n\n    // ── where → were: unambiguous pronouns ──────────────────────────────────\n\n    #[test]\n    fn fix_they_where() {\n        assert_suggestion_result(\n            \"They where going to the store.\",\n            WereWhere::default(),\n            \"They were going to the store.\",\n        );\n    }\n\n    #[test]\n    fn fix_we_where() {\n        assert_suggestion_result(\n            \"We where right about that.\",\n            WereWhere::default(),\n            \"We were right about that.\",\n        );\n    }\n\n    #[test]\n    fn fix_they_where_happy() {\n        assert_suggestion_result(\n            \"They where happy with the result.\",\n            WereWhere::default(),\n            \"They were happy with the result.\",\n        );\n    }\n\n    // ── where → were: \"you where\" with a following verb ─────────────────────\n\n    #[test]\n    fn fix_you_where_going() {\n        assert_suggestion_result(\n            \"you where going in the right direction.\",\n            WereWhere::default(),\n            \"you were going in the right direction.\",\n        );\n    }\n\n    #[test]\n    fn fix_you_where_right() {\n        assert_suggestion_result(\n            \"you where right about that.\",\n            WereWhere::default(),\n            \"you were right about that.\",\n        );\n    }\n\n    // ── were → where: verb + were + pronoun/determiner ──────────────────────\n\n    #[test]\n    fn fix_know_were_they() {\n        assert_suggestion_result(\n            \"Do you know were they went?\",\n            WereWhere::default(),\n            \"Do you know where they went?\",\n        );\n    }\n\n    #[test]\n    fn fix_forgot_were_i() {\n        assert_suggestion_result(\n            \"I forgot were I put my keys.\",\n            WereWhere::default(),\n            \"I forgot where I put my keys.\",\n        );\n    }\n\n    #[test]\n    fn fix_found_were_the() {\n        assert_suggestion_result(\n            \"I found were the book was.\",\n            WereWhere::default(),\n            \"I found where the book was.\",\n        );\n    }\n\n    #[test]\n    fn fix_go_were_they() {\n        assert_suggestion_result(\n            \"Go were they tell you.\",\n            WereWhere::default(),\n            \"Go where they tell you.\",\n        );\n    }\n\n    // ── where → were: more they/we variants ─────────────────────────────────\n\n    #[test]\n    fn fix_we_where_almost_done() {\n        // No following-word check needed for \"we/they\" — the pair alone is enough\n        assert_suggestion_result(\n            \"We where almost done with the task.\",\n            WereWhere::default(),\n            \"We were almost done with the task.\",\n        );\n    }\n\n    #[test]\n    fn fix_they_where_able() {\n        assert_suggestion_result(\n            \"They where able to fix the issue in time.\",\n            WereWhere::default(),\n            \"They were able to fix the issue in time.\",\n        );\n    }\n\n    #[test]\n    fn fix_we_where_told() {\n        assert_suggestion_result(\n            \"We where told about the change last week.\",\n            WereWhere::default(),\n            \"We were told about the change last week.\",\n        );\n    }\n\n    #[test]\n    fn fix_they_where_supposed() {\n        assert_suggestion_result(\n            \"They where supposed to be here by now.\",\n            WereWhere::default(),\n            \"They were supposed to be here by now.\",\n        );\n    }\n\n    // ── where → were: more \"you where\" variants ──────────────────────────────\n\n    #[test]\n    fn fix_you_where_supposed() {\n        // \"supposed\" is ADJ — confirms verb slot\n        assert_suggestion_result(\n            \"You where supposed to call me.\",\n            WereWhere::default(),\n            \"You were supposed to call me.\",\n        );\n    }\n\n    #[test]\n    fn fix_you_where_asked() {\n        // \"asked\" past participle used as VERB\n        assert_suggestion_result(\n            \"you where asked to leave the room.\",\n            WereWhere::default(),\n            \"you were asked to leave the room.\",\n        );\n    }\n\n    // ── were → where: more verbs and pronouns ────────────────────────────────\n\n    #[test]\n    fn fix_remember_were_i() {\n        assert_suggestion_result(\n            \"Do you remember were I left the keys?\",\n            WereWhere::default(),\n            \"Do you remember where I left the keys?\",\n        );\n    }\n\n    #[test]\n    fn fix_check_were_the() {\n        assert_suggestion_result(\n            \"Check were the error occurred.\",\n            WereWhere::default(),\n            \"Check where the error occurred.\",\n        );\n    }\n\n    #[test]\n    fn fix_asked_were_he() {\n        assert_suggestion_result(\n            \"She asked were he lived.\",\n            WereWhere::default(),\n            \"She asked where he lived.\",\n        );\n    }\n\n    #[test]\n    fn fix_know_were_the_bug() {\n        assert_suggestion_result(\n            \"I know were the bug is.\",\n            WereWhere::default(),\n            \"I know where the bug is.\",\n        );\n    }\n\n    #[test]\n    fn fix_find_were_it() {\n        assert_suggestion_result(\n            \"Find were it crashed.\",\n            WereWhere::default(),\n            \"Find where it crashed.\",\n        );\n    }\n\n    // ── no false positives ───────────────────────────────────────────────────\n\n    #[test]\n    fn no_flag_where_they_are() {\n        assert_no_lints(\"Do you know where they are going?\", WereWhere::default());\n    }\n\n    #[test]\n    fn no_flag_they_were_going() {\n        assert_no_lints(\"They were going to the store.\", WereWhere::default());\n    }\n\n    #[test]\n    fn no_flag_we_were_right() {\n        assert_no_lints(\"We were right about that.\", WereWhere::default());\n    }\n\n    #[test]\n    fn no_flag_show_you_where() {\n        // \"you\" before \"where\" is legitimate — followed by \"to\" (PART), not a verb\n        assert_no_lints(\"I'll show you where to go.\", WereWhere::default());\n    }\n\n    #[test]\n    fn no_flag_tell_you_where_the() {\n        // \"you where\" followed by DET — not flagged (DET is not VERB/AUX/ADJ)\n        assert_no_lints(\"I'll tell you where the exit is.\", WereWhere::default());\n    }\n\n    #[test]\n    fn no_flag_they_were_wrong() {\n        // \"they\" (PRON) precedes \"were\", so VERB + \"were\" pattern does not fire\n        assert_no_lints(\"I think they were wrong.\", WereWhere::default());\n    }\n\n    #[test]\n    fn no_flag_confirmed_they_were() {\n        // \"they\" sits between \"confirmed\" and \"were\" — not adjacent, no match\n        assert_no_lints(\"I confirmed they were correct.\", WereWhere::default());\n    }\n\n    #[test]\n    fn no_flag_found_they_were() {\n        assert_no_lints(\"He found they were missing.\", WereWhere::default());\n    }\n\n    #[test]\n    fn no_flag_where_were_they() {\n        // \"Where\" is an adverb or subordinating conjunction here, not VERB — the were→where pattern does not fire\n        assert_no_lints(\"Where were they going?\", WereWhere::default());\n    }\n\n    #[test]\n    fn no_flag_showed_me_where() {\n        // Object pronoun \"me\" sits between \"showed\" and \"where\" — no direct adjacency\n        assert_no_lints(\"He showed me where the exit was.\", WereWhere::default());\n    }\n\n    // ── known limitations (documented but not yet handled) ───────────────────\n\n    #[test]\n    #[ignore = \"limitation: 'you where' followed by DET is not flagged; would need DET in the following-word set\"]\n    fn fix_you_where_the_only_one() {\n        assert_suggestion_result(\n            \"you where the only one there.\",\n            WereWhere::default(),\n            \"you were the only one there.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"limitation: sentence-initial 'Where' as typo for 'Were' is not handled\"]\n    fn fix_where_they_going_sentence_start() {\n        assert_suggestion_result(\n            \"Where they going to the party?\",\n            WereWhere::default(),\n            \"Were they going to the party?\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"limitation: indirect object between verb and 'were' is not detected\"]\n    fn fix_showed_me_were() {\n        assert_suggestion_result(\n            \"He showed me were the exit was.\",\n            WereWhere::default(),\n            \"He showed me where the exit was.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/whereas.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt};\n\nuse super::{ExprLinter, Lint, LintKind, Suggestion};\nuse crate::linting::expr_linter::Chunk;\n\npub struct Whereas {\n    expr: SequenceExpr,\n}\n\nimpl Default for Whereas {\n    fn default() -> Self {\n        let pattern = SequenceExpr::default()\n            .t_aco(\"where\")\n            .then_whitespace()\n            .t_aco(\"as\");\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for Whereas {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let orig_chars = span.get_content(source);\n\n        Some(Lint {\n            span,\n            lint_kind: LintKind::WordChoice,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                vec!['w', 'h', 'e', 'r', 'e', 'a', 's'],\n                orig_chars,\n            )],\n            message: \"`Whereas` is commonly mistaken for `where as`.\".to_owned(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &'static str {\n        \"The Whereas rule is designed to identify instances where the phrase `where as` is used in text and suggests replacing it with the single word `whereas`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::Whereas;\n\n    #[test]\n    fn where_as() {\n        assert_suggestion_result(\n            \"Dogs love playing fetch, where as cats are more independent creatures.\",\n            Whereas::default(),\n            \"Dogs love playing fetch, whereas cats are more independent creatures.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/whom_subject_of_verb.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    patterns::ModalVerb,\n};\n\npub struct WhomSubjectOfVerb {\n    expr: SequenceExpr,\n}\n\nimpl Default for WhomSubjectOfVerb {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"whom\", \"whomever\", \"whomsoever\"])\n                .t_ws()\n                .then_any_of(vec![\n                    Box::new(SequenceExpr::default().then_kind_where(|k| {\n                        k.is_verb_third_person_singular_present_form()\n                            || k.is_verb_simple_past_form()\n                    })),\n                    Box::new(ModalVerb::with_common_errors()),\n                ]),\n        }\n    }\n}\n\nimpl ExprLinter for WhomSubjectOfVerb {\n    type Unit = Chunk;\n\n    fn description(&self) -> &str {\n        \"Detects whom and its variants used as the subject of a verb instead of who.\"\n    }\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint_with_context(\n        &self,\n        toks: &[Token],\n        src: &[char],\n        ctx: Option<(&[Token], &[Token])>,\n    ) -> Option<Lint> {\n        if let Some((before, _)) = ctx\n            && let [.., word, ws1, prep, ws2] = before\n            && ws2.kind.is_whitespace()\n            && prep\n                .span\n                .get_content(src)\n                .eq_ignore_ascii_case_chars(&['o', 'f'])\n            && ws1.kind.is_whitespace()\n            && word.span.get_content(src).eq_ignore_ascii_case_str(\"many\")\n        {\n            return None;\n        }\n\n        let whom_span = toks.first()?.span;\n        let whom_chars = whom_span.get_content(src);\n\n        let who_vec = [&whom_chars[..3], &whom_chars[4..]].concat();\n\n        Some(Lint {\n            span: whom_span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![Suggestion::replace_with_match_case(who_vec, whom_chars)],\n            message: \"“Whom” is used for the object of a verb and “who” is used for the subject of a verb.\".to_owned(),\n            ..Default::default()\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::WhomSubjectOfVerb;\n    use crate::linting::tests::{assert_lint_count, assert_no_lints, assert_suggestion_result};\n\n    #[test]\n    fn flag_whom_has() {\n        assert_suggestion_result(\n            \"there is no course to whom has opened the most PRs\",\n            WhomSubjectOfVerb::default(),\n            \"there is no course to who has opened the most PRs\",\n        );\n    }\n\n    #[test]\n    fn flag_whomever_wrote() {\n        assert_suggestion_result(\n            \"To whomever wrote this course, I truly am not trying to be a jerk or ungrateful\",\n            WhomSubjectOfVerb::default(),\n            \"To whoever wrote this course, I truly am not trying to be a jerk or ungrateful\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"wrong kind of error\"]\n    fn dont_flag_wrong_kind_of_error() {\n        assert_lint_count(\n            \"self service ticket view is not showing to whom is the ticket assigned to\",\n            //   \"self service ticket view is not showing to whom this ticket is assigned\"\n            //   \"self service ticket view is not showing whom this ticket is assigned to\"\n            WhomSubjectOfVerb::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn dont_flag_whom_can() {\n        assert_suggestion_result(\n            \"Whom can of course build a helper, but that is only a workaround.\",\n            WhomSubjectOfVerb::default(),\n            \"Who can of course build a helper, but that is only a workaround.\",\n        );\n    }\n\n    #[test]\n    fn flag_whomever_is() {\n        assert_suggestion_result(\n            \"Whomever is making those harassing phone calls to me after I post something on Github - consider yourself put on notice.\",\n            WhomSubjectOfVerb::default(),\n            \"Whoever is making those harassing phone calls to me after I post something on Github - consider yourself put on notice.\",\n        );\n    }\n\n    #[test]\n    fn flag_whom_is() {\n        assert_suggestion_result(\n            \"I thought it might be good idea to address the topic of whom is \\\"allowed\\\" to merge.\",\n            WhomSubjectOfVerb::default(),\n            \"I thought it might be good idea to address the topic of who is \\\"allowed\\\" to merge.\",\n        );\n    }\n\n    #[test]\n    fn flag_whomsoever_will() {\n        assert_suggestion_result(\n            \"This is a quick record of my discoveries and solution for whomsoever will be fixing the issue.\",\n            WhomSubjectOfVerb::default(),\n            \"This is a quick record of my discoveries and solution for whosoever will be fixing the issue.\",\n        );\n    }\n\n    #[test]\n    fn dont_flag_many_of_whom() {\n        assert_no_lints(\n            \"it's far from straightforward for new users, many of whom will likely have a lot to learn\",\n            WhomSubjectOfVerb::default(),\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/widely_accepted.rs",
    "content": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n};\n\npub struct WidelyAccepted {\n    expr: SequenceExpr,\n}\n\nimpl Default for WidelyAccepted {\n    fn default() -> Self {\n        let expr = SequenceExpr::default()\n            .t_aco(\"wide\")\n            .then_whitespace()\n            .then_word_set(&[\"accepted\", \"acceptable\", \"used\"]);\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for WidelyAccepted {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        // We only need to replace the `wide` token with `widely`.\n        let wide_token = matched_tokens.first()?;\n        let wide_chars = wide_token.span.get_content(source);\n\n        Some(Lint {\n            span: wide_token.span,\n            lint_kind: LintKind::Miscellaneous,\n            message: \"Use the adverb `widely` in this context. For example, `widely accepted` or `widely used` is standard usage.\"\n                .to_owned(),\n            suggestions: vec![Suggestion::replace_with_match_case_str(\"widely\", wide_chars)],\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Flags `wide accepted`, `wide acceptable`, or `wide used` and recommends switching `wide` to the adverb `widely`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::WidelyAccepted;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn wide_accepted_lowercase() {\n        assert_suggestion_result(\n            \"It is wide accepted that exercise improves health.\",\n            WidelyAccepted::default(),\n            \"It is widely accepted that exercise improves health.\",\n        );\n    }\n\n    #[test]\n    fn wide_acceptable_mixed_case() {\n        assert_suggestion_result(\n            \"Wide acceptable standards are used in the design.\",\n            WidelyAccepted::default(),\n            \"Widely acceptable standards are used in the design.\",\n        );\n    }\n\n    #[test]\n    fn widely_already_correct() {\n        assert_lint_count(\n            \"It is widely accepted that sunlight is beneficial in moderation.\",\n            WidelyAccepted::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn no_false_positive() {\n        assert_lint_count(\n            \"The house had wide open windows during the renovation.\",\n            WidelyAccepted::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn wide_accepted_in_long_text() {\n        assert_suggestion_result(\n            \"This is an example paragraph, and it is wide accepted that these changes will improve performance. In fact, widely used frameworks have already adopted them.\",\n            WidelyAccepted::default(),\n            \"This is an example paragraph, and it is widely accepted that these changes will improve performance. In fact, widely used frameworks have already adopted them.\",\n        );\n    }\n\n    #[test]\n    fn wide_twice_in_one_sentence() {\n        assert_suggestion_result(\n            \"It is wide accepted and wide used by many professionals.\",\n            WidelyAccepted::default(),\n            \"It is widely accepted and widely used by many professionals.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/win_prize.rs",
    "content": "use crate::expr::{Expr, OwnedExprExt};\nuse crate::expr::{LongestMatchOf, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n    Lrc, Token,\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    patterns::WordSet,\n};\n\npub struct WinPrize {\n    expr: LongestMatchOf,\n}\n\nimpl Default for WinPrize {\n    fn default() -> Self {\n        let verbs = Lrc::new(WordSet::new(&[\"win\", \"wins\", \"won\", \"winning\"]));\n        let miss = Lrc::new(WordSet::new(&[\"price\", \"prices\", \"prise\", \"prises\"]));\n\n        let pattern = SequenceExpr::with(verbs.clone())\n            .then_whitespace()\n            .then_determiner()\n            .then_whitespace()\n            .then(miss.clone())\n            .or_longest(SequenceExpr::with(verbs).then_whitespace().then(miss));\n\n        Self { expr: pattern }\n    }\n}\n\nimpl ExprLinter for WinPrize {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let candidate = toks.last()?;\n        let raw = candidate.span.get_content_string(src).to_lowercase();\n        let repl = match raw.as_str() {\n            \"price\" | \"prise\" => \"prize\",\n            \"prices\" | \"prises\" => \"prizes\",\n            _ => return None,\n        };\n\n        Some(Lint {\n            span: candidate.span,\n            lint_kind: LintKind::Miscellaneous,\n            suggestions: vec![Suggestion::ReplaceWith(repl.chars().collect())],\n            message: format!(\"Perhaps you meant `{repl}`, the word for an award.\"),\n            priority: 50,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Catches the mix-up between `price`/`prise` and `prize` after the verb `win`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::WinPrize;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn fix_price_singular() {\n        assert_suggestion_result(\n            \"Lena won a price in the coding marathon.\",\n            WinPrize::default(),\n            \"Lena won a prize in the coding marathon.\",\n        );\n    }\n\n    #[test]\n    fn fix_price_plural() {\n        assert_suggestion_result(\n            \"Our team won the prices announced yesterday.\",\n            WinPrize::default(),\n            \"Our team won the prizes announced yesterday.\",\n        );\n    }\n\n    #[test]\n    fn fix_prise_singular() {\n        assert_suggestion_result(\n            \"He finally won the prise he'd dreamed of.\",\n            WinPrize::default(),\n            \"He finally won the prize he'd dreamed of.\",\n        );\n    }\n\n    #[test]\n    fn fix_prise_plural() {\n        assert_suggestion_result(\n            \"The inventors won several prises at the expo.\",\n            WinPrize::default(),\n            \"The inventors won several prizes at the expo.\",\n        );\n    }\n\n    #[test]\n    fn ignore_correct_prize() {\n        assert_lint_count(\n            \"Miranda won the grand prize last year.\",\n            WinPrize::default(),\n            0,\n        );\n    }\n\n    #[test]\n    fn fix_no_det() {\n        assert_suggestion_result(\"I won prices!\", WinPrize::default(), \"I won prizes!\");\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/wish_could.rs",
    "content": "use super::{Lint, LintKind, Suggestion};\nuse crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::{ExprLinter, expr_linter::Chunk};\n\npub struct WishCould {\n    expr: SequenceExpr,\n}\n\nimpl Default for WishCould {\n    fn default() -> Self {\n        Self {\n            expr: SequenceExpr::word_set(&[\"wish\", \"wished\", \"wishes\", \"wishing\"])\n                .t_ws()\n                .then_any_of(vec![\n                    Box::new(SequenceExpr::default().then_subject_pronoun()),\n                    Box::new(SequenceExpr::word_set(&[\n                        // Elective existential indefinite pronouns\n                        \"anybody\",\n                        \"anyone\",\n                        // Universal indefinite pronouns\n                        \"everybody\",\n                        \"everyone\",\n                        // Negative indefinite pronouns (correct)\n                        \"nobody\",\n                        // Negative indefinite pronouns (incorrect)\n                        \"noone\",\n                        // Assertive existential indefinite pronouns\n                        \"somebody\",\n                        \"someone\",\n                        // Demonstrative pronouns\n                        \"these\",\n                        \"this\",\n                        \"those\",\n                    ])),\n                ])\n                .t_ws()\n                .t_aco(\"can\"),\n        }\n    }\n}\n\nimpl ExprLinter for WishCould {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let can_tok = toks.last()?;\n        let can_span = can_tok.span;\n\n        Some(Lint {\n            span: can_span,\n            lint_kind: LintKind::Grammar,\n            suggestions: vec![Suggestion::replace_with_match_case_str(\n                \"could\",\n                can_span.get_content(src),\n            )],\n            message: \"Use 'could' instead of 'can' after 'wish'.\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Checks for `can` being used after `wish` when it should be `could`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn flag_wish_we_can() {\n        assert_suggestion_result(\n            \"i wish we can spend more time together\",\n            WishCould::default(),\n            \"i wish we could spend more time together\",\n        );\n    }\n\n    #[test]\n    fn flag_wish_i_can() {\n        assert_suggestion_result(\n            \"I wish I can finally forgive myself for all the things I am not.\",\n            WishCould::default(),\n            \"I wish I could finally forgive myself for all the things I am not.\",\n        );\n    }\n\n    #[test]\n    fn flag_wish_you_can() {\n        assert_suggestion_result(\n            \"I wish you can find your true love.\",\n            WishCould::default(),\n            \"I wish you could find your true love.\",\n        );\n    }\n\n    #[test]\n    fn flag_wishes_they_can() {\n        assert_suggestion_result(\n            \"What your Therapist wishes they can tell you.\",\n            WishCould::default(),\n            \"What your Therapist wishes they could tell you.\",\n        );\n    }\n\n    #[test]\n    fn flag_wishing_someone_can() {\n        assert_suggestion_result(\n            \"Forever wishing someone can point me in the right direction\",\n            WishCould::default(),\n            \"Forever wishing someone could point me in the right direction\",\n        );\n    }\n\n    #[test]\n    fn flag_wish_they_can() {\n        assert_suggestion_result(\n            \"I wish they can plant more trees on this road.\",\n            WishCould::default(),\n            \"I wish they could plant more trees on this road.\",\n        );\n    }\n\n    #[test]\n    fn flag_wished_he_can() {\n        assert_suggestion_result(\n            \"I just wished he can talk and tell me how he feels\",\n            WishCould::default(),\n            \"I just wished he could talk and tell me how he feels\",\n        );\n    }\n\n    #[test]\n    fn wish_this_can() {\n        assert_suggestion_result(\n            \"but I wish this can be fixed by Electron team\",\n            WishCould::default(),\n            \"but I wish this could be fixed by Electron team\",\n        )\n    }\n\n    #[test]\n    fn wish_it_can() {\n        assert_suggestion_result(\n            \"Wish it can be supported.\",\n            WishCould::default(),\n            \"Wish it could be supported.\",\n        )\n    }\n\n    #[test]\n    fn wish_somebody_can() {\n        assert_suggestion_result(\n            \"I wish somebody can fix this issue.\",\n            WishCould::default(),\n            \"I wish somebody could fix this issue.\",\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/wordpress_dotcom.rs",
    "content": "use crate::{CharString, CharStringExt, TokenStringExt};\n\nuse super::{Lint, LintKind, Linter, Suggestion};\n\n/// Make sure you properly capitalize `WordPress.com`.\n#[derive(Default)]\npub struct WordPressDotcom;\n\nimpl Linter for WordPressDotcom {\n    fn lint(&mut self, document: &crate::Document) -> Vec<Lint> {\n        let correct: CharString = \"WordPress.com\".chars().collect();\n        let correct_lower = correct.to_lower();\n        let mut lints = Vec::new();\n\n        for hostname in document.iter_hostnames() {\n            let text = document.get_span_content(&hostname.span);\n\n            if correct.as_slice() != text && text.to_lower() == correct_lower {\n                lints.push(Lint {\n                    span: hostname.span,\n                    lint_kind: LintKind::Style,\n                    suggestions: vec![Suggestion::ReplaceWith(correct.to_vec())],\n                    message: \"The WordPress hosting provider should be stylized as `WordPress.com`\"\n                        .to_owned(),\n                    priority: 31,\n                });\n            }\n        }\n\n        lints\n    }\n\n    fn description(&self) -> &str {\n        \"Ensures correct capitalization of WordPress.com. This rule verifies that the official stylization of WordPress.com is used when referring to the hosting provider.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::linting::tests::assert_suggestion_result;\n\n    use super::WordPressDotcom;\n\n    #[test]\n    fn simple() {\n        assert_suggestion_result(\"wordpress.com\", WordPressDotcom, \"WordPress.com\");\n    }\n\n    #[test]\n    fn sentence() {\n        assert_suggestion_result(\n            \"wordpress.com is a great hosting provider\",\n            WordPressDotcom,\n            \"WordPress.com is a great hosting provider\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/worth_to_do.rs",
    "content": "use crate::{\n    CharStringExt, Lint, Token, TokenStringExt,\n    char_ext::CharExt,\n    expr::{Expr, SequenceExpr},\n    linting::{ExprLinter, LintKind, Suggestion, expr_linter::Chunk},\n    spell::Dictionary,\n};\n\npub struct WorthToDo<D>\nwhere\n    D: Dictionary,\n{\n    expr: SequenceExpr,\n    dict: D,\n}\n\nimpl<D> WorthToDo<D>\nwhere\n    D: Dictionary,\n{\n    pub fn new(dict: D) -> Self {\n        Self {\n            expr: SequenceExpr::aco(\"worth\")\n                .t_ws()\n                .t_aco(\"to\")\n                .t_ws()\n                .then_verb_lemma(),\n            dict,\n        }\n    }\n}\n\nimpl<D> ExprLinter for WorthToDo<D>\nwhere\n    D: Dictionary,\n{\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let tolemtoks = &toks[toks.len() - 3..];\n        let lemtok = toks.last()?;\n        let tolemspan = tolemtoks.span()?;\n        let lemspan = lemtok.span;\n        let tolemchars = tolemspan.get_content(src);\n        let lemchars = lemspan.get_content(src);\n        let lemstr = lemspan.get_content_string(src);\n\n        let mut gerunds = Vec::new();\n\n        let glom_ing = format!(\"{}ing\", lemstr);\n        if self.dict.contains_word_str(&glom_ing) {\n            gerunds.push(glom_ing);\n        }\n\n        if lemchars.ends_with_ignore_ascii_case_chars(&['e']) {\n            let replace_e_with_ing = format!(\"{}ing\", &lemstr[..lemstr.len() - 1]);\n            if self.dict.contains_word_str(&replace_e_with_ing) {\n                gerunds.push(replace_e_with_ing);\n            }\n        }\n\n        if let Some(last_letter) = lemstr.chars().last()\n            && !last_letter.is_vowel()\n        {\n            let double_consonant = format!(\"{}{}ing\", lemstr, last_letter);\n            if self.dict.contains_word_str(&double_consonant) {\n                gerunds.push(double_consonant);\n            }\n        }\n\n        let suggestions = gerunds\n            .into_iter()\n            .map(|gerund| {\n                Suggestion::replace_with_match_case(\n                    gerund.chars().collect::<Vec<char>>(),\n                    tolemchars,\n                )\n            })\n            .collect();\n\n        Some(Lint {\n            span: tolemspan,\n            lint_kind: LintKind::Grammar,\n            suggestions,\n            message: \"Use the `gerund` of the verb, the form that ends in `-ing`\".to_string(),\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `worth to` + a verb to `worth` + the gerund of the verb.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::WorthToDo;\n    use crate::{linting::tests::assert_suggestion_result, spell::FstDictionary};\n\n    #[test]\n    fn worth_to_add() {\n        assert_suggestion_result(\n            \"Is it worth to add those files?\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"Is it worth adding those files?\",\n        );\n    }\n\n    #[test]\n    fn worth_to_adjust() {\n        assert_suggestion_result(\n            \"If yes, it would be worth to adjust the description to make it easier to understand\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"If yes, it would be worth adjusting the description to make it easier to understand\",\n        );\n    }\n\n    #[test]\n    fn worth_to_ask() {\n        assert_suggestion_result(\n            \"So it is worth to ask for this there or take a look at their wiki pages. \",\n            WorthToDo::new(FstDictionary::curated()),\n            \"So it is worth asking for this there or take a look at their wiki pages. \",\n        );\n    }\n\n    #[test]\n    fn worth_to_buy() {\n        assert_suggestion_result(\n            \"and it makes it really worth to buy the software\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"and it makes it really worth buying the software\",\n        );\n    }\n\n    #[test]\n    fn worth_to_deal() {\n        assert_suggestion_result(\n            \"CC2531 is considered as crap in 2024 and its not worth to deal with it.\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"CC2531 is considered as crap in 2024 and its not worth dealing with it.\",\n        );\n    }\n\n    #[test]\n    fn worth_to_do() {\n        assert_suggestion_result(\n            \"Is it worth to do the credit-card-balance-transfer?\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"Is it worth doing the credit-card-balance-transfer?\",\n        );\n    }\n\n    #[test]\n    fn worth_to_experiment() {\n        assert_suggestion_result(\n            \"Hello @tkchia, thanks for the hint, I agree it is worth to experiment.\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"Hello @tkchia, thanks for the hint, I agree it is worth experimenting.\",\n        );\n    }\n\n    #[test]\n    fn worth_to_fix() {\n        assert_suggestion_result(\n            \"i dont know if this is worth to fix, i just wanted to point this and start a discussion about this.\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"i dont know if this is worth fixing, i just wanted to point this and start a discussion about this.\",\n        );\n    }\n\n    #[test]\n    fn worth_to_get_published() {\n        assert_suggestion_result(\n            \"think that would be worth to get published in my Thesis.\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"think that would be worth getting published in my Thesis.\",\n        );\n    }\n\n    #[test]\n    fn worth_to_imagine() {\n        assert_suggestion_result(\n            \"Might be worth to imagine how the current Nu style would look like in other programming languages.\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"Might be worth imagining how the current Nu style would look like in other programming languages.\",\n        );\n    }\n\n    #[test]\n    fn worth_to_invest() {\n        assert_suggestion_result(\n            \"It doesn't seem worth to invest much effort in this though...\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"It doesn't seem worth investing much effort in this though...\",\n        );\n    }\n\n    #[test]\n    fn worth_to_investigate() {\n        assert_suggestion_result(\n            \"to get a feeling how CP-SAT works and what are directions worth to investigate i wanted to ask\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"to get a feeling how CP-SAT works and what are directions worth investigating i wanted to ask\",\n        );\n    }\n\n    #[test]\n    fn worth_to_play() {\n        assert_suggestion_result(\n            \"Is worth to play with thread count if there are no issues?\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"Is worth playing with thread count if there are no issues?\",\n        );\n    }\n\n    #[test]\n    fn worth_to_put() {\n        assert_suggestion_result(\n            \"Do you think it would be worth to put a suggestion to remove the kind network if cluster creation fails\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"Do you think it would be worth putting a suggestion to remove the kind network if cluster creation fails\",\n        );\n    }\n\n    #[test]\n    fn worth_to_read() {\n        assert_suggestion_result(\n            \"Stored books worth to read.\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"Stored books worth reading.\",\n        );\n    }\n\n    #[test]\n    fn worth_to_revisit() {\n        assert_suggestion_result(\n            \"we've had discussions before #260 and it maybe worth to revisit again\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"we've had discussions before #260 and it maybe worth revisiting again\",\n        );\n    }\n\n    #[test]\n    fn worth_to_rewrite() {\n        assert_suggestion_result(\n            \"is puppet so bad that it is worth to rewrite everything?\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"is puppet so bad that it is worth rewriting everything?\",\n        );\n    }\n\n    #[test]\n    fn worth_to_try() {\n        assert_suggestion_result(\n            \"is it really worth to try and what are facebook long-term plans about this engine.\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"is it really worth trying and what are facebook long-term plans about this engine.\",\n        );\n    }\n\n    #[test]\n    fn worth_to_update() {\n        assert_suggestion_result(\n            \"Hi, maybe it's worth to update doc with the script for Bullseye given by @frenchfaso ?\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"Hi, maybe it's worth updating doc with the script for Bullseye given by @frenchfaso ?\",\n        );\n    }\n\n    #[test]\n    fn worth_to_upgrade() {\n        assert_suggestion_result(\n            \"Your PR should've fixed that issue so I think it's worth to upgrade to 10.33 and see if that brings the delta down.\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"Your PR should've fixed that issue so I think it's worth upgrading to 10.33 and see if that brings the delta down.\",\n        );\n    }\n\n    #[test]\n    fn worth_to_use_and_develop() {\n        assert_suggestion_result(\n            \"I think It worth to use and worth to develop further\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"I think It worth using and worth developing further\",\n        );\n    }\n\n    #[test]\n    fn works_with_uppercase_glom() {\n        assert_suggestion_result(\n            \" YES IT IS WORTH TO DO\",\n            WorthToDo::new(FstDictionary::curated()),\n            \" YES IT IS WORTH DOING\",\n        );\n    }\n\n    #[test]\n    fn works_with_uppercase_final_e() {\n        assert_suggestion_result(\n            \"THIS LINTER WAS WORTH TO MAKE\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"THIS LINTER WAS WORTH MAKING\",\n        );\n    }\n\n    #[test]\n    fn works_with_uppercase_double_consonant() {\n        assert_suggestion_result(\n            \"SO YEAH IT WAS WORTH TO GET THIS DONE\",\n            WorthToDo::new(FstDictionary::curated()),\n            \"SO YEAH IT WAS WORTH GETTING THIS DONE\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/would_never_have.rs",
    "content": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n    Token,\n    expr::{Expr, FixedPhrase, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion},\n    token_string_ext::TokenStringExt,\n};\n\npub struct WouldNeverHave {\n    expr: SequenceExpr,\n}\n\nimpl Default for WouldNeverHave {\n    fn default() -> Self {\n        let phrases = [\n            \"could have never\",\n            \"could never have\",\n            \"could've never\",\n            \"couldve never\",\n            \"would have never\",\n            \"would never have\",\n            \"would've never\",\n            \"wouldve never\",\n        ];\n\n        let expr: Vec<Box<dyn Expr>> = phrases\n            .iter()\n            .map(|&phrase| Box::new(FixedPhrase::from_phrase(phrase)) as Box<dyn Expr>)\n            .collect();\n\n        // TODO: verb should be perfect form (\"done\", \"happened\", etc.) when verb property changes are merged\n        let expr = SequenceExpr::any_of(expr).then_whitespace().then_verb();\n\n        Self { expr }\n    }\n}\n\nimpl ExprLinter for WouldNeverHave {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let modal_have_toks = toks.first()?;\n        let modal_have_chars = modal_have_toks.span.get_content(src);\n        let modal_have_str = modal_have_toks.span.get_content_string(src).to_lowercase();\n\n        let modal = if modal_have_str.starts_with(\"could\") {\n            \"could\"\n        } else if modal_have_str.starts_with(\"would\") {\n            \"would\"\n        } else {\n            return None;\n        };\n\n        let is_contraction = modal_have_str.ends_with(\"ve\");\n\n        let new_phrasing = format!(\n            \"never {modal}{}\",\n            if is_contraction { \"'ve\" } else { \" have\" }\n        );\n\n        let suggestions = vec![Suggestion::replace_with_match_case(\n            new_phrasing.chars().collect(),\n            modal_have_chars,\n        )];\n\n        let message = format!(\"For a more standard style, consider using `{new_phrasing}`.\");\n\n        Some(Lint {\n            span: toks[..toks.len() - 2].span()?,\n            lint_kind: LintKind::Style,\n            suggestions,\n            message,\n            ..Default::default()\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects `would/could have never` to `never would/could have`.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::WouldNeverHave;\n    use crate::linting::tests::assert_suggestion_result;\n\n    #[test]\n    fn fix_could_have_never_been() {\n        assert_suggestion_result(\n            \"Having a conversation would have never been easier with Ramen!\",\n            WouldNeverHave::default(),\n            \"Having a conversation never would have been easier with Ramen!\",\n        );\n    }\n\n    #[test]\n    fn fix_would_have_never_come() {\n        assert_suggestion_result(\n            \"This would have never come about without the help and encouragement of many people, too numerous to mention here.\",\n            WouldNeverHave::default(),\n            \"This never would have come about without the help and encouragement of many people, too numerous to mention here.\",\n        );\n    }\n\n    #[test]\n    fn fix_would_have_never_find() {\n        assert_suggestion_result(\n            \"Thanks for the help, think I would have never find it out alone.\",\n            WouldNeverHave::default(),\n            \"Thanks for the help, think I never would have find it out alone.\",\n        );\n    }\n\n    #[test]\n    fn fix_all_caps() {\n        assert_suggestion_result(\n            \"I WOULD'VE NEVER THOUGHT TO TEST ALL CAPS.\",\n            WouldNeverHave::default(),\n            \"I NEVER WOULD'VE THOUGHT TO TEST ALL CAPS.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"Fails due to the strange way replace_with_match_case works\"]\n    fn fix_title_case() {\n        assert_suggestion_result(\n            \"I Would Never Have Thought To Test Title Case English.\",\n            WouldNeverHave::default(),\n            \"I Never Would Have Thought To Test Title Case English.\",\n        );\n    }\n\n    #[test]\n    fn fix_could_never_have_worked() {\n        assert_suggestion_result(\n            \"ft_quantile_discretizer could never have worked\",\n            WouldNeverHave::default(),\n            \"ft_quantile_discretizer never could have worked\",\n        );\n    }\n\n    #[test]\n    fn fix_would_never_have_thought_of() {\n        assert_suggestion_result(\n            \"We discover security flaws that your team would never have thought of.\",\n            WouldNeverHave::default(),\n            \"We discover security flaws that your team never would have thought of.\",\n        );\n    }\n\n    #[test]\n    fn fix_wouldve_never_known_missing_apostrophe() {\n        assert_suggestion_result(\n            \"We wouldve never known from the current api docs\",\n            WouldNeverHave::default(),\n            \"We never would've known from the current api docs\",\n        );\n    }\n\n    #[test]\n    fn fix_wouldve_never_grokked() {\n        assert_suggestion_result(\n            \"I would've never grokked that it's an issue in rollup.\",\n            WouldNeverHave::default(),\n            \"I never would've grokked that it's an issue in rollup.\",\n        );\n    }\n\n    #[test]\n    fn fix_couldve_never_designed() {\n        assert_suggestion_result(\n            \"Without my subscription I could've never designed this in such little time without it.\",\n            WouldNeverHave::default(),\n            \"Without my subscription I never could've designed this in such little time without it.\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/linting/wrong_apostrophe.rs",
    "content": "use crate::{\n    Token, TokenStringExt,\n    expr::{Expr, FirstMatchOf, SequenceExpr},\n    linting::{ExprLinter, Lint, LintKind, Suggestion, expr_linter::Chunk},\n};\n\nconst CONTRACTION_AND_POSSESSIVE_ENDINGS: [&str; 7] = [\"d\", \"ll\", \"m\", \"re\", \"s\", \"t\", \"ve\"];\n\npub struct WrongApostrophe {\n    expr: FirstMatchOf,\n}\n\nimpl Default for WrongApostrophe {\n    fn default() -> Self {\n        Self {\n            expr: FirstMatchOf::new(vec![\n                Box::new(\n                    SequenceExpr::any_word()\n                        .then_semicolon()\n                        .then_word_set(&CONTRACTION_AND_POSSESSIVE_ENDINGS),\n                ),\n                Box::new(\n                    SequenceExpr::any_word()\n                        .then_acute()\n                        .then_word_set(&CONTRACTION_AND_POSSESSIVE_ENDINGS),\n                ),\n            ]),\n        }\n    }\n}\n\nimpl ExprLinter for WrongApostrophe {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {\n        let whole_span = toks.span()?;\n        let base = &toks.first()?;\n        let ending = &toks.last()?;\n\n        let replacement_str = format!(\n            \"{}'{}\",\n            base.span.get_content_string(src).to_lowercase(),\n            ending.span.get_content_string(src).to_lowercase()\n        );\n\n        let lettercase_template =\n            [base.span.get_content(src), ending.span.get_content(src)].concat();\n\n        Some(Lint {\n            span: whole_span,\n            lint_kind: LintKind::Typo,\n            suggestions: vec![Suggestion::replace_with_match_case(\n                replacement_str.chars().collect(),\n                &lettercase_template,\n            )],\n            message: format!(\"Did you mean `{replacement_str}`?\"),\n            priority: 57,\n        })\n    }\n\n    fn description(&self) -> &str {\n        \"Corrects semicolons or acute accents typed instead of apostrophes.\"\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::WrongApostrophe;\n    use crate::linting::tests::{assert_lint_count, assert_suggestion_result};\n\n    #[test]\n    fn fix_dont_with_semicolon_to_apostrophe() {\n        assert_suggestion_result(\n            \"It's better if you don;t type like this.\",\n            WrongApostrophe::default(),\n            \"It's better if you don't type like this.\",\n        );\n    }\n\n    #[test]\n    fn ignore_correct() {\n        assert_lint_count(\"I don't doubt it.\", WrongApostrophe::default(), 0);\n    }\n\n    #[test]\n    fn fix_title_case() {\n        assert_suggestion_result(\n            \"Don;t type like this.\",\n            WrongApostrophe::default(),\n            \"Don't type like this.\",\n        );\n    }\n\n    #[test]\n    fn fix_all_caps() {\n        assert_suggestion_result(\n            \"DON;T TRY THIS AT HOME.\",\n            WrongApostrophe::default(),\n            \"DON'T TRY THIS AT HOME.\",\n        );\n    }\n\n    #[test]\n    #[ignore = \"replace_with_match_case has a bug turning `I'll` into `I'LL`\"]\n    fn fix_ill_and_monkeys() {\n        assert_suggestion_result(\n            \"Well I;ll be a monkey;s uncle!\",\n            WrongApostrophe::default(),\n            \"Well I'll be a monkey's uncle!\",\n        )\n    }\n\n    #[test]\n    fn fix_other_contractions_and_possessives() {\n        assert_suggestion_result(\n            \"Let;s see if we;ve fixed patrakov;s bug. Fun wasn;t it?\",\n            WrongApostrophe::default(),\n            \"Let's see if we've fixed patrakov's bug. Fun wasn't it?\",\n        )\n    }\n\n    #[test]\n    fn corrects_ive_with_correct_capitalization() {\n        assert_suggestion_result(\"I;ve\", WrongApostrophe::default(), \"I've\");\n    }\n\n    #[test]\n    fn fix_acute_dont() {\n        assert_suggestion_result(\n            \"To see the list of available bikes for a location, you don´t need any authentication.\",\n            WrongApostrophe::default(),\n            \"To see the list of available bikes for a location, you don't need any authentication.\",\n        );\n    }\n\n    #[test]\n    fn fix_acute_im() {\n        assert_suggestion_result(\n            \"In my research, I´m applying the latest generation of quantitative methods in epidemiology\",\n            WrongApostrophe::default(),\n            \"In my research, I'm applying the latest generation of quantitative methods in epidemiology\",\n        );\n    }\n\n    #[test]\n    fn fix_acute_its() {\n        assert_suggestion_result(\n            \"and it´s auto-updated if that project is hosted here on github\",\n            WrongApostrophe::default(),\n            \"and it's auto-updated if that project is hosted here on github\",\n        );\n    }\n\n    #[test]\n    fn fix_acute_lets() {\n        assert_suggestion_result(\n            \"Let´s now visit the main functionalities provided by GrimoireLab.\",\n            WrongApostrophe::default(),\n            \"Let's now visit the main functionalities provided by GrimoireLab.\",\n        );\n    }\n\n    #[test]\n    fn fix_acute_microsofts() {\n        assert_suggestion_result(\n            \"Windows 11 Upgrade tool that bypasses new Microsoft´s requirements\",\n            WrongApostrophe::default(),\n            \"Windows 11 Upgrade tool that bypasses new Microsoft's requirements\",\n        );\n    }\n\n    #[test]\n    fn fix_acute_youre() {\n        assert_suggestion_result(\n            \"You´re looking for clues, but you´re missing all the signs\",\n            WrongApostrophe::default(),\n            \"You're looking for clues, but you're missing all the signs\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/mask/mod.rs",
    "content": "mod regex_masker;\npub use regex_masker::RegexMasker;\n\nuse itertools::Itertools;\n\nuse crate::Span;\n\n/// A Masker is a tool that can be composed to eliminate chunks of text from\n/// being parsed. They can be composed to do things like isolate comments from a\n/// programming language or disable linting for languages that have been\n/// determined to not be English.\n///\n/// This is primarily used by [`crate::parsers::Mask`] to create parsers for\n/// things like comments of programming languages.\npub trait Masker: Send + Sync {\n    fn create_mask(&self, source: &[char]) -> Mask;\n}\n\n/// Identifies portions of a [`char`] sequence that should __not__ be ignored by\n/// Harper.\npub struct Mask {\n    // Right now, there aren't any use-cases where we can't treat this as a stack.\n    //\n    // Assumed that no elements overlap and exist in sorted order.\n    pub(self) allowed: Vec<Span<char>>,\n}\n\nimpl FromIterator<Span<char>> for Mask {\n    fn from_iter<T: IntoIterator<Item = Span<char>>>(iter: T) -> Self {\n        let allowed = iter\n            .into_iter()\n            .sorted_by_key(|span| span.start)\n            .collect_vec();\n        assert!(\n            allowed.is_sorted_by(|a, b| a.end <= b.start),\n            \"Masker elements cannot overlap and must be sorted!\"\n        );\n\n        Self { allowed }\n    }\n}\n\nimpl Mask {\n    /// Create a new Mask for a given piece of text, marking all text as\n    /// disallowed.\n    pub fn new_blank() -> Self {\n        Self {\n            allowed: Vec::new(),\n        }\n    }\n\n    pub fn iter_allowed<'a>(\n        &'a self,\n        source: &'a [char],\n    ) -> impl Iterator<Item = (Span<char>, &'a [char])> {\n        self.allowed.iter().map(|s| (*s, s.get_content(source)))\n    }\n\n    /// Mark a span of the text as allowed.\n    pub fn push_allowed(&mut self, allowed: Span<char>) {\n        if let Some(last) = self.allowed.last_mut() {\n            assert!(\n                allowed.start >= last.end,\n                \"Masker elements cannot overlap and must be sorted!\"\n            );\n\n            if allowed.start == last.end {\n                last.end = allowed.end;\n                return;\n            }\n        }\n\n        self.allowed.push(allowed)\n    }\n\n    /// Merge chunks that are only separated by whitespace.\n    pub fn merge_whitespace_sep(&mut self, source: &[char]) {\n        let mut after = Vec::with_capacity(self.allowed.len());\n\n        let mut iter = 0..self.allowed.len();\n\n        while let Some(i) = iter.next() {\n            let a = self.allowed[i];\n\n            if let Some(b) = self.allowed.get(i + 1) {\n                let sep = Span::new(a.end, b.start);\n                let sep_content = sep.get_content(source);\n\n                if sep_content.iter().all(|c| c.is_whitespace() || *c == '\\n') {\n                    iter.next();\n                    after.push(Span::new(a.start, b.end));\n                    continue;\n                }\n            }\n\n            after.push(a);\n        }\n\n        if self.allowed.len() != after.len() {\n            self.allowed = after;\n            self.merge_whitespace_sep(source);\n        } else {\n            self.allowed = after;\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::{Mask, Span};\n\n    #[test]\n    fn bumps_existing() {\n        let mut mask = Mask::new_blank();\n\n        mask.push_allowed(Span::new_with_len(0, 1));\n        mask.push_allowed(Span::new_with_len(1, 2));\n\n        assert_eq!(mask.allowed.len(), 1)\n    }\n\n    #[test]\n    fn merges_whitespace_sep() {\n        let source: Vec<_> = \"word word\\nword\".chars().collect();\n\n        let mut mask = Mask::new_blank();\n        mask.push_allowed(Span::new_with_len(0, 4));\n        mask.push_allowed(Span::new_with_len(5, 4));\n        mask.push_allowed(Span::new_with_len(10, 4));\n\n        assert_eq!(mask.allowed.len(), 3);\n\n        mask.merge_whitespace_sep(&source);\n\n        assert_eq!(mask.allowed.len(), 1);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/mask/regex_masker.rs",
    "content": "use regex::Regex;\n\nuse crate::{Span, offsets::build_byte_to_char_map};\n\nuse super::{Mask, Masker};\n\n/// Allows one to mask the sections of a document that match a regular expression (or vice versa).\npub struct RegexMasker {\n    regex: Regex,\n    exclude_matches: bool,\n}\n\nimpl RegexMasker {\n    /// Parses and compiles the provided Regex expression. Returns None if an invalid expression\n    /// was provided.\n    ///\n    /// If `exclude_matches` is marked `true`, then the areas selected by the regular expression\n    /// will be _removed_ from Harper's view. If it is `false`, those areas will be the only ones\n    /// _included_.\n    pub fn new(regex: &str, exclude_matches: bool) -> Option<Self> {\n        Some(Self {\n            regex: Regex::new(regex).ok()?,\n            exclude_matches,\n        })\n    }\n}\n\nimpl Masker for RegexMasker {\n    fn create_mask(&self, source: &[char]) -> Mask {\n        let source_s: String = source.iter().collect();\n        let byte_to_char = build_byte_to_char_map(&source_s);\n\n        let mut mask = Mask::new_blank();\n\n        if self.exclude_matches {\n            let mut allowed_start = 0;\n\n            for m in self.regex.find_iter(&source_s) {\n                let match_start = byte_to_char[m.start()];\n                let match_end = byte_to_char[m.end()];\n\n                if allowed_start < match_start {\n                    mask.push_allowed(Span::new(allowed_start, match_start));\n                }\n\n                allowed_start = match_end;\n            }\n\n            if allowed_start < source.len() {\n                mask.push_allowed(Span::new(allowed_start, source.len()));\n            }\n        } else {\n            for m in self.regex.find_iter(&source_s) {\n                let match_start = byte_to_char[m.start()];\n                let match_end = byte_to_char[m.end()];\n\n                if match_start < match_end {\n                    mask.push_allowed(Span::new(match_start, match_end));\n                }\n            }\n        }\n\n        mask\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use quickcheck::TestResult;\n    use quickcheck_macros::quickcheck;\n\n    use super::RegexMasker;\n    use crate::{Masker, Span};\n\n    #[test]\n    fn include_matches() {\n        let source: Vec<_> = \"foo [ignore] bar [drop]\".chars().collect();\n        let masker = RegexMasker::new(r\"\\[[^\\]]+\\]\", false).unwrap();\n\n        let allowed = masker\n            .create_mask(&source)\n            .iter_allowed(&source)\n            .map(|(_, chars)| chars.iter().collect::<String>())\n            .collect::<Vec<_>>();\n\n        assert_eq!(allowed, vec![\"[ignore]\", \"[drop]\"]);\n    }\n\n    #[test]\n    fn exclude_matches() {\n        let source: Vec<_> = \"foo [ignore] bar [drop]\".chars().collect();\n        let masker = RegexMasker::new(r\"\\[[^\\]]+\\]\", true).unwrap();\n\n        let allowed = masker\n            .create_mask(&source)\n            .iter_allowed(&source)\n            .map(|(_, chars)| chars.iter().collect::<String>())\n            .collect::<Vec<_>>();\n\n        assert_eq!(allowed, vec![\"foo \", \" bar \"]);\n    }\n\n    #[test]\n    fn unicode_offsets_are_converted_to_char_spans() {\n        let source: Vec<_> = \"A🙂B🙂C\".chars().collect();\n        let masker = RegexMasker::new(r\"🙂B🙂\", false).unwrap();\n\n        let allowed = masker\n            .create_mask(&source)\n            .iter_allowed(&source)\n            .map(|(_, chars)| chars.iter().collect::<String>())\n            .collect::<Vec<_>>();\n\n        assert_eq!(allowed, vec![\"🙂B🙂\"]);\n    }\n\n    #[quickcheck]\n    fn can_match_everything(source: String) -> TestResult {\n        if source.contains(|s: char| !s.is_ascii() || s.is_control()) {\n            return TestResult::discard();\n        }\n\n        let masker = RegexMasker::new(\".*\", false).unwrap();\n\n        let chars: Vec<_> = source.chars().collect();\n        let mask = masker.create_mask(&chars);\n\n        if !chars.is_empty() {\n            assert_eq!(mask.allowed, vec![Span::new_with_len(0, chars.len())]);\n            TestResult::passed()\n        } else {\n            TestResult::discard()\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/number.rs",
    "content": "use std::fmt::Display;\n\nuse is_macro::Is;\nuse itertools::Itertools;\nuse ordered_float::OrderedFloat;\nuse serde::{Deserialize, Serialize};\n\n/// Represents a written number.\n#[derive(Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq, Hash, PartialOrd)]\npub struct Number {\n    /// The actual value of the number\n    pub value: OrderedFloat<f64>,\n    /// Whether it contains a suffix (like the 1__st__ element).\n    pub suffix: Option<OrdinalSuffix>,\n    /// What base it is in (hex v.s. decimal, for example).\n    pub radix: u32,\n    /// The level of precision the number is formatted with.\n    pub precision: usize,\n}\n\nimpl Display for Number {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        if self.radix == 16 {\n            write!(f, \"0x{:X}\", self.value.0 as u64)?;\n        } else {\n            write!(f, \"{:.*}\", self.precision, self.value.0)?;\n        }\n\n        if let Some(suffix) = self.suffix {\n            for c in suffix.to_chars() {\n                write!(f, \"{c}\")?;\n            }\n        }\n\n        Ok(())\n    }\n}\n\n#[derive(\n    Debug, Serialize, Deserialize, Default, PartialEq, PartialOrd, Clone, Copy, Is, Hash, Eq,\n)]\npub enum OrdinalSuffix {\n    #[default]\n    Th,\n    St,\n    Nd,\n    Rd,\n}\n\nimpl OrdinalSuffix {\n    pub fn correct_suffix_for(number: impl Into<f64>) -> Option<Self> {\n        let number = number.into();\n\n        if number < 0.0 || number - number.floor() > f64::EPSILON || number > u64::MAX as f64 {\n            return None;\n        }\n\n        let integer = number as u64;\n\n        if let 11..=13 = integer % 100 {\n            return Some(Self::Th);\n        };\n\n        Some(match integer % 10 {\n            0 | 4..=9 => Self::Th,\n            1 => Self::St,\n            2 => Self::Nd,\n            3 => Self::Rd,\n            _ => unreachable!(),\n        })\n    }\n\n    pub const fn to_chars(self) -> &'static [char] {\n        match self {\n            OrdinalSuffix::Th => &['t', 'h'],\n            OrdinalSuffix::St => &['s', 't'],\n            OrdinalSuffix::Nd => &['n', 'd'],\n            OrdinalSuffix::Rd => &['r', 'd'],\n        }\n    }\n\n    /// Check the characters in a buffer to see if it matches a number suffix.\n    pub fn from_chars(chars: &[char]) -> Option<Self> {\n        let lower_chars: [char; 2] = chars.iter().map(char::to_ascii_lowercase).collect_array()?;\n\n        match lower_chars {\n            ['t', 'h'] => Some(OrdinalSuffix::Th),\n            ['s', 't'] => Some(OrdinalSuffix::St),\n            ['n', 'd'] => Some(OrdinalSuffix::Nd),\n            ['r', 'd'] => Some(OrdinalSuffix::Rd),\n            _ => None,\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use itertools::Itertools;\n    use ordered_float::OrderedFloat;\n\n    use crate::OrdinalSuffix;\n\n    use super::Number;\n\n    #[test]\n    fn hex_fifteen() {\n        assert_eq!(\n            Number {\n                value: OrderedFloat(15.0),\n                suffix: None,\n                radix: 16,\n                precision: 0\n            }\n            .to_string(),\n            \"0xF\"\n        )\n    }\n\n    #[test]\n    fn decimal_fifteen() {\n        assert_eq!(\n            Number {\n                value: OrderedFloat(15.0),\n                suffix: None,\n                radix: 10,\n                precision: 0\n            }\n            .to_string(),\n            \"15\"\n        )\n    }\n\n    #[test]\n    fn decimal_fifteen_suffix() {\n        assert_eq!(\n            Number {\n                value: OrderedFloat(15.0),\n                suffix: Some(OrdinalSuffix::Th),\n                radix: 10,\n                precision: 0\n            }\n            .to_string(),\n            \"15th\"\n        )\n    }\n\n    #[test]\n    fn decimal_fifteen_and_a_half() {\n        assert_eq!(\n            Number {\n                value: OrderedFloat(15.5),\n                suffix: None,\n                radix: 10,\n                precision: 2\n            }\n            .to_string(),\n            \"15.50\"\n        )\n    }\n\n    #[test]\n    fn issue_1051() {\n        let word = \"story\".chars().collect_vec();\n        assert_eq!(None, OrdinalSuffix::from_chars(&word));\n    }\n}\n"
  },
  {
    "path": "harper-core/src/offsets.rs",
    "content": "/// Build a lookup table that maps every byte offset in `source` to its\n/// corresponding character offset.\npub(crate) fn build_byte_to_char_map(source: &str) -> Vec<usize> {\n    let mut byte_to_char = vec![0; source.len() + 1];\n    let mut char_idx = 0;\n\n    for (byte_idx, ch) in source.char_indices() {\n        let next_byte_idx = byte_idx + ch.len_utf8();\n\n        for slot in &mut byte_to_char[byte_idx..next_byte_idx] {\n            *slot = char_idx;\n        }\n\n        char_idx += 1;\n        byte_to_char[next_byte_idx] = char_idx;\n    }\n\n    byte_to_char\n}\n\n#[cfg(test)]\nmod tests {\n    use super::build_byte_to_char_map;\n\n    #[test]\n    fn maps_ascii_offsets() {\n        let map = build_byte_to_char_map(\"abc\");\n        assert_eq!(map, vec![0, 1, 2, 3]);\n    }\n\n    #[test]\n    fn maps_unicode_offsets() {\n        let map = build_byte_to_char_map(\"A🙂B\");\n        assert_eq!(map, vec![0, 1, 1, 1, 1, 2, 3]);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/parsers/collapse_identifiers.rs",
    "content": "use std::collections::VecDeque;\nuse std::sync::Arc;\n\nuse itertools::Itertools;\n\nuse super::Parser;\nuse crate::expr::{ExprExt, SequenceExpr};\nuse crate::spell::Dictionary;\nuse crate::{Lrc, Span, Token, TokenKind, VecExt};\n\n/// A parser that wraps any other parser to collapse token strings that match\n/// the pattern `word_word` or `word-word`.\npub struct CollapseIdentifiers {\n    inner: Box<dyn Parser>,\n    dict: Arc<dyn Dictionary>,\n}\n\nimpl CollapseIdentifiers {\n    pub fn new(inner: Box<dyn Parser>, dict: Box<Arc<dyn Dictionary>>) -> Self {\n        Self {\n            inner,\n            dict: *dict.clone(),\n        }\n    }\n}\n\nthread_local! {\n    static WORD_OR_NUMBER: Lrc<SequenceExpr> = Lrc::new(SequenceExpr::any_word()\n                .then_one_or_more(SequenceExpr::default()\n        .then_case_separator()\n        .then_any_word()));\n}\n\nimpl Parser for CollapseIdentifiers {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mut tokens = self.inner.parse(source);\n\n        let mut to_remove = VecDeque::default();\n\n        for tok_span in WORD_OR_NUMBER\n            .with(|v| v.clone())\n            .iter_matches(&tokens, source)\n            .collect::<Vec<_>>()\n        {\n            let start_tok = &tokens[tok_span.start];\n            let end_tok = &tokens[tok_span.end - 1];\n            let char_span = Span::new(start_tok.span.start, end_tok.span.end);\n\n            if self.dict.contains_word(char_span.get_content(source)) {\n                tokens[tok_span.start] = Token::new(char_span, TokenKind::blank_word());\n                to_remove.extend(tok_span.start + 1..tok_span.end);\n            }\n        }\n\n        tokens.remove_indices(to_remove.into_iter().sorted().unique().collect());\n\n        tokens\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::spell::{FstDictionary, MergedDictionary, MutableDictionary};\n    use crate::{\n        DictWordMetadata,\n        parsers::{PlainEnglish, StrParser},\n    };\n\n    #[test]\n    fn matches_kebab() {\n        let source: Vec<_> = \"kebab-case\".chars().collect();\n\n        assert_eq!(\n            WORD_OR_NUMBER\n                .with(|v| v.clone())\n                .iter_matches(&PlainEnglish.parse(&source), &source)\n                .count(),\n            1\n        );\n    }\n\n    #[test]\n    fn no_collapse() {\n        let dict = FstDictionary::curated();\n        let source = \"This is a test.\";\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(dict)).parse_str(source);\n        assert_eq!(tokens.len(), 8);\n    }\n\n    #[test]\n    fn one_collapse() {\n        let source = \"This is a separated_identifier, wow!\";\n        let curated_dictionary = FstDictionary::curated();\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(curated_dictionary.clone()))\n                .parse_str(source);\n        assert_eq!(tokens.len(), 13);\n\n        let mut dict = MutableDictionary::new();\n        dict.append_word_str(\"separated_identifier\", DictWordMetadata::default());\n\n        let mut merged_dict = MergedDictionary::new();\n        merged_dict.add_dictionary(curated_dictionary);\n        merged_dict.add_dictionary(Arc::new(dict));\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(Arc::new(merged_dict)))\n                .parse_str(source);\n        assert_eq!(tokens.len(), 11);\n    }\n\n    #[test]\n    fn kebab_collapse() {\n        let source = \"This is a separated-identifier, wow!\";\n        let curated_dictionary = FstDictionary::curated();\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(curated_dictionary.clone()))\n                .parse_str(source);\n\n        assert_eq!(tokens.len(), 13);\n\n        let mut dict = MutableDictionary::new();\n        dict.append_word_str(\"separated-identifier\", DictWordMetadata::default());\n\n        let mut merged_dict = MergedDictionary::new();\n        merged_dict.add_dictionary(curated_dictionary);\n        merged_dict.add_dictionary(Arc::new(dict));\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(Arc::new(merged_dict)))\n                .parse_str(source);\n\n        assert_eq!(tokens.len(), 11);\n    }\n\n    #[test]\n    fn double_collapse() {\n        let source = \"This is a separated_identifier_token, wow!\";\n        let curated_dictionary = FstDictionary::curated();\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(curated_dictionary.clone()))\n                .parse_str(source);\n        assert_eq!(tokens.len(), 15);\n\n        let mut dict = MutableDictionary::new();\n        dict.append_word_str(\"separated_identifier_token\", DictWordMetadata::default());\n\n        let mut merged_dict = MergedDictionary::new();\n        merged_dict.add_dictionary(curated_dictionary);\n        merged_dict.add_dictionary(Arc::new(dict));\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(Arc::new(merged_dict)))\n                .parse_str(source);\n        assert_eq!(tokens.len(), 11);\n    }\n\n    #[test]\n    fn two_collapses() {\n        let source = \"This is a separated_identifier, wow! separated_identifier\";\n        let curated_dictionary = FstDictionary::curated();\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(curated_dictionary.clone()))\n                .parse_str(source);\n        assert_eq!(tokens.len(), 17);\n\n        let mut dict = MutableDictionary::new();\n        dict.append_word_str(\"separated_identifier\", DictWordMetadata::default());\n\n        let mut merged_dict = MergedDictionary::new();\n        merged_dict.add_dictionary(curated_dictionary);\n        merged_dict.add_dictionary(Arc::new(dict));\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(Arc::new(merged_dict)))\n                .parse_str(source);\n        assert_eq!(tokens.len(), 13);\n    }\n\n    #[test]\n    fn overlapping_identifiers() {\n        let source = \"This is a separated_identifier_token, wow!\";\n        let curated_dictionary = FstDictionary::curated();\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(curated_dictionary.clone()))\n                .parse_str(source);\n        assert_eq!(tokens.len(), 15);\n\n        let mut dict = MutableDictionary::new();\n        dict.append_word_str(\"separated_identifier\", DictWordMetadata::default());\n        dict.append_word_str(\"identifier_token\", DictWordMetadata::default());\n\n        let mut merged_dict = MergedDictionary::new();\n        merged_dict.add_dictionary(curated_dictionary);\n        merged_dict.add_dictionary(Arc::new(dict));\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(Arc::new(merged_dict)))\n                .parse_str(source);\n        assert_eq!(tokens.len(), 15);\n    }\n\n    #[test]\n    fn nested_identifiers() {\n        let source = \"This is a separated_identifier_token, wow!\";\n        let curated_dictionary = FstDictionary::curated();\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(curated_dictionary.clone()))\n                .parse_str(source);\n        assert_eq!(tokens.len(), 15);\n\n        let mut dict = MutableDictionary::new();\n        dict.append_word_str(\"separated_identifier_token\", DictWordMetadata::default());\n        dict.append_word_str(\"separated_identifier\", DictWordMetadata::default());\n\n        let mut merged_dict = MergedDictionary::new();\n        merged_dict.add_dictionary(curated_dictionary);\n        merged_dict.add_dictionary(Arc::new(dict));\n\n        let tokens =\n            CollapseIdentifiers::new(Box::new(PlainEnglish), Box::new(Arc::new(merged_dict)))\n                .parse_str(source);\n        assert_eq!(tokens.len(), 11);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/parsers/isolate_english.rs",
    "content": "use super::{Parser, Token, TokenStringExt};\nuse crate::language_detection::is_likely_english;\nuse crate::spell::Dictionary;\n\n/// A parser that wraps another, using heuristics to quickly redact paragraphs of a document that aren't\n/// intended to be English text.\npub struct IsolateEnglish<D: Dictionary> {\n    inner: Box<dyn Parser>,\n    dict: D,\n}\n\nimpl<D: Dictionary> IsolateEnglish<D> {\n    pub fn new(inner: Box<dyn Parser>, dictionary: D) -> Self {\n        Self {\n            inner,\n            dict: dictionary,\n        }\n    }\n}\n\nimpl<D: Dictionary> Parser for IsolateEnglish<D> {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let tokens = self.inner.parse(source);\n\n        let mut english_tokens: Vec<Token> = Vec::with_capacity(tokens.len());\n\n        for chunk in tokens.iter_chunks() {\n            if chunk.len() < 4 || is_likely_english(chunk, source, &self.dict) {\n                english_tokens.extend_from_slice(chunk);\n            }\n        }\n\n        english_tokens\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::IsolateEnglish;\n    use crate::spell::FstDictionary;\n    use crate::{Document, TokenStringExt, parsers::PlainEnglish};\n\n    /// Assert that the provided text contains _no_ chunks of valid English\n    fn assert_no_english(text: &str) {\n        let dict = FstDictionary::curated();\n\n        let document = Document::new(\n            text,\n            &IsolateEnglish::new(Box::new(PlainEnglish), dict.clone()),\n            &dict,\n        );\n\n        assert_eq!(document.iter_words().count(), 0);\n        assert_eq!(document.iter_punctuations().count(), 0);\n    }\n\n    /// Assert that, once stripped of non-English chunks, the resulting document looks like another\n    /// piece of text.\n    fn assert_stripped_english(source: &str, target: &str) {\n        let dict = FstDictionary::curated();\n\n        let document = Document::new(\n            source,\n            &IsolateEnglish::new(Box::new(PlainEnglish), dict.clone()),\n            &dict,\n        );\n\n        assert_eq!(document.to_string(), target);\n    }\n\n    #[test]\n    fn mixed_spanish_english_breakfast() {\n        assert_no_english(\n            \"En la mañana, como a dish de los huevos, un poquito of tocino, y a lot of leche.\",\n        );\n    }\n\n    #[test]\n    fn mixed_spanish_english_politics() {\n        assert_no_english(\n            \"No estoy of acuerdo con the politics de Los estados unidos ahora; pienso que we need mas diversidad in el gobierno.\",\n        );\n    }\n\n    #[test]\n    fn english_no_edit_motto() {\n        assert_stripped_english(\n            \"I have a simple motto in life: \",\n            \"I have a simple motto in life: \",\n        );\n    }\n\n    #[test]\n    fn chunked_trad_chinese_english() {\n        assert_stripped_english(\n            \"I have a simple motto in life: 如果你渴了，就喝水。\",\n            \"I have a simple motto in life:\",\n        );\n    }\n\n    #[test]\n    fn chunked_trad_polish_english() {\n        assert_stripped_english(\n            \"I have a simple motto in life: jeśli jesteś spragniony, napij się wody.\",\n            \"I have a simple motto in life:\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/parsers/markdown.rs",
    "content": "use std::collections::VecDeque;\n\nuse serde::{Deserialize, Serialize};\n\nuse super::{Parser, PlainEnglish};\nuse crate::{Span, Token, TokenKind, TokenStringExt, VecExt, offsets::build_byte_to_char_map};\n\n/// A parser that wraps the [`PlainEnglish`] parser that allows one to parse\n/// CommonMark files.\n///\n/// Will ignore code blocks and tables.\n#[derive(Default, Clone, Debug, Copy)]\npub struct Markdown {\n    options: MarkdownOptions,\n}\n\n#[derive(Copy, Clone, Debug, Serialize, Deserialize)]\n#[non_exhaustive]\npub struct MarkdownOptions {\n    pub ignore_link_title: bool,\n}\n\n// Clippy rule excepted because this can easily be expanded later\n#[allow(clippy::derivable_impls)]\nimpl Default for MarkdownOptions {\n    fn default() -> Self {\n        Self {\n            ignore_link_title: false,\n        }\n    }\n}\n\nimpl Markdown {\n    pub fn new(options: MarkdownOptions) -> Self {\n        Self { options }\n    }\n\n    /// Remove hidden Wikilink target text.\n    ///\n    /// As in the stuff to the left of the pipe operator:\n    ///\n    /// ```markdown\n    /// [[Target text|Display Text]]\n    /// ```\n    fn remove_hidden_wikilink_tokens(tokens: &mut Vec<Token>) {\n        let mut to_remove = VecDeque::new();\n\n        for pipe_idx in tokens.iter_pipe_indices() {\n            if pipe_idx < 2 {\n                continue;\n            }\n\n            // Locate preceding `[[`\n            let mut cursor = pipe_idx - 2;\n            let mut open_bracket = None;\n\n            loop {\n                let Some((a, b)) = tokens.get(cursor).zip(tokens.get(cursor + 1)) else {\n                    break;\n                };\n\n                if a.kind.is_newline() {\n                    break;\n                }\n\n                if a.kind.is_open_square() && b.kind.is_open_square() {\n                    open_bracket = Some(cursor);\n                    break;\n                } else if cursor == 0 {\n                    break;\n                } else {\n                    cursor -= 1;\n                }\n            }\n\n            // Locate succeeding `[[`\n            cursor = pipe_idx + 1;\n            let mut close_bracket = None;\n\n            loop {\n                let Some((a, b)) = tokens.get(cursor).zip(tokens.get(cursor + 1)) else {\n                    break;\n                };\n\n                if a.kind.is_newline() {\n                    break;\n                }\n\n                if a.kind.is_close_square() && b.kind.is_close_square() {\n                    close_bracket = Some(cursor);\n                    break;\n                } else {\n                    cursor += 1;\n                }\n            }\n\n            if let Some(open_bracket_idx) = open_bracket\n                && let Some(close_bracket_idx) = close_bracket\n            {\n                to_remove.extend(open_bracket_idx..=pipe_idx);\n                to_remove.push_back(close_bracket_idx);\n                to_remove.push_back(close_bracket_idx + 1);\n            }\n        }\n\n        tokens.remove_indices(to_remove);\n    }\n\n    /// Remove the brackets from Wikilinks without pipe operators.\n    /// For __those__ Wikilinks, see [`Self::remove_hidden_wikilink_tokens`]\n    fn remove_wikilink_brackets(tokens: &mut Vec<Token>) {\n        let mut to_remove = VecDeque::new();\n        let mut open_brackets = None;\n\n        let mut cursor = 0;\n\n        loop {\n            let Some((a, b)) = tokens.get(cursor).zip(tokens.get(cursor + 1)) else {\n                break;\n            };\n\n            if let Some(open_brackets_idx) = open_brackets {\n                if a.kind.is_newline() {\n                    open_brackets = None;\n                    cursor += 1;\n                    continue;\n                }\n\n                if a.kind.is_close_square() && b.kind.is_close_square() {\n                    to_remove.push_back(open_brackets_idx);\n                    to_remove.push_back(open_brackets_idx + 1);\n\n                    to_remove.push_back(cursor);\n                    to_remove.push_back(cursor + 1);\n\n                    open_brackets = None;\n                }\n            } else if a.kind.is_open_square() && b.kind.is_open_square() {\n                open_brackets = Some(cursor);\n            }\n\n            cursor += 1;\n        }\n\n        tokens.remove_indices(to_remove);\n    }\n}\n\nimpl Parser for Markdown {\n    /// This implementation is quite gross to look at, but it works.\n    /// If any issues arise, it would likely help to refactor this out first.\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let english_parser = PlainEnglish;\n\n        let source_str: String = source.iter().collect();\n        let md_parser = pulldown_cmark::Parser::new_ext(\n            &source_str,\n            pulldown_cmark::Options::all()\n                .difference(pulldown_cmark::Options::ENABLE_SMART_PUNCTUATION),\n        );\n\n        let mut tokens = Vec::new();\n\n        // Build a mapping from the inner parser's byte-based indexing to Harper's char-based\n        // indexing.\n        let byte_to_char = build_byte_to_char_map(&source_str);\n\n        let mut stack = Vec::new();\n\n        // NOTE: the range spits out __byte__ indices, not char indices.\n        // This is why we keep track above.\n        for (event, range) in md_parser.into_offset_iter() {\n            let span_start = byte_to_char[range.start];\n            let span_end = byte_to_char[range.end];\n\n            match event {\n                pulldown_cmark::Event::SoftBreak => {\n                    tokens.push(Token {\n                        span: Span::new_with_len(span_start, 1),\n                        kind: TokenKind::Newline(1),\n                    });\n                }\n                pulldown_cmark::Event::HardBreak => {\n                    tokens.push(Token {\n                        span: Span::new_with_len(span_start, 1),\n                        kind: TokenKind::Newline(2),\n                    });\n                }\n                pulldown_cmark::Event::Start(pulldown_cmark::Tag::List(v)) => {\n                    tokens.push(Token {\n                        span: Span::empty(span_start),\n                        kind: TokenKind::Newline(2),\n                    });\n                    stack.push(pulldown_cmark::Tag::List(v));\n                }\n                pulldown_cmark::Event::Start(tag) => {\n                    if matches!(tag, pulldown_cmark::Tag::Heading { .. }) {\n                        tokens.push(Token {\n                            span: Span::empty(span_start),\n                            kind: TokenKind::HeadingStart,\n                        });\n                    }\n\n                    stack.push(tag)\n                }\n                pulldown_cmark::Event::End(pulldown_cmark::TagEnd::Paragraph)\n                | pulldown_cmark::Event::End(pulldown_cmark::TagEnd::Item)\n                | pulldown_cmark::Event::End(pulldown_cmark::TagEnd::Heading(_))\n                | pulldown_cmark::Event::End(pulldown_cmark::TagEnd::CodeBlock)\n                | pulldown_cmark::Event::End(pulldown_cmark::TagEnd::TableCell) => {\n                    tokens.push(Token {\n                        // We cannot use `span_start` here, as it will still point to the\n                        // first character of the `Event` at this point. Instead, we use the\n                        // position of the previous token's last character. This ensures the\n                        // paragraph break is placed at the end of the content, not its beginning.\n                        // For more info, see: https://github.com/Automattic/harper/pull/1239.\n                        span: Span::empty(tokens.last().map_or(0, |last| last.span.end)),\n                        kind: TokenKind::ParagraphBreak,\n                    });\n                    stack.pop();\n                }\n                pulldown_cmark::Event::End(_) => {\n                    stack.pop();\n                }\n                pulldown_cmark::Event::InlineMath(_)\n                | pulldown_cmark::Event::DisplayMath(_)\n                | pulldown_cmark::Event::Code(_) => {\n                    let chunk_len = span_end - span_start;\n\n                    tokens.push(Token {\n                        span: Span::new_with_len(span_start, chunk_len),\n                        kind: TokenKind::Unlintable,\n                    });\n                }\n                pulldown_cmark::Event::Text(_text) => {\n                    let chunk_len = span_end - span_start;\n\n                    if let Some(tag) = stack.last() {\n                        use pulldown_cmark::Tag;\n\n                        if matches!(tag, Tag::CodeBlock(..)) {\n                            tokens.push(Token {\n                                span: Span::new_with_len(span_start, chunk_len),\n\n                                kind: TokenKind::Unlintable,\n                            });\n                            continue;\n                        }\n                        if matches!(tag, Tag::Link { .. }) && self.options.ignore_link_title {\n                            tokens.push(Token {\n                                span: Span::new_with_len(span_start, chunk_len),\n                                kind: TokenKind::Unlintable,\n                            });\n                            continue;\n                        }\n                        if !(matches!(tag, Tag::Paragraph)\n                            || (matches!(tag, Tag::Link { .. }) && !self.options.ignore_link_title)\n                            || matches!(tag, Tag::Heading { .. })\n                            || matches!(tag, Tag::Item)\n                            || matches!(tag, Tag::TableCell)\n                            || matches!(tag, Tag::Emphasis)\n                            || matches!(tag, Tag::Strong)\n                            || matches!(tag, Tag::Strikethrough))\n                        {\n                            continue;\n                        }\n                    }\n\n                    let mut new_tokens = english_parser.parse(&source[span_start..span_end]);\n\n                    new_tokens\n                        .iter_mut()\n                        .for_each(|token| token.span.push_by(span_start));\n\n                    tokens.append(&mut new_tokens);\n                }\n                // TODO: Support via `harper-html`\n                pulldown_cmark::Event::Html(_) | pulldown_cmark::Event::InlineHtml(_) => {\n                    let size = span_end - span_start;\n                    tokens.push(Token {\n                        span: Span::new_with_len(span_start, size),\n                        kind: TokenKind::Unlintable,\n                    });\n                }\n                _ => (),\n            }\n        }\n\n        if matches!(\n            tokens.last(),\n            Some(Token {\n                kind: TokenKind::Newline(_) | TokenKind::ParagraphBreak,\n                ..\n            })\n        ) && source.last() != Some(&'\\n')\n        {\n            tokens.pop();\n        }\n\n        Self::remove_hidden_wikilink_tokens(&mut tokens);\n        Self::remove_wikilink_brackets(&mut tokens);\n\n        tokens\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::super::StrParser;\n    use super::Markdown;\n    use crate::{Punctuation, TokenKind, TokenStringExt, parsers::markdown::MarkdownOptions};\n\n    #[test]\n    fn survives_emojis() {\n        let source = r\"🤷.\";\n\n        Markdown::default().parse_str(source);\n    }\n\n    /// Check whether the Markdown parser will emit a breaking newline\n    /// at the end of each input.\n    ///\n    /// It should _not_ do this.\n    #[test]\n    fn ends_with_newline() {\n        let source = \"This is a test.\";\n\n        let tokens = Markdown::default().parse_str(source);\n        assert_ne!(tokens.len(), 0);\n        assert!(!tokens.last().unwrap().kind.is_newline());\n    }\n\n    #[test]\n    fn math_becomes_unlintable() {\n        let source = r\"$\\Katex$ $\\text{is}$ $\\text{great}$.\";\n\n        let tokens = Markdown::default().parse_str(source);\n        assert_eq!(\n            tokens.iter().map(|t| t.kind.clone()).collect::<Vec<_>>(),\n            vec![\n                TokenKind::Unlintable,\n                TokenKind::Space(1),\n                TokenKind::Unlintable,\n                TokenKind::Space(1),\n                TokenKind::Unlintable,\n                TokenKind::Punctuation(Punctuation::Period)\n            ]\n        )\n    }\n\n    #[test]\n    fn hidden_wikilink_text() {\n        let source = r\"[[this is hidden|this is not]]\";\n\n        let tokens = Markdown::default().parse_str(source);\n\n        let token_kinds = tokens.iter().map(|t| t.kind.clone()).collect::<Vec<_>>();\n\n        assert!(matches!(\n            token_kinds.as_slice(),\n            &[\n                TokenKind::Word(_),\n                TokenKind::Space(1),\n                TokenKind::Word(_),\n                TokenKind::Space(1),\n                TokenKind::Word(_),\n            ]\n        ))\n    }\n\n    #[test]\n    fn just_pipe() {\n        let source = r\"|\";\n\n        let tokens = Markdown::default().parse_str(source);\n\n        let token_kinds = tokens.iter().map(|t| t.kind.clone()).collect::<Vec<_>>();\n\n        dbg!(&token_kinds);\n\n        assert!(matches!(\n            token_kinds.as_slice(),\n            &[TokenKind::Punctuation(Punctuation::Pipe)]\n        ))\n    }\n\n    #[test]\n    fn empty_wikilink_text() {\n        let source = r\"[[|]]\";\n\n        let tokens = Markdown::default().parse_str(source);\n\n        let token_kinds = tokens.iter().map(|t| t.kind.clone()).collect::<Vec<_>>();\n\n        dbg!(&token_kinds);\n\n        assert!(matches!(token_kinds.as_slice(), &[]))\n    }\n\n    #[test]\n    fn improper_wikilink_text() {\n        let source = r\"this is shown|this is also shown]]\";\n\n        let tokens = Markdown::default().parse_str(source);\n\n        let token_kinds = tokens.iter().map(|t| t.kind.clone()).collect::<Vec<_>>();\n\n        dbg!(&token_kinds);\n\n        assert!(matches!(\n            token_kinds.as_slice(),\n            &[\n                TokenKind::Word(_),\n                TokenKind::Space(1),\n                TokenKind::Word(_),\n                TokenKind::Space(1),\n                TokenKind::Word(_),\n                TokenKind::Punctuation(Punctuation::Pipe),\n                TokenKind::Word(_),\n                TokenKind::Space(1),\n                TokenKind::Word(_),\n                TokenKind::Space(1),\n                TokenKind::Word(_),\n                TokenKind::Space(1),\n                TokenKind::Word(_),\n                TokenKind::Punctuation(Punctuation::CloseSquare),\n                TokenKind::Punctuation(Punctuation::CloseSquare),\n            ]\n        ))\n    }\n\n    #[test]\n    fn normal_wikilink() {\n        let source = r\"[[Wikilink]]\";\n        let tokens = Markdown::default().parse_str(source);\n        let token_kinds = tokens.iter().map(|t| t.kind.clone()).collect::<Vec<_>>();\n\n        dbg!(&token_kinds);\n\n        assert!(matches!(token_kinds.as_slice(), &[TokenKind::Word(_)]))\n    }\n\n    #[test]\n    fn html_is_unlintable() {\n        let source = r\"The range of inputs from <ctrl-g> to ctrl-z\";\n        let tokens = Markdown::default().parse_str(source);\n        assert_eq!(tokens.iter_unlintables().count(), 1);\n    }\n\n    #[test]\n    fn link_title_unlintable() {\n        let parser = Markdown::new(MarkdownOptions {\n            ignore_link_title: true,\n            ..MarkdownOptions::default()\n        });\n        let source = r\"[elijah-potter/harper](https://github.com/elijah-potter/harper)\";\n        let tokens = parser.parse_str(source);\n        let token_kinds = tokens.iter().map(|t| t.kind.clone()).collect::<Vec<_>>();\n\n        dbg!(&token_kinds);\n\n        assert!(matches!(token_kinds.as_slice(), &[TokenKind::Unlintable]))\n    }\n\n    #[test]\n    fn issue_194() {\n        let source = r\"<http://localhost:9093>\";\n        let parser = Markdown::new(MarkdownOptions {\n            ignore_link_title: true,\n            ..MarkdownOptions::default()\n        });\n        let token_kinds = parser\n            .parse_str(source)\n            .iter()\n            .map(|t| t.kind.clone())\n            .collect::<Vec<_>>();\n\n        assert!(matches!(token_kinds.as_slice(), &[TokenKind::Unlintable]));\n    }\n\n    #[test]\n    fn respects_link_title_config() {\n        let source = r\"[elijah-potter/harper](https://github.com/elijah-potter/harper)\";\n        let parser = Markdown::new(MarkdownOptions {\n            ignore_link_title: true,\n            ..MarkdownOptions::default()\n        });\n        let token_kinds = parser\n            .parse_str(source)\n            .iter()\n            .map(|t| t.kind.clone())\n            .collect::<Vec<_>>();\n\n        assert!(matches!(token_kinds.as_slice(), &[TokenKind::Unlintable]));\n\n        let parser = Markdown::new(MarkdownOptions {\n            ignore_link_title: false,\n            ..MarkdownOptions::default()\n        });\n        let token_kinds = parser\n            .parse_str(source)\n            .iter()\n            .map(|t| t.kind.clone())\n            .collect::<Vec<_>>();\n\n        dbg!(&token_kinds);\n\n        assert!(matches!(\n            token_kinds.as_slice(),\n            &[\n                TokenKind::Word(_),\n                TokenKind::Punctuation(Punctuation::Hyphen),\n                TokenKind::Word(_),\n                TokenKind::Punctuation(Punctuation::ForwardSlash),\n                TokenKind::Word(_)\n            ]\n        ));\n    }\n\n    /// Test that code blocks are immediately followed by a paragraph break.\n    #[test]\n    fn issue_880() {\n        let source = r#\"\nParagraph.\n\n```\nCode block\n```\nParagraph.\n        \"#;\n        let parser = Markdown::new(MarkdownOptions::default());\n        let tokens = parser.parse_str(source);\n        let token_kinds = tokens.iter().map(|t| t.kind.clone()).collect::<Vec<_>>();\n\n        dbg!(&token_kinds);\n\n        assert!(matches!(\n            token_kinds.as_slice(),\n            &[\n                TokenKind::Word(_),\n                TokenKind::Punctuation(_),\n                TokenKind::ParagraphBreak,\n                TokenKind::Unlintable,\n                TokenKind::ParagraphBreak,\n                TokenKind::Word(_),\n                TokenKind::Punctuation(_),\n            ]\n        ))\n    }\n\n    /// Helps ensure that ending tokens (like `ParagraphBreak`) don't get erroneously placed at\n    /// the beginning of a sentence. This kind of behavior can cause crashes, as seen in\n    /// [#1181](https://github.com/Automattic/harper/issues/1181).\n    #[test]\n    fn no_end_token_incorrectly_ending_at_zero() {\n        let source = \"Something\\n\";\n        let parser = Markdown::new(MarkdownOptions::default());\n        let tokens = parser.parse_str(source);\n        assert_ne!(tokens.last().unwrap().span.end, 0);\n    }\n\n    #[test]\n    fn hang() {\n        let opts = MarkdownOptions::default();\n        let parser = Markdown::new(opts);\n        let _res = parser.parse_str(\"[[#|]]:A]\");\n    }\n\n    #[test]\n    fn hang2() {\n        // This seems to only be a java specific problem...\n        let opts = MarkdownOptions::default();\n        let parser = Markdown::new(opts);\n        let _res = parser.parse_str(\"//{@j\");\n    }\n\n    #[test]\n    fn simple_headings_are_marked() {\n        let opts = MarkdownOptions::default();\n        let parser = Markdown::new(opts);\n        let tokens = parser.parse_str(\"# This is a simple heading\");\n\n        assert_eq!(tokens.iter_heading_starts().count(), 1);\n        assert_eq!(tokens.iter_headings().count(), 1);\n    }\n\n    #[test]\n    fn multiple_headings_are_marked() {\n        let opts = MarkdownOptions::default();\n        let parser = Markdown::new(opts);\n        let tokens = parser.parse_str(\n            r#\"# This is a simple heading\n\n## This is a second simple heading\"#,\n        );\n\n        assert_eq!(tokens.iter_heading_starts().count(), 2);\n        assert_eq!(tokens.iter_headings().count(), 2);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/parsers/mask.rs",
    "content": "use super::Parser;\nuse crate::mask::Masker;\nuse crate::{Span, Token, TokenKind};\n\n/// Composes a Masker and a Parser to parse only masked chunks of text.\npub struct Mask<M, P>\nwhere\n    M: Masker,\n    P: Parser,\n{\n    pub masker: M,\n    pub parser: P,\n}\n\nimpl<M, P> Mask<M, P>\nwhere\n    M: Masker,\n    P: Parser,\n{\n    pub fn new(masker: M, parser: P) -> Self {\n        Self { masker, parser }\n    }\n}\n\nimpl<M, P> Parser for Mask<M, P>\nwhere\n    M: Masker,\n    P: Parser,\n{\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mask = self.masker.create_mask(source);\n\n        let mut tokens: Vec<Token> = Vec::new();\n\n        let mut last_allowed: Option<Span<char>> = None;\n\n        for (span, content) in mask.iter_allowed(source) {\n            // Check for a line break separating the current chunk from the preceding one.\n            if let Some(last_allowed) = last_allowed {\n                let intervening = Span::new(last_allowed.end, span.start);\n\n                if intervening.get_content(source).contains(&'\\n') {\n                    tokens.push(Token::new(intervening, TokenKind::ParagraphBreak))\n                }\n            }\n\n            let new_tokens = &mut self.parser.parse(content);\n\n            for token in new_tokens.iter_mut() {\n                token.span.push_by(span.start);\n            }\n\n            tokens.append(new_tokens);\n            last_allowed = Some(span);\n        }\n\n        tokens\n    }\n}\n"
  },
  {
    "path": "harper-core/src/parsers/mod.rs",
    "content": "//! Adds support for parsing various programming and markup languages through a unified trait: [`Parser`].\n\nmod collapse_identifiers;\nmod isolate_english;\nmod markdown;\nmod mask;\nmod oops_all_headings;\nmod org_mode;\nmod plain_english;\n\nuse blanket::blanket;\npub use collapse_identifiers::CollapseIdentifiers;\npub use isolate_english::IsolateEnglish;\npub use markdown::{Markdown, MarkdownOptions};\npub use mask::Mask;\npub use oops_all_headings::OopsAllHeadings;\npub use org_mode::OrgMode;\npub use plain_english::PlainEnglish;\n\nuse crate::{LSend, Token, TokenStringExt};\n\n#[cfg_attr(feature = \"concurrent\", blanket(derive(Ref, Box, Arc)))]\n#[cfg_attr(not(feature = \"concurrent\"), blanket(derive(Ref, Box, Rc)))]\npub trait Parser: LSend {\n    fn parse(&self, source: &[char]) -> Vec<Token>;\n}\n\npub trait StrParser {\n    fn parse_str(&self, source: impl AsRef<str>) -> Vec<Token>;\n}\n\nimpl<T> StrParser for T\nwhere\n    T: Parser,\n{\n    fn parse_str(&self, source: impl AsRef<str>) -> Vec<Token> {\n        let source: Vec<_> = source.as_ref().chars().collect();\n        self.parse(&source)\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::{Markdown, OrgMode, Parser, PlainEnglish};\n    use crate::Punctuation;\n    use crate::TokenKind::{self, *};\n\n    fn assert_tokens_eq(test_str: impl AsRef<str>, expected: &[TokenKind], parser: &impl Parser) {\n        let chars: Vec<_> = test_str.as_ref().chars().collect();\n        let tokens = parser.parse(&chars);\n        let kinds: Vec<_> = tokens.into_iter().map(|v| v.kind).collect();\n\n        assert_eq!(&kinds, expected)\n    }\n\n    fn assert_tokens_eq_plain(test_str: impl AsRef<str>, expected: &[TokenKind]) {\n        assert_tokens_eq(test_str, expected, &PlainEnglish);\n    }\n\n    fn assert_tokens_eq_md(test_str: impl AsRef<str>, expected: &[TokenKind]) {\n        assert_tokens_eq(test_str, expected, &Markdown::default())\n    }\n\n    fn assert_tokens_eq_org(test_str: impl AsRef<str>, expected: &[TokenKind]) {\n        assert_tokens_eq(test_str, expected, &OrgMode)\n    }\n\n    #[test]\n    fn single_letter() {\n        assert_tokens_eq_plain(\"a\", &[TokenKind::blank_word()])\n    }\n\n    #[test]\n    fn sentence() {\n        assert_tokens_eq_plain(\n            \"hello world, my friend\",\n            &[\n                TokenKind::blank_word(),\n                Space(1),\n                TokenKind::blank_word(),\n                Punctuation(Punctuation::Comma),\n                Space(1),\n                TokenKind::blank_word(),\n                Space(1),\n                TokenKind::blank_word(),\n            ],\n        )\n    }\n\n    #[test]\n    fn sentence_md() {\n        assert_tokens_eq_md(\n            \"__hello__ world, [my]() friend\",\n            &[\n                TokenKind::blank_word(),\n                Space(1),\n                TokenKind::blank_word(),\n                Punctuation(Punctuation::Comma),\n                Space(1),\n                TokenKind::blank_word(),\n                Space(1),\n                TokenKind::blank_word(),\n            ],\n        );\n    }\n\n    #[test]\n    fn inserts_newlines() {\n        assert_tokens_eq_md(\n            \"__hello__ world,\\n\\n[my]() friend\",\n            &[\n                TokenKind::blank_word(),\n                Space(1),\n                TokenKind::blank_word(),\n                Punctuation(Punctuation::Comma),\n                ParagraphBreak,\n                TokenKind::blank_word(),\n                Space(1),\n                TokenKind::blank_word(),\n            ],\n        );\n    }\n\n    /// Make sure that the English parser correctly identifies non-English\n    /// characters as part of the same word.\n    #[test]\n    fn parses_non_english() {\n        assert_tokens_eq_plain(\"Løvetann\", &[TokenKind::blank_word()]);\n        assert_tokens_eq_plain(\"Naïve\", &[TokenKind::blank_word()]);\n    }\n\n    #[test]\n    fn org_mode_basic() {\n        assert_tokens_eq_org(\n            \"hello world\",\n            &[TokenKind::blank_word(), Space(1), TokenKind::blank_word()],\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/parsers/oops_all_headings.rs",
    "content": "use crate::{Span, Token, TokenKind};\n\nuse super::Parser;\n\n/// A parser that wraps another, forcing the entirety of the document to be composed of headings.\npub struct OopsAllHeadings<P: Parser + 'static> {\n    inner: P,\n}\n\nimpl<P: Parser + 'static> OopsAllHeadings<P> {\n    pub fn new(inner: P) -> Self {\n        Self { inner }\n    }\n}\n\nimpl<P: Parser + 'static> Parser for OopsAllHeadings<P> {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let inner = self.inner.parse(source);\n        let mut output = Vec::with_capacity(inner.capacity());\n\n        output.push(Token {\n            span: Span::default(),\n            kind: TokenKind::HeadingStart,\n        });\n\n        let mut iter = inner.into_iter().peekable();\n\n        while let Some(tok) = iter.next() {\n            let heading_start = if tok.kind.is_paragraph_break()\n                && iter.peek().is_some_and(|t| !t.kind.is_heading_start())\n            {\n                Some(Token {\n                    span: Span::empty(tok.span.end),\n                    kind: TokenKind::HeadingStart,\n                })\n            } else {\n                None\n            };\n\n            output.push(tok);\n\n            if let Some(extra) = heading_start {\n                output.push(extra);\n            }\n        }\n\n        output\n    }\n}\n"
  },
  {
    "path": "harper-core/src/parsers/org_mode.rs",
    "content": "use super::{Parser, PlainEnglish};\nuse crate::{Span, Token, TokenKind};\n\n#[derive(Debug, PartialEq, Copy, Clone)]\nenum SourceBlockMarker {\n    Begin,\n    End,\n}\n\n// Check if a line starts with a header (starts with one or more '*')\nfn is_header_line(chars: &[char], start: usize) -> bool {\n    chars.get(start).is_some_and(|c| *c == '*')\n}\n\n// Check if a line starts with a source block begin/end\nfn is_source_block_marker(chars: &[char], start: usize) -> Option<SourceBlockMarker> {\n    let line = get_line_from_start(chars, start);\n    let line_str: String = line.iter().collect();\n    let line_str = line_str.trim();\n\n    if line_str.starts_with(\"#+BEGIN_SRC\") || line_str.starts_with(\"#+begin_src\") {\n        Some(SourceBlockMarker::Begin)\n    } else if line_str.starts_with(\"#+END_SRC\") || line_str.starts_with(\"#+end_src\") {\n        Some(SourceBlockMarker::End)\n    } else {\n        None\n    }\n}\n\n// Check if a line is a directive (starts with #+)\nfn is_directive(chars: &[char], start: usize) -> bool {\n    if start + 1 >= chars.len() {\n        return false;\n    }\n    chars[start] == '#' && chars[start + 1] == '+'\n}\n\n// Check if a line is a list item (starts with -, +, or number)\nfn is_list_item(chars: &[char], start: usize) -> bool {\n    let mut pos = start;\n\n    // initial whitespaces or tabs\n    while pos < chars.len() && (chars[pos] == ' ' || chars[pos] == '\\t') {\n        pos += 1;\n    }\n\n    if pos >= chars.len() {\n        return false;\n    }\n\n    // Check for - or + followed by space\n    if (chars[pos] == '-' || chars[pos] == '+') && pos + 1 < chars.len() && chars[pos + 1] == ' ' {\n        return true;\n    }\n\n    // Check for numbered list\n    if chars[pos].is_ascii_digit() {\n        let mut num_pos = pos;\n        while num_pos < chars.len() && chars[num_pos].is_ascii_digit() {\n            num_pos += 1;\n        }\n\n        if num_pos < chars.len()\n            && (chars[num_pos] == '.' || chars[num_pos] == ')')\n            && num_pos + 1 < chars.len()\n            && chars[num_pos + 1] == ' '\n        {\n            return true;\n        }\n    }\n\n    false\n}\n\n// Convert tabs to spaces in list items to avoid French spaces error\nfn normalize_list_item_whitespace(chars: &[char]) -> Vec<char> {\n    let mut result = Vec::new();\n    let mut init_list = false;\n    for &ch in chars {\n        if !init_list && ch == '\\t' {\n            result.push(' ');\n            init_list = true;\n        } else {\n            result.push(ch);\n        }\n    }\n    result\n}\n\n// Get the rest of the line from a starting position\nfn get_line_from_start(chars: &[char], start: usize) -> &[char] {\n    let mut end = start;\n    while end < chars.len() && chars[end] != '\\n' {\n        end += 1;\n    }\n    &chars[start..end]\n}\n\n// Find the end of the current line starting from position\nfn find_line_end(chars: &[char], start: usize) -> usize {\n    let mut pos = start;\n    while pos < chars.len() && chars[pos] != '\\n' {\n        pos += 1;\n    }\n    if pos < chars.len() && chars[pos] == '\\n' {\n        pos + 1 // Include the newline\n    } else {\n        pos\n    }\n}\n\n// Find the start of the line containing the given position\nfn find_line_start(chars: &[char], pos: usize) -> usize {\n    let mut start = pos;\n    while start > 0 && chars[start - 1] != '\\n' {\n        start -= 1;\n    }\n    start\n}\n\n/// A parser that wraps the [`PlainEnglish`] parser that allows one to parse\n/// Org-mode files.\n///\n/// Will ignore code blocks, source blocks, and other org-mode specific elements\n/// that should not be linted for prose.\n#[derive(Default, Clone, Debug, Copy)]\npub struct OrgMode;\n\nimpl OrgMode {}\n\nimpl Parser for OrgMode {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let english_parser = PlainEnglish;\n        let mut tokens = Vec::new();\n        let mut cursor = 0;\n        let mut in_source_block = false;\n\n        while cursor < source.len() {\n            let line_start = find_line_start(source, cursor);\n\n            // Check for source block markers\n            let source_marker = is_source_block_marker(source, line_start);\n            if let Some(marker) = source_marker {\n                in_source_block = marker == SourceBlockMarker::Begin;\n            }\n\n            // If we're in a source block or found a source block marker, make the line unlintable\n            if in_source_block || source_marker.is_some() {\n                let line_end = find_line_end(source, line_start);\n                tokens.push(Token {\n                    span: Span::new(line_start, line_end),\n                    kind: TokenKind::Unlintable,\n                });\n                cursor = line_end;\n                continue;\n            }\n\n            // Check for headers\n            if is_header_line(source, line_start) {\n                let line_end = find_line_end(source, line_start);\n\n                // Find where the header text starts (after the stars and spaces)\n                let mut header_text_start = line_start;\n                while header_text_start < line_end\n                    && (source[header_text_start] == '*' || source[header_text_start] == ' ')\n                {\n                    header_text_start += 1;\n                }\n\n                // If there's actual text after the stars, parse it\n                if header_text_start < line_end {\n                    let mut header_tokens =\n                        english_parser.parse(&source[header_text_start..line_end]);\n                    header_tokens\n                        .iter_mut()\n                        .for_each(|token| token.span.push_by(header_text_start));\n                    tokens.append(&mut header_tokens);\n                }\n\n                // Add paragraph break after header\n                tokens.push(Token {\n                    span: Span::empty(line_end.saturating_sub(1)),\n                    kind: TokenKind::ParagraphBreak,\n                });\n\n                cursor = line_end;\n                continue;\n            }\n\n            // Check for directives (#+SOMETHING)\n            if is_directive(source, line_start) {\n                let line_end = find_line_end(source, line_start);\n                tokens.push(Token {\n                    span: Span::new(line_start, line_end),\n                    kind: TokenKind::Unlintable,\n                });\n                cursor = line_end;\n                continue;\n            }\n\n            // Check for list items and normalize tabs to avoid French spaces\n            if is_list_item(source, line_start) {\n                let line_end = find_line_end(source, line_start);\n                let line_chars = &source[line_start..line_end];\n                let normalized_chars = normalize_list_item_whitespace(line_chars);\n\n                let mut line_tokens = english_parser.parse(&normalized_chars);\n                line_tokens\n                    .iter_mut()\n                    .for_each(|token| token.span.push_by(line_start));\n                tokens.append(&mut line_tokens);\n\n                cursor = line_end;\n                continue;\n            }\n\n            // For normal text, parse with the English parser\n            let line_end = find_line_end(source, cursor);\n            if cursor < line_end {\n                let mut line_tokens = english_parser.parse(&source[cursor..line_end]);\n                line_tokens\n                    .iter_mut()\n                    .for_each(|token| token.span.push_by(cursor));\n                tokens.append(&mut line_tokens);\n            }\n\n            cursor = line_end;\n        }\n\n        // Remove trailing newline/paragraph break tokens if the source doesn't actually end with a newline.\n        if matches!(\n            tokens.last(),\n            Some(Token {\n                kind: TokenKind::Newline(_) | TokenKind::ParagraphBreak,\n                ..\n            })\n        ) && source.last() != Some(&'\\n')\n        {\n            tokens.pop();\n        }\n\n        tokens\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::super::StrParser;\n    use super::OrgMode;\n    use crate::TokenKind;\n\n    #[test]\n    fn simple_text() {\n        let source = \"This is simple text.\";\n        let tokens = OrgMode.parse_str(source);\n        assert!(!tokens.is_empty());\n        assert!(tokens.iter().any(|t| matches!(t.kind, TokenKind::Word(_))));\n    }\n\n    #[test]\n    fn header_parsing() {\n        let source = \"* This is a header\\nThis is regular text.\";\n        let tokens = OrgMode.parse_str(source);\n        let token_kinds: Vec<_> = tokens.iter().map(|t| &t.kind).collect();\n\n        // Should have words from header and paragraph break\n        assert!(token_kinds.iter().any(|k| matches!(k, TokenKind::Word(_))));\n        assert!(\n            token_kinds\n                .iter()\n                .any(|k| matches!(k, TokenKind::ParagraphBreak))\n        );\n    }\n\n    #[test]\n    fn multiple_level_headers() {\n        let source = \"** Second level header\\n*** Third level header\";\n        let tokens = OrgMode.parse_str(source);\n        let token_kinds: Vec<_> = tokens.iter().map(|t| &t.kind).collect();\n\n        // Should parse text from both headers\n        let word_count = token_kinds\n            .iter()\n            .filter(|k| matches!(k, TokenKind::Word(_)))\n            .count();\n        assert!(word_count >= 4); // \"Second\", \"level\", \"Third\", \"header\"\n    }\n\n    #[test]\n    fn source_block_unlintable() {\n        let source = r#\"Regular text.\n#+BEGIN_SRC rust\nfn main() {\n    println!(\"Hello, world!\");\n}\n#+END_SRC\nMore regular text.\"#;\n\n        let tokens = OrgMode.parse_str(source);\n        let unlintable_count = tokens\n            .iter()\n            .filter(|t| matches!(t.kind, TokenKind::Unlintable))\n            .count();\n\n        // Should have unlintable tokens for the source block lines\n        assert!(unlintable_count > 0);\n\n        // Should still have regular words from the non-source-block text\n        assert!(tokens.iter().any(|t| matches!(t.kind, TokenKind::Word(_))));\n    }\n\n    #[test]\n    fn directive_unlintable() {\n        let source = r#\"#+TITLE: My Document\n#+AUTHOR: Test Author\nThis is regular text.\"#;\n\n        let tokens = OrgMode.parse_str(source);\n        let unlintable_count = tokens\n            .iter()\n            .filter(|t| matches!(t.kind, TokenKind::Unlintable))\n            .count();\n\n        // Should have unlintable tokens for directives\n        assert_eq!(unlintable_count, 2);\n\n        // Should still have regular words\n        assert!(tokens.iter().any(|t| matches!(t.kind, TokenKind::Word(_))));\n    }\n\n    #[test]\n    fn case_insensitive_source_blocks() {\n        let source = r#\"#+begin_src python\nprint(\"hello\")\n#+end_src\"#;\n\n        let tokens = OrgMode.parse_str(source);\n        let unlintable_count = tokens\n            .iter()\n            .filter(|t| matches!(t.kind, TokenKind::Unlintable))\n            .count();\n\n        // All lines should be unlintable\n        assert_eq!(unlintable_count, 3);\n    }\n\n    #[test]\n    fn empty_header() {\n        let source = \"*\\nRegular text.\";\n        let tokens = OrgMode.parse_str(source);\n\n        // Should handle empty headers gracefully\n        assert!(tokens.iter().any(|t| matches!(t.kind, TokenKind::Word(_))));\n    }\n\n    #[test]\n    fn no_trailing_newline() {\n        let source = \"Simple text without newline\";\n        let tokens = OrgMode.parse_str(source);\n\n        // Should not end with newline token if source doesn't\n        assert!(!tokens.last().unwrap().kind.is_newline());\n    }\n\n    #[test]\n    fn list_items_with_tabs() {\n        let source = \"- First item\\n\\t- Indented with tab\\n+ Second item\\n1. Numbered item\";\n        let tokens = OrgMode.parse_str(source);\n\n        assert!(tokens.iter().any(|t| matches!(t.kind, TokenKind::Word(_))));\n\n        let unlintable_count = tokens\n            .iter()\n            .filter(|t| matches!(t.kind, TokenKind::Unlintable))\n            .count();\n        assert_eq!(unlintable_count, 0);\n    }\n\n    #[test]\n    fn mixed_list_formats() {\n        let source = r#\"- Bullet item\n1. Numbered item\n+ Plus item\n2) Parenthesis numbered\"#;\n\n        let tokens = OrgMode.parse_str(source);\n\n        // Should recognize all list formats\n        let word_count = tokens\n            .iter()\n            .filter(|t| matches!(t.kind, TokenKind::Word(_)))\n            .count();\n\n        assert!(word_count == 8, \"{:?}\", tokens); // \"Bullet\", \"item\", \"Numbered\", \"item\", \"Plus\", \"item\", \"Parenthesis\", \"numbered\"\n    }\n}\n"
  },
  {
    "path": "harper-core/src/parsers/plain_english.rs",
    "content": "use super::Parser;\nuse crate::Token;\nuse crate::lexing::{lex_english_token, lex_with};\n\n/// A parser that will attempt to lex as many tokens as possible,\n/// without discrimination and until the end of input.\n#[derive(Clone, Copy)]\npub struct PlainEnglish;\n\nimpl Parser for PlainEnglish {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        lex_with(source, lex_english_token)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/any_pattern.rs",
    "content": "use crate::Token;\n\nuse super::SingleTokenPattern;\n\n/// Matches any single token.\npub struct AnyPattern;\n\nimpl SingleTokenPattern for AnyPattern {\n    fn matches_token(&self, _token: &Token, _source: &[char]) -> bool {\n        true\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/derived_from.rs",
    "content": "use crate::spell::WordId;\n\nuse super::Pattern;\n\n/// A [Pattern] that looks for Word tokens that are either derived from a given word, or the word\n/// itself.\n///\n/// For example, this will match \"call\" as well as \"recall\", \"calling\", etc.\npub struct DerivedFrom {\n    word_id: WordId,\n}\n\nimpl DerivedFrom {\n    pub fn new_from_str(word: &str) -> DerivedFrom {\n        Self::new(WordId::from_word_str(word))\n    }\n\n    pub fn new_from_chars(word: &[char]) -> DerivedFrom {\n        Self::new(WordId::from_word_chars(word))\n    }\n\n    pub fn new(word_id: WordId) -> Self {\n        Self { word_id }\n    }\n}\n\nimpl Pattern for DerivedFrom {\n    fn matches(&self, tokens: &[crate::Token], source: &[char]) -> Option<usize> {\n        let tok = tokens.first()?;\n        let metadata = tok.kind.as_word()?.as_ref()?;\n\n        if metadata.derived_from == Some(self.word_id) {\n            return Some(1);\n        }\n\n        let chars = tok.span.get_content(source);\n        let word_id = WordId::from_word_chars(chars);\n\n        if word_id == self.word_id {\n            return Some(1);\n        }\n\n        None\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/implies_quantity.rs",
    "content": "use crate::{Token, TokenKind};\n\nuse super::SingleTokenPattern;\n\n/// This struct does two things.\n///\n/// First, it acts as a pattern that looks for phrases that describe a quantity of a noun\n/// that may or may not succeed it.\n///\n/// Second, it determines the implied plurality of that quantity.implies\npub struct ImpliesQuantity;\n\nimpl ImpliesQuantity {\n    pub fn implies_plurality(token: &Token, source: &[char]) -> Option<bool> {\n        match &token.kind {\n            TokenKind::Word(Some(lexeme_metadata)) => {\n                if lexeme_metadata.is_determiner() {\n                    return Some(false);\n                }\n\n                let source = token.span.get_content(source);\n\n                match source {\n                    ['a'] => Some(false),\n                    ['a', 'n'] => Some(false),\n                    ['m', 'a', 'n', 'y'] => Some(true),\n                    _ => None,\n                }\n            }\n            TokenKind::Number(number) => Some((number.value.abs() - 1.).abs() > f64::EPSILON),\n            _ => None,\n        }\n    }\n}\n\nimpl SingleTokenPattern for ImpliesQuantity {\n    fn matches_token(&self, token: &Token, source: &[char]) -> bool {\n        Self::implies_plurality(token, source).is_some()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::{\n        Document, Span,\n        patterns::{DocPattern, ImpliesQuantity},\n    };\n\n    #[test]\n    fn number_implies() {\n        let doc = Document::new_plain_english_curated(\"There are 60 minutes in an hour.\");\n\n        assert_eq!(\n            ImpliesQuantity.find_all_matches_in_doc(&doc),\n            vec![Span::new(4, 5), Span::new(10, 11)]\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/indefinite_article.rs",
    "content": "use crate::Token;\n\nuse super::{SingleTokenPattern, WordSet};\n\npub struct IndefiniteArticle {\n    inner: WordSet,\n}\n\nimpl Default for IndefiniteArticle {\n    fn default() -> Self {\n        Self {\n            inner: WordSet::new(&[\"a\", \"an\"]),\n        }\n    }\n}\n\nimpl SingleTokenPattern for IndefiniteArticle {\n    fn matches_token(&self, token: &Token, source: &[char]) -> bool {\n        self.inner.matches_token(token, source)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/inflection_of_be.rs",
    "content": "use super::SingleTokenPattern;\nuse crate::Token;\nuse crate::patterns::WordSet;\n\n/// Matches any inflection of the verb “be”:\n/// `am`, `is`, `are`, `was`, `were`, `be`, `been`, `being`.\npub struct InflectionOfBe {\n    /// If using a `WordSet` proves expensive, we'll switch to something else.\n    inner: WordSet,\n}\n\nimpl Default for InflectionOfBe {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl InflectionOfBe {\n    pub fn new() -> Self {\n        Self {\n            inner: WordSet::new(&[\"be\", \"am\", \"is\", \"are\", \"was\", \"were\", \"been\", \"being\"]),\n        }\n    }\n}\n\nimpl SingleTokenPattern for InflectionOfBe {\n    fn matches_token(&self, token: &Token, source: &[char]) -> bool {\n        self.inner.matches_token(token, source)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/invert.rs",
    "content": "use crate::Token;\n\nuse super::Pattern;\n\n/// A struct that matches any pattern __except__ the one provided.\npub struct Invert {\n    inner: Box<dyn Pattern>,\n}\n\nimpl Invert {\n    pub fn new(inner: impl Pattern + 'static) -> Self {\n        Self {\n            inner: Box::new(inner),\n        }\n    }\n}\n\nimpl Pattern for Invert {\n    fn matches(&self, tokens: &[Token], source: &[char]) -> Option<usize> {\n        if self.inner.matches(tokens, source).is_some() {\n            None\n        } else {\n            Some(1)\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/mod.rs",
    "content": "//! [`Pattern`]s are one of the more powerful ways to query text inside Harper, especially for beginners. They are a simplified abstraction over [`Expr`](crate::expr::Expr).\n//!\n//! Through the [`ExprLinter`](crate::linting::ExprLinter) trait, they make it much easier to\n//! build Harper [rules](crate::linting::Linter).\n//!\n//! See the page about [`SequenceExpr`](crate::expr::SequenceExpr) for a concrete example of their use.\n\nuse crate::{Document, LSend, Span, Token};\n\nmod any_pattern;\nmod derived_from;\nmod implies_quantity;\nmod indefinite_article;\nmod inflection_of_be;\nmod invert;\nmod modal_verb;\nmod nominal_phrase;\nmod prepositional_preceder;\nmod upos_set;\nmod whitespace_pattern;\nmod within_edit_distance;\nmod word;\nmod word_set;\n\npub use any_pattern::AnyPattern;\npub use derived_from::DerivedFrom;\npub use implies_quantity::ImpliesQuantity;\npub use indefinite_article::IndefiniteArticle;\npub use inflection_of_be::InflectionOfBe;\npub use invert::Invert;\npub use modal_verb::ModalVerb;\npub use nominal_phrase::NominalPhrase;\npub use prepositional_preceder::{PrepositionalPrecederPattern, prepositional_preceder};\npub use upos_set::UPOSSet;\npub use whitespace_pattern::WhitespacePattern;\npub use within_edit_distance::WithinEditDistance;\npub use word::Word;\npub use word_set::WordSet;\n\npub trait Pattern: LSend {\n    /// Check if the pattern matches at the start of the given token slice.\n    ///\n    /// Returns the length of the match if successful, or `None` if not.\n    fn matches(&self, tokens: &[Token], source: &[char]) -> Option<usize>;\n}\n\npub trait PatternExt {\n    fn iter_matches(&self, tokens: &[Token], source: &[char]) -> impl Iterator<Item = Span<Token>>;\n\n    /// Search through all tokens to locate all non-overlapping pattern matches.\n    fn find_all_matches(&self, tokens: &[Token], source: &[char]) -> Vec<Span<Token>> {\n        self.iter_matches(tokens, source).collect()\n    }\n}\n\nimpl<P> PatternExt for P\nwhere\n    P: Pattern + ?Sized,\n{\n    fn iter_matches(&self, tokens: &[Token], source: &[char]) -> impl Iterator<Item = Span<Token>> {\n        MatchIter::new(self, tokens, source)\n    }\n}\n\nstruct MatchIter<'a, 'b, 'c, P: ?Sized> {\n    pattern: &'a P,\n    tokens: &'b [Token],\n    source: &'c [char],\n    index: usize,\n}\nimpl<'a, 'b, 'c, P> MatchIter<'a, 'b, 'c, P>\nwhere\n    P: Pattern + ?Sized,\n{\n    fn new(pattern: &'a P, tokens: &'b [Token], source: &'c [char]) -> Self {\n        Self {\n            pattern,\n            tokens,\n            source,\n            index: 0,\n        }\n    }\n}\nimpl<P> Iterator for MatchIter<'_, '_, '_, P>\nwhere\n    P: Pattern + ?Sized,\n{\n    type Item = Span<Token>;\n\n    fn next(&mut self) -> Option<Self::Item> {\n        while self.index < self.tokens.len() {\n            if let Some(len) = self\n                .pattern\n                .matches(&self.tokens[self.index..], self.source)\n            {\n                let span = Span::new_with_len(self.index, len);\n                self.index += len.max(1);\n                return Some(span);\n            } else {\n                self.index += 1;\n            }\n        }\n\n        None\n    }\n}\n\n/// A simpler version of the [`Pattern`] trait that only matches a single\n/// token.\npub trait SingleTokenPattern: LSend {\n    fn matches_token(&self, token: &Token, source: &[char]) -> bool;\n}\n\nimpl<S: SingleTokenPattern> Pattern for S {\n    fn matches(&self, tokens: &[Token], source: &[char]) -> Option<usize> {\n        if self.matches_token(tokens.first()?, source) {\n            Some(1)\n        } else {\n            None\n        }\n    }\n}\n\nimpl<F: LSend + Fn(&Token, &[char]) -> bool> SingleTokenPattern for F {\n    fn matches_token(&self, token: &Token, source: &[char]) -> bool {\n        self(token, source)\n    }\n}\n\npub trait DocPattern {\n    fn find_all_matches_in_doc(&self, document: &Document) -> Vec<Span<Token>>;\n}\n\nimpl<P: PatternExt> DocPattern for P {\n    fn find_all_matches_in_doc(&self, document: &Document) -> Vec<Span<Token>> {\n        self.find_all_matches(document.get_tokens(), document.get_source())\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/modal_verb.rs",
    "content": "use super::{Pattern, WordSet};\n\npub struct ModalVerb {\n    inner: WordSet,\n    include_common_errors: bool,\n}\n\nimpl Default for ModalVerb {\n    fn default() -> Self {\n        let (words, include_common_errors) = Self::init(false);\n        Self {\n            inner: words,\n            include_common_errors,\n        }\n    }\n}\n\nimpl ModalVerb {\n    fn init(include_common_errors: bool) -> (WordSet, bool) {\n        let modals = [\n            \"can\", \"can't\", \"could\", \"may\", \"might\", \"must\", \"shall\", \"shan't\", \"should\", \"will\",\n            \"won't\", \"would\", \"ought\", \"dare\",\n        ];\n\n        let mut words = WordSet::new(&modals);\n        modals.iter().for_each(|word| {\n            words.add(&format!(\"{word}n't\"));\n            if include_common_errors {\n                words.add(&format!(\"{word}nt\"));\n            }\n        });\n        words.add(\"cannot\");\n        (words, include_common_errors)\n    }\n\n    pub fn with_common_errors() -> Self {\n        let (words, _) = Self::init(true);\n        Self {\n            inner: words,\n            include_common_errors: true,\n        }\n    }\n}\n\nimpl Pattern for ModalVerb {\n    fn matches(&self, tokens: &[crate::Token], source: &[char]) -> Option<usize> {\n        self.inner.matches(tokens, source)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/nominal_phrase.rs",
    "content": "use crate::Token;\n\nuse super::Pattern;\n\n/// A pattern that uses primitive syntax-tree heuristics to locate nominal phrases.\n/// Given that it does not take context into account, it is not recommended for new code.\n/// Please prefer [`DictWordMetadata::np_member`](crate::DictWordMetadata::np_member).\n#[derive(Default)]\npub struct NominalPhrase;\n\nimpl Pattern for NominalPhrase {\n    fn matches(&self, tokens: &[Token], _source: &[char]) -> Option<usize> {\n        let mut cursor = 0;\n\n        loop {\n            let tok = tokens.get(cursor)?;\n\n            if (tok.kind.is_adjective()\n                || tok.kind.is_determiner()\n                || tok.kind.is_verb_progressive_form())\n                && let Some(next) = tokens.get(cursor + 1)\n                && next.kind.is_whitespace()\n            {\n                cursor += 2;\n                continue;\n            }\n\n            if tok.kind.is_nominal() {\n                return Some(cursor + 1);\n            }\n\n            return None;\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::super::DocPattern;\n    use super::NominalPhrase;\n    use crate::{Document, Span, Token, patterns::Pattern};\n\n    trait SpanVecExt {\n        fn to_strings(&self, doc: &Document) -> Vec<String>;\n    }\n\n    impl SpanVecExt for Vec<Span<Token>> {\n        fn to_strings(&self, doc: &Document) -> Vec<String> {\n            self.iter()\n                .map(|sp| {\n                    doc.get_tokens()[sp.start..sp.end]\n                        .iter()\n                        .map(|tok| doc.get_span_content_str(&tok.span))\n                        .collect::<String>()\n                })\n                .collect()\n        }\n    }\n\n    #[test]\n    fn simple_apple() {\n        let doc = Document::new_markdown_default_curated(\"A red apple\");\n        let matches = NominalPhrase.find_all_matches_in_doc(&doc);\n\n        assert_eq!(matches.to_strings(&doc), vec![\"A red apple\"])\n    }\n\n    #[test]\n    fn complex_apple() {\n        let doc = Document::new_markdown_default_curated(\"A red apple with a long stem\");\n        let matches = NominalPhrase.find_all_matches_in_doc(&doc);\n\n        assert_eq!(matches.to_strings(&doc), vec![\"A red apple\", \"a long stem\"])\n    }\n\n    #[test]\n    fn list_fruit() {\n        let doc = Document::new_markdown_default_curated(\"An apple, a banana and a pear\");\n        let matches = NominalPhrase.find_all_matches_in_doc(&doc);\n\n        assert_eq!(\n            matches.to_strings(&doc),\n            vec![\"An apple\", \"a banana\", \"a pear\"]\n        )\n    }\n\n    #[test]\n    fn simplest_banana() {\n        let doc = Document::new_markdown_default_curated(\"a banana\");\n        assert!(\n            NominalPhrase\n                .matches(doc.get_tokens(), doc.get_source())\n                .is_some()\n        );\n    }\n\n    #[test]\n    fn food() {\n        let doc = Document::new_markdown_default_curated(\n            \"My favorite foods are pizza, sushi, tacos and burgers.\",\n        );\n        let matches = NominalPhrase.find_all_matches_in_doc(&doc);\n\n        dbg!(&matches);\n        dbg!(matches.to_strings(&doc));\n\n        for span in &matches {\n            let gc = span\n                .to_char_span(doc.get_tokens())\n                .get_content(doc.get_source());\n            dbg!(gc);\n        }\n\n        assert_eq!(\n            matches.to_strings(&doc),\n            vec![\"My favorite foods\", \"pizza\", \"sushi\", \"tacos\", \"burgers\"]\n        )\n    }\n\n    #[test]\n    fn simplest_way() {\n        let doc = Document::new_markdown_default_curated(\"a way\");\n        assert!(\n            NominalPhrase\n                .matches(doc.get_tokens(), doc.get_source())\n                .is_some()\n        );\n    }\n\n    #[test]\n    fn present_participle_way() {\n        let doc = Document::new_markdown_default_curated(\"a winning way\");\n        assert!(\n            NominalPhrase\n                .matches(doc.get_tokens(), doc.get_source())\n                .is_some()\n        );\n    }\n\n    #[test]\n    fn perfect_participle_way() {\n        let doc = Document::new_markdown_default_curated(\"a failed way\");\n        assert!(\n            NominalPhrase\n                .matches(doc.get_tokens(), doc.get_source())\n                .is_some()\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/prepositional_preceder.rs",
    "content": "use std::sync::LazyLock;\n\nuse super::{SingleTokenPattern, WordSet};\nuse crate::Token;\n\n/// Matches adjectives that routinely introduce a `… to …` prepositional phrase, such as\n/// `accustomed`, `prone`, or `used`.\n///\n/// Several `ToTwoToo` branches need this guard so they only flag cases where `to` is meant as\n/// `too`, not when it participates in idioms like `accustomed to precision`.\n#[derive(Debug, Clone)]\npub struct PrepositionalPrecederPattern {\n    word_set: WordSet,\n}\n\nimpl Default for PrepositionalPrecederPattern {\n    fn default() -> Self {\n        Self {\n            word_set: WordSet::new(&[\n                \"accustomed\",\n                \"addicted\",\n                \"adjacent\",\n                \"allergic\",\n                \"attached\",\n                \"attuned\",\n                \"committed\",\n                \"connected\",\n                \"dedicated\",\n                \"devoted\",\n                \"immune\",\n                \"oblivious\",\n                \"opposed\",\n                \"partial\",\n                \"prone\",\n                \"receptive\",\n                \"related\",\n                \"resistant\",\n                \"sensitive\",\n                \"subject\",\n                \"susceptible\",\n                \"used\",\n            ]),\n        }\n    }\n}\n\nimpl SingleTokenPattern for PrepositionalPrecederPattern {\n    fn matches_token(&self, token: &Token, source: &[char]) -> bool {\n        self.word_set.matches_token(token, source)\n    }\n}\n\nstatic PREPOSITIONAL_PRECEDER_PATTERN: LazyLock<PrepositionalPrecederPattern> =\n    LazyLock::new(PrepositionalPrecederPattern::default);\n\n/// Shared accessor for the lazily-initialized [`PrepositionalPrecederPattern`].\npub fn prepositional_preceder() -> &'static PrepositionalPrecederPattern {\n    &PREPOSITIONAL_PRECEDER_PATTERN\n}\n"
  },
  {
    "path": "harper-core/src/patterns/upos_set.rs",
    "content": "use harper_brill::UPOS;\nuse serde::{Deserialize, Serialize};\nuse smallvec::{SmallVec, ToSmallVec};\n\nuse crate::Token;\n\nuse super::Pattern;\n\n#[derive(Debug, Serialize, Deserialize, Clone)]\npub struct UPOSSet {\n    allowed_tags: SmallVec<[UPOS; 10]>,\n}\n\nimpl UPOSSet {\n    pub fn new(allowed: &[UPOS]) -> Self {\n        Self {\n            allowed_tags: allowed.to_smallvec(),\n        }\n    }\n}\n\nimpl Pattern for UPOSSet {\n    fn matches(&self, tokens: &[Token], _source: &[char]) -> Option<usize> {\n        tokens.first()?.kind.as_word()?.as_ref().and_then(|w| {\n            if self.allowed_tags.contains(&(w.pos_tag?)) {\n                Some(1)\n            } else {\n                None\n            }\n        })\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/whitespace_pattern.rs",
    "content": "use super::Pattern;\n\npub struct WhitespacePattern;\n\nimpl Pattern for WhitespacePattern {\n    fn matches(&self, tokens: &[crate::Token], _source: &[char]) -> Option<usize> {\n        let count = tokens\n            .iter()\n            .position(|t| !t.kind.is_whitespace())\n            .unwrap_or(tokens.len());\n\n        if count == 0 { None } else { Some(count) }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/within_edit_distance.rs",
    "content": "use std::cell::RefCell;\n\nuse super::SingleTokenPattern;\nuse crate::{CharString, CharStringExt, Token};\n\nuse crate::edit_distance::edit_distance_min_alloc;\n\n/// Matches single words within a certain edit distance of a given word.\npub struct WithinEditDistance {\n    word: CharString,\n    max_edit_dist: u8,\n}\n\nimpl WithinEditDistance {\n    pub fn new(word: CharString, max_edit_dist: u8) -> Self {\n        Self {\n            word,\n            max_edit_dist,\n        }\n    }\n\n    pub fn from_str(word: &str, edit_dist: u8) -> Self {\n        let chars = word.chars().collect();\n\n        Self::new(chars, edit_dist)\n    }\n}\n\nthread_local! {\n    // To avoid allocating each call to `matches`.\n    static BUFFERS: RefCell<(Vec<u8>, Vec<u8>)> = const { RefCell::new((Vec::new(), Vec::new())) };\n}\n\nimpl SingleTokenPattern for WithinEditDistance {\n    fn matches_token(&self, token: &Token, source: &[char]) -> bool {\n        if !token.kind.is_word() {\n            return false;\n        }\n\n        let content = token.span.get_content(source);\n\n        BUFFERS.with_borrow_mut(|(buffer_a, buffer_b)| {\n            let distance = edit_distance_min_alloc(\n                &content.to_lower(),\n                &self.word.to_lower(),\n                buffer_a,\n                buffer_b,\n            );\n            distance <= self.max_edit_dist\n        })\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/word.rs",
    "content": "use super::SingleTokenPattern;\n\nuse crate::{CharString, Token};\n\n/// Matches a predefined word.\n#[derive(Clone)]\npub struct Word {\n    /// The word to match.\n    word: CharString,\n    /// Determines whether the match is case-sensitive.\n    case_sensitive: bool,\n}\n\nimpl Word {\n    /// Matches the provided word, ignoring case.\n    pub fn new(word: &'static str) -> Self {\n        Self {\n            word: word.chars().collect(),\n            case_sensitive: false,\n        }\n    }\n\n    /// Matches the provided word, ignoring case.\n    pub fn from_chars(word: &[char]) -> Self {\n        Self {\n            word: word.iter().copied().collect(),\n            case_sensitive: false,\n        }\n    }\n\n    /// Matches the provided word, ignoring case.\n    pub fn from_char_string(word: CharString) -> Self {\n        Self {\n            word,\n            case_sensitive: false,\n        }\n    }\n\n    /// Matches the provided word, case-sensitive.\n    pub fn new_exact(word: &'static str) -> Self {\n        Self {\n            word: word.chars().collect(),\n            case_sensitive: true,\n        }\n    }\n}\n\nimpl SingleTokenPattern for Word {\n    fn matches_token(&self, token: &Token, source: &[char]) -> bool {\n        if !token.kind.is_word() {\n            return false;\n        }\n        if token.span.len() != self.word.len() {\n            return false;\n        }\n\n        let chars = token.span.get_content(source);\n        if self.case_sensitive {\n            chars == self.word.as_slice()\n        } else {\n            chars\n                .iter()\n                .zip(&self.word)\n                .all(|(a, b)| a.eq_ignore_ascii_case(b))\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::{Document, Span, patterns::DocPattern};\n\n    use super::Word;\n\n    #[test]\n    fn fruit() {\n        let doc = Document::new_markdown_default_curated(\"I ate a banana and an apple today.\");\n\n        assert_eq!(\n            Word::new(\"banana\").find_all_matches_in_doc(&doc),\n            vec![Span::new(6, 7)]\n        );\n        assert_eq!(\n            Word::new_exact(\"banana\").find_all_matches_in_doc(&doc),\n            vec![Span::new(6, 7)]\n        );\n    }\n\n    #[test]\n    fn fruit_whack_capitalization() {\n        let doc = Document::new_markdown_default_curated(\"I Ate A bAnaNa And aN apPlE today.\");\n\n        assert_eq!(\n            Word::new(\"banana\").find_all_matches_in_doc(&doc),\n            vec![Span::new(6, 7)]\n        );\n        assert_eq!(\n            Word::new_exact(\"banana\").find_all_matches_in_doc(&doc),\n            vec![]\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/patterns/word_set.rs",
    "content": "use super::SingleTokenPattern;\nuse smallvec::SmallVec;\n\nuse crate::{CharString, Token, char_ext::CharExt};\n\n/// A [`super::Pattern`] that matches against any of a set of provided words.\n/// For small sets of short words, it doesn't allocate.\n///\n/// Note that any capitalization of the contained words will result in a match.\n#[derive(Debug, Default, Clone)]\npub struct WordSet {\n    words: SmallVec<[CharString; 4]>,\n}\n\nimpl WordSet {\n    pub fn add(&mut self, word: &str) {\n        let chars = word.chars().collect();\n\n        if !self.words.contains(&chars) {\n            self.words.push(chars);\n        }\n    }\n\n    pub fn add_chars(&mut self, chars: &[char]) {\n        if !self.words.iter().any(|i| i.as_ref() == chars) {\n            self.words.push(chars.into());\n        }\n    }\n\n    pub fn contains(&self, word: &str) -> bool {\n        self.words.contains(&word.chars().collect())\n    }\n\n    /// Create a new word set that matches against any word in the provided list.\n    pub fn new(words: &[&'static str]) -> Self {\n        let mut set = Self::default();\n\n        for str in words {\n            set.add(str);\n        }\n\n        set\n    }\n}\n\nimpl SingleTokenPattern for WordSet {\n    fn matches_token(&self, token: &Token, source: &[char]) -> bool {\n        if !token.kind.is_word() {\n            return false;\n        }\n\n        let tok_chars = token.span.get_content(source);\n\n        for word in &self.words {\n            if tok_chars.len() != word.len() {\n                continue;\n            }\n\n            let partial_match = tok_chars\n                .iter()\n                .map(CharExt::normalized)\n                .zip(word.iter().map(CharExt::normalized))\n                .all(|(a, b)| a.eq_ignore_ascii_case(&b));\n\n            if partial_match {\n                return true;\n            }\n        }\n\n        false\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::{Document, Span, patterns::DocPattern};\n\n    use super::WordSet;\n\n    #[test]\n    fn fruit() {\n        let set = WordSet::new(&[\"banana\", \"apple\", \"orange\"]);\n\n        let doc = Document::new_markdown_default_curated(\"I ate a banana and an apple today.\");\n\n        let matches = set.find_all_matches_in_doc(&doc);\n\n        assert_eq!(matches, vec![Span::new(6, 7), Span::new(12, 13)]);\n    }\n\n    #[test]\n    fn fruit_whack_capitalization() {\n        let set = WordSet::new(&[\"banana\", \"apple\", \"orange\"]);\n\n        let doc = Document::new_markdown_default_curated(\"I Ate A bAnaNa And aN apPlE today.\");\n\n        let matches = set.find_all_matches_in_doc(&doc);\n\n        assert_eq!(matches, vec![Span::new(6, 7), Span::new(12, 13)]);\n    }\n\n    #[test]\n    fn supports_typographic_apostrophes() {\n        let set = WordSet::new(&[\"They're\"]);\n\n        let doc = Document::new_markdown_default_curated(\"They’re\");\n\n        let matches = set.find_all_matches_in_doc(&doc);\n\n        assert_eq!(matches, vec![Span::new(0, 1)]);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/punctuation.rs",
    "content": "use is_macro::Is;\nuse serde::{Deserialize, Serialize};\n\nuse crate::Currency;\n\n#[derive(\n    Debug, Is, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Default, Hash,\n)]\n#[serde(tag = \"kind\")]\npub enum Punctuation {\n    /// `°`\n    Degree,\n    /// `…`\n    Ellipsis,\n    /// `–`\n    EnDash,\n    /// `—`\n    EmDash,\n    /// `&`\n    Ampersand,\n    /// `.`\n    #[default]\n    Period,\n    /// `!`\n    Bang,\n    /// `?`\n    Question,\n    /// `:`\n    Colon,\n    /// ``;``\n    Semicolon,\n    /// `\"`\n    Quote(Quote),\n    /// `,`\n    Comma,\n    /// `-`\n    Hyphen,\n    /// `[`\n    OpenSquare,\n    /// `]`\n    CloseSquare,\n    /// `(`\n    OpenRound,\n    /// `)`\n    CloseRound,\n    /// `{`\n    OpenCurly,\n    /// `}`\n    CloseCurly,\n    /// `\"`\n    Hash,\n    /// `'`\n    Apostrophe,\n    /// `%`\n    Percent,\n    /// `/`\n    ForwardSlash,\n    /// `\\`\n    Backslash,\n    /// `<`\n    LessThan,\n    /// `>`\n    GreaterThan,\n    /// `=`\n    Equal,\n    /// `*`\n    Star,\n    /// `~`\n    Tilde,\n    /// `@`\n    At,\n    /// `^`\n    Caret,\n    /// `+`\n    Plus,\n    Currency(Currency),\n    /// `|`\n    Pipe,\n    /// `_`\n    Underscore,\n    /// `´`\n    Acute,\n}\n\nimpl Punctuation {\n    pub fn from_char(c: char) -> Option<Punctuation> {\n        let punct = match c {\n            '@' => Punctuation::At,\n            '~' => Punctuation::Tilde,\n            '°' => Punctuation::Degree,\n            '=' => Punctuation::Equal,\n            '<' => Punctuation::LessThan,\n            '>' => Punctuation::GreaterThan,\n            '/' => Punctuation::ForwardSlash,\n            '\\\\' => Punctuation::Backslash,\n            '%' => Punctuation::Percent,\n            '’' => Punctuation::Apostrophe,\n            '\\'' => Punctuation::Apostrophe,\n            '.' => Punctuation::Period,\n            '!' => Punctuation::Bang,\n            '?' => Punctuation::Question,\n            ':' => Punctuation::Colon,\n            ';' => Punctuation::Semicolon,\n            ',' => Punctuation::Comma,\n            '、' => Punctuation::Comma,\n            '，' => Punctuation::Comma,\n            '-' => Punctuation::Hyphen,\n            '[' => Punctuation::OpenSquare,\n            ']' => Punctuation::CloseSquare,\n            '{' => Punctuation::OpenCurly,\n            '}' => Punctuation::CloseCurly,\n            '(' => Punctuation::OpenRound,\n            ')' => Punctuation::CloseRound,\n            '#' => Punctuation::Hash,\n            '*' => Punctuation::Star,\n            '&' => Punctuation::Ampersand,\n            '–' => Punctuation::EnDash,\n            '—' => Punctuation::EmDash,\n            '…' => Punctuation::Ellipsis,\n            '^' => Punctuation::Caret,\n            '+' => Punctuation::Plus,\n            '|' => Punctuation::Pipe,\n            '_' => Punctuation::Underscore,\n            '´' => Punctuation::Acute,\n            _ => Punctuation::Currency(Currency::from_char(c)?),\n        };\n\n        Some(punct)\n    }\n}\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, PartialOrd, Hash)]\npub struct Quote {\n    /// The location of the matching quote, if it exists.\n    pub twin_loc: Option<usize>,\n}\n"
  },
  {
    "path": "harper-core/src/render_markdown.rs",
    "content": "use ammonia::clean;\nuse pulldown_cmark::{Options, Parser, html};\n\n/// The standard Markdown rendering function for the crate.\n/// Do not call `pulldown_cmark` directly. Use this.\npub fn render_markdown(markdown: &str) -> String {\n    let parser = Parser::new_ext(markdown, Options::all());\n    let mut html = String::new();\n    html::push_html(&mut html, parser);\n    clean(&html)\n}\n"
  },
  {
    "path": "harper-core/src/span.rs",
    "content": "use std::{fmt::Display, marker::PhantomData, ops::Range};\n\nuse serde::{Deserialize, Serialize};\n\nuse crate::Token;\n\n/// A window in a `T` sequence.\n///\n/// Note that the range covered by a [`Span`] is end-exclusive, meaning that the end index is not\n/// included in the range covered by the [`Span`]. If you're familiar with the Rust range syntax,\n/// you could say the span covers the equivalent of `start..end`, *not* `start..=end`.\n///\n/// For a [`Span`] to be correct, its end index must be greater than or equal to its start\n/// index. Creating or using a [`Span`] which does not follow this rule may lead to unexpected\n/// behavior or panics.\n///\n/// Although specific to `harper.js`, [this page may clear up any questions you have](https://writewithharper.com/docs/harperjs/spans).\n#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Hash)]\npub struct Span<T> {\n    /// The start index of the span.\n    pub start: usize,\n    /// The end index of the span.\n    ///\n    /// Note that [`Span`] represents an exclusive range. This means that a `Span::new(0, 5)` will\n    /// cover the values `0, 1, 2, 3, 4`; it will not cover the `5`.\n    pub end: usize,\n    #[serde(skip)]\n    span_type: PhantomData<T>,\n}\n\nimpl<T> Span<T> {\n    /// A [`Span`] with a start and end index of 0.\n    pub const ZERO: Self = Self::empty(0);\n\n    /// Creates a new [`Span`] with the provided start and end indices.\n    ///\n    /// # Panics\n    ///\n    /// This will panic if `start` is greater than `end`.\n    pub fn new(start: usize, end: usize) -> Self {\n        if start > end {\n            panic!(\"{start} > {end}\");\n        }\n        Self {\n            start,\n            end,\n            span_type: PhantomData,\n        }\n    }\n\n    /// Creates a new [`Span`] from the provided start position and length.\n    pub fn new_with_len(start: usize, len: usize) -> Self {\n        Self {\n            start,\n            end: start + len,\n            span_type: PhantomData,\n        }\n    }\n\n    /// Creates a new empty [`Span`] with the provided position.\n    pub const fn empty(pos: usize) -> Self {\n        Self {\n            start: pos,\n            end: pos,\n            span_type: PhantomData,\n        }\n    }\n\n    /// The length of the [`Span`].\n    pub fn len(&self) -> usize {\n        self.end - self.start\n    }\n\n    /// Checks whether the [`Span`] is empty.\n    ///\n    /// A [`Span`] is considered empty if it has a length of 0.\n    pub fn is_empty(&self) -> bool {\n        self.len() == 0\n    }\n\n    /// Checks whether `idx` is within the range of the span.\n    pub fn contains(&self, idx: usize) -> bool {\n        self.start <= idx && idx < self.end\n    }\n\n    /// Checks whether this span's range overlaps with `other`.\n    pub fn overlaps_with(&self, other: Self) -> bool {\n        (self.start < other.end) && (other.start < self.end)\n    }\n\n    /// Get the associated content. Will return [`None`] if the span is non-empty and any aspect is\n    /// invalid.\n    pub fn try_get_content<'a>(&self, source: &'a [T]) -> Option<&'a [T]> {\n        if self.is_empty() {\n            Some(&source[0..0])\n        } else {\n            source.get(self.start..self.end)\n        }\n    }\n\n    /// Expand the span by either modifying [`Self::start`] or [`Self::end`] to include the target\n    /// index.\n    ///\n    /// Does nothing if the span already includes the target.\n    pub fn expand_to_include(&mut self, target: usize) {\n        if target < self.start {\n            self.start = target;\n        } else if target >= self.end {\n            self.end = target + 1;\n        }\n    }\n\n    /// Get the associated content. Will panic if any aspect is invalid.\n    pub fn get_content<'a>(&self, source: &'a [T]) -> &'a [T] {\n        match self.try_get_content(source) {\n            Some(v) => v,\n            None => panic!(\"Failed to get content for span.\"),\n        }\n    }\n\n    /// Set the span's length.\n    pub fn set_len(&mut self, length: usize) {\n        self.end = self.start + length;\n    }\n\n    /// Returns a copy of this [`Span`] with a new length.\n    pub fn with_len(&self, length: usize) -> Self {\n        let mut cloned = *self;\n        cloned.set_len(length);\n        cloned\n    }\n\n    /// Add an amount to both [`Self::start`] and [`Self::end`]\n    pub fn push_by(&mut self, by: usize) {\n        self.start += by;\n        self.end += by;\n    }\n\n    /// Subtract an amount from both [`Self::start`] and [`Self::end`]\n    pub fn pull_by(&mut self, by: usize) {\n        self.start -= by;\n        self.end -= by;\n    }\n\n    /// Add an amount to a copy of both [`Self::start`] and [`Self::end`]\n    pub fn pushed_by(&self, by: usize) -> Self {\n        let mut clone = *self;\n        clone.start += by;\n        clone.end += by;\n        clone\n    }\n\n    /// Subtract an amount to a copy of both [`Self::start`] and [`Self::end`]\n    pub fn pulled_by(&self, by: usize) -> Option<Self> {\n        if by > self.start {\n            return None;\n        }\n\n        let mut clone = *self;\n        clone.start -= by;\n        clone.end -= by;\n        Some(clone)\n    }\n}\n\n/// Additional functions for types that implement [`std::fmt::Debug`] and [`Display`].\nimpl<T: Display + std::fmt::Debug> Span<T> {\n    /// Gets the content of this [`Span<T>`] as a [`String`].\n    pub fn get_content_string(&self, source: &[T]) -> String {\n        if let Some(content) = self.try_get_content(source) {\n            content.iter().map(|t| t.to_string()).collect()\n        } else {\n            panic!(\"Could not get position {self:?} within \\\"{source:?}\\\"\")\n        }\n    }\n}\n\n/// Functionality specific to [`Token`] spans.\nimpl Span<Token> {\n    /// Converts the [`Span<Token>`] into a [`Span<char>`].\n    ///\n    /// This requires knowing the character spans of the tokens covered by this\n    /// [`Span<Token>`]. Because of this, a reference to the source token sequence used to create\n    /// this span is required.\n    pub fn to_char_span(&self, source_document_tokens: &[Token]) -> Span<char> {\n        if self.is_empty() {\n            Span::ZERO\n        } else {\n            let target_tokens = &source_document_tokens[self.start..self.end];\n            Span::new(\n                target_tokens.first().unwrap().span.start,\n                target_tokens.last().unwrap().span.end,\n            )\n        }\n    }\n}\n\nimpl<T> From<Range<usize>> for Span<T> {\n    /// Reinterprets the provided [`std::ops::Range`] as a [`Span`].\n    fn from(value: Range<usize>) -> Self {\n        Self::new(value.start, value.end)\n    }\n}\n\nimpl<T> From<Span<T>> for Range<usize> {\n    /// Converts the [`Span`] to an [`std::ops::Range`].\n    fn from(value: Span<T>) -> Self {\n        value.start..value.end\n    }\n}\n\nimpl<T> IntoIterator for Span<T> {\n    type Item = usize;\n\n    type IntoIter = Range<usize>;\n\n    /// Converts the [`Span`] into an iterator that yields the indices covered by its range.\n    ///\n    /// Note that [`Span`] is half-open, meaning that the value [`Self::end`] will not be yielded\n    /// by this iterator: it will stop at the index immediately preceding [`Self::end`].\n    fn into_iter(self) -> Self::IntoIter {\n        self.start..self.end\n    }\n}\n\nimpl<T> Clone for Span<T> {\n    // Note: manual implementation so we don't unnecessarily require `T` to impl `Clone`.\n    fn clone(&self) -> Self {\n        *self\n    }\n}\nimpl<T> Copy for Span<T> {}\n\n#[cfg(test)]\nmod tests {\n    use crate::{\n        Document,\n        expr::{ExprExt, SequenceExpr},\n    };\n\n    use super::Span;\n\n    type UntypedSpan = Span<()>;\n\n    #[test]\n    fn overlaps() {\n        assert!(UntypedSpan::new(0, 5).overlaps_with(UntypedSpan::new(3, 6)));\n        assert!(UntypedSpan::new(0, 5).overlaps_with(UntypedSpan::new(2, 3)));\n        assert!(UntypedSpan::new(0, 5).overlaps_with(UntypedSpan::new(4, 5)));\n        assert!(UntypedSpan::new(0, 5).overlaps_with(UntypedSpan::new(4, 4)));\n\n        assert!(!UntypedSpan::new(0, 3).overlaps_with(UntypedSpan::new(3, 5)));\n    }\n\n    #[test]\n    fn expands_properly() {\n        let mut span = UntypedSpan::new(2, 2);\n\n        span.expand_to_include(1);\n        assert_eq!(span, UntypedSpan::new(1, 2));\n\n        span.expand_to_include(2);\n        assert_eq!(span, UntypedSpan::new(1, 3));\n    }\n\n    #[test]\n    fn to_char_span_converts_correctly() {\n        let doc = Document::new_plain_english_curated(\"Hello world!\");\n\n        // Empty span.\n        let token_span = Span::ZERO;\n        let converted = token_span.to_char_span(doc.get_tokens());\n        assert!(converted.is_empty());\n\n        // Span from `Expr`.\n        let token_span = SequenceExpr::any_word()\n            .t_ws()\n            .then_any_word()\n            .iter_matches_in_doc(&doc)\n            .next()\n            .unwrap();\n        let converted = token_span.to_char_span(doc.get_tokens());\n        assert_eq!(\n            converted.get_content_string(doc.get_source()),\n            \"Hello world\"\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/dictionary.rs",
    "content": "use blanket::blanket;\nuse std::borrow::Cow;\n\nuse super::FuzzyMatchResult;\nuse super::WordId;\nuse crate::DictWordMetadata;\n\n/// An in-memory database that contains everything necessary to parse and analyze English text.\n///\n/// See also: [`super::FstDictionary`] and [`super::MutableDictionary`].\n#[blanket(derive(Arc, Ref))]\npub trait Dictionary: Send + Sync {\n    /// Check if the dictionary contains any capitalization of a given word.\n    fn contains_word(&self, word: &[char]) -> bool;\n    /// Check if the dictionary contains any capitalization of a given word.\n    fn contains_word_str(&self, word: &str) -> bool;\n    /// Check if the dictionary contains the exact capitalization of a given word.\n    fn contains_exact_word(&self, word: &[char]) -> bool;\n    /// Check if the dictionary contains the exact capitalization of a given word.\n    fn contains_exact_word_str(&self, word: &str) -> bool;\n    /// Gets best fuzzy match from dictionary\n    fn fuzzy_match(\n        &'_ self,\n        word: &[char],\n        max_distance: u8,\n        max_results: usize,\n    ) -> Vec<FuzzyMatchResult<'_>>;\n    /// Gets best fuzzy match from dictionary\n    fn fuzzy_match_str(\n        &'_ self,\n        word: &str,\n        max_distance: u8,\n        max_results: usize,\n    ) -> Vec<FuzzyMatchResult<'_>>;\n    fn get_correct_capitalization_of(&self, word: &[char]) -> Option<&'_ [char]>;\n    /// Get the associated [`DictWordMetadata`] for any capitalization of a given word.\n    fn get_word_metadata(&self, word: &[char]) -> Option<Cow<'_, DictWordMetadata>>;\n    /// Get the associated [`DictWordMetadata`] for any capitalization of a given word.\n    /// If the word isn't in the dictionary, the resulting metadata will be\n    /// empty.\n    fn get_word_metadata_str(&self, word: &str) -> Option<Cow<'_, DictWordMetadata>>;\n\n    /// Iterate over the words in the dictionary.\n    fn words_iter(&self) -> Box<dyn Iterator<Item = &'_ [char]> + Send + '_>;\n\n    /// The number of words in the dictionary.\n    fn word_count(&self) -> usize;\n\n    /// Returns the correct capitalization of the word with the given ID.\n    fn get_word_from_id(&self, id: &WordId) -> Option<&[char]>;\n\n    /// Look for words with a specific prefix\n    fn find_words_with_prefix(&self, prefix: &[char]) -> Vec<Cow<'_, [char]>>;\n\n    /// Look for words that share a prefix with the provided word\n    fn find_words_with_common_prefix(&self, word: &[char]) -> Vec<Cow<'_, [char]>>;\n}\n"
  },
  {
    "path": "harper-core/src/spell/fst_dictionary.rs",
    "content": "use super::{MutableDictionary, WordId};\nuse fst::{IntoStreamer, Map as FstMap, Streamer, map::StreamWithState};\nuse hashbrown::HashMap;\nuse levenshtein_automata::{DFA, LevenshteinAutomatonBuilder};\nuse std::borrow::Cow;\nuse std::sync::LazyLock;\nuse std::{cell::RefCell, sync::Arc};\n\nuse crate::{CharString, CharStringExt, DictWordMetadata};\n\nuse super::Dictionary;\nuse super::FuzzyMatchResult;\n\n/// An immutable dictionary allowing for very fast spellchecking.\n///\n/// For dictionaries with changing contents, such as user and file dictionaries, prefer\n/// [`MutableDictionary`].\npub struct FstDictionary {\n    /// Underlying [`super::MutableDictionary`] used for everything except fuzzy finding\n    mutable_dict: Arc<MutableDictionary>,\n    /// Used for fuzzy-finding the index of words or metadata\n    word_map: FstMap<Vec<u8>>,\n    /// Used for fuzzy-finding the index of words or metadata\n    words: Vec<(CharString, DictWordMetadata)>,\n}\n\nconst EXPECTED_DISTANCE: u8 = 3;\nconst TRANSPOSITION_COST_ONE: bool = true;\n\nstatic DICT: LazyLock<Arc<FstDictionary>> =\n    LazyLock::new(|| Arc::new((*MutableDictionary::curated()).clone().into()));\n\nthread_local! {\n    // Builders are computationally expensive and do not depend on the word, so we store a\n    // collection of builders and the associated edit distance here.\n    // Currently, the edit distance we use is three, but a value that does not exist in this\n    // collection will create a new builder of that distance and push it to the collection.\n    static AUTOMATON_BUILDERS: RefCell<Vec<(u8, LevenshteinAutomatonBuilder)>> = RefCell::new(vec![(\n        EXPECTED_DISTANCE,\n        LevenshteinAutomatonBuilder::new(EXPECTED_DISTANCE, TRANSPOSITION_COST_ONE),\n    )]);\n}\n\nimpl PartialEq for FstDictionary {\n    fn eq(&self, other: &Self) -> bool {\n        self.mutable_dict == other.mutable_dict\n    }\n}\n\nimpl FstDictionary {\n    /// Create a dictionary from the curated dictionary included\n    /// in the Harper binary.\n    pub fn curated() -> Arc<Self> {\n        (*DICT).clone()\n    }\n\n    /// Construct a new [`FstDictionary`] using a wordlist as a source.\n    /// This can be expensive, so only use this if fast fuzzy searches are worth it.\n    pub fn new(mut words: Vec<(CharString, DictWordMetadata)>) -> Self {\n        words.sort_unstable_by(|(a, _), (b, _)| a.cmp(b));\n        words.dedup_by(|(a, _), (b, _)| a == b);\n\n        let mut builder = fst::MapBuilder::memory();\n        for (index, (word, _)) in words.iter().enumerate() {\n            let word = word.iter().collect::<String>();\n            builder\n                .insert(word, index as u64)\n                .expect(\"Insertion not in lexicographical order!\");\n        }\n\n        let mut mutable_dict = MutableDictionary::new();\n        mutable_dict.extend_words(words.iter().cloned());\n\n        let fst_bytes = builder.into_inner().unwrap();\n        let word_map = FstMap::new(fst_bytes).expect(\"Unable to build FST map.\");\n\n        FstDictionary {\n            mutable_dict: Arc::new(mutable_dict),\n            word_map,\n            words,\n        }\n    }\n}\n\nfn build_dfa(max_distance: u8, query: &str) -> DFA {\n    // Insert if it does not exist\n    AUTOMATON_BUILDERS.with_borrow_mut(|v| {\n        if !v.iter().any(|t| t.0 == max_distance) {\n            v.push((\n                max_distance,\n                LevenshteinAutomatonBuilder::new(max_distance, TRANSPOSITION_COST_ONE),\n            ));\n        }\n    });\n\n    AUTOMATON_BUILDERS.with_borrow(|v| {\n        v.iter()\n            .find(|a| a.0 == max_distance)\n            .unwrap()\n            .1\n            .build_dfa(query)\n    })\n}\n\n/// Consumes a DFA stream and emits the index-edit distance pairs it produces.\nfn stream_distances_vec(stream: &mut StreamWithState<&DFA>, dfa: &DFA) -> Vec<(u64, u8)> {\n    let mut word_index_pairs = Vec::new();\n    while let Some((_, v, s)) = stream.next() {\n        word_index_pairs.push((v, dfa.distance(s).to_u8()));\n    }\n\n    word_index_pairs\n}\n\nimpl Dictionary for FstDictionary {\n    fn contains_word(&self, word: &[char]) -> bool {\n        self.mutable_dict.contains_word(word)\n    }\n\n    fn contains_word_str(&self, word: &str) -> bool {\n        self.mutable_dict.contains_word_str(word)\n    }\n\n    fn get_word_metadata(&self, word: &[char]) -> Option<Cow<'_, DictWordMetadata>> {\n        self.mutable_dict.get_word_metadata(word)\n    }\n\n    fn get_word_metadata_str(&self, word: &str) -> Option<Cow<'_, DictWordMetadata>> {\n        self.mutable_dict.get_word_metadata_str(word)\n    }\n\n    fn fuzzy_match(\n        &'_ self,\n        word: &[char],\n        max_distance: u8,\n        max_results: usize,\n    ) -> Vec<FuzzyMatchResult<'_>> {\n        let misspelled_word_charslice = word.normalized();\n        let misspelled_word_string = misspelled_word_charslice.to_string();\n\n        // Actual FST search\n        let dfa = build_dfa(max_distance, &misspelled_word_string);\n        let dfa_lowercase = build_dfa(max_distance, &misspelled_word_string.to_lowercase());\n        let mut word_indexes_stream = self.word_map.search_with_state(&dfa).into_stream();\n        let mut word_indexes_lowercase_stream = self\n            .word_map\n            .search_with_state(&dfa_lowercase)\n            .into_stream();\n\n        let upper_dists = stream_distances_vec(&mut word_indexes_stream, &dfa);\n        let lower_dists = stream_distances_vec(&mut word_indexes_lowercase_stream, &dfa_lowercase);\n\n        // Merge the two results, keeping the smallest distance when both DFAs match.\n        // The uppercase and lowercase searches can return different result counts, so\n        // we can't simply zip the vectors without losing matches.\n        let mut merged = Vec::with_capacity(upper_dists.len().max(lower_dists.len()));\n        let mut best_distances = HashMap::<u64, u8>::new();\n\n        for (idx, dist) in upper_dists.into_iter().chain(lower_dists.into_iter()) {\n            best_distances\n                .entry(idx)\n                .and_modify(|existing| *existing = (*existing).min(dist))\n                .or_insert(dist);\n        }\n\n        for (index, edit_distance) in best_distances {\n            let (word, metadata) = &self.words[index as usize];\n            merged.push(FuzzyMatchResult {\n                word,\n                edit_distance,\n                metadata: Cow::Borrowed(metadata),\n            });\n        }\n\n        // Ignore exact matches\n        merged.retain(|v| v.edit_distance > 0);\n        merged.sort_unstable_by(|a, b| {\n            a.edit_distance\n                .cmp(&b.edit_distance)\n                .then_with(|| a.word.cmp(b.word))\n        });\n        merged.truncate(max_results);\n\n        merged\n    }\n\n    fn fuzzy_match_str(\n        &'_ self,\n        word: &str,\n        max_distance: u8,\n        max_results: usize,\n    ) -> Vec<FuzzyMatchResult<'_>> {\n        self.fuzzy_match(\n            word.chars().collect::<Vec<_>>().as_slice(),\n            max_distance,\n            max_results,\n        )\n    }\n\n    fn words_iter(&self) -> Box<dyn Iterator<Item = &'_ [char]> + Send + '_> {\n        self.mutable_dict.words_iter()\n    }\n\n    fn word_count(&self) -> usize {\n        self.mutable_dict.word_count()\n    }\n\n    fn contains_exact_word(&self, word: &[char]) -> bool {\n        self.mutable_dict.contains_exact_word(word)\n    }\n\n    fn contains_exact_word_str(&self, word: &str) -> bool {\n        self.mutable_dict.contains_exact_word_str(word)\n    }\n\n    fn get_correct_capitalization_of(&self, word: &[char]) -> Option<&'_ [char]> {\n        self.mutable_dict.get_correct_capitalization_of(word)\n    }\n\n    fn get_word_from_id(&self, id: &WordId) -> Option<&[char]> {\n        self.mutable_dict.get_word_from_id(id)\n    }\n\n    fn find_words_with_prefix(&self, prefix: &[char]) -> Vec<Cow<'_, [char]>> {\n        self.mutable_dict.find_words_with_prefix(prefix)\n    }\n\n    fn find_words_with_common_prefix(&self, word: &[char]) -> Vec<Cow<'_, [char]>> {\n        self.mutable_dict.find_words_with_common_prefix(word)\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use itertools::Itertools;\n\n    use crate::CharStringExt;\n    use crate::spell::{Dictionary, WordId};\n\n    use super::FstDictionary;\n\n    #[test]\n    fn damerau_transposition_costs_one() {\n        let lev_automata =\n            levenshtein_automata::LevenshteinAutomatonBuilder::new(1, true).build_dfa(\"woof\");\n        assert_eq!(\n            lev_automata.eval(\"wofo\"),\n            levenshtein_automata::Distance::Exact(1)\n        );\n    }\n\n    #[test]\n    fn damerau_transposition_costs_two() {\n        let lev_automata =\n            levenshtein_automata::LevenshteinAutomatonBuilder::new(1, false).build_dfa(\"woof\");\n        assert_eq!(\n            lev_automata.eval(\"wofo\"),\n            levenshtein_automata::Distance::AtLeast(2)\n        );\n    }\n\n    #[test]\n    fn fst_map_contains_all_in_mutable_dict() {\n        let dict = FstDictionary::curated();\n\n        for word in dict.words_iter() {\n            let misspelled_normalized = word.normalized();\n            let misspelled_word = misspelled_normalized.to_string();\n            let misspelled_lower = misspelled_normalized.to_lower().to_string();\n\n            dbg!(&misspelled_lower);\n\n            assert!(!misspelled_word.is_empty());\n            assert!(dict.word_map.contains_key(misspelled_word));\n        }\n    }\n\n    #[test]\n    fn fst_contains_hello() {\n        let dict = FstDictionary::curated();\n\n        let word: Vec<_> = \"hello\".chars().collect();\n        let misspelled_normalized = word.normalized();\n        let misspelled_word = misspelled_normalized.to_string();\n        let misspelled_lower = misspelled_normalized.to_lower().to_string();\n\n        assert!(dict.contains_word(&misspelled_normalized));\n        assert!(\n            dict.word_map.contains_key(misspelled_lower)\n                || dict.word_map.contains_key(misspelled_word)\n        );\n    }\n\n    #[test]\n    fn on_is_not_nominal() {\n        let dict = FstDictionary::curated();\n\n        assert!(!dict.get_word_metadata_str(\"on\").unwrap().is_nominal());\n    }\n\n    #[test]\n    fn fuzzy_result_sorted_by_edit_distance() {\n        let dict = FstDictionary::curated();\n\n        let results = dict.fuzzy_match_str(\"hello\", 3, 100);\n        let is_sorted_by_dist = results\n            .iter()\n            .map(|fm| fm.edit_distance)\n            .tuple_windows()\n            .all(|(a, b)| a <= b);\n\n        assert!(is_sorted_by_dist)\n    }\n\n    #[test]\n    fn curated_contains_no_duplicates() {\n        let dict = FstDictionary::curated();\n\n        assert!(dict.words.iter().map(|(word, _)| word).all_unique());\n    }\n\n    #[test]\n    fn contractions_not_derived() {\n        let dict = FstDictionary::curated();\n\n        let contractions = [\"there's\", \"we're\", \"here's\"];\n\n        for contraction in contractions {\n            dbg!(contraction);\n            assert!(\n                dict.get_word_metadata_str(contraction)\n                    .unwrap()\n                    .derived_from\n                    .is_none()\n            )\n        }\n    }\n\n    #[test]\n    fn plural_llamas_derived_from_llama() {\n        let dict = FstDictionary::curated();\n\n        assert_eq!(\n            dict.get_word_metadata_str(\"llamas\")\n                .unwrap()\n                .derived_from\n                .unwrap(),\n            WordId::from_word_str(\"llama\")\n        )\n    }\n\n    #[test]\n    fn plural_cats_derived_from_cat() {\n        let dict = FstDictionary::curated();\n\n        assert_eq!(\n            dict.get_word_metadata_str(\"cats\")\n                .unwrap()\n                .derived_from\n                .unwrap(),\n            WordId::from_word_str(\"cat\")\n        );\n    }\n\n    #[test]\n    fn unhappy_derived_from_happy() {\n        let dict = FstDictionary::curated();\n\n        assert_eq!(\n            dict.get_word_metadata_str(\"unhappy\")\n                .unwrap()\n                .derived_from\n                .unwrap(),\n            WordId::from_word_str(\"happy\")\n        );\n    }\n\n    #[test]\n    fn quickly_derived_from_quick() {\n        let dict = FstDictionary::curated();\n\n        assert_eq!(\n            dict.get_word_metadata_str(\"quickly\")\n                .unwrap()\n                .derived_from\n                .unwrap(),\n            WordId::from_word_str(\"quick\")\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/merged_dictionary.rs",
    "content": "use std::borrow::Cow;\nuse std::hash::{BuildHasher, Hasher};\nuse std::sync::Arc;\n\nuse foldhash::quality::FixedState;\nuse itertools::Itertools;\n\nuse super::{FstDictionary, WordId};\nuse super::{FuzzyMatchResult, dictionary::Dictionary};\nuse crate::{CharString, DictWordMetadata};\n\n/// A simple wrapper over [`Dictionary`] that allows\n/// one to merge multiple dictionaries without copying.\n///\n/// In cases where more than one dictionary contains a word, data in the first\n/// dictionary inserted will be returned.\n#[derive(Clone)]\npub struct MergedDictionary {\n    children: Vec<Arc<dyn Dictionary>>,\n    hasher_builder: FixedState,\n    child_hashes: Vec<u64>,\n}\n\nimpl MergedDictionary {\n    pub fn new() -> Self {\n        Self {\n            children: Vec::new(),\n            hasher_builder: FixedState::default(),\n            child_hashes: Vec::new(),\n        }\n    }\n\n    pub fn add_dictionary(&mut self, dictionary: Arc<dyn Dictionary>) {\n        self.child_hashes.push(self.hash_dictionary(&dictionary));\n        self.children.push(dictionary);\n    }\n\n    fn hash_dictionary(&self, dictionary: &Arc<dyn Dictionary>) -> u64 {\n        // Hashing the curated dictionary isn't super helpful and takes a long time.\n        if Arc::ptr_eq(\n            dictionary,\n            &(FstDictionary::curated() as Arc<dyn Dictionary>),\n        ) {\n            return 1;\n        }\n\n        let mut hasher = self.hasher_builder.build_hasher();\n\n        dictionary\n            .words_iter()\n            .for_each(|w| w.iter().for_each(|c| hasher.write_u32(*c as u32)));\n\n        hasher.finish()\n    }\n}\n\nimpl PartialEq for MergedDictionary {\n    fn eq(&self, other: &Self) -> bool {\n        self.child_hashes == other.child_hashes\n    }\n}\n\nimpl Default for MergedDictionary {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl Dictionary for MergedDictionary {\n    fn get_correct_capitalization_of(&self, word: &[char]) -> Option<&'_ [char]> {\n        for child in &self.children {\n            if let Some(word) = child.get_correct_capitalization_of(word) {\n                return Some(word);\n            }\n        }\n        None\n    }\n\n    fn contains_word(&self, word: &[char]) -> bool {\n        for child in &self.children {\n            if child.contains_word(word) {\n                return true;\n            }\n        }\n        false\n    }\n\n    fn contains_exact_word(&self, word: &[char]) -> bool {\n        for child in &self.children {\n            if child.contains_exact_word(word) {\n                return true;\n            }\n        }\n        false\n    }\n\n    fn get_word_metadata(&self, word: &[char]) -> Option<Cow<'_, DictWordMetadata>> {\n        let mut meta_iter = self\n            .children\n            .iter()\n            .filter_map(|d| d.get_word_metadata(word));\n\n        let first = meta_iter.next()?;\n\n        // Check if multiple entries were found for the word.\n        if let Some(second) = meta_iter.next() {\n            // If so, merge them.\n            let mut first = first.into_owned();\n            first.merge(&second);\n            meta_iter.for_each(|additional_md| {\n                first.merge(&additional_md);\n            });\n\n            Some(Cow::Owned(first))\n        } else {\n            // If not, return the sole found entry.\n            Some(first)\n        }\n    }\n\n    fn words_iter(&self) -> Box<dyn Iterator<Item = &'_ [char]> + Send + '_> {\n        Box::new(self.children.iter().flat_map(|c| c.words_iter()))\n    }\n\n    fn contains_word_str(&self, word: &str) -> bool {\n        let chars: CharString = word.chars().collect();\n        self.contains_word(&chars)\n    }\n\n    fn contains_exact_word_str(&self, word: &str) -> bool {\n        let chars: CharString = word.chars().collect();\n        self.contains_word(&chars)\n    }\n\n    fn get_word_metadata_str(&self, word: &str) -> Option<Cow<'_, DictWordMetadata>> {\n        let chars: CharString = word.chars().collect();\n        self.get_word_metadata(&chars)\n    }\n\n    fn fuzzy_match(\n        &'_ self,\n        word: &[char],\n        max_distance: u8,\n        max_results: usize,\n    ) -> Vec<FuzzyMatchResult<'_>> {\n        self.children\n            .iter()\n            .flat_map(|d| d.fuzzy_match(word, max_distance, max_results))\n            .sorted_by_key(|r| r.word)\n            .dedup_by(|a, b| a.word == b.word)\n            .sorted_by_key(|r| r.edit_distance)\n            .take(max_results)\n            .collect()\n    }\n\n    fn fuzzy_match_str(\n        &'_ self,\n        word: &str,\n        max_distance: u8,\n        max_results: usize,\n    ) -> Vec<FuzzyMatchResult<'_>> {\n        self.children\n            .iter()\n            .flat_map(|d| d.fuzzy_match_str(word, max_distance, max_results))\n            .sorted_by_key(|r| r.word)\n            .dedup_by(|a, b| a.word == b.word)\n            .sorted_by_key(|r| r.edit_distance)\n            .take(max_results)\n            .collect()\n    }\n\n    fn word_count(&self) -> usize {\n        self.children.iter().map(|d| d.word_count()).sum()\n    }\n\n    fn get_word_from_id(&self, id: &WordId) -> Option<&[char]> {\n        self.children\n            .iter()\n            .find_map(|dict| dict.get_word_from_id(id))\n    }\n\n    fn find_words_with_prefix(&self, prefix: &[char]) -> Vec<Cow<'_, [char]>> {\n        self.children\n            .iter()\n            .flat_map(|dict| dict.find_words_with_prefix(prefix))\n            .sorted()\n            .dedup()\n            .collect()\n    }\n\n    fn find_words_with_common_prefix(&self, word: &[char]) -> Vec<Cow<'_, [char]>> {\n        self.children\n            .iter()\n            .flat_map(|dict| dict.find_words_with_common_prefix(word))\n            .sorted()\n            .dedup()\n            .collect()\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/mod.rs",
    "content": "//! Contains the relevant code for performing dictionary lookups and spellchecking (i.e. fuzzy\n//! dictionary lookups).\n\nuse itertools::Itertools;\n\nuse crate::{CharString, CharStringExt, DictWordMetadata};\n\npub use self::dictionary::Dictionary;\npub use self::fst_dictionary::FstDictionary;\npub use self::merged_dictionary::MergedDictionary;\npub use self::mutable_dictionary::MutableDictionary;\npub use self::trie_dictionary::TrieDictionary;\npub use self::word_id::WordId;\n\nmod dictionary;\nmod fst_dictionary;\nmod merged_dictionary;\nmod mutable_dictionary;\nmod rune;\nmod trie_dictionary;\nmod word_id;\nmod word_map;\n\n#[derive(PartialEq, Debug, Hash, Eq)]\npub struct FuzzyMatchResult<'a> {\n    pub word: &'a [char],\n    pub edit_distance: u8,\n    pub metadata: std::borrow::Cow<'a, DictWordMetadata>,\n}\n\nimpl PartialOrd for FuzzyMatchResult<'_> {\n    fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {\n        self.edit_distance.partial_cmp(&other.edit_distance)\n    }\n}\n\n/// Returns whether the two words are the same, expect that one is written\n/// with 'ou' and the other with 'o'.\n///\n/// E.g. \"color\" and \"colour\"\npub(crate) fn is_ou_misspelling(a: &[char], b: &[char]) -> bool {\n    if a.len().abs_diff(b.len()) != 1 {\n        return false;\n    }\n\n    let mut a_iter = a.iter();\n    let mut b_iter = b.iter();\n\n    loop {\n        match (\n            a_iter.next().map(char::to_ascii_lowercase),\n            b_iter.next().map(char::to_ascii_lowercase),\n        ) {\n            (Some('o'), Some('o')) => {\n                let mut a_next = a_iter.next().map(char::to_ascii_lowercase);\n                let mut b_next = b_iter.next().map(char::to_ascii_lowercase);\n                if a_next != b_next {\n                    if a_next == Some('u') {\n                        a_next = a_iter.next().map(char::to_ascii_lowercase);\n                    } else if b_next == Some('u') {\n                        b_next = b_iter.next().map(char::to_ascii_lowercase);\n                    }\n\n                    if a_next != b_next {\n                        return false;\n                    }\n                }\n            }\n            (Some(a_char), Some(b_char)) => {\n                if !a_char.eq_ignore_ascii_case(&b_char) {\n                    return false;\n                }\n            }\n            (None, None) => return true,\n            _ => return false,\n        }\n    }\n}\n\n/// Returns whether the two words are the same, expect for a single confusion of:\n///\n/// - `s` and `z`. E.g.\"realize\" and \"realise\"\n/// - `s` and `c`. E.g. \"defense\" and \"defence\"\n/// - `k` and `c`. E.g. \"skepticism\" and \"scepticism\"\npub(crate) fn is_cksz_misspelling(a: &[char], b: &[char]) -> bool {\n    if a.len() != b.len() {\n        return false;\n    }\n    if a.is_empty() {\n        return true;\n    }\n\n    // the first character must be the same\n    if !a[0].eq_ignore_ascii_case(&b[0]) {\n        return false;\n    }\n\n    let mut found = false;\n    for (a_char, b_char) in a.iter().copied().zip(b.iter().copied()) {\n        let a_char = a_char.to_ascii_lowercase();\n        let b_char = b_char.to_ascii_lowercase();\n\n        if a_char != b_char {\n            if (a_char == 's' && b_char == 'z')\n                || (a_char == 'z' && b_char == 's')\n                || (a_char == 's' && b_char == 'c')\n                || (a_char == 'c' && b_char == 's')\n                || (a_char == 'k' && b_char == 'c')\n                || (a_char == 'c' && b_char == 'k')\n            {\n                if found {\n                    return false;\n                }\n                found = true;\n            } else {\n                return false;\n            }\n        }\n    }\n\n    found\n}\n\n/// Returns whether the two words are the same, expect that one is written\n/// with '-er' and the other with '-re'.\n///\n/// E.g. \"meter\" and \"metre\"\npub(crate) fn is_er_misspelling(a: &[char], b: &[char]) -> bool {\n    if a.len() != b.len() || a.len() <= 4 {\n        return false;\n    }\n\n    let len = a.len();\n    let a_suffix = [&a[len - 2], &a[len - 1]].map(char::to_ascii_lowercase);\n    let b_suffix = [&b[len - 2], &b[len - 1]].map(char::to_ascii_lowercase);\n\n    if a_suffix == ['r', 'e'] && b_suffix == ['e', 'r']\n        || a_suffix == ['e', 'r'] && b_suffix == ['r', 'e']\n    {\n        return a[0..len - 2]\n            .iter()\n            .copied()\n            .zip(b[0..len - 2].iter().copied())\n            .all(|(a_char, b_char)| a_char.eq_ignore_ascii_case(&b_char));\n    }\n\n    false\n}\n\n/// Returns whether the two words are the same, expect that one is written\n/// with 'll' and the other with 'l'.\n///\n/// E.g. \"traveller\" and \"traveler\"\npub(crate) fn is_ll_misspelling(a: &[char], b: &[char]) -> bool {\n    if a.len().abs_diff(b.len()) != 1 {\n        return false;\n    }\n\n    let mut a_iter = a.iter();\n    let mut b_iter = b.iter();\n\n    loop {\n        match (\n            a_iter.next().map(char::to_ascii_lowercase),\n            b_iter.next().map(char::to_ascii_lowercase),\n        ) {\n            (Some('l'), Some('l')) => {\n                let mut a_next = a_iter.next().map(char::to_ascii_lowercase);\n                let mut b_next = b_iter.next().map(char::to_ascii_lowercase);\n                if a_next != b_next {\n                    if a_next == Some('l') {\n                        a_next = a_iter.next().map(char::to_ascii_lowercase);\n                    } else if b_next == Some('l') {\n                        b_next = b_iter.next().map(char::to_ascii_lowercase);\n                    }\n\n                    if a_next != b_next {\n                        return false;\n                    }\n                }\n            }\n            (Some(a_char), Some(b_char)) => {\n                if !a_char.eq_ignore_ascii_case(&b_char) {\n                    return false;\n                }\n            }\n            (None, None) => return true,\n            _ => return false,\n        }\n    }\n}\n\npub fn is_th_h_missing(a: &[char], b: &[char]) -> bool {\n    a.iter().any(|c| c.eq_ignore_ascii_case(&'t'))\n        && b.iter()\n            .tuple_windows()\n            .any(|(a, b)| a.eq_ignore_ascii_case(&'t') && b.eq_ignore_ascii_case(&'h'))\n}\n\n/// Returns whether the two words are the same, except that one is written\n/// with 'ay' and the other with 'ey'.\n///\n/// E.g. \"gray\" and \"grey\"\npub(crate) fn is_ay_ey_misspelling(a: &[char], b: &[char]) -> bool {\n    if a.len() != b.len() {\n        return false;\n    }\n\n    let mut found_ay_ey = false;\n    let mut a_iter = a.iter();\n    let mut b_iter = b.iter();\n\n    while let (Some(&a_char), Some(&b_char)) = (a_iter.next(), b_iter.next()) {\n        if a_char.eq_ignore_ascii_case(&b_char) {\n            continue;\n        }\n\n        // Check for 'a'/'e' difference\n        if (a_char.eq_ignore_ascii_case(&'a') && b_char.eq_ignore_ascii_case(&'e'))\n            || (a_char.eq_ignore_ascii_case(&'e') && b_char.eq_ignore_ascii_case(&'a'))\n        {\n            // Check if next character is 'y' for both\n            if let (Some(&a_next), Some(&b_next)) = (a_iter.next(), b_iter.next())\n                && a_next.eq_ignore_ascii_case(&'y')\n                && b_next.eq_ignore_ascii_case(&'y')\n            {\n                if found_ay_ey {\n                    return false; // More than one ay/ey difference\n                }\n                found_ay_ey = true;\n                continue;\n            }\n        }\n        return false; // Non-ay/ey difference found\n    }\n\n    if !found_ay_ey {\n        return false;\n    }\n    found_ay_ey\n}\n\n/// Returns whether the two words are the same, except that one is written\n/// with 'ei' and the other with 'ie'.\n///\n/// E.g. \"recieved\" instead of \"received\", \"cheif\" instead of \"chief\"\npub(crate) fn is_ei_ie_misspelling(a: &[char], b: &[char]) -> bool {\n    if a.len() != b.len() {\n        return false;\n    }\n    let mut found_ei_ie = false;\n    let mut a_iter = a.iter();\n    let mut b_iter = b.iter();\n\n    while let (Some(&a_char), Some(&b_char)) = (a_iter.next(), b_iter.next()) {\n        if a_char.eq_ignore_ascii_case(&b_char) {\n            continue;\n        }\n\n        // Check for 'e' vs 'i' in first position\n        if a_char.eq_ignore_ascii_case(&'e') && b_char.eq_ignore_ascii_case(&'i') {\n            if let (Some(&a_next), Some(&b_next)) = (a_iter.next(), b_iter.next()) {\n                // Next chars must be 'i' and 'e' respectively\n                if a_next.eq_ignore_ascii_case(&'i') && b_next.eq_ignore_ascii_case(&'e') {\n                    if found_ei_ie {\n                        return false; // More than one ei/ie difference\n                    }\n                    found_ei_ie = true;\n                    continue;\n                }\n            }\n        }\n        // Check for 'i' vs 'e' in first position\n        else if a_char.eq_ignore_ascii_case(&'i')\n            && b_char.eq_ignore_ascii_case(&'e')\n            && let (Some(&a_next), Some(&b_next)) = (a_iter.next(), b_iter.next())\n        {\n            // Next chars must be 'e' and 'i' respectively\n            if a_next.eq_ignore_ascii_case(&'e') && b_next.eq_ignore_ascii_case(&'i') {\n                if found_ei_ie {\n                    return false; // More than one ei/ie difference\n                }\n                found_ei_ie = true;\n                continue;\n            }\n        }\n        return false;\n    }\n    found_ei_ie\n}\n\n/// Scores a possible spelling suggestion based on possible relevance to the user.\n///\n/// Lower = better.\nfn score_suggestion(misspelled_word: &[char], sug: &FuzzyMatchResult) -> i32 {\n    if misspelled_word.is_empty() || sug.word.is_empty() {\n        return i32::MAX;\n    }\n\n    let mut score = sug.edit_distance as i32 * 10;\n\n    // People are much less likely to mistype the first letter.\n    if misspelled_word\n        .first()\n        .unwrap()\n        .eq_ignore_ascii_case(sug.word.first().unwrap())\n    {\n        score -= 10;\n    }\n\n    // If the original word is plural, the correct one probably is too.\n    if *misspelled_word.last().unwrap() == 's' && *sug.word.last().unwrap() == 's' {\n        score -= 5;\n    }\n\n    // Promote suggestions that differ only by an apostrophe\n    let check_apostrophe_diff = |longer: &[char], shorter: &[char]| -> bool {\n        if let Some(pos) = longer.iter().position(|&c| c == '\\'' || c == '’') {\n            longer.len() - 1 == shorter.len()\n                && longer.starts_with(&shorter[..pos])\n                && longer.ends_with(&shorter[pos..])\n        } else {\n            false\n        }\n    };\n\n    match (\n        misspelled_word.len() as i32 - sug.word.len() as i32,\n        sug.metadata.is_apostrophized(),\n    ) {\n        (1, _)\n            if (misspelled_word.contains(&'\\'') || misspelled_word.contains(&'\\u{2019}'))\n                && check_apostrophe_diff(misspelled_word, sug.word) =>\n        {\n            score -= 8\n        }\n        (-1, true) if check_apostrophe_diff(sug.word, misspelled_word) => score -= 8,\n        _ => {} // not a single-character apostrophe difference\n    }\n\n    // Boost common words.\n    if sug.metadata.common && sug.metadata.derived_from.is_none() {\n        score -= 4;\n    }\n\n    // For turning words into contractions.\n    if sug.word.iter().filter(|c| **c == '\\'').count() == 1 {\n        score -= 5;\n    }\n\n    if is_th_h_missing(misspelled_word, sug.word) {\n        score -= 6;\n    }\n\n    if !misspelled_word.contains_vowel() && !sug.word.contains_vowel() {\n        score += 10;\n    }\n\n    // Detect dialect-specific variations\n    if sug.edit_distance == 1\n        && (is_cksz_misspelling(misspelled_word, sug.word)\n            || is_ou_misspelling(misspelled_word, sug.word)\n            || is_ll_misspelling(misspelled_word, sug.word)\n            || is_ay_ey_misspelling(misspelled_word, sug.word)\n            || is_th_h_missing(misspelled_word, sug.word))\n    {\n        score -= 6;\n    }\n\n    if sug.edit_distance <= 2 {\n        if is_ei_ie_misspelling(misspelled_word, sug.word) {\n            score -= 11;\n        }\n        if is_er_misspelling(misspelled_word, sug.word) {\n            score -= 15;\n        }\n    }\n\n    score\n}\n\n/// Order the suggestions to be shown to the user.\nfn order_suggestions<'b>(\n    misspelled_word: &[char],\n    mut matches: Vec<FuzzyMatchResult<'b>>,\n) -> Vec<&'b [char]> {\n    matches.sort_by_cached_key(|v| score_suggestion(misspelled_word, v));\n\n    matches.into_iter().map(|v| v.word).collect()\n}\n\n/// Get the closest matches in the provided [`Dictionary`] and rank them\n/// Implementation is left up to the underlying dictionary.\npub fn suggest_correct_spelling<'a>(\n    misspelled_word: &[char],\n    result_limit: usize,\n    max_edit_dist: u8,\n    dictionary: &'a impl Dictionary,\n) -> Vec<&'a [char]> {\n    let matches: Vec<FuzzyMatchResult> = dictionary\n        .fuzzy_match(misspelled_word, max_edit_dist, result_limit)\n        .into_iter()\n        .collect();\n\n    order_suggestions(misspelled_word, matches)\n}\n\n/// Convenience function over [`suggest_correct_spelling`] that does conversions\n/// for you.\npub fn suggest_correct_spelling_str(\n    misspelled_word: impl Into<String>,\n    result_limit: usize,\n    max_edit_dist: u8,\n    dictionary: &impl Dictionary,\n) -> Vec<String> {\n    let chars: CharString = misspelled_word.into().chars().collect();\n    suggest_correct_spelling(&chars, result_limit, max_edit_dist, dictionary)\n        .into_iter()\n        .map(|a| a.to_string())\n        .collect()\n}\n\n#[cfg(test)]\nmod tests {\n    use itertools::Itertools;\n\n    use crate::CharStringExt;\n\n    use super::{FstDictionary, suggest_correct_spelling_str};\n\n    const RESULT_LIMIT: usize = 200;\n    const MAX_EDIT_DIST: u8 = 2;\n\n    #[test]\n    fn normalizes_weve() {\n        let word = ['w', 'e', '’', 'v', 'e'];\n        let norm = word.normalized();\n\n        assert_eq!(norm.clone(), vec!['w', 'e', '\\'', 'v', 'e'])\n    }\n\n    #[test]\n    fn punctation_no_duplicates() {\n        let results = suggest_correct_spelling_str(\n            \"punctation\",\n            RESULT_LIMIT,\n            MAX_EDIT_DIST,\n            &FstDictionary::curated(),\n        );\n\n        assert!(results.iter().all_unique())\n    }\n\n    #[test]\n    fn youre_contraction() {\n        assert_suggests_correction(\"youre\", \"you're\");\n    }\n\n    #[test]\n    fn thats_contraction() {\n        assert_suggests_correction(\"thats\", \"that's\");\n    }\n\n    #[test]\n    fn weve_contraction() {\n        assert_suggests_correction(\"weve\", \"we've\");\n    }\n\n    #[test]\n    fn this_correction() {\n        assert_suggests_correction(\"ths\", \"this\");\n    }\n\n    #[test]\n    fn issue_624_no_duplicates() {\n        let results = suggest_correct_spelling_str(\n            \"Semantical\",\n            RESULT_LIMIT,\n            MAX_EDIT_DIST,\n            &FstDictionary::curated(),\n        );\n\n        assert!(results.iter().all_unique())\n    }\n\n    #[test]\n    fn issue_182() {\n        assert_suggests_correction(\"Im\", \"I'm\");\n    }\n\n    #[test]\n    fn fst_spellcheck_hvllo() {\n        let results = suggest_correct_spelling_str(\n            \"hvllo\",\n            RESULT_LIMIT,\n            MAX_EDIT_DIST,\n            &FstDictionary::curated(),\n        );\n\n        assert!(results.iter().take(3).contains(&\"hello\".to_string()));\n    }\n\n    /// Assert that the default suggestion settings result in a specific word\n    /// being in the top three results for a given misspelling.\n    #[track_caller]\n    fn assert_suggests_correction(misspelled_word: &str, correct: &str) {\n        let results = suggest_correct_spelling_str(\n            misspelled_word,\n            RESULT_LIMIT,\n            MAX_EDIT_DIST,\n            &FstDictionary::curated(),\n        );\n\n        dbg!(&results);\n\n        assert!(results.iter().take(3).contains(&correct.to_string()));\n    }\n\n    #[test]\n    fn spellcheck_hvllo() {\n        assert_suggests_correction(\"hvllo\", \"hello\");\n    }\n\n    #[test]\n    fn spellcheck_aout() {\n        assert_suggests_correction(\"aout\", \"about\");\n    }\n\n    #[test]\n    fn spellchecking_is_deterministic() {\n        let results1 = suggest_correct_spelling_str(\n            \"hello\",\n            RESULT_LIMIT,\n            MAX_EDIT_DIST,\n            &FstDictionary::curated(),\n        );\n        let results2 = suggest_correct_spelling_str(\n            \"hello\",\n            RESULT_LIMIT,\n            MAX_EDIT_DIST,\n            &FstDictionary::curated(),\n        );\n        let results3 = suggest_correct_spelling_str(\n            \"hello\",\n            RESULT_LIMIT,\n            MAX_EDIT_DIST,\n            &FstDictionary::curated(),\n        );\n\n        assert_eq!(results1, results2);\n        assert_eq!(results1, results3);\n    }\n\n    #[test]\n    fn adviced_correction() {\n        assert_suggests_correction(\"adviced\", \"advised\");\n    }\n\n    #[test]\n    fn aknowledged_correction() {\n        assert_suggests_correction(\"aknowledged\", \"acknowledged\");\n    }\n\n    #[test]\n    fn alcaholic_correction() {\n        assert_suggests_correction(\"alcaholic\", \"alcoholic\");\n    }\n\n    #[test]\n    fn slaves_correction() {\n        assert_suggests_correction(\"Slaves\", \"Slavs\");\n    }\n\n    #[test]\n    fn conciousness_correction() {\n        assert_suggests_correction(\"conciousness\", \"consciousness\");\n    }\n\n    #[test]\n    fn v_apostrophe_s_suggests_vs() {\n        assert_suggests_correction(\"v's\", \"vs\");\n    }\n\n    #[test]\n    fn v_apostrophe_typographical_s_suggests_vs() {\n        assert_suggests_correction(\"v’s\", \"vs\");\n    }\n\n    #[test]\n    fn missing_apostrophe_childrens_suggests_childrens() {\n        assert_suggests_correction(\"childrens\", \"children's\");\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/mutable_dictionary.rs",
    "content": "use super::{\n    FstDictionary, WordId,\n    rune::{self, AttributeList, parse_word_list},\n    word_map::{WordMap, WordMapEntry},\n};\nuse crate::edit_distance::edit_distance_min_alloc;\nuse itertools::Itertools;\nuse std::sync::Arc;\nuse std::{borrow::Cow, sync::LazyLock};\n\nuse crate::{CharString, CharStringExt, DictWordMetadata};\n\nuse super::FuzzyMatchResult;\nuse super::dictionary::Dictionary;\n\n/// A basic dictionary that allows words to be added after instantiating.\n/// This is useful for user and file dictionaries that may change at runtime.\n///\n/// For immutable use-cases that require fuzzy lookups, such as the curated dictionary, prefer [`super::FstDictionary`],\n/// as it is much faster.\n///\n/// To combine the contents of multiple dictionaries, regardless of type, use\n/// [`super::MergedDictionary`].\n#[derive(Debug, Clone, Eq, PartialEq)]\npub struct MutableDictionary {\n    /// All English words\n    word_map: WordMap,\n}\n\n/// The uncached function that is used to produce the original copy of the\n/// curated dictionary.\nfn uncached_inner_new() -> Arc<MutableDictionary> {\n    MutableDictionary::from_rune_files(\n        include_str!(\"../../dictionary.dict\"),\n        include_str!(\"../../annotations.json\"),\n    )\n    .map(Arc::new)\n    .unwrap_or_else(|e| panic!(\"Failed to load curated dictionary: {}\", e))\n}\n\nstatic DICT: LazyLock<Arc<MutableDictionary>> = LazyLock::new(uncached_inner_new);\n\nimpl MutableDictionary {\n    pub fn new() -> Self {\n        Self {\n            word_map: WordMap::default(),\n        }\n    }\n\n    pub fn from_rune_files(word_list: &str, attr_list: &str) -> Result<Self, rune::Error> {\n        let word_list = parse_word_list(word_list)?;\n        let attr_list = AttributeList::parse(attr_list)?;\n\n        // There will be at _least_ this number of words\n        let mut word_map = WordMap::default();\n\n        attr_list.expand_annotated_words(word_list, &mut word_map);\n\n        Ok(Self { word_map })\n    }\n\n    /// Create a dictionary from the curated dictionary included\n    /// in the Harper binary.\n    /// Consider using [`super::FstDictionary::curated()`] instead, as it is more performant for spellchecking.\n    pub fn curated() -> Arc<Self> {\n        (*DICT).clone()\n    }\n\n    /// Appends words to the dictionary.\n    /// It is significantly faster to append many words with one call than many\n    /// distinct calls to this function.\n    pub fn extend_words(\n        &mut self,\n        words: impl IntoIterator<Item = (impl AsRef<[char]>, DictWordMetadata)>,\n    ) {\n        for (chars, metadata) in words.into_iter() {\n            self.word_map.insert(WordMapEntry {\n                metadata,\n                canonical_spelling: chars.as_ref().into(),\n            })\n        }\n    }\n\n    /// Append a single word to the dictionary.\n    ///\n    /// If you are appending many words, consider using [`Self::extend_words`]\n    /// instead.\n    pub fn append_word(&mut self, word: impl AsRef<[char]>, metadata: DictWordMetadata) {\n        self.extend_words(std::iter::once((word.as_ref(), metadata)))\n    }\n\n    /// Append a single string to the dictionary.\n    ///\n    /// If you are appending many words, consider using [`Self::extend_words`]\n    /// instead.\n    pub fn append_word_str(&mut self, word: &str, metadata: DictWordMetadata) {\n        self.append_word(word.chars().collect::<Vec<_>>(), metadata)\n    }\n}\n\nimpl Default for MutableDictionary {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl Dictionary for MutableDictionary {\n    fn get_word_metadata(&self, word: &[char]) -> Option<Cow<'_, DictWordMetadata>> {\n        self.word_map\n            .get_with_chars(word)\n            .map(|v| Cow::Borrowed(&v.metadata))\n    }\n\n    fn contains_word(&self, word: &[char]) -> bool {\n        self.word_map.contains_chars(word)\n    }\n\n    fn contains_word_str(&self, word: &str) -> bool {\n        let chars: CharString = word.chars().collect();\n        self.contains_word(&chars)\n    }\n\n    fn get_word_metadata_str(&self, word: &str) -> Option<Cow<'_, DictWordMetadata>> {\n        let chars: CharString = word.chars().collect();\n        self.get_word_metadata(&chars)\n    }\n\n    fn get_correct_capitalization_of(&self, word: &[char]) -> Option<&'_ [char]> {\n        self.word_map\n            .get_with_chars(word)\n            .map(|v| v.canonical_spelling.as_slice())\n    }\n\n    /// Suggest a correct spelling for a given misspelled word.\n    /// `Self::word` is assumed to be quite small (n < 100).\n    /// `max_distance` relates to an optimization that allows the search\n    /// algorithm to prune large portions of the search.\n    fn fuzzy_match(\n        &'_ self,\n        word: &[char],\n        max_distance: u8,\n        max_results: usize,\n    ) -> Vec<FuzzyMatchResult<'_>> {\n        let misspelled_charslice = word.normalized();\n        let misspelled_charslice_lower = misspelled_charslice.to_lower();\n\n        let shortest_word_len = if misspelled_charslice.len() <= max_distance as usize {\n            1\n        } else {\n            misspelled_charslice.len() - max_distance as usize\n        };\n        let longest_word_len = misspelled_charslice.len() + max_distance as usize;\n\n        // Get candidate words\n        let words_to_search = self\n            .words_iter()\n            .filter(|word| (shortest_word_len..=longest_word_len).contains(&word.len()));\n\n        // Pre-allocated vectors for the edit-distance calculation\n        // 53 is the length of the longest word.\n        let mut buf_a = Vec::with_capacity(53);\n        let mut buf_b = Vec::with_capacity(53);\n\n        // Sort by edit-distance\n        words_to_search\n            .filter_map(|word| {\n                let dist =\n                    edit_distance_min_alloc(&misspelled_charslice, word, &mut buf_a, &mut buf_b);\n                let lowercase_dist = edit_distance_min_alloc(\n                    &misspelled_charslice_lower,\n                    word,\n                    &mut buf_a,\n                    &mut buf_b,\n                );\n\n                let smaller_dist = dist.min(lowercase_dist);\n                if smaller_dist <= max_distance {\n                    Some((word, smaller_dist))\n                } else {\n                    None\n                }\n            })\n            .sorted_unstable_by_key(|a| a.1)\n            .take(max_results)\n            .map(|(word, edit_distance)| FuzzyMatchResult {\n                word,\n                edit_distance,\n                metadata: self.get_word_metadata(word).unwrap(),\n            })\n            .collect()\n    }\n\n    fn fuzzy_match_str(\n        &'_ self,\n        word: &str,\n        max_distance: u8,\n        max_results: usize,\n    ) -> Vec<FuzzyMatchResult<'_>> {\n        let word: Vec<_> = word.chars().collect();\n        self.fuzzy_match(&word, max_distance, max_results)\n    }\n\n    fn words_iter(&self) -> Box<dyn Iterator<Item = &'_ [char]> + Send + '_> {\n        Box::new(\n            self.word_map\n                .iter()\n                .map(|v| v.canonical_spelling.as_slice()),\n        )\n    }\n\n    fn word_count(&self) -> usize {\n        self.word_map.len()\n    }\n\n    fn contains_exact_word(&self, word: &[char]) -> bool {\n        let normalized = word.normalized();\n\n        if let Some(found) = self.word_map.get_with_chars(normalized.as_ref())\n            && found.canonical_spelling.as_ref() == normalized.as_ref()\n        {\n            return true;\n        }\n\n        false\n    }\n\n    fn contains_exact_word_str(&self, word: &str) -> bool {\n        let word: CharString = word.chars().collect();\n        self.contains_exact_word(word.as_ref())\n    }\n\n    fn get_word_from_id(&self, id: &WordId) -> Option<&[char]> {\n        self.word_map.get(id).map(|w| w.canonical_spelling.as_ref())\n    }\n\n    fn find_words_with_prefix(&self, prefix: &[char]) -> Vec<Cow<'_, [char]>> {\n        let mut found = Vec::new();\n\n        for word in self.words_iter() {\n            if let Some(item_prefix) = word.get(0..prefix.len())\n                && item_prefix == prefix\n            {\n                found.push(Cow::Borrowed(word));\n            }\n        }\n\n        found\n    }\n\n    fn find_words_with_common_prefix(&self, word: &[char]) -> Vec<Cow<'_, [char]>> {\n        let mut found = Vec::new();\n\n        for item in self.words_iter() {\n            if let Some(item_prefix) = word.get(0..item.len())\n                && item_prefix == item\n            {\n                found.push(Cow::Borrowed(item));\n            }\n        }\n\n        found\n    }\n}\n\nimpl From<MutableDictionary> for FstDictionary {\n    fn from(dict: MutableDictionary) -> Self {\n        let words = dict\n            .word_map\n            .into_iter()\n            .map(|entry| (entry.canonical_spelling, entry.metadata))\n            .collect();\n\n        FstDictionary::new(words)\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use std::borrow::Cow;\n\n    use hashbrown::HashSet;\n    use itertools::Itertools;\n\n    use crate::spell::{Dictionary, MutableDictionary};\n    use crate::{DictWordMetadata, char_string::char_string};\n\n    #[test]\n    fn curated_contains_no_duplicates() {\n        let dict = MutableDictionary::curated();\n        assert!(dict.words_iter().all_unique());\n    }\n\n    #[test]\n    fn curated_matches_capitalized() {\n        let dict = MutableDictionary::curated();\n        assert!(dict.contains_word_str(\"this\"));\n        assert!(dict.contains_word_str(\"This\"));\n    }\n\n    // \"This\" is a determiner when used similarly to \"the\"\n    // but when used alone it's a \"demonstrative pronoun\".\n    // Harper previously wrongly classified it as a noun.\n    #[test]\n    fn this_is_determiner() {\n        let dict = MutableDictionary::curated();\n        assert!(dict.get_word_metadata_str(\"this\").unwrap().is_determiner());\n        assert!(dict.get_word_metadata_str(\"This\").unwrap().is_determiner());\n    }\n\n    #[test]\n    fn several_is_quantifier() {\n        let dict = MutableDictionary::curated();\n        assert!(\n            dict.get_word_metadata_str(\"several\")\n                .unwrap()\n                .is_quantifier()\n        );\n    }\n\n    #[test]\n    fn few_is_quantifier() {\n        let dict = MutableDictionary::curated();\n        assert!(dict.get_word_metadata_str(\"few\").unwrap().is_quantifier());\n    }\n\n    #[test]\n    fn fewer_is_quantifier() {\n        let dict = MutableDictionary::curated();\n        assert!(dict.get_word_metadata_str(\"fewer\").unwrap().is_quantifier());\n    }\n\n    #[test]\n    fn than_is_conjunction() {\n        let dict = MutableDictionary::curated();\n        assert!(dict.get_word_metadata_str(\"than\").unwrap().is_conjunction());\n        assert!(dict.get_word_metadata_str(\"Than\").unwrap().is_conjunction());\n    }\n\n    #[test]\n    fn herself_is_pronoun() {\n        let dict = MutableDictionary::curated();\n        assert!(dict.get_word_metadata_str(\"herself\").unwrap().is_pronoun());\n        assert!(dict.get_word_metadata_str(\"Herself\").unwrap().is_pronoun());\n    }\n\n    #[test]\n    fn discussion_171() {\n        let dict = MutableDictionary::curated();\n        assert!(dict.contains_word_str(\"natively\"));\n    }\n\n    #[test]\n    fn im_is_common() {\n        let dict = MutableDictionary::curated();\n        assert!(dict.get_word_metadata_str(\"I'm\").unwrap().common);\n    }\n\n    #[test]\n    fn fuzzy_result_sorted_by_edit_distance() {\n        let dict = MutableDictionary::curated();\n\n        let results = dict.fuzzy_match_str(\"hello\", 3, 100);\n        let is_sorted_by_dist = results\n            .iter()\n            .map(|fm| fm.edit_distance)\n            .tuple_windows()\n            .all(|(a, b)| a <= b);\n\n        assert!(is_sorted_by_dist)\n    }\n\n    #[test]\n    fn there_is_not_a_pronoun() {\n        let dict = MutableDictionary::curated();\n\n        assert!(!dict.get_word_metadata_str(\"there\").unwrap().is_nominal());\n        assert!(!dict.get_word_metadata_str(\"there\").unwrap().is_pronoun());\n    }\n\n    #[test]\n    fn expanded_contains_giants() {\n        assert!(MutableDictionary::curated().contains_word_str(\"giants\"));\n    }\n\n    #[test]\n    fn expanded_contains_deallocate() {\n        assert!(MutableDictionary::curated().contains_word_str(\"deallocate\"));\n    }\n\n    #[test]\n    fn curated_contains_repo() {\n        let dict = MutableDictionary::curated();\n\n        assert!(dict.contains_word_str(\"repo\"));\n        assert!(dict.contains_word_str(\"repos\"));\n        assert!(dict.contains_word_str(\"repo's\"));\n    }\n\n    #[test]\n    fn curated_contains_possessive_abandonment() {\n        assert!(\n            MutableDictionary::curated()\n                .get_word_metadata_str(\"abandonment's\")\n                .unwrap()\n                .is_possessive_noun()\n        )\n    }\n\n    #[test]\n    fn has_is_not_a_nominal() {\n        let dict = MutableDictionary::curated();\n\n        let has = dict.get_word_metadata_str(\"has\");\n        assert!(has.is_some());\n\n        assert!(!has.unwrap().is_nominal())\n    }\n\n    #[test]\n    fn is_is_linking_verb() {\n        let dict = MutableDictionary::curated();\n\n        let is = dict.get_word_metadata_str(\"is\");\n\n        assert!(is.is_some());\n        assert!(is.unwrap().is_linking_verb());\n    }\n\n    #[test]\n    fn are_merged_attrs_same_as_spread_attrs() {\n        let curated_attr_list = include_str!(\"../../annotations.json\");\n\n        let merged = MutableDictionary::from_rune_files(\"1\\nblork/DGS\", curated_attr_list).unwrap();\n        let spread =\n            MutableDictionary::from_rune_files(\"2\\nblork/DG\\nblork/S\", curated_attr_list).unwrap();\n\n        assert_eq!(\n            merged.word_map.into_iter().collect::<HashSet<_>>(),\n            spread.word_map.into_iter().collect::<HashSet<_>>()\n        );\n    }\n\n    #[test]\n    fn apart_is_not_noun() {\n        let dict = MutableDictionary::curated();\n\n        assert!(!dict.get_word_metadata_str(\"apart\").unwrap().is_noun());\n    }\n\n    #[test]\n    fn be_is_verb_lemma() {\n        let dict = MutableDictionary::curated();\n\n        let is = dict.get_word_metadata_str(\"be\");\n\n        assert!(is.is_some());\n        assert!(is.unwrap().is_verb_lemma());\n    }\n\n    #[test]\n    fn gets_prefixes_as_expected() {\n        let mut dict = MutableDictionary::new();\n        dict.append_word_str(\"predict\", DictWordMetadata::default());\n        dict.append_word_str(\"prelude\", DictWordMetadata::default());\n        dict.append_word_str(\"preview\", DictWordMetadata::default());\n        dict.append_word_str(\"dwight\", DictWordMetadata::default());\n\n        let with_prefix = dict.find_words_with_prefix(char_string!(\"pre\").as_slice());\n\n        assert_eq!(with_prefix.len(), 3);\n        assert!(with_prefix.contains(&Cow::Owned(char_string!(\"predict\").into_vec())));\n        assert!(with_prefix.contains(&Cow::Owned(char_string!(\"prelude\").into_vec())));\n        assert!(with_prefix.contains(&Cow::Owned(char_string!(\"preview\").into_vec())));\n    }\n\n    #[test]\n    fn gets_common_prefixes_as_expected() {\n        let mut dict = MutableDictionary::new();\n        dict.append_word_str(\"pre\", DictWordMetadata::default());\n        dict.append_word_str(\"prep\", DictWordMetadata::default());\n        dict.append_word_str(\"dwight\", DictWordMetadata::default());\n\n        let with_prefix =\n            dict.find_words_with_common_prefix(char_string!(\"preposition\").as_slice());\n\n        assert_eq!(with_prefix.len(), 2);\n        assert!(with_prefix.contains(&Cow::Owned(char_string!(\"pre\").into_vec())));\n        assert!(with_prefix.contains(&Cow::Owned(char_string!(\"prep\").into_vec())));\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/rune/affix_replacement.rs",
    "content": "use serde::{Deserialize, Serialize};\n\nuse super::Error;\nuse super::matcher::Matcher;\n\n#[derive(Debug, Clone)]\npub struct AffixReplacement {\n    pub remove: Vec<char>,\n    pub add: Vec<char>,\n    pub condition: Matcher,\n}\n\nimpl AffixReplacement {\n    pub fn to_human_readable(&self) -> HumanReadableAffixReplacement {\n        HumanReadableAffixReplacement {\n            remove: self.remove.iter().collect(),\n            add: self.add.iter().collect(),\n            condition: self.condition.to_string(),\n        }\n    }\n}\n\n/// A version of [`AffixReplacement`] that can be serialized to JSON (or\n/// whatever) and maintain the nice Regex syntax of the inner [`Matcher`].\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct HumanReadableAffixReplacement {\n    pub remove: String,\n    pub add: String,\n    pub condition: String,\n}\n\nimpl HumanReadableAffixReplacement {\n    pub fn to_normal(&self) -> Result<AffixReplacement, Error> {\n        Ok(AffixReplacement {\n            remove: self.remove.chars().collect(),\n            add: self.add.chars().collect(),\n            condition: Matcher::parse(&self.condition)?,\n        })\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/rune/attribute_list.rs",
    "content": "use hashbrown::HashMap;\nuse serde::{Deserialize, Serialize};\nuse smallvec::ToSmallVec;\n\nuse super::super::word_map::{WordMap, WordMapEntry};\nuse super::Error;\nuse super::affix_replacement::AffixReplacement;\nuse super::expansion::Property;\nuse super::expansion::{\n    AffixEntryKind,\n    AffixEntryKind::{Prefix, Suffix},\n    Expansion, HumanReadableExpansion,\n};\nuse super::word_list::AnnotatedWord;\nuse crate::dict_word_metadata_orthography::OrthFlags;\nuse crate::spell::WordId;\nuse crate::{CharString, DictWordMetadata, Span};\n\n#[derive(Debug, Clone)]\npub struct AttributeList {\n    /// Key = Affix Flag\n    affixes: HashMap<char, Expansion>,\n    properties: HashMap<char, Property>,\n}\n\nimpl AttributeList {\n    fn into_human_readable(self) -> HumanReadableAttributeList {\n        HumanReadableAttributeList {\n            affixes: self\n                .affixes\n                .into_iter()\n                .map(|(affix, exp)| (affix, exp.into_human_readable()))\n                .collect(),\n            properties: self.properties,\n        }\n    }\n\n    pub fn parse(source: &str) -> Result<Self, Error> {\n        let human_readable: Result<HumanReadableAttributeList, _> = serde_json::from_str(source);\n        human_readable\n            .map_err(Error::from)\n            .and_then(|parsed| parsed.into_normal())\n    }\n\n    /// Expand an [`AnnotatedWord`] into a list of full words, including itself.\n    ///\n    /// This function processes a word and its attributes to:\n    /// 1. Apply properties to the base word\n    /// 2. Generate derived words using affix rules\n    /// 3. Handle conditional expansions\n    /// 4. Manage cross-product expansions\n    ///\n    /// # Arguments\n    /// * `word` - The word to expand, along with its attributes\n    /// * `dest` - The WordMap to store the expanded words and their metadata\n    pub fn expand_annotated_word(&self, annotated_word: AnnotatedWord, word_map: &mut WordMap) {\n        // Pre-allocate space in the destination map for better performance\n        word_map.reserve(annotated_word.annotations.len() + 1);\n\n        // Initialize base metadata that will be applied to all derived forms\n        let mut base_metadata = DictWordMetadata::default();\n\n        // Store metadata that should only be applied if certain conditions are met\n        let orth_flags = OrthFlags::from_letters(&annotated_word.letters);\n        base_metadata.orth_info = orth_flags;\n\n        let mut conditional_expansion_metadata = Vec::new();\n\n        // First pass: Process all properties to build the base metadata\n        // Properties directly modify the word's metadata (e.g., part of speech, usage)\n        for attr in &annotated_word.annotations {\n            let Some(property) = self.properties.get(attr) else {\n                continue;\n            };\n            base_metadata.merge(&property.metadata);\n        }\n\n        // Second pass: Process all affix rules to generate derived forms\n        for attr in &annotated_word.annotations {\n            // Skip if this attribute isn't an affix rule\n            let Some(expansion) = self.affixes.get(attr) else {\n                continue;\n            };\n\n            // Add any base metadata from this affix rule\n            base_metadata.merge(&expansion.base_metadata);\n\n            // Track new words generated by this affix rule\n            let mut new_words: HashMap<CharString, DictWordMetadata> = HashMap::new();\n\n            // Apply each replacement rule in this affix\n            for replacement in &expansion.replacements {\n                if let Some(replaced) =\n                    Self::apply_replacement(replacement, &annotated_word.letters, expansion.kind)\n                {\n                    // Get or create metadata for this new word form\n                    let metadata = new_words.entry(replaced.clone()).or_default();\n\n                    // Process each target for this replacement\n                    for target in &expansion.target {\n                        if let Some(condition) = &target.if_base {\n                            // Store conditional metadata to be applied later\n                            conditional_expansion_metadata.push((\n                                replaced.clone(),\n                                target.metadata.clone(),\n                                condition.clone(),\n                            ));\n                        } else {\n                            // Apply target metadata immediately\n                            metadata.merge(&target.metadata);\n                        }\n                    }\n                }\n            }\n\n            // Handle cross-product expansions (e.g., both prefix and suffix)\n            if expansion.cross_product {\n                // Collect attributes that should be applied to the opposite affix type\n                let mut opposite_attributes = Vec::new();\n\n                // Add properties that should propagate to derived forms\n                for attr in &annotated_word.annotations {\n                    let Some(property) = self.properties.get(attr) else {\n                        continue;\n                    };\n                    if expansion.kind == Prefix || property.propagate {\n                        opposite_attributes.push(*attr);\n                    }\n                }\n\n                // Add affix attributes of the opposite type\n                for attr in &annotated_word.annotations {\n                    let Some(attr_def) = self.affixes.get(attr) else {\n                        continue;\n                    };\n                    // This checks if the current affix is of the opposite type\n                    if (attr_def.kind != Prefix) != (expansion.kind != Prefix) {\n                        opposite_attributes.push(*attr);\n                    }\n                }\n\n                // Recursively process each new word form\n                for (new_word, metadata) in new_words {\n                    self.expand_annotated_word(\n                        AnnotatedWord {\n                            letters: new_word.clone(),\n                            annotations: opposite_attributes.clone(),\n                        },\n                        word_map,\n                    );\n                    // Update the metadata of the expanded word\n                    let target_metadata = word_map.get_metadata_mut_chars(&new_word).unwrap();\n                    target_metadata.merge(&metadata);\n                    target_metadata.derived_from =\n                        Some(WordId::from_word_chars(&annotated_word.letters));\n                }\n            } else {\n                // Simple case: no cross-product expansion needed\n                for (key, mut value) in new_words.into_iter() {\n                    value.derived_from = Some(WordId::from_word_chars(&annotated_word.letters));\n\n                    if let Some(existing_metadata) = word_map.get_metadata_mut_chars(&key) {\n                        // Merge with existing metadata\n                        existing_metadata.merge(&value);\n                    } else {\n                        // Add new entry\n                        word_map.insert(WordMapEntry {\n                            canonical_spelling: key,\n                            metadata: value,\n                        });\n                    }\n                }\n            }\n        }\n\n        // Finalize the metadata for the base word\n        let mut full_metadata = base_metadata;\n\n        // Merge with any existing metadata for this word\n        if let Some(existing_metadata) = word_map.get_with_chars(&annotated_word.letters) {\n            full_metadata.merge(&existing_metadata.metadata);\n        }\n\n        // Store the final metadata for the base word\n        word_map.insert(WordMapEntry {\n            metadata: full_metadata.clone(),\n            canonical_spelling: annotated_word.letters,\n        });\n\n        // Process any conditional expansions\n        for (letters, metadata, condition) in conditional_expansion_metadata {\n            // Check if the condition is satisfied by the base word's metadata\n            let condition_satisfied = full_metadata.or(&condition) == full_metadata;\n            if !condition_satisfied {\n                continue;\n            }\n\n            // Apply the conditional metadata\n            word_map\n                .get_metadata_mut_chars(&letters)\n                .unwrap()\n                .merge(&metadata);\n        }\n    }\n\n    /// Expand an iterator of annotated words into strings.\n    /// Note that this does __not__ guarantee that produced words will be\n    /// unique.\n    pub fn expand_annotated_words(\n        &self,\n        words: impl IntoIterator<Item = AnnotatedWord>,\n        dest: &mut WordMap,\n    ) {\n        for word in words {\n            self.expand_annotated_word(word, dest);\n        }\n    }\n\n    fn apply_replacement(\n        replacement: &AffixReplacement,\n        letters: &[char],\n        kind: AffixEntryKind,\n    ) -> Option<CharString> {\n        if replacement.condition.len() > letters.len() {\n            return None;\n        }\n\n        let target_span = if kind == Suffix {\n            Span::new(letters.len() - replacement.condition.len(), letters.len())\n        } else {\n            Span::new(0, replacement.condition.len())\n        };\n\n        let target_segment = target_span.get_content(letters);\n\n        if replacement.condition.matches(target_segment) {\n            let mut replaced_segment = letters.to_smallvec();\n            let mut remove: CharString = replacement.remove.to_smallvec();\n\n            if kind != Suffix {\n                replaced_segment.reverse();\n            } else {\n                remove.reverse();\n            }\n\n            for c in &remove {\n                let last = replaced_segment.last()?;\n\n                if last == c {\n                    replaced_segment.pop();\n                } else {\n                    return None;\n                }\n            }\n\n            let mut to_add = replacement.add.to_vec();\n\n            if kind != Suffix {\n                to_add.reverse()\n            }\n\n            replaced_segment.extend(to_add);\n\n            if kind != Suffix {\n                replaced_segment.reverse();\n            }\n\n            return Some(replaced_segment);\n        }\n\n        None\n    }\n}\n\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct HumanReadableAttributeList {\n    affixes: HashMap<char, HumanReadableExpansion>,\n    properties: HashMap<char, Property>,\n}\n\nimpl HumanReadableAttributeList {\n    pub fn into_normal(self) -> Result<AttributeList, Error> {\n        let mut affixes = HashMap::with_capacity(self.affixes.len());\n\n        for (affix, expansion) in self.affixes.into_iter() {\n            affixes.insert(affix, expansion.into_normal()?);\n        }\n\n        Ok(AttributeList {\n            affixes,\n            properties: self.properties,\n        })\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::spell::{Dictionary, FstDictionary};\n\n    #[test]\n    fn proper_noun_property_propagates_to_plurals() {\n        let fst_dict = FstDictionary::curated();\n        if let Some(vw_plural) = fst_dict.get_word_metadata_str(\"Volkswagens\") {\n            assert!(vw_plural.is_proper_noun());\n        }\n    }\n\n    #[test]\n    fn proper_noun_propagates_to_possessives_2327() {\n        if let Some(vw_possessive) = FstDictionary::curated().get_word_metadata_str(\"Volkswagen's\")\n        {\n            assert!(vw_possessive.is_possessive_noun());\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/rune/error.rs",
    "content": "use super::matcher;\n\nuse serde_json::Error as SerdeJsonError;\n\n#[derive(Debug, Clone, thiserror::Error)]\npub enum Error {\n    #[error(\"The provided file's item count was malformed.\")]\n    MalformedItemCount,\n    #[error(\"Expected affix flag to be exactly one character.\")]\n    MultiCharacterFlag,\n    #[error(\"Expected affix option to be a boolean.\")]\n    ExpectedBoolean,\n    #[error(\"Expected affix option to be an unsigned integer.\")]\n    ExpectedUnsignedInteger,\n    #[error(\"Could not parse because we encountered the end of the line.\")]\n    UnexpectedEndOfLine,\n    #[error(\"Received malformed JSON at line {line}, column {column}: {message}\")]\n    MalformedJSON {\n        message: String,\n        line: usize,\n        column: usize,\n    },\n    #[error(\"An error occurred with a condition: {0}\")]\n    Matcher(#[from] matcher::Error),\n}\n\nimpl From<SerdeJsonError> for Error {\n    fn from(e: SerdeJsonError) -> Self {\n        Error::MalformedJSON {\n            message: e.to_string(),\n            line: e.line(),\n            column: e.column(),\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/rune/expansion.rs",
    "content": "use serde::{Deserialize, Serialize};\n\nuse super::Error;\nuse super::affix_replacement::{AffixReplacement, HumanReadableAffixReplacement};\nuse crate::DictWordMetadata;\n\n#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]\n#[serde(rename_all = \"snake_case\")]\npub enum AffixEntryKind {\n    Suffix,\n    Prefix,\n}\n\n/// Defines how a word can be transformed and what metadata to apply\n#[derive(Debug, Clone)]\npub struct Expansion {\n    /// Whether this is a prefix or suffix expansion\n    pub kind: AffixEntryKind,\n    /// If true, allows this expansion to be combined with others (e.g., both prefix and suffix)\n    pub cross_product: bool,\n    /// The replacement rules that define how to modify the word\n    pub replacements: Vec<AffixReplacement>,\n    /// Metadata to apply to the transformed word\n    pub target: Vec<MetadataExpansion>,\n    /// Metadata to apply to the base word when this expansion is applied\n    pub base_metadata: DictWordMetadata,\n}\n\nimpl Expansion {\n    pub fn into_human_readable(self) -> HumanReadableExpansion {\n        HumanReadableExpansion {\n            kind: self.kind,\n            cross_product: self.cross_product,\n            replacements: self\n                .replacements\n                .iter()\n                .map(AffixReplacement::to_human_readable)\n                .collect(),\n            target: self.target,\n            base_metadata: self.base_metadata,\n        }\n    }\n}\n\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct MetadataExpansion {\n    pub metadata: DictWordMetadata,\n    pub if_base: Option<DictWordMetadata>,\n}\n\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct HumanReadableExpansion {\n    pub kind: AffixEntryKind,\n    pub cross_product: bool,\n    pub replacements: Vec<HumanReadableAffixReplacement>,\n    pub target: Vec<MetadataExpansion>,\n    pub base_metadata: DictWordMetadata,\n}\n\nimpl HumanReadableExpansion {\n    pub fn into_normal(self) -> Result<Expansion, Error> {\n        let mut replacements = Vec::with_capacity(self.replacements.len());\n\n        for replacement in &self.replacements {\n            replacements.push(replacement.to_normal()?);\n        }\n\n        Ok(Expansion {\n            kind: self.kind,\n            cross_product: self.cross_product,\n            replacements,\n            target: self.target,\n            base_metadata: self.base_metadata,\n        })\n    }\n}\n\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct Property {\n    /// Whether the metadata will propagate to all derived words.\n    #[serde(default)]\n    pub propagate: bool,\n    /// The metadata applied to the word.\n    pub metadata: DictWordMetadata,\n}\n"
  },
  {
    "path": "harper-core/src/spell/rune/matcher.rs",
    "content": "use std::fmt::{Display, Formatter};\n\nuse serde::{Deserialize, Serialize};\n\n/// A simplified, Regex-like matcher.\n///\n/// See the Hunspell documentation on affixes for more information.\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct Matcher {\n    /// Position-based operators.\n    operators: Vec<Operator>,\n}\n\nimpl Matcher {\n    pub fn parse(source: &str) -> Result<Self, Error> {\n        let mut operators = Vec::new();\n\n        let char_indices: Vec<_> = source.char_indices().collect();\n        let mut char_idx = 0;\n\n        while char_idx < char_indices.len() {\n            let (idx, c) = char_indices[char_idx];\n\n            match c {\n                '[' => {\n                    let close_idx = source[idx..]\n                        .find(']')\n                        .ok_or(Error::UnmatchedBracket { index: idx })?;\n\n                    let bracket_contents = &source[idx + 1..close_idx];\n\n                    let invert = matches!(bracket_contents.chars().next(), Some('^'));\n\n                    if invert {\n                        let chars: Vec<char> = bracket_contents.chars().skip(1).collect();\n                        char_idx += chars.len() + 2;\n                        operators.push(Operator::MatchNone(chars));\n                    } else {\n                        let chars: Vec<char> = bracket_contents.chars().collect();\n                        char_idx += chars.len() + 1;\n                        operators.push(Operator::MatchOne(chars));\n                    }\n                }\n                '.' => operators.push(Operator::Any),\n                _ => operators.push(Operator::Literal(c)),\n            }\n\n            char_idx += 1;\n        }\n\n        Ok(Self { operators })\n    }\n\n    pub fn len(&self) -> usize {\n        self.operators.len()\n    }\n\n    pub fn matches(&self, chars: &[char]) -> bool {\n        if chars.len() != self.len() {\n            return false;\n        }\n\n        for (c, op) in chars.iter().zip(self.operators.iter()) {\n            if !op.matches(*c) {\n                return false;\n            }\n        }\n\n        true\n    }\n}\n\nimpl Display for Matcher {\n    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {\n        for op in &self.operators {\n            match op {\n                Operator::Literal(c) => write!(f, \"{c}\")?,\n                Operator::MatchOne(cs) => {\n                    write!(f, \"[\")?;\n\n                    for c in cs {\n                        write!(f, \"{c}\")?;\n                    }\n\n                    write!(f, \"]\")?;\n                }\n                Operator::MatchNone(cs) => {\n                    write!(f, \"[^\")?;\n\n                    for c in cs {\n                        write!(f, \"{c}\")?;\n                    }\n\n                    write!(f, \"]\")?;\n                }\n                Operator::Any => write!(f, \".\")?,\n            }\n        }\n\n        Ok(())\n    }\n}\n\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\nenum Operator {\n    Literal(char),\n    MatchOne(Vec<char>),\n    MatchNone(Vec<char>),\n    Any,\n}\n\nimpl Operator {\n    fn matches(&self, a: char) -> bool {\n        match self {\n            Operator::Literal(b) => a == *b,\n            Operator::MatchOne(b) => b.contains(&a),\n            Operator::MatchNone(b) => !b.contains(&a),\n            Operator::Any => true,\n        }\n    }\n}\n\n#[derive(Debug, Clone, Copy, thiserror::Error)]\npub enum Error {\n    #[error(\"Unmatched bracket at index: {index}\")]\n    UnmatchedBracket { index: usize },\n}\n\n#[cfg(test)]\nmod tests {\n    use super::{Matcher, Operator};\n\n    #[test]\n    fn parses_simple() {\n        let matcher = Matcher::parse(\"[^aeiou]a.s\").unwrap();\n        assert_eq!(\n            matcher.operators,\n            vec![\n                Operator::MatchNone(vec!['a', 'e', 'i', 'o', 'u']),\n                Operator::Literal('a'),\n                Operator::Any,\n                Operator::Literal('s')\n            ]\n        )\n    }\n\n    #[test]\n    fn matches_vowels() {\n        let matcher = Matcher::parse(\"[aeiou]\").unwrap();\n\n        assert!(matcher.matches(&['a']));\n        assert!(matcher.matches(&['e']));\n        assert!(matcher.matches(&['i']));\n        assert!(matcher.matches(&['o']));\n        assert!(matcher.matches(&['u']));\n    }\n\n    #[test]\n    fn round_trip() {\n        let source = \"[^aeiou]a.s\";\n        let matcher = Matcher::parse(source).unwrap();\n\n        assert_eq!(matcher.to_string(), source);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/rune/mod.rs",
    "content": "mod affix_replacement;\nmod attribute_list;\nmod error;\nmod expansion;\nmod matcher;\npub mod word_list;\n\npub use attribute_list::AttributeList;\npub use error::Error;\n\npub use self::word_list::parse_word_list;\n\n#[cfg(test)]\nmod tests {\n    use hashbrown::HashSet;\n    use serde_json::json;\n    use std::sync::LazyLock;\n\n    use super::super::word_map::WordMap;\n    use super::word_list::parse_word_list;\n    use crate::CharStringExt;\n    use crate::spell::rune::AttributeList;\n\n    pub const TEST_WORD_LIST: &str = \"4\\nhello\\ntry/B\\nwork/AB\\nblank/\";\n\n    pub const TEST_WORD_LIST_WITH_BLANK_LINES: &str = \"4\\n\\nhello\\n\\ntry/B\\nwork/AB\\n\\n\\nblank/\";\n\n    pub const TEST_WORD_LIST_WITH_FULL_LINE_COMMENTS: &str =\n        \"4\\n#\\nhello\\n#with\\ntry/B\\nwork/AB\\n# some\\n# comments aded\\nblank/\";\n\n    pub const TEST_WORD_LIST_WITH_COMMENTS: &str = \"4\\nhello       # a word without attributes\\ntry/B   \\t  # a word with empty attributes\\nwork/AB\\t   #a word with one attribute\\nblank/      #a word with two attributes\";\n\n    pub static TEST_AFFIX_JSON: LazyLock<serde_json::Value> = LazyLock::new(|| {\n        json!({\n            \"affixes\": {\n                \"A\": {\n                    \"kind\": \"prefix\",\n                    \"cross_product\": true,\n                    \"replacements\": [\n                      {\n                        \"remove\": \"\",\n                        \"add\": \"re\",\n                        \"condition\": \".\"\n                      }\n                    ],\n                    \"target\": [],\n                    \"base_metadata\": {}\n                },\n                \"B\": {\n                    \"kind\": \"suffix\",\n                    \"cross_product\": true,\n                    \"replacements\": [\n                      {\n                        \"remove\": \"\",\n                        \"add\": \"ed\",\n                        \"condition\": \"[^y]\"\n                      },\n                      {\n                        \"remove\": \"y\",\n                        \"add\": \"ied\",\n                        \"condition\": \"y\"\n                      }\n                    ],\n                    \"target\": [\n                        {\n                            \"metadata\": {\n                                \"noun\": {}\n                            }\n                        }\n                    ],\n                    \"base_metadata\": {}\n                }\n            },\n            \"properties\": {}\n        })\n    });\n\n    fn assert_expansion_results(test_word_list: &str, expected: Vec<&str>) {\n        let words = parse_word_list(test_word_list).unwrap();\n        let attributes = AttributeList::parse(&TEST_AFFIX_JSON.to_string()).unwrap();\n\n        let mut expanded = WordMap::default();\n\n        attributes.expand_annotated_words(words, &mut expanded);\n\n        let expanded: HashSet<String> = expanded\n            .into_iter()\n            .map(|v| v.canonical_spelling.into_iter().collect())\n            .collect();\n\n        assert_eq!(expanded, expected.into_iter().map(|v| v.into()).collect());\n    }\n\n    #[test]\n    fn correctly_expands_test_files() {\n        assert_expansion_results(\n            TEST_WORD_LIST,\n            vec![\n                \"reworked\", \"rework\", \"tried\", \"try\", \"hello\", \"worked\", \"work\", \"blank\",\n            ],\n        );\n    }\n\n    #[test]\n    fn correctly_expands_test_files_with_blank_lines() {\n        assert_expansion_results(\n            TEST_WORD_LIST_WITH_BLANK_LINES,\n            vec![\n                \"reworked\", \"rework\", \"tried\", \"try\", \"hello\", \"worked\", \"work\", \"blank\",\n            ],\n        );\n    }\n\n    fn correctly_expands_test_files_with_full_line_comments() {\n        assert_expansion_results(\n            TEST_WORD_LIST_WITH_FULL_LINE_COMMENTS,\n            vec![\n                \"reworked\", \"rework\", \"tried\", \"try\", \"hello\", \"worked\", \"work\", \"blank\",\n            ],\n        );\n    }\n\n    #[test]\n    fn correctly_expands_test_files_with_comments() {\n        let words = parse_word_list(TEST_WORD_LIST_WITH_COMMENTS).unwrap();\n        let attributes = AttributeList::parse(&TEST_AFFIX_JSON.to_string()).unwrap();\n\n        let mut expanded = WordMap::default();\n\n        attributes.expand_annotated_words(words, &mut expanded);\n        let expanded: HashSet<String> = expanded\n            .into_iter()\n            .map(|v| v.canonical_spelling.to_string())\n            .collect();\n\n        assert_eq!(\n            expanded,\n            vec![\n                \"reworked\", \"rework\", \"tried\", \"try\", \"hello\", \"worked\", \"work\", \"blank\"\n            ]\n            .into_iter()\n            .map(|v| v.into())\n            .collect()\n        )\n    }\n\n    #[test]\n    fn plural_giants() {\n        let words = parse_word_list(\"1\\ngiant/SM\").unwrap();\n\n        let attributes = AttributeList::parse(\n            &json!({\n                \"affixes\": {\n                    \"S\": {\n                        \"kind\": \"suffix\",\n                        \"cross_product\": true,\n                        \"replacements\": [\n                          {\n                            \"remove\": \"y\",\n                            \"add\": \"ies\",\n                            \"condition\": \"[^aeiou]\"\n                          },\n                          {\n                            \"remove\": \"\",\n                            \"add\": \"s\",\n                            \"condition\": \"[aeiou]y\"\n                          },\n                          {\n                            \"remove\": \"\",\n                            \"add\": \"s\",\n                            \"condition\": \"[^sxzhy]\"\n                          }\n                        ],\n                        \"target\": [\n                            {\n                                \"metadata\": {\n                                    \"noun\": {\n                                        \"is_plural\": true\n                                    }\n                                }\n                            }\n                        ],\n                        \"base_metadata\": {\n                            \"noun\": {}\n                        }\n                    },\n                    \"M\": {\n                        \"kind\": \"suffix\",\n                        \"cross_product\": true,\n                        \"replacements\": [\n                          {\n                            \"remove\": \"\",\n                            \"add\": \"'s\",\n                            \"condition\": \".\"\n                          }\n                        ],\n                        \"target\": [],\n                        \"base_metadata\": {}\n                    }\n                },\n                \"properties\": {}\n            })\n            .to_string(),\n        )\n        .unwrap();\n\n        let mut expanded = WordMap::default();\n\n        attributes.expand_annotated_words(words, &mut expanded);\n\n        let giant_data = expanded.get_with_str(\"giant\").unwrap();\n        assert!(giant_data.metadata.is_noun());\n\n        let giants_data = expanded.get_with_str(\"giants\").unwrap();\n        assert!(giants_data.metadata.is_plural_noun());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/rune/word_list.rs",
    "content": "use super::Error;\nuse crate::CharString;\n\n#[derive(Debug, Clone)]\npub struct AnnotatedWord {\n    pub letters: CharString,\n    pub annotations: Vec<char>,\n}\n\n/// Parse a Rune word list\n///\n/// Returns [`None`] if the given string is invalid.\npub fn parse_word_list(source: &str) -> Result<Vec<AnnotatedWord>, Error> {\n    let mut lines = source.lines();\n\n    let approx_item_count = lines\n        .next()\n        .ok_or(Error::MalformedItemCount)?\n        .parse()\n        .map_err(|_| Error::MalformedItemCount)?;\n\n    let mut words = Vec::with_capacity(approx_item_count);\n\n    for line in lines {\n        // Ignore blank lines and full line comments.\n        if line.is_empty() || line.starts_with('#') {\n            continue;\n        }\n\n        let entry: &str;\n        if let Some((entry_part, _comment_part)) = line.split_once('#') {\n            entry = entry_part.trim_end();\n        } else {\n            entry = line.trim_end();\n        }\n\n        let word: &str;\n        let attr: Option<&str>;\n        if let Some((word_part, attr_part)) = entry.split_once('/') {\n            word = word_part;\n            attr = Some(attr_part);\n        } else {\n            word = entry;\n            attr = None;\n        }\n\n        words.push(AnnotatedWord {\n            letters: word.chars().collect(),\n            annotations: attr.unwrap_or_default().chars().collect(),\n        })\n    }\n\n    Ok(words)\n}\n\n#[cfg(test)]\nmod tests {\n    use super::super::tests::TEST_WORD_LIST;\n    use super::parse_word_list;\n\n    #[test]\n    fn can_parse_test_file() {\n        let list = parse_word_list(TEST_WORD_LIST).unwrap();\n\n        assert_eq!(list.last().unwrap().annotations.len(), 0);\n        assert_eq!(list.len(), 4);\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/trie_dictionary.rs",
    "content": "use std::borrow::Cow;\nuse std::sync::{Arc, LazyLock};\n\nuse trie_rs::Trie;\nuse trie_rs::iter::{Keys, PrefixIter, SearchIter};\n\nuse crate::DictWordMetadata;\n\nuse super::{Dictionary, FstDictionary, FuzzyMatchResult, WordId};\n\n/// A [`Dictionary`] optimized for pre- and postfix search.\n/// Wraps another dictionary to implement other operations.\npub struct TrieDictionary<D: Dictionary> {\n    trie: Trie<char>,\n    inner: D,\n}\n\npub static DICT: LazyLock<Arc<TrieDictionary<Arc<FstDictionary>>>> =\n    LazyLock::new(|| Arc::new(TrieDictionary::new(FstDictionary::curated())));\n\nimpl TrieDictionary<Arc<FstDictionary>> {\n    /// Create a dictionary from the curated dictionary included\n    /// in the Harper binary.\n    pub fn curated() -> Arc<Self> {\n        (*DICT).clone()\n    }\n}\n\nimpl<D: Dictionary> TrieDictionary<D> {\n    pub fn new(inner: D) -> Self {\n        let trie = Trie::from_iter(inner.words_iter());\n\n        Self { inner, trie }\n    }\n}\n\nimpl<D: Dictionary> Dictionary for TrieDictionary<D> {\n    fn contains_word(&self, word: &[char]) -> bool {\n        self.inner.contains_word(word)\n    }\n\n    fn contains_word_str(&self, word: &str) -> bool {\n        self.inner.contains_word_str(word)\n    }\n\n    fn contains_exact_word(&self, word: &[char]) -> bool {\n        self.inner.contains_exact_word(word)\n    }\n\n    fn contains_exact_word_str(&self, word: &str) -> bool {\n        self.inner.contains_exact_word_str(word)\n    }\n\n    fn fuzzy_match(\n        &'_ self,\n        word: &[char],\n        max_distance: u8,\n        max_results: usize,\n    ) -> Vec<FuzzyMatchResult<'_>> {\n        self.inner.fuzzy_match(word, max_distance, max_results)\n    }\n\n    fn fuzzy_match_str(\n        &'_ self,\n        word: &str,\n        max_distance: u8,\n        max_results: usize,\n    ) -> Vec<FuzzyMatchResult<'_>> {\n        self.inner.fuzzy_match_str(word, max_distance, max_results)\n    }\n\n    fn get_correct_capitalization_of(&self, word: &[char]) -> Option<&'_ [char]> {\n        self.inner.get_correct_capitalization_of(word)\n    }\n\n    fn get_word_metadata(&self, word: &[char]) -> Option<Cow<'_, DictWordMetadata>> {\n        self.inner.get_word_metadata(word)\n    }\n\n    fn get_word_metadata_str(&self, word: &str) -> Option<Cow<'_, DictWordMetadata>> {\n        self.inner.get_word_metadata_str(word)\n    }\n\n    fn words_iter(&self) -> Box<dyn Iterator<Item = &'_ [char]> + Send + '_> {\n        self.inner.words_iter()\n    }\n\n    fn word_count(&self) -> usize {\n        self.inner.word_count()\n    }\n\n    fn get_word_from_id(&self, id: &WordId) -> Option<&[char]> {\n        self.inner.get_word_from_id(id)\n    }\n\n    fn find_words_with_prefix(&self, prefix: &[char]) -> Vec<Cow<'_, [char]>> {\n        let results: Keys<SearchIter<'_, char, (), Vec<char>, _>> =\n            self.trie.predictive_search(prefix);\n        results.map(Cow::Owned).collect()\n    }\n\n    fn find_words_with_common_prefix(&self, word: &[char]) -> Vec<Cow<'_, [char]>> {\n        let results: Keys<PrefixIter<'_, char, (), Vec<char>, _>> =\n            self.trie.common_prefix_search(word);\n        results.map(Cow::Owned).collect()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use std::borrow::Cow;\n\n    use crate::DictWordMetadata;\n    use crate::char_string::char_string;\n    use crate::spell::MutableDictionary;\n    use crate::spell::dictionary::Dictionary;\n    use crate::spell::trie_dictionary::TrieDictionary;\n\n    #[test]\n    fn gets_prefixes_as_expected() {\n        let mut inner = MutableDictionary::new();\n        inner.append_word_str(\"predict\", DictWordMetadata::default());\n        inner.append_word_str(\"prelude\", DictWordMetadata::default());\n        inner.append_word_str(\"preview\", DictWordMetadata::default());\n        inner.append_word_str(\"dwight\", DictWordMetadata::default());\n\n        let dict = TrieDictionary::new(inner);\n\n        let with_prefix = dict.find_words_with_prefix(char_string!(\"pre\").as_slice());\n\n        assert_eq!(with_prefix.len(), 3);\n        assert!(with_prefix.contains(&Cow::Owned(char_string!(\"predict\").into_vec())));\n        assert!(with_prefix.contains(&Cow::Owned(char_string!(\"prelude\").into_vec())));\n        assert!(with_prefix.contains(&Cow::Owned(char_string!(\"preview\").into_vec())));\n    }\n\n    #[test]\n    fn gets_common_prefixes_as_expected() {\n        let mut inner = MutableDictionary::new();\n        inner.append_word_str(\"pre\", DictWordMetadata::default());\n        inner.append_word_str(\"prep\", DictWordMetadata::default());\n        inner.append_word_str(\"dwight\", DictWordMetadata::default());\n\n        let dict = TrieDictionary::new(inner);\n\n        let with_prefix =\n            dict.find_words_with_common_prefix(char_string!(\"preposition\").as_slice());\n\n        assert_eq!(with_prefix.len(), 2);\n        assert!(with_prefix.contains(&Cow::Owned(char_string!(\"pre\").into_vec())));\n        assert!(with_prefix.contains(&Cow::Owned(char_string!(\"prep\").into_vec())));\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/word_id.rs",
    "content": "use std::hash::BuildHasher;\n\nuse foldhash::fast::FixedState;\nuse serde::{Deserialize, Serialize};\n\nuse crate::{CharString, CharStringExt};\n\n/// An identifier for a particular word.\n///\n/// It works by hashing the word it represents, normalized to lowercase.\n/// It is meant for situations where you need to refer to a word (or a collection of words),\n/// without storing all of accompanying data (like spelling or metadata).\n#[derive(Hash, Copy, Clone, PartialEq, Eq, PartialOrd, Debug, Serialize, Deserialize)]\npub struct WordId {\n    hash: u64,\n}\n\nimpl WordId {\n    /// Create a Word ID from a character slice.\n    pub fn from_word_chars(chars: impl AsRef<[char]>) -> Self {\n        let normalized = chars.as_ref().normalized();\n        let lower = normalized.to_lower();\n        let hash = FixedState::default().hash_one(lower);\n\n        Self { hash }\n    }\n\n    /// Create a word ID from a string.\n    /// Requires allocation, so use sparingly.\n    pub fn from_word_str(text: impl AsRef<str>) -> Self {\n        let chars: CharString = text.as_ref().chars().collect();\n        Self::from_word_chars(chars)\n    }\n}\n"
  },
  {
    "path": "harper-core/src/spell/word_map.rs",
    "content": "use hashbrown::{HashMap, hash_map::IntoValues};\n\nuse crate::{CharString, DictWordMetadata};\n\nuse super::WordId;\n\n/// The underlying data structure for the `MutableDictionary`.\n#[derive(Debug, Clone, Eq, PartialEq, Default)]\npub struct WordMap {\n    inner: HashMap<WordId, WordMapEntry>,\n}\n\n#[derive(Debug, Clone, Eq, PartialEq, Hash)]\npub struct WordMapEntry {\n    pub metadata: DictWordMetadata,\n    pub canonical_spelling: CharString,\n}\n\nimpl WordMap {\n    /// Get an entry from the word map using raw chars.\n    pub fn get_with_str(&self, string: &str) -> Option<&WordMapEntry> {\n        let chars: CharString = string.chars().collect();\n        let id = WordId::from_word_chars(chars);\n\n        self.get(&id)\n    }\n\n    pub fn contains_str(&self, string: &str) -> bool {\n        self.get_with_str(string).is_some()\n    }\n\n    pub fn contains_chars(&self, chars: impl AsRef<[char]>) -> bool {\n        self.get_with_chars(chars).is_some()\n    }\n\n    pub fn contains(&self, id: &WordId) -> bool {\n        self.get(id).is_some()\n    }\n\n    /// Get an entry from the word map using raw chars.\n    pub fn get_with_chars(&self, chars: impl AsRef<[char]>) -> Option<&WordMapEntry> {\n        let id = WordId::from_word_chars(chars);\n\n        self.get(&id)\n    }\n\n    /// Get an entry from the word map using a word identifier.\n    pub fn get(&self, id: &WordId) -> Option<&WordMapEntry> {\n        self.inner.get(id)\n    }\n\n    /// Borrow a word's metadata mutably\n    pub fn get_metadata_mut_chars(\n        &mut self,\n        chars: impl AsRef<[char]>,\n    ) -> Option<&mut DictWordMetadata> {\n        let id = WordId::from_word_chars(chars);\n\n        self.get_metadata_mut(&id)\n    }\n\n    /// Borrow a word's metadata mutably\n    pub fn get_metadata_mut(&mut self, id: &WordId) -> Option<&mut DictWordMetadata> {\n        self.inner.get_mut(id).map(|v| &mut v.metadata)\n    }\n\n    pub fn insert(&mut self, entry: WordMapEntry) {\n        let id = WordId::from_word_chars(&entry.canonical_spelling);\n\n        self.inner.insert(id, entry);\n    }\n\n    /// Reserves capacity for at least `additional` more elements to be inserted\n    /// in the `WordMap`. The collection may reserve more space to avoid\n    /// frequent reallocations.\n    pub fn reserve(&mut self, additional: usize) {\n        self.inner.reserve(additional);\n    }\n\n    /// Iterate through the canonical spellings of the words in the map.\n    pub fn iter(&self) -> impl Iterator<Item = &WordMapEntry> {\n        self.inner.values()\n    }\n\n    pub fn len(&self) -> usize {\n        self.inner.len()\n    }\n\n    pub fn with_capacity(capacity: usize) -> Self {\n        Self {\n            inner: HashMap::with_capacity(capacity),\n        }\n    }\n}\n\nimpl IntoIterator for WordMap {\n    type Item = WordMapEntry;\n\n    fn into_iter(self) -> Self::IntoIter {\n        self.inner.into_values()\n    }\n\n    type IntoIter = IntoValues<WordId, WordMapEntry>;\n}\n"
  },
  {
    "path": "harper-core/src/sync.rs",
    "content": "#[cfg(not(feature = \"concurrent\"))]\npub use std::rc::Rc as Lrc;\n#[cfg(feature = \"concurrent\")]\npub use std::sync::Arc as Lrc;\n\n#[cfg(not(feature = \"concurrent\"))]\npub trait LSend {}\n\n#[cfg(not(feature = \"concurrent\"))]\nimpl<T: ?Sized> LSend for T {}\n\n#[cfg(feature = \"concurrent\")]\npub trait LSend: Send + Sync {}\n\n#[cfg(feature = \"concurrent\")]\nimpl<T: Send + Sync + ?Sized> LSend for T {}\n"
  },
  {
    "path": "harper-core/src/thesaurus_helper.rs",
    "content": "use crate::{\n    TokenKind,\n    linting::{Suggestion, SuggestionCollectionExt},\n};\n\n#[cfg(feature = \"thesaurus\")]\nuse crate::spell::{Dictionary, FstDictionary};\n\n/// Gets synonyms for a provided word.\n///\n/// If the `thesaurus` feature is not enabled, will always return [`None`].\n#[allow(unreachable_code)]\npub fn get_synonyms(_word: &str) -> Option<Vec<&str>> {\n    #[cfg(feature = \"thesaurus\")]\n    {\n        return harper_thesaurus::thesaurus().get_synonyms(_word);\n    }\n    None\n}\n\n/// Gets synonyms for a provided word, sorted by the following means:\n/// - The level of difference between the provided token and that of the synonym.\n/// - How often the synonym is used.\n///\n/// If the `thesaurus` feature is not enabled, will always return [`None`].\n#[allow(unreachable_code)]\npub fn get_synonyms_sorted(_word: &str, _token: &TokenKind) -> Option<Vec<&'static str>> {\n    #[cfg(feature = \"thesaurus\")]\n    {\n        // Sorting by frequency.\n        let mut syns = harper_thesaurus::thesaurus().get_synonyms_freq_sorted(_word)?;\n\n        // Sorting by TokenKind difference.\n        if let Some(Some(word_meta)) = _token.as_word() {\n            let dict = FstDictionary::curated();\n            syns.sort_by_key(|syn| {\n                if let Some(syn_meta) = dict.get_word_metadata_str(syn) {\n                    word_meta.difference(&syn_meta)\n                } else {\n                    u32::MAX\n                }\n            });\n        }\n\n        return Some(syns);\n    }\n    None\n}\n\n/// Helper method to provide synonym replacement suggestions for the provided word.\n///\n/// The output is sorted as in [`get_synonyms_sorted()`], which attempts to place more relevant\n/// results first.\n///\n/// If the `thesaurus` feature isn't enabled or the word cannot be found in the thesaurus, will\n/// return an empty iterator.\npub fn get_synonym_replacement_suggestions(\n    word: &str,\n    token: &TokenKind,\n) -> impl Iterator<Item = Suggestion> {\n    get_synonyms_sorted(word, token)\n        .unwrap_or_default()\n        .to_replace_suggestions(word.chars())\n}\n"
  },
  {
    "path": "harper-core/src/title_case.rs",
    "content": "use std::borrow::Cow;\nuse std::sync::LazyLock;\n\nuse crate::Lrc;\nuse crate::Token;\nuse crate::TokenKind;\nuse hashbrown::HashSet;\n\nuse crate::Punctuation;\nuse crate::spell::Dictionary;\nuse crate::{CharStringExt, Document, TokenStringExt, parsers::Parser};\n\n/// A helper function for [`make_title_case`] that uses Strings instead of char buffers.\npub fn make_title_case_str(source: &str, parser: &impl Parser, dict: &impl Dictionary) -> String {\n    let source: Vec<char> = source.chars().collect();\n\n    make_title_case_chars(Lrc::new(source), parser, dict).to_string()\n}\n\n// Make a given string [title case](https://en.wikipedia.org/wiki/Title_case) following the Chicago Manual of Style.\npub fn make_title_case_chars(\n    source: Lrc<Vec<char>>,\n    parser: &impl Parser,\n    dict: &impl Dictionary,\n) -> Vec<char> {\n    let document = Document::new_from_vec(source.clone(), parser, dict);\n\n    make_title_case(document.get_tokens(), source.as_slice(), dict)\n}\n\npub fn try_make_title_case(\n    toks: &[Token],\n    source: &[char],\n    dict: &impl Dictionary,\n) -> Option<Vec<char>> {\n    if toks.is_empty() {\n        return None;\n    }\n\n    let start_index = toks.first().unwrap().span.start;\n    let relevant_text = toks.span().unwrap().get_content(source);\n\n    let mut word_likes = toks.iter_word_like_indices().peekable();\n\n    let mut output = None;\n    let mut previous_word_index = 0;\n\n    // Checks if the output if the provided char is different from the source. If so, it will\n    // set the output. The goal here is to avoid allocating if no edits must be made.\n    let mut set_output_char = |idx: usize, new_char: char| {\n        if output\n            .as_ref()\n            .is_some_and(|o: &Vec<char>| o[idx] != new_char)\n            || relevant_text[idx] != new_char\n        {\n            output.get_or_insert_with(|| relevant_text.to_vec())[idx] = new_char;\n        }\n    };\n\n    let mut seen_alphabetic_word = false;\n\n    while let Some(word_idx) = word_likes.next() {\n        let word = &toks[word_idx];\n        let is_alphabetic_word = word\n            .span\n            .get_content(source)\n            .iter()\n            .any(|c| c.is_alphabetic());\n\n        if let Some(Some(metadata)) = word.kind.as_word()\n            && metadata.is_proper_noun()\n        {\n            // Replace it with the dictionary entry verbatim.\n            let orig_text = word.span.get_content(source);\n\n            if let Some(correct_caps) = dict.get_correct_capitalization_of(orig_text) {\n                // It should match the dictionary verbatim\n                for (i, c) in correct_caps.iter().enumerate() {\n                    if c.is_alphabetic() {\n                        set_output_char(word.span.start - start_index + i, *c);\n                    }\n                }\n            }\n        };\n\n        // Capitalize the first word following a colon to match Chicago style.\n        let is_after_colon = toks[previous_word_index..word_idx]\n            .iter()\n            .any(|tok| matches!(tok.kind, TokenKind::Punctuation(Punctuation::Colon)));\n\n        let is_first_alphabetic_word = is_alphabetic_word && !seen_alphabetic_word;\n        let should_capitalize = is_after_colon\n            || should_capitalize_token(word, source)\n            || is_first_alphabetic_word\n            || word_likes.peek().is_none();\n\n        if should_capitalize {\n            set_output_char(\n                word.span.start - start_index,\n                relevant_text[word.span.start - start_index].to_ascii_uppercase(),\n            );\n        } else {\n            // The whole word should be lowercase.\n            for i in word.span {\n                set_output_char(\n                    i - start_index,\n                    relevant_text[i - start_index].to_ascii_lowercase(),\n                );\n            }\n        }\n\n        if is_alphabetic_word {\n            seen_alphabetic_word = true;\n        }\n\n        previous_word_index = word_idx\n    }\n\n    if let Some(output) = &output\n        && output.as_slice() == relevant_text\n    {\n        return None;\n    }\n\n    output\n}\n\npub fn make_title_case(toks: &[Token], source: &[char], dict: &impl Dictionary) -> Vec<char> {\n    try_make_title_case(toks, source, dict)\n        .unwrap_or_else(|| toks.span().unwrap_or_default().get_content(source).to_vec())\n}\n\n/// Determines whether a token should be capitalized.\n/// Is not responsible for capitalization requirements that are dependent on token position.\nfn should_capitalize_token(tok: &Token, source: &[char]) -> bool {\n    match &tok.kind {\n        TokenKind::Word(Some(metadata)) => {\n            // Only specific conjunctions are not capitalized.\n            static SPECIAL_CONJUNCTIONS: LazyLock<HashSet<Vec<char>>> = LazyLock::new(|| {\n                [\"and\", \"but\", \"for\", \"or\", \"nor\", \"as\"]\n                    .iter()\n                    .map(|v| v.chars().collect())\n                    .collect()\n            });\n            static SPECIAL_ARTICLES: LazyLock<HashSet<Vec<char>>> = LazyLock::new(|| {\n                [\"a\", \"an\", \"the\"]\n                    .iter()\n                    .map(|v| v.chars().collect())\n                    .collect()\n            });\n\n            let chars = tok.span.get_content(source);\n            let chars_lower = chars.to_lower();\n\n            let metadata = Cow::Borrowed(metadata);\n\n            let is_short_preposition = metadata.preposition && tok.span.len() <= 4;\n\n            if chars_lower.as_ref() == ['a', 'l', 'l'] {\n                return true;\n            }\n\n            !is_short_preposition\n                && !SPECIAL_CONJUNCTIONS.contains(chars_lower.as_ref())\n                && !SPECIAL_ARTICLES.contains(chars_lower.as_ref())\n        }\n        _ => true,\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use quickcheck::TestResult;\n    use quickcheck_macros::quickcheck;\n\n    use super::make_title_case_str;\n    use crate::parsers::{Markdown, PlainEnglish};\n    use crate::spell::FstDictionary;\n\n    #[test]\n    fn normal() {\n        assert_eq!(\n            make_title_case_str(\"this is a test\", &PlainEnglish, &FstDictionary::curated()),\n            \"This Is a Test\"\n        )\n    }\n\n    #[test]\n    fn complex() {\n        assert_eq!(\n            make_title_case_str(\n                \"the first and last words should be capitalized, even if it is \\\"the\\\"\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"The First and Last Words Should Be Capitalized, Even If It Is \\\"The\\\"\"\n        )\n    }\n\n    /// Check that \"about\" remains uppercase\n    #[test]\n    fn about_uppercase_with_numbers() {\n        assert_eq!(\n            make_title_case_str(\"0 about 0\", &PlainEnglish, &FstDictionary::curated()),\n            \"0 About 0\"\n        )\n    }\n\n    #[test]\n    fn pipe_does_not_cause_crash() {\n        assert_eq!(\n            make_title_case_str(\"|\", &Markdown::default(), &FstDictionary::curated()),\n            \"|\"\n        )\n    }\n\n    #[test]\n    fn a_paragraph_does_not_cause_crash() {\n        assert_eq!(\n            make_title_case_str(\"A\\n\", &Markdown::default(), &FstDictionary::curated()),\n            \"A\"\n        )\n    }\n\n    #[test]\n    fn tab_a_becomes_upcase() {\n        assert_eq!(\n            make_title_case_str(\"\\ta\", &PlainEnglish, &FstDictionary::curated()),\n            \"\\tA\"\n        )\n    }\n\n    #[test]\n    fn fixes_video_press() {\n        assert_eq!(\n            make_title_case_str(\"videopress\", &PlainEnglish, &FstDictionary::curated()),\n            \"VideoPress\"\n        )\n    }\n\n    #[quickcheck]\n    fn a_stays_lowercase(prefix: String, postfix: String) -> TestResult {\n        // There must be words other than the `a`.\n        if prefix.chars().any(|c| !c.is_ascii_alphabetic())\n            || prefix.is_empty()\n            || postfix.chars().any(|c| !c.is_ascii_alphabetic())\n            || postfix.is_empty()\n        {\n            return TestResult::discard();\n        }\n\n        let title_case: Vec<_> = make_title_case_str(\n            &format!(\"{prefix} a {postfix}\"),\n            &Markdown::default(),\n            &FstDictionary::curated(),\n        )\n        .chars()\n        .collect();\n\n        TestResult::from_bool(title_case[prefix.chars().count() + 1] == 'a')\n    }\n\n    #[quickcheck]\n    fn about_becomes_uppercase(prefix: String, postfix: String) -> TestResult {\n        // There must be words other than the `a`.\n        if prefix.chars().any(|c| !c.is_ascii_alphanumeric())\n            || prefix.is_empty()\n            || postfix.chars().any(|c| !c.is_ascii_alphanumeric())\n            || postfix.is_empty()\n        {\n            return TestResult::discard();\n        }\n\n        let title_case: Vec<_> = make_title_case_str(\n            &format!(\"{prefix} about {postfix}\"),\n            &Markdown::default(),\n            &FstDictionary::curated(),\n        )\n        .chars()\n        .collect();\n\n        TestResult::from_bool(title_case[prefix.chars().count() + 1] == 'A')\n    }\n\n    #[quickcheck]\n    fn first_word_is_upcase(text: String) -> TestResult {\n        let title_case: Vec<_> =\n            make_title_case_str(&text, &PlainEnglish, &FstDictionary::curated())\n                .chars()\n                .collect();\n\n        if let Some(first) = title_case.first() {\n            if first.is_ascii_alphabetic() {\n                TestResult::from_bool(first.is_ascii_uppercase())\n            } else {\n                TestResult::discard()\n            }\n        } else {\n            TestResult::discard()\n        }\n    }\n\n    #[test]\n    fn united_states() {\n        assert_eq!(\n            make_title_case_str(\"united states\", &PlainEnglish, &FstDictionary::curated()),\n            \"United States\"\n        )\n    }\n\n    #[test]\n    fn keeps_decimal() {\n        assert_eq!(\n            make_title_case_str(\n                \"harper turns 1.0 today\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"Harper Turns 1.0 Today\"\n        )\n    }\n\n    #[test]\n    fn fixes_odd_capitalized_proper_nouns() {\n        assert_eq!(\n            make_title_case_str(\n                \"i spoke at wordcamp u.s. in 2025\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"I Spoke at WordCamp U.S. in 2025\",\n        );\n    }\n\n    #[test]\n    fn fixes_your_correctly() {\n        assert_eq!(\n            make_title_case_str(\n                \"it is not your friend\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"It Is Not Your Friend\",\n        );\n    }\n\n    #[test]\n    fn handles_old_man_and_the_sea() {\n        assert_eq!(\n            make_title_case_str(\n                \"the old man and the sea\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"The Old Man and the Sea\",\n        );\n    }\n\n    #[test]\n    fn handles_great_story_with_subtitle() {\n        assert_eq!(\n            make_title_case_str(\n                \"the great story: a tale of two cities\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"The Great Story: A Tale of Two Cities\",\n        );\n    }\n\n    #[test]\n    fn handles_lantern_and_moths() {\n        assert_eq!(\n            make_title_case_str(\n                \"lantern flickered; moths began their worship\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"Lantern Flickered; Moths Began Their Worship\",\n        );\n    }\n\n    #[test]\n    fn handles_static_with_ghosts() {\n        assert_eq!(\n            make_title_case_str(\n                \"static filled the room with ghosts\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"Static Filled the Room with Ghosts\",\n        );\n    }\n\n    #[test]\n    fn handles_glass_trembled_before_thunder() {\n        assert_eq!(\n            make_title_case_str(\n                \"glass trembled before thunder arrived.\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"Glass Trembled Before Thunder Arrived.\",\n        );\n    }\n\n    #[test]\n    fn handles_hepatitis_b_shots() {\n        assert_eq!(\n            make_title_case_str(\n                \"an end to hepatitis b shots for all newborns\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"An End to Hepatitis B Shots for All Newborns\",\n        );\n    }\n\n    #[test]\n    fn handles_trump_approval_rating() {\n        assert_eq!(\n            make_title_case_str(\n                \"trump's approval rating dips as views of his handling of the economy sour\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"Trump's Approval Rating Dips as Views of His Handling of the Economy Sour\",\n        );\n    }\n\n    #[test]\n    fn handles_last_door() {\n        assert_eq!(\n            make_title_case_str(\"the last door\", &PlainEnglish, &FstDictionary::curated()),\n            \"The Last Door\",\n        );\n    }\n\n    #[test]\n    fn handles_midnight_river() {\n        assert_eq!(\n            make_title_case_str(\"midnight river\", &PlainEnglish, &FstDictionary::curated()),\n            \"Midnight River\",\n        );\n    }\n\n    #[test]\n    fn handles_a_quiet_room() {\n        assert_eq!(\n            make_title_case_str(\"a quiet room\", &PlainEnglish, &FstDictionary::curated()),\n            \"A Quiet Room\",\n        );\n    }\n\n    #[test]\n    fn handles_broken_map() {\n        assert_eq!(\n            make_title_case_str(\"broken map\", &PlainEnglish, &FstDictionary::curated()),\n            \"Broken Map\",\n        );\n    }\n\n    #[test]\n    fn handles_fire_in_autumn() {\n        assert_eq!(\n            make_title_case_str(\"fire in autumn\", &PlainEnglish, &FstDictionary::curated()),\n            \"Fire in Autumn\",\n        );\n    }\n\n    #[test]\n    fn handles_hidden_path() {\n        assert_eq!(\n            make_title_case_str(\"the hidden path\", &PlainEnglish, &FstDictionary::curated()),\n            \"The Hidden Path\",\n        );\n    }\n\n    #[test]\n    fn handles_under_blue_skies() {\n        assert_eq!(\n            make_title_case_str(\"under blue skies\", &PlainEnglish, &FstDictionary::curated()),\n            \"Under Blue Skies\",\n        );\n    }\n\n    #[test]\n    fn handles_lost_and_found() {\n        assert_eq!(\n            make_title_case_str(\"lost and found\", &PlainEnglish, &FstDictionary::curated()),\n            \"Lost and Found\",\n        );\n    }\n\n    #[test]\n    fn handles_silent_watcher() {\n        assert_eq!(\n            make_title_case_str(\n                \"the silent watcher\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"The Silent Watcher\",\n        );\n    }\n\n    #[test]\n    fn handles_winter_road() {\n        assert_eq!(\n            make_title_case_str(\"winter road\", &PlainEnglish, &FstDictionary::curated()),\n            \"Winter Road\",\n        );\n    }\n\n    #[test]\n    fn maintains_same_apostrophe_type() {\n        assert_eq!(\n            make_title_case_str(\n                \"Alice’s Adventures in Wonderland\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"Alice’s Adventures in Wonderland\",\n        );\n    }\n\n    #[test]\n    fn doesnt_lowercase_this_in_github_template_title() {\n        assert_eq!(\n            make_title_case_str(\n                \"# How Has This Been Tested?\",\n                &PlainEnglish,\n                &FstDictionary::curated()\n            ),\n            \"# How Has This Been Tested?\",\n        );\n    }\n}\n"
  },
  {
    "path": "harper-core/src/token.rs",
    "content": "use serde::{Deserialize, Serialize};\n\nuse crate::{FatToken, Span, TokenKind};\n\n/// Represents a semantic, parsed component of a [`Document`](crate::Document).\n#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]\npub struct Token {\n    /// The characters the token represents.\n    pub span: Span<char>,\n    /// The parsed value.\n    pub kind: TokenKind,\n}\n\nimpl Token {\n    pub fn new(span: Span<char>, kind: TokenKind) -> Self {\n        Self { span, kind }\n    }\n\n    /// Convert to an allocated [`FatToken`].\n    pub fn to_fat(&self, source: &[char]) -> FatToken {\n        let content = self.span.get_content(source).to_vec();\n\n        FatToken {\n            content,\n            kind: self.kind.clone(),\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::{\n        TokenStringExt,\n        parsers::{Parser, PlainEnglish},\n    };\n\n    #[test]\n    fn parses_sentences_correctly() {\n        let text = \"There were three little pigs. They built three little homes.\";\n        let chars: Vec<char> = text.chars().collect();\n        let toks = PlainEnglish.parse(&chars);\n\n        let mut sentence_strs = vec![];\n\n        for sentence in toks.iter_sentences() {\n            if let Some(span) = sentence.span() {\n                sentence_strs.push(span.get_content_string(&chars));\n            }\n        }\n\n        assert_eq!(\n            sentence_strs,\n            vec![\n                \"There were three little pigs.\",\n                \" They built three little homes.\"\n            ]\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/token_kind.rs",
    "content": "use harper_brill::UPOS;\nuse is_macro::Is;\nuse serde::{Deserialize, Serialize};\n\nuse crate::{\n    DictWordMetadata, Number, Punctuation, Quote, TokenKind::Word, dict_word_metadata::Person,\n};\n\n/// Generate wrapper code to pass a function call to the inner [`DictWordMetadata`],  \n/// if the token is indeed a word, while also emitting method-level documentation.\nmacro_rules! delegate_to_metadata {\n    ($($method:ident),* $(,)?) => {\n        $(\n            #[doc = concat!(\n                \"Delegates to [`DictWordMetadata::\",\n                stringify!($method),\n                \"`] when this token is a word.\\n\\n\",\n                \"Returns `false` if the token is not a word.\"\n            )]\n            pub fn $method(&self) -> bool {\n                let Word(Some(metadata)) = self else {\n                    return false;\n                };\n                metadata.$method()\n            }\n        )*\n    };\n}\n\n/// The parsed value of a [`Token`](crate::Token).\n/// Has a variety of queries available.\n/// If there is a query missing, it may be easy to implement by just calling the\n/// `delegate_to_metadata` macro.\n#[derive(Debug, Is, Clone, Serialize, Deserialize, Default, PartialOrd, Hash, Eq, PartialEq)]\n#[serde(tag = \"kind\", content = \"value\")]\npub enum TokenKind {\n    /// `None` if the word does not exist in the dictionary.\n    Word(Option<DictWordMetadata>),\n    Punctuation(Punctuation),\n    Decade,\n    Number(Number),\n    /// A sequence of \" \" spaces.\n    Space(usize),\n    /// A sequence of \"\\n\" newlines\n    Newline(usize),\n    EmailAddress,\n    Url,\n    Hostname,\n    /// A special token used for things like inline code blocks that should be\n    /// ignored by all linters.\n    #[default]\n    Unlintable,\n    ParagraphBreak,\n    Regexish,\n    HeadingStart,\n}\n\nimpl TokenKind {\n    // DictWord metadata delegation methods grouped by part of speech\n    delegate_to_metadata! {\n        // Nominal methods (nouns and pronouns)\n        is_nominal,\n        is_noun,\n        is_pronoun,\n        is_proper_noun,\n        is_singular_nominal,\n        is_plural_nominal,\n        is_possessive_nominal,\n        is_non_plural_nominal,\n        is_singular_noun,\n        is_plural_noun,\n        is_non_plural_noun,\n        is_non_possessive_noun,\n        is_countable_noun,\n        is_non_countable_noun,\n        is_mass_noun,\n        is_mass_noun_only,\n        is_non_mass_noun,\n        is_singular_pronoun,\n        is_plural_pronoun,\n        is_non_plural_pronoun,\n        is_reflexive_pronoun,\n        is_personal_pronoun,\n        is_first_person_singular_pronoun,\n        is_first_person_plural_pronoun,\n        is_second_person_pronoun,\n        is_third_person_pronoun,\n        is_third_person_singular_pronoun,\n        is_third_person_plural_pronoun,\n        is_subject_pronoun,\n        is_object_pronoun,\n        is_possessive_noun,\n        // Note: possessive pronouns are: mine, ours, yours, his, hers, its, theirs\n        is_possessive_pronoun,\n\n        // Verb methods\n        is_verb,\n        is_auxiliary_verb,\n        is_linking_verb,\n        is_verb_lemma,\n        is_verb_past_form,\n        is_verb_simple_past_form,\n        is_verb_past_participle_form,\n        is_verb_progressive_form,\n        is_verb_third_person_singular_present_form,\n\n        // Adjective methods\n        is_adjective,\n        is_comparative_adjective,\n        is_superlative_adjective,\n        is_positive_adjective,\n\n        // Adverb methods\n        is_adverb,\n        is_manner_adverb,\n        is_frequency_adverb,\n        is_degree_adverb,\n\n        // Determiner methods\n        is_determiner,\n        is_demonstrative_determiner,\n        is_possessive_determiner,\n        is_quantifier,\n        is_non_quantifier_determiner,\n        is_non_demonstrative_determiner,\n\n        // Conjunction methods\n        is_conjunction,\n\n        // Generic word methods\n        is_swear,\n        is_likely_homograph,\n\n        // Orthography methods\n        is_lowercase,\n        is_titlecase,\n        is_allcaps,\n        is_lower_camel,\n        is_upper_camel,\n        is_apostrophized,\n\n        is_roman_numerals\n    }\n\n    pub fn get_pronoun_person(&self) -> Option<Person> {\n        let Word(Some(metadata)) = self else {\n            return None;\n        };\n        metadata.get_person()\n    }\n\n    // DictWord metadata delegation methods not generated by macro\n    pub fn is_preposition(&self) -> bool {\n        let Word(Some(metadata)) = self else {\n            return false;\n        };\n        metadata.preposition\n    }\n\n    // Generic word is-methods\n\n    pub fn is_common_word(&self) -> bool {\n        let Word(Some(metadata)) = self else {\n            return true;\n        };\n        metadata.common\n    }\n\n    /// Checks whether the token is a member of a nominal phrase.\n    pub fn is_np_member(&self) -> bool {\n        let Word(Some(metadata)) = self else {\n            return false;\n        };\n        metadata.np_member.unwrap_or(false)\n    }\n\n    /// Checks whether a word token is out-of-vocabulary (not found in the dictionary).\n    ///\n    /// Returns `true` if the token is a word that was not found in the dictionary,\n    /// `false` if the token is a word found in the dictionary or is not a word token.\n    pub fn is_oov(&self) -> bool {\n        matches!(self, TokenKind::Word(None))\n    }\n\n    // Number is-methods\n\n    pub fn is_cardinal_number(&self) -> bool {\n        matches!(self, TokenKind::Number(Number { suffix: None, .. }))\n    }\n\n    pub fn is_ordinal_number(&self) -> bool {\n        matches!(\n            self,\n            TokenKind::Number(Number {\n                suffix: Some(_),\n                ..\n            })\n        )\n    }\n\n    // Punctuation and symbol is-methods\n\n    pub fn is_open_square(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::OpenSquare))\n    }\n\n    pub fn is_close_square(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::CloseSquare))\n    }\n\n    pub fn is_less_than(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::LessThan))\n    }\n\n    pub fn is_greater_than(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::GreaterThan))\n    }\n\n    pub fn is_open_round(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::OpenRound))\n    }\n\n    pub fn is_close_round(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::CloseRound))\n    }\n\n    pub fn is_pipe(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Pipe))\n    }\n\n    pub fn is_currency(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Currency(..)))\n    }\n\n    pub fn is_ellipsis(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Ellipsis))\n    }\n\n    // AKA 'minus'\n    pub fn is_hyphen(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Hyphen))\n    }\n\n    pub fn is_plus(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Plus))\n    }\n\n    pub fn is_quote(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Quote(_)))\n    }\n\n    pub fn is_apostrophe(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Apostrophe))\n    }\n\n    pub fn is_period(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Period))\n    }\n\n    pub fn is_at(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::At))\n    }\n\n    pub fn is_comma(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Comma))\n    }\n\n    pub fn is_semicolon(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Semicolon))\n    }\n\n    pub fn is_acute(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Acute))\n    }\n\n    pub fn is_ampersand(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Ampersand))\n    }\n\n    pub fn is_backslash(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Backslash))\n    }\n\n    pub fn is_slash(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::ForwardSlash))\n    }\n\n    pub fn is_percent(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Percent))\n    }\n\n    // Miscellaneous is-methods\n\n    /// Checks whether a token is word-like--meaning it is more complex than punctuation and can\n    /// hold semantic meaning in the way a word does.\n    pub fn is_word_like(&self) -> bool {\n        matches!(\n            self,\n            TokenKind::Word(..)\n                | TokenKind::EmailAddress\n                | TokenKind::Hostname\n                | TokenKind::Decade\n                | TokenKind::Number(..)\n        )\n    }\n\n    pub(crate) fn is_chunk_terminator(&self) -> bool {\n        if self.is_sentence_terminator() {\n            return true;\n        }\n\n        match self {\n            TokenKind::Punctuation(punct) => {\n                matches!(\n                    punct,\n                    Punctuation::Comma | Punctuation::Quote { .. } | Punctuation::Colon\n                )\n            }\n            _ => false,\n        }\n    }\n\n    pub fn is_sentence_terminator(&self) -> bool {\n        match self {\n            TokenKind::Punctuation(punct) => [\n                Punctuation::Period,\n                Punctuation::Bang,\n                Punctuation::Question,\n            ]\n            .contains(punct),\n            TokenKind::ParagraphBreak => true,\n            _ => false,\n        }\n    }\n\n    /// Used by `crate::parsers::CollapseIdentifiers`\n    /// TODO: Separate this into two functions and add OR functionality to\n    /// pattern matching\n    pub fn is_case_separator(&self) -> bool {\n        matches!(self, TokenKind::Punctuation(Punctuation::Underscore))\n            || matches!(self, TokenKind::Punctuation(Punctuation::Hyphen))\n    }\n\n    /// Checks whether the token is whitespace.\n    pub fn is_whitespace(&self) -> bool {\n        matches!(self, TokenKind::Space(_) | TokenKind::Newline(_))\n    }\n\n    pub fn is_upos(&self, upos: UPOS) -> bool {\n        let Some(Some(meta)) = self.as_word() else {\n            return false;\n        };\n\n        meta.pos_tag == Some(upos)\n    }\n\n    // Miscellaneous non-is methods\n\n    /// Checks that `self` is the same enum variant as `other`, regardless of\n    /// whether the inner metadata is also equal.\n    pub fn matches_variant_of(&self, other: &Self) -> bool {\n        self.with_default_data() == other.with_default_data()\n    }\n\n    /// Produces a copy of `self` with any inner data replaced with its default\n    /// value. Useful for making comparisons on just the variant of the\n    /// enum.\n    pub fn with_default_data(&self) -> Self {\n        match self {\n            TokenKind::Word(_) => TokenKind::Word(Default::default()),\n            TokenKind::Punctuation(_) => TokenKind::Punctuation(Default::default()),\n            TokenKind::Number(..) => TokenKind::Number(Default::default()),\n            TokenKind::Space(_) => TokenKind::Space(Default::default()),\n            TokenKind::Newline(_) => TokenKind::Newline(Default::default()),\n            _ => self.clone(),\n        }\n    }\n\n    /// Construct a [`TokenKind::Word`] with no metadata.\n    pub fn blank_word() -> Self {\n        Self::Word(None)\n    }\n\n    // Punctuation and symbol non-is methods\n\n    pub fn as_mut_quote(&mut self) -> Option<&mut Quote> {\n        self.as_mut_punctuation()?.as_mut_quote()\n    }\n\n    pub fn as_quote(&self) -> Option<&Quote> {\n        self.as_punctuation()?.as_quote()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::Document;\n\n    #[test]\n    fn car_is_singular_noun() {\n        let doc = Document::new_plain_english_curated(\"car\");\n        let tk = &doc.tokens().next().unwrap().kind;\n        assert!(tk.is_singular_noun());\n    }\n\n    #[test]\n    fn traffic_is_mass_noun_only() {\n        let doc = Document::new_plain_english_curated(\"traffic\");\n        let tk = &doc.tokens().next().unwrap().kind;\n        assert!(tk.is_mass_noun_only());\n    }\n\n    #[test]\n    fn equipment_is_mass_noun() {\n        let doc = Document::new_plain_english_curated(\"equipment\");\n        let tk = &doc.tokens().next().unwrap().kind;\n        assert!(tk.is_mass_noun());\n    }\n\n    #[test]\n    fn equipment_is_non_countable_noun() {\n        let doc = Document::new_plain_english_curated(\"equipment\");\n        let tk = &doc.tokens().next().unwrap().kind;\n        assert!(tk.is_non_countable_noun());\n    }\n\n    #[test]\n    fn equipment_isnt_countable_noun() {\n        let doc = Document::new_plain_english_curated(\"equipment\");\n        let tk = &doc.tokens().next().unwrap().kind;\n        assert!(!tk.is_countable_noun());\n    }\n\n    #[test]\n    fn oov_word_is_oov() {\n        let doc = Document::new_plain_english_curated(\"nonexistentword\");\n        let tk = &doc.tokens().next().unwrap().kind;\n        assert!(tk.is_oov());\n    }\n\n    #[test]\n    fn known_word_is_not_oov() {\n        let doc = Document::new_plain_english_curated(\"car\");\n        let tk = &doc.tokens().next().unwrap().kind;\n        assert!(!tk.is_oov());\n    }\n\n    #[test]\n    fn non_word_tokens_are_not_oov() {\n        let doc = Document::new_plain_english_curated(\"Hello, world!\");\n        let tokens: Vec<_> = doc.tokens().collect();\n\n        // Comma should not be OOV\n        assert!(!tokens[1].kind.is_oov());\n        // Exclamation mark should not be OOV\n        assert!(!tokens[3].kind.is_oov());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/token_string_ext.rs",
    "content": "use crate::{Span, Token};\nuse itertools::Itertools;\nuse paste::paste;\n\nmacro_rules! create_decl_for {\n    ($thing:ident) => {\n        paste! {\n            fn [< first_ $thing >](&self) -> Option<&Token>;\n\n            fn [< last_ $thing >](&self) -> Option<&Token>;\n\n            fn [< last_ $thing _index >](&self) -> Option<usize>;\n\n            fn [<iter_ $thing _indices>](&self) -> impl DoubleEndedIterator<Item = usize> + '_;\n\n            fn [<iter_ $thing s>](&self) -> impl Iterator<Item = &Token> + '_;\n        }\n    };\n}\n\nmacro_rules! create_fns_for {\n    ($thing:ident) => {\n        paste! {\n            fn [< first_ $thing >](&self) -> Option<&Token> {\n                self.iter().find(|v| v.kind.[<is_ $thing>]())\n            }\n\n            fn [< last_ $thing >](&self) -> Option<&Token> {\n                self.iter().rev().find(|v| v.kind.[<is_ $thing>]())\n            }\n\n            fn [< last_ $thing _index >](&self) -> Option<usize> {\n                self.iter().rev().position(|v| v.kind.[<is_ $thing>]()).map(|i| self.len() - i - 1)\n            }\n\n            fn [<iter_ $thing _indices>](&self) -> impl DoubleEndedIterator<Item = usize> + '_ {\n                self.iter()\n                    .enumerate()\n                    .filter(|(_, t)| t.kind.[<is_ $thing>]())\n                    .map(|(i, _)| i)\n            }\n\n            fn [<iter_ $thing s>](&self) -> impl Iterator<Item = &Token> + '_ {\n                self.[<iter_ $thing _indices>]().map(|i| &self[i])\n            }\n        }\n    };\n}\n\nmod private {\n    use crate::{Document, Token};\n\n    pub trait Sealed {}\n\n    impl Sealed for [Token] {}\n\n    impl Sealed for Document {}\n}\n\n/// Extension methods for [`Token`] sequences that make them easier to wrangle and query.\npub trait TokenStringExt: private::Sealed {\n    fn first_sentence_word(&self) -> Option<&Token>;\n    fn first_non_whitespace(&self) -> Option<&Token>;\n    /// Grab the span that represents the beginning of the first element and the\n    /// end of the last element.\n    fn span(&self) -> Option<Span<char>>;\n\n    create_decl_for!(adjective);\n    create_decl_for!(apostrophe);\n    create_decl_for!(at);\n    create_decl_for!(comma);\n    create_decl_for!(conjunction);\n    create_decl_for!(chunk_terminator);\n    create_decl_for!(currency);\n    create_decl_for!(ellipsis);\n    create_decl_for!(hostname);\n    create_decl_for!(likely_homograph);\n    create_decl_for!(number);\n    create_decl_for!(noun);\n    create_decl_for!(paragraph_break);\n    create_decl_for!(pipe);\n    create_decl_for!(preposition);\n    create_decl_for!(punctuation);\n    create_decl_for!(quote);\n    create_decl_for!(sentence_terminator);\n    create_decl_for!(space);\n    create_decl_for!(unlintable);\n    create_decl_for!(verb);\n    create_decl_for!(word);\n    create_decl_for!(word_like);\n    create_decl_for!(heading_start);\n\n    /// Get a reference to a token by index, with negative numbers counting from the end.\n    ///\n    /// # Examples\n    /// ```\n    /// # use harper_core::{Token, TokenStringExt, parsers::{Parser, PlainEnglish}};\n    /// # fn main() {\n    /// let source = \"The cat sat on the mat.\".chars().collect::<Vec<_>>();\n    /// let tokens = PlainEnglish.parse(&source);\n    /// assert_eq!(tokens.get_rel(0).unwrap().span.get_content_string(&source), \"The\");\n    /// assert_eq!(tokens.get_rel(1).unwrap().kind.is_whitespace(), true);\n    /// assert_eq!(tokens.get_rel(-1).unwrap().kind.is_punctuation(), true);\n    /// assert_eq!(tokens.get_rel(-2).unwrap().span.get_content_string(&source), \"mat\");\n    /// # }\n    /// ```\n    ///\n    /// # Returns\n    ///\n    /// * `Some(&Token)` - If the index is in bounds\n    /// * `None` - If the index is out of bounds\n    fn get_rel(&self, index: isize) -> Option<&Token>\n    where\n        Self: AsRef<[Token]>,\n    {\n        let slice = self.as_ref();\n        let len = slice.len() as isize;\n\n        if index >= len || -index > len {\n            return None;\n        }\n\n        let idx = if index >= 0 { index } else { len + index } as usize;\n\n        slice.get(idx)\n    }\n\n    /// Get a slice of tokens using relative indices.\n    ///\n    /// # Examples\n    /// ```\n    /// # use harper_core::{Token, TokenStringExt, parsers::{Parser, PlainEnglish}};\n    /// # fn main() {\n    /// let source = \"The cat sat on the mat.\".chars().collect::<Vec<_>>();\n    /// let tokens = PlainEnglish.parse(&source);\n    /// assert_eq!(tokens.get_rel_slice(0, 2).unwrap().span().unwrap().get_content_string(&source), \"The cat\");\n    /// assert_eq!(tokens.get_rel_slice(-3, -1).unwrap().span().unwrap().get_content_string(&source), \" mat.\");\n    /// # }\n    /// ```\n    fn get_rel_slice(&self, rel_start: isize, inclusive_end: isize) -> Option<&[Token]>\n    where\n        Self: AsRef<[Token]>,\n    {\n        let slice = self.as_ref();\n        let len = slice.len() as isize;\n\n        // Convert relative indices to absolute indices\n        let start_idx = if rel_start >= 0 {\n            rel_start\n        } else {\n            len + rel_start\n        } as usize;\n\n        let end_idx_plus_one = if inclusive_end >= 0 {\n            inclusive_end + 1 // +1 to make end exclusive\n        } else {\n            len + inclusive_end + 1\n        } as usize;\n\n        // Check bounds\n        if start_idx >= slice.len()\n            || end_idx_plus_one > slice.len()\n            || start_idx >= end_idx_plus_one\n        {\n            return None;\n        }\n\n        Some(&slice[start_idx..end_idx_plus_one])\n    }\n\n    fn iter_linking_verb_indices(&self) -> impl Iterator<Item = usize> + '_;\n    fn iter_linking_verbs(&self) -> impl Iterator<Item = &Token> + '_;\n\n    /// Iterate over chunks.\n    ///\n    /// For example, the following sentence contains two chunks separated by a\n    /// comma:\n    ///\n    /// ```text\n    /// Here is an example, it is short.\n    /// ```\n    fn iter_chunks(&self) -> impl Iterator<Item = &'_ [Token]> + '_;\n\n    /// Get an iterator over token slices that represent the individual\n    /// paragraphs in a document.\n    fn iter_paragraphs(&self) -> impl Iterator<Item = &'_ [Token]> + '_;\n\n    /// Get an iterator over token slices that represent headings.\n    ///\n    /// A heading begins with a [`TokenKind::HeadingStart`](crate::TokenKind::HeadingStart) token and ends with\n    /// the next [`TokenKind::ParagraphBreak`](crate::TokenKind::ParagraphBreak).\n    fn iter_headings(&self) -> impl Iterator<Item = &'_ [Token]> + '_;\n\n    /// Get an iterator over token slices that represent the individual\n    /// sentences in a document.\n    fn iter_sentences(&self) -> impl Iterator<Item = &'_ [Token]> + '_;\n\n    /// Get an iterator over mutable token slices that represent the individual\n    /// sentences in a document.\n    fn iter_sentences_mut(&mut self) -> impl Iterator<Item = &'_ mut [Token]> + '_;\n}\n\nimpl TokenStringExt for [Token] {\n    create_fns_for!(adjective);\n    create_fns_for!(apostrophe);\n    create_fns_for!(at);\n    create_fns_for!(chunk_terminator);\n    create_fns_for!(comma);\n    create_fns_for!(conjunction);\n    create_fns_for!(currency);\n    create_fns_for!(ellipsis);\n    create_fns_for!(hostname);\n    create_fns_for!(likely_homograph);\n    create_fns_for!(noun);\n    create_fns_for!(number);\n    create_fns_for!(paragraph_break);\n    create_fns_for!(pipe);\n    create_fns_for!(preposition);\n    create_fns_for!(punctuation);\n    create_fns_for!(quote);\n    create_fns_for!(sentence_terminator);\n    create_fns_for!(space);\n    create_fns_for!(unlintable);\n    create_fns_for!(verb);\n    create_fns_for!(word_like);\n    create_fns_for!(word);\n    create_fns_for!(heading_start);\n\n    fn first_non_whitespace(&self) -> Option<&Token> {\n        self.iter().find(|t| !t.kind.is_whitespace())\n    }\n\n    fn first_sentence_word(&self) -> Option<&Token> {\n        let (w_idx, word) = self.iter().find_position(|v| v.kind.is_word())?;\n\n        let Some(u_idx) = self.iter().position(|v| v.kind.is_unlintable()) else {\n            return Some(word);\n        };\n\n        if w_idx < u_idx { Some(word) } else { None }\n    }\n\n    fn span(&self) -> Option<Span<char>> {\n        let min_max = self\n            .iter()\n            .flat_map(|v| [v.span.start, v.span.end].into_iter())\n            .minmax();\n\n        match min_max {\n            itertools::MinMaxResult::NoElements => None,\n            itertools::MinMaxResult::OneElement(min) => Some(Span::new(min, min)),\n            itertools::MinMaxResult::MinMax(min, max) => Some(Span::new(min, max)),\n        }\n    }\n\n    fn iter_linking_verb_indices(&self) -> impl Iterator<Item = usize> + '_ {\n        self.iter_word_indices().filter(|idx| {\n            let word = &self[*idx];\n            let Some(Some(meta)) = word.kind.as_word() else {\n                return false;\n            };\n\n            meta.is_linking_verb()\n        })\n    }\n\n    fn iter_linking_verbs(&self) -> impl Iterator<Item = &Token> + '_ {\n        self.iter_linking_verb_indices().map(|idx| &self[idx])\n    }\n\n    fn iter_chunks(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {\n        self.split_inclusive(|tok| tok.kind.is_chunk_terminator())\n    }\n\n    fn iter_paragraphs(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {\n        self.split_inclusive(|tok| tok.kind.is_paragraph_break())\n    }\n\n    fn iter_headings(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {\n        self.iter_heading_start_indices().map(|start| {\n            let end = self[start..]\n                .iter()\n                .position(|t| t.kind.is_paragraph_break())\n                .unwrap_or(self[start..].len() - 1);\n\n            &self[start..=start + end]\n        })\n    }\n\n    fn iter_sentences(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {\n        self.split_inclusive(|token| token.kind.is_sentence_terminator())\n    }\n\n    fn iter_sentences_mut(&mut self) -> impl Iterator<Item = &mut [Token]> + '_ {\n        struct SentIter<'a> {\n            rem: &'a mut [Token],\n        }\n\n        impl<'a> Iterator for SentIter<'a> {\n            type Item = &'a mut [Token];\n\n            fn next(&mut self) -> Option<Self::Item> {\n                if self.rem.is_empty() {\n                    return None;\n                }\n                let split = self\n                    .rem\n                    .iter()\n                    .position(|t| t.kind.is_sentence_terminator())\n                    .map(|i| i + 1)\n                    .unwrap_or(self.rem.len());\n                let tmp = core::mem::take(&mut self.rem);\n                let (sent, rest) = tmp.split_at_mut(split);\n                self.rem = rest;\n                Some(sent)\n            }\n        }\n\n        SentIter { rem: self }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/vec_ext.rs",
    "content": "use std::collections::VecDeque;\n\nmod private {\n    pub trait Sealed {}\n\n    impl<T> Sealed for Vec<T> {}\n}\n\n/// Extensions on top of [`Vec`] that make certain common operations easier.\npub trait VecExt: private::Sealed {\n    /// Removes a list of indices from a Vector.\n    /// Assumes that the provided indices are already in sorted order.\n    fn remove_indices(&mut self, to_remove: VecDeque<usize>);\n}\n\nimpl<T> VecExt for Vec<T> {\n    fn remove_indices(&mut self, mut to_remove: VecDeque<usize>) {\n        let mut i = 0;\n\n        let mut next_remove = to_remove.pop_front();\n\n        self.retain(|_| {\n            let keep = if let Some(next_remove) = next_remove {\n                i != next_remove\n            } else {\n                true\n            };\n\n            if !keep {\n                next_remove = to_remove.pop_front();\n            }\n\n            i += 1;\n            keep\n        });\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use std::collections::VecDeque;\n\n    use crate::vec_ext::VecExt;\n\n    #[test]\n    fn removes_requested_indices() {\n        let mut data: Vec<i32> = (0..10).collect();\n        let remove: VecDeque<usize> = vec![1, 4, 6].into_iter().collect();\n\n        data.remove_indices(remove);\n\n        assert_eq!(data, vec![0, 2, 3, 5, 7, 8, 9])\n    }\n}\n"
  },
  {
    "path": "harper-core/src/weir/ast.rs",
    "content": "use harper_brill::UPOS;\nuse hashbrown::HashMap;\nuse is_macro::Is;\nuse itertools::Itertools;\n\nuse crate::expr::{Expr, Filter, FirstMatchOf, SequenceExpr, UnlessStep};\nuse crate::patterns::{AnyPattern, DerivedFrom, UPOSSet, WhitespacePattern, Word};\nuse crate::{CharString, CharStringExt, Lrc, Punctuation, Token};\n\nuse super::Error;\n\n#[derive(Debug, Clone, Eq, PartialEq)]\npub struct Ast {\n    pub stmts: Vec<AstStmtNode>,\n}\n\nimpl Ast {\n    /// Construct a new abstract syntax tree from individual statements.\n    pub fn new(stmts: Vec<AstStmtNode>) -> Self {\n        Self { stmts }\n    }\n\n    /// Get the value of a variable from the last time it was set.\n    pub fn get_variable_value(&self, var_name: &str) -> Option<&'_ AstVariable> {\n        for stmt in self.stmts.iter().rev() {\n            if let AstStmtNode::DeclareVariable { name, value } = stmt\n                && name == var_name\n            {\n                return Some(value);\n            }\n        }\n        None\n    }\n\n    /// Get the value of an expression from the last time it was set.\n    pub fn get_expr(&self, expr_name: &str) -> Option<&'_ AstExprNode> {\n        for stmt in self.stmts.iter().rev() {\n            if let AstStmtNode::SetExpr { name, value } = stmt\n                && name == expr_name\n            {\n                return Some(value);\n            }\n        }\n        None\n    }\n\n    /// Iterate through all unique variable values, from the last time they were set.\n    pub fn iter_variable_values(&self) -> impl Iterator<Item = (&str, &AstVariable)> {\n        self.stmts\n            .iter()\n            .rev()\n            .filter_map(|n| match n {\n                AstStmtNode::DeclareVariable { name, value } => Some((name.as_str(), value)),\n                _ => None,\n            })\n            .unique_by(|(n, _)| *n)\n    }\n\n    /// Iterate through all the tests in the tree, starting with the one first declared in the\n    /// tree.\n    pub fn iter_tests(&self) -> impl Iterator<Item = (&str, &str)> {\n        self.stmts.iter().filter_map(|stmt| match stmt {\n            AstStmtNode::Test { expect, to_be } => Some((expect.as_str(), to_be.as_str())),\n            AstStmtNode::Allows { value } => Some((value.as_str(), value.as_str())),\n            _ => None,\n        })\n    }\n\n    /// Iterate through all the expressions in the tree, starting with the one first declared in the\n    /// tree.\n    pub fn iter_exprs(&self) -> impl Iterator<Item = (&str, &AstExprNode)> {\n        self.stmts.iter().filter_map(|stmt| {\n            if let AstStmtNode::SetExpr { name, value } = stmt {\n                Some((name.as_str(), value))\n            } else {\n                None\n            }\n        })\n    }\n}\n\n/// A node that represents an expression that can be used to search through natural language.\n#[derive(Debug, Clone, Is, Eq, PartialEq)]\npub enum AstExprNode {\n    Whitespace,\n    /// A progressive verb.\n    Progressive,\n    UPOSSet(Vec<UPOS>),\n    Word(CharString),\n    DerivativeOf(CharString),\n    Punctuation(Punctuation),\n    Not(Box<AstExprNode>),\n    Seq(Vec<AstExprNode>),\n    Arr(Vec<AstExprNode>),\n    Filter(Vec<AstExprNode>),\n    ExprRef(CharString),\n    Anything,\n}\n\nimpl AstExprNode {\n    /// Create an actual expression that fulfills the pattern matching contract defined by this tree.\n    ///\n    /// Requires a map of all expressions currently in the context.\n    pub fn to_expr(\n        &self,\n        ctx_exprs: &HashMap<String, Lrc<Box<dyn Expr>>>,\n    ) -> Result<Box<dyn Expr>, Error> {\n        match self {\n            AstExprNode::Anything => Ok(Box::new(AnyPattern)),\n            AstExprNode::Progressive => Ok(Box::new(|tok: &Token, _: &[char]| {\n                tok.kind.is_verb_progressive_form()\n            })),\n            AstExprNode::UPOSSet(upos) => Ok(Box::new(UPOSSet::new(upos))),\n            AstExprNode::Whitespace => Ok(Box::new(WhitespacePattern)),\n            AstExprNode::Word(word) => Ok(Box::new(Word::from_chars(word))),\n            AstExprNode::DerivativeOf(word) => Ok(Box::new(DerivedFrom::new_from_chars(word))),\n            AstExprNode::Not(ast_node) => Ok(Box::new(UnlessStep::new(\n                ast_node.to_expr(ctx_exprs)?,\n                |_tok: &Token, _: &[char]| true,\n            )) as Box<dyn Expr>),\n            AstExprNode::Seq(children) => {\n                let mut expr = SequenceExpr::default();\n\n                for node in children {\n                    expr = expr.then_boxed(node.to_expr(ctx_exprs)?);\n                }\n\n                Ok(Box::new(expr))\n            }\n            AstExprNode::Arr(children) => {\n                let mut expr = FirstMatchOf::default();\n\n                for node in children {\n                    expr.add_boxed(node.to_expr(ctx_exprs)?);\n                }\n\n                Ok(Box::new(expr))\n            }\n            AstExprNode::Filter(children) => Ok(Box::new(Filter::new(\n                children\n                    .iter()\n                    .map(|n| n.to_expr(ctx_exprs))\n                    .process_results(|iter| iter.collect())?,\n            ))),\n            AstExprNode::Punctuation(punct) => {\n                let punct = *punct;\n\n                Ok(Box::new(move |tok: &Token, _: &[char]| {\n                    tok.kind.as_punctuation().is_some_and(|p| *p == punct)\n                }))\n            }\n            AstExprNode::ExprRef(name) => ctx_exprs\n                .get(&name.to_string())\n                .map(|e| Box::new(e.clone()) as Box<dyn Expr>)\n                .ok_or_else(|| Error::UnableToResolveExpr(name.to_string())),\n        }\n    }\n}\n\n/// A variable defined by the `let` keyword.\n#[derive(Debug, Clone, Is, Eq, PartialEq)]\npub enum AstVariable {\n    String(String),\n    Array(Vec<AstVariable>),\n}\n\nimpl AstVariable {\n    pub fn create_string(val: impl ToString) -> Self {\n        Self::String(val.to_string())\n    }\n}\n\n/// An AST node that represents a top-level statement.\n#[derive(Debug, Clone, Is, Eq, PartialEq)]\npub enum AstStmtNode {\n    DeclareVariable { name: String, value: AstVariable },\n    SetExpr { name: String, value: AstExprNode },\n    Comment(String),\n    Test { expect: String, to_be: String },\n    Allows { value: String },\n}\n\nimpl AstStmtNode {\n    pub fn create_declare_variable(name: impl ToString, value: AstVariable) -> Self {\n        Self::DeclareVariable {\n            name: name.to_string(),\n            value,\n        }\n    }\n\n    pub fn create_set_expr(name: impl ToString, value: AstExprNode) -> Self {\n        Self::SetExpr {\n            name: name.to_string(),\n            value,\n        }\n    }\n\n    pub fn create_test(expect: impl ToString, to_be: impl ToString) -> Self {\n        Self::Test {\n            expect: expect.to_string(),\n            to_be: to_be.to_string(),\n        }\n    }\n\n    pub fn create_allow_test(value: impl ToString) -> Self {\n        Self::Allows {\n            value: value.to_string(),\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/weir/error.rs",
    "content": "use thiserror::Error;\n\n#[derive(Debug, Error, Eq, PartialEq)]\npub enum Error {\n    #[error(\"Encountered a token that is unsupported by the parser.\")]\n    UnsupportedToken(String),\n    #[error(\"Reached the end of the input token stream prematurely.\")]\n    EndOfInput,\n    #[error(\"Unmatched brace\")]\n    UnmatchedBrace,\n    #[error(\"Expected a comma here.\")]\n    ExpectedComma,\n    #[error(\"Expected a valid keyword. Got: {0}\")]\n    UnexpectedToken(String),\n    #[error(\"Expected a value to be defined.\")]\n    ExpectedVariableUndefined,\n    #[error(\"Invalid LintKind\")]\n    InvalidLintKind,\n    #[error(\"Invalid Replacement Strategy\")]\n    InvalidReplacementStrategy,\n    #[error(\"Expected a variable type other than the one provided.\")]\n    ExpectedDifferentVariableType,\n    #[error(\"Unable to resolve expression reference {0}\")]\n    UnableToResolveExpr(String),\n}\n"
  },
  {
    "path": "harper-core/src/weir/mod.rs",
    "content": "//! Weir is a programming language for finding errors in natural language.\n//! See our [main documentation](https://writewithharper.com/docs/weir) for more details.\n\nmod ast;\nmod error;\nmod optimize;\nmod parsing;\n\nuse std::collections::VecDeque;\nuse std::str::FromStr;\nuse std::sync::Arc;\n\npub use error::Error;\nuse hashbrown::{HashMap, HashSet};\nuse is_macro::Is;\nuse parsing::{parse_expr_str, parse_str};\nuse strum_macros::{AsRefStr, EnumString};\n\nuse crate::expr::Expr;\nuse crate::linting::{Chunk, ExprLinter, Lint, LintKind, Linter, Suggestion};\nuse crate::parsers::Markdown;\nuse crate::spell::FstDictionary;\nuse crate::{Document, Lrc, Token, TokenStringExt};\n\nuse self::ast::{Ast, AstVariable};\n\npub(crate) fn weir_expr_to_expr(weir_code: &str) -> Result<Box<dyn Expr>, Error> {\n    let ast = parse_expr_str(weir_code, true)?;\n    ast.to_expr(&HashMap::new())\n}\n\n#[derive(Debug, Is, EnumString, AsRefStr)]\nenum ReplacementStrategy {\n    MatchCase,\n    Exact,\n}\n\n#[derive(Debug, Clone, PartialEq, Eq)]\npub struct TestResult {\n    pub expected: String,\n    pub got: String,\n}\n\npub struct WeirLinter {\n    expr: Lrc<Box<dyn Expr>>,\n    description: String,\n    message: String,\n    strategy: ReplacementStrategy,\n    replacements: Vec<String>,\n    lint_kind: LintKind,\n    ast: Arc<Ast>,\n}\n\nimpl WeirLinter {\n    pub fn new(weir_code: &str) -> Result<WeirLinter, Error> {\n        let ast = parse_str(weir_code, true)?;\n\n        let main_expr_name = \"main\";\n        let description_name = \"description\";\n        let message_name = \"message\";\n        let lint_kind_name = \"kind\";\n        let replacement_name = \"becomes\";\n        let replacement_strat_name = \"strategy\";\n\n        let resolved = resolve_exprs(&ast)?;\n\n        let expr = resolved\n            .get(main_expr_name)\n            .ok_or(Error::ExpectedVariableUndefined)?;\n\n        let description = ast\n            .get_variable_value(description_name)\n            .ok_or(Error::ExpectedVariableUndefined)?\n            .as_string()\n            .ok_or(Error::ExpectedDifferentVariableType)?\n            .to_owned();\n\n        let message = ast\n            .get_variable_value(message_name)\n            .ok_or(Error::ExpectedVariableUndefined)?\n            .as_string()\n            .ok_or(Error::ExpectedDifferentVariableType)?\n            .to_owned();\n\n        let replacement_val = ast\n            .get_variable_value(replacement_name)\n            .ok_or(Error::ExpectedVariableUndefined)?;\n\n        let replacements = match replacement_val {\n            AstVariable::String(s) => vec![s.to_owned()],\n            AstVariable::Array(arr) => {\n                let mut out = Vec::with_capacity(arr.len());\n                for item in arr.iter().map(|v| {\n                    v.as_string()\n                        .cloned()\n                        .ok_or(Error::ExpectedDifferentVariableType)\n                }) {\n                    let item = item?;\n                    out.push(item);\n                }\n                out\n            }\n        };\n\n        let replacement_strat_var = ast.get_variable_value(replacement_strat_name);\n        let replacement_strat = if let Some(replacement_strat) = replacement_strat_var {\n            let str = replacement_strat\n                .as_string()\n                .ok_or(Error::ExpectedDifferentVariableType)?;\n            ReplacementStrategy::from_str(str)\n                .ok()\n                .ok_or(Error::InvalidReplacementStrategy)?\n        } else {\n            ReplacementStrategy::MatchCase\n        };\n\n        let lint_kind_var = ast.get_variable_value(lint_kind_name);\n        let lint_kind = if let Some(lint_kind) = lint_kind_var {\n            let str = lint_kind\n                .as_string()\n                .ok_or(Error::ExpectedDifferentVariableType)?;\n            LintKind::from_string_key(str).ok_or(Error::InvalidLintKind)?\n        } else {\n            LintKind::Miscellaneous\n        };\n\n        let linter = WeirLinter {\n            strategy: replacement_strat,\n            ast,\n            expr: expr.clone(),\n            lint_kind,\n            description,\n            message,\n            replacements,\n        };\n\n        Ok(linter)\n    }\n\n    /// Counts the total number of tests defined.\n    pub fn count_tests(&self) -> usize {\n        self.ast.iter_tests().count()\n    }\n\n    /// Runs the tests defined in the source code, returning any failing results.\n    pub fn run_tests(&mut self) -> Vec<TestResult> {\n        fn apply_nth_suggestion(text: &str, lint: &Lint, n: usize) -> Option<String> {\n            let suggestion = lint.suggestions.get(n)?;\n            let mut text_chars: Vec<char> = text.chars().collect();\n            suggestion.apply(lint.span, &mut text_chars);\n            Some(text_chars.iter().collect())\n        }\n\n        fn transform_top3_to_expected(\n            text: &str,\n            expected: &str,\n            linter: &mut impl Linter,\n        ) -> Option<String> {\n            let mut queue: VecDeque<(String, usize)> = VecDeque::new();\n            let mut seen: HashSet<String> = HashSet::new();\n\n            queue.push_back((text.to_string(), 0));\n            seen.insert(text.to_string());\n\n            while let Some((current, depth)) = queue.pop_front() {\n                if current == expected {\n                    return Some(current);\n                }\n\n                if depth >= 100 {\n                    continue;\n                }\n\n                let doc = Document::new_from_vec(\n                    current.chars().collect::<Vec<_>>().into(),\n                    &Markdown::default(),\n                    &FstDictionary::curated(),\n                );\n                let lints = linter.lint(&doc);\n\n                if let Some(lint) = lints.first() {\n                    for i in 0..3 {\n                        if let Some(next) = apply_nth_suggestion(&current, lint, i)\n                            && seen.insert(next.clone())\n                        {\n                            queue.push_back((next, depth + 1));\n                        }\n                    }\n                }\n            }\n\n            None\n        }\n\n        fn transform_nth_str(text: &str, linter: &mut impl Linter, n: usize) -> String {\n            let mut text_chars: Vec<char> = text.chars().collect();\n            let mut iter_count = 0;\n\n            loop {\n                let test = Document::new_from_vec(\n                    text_chars.clone().into(),\n                    &Markdown::default(),\n                    &FstDictionary::curated(),\n                );\n                let lints = linter.lint(&test);\n\n                if let Some(lint) = lints.first() {\n                    if let Some(suggestion) = lint.suggestions.get(n) {\n                        suggestion.apply(lint.span, &mut text_chars);\n                    } else {\n                        break;\n                    }\n                } else {\n                    break;\n                }\n\n                iter_count += 1;\n                if iter_count == 100 {\n                    break;\n                }\n            }\n\n            text_chars.iter().collect()\n        }\n\n        fn lint_count(text: &str, linter: &mut impl Linter) -> usize {\n            let document = Document::new_from_vec(\n                text.chars().collect::<Vec<_>>().into(),\n                &Markdown::default(),\n                &FstDictionary::curated(),\n            );\n\n            linter.lint(&document).len()\n        }\n\n        let mut results = Vec::new();\n        let tests: Vec<(String, String)> = self\n            .ast\n            .iter_tests()\n            .map(|(text, expected)| (text.to_string(), expected.to_string()))\n            .collect();\n\n        for (text, expected) in tests {\n            let matched = transform_top3_to_expected(&text, &expected, self);\n\n            match matched {\n                Some(result) => {\n                    let remaining_lints = lint_count(&result, self);\n\n                    if remaining_lints != 0 {\n                        results.push(TestResult {\n                            expected: expected.to_string(),\n                            got: result,\n                        });\n                    }\n                }\n                None => results.push(TestResult {\n                    expected: expected.to_string(),\n                    got: transform_nth_str(&text, self, 0),\n                }),\n            }\n        }\n\n        results\n    }\n}\n\nimpl ExprLinter for WeirLinter {\n    type Unit = Chunk;\n\n    fn expr(&self) -> &dyn Expr {\n        &self.expr\n    }\n\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        let span = matched_tokens.span()?;\n        let orig = span.get_content(source);\n\n        let suggestions = match self.strategy {\n            ReplacementStrategy::MatchCase => self\n                .replacements\n                .iter()\n                .map(|s| Suggestion::replace_with_match_case(s.chars().collect(), orig))\n                .collect(),\n            ReplacementStrategy::Exact => self\n                .replacements\n                .iter()\n                .map(|r| Suggestion::ReplaceWith(r.chars().collect()))\n                .collect(),\n        };\n\n        Some(Lint {\n            span,\n            lint_kind: self.lint_kind,\n            suggestions,\n            message: self.message.to_owned(),\n            priority: 31,\n        })\n    }\n\n    fn description(&self) -> &str {\n        &self.description\n    }\n}\n\nfn resolve_exprs(ast: &Ast) -> Result<HashMap<String, Lrc<Box<dyn Expr>>>, Error> {\n    let mut resolved_exprs = HashMap::new();\n\n    for (name, val) in ast.iter_exprs() {\n        let expr = val.to_expr(&resolved_exprs)?;\n        resolved_exprs.insert(name.to_owned(), Lrc::new(expr));\n    }\n\n    Ok(resolved_exprs)\n}\n\n#[cfg(test)]\npub mod tests {\n    use quickcheck_macros::quickcheck;\n\n    use crate::weir::Error;\n\n    use super::{TestResult, WeirLinter};\n\n    #[track_caller]\n    pub fn assert_passes_all(linter: &mut WeirLinter) {\n        assert_eq!(Vec::<TestResult>::new(), linter.run_tests());\n    }\n\n    #[test]\n    fn simple_right_click_linter() {\n        let source = r#\"\n            expr main <([right, middle, left] $click), ( )>\n            let message \"Hyphenate this mouse command\"\n            let description \"Hyphenates right-click style mouse commands.\"\n            let kind \"Punctuation\"\n            let becomes \"-\"\n\n            test \"Right click the icon.\" \"Right-click the icon.\"\n            test \"Please right click on the link.\" \"Please right-click on the link.\"\n            test \"They right clicked the submit button.\" \"They right-clicked the submit button.\"\n            test \"Right clicking the item highlights it.\" \"Right-clicking the item highlights it.\"\n            test \"Right clicks are tracked in the log.\" \"Right-clicks are tracked in the log.\"\n            test \"He RIGHT CLICKED the file.\" \"He RIGHT-CLICKED the file.\"\n            test \"Left click the checkbox.\" \"Left-click the checkbox.\"\n            test \"Middle click to open in a new tab.\" \"Middle-click to open in a new tab.\"\n\n            allows \"This test contains the correct version of right-click and therefore shouldn't error.\"\n            \"#;\n\n        let mut linter = WeirLinter::new(source).unwrap();\n        assert_passes_all(&mut linter);\n        assert_eq!(9, linter.count_tests());\n    }\n\n    #[test]\n    fn g_suite() {\n        let source = r#\"\n            expr main [(G [Suite, Suit]), (Google Apps for Work)]\n            let message \"Use the updated brand.\"\n            let description \"`G Suite` or `Google Apps for Work` is now called `Google Workspace`\"\n            let kind \"Miscellaneous\"\n            let becomes \"Google Workspace\"\n            let strategy \"Exact\"\n\n            test \"We migrated from G Suite last year.\" \"We migrated from Google Workspace last year.\"\n            test \"This account is still labeled as Google Apps for Work.\" \"This account is still labeled as Google Workspace.\"\n            test \"The pricing page mentions G Suit for legacy plans.\" \"The pricing page mentions Google Workspace for legacy plans.\"\n            test \"New customers sign up for Google Workspace.\" \"New customers sign up for Google Workspace.\"\n\n            allows \"This test contains the correct version of Google Workspace and therefore shouldn't error.\"\n            \"#;\n\n        let mut linter = WeirLinter::new(source).unwrap();\n\n        assert_passes_all(&mut linter);\n        assert_eq!(5, linter.count_tests());\n    }\n\n    #[test]\n    fn g_suite_with_refs() {\n        let source = r#\"\n            expr a (G [Suite, Suit])\n            expr b (Google Apps For Work)\n            expr incorrect [@a, @b]\n\n            expr main @incorrect\n            let message \"Use the updated brand.\"\n            let description \"`G Suite` or `Google Apps for Work` is now called `Google Workspace`\"\n            let kind \"Miscellaneous\"\n            let becomes \"Google Workspace\"\n            let strategy \"Exact\"\n\n            test \"We migrated from G Suite last year.\" \"We migrated from Google Workspace last year.\"\n            test \"This account is still labeled as Google Apps for Work.\" \"This account is still labeled as Google Workspace.\"\n            test \"The pricing page mentions G Suit for legacy plans.\" \"The pricing page mentions Google Workspace for legacy plans.\"\n            test \"New customers sign up for Google Workspace.\" \"New customers sign up for Google Workspace.\"\n            \"#;\n\n        let mut linter = WeirLinter::new(source).unwrap();\n\n        assert_passes_all(&mut linter);\n        assert_eq!(4, linter.count_tests());\n    }\n\n    #[test]\n    fn fails_on_unresolved_expr() {\n        let source = r#\"\n            expr main @missing\n            let message \"\"\n            let description \"\"\n            let kind \"Miscellaneous\"\n            let becomes \"\"\n            let strategy \"Exact\"\n        \"#;\n\n        let res = WeirLinter::new(source);\n\n        assert_eq!(\n            res.err().unwrap(),\n            Error::UnableToResolveExpr(\"missing\".to_string())\n        )\n    }\n\n    #[test]\n    fn wildcard() {\n        let source = r#\"\n            expr main <(NOUN * NOUN), (* NOUN), *>\n            let message \"\"\n            let description \"\"\n            let kind \"Miscellaneous\"\n            let becomes \"\"\n            let strategy \"Exact\"\n\n            test \"I like trees and plants of all kinds\" \"I like trees  plants of all kinds\"\n            test \"homework tempts teachers\" \"homework  teachers\"\n            \"#;\n\n        let mut linter = WeirLinter::new(source).unwrap();\n\n        assert_passes_all(&mut linter);\n        assert_eq!(2, linter.count_tests());\n    }\n\n    #[test]\n    fn dashes() {\n        let source = r#\"\n            expr main --\n            let message \"\"\n            let description \"\"\n            let kind \"Miscellaneous\"\n            let becomes \"-\"\n            let strategy \"Exact\"\n\n            test \"This--and--that\" \"This-and-that\"\n\n            allows \"this-and-that\"\n            \"#;\n\n        let mut linter = WeirLinter::new(source).unwrap();\n\n        assert_passes_all(&mut linter);\n        assert_eq!(2, linter.count_tests());\n    }\n\n    #[test]\n    fn fails_on_ignore_test() {\n        let source = r#\"\n            expr main test\n            let message \"\"\n            let description \"\"\n            let kind \"Miscellaneous\"\n            let becomes \"-\"\n            let strategy \"Exact\"\n\n            allows \"test\"\n            \"#;\n\n        let mut linter = WeirLinter::new(source).unwrap();\n\n        assert_eq!(linter.run_tests().len(), 1)\n    }\n\n    #[test]\n    fn errors_properly_with_missing_expr() {\n        let source = \"expr main\";\n        let res = WeirLinter::new(source);\n        assert_eq!(res.err(), Some(Error::ExpectedVariableUndefined))\n    }\n\n    #[quickcheck]\n    fn does_not_panic(s: String) {\n        let _ = WeirLinter::new(s.as_str());\n    }\n}\n"
  },
  {
    "path": "harper-core/src/weir/optimize.rs",
    "content": "use super::ast::{AstExprNode, AstStmtNode};\n\n/// Optimizes the AST to use fewer nodes.\n/// Returns whether an edit was made.\npub fn optimize(stmts: &mut Vec<AstStmtNode>) -> bool {\n    let mut edit = false;\n\n    for stmt in stmts {\n        if let AstStmtNode::SetExpr { value, .. } = stmt\n            && optimize_expr(value)\n        {\n            edit = true;\n        }\n    }\n\n    edit\n}\n\n/// Optimizes the AST of the expression to use fewer nodes.\n/// Returns whether an edit was made.\npub fn optimize_expr(ast: &mut AstExprNode) -> bool {\n    let mut edit = false;\n    match ast {\n        AstExprNode::Not(child) => return optimize_expr(child),\n        AstExprNode::Seq(children) => {\n            if children.len() == 1 {\n                *ast = children.pop().unwrap();\n                edit = true;\n            } else {\n                children.iter_mut().for_each(|child| {\n                    if optimize_expr(child) {\n                        edit = true;\n                    }\n                });\n            }\n        }\n        AstExprNode::Arr(children) => {\n            if children.len() == 1 {\n                *ast = children.pop().unwrap();\n                edit = true;\n            } else if !children.is_empty() && children.iter().all(|n| n.is_upos_set()) {\n                *ast = AstExprNode::UPOSSet(\n                    children\n                        .iter_mut()\n                        .flat_map(|n| n.as_upos_set().unwrap())\n                        .copied()\n                        .collect(),\n                )\n            } else {\n                children.iter_mut().for_each(|child| {\n                    if optimize_expr(child) {\n                        edit = true;\n                    }\n                });\n            }\n        }\n        _ => (),\n    }\n\n    edit\n}\n"
  },
  {
    "path": "harper-core/src/weir/parsing/expr.rs",
    "content": "use std::str::FromStr;\n\nuse harper_brill::UPOS;\n\nuse crate::{CharString, Currency, Punctuation, Token, TokenKind};\n\nuse super::{\n    AstExprNode, Error, FoundNode, lex, locate_matching_brace, optimize_expr, parse_collection,\n};\n\n/// Parse a raw expression string.\npub fn parse_expr_str(weir_code: &str, use_optimizer: bool) -> Result<AstExprNode, Error> {\n    let chars: CharString = weir_code.chars().collect();\n    let tokens = lex(&chars);\n\n    let seq = parse_seq(&tokens, &chars)?;\n    let mut root = AstExprNode::Seq(seq);\n\n    if use_optimizer {\n        while optimize_expr(&mut root) {}\n    }\n\n    Ok(root)\n}\n\n/// Parse a sequence of expressions, one after the other.\npub fn parse_seq(tokens: &[Token], source: &[char]) -> Result<Vec<AstExprNode>, Error> {\n    let mut seq = Vec::new();\n\n    let mut cursor = 0;\n    while let Some(remainder) = tokens.get(cursor..)\n        && !remainder.is_empty()\n    {\n        let res = parse_single_expr(remainder, source)?;\n        seq.push(res.node);\n        cursor += res.next_idx;\n    }\n\n    Ok(seq)\n}\n\n/// Parse an individual expression.\nfn parse_single_expr(tokens: &[Token], source: &[char]) -> Result<FoundNode<AstExprNode>, Error> {\n    let cursor = 0;\n\n    let tok = tokens.get(cursor).ok_or(Error::EndOfInput)?;\n\n    match tok.kind {\n        TokenKind::Space(_) => Ok(FoundNode::new(AstExprNode::Whitespace, 1)),\n        // The expr ref notation\n        TokenKind::Punctuation(Punctuation::At) => {\n            let name_tok = tokens.get(1).ok_or(Error::EndOfInput)?;\n            let name = name_tok.span.get_content(source);\n            Ok(FoundNode::new(AstExprNode::ExprRef(name.into()), 2))\n        }\n        // The derivation notation.\n        TokenKind::Punctuation(Punctuation::Currency(Currency::Dollar)) => {\n            let word_tok = tokens.get(1).ok_or(Error::EndOfInput)?;\n\n            let word = word_tok.span.get_content(source);\n            Ok(FoundNode::new(AstExprNode::DerivativeOf(word.into()), 2))\n        }\n        TokenKind::Punctuation(Punctuation::Star) => {\n            Ok(FoundNode::new(AstExprNode::Anything, 1))\n        }\n        TokenKind::Word(_) => {\n            let text = tok.span.get_content_string(source);\n\n            if let Ok(upos) = UPOS::from_str(&text){\n                Ok(FoundNode::new(\n                    AstExprNode::UPOSSet(vec![upos]),\n                1,\n                ))\n            }else{\n                let node = match text.as_str() {\n                    \"PROG\" => AstExprNode::Progressive,\n                    _ => AstExprNode::Word(text.chars().collect()),\n                };\n\n                Ok(FoundNode::new(\n                        node,\n                1,\n                ))\n            }\n        }\n        ,\n        // The sequence notation. Useful for representing strings.\n        TokenKind::Punctuation(Punctuation::OpenRound) => {\n            let close_idx =\n                locate_matching_brace(tokens, TokenKind::is_open_round, TokenKind::is_close_round)\n                    .ok_or(Error::UnmatchedBrace)?;\n            let child = parse_seq(&tokens[1..close_idx], source)?;\n            Ok(FoundNode::new(AstExprNode::Seq(child), close_idx + 1))\n        }\n        // The _not_ or _unless_ notation\n        TokenKind::Punctuation(Punctuation::Bang) => {\n            let res = parse_single_expr(&tokens[1..], source)?;\n\n            Ok(FoundNode::new(\n                AstExprNode::Not(Box::new(res.node)),\n                res.next_idx + 1,\n            ))\n        }\n        // The array notation\n        TokenKind::Punctuation(Punctuation::OpenSquare) => {\n            let close_idx = locate_matching_brace(\n                tokens,\n                TokenKind::is_open_square,\n                TokenKind::is_close_square,\n            )\n            .ok_or(Error::UnmatchedBrace)?;\n\n            let children = parse_collection(&tokens[1..close_idx], source, parse_single_expr)?;\n\n            Ok(FoundNode::new(AstExprNode::Arr(children), close_idx + 1))\n        }\n        // The filter notation\n        TokenKind::Punctuation(Punctuation::LessThan) => {\n            let close_idx =\n                locate_matching_brace(tokens, TokenKind::is_less_than, TokenKind::is_greater_than)\n                    .ok_or(Error::UnmatchedBrace)?;\n\n            let children = parse_collection(&tokens[1..close_idx], source, parse_single_expr)?;\n\n            Ok(FoundNode::new(AstExprNode::Filter(children), close_idx + 1))\n        }\n\n        TokenKind::Punctuation(p) => Ok(FoundNode::new(AstExprNode::Punctuation(p), 1)),\n        _ => Err(Error::UnsupportedToken(tok.span.get_content_string(source))),\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use harper_brill::UPOS;\n\n    use crate::Punctuation;\n    use crate::char_string::char_string;\n\n    use super::{AstExprNode, parse_expr_str};\n\n    #[test]\n    fn parses_whitespace() {\n        assert_eq!(parse_expr_str(\" \", true).unwrap(), AstExprNode::Whitespace)\n    }\n\n    #[test]\n    fn parses_word() {\n        assert_eq!(\n            parse_expr_str(\"word\", true).unwrap(),\n            AstExprNode::Word(char_string!(\"word\"))\n        )\n    }\n\n    #[test]\n    fn parses_word_space() {\n        assert_eq!(\n            parse_expr_str(\"word \", true).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::Word(char_string!(\"word\")),\n                AstExprNode::Whitespace\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_word_space_word() {\n        assert_eq!(\n            parse_expr_str(\"word word\", true).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::Word(char_string!(\"word\")),\n                AstExprNode::Whitespace,\n                AstExprNode::Word(char_string!(\"word\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_simple_seq() {\n        assert_eq!(\n            parse_expr_str(\"a (b c) d\", false).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Whitespace,\n                AstExprNode::Seq(vec![\n                    AstExprNode::Word(char_string!(\"b\")),\n                    AstExprNode::Whitespace,\n                    AstExprNode::Word(char_string!(\"c\")),\n                ]),\n                AstExprNode::Whitespace,\n                AstExprNode::Word(char_string!(\"d\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_nested_seqs() {\n        assert_eq!(\n            parse_expr_str(\"a (b (c)) d\", false).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Whitespace,\n                AstExprNode::Seq(vec![\n                    AstExprNode::Word(char_string!(\"b\")),\n                    AstExprNode::Whitespace,\n                    AstExprNode::Seq(vec![AstExprNode::Word(char_string!(\"c\")),]),\n                ]),\n                AstExprNode::Whitespace,\n                AstExprNode::Word(char_string!(\"d\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_paired_seqs() {\n        assert_eq!(\n            parse_expr_str(\"a (b) (c) d\", false).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Whitespace,\n                AstExprNode::Seq(vec![AstExprNode::Word(char_string!(\"b\")),]),\n                AstExprNode::Whitespace,\n                AstExprNode::Seq(vec![AstExprNode::Word(char_string!(\"c\")),]),\n                AstExprNode::Whitespace,\n                AstExprNode::Word(char_string!(\"d\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_not() {\n        assert_eq!(\n            parse_expr_str(\"a !b c\", false).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Whitespace,\n                AstExprNode::Not(Box::new(AstExprNode::Word(char_string!(\"b\")))),\n                AstExprNode::Whitespace,\n                AstExprNode::Word(char_string!(\"c\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_not_seq() {\n        assert_eq!(\n            parse_expr_str(\"a !(b c) d\", false).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Whitespace,\n                AstExprNode::Not(Box::new(AstExprNode::Seq(vec![\n                    AstExprNode::Word(char_string!(\"b\")),\n                    AstExprNode::Whitespace,\n                    AstExprNode::Word(char_string!(\"c\")),\n                ]),)),\n                AstExprNode::Whitespace,\n                AstExprNode::Word(char_string!(\"d\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_empty_array() {\n        assert_eq!(\n            parse_expr_str(\"[]\", true).unwrap(),\n            AstExprNode::Arr(vec![])\n        )\n    }\n\n    #[test]\n    fn parses_single_element_array() {\n        assert_eq!(\n            parse_expr_str(\"[a]\", false).unwrap(),\n            AstExprNode::Seq(vec![AstExprNode::Arr(vec![AstExprNode::Word(\n                char_string!(\"a\")\n            )])])\n        )\n    }\n\n    #[test]\n    fn optimizer_deconstructs_single_element_array() {\n        assert_eq!(\n            parse_expr_str(\"[a]\", true).unwrap(),\n            AstExprNode::Word(char_string!(\"a\"))\n        )\n    }\n\n    #[test]\n    fn optimizer_deconstructs_single_element_seq() {\n        assert_eq!(\n            parse_expr_str(\"(a)\", true).unwrap(),\n            AstExprNode::Word(char_string!(\"a\"))\n        )\n    }\n\n    #[test]\n    fn parses_double_element_array() {\n        assert_eq!(\n            parse_expr_str(\"[a, b]\", true).unwrap(),\n            AstExprNode::Arr(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Word(char_string!(\"b\"))\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_triple_element_array() {\n        assert_eq!(\n            parse_expr_str(\"[a, b, c]\", true).unwrap(),\n            AstExprNode::Arr(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Word(char_string!(\"b\")),\n                AstExprNode::Word(char_string!(\"c\"))\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_not_triple_element_array() {\n        assert_eq!(\n            parse_expr_str(\"![a, b, c]\", true).unwrap(),\n            AstExprNode::Not(Box::new(AstExprNode::Arr(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Word(char_string!(\"b\")),\n                AstExprNode::Word(char_string!(\"c\"))\n            ])))\n        )\n    }\n\n    #[test]\n    fn parses_triple_dot() {\n        assert_eq!(\n            parse_expr_str(\"...\", false).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::Punctuation(Punctuation::Period),\n                AstExprNode::Punctuation(Punctuation::Period),\n                AstExprNode::Punctuation(Punctuation::Period),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_space_comma() {\n        assert_eq!(\n            parse_expr_str(\"[( ), (,)]\", true).unwrap(),\n            AstExprNode::Arr(vec![\n                AstExprNode::Whitespace,\n                AstExprNode::Punctuation(Punctuation::Comma),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_space_dash() {\n        assert_eq!(\n            parse_expr_str(\"[( ), (-)]\", true).unwrap(),\n            AstExprNode::Arr(vec![\n                AstExprNode::Whitespace,\n                AstExprNode::Punctuation(Punctuation::Hyphen),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_filter() {\n        assert_eq!(\n            parse_expr_str(\"<a, b, c>\", true).unwrap(),\n            AstExprNode::Filter(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Word(char_string!(\"b\")),\n                AstExprNode::Word(char_string!(\"c\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_filter_with_space_prefixing_element() {\n        assert_eq!(\n            parse_expr_str(\"< a, b, c>\", true).unwrap(),\n            AstExprNode::Filter(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Word(char_string!(\"b\")),\n                AstExprNode::Word(char_string!(\"c\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_filter_with_space_postfixing_element() {\n        assert_eq!(\n            parse_expr_str(\"<a, b, c >\", true).unwrap(),\n            AstExprNode::Filter(vec![\n                AstExprNode::Word(char_string!(\"a\")),\n                AstExprNode::Word(char_string!(\"b\")),\n                AstExprNode::Word(char_string!(\"c\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_derivative() {\n        assert_eq!(\n            parse_expr_str(\"$word\", true).unwrap(),\n            AstExprNode::DerivativeOf(char_string!(\"word\"))\n        )\n    }\n\n    #[test]\n    fn parses_derivative_seq() {\n        assert_eq!(\n            parse_expr_str(\"$a $b $c\", true).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::DerivativeOf(char_string!(\"a\")),\n                AstExprNode::Whitespace,\n                AstExprNode::DerivativeOf(char_string!(\"b\")),\n                AstExprNode::Whitespace,\n                AstExprNode::DerivativeOf(char_string!(\"c\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_contraction() {\n        assert_eq!(\n            parse_expr_str(\"don't do this\", true).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::Word(char_string!(\"don't\")),\n                AstExprNode::Whitespace,\n                AstExprNode::Word(char_string!(\"do\")),\n                AstExprNode::Whitespace,\n                AstExprNode::Word(char_string!(\"this\")),\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_upos() {\n        assert_eq!(\n            parse_expr_str(\"PROPN NOUN VERB\", false).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::UPOSSet(vec![UPOS::PROPN]),\n                AstExprNode::Whitespace,\n                AstExprNode::UPOSSet(vec![UPOS::NOUN]),\n                AstExprNode::Whitespace,\n                AstExprNode::UPOSSet(vec![UPOS::VERB]),\n            ])\n        )\n    }\n\n    #[test]\n    fn optimizes_upos_set() {\n        assert_eq!(\n            parse_expr_str(\"[PROPN, NOUN, VERB]\", true).unwrap(),\n            AstExprNode::UPOSSet(vec![UPOS::PROPN, UPOS::NOUN, UPOS::VERB]),\n        )\n    }\n\n    #[test]\n    fn parses_prog() {\n        assert_eq!(\n            parse_expr_str(\"PROG\", true).unwrap(),\n            AstExprNode::Progressive\n        )\n    }\n\n    #[test]\n    fn parses_expr_ref() {\n        assert_eq!(\n            parse_expr_str(\"@test\", true).unwrap(),\n            AstExprNode::ExprRef(char_string!(\"test\"))\n        )\n    }\n\n    #[test]\n    fn parses_expr_ref_array() {\n        assert_eq!(\n            parse_expr_str(\"[@a, @b, @c]\", true).unwrap(),\n            AstExprNode::Arr(vec![\n                AstExprNode::ExprRef(char_string!(\"a\")),\n                AstExprNode::ExprRef(char_string!(\"b\")),\n                AstExprNode::ExprRef(char_string!(\"c\"))\n            ])\n        )\n    }\n\n    #[test]\n    fn parses_anything() {\n        assert_eq!(parse_expr_str(\"*\", true).unwrap(), AstExprNode::Anything)\n    }\n\n    #[test]\n    fn parses_anything_seq() {\n        assert_eq!(\n            parse_expr_str(\"* * *\", true).unwrap(),\n            AstExprNode::Seq(vec![\n                AstExprNode::Anything,\n                AstExprNode::Whitespace,\n                AstExprNode::Anything,\n                AstExprNode::Whitespace,\n                AstExprNode::Anything,\n            ])\n        )\n    }\n}\n"
  },
  {
    "path": "harper-core/src/weir/parsing/mod.rs",
    "content": "mod expr;\nmod stmt;\n\nuse super::Error;\nuse ast::{Ast, AstExprNode, AstStmtNode};\n\npub use expr::parse_expr_str;\npub use stmt::parse_str;\n\nuse crate::lexing::{lex_weir_token, lex_with};\nuse crate::{Token, TokenKind};\n\nuse super::{\n    ast,\n    optimize::{optimize, optimize_expr},\n};\n\n/// Lex the entirety of a Weir document.\nfn lex(source: &[char]) -> Vec<Token> {\n    lex_with(source, lex_weir_token)\n}\n\n#[derive(Debug)]\nstruct FoundNode<T> {\n    /// The parsed node found.\n    node: T,\n    /// The next token to be read.\n    next_idx: usize,\n}\n\nimpl<T> FoundNode<T> {\n    pub fn new(node: T, next_idx: usize) -> Self {\n        Self { node, next_idx }\n    }\n}\n\n/// A utility for parsing a collection of items, separated by commas.\n/// Requires a parser used for parsing individual elements.\nfn parse_collection<T>(\n    tokens: &[Token],\n    source: &[char],\n    el_parser: impl Fn(&[Token], &[char]) -> Result<FoundNode<T>, Error>,\n) -> Result<Vec<T>, Error> {\n    let mut children = Vec::new();\n\n    let mut cursor = 0;\n\n    while cursor < tokens.len() {\n        while tokens[cursor].kind.is_space() {\n            cursor += 1;\n        }\n\n        let new_child = el_parser(&tokens[cursor..], source)?;\n        children.push(new_child.node);\n\n        cursor += new_child.next_idx;\n\n        while cursor != tokens.len() && tokens[cursor].kind.is_space() {\n            cursor += 1;\n        }\n\n        if cursor != tokens.len() && !tokens[cursor].kind.is_comma() {\n            return Err(Error::ExpectedComma);\n        }\n\n        cursor += 1;\n\n        if cursor < tokens.len() && tokens[cursor].kind.is_space() {\n            cursor += 1;\n        }\n    }\n\n    Ok(children)\n}\n\n/// Locates the closing brace for the token at index zero.\nfn locate_matching_brace(\n    tokens: &[Token],\n    is_open: impl Fn(&TokenKind) -> bool,\n    is_close: impl Fn(&TokenKind) -> bool,\n) -> Option<usize> {\n    // Locate closing brace\n    let mut visited_opens = 0;\n    let mut cursor = 1;\n\n    inc_by_spaces(&mut cursor, tokens);\n\n    loop {\n        let cur = tokens.get(cursor)?;\n\n        if is_open(&cur.kind) {\n            visited_opens += 1;\n        } else if is_close(&cur.kind) {\n            if visited_opens == 0 {\n                return Some(cursor);\n            } else {\n                visited_opens -= 1;\n            }\n        }\n\n        cursor += 1;\n    }\n}\n\n/// Increments the cursor until it is no longer over a space.\nfn inc_by_spaces(cursor: &mut usize, tokens: &[Token]) {\n    // Skip whitespace at the beginning.\n    while matches!(\n        tokens.get(*cursor).map(|t| &t.kind),\n        Some(&TokenKind::Space(..))\n    ) {\n        *cursor += 1;\n    }\n}\n\n/// Increments the cursor until it is no longer over whitespace.\nfn inc_by_whitespace(cursor: &mut usize, tokens: &[Token]) {\n    // Skip whitespace at the beginning.\n    while tokens\n        .get(*cursor)\n        .map(|t| &t.kind)\n        .is_some_and(|t| t.is_whitespace())\n    {\n        *cursor += 1;\n    }\n}\n\n/// Asserts that a space is expected in the location of the cursor.\n/// Returns the proper arrow type that can be handled with the `?` syntax.\nfn expected_space(cursor: usize, tokens: &[Token], source: &[char]) -> Result<(), Error> {\n    let expected_space = &tokens[cursor];\n\n    if !expected_space.kind.is_space() {\n        return Err(Error::UnexpectedToken(\n            expected_space.span.get_content_string(source),\n        ));\n    }\n\n    Ok(())\n}\n"
  },
  {
    "path": "harper-core/src/weir/parsing/stmt.rs",
    "content": "use std::num::NonZeroUsize;\nuse std::sync::{Arc, LazyLock, RwLock};\n\nuse lru::LruCache;\n\nuse super::ast::AstVariable;\nuse super::inc_by_spaces;\nuse crate::{CharStringExt, Punctuation, Token, TokenKind, TokenStringExt};\n\nuse super::expr::parse_seq;\nuse super::{\n    Ast, AstExprNode, AstStmtNode, Error, FoundNode, expected_space, inc_by_whitespace, lex,\n    locate_matching_brace, optimize, parse_collection,\n};\n\n/// Parse the provided string using caching to speed up repeated requests.\n///\n/// Will return the cached AST if the provided code has previously been cached. Otherwise, it will\n/// parse the code and cache the resulting AST.\npub fn parse_str(weir_code: &str, use_optimizer: bool) -> Result<Arc<Ast>, Error> {\n    // The parameters that might influence the generated AST.\n    // This is used as the key for the cache hashmap.\n    type ParseStrParams = (Arc<String>, bool);\n\n    static PARSE_CACHE: LazyLock<\n        RwLock<LruCache<ParseStrParams, Arc<Ast>, hashbrown::DefaultHashBuilder>>,\n    > = LazyLock::new(|| RwLock::new(LruCache::new(NonZeroUsize::new(10000).unwrap())));\n\n    let weir_code = Arc::new(weir_code.to_owned());\n\n    Ok(\n        if let Some(cached) = PARSE_CACHE\n            .read()\n            .unwrap()\n            .peek(&(weir_code.clone(), use_optimizer))\n        {\n            cached.clone()\n        } else {\n            let chars: Vec<char> = weir_code.chars().collect();\n            let tokens = lex(&chars);\n\n            let mut stmts = parse_stmt_list(&tokens, &chars)?;\n\n            if use_optimizer {\n                while optimize(&mut stmts) {}\n            }\n\n            let ast = Arc::new(Ast { stmts });\n\n            PARSE_CACHE\n                .write()\n                .unwrap()\n                .put((weir_code, use_optimizer), ast.clone());\n\n            ast\n        },\n    )\n}\n\nfn parse_stmt_list(tokens: &[Token], source: &[char]) -> Result<Vec<AstStmtNode>, Error> {\n    let mut list = Vec::new();\n\n    let mut cursor = 0;\n    while let Some(remainder) = tokens.get(cursor..)\n        && !remainder.is_empty()\n    {\n        let res = parse_stmt(remainder, source)?;\n        if let Some(node) = res.node {\n            list.push(node);\n        }\n        cursor += res.next_idx;\n    }\n    Ok(list)\n}\n\nfn parse_stmt(tokens: &[Token], source: &[char]) -> Result<FoundNode<Option<AstStmtNode>>, Error> {\n    let mut cursor = 0;\n    inc_by_whitespace(&mut cursor, tokens);\n\n    let end = tokens\n        .iter()\n        .enumerate()\n        .skip(cursor)\n        .find_map(|(i, t)| t.kind.is_newline().then_some(i))\n        .unwrap_or(tokens.len());\n\n    let Some(key_token) = tokens.get(cursor) else {\n        return Ok(FoundNode {\n            node: None,\n            next_idx: cursor + 1,\n        });\n    };\n\n    match key_token.kind {\n        TokenKind::Punctuation(Punctuation::Hash) => {\n            let comment = tokens[cursor..end]\n                .span()\n                .unwrap()\n                .get_content_string(source);\n            Ok(FoundNode::new(Some(AstStmtNode::Comment(comment)), end + 1))\n        }\n        TokenKind::Word(_) => {\n            let word_literal = key_token.span.get_content(source);\n\n            match word_literal {\n                ['l', 'e', 't'] => {\n                    expected_space(cursor + 1, tokens, source)?;\n                    let name = tokens[cursor + 2].span.get_content_string(source);\n                    expected_space(cursor + 3, tokens, source)?;\n\n                    let str_res = parse_quoted_string(&tokens[cursor + 4..end], source);\n\n                    if let Ok(str_contents) = str_res {\n                        if tokens[str_contents.next_idx + cursor + 4..end]\n                            .iter()\n                            .any(|t| !t.kind.is_space())\n                        {\n                            return Err(Error::UnexpectedToken(\n                                tokens[str_contents.next_idx + cursor + 4]\n                                    .span\n                                    .get_content_string(source),\n                            ));\n                        }\n\n                        Ok(FoundNode::new(\n                            Some(AstStmtNode::create_declare_variable(\n                                name,\n                                AstVariable::String(str_contents.node),\n                            )),\n                            end + 1,\n                        ))\n                    } else {\n                        let open_brac_tok = &tokens[cursor + 4];\n                        if !open_brac_tok.kind.is_open_square() {\n                            return Err(Error::UnexpectedToken(\n                                open_brac_tok.span.get_content_string(source),\n                            ));\n                        }\n\n                        let matching = locate_matching_brace(\n                            &tokens[cursor + 4..end],\n                            TokenKind::is_open_square,\n                            TokenKind::is_close_square,\n                        )\n                        .ok_or(Error::UnmatchedBrace)?\n                            + cursor\n                            + 4;\n\n                        let elements = parse_collection(\n                            &tokens[cursor + 5..matching],\n                            source,\n                            parse_quoted_string,\n                        )?;\n\n                        Ok(FoundNode::new(\n                            Some(AstStmtNode::create_declare_variable(\n                                name,\n                                AstVariable::Array(\n                                    elements.into_iter().map(AstVariable::String).collect(),\n                                ),\n                            )),\n                            end + 1,\n                        ))\n                    }\n                }\n                ['e', 'x', 'p', 'r'] => {\n                    expected_space(cursor + 1, tokens, source)?;\n\n                    Ok(FoundNode::new(\n                        Some(AstStmtNode::create_set_expr(\n                            tokens[cursor + 2].span.get_content_string(source),\n                            AstExprNode::Seq(parse_seq(\n                                &tokens[(cursor + 4).min(end)..end],\n                                source,\n                            )?),\n                        )),\n                        end + 1,\n                    ))\n                }\n                ['a', 'l', 'l', 'o', 'w', 's'] => {\n                    let case = parse_quoted_string(&tokens[cursor + 1..], source)?;\n                    cursor += 1 + case.next_idx;\n\n                    if cursor != end {\n                        return Err(Error::UnexpectedToken(\n                            tokens[cursor].span.get_content_string(source),\n                        ));\n                    }\n\n                    Ok(FoundNode::new(\n                        Some(AstStmtNode::create_allow_test(case.node)),\n                        end + 1,\n                    ))\n                }\n                ['t', 'e', 's', 't'] => {\n                    let case = parse_quoted_string(&tokens[cursor + 1..], source)?;\n                    cursor += 1 + case.next_idx;\n\n                    expected_space(cursor, tokens, source)?;\n\n                    let sol = parse_quoted_string(&tokens[cursor + 1..], source)?;\n                    cursor += 1 + sol.next_idx;\n\n                    if cursor != end {\n                        return Err(Error::UnexpectedToken(\n                            tokens[cursor].span.get_content_string(source),\n                        ));\n                    }\n\n                    Ok(FoundNode::new(\n                        Some(AstStmtNode::create_test(case.node, sol.node)),\n                        end + 1,\n                    ))\n                }\n                _ => Err(Error::UnexpectedToken(word_literal.to_string())),\n            }\n        }\n        _ => Err(Error::UnsupportedToken(\n            key_token.span.get_content_string(source),\n        )),\n    }\n}\n\nfn parse_quoted_string(tokens: &[Token], source: &[char]) -> Result<FoundNode<String>, Error> {\n    fn is_escaped(pos: usize, source: &[char]) -> bool {\n        if pos == 0 {\n            return false;\n        }\n        let mut i = pos;\n        let mut n = 0;\n        while i > 0 && source[i - 1] == '\\\\' {\n            n += 1;\n            i -= 1;\n        }\n        n % 2 == 1\n    }\n\n    let mut cursor = 0;\n\n    inc_by_spaces(&mut cursor, tokens);\n\n    let quote_tok = tokens.get(cursor).ok_or(Error::EndOfInput)?;\n    if !quote_tok.kind.is_quote() {\n        return Err(Error::UnexpectedToken(\n            quote_tok.span.get_content_string(source),\n        ));\n    }\n\n    let mut end = None;\n    for (i, tok) in tokens.iter().enumerate().skip(cursor + 1) {\n        if tok.kind.is_quote() {\n            let qpos = tok.span.start;\n            if !is_escaped(qpos, source) {\n                end = Some(i);\n                break;\n            }\n        }\n    }\n\n    let end = end.ok_or(Error::EndOfInput)?;\n\n    Ok(FoundNode {\n        node: tokens[cursor + 1..end]\n            .span()\n            .unwrap_or_default()\n            .get_content_string(source),\n        next_idx: end + 1,\n    })\n}\n\n#[cfg(test)]\nmod tests {\n    use quickcheck_macros::quickcheck;\n\n    use crate::char_string::char_string;\n\n    use super::{AstExprNode, AstStmtNode, AstVariable, parse_str};\n\n    #[test]\n    fn parses_single_var_stmt() {\n        let ast = parse_str(\"let test \\\"to be this\\\"\", true).unwrap();\n\n        assert_eq!(\n            ast.stmts,\n            vec![AstStmtNode::create_declare_variable(\n                \"test\",\n                AstVariable::create_string(\"to be this\")\n            ),]\n        );\n        assert_eq!(\n            ast.get_variable_value(\"test\"),\n            Some(&AstVariable::create_string(\"to be this\"))\n        );\n    }\n\n    #[test]\n    fn parses_single_var_stmt_with_lots_of_space() {\n        let ast = parse_str(\"let            test \\\"to be this\\\"\", true).unwrap();\n\n        assert_eq!(\n            ast.stmts,\n            vec![AstStmtNode::create_declare_variable(\n                \"test\",\n                AstVariable::create_string(\"to be this\")\n            ),]\n        );\n        assert_eq!(\n            ast.get_variable_value(\"test\"),\n            Some(&AstVariable::create_string(\"to be this\"))\n        );\n    }\n\n    #[test]\n    fn parses_single_var_stmt_array() {\n        let ast = parse_str(\"let test [\\\"to be this\\\", \\\"and this\\\"]\", true).unwrap();\n\n        let correct_var_val = AstVariable::Array(vec![\n            AstVariable::create_string(\"to be this\"),\n            AstVariable::create_string(\"and this\"),\n        ]);\n\n        assert_eq!(ast.get_variable_value(\"test\"), Some(&correct_var_val));\n        assert_eq!(\n            ast.stmts,\n            vec![AstStmtNode::create_declare_variable(\n                \"test\",\n                correct_var_val\n            ),]\n        );\n    }\n\n    #[test]\n    fn parses_single_expr_stmt() {\n        assert_eq!(\n            parse_str(\"expr main word\", true).unwrap().stmts,\n            vec![AstStmtNode::create_set_expr(\n                \"main\",\n                AstExprNode::Word(char_string!(\"word\"))\n            )]\n        )\n    }\n\n    #[test]\n    fn parses_single_comment_stmt() {\n        assert_eq!(\n            parse_str(\"# this is a comment\", true).unwrap().stmts,\n            vec![AstStmtNode::Comment(\"# this is a comment\".to_string())]\n        )\n    }\n\n    #[test]\n    fn parses_single_comment_stmt_with_space_prefix() {\n        assert_eq!(\n            parse_str(\"    # this is a comment\", true).unwrap().stmts,\n            vec![AstStmtNode::Comment(\"# this is a comment\".to_string())]\n        )\n    }\n\n    #[test]\n    fn parses_tests() {\n        assert_eq!(\n            parse_str(\"test \\\"this is the case\\\" \\\"this is the solution\\\"\", true)\n                .unwrap()\n                .stmts,\n            vec![AstStmtNode::create_test(\n                \"this is the case\",\n                \"this is the solution\"\n            )]\n        )\n    }\n\n    #[test]\n    fn parses_multiple_spaces_in_tests() {\n        assert_eq!(\n            parse_str(\n                \"test \\\"this is the case\\\"           \\\"this is the solution\\\"\",\n                true\n            )\n            .unwrap()\n            .stmts,\n            vec![AstStmtNode::create_test(\n                \"this is the case\",\n                \"this is the solution\"\n            )]\n        )\n    }\n\n    #[test]\n    fn parses_allows() {\n        assert_eq!(\n            parse_str(\"allows \\\"this is the case\\\"\", true)\n                .unwrap()\n                .stmts,\n            vec![AstStmtNode::create_allow_test(\"this is the case\",)]\n        )\n    }\n\n    #[test]\n    fn parses_comment_expr_var_together() {\n        let ast = parse_str(\n            \"let test \\\"to be this\\\"\\nexpr main word\\n# this is a comment\",\n            true,\n        )\n        .unwrap();\n\n        assert_eq!(\n            ast.stmts,\n            vec![\n                AstStmtNode::create_declare_variable(\n                    \"test\",\n                    AstVariable::create_string(\"to be this\")\n                ),\n                AstStmtNode::create_set_expr(\"main\", AstExprNode::Word(char_string!(\"word\"))),\n                AstStmtNode::Comment(\"# this is a comment\".to_string())\n            ]\n        );\n\n        assert_eq!(\n            ast.get_variable_value(\"test\"),\n            Some(&AstVariable::create_string(\"to be this\"))\n        );\n        assert_eq!(\n            ast.get_expr(\"main\"),\n            Some(&AstExprNode::Word(char_string!(\"word\")))\n        );\n    }\n\n    #[test]\n    fn parses_comment_in_middle() {\n        let ast = parse_str(\n            \"let test \\\"to be this\\\"\\n# this is a comment\\nexpr main word\",\n            true,\n        )\n        .unwrap();\n\n        assert_eq!(\n            ast.stmts,\n            vec![\n                AstStmtNode::create_declare_variable(\n                    \"test\",\n                    AstVariable::create_string(\"to be this\")\n                ),\n                AstStmtNode::Comment(\"# this is a comment\".to_string()),\n                AstStmtNode::create_set_expr(\"main\", AstExprNode::Word(char_string!(\"word\")))\n            ]\n        );\n\n        assert_eq!(\n            ast.get_variable_value(\"test\"),\n            Some(&AstVariable::create_string(\"to be this\"))\n        );\n        assert_eq!(\n            ast.get_expr(\"main\"),\n            Some(&AstExprNode::Word(char_string!(\"word\")))\n        );\n    }\n\n    #[test]\n    #[should_panic]\n    fn catches_non_whitespace_after_expr() {\n        parse_str(\"expr+this is a test\", false).unwrap();\n    }\n\n    #[test]\n    #[should_panic]\n    fn catches_non_whitespace_after_test() {\n        parse_str(\"test+\\\"\\\" \\\"\\\"\", false).unwrap();\n    }\n\n    #[test]\n    #[should_panic]\n    fn catches_non_whitespace_between_test() {\n        parse_str(\"test \\\"\\\"+\\\"\\\"\", false).unwrap();\n    }\n\n    #[test]\n    #[should_panic]\n    fn catches_non_whitespace_after_let() {\n        parse_str(\"let+var \\\"\\\"\", false).unwrap();\n    }\n\n    #[test]\n    #[should_panic]\n    fn catches_non_whitespace_after_let_var() {\n        parse_str(\"let var+\\\"\\\"\", false).unwrap();\n    }\n\n    #[test]\n    #[should_panic]\n    fn catches_non_whitespace_after_allows() {\n        parse_str(\"allows+\\\"\\\"\", false).unwrap();\n    }\n\n    #[quickcheck]\n    fn catches_anything_after_test(a: String) {\n        if !a.is_empty() && !a.starts_with('\\n') {\n            let code = format!(\"test \\\"\\\" \\\"\\\"{a}\");\n            assert!(parse_str(code.as_str(), false).is_err())\n        }\n    }\n\n    #[quickcheck]\n    fn catches_anything_after_allows(a: String) {\n        if !a.is_empty() && !a.starts_with('\\n') {\n            let code = format!(\"allows \\\"\\\" {a}\");\n            assert!(parse_str(code.as_str(), false).is_err())\n        }\n    }\n}\n"
  },
  {
    "path": "harper-core/src/weirpack/error.rs",
    "content": "use thiserror::Error;\n\n#[derive(Debug, Error)]\npub enum Error {\n    #[error(\"IO error: {0}\")]\n    Io(#[from] std::io::Error),\n    #[error(\"Zip error: {0}\")]\n    Zip(#[from] zip::result::ZipError),\n    #[error(\"JSON error: {0}\")]\n    Json(#[from] serde_json::Error),\n    #[error(\"Weir error: {0}\")]\n    Weir(#[from] crate::weir::Error),\n    #[error(\"Missing manifest file '{0}'.\")]\n    MissingManifest(&'static str),\n    #[error(\"Manifest field '{0}' is missing.\")]\n    MissingManifestField(&'static str),\n    #[error(\"Manifest field '{0}' must be a string.\")]\n    InvalidManifestFieldType(&'static str),\n    #[error(\"Duplicate manifest file '{0}'.\")]\n    DuplicateManifest(&'static str),\n    #[error(\"Invalid rule filename '{0}'.\")]\n    InvalidRuleFileName(String),\n}\n"
  },
  {
    "path": "harper-core/src/weirpack/manifest.rs",
    "content": "use std::io::{Read, Write};\n\nuse hashbrown::HashMap;\nuse paste::paste;\nuse serde_json::Value;\n\nuse super::Error;\n\n#[derive(Debug, Clone, Default)]\npub struct WeirpackManifest {\n    data: HashMap<String, Value>,\n}\n\nmacro_rules! gen_fns {\n    ($field:ident) => {\n        paste! {\n            #[doc = concat!(\"Get the \", stringify!($field), \" field from the manifest.\")]\n            pub fn $field(&self) -> Result<&str, Error>{\n                self.required_str(stringify!($field))\n            }\n\n            #[doc = concat!(\"Set the \", stringify!($field), \" field in the manifest.\")]\n            pub fn [< set_ $field >](&mut self, value: impl Into<String>) {\n                self.set_field(stringify!($field), Value::String(value.into()));\n            }\n        }\n    };\n}\n\nimpl WeirpackManifest {\n    /// Create a new, empty manifest.\n    /// Note that an empty manifest is an invalid manifest.\n    pub fn new() -> Self {\n        Self::default()\n    }\n\n    /// Load a manifest from some bytes.\n    pub fn from_reader(reader: impl Read) -> Result<Self, Error> {\n        let data: HashMap<String, Value> = serde_json::from_reader(reader)?;\n        let manifest = Self { data };\n        manifest.validate_required()?;\n        Ok(manifest)\n    }\n\n    /// Write a manifest to some bytes.\n    pub fn write_to(&self, writer: impl Write) -> Result<(), Error> {\n        self.validate_required()?;\n        serde_json::to_writer_pretty(writer, &self.data)?;\n        Ok(())\n    }\n\n    /// Get an arbitrary field from the manifest.\n    pub fn get_field(&self, key: &str) -> Option<&Value> {\n        self.data.get(key)\n    }\n\n    /// Set an arbitrary field from the manifest.\n    pub fn set_field(&mut self, key: impl Into<String>, value: Value) {\n        self.data.insert(key.into(), value);\n    }\n\n    gen_fns!(author);\n    gen_fns!(version);\n    gen_fns!(description);\n    gen_fns!(license);\n\n    fn required_str(&self, key: &'static str) -> Result<&str, Error> {\n        match self.data.get(key) {\n            Some(Value::String(value)) => Ok(value),\n            Some(_) => Err(Error::InvalidManifestFieldType(key)),\n            None => Err(Error::MissingManifestField(key)),\n        }\n    }\n\n    fn validate_required(&self) -> Result<(), Error> {\n        self.author()?;\n        self.version()?;\n        self.description()?;\n        self.license()?;\n        Ok(())\n    }\n}\n"
  },
  {
    "path": "harper-core/src/weirpack/mod.rs",
    "content": "//! See [our main documentation](https://writewithharper.com/docs/weir#Weirpacks) on Weir and the Weirpack format.\n\nuse std::io::{Read, Write};\nuse std::path::Path;\n\nuse hashbrown::HashMap;\nuse zip::write::FileOptions;\nuse zip::{CompressionMethod, ZipArchive, ZipWriter};\n\nuse crate::linting::LintGroup;\nuse crate::weir::{TestResult, WeirLinter};\n\nmod error;\nmod manifest;\n\npub use error::Error;\npub use manifest::WeirpackManifest;\n\n/// A Weirpack, which carries within itself one or more rules to be used for grammar checking.\n/// These rules are written in Weir.\n#[derive(Debug, Clone, Default)]\npub struct Weirpack {\n    pub rules: HashMap<String, String>,\n    pub manifest: WeirpackManifest,\n}\n\nimpl Weirpack {\n    /// Create an empty Weirpack.\n    pub fn new(manifest: WeirpackManifest) -> Self {\n        Self {\n            rules: HashMap::new(),\n            manifest,\n        }\n    }\n\n    /// Add a rule to this Weirpack. Does not compile to test the rule.\n    pub fn add_rule(&mut self, name: impl Into<String>, rule: impl Into<String>) -> Option<String> {\n        self.rules.insert(name.into(), rule.into())\n    }\n\n    /// Remove a rule from this Weirpack.\n    pub fn remove_rule(&mut self, name: &str) -> Option<String> {\n        self.rules.remove(name)\n    }\n\n    /// Run all the tests within all the Weir rules in this Weirpack.\n    pub fn run_tests(&self) -> Result<HashMap<String, Vec<TestResult>>, Error> {\n        let mut failures = HashMap::new();\n\n        for (name, rule) in &self.rules {\n            let mut linter = WeirLinter::new(rule)?;\n            let failing_tests = linter.run_tests();\n            if !failing_tests.is_empty() {\n                failures.insert(name.to_string(), failing_tests);\n            }\n        }\n\n        Ok(failures)\n    }\n\n    /// Parse and optimize the Weir rules in the pack, converting the set into a single [`LintGroup`].\n    /// Does not run tests.\n    pub fn to_lint_group(&self) -> Result<LintGroup, Error> {\n        let mut group = LintGroup::default();\n\n        for (name, rule) in &self.rules {\n            let linter = WeirLinter::new(rule)?;\n            group.add_chunk_expr_linter(name, linter);\n            group.config.set_rule_enabled(name, true);\n        }\n\n        Ok(group)\n    }\n\n    /// Load a Weirpack from bytes.\n    pub fn from_reader(mut reader: impl Read) -> Result<Self, Error> {\n        let mut bytes = Vec::new();\n        reader.read_to_end(&mut bytes)?;\n        Self::from_bytes(&bytes)\n    }\n\n    /// Write the Weirpack to bytes.\n    pub fn write_to(&self, mut writer: impl Write) -> Result<(), Error> {\n        let bytes = self.to_bytes()?;\n        writer.write_all(&bytes)?;\n        Ok(())\n    }\n\n    /// Load a Weirpack from bytes.\n    pub fn from_bytes(bytes: &[u8]) -> Result<Self, Error> {\n        let cursor = std::io::Cursor::new(bytes);\n        let mut archive = ZipArchive::new(cursor)?;\n\n        let mut manifest = None;\n        let mut rules = HashMap::new();\n\n        for i in 0..archive.len() {\n            let mut file = archive.by_index(i)?;\n            if file.is_dir() {\n                continue;\n            }\n\n            let name = file.name().to_string();\n            if name == \"manifest.json\" {\n                if manifest.is_some() {\n                    return Err(Error::DuplicateManifest(\"manifest.json\"));\n                }\n                let manifest_data = WeirpackManifest::from_reader(&mut file)?;\n                manifest = Some(manifest_data);\n                continue;\n            }\n\n            if !name.ends_with(\".weir\") {\n                continue;\n            }\n\n            let path = Path::new(&name);\n            let file_name = path\n                .file_name()\n                .and_then(|segment| segment.to_str())\n                .ok_or_else(|| Error::InvalidRuleFileName(name.clone()))?;\n            let rule_name = Path::new(file_name)\n                .file_stem()\n                .and_then(|stem| stem.to_str())\n                .ok_or_else(|| Error::InvalidRuleFileName(name.clone()))?;\n\n            let mut contents = String::new();\n            file.read_to_string(&mut contents)?;\n            rules.insert(rule_name.to_string(), contents);\n        }\n\n        let manifest = manifest.ok_or(Error::MissingManifest(\"manifest.json\"))?;\n\n        Ok(Self { rules, manifest })\n    }\n\n    /// Write a Weirpack into bytes.\n    pub fn to_bytes(&self) -> Result<Vec<u8>, Error> {\n        let mut zip = ZipWriter::new(std::io::Cursor::new(Vec::new()));\n        let options = FileOptions::<()>::default().compression_method(CompressionMethod::Deflated);\n\n        let mut manifest_bytes = Vec::new();\n        self.manifest.write_to(&mut manifest_bytes)?;\n        zip.start_file(\"manifest.json\", options)?;\n        zip.write_all(&manifest_bytes)?;\n\n        let mut rule_names: Vec<_> = self.rules.keys().collect();\n        rule_names.sort();\n\n        for rule_name in rule_names {\n            let file_name = format!(\"{rule_name}.weir\");\n            zip.start_file(file_name, options)?;\n            if let Some(rule) = self.rules.get(rule_name) {\n                zip.write_all(rule.as_bytes())?;\n            }\n        }\n\n        let cursor = zip.finish()?;\n        Ok(cursor.into_inner())\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::{Weirpack, WeirpackManifest};\n\n    #[test]\n    fn round_trip_weirpack_bytes() {\n        let mut manifest = WeirpackManifest::new();\n        manifest.set_author(\"Test Author\");\n        manifest.set_version(\"0.1.0\");\n        manifest.set_description(\"Test pack\");\n        manifest.set_license(\"MIT\");\n\n        let mut pack = Weirpack::new(manifest);\n        pack.add_rule(\"ExampleRule\", \"expr main test\");\n\n        let bytes = pack.to_bytes().expect(\"serialize weirpack\");\n        let parsed = Weirpack::from_bytes(&bytes).expect(\"deserialize weirpack\");\n\n        assert_eq!(parsed.manifest.author().unwrap(), \"Test Author\");\n        assert_eq!(parsed.manifest.version().unwrap(), \"0.1.0\");\n        assert_eq!(parsed.manifest.description().unwrap(), \"Test pack\");\n        assert_eq!(parsed.manifest.license().unwrap(), \"MIT\");\n        assert_eq!(parsed.rules.get(\"ExampleRule\").unwrap(), \"expr main test\");\n    }\n}\n"
  },
  {
    "path": "harper-core/tests/linters.rs",
    "content": "//! This test creates snapshots of the reports of all linters.\n//!\n//! # Usage\n//!\n//! To add a new snapshot, simply add the document to `tests/text` and run this\n//! test. It will automatically create a new snapshot in `tests/text/linters`.\n//! To update an existing snapshot, also just run this test.\n//!\n//! Note: This test will fail if the snapshot files are not up to date. This\n//! ensures that CI will fail if linters change their behavior.\n\nuse harper_core::spell::FstDictionary;\nuse harper_core::{\n    Dialect, Document,\n    linting::{LintGroup, Linter},\n};\n\nmod snapshot;\n\nstruct LinePos {\n    /// 0-based index of the line\n    pub line: usize,\n    /// 0-based index of the column\n    pub col: usize,\n}\n\nstruct Lines<'a> {\n    lines: Vec<&'a str>,\n    offsets: Vec<usize>,\n}\nimpl Lines<'_> {\n    fn new(source: &'_ str) -> Lines<'_> {\n        let lines: Vec<&str> = source.split('\\n').collect();\n        let offsets: Vec<usize> = lines\n            .iter()\n            .scan(0, |offset, line| {\n                let old_offset = *offset;\n                *offset += line.chars().count() + 1;\n                Some(old_offset)\n            })\n            .collect();\n\n        Lines { lines, offsets }\n    }\n\n    fn len(&self) -> usize {\n        self.lines.len()\n    }\n\n    fn get_pos(&self, offset: usize) -> LinePos {\n        let line_index = self\n            .offsets\n            .binary_search(&offset)\n            .unwrap_or_else(|x| x - 1);\n\n        LinePos {\n            line: line_index,\n            col: offset - self.offsets[line_index],\n        }\n    }\n}\nimpl<'a> std::ops::Index<usize> for Lines<'a> {\n    type Output = &'a str;\n\n    fn index(&self, index: usize) -> &Self::Output {\n        &self.lines[index]\n    }\n}\n\nfn print_error(lines: &Lines, start: usize, end: usize, message: &str) -> String {\n    let mut out = String::new();\n\n    fn print_line(out: &mut String, line: &str, number: usize) {\n        out.push_str(&format!(\"{number:>6} | {line}\\n\"));\n    }\n\n    fn is_sentence_boundary(c: char) -> bool {\n        matches!(c, '.' | '?' | '!' | ':' | ';')\n    }\n    fn print_pre_line_context(\n        out: &mut String,\n        context_line: &str,\n        number: usize,\n        line: &str,\n        start_col: usize,\n    ) {\n        if context_line.is_empty() {\n            return;\n        }\n        if start_col > 40 {\n            // that's enough context\n            return;\n        }\n\n        let last_char = context_line.chars().last().unwrap();\n        let mut chars_before = line.chars().take(start_col);\n        if !is_sentence_boundary(last_char) && !chars_before.any(is_sentence_boundary) {\n            print_line(out, context_line, number);\n        }\n    }\n    fn print_post_line_context(\n        out: &mut String,\n        context_line: &str,\n        number: usize,\n        line: &str,\n        end_col: usize,\n    ) {\n        if context_line.is_empty() {\n            return;\n        }\n        if end_col < 40 {\n            // that's enough context\n            return;\n        }\n\n        let mut chars_after = line.chars().skip(end_col);\n        if !chars_after.any(is_sentence_boundary) {\n            print_line(out, context_line, number);\n        }\n    }\n\n    fn print_underline(\n        out: &mut String,\n        start_col: usize,\n        end_col: usize,\n        continuation: bool,\n        message: &str,\n    ) {\n        out.push_str(\"       | \");\n        for _ in 0..start_col {\n            out.push(' ');\n        }\n        out.push(if continuation { '~' } else { '^' });\n        for _ in 0..end_col.saturating_sub(start_col) {\n            out.push('~');\n        }\n\n        if !message.is_empty() {\n            out.push(' ');\n            out.push_str(message);\n        }\n        out.push('\\n');\n    }\n\n    let start = lines.get_pos(start);\n    let end = lines.get_pos(end - 1);\n\n    if start.line > 0 {\n        print_pre_line_context(\n            &mut out,\n            lines[start.line - 1],\n            start.line,\n            lines[start.line],\n            start.col,\n        );\n    }\n\n    if start.line == end.line {\n        print_line(&mut out, lines[start.line], start.line + 1);\n        print_underline(&mut out, start.col, end.col, false, message);\n    } else {\n        for i in start.line..end.line {\n            let line = lines[i];\n            print_line(&mut out, line, i + 1);\n            print_underline(\n                &mut out,\n                if i == start.line { start.col } else { 0 },\n                line.chars().count(),\n                i != start.line,\n                \"\",\n            );\n        }\n\n        print_line(&mut out, lines[end.line], end.line + 1);\n        print_underline(&mut out, 0, end.col, true, message);\n    }\n\n    if end.line + 1 < lines.len() {\n        print_post_line_context(\n            &mut out,\n            lines[end.line + 1],\n            end.line + 2,\n            lines[end.line],\n            end.col,\n        );\n    }\n\n    out\n}\n\n#[test]\nfn test_most_lints() {\n    snapshot::snapshot_all_text_files(\"linters\", \".snap.yml\", |source, dialect_override| {\n        let dict = FstDictionary::curated();\n        let document = Document::new_markdown_default(source, &dict);\n\n        let mut linter = LintGroup::new_curated(\n            dict,\n            dialect_override.unwrap_or_else(|| {\n                Dialect::try_guess_from_document(&document).unwrap_or(Dialect::American)\n            }),\n        );\n\n        let mut lints = linter.lint(&document);\n        lints.sort_by(|a, b| {\n            a.span\n                .start\n                .cmp(&b.span.start)\n                .then(a.span.end.cmp(&b.span.end))\n        });\n\n        // split the input document into lines\n        let lines = Lines::new(source);\n\n        let mut out = String::new();\n\n        for lint in lints {\n            out.push_str(&format!(\n                \"Lint:    {:?} ({} priority)\\n\",\n                lint.lint_kind, lint.priority\n            ));\n\n            let message = print_error(&lines, lint.span.start, lint.span.end, &lint.message);\n            out.push_str(\"Message: |\\n\");\n            for l in message.lines() {\n                out.push_str(\"  \");\n                out.push_str(l);\n                out.push('\\n');\n            }\n\n            if !lint.suggestions.is_empty() {\n                out.push_str(\"Suggest:\\n\");\n                for suggestion in &lint.suggestions {\n                    out.push_str(&format!(\"  - {suggestion}\\n\"));\n                }\n            }\n\n            out.push_str(\"\\n\\n\\n\");\n        }\n\n        out\n    });\n}\n"
  },
  {
    "path": "harper-core/tests/pos_tags.rs",
    "content": "//! This test creates snapshots of the part-of-speech (POS) tags assigned by the\n//! [`Document`] struct to the text files in the `tests/text` directory.\n//!\n//! # Usage\n//!\n//! To add a new snapshot, simply add the document to `tests/text` and run this\n//! test. It will automatically create a new snapshot in `tests/text/tagged`.\n//! To update an existing snapshot, also just run this test.\n//!\n//! Note: This test will fail if the snapshot files are not up to date. This\n//! ensures that CI will fail if the POS tagger changes its behavior.\n//!\n//! # Snapshot format\n//!\n//! The snapshot files contain 2 lines for every line in the original text. The\n//! first line contains the original text, and the second line contains the POS\n//! tags. The text and tags are aligned so that the tags are directly below the\n//! corresponding words in the text. Example:\n//!\n//! ```md\n//! > I   told her   how   I   had stopped off       in          Chicago for a   day   on  my way East    .\n//! # ISg V    I/J/D NSg/C ISg V   V/J     NSg/V/J/P NPrSg/V/J/P NPr     C/P D/P NPrSg J/P D  J   NPrSg/J .\n//! ```\n//!\n//! ## Tags\n//!\n//! Tags are assigned based on the [`TokenKind`] and [`DictWordMetadata`] of a\n//! token.\n//!\n//! - The tag of [`TokenKind::Word`] variants depends on their\n//!   [`DictWordMetadata`]. If they don't have any metadata, they are denoted by `?`.\n//!   Otherwise, the tag is constructed as follows:\n//!\n//!   - Nouns are denoted by `N`.\n//!     - The `Pl` suffix means plural, and `Sg` means singular.\n//!     - The `Pr` suffix means proper noun.\n//!     - The `$` suffix means possessive.\n//!     - Superscript `ᴹ` means mass (uncountable) noun.\n//!     - Superscript `🅪` means mass + countable noun.\n//!   - Pronouns are denoted by `I`.\n//!     - The `Pl` suffix means plural, and `Sg` means singular.\n//!     - The `$` suffix means possessive.\n//!   - Verbs are denoted by `V`.\n//!     - The `L` suffix means linking verb.\n//!     - The `X` suffix means auxiliary verb.\n//!     - The `B` suffix means base (lemma) form.\n//!     - The `P` suffix means simple past tense & past participle.\n//!     - The `Pr` suffix means progressive form.\n//!     - The `Pt` suffix means simple past tense.\n//!     - The `Pp` suffix means past participle.\n//!     - The `3` suffix means third person singular present form.\n//!   - Adjectives are denoted by `J`.\n//!     - The `C` suffix means comparative.\n//!     - The `S` suffix means superlative.\n//!   - Adverbs are denoted by `R`.\n//!   - Conjunctions are denoted by `C`.\n//!   - Determiners are denoted by `D`.\n//!     - The `dem` suffix means demonstrative.\n//!     - The `q` suffix means quantifier.\n//!   - Prepositions are denoted by `P`.\n//!   - Dialects are denoted by `Am`, `Br`, `Ca`, or `Au` for individual\n//!     dialects, or `NoAm` for North America (US and Canada)\n//!     or `Comm` for Commonwealth (UK, Australia, and Canada).\n//!   - Swear words are denoted by `B` (for bad).\n//!   - Noun phrase membership is denoted by `+`\n//!   - For words not in the dictionary or without annotations,\n//!     they are denoted by `K` for \"contraction\" if they contain an apostrophe,\n//!     or `W?` otherwise.\n//!\n//!   The tagger supports uncertainty, so a single word can be e.g. both a\n//!   noun and a verb. This is denoted by a `/` between the tags.\n//!   For example, `N/V/J` means the word is a noun, verb, and/or adjective.\n//!\n//! - [`TokenKind::Punctuation`] are denoted by `.`.\n//! - [`TokenKind::Number`] are denoted by `#`.\n//! - [`TokenKind::Decade`] are denoted by `#d`.\n//! - Roman numerals are denoted by `#r`.\n//! - [`TokenKind::Space`], [`TokenKind::Newline`], and\n//!   [`TokenKind::ParagraphBreak`] are ignored.\n//! - All other token kinds are denoted by their variant name.\nuse std::borrow::Cow;\n\nuse harper_core::spell::FstDictionary;\nuse harper_core::{\n    Degree, Dialect, DictWordMetadata, Document, OrthFlags, TokenKind, VerbFormFlags,\n};\n\nmod snapshot;\n\nfn format_word_tag(word: &DictWordMetadata) -> String {\n    // These tags are inspired by the Penn Treebank POS tagset\n    let mut tags = String::new();\n    fn add(t: &str, tags: &mut String) {\n        if !tags.is_empty() {\n            tags.push('/');\n        }\n        tags.push_str(t);\n    }\n\n    fn add_bool(tag: &mut String, name: &str, value: Option<bool>) {\n        if let Some(value) = value {\n            if !value {\n                tag.push('!');\n            }\n            tag.push_str(name);\n        }\n    }\n    fn add_switch(tag: &mut String, value: Option<bool>, yes: &str, no: &str) {\n        if let Some(value) = value {\n            if value {\n                tag.push_str(yes);\n            } else {\n                tag.push_str(no);\n            }\n        }\n    }\n\n    if let Some(noun) = word.noun {\n        let mut tag = String::from(\"N\");\n        add_bool(&mut tag, \"Pr\", noun.is_proper);\n        if word.is_mass_noun() {\n            add_switch(&mut tag, Some(word.is_countable_noun()), \"🅪\", \"ᴹ\");\n        }\n        if word.is_countable_noun() {\n            // Countable nouns are optionally marked in the dictionary. Countable is default if neither it nor mass is marked.\n            // Common nouns are not marked in the dictionary, but being a mass noun implies being a common noun.\n            // We don't want to clutter the output with `Sg` for mass nouns unless they are also countable.\n            // We don't want to clutter the output with `Sg` for proper nouns unless they are also common.\n            // \"wood\"/\"Wood\" is a countable and mass common noun and also a proper noun.\n            if word.is_singular_noun() && (!word.is_proper_noun() || word.is_mass_noun()) {\n                tag.push_str(\"Sg\");\n            }\n            if word.is_plural_noun() {\n                tag.push_str(\"Pl\");\n            }\n        }\n        add_bool(&mut tag, \"$\", noun.is_possessive);\n        add(&tag, &mut tags);\n    }\n    if let Some(pronoun) = word.pronoun {\n        let mut tag = String::from(\"I\");\n        add_bool(\n            &mut tag,\n            \"Sg\",\n            pronoun.is_singular.and_then(|sg| sg.then_some(true)),\n        );\n        add_bool(\n            &mut tag,\n            \"Pl\",\n            pronoun.is_plural.and_then(|pl| pl.then_some(true)),\n        );\n        add_bool(&mut tag, \"$\", pronoun.is_possessive);\n        add(&tag, &mut tags);\n    }\n    if let Some(verb) = word.verb {\n        let mut tag = String::from(\"V\");\n        add_bool(&mut tag, \"L\", verb.is_linking);\n        add_bool(&mut tag, \"X\", verb.is_auxiliary);\n        if let Some(forms) = verb.verb_forms {\n            // If Lemma flag is explicitly set; or if no verb forms are set Lemma is the default.\n            match (\n                forms.contains(VerbFormFlags::LEMMA),\n                forms.contains(VerbFormFlags::PAST),\n                forms.contains(VerbFormFlags::PAST_PARTICIPLE),\n                forms.contains(VerbFormFlags::PRETERITE),\n                forms.contains(VerbFormFlags::PROGRESSIVE),\n                forms.contains(VerbFormFlags::THIRD_PERSON_SINGULAR),\n            ) {\n                (true, _, _, _, _, _) | (false, false, false, false, false, false) => {\n                    tag.push_str(\"B\")\n                }\n                _ => {}\n            }\n            // Regular verbs set both together; Irregular verbs can set them separately.\n            match (\n                forms.contains(VerbFormFlags::PAST),\n                forms.contains(VerbFormFlags::PRETERITE),\n                forms.contains(VerbFormFlags::PAST_PARTICIPLE),\n            ) {\n                (true, _, _) | (_, true, true) => tag.push_str(\"P\"),\n                (false, true, false) => tag.push_str(\"Pt\"),\n                (false, false, true) => tag.push_str(\"Pp\"),\n                _ => {}\n            }\n            if forms.contains(VerbFormFlags::PROGRESSIVE) {\n                tag.push_str(\"g\");\n            }\n            if forms.contains(VerbFormFlags::THIRD_PERSON_SINGULAR) {\n                tag.push_str(\"3\");\n            }\n        } else {\n            tag.push_str(\"B\");\n        }\n        add(&tag, &mut tags);\n    }\n    if let Some(adjective) = word.adjective {\n        let mut tag = String::from(\"J\");\n        if let Some(degree) = adjective.degree {\n            tag.push_str(match degree {\n                Degree::Comparative => \"C\",\n                Degree::Superlative => \"S\",\n                _ => \"\",\n            });\n        }\n        add(&tag, &mut tags);\n    }\n    if let Some(_adverb) = word.adverb {\n        add(\"R\", &mut tags);\n    }\n    if let Some(_conj) = word.conjunction {\n        add(\"C\", &mut tags);\n    }\n    if let Some(determiner) = word.determiner {\n        let mut tag = String::from(\"D\");\n        add_bool(&mut tag, \"$\", determiner.is_possessive);\n        add_bool(&mut tag, \"dem\", determiner.is_demonstrative);\n        add_bool(&mut tag, \"q\", determiner.is_quantifier);\n        add(&tag, &mut tags);\n    }\n    if word.preposition {\n        add(\"P\", &mut tags);\n    }\n    if word.is_roman_numerals() {\n        add(\"#r\", &mut tags);\n    }\n\n    get_dialect_annotations(word).into_iter().for_each(|tag| {\n        add(tag, &mut tags);\n    });\n\n    add_switch(&mut tags, word.np_member, \"+\", \"\");\n\n    if word.swear == Some(true) {\n        add(\"B\", &mut tags);\n    }\n\n    match tags.is_empty() {\n        true if word.orth_info.contains(OrthFlags::APOSTROPHE) => String::from(\"K\"),\n        true => String::from(\"W?\"),\n        false => tags,\n    }\n}\n\n/// Returns a vector of dialect annotation strings for the given word.\n/// Handles both individual dialects and special groupings (NoAm, Comm).\nfn get_dialect_annotations(word: &DictWordMetadata) -> Vec<&'static str> {\n    let mut annotations = Vec::new();\n    let mut north_america = false;\n    let mut commonwealth = false;\n\n    let en_au = word.dialects.is_dialect_enabled_strict(Dialect::Australian);\n    let en_ca = word.dialects.is_dialect_enabled_strict(Dialect::Canadian);\n    let en_gb = word.dialects.is_dialect_enabled_strict(Dialect::British);\n    let en_us = word.dialects.is_dialect_enabled_strict(Dialect::American);\n\n    // Dialect groups in alphabetical order\n    if en_gb && en_au && en_ca {\n        annotations.push(\"Comm\");\n        commonwealth = true;\n    }\n    if en_us && en_ca {\n        annotations.push(\"NoAm\");\n        north_america = true;\n    }\n    // Individual dialects in alphabetical order\n    if en_us && !north_america {\n        annotations.push(\"Am\");\n    }\n    if en_au && !commonwealth {\n        annotations.push(\"Au\");\n    }\n    if en_gb && !commonwealth {\n        annotations.push(\"Br\");\n    }\n    if en_ca && !north_america && !commonwealth {\n        annotations.push(\"Ca\");\n    }\n\n    annotations\n}\n\nfn format_tag(kind: &TokenKind) -> Cow<'static, str> {\n    match kind {\n        TokenKind::Word(word) => {\n            // These tags are inspired by the Penn Treebank POS tagset\n            if let Some(word) = word {\n                Cow::Owned(format_word_tag(word))\n            } else {\n                Cow::Borrowed(\"?\")\n            }\n        }\n        TokenKind::Punctuation(_) => Cow::Borrowed(\".\"),\n        TokenKind::Number(_) => Cow::Borrowed(\"#\"),\n        TokenKind::Decade => Cow::Borrowed(\"#d\"),\n\n        // The following variants just print their variant name\n        TokenKind::Space(_) => Cow::Borrowed(\"Space\"),\n        TokenKind::Newline(_) => Cow::Borrowed(\"Newline\"),\n        TokenKind::EmailAddress => Cow::Borrowed(\"Email\"),\n        TokenKind::Url => Cow::Borrowed(\"Url\"),\n        TokenKind::Hostname => Cow::Borrowed(\"Hostname\"),\n        TokenKind::Unlintable => Cow::Borrowed(\"Unlintable\"),\n        TokenKind::Regexish => Cow::Borrowed(\"Regexish\"),\n        TokenKind::ParagraphBreak => Cow::Borrowed(\"ParagraphBreak\"),\n        TokenKind::HeadingStart => Cow::Borrowed(\"HeadingStart\"),\n    }\n}\n\nstruct Formatter {\n    out: String,\n    line1: String,\n    line2: String,\n}\nimpl Formatter {\n    const LINE1_PREFIX: &'static str = \"> \";\n    const LINE2_PREFIX: &'static str = \"# \";\n    fn new() -> Self {\n        Self {\n            out: String::new(),\n            line1: String::from(Self::LINE1_PREFIX),\n            line2: String::from(Self::LINE2_PREFIX),\n        }\n    }\n\n    fn add(&mut self, token: &str, tag: &str) {\n        for (line_number, token_line) in token.split('\\n').enumerate() {\n            if line_number > 0 {\n                self.new_line();\n            }\n\n            self.line1.push_str(token_line);\n            self.line1.push(' ');\n            self.line2.push_str(tag);\n            self.line2.push(' ');\n            let token_chars = token_line.chars().count();\n            let tag_chars = tag.chars().count();\n            for _ in token_chars..tag_chars {\n                self.line1.push(' ');\n            }\n            for _ in tag_chars..token_chars {\n                self.line2.push(' ');\n            }\n        }\n    }\n\n    fn new_line(&mut self) {\n        self.out.push_str(self.line1.trim_end());\n        self.out.push('\\n');\n        self.out.push_str(self.line2.trim_end());\n        self.out.push('\\n');\n\n        self.line1.clear();\n        self.line2.clear();\n\n        self.line1.push_str(Self::LINE1_PREFIX);\n        self.line2.push_str(Self::LINE2_PREFIX);\n    }\n\n    fn finish(mut self) -> String {\n        self.new_line();\n        self.out\n    }\n}\n\n#[test]\nfn test_pos_tagger() {\n    snapshot::snapshot_all_text_files(\"tagged\", \".md\", |source, _| {\n        let dict = FstDictionary::curated();\n        let document = Document::new_markdown_default(source, &dict);\n\n        let mut formatter = Formatter::new();\n        for token in document.fat_string_tokens() {\n            match token.kind {\n                TokenKind::Space(_) => { /* ignore */ }\n                TokenKind::ParagraphBreak => {\n                    formatter.new_line();\n                    formatter.new_line();\n                }\n                TokenKind::Newline(_) => {\n                    formatter.new_line();\n                }\n                kind => {\n                    let text = &token.content;\n                    let tag = format_tag(&kind);\n                    formatter.add(text, &tag);\n                }\n            }\n        }\n\n        formatter.finish()\n    });\n}\n"
  },
  {
    "path": "harper-core/tests/run_tests.rs",
    "content": "use harper_core::linting::{LintGroup, Linter};\nuse harper_core::parsers::OrgMode;\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\n\n/// Creates a unit test checking that the linting of a Markdown document (in\n/// `tests_sources`) produces the expected number of lints.\nmacro_rules! create_test {\n    ($filename:ident.md, $correct_expected:expr, $dialect:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_ $filename _correctly>](){\n                let source = include_str!(\n                    concat!(\n                        \"./test_sources/\",\n                        concat!(stringify!($filename), \".md\")\n                    )\n                );\n\n                let dict = FstDictionary::curated();\n                let document = Document::new_markdown_default(&source, &dict);\n\n                let mut linter = LintGroup::new_curated(dict, $dialect);\n                let lints = linter.lint(&document);\n\n                dbg!(&lints);\n                assert_eq!(lints.len(), $correct_expected);\n\n                // Make sure that all generated tokens span real characters\n                for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                }\n            }\n        }\n    };\n}\n\n/// Creates a unit test checking that the linting of an Org mode document (in\n/// `tests_sources`) produces the expected number of lints.\nmacro_rules! create_org_test {\n    ($filename:ident.org, $correct_expected:expr, $dialect:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_ $filename _correctly>](){\n                let source = include_str!(\n                    concat!(\n                        \"./test_sources/\",\n                        concat!(stringify!($filename), \".org\")\n                    )\n                );\n\n                let dict = FstDictionary::curated();\n                let document = Document::new(&source, &OrgMode, &dict);\n\n                let mut linter = LintGroup::new_curated(dict, $dialect);\n                let lints = linter.lint(&document);\n\n                dbg!(&lints);\n                assert_eq!(lints.len(), $correct_expected);\n\n                // Make sure that all generated tokens span real characters\n                for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                }\n            }\n        }\n    };\n}\n\ncreate_test!(whack_bullets.md, 1, Dialect::American);\ncreate_test!(issue_109.md, 0, Dialect::American);\ncreate_test!(issue_109_ext.md, 0, Dialect::American);\ncreate_test!(chinese_lorem_ipsum.md, 2, Dialect::American);\ncreate_test!(obsidian_links.md, 3, Dialect::American);\ncreate_test!(issue_267.md, 0, Dialect::American);\ncreate_test!(proper_noun_capitalization.md, 3, Dialect::American);\ncreate_test!(amazon_hostname.md, 0, Dialect::American);\ncreate_test!(issue_159.md, 1, Dialect::American);\ncreate_test!(issue_358.md, 0, Dialect::American);\ncreate_test!(issue_195.md, 0, Dialect::American);\ncreate_test!(issue_118.md, 0, Dialect::American);\ncreate_test!(lots_of_latin.md, 1, Dialect::American);\ncreate_test!(pr_504.md, 1, Dialect::American);\ncreate_test!(pr_452.md, 2, Dialect::American);\ncreate_test!(hex_basic_clean.md, 0, Dialect::American);\ncreate_test!(hex_basic_dirty.md, 1, Dialect::American);\ncreate_test!(misc_closed_compound_clean.md, 0, Dialect::American);\ncreate_test!(statist_localist.md, 0, Dialect::American);\ncreate_test!(yogurt_british_clean.md, 0, Dialect::British);\ncreate_test!(issue_1581.md, 0, Dialect::British);\ncreate_test!(issue_2054.md, 6, Dialect::British);\ncreate_test!(issue_1988.md, 0, Dialect::American);\ncreate_test!(issue_2054_clean.md, 0, Dialect::British);\ncreate_test!(issue_1873.md, 0, Dialect::British);\ncreate_test!(issue_2246.md, 0, Dialect::American);\ncreate_test!(title_case_errors.md, 2, Dialect::American);\ncreate_test!(title_case_clean.md, 0, Dialect::American);\ncreate_test!(issue_2233.md, 0, Dialect::American);\ncreate_test!(issue_2240.md, 0, Dialect::American);\ncreate_test!(allows_domain_extensions.md, 0, Dialect::American);\n// It just matters that it is > 1\ncreate_test!(issue_2151.md, 4, Dialect::British);\n\n// Make sure it doesn't panic\ncreate_test!(lukas_homework.md, 4, Dialect::American);\n\n// Org mode tests\ncreate_org_test!(index.org, 49, Dialect::American);\n"
  },
  {
    "path": "harper-core/tests/snapshot.rs",
    "content": "use std::{\n    marker::Sync,\n    path::{Path, PathBuf},\n};\n\nuse harper_core::Dialect;\nuse itertools::Itertools;\nuse rayon::iter::{IntoParallelRefIterator, ParallelIterator};\n\nfn get_tests_dir() -> PathBuf {\n    PathBuf::from(env!(\"CARGO_MANIFEST_DIR\")).join(\"tests\")\n}\nfn get_text_dir() -> PathBuf {\n    get_tests_dir().join(\"text\")\n}\n\n/// Tries to find a dialect override from a given file path. Returns `None` if the number of\n/// dialect overrides found is not 1.\n#[must_use]\nfn try_get_dialect_override(path: &Path) -> Option<Dialect> {\n    path.file_stem()?\n        .to_string_lossy()\n        .split('.')\n        .filter_map(Dialect::try_from_abbr)\n        .exactly_one() // If we find multiple overrides, it's unlikely that a dialect override is intended.\n        .ok()\n}\n\npub fn get_text_files() -> Vec<PathBuf> {\n    let mut files = vec![];\n    for entry in std::fs::read_dir(get_text_dir())\n        .unwrap()\n        .filter_map(|f| f.ok())\n        .filter(|f| f.metadata().unwrap().is_file())\n    {\n        let path = entry.path();\n        let ext = path\n            .extension()\n            .map(|e| e.to_string_lossy().to_string())\n            .unwrap_or_default();\n        if matches!(ext.as_str(), \"txt\" | \"md\") {\n            files.push(entry.path());\n        }\n    }\n    files\n}\n\nfn tag_file(\n    text_file: &Path,\n    snapshot_file: &Path,\n    create_snapshot: impl Fn(&str, Option<Dialect>) -> String,\n) -> Result<(), Box<dyn std::error::Error>> {\n    let source = std::fs::read_to_string(text_file)?.replace(\"\\r\\n\", \"\\n\");\n    let dialect_override = try_get_dialect_override(text_file);\n    let tagged = create_snapshot(source.trim_end(), dialect_override);\n\n    // compare with snapshot\n    let has_snapshot = snapshot_file.exists();\n    if has_snapshot {\n        let snapshot = std::fs::read_to_string(snapshot_file)?;\n        if tagged == snapshot {\n            return Ok(());\n        }\n    }\n\n    // write snapshot\n    std::fs::write(snapshot_file, tagged)?;\n\n    Err(if has_snapshot {\n        \"Snapshot mismatches!\".into()\n    } else {\n        \"No snapshot!\".into()\n    })\n}\nfn get_snapshot_file(text_file: &Path, snapshot_dir: &Path, ext: &str) -> PathBuf {\n    let snapshot_name = text_file.file_stem().unwrap().to_string_lossy().to_string() + ext;\n    snapshot_dir.join(snapshot_name)\n}\n#[allow(dead_code)]\npub fn snapshot_all_text_files(\n    out_dir: &str,\n    snapshot_ext: &str,\n    create_snapshot: impl Copy + Fn(&str, Option<Dialect>) -> String + 'static + Sync,\n) {\n    let snapshot_dir = get_text_dir().join(out_dir);\n    std::fs::create_dir_all(&snapshot_dir).expect(\"Failed to create snapshot directory\");\n\n    let errors: u64 = get_text_files()\n        .par_iter()\n        .map(|text_file| {\n            println!(\"Processing {}\", text_file.display());\n            let snapshot_file = get_snapshot_file(text_file, &snapshot_dir, snapshot_ext);\n            if let Err(e) = tag_file(text_file, &snapshot_file, create_snapshot) {\n                eprintln!(\"Error processing {}: {}\", text_file.display(), e);\n                1\n            } else {\n                0\n            }\n        })\n        .sum();\n\n    if errors > 0 {\n        panic!(\"{errors} errors occurred while processing files\");\n    }\n}\n"
  },
  {
    "path": "harper-core/tests/test_sources/allows_domain_extensions.md",
    "content": "I would love a .ai domain.\nI would love a .app domain.\nI would love a .blog domain.\nI would love a .co domain.\nI would love a .com domain.\nI would love a .dev domain.\nI would love a .edu domain.\nI would love a .gov domain.\nI would love a .info domain.\nI would love a .io domain.\nI would love a .me domain.\nI would love a .mil domain.\nI would love a .net domain.\nI would love a .org domain.\nI would love a .shop domain.\nI would love a .tech domain.\nI would love a .uk domain.\nI would love a .us domain.\nI would love a .xyz domain.\n"
  },
  {
    "path": "harper-core/tests/test_sources/amazon_hostname.md",
    "content": "This is a test of whether Amazon.com is considered a URI.\n"
  },
  {
    "path": "harper-core/tests/test_sources/chinese_lorem_ipsum.md",
    "content": "The following text was generated using [a Chinese lorem ipsum generator](https://pinkylam.me/generator/chinese-lorem-ipsum/).\n\n食棵支每躲種。奶象打星爪子二細喜才記行在發像原斤！頁固點子衣點豆看身蝴看苗急午公何足，筆娘經色蝶行元香也要。麻了綠尼固世，色北書目登功；因告黑。\n\n從下由服行巴登魚，棵苦亮珠春用訴星比都由發丟法主犬水現，能國書午錯馬吹隻幾外。筆泉可去牙用同貝步登娘毛完且哭，北巴種化吃石正由讀借示！幸造愛扒，才怕至成下。\n\n亮您紅星浪中兩安乙菜上做玉做火愛玩植結面，蝴哭往兒完哥封波在，林春田早次王同月清丁筆道兩請玩燈們唱。\n\n十兌雞做喜木發屋害要書目把麼早父方從以。冰正共片海告假衣夏冒吃戊很口松牠室肖。斗門看登給畫聽斤婆品歡個。\n\n澡弓兩化員把戊各但他用親！給好校魚火包，根朵告幫着道具象海太或文苗。西首友雞頭、我跳花發，可功才門田訴去首或行。\n\n吧都上午京主根相由或想、澡快送哭麻細麻白言原風童乍外、右更新一婆幸七片院。教刀麻哥幾在同四就遠新來長喜呢雪：兒時貓千十門功玩刀比。媽習出才，借食乞原成欠波米掃古校良具們昔！少學刀工火入。\n\n兔追找古裏雞喜假經南瓜枝未發發几！菜書共媽申欠彩因到「金羊昌追秋才着海隻」雪像麻孝亮乞土點首事向往！知瓜祖。\n\n因主很貫唱重目刃右，封飯房屋造土都犬帶刃抱他重他冬幸以坡十雲？跳肖頭反入小坐歡院帶士自央。\n"
  },
  {
    "path": "harper-core/tests/test_sources/hex_basic_clean.md",
    "content": "If p is an `int*`, and `p = 0x1000`, what is the value of `p+3`?\n\n_0x100C_\n\n"
  },
  {
    "path": "harper-core/tests/test_sources/hex_basic_dirty.md",
    "content": "If p is an `int*`, and `p = 0x1000`, what is the value of `p+3`?\n\n_0x100C_\n\nasdkjd\n"
  },
  {
    "path": "harper-core/tests/test_sources/index.org",
    "content": "#+OPTIONS: H:9 ^:nil\n* Nvim Orgmode\n\nNvim orgmode is a clone of Emacs Orgmode for Neovim 0.10.3+.\nIt aims to be a feature-complete implementation of Orgmode features in Neovim.\n\nOnline version of this documentation is available at [[https://nvim-orgmode.github.io]].\n\nTo view this documentation offline in Neovim, run =:Org help=. More info in [[#globals-and-commands][Globals and commands]] section.\n\n** Quick start\n:PROPERTIES:\n:CUSTOM_ID: quick-start\n:END:\n- Install with [[https://github.com/folke/lazy.nvim][lazy.nvim]]:\n  #+begin_src lua\n  {\n    'nvim-orgmode/orgmode',\n    event = 'VeryLazy',\n    config = function()\n      -- Setup orgmode\n      require('orgmode').setup({\n        org_agenda_files = '~/orgfiles/**/*',\n        org_default_notes_file = '~/orgfiles/refile.org',\n      })\n    end,\n  }\n  #+end_src\n- Capture your first note with =<leader>oc=\n- Open up the prompt for agenda with =<leader>oa=\n\nFor more details about the installation and usage, check [[./installation.org][Installation page]].\n\nTo see all configuration options, check [[file:./configuration.org][Configuration page]].\n\n** Getting started with orgmode\n:PROPERTIES:\n:CUSTOM_ID: getting-started\n:END:\nTo get a basic idea how Orgmode works, check our hands-on [[file:./tutorial.org][tutorial]].\n\nYou can also check this screencast from [[https://github.com/dhruvasagar][@dhruvasagar]]\nthat demonstrates how the similar Orgmode clone [[https://github.com/dhruvasagar/vim-dotoo][vim-dotoo]] works.\n\n[[https://www.youtube.com/watch?v=nsv33iOnH34]]\n\n** API docs\n:PROPERTIES:\n:CUSTOM_ID: api-docs\n:END:\nNvim-orgmode exposes a Lua API that can be used to interact with the orgmode. To view it, check [[file:../doc/orgmode_api.txt][orgmode_api.txt]]\nor do =:h OrgApi= in Neovim.\n\n** Globals and commands\n:PROPERTIES:\n:CUSTOM_ID: globals-and-commands\n:END:\nThere are 2 additional ways to interact with Orgmode:\n1. Through the =:Org= command\n2. Through =Org= Lua global variable\n\nList of available actions:\n- =:Org help= - Open this documentation in new tab, set working directory to the doc's folder for the tab to allow browsing\n- =:Org helpgrep= - Open search agenda view that allows searching through the documentation\n- =:Org agenda {type?}= - Open agenda view by the shortcut, for example =:Org agenda M= will open =tags_todo= view. When =type= is omitted, it opens up Agenda view.\n- =:Org capture {type?}= - Open capture template by the shortcut, for example =:Org capture t=. When =type= is omitted, it opens up Capture prompt.\n- =:Org install_treesitter_grammar= - Install the treesitter grammar for Orgmode. If installed, prompt to reinstall. Grammar is installed automatically\n  on first run, but this is useful in case when there are issues with the grammar.\n- =:Org store_link= - [[file:./configuration.org::#org_store_link][Store link]] to the headline under cursor. Works in both agenda and org files.\n- =:Org indent_mode= - Toggle virtual indent mode in the current buffer. See [[file:./configuration.org::#org_startup_indented][osg_startup_indented]] for additional info.\n\nAll of the commands above can be executed through the global Lua =Org= variable. Examples:\n- =Org.help()=\n- =Org.helpgrep()=\n- =Org.install_treesitter_grammar()=\n- =Org.store_link()=\n- =Org.indent_mode()=\n- =Org.agenda()= - Opens =agenda= prompt\n- =Org.agenda.m()= - Opens =tags= view\n- =Org.capture()= - Opens capture prompt\n- =Org.capture.t()= - Opens capture template for =t= shortcut\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_109.md",
    "content": "本文档是使用 Microsoft Translate 翻译的。哈珀根本不应该抱怨。\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_109_ext.md",
    "content": "# 이것은 제목\n\n## 이것은 소제목\n\n이것이 본문이다\n옛날 옛적 깊은 산 속에 가난하지만 사이좋은 오누이와 그 홀어머니 가족이 살고 있었다. \n오누이의 아버지는 일찍 세상을 떠났고, 어머니 혼자 집으로부터 몇 고개를 넘어가야 나오는 \n먼 거리의 장터에 떡(인절미)을 내다 파는 일을 하며 생계를 책임지고 있었다. \n어느 날, 어머니가 장터로 떡을 팔러 가게 되었다. 어머니는 애들만 두고 가려니까 \n걱정이 되어서 아무한테나 함부로 문 열어주지 말라고 애들에게 신신당부했다.\n\n그렇게 늦은 밤, 장터에서 팔다 남은 떡을 가지고 집으로 돌아오는 길. \n어머니는 첫번째 고개에서 호랑이를 만났고, 호랑이가 \"떡 하나 주면 안 잡아먹지.\"라고 \n위협하자 어머니는 벌벌 떨면서 떡을 하나 던져줬다. 그 떡을 먹고 가버린 줄 알았으나, \n호랑이는 어머니가 고개를 하나하나 넘을 때마다 계속해서 똑같이 나타나 똑같은 대사를 \n반복하며 떡을 하나씩 뺏어먹었고 떡이 떨어지자 결국 어머니까지 잡아먹는 만행까지 저질렀다.\n\n그러고도 배가 덜 찼는지 아예 오누이까지 잡아먹으려고 어머니의 옷을 입고 위장을 \n한 채로 그 집을 찾아갔다. 아직 어린 여동생 달님은 대뜸 문 밖 발소리만 듣고 \n어머니가 온 줄 알고 기뻐하며 바로 문을 열려 했지만, 판단력이 있었던 오빠 \n해님은 여동생을 제지한 후 목소리를 내서 어머니인 것을 증명해 보라고 단호하게 \n말했다. 하지만 호랑이의 목소리가 사람의 목소리처럼 나올 순 없는 법이었다. 호랑이는 \n목이 쉬어서 그렇다며 핑계댔고, 이에 오빠가 이번에는 손을 내밀어 보라고 했다.\n\n그 말에 호랑이가 문풍지를 뚫고 앞발을 보여주었지만, 이에 오빠는 이것은 엄마의 \n손이 절대로 아니라며 의심하자 호랑이는 오랜 시간 동안 일을 해서 손이 거칠어졌다며 \n또 둘러댔다.[1] 그러나 문풍지 구멍 밖으로 보이는 호랑이의 희번덕한 노란 눈을 보자마자 \n오누이는 그 정체가 알고 보니 호랑이였다는 것을 비로소 알아차렸으며, 엄마가 이 호랑이에 \n의해 잡아먹힌 것을 알고, 몰래 뒷문으로 빠져나와 나무 위로 몸을 피했다.\n\n호랑이는 나무 위로 간 오누이를 찾지 못하다가, 바로 옆의 우물에 오누이가 비친 \n모습을 발견했다. 이에 호랑이가 부드럽게 \"얘들아, 거긴 어떻게 올라갔니?\" 하고 \n묻자 오빠가 \"손발에 참기름을 바르고 올라왔지!\"라고 거짓말을 했다.[2] 이에 호랑이는 \n그 말만 듣고 어리석게도 곧바로 부엌에 가서 발에 참기름을 바르고 왔지만, 당연히 미끌미끌한 \n참기름 때문에 자꾸만 나무 줄기에서 미끄러져 구르기만 했다.\n\n이런 호랑이를 보면서 오누이는 어느새 무서움도 잊고 웃음을 터뜨렸다. 그러다가 \n신나게 웃던 동생이 자기도 모르게 \"멍청하기는! 도끼로 나무를 찍으며 올라오면 \n쉽게 올라올 수 있는 것을!\"이라고 올라오는 방법을 발설하자 정신을 차린 동생이 \n얼른 손으로 입을 막았지만[3], 호랑이는 이미 그걸 들어버린 뒤라 잽싸게 도끼를 \n꺼내들고 와서 나무를 쿵쿵 찍으며 올라오기 시작했다.\n\n오누이는 호랑이를 피해 계속 올라가 나무의 꼭대기까지 다다랐고 더 이상 올라갈 \n곳이 없어지자 오누이는 지푸라기라도 잡는 심정으로 눈물을 흘리며 하늘을 향해 싹싹 빌기 시작했다.\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_118.md",
    "content": "This is another sentence that says item 1, item 2, etc. in the middle of the sentence.\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_1581.md",
    "content": "Simple walkthroughs with...\n\nThe above phrase supposedly threw an error in an older version of Harper.\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_159.md",
    "content": "The file in question was myfile.txt, and it was glorious.\nIt was referenced by https://pax.grsecurity.net/docs/pageexec.old.txt.\n\nthis is another test for the sentence capitalization.\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_1873.md",
    "content": "TeX is a typesetting system.\n\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_195.md",
    "content": "If we have words with numbers in them, like IPv4, they should get marked as just that: words.\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_1988.md",
    "content": "When this test is run, it returns a result.\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_2054.md",
    "content": "I really enjoy a good ui or gui.\nWhen developer put time and effort into a good ux, I feel so much more productive.\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_2054_clean.md",
    "content": "I really enjoy a good UI or GUI.\nWhen developer put time and effort into a good UX, I feel so much more productive.\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_2151.md",
    "content": "Are cloudflare and CloudFlare incorrect?\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_2233.md",
    "content": "In foobar, apple is a fruit, and \"beer\" is not a fruit.\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_2240.md",
    "content": "There is no more need to run `git`.\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_2246.md",
    "content": "But current implementations will likely be bypassable. \n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_267.md",
    "content": "<p id=\"question\">What did you learn from the assignment? Were there any special insights you had? What did you find that you already knew?</p>\n"
  },
  {
    "path": "harper-core/tests/test_sources/issue_358.md",
    "content": "The total number of pixels in the image pertains to a one channel image.\n"
  },
  {
    "path": "harper-core/tests/test_sources/lots_of_latin.md",
    "content": "We had some issues with correctly parsing certain Latin terms.\n\nIt caused issues with phrases like, \"it was Mike Tyson vs. Weird Al!\" and \"Mike Tyson et al. wrote this paper,\" etc., especially for scientific papers.\n"
  },
  {
    "path": "harper-core/tests/test_sources/lukas_homework.md",
    "content": "# Native American Assimilation and Activism Week Two Reflection\n\n> This is the first in a bi-weekly series that I will be publishing for my Native\nAmerican Assimilation and Activism class. Every two weeks we make posts\nsharing what we learned in the class. Unfortunately, due to weather in England I\nwas unable to make it back to the United States in time for the first lecture.\n\nOne of the key discussions in Monday's lecture/discussion was since time\nimmemorial and teaching around that. Time Immemorium is a period before\nhuman memory, and involved other human species, travel stories, and creation\nstories. Some of the key lessons I learned from that class were:\n\n* Humans branched from some common ancestor that had multiple other human species branch off\n    * We are not evolved from chimps but also have a shared ancestor\n* Many genetic evolutional specializations have to do with environmental adaptation\n    * Some of these adaptations were shared when isolated groups had visitors (Weaving rivers theory)\n    * Also related: Intergenerational Trauma\n\nOregon and Washington have been leading the country when it comes to\nintegrating Native Americans into their school curriculum. This includes\nadding Since Time Immemorium curriculum. These advances have the\npossibility to significantly improve the awareness and appreciation of Native\nAmerican Peoples who have and still live in these lands.\n"
  },
  {
    "path": "harper-core/tests/test_sources/misc_closed_compound_clean.md",
    "content": "It's hidden right here under the carpet.\n\nI got there after him. \n\nGo back there after dinner and finish it.\n\nWe've gotta go down right here.\n\nI hereby state that I got here by way of the \"issues\" link.\n\nIt's over there in that box.\n\nI'll still be here after work.\n\nI'll meet you here after work.\n"
  },
  {
    "path": "harper-core/tests/test_sources/obsidian_links.md",
    "content": "# Example Obsidian Links\n\nBelow, you will find a number of example links that Obsidian is able to process.\n\nThese should be treated as normal Markdown links.\nThe things inside the square brackets are visible and should be checked by Harper.\n\n[[Three lws of motion]]\n[Three las of motion](Three%20laws%20of%20motion.md)\n\n\nWikilinks allow you to replace the visible text with a pipe (|) operator.\nThe text to the left of the operator should be ignored.\n\n[[lnk tget|Link Text]]\n"
  },
  {
    "path": "harper-core/tests/test_sources/pr_452.md",
    "content": "Lets go and check if this lint let's us catch this class of errors.\n"
  },
  {
    "path": "harper-core/tests/test_sources/pr_504.md",
    "content": "These say \"This is in Greek/Georgian/Thai\" in those languages:\n\nΑυτό είναι στα ελληνικά.\nეს ქართულად.\nนี่มันภาษาไทย\n\nThis is English with misstakess.\n"
  },
  {
    "path": "harper-core/tests/test_sources/proper_noun_capitalization.md",
    "content": "Apple watch should have been capitalized here.\n\nSimilarly, amazon web seRVices should have been capitalized differently here.\n"
  },
  {
    "path": "harper-core/tests/test_sources/statist_localist.md",
    "content": "These villages run the gamut from statist too localist.\n\nTheir pedigree can be traced back to Plato, the father of statism.\n\nBut the localism of France at the time should not be underestimated.\n"
  },
  {
    "path": "harper-core/tests/test_sources/title_case_clean.md",
    "content": "# Here, We Try to Test Our Title-Casing Feature\n\nIt should only pay attention to headings.\n\n## Maybe It Works?\n\nThere will be a similar file with the corrected headings.\n"
  },
  {
    "path": "harper-core/tests/test_sources/title_case_errors.md",
    "content": "# Here, we try to test our title-casing feature\n\nIt should only pay attention to headings.\n\n## Maybe it works?\n\nThere will be a similar file with the corrected headings.\n"
  },
  {
    "path": "harper-core/tests/test_sources/whack_bullets.md",
    "content": "# This Is a Big Heading, with a Lot of Words\n\n- New here's a list, this part doesn't have as many words\n    - But this part does, it has so many words, more words than you could ever dream of\n      Just look at all those words\n        - So does this part, I might be overwhelmed with all these words\n            - This is an test to make sure it isn't crashing\n"
  },
  {
    "path": "harper-core/tests/test_sources/yogurt_british_clean.md",
    "content": "The following essay should produce no errors when Harper is set to British English.\n\nYoghurt, a simple yet remarkably versatile food, has a rich history that stretches back thousands of years. Originating from the ancient civilizations of the Middle East and Central Asia, yoghurt has transcended geographical boundaries, becoming a staple in diets around the globe.\n\nHistorically, yoghurt was discovered by chance, likely from milk stored in warm climates naturally turning into a cultured product. This process, involving beneficial bacteria, not only preserves milk but also enhances its nutritional value, digestibility, and flavour. Over centuries, yoghurt evolved from a basic dietary component into a diverse food enjoyed in numerous culinary traditions.\n\nThe versatility of yoghurt is evident in its varied uses across different cuisines. In Mediterranean and Middle Eastern dishes, yoghurt often accompanies savoury meals, acting as a refreshing complement to spicy flavours. Tzatziki, a blend of yoghurt, cucumber, garlic, and mint, exemplifies this culinary tradition. Similarly, Indian cuisine features yoghurt prominently, using it as the base for marinades.\n\nYoghurt is not just a savoury food; it is equally embraced in sweet dishes. Its creamy texture and tangy taste make it ideal for desserts, smoothies, and breakfast dishes. In European countries, yoghurt mixed with fresh fruit, granola, and honey is a popular breakfast or snack option, providing a nutritious and delicious start to the day.\n\nNutritionally, yoghurt is celebrated for its health benefits. It is rich in protein, calcium, vitamins, and probiotics—live bacteria that support digestive health and immune function. These beneficial bacteria contribute to maintaining a balanced gut microbiome, essential for overall wellness. The popularity of yoghurt has further increased with rising consumer awareness about gut health and nutrition, fuelling innovations in dairy and plant-based yoghurt alternatives.\n\nThe production methods of yoghurt have evolved significantly over time, from traditional artisanal practices to advanced industrial techniques. Modern yoghurt manufacturing employs precise control of temperature, bacterial cultures, and incubation processes to ensure consistent quality, taste, and nutritional content. Additionally, innovations in packaging and preservation have expanded yoghurt's accessibility and convenience, making it an ubiquitous presence in supermarkets worldwide.\n\nHowever, yoghurt production and consumption also present certain challenges. Concerns around sustainability, environmental impact, and ethical dairy farming practices have encouraged a shift toward organic and plant-based alternatives. This has spurred market growth for nondairy yoghurts made from ingredients such as coconut, almond, oat, and soy, reflecting evolving consumer preferences and dietary needs.\n\nIn conclusion, yoghurt is much more than a simple dairy product—it is a cultural and nutritional cornerstone that continues to adapt and thrive across global culinary traditions. Its enduring popularity is a testament to its delicious versatility, health benefits, and adaptability to changing dietary trends, ensuring yoghurt's continued prominence in diets around the world.\n\n"
  },
  {
    "path": "harper-core/tests/text/Alice's Adventures in Wonderland.md",
    "content": "# Alice’s Adventures in Wonderland\n\nby Lewis Carroll\n\nTHE MILLENNIUM FULCRUM EDITION 3.0\n\n## CHAPTER I: Down the Rabbit-Hole\n\nAlice was beginning to get very tired of sitting by her sister on the bank, and\nof having nothing to do: once or twice she had peeped into the book her sister\nwas reading, but it had no pictures or conversations in it, “and what is the use\nof a book,” thought Alice “without pictures or conversations?”\n\nSo she was considering in her own mind (as well as she could, for the hot day\nmade her feel very sleepy and stupid), whether the pleasure of making a\ndaisy-chain would be worth the trouble of getting up and picking the daisies,\nwhen suddenly a White Rabbit with pink eyes ran close by her.\n\nThere was nothing so very remarkable in that; nor did Alice think it so very\nmuch out of the way to hear the Rabbit say to itself, “Oh dear! Oh dear! I shall\nbe late!” (when she thought it over afterwards, it occurred to her that she\nought to have wondered at this, but at the time it all seemed quite natural);\nbut when the Rabbit actually took a watch out of its waistcoat-pocket, and\nlooked at it, and then hurried on, Alice started to her feet, for it flashed\nacross her mind that she had never before seen a rabbit with either a\nwaistcoat-pocket, or a watch to take out of it, and burning with curiosity, she\nran across the field after it, and fortunately was just in time to see it pop\ndown a large rabbit-hole under the hedge.\n\nIn another moment down went Alice after it, never once considering how in the\nworld she was to get out again.\n\nThe rabbit-hole went straight on like a tunnel for some way, and then dipped\nsuddenly down, so suddenly that Alice had not a moment to think about stopping\nherself before she found herself falling down a very deep well.\n\nEither the well was very deep, or she fell very slowly, for she had plenty of\ntime as she went down to look about her and to wonder what was going to happen\nnext. First, she tried to look down and make out what she was coming to, but it\nwas too dark to see anything; then she looked at the sides of the well, and\nnoticed that they were filled with cupboards and book-shelves; here and there\nshe saw maps and pictures hung upon pegs. She took down a jar from one of the\nshelves as she passed; it was labelled “ORANGE MARMALADE”, but to her great\ndisappointment it was empty: she did not like to drop the jar for fear of\nkilling somebody underneath, so managed to put it into one of the cupboards as\nshe fell past it.\n\n“Well!” thought Alice to herself, “after such a fall as this, I shall think\nnothing of tumbling down stairs! How brave they’ll all think me at home! Why, I\nwouldn’t say anything about it, even if I fell off the top of the house!” (Which\nwas very likely true.)\n\nDown, down, down. Would the fall never come to an end? “I wonder how many miles\nI’ve fallen by this time?” she said aloud. “I must be getting somewhere near the\ncentre of the earth. Let me see: that would be four thousand miles down, I\nthink—” (for, you see, Alice had learnt several things of this sort in her\nlessons in the schoolroom, and though this was not a very good opportunity for\nshowing off her knowledge, as there was no one to listen to her, still it was\ngood practice to say it over) “—yes, that’s about the right distance—but then I\nwonder what Latitude or Longitude I’ve got to?” (Alice had no idea what Latitude\nwas, or Longitude either, but thought they were nice grand words to say.)\n\nPresently she began again. “I wonder if I shall fall right through the earth!\nHow funny it’ll seem to come out among the people that walk with their heads\ndownward! The Antipathies, I think—” (she was rather glad there was no one\nlistening, this time, as it didn’t sound at all the right word) “—but I shall\nhave to ask them what the name of the country is, you know. Please, Ma’am, is\nthis New Zealand or Australia?” (and she tried to curtsey as she spoke—fancy\ncurtseying as you’re falling through the air! Do you think you could manage it?)\n“And what an ignorant little girl she’ll think me for asking! No, it’ll never do\nto ask: perhaps I shall see it written up somewhere.”\n\nDown, down, down. There was nothing else to do, so Alice soon began talking\nagain. “Dinah’ll miss me very much to-night, I should think!” (Dinah was the\ncat.) “I hope they’ll remember her saucer of milk at tea-time. Dinah my dear! I\nwish you were down here with me! There are no mice in the air, I’m afraid, but\nyou might catch a bat, and that’s very like a mouse, you know. But do cats eat\nbats, I wonder?” And here Alice began to get rather sleepy, and went on saying\nto herself, in a dreamy sort of way, “Do cats eat bats? Do cats eat bats?” and\nsometimes, “Do bats eat cats?” for, you see, as she couldn’t answer either\nquestion, it didn’t much matter which way she put it. She felt that she was\ndozing off, and had just begun to dream that she was walking hand in hand with\nDinah, and saying to her very earnestly, “Now, Dinah, tell me the truth: did you\never eat a bat?” when suddenly, thump! thump! down she came upon a heap of\nsticks and dry leaves, and the fall was over.\n\nAlice was not a bit hurt, and she jumped up on to her feet in a moment: she\nlooked up, but it was all dark overhead; before her was another long passage,\nand the White Rabbit was still in sight, hurrying down it. There was not a\nmoment to be lost: away went Alice like the wind, and was just in time to hear\nit say, as it turned a corner, “Oh my ears and whiskers, how late it’s getting!”\nShe was close behind it when she turned the corner, but the Rabbit was no longer\nto be seen: she found herself in a long, low hall, which was lit up by a row of\nlamps hanging from the roof.\n\nThere were doors all round the hall, but they were all locked; and when Alice\nhad been all the way down one side and up the other, trying every door, she\nwalked sadly down the middle, wondering how she was ever to get out again.\n\nSuddenly she came upon a little three-legged table, all made of solid glass;\nthere was nothing on it except a tiny golden key, and Alice’s first thought was\nthat it might belong to one of the doors of the hall; but, alas! either the\nlocks were too large, or the key was too small, but at any rate it would not\nopen any of them. However, on the second time round, she came upon a low curtain\nshe had not noticed before, and behind it was a little door about fifteen inches\nhigh: she tried the little golden key in the lock, and to her great delight it\nfitted!\n\nAlice opened the door and found that it led into a small passage, not much\nlarger than a rat-hole: she knelt down and looked along the passage into the\nloveliest garden you ever saw. How she longed to get out of that dark hall, and\nwander about among those beds of bright flowers and those cool fountains, but\nshe could not even get her head through the doorway; “and even if my head would\ngo through,” thought poor Alice, “it would be of very little use without my\nshoulders. Oh, how I wish I could shut up like a telescope! I think I could, if\nI only knew how to begin.” For, you see, so many out-of-the-way things had\nhappened lately, that Alice had begun to think that very few things indeed were\nreally impossible.\n\nThere seemed to be no use in waiting by the little door, so she went back to the\ntable, half hoping she might find another key on it, or at any rate a book of\nrules for shutting people up like telescopes: this time she found a little\nbottle on it, (“which certainly was not here before,” said Alice,) and round the\nneck of the bottle was a paper label, with the words “DRINK ME,” beautifully\nprinted on it in large letters.\n\nIt was all very well to say “Drink me,” but the wise little Alice was not going\nto do that in a hurry. “No, I’ll look first,” she said, “and see whether it’s\nmarked ‘poison’ or not”; for she had read several nice little histories about\nchildren who had got burnt, and eaten up by wild beasts and other unpleasant\nthings, all because they would not remember the simple rules their friends had\ntaught them: such as, that a red-hot poker will burn you if you hold it too\nlong; and that if you cut your finger very deeply with a knife, it usually\nbleeds; and she had never forgotten that, if you drink much from a bottle marked\n“poison,” it is almost certain to disagree with you, sooner or later.\n\nHowever, this bottle was not marked “poison,” so Alice ventured to taste it, and\nfinding it very nice, (it had, in fact, a sort of mixed flavour of cherry-tart,\ncustard, pine-apple, roast turkey, toffee, and hot buttered toast,) she very\nsoon finished it off.\n\n“What a curious feeling!” said Alice; “I must be shutting up like a telescope.”\n\nAnd so it was indeed: she was now only ten inches high, and her face brightened\nup at the thought that she was now the right size for going through the little\ndoor into that lovely garden. First, however, she waited for a few minutes to\nsee if she was going to shrink any further: she felt a little nervous about\nthis; “for it might end, you know,” said Alice to herself, “in my going out\naltogether, like a candle. I wonder what I should be like then?” And she tried\nto fancy what the flame of a candle is like after the candle is blown out, for\nshe could not remember ever having seen such a thing.\n\nAfter a while, finding that nothing more happened, she decided on going into the\ngarden at once; but, alas for poor Alice! when she got to the door, she found\nshe had forgotten the little golden key, and when she went back to the table for\nit, she found she could not possibly reach it: she could see it quite plainly\nthrough the glass, and she tried her best to climb up one of the legs of the\ntable, but it was too slippery; and when she had tired herself out with trying,\nthe poor little thing sat down and cried.\n\n“Come, there’s no use in crying like that!” said Alice to herself, rather\nsharply; “I advise you to leave off this minute!” She generally gave herself\nvery good advice, (though she very seldom followed it), and sometimes she\nscolded herself so severely as to bring tears into her eyes; and once she\nremembered trying to box her own ears for having cheated herself in a game of\ncroquet she was playing against herself, for this curious child was very fond of\npretending to be two people. “But it’s no use now,” thought poor Alice, “to\npretend to be two people! Why, there’s hardly enough of me left to make one\nrespectable person!”\n\nSoon her eye fell on a little glass box that was lying under the table: she\nopened it, and found in it a very small cake, on which the words “EAT ME” were\nbeautifully marked in currants. “Well, I’ll eat it,” said Alice, “and if it\nmakes me grow larger, I can reach the key; and if it makes me grow smaller, I\ncan creep under the door; so either way I’ll get into the garden, and I don’t\ncare which happens!”\n\nShe ate a little bit, and said anxiously to herself, “Which way? Which way?”,\nholding her hand on the top of her head to feel which way it was growing, and\nshe was quite surprised to find that she remained the same size: to be sure,\nthis generally happens when one eats cake, but Alice had got so much into the\nway of expecting nothing but out-of-the-way things to happen, that it seemed\nquite dull and stupid for life to go on in the common way.\n\nSo she set to work, and very soon finished off the cake.\n\n## CHAPTER II: The Pool of Tears\n\n“Curiouser and curiouser!” cried Alice (she was so much surprised, that for the\nmoment she quite forgot how to speak good English); “now I’m opening out like\nthe largest telescope that ever was! Good-bye, feet!” (for when she looked down\nat her feet, they seemed to be almost out of sight, they were getting so far\noff). “Oh, my poor little feet, I wonder who will put on your shoes and\nstockings for you now, dears? I’m sure I shan’t be able! I shall be a great deal\ntoo far off to trouble myself about you: you must manage the best way you\ncan;—but I must be kind to them,” thought Alice, “or perhaps they won’t walk the\nway I want to go! Let me see: I’ll give them a new pair of boots every\nChristmas.”\n\nAnd she went on planning to herself how she would manage it. “They must go by\nthe carrier,” she thought; “and how funny it’ll seem, sending presents to one’s\nown feet! And how odd the directions will look!\n\n> Alice’s Right Foot, Esq., Hearthrug, near the Fender, (with Alice’s love).\n\nOh dear, what nonsense I’m talking!”\n\nJust then her head struck against the roof of the hall: in fact she was now more\nthan nine feet high, and she at once took up the little golden key and hurried\noff to the garden door.\n\nPoor Alice! It was as much as she could do, lying down on one side, to look\nthrough into the garden with one eye; but to get through was more hopeless than\never: she sat down and began to cry again.\n\n“You ought to be ashamed of yourself,” said Alice, “a great girl like you,” (she\nmight well say this), “to go on crying in this way! Stop this moment, I tell\nyou!” But she went on all the same, shedding gallons of tears, until there was a\nlarge pool all round her, about four inches deep and reaching half down the\nhall.\n\nAfter a time she heard a little pattering of feet in the distance, and she\nhastily dried her eyes to see what was coming. It was the White Rabbit\nreturning, splendidly dressed, with a pair of white kid gloves in one hand and a\nlarge fan in the other: he came trotting along in a great hurry, muttering to\nhimself as he came, “Oh! the Duchess, the Duchess! Oh! won’t she be savage if\nI’ve kept her waiting!” Alice felt so desperate that she was ready to ask help\nof any one; so, when the Rabbit came near her, she began, in a low, timid voice,\n“If you please, sir—” The Rabbit started violently, dropped the white kid gloves\nand the fan, and skurried away into the darkness as hard as he could go.\n\nAlice took up the fan and gloves, and, as the hall was very hot, she kept\nfanning herself all the time she went on talking: “Dear, dear! How queer\neverything is to-day! And yesterday things went on just as usual. I wonder if\nI’ve been changed in the night? Let me think: was I the same when I got up this\nmorning? I almost think I can remember feeling a little different. But if I’m\nnot the same, the next question is, Who in the world am I? Ah, that’s the great\npuzzle!” And she began thinking over all the children she knew that were of the\nsame age as herself, to see if she could have been changed for any of them.\n\n“I’m sure I’m not Ada,” she said, “for her hair goes in such long ringlets, and\nmine doesn’t go in ringlets at all; and I’m sure I can’t be Mabel, for I know\nall sorts of things, and she, oh! she knows such a very little! Besides, she’s\nshe, and I’m I, and—oh dear, how puzzling it all is! I’ll try if I know all the\nthings I used to know. Let me see: four times five is twelve, and four times six\nis thirteen, and four times seven is—oh dear! I shall never get to twenty at\nthat rate! However, the Multiplication Table doesn’t signify: let’s try\nGeography. London is the capital of Paris, and Paris is the capital of Rome, and\nRome—no, that’s all wrong, I’m certain! I must have been changed for Mabel! I’ll\ntry and say ‘How doth the little—’” and she crossed her hands on her lap as if\nshe were saying lessons, and began to repeat it, but her voice sounded hoarse\nand strange, and the words did not come the same as they used to do:—\n\n> “How doth the little crocodile Improve his shining tail, And pour the waters\n> of the Nile On every golden scale!\n>\n> “How cheerfully he seems to grin, How neatly spread his claws, And welcome\n> little fishes in With gently smiling jaws!”\n\n“I’m sure those are not the right words,” said poor Alice, and her eyes filled\nwith tears again as she went on, “I must be Mabel after all, and I shall have to\ngo and live in that poky little house, and have next to no toys to play with,\nand oh! ever so many lessons to learn! No, I’ve made up my mind about it; if I’m\nMabel, I’ll stay down here! It’ll be no use their putting their heads down and\nsaying ‘Come up again, dear!’ I shall only look up and say ‘Who am I then? Tell\nme that first, and then, if I like being that person, I’ll come up: if not, I’ll\nstay down here till I’m somebody else’—but, oh dear!” cried Alice, with a sudden\nburst of tears, “I do wish they would put their heads down! I am so very tired\nof being all alone here!”\n\nAs she said this she looked down at her hands, and was surprised to see that she\nhad put on one of the Rabbit’s little white kid gloves while she was talking.\n“How can I have done that?” she thought. “I must be growing small again.” She\ngot up and went to the table to measure herself by it, and found that, as nearly\nas she could guess, she was now about two feet high, and was going on shrinking\nrapidly: she soon found out that the cause of this was the fan she was holding,\nand she dropped it hastily, just in time to avoid shrinking away altogether.\n\n“That was a narrow escape!” said Alice, a good deal frightened at the sudden\nchange, but very glad to find herself still in existence; “and now for the\ngarden!” and she ran with all speed back to the little door: but, alas! the\nlittle door was shut again, and the little golden key was lying on the glass\ntable as before, “and things are worse than ever,” thought the poor child, “for\nI never was so small as this before, never! And I declare it’s too bad, that it\nis!”\n\nAs she said these words her foot slipped, and in another moment, splash! she was\nup to her chin in salt water. Her first idea was that she had somehow fallen\ninto the sea, “and in that case I can go back by railway,” she said to herself.\n(Alice had been to the seaside once in her life, and had come to the general\nconclusion, that wherever you go to on the English coast you find a number of\nbathing machines in the sea, some children digging in the sand with wooden\nspades, then a row of lodging houses, and behind them a railway station.)\nHowever, she soon made out that she was in the pool of tears which she had wept\nwhen she was nine feet high.\n\n“I wish I hadn’t cried so much!” said Alice, as she swam about, trying to find\nher way out. “I shall be punished for it now, I suppose, by being drowned in my\nown tears! That will be a queer thing, to be sure! However, everything is queer\nto-day.”\n\nJust then she heard something splashing about in the pool a little way off, and\nshe swam nearer to make out what it was: at first she thought it must be a\nwalrus or hippopotamus, but then she remembered how small she was now, and she\nsoon made out that it was only a mouse that had slipped in like herself.\n\n“Would it be of any use, now,” thought Alice, “to speak to this mouse?\nEverything is so out-of-the-way down here, that I should think very likely it\ncan talk: at any rate, there’s no harm in trying.” So she began: “O Mouse, do\nyou know the way out of this pool? I am very tired of swimming about here, O\nMouse!” (Alice thought this must be the right way of speaking to a mouse: she\nhad never done such a thing before, but she remembered having seen in her\nbrother’s Latin Grammar, “A mouse—of a mouse—to a mouse—a mouse—O mouse!”) The\nMouse looked at her rather inquisitively, and seemed to her to wink with one of\nits little eyes, but it said nothing.\n\n“Perhaps it doesn’t understand English,” thought Alice; “I daresay it’s a French\nmouse, come over with William the Conqueror.” (For, with all her knowledge of\nhistory, Alice had no very clear notion how long ago anything had happened.) So\nshe began again: “Où est ma chatte?” which was the first sentence in her French\nlesson-book. The Mouse gave a sudden leap out of the water, and seemed to quiver\nall over with fright. “Oh, I beg your pardon!” cried Alice hastily, afraid that\nshe had hurt the poor animal’s feelings. “I quite forgot you didn’t like cats.”\n\n“Not like cats!” cried the Mouse, in a shrill, passionate voice. “Would you like\ncats if you were me?”\n\n“Well, perhaps not,” said Alice in a soothing tone: “don’t be angry about it.\nAnd yet I wish I could show you our cat Dinah: I think you’d take a fancy to\ncats if you could only see her. She is such a dear quiet thing,” Alice went on,\nhalf to herself, as she swam lazily about in the pool, “and she sits purring so\nnicely by the fire, licking her paws and washing her face—and she is such a nice\nsoft thing to nurse—and she’s such a capital one for catching mice—oh, I beg\nyour pardon!” cried Alice again, for this time the Mouse was bristling all over,\nand she felt certain it must be really offended. “We won’t talk about her any\nmore if you’d rather not.”\n\n“We indeed!” cried the Mouse, who was trembling down to the end of his tail. “As\nif I would talk on such a subject! Our family always hated cats: nasty, low,\nvulgar things! Don’t let me hear the name again!”\n\n“I won’t indeed!” said Alice, in a great hurry to change the subject of\nconversation. “Are you—are you fond—of—of dogs?” The Mouse did not answer, so\nAlice went on eagerly: “There is such a nice little dog near our house I should\nlike to show you! A little bright-eyed terrier, you know, with oh, such long\ncurly brown hair! And it’ll fetch things when you throw them, and it’ll sit up\nand beg for its dinner, and all sorts of things—I can’t remember half of\nthem—and it belongs to a farmer, you know, and he says it’s so useful, it’s\nworth a hundred pounds! He says it kills all the rats and—oh dear!” cried Alice\nin a sorrowful tone, “I’m afraid I’ve offended it again!” For the Mouse was\nswimming away from her as hard as it could go, and making quite a commotion in\nthe pool as it went.\n\nSo she called softly after it, “Mouse dear! Do come back again, and we won’t\ntalk about cats or dogs either, if you don’t like them!” When the Mouse heard\nthis, it turned round and swam slowly back to her: its face was quite pale (with\npassion, Alice thought), and it said in a low trembling voice, “Let us get to\nthe shore, and then I’ll tell you my history, and you’ll understand why it is I\nhate cats and dogs.”\n\nIt was high time to go, for the pool was getting quite crowded with the birds\nand animals that had fallen into it: there were a Duck and a Dodo, a Lory and an\nEaglet, and several other curious creatures. Alice led the way, and the whole\nparty swam to the shore.\n\n## CHAPTER III: A Caucus-Race and a Long Tale\n\nThey were indeed a queer-looking party that assembled on the bank—the birds with\ndraggled feathers, the animals with their fur clinging close to them, and all\ndripping wet, cross, and uncomfortable.\n\nThe first question of course was, how to get dry again: they had a consultation\nabout this, and after a few minutes it seemed quite natural to Alice to find\nherself talking familiarly with them, as if she had known them all her life.\nIndeed, she had quite a long argument with the Lory, who at last turned sulky,\nand would only say, “I am older than you, and must know better;” and this Alice\nwould not allow without knowing how old it was, and, as the Lory positively\nrefused to tell its age, there was no more to be said.\n\nAt last the Mouse, who seemed to be a person of authority among them, called\nout, “Sit down, all of you, and listen to me! I’ll soon make you dry enough!”\nThey all sat down at once, in a large ring, with the Mouse in the middle. Alice\nkept her eyes anxiously fixed on it, for she felt sure she would catch a bad\ncold if she did not get dry very soon.\n\n“Ahem!” said the Mouse with an important air, “are you all ready? This is the\ndriest thing I know. Silence all round, if you please! ‘William the Conqueror,\nwhose cause was favoured by the pope, was soon submitted to by the English, who\nwanted leaders, and had been of late much accustomed to usurpation and conquest.\nEdwin and Morcar, the earls of Mercia and Northumbria—’”\n\n“Ugh!” said the Lory, with a shiver.\n\n“I beg your pardon!” said the Mouse, frowning, but very politely: “Did you\nspeak?”\n\n“Not I!” said the Lory hastily.\n\n“I thought you did,” said the Mouse. “—I proceed. ‘Edwin and Morcar, the earls\nof Mercia and Northumbria, declared for him: and even Stigand, the patriotic\narchbishop of Canterbury, found it advisable—’”\n\n“Found what?” said the Duck.\n\n“Found it,” the Mouse replied rather crossly: “of course you know what ‘it’\nmeans.”\n\n“I know what ‘it’ means well enough, when I find a thing,” said the Duck: “it’s\ngenerally a frog or a worm. The question is, what did the archbishop find?”\n\nThe Mouse did not notice this question, but hurriedly went on, “‘—found it\nadvisable to go with Edgar Atheling to meet William and offer him the crown.\nWilliam’s conduct at first was moderate. But the insolence of his Normans—’ How\nare you getting on now, my dear?” it continued, turning to Alice as it spoke.\n\n“As wet as ever,” said Alice in a melancholy tone: “it doesn’t seem to dry me at\nall.”\n\n“In that case,” said the Dodo solemnly, rising to its feet, “I move that the\nmeeting adjourn, for the immediate adoption of more energetic remedies—”\n\n“Speak English!” said the Eaglet. “I don’t know the meaning of half those long\nwords, and, what’s more, I don’t believe you do either!” And the Eaglet bent\ndown its head to hide a smile: some of the other birds tittered audibly.\n\n“What I was going to say,” said the Dodo in an offended tone, “was, that the\nbest thing to get us dry would be a Caucus-race.”\n\n“What is a Caucus-race?” said Alice; not that she wanted much to know, but the\nDodo had paused as if it thought that somebody ought to speak, and no one else\nseemed inclined to say anything.\n\n“Why,” said the Dodo, “the best way to explain it is to do it.” (And, as you\nmight like to try the thing yourself, some winter day, I will tell you how the\nDodo managed it.)\n\nFirst it marked out a race-course, in a sort of circle, (“the exact shape\ndoesn’t matter,” it said,) and then all the party were placed along the course,\nhere and there. There was no “One, two, three, and away,” but they began running\nwhen they liked, and left off when they liked, so that it was not easy to know\nwhen the race was over. However, when they had been running half an hour or so,\nand were quite dry again, the Dodo suddenly called out “The race is over!” and\nthey all crowded round it, panting, and asking, “But who has won?”\n\nThis question the Dodo could not answer without a great deal of thought, and it\nsat for a long time with one finger pressed upon its forehead (the position in\nwhich you usually see Shakespeare, in the pictures of him), while the rest\nwaited in silence. At last the Dodo said, “Everybody has won, and all must have\nprizes.”\n\n“But who is to give the prizes?” quite a chorus of voices asked.\n\n“Why, she, of course,” said the Dodo, pointing to Alice with one finger; and the\nwhole party at once crowded round her, calling out in a confused way, “Prizes!\nPrizes!”\n\nAlice had no idea what to do, and in despair she put her hand in her pocket, and\npulled out a box of comfits, (luckily the salt water had not got into it), and\nhanded them round as prizes. There was exactly one a-piece, all round.\n\n“But she must have a prize herself, you know,” said the Mouse.\n\n“Of course,” the Dodo replied very gravely. “What else have you got in your\npocket?” he went on, turning to Alice.\n\n“Only a thimble,” said Alice sadly.\n\n“Hand it over here,” said the Dodo.\n\nThen they all crowded round her once more, while the Dodo solemnly presented the\nthimble, saying “We beg your acceptance of this elegant thimble;” and, when it\nhad finished this short speech, they all cheered.\n\nAlice thought the whole thing very absurd, but they all looked so grave that she\ndid not dare to laugh; and, as she could not think of anything to say, she\nsimply bowed, and took the thimble, looking as solemn as she could.\n\nThe next thing was to eat the comfits: this caused some noise and confusion, as\nthe large birds complained that they could not taste theirs, and the small ones\nchoked and had to be patted on the back. However, it was over at last, and they\nsat down again in a ring, and begged the Mouse to tell them something more.\n\n“You promised to tell me your history, you know,” said Alice, “and why it is you\nhate—C and D,” she added in a whisper, half afraid that it would be offended\nagain.\n\n“Mine is a long and a sad tale!” said the Mouse, turning to Alice, and sighing.\n\n“It is a long tail, certainly,” said Alice, looking down with wonder at the\nMouse’s tail; “but why do you call it sad?” And she kept on puzzling about it\nwhile the Mouse was speaking, so that her idea of the tale was something like\nthis:—\n\n>      “Fury said to a\n>      mouse, That he\n>     met in the\n>\n> house, ‘Let us both go to law: I will prosecute you.—Come, I’ll take no\n> denial; We must have a trial: For really this morning I’ve nothing to do.’\n> Said the mouse to the cur, ‘Such a trial, dear sir, With no jury or judge,\n> would be wasting our breath.’ ‘I’ll be judge, I’ll be jury,’ Said cunning old\n> Fury: ‘I’ll try the whole cause, and condemn you to death.’”\n\n“You are not attending!” said the Mouse to Alice severely. “What are you\nthinking of?”\n\n“I beg your pardon,” said Alice very humbly: “you had got to the fifth bend, I\nthink?”\n\n“I had not!” cried the Mouse, sharply and very angrily.\n\n“A knot!” said Alice, always ready to make herself useful, and looking anxiously\nabout her. “Oh, do let me help to undo it!”\n\n“I shall do nothing of the sort,” said the Mouse, getting up and walking away.\n“You insult me by talking such nonsense!”\n\n“I didn’t mean it!” pleaded poor Alice. “But you’re so easily offended, you\nknow!”\n\nThe Mouse only growled in reply.\n\n“Please come back and finish your story!” Alice called after it; and the others\nall joined in chorus, “Yes, please do!” but the Mouse only shook its head\nimpatiently, and walked a little quicker.\n\n“What a pity it wouldn’t stay!” sighed the Lory, as soon as it was quite out of\nsight; and an old Crab took the opportunity of saying to her daughter “Ah, my\ndear! Let this be a lesson to you never to lose your temper!” “Hold your tongue,\nMa!” said the young Crab, a little snappishly. “You’re enough to try the\npatience of an oyster!”\n\n“I wish I had our Dinah here, I know I do!” said Alice aloud, addressing nobody\nin particular. “She’d soon fetch it back!”\n\n“And who is Dinah, if I might venture to ask the question?” said the Lory.\n\nAlice replied eagerly, for she was always ready to talk about her pet: “Dinah’s\nour cat. And she’s such a capital one for catching mice you can’t think! And oh,\nI wish you could see her after the birds! Why, she’ll eat a little bird as soon\nas look at it!”\n\nThis speech caused a remarkable sensation among the party. Some of the birds\nhurried off at once: one old Magpie began wrapping itself up very carefully,\nremarking, “I really must be getting home; the night-air doesn’t suit my\nthroat!” and a Canary called out in a trembling voice to its children, “Come\naway, my dears! It’s high time you were all in bed!” On various pretexts they\nall moved off, and Alice was soon left alone.\n\n“I wish I hadn’t mentioned Dinah!” she said to herself in a melancholy tone.\n“Nobody seems to like her, down here, and I’m sure she’s the best cat in the\nworld! Oh, my dear Dinah! I wonder if I shall ever see you any more!” And here\npoor Alice began to cry again, for she felt very lonely and low-spirited. In a\nlittle while, however, she again heard a little pattering of footsteps in the\ndistance, and she looked up eagerly, half hoping that the Mouse had changed his\nmind, and was coming back to finish his story.\n\n## CHAPTER IV: The Rabbit Sends in a Little Bill\n\nIt was the White Rabbit, trotting slowly back again, and looking anxiously about\nas it went, as if it had lost something; and she heard it muttering to itself\n“The Duchess! The Duchess! Oh my dear paws! Oh my fur and whiskers! She’ll get\nme executed, as sure as ferrets are ferrets! Where can I have dropped them, I\nwonder?” Alice guessed in a moment that it was looking for the fan and the pair\nof white kid gloves, and she very good-naturedly began hunting about for them,\nbut they were nowhere to be seen—everything seemed to have changed since her\nswim in the pool, and the great hall, with the glass table and the little door,\nhad vanished completely.\n\nVery soon the Rabbit noticed Alice, as she went hunting about, and called out to\nher in an angry tone, “Why, Mary Ann, what are you doing out here? Run home this\nmoment, and fetch me a pair of gloves and a fan! Quick, now!” And Alice was so\nmuch frightened that she ran off at once in the direction it pointed to, without\ntrying to explain the mistake it had made.\n\n“He took me for his housemaid,” she said to herself as she ran. “How surprised\nhe’ll be when he finds out who I am! But I’d better take him his fan and\ngloves—that is, if I can find them.” As she said this, she came upon a neat\nlittle house, on the door of which was a bright brass plate with the name “W.\nRABBIT,” engraved upon it. She went in without knocking, and hurried upstairs,\nin great fear lest she should meet the real Mary Ann, and be turned out of the\nhouse before she had found the fan and gloves.\n\n“How queer it seems,” Alice said to herself, “to be going messages for a rabbit!\nI suppose Dinah’ll be sending me on messages next!” And she began fancying the\nsort of thing that would happen: “‘Miss Alice! Come here directly, and get ready\nfor your walk!’ ‘Coming in a minute, nurse! But I’ve got to see that the mouse\ndoesn’t get out.’ Only I don’t think,” Alice went on, “that they’d let Dinah\nstop in the house if it began ordering people about like that!”\n\nBy this time she had found her way into a tidy little room with a table in the\nwindow, and on it (as she had hoped) a fan and two or three pairs of tiny white\nkid gloves: she took up the fan and a pair of the gloves, and was just going to\nleave the room, when her eye fell upon a little bottle that stood near the\nlooking-glass. There was no label this time with the words “DRINK ME,” but\nnevertheless she uncorked it and put it to her lips. “I know something\ninteresting is sure to happen,” she said to herself, “whenever I eat or drink\nanything; so I’ll just see what this bottle does. I do hope it’ll make me grow\nlarge again, for really I’m quite tired of being such a tiny little thing!”\n\nIt did so indeed, and much sooner than she had expected: before she had drunk\nhalf the bottle, she found her head pressing against the ceiling, and had to\nstoop to save her neck from being broken. She hastily put down the bottle,\nsaying to herself “That’s quite enough—I hope I shan’t grow any more—As it is, I\ncan’t get out at the door—I do wish I hadn’t drunk quite so much!”\n\nAlas! it was too late to wish that! She went on growing, and growing, and very\nsoon had to kneel down on the floor: in another minute there was not even room\nfor this, and she tried the effect of lying down with one elbow against the\ndoor, and the other arm curled round her head. Still she went on growing, and,\nas a last resource, she put one arm out of the window, and one foot up the\nchimney, and said to herself “Now I can do no more, whatever happens. What will\nbecome of me?”\n\nLuckily for Alice, the little magic bottle had now had its full effect, and she\ngrew no larger: still it was very uncomfortable, and, as there seemed to be no\nsort of chance of her ever getting out of the room again, no wonder she felt\nunhappy.\n\n“It was much pleasanter at home,” thought poor Alice, “when one wasn’t always\ngrowing larger and smaller, and being ordered about by mice and rabbits. I\nalmost wish I hadn’t gone down that rabbit-hole—and yet—and yet—it’s rather\ncurious, you know, this sort of life! I do wonder what can have happened to me!\nWhen I used to read fairy-tales, I fancied that kind of thing never happened,\nand now here I am in the middle of one! There ought to be a book written about\nme, that there ought! And when I grow up, I’ll write one—but I’m grown up now,”\nshe added in a sorrowful tone; “at least there’s no room to grow up any more\nhere.”\n\n“But then,” thought Alice, “shall I never get any older than I am now? That’ll\nbe a comfort, one way—never to be an old woman—but then—always to have lessons\nto learn! Oh, I shouldn’t like that!”\n\n“Oh, you foolish Alice!” she answered herself. “How can you learn lessons in\nhere? Why, there’s hardly room for you, and no room at all for any\nlesson-books!”\n\nAnd so she went on, taking first one side and then the other, and making quite a\nconversation of it altogether; but after a few minutes she heard a voice\noutside, and stopped to listen.\n\n“Mary Ann! Mary Ann!” said the voice. “Fetch me my gloves this moment!” Then\ncame a little pattering of feet on the stairs. Alice knew it was the Rabbit\ncoming to look for her, and she trembled till she shook the house, quite\nforgetting that she was now about a thousand times as large as the Rabbit, and\nhad no reason to be afraid of it.\n\nPresently the Rabbit came up to the door, and tried to open it; but, as the door\nopened inwards, and Alice’s elbow was pressed hard against it, that attempt\nproved a failure. Alice heard it say to itself “Then I’ll go round and get in at\nthe window.”\n\n“That you won’t!” thought Alice, and, after waiting till she fancied she heard\nthe Rabbit just under the window, she suddenly spread out her hand, and made a\nsnatch in the air. She did not get hold of anything, but she heard a little\nshriek and a fall, and a crash of broken glass, from which she concluded that it\nwas just possible it had fallen into a cucumber-frame, or something of the sort.\n\nNext came an angry voice—the Rabbit’s—“Pat! Pat! Where are you?” And then a\nvoice she had never heard before, “Sure then I’m here! Digging for apples, yer\nhonour!”\n\n“Digging for apples, indeed!” said the Rabbit angrily. “Here! Come and help me\nout of this!” (Sounds of more broken glass.)\n\n“Now tell me, Pat, what’s that in the window?”\n\n“Sure, it’s an arm, yer honour!” (He pronounced it “arrum.”)\n\n“An arm, you goose! Who ever saw one that size? Why, it fills the whole window!”\n\n“Sure, it does, yer honour: but it’s an arm for all that.”\n\n“Well, it’s got no business there, at any rate: go and take it away!”\n\nThere was a long silence after this, and Alice could only hear whispers now and\nthen; such as, “Sure, I don’t like it, yer honour, at all, at all!” “Do as I\ntell you, you coward!” and at last she spread out her hand again, and made\nanother snatch in the air. This time there were two little shrieks, and more\nsounds of broken glass. “What a number of cucumber-frames there must be!”\nthought Alice. “I wonder what they’ll do next! As for pulling me out of the\nwindow, I only wish they could! I’m sure I don’t want to stay in here any\nlonger!”\n\nShe waited for some time without hearing anything more: at last came a rumbling\nof little cartwheels, and the sound of a good many voices all talking together:\nshe made out the words: “Where’s the other ladder?—Why, I hadn’t to bring but\none; Bill’s got the other—Bill! fetch it here, lad!—Here, put ’em up at this\ncorner—No, tie ’em together first—they don’t reach half high enough yet—Oh!\nthey’ll do well enough; don’t be particular—Here, Bill! catch hold of this\nrope—Will the roof bear?—Mind that loose slate—Oh, it’s coming down! Heads\nbelow!” (a loud crash)—“Now, who did that?—It was Bill, I fancy—Who’s to go down\nthe chimney?—Nay, I shan’t! You do it!—That I won’t, then!—Bill’s to go\ndown—Here, Bill! the master says you’re to go down the chimney!”\n\n“Oh! So Bill’s got to come down the chimney, has he?” said Alice to herself.\n“Shy, they seem to put everything upon Bill! I wouldn’t be in Bill’s place for a\ngood deal: this fireplace is narrow, to be sure; but I think I can kick a\nlittle!”\n\nShe drew her foot as far down the chimney as she could, and waited till she\nheard a little animal (she couldn’t guess of what sort it was) scratching and\nscrambling about in the chimney close above her: then, saying to herself “This\nis Bill,” she gave one sharp kick, and waited to see what would happen next.\n\nThe first thing she heard was a general chorus of “There goes Bill!” then the\nRabbit’s voice along—“Catch him, you by the hedge!” then silence, and then\nanother confusion of voices—“Hold up his head—Brandy now—Don’t choke him—How was\nit, old fellow? What happened to you? Tell us all about it!”\n\nLast came a little feeble, squeaking voice, (“That’s Bill,” thought Alice,)\n“Well, I hardly know—No more, thank ye; I’m better now—but I’m a deal too\nflustered to tell you—all I know is, something comes at me like a\nJack-in-the-box, and up I goes like a sky-rocket!”\n\n“So you did, old fellow!” said the others.\n\n“We must burn the house down!” said the Rabbit’s voice; and Alice called out as\nloud as she could, “If you do, I’ll set Dinah at you!”\n\nThere was a dead silence instantly, and Alice thought to herself, “I wonder what\nthey will do next! If they had any sense, they’d take the roof off.” After a\nminute or two, they began moving about again, and Alice heard the Rabbit say, “A\nbarrowful will do, to begin with.”\n\n“A barrowful of what?” thought Alice; but she had not long to doubt, for the\nnext moment a shower of little pebbles came rattling in at the window, and some\nof them hit her in the face. “I’ll put a stop to this,” she said to herself, and\nshouted out, “You’d better not do that again!” which produced another dead\nsilence.\n\nAlice noticed with some surprise that the pebbles were all turning into little\ncakes as they lay on the floor, and a bright idea came into her head. “If I eat\none of these cakes,” she thought, “it’s sure to make some change in my size; and\nas it can’t possibly make me larger, it must make me smaller, I suppose.”\n\nSo she swallowed one of the cakes, and was delighted to find that she began\nshrinking directly. As soon as she was small enough to get through the door, she\nran out of the house, and found quite a crowd of little animals and birds\nwaiting outside. The poor little Lizard, Bill, was in the middle, being held up\nby two guinea-pigs, who were giving it something out of a bottle. They all made\na rush at Alice the moment she appeared; but she ran off as hard as she could,\nand soon found herself safe in a thick wood.\n\n“The first thing I’ve got to do,” said Alice to herself, as she wandered about\nin the wood, “is to grow to my right size again; and the second thing is to find\nmy way into that lovely garden. I think that will be the best plan.”\n\nIt sounded an excellent plan, no doubt, and very neatly and simply arranged; the\nonly difficulty was, that she had not the smallest idea how to set about it; and\nwhile she was peering about anxiously among the trees, a little sharp bark just\nover her head made her look up in a great hurry.\n\nAn enormous puppy was looking down at her with large round eyes, and feebly\nstretching out one paw, trying to touch her. “Poor little thing!” said Alice, in\na coaxing tone, and she tried hard to whistle to it; but she was terribly\nfrightened all the time at the thought that it might be hungry, in which case it\nwould be very likely to eat her up in spite of all her coaxing.\n\nHardly knowing what she did, she picked up a little bit of stick, and held it\nout to the puppy; whereupon the puppy jumped into the air off all its feet at\nonce, with a yelp of delight, and rushed at the stick, and made believe to worry\nit; then Alice dodged behind a great thistle, to keep herself from being run\nover; and the moment she appeared on the other side, the puppy made another rush\nat the stick, and tumbled head over heels in its hurry to get hold of it; then\nAlice, thinking it was very like having a game of play with a cart-horse, and\nexpecting every moment to be trampled under its feet, ran round the thistle\nagain; then the puppy began a series of short charges at the stick, running a\nvery little way forwards each time and a long way back, and barking hoarsely all\nthe while, till at last it sat down a good way off, panting, with its tongue\nhanging out of its mouth, and its great eyes half shut.\n\nThis seemed to Alice a good opportunity for making her escape; so she set off at\nonce, and ran till she was quite tired and out of breath, and till the puppy’s\nbark sounded quite faint in the distance.\n\n“And yet what a dear little puppy it was!” said Alice, as she leant against a\nbuttercup to rest herself, and fanned herself with one of the leaves: “I should\nhave liked teaching it tricks very much, if—if I’d only been the right size to\ndo it! Oh dear! I’d nearly forgotten that I’ve got to grow up again! Let me\nsee—how is it to be managed? I suppose I ought to eat or drink something or\nother; but the great question is, what?”\n\nThe great question certainly was, what? Alice looked all round her at the\nflowers and the blades of grass, but she did not see anything that looked like\nthe right thing to eat or drink under the circumstances. There was a large\nmushroom growing near her, about the same height as herself; and when she had\nlooked under it, and on both sides of it, and behind it, it occurred to her that\nshe might as well look and see what was on the top of it.\n\nShe stretched herself up on tiptoe, and peeped over the edge of the mushroom,\nand her eyes immediately met those of a large blue caterpillar, that was sitting\non the top with its arms folded, quietly smoking a long hookah, and taking not\nthe smallest notice of her or of anything else.\n\n## CHAPTER V: Advice from a Caterpillar\n\nThe Caterpillar and Alice looked at each other for some time in silence: at last\nthe Caterpillar took the hookah out of its mouth, and addressed her in a\nlanguid, sleepy voice.\n\n“Who are you?” said the Caterpillar.\n\nThis was not an encouraging opening for a conversation. Alice replied, rather\nshyly, “I—I hardly know, sir, just at present—at least I know who I was when I\ngot up this morning, but I think I must have been changed several times since\nthen.”\n\n“What do you mean by that?” said the Caterpillar sternly. “Explain yourself!”\n\n“I can’t explain myself, I’m afraid, sir,” said Alice, “because I’m not myself,\nyou see.”\n\n“I don’t see,” said the Caterpillar.\n\n“I’m afraid I can’t put it more clearly,” Alice replied very politely, “for I\ncan’t understand it myself to begin with; and being so many different sizes in a\nday is very confusing.”\n\n“It isn’t,” said the Caterpillar.\n\n“Well, perhaps you haven’t found it so yet,” said Alice; “but when you have to\nturn into a chrysalis—you will some day, you know—and then after that into a\nbutterfly, I should think you’ll feel it a little queer, won’t you?”\n\n“Not a bit,” said the Caterpillar.\n\n“Well, perhaps your feelings may be different,” said Alice; “all I know is, it\nwould feel very queer to me.”\n\n“You!” said the Caterpillar contemptuously. “Who are you?”\n\nWhich brought them back again to the beginning of the conversation. Alice felt a\nlittle irritated at the Caterpillar’s making such very short remarks, and she\ndrew herself up and said, very gravely, “I think, you ought to tell me who you\nare, first.”\n\n“Why?” said the Caterpillar.\n\nHere was another puzzling question; and as Alice could not think of any good\nreason, and as the Caterpillar seemed to be in a very unpleasant state of mind,\nshe turned away.\n\n“Come back!” the Caterpillar called after her. “I’ve something important to\nsay!”\n\nThis sounded promising, certainly: Alice turned and came back again.\n\n“Keep your temper,” said the Caterpillar.\n\n“Is that all?” said Alice, swallowing down her anger as well as she could.\n\n“No,” said the Caterpillar.\n\nAlice thought she might as well wait, as she had nothing else to do, and perhaps\nafter all it might tell her something worth hearing. For some minutes it puffed\naway without speaking, but at last it unfolded its arms, took the hookah out of\nits mouth again, and said, “So you think you’re changed, do you?”\n\n“I’m afraid I am, sir,” said Alice; “I can’t remember things as I used—and I\ndon’t keep the same size for ten minutes together!”\n\n“Can’t remember what things?” said the Caterpillar.\n\n“Well, I’ve tried to say “How doth the little busy bee,” but it all came\ndifferent!” Alice replied in a very melancholy voice.\n\n“Repeat, “You are old, Father William,’” said the Caterpillar.\n\nAlice folded her hands, and began:—\n\n> “You are old, Father William,” the young man said, “And your hair has become\n> very white; And yet you incessantly stand on your head— Do you think, at your\n> age, it is right?”\n>\n> “In my youth,” Father William replied to his son, “I feared it might injure\n> the brain; But, now that I’m perfectly sure I have none, Why, I do it again\n> and again.”\n>\n> “You are old,” said the youth, “as I mentioned before, And have grown most\n> uncommonly fat; Yet you turned a back-somersault in at the door— Pray, what is\n> the reason of that?”\n>\n> “In my youth,” said the sage, as he shook his grey locks, “I kept all my limbs\n> very supple By the use of this ointment—one shilling the box— Allow me to sell\n> you a couple?”\n>\n> “You are old,” said the youth, “and your jaws are too weak For anything\n> tougher than suet; Yet you finished the goose, with the bones and the beak—\n> Pray, how did you manage to do it?”\n>\n> “In my youth,” said his father, “I took to the law, And argued each case with\n> my wife; And the muscular strength, which it gave to my jaw, Has lasted the\n> rest of my life.”\n>\n> “You are old,” said the youth, “one would hardly suppose That your eye was as\n> steady as ever; Yet you balanced an eel on the end of your nose— What made you\n> so awfully clever?”\n>\n> “I have answered three questions, and that is enough,” Said his father; “don’t\n> give yourself airs! Do you think I can listen all day to such stuff? Be off,\n> or I’ll kick you down stairs!”\n\n“That is not said right,” said the Caterpillar.\n\n“Not quite right, I’m afraid,” said Alice, timidly; “some of the words have got\naltered.”\n\n“It is wrong from beginning to end,” said the Caterpillar decidedly, and there\nwas silence for some minutes.\n\nThe Caterpillar was the first to speak.\n\n“What size do you want to be?” it asked.\n\n“Oh, I’m not particular as to size,” Alice hastily replied; “only one doesn’t\nlike changing so often, you know.”\n\n“I don’t know,” said the Caterpillar.\n\nAlice said nothing: she had never been so much contradicted in her life before,\nand she felt that she was losing her temper.\n\n“Are you content now?” said the Caterpillar.\n\n“Well, I should like to be a little larger, sir, if you wouldn’t mind,” said\nAlice: “three inches is such a wretched height to be.”\n\n“It is a very good height indeed!” said the Caterpillar angrily, rearing itself\nupright as it spoke (it was exactly three inches high).\n\n“But I’m not used to it!” pleaded poor Alice in a piteous tone. And she thought\nof herself, “I wish the creatures wouldn’t be so easily offended!”\n\n“You’ll get used to it in time,” said the Caterpillar; and it put the hookah\ninto its mouth and began smoking again.\n\nThis time Alice waited patiently until it chose to speak again. In a minute or\ntwo the Caterpillar took the hookah out of its mouth and yawned once or twice,\nand shook itself. Then it got down off the mushroom, and crawled away in the\ngrass, merely remarking as it went, “One side will make you grow taller, and the\nother side will make you grow shorter.”\n\n“One side of what? The other side of what?” thought Alice to herself.\n\n“Of the mushroom,” said the Caterpillar, just as if she had asked it aloud; and\nin another moment it was out of sight.\n\nAlice remained looking thoughtfully at the mushroom for a minute, trying to make\nout which were the two sides of it; and as it was perfectly round, she found\nthis a very difficult question. However, at last she stretched her arms round it\nas far as they would go, and broke off a bit of the edge with each hand.\n\n“And now which is which?” she said to herself, and nibbled a little of the\nright-hand bit to try the effect: the next moment she felt a violent blow\nunderneath her chin: it had struck her foot!\n\nShe was a good deal frightened by this very sudden change, but she felt that\nthere was no time to be lost, as she was shrinking rapidly; so she set to work\nat once to eat some of the other bit. Her chin was pressed so closely against\nher foot, that there was hardly room to open her mouth; but she did it at last,\nand managed to swallow a morsel of the lefthand bit.\n\n“Come, my head’s free at last!” said Alice in a tone of delight, which changed\ninto alarm in another moment, when she found that her shoulders were nowhere to\nbe found: all she could see, when she looked down, was an immense length of\nneck, which seemed to rise like a stalk out of a sea of green leaves that lay\nfar below her.\n\n“What can all that green stuff be?” said Alice. “And where have my shoulders got\nto? And oh, my poor hands, how is it I can’t see you?” She was moving them about\nas she spoke, but no result seemed to follow, except a little shaking among the\ndistant green leaves.\n\nAs there seemed to be no chance of getting her hands up to her head, she tried\nto get her head down to them, and was delighted to find that her neck would bend\nabout easily in any direction, like a serpent. She had just succeeded in curving\nit down into a graceful zigzag, and was going to dive in among the leaves, which\nshe found to be nothing but the tops of the trees under which she had been\nwandering, when a sharp hiss made her draw back in a hurry: a large pigeon had\nflown into her face, and was beating her violently with its wings.\n\n“Serpent!” screamed the Pigeon.\n\n“I’m not a serpent!” said Alice indignantly. “Let me alone!”\n\n“Serpent, I say again!” repeated the Pigeon, but in a more subdued tone, and\nadded with a kind of sob, “I’ve tried every way, and nothing seems to suit\nthem!”\n\n“I haven’t the least idea what you’re talking about,” said Alice.\n\n“I’ve tried the roots of trees, and I’ve tried banks, and I’ve tried hedges,”\nthe Pigeon went on, without attending to her; “but those serpents! There’s no\npleasing them!”\n\nAlice was more and more puzzled, but she thought there was no use in saying\nanything more till the Pigeon had finished.\n\n“As if it wasn’t trouble enough hatching the eggs,” said the Pigeon; “but I must\nbe on the look-out for serpents night and day! Why, I haven’t had a wink of\nsleep these three weeks!”\n\n“I’m very sorry you’ve been annoyed,” said Alice, who was beginning to see its\nmeaning.\n\n“And just as I’d taken the highest tree in the wood,” continued the Pigeon,\nraising its voice to a shriek, “and just as I was thinking I should be free of\nthem at last, they must needs come wriggling down from the sky! Ugh, Serpent!”\n\n“But I’m not a serpent, I tell you!” said Alice. “I’m a—I’m a—”\n\n“Well! What are you?” said the Pigeon. “I can see you’re trying to invent\nsomething!”\n\n“I—I’m a little girl,” said Alice, rather doubtfully, as she remembered the\nnumber of changes she had gone through that day.\n\n“A likely story indeed!” said the Pigeon in a tone of the deepest contempt.\n“I’ve seen a good many little girls in my time, but never one with such a neck\nas that! No, no! You’re a serpent; and there’s no use denying it. I suppose\nyou’ll be telling me next that you never tasted an egg!”\n\n“I have tasted eggs, certainly,” said Alice, who was a very truthful child; “but\nlittle girls eat eggs quite as much as serpents do, you know.”\n\n“I don’t believe it,” said the Pigeon; “but if they do, why then they’re a kind\nof serpent, that’s all I can say.”\n\nThis was such a new idea to Alice, that she was quite silent for a minute or\ntwo, which gave the Pigeon the opportunity of adding, “You’re looking for eggs,\nI know that well enough; and what does it matter to me whether you’re a little\ngirl or a serpent?”\n\n“It matters a good deal to me,” said Alice hastily; “but I’m not looking for\neggs, as it happens; and if I was, I shouldn’t want yours: I don’t like them\nraw.”\n\n“Well, be off, then!” said the Pigeon in a sulky tone, as it settled down again\ninto its nest. Alice crouched down among the trees as well as she could, for her\nneck kept getting entangled among the branches, and every now and then she had\nto stop and untwist it. After a while she remembered that she still held the\npieces of mushroom in her hands, and she set to work very carefully, nibbling\nfirst at one and then at the other, and growing sometimes taller and sometimes\nshorter, until she had succeeded in bringing herself down to her usual height.\n\nIt was so long since she had been anything near the right size, that it felt\nquite strange at first; but she got used to it in a few minutes, and began\ntalking to herself, as usual. “Come, there’s half my plan done now! How puzzling\nall these changes are! I’m never sure what I’m going to be, from one minute to\nanother! However, I’ve got back to my right size: the next thing is, to get into\nthat beautiful garden—how is that to be done, I wonder?” As she said this, she\ncame suddenly upon an open place, with a little house in it about four feet\nhigh. “Whoever lives there,” thought Alice, “it’ll never do to come upon them\nthis size: why, I should frighten them out of their wits!” So she began nibbling\nat the righthand bit again, and did not venture to go near the house till she\nhad brought herself down to nine inches high.\n\n## CHAPTER VI: Pig and Pepper\n\nFor a minute or two she stood looking at the house, and wondering what to do\nnext, when suddenly a footman in livery came running out of the wood—(she\nconsidered him to be a footman because he was in livery: otherwise, judging by\nhis face only, she would have called him a fish)—and rapped loudly at the door\nwith his knuckles. It was opened by another footman in livery, with a round\nface, and large eyes like a frog; and both footmen, Alice noticed, had powdered\nhair that curled all over their heads. She felt very curious to know what it was\nall about, and crept a little way out of the wood to listen.\n\nThe Fish-Footman began by producing from under his arm a great letter, nearly as\nlarge as himself, and this he handed over to the other, saying, in a solemn\ntone, “For the Duchess. An invitation from the Queen to play croquet.” The\nFrog-Footman repeated, in the same solemn tone, only changing the order of the\nwords a little, “From the Queen. An invitation for the Duchess to play croquet.”\n\nThen they both bowed low, and their curls got entangled together.\n\nAlice laughed so much at this, that she had to run back into the wood for fear\nof their hearing her; and when she next peeped out the Fish-Footman was gone,\nand the other was sitting on the ground near the door, staring stupidly up into\nthe sky.\n\nAlice went timidly up to the door, and knocked.\n\n“There’s no sort of use in knocking,” said the Footman, “and that for two\nreasons. First, because I’m on the same side of the door as you are; secondly,\nbecause they’re making such a noise inside, no one could possibly hear you.” And\ncertainly there was a most extraordinary noise going on within—a constant\nhowling and sneezing, and every now and then a great crash, as if a dish or\nkettle had been broken to pieces.\n\n“Please, then,” said Alice, “how am I to get in?”\n\n“There might be some sense in your knocking,” the Footman went on without\nattending to her, “if we had the door between us. For instance, if you were\ninside, you might knock, and I could let you out, you know.” He was looking up\ninto the sky all the time he was speaking, and this Alice thought decidedly\nuncivil. “But perhaps he can’t help it,” she said to herself; “his eyes are so\nvery nearly at the top of his head. But at any rate he might answer\nquestions.—How am I to get in?” she repeated, aloud.\n\n“I shall sit here,” the Footman remarked, “till tomorrow—”\n\nAt this moment the door of the house opened, and a large plate came skimming\nout, straight at the Footman’s head: it just grazed his nose, and broke to\npieces against one of the trees behind him.\n\n“—or next day, maybe,” the Footman continued in the same tone, exactly as if\nnothing had happened.\n\n“How am I to get in?” asked Alice again, in a louder tone.\n\n“Are you to get in at all?” said the Footman. “That’s the first question, you\nknow.”\n\nIt was, no doubt: only Alice did not like to be told so. “It’s really dreadful,”\nshe muttered to herself, “the way all the creatures argue. It’s enough to drive\none crazy!”\n\nThe Footman seemed to think this a good opportunity for repeating his remark,\nwith variations. “I shall sit here,” he said, “on and off, for days and days.”\n\n“But what am I to do?” said Alice.\n\n“Anything you like,” said the Footman, and began whistling.\n\n“Oh, there’s no use in talking to him,” said Alice desperately: “he’s perfectly\nidiotic!” And she opened the door and went in.\n\nThe door led right into a large kitchen, which was full of smoke from one end to\nthe other: the Duchess was sitting on a three-legged stool in the middle,\nnursing a baby; the cook was leaning over the fire, stirring a large cauldron\nwhich seemed to be full of soup.\n\n“There’s certainly too much pepper in that soup!” Alice said to herself, as well\nas she could for sneezing.\n\nThere was certainly too much of it in the air. Even the Duchess sneezed\noccasionally; and as for the baby, it was sneezing and howling alternately\nwithout a moment’s pause. The only things in the kitchen that did not sneeze,\nwere the cook, and a large cat which was sitting on the hearth and grinning from\near to ear.\n\n“Please would you tell me,” said Alice, a little timidly, for she was not quite\nsure whether it was good manners for her to speak first, “why your cat grins\nlike that?”\n\n“It’s a Cheshire cat,” said the Duchess, “and that’s why. Pig!”\n\nShe said the last word with such sudden violence that Alice quite jumped; but\nshe saw in another moment that it was addressed to the baby, and not to her, so\nshe took courage, and went on again:—\n\n“I didn’t know that Cheshire cats always grinned; in fact, I didn’t know that\ncats could grin.”\n\n“They all can,” said the Duchess; “and most of ’em do.”\n\n“I don’t know of any that do,” Alice said very politely, feeling quite pleased\nto have got into a conversation.\n\n“You don’t know much,” said the Duchess; “and that’s a fact.”\n\nAlice did not at all like the tone of this remark, and thought it would be as\nwell to introduce some other subject of conversation. While she was trying to\nfix on one, the cook took the cauldron of soup off the fire, and at once set to\nwork throwing everything within her reach at the Duchess and the baby—the\nfire-irons came first; then followed a shower of saucepans, plates, and dishes.\nThe Duchess took no notice of them even when they hit her; and the baby was\nhowling so much already, that it was quite impossible to say whether the blows\nhurt it or not.\n\n“Oh, please mind what you’re doing!” cried Alice, jumping up and down in an\nagony of terror. “Oh, there goes his precious nose!” as an unusually large\nsaucepan flew close by it, and very nearly carried it off.\n\n“If everybody minded their own business,” the Duchess said in a hoarse growl,\n“the world would go round a deal faster than it does.”\n\n“Which would not be an advantage,” said Alice, who felt very glad to get an\nopportunity of showing off a little of her knowledge. “Just think of what work\nit would make with the day and night! You see the earth takes twenty-four hours\nto turn round on its axis—”\n\n“Talking of axes,” said the Duchess, “chop off her head!”\n\nAlice glanced rather anxiously at the cook, to see if she meant to take the\nhint; but the cook was busily stirring the soup, and seemed not to be listening,\nso she went on again: “Twenty-four hours, I think; or is it twelve? I—”\n\n“Oh, don’t bother me,” said the Duchess; “I never could abide figures!” And with\nthat she began nursing her child again, singing a sort of lullaby to it as she\ndid so, and giving it a violent shake at the end of every line:\n\n> “Speak roughly to your little boy, And beat him when he sneezes: He only does\n> it to annoy, Because he knows it teases.”\n\nCHORUS. (In which the cook and the baby joined):\n\n> “Wow! wow! wow!”\n\nWhile the Duchess sang the second verse of the song, she kept tossing the baby\nviolently up and down, and the poor little thing howled so, that Alice could\nhardly hear the words:—\n\n> “I speak severely to my boy, I beat him when he sneezes; For he can thoroughly\n> enjoy The pepper when he pleases!”\n\nCHORUS.\n\n> “Wow! wow! wow!”\n\n“Here! you may nurse it a bit, if you like!” the Duchess said to Alice, flinging\nthe baby at her as she spoke. “I must go and get ready to play croquet with the\nQueen,” and she hurried out of the room. The cook threw a frying-pan after her\nas she went out, but it just missed her.\n\nAlice caught the baby with some difficulty, as it was a queer-shaped little\ncreature, and held out its arms and legs in all directions, “just like a\nstar-fish,” thought Alice. The poor little thing was snorting like a\nsteam-engine when she caught it, and kept doubling itself up and straightening\nitself out again, so that altogether, for the first minute or two, it was as\nmuch as she could do to hold it.\n\nAs soon as she had made out the proper way of nursing it, (which was to twist it\nup into a sort of knot, and then keep tight hold of its right ear and left foot,\nso as to prevent its undoing itself,) she carried it out into the open air. “If\nI don’t take this child away with me,” thought Alice, “they’re sure to kill it\nin a day or two: wouldn’t it be murder to leave it behind?” She said the last\nwords out loud, and the little thing grunted in reply (it had left off sneezing\nby this time). “Don’t grunt,” said Alice; “that’s not at all a proper way of\nexpressing yourself.”\n\nThe baby grunted again, and Alice looked very anxiously into its face to see\nwhat was the matter with it. There could be no doubt that it had a very turn-up\nnose, much more like a snout than a real nose; also its eyes were getting\nextremely small for a baby: altogether Alice did not like the look of the thing\nat all. “But perhaps it was only sobbing,” she thought, and looked into its eyes\nagain, to see if there were any tears.\n\nNo, there were no tears. “If you’re going to turn into a pig, my dear,” said\nAlice, seriously, “I’ll have nothing more to do with you. Mind now!” The poor\nlittle thing sobbed again (or grunted, it was impossible to say which), and they\nwent on for some while in silence.\n\nAlice was just beginning to think to herself, “Now, what am I to do with this\ncreature when I get it home?” when it grunted again, so violently, that she\nlooked down into its face in some alarm. This time there could be no mistake\nabout it: it was neither more nor less than a pig, and she felt that it would be\nquite absurd for her to carry it further.\n\nSo she set the little creature down, and felt quite relieved to see it trot away\nquietly into the wood. “If it had grown up,” she said to herself, “it would have\nmade a dreadfully ugly child: but it makes rather a handsome pig, I think.” And\nshe began thinking over other children she knew, who might do very well as pigs,\nand was just saying to herself, “if one only knew the right way to change them—”\nwhen she was a little startled by seeing the Cheshire Cat sitting on a bough of\na tree a few yards off.\n\nThe Cat only grinned when it saw Alice. It looked good-natured, she thought:\nstill it had very long claws and a great many teeth, so she felt that it ought\nto be treated with respect.\n\n“Cheshire Puss,” she began, rather timidly, as she did not at all know whether\nit would like the name: however, it only grinned a little wider. “Come, it’s\npleased so far,” thought Alice, and she went on. “Would you tell me, please,\nwhich way I ought to go from here?”\n\n“That depends a good deal on where you want to get to,” said the Cat.\n\n“I don’t much care where—” said Alice.\n\n“Then it doesn’t matter which way you go,” said the Cat.\n\n“—so long as I get somewhere,” Alice added as an explanation.\n\n“Oh, you’re sure to do that,” said the Cat, “if you only walk long enough.”\n\nAlice felt that this could not be denied, so she tried another question. “What\nsort of people live about here?”\n\n“In that direction,” the Cat said, waving its right paw round, “lives a Hatter:\nand in that direction,” waving the other paw, “lives a March Hare. Visit either\nyou like: they’re both mad.”\n\n“But I don’t want to go among mad people,” Alice remarked.\n\n“Oh, you can’t help that,” said the Cat: “we’re all mad here. I’m mad. You’re\nmad.”\n\n“How do you know I’m mad?” said Alice.\n\n“You must be,” said the Cat, “or you wouldn’t have come here.”\n\nAlice didn’t think that proved it at all; however, she went on “And how do you\nknow that you’re mad?”\n\n“To begin with,” said the Cat, “a dog’s not mad. You grant that?”\n\n“I suppose so,” said Alice.\n\n“Well, then,” the Cat went on, “you see, a dog growls when it’s angry, and wags\nits tail when it’s pleased. Now I growl when I’m pleased, and wag my tail when\nI’m angry. Therefore I’m mad.”\n\n“I call it purring, not growling,” said Alice.\n\n“Call it what you like,” said the Cat. “Do you play croquet with the Queen\nto-day?”\n\n“I should like it very much,” said Alice, “but I haven’t been invited yet.”\n\n“You’ll see me there,” said the Cat, and vanished.\n\nAlice was not much surprised at this, she was getting so used to queer things\nhappening. While she was looking at the place where it had been, it suddenly\nappeared again.\n\n“By-the-bye, what became of the baby?” said the Cat. “I’d nearly forgotten to\nask.”\n\n“It turned into a pig,” Alice quietly said, just as if it had come back in a\nnatural way.\n\n“I thought it would,” said the Cat, and vanished again.\n\nAlice waited a little, half expecting to see it again, but it did not appear,\nand after a minute or two she walked on in the direction in which the March Hare\nwas said to live. “I’ve seen hatters before,” she said to herself; “the March\nHare will be much the most interesting, and perhaps as this is May it won’t be\nraving mad—at least not so mad as it was in March.” As she said this, she looked\nup, and there was the Cat again, sitting on a branch of a tree.\n\n“Did you say pig, or fig?” said the Cat.\n\n“I said pig,” replied Alice; “and I wish you wouldn’t keep appearing and\nvanishing so suddenly: you make one quite giddy.”\n\n“All right,” said the Cat; and this time it vanished quite slowly, beginning\nwith the end of the tail, and ending with the grin, which remained some time\nafter the rest of it had gone.\n\n“Well! I’ve often seen a cat without a grin,” thought Alice; “but a grin without\na cat! It’s the most curious thing I ever saw in my life!”\n\nShe had not gone much farther before she came in sight of the house of the March\nHare: she thought it must be the right house, because the chimneys were shaped\nlike ears and the roof was thatched with fur. It was so large a house, that she\ndid not like to go nearer till she had nibbled some more of the lefthand bit of\nmushroom, and raised herself to about two feet high: even then she walked up\ntowards it rather timidly, saying to herself “Suppose it should be raving mad\nafter all! I almost wish I’d gone to see the Hatter instead!”\n\n## CHAPTER VII: A Mad Tea-Party\n\nThere was a table set out under a tree in front of the house, and the March Hare\nand the Hatter were having tea at it: a Dormouse was sitting between them, fast\nasleep, and the other two were using it as a cushion, resting their elbows on\nit, and talking over its head. “Very uncomfortable for the Dormouse,” thought\nAlice; “only, as it’s asleep, I suppose it doesn’t mind.”\n\nThe table was a large one, but the three were all crowded together at one corner\nof it: “No room! No room!” they cried out when they saw Alice coming. “There’s\nplenty of room!” said Alice indignantly, and she sat down in a large arm-chair\nat one end of the table.\n\n“Have some wine,” the March Hare said in an encouraging tone.\n\nAlice looked all round the table, but there was nothing on it but tea. “I don’t\nsee any wine,” she remarked.\n\n“There isn’t any,” said the March Hare.\n\n“Then it wasn’t very civil of you to offer it,” said Alice angrily.\n\n“It wasn’t very civil of you to sit down without being invited,” said the March\nHare.\n\n“I didn’t know it was your table,” said Alice; “it’s laid for a great many more\nthan three.”\n\n“Your hair wants cutting,” said the Hatter. He had been looking at Alice for\nsome time with great curiosity, and this was his first speech.\n\n“You should learn not to make personal remarks,” Alice said with some severity;\n“it’s very rude.”\n\nThe Hatter opened his eyes very wide on hearing this; but all he said was, “Why\nis a raven like a writing-desk?”\n\n“Come, we shall have some fun now!” thought Alice. “I’m glad they’ve begun\nasking riddles.—I believe I can guess that,” she added aloud.\n\n“Do you mean that you think you can find out the answer to it?” said the March\nHare.\n\n“Exactly so,” said Alice.\n\n“Then you should say what you mean,” the March Hare went on.\n\n“I do,” Alice hastily replied; “at least—at least I mean what I say—that’s the\nsame thing, you know.”\n\n“Not the same thing a bit!” said the Hatter. “You might just as well say that ‘I\nsee what I eat’ is the same thing as ‘I eat what I see’!”\n\n“You might just as well say,” added the March Hare, “that ‘I like what I get’ is\nthe same thing as ‘I get what I like’!”\n\n“You might just as well say,” added the Dormouse, who seemed to be talking in\nhis sleep, “that ‘I breathe when I sleep’ is the same thing as ‘I sleep when I\nbreathe’!”\n\n“It is the same thing with you,” said the Hatter, and here the conversation\ndropped, and the party sat silent for a minute, while Alice thought over all she\ncould remember about ravens and writing-desks, which wasn’t much.\n\nThe Hatter was the first to break the silence. “What day of the month is it?” he\nsaid, turning to Alice: he had taken his watch out of his pocket, and was\nlooking at it uneasily, shaking it every now and then, and holding it to his\near.\n\nAlice considered a little, and then said “The fourth.”\n\n“Two days wrong!” sighed the Hatter. “I told you butter wouldn’t suit the\nworks!” he added looking angrily at the March Hare.\n\n“It was the best butter,” the March Hare meekly replied.\n\n“Yes, but some crumbs must have got in as well,” the Hatter grumbled: “you\nshouldn’t have put it in with the bread-knife.”\n\nThe March Hare took the watch and looked at it gloomily: then he dipped it into\nhis cup of tea, and looked at it again: but he could think of nothing better to\nsay than his first remark, “It was the best butter, you know.”\n\nAlice had been looking over his shoulder with some curiosity. “What a funny\nwatch!” she remarked. “It tells the day of the month, and doesn’t tell what\no’clock it is!”\n\n“Why should it?” muttered the Hatter. “Does your watch tell you what year it\nis?”\n\n“Of course not,” Alice replied very readily: “but that’s because it stays the\nsame year for such a long time together.”\n\n“Which is just the case with mine,” said the Hatter.\n\nAlice felt dreadfully puzzled, The Hatter’s remark seemed to have no sort of\nmeaning in it, and yet it was certainly English. “I don’t quite understand you,”\nshe said, as politely as she could.\n\n“The Dormouse is asleep again,” said the Hatter, and he poured a little hot tea\nupon its nose.\n\nThe Dormouse shook its head impatiently, and said, without opening its eyes, “Of\ncourse, of course; just what I was going to remark myself.”\n\n“Have you guessed the riddle yet?” the Hatter said, turning to Alice again.\n\n“No, I give it up,” Alice replied: “what’s the answer?”\n\n“I haven’t the slightest idea,” said the Hatter.\n\n“Nor I,” said the March Hare.\n\nAlice sighed wearily. “I think you might do something better with the time,” she\nsaid, “than waste it in asking riddles that have no answers.”\n\n“If you knew Time as well as I do,” said the Hatter, “you wouldn’t talk about\nwasting it. It’s him.”\n\n“I don’t know what you mean,” said Alice.\n\n“Of course you don’t!” the Hatter said, tossing his head contemptuously. “I dare\nsay you never even spoke to Time!”\n\n“Perhaps not,” Alice cautiously replied: “but I know I have to beat time when I\nlearn music.”\n\n“Ah! that accounts for it,” said the Hatter. “He won’t stand beating. Now, if\nyou only kept on good terms with him, he’d do almost anything you liked with the\nclock. For instance, suppose it were nine o’clock in the morning, just time to\nbegin lessons: you’d only have to whisper a hint to Time, and round goes the\nclock in a twinkling! Half-past one, time for dinner!”\n\n(“I only wish it was,” the March Hare said to itself in a whisper.)\n\n“That would be grand, certainly,” said Alice thoughtfully: “but then—I shouldn’t\nbe hungry for it, you know.”\n\n“Not at first, perhaps,” said the Hatter: “but you could keep it to half-past\none as long as you liked.”\n\n“Is that the way you manage?” Alice asked.\n\nThe Hatter shook his head mournfully. “Not I!” he replied. “We quarrelled last\nMarch—just before he went mad, you know—” (pointing with his tea spoon at the\nMarch Hare,) “—it was at the great concert given by the Queen of Hearts, and I\nhad to sing\n\n> ‘Twinkle, twinkle, little bat! How I wonder what you’re at!’\n\nYou know the song, perhaps?”\n\n“I’ve heard something like it,” said Alice.\n\n“It goes on, you know,” the Hatter continued, “in this way:—\n\n> ‘Up above the world you fly, Like a tea-tray in the sky. Twinkle, twinkle—’”\n\nHere the Dormouse shook itself, and began singing in its sleep “Twinkle,\ntwinkle, twinkle, twinkle—” and went on so long that they had to pinch it to\nmake it stop.\n\n“Well, I’d hardly finished the first verse,” said the Hatter, “when the Queen\njumped up and bawled out, ‘He’s murdering the time! Off with his head!’”\n\n“How dreadfully savage!” exclaimed Alice.\n\n“And ever since that,” the Hatter went on in a mournful tone, “he won’t do a\nthing I ask! It’s always six o’clock now.”\n\nA bright idea came into Alice’s head. “Is that the reason so many tea-things are\nput out here?” she asked.\n\n“Yes, that’s it,” said the Hatter with a sigh: “it’s always tea-time, and we’ve\nno time to wash the things between whiles.”\n\n“Then you keep moving round, I suppose?” said Alice.\n\n“Exactly so,” said the Hatter: “as the things get used up.”\n\n“But what happens when you come to the beginning again?” Alice ventured to ask.\n\n“Suppose we change the subject,” the March Hare interrupted, yawning. “I’m\ngetting tired of this. I vote the young lady tells us a story.”\n\n“I’m afraid I don’t know one,” said Alice, rather alarmed at the proposal.\n\n“Then the Dormouse shall!” they both cried. “Wake up, Dormouse!” And they\npinched it on both sides at once.\n\nThe Dormouse slowly opened his eyes. “I wasn’t asleep,” he said in a hoarse,\nfeeble voice: “I heard every word you fellows were saying.”\n\n“Tell us a story!” said the March Hare.\n\n“Yes, please do!” pleaded Alice.\n\n“And be quick about it,” added the Hatter, “or you’ll be asleep again before\nit’s done.”\n\n“Once upon a time there were three little sisters,” the Dormouse began in a\ngreat hurry; “and their names were Elsie, Lacie, and Tillie; and they lived at\nthe bottom of a well—”\n\n“What did they live on?” said Alice, who always took a great interest in\nquestions of eating and drinking.\n\n“They lived on treacle,” said the Dormouse, after thinking a minute or two.\n\n“They couldn’t have done that, you know,” Alice gently remarked; “they’d have\nbeen ill.”\n\n“So they were,” said the Dormouse; “very ill.”\n\nAlice tried to fancy to herself what such an extraordinary way of living would\nbe like, but it puzzled her too much, so she went on: “But why did they live at\nthe bottom of a well?”\n\n“Take some more tea,” the March Hare said to Alice, very earnestly.\n\n“I’ve had nothing yet,” Alice replied in an offended tone, “so I can’t take\nmore.”\n\n“You mean you can’t take less,” said the Hatter: “it’s very easy to take more\nthan nothing.”\n\n“Nobody asked your opinion,” said Alice.\n\n“Who’s making personal remarks now?” the Hatter asked triumphantly.\n\nAlice did not quite know what to say to this: so she helped herself to some tea\nand bread-and-butter, and then turned to the Dormouse, and repeated her\nquestion. “Why did they live at the bottom of a well?”\n\nThe Dormouse again took a minute or two to think about it, and then said, “It\nwas a treacle-well.”\n\n“There’s no such thing!” Alice was beginning very angrily, but the Hatter and\nthe March Hare went “Sh! sh!” and the Dormouse sulkily remarked, “If you can’t\nbe civil, you’d better finish the story for yourself.”\n\n“No, please go on!” Alice said very humbly; “I won’t interrupt again. I dare say\nthere may be one.”\n\n“One, indeed!” said the Dormouse indignantly. However, he consented to go on.\n“And so these three little sisters—they were learning to draw, you know—”\n\n“What did they draw?” said Alice, quite forgetting her promise.\n\n“Treacle,” said the Dormouse, without considering at all this time.\n\n“I want a clean cup,” interrupted the Hatter: “let’s all move one place on.”\n\nHe moved on as he spoke, and the Dormouse followed him: the March Hare moved\ninto the Dormouse’s place, and Alice rather unwillingly took the place of the\nMarch Hare. The Hatter was the only one who got any advantage from the change:\nand Alice was a good deal worse off than before, as the March Hare had just\nupset the milk-jug into his plate.\n\nAlice did not wish to offend the Dormouse again, so she began very cautiously:\n“But I don’t understand. Where did they draw the treacle from?”\n\n“You can draw water out of a water-well,” said the Hatter; “so I should think\nyou could draw treacle out of a treacle-well—eh, stupid?”\n\n“But they were in the well,” Alice said to the Dormouse, not choosing to notice\nthis last remark.\n\n“Of course they were,” said the Dormouse; “—well in.”\n\nThis answer so confused poor Alice, that she let the Dormouse go on for some\ntime without interrupting it.\n\n“They were learning to draw,” the Dormouse went on, yawning and rubbing its\neyes, for it was getting very sleepy; “and they drew all manner of\nthings—everything that begins with an M—”\n\n“Why with an M?” said Alice.\n\n“Why not?” said the March Hare.\n\nAlice was silent.\n\nThe Dormouse had closed its eyes by this time, and was going off into a doze;\nbut, on being pinched by the Hatter, it woke up again with a little shriek, and\nwent on: “—that begins with an M, such as mouse-traps, and the moon, and memory,\nand muchness—you know you say things are “much of a muchness”—did you ever see\nsuch a thing as a drawing of a muchness?”\n\n“Really, now you ask me,” said Alice, very much confused, “I don’t think—”\n\n“Then you shouldn’t talk,” said the Hatter.\n\nThis piece of rudeness was more than Alice could bear: she got up in great\ndisgust, and walked off; the Dormouse fell asleep instantly, and neither of the\nothers took the least notice of her going, though she looked back once or twice,\nhalf hoping that they would call after her: the last time she saw them, they\nwere trying to put the Dormouse into the teapot.\n\n“At any rate I’ll never go there again!” said Alice as she picked her way\nthrough the wood. “It’s the stupidest tea-party I ever was at in all my life!”\n\nJust as she said this, she noticed that one of the trees had a door leading\nright into it. “That’s very curious!” she thought. “But everything’s curious\ntoday. I think I may as well go in at once.” And in she went.\n\nOnce more she found herself in the long hall, and close to the little glass\ntable. “Now, I’ll manage better this time,” she said to herself, and began by\ntaking the little golden key, and unlocking the door that led into the garden.\nThen she went to work nibbling at the mushroom (she had kept a piece of it in\nher pocket) till she was about a foot high: then she walked down the little\npassage: and then—she found herself at last in the beautiful garden, among the\nbright flower-beds and the cool fountains.\n\n## CHAPTER VIII: The Queen’s Croquet-Ground\n\nA large rose-tree stood near the entrance of the garden: the roses growing on it\nwere white, but there were three gardeners at it, busily painting them red.\nAlice thought this a very curious thing, and she went nearer to watch them, and\njust as she came up to them she heard one of them say, “Look out now, Five!\nDon’t go splashing paint over me like that!”\n\n“I couldn’t help it,” said Five, in a sulky tone; “Seven jogged my elbow.”\n\nOn which Seven looked up and said, “That’s right, Five! Always lay the blame on\nothers!”\n\n“You’d better not talk!” said Five. “I heard the Queen say only yesterday you\ndeserved to be beheaded!”\n\n“What for?” said the one who had spoken first.\n\n“That’s none of your business, Two!” said Seven.\n\n“Yes, it is his business!” said Five, “and I’ll tell him—it was for bringing the\ncook tulip-roots instead of onions.”\n\nSeven flung down his brush, and had just begun “Well, of all the unjust things—”\nwhen his eye chanced to fall upon Alice, as she stood watching them, and he\nchecked himself suddenly: the others looked round also, and all of them bowed\nlow.\n\n“Would you tell me,” said Alice, a little timidly, “why you are painting those\nroses?”\n\nFive and Seven said nothing, but looked at Two. Two began in a low voice, “Why\nthe fact is, you see, Miss, this here ought to have been a red rose-tree, and we\nput a white one in by mistake; and if the Queen was to find it out, we should\nall have our heads cut off, you know. So you see, Miss, we’re doing our best,\nafore she comes, to—” At this moment Five, who had been anxiously looking across\nthe garden, called out “The Queen! The Queen!” and the three gardeners instantly\nthrew themselves flat upon their faces. There was a sound of many footsteps, and\nAlice looked round, eager to see the Queen.\n\nFirst came ten soldiers carrying clubs; these were all shaped like the three\ngardeners, oblong and flat, with their hands and feet at the corners: next the\nten courtiers; these were ornamented all over with diamonds, and walked two and\ntwo, as the soldiers did. After these came the royal children; there were ten of\nthem, and the little dears came jumping merrily along hand in hand, in couples:\nthey were all ornamented with hearts. Next came the guests, mostly Kings and\nQueens, and among them Alice recognised the White Rabbit: it was talking in a\nhurried nervous manner, smiling at everything that was said, and went by without\nnoticing her. Then followed the Knave of Hearts, carrying the King’s crown on a\ncrimson velvet cushion; and, last of all this grand procession, came THE KING\nAND QUEEN OF HEARTS.\n\nAlice was rather doubtful whether she ought not to lie down on her face like the\nthree gardeners, but she could not remember ever having heard of such a rule at\nprocessions; “and besides, what would be the use of a procession,” thought she,\n“if people had all to lie down upon their faces, so that they couldn’t see it?”\nSo she stood still where she was, and waited.\n\nWhen the procession came opposite to Alice, they all stopped and looked at her,\nand the Queen said severely “Who is this?” She said it to the Knave of Hearts,\nwho only bowed and smiled in reply.\n\n“Idiot!” said the Queen, tossing her head impatiently; and, turning to Alice,\nshe went on, “What’s your name, child?”\n\n“My name is Alice, so please your Majesty,” said Alice very politely; but she\nadded, to herself, “Why, they’re only a pack of cards, after all. I needn’t be\nafraid of them!”\n\n“And who are these?” said the Queen, pointing to the three gardeners who were\nlying round the rose-tree; for, you see, as they were lying on their faces, and\nthe pattern on their backs was the same as the rest of the pack, she could not\ntell whether they were gardeners, or soldiers, or courtiers, or three of her own\nchildren.\n\n“How should I know?” said Alice, surprised at her own courage. “It’s no business\nof mine.”\n\nThe Queen turned crimson with fury, and, after glaring at her for a moment like\na wild beast, screamed “Off with her head! Off—”\n\n“Nonsense!” said Alice, very loudly and decidedly, and the Queen was silent.\n\nThe King laid his hand upon her arm, and timidly said “Consider, my dear: she is\nonly a child!”\n\nThe Queen turned angrily away from him, and said to the Knave “Turn them over!”\n\nThe Knave did so, very carefully, with one foot.\n\n“Get up!” said the Queen, in a shrill, loud voice, and the three gardeners\ninstantly jumped up, and began bowing to the King, the Queen, the royal\nchildren, and everybody else.\n\n“Leave off that!” screamed the Queen. “You make me giddy.” And then, turning to\nthe rose-tree, she went on, “What have you been doing here?”\n\n“May it please your Majesty,” said Two, in a very humble tone, going down on one\nknee as he spoke, “we were trying—”\n\n“I see!” said the Queen, who had meanwhile been examining the roses. “Off with\ntheir heads!” and the procession moved on, three of the soldiers remaining\nbehind to execute the unfortunate gardeners, who ran to Alice for protection.\n\n“You shan’t be beheaded!” said Alice, and she put them into a large flower-pot\nthat stood near. The three soldiers wandered about for a minute or two, looking\nfor them, and then quietly marched off after the others.\n\n“Are their heads off?” shouted the Queen.\n\n“Their heads are gone, if it please your Majesty!” the soldiers shouted in\nreply.\n\n“That’s right!” shouted the Queen. “Can you play croquet?”\n\nThe soldiers were silent, and looked at Alice, as the question was evidently\nmeant for her.\n\n“Yes!” shouted Alice.\n\n“Come on, then!” roared the Queen, and Alice joined the procession, wondering\nvery much what would happen next.\n\n“It’s—it’s a very fine day!” said a timid voice at her side. She was walking by\nthe White Rabbit, who was peeping anxiously into her face.\n\n“Very,” said Alice: “—where’s the Duchess?”\n\n“Hush! Hush!” said the Rabbit in a low, hurried tone. He looked anxiously over\nhis shoulder as he spoke, and then raised himself upon tiptoe, put his mouth\nclose to her ear, and whispered “She’s under sentence of execution.”\n\n“What for?” said Alice.\n\n“Did you say ‘What a pity!’?” the Rabbit asked.\n\n“No, I didn’t,” said Alice: “I don’t think it’s at all a pity. I said ‘What\nfor?’”\n\n“She boxed the Queen’s ears—” the Rabbit began. Alice gave a little scream of\nlaughter. “Oh, hush!” the Rabbit whispered in a frightened tone. “The Queen will\nhear you! You see, she came rather late, and the Queen said—”\n\n“Get to your places!” shouted the Queen in a voice of thunder, and people began\nrunning about in all directions, tumbling up against each other; however, they\ngot settled down in a minute or two, and the game began. Alice thought she had\nnever seen such a curious croquet-ground in her life; it was all ridges and\nfurrows; the balls were live hedgehogs, the mallets live flamingoes, and the\nsoldiers had to double themselves up and to stand on their hands and feet, to\nmake the arches.\n\nThe chief difficulty Alice found at first was in managing her flamingo: she\nsucceeded in getting its body tucked away, comfortably enough, under her arm,\nwith its legs hanging down, but generally, just as she had got its neck nicely\nstraightened out, and was going to give the hedgehog a blow with its head, it\nwould twist itself round and look up in her face, with such a puzzled expression\nthat she could not help bursting out laughing: and when she had got its head\ndown, and was going to begin again, it was very provoking to find that the\nhedgehog had unrolled itself, and was in the act of crawling away: besides all\nthis, there was generally a ridge or furrow in the way wherever she wanted to\nsend the hedgehog to, and, as the doubled-up soldiers were always getting up and\nwalking off to other parts of the ground, Alice soon came to the conclusion that\nit was a very difficult game indeed.\n\nThe players all played at once without waiting for turns, quarrelling all the\nwhile, and fighting for the hedgehogs; and in a very short time the Queen was in\na furious passion, and went stamping about, and shouting “Off with his head!” or\n“Off with her head!” about once in a minute.\n\nAlice began to feel very uneasy: to be sure, she had not as yet had any dispute\nwith the Queen, but she knew that it might happen any minute, “and then,”\nthought she, “what would become of me? They’re dreadfully fond of beheading\npeople here; the great wonder is, that there’s any one left alive!”\n\nShe was looking about for some way of escape, and wondering whether she could\nget away without being seen, when she noticed a curious appearance in the air:\nit puzzled her very much at first, but, after watching it a minute or two, she\nmade it out to be a grin, and she said to herself “It’s the Cheshire Cat: now I\nshall have somebody to talk to.”\n\n“How are you getting on?” said the Cat, as soon as there was mouth enough for it\nto speak with.\n\nAlice waited till the eyes appeared, and then nodded. “It’s no use speaking to\nit,” she thought, “till its ears have come, or at least one of them.” In another\nminute the whole head appeared, and then Alice put down her flamingo, and began\nan account of the game, feeling very glad she had someone to listen to her. The\nCat seemed to think that there was enough of it now in sight, and no more of it\nappeared.\n\n“I don’t think they play at all fairly,” Alice began, in rather a complaining\ntone, “and they all quarrel so dreadfully one can’t hear oneself speak—and they\ndon’t seem to have any rules in particular; at least, if there are, nobody\nattends to them—and you’ve no idea how confusing it is all the things being\nalive; for instance, there’s the arch I’ve got to go through next walking about\nat the other end of the ground—and I should have croqueted the Queen’s hedgehog\njust now, only it ran away when it saw mine coming!”\n\n“How do you like the Queen?” said the Cat in a low voice.\n\n“Not at all,” said Alice: “she’s so extremely—” Just then she noticed that the\nQueen was close behind her, listening: so she went on, “—likely to win, that\nit’s hardly worth while finishing the game.”\n\nThe Queen smiled and passed on.\n\n“Who are you talking to?” said the King, going up to Alice, and looking at the\nCat’s head with great curiosity.\n\n“It’s a friend of mine—a Cheshire Cat,” said Alice: “allow me to introduce it.”\n\n“I don’t like the look of it at all,” said the King: “however, it may kiss my\nhand if it likes.”\n\n“I’d rather not,” the Cat remarked.\n\n“Don’t be impertinent,” said the King, “and don’t look at me like that!” He got\nbehind Alice as he spoke.\n\n“A cat may look at a king,” said Alice. “I’ve read that in some book, but I\ndon’t remember where.”\n\n“Well, it must be removed,” said the King very decidedly, and he called the\nQueen, who was passing at the moment, “My dear! I wish you would have this cat\nremoved!”\n\nThe Queen had only one way of settling all difficulties, great or small. “Off\nwith his head!” she said, without even looking round.\n\n“I’ll fetch the executioner myself,” said the King eagerly, and he hurried off.\n\nAlice thought she might as well go back, and see how the game was going on, as\nshe heard the Queen’s voice in the distance, screaming with passion. She had\nalready heard her sentence three of the players to be executed for having missed\ntheir turns, and she did not like the look of things at all, as the game was in\nsuch confusion that she never knew whether it was her turn or not. So she went\nin search of her hedgehog.\n\nThe hedgehog was engaged in a fight with another hedgehog, which seemed to Alice\nan excellent opportunity for croqueting one of them with the other: the only\ndifficulty was, that her flamingo was gone across to the other side of the\ngarden, where Alice could see it trying in a helpless sort of way to fly up into\na tree.\n\nBy the time she had caught the flamingo and brought it back, the fight was over,\nand both the hedgehogs were out of sight: “but it doesn’t matter much,” thought\nAlice, “as all the arches are gone from this side of the ground.” So she tucked\nit away under her arm, that it might not escape again, and went back for a\nlittle more conversation with her friend.\n\nWhen she got back to the Cheshire Cat, she was surprised to find quite a large\ncrowd collected round it: there was a dispute going on between the executioner,\nthe King, and the Queen, who were all talking at once, while all the rest were\nquite silent, and looked very uncomfortable.\n\nThe moment Alice appeared, she was appealed to by all three to settle the\nquestion, and they repeated their arguments to her, though, as they all spoke at\nonce, she found it very hard indeed to make out exactly what they said.\n\nThe executioner’s argument was, that you couldn’t cut off a head unless there\nwas a body to cut it off from: that he had never had to do such a thing before,\nand he wasn’t going to begin at his time of life.\n\nThe King’s argument was, that anything that had a head could be beheaded, and\nthat you weren’t to talk nonsense.\n\nThe Queen’s argument was, that if something wasn’t done about it in less than no\ntime she’d have everybody executed, all round. (It was this last remark that had\nmade the whole party look so grave and anxious.)\n\nAlice could think of nothing else to say but “It belongs to the Duchess: you’d\nbetter ask her about it.”\n\n“She’s in prison,” the Queen said to the executioner: “fetch her here.” And the\nexecutioner went off like an arrow.\n\nThe Cat’s head began fading away the moment he was gone, and, by the time he had\ncome back with the Duchess, it had entirely disappeared; so the King and the\nexecutioner ran wildly up and down looking for it, while the rest of the party\nwent back to the game.\n\n## CHAPTER IX: The Mock Turtle’s Story\n\n“You can’t think how glad I am to see you again, you dear old thing!” said the\nDuchess, as she tucked her arm affectionately into Alice’s, and they walked off\ntogether.\n\nAlice was very glad to find her in such a pleasant temper, and thought to\nherself that perhaps it was only the pepper that had made her so savage when\nthey met in the kitchen.\n\n“When I’m a Duchess,” she said to herself, (not in a very hopeful tone though),\n“I won’t have any pepper in my kitchen at all. Soup does very well without—Maybe\nit’s always pepper that makes people hot-tempered,” she went on, very much\npleased at having found out a new kind of rule, “and vinegar that makes them\nsour—and camomile that makes them bitter—and—and barley-sugar and such things\nthat make children sweet-tempered. I only wish people knew that: then they\nwouldn’t be so stingy about it, you know—”\n\nShe had quite forgotten the Duchess by this time, and was a little startled when\nshe heard her voice close to her ear. “You’re thinking about something, my dear,\nand that makes you forget to talk. I can’t tell you just now what the moral of\nthat is, but I shall remember it in a bit.”\n\n“Perhaps it hasn’t one,” Alice ventured to remark.\n\n“Tut, tut, child!” said the Duchess. “Everything’s got a moral, if only you can\nfind it.” And she squeezed herself up closer to Alice’s side as she spoke.\n\nAlice did not much like keeping so close to her: first, because the Duchess was\nvery ugly; and secondly, because she was exactly the right height to rest her\nchin upon Alice’s shoulder, and it was an uncomfortably sharp chin. However, she\ndid not like to be rude, so she bore it as well as she could.\n\n“The game’s going on rather better now,” she said, by way of keeping up the\nconversation a little.\n\n“’Tis so,” said the Duchess: “and the moral of that is—‘Oh, ’tis love, ’tis\nlove, that makes the world go round!’”\n\n“Somebody said,” Alice whispered, “that it’s done by everybody minding their own\nbusiness!”\n\n“Ah, well! It means much the same thing,” said the Duchess, digging her sharp\nlittle chin into Alice’s shoulder as she added, “and the moral of that is—‘Take\ncare of the sense, and the sounds will take care of themselves.’”\n\n“How fond she is of finding morals in things!” Alice thought to herself.\n\n“I dare say you’re wondering why I don’t put my arm round your waist,” the\nDuchess said after a pause: “the reason is, that I’m doubtful about the temper\nof your flamingo. Shall I try the experiment?”\n\n“He might bite,” Alice cautiously replied, not feeling at all anxious to have\nthe experiment tried.\n\n“Very true,” said the Duchess: “flamingoes and mustard both bite. And the moral\nof that is—‘Birds of a feather flock together.’”\n\n“Only mustard isn’t a bird,” Alice remarked.\n\n“Right, as usual,” said the Duchess: “what a clear way you have of putting\nthings!”\n\n“It’s a mineral, I think,” said Alice.\n\n“Of course it is,” said the Duchess, who seemed ready to agree to everything\nthat Alice said; “there’s a large mustard-mine near here. And the moral of that\nis—‘The more there is of mine, the less there is of yours.’”\n\n“Oh, I know!” exclaimed Alice, who had not attended to this last remark, “it’s a\nvegetable. It doesn’t look like one, but it is.”\n\n“I quite agree with you,” said the Duchess; “and the moral of that is—‘Be what\nyou would seem to be’—or if you’d like it put more simply—‘Never imagine\nyourself not to be otherwise than what it might appear to others that what you\nwere or might have been was not otherwise than what you had been would have\nappeared to them to be otherwise.’”\n\n“I think I should understand that better,” Alice said very politely, “if I had\nit written down: but I can’t quite follow it as you say it.”\n\n“That’s nothing to what I could say if I chose,” the Duchess replied, in a\npleased tone.\n\n“Pray don’t trouble yourself to say it any longer than that,” said Alice.\n\n“Oh, don’t talk about trouble!” said the Duchess. “I make you a present of\neverything I’ve said as yet.”\n\n“A cheap sort of present!” thought Alice. “I’m glad they don’t give birthday\npresents like that!” But she did not venture to say it out loud.\n\n“Thinking again?” the Duchess asked, with another dig of her sharp little chin.\n\n“I’ve a right to think,” said Alice sharply, for she was beginning to feel a\nlittle worried.\n\n“Just about as much right,” said the Duchess, “as pigs have to fly; and the m—”\n\nBut here, to Alice’s great surprise, the Duchess’s voice died away, even in the\nmiddle of her favourite word ‘moral,’ and the arm that was linked into hers\nbegan to tremble. Alice looked up, and there stood the Queen in front of them,\nwith her arms folded, frowning like a thunderstorm.\n\n“A fine day, your Majesty!” the Duchess began in a low, weak voice.\n\n“Now, I give you fair warning,” shouted the Queen, stamping on the ground as she\nspoke; “either you or your head must be off, and that in about half no time!\nTake your choice!”\n\nThe Duchess took her choice, and was gone in a moment.\n\n“Let’s go on with the game,” the Queen said to Alice; and Alice was too much\nfrightened to say a word, but slowly followed her back to the croquet-ground.\n\nThe other guests had taken advantage of the Queen’s absence, and were resting in\nthe shade: however, the moment they saw her, they hurried back to the game, the\nQueen merely remarking that a moment’s delay would cost them their lives.\n\nAll the time they were playing the Queen never left off quarrelling with the\nother players, and shouting “Off with his head!” or “Off with her head!” Those\nwhom she sentenced were taken into custody by the soldiers, who of course had to\nleave off being arches to do this, so that by the end of half an hour or so\nthere were no arches left, and all the players, except the King, the Queen, and\nAlice, were in custody and under sentence of execution.\n\nThen the Queen left off, quite out of breath, and said to Alice, “Have you seen\nthe Mock Turtle yet?”\n\n“No,” said Alice. “I don’t even know what a Mock Turtle is.”\n\n“It’s the thing Mock Turtle Soup is made from,” said the Queen.\n\n“I never saw one, or heard of one,” said Alice.\n\n“Come on, then,” said the Queen, “and he shall tell you his history.”\n\nAs they walked off together, Alice heard the King say in a low voice, to the\ncompany generally, “You are all pardoned.” “Come, that’s a good thing!” she said\nto herself, for she had felt quite unhappy at the number of executions the Queen\nhad ordered.\n\nThey very soon came upon a Gryphon, lying fast asleep in the sun. (If you don’t\nknow what a Gryphon is, look at the picture.) “Up, lazy thing!” said the Queen,\n“and take this young lady to see the Mock Turtle, and to hear his history. I\nmust go back and see after some executions I have ordered;” and she walked off,\nleaving Alice alone with the Gryphon. Alice did not quite like the look of the\ncreature, but on the whole she thought it would be quite as safe to stay with it\nas to go after that savage Queen: so she waited.\n\nThe Gryphon sat up and rubbed its eyes: then it watched the Queen till she was\nout of sight: then it chuckled. “What fun!” said the Gryphon, half to itself,\nhalf to Alice.\n\n“What is the fun?” said Alice.\n\n“Why, she,” said the Gryphon. “It’s all her fancy, that: they never executes\nnobody, you know. Come on!”\n\n“Everybody says ‘come on!’ here,” thought Alice, as she went slowly after it: “I\nnever was so ordered about in all my life, never!”\n\nThey had not gone far before they saw the Mock Turtle in the distance, sitting\nsad and lonely on a little ledge of rock, and, as they came nearer, Alice could\nhear him sighing as if his heart would break. She pitied him deeply. “What is\nhis sorrow?” she asked the Gryphon, and the Gryphon answered, very nearly in the\nsame words as before, “It’s all his fancy, that: he hasn’t got no sorrow, you\nknow. Come on!”\n\nSo they went up to the Mock Turtle, who looked at them with large eyes full of\ntears, but said nothing.\n\n“This here young lady,” said the Gryphon, “she wants for to know your history,\nshe do.”\n\n“I’ll tell it her,” said the Mock Turtle in a deep, hollow tone: “sit down, both\nof you, and don’t speak a word till I’ve finished.”\n\nSo they sat down, and nobody spoke for some minutes. Alice thought to herself,\n“I don’t see how he can ever finish, if he doesn’t begin.” But she waited\npatiently.\n\n“Once,” said the Mock Turtle at last, with a deep sigh, “I was a real Turtle.”\n\nThese words were followed by a very long silence, broken only by an occasional\nexclamation of “Hjckrrh!” from the Gryphon, and the constant heavy sobbing of\nthe Mock Turtle. Alice was very nearly getting up and saying, “Thank you, sir,\nfor your interesting story,” but she could not help thinking there must be more\nto come, so she sat still and said nothing.\n\n“When we were little,” the Mock Turtle went on at last, more calmly, though\nstill sobbing a little now and then, “we went to school in the sea. The master\nwas an old Turtle—we used to call him Tortoise—”\n\n“Why did you call him Tortoise, if he wasn’t one?” Alice asked.\n\n“We called him Tortoise because he taught us,” said the Mock Turtle angrily:\n“really you are very dull!”\n\n“You ought to be ashamed of yourself for asking such a simple question,” added\nthe Gryphon; and then they both sat silent and looked at poor Alice, who felt\nready to sink into the earth. At last the Gryphon said to the Mock Turtle,\n“Drive on, old fellow! Don’t be all day about it!” and he went on in these\nwords:\n\n“Yes, we went to school in the sea, though you mayn’t believe it—”\n\n“I never said I didn’t!” interrupted Alice.\n\n“You did,” said the Mock Turtle.\n\n“Hold your tongue!” added the Gryphon, before Alice could speak again. The Mock\nTurtle went on.\n\n“We had the best of educations—in fact, we went to school every day—”\n\n“I’ve been to a day-school, too,” said Alice; “you needn’t be so proud as all\nthat.”\n\n“With extras?” asked the Mock Turtle a little anxiously.\n\n“Yes,” said Alice, “we learned French and music.”\n\n“And washing?” said the Mock Turtle.\n\n“Certainly not!” said Alice indignantly.\n\n“Ah! then yours wasn’t a really good school,” said the Mock Turtle in a tone of\ngreat relief. “Now at ours they had at the end of the bill, ‘French, music, and\nwashing—extra.’”\n\n“You couldn’t have wanted it much,” said Alice; “living at the bottom of the\nsea.”\n\n“I couldn’t afford to learn it.” said the Mock Turtle with a sigh. “I only took\nthe regular course.”\n\n“What was that?” inquired Alice.\n\n“Reeling and Writhing, of course, to begin with,” the Mock Turtle replied; “and\nthen the different branches of Arithmetic—Ambition, Distraction, Uglification,\nand Derision.”\n\n“I never heard of ‘Uglification,’” Alice ventured to say. “What is it?”\n\nThe Gryphon lifted up both its paws in surprise. “What! Never heard of\nuglifying!” it exclaimed. “You know what to beautify is, I suppose?”\n\n“Yes,” said Alice doubtfully: “it means—to—make—anything—prettier.”\n\n“Well, then,” the Gryphon went on, “if you don’t know what to uglify is, you are\na simpleton.”\n\nAlice did not feel encouraged to ask any more questions about it, so she turned\nto the Mock Turtle, and said “What else had you to learn?”\n\n“Well, there was Mystery,” the Mock Turtle replied, counting off the subjects on\nhis flappers, “—Mystery, ancient and modern, with Seaography: then Drawling—the\nDrawling-master was an old conger-eel, that used to come once a week: he taught\nus Drawling, Stretching, and Fainting in Coils.”\n\n“What was that like?” said Alice.\n\n“Well, I can’t show it you myself,” the Mock Turtle said: “I’m too stiff. And\nthe Gryphon never learnt it.”\n\n“Hadn’t time,” said the Gryphon: “I went to the Classics master, though. He was\nan old crab, he was.”\n\n“I never went to him,” the Mock Turtle said with a sigh: “he taught Laughing and\nGrief, they used to say.”\n\n“So he did, so he did,” said the Gryphon, sighing in his turn; and both\ncreatures hid their faces in their paws.\n\n“And how many hours a day did you do lessons?” said Alice, in a hurry to change\nthe subject.\n\n“Ten hours the first day,” said the Mock Turtle: “nine the next, and so on.”\n\n“What a curious plan!” exclaimed Alice.\n\n“That’s the reason they’re called lessons,” the Gryphon remarked: “because they\nlessen from day to day.”\n\nThis was quite a new idea to Alice, and she thought it over a little before she\nmade her next remark. “Then the eleventh day must have been a holiday?”\n\n“Of course it was,” said the Mock Turtle.\n\n“And how did you manage on the twelfth?” Alice went on eagerly.\n\n“That’s enough about lessons,” the Gryphon interrupted in a very decided tone:\n“tell her something about the games now.”\n\n## CHAPTER X: The Lobster Quadrille\n\nThe Mock Turtle sighed deeply, and drew the back of one flapper across his eyes.\nHe looked at Alice, and tried to speak, but for a minute or two sobs choked his\nvoice. “Same as if he had a bone in his throat,” said the Gryphon: and it set to\nwork shaking him and punching him in the back. At last the Mock Turtle recovered\nhis voice, and, with tears running down his cheeks, he went on again:—\n\n“You may not have lived much under the sea—” (“I haven’t,” said Alice)—“and\nperhaps you were never even introduced to a lobster—” (Alice began to say “I\nonce tasted—” but checked herself hastily, and said “No, never”) “—so you can\nhave no idea what a delightful thing a Lobster Quadrille is!”\n\n“No, indeed,” said Alice. “What sort of a dance is it?”\n\n“Why,” said the Gryphon, “you first form into a line along the sea-shore—”\n\n“Two lines!” cried the Mock Turtle. “Seals, turtles, salmon, and so on; then,\nwhen you’ve cleared all the jelly-fish out of the way—”\n\n“That generally takes some time,” interrupted the Gryphon.\n\n“—you advance twice—”\n\n“Each with a lobster as a partner!” cried the Gryphon.\n\n“Of course,” the Mock Turtle said: “advance twice, set to partners—”\n\n“—change lobsters, and retire in same order,” continued the Gryphon.\n\n“Then, you know,” the Mock Turtle went on, “you throw the—”\n\n“The lobsters!” shouted the Gryphon, with a bound into the air.\n\n“—as far out to sea as you can—”\n\n“Swim after them!” screamed the Gryphon.\n\n“Turn a somersault in the sea!” cried the Mock Turtle, capering wildly about.\n\n“Change lobsters again!” yelled the Gryphon at the top of its voice.\n\n“Back to land again, and that’s all the first figure,” said the Mock Turtle,\nsuddenly dropping his voice; and the two creatures, who had been jumping about\nlike mad things all this time, sat down again very sadly and quietly, and looked\nat Alice.\n\n“It must be a very pretty dance,” said Alice timidly.\n\n“Would you like to see a little of it?” said the Mock Turtle.\n\n“Very much indeed,” said Alice.\n\n“Come, let’s try the first figure!” said the Mock Turtle to the Gryphon. “We can\ndo without lobsters, you know. Which shall sing?”\n\n“Oh, you sing,” said the Gryphon. “I’ve forgotten the words.”\n\nSo they began solemnly dancing round and round Alice, every now and then\ntreading on her toes when they passed too close, and waving their forepaws to\nmark the time, while the Mock Turtle sang this, very slowly and sadly:—\n\n> “Will you walk a little faster?” said a whiting to a snail. “There’s a\n> porpoise close behind us, and he’s treading on my tail. See how eagerly the\n> lobsters and the turtles all advance! They are waiting on the shingle—will you\n> come and join the dance? Will you, won’t you, will you, won’t you, will you\n> join the dance? Will you, won’t you, will you, won’t you, won’t you join the\n> dance?\n>\n> “You can really have no notion how delightful it will be When they take us up\n> and throw us, with the lobsters, out to sea!” But the snail replied “Too far,\n> too far!” and gave a look askance— Said he thanked the whiting kindly, but he\n> would not join the dance. Would not, could not, would not, could not, would\n> not join the dance. Would not, could not, would not, could not, could not join\n> the dance.\n>\n> “What matters it how far we go?” his scaly friend replied. “There is another\n> shore, you know, upon the other side. The further off from England the nearer\n> is to France— Then turn not pale, beloved snail, but come and join the dance.\n> Will you, won’t you, will you, won’t you, will you join the dance? Will you,\n> won’t you, will you, won’t you, won’t you join the dance?”\n\n“Thank you, it’s a very interesting dance to watch,” said Alice, feeling very\nglad that it was over at last: “and I do so like that curious song about the\nwhiting!”\n\n“Oh, as to the whiting,” said the Mock Turtle, “they—you’ve seen them, of\ncourse?”\n\n“Yes,” said Alice, “I’ve often seen them at dinn—” she checked herself hastily.\n\n“I don’t know where Dinn may be,” said the Mock Turtle, “but if you’ve seen them\nso often, of course you know what they’re like.”\n\n“I believe so,” Alice replied thoughtfully. “They have their tails in their\nmouths—and they’re all over crumbs.”\n\n“You’re wrong about the crumbs,” said the Mock Turtle: “crumbs would all wash\noff in the sea. But they have their tails in their mouths; and the reason is—”\nhere the Mock Turtle yawned and shut his eyes.—“Tell her about the reason and\nall that,” he said to the Gryphon.\n\n“The reason is,” said the Gryphon, “that they would go with the lobsters to the\ndance. So they got thrown out to sea. So they had to fall a long way. So they\ngot their tails fast in their mouths. So they couldn’t get them out again.\nThat’s all.”\n\n“Thank you,” said Alice, “it’s very interesting. I never knew so much about a\nwhiting before.”\n\n“I can tell you more than that, if you like,” said the Gryphon. “Do you know why\nit’s called a whiting?”\n\n“I never thought about it,” said Alice. “Why?”\n\n“It does the boots and shoes,” the Gryphon replied very solemnly.\n\nAlice was thoroughly puzzled. “Does the boots and shoes!” she repeated in a\nwondering tone.\n\n“Why, what are your shoes done with?” said the Gryphon. “I mean, what makes them\nso shiny?”\n\nAlice looked down at them, and considered a little before she gave her answer.\n“They’re done with blacking, I believe.”\n\n“Boots and shoes under the sea,” the Gryphon went on in a deep voice, “are done\nwith a whiting. Now you know.”\n\n“And what are they made of?” Alice asked in a tone of great curiosity.\n\n“Soles and eels, of course,” the Gryphon replied rather impatiently: “any shrimp\ncould have told you that.”\n\n“If I’d been the whiting,” said Alice, whose thoughts were still running on the\nsong, “I’d have said to the porpoise, ‘Keep back, please: we don’t want you with\nus!’”\n\n“They were obliged to have him with them,” the Mock Turtle said: “no wise fish\nwould go anywhere without a porpoise.”\n\n“Wouldn’t it really?” said Alice in a tone of great surprise.\n\n“Of course not,” said the Mock Turtle: “why, if a fish came to me, and told me\nhe was going a journey, I should say ‘With what porpoise?’”\n\n“Don’t you mean ‘purpose’?” said Alice.\n\n“I mean what I say,” the Mock Turtle replied in an offended tone. And the\nGryphon added “Come, let’s hear some of your adventures.”\n\n“I could tell you my adventures—beginning from this morning,” said Alice a\nlittle timidly: “but it’s no use going back to yesterday, because I was a\ndifferent person then.”\n\n“Explain all that,” said the Mock Turtle.\n\n“No, no! The adventures first,” said the Gryphon in an impatient tone:\n“explanations take such a dreadful time.”\n\nSo Alice began telling them her adventures from the time when she first saw the\nWhite Rabbit. She was a little nervous about it just at first, the two creatures\ngot so close to her, one on each side, and opened their eyes and mouths so very\nwide, but she gained courage as she went on. Her listeners were perfectly quiet\ntill she got to the part about her repeating “You are old, Father William,” to\nthe Caterpillar, and the words all coming different, and then the Mock Turtle\ndrew a long breath, and said “That’s very curious.”\n\n“It’s all about as curious as it can be,” said the Gryphon.\n\n“It all came different!” the Mock Turtle repeated thoughtfully. “I should like\nto hear her try and repeat something now. Tell her to begin.” He looked at the\nGryphon as if he thought it had some kind of authority over Alice.\n\n“Stand up and repeat ‘’Tis the voice of the sluggard,’” said the Gryphon.\n\n“How the creatures order one about, and make one repeat lessons!” thought Alice;\n“I might as well be at school at once.” However, she got up, and began to repeat\nit, but her head was so full of the Lobster Quadrille, that she hardly knew what\nshe was saying, and the words came very queer indeed:—\n\n> “’Tis the voice of the Lobster; I heard him declare, “You have baked me too\n> brown, I must sugar my hair.” As a duck with its eyelids, so he with his nose\n> Trims his belt and his buttons, and turns out his toes.”\n>\n> (later editions continued as follows When the sands are all dry, he is gay as\n> a lark, And will talk in contemptuous tones of the Shark, But, when the tide\n> rises and sharks are around, His voice has a timid and tremulous sound.)\n\n“That’s different from what I used to say when I was a child,” said the Gryphon.\n\n“Well, I never heard it before,” said the Mock Turtle; “but it sounds uncommon\nnonsense.”\n\nAlice said nothing; she had sat down with her face in her hands, wondering if\nanything would ever happen in a natural way again.\n\n“I should like to have it explained,” said the Mock Turtle.\n\n“She can’t explain it,” said the Gryphon hastily. “Go on with the next verse.”\n\n“But about his toes?” the Mock Turtle persisted. “How could he turn them out\nwith his nose, you know?”\n\n“It’s the first position in dancing.” Alice said; but was dreadfully puzzled by\nthe whole thing, and longed to change the subject.\n\n“Go on with the next verse,” the Gryphon repeated impatiently: “it begins ‘I\npassed by his garden.’”\n\nAlice did not dare to disobey, though she felt sure it would all come wrong, and\nshe went on in a trembling voice:—\n\n> “I passed by his garden, and marked, with one eye, How the Owl and the Panther\n> were sharing a pie—”\n>\n> (later editions continued as follows The Panther took pie-crust, and gravy,\n> and meat, While the Owl had the dish as its share of the treat. When the pie\n> was all finished, the Owl, as a boon, Was kindly permitted to pocket the\n> spoon: While the Panther received knife and fork with a growl, And concluded\n> the banquet—)\n\n“What is the use of repeating all that stuff,” the Mock Turtle interrupted, “if\nyou don’t explain it as you go on? It’s by far the most confusing thing I ever\nheard!”\n\n“Yes, I think you’d better leave off,” said the Gryphon: and Alice was only too\nglad to do so.\n\n“Shall we try another figure of the Lobster Quadrille?” the Gryphon went on. “Or\nwould you like the Mock Turtle to sing you a song?”\n\n“Oh, a song, please, if the Mock Turtle would be so kind,” Alice replied, so\neagerly that the Gryphon said, in a rather offended tone, “Hm! No accounting for\ntastes! Sing her ‘Turtle Soup,’ will you, old fellow?”\n\nThe Mock Turtle sighed deeply, and began, in a voice sometimes choked with sobs,\nto sing this:—\n\n> “Beautiful Soup, so rich and green, Waiting in a hot tureen! Who for such\n> dainties would not stoop? Soup of the evening, beautiful Soup! Soup of the\n> evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n> of the e—e—evening, Beautiful, beautiful Soup!\n>\n> “Beautiful Soup! Who cares for fish, Game, or any other dish? Who would not\n> give all else for two p ennyworth only of beautiful Soup? Pennyworth only of\n> beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n> e—e—evening, Beautiful, beauti—FUL SOUP!”\n\n“Chorus again!” cried the Gryphon, and the Mock Turtle had just begun to repeat\nit, when a cry of “The trial’s beginning!” was heard in the distance.\n\n“Come on!” cried the Gryphon, and, taking Alice by the hand, it hurried off,\nwithout waiting for the end of the song.\n\n“What trial is it?” Alice panted as she ran; but the Gryphon only answered “Come\non!” and ran the faster, while more and more faintly came, carried on the breeze\nthat followed them, the melancholy words:—\n\n> “Soo—oop of the e—e—evening, Beautiful, beautiful Soup!”\n\n## CHAPTER XI: Who Stole the Tarts?\n\nThe King and Queen of Hearts were seated on their throne when they arrived, with\na great crowd assembled about them—all sorts of little birds and beasts, as well\nas the whole pack of cards: the Knave was standing before them, in chains, with\na soldier on each side to guard him; and near the King was the White Rabbit,\nwith a trumpet in one hand, and a scroll of parchment in the other. In the very\nmiddle of the court was a table, with a large dish of tarts upon it: they looked\nso good, that it made Alice quite hungry to look at them—“I wish they’d get the\ntrial done,” she thought, “and hand round the refreshments!” But there seemed to\nbe no chance of this, so she began looking at everything about her, to pass away\nthe time.\n\nAlice had never been in a court of justice before, but she had read about them\nin books, and she was quite pleased to find that she knew the name of nearly\neverything there. “That’s the judge,” she said to herself, “because of his great\nwig.”\n\nThe judge, by the way, was the King; and as he wore his crown over the wig,\n(look at the frontispiece if you want to see how he did it,) he did not look at\nall comfortable, and it was certainly not becoming.\n\n“And that’s the jury-box,” thought Alice, “and those twelve creatures,” (she was\nobliged to say “creatures,” you see, because some of them were animals, and some\nwere birds,) “I suppose they are the jurors.” She said this last word two or\nthree times over to herself, being rather proud of it: for she thought, and\nrightly too, that very few little girls of her age knew the meaning of it at\nall. However, “jury-men” would have done just as well.\n\nThe twelve jurors were all writing very busily on slates. “What are they doing?”\nAlice whispered to the Gryphon. “They can’t have anything to put down yet,\nbefore the trial’s begun.”\n\n“They’re putting down their names,” the Gryphon whispered in reply, “for fear\nthey should forget them before the end of the trial.”\n\n“Stupid things!” Alice began in a loud, indignant voice, but she stopped\nhastily, for the White Rabbit cried out, “Silence in the court!” and the King\nput on his spectacles and looked anxiously round, to make out who was talking.\n\nAlice could see, as well as if she were looking over their shoulders, that all\nthe jurors were writing down “stupid things!” on their slates, and she could\neven make out that one of them didn’t know how to spell “stupid,” and that he\nhad to ask his neighbour to tell him. “A nice muddle their slates’ll be in\nbefore the trial’s over!” thought Alice.\n\nOne of the jurors had a pencil that squeaked. This of course, Alice could not\nstand, and she went round the court and got behind him, and very soon found an\nopportunity of taking it away. She did it so quickly that the poor little juror\n(it was Bill, the Lizard) could not make out at all what had become of it; so,\nafter hunting all about for it, he was obliged to write with one finger for the\nrest of the day; and this was of very little use, as it left no mark on the\nslate.\n\n“Herald, read the accusation!” said the King.\n\nOn this the White Rabbit blew three blasts on the trumpet, and then unrolled the\nparchment scroll, and read as follows:—\n\n> “The Queen of Hearts, she made some tarts, All on a summer day: The Knave of\n> Hearts, he stole those tarts, And took them quite away!”\n\n“Consider your verdict,” the King said to the jury.\n\n“Not yet, not yet!” the Rabbit hastily interrupted. “There’s a great deal to\ncome before that!”\n\n“Call the first witness,” said the King; and the White Rabbit blew three blasts\non the trumpet, and called out, “First witness!”\n\nThe first witness was the Hatter. He came in with a teacup in one hand and a\npiece of bread-and-butter in the other. “I beg pardon, your Majesty,” he began,\n“for bringing these in: but I hadn’t quite finished my tea when I was sent for.”\n\n“You ought to have finished,” said the King. “When did you begin?”\n\nThe Hatter looked at the March Hare, who had followed him into the court,\narm-in-arm with the Dormouse. “Fourteenth of March, I think it was,” he said.\n\n“Fifteenth,” said the March Hare.\n\n“Sixteenth,” added the Dormouse.\n\n“Write that down,” the King said to the jury, and the jury eagerly wrote down\nall three dates on their slates, and then added them up, and reduced the answer\nto shillings and pence.\n\n“Take off your hat,” the King said to the Hatter.\n\n“It isn’t mine,” said the Hatter.\n\n“Stolen!” the King exclaimed, turning to the jury, who instantly made a\nmemorandum of the fact.\n\n“I keep them to sell,” the Hatter added as an explanation; “I’ve none of my own.\nI’m a hatter.”\n\nHere the Queen put on her spectacles, and began staring at the Hatter, who\nturned pale and fidgeted.\n\n“Give your evidence,” said the King; “and don’t be nervous, or I’ll have you\nexecuted on the spot.”\n\nThis did not seem to encourage the witness at all: he kept shifting from one\nfoot to the other, looking uneasily at the Queen, and in his confusion he bit a\nlarge piece out of his teacup instead of the bread-and-butter.\n\nJust at this moment Alice felt a very curious sensation, which puzzled her a\ngood deal until she made out what it was: she was beginning to grow larger\nagain, and she thought at first she would get up and leave the court; but on\nsecond thoughts she decided to remain where she was as long as there was room\nfor her.\n\n“I wish you wouldn’t squeeze so.” said the Dormouse, who was sitting next to\nher. “I can hardly breathe.”\n\n“I can’t help it,” said Alice very meekly: “I’m growing.”\n\n“You’ve no right to grow here,” said the Dormouse.\n\n“Don’t talk nonsense,” said Alice more boldly: “you know you’re growing too.”\n\n“Yes, but I grow at a reasonable pace,” said the Dormouse: “not in that\nridiculous fashion.” And he got up very sulkily and crossed over to the other\nside of the court.\n\nAll this time the Queen had never left off staring at the Hatter, and, just as\nthe Dormouse crossed the court, she said to one of the officers of the court,\n“Bring me the list of the singers in the last concert!” on which the wretched\nHatter trembled so, that he shook both his shoes off.\n\n“Give your evidence,” the King repeated angrily, “or I’ll have you executed,\nwhether you’re nervous or not.”\n\n“I’m a poor man, your Majesty,” the Hatter began, in a trembling voice, “—and I\nhadn’t begun my tea—not above a week or so—and what with the bread-and-butter\ngetting so thin—and the twinkling of the tea—”\n\n“The twinkling of the what?” said the King.\n\n“It began with the tea,” the Hatter replied.\n\n“Of course twinkling begins with a T!” said the King sharply. “Do you take me\nfor a dunce? Go on!”\n\n“I’m a poor man,” the Hatter went on, “and most things twinkled after that—only\nthe March Hare said—”\n\n“I didn’t!” the March Hare interrupted in a great hurry.\n\n“You did!” said the Hatter.\n\n“I deny it!” said the March Hare.\n\n“He denies it,” said the King: “leave out that part.”\n\n“Well, at any rate, the Dormouse said—” the Hatter went on, looking anxiously\nround to see if he would deny it too: but the Dormouse denied nothing, being\nfast asleep.\n\n“After that,” continued the Hatter, “I cut some more bread-and-butter—”\n\n“But what did the Dormouse say?” one of the jury asked.\n\n“That I can’t remember,” said the Hatter.\n\n“You must remember,” remarked the King, “or I’ll have you executed.”\n\nThe miserable Hatter dropped his teacup and bread-and-butter, and went down on\none knee. “I’m a poor man, your Majesty,” he began.\n\n“You’re a very poor speaker,” said the King.\n\nHere one of the guinea-pigs cheered, and was immediately suppressed by the\nofficers of the court. (As that is rather a hard word, I will just explain to\nyou how it was done. They had a large canvas bag, which tied up at the mouth\nwith strings: into this they slipped the guinea-pig, head first, and then sat\nupon it.)\n\n“I’m glad I’ve seen that done,” thought Alice. “I’ve so often read in the\nnewspapers, at the end of trials, “There was some attempts at applause, which\nwas immediately suppressed by the officers of the court,” and I never understood\nwhat it meant till now.”\n\n“If that’s all you know about it, you may stand down,” continued the King.\n\n“I can’t go no lower,” said the Hatter: “I’m on the floor, as it is.”\n\n“Then you may sit down,” the King replied.\n\nHere the other guinea-pig cheered, and was suppressed.\n\n“Come, that finished the guinea-pigs!” thought Alice. “Now we shall get on\nbetter.”\n\n“I’d rather finish my tea,” said the Hatter, with an anxious look at the Queen,\nwho was reading the list of singers.\n\n“You may go,” said the King, and the Hatter hurriedly left the court, without\neven waiting to put his shoes on.\n\n“—and just take his head off outside,” the Queen added to one of the officers:\nbut the Hatter was out of sight before the officer could get to the door.\n\n“Call the next witness!” said the King.\n\nThe next witness was the Duchess’s cook. She carried the pepper-box in her hand,\nand Alice guessed who it was, even before she got into the court, by the way the\npeople near the door began sneezing all at once.\n\n“Give your evidence,” said the King.\n\n“Shan’t,” said the cook.\n\nThe King looked anxiously at the White Rabbit, who said in a low voice, “Your\nMajesty must cross-examine this witness.”\n\n“Well, if I must, I must,” the King said, with a melancholy air, and, after\nfolding his arms and frowning at the cook till his eyes were nearly out of\nsight, he said in a deep voice, “What are tarts made of?”\n\n“Pepper, mostly,” said the cook.\n\n“Treacle,” said a sleepy voice behind her.\n\n“Collar that Dormouse,” the Queen shrieked out. “Behead that Dormouse! Turn that\nDormouse out of court! Suppress him! Pinch him! Off with his whiskers!”\n\nFor some minutes the whole court was in confusion, getting the Dormouse turned\nout, and, by the time they had settled down again, the cook had disappeared.\n\n“Never mind!” said the King, with an air of great relief. “Call the next\nwitness.” And he added in an undertone to the Queen, “Really, my dear, you must\ncross-examine the next witness. It quite makes my forehead ache!”\n\nAlice watched the White Rabbit as he fumbled over the list, feeling very curious\nto see what the next witness would be like, “—for they haven’t got much evidence\nyet,” she said to herself. Imagine her surprise, when the White Rabbit read out,\nat the top of his shrill little voice, the name “Alice!”\n\n## CHAPTER XII: Alice’s Evidence\n\n“Here!” cried Alice, quite forgetting in the flurry of the moment how large she\nhad grown in the last few minutes, and she jumped up in such a hurry that she\ntipped over the jury-box with the edge of her skirt, upsetting all the jurymen\non to the heads of the crowd below, and there they lay sprawling about,\nreminding her very much of a globe of goldfish she had accidentally upset the\nweek before.\n\n“Oh, I beg your pardon!” she exclaimed in a tone of great dismay, and began\npicking them up again as quickly as she could, for the accident of the goldfish\nkept running in her head, and she had a vague sort of idea that they must be\ncollected at once and put back into the jury-box, or they would die.\n\n“The trial cannot proceed,” said the King in a very grave voice, “until all the\njurymen are back in their proper places—all,” he repeated with great emphasis,\nlooking hard at Alice as he said so.\n\nAlice looked at the jury-box, and saw that, in her haste, she had put the Lizard\nin head downwards, and the poor little thing was waving its tail about in a\nmelancholy way, being quite unable to move. She soon got it out again, and put\nit right; “not that it signifies much,” she said to herself; “I should think it\nwould be quite as much use in the trial one way up as the other.”\n\nAs soon as the jury had a little recovered from the shock of being upset, and\ntheir slates and pencils had been found and handed back to them, they set to\nwork very diligently to write out a history of the accident, all except the\nLizard, who seemed too much overcome to do anything but sit with its mouth open,\ngazing up into the roof of the court.\n\n“What do you know about this business?” the King said to Alice.\n\n“Nothing,” said Alice.\n\n“Nothing whatever?” persisted the King.\n\n“Nothing whatever,” said Alice.\n\n“That’s very important,” the King said, turning to the jury. They were just\nbeginning to write this down on their slates, when the White Rabbit interrupted:\n“Unimportant, your Majesty means, of course,” he said in a very respectful tone,\nbut frowning and making faces at him as he spoke.\n\n“Unimportant, of course, I meant,” the King hastily said, and went on to himself\nin an undertone,\n\n“important—unimportant—unimportant—important—” as if he were trying which word\nsounded best.\n\nSome of the jury wrote it down “important,” and some “unimportant.” Alice could\nsee this, as she was near enough to look over their slates; “but it doesn’t\nmatter a bit,” she thought to herself.\n\nAt this moment the King, who had been for some time busily writing in his\nnote-book, cackled out “Silence!” and read out from his book, “Rule Forty-two.\nAll persons more than a mile high to leave the court.”\n\nEverybody looked at Alice.\n\n“I’m not a mile high,” said Alice.\n\n“You are,” said the King.\n\n“Nearly two miles high,” added the Queen.\n\n“Well, I shan’t go, at any rate,” said Alice: “besides, that’s not a regular\nrule: you invented it just now.”\n\n“It’s the oldest rule in the book,” said the King.\n\n“Then it ought to be Number One,” said Alice.\n\nThe King turned pale, and shut his note-book hastily. “Consider your verdict,”\nhe said to the jury, in a low, trembling voice.\n\n“There’s more evidence to come yet, please your Majesty,” said the White Rabbit,\njumping up in a great hurry; “this paper has just been picked up.”\n\n“What’s in it?” said the Queen.\n\n“I haven’t opened it yet,” said the White Rabbit, “but it seems to be a letter,\nwritten by the prisoner to—to somebody.”\n\n“It must have been that,” said the King, “unless it was written to nobody, which\nisn’t usual, you know.”\n\n“Who is it directed to?” said one of the jurymen.\n\n“It isn’t directed at all,” said the White Rabbit; “in fact, there’s nothing\nwritten on the outside.” He unfolded the paper as he spoke, and added “It isn’t\na letter, after all: it’s a set of verses.”\n\n“Are they in the prisoner’s handwriting?” asked another of the jurymen.\n\n“No, they’re not,” said the White Rabbit, “and that’s the queerest thing about\nit.” (The jury all looked puzzled.)\n\n“He must have imitated somebody else’s hand,” said the King. (The jury all\nbrightened up again.)\n\n“Please your Majesty,” said the Knave, “I didn’t write it, and they can’t prove\nI did: there’s no name signed at the end.”\n\n“If you didn’t sign it,” said the King, “that only makes the matter worse. You\nmust have meant some mischief, or else you’d have signed your name like an\nhonest man.”\n\nThere was a general clapping of hands at this: it was the first really clever\nthing the King had said that day.\n\n“That proves his guilt,” said the Queen.\n\n“It proves nothing of the sort!” said Alice. “Why, you don’t even know what\nthey’re about!”\n\n“Read them,” said the King.\n\nThe White Rabbit put on his spectacles. “Where shall I begin, please your\nMajesty?” he asked.\n\n“Begin at the beginning,” the King said gravely, “and go on till you come to the\nend: then stop.”\n\nThese were the verses the White Rabbit read:—\n\n> “They told me you had been to her, And mentioned me to him: She gave me a good\n> character, But said I could not swim.\n>\n> He sent them word I had not gone (We know it to be true): If she should push\n> the matter on, What would become of you?\n>\n> I gave her one, they gave him two, You gave us three or more; They all\n> returned from him to you, Though they were mine before.\n>\n> If I or she should chance to be Involved in this affair, He trusts to you to\n> set them free, Exactly as we were.\n>\n> My notion was that you had been (Before she had this fit) An obstacle that\n> came between Him, and ourselves, and it.\n>\n> Don’t let him know she liked them best, For this must ever be A secret, kept\n> from all the rest, Between yourself and me.”\n\n“That’s the most important piece of evidence we’ve heard yet,” said the King,\nrubbing his hands; “so now let the jury—”\n\n“If any one of them can explain it,” said Alice, (she had grown so large in the\nlast few minutes that she wasn’t a bit afraid of interrupting him,) “I’ll give\nhim sixpence. I don’t believe there’s an atom of meaning in it.”\n\nThe jury all wrote down on their slates, “She doesn’t believe there’s an atom of\nmeaning in it,” but none of them attempted to explain the paper.\n\n“If there’s no meaning in it,” said the King, “that saves a world of trouble,\nyou know, as we needn’t try to find any. And yet I don’t know,” he went on,\nspreading out the verses on his knee, and looking at them with one eye; “I seem\nto see some meaning in them, after all. “—said I could not swim—” you can’t\nswim, can you?” he added, turning to the Knave.\n\nThe Knave shook his head sadly. “Do I look like it?” he said. (Which he\ncertainly did not, being made entirely of cardboard.)\n\n“All right, so far,” said the King, and he went on muttering over the verses to\nhimself: “‘We know it to be true—’ that’s the jury, of course—‘I gave her one,\nthey gave him two—’ why, that must be what he did with the tarts, you know—”\n\n“But, it goes on ‘they all returned from him to you,’” said Alice.\n\n“Why, there they are!” said the King triumphantly, pointing to the tarts on the\ntable. “Nothing can be clearer than that. Then again—‘before she had this fit—’\nyou never had fits, my dear, I think?” he said to the Queen.\n\n“Never!” said the Queen furiously, throwing an inkstand at the Lizard as she\nspoke. (The unfortunate little Bill had left off writing on his slate with one\nfinger, as he found it made no mark; but he now hastily began again, using the\nink, that was trickling down his face, as long as it lasted.)\n\n“Then the words don’t fit you,” said the King, looking round the court with a\nsmile. There was a dead silence.\n\n“It’s a pun!” the King added in an offended tone, and everybody laughed, “Let\nthe jury consider their verdict,” the King said, for about the twentieth time\nthat day.\n\n“No, no!” said the Queen. “Sentence first—verdict afterwards.”\n\n“Stuff and nonsense!” said Alice loudly. “The idea of having the sentence\nfirst!”\n\n“Hold your tongue!” said the Queen, turning purple.\n\n“I won’t!” said Alice.\n\n“Off with her head!” the Queen shouted at the top of her voice. Nobody moved.\n\n“Who cares for you?” said Alice, (she had grown to her full size by this time.)\n“You’re nothing but a pack of cards!”\n\nAt this the whole pack rose up into the air, and came flying down upon her: she\ngave a little scream, half of fright and half of anger, and tried to beat them\noff, and found herself lying on the bank, with her head in the lap of her\nsister, who was gently brushing away some dead leaves that had fluttered down\nfrom the trees upon her face.\n\n“Wake up, Alice dear!” said her sister; “Why, what a long sleep you’ve had!”\n\n“Oh, I’ve had such a curious dream!” said Alice, and she told her sister, as\nwell as she could remember them, all these strange Adventures of hers that you\nhave just been reading about; and when she had finished, her sister kissed her,\nand said, “It was a curious dream, dear, certainly: but now run in to your tea;\nit’s getting late.” So Alice got up and ran off, thinking while she ran, as well\nshe might, what a wonderful dream it had been.\n\n---\n\nBut her sister sat still just as she left her, leaning her head on her hand,\nwatching the setting sun, and thinking of little Alice and all her wonderful\nAdventures, till she too began dreaming after a fashion, and this was her\ndream:—\n\nFirst, she dreamed of little Alice herself, and once again the tiny hands were\nclasped upon her knee, and the bright eager eyes were looking up into hers—she\ncould hear the very tones of her voice, and see that queer little toss of her\nhead to keep back the wandering hair that would always get into her eyes—and\nstill as she listened, or seemed to listen, the whole place around her became\nalive with the strange creatures of her little sister’s dream.\n\nThe long grass rustled at her feet as the White Rabbit hurried by—the frightened\nMouse splashed his way through the neighbouring pool—she could hear the rattle\nof the teacups as the March Hare and his friends shared their never-ending meal,\nand the shrill voice of the Queen ordering off her unfortunate guests to\nexecution—once more the pig-baby was sneezing on the Duchess’s knee, while\nplates and dishes crashed around it—once more the shriek of the Gryphon, the\nsqueaking of the Lizard’s slate-pencil, and the choking of the suppressed\nguinea-pigs, filled the air, mixed up with the distant sobs of the miserable\nMock Turtle.\n\nSo she sat on, with closed eyes, and half believed herself in Wonderland, though\nshe knew she had but to open them again, and all would change to dull\nreality—the grass would be only rustling in the wind, and the pool rippling to\nthe waving of the reeds—the rattling teacups would change to tinkling\nsheep-bells, and the Queen’s shrill cries to the voice of the shepherd boy—and\nthe sneeze of the baby, the shriek of the Gryphon, and all the other queer\nnoises, would change (she knew) to the confused clamour of the busy\nfarm-yard—while the lowing of the cattle in the distance would take the place of\nthe Mock Turtle’s heavy sobs.\n\nLastly, she pictured to herself how this same little sister of hers would, in\nthe after-time, be herself a grown woman; and how she would keep, through all\nher riper years, the simple and loving heart of her childhood: and how she would\ngather about her other little children, and make their eyes bright and eager\nwith many a strange tale, perhaps even with the dream of Wonderland of long ago:\nand how she would feel with all their simple sorrows, and find a pleasure in all\ntheir simple joys, remembering her own child-life, and the happy summer days.\n\nTHE END\n"
  },
  {
    "path": "harper-core/tests/text/Computer science.md",
    "content": "<!--\nsource: https://en.wikipedia.org/w/index.php?title=Computer_science&oldid=1286173304\nlicense: CC BY-SA 4.0\n-->\n\n# Computer science\n\nComputer science is the study of computation, information, and automation.\nComputer science spans theoretical disciplines (such as algorithms, theory of\ncomputation, and information theory) to applied disciplines (including the\ndesign and implementation of hardware and software).\n\nAlgorithms and data structures are central to computer science. The theory of\ncomputation concerns abstract models of computation and general classes of\nproblems that can be solved using them. The fields of cryptography and computer\nsecurity involve studying the means for secure communication and preventing\nsecurity vulnerabilities. Computer graphics and computational geometry address\nthe generation of images. Programming language theory considers different ways\nto describe computational processes, and database theory concerns the management\nof repositories of data. Human–computer interaction investigates the interfaces\nthrough which humans and computers interact, and software engineering focuses on\nthe design and principles behind developing software. Areas such as operating\nsystems, networks and embedded systems investigate the principles and design\nbehind complex systems. Computer architecture describes the construction of\ncomputer components and computer-operated equipment. Artificial intelligence and\nmachine learning aim to synthesize goal-orientated processes such as\nproblem-solving, decision-making, environmental adaptation, planning and\nlearning found in humans and animals. Within artificial intelligence, computer\nvision aims to understand and process image and video data, while natural\nlanguage processing aims to understand and process textual and linguistic data.\n\nThe fundamental concern of computer science is determining what can and cannot\nbe automated. The Turing Award is generally recognized as the highest\ndistinction in computer science.\n\n## History\n\nThe earliest foundations of what would become computer science predate the\ninvention of the modern digital computer. Machines for calculating fixed\nnumerical tasks such as the abacus have existed since antiquity, aiding in\ncomputations such as multiplication and division. Algorithms for performing\ncomputations have existed since antiquity, even before the development of\nsophisticated computing equipment.\n\nWilhelm Schickard designed and constructed the first working mechanical\ncalculator in 1623. In 1673, Gottfried Leibniz demonstrated a digital mechanical\ncalculator, called the Stepped Reckoner. Leibniz may be considered the first\ncomputer scientist and information theorist, because of various reasons,\nincluding the fact that he documented the binary number system. In 1820, Thomas\nde Colmar launched the mechanical calculator industry[note 1] when he invented\nhis simplified arithmometer, the first calculating machine strong enough and\nreliable enough to be used daily in an office environment. Charles Babbage\nstarted the design of the first automatic mechanical calculator, his Difference\nEngine, in 1822, which eventually gave him the idea of the first programmable\nmechanical calculator, his Analytical Engine. He started developing this machine\nin 1834, and \"in less than two years, he had sketched out many of the salient\nfeatures of the modern computer\". \"A crucial step was the adoption of a punched\ncard system derived from the Jacquard loom\" making it infinitely\nprogrammable.[note 2] In 1843, during the translation of a French article on the\nAnalytical Engine, Ada Lovelace wrote, in one of the many notes she included, an\nalgorithm to compute the Bernoulli numbers, which is considered to be the first\npublished algorithm ever specifically tailored for implementation on a computer.\nAround 1885, Herman Hollerith invented the tabulator, which used punched cards\nto process statistical information; eventually his company became part of IBM.\nFollowing Babbage, although unaware of his earlier work, Percy Ludgate in 1909\npublished the 2nd of the only two designs for mechanical analytical engines in\nhistory. In 1914, the Spanish engineer Leonardo Torres Quevedo published his\nEssays on Automatics, and designed, inspired by Babbage, a theoretical\nelectromechanical calculating machine which was to be controlled by a read-only\nprogram. The paper also introduced the idea of floating-point arithmetic. In\n1920, to celebrate the 100th anniversary of the invention of the arithmometer,\nTorres presented in Paris the Electromechanical Arithmometer, a prototype that\ndemonstrated the feasibility of an electromechanical analytical engine, on which\ncommands could be typed and the results printed automatically. In 1937, one\nhundred years after Babbage's impossible dream, Howard Aiken convinced IBM,\nwhich was making all kinds of punched card equipment and was also in the\ncalculator business to develop his giant programmable calculator, the\nASCC/Harvard Mark I, based on Babbage's Analytical Engine, which itself used\ncards and a central computing unit. When the machine was finished, some hailed\nit as \"Babbage's dream come true\".\n\nDuring the 1940s, with the development of new and more powerful computing\nmachines such as the Atanasoff–Berry computer and ENIAC, the term computer came\nto refer to the machines rather than their human predecessors. As it became\nclear that computers could be used for more than just mathematical calculations,\nthe field of computer science broadened to study computation in general. In\n1945, IBM founded the Watson Scientific Computing Laboratory at Columbia\nUniversity in New York City. The renovated fraternity house on Manhattan's West\nSide was IBM's first laboratory devoted to pure science. The lab is the\nforerunner of IBM's Research Division, which today operates research facilities\naround the world. Ultimately, the close relationship between IBM and Columbia\nUniversity was instrumental in the emergence of a new scientific discipline,\nwith Columbia offering one of the first academic-credit courses in computer\nscience in 1946. Computer science began to be established as a distinct academic\ndiscipline in the 1950s and early 1960s. The world's first computer science\ndegree program, the Cambridge Diploma in Computer Science, began at the\nUniversity of Cambridge Computer Laboratory in 1953. The first computer science\ndepartment in the United States was formed at Purdue University in 1962. Since\npractical computers became available, many applications of computing have become\ndistinct areas of study in their own rights.\n\n## Etymology and scope\n\nAlthough first proposed in 1956, the term \"computer science\" appears in a 1959\narticle in Communications of the ACM, in which Louis Fein argues for the\ncreation of a Graduate School in Computer Sciences analogous to the creation of\nHarvard Business School in 1921. Louis justifies the name by arguing that, like\nmanagement science, the subject is applied and interdisciplinary in nature,\nwhile having the characteristics typical of an academic discipline. His efforts,\nand those of others such as numerical analyst George Forsythe, were rewarded:\nuniversities went on to create such departments, starting with Purdue in 1962.\nDespite its name, a significant amount of computer science does not involve the\nstudy of computers themselves. Because of this, several alternative names have\nbeen proposed. Certain departments of major universities prefer the term\ncomputing science, to emphasize precisely that difference. Danish scientist\nPeter Naur suggested the term datalogy, to reflect the fact that the scientific\ndiscipline revolves around data and data treatment, while not necessarily\ninvolving computers. The first scientific institution to use the term was the\nDepartment of Datalogy at the University of Copenhagen, founded in 1969, with\nPeter Naur being the first professor in datalogy. The term is used mainly in the\nScandinavian countries. An alternative term, also proposed by Naur, is data\nscience; this is now used for a multi-disciplinary field of data analysis,\nincluding statistics and databases.\n\nIn the early days of computing, a number of terms for the practitioners of the\nfield of computing were suggested (albeit facetiously) in the Communications of\nthe ACM—turingineer, turologist, flow-charts-man, applied meta-mathematician,\nand applied epistemologist. Three months later in the same journal, comptologist\nwas suggested, followed next year by hypologist. The term computics has also\nbeen suggested. In Europe, terms derived from contracted translations of the\nexpression \"automatic information\" (e.g. \"informazione automatica\" in Italian)\nor \"information and mathematics\" are often used, e.g. informatique (French),\nInformatik (German), informatica (Italian, Dutch), informática (Spanish,\nPortuguese), informatika (Slavic languages and Hungarian) or pliroforiki\n(πληροφορική, which means informatics) in Greek. Similar words have also been\nadopted in the UK (as in the School of Informatics, University of Edinburgh).\n\"In the U.S., however, informatics is linked with applied computing, or\ncomputing in the context of another domain.\"\n\nA folkloric quotation, often attributed to—but almost certainly not first\nformulated by—Edsger Dijkstra, states that \"computer science is no more about\ncomputers than astronomy is about telescopes.\"[note 3] The design and deployment\nof computers and computer systems is generally considered the province of\ndisciplines other than computer science. For example, the study of computer\nhardware is usually considered part of computer engineering, while the study of\ncommercial computer systems and their deployment is often called information\ntechnology or information systems. However, there has been exchange of ideas\nbetween the various computer-related disciplines. Computer science research also\noften intersects other disciplines, such as cognitive science, linguistics,\nmathematics, physics, biology, Earth science, statistics, philosophy, and logic.\n\nComputer science is considered by some to have a much closer relationship with\nmathematics than many scientific disciplines, with some observers saying that\ncomputing is a mathematical science. Early computer science was strongly\ninfluenced by the work of mathematicians such as Kurt Gödel, Alan Turing, John\nvon Neumann, Rózsa Péter and Alonzo Church and there continues to be a useful\ninterchange of ideas between the two fields in areas such as mathematical logic,\ncategory theory, domain theory, and algebra.\n\nThe relationship between computer science and software engineering is a\ncontentious issue, which is further muddied by disputes over what the term\n\"software engineering\" means, and how computer science is defined. David Parnas,\ntaking a cue from the relationship between other engineering and science\ndisciplines, has claimed that the principal focus of computer science is\nstudying the properties of computation in general, while the principal focus of\nsoftware engineering is the design of specific computations to achieve practical\ngoals, making the two separate but complementary disciplines.\n\nThe academic, political, and funding aspects of computer science tend to depend\non whether a department is formed with a mathematical emphasis or with an\nengineering emphasis. Computer science departments with a mathematics emphasis\nand with a numerical orientation consider alignment with computational science.\nBoth types of departments tend to make efforts to bridge the field educationally\nif not across all research.\n\n## Philosophy\n\n### Epistemology of computer science\n\nDespite the word science in its name, there is debate over whether or not\ncomputer science is a discipline of science, mathematics, or engineering. Allen\nNewell and Herbert A. Simon argued in 1975,\n\n> Computer science is an empirical discipline. We would have called it an\n> experimental science, but like astronomy, economics, and geology, some of its\n> unique forms of observation and experience do not fit a narrow stereotype of\n> the experimental method. Nonetheless, they are experiments. Each new machine\n> that is built is an experiment. Actually constructing the machine poses a\n> question to nature; and we listen for the answer by observing the machine in\n> operation and analyzing it by all analytical and measurement means available.\n\nIt has since been argued that computer science can be classified as an empirical\nscience since it makes use of empirical testing to evaluate the correctness of\nprograms, but a problem remains in defining the laws and theorems of computer\nscience (if any exist) and defining the nature of experiments in computer\nscience. Proponents of classifying computer science as an engineering discipline\nargue that the reliability of computational systems is investigated in the same\nway as bridges in civil engineering and airplanes in aerospace engineering. They\nalso argue that while empirical sciences observe what presently exists, computer\nscience observes what is possible to exist and while scientists discover laws\nfrom observation, no proper laws have been found in computer science and it is\ninstead concerned with creating phenomena.\n\nProponents of classifying computer science as a mathematical discipline argue\nthat computer programs are physical realizations of mathematical entities and\nprograms that can be deductively reasoned through mathematical formal methods.\nComputer scientists Edsger W. Dijkstra and Tony Hoare regard instructions for\ncomputer programs as mathematical sentences and interpret formal semantics for\nprogramming languages as mathematical axiomatic systems.\n\n### Paradigms of computer science\n\nA number of computer scientists have argued for the distinction of three\nseparate paradigms in computer science. Peter Wegner argued that those paradigms\nare science, technology, and mathematics. Peter Denning's working group argued\nthat they are theory, abstraction (modeling), and design. Amnon H. Eden\ndescribed them as the \"rationalist paradigm\" (which treats computer science as a\nbranch of mathematics, which is prevalent in theoretical computer science, and\nmainly employs deductive reasoning), the \"technocratic paradigm\" (which might be\nfound in engineering approaches, most prominently in software engineering), and\nthe \"scientific paradigm\" (which approaches computer-related artifacts from the\nempirical perspective of natural sciences, identifiable in some branches of\nartificial intelligence). Computer science focuses on methods involved in\ndesign, specification, programming, verification, implementation and testing of\nhuman-made computing systems.\n\n## Fields\n\nAs a discipline, computer science spans a range of topics from theoretical\nstudies of algorithms and the limits of computation to the practical issues of\nimplementing computing systems in hardware and software. CSAB, formerly called\nComputing Sciences Accreditation Board—which is made up of representatives of\nthe Association for Computing Machinery (ACM), and the IEEE Computer Society\n(IEEE CS)—identifies four areas that it considers crucial to the discipline of\ncomputer science: theory of computation, algorithms and data structures,\nprogramming methodology and languages, and computer elements and architecture.\nIn addition to these four areas, CSAB also identifies fields such as software\nengineering, artificial intelligence, computer networking and communication,\ndatabase systems, parallel computation, distributed computation, human–computer\ninteraction, computer graphics, operating systems, and numerical and symbolic\ncomputation as being important areas of computer science.\n\n### Theoretical computer science\n\nTheoretical computer science is mathematical and abstract in spirit, but it\nderives its motivation from practical and everyday computation. It aims to\nunderstand the nature of computation and, as a consequence of this\nunderstanding, provide more efficient methodologies.\n\n#### Theory of computation\n\nAccording to Peter Denning, the fundamental question underlying computer science\nis, \"What can be automated?\" Theory of computation is focused on answering\nfundamental questions about what can be computed and what amount of resources\nare required to perform those computations. In an effort to answer the first\nquestion, computability theory examines which computational problems are\nsolvable on various theoretical models of computation. The second question is\naddressed by computational complexity theory, which studies the time and space\ncosts associated with different approaches to solving a multitude of\ncomputational problems.\n\nThe famous P = NP? problem, one of the Millennium Prize Problems, is an open\nproblem in the theory of computation.\n\n#### Information and coding theory\n\nInformation theory, closely related to probability and statistics, is related to\nthe quantification of information. This was developed by Claude Shannon to find\nfundamental limits on signal processing operations such as compressing data and\non reliably storing and communicating data. Coding theory is the study of the\nproperties of codes (systems for converting information from one form to\nanother) and their fitness for a specific application. Codes are used for data\ncompression, cryptography, error detection and correction, and more recently\nalso for network coding. Codes are studied for the purpose of designing\nefficient and reliable data transmission methods.\n\n#### Data structures and algorithms\n\nData structures and algorithms are the studies of commonly used computational\nmethods and their computational efficiency.\n\n#### Programming language theory and formal methods\n\nProgramming language theory is a branch of computer science that deals with the\ndesign, implementation, analysis, characterization, and classification of\nprogramming languages and their individual features. It falls within the\ndiscipline of computer science, both depending on and affecting mathematics,\nsoftware engineering, and linguistics. It is an active research area, with\nnumerous dedicated academic journals.\n\nFormal methods are a particular kind of mathematically based technique for the\nspecification, development and verification of software and hardware systems.\nThe use of formal methods for software and hardware design is motivated by the\nexpectation that, as in other engineering disciplines, performing appropriate\nmathematical analysis can contribute to the reliability and robustness of a\ndesign. They form an important theoretical underpinning for software\nengineering, especially where safety or security is involved. Formal methods are\na useful adjunct to software testing since they help avoid errors and can also\ngive a framework for testing. For industrial use, tool support is required.\nHowever, the high cost of using formal methods means that they are usually only\nused in the development of high-integrity and life-critical systems, where\nsafety or security is of utmost importance. Formal methods are best described as\nthe application of a fairly broad variety of theoretical computer science\nfundamentals, in particular logic calculi, formal languages, automata theory,\nand program semantics, but also type systems and algebraic data types to\nproblems in software and hardware specification and verification.\n\n### Applied computer science\n\n#### Computer graphics and visualization\n\nComputer graphics is the study of digital visual contents and involves the\nsynthesis and manipulation of image data. The study is connected to many other\nfields in computer science, including computer vision, image processing, and\ncomputational geometry, and is heavily applied in the fields of special effects\nand video games.\n\n#### Image and sound processing\n\nInformation can take the form of images, sound, video or other multimedia. Bits\nof information can be streamed via signals. Its processing is the central notion\nof informatics, the European view on computing, which studies information\nprocessing algorithms independently of the type of information carrier – whether\nit is electrical, mechanical or biological. This field plays important role in\ninformation theory, telecommunications, information engineering and has\napplications in medical image computing and speech synthesis, among others. What\nis the lower bound on the complexity of fast Fourier transform algorithms? is\none of the unsolved problems in theoretical computer science.\n\n#### Computational science, finance and engineering\n\nScientific computing (or computational science) is the field of study concerned\nwith constructing mathematical models and quantitative analysis techniques and\nusing computers to analyze and solve scientific problems. A major usage of\nscientific computing is simulation of various processes, including computational\nfluid dynamics, physical, electrical, and electronic systems and circuits, as\nwell as societies and social situations (notably war games) along with their\nhabitats, among many others. Modern computers enable optimization of such\ndesigns as complete aircraft. Notable in electrical and electronic circuit\ndesign are SPICE, as well as software for physical realization of new (or\nmodified) designs. The latter includes essential design software for integrated\ncircuits.\n\n#### Human–computer interaction\n\nHuman–computer interaction (HCI) is the field of study and research concerned\nwith the design and use of computer systems, mainly based on the analysis of the\ninteraction between humans and computer interfaces. HCI has several subfields\nthat focus on the relationship between emotions, social behavior and brain\nactivity with computers.\n\n#### Software engineering\n\nSoftware engineering is the study of designing, implementing, and modifying the\nsoftware in order to ensure it is of high quality, affordable, maintainable, and\nfast to build. It is a systematic approach to software design, involving the\napplication of engineering practices to software. Software engineering deals\nwith the organizing and analyzing of software—it does not just deal with the\ncreation or manufacture of new software, but its internal arrangement and\nmaintenance. For example software testing, systems engineering, technical debt\nand software development processes.\n\n#### Artificial intelligence\n\nArtificial intelligence (AI) aims to or is required to synthesize\ngoal-orientated processes such as problem-solving, decision-making,\nenvironmental adaptation, learning, and communication found in humans and\nanimals. From its origins in cybernetics and in the Dartmouth Conference (1956),\nartificial intelligence research has been necessarily cross-disciplinary,\ndrawing on areas of expertise such as applied mathematics, symbolic logic,\nsemiotics, electrical engineering, philosophy of mind, neurophysiology, and\nsocial intelligence. AI is associated in the popular mind with robotic\ndevelopment, but the main field of practical application has been as an embedded\ncomponent in areas of software development, which require computational\nunderstanding. The starting point in the late 1940s was Alan Turing's question\n\"Can computers think?\", and the question remains effectively unanswered,\nalthough the Turing test is still used to assess computer output on the scale of\nhuman intelligence. But the automation of evaluative and predictive tasks has\nbeen increasingly successful as a substitute for human monitoring and\nintervention in domains of computer application involving complex real-world\ndata.\n\n### Computer systems\n\n#### Computer architecture and microarchitecture\n\nComputer architecture, or digital computer organization, is the conceptual\ndesign and fundamental operational structure of a computer system. It focuses\nlargely on the way by which the central processing unit performs internally and\naccesses addresses in memory. Computer engineers study computational logic and\ndesign of computer hardware, from individual processor components,\nmicrocontrollers, personal computers to supercomputers and embedded systems. The\nterm \"architecture\" in computer literature can be traced to the work of Lyle R.\nJohnson and Frederick P. Brooks Jr., members of the Machine Organization\ndepartment in IBM's main research center in 1959.\n\n#### Concurrent, parallel and distributed computing\n\nConcurrency is a property of systems in which several computations are executing\nsimultaneously, and potentially interacting with each other. A number of\nmathematical models have been developed for general concurrent computation\nincluding Petri nets, process calculi and the parallel random access machine\nmodel. When multiple computers are connected in a network while using\nconcurrency, this is known as a distributed system. Computers within that\ndistributed system have their own private memory, and information can be\nexchanged to achieve common goals.\n\n#### Computer networks\n\nThis branch of computer science aims to manage networks between computers\nworldwide.\n\n#### Computer security and cryptography\n\nComputer security is a branch of computer technology with the objective of\nprotecting information from unauthorized access, disruption, or modification\nwhile maintaining the accessibility and usability of the system for its intended\nusers.\n\nHistorical cryptography is the art of writing and deciphering secret messages.\nModern cryptography is the scientific study of problems relating to distributed\ncomputations that can be attacked. Technologies studied in modern cryptography\ninclude symmetric and asymmetric encryption, digital signatures, cryptographic\nhash functions, key-agreement protocols, blockchain, zero-knowledge proofs, and\ngarbled circuits.\n\n#### Databases and data mining\n\nA database is intended to organize, store, and retrieve large amounts of data\neasily. Digital databases are managed using database management systems to\nstore, create, maintain, and search data, through database models and query\nlanguages. Data mining is a process of discovering patterns in large data sets.\n\n## Discoveries\n\nThe philosopher of computing Bill Rapaport noted three Great Insights of\nComputer Science:\n\n- Gottfried Wilhelm Leibniz's, George Boole's, Alan Turing's, Claude Shannon's,\n  and Samuel Morse's insight: there are only two objects that a computer has to\n  deal with in order to represent \"anything\".[note 4]\n  > All the information about any computable problem can be represented using\n  > only 0 and 1 (or any other bistable pair that can flip-flop between two\n  > easily distinguishable states, such as \"on/off\", \"magnetized/de-magnetized\",\n  > \"high-voltage/low-voltage\", etc.).\n- Alan Turing's insight: there are only five actions that a computer has to\n  perform in order to do \"anything\".\n\n  Every algorithm can be expressed in a language for a computer consisting of\n  only five basic instructions:\n\n  - move left one location;\n  - move right one location;\n  - read symbol at current location;\n  - print 0 at current location;\n  - print 1 at current location.\n\n- Corrado Böhm and Giuseppe Jacopini's insight: there are only three ways of\n  combining these actions (into more complex ones) that are needed in order for\n  a computer to do \"anything\".\n\n  Only three rules are needed to combine any set of basic instructions into more\n  complex ones:\n\n  - sequence: first do this, then do that;\n  - selection: IF such-and-such is the case, THEN do this, ELSE do that;\n  - repetition: WHILE such-and-such is the case, DO this. The three rules of\n    Boehm's and Jacopini's insight can be further simplified with the use of\n    goto (which means it is more elementary than structured programming).\n\n## Programming paradigms\n\nProgramming languages can be used to accomplish different tasks in different\nways. Common programming paradigms include:\n\n- Functional programming, a style of building the structure and elements of\n  computer programs that treats computation as the evaluation of mathematical\n  functions and avoids state and mutable data. It is a declarative programming\n  paradigm, which means programming is done with expressions or declarations\n  instead of statements.\n- Imperative programming, a programming paradigm that uses statements that\n  change a program's state. In much the same way that the imperative mood in\n  natural languages expresses commands, an imperative program consists of\n  commands for the computer to perform. Imperative programming focuses on\n  describing how a program operates.\n- Object-oriented programming, a programming paradigm based on the concept of\n  \"objects\", which may contain data, in the form of fields, often known as\n  attributes; and code, in the form of procedures, often known as methods. A\n  feature of objects is that an object's procedures can access and often modify\n  the data fields of the object with which they are associated. Thus\n  object-oriented computer programs are made out of objects that interact with\n  one another.\n- Service-oriented programming, a programming paradigm that uses \"services\" as\n  the unit of computer work, to design and implement integrated business\n  applications and mission critical software programs.\n\nMany languages offer support for multiple paradigms, making the distinction more\na matter of style than of technical capabilities.\n\n## Research\n\nConferences are important events for computer science research. During these\nconferences, researchers from the public and private sectors present their\nrecent work and meet. Unlike in most other academic fields, in computer science,\nthe prestige of conference papers is greater than that of journal publications.\nOne proposed explanation for this is the quick development of this relatively\nnew field requires rapid review and distribution of results, a task better\nhandled by conferences than by journals.\n"
  },
  {
    "path": "harper-core/tests/text/Difficult sentences.md",
    "content": "# Difficult sentences\n\nA collection of difficult sentences to test Harper's ability to correctly tag unusual/uncommon but correct sentences.\n\nNote that some word may **not** be tagged correctly right now.\n\nMost example sentences are taken from https://en.wiktionary.org/. License: CC BY-SA 4.0.\n\n# A\n\nWith one attack, he was torn a pieces.\nI brush my teeth twice a day.\n\n## At\n\n### Preposition\n\nCaesar was at Rome; a climate treaty was signed at Kyoto in 1997.\nI was at Jim’s house at the corner of Fourth Street and Vine.\nat the bottom of the page; sitting at the table; at church; at sea\nTarget at five miles. Prepare torpedoes!\nLook out! UFO at two o'clock!\nDon't pick at your food!\nMy cat keeps scratching at the furniture.\nI was working at the problem all day.\nHe shouted at her.\nShe pointed at the curious animal.\nAt my request, they agreed to move us to another hotel.\nHe jumped at the sudden noise.\nWe laughed at the joke.\nShe was mad at their comments.\nmen at work; children at play\nThe two countries are at war.\nShe is at sixes and sevens with him.\n\n### Noun\n\nThe at sign.\n\n### Verb\n\n(In online chats:) Don't @ me! Don't at me!\n\n## By\n\n### Preposition\n\nThe mailbox is by the bus stop.\nThe stream runs by our back door.\nHe ran straight by me.\nBe back by ten o'clock!.\nWe'll find someone by the end of March.\nWe will send it by the first week of July.\nThe matter was decided by the chairman.\nThe boat was swamped by the water.\nHe was protected by his body armour.\nThere was a call by the unions for a 30% pay rise.\nI was aghast by what I saw.\nThere are many well-known plays by William Shakespeare.\nI avoided the guards by moving only when they weren't looking.\nBy Pythagoras' theorem, we can calculate the length of the hypotenuse.\nWe went by bus.\nI discovered it by chance.\nBy 'maybe' she means 'no'.\nThe electricity was cut off, so we had to read by candlelight.\nBy the power vested in me, I now pronounce you man and wife.\nBy Jove! I think she's got it!\nBy all that is holy, I'll put an end to this.\nI sorted the items by category.\nTable 1 shows details of our employees broken down by sex and age.\nOur stock is up by ten percent.\nWe won by six goals to three.\nHis date of birth was wrong by ten years.\nWe went through the book page by page.\nWe crawled forward by inches.\nsold by the yard; cheaper if bought by the gross\nWhile sitting listening to the radio by the hour, she can drink brandy by the bucketful!\nHe sits listening to the radio by the hour.\nHis health was deteriorating by the day.\nThe pickers are paid by the bushel.\nHe cheated by his own admission.\nBy my reckoning, we should be nearly there.\nIt is easy to invert a 2-by-2 matrix.\nThe room was about 4 foot by 6 foot.\nThe bricks used to build the wall measured 10 by 20 by 30 cm.\nShe's a lovely little filly, by Big Lad, out of Damsel in Distress.\nAre you eating by Rabbi Fischer? (at the house of)\nBy Chabad, it's different. (with, among)\n\n### Adverb\n\nI watched the parade as it passed by.\nThere was a shepherd close by.\nI'll stop by on my way home from work.\nWe're right near the lifeguard station. Come by before you leave.\nThe women spent much time after harvest putting jams by for winter and spring.\n\n### Adjective\n\na by path; a by room (Out of the way, off to one side.)\nby catch; a by issue (Subsidiary, incidental.)\n\n## For\n\n### Conjunction\n\nI had to stay with my wicked stepmother, for I had nowhere else to go.\n\n### Preposition\n\nThe astronauts headed for the moon.\nRun for the hills!\nHe was headed for the door when he remembered.\nI have something for you.\nEverything I do, I do for you.\nWe're having a birthday party for Janet.\nThe mayor gave a speech for the charity gala.\nIf having to bag the groceries correctly is more than you can handle, then this isn't the job for you.\nThis is a new bell for my bicycle.\nThe cake is for Tom and Helen's anniversary.\nThis medicine is for your cough.\nHe wouldn't apologize; and just for that, she refused to help him.\nHe looks better for having lost weight. (UK usage)\nShe was the worse for drink.\nAll those for the motion, raise your hands.\nWho's for ice-cream?\nI'm for going by train\nTen voted for, and three against. (with implied object)\nMake way for the president!\nClear the shelves for our new Christmas stock!\nStand by for your cue.\nPrepare for battle.\nThey swept the area for enemy operatives.\nPolice combed his flat for clues.\nI've lived here for three years.\nThey fought for days over a silly pencil.\nThe store is closed for the day.\nI can see for miles.\nI will stand in for him.\nI speak for the Prime Minister.\nIt is unreasonable for our boss to withhold our wages.\nI don't think it's a good idea for you and me to meet ever again.\nI am aiming for completion by the end of business Thursday.\nHe's going for his doctorate.\nDo you want to go for coffee?\nI'm saving up for a car.\nDon't wait for an answer.\nFair for its day.\nShe's spry for an old lady.\nDon't take me for a fool.\nFor all his expensive education, he didn't seem very bright.\nAnd now for a slap-up meal!\nGo scuba diving? For one thing, I can't even swim.\nFor another, we don't have any equipment.\nHe is named for his grandfather.\nHe totally screwed up that project. Now he's surely for the sack.\nIn term of base hits, Jones was three for four on the day\nAt close of play, England were 305 for 3.\nHe took the swing shift for he could get more overtime.\nto account for one's whereabouts.\n\n## From\n\nPaul is from New Zealand.\nI got a letter from my brother.\nYou can't get all your news from the Internet.\nHe had books piled from floor to ceiling.\nHe departed yesterday from Chicago.\nThis figure has been changed from a one to a seven.\nFace away from the wall!\nThe working day runs from 9 am to 5 pm.\nTickets are available from 17th July.\nRate your pain from 1 to 10.\nStart counting from 1.\nYou can study anything from math to literature.\nIt's hard to tell from here.\nTry to see it from his point of view.\nThe bomb went off just 100 yards from where they were standing.\nFrom the top of the lighthouse you can just see the mainland.\nI’ve been doing this from pickney.\nYour opinions differ from mine.\nHe knows right from wrong.\n\n## In\n\n### Preposition\n\nWho lives in a pineapple under the sea?\nThe dog is in the kennel.\nThere were three pickles in a jar.\nI like living in the city.\nThere are lots of trees in the park.\nWe are in the enemy camp.\nHer plane is in the air.\nI glanced over at the pretty girl in the red dress.\nThere wasn't much of interest in her speech.\nHe hasn't got an original idea in him.\nYou are one in a million.\nShe's in an orchestra.\nMy birthday is in the first week of December.\nEaster falls in the fourth lunar month.\nWill you be able to finish this in a week?\nThey said they would call us in a week.\nLess water gets in your boots this way.\nShe stood there looking in the window longingly.\nIn replacing the faucet washers, he felt he was making his contribution to the environment.\nIn trying to make amends, she actually made matters worse.\nMy aim in travelling there was to find my missing friend.\nMy fat rolls around in folds.\nThe planes flew over in waves.\nArrange the chairs in a circle.\nHe stalked away in anger.\nJohn is in a coma.\nMy fruit trees are in bud.\nThe company is in profit.\nYou've got a friend in me.\nHe's met his match in her.\nThere has been no change in his condition.\nWhat grade did he get in English?\nPlease pay me in cash — preferably in tens and twenties.\nThe deposit can be in any legal tender, even in gold.\nBeethoven's \"Symphony No. 5\" in C minor is among his most popular.\nHis speech was in French, but was simultaneously translated into eight languages.\nWhen you write in cursive, it's illegible.\nMilitary letters should be formal in tone, but not stilted.\n\n### Verb\n\nHe that ears my land spares my team and gives me leave to in the crop.\n\n### Adverb\n\nSuddenly a strange man walked in.\nWould you like that to take away or eat in?\nHe ran to the edge of the swimming pool and dived in.\nThey flew in from London last night.\nFor six hours the tide flows in, then for another six hours it flows out.\nBring the water to the boil and drop the vegetables in.\nThe show still didn't become interesting 20 minutes in.\n\n### Noun\n\nHis parents got him an in with the company.\n\n### Adjective\n\nIs Mr. Smith in?\nLittle by little I pushed the snake into the basket, until finally all of it was in.\nThe bullet is about five centimetres in.\nIf the tennis ball bounces on the line then it's in.\nI've discovered why the TV wasn't working – the plug wasn't in!\nThe replies to the questionnaires are now all in.\nSkirts are in this year.\nthe in train (incoming train)\nYou can't get round the headland when the tide's in.\nin by descent; in by purchase; in of the seisin of her husband\nHe is very in with the Joneses.\nI need to keep in with the neighbours in case I ever need a favour from them.\nI think that bird fancies you. You're in there, mate!\nI'm three drinks in right now.\nI was 500 dollars in when the stock crashed.\n\n### Unit\n\nThe glass is 8 inches.\nThe glass is 8in.\n\n## Of\n\nTake the chicken out of the freezer.\nHe hasn't been well of late.\nFinally she was relieved of the burden of caring for her sick husband.\nHe seemed devoid of human feelings.\nThe word is believed to be of Japanese origin.\nJesus of Nazareth\nThe invention was born of necessity.\nIt is said that she died of a broken heart.\nWhat a lot of nonsense!\nI'll have a dozen of those apples, please.\nWelcome to the historic town of Harwich.\nI'm not driving this wreck of a car.\nI'm always thinking of you.\nHe told us the story of his journey to India.\nThis behaviour is typical of teenagers.\nHe is a friend of mine.\nWe want a larger slice of the cake.\nThe owner of the nightclub was arrested.\nMy companion seemed affable and easy of manner.\nIt's not that big of a deal.\nI’ve not taken her out of a goodly long while.\nAfter a delay of three hours, the plane finally took off.\n\n## On\n\n### Adjective\n\nAll the lights are on, so they must be home.\nWe had to ration our food because there was a war on.\nSome of the cast went down with flu, but the show's still on.\nThat TV programme that you wanted to watch is on now.\nThis is her last song. You're on next!\nAre we still on for tonight?\nMike just threw coffee onto Paul's lap. It's on now.\nEngland need a hundred runs, with twenty-five overs remaining. Game on!\nYour feet will soon warm up once your socks are on.\nI was trying to drink out of the bottle while the top was still on!\nClimbing up that steep ridge isn't on. We'll have to find another route.\nHe'd like to play the red next to the black spot, but that shot isn't on.\nThe captain moved two fielders to the on side.\nPonsonby-Smythe hit a thumping on drive.\nIf the player fails to hit the ball on, it's a foul.\nHe always has to be on, it's so exhausting.\n\n### Adverb\n\nturn the television on\nThe lid wasn't screwed on properly.\nPut on your hat and gloves.\nThe policeman moved the tramp on.\nDrive on past the railway station.\nFrom now on things are going to be different.\nand so on.\nHe rambled on and on.\nTen years on, nothing had changed in the village.\n\n### Preposition\n\nA vase of flowers stood on the table.\nPlease lie down on the couch.\nThe parrot was sitting on Jim's shoulder.\nHe had a scar on the side of his face.\nThere is a dirty smudge on this window.\nThe painting hangs on the wall.\nThe fruit ripened on the trees.\nShould there be an accent on the \"e\"?\nHe wore old shoes on his feet.\nThe lighthouse that you can see is on the mainland.\nThe suspect is thought to still be on the campus.\nWe live on the edge of the city.\non the left, on the right, on the side, on the bottom.\nThe fleet is on the American coast.\non a bus, on a train, on a plane, on a ferry, on a yacht.\nAll of the responsibility is on him.\nI put a bet on the winning horse.\ntug on the rope; push hard on the door.\nI stubbed my toe on an old tree stump.\nI caught my fingernail on the door handle.\nThe rope snagged on a branch.\nto play on a violin or piano.\nA table can't stand on two legs.\nAfter resting on his elbows, he stood on his toes, then walked on his heels.\nThe Tories are on twenty-five percent in this constituency.\nThe blue team are on six points and the red team on five.\nI'm on question four.\nBorn on the 4th of July.\nOn Sunday I'm busy. I'll see you on Monday.\nCan I see you on a different day?\nSmith scored again on twelve minutes, doubling Mudchester Rovers' lead.\nI was reading a book on history.\nThe city hosted the World Summit on the Information Society\nI have no opinion on this subject.\nI saw it on television.\nCan't you see I'm on the phone?\nMy favorite shows are on BBC America.\nI'll pay on card.\nHe travelled on false documents.\nThey planned an attack on London.\nThe soldiers mutinied and turned their guns on their officers.\nHer words made a lasting impression on my mind.\nWhat will be the effect on morale?\nI haven't got any money on me.\nOn Jack's entry, William got up to leave.\nOn the addition of ammonia, a chemical reaction begins.\nThe drinks are on me tonight, boys.\nThe meal is on the house.\nI had a terrible thirst on me.\nHave pity or compassion on him.\nHe's on his lunch break.\nI'm on nights all this week.\nYou've been on these antidepressants far too long.\nI depended on them for assistance.\nHe will promise on certain conditions.\nA curse on him!\nPlease don't tell on her and get her in trouble.\n\n### Verb\n\nCan you on the light? (switch on)\n\n## To\n\n### Particle\n\nI want to leave.\nHe asked me what to do.\nI have places to go and people to see.\nTo err is human.\nWho am I to criticise? I've done worse things myself.\nPrecisely to get away from you was why I did what I did.\nI need some more books to read and friends to go partying with.\nIf he hasn't read it yet, he ought to.\nI went to the shops to buy some bread.\n\n### Preposition\n\nShe looked to the heavens.\nWe are walking to the shop.\nThe water came right to the top of this wall.\nThe coconut fell to the ground.\nI gave the book to him.\nHis face was beaten to a pulp.\nI sang my baby to sleep.\nWhisk the mixture to a smooth consistency.\nHe made several bad-taste jokes to groans from the audience.\nI tried complaining, but it was to no effect.\nIt was to a large extent true.\nWe manufacture these parts to a very high tolerance.\nThis gauge is accurate to a second.\nThere's a lot of sense to what he says.\nThe name has a nice ring to it.\nThere are 100 pence to the pound.\nIt takes 2 to 4 weeks to process typical applications.\nThree to the power of two is nine.\nThree to the second is nine.\nThree squared or three to the second power is nine.\nWhat's the time? – It's quarter to four in the afternoon (or 3:45 pm).\n\n### Adverb\n\nPlease push the door to. (close)\n\n## With\n\n### Preposition\n\nHe picked a fight with the class bully.\nHe went with his friends.\nShe owns a motorcycle with a sidecar.\nJim was listening to Bach with his eyes closed.\nThe match result was 10-5, with John scoring three goals.\nWith a heavy sigh, she looked around the empty room.\nFour people were injured, with one of them in critical condition.\nWith their reputation on the line, they decided to fire their PR team.\nWe are with you all the way.\nThere are a number of problems with your plan.\nWhat on Earth is wrong with my keyboard?\nHe was pleased with the outcome.\nI’m upset with my father.\nslain with robbers.\ncut with a knife\nI water my plants with this watering can. This is the watering can I water my plants with.\nFind what you want instantly with our search engine.\nThey dismissed the meeting with a wave of their hand.\nSpeak with a confident voice.\nWith what/whose money? I have nothing left to buy groceries (with).\nIt was small and bumpy, with a tinge of orange.\nThere are lots of people with no homes after the wildfire.\nSpeak with confidence.\nHe spoke with sadness in his voice.\nThe sailors were infected with malaria.\novercome with happiness\ngreen with envy; flushed with success\nShe was with Acme for twenty years before retiring last fall.\nWith your kind of body size, you shouldn’t be eating pizza at all.\nThat was a lot to explain; are you still with me?\n\n### Adverb\n\nDo you want to come with?\n"
  },
  {
    "path": "harper-core/tests/text/Part-of-speech tagging.md",
    "content": "<!--\nsource: https://en.wikipedia.org/w/index.php?title=Part-of-speech_tagging&oldid=1275774341\nlicense: CC BY-SA 4.0\n-->\n\n# Part-of-speech tagging\n\nIn corpus linguistics, part-of-speech tagging (POS tagging or PoS tagging or\nPOST), also called grammatical tagging is the process of marking up a word in a\ntext (corpus) as corresponding to a particular part of speech, based on both its\ndefinition and its context. A simplified form of this is commonly taught to\nschool-age children, in the identification of words as nouns, verbs, adjectives,\nadverbs, etc.\n\nOnce performed by hand, POS tagging is now done in the context of computational\nlinguistics, using algorithms which associate discrete terms, as well as hidden\nparts of speech, by a set of descriptive tags. POS-tagging algorithms fall into\ntwo distinctive groups: rule-based and stochastic. E. Brill's tagger, one of the\nfirst and most widely used English POS-taggers, employs rule-based algorithms.\n\n## Principle\n\nPart-of-speech tagging is harder than just having a list of words and their\nparts of speech, because some words can represent more than one part of speech\nat different times, and because some parts of speech are complex. This is not\nrare—in natural languages (as opposed to many artificial languages), a large\npercentage of word-forms are ambiguous. For example, even \"dogs\", which is\nusually thought of as just a plural noun, can also be a verb:\n\n> The sailor dogs the hatch.\n\nCorrect grammatical tagging will reflect that \"dogs\" is here used as a verb, not\nas the more common plural noun. Grammatical context is one way to determine\nthis; semantic analysis can also be used to infer that \"sailor\" and \"hatch\"\nimplicate \"dogs\" as 1) in the nautical context and 2) an action applied to the\nobject \"hatch\" (in this context, \"dogs\" is a nautical term meaning \"fastens (a\nwatertight door) securely\").\n\n### Tag sets\n\nSchools commonly teach that there are 9 parts of speech in English: noun, verb,\narticle, adjective, preposition, pronoun, adverb, conjunction, and interjection.\nHowever, there are clearly many more categories and sub-categories. For nouns,\nthe plural, possessive, and singular forms can be distinguished. In many\nlanguages words are also marked for their \"case\" (role as subject, object,\netc.), grammatical gender, and so on; while verbs are marked for tense, aspect,\nand other things. In some tagging systems, different inflections of the same\nroot word will get different parts of speech, resulting in a large number of\ntags. For example, NN for singular common nouns, NNS for plural common nouns, NP\nfor singular proper nouns (see the POS tags used in the Brown Corpus). Other\ntagging systems use a smaller number of tags and ignore fine differences or\nmodel them as features somewhat independent from part-of-speech.\n\nIn part-of-speech tagging by computer, it is typical to distinguish from 50 to\n150 separate parts of speech for English. Work on stochastic methods for tagging\nKoine Greek (DeRose 1990) has used over 1,000 parts of speech and found that\nabout as many words were ambiguous in that language as in English. A\nmorphosyntactic descriptor in the case of morphologically rich languages is\ncommonly expressed using very short mnemonics, such as Ncmsan for Category=Noun,\nType = common, Gender = masculine, Number = singular, Case = accusative, Animate\n= no.\n\nThe most popular \"tag set\" for POS tagging for American English is probably the\nPenn tag set, developed in the Penn Treebank project. It is largely similar to\nthe earlier Brown Corpus and LOB Corpus tag sets, though much smaller. In\nEurope, tag sets from the Eagles Guidelines see wide use and include versions\nfor multiple languages.\n\nPOS tagging work has been done in a variety of languages, and the set of POS\ntags used varies greatly with language. Tags usually are designed to include\novert morphological distinctions, although this leads to inconsistencies such as\ncase-marking for pronouns but not nouns in English, and much larger\ncross-language differences. The tag sets for heavily inflected languages such as\nGreek and Latin can be very large; tagging words in agglutinative languages such\nas Inuit languages may be virtually impossible. At the other extreme, Petrov et\nal. have proposed a \"universal\" tag set, with 12 categories (for example, no\nsubtypes of nouns, verbs, punctuation, and so on). Whether a very small set of\nvery broad tags or a much larger set of more precise ones is preferable, depends\non the purpose at hand. Automatic tagging is easier on smaller tag-sets.\n\n## History\n\n### The Brown Corpus\n\nResearch on part-of-speech tagging has been closely tied to corpus linguistics.\nThe first major corpus of English for computer analysis was the Brown Corpus\ndeveloped at Brown University by Henry Kučera and W. Nelson Francis, in the\nmid-1960s. It consists of about 1,000,000 words of running English prose text,\nmade up of 500 samples from randomly chosen publications. Each sample is 2,000\nor more words (ending at the first sentence-end after 2,000 words, so that the\ncorpus contains only complete sentences).\n\nThe Brown Corpus was painstakingly \"tagged\" with part-of-speech markers over\nmany years. A first approximation was done with a program by Greene and Rubin,\nwhich consisted of a huge handmade list of what categories could co-occur at\nall. For example, article then noun can occur, but article then verb (arguably)\ncannot. The program got about 70% correct. Its results were repeatedly reviewed\nand corrected by hand, and later users sent in errata so that by the late 70s\nthe tagging was nearly perfect (allowing for some cases on which even human\nspeakers might not agree).\n\nThis corpus has been used for innumerable studies of word-frequency and of\npart-of-speech and inspired the development of similar \"tagged\" corpora in many\nother languages. Statistics derived by analyzing it formed the basis for most\nlater part-of-speech tagging systems, such as CLAWS and VOLSUNGA. However, by\nthis time (2005) it has been superseded by larger corpora such as the 100\nmillion word British National Corpus, even though larger corpora are rarely so\nthoroughly curated.\n\nFor some time, part-of-speech tagging was considered an inseparable part of\nnatural language processing, because there are certain cases where the correct\npart of speech cannot be decided without understanding the semantics or even the\npragmatics of the context. This is extremely expensive, especially because\nanalyzing the higher levels is much harder when multiple part-of-speech\npossibilities must be considered for each word.\n\n### Use of hidden Markov models\n\nIn the mid-1980s, researchers in Europe began to use hidden Markov models (HMMs)\nto disambiguate parts of speech, when working to tag the Lancaster-Oslo-Bergen\nCorpus of British English. HMMs involve counting cases (such as from the Brown\nCorpus) and making a table of the probabilities of certain sequences. For\nexample, once you've seen an article such as 'the', perhaps the next word is a\nnoun 40% of the time, an adjective 40%, and a number 20%. Knowing this, a\nprogram can decide that \"can\" in \"the can\" is far more likely to be a noun than\na verb or a modal. The same method can, of course, be used to benefit from\nknowledge about the following words.\n\nMore advanced (\"higher-order\") HMMs learn the probabilities not only of pairs\nbut triples or even larger sequences. So, for example, if you've just seen a\nnoun followed by a verb, the next item may be very likely a preposition,\narticle, or noun, but much less likely another verb.\n\nWhen several ambiguous words occur together, the possibilities multiply.\nHowever, it is easy to enumerate every combination and to assign a relative\nprobability to each one, by multiplying together the probabilities of each\nchoice in turn. The combination with the highest probability is then chosen. The\nEuropean group developed CLAWS, a tagging program that did exactly this and\nachieved accuracy in the 93–95% range.\n\nEugene Charniak points out in Statistical techniques for natural language\nparsing (1997) that merely assigning the most common tag to each known word and\nthe tag \"proper noun\" to all unknowns will approach 90% accuracy because many\nwords are unambiguous, and many others only rarely represent their less-common\nparts of speech.\n\nCLAWS pioneered the field of HMM-based part of speech tagging but was quite\nexpensive since it enumerated all possibilities. It sometimes had to resort to\nbackup methods when there were simply too many options (the Brown Corpus\ncontains a case with 17 ambiguous words in a row, and there are words such as\n\"still\" that can represent as many as 7 distinct parts of speech.\n\nHMMs underlie the functioning of stochastic taggers and are used in various\nalgorithms one of the most widely used being the bi-directional inference\nalgorithm.\n\n### Dynamic programming methods\n\nIn 1987, Steven DeRose and Kenneth W. Church independently developed dynamic\nprogramming algorithms to solve the same problem in vastly less time. Their\nmethods were similar to the Viterbi algorithm known for some time in other\nfields. DeRose used a table of pairs, while Church used a table of triples and a\nmethod of estimating the values for triples that were rare or nonexistent in the\nBrown Corpus (an actual measurement of triple probabilities would require a much\nlarger corpus). Both methods achieved an accuracy of over 95%. DeRose's 1990\ndissertation at Brown University included analyses of the specific error types,\nprobabilities, and other related data, and replicated his work for Greek, where\nit proved similarly effective.\n\nThese findings were surprisingly disruptive to the field of natural language\nprocessing. The accuracy reported was higher than the typical accuracy of very\nsophisticated algorithms that integrated part of speech choice with many higher\nlevels of linguistic analysis: syntax, morphology, semantics, and so on. CLAWS,\nDeRose's and Church's methods did fail for some of the known cases where\nsemantics is required, but those proved negligibly rare. This convinced many in\nthe field that part-of-speech tagging could usefully be separated from the other\nlevels of processing; this, in turn, simplified the theory and practice of\ncomputerized language analysis and encouraged researchers to find ways to\nseparate other pieces as well. Markov Models became the standard method for the\npart-of-speech assignment.\n\n#### Unsupervised taggers\n\nThe methods already discussed involve working from a pre-existing corpus to\nlearn tag probabilities. It is, however, also possible to bootstrap using\n\"unsupervised\" tagging. Unsupervised tagging techniques use an untagged corpus\nfor their training data and produce the tagset by induction. That is, they\nobserve patterns in word use, and derive part-of-speech categories themselves.\nFor example, statistics readily reveal that \"the\", \"a\", and \"an\" occur in\nsimilar contexts, while \"eat\" occurs in very different ones. With sufficient\niteration, similarity classes of words emerge that are remarkably similar to\nthose human linguists would expect; and the differences themselves sometimes\nsuggest valuable new insights.\n\nThese two categories can be further subdivided into rule-based, stochastic, and\nneural approaches.\n\n#### Other taggers and methods\n\nSome current major algorithms for part-of-speech tagging include the Viterbi\nalgorithm, Brill tagger, Constraint Grammar, and the Baum-Welch algorithm (also\nknown as the forward-backward algorithm). Hidden Markov model and visible Markov\nmodel taggers can both be implemented using the Viterbi algorithm. The\nrule-based Brill tagger is unusual in that it learns a set of rule patterns, and\nthen applies those patterns rather than optimizing a statistical quantity.\n\nMany machine learning methods have also been applied to the problem of POS\ntagging. Methods such as SVM, maximum entropy classifier, perceptron, and\nnearest-neighbor have all been tried, and most can achieve accuracy above\n95%.[citation needed]\n\nA direct comparison of several methods is reported (with references) at the ACL\nWiki. This comparison uses the Penn tag set on some of the Penn Treebank data,\nso the results are directly comparable. However, many significant taggers are\nnot included (perhaps because of the labor involved in reconfiguring them for\nthis particular dataset). Thus, it should not be assumed that the results\nreported here are the best that can be achieved with a given approach; nor even\nthe best that have been achieved with a given approach.\n\nIn 2014, a paper reporting using the structure regularization method for\npart-of-speech tagging, achieving 97.36% on a standard benchmark dataset.\n"
  },
  {
    "path": "harper-core/tests/text/Spell.US.md",
    "content": "# Spell\n\nThis document contains a list of words spelled correctly in some dialects of English, but not American English. This is designed to test the spelling suggestions we give for such mistakes.\n\nTo achieve this, the filename of this file contains `.US.`, which will tell the snapshot generator to use the American dialect, rather than trying to use an automatically detected dialect.\n\n## Words\n\n- Afterwards.\n- Centre.\n- Labelled.\n- Flavour.\n- Favoured.\n- Honour.\n- Grey.\n- Quarrelled.\n- Quarrelling.\n- Recognised.\n- Neighbour.\n- Neighbouring.\n- Clamour.\n- Theatre.\n- Analyse.\n"
  },
  {
    "path": "harper-core/tests/text/Spell.md",
    "content": "# Spell\n\nThis document contains example sentences with misspelled words that we want to test the spell checker on.\n\n## Example Sentences\n\nMy favourite color is blu.\nI must defend my honour!\nI recognize that you recognise me.\nI analyze how you infantilize me.\nI analyse how you infantilise me.\nCareful, traveller!\nAt the centre of the theatre I dropped a litre of coke.\n"
  },
  {
    "path": "harper-core/tests/text/Swear.md",
    "content": "# Swears\n\nThis documents tests that different forms/variations of swears are tagged as such.\n\n## Examples\n\nOne turd, two turds.\n\nI fart, you're farting, he farts, she farted.\n"
  },
  {
    "path": "harper-core/tests/text/The Constitution of the United States.md",
    "content": "<!-- source: https://github.com/JesseKPhillips/USA-Constitution/blob/4cfdd130709fa7e8db998383b6917ba33b402ec6/Constitution.md -->\n\n# The Constitution Of The United States Of America\n\n**We the People** of the United States, in Order to form a more perfect Union,\nestablish Justice, insure domestic Tranquility, provide for the common defence,\npromote the general Welfare, and secure the Blessings of Liberty to ourselves\nand our Posterity, do ordain and establish this Constitution for the United\nStates of America.\n\n## Article. I.\n\n### Section. 1.\n\nAll legislative Powers herein granted shall be vested in a\nCongress of the United States, which shall consist of a Senate and House of\nRepresentatives. Congress shall make no law respecting an establishment of\nreligion, or prohibiting the free exercise thereof; or abridging the freedom of\nspeech, or of the press; or the right of the people peaceably to assemble, and\nto petition the government for a redress of grievances.\n\nNo person shall be a Senator or Representative in Congress, or elector of\nPresident and Vice President, or hold any office, civil or military, under the\nUnited States, or under any State, who, having previously taken an oath, as a\nmember of Congress, or as an officer of the United States, or as a member of\nany State legislature, or as an executive or judicial officer of any State, to\nsupport the Constitution of the United States, shall have engaged in\ninsurrection or rebellion against the same, or given aid or comfort to the\nenemies thereof. But Congress may, by a vote of two-thirds of each House,\nremove such disability.\n\nThe terms of Senators and Representatives shall end at noon on the 3d day of\nJanuary, of the years in which such terms end; and the terms of their\nsuccessors shall then begin.\n\n### Section. 2.\n\nThe House of Representatives shall be composed of Members\nchosen every second Year by the People of the several States, and the Electors\nin each State shall have the Qualifications requisite for Electors of the most\nnumerous Branch of the State Legislature.\n\nNo Person shall be a Representative who shall not have attained to the Age of\ntwenty five Years, and been seven Years a Citizen of the United States, and who\nshall not, when elected, be an Inhabitant of that State in which he shall be\nchosen.\n\nRepresentatives shall be apportioned among the several States according to\ntheir respective numbers, counting the whole number of persons in each State,\nexcluding Indians not taxed. But when the right to vote at any election for the\nchoice of electors for President and Vice President of the United States,\nRepresentatives in Congress, the Executive and Judicial officers of a State, or\nthe members of the Legislature thereof, is denied to any of the male\ninhabitants of such State, being twenty-one years of age, and citizens of the\nUnited States, or in any way abridged, except for participation in rebellion,\nor other crime, the basis of representation therein shall be reduced in the\nproportion which the number of such male citizens shall bear to the whole\nnumber of male citizens twenty-one years of age in such State. The actual\nEnumeration shall be made within three Years after the first Meeting of the\nCongress of the United States, and within every subsequent Term of ten Years,\nin such Manner as they shall by Law direct. The Number of Representatives shall\nnot exceed one for every thirty Thousand, but each State shall have at Least\none Representative; and until such enumeration shall be made, the State of New\nHampshire shall be entitled to chuse three, Massachusetts eight, Rhode-Island\nand Providence Plantations one, Connecticut five, New-York six, New Jersey\nfour, Pennsylvania eight, Delaware one, Maryland six, Virginia ten, North\nCarolina five, South Carolina five, and Georgia three.\n\nWhen vacancies happen in the Representation from any State, the Executive\nAuthority thereof shall issue Writs of Election to fill such Vacancies.\n\nThe House of Representatives shall chuse their Speaker and other Officers; and\nshall have the sole Power of Impeachment.\n\n\n\n### Section. 3.\n\nThe Senate of the United States shall be composed of two\nSenators from each State, elected by the people thereof, for six years; and\neach Senator shall have one vote. The electors in each State shall have the\nqualifications requisite for electors of the most numerous branch of the State\nlegislatures.\n\nImmediately after they shall be assembled in Consequence of the first Election,\nthey shall be divided as equally as may be into three Classes. The Seats of the\nSenators of the first Class shall be vacated at the Expiration of the second\nYear, of the second Class at the Expiration of the fourth Year, and of the\nthird Class at the Expiration of the sixth Year, so that one third may be\nchosen every second Year; and when vacancies happen in the representation of\nany State in the Senate, the executive authority of such State shall issue\nwrits of election to fill such vacancies: Provided, That the legislature of any\nState may empower the executive thereof to make temporary appointments until\nthe people fill the vacancies by election as the legislature may direct.\n\nNo Person shall be a Senator who shall not have attained to the Age of thirty\nYears, and been nine Years a Citizen of the United States, and who shall not,\nwhen elected, be an Inhabitant of that State for which he shall be chosen.\n\nThe Vice President of the United States shall be President of the Senate, but\nshall have no Vote, unless they be equally divided.\n\nThe Senate shall chuse their other Officers, and also a President pro tempore,\nin the Absence of the Vice President, or when he shall exercise the Office of\nPresident of the United States.\n\nThe Senate shall have the sole Power to try all Impeachments. When sitting for\nthat Purpose, they shall be on Oath or Affirmation. When the President of the\nUnited States is tried, the Chief Justice shall preside: And no Person shall be\nconvicted without the Concurrence of two thirds of the Members present.\n\nJudgment in Cases of impeachment shall not extend further than to removal from\nOffice, and disqualification to hold and enjoy any Office of honor, Trust or\nProfit under the United States: but the Party convicted shall nevertheless be\nliable and subject to Indictment, Trial, Judgment and Punishment, according to\nLaw.\n\n\n\n### Section. 4.\n\nThe Times, Places and Manner of holding Elections for Senators\nand Representatives, shall be prescribed in each State by the Legislature\nthereof; but the Congress may at any time by Law make or alter such\nRegulations, except as to the Places of chusing Senators.\n\nThe Congress shall assemble at least once in every year, and such meeting shall\nbegin at noon on the 3d day of January, unless they shall by law appoint a\ndifferent day.\n\n### Section. 5.\n\nEach House shall be the Judge of the Elections, Returns and\nQualifications of its own Members, and a Majority of each shall constitute a\nQuorum to do Business; but a smaller Number may adjourn from day to day, and\nmay be authorized to compel the Attendance of absent Members, in such Manner,\nand under such Penalties as each House may provide.\n\nEach House may determine the Rules of its Proceedings, punish its Members for\ndisorderly Behaviour, and, with the Concurrence of two thirds, expel a Member.\n\nEach House shall keep a Journal of its Proceedings, and from time to time\npublish the same, excepting such Parts as may in their Judgment require\nSecrecy; and the Yeas and Nays of the Members of either House on any question\nshall, at the Desire of one fifth of those Present, be entered on the Journal.\n\nNeither House, during the Session of Congress, shall, without the Consent of\nthe other, adjourn for more than three days, nor to any other Place than that\nin which the two Houses shall be sitting.\n\n### Section. 6.\n\nThe Senators and Representatives shall receive a Compensation\nfor their Services, to be ascertained by Law, and paid out of the Treasury of\nthe United States. They shall in all Cases, except Treason, Felony and Breach\nof the Peace, be privileged from Arrest during their Attendance at the Session\nof their respective Houses, and in going to and returning from the same; and\nfor any Speech or Debate in either House, they shall not be questioned in any\nother Place.\n\nNo Senator or Representative shall, during the Time for which he was elected,\nbe appointed to any civil Office under the Authority of the United States,\nwhich shall have been created, or the Emoluments whereof shall have been\nencreased during such time; and no Person holding any Office under the United\nStates, shall be a Member of either House during his Continuance in Office. No\nlaw, varying the compensation for the services of the Senators and\nRepresentatives, shall take effect, until an election of Representatives shall\nhave intervened.\n\n\n### Section. 7.\n\nAll Bills for raising Revenue shall originate in the House of\nRepresentatives; but the Senate may propose or concur with Amendments as on\nother Bills.\n\nEvery Bill which shall have passed the House of Representatives and the Senate,\nshall, before it become a Law, be presented to the President of the United\nStates; If he approve he shall sign it, but if not he shall return it, with his\nObjections to that House in which it shall have originated, who shall enter the\nObjections at large on their Journal, and proceed to reconsider it. If after\nsuch Reconsideration two thirds of that House shall agree to pass the Bill, it\nshall be sent, together with the Objections, to the other House, by which it\nshall likewise be reconsidered, and if approved by two thirds of that House, it\nshall become a Law. But in all such Cases the Votes of both Houses shall be\ndetermined by yeas and Nays, and the Names of the Persons voting for and\nagainst the Bill shall be entered on the Journal of each House respectively. If\nany Bill shall not be returned by the President within ten Days (Sundays\nexcepted) after it shall have been presented to him, the Same shall be a Law,\nin like Manner as if he had signed it, unless the Congress by their Adjournment\nprevent its Return, in which Case it shall not be a Law.\n\nEvery Order, Resolution, or Vote to which the Concurrence of the Senate and\nHouse of Representatives may be necessary (except on a question of Adjournment)\nshall be presented to the President of the United States; and before the Same\nshall take Effect, shall be approved by him, or being disapproved by him, shall\nbe repassed by two thirds of the Senate and House of Representatives, according\nto the Rules and Limitations prescribed in the Case of a Bill.\n\n### Section. 8.\n\nThe Congress shall have Power To lay and collect Taxes, Duties,\nImposts and Excises, to pay the Debts and provide for the common Defence and\ngeneral Welfare of the United States; but all Duties, Imposts and Excises shall\nbe uniform throughout the United States;\n\n1. To borrow Money on the credit of the United States;\n\n2. To regulate Commerce with foreign Nations, and among the several States, and\nwith the Indian Tribes;\n\n3. To establish an uniform Rule of Naturalization, and uniform Laws on the subject\nof Bankruptcies throughout the United States;\n\n4. To coin Money, regulate the Value thereof, and of foreign Coin, and fix the\nStandard of Weights and Measures;\n\n5. To provide for the Punishment of counterfeiting the Securities and current Coin\nof the United States;\n\n6. To establish Post Offices and post Roads;\n\n7. To promote the Progress of Science and useful Arts, by securing for limited\nTimes to Authors and Inventors the exclusive Right to their respective Writings\nand Discoveries;\n\n8. To constitute Tribunals inferior to the supreme Court;\n\n9. To define and punish Piracies and Felonies committed on the high Seas, and\nOffences against the Law of Nations;\n\n10. To declare War, grant Letters of Marque and Reprisal, and make Rules concerning\nCaptures on Land and Water;\n\n11. To raise and support Armies, but no Appropriation of Money to that Use shall be\nfor a longer Term than two Years;\n\n12. To provide and maintain a Navy;\n\n13. To make Rules for the Government and Regulation of the land and naval Forces;\n\n14. To provide for calling forth the Militia to execute the Laws of the Union,\nsuppress Insurrections and repel Invasions;\n\n15. To provide for organizing, arming, and disciplining, the Militia, and for\ngoverning such Part of them as may be employed in the Service of the United\nStates, reserving to the States respectively, the Appointment of the Officers,\nand the Authority of training the Militia according to the discipline\nprescribed by Congress;\n\n16. To exercise exclusive Legislation in all Cases whatsoever, over such District\n(not exceeding ten Miles square) as may, by Cession of particular States, and\nthe Acceptance of Congress, become the Seat of the Government of the United\nStates, and to exercise like Authority over all Places purchased by the Consent\nof the Legislature of the State in which the Same shall be, for the Erection of\nForts, Magazines, Arsenals, dock-Yards, and other needful Buildings;—And\n\n17. To make all Laws which shall be necessary and proper for carrying into\nExecution the foregoing Powers, and all other Powers vested by this\nConstitution in the Government of the United States, or in any Department or\nOfficer thereof.\n\n### Section. 9.\n\nThe Migration or Importation of such Persons as any of the\nStates now existing shall think proper to admit, shall not be prohibited by the\nCongress prior to the Year one thousand eight hundred and eight, but a Tax or\nduty may be imposed on such Importation, not exceeding ten dollars for each\nPerson.\n\nThe Privilege of the Writ of Habeas Corpus shall not be suspended, unless when\nin Cases of Rebellion or Invasion the public Safety may require it.\n\nNo Bill of Attainder or ex post facto Law shall be passed.\n\nNo Capitation, or other direct, Tax shall be laid, unless in Proportion to the\nCensus or Enumeration herein before directed to be taken. Congress shall have\npower to lay and collect taxes on incomes, from whatever source derived,\nwithout apportionment among the several States, and without regard to any\ncensus or enumeration.\n\nNo Tax or Duty shall be laid on Articles exported from any State.\n\nNo Preference shall be given by any Regulation of Commerce or Revenue to the\nPorts of one State over those of another: nor shall Vessels bound to, or from,\none State, be obliged to enter, clear, or pay Duties in another.\n\nNo Money shall be drawn from the Treasury, but in Consequence of Appropriations\nmade by Law; and a regular Statement and Account of the Receipts and\nExpenditures of all public Money shall be published from time to time.\n\nNo Title of Nobility shall be granted by the United States: And no Person\nholding any Office of Profit or Trust under them, shall, without the Consent of\nthe Congress, accept of any present, Emolument, Office, or Title, of any kind\nwhatever, from any King, Prince, or foreign State.\n\nThe right of citizens of the United States to vote in any primary or other\nelection for President or Vice President, for electors for President or Vice\nPresident, or for Senator or Representative in Congress, shall not be denied or\nabridged by the United States or any State by reason of failure to pay any poll\ntax or other tax.\n\n### Section. 10.\n\nNo State shall enter into any Treaty, Alliance, or\nConfederation; grant Letters of Marque and Reprisal; coin Money; emit Bills of\nCredit; make any Thing but gold and silver Coin a Tender in Payment of Debts;\npass any Bill of Attainder, ex post facto Law, or Law impairing the Obligation\nof Contracts, or grant any Title of Nobility.\n\nNo State shall, without the Consent of the Congress, lay any Imposts or Duties\non Imports or Exports, except what may be absolutely necessary for executing\nit's inspection Laws: and the net Produce of all Duties and Imposts, laid by\nany State on Imports or Exports, shall be for the Use of the Treasury of the\nUnited States; and all such Laws shall be subject to the Revision and Controul\nof the Congress.\n\nNo State shall, without the Consent of Congress, lay any Duty of Tonnage, keep\nTroops, or Ships of War in time of Peace, enter into any Agreement or Compact\nwith another State, or with a foreign Power, or engage in War, unless actually\ninvaded, or in such imminent Danger as will not admit of delay.\n\n## Article. II.\n\n### Section. 1.\n\nThe executive Power shall be vested in a President of the\nUnited States of America. He shall hold his Office during the Term of four\nYears ending at noon on the 20th day of January, and, together with the Vice\nPresident, chosen for the same Term, be elected, as follows\n\nEach State shall appoint, in such Manner as the Legislature thereof may direct,\na Number of Electors, equal to the whole Number of Senators and Representatives\nto which the State may be entitled in the Congress: but no Senator or\nRepresentative, or Person holding an Office of Trust or Profit under the United\nStates, shall be appointed an Elector.\n\n#### SubSection. 1.\n\nThe Electors shall meet in their respective states, and vote\nby ballot for President and Vice-President, one of whom, at least, shall not be\nan inhabitant of the same state with themselves; they shall name in their\nballots the person voted for as President, and in distinct ballots the person\nvoted for as Vice-President, and they shall make distinct lists of all persons\nvoted for as President, and all persons voted for as Vice-President and of the\nnumber of votes for each, which lists they shall sign and certify, and transmit\nsealed to the seat of the government of the United States, directed to the\nPresident of the Senate;—The President of the Senate shall, in the presence of\nthe Senate and House of Representatives, open all the certificates and the\nvotes shall then be counted;—The person having the greatest Number of votes for\nPresident, shall be the President, if such number be a majority of the whole\nnumber of Electors appointed; and if no person have such majority, then from\nthe persons having the highest numbers not exceeding three on the list of those\nvoted for as President, the House of Representatives shall choose immediately,\nby ballot, the President. But in choosing the President, the votes shall be\ntaken by states, the representation from each state having one vote; a quorum\nfor this purpose shall consist of a member or members from two-thirds of the\nstates, and a majority of all the states shall be necessary to a choice. [If,\nat the time fixed for the beginning of the term of the President, the President\nelect shall have died, the Vice President elect shall become President. If a\nPresident shall not have been chosen before the time fixed for the beginning of\nhis term, or if the President elect shall have failed to qualify, then the Vice\nPresident elect shall act as President until a President shall have qualified;\nand the Congress may by law provide for the case wherein neither a President\nelect nor a Vice President elect shall have qualified, declaring who shall then\nact as President, or the manner in which one who is to act shall be selected,\nand such person shall act accordingly until a President or Vice President shall\nhave qualified.The Congress may by law provide for the case of the death of any\nof the persons from whom the House of Representatives may choose a President\nwhenever the right of choice shall have devolved upon them, and for the case of\nthe death of any of the persons from whom the Senate may choose a Vice\nPresident whenever the right of choice shall have devolved upon them.]The\nperson having the greatest number of votes as Vice-President, shall be the\nVice-President, if such number be a majority of the whole number of Electors\nappointed, and if no person have a majority, then from the two highest numbers\non the list, the Senate shall choose the Vice-President; a quorum for the\npurpose shall consist of two-thirds of the whole number of Senators, and a\nmajority of the whole number shall be necessary to a choice. But no person\nconstitutionally ineligible to the office of President shall be eligible to\nthat of Vice-President of the United States.\n\n\nThe Congress may determine the Time of chusing the Electors, and the Day on\nwhich they shall give their Votes; which Day shall be the same throughout the\nUnited States.\n\n\n#### SubSection. 2\n\nNo Person except a natural born Citizen, or a Citizen of the\nUnited States, at the time of the Adoption of this Constitution, shall be\neligible to the Office of President; neither shall any Person be eligible to\nthat Office who shall not have attained to the Age of thirty five Years, and\nbeen fourteen Years a Resident within the United States.\n\nNo person shall be elected to the office of the President more than twice, and\nno person who has held the office of President, or acted as President, for more\nthan two years of a term to which some other person was elected President shall\nbe elected to the office of the President more than once. But this article\nshall not apply to any person holding the office of President when this article\nwas proposed by the Congress, and shall not prevent any person who may be\nholding the office of President, or acting as President, during the term within\nwhich this article becomes operative from holding the office of President or\nacting as President during the remainder of such term.\n\n#### SubSection 3.\n\nIn case of the removal of the President from office or of his\ndeath or resignation, the Vice President shall become President.\n\nWhenever there is a vacancy in the office of the Vice President, the President\nshall nominate a Vice President who shall take office upon confirmation by a\nmajority vote of both Houses of Congress.\n\nWhenever the President transmits to the President pro tempore of the Senate and\nthe Speaker of the House of Representatives his written declaration that he is\nunable to discharge the powers and duties of his office, and until he transmits\nto them a written declaration to the contrary, such powers and duties shall be\ndischarged by the Vice President as Acting President.\n\nWhenever the Vice President and a majority of either the principal officers of\nthe executive departments or of such other body as Congress may by law provide,\ntransmit to the President pro tempore of the Senate and the Speaker of the\nHouse of Representatives their written declaration that the President is unable\nto discharge the powers and duties of his office, the Vice President shall\nimmediately assume the powers and duties of the office as Acting President.\n\nThereafter, when the President transmits to the President pro tempore of the\nSenate and the Speaker of the House of Representatives his written declaration\nthat no inability exists, he shall resume the powers and duties of his office\nunless the Vice President and a majority of either the principal officers of\nthe executive department or of such other body as Congress may by law provide,\ntransmit within four days to the President pro tempore of the Senate and the\nSpeaker of the House of Representatives their written declaration that the\nPresident is unable to discharge the powers and duties of his office. Thereupon\nCongress shall decide the issue, assembling within forty-eight hours for that\npurpose if not in session. If the Congress, within twenty-one days after\nreceipt of the latter written declaration, or, if Congress is not in session,\nwithin twenty-one days after Congress is required to assemble, determines by\ntwo-thirds vote of both Houses that the President is unable to discharge the\npowers and duties of his office, the Vice President shall continue to discharge\nthe same as Acting President; otherwise, the President shall resume the powers\nand duties of his office.\n\n\n#### SubSection 4.\n\nThe President shall, at stated Times, receive for his\nServices, a Compensation, which shall neither be encreased nor diminished\nduring the Period for which he shall have been elected, and he shall not\nreceive within that Period any other Emolument from the United States, or any\nof them.\n\nBefore he enter on the Execution of his Office, he shall take the following\nOath or Affirmation:-- \"I do solemnly swear (or affirm) that I will faithfully\nexecute the Office of President of the United States, and will to the best of\nmy Ability, preserve, protect and defend the Constitution of the United\nStates.\"\n\n#### SubSection 5.\n\nThe District constituting the seat of Government of the\nUnited States shall appoint in such manner as the Congress may direct:\n\nA number of electors of President and Vice President equal to the whole number\nof Senators and Representatives in Congress to which the District would be\nentitled if it were a State, but in no event more than the least populous\nState; they shall be in addition to those appointed by the States, but they\nshall be considered, for the purposes of the election of President and Vice\nPresident, to be electors appointed by a State; and they shall meet in the\nDistrict and perform such duties as provided by this article of the\nConstitution.\n\n### Section. 2.\n\nThe President shall be Commander in Chief of the Army and Navy\nof the United States, and of the Militia of the several States, when called\ninto the actual Service of the United States; he may require the Opinion, in\nwriting, of the principal Officer in each of the executive Departments, upon\nany Subject relating to the Duties of their respective Offices, and he shall\nhave Power to grant Reprieves and Pardons for Offences against the United\nStates, except in Cases of Impeachment.\n\nHe shall have Power, by and with the Advice and Consent of the Senate, to make\nTreaties, provided two thirds of the Senators present concur; and he shall\nnominate, and by and with the Advice and Consent of the Senate, shall appoint\nAmbassadors, other public Ministers and Consuls, Judges of the supreme Court,\nand all other Officers of the United States, whose Appointments are not herein\notherwise provided for, and which shall be established by Law: but the Congress\nmay by Law vest the Appointment of such inferior Officers, as they think\nproper, in the President alone, in the Courts of Law, or in the Heads of\nDepartments.\n\nThe President shall have Power to fill up all Vacancies that may happen during\nthe Recess of the Senate, by granting Commissions which shall expire at the End\nof their next Session.\n\nNo soldier shall, in time of peace be quartered in any house, without the\nconsent of the owner, nor in time of war, but in a manner to be prescribed by\nlaw.\n\n### Section. 3.\n\nHe shall from time to time give to the Congress Information of\nthe State of the Union, and recommend to their Consideration such Measures as\nhe shall judge necessary and expedient; he may, on extraordinary Occasions,\nconvene both Houses, or either of them, and in Case of Disagreement between\nthem, with Respect to the Time of Adjournment, he may adjourn them to such Time\nas he shall think proper; he shall receive Ambassadors and other public\nMinisters; he shall take Care that the Laws be faithfully executed, and shall\nCommission all the Officers of the United States.\n\n### Section. 4.\n\nThe President, Vice President and all civil Officers of the\nUnited States, shall be removed from Office on Impeachment for, and Conviction\nof, Treason, Bribery, or other high Crimes and Misdemeanors.\n\n## Article. III.\n\n### Section. 1.\n\nThe judicial Power of the United States, shall be vested in\none supreme Court, and in such inferior Courts as the Congress may from time to\ntime ordain and establish. The Judges, both of the supreme and inferior Courts,\nshall hold their Offices during good Behaviour, and shall, at stated Times,\nreceive for their Services, a Compensation, which shall not be diminished\nduring their Continuance in Office.\n\n### Section. 2.\n\nThe judicial Power shall extend to all Cases, in Law and\nEquity, arising under this Constitution, the Laws of the United States, and\nTreaties made, or which shall be made, under their Authority;—to all Cases\naffecting Ambassadors, other public Ministers and Consuls;—to all Cases of\nadmiralty and maritime Jurisdiction;—to Controversies to which the United\nStates shall be a Party;—to Controversies between two or more States;—between\nCitizens of different States, —between Citizens of the same State claiming\nLands under Grants of different States.\n\n\nIn all Cases affecting Ambassadors, other public Ministers and Consuls, and\nthose in which a State shall be Party, the supreme Court shall have original\nJurisdiction. In all the other Cases before mentioned, the supreme Court shall\nhave appellate Jurisdiction, both as to Law and Fact, with such Exceptions, and\nunder such Regulations as the Congress shall make.\n\nThe Trial of all Crimes, except in Cases of Impeachment, shall be by Jury; and\nsuch Trial shall be held in the State where the said Crimes shall have been\ncommitted; but when not committed within any State, the Trial shall be at such\nPlace or Places as the Congress may by Law have directed.\n\n### Section. 3.\n\nTreason against the United States, shall consist only in\nlevying War against them, or in adhering to their Enemies, giving them Aid and\nComfort. No Person shall be convicted of Treason unless on the Testimony of two\nWitnesses to the same overt Act, or on Confession in open Court.\n\nThe Congress shall have Power to declare the Punishment of Treason, but no\nAttainder of Treason shall work Corruption of Blood, or Forfeiture except\nduring the Life of the Person attainted.\n\n### Section. 4.\n\nThe right of the people to be secure in their persons, houses,\npapers, and effects, against unreasonable searches and seizures, shall not be\nviolated, and no warrants shall issue, but upon probable cause, supported by\noath or affirmation, and particularly describing the place to be searched, and\nthe persons or things to be seized.\n\nNo person shall be held to answer for a capital, or otherwise infamous crime,\nunless on a presentment or indictment of a grand jury, except in cases arising\nin the land or naval forces, or in the militia, when in actual service in time\nof war or public danger; nor shall any person be subject for the same offense\nto be twice put in jeopardy of life or limb; nor shall be compelled in any\ncriminal case to be a witness against himself, nor be deprived of life,\nliberty, or property, without due process of law; nor shall private property be\ntaken for public use, without just compensation.\n\nIn all criminal prosecutions, the accused shall enjoy the right to a speedy and\npublic trial, by an impartial jury of the state and district wherein the crime\nshall have been committed, which district shall have been previously\nascertained by law, and to be informed of the nature and cause of the\naccusation; to be confronted with the witnesses against him; to have compulsory\nprocess for obtaining witnesses in his favor, and to have the assistance of\ncounsel for his defense.\n\nIn suits at common law, where the value in controversy shall exceed twenty\ndollars, the right of trial by jury shall be preserved, and no fact tried by a\njury, shall be otherwise reexamined in any court of the United States, than\naccording to the rules of the common law.\n\nExcessive bail shall not be required, nor excessive fines imposed, nor cruel\nand unusual punishments inflicted.\n\n## Article. IV.\n\n### Section. 1.\n\nFull Faith and Credit shall be given in each State to the\npublic Acts, Records, and judicial Proceedings of every other State. And the\nCongress may by general Laws prescribe the Manner in which such Acts, Records\nand Proceedings shall be proved, and the Effect thereof.\n\n### Section. 2.\n\nAll persons born or naturalized in the United States, and\nsubject to the jurisdiction thereof, are citizens of the United States and of\nthe State wherein they reside. No State shall make or enforce any law which\nshall abridge the privileges or immunities of citizens of the United States;\nnor shall any State deprive any person of life, liberty, or property, without\ndue process of law; nor deny to any person within its jurisdiction the equal\nprotection of the laws.\n\nThe right of citizens of the United States, who are eighteen years of age or\nolder, to vote shall not be denied or abridged by the United States or by any\nState on account of age, sex, race, color, or previous condition of servitude.\n\nA Person charged in any State with Treason, Felony, or other Crime, who shall\nflee from Justice, and be found in another State, shall on Demand of the\nexecutive Authority of the State from which he fled, be delivered up, to be\nremoved to the State having Jurisdiction of the Crime.\n\nNeither slavery nor involuntary servitude, except as a punishment for crime\nwhereof the party shall have been duly convicted, shall exist within the United\nStates, or any place subject to their jurisdiction. No Person held to Service\nor Labour in one State, under the Laws thereof, escaping into another, shall,\nin Consequence of any Law or Regulation therein, be discharged from such\nService or Labour, but shall be delivered up on Claim of the Party to whom such\nService or Labour may be due.\n\n### Section. 3.\n\nNew States may be admitted by the Congress into this Union; but\nno new State shall be formed or erected within the Jurisdiction of any other\nState; nor any State be formed by the Junction of two or more States, or Parts\nof States, without the Consent of the Legislatures of the States concerned as\nwell as of the Congress.\n\nThe Congress shall have Power to dispose of and make all needful Rules and\nRegulations respecting the Territory or other Property belonging to the United\nStates; and nothing in this Constitution shall be so construed as to Prejudice\nany Claims of the United States, or of any particular State.\n\n### Section. 4.\n\nThe United States shall guarantee to every State in this Union\na Republican Form of Government, and shall protect each of them against\nInvasion; and on Application of the Legislature, or of the Executive (when the\nLegislature cannot be convened) against domestic Violence.\n\n### Section. 5.\n\nThe validity of the public debt of the United States,\nauthorized by law, including debts incurred for payment of pensions and\nbounties for services in suppressing insurrection or rebellion, shall not be\nquestioned. But neither the United States nor any State shall assume or pay any\ndebt or obligation incurred in aid of insurrection or rebellion against the\nUnited States, or any claim for the loss or emancipation of any slave; but all\nsuch debts, obligations and claims shall be held illegal and void.\n\n## Article. V.\n\nThe Congress, whenever two thirds of both Houses shall deem it necessary, shall\npropose Amendments to this Constitution, or, on the Application of the\nLegislatures of two thirds of the several States, shall call a Convention for\nproposing Amendments, which, in either Case, shall be valid to all Intents and\nPurposes, as Part of this Constitution, when ratified by the Legislatures of\nthree fourths of the several States, or by Conventions in three fourths\nthereof, as the one or the other Mode of Ratification may be proposed by the\nCongress; Provided that no Amendment which may be made prior to the Year One\nthousand eight hundred and eight shall in any Manner affect the first and\nfourth Clauses in the Ninth Section of the first Article; and that no State,\nwithout its Consent, shall be deprived of its equal Suffrage in the Senate.\n\n## Article. VI.\n\nAll Debts contracted and Engagements entered into, before the Adoption of this\nConstitution, shall be as valid against the United States under this\nConstitution, as under the Confederation.\n\nThis Constitution, and the Laws of the United States which shall be made in\nPursuance thereof; and all Treaties made, or which shall be made, under the\nAuthority of the United States, shall be the supreme Law of the Land; and the\nJudges in every State shall be bound thereby, any Thing in the Constitution or\nLaws of any State to the Contrary notwithstanding.\n\nThe Senators and Representatives before mentioned, and the Members of the\nseveral State Legislatures, and all executive and judicial Officers, both of\nthe United States and of the several States, shall be bound by Oath or\nAffirmation, to support this Constitution; but no religious Test shall ever be\nrequired as a Qualification to any Office or public Trust under the United\nStates.\n\nA well regulated militia, being necessary to the security of a free state, the\nright of the people to keep and bear arms, shall not be infringed.\n\n### Section. 1.\n\nThe enumeration in the Constitution, of certain rights, shall\nnot be construed to deny or disparage others retained by the people.\n\nThe powers not delegated to the United States by the Constitution, nor\nprohibited by it to the states, are reserved to the states respectively, or to\nthe people.\n\n## Article. VII.\n\nThe Ratification of the Conventions of nine States, shall be sufficient for the\nEstablishment of this Constitution between the States so ratifying the Same.\n\nThe Word \"the\", being interlined between the seventh and eight Lines of the\nfirst Page, The Word \"Thirty\" being partly written on an Erazure in the\nfifteenth Line of the first Page. The Words \"is tried\" being interlined between\nthe thirty second and thirty third Lines of the first Page and the Word \"the\"\nbeing interlined between the forty third and forty fourth Lines of the second\nPage.\n\n\ndone in Convention by the Unanimous Consent of the States present the\nSeventeenth Day of September in the Year of our Lord one thousand seven hundred\nand Eighty seven and of the Independence of the United States of America the\nTwelfth In witness whereof We have hereunto subscribed our Names,\n\n## Article. VIII.\n\n### Section 1.\n\nThe transportation or importation into any State, Territory, or\npossession of the United States for delivery or use therein of intoxicating\nliquors, in violation of the laws thereof, is hereby prohibited.\n"
  },
  {
    "path": "harper-core/tests/text/The Great Gatsby.md",
    "content": "# The Great Gatsby\n\nBY F. SCOTT FITZGERALD\n\n## CHAPTER I\n\nIn my younger and more vulnerable years my father gave me some advice that I’ve\nbeen turning over in my mind ever since.\n\n“Whenever you feel like criticising any one,” he told me, “just remember that\nall the people in this world haven’t had the advantages that you’ve had.”\n\nHe didn’t say any more, but we’ve always been unusually communicative in a\nreserved way, and I understood that he meant a great deal more than that. In\nconsequence, I’m inclined to reserve all judgments, a habit that has opened up\nmany curious natures to me and also made me the victim of not a few veteran\nbores. The abnormal mind is quick to detect and attach itself to this quality\nwhen it appears in a normal person, and so it came about that in college I was\nunjustly accused of being a politician, because I was privy to the secret griefs\nof wild, unknown men. Most of the confidences were unsought—frequently I have\nfeigned sleep, preoccupation, or a hostile levity when I realized by some\nunmistakable sign that an intimate revelation was quivering on the horizon; for\nthe intimate revelations of young men, or at least the terms in which they\nexpress them, are usually plagiaristic and marred by obvious suppressions.\nReserving judgments is a matter of infinite hope. I am still a little afraid of\nmissing something if I forget that, as my father snobbishly suggested, and I\nsnobbishly repeat, a sense of the fundamental decencies is parcelled out\nunequally at birth.\n\nAnd, after boasting this way of my tolerance, I come to the admission that it\nhas a limit. Conduct may be founded on the hard rock or the wet marshes, but\nafter a certain point I don’t care what it’s founded on. When I came back from\nthe East last autumn I felt that I wanted the world to be in uniform and at a\nsort of moral attention forever; I wanted no more riotous excursions with\nprivileged glimpses into the human heart. Only Gatsby, the man who gives his\nname to this book, was exempt from my reaction—Gatsby, who represented\neverything for which I have an unaffected scorn. If personality is an unbroken\nseries of successful gestures, then there was something gorgeous about him, some\nheightened sensitivity to the promises of life, as if he were related to one of\nthose intricate machines that register earthquakes ten thousand miles away. This\nresponsiveness had nothing to do with that flabby impressionability which is\ndignified under the name of the “creative temperament”—it was an extraordinary\ngift for hope, a romantic readiness such as I have never found in any other\nperson and which it is not likely I shall ever find again. No—Gatsby turned out\nall right at the end; it is what preyed on Gatsby, what foul dust floated in the\nwake of his dreams that temporarily closed out my interest in the abortive\nsorrows and short-winded elations of men.\n\nMy family have been prominent, well-to-do people in this Middle Western city for\nthree generations. The Carraways are something of a clan, and we have a\ntradition that we’re descended from the Dukes of Buccleuch, but the actual\nfounder of my line was my grandfather’s brother, who came here in fifty-one,\nsent a substitute to the Civil War, and started the wholesale hardware business\nthat my father carries on to-day.\n\nI never saw this great-uncle, but I’m supposed to look like him—with special\nreference to the rather hard-boiled painting that hangs in father’s office. I\ngraduated from New Haven in 1915, just a quarter of a century after my father,\nand a little later I participated in that delayed Teutonic migration known as\nthe Great War. I enjoyed the counter-raid so thoroughly that I came back\nrestless. Instead of being the warm centre of the world, the Middle West now\nseemed like the ragged edge of the universe—so I decided to go East and learn\nthe bond business. Everybody I knew was in the bond business, so I supposed it\ncould support one more single man. All my aunts and uncles talked it over as if\nthey were choosing a prep school for me, and finally said, “Why—ye-es,” with\nvery grave, hesitant faces. Father agreed to finance me for a year, and after\nvarious delays I came East, permanently, I thought, in the spring of twenty-two.\n\nThe practical thing was to find rooms in the city, but it was a warm season, and\nI had just left a country of wide lawns and friendly trees, so when a young man\nat the office suggested that we take a house together in a commuting town, it\nsounded like a great idea. He found the house, a weatherbeaten cardboard\nbungalow at eighty a month, but at the last minute the firm ordered him to\nWashington, and I went out to the country alone. I had a dog—at least I had him\nfor a few days until he ran away—and an old Dodge and a Finnish woman, who made\nmy bed and cooked breakfast and muttered Finnish wisdom to herself over the\nelectric stove.\n\nIt was lonely for a day or so until one morning some man, more recently arrived\nthan I, stopped me on the road.\n\n“How do you get to West Egg village?” he asked helplessly.\n\nI told him. And as I walked on I was lonely no longer. I was a guide, a\npathfinder, an original settler. He had casually conferred on me the freedom of\nthe neighborhood.\n\nAnd so with the sunshine and the great bursts of leaves growing on the trees,\njust as things grow in fast movies, I had that familiar conviction that life was\nbeginning over again with the summer.\n\nThere was so much to read, for one thing, and so much fine health to be pulled\ndown out of the young breath-giving air. I bought a dozen volumes on banking and\ncredit and investment securities, and they stood on my shelf in red and gold\nlike new money from the mint, promising to unfold the shining secrets that only\nMidas and Morgan and Mæcenas knew. And I had the high intention of reading many\nother books besides. I was rather literary in college—one year I wrote a series\nof very solemn and obvious editorials for the Yale News—and now I was going to\nbring back all such things into my life and become again that most limited of\nall specialists, the “well-rounded man.” This isn’t just an epigram—life is much\nmore successfully looked at from a single window, after all.\n\nIt was a matter of chance that I should have rented a house in one of the\nstrangest communities in North America. It was on that slender riotous island\nwhich extends itself due east of New York—and where there are, among other\nnatural curiosities, two unusual formations of land. Twenty miles from the city\na pair of enormous eggs, identical in contour and separated only by a courtesy\nbay, jut out into the most domesticated body of salt water in the Western\nhemisphere, the great wet barnyard of Long Island Sound. They are not perfect\novals—like the egg in the Columbus story, they are both crushed flat at the\ncontact end—but their physical resemblance must be a source of perpetual wonder\nto the gulls that fly overhead. To the wingless a more interesting phenomenon is\ntheir dissimilarity in every particular except shape and size.\n\nI lived at West Egg, the—well, the less fashionable of the two, though this is a\nmost superficial tag to express the bizarre and not a little sinister contrast\nbetween them. My house was at the very tip of the egg, only fifty yards from the\nSound, and squeezed between two huge places that rented for twelve or fifteen\nthousand a season. The one on my right was a colossal affair by any standard—it\nwas a factual imitation of some Hôtel de Ville in Normandy, with a tower on one\nside, spanking new under a thin beard of raw ivy, and a marble swimming pool,\nand more than forty acres of lawn and garden. It was Gatsby’s mansion. Or,\nrather, as I didn’t know Mr. Gatsby, it was a mansion inhabited by a gentleman\nof that name. My own house was an eyesore, but it was a small eyesore, and it\nhad been overlooked, so I had a view of the water, a partial view of my\nneighbor’s lawn, and the consoling proximity of millionaires—all for eighty\ndollars a month.\n\nAcross the courtesy bay the white palaces of fashionable East Egg glittered\nalong the water, and the history of the summer really begins on the evening I\ndrove over there to have dinner with the Tom Buchanans. Daisy was my second\ncousin once removed, and I’d known Tom in college. And just after the war I\nspent two days with them in Chicago.\n\nHer husband, among various physical accomplishments, had been one of the most\npowerful ends that ever played football at New Haven—a national figure in a way,\none of those men who reach such an acute limited excellence at twenty-one that\neverything afterward savors of anti-climax. His family were enormously\nwealthy—even in college his freedom with money was a matter for reproach—but now\nhe’d left Chicago and come East in a fashion that rather took your breath away:\nfor instance, he’d brought down a string of polo ponies from Lake Forest. It was\nhard to realize that a man in my own generation was wealthy enough to do that.\n\nWhy they came East I don’t know. They had spent a year in France for no\nparticular reason, and then drifted here and there unrestfully wherever people\nplayed polo and were rich together. This was a permanent move, said Daisy over\nthe telephone, but I didn’t believe it—I had no sight into Daisy’s heart, but I\nfelt that Tom would drift on forever seeking, a little wistfully, for the\ndramatic turbulence of some irrecoverable football game.\n\nAnd so it happened that on a warm windy evening I drove over to East Egg to see\ntwo old friends whom I scarcely knew at all. Their house was even more elaborate\nthan I expected, a cheerful red-and-white Georgian Colonial mansion, overlooking\nthe bay. The lawn started at the beach and ran toward the front door for a\nquarter of a mile, jumping over sun-dials and brick walks and burning\ngardens—finally when it reached the house drifting up the side in bright vines\nas though from the momentum of its run. The front was broken by a line of French\nwindows, glowing now with reflected gold and wide open to the warm windy\nafternoon, and Tom Buchanan in riding clothes was standing with his legs apart\non the front porch.\n\nHe had changed since his New Haven years. Now he was a sturdy straw-haired man\nof thirty with a rather hard mouth and a supercilious manner. Two shining\narrogant eyes had established dominance over his face and gave him the\nappearance of always leaning aggressively forward. Not even the effeminate swank\nof his riding clothes could hide the enormous power of that body—he seemed to\nfill those glistening boots until he strained the top lacing, and you could see\na great pack of muscle shifting when his shoulder moved under his thin coat. It\nwas a body capable of enormous leverage—a cruel body.\n\nHis speaking voice, a gruff husky tenor, added to the impression of\nfractiousness he conveyed. There was a touch of paternal contempt in it, even\ntoward people he liked—and there were men at New Haven who had hated his guts.\n\n“Now, don’t think my opinion on these matters is final,” he seemed to say, “just\nbecause I’m stronger and more of a man than you are.” We were in the same senior\nsociety, and while we were never intimate I always had the impression that he\napproved of me and wanted me to like him with some harsh, defiant wistfulness of\nhis own.\n\nWe talked for a few minutes on the sunny porch.\n\n“I’ve got a nice place here,” he said, his eyes flashing about restlessly.\n\nTurning me around by one arm, he moved a broad flat hand along the front vista,\nincluding in its sweep a sunken Italian garden, a half acre of deep, pungent\nroses, and a snub-nosed motor-boat that bumped the tide offshore.\n\n“It belonged to Demaine, the oil man.” He turned me around again, politely and\nabruptly. “We'll go inside.”\n\nWe walked through a high hallway into a bright rosy-colored space, fragilely\nbound into the house by French windows at either end. The windows were ajar and\ngleaming white against the fresh grass outside that seemed to grow a little way\ninto the house. A breeze blew through the room, blew curtains in at one end and\nout the other like pale flags, twisting them up toward the frosted wedding-cake\nof the ceiling, and then rippled over the wine-colored rug, making a shadow on\nit as wind does on the sea.\n\nThe only completely stationary object in the room was an enormous couch on which\ntwo young women were buoyed up as though upon an anchored balloon. They were\nboth in white, and their dresses were rippling and fluttering as if they had\njust been blown back in after a short flight around the house. I must have stood\nfor a few moments listening to the whip and snap of the curtains and the groan\nof a picture on the wall. Then there was a boom as Tom Buchanan shut the rear\nwindows and the caught wind died out about the room, and the curtains and the\nrugs and the two young women ballooned slowly to the floor.\n\nThe younger of the two was a stranger to me. She was extended full length at her\nend of the divan, completely motionless, and with her chin raised a little, as\nif she were balancing something on it which was quite likely to fall. If she saw\nme out of the corner of her eyes she gave no hint of it—indeed, I was almost\nsurprised into murmuring an apology for having disturbed her by coming in.\n\nThe other girl, Daisy, made an attempt to rise—she leaned slightly forward with\na conscientious expression—then she laughed, an absurd, charming little laugh,\nand I laughed too and came forward into the room.\n\n“I’m p-paralyzed with happiness.”\n\nShe laughed again, as if she said something very witty, and held my hand for a\nmoment, looking up into my face, promising that there was no one in the world\nshe so much wanted to see. That was a way she had. She hinted in a murmur that\nthe surname of the balancing girl was Baker. (I’ve heard it said that Daisy’s\nmurmur was only to make people lean toward her; an irrelevant criticism that\nmade it no less charming.)\n\nAt any rate, Miss Baker’s lips fluttered, she nodded at me almost imperceptibly,\nand then quickly tipped her head back again—the object she was balancing had\nobviously tottered a little and given her something of a fright. Again a sort of\napology arose to my lips. Almost any exhibition of complete self-sufficiency\ndraws a stunned tribute from me.\n\nI looked back at my cousin, who began to ask me questions in her low, thrilling\nvoice. It was the kind of voice that the ear follows up and down, as if each\nspeech is an arrangement of notes that will never be played again. Her face was\nsad and lovely with bright things in it, bright eyes and a bright passionate\nmouth, but there was an excitement in her voice that men who had cared for her\nfound difficult to forget: a singing compulsion, a whispered “Listen,” a promise\nthat she had done gay, exciting things just a while since and that there were\ngay, exciting things hovering in the next hour.\n\nI told her how I had stopped off in Chicago for a day on my way East, and how a\ndozen people had sent their love through me.\n\n“Do they miss me?” she cried ecstatically.\n\n“The whole town is desolate. All the cars have the left rear wheel painted black\nas a mourning wreath, and there’s a persistent wail all night along the north\nshore.”\n\n“How gorgeous! Let’s go back, Tom. To-morrow!” Then she added irrelevantly: “You\nought to see the baby.”\n\n“I’d like to.”\n\n“She’s asleep. She’s three years old. Haven’t you ever seen her?”\n\n“Never.”\n\n“Well, you ought to see her. She’s—”\n\nTom Buchanan, who had been hovering restlessly about the room, stopped and\nrested his hand on my shoulder.\n\n“What you doing, Nick?”\n\n“I’m a bond man.”\n\n\"Who with?”\n\nI told him.\n\n“Never heard of them,” he remarked decisively.\n\nThis annoyed me.\n\n“You will,” I answered shortly. “You will if you stay in the East.”\n\n“Oh, I’ll stay in the East, don’t you worry,” he said, glancing at Daisy and\nthen back at me, as if he were alert for something more. “I’d be a God damned\nfool to live anywhere else.”\n\nAt this point Miss Baker said: “Absolutely!” with such suddenness that I\nstarted—it was the first word she had uttered since I came into the room.\nEvidently it surprised her as much as it did me, for she yawned and with a\nseries of rapid, deft movements stood up into the room.\n\n“I’m stiff,” she complained, “I’ve been lying on that sofa for as long as I can\nremember.”\n\n“Don’t look at me,” Daisy retorted, “‘I’ve been trying to get you to New York\nall afternoon.”\n\n“No, thanks,” said Miss Baker to the four cocktails just in from the pantry,\n“I’m absolutely in training.”\n\nHer host looked at her incredulously.\n\n“You are!” He took down his drink as if it were a drop in the bottom of a glass.\n“How you ever get anything done is beyond me.”\n\nI looked at Miss Baker, wondering what it was she “got done.” I enjoyed looking\nat her. She was a slender, small-breasted girl, with an erect carriage, which\nshe accentuated by throwing her body backward at the shoulders like a young\ncadet. Her gray sun-strained eyes looked back at me with polite reciprocal\ncuriosity out of a wan, charming, discontented face. It occurred to me now that\nI had seen her, or a picture of her, somewhere before.\n\n“You live in West Egg,” she remarked contemptuously. “I know somebody there.”\n\n“I don’t know a single—”\n\n“You must know Gatsby.”\n\n“Gatsby?” demanded Daisy. “What Gatsby?”\n\nBefore I could reply that he was my neighbor dinner was announced; wedging his\ntense arm imperatively under mine, Tom Buchanan compelled me from the room as\nthough he were moving a checker to another square.\n\nSlenderly, languidly, their hands set lightly on their hips, the two young women\npreceded us out onto a rosy-colored porch, open toward the sunset, where four\ncandles flickered on the table in the diminished wind.\n\n“Why candles?” objected Daisy, frowning. She snapped them out with her fingers.\n“In two weeks it’ll be the longest day in the year.” She looked at us all\nradiantly. “Do you always watch for the longest day of the year and then miss\nit? I always watch for the longest day in the year and then miss it.”\n\n“We ought to plan something,” yawned Miss Baker, sitting down at the table as if\nshe were getting into bed.\n\n“All right,” said Daisy. ‘‘What’ll we plan?” She turned to me helplessly: ‘‘What\ndo people plan?”\n\nBefore I could answer her eyes fastened with an awed expression on her little\nfinger.\n\n“Look!” she complained; “I hurt it.”\n\nWe all looked—the knuckle was black and blue.\n\n“You did it, Tom,” she said accusingly. “I know you didn’t mean to, but you did\ndo it. That’s what I get for marrying a brute of a man, a great, big, hulking\nphysical specimen of a—”’\n\n“I hate that word hulking,” objected Tom crossly, “even in kidding.”\n\n“Hulking,” insisted Daisy.\n\nSometimes she and Miss Baker talked at once, unobtrusively and with a bantering\ninconsequence that was never quite chatter, that was as cool as their white\ndresses and their impersonal eyes in the absence of all desire. They were here,\nand they accepted Tom and me, making only a polite pleasant effort to entertain\nor to be entertained. They knew that presently dinner would be over and a little\nlater the evening too would be over and casually put away. It was sharply\ndifferent from the West, where an evening was hurried from phase to phase toward\nits close, in a continually disappointed anticipation or else in sheer nervous\ndread of the moment itself.\n\n“You make me feel uncivilized, Daisy,” I confessed on my second glass of corky\nbut rather impressive claret. “Can’t you talk about crops or something?”\n\nI meant nothing in particular by this remark, but it was taken up in an\nunexpected way.\n\n“Civilization’s going to pieces,” broke out Tom violently. “I’ve gotten to be a\nterrible pessimist about things. Have you read ‘The Rise of the Colored Empires’\nby this man Goddard?”\n\n“Why, no,” I answered, rather surprised by his tone.\n\n“Well, it’s a fine book, and everybody ought to read it. The idea is if we don’t\nlook out the white race will be—will be utterly submerged. It’s all scientific\nstuff; it’s been proved.”\n\n“Tom’s getting very profound,” said Daisy, with an expression of unthoughtful\nsadness. “He reads deep books with long words in them. What was that word we———”\n\n“Well, these books are all scientific,” insisted Tom, glancing at her\nimpatiently. “This fellow has worked out the whole thing. It’s up to us, who are\nthe dominant race, to watch out or these other races will have control of\nthings.”\n\n“We’ve got to beat them down,” whispered Daisy, winking ferociously toward the\nfervent sun.\n\n“You ought to live in California—” began Miss Baker, but Tom interrupted her by\nshifting heavily in his chair.\n\n“This idea is that we’re Nordics. I am, and you are, and you are, and—” After an\ninfinitesimal hesitation he included Daisy with a slight nod, and she winked at\nme again. ‘‘—And we’ve produced all the things that go to make civilization—oh,\nscience and art, and all that. Do you see?”\n\nThere was something pathetic in his concentration, as if his complacency, more\nacute than of old, was not enough to him any more. When, almost immediately, the\ntelephone rang inside and the butler left the porch Daisy seized upon the\nmomentary interruption and leaned toward me.\n\n“I’ll tell you a family secret,” she whispered enthusiastically. “It’s about the\nbutler’s nose. Do you want to hear about the butler’s nose?”\n\n“That’s why I came over to-night.”\n\n“Well, he wasn’t always a butler; he used to be the silver polisher for some\npeople in New York that had a silver service for two hundred people. He had to\npolish it from morning till night, until finally it began to affect his nose———”\n\n“Things went from bad to worse,” suggested Miss Baker.\n\n“Yes. Things went from bad to worse, until finally he had to give up his\nposition.”\n\nFor a moment the last sunshine fell with romantic affection upon her glowing\nface; her voice compelled me forward breathlessly as I listened—then the glow\nfaded, each light deserting her with lingering regret, like children leaving a\npleasant street at dusk.\n\nThe butler came back and murmured something close to Tom’s ear, whereupon Tom\nfrowned, pushed back his chair, and without a word went inside. As if his\nabsence quickened something within her, Daisy leaned forward again, her voice\nglowing and singing.\n\n“I love to see you at my table, Nick. You remind me of a—of a rose, an absolute\nrose. Doesn’t he?” She turned to Miss Baker for confirmation: “An absolute\nrose?”\n\nThis was untrue. I am not even faintly like a rose. She was only extemporizing,\nbut a stirring warmth flowed from her, as if her heart was trying to come out to\nyou concealed in one of those breathless, thrilling words. Then suddenly she\nthrew her napkin on the table and excused herself and went into the house.\n\nMiss Baker and I exchanged a short glance consciously devoid of meaning. I was\nabout to speak when she sat up alertly and said “Sh!” in a warning voice. A\nsubdued impassioned murmur was audible in the room beyond, and Miss Baker leaned\nforward unashamed, trying to hear. The murmur trembled on the verge of\ncoherence, sank down, mounted excitedly, and then ceased altogether.\n\n“This Mr. Gatsby you spoke of is my neighbor—”’ I began.\n\n“Don’t talk. I want to hear what happens.”\n\n“Is something happening?” I inquired innocently.\n\n“You mean to say you don’t know?” said Miss Baker, honestly surprised. “I\nthought everybody knew.”\n\n“I don’t.”\n\n“Why—” she said hesitantly, ‘‘Tom’s got some woman in New York.”\n\n“Got some woman?” I repeated blankly.\n\nMiss Baker nodded.\n\n“She might have the decency not to telephone him at dinner time. Don’t you\nthink?”\n\nAlmost before I had grasped her meaning there was the flutter of a dress and the\ncrunch of leather boots, and Tom and Daisy were back at the table.\n\n“It couldn’t be helped!” cried Daisy with tense gayety.\n\nShe sat down, glanced searchingly at Miss Baker and then at me, and continued:\n“I looked outdoors for a minute, and it’s very romantic outdoors. There’s a bird\non the lawn that I think must be a nightingale come over on the Cunard or White\nStar Line. He’s singing away—” Her voice sang: “It’s romantic, isn’t it, Tom?”\n\n“Very romantic,” he said, and then miserably to me: “If it’s light enough after\ndinner, I want to take you down to the stables.”\n\nThe telephone rang inside, startingly, and as Daisy shook her head decisively at\nTom the subject of the stables, in fact all subjects, vanished into air. Among\nthe broken fragments of the last five minutes at table I remember the candles\nbeing lit again, pointlessly, and I was conscious of wanting to look squarely at\nevery one, and yet to avoid all eyes. I couldn’t guess what Daisy and Tom were\nthinking, but I doubt if even Miss Baker, who seemed to have mastered a certain\nhardy scepticism, was able utterly to put this fifth guest’s shrill metallic\nurgency out of mind. To a certain temperament the situation might have seemed\nintriguing—my own instinct was to telephone immediately for the police.\n\nThe horses, needless to say, were not mentioned again. Tom and Miss Baker, with\nseveral feet of twilight between them, strolled back into the library, as if to\na vigil beside a perfectly tangible body, while, trying to look pleasantly\ninterested and a little deaf, I followed Daisy around a chain of connecting\nverandas to the porch in front. In its deep gloom we sat down side by side on a\nwicker settee.\n\nDaisy took her face in her hands as if feeling its lovely shape, and her eyes\nmoved gradually out into the velvet dusk. I saw that turbulent emotions\npossessed her, so I asked what I thought would be some sedative questions about\nher little girl.\n\n“We don’t know each other very well, Nick,” she said suddenly. “Even if we are\ncousins. You didn’t come to my wedding.”\n\n“I wasn’t back from the war.”\n\n“That’s true.” She hesitated. “Well, I’ve had a very bad time, Nick, and I’m\npretty cynical about everything.”\n\nEvidently she had reason to be. I waited but she didn’t say any more, and after\na moment I returned rather feebly to the subject of her daughter.\n\n“I suppose she talks, and—eats, and everything.”\n\n“Oh, yes.” She looked at me absently. “Listen, Nick; let me tell you what I said\nwhen she was born. Would you like to hear?”\n\n“Very much.”\n\n“I’ll show you how I’ve gotten to feel about—things. Well, she was less than an\nhour old and Tom was God knows where. I woke up out of the ether with an utterly\nabandoned feeling, and asked the nurse right away if it was a boy or a girl. She\ntold me it was a girl, and so I turned my head away and wept. ‘All right,’ I\nsaid, ‘I’m glad it’s a girl. And I hope she’ll be a fool—that’s the best thing a\ngirl can be in this world, a beautiful little fool.’\n\n“You see I think everything’s terrible anyhow,” she went on in a convinced way.\n“Everybody thinks so—the most advanced people. And I know. I’ve been everywhere\nand seen everything and done everything.” Her eyes flashed around her in a\ndefiant way, rather like Tom’s, and she laughed with thrilling scorn.\n“Sophisticated—God, I’m sophisticated!”\n\nThe instant her voice broke off, ceasing to compel my attention, my belief, I\nfelt the basic insincerity of what she had said. It made me uneasy, as though\nthe whole evening had been a trick of some sort to exact a contributary emotion\nfrom me. I waited, and sure enough, in a moment she looked at me with an\nabsolute smirk on her lovely face, as if she had asserted her membership in a\nrather distinguished secret society to which she and Tom belonged.\n\nInside, the crimson room bloomed with light. Tom and Miss Baker sat at either\nend of the long couch and she read aloud to him from the Saturday Evening\nPost—the words, murmurous and uninflected, running together in a soothing tune.\nThe lamp-light, bright on his boots and dull on the autumn-leaf yellow of her\nhair, glinted along the paper as she turned a page with a flutter of slender\nmuscles in her arms.\n\nWhen we came in she held us silent for a moment with a lifted hand.\n\n“To be continued,” she said, tossing the magazine on the table, “in our very\nnext issue.”\n\nHer body asserted itself with a restless movement of her knee, and she stood up.\n\n“Ten o’clock,” she remarked, apparently finding the time on the ceiling. “Time\nfor this good girl to go to bed.”\n\n“Jordan’s going to play in the tournament tomorrow,” explained Daisy, “over at\nWestchester.”\n\n“Oh—you’re Jordan Baker.”\n\nI knew now why her face was familiar—its pleasing contemptuous expression had\nlooked out at me from many rotogravure pictures of the sporting life at\nAsheville and Hot Springs and Palm Beach. I had heard some story of her too, a\ncritical, unpleasant story, but what it was I had forgotten long ago.\n\n“Good night,” she said softly. “Wake me at eight, won’t you.”\n\n“If you’ll get up.”\n\n“I will. Good night, Mr. Carraway. See you anon.”\n\n“Of course you will,” confirmed Daisy. “In fact I think I’ll arrange a marriage.\nCome over often, Nick, and I’ll sort of—oh—fling you together. You know—lock you\nup accidentally in linen closets and push you out to sea in a boat, and all that\nsort of thing———”\n\n“Good night,” called Miss Baker from the stairs. “I haven’t heard a word.”\n\n“She’s a nice girl,” said Tom after a moment. “They oughtn’t to let her run\naround the country this way.”\n\n“Who oughtn’t to?” inquired Daisy coldly.\n\n“Her family.”\n\n“Her family is one aunt about a thousand years old. Besides, Nick’s going to\nlook after her, aren’t you, Nick? She’s going to spend lots of week-ends out\nhere this summer. I think the home influence will be very good for her.”\n\nDaisy and Tom looked at each other for a moment in silence.\n\n“Is she from New York?” I asked quickly.\n\n“From Louisville. Our white girlhood was passed together there. Our beautiful\nwhite———”\n\n“Did you give Nick a little heart to heart talk on the veranda?” demanded Tom\nsuddenly.\n\n“Did I?” She looked at me. “I can’t seem to remember, but I think we talked\nabout the Nordic race. Yes, I’m sure we did. It sort of crept up on us and first\nthing you know———”\n\n“Don’t believe everything you hear, Nick,” he advised me.\n\nI said lightly that I had heard nothing at all, and a few minutes later I got up\nto go home. They came to the door with me and stood side by side in a cheerful\nsquare of light. As I started my motor Daisy peremptorily called: “Wait!\n\n“I forgot to ask you something, and it’s important. We heard you were engaged to\na girl out West.”\n\n“That’s right,” corroborated Tom kindly. “We heard that you were engaged.”\n\n“It’s a libel. I’m too poor.”\n\n“But we heard it,” insisted Daisy, surprising me by opening up again in a\nflower-like way. “We heard it from three people, so it must be true.”\n\nOf course I knew what they were referring to, but I wasn’t even vaguely engaged.\nThe fact that gossip had published the banns was one of the reasons I had come\nEast. You can’t stop going with an old friend on account of rumors, and on the\nother hand I had no intention of being rumored into marriage.\n\nTheir interest rather touched me and made them less remotely rich—nevertheless,\nI was confused and a little disgusted as I drove away. It seemed to me that the\nthing for Daisy to do was to rush out of the house, child in arms—but apparently\nthere were no such intentions in her head. As for Tom, the fact that he “had\nsome woman in New York” was really less surprising than that he had been\ndepressed by a book. Something was making him nibble at the edge of stale ideas\nas if his sturdy physical egotism no longer nourished his peremptory heart.\n\nAlready it was deep summer on roadhouse roofs and in front of wayside garages,\nwhere new red gaspumps sat out in pools of light, and when I reached my estate\nat West Egg I ran the car under its shed and sat for a while on an abandoned\ngrass roller in the yard. The wind had blown off, leaving a loud, bright night,\nwith wings beating in the trees and a persistent organ sound as the full bellows\nof the earth blew the frogs full of life. The silhouette of a moving cat wavered\nacross the moonlight, and turning my head to watch it, I saw that I was not\nalone—fifty feet away a figure had emerged from the shadow of my neighbor’s\nmansion and was standing with his hands in his pockets regarding the silver\npepper of the stars. Something in his leisurely movements and the secure\nposition of his feet upon the lawn suggested that it was Mr. Gatsby himself,\ncome out to determine what share was his of our local heavens.\n\nI decided to call to him. Miss Baker had mentioned him at dinner, and that would\ndo for an introduction. But I didn’t call to him, for he gave a sudden\nintimation that he was content to be alone—he stretched out his arms toward the\ndark water in a curious way, and, far as I was from him, I could have sworn he\nwas trembling. Involuntarily I glanced seaward—and distinguished nothing except\na single green light, minute and far away, that might have been the end of a\ndock. When I looked once more for Gatsby he had vanished, and I was alone again\nin the unquiet darkness.\n\n## CHAPTER II\n\nAbout half way between West Egg and New York the motor road hastily joins the\nrailroad and runs beside it for a quarter of a mile, so as to shrink away from a\ncertain desolate area of land. This is a valley of ashes—a fantastic farm where\nashes grow like wheat into ridges and hills and grotesque gardens; where ashes\ntake the forms of houses and chimneys and rising smoke and, finally, with a\ntranscendent effort, of ash-gray men, who move dimly and already crumbling\nthrough the powdery air. Occasionally a line of gray cars crawls along an\ninvisible track, gives out a ghastly creak, and comes to rest, and immediately\nthe ash-gray men swarm up with leaden spades and stir up an impenetrable cloud,\nwhich screens their obscure operations from your sight.\n\nBut above the gray land and the spasms of bleak dust which drift endlessly over\nit, you perceive, after a moment, the eyes of Doctor T. J. Eckleburg. The eyes\nof Doctor T. J. Eckleburg are blue and gigantic—their retinas are one yard high.\nThey look out of no face, but, instead, from a pair of enormous yellow\nspectacles which pass over a nonexistent nose. Evidently some wild wag of an\noculist set them there to fatten his practice in the borough of Queens, and then\nsank down himself into eternal blindness, or forgot them and moved away. But his\neyes, dimmed a little by many paintless days, under sun and rain, brood on over\nthe solemn dumping ground.\n\nThe valley of ashes is bounded on one side by a small foul river, and, when the\ndrawbridge is up to let barges through, the passengers on waiting trains can\nstare at the dismal scene for as long as half an hour. There is always a halt\nthere of at least a minute, and it was because of this that I first met Tom\nBuchanan’s mistress.\n\nThe fact that he had one was insisted upon wherever he was known. His\nacquaintances resented the fact that he turned up in popular cafés with her and,\nleaving her at a table, sauntered about, chatting with whomsoever he knew.\nThough I was curious to see her, I had no desire to meet her—but I did. I went\nup to New York with Tom on the train one afternoon, and when we stopped by the\nashheaps he jumped to his feet and, taking hold of my elbow, literally forced me\nfrom the car.\n\n“We're getting off,” he insisted. “I want you to meet my girl.”\n\nI think he’d tanked up a good deal at luncheon, and his determination to have my\ncompany bordered on violence. The supercilious assumption was that on Sunday\nafternoon I had nothing better to do.\n\nI followed him over a low whitewashed railroad fence, and we walked back a\nhundred yards along the road under Doctor Eckleburg’s persistent stare. The only\nbuilding in sight was a small block of yellow brick sitting on the edge of the\nwaste land, a sort of compact Main Street ministering to it, and contiguous to\nabsolutely nothing. One of the three shops it contained was for rent and another\nwas an all-night restaurant, approached by a trail of ashes; the third was a\ngarage—Repairs. George B. Wilson. Cars bought and sold.—and I followed Tom\ninside.\n\nThe interior was unprosperous and bare; the only car visible was the\ndust-covered wreck of a Ford which crouched in a dim corner. It had occurred to\nme that this shadow of a garage must be a blind, and that sumptuous and romantic\napartments were concealed overhead, when the proprietor himself appeared in the\ndoor of an office, wiping his hands on a piece of waste. He was a blond,\nspiritless man, anæmic, and faintly handsome. When he saw us a damp gleam of\nhope sprang into his light blue eyes.\n\n“Hello, Wilson, old man,” said Tom, slapping him jovially on the shoulder.\n‘‘How’s business?”\n\n“I can’t complain,” answered Wilson unconvincingly. “When are you going to sell\nme that car?”\n\n“Next week; I’ve got my man working on it now.”\n\n“Works pretty slow, don’t he?”\n\n“No, he doesn’t,” said Tom coldly. “And if you feel that way about it, maybe I’d\nbetter sell it somewhere else after all.”\n\n“I don’t mean that,” explained Wilson quickly. “I just meant———”\n\nHis voice faded off and Tom glanced impatiently around the garage. Then I heard\nfootsteps on a stairs, and in a moment the thickish figure of a woman blocked\nout the light from the office door. She was in the middle thirties, and faintly\nstout, but she carried her flesh sensuously as some women can. Her face, above a\nspotted dress of dark blue crêpe-de-chine, contained no facet or gleam of\nbeauty, but there was an immediately perceptible vitality about her as if the\nnerves of her body were continually smouldering. She smiled slowly and, walking\nthrough her husband as if he were a ghost, shook hands with Tom, looking him\nflush in the eye. Then she wet her lips, and without turning around spoke to her\nhusband in a soft, coarse voice:\n\n“Get some chairs, why don’t you, so somebody can sit down.”\n\n“Oh, sure,” agreed Wilson hurriedly, and went toward the little office, mingling\nimmediately with the cement color of the walls. A white ashen dust veiled his\ndark suit and his pale hair as it veiled everything in the vicinity—except his\nwife, who moved close to Tom.\n\n“I want to see you,” said Tom intently. “Get on the next train.”\n\n“All right.”\n\n“I’ll meet you by the news-stand on the lower level.”\n\nShe nodded and moved away from him just as George Wilson emerged with two chairs\nfrom his office door.\n\nWe waited for her down the road and out of sight. It was a few days before the\nFourth of July, and a gray, scrawny Italian child was setting torpedoes in a row\nalong the railroad track.\n\n“Terrible place, isn’t it,” said Tom, exchanging a frown with Doctor Eckleburg.\n\n“Awful.”\n\n“It does her good to get away.”\n\n“Doesn’t her husband object?”\n\n“Wilson? He thinks she goes to see her sister in New York. He’s so dumb he\ndoesn’t know he’s alive.”\n\nSo Tom Buchanan and his girl and I went up together to New York—or not quite\ntogether, for Mrs. Wilson sat discreetly in another car. Tom deferred that much\nto the sensibilities of those East Eggers who might be on the train.\n\nShe had changed her dress to a brown figured muslin, which stretched tight over\nher rather wide hips as Tom helped her to the platform in New York. At the\nnews-stand she bought a copy of Town Tattle and a moving-picture magazine, and\nin the station drug-store some cold cream and a small flask of perfume.\nUp-stairs, in the solemn echoing drive she let four taxicabs drive away before\nshe selected a new one, lavender-colored with gray upholstery, and in this we\nslid out from the mass of the station into the glowing sunshine. But immediately\nshe turned sharply from the window and, leaning forward, tapped on the front\nglass.\n\n“I want to get one of those dogs,” she said earnestly. “I want to get one for\nthe apartment. They’re nice to have—a dog.”\n\nWe backed up to a gray old man who bore an absurd resemblance to John D.\nRockefeller. In a basket swung from his neck cowered a dozen very recent puppies\nof an indeterminate breed.\n\n“What kind are they?” asked Mrs. Wilson eagerly, as he came to the taxi-window.\n\n“All kinds. What kind do you want, lady?”\n\n“I’d like to get one of those police dogs; I don’t suppose you got that kind?”\n\nThe man peered doubtfully into the basket, plunged in his hand and drew one up,\nwriggling, by the back of the neck.\n\n“That’s no police dog,” said Tom.\n\n“No, it’s not exactly a police dog,” said the man with disappointment in his\nvoice. “It’s more of an Airedale.” He passed his hand over the brown washrag of\na back. “Look at that coat. Some coat. That’s a dog that’ll never bother you\nwith catching cold.”\n\n“I think it’s cute,” said Mrs. Wilson enthusiastically. “How much is it?”\n\n“That dog?” He looked at it admiringly. “That dog will cost you ten dollars.”\n\nThe Airedale—undoubtedly there was an Airedale concerned in it somewhere, though\nits feet were startlingly white—changed hands and settled down into Mrs.\nWilson’s lap, where she fondled the weatherproof coat with rapture.\n\n“Is it a boy or a girl?” she asked delicately.\n\n“That dog? That dog’s a boy.”\n\n“It’s a bitch,” said Tom decisively. “Here’s your money. Go and buy ten more\ndogs with it.”\n\nWe drove over to Fifth Avenue, warm and soft, almost pastoral, on the summer\nSunday afternoon. I wouldn’t have been surprised to see a great flock of white\nsheep turn the corner.\n\n“Hold on,” I said, “I have to leave you here.”\n\n“No, you don’t,” interposed Tom quickly. “Myrtle’ll be hurt if you don’t come up\nto the apartment. Won’t you, Myrtle?”\n\n“Come on,” she urged. “I'll telephone my sister Catherine. She’s said to be very\nbeautiful by people who ought to know.”\n\n“Well, I’d like to, but—”\n\nWe went on, cutting back again over the Park toward the West Hundreds. At 158th\nStreet the cab stopped at one slice in a long white cake of apartment-houses.\nThrowing a regal homecoming glance around the neighborhood, Mrs. Wilson gathered\nup her dog and her other purchases, and went haughtily in.\n\n“I’m going to have the McKees come up,” she announced as we rose in the\nelevator. “And, of course, I got to call up my sister, too.”\n\nThe apartment was on the top floor—a small living-room, a small dining-room, a\nsmall bedroom, and a bath. The living-room was crowded to the doors with a set\nof tapestried furniture entirely too large for it, so that to move about was to\nstumble continually over scenes of ladies swinging in the gardens of Versailles.\nThe only picture was an over-enlarged photograph, apparently a hen sitting on a\nblurred rock. Looked at from a distance, however, the hen resolved itself into a\nbonnet, and the countenance of a stout old lady beamed down into the room.\nSeveral old copies of Town Tattle lay on the table together with a copy of\n“Simon Called Peter,” and some of the small scandal magazines of Broadway. Mrs.\nWilson was first concerned with the dog. A reluctant elevator-boy went for a box\nfull of straw and some milk, to which he added on his own initiative a tin of\nlarge, hard dog-biscuits— one of which decomposed apathetically in the saucer of\nmilk all afternoon. Meanwhile Tom brought out a bottle of whiskey from a locked\nbureau door.\n\nI have been drunk just twice in my life, and the second time was that afternoon;\nso everything that happened has a dim, hazy cast over it, although until after\neight o’clock the apartment was full of cheerful sun. Sitting on Tom’s lap Mrs.\nWilson called up several people on the telephone; then there were no cigarettes,\nand I went out to buy some at the drugstore on the corner. When I came back they\nhad both disappeared, so I sat down discreetly in the living-room and read a\nchapter of “Simon Called Peter”—either it was terrible stuff or the whiskey\ndistorted things, because it didn’t make any sense to me.\n\nJust as Tom and Myrtle (after the first drink Mrs. Wilson and I called each\nother by our first names) reappeared, company commenced to arrive at the\napartment-door.\n\nThe sister, Catherine, was a slender, worldly girl of about thirty, with a\nsolid, sticky bob of red hair, and a complexion powdered milky white. Her\neyebrows had been plucked and then drawn on again at a more rakish angle, but\nthe efforts of nature toward the restoration of the old alignment gave a blurred\nair to her face. When she moved about there was an incessant clicking as\ninnumerable pottery bracelets jingled up and down upon her arms. She came in\nwith such a proprietary haste, and looked around so possessively at the\nfurniture that I wondered if she lived here. But when I asked her she laughed\nimmoderately, repeated my question aloud, and told me she lived with a girl\nfriend at a hotel.\n\nMr. McKee was a pale, feminine man from the flat below. He had just shaved, for\nthere was a white spot of lather on his cheekbone, and he was most respectful in\nhis greeting to every one in the room. He informed me that he was in the\n“artistic game,” and I gathered later that he was a photographer and had made\nthe dim enlargement of Mrs. Wilson’s mother which hovered like an ectoplasm on\nthe wall. His wife was shrill, languid, handsome, and horrible. She told me with\npride that her husband had photographed her a hundred and twenty-seven times\nsince they had been married.\n\nMrs. Wilson had changed her costume some time before, and was now attired in an\nelaborate afternoon dress of cream-colored chiffon, which gave out a continual\nrustle as she swept about the room. With the influence of the dress her\npersonality had also undergone a change. The intense vitality that had been so\nremarkable in the garage was converted into impressive hauteur. Her laughter,\nher gestures, her assertions became more violently affected moment by moment,\nand as she expanded the room grew smaller around her, until she seemed to be\nrevolving on a noisy, creaking pivot through the smoky air.\n\n“My dear,” she told her sister in a high, mincing shout, “most of these fellas\nwill cheat you every time. All they think of is money. I had a woman up here\nlast week to look at my feet, and when she gave me the bill you’d of thought she\nhad my appendicitus out.”\n\n“What was the name of the woman?” asked Mrs. McKee.\n\n“Mrs. Eberhardt. She goes around looking at people’s feet in their own homes.”\n\n“I like your dress,” remarked Mrs. McKee, “I think it’s adorable.”\n\nMrs. Wilson rejected the compliment by raising her eyebrow in disdain.\n\n“It’s just a crazy old thing,” she said. “I just slip it on sometimes when I\ndon’t care what I look like.”\n\n“But it looks wonderful on you, if you know what I mean,” pursued Mrs. McKee.\n“If Chester could only get you in that pose I think he could make something of\nit.”\n\nWe all looked in silence at Mrs. Wilson, who removed a strand of hair from over\nher eyes and looked back at us with a brilliant smile. Mr. McKee regarded her\nintently with his head on one side, and then moved his hand back and forth\nslowly in front of his face.\n\n“I should change the light,” he said after a moment. “I’d like to bring out the\nmodelling of the features. And I’d try to get hold of all the back hair.”\n\n“I wouldn’t think of changing the light,” cried Mrs. McKee. “I think it’s———”\n\nHer husband said “Sh!” and we all looked at the subject again, whereupon Tom\nBuchanan yawned audibly and got to his feet.\n\n“You McKees have something to drink,” he said. “Get some more ice and mineral\nwater, Myrtle, before everybody goes to sleep.”\n\n“I told that boy about the ice.” Myrtle raised her eyebrows in despair at the\nshiftlessness of the lower orders. “These people! You have to keep after them\nall the time.”\n\nShe looked at me and laughed pointlessly. Then she flounced over to the dog,\nkissed it with ecstasy, and swept into the kitchen, implying that a dozen chefs\nawaited her orders there.\n\n“I’ve done some nice things out on Long Island,” asserted Mr. McKee.\n\nTom looked at him blankly.\n\n“Two of them we have framed down-stairs.”\n\n“Two what?” demanded Tom.\n\n“Two studies. One of them I call ‘Montauk Point—The Gulls,’ and the other I call\n‘Montauk Point—The Sea.’”\n\nThe sister Catherine sat down beside me on the couch.\n\n“Do you live down on Long Island, too,” she inquired.\n\n“I live at West Egg.”\n\n“Really? I was down there at a party about a month ago. At a man named Gatsby’s.\nDo you know him?”\n\n“I live next door to him.”\n\n“Well, they say he’s a nephew or a cousin of Kaiser Wilhelm’s. That’s where all\nhis money comes from.”\n\n“Really?”\n\nShe nodded.\n\n“I’m scared of him. I’d hate to have him get anything on me.”\n\nThis absorbing information about my neighbor was interrupted by Mrs. McKee’s\npointing suddenly at Catherine:\n\n“Chester, I think you could do something with her,” she broke out, but Mr. McKee\nonly nodded in a bored way, and turned his attention to Tom.\n\n“I’d like to do more work on Long Island, if I could get the entry. All I ask is\nthat they should give me a start.”\n\n“Ask Myrtle,” said Tom, breaking into a short shout of laughter as Mrs. Wilson\nentered with a tray. “She'll give you a letter of introduction, won’t you,\nMyrtle?”\n\n“Do what?” she asked, startled.\n\n“You'll give McKee a letter of introduction to your husband, so he can do some\nstudies of him.” His lips moved silently for a moment as he invented. “‘George\nB. Wilson at the Gasoline Pump,’ or something like that.”\n\nCatherine leaned close to me and whispered in my ear:\n\n“Neither of them can stand the person they’re married to.”\n\n“Can’t they?”\n\n“Can’t stand them.” She looked at Myrtle and then at Tom. “What I say is, why go\non living with them if they can’t stand them? If I was them I’d get a divorce\nand get married to each other right away.”\n\n“Doesn’t she like Wilson either?”\n\nThe answer to this was unexpected. It came from Myrtle, who had overheard the\nquestion, and it was violent and obscene.\n\n“You see,” cried Catherine triumphantly. She lowered her voice again. “It’s\nreally his wife that’s keeping them apart. She’s a Catholic, and they don’t\nbelieve in divorce.”\n\nDaisy was not a Catholic, and I was a little shocked at the elaborateness of the\nlie.\n\n“When they do get married,” continued Catherine, “they’re going West to live for\na while until it blows over.”\n\n“It’d be more discreet to go to Europe.”\n\n“Oh, do you like Europe?” she exclaimed surprisingly. “I just got back from\nMonte Carlo.”\n\n“Really.”\n\n“Just last year. I went over there with another girl.”\n\n“Stay long?”\n\n“No, we just went to Monte Carlo and back. We went by way of Marseilles. We had\nover twelve hundred dollars when we started, but we got gyped out of it all in\ntwo days in the private rooms. We had an awful time getting back, I can tell\nyou. God, how I hated that town!”\n\nThe late afternoon sky bloomed in the window for a moment like the blue honey of\nthe Mediterranean—then the shrill voice of Mrs. McKee called me back into the\nroom.\n\n“I almost made a mistake, too,” she declared vigorously. “I almost married a\nlittle kyke who’d been after me for years. I knew he was below me. Everybody\nkept saying to me: ‘Lucille, that man’s ’way below you!’ But if I hadn’t met\nChester, he’d of got me sure.”\n\n“Yes, but listen,” said Myrtle Wilson, nodding her head up and down, “at least\nyou didn’t marry him.”\n\n“I know I didn’t.”\n\n“Well, I married him,” said Myrtle, ambiguously. “And that’s the difference\nbetween your case and mine.”\n\n“Why did you, Myrtle?” demanded Catherine. “Nobody forced you to.”\n\nMyrtle considered.\n\n“I married him because I thought he was a gentleman,” she said finally. “I\nthought he knew something about breeding, but he wasn’t fit to lick my shoe.”\n\n“You were crazy about him for a while,” said Catherine.\n\n“Crazy about him!” cried Myrtle incredulously. “Who said I was crazy about him?\nI never was any more crazy about him than I was about that man there.”\n\nShe pointed suddenly at me, and every one looked at me accusingly. I tried to\nshow by my expression that I expected no affection.\n\n“The only crazy I was was when I married him. I knew right away I made a\nmistake. He borrowed somebody’s best suit to get married in, and never even told\nme about it, and the man came after it one day when he was out: ‘Oh, is that\nyour suit?’ I said. ‘This is the first I ever heard about it.’ But I gave it to\nhim and then I lay down and cried to beat the band all afternoon.”\n\n“She really ought to get away from him,” resumed Catherine to me. “They’ve been\nliving over that garage for eleven years. And Tom’s the first sweetie she ever\nhad.”\n\nThe bottle of whiskey—a second one—was now in constant demand by all present,\nexcepting Catherine, who “felt just as good on nothing at all.” Tom rang for the\njanitor and sent him for some celebrated sandwiches, which were a complete\nsupper in themselves. I wanted to get out and walk eastward toward the park\nthrough the soft twilight, but each time I tried to go I became entangled in\nsome wild, strident argument which pulled me back, as if with ropes, into my\nchair. Yet high over the city our line of yellow windows must have contributed\ntheir share of human secrecy to the casual watcher in the darkening streets, and\nI saw him too, looking up and wondering. I was within and without,\nsimultaneously enchanted and repelled by the inexhaustible variety of life.\n\nMyrtle pulled her chair close to mine, and suddenly her warm breath poured over\nme the story of her first meeting with Tom.\n\n“It was on the two little seats facing each other that are always the last ones\nleft on the train. I was going up to New York to see my sister and spend the\nnight. He had on a dress suit and patent leather shoes, and I couldn’t keep my\neyes off him, but every time he looked at me I had to pretend to be looking at\nthe advertisement over his head. When we came into the station he was next to\nme, and his white shirt-front pressed against my arm, and so I told him I’d have\nto call a policeman, but he knew I lied. I was so excited that when I got into a\ntaxi with him I didn’t hardly know I wasn’t getting into a subway train. All I\nkept thinking about, over and over, was ‘You can’t live forever; you can’t live\nforever.’”\n\nShe turned to Mrs. McKee and the room rang full of her artificial laughter.\n\n“My dear,” she cried, “I’m going to give you this dress as soon as I’m through\nwith it. I’ve got to get another one to-morrow. I’m going to make a list of all\nthe things I’ve got to get. A massage and a wave, and a collar for the dog, and\none of those cute little ash-trays where you touch a spring, and a wreath with a\nblack silk bow for mother’s grave that’ll last all summer. I got to write down a\nlist so I won’t forget all the things I got to do.”\n\nIt was nine o’clock—almost immediately afterward I looked at my watch and found\nit was ten. Mr. McKee was asleep on a chair with his fists clenched in his lap,\nlike a photograph of a man of action. Taking out my handkerchief I wiped from\nhis cheek the spot of dried lather that had worried me all the afternoon.\n\nThe little dog was sitting on the table looking with blind eyes through the\nsmoke, and from time to time groaning faintly. People disappeared, reappeared,\nmade plans to go somewhere, and then lost each other, searched for each other,\nfound each other a few feet away. Some time toward midnight Tom Buchanan and\nMrs. Wilson stood face to face discussing, in impassioned voices, whether Mrs.\nWilson had any right to mention Daisy’s name.\n\n“Daisy! Daisy! Daisy!” shouted Mrs. Wilson. “I’ll say it whenever I want to!\nDaisy! Dai———”\n\nMaking a short deft movement, Tom Buchanan broke her nose with his open hand.\n\nThen there were bloody towels upon the bathroom floor, and women’s voices\nscolding, and high over the confusion a long broken wail of pain. Mr. McKee\nawoke from his doze and started in a daze toward the door. When he had gone half\nway he turned around and stared at the scene—his wife and Catherine scolding and\nconsoling as they stumbled here and there among the crowded furniture with\narticles of aid, and the despairing figure on the couch, bleeding fluently, and\ntrying to spread a copy of Town Tattle over the tapestry scenes of Versailles.\nThen Mr. McKee turned and continued on out the door. Taking my hat from the\nchandelier, I followed.\n\n“Come to lunch some day,” he suggested, as we groaned down in the elevator.\n\n“Where?”\n\n“Anywhere.”\n\n“Keep your hands off the lever,” snapped the elevator boy.\n\n“I beg your pardon,” said Mr. McKee with dignity, “I didn’t know I was touching\nit.”\n\n“All right,” I agreed, “I’ll be glad to.”\n\n. . . I was standing beside his bed and he was sitting up between the sheets,\nclad in his underwear, with a great portfolio in his hands.\n\n“Beauty and the Beast . . . Loneliness . . . Old Grocery Horse . . . Brook’n\nBridge . . .” Then I was lying half asleep in the cold lower level of the\nPennsylvania Station, staring at the morning Tribune, and waiting for the four\no’clock train.\n\n## CHAPTER III\n\nThere was music from my neighbor’s house through the summer nights. In his blue\ngardens men and girls came and went like moths among the whisperings and the\nchampagne and the stars. At high tide in the afternoon I watched his guests\ndiving from the tower of his raft, or taking the sun on the hot sand of his\nbeach while his two motor-boats slit the waters of the Sound, drawing aquaplanes\nover cataracts of foam. On week-ends his Rolls-Royce became an omnibus, bearing\nparties to and from the city between nine in the morning and long past midnight,\nwhile his station wagon scampered like a brisk yellow bug to meet all trains.\nAnd on Mondays eight servants, including an extra gardener, toiled all day with\nmops and scrubbing-brushes and hammers and garden-shears, repairing the ravages\nof the night before.\n\nEvery Friday five crates of oranges and lemons arrived from a fruiterer in New\nYork—every Monday these same oranges and lemons left his back door in a pyramid\nof pulpless halves. There was a machine in the kitchen which could extract the\njuice of two hundred oranges in half an hour if a little button was pressed two\nhundred times by a butler’s thumb.\n\nAt least once a fortnight a corps of caterers came down with several hundred\nfeet of canvas and enough colored lights to make a Christmas tree of Gatsby’s\nenormous garden. On buffet tables, garnished with glistening hors-d’œuvre,\nspiced baked hams crowded against salads of harlequin designs and pastry pigs\nand turkeys bewitched to a dark gold. In the main hall a bar with a real brass\nrail was set up, and stocked with gins and liquors and with cordials so long\nforgotten that most of his female guests were too young to know one from\nanother.\n\nBy seven o’clock the orchestra has arrived, no thin five-piece affair, but a\nwhole pitful of oboes and trombones and saxophones and viols and cornets and\npiccolos, and low and high drums. The last swimmers have come in from the beach\nnow and are dressing up-stairs; the cars from New York are parked five deep in\nthe drive, and already the halls and salons and verandas are gaudy with primary\ncolors, and hair bobbed in strange new ways, and shawls beyond the dreams of\nCastile. The bar is in full swing, and floating rounds of cocktails permeate the\ngarden outside, until the air is alive with chatter and laughter, and casual\ninnuendo and introductions forgotten on the spot, and enthusiastic meetings\nbetween women who never knew each other’s names.\n\nThe lights grow brighter as the earth lurches away from the sun, and now the\norchestra is playing yellow cocktail music, and the opera of voices pitches a\nkey higher. Laughter is easier minute by minute, spilled with prodigality,\ntipped out at a cheerful word. The groups change more swiftly, swell with new\narrivals, dissolve and form in the same breath; already there are wanderers,\nconfident girls who weave here and there among the stouter and more stable,\nbecome for a sharp, joyous moment the centre of a group, and then, excited with\ntriumph, glide on through the sea-change of faces and voices and color under the\nconstantly changing light.\n\nSuddenly one of these gypsies, in trembling opal, seizes a cocktail out of the\nair, dumps it down for courage and, moving her hands like Frisco, dances out\nalone on the canvas platform. A momentary hush; the orchestra leader varies his\nrhythm obligingly for her, and there is a burst of chatter as the erroneous news\ngoes around that she is Gilda Gray’s understudy from the Follies. The party has\nbegun.\n\nI believe that on the first night I went to Gatsby’s house I was one of the few\nguests who had actually been invited. People were not invited—they went there.\nThey got into automobiles which bore them out to Long Island, and somehow they\nended up at Gatsby’s door. Once there they were introduced by somebody who knew\nGatsby, and after that they conducted themselves according to the rules of\nbehavior associated with an amusement park. Sometimes they came and went without\nhaving met Gatsby at all, came for the party with a simplicity of heart that was\nits own ticket of admission.\n\nI had been actually invited. A chauffeur in a uniform of robin’s-egg blue\ncrossed my lawn early that Saturday morning with a surprisingly formal note from\nhis employer: the honor would be entirely Gatsby’s, it said, if I would attend\nhis “little party” that night. He had seen me several times, and had intended to\ncall on me long before, but a peculiar combination of circumstances had\nprevented it— signed Jay Gatsby, in a majestic hand.\n\nDressed up in white flannels I went over to his lawn a little after seven, and\nwandered around rather ill at ease among swirls and eddies of people I didn’t\nknow—though here and there was a face I had noticed on the commuting train. I\nwas immediately struck by the number of young Englishmen dotted about; all well\ndressed, all looking a little hungry, and all talking in low, earnest voices to\nsolid and prosperous Americans. I was sure that they were selling something:\nbonds or insurance or automobiles. They were at least agonizingly aware of the\neasy money in the vicinity and convinced that it was theirs for a few words in\nthe right key.\n\nAs soon as I arrived I made an attempt to find my host, but the two or three\npeople of whom I asked his whereabouts stared at me in such an amazed way, and\ndenied so vehemently any knowledge of his movements, that I slunk off in the\ndirection of the cocktail table—the only place in the garden where a single man\ncould linger without looking purposeless and alone.\n\nI was on my way to get roaring drunk from sheer embarrassment when Jordan Baker\ncame out of the house and stood at the head of the marble steps, leaning a\nlittle backward and looking with contemptuous interest down into the garden.\n\nWelcome or not, I found it necessary to attach myself to some one before I\nshould begin to address cordial remarks to the passers-by.\n\n“Hello!” I roared, advancing toward her. My voice seemed unnaturally loud across\nthe garden.\n\n“I thought you might be here,” she responded absently as I came up. “I\nremembered you lived next door to——”\n\nShe held my hand impersonally, as a promise that she’d take care of me in a\nminute, and gave ear to two girls in twin yellow dresses, who stopped at the\nfoot of the steps.\n\n“Hello!” they cried together. “Sorry you didn’t win.”\n\nThat was for the golf tournament. She had lost in the finals the week before.\n\n“You don’t know who we are,” said one of the girls in yellow, “but we met you\nhere about a month ago.”\n\n“You’ve dyed your hair since then,” remarked Jordan, and I started, but the\ngirls had moved casually on and her remark was addressed to the premature moon,\nproduced like the supper, no doubt, out of a caterer’s basket. With Jordan’s\nslender golden arm resting in mine, we descended the steps and sauntered about\nthe garden. A tray of cocktails floated at us through the twilight, and we sat\ndown at a table with the two girls in yellow and three men, each one introduced\nto us as Mr. Mumble.\n\n“Do you come to these parties often?” inquired Jordan of the girl beside her.\n\n“The last one was the one I met you at,” answered the girl, in an alert\nconfident voice. She turned to her companion: “Wasn’t it for you, Lucille?”\n\nIt was for Lucille, too.\n\n“I like to come,” Lucille said. “I never care what I do, so I always have a good\ntime. When I was here last I tore my gown on a chair, and he asked me my name\nand address—inside of a week I got a package from Croirier’s with a new evening\ngown in it.”\n\n“Did you keep it?” asked Jordan.\n\n“Sure I did. I was going to wear it to-night, but it was too big in the bust and\nhad to be altered. It was gas blue with lavender beads. Two hundred and\nsixty-five dollars.”\n\n“There’s something funny about a fellow that’ll do a thing like that,” said the\nother girl eagerly. “He doesn’t want any trouble with anybody.”\n\n“Who doesn’t?” I inquired.\n\n“Gatsby. Somebody told me——”\n\nThe two girls and Jordan leaned together confidentially.\n\n“Somebody told me they thought he killed a man once.”\n\nA thrill passed over all of us. The three Mr. Mumbles bent forward and listened\neagerly.\n\n“I don’t think it’s so much that,” argued Lucille sceptically; “it’s more that\nhe was a German spy during the war.”\n\nOne of the men nodded in confirmation.\n\n“I heard that from a man who knew all about him, grew up with him in Germany,”\nhe assured us positively.\n\n“Oh, no,” said the first girl, “it couldn’t be that, because he was in the\nAmerican army during the war.” As our credulity switched back to her she leaned\nforward with enthusiasm. “You look at him sometimes when he thinks nobody’s\nlooking at him. I’ll bet he killed a man.”\n\nShe narrowed her eyes and shivered. Lucille shivered. We all turned and looked\naround for Gatsby. It was testimony to the romantic speculation he inspired that\nthere were whispers about him from those who had found little that it was\nnecessary to whisper about in this world.\n\nThe first supper—there would be another one after midnight—was now being served,\nand Jordan invited me to join her own party, who were spread around a table on\nthe other side of the garden. There were three married couples and Jordan’s\nescort, a persistent undergraduate given to violent innuendo, and obviously\nunder the impression that sooner or later Jordan was going to yield him up her\nperson to a greater or lesser degree. Instead of rambling this party had\npreserved a dignified homogeneity, and assumed to itself the function of\nrepresenting the staid nobility of the country-side—East Egg condescending to\nWest Egg, and carefully on guard against its spectroscopic gayety.\n\n“Let’s get out,” whispered Jordan, after a somehow wasteful and inappropriate\nhalf-hour; “this is much too polite for me.”\n\nWe got up, and she explained that we were going to find the host: I had never\nmet him, she said, and it was making me uneasy. The undergraduate nodded in a\ncynical, melancholy way.\n\nThe bar, where we glanced first, was crowded, but Gatsby was not there. She\ncouldn’t find him from the top of the steps, and he wasn’t on the veranda. On a\nchance we tried an important-looking door, and walked into a high Gothic\nlibrary, panelled with carved English oak, and probably transported complete\nfrom some ruin overseas.\n\nA stout, middle-aged man, with enormous owl-eyed spectacles, was sitting\nsomewhat drunk on the edge of a great table, staring with unsteady concentration\nat the shelves of books. As we entered he wheeled excitedly around and examined\nJordan from head to foot.\n\n“What do you think?” he demanded impetuously.\n\n“About what?”\n\nHe waved his hand toward the book-shelves.\n\n“About that. As a matter of fact you needn’t bother to ascertain. I ascertained.\nThey’re real.”\n\n“The books?”\n\nHe nodded.\n\n“Absolutely real—have pages and everything. I thought they’d be a nice durable\ncardboard. Matter of fact, they’re absolutely real. Pages and—Here! Lemme show\nyou.”\n\nTaking our scepticism for granted, he rushed to the bookcases and returned with\nVolume One of the “Stoddard Lectures.”\n\n“See!” he cried triumphantly. “It’s a bona-fide piece of printed matter. It\nfooled me. This fella’s a regular Belasco. It’s a triumph. What thoroughness!\nWhat realism! Knew when to stop, too—didn’t cut the pages. But what do you want?\nWhat do you expect?”\n\nHe snatched the book from me and replaced it hastily on its shelf, muttering\nthat if one brick was removed the whole library was liable to collapse.\n\n“Who brought you?” he demanded. “Or did you just come? I was brought. Most\npeople were brought.”\n\nJordan looked at him alertly, cheerfully, without answering.\n\n“I was brought by a woman named Roosevelt,” he continued. “Mrs. Claud Roosevelt.\nDo you know her? I met her somewhere last night. I’ve been drunk for about a\nweek now, and I thought it might sober me up to sit in a library.”\n\n“Has it?”\n\n“A little bit, I think. I can’t tell yet. I’ve only been here an hour. Did I\ntell you about the books? They’re real. They’re—”\n\n“You told us.”\n\nWe shook hands with him gravely and went back outdoors.\n\nThere was dancing now on the canvas in the garden; old men pushing young girls\nbackward in eternal graceless circles, superior couples holding each other\ntortuously, fashionably, and keeping in the corners—and a great number of single\ngirls dancing individualistically or relieving the orchestra for a moment of the\nburden of the banjo or the traps. By midnight the hilarity had increased. A\ncelebrated tenor had sung in Italian, and a notorious contralto had sung in\njazz, and between the numbers people were doing ‘‘stunts” all over the garden,\nwhile happy, vacuous bursts of laughter rose toward the summer sky. A pair of\nstage twins, who turned out to be the girls in yellow, did a baby act in\ncostume, and champagne was served in glasses bigger than finger-bowls. The moon\nhad risen higher, and floating in the Sound was a triangle of silver scales,\ntrembling a little to the stiff, tinny drip of the banjoes on the lawn.\n\nI was still with Jordan Baker. We were sitting at a table with a man of about my\nage and a rowdy little girl, who gave way upon the slightest provocation to\nuncontrollable laughter. I was enjoying myself now. I had taken two finger-bowls\nof champagne, and the scene had changed before my eyes into something\nsignificant, elemental, and profound.\n\nAt a lull in the entertainment the man looked at me and smiled.\n\n“Your face is familiar,” he said, politely. “Weren’t you in the First Division\nduring the war?”\n\n“Why, yes. I was in the Twenty-eighth Infantry.”\n\n“I was in the Sixteenth until June nineteen-eighteen. I knew I’d seen you\nsomewhere before.”\n\nWe talked for a moment about some wet, gray little villages in France. Evidently\nhe lived in this vicinity, for he told me that he had just bought a hydroplane,\nand was going to try it out in the morning.\n\n“Want to go with me, old sport? Just near the shore along the Sound.”\n\n“What time?”\n\n“Any time that suits you best.”\n\nIt was on the tip of my tongue to ask his name when Jordan looked around and\nsmiled.\n\n“Having a gay time now?” she inquired.\n\n“Much better.” I turned again to my new acquaintance. “This is an unusual party\nfor me. I haven’t even seen the host. I live over there—” I waved my hand at the\ninvisible hedge in the distance, “and this man Gatsby sent over his chauffeur\nwith an invitation.”\n\nFor a moment he looked at me as if he failed to understand.\n\n“I’m Gatsby,” he said suddenly.\n\n“What!” I exclaimed. “Oh, I beg your pardon.”\n\n“I thought you knew, old sport. I’m afraid I’m not a very good host.”\n\nHe smiled understandingly—much more than understandingly. It was one of those\nrare smiles with a quality of eternal reassurance in it, that you may come\nacross four or five times in life. It faced—or seemed to face—the whole eternal\nworld for an instant, and then concentrated on you with an irresistible\nprejudice in your favor. It understood you just so far as you wanted to be\nunderstood, believed in you as you would like to believe in yourself, and\nassured you that it had precisely the impression of you that, at your best, you\nhoped to convey. Precisely at that point it vanished—and I was looking at an\nelegant young rough-neck, a year or two over thirty, whose elaborate formality\nof speech just missed being absurd. Some time before he introduced himself I’d\ngot a strong impression that he was picking his words with care.\n\nAlmost at the moment when Mr. Gatsby identified himself a butler hurried toward\nhim with the information that Chicago was calling him on the wire. He excused\nhimself with a small bow that included each of us in turn.\n\n“If you want anything just ask for it, old sport,” he urged me. “Excuse me. I\nwill rejoin you later.”\n\nWhen he was gone I turned immediately to Jordan—constrained to assure her of my\nsurprise. I had expected that Mr. Gatsby would be a florid and corpulent person\nin his middle years.\n\n“Who is he?” I demanded. “Do you know?”\n\n“He’s just a man named Gatsby.”\n\n“Where is he from, I mean? And what does he do?”\n\n“Now you’re started on the subject,” she answered with a wan smile. “Well, he\ntold me once he was an Oxford man.”\n\nA dim background started to take shape behind him, but at her next remark it\nfaded away.\n\n“However, I don’t believe it.”\n\n“Why not?”\n\n“I don’t know,” she insisted, “I just don’t think he went there.”\n\nSomething in her tone reminded me of the other girl’s “I think he killed a man,”\nand had the effect of stimulating my curiosity. I would have accepted without\nquestion the information that Gatsby sprang from the swamps of Louisiana or from\nthe lower East Side of New York. That was comprehensible. But young men\ndidn’t—at least in my provincial inexperience I believed they didn’t—drift\ncoolly out of nowhere and buy a palace on Long Island Sound.\n\n“Anyhow, he gives large parties,” said Jordan, changing the subject with an\nurban distaste for the concrete. “And I like large parties. They’re so intimate.\nAt small parties there isn’t any privacy.”\n\nThere was the boom of a bass drum, and the voice of the orchestra leader rang\nout suddenly above the chatter of the garden.\n\n“Ladies and gentlemen,” he cried. “At the request of Mr. Gatsby we are going to\nplay for you Mr. Vladmir Tostoff’s latest work, which attracted so much\nattention at Carnegie Hall last May. If you read the papers you know there was a\nbig sensation.” He smiled with jovial condescension, and added: “Some\nsensation!” Whereupon everybody laughed.\n\n“The piece is known,” he concluded lustily, “as ‘Vladmir Tostoff’s Jazz History\nof the World.’”\n\nThe nature of Mr. Tostoff’s composition eluded me, because just as it began my\neyes fell on Gatsby, standing alone on the marble steps and looking from one\ngroup to another with approving eyes. His tanned skin was drawn attractively\ntight on his face and his short hair looked as though it were trimmed every day.\nI could see nothing sinister about him. I wondered if the fact that he was not\ndrinking helped to set him off from his guests, for it seemed to me that he grew\nmore correct as the fraternal hilarity increased. When the “Jazz History of the\nWorld” was over, girls were putting their heads on men’s shoulders in a\npuppyish, convivial way, girls were swooning backward playfully into men’s arms,\neven into groups, knowing that some one would arrest their falls—but no one\nswooned backward on Gatsby, and no French bob touched Gatsby’s shoulder, and no\nsinging quartets were formed for Gatsby’s head for one link.\n\n“I beg your pardon.”\n\nGatsby’s butler was suddenly standing beside us.\n\n“Miss Baker?” he inquired. “I beg your pardon, but Mr. Gatsby would like to\nspeak to you alone.”\n\n“With me?” she exclaimed in surprise.\n\n“Yes, madame.”\n\nShe got up slowly, raising her eyebrows at me in astonishment, and followed the\nbutler toward the house. I noticed that she wore her evening-dress, all her\ndresses, like sports clothes—there was a jauntiness about her movements as if\nshe had first learned to walk upon golf courses on clean, crisp mornings.\n\nI was alone and it was almost two. For some time confused and intriguing sounds\nhad issued from a long, many-windowed room which overhung the terrace. Eluding\nJordan’s undergraduate, who was now engaged in an obstetrical conversation with\ntwo chorus girls, and who implored me to join him, I went inside.\n\nThe large room was full of people. One of the girls in yellow was playing the\npiano, and beside her stood a tall, red-haired young lady from a famous chorus,\nengaged in song. She had drunk a quantity of champagne, and during the course of\nher song she had decided, ineptly, that everything was very, very sad—she was\nnot only singing, she was weeping too. Whenever there was a pause in the song\nshe filled it with gasping, broken sobs, and then took up the lyric again in a\nquavering soprano. The tears coursed down her cheeks—not freely, however, for\nwhen they came into contact with her heavily beaded eyelashes they assumed an\ninky color, and pursued the rest of their way in slow black rivulets. A humorous\nsuggestion was made that she sing the notes on her face, whereupon she threw up\nher hands, sank into a chair, and went off into a deep vinous sleep.\n\n“She had a fight with a man who says he’s her husband,” explained a girl at my\nelbow.\n\nI looked around. Most of the remaining women were now having fights with men\nsaid to be their husbands. Even Jordan’s party, the quartet from East Egg, were\nrent asunder by dissension. One of the men was talking with curious intensity to\na young actress, and his wife, after attempting to laugh at the situation in a\ndignified and indifferent way, broke down entirely and resorted to flank\nattacks—at intervals she appeared suddenly at his side like an angry diamond,\nand hissed: “You promised!” into his ear.\n\nThe reluctance to go home was not confined to wayward men. The hall was at\npresent occupied by two deplorably sober men and their highly indignant wives.\nThe wives were sympathizing with each other in slightly raised voices.\n\n“Whenever he sees I’m having a good time he wants to go home.”\n\n“Never heard anything so selfish in my life.”\n\n“We're always the first ones to leave.”\n\n“So are we.”\n\n“Well, we’re almost the last to-night,” said one of the men sheepishly. “The\norchestra left half an hour ago.”\n\nIn spite of the wives’ agreement that such malevolence was beyond credibility,\nthe dispute ended in a short struggle, and both wives were lifted, kicking, into\nthe night.\n\nAs I waited for my hat in the hall the door of the library opened and Jordan\nBaker and Gatsby came out together. He was saying some last word to her, but the\neagerness in his manner tightened abruptly into formality as several people\napproached him to say good-by.\n\nJordan’s party were calling impatiently to her from the porch, but she lingered\nfor a moment to shake hands.\n\n“I’ve just heard the most amazing thing,” she whispered. “How long were we in\nthere?”\n\n“Why, about an hour.”\n\n“It was . . . simply amazing,” she repeated abstractedly. “But I swore I\nwouldn’t tell it and here I am tantalizing you.” She yawned gracefully in my\nface. “Please come and see me. . . . Phone book. . . . Under the name of Mrs.\nSigourney Howard. . . . My aunt. . . .” She was hurrying off as she talked—her\nbrown hand waved a jaunty salute as she melted into her party at the door.\n\nRather ashamed that on my first appearance I had stayed so late, I joined the\nlast of Gatsby’s guests, who were clustered around him. I wanted to explain that\nI’d hunted for him early in the evening and to apologize for not having known\nhim in the garden.\n\n“Don’t mention it,” he enjoined me eagerly. “Don’t give it another thought, old\nsport.” The familiar expression held no more familiarity than the hand which\nreassuringly brushed my shoulder. “And don’t forget we’re going up in the\nhydroplane to-morrow morning, at nine o’clock.”\n\nThen the butler, behind his shoulder:\n\n“Philadelphia wants you on the ’phone, sir.”\n\n“All right, in a minute. Tell them I’ll be right there. . . . Good night.”\n\n“Good night.”\n\n“Good night.” He smiled—and suddenly there seemed to be a pleasant significance\nin having been among the last to go, as if he had desired it all the time. “Good\nnight, old sport. . . . Good night.”\n\nBut as I walked down the steps I saw that the evening was not quite over. Fifty\nfeet from the door a dozen headlights illuminated a bizarre and tumultuous\nscene. In the ditch beside the road, right side up, but violently shorn of one\nwheel, rested a new coupé which had left Gatsby’s drive not two minutes before.\nThe sharp jut of a wall accounted for the detachment of the wheel, which was now\ngetting considerable attention from half a dozen curious chauffeurs. However, as\nthey had left their cars blocking the road, a harsh, discordant din from those\nin the rear had been audible for some time, and added to the already violent\nconfusion of the scene.\n\nA man in a long duster had dismounted from the wreck and now stood in the middle\nof the road, looking from the car to the tire and from the tire to the observers\nin a pleasant, puzzled way.\n\n“See!” he explained. “It went in the ditch.”\n\nThe fact was infinitely astonishing to him, and I recognized first the unusual\nquality of wonder, and then the man—it was the late patron of Gatsby’s library.\n\n“How’d it happen?”\n\nHe shrugged his shoulders.\n\n“I know nothing whatever about mechanics,” he said decisively.\n\n“But how did it happen? Did you run into the wall?”\n\n“Don’t ask me,” said Owl Eyes, washing his hands of the whole matter. “I know\nvery little about driving—next to nothing. It happened, and that’s all I know.”\n\n“Well, if you’re a poor driver you oughtn’t to try driving at night.”\n\n“But I wasn’t even trying,” he explained indignantly, “I wasn’t even trying.”\n\nAn awed hush fell upon the bystanders.\n\n“Do you want to commit suicide?”\n\n“You're lucky it was just a wheel! A bad driver and not even trying!”\n\n“You don’t understand,” explained the criminal. “I wasn’t driving. There’s\nanother man in the car.”\n\nThe shock that followed this declaration found voice in a sustained “Ah-h-h!” as\nthe door of the coupé swung slowly open. The crowd—it was now a crowd—stepped\nback involuntarily, and when the door had opened wide there was a ghostly pause.\nThen, very gradually, part by part, a pale, dangling individual stepped out of\nthe wreck, pawing tentatively at the ground with a large uncertain dancing shoe.\n\nBlinded by the glare of the headlights and confused by the incessant groaning of\nthe horns, the apparition stood swaying for a moment before he perceived the man\nin the duster.\n\n“Wha’s matter?” he inquired calmly. “Did we run outa gas?”\n\n“Look!”\n\nHalf a dozen fingers pointed at the amputated wheel—he stared at it for a\nmoment, and then looked upward as though he suspected that it had dropped from\nthe sky.\n\n“It came off,” some one explained.\n\nHe nodded.\n\n“At first I din’ notice we’d stopped.”\n\nA pause. Then, taking a long breath and straightening his shoulders, he remarked\nin a determined voice:\n\n“Wonder’ff tell me where there’s a gas’line station?”\n\nAt least a dozen men, some of them a little better off than he was, explained to\nhim that wheel and car were no longer joined by any physical bond.\n\n“Back out,” he suggested after a moment. “Put her in reverse.”\n\n“But the wheel’s off!”\n\nHe hesitated.\n\n“No harm in trying,” he said.\n\nThe caterwauling horns had reached a crescendo and I turned away and cut across\nthe lawn toward home. I glanced back once. A wafer of a moon was shining over\nGatsby’s house, making the night fine as before, and surviving the laughter and\nthe sound of his still glowing garden. A sudden emptiness seemed to flow now\nfrom the windows and the great doors, endowing with complete isolation the\nfigure of the host, who stood on the porch, his hand up in a formal gesture of\nfarewell.\n\nReading over what I have written so far, I see I have given the impression that\nthe events of three nights several weeks apart were all that absorbed me. On the\ncontrary, they were merely casual events in a crowded summer, and, until much\nlater, they absorbed me infinitely less than my personal affairs.\n\nMost of the time I worked. In the early morning the sun threw my shadow westward\nas I hurried down the white chasms of lower New York to the Probity Trust. I\nknew the other clerks and young bond-salesmen by their first names, and lunched\nwith them in dark, crowded restaurants on little pig sausages and mashed\npotatoes and coffee. I even had a short affair with a girl who lived in Jersey\nCity and worked in the accounting department, but her brother began throwing\nmean looks in my direction, so when she went on her vacation in July I let it\nblow quietly away.\n\nI took dinner usually at the Yale Club—for some reason it was the gloomiest\nevent of my day—and then I went up-stairs to the library and studied investments\nand securities for a conscientious hour. There were generally a few rioters\naround, but they never came into the library, so it was a good place to work.\nAfter that, if the night was mellow, I strolled down Madison Avenue past the old\nMurray Hill Hotel, and over 33d Street to the Pennsylvania Station.\n\nI began to like New York, the racy, adventurous feel of it at night, and the\nsatisfaction that the constant flicker of men and women and machines gives to\nthe restless eye. I liked to walk up Fifth Avenue and pick out romantic women\nfrom the crowd and imagine that in a few minutes I was going to enter into their\nlives, and no one would ever know or disapprove. Sometimes, in my mind, I\nfollowed them to their apartments on the corners of hidden streets, and they\nturned and smiled back at me before they faded through a door into warm\ndarkness. At the enchanted metropolitan twilight I felt a haunting loneliness\nsometimes, and felt it in others—poor young clerks who loitered in front of\nwindows waiting until it was time for a solitary restaurant dinner—young clerks\nin the dusk, wasting the most poignant moments of night and life.\n\nAgain at eight o’clock, when the dark lanes of the Forties were lined five deep\nwith throbbing taxicabs, bound for the theatre district, I felt a sinking in my\nheart. Forms leaned together in the taxis as they waited, and voices sang, and\nthere was laughter from unheard jokes, and lighted cigarettes made\nunintelligible circles inside. Imagining that I, too, was hurrying toward gayety\nand sharing their intimate excitement, I wished them well.\n\nFor a while I lost sight of Jordan Baker, and then in midsummer I found her\nagain. At first I was flattered to go places with her, because she was a golf\nchampion, and every one knew her name. Then it was something more. I wasn’t\nactually in love, but I felt a sort of tender curiosity. The bored haughty face\nthat she turned to the world concealed something—most affectations conceal\nsomething eventually, even though they don’t in the beginning—and one day I\nfound what it was. When we were on a house-party together up in Warwick, she\nleft a borrowed car out in the rain with the top down, and then lied about\nit—and suddenly I remembered the story about her that had eluded me that night\nat Daisy’s. At her first big golf tournament there was a row that nearly reached\nthe newspapers—a suggestion that she had moved her ball from a bad lie in the\nsemi-final round. The thing approached the proportions of a scandal—then died\naway. A caddy retracted his statement, and the only other witness admitted that\nhe might have been mistaken. The incident and the name had remained together in\nmy mind.\n\nJordan Baker instinctively avoided clever, shrewd men, and now I saw that this\nwas because she felt safer on a plane where any divergence from a code would be\nthought impossible. She was incurably dishonest. She wasn’t able to endure being\nat a disadvantage and, given this unwillingness, I suppose she had begun dealing\nin subterfuges when she was very young in order to keep that cool, insolent\nsmile turned to the world and yet satisfy the demands of her hard, jaunty body.\n\nIt made no difference to me. Dishonesty in a woman is a thing you never blame\ndeeply—I was casually sorry, and then I forgot. It was on that same house party\nthat we had a curious conversation about driving a car. It started because she\npassed so close to some workmen that our fender flicked a button on one man’s\ncoat.\n\n“You’re a rotten driver,” I protested. “Either you ought to be more careful, or\nyou oughtn’t to drive at all.”\n\n“I am careful.”\n\n“No, you’re not.”\n\n“Well, other people are,” she said lightly.\n\n“What’s that got to do with it?”\n\n“They’ll keep out of my way,” she insisted. “It takes two to make an accident.”\n\n“Suppose you met somebody just as careless as yourself.”\n\n“I hope I never will,” she answered. “I hate careless people. That’s why I like\nyou.”\n\nHer gray, sun-strained eyes stared straight ahead, but she had deliberately\nshifted our relations, and for a moment I thought I loved her. But I am\nslow-thinking and full of interior rules that act as brakes on my desires, and I\nknew that first I had to get myself definitely out of that tangle back home. I'd\nbeen writing letters once a week and signing them: “Love, Nick,” and all I could\nthink of was how, when that certain girl played tennis, a faint mustache of\nperspiration appeared on her upper lip. Nevertheless there was a vague\nunderstanding that had to be tactfully broken off before I was free.\n\nEvery one suspects himself of at least one of the cardinal virtues, and this is\nmine: I am one of the few honest people that I have ever known.\n\n## CHAPTER IV\n\nOn Sunday morning while church bells rang in the villages alongshore, the world\nand its mistress returned to Gatsby’s house and twinkled hilariously on his\nlawn.\n\n“He’s a bootlegger,” said the young ladies, moving somewhere between his\ncocktails and his flowers. “One time he killed a man who had found out that he\nwas nephew to Von Hindenburg and second cousin to the devil. Reach me a rose,\nhoney, and pour me a last drop into that there crystal glass.”\n\nOnce I wrote down on the empty spaces of a timetable the names of those who came\nto Gatsby’s house that summer. It is an old time-table now, disintegrating at\nits folds, and headed “This schedule in effect July 5th, 1922.” But I can still\nread the gray names, and they will give you a better impression than my\ngeneralities of those who accepted Gatsby’s hospitality and paid him the subtle\ntribute of knowing nothing whatever about him.\n\nFrom East Egg, then, came the Chester Beckers and the Leeches, and a man named\nBunsen, whom I knew at Yale, and Doctor Webster Civet, who was drowned last\nsummer up in Maine. And the Hornbeams and the Willie Voltaires, and a whole clan\nnamed Blackbuck, who always gathered in a corner and flipped up their noses like\ngoats at whosoever came near. And the Ismays and the Chrysties (or rather Hubert\nAuerbach and Mr. Chrystie’s wife), and Edgar Beaver, whose hair, they say,\nturned cotton-white one winter afternoon for no good reason at all.\n\nClarence Endive was from East Egg, as I remember. He came only once, in white\nknickerbockers, and had a fight with a bum named Etty in the garden. From\nfarther out on the Island came the Cheadles and the O. R. P. Schraeders, and the\nStonewall Jackson Abrams of Georgia, and the Fishguards and the Ripley Snells.\nSnell was there three days before he went to the penitentiary, so drunk out on\nthe gravel drive that Mrs. Ulysses Swett’s automobile ran over his right hand.\nThe Dancies came, too, and S. B. Whitebait, who was well over sixty, and Maurice\nA. Flink, and the Hammerheads, and Beluga the tobacco importer, and Beluga’s\ngirls.\n\nFrom West Egg came the Poles and the Mulreadys and Cecil Roebuck and Cecil\nSchoen and Gulick the State senator and Newton Orchid, who controlled Films Par\nExcellence, and Eckhaust and Clyde Cohen and Don S. Schwartze (the son) and\nArthur McCarty, all connected with the movies in one way or another. And the\nCatlips and the Bembergs and G. Earl Muldoon, brother to that Muldoon who\nafterward strangled his wife. Da Fontano the promoter came there, and Ed Legros\nand James B. (“Rot-Gut”) Ferret and the De Jongs and Ernest Lilly—they came to\ngamble, and when Ferret wandered into the garden it meant he was cleaned out and\nAssociated Traction would have to fluctuate profitably next day.\n\nA man named Klipspringer was there so often and so long that he became known as\n“the boarder”—I doubt if he had any other home. Of theatrical people there were\nGus Waize and Horace O’Donavan and Lester Myer and George Duckweed and Francis\nBull. Also from New York were the Chromes and the Backhyssons and the Dennickers\nand Russel Betty and the Corrigans and the Kellehers and the Dewars and the\nScullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\nand Henry L. Palmetto, who killed himself by jumping in front of a subway train\nin Times Square.\n\nBenny McClenahan arrived always with four girls. They were never quite the same\nones in physical person, but they were so identical one with another that it\ninevitably seemed they had been there before. I have forgotten their\nnames—Jaqueline, I think, or else Consuela, or Gloria or Judy or June, and their\nlast names were either the melodious names of flowers and months or the sterner\nones of the great American capitalists whose cousins, if pressed, they would\nconfess themselves to be.\n\nIn addition to all these I can remember that Faustina O’Brien came there at\nleast once and the Baedeker girls and young Brewer, who had his nose shot off in\nthe war, and Mr. Albrucksburger and Miss Haag, his fiancée, and Ardita\nFitz-Peters and Mr. P. Jewett, once head of the American Legion, and Miss\nClaudia Hip, with a man reputed to be her chauffeur, and a prince of something,\nwhom we called Duke, and whose name, if I ever knew it, I have forgotten.\n\nAll these people came to Gatsby’s house in the summer.\n\nAt nine o’clock, one morning late in July, Gatsby’s gorgeous car lurched up the\nrocky drive to my door and gave out a burst of melody from its three-noted horn.\nIt was the first time he had called on me, though I had gone to two of his\nparties, mounted in his hydroplane, and, at his urgent invitation, made frequent\nuse of his beach.\n\n“Good morning, old sport. You’re having lunch with me to-day and I thought we’d\nride up together.”\n\nHe was balancing himself on the dashboard of his car with that resourcefulness\nof movement that is so peculiarly American—that comes, I suppose, with the\nabsence of lifting work in youth and, even more, with the formless grace of our\nnervous, sporadic games. This quality was continually breaking through his\npunctilious manner in the shape of restlessness. He was never quite still; there\nwas always a tapping foot somewhere or the impatient opening and closing of a\nhand.\n\nHe saw me looking with admiration at his car.\n\n“It’s pretty, isn’t it, old sport?” He jumped off to give me a better view.\n“Haven’t you ever seen it before?”\n\nI’d seen it. Everybody had seen it. It was a rich cream color, bright with\nnickel, swollen here and there in its monstrous length with triumphant hat-boxes\nand supper-boxes and tool-boxes, and terraced with a labyrinth of wind-shields\nthat mirrored a dozen suns. Sitting down behind many layers of glass in a sort\nof green leather conservatory, we started to town.\n\nI had talked with him perhaps half a dozen times in the past month and found, to\nmy disappointment, that he had little to say. So my first impression, that he\nwas a person of some undefined consequence, had gradually faded and he had\nbecome simply the proprietor of an elaborate road-house next door.\n\nAnd then came that disconcerting ride. We hadn’t reached West Egg Village before\nGatsby began leaving his elegant sentences unfinished and slapping himself\nindecisively on the knee of his caramel-colored suit.\n\n“Look here, old sport,” he broke out surprisingly, “what’s your opinion of me,\nanyhow?”\n\nA little overwhelmed, I began the generalized evasions which that question\ndeserves.\n\n“Well, I’m going to tell you something about my life,” he interrupted. “I don’t\nwant you to get a wrong idea of me from all these stories you hear.”\n\nSo he was aware of the bizarre accusations that flavored conversation in his\nhalls.\n\n“I’ll tell you God’s truth.” His right hand suddenly ordered divine retribution\nto stand by. “I am the son of some wealthy people in the Middle West—all dead\nnow. I was brought up in America but educated at Oxford, because all my\nancestors have been educated there for many years. It is a family tradition.”\n\nHe looked at me sideways—and I knew why Jordan Baker had believed he was lying.\nHe hurried the phrase “educated at Oxford,” or swallowed it, or choked on it, as\nthough it had bothered him before. And with this doubt, his whole statement fell\nto pieces, and I wondered if there wasn’t something a little sinister about him,\nafter all.\n\n“What part of the Middle West?” I inquired casually.\n\n“San Francisco.”\n\n“I see.”\n\n“My family all died and I came into a good deal of money.”\n\nHis voice was solemn, as if the memory of that sudden extinction of a clan still\nhaunted him. For a moment I suspected that he was pulling my leg, but a glance\nat him convinced me otherwise.\n\n“After that I lived like a young rajah in all the capitals of Europe—Paris,\nVenice, Rome—collecting jewels, chiefly rubies, hunting big game, painting a\nlittle, things for myself only, and trying to forget something very sad that had\nhappened to me long ago.”\n\nWith an effort I managed to restrain my incredulous laughter. The very phrases\nwere worn so threadbare that they evoked no image except that of a turbaned\n“character” leaking sawdust at every pore as he pursued a tiger through the Bois\nde Boulogne.\n\n“Then came the war, old sport. It was a great relief, and I tried very hard to\ndie, but I seemed to bear an enchanted life. I accepted a commission as first\nlieutenant when it began. In the Argonne Forest I took the remains of my\nmachine-gun battalion so far forward that there was a half mile gap on either\nside of us where the infantry couldn’t advance. We stayed there two days and two\nnights, a hundred and thirty men with sixteen Lewis guns, and when the infantry\ncame up at last they found the insignia of three German divisions among the\npiles of dead. I was promoted to be a major, and every Allied government gave me\na decoration—even Montenegro, little Montenegro down on the Adriatic Sea!”\n\nLittle Montenegro! He lifted up the words and nodded at them—with his smile. The\nsmile comprehended Montenegro’s troubled history and sympathized with the brave\nstruggles of the Montenegrin people. It appreciated fully the chain of national\ncircumstances which had elicited this tribute from Montenegro’s warm little\nheart. My incredulity was submerged in fascination now; it was like skimming\nhastily through a dozen magazines.\n\nHe reached in his pocket, and a piece of metal, slung on a ribbon, fell into my\npalm.\n\n“That’s the one from Montenegro.”\n\nTo my astonishment, the thing had an authentic look. “Orderi di Danilo,” ran the\ncircular legend, “Montenegro, Nicolas Rex.”\n\n“Turn it.”\n\n“Major Jay Gatsby,” I read, “For Valour Extraordinary.”\n\n“Here’s another thing I always carry. A souvenir of Oxford days. It was taken in\nTrinity Quad—the man on my left is now the Earl of Doncaster.”\n\nIt was a photograph of half a dozen young men in blazers loafing in an archway\nthrough which were visible a host of spires. There was Gatsby, looking a little,\nnot much, younger—with a cricket bat in his hand.\n\nThen it was all true. I saw the skins of tigers flaming in his palace on the\nGrand Canal; I saw him opening a chest of rubies to ease, with their\ncrimson-lighted depths, the gnawings of his broken heart.\n\n“I’m going to make a big request of you to-day,” he said, pocketing his\nsouvenirs with satisfaction, “so I thought you ought to know something about me.\nI didn’t want you to think I was just some nobody. You see, I usually find\nmyself among strangers because I drift here and there trying to forget the sad\nthing that happened to me.” He hesitated. “You’ll hear about it this afternoon.”\n\n“At lunch?”\n\n“No, this afternoon. I happened to find out that you’re taking Miss Baker to\ntea.”\n\n“Do you mean you’re in love with Miss Baker?”\n\n“No, old sport, I’m not. But Miss Baker has kindly consented to speak to you\nabout this matter.”\n\nI hadn’t the faintest idea what “this matter” was, but I was more annoyed than\ninterested. I hadn’t asked Jordan to tea in order to discuss Mr. Jay Gatsby. I\nwas sure the request would be something utterly fantastic, and for a moment I\nwas sorry I’d ever set foot upon his overpopulated lawn.\n\nHe wouldn’t say another word. His correctness grew on him as we neared the city.\nWe passed Port Roosevelt, where there was a glimpse of red-belted ocean-going\nships, and sped along a cobbled slum lined with the dark, undeserted saloons of\nthe faded-gilt nineteen-hundreds. Then the valley of ashes opened out on both\nsides of us, and I had a glimpse of Mrs. Wilson straining at the garage pump\nwith panting vitality as we went by.\n\nWith fenders spread like wings we scattered light through half Astoria—only\nhalf, for as we twisted among the pillars of the elevated I heard the familiar\n“jug-jug-spat!” of a motorcycle, and a frantic policeman rode alongside.\n\n“All right, old sport,” called Gatsby. We slowed down. Taking a white card from\nhis wallet, he waved it before the man’s eyes.\n\n“Right you are,” agreed the policeman, tipping his cap. “Know you next time, Mr.\nGatsby. Excuse me!”\n\n“What was that?” I inquired. “The picture of Oxford?”\n\n“I was able to do the commissioner a favor once, and he sends me a Christmas\ncard every year.”\n\nOver the great bridge, with the sunlight through the girders making a constant\nflicker upon the moving cars, with the city rising up across the river in white\nheaps and sugar lumps all built with a wish out of non-olfactory money. The city\nseen from the Queensboro Bridge is always the city seen for the first time, in\nits first wild promise of all the mystery and the beauty in the world.\n\nA dead man passed us in a hearse heaped with blooms, followed by two carriages\nwith drawn blinds, and by more cheerful carriages for friends. The friends\nlooked out at us with the tragic eyes and short upper lips of southeastern\nEurope, and I was glad that the sight of Gatsby’s splendid car was included in\ntheir sombre holiday. As we crossed Blackwell’s Island a limousine passed us,\ndriven by a white chauffeur, in which sat three modish negroes, two bucks and a\ngirl. I laughed aloud as the yolks of their eyeballs rolled toward us in haughty\nrivalry.\n\n“Anything can happen now that we’ve slid over this bridge,” I thought; “anything\nat all. . . .”\n\nEven Gatsby could happen, without any particular wonder.\n\nRoaring noon. In a well-fanned Forty-second Street cellar I met Gatsby for\nlunch. Blinking away the brightness of the street outside, my eyes picked him\nout obscurely in the anteroom, talking to another man.\n\n“Mr. Carraway, this is my friend Mr. Wolfshiem.”\n\nA small, flat-nosed Jew raised his large head and regarded me with two fine\ngrowths of hair which luxuriated in either nostril. After a moment I discovered\nhis tiny eyes in the half-darkness.\n\n“So I took one look at him,” said Mr. Wolfshiem, shaking my hand earnestly, “and\nwhat do you think I did?”\n\n“What?” I inquired politely.\n\nBut evidently he was not addressing me, for he dropped my hand and covered\nGatsby with his expressive nose.\n\n“I handed the money to Katspaugh and I sid: ‘All right, Katspaugh, don’t pay him\na penny till he shuts his mouth.’ He shut it then and there.”\n\nGatsby took an arm of each of us and moved forward into the restaurant,\nwhereupon Mr. Wolfshiem swallowed a new sentence he was starting and lapsed into\na somnambulatory abstraction.\n\n“Highballs?” asked the head waiter.\n\n“This is a nice restaurant here,” said Mr. Wolfshiem, looking at the\nPresbyterian nymphs on the ceiling. “But I like across the street better!”\n\n“Yes, highballs,” agreed Gatsby, and then to Mr. Wolfshiem: “It’s too hot over\nthere.”\n\n“Hot and small—yes,” said Mr. Wolfshiem, “but full of memories.”\n\n“What place is that?” I asked.\n\n“The old Metropole.”\n\n“The old Metropole,” brooded Mr. Wolfshiem gloomily. “Filled with faces dead and\ngone. Filled with friends gone now forever. I can’t forget so long as I live the\nnight they shot Rosy Rosenthal there. It was six of us at the table, and Rosy\nhad eat and drunk a lot all evening. When it was almost morning the waiter came\nup to him with a funny look and says somebody wants to speak to him outside.\n‘All right,’ says Rosy, and begins to get up, and I pulled him down in his\nchair.\n\n“‘Let the bastards come in here if they want you, Rosy, but don’t you, so help\nme, move outside this room.’\n\n“It was four o’clock in the morning then, and if we’d of raised the blinds we’d\nof seen daylight.”\n\n“Did he go?” I asked innocently.\n\n“Sure he went.” Mr. Wolfshiem’s nose flashed at me indignantly. “He turned\naround in the door and says: ‘Don’t let that waiter take away my coffee!’ Then\nhe went out on the sidewalk, and they shot him three times in his full belly and\ndrove away.”\n\n“Four of them were electrocuted,” I said, remembering.\n\n“Five, with Becker.” His nostrils turned to me in an interested way. “I\nunderstand you’re looking for a business gonnegtion.”\n\nThe juxtaposition of these two remarks was startling. Gatsby answered for me:\n\n“Oh, no,” he exclaimed, ‘‘this isn’t the man.”\n\n“No?” Mr. Wolfshiem seemed disappointed.\n\n“This is just a friend. I told you we’d talk about that some other time.”\n\n“I beg your pardon,” said Mr. Wolfshiem, “I had a wrong man.”\n\nA succulent hash arrived, and Mr. Wolfshiem, forgetting the more sentimental\natmosphere of the old Metropole, began to eat with ferocious delicacy. His eyes,\nmeanwhile, roved very slowly all around the room—he completed the arc by turning\nto inspect the people directly behind. I think that, except for my presence, he\nwould have taken one short glance beneath our own table.\n\n“Look here, old sport,” said Gatsby, leaning toward me, “I’m afraid I made you a\nlittle angry this morning in the car.”\n\nThere was the smile again, but this time I held out against it.\n\n“I don’t like mysteries,” I answered, “and I don’t understand why you won’t come\nout frankly and tell me what you want. Why has it all got to come through Miss\nBaker?”\n\n“Oh, it’s nothing underhand,” he assured me. “Miss Baker’s a great sportswoman,\nyou know, and she’d never do anything that wasn’t all right.”\n\nSuddenly he looked at his watch, jumped up, and hurried from the room, leaving\nme with Mr. Wolfshiem at the table.\n\n“He has to telephone,” said Mr. Wolfshiem, following him with his eyes. “Fine\nfellow, isn’t he? Handsome to look at and a perfect gentleman.”\n\n“Yes.”\n\n“He’s an Oggsford man.”\n\n“Oh!”\n\n“He went to Oggsford College in England. You know Oggsford College?”\n\n“I’ve heard of it.”\n\n“It’s one of the most famous colleges in the world.”\n\n“Have you known Gatsby for a long time?” I inquired.\n\n“Several years,” he answered in a gratified way.\n\n“I made the pleasure of his acquaintance just after the war. But I knew I had\ndiscovered a man of fine breeding after I talked with him an hour. I said to\nmyself: ‘There’s the kind of man you’d like to take home and introduce to your\nmother and sister.’” He paused. “I see you’re looking at my cuff buttons.”\n\nI hadn’t been looking at them, but I did now. They were composed of oddly\nfamiliar pieces of ivory.\n\n“Finest specimens of human molars,” he informed me.\n\n“Well!” I inspected them. “That’s a very interesting idea.”\n\n“Yeah.” He flipped his sleeves up under his coat. “Yeah, Gatsby’s very careful\nabout women. He would never so much as look at a friend’s wife.”\n\nWhen the subject of this instinctive trust returned to the table and sat down\nMr. Wolfshiem drank his coffee with a jerk and got to his feet.\n\n“I have enjoyed my lunch,” he said, “and I’m going to run off from you two young\nmen before I outstay my welcome.”\n\n“Don’t hurry, Meyer,” said Gatsby, without enthusiasm. Mr. Wolfshiem raised his\nhand in a sort of benediction.\n\n“You’re very polite, but I belong to another generation,” he announced solemnly.\n“You sit here and discuss your sports and your young ladies and your—” He\nsupplied an imaginary noun with another wave of his hand. “As for me, I am fifty\nyears old, and I won’t impose myself on you any longer.”\n\nAs he shook hands and turned away his tragic nose was trembling. I wondered if I\nhad said anything to offend him.\n\n“He becomes very sentimental sometimes,” explained Gatsby. “This is one of his\nsentimental days. He’s quite a character around New York—a denizen of Broadway.”\n\n“Who is he, anyhow, an actor?”\n\n“No.”\n\n“A dentist?”\n\n“Meyer Wolfshiem? No, he’s a gambler.” Gatsby hesitated, then added coolly:\n“He’s the man who fixed the World’s Series back in 1919.”\n\n“Fixed the World’s Series?” I repeated.\n\nThe idea staggered me. I remembered, of course, that the World’s Series had been\nfixed in 1919, but if I had thought of it at all I would have thought of it as a\nthing that merely happened, the end of some inevitable chain. It never occurred\nto me that one man could start to play with the faith of fifty million\npeople—with the single-mindedness of a burglar blowing a safe.\n\n“How did he happen to do that?” I asked after a minute.\n\n“He just saw the opportunity.”\n\n“Why isn’t he in jail?”\n\n“They can’t get him, old sport. He’s a smart man.”\n\nI insisted on paying the check. As the waiter brought my change I caught sight\nof Tom Buchanan across the crowded room.\n\n“Come along with me for a minute,” I said; “I’ve got to say hello to some one.”\n\nWhen he saw us Tom jumped up and took half a dozen steps in our direction.\n\n“Where’ve you been?” he demanded eagerly. “Daisy’s furious because you haven’t\ncalled up.”\n\n“This is Mr. Gatsby, Mr. Buchanan.”\n\nThey shook hands briefly, and a strained, unfamiliar look of embarrassment came\nover Gatsby’s face.\n\n“How’ve you been, anyhow?” demanded Tom of me. “How’d you happen to come up this\nfar to eat?”\n\n“I’ve been having lunch with Mr. Gatsby.”\n\nI turned toward Mr. Gatsby, but he was no longer there.\n\nOne October day in nineteen-seventeen—\n\n(said Jordan Baker that afternoon, sitting up very straight on a straight chair\nin the tea-garden at the Plaza Hotel)\n\n—I was walking along from one place to another, half on the sidewalks and half\non the lawns. I was happier on the lawns because I had on shoes from England\nwith rubber nobs on the soles that bit into the soft ground. I had on a new\nplaid skirt also that blew a little in the wind, and whenever this happened the\nred, white, and blue banners in front of all the houses stretched out stiff and\nsaid tut-tut-tut-tut, in a disapproving way.\n\nThe largest of the banners and the largest of the lawns belonged to Daisy Fay’s\nhouse. She was just eighteen, two years older than me, and by far the most\npopular of all the young girls in Louisville. She dressed in white, and had a\nlittle white roadster, and all day long the telephone rang in her house and\nexcited young officers from Camp Taylor demanded the privilege of monopolizing\nher that night. “Anyways, for an hour!”\n\nWhen I came opposite her house that morning her white roadster was beside the\ncurb, and she was sitting in it with a lieutenant I had never seen before. They\nwere so engrossed in each other that she didn’t see me until I was five feet\naway.\n\n“Hello, Jordan,” she called unexpectedly. “Please come here.”\n\nI was flattered that she wanted to speak to me, because of all the older girls I\nadmired her most. She asked me if I was going to the Red Cross and make\nbandages. I was. Well, then, would I tell them that she couldn’t come that day?\nThe officer looked at Daisy while she was speaking, in a way that every young\ngirl wants to be looked at sometime, and because it seemed romantic to me I have\nremembered the incident ever since. His name was Jay Gatsby, and I didn’t lay\neyes on him again for over four years—even after I'd met him on Long Island I\ndidn’t realize it was the same man.\n\nThat was nineteen-seventeen. By the next year I had a few beaux myself, and I\nbegan to play in tournaments, so I didn’t see Daisy very often. She went with a\nslightly older crowd—when she went with anyone at all. Wild rumors were\ncirculating about her—how her mother had found her packing her bag one winter\nnight to go to New York and say good-by to a soldier who was going overseas. She\nwas effectually prevented, but she wasn’t on speaking terms with her family for\nseveral weeks. After that she didn’t play around with the soldiers any more, but\nonly with a few flat-footed, shortsighted young men in town, who couldn’t get\ninto the army at all.\n\nBy the next autumn she was gay again, gay as ever. She had a début after the\narmistice, and in February she was presumably engaged to a man from New Orleans.\nIn June she married Tom Buchanan of Chicago, with more pomp and circumstance\nthan Louisville ever knew before. He came down with a hundred people in four\nprivate cars, and hired a whole floor of the Muhlbach Hotel, and the day before\nthe wedding he gave her a string of pearls valued at three hundred and fifty\nthousand dollars.\n\nI was a bridesmaid. I came into her room half an hour before the bridal dinner,\nand found her lying on her bed as lovely as the June night in her flowered\ndress—and as drunk as a monkey. She had a bottle of Sauterne in one hand and a\nletter in the other.\n\n“’Gratulate me,” she muttered. “Never had a drink before, but oh how I do enjoy\nit.”\n\n“What’s the matter, Daisy?”\n\nI was scared, I can tell you; I’d never seen a girl like that before.\n\n“Here, deares’.” She groped around in a wastebasket she had with her on the bed\nand pulled out the string of pearls. ‘Take ’em down-stairs and give ’em back to\nwhoever they belong to. Tell ’em all Daisy’s change’ her mine. Say: ‘Daisy’s\nchange’ her mine!’”\n\nShe began to cry—she cried and cried. I rushed out and found her mother’s maid,\nand we locked the door and got her into a cold bath. She wouldn’t let go of the\nletter. She took it into the tub with her and squeezed it up into a wet ball,\nand only let me leave it in the soap-dish when she saw that it was coming to\npieces like snow.\n\nBut she didn’t say another word. We gave her spirits of ammonia and put ice on\nher forehead and hooked her back into her dress, and half an hour later, when we\nwalked out of the room, the pearls were around her neck and the incident was\nover. Next day at five o’clock she married Tom Buchanan without so much as a\nshiver, and started off on a three months’ trip to the South Seas.\n\nI saw them in Santa Barbara when they came back, and I thought I’d never seen a\ngirl so mad about her husband. If he left the room for a minute she’d look\naround uneasily, and say: ‘‘Where’s Tom gone?” and wear the most abstracted\nexpression until she saw him coming in the door. She used to sit on the sand\nwith his head in her lap by the hour, rubbing her fingers over his eyes and\nlooking at him with unfathomable delight. It was touching to see them\ntogether—it made you laugh in a hushed, fascinated way. That was in August. A\nweek after I left Santa Barbara Tom ran into a wagon on the Ventura road one\nnight, and ripped a front wheel off his car. The girl who was with him got into\nthe papers, too, because her arm was broken—she was one of the chambermaids in\nthe Santa Barbara Hotel.\n\nThe next April Daisy had her little girl, and they went to France for a year. I\nsaw them one spring in Cannes, and later in Deauville, and then they came back\nto Chicago to settle down. Daisy was popular in Chicago, as you know. They moved\nwith a fast crowd, all of them young and rich and wild, but she came out with an\nabsolutely perfect reputation. Perhaps because she doesn’t drink. It’s a great\nadvantage not to drink among hard-drinking people. You can hold your tongue,\nand, moreover, you can time any little irregularity of your own so that\neverybody else is so blind that they don’t see or care. Perhaps Daisy never went\nin for amour at all—and yet there’s something in that voice of hers. . . .\n\nWell, about six weeks ago, she heard the name Gatsby for the first time in\nyears. It was when I asked you—do you remember?—if you knew Gatsby in West Egg.\nAfter you had gone home she came into my room and woke me up, and said: “What\nGatsby?” and when I described him—I was half asleep—she said in the strangest\nvoice that it must be the man she used to know. It wasn’t until then that I\nconnected this Gatsby with the officer in her white car.\n\nWhen Jordan Baker had finished telling all this we had left the Plaza for half\nan hour and were driving in a victoria through Central Park. The sun had gone\ndown behind the tall apartments of the movie stars in the West Fifties, and the\nclear voices of children, already gathered like crickets on the grass, rose\nthrough the hot twilight:\n\n> “I’m the Sheik of Araby. Your love belongs to me. At night when you’re asleep\n> Into your tent I’ll creep—”\n\n“It was a strange coincidence,” I said.\n\n“But it wasn’t a coincidence at all.”\n\n“Why not?”\n\n“Gatsby bought that house so that Daisy would be just across the bay.”\n\nThen it had not been merely the stars to which he had aspired on that June\nnight. He came alive to me, delivered suddenly from the womb of his purposeless\nsplendor.\n\n“He wants to know,” continued Jordan, “if you'll invite Daisy to your house some\nafternoon and then let him come over.”\n\nThe modesty of the demand shook me. He had waited five years and bought a\nmansion where he dispensed starlight to casual moths—so that he could “come\nover” some afternoon to a stranger’s garden.\n\n“Did I have to know all this before he could ask such a little thing?”\n\n“He’s afraid, he’s waited so long. He thought you might be offended. You see,\nhe’s regular tough underneath it all.”\n\nSomething worried me.\n\n“Why didn’t he ask you to arrange a meeting?”\n\n“He wants her to see his house,” she explained. “And your house is right next\ndoor.”\n\n“Oh!”\n\n“I think he half expected her to wander into one of his parties, some night,”\nwent on Jordan, “but she never did. Then he began asking people casually if they\nknew her, and I was the first one he found. It was that night he sent for me at\nhis dance, and you should have heard the elaborate way he worked up to it. Of\ncourse, I immediately suggested a luncheon in New York—and I thought he’d go\nmad:\n\n“‘I don’t want to do anything out of the way!’ he kept saying. ‘I want to see\nher right next door.’\n\n“When I said you were a particular friend of Tom’s, he started to abandon the\nwhole idea. He doesn’t know very much about Tom, though he says he’s read a\nChicago paper for years just on the chance of catching a glimpse of Daisy’s\nname.”\n\nIt was dark now, and as we dipped under a little bridge I put my arm around\nJordan’s golden shoulder and drew her toward me and asked her to dinner.\nSuddenly I wasn’t thinking of Daisy and Gatsby any more, but of this clean,\nhard, limited person, who dealt in universal scepticism, and who leaned back\njauntily just within the circle of my arm. A phrase began to beat in my ears\nwith a sort of heady excitement: ‘‘There are only the pursued, the pursuing, the\nbusy and the tired.”\n\n“And Daisy ought to have something in her life,” murmured Jordan to me.\n\n“Does she want to see Gatsby?”\n\n“She’s not to know about it. Gatsby doesn’t want her to know. You’re just\nsupposed to invite her to tea.”\n\nWe passed a barrier of dark trees, and then the façade of Fifty-ninth Street, a\nblock of delicate pale light, beamed down into the park. Unlike Gatsby and Tom\nBuchanan, I had no girl whose disembodied face floated along the dark cornices\nand blinding signs, and so I drew up the girl beside me, tightening my arms. Her\nwan, scornful mouth smiled, and so I drew her up again closer, this time to my\nface.\n\n## CHAPTER V\n\nWhen I came home to West Egg that night I was afraid for a moment that my house\nwas on fire. Two o’clock and the whole corner of the peninsula was blazing with\nlight, which fell unreal on the shrubbery and made thin elongating glints upon\nthe roadside wires. Turning a corner, I saw that it was Gatsby’s house, lit from\ntower to cellar.\n\nAt first I thought it was another party, a wild rout that had resolved itself\ninto “hide-and-go-seek” or “sardines-in-the-box” with all the house thrown open\nto the game. But there wasn’t a sound. Only wind in the trees, which blew the\nwires and made the lights go off and on again as if the house had winked into\nthe darkness. As my taxi groaned away I saw Gatsby walking toward me across his\nlawn.\n\n“Your place looks like the World’s Fair,” I said.\n\n“Does it?” He turned his eyes toward it absently. “I have been glancing into\nsome of the rooms. Let’s go to Coney Island, old sport. In my car.”\n\n“It’s too late.”\n\n“Well, suppose we take a plunge in the swimming-pool? I haven’t made use of it\nall summer.”\n\n“I’ve got to go to bed.”\n\n“All right.”\n\nHe waited, looking at me with suppressed eagerness.\n\n“I talked with Miss Baker,” I said after a moment. “I’m going to call up Daisy\nto-morrow and invite her over here to tea.”\n\n“Oh, that’s all right,” he said carelessly. “I don’t want to put you to any\ntrouble.”\n\n“What day would suit you?”\n\n“What day would suit you?” he corrected me quickly. “I don’t want to put you to\nany trouble, you see.”\n\n“How about the day after to-morrow?”\n\nHe considered for a moment. Then, with reluctance:\n\n“I want to get the grass cut,” he said.\n\nWe both looked down at the grass—there was a sharp line where my ragged lawn\nended and the darker, well-kept expanse of his began. I suspected that he meant\nmy grass.\n\n“There’s another little thing,” he said uncertainly, and hesitated.\n\n“Would you rather put it off for a few days?” I asked.\n\n“Oh, it isn’t about that. At least—’’ He fumbled with a series of beginnings.\n“Why, I thought—why, look here, old sport, you don’t make much money, do you?”\n\n“Not very much.”\n\nThis seemed to reassure him and he continued more confidently.\n\n“I thought you didn’t, if you'll pardon my—you see, I carry on a little business\non the side, a sort of side line, you understand. And I thought that if you\ndon’t make very much— You’re selling bonds, aren’t you, old sport?”\n\n“Trying to.”\n\n“Well, this would interest you. It wouldn’t take up much of your time and you\nmight pick up a nice bit of money. It happens to be a rather confidential sort\nof thing.”\n\nI realize now that under different circumstances that conversation might have\nbeen one of the crises of my life. But, because the offer was obviously and\ntactlessly for a service to be rendered, I had no choice except to cut him off\nthere.\n\n“I’ve got my hands full,” I said. “I’m much obliged but I couldn’t take on any\nmore work.”\n\n“You wouldn’t have to do any business with Wolfshiem.” Evidently he thought that\nI was shying away from the “gonnegtion” mentioned at lunch, but I assured him he\nwas wrong. He waited a moment longer, hoping I’d begin a conversation, but I was\ntoo absorbed to be responsive, so he went unwillingly home.\n\nThe evening had made me light-headed and happy; I think I walked into a deep\nsleep as I entered my front door. So I don’t know whether or not Gatsby went to\nConey Island, or for how many hours he “glanced into rooms” while his house\nblazed gaudily on. I called up Daisy from the office next morning, and invited\nher to come to tea.\n\n“Don’t bring Tom,” I warned her.\n\n“What?”\n\n“Don’t bring Tom.”\n\n“Who is ‘Tom’?” she asked innocently.\n\nThe day agreed upon was pouring rain. At eleven o’clock a man in a raincoat,\ndragging a lawn-mower, tapped at my front door and said that Mr. Gatsby had sent\nhim over to cut my grass. This reminded me that I had forgotten to tell my Finn\nto come back, so I drove into West Egg Village to search for her among soggy\nwhitewashed alleys and to buy some cups and lemons and flowers.\n\nThe flowers were unnecessary, for at two o’clock a greenhouse arrived from\nGatsby’s, with innumerable receptacles to contain it. An hour later the front\ndoor opened nervously, and Gatsby, in a white flannel suit, silver shirt, and\ngold-colored tie, hurried in. He was pale, and there were dark signs of\nsleeplessness beneath his eyes.\n\n“Is everything all right?” he asked immediately.\n\n“The grass looks fine, if that’s what you mean.”\n\n“What grass?” he inquired blankly. “Oh, the grass in the yard.” He looked out\nthe window at it, but, judging from his expression, I don’t believe he saw a\nthing.\n\n“Looks very good,” he remarked vaguely. “One of the papers said they thought the\nrain would stop about four. I think it was The Journal. Have you got everything\nyou need in the shape of—of tea?”\n\nI took him into the pantry, where he looked a little reproachfully at the Finn.\nTogether we scrutinized the twelve lemon cakes from the delicatessen shop.\n\n“Will they do?” I asked.\n\n“Of course, of course! They’re fine!” and he added hollowly, “. . . old sport.”\n\nThe rain cooled about half-past three to a damp mist, through which occasional\nthin drops swam like dew. Gatsby looked with vacant eyes through a copy of\nClay’s “Economics,” starting at the Finnish tread that shook the kitchen floor,\nand peering toward the bleared windows from time to time as if a series of\ninvisible but alarming happenings were taking place outside. Finally he got up\nand informed me, in an uncertain voice, that he was going home.\n\n“Why’s that?”\n\n“Nobody’s coming to tea. It’s too late!” He looked at his watch as if there was\nsome pressing demand on his time elsewhere. “I can’t wait all day.”\n\n“Don’t be silly; it’s just two minutes to four.”\n\nHe sat down miserably, as if I had pushed him, and simultaneously there was the\nsound of a motor turning into my lane. We both jumped up, and, a little harrowed\nmyself, I went out into the yard.\n\nUnder the dripping bare lilac-trees a large open car was coming up the drive. It\nstopped. Daisy’s face, tipped sideways beneath a three-cornered lavender hat,\nlooked out at me with a bright ecstatic smile.\n\n“Is this absolutely where you live, my dearest one?”\n\nThe exhilarating ripple of her voice was a wild tonic in the rain. I had to\nfollow the sound of it for a moment, up and down, with my ear alone, before any\nwords came through. A damp streak of hair lay like a dash of blue paint across\nher cheek, and her hand was wet with glistening drops as I took it to help her\nfrom the car.\n\n“Are you in love with me,” she said low in my ear, “or why did I have to come\nalone?”\n\n“That’s the secret of Castle Rackrent. Tell your chauffeur to go far away and\nspend an hour.”\n\n“Come back in an hour, Ferdie.” Then in a grave murmur: “His name is Ferdie.”\n\n“Does the gasoline affect his nose?”\n\n“I don’t think so,” she said innocently. “Why?”\n\nWe went in. To my overwhelming surprise the living-room was deserted.\n\n“Well, that’s funny,” I exclaimed.\n\n“What’s funny?”\n\nShe turned her head as there was a light dignified knocking at the front door. I\nwent out and opened it. Gatsby, pale as death, with his hands plunged like\nweights in his coat pockets, was standing in a puddle of water glaring\ntragically into my eyes.\n\nWith his hands still in his coat pockets he stalked by me into the hall, turned\nsharply as if he were on a wire, and disappeared into the living-room. It wasn’t\na bit funny. Aware of the loud beating of my own heart I pulled the door to\nagainst the increasing rain.\n\nFor half a minute there wasn’t a sound. Then from the living-room I heard a sort\nof choking murmur and part of a laugh, followed by Daisy’s voice on a clear\nartificial note:\n\n“I certainly am awfully glad to see you again.”\n\nA pause; it endured horribly. I had nothing to do in the hall, so I went into\nthe room.\n\nGatsby, his hands still in his pockets, was reclining against the mantelpiece in\na strained counterfeit of perfect ease, even of boredom. His head leaned back so\nfar that it rested against the face of a defunct mantelpiece clock, and from\nthis position his distraught eyes stared down at Daisy, who was sitting,\nfrightened but graceful, on the edge of a stiff chair.\n\n“We've met before,” muttered Gatsby. His eyes glanced momentarily at me, and his\nlips parted with an abortive attempt at a laugh. Luckily the clock took this\nmoment to tilt dangerously at the pressure of his head, whereupon he turned and\ncaught it with trembling fingers, and set it back in place. Then he sat down,\nrigidly, his elbow on the arm of the sofa and his chin in his hand.\n\n“I’m sorry about the clock,” he said.\n\nMy own face had now assumed a deep tropical burn. I couldn’t muster up a single\ncommonplace out of the thousand in my head.\n\n“It’s an old clock,” I told them idiotically.\n\nI think we all believed for a moment that it had smashed in pieces on the floor.\n\n“We haven’t met for many years,” said Daisy, her voice as matter-of-fact as it\ncould ever be.\n\n“Five years next November.”\n\nThe automatic quality of Gatsby’s answer set us all back at least another\nminute. I had them both on their feet with the desperate suggestion that they\nhelp me make tea in the kitchen when the demoniac Finn brought it in on a tray.\n\nAmid the welcome confusion of cups and cakes a certain physical decency\nestablished itself. Gatsby got himself into a shadow and, while Daisy and I\ntalked, looked conscientiously from one to the other of us with tense, unhappy\neyes. However, as calmness wasn’t an end in itself, I made an excuse at the\nfirst possible moment, and got to my feet.\n\n“Where are you going?” demanded Gatsby in immediate alarm.\n\n“I’ll be back.”\n\n“I’ve got to speak to you about something before you go.”\n\nHe followed me wildly into the kitchen, closed the door, and whispered: “Oh,\nGod!” in a miserable way.\n\n“What’s the matter?”\n\n“This is a terrible mistake,” he said, shaking his head from side to side, ‘‘a\nterrible, terrible mistake.”\n\n“You’re just embarrassed, that’s all,” and luckily I added: “Daisy’s embarrassed\ntoo.”\n\n“She’s embarrassed?” he repeated incredulously.\n\n“Just as much as you are.”\n\n“Don’t talk so loud.”\n\n“You're acting like a little boy,” I broke out impatiently. “Not only that, but\nyou’re rude. Daisy’s sitting in there all alone.”\n\nHe raised his hand to stop my words, looked at me with unforgettable reproach,\nand, opening the door cautiously, went back into the other room.\n\nI walked out the back way—just as Gatsby had when he had made his nervous\ncircuit of the house half an hour before—and ran for a huge black knotted tree,\nwhose massed leaves made a fabric against the rain. Once more it was pouring,\nand my irregular lawn, well-shaved by Gatsby’s gardener, abounded in small muddy\nswamps and prehistoric marshes. There was nothing to look at from under the tree\nexcept Gatsby’s enormous house, so I stared at it, like Kant at his church\nsteeple, for half an hour. A brewer had built it early in the “period” craze, a\ndecade before, and there was a story that he’d agreed to pay five years’ taxes\non all the neighboring cottages if the owners would have their roofs thatched\nwith straw. Perhaps their refusal took the heart out of his plan to Found a\nFamily—he went into an immediate decline. His children sold his house with the\nblack wreath still on the door. Americans, while willing, even eager, to be\nserfs, have always been obstinate about being peasantry.\n\nAfter half an hour, the sun shone again, and the grocer’s automobile rounded\nGatsby’s drive with the raw material for his servants’ dinner—I felt sure he\nwouldn’t eat a spoonful. A maid began opening the upper windows of his house,\nappeared momentarily in each, and, leaning from the large central bay, spat\nmeditatively into the garden. It was time I went back. While the rain continued\nit had seemed like the murmur of their voices, rising and swelling a little now\nand then with gusts of emotion. But in the new silence I felt that silence had\nfallen within the house too.\n\nI went in—after making every possible noise in the kitchen, short of pushing\nover the stove—but I don’t believe they heard a sound. They were sitting at\neither end of the couch, looking at each other as if some question had been\nasked, or was in the air, and every vestige of embarrassment was gone. Daisy’s\nface was smeared with tears, and when I came in she jumped up and began wiping\nat it with her handkerchief before a mirror. But there was a change in Gatsby\nthat was simply confounding. He literally glowed; without a word or a gesture of\nexultation a new well-being radiated from him and filled the little room.\n\n“Oh, hello, old sport,” he said, as if he hadn’t seen me for years. I thought\nfor a moment he was going to shake hands.\n\n“It’s stopped raining.”\n\n“Has it?” When he realized what I was talking about, that there were\ntwinkle-bells of sunshine in the room, he smiled like a weather man, like an\necstatic patron of recurrent light, and repeated the news to Daisy. “What do you\nthink of that? It’s stopped raining.”\n\n“I’m glad, Jay.” Her throat, full of aching, grieving beauty, told only of her\nunexpected joy.\n\n“I want you and Daisy to come over to my house,”’ he said, “‘I’d like to show\nher around.”\n\n“You’re sure you want me to come?”\n\n“Absolutely, old sport.”\n\nDaisy went up-stairs to wash her face—too late I thought with humiliation of my\ntowels—while Gatsby and I waited on the lawn.\n\n“My house looks well, doesn’t it?” he demanded. “See how the whole front of it\ncatches the light.”\n\nI agreed that it was splendid.\n\n“Yes.” His eyes went over it, every arched door and square tower. “It took me\njust three years to earn the money that bought it.”\n\n“I thought you inherited your money.”\n\n“I did, old sport,” he said automatically, “but I lost most of it in the big\npanic—the panic of the war.”\n\nI think he hardly knew what he was saying, for when I asked him what business he\nwas in he answered: ‘‘That’s my affair,” before he realized that it wasn’t an\nappropriate reply.\n\n“Oh, I’ve been in several things,” he corrected himself. “I was in the drug\nbusiness and then I was in the oil business. But I’m not in either one now.” He\nlooked at me with more attention. “Do you mean you’ve been thinking over what I\nproposed the other night?”\n\nBefore I could answer, Daisy came out of the house and two rows of brass buttons\non her dress gleamed in the sunlight.\n\n“That huge place there?” she cried pointing.\n\n“Do you like it?”\n\n“I love it, but I don’t see how you live there all alone.”\n\n“I keep it always full of interesting people, night and day. People who do\ninteresting things. Celebrated people.”\n\nInstead of taking the short cut along the Sound we went down to the road and\nentered by the big postern. With enchanting murmurs Daisy admired this aspect or\nthat of the feudal silhouette against the sky, admired the gardens, the\nsparkling odor of jonquils and the frothy odor of hawthorn and plum blossoms and\nthe pale gold odor of kiss-me-at-the-gate. It was strange to reach the marble\nsteps and find no stir of bright dresses in and out the door, and hear no sound\nbut bird voices in the trees.\n\nAnd inside, as we wandered through Marie Antoinette music-rooms and Restoration\nSalons, I felt that there were guests concealed behind every couch and table,\nunder orders to be breathlessly silent until we had passed through. As Gatsby\nclosed the door of ‘‘the Merton College Library” I could have sworn I heard the\nowl-eyed man break into ghostly laughter.\n\nWe went up-stairs, through period bedrooms swathed in rose and lavender silk and\nvivid with new flowers, through dressing-rooms and poolrooms, and bathrooms with\nsunken baths—intruding into one chamber where a dishevelled man in pajamas was\ndoing liver exercises on the floor. It was Mr. Klipspringer, the ‘‘boarder.” I\nhad seen him wandering hungrily about the beach that morning. Finally we came to\nGatsby’s own apartment, a bedroom and a bath, and an Adam’s study, where we sat\ndown and drank a glass of some Chartreuse he took from a cupboard in the wall.\n\nHe hadn’t once ceased looking at Daisy, and I think he revalued everything in\nhis house according to the measure of response it drew from her well-loved eyes.\nSometimes, too, he stared around at his possessions in a dazed way, as though in\nher actual and astounding presence none of it was any longer real. Once he\nnearly toppled down a flight of stairs.\n\nHis bedroom was the simplest room of all—except where the dresser was garnished\nwith a toilet set of pure dull gold. Daisy took the brush with delight, and\nsmoothed her hair, whereupon Gatsby sat down and shaded his eyes and began to\nlaugh.\n\n“It’s the funniest thing, old sport,” he said hilariously. “I can’t— When I try\nto—”\n\nHe had passed visibly through two states and was entering upon a third. After\nhis embarrassment and his unreasoning joy he was consumed with wonder at her\npresence. He had been full of the idea so long, dreamed it right through to the\nend, waited with his teeth set, so to speak, at an inconceivable pitch of\nintensity. Now, in the reaction, he was running down like an overwound clock.\n\nRecovering himself in a minute he opened for us two hulking patent cabinets\nwhich held his massed suits and dressing-gowns and ties, and his shirts, piled\nlike bricks in stacks a dozen high.\n\n“I’ve got a man in England who buys me clothes. He sends over a selection of\nthings at the beginning of each season, spring and fall.”\n\nHe took out a pile of shirts and began throwing them, one by one, before us,\nshirts of sheer linen and thick silk and fine flannel, which lost their folds as\nthey fell and covered the table in many colored disarray. While we admired he\nbrought more and the soft rich heap mounted higher—shirts with stripes and\nscrolls and plaids in coral and applegreen and lavender and faint orange, with\nmonograms of Indian blue. Suddenly, with a strained sound, Daisy bent her head\ninto the shirts and began to cry stormily.\n\n“They’re such beautiful shirts,” she sobbed, her voice muffled in the thick\nfolds. “It makes me sad because I’ve never seen such—such beautiful shirts\nbefore.”\n\nAfter the house, we were to see the grounds and the swimming-pool, and the\nhydroplane and the midsummer flowers—but outside Gatsby’s window it began to\nrain again, so we stood in a row looking at the corrugated surface of the Sound.\n\n“If it wasn’t for the mist we could see your home across the bay,” said Gatsby.\n“You always have a green light that burns all night at the end of your dock.”\n\nDaisy put her arm through his abruptly, but he seemed absorbed in what he had\njust said. Possibly it had occurred to him that the colossal significance of\nthat light had now vanished forever. Compared to the great distance that had\nseparated him from Daisy it had seemed very near to her, almost touching her. It\nhad seemed as close as a star to the moon. Now it was again a green light on a\ndock. His count of enchanted objects had diminished by one.\n\nI began to walk about the room, examining various indefinite objects in the half\ndarkness. A large photograph of an elderly man in yachting costume attracted me,\nhung on the wall over his desk.\n\n“Who’s this?”\n\n“That? That’s Mr. Dan Cody, old sport.”\n\nThe name sounded faintly familiar.\n\n“He’s dead now. He used to be my best friend years ago.”\n\nThere was a small picture of Gatsby, also in yachting costume, on the\nbureau—Gatsby with his head thrown back defiantly—taken apparently when he was\nabout eighteen.\n\n“I adore it,” exclaimed Daisy. “The pompadour! You never told me you had a\npompadour—or a yacht.”\n\n“Look at this,” said Gatsby quickly. “Here’s a lot of clippings—about you.”\n\nThey stood side by side examining it. I was going to ask to see the rubies when\nthe phone rang, and Gatsby took up the receiver.\n\n“Yes. . . . Well, I can’t talk now. . . . I can’t talk now, old sport. . . . I\nsaid a small town. . . . He must know what a small town is. . . . Well, he’s no\nuse to us if Detroit is his idea of a small town. . . .” He rang off.\n\n“Come here quick!” cried Daisy at the window.\n\nThe rain was still falling, but the darkness had parted in the west, and there\nwas a pink and golden billow of foamy clouds above the sea.\n\n“Look at that,” she whispered, and then after a moment: “I’d like to just get\none of those pink clouds and put you in it and push you around.”\n\nI tried to go then, but they wouldn’t hear of it; perhaps my presence made them\nfeel more satisfactorily alone.\n\n“I know what we'll do,” said Gatsby, “we'll have Klipspringer play the piano.”\n\nHe went out of the room calling “Ewing!” and returned in a few minutes\naccompanied by an embarrassed, slightly worn young man, with shell-rimmed\nglasses and scanty blond hair. He was now decently clothed in a “sport shirt,”\nopen at the neck, sneakers, and duck trousers of a nebulous hue.\n\n“Did we interrupt your exercises?” inquired Daisy politely.\n\n“I was asleep,” cried Mr. Klipspringer, in a spasm of embarrassment. “That is,\nI’d been asleep. Then I got up . . .”\n\n“Klipspringer plays the piano,” said Gatsby, cutting him off. “Don’t you, Ewing,\nold sport?”\n\n“I don’t play well. I don’t—I hardly play at all. I’m all out of prac———”\n\n“We’ll go down-stairs,” interrupted Gatsby. He flipped a switch. The gray\nwindows disappeared as the house glowed full of light.\n\nIn the music-room Gatsby turned on a solitary lamp beside the piano. He lit\nDaisy’s cigarette from a trembling match, and sat down with her on a couch far\nacross the room, where there was no light save what the gleaming floor bounced\nin from the hall.\n\nWhen Klipspringer had played “The Love Nest” he turned around on the bench and\nsearched unhappily for Gatsby in the gloom.\n\n“I’m all out of practice, you see. I told you I couldn’t play. I’m all out of\nprac—”\n\n“Don’t talk so much, old sport,” commanded Gatsby. “Play!”\n\n> “In the morning, In the evening, Ain’t we got fun———”\n\nOutside the wind was loud and there was a faint flow of thunder along the Sound.\nAll the lights were going on in West Egg now; the electric trains, men-carrying,\nwere plunging home through the rain from New York. It was the hour of a profound\nhuman change, and excitement was generating on the air.\n\n> “One thing’s sure and nothing’s surer The rich get richer and the poor\n> get—children. In the meantime, In between time———”\n\nAs I went over to say good-by I saw that the expression of bewilderment had come\nback into Gatsby’s face, as though a faint doubt had occurred to him as to the\nquality of his present happiness. Almost five years! There must have been\nmoments even that afternoon when Daisy tumbled short of his dreams—not through\nher own fault, but because of the colossal vitality of his illusion. It had gone\nbeyond her, beyond everything. He had thrown himself into it with a creative\npassion, adding to it all the time, decking it out with every bright feather\nthat drifted his way. No amount of fire or freshness can challenge what a man\ncan store up in his ghostly heart.\n\nAs I watched him he adjusted himself a little, visibly. His hand took hold of\nhers, and as she said something low in his ear he turned toward her with a rush\nof emotion. I think that voice held him most, with its fluctuating, feverish\nwarmth, because it couldn’t be over-dreamed—that voice was a deathless song.\n\nThey had forgotten me, but Daisy glanced up and held out her hand; Gatsby didn’t\nknow me now at all. I looked once more at them and they looked back at me,\nremotely, possessed by intense life. Then I went out of the room and down the\nmarble steps into the rain, leaving them there together.\n\n## CHAPTER VI\n\nAbout this time an ambitious young reporter from New York arrived one morning at\nGatsby’s door and asked him if he had anything to say.\n\n“Anything to say about what?” inquired Gatsby politely.\n\n“Why—any statement to give out.”\n\nIt transpired after a confused five minutes that the man had heard Gatsby’s name\naround his office in a connection which he either wouldn’t reveal or didn’t\nfully understand. This was his day off and with laudable initiative he had\nhurried out “to see.”\n\nIt was a random shot, and yet the reporter’s instinct was right. Gatsby’s\nnotoriety, spread about by the hundreds who had accepted his hospitality and so\nbecome authorities upon his past, had increased all summer until he fell just\nshort of being news. Contemporary legends such as the “underground pipe-line to\nCanada” attached themselves to him, and there was one persistent story that he\ndidn’t live in a house at all, but in a boat that looked like a house and was\nmoved secretly up and down the Long Island shore. Just why these inventions were\na source of satisfaction to James Gatz of North Dakota, isn’t easy to say.\n\nJames Gatz—that was really, or at least legally, his name. He had changed it at\nthe age of seventeen and at the specific moment that witnessed the beginning of\nhis career—when he saw Dan Cody’s yacht drop anchor over the most insidious flat\non Lake Superior. It was James Gatz who had been loafing along the beach that\nafternoon in a torn green jersey and a pair of canvas pants, but it was already\nJay Gatsby who borrowed a rowboat, pulled out to the Tuolomee, and informed Cody\nthat a wind might catch him and break him up in half an hour.\n\nI suppose he’d had the name ready for a long time, even then. His parents were\nshiftless and unsuccessful farm people—his imagination had never really accepted\nthem as his parents at all. The truth was that Jay Gatsby of West Egg, Long\nIsland, sprang from his Platonic conception of himself. He was a son of God—a\nphrase which, if it means anything, means just that—and he must be about His\nFather’s business, the service of a vast, vulgar, and meretricious beauty. So he\ninvented just the sort of Jay Gatsby that a seventeen year-old boy would be\nlikely to invent, and to this conception he was faithful to the end.\n\nFor over a year he had been beating his way along the south shore of Lake\nSuperior as a clam-digger and a salmon-fisher or in any other capacity that\nbrought him food and bed. His brown, hardening body lived naturally through the\nhalf-fierce, half-lazy work of the bracing days. He knew women early, and since\nthey spoiled him he became contemptuous of them, of young virgins because they\nwere ignorant, of the others because they were hysterical about things which in\nhis overwhelming self-absorbtion he took for granted.\n\nBut his heart was in a constant, turbulent riot. The most grotesque and\nfantastic conceits haunted him in his bed at night. A universe of ineffable\ngaudiness spun itself out in his brain while the clock ticked on the wash-stand\nand the moon soaked with wet light his tangled clothes upon the floor. Each\nnight he added to the pattern of his fancies until drowsiness closed down upon\nsome vivid scene with an oblivious embrace. For a while these reveries provided\nan outlet for his imagination; they were a satisfactory hint of the unreality of\nreality, a promise that the rock of the world was founded securely on a fairy’s\nwing.\n\nAn instinct toward his future glory had led him, some months before, to the\nsmall Lutheran College of St. Olaf’s in northern Minnesota. He stayed there two\nweeks, dismayed at its ferocious indifference to the drums of his destiny, to\ndestiny itself, and despising the janitor’s work with which he was to pay his\nway through. Then he drifted back to Lake Superior, and he was still searching\nfor something to do on the day that Dan Cody’s yacht dropped anchor in the\nshallows alongshore.\n\nCody was fifty years old then, a product of the Nevada silver fields, of the\nYukon, of every rush for metal since seventy-five. The transactions in Montana\ncopper that made him many times a millionaire found him physically robust but on\nthe verge of soft-mindedness, and, suspecting this, an infinite number of women\ntried to separate him from his money. The none too savory ramifications by which\nElla Kaye, the newspaper woman, played Madame de Maintenon to his weakness and\nsent him to sea in a yacht, were common property of the turgid journalism\nof 1902. He had been coasting along all too hospitable shores for five years\nwhen he turned up as James Gatz’s destiny in Little Girl Bay.\n\nTo young Gatz, resting on his oars and looking up at the railed deck, that yacht\nrepresented all the beauty and glamour in the world. I suppose he smiled at\nCody—he had probably discovered that people liked him when he smiled. At any\nrate Cody asked him a few questions (one of them elicited the brand new name)\nand found that he was quick and extravagantly ambitious. A few days later he\ntook him to Duluth and bought him a blue coat, six pair of white duck trousers,\nand a yachting cap. And when the Tuolomee left for the West Indies and the\nBarbary Coast Gatsby left too.\n\nHe was employed in a vague personal capacity—while he remained with Cody he was\nin turn steward, mate, skipper, secretary, and even jailor, for Dan Cody sober\nknew what lavish doings Dan Cody drunk might soon be about, and he provided for\nsuch contingencies by reposing more and more trust in Gatsby. The arrangement\nlasted five years, during which the boat went three times around the Continent.\nIt might have lasted indefinitely except for the fact that Ella Kaye came on\nboard one night in Boston and a week later Dan Cody inhospitably died.\n\nI remember the portrait of him up in Gatsby’s bedroom, a gray, florid man with a\nhard, empty face—the pioneer debauchee, who during one phase of American life\nbrought back to the Eastern seaboard the savage violence of the frontier brothel\nand saloon. It was indirectly due to Cody that Gatsby drank so little. Sometimes\nin the course of gay parties women used to rub champagne into his hair; for\nhimself he formed the habit of letting liquor alone.\n\nAnd it was from Cody that he inherited money—a legacy of twenty-five thousand\ndollars. He didn’t get it. He never understood the legal device that was used\nagainst him, but what remained of the millions went intact to Ella Kaye. He was\nleft with his singularly appropriate education; the vague contour of Jay Gatsby\nhad filled out to the substantiality of a man.\n\nHe told me all this very much later, but I’ve put it down here with the idea of\nexploding those first wild rumors about his antecedents, which weren’t even\nfaintly true. Moreover he told it to me at a time of confusion, when I had\nreached the point of believing everything and nothing about him. So I take\nadvantage of this short halt, while Gatsby, so to speak, caught his breath, to\nclear this set of misconceptions away.\n\nIt was a halt, too, in my association with his affairs. For several weeks I\ndidn’t see him or hear his voice on the phone—mostly I was in New York, trotting\naround with Jordan and trying to ingratiate myself with her senile aunt—but\nfinally I went over to his house one Sunday afternoon. I hadn’t been there two\nminutes when somebody brought Tom Buchanan in for a drink. I was startled,\nnaturally, but the really surprising thing was that it hadn’t happened before.\n\nThey were a party of three on horseback—Tom and a man named Sloane and a pretty\nwoman in a brown riding-habit, who had been there previously.\n\n“I’m delighted to see you,” said Gatsby, standing on his porch. “I’m delighted\nthat you dropped in.”\n\nAs though they cared!\n\n“Sit right down. Have a cigarette or a cigar.” He walked around the room\nquickly, ringing bells. “I’ll have something to drink for you in just a minute.”\n\nHe was profoundly affected by the fact that Tom was there. But he would be\nuneasy anyhow until he had given them something, realizing in a vague way that\nthat was all they came for. Mr. Sloane wanted nothing. A lemonade? No, thanks. A\nlittle champagne? Nothing at all, thanks. . . . I’m sorry———\n\n“Did you have a nice ride?”\n\n“Very good roads around here.”\n\n“I suppose the automobiles———”\n\n“Yeah.”\n\nMoved by an irresistible impulse, Gatsby turned to Tom, who had accepted the\nintroduction as a stranger.\n\n“I believe we’ve met somewhere before, Mr. Buchanan.”\n\n“Oh, yes,” said Tom, gruffly polite, but obviously not remembering. “So we did.\nI remember very well.”\n\n“About two weeks ago.”\n\n“That’s right. You were with Nick here.”\n\n“I know your wife,” continued Gatsby, almost aggressively.\n\n“That so?”\n\nTom turned to me.\n\n“You live near here, Nick?”\n\n“Next door.”\n\n“That so?”\n\nMr. Sloane didn’t enter into the conversation, but lounged back haughtily in his\nchair; the woman said nothing either—until unexpectedly, after two highballs,\nshe became cordial.\n\n“We’ll all come over to your next party, Mr. Gatsby,” she suggested. “What do\nyou say?”\n\n“Certainly; I’d be delighted to have you.”\n\n“Be ver’ nice,” said Mr. Sloane, without gratitude. “Well—think ought to be\nstarting home.”\n\n“Please don’t hurry,” Gatsby urged them. He had control of himself now, and he\nwanted to see more of Tom. “Why don’t you—why don’t you stay for supper? I\nwouldn’t be surprised if some other people dropped in from New York.”\n\n“You come to supper with me,” said the lady enthusiastically. “Both of you.”\n\nThis included me. Mr. Sloane got to his feet.\n\n“Come along,” he said—but to her only.\n\n“I mean it,” she insisted. “I’d love to have you. Lots of room.”\n\nGatsby looked at me questioningly. He wanted to go, and he didn’t see that Mr.\nSloane had determined he shouldn’t.\n\n“I’m afraid I won’t be able to,” I said.\n\n“Well, you come,” she urged, concentrating on Gatsby.\n\nMr. Sloane murmured something close to her ear.\n\n“We won’t be late if we start now,” she insisted aloud.\n\n“I haven’t got a horse,” said Gatsby. “I used to ride in the army, but I’ve\nnever bought a horse. I’ll have to follow you in my car. Excuse me for just a\nminute.”\n\nThe rest of us walked out on the porch, where Sloane and the lady began an\nimpassioned conversation aside.\n\n“My God, I believe the man’s coming,” said Tom. “Doesn’t he know she doesn’t\nwant him?”\n\n“She says she does want him.”\n\n“She has a big dinner party and he won’t know a soul there.” He frowned. “I\nwonder where in the devil he met Daisy. By God, I may be old-fashioned in my\nideas, but women run around too much these days to suit me. They meet all kinds\nof crazy fish.”\n\nSuddenly Mr. Sloane and the lady walked down the steps and mounted their horses.\n\n“Come on,” said Mr. Sloane to Tom, “we’re late. We've got to go.” And then to\nme: “Tell him we couldn’t wait, will you?”\n\nTom and I shook hands, the rest of us exchanged a cool nod, and they trotted\nquickly down the drive, disappearing under the August foliage just as Gatsby,\nwith hat and light overcoat in hand, came out the front door.\n\nTom was evidently perturbed at Daisy’s running around alone, for on the\nfollowing Saturday night he came with her to Gatsby’s party. Perhaps his\npresence gave the evening its peculiar quality of oppressiveness—it stands out\nin my memory from Gatsby’s other parties that summer. There were the same\npeople, or at least the same sort of people, the same profusion of champagne,\nthe same many-colored, many-keyed commotion, but I felt an unpleasantness in the\nair, a pervading harshness that hadn’t been there before. Or perhaps I had\nmerely grown used to it, grown to accept West Egg as a world complete in itself,\nwith its own standards and its own great figures, second to nothing because it\nhad no consciousness of being so, and now I was looking at it again, through\nDaisy’s eyes. It is invariably saddening to look through new eyes at things upon\nwhich you have expended your own powers of adjustment.\n\nThey arrived at twilight, and, as we strolled out among the sparkling hundreds,\nDaisy’s voice was playing murmurous tricks in her throat.\n\n“These things excite me so,” she whispered. “If you want to kiss me any time\nduring the evening, Nick, just let me know and I'll be glad to arrange it for\nyou. Just mention my name. Or present a green card. I’m giving out green—”\n\n“Look around,” suggested Gatsby\n\n“I’m looking around. I’m having a marvellous—”\n\n“You must see the faces of many people you’ve heard about.”\n\nTom’s arrogant eyes roamed the crowd.\n\n“We don’t go around very much,” he said; “in fact, I was just thinking I don’t\nknow a soul here.”\n\n“Perhaps you know that lady,” Gatsby indicated a gorgeous, scarcely human orchid\nof a woman who sat in state under a white-plum tree. Tom and Daisy stared, with\nthat peculiarly unreal feeling that accompanies the recognition of a hitherto\nghostly celebrity of the movies.\n\n“She’s lovely,” said Daisy.\n\n“The man bending over her is her director.”\n\nHe took them ceremoniously from group to group:\n\n“Mrs. Buchanan . . . and Mr. Buchanan—” After an instant’s hesitation he added:\n“the polo player.”\n\n“Oh no,” objected Tom quickly, “not me.”\n\nBut evidently the sound of it pleased Gatsby for Tom remained “the polo player”\nfor the rest of the evening.\n\n“I’ve never met so many celebrities,” Daisy exclaimed, “I liked that man—what\nwas his name?—with the sort of blue nose.”\n\nGatsby identified him, adding that he was a small producer.\n\n“Well, I liked him anyhow.”\n\n“I’d a little rather not be the polo player,” said Tom pleasantly, “I’d rather\nlook at all these famous people in—in oblivion.”\n\nDaisy and Gatsby danced. I remember being surprised by his graceful,\nconservative fox-trot—I had never seen him dance before. Then they sauntered\nover to my house and sat on the steps for half an hour, while at her request I\nremained watchfully in the garden. “In case there’s a fire or a flood,” she\nexplained, ‘‘or any act of God.”\n\nTom appeared from his oblivion as we were sitting down to supper together. “Do\nyou mind if I eat with some people over here?” he said. “A fellow’s getting off\nsome funny stuff.”\n\n“Go ahead,” answered Daisy genially, “and if you want to take down any addresses\nhere’s my little gold pencil.” . . . She looked around after a moment and told\nme the girl was “common but pretty,” and I knew that except for the half-hour\nshe’d been alone with Gatsby she wasn’t having a good time.\n\nWe were at a particularly tipsy table. That was my fault—Gatsby had been called\nto the phone, and I’d enjoyed these same people only two weeks before. But what\nhad amused me then turned septic on the air now.\n\n“How do you feel, Miss Baedeker?”\n\nThe girl addressed was trying, unsuccessfully, to slump against my shoulder. At\nthis inquiry she sat up and opened her eyes.\n\n“Wha’?”\n\nA massive and lethargic woman, who had been urging Daisy to play golf with her\nat the local club to-morrow, spoke in Miss Baedeker’s defence:\n\n“Oh, she’s all right now. When she’s had five or six cocktails she always starts\nscreaming like that. I tell her she ought to leave it alone.”\n\n“I do leave it alone,” affirmed the accused hollowly.\n\n“We heard you yelling, so I said to Doc Civet here: ‘There’s somebody that needs\nyour help, Doc.’”\n\n“She’s much obliged, I’m sure,” said another friend, without gratitude, “but you\ngot her dress all wet when you stuck her head in the pool.”\n\n“Anything I hate is to get my head stuck in a pool,” mumbled Miss Baedeker.\n“They almost drowned me once over in New Jersey.”\n\n“Then you ought to leave it alone,” countered Doctor Civet.\n\n“Speak for yourself!” cried Miss Baedeker violently. “Your hand shakes. I\nwouldn’t let you operate on me!”\n\nIt was like that. Almost the last thing I remember was standing with Daisy and\nwatching the moving-picture director and his Star. They were still under the\nwhite-plum tree and their faces were touching except for a pale, thin ray of\nmoonlight between. It occurred to me that he had been very slowly bending toward\nher all evening to attain this proximity, and even while I watched I saw him\nstoop one ultimate degree and kiss at her cheek.\n\n“I like her,” said Daisy, “I think she’s lovely.”\n\nBut the rest offended her—and inarguably, because it wasn’t a gesture but an\nemotion. She was appalled by West Egg, this unprecedented “place” that Broadway\nhad begotten upon a Long Island fishing village—appalled by its raw vigor that\nchafed under the old euphemisms and by the too obtrusive fate that herded its\ninhabitants along a short-cut from nothing to nothing. She saw something awful\nin the very simplicity she failed to understand.\n\nI sat on the front steps with them while they waited for their car. It was dark\nhere in front; only the bright door sent ten square feet of light volleying out\ninto the soft black morning. Sometimes a shadow moved against a dressing-room\nblind above, gave way to another shadow, an indefinite procession of shadows,\nwho rouged and powdered in an invisible glass.\n\n“Who is this Gatsby anyhow?” demanded Tom suddenly. “Some big bootlegger?”\n\n“Where’d you hear that?” I inquired.\n\n“I didn’t hear it. I imagined it. A lot of these newly rich people are just big\nbootleggers, you know.”\n\n“Not Gatsby,” I said shortly.\n\nHe was silent for a moment. The pebbles of the drive crunched under his feet.\n\n“Well, he certainly must have strained himself to get this menagerie together.”\n\nA breeze stirred the gray haze of Daisy’s fur collar.\n\n“At least they are more interesting than the people we know,” she said with an\neffort.\n\n“You didn’t look so interested.”\n\n“Well, I was.”\n\nTom laughed and turned to me.\n\n“Did you notice Daisy’s face when that girl asked her to put her under a cold\nshower?”\n\nDaisy began to sing with the music in a husky, rythmic whisper, bringing out a\nmeaning in each word that it had never had before and would never have again.\nWhen the melody rose her voice broke up sweetly, following it, in a way\ncontralto voices have, and each change tipped out a little of her warm human\nmagic upon the air.\n\n“Lots of people come who haven’t been invited,” she said suddenly. “That girl\nhadn’t been invited. They simply force their way in and he’s too polite to\nobject.”\n\n“I’d like to know who he is and what he does,” insisted Tom. “And I think I’ll\nmake a point of finding out.”\n\n“I can tell you right now,” she answered. “He owned some drug-stores, a lot of\ndrug-stores. He built them up himself.”\n\nThe dilatory limousine came rolling up the drive.\n\n“Good night, Nick,” said Daisy.\n\nHer glance left me and sought the lighted top of the steps, where “Three o’Clock\nin the Morning,” a neat, sad little waltz of that year, was drifting out the\nopen door. After all, in the very casualness of Gatsby’s party there were\nromantic possibilities totally absent from her world. What was it up there in\nthe song that seemed to be calling her back inside? What would happen now in the\ndim, incalculable hours? Perhaps some unbelievable guest would arrive, a person\ninfinitely rare and to be marvelled at, some authentically radiant young girl\nwho with one fresh glance at Gatsby, one moment of magical encounter, would blot\nout those five years of unwavering devotion.\n\nI stayed late that night, Gatsby asked me to wait until he was free, and I\nlingered in the garden until the inevitable swimming party had run up, chilled\nand exalted, from the black beach, until the lights were extinguished in the\nguest-rooms overhead. When he came down the steps at last the tanned skin was\ndrawn unusually tight on his face, and his eyes were bright and tired.\n\n“She didn’t like it,” he said immediately.\n\n“Of course she did.”\n\n“She didn’t like it,” he insisted. “She didn’t have a good time.”\n\nHe was silent, and I guessed at his unutterable depression.\n\n“I feel far away from her,” he said. “It’s hard to make her understand.”\n\n“You mean about the dance?”\n\n“The dance?” He dismissed all the dances he had given with a snap of his\nfingers. “Old sport, the dance is unimportant.”\n\nHe wanted nothing less of Daisy than that she should go to Tom and say: “I never\nloved you.” After she had obliterated four years with that sentence they could\ndecide upon the more practical measures to be taken. One of them was that, after\nshe was free, they were to go back to Louisville and be married from her\nhouse—just as if it were five years ago.\n\n“And she doesn’t understand,” he said. “She used to be able to understand. We’d\nsit for hours—”\n\nHe broke off and began to walk up and down a desolate path of fruit rinds and\ndiscarded favors and crushed flowers.\n\n“I wouldn’t ask too much of her,” I ventured. “You can’t repeat the past.”\n\n“Can’t repeat the past?” he cried incredulously. “Why of course you can!”\n\nHe looked around him wildly, as if the past were lurking here in the shadow of\nhis house, just out of reach of his hand.\n\n“I’m going to fix everything just the way it was before,” he said, nodding\ndeterminedly. “She’ll see.”\n\nHe talked a lot about the past, and I gathered that he wanted to recover\nsomething, some idea of himself perhaps, that had gone into loving Daisy. His\nlife had been confused and disordered since then, but if he could once return to\na certain starting place and go over it all slowly, he could find out what that\nthing was. . . .\n\n. . . One autumn night, five years before, they had been walking down the street\nwhen the leaves were falling, and they came to a place where there were no trees\nand the sidewalk was white with moonlight. They stopped here and turned toward\neach other. Now it was a cool night with that mysterious excitement in it which\ncomes at the two changes of the year. The quiet lights in the houses were\nhumming out into the darkness and there was a stir and bustle among the stars.\nOut of the corner of his eye Gatsby saw that the blocks of the sidewalks really\nformed a ladder and mounted to a secret place above the trees—he could climb to\nit, if he climbed alone, and once there he could suck on the pap of life, gulp\ndown the incomparable milk of wonder.\n\nHis heart beat faster and faster as Daisy’s white face came up to his own. He\nknew that when he kissed this girl, and forever wed his unutterable visions to\nher perishable breath, his mind would never romp again like the mind of God. So\nhe waited, listening for a moment longer to the tuning-fork that had been struck\nupon a star. Then he kissed her. At his lips’ touch she blossomed for him like a\nflower and the incarnation was complete.\n\nThrough all he said, even through his appalling sentimentality, I was reminded\nof something—an elusive rhythm, a fragment of lost words, that I had heard\nsomewhere a long time ago. For a moment a phrase tried to take shape in my mouth\nand my lips parted like a dumb man’s, as though there was more struggling upon\nthem than a wisp of startled air. But they made no sound, and what I had almost\nremembered was uncommunicable forever.\n\n## CHAPTER VII\n\nIt was when curiosity about Gatsby was at its highest that the lights in his\nhouse failed to go on one Saturday night—and, as obscurely as it had begun, his\ncareer as Trimalchio was over. Only gradually did I become aware that the\nautomobiles which turned expectantly into his drive stayed for just a minute and\nthen drove sulkily away. Wondering if he were sick I went over to find out—an\nunfamiliar butler with a villainous face squinted at me suspiciously from the\ndoor.\n\n“Is Mr. Gatsby sick?”\n\n“Nope.” After a pause he added “sir’’ in a dilatory, grudging way.\n\n“I hadn’t seen him around, and I was rather worried. Tell him Mr. Carraway came\nover.”\n\n“Who?” he demanded rudely.\n\n“Carraway.”\n\n“Carraway. All right, I'll tell him.”\n\nAbruptly he slammed the door.\n\nMy Finn informed me that Gatsby had dismissed every servant in his house a week\nago and replaced them with half a dozen others, who never went into West Egg\nVillage to be bribed by the tradesmen, but ordered moderate supplies over the\ntelephone. The grocery boy reported that the kitchen looked like a pigsty, and\nthe general opinion in the village was that the new people weren’t servants at\nall.\n\nNext day Gatsby called me on the phone.\n\n“Going away?” I inquired.\n\n“No, old sport.”\n\n“I hear you fired all your servants.”\n\n“I wanted somebody who wouldn’t gossip. Daisy comes over quite often—in the\nafternoons.”\n\nSo the whole caravansary had fallen in like a card house at the disapproval in\nher eyes.\n\n“They’re some people Wolfshiem wanted to do something for. They’re all brothers\nand sisters. They used to run a small hotel.”\n\n“I see.”\n\nHe was calling up at Daisy’s request—would I come to lunch at her house\nto-morrow? Miss Baker would be there. Half an hour later Daisy herself\ntelephoned and seemed relieved to find that I was coming. Something was up. And\nyet I couldn’t believe that they would choose this occasion for a\nscene—especially for the rather harrowing scene that Gatsby had outlined in the\ngarden.\n\nThe next day was broiling, almost the last, certainly the warmest, of the\nsummer. As my train emerged from the tunnel into sunlight, only the hot whistles\nof the National Biscuit Company broke the simmering hush at noon. The straw\nseats of the car hovered on the edge of combustion; the woman next to me\nperspired delicately for a while into her white shirtwaist, and then, as her\nnewspaper dampened under her fingers, lapsed despairingly into deep heat with a\ndesolate cry. Her pocket-book slapped to the floor.\n\n“Oh, my!” she gasped.\n\nI picked it up with a weary bend and handed it back to her, holding it at arm’s\nlength and by the extreme tip of the corners to indicate that I had no designs\nupon it—but every one near by, including the woman, suspected me just the same.\n\n“Hot!” said the conductor to familiar faces. “Some weather! . . . Hot! . . .\nHot! . . . Hot! . . . Is it hot enough for you? Is it hot? Is it . . .?”\n\nMy commutation ticket came back to me with a dark stain from his hand. That any\none should care in this heat whose flushed lips he kissed, whose head made damp\nthe pajama pocket over his heart!\n\n. . . Through the hall of the Buchanans’ house blew a faint wind, carrying the\nsound of the telephone bell out to Gatsby and me as we waited at the door.\n\n“The master’s body!” roared the butler into the mouthpiece. “I’m sorry, madame,\nbut we can’t furnish it—it’s far too hot to touch this noon!”\n\nWhat he really said was: “Yes . . . Yes . . . I’ll see.”\n\nHe set down the receiver and came toward us, glistening slightly, to take our\nstiff straw hats.\n\n“Madame expects you in the salon!” he cried, needlessly indicating the\ndirection. In this heat every extra gesture was an affront to the common store\nof life.\n\nThe room, shadowed well with awnings, was dark and cool. Daisy and Jordan lay\nupon an enormous couch, like silver idols weighing down their own white dresses\nagainst the singing breeze of the fans.\n\n“We can’t move,” they said together.\n\nJordan’s fingers, powdered white over their tan, rested for a moment in mine.\n\n“And Mr. Thomas Buchanan, the athlete?” I inquired.\n\nSimultaneously I heard his voice, gruff, muffled, husky, at the hall telephone.\n\nGatsby stood in the centre of the crimson carpet and gazed around with\nfascinated eyes. Daisy watched him and laughed, her sweet, exciting laugh; a\ntiny gust of powder rose from her bosom into the air.\n\n“The rumor is,” whispered Jordan, “that that’s Tom’s girl on the telephone.”\n\nWe were silent. The voice in the hall rose high with annoyance: “Very well,\nthen, I won’t sell you the car at all. . . . I’m under no obligations to you at\nall . . . and as for your bothering me about it at lunch time, I won’t stand\nthat at all!”\n\n“Holding down the receiver,” said Daisy cynically.\n\n“No, he’s not,” I assured her. “It’s a bona-fide deal. I happen to know about\nit.”\n\nTom flung open the door, blocked out its space for a moment with his thick body,\nand hurried into the room.\n\n“Mr. Gatsby!” He put out his broad, flat hand with well-concealed dislike. “I’m\nglad to see you, sir. . . . Nick. . . .”\n\n“Make us a cold drink,” cried Daisy.\n\nAs he left the room again she got up and went over to Gatsby and pulled his face\ndown, kissing him on the mouth.\n\n“You know I love you,” she murmured.\n\n“You forget there’s a lady present,” said Jordan.\n\nDaisy looked around doubtfully.\n\n“You kiss Nick too.”\n\n“What a low, vulgar girl!”\n\n“I don’t care!” cried Daisy, and began to clog on the brick fireplace. Then she\nremembered the heat and sat down guiltily on the couch just as a freshly\nlaundered nurse leading a little girl came into the room.\n\n“Bles-sed pre-cious,” she crooned, holding out her arms. “Come to your own\nmother that loves you.”\n\nThe child, relinquished by the nurse, rushed across the room and rooted shyly\ninto her mother’s dress.\n\n“The bles-sed pre-cious! Did mother get powder on your old yellowy hair? Stand\nup now, and say—How-de-do.”\n\nGatsby and I in turn leaned down and took the small reluctant hand. Afterward he\nkept looking at the child with surprise. I don’t think he had ever really\nbelieved in its existence before.\n\n“I got dressed before luncheon,” said the child, turning eagerly to Daisy.\n\n“That’s because your mother wanted to show you off.” Her face bent into the\nsingle wrinkle of the small white neck. “You dream, you. You absolute little\ndream.”\n\n“Yes,” admitted the child calmly. “Aunt Jordan’s got on a white dress too.”\n\n“How do you like mother’s friends?” Daisy turned her around so that she faced\nGatsby. “Do you think they’re pretty?”\n\n“Where’s Daddy?”\n\n“She doesn’t look like her father,” explained Daisy. “She looks like me. She’s\ngot my hair and shape of the face.”\n\nDaisy sat back upon the couch. The nurse took a step forward and held out her\nhand.\n\n“Come, Pammy.”\n\n“Good-by, sweetheart!”\n\nWith a reluctant backward glance the well-disciplined child held to her nurse’s\nhand and was pulled out the door, just as Tom came back, preceding four gin\nrickeys that clicked full of ice.\n\nGatsby took up his drink.\n\n“They certainly look cool,” he said, with visible tension.\n\nWe drank in long, greedy swallows.\n\n“I read somewhere that the sun’s getting hotter every year,” said Tom genially.\n“It seems that pretty soon the earth’s going to fall into the sun—or wait a\nminute—it’s just the opposite—the sun’s getting colder every year.\n\n“Come outside,” he suggested to Gatsby, “I’d like you to have a look at the\nplace.”\n\nI went with them out to the veranda. On the green Sound, stagnant in the heat,\none small sail crawled slowly toward the fresher sea. Gatsby’s eyes followed it\nmomentarily; he raised his hand and pointed across the bay.\n\n“I’m right across from you.”\n\n“So you are.”\n\nOur eyes lifted over the rose-beds and the hot lawn and the weedy refuse of the\ndog-days alongshore. Slowly the white wings of the boat moved against the blue\ncool limit of the sky. Ahead lay the scalloped ocean and the abounding blessed\nisles.\n\n“There’s sport for you,” said Tom, nodding. “I’d like to be out there with him\nfor about an hour.”\n\nWe had luncheon in the dining-room, darkened too against the heat, and drank\ndown nervous gayety with the cold ale.\n\n“What’ll we do with ourselves this afternoon?” cried Daisy, “and the day after\nthat, and the next thirty years?”\n\n“Don’t be morbid,” Jordan said. “Life starts all over again when it gets crisp\nin the fall.”\n\n“But it’s so hot,” insisted Daisy, on the verge of tears, “and everything’s so\nconfused. Let’s all go to town!”\n\nHer voice struggled on through the heat, beating against it, molding its\nsenselessness into forms.\n\n“I’ve heard of making a garage out of a stable,” Tom was saying to Gatsby, “but\nI’m the first man who ever made a stable out of a garage.”\n\n“Who wants to go to town?” demanded Daisy insistently. Gatsby’s eyes floated\ntoward her. “Ah,” she cried, “you look so cool.”\n\nTheir eyes met, and they stared together at each other, alone in space. With an\neffort she glanced down at the table.\n\n“You always look so cool,” she repeated.\n\nShe had told him that she loved him, and Tom Buchanan saw. He was astounded. His\nmouth opened a little, and he looked at Gatsby, and then back at Daisy as if he\nhad just recognized her as some one he knew a long time ago.\n\n“You resemble the advertisement of the man,” she went on innocently. ‘You know\nthe advertisement of the man—”\n\n“All right,” broke in Tom quickly, “I’m perfectly willing to go to town. Come\non—we’re all going to town.”\n\nHe got up, his eyes still flashing between Gatsby and his wife. No one moved.\n\n“Come on!” His temper cracked a little. “What’s the matter, anyhow? If we’re\ngoing to town, let’s start.”\n\nHis hand, trembling with his effort at self-control, bore to his lips the last\nof his glass of ale. Daisy’s voice got us to our feet and out on to the blazing\ngravel drive.\n\n“Are we just going to go?” she objected. “Like this? Aren’t we going to let any\none smoke a cigarette first?”\n\n“Everybody smoked all through lunch.”\n\n“Oh, let’s have fun,” she begged him. “It’s too hot to fuss.”\n\nHe didn’t answer.\n\n“Have it your own way,” she said. “Come on, Jordan.”\n\nThey went up-stairs to get ready while we three men stood there shuffling the\nhot pebbles with our feet. A silver curve of the moon hovered already in the\nwestern sky. Gatsby started to speak, changed his mind, but not before Tom\nwheeled and faced him expectantly.\n\n“Have you got your stables here?” asked Gatsby with an effort.\n\n“About a quarter of a mile down the road.”\n\n“Oh.”\n\nA pause.\n\n“I don’t see the idea of going to town,” broke out Tom savagely. “Women get\nthese notions in their heads———”\n\n“Shall we take anything to drink?” called Daisy from an upper window.\n\n“I’ll get some whiskey,” answered Tom. He went inside.\n\nGatsby turned to me rigidly:\n\n“I can’t say anything in his house, old sport.”\n\n“She’s got an indiscreet voice,” I remarked. “It’s full of—” I hesitated.\n\n“Her voice is full of money,” he said suddenly.\n\nThat was it. I’d never understood before. It was full of money—that was the\ninexhaustible charm that rose and fell in it, the jingle of it, the cymbals’\nsong of it. . . . High in a white palace the king’s daughter, the golden girl. .\n. .\n\nTom came out of the house wrapping a quart bottle in a towel, followed by Daisy\nand Jordan wearing small tight hats of metallic cloth and carrying light capes\nover their arms.\n\n“Shall we all go in my car?” suggested Gatsby. He felt the hot, green leather of\nthe seat. “I ought to have left it in the shade.”\n\n“Is it standard shift?” demanded Tom.\n\n“Yes.”\n\n“Well, you take my coupé and let me drive your car to town.”\n\nThe suggestion was distasteful to Gatsby.\n\n“I don’t think there’s much gas,” he objected.\n\n“Plenty of gas,” said Tom boisterously. He looked at the gauge. “And if it runs\nout I can stop at a drug-store. You can buy anything at a drug-store nowadays.”\n\nA pause followed this apparently pointless remark. Daisy looked at Tom frowning,\nand an indefinable expression, at once definitely unfamiliar and vaguely\nrecognizable, as if I had only heard it described in words, passed over Gatsby’s\nface.\n\n“Come on, Daisy,” said Tom, pressing her with his hand toward Gatsby’s car.\n“I’ll take you in this circus wagon.”\n\nHe opened the door, but she moved out from the circle of his arm.\n\n“You take Nick and Jordan. We’ll follow you in the coupé.”\n\nShe walked close to Gatsby, touching his coat with her hand. Jordan and Tom and\nI got into the front seat of Gatsby’s car, Tom pushed the unfamiliar gears\ntentatively, and we shot off into the oppressive heat, leaving them out of sight\nbehind.\n\n“Did you see that?” demanded Tom.\n\n“See what?”\n\nHe looked at me keenly, realizing that Jordan and I must have known all along.\n\n“You think I’m pretty dumb, don’t you?” he suggested. “Perhaps I am, but I have\na—almost a second sight, sometimes, that tells me what to do. Maybe you don’t\nbelieve that, but science———”\n\nHe paused. The immediate contingency overtook him, pulled him back from the edge\nof the theoretical abyss.\n\n“I’ve made a small investigation of this fellow,” he continued. “I could have\ngone deeper if I’d known———”\n\n“Do you mean you’ve been to a medium?” inquired Jordan humorously.\n\n“What?” Confused, he stared at us as we laughed. “A medium?”\n\n“About Gatsby.”\n\n“About Gatsby! No, I haven’t. I said I’d been making a small investigation of\nhis past.”\n\n“And you found he was an Oxford man,” said Jordan helpfully.\n\n“An Oxford man!” He was incredulous. “Like hell he is! He wears a pink suit.”\n\n“Nevertheless he’s an Oxford man.”\n\n“Oxford, New Mexico,” snorted Tom contemptuously, “or something like that.”\n\n“Listen, Tom. If you’re such a snob, why did you invite him to lunch?” demanded\nJordan crossly.\n\n“Daisy invited him; she knew him before we were married—God knows where!”\n\nWe were all irritable now with the fading ale, and aware of it we drove for a\nwhile in silence. Then as Doctor T. J. Eckleburg’s faded eyes came into sight\ndown the road, I remembered Gatsby’s caution about gasoline.\n\n“We’ve got enough to get us to town,” said Tom.\n\n“But there’s a garage right here,” objected Jordan. “I don’t want to get stalled\nin this baking heat.”\n\nTom threw on both brakes impatiently, and we slid to an abrupt dusty spot under\nWilson’s sign. After a moment the proprietor emerged from the interior of his\nestablishment and gazed hollow-eyed at the car.\n\n“Let’s have some gas!” cried Tom roughly. “What do you think we stopped for—to\nadmire the view?”\n\n“I’m sick,” said Wilson without moving. “Been sick all day.”\n\n“What’s the matter?”\n\n“I’m all run down.”\n\n“Well, shall I help myself?” Tom demanded. “You sounded well enough on the\nphone.”\n\nWith an effort Wilson left the shade and support of the doorway and, breathing\nhard, unscrewed the cap of the tank. In the sunlight his face was green.\n\n“I didn’t mean to interrupt your lunch,” he said. “But I need money pretty bad,\nand I was wondering what you were going to do with your old car.”\n\n“How do you like this one?” inquired Tom. “I bought it last week.”\n\n“It’s a nice yellow one,” said Wilson, as he strained at the handle.\n\n“Like to buy it?”\n\n“Big chance,” Wilson smiled faintly. “No, but I could make some money on the\nother.”\n\n“What do you want money for, all of a sudden?”\n\n“I’ve been here too long. I want to get away. My wife and I want to go West.”\n\n“Your wife does,” exclaimed Tom, startled.\n\n“She’s been talking about it for ten years.” He rested for a moment against the\npump, shading his eyes. “And now she’s going whether she wants to or not. I’m\ngoing to get her away.”\n\nThe coupé flashed by us with a flurry of dust and the flash of a waving hand.\n\n“What do I owe you?” demanded Tom harshly.\n\n“I just got wised up to something funny the last two days,” remarked Wilson.\n“That’s why I want to get away. That’s why I been bothering you about the car.”\n\n“What do I owe you?”\n\n“Dollar twenty.”\n\nThe relentless beating heat was beginning to confuse me and I had a bad moment\nthere before I realized that so far his suspicions hadn’t alighted on Tom. He\nhad discovered that Myrtle had some sort of life apart from him in another\nworld, and the shock had made him physically sick. I stared at him and then at\nTom, who had made a parallel discovery less than an hour before—and it occurred\nto me that there was no difference between men, in intelligence or race, so\nprofound as the difference between the sick and the well. Wilson was so sick\nthat he looked guilty, unforgivably guilty—as if he had just got some poor girl\nwith child.\n\n“I’ll let you have that car,” said Tom. “I’ll send it over to-morrow afternoon.”\n\nThat locality was always vaguely disquieting, even in the broad glare of\nafternoon, and now I turned my head as though I had been warned of something\nbehind. Over the ashheaps the giant eyes of Doctor T. J. Eckleburg kept their\nvigil, but I perceived, after a moment, that other eyes were regarding us with\npeculiar intensity from less than twenty feet away.\n\nIn one of the windows over the garage the curtains had been moved aside a\nlittle, and Myrtle Wilson was peering down at the car. So engrossed was she that\nshe had no consciousness of being observed, and one emotion after another crept\ninto her face like objects into a slowly developing picture. Her expression was\ncuriously familiar—it was an expression I had often seen on women’s faces, but\non Myrtle Wilson’s face it seemed purposeless and inexplicable until I realized\nthat her eyes, wide with jealous terror, were fixed not on Tom, but on Jordan\nBaker, whom she took to be his wife.\n\nThere is no confusion like the confusion of a simple mind, and as we drove away\nTom was feeling the hot whips of panic. His wife and his mistress, until an hour\nago secure and inviolate, were slipping precipitately from his control. Instinct\nmade him step on the accelerator with the double purpose of overtaking Daisy and\nleaving Wilson behind, and we sped along toward Astoria at fifty miles an hour,\nuntil, among the spidery girders of the elevated, we came in sight of the\neasy-going blue coupé.\n\n“Those big movies around Fiftieth Street are cool,” suggested Jordan. “I love\nNew York on summer afternoons when every one’s away. There’s something very\nsensuous about it—overripe, as if all sorts of funny fruits were going to fall\ninto your hands.”\n\nThe word “sensuous” had the effect of further disquieting Tom, but before he\ncould invent a protest the coupé came to a stop, and Daisy signalled us to draw\nup alongside.\n\n“Where are we going?” she cried.\n\n“How about the movies?”\n\n“It’s so hot,” she complained. “You go. We'll ride around and meet you after.”\nWith an effort her wit rose faintly, “We’ll meet you on some corner. I'll be the\nman smoking two cigarettes.”\n\n“We can’t argue about it here,” Tom said impatiently, as a truck gave out a\ncursing whistle behind us. “You follow me to the south side of Central Park, in\nfront of the Plaza.”\n\nSeveral times he turned his head and looked back for their car, and if the\ntraffic delayed them he slowed up until they came into sight. I think he was\nafraid they would dart down a side street and out of his life forever.\n\nBut they didn’t. And we all took the less explicable step of engaging the parlor\nof a suite in the Plaza Hotel.\n\nThe prolonged and tumultuous argument that ended by herding us into that room\neludes me, though I have a sharp physical memory that, in the course of it, my\nunderwear kept climbing like a damp snake around my legs and intermittent beads\nof sweat raced cool across my back. The notion originated with Daisy’s\nsuggestion that we hire five bathrooms and take cold baths, and then assumed\nmore tangible form as “a place to have a mint julep.” Each of us said over and\nover that it was a “crazy idea”—we all talked at once to a baffled clerk and\nthought, or pretended to think, that we were being very funny . . .\n\nThe room was large and stifling, and, though it was already four o’clock,\nopening the windows admitted only a gust of hot shrubbery from the Park. Daisy\nwent to the mirror and stood with her back to us, fixing her hair.\n\n“It’s a swell suite,” whispered Jordan respectfully, and every one laughed.\n\n“Open another window,” commanded Daisy, without turning around.\n\n“There aren’t any more.”\n\n“Well, we’d better telephone for an axe———”\n\n“The thing to do is to forget about the heat,” said Tom impatiently. “You make\nit ten times worse by crabbing about it.”\n\nHe unrolled the bottle of whiskey from the towel and put it on the table.\n\n“Why not let her alone, old sport?” remarked Gatsby. “You’re the one that wanted\nto come to town.”\n\nThere was a moment of silence. The telephone book slipped from its nail and\nsplashed to the floor, whereupon Jordan whispered, “Excuse me”—but this time no\none laughed.\n\n“I’ll pick it up,” I offered.\n\n“I’ve got it.” Gatsby examined the parted string, muttered “Hum!” in an\ninterested way, and tossed the book on a chair.\n\n“That’s a great expression of yours, isn’t it?” said Tom sharply.\n\n“What is?”\n\n“All this ‘old sport’ business. Where’d you pick that up?”\n\n“Now see here, Tom,” said Daisy, turning around from the mirror, “if you’re\ngoing to make personal remarks I won’t stay here a minute. Call up and order\nsome ice for the mint julep.”\n\nAs Tom took up the receiver the compressed heat exploded into sound and we were\nlistening to the portentous chords of Mendelssohn’s Wedding March from the\nballroom below.\n\n“Imagine marrying anybody in this heat!” cried Jordan dismally.\n\n“Still—I was married in the middle of June,” Daisy remembered, “Louisville in\nJune! Somebody fainted. Who was it fainted, Tom?”\n\n“Biloxi,” he answered shortly.\n\n“A man named Biloxi. ‘Blocks’ Biloxi, and he made boxes—that’s a fact—and he was\nfrom Biloxi, Tennessee.”\n\n“They carried him into my house,” appended Jordan, “because we lived just two\ndoors from the church. And he stayed three weeks, until Daddy told him he had to\nget out. The day after he left Daddy died.” After a moment she added. ‘‘There\nwasn’t any connection.”\n\n“I used to know a Bill Biloxi from Memphis,” I remarked.\n\n“That was his cousin. I knew his whole family history before he left. He gave me\nan aluminum putter that I use to-day.”\n\nThe music had died down as the ceremony began and now a long cheer floated in at\nthe window, followed by intermittent cries of “Yea—ea—ea!” and finally by a\nburst of jazz as the dancing began.\n\n“We're getting old,” said Daisy. “lf we were young we’d rise and dance.”\n\n“Remember Biloxi,” Jordan warned her. ‘‘Where’d you know him, Tom?”\n\n“Biloxi?” He concentrated with an effort. “I didn’t know him. He was a friend of\nDaisy’s.”\n\n“He was not,” she denied. “I’d never seen him before. He came down in the\nprivate car.”\n\n“Well, he said he knew you. He said he was raised in Louisville. Asa Bird\nbrought him around at the last minute and asked if we had room for him.”\n\nJordan smiled.\n\n“He was probably bumming his way home. He told me he was president of your class\nat Yale.”\n\nTom and I looked at each other blankly.\n\n“Biloxi?”\n\n“First place, we didn’t have any president———”\n\nGatsby’s foot beat a short, restless tattoo and Tom eyed him suddenly.\n\n“By the way, Mr. Gatsby, I understand you’re an Oxford man.”\n\n“Not exactly.”\n\n“Oh, yes, I understand you went to Oxford.”\n\n“Yes—I went there.”\n\nA pause. Then Tom’s voice, incredulous and insulting:\n\n“You must have gone there about the time Biloxi went to New Haven.”\n\nAnother pause. A waiter knocked and came in with crushed mint and ice but the\nsilence was unbroken by his “thank you” and the soft closing of the door. This\ntremendous detail was to be cleared up at last.\n\n“I told you I went there,” said Gatsby.\n\n“I heard you, but I’d like to know when.”\n\n“It was in nineteen-nineteen, I only stayed five months. That’s why I can’t\nreally call myself an Oxford man.”\n\nTom glanced around to see if we mirrored his unbelief. But we were all looking\nat Gatsby.\n\n“It was an opportunity they gave to some of the officers after the armistice,”\nhe continued. “We could go to any of the universities in England or France.”\n\nI wanted to get up and slap him on the back. I had one of those renewals of\ncomplete faith in him that I’d experienced before.\n\nDaisy rose, smiling faintly, and went to the table.\n\n“Open the whiskey, Tom,” she ordered, ‘‘and I'll make you a mint julep. Then you\nwon’t seem so stupid to yourself. . . . Look at the mint!”\n\n“Wait a minute,” snapped Tom, “I want to ask Mr. Gatsby one more question.”\n\n“Go on,” Gatsby said politely.\n\n“What kind of a row are you trying to cause in my house anyhow?”\n\nThey were out in the open at last and Gatsby was content.\n\n“He isn’t causing a row,” Daisy looked desperately from one to the other.\n“You’re causing a row. Please have a little self-control.”\n\n“Self-control!” repeated Tom incredulously. “I suppose the latest thing is to\nsit back and let Mr. Nobody from Nowhere make love to your wife. Well, if that’s\nthe idea you can count me out. . . . Nowadays people begin by sneering at family\nlife and family institutions, and next they’ll throw everything overboard and\nhave intermarriage between black and white.”\n\nFlushed with his impassioned gibberish, he saw himself standing alone on the\nlast barrier of civilization.\n\n“We’re all white here,” murmured Jordan.\n\n“I know I’m not very popular. I don’t give big parties. I suppose you’ve got to\nmake your house into a pigsty in order to have any friends—in the modern world.”\n\nAngry as I was, as we all were, I was tempted to laugh whenever he opened his\nmouth. The transition from libertine to prig was so complete.\n\n“I’ve got something to tell you, old sport—” began Gatsby. But Daisy guessed at\nhis intention.\n\n“Please don’t!” she interrupted helplessly. “Please let’s all go home. Why don’t\nwe all go home?”\n\n“That’s a good idea.” I got up. “Come on, Tom. Nobody wants a drink.”\n\n“I want to know what Mr. Gatsby has to tell me.”\n\n“Your wife doesn’t love you,” said Gatsby. ‘‘She’s never loved you. She loves\nme.”\n\n“You must be crazy!” exclaimed Tom automatically.\n\nGatsby sprang to his feet, vivid with excitement.\n\n“She never loved you, do you hear?” he cried. “She only married you because I\nwas poor and she was tired of waiting for me. It was a terrible mistake, but in\nher heart she never loved any one except me!”\n\nAt this point Jordan and I tried to go, but Tom and Gatsby insisted with\ncompetitive firmness that we remain—as though neither of them had anything to\nconceal and it would be a privilege to partake vicariously of their emotions.\n\n“Sit down, Daisy,” Tom’s voice groped unsuccessfully for the paternal note.\n“What’s been going on? I want to hear all about it.”\n\n“I told you what’s been going on,” said Gatsby. “Going on for five years—and you\ndidn’t know.”\n\nTom turned to Daisy sharply.\n\n“You’ve been seeing this fellow for five years?”\n\n“Not seeing,” said Gatsby. “No, we couldn’t meet. But both of us loved each\nother all that time, old sport, and you didn’t know. I used to laugh\nsometimes”—but there was no laughter in his eyes—“to think that you didn’t\nknow.”\n\n“Oh—that’s all.” Tom tapped his thick fingers together like a clergyman and\nleaned back in his chair.\n\n“You’re crazy!” he exploded. “I can’t speak about what happened five years ago,\nbecause I didn’t know Daisy then—and I’ll be damned if I see how you got within\na mile of her unless you brought the groceries to the back door. But all the\nrest of that’s a God damned lie. Daisy loved me when she married me and she\nloves me now.”\n\n“No,” said Gatsby, shaking his head.\n\n“She does, though. The trouble is that sometimes she gets foolish ideas in her\nhead and doesn’t know what she’s doing.” He nodded sagely. “And what’s more, I\nlove Daisy too. Once in a while I go off on a spree and make a fool of myself,\nbut I always come back, and in my heart I love her all the time.”\n\n“You're revolting,” said Daisy. She turned to me, and her voice, dropping an\noctave lower, filled the room with thrilling scorn: “Do you know why we left\nChicago? I’m surprised that they didn’t treat you to the story of that little\nspree.”\n\nGatsby walked over and stood beside her.\n\n“Daisy, that’s all over now,” he said earnestly. “It doesn’t matter any more.\nJust tell him the truth—that you never loved him—and it’s all wiped out\nforever.”\n\nShe looked at him blindly. “Why—how could I love him—possibly?”\n\n“You never loved him.”\n\nShe hesitated. Her eyes fell on Jordan and me with a sort of appeal, as though\nshe realized at last what she was doing—and as though she had never, all along,\nintended doing anything at all. But it was done now. It was too late.\n\n“I never loved him,” she said, with perceptible reluctance.\n\n“Not at Kapiolani?” demanded Tom suddenly.\n\n“No.”\n\nFrom the ballroom beneath, muffled and suffocating chords were drifting up on\nhot waves of air.\n\n“Not that day I carried you down from the Punch Bowl to keep your shoes dry?”\nThere was a husky tenderness in his tone. . . . “Daisy?”\n\n“Please don’t.” Her voice was cold, but the rancor was gone from it. She looked\nat Gatsby. “There, Jay,” she said—but her hand as she tried to light a cigarette\nwas trembling. Suddenly she threw the cigarette and the burning match on the\ncarpet.\n\n“Oh, you want too much!” she cried to Gatsby. “I love you now—isn’t that enough?\nI can’t help what’s past.” She began to sob helplessly. “I did love him once—but\nI loved you too.”\n\nGatsby’s eyes opened and closed.\n\n“You loved me too?” he repeated.\n\n“Even that’s a lie,” said Tom savagely. “She didn’t know you were alive.\nWhy—there’re things between Daisy and me that you’ll never know, things that\nneither of us can ever forget.”\n\nThe words seemed to bite physically into Gatsby.\n\n“I want to speak to Daisy alone,” he insisted. “She’s all excited now—”\n\n“Even alone I can’t say I never loved Tom,” she admitted in a pitiful voice. “It\nwouldn’t be true.”\n\n“Of course it wouldn’t,” agreed Tom.\n\nShe turned to her husband.\n\n“As if it mattered to you,” she said.\n\n“Of course it matters. I’m going to take better care of you from now on.”\n\n“You don’t understand,” said Gatsby, with a touch of panic. “You’re not going to\ntake care of her any more.”\n\n“I’m not?” Tom opened his eyes wide and laughed. He could afford to control\nhimself now. “Why’s that?”\n\n“Daisy’s leaving you.”\n\n“Nonsense.”\n\n“I am, though,” she said with a visible effort.\n\n“She’s not leaving me!” Tom’s words suddenly leaned down over Gatsby. “Certainly\nnot for a common swindler who’d have to steal the ring he put on her finger.”\n\n“I won’t stand this!” cried Daisy. “Oh, please let’s get out.”\n\n“Who are you, anyhow?” broke out Tom. “You’re one of that bunch that hangs\naround with Meyer Wolfshiem—that much I happen to know. I’ve made a little\ninvestigation into your affairs—and I’ll carry it further to-morrow.”\n\n“You can suit yourself about that, old sport.” said Gatsby steadily.\n\n“I found out what your ‘drug-stores’ were.” He turned to us and spoke rapidly.\n“He and this Wolfshiem bought up a lot of side-street drug-stores here and in\nChicago and sold grain alcohol over the counter. That’s one of his little\nstunts. I picked him for a bootlegger the first time I saw him, and I wasn’t far\nwrong.”\n\n“What about it?” said Gatsby politely. “I guess your friend Walter Chase wasn’t\ntoo proud to come in on it.”\n\n“And you left him in the lurch, didn’t you? You let him go to jail for a month\nover in New Jersey. God! You ought to hear Walter on the subject of you.”\n\n“He came to us dead broke. He was very glad to pick up some money, old sport.”\n\n“Don’t you call me ‘old sport’!” cried Tom. Gatsby said nothing. “Walter could\nhave you up on the betting laws too, but Wolfshiem scared him into shutting his\nmouth.”\n\nThat unfamiliar yet recognizable look was back again in Gatsby’s face.\n\n“That drug-store business was just small change,” continued Tom slowly, “but\nyou’ve got something on now that Walter’s afraid to tell me about.”\n\nI glanced at Daisy, who was staring terrified between Gatsby and her husband,\nand at Jordan, who had begun to balance an invisible but absorbing object on the\ntip of her chin. Then I turned back to Gatsby—and was startled at his\nexpression. He looked—and this is said in all contempt for the babbled slander\nof his garden—as if he had “killed a man.” For a moment the set of his face\ncould be described in just that fantastic way.\n\nIt passed, and he began to talk excitedly to Daisy, denying everything,\ndefending his name against accusations that had not been made. But with every\nword she was drawing further and further into herself, so he gave that up, and\nonly the dead dream fought on as the afternoon slipped away, trying to touch\nwhat was no longer tangible, struggling unhappily, undespairingly, toward that\nlost voice across the room.\n\nThe voice begged again to go.\n\n“Please, Tom! I can’t stand this any more.”\n\nHer frightened eyes told that whatever intentions, whatever courage she had had,\nwere definitely gone.\n\n“You two start on home, Daisy,” said Tom. “In Mr. Gatsby’s car.”\n\nShe looked at Tom, alarmed now, but he insisted with magnanimous scorn.\n\n“Go on. He won’t annoy you. I think he realizes that his presumptuous little\nflirtation is over.”\n\nThey were gone, without a word, snapped out, made accidental, isolated, like\nghosts, even from our pity.\n\nAfter a moment Tom got up and began wrapping the unopened bottle of whiskey in\nthe towel.\n\n“Want any of this stuff? Jordan? . . . Nick?”\n\nI didn’t answer.\n\n“Nick?” He asked again.\n\n“What?”\n\n“Want any?”\n\n“No . . . I just remembered that to-day’s my birthday.”\n\nI was thirty. Before me stretched the portentous, menacing road of a new decade.\n\nIt was seven o’clock when we got into the coupé with him and started for Long\nIsland. Tom talked incessantly, exulting and laughing, but his voice was as\nremote from Jordan and me as the foreign clamor on the sidewalk or the tumult of\nthe elevated overhead. Human sympathy has its limits, and we were content to let\nall their tragic arguments fade with the city lights behind. Thirty—the promise\nof a decade of loneliness, a thinning list of single men to know, a thinning\nbrief-case of enthusiasm, thinning hair. But there was Jordan beside me, who,\nunlike Daisy, was too wise ever to carry well-forgotten dreams from age to age.\nAs we passed over the dark bridge her wan face fell lazily against my coat’s\nshoulder and the formidable stroke of thirty died away with the reassuring\npressure of her hand.\n\nSo we drove on toward death through the cooling twilight.\n\nThe young Greek, Michaelis, who ran the coffee joint beside the ashheaps was the\nprincipal witness at the inquest. He had slept through the heat until after\nfive, when he strolled over to the garage, and found George Wilson sick in his\noffice—really sick, pale as his own pale hair and shaking all over. Michaelis\nadvised him to go to bed, but Wilson refused, saying that he’d miss a lot of\nbusiness if he did. While his neighbor was trying to persuade him a violent\nracket broke out overhead.\n\n“I’ve got my wife locked in up there,” explained Wilson calmly. “She’s going to\nstay there till the day after to-morrow, and then we’re going to move away.”\n\nMichaelis was astonished; they had been neighbors for four years, and Wilson had\nnever seemed faintly capable of such a statement. Generally he was one of these\nworn-out men: when he wasn’t working, he sat on a chair in the doorway and\nstared at the people and the cars that passed along the road. When any one spoke\nto him he invariably laughed in an agreeable, colorless way. He was his wife’s\nman and not his own.\n\nSo naturally Michaelis tried to find out what had happened, but Wilson wouldn’t\nsay a word—instead he began to throw curious, suspicious glances at his visitor\nand ask him what he’d been doing at certain times on certain days. Just as the\nlatter was getting uneasy, some workmen came past the door bound for his\nrestaurant, and Michaelis took the opportunity to get away, intending to come\nback later. But he didn’t. He supposed he forgot to, that’s all. When he came\noutside again, a little after seven, he was reminded of the conversation because\nhe heard Mrs. Wilson’s voice, loud and scolding, down-stairs in the garage.\n\n“Beat me!” he heard her cry. “Throw me down and beat me, you dirty little\ncoward!”\n\nA moment later she rushed out into the dusk, waving her hands and\nshouting—before he could move from his door the business was over.\n\nThe “death car” as the newspapers called it, didn’t stop; it came out of the\ngathering darkness, wavered tragically for a moment, and then disappeared around\nthe next bend. Mavromichaelis wasn’t even sure of its color—he told the first\npoliceman that it was light green. The other car, the one going toward New York,\ncame to rest a hundred yards beyond, and it’s driver hurried back to where\nMyrtle Wilson, her life violently extinguished, knelt in the road and mingled\nher thick dark blood with the dust.\n\nMichaelis and this man reached her first, but when they had torn open her\nshirtwaist, still damp with perspiration, they saw that her left breast was\nswinging loose like a flap, and there was no need to listen for the heart\nbeneath. The mouth was wide open and ripped a little at the corners, as though\nshe had choked a little in giving up the tremendous vitality she had stored so\nlong.\n\nWe saw the three or four automobiles and the crowd when we were still some\ndistance away\n\n“Wreck!” said Tom. “That’s good. Wilson’ll have a little business at last.”\n\nHe slowed down, but still without any intention of stopping, until, as we came\nnearer, the hushed, intent faces of the people at the garage door made him\nautomatically put on the brakes.\n\n“We'll take a look,” he said doubtfully, “just a look.”\n\nI became aware now of a hollow, wailing sound which issued incessantly from the\ngarage, a sound which as we got out of the coupé and walked toward the door\nresolved itself into the words “Oh, my God!” uttered over and over in a gasping\nmoan.\n\n“There’s some bad trouble here,” said Tom excitedly.\n\nHe reached up on tiptoes and peered over a circle of heads into the garage,\nwhich was lit only by a yellow light in a swinging metal basket overhead. Then\nhe made a harsh sound in his throat, and with a violent thrusting movement of\nhis powerful arms pushed his way through.\n\nThe circle closed up again with a running murmur of expostulation; it was a\nminute before I could see anything at all. Then new arrivals deranged the line,\nand Jordan and I were pushed suddenly inside.\n\nMyrtle Wilson’s body, wrapped in a blanket, and then in another blanket, as\nthough she suffered from a chill in the hot night, lay on a work-table by the\nwall, and Tom, with his back to us, was bending over it, motionless. Next to him\nstood a motorcycle policeman taking down names with much sweat and correction in\na little book. At first I couldn’t find the source of the high, groaning words\nthat echoed clamorously through the bare garage—then I saw Wilson standing on\nthe raised threshold of his office, swaying back and forth and holding to the\ndoorposts with both hands. Some man was talking to him in a low voice and\nattempting, from time to time, to lay a hand on his shoulder, but Wilson neither\nheard nor saw. His eyes would drop slowly from the swinging light to the laden\ntable by the wall, and then jerk back to the light again, and he gave out\nincessantly his high, horrible call:\n\n“Oh, my Ga-od! Oh, my Ga-od! Oh, Ga-od! Oh, my Ga-od!”\n\nPresently Tom lifted his head with a jerk and, after staring around the garage\nwith glazed eyes, addressed a mumbled incoherent remark to the policeman.\n\n“M-a-v—” the policeman was saying, “—o———”\n\n“No, r—” corrected the man, “M-a-v-r-o———”\n\n“Listen to me!” muttered Tom fiercely.\n\n“r—” said the policeman, “o———”\n\n“g———”\n\n“g—” He looked up as Tom’s broad hand fell sharply on his shoulder. “What you\nwant, fella?”\n\n“What happened?—that’s what I want to know.”\n\n“Auto hit her. Ins’antly killed.”\n\n“Instantly killed,” repeated Tom, staring.\n\n“She ran out ina road. Son-of-a-bitch didn’t even stopus car.”\n\n“There was two cars,” said Michaelis, “one comin’, one goin’, see?”\n\n“Going where?” asked the policeman keenly.\n\n“One goin’ each way. Well, she”—his hand rose toward the blankets but stopped\nhalf way and fell to his side—“she ran out there an’ the one comin’ from N’York\nknock right into her, goin’ thirty or forty miles an hour.”\n\n“What’s the name of this place here?” demanded the officer.\n\n“Hasn’t got any name.”\n\nA pale well-dressed negro stepped near.\n\n“It was a yellow car,” he said, “big yellow car. New.”\n\n“See the accident?” asked the policeman.\n\n“No, but the car passed me down the road, going faster’n forty. Going fifty,\nsixty.”\n\n“Come here and let’s have your name. Look out now. I want to get his name.”\n\nSome words of this conversation must have reached Wilson, swaying in the office\ndoor, for suddenly a new theme found voice among his gasping cries:\n\n“You don’t have to tell me what kind of car it was! I know what kind of car it\nwas!”\n\nWatching Tom, I saw the wad of muscle back of his shoulder tighten under his\ncoat. He walked quickly over to Wilson and, standing in front of him seized him,\nfirmly by the upper arms.\n\n“You've got to pull yourself together,” he said with soothing gruffness.\n\nWilson’s eyes fell upon Tom; he started up on his tiptoes and then would have\ncollapsed to his knees had not Tom held him upright.\n\n“Listen,” said Tom, shaking him a little. “I just got here a minute ago, from\nNew York. I was bringing you that coupé we’ve been talking about. That yellow\ncar I was driving this afternoon wasn’t mine—do you hear? I haven’t seen it all\nafternoon.”\n\nOnly the negro and I were near enough to hear what he said, but the policeman\ncaught something in the tone and looked over with truculent eyes.\n\n“What’s all that?” he demanded.\n\n“I’m a friend of his.” Tom turned his head but kept his hands firm on Wilson’s\nbody. “He says he knows the car that did it. . . . It was a yellow car.”\n\nSome dim impulse moved the policeman to look suspiciously at Tom.\n\n“And what color’s your car?”\n\n“It’s a blue car, a coupé.”\n\n“We've come straight from New York,” I said.\n\nSome one who had been driving a little behind us confirmed this, and the\npoliceman turned away.\n\n“Now, if you'll let me have that name again correct———”\n\nPicking up Wilson like a doll, Tom carried him into the office, set him down in\na chair, and came back.\n\n“If somebody’ll come here and sit with him,” he snapped authoritatively. He\nwatched while the two men standing closest glanced at each other and went\nunwillingly into the room. Then Tom shut the door on them and came down the\nsingle step, his eyes avoiding the table. As he passed close to me he whispered:\n“Let’s get out.”\n\nSelf-consciously, with his authoritative arms breaking the way, we pushed\nthrough the still gathering crowd, passing a hurried doctor, case in hand, who\nhad been sent for in wild hope half an hour ago.\n\nTom drove slowly until we were beyond the bend—then his foot came down hard, and\nthe coupé raced along through the night. In a little while I heard a low husky\nsob, and saw that the tears were overflowing down his face.\n\n“The God damned coward!” he whimpered. “He didn’t even stop his car.”\n\nThe Buchanans’ house floated suddenly toward us through the dark rustling trees.\nTom stopped beside the porch and looked up at the second floor, where two\nwindows bloomed with light among the vines.\n\n“Daisy’s home,” he said. As we got out of the car he glanced at me and frowned\nslightly.\n\n“I ought to have dropped you in West Egg, Nick. There’s nothing we can do\nto-night.”\n\nA change had come over him, and he spoke gravely, and with decision. As we\nwalked across the moonlight gravel to the porch he disposed of the situation in\na few brisk phrases.\n\n“I’ll telephone for a taxi to take you home, and while you’re waiting you and\nJordan better go in the kitchen and have them get you some supper—if you want\nany.” He opened the door. “Come in.”\n\n“No, thanks. But I’d be glad if you’d order me the taxi. I’ll wait outside.”\n\nJordan put her hand on my arm.\n\n“Won’t you come in, Nick?”\n\n“No, thanks.”\n\nI was feeling a little sick and I wanted to be alone. But Jordan lingered for a\nmoment more.\n\n“It’s only half-past nine,” she said.\n\nI’d be damned if I’d go in; I’d had enough of all of them for one day, and\nsuddenly that included Jordan too. She must have seen something of this in my\nexpression, for she turned abruptly away and ran up the porch steps into the\nhouse. I sat down for a few minutes with my head in my hands, until I heard the\nphone taken up inside and the butler’s voice calling a taxi. Then I walked\nslowly down the drive away from the house, intending to wait by the gate.\n\nI hadn’t gone twenty yards when I heard my name and Gatsby stepped from between\ntwo bushes into the path. I must have felt pretty weird by that time, because I\ncould think of nothing except the luminosity of his pink suit under the moon.\n\n“What are you doing?” I inquired.\n\n“Just standing here, old sport.”\n\nSomehow, that seemed a despicable occupation. For all I knew he was going to rob\nthe house in a moment; I wouldn’t have been surprised to see sinister faces, the\nfaces of “Wolfshiem’s people,” behind him in the dark shrubbery.\n\n“Did you see any trouble on the road?” he asked after a minute.\n\n“Yes.”\n\nHe hesitated.\n\n“Was she killed?”\n\n“Yes.”\n\n“I thought so; I told Daisy I thought so. It’s better that the shock should all\ncome at once. She stood it pretty well.”\n\nHe spoke as if Daisy’s reaction was the only thing that mattered.\n\n“I got to West Egg by a side road,” he went on, “and left the car in my garage.\nI don’t think anybody saw us, but of course I can’t be sure.”\n\nI disliked him so much by this time that I didn’t find it necessary to tell him\nhe was wrong.\n\n“Who was the woman?” he inquired.\n\n“Her name was Wilson. Her husband owns the garage. How the devil did it happen?”\n\n“Well, I tried to swing the wheel—” He broke off, and suddenly I guessed at the\ntruth.\n\n“Was Daisy driving?”\n\n“Yes,” he said after a moment, “but of course I'll say I was. You see, when we\nleft New York she was very nervous and she thought it would steady her to\ndrive—and this woman rushed out at us just as we were passing a car coming the\nother way. It all happened in a minute, but it seemed to me that she wanted to\nspeak to us, thought we were somebody she knew. Well, first Daisy turned away\nfrom the woman toward the other car, and then she lost her nerve and turned\nback. The second my hand reached the wheel I felt the shock—it must have killed\nher instantly.”\n\n“It ripped her open———”\n\n“Don’t tell me, old sport.” He winced. “Anyhow—Daisy stepped on it. I tried to\nmake her stop, but she couldn’t, so I pulled on the emergency brake. Then she\nfell over into my lap and I drove on.\n\n“She'll be all right to-morrow,” he said presently. “I’m just going to wait here\nand see if he tries to bother her about that unpleasantness this afternoon.\nShe’s locked herself into her room, and if he tries any brutality she’s going to\nturn the light out and on again.”\n\n“He won’t touch her,” I said. “He’s not thinking about her.”\n\n“I don’t trust him, old sport.”\n\n“How long are you going to wait?”\n\n“All night, if necessary. Anyhow, till they all go to bed.”\n\nA new point of view occurred to me. Suppose Tom found out that Daisy had been\ndriving. He might think he saw a connection in it—he might think anything. I\nlooked at the house; there were two or three bright windows down-stairs and the\npink glow from Daisy’s room on the second floor.\n\n“You wait here,” I said. “I’ll see if there’s any sign of a commotion.”\n\nI walked back along the border of the lawn, traversed the gravel softly, and\ntiptoed up the veranda steps. The drawing-room curtains were open, and I saw\nthat the room was empty. Crossing the porch where we had dined that June night\nthree months before, I came to a small rectangle of light which I guessed was\nthe pantry window. The blind was drawn, but I found a rift at the sill.\n\nDaisy and Tom were sitting opposite each other at the kitchen table, with a\nplate of cold fried chicken between them, and two bottles of ale. He was talking\nintently across the table at her, and in his earnestness his hand had fallen\nupon and covered her own. Once in a while she looked up at him and nodded in\nagreement.\n\nThey weren’t happy, and neither of them had touched the chicken or the ale—and\nyet they weren’t unhappy either. There was an unmistakable air of natural\nintimacy about the picture, and anybody would have said that they were\nconspiring together.\n\nAs I tiptoed from the porch I heard my taxi feeling its way along the dark road\ntoward the house. Gatsby was waiting where I had left him in the drive.\n\n“Is it all quiet up there?” he asked anxiously.\n\n“Yes, it’s all quiet.” I hesitated. “You’d better come home and get some sleep.”\n\nHe shook his head.\n\n“I want to wait here till Daisy goes to bed. Good night, old sport.”\n\nHe put his hands in his coat pockets and turned back eagerly to his scrutiny of\nthe house, as though my presence marred the sacredness of the vigil. So I walked\naway and left him standing there in the moonlight—watching over nothing.\n\n## CHAPTER VIII\n\nI couldn’t sleep all night; a fog-horn was groaning incessantly on the Sound,\nand I tossed half-sick between grotesque reality and savage, frightening dreams.\nToward dawn I heard a taxi go up Gatsby’s drive, and immediately I jumped out of\nbed and began to dress—I felt that I had something to tell him, something to\nwarn him about, and morning would be too late.\n\nCrossing his lawn, I saw that his front door was still open and he was leaning\nagainst a table in the hall, heavy with dejection or sleep.\n\n“Nothing happened,” he said wanly. “I waited, and about four o’clock she came to\nthe window and stood there for a minute and then turned out the light.”\n\nHis house had never seemed so enormous to me as it did that night when we hunted\nthrough the great rooms for cigarettes. We pushed aside curtains that were like\npavilions, and felt over innumerable feet of dark wall for electric light\nswitches—once I tumbled with a sort of splash upon the keys of a ghostly piano.\nThere was an inexplicable amount of dust everywhere, and the rooms were musty,\nas though they hadn’t been aired for many days. I found the humidor on an\nunfamiliar table, with two stale, dry cigarettes inside. Throwing open the\nFrench windows of the drawing-room, we sat smoking out into the darkness.\n\n“You ought to go away,” I said. “It’s pretty certain they'll trace your car.”\n\n“Go away now, old sport?”\n\n“Go to Atlantic City for a week, or up to Montreal.”\n\nHe wouldn’t consider it. He couldn’t possibly leave Daisy until he knew what she\nwas going to do. He was clutching at some last hope and I couldn’t bear to shake\nhim free.\n\nIt was this night that he told me the strange story of his youth with Dan\nCody—told it to me because “Jay Gatsby” had broken up like glass against Tom’s\nhard malice, and the long secret extravaganza was played out. I think that he\nwould have acknowledged anything now, without reserve, but he wanted to talk\nabout Daisy.\n\nShe was the first “nice” girl he had ever known. In various unrevealed\ncapacities he had come in contact with such people, but always with\nindiscernible barbed wire between. He found her excitingly desirable. He went to\nher house, at first with other officers from Camp Taylor, then alone. It amazed\nhim—he had never been in such a beautiful house before. But what gave it an air\nof breathless intensity, was that Daisy lived there—it was as casual a thing to\nher as his tent out at camp was to him. There was a ripe mystery about it, a\nhint of bedrooms up-stairs more beautiful and cool than other bedrooms, of gay\nand radiant activities taking place through its corridors, and of romances that\nwere not musty and laid away already in lavender but fresh and breathing and\nredolent of this year’s shining motor-cars and of dances whose flowers were\nscarcely withered. It excited him, too, that many men had already loved Daisy—it\nincreased her value in his eyes. He felt their presence all about the house,\npervading the air with the shades and echoes of still vibrant emotions.\n\nBut he knew that he was in Daisy’s house by a colossal accident. However\nglorious might be his future as Jay Gatsby, he was at present a penniless young\nman without a past, and at any moment the invisible cloak of his uniform might\nslip from his shoulders. So he made the most of his time. He took what he could\nget, ravenously and unscrupulously—eventually he took Daisy one still October\nnight, took her because he had no real right to touch her hand.\n\nHe might have despised himself, for he had certainly taken her under false\npretenses. I don’t mean that he had traded on his phantom millions, but he had\ndeliberately given Daisy a sense of security; he let her believe that he was a\nperson from much the same strata as herself—that he was fully able to take care\nof her. As a matter of fact, he had no such facilities—he had no comfortable\nfamily standing behind him, and he was liable at the whim of an impersonal\ngovernment to be blown anywhere about the world.\n\nBut he didn’t despise himself and it didn’t turn out as he had imagined. He had\nintended, probably, to take what he could and go—but now he found that he had\ncommitted himself to the following of a grail. He knew that Daisy was\nextraordinary, but he didn’t realize just how extraordinary a “nice” girl could\nbe. She vanished into her rich house, into her rich, full life, leaving\nGatsby—nothing. He felt married to her, that was all.\n\nWhen they met again, two days later, it was Gatsby who was breathless, who was,\nsomehow, betrayed. Her porch was bright with the bought luxury of star-shine;\nthe wicker of the settee squeaked fashionably as she turned toward him and he\nkissed her curious and lovely mouth. She had caught a cold, and it made her\nvoice huskier and more charming than ever, and Gatsby was overwhelmingly aware\nof the youth and mystery that wealth imprisons and preserves, of the freshness\nof many clothes, and of Daisy, gleaming like silver, safe and proud above the\nhot struggles of the poor.\n\n“I can’t describe to you how surprised I was to find out I loved her, old sport.\nI even hoped for a while that she’d throw me over, but she didn’t, because she\nwas in love with me too. She thought I knew a lot because I knew different\nthings from her . . . Well, there I was, ’way off my ambitions, getting deeper\nin love every minute, and all of a sudden I didn’t care. What was the use of\ndoing great things if I could have a better time telling her what I was going to\ndo?”\n\nOn the last afternoon before he went abroad, he sat with Daisy in his arms for a\nlong, silent time. It was a cold fall day, with fire in the room and her cheeks\nflushed. Now and then she moved and he changed his arm a little, and once he\nkissed her dark shining hair. The afternoon had made them tranquil for a while,\nas if to give them a deep memory for the long parting the next day promised.\nThey had never been closer in their month of love, nor communicated more\nprofoundly one with another, than when she brushed silent lips against his\ncoat’s shoulder or when he touched the end of her fingers, gently, as though she\nwere asleep.\n\nHe did extraordinarily well in the war. He was a captain before he went to the\nfront, and following the Argonne battles he got his majority and the command of\nthe divisional machine-guns. After the armistice he tried frantically to get\nhome, but some complication or misunderstanding sent him to Oxford instead. He\nwas worried now—there was a quality of nervous despair in Daisy’s letters. She\ndidn’t see why he couldn’t come. She was feeling the pressure of the world\noutside, and she wanted to see him and feel his presence beside her and be\nreassured that she was doing the right thing after all.\n\nFor Daisy was young and her artificial world was redolent of orchids and\npleasant, cheerful snobbery and orchestras which set the rhythm of the year,\nsumming up the sadness and suggestiveness of life in new tunes. All night the\nsaxophones wailed the hopeless comment of the “Beale Street Blues” while a\nhundred pairs of golden and silver slippers shuffled the shining dust. At the\ngray tea hour there were always rooms that throbbed incessantly with this low,\nsweet fever, while fresh faces drifted here and there like rose petals blown by\nthe sad horns around the floor.\n\nThrough this twilight universe Daisy began to move again with the season;\nsuddenly she was again keeping half a dozen dates a day with half a dozen men,\nand drowsing asleep at dawn with the beads and chiffon of an evening dress\ntangled among dying orchids on the floor beside her bed. And all the time\nsomething within her was crying for a decision. She wanted her life shaped now,\nimmediately—and the decision must be made by some force—of love, of money, of\nunquestionable practicality—that was close at hand.\n\nThat force took shape in the middle of spring with the arrival of Tom Buchanan.\nThere was a wholesome bulkiness about his person and his position, and Daisy was\nflattered. Doubtless there was a certain struggle and a certain relief. The\nletter reached Gatsby while he was still at Oxford.\n\nIt was dawn now on Long Island and we went about opening the rest of the windows\ndown-stairs, filling the house with gray-turning, gold-turning light. The shadow\nof a tree fell abruptly across the dew and ghostly birds began to sing among the\nblue leaves. There was a slow, pleasant movement in the air, scarcely a wind,\npromising a cool, lovely day.\n\n“I don’t think she ever loved him.” Gatsby turned around from a window and\nlooked at me challengingly. “You must remember, old sport, she was very excited\nthis afternoon. He told her those things in a way that frightened her—that made\nit look as if I was some kind of cheap sharper. And the result was she hardly\nknew what she was saying.”\n\nHe sat down gloomily.\n\n“Of course she might have loved him just for a minute, when they were first\nmarried—and loved me more even then, do you see?”\n\nSuddenly he came out with a curious remark.\n\n“In any case,” he said, “it was just personal.”\n\nWhat could you make of that, except to suspect some intensity in his conception\nof the affair that couldn’t be measured?\n\nHe came back from France when Tom and Daisy were still on their wedding trip,\nand made a miserable but irresistible journey to Louisville on the last of his\narmy pay. He stayed there a week, walking the streets where their footsteps had\nclicked together through the November night and revisiting the out-of-the-way\nplaces to which they had driven in her white car. Just as Daisy’s house had\nalways seemed to him more mysterious and gay than other houses, so his idea of\nthe city itself, even though she was gone from it, was pervaded with a\nmelancholy beauty.\n\nHe left feeling that if he had searched harder, he might have found her—that he\nwas leaving her behind. The day-coach—he was penniless now—was hot. He went out\nto the open vestibule and sat down on a folding-chair, and the station slid away\nand the backs of unfamiliar buildings moved by. Then out into the spring fields,\nwhere a yellow trolley raced them for a minute with people in it who might once\nhave seen the pale magic of her face along the casual street.\n\nThe track curved and now it was going away from the sun, which, as it sank\nlower, seemed to spread itself in benediction over the vanishing city where she\nhad drawn her breath. He stretched out his hand desperately as if to snatch only\na wisp of air, to save a fragment of the spot that she had made lovely for him.\nBut it was all going by too fast now for his blurred eyes and he knew that he\nhad lost that part of it, the freshest and the best, forever.\n\nIt was nine o’clock when we finished breakfast and went out on the porch. The\nnight had made a sharp difference in the weather and there was an autumn flavor\nin the air. The gardener, the last one of Gatsby’s former servants, came to the\nfoot of the steps.\n\n“I’m going to drain the pool to-day, Mr. Gatsby. Leaves’ll start falling pretty\nsoon, and then there’s always trouble with the pipes.”\n\n“Don’t do it to-day,” Gatsby answered. He turned to me apologetically. “You\nknow, old sport, I’ve never used that pool all summer?”\n\nI looked at my watch and stood up.\n\n“Twelve minutes to my train,”\n\nI didn’t want to go to the city. I wasn’t worth a decent stroke of work, but it\nwas more than that—I didn’t want to leave Gatsby. I missed that train, and then\nanother, before I could get myself away.\n\n“I’ll call you up,” I said finally.\n\n“Do, old sport.”\n\n“I’ll call you about noon.”\n\nWe walked slowly down the steps.\n\n“I suppose Daisy’ll call too.” He looked at me anxiously, as if he hoped I’d\ncorroborate this.\n\n“I suppose so.”\n\n“Well, good-by.”\n\nWe shook hands and I started away. Just before I reached the hedge I remembered\nsomething and turned around.\n\n“They’re a rotten crowd,” I shouted across the lawn. “You’re worth the whole\ndamn bunch put together.”\n\nI’ve always been glad I said that. It was the only compliment I ever gave him,\nbecause I disapproved of him from beginning to end. First he nodded politely,\nand then his face broke into that radiant and understanding smile, as if we’d\nbeen in ecstatic cahoots on that fact all the time. His gorgeous pink rag of a\nsuit made a bright spot of color against the white steps, and I thought of the\nnight when I first came to his ancestral home, three months before. The lawn and\ndrive had been crowded with the faces of those who guessed at his corruption—and\nhe had stood on those steps, concealing his incorruptible dream, as he waved\nthem good-by.\n\nI thanked him for his hospitality. We were always thanking him for that—I and\nthe others.\n\n“Good-by,” I called. “I enjoyed breakfast, Gatsby.”\n\nUp in the city, I tried for a while to list the quotations on an interminable\namount of stock, then I fell asleep in my swivel-chair. Just before noon the\nphone woke me, and I started up with sweat breaking out on my forehead. It was\nJordan Baker; she often called me up at this hour because the uncertainty of her\nown movements between hotels and clubs and private houses made her hard to find\nin any other way. Usually her voice came over the wire as something fresh and\ncool, as if a divot from a green golf-links had come sailing in at the office\nwindow, but this morning it seemed harsh and dry.\n\n“I’ve left Daisy’s house,” she said. “I’m at Hempstead, and I’m going down to\nSouthampton this afternoon.”\n\nProbably it had been tactful to leave Daisy’s house, but the act annoyed me, and\nher next remark made me rigid.\n\n“You weren’t so nice to me last night.”\n\n“How could it have mattered then?”\n\nSilence for a moment. Then:\n\n“However—I want to see you.”\n\n“I want to see you, too.”\n\n“Suppose I don’t go to Southampton, and come into town this afternoon?”\n\n“No—I don’t think this afternoon.”\n\n“Very well.”\n\n“It’s impossible this afternoon. Various———”\n\nWe talked like that for a while, and then abruptly we weren’t talking any\nlonger. I don’t know which of us hung up with a sharp click, but I know I didn’t\ncare. I couldn’t have talked to her across a tea-table that day if I never\ntalked to her again in this world.\n\nI called Gatsby’s house a few minutes later, but the line was busy. I tried four\ntimes; finally an exasperated central told me the wire was being kept open for\nlong distance from Detroit. Taking out my time-table, I drew a small circle\naround the three-fifty train. Then I leaned back in my chair and tried to think.\nIt was just noon.\n\nWhen I passed the ashheaps on the train that morning I had crossed deliberately\nto the other side of the car. I supposed there’d be a curious crowd around there\nall day with little boys searching for dark spots in the dust, and some\ngarrulous man telling over and over what had happened, until it became less and\nless real even to him and he could tell it no longer, and Myrtle Wilson’s tragic\nachievement was forgotten. Now I want to go back a little and tell what happened\nat the garage after we left there the night before.\n\nThey had difficulty in locating the sister, Catherine. She must have broken her\nrule against drinking that night, for when she arrived she was stupid with\nliquor and unable to understand that the ambulance had already gone to Flushing.\nWhen they convinced her of this, she immediately fainted, as if that was the\nintolerable part of the affair. Some one, kind or curious, took her in his car\nand drove her in the wake of her sister’s body.\n\nUntil long after midnight a changing crowd lapped up against the front of the\ngarage, while George Wilson rocked himself back and forth on the couch inside.\nFor a while the door of the office was open, and every one who came into the\ngarage glanced irresistibly through it. Finally some one said it was a shame,\nand closed the door. Michaelis and several other men were with him; first, four\nor five men, later two or three men. Still later Michaelis had to ask the last\nstranger to wait there fifteen minutes longer, while he went back to his own\nplace and made a pot of coffee. After that, he stayed there alone with Wilson\nuntil dawn.\n\nAbout three o’clock the quality of Wilson’s incoherent muttering changed—he grew\nquieter and began to talk about the yellow car. He announced that he had a way\nof finding out whom the yellow car belonged to, and then he blurted out that a\ncouple of months ago his wife had come from the city with her face bruised and\nher nose swollen.\n\nBut when he heard himself say this, he flinched and began to cry “Oh, my God!”\nagain in his groaning voice. Michaelis made a clumsy attempt to distract him.\n\n“How long have you been married, George? Come on there, try and sit still a\nminute and answer my question. How long have you been married?”\n\n“Twelve years.”\n\n“Ever had any children? Come on, George, sit still—I asked you a question. Did\nyou ever have any children?”\n\nThe hard brown beetles kept thudding against the dull light, and whenever\nMichaelis heard a car go tearing along the road outside it sounded to him like\nthe car that hadn’t stopped a few hours before. He didn’t like to go into the\ngarage, because the work bench was stained where the body had been lying, so he\nmoved uncomfortably around the office—he knew every object in it before\nmorning—and from time to time sat down beside Wilson trying to keep him more\nquiet.\n\n“Have you got a church you go to sometimes, George? Maybe even if you haven’t\nbeen there for a long time? Maybe I could call up the church and get a priest to\ncome over and he could talk to you, see?”\n\n“Don’t belong to any.”\n\n“You ought to have a church, George, for times like this. You must have gone to\nchurch once. Didn’t you get married in a church? Listen, George, listen to me.\nDidn’t you get married in a church?”\n\n“That was a long time ago.”\n\nThe effort of answering broke the rhythm of his rocking—for a moment he was\nsilent. Then the same half-knowing, half-bewildered look came back into his\nfaded eyes.\n\n“Look in the drawer there,” he said, pointing at the desk.\n\n“Which drawer?”\n\n“That drawer—that one.”\n\nMichaelis opened the drawer nearest his hand. There was nothing in it but a\nsmall, expensive dog-leash, made of leather and braided silver. It was\napparently new.\n\n“This?” he inquired, holding it up.\n\nWilson stared and nodded.\n\n“I found it yesterday afternoon. She tried to tell me about it, but I knew it\nwas something funny.”\n\n“You mean your wife bought it?”\n\n“She had it wrapped in tissue paper on her bureau.”\n\nMichaelis didn’t see anything odd in that, and he gave Wilson a dozen reasons\nwhy his wife might have bought the dog-leash. But conceivably Wilson had heard\nsome of these same explanations before, from Myrtle, because he began saying\n“Oh, my God!” again in a whisper—his comforter left several explanations in the\nair.\n\n“Then he killed her,” said Wilson. His mouth dropped open suddenly.\n\n“Who did?”\n\n“I have a way of finding out.”\n\n“You’re morbid, George,” said his friend. “This has been a strain to you and you\ndon’t know what you're saying. You’d better try and sit quiet till morning.”\n\n“He murdered her.”\n\n“It was an accident, George.”\n\nWilson shook his head. His eyes narrowed and his mouth widened slightly with the\nghost of a superior “Hm!”\n\n“I know,” he said definitely, “I’m one of these trusting fellas and I don’t\nthink any harm to nobody, but when I get to know a thing I know it. It was the\nman in that car. She ran out to speak to him and he wouldn’t stop.”\n\nMichaelis had seen this too, but it hadn’t occurred to him that there was any\nspecial significance in it. He believed that Mrs. Wilson had been running away\nfrom her husband, rather than trying to stop any particular car.\n\n“How could she of been like that?”\n\n“She’s a deep one,” said Wilson, as if that answered the question. “Ah-h-h———”\n\nHe began to rock again, and Michaelis stood twisting the leash in his hand.\n\n“Maybe you got some friend that I could telephone for, George?”\n\nThis was a forlorn hope—he was almost sure that Wilson had no friend: there was\nnot enough of him for his wife. He was glad a little later when he noticed a\nchange in the room, a blue quickening by the window, and realized that dawn\nwasn’t far off. About five o’clock it was blue enough outside to snap off the\nlight.\n\nWilson’s glazed eyes turned out to the ashheaps, where small gray clouds took on\nfantastic shapes and scurried here and there in the faint dawn wind.\n\n“I spoke to her,” he muttered, after a long silence. “I told her she might fool\nme but she couldn’t fool God. I took her to the window”—with an effort he got up\nand walked to the rear window and leaned with his face pressed against it—“and I\nsaid ‘God knows what you’ve been doing, everything you’ve been doing. You may\nfool me, but you can’t fool God!’”\n\nStanding behind him, Michaelis saw with a shock that he was looking at the eyes\nof Doctor T. J. Eckleburg, which had just emerged, pale and enormous, from the\ndissolving night.\n\n“God sees everything,” repeated Wilson.\n\n“That’s an advertisement,” Michaelis assured him. Something made him turn away\nfrom the window and look back into the room. But Wilson stood there a long time,\nhis face close to the window pane, nodding into the twilight.\n\nBy six o’clock Michaelis was worn out, and grateful for the sound of a car\nstopping outside. It was one of the watchers of the night before who had\npromised to come back, so he cooked breakfast for three, which he and the other\nman ate together. Wilson was quieter now, and Michaelis went home to sleep; when\nhe awoke four hours later and hurried back to the garage, Wilson was gone.\n\nHis movements—he was on foot all the time—were afterward traced to Port\nRoosevelt and then to Gad’s Hill, where he bought a sandwich that he didn’t eat,\nand a cup of coffee. He must have been tired and walking slowly, for he didn’t\nreach Gad’s Hill until noon. Thus far there was no difficulty in accounting for\nhis time—there were boys who had seen a man “acting sort of crazy,” and\nmotorists at whom he stared oddly from the side of the road. Then for three\nhours he disappeared from view. The police, on the strength of what he said to\nMichaelis, that he “had a way of finding out,” supposed that he spent that time\ngoing from garage to garage thereabout, inquiring for a yellow car. On the other\nhand, no garage man who had seen him ever came forward, and perhaps he had an\neasier, surer way of finding out what he wanted to know. By half-past two he was\nin West Egg, where he asked some one the way to Gatsby’s house. So by that time\nhe knew Gatsby’s name.\n\nAt two o’clock Gatsby put on his bathing-suit and left word with the butler that\nif any one phoned word was to be brought to him at the pool. He stopped at the\ngarage for a pneumatic mattress that had amused his guests during the summer,\nand the chauffeur helped him pump it up. Then he gave instructions that the open\ncar wasn’t to be taken out under any circumstances—and this was strange, because\nthe front right fender needed repair.\n\nGatsby shouldered the mattress and started for the pool. Once he stopped and\nshifted it a little, and the chauffeur asked him if he needed help, but he shook\nhis head and in a moment disappeared among the yellowing trees.\n\nNo telephone message arrived, but the butler went without his sleep and waited\nfor it until four o’clock—until long after there was any one to give it to if it\ncame. I have an idea that Gatsby himself didn’t believe it would come, and\nperhaps he no longer cared. If that was true he must have felt that he had lost\nthe old warm world, paid a high price for living too long with a single dream.\nHe must have looked up at an unfamiliar sky through frightening leaves and\nshivered as he found what a grotesque thing a rose is and how raw the sunlight\nwas upon the scarcely created grass. A new world, material without being real,\nwhere poor ghosts, breathing dreams like air, drifted fortuitously about . . .\nlike that ashen, fantastic figure gliding toward him through the amorphous\ntrees.\n\nThe chauffeur—he was one of Wolfshiem’s protégés—heard the shots—afterward he\ncould only say that he hadn’t thought anything much about them. I drove from the\nstation directly to Gatsby’s house and my rushing anxiously up the front steps\nwas the first thing that alarmed any one. But they knew then, I firmly believe.\nWith scarcely a word said, four of us, the chauffeur, butler, gardener, and I,\nhurried down to the pool.\n\nThere was a faint, barely perceptible movement of the water as the fresh flow\nfrom one end urged its way toward the drain at the other. With little ripples\nthat were hardly the shadows of waves, the laden mattress moved irregularly down\nthe pool. A small gust of wind that scarcely corrugated the surface was enough\nto disturb its accidental course with its accidental burden. The touch of a\ncluster of leaves revolved it slowly, tracing, like the leg of transit, a thin\nred circle in the water.\n\nIt was after we started with Gatsby toward the house that the gardener saw\nWilson’s body a little way off in the grass, and the holocaust was complete.\n\n## CHAPTER IX\n\nAfter two years I remember the rest of that day, and that night and the next\nday, only as an endless drill of police and photographers and newspaper men in\nand out of Gatsby’s front door. A rope stretched across the main gate and a\npoliceman by it kept out the curious, but little boys soon discovered that they\ncould enter through my yard, and there were always a few of them clustered\nopen-mouthed about the pool. Some one with a positive manner, perhaps a\ndetective, used the expression “madman” as he bent over Wilson’s body that\nafternoon, and the adventitious authority of his voice set the key for the\nnewspaper reports next morning.\n\nMost of those reports were a nightmare—grotesque, circumstantial, eager, and\nuntrue. When Michaelis’s testimony at the inquest brought to light Wilson’s\nsuspicions of his wife I thought the whole tale would shortly be served up in\nracy pasquinade—but Catherine, who might have said anything, didn’t say a word.\nShe showed a surprising amount of character about it too—looked at the coroner\nwith determined eyes under that corrected brow of hers, and swore that her\nsister had never seen Gatsby, that her sister was completely happy with her\nhusband, that her sister had been into no mischief whatever. She convinced\nherself of it, and cried into her handkerchief, as if the very suggestion was\nmore than she could endure. So Wilson was reduced to a man “deranged by grief”\nin order that the case might remain in its simplest form. And it rested there.\n\nBut all this part of it seemed remote and unessential. I found myself on\nGatsby’s side, and alone. From the moment I telephoned news of the catastrophe\nto West Egg village, every surmise about him, and every practical question, was\nreferred to me. At first I was surprised and confused; then, as he lay in his\nhouse and didn’t move or breathe or speak, hour upon hour, it grew upon me that\nI was responsible, because no one else was interested—interested, I mean, with\nthat intense personal interest to which every one has some vague right at the\nend.\n\nI called up Daisy half an hour after we found him, called her instinctively and\nwithout hesitation. But she and Tom had gone away early that afternoon, and\ntaken baggage with them.\n\n“Left no address?”\n\n“No.”\n\n“Say when they’d be back?”\n\n“No.”\n\n“Any idea where they are? How I could reach them?”\n\n“I don’t know. Can’t say.”\n\nI wanted to get somebody for him. I wanted to go into the room where he lay and\nreassure him: “I’ll get somebody for you, Gatsby. Don’t worry. Just trust me and\nI’ll get somebody for you———”\n\nMeyer Wolfshiem’s name wasn’t in the phone book. The butler gave me his office\naddress on Broadway, and I called Information, but by the time I had the number\nit was long after five, and no one answered the phone.\n\n“Will you ring again?”\n\n“I’ve rung them three times.”\n\n“It’s very important.”\n\n“Sorry. I’m afraid no one’s there.”\n\nI went back to the drawing-room and thought for an instant that they were chance\nvisitors, all these official people who suddenly filled it. But, though they\ndrew back the sheet and looked at Gatsby with shocked eyes, his protest\ncontinued in my brain:\n\n“Look here, old sport, you’ve got to get somebody for me. You’ve got to try\nhard. I can’t go through this alone.”\n\nSome one started to ask me questions, but I broke away and going up-stairs\nlooked hastily through the unlocked parts of his desk—he’d never told me\ndefinitely that his parents were dead. But there was nothing—only the picture of\nDan Cody, a token of forgotten violence, staring down from the wall.\n\nNext morning I sent the butler to New York with a letter to Wolfshiem, which\nasked for information and urged him to come out on the next train. That request\nseemed superfluous when I wrote it. I was sure he’d start when he saw the\nnewspapers, just as I was sure there’d be a wire from Daisy before noon—but\nneither a wire nor Mr. Wolfshiem arrived; no one arrived except more police and\nphotographers and newspaper men. When the butler brought back Wolfshiem’s answer\nI began to have a feeling of defiance, of scornful solidarity between Gatsby and\nme against them all.\n\nDear Mr. Carraway. This has been one of the most terrible shocks of my life to\nme I hardly can believe it that it is true at all. Such a mad act as that man\ndid should make us all think. I cannot come down now as I am tied up in some\nvery important business and cannot get mixed up in this thing now. If there is\nanything I can do a little later let me know in a letter by Edgar. I hardly know\nwhere I am when I hear about a thing like this and am completely knocked down\nand out.\n\n> Yours truly\n>\n> Meyer Wolfshiem\n\nand then hasty addenda beneath:\n\nLet me know about the funeral etc do not know his family at all.\n\nWhen the phone rang that afternoon and Long Distance said Chicago was calling I\nthought this would be Daisy at last. But the connection came through as a man’s\nvoice, very thin and far away.\n\n“This is Slagle speaking . . .”\n\n“Yes?” The name was unfamiliar.\n\n“Hell of a note, isn’t it? Get my wire?”\n\n“There haven’t been any wires.”\n\n“Young Parke’s in trouble,” he said rapidly. “They picked him up when he handed\nthe bonds over the counter. They got a circular from New York giving ’em the\nnumbers just five minutes before. What d’you know about that, hey? You never can\ntell in these hick towns———”\n\n“Hello!” I interrupted breathlessly. “Look here—this isn’t Mr. Gatsby. Mr.\nGatsby’s dead.”\n\nThere was a long silence on the other end of the wire, followed by an\nexclamation . . . then a quick squawk as the connection was broken.\n\nI think it was on the third day that a telegram signed Henry C. Gatz arrived\nfrom a town in Minnesota. It said only that the sender was leaving immediately\nand to postpone the funeral until he came.\n\nIt was Gatsby’s father, a solemn old man, very helpless and dismayed, bundled up\nin a long cheap ulster against the warm September day. His eyes leaked\ncontinuously with excitement, and when I took the bag and umbrella from his\nhands he began to pull so incessantly at his sparse gray beard that I had\ndifficulty in getting off his coat. He was on the point of collapse, so I took\nhim into the music room and made him sit down while I sent for something to eat.\nBut he wouldn’t eat, and the glass of milk spilled from his trembling hand.\n\n“I saw it in the Chicago newspaper,” he said. “It was all in the Chicago\nnewspaper. I started right away.”\n\n“I didn’t know how to reach you.”\n\nHis eyes, seeing nothing, moved ceaselessly about the room.\n\n“It was a madman,” he said. “He must have been mad.”\n\n“Wouldn’t you like some coffee?” I urged him.\n\n“I don’t want anything. I’m all right now, Mr———”\n\n“Carraway.”\n\n“Well, I’m all right now. Where have they got Jimmy?”\n\nI took him into the drawing-room, where his son lay, and left him there. Some\nlittle boys had come up on the steps and were looking into the hall; when I told\nthem who had arrived, they went reluctantly away.\n\nAfter a little while Mr. Gatz opened the door and came out, his mouth ajar, his\nface flushed slightly, his eyes leaking isolated and unpunctual tears. He had\nreached an age where death no longer has the quality of ghastly surprise, and\nwhen he looked around him now for the first time and saw the height and splendor\nof the hall and the great rooms opening out from it into other rooms, his grief\nbegan to be mixed with an awed pride. I helped him to a bedroom up-stairs; while\nhe took off his coat and vest I told him that all arrangements had been deferred\nuntil he came.\n\n“I didn’t know what you’d want, Mr. Gatsby———”\n\n“Gatz is my name.”\n\n“—Mr. Gatz. I thought you might want to take the body West.”\n\nHe shook his head.\n\n“Jimmy always liked it better down East. He rose up to his position in the East.\nWere you a friend of my boy’s, Mr. ———?”\n\n“We were close friends.”\n\n“He had a big future before him, you know. He was only a young man, but he had a\nlot of brain power here.”\n\nHe touched his head impressively, and I nodded.\n\n“If he’d of lived, he’d of been a great man. A man like James J. Hill. He’d of\nhelped build up the country.”\n\n“That’s true,” I said, uncomfortably.\n\nHe fumbled at the embroidered coverlet, trying to take it from the bed, and lay\ndown stiffly—was instantly asleep.\n\nThat night an obviously frightened person called up, and demanded to know who I\nwas before he would give his name.\n\n“This is Mr. Carraway,” I said.\n\n“Oh!” He sounded relieved. “This is Klipspringer.”\n\nI was relieved too, for that seemed to promise another friend at Gatsby’s grave.\nI didn’t want it to be in the papers and draw a sightseeing crowd, so I’d been\ncalling up a few people myself. They were hard to find.\n\n“The funeral’s to-morrow,” I said. “Three o’clock, here at the house. I wish\nyou’d tell anybody who’d be interested.”\n\n“Oh, I will,” he broke out hastily. “Of course I’m not likely to see anybody,\nbut if I do.”\n\nHis tone made me suspicious.\n\n“Of course you’ll be there yourself.”\n\n“Well, I’ll certainly try. What I called up about is———”\n\n“Wait a minute,” I interrupted. “How about saying you’ll come?”\n\n“Well, the fact is—the truth of the matter is that I’m staying with some people\nup here in Greenwich, and they rather expect me to be with them tomorrow. In\nfact, there’s a sort of picnic or something. Of course I’ll do my very best to\nget away.”\n\nI ejaculated an unrestrained “Huh!” and he must have heard me, for he went on\nnervously:\n\n“What I called up about was a pair of shoes I left there. I wonder if it’d be\ntoo much trouble to have the butler send them on. You see, they’re tennis shoes,\nand I’m sort of helpless without them. My address is care of B. F.———”\n\nI didn’t hear the rest of the name, because I hung up the receiver.\n\nAfter that I felt a certain shame for Gatsby—one gentleman to whom I telephoned\nimplied that he had got what he deserved. However, that was my fault, for he was\none of those who used to sneer most bitterly at Gatsby on the courage of\nGatsby’s liquor, and I should have known better than to call him.\n\nThe morning of the funeral I went up to New York to see Meyer Wolfshiem; I\ncouldn’t seem to reach him any other way. The door that I pushed open, on the\nadvice of an elevator boy, was marked “The Swastika Holding Company,” and at\nfirst there didn’t seem to be any one inside. But when I’d shouted “hello”\nseveral times in vain, an argument broke out behind a partition, and presently a\nlovely Jewess appeared at an interior door and scrutinized me with black hostile\neyes.\n\n“Nobody’s in,” she said. “Mr. Wolfshiem’s gone to Chicago.”\n\nThe first part of this was obviously untrue, for some one had begun to whistle\n“The Rosary,” tunelessly, inside.\n\n“Please say that Mr. Carraway wants to see him.”\n\n“I can’t get him back from Chicago, can I?”\n\nAt this moment a voice, unmistakably Wolfshiem’s, called “Stella!” from the\nother side of the door.\n\n“Leave your name on the desk,” she said quickly. “I’ll give it to him when he\ngets back.”\n\n“But I know he’s there.”\n\nShe took a step toward me and began to slide her hands indignantly up and down\nher hips.\n\n“You young men think you can force your way in here any time,” she scolded.\n“We’re getting sick in tired of it. When I say he’s in Chicago, he’s in\nChicago.”\n\nI mentioned Gatsby.\n\n“Oh-h!” She looked at me over again. ‘‘Will you just— What was your name?”\n\nShe vanished. In a moment Meyer Wolfsheim stood solemnly in the doorway, holding\nout both hands. He drew me into his office, remarking in a reverent voice that\nit was a sad time for all of us, and offered me a cigar.\n\n“My memory goes back to when first I met him,” he said. “A young major just out\nof the army and covered over with medals he got in the war. He was so hard up he\nhad to keep on wearing his uniform because he couldn’t buy some regular clothes.\nFirst time I saw him was when he come into Winebrenner’s poolroom at Forty-third\nStreet and asked for a job. He hadn’t eat anything for a couple of days. ‘Come\non have some lunch with me,’ I sid. He ate more than four dollars’ worth of food\nin half an hour.”\n\n“Did you start him in business?” I inquired.\n\n“Start him! I made him.”\n\n“Oh.”\n\n“I raised him up out of nothing, right out of the gutter. I saw right away he\nwas a fine-appearing, gentlemanly young man, and when he told me he was an\nOggsford I knew I could use him good. I got him to join up in the American\nLegion and he used to stand high there. Right off he did some work for a client\nof mine up to Albany. We were so thick like that in everything”—he held up two\nbulbous fingers—“always together.”\n\nI wondered if this partnership had included the World’s Series transaction\nin 1919.\n\n“Now he’s dead,” I said after a moment. “You were his closest friend, so I know\nyou'll want to come to his funeral this afternoon.”\n\n“I’d like to come.”\n\n“Well, come then.”\n\nThe hair in his nostrils quivered slightly, and as he shook his head his eyes\nfilled with tears.\n\n“I can’t do it—I can’t get mixed up in it,” he said.\n\n“There’s nothing to get mixed up in. It’s all over now.”\n\n“When a man gets killed I never like to get mixed up in it in any way. I keep\nout. When I was a young man it was different—if a friend of mine died, no matter\nhow, I stuck with them to the end. You may think that’s sentimental, but I mean\nit—to the bitter end.”\n\nI saw that for some reason of his own he was determined not to come, so I stood\nup.\n\n“Are you a college man?” he inquired suddenly.\n\nFor a moment I thought he was going to suggest a “gonnegtion,” but he only\nnodded and shook my hand.\n\n“Let us learn to show our friendship for a man when he is alive and not after he\nis dead,” he suggested. “After that my own rule is to let everything alone.”\n\nWhen I left his office the sky had turned dark and I got back to West Egg in a\ndrizzle. After changing my clothes I went next door and found Mr. Gatz walking\nup and down excitedly in the hall. His pride in his son and in his son’s\npossessions was continually increasing and now he had something to show me.\n\n“Jimmy sent me this picture.” He took out his wallet with trembling fingers.\n“Look there.”\n\nIt was a photograph of the house, cracked in the corners and dirty with many\nhands. He pointed out every detail to me eagerly. “Look there!” and then sought\nadmiration from my eyes. He had shown it so often that I think it was more real\nto him now than the house itself.\n\n“Jimmy sent it to me. I think it’s a very pretty picture. It shows up well.”\n\n“Very well. Had you seen him lately?”\n\n“He come out to see me two years ago and bought me the house I live in now. Of\ncourse we was broke up when he run off from home, but I see now there was a\nreason for it. He knew he had a big future in front of him. And ever since he\nmade a success he was very generous with me.”\n\nHe seemed reluctant to put away the picture, held it for another minute,\nlingeringly, before my eyes. Then he returned the wallet and pulled from his\npocket a ragged old copy of a book called “Hopalong Cassidy.”\n\n“Look here, this is a book he had when he was a boy. It just shows you.”\n\nHe opened it at the back cover and turned it around for me to see. On the last\nfly-leaf was printed the word SCHEDULE, and the date September 12, 1906. And\nunderneath:\n\n```\nRise from bed\t6.00\ta. m.\nDumbbell exercise and wall-scaling\t6.15–6.30\t„\nStudy electricity, etc.\t7.15–8.15\t„\nWork\t8.30–4.30\tp. m.\nBaseball and sports\t4.30–5.00\t„\nPractice elocution, poise and how to attain it\t5.00–6.00\t„\nStudy needed inventions\t7.00–9.00\t„\n```\n\n> GENERAL RESOLVES\n>\n> No wasting time at Shafters or [a name, indecipherable] No more smokeing or\n> chewing. Bath every other day Read one improving book or magazine per week\n> Save $5.00 [crossed out] $3.00 per week Be better to parents\n\n“I come across this book by accident,” said the old man. “It just shows you,\ndon’t it?”\n\n“It just shows you.”\n\n“Jimmy was bound to get ahead. He always had some resolves like this or\nsomething. Do you notice what he’s got about improving his mind? He was always\ngreat for that. He told me I et like a hog once, and I beat him for it.”\n\nHe was reluctant to close the book, reading each item aloud and then looking\neagerly at me. I think he rather expected me to copy down the list for my own\nuse.\n\nA little before three the Lutheran minister arrived from Flushing, and I began\nto look involuntarily out the windows for other cars. So did Gatsby’s father.\nAnd as the time passed and the servants came in and stood waiting in the hall,\nhis eyes began to blink anxiously, and he spoke of the rain in a worried,\nuncertain way. The minister glanced several times at his watch, so I took him\naside and asked him to wait for half an hour. But it wasn’t any use. Nobody\ncame.\n\nAbout five o’clock our procession of three cars reached the cemetery and stopped\nin a thick drizzle beside the gate—first a motor hearse, horribly black and wet,\nthen Mr. Gatz and the minister and I in the limousine, and a little later four\nor five servants and the postman from West Egg, in Gatsby’s station wagon, all\nwet to the skin. As we started through the gate into the cemetery I heard a car\nstop and then the sound of some one splashing after us over the soggy ground. I\nlooked around. It was the man with owl-eyed glasses whom I had found marvelling\nover Gatsby’s books in the library one night three months before.\n\nI'd never seen him since then. I don’t know how he knew about the funeral, or\neven his name. The rain poured down his thick glasses, and he took them off and\nwiped them to see the protecting canvas unrolled from Gatsby’s grave.\n\nI tried to think about Gatsby then for a moment, but he was already too far\naway, and I could only remember, without resentment, that Daisy hadn’t sent a\nmessage or a flower. Dimly I heard some one murmur “Blessed are the dead that\nthe rain falls on,” and then the owl-eyed man said “Amen to that,” in a brave\nvoice.\n\nWe straggled down quickly through the rain to the cars. Owl-eyes spoke to me by\nthe gate.\n\n“I couldn’t get to the house,” he remarked.\n\n“Neither could anybody else.”\n\n“Go on!” He started. “Why, my God! they used to go there by the hundreds.”\n\nHe took off his glasses and wiped them again, outside and in.\n\n“The poor son-of-a-bitch,” he said.\n\nOne of my most vivid memories is of coming back West from prep school and later\nfrom college at Christmas time. Those who went farther than Chicago would gather\nin the old dim Union Street station at six o’clock of a December evening, with a\nfew Chicago friends, already caught up into their own holiday gayeties, to bid\nthem a hasty good-by. I remember the fur coats of the girls returning from Miss\nThis-or-That’s and the chatter of frozen breath and the hands waving overhead as\nwe caught sight of old acquaintances, and the matchings of invitations: “Are you\ngoing to the Ordways’? the Herseys’? the Schultzes’?” and the long green tickets\nclasped tight in our gloved hands. And last the murky yellow cars of the\nChicago, Milwaukee & St. Paul railroad looking cheerful as Christmas itself on\nthe tracks beside the gate.\n\nWhen we pulled out into the winter night and the real snow, our snow, began to\nstretch out beside us and twinkle against the windows, and the dim lights of\nsmall Wisconsin stations moved by, a sharp wild brace came suddenly into the\nair. We drew in deep breaths of it as we walked back from dinner through the\ncold vestibules, unutterably aware of our identity with this country for one\nstrange hour, before we melted indistinguishably into it again.\n\nThat’s my Middle West—not the wheat or the prairies or the lost Swede towns, but\nthe thrilling returning trains of my youth, and the street lamps and sleigh\nbells in the frosty dark and the shadows of holly wreaths thrown by lighted\nwindows on the snow. I am part of that, a little solemn with the feel of those\nlong winters, a little complacent from growing up in the Carraway house in a\ncity where dwellings are still called through decades by a family’s name. I see\nnow that this has been a story of the West, after all—Tom and Gatsby, Daisy and\nJordan and I, were all Westerners, and perhaps we possessed some deficiency in\ncommon which made us subtly unadaptable to Eastern life.\n\nEven when the East excited me most, even when I was most keenly aware of its\nsuperiority to the bored, sprawling, swollen towns beyond the Ohio, with their\ninterminable inquisitions which spared only the children and the very old—even\nthen it had always for me a quality of distortion. West Egg, especially, still\nfigures in my more fantastic dreams. I see it as a night scene by El Greco: a\nhundred houses, at once conventional and grotesque, crouching under a sullen,\noverhanging sky and a lustreless moon. In the foreground four solemn men in\ndress suits are walking along the sidewalk with a stretcher on which lies a\ndrunken woman in a white evening dress. Her hand, which dangles over the side,\nsparkles cold with jewels. Gravely the men turn in at a house—the wrong house.\nBut no one knows the woman’s name, and no one cares.\n\nAfter Gatsby’s death the East was haunted for me like that, distorted beyond my\neyes’ power of correction. So when the blue smoke of brittle leaves was in the\nair and the wind blew the wet laundry stiff on the line I decided to come back\nhome.\n\nThere was one thing to be done before I left, an awkward, unpleasant thing that\nperhaps had better have been let alone. But I wanted to leave things in order\nand not just trust that obliging and indifferent sea to sweep my refuse away. I\nsaw Jordan Baker and talked over and around what had happened to us together,\nand what had happened afterward to me, and she lay perfectly still, listening,\nin a big chair.\n\nShe was dressed to play golf, and I remember thinking she looked like a good\nillustration, her chin raised a little jauntily, her hair the color of an autumn\nleaf, her face the same brown tint as the fingerless glove on her knee. When I\nhad finished she told me without comment that she was engaged to another man. I\ndoubted that, though there were several she could have married at a nod of her\nhead, but I pretended to be surprised. For just a minute I wondered if I wasn’t\nmaking a mistake, then I thought it all over again quickly and got up to say\ngood-by.\n\n“Nevertheless you did throw me over,” said Jordan suddenly. ‘‘You threw me over\non the telephone. I don’t give a damn about you now, but it was a new experience\nfor me, and I felt a little dizzy for a while.”\n\nWe shook hands.\n\n“Oh, and do you remember”—she added—“a conversation we had once about driving a\ncar?”\n\n“Why—not exactly.”\n\n“You said a bad driver was only safe until she met another bad driver? Well, I\nmet another bad driver, didn’t I? I mean it was careless of me to make such a\nwrong guess. I thought you were rather an honest, straightforward person. I\nthought it was your secret pride.”\n\n“I’m thirty,” I said. “I’m five years too old to lie to myself and call it\nhonor.”\n\nShe didn’t answer. Angry, and half in love with her, and tremendously sorry, I\nturned away.\n\nOne afternoon late in October I saw Tom Buchanan. He was walking ahead of me\nalong Fifth Avenue in his alert, aggressive way, his hands out a little from his\nbody as if to fight off interference, his head moving sharply here and there,\nadapting itself to his restless eyes. Just as I slowed up to avoid overtaking\nhim he stopped and began frowning into the windows of a jewelry store. Suddenly\nhe saw me and walked back, holding out his hand.\n\n“What’s the matter, Nick? Do you object to shaking hands with me?”\n\n“Yes. You know what I think of you.”\n\n“You're crazy, Nick,” he said quickly. “Crazy as hell. I don’t know what’s the\nmatter with you.”\n\n“Tom,” I inquired, “what did you say to Wilson that afternoon?”\n\nHe stared at me without a word, and I knew I had guessed right about those\nmissing hours. I started to turn away, but he took a step after me and grabbed\nmy arm.\n\n“I told him the truth,” he said. “He came to the door while we were getting\nready to leave, and when I sent down word that we weren’t in he tried to force\nhis way up-stairs. He was crazy enough to kill me if I hadn’t told him who owned\nthe car. His hand was on a revolver in his pocket every minute he was in the\nhouse—” He broke off defiantly. “What if I did tell him? That fellow had it\ncoming to him. He threw dust into your eyes just like he did in Daisy’s, but he\nwas a tough one. He ran over Myrtle like you’d run over a dog and never even\nstopped his car.”\n\nThere was nothing I could say, except the one unutterable fact that it wasn’t\ntrue.\n\n“And if you think I didn’t have my share of suffering—look here, when I went to\ngive up that flat and saw that damn box of dog biscuits sitting there on the\nsideboard, I sat down and cried like a baby. By God it was awful—”\n\nI couldn’t forgive him or like him, but I saw that what he had done was, to him,\nentirely justified. It was all very careless and confused. They were careless\npeople, Tom and Daisy—they smashed up things and creatures and then retreated\nback into their money or their vast carelessness, or whatever it was that kept\nthem together, and let other people clean up the mess they had made. . . .\n\nI shook hands with him; it seemed silly not to, for I felt suddenly as though I\nwere talking to a child. Then he went into the jewelry store to buy a pearl\nnecklace—or perhaps only a pair of cuff buttons—rid of my provincial\nsqueamishness forever.\n\nGatsby’s house was still empty when I left—the grass on his lawn had grown as\nlong as mine. One of the taxi drivers in the village never took a fare past the\nentrance gate without stopping for a minute and pointing inside; perhaps it was\nhe who drove Daisy and Gatsby over to East Egg the night of the accident, and\nperhaps he had made a story about it all his own. I didn’t want to hear it and I\navoided him when I got off the train.\n\nI spent my Saturday nights in New York because those gleaming, dazzling parties\nof his were with me so vividly that I could still hear the music and the\nlaughter, faint and incessant, from his garden, and the cars going up and down\nhis drive. One night I did hear a material car there, and saw its lights stop at\nhis front steps. But I didn’t investigate. Probably it was some final guest who\nhad been away at the ends of the earth and didn’t know that the party was over.\n\nOn the last night, with my trunk packed and my car sold to the grocer, I went\nover and looked at that huge incoherent failure of a house once more. On the\nwhite steps an obscene word, scrawled by some boy with a piece of brick, stood\nout clearly in the moonlight, and I erased it, drawing my shoe raspingly along\nthe stone. Then I wandered down to the beach and sprawled out on the sand.\n\nMost of the big shore places were closed now and there were hardly any lights\nexcept the shadowy, moving glow of a ferryboat across the Sound. And as the moon\nrose higher the inessential houses began to melt away until gradually I became\naware of the old island here that flowered once for Dutch sailors’ eyes—a fresh,\ngreen breast of the new world. Its vanished trees, the trees that had made way\nfor Gatsby’s house, had once pandered in whispers to the last and greatest of\nall human dreams; for a transitory enchanted moment man must have held his\nbreath in the presence of this continent, compelled into an esthetic\ncontemplation he neither understood nor desired, face to face for the last time\nin history with something commensurate to his capacity for wonder.\n\nAnd as I sat there brooding on the old, unknown world, I thought of Gatsby’s\nwonder when he first picked out the green light at the end of Daisy’s dock. He\nhad come a long way to this blue lawn, and his dream must have seemed so close\nthat he could hardly fail to grasp it. He did not know that it was already\nbehind him, somewhere back in that vast obscurity beyond the city, where the\ndark fields of the republic rolled on under the night.\n\nGatsby believed in the green light, the orgastic future that year by year\nrecedes before us. It eluded us then, but that’s no matter—to-morrow we will run\nfaster, stretch out our arms farther. . . . And one fine morning———\n\nSo we beat on, boats against the current, borne back ceaselessly into the past.\n"
  },
  {
    "path": "harper-core/tests/text/linters/Alice's Adventures in Wonderland.snap.yml",
    "content": "Lint:    Readability (127 priority)\nMessage: |\n       9 | Alice was beginning to get very tired of sitting by her sister on the bank, and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      10 | of having nothing to do: once or twice she had peeped into the book her sister\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      11 | was reading, but it had no pictures or conversations in it, “and what is the use\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      12 | of a book,” thought Alice “without pictures or conversations?”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 57 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      14 | So she was considering in her own mind (as well as she could, for the hot day\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      15 | made her feel very sleepy and stupid), whether the pleasure of making a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      16 | daisy-chain would be worth the trouble of getting up and picking the daisies,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      17 | when suddenly a White Rabbit with pink eyes ran close by her.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 56 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      21 | be late!” (when she thought it over afterwards, it occurred to her that she\n         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      22 | ought to have wondered at this, but at the time it all seemed quite natural);\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      23 | but when the Rabbit actually took a watch out of its waistcoat-pocket, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      24 | looked at it, and then hurried on, Alice started to her feet, for it flashed\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      25 | across her mind that she had never before seen a rabbit with either a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      26 | waistcoat-pocket, or a watch to take out of it, and burning with curiosity, she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      27 | ran across the field after it, and fortunately was just in time to see it pop\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      28 | down a large rabbit-hole under the hedge.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 109 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      21 | be late!” (when she thought it over afterwards, it occurred to her that she\n         |                                     ^~~~~~~~~~ Did you mean to spell `afterwards` this way?\n      22 | ought to have wondered at this, but at the time it all seemed quite natural);\nSuggest:\n  - Replace with: “afterwords”\n  - Replace with: “afterward”\n  - Replace with: “afterword's”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      39 | next. First, she tried to look down and make out what she was coming to, but it\n         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      40 | was too dark to see anything; then she looked at the sides of the well, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      41 | noticed that they were filled with cupboards and book-shelves; here and there\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      42 | she saw maps and pictures hung upon pegs. She took down a jar from one of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      42 | she saw maps and pictures hung upon pegs. She took down a jar from one of the\n         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      43 | shelves as she passed; it was labelled “ORANGE MARMALADE”, but to her great\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      44 | disappointment it was empty: she did not like to drop the jar for fear of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      45 | killing somebody underneath, so managed to put it into one of the cupboards as\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      46 | she fell past it.\n         | ~~~~~~~~~~~~~~~~~ This sentence is 55 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      43 | shelves as she passed; it was labelled “ORANGE MARMALADE”, but to her great\n         |                               ^~~~~~~~ Did you mean to spell `labelled` this way?\nSuggest:\n  - Replace with: “labeled”\n  - Replace with: “labeler”\n  - Replace with: “labelless”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      54 | I’ve fallen by this time?” she said aloud. “I must be getting somewhere near the\n      55 | centre of the earth. Let me see: that would be four thousand miles down, I\n         | ^~~~~~ Did you mean to spell `centre` this way?\nSuggest:\n  - Replace with: “center”\n  - Replace with: “cent's”\n  - Replace with: “censure”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      55 | centre of the earth. Let me see: that would be four thousand miles down, I\n         |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      56 | think—” (for, you see, Alice had learnt several things of this sort in her\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      57 | lessons in the schoolroom, and though this was not a very good opportunity for\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      58 | showing off her knowledge, as there was no one to listen to her, still it was\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      59 | good practice to say it over) “—yes, that’s about the right distance—but then I\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      60 | wonder what Latitude or Longitude I’ve got to?” (Alice had no idea what Latitude\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 78 words long.\n\n\n\nLint:    Enhancement (31 priority)\nMessage: |\n      57 | lessons in the schoolroom, and though this was not a very good opportunity for\n         |                                                      ^~~~~~~~~ Vocabulary enhancement: use `excellent` instead of `very good`\n      58 | showing off her knowledge, as there was no one to listen to her, still it was\nSuggest:\n  - Replace with: “excellent”\n\n\n\nLint:    Agreement (31 priority)\nMessage: |\n      65 | downward! The Antipathies, I think—” (she was rather glad there was no one\n         |                                                                        ^~~~\n      66 | listening, this time, as it didn’t sound at all the right word) “—but I shall\n         | ~~~~~~~~~ `listening` is a mass noun.\nSuggest:\n  - Replace with: “one piece of listening”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      68 | this New Zealand or Australia?” (and she tried to curtsey as she spoke—fancy\n         |                                                   ^~~~~~~ Did you mean to spell `curtsey` this way?\n      69 | curtseying as you’re falling through the air! Do you think you could manage it?)\nSuggest:\n  - Replace with: “curtsy”\n  - Replace with: “courtesy”\n  - Replace with: “curse”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      68 | this New Zealand or Australia?” (and she tried to curtsey as she spoke—fancy\n      69 | curtseying as you’re falling through the air! Do you think you could manage it?)\n         | ^~~~~~~~~~ Did you mean `curtsying`?\nSuggest:\n  - Replace with: “curtsying”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      74 | again. “Dinah’ll miss me very much to-night, I should think!” (Dinah was the\n         |         ^~~~~~~~ Did you mean `Dinah's`?\nSuggest:\n  - Replace with: “Dinah's”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n      84 | ever eat a bat?” when suddenly, thump! thump! down she came upon a heap of\n         |                                        ^~~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Thump”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n      84 | ever eat a bat?” when suddenly, thump! thump! down she came upon a heap of\n         |                                               ^~~~ This sentence does not start with a capital letter\n      85 | sticks and dry leaves, and the fall was over.\nSuggest:\n  - Replace with: “Down”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      87 | Alice was not a bit hurt, and she jumped up on to her feet in a moment: she\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      88 | looked up, but it was all dark overhead; before her was another long passage,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      89 | and the White Rabbit was still in sight, hurrying down it. There was not a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      96 | There were doors all round the hall, but they were all locked; and when Alice\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      97 | had been all the way down one side and up the other, trying every door, she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      98 | walked sadly down the middle, wondering how she was ever to get out again.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     100 | Suddenly she came upon a little three-legged table, all made of solid glass;\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     101 | there was nothing on it except a tiny golden key, and Alice’s first thought was\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     102 | that it might belong to one of the doors of the hall; but, alas! either the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     102 | that it might belong to one of the doors of the hall; but, alas! either the\n         |                                                                  ^~~~~~ This sentence does not start with a capital letter\n     103 | locks were too large, or the key was too small, but at any rate it would not\nSuggest:\n  - Replace with: “Either”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     104 | open any of them. However, on the second time round, she came upon a low curtain\n         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     105 | she had not noticed before, and behind it was a little door about fifteen inches\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     106 | high: she tried the little golden key in the lock, and to her great delight it\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     107 | fitted!\n         | ~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     111 | loveliest garden you ever saw. How she longed to get out of that dark hall, and\n         |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     112 | wander about among those beds of bright flowers and those cool fountains, but\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     113 | she could not even get her head through the doorway; “and even if my head would\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     114 | go through,” thought poor Alice, “it would be of very little use without my\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     115 | shoulders. Oh, how I wish I could shut up like a telescope! I think I could, if\n         | ~~~~~~~~~~ This sentence is 55 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     120 | There seemed to be no use in waiting by the little door, so she went back to the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     121 | table, half hoping she might find another key on it, or at any rate a book of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     122 | rules for shutting people up like telescopes: this time she found a little\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     123 | bottle on it, (“which certainly was not here before,” said Alice,) and round the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     124 | neck of the bottle was a paper label, with the words “DRINK ME,” beautifully\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     125 | printed on it in large letters.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 82 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     128 | to do that in a hurry. “No, I’ll look first,” she said, “and see whether it’s\n         |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     129 | marked ‘poison’ or not”; for she had read several nice little histories about\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     130 | children who had got burnt, and eaten up by wild beasts and other unpleasant\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     131 | things, all because they would not remember the simple rules their friends had\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     132 | taught them: such as, that a red-hot poker will burn you if you hold it too\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     133 | long; and that if you cut your finger very deeply with a knife, it usually\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     134 | bleeds; and she had never forgotten that, if you drink much from a bottle marked\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     135 | “poison,” it is almost certain to disagree with you, sooner or later.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 109 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     137 | However, this bottle was not marked “poison,” so Alice ventured to taste it, and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     138 | finding it very nice, (it had, in fact, a sort of mixed flavour of cherry-tart,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     139 | custard, pine-apple, roast turkey, toffee, and hot buttered toast,) she very\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     140 | soon finished it off.\n         | ~~~~~~~~~~~~~~~~~~~~~ This sentence is 46 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     138 | finding it very nice, (it had, in fact, a sort of mixed flavour of cherry-tart,\n         |                                                         ^~~~~~~ Did you mean to spell `flavour` this way?\n     139 | custard, pine-apple, roast turkey, toffee, and hot buttered toast,) she very\nSuggest:\n  - Replace with: “flavor”\n  - Replace with: “favor”\n  - Replace with: “flour”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     146 | door into that lovely garden. First, however, she waited for a few minutes to\n         |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     147 | see if she was going to shrink any further: she felt a little nervous about\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     148 | this; “for it might end, you know,” said Alice to herself, “in my going out\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     149 | altogether, like a candle. I wonder what I should be like then?” And she tried\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     154 | garden at once; but, alas for poor Alice! when she got to the door, she found\n         |                                           ^~~~ This sentence does not start with a capital letter\n     155 | she had forgotten the little golden key, and when she went back to the table for\nSuggest:\n  - Replace with: “When”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     154 | garden at once; but, alas for poor Alice! when she got to the door, she found\n         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     155 | she had forgotten the little golden key, and when she went back to the table for\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     156 | it, she found she could not possibly reach it: she could see it quite plainly\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     157 | through the glass, and she tried her best to climb up one of the legs of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     158 | table, but it was too slippery; and when she had tired herself out with trying,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     159 | the poor little thing sat down and cried.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 79 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     162 | sharply; “I advise you to leave off this minute!” She generally gave herself\n         |                                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~\n     163 | very good advice, (though she very seldom followed it), and sometimes she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     164 | scolded herself so severely as to bring tears into her eyes; and once she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     165 | remembered trying to box her own ears for having cheated herself in a game of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     166 | croquet she was playing against herself, for this curious child was very fond of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     167 | pretending to be two people. “But it’s no use now,” thought poor Alice, “to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 64 words long.\n\n\n\nLint:    Enhancement (31 priority)\nMessage: |\n     162 | sharply; “I advise you to leave off this minute!” She generally gave herself\n     163 | very good advice, (though she very seldom followed it), and sometimes she\n         | ^~~~~~~~~ Vocabulary enhancement: use `excellent` instead of `very good`\nSuggest:\n  - Replace with: “excellent”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     173 | beautifully marked in currants. “Well, I’ll eat it,” said Alice, “and if it\n         |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     174 | makes me grow larger, I can reach the key; and if it makes me grow smaller, I\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     175 | can creep under the door; so either way I’ll get into the garden, and I don’t\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     176 | care which happens!”\n         | ~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     178 | She ate a little bit, and said anxiously to herself, “Which way? Which way?”,\n     179 | holding her hand on the top of her head to feel which way it was growing, and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     180 | she was quite surprised to find that she remained the same size: to be sure,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     181 | this generally happens when one eats cake, but Alice had got so much into the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     182 | way of expecting nothing but out-of-the-way things to happen, that it seemed\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     183 | quite dull and stupid for life to go on in the common way.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 75 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     189 | “Curiouser and curiouser!” cried Alice (she was so much surprised, that for the\n         |  ^~~~~~~~~ Did you mean to spell `Curiouser` this way?\nSuggest:\n  - Replace with: “Curious”\n  - Replace with: “Carouser”\n  - Replace with: “Curiously”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     189 | “Curiouser and curiouser!” cried Alice (she was so much surprised, that for the\n         |                ^~~~~~~~~ Did you mean to spell `curiouser` this way?\nSuggest:\n  - Replace with: “curious”\n  - Replace with: “carouser”\n  - Replace with: “curiously”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     194 | stockings for you now, dears? I’m sure I shan’t be able! I shall be a great deal\n         |                                                          ^~~~~~~~~~~~~~~~~~~~~~~~\n     195 | too far off to trouble myself about you: you must manage the best way you\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     196 | can;—but I must be kind to them,” thought Alice, “or perhaps they won’t walk the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     197 | way I want to go! Let me see: I’ll give them a new pair of boots every\n         | ~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     201 | the carrier,” she thought; “and how funny it’ll seem, sending presents to one’s\n         |                            ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     206 | Oh dear, what nonsense I’m talking!”\n         |                                    ^ This quote has no termination.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     226 | himself as he came, “Oh! the Duchess, the Duchess! Oh! won’t she be savage if\n         |                          ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “The”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     226 | himself as he came, “Oh! the Duchess, the Duchess! Oh! won’t she be savage if\n         |                                                        ^~~~~ This sentence does not start with a capital letter\n     227 | I’ve kept her waiting!” Alice felt so desperate that she was ready to ask help\nSuggest:\n  - Replace with: “Won’t”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     227 | I’ve kept her waiting!” Alice felt so desperate that she was ready to ask help\n         |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     228 | of any one; so, when the Rabbit came near her, she began, in a low, timid voice,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     229 | “If you please, sir—” The Rabbit started violently, dropped the white kid gloves\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     230 | and the fan, and skurried away into the darkness as hard as he could go.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 56 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     229 | “If you please, sir—” The Rabbit started violently, dropped the white kid gloves\n     230 | and the fan, and skurried away into the darkness as hard as he could go.\n         |                  ^~~~~~~~ Did you mean to spell `skurried` this way?\nSuggest:\n  - Replace with: “scurried”\n  - Replace with: “spurred”\n  - Replace with: “scurries”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n     238 | puzzle!” And she began thinking over all the children she knew that were of the\n         |                                 ^~~~~~~~ Did you mean the closed compound `overall`?\nSuggest:\n  - Replace with: “overall”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     243 | all sorts of things, and she, oh! she knows such a very little! Besides, she’s\n         |                                   ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “She”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     249 | Rome—no, that’s all wrong, I’m certain! I must have been changed for Mabel! I’ll\n         |                                                                             ^~~~~\n     250 | try and say ‘How doth the little—’” and she crossed her hands on her lap as if\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     251 | she were saying lessons, and began to repeat it, but her voice sounded hoarse\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     252 | and strange, and the words did not come the same as they used to do:—\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     254 | > “How doth the little crocodile Improve his shining tail, And pour the waters\n         |   ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     260 | “I’m sure those are not the right words,” said poor Alice, and her eyes filled\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     261 | with tears again as she went on, “I must be Mabel after all, and I shall have to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     262 | go and live in that poky little house, and have next to no toys to play with,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     263 | and oh! ever so many lessons to learn! No, I’ve made up my mind about it; if I’m\n         | ~~~~~~~ This sentence is 52 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     263 | and oh! ever so many lessons to learn! No, I’ve made up my mind about it; if I’m\n         |         ^~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Ever”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     273 | “How can I have done that?” she thought. “I must be growing small again.” She\n         |                                                                           ^~~~\n     274 | got up and went to the table to measure herself by it, and found that, as nearly\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     275 | as she could guess, she was now about two feet high, and was going on shrinking\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     276 | rapidly: she soon found out that the cause of this was the fan she was holding,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     277 | and she dropped it hastily, just in time to avoid shrinking away altogether.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 63 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     281 | garden!” and she ran with all speed back to the little door: but, alas! the\n         |                                                                         ^~~ This sentence does not start with a capital letter\n     282 | little door was shut again, and the little golden key was lying on the glass\nSuggest:\n  - Replace with: “The”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     287 | As she said these words her foot slipped, and in another moment, splash! she was\n         |                                                                          ^~~ This sentence does not start with a capital letter\n     288 | up to her chin in salt water. Her first idea was that she had somehow fallen\nSuggest:\n  - Replace with: “She”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n     287 | As she said these words her foot slipped, and in another moment, splash! she was\n     288 | up to her chin in salt water. Her first idea was that she had somehow fallen\n         |                   ^~~~~~~~~~ Did you mean the closed compound noun “saltwater”?\nSuggest:\n  - Replace with: “saltwater”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     290 | (Alice had been to the seaside once in her life, and had come to the general\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     291 | conclusion, that wherever you go to on the English coast you find a number of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     292 | bathing machines in the sea, some children digging in the sand with wooden\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     293 | spades, then a row of lodging houses, and behind them a railway station.)\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 57 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     302 | Just then she heard something splashing about in the pool a little way off, and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     303 | she swam nearer to make out what it was: at first she thought it must be a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     304 | walrus or hippopotamus, but then she remembered how small she was now, and she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     305 | soon made out that it was only a mouse that had slipped in like herself.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 61 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     311 | Mouse!” (Alice thought this must be the right way of speaking to a mouse: she\n         |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     312 | had never done such a thing before, but she remembered having seen in her\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     313 | brother’s Latin Grammar, “A mouse—of a mouse—to a mouse—a mouse—O mouse!”) The\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     320 | she began again: “Où est ma chatte?” which was the first sentence in her French\n         |                   ^~ Did you mean to spell `Où` this way?\nSuggest:\n  - Replace with: “Of”\n  - Replace with: “Oh”\n  - Replace with: “Oi”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     320 | she began again: “Où est ma chatte?” which was the first sentence in her French\n         |                      ^~~ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “EST”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     320 | she began again: “Où est ma chatte?” which was the first sentence in her French\n         |                      ^~~ Did you mean to spell `est` this way?\nSuggest:\n  - Replace with: “east”\n  - Replace with: “eat”\n  - Replace with: “esp”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     320 | she began again: “Où est ma chatte?” which was the first sentence in her French\n         |                             ^~~~~~ Did you mean to spell `chatte` this way?\nSuggest:\n  - Replace with: “chaste”\n  - Replace with: “chatted”\n  - Replace with: “chattel”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     330 | cats if you could only see her. She is such a dear quiet thing,” Alice went on,\n         |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     331 | half to herself, as she swam lazily about in the pool, “and she sits purring so\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     332 | nicely by the fire, licking her paws and washing her face—and she is such a nice\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     333 | soft thing to nurse—and she’s such a capital one for catching mice—oh, I beg\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     334 | your pardon!” cried Alice again, for this time the Mouse was bristling all over,\n         | ~~~~~~~~~~~~ This sentence is 61 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     346 | curly brown hair! And it’ll fetch things when you throw them, and it’ll sit up\n         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     347 | and beg for its dinner, and all sorts of things—I can’t remember half of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     348 | them—and it belongs to a farmer, you know, and he says it’s so useful, it’s\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     349 | worth a hundred pounds! He says it kills all the rats and—oh dear!” cried Alice\n         | ~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     355 | talk about cats or dogs either, if you don’t like them!” When the Mouse heard\n         |                                                          ^~~~~~~~~~~~~~~~~~~~~\n     356 | this, it turned round and swam slowly back to her: its face was quite pale (with\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     357 | passion, Alice thought), and it said in a low trembling voice, “Let us get to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     358 | the shore, and then I’ll tell you my history, and you’ll understand why it is I\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     359 | hate cats and dogs.”\n         | ~~~~~~~~~~~~~~~~~~~ This sentence is 55 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n     361 | It was high time to go, for the pool was getting quite crowded with the birds\n         |    ^~~~ You may be missing a preposition here.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     362 | and animals that had fallen into it: there were a Duck and a Dodo, a Lory and an\n         |                                                                      ^~~~ Did you mean to spell `Lory` this way?\n     363 | Eaglet, and several other curious creatures. Alice led the way, and the whole\nSuggest:\n  - Replace with: “Lord”\n  - Replace with: “Lore”\n  - Replace with: “Lorry”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     368 | They were indeed a queer-looking party that assembled on the bank—the birds with\n     369 | draggled feathers, the animals with their fur clinging close to them, and all\n         | ^~~~~~~~ Did you mean to spell `draggled` this way?\nSuggest:\n  - Replace with: “dragged”\n  - Replace with: “drugged”\n  - Replace with: “dangled”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     372 | The first question of course was, how to get dry again: they had a consultation\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     373 | about this, and after a few minutes it seemed quite natural to Alice to find\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     374 | herself talking familiarly with them, as if she had known them all her life.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     375 | Indeed, she had quite a long argument with the Lory, who at last turned sulky,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     376 | and would only say, “I am older than you, and must know better;” and this Alice\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     377 | would not allow without knowing how old it was, and, as the Lory positively\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     378 | refused to tell its age, there was no more to be said.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 57 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     375 | Indeed, she had quite a long argument with the Lory, who at last turned sulky,\n         |                                                ^~~~ Did you mean to spell `Lory` this way?\n     376 | and would only say, “I am older than you, and must know better;” and this Alice\nSuggest:\n  - Replace with: “Lord”\n  - Replace with: “Lore”\n  - Replace with: “Lorry”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     377 | would not allow without knowing how old it was, and, as the Lory positively\n         |                                                             ^~~~ Did you mean to spell `Lory` this way?\n     378 | refused to tell its age, there was no more to be said.\nSuggest:\n  - Replace with: “Lord”\n  - Replace with: “Lore”\n  - Replace with: “Lorry”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     387 | driest thing I know. Silence all round, if you please! ‘William the Conqueror,\n     388 | whose cause was favoured by the pope, was soon submitted to by the English, who\n         |                 ^~~~~~~~ Did you mean to spell `favoured` this way?\nSuggest:\n  - Replace with: “favored”\n  - Replace with: “flavored”\n  - Replace with: “floured”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     390 | Edwin and Morcar, the earls of Mercia and Northumbria—’”\n         |           ^~~~~~ Did you mean to spell `Morcar` this way?\nSuggest:\n  - Replace with: “Mortar”\n  - Replace with: “Mercer”\n  - Replace with: “Molar”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     390 | Edwin and Morcar, the earls of Mercia and Northumbria—’”\n         |                                           ^~~~~~~~~~~ Did you mean to spell `Northumbria` this way?\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     392 | “Ugh!” said the Lory, with a shiver.\n         |                 ^~~~ Did you mean to spell `Lory` this way?\nSuggest:\n  - Replace with: “Lord”\n  - Replace with: “Lore”\n  - Replace with: “Lorry”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     397 | “Not I!” said the Lory hastily.\n         |                   ^~~~ Did you mean to spell `Lory` this way?\nSuggest:\n  - Replace with: “Lord”\n  - Replace with: “Lore”\n  - Replace with: “Lorry”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     399 | “I thought you did,” said the Mouse. “—I proceed. ‘Edwin and Morcar, the earls\n         |                                                              ^~~~~~ Did you mean to spell `Morcar` this way?\n     400 | of Mercia and Northumbria, declared for him: and even Stigand, the patriotic\nSuggest:\n  - Replace with: “Mortar”\n  - Replace with: “Mercer”\n  - Replace with: “Molar”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     399 | “I thought you did,” said the Mouse. “—I proceed. ‘Edwin and Morcar, the earls\n     400 | of Mercia and Northumbria, declared for him: and even Stigand, the patriotic\n         |               ^~~~~~~~~~~ Did you mean to spell `Northumbria` this way?\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     400 | of Mercia and Northumbria, declared for him: and even Stigand, the patriotic\n         |                                                       ^~~~~~~ Did you mean to spell `Stigand` this way?\n     401 | archbishop of Canterbury, found it advisable—’”\nSuggest:\n  - Replace with: “Stand”\n  - Replace with: “Stipend”\n  - Replace with: “Strand”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     411 | The Mouse did not notice this question, but hurriedly went on, “‘—found it\n     412 | advisable to go with Edgar Atheling to meet William and offer him the crown.\n         |                            ^~~~~~~~ Did you mean to spell `Atheling` this way?\nSuggest:\n  - Replace with: “Adhering”\n  - Replace with: “Fathering”\n  - Replace with: “Gathering”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     445 | This question the Dodo could not answer without a great deal of thought, and it\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     446 | sat for a long time with one finger pressed upon its forehead (the position in\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     447 | which you usually see Shakespeare, in the pictures of him), while the rest\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     448 | waited in silence. At last the Dodo said, “Everybody has won, and all must have\n         | ~~~~~~~~~~~~~~~~~~ This sentence is 46 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n     458 | pulled out a box of comfits, (luckily the salt water had not got into it), and\n         |                                           ^~~~~~~~~~ Did you mean the closed compound noun “saltwater”?\n     459 | handed them round as prizes. There was exactly one a-piece, all round.\nSuggest:\n  - Replace with: “saltwater”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     474 | Alice thought the whole thing very absurd, but they all looked so grave that she\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     475 | did not dare to laugh; and, as she could not think of anything to say, she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     476 | simply bowed, and took the thimble, looking as solemn as she could.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     502 | > Fury: ‘I’ll try the whole cause, and condemn you to death.’”\n         |                                                              ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     527 | “What a pity it wouldn’t stay!” sighed the Lory, as soon as it was quite out of\n         |                                            ^~~~ Did you mean to spell `Lory` this way?\n     528 | sight; and an old Crab took the opportunity of saying to her daughter “Ah, my\nSuggest:\n  - Replace with: “Lord”\n  - Replace with: “Lore”\n  - Replace with: “Lorry”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     536 | “And who is Dinah, if I might venture to ask the question?” said the Lory.\n         |                                                                      ^~~~ Did you mean to spell `Lory` this way?\nSuggest:\n  - Replace with: “Lord”\n  - Replace with: “Lore”\n  - Replace with: “Lorry”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     564 | wonder?” Alice guessed in a moment that it was looking for the fan and the pair\n         |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     565 | of white kid gloves, and she very good-naturedly began hunting about for them,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     566 | but they were nowhere to be seen—everything seemed to have changed since her\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     567 | swim in the pool, and the great hall, with the glass table and the little door,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     568 | had vanished completely.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 62 words long.\n\n\n\nLint:    Enhancement (31 priority)\nMessage: |\n     564 | wonder?” Alice guessed in a moment that it was looking for the fan and the pair\n     565 | of white kid gloves, and she very good-naturedly began hunting about for them,\n         |                              ^~~~~~~~~ Vocabulary enhancement: use `excellent` instead of `very good`\nSuggest:\n  - Replace with: “excellent”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     564 | wonder?” Alice guessed in a moment that it was looking for the fan and the pair\n     565 | of white kid gloves, and she very good-naturedly began hunting about for them,\n         |                                        ^~~~~~~~~ Did you mean to spell `naturedly` this way?\n     566 | but they were nowhere to be seen—everything seemed to have changed since her\nSuggest:\n  - Replace with: “naturally”\n  - Replace with: “maturely”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     579 | little house, on the door of which was a bright brass plate with the name “W.\n         |                                                                            ^~ Did you mean to spell `W.` this way?\nSuggest:\n  - Replace with: “We”\n  - Replace with: “WA”\n  - Replace with: “WI”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     585 | I suppose Dinah’ll be sending me on messages next!” And she began fancying the\n         |           ^~~~~~~~ Did you mean `Dinah's`?\nSuggest:\n  - Replace with: “Dinah's”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     591 | By this time she had found her way into a tidy little room with a table in the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     592 | window, and on it (as she had hoped) a fan and two or three pairs of tiny white\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     593 | kid gloves: she took up the fan and a pair of the gloves, and was just going to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     594 | leave the room, when her eye fell upon a little bottle that stood near the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     595 | looking-glass. There was no label this time with the words “DRINK ME,” but\n         | ~~~~~~~~~~~~~~ This sentence is 71 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     607 | Alas! it was too late to wish that! She went on growing, and growing, and very\n         |                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     608 | soon had to kneel down on the floor: in another minute there was not even room\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     609 | for this, and she tried the effect of lying down with one elbow against the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     610 | door, and the other arm curled round her head. Still she went on growing, and,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     615 | Luckily for Alice, the little magic bottle had now had its full effect, and she\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     616 | grew no larger: still it was very uncomfortable, and, as there seemed to be no\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     617 | sort of chance of her ever getting out of the room again, no wonder she felt\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     618 | unhappy.\n         | ~~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     643 | came a little pattering of feet on the stairs. Alice knew it was the Rabbit\n         |                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     644 | coming to look for her, and she trembled till she shook the house, quite\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     645 | forgetting that she was now about a thousand times as large as the Rabbit, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     646 | had no reason to be afraid of it.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     655 | snatch in the air. She did not get hold of anything, but she heard a little\n         |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     656 | shriek and a fall, and a crash of broken glass, from which she concluded that it\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     657 | was just possible it had fallen into a cucumber-frame, or something of the sort.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     659 | Next came an angry voice—the Rabbit’s—“Pat! Pat! Where are you?” And then a\n         |                                       ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     659 | Next came an angry voice—the Rabbit’s—“Pat! Pat! Where are you?” And then a\n         |                                                                ^ This quote has no termination.\n     660 | voice she had never heard before, “Sure then I’m here! Digging for apples, yer\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     660 | voice she had never heard before, “Sure then I’m here! Digging for apples, yer\n     661 | honour!”\n         | ^~~~~~ Did you mean to spell `honour` this way?\nSuggest:\n  - Replace with: “honor”\n  - Replace with: “hour”\n  - Replace with: “honer”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     668 | “Sure, it’s an arm, yer honour!” (He pronounced it “arrum.”)\n         |                         ^~~~~~ Did you mean to spell `honour` this way?\nSuggest:\n  - Replace with: “honor”\n  - Replace with: “hour”\n  - Replace with: “honer”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     668 | “Sure, it’s an arm, yer honour!” (He pronounced it “arrum.”)\n         |                                                     ^~~~~ Did you mean to spell `arrum` this way?\nSuggest:\n  - Replace with: “arum”\n  - Replace with: “album”\n  - Replace with: “alum”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     668 | “Sure, it’s an arm, yer honour!” (He pronounced it “arrum.”)\n         |                                                     ^~~~~ `arrum` should probably be written as `arr um`.\nSuggest:\n  - Replace with: “arr um”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     672 | “Sure, it does, yer honour: but it’s an arm for all that.”\n         |                     ^~~~~~ Did you mean to spell `honour` this way?\nSuggest:\n  - Replace with: “honor”\n  - Replace with: “hour”\n  - Replace with: “honer”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     677 | then; such as, “Sure, I don’t like it, yer honour, at all, at all!” “Do as I\n         |                                            ^~~~~~ Did you mean to spell `honour` this way?\nSuggest:\n  - Replace with: “honor”\n  - Replace with: “hour”\n  - Replace with: “honer”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     688 | one; Bill’s got the other—Bill! fetch it here, lad!—Here, put ’em up at this\n         |                                 ^~~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Fetch”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     690 | they’ll do well enough; don’t be particular—Here, Bill! catch hold of this\n         | ^~~~~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “They’ll”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     690 | they’ll do well enough; don’t be particular—Here, Bill! catch hold of this\n         |                                                         ^~~~~ This sentence does not start with a capital letter\n     691 | rope—Will the roof bear?—Mind that loose slate—Oh, it’s coming down! Heads\nSuggest:\n  - Replace with: “Catch”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     692 | below!” (a loud crash)—“Now, who did that?—It was Bill, I fancy—Who’s to go down\n         |                        ^ This quote has no termination.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     692 | below!” (a loud crash)—“Now, who did that?—It was Bill, I fancy—Who’s to go down\n         |                                                                 ^~~~~ The canonical dictionary spelling is `who's`.\n     693 | the chimney?—Nay, I shan’t! You do it!—That I won’t, then!—Bill’s to go\nSuggest:\n  - Replace with: “who's”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     694 | down—Here, Bill! the master says you’re to go down the chimney!”\n         |                  ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “The”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     694 | down—Here, Bill! the master says you’re to go down the chimney!”\n         |                                                                ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     701 | She drew her foot as far down the chimney as she could, and waited till she\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     702 | heard a little animal (she couldn’t guess of what sort it was) scratching and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     703 | scrambling about in the chimney close above her: then, saying to herself “This\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     704 | is Bill,” she gave one sharp kick, and waited to see what would happen next.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 58 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     706 | The first thing she heard was a general chorus of “There goes Bill!” then the\n     707 | Rabbit’s voice along—“Catch him, you by the hedge!” then silence, and then\n         |                      ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     707 | Rabbit’s voice along—“Catch him, you by the hedge!” then silence, and then\n         |                                                   ^ This quote has no termination.\n     708 | another confusion of voices—“Hold up his head—Brandy now—Don’t choke him—How was\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     707 | Rabbit’s voice along—“Catch him, you by the hedge!” then silence, and then\n     708 | another confusion of voices—“Hold up his head—Brandy now—Don’t choke him—How was\n         |                             ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     709 | it, old fellow? What happened to you? Tell us all about it!”\n         |                                                            ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     711 | Last came a little feeble, squeaking voice, (“That’s Bill,” thought Alice,)\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     712 | “Well, I hardly know—No more, thank ye; I’m better now—but I’m a deal too\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     713 | flustered to tell you—all I know is, something comes at me like a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     714 | Jack-in-the-box, and up I goes like a sky-rocket!”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Agreement (127 priority)\nMessage: |\n     713 | flustered to tell you—all I know is, something comes at me like a\n     714 | Jack-in-the-box, and up I goes like a sky-rocket!”\n         |                           ^~~~ The form of the verb must agree in grammatical number with the pronoun.\nSuggest:\n  - Replace with: “go”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     723 | minute or two, they began moving about again, and Alice heard the Rabbit say, “A\n     724 | barrowful will do, to begin with.”\n         | ^~~~~~~~~ Did you mean `sorrowful`?\nSuggest:\n  - Replace with: “sorrowful”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     726 | “A barrowful of what?” thought Alice; but she had not long to doubt, for the\n         |    ^~~~~~~~~ Did you mean `sorrowful`?\nSuggest:\n  - Replace with: “sorrowful”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     749 | It sounded an excellent plan, no doubt, and very neatly and simply arranged; the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     750 | only difficulty was, that she had not the smallest idea how to set about it; and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     751 | while she was peering about anxiously among the trees, a little sharp bark just\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     752 | over her head made her look up in a great hurry.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 55 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     755 | stretching out one paw, trying to touch her. “Poor little thing!” said Alice, in\n         |                                                                   ^~~~~~~~~~~~~~~\n     756 | a coaxing tone, and she tried hard to whistle to it; but she was terribly\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     757 | frightened all the time at the thought that it might be hungry, in which case it\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     758 | would be very likely to eat her up in spite of all her coaxing.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     760 | Hardly knowing what she did, she picked up a little bit of stick, and held it\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     761 | out to the puppy; whereupon the puppy jumped into the air off all its feet at\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     762 | once, with a yelp of delight, and rushed at the stick, and made believe to worry\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     763 | it; then Alice dodged behind a great thistle, to keep herself from being run\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     764 | over; and the moment she appeared on the other side, the puppy made another rush\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     765 | at the stick, and tumbled head over heels in its hurry to get hold of it; then\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     766 | Alice, thinking it was very like having a game of play with a cart-horse, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     767 | expecting every moment to be trampled under its feet, ran round the thistle\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     768 | again; then the puppy began a series of short charges at the stick, running a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     769 | very little way forwards each time and a long way back, and barking hoarsely all\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     770 | the while, till at last it sat down a good way off, panting, with its tongue\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     771 | hanging out of its mouth, and its great eyes half shut.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 180 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     777 | “And yet what a dear little puppy it was!” said Alice, as she leant against a\n         |                                                               ^~~~~ Did you mean to spell `leant` this way?\n     778 | buttercup to rest herself, and fanned herself with one of the leaves: “I should\nSuggest:\n  - Replace with: “lean”\n  - Replace with: “learnt”\n  - Replace with: “least”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     786 | the right thing to eat or drink under the circumstances. There was a large\n         |                                                          ^~~~~~~~~~~~~~~~~~\n     787 | mushroom growing near her, about the same height as herself; and when she had\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     788 | looked under it, and on both sides of it, and behind it, it occurred to her that\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     789 | she might as well look and see what was on the top of it.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     791 | She stretched herself up on tiptoe, and peeped over the edge of the mushroom,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     792 | and her eyes immediately met those of a large blue caterpillar, that was sitting\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     793 | on the top with its arms folded, quietly smoking a long hookah, and taking not\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     794 | the smallest notice of her or of anything else.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 52 words long.\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     796 | ## CHAPTER V: Advice from a Caterpillar\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “## CHAPTER v: Advice from a Caterpillar”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     822 | “Well, perhaps you haven’t found it so yet,” said Alice; “but when you have to\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     823 | turn into a chrysalis—you will some day, you know—and then after that into a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     824 | butterfly, I should think you’ll feel it a little queer, won’t you?”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     865 | “Well, I’ve tried to say “How doth the little busy bee,” but it all came\n         | ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     866 | different!” Alice replied in a very melancholy voice.\n         |           ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     868 | “Repeat, “You are old, Father William,’” said the Caterpillar.\n         | ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     884 | > “In my youth,” said the sage, as he shook his grey locks, “I kept all my limbs\n         |                                                 ^~~~ Did you mean to spell `grey` this way?\n     885 | > very supple By the use of this ointment—one shilling the box— Allow me to sell\nSuggest:\n  - Replace with: “gray”\n  - Replace with: “grew”\n  - Replace with: “grep”\n\n\n\nLint:    Enhancement (31 priority)\nMessage: |\n     929 | “It is a very good height indeed!” said the Caterpillar angrily, rearing itself\n         |          ^~~~~~~~~ Vocabulary enhancement: use `excellent` instead of `very good`\nSuggest:\n  - Replace with: “excellent”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     958 | She was a good deal frightened by this very sudden change, but she felt that\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     959 | there was no time to be lost, as she was shrinking rapidly; so she set to work\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     960 | at once to eat some of the other bit. Her chin was pressed so closely against\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     961 | her foot, that there was hardly room to open her mouth; but she did it at last,\n     962 | and managed to swallow a morsel of the lefthand bit.\n         |                                        ^~~~~~~~ Did you mean to spell `lefthand` this way?\nSuggest:\n  - Replace with: “left-hand”\n  - Replace with: “leftward”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     961 | her foot, that there was hardly room to open her mouth; but she did it at last,\n     962 | and managed to swallow a morsel of the lefthand bit.\n         |                                        ^~~~~~~~ `lefthand` should probably be written as `left hand`.\nSuggest:\n  - Replace with: “left hand”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     964 | “Come, my head’s free at last!” said Alice in a tone of delight, which changed\n         |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     965 | into alarm in another moment, when she found that her shoulders were nowhere to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     966 | be found: all she could see, when she looked down, was an immense length of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     967 | neck, which seemed to rise like a stalk out of a sea of green leaves that lay\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     968 | far below her.\n         | ~~~~~~~~~~~~~~ This sentence is 58 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     975 | As there seemed to be no chance of getting her hands up to her head, she tried\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     976 | to get her head down to them, and was delighted to find that her neck would bend\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     977 | about easily in any direction, like a serpent. She had just succeeded in curving\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     977 | about easily in any direction, like a serpent. She had just succeeded in curving\n         |                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     978 | it down into a graceful zigzag, and was going to dive in among the leaves, which\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     979 | she found to be nothing but the tops of the trees under which she had been\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     980 | wandering, when a sharp hiss made her draw back in a hurry: a large pigeon had\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     981 | flown into her face, and was beating her violently with its wings.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 66 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n     979 | she found to be nothing but the tops of the trees under which she had been\n     980 | wandering, when a sharp hiss made her draw back in a hurry: a large pigeon had\n         |                                       ^~~~~~~~~ Did you mean the closed compound noun “drawback”?\nSuggest:\n  - Replace with: “drawback”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1007 | “And just as I’d taken the highest tree in the wood,” continued the Pigeon,\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1008 | raising its voice to a shriek, “and just as I was thinking I should be free of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1009 | them at last, they must needs come wriggling down from the sky! Ugh, Serpent!”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    1011 | “But I’m not a serpent, I tell you!” said Alice. “I’m a—I’m a—”\n         |                                                       ^ Incorrect indefinite article.\nSuggest:\n  - Replace with: “an”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1030 | This was such a new idea to Alice, that she was quite silent for a minute or\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1031 | two, which gave the Pigeon the opportunity of adding, “You’re looking for eggs,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1032 | I know that well enough; and what does it matter to me whether you’re a little\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1033 | girl or a serpent?”\n         | ~~~~~~~~~~~~~~~~~~ This sentence is 50 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1042 | to stop and untwist it. After a while she remembered that she still held the\n         |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1043 | pieces of mushroom in her hands, and she set to work very carefully, nibbling\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1044 | first at one and then at the other, and growing sometimes taller and sometimes\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1045 | shorter, until she had succeeded in bringing herself down to her usual height.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1055 | this size: why, I should frighten them out of their wits!” So she began nibbling\n    1056 | at the righthand bit again, and did not venture to go near the house till she\n         |        ^~~~~~~~~ Did you mean to spell `righthand` this way?\nSuggest:\n  - Replace with: “right-hand”\n  - Replace with: “rightward”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    1055 | this size: why, I should frighten them out of their wits!” So she began nibbling\n    1056 | at the righthand bit again, and did not venture to go near the house till she\n         |        ^~~~~~~~~ `righthand` should probably be written as `right hand`.\nSuggest:\n  - Replace with: “right hand”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    1059 | ## CHAPTER VI: Pig and Pepper\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “## CHAPTER Vi: Pig and Pepper”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1061 | For a minute or two she stood looking at the house, and wondering what to do\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1062 | next, when suddenly a footman in livery came running out of the wood—(she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1063 | considered him to be a footman because he was in livery: otherwise, judging by\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1064 | his face only, she would have called him a fish)—and rapped loudly at the door\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1065 | with his knuckles. It was opened by another footman in livery, with a round\n         | ~~~~~~~~~~~~~~~~~~ This sentence is 63 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1078 | Alice laughed so much at this, that she had to run back into the wood for fear\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1079 | of their hearing her; and when she next peeped out the Fish-Footman was gone,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1080 | and the other was sitting on the ground near the door, staring stupidly up into\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1081 | the sky.\n         | ~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1130 | The door led right into a large kitchen, which was full of smoke from one end to\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1131 | the other: the Duchess was sitting on a three-legged stool in the middle,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1132 | nursing a baby; the cook was leaning over the fire, stirring a large cauldron\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1133 | which seemed to be full of soup.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 52 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1165 | well to introduce some other subject of conversation. While she was trying to\n         |                                                       ^~~~~~~~~~~~~~~~~~~~~~~~\n    1166 | fix on one, the cook took the cauldron of soup off the fire, and at once set to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1167 | work throwing everything within her reach at the Duchess and the baby—the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1168 | fire-irons came first; then followed a shower of saucepans, plates, and dishes.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1187 | Alice glanced rather anxiously at the cook, to see if she meant to take the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1188 | hint; but the cook was busily stirring the soup, and seemed not to be listening,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1189 | so she went on again: “Twenty-four hours, I think; or is it twelve? I—”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    1200 | > “Wow! wow! wow!”\n         |         ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Wow”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    1200 | > “Wow! wow! wow!”\n         |              ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Wow”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    1211 | > “Wow! wow! wow!”\n         |         ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Wow”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    1211 | > “Wow! wow! wow!”\n         |              ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Wow”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    1213 | “Here! you may nurse it a bit, if you like!” the Duchess said to Alice, flinging\n         |        ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “You”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1220 | star-fish,” thought Alice. The poor little thing was snorting like a\n         |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1221 | steam-engine when she caught it, and kept doubling itself up and straightening\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1222 | itself out again, so that altogether, for the first minute or two, it was as\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1223 | much as she could do to hold it.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1225 | As soon as she had made out the proper way of nursing it, (which was to twist it\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1226 | up into a sort of knot, and then keep tight hold of its right ear and left foot,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1227 | so as to prevent its undoing itself,) she carried it out into the open air. “If\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1235 | what was the matter with it. There could be no doubt that it had a very turn-up\n         |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1236 | nose, much more like a snout than a real nose; also its eyes were getting\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1237 | extremely small for a baby: altogether Alice did not like the look of the thing\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1238 | at all. “But perhaps it was only sobbing,” she thought, and looked into its eyes\n         | ~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1254 | made a dreadfully ugly child: but it makes rather a handsome pig, I think.” And\n         |                                                                             ^~~~\n    1255 | she began thinking over other children she knew, who might do very well as pigs,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1256 | and was just saying to herself, “if one only knew the right way to change them—”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1257 | when she was a little startled by seeing the Cheshire Cat sitting on a bough of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1258 | a tree a few yards off.\n         | ~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1260 | The Cat only grinned when it saw Alice. It looked good-natured, she thought:\n         |                                                        ^~~~~~~ Did you mean to spell `natured` this way?\nSuggest:\n  - Replace with: “nature”\n  - Replace with: “natures”\n  - Replace with: “nature's”\n\n\n\nLint:    Punctuation (31 priority)\nMessage: |\n    1304 | I’m angry. Therefore I’m mad.”\n         |            ^~~~~~~~~ Discourse markers at the beginning of a sentence should be followed by a comma.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1348 | like ears and the roof was thatched with fur. It was so large a house, that she\n         |                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1349 | did not like to go nearer till she had nibbled some more of the lefthand bit of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1350 | mushroom, and raised herself to about two feet high: even then she walked up\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1351 | towards it rather timidly, saying to herself “Suppose it should be raving mad\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1352 | after all! I almost wish I’d gone to see the Hatter instead!”\n         | ~~~~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1349 | did not like to go nearer till she had nibbled some more of the lefthand bit of\n         |                                                                 ^~~~~~~~ Did you mean to spell `lefthand` this way?\n    1350 | mushroom, and raised herself to about two feet high: even then she walked up\nSuggest:\n  - Replace with: “left-hand”\n  - Replace with: “leftward”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    1349 | did not like to go nearer till she had nibbled some more of the lefthand bit of\n         |                                                                 ^~~~~~~~ `lefthand` should probably be written as `left hand`.\n    1350 | mushroom, and raised herself to about two feet high: even then she walked up\nSuggest:\n  - Replace with: “left hand”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1356 | There was a table set out under a tree in front of the house, and the March Hare\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1357 | and the Hatter were having tea at it: a Dormouse was sitting between them, fast\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1358 | asleep, and the other two were using it as a cushion, resting their elbows on\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1359 | it, and talking over its head. “Very uncomfortable for the Dormouse,” thought\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    1415 | dropped, and the party sat silent for a minute, while Alice thought over all she\n         |                                                                     ^~~~~~~~ Did you mean the closed compound `overall`?\n    1416 | could remember about ravens and writing-desks, which wasn’t much.\nSuggest:\n  - Replace with: “overall”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1433 | The March Hare took the watch and looked at it gloomily: then he dipped it into\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1434 | his cup of tea, and looked at it again: but he could think of nothing better to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1435 | say than his first remark, “It was the best butter, you know.”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    1481 | “Ah! that accounts for it,” said the Hatter. “He won’t stand beating. Now, if\n         |      ^~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “That”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1497 | The Hatter shook his head mournfully. “Not I!” he replied. “We quarrelled last\n         |                                                                ^~~~~~~~~~ Did you mean to spell `quarrelled` this way?\n    1498 | March—just before he went mad, you know—” (pointing with his tea spoon at the\nSuggest:\n  - Replace with: “quarreled”\n  - Replace with: “quarreler”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    1498 | March—just before he went mad, you know—” (pointing with his tea spoon at the\n         |                                                              ^~~~~~~~~ Did you mean the closed compound noun “teaspoon”?\n    1499 | March Hare,) “—it was at the great concert given by the Queen of Hearts, and I\nSuggest:\n  - Replace with: “teaspoon”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    1498 | March—just before he went mad, you know—” (pointing with his tea spoon at the\n    1499 | March Hare,) “—it was at the great concert given by the Queen of Hearts, and I\n         |              ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    1504 | You know the song, perhaps?”\n         |                            ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    1508 | “It goes on, you know,” the Hatter continued, “in this way:—\n         |                                               ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    1510 | > ‘Up above the world you fly, Like a tea-tray in the sky. Twinkle, twinkle—’”\n         |                                                                              ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1555 | great hurry; “and their names were Elsie, Lacie, and Tillie; and they lived at\n         |                                           ^~~~~ Did you mean to spell `Lacie` this way?\nSuggest:\n  - Replace with: “Lace”\n  - Replace with: “Lacier”\n  - Replace with: “Lac's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1555 | great hurry; “and their names were Elsie, Lacie, and Tillie; and they lived at\n         |                                                      ^~~~~~ Did you mean to spell `Tillie` this way?\nSuggest:\n  - Replace with: “Till's”\n  - Replace with: “Tile”\n  - Replace with: “Till”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    1582 | “Who’s making personal remarks now?” the Hatter asked triumphantly.\n         |  ^~~~~ The canonical dictionary spelling is `who's`.\nSuggest:\n  - Replace with: “who's”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1637 | The Dormouse had closed its eyes by this time, and was going off into a doze;\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1638 | but, on being pinched by the Hatter, it woke up again with a little shriek, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1639 | went on: “—that begins with an M, such as mouse-traps, and the moon, and memory,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1640 | and muchness—you know you say things are “much of a muchness”—did you ever see\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1641 | such a thing as a drawing of a muchness?”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 73 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    1639 | went on: “—that begins with an M, such as mouse-traps, and the moon, and memory,\n         |          ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    1641 | such a thing as a drawing of a muchness?”\n         |                                         ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1647 | This piece of rudeness was more than Alice could bear: she got up in great\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1648 | disgust, and walked off; the Dormouse fell asleep instantly, and neither of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1649 | others took the least notice of her going, though she looked back once or twice,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1650 | half hoping that they would call after her: the last time she saw them, they\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1651 | were trying to put the Dormouse into the teapot.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 67 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1663 | Then she went to work nibbling at the mushroom (she had kept a piece of it in\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1664 | her pocket) till she was about a foot high: then she walked down the little\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1665 | passage: and then—she found herself at last in the beautiful garden, among the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1666 | bright flower-beds and the cool fountains.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1691 | Seven flung down his brush, and had just begun “Well, of all the unjust things—”\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1692 | when his eye chanced to fall upon Alice, as she stood watching them, and he\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1693 | checked himself suddenly: the others looked round also, and all of them bowed\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1694 | low.\n         | ~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1699 | Five and Seven said nothing, but looked at Two. Two began in a low voice, “Why\n         |                                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1700 | the fact is, you see, Miss, this here ought to have been a red rose-tree, and we\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1701 | put a white one in by mistake; and if the Queen was to find it out, we should\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1702 | all have our heads cut off, you know. So you see, Miss, we’re doing our best,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1708 | First came ten soldiers carrying clubs; these were all shaped like the three\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1709 | gardeners, oblong and flat, with their hands and feet at the corners: next the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1710 | ten courtiers; these were ornamented all over with diamonds, and walked two and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1711 | two, as the soldiers did. After these came the royal children; there were ten of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    1708 | First came ten soldiers carrying clubs; these were all shaped like the three\n    1709 | gardeners, oblong and flat, with their hands and feet at the corners: next the\n         |            ^~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1713 | they were all ornamented with hearts. Next came the guests, mostly Kings and\n    1714 | Queens, and among them Alice recognised the White Rabbit: it was talking in a\n         |                              ^~~~~~~~~~ Did you mean to spell `recognised` this way?\nSuggest:\n  - Replace with: “recognized”\n  - Replace with: “recognize”\n  - Replace with: “recognizer”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1720 | Alice was rather doubtful whether she ought not to lie down on her face like the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1721 | three gardeners, but she could not remember ever having heard of such a rule at\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1722 | processions; “and besides, what would be the use of a procession,” thought she,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1723 | “if people had all to lie down upon their faces, so that they couldn’t see it?”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 60 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1737 | “And who are these?” said the Queen, pointing to the three gardeners who were\n         |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1738 | lying round the rose-tree; for, you see, as they were lying on their faces, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1739 | the pattern on their backs was the same as the rest of the pack, she could not\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1740 | tell whether they were gardeners, or soldiers, or courtiers, or three of her own\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1741 | children.\n         | ~~~~~~~~~ This sentence is 58 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1813 | got settled down in a minute or two, and the game began. Alice thought she had\n         |                                                          ^~~~~~~~~~~~~~~~~~~~~~\n    1814 | never seen such a curious croquet-ground in her life; it was all ridges and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1815 | furrows; the balls were live hedgehogs, the mallets live flamingoes, and the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1816 | soldiers had to double themselves up and to stand on their hands and feet, to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1817 | make the arches.\n         | ~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1819 | The chief difficulty Alice found at first was in managing her flamingo: she\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1820 | succeeded in getting its body tucked away, comfortably enough, under her arm,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1821 | with its legs hanging down, but generally, just as she had got its neck nicely\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1822 | straightened out, and was going to give the hedgehog a blow with its head, it\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1823 | would twist itself round and look up in her face, with such a puzzled expression\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1824 | that she could not help bursting out laughing: and when she had got its head\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1825 | down, and was going to begin again, it was very provoking to find that the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1826 | hedgehog had unrolled itself, and was in the act of crawling away: besides all\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1827 | this, there was generally a ridge or furrow in the way wherever she wanted to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1828 | send the hedgehog to, and, as the doubled-up soldiers were always getting up and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1829 | walking off to other parts of the ground, Alice soon came to the conclusion that\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1830 | it was a very difficult game indeed.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 166 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1832 | The players all played at once without waiting for turns, quarrelling all the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1833 | while, and fighting for the hedgehogs; and in a very short time the Queen was in\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1834 | a furious passion, and went stamping about, and shouting “Off with his head!” or\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1832 | The players all played at once without waiting for turns, quarrelling all the\n         |                                                           ^~~~~~~~~~~ Did you mean `quarreling`?\n    1833 | while, and fighting for the hedgehogs; and in a very short time the Queen was in\nSuggest:\n  - Replace with: “quarreling”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1842 | She was looking about for some way of escape, and wondering whether she could\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1843 | get away without being seen, when she noticed a curious appearance in the air:\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1844 | it puzzled her very much at first, but, after watching it a minute or two, she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1845 | made it out to be a grin, and she said to herself “It’s the Cheshire Cat: now I\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1846 | shall have somebody to talk to.”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 68 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1858 | “I don’t think they play at all fairly,” Alice began, in rather a complaining\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1859 | tone, “and they all quarrel so dreadfully one can’t hear oneself speak—and they\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1860 | don’t seem to have any rules in particular; at least, if there are, nobody\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1861 | attends to them—and you’ve no idea how confusing it is all the things being\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1862 | alive; for instance, there’s the arch I’ve got to go through next walking about\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1863 | at the other end of the ground—and I should have croqueted the Queen’s hedgehog\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1864 | just now, only it ran away when it saw mine coming!”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 97 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    1894 | The Queen had only one way of settling all difficulties, great or small. “Off\n         |                                                          ^~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1900 | she heard the Queen’s voice in the distance, screaming with passion. She had\n         |                                                                      ^~~~~~~~\n    1901 | already heard her sentence three of the players to be executed for having missed\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1902 | their turns, and she did not like the look of things at all, as the game was in\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1903 | such confusion that she never knew whether it was her turn or not. So she went\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1906 | The hedgehog was engaged in a fight with another hedgehog, which seemed to Alice\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1907 | an excellent opportunity for croqueting one of them with the other: the only\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1908 | difficulty was, that her flamingo was gone across to the other side of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1909 | garden, where Alice could see it trying in a helpless sort of way to fly up into\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1910 | a tree.\n         | ~~~~~~~ This sentence is 60 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1912 | By the time she had caught the flamingo and brought it back, the fight was over,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1913 | and both the hedgehogs were out of sight: “but it doesn’t matter much,” thought\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1914 | Alice, “as all the arches are gone from this side of the ground.” So she tucked\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1918 | When she got back to the Cheshire Cat, she was surprised to find quite a large\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1919 | crowd collected round it: there was a dispute going on between the executioner,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1920 | the King, and the Queen, who were all talking at once, while all the rest were\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1921 | quite silent, and looked very uncomfortable.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1923 | The moment Alice appeared, she was appealed to by all three to settle the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1924 | question, and they repeated their arguments to her, though, as they all spoke at\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1925 | once, she found it very hard indeed to make out exactly what they said.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1927 | The executioner’s argument was, that you couldn’t cut off a head unless there\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1928 | was a body to cut it off from: that he had never had to do such a thing before,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1929 | and he wasn’t going to begin at his time of life.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1944 | The Cat’s head began fading away the moment he was gone, and, by the time he had\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1945 | come back with the Duchess, it had entirely disappeared; so the King and the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1946 | executioner ran wildly up and down looking for it, while the rest of the party\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1947 | went back to the game.\n         | ~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1960 | “I won’t have any pepper in my kitchen at all. Soup does very well without—Maybe\n         |                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1961 | it’s always pepper that makes people hot-tempered,” she went on, very much\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1962 | pleased at having found out a new kind of rule, “and vinegar that makes them\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1963 | sour—and camomile that makes them bitter—and—and barley-sugar and such things\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1964 | that make children sweet-tempered. I only wish people knew that: then they\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1962 | pleased at having found out a new kind of rule, “and vinegar that makes them\n    1963 | sour—and camomile that makes them bitter—and—and barley-sugar and such things\n         |          ^~~~~~~~ Did you mean to spell `camomile` this way?\nSuggest:\n  - Replace with: “chamomile”\n  - Replace with: “chamomiles”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1985 | “’Tis so,” said the Duchess: “and the moral of that is—‘Oh, ’tis love, ’tis\n         |   ^~~ Did you mean to spell `Tis` this way?\nSuggest:\n  - Replace with: “This”\n  - Replace with: “T's”\n  - Replace with: “Ti's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1985 | “’Tis so,” said the Duchess: “and the moral of that is—‘Oh, ’tis love, ’tis\n         |                                                              ^~~ Did you mean to spell `tis` this way?\n    1986 | love, that makes the world go round!’”\nSuggest:\n  - Replace with: “this”\n  - Replace with: “ti's”\n  - Replace with: “tic”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1985 | “’Tis so,” said the Duchess: “and the moral of that is—‘Oh, ’tis love, ’tis\n         |                                                                         ^~~ Did you mean to spell `tis` this way?\n    1986 | love, that makes the world go round!’”\nSuggest:\n  - Replace with: “this”\n  - Replace with: “ti's”\n  - Replace with: “tic”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    2009 | “Right, as usual,” said the Duchess: “what a clear way you have of putting\n         |                                              ^~~~~~~~~ Did you mean the closed compound noun “clearway”?\n    2010 | things!”\nSuggest:\n  - Replace with: “clearway”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2021 | “I quite agree with you,” said the Duchess; “and the moral of that is—‘Be what\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2022 | you would seem to be’—or if you’d like it put more simply—‘Never imagine\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2023 | yourself not to be otherwise than what it might appear to others that what you\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2024 | were or might have been was not otherwise than what you had been would have\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2025 | appeared to them to be otherwise.’”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 67 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2048 | But here, to Alice’s great surprise, the Duchess’s voice died away, even in the\n    2049 | middle of her favourite word ‘moral,’ and the arm that was linked into hers\n         |               ^~~~~~~~~ Did you mean to spell `favourite` this way?\nSuggest:\n  - Replace with: “favorite”\n  - Replace with: “favorites”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2064 | The other guests had taken advantage of the Queen’s absence, and were resting in\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2065 | the shade: however, the moment they saw her, they hurried back to the game, the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2066 | Queen merely remarking that a moment’s delay would cost them their lives.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2068 | All the time they were playing the Queen never left off quarrelling with the\n         |                                                         ^~~~~~~~~~~ Did you mean `quarreling`?\n    2069 | other players, and shouting “Off with his head!” or “Off with her head!” Those\nSuggest:\n  - Replace with: “quarreling”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2069 | other players, and shouting “Off with his head!” or “Off with her head!” Those\n         |                                                                          ^~~~~~\n    2070 | whom she sentenced were taken into custody by the soldiers, who of course had to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2071 | leave off being arches to do this, so that by the end of half an hour or so\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2072 | there were no arches left, and all the players, except the King, the Queen, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2073 | Alice, were in custody and under sentence of execution.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 58 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2091 | They very soon came upon a Gryphon, lying fast asleep in the sun. (If you don’t\n         |                            ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2091 | They very soon came upon a Gryphon, lying fast asleep in the sun. (If you don’t\n    2092 | know what a Gryphon is, look at the picture.) “Up, lazy thing!” said the Queen,\n         |             ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2094 | must go back and see after some executions I have ordered;” and she walked off,\n    2095 | leaving Alice alone with the Gryphon. Alice did not quite like the look of the\n         |                              ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2099 | The Gryphon sat up and rubbed its eyes: then it watched the Queen till she was\n         |     ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2100 | out of sight: then it chuckled. “What fun!” said the Gryphon, half to itself,\n         |                                                      ^~~~~~~ Did you mean `Krypton`?\n    2101 | half to Alice.\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2105 | “Why, she,” said the Gryphon. “It’s all her fancy, that: they never executes\n         |                      ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2114 | his sorrow?” she asked the Gryphon, and the Gryphon answered, very nearly in the\n         |                            ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2114 | his sorrow?” she asked the Gryphon, and the Gryphon answered, very nearly in the\n         |                                             ^~~~~~~ Did you mean `Krypton`?\n    2115 | same words as before, “It’s all his fancy, that: he hasn’t got no sorrow, you\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2121 | “This here young lady,” said the Gryphon, “she wants for to know your history,\n         |                                  ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Agreement (127 priority)\nMessage: |\n    2121 | “This here young lady,” said the Gryphon, “she wants for to know your history,\n    2122 | she do.”\n         |     ^~ The form of the verb must agree in grammatical number with the pronoun.\nSuggest:\n  - Replace with: “does”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2133 | These words were followed by a very long silence, broken only by an occasional\n    2134 | exclamation of “Hjckrrh!” from the Gryphon, and the constant heavy sobbing of\n         |                 ^~~~~~~ Did you mean to spell `Hjckrrh` this way?\nSuggest:\n  - Replace with: “Hickory”\n  - Replace with: “Hacker”\n  - Replace with: “Hackers”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2134 | exclamation of “Hjckrrh!” from the Gryphon, and the constant heavy sobbing of\n         |                                    ^~~~~~~ Did you mean `Krypton`?\n    2135 | the Mock Turtle. Alice was very nearly getting up and saying, “Thank you, sir,\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2148 | “You ought to be ashamed of yourself for asking such a simple question,” added\n    2149 | the Gryphon; and then they both sat silent and looked at poor Alice, who felt\n         |     ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2150 | ready to sink into the earth. At last the Gryphon said to the Mock Turtle,\n         |                                           ^~~~~~~ Did you mean `Krypton`?\n    2151 | “Drive on, old fellow! Don’t be all day about it!” and he went on in these\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2160 | “Hold your tongue!” added the Gryphon, before Alice could speak again. The Mock\n         |                               ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    2176 | “Ah! then yours wasn’t a really good school,” said the Mock Turtle in a tone of\n         |      ^~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Then”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2194 | The Gryphon lifted up both its paws in surprise. “What! Never heard of\n         |     ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2194 | The Gryphon lifted up both its paws in surprise. “What! Never heard of\n    2195 | uglifying!” it exclaimed. “You know what to beautify is, I suppose?”\n         | ^~~~~~~~~ Did you mean to spell `uglifying` this way?\nSuggest:\n  - Replace with: “unifying”\n  - Replace with: “uplifting”\n  - Replace with: “nullifying”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2199 | “Well, then,” the Gryphon went on, “if you don’t know what to uglify is, you are\n         |                   ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2199 | “Well, then,” the Gryphon went on, “if you don’t know what to uglify is, you are\n         |                                                               ^~~~~~ Did you mean to spell `uglify` this way?\n    2200 | a simpleton.”\nSuggest:\n  - Replace with: “ugly”\n  - Replace with: “unify”\n  - Replace with: “uplift”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2205 | “Well, there was Mystery,” the Mock Turtle replied, counting off the subjects on\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2206 | his flappers, “—Mystery, ancient and modern, with Seaography: then Drawling—the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2207 | Drawling-master was an old conger-eel, that used to come once a week: he taught\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2208 | us Drawling, Stretching, and Fainting in Coils.”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    2205 | “Well, there was Mystery,” the Mock Turtle replied, counting off the subjects on\n    2206 | his flappers, “—Mystery, ancient and modern, with Seaography: then Drawling—the\n         |                          ^~~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2206 | his flappers, “—Mystery, ancient and modern, with Seaography: then Drawling—the\n         |                                                   ^~~~~~~~~~ Did you mean to spell `Seaography` this way?\nSuggest:\n  - Replace with: “Scenography”\n  - Replace with: “Stenography”\n  - Replace with: “Demography”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n    2212 | “Well, I can’t show it you myself,” the Mock Turtle said: “I’m too stiff. And\n         |                        ^~~ The possessive version of this word is more common in this context.\nSuggest:\n  - Replace with: “your”\n  - Replace with: “you're a”\n  - Replace with: “you're an”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2212 | “Well, I can’t show it you myself,” the Mock Turtle said: “I’m too stiff. And\n    2213 | the Gryphon never learnt it.”\n         |     ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2215 | “Hadn’t time,” said the Gryphon: “I went to the Classics master, though. He was\n         |                         ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2221 | “So he did, so he did,” said the Gryphon, sighing in his turn; and both\n         |                                  ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2231 | “That’s the reason they’re called lessons,” the Gryphon remarked: “because they\n         |                                                 ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2241 | “That’s enough about lessons,” the Gryphon interrupted in a very decided tone:\n         |                                    ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2248 | voice. “Same as if he had a bone in his throat,” said the Gryphon: and it set to\n         |                                                           ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2252 | “You may not have lived much under the sea—” (“I haven’t,” said Alice)—“and\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2253 | perhaps you were never even introduced to a lobster—” (Alice began to say “I\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2254 | once tasted—” but checked herself hastily, and said “No, never”) “—so you can\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2255 | have no idea what a delightful thing a Lobster Quadrille is!”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 52 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2252 | “You may not have lived much under the sea—” (“I haven’t,” said Alice)—“and\n         |                                                                        ^ This quote has no termination.\n    2253 | perhaps you were never even introduced to a lobster—” (Alice began to say “I\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2253 | perhaps you were never even introduced to a lobster—” (Alice began to say “I\n         |                                                     ^ This quote has no termination.\n    2254 | once tasted—” but checked herself hastily, and said “No, never”) “—so you can\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2259 | “Why,” said the Gryphon, “you first form into a line along the sea-shore—”\n         |                 ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2264 | “That generally takes some time,” interrupted the Gryphon.\n         |                                                   ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2268 | “Each with a lobster as a partner!” cried the Gryphon.\n         |                                               ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2272 | “—change lobsters, and retire in same order,” continued the Gryphon.\n         |                                                             ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2276 | “The lobsters!” shouted the Gryphon, with a bound into the air.\n         |                             ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2280 | “Swim after them!” screamed the Gryphon.\n         |                                 ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2284 | “Change lobsters again!” yelled the Gryphon at the top of its voice.\n         |                                     ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2286 | “Back to land again, and that’s all the first figure,” said the Mock Turtle,\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2287 | suddenly dropping his voice; and the two creatures, who had been jumping about\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2288 | like mad things all this time, sat down again very sadly and quietly, and looked\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2289 | at Alice.\n         | ~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2297 | “Come, let’s try the first figure!” said the Mock Turtle to the Gryphon. “We can\n         |                                                                 ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2300 | “Oh, you sing,” said the Gryphon. “I’ve forgotten the words.”\n         |                          ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    2302 | So they began solemnly dancing round and round Alice, every now and then\n         |                                                                 ^~~ An Oxford comma is necessary here.\n    2303 | treading on her toes when they passed too close, and waving their forepaws to\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2306 | > “Will you walk a little faster?” said a whiting to a snail. “There’s a\n         |                                                               ^ This quote has no termination.\n    2307 | > porpoise close behind us, and he’s treading on my tail. See how eagerly the\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2333 | “Yes,” said Alice, “I’ve often seen them at dinn—” she checked herself hastily.\n         |                                             ^~~~ Did you mean to spell `dinn` this way?\nSuggest:\n  - Replace with: “din”\n  - Replace with: “dine”\n  - Replace with: “ding”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2335 | “I don’t know where Dinn may be,” said the Mock Turtle, “but if you’ve seen them\n         |                     ^~~~ Did you mean to spell `Dinn` this way?\nSuggest:\n  - Replace with: “Din”\n  - Replace with: “Dine”\n  - Replace with: “Diann”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2343 | here the Mock Turtle yawned and shut his eyes.—“Tell her about the reason and\n         |                                                ^ This quote has no termination.\n    2344 | all that,” he said to the Gryphon.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2343 | here the Mock Turtle yawned and shut his eyes.—“Tell her about the reason and\n    2344 | all that,” he said to the Gryphon.\n         |          ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2343 | here the Mock Turtle yawned and shut his eyes.—“Tell her about the reason and\n    2344 | all that,” he said to the Gryphon.\n         |                           ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2346 | “The reason is,” said the Gryphon, “that they would go with the lobsters to the\n         |                           ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2354 | “I can tell you more than that, if you like,” said the Gryphon. “Do you know why\n         |                                                        ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2359 | “It does the boots and shoes,” the Gryphon replied very solemnly.\n         |                                    ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2364 | “Why, what are your shoes done with?” said the Gryphon. “I mean, what makes them\n         |                                                ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2370 | “Boots and shoes under the sea,” the Gryphon went on in a deep voice, “are done\n         |                                      ^~~~~~~ Did you mean `Krypton`?\n    2371 | with a whiting. Now you know.”\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2375 | “Soles and eels, of course,” the Gryphon replied rather impatiently: “any shrimp\n         |                                  ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2392 | “I mean what I say,” the Mock Turtle replied in an offended tone. And the\n    2393 | Gryphon added “Come, let’s hear some of your adventures.”\n         | ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2401 | “No, no! The adventures first,” said the Gryphon in an impatient tone:\n         |                                          ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2407 | wide, but she gained courage as she went on. Her listeners were perfectly quiet\n         |                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2408 | till she got to the part about her repeating “You are old, Father William,” to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2409 | the Caterpillar, and the words all coming different, and then the Mock Turtle\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2410 | drew a long breath, and said “That’s very curious.”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2412 | “It’s all about as curious as it can be,” said the Gryphon.\n         |                                                    ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2415 | to hear her try and repeat something now. Tell her to begin.” He looked at the\n    2416 | Gryphon as if he thought it had some kind of authority over Alice.\n         | ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2418 | “Stand up and repeat ‘’Tis the voice of the sluggard,’” said the Gryphon.\n         |                        ^~~ Did you mean to spell `Tis` this way?\nSuggest:\n  - Replace with: “This”\n  - Replace with: “T's”\n  - Replace with: “Ti's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2418 | “Stand up and repeat ‘’Tis the voice of the sluggard,’” said the Gryphon.\n         |                                                                  ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2425 | > “’Tis the voice of the Lobster; I heard him declare, “You have baked me too\n         |   ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2425 | > “’Tis the voice of the Lobster; I heard him declare, “You have baked me too\n         |     ^~~ Did you mean to spell `Tis` this way?\nSuggest:\n  - Replace with: “This”\n  - Replace with: “T's”\n  - Replace with: “Ti's”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2427 | > Trims his belt and his buttons, and turns out his toes.”\n         |                                                          ^ This quote has no termination.\n    2428 | >\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2428 | >\n    2429 | > (later editions continued as follows When the sands are all dry, he is gay as\n         |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2430 | > a lark, And will talk in contemptuous tones of the Shark, But, when the tide\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2431 | > rises and sharks are around, His voice has a timid and tremulous sound.)\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2433 | “That’s different from what I used to say when I was a child,” said the Gryphon.\n         |                                                                         ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2443 | “She can’t explain it,” said the Gryphon hastily. “Go on with the next verse.”\n         |                                  ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2451 | “Go on with the next verse,” the Gryphon repeated impatiently: “it begins ‘I\n         |                                  ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2470 | “Yes, I think you’d better leave off,” said the Gryphon: and Alice was only too\n         |                                                 ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2473 | “Shall we try another figure of the Lobster Quadrille?” the Gryphon went on. “Or\n         |                                                             ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2476 | “Oh, a song, please, if the Mock Turtle would be so kind,” Alice replied, so\n    2477 | eagerly that the Gryphon said, in a rather offended tone, “Hm! No accounting for\n         |                  ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2477 | eagerly that the Gryphon said, in a rather offended tone, “Hm! No accounting for\n         |                                                            ^~ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “HM”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2477 | eagerly that the Gryphon said, in a rather offended tone, “Hm! No accounting for\n         |                                                            ^~ Did you mean to spell `Hm` this way?\nSuggest:\n  - Replace with: “Ha”\n  - Replace with: “Ham”\n  - Replace with: “He”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2483 | > “Beautiful Soup, so rich and green, Waiting in a hot tureen! Who for such\n         |   ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                 ^~~~~~~ Did you mean to spell `ootiful` this way?\nSuggest:\n  - Replace with: “dutiful”\n  - Replace with: “pitiful”\n  - Replace with: “potful”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                         ^~~ Did you mean to spell `Soo` this way?\nSuggest:\n  - Replace with: “So”\n  - Replace with: “Soc”\n  - Replace with: “Sod”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                             ^~~ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “OOP”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                             ^~~ Did you mean to spell `oop` this way?\nSuggest:\n  - Replace with: “oops”\n  - Replace with: “op”\n  - Replace with: “opp”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                                       ^~~~~~~ Did you mean to spell `ootiful` this way?\nSuggest:\n  - Replace with: “dutiful”\n  - Replace with: “pitiful”\n  - Replace with: “potful”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                                               ^~~ Did you mean to spell `Soo` this way?\nSuggest:\n  - Replace with: “So”\n  - Replace with: “Soc”\n  - Replace with: “Sod”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                                                   ^~~ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “OOP”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                                                   ^~~ Did you mean to spell `oop` this way?\nSuggest:\n  - Replace with: “oops”\n  - Replace with: “op”\n  - Replace with: “opp”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                                                        ^~~ Did you mean to spell `Soo` this way?\n    2486 | > of the e—e—evening, Beautiful, beautiful Soup!\nSuggest:\n  - Replace with: “So”\n  - Replace with: “Soc”\n  - Replace with: “Sod”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                                                            ^~~ This word's canonical spelling is all-caps.\n    2486 | > of the e—e—evening, Beautiful, beautiful Soup!\nSuggest:\n  - Replace with: “OOP”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2485 | > evening, beautiful Soup! Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop\n         |                                                                            ^~~ Did you mean to spell `oop` this way?\n    2486 | > of the e—e—evening, Beautiful, beautiful Soup!\nSuggest:\n  - Replace with: “oops”\n  - Replace with: “op”\n  - Replace with: “opp”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    2488 | > “Beautiful Soup! Who cares for fish, Game, or any other dish? Who would not\n    2489 | > give all else for two p ennyworth only of beautiful Soup? Pennyworth only of\n         |                         ^~~~~~~~~~~ It seems these words would go better together.\nSuggest:\n  - Replace with: “pennyworth”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2488 | > “Beautiful Soup! Who cares for fish, Game, or any other dish? Who would not\n    2489 | > give all else for two p ennyworth only of beautiful Soup? Pennyworth only of\n         |                           ^~~~~~~~~ Did you mean `pennyworth`?\nSuggest:\n  - Replace with: “pennyworth”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                        ^~~~~~~ Did you mean to spell `ootiful` this way?\nSuggest:\n  - Replace with: “dutiful”\n  - Replace with: “pitiful”\n  - Replace with: “potful”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                                ^~~ Did you mean to spell `Soo` this way?\nSuggest:\n  - Replace with: “So”\n  - Replace with: “Soc”\n  - Replace with: “Sod”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                                    ^~~ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “OOP”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                                    ^~~ Did you mean to spell `oop` this way?\nSuggest:\n  - Replace with: “oops”\n  - Replace with: “op”\n  - Replace with: “opp”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                                              ^~~~~~~ Did you mean to spell `ootiful` this way?\nSuggest:\n  - Replace with: “dutiful”\n  - Replace with: “pitiful”\n  - Replace with: “potful”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                                                      ^~~ Did you mean to spell `Soo` this way?\nSuggest:\n  - Replace with: “So”\n  - Replace with: “Soc”\n  - Replace with: “Sod”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                                                          ^~~ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “OOP”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                                                          ^~~ Did you mean to spell `oop` this way?\nSuggest:\n  - Replace with: “oops”\n  - Replace with: “op”\n  - Replace with: “opp”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                                                               ^~~ Did you mean to spell `Soo` this way?\n    2491 | > e—e—evening, Beautiful, beauti—FUL SOUP!”\nSuggest:\n  - Replace with: “So”\n  - Replace with: “Soc”\n  - Replace with: “Sod”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                                                                   ^~~ This word's canonical spelling is all-caps.\n    2491 | > e—e—evening, Beautiful, beauti—FUL SOUP!”\nSuggest:\n  - Replace with: “OOP”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n         |                                                                   ^~~ Did you mean to spell `oop` this way?\n    2491 | > e—e—evening, Beautiful, beauti—FUL SOUP!”\nSuggest:\n  - Replace with: “oops”\n  - Replace with: “op”\n  - Replace with: “opp”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n    2491 | > e—e—evening, Beautiful, beauti—FUL SOUP!”\n         |                           ^~~~~~ Did you mean to spell `beauti` this way?\nSuggest:\n  - Replace with: “beauty”\n  - Replace with: “beaut”\n  - Replace with: “beauts”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n    2491 | > e—e—evening, Beautiful, beauti—FUL SOUP!”\n         |                           ^~~~~~ `beauti` should probably be written as `beau ti`.\nSuggest:\n  - Replace with: “beau ti”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2490 | > beautiful Soup? Beau—ootiful Soo—oop! Beau—ootiful Soo—oop! Soo—oop of the\n    2491 | > e—e—evening, Beautiful, beauti—FUL SOUP!”\n         |                                  ^~~ Did you mean to spell `FUL` this way?\nSuggest:\n  - Replace with: “Full”\n  - Replace with: “Flu”\n  - Replace with: “Fol”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2493 | “Chorus again!” cried the Gryphon, and the Mock Turtle had just begun to repeat\n         |                           ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2496 | “Come on!” cried the Gryphon, and, taking Alice by the hand, it hurried off,\n         |                      ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2499 | “What trial is it?” Alice panted as she ran; but the Gryphon only answered “Come\n         |                                                      ^~~~~~~ Did you mean `Krypton`?\n    2500 | on!” and ran the faster, while more and more faintly came, carried on the breeze\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2503 | > “Soo—oop of the e—e—evening, Beautiful, beautiful Soup!”\n         |    ^~~ Did you mean to spell `Soo` this way?\nSuggest:\n  - Replace with: “So”\n  - Replace with: “Soc”\n  - Replace with: “Sod”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2503 | > “Soo—oop of the e—e—evening, Beautiful, beautiful Soup!”\n         |        ^~~ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “OOP”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2503 | > “Soo—oop of the e—e—evening, Beautiful, beautiful Soup!”\n         |        ^~~ Did you mean to spell `oop` this way?\nSuggest:\n  - Replace with: “oops”\n  - Replace with: “op”\n  - Replace with: “opp”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2507 | The King and Queen of Hearts were seated on their throne when they arrived, with\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2508 | a great crowd assembled about them—all sorts of little birds and beasts, as well\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2509 | as the whole pack of cards: the Knave was standing before them, in chains, with\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2510 | a soldier on each side to guard him; and near the King was the White Rabbit,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2511 | with a trumpet in one hand, and a scroll of parchment in the other. In the very\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 75 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2511 | with a trumpet in one hand, and a scroll of parchment in the other. In the very\n         |                                                                     ^~~~~~~~~~~~\n    2512 | middle of the court was a table, with a large dish of tarts upon it: they looked\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2513 | so good, that it made Alice quite hungry to look at them—“I wish they’d get the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2514 | trial done,” she thought, “and hand round the refreshments!” But there seemed to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 46 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2513 | so good, that it made Alice quite hungry to look at them—“I wish they’d get the\n         |                                                          ^ This quote has no termination.\n    2514 | trial done,” she thought, “and hand round the refreshments!” But there seemed to\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2513 | so good, that it made Alice quite hungry to look at them—“I wish they’d get the\n    2514 | trial done,” she thought, “and hand round the refreshments!” But there seemed to\n         |            ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2523 | The judge, by the way, was the King; and as he wore his crown over the wig,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2524 | (look at the frontispiece if you want to see how he did it,) he did not look at\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2525 | all comfortable, and it was certainly not becoming.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2534 | The twelve jurors were all writing very busily on slates. “What are they doing?”\n    2535 | Alice whispered to the Gryphon. “They can’t have anything to put down yet,\n         |                        ^~~~~~~ Did you mean `Krypton`?\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2538 | “They’re putting down their names,” the Gryphon whispered in reply, “for fear\n         |                                         ^~~~~~~ Did you mean `Krypton`?\n    2539 | they should forget them before the end of the trial.”\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2547 | even make out that one of them didn’t know how to spell “stupid,” and that he\n    2548 | had to ask his neighbour to tell him. “A nice muddle their slates’ll be in\n         |                ^~~~~~~~~ Did you mean to spell `neighbour` this way?\nSuggest:\n  - Replace with: “neighbor”\n  - Replace with: “neighbors”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2548 | had to ask his neighbour to tell him. “A nice muddle their slates’ll be in\n         |                                                            ^~~~~~~~~ Did you mean to spell `slates’ll` this way?\n    2549 | before the trial’s over!” thought Alice.\nSuggest:\n  - Replace with: “slate's”\n  - Replace with: “slates”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2553 | opportunity of taking it away. She did it so quickly that the poor little juror\n         |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2554 | (it was Bill, the Lizard) could not make out at all what had become of it; so,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2555 | after hunting all about for it, he was obliged to write with one finger for the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2556 | rest of the day; and this was of very little use, as it left no mark on the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2557 | slate.\n         | ~~~~~~ This sentence is 62 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2608 | This did not seem to encourage the witness at all: he kept shifting from one\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2609 | foot to the other, looking uneasily at the Queen, and in his confusion he bit a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2610 | large piece out of his teacup instead of the bread-and-butter.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2612 | Just at this moment Alice felt a very curious sensation, which puzzled her a\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2613 | good deal until she made out what it was: she was beginning to grow larger\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2614 | again, and she thought at first she would get up and leave the court; but on\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2615 | second thoughts she decided to remain where she was as long as there was room\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2616 | for her.\n         | ~~~~~~~~ This sentence is 62 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2631 | All this time the Queen had never left off staring at the Hatter, and, just as\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2632 | the Dormouse crossed the court, she said to one of the officers of the court,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2633 | “Bring me the list of the singers in the last concert!” on which the wretched\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2639 | “I’m a poor man, your Majesty,” the Hatter began, in a trembling voice, “—and I\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2640 | hadn’t begun my tea—not above a week or so—and what with the bread-and-butter\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2641 | getting so thin—and the twinkling of the tea—”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    2643 | “The twinkling of the what?” said the King.\n         |                   ^~~~ Remove `the` before `what`. In most contexts, `what` alone is clearer.\nSuggest:\n  - Remove error\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2684 | “I’m glad I’ve seen that done,” thought Alice. “I’ve so often read in the\n         |                                                ^ This quote has no termination.\n    2685 | newspapers, at the end of trials, “There was some attempts at applause, which\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2687 | what it meant till now.”\n         |                        ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2722 | “Well, if I must, I must,” the King said, with a melancholy air, and, after\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2723 | folding his arms and frowning at the cook till his eyes were nearly out of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2724 | sight, he said in a deep voice, “What are tarts made of?”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Grammar (31 priority)\nMessage: |\n    2741 | to see what the next witness would be like, “—for they haven’t got much evidence\n         |                                                   ^~~~ Use `them` when the pronoun follows a preposition or transitive verb.\n    2742 | yet,” she said to herself. Imagine her surprise, when the White Rabbit read out,\nSuggest:\n  - Replace with: “them”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2747 | “Here!” cried Alice, quite forgetting in the flurry of the moment how large she\n         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2748 | had grown in the last few minutes, and she jumped up in such a hurry that she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2749 | tipped over the jury-box with the edge of her skirt, upsetting all the jurymen\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2750 | on to the heads of the crowd below, and there they lay sprawling about,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2751 | reminding her very much of a globe of goldfish she had accidentally upset the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2752 | week before.\n         | ~~~~~~~~~~~~ This sentence is 75 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2754 | “Oh, I beg your pardon!” she exclaimed in a tone of great dismay, and began\n         |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2755 | picking them up again as quickly as she could, for the accident of the goldfish\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2756 | kept running in her head, and she had a vague sort of idea that they must be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2757 | collected at once and put back into the jury-box, or they would die.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 56 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2769 | As soon as the jury had a little recovered from the shock of being upset, and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2770 | their slates and pencils had been found and handed back to them, they set to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2771 | work very diligently to write out a history of the accident, all except the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2772 | Lizard, who seemed too much overcome to do anything but sit with its mouth open,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2773 | gazing up into the roof of the court.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 68 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2870 | > “They told me you had been to her, And mentioned me to him: She gave me a good\n         |   ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2886 | > from all the rest, Between yourself and me.”\n         |                                              ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2900 | spreading out the verses on his knee, and looking at them with one eye; “I seem\n         |                                                                         ^ This quote has no termination.\n    2901 | to see some meaning in them, after all. “—said I could not swim—” you can’t\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2902 | swim, can you?” he added, turning to the Knave.\n         |               ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2907 | “All right, so far,” said the King, and he went on muttering over the verses to\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2908 | himself: “‘We know it to be true—’ that’s the jury, of course—‘I gave her one,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2909 | they gave him two—’ why, that must be what he did with the tarts, you know—”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2918 | spoke. (The unfortunate little Bill had left off writing on his slate with one\n         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2919 | finger, as he found it made no mark; but he now hastily began again, using the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2920 | ink, that was trickling down his face, as long as it lasted.)\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2929 | “No, no!” said the Queen. “Sentence first—verdict afterwards.”\n         |                                                   ^~~~~~~~~~ Did you mean to spell `afterwards` this way?\nSuggest:\n  - Replace with: “afterwords”\n  - Replace with: “afterward”\n  - Replace with: “afterword's”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2943 | At this the whole pack rose up into the air, and came flying down upon her: she\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2944 | gave a little scream, half of fright and half of anger, and tried to beat them\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2945 | off, and found herself lying on the bank, with her head in the lap of her\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2946 | sister, who was gently brushing away some dead leaves that had fluttered down\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2947 | from the trees upon her face.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 68 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2951 | “Oh, I’ve had such a curious dream!” said Alice, and she told her sister, as\n         |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2952 | well as she could remember them, all these strange Adventures of hers that you\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2953 | have just been reading about; and when she had finished, her sister kissed her,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2954 | and said, “It was a curious dream, dear, certainly: but now run in to your tea;\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2955 | it’s getting late.” So Alice got up and ran off, thinking while she ran, as well\n         | ~~~~~~~~~~~~~~~~~~ This sentence is 55 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2960 | But her sister sat still just as she left her, leaning her head on her hand,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2961 | watching the setting sun, and thinking of little Alice and all her wonderful\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2962 | Adventures, till she too began dreaming after a fashion, and this was her\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2963 | dream:—\n         | ~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2965 | First, she dreamed of little Alice herself, and once again the tiny hands were\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2966 | clasped upon her knee, and the bright eager eyes were looking up into hers—she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2967 | could hear the very tones of her voice, and see that queer little toss of her\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2968 | head to keep back the wandering hair that would always get into her eyes—and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2969 | still as she listened, or seemed to listen, the whole place around her became\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2970 | alive with the strange creatures of her little sister’s dream.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 84 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2972 | The long grass rustled at her feet as the White Rabbit hurried by—the frightened\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2973 | Mouse splashed his way through the neighbouring pool—she could hear the rattle\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2974 | of the teacups as the March Hare and his friends shared their never-ending meal,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2975 | and the shrill voice of the Queen ordering off her unfortunate guests to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2976 | execution—once more the pig-baby was sneezing on the Duchess’s knee, while\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2977 | plates and dishes crashed around it—once more the shriek of the Gryphon, the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2978 | squeaking of the Lizard’s slate-pencil, and the choking of the suppressed\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2979 | guinea-pigs, filled the air, mixed up with the distant sobs of the miserable\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2980 | Mock Turtle.\n         | ~~~~~~~~~~~~ This sentence is 111 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2972 | The long grass rustled at her feet as the White Rabbit hurried by—the frightened\n    2973 | Mouse splashed his way through the neighbouring pool—she could hear the rattle\n         |                                    ^~~~~~~~~~~~ Did you mean `neighboring`?\n    2974 | of the teacups as the March Hare and his friends shared their never-ending meal,\nSuggest:\n  - Replace with: “neighboring”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2977 | plates and dishes crashed around it—once more the shriek of the Gryphon, the\n         |                                                                 ^~~~~~~ Did you mean `Krypton`?\n    2978 | squeaking of the Lizard’s slate-pencil, and the choking of the suppressed\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2982 | So she sat on, with closed eyes, and half believed herself in Wonderland, though\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2983 | she knew she had but to open them again, and all would change to dull\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2984 | reality—the grass would be only rustling in the wind, and the pool rippling to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2985 | the waving of the reeds—the rattling teacups would change to tinkling\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2986 | sheep-bells, and the Queen’s shrill cries to the voice of the shepherd boy—and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2987 | the sneeze of the baby, the shriek of the Gryphon, and all the other queer\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2988 | noises, would change (she knew) to the confused clamour of the busy\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2989 | farm-yard—while the lowing of the cattle in the distance would take the place of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2990 | the Mock Turtle’s heavy sobs.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 119 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2987 | the sneeze of the baby, the shriek of the Gryphon, and all the other queer\n         |                                           ^~~~~~~ Did you mean `Krypton`?\n    2988 | noises, would change (she knew) to the confused clamour of the busy\nSuggest:\n  - Replace with: “Krypton”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2988 | noises, would change (she knew) to the confused clamour of the busy\n         |                                                 ^~~~~~~ Did you mean to spell `clamour` this way?\n    2989 | farm-yard—while the lowing of the cattle in the distance would take the place of\nSuggest:\n  - Replace with: “clamor”\n  - Replace with: “glamour”\n  - Replace with: “clamber”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2992 | Lastly, she pictured to herself how this same little sister of hers would, in\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2993 | the after-time, be herself a grown woman; and how she would keep, through all\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2994 | her riper years, the simple and loving heart of her childhood: and how she would\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2995 | gather about her other little children, and make their eyes bright and eager\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2996 | with many a strange tale, perhaps even with the dream of Wonderland of long ago:\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2997 | and how she would feel with all their simple sorrows, and find a pleasure in all\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2998 | their simple joys, remembering her own child-life, and the happy summer days.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 101 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    2993 | the after-time, be herself a grown woman; and how she would keep, through all\n    2994 | her riper years, the simple and loving heart of her childhood: and how she would\n         |                      ^~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\n"
  },
  {
    "path": "harper-core/tests/text/linters/Computer science.snap.yml",
    "content": "Lint:    Capitalization (127 priority)\nMessage: |\n       6 | # Computer science\n         | ^~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “# Computer Science”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n      27 | problem-solving, decision-making, environmental adaptation, planning and\n         |                                                             ^~~~~~~~ An Oxford comma is necessary here.\n      28 | learning found in humans and animals. Within artificial intelligence, computer\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      45 | Wilhelm Schickard designed and constructed the first working mechanical\n         |         ^~~~~~~~~ Did you mean to spell `Schickard` this way?\nSuggest:\n  - Replace with: “Schick's”\n  - Replace with: “Shipyard”\n  - Replace with: “Schick”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      46 | calculator in 1623. In 1673, Gottfried Leibniz demonstrated a digital mechanical\n         |                              ^~~~~~~~~ Did you mean to spell `Gottfried` this way?\nSuggest:\n  - Replace with: “Guttered”\n  - Replace with: “Lotteries”\n  - Replace with: “Notified”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      46 | calculator in 1623. In 1673, Gottfried Leibniz demonstrated a digital mechanical\n      47 | calculator, called the Stepped Reckoner. Leibniz may be considered the first\n         |                                ^~~~~~~~ Did you mean to spell `Reckoner` this way?\nSuggest:\n  - Replace with: “Reckoned”\n  - Replace with: “Rickover”\n  - Replace with: “Reasoner”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      49 | including the fact that he documented the binary number system. In 1820, Thomas\n      50 | de Colmar launched the mechanical calculator industry[note 1] when he invented\n         |    ^~~~~~ Did you mean to spell `Colmar` this way?\nSuggest:\n  - Replace with: “Collar”\n  - Replace with: “Cellar”\n  - Replace with: “Clear”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      50 | de Colmar launched the mechanical calculator industry[note 1] when he invented\n      51 | his simplified arithmometer, the first calculating machine strong enough and\n         |                ^~~~~~~~~~~~ Did you mean to spell `arithmometer` this way?\nSuggest:\n  - Replace with: “arithmetic”\n  - Replace with: “anemometer”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      59 | programmable.[note 2] In 1843, during the translation of a French article on the\n         |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      60 | Analytical Engine, Ada Lovelace wrote, in one of the many notes she included, an\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      61 | algorithm to compute the Bernoulli numbers, which is considered to be the first\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      62 | published algorithm ever specifically tailored for implementation on a computer.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      65 | Following Babbage, although unaware of his earlier work, Percy Ludgate in 1909\n         |                                                                ^~~~~~~ Did you mean to spell `Ludgate` this way?\n      66 | published the 2nd of the only two designs for mechanical analytical engines in\nSuggest:\n  - Replace with: “Legate”\n  - Replace with: “Luggage”\n  - Replace with: “Luddite”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      67 | history. In 1914, the Spanish engineer Leonardo Torres Quevedo published his\n         |                                                        ^~~~~~~ Did you mean to spell `Quevedo` this way?\n      68 | Essays on Automatics, and designed, inspired by Babbage, a theoretical\nSuggest:\n  - Replace with: “Queued”\n  - Replace with: “Acevedo”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      71 | 1920, to celebrate the 100th anniversary of the invention of the arithmometer,\n         |                                                                  ^~~~~~~~~~~~ Did you mean to spell `arithmometer` this way?\n      72 | Torres presented in Paris the Electromechanical Arithmometer, a prototype that\nSuggest:\n  - Replace with: “arithmetic”\n  - Replace with: “anemometer”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      72 | Torres presented in Paris the Electromechanical Arithmometer, a prototype that\n         |                                                 ^~~~~~~~~~~~ Did you mean to spell `Arithmometer` this way?\n      73 | demonstrated the feasibility of an electromechanical analytical engine, on which\nSuggest:\n  - Replace with: “Arithmetic”\n  - Replace with: “Anemometer”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      74 | commands could be typed and the results printed automatically. In 1937, one\n         |                                                                ^~~~~~~~~~~~~\n      75 | hundred years after Babbage's impossible dream, Howard Aiken convinced IBM,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      76 | which was making all kinds of punched card equipment and was also in the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      77 | calculator business to develop his giant programmable calculator, the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      78 | ASCC/Harvard Mark I, based on Babbage's Analytical Engine, which itself used\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      79 | cards and a central computing unit. When the machine was finished, some hailed\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      77 | calculator business to develop his giant programmable calculator, the\n      78 | ASCC/Harvard Mark I, based on Babbage's Analytical Engine, which itself used\n         | ^~~~ Did you mean to spell `ASCC` this way?\nSuggest:\n  - Replace with: “Ac”\n  - Replace with: “Ace”\n  - Replace with: “Act”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      82 | During the 1940s, with the development of new and more powerful computing\n      83 | machines such as the Atanasoff–Berry computer and ENIAC, the term computer came\n         |                      ^~~~~~~~~ Did you mean to spell `Atanasoff` this way?\nSuggest:\n  - Replace with: “Standoff”\n  - Replace with: “Stand off”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      83 | machines such as the Atanasoff–Berry computer and ENIAC, the term computer came\n         |                                                   ^~~~~ Did you mean to spell `ENIAC` this way?\n      84 | to refer to the machines rather than their human predecessors. As it became\nSuggest:\n  - Replace with: “Enact”\n  - Replace with: “Epic”\n  - Replace with: “Enc”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n      87 | 1945, IBM founded the Watson Scientific Computing Laboratory at Columbia\n         |                                                                 ^~~~~~~~~\n      88 | University in New York City. The renovated fraternity house on Manhattan's West\n         | ~~~~~~~~~~ Ensure proper capitalization of major universities in the United States.\nSuggest:\n  - Replace with: “Columbia University”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n      91 | around the world. Ultimately, the close relationship between IBM and Columbia\n         |                                                                      ^~~~~~~~~\n      92 | University was instrumental in the emergence of a new scientific discipline,\n         | ~~~~~~~~~~ Ensure proper capitalization of major universities in the United States.\nSuggest:\n  - Replace with: “Columbia University”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     102 | ## Etymology and scope\n         | ^~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “## Etymology and Scope”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     104 | Although first proposed in 1956, the term \"computer science\" appears in a 1959\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     105 | article in Communications of the ACM, in which Louis Fein argues for the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     106 | creation of a Graduate School in Computer Sciences analogous to the creation of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     107 | Harvard Business School in 1921. Louis justifies the name by arguing that, like\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     105 | article in Communications of the ACM, in which Louis Fein argues for the\n         |                                                      ^~~~ Did you mean to spell `Fein` this way?\n     106 | creation of a Graduate School in Computer Sciences analogous to the creation of\nSuggest:\n  - Replace with: “Fen”\n  - Replace with: “Fern”\n  - Replace with: “Fin”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     110 | and those of others such as numerical analyst George Forsythe, were rewarded:\n         |                                                      ^~~~~~~~ Did you mean `Forsythia`?\nSuggest:\n  - Replace with: “Forsythia”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     115 | computing science, to emphasize precisely that difference. Danish scientist\n     116 | Peter Naur suggested the term datalogy, to reflect the fact that the scientific\n         |       ^~~~ Did you mean to spell `Naur` this way?\nSuggest:\n  - Replace with: “Nair”\n  - Replace with: “Nauru”\n  - Replace with: “Nag”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     115 | computing science, to emphasize precisely that difference. Danish scientist\n     116 | Peter Naur suggested the term datalogy, to reflect the fact that the scientific\n         |                               ^~~~~~~~ Did you mean to spell `datalogy` this way?\nSuggest:\n  - Replace with: “analogy”\n  - Replace with: “catalog”\n  - Replace with: “catalogs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     118 | involving computers. The first scientific institution to use the term was the\n     119 | Department of Datalogy at the University of Copenhagen, founded in 1969, with\n         |               ^~~~~~~~ Did you mean to spell `Datalogy` this way?\nSuggest:\n  - Replace with: “DataDog”\n  - Replace with: “Analogy”\n  - Replace with: “Catalog”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     119 | Department of Datalogy at the University of Copenhagen, founded in 1969, with\n     120 | Peter Naur being the first professor in datalogy. The term is used mainly in the\n         |       ^~~~ Did you mean to spell `Naur` this way?\nSuggest:\n  - Replace with: “Nair”\n  - Replace with: “Nauru”\n  - Replace with: “Nag”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     119 | Department of Datalogy at the University of Copenhagen, founded in 1969, with\n     120 | Peter Naur being the first professor in datalogy. The term is used mainly in the\n         |                                         ^~~~~~~~ Did you mean to spell `datalogy` this way?\nSuggest:\n  - Replace with: “analogy”\n  - Replace with: “catalog”\n  - Replace with: “catalogs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     121 | Scandinavian countries. An alternative term, also proposed by Naur, is data\n         |                                                               ^~~~ Did you mean to spell `Naur` this way?\n     122 | science; this is now used for a multi-disciplinary field of data analysis,\nSuggest:\n  - Replace with: “Nair”\n  - Replace with: “Nauru”\n  - Replace with: “Nag”\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n     122 | science; this is now used for a multi-disciplinary field of data analysis,\n         |                                 ^~~~~~~~~~~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\n     123 | including statistics and databases.\nSuggest:\n  - Replace with: “multidisciplinary”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     126 | field of computing were suggested (albeit facetiously) in the Communications of\n     127 | the ACM—turingineer, turologist, flow-charts-man, applied meta-mathematician,\n         |         ^~~~~~~~~~~ Did you mean to spell `turingineer` this way?\nSuggest:\n  - Replace with: “engineer”\n  - Replace with: “springier”\n  - Replace with: “springiness”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     126 | field of computing were suggested (albeit facetiously) in the Communications of\n     127 | the ACM—turingineer, turologist, flow-charts-man, applied meta-mathematician,\n         |                      ^~~~~~~~~~ Did you mean to spell `turologist` this way?\nSuggest:\n  - Replace with: “theologist”\n  - Replace with: “urologist”\n  - Replace with: “neurologist”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     128 | and applied epistemologist. Three months later in the same journal, comptologist\n         |                                                                     ^~~~~~~~~~~~ Did you mean `cosmetologist`?\n     129 | was suggested, followed next year by hypologist. The term computics has also\nSuggest:\n  - Replace with: “cosmetologist”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     128 | and applied epistemologist. Three months later in the same journal, comptologist\n     129 | was suggested, followed next year by hypologist. The term computics has also\n         |                                      ^~~~~~~~~~ Did you mean to spell `hypologist` this way?\nSuggest:\n  - Replace with: “horologist”\n  - Replace with: “hydrologist”\n  - Replace with: “apologist”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     129 | was suggested, followed next year by hypologist. The term computics has also\n         |                                                           ^~~~~~~~~ Did you mean to spell `computics` this way?\n     130 | been suggested. In Europe, terms derived from contracted translations of the\nSuggest:\n  - Replace with: “computers”\n  - Replace with: “computes”\n  - Replace with: “computing”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     130 | been suggested. In Europe, terms derived from contracted translations of the\n         |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     131 | expression \"automatic information\" (e.g. \"informazione automatica\" in Italian)\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     132 | or \"information and mathematics\" are often used, e.g. informatique (French),\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     133 | Informatik (German), informatica (Italian, Dutch), informática (Spanish,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     134 | Portuguese), informatika (Slavic languages and Hungarian) or pliroforiki\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     135 | (πληροφορική, which means informatics) in Greek. Similar words have also been\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     131 | expression \"automatic information\" (e.g. \"informazione automatica\" in Italian)\n         |                                           ^~~~~~~~~~~~ Did you mean `information`?\n     132 | or \"information and mathematics\" are often used, e.g. informatique (French),\nSuggest:\n  - Replace with: “information”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     131 | expression \"automatic information\" (e.g. \"informazione automatica\" in Italian)\n         |                                                        ^~~~~~~~~~ Did you mean to spell `automatica` this way?\n     132 | or \"information and mathematics\" are often used, e.g. informatique (French),\nSuggest:\n  - Replace with: “automatic”\n  - Replace with: “automatics”\n  - Replace with: “automatic's”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     131 | expression \"automatic information\" (e.g. \"informazione automatica\" in Italian)\n         |                                                        ^~~~~~~~~~ `automatica` should probably be written as `automatic a`.\n     132 | or \"information and mathematics\" are often used, e.g. informatique (French),\nSuggest:\n  - Replace with: “automatic a”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     132 | or \"information and mathematics\" are often used, e.g. informatique (French),\n         |                                                       ^~~~~~~~~~~~ Did you mean `informative`?\n     133 | Informatik (German), informatica (Italian, Dutch), informática (Spanish,\nSuggest:\n  - Replace with: “informative”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     132 | or \"information and mathematics\" are often used, e.g. informatique (French),\n     133 | Informatik (German), informatica (Italian, Dutch), informática (Spanish,\n         | ^~~~~~~~~~ Did you mean to spell `Informatik` this way?\nSuggest:\n  - Replace with: “Informatics”\n  - Replace with: “Information”\n  - Replace with: “Informative”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     132 | or \"information and mathematics\" are often used, e.g. informatique (French),\n     133 | Informatik (German), informatica (Italian, Dutch), informática (Spanish,\n         |                      ^~~~~~~~~~~ Did you mean to spell `informatica` this way?\nSuggest:\n  - Replace with: “informatics”\n  - Replace with: “information”\n  - Replace with: “informative”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     133 | Informatik (German), informatica (Italian, Dutch), informática (Spanish,\n         |                                                    ^~~~~~~~~~~ Did you mean `informatics`?\n     134 | Portuguese), informatika (Slavic languages and Hungarian) or pliroforiki\nSuggest:\n  - Replace with: “informatics”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     133 | Informatik (German), informatica (Italian, Dutch), informática (Spanish,\n     134 | Portuguese), informatika (Slavic languages and Hungarian) or pliroforiki\n         |              ^~~~~~~~~~~ Did you mean to spell `informatika` this way?\nSuggest:\n  - Replace with: “informatics”\n  - Replace with: “information”\n  - Replace with: “informative”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     134 | Portuguese), informatika (Slavic languages and Hungarian) or pliroforiki\n         |                                                              ^~~~~~~~~~~ Did you mean to spell `pliroforiki` this way?\n     135 | (πληροφορική, which means informatics) in Greek. Similar words have also been\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     140 | A folkloric quotation, often attributed to—but almost certainly not first\n     141 | formulated by—Edsger Dijkstra, states that \"computer science is no more about\n         |               ^~~~~~ Did you mean to spell `Edsger` this way?\nSuggest:\n  - Replace with: “Edger”\n  - Replace with: “Eager”\n  - Replace with: “Edge”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     154 | computing is a mathematical science. Early computer science was strongly\n         |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     155 | influenced by the work of mathematicians such as Kurt Gödel, Alan Turing, John\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     156 | von Neumann, Rózsa Péter and Alonzo Church and there continues to be a useful\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     157 | interchange of ideas between the two fields in areas such as mathematical logic,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     158 | category theory, domain theory, and algebra.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     155 | influenced by the work of mathematicians such as Kurt Gödel, Alan Turing, John\n     156 | von Neumann, Rózsa Péter and Alonzo Church and there continues to be a useful\n         | ^~~ Did you mean to spell `von` this way?\nSuggest:\n  - Replace with: “van”\n  - Replace with: “vol”\n  - Replace with: “vow”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     155 | influenced by the work of mathematicians such as Kurt Gödel, Alan Turing, John\n     156 | von Neumann, Rózsa Péter and Alonzo Church and there continues to be a useful\n         |     ^~~~~~~ Did you mean `Newman`?\nSuggest:\n  - Replace with: “Newman”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     155 | influenced by the work of mathematicians such as Kurt Gödel, Alan Turing, John\n     156 | von Neumann, Rózsa Péter and Alonzo Church and there continues to be a useful\n         |              ^~~~~ Did you mean `Rosa`?\nSuggest:\n  - Replace with: “Rosa”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     155 | influenced by the work of mathematicians such as Kurt Gödel, Alan Turing, John\n     156 | von Neumann, Rózsa Péter and Alonzo Church and there continues to be a useful\n         |                    ^~~~~ Did you mean to spell `Péter` this way?\nSuggest:\n  - Replace with: “Peter”\n  - Replace with: “Pother”\n  - Replace with: “Paper”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     162 | \"software engineering\" means, and how computer science is defined. David Parnas,\n         |                                                                    ^~~~~~~~~~~~~~\n     163 | taking a cue from the relationship between other engineering and science\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     164 | disciplines, has claimed that the principal focus of computer science is\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     165 | studying the properties of computation in general, while the principal focus of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     166 | software engineering is the design of specific computations to achieve practical\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     167 | goals, making the two separate but complementary disciplines.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 55 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     162 | \"software engineering\" means, and how computer science is defined. David Parnas,\n         |                                                                          ^~~~~~ Did you mean to spell `Parnas` this way?\n     163 | taking a cue from the relationship between other engineering and science\nSuggest:\n  - Replace with: “Paras”\n  - Replace with: “Parkas”\n  - Replace with: “Parana's”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     178 | ### Epistemology of computer science\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “### Epistemology of Computer Science”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     181 | computer science is a discipline of science, mathematics, or engineering. Allen\n     182 | Newell and Herbert A. Simon argued in 1975,\n         | ^~~~~~ Did you mean to spell `Newell` this way?\nSuggest:\n  - Replace with: “Newel”\n  - Replace with: “Newels”\n  - Replace with: “Newel's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     181 | computer science is a discipline of science, mathematics, or engineering. Allen\n     182 | Newell and Herbert A. Simon argued in 1975,\n         |                    ^~ Did you mean to spell `A.` this way?\nSuggest:\n  - Replace with: “A”\n  - Replace with: “Ab”\n  - Replace with: “Ac”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     192 | It has since been argued that computer science can be classified as an empirical\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     193 | science since it makes use of empirical testing to evaluate the correctness of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     194 | programs, but a problem remains in defining the laws and theorems of computer\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     195 | science (if any exist) and defining the nature of experiments in computer\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     196 | science. Proponents of classifying computer science as an engineering discipline\n         | ~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     198 | way as bridges in civil engineering and airplanes in aerospace engineering. They\n         |                                                                             ^~~~~\n     199 | also argue that while empirical sciences observe what presently exists, computer\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     200 | science observes what is possible to exist and while scientists discover laws\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     201 | from observation, no proper laws have been found in computer science and it is\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     202 | instead concerned with creating phenomena.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     207 | Computer scientists Edsger W. Dijkstra and Tony Hoare regard instructions for\n         |                     ^~~~~~ Did you mean to spell `Edsger` this way?\nSuggest:\n  - Replace with: “Edger”\n  - Replace with: “Eager”\n  - Replace with: “Edge”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     207 | Computer scientists Edsger W. Dijkstra and Tony Hoare regard instructions for\n         |                            ^~ Did you mean to spell `W.` this way?\nSuggest:\n  - Replace with: “We”\n  - Replace with: “WA”\n  - Replace with: “WI”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     207 | Computer scientists Edsger W. Dijkstra and Tony Hoare regard instructions for\n         |                                                 ^~~~~ Did you mean to spell `Hoare` this way?\n     208 | computer programs as mathematical sentences and interpret formal semantics for\nSuggest:\n  - Replace with: “Hare”\n  - Replace with: “Hoard”\n  - Replace with: “Hoary”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     211 | ### Paradigms of computer science\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “### Paradigms of Computer Science”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     214 | separate paradigms in computer science. Peter Wegner argued that those paradigms\n         |                                               ^~~~~~ Did you mean to spell `Wegner` this way?\n     215 | are science, technology, and mathematics. Peter Denning's working group argued\nSuggest:\n  - Replace with: “Wagner”\n  - Replace with: “Wigner”\n  - Replace with: “Wetter”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     215 | are science, technology, and mathematics. Peter Denning's working group argued\n         |                                                 ^~~~~~~~~ Did you mean to spell `Denning's` this way?\n     216 | that they are theory, abstraction (modeling), and design. Amnon H. Eden\nSuggest:\n  - Replace with: “Deming's”\n  - Replace with: “Dennis's”\n  - Replace with: “Dancing's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     216 | that they are theory, abstraction (modeling), and design. Amnon H. Eden\n         |                                                           ^~~~~ Did you mean to spell `Amnon` this way?\nSuggest:\n  - Replace with: “Anon”\n  - Replace with: “Amnion”\n  - Replace with: “Amazon”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     216 | that they are theory, abstraction (modeling), and design. Amnon H. Eden\n         |                                                           ^~~~~~~~~~~~~~\n     217 | described them as the \"rationalist paradigm\" (which treats computer science as a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     218 | branch of mathematics, which is prevalent in theoretical computer science, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     219 | mainly employs deductive reasoning), the \"technocratic paradigm\" (which might be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     220 | found in engineering approaches, most prominently in software engineering), and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     221 | the \"scientific paradigm\" (which approaches computer-related artifacts from the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     222 | empirical perspective of natural sciences, identifiable in some branches of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     223 | artificial intelligence). Computer science focuses on methods involved in\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 68 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     216 | that they are theory, abstraction (modeling), and design. Amnon H. Eden\n         |                                                                 ^~ Did you mean to spell `H.` this way?\nSuggest:\n  - Replace with: “Ha”\n  - Replace with: “He”\n  - Replace with: “Hi”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     224 | design, specification, programming, verification, implementation and testing of\n         |                                                   ^~~~~~~~~~~~~~ An Oxford comma is necessary here.\n     225 | human-made computing systems.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     231 | implementing computing systems in hardware and software. CSAB, formerly called\n         |                                                          ^~~~ Did you mean to spell `CSAB` this way?\n     232 | Computing Sciences Accreditation Board—which is made up of representatives of\nSuggest:\n  - Replace with: “Cab”\n  - Replace with: “Crab”\n  - Replace with: “Cad”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     231 | implementing computing systems in hardware and software. CSAB, formerly called\n         |                                                          ^~~~~~~~~~~~~~~~~~~~~~\n     232 | Computing Sciences Accreditation Board—which is made up of representatives of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     233 | the Association for Computing Machinery (ACM), and the IEEE Computer Society\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     234 | (IEEE CS)—identifies four areas that it considers crucial to the discipline of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     235 | computer science: theory of computation, algorithms and data structures,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     236 | programming methodology and languages, and computer elements and architecture.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 56 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     235 | computer science: theory of computation, algorithms and data structures,\n         |                                          ^~~~~~~~~~ An Oxford comma is necessary here.\n     236 | programming methodology and languages, and computer elements and architecture.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     237 | In addition to these four areas, CSAB also identifies fields such as software\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     238 | engineering, artificial intelligence, computer networking and communication,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     239 | database systems, parallel computation, distributed computation, human–computer\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     240 | interaction, computer graphics, operating systems, and numerical and symbolic\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     241 | computation as being important areas of computer science.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     237 | In addition to these four areas, CSAB also identifies fields such as software\n         |                                  ^~~~ Did you mean to spell `CSAB` this way?\nSuggest:\n  - Replace with: “Cab”\n  - Replace with: “Crab”\n  - Replace with: “Cad”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     243 | ### Theoretical computer science\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “### Theoretical Computer Science”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     250 | #### Theory of computation\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Theory of Computation”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     252 | According to Peter Denning, the fundamental question underlying computer science\n         |                    ^~~~~~~ Did you mean to spell `Denning` this way?\nSuggest:\n  - Replace with: “Dunning”\n  - Replace with: “Denting”\n  - Replace with: “Denying”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     262 | The famous P = NP? problem, one of the Millennium Prize Problems, is an open\n         |                ^~ Did you mean to spell `NP` this way?\nSuggest:\n  - Replace with: “Nap”\n  - Replace with: “Nip”\n  - Replace with: “No”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     262 | The famous P = NP? problem, one of the Millennium Prize Problems, is an open\n         |                    ^~~~~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Problem”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     265 | #### Information and coding theory\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Information and Coding Theory”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     277 | #### Data structures and algorithms\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Data Structures and Algorithms”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     282 | #### Programming language theory and formal methods\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Programming Language Theory and Formal Methods”\n\n\n\nLint:    Agreement (31 priority)\nMessage: |\n     286 | programming languages and their individual features. It falls within the\n     287 | discipline of computer science, both depending on and affecting mathematics,\n         |                                 ^~~~~~~~~~~~~~ `depending` is a mass noun.\n     288 | software engineering, and linguistics. It is an active research area, with\nSuggest:\n  - Replace with: “both pieces of depending”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     291 | Formal methods are a particular kind of mathematically based technique for the\n     292 | specification, development and verification of software and hardware systems.\n         |                ^~~~~~~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     302 | safety or security is of utmost importance. Formal methods are best described as\n         |                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     303 | the application of a fairly broad variety of theoretical computer science\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     304 | fundamentals, in particular logic calculi, formal languages, automata theory,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     305 | and program semantics, but also type systems and algebraic data types to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     306 | problems in software and hardware specification and verification.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 46 words long.\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     308 | ### Applied computer science\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “### Applied Computer Science”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     310 | #### Computer graphics and visualization\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Computer Graphics and Visualization”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     318 | #### Image and sound processing\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Image and Sound Processing”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     320 | Information can take the form of images, sound, video or other multimedia. Bits\n         |                                                 ^~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     323 | processing algorithms independently of the type of information carrier – whether\n     324 | it is electrical, mechanical or biological. This field plays important role in\n         |                   ^~~~~~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     327 | is the lower bound on the complexity of fast Fourier transform algorithms? is\n         |                                                                            ^~ This sentence does not start with a capital letter\n     328 | one of the unsolved problems in theoretical computer science.\nSuggest:\n  - Replace with: “Is”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     330 | #### Computational science, finance and engineering\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Computational Science, Finance and Engineering”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     330 | #### Computational science, finance and engineering\n         |                             ^~~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     344 | #### Human–computer interaction\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Human–Computer Interaction”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     346 | Human–computer interaction (HCI) is the field of study and research concerned\n         |                             ^~~ Did you mean to spell `HCI` this way?\nSuggest:\n  - Replace with: “Hi”\n  - Replace with: “H'm”\n  - Replace with: “Chi”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     348 | interaction between humans and computer interfaces. HCI has several subfields\n         |                                                     ^~~ Did you mean to spell `HCI` this way?\n     349 | that focus on the relationship between emotions, social behavior and brain\nSuggest:\n  - Replace with: “Hi”\n  - Replace with: “H'm”\n  - Replace with: “Chi”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     352 | #### Software engineering\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Software Engineering”\n\n\n\nLint:    Punctuation (31 priority)\nMessage: |\n     360 | maintenance. For example software testing, systems engineering, technical debt\n         |              ^~~~~~~~~~~ Discourse markers at the beginning of a sentence should be followed by a comma.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     363 | #### Artificial intelligence\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Artificial Intelligence”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     383 | ### Computer systems\n         | ^~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “### Computer Systems”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     385 | #### Computer architecture and microarchitecture\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Computer Architecture and Microarchitecture”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     393 | term \"architecture\" in computer literature can be traced to the work of Lyle R.\n         |                                                                              ^~ Did you mean to spell `R.` this way?\nSuggest:\n  - Replace with: “RI”\n  - Replace with: “Ra”\n  - Replace with: “Ru”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     394 | Johnson and Frederick P. Brooks Jr., members of the Machine Organization\n         |                       ^~ Did you mean to spell `P.` this way?\nSuggest:\n  - Replace with: “Pa”\n  - Replace with: “Pi”\n  - Replace with: “PE”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     397 | #### Concurrent, parallel and distributed computing\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Concurrent, Parallel and Distributed Computing”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     401 | mathematical models have been developed for general concurrent computation\n     402 | including Petri nets, process calculi and the parallel random access machine\n         |           ^~~~~ Did you mean to spell `Petri` this way?\nSuggest:\n  - Replace with: “Petra”\n  - Replace with: “Perth”\n  - Replace with: “Pet's”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     408 | #### Computer networks\n         | ^~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Computer Networks”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     413 | #### Computer security and cryptography\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Computer Security and Cryptography”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n     421 | Modern cryptography is the scientific study of problems relating to distributed\n         |                                                                  ^~~~~~~~~~~~~~ The base form of the verb is needed here.\n     422 | computations that can be attacked. Technologies studied in modern cryptography\nSuggest:\n  - Replace with: “to distribute”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     427 | #### Databases and data mining\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Databases and Data Mining”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n     432 | languages. Data mining is a process of discovering patterns in large data sets.\n         |                                                                      ^~~~~~~~~ Did you mean the closed compound noun “datasets”?\nSuggest:\n  - Replace with: “datasets”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     436 | The philosopher of computing Bill Rapaport noted three Great Insights of\n         |                                   ^~~~~~~~ Did you mean to spell `Rapaport` this way?\n     437 | Computer Science:\nSuggest:\n  - Replace with: “Rapport”\n  - Replace with: “Rappaport”\n  - Replace with: “Rapports”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     439 | - Gottfried Wilhelm Leibniz's, George Boole's, Alan Turing's, Claude Shannon's,\n         |   ^~~~~~~~~ Did you mean to spell `Gottfried` this way?\nSuggest:\n  - Replace with: “Guttered”\n  - Replace with: “Lotteries”\n  - Replace with: “Notified”\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n     444 |   > easily distinguishable states, such as \"on/off\", \"magnetized/de-magnetized\",\n         |                                                                  ^~~~~~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\n     445 |   > \"high-voltage/low-voltage\", etc.).\nSuggest:\n  - Replace with: “demagnetized”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     456 |   - print 1 at current location.\n         |     ^~~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Print”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     458 | - Corrado Böhm and Giuseppe Jacopini's insight: there are only three ways of\n         |   ^~~~~~~ Did you mean to spell `Corrado` this way?\nSuggest:\n  - Replace with: “Comrade”\n  - Replace with: “Corral”\n  - Replace with: “Corridor”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     458 | - Corrado Böhm and Giuseppe Jacopini's insight: there are only three ways of\n         |           ^~~~ Did you mean to spell `Böhm` this way?\nSuggest:\n  - Replace with: “Bah”\n  - Replace with: “Baht”\n  - Replace with: “Beam”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     458 | - Corrado Böhm and Giuseppe Jacopini's insight: there are only three ways of\n         |                             ^~~~~~~~~~ Did you mean `Jacobin's`?\nSuggest:\n  - Replace with: “Jacobin's”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     466 |   - selection: IF such-and-such is the case, THEN do this, ELSE do that;\n         |     ^~~~~~~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Selection”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     467 |   - repetition: WHILE such-and-such is the case, DO this. The three rules of\n         |     ^~~~~~~~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Repetition”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     467 |   - repetition: WHILE such-and-such is the case, DO this. The three rules of\n     468 |     Boehm's and Jacopini's insight can be further simplified with the use of\n         |     ^~~~~~~ Did you mean to spell `Boehm's` this way?\nSuggest:\n  - Replace with: “Boer's”\n  - Replace with: “Bohr's”\n  - Replace with: “Beam's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     467 |   - repetition: WHILE such-and-such is the case, DO this. The three rules of\n     468 |     Boehm's and Jacopini's insight can be further simplified with the use of\n         |                 ^~~~~~~~~~ Did you mean `Jacobin's`?\nSuggest:\n  - Replace with: “Jacobin's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     468 |     Boehm's and Jacopini's insight can be further simplified with the use of\n     469 |     goto (which means it is more elementary than structured programming).\n         |     ^~~~ Did you mean to spell `goto` this way?\nSuggest:\n  - Replace with: “goo”\n  - Replace with: “got”\n  - Replace with: “goths”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     468 |     Boehm's and Jacopini's insight can be further simplified with the use of\n     469 |     goto (which means it is more elementary than structured programming).\n         |     ^~~~ `goto` should probably be written as `go to`.\nSuggest:\n  - Replace with: “go to”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     471 | ## Programming paradigms\n         | ^~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “## Programming Paradigms”\n\n\n\nLint:    Punctuation (31 priority)\nMessage: |\n     490 |   the data fields of the object with which they are associated. Thus\n         |                                                                 ^~~~ Discourse markers at the beginning of a sentence should be followed by a comma.\n     491 |   object-oriented computer programs are made out of objects that interact with\nSuggest:\n  - Insert “,”\n\n\n\n"
  },
  {
    "path": "harper-core/tests/text/linters/Difficult sentences.snap.yml",
    "content": "Lint:    Capitalization (127 priority)\nMessage: |\n       1 | # Difficult sentences\n         | ^~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “# Difficult Sentences”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n      20 | at the bottom of the page; sitting at the table; at church; at sea\n         | ^~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “At”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n      32 | men at work; children at play\n         | ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Men”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      56 | He was protected by his body armour.\n         |                              ^~~~~~ Did you mean to spell `armour` this way?\nSuggest:\n  - Replace with: “armor”\n  - Replace with: “amour”\n  - Replace with: “arbor”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n      76 | sold by the yard; cheaper if bought by the gross\n         | ^~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Sold”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      87 | Are you eating by Rabbi Fischer? (at the house of)\n      88 | By Chabad, it's different. (with, among)\n         |    ^~~~~~ Did you mean to spell `Chabad` this way?\nSuggest:\n  - Replace with: “Cabal”\n  - Replace with: “Chad”\n  - Replace with: “Charade”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     100 | a by path; a by room (Out of the way, off to one side.)\n         | ^ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “A”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     126 | Who's for ice-cream?\n         | ^~~~~ The canonical dictionary spelling is `who's`.\nSuggest:\n  - Replace with: “who's”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     160 | to account for one's whereabouts.\n         | ^~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “To”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     180 | I’ve been doing this from pickney.\n         |                           ^~~~~~~ Did you mean to spell `pickney` this way?\nSuggest:\n  - Replace with: “picket”\n  - Replace with: “pickle”\n  - Replace with: “piney”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     208 | My aim in travelling there was to find my missing friend.\n         |           ^~~~~~~~~~ Did you mean to spell `travelling` this way?\nSuggest:\n  - Replace with: “traveling”\n  - Replace with: “travailing”\n  - Replace with: “travelings”\n\n\n\nLint:    Typo (127 priority)\nMessage: |\n     243 | His parents got him an in with the company.\n         |                     ^~ Did you mean `and in`?\nSuggest:\n  - Replace with: “and”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     249 | The bullet is about five centimetres in.\n         |                          ^~~~~~~~~~~ Did you mean to spell `centimetres` this way?\nSuggest:\n  - Replace with: “centimeters”\n  - Replace with: “centimeter's”\n  - Replace with: “centimeter”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     254 | the in train (incoming train)\n         | ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “The”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     256 | in by descent; in by purchase; in of the seisin of her husband\n         |                                          ^~~~~~ Did you mean to spell `seisin` this way?\n     257 | He is very in with the Joneses.\nSuggest:\n  - Replace with: “season”\n  - Replace with: “seismic”\n  - Replace with: “sepsis”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     258 | I need to keep in with the neighbours in case I ever need a favour from them.\n         |                            ^~~~~~~~~~ Did you mean to spell `neighbours` this way?\nSuggest:\n  - Replace with: “neighbors”\n  - Replace with: “neighbor's”\n  - Replace with: “neighbor”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     258 | I need to keep in with the neighbours in case I ever need a favour from them.\n         |                                                             ^~~~~~ Did you mean to spell `favour` this way?\nSuggest:\n  - Replace with: “favor”\n  - Replace with: “famous”\n  - Replace with: “flavor”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     280 | Welcome to the historic town of Harwich.\n         |                                 ^~~~~~~ Did you mean to spell `Harwich` this way?\nSuggest:\n  - Replace with: “Norwich”\n  - Replace with: “Warwick”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     284 | This behaviour is typical of teenagers.\n         |      ^~~~~~~~~ Did you mean to spell `behaviour` this way?\nSuggest:\n  - Replace with: “behavior”\n  - Replace with: “behaviors”\n\n\n\nLint:    Style (63 priority)\nMessage: |\n     289 | It's not that big of a deal.\n         |               ^~~~~~~~ The word `of` is not needed here.\nSuggest:\n  - Replace with: “big a”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     300 | That TV programme that you wanted to watch is on now.\n         |         ^~~~~~~~~ Did you mean to spell `programme` this way?\nSuggest:\n  - Replace with: “programmed”\n  - Replace with: “programmer”\n  - Replace with: “programmes”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     310 | Ponsonby-Smythe hit a thumping on drive.\n         | ^~~~~~~~ Did you mean to spell `Ponsonby` this way?\nSuggest:\n  - Replace with: “Poison's”\n  - Replace with: “Poison”\n  - Replace with: “Poisoned”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     310 | Ponsonby-Smythe hit a thumping on drive.\n         |          ^~~~~~ Did you mean to spell `Smythe` this way?\nSuggest:\n  - Replace with: “Scythe”\n  - Replace with: “Smith”\n  - Replace with: “Smiths”\n\n\n\nLint:    Agreement (31 priority)\nMessage: |\n     310 | Ponsonby-Smythe hit a thumping on drive.\n         |                     ^~~~~~~~~~ `thumping` is a mass noun.\nSuggest:\n  - Replace with: “thumping”\n  - Replace with: “some thumping”\n  - Replace with: “a piece of thumping”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     316 | turn the television on\n         | ^~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Turn”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     322 | and so on.\n         | ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “And”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     340 | on the left, on the right, on the side, on the bottom.\n         | ^~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “On”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     342 | on a bus, on a train, on a plane, on a ferry, on a yacht.\n         | ^~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “On”\n\n\n\nLint:    Redundancy (31 priority)\nMessage: |\n     343 | All of the responsibility is on him.\n         | ^~~~~~~~~~ Consider simplifying to `all the`.\nSuggest:\n  - Replace with: “All the”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     345 | tug on the rope; push hard on the door.\n         | ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Tug”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     349 | to play on a violin or piano.\n         | ^~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “To”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     358 | Smith scored again on twelve minutes, doubling Mudchester Rovers' lead.\n         |                                                ^~~~~~~~~~ Did you mean `Manchester`?\nSuggest:\n  - Replace with: “Manchester”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     366 | He travelled on false documents.\n         |    ^~~~~~~~~ Did you mean to spell `travelled` this way?\nSuggest:\n  - Replace with: “traveled”\n  - Replace with: “travailed”\n  - Replace with: “traveler”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     398 | Who am I to criticise? I've done worse things myself.\n         |             ^~~~~~~~~ Did you mean to spell `criticise` this way?\nSuggest:\n  - Replace with: “criticize”\n  - Replace with: “criticism”\n  - Replace with: “critic's”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     449 | slain with robbers.\n         | ^~~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Slain”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     450 | cut with a knife\n         | ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Cut”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     461 | overcome with happiness\n         | ^~~~~~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Overcome”\n\n\n\nLint:    Grammar (31 priority)\nMessage: |\n     464 | With your kind of body size, you shouldn’t be eating pizza at all.\n         |      ^~~~ Use the contraction `you're` (you are) before predicate adjectives instead of the possessive `your` or its variants.\nSuggest:\n  - Replace with: “you're”\n\n\n\n"
  },
  {
    "path": "harper-core/tests/text/linters/Part-of-speech tagging.snap.yml",
    "content": "Lint:    Capitalization (127 priority)\nMessage: |\n       6 | # Part-of-speech tagging\n         | ^~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “# Part-of-Speech Tagging”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n       8 | In corpus linguistics, part-of-speech tagging (POS tagging or PoS tagging or\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n       9 | POST), also called grammatical tagging is the process of marking up a word in a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      10 | text (corpus) as corresponding to a particular part of speech, based on both its\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      11 | definition and its context. A simplified form of this is commonly taught to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 46 words long.\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n       8 | In corpus linguistics, part-of-speech tagging (POS tagging or PoS tagging or\n         |                                                               ^~~ This word's canonical spelling is all-caps.\n       9 | POST), also called grammatical tagging is the process of marking up a word in a\nSuggest:\n  - Replace with: “POS”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n       8 | In corpus linguistics, part-of-speech tagging (POS tagging or PoS tagging or\n         |                                                               ^~~ Did you mean to spell `PoS` this way?\n       9 | POST), also called grammatical tagging is the process of marking up a word in a\nSuggest:\n  - Replace with: “Pod”\n  - Replace with: “Poi”\n  - Replace with: “Pol”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      18 | two distinctive groups: rule-based and stochastic. E. Brill's tagger, one of the\n         |                                                    ^~ Did you mean to spell `E.` this way?\nSuggest:\n  - Replace with: “E”\n  - Replace with: “Ea”\n  - Replace with: “Eh”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      18 | two distinctive groups: rule-based and stochastic. E. Brill's tagger, one of the\n         |                                                       ^~~~~~~ Did you mean to spell `Brill's` this way?\n      19 | first and most widely used English POS-taggers, employs rule-based algorithms.\nSuggest:\n  - Replace with: “Brillo's”\n  - Replace with: “Bill's”\n  - Replace with: “Drill's”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n      32 | Correct grammatical tagging will reflect that \"dogs\" is here used as a verb, not\n      33 | as the more common plural noun. Grammatical context is one way to determine\n         |        ^~~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\nSuggest:\n  - Replace with: “commoner”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      33 | as the more common plural noun. Grammatical context is one way to determine\n         |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      34 | this; semantic analysis can also be used to infer that \"sailor\" and \"hatch\"\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      35 | implicate \"dogs\" as 1) in the nautical context and 2) an action applied to the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      36 | object \"hatch\" (in this context, \"dogs\" is a nautical term meaning \"fastens (a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      37 | watertight door) securely\").\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n      39 | ### Tag sets\n         | ^~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “### Tag Sets”\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n      43 | However, there are clearly many more categories and sub-categories. For nouns,\n         |                                                     ^~~~~~~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “subcategories”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      49 | tags. For example, NN for singular common nouns, NNS for plural common nouns, NP\n         |                    ^~ Did you mean to spell `NN` this way?\nSuggest:\n  - Replace with: “No”\n  - Replace with: “Non”\n  - Replace with: “Nu”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      49 | tags. For example, NN for singular common nouns, NNS for plural common nouns, NP\n         |                                                  ^~~ Did you mean to spell `NNS` this way?\n      50 | for singular proper nouns (see the POS tags used in the Brown Corpus). Other\nSuggest:\n  - Replace with: “NES”\n  - Replace with: “Nos”\n  - Replace with: “Nuns”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      49 | tags. For example, NN for singular common nouns, NNS for plural common nouns, NP\n         |                                                                               ^~ Did you mean to spell `NP` this way?\n      50 | for singular proper nouns (see the POS tags used in the Brown Corpus). Other\nSuggest:\n  - Replace with: “Nap”\n  - Replace with: “Nip”\n  - Replace with: “No”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      55 | 150 separate parts of speech for English. Work on stochastic methods for tagging\n      56 | Koine Greek (DeRose 1990) has used over 1,000 parts of speech and found that\n         | ^~~~~ Did you mean to spell `Koine` this way?\nSuggest:\n  - Replace with: “Kline”\n  - Replace with: “Kine”\n  - Replace with: “Kin”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      55 | 150 separate parts of speech for English. Work on stochastic methods for tagging\n      56 | Koine Greek (DeRose 1990) has used over 1,000 parts of speech and found that\n         |              ^~~~~~ Did you mean to spell `DeRose` this way?\nSuggest:\n  - Replace with: “Depose”\n  - Replace with: “Demise”\n  - Replace with: “Dense”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      57 | about as many words were ambiguous in that language as in English. A\n      58 | morphosyntactic descriptor in the case of morphologically rich languages is\n         | ^~~~~~~~~~~~~~~ Did you mean to spell `morphosyntactic` this way?\nSuggest:\n  - Replace with: “morphosyntax's”\n  - Replace with: “morphosyntax”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      58 | morphosyntactic descriptor in the case of morphologically rich languages is\n         |                                           ^~~~~~~~~~~~~~~ Did you mean `morphological`?\n      59 | commonly expressed using very short mnemonics, such as Ncmsan for Category=Noun,\nSuggest:\n  - Replace with: “morphological”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      59 | commonly expressed using very short mnemonics, such as Ncmsan for Category=Noun,\n         |                                                        ^~~~~~ Did you mean to spell `Ncmsan` this way?\n      60 | Type = common, Gender = masculine, Number = singular, Case = accusative, Animate\nSuggest:\n  - Replace with: “Nisan”\n  - Replace with: “Nissan”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      63 | The most popular \"tag set\" for POS tagging for American English is probably the\n      64 | Penn tag set, developed in the Penn Treebank project. It is largely similar to\n         |                                     ^~~~~~~~ Did you mean to spell `Treebank` this way?\nSuggest:\n  - Replace with: “Tie back”\n  - Replace with: “Tieback”\n  - Replace with: “Traceback”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n      73 | cross-language differences. The tag sets for heavily inflected languages such as\n         |                                 ^~~~~~~~ Did you mean the closed compound noun “tagsets”?\nSuggest:\n  - Replace with: “tagsets”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      75 | as Inuit languages may be virtually impossible. At the other extreme, Petrov et\n         |                                                                       ^~~~~~ Did you mean to spell `Petrov` this way?\n      76 | al. have proposed a \"universal\" tag set, with 12 categories (for example, no\nSuggest:\n  - Replace with: “Petrol”\n  - Replace with: “Patrol”\n  - Replace with: “Patron”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      75 | as Inuit languages may be virtually impossible. At the other extreme, Petrov et\n         |                                                                              ^~~\n      76 | al. have proposed a \"universal\" tag set, with 12 categories (for example, no\n         | ~~~ Did you mean `et al.`?\nSuggest:\n  - Replace with: “et al.”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      86 | The first major corpus of English for computer analysis was the Brown Corpus\n      87 | developed at Brown University by Henry Kučera and W. Nelson Francis, in the\n         |                                        ^~~~~~ Did you mean to spell `Kučera` this way?\nSuggest:\n  - Replace with: “Kara”\n  - Replace with: “Kendra”\n  - Replace with: “Keri”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      87 | developed at Brown University by Henry Kučera and W. Nelson Francis, in the\n         |                                                   ^~ Did you mean to spell `W.` this way?\nSuggest:\n  - Replace with: “We”\n  - Replace with: “WA”\n  - Replace with: “WI”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      98 | and corrected by hand, and later users sent in errata so that by the late 70s\n         |                                                                             ^ Did you mean to spell `s` this way?\n      99 | the tagging was nearly perfect (allowing for some cases on which even human\nSuggest:\n  - Replace with: “so”\n  - Replace with: “as”\n  - Replace with: “is”\n\n\n\nLint:    WordChoice (126 priority)\nMessage: |\n     104 | other languages. Statistics derived by analyzing it formed the basis for most\n         |                                                                          ^~~~~\n     105 | later part-of-speech tagging systems, such as CLAWS and VOLSUNGA. However, by\n         | ~~~~~ The degree of the adverb conflicts with the degree of the adjective.\nSuggest:\n  - Replace with: “later”\n  - Replace with: “latest”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     105 | later part-of-speech tagging systems, such as CLAWS and VOLSUNGA. However, by\n         |                                                         ^~~~~~~~ Did you mean to spell `VOLSUNGA` this way?\nSuggest:\n  - Replace with: “Volcanic”\n  - Replace with: “Volcano”\n  - Replace with: “Voltage”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     110 | For some time, part-of-speech tagging was considered an inseparable part of\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     111 | natural language processing, because there are certain cases where the correct\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     112 | part of speech cannot be decided without understanding the semantics or even the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     113 | pragmatics of the context. This is extremely expensive, especially because\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     117 | ### Use of hidden Markov models\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “### Use of Hidden Markov Models”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     119 | In the mid-1980s, researchers in Europe began to use hidden Markov models (HMMs)\n         |                                                                            ^~~~ Did you mean to spell `HMMs` this way?\n     120 | to disambiguate parts of speech, when working to tag the Lancaster-Oslo-Bergen\nSuggest:\n  - Replace with: “Hams”\n  - Replace with: “Hems”\n  - Replace with: “Hums”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     121 | Corpus of British English. HMMs involve counting cases (such as from the Brown\n         |                            ^~~~ Did you mean to spell `HMMs` this way?\nSuggest:\n  - Replace with: “Hams”\n  - Replace with: “Hems”\n  - Replace with: “Hums”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n     125 | program can decide that \"can\" in \"the can\" is far more likely to be a noun than\n         |                                                   ^~~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\n     126 | a verb or a modal. The same method can, of course, be used to benefit from\nSuggest:\n  - Replace with: “likelier”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     129 | More advanced (\"higher-order\") HMMs learn the probabilities not only of pairs\n         |                                ^~~~ Did you mean to spell `HMMs` this way?\nSuggest:\n  - Replace with: “Hams”\n  - Replace with: “Hems”\n  - Replace with: “Hums”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     141 | Eugene Charniak points out in Statistical techniques for natural language\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     142 | parsing (1997) that merely assigning the most common tag to each known word and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     143 | the tag \"proper noun\" to all unknowns will approach 90% accuracy because many\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     144 | words are unambiguous, and many others only rarely represent their less-common\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     145 | parts of speech.\n         | ~~~~~~~~~~~~~~~~ This sentence is 50 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     141 | Eugene Charniak points out in Statistical techniques for natural language\n         |        ^~~~~~~~ Did you mean to spell `Charniak` this way?\nSuggest:\n  - Replace with: “Cardiac”\n  - Replace with: “Carnal”\n  - Replace with: “Carnival”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n     142 | parsing (1997) that merely assigning the most common tag to each known word and\n         |                                          ^~~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\n     143 | the tag \"proper noun\" to all unknowns will approach 90% accuracy because many\nSuggest:\n  - Replace with: “commonest”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     148 | expensive since it enumerated all possibilities. It sometimes had to resort to\n         |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     149 | backup methods when there were simply too many options (the Brown Corpus\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     150 | contains a case with 17 ambiguous words in a row, and there are words such as\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     151 | \"still\" that can represent as many as 7 distinct parts of speech.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n     148 | expensive since it enumerated all possibilities. It sometimes had to resort to\n     149 | backup methods when there were simply too many options (the Brown Corpus\n         | ^~~~~~ This word should be a phrasal verb, not a compound noun.\nSuggest:\n  - Replace with: “back up”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     153 | HMMs underlie the functioning of stochastic taggers and are used in various\n         | ^~~~ Did you mean to spell `HMMs` this way?\nSuggest:\n  - Replace with: “Hams”\n  - Replace with: “Hems”\n  - Replace with: “Hums”\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n     154 | algorithms one of the most widely used being the bi-directional inference\n         |                                                  ^~~~~~~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\n     155 | algorithm.\nSuggest:\n  - Replace with: “bidirectional”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     157 | ### Dynamic programming methods\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “### Dynamic Programming Methods”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     159 | In 1987, Steven DeRose and Kenneth W. Church independently developed dynamic\n         |                 ^~~~~~ Did you mean to spell `DeRose` this way?\nSuggest:\n  - Replace with: “Depose”\n  - Replace with: “Demise”\n  - Replace with: “Dense”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     159 | In 1987, Steven DeRose and Kenneth W. Church independently developed dynamic\n         |                                    ^~ Did you mean to spell `W.` this way?\nSuggest:\n  - Replace with: “We”\n  - Replace with: “WA”\n  - Replace with: “WI”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     160 | programming algorithms to solve the same problem in vastly less time. Their\n     161 | methods were similar to the Viterbi algorithm known for some time in other\n         |                             ^~~~~~~ Did you mean to spell `Viterbi` this way?\nSuggest:\n  - Replace with: “Vite's”\n  - Replace with: “Viper's”\n  - Replace with: “Voter's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     162 | fields. DeRose used a table of pairs, while Church used a table of triples and a\n         |         ^~~~~~ Did you mean to spell `DeRose` this way?\nSuggest:\n  - Replace with: “Depose”\n  - Replace with: “Demise”\n  - Replace with: “Dense”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     162 | fields. DeRose used a table of pairs, while Church used a table of triples and a\n         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     163 | method of estimating the values for triples that were rare or nonexistent in the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     164 | Brown Corpus (an actual measurement of triple probabilities would require a much\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     165 | larger corpus). Both methods achieved an accuracy of over 95%. DeRose's 1990\n         | ~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     165 | larger corpus). Both methods achieved an accuracy of over 95%. DeRose's 1990\n         |                                                                ^~~~~~~~ Did you mean to spell `DeRose's` this way?\n     166 | dissertation at Brown University included analyses of the specific error types,\nSuggest:\n  - Replace with: “Defoe's”\n  - Replace with: “Denise's”\n  - Replace with: “Demise's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     166 | dissertation at Brown University included analyses of the specific error types,\n         |                                           ^~~~~~~~ Did you mean to spell `analyses` this way?\n     167 | probabilities, and other related data, and replicated his work for Greek, where\nSuggest:\n  - Replace with: “analyzes”\n  - Replace with: “analysis”\n  - Replace with: “analysts”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     173 | levels of linguistic analysis: syntax, morphology, semantics, and so on. CLAWS,\n     174 | DeRose's and Church's methods did fail for some of the known cases where\n         | ^~~~~~~~ Did you mean to spell `DeRose's` this way?\nSuggest:\n  - Replace with: “Defoe's”\n  - Replace with: “Denise's”\n  - Replace with: “Demise's”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     175 | semantics is required, but those proved negligibly rare. This convinced many in\n         |                                                          ^~~~~~~~~~~~~~~~~~~~~~~\n     176 | the field that part-of-speech tagging could usefully be separated from the other\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     177 | levels of processing; this, in turn, simplified the theory and practice of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     178 | computerized language analysis and encouraged researchers to find ways to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     179 | separate other pieces as well. Markov Models became the standard method for the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     182 | #### Unsupervised taggers\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Unsupervised Taggers”\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n     184 | The methods already discussed involve working from a pre-existing corpus to\n         |                                                      ^~~~~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\n     185 | learn tag probabilities. It is, however, also possible to bootstrap using\nSuggest:\n  - Replace with: “preexisting”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     198 | #### Other taggers and methods\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “#### Other Taggers and Methods”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     200 | Some current major algorithms for part-of-speech tagging include the Viterbi\n         |                                                                      ^~~~~~~ Did you mean to spell `Viterbi` this way?\n     201 | algorithm, Brill tagger, Constraint Grammar, and the Baum-Welch algorithm (also\nSuggest:\n  - Replace with: “Vite's”\n  - Replace with: “Viper's”\n  - Replace with: “Voter's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     201 | algorithm, Brill tagger, Constraint Grammar, and the Baum-Welch algorithm (also\n         |                                                           ^~~~~ Did you mean to spell `Welch` this way?\n     202 | known as the forward-backward algorithm). Hidden Markov model and visible Markov\nSuggest:\n  - Replace with: “Welsh”\n  - Replace with: “Wench”\n  - Replace with: “Watch”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     203 | model taggers can both be implemented using the Viterbi algorithm. The\n         |                                                 ^~~~~~~ Did you mean to spell `Viterbi` this way?\nSuggest:\n  - Replace with: “Vite's”\n  - Replace with: “Viper's”\n  - Replace with: “Voter's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     208 | tagging. Methods such as SVM, maximum entropy classifier, perceptron, and\n         |                          ^~~ Did you mean to spell `SVM` this way?\nSuggest:\n  - Replace with: “Sim”\n  - Replace with: “Sum”\n  - Replace with: “SCM”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     213 | Wiki. This comparison uses the Penn tag set on some of the Penn Treebank data,\n         |                                                                 ^~~~~~~~ Did you mean to spell `Treebank` this way?\n     214 | so the results are directly comparable. However, many significant taggers are\nSuggest:\n  - Replace with: “Tie back”\n  - Replace with: “Tieback”\n  - Replace with: “Traceback”\n\n\n\n"
  },
  {
    "path": "harper-core/tests/text/linters/Spell.US.snap.yml",
    "content": "Lint:    Spelling (63 priority)\nMessage: |\n       9 | - Afterwards.\n         |   ^~~~~~~~~~ Did you mean to spell `Afterwards` this way?\nSuggest:\n  - Replace with: “Afterwords”\n  - Replace with: “Afterward”\n  - Replace with: “Afterword's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      10 | - Centre.\n         |   ^~~~~~ Did you mean to spell `Centre` this way?\nSuggest:\n  - Replace with: “Center”\n  - Replace with: “Cent's”\n  - Replace with: “Censure”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      11 | - Labelled.\n         |   ^~~~~~~~ Did you mean to spell `Labelled` this way?\nSuggest:\n  - Replace with: “Labeled”\n  - Replace with: “Labeler”\n  - Replace with: “Labelless”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      12 | - Flavour.\n         |   ^~~~~~~ Did you mean to spell `Flavour` this way?\nSuggest:\n  - Replace with: “Flavor”\n  - Replace with: “Favor”\n  - Replace with: “Flour”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      13 | - Favoured.\n         |   ^~~~~~~~ Did you mean to spell `Favoured` this way?\nSuggest:\n  - Replace with: “Favored”\n  - Replace with: “Flavored”\n  - Replace with: “Floured”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      14 | - Honour.\n         |   ^~~~~~ Did you mean to spell `Honour` this way?\nSuggest:\n  - Replace with: “Honor”\n  - Replace with: “Hour”\n  - Replace with: “Honer”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      15 | - Grey.\n         |   ^~~~ Did you mean to spell `Grey` this way?\nSuggest:\n  - Replace with: “Gray”\n  - Replace with: “Grew”\n  - Replace with: “Gorey”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      16 | - Quarrelled.\n         |   ^~~~~~~~~~ Did you mean to spell `Quarrelled` this way?\nSuggest:\n  - Replace with: “Quarreled”\n  - Replace with: “Quarreler”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      17 | - Quarrelling.\n         |   ^~~~~~~~~~~ Did you mean `Quarreling`?\nSuggest:\n  - Replace with: “Quarreling”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      18 | - Recognised.\n         |   ^~~~~~~~~~ Did you mean to spell `Recognised` this way?\nSuggest:\n  - Replace with: “Recognized”\n  - Replace with: “Recognize”\n  - Replace with: “Recognizer”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      19 | - Neighbour.\n         |   ^~~~~~~~~ Did you mean to spell `Neighbour` this way?\nSuggest:\n  - Replace with: “Neighbor”\n  - Replace with: “Neighbors”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      20 | - Neighbouring.\n         |   ^~~~~~~~~~~~ Did you mean `Neighboring`?\nSuggest:\n  - Replace with: “Neighboring”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      21 | - Clamour.\n         |   ^~~~~~~ Did you mean to spell `Clamour` this way?\nSuggest:\n  - Replace with: “Clamor”\n  - Replace with: “Glamour”\n  - Replace with: “Cavour”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      22 | - Theatre.\n         |   ^~~~~~~ Did you mean to spell `Theatre` this way?\nSuggest:\n  - Replace with: “Theater”\n  - Replace with: “They're”\n  - Replace with: “There”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      23 | - Analyse.\n         |   ^~~~~~~ Did you mean to spell `Analyse` this way?\nSuggest:\n  - Replace with: “Analyze”\n  - Replace with: “Analyst”\n  - Replace with: “Analysis”\n\n\n\n"
  },
  {
    "path": "harper-core/tests/text/linters/Spell.snap.yml",
    "content": "Lint:    Spelling (63 priority)\nMessage: |\n       7 | My favourite color is blu.\n         |    ^~~~~~~~~ Did you mean to spell `favourite` this way?\nSuggest:\n  - Replace with: “favorite”\n  - Replace with: “favorites”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n       7 | My favourite color is blu.\n         |                       ^~~ The canonical dictionary spelling is title case: `Blu`.\nSuggest:\n  - Replace with: “Blu”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n       7 | My favourite color is blu.\n         |                       ^~~ Did you mean to spell `blu` this way?\nSuggest:\n  - Replace with: “bl”\n  - Replace with: “blue”\n  - Replace with: “blur”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n       8 | I must defend my honour!\n         |                  ^~~~~~ Did you mean to spell `honour` this way?\nSuggest:\n  - Replace with: “honor”\n  - Replace with: “hour”\n  - Replace with: “honer”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n       9 | I recognize that you recognise me.\n         |                      ^~~~~~~~~ Did you mean to spell `recognise` this way?\nSuggest:\n  - Replace with: “recognize”\n  - Replace with: “recognized”\n  - Replace with: “recognizer”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      11 | I analyse how you infantilise me.\n         |   ^~~~~~~ Did you mean to spell `analyse` this way?\nSuggest:\n  - Replace with: “analyze”\n  - Replace with: “analyst”\n  - Replace with: “analysis”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      11 | I analyse how you infantilise me.\n         |                   ^~~~~~~~~~~ Did you mean to spell `infantilise` this way?\nSuggest:\n  - Replace with: “infantilize”\n  - Replace with: “infantile”\n  - Replace with: “infanticide”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      12 | Careful, traveller!\n         |          ^~~~~~~~~ Did you mean to spell `traveller` this way?\nSuggest:\n  - Replace with: “traveler”\n  - Replace with: “traveled”\n  - Replace with: “travelers”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      13 | At the centre of the theatre I dropped a litre of coke.\n         |        ^~~~~~ Did you mean to spell `centre` this way?\nSuggest:\n  - Replace with: “center”\n  - Replace with: “cent's”\n  - Replace with: “censure”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      13 | At the centre of the theatre I dropped a litre of coke.\n         |                      ^~~~~~~ Did you mean to spell `theatre` this way?\nSuggest:\n  - Replace with: “theater”\n  - Replace with: “they're”\n  - Replace with: “there”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      13 | At the centre of the theatre I dropped a litre of coke.\n         |                                          ^~~~~ Did you mean to spell `litre` this way?\nSuggest:\n  - Replace with: “liter”\n  - Replace with: “lithe”\n  - Replace with: “lire”\n\n\n\n"
  },
  {
    "path": "harper-core/tests/text/linters/Swear.snap.yml",
    "content": "Lint:    WordChoice (127 priority)\nMessage: |\n       7 | One turd, two turds.\n         |     ^~~~ Try to avoid offensive language.\nSuggest:\n  - Replace with: “poo”\n  - Replace with: “poop”\n  - Replace with: “feces”\n  - Replace with: “dung”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n       7 | One turd, two turds.\n         |               ^~~~~ Try to avoid offensive language.\nSuggest:\n  - Replace with: “poos”\n  - Replace with: “poops”\n  - Replace with: “feces”\n  - Replace with: “dung”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n       9 | I fart, you're farting, he farts, she farted.\n         |   ^~~~ Try to avoid offensive language.\nSuggest:\n  - Replace with: “gas”\n  - Replace with: “wind”\n  - Replace with: “break wind”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n       9 | I fart, you're farting, he farts, she farted.\n         |                ^~~~~~~ Try to avoid offensive language.\nSuggest:\n  - Replace with: “breaking wind”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n       9 | I fart, you're farting, he farts, she farted.\n         |                            ^~~~~ Try to avoid offensive language.\nSuggest:\n  - Replace with: “gas”\n  - Replace with: “wind”\n  - Replace with: “breaks wind”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n       9 | I fart, you're farting, he farts, she farted.\n         |                                       ^~~~~~ Try to avoid offensive language.\nSuggest:\n  - Replace with: “broke wind”\n  - Replace with: “broken wind”\n\n\n\n"
  },
  {
    "path": "harper-core/tests/text/linters/The Constitution of the United States.snap.yml",
    "content": "Lint:    Capitalization (127 priority)\nMessage: |\n       3 | # The Constitution Of The United States Of America\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “# The Constitution of the United States of America”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n       5 | **We the People** of the United States, in Order to form a more perfect Union,\n         |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n       6 | establish Justice, insure domestic Tranquility, provide for the common defence,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n       7 | promote the general Welfare, and secure the Blessings of Liberty to ourselves\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n       8 | and our Posterity, do ordain and establish this Constitution for the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n       9 | States of America.\n         | ~~~~~~~~~~~~~~~~~~ This sentence is 52 words long.\n\n\n\nLint:    Style (127 priority)\nMessage: |\n       5 | **We the People** of the United States, in Order to form a more perfect Union,\n         |                                                            ^~~~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\n       6 | establish Justice, insure domestic Tranquility, provide for the common defence,\nSuggest:\n  - Replace with: “perfecter”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n       6 | establish Justice, insure domestic Tranquility, provide for the common defence,\n         |                                                                        ^~~~~~~ Did you mean to spell `defence` this way?\n       7 | promote the general Welfare, and secure the Blessings of Liberty to ourselves\nSuggest:\n  - Replace with: “defense”\n  - Replace with: “decency”\n  - Replace with: “defect”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n       8 | and our Posterity, do ordain and establish this Constitution for the United\n         |                                                                      ^~~~~~~\n       9 | States of America.\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      11 | ## Article. I.\n         |             ^~ Did you mean to spell `I.` this way?\nSuggest:\n  - Replace with: “I”\n  - Replace with: “Id”\n  - Replace with: “If”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      17 | Representatives. Congress shall make no law respecting an establishment of\n         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      18 | religion, or prohibiting the free exercise thereof; or abridging the freedom of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      19 | speech, or of the press; or the right of the people peaceably to assemble, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      20 | to petition the government for a redress of grievances.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      22 | No person shall be a Senator or Representative in Congress, or elector of\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      23 | President and Vice President, or hold any office, civil or military, under the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      24 | United States, or under any State, who, having previously taken an oath, as a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      25 | member of Congress, or as an officer of the United States, or as a member of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      26 | any State legislature, or as an executive or judicial officer of any State, to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      27 | support the Constitution of the United States, shall have engaged in\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      28 | insurrection or rebellion against the same, or given aid or comfort to the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      29 | enemies thereof. But Congress may, by a vote of two-thirds of each House,\n         | ~~~~~~~~~~~~~~~~ This sentence is 96 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      38 | The House of Representatives shall be composed of Members\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      39 | chosen every second Year by the People of the several States, and the Electors\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      40 | in each State shall have the Qualifications requisite for Electors of the most\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      41 | numerous Branch of the State Legislature.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      43 | No Person shall be a Representative who shall not have attained to the Age of\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      44 | twenty five Years, and been seven Years a Citizen of the United States, and who\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      45 | shall not, when elected, be an Inhabitant of that State in which he shall be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      46 | chosen.\n         | ~~~~~~~ This sentence is 46 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      50 | excluding Indians not taxed. But when the right to vote at any election for the\n         |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      51 | choice of electors for President and Vice President of the United States,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      52 | Representatives in Congress, the Executive and Judicial officers of a State, or\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      53 | the members of the Legislature thereof, is denied to any of the male\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      54 | inhabitants of such State, being twenty-one years of age, and citizens of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      55 | United States, or in any way abridged, except for participation in rebellion,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      56 | or other crime, the basis of representation therein shall be reduced in the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      57 | proportion which the number of such male citizens shall bear to the whole\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      58 | number of male citizens twenty-one years of age in such State. The actual\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 112 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n      51 | choice of electors for President and Vice President of the United States,\n      52 | Representatives in Congress, the Executive and Judicial officers of a State, or\n         |                                  ^~~~~~~~~ An Oxford comma is necessary here.\n      53 | the members of the Legislature thereof, is denied to any of the male\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      61 | in such Manner as they shall by Law direct. The Number of Representatives shall\n         |                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      62 | not exceed one for every thirty Thousand, but each State shall have at Least\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      63 | one Representative; and until such enumeration shall be made, the State of New\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      64 | Hampshire shall be entitled to chuse three, Massachusetts eight, Rhode-Island\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      65 | and Providence Plantations one, Connecticut five, New-York six, New Jersey\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      66 | four, Pennsylvania eight, Delaware one, Maryland six, Virginia ten, North\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      67 | Carolina five, South Carolina five, and Georgia three.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 72 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      63 | one Representative; and until such enumeration shall be made, the State of New\n      64 | Hampshire shall be entitled to chuse three, Massachusetts eight, Rhode-Island\n         |                                ^~~~~ Did you mean to spell `chuse` this way?\nSuggest:\n  - Replace with: “cause”\n  - Replace with: “chase”\n  - Replace with: “chose”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      72 | The House of Representatives shall chuse their Speaker and other Officers; and\n         |                                    ^~~~~ Did you mean to spell `chuse` this way?\nSuggest:\n  - Replace with: “cause”\n  - Replace with: “chase”\n  - Replace with: “chose”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      86 | they shall be divided as equally as may be into three Classes. The Seats of the\n         |                                                                ^~~~~~~~~~~~~~~~~\n      87 | Senators of the first Class shall be vacated at the Expiration of the second\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      88 | Year, of the second Class at the Expiration of the fourth Year, and of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      89 | third Class at the Expiration of the sixth Year, so that one third may be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      90 | chosen every second Year; and when vacancies happen in the representation of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      91 | any State in the Senate, the executive authority of such State shall issue\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      92 | writs of election to fill such vacancies: Provided, That the legislature of any\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      93 | State may empower the executive thereof to make temporary appointments until\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      94 | the people fill the vacancies by election as the legislature may direct.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 109 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      96 | No Person shall be a Senator who shall not have attained to the Age of thirty\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      97 | Years, and been nine Years a Citizen of the United States, and who shall not,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      98 | when elected, be an Inhabitant of that State for which he shall be chosen.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     103 | The Senate shall chuse their other Officers, and also a President pro tempore,\n         |                  ^~~~~ Did you mean to spell `chuse` this way?\nSuggest:\n  - Replace with: “cause”\n  - Replace with: “chase”\n  - Replace with: “chose”\n\n\n\nLint:    Redundancy (31 priority)\nMessage: |\n     103 | The Senate shall chuse their other Officers, and also a President pro tempore,\n         |                                              ^~~~~~~~ Consider using just `and`.\n     104 | in the Absence of the Vice President, or when he shall exercise the Office of\nSuggest:\n  - Replace with: “and”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     103 | The Senate shall chuse their other Officers, and also a President pro tempore,\n         |                                                                       ^~~~~~~ Did you mean to spell `tempore` this way?\n     104 | in the Absence of the Vice President, or when he shall exercise the Office of\nSuggest:\n  - Replace with: “tempo's”\n  - Replace with: “temple”\n  - Replace with: “tempo”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     103 | The Senate shall chuse their other Officers, and also a President pro tempore,\n         |                                                                       ^~~~~~~ `tempore` should probably be written as `temp ore`.\n     104 | in the Absence of the Vice President, or when he shall exercise the Office of\nSuggest:\n  - Replace with: “temp ore”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     112 | Judgment in Cases of impeachment shall not extend further than to removal from\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     113 | Office, and disqualification to hold and enjoy any Office of honor, Trust or\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     114 | Profit under the United States: but the Party convicted shall nevertheless be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     115 | liable and subject to Indictment, Trial, Judgment and Punishment, according to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     116 | Law.\n         | ~~~~ This sentence is 50 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     113 | Office, and disqualification to hold and enjoy any Office of honor, Trust or\n         |                                                                     ^~~~~ An Oxford comma is necessary here.\n     114 | Profit under the United States: but the Party convicted shall nevertheless be\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     115 | liable and subject to Indictment, Trial, Judgment and Punishment, according to\n         |                                          ^~~~~~~~ An Oxford comma is necessary here.\n     116 | Law.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     122 | The Times, Places and Manner of holding Elections for Senators\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     123 | and Representatives, shall be prescribed in each State by the Legislature\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     124 | thereof; but the Congress may at any time by Law make or alter such\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     125 | Regulations, except as to the Places of chusing Senators.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     122 | The Times, Places and Manner of holding Elections for Senators\n         |            ^~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     124 | thereof; but the Congress may at any time by Law make or alter such\n     125 | Regulations, except as to the Places of chusing Senators.\n         |                                         ^~~~~~~ Did you mean to spell `chusing` this way?\nSuggest:\n  - Replace with: “causing”\n  - Replace with: “chasing”\n  - Replace with: “cousin”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     133 | Each House shall be the Judge of the Elections, Returns and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     134 | Qualifications of its own Members, and a Majority of each shall constitute a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     135 | Quorum to do Business; but a smaller Number may adjourn from day to day, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     136 | may be authorized to compel the Attendance of absent Members, in such Manner,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     137 | and under such Penalties as each House may provide.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 61 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     133 | Each House shall be the Judge of the Elections, Returns and\n         |                                                 ^~~~~~~ An Oxford comma is necessary here.\n     134 | Qualifications of its own Members, and a Majority of each shall constitute a\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     139 | Each House may determine the Rules of its Proceedings, punish its Members for\n     140 | disorderly Behaviour, and, with the Concurrence of two thirds, expel a Member.\n         |            ^~~~~~~~~ Did you mean to spell `Behaviour` this way?\nSuggest:\n  - Replace with: “Behavior”\n  - Replace with: “Behaviors”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     142 | Each House shall keep a Journal of its Proceedings, and from time to time\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     143 | publish the same, excepting such Parts as may in their Judgment require\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     144 | Secrecy; and the Yeas and Nays of the Members of either House on any question\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     145 | shall, at the Desire of one fifth of those Present, be entered on the Journal.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 56 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     155 | the United States. They shall in all Cases, except Treason, Felony and Breach\n         |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     156 | of the Peace, be privileged from Arrest during their Attendance at the Session\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     157 | of their respective Houses, and in going to and returning from the same; and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     158 | for any Speech or Debate in either House, they shall not be questioned in any\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     159 | other Place.\n         | ~~~~~~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     155 | the United States. They shall in all Cases, except Treason, Felony and Breach\n         |                                                             ^~~~~~ An Oxford comma is necessary here.\n     156 | of the Peace, be privileged from Arrest during their Attendance at the Session\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     161 | No Senator or Representative shall, during the Time for which he was elected,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     162 | be appointed to any civil Office under the Authority of the United States,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     163 | which shall have been created, or the Emoluments whereof shall have been\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     164 | encreased during such time; and no Person holding any Office under the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     165 | States, shall be a Member of either House during his Continuance in Office. No\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 64 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     163 | which shall have been created, or the Emoluments whereof shall have been\n     164 | encreased during such time; and no Person holding any Office under the United\n         | ^~~~~~~~~ Did you mean to spell `encreased` this way?\nSuggest:\n  - Replace with: “increased”\n  - Replace with: “encased”\n  - Replace with: “entreated”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     164 | encreased during such time; and no Person holding any Office under the United\n         |                                                                        ^~~~~~~\n     165 | States, shall be a Member of either House during his Continuance in Office. No\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     177 | Every Bill which shall have passed the House of Representatives and the Senate,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     178 | shall, before it become a Law, be presented to the President of the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     179 | States; If he approve he shall sign it, but if not he shall return it, with his\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     180 | Objections to that House in which it shall have originated, who shall enter the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     181 | Objections at large on their Journal, and proceed to reconsider it. If after\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 69 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     178 | shall, before it become a Law, be presented to the President of the United\n         |                                                                     ^~~~~~~\n     179 | States; If he approve he shall sign it, but if not he shall return it, with his\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Agreement (127 priority)\nMessage: |\n     179 | States; If he approve he shall sign it, but if not he shall return it, with his\n         |               ^~~~~~~ The form of the verb must agree in grammatical number with the pronoun.\nSuggest:\n  - Replace with: “approves”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     181 | Objections at large on their Journal, and proceed to reconsider it. If after\n         |                                                                     ^~~~~~~~~\n     182 | such Reconsideration two thirds of that House shall agree to pass the Bill, it\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     183 | shall be sent, together with the Objections, to the other House, by which it\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     184 | shall likewise be reconsidered, and if approved by two thirds of that House, it\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     185 | shall become a Law. But in all such Cases the Votes of both Houses shall be\n         | ~~~~~~~~~~~~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     187 | against the Bill shall be entered on the Journal of each House respectively. If\n         |                                                                              ^~~\n     188 | any Bill shall not be returned by the President within ten Days (Sundays\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     189 | excepted) after it shall have been presented to him, the Same shall be a Law,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     190 | in like Manner as if he had signed it, unless the Congress by their Adjournment\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     191 | prevent its Return, in which Case it shall not be a Law.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 56 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     193 | Every Order, Resolution, or Vote to which the Concurrence of the Senate and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     194 | House of Representatives may be necessary (except on a question of Adjournment)\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     195 | shall be presented to the President of the United States; and before the Same\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     196 | shall take Effect, shall be approved by him, or being disapproved by him, shall\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     197 | be repassed by two thirds of the Senate and House of Representatives, according\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     198 | to the Rules and Limitations prescribed in the Case of a Bill.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 78 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     196 | shall take Effect, shall be approved by him, or being disapproved by him, shall\n     197 | be repassed by two thirds of the Senate and House of Representatives, according\n         |    ^~~~~~~~ Did you mean to spell `repassed` this way?\nSuggest:\n  - Replace with: “rebased”\n  - Replace with: “recessed”\n  - Replace with: “rehashed”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     202 | The Congress shall have Power To lay and collect Taxes, Duties,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     203 | Imposts and Excises, to pay the Debts and provide for the common Defence and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     204 | general Welfare of the United States; but all Duties, Imposts and Excises shall\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     205 | be uniform throughout the United States;\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     202 | The Congress shall have Power To lay and collect Taxes, Duties,\n     203 | Imposts and Excises, to pay the Debts and provide for the common Defence and\n         | ^~~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     203 | Imposts and Excises, to pay the Debts and provide for the common Defence and\n         |                                                                  ^~~~~~~ Did you mean to spell `Defence` this way?\n     204 | general Welfare of the United States; but all Duties, Imposts and Excises shall\nSuggest:\n  - Replace with: “Defense”\n  - Replace with: “Decency”\n  - Replace with: “Defect”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     204 | general Welfare of the United States; but all Duties, Imposts and Excises shall\n         |                                                       ^~~~~~~ An Oxford comma is necessary here.\n     205 | be uniform throughout the United States;\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n     212 | 3. To establish an uniform Rule of Naturalization, and uniform Laws on the subject\n         |                 ^~ Incorrect indefinite article.\nSuggest:\n  - Replace with: “a”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     229 | 9. To define and punish Piracies and Felonies committed on the high Seas, and\n         |                         ^~~~~~~~ Did you mean to spell `Piracies` this way?\nSuggest:\n  - Replace with: “Piracy's”\n  - Replace with: “Papacies”\n  - Replace with: “Pirates”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     229 | 9. To define and punish Piracies and Felonies committed on the high Seas, and\n     230 | Offences against the Law of Nations;\n         | ^~~~~~~~ Did you mean to spell `Offences` this way?\nSuggest:\n  - Replace with: “Offenses”\n  - Replace with: “Offense's”\n  - Replace with: “Offenders”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     245 | 15. To provide for organizing, arming, and disciplining, the Militia, and for\n         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     246 | governing such Part of them as may be employed in the Service of the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     247 | States, reserving to the States respectively, the Appointment of the Officers,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     248 | and the Authority of training the Militia according to the discipline\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     249 | prescribed by Congress;\n         | ~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     246 | governing such Part of them as may be employed in the Service of the United\n         |                                                                      ^~~~~~~\n     247 | States, reserving to the States respectively, the Appointment of the Officers,\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     251 | 16. To exercise exclusive Legislation in all Cases whatsoever, over such District\n         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     252 | (not exceeding ten Miles square) as may, by Cession of particular States, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     253 | the Acceptance of Congress, become the Seat of the Government of the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     254 | States, and to exercise like Authority over all Places purchased by the Consent\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     255 | of the Legislature of the State in which the Same shall be, for the Erection of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     256 | Forts, Magazines, Arsenals, dock-Yards, and other needful Buildings;—And\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 76 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     253 | the Acceptance of Congress, become the Seat of the Government of the United\n         |                                                                      ^~~~~~~\n     254 | States, and to exercise like Authority over all Places purchased by the Consent\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n     253 | the Acceptance of Congress, become the Seat of the Government of the United\n     254 | States, and to exercise like Authority over all Places purchased by the Consent\n         |                                        ^~~~~~~~ Did you mean the closed compound `overall`?\n     255 | of the Legislature of the State in which the Same shall be, for the Erection of\nSuggest:\n  - Replace with: “overall”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     265 | The Migration or Importation of such Persons as any of the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     266 | States now existing shall think proper to admit, shall not be prohibited by the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     267 | Congress prior to the Year one thousand eight hundred and eight, but a Tax or\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     268 | duty may be imposed on such Importation, not exceeding ten dollars for each\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     269 | Person.\n         | ~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     271 | The Privilege of the Writ of Habeas Corpus shall not be suspended, unless when\n         |                              ^~~~~~ Did you mean to spell `Habeas` this way?\nSuggest:\n  - Replace with: “Haber's”\n  - Replace with: “Hale's”\n  - Replace with: “Hebe's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     274 | No Bill of Attainder or ex post facto Law shall be passed.\n         |                                 ^~~~~ Did you mean to spell `facto` this way?\nSuggest:\n  - Replace with: “fact”\n  - Replace with: “factor”\n  - Replace with: “facts”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     284 | No Preference shall be given by any Regulation of Commerce or Revenue to the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     285 | Ports of one State over those of another: nor shall Vessels bound to, or from,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     286 | one State, be obliged to enter, clear, or pay Duties in another.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     292 | No Title of Nobility shall be granted by the United States: And no Person\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     293 | holding any Office of Profit or Trust under them, shall, without the Consent of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     294 | the Congress, accept of any present, Emolument, Office, or Title, of any kind\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     295 | whatever, from any King, Prince, or foreign State.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     297 | The right of citizens of the United States to vote in any primary or other\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     298 | election for President or Vice President, for electors for President or Vice\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     299 | President, or for Senator or Representative in Congress, shall not be denied or\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     300 | abridged by the United States or any State by reason of failure to pay any poll\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     301 | tax or other tax.\n         | ~~~~~~~~~~~~~~~~~ This sentence is 60 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     305 | No State shall enter into any Treaty, Alliance, or\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     306 | Confederation; grant Letters of Marque and Reprisal; coin Money; emit Bills of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     307 | Credit; make any Thing but gold and silver Coin a Tender in Payment of Debts;\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     308 | pass any Bill of Attainder, ex post facto Law, or Law impairing the Obligation\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     309 | of Contracts, or grant any Title of Nobility.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 58 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     308 | pass any Bill of Attainder, ex post facto Law, or Law impairing the Obligation\n         |                                     ^~~~~ Did you mean to spell `facto` this way?\n     309 | of Contracts, or grant any Title of Nobility.\nSuggest:\n  - Replace with: “fact”\n  - Replace with: “factor”\n  - Replace with: “facts”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     311 | No State shall, without the Consent of the Congress, lay any Imposts or Duties\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     312 | on Imports or Exports, except what may be absolutely necessary for executing\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     313 | it's inspection Laws: and the net Produce of all Duties and Imposts, laid by\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     314 | any State on Imports or Exports, shall be for the Use of the Treasury of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     315 | United States; and all such Laws shall be subject to the Revision and Controul\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     316 | of the Congress.\n         | ~~~~~~~~~~~~~~~~ This sentence is 73 words long.\n\n\n\nLint:    Agreement (31 priority)\nMessage: |\n     312 | on Imports or Exports, except what may be absolutely necessary for executing\n     313 | it's inspection Laws: and the net Produce of all Duties and Imposts, laid by\n         | ^~~~ Use the possessive pronoun `its` (without an apostrophe) to show ownership. The word `it's` (with an apostrophe) is a contraction of 'it is' or 'it has' and should not be used to indicate possession.\nSuggest:\n  - Replace with: “its”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     315 | United States; and all such Laws shall be subject to the Revision and Controul\n         |                                                                       ^~~~~~~~ Did you mean to spell `Controul` this way?\n     316 | of the Congress.\nSuggest:\n  - Replace with: “Control”\n  - Replace with: “Contour”\n  - Replace with: “Contrail”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     318 | No State shall, without the Consent of Congress, lay any Duty of Tonnage, keep\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     319 | Troops, or Ships of War in time of Peace, enter into any Agreement or Compact\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     320 | with another State, or with a foreign Power, or engage in War, unless actually\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     321 | invaded, or in such imminent Danger as will not admit of delay.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 55 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     332 | Each State shall appoint, in such Manner as the Legislature thereof may direct,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     333 | a Number of Electors, equal to the whole Number of Senators and Representatives\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     334 | to which the State may be entitled in the Congress: but no Senator or\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     335 | Representative, or Person holding an Office of Trust or Profit under the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     336 | States, shall be appointed an Elector.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 59 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     335 | Representative, or Person holding an Office of Trust or Profit under the United\n         |                                                                          ^~~~~~~\n     336 | States, shall be appointed an Elector.\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     338 | #### SubSection. 1.\n         |      ^~~~~~~~~~ The canonical dictionary spelling is `subsection`.\nSuggest:\n  - Replace with: “subsection”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     340 | The Electors shall meet in their respective states, and vote\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     341 | by ballot for President and Vice-President, one of whom, at least, shall not be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     342 | an inhabitant of the same state with themselves; they shall name in their\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     343 | ballots the person voted for as President, and in distinct ballots the person\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     344 | voted for as Vice-President, and they shall make distinct lists of all persons\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     345 | voted for as President, and all persons voted for as Vice-President and of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     346 | number of votes for each, which lists they shall sign and certify, and transmit\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     347 | sealed to the seat of the government of the United States, directed to the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     348 | President of the Senate;—The President of the Senate shall, in the presence of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     349 | the Senate and House of Representatives, open all the certificates and the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     350 | votes shall then be counted;—The person having the greatest Number of votes for\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     351 | President, shall be the President, if such number be a majority of the whole\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     352 | number of Electors appointed; and if no person have such majority, then from\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     353 | the persons having the highest numbers not exceeding three on the list of those\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     354 | voted for as President, the House of Representatives shall choose immediately,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     355 | by ballot, the President. But in choosing the President, the votes shall be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 204 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     355 | by ballot, the President. But in choosing the President, the votes shall be\n         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     356 | taken by states, the representation from each state having one vote; a quorum\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     357 | for this purpose shall consist of a member or members from two-thirds of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     358 | states, and a majority of all the states shall be necessary to a choice. [If,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     360 | elect shall have died, the Vice President elect shall become President. If a\n         |                                                                         ^~~~~\n     361 | President shall not have been chosen before the time fixed for the beginning of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     362 | his term, or if the President elect shall have failed to qualify, then the Vice\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     363 | President elect shall act as President until a President shall have qualified;\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     364 | and the Congress may by law provide for the case wherein neither a President\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     365 | elect nor a Vice President elect shall have qualified, declaring who shall then\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     366 | act as President, or the manner in which one who is to act shall be selected,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     367 | and such person shall act accordingly until a President or Vice President shall\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     368 | have qualified.The Congress may by law provide for the case of the death of any\n         | ~~~~~~~~~~~~~~~ This sentence is 101 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     368 | have qualified.The Congress may by law provide for the case of the death of any\n         |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     369 | of the persons from whom the House of Representatives may choose a President\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     370 | whenever the right of choice shall have devolved upon them, and for the case of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     371 | the death of any of the persons from whom the Senate may choose a Vice\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     372 | President whenever the right of choice shall have devolved upon them.]The\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 68 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     372 | President whenever the right of choice shall have devolved upon them.]The\n         |                                                                       ^~~~\n     373 | person having the greatest number of votes as Vice-President, shall be the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     374 | Vice-President, if such number be a majority of the whole number of Electors\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     375 | appointed, and if no person have a majority, then from the two highest numbers\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     376 | on the list, the Senate shall choose the Vice-President; a quorum for the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     377 | purpose shall consist of two-thirds of the whole number of Senators, and a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     378 | majority of the whole number shall be necessary to a choice. But no person\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 81 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     383 | The Congress may determine the Time of chusing the Electors, and the Day on\n         |                                        ^~~~~~~ Did you mean to spell `chusing` this way?\n     384 | which they shall give their Votes; which Day shall be the same throughout the\nSuggest:\n  - Replace with: “causing”\n  - Replace with: “chasing”\n  - Replace with: “cousin”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     388 | #### SubSection. 2\n         |      ^~~~~~~~~~ The canonical dictionary spelling is `subsection`.\nSuggest:\n  - Replace with: “subsection”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     390 | No Person except a natural born Citizen, or a Citizen of the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     391 | United States, at the time of the Adoption of this Constitution, shall be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     392 | eligible to the Office of President; neither shall any Person be eligible to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     393 | that Office who shall not have attained to the Age of thirty five Years, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     394 | been fourteen Years a Resident within the United States.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 62 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     396 | No person shall be elected to the office of the President more than twice, and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     397 | no person who has held the office of President, or acted as President, for more\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     398 | than two years of a term to which some other person was elected President shall\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     399 | be elected to the office of the President more than once. But this article\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 56 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     399 | be elected to the office of the President more than once. But this article\n         |                                                           ^~~~~~~~~~~~~~~~~\n     400 | shall not apply to any person holding the office of President when this article\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     401 | was proposed by the Congress, and shall not prevent any person who may be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     402 | holding the office of President, or acting as President, during the term within\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     403 | which this article becomes operative from holding the office of President or\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     404 | acting as President during the remainder of such term.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 65 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     406 | #### SubSection 3.\n         |      ^~~~~~~~~~ The canonical dictionary spelling is `subsection`.\nSuggest:\n  - Replace with: “subsection”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     415 | Whenever the President transmits to the President pro tempore of the Senate and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     416 | the Speaker of the House of Representatives his written declaration that he is\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     417 | unable to discharge the powers and duties of his office, and until he transmits\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     418 | to them a written declaration to the contrary, such powers and duties shall be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     419 | discharged by the Vice President as Acting President.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 62 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     415 | Whenever the President transmits to the President pro tempore of the Senate and\n         |                                                       ^~~~~~~ Did you mean to spell `tempore` this way?\n     416 | the Speaker of the House of Representatives his written declaration that he is\nSuggest:\n  - Replace with: “tempo's”\n  - Replace with: “temple”\n  - Replace with: “tempo”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     415 | Whenever the President transmits to the President pro tempore of the Senate and\n         |                                                       ^~~~~~~ `tempore` should probably be written as `temp ore`.\n     416 | the Speaker of the House of Representatives his written declaration that he is\nSuggest:\n  - Replace with: “temp ore”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     421 | Whenever the Vice President and a majority of either the principal officers of\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     422 | the executive departments or of such other body as Congress may by law provide,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     423 | transmit to the President pro tempore of the Senate and the Speaker of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     424 | House of Representatives their written declaration that the President is unable\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     425 | to discharge the powers and duties of his office, the Vice President shall\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     426 | immediately assume the powers and duties of the office as Acting President.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 77 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     422 | the executive departments or of such other body as Congress may by law provide,\n     423 | transmit to the President pro tempore of the Senate and the Speaker of the\n         |                               ^~~~~~~ Did you mean to spell `tempore` this way?\nSuggest:\n  - Replace with: “tempo's”\n  - Replace with: “temple”\n  - Replace with: “tempo”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     422 | the executive departments or of such other body as Congress may by law provide,\n     423 | transmit to the President pro tempore of the Senate and the Speaker of the\n         |                               ^~~~~~~ `tempore` should probably be written as `temp ore`.\nSuggest:\n  - Replace with: “temp ore”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     428 | Thereafter, when the President transmits to the President pro tempore of the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     429 | Senate and the Speaker of the House of Representatives his written declaration\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     430 | that no inability exists, he shall resume the powers and duties of his office\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     431 | unless the Vice President and a majority of either the principal officers of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     432 | the executive department or of such other body as Congress may by law provide,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     433 | transmit within four days to the President pro tempore of the Senate and the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     434 | Speaker of the House of Representatives their written declaration that the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     435 | President is unable to discharge the powers and duties of his office. Thereupon\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 102 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     428 | Thereafter, when the President transmits to the President pro tempore of the\n         |                                                               ^~~~~~~ Did you mean to spell `tempore` this way?\n     429 | Senate and the Speaker of the House of Representatives his written declaration\nSuggest:\n  - Replace with: “tempo's”\n  - Replace with: “temple”\n  - Replace with: “tempo”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     428 | Thereafter, when the President transmits to the President pro tempore of the\n         |                                                               ^~~~~~~ `tempore` should probably be written as `temp ore`.\n     429 | Senate and the Speaker of the House of Representatives his written declaration\nSuggest:\n  - Replace with: “temp ore”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     433 | transmit within four days to the President pro tempore of the Senate and the\n         |                                                ^~~~~~~ Did you mean to spell `tempore` this way?\n     434 | Speaker of the House of Representatives their written declaration that the\nSuggest:\n  - Replace with: “tempo's”\n  - Replace with: “temple”\n  - Replace with: “tempo”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     433 | transmit within four days to the President pro tempore of the Senate and the\n         |                                                ^~~~~~~ `tempore` should probably be written as `temp ore`.\n     434 | Speaker of the House of Representatives their written declaration that the\nSuggest:\n  - Replace with: “temp ore”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     437 | purpose if not in session. If the Congress, within twenty-one days after\n         |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     438 | receipt of the latter written declaration, or, if Congress is not in session,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     439 | within twenty-one days after Congress is required to assemble, determines by\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     440 | two-thirds vote of both Houses that the President is unable to discharge the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     441 | powers and duties of his office, the Vice President shall continue to discharge\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     442 | the same as Acting President; otherwise, the President shall resume the powers\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     443 | and duties of his office.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 77 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     446 | #### SubSection 4.\n         |      ^~~~~~~~~~ The canonical dictionary spelling is `subsection`.\nSuggest:\n  - Replace with: “subsection”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     448 | The President shall, at stated Times, receive for his\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     449 | Services, a Compensation, which shall neither be encreased nor diminished\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     450 | during the Period for which he shall have been elected, and he shall not\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     451 | receive within that Period any other Emolument from the United States, or any\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     452 | of them.\n         | ~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     449 | Services, a Compensation, which shall neither be encreased nor diminished\n         |                                                  ^~~~~~~~~ Did you mean to spell `encreased` this way?\n     450 | during the Period for which he shall have been elected, and he shall not\nSuggest:\n  - Replace with: “increased”\n  - Replace with: “encased”\n  - Replace with: “entreated”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     454 | Before he enter on the Execution of his Office, he shall take the following\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     455 | Oath or Affirmation:-- \"I do solemnly swear (or affirm) that I will faithfully\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     456 | execute the Office of President of the United States, and will to the best of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     457 | my Ability, preserve, protect and defend the Constitution of the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     458 | States.\"\n         | ~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Agreement (127 priority)\nMessage: |\n     454 | Before he enter on the Execution of his Office, he shall take the following\n         |           ^~~~~ The form of the verb must agree in grammatical number with the pronoun.\nSuggest:\n  - Replace with: “enters”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n     455 | Oath or Affirmation:-- \"I do solemnly swear (or affirm) that I will faithfully\n         |                     ^~ Replace these two hyphens with an en dash (–).\nSuggest:\n  - Replace with: “–”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     457 | my Ability, preserve, protect and defend the Constitution of the United\n         |                                                                  ^~~~~~~\n     458 | States.\"\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     460 | #### SubSection 5.\n         |      ^~~~~~~~~~ The canonical dictionary spelling is `subsection`.\nSuggest:\n  - Replace with: “subsection”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     465 | A number of electors of President and Vice President equal to the whole number\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     466 | of Senators and Representatives in Congress to which the District would be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     467 | entitled if it were a State, but in no event more than the least populous\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     468 | State; they shall be in addition to those appointed by the States, but they\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     469 | shall be considered, for the purposes of the election of President and Vice\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     470 | President, to be electors appointed by a State; and they shall meet in the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     471 | District and perform such duties as provided by this article of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     472 | Constitution.\n         | ~~~~~~~~~~~~~ This sentence is 95 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     476 | The President shall be Commander in Chief of the Army and Navy\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     477 | of the United States, and of the Militia of the several States, when called\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     478 | into the actual Service of the United States; he may require the Opinion, in\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     479 | writing, of the principal Officer in each of the executive Departments, upon\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     480 | any Subject relating to the Duties of their respective Offices, and he shall\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     481 | have Power to grant Reprieves and Pardons for Offences against the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     482 | States, except in Cases of Impeachment.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 83 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     481 | have Power to grant Reprieves and Pardons for Offences against the United\n         |                                               ^~~~~~~~ Did you mean to spell `Offences` this way?\n     482 | States, except in Cases of Impeachment.\nSuggest:\n  - Replace with: “Offenses”\n  - Replace with: “Offense's”\n  - Replace with: “Offenders”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     481 | have Power to grant Reprieves and Pardons for Offences against the United\n         |                                                                    ^~~~~~~\n     482 | States, except in Cases of Impeachment.\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     484 | He shall have Power, by and with the Advice and Consent of the Senate, to make\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     485 | Treaties, provided two thirds of the Senators present concur; and he shall\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     486 | nominate, and by and with the Advice and Consent of the Senate, shall appoint\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     487 | Ambassadors, other public Ministers and Consuls, Judges of the supreme Court,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     488 | and all other Officers of the United States, whose Appointments are not herein\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     489 | otherwise provided for, and which shall be established by Law: but the Congress\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     490 | may by Law vest the Appointment of such inferior Officers, as they think\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     491 | proper, in the President alone, in the Courts of Law, or in the Heads of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     492 | Departments.\n         | ~~~~~~~~~~~~ This sentence is 108 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     504 | He shall from time to time give to the Congress Information of\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     505 | the State of the Union, and recommend to their Consideration such Measures as\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     506 | he shall judge necessary and expedient; he may, on extraordinary Occasions,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     507 | convene both Houses, or either of them, and in Case of Disagreement between\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     508 | them, with Respect to the Time of Adjournment, he may adjourn them to such Time\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     509 | as he shall think proper; he shall receive Ambassadors and other public\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     510 | Ministers; he shall take Care that the Laws be faithfully executed, and shall\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     511 | Commission all the Officers of the United States.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 97 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     525 | time ordain and establish. The Judges, both of the supreme and inferior Courts,\n     526 | shall hold their Offices during good Behaviour, and shall, at stated Times,\n         |                                      ^~~~~~~~~ Did you mean to spell `Behaviour` this way?\n     527 | receive for their Services, a Compensation, which shall not be diminished\nSuggest:\n  - Replace with: “Behavior”\n  - Replace with: “Behaviors”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     532 | The judicial Power shall extend to all Cases, in Law and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     533 | Equity, arising under this Constitution, the Laws of the United States, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     534 | Treaties made, or which shall be made, under their Authority;—to all Cases\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     535 | affecting Ambassadors, other public Ministers and Consuls;—to all Cases of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     536 | admiralty and maritime Jurisdiction;—to Controversies to which the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     537 | States shall be a Party;—to Controversies between two or more States;—between\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     538 | Citizens of different States, —between Citizens of the same State claiming\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     539 | Lands under Grants of different States.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 87 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     536 | admiralty and maritime Jurisdiction;—to Controversies to which the United\n         |                                                                    ^~~~~~~\n     537 | States shall be a Party;—to Controversies between two or more States;—between\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     548 | The Trial of all Crimes, except in Cases of Impeachment, shall be by Jury; and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     549 | such Trial shall be held in the State where the said Crimes shall have been\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     550 | committed; but when not committed within any State, the Trial shall be at such\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     551 | Place or Places as the Congress may by Law have directed.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 55 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     566 | The right of the people to be secure in their persons, houses,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     567 | papers, and effects, against unreasonable searches and seizures, shall not be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     568 | violated, and no warrants shall issue, but upon probable cause, supported by\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     569 | oath or affirmation, and particularly describing the place to be searched, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     570 | the persons or things to be seized.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     572 | No person shall be held to answer for a capital, or otherwise infamous crime,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     573 | unless on a presentment or indictment of a grand jury, except in cases arising\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     574 | in the land or naval forces, or in the militia, when in actual service in time\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     575 | of war or public danger; nor shall any person be subject for the same offense\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     576 | to be twice put in jeopardy of life or limb; nor shall be compelled in any\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     577 | criminal case to be a witness against himself, nor be deprived of life,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     578 | liberty, or property, without due process of law; nor shall private property be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     579 | taken for public use, without just compensation.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 108 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     581 | In all criminal prosecutions, the accused shall enjoy the right to a speedy and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     582 | public trial, by an impartial jury of the state and district wherein the crime\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     583 | shall have been committed, which district shall have been previously\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     584 | ascertained by law, and to be informed of the nature and cause of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     585 | accusation; to be confronted with the witnesses against him; to have compulsory\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     586 | process for obtaining witnesses in his favor, and to have the assistance of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     587 | counsel for his defense.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 81 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     589 | In suits at common law, where the value in controversy shall exceed twenty\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     590 | dollars, the right of trial by jury shall be preserved, and no fact tried by a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     591 | jury, shall be otherwise reexamined in any court of the United States, than\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     592 | according to the rules of the common law.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 50 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     603 | Congress may by general Laws prescribe the Manner in which such Acts, Records\n         |                                                                       ^~~~~~~ An Oxford comma is necessary here.\n     604 | and Proceedings shall be proved, and the Effect thereof.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     610 | the State wherein they reside. No State shall make or enforce any law which\n         |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     611 | shall abridge the privileges or immunities of citizens of the United States;\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     612 | nor shall any State deprive any person of life, liberty, or property, without\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     613 | due process of law; nor deny to any person within its jurisdiction the equal\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     614 | protection of the laws.\n         | ~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 52 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     616 | The right of citizens of the United States, who are eighteen years of age or\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     617 | older, to vote shall not be denied or abridged by the United States or by any\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     618 | State on account of age, sex, race, color, or previous condition of servitude.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     620 | A Person charged in any State with Treason, Felony, or other Crime, who shall\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     621 | flee from Justice, and be found in another State, shall on Demand of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     622 | executive Authority of the State from which he fled, be delivered up, to be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     623 | removed to the State having Jurisdiction of the Crime.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     626 | whereof the party shall have been duly convicted, shall exist within the United\n         |                                                                          ^~~~~~~\n     627 | States, or any place subject to their jurisdiction. No Person held to Service\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     627 | States, or any place subject to their jurisdiction. No Person held to Service\n         |                                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~\n     628 | or Labour in one State, under the Laws thereof, escaping into another, shall,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     629 | in Consequence of any Law or Regulation therein, be discharged from such\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     630 | Service or Labour, but shall be delivered up on Claim of the Party to whom such\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     631 | Service or Labour may be due.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 52 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     627 | States, or any place subject to their jurisdiction. No Person held to Service\n     628 | or Labour in one State, under the Laws thereof, escaping into another, shall,\n         |    ^~~~~~ Did you mean to spell `Labour` this way?\nSuggest:\n  - Replace with: “Labor”\n  - Replace with: “Layout”\n  - Replace with: “Labium”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     629 | in Consequence of any Law or Regulation therein, be discharged from such\n     630 | Service or Labour, but shall be delivered up on Claim of the Party to whom such\n         |            ^~~~~~ Did you mean to spell `Labour` this way?\nSuggest:\n  - Replace with: “Labor”\n  - Replace with: “Layout”\n  - Replace with: “Labium”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     630 | Service or Labour, but shall be delivered up on Claim of the Party to whom such\n     631 | Service or Labour may be due.\n         |            ^~~~~~ Did you mean to spell `Labour` this way?\nSuggest:\n  - Replace with: “Labor”\n  - Replace with: “Layout”\n  - Replace with: “Labium”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     635 | New States may be admitted by the Congress into this Union; but\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     636 | no new State shall be formed or erected within the Jurisdiction of any other\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     637 | State; nor any State be formed by the Junction of two or more States, or Parts\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     638 | of States, without the Consent of the Legislatures of the States concerned as\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     639 | well as of the Congress.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 60 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     641 | The Congress shall have Power to dispose of and make all needful Rules and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     642 | Regulations respecting the Territory or other Property belonging to the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     643 | States; and nothing in this Constitution shall be so construed as to Prejudice\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     644 | any Claims of the United States, or of any particular State.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     642 | Regulations respecting the Territory or other Property belonging to the United\n         |                                                                         ^~~~~~~\n     643 | States; and nothing in this Constitution shall be so construed as to Prejudice\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     648 | The United States shall guarantee to every State in this Union\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     649 | a Republican Form of Government, and shall protect each of them against\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     650 | Invasion; and on Application of the Legislature, or of the Executive (when the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     651 | Legislature cannot be convened) against domestic Violence.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     658 | questioned. But neither the United States nor any State shall assume or pay any\n         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     659 | debt or obligation incurred in aid of insurrection or rebellion against the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     660 | United States, or any claim for the loss or emancipation of any slave; but all\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     661 | such debts, obligations and claims shall be held illegal and void.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     660 | United States, or any claim for the loss or emancipation of any slave; but all\n     661 | such debts, obligations and claims shall be held illegal and void.\n         |             ^~~~~~~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     663 | ## Article. V.\n         |             ^~ Did you mean to spell `V.` this way?\nSuggest:\n  - Replace with: “Vi”\n  - Replace with: “VA”\n  - Replace with: “Vb”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     665 | The Congress, whenever two thirds of both Houses shall deem it necessary, shall\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     666 | propose Amendments to this Constitution, or, on the Application of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     667 | Legislatures of two thirds of the several States, shall call a Convention for\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     668 | proposing Amendments, which, in either Case, shall be valid to all Intents and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     669 | Purposes, as Part of this Constitution, when ratified by the Legislatures of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     670 | three fourths of the several States, or by Conventions in three fourths\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     671 | thereof, as the one or the other Mode of Ratification may be proposed by the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     672 | Congress; Provided that no Amendment which may be made prior to the Year One\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     673 | thousand eight hundred and eight shall in any Manner affect the first and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     674 | fourth Clauses in the Ninth Section of the first Article; and that no State,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     675 | without its Consent, shall be deprived of its equal Suffrage in the Senate.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 143 words long.\n\n\n\nLint:    Nonstandard (50 priority)\nMessage: |\n     668 | proposing Amendments, which, in either Case, shall be valid to all Intents and\n         |                                                             ^~~~~~~~~~~~~~~~~~~\n     669 | Purposes, as Part of this Constitution, when ratified by the Legislatures of\n         | ~~~~~~~~ The correct form is 'to all intents and purposes'.\nSuggest:\n  - Replace with: “to all Intents and Purposes”\n  - Replace with: “for alL intents anD purposes”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n     677 | ## Article. VI.\n         | ^~~~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “## Article. Vi.”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     683 | This Constitution, and the Laws of the United States which shall be made in\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     684 | Pursuance thereof; and all Treaties made, or which shall be made, under the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     685 | Authority of the United States, shall be the supreme Law of the Land; and the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     686 | Judges in every State shall be bound thereby, any Thing in the Constitution or\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     687 | Laws of any State to the Contrary notwithstanding.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 64 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     689 | The Senators and Representatives before mentioned, and the Members of the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     690 | several State Legislatures, and all executive and judicial Officers, both of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     691 | the United States and of the several States, shall be bound by Oath or\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     692 | Affirmation, to support this Constitution; but no religious Test shall ever be\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     693 | required as a Qualification to any Office or public Trust under the United\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     694 | States.\n         | ~~~~~~~ This sentence is 62 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     693 | required as a Qualification to any Office or public Trust under the United\n         |                                                                     ^~~~~~~\n     694 | States.\n         | ~~~~~~ When referring to national or international organizations, make sure to treat them as a proper noun.\nSuggest:\n  - Replace with: “United States”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     714 | first Page, The Word \"Thirty\" being partly written on an Erazure in the\n         |                                                          ^~~~~~~ Did you mean to spell `Erazure` this way?\n     715 | fifteenth Line of the first Page. The Words \"is tried\" being interlined between\nSuggest:\n  - Replace with: “Erasure”\n  - Replace with: “Erasures”\n  - Replace with: “Azure”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n     721 | done in Convention by the Unanimous Consent of the States present the\n         | ^~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Done”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     721 | done in Convention by the Unanimous Consent of the States present the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     722 | Seventeenth Day of September in the Year of our Lord one thousand seven hundred\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     723 | and Eighty seven and of the Independence of the United States of America the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     724 | Twelfth In witness whereof We have hereunto subscribed our Names,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 50 words long.\n\n\n\n"
  },
  {
    "path": "harper-core/tests/text/linters/The Great Gatsby.snap.yml",
    "content": "Lint:    Spelling (63 priority)\nMessage: |\n       3 | BY F. SCOTT FITZGERALD\n         |    ^~ Did you mean to spell `F.` this way?\nSuggest:\n  - Replace with: “Fa”\n  - Replace with: “Fe”\n  - Replace with: “Ff”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n       3 | BY F. SCOTT FITZGERALD\n         |       ^~~~~ Did you mean to spell `SCOTT` this way?\nSuggest:\n  - Replace with: “Scout”\n  - Replace with: “Scott”\n  - Replace with: “Scoot”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n       3 | BY F. SCOTT FITZGERALD\n         |             ^~~~~~~~~~ Did you mean `Fitzgerald`?\nSuggest:\n  - Replace with: “Fitzgerald”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      10 | “Whenever you feel like criticising any one,” he told me, “just remember that\n         |                         ^~~~~~~~~~~ Did you mean `criticizing`?\nSuggest:\n  - Replace with: “criticizing”\n\n\n\nLint:    Redundancy (31 priority)\nMessage: |\n      15 | consequence, I’m inclined to reserve all judgments, a habit that has opened up\n      16 | many curious natures to me and also made me the victim of not a few veteran\n         |                            ^~~~~~~~ Consider using just `and`.\nSuggest:\n  - Replace with: “and”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      17 | bores. The abnormal mind is quick to detect and attach itself to this quality\n         |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      18 | when it appears in a normal person, and so it came about that in college I was\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      19 | unjustly accused of being a politician, because I was privy to the secret griefs\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      20 | of wild, unknown men. Most of the confidences were unsought—frequently I have\n         | ~~~~~~~~~~~~~~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      20 | of wild, unknown men. Most of the confidences were unsought—frequently I have\n         |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      21 | feigned sleep, preoccupation, or a hostile levity when I realized by some\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      22 | unmistakable sign that an intimate revelation was quivering on the horizon; for\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      23 | the intimate revelations of young men, or at least the terms in which they\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      24 | express them, are usually plagiaristic and marred by obvious suppressions.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 57 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      27 | snobbishly repeat, a sense of the fundamental decencies is parcelled out\n         |                                                            ^~~~~~~~~ Did you mean `parceled`?\n      28 | unequally at birth.\nSuggest:\n  - Replace with: “parceled”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      32 | after a certain point I don’t care what it’s founded on. When I came back from\n         |                                                          ^~~~~~~~~~~~~~~~~~~~~~\n      33 | the East last autumn I felt that I wanted the world to be in uniform and at a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      34 | sort of moral attention forever; I wanted no more riotous excursions with\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      35 | privileged glimpses into the human heart. Only Gatsby, the man who gives his\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      37 | everything for which I have an unaffected scorn. If personality is an unbroken\n         |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      38 | series of successful gestures, then there was something gorgeous about him, some\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      39 | heightened sensitivity to the promises of life, as if he were related to one of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      40 | those intricate machines that register earthquakes ten thousand miles away. This\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      40 | those intricate machines that register earthquakes ten thousand miles away. This\n         |                                                                             ^~~~~\n      41 | responsiveness had nothing to do with that flabby impressionability which is\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      42 | dignified under the name of the “creative temperament”—it was an extraordinary\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      43 | gift for hope, a romantic readiness such as I have never found in any other\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      44 | person and which it is not likely I shall ever find again. No—Gatsby turned out\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      44 | person and which it is not likely I shall ever find again. No—Gatsby turned out\n         |                                                            ^~~~~~~~~~~~~~~~~~~~~\n      45 | all right at the end; it is what preyed on Gatsby, what foul dust floated in the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      46 | wake of his dreams that temporarily closed out my interest in the abortive\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      47 | sorrows and short-winded elations of men.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      50 | three generations. The Carraways are something of a clan, and we have a\n         |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      51 | tradition that we’re descended from the Dukes of Buccleuch, but the actual\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      52 | founder of my line was my grandfather’s brother, who came here in fifty-one,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      53 | sent a substitute to the Civil War, and started the wholesale hardware business\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      54 | that my father carries on to-day.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 57 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      50 | three generations. The Carraways are something of a clan, and we have a\n         |                        ^~~~~~~~~ Did you mean to spell `Carraways` this way?\nSuggest:\n  - Replace with: “Caraways”\n  - Replace with: “Caraway's”\n  - Replace with: “Castaways”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      51 | tradition that we’re descended from the Dukes of Buccleuch, but the actual\n         |                                                  ^~~~~~~~~ Did you mean to spell `Buccleuch` this way?\n      52 | founder of my line was my grandfather’s brother, who came here in fifty-one,\nSuggest:\n  - Replace with: “Buckley's”\n  - Replace with: “Buckle's”\n  - Replace with: “Buckler's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      61 | restless. Instead of being the warm centre of the world, the Middle West now\n         |                                     ^~~~~~ Did you mean to spell `centre` this way?\n      62 | seemed like the ragged edge of the universe—so I decided to go East and learn\nSuggest:\n  - Replace with: “center”\n  - Replace with: “cent's”\n  - Replace with: “censure”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      69 | The practical thing was to find rooms in the city, but it was a warm season, and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      70 | I had just left a country of wide lawns and friendly trees, so when a young man\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      71 | at the office suggested that we take a house together in a commuting town, it\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      72 | sounded like a great idea. He found the house, a weatherbeaten cardboard\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      72 | sounded like a great idea. He found the house, a weatherbeaten cardboard\n         |                                                  ^~~~~~~~~~~~~ Did you mean `weather-beaten`?\n      73 | bungalow at eighty a month, but at the last minute the firm ordered him to\nSuggest:\n  - Replace with: “weather-beaten”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n      72 | sounded like a great idea. He found the house, a weatherbeaten cardboard\n         |                                                  ^~~~~~~~~~~~~ `weatherbeaten` should probably be written as `weather beaten`.\n      73 | bungalow at eighty a month, but at the last minute the firm ordered him to\nSuggest:\n  - Replace with: “weather beaten”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      74 | Washington, and I went out to the country alone. I had a dog—at least I had him\n         |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      75 | for a few days until he ran away—and an old Dodge and a Finnish woman, who made\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      76 | my bed and cooked breakfast and muttered Finnish wisdom to herself over the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      77 | electric stove.\n         | ~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      93 | down out of the young breath-giving air. I bought a dozen volumes on banking and\n         |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      94 | credit and investment securities, and they stood on my shelf in red and gold\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      95 | like new money from the mint, promising to unfold the shining secrets that only\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      96 | Midas and Morgan and Mæcenas knew. And I had the high intention of reading many\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n      95 | like new money from the mint, promising to unfold the shining secrets that only\n      96 | Midas and Morgan and Mæcenas knew. And I had the high intention of reading many\n         |                      ^~~~~~~ Did you mean `Mycenae`?\nSuggest:\n  - Replace with: “Mycenae”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n      97 | other books besides. I was rather literary in college—one year I wrote a series\n         |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      98 | of very solemn and obvious editorials for the Yale News—and now I was going to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n      99 | bring back all such things into my life and become again that most limited of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     100 | all specialists, the “well-rounded man.” This isn’t just an epigram—life is much\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     106 | natural curiosities, two unusual formations of land. Twenty miles from the city\n         |                                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~\n     107 | a pair of enormous eggs, identical in contour and separated only by a courtesy\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     108 | bay, jut out into the most domesticated body of salt water in the Western\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     109 | hemisphere, the great wet barnyard of Long Island Sound. They are not perfect\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     119 | thousand a season. The one on my right was a colossal affair by any standard—it\n         |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     120 | was a factual imitation of some Hôtel de Ville in Normandy, with a tower on one\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     121 | side, spanking new under a thin beard of raw ivy, and a marble swimming pool,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     122 | and more than forty acres of lawn and garden. It was Gatsby’s mansion. Or,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     119 | thousand a season. The one on my right was a colossal affair by any standard—it\n     120 | was a factual imitation of some Hôtel de Ville in Normandy, with a tower on one\n         |                                 ^~~~~ Did you mean to spell `Hôtel` this way?\nSuggest:\n  - Replace with: “Hotel”\n  - Replace with: “Hate”\n  - Replace with: “Hazel”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     120 | was a factual imitation of some Hôtel de Ville in Normandy, with a tower on one\n         |                                          ^~~~~ Did you mean to spell `Ville` this way?\n     121 | side, spanking new under a thin beard of raw ivy, and a marble swimming pool,\nSuggest:\n  - Replace with: “Vile”\n  - Replace with: “Villa”\n  - Replace with: “Villi”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n     120 | was a factual imitation of some Hôtel de Ville in Normandy, with a tower on one\n         |                                          ^~~~~~~~ It seems these words would go better together.\n     121 | side, spanking new under a thin beard of raw ivy, and a marble swimming pool,\nSuggest:\n  - Replace with: “Villein”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     124 | of that name. My own house was an eyesore, but it was a small eyesore, and it\n         |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     125 | had been overlooked, so I had a view of the water, a partial view of my\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     126 | neighbor’s lawn, and the consoling proximity of millionaires—all for eighty\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     127 | dollars a month.\n         | ~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     131 | drove over there to have dinner with the Tom Buchanans. Daisy was my second\n         |                                              ^~~~~~~~~ Did you mean to spell `Buchanans` this way?\nSuggest:\n  - Replace with: “Buchanan's”\n  - Replace with: “Buchanan”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     135 | Her husband, among various physical accomplishments, had been one of the most\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     136 | powerful ends that ever played football at New Haven—a national figure in a way,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     137 | one of those men who reach such an acute limited excellence at twenty-one that\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     138 | everything afterward savors of anti-climax. His family were enormously\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n     137 | one of those men who reach such an acute limited excellence at twenty-one that\n     138 | everything afterward savors of anti-climax. His family were enormously\n         |                                ^~~~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “anticlimax”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     138 | everything afterward savors of anti-climax. His family were enormously\n         |                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~\n     139 | wealthy—even in college his freedom with money was a matter for reproach—but now\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     140 | he’d left Chicago and come East in a fashion that rather took your breath away:\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     141 | for instance, he’d brought down a string of polo ponies from Lake Forest. It was\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     146 | played polo and were rich together. This was a permanent move, said Daisy over\n         |                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     147 | the telephone, but I didn’t believe it—I had no sight into Daisy’s heart, but I\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     148 | felt that Tom would drift on forever seeking, a little wistfully, for the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     149 | dramatic turbulence of some irrecoverable football game.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     154 | the bay. The lawn started at the beach and ran toward the front door for a\n         |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     155 | quarter of a mile, jumping over sun-dials and brick walks and burning\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     156 | gardens—finally when it reached the house drifting up the side in bright vines\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     157 | as though from the momentum of its run. The front was broken by a line of French\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     165 | appearance of always leaning aggressively forward. Not even the effeminate swank\n         |                                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     166 | of his riding clothes could hide the enormous power of that body—he seemed to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     167 | fill those glistening boots until he strained the top lacing, and you could see\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     168 | a great pack of muscle shifting when his shoulder moved under his thin coat. It\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     185 | Turning me around by one arm, he moved a broad flat hand along the front vista,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     186 | including in its sweep a sunken Italian garden, a half acre of deep, pungent\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     187 | roses, and a snub-nosed motor-boat that bumped the tide offshore.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     189 | “It belonged to Demaine, the oil man.” He turned me around again, politely and\n         |                 ^~~~~~~ Did you mean to spell `Demaine` this way?\nSuggest:\n  - Replace with: “Decline”\n  - Replace with: “Demand”\n  - Replace with: “Demise”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n     189 | “It belonged to Demaine, the oil man.” He turned me around again, politely and\n         |                              ^~~~~~~ Did you mean the closed compound noun “oilman”?\nSuggest:\n  - Replace with: “oilman”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     195 | into the house. A breeze blew through the room, blew curtains in at one end and\n         |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     196 | out the other like pale flags, twisting them up toward the frosted wedding-cake\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     197 | of the ceiling, and then rippled over the wine-colored rug, making a shadow on\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     198 | it as wind does on the sea.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     236 | speech is an arrangement of notes that will never be played again. Her face was\n         |                                                                    ^~~~~~~~~~~~~\n     237 | sad and lovely with bright things in it, bright eyes and a bright passionate\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     238 | mouth, but there was an excitement in her voice that men who had cared for her\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     239 | found difficult to forget: a singing compulsion, a whispered “Listen,” a promise\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     240 | that she had done gay, exciting things just a while since and that there were\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     241 | gay, exciting things hovering in the next hour.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 68 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n     268 | “I’m a bond man.”\n         |        ^~~~~~~~ Did you mean the closed compound noun “bondman”?\nSuggest:\n  - Replace with: “bondman”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     334 | “All right,” said Daisy. ‘‘What’ll we plan?” She turned to me helplessly: ‘‘What\n         |                                            ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     335 | do people plan?”\n         |                ^ This quote has no termination.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     394 | me again. ‘‘—And we’ve produced all the things that go to make civilization—oh,\n     395 | science and art, and all that. Do you see?”\n         | ^~~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     395 | science and art, and all that. Do you see?”\n         |                                           ^ This quote has no termination.\n\n\n\nLint:    Style (127 priority)\nMessage: |\n     397 | There was something pathetic in his concentration, as if his complacency, more\n         |                                                                           ^~~~~\n     398 | acute than of old, was not enough to him any more. When, almost immediately, the\n         | ~~~~~ This is not an error, but an inflected form of this adjective also exists\nSuggest:\n  - Replace with: “acuter”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     416 | For a moment the last sunshine fell with romantic affection upon her glowing\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     417 | face; her voice compelled me forward breathlessly as I listened—then the glow\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     418 | faded, each light deserting her with lingering regret, like children leaving a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     419 | pleasant street at dusk.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n     426 | “I love to see you at my table, Nick. You remind me of a—of a rose, an absolute\n         |                                                        ^ Incorrect indefinite article.\n     427 | rose. Doesn’t he?” She turned to Miss Baker for confirmation: “An absolute\nSuggest:\n  - Replace with: “an”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     452 | “Why—” she said hesitantly, ‘‘Tom’s got some woman in New York.”\n         |                                                                ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     464 | “It couldn’t be helped!” cried Daisy with tense gayety.\n         |                                                 ^~~~~~ Did you mean to spell `gayety` this way?\nSuggest:\n  - Replace with: “gaiety”\n  - Replace with: “gamely”\n  - Replace with: “gamete”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n     477 | being lit again, pointlessly, and I was conscious of wanting to look squarely at\n     478 | every one, and yet to avoid all eyes. I couldn’t guess what Daisy and Tom were\n         | ^~~~~~~~~ Did you mean the closed compound `everyone`?\nSuggest:\n  - Replace with: “everyone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     479 | thinking, but I doubt if even Miss Baker, who seemed to have mastered a certain\n     480 | hardy scepticism, was able utterly to put this fifth guest’s shrill metallic\n         |       ^~~~~~~~~~ Did you mean to spell `scepticism` this way?\nSuggest:\n  - Replace with: “skepticism”\n  - Replace with: “asceticism”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     484 | The horses, needless to say, were not mentioned again. Tom and Miss Baker, with\n         |                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~\n     485 | several feet of twilight between them, strolled back into the library, as if to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     486 | a vigil beside a perfectly tangible body, while, trying to look pleasantly\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     487 | interested and a little deaf, I followed Daisy around a chain of connecting\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     488 | verandas to the porch in front. In its deep gloom we sat down side by side on a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 50 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     514 | “I’ll show you how I’ve gotten to feel about—things. Well, she was less than an\n         | ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     529 | the whole evening had been a trick of some sort to exact a contributary emotion\n         |                                                            ^~~~~~~~~~~~ Did you mean to spell `contributary` this way?\n     530 | from me. I waited, and sure enough, in a moment she looked at me with an\nSuggest:\n  - Replace with: “contributory”\n  - Replace with: “contributor”\n  - Replace with: “contributors”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     529 | the whole evening had been a trick of some sort to exact a contributary emotion\n         |                                                            ^~~~~~~~~~~~ `contributary` should probably be written as `con tributary`.\n     530 | from me. I waited, and sure enough, in a moment she looked at me with an\nSuggest:\n  - Replace with: “con tributary”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     551 | “Jordan’s going to play in the tournament tomorrow,” explained Daisy, “over at\n     552 | Westchester.”\n         | ^~~~~~~~~~~ Did you mean to spell `Westchester` this way?\nSuggest:\n  - Replace with: “Westminster”\n  - Replace with: “Winchester”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     565 | “I will. Good night, Mr. Carraway. See you anon.”\n         |                          ^~~~~~~~ Did you mean to spell `Carraway` this way?\nSuggest:\n  - Replace with: “Caraway”\n  - Replace with: “Caraways”\n  - Replace with: “Castaway”\n\n\n\nLint:    Enhancement (31 priority)\nMessage: |\n     583 | here this summer. I think the home influence will be very good for her.”\n         |                                                      ^~~~~~~~~ Vocabulary enhancement: use `excellent` instead of `very good`\nSuggest:\n  - Replace with: “excellent”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     603 | square of light. As I started my motor Daisy peremptorily called: “Wait!\n         |                                                                   ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     628 | Already it was deep summer on roadhouse roofs and in front of wayside garages,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     629 | where new red gaspumps sat out in pools of light, and when I reached my estate\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     630 | at West Egg I ran the car under its shed and sat for a while on an abandoned\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     631 | grass roller in the yard. The wind had blown off, leaving a loud, bright night,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     628 | Already it was deep summer on roadhouse roofs and in front of wayside garages,\n     629 | where new red gaspumps sat out in pools of light, and when I reached my estate\n         |               ^~~~~~~~ Did you mean `gazumps`?\nSuggest:\n  - Replace with: “gazumps”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     628 | Already it was deep summer on roadhouse roofs and in front of wayside garages,\n     629 | where new red gaspumps sat out in pools of light, and when I reached my estate\n         |               ^~~~~~~~ `gaspumps` should probably be written as `gas pumps`.\nSuggest:\n  - Replace with: “gas pumps”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     633 | of the earth blew the frogs full of life. The silhouette of a moving cat wavered\n         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     634 | across the moonlight, and turning my head to watch it, I saw that I was not\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     635 | alone—fifty feet away a figure had emerged from the shadow of my neighbor’s\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     636 | mansion and was standing with his hands in his pockets regarding the silver\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     637 | pepper of the stars. Something in his leisurely movements and the secure\n         | ~~~~~~~~~~~~~~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     642 | do for an introduction. But I didn’t call to him, for he gave a sudden\n         |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     643 | intimation that he was content to be alone—he stretched out his arms toward the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     644 | dark water in a curious way, and, far as I was from him, I could have sworn he\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     645 | was trembling. Involuntarily I glanced seaward—and distinguished nothing except\n         | ~~~~~~~~~~~~~~ This sentence is 46 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     645 | was trembling. Involuntarily I glanced seaward—and distinguished nothing except\n     646 | a single green light, minute and far away, that might have been the end of a\n         |                       ^~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     654 | certain desolate area of land. This is a valley of ashes—a fantastic farm where\n         |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     655 | ashes grow like wheat into ridges and hills and grotesque gardens; where ashes\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     656 | take the forms of houses and chimneys and rising smoke and, finally, with a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     657 | transcendent effort, of ash-gray men, who move dimly and already crumbling\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     658 | through the powdery air. Occasionally a line of gray cars crawls along an\n         | ~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     658 | through the powdery air. Occasionally a line of gray cars crawls along an\n         |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     659 | invisible track, gives out a ghastly creak, and comes to rest, and immediately\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     660 | the ash-gray men swarm up with leaden spades and stir up an impenetrable cloud,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     661 | which screens their obscure operations from your sight.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     664 | it, you perceive, after a moment, the eyes of Doctor T. J. Eckleburg. The eyes\n         |                                                      ^~ Did you mean to spell `T.` this way?\nSuggest:\n  - Replace with: “Ta”\n  - Replace with: “Ti”\n  - Replace with: “To”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     664 | it, you perceive, after a moment, the eyes of Doctor T. J. Eckleburg. The eyes\n         |                                                         ^~ Did you mean to spell `J.` this way?\nSuggest:\n  - Replace with: “Jo”\n  - Replace with: “J”\n  - Replace with: “Jg”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     664 | it, you perceive, after a moment, the eyes of Doctor T. J. Eckleburg. The eyes\n         |                                                            ^~~~~~~~~ Did you mean to spell `Eckleburg` this way?\nSuggest:\n  - Replace with: “Excalibur”\n  - Replace with: “Vicksburg”\n  - Replace with: “Heckler”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     664 | it, you perceive, after a moment, the eyes of Doctor T. J. Eckleburg. The eyes\n     665 | of Doctor T. J. Eckleburg are blue and gigantic—their retinas are one yard high.\n         |           ^~ Did you mean to spell `T.` this way?\nSuggest:\n  - Replace with: “Ta”\n  - Replace with: “Ti”\n  - Replace with: “To”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     665 | of Doctor T. J. Eckleburg are blue and gigantic—their retinas are one yard high.\n         |              ^~ Did you mean to spell `J.` this way?\nSuggest:\n  - Replace with: “Jo”\n  - Replace with: “J”\n  - Replace with: “Jg”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     665 | of Doctor T. J. Eckleburg are blue and gigantic—their retinas are one yard high.\n         |                 ^~~~~~~~~ Did you mean to spell `Eckleburg` this way?\nSuggest:\n  - Replace with: “Excalibur”\n  - Replace with: “Vicksburg”\n  - Replace with: “Heckler”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     673 | The valley of ashes is bounded on one side by a small foul river, and, when the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     674 | drawbridge is up to let barges through, the passengers on waiting trains can\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     675 | stare at the dismal scene for as long as half an hour. There is always a halt\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     683 | up to New York with Tom on the train one afternoon, and when we stopped by the\n     684 | ashheaps he jumped to his feet and, taking hold of my elbow, literally forced me\n         | ^~~~~~~~ Did you mean to spell `ashheaps` this way?\nSuggest:\n  - Replace with: “asthma's”\n  - Replace with: “airheads”\n  - Replace with: “ashcans”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n     683 | up to New York with Tom on the train one afternoon, and when we stopped by the\n     684 | ashheaps he jumped to his feet and, taking hold of my elbow, literally forced me\n         | ^~~~~~~~ `ashheaps` should probably be written as `ash heaps`.\nSuggest:\n  - Replace with: “ash heaps”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     694 | hundred yards along the road under Doctor Eckleburg’s persistent stare. The only\n         |                                           ^~~~~~~~~~~ Did you mean to spell `Eckleburg’s` this way?\nSuggest:\n  - Replace with: “Excalibur's”\n  - Replace with: “Vicksburg's”\n  - Replace with: “Heckler's”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n     695 | building in sight was a small block of yellow brick sitting on the edge of the\n     696 | waste land, a sort of compact Main Street ministering to it, and contiguous to\n         | ^~~~~~~~~~ Did you mean the closed compound noun “wasteland”?\nSuggest:\n  - Replace with: “wasteland”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     699 | garage—Repairs. George B. Wilson. Cars bought and sold.—and I followed Tom\n         |                        ^~ Did you mean to spell `B.` this way?\nSuggest:\n  - Replace with: “Be”\n  - Replace with: “Bi”\n  - Replace with: “Bu”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     703 | dust-covered wreck of a Ford which crouched in a dim corner. It had occurred to\n         |                                                              ^~~~~~~~~~~~~~~~~~~\n     704 | me that this shadow of a garage must be a blind, and that sumptuous and romantic\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     705 | apartments were concealed overhead, when the proprietor himself appeared in the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     706 | door of an office, wiping his hands on a piece of waste. He was a blond,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Style (63 priority)\nMessage: |\n     703 | dust-covered wreck of a Ford which crouched in a dim corner. It had occurred to\n     704 | me that this shadow of a garage must be a blind, and that sumptuous and romantic\n         |              ^~~~~~~~~~~ The word `of` is not needed here.\nSuggest:\n  - Replace with: “shadow a”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n     711 | ‘‘How’s business?”\n         |                  ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     730 | beauty, but there was an immediately perceptible vitality about her as if the\n     731 | nerves of her body were continually smouldering. She smiled slowly and, walking\n         |                                     ^~~~~~~~~~~ Did you mean to spell `smouldering` this way?\nSuggest:\n  - Replace with: “smoldering”\n  - Replace with: “shouldering”\n  - Replace with: “soldering”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     756 | “Terrible place, isn’t it,” said Tom, exchanging a frown with Doctor Eckleburg.\n         |                                                                      ^~~~~~~~~ Did you mean to spell `Eckleburg` this way?\nSuggest:\n  - Replace with: “Excalibur”\n  - Replace with: “Vicksburg”\n  - Replace with: “Heckler”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     768 | together, for Mrs. Wilson sat discreetly in another car. Tom deferred that much\n     769 | to the sensibilities of those East Eggers who might be on the train.\n         |                                    ^~~~~~ Did you mean to spell `Eggers` this way?\nSuggest:\n  - Replace with: “Edgers”\n  - Replace with: “Eggo's”\n  - Replace with: “Edge's”\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n     775 | Up-stairs, in the solemn echoing drive she let four taxicabs drive away before\n         | ^~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “Upstairs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     784 | We backed up to a gray old man who bore an absurd resemblance to John D.\n         |                                                                       ^~ Did you mean to spell `D.` this way?\nSuggest:\n  - Replace with: “Do”\n  - Replace with: “DA”\n  - Replace with: “Di”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n     819 | We drove over to Fifth Avenue, warm and soft, almost pastoral, on the summer\n         |                                ^~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     825 | “No, you don’t,” interposed Tom quickly. “Myrtle’ll be hurt if you don’t come up\n         |                                           ^~~~~~~~~ Did you mean `Myrtle's`?\n     826 | to the apartment. Won’t you, Myrtle?”\nSuggest:\n  - Replace with: “Myrtle's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     838 | “I’m going to have the McKees come up,” she announced as we rose in the\n         |                        ^~~~~~ Did you mean to spell `McKees` this way?\nSuggest:\n  - Replace with: “McKee's”\n  - Replace with: “McKee”\n  - Replace with: “McGee's”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     850 | Wilson was first concerned with the dog. A reluctant elevator-boy went for a box\n         |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     851 | full of straw and some milk, to which he added on his own initiative a tin of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     852 | large, hard dog-biscuits— one of which decomposed apathetically in the saucer of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     853 | milk all afternoon. Meanwhile Tom brought out a bottle of whiskey from a locked\n         | ~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Punctuation (31 priority)\nMessage: |\n     853 | milk all afternoon. Meanwhile Tom brought out a bottle of whiskey from a locked\n         |                     ^~~~~~~~~ Discourse markers at the beginning of a sentence should be followed by a comma.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n     860 | and I went out to buy some at the drugstore on the corner. When I came back they\n         |                                                            ^~~~~~~~~~~~~~~~~~~~~~\n     861 | had both disappeared, so I sat down discreetly in the living-room and read a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     862 | chapter of “Simon Called Peter”—either it was terrible stuff or the whiskey\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     863 | distorted things, because it didn’t make any sense to me.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n     877 | immoderately, repeated my question aloud, and told me she lived with a girl\n         |                                                                        ^~~~~\n     878 | friend at a hotel.\n         | ~~~~~~ Did you mean the closed compound noun “girlfriend”?\nSuggest:\n  - Replace with: “girlfriend”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n     881 | there was a white spot of lather on his cheekbone, and he was most respectful in\n     882 | his greeting to every one in the room. He informed me that he was in the\n         |                 ^~~~~~~~~ Did you mean the closed compound `everyone`?\nSuggest:\n  - Replace with: “everyone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     900 | last week to look at my feet, and when she gave me the bill you’d of thought she\n     901 | had my appendicitus out.”\n         |        ^~~~~~~~~~~~ Did you mean `appendicitis`?\nSuggest:\n  - Replace with: “appendicitis”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     905 | “Mrs. Eberhardt. She goes around looking at people’s feet in their own homes.”\n         |       ^~~~~~~~~ Did you mean to spell `Eberhardt` this way?\nSuggest:\n  - Replace with: “Earhart”\n  - Replace with: “Earnhardt”\n  - Replace with: “Erhard”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     923 | “I should change the light,” he said after a moment. “I’d like to bring out the\n     924 | modelling of the features. And I’d try to get hold of all the back hair.”\n         | ^~~~~~~~~ Did you mean to spell `modelling` this way?\nSuggest:\n  - Replace with: “modeling”\n  - Replace with: “modelings”\n  - Replace with: “yodeling”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     931 | “You McKees have something to drink,” he said. “Get some more ice and mineral\n         |      ^~~~~~ Did you mean to spell `McKees` this way?\nSuggest:\n  - Replace with: “McKee's”\n  - Replace with: “McKee”\n  - Replace with: “McGee's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     950 | “Two studies. One of them I call ‘Montauk Point—The Gulls,’ and the other I call\n         |                                   ^~~~~~~ Did you mean to spell `Montauk` this way?\n     951 | ‘Montauk Point—The Sea.’”\nSuggest:\n  - Replace with: “Montage”\n  - Replace with: “Montague”\n  - Replace with: “Montana”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     950 | “Two studies. One of them I call ‘Montauk Point—The Gulls,’ and the other I call\n     951 | ‘Montauk Point—The Sea.’”\n         |  ^~~~~~~ Did you mean to spell `Montauk` this way?\nSuggest:\n  - Replace with: “Montage”\n  - Replace with: “Montague”\n  - Replace with: “Montana”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n     989 | studies of him.” His lips moved silently for a moment as he invented. “‘George\n     990 | B. Wilson at the Gasoline Pump,’ or something like that.”\n         | ^~ Did you mean to spell `B.` this way?\nSuggest:\n  - Replace with: “Be”\n  - Replace with: “Bi”\n  - Replace with: “Bu”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n    1017 | “It’d be more discreet to go to Europe.”\n         |          ^~~~~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\nSuggest:\n  - Replace with: “discreeter”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1029 | over twelve hundred dollars when we started, but we got gyped out of it all in\n         |                                                         ^~~~~ Did you mean to spell `gyped` this way?\n    1030 | two days in the private rooms. We had an awful time getting back, I can tell\nSuggest:\n  - Replace with: “gaped”\n  - Replace with: “gypped”\n  - Replace with: “gyved”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1037 | “I almost made a mistake, too,” she declared vigorously. “I almost married a\n    1038 | little kyke who’d been after me for years. I knew he was below me. Everybody\n         |        ^~~~ Did you mean to spell `kyke` this way?\nSuggest:\n  - Replace with: “kike”\n  - Replace with: “dyke”\n  - Replace with: “tyke”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n    1060 | I never was any more crazy about him than I was about that man there.”\n         |                 ^~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\nSuggest:\n  - Replace with: “crazier”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    1062 | She pointed suddenly at me, and every one looked at me accusingly. I tried to\n         |                                 ^~~~~~~~~ Did you mean the closed compound `everyone`?\nSuggest:\n  - Replace with: “everyone”\n\n\n\nLint:    Repetition (127 priority)\nMessage: |\n    1065 | “The only crazy I was was when I married him. I knew right away I made a\n         |                   ^~~~~~~ Did you mean to repeat this word?\nSuggest:\n  - Replace with: “was”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1078 | supper in themselves. I wanted to get out and walk eastward toward the park\n         |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1079 | through the soft twilight, but each time I tried to go I became entangled in\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1080 | some wild, strident argument which pulled me back, as if with ropes, into my\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1081 | chair. Yet high over the city our line of yellow windows must have contributed\n         | ~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1122 | Daisy! Dai———”\n         |        ^~~ Did you mean to spell `Dai` this way?\nSuggest:\n  - Replace with: “Dab”\n  - Replace with: “Dad”\n  - Replace with: “Dag”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1128 | awoke from his doze and started in a daze toward the door. When he had gone half\n         |                                                            ^~~~~~~~~~~~~~~~~~~~~~\n    1129 | way he turned around and stared at the scene—his wife and Catherine scolding and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1130 | consoling as they stumbled here and there among the crowded furniture with\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1131 | articles of aid, and the despairing figure on the couch, bleeding fluently, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1132 | trying to spread a copy of Town Tattle over the tapestry scenes of Versailles.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 59 words long.\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    1152 | “Beauty and the Beast . . . Loneliness . . . Old Grocery Horse . . . Brook’n\n         |                      ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    1152 | “Beauty and the Beast . . . Loneliness . . . Old Grocery Horse . . . Brook’n\n         |                                       ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    1152 | “Beauty and the Beast . . . Loneliness . . . Old Grocery Horse . . . Brook’n\n         |                                                               ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1152 | “Beauty and the Beast . . . Loneliness . . . Old Grocery Horse . . . Brook’n\n         |                                                                      ^~~~~~~ Did you mean to spell `Brook’n` this way?\n    1153 | Bridge . . .” Then I was lying half asleep in the cold lower level of the\nSuggest:\n  - Replace with: “Brook's”\n  - Replace with: “Brock's”\n  - Replace with: “Brooke's”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    1152 | “Beauty and the Beast . . . Loneliness . . . Old Grocery Horse . . . Brook’n\n    1153 | Bridge . . .” Then I was lying half asleep in the cold lower level of the\n         |       ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1161 | champagne and the stars. At high tide in the afternoon I watched his guests\n         |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1162 | diving from the tower of his raft, or taking the sun on the hot sand of his\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1163 | beach while his two motor-boats slit the waters of the Sound, drawing aquaplanes\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1164 | over cataracts of foam. On week-ends his Rolls-Royce became an omnibus, bearing\n         | ~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    1171 | Every Friday five crates of oranges and lemons arrived from a fruiterer in New\n         |                                                                            ^~~~\n    1172 | York—every Monday these same oranges and lemons left his back door in a pyramid\n         | ~~~~ Ensure proper capitalization of notable places that are significant regional centers, travel destinations, or have international importance.\nSuggest:\n  - Replace with: “New York”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1172 | York—every Monday these same oranges and lemons left his back door in a pyramid\n    1173 | of pulpless halves. There was a machine in the kitchen which could extract the\n         |    ^~~~~~~~ Did you mean to spell `pulpless` this way?\nSuggest:\n  - Replace with: “purple's”\n  - Replace with: “pullers”\n  - Replace with: “pullets”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    1172 | York—every Monday these same oranges and lemons left his back door in a pyramid\n    1173 | of pulpless halves. There was a machine in the kitchen which could extract the\n         |    ^~~~~~~~ `pulpless` should probably be written as `pulp less`.\nSuggest:\n  - Replace with: “pulp less”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1179 | enormous garden. On buffet tables, garnished with glistening hors-d’œuvre,\n         |                                                              ^~~~ Did you mean to spell `hors` this way?\n    1180 | spiced baked hams crowded against salads of harlequin designs and pastry pigs\nSuggest:\n  - Replace with: “hours”\n  - Replace with: “ho's”\n  - Replace with: “hers”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1179 | enormous garden. On buffet tables, garnished with glistening hors-d’œuvre,\n         |                                                                   ^~~~~~~ Did you mean to spell `d’œuvre` this way?\n    1180 | spiced baked hams crowded against salads of harlequin designs and pastry pigs\nSuggest:\n  - Replace with: “demure”\n  - Replace with: “oeuvre”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1186 | By seven o’clock the orchestra has arrived, no thin five-piece affair, but a\n    1187 | whole pitful of oboes and trombones and saxophones and viols and cornets and\n         |       ^~~~~~ Did you mean to spell `pitful` this way?\nSuggest:\n  - Replace with: “pitiful”\n  - Replace with: “potful”\n  - Replace with: “painful”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1188 | piccolos, and low and high drums. The last swimmers have come in from the beach\n         |                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1189 | now and are dressing up-stairs; the cars from New York are parked five deep in\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1190 | the drive, and already the halls and salons and verandas are gaudy with primary\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1191 | colors, and hair bobbed in strange new ways, and shawls beyond the dreams of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1192 | Castile. The bar is in full swing, and floating rounds of cocktails permeate the\n         | ~~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n    1188 | piccolos, and low and high drums. The last swimmers have come in from the beach\n    1189 | now and are dressing up-stairs; the cars from New York are parked five deep in\n         |                      ^~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “upstairs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1191 | colors, and hair bobbed in strange new ways, and shawls beyond the dreams of\n    1192 | Castile. The bar is in full swing, and floating rounds of cocktails permeate the\n         | ^~~~~~~ Did you mean to spell `Castile` this way?\nSuggest:\n  - Replace with: “Castle”\n  - Replace with: “Captive”\n  - Replace with: “Caste”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1192 | Castile. The bar is in full swing, and floating rounds of cocktails permeate the\n         |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1193 | garden outside, until the air is alive with chatter and laughter, and casual\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1194 | innuendo and introductions forgotten on the spot, and enthusiastic meetings\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1195 | between women who never knew each other’s names.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1200 | tipped out at a cheerful word. The groups change more swiftly, swell with new\n         |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1201 | arrivals, dissolve and form in the same breath; already there are wanderers,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1202 | confident girls who weave here and there among the stouter and more stable,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1203 | become for a sharp, joyous moment the centre of a group, and then, excited with\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1204 | triumph, glide on through the sea-change of faces and voices and color under the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1205 | constantly changing light.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 66 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    1200 | tipped out at a cheerful word. The groups change more swiftly, swell with new\n    1201 | arrivals, dissolve and form in the same breath; already there are wanderers,\n         |           ^~~~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n    1202 | confident girls who weave here and there among the stouter and more stable,\n         |                                                                ^~~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\n    1203 | become for a sharp, joyous moment the centre of a group, and then, excited with\nSuggest:\n  - Replace with: “stabler”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1202 | confident girls who weave here and there among the stouter and more stable,\n    1203 | become for a sharp, joyous moment the centre of a group, and then, excited with\n         |                                       ^~~~~~ Did you mean to spell `centre` this way?\n    1204 | triumph, glide on through the sea-change of faces and voices and color under the\nSuggest:\n  - Replace with: “center”\n  - Replace with: “cent's”\n  - Replace with: “censure”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1223 | I had been actually invited. A chauffeur in a uniform of robin’s-egg blue\n         |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1224 | crossed my lawn early that Saturday morning with a surprisingly formal note from\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1225 | his employer: the honor would be entirely Gatsby’s, it said, if I would attend\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1226 | his “little party” that night. He had seen me several times, and had intended to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1230 | Dressed up in white flannels I went over to his lawn a little after seven, and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1231 | wandered around rather ill at ease among swirls and eddies of people I didn’t\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1232 | know—though here and there was a face I had noticed on the commuting train. I\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1240 | As soon as I arrived I made an attempt to find my host, but the two or three\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1241 | people of whom I asked his whereabouts stared at me in such an amazed way, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1242 | denied so vehemently any knowledge of his movements, that I slunk off in the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1243 | direction of the cocktail table—the only place in the garden where a single man\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1244 | could linger without looking purposeless and alone.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 70 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1246 | I was on my way to get roaring drunk from sheer embarrassment when Jordan Baker\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1247 | came out of the house and stood at the head of the marble steps, leaning a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1248 | little backward and looking with contemptuous interest down into the garden.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    1250 | Welcome or not, I found it necessary to attach myself to some one before I\n         |                                                          ^~~~~~~~ Did you mean the closed compound `someone`?\n    1251 | should begin to address cordial remarks to the passers-by.\nSuggest:\n  - Replace with: “someone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1287 | and address—inside of a week I got a package from Croirier’s with a new evening\n         |                                                   ^~~~~~~~~~ Did you mean to spell `Croirier’s` this way?\n    1288 | gown in it.”\nSuggest:\n  - Replace with: “Courier's”\n  - Replace with: “Crosier's”\n  - Replace with: “Croupier's”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    1307 | A thrill passed over all of us. The three Mr. Mumbles bent forward and listened\n         |                 ^~~~~~~~ Did you mean the closed compound `overall`?\nSuggest:\n  - Replace with: “overall”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1310 | “I don’t think it’s so much that,” argued Lucille sceptically; “it’s more that\n         |                                                   ^~~~~~~~~~~ Did you mean to spell `sceptically` this way?\nSuggest:\n  - Replace with: “skeptically”\n  - Replace with: “scenically”\n  - Replace with: “ascetically”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1336 | West Egg, and carefully on guard against its spectroscopic gayety.\n         |                                                            ^~~~~~ Did you mean to spell `gayety` this way?\nSuggest:\n  - Replace with: “gaiety”\n  - Replace with: “gamely”\n  - Replace with: “gamete”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1347 | chance we tried an important-looking door, and walked into a high Gothic\n    1348 | library, panelled with carved English oak, and probably transported complete\n         |          ^~~~~~~~ Did you mean to spell `panelled` this way?\nSuggest:\n  - Replace with: “paneled”\n  - Replace with: “palled”\n  - Replace with: “Janelle”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1373 | Taking our scepticism for granted, he rushed to the bookcases and returned with\n         |            ^~~~~~~~~~ Did you mean to spell `scepticism` this way?\nSuggest:\n  - Replace with: “skepticism”\n  - Replace with: “asceticism”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1373 | Taking our scepticism for granted, he rushed to the bookcases and returned with\n    1374 | Volume One of the “Stoddard Lectures.”\n         |                    ^~~~~~~~ Did you mean to spell `Stoddard` this way?\nSuggest:\n  - Replace with: “Standard”\n  - Replace with: “Stoppard”\n  - Replace with: “Goddard”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1376 | “See!” he cried triumphantly. “It’s a bona-fide piece of printed matter. It\n         |                                       ^~~~ Did you mean to spell `bona` this way?\nSuggest:\n  - Replace with: “boa”\n  - Replace with: “bond”\n  - Replace with: “bone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1376 | “See!” he cried triumphantly. “It’s a bona-fide piece of printed matter. It\n         |                                            ^~~~ Did you mean to spell `fide` this way?\nSuggest:\n  - Replace with: “fade”\n  - Replace with: “fife”\n  - Replace with: “file”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1377 | fooled me. This fella’s a regular Belasco. It’s a triumph. What thoroughness!\n         |                 ^~~~~~~ Did you mean to spell `fella’s` this way?\nSuggest:\n  - Replace with: “fellas”\n  - Replace with: “fell's”\n  - Replace with: “Bella's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1377 | fooled me. This fella’s a regular Belasco. It’s a triumph. What thoroughness!\n         |                                   ^~~~~~~ Did you mean to spell `Belasco` this way?\nSuggest:\n  - Replace with: “Bela's”\n  - Replace with: “Belau's”\n  - Replace with: “Balance”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1389 | “I was brought by a woman named Roosevelt,” he continued. “Mrs. Claud Roosevelt.\n         |                                                                 ^~~~~ Did you mean to spell `Claud` this way?\nSuggest:\n  - Replace with: “Clad”\n  - Replace with: “Cloud”\n  - Replace with: “Claude”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1402 | There was dancing now on the canvas in the garden; old men pushing young girls\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1403 | backward in eternal graceless circles, superior couples holding each other\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1404 | tortuously, fashionably, and keeping in the corners—and a great number of single\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1405 | girls dancing individualistically or relieving the orchestra for a moment of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1406 | burden of the banjo or the traps. By midnight the hilarity had increased. A\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 57 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    1408 | jazz, and between the numbers people were doing ‘‘stunts” all over the garden,\n         |                                                         ^ This quote has no termination.\n    1409 | while happy, vacuous bursts of laughter rose toward the summer sky. A pair of\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1413 | trembling a little to the stiff, tinny drip of the banjoes on the lawn.\n         |                                                    ^~~~~~~ Did you mean to spell `banjoes` this way?\nSuggest:\n  - Replace with: “banjo's”\n  - Replace with: “banjos”\n  - Replace with: “bandies”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    1413 | trembling a little to the stiff, tinny drip of the banjoes on the lawn.\n         |                                                    ^~~~~~~ `banjoes` should probably be written as `banjo es`.\nSuggest:\n  - Replace with: “banjo es”\n\n\n\nLint:    Enhancement (31 priority)\nMessage: |\n    1457 | “I thought you knew, old sport. I’m afraid I’m not a very good host.”\n         |                                                      ^~~~~~~~~ Vocabulary enhancement: use `excellent` instead of `very good`\nSuggest:\n  - Replace with: “excellent”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1463 | prejudice in your favor. It understood you just so far as you wanted to be\n         |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1464 | understood, believed in you as you would like to believe in yourself, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1465 | assured you that it had precisely the impression of you that, at your best, you\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1466 | hoped to convey. Precisely at that point it vanished—and I was looking at an\n         | ~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    1466 | hoped to convey. Precisely at that point it vanished—and I was looking at an\n    1467 | elegant young rough-neck, a year or two over thirty, whose elaborate formality\n         |                             ^~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n    1514 | “Ladies and gentlemen,” he cried. “At the request of Mr. Gatsby we are going to\n    1515 | play for you Mr. Vladmir Tostoff’s latest work, which attracted so much\n         |          ^~~ The possessive version of this word is more common in this context.\nSuggest:\n  - Replace with: “your”\n  - Replace with: “you're a”\n  - Replace with: “you're an”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1515 | play for you Mr. Vladmir Tostoff’s latest work, which attracted so much\n         |                  ^~~~~~~ Did you mean `Vladimir`?\nSuggest:\n  - Replace with: “Vladimir”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1515 | play for you Mr. Vladmir Tostoff’s latest work, which attracted so much\n         |                          ^~~~~~~~~ Did you mean `Castoff's`?\nSuggest:\n  - Replace with: “Castoff's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1520 | “The piece is known,” he concluded lustily, “as ‘Vladmir Tostoff’s Jazz History\n         |                                                  ^~~~~~~ Did you mean `Vladimir`?\n    1521 | of the World.’”\nSuggest:\n  - Replace with: “Vladimir”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1520 | “The piece is known,” he concluded lustily, “as ‘Vladmir Tostoff’s Jazz History\n         |                                                          ^~~~~~~~~ Did you mean `Castoff's`?\n    1521 | of the World.’”\nSuggest:\n  - Replace with: “Castoff's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1523 | The nature of Mr. Tostoff’s composition eluded me, because just as it began my\n         |                   ^~~~~~~~~ Did you mean `Castoff's`?\nSuggest:\n  - Replace with: “Castoff's”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n    1528 | drinking helped to set him off from his guests, for it seemed to me that he grew\n    1529 | more correct as the fraternal hilarity increased. When the “Jazz History of the\n         | ^~~~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\nSuggest:\n  - Replace with: “correcter”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1529 | more correct as the fraternal hilarity increased. When the “Jazz History of the\n         |                                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1530 | World” was over, girls were putting their heads on men’s shoulders in a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1531 | puppyish, convivial way, girls were swooning backward playfully into men’s arms,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1532 | even into groups, knowing that some one would arrest their falls—but no one\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1533 | swooned backward on Gatsby, and no French bob touched Gatsby’s shoulder, and no\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1534 | singing quartets were formed for Gatsby’s head for one link.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 67 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1530 | World” was over, girls were putting their heads on men’s shoulders in a\n    1531 | puppyish, convivial way, girls were swooning backward playfully into men’s arms,\n         | ^~~~~~~~ Did you mean to spell `puppyish` this way?\nSuggest:\n  - Replace with: “puppy's”\n  - Replace with: “purplish”\n  - Replace with: “uppish”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    1531 | puppyish, convivial way, girls were swooning backward playfully into men’s arms,\n    1532 | even into groups, knowing that some one would arrest their falls—but no one\n         |                                ^~~~~~~~ Did you mean the closed compound `someone`?\nSuggest:\n  - Replace with: “someone”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1574 | rent asunder by dissension. One of the men was talking with curious intensity to\n         |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1575 | a young actress, and his wife, after attempting to laugh at the situation in a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1576 | dignified and indifferent way, broke down entirely and resorted to flank\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1577 | attacks—at intervals she appeared suddenly at his side like an angry diamond,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1578 | and hissed: “You promised!” into his ear.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    1612 | “It was . . . simply amazing,” she repeated abstractedly. “But I swore I\n         |        ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    1612 | “It was . . . simply amazing,” she repeated abstractedly. “But I swore I\n         |               ^~~~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Simply”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1615 | Sigourney Howard. . . . My aunt. . . .” She was hurrying off as she talked—her\n         | ^~~~~~~~~ Did you mean to spell `Sigourney` this way?\nSuggest:\n  - Replace with: “Sojourned”\n  - Replace with: “Sojourner”\n  - Replace with: “Gurney”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1642 | scene. In the ditch beside the road, right side up, but violently shorn of one\n         |                                                                   ^~~~~ Did you mean to spell `shorn` this way?\n    1643 | wheel, rested a new coupé which had left Gatsby’s drive not two minutes before.\nSuggest:\n  - Replace with: “shore”\n  - Replace with: “short”\n  - Replace with: “shown”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1642 | scene. In the ditch beside the road, right side up, but violently shorn of one\n    1643 | wheel, rested a new coupé which had left Gatsby’s drive not two minutes before.\n         |                     ^~~~~ Did you mean to spell `coupé` this way?\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n    1667 | “Don’t ask me,” said Owl Eyes, washing his hands of the whole matter. “I know\n    1668 | very little about driving—next to nothing. It happened, and that’s all I know.”\n         |                                ^~ Use `too` here to mean ‘also’ or an excessive degree.\nSuggest:\n  - Replace with: “too”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1683 | The shock that followed this declaration found voice in a sustained “Ah-h-h!” as\n    1684 | the door of the coupé swung slowly open. The crowd—it was now a crowd—stepped\n         |                 ^~~~~ Did you mean to spell `coupé` this way?\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1693 | “Wha’s matter?” he inquired calmly. “Did we run outa gas?”\n         |  ^~~~~ Did you mean to spell `Wha’s` this way?\nSuggest:\n  - Replace with: “Wham's”\n  - Replace with: “What's”\n  - Replace with: “Who's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1693 | “Wha’s matter?” he inquired calmly. “Did we run outa gas?”\n         |                                                 ^~~~ Did you mean to spell `outa` this way?\nSuggest:\n  - Replace with: “out”\n  - Replace with: “outta”\n  - Replace with: “outs”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    1693 | “Wha’s matter?” he inquired calmly. “Did we run outa gas?”\n         |                                                 ^~~~ `outa` should probably be written as `out a`.\nSuggest:\n  - Replace with: “out a”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    1701 | “It came off,” some one explained.\n         |                ^~~~~~~~ Did you mean the closed compound `someone`?\nSuggest:\n  - Replace with: “someone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1710 | “Wonder’ff tell me where there’s a gas’line station?”\n         |  ^~~~~~~~~ Did you mean `Wonder's`?\nSuggest:\n  - Replace with: “Wonder's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1710 | “Wonder’ff tell me where there’s a gas’line station?”\n         |                                    ^~~~~~~~ Did you mean to spell `gas’line` this way?\nSuggest:\n  - Replace with: “gasoline”\n  - Replace with: “baseline”\n  - Replace with: “Vaseline”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1740 | potatoes and coffee. I even had a short affair with a girl who lived in Jersey\n         |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1741 | City and worked in the accounting department, but her brother began throwing\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1742 | mean looks in my direction, so when she went on her vacation in July I let it\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1743 | blow quietly away.\n         | ~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n    1745 | I took dinner usually at the Yale Club—for some reason it was the gloomiest\n    1746 | event of my day—and then I went up-stairs to the library and studied investments\n         |                                 ^~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\n    1747 | and securities for a conscientious hour. There were generally a few rioters\nSuggest:\n  - Replace with: “upstairs”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1759 | darkness. At the enchanted metropolitan twilight I felt a haunting loneliness\n         |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1760 | sometimes, and felt it in others—poor young clerks who loitered in front of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1761 | windows waiting until it was time for a solitary restaurant dinner—young clerks\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1762 | in the dusk, wasting the most poignant moments of night and life.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1764 | Again at eight o’clock, when the dark lanes of the Forties were lined five deep\n    1765 | with throbbing taxicabs, bound for the theatre district, I felt a sinking in my\n         |                                        ^~~~~~~ Did you mean to spell `theatre` this way?\n    1766 | heart. Forms leaned together in the taxis as they waited, and voices sang, and\nSuggest:\n  - Replace with: “theater”\n  - Replace with: “they're”\n  - Replace with: “there”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1768 | unintelligible circles inside. Imagining that I, too, was hurrying toward gayety\n         |                                                                           ^~~~~~ Did you mean to spell `gayety` this way?\n    1769 | and sharing their intimate excitement, I wished them well.\nSuggest:\n  - Replace with: “gaiety”\n  - Replace with: “gamely”\n  - Replace with: “gamete”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    1772 | again. At first I was flattered to go places with her, because she was a golf\n    1773 | champion, and every one knew her name. Then it was something more. I wasn’t\n         |               ^~~~~~~~~ Did you mean the closed compound `everyone`?\nSuggest:\n  - Replace with: “everyone”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1777 | found what it was. When we were on a house-party together up in Warwick, she\n         |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1778 | left a borrowed car out in the rain with the top down, and then lied about\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1779 | it—and suddenly I remembered the story about her that had eluded me that night\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1780 | at Daisy’s. At her first big golf tournament there was a row that nearly reached\n         | ~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n    1781 | the newspapers—a suggestion that she had moved her ball from a bad lie in the\n    1782 | semi-final round. The thing approached the proportions of a scandal—then died\n         | ^~~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “semifinal”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1789 | thought impossible. She was incurably dishonest. She wasn’t able to endure being\n         |                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1790 | at a disadvantage and, given this unwillingness, I suppose she had begun dealing\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1791 | in subterfuges when she was very young in order to keep that cool, insolent\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1792 | smile turned to the world and yet satisfy the demands of her hard, jaunty body.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    Style (127 priority)\nMessage: |\n    1800 | “You’re a rotten driver,” I protested. “Either you ought to be more careful, or\n         |                                                                ^~~~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\n    1801 | you oughtn’t to drive at all.”\nSuggest:\n  - Replace with: “carefuller”\n\n\n\nLint:    Punctuation (31 priority)\nMessage: |\n    1824 | perspiration appeared on her upper lip. Nevertheless there was a vague\n         |                                         ^~~~~~~~~~~~ Discourse markers at the beginning of a sentence should be followed by a comma.\n    1825 | understanding that had to be tactfully broken off before I was free.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    1827 | Every one suspects himself of at least one of the cardinal virtues, and this is\n         | ^~~~~~~~~ Did you mean the closed compound `everyone`?\nSuggest:\n  - Replace with: “Everyone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1837 | cocktails and his flowers. “One time he killed a man who had found out that he\n    1838 | was nephew to Von Hindenburg and second cousin to the devil. Reach me a rose,\n         |               ^~~ Did you mean to spell `Von` this way?\nSuggest:\n  - Replace with: “Van”\n  - Replace with: “Vol”\n  - Replace with: “Vow”\n\n\n\nLint:    Grammar (31 priority)\nMessage: |\n    1839 | honey, and pour me a last drop into that there crystal glass.”\n         |                                          ^~~~~ Did you mean `their`?\nSuggest:\n  - Replace with: “their”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1848 | From East Egg, then, came the Chester Beckers and the Leeches, and a man named\n         |                                       ^~~~~~~ Did you mean to spell `Beckers` this way?\n    1849 | Bunsen, whom I knew at Yale, and Doctor Webster Civet, who was drowned last\nSuggest:\n  - Replace with: “Becker's”\n  - Replace with: “Backers”\n  - Replace with: “Beakers”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1850 | summer up in Maine. And the Hornbeams and the Willie Voltaires, and a whole clan\n         |                             ^~~~~~~~~ Did you mean to spell `Hornbeams` this way?\nSuggest:\n  - Replace with: “Hornbeam”\n  - Replace with: “Moonbeams”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1850 | summer up in Maine. And the Hornbeams and the Willie Voltaires, and a whole clan\n         |                                                      ^~~~~~~~~ Did you mean to spell `Voltaires` this way?\n    1851 | named Blackbuck, who always gathered in a corner and flipped up their noses like\nSuggest:\n  - Replace with: “Voltaire's”\n  - Replace with: “Voltaire”\n  - Replace with: “Voltages”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1850 | summer up in Maine. And the Hornbeams and the Willie Voltaires, and a whole clan\n    1851 | named Blackbuck, who always gathered in a corner and flipped up their noses like\n         |       ^~~~~~~~~ Did you mean to spell `Blackbuck` this way?\nSuggest:\n  - Replace with: “Blackjack”\n  - Replace with: “Blackburn”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1852 | goats at whosoever came near. And the Ismays and the Chrysties (or rather Hubert\n         |                                       ^~~~~~ Did you mean to spell `Ismays` this way?\n    1853 | Auerbach and Mr. Chrystie’s wife), and Edgar Beaver, whose hair, they say,\nSuggest:\n  - Replace with: “Irma's”\n  - Replace with: “Ism's”\n  - Replace with: “Dismays”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1852 | goats at whosoever came near. And the Ismays and the Chrysties (or rather Hubert\n         |                                                      ^~~~~~~~~ Did you mean to spell `Chrysties` this way?\n    1853 | Auerbach and Mr. Chrystie’s wife), and Edgar Beaver, whose hair, they say,\nSuggest:\n  - Replace with: “Christi's”\n  - Replace with: “Christie's”\n  - Replace with: “Christie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1852 | goats at whosoever came near. And the Ismays and the Chrysties (or rather Hubert\n    1853 | Auerbach and Mr. Chrystie’s wife), and Edgar Beaver, whose hair, they say,\n         | ^~~~~~~~ Did you mean to spell `Auerbach` this way?\nSuggest:\n  - Replace with: “Approach”\n  - Replace with: “Acerbate”\n  - Replace with: “Acerbic”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1853 | Auerbach and Mr. Chrystie’s wife), and Edgar Beaver, whose hair, they say,\n         |                  ^~~~~~~~~~ Did you mean to spell `Chrystie’s` this way?\nSuggest:\n  - Replace with: “Christie's”\n  - Replace with: “Christi's”\n  - Replace with: “Christine's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1857 | knickerbockers, and had a fight with a bum named Etty in the garden. From\n         |                                                  ^~~~ Did you mean to spell `Etty` this way?\nSuggest:\n  - Replace with: “Etta”\n  - Replace with: “Ethyl”\n  - Replace with: “Jetty”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1857 | knickerbockers, and had a fight with a bum named Etty in the garden. From\n    1858 | farther out on the Island came the Cheadles and the O. R. P. Schraeders, and the\n         |                                    ^~~~~~~~ Did you mean to spell `Cheadles` this way?\nSuggest:\n  - Replace with: “Charles”\n  - Replace with: “Cradles”\n  - Replace with: “Headless”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1858 | farther out on the Island came the Cheadles and the O. R. P. Schraeders, and the\n         |                                                     ^~ Did you mean to spell `O.` this way?\nSuggest:\n  - Replace with: “Of”\n  - Replace with: “Oh”\n  - Replace with: “Oi”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1858 | farther out on the Island came the Cheadles and the O. R. P. Schraeders, and the\n         |                                                        ^~ Did you mean to spell `R.` this way?\nSuggest:\n  - Replace with: “RI”\n  - Replace with: “Ra”\n  - Replace with: “Ru”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1858 | farther out on the Island came the Cheadles and the O. R. P. Schraeders, and the\n         |                                                           ^~ Did you mean to spell `P.` this way?\nSuggest:\n  - Replace with: “Pa”\n  - Replace with: “Pi”\n  - Replace with: “PE”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1858 | farther out on the Island came the Cheadles and the O. R. P. Schraeders, and the\n         |                                                              ^~~~~~~~~~ Did you mean to spell `Schraeders` this way?\n    1859 | Stonewall Jackson Abrams of Georgia, and the Fishguards and the Ripley Snells.\nSuggest:\n  - Replace with: “Schroeder's”\n  - Replace with: “Schroeder”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1859 | Stonewall Jackson Abrams of Georgia, and the Fishguards and the Ripley Snells.\n         |                                              ^~~~~~~~~~ Did you mean `Fireguards`?\nSuggest:\n  - Replace with: “Fireguards”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1859 | Stonewall Jackson Abrams of Georgia, and the Fishguards and the Ripley Snells.\n         |                                                                        ^~~~~~ Did you mean to spell `Snells` this way?\nSuggest:\n  - Replace with: “Snell's”\n  - Replace with: “Sells”\n  - Replace with: “Shells”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1861 | the gravel drive that Mrs. Ulysses Swett’s automobile ran over his right hand.\n         |                                    ^~~~~~~ Did you mean to spell `Swett’s` this way?\nSuggest:\n  - Replace with: “Sweat's”\n  - Replace with: “Sweet's”\n  - Replace with: “Seth's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1862 | The Dancies came, too, and S. B. Whitebait, who was well over sixty, and Maurice\n         |     ^~~~~~~ Did you mean to spell `Dancies` this way?\nSuggest:\n  - Replace with: “Dances”\n  - Replace with: “Dandies”\n  - Replace with: “Dannie's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1862 | The Dancies came, too, and S. B. Whitebait, who was well over sixty, and Maurice\n         |                            ^~ Did you mean to spell `S.` this way?\nSuggest:\n  - Replace with: “So”\n  - Replace with: “SA”\n  - Replace with: “Se”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1862 | The Dancies came, too, and S. B. Whitebait, who was well over sixty, and Maurice\n         |                               ^~ Did you mean to spell `B.` this way?\nSuggest:\n  - Replace with: “Be”\n  - Replace with: “Bi”\n  - Replace with: “Bu”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1862 | The Dancies came, too, and S. B. Whitebait, who was well over sixty, and Maurice\n    1863 | A. Flink, and the Hammerheads, and Beluga the tobacco importer, and Beluga’s\n         | ^~ Did you mean to spell `A.` this way?\nSuggest:\n  - Replace with: “A”\n  - Replace with: “Ab”\n  - Replace with: “Ac”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1863 | A. Flink, and the Hammerheads, and Beluga the tobacco importer, and Beluga’s\n         |    ^~~~~ Did you mean to spell `Flink` this way?\nSuggest:\n  - Replace with: “Fink”\n  - Replace with: “Flank”\n  - Replace with: “Flick”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1866 | From West Egg came the Poles and the Mulreadys and Cecil Roebuck and Cecil\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1867 | Schoen and Gulick the State senator and Newton Orchid, who controlled Films Par\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1868 | Excellence, and Eckhaust and Clyde Cohen and Don S. Schwartze (the son) and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1869 | Arthur McCarty, all connected with the movies in one way or another. And the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 52 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1866 | From West Egg came the Poles and the Mulreadys and Cecil Roebuck and Cecil\n         |                                      ^~~~~~~~~ Did you mean to spell `Mulreadys` this way?\n    1867 | Schoen and Gulick the State senator and Newton Orchid, who controlled Films Par\nSuggest:\n  - Replace with: “Misreads”\n  - Replace with: “Already”\n  - Replace with: “Unready”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1866 | From West Egg came the Poles and the Mulreadys and Cecil Roebuck and Cecil\n    1867 | Schoen and Gulick the State senator and Newton Orchid, who controlled Films Par\n         | ^~~~~~ Did you mean to spell `Schoen` this way?\nSuggest:\n  - Replace with: “School”\n  - Replace with: “Scion”\n  - Replace with: “Scone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1866 | From West Egg came the Poles and the Mulreadys and Cecil Roebuck and Cecil\n    1867 | Schoen and Gulick the State senator and Newton Orchid, who controlled Films Par\n         |            ^~~~~~ Did you mean to spell `Gulick` this way?\nSuggest:\n  - Replace with: “Gulch”\n  - Replace with: “Click”\n  - Replace with: “Flick”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1867 | Schoen and Gulick the State senator and Newton Orchid, who controlled Films Par\n    1868 | Excellence, and Eckhaust and Clyde Cohen and Don S. Schwartze (the son) and\n         |                 ^~~~~~~~ Did you mean `Exhaust`?\nSuggest:\n  - Replace with: “Exhaust”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1868 | Excellence, and Eckhaust and Clyde Cohen and Don S. Schwartze (the son) and\n         |                                                  ^~ Did you mean to spell `S.` this way?\nSuggest:\n  - Replace with: “So”\n  - Replace with: “SA”\n  - Replace with: “Se”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1868 | Excellence, and Eckhaust and Clyde Cohen and Don S. Schwartze (the son) and\n         |                                                     ^~~~~~~~~ Did you mean to spell `Schwartze` this way?\n    1869 | Arthur McCarty, all connected with the movies in one way or another. And the\nSuggest:\n  - Replace with: “Schwartz”\n  - Replace with: “Schwartz's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1869 | Arthur McCarty, all connected with the movies in one way or another. And the\n    1870 | Catlips and the Bembergs and G. Earl Muldoon, brother to that Muldoon who\n         | ^~~~~~~ Did you mean to spell `Catlips` this way?\nSuggest:\n  - Replace with: “Cali's”\n  - Replace with: “Catnip's”\n  - Replace with: “Caliphs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1869 | Arthur McCarty, all connected with the movies in one way or another. And the\n    1870 | Catlips and the Bembergs and G. Earl Muldoon, brother to that Muldoon who\n         |                 ^~~~~~~~ Did you mean to spell `Bembergs` this way?\nSuggest:\n  - Replace with: “Berber's”\n  - Replace with: “Bomber's”\n  - Replace with: “Berbers”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1869 | Arthur McCarty, all connected with the movies in one way or another. And the\n    1870 | Catlips and the Bembergs and G. Earl Muldoon, brother to that Muldoon who\n         |                              ^~ Did you mean to spell `G.` this way?\nSuggest:\n  - Replace with: “Go”\n  - Replace with: “GI”\n  - Replace with: “GU”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1870 | Catlips and the Bembergs and G. Earl Muldoon, brother to that Muldoon who\n         |                                      ^~~~~~~ Did you mean `Mullion`?\n    1871 | afterward strangled his wife. Da Fontano the promoter came there, and Ed Legros\nSuggest:\n  - Replace with: “Mullion”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1870 | Catlips and the Bembergs and G. Earl Muldoon, brother to that Muldoon who\n         |                                                               ^~~~~~~ Did you mean `Mullion`?\n    1871 | afterward strangled his wife. Da Fontano the promoter came there, and Ed Legros\nSuggest:\n  - Replace with: “Mullion”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    1871 | afterward strangled his wife. Da Fontano the promoter came there, and Ed Legros\n         |                               ^~ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “DA”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1871 | afterward strangled his wife. Da Fontano the promoter came there, and Ed Legros\n         |                               ^~ Did you mean to spell `Da` this way?\nSuggest:\n  - Replace with: “Dab”\n  - Replace with: “Dad”\n  - Replace with: “Dag”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1871 | afterward strangled his wife. Da Fontano the promoter came there, and Ed Legros\n         |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1872 | and James B. (“Rot-Gut”) Ferret and the De Jongs and Ernest Lilly—they came to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1873 | gamble, and when Ferret wandered into the garden it meant he was cleaned out and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1874 | Associated Traction would have to fluctuate profitably next day.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1871 | afterward strangled his wife. Da Fontano the promoter came there, and Ed Legros\n         |                                  ^~~~~~~ Did you mean to spell `Fontano` this way?\nSuggest:\n  - Replace with: “Fondant”\n  - Replace with: “Fontanel”\n  - Replace with: “Montana”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1871 | afterward strangled his wife. Da Fontano the promoter came there, and Ed Legros\n         |                                                                          ^~~~~~ Did you mean to spell `Legros` this way?\n    1872 | and James B. (“Rot-Gut”) Ferret and the De Jongs and Ernest Lilly—they came to\nSuggest:\n  - Replace with: “Lear's”\n  - Replace with: “Leger's”\n  - Replace with: “Leer's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1871 | afterward strangled his wife. Da Fontano the promoter came there, and Ed Legros\n    1872 | and James B. (“Rot-Gut”) Ferret and the De Jongs and Ernest Lilly—they came to\n         |           ^~ Did you mean to spell `B.` this way?\nSuggest:\n  - Replace with: “Be”\n  - Replace with: “Bi”\n  - Replace with: “Bu”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1872 | and James B. (“Rot-Gut”) Ferret and the De Jongs and Ernest Lilly—they came to\n         |                                            ^~~~~ Did you mean to spell `Jongs` this way?\n    1873 | gamble, and when Ferret wandered into the garden it meant he was cleaned out and\nSuggest:\n  - Replace with: “Jon's”\n  - Replace with: “Jonas”\n  - Replace with: “Jogs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1876 | A man named Klipspringer was there so often and so long that he became known as\n         |             ^~~~~~~~~~~~ Did you mean `Kissinger`?\nSuggest:\n  - Replace with: “Kissinger”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1877 | “the boarder”—I doubt if he had any other home. Of theatrical people there were\n    1878 | Gus Waize and Horace O’Donavan and Lester Myer and George Duckweed and Francis\n         |     ^~~~~ Did you mean to spell `Waize` this way?\nSuggest:\n  - Replace with: “Waive”\n  - Replace with: “Waite”\n  - Replace with: “Maize”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1877 | “the boarder”—I doubt if he had any other home. Of theatrical people there were\n    1878 | Gus Waize and Horace O’Donavan and Lester Myer and George Duckweed and Francis\n         |                      ^~~~~~~~~ Did you mean `Donovan`?\nSuggest:\n  - Replace with: “Donovan”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1878 | Gus Waize and Horace O’Donavan and Lester Myer and George Duckweed and Francis\n         |                                           ^~~~ Did you mean to spell `Myer` this way?\n    1879 | Bull. Also from New York were the Chromes and the Backhyssons and the Dennickers\nSuggest:\n  - Replace with: “Mayer”\n  - Replace with: “Meyer”\n  - Replace with: “Myers”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1879 | Bull. Also from New York were the Chromes and the Backhyssons and the Dennickers\n         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1880 | and Russel Betty and the Corrigans and the Kellehers and the Dewars and the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1881 | Scullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1882 | and Henry L. Palmetto, who killed himself by jumping in front of a subway train\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1883 | in Times Square.\n         | ~~~~~~~~~~~~~~~~ This sentence is 59 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1879 | Bull. Also from New York were the Chromes and the Backhyssons and the Dennickers\n         |                                                   ^~~~~~~~~~~ Did you mean to spell `Backhyssons` this way?\n    1880 | and Russel Betty and the Corrigans and the Kellehers and the Dewars and the\nSuggest:\n  - Replace with: “Backhoes”\n  - Replace with: “Backstops”\n  - Replace with: “Jacksons”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1879 | Bull. Also from New York were the Chromes and the Backhyssons and the Dennickers\n         |                                                                       ^~~~~~~~~~ Did you mean to spell `Dennickers` this way?\n    1880 | and Russel Betty and the Corrigans and the Kellehers and the Dewars and the\nSuggest:\n  - Replace with: “Deicers”\n  - Replace with: “Deniers”\n  - Replace with: “Dickers”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1879 | Bull. Also from New York were the Chromes and the Backhyssons and the Dennickers\n    1880 | and Russel Betty and the Corrigans and the Kellehers and the Dewars and the\n         |                          ^~~~~~~~~ Did you mean `Cardigans`?\nSuggest:\n  - Replace with: “Cardigans”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1880 | and Russel Betty and the Corrigans and the Kellehers and the Dewars and the\n         |                                            ^~~~~~~~~ Did you mean to spell `Kellehers` this way?\n    1881 | Scullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\nSuggest:\n  - Replace with: “Keller's”\n  - Replace with: “Kelley's”\n  - Replace with: “Kellie's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1880 | and Russel Betty and the Corrigans and the Kellehers and the Dewars and the\n         |                                                              ^~~~~~ Did you mean to spell `Dewars` this way?\n    1881 | Scullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\nSuggest:\n  - Replace with: “Dewar's”\n  - Replace with: “Dears”\n  - Replace with: “Debars”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1880 | and Russel Betty and the Corrigans and the Kellehers and the Dewars and the\n    1881 | Scullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\n         | ^~~~~~~ Did you mean to spell `Scullys` this way?\nSuggest:\n  - Replace with: “Scull's”\n  - Replace with: “Sculls”\n  - Replace with: “Sculley's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1880 | and Russel Betty and the Corrigans and the Kellehers and the Dewars and the\n    1881 | Scullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\n         |             ^~ Did you mean to spell `S.` this way?\nSuggest:\n  - Replace with: “So”\n  - Replace with: “SA”\n  - Replace with: “Se”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1881 | Scullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\n         |                ^~ Did you mean to spell `W.` this way?\nSuggest:\n  - Replace with: “We”\n  - Replace with: “WA”\n  - Replace with: “WI”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1881 | Scullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\n         |                   ^~~~~~~ Did you mean to spell `Belcher` this way?\nSuggest:\n  - Replace with: “Beecher”\n  - Replace with: “Belched”\n  - Replace with: “Belches”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1881 | Scullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\n         |                                   ^~~~~~~ Did you mean to spell `Smirkes` this way?\n    1882 | and Henry L. Palmetto, who killed himself by jumping in front of a subway train\nSuggest:\n  - Replace with: “Smirk's”\n  - Replace with: “Smirks”\n  - Replace with: “Smirked”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1881 | Scullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\n         |                                                         ^~~~~~ Did you mean to spell `Quinns` this way?\n    1882 | and Henry L. Palmetto, who killed himself by jumping in front of a subway train\nSuggest:\n  - Replace with: “Quinn's”\n  - Replace with: “Quines”\n  - Replace with: “Quins”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1881 | Scullys and S. W. Belcher and the Smirkes and the young Quinns, divorced now,\n    1882 | and Henry L. Palmetto, who killed himself by jumping in front of a subway train\n         |           ^~ Did you mean to spell `L.` this way?\nSuggest:\n  - Replace with: “Le”\n  - Replace with: “Li”\n  - Replace with: “Lu”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1885 | Benny McClenahan arrived always with four girls. They were never quite the same\n         |       ^~~~~~~~~~ Did you mean `McClellan`?\nSuggest:\n  - Replace with: “McClellan”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1887 | inevitably seemed they had been there before. I have forgotten their\n         |                                               ^~~~~~~~~~~~~~~~~~~~~~~\n    1888 | names—Jaqueline, I think, or else Consuela, or Gloria or Judy or June, and their\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1889 | last names were either the melodious names of flowers and months or the sterner\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1890 | ones of the great American capitalists whose cousins, if pressed, they would\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1891 | confess themselves to be.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1887 | inevitably seemed they had been there before. I have forgotten their\n    1888 | names—Jaqueline, I think, or else Consuela, or Gloria or Judy or June, and their\n         |       ^~~~~~~~~ Did you mean to spell `Jaqueline` this way?\nSuggest:\n  - Replace with: “Jacqueline”\n  - Replace with: “Aquiline”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1887 | inevitably seemed they had been there before. I have forgotten their\n    1888 | names—Jaqueline, I think, or else Consuela, or Gloria or Judy or June, and their\n         |                                   ^~~~~~~~ Did you mean to spell `Consuela` this way?\n    1889 | last names were either the melodious names of flowers and months or the sterner\nSuggest:\n  - Replace with: “Consuelo”\n  - Replace with: “Consul”\n  - Replace with: “Consular”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1893 | In addition to all these I can remember that Faustina O’Brien came there at\n         |                                              ^~~~~~~~ Did you mean to spell `Faustina` this way?\n    1894 | least once and the Baedeker girls and young Brewer, who had his nose shot off in\nSuggest:\n  - Replace with: “Faustian”\n  - Replace with: “Faustino”\n  - Replace with: “Fasting”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1895 | the war, and Mr. Albrucksburger and Miss Haag, his fiancée, and Ardita\n         |                  ^~~~~~~~~~~~~~ Did you mean to spell `Albrucksburger` this way?\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1895 | the war, and Mr. Albrucksburger and Miss Haag, his fiancée, and Ardita\n         |                                          ^~~~ Did you mean to spell `Haag` this way?\n    1896 | Fitz-Peters and Mr. P. Jewett, once head of the American Legion, and Miss\nSuggest:\n  - Replace with: “Hang”\n  - Replace with: “Haas”\n  - Replace with: “Hag”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1895 | the war, and Mr. Albrucksburger and Miss Haag, his fiancée, and Ardita\n         |                                                    ^~~~~~~ Did you mean to spell `fiancée` this way?\n    1896 | Fitz-Peters and Mr. P. Jewett, once head of the American Legion, and Miss\nSuggest:\n  - Replace with: “fiance”\n  - Replace with: “fiancee”\n  - Replace with: “finance”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1895 | the war, and Mr. Albrucksburger and Miss Haag, his fiancée, and Ardita\n         |                                                                 ^~~~~~ Did you mean to spell `Ardita` this way?\n    1896 | Fitz-Peters and Mr. P. Jewett, once head of the American Legion, and Miss\nSuggest:\n  - Replace with: “Aria”\n  - Replace with: “Audit”\n  - Replace with: “Akita”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1895 | the war, and Mr. Albrucksburger and Miss Haag, his fiancée, and Ardita\n    1896 | Fitz-Peters and Mr. P. Jewett, once head of the American Legion, and Miss\n         | ^~~~ Did you mean to spell `Fitz` this way?\nSuggest:\n  - Replace with: “Fits”\n  - Replace with: “Fit”\n  - Replace with: “Fritz”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1896 | Fitz-Peters and Mr. P. Jewett, once head of the American Legion, and Miss\n         |                     ^~ Did you mean to spell `P.` this way?\nSuggest:\n  - Replace with: “Pa”\n  - Replace with: “Pi”\n  - Replace with: “PE”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1896 | Fitz-Peters and Mr. P. Jewett, once head of the American Legion, and Miss\n         |                        ^~~~~~ Did you mean to spell `Jewett` this way?\nSuggest:\n  - Replace with: “Jewel”\n  - Replace with: “Jewell”\n  - Replace with: “Jewess”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1911 | He was balancing himself on the dashboard of his car with that resourcefulness\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1912 | of movement that is so peculiarly American—that comes, I suppose, with the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1913 | absence of lifting work in youth and, even more, with the formless grace of our\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1914 | nervous, sporadic games. This quality was continually breaking through his\n         | ~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    1974 | “After that I lived like a young rajah in all the capitals of Europe—Paris,\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1975 | Venice, Rome—collecting jewels, chiefly rubies, hunting big game, painting a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1976 | little, things for myself only, and trying to forget something very sad that had\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    1977 | happened to me long ago.”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1981 | “character” leaking sawdust at every pore as he pursued a tiger through the Bois\n         |                                                                             ^~~~ Did you mean to spell `Bois` this way?\n    1982 | de Boulogne.\nSuggest:\n  - Replace with: “Boss”\n  - Replace with: “Boris”\n  - Replace with: “Bios”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    1981 | “character” leaking sawdust at every pore as he pursued a tiger through the Bois\n    1982 | de Boulogne.\n         |    ^~~~~~~~ Did you mean to spell `Boulogne` this way?\nSuggest:\n  - Replace with: “Bologna”\n  - Replace with: “Cologne”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    1988 | side of us where the infantry couldn’t advance. We stayed there two days and two\n    1989 | nights, a hundred and thirty men with sixteen Lewis guns, and when the infantry\n         |           ^~~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2006 | To my astonishment, the thing had an authentic look. “Orderi di Danilo,” ran the\n         |                                                       ^~~~~~ Did you mean to spell `Orderi` this way?\n    2007 | circular legend, “Montenegro, Nicolas Rex.”\nSuggest:\n  - Replace with: “Order”\n  - Replace with: “Orders”\n  - Replace with: “Order's”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2006 | To my astonishment, the thing had an authentic look. “Orderi di Danilo,” ran the\n         |                                                              ^~ This word's canonical spelling is all-caps.\n    2007 | circular legend, “Montenegro, Nicolas Rex.”\nSuggest:\n  - Replace with: “DI”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2006 | To my astonishment, the thing had an authentic look. “Orderi di Danilo,” ran the\n         |                                                              ^~ Did you mean to spell `di` this way?\n    2007 | circular legend, “Montenegro, Nicolas Rex.”\nSuggest:\n  - Replace with: “db”\n  - Replace with: “dc”\n  - Replace with: “dd”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2006 | To my astonishment, the thing had an authentic look. “Orderi di Danilo,” ran the\n         |                                                                 ^~~~~~ Did you mean to spell `Danilo` this way?\n    2007 | circular legend, “Montenegro, Nicolas Rex.”\nSuggest:\n  - Replace with: “Daily”\n  - Replace with: “Danish”\n  - Replace with: “Danial”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2011 | “Major Jay Gatsby,” I read, “For Valour Extraordinary.”\n         |                                  ^~~~~~ Did you mean to spell `Valour` this way?\nSuggest:\n  - Replace with: “Valor”\n  - Replace with: “Velour”\n  - Replace with: “Value”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2014 | Trinity Quad—the man on my left is now the Earl of Doncaster.”\n         |                                                    ^~~~~~~~~ Did you mean to spell `Doncaster` this way?\nSuggest:\n  - Replace with: “Lancaster”\n  - Replace with: “Podcaster”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2021 | Grand Canal; I saw him opening a chest of rubies to ease, with their\n    2022 | crimson-lighted depths, the gnawings of his broken heart.\n         |                             ^~~~~~~~ Did you mean to spell `gnawings` this way?\nSuggest:\n  - Replace with: “gnawing”\n  - Replace with: “gearings”\n  - Replace with: “gratings”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2047 | ships, and sped along a cobbled slum lined with the dark, undeserted saloons of\n         |                                                           ^~~~~~~~~~ Did you mean to spell `undeserted` this way?\n    2048 | the faded-gilt nineteen-hundreds. Then the valley of ashes opened out on both\nSuggest:\n  - Replace with: “undeserved”\n  - Replace with: “undefeated”\n  - Replace with: “underserved”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2067 | Over the great bridge, with the sunlight through the girders making a constant\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2068 | flicker upon the moving cars, with the city rising up across the river in white\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2069 | heaps and sugar lumps all built with a wish out of non-olfactory money. The city\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2069 | heaps and sugar lumps all built with a wish out of non-olfactory money. The city\n    2070 | seen from the Queensboro Bridge is always the city seen for the first time, in\n         |               ^~~~~~~~~~ Did you mean `Greensboro`?\nSuggest:\n  - Replace with: “Greensboro”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n    2073 | A dead man passed us in a hearse heaped with blooms, followed by two carriages\n    2074 | with drawn blinds, and by more cheerful carriages for friends. The friends\n         |                           ^~~~~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\nSuggest:\n  - Replace with: “cheerfuller”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2076 | Europe, and I was glad that the sight of Gatsby’s splendid car was included in\n    2077 | their sombre holiday. As we crossed Blackwell’s Island a limousine passed us,\n         |       ^~~~~~ Did you mean to spell `sombre` this way?\nSuggest:\n  - Replace with: “somber”\n  - Replace with: “hombre”\n  - Replace with: “sober”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2078 | driven by a white chauffeur, in which sat three modish negroes, two bucks and a\n         |                                                        ^~~~~~~ The canonical dictionary spelling is title case: `Negroes`.\n    2079 | girl. I laughed aloud as the yolks of their eyeballs rolled toward us in haughty\nSuggest:\n  - Replace with: “Negroes”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2078 | driven by a white chauffeur, in which sat three modish negroes, two bucks and a\n         |                                                        ^~~~~~~ Did you mean to spell `negroes` this way?\n    2079 | girl. I laughed aloud as the yolks of their eyeballs rolled toward us in haughty\nSuggest:\n  - Replace with: “Negroes”\n  - Replace with: “Negro's”\n  - Replace with: “Negros”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2091 | “Mr. Carraway, this is my friend Mr. Wolfshiem.”\n         |      ^~~~~~~~ Did you mean to spell `Carraway` this way?\nSuggest:\n  - Replace with: “Caraway”\n  - Replace with: “Caraways”\n  - Replace with: “Castaway”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2091 | “Mr. Carraway, this is my friend Mr. Wolfshiem.”\n         |                                      ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2097 | “So I took one look at him,” said Mr. Wolfshiem, shaking my hand earnestly, “and\n         |                                       ^~~~~~~~~ Did you mean `Bolshie`?\n    2098 | what do you think I did?”\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2105 | “I handed the money to Katspaugh and I sid: ‘All right, Katspaugh, don’t pay him\n         |                        ^~~~~~~~~ Did you mean `Kasparov`?\nSuggest:\n  - Replace with: “Kasparov”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2105 | “I handed the money to Katspaugh and I sid: ‘All right, Katspaugh, don’t pay him\n         |                                        ^~~ The canonical dictionary spelling is title case: `Sid`.\nSuggest:\n  - Replace with: “Sid”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2105 | “I handed the money to Katspaugh and I sid: ‘All right, Katspaugh, don’t pay him\n         |                                        ^~~ Did you mean to spell `sid` this way?\nSuggest:\n  - Replace with: “sad”\n  - Replace with: “said”\n  - Replace with: “sic”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2105 | “I handed the money to Katspaugh and I sid: ‘All right, Katspaugh, don’t pay him\n         |                                                         ^~~~~~~~~ Did you mean `Kasparov`?\n    2106 | a penny till he shuts his mouth.’ He shut it then and there.”\nSuggest:\n  - Replace with: “Kasparov”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2109 | whereupon Mr. Wolfshiem swallowed a new sentence he was starting and lapsed into\n         |               ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2109 | whereupon Mr. Wolfshiem swallowed a new sentence he was starting and lapsed into\n    2110 | a somnambulatory abstraction.\n         |   ^~~~~~~~~~~~~~ Did you mean `ambulatory`?\nSuggest:\n  - Replace with: “ambulatory”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    2112 | “Highballs?” asked the head waiter.\n         |                        ^~~~~~~~~~~ Did you mean the closed compound noun “headwaiter”?\nSuggest:\n  - Replace with: “headwaiter”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2114 | “This is a nice restaurant here,” said Mr. Wolfshiem, looking at the\n         |                                            ^~~~~~~~~ Did you mean `Bolshie`?\n    2115 | Presbyterian nymphs on the ceiling. “But I like across the street better!”\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2117 | “Yes, highballs,” agreed Gatsby, and then to Mr. Wolfshiem: “It’s too hot over\n         |                                                  ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2120 | “Hot and small—yes,” said Mr. Wolfshiem, “but full of memories.”\n         |                               ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2124 | “The old Metropole.”\n         |          ^~~~~~~~~ Did you mean to spell `Metropole` this way?\nSuggest:\n  - Replace with: “Metropolis”\n  - Replace with: “Metronome”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2126 | “The old Metropole,” brooded Mr. Wolfshiem gloomily. “Filled with faces dead and\n         |          ^~~~~~~~~ Did you mean to spell `Metropole` this way?\nSuggest:\n  - Replace with: “Metropolis”\n  - Replace with: “Metronome”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2126 | “The old Metropole,” brooded Mr. Wolfshiem gloomily. “Filled with faces dead and\n         |                                  ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2126 | “The old Metropole,” brooded Mr. Wolfshiem gloomily. “Filled with faces dead and\n         |                                                      ^ This quote has no termination.\n    2127 | gone. Filled with friends gone now forever. I can’t forget so long as I live the\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2134 | “‘Let the bastards come in here if they want you, Rosy, but don’t you, so help\n         | ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2142 | “Sure he went.” Mr. Wolfshiem’s nose flashed at me indignantly. “He turned\n         |                     ^~~~~~~~~~~ Did you mean to spell `Wolfshiem’s` this way?\nSuggest:\n  - Replace with: “Waldheim's”\n  - Replace with: “Welshmen's”\n  - Replace with: “Wolfe's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2150 | understand you’re looking for a business gonnegtion.”\n         |                                          ^~~~~~~~~~ Did you mean `connection`?\nSuggest:\n  - Replace with: “connection”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2154 | “Oh, no,” he exclaimed, ‘‘this isn’t the man.”\n         |                                              ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2156 | “No?” Mr. Wolfshiem seemed disappointed.\n         |           ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2160 | “I beg your pardon,” said Mr. Wolfshiem, “I had a wrong man.”\n         |                               ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2162 | A succulent hash arrived, and Mr. Wolfshiem, forgetting the more sentimental\n         |                                   ^~~~~~~~~ Did you mean `Bolshie`?\n    2163 | atmosphere of the old Metropole, began to eat with ferocious delicacy. His eyes,\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2162 | A succulent hash arrived, and Mr. Wolfshiem, forgetting the more sentimental\n    2163 | atmosphere of the old Metropole, began to eat with ferocious delicacy. His eyes,\n         |                       ^~~~~~~~~ Did you mean to spell `Metropole` this way?\nSuggest:\n  - Replace with: “Metropolis”\n  - Replace with: “Metronome”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2181 | me with Mr. Wolfshiem at the table.\n         |             ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2183 | “He has to telephone,” said Mr. Wolfshiem, following him with his eyes. “Fine\n         |                                 ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2188 | “He’s an Oggsford man.”\n         |          ^~~~~~~~ Did you mean to spell `Oggsford` this way?\nSuggest:\n  - Replace with: “Oxford”\n  - Replace with: “Longsword”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2192 | “He went to Oggsford College in England. You know Oggsford College?”\n         |             ^~~~~~~~ Did you mean to spell `Oggsford` this way?\nSuggest:\n  - Replace with: “Oxford”\n  - Replace with: “Longsword”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2192 | “He went to Oggsford College in England. You know Oggsford College?”\n         |                                                   ^~~~~~~~ Did you mean to spell `Oggsford` this way?\nSuggest:\n  - Replace with: “Oxford”\n  - Replace with: “Longsword”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2218 | Mr. Wolfshiem drank his coffee with a jerk and got to his feet.\n         |     ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n    2220 | “I have enjoyed my lunch,” he said, “and I’m going to run off from you two young\n         |                                                                    ^~~ The possessive version of this word is more common in this context.\n    2221 | men before I outstay my welcome.”\nSuggest:\n  - Replace with: “your”\n  - Replace with: “you're a”\n  - Replace with: “you're an”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2223 | “Don’t hurry, Meyer,” said Gatsby, without enthusiasm. Mr. Wolfshiem raised his\n         |                                                            ^~~~~~~~~ Did you mean `Bolshie`?\n    2224 | hand in a sort of benediction.\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2243 | “Meyer Wolfshiem? No, he’s a gambler.” Gatsby hesitated, then added coolly:\n         |        ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    2265 | “Come along with me for a minute,” I said; “I’ve got to say hello to some one.”\n         |                                                                      ^~~~~~~~ Did you mean the closed compound `someone`?\nSuggest:\n  - Replace with: “someone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2269 | “Where’ve you been?” he demanded eagerly. “Daisy’s furious because you haven’t\n         |  ^~~~~~~~ Did you mean to spell `Where’ve` this way?\nSuggest:\n  - Replace with: “Where'd”\n  - Replace with: “Where's”\n  - Replace with: “Wherever”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2277 | “How’ve you been, anyhow?” demanded Tom of me. “How’d you happen to come up this\n         |  ^~~~~~ Did you mean to spell `How’ve` this way?\nSuggest:\n  - Replace with: “How're”\n  - Replace with: “How'd”\n  - Replace with: “How's”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2291 | with rubber nobs on the soles that bit into the soft ground. I had on a new\n         |                                                              ^~~~~~~~~~~~~~~\n    2292 | plaid skirt also that blew a little in the wind, and whenever this happened the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2293 | red, white, and blue banners in front of all the houses stretched out stiff and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2294 | said tut-tut-tut-tut, in a disapproving way.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2319 | That was nineteen-seventeen. By the next year I had a few beaux myself, and I\n         |                                                           ^~~~~ Did you mean to spell `beaux` this way?\n    2320 | began to play in tournaments, so I didn’t see Daisy very often. She went with a\nSuggest:\n  - Replace with: “beau”\n  - Replace with: “beaus”\n  - Replace with: “beaut”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    2319 | That was nineteen-seventeen. By the next year I had a few beaux myself, and I\n         |                                                           ^~~~~ `beaux` has a missing space between words.\n    2320 | began to play in tournaments, so I didn’t see Daisy very often. She went with a\nSuggest:\n  - Replace with: “be aux”\n  - Replace with: “beau x”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2329 | By the next autumn she was gay again, gay as ever. She had a début after the\n         |                                                              ^~~~~ Did you mean to spell `début` this way?\n    2330 | armistice, and in February she was presumably engaged to a man from New Orleans.\nSuggest:\n  - Replace with: “debut”\n  - Replace with: “debt”\n  - Replace with: “doubt”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2332 | than Louisville ever knew before. He came down with a hundred people in four\n         |                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2333 | private cars, and hired a whole floor of the Muhlbach Hotel, and the day before\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2334 | the wedding he gave her a string of pearls valued at three hundred and fifty\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2335 | thousand dollars.\n         | ~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2333 | private cars, and hired a whole floor of the Muhlbach Hotel, and the day before\n         |                                              ^~~~~~~~ Did you mean to spell `Muhlbach` this way?\n    2334 | the wedding he gave her a string of pearls valued at three hundred and fifty\nSuggest:\n  - Replace with: “Mulch”\n  - Replace with: “Mullah”\n  - Replace with: “Fullback”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2339 | dress—and as drunk as a monkey. She had a bottle of Sauterne in one hand and a\n         |                                                     ^~~~~~~~ Did you mean to spell `Sauterne` this way?\n    2340 | letter in the other.\nSuggest:\n  - Replace with: “Sauternes”\n  - Replace with: “Sterne”\n  - Replace with: “Sauteing”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2342 | “’Gratulate me,” she muttered. “Never had a drink before, but oh how I do enjoy\n         |   ^~~~~~~~~ Did you mean to spell `Gratulate` this way?\nSuggest:\n  - Replace with: “Granulate”\n  - Replace with: “Graduate”\n  - Replace with: “Granulated”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2349 | “Here, deares’.” She groped around in a wastebasket she had with her on the bed\n         |        ^~~~~~ Did you mean to spell `deares` this way?\nSuggest:\n  - Replace with: “dear's”\n  - Replace with: “dares”\n  - Replace with: “dearies”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    2349 | “Here, deares’.” She groped around in a wastebasket she had with her on the bed\n         |        ^~~~~~ `deares` should probably be written as `dear es`.\nSuggest:\n  - Replace with: “dear es”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2352 | change’ her mine!’”\n         |                   ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2360 | But she didn’t say another word. We gave her spirits of ammonia and put ice on\n         |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2361 | her forehead and hooked her back into her dress, and half an hour later, when we\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2362 | walked out of the room, the pearls were around her neck and the incident was\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2363 | over. Next day at five o’clock she married Tom Buchanan without so much as a\n         | ~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2368 | around uneasily, and say: ‘‘Where’s Tom gone?” and wear the most abstracted\n         |                                              ^ This quote has no termination.\n    2369 | expression until she saw him coming in the door. She used to sit on the sand\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2373 | week after I left Santa Barbara Tom ran into a wagon on the Ventura road one\n         |                                                             ^~~~~~~ Did you mean to spell `Ventura` this way?\n    2374 | night, and ripped a front wheel off his car. The girl who was with him got into\nSuggest:\n  - Replace with: “Venture”\n  - Replace with: “Ventral”\n  - Replace with: “Ventured”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2379 | saw them one spring in Cannes, and later in Deauville, and then they came back\n         |                                             ^~~~~~~~~ Did you mean `Danville`?\n    2380 | to Chicago to settle down. Daisy was popular in Chicago, as you know. They moved\nSuggest:\n  - Replace with: “Danville”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    2395 | When Jordan Baker had finished telling all this we had left the Plaza for half\n    2396 | an hour and were driving in a victoria through Central Park. The sun had gone\n         |                               ^~~~~~~~ The canonical dictionary spelling is title case: `Victoria`.\nSuggest:\n  - Replace with: “Victoria”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2395 | When Jordan Baker had finished telling all this we had left the Plaza for half\n    2396 | an hour and were driving in a victoria through Central Park. The sun had gone\n         |                               ^~~~~~~~ Did you mean to spell `victoria` this way?\nSuggest:\n  - Replace with: “Victoria”\n  - Replace with: “victor's”\n  - Replace with: “victor”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2401 | > “I’m the Sheik of Araby. Your love belongs to me. At night when you’re asleep\n         |            ^~~~~ Did you mean to spell `Sheik` this way?\nSuggest:\n  - Replace with: “Sheikh”\n  - Replace with: “She'd”\n  - Replace with: “She's”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2437 | “I think he half expected her to wander into one of his parties, some night,”\n    2438 | went on Jordan, “but she never did. Then he began asking people casually if they\n         |                 ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2444 | “‘I don’t want to do anything out of the way!’ he kept saying. ‘I want to see\n         | ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2455 | hard, limited person, who dealt in universal scepticism, and who leaned back\n         |                                              ^~~~~~~~~~ Did you mean to spell `scepticism` this way?\n    2456 | jauntily just within the circle of my arm. A phrase began to beat in my ears\nSuggest:\n  - Replace with: “skepticism”\n  - Replace with: “asceticism”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2458 | busy and the tired.”\n         |                    ^ This quote has no termination.\n\n\n\nLint:    Miscellaneous (55 priority)\nMessage: |\n    2462 | “Does she want to see Gatsby?”\n         |           ^~~~ Did you mean `wants`?\nSuggest:\n  - Replace with: “wants”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2467 | We passed a barrier of dark trees, and then the façade of Fifty-ninth Street, a\n         |                                                 ^~~~~~ Did you mean to spell `façade` this way?\n    2468 | block of delicate pale light, beamed down into the park. Unlike Gatsby and Tom\nSuggest:\n  - Replace with: “facade”\n  - Replace with: “fade”\n  - Replace with: “facades”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2492 | some of the rooms. Let’s go to Coney Island, old sport. In my car.”\n         |                                ^~~~~ Did you mean to spell `Coney` this way?\nSuggest:\n  - Replace with: “Convey”\n  - Replace with: “Conley”\n  - Replace with: “Corey”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2526 | “There’s another little thing,” he said uncertainly, and hesitated.\n         |                                         ^~~~~~~~~~~ Did you mean to spell `uncertainly` this way?\nSuggest:\n  - Replace with: “uncertainty”\n  - Replace with: “uncertain”\n  - Replace with: “certainly”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2530 | “Oh, it isn’t about that. At least—’’ He fumbled with a series of beginnings.\n         | ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2555 | “You wouldn’t have to do any business with Wolfshiem.” Evidently he thought that\n         |                                            ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2555 | “You wouldn’t have to do any business with Wolfshiem.” Evidently he thought that\n    2556 | I was shying away from the “gonnegtion” mentioned at lunch, but I assured him he\n         |                             ^~~~~~~~~~ Did you mean `connection`?\nSuggest:\n  - Replace with: “connection”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2561 | sleep as I entered my front door. So I don’t know whether or not Gatsby went to\n    2562 | Coney Island, or for how many hours he “glanced into rooms” while his house\n         | ^~~~~ Did you mean to spell `Coney` this way?\nSuggest:\n  - Replace with: “Convey”\n  - Replace with: “Conley”\n  - Replace with: “Corey”\n\n\n\nLint:    Enhancement (31 priority)\nMessage: |\n    2594 | “Looks very good,” he remarked vaguely. “One of the papers said they thought the\n         |        ^~~~~~~~~ Vocabulary enhancement: use `excellent` instead of `very good`\nSuggest:\n  - Replace with: “excellent”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    2603 | “Of course, of course! They’re fine!” and he added hollowly, “. . . old sport.”\n         |                                                                     ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Old”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2606 | thin drops swam like dew. Gatsby looked with vacant eyes through a copy of\n         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2607 | Clay’s “Economics,” starting at the Finnish tread that shook the kitchen floor,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2608 | and peering toward the bleared windows from time to time as if a series of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2609 | invisible but alarming happenings were taking place outside. Finally he got up\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2607 | Clay’s “Economics,” starting at the Finnish tread that shook the kitchen floor,\n    2608 | and peering toward the bleared windows from time to time as if a series of\n         |                        ^~~~~~~ Did you mean to spell `bleared` this way?\nSuggest:\n  - Replace with: “blared”\n  - Replace with: “bleated”\n  - Replace with: “beard”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    2607 | Clay’s “Economics,” starting at the Finnish tread that shook the kitchen floor,\n    2608 | and peering toward the bleared windows from time to time as if a series of\n         |                        ^~~~~~~ `bleared` should probably be written as `bl eared`.\nSuggest:\n  - Replace with: “bl eared”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    2629 | The exhilarating ripple of her voice was a wild tonic in the rain. I had to\n    2630 | follow the sound of it for a moment, up and down, with my ear alone, before any\n         |                                      ^~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2638 | “That’s the secret of Castle Rackrent. Tell your chauffeur to go far away and\n         |                              ^~~~~~~~ Did you mean to spell `Rackrent` this way?\nSuggest:\n  - Replace with: “Racket”\n  - Replace with: “Backrest”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2641 | “Come back in an hour, Ferdie.” Then in a grave murmur: “His name is Ferdie.”\n         |                        ^~~~~~ Did you mean to spell `Ferdie` this way?\nSuggest:\n  - Replace with: “Faerie”\n  - Replace with: “Fertile”\n  - Replace with: “Fermi”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2641 | “Come back in an hour, Ferdie.” Then in a grave murmur: “His name is Ferdie.”\n         |                                                                      ^~~~~~ Did you mean to spell `Ferdie` this way?\nSuggest:\n  - Replace with: “Faerie”\n  - Replace with: “Fertile”\n  - Replace with: “Fermi”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2673 | a strained counterfeit of perfect ease, even of boredom. His head leaned back so\n         |                                                          ^~~~~~~~~~~~~~~~~~~~~~~~\n    2674 | far that it rested against the face of a defunct mantelpiece clock, and from\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2675 | this position his distraught eyes stared down at Daisy, who was sitting,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2676 | frightened but graceful, on the edge of a stiff chair.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2720 | terrible, terrible mistake.”\n         |                            ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2737 | I walked out the back way—just as Gatsby had when he had made his nervous\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2738 | circuit of the house half an hour before—and ran for a huge black knotted tree,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2739 | whose massed leaves made a fabric against the rain. Once more it was pouring,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    2737 | I walked out the back way—just as Gatsby had when he had made his nervous\n         |                  ^~~~~~~~ Did you mean the closed compound noun “backway”?\nSuggest:\n  - Replace with: “backway”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2743 | steeple, for half an hour. A brewer had built it early in the “period” craze, a\n         |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2744 | decade before, and there was a story that he’d agreed to pay five years’ taxes\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2745 | on all the neighboring cottages if the owners would have their roofs thatched\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2746 | with straw. Perhaps their refusal took the heart out of his plan to Found a\n         | ~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    2775 | twinkle-bells of sunshine in the room, he smiled like a weather man, like an\n         |                                                         ^~~~~~~~~~~ Did you mean the closed compound noun “weatherman”?\n    2776 | ecstatic patron of recurrent light, and repeated the news to Daisy. “What do you\nSuggest:\n  - Replace with: “weatherman”\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n    2789 | Daisy went up-stairs to wash her face—too late I thought with humiliation of my\n         |            ^~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “upstairs”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2806 | was in he answered: ‘‘That’s my affair,” before he realized that it wasn’t an\n         |                                        ^ This quote has no termination.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    2823 | “I keep it always full of interesting people, night and day. People who do\n         |                                               ^~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2826 | Instead of taking the short cut along the Sound we went down to the road and\n    2827 | entered by the big postern. With enchanting murmurs Daisy admired this aspect or\n         |                    ^~~~~~~ Did you mean to spell `postern` this way?\nSuggest:\n  - Replace with: “pastern”\n  - Replace with: “poster”\n  - Replace with: “posters”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2827 | entered by the big postern. With enchanting murmurs Daisy admired this aspect or\n         |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2828 | that of the feudal silhouette against the sky, admired the gardens, the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2829 | sparkling odor of jonquils and the frothy odor of hawthorn and plum blossoms and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2830 | the pale gold odor of kiss-me-at-the-gate. It was strange to reach the marble\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2837 | closed the door of ‘‘the Merton College Library” I could have sworn I heard the\n         |                                                ^ This quote has no termination.\n    2838 | owl-eyed man break into ghostly laughter.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2840 | We went up-stairs, through period bedrooms swathed in rose and lavender silk and\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2841 | vivid with new flowers, through dressing-rooms and poolrooms, and bathrooms with\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2842 | sunken baths—intruding into one chamber where a dishevelled man in pajamas was\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2843 | doing liver exercises on the floor. It was Mr. Klipspringer, the ‘‘boarder.” I\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n    2840 | We went up-stairs, through period bedrooms swathed in rose and lavender silk and\n         |         ^~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “upstairs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2842 | sunken baths—intruding into one chamber where a dishevelled man in pajamas was\n         |                                                 ^~~~~~~~~~~ Did you mean `disheveled`?\n    2843 | doing liver exercises on the floor. It was Mr. Klipspringer, the ‘‘boarder.” I\nSuggest:\n  - Replace with: “disheveled”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2843 | doing liver exercises on the floor. It was Mr. Klipspringer, the ‘‘boarder.” I\n         |                                                ^~~~~~~~~~~~ Did you mean `Kissinger`?\nSuggest:\n  - Replace with: “Kissinger”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    2843 | doing liver exercises on the floor. It was Mr. Klipspringer, the ‘‘boarder.” I\n         |                                                                            ^ This quote has no termination.\n    2844 | had seen him wandering hungrily about the beach that morning. Finally we came to\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    2844 | had seen him wandering hungrily about the beach that morning. Finally we came to\n    2845 | Gatsby’s own apartment, a bedroom and a bath, and an Adam’s study, where we sat\n         |                           ^~~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    2872 | “I’ve got a man in England who buys me clothes. He sends over a selection of\n    2873 | things at the beginning of each season, spring and fall.”\n         |                                         ^~~~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2875 | He took out a pile of shirts and began throwing them, one by one, before us,\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2876 | shirts of sheer linen and thick silk and fine flannel, which lost their folds as\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2877 | they fell and covered the table in many colored disarray. While we admired he\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2878 | brought more and the soft rich heap mounted higher—shirts with stripes and\n    2879 | scrolls and plaids in coral and applegreen and lavender and faint orange, with\n         |                                 ^~~~~~~~~~ Did you mean to spell `applegreen` this way?\n    2880 | monograms of Indian blue. Suddenly, with a strained sound, Daisy bent her head\nSuggest:\n  - Replace with: “Appleseed”\n  - Replace with: “allergen”\n  - Replace with: “appeared”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    2878 | brought more and the soft rich heap mounted higher—shirts with stripes and\n    2879 | scrolls and plaids in coral and applegreen and lavender and faint orange, with\n         |                                 ^~~~~~~~~~ `applegreen` should probably be written as `apple green`.\n    2880 | monograms of Indian blue. Suddenly, with a strained sound, Daisy bent her head\nSuggest:\n  - Replace with: “apple green”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    2887 | After the house, we were to see the grounds and the swimming-pool, and the\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2888 | hydroplane and the midsummer flowers—but outside Gatsby’s window it began to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    2889 | rain again, so we stood in a row looking at the corrugated surface of the Sound.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    2905 | “Who’s this?”\n         |  ^~~~~ The canonical dictionary spelling is `who's`.\nSuggest:\n  - Replace with: “who's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2940 | “I know what we'll do,” said Gatsby, “we'll have Klipspringer play the piano.”\n         |                                                  ^~~~~~~~~~~~ Did you mean `Kissinger`?\nSuggest:\n  - Replace with: “Kissinger”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2949 | “I was asleep,” cried Mr. Klipspringer, in a spasm of embarrassment. “That is,\n         |                           ^~~~~~~~~~~~ Did you mean `Kissinger`?\nSuggest:\n  - Replace with: “Kissinger”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    2950 | I’d been asleep. Then I got up . . .”\n         |                               ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2952 | “Klipspringer plays the piano,” said Gatsby, cutting him off. “Don’t you, Ewing,\n         |  ^~~~~~~~~~~~ Did you mean `Kissinger`?\nSuggest:\n  - Replace with: “Kissinger”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2955 | “I don’t play well. I don’t—I hardly play at all. I’m all out of prac———”\n         |                                                                  ^~~~ Did you mean to spell `prac` this way?\nSuggest:\n  - Replace with: “prat”\n  - Replace with: “pray”\n  - Replace with: “pram”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2965 | When Klipspringer had played “The Love Nest” he turned around on the bench and\n         |      ^~~~~~~~~~~~ Did you mean `Kissinger`?\nSuggest:\n  - Replace with: “Kissinger”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    2968 | “I’m all out of practice, you see. I told you I couldn’t play. I’m all out of\n    2969 | prac—”\n         | ^~~~ Did you mean to spell `prac` this way?\nSuggest:\n  - Replace with: “prat”\n  - Replace with: “pray”\n  - Replace with: “pram”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    3003 | ## CHAPTER VI\n         | ^~~~~~~~~~~~~ Try to use title case in headings.\nSuggest:\n  - Replace with: “## CHAPTER Vi”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3020 | short of being news. Contemporary legends such as the “underground pipe-line to\n         |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3021 | Canada” attached themselves to him, and there was one persistent story that he\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3022 | didn’t live in a house at all, but in a boat that looked like a house and was\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3023 | moved secretly up and down the Long Island shore. Just why these inventions were\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3023 | moved secretly up and down the Long Island shore. Just why these inventions were\n    3024 | a source of satisfaction to James Gatz of North Dakota, isn’t easy to say.\n         |                                   ^~~~ Did you mean to spell `Gatz` this way?\nSuggest:\n  - Replace with: “Gate”\n  - Replace with: “Garth”\n  - Replace with: “Goth”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3026 | James Gatz—that was really, or at least legally, his name. He had changed it at\n         |       ^~~~ Did you mean to spell `Gatz` this way?\nSuggest:\n  - Replace with: “Gate”\n  - Replace with: “Garth”\n  - Replace with: “Goth”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3029 | on Lake Superior. It was James Gatz who had been loafing along the beach that\n         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3030 | afternoon in a torn green jersey and a pair of canvas pants, but it was already\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3031 | Jay Gatsby who borrowed a rowboat, pulled out to the Tuolomee, and informed Cody\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3032 | that a wind might catch him and break him up in half an hour.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 56 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3029 | on Lake Superior. It was James Gatz who had been loafing along the beach that\n         |                                ^~~~ Did you mean to spell `Gatz` this way?\nSuggest:\n  - Replace with: “Gate”\n  - Replace with: “Garth”\n  - Replace with: “Goth”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3031 | Jay Gatsby who borrowed a rowboat, pulled out to the Tuolomee, and informed Cody\n         |                                                      ^~~~~~~~ Did you mean to spell `Tuolomee` this way?\n    3032 | that a wind might catch him and break him up in half an hour.\nSuggest:\n  - Replace with: “Toulouse”\n  - Replace with: “Twosome”\n  - Replace with: “Twosomes”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3048 | were ignorant, of the others because they were hysterical about things which in\n    3049 | his overwhelming self-absorbtion he took for granted.\n         |                       ^~~~~~~~~~ Did you mean to spell `absorbtion` this way?\nSuggest:\n  - Replace with: “absorption”\n  - Replace with: “abortion”\n  - Replace with: “adsorption”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    3073 | tried to separate him from his money. The none too savory ramifications by which\n    3074 | Ella Kaye, the newspaper woman, played Madame de Maintenon to his weakness and\n         |                ^~~~~~~~~~~~~~~ Did you mean the closed compound noun “newspaperwoman”?\nSuggest:\n  - Replace with: “newspaperwoman”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3074 | Ella Kaye, the newspaper woman, played Madame de Maintenon to his weakness and\n         |                                                  ^~~~~~~~~ Did you mean to spell `Maintenon` this way?\n    3075 | sent him to sea in a yacht, were common property of the turgid journalism\nSuggest:\n  - Replace with: “Maintain”\n  - Replace with: “Maintenance”\n  - Replace with: “Maintop”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3076 | of 1902. He had been coasting along all too hospitable shores for five years\n    3077 | when he turned up as James Gatz’s destiny in Little Girl Bay.\n         |                            ^~~~~~ Did you mean to spell `Gatz’s` this way?\nSuggest:\n  - Replace with: “Gate's”\n  - Replace with: “Garth's”\n  - Replace with: “Goth's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3079 | To young Gatz, resting on his oars and looking up at the railed deck, that yacht\n         |          ^~~~ Did you mean to spell `Gatz` this way?\nSuggest:\n  - Replace with: “Gate”\n  - Replace with: “Garth”\n  - Replace with: “Goth”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3085 | and a yachting cap. And when the Tuolomee left for the West Indies and the\n         |                                  ^~~~~~~~ Did you mean to spell `Tuolomee` this way?\n    3086 | Barbary Coast Gatsby left too.\nSuggest:\n  - Replace with: “Toulouse”\n  - Replace with: “Twosome”\n  - Replace with: “Twosomes”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3088 | He was employed in a vague personal capacity—while he remained with Cody he was\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3089 | in turn steward, mate, skipper, secretary, and even jailor, for Dan Cody sober\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3090 | knew what lavish doings Dan Cody drunk might soon be about, and he provided for\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3091 | such contingencies by reposing more and more trust in Gatsby. The arrangement\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3089 | in turn steward, mate, skipper, secretary, and even jailor, for Dan Cody sober\n         |                                                     ^~~~~~ Did you mean to spell `jailor` this way?\n    3090 | knew what lavish doings Dan Cody drunk might soon be about, and he provided for\nSuggest:\n  - Replace with: “jailer”\n  - Replace with: “jail's”\n  - Replace with: “sailor”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    3089 | in turn steward, mate, skipper, secretary, and even jailor, for Dan Cody sober\n         |                                                     ^~~~~~ `jailor` should probably be written as `jail or`.\n    3090 | knew what lavish doings Dan Cody drunk might soon be about, and he provided for\nSuggest:\n  - Replace with: “jail or”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3096 | I remember the portrait of him up in Gatsby’s bedroom, a gray, florid man with a\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3097 | hard, empty face—the pioneer debauchee, who during one phase of American life\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3098 | brought back to the Eastern seaboard the savage violence of the frontier brothel\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3099 | and saloon. It was indirectly due to Cody that Gatsby drank so little. Sometimes\n         | ~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3106 | left with his singularly appropriate education; the vague contour of Jay Gatsby\n    3107 | had filled out to the substantiality of a man.\n         |                       ^~~~~~~~~~~~~~ Did you mean `substantially`?\nSuggest:\n  - Replace with: “substantially”\n\n\n\nLint:    Punctuation (31 priority)\nMessage: |\n    3111 | faintly true. Moreover he told it to me at a time of confusion, when I had\n         |               ^~~~~~~~ Discourse markers at the beginning of a sentence should be followed by a comma.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3116 | It was a halt, too, in my association with his affairs. For several weeks I\n         |                                                         ^~~~~~~~~~~~~~~~~~~~\n    3117 | didn’t see him or hear his voice on the phone—mostly I was in New York, trotting\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3118 | around with Jordan and trying to ingratiate myself with her senile aunt—but\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3119 | finally I went over to his house one Sunday afternoon. I hadn’t been there two\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Repetition (31 priority)\nMessage: |\n    3135 | uneasy anyhow until he had given them something, realizing in a vague way that\n         |                                                                           ^~~~~\n    3136 | that was all they came for. Mr. Sloane wanted nothing. A lemonade? No, thanks. A\n         | ~~~~ Consider whether the second `that` adds meaning in this context.\nSuggest:\n  - Replace with: “that”\n\n\n\nLint:    Repetition (127 priority)\nMessage: |\n    3135 | uneasy anyhow until he had given them something, realizing in a vague way that\n         |                                                                           ^~~~~\n    3136 | that was all they came for. Mr. Sloane wanted nothing. A lemonade? No, thanks. A\n         | ~~~~ Did you mean to repeat this word?\nSuggest:\n  - Replace with: “that”\n\n\n\nLint:    Repetition (126 priority)\nMessage: |\n    3135 | uneasy anyhow until he had given them something, realizing in a vague way that\n         |                                                                           ^~~~~\n    3136 | that was all they came for. Mr. Sloane wanted nothing. A lemonade? No, thanks. A\n         | ~~~~ “that that” sometimes means “that which”, which is clearer.\nSuggest:\n  - Replace with: “that which”\n\n\n\nLint:    Enhancement (31 priority)\nMessage: |\n    3141 | “Very good roads around here.”\n         |  ^~~~~~~~~ Vocabulary enhancement: use `excellent` instead of `very good`\nSuggest:\n  - Replace with: “Excellent”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3180 | “Be ver’ nice,” said Mr. Sloane, without gratitude. “Well—think ought to be\n         |     ^~~ Did you mean to spell `ver` this way?\nSuggest:\n  - Replace with: “var”\n  - Replace with: “veer”\n  - Replace with: “verb”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3235 | in my memory from Gatsby’s other parties that summer. There were the same\n         |                                                       ^~~~~~~~~~~~~~~~~~~~\n    3236 | people, or at least the same sort of people, the same profusion of champagne,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3237 | the same many-colored, many-keyed commotion, but I felt an unpleasantness in the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3238 | air, a pervading harshness that hadn’t been there before. Or perhaps I had\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3238 | air, a pervading harshness that hadn’t been there before. Or perhaps I had\n         |                                                           ^~~~~~~~~~~~~~~~~\n    3239 | merely grown used to it, grown to accept West Egg as a world complete in itself,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3240 | with its own standards and its own great figures, second to nothing because it\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3241 | had no consciousness of being so, and now I was looking at it again, through\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3242 | Daisy’s eyes. It is invariably saddening to look through new eyes at things upon\n         | ~~~~~~~~~~~~~ This sentence is 51 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3254 | “I’m looking around. I’m having a marvellous—”\n         |                                   ^~~~~~~~~~ Did you mean `marvelous`?\nSuggest:\n  - Replace with: “marvelous”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    3274 | “Mrs. Buchanan . . . and Mr. Buchanan—” After an instant’s hesitation he added:\n         |               ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    3274 | “Mrs. Buchanan . . . and Mr. Buchanan—” After an instant’s hesitation he added:\n         |                      ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “And”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    3296 | explained, ‘‘or any act of God.”\n         |                                ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3316 | “Wha’?”\n         |  ^~~ Did you mean to spell `Wha` this way?\nSuggest:\n  - Replace with: “Wham”\n  - Replace with: “What”\n  - Replace with: “Who”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3319 | at the local club to-morrow, spoke in Miss Baedeker’s defence:\n         |                                                       ^~~~~~~ Did you mean to spell `defence` this way?\nSuggest:\n  - Replace with: “defense”\n  - Replace with: “decency”\n  - Replace with: “defect”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    3337 | “Speak for yourself!” cried Miss Baedeker violently. “Your hand shakes. I\n         |                                                            ^~~~~~~~~~~ Did you mean the closed compound noun “handshakes”?\nSuggest:\n  - Replace with: “handshakes”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3349 | But the rest offended her—and inarguably, because it wasn’t a gesture but an\n         |                               ^~~~~~~~~~ Did you mean to spell `inarguably` this way?\nSuggest:\n  - Replace with: “inarguable”\n  - Replace with: “unarguably”\n  - Replace with: “arguably”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    3349 | But the rest offended her—and inarguably, because it wasn’t a gesture but an\n         |                               ^~~~~~~~~~ `inarguably` should probably be written as `in arguably`.\nSuggest:\n  - Replace with: “in arguably”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3350 | emotion. She was appalled by West Egg, this unprecedented “place” that Broadway\n         |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3351 | had begotten upon a Long Island fishing village—appalled by its raw vigor that\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3352 | chafed under the old euphemisms and by the too obtrusive fate that herded its\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3353 | inhabitants along a short-cut from nothing to nothing. She saw something awful\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 48 words long.\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n    3353 | inhabitants along a short-cut from nothing to nothing. She saw something awful\n         |                                            ^~ Use `too` here to mean ‘also’ or an excessive degree.\nSuggest:\n  - Replace with: “too”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3389 | Daisy began to sing with the music in a husky, rythmic whisper, bringing out a\n         |                                                ^~~~~~~ Did you mean to spell `rythmic` this way?\n    3390 | meaning in each word that it had never had before and would never have again.\nSuggest:\n  - Replace with: “rhythmic”\n  - Replace with: “mythic”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    3409 | Her glance left me and sought the lighted top of the steps, where “Three o’Clock\n         |                                                                          ^~~~~~~ The canonical dictionary spelling is `o'clock`.\n    3410 | in the Morning,” a neat, sad little waltz of that year, was drifting out the\nSuggest:\n  - Replace with: “o'clock”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3414 | dim, incalculable hours? Perhaps some unbelievable guest would arrive, a person\n         |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3415 | infinitely rare and to be marvelled at, some authentically radiant young girl\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3416 | who with one fresh glance at Gatsby, one moment of magical encounter, would blot\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3417 | out those five years of unwavering devotion.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3414 | dim, incalculable hours? Perhaps some unbelievable guest would arrive, a person\n    3415 | infinitely rare and to be marvelled at, some authentically radiant young girl\n         |                           ^~~~~~~~~ Did you mean `marveled`?\nSuggest:\n  - Replace with: “marveled”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3419 | I stayed late that night, Gatsby asked me to wait until he was free, and I\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3420 | lingered in the garden until the inevitable swimming party had run up, chilled\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3421 | and exalted, from the black beach, until the lights were extinguished in the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3422 | guest-rooms overhead. When he came down the steps at last the tanned skin was\n         | ~~~~~~~~~~~~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3474 | Out of the corner of his eye Gatsby saw that the blocks of the sidewalks really\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3475 | formed a ladder and mounted to a secret place above the trees—he could climb to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3476 | it, if he climbed alone, and once there he could suck on the pap of life, gulp\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3477 | down the incomparable milk of wonder.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 55 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    3479 | His heart beat faster and faster as Daisy’s white face came up to his own. He\n         |     ^~~~~~~~~~ Did you mean the closed compound noun “heartbeat”?\nSuggest:\n  - Replace with: “heartbeat”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3490 | them than a wisp of startled air. But they made no sound, and what I had almost\n    3491 | remembered was uncommunicable forever.\n         |                ^~~~~~~~~~~~~~ Did you mean to spell `uncommunicable` this way?\nSuggest:\n  - Replace with: “incommunicable”\n  - Replace with: “communicable”\n  - Replace with: “noncommunicable”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3496 | house failed to go on one Saturday night—and, as obscurely as it had begun, his\n    3497 | career as Trimalchio was over. Only gradually did I become aware that the\n         |           ^~~~~~~~~~ Did you mean to spell `Trimalchio` this way?\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    3505 | “Nope.” After a pause he added “sir’’ in a dilatory, grudging way.\n         |                                ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3507 | “I hadn’t seen him around, and I was rather worried. Tell him Mr. Carraway came\n         |                                                                   ^~~~~~~~ Did you mean to spell `Carraway` this way?\n    3508 | over.”\nSuggest:\n  - Replace with: “Caraway”\n  - Replace with: “Caraways”\n  - Replace with: “Castaway”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3512 | “Carraway.”\n         |  ^~~~~~~~ Did you mean to spell `Carraway` this way?\nSuggest:\n  - Replace with: “Caraway”\n  - Replace with: “Caraways”\n  - Replace with: “Castaway”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3514 | “Carraway. All right, I'll tell him.”\n         |  ^~~~~~~~ Did you mean to spell `Carraway` this way?\nSuggest:\n  - Replace with: “Caraway”\n  - Replace with: “Caraways”\n  - Replace with: “Castaway”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3518 | My Finn informed me that Gatsby had dismissed every servant in his house a week\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3519 | ago and replaced them with half a dozen others, who never went into West Egg\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3520 | Village to be bribed by the tradesmen, but ordered moderate supplies over the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3521 | telephone. The grocery boy reported that the kitchen looked like a pigsty, and\n         | ~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3539 | “They’re some people Wolfshiem wanted to do something for. They’re all brothers\n         |                      ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3553 | of the National Biscuit Company broke the simmering hush at noon. The straw\n         |                                                                   ^~~~~~~~~~\n    3554 | seats of the car hovered on the edge of combustion; the woman next to me\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3555 | perspired delicately for a while into her white shirtwaist, and then, as her\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3556 | newspaper dampened under her fingers, lapsed despairingly into deep heat with a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3557 | desolate cry. Her pocket-book slapped to the floor.\n         | ~~~~~~~~~~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3561 | I picked it up with a weary bend and handed it back to her, holding it at arm’s\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3562 | length and by the extreme tip of the corners to indicate that I had no designs\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3563 | upon it—but every one near by, including the woman, suspected me just the same.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    3562 | length and by the extreme tip of the corners to indicate that I had no designs\n    3563 | upon it—but every one near by, including the woman, suspected me just the same.\n         |             ^~~~~~~~~ Did you mean the closed compound `everyone`?\nSuggest:\n  - Replace with: “everyone”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    3566 | Hot! . . . Hot! . . . Is it hot enough for you? Is it hot? Is it . . .?”\n         |                                                                 ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3572 | . . . Through the hall of the Buchanans’ house blew a faint wind, carrying the\n         |                               ^~~~~~~~~ Did you mean to spell `Buchanans` this way?\nSuggest:\n  - Replace with: “Buchanan's”\n  - Replace with: “Buchanan”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    3578 | What he really said was: “Yes . . . Yes . . . I’ll see.”\n         |                              ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    3578 | What he really said was: “Yes . . . Yes . . . I’ll see.”\n         |                                        ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3599 | Gatsby stood in the centre of the crimson carpet and gazed around with\n         |                     ^~~~~~ Did you mean to spell `centre` this way?\nSuggest:\n  - Replace with: “center”\n  - Replace with: “cent's”\n  - Replace with: “censure”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    3606 | then, I won’t sell you the car at all. . . . I’m under no obligations to you at\n    3607 | all . . . and as for your bothering me about it at lunch time, I won’t stand\n         |    ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    3607 | all . . . and as for your bothering me about it at lunch time, I won’t stand\n         |           ^~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “And”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3612 | “No, he’s not,” I assured her. “It’s a bona-fide deal. I happen to know about\n         |                                        ^~~~ Did you mean to spell `bona` this way?\nSuggest:\n  - Replace with: “boa”\n  - Replace with: “bond”\n  - Replace with: “bone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3612 | “No, he’s not,” I assured her. “It’s a bona-fide deal. I happen to know about\n         |                                             ^~~~ Did you mean to spell `fide` this way?\nSuggest:\n  - Replace with: “fade”\n  - Replace with: “fife”\n  - Replace with: “file”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3640 | “Bles-sed pre-cious,” she crooned, holding out her arms. “Come to your own\n         |  ^~~~ Did you mean to spell `Bles` this way?\nSuggest:\n  - Replace with: “Bless”\n  - Replace with: “Bales”\n  - Replace with: “Bees”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3640 | “Bles-sed pre-cious,” she crooned, holding out her arms. “Come to your own\n         |               ^~~~~ Did you mean to spell `cious` this way?\nSuggest:\n  - Replace with: “coo's”\n  - Replace with: “pious”\n  - Replace with: “chorus”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3646 | “The bles-sed pre-cious! Did mother get powder on your old yellowy hair? Stand\n         |      ^~~~ Did you mean to spell `bles` this way?\nSuggest:\n  - Replace with: “bless”\n  - Replace with: “bales”\n  - Replace with: “bees”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    3646 | “The bles-sed pre-cious! Did mother get powder on your old yellowy hair? Stand\n         |      ^~~~ `bles` should probably be written as `bl es`.\nSuggest:\n  - Replace with: “bl es”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3646 | “The bles-sed pre-cious! Did mother get powder on your old yellowy hair? Stand\n         |                   ^~~~~ Did you mean to spell `cious` this way?\nSuggest:\n  - Replace with: “coo's”\n  - Replace with: “pious”\n  - Replace with: “chorus”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3672 | “Come, Pammy.”\n         |        ^~~~~ Did you mean to spell `Pammy` this way?\nSuggest:\n  - Replace with: “Palmy”\n  - Replace with: “Pommy”\n  - Replace with: “Pam's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3677 | hand and was pulled out the door, just as Tom came back, preceding four gin\n    3678 | rickeys that clicked full of ice.\n         | ^~~~~~~ Did you mean to spell `rickeys` this way?\nSuggest:\n  - Replace with: “rickets”\n  - Replace with: “Rickey's”\n  - Replace with: “rice's”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    3687 | “It seems that pretty soon the earth’s going to fall into the sun—or wait a\n         | ^ This quote has no termination.\n\n\n\nLint:    Regionalism (63 priority)\nMessage: |\n    3690 | “Come outside,” he suggested to Gatsby, “I’d like you to have a look at the\n         |                                                          ^~~~ American English prefers `take a look` over `have a look`.\n    3691 | place.”\nSuggest:\n  - Replace with: “take”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3709 | We had luncheon in the dining-room, darkened too against the heat, and drank\n    3710 | down nervous gayety with the cold ale.\n         |              ^~~~~~ Did you mean to spell `gayety` this way?\nSuggest:\n  - Replace with: “gaiety”\n  - Replace with: “gamely”\n  - Replace with: “gamete”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    3736 | mouth opened a little, and he looked at Gatsby, and then back at Daisy as if he\n    3737 | had just recognized her as some one he knew a long time ago.\n         |                            ^~~~~~~~ Did you mean the closed compound `someone`?\nSuggest:\n  - Replace with: “someone”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    3739 | “You resemble the advertisement of the man,” she went on innocently. ‘You know\n    3740 | the advertisement of the man—”\n         |                              ^ This quote has no termination.\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n    3765 | They went up-stairs to get ready while we three men stood there shuffling the\n         |           ^~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “upstairs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3809 | “Well, you take my coupé and let me drive your car to town.”\n         |                    ^~~~~ Did you mean to spell `coupé` this way?\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3828 | “You take Nick and Jordan. We’ll follow you in the coupé.”\n         |                                                    ^~~~~ Did you mean to spell `coupé` this way?\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    3841 | “You think I’m pretty dumb, don’t you?” he suggested. “Perhaps I am, but I have\n    3842 | a—almost a second sight, sometimes, that tells me what to do. Maybe you don’t\n         | ^ Incorrect indefinite article.\nSuggest:\n  - Replace with: “an”\n\n\n\nLint:    Punctuation (31 priority)\nMessage: |\n    3864 | “Nevertheless he’s an Oxford man.”\n         |  ^~~~~~~~~~~~ Discourse markers at the beginning of a sentence should be followed by a comma.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3874 | while in silence. Then as Doctor T. J. Eckleburg’s faded eyes came into sight\n         |                                  ^~ Did you mean to spell `T.` this way?\nSuggest:\n  - Replace with: “Ta”\n  - Replace with: “Ti”\n  - Replace with: “To”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3874 | while in silence. Then as Doctor T. J. Eckleburg’s faded eyes came into sight\n         |                                     ^~ Did you mean to spell `J.` this way?\nSuggest:\n  - Replace with: “Jo”\n  - Replace with: “J”\n  - Replace with: “Jg”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3874 | while in silence. Then as Doctor T. J. Eckleburg’s faded eyes came into sight\n         |                                        ^~~~~~~~~~~ Did you mean to spell `Eckleburg’s` this way?\n    3875 | down the road, I remembered Gatsby’s caution about gasoline.\nSuggest:\n  - Replace with: “Excalibur's”\n  - Replace with: “Vicksburg's”\n  - Replace with: “Heckler's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3923 | The coupé flashed by us with a flurry of dust and the flash of a waving hand.\n         |     ^~~~~ Did you mean to spell `coupé` this way?\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3937 | world, and the shock had made him physically sick. I stared at him and then at\n         |                                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3938 | Tom, who had made a parallel discovery less than an hour before—and it occurred\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3939 | to me that there was no difference between men, in intelligence or race, so\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3940 | profound as the difference between the sick and the well. Wilson was so sick\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 46 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3948 | behind. Over the ashheaps the giant eyes of Doctor T. J. Eckleburg kept their\n         |                  ^~~~~~~~ Did you mean to spell `ashheaps` this way?\nSuggest:\n  - Replace with: “asthma's”\n  - Replace with: “airheads”\n  - Replace with: “ashcans”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    3948 | behind. Over the ashheaps the giant eyes of Doctor T. J. Eckleburg kept their\n         |                  ^~~~~~~~ `ashheaps` should probably be written as `ash heaps`.\nSuggest:\n  - Replace with: “ash heaps”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3948 | behind. Over the ashheaps the giant eyes of Doctor T. J. Eckleburg kept their\n         |                                                    ^~ Did you mean to spell `T.` this way?\nSuggest:\n  - Replace with: “Ta”\n  - Replace with: “Ti”\n  - Replace with: “To”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3948 | behind. Over the ashheaps the giant eyes of Doctor T. J. Eckleburg kept their\n         |                                                       ^~ Did you mean to spell `J.` this way?\nSuggest:\n  - Replace with: “Jo”\n  - Replace with: “J”\n  - Replace with: “Jg”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3948 | behind. Over the ashheaps the giant eyes of Doctor T. J. Eckleburg kept their\n         |                                                          ^~~~~~~~~ Did you mean to spell `Eckleburg` this way?\n    3949 | vigil, but I perceived, after a moment, that other eyes were regarding us with\nSuggest:\n  - Replace with: “Excalibur”\n  - Replace with: “Vicksburg”\n  - Replace with: “Heckler”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3955 | into her face like objects into a slowly developing picture. Her expression was\n         |                                                              ^~~~~~~~~~~~~~~~~~~\n    3956 | curiously familiar—it was an expression I had often seen on women’s faces, but\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3957 | on Myrtle Wilson’s face it seemed purposeless and inexplicable until I realized\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3958 | that her eyes, wide with jealous terror, were fixed not on Tom, but on Jordan\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3959 | Baker, whom she took to be his wife.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 52 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3963 | ago secure and inviolate, were slipping precipitately from his control. Instinct\n         |                                                                         ^~~~~~~~~\n    3964 | made him step on the accelerator with the double purpose of overtaking Daisy and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3965 | leaving Wilson behind, and we sped along toward Astoria at fifty miles an hour,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3966 | until, among the spidery girders of the elevated, we came in sight of the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3967 | easy-going blue coupé.\n         | ~~~~~~~~~~~~~~~~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3966 | until, among the spidery girders of the elevated, we came in sight of the\n    3967 | easy-going blue coupé.\n         |                 ^~~~~ Did you mean to spell `coupé` this way?\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3974 | The word “sensuous” had the effect of further disquieting Tom, but before he\n    3975 | could invent a protest the coupé came to a stop, and Daisy signalled us to draw\n         |                            ^~~~~ Did you mean to spell `coupé` this way?\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    3975 | could invent a protest the coupé came to a stop, and Daisy signalled us to draw\n         |                                                            ^~~~~~~~~ Did you mean to spell `signalled` this way?\n    3976 | up alongside.\nSuggest:\n  - Replace with: “signaled”\n  - Replace with: “signaler”\n  - Replace with: “signalized”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    3997 | The prolonged and tumultuous argument that ended by herding us into that room\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3998 | eludes me, though I have a sharp physical memory that, in the course of it, my\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    3999 | underwear kept climbing like a damp snake around my legs and intermittent beads\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4000 | of sweat raced cool across my back. The notion originated with Daisy’s\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 49 words long.\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    4004 | thought, or pretended to think, that we were being very funny . . .\n         |                                                              ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    4010 | “It’s a swell suite,” whispered Jordan respectfully, and every one laughed.\n         |                                                          ^~~~~~~~~ Did you mean the closed compound `everyone`?\nSuggest:\n  - Replace with: “everyone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4016 | “Well, we’d better telephone for an axe———”\n         |                                     ^~~ Did you mean to spell `axe` this way?\nSuggest:\n  - Replace with: “ace”\n  - Replace with: “age”\n  - Replace with: “ale”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4054 | “Biloxi,” he answered shortly.\n         |  ^~~~~~ Did you mean to spell `Biloxi` this way?\nSuggest:\n  - Replace with: “Biko's”\n  - Replace with: “Bilbo's”\n  - Replace with: “Biro's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4056 | “A man named Biloxi. ‘Blocks’ Biloxi, and he made boxes—that’s a fact—and he was\n         |              ^~~~~~ Did you mean to spell `Biloxi` this way?\nSuggest:\n  - Replace with: “Biko's”\n  - Replace with: “Bilbo's”\n  - Replace with: “Biro's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4056 | “A man named Biloxi. ‘Blocks’ Biloxi, and he made boxes—that’s a fact—and he was\n         |                               ^~~~~~ Did you mean to spell `Biloxi` this way?\nSuggest:\n  - Replace with: “Biko's”\n  - Replace with: “Bilbo's”\n  - Replace with: “Biro's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4056 | “A man named Biloxi. ‘Blocks’ Biloxi, and he made boxes—that’s a fact—and he was\n    4057 | from Biloxi, Tennessee.”\n         |      ^~~~~~ Did you mean to spell `Biloxi` this way?\nSuggest:\n  - Replace with: “Biko's”\n  - Replace with: “Bilbo's”\n  - Replace with: “Biro's”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    4062 | wasn’t any connection.”\n         |                       ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4064 | “I used to know a Bill Biloxi from Memphis,” I remarked.\n         |                        ^~~~~~ Did you mean to spell `Biloxi` this way?\nSuggest:\n  - Replace with: “Biko's”\n  - Replace with: “Bilbo's”\n  - Replace with: “Biro's”\n\n\n\nLint:    Spelling (31 priority)\nMessage: |\n    4070 | the window, followed by intermittent cries of “Yea—ea—ea!” and finally by a\n         |                                                ^~~ If you mean the informal word for `yes` and not the biblical or legalistic `yea`, the standard spelling is `yeah`.\nSuggest:\n  - Replace with: “Yeah”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4073 | “We're getting old,” said Daisy. “lf we were young we’d rise and dance.”\n         |                                   ^~ Did you mean to spell `lf` this way?\nSuggest:\n  - Replace with: “la”\n  - Replace with: “lo”\n  - Replace with: “elf”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4075 | “Remember Biloxi,” Jordan warned her. ‘‘Where’d you know him, Tom?”\n         |           ^~~~~~ Did you mean to spell `Biloxi` this way?\nSuggest:\n  - Replace with: “Biko's”\n  - Replace with: “Bilbo's”\n  - Replace with: “Biro's”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    4075 | “Remember Biloxi,” Jordan warned her. ‘‘Where’d you know him, Tom?”\n         |                                                                   ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4077 | “Biloxi?” He concentrated with an effort. “I didn’t know him. He was a friend of\n         |  ^~~~~~ Did you mean to spell `Biloxi` this way?\nSuggest:\n  - Replace with: “Biko's”\n  - Replace with: “Bilbo's”\n  - Replace with: “Biro's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4083 | “Well, he said he knew you. He said he was raised in Louisville. Asa Bird\n         |                                                                  ^~~ Did you mean to spell `Asa` this way?\n    4084 | brought him around at the last minute and asked if we had room for him.”\nSuggest:\n  - Replace with: “Aha”\n  - Replace with: “Aka”\n  - Replace with: “As”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4093 | “Biloxi?”\n         |  ^~~~~~ Did you mean to spell `Biloxi` this way?\nSuggest:\n  - Replace with: “Biko's”\n  - Replace with: “Bilbo's”\n  - Replace with: “Biro's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4109 | “You must have gone there about the time Biloxi went to New Haven.”\n         |                                          ^~~~~~ Did you mean to spell `Biloxi` this way?\nSuggest:\n  - Replace with: “Biko's”\n  - Replace with: “Bilbo's”\n  - Replace with: “Biro's”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    4134 | won’t seem so stupid to yourself. . . . Look at the mint!”\n         |                                                          ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    4175 | me.”\n         |    ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4185 | At this point Jordan and I tried to go, but Tom and Gatsby insisted with\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4186 | competitive firmness that we remain—as though neither of them had anything to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4187 | conceal and it would be a privilege to partake vicariously of their emotions.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    4201 | sometimes”—but there was no laughter in his eyes—“to think that you didn’t\n         |                                                  ^ This quote has no termination.\n    4202 | know.”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    4202 | know.”\n         |      ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4241 | “Not at Kapiolani?” demanded Tom suddenly.\n         |         ^~~~~~~~~ Did you mean to spell `Kapiolani` this way?\nSuggest:\n  - Replace with: “Kaitlin”\n  - Replace with: “Kaposi”\n  - Replace with: “Kaolin”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4265 | Why—there’re things between Daisy and me that you’ll never know, things that\n         |     ^~~~~~~~ Did you mean to spell `there’re` this way?\nSuggest:\n  - Replace with: “there's”\n  - Replace with: “there'd”\n  - Replace with: “there'll”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4300 | “Who are you, anyhow?” broke out Tom. “You’re one of that bunch that hangs\n    4301 | around with Meyer Wolfshiem—that much I happen to know. I’ve made a little\n         |                   ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4307 | “He and this Wolfshiem bought up a lot of side-street drug-stores here and in\n         |              ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4321 | have you up on the betting laws too, but Wolfshiem scared him into shutting his\n         |                                          ^~~~~~~~~ Did you mean `Bolshie`?\n    4322 | mouth.”\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4337 | defending his name against accusations that had not been made. But with every\n         |                                                                ^~~~~~~~~~~~~~~\n    4338 | word she was drawing further and further into herself, so he gave that up, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4339 | only the dead dream fought on as the afternoon slipped away, trying to touch\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4340 | what was no longer tangible, struggling unhappily, undespairingly, toward that\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4341 | lost voice across the room.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4340 | what was no longer tangible, struggling unhappily, undespairingly, toward that\n         |                                                    ^~~~~~~~~~~~~~ Did you mean `despairingly`?\n    4341 | lost voice across the room.\nSuggest:\n  - Replace with: “despairingly”\n\n\n\nLint:    Repetition (127 priority)\nMessage: |\n    4347 | Her frightened eyes told that whatever intentions, whatever courage she had had,\n         |                                                                         ^~~~~~~ Did you mean to repeat this word?\n    4348 | were definitely gone.\nSuggest:\n  - Replace with: “had”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n    4350 | “You two start on home, Daisy,” said Tom. “In Mr. Gatsby’s car.”\n         |  ^~~ The possessive version of this word is more common in this context.\nSuggest:\n  - Replace with: “Your”\n  - Replace with: “You're a”\n  - Replace with: “You're an”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    4373 | “No . . . I just remembered that to-day’s my birthday.”\n         |    ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4377 | It was seven o’clock when we got into the coupé with him and started for Long\n         |                                           ^~~~~ Did you mean to spell `coupé` this way?\n    4378 | Island. Tom talked incessantly, exulting and laughing, but his voice was as\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4391 | The young Greek, Michaelis, who ran the coffee joint beside the ashheaps was the\n         |                  ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4391 | The young Greek, Michaelis, who ran the coffee joint beside the ashheaps was the\n         |                                                                 ^~~~~~~~ Did you mean to spell `ashheaps` this way?\n    4392 | principal witness at the inquest. He had slept through the heat until after\nSuggest:\n  - Replace with: “asthma's”\n  - Replace with: “airheads”\n  - Replace with: “ashcans”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    4391 | The young Greek, Michaelis, who ran the coffee joint beside the ashheaps was the\n         |                                                                 ^~~~~~~~ `ashheaps` should probably be written as `ash heaps`.\n    4392 | principal witness at the inquest. He had slept through the heat until after\nSuggest:\n  - Replace with: “ash heaps”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4394 | office—really sick, pale as his own pale hair and shaking all over. Michaelis\n         |                                                                     ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\n    4395 | advised him to go to bed, but Wilson refused, saying that he’d miss a lot of\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4402 | Michaelis was astonished; they had been neighbors for four years, and Wilson had\n         | ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4409 | So naturally Michaelis tried to find out what had happened, but Wilson wouldn’t\n         |              ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4412 | latter was getting uneasy, some workmen came past the door bound for his\n    4413 | restaurant, and Michaelis took the opportunity to get away, intending to come\n         |                 ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    4416 | he heard Mrs. Wilson’s voice, loud and scolding, down-stairs in the garage.\n         |                               ^~~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4426 | the next bend. Mavromichaelis wasn’t even sure of its color—he told the first\n         |                ^~~~~~~~~~~~~~ Did you mean `Carmichael's`?\nSuggest:\n  - Replace with: “Carmichael's”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4427 | policeman that it was light green. The other car, the one going toward New York,\n         |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4428 | came to rest a hundred yards beyond, and it’s driver hurried back to where\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4429 | Myrtle Wilson, her life violently extinguished, knelt in the road and mingled\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4430 | her thick dark blood with the dust.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Agreement (31 priority)\nMessage: |\n    4427 | policeman that it was light green. The other car, the one going toward New York,\n         |                                                       ^~~~~~~~~ `going` is a mass noun.\n    4428 | came to rest a hundred yards beyond, and it’s driver hurried back to where\nSuggest:\n  - Replace with: “one piece of going”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4432 | Michaelis and this man reached her first, but when they had torn open her\n         | ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4432 | Michaelis and this man reached her first, but when they had torn open her\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4433 | shirtwaist, still damp with perspiration, they saw that her left breast was\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4434 | swinging loose like a flap, and there was no need to listen for the heart\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4435 | beneath. The mouth was wide open and ripped a little at the corners, as though\n         | ~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4442 | “Wreck!” said Tom. “That’s good. Wilson’ll have a little business at last.”\n         |                                  ^~~~~~~~~ Did you mean `Wilson's`?\nSuggest:\n  - Replace with: “Wilson's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4451 | garage, a sound which as we got out of the coupé and walked toward the door\n         |                                            ^~~~~ Did you mean to spell `coupé` this way?\n    4452 | resolved itself into the words “Oh, my God!” uttered over and over in a gasping\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4466 | Myrtle Wilson’s body, wrapped in a blanket, and then in another blanket, as\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4467 | though she suffered from a chill in the hot night, lay on a work-table by the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4468 | wall, and Tom, with his back to us, was bending over it, motionless. Next to him\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4470 | a little book. At first I couldn’t find the source of the high, groaning words\n         |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4471 | that echoed clamorously through the bare garage—then I saw Wilson standing on\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4472 | the raised threshold of his office, swaying back and forth and holding to the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4473 | doorposts with both hands. Some man was talking to him in a low voice and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4470 | a little book. At first I couldn’t find the source of the high, groaning words\n    4471 | that echoed clamorously through the bare garage—then I saw Wilson standing on\n         |             ^~~~~~~~~~~ Did you mean to spell `clamorously` this way?\nSuggest:\n  - Replace with: “glamorously”\n  - Replace with: “clamorous”\n  - Replace with: “clangorously”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    4470 | a little book. At first I couldn’t find the source of the high, groaning words\n    4471 | that echoed clamorously through the bare garage—then I saw Wilson standing on\n         |             ^~~~~~~~~~~ `clamorously` should probably be written as `cl amorously`.\nSuggest:\n  - Replace with: “cl amorously”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4479 | “Oh, my Ga-od! Oh, my Ga-od! Oh, Ga-od! Oh, my Ga-od!”\n         |            ^~ Did you mean to spell `od` this way?\nSuggest:\n  - Replace with: “odd”\n  - Replace with: “ode”\n  - Replace with: “of”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4479 | “Oh, my Ga-od! Oh, my Ga-od! Oh, Ga-od! Oh, my Ga-od!”\n         |                          ^~ Did you mean to spell `od` this way?\nSuggest:\n  - Replace with: “odd”\n  - Replace with: “ode”\n  - Replace with: “of”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4479 | “Oh, my Ga-od! Oh, my Ga-od! Oh, Ga-od! Oh, my Ga-od!”\n         |                                     ^~ Did you mean to spell `od` this way?\nSuggest:\n  - Replace with: “odd”\n  - Replace with: “ode”\n  - Replace with: “of”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4479 | “Oh, my Ga-od! Oh, my Ga-od! Oh, Ga-od! Oh, my Ga-od!”\n         |                                                   ^~ Did you mean to spell `od` this way?\nSuggest:\n  - Replace with: “odd”\n  - Replace with: “ode”\n  - Replace with: “of”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    4484 | “M-a-v—” the policeman was saying, “—o———”\n         |                                      ^ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “O”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4484 | “M-a-v—” the policeman was saying, “—o———”\n         |                                      ^ Did you mean to spell `o` this way?\nSuggest:\n  - Replace with: “of”\n  - Replace with: “oh”\n  - Replace with: “oi”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    4486 | “No, r—” corrected the man, “M-a-v-r-o———”\n         |      ^ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “R”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4486 | “No, r—” corrected the man, “M-a-v-r-o———”\n         |      ^ Did you mean to spell `r` this way?\nSuggest:\n  - Replace with: “re”\n  - Replace with: “a”\n  - Replace with: “e”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4486 | “No, r—” corrected the man, “M-a-v-r-o———”\n         |                                    ^ Did you mean to spell `r` this way?\nSuggest:\n  - Replace with: “re”\n  - Replace with: “a”\n  - Replace with: “e”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4486 | “No, r—” corrected the man, “M-a-v-r-o———”\n         |                                      ^ Did you mean to spell `o` this way?\nSuggest:\n  - Replace with: “of”\n  - Replace with: “oh”\n  - Replace with: “oi”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    4490 | “r—” said the policeman, “o———”\n         |  ^ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “R”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4490 | “r—” said the policeman, “o———”\n         |  ^ Did you mean to spell `r` this way?\nSuggest:\n  - Replace with: “re”\n  - Replace with: “a”\n  - Replace with: “e”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    4490 | “r—” said the policeman, “o———”\n         |                           ^ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “O”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4490 | “r—” said the policeman, “o———”\n         |                           ^ Did you mean to spell `o` this way?\nSuggest:\n  - Replace with: “of”\n  - Replace with: “oh”\n  - Replace with: “oi”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4499 | “Auto hit her. Ins’antly killed.”\n         |                ^~~~~~~~~ Did you mean to spell `Ins’antly` this way?\nSuggest:\n  - Replace with: “Instantly”\n  - Replace with: “Insanely”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    4503 | “She ran out ina road. Son-of-a-bitch didn’t even stopus car.”\n         |              ^~~ The canonical dictionary spelling is title case: `Ina`.\nSuggest:\n  - Replace with: “Ina”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4503 | “She ran out ina road. Son-of-a-bitch didn’t even stopus car.”\n         |              ^~~ Did you mean to spell `ina` this way?\nSuggest:\n  - Replace with: “in”\n  - Replace with: “ind”\n  - Replace with: “inf”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4503 | “She ran out ina road. Son-of-a-bitch didn’t even stopus car.”\n         |                                                   ^~~~~~ Did you mean to spell `stopus` this way?\nSuggest:\n  - Replace with: “stop's”\n  - Replace with: “stops”\n  - Replace with: “stoups”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    4503 | “She ran out ina road. Son-of-a-bitch didn’t even stopus car.”\n         |                                                   ^~~~~~ `stopus` has a missing space between words.\nSuggest:\n  - Replace with: “st opus”\n  - Replace with: “stop us”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4505 | “There was two cars,” said Michaelis, “one comin’, one goin’, see?”\n         |                            ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4505 | “There was two cars,” said Michaelis, “one comin’, one goin’, see?”\n         |                                            ^~~~~ Did you mean to spell `comin` this way?\nSuggest:\n  - Replace with: “coin”\n  - Replace with: “comic”\n  - Replace with: “coming”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    4505 | “There was two cars,” said Michaelis, “one comin’, one goin’, see?”\n         |                                            ^~~~~ `comin` has a missing space between words.\nSuggest:\n  - Replace with: “co min”\n  - Replace with: “com in”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4505 | “There was two cars,” said Michaelis, “one comin’, one goin’, see?”\n         |                                                        ^~~~ Did you mean to spell `goin` this way?\nSuggest:\n  - Replace with: “gain”\n  - Replace with: “gin”\n  - Replace with: “goon”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    4505 | “There was two cars,” said Michaelis, “one comin’, one goin’, see?”\n         |                                                        ^~~~ `goin` should probably be written as `go in`.\nSuggest:\n  - Replace with: “go in”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4509 | “One goin’ each way. Well, she”—his hand rose toward the blankets but stopped\n         |      ^~~~ Did you mean to spell `goin` this way?\nSuggest:\n  - Replace with: “gain”\n  - Replace with: “gin”\n  - Replace with: “goon”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    4509 | “One goin’ each way. Well, she”—his hand rose toward the blankets but stopped\n         |      ^~~~ `goin` should probably be written as `go in`.\nSuggest:\n  - Replace with: “go in”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    4509 | “One goin’ each way. Well, she”—his hand rose toward the blankets but stopped\n    4510 | half way and fell to his side—“she ran out there an’ the one comin’ from N’York\n         |                               ^ This quote has no termination.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    4510 | half way and fell to his side—“she ran out there an’ the one comin’ from N’York\n         |                                                  ^~ Incorrect indefinite article.\n    4511 | knock right into her, goin’ thirty or forty miles an hour.”\nSuggest:\n  - Replace with: “a”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4510 | half way and fell to his side—“she ran out there an’ the one comin’ from N’York\n         |                                                              ^~~~~ Did you mean to spell `comin` this way?\n    4511 | knock right into her, goin’ thirty or forty miles an hour.”\nSuggest:\n  - Replace with: “coin”\n  - Replace with: “comic”\n  - Replace with: “coming”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    4510 | half way and fell to his side—“she ran out there an’ the one comin’ from N’York\n         |                                                              ^~~~~ `comin` has a missing space between words.\n    4511 | knock right into her, goin’ thirty or forty miles an hour.”\nSuggest:\n  - Replace with: “co min”\n  - Replace with: “com in”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4510 | half way and fell to his side—“she ran out there an’ the one comin’ from N’York\n         |                                                                          ^~~~~~ Did you mean `York`?\n    4511 | knock right into her, goin’ thirty or forty miles an hour.”\nSuggest:\n  - Replace with: “York”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4510 | half way and fell to his side—“she ran out there an’ the one comin’ from N’York\n    4511 | knock right into her, goin’ thirty or forty miles an hour.”\n         |                       ^~~~ Did you mean to spell `goin` this way?\nSuggest:\n  - Replace with: “gain”\n  - Replace with: “gin”\n  - Replace with: “goon”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    4510 | half way and fell to his side—“she ran out there an’ the one comin’ from N’York\n    4511 | knock right into her, goin’ thirty or forty miles an hour.”\n         |                       ^~~~ `goin` should probably be written as `go in`.\nSuggest:\n  - Replace with: “go in”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    4511 | knock right into her, goin’ thirty or forty miles an hour.”\n         |                                                           ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4523 | “No, but the car passed me down the road, going faster’n forty. Going fifty,\n         |                                                 ^~~~~~~~ Did you mean to spell `faster’n` this way?\nSuggest:\n  - Replace with: “falter's”\n  - Replace with: “feaster's”\n  - Replace with: “fester's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4544 | New York. I was bringing you that coupé we’ve been talking about. That yellow\n         |                                   ^~~~~ Did you mean to spell `coupé` this way?\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4560 | “It’s a blue car, a coupé.”\n         |                     ^~~~~ Did you mean to spell `coupé` this way?\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    4564 | Some one who had been driving a little behind us confirmed this, and the\n         | ^~~~~~~~ Did you mean the closed compound `someone`?\nSuggest:\n  - Replace with: “Someone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4572 | “If somebody’ll come here and sit with him,” he snapped authoritatively. He\n         |     ^~~~~~~~~~~ Did you mean `somebody's`?\nSuggest:\n  - Replace with: “somebody's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4582 | Tom drove slowly until we were beyond the bend—then his foot came down hard, and\n    4583 | the coupé raced along through the night. In a little while I heard a low husky\n         |     ^~~~~ Did you mean to spell `coupé` this way?\nSuggest:\n  - Replace with: “coup”\n  - Replace with: “coupe”\n  - Replace with: “coups”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4588 | The Buchanans’ house floated suddenly toward us through the dark rustling trees.\n         |     ^~~~~~~~~ Did you mean to spell `Buchanans` this way?\nSuggest:\n  - Replace with: “Buchanan's”\n  - Replace with: “Buchanan”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4635 | the house in a moment; I wouldn’t have been surprised to see sinister faces, the\n    4636 | faces of “Wolfshiem’s people,” behind him in the dark shrubbery.\n         |           ^~~~~~~~~~~ Did you mean to spell `Wolfshiem’s` this way?\nSuggest:\n  - Replace with: “Waldheim's”\n  - Replace with: “Welshmen's”\n  - Replace with: “Wolfe's”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    4679 | “Don’t tell me, old sport.” He winced. “Anyhow—Daisy stepped on it. I tried to\n         |                                        ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4739 | Toward dawn I heard a taxi go up Gatsby’s drive, and immediately I jumped out of\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4740 | bed and began to dress—I felt that I had something to tell him, something to\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4741 | warn him about, and morning would be too late.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4768 | It was this night that he told me the strange story of his youth with Dan\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4769 | Cody—told it to me because “Jay Gatsby” had broken up like glass against Tom’s\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4770 | hard malice, and the long secret extravaganza was played out. I think that he\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4780 | her as his tent out at camp was to him. There was a ripe mystery about it, a\n         |                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4781 | hint of bedrooms up-stairs more beautiful and cool than other bedrooms, of gay\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4782 | and radiant activities taking place through its corridors, and of romances that\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4783 | were not musty and laid away already in lavender but fresh and breathing and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4784 | redolent of this year’s shining motor-cars and of dances whose flowers were\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4785 | scarcely withered. It excited him, too, that many men had already loved Daisy—it\n         | ~~~~~~~~~~~~~~~~~~ This sentence is 63 words long.\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n    4780 | her as his tent out at camp was to him. There was a ripe mystery about it, a\n    4781 | hint of bedrooms up-stairs more beautiful and cool than other bedrooms, of gay\n         |                  ^~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “upstairs”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4797 | pretenses. I don’t mean that he had traded on his phantom millions, but he had\n         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4798 | deliberately given Daisy a sense of security; he let her believe that he was a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4799 | person from much the same strata as herself—that he was fully able to take care\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4800 | of her. As a matter of fact, he had no such facilities—he had no comfortable\n         | ~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4814 | kissed her curious and lovely mouth. She had caught a cold, and it made her\n         |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4815 | voice huskier and more charming than ever, and Gatsby was overwhelmingly aware\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4816 | of the youth and mystery that wealth imprisons and preserves, of the freshness\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4817 | of many clothes, and of Daisy, gleaming like silver, safe and proud above the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4818 | hot struggles of the poor.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 53 words long.\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    4822 | was in love with me too. She thought I knew a lot because I knew different\n    4823 | things from her . . . Well, there I was, ’way off my ambitions, getting deeper\n         |                ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4833 | They had never been closer in their month of love, nor communicated more\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4834 | profoundly one with another, than when she brushed silent lips against his\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4835 | coat’s shoulder or when he touched the end of her fingers, gently, as though she\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4836 | were asleep.\n         | ~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4850 | saxophones wailed the hopeless comment of the “Beale Street Blues” while a\n         |                                                ^~~~~ Did you mean to spell `Beale` this way?\n    4851 | hundred pairs of golden and silver slippers shuffled the shining dust. At the\nSuggest:\n  - Replace with: “Bale”\n  - Replace with: “Beagle”\n  - Replace with: “Belle”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    4856 | Through this twilight universe Daisy began to move again with the season;\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4857 | suddenly she was again keeping half a dozen dates a day with half a dozen men,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4858 | and drowsing asleep at dawn with the beads and chiffon of an evening dress\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    4859 | tangled among dying orchids on the floor beside her bed. And all the time\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 52 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4875 | “I don’t think she ever loved him.” Gatsby turned around from a window and\n    4876 | looked at me challengingly. “You must remember, old sport, she was very excited\n         |              ^~~~~~~~~~~~~ Did you mean `challenging`?\nSuggest:\n  - Replace with: “challenging”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n    4883 | “Of course she might have loved him just for a minute, when they were first\n    4884 | married—and loved me more even then, do you see?”\n         |                      ^~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\nSuggest:\n  - Replace with: “evener”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4921 | “I’m going to drain the pool to-day, Mr. Gatsby. Leaves’ll start falling pretty\n         |                                                  ^~~~~~~~~ Did you mean to spell `Leaves’ll` this way?\n    4922 | soon, and then there’s always trouble with the pipes.”\nSuggest:\n  - Replace with: “Leave's”\n  - Replace with: “Leaven's”\n  - Replace with: “Leaver's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4943 | “I suppose Daisy’ll call too.” He looked at me anxiously, as if he hoped I’d\n         |            ^~~~~~~~ Did you mean `Daisy's`?\nSuggest:\n  - Replace with: “Daisy's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    4980 | “I’ve left Daisy’s house,” she said. “I’m at Hempstead, and I’m going down to\n         |                                              ^~~~~~~~~ Did you mean `Homestead`?\n    4981 | Southampton this afternoon.”\nSuggest:\n  - Replace with: “Homestead”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5015 | When I passed the ashheaps on the train that morning I had crossed deliberately\n         |                   ^~~~~~~~ Did you mean to spell `ashheaps` this way?\nSuggest:\n  - Replace with: “asthma's”\n  - Replace with: “airheads”\n  - Replace with: “ashcans”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    5015 | When I passed the ashheaps on the train that morning I had crossed deliberately\n         |                   ^~~~~~~~ `ashheaps` should probably be written as `ash heaps`.\nSuggest:\n  - Replace with: “ash heaps”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5016 | to the other side of the car. I supposed there’d be a curious crowd around there\n         |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5017 | all day with little boys searching for dark spots in the dust, and some\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5018 | garrulous man telling over and over what had happened, until it became less and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5019 | less real even to him and he could tell it no longer, and Myrtle Wilson’s tragic\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5020 | achievement was forgotten. Now I want to go back a little and tell what happened\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 56 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5027 | intolerable part of the affair. Some one, kind or curious, took her in his car\n         |                                 ^~~~~~~~ Did you mean the closed compound `someone`?\nSuggest:\n  - Replace with: “Someone”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5032 | For a while the door of the office was open, and every one who came into the\n         |                                                  ^~~~~~~~~ Did you mean the closed compound `everyone`?\n    5033 | garage glanced irresistibly through it. Finally some one said it was a shame,\nSuggest:\n  - Replace with: “everyone”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5033 | garage glanced irresistibly through it. Finally some one said it was a shame,\n         |                                                 ^~~~~~~~ Did you mean the closed compound `someone`?\n    5034 | and closed the door. Michaelis and several other men were with him; first, four\nSuggest:\n  - Replace with: “someone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5034 | and closed the door. Michaelis and several other men were with him; first, four\n         |                      ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    5034 | and closed the door. Michaelis and several other men were with him; first, four\n         |                                                                            ^~~~ An Oxford comma is necessary here.\n    5035 | or five men, later two or three men. Still later Michaelis had to ask the last\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5035 | or five men, later two or three men. Still later Michaelis had to ask the last\n         |                                                  ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\n    5036 | stranger to wait there fifteen minutes longer, while he went back to his own\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5041 | quieter and began to talk about the yellow car. He announced that he had a way\n         |                                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5042 | of finding out whom the yellow car belonged to, and then he blurted out that a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5043 | couple of months ago his wife had come from the city with her face bruised and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5044 | her nose swollen.\n         | ~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5047 | again in his groaning voice. Michaelis made a clumsy attempt to distract him.\n         |                              ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5057 | The hard brown beetles kept thudding against the dull light, and whenever\n    5058 | Michaelis heard a car go tearing along the road outside it sounded to him like\n         | ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    5057 | The hard brown beetles kept thudding against the dull light, and whenever\n    5058 | Michaelis heard a car go tearing along the road outside it sounded to him like\n         |                   ^~~~~~ Did you mean the closed compound noun “cargo”?\nSuggest:\n  - Replace with: “cargo”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5059 | the car that hadn’t stopped a few hours before. He didn’t like to go into the\n         |                                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5060 | garage, because the work bench was stained where the body had been lying, so he\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5061 | moved uncomfortably around the office—he knew every object in it before\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5062 | morning—and from time to time sat down beside Wilson trying to keep him more\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5063 | quiet.\n         | ~~~~~~ This sentence is 50 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    5059 | the car that hadn’t stopped a few hours before. He didn’t like to go into the\n    5060 | garage, because the work bench was stained where the body had been lying, so he\n         |                     ^~~~~~~~~~ Did you mean the closed compound noun “workbench”?\nSuggest:\n  - Replace with: “workbench”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n    5062 | morning—and from time to time sat down beside Wilson trying to keep him more\n         |                                                                         ^~~~~\n    5063 | quiet.\n         | ~~~~~ This is not an error, but an inflected form of this adjective also exists\nSuggest:\n  - Replace with: “quieter”\n\n\n\nLint:    WordChoice (127 priority)\nMessage: |\n    5065 | “Have you got a church you go to sometimes, George? Maybe even if you haven’t\n         |                               ^~ Use `too` here to mean ‘also’ or an excessive degree.\nSuggest:\n  - Replace with: “too”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5087 | Michaelis opened the drawer nearest his hand. There was nothing in it but a\n         | ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5102 | Michaelis didn’t see anything odd in that, and he gave Wilson a dozen reasons\n         | ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    5121 | Wilson shook his head. His eyes narrowed and his mouth widened slightly with the\n    5122 | ghost of a superior “Hm!”\n         |                      ^~ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “HM”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5121 | Wilson shook his head. His eyes narrowed and his mouth widened slightly with the\n    5122 | ghost of a superior “Hm!”\n         |                      ^~ Did you mean to spell `Hm` this way?\nSuggest:\n  - Replace with: “Ha”\n  - Replace with: “Ham”\n  - Replace with: “He”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5128 | Michaelis had seen this too, but it hadn’t occurred to him that there was any\n         | ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5136 | He began to rock again, and Michaelis stood twisting the leash in his hand.\n         |                             ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5146 | Wilson’s glazed eyes turned out to the ashheaps, where small gray clouds took on\n         |                                        ^~~~~~~~ Did you mean to spell `ashheaps` this way?\n    5147 | fantastic shapes and scurried here and there in the faint dawn wind.\nSuggest:\n  - Replace with: “asthma's”\n  - Replace with: “airheads”\n  - Replace with: “ashcans”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    5146 | Wilson’s glazed eyes turned out to the ashheaps, where small gray clouds took on\n         |                                        ^~~~~~~~ `ashheaps` should probably be written as `ash heaps`.\n    5147 | fantastic shapes and scurried here and there in the faint dawn wind.\nSuggest:\n  - Replace with: “ash heaps”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    5151 | and walked to the rear window and leaned with his face pressed against it—“and I\n         |                                                                           ^ This quote has no termination.\n    5152 | said ‘God knows what you’ve been doing, everything you’ve been doing. You may\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    5153 | fool me, but you can’t fool God!’”\n         |                                  ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5155 | Standing behind him, Michaelis saw with a shock that he was looking at the eyes\n         |                      ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5155 | Standing behind him, Michaelis saw with a shock that he was looking at the eyes\n    5156 | of Doctor T. J. Eckleburg, which had just emerged, pale and enormous, from the\n         |           ^~ Did you mean to spell `T.` this way?\nSuggest:\n  - Replace with: “Ta”\n  - Replace with: “Ti”\n  - Replace with: “To”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5156 | of Doctor T. J. Eckleburg, which had just emerged, pale and enormous, from the\n         |              ^~ Did you mean to spell `J.` this way?\nSuggest:\n  - Replace with: “Jo”\n  - Replace with: “J”\n  - Replace with: “Jg”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5156 | of Doctor T. J. Eckleburg, which had just emerged, pale and enormous, from the\n         |                 ^~~~~~~~~ Did you mean to spell `Eckleburg` this way?\nSuggest:\n  - Replace with: “Excalibur”\n  - Replace with: “Vicksburg”\n  - Replace with: “Heckler”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5161 | “That’s an advertisement,” Michaelis assured him. Something made him turn away\n         |                            ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    5162 | from the window and look back into the room. But Wilson stood there a long time,\n    5163 | his face close to the window pane, nodding into the twilight.\n         |                       ^~~~~~~~~~~ Did you mean the closed compound noun “windowpane”?\nSuggest:\n  - Replace with: “windowpane”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5165 | By six o’clock Michaelis was worn out, and grateful for the sound of a car\n         |                ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5168 | man ate together. Wilson was quieter now, and Michaelis went home to sleep; when\n         |                                               ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5171 | His movements—he was on foot all the time—were afterward traced to Port\n    5172 | Roosevelt and then to Gad’s Hill, where he bought a sandwich that he didn’t eat,\n         |                       ^~~~~ Did you mean to spell `Gad’s` this way?\nSuggest:\n  - Replace with: “Gab's”\n  - Replace with: “Gag's”\n  - Replace with: “Gal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5173 | and a cup of coffee. He must have been tired and walking slowly, for he didn’t\n    5174 | reach Gad’s Hill until noon. Thus far there was no difficulty in accounting for\n         |       ^~~~~ Did you mean to spell `Gad’s` this way?\nSuggest:\n  - Replace with: “Gab's”\n  - Replace with: “Gag's”\n  - Replace with: “Gal's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5177 | hours he disappeared from view. The police, on the strength of what he said to\n    5178 | Michaelis, that he “had a way of finding out,” supposed that he spent that time\n         | ^~~~~~~~~ Did you mean to spell `Michaelis` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Micheal's”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5181 | easier, surer way of finding out what he wanted to know. By half-past two he was\n    5182 | in West Egg, where he asked some one the way to Gatsby’s house. So by that time\n         |                             ^~~~~~~~ Did you mean the closed compound `someone`?\nSuggest:\n  - Replace with: “someone”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    5204 | where poor ghosts, breathing dreams like air, drifted fortuitously about . . .\n         |                                                                         ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    5205 | like that ashen, fantastic figure gliding toward him through the amorphous\n         | ^~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Like”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5208 | The chauffeur—he was one of Wolfshiem’s protégés—heard the shots—afterward he\n         |                             ^~~~~~~~~~~ Did you mean to spell `Wolfshiem’s` this way?\nSuggest:\n  - Replace with: “Waldheim's”\n  - Replace with: “Welshmen's”\n  - Replace with: “Wolfe's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5208 | The chauffeur—he was one of Wolfshiem’s protégés—heard the shots—afterward he\n         |                                         ^~~~~~~~ Did you mean `proteges`?\n    5209 | could only say that he hadn’t thought anything much about them. I drove from the\nSuggest:\n  - Replace with: “proteges”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5230 | and out of Gatsby’s front door. A rope stretched across the main gate and a\n         |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5231 | policeman by it kept out the curious, but little boys soon discovered that they\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5232 | could enter through my yard, and there were always a few of them clustered\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5233 | open-mouthed about the pool. Some one with a positive manner, perhaps a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5233 | open-mouthed about the pool. Some one with a positive manner, perhaps a\n         |                              ^~~~~~~~ Did you mean the closed compound `someone`?\nSuggest:\n  - Replace with: “Someone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5239 | untrue. When Michaelis’s testimony at the inquest brought to light Wilson’s\n         |              ^~~~~~~~~~~ Did you mean to spell `Michaelis’s` this way?\nSuggest:\n  - Replace with: “Michael's”\n  - Replace with: “Michaela's”\n  - Replace with: “Michaelmas's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5240 | suspicions of his wife I thought the whole tale would shortly be served up in\n    5241 | racy pasquinade—but Catherine, who might have said anything, didn’t say a word.\n         |      ^~~~~~~~~~ Did you mean `masquerade`?\nSuggest:\n  - Replace with: “masquerade”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5242 | She showed a surprising amount of character about it too—looked at the coroner\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5243 | with determined eyes under that corrected brow of hers, and swore that her\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5244 | sister had never seen Gatsby, that her sister was completely happy with her\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5245 | husband, that her sister had been into no mischief whatever. She convinced\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 50 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5253 | referred to me. At first I was surprised and confused; then, as he lay in his\n         |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5254 | house and didn’t move or breathe or speak, hour upon hour, it grew upon me that\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5255 | I was responsible, because no one else was interested—interested, I mean, with\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5256 | that intense personal interest to which every one has some vague right at the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5257 | end.\n         | ~~~~ This sentence is 57 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5255 | I was responsible, because no one else was interested—interested, I mean, with\n    5256 | that intense personal interest to which every one has some vague right at the\n         |                                         ^~~~~~~~~ Did you mean the closed compound `everyone`?\n    5257 | end.\nSuggest:\n  - Replace with: “everyone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5279 | Meyer Wolfshiem’s name wasn’t in the phone book. The butler gave me his office\n         |       ^~~~~~~~~~~ Did you mean to spell `Wolfshiem’s` this way?\nSuggest:\n  - Replace with: “Waldheim's”\n  - Replace with: “Welshmen's”\n  - Replace with: “Wolfe's”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5299 | Some one started to ask me questions, but I broke away and going up-stairs\n         | ^~~~~~~~ Did you mean the closed compound `someone`?\nSuggest:\n  - Replace with: “Someone”\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n    5299 | Some one started to ask me questions, but I broke away and going up-stairs\n         |                                                                  ^~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\n    5300 | looked hastily through the unlocked parts of his desk—he’d never told me\nSuggest:\n  - Replace with: “upstairs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5304 | Next morning I sent the butler to New York with a letter to Wolfshiem, which\n         |                                                             ^~~~~~~~~ Did you mean `Bolshie`?\n    5305 | asked for information and urged him to come out on the next train. That request\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5308 | neither a wire nor Mr. Wolfshiem arrived; no one arrived except more police and\n         |                        ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5309 | photographers and newspaper men. When the butler brought back Wolfshiem’s answer\n         |                                                               ^~~~~~~~~~~ Did you mean to spell `Wolfshiem’s` this way?\n    5310 | I began to have a feeling of defiance, of scornful solidarity between Gatsby and\nSuggest:\n  - Replace with: “Waldheim's”\n  - Replace with: “Welshmen's”\n  - Replace with: “Wolfe's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5313 | Dear Mr. Carraway. This has been one of the most terrible shocks of my life to\n         |          ^~~~~~~~ Did you mean to spell `Carraway` this way?\nSuggest:\n  - Replace with: “Caraway”\n  - Replace with: “Caraways”\n  - Replace with: “Castaway”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5322 | >\n    5323 | > Meyer Wolfshiem\n         |         ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5327 | Let me know about the funeral etc do not know his family at all.\n         |                               ^~~ Did you mean to spell `etc` this way?\nSuggest:\n  - Replace with: “eta”\n  - Replace with: “etc.”\n  - Replace with: “enc”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5333 | “This is Slagle speaking . . .”\n         |          ^~~~~~ Did you mean to spell `Slagle` this way?\nSuggest:\n  - Replace with: “Slag's”\n  - Replace with: “Sable”\n  - Replace with: “Sage”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    5333 | “This is Slagle speaking . . .”\n         |                         ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5341 | “Young Parke’s in trouble,” he said rapidly. “They picked him up when he handed\n         |        ^~~~~~~ Did you mean to spell `Parke’s` this way?\nSuggest:\n  - Replace with: “Parker's”\n  - Replace with: “Parks's”\n  - Replace with: “Park's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5343 | numbers just five minutes before. What d’you know about that, hey? You never can\n         |                                        ^~~~~ Did you mean to spell `d’you` this way?\nSuggest:\n  - Replace with: “bayou”\n  - Replace with: “you”\n\n\n\nLint:    Formatting (63 priority)\nMessage: |\n    5349 | There was a long silence on the other end of the wire, followed by an\n    5350 | exclamation . . . then a quick squawk as the connection was broken.\n         |            ^ Unnecessary space at the end of the sentence.\nSuggest:\n  - Remove error\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    5350 | exclamation . . . then a quick squawk as the connection was broken.\n         |                   ^~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “Then”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5352 | I think it was on the third day that a telegram signed Henry C. Gatz arrived\n         |                                                              ^~ Did you mean to spell `C.` this way?\nSuggest:\n  - Replace with: “Co”\n  - Replace with: “Cu”\n  - Replace with: “CI”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5352 | I think it was on the third day that a telegram signed Henry C. Gatz arrived\n         |                                                                 ^~~~ Did you mean to spell `Gatz` this way?\n    5353 | from a town in Minnesota. It said only that the sender was leaving immediately\nSuggest:\n  - Replace with: “Gate”\n  - Replace with: “Garth”\n  - Replace with: “Goth”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    5359 | hands he began to pull so incessantly at his sparse gray beard that I had\n         |                                                     ^~~~~~~~~~ Did you mean the closed compound noun “graybeard”?\n    5360 | difficulty in getting off his coat. He was on the point of collapse, so I took\nSuggest:\n  - Replace with: “graybeard”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5377 | “Carraway.”\n         |  ^~~~~~~~ Did you mean to spell `Carraway` this way?\nSuggest:\n  - Replace with: “Caraway”\n  - Replace with: “Caraways”\n  - Replace with: “Castaway”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5385 | After a little while Mr. Gatz opened the door and came out, his mouth ajar, his\n         |                          ^~~~ Did you mean to spell `Gatz` this way?\nSuggest:\n  - Replace with: “Gate”\n  - Replace with: “Garth”\n  - Replace with: “Goth”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5386 | face flushed slightly, his eyes leaking isolated and unpunctual tears. He had\n         |                                                      ^~~~~~~~~~ Did you mean `punctual`?\nSuggest:\n  - Replace with: “punctual”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5386 | face flushed slightly, his eyes leaking isolated and unpunctual tears. He had\n         |                                                                        ^~~~~~~\n    5387 | reached an age where death no longer has the quality of ghastly surprise, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5388 | when he looked around him now for the first time and saw the height and splendor\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5389 | of the hall and the great rooms opening out from it into other rooms, his grief\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5390 | began to be mixed with an awed pride. I helped him to a bedroom up-stairs; while\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 56 words long.\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n    5390 | began to be mixed with an awed pride. I helped him to a bedroom up-stairs; while\n         |                                                                 ^~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “upstairs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5396 | “Gatz is my name.”\n         |  ^~~~ Did you mean to spell `Gatz` this way?\nSuggest:\n  - Replace with: “Gate”\n  - Replace with: “Garth”\n  - Replace with: “Goth”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5398 | “—Mr. Gatz. I thought you might want to take the body West.”\n         |       ^~~~ Did you mean to spell `Gatz` this way?\nSuggest:\n  - Replace with: “Gate”\n  - Replace with: “Garth”\n  - Replace with: “Goth”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5405 | “We were close friends.”\n         |     ^~~~~ You may be missing a preposition here.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5412 | “If he’d of lived, he’d of been a great man. A man like James J. Hill. He’d of\n         |                                                               ^~ Did you mean to spell `J.` this way?\nSuggest:\n  - Replace with: “Jo”\n  - Replace with: “J”\n  - Replace with: “Jg”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5423 | “This is Mr. Carraway,” I said.\n         |              ^~~~~~~~ Did you mean to spell `Carraway` this way?\nSuggest:\n  - Replace with: “Caraway”\n  - Replace with: “Caraways”\n  - Replace with: “Castaway”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5425 | “Oh!” He sounded relieved. “This is Klipspringer.”\n         |                                     ^~~~~~~~~~~~ Did you mean `Kissinger`?\nSuggest:\n  - Replace with: “Kissinger”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5455 | and I’m sort of helpless without them. My address is care of B. F.———”\n         |                                                              ^~ Did you mean to spell `B.` this way?\nSuggest:\n  - Replace with: “Be”\n  - Replace with: “Bi”\n  - Replace with: “Bu”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5455 | and I’m sort of helpless without them. My address is care of B. F.———”\n         |                                                                 ^~ Did you mean to spell `F.` this way?\nSuggest:\n  - Replace with: “Fa”\n  - Replace with: “Fe”\n  - Replace with: “Ff”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5464 | The morning of the funeral I went up to New York to see Meyer Wolfshiem; I\n         |                                                               ^~~~~~~~~ Did you mean `Bolshie`?\nSuggest:\n  - Replace with: “Bolshie”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5472 | “Nobody’s in,” she said. “Mr. Wolfshiem’s gone to Chicago.”\n         |                               ^~~~~~~~~~~ Did you mean to spell `Wolfshiem’s` this way?\nSuggest:\n  - Replace with: “Waldheim's”\n  - Replace with: “Welshmen's”\n  - Replace with: “Wolfe's”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5474 | The first part of this was obviously untrue, for some one had begun to whistle\n         |                                                  ^~~~~~~~ Did you mean the closed compound `someone`?\n    5475 | “The Rosary,” tunelessly, inside.\nSuggest:\n  - Replace with: “someone”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5477 | “Please say that Mr. Carraway wants to see him.”\n         |                      ^~~~~~~~ Did you mean to spell `Carraway` this way?\nSuggest:\n  - Replace with: “Caraway”\n  - Replace with: “Caraways”\n  - Replace with: “Castaway”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5481 | At this moment a voice, unmistakably Wolfshiem’s, called “Stella!” from the\n         |                                      ^~~~~~~~~~~ Did you mean to spell `Wolfshiem’s` this way?\nSuggest:\n  - Replace with: “Waldheim's”\n  - Replace with: “Welshmen's”\n  - Replace with: “Wolfe's”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    5498 | “Oh-h!” She looked at me over again. ‘‘Will you just— What was your name?”\n         |                                                                          ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5500 | She vanished. In a moment Meyer Wolfsheim stood solemnly in the doorway, holding\n         |                                 ^~~~~~~~~ Did you mean to spell `Wolfsheim` this way?\n    5501 | out both hands. He drew me into his office, remarking in a reverent voice that\nSuggest:\n  - Replace with: “Waldheim”\n  - Replace with: “Florsheim”\n\n\n\nLint:    Agreement (127 priority)\nMessage: |\n    5507 | First time I saw him was when he come into Winebrenner’s poolroom at Forty-third\n         |                                  ^~~~ The form of the verb must agree in grammatical number with the pronoun.\nSuggest:\n  - Replace with: “comes”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5507 | First time I saw him was when he come into Winebrenner’s poolroom at Forty-third\n         |                                            ^~~~~~~~~~~~~ Did you mean `Windbreaker's`?\n    5508 | Street and asked for a job. He hadn’t eat anything for a couple of days. ‘Come\nSuggest:\n  - Replace with: “Windbreaker's”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    5508 | Street and asked for a job. He hadn’t eat anything for a couple of days. ‘Come\n    5509 | on have some lunch with me,’ I sid. He ate more than four dollars’ worth of food\n         |                                ^~~ The canonical dictionary spelling is title case: `Sid`.\nSuggest:\n  - Replace with: “Sid”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5508 | Street and asked for a job. He hadn’t eat anything for a couple of days. ‘Come\n    5509 | on have some lunch with me,’ I sid. He ate more than four dollars’ worth of food\n         |                                ^~~ Did you mean to spell `sid` this way?\nSuggest:\n  - Replace with: “sad”\n  - Replace with: “said”\n  - Replace with: “sic”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5519 | was a fine-appearing, gentlemanly young man, and when he told me he was an\n    5520 | Oggsford I knew I could use him good. I got him to join up in the American\n         | ^~~~~~~~ Did you mean to spell `Oggsford` this way?\nSuggest:\n  - Replace with: “Oxford”\n  - Replace with: “Longsword”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    5522 | of mine up to Albany. We were so thick like that in everything”—he held up two\n    5523 | bulbous fingers—“always together.”\n         |                 ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    5523 | bulbous fingers—“always together.”\n         |                                  ^ This quote has no termination.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5552 | For a moment I thought he was going to suggest a “gonnegtion,” but he only\n         |                                                   ^~~~~~~~~~ Did you mean `connection`?\n    5553 | nodded and shook my hand.\nSuggest:\n  - Replace with: “connection”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5559 | drizzle. After changing my clothes I went next door and found Mr. Gatz walking\n         |                                                                   ^~~~ Did you mean to spell `Gatz` this way?\n    5560 | up and down excitedly in the hall. His pride in his son and in his son’s\nSuggest:\n  - Replace with: “Gate”\n  - Replace with: “Garth”\n  - Replace with: “Goth”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n    5568 | admiration from my eyes. He had shown it so often that I think it was more real\n         |                                                                       ^~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\n    5569 | to him now than the house itself.\nSuggest:\n  - Replace with: “realer”\n\n\n\nLint:    Agreement (127 priority)\nMessage: |\n    5575 | “He come out to see me two years ago and bought me the house I live in now. Of\n         |     ^~~~ The form of the verb must agree in grammatical number with the pronoun.\nSuggest:\n  - Replace with: “comes”\n\n\n\nLint:    Agreement (30 priority)\nMessage: |\n    5575 | “He come out to see me two years ago and bought me the house I live in now. Of\n    5576 | course we was broke up when he run off from home, but I see now there was a\n         |           ^~~ Make the verb agree with its subject.\nSuggest:\n  - Replace with: “were”\n\n\n\nLint:    Grammar (127 priority)\nMessage: |\n    5575 | “He come out to see me two years ago and bought me the house I live in now. Of\n    5576 | course we was broke up when he run off from home, but I see now there was a\n         |               ^~~~~ Use the past participle `broken` instead of `broke` when using compound tenses or passive voice.\nSuggest:\n  - Replace with: “broken”\n\n\n\nLint:    Agreement (127 priority)\nMessage: |\n    5575 | “He come out to see me two years ago and bought me the house I live in now. Of\n    5576 | course we was broke up when he run off from home, but I see now there was a\n         |                                ^~~ The form of the verb must agree in grammatical number with the pronoun.\nSuggest:\n  - Replace with: “runs”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5582 | pocket a ragged old copy of a book called “Hopalong Cassidy.”\n         |                                            ^~~~~~~~ Did you mean to spell `Hopalong` this way?\nSuggest:\n  - Replace with: “Hopping”\n  - Replace with: “Haling”\n  - Replace with: “Haloing”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5601 | >\n    5602 | > No wasting time at Shafters or [a name, indecipherable] No more smokeing or\n         |                      ^~~~~~~~ Did you mean to spell `Shafters` this way?\nSuggest:\n  - Replace with: “Shatters”\n  - Replace with: “Shifters”\n  - Replace with: “Shaffer's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5602 | > No wasting time at Shafters or [a name, indecipherable] No more smokeing or\n         |                                                                   ^~~~~~~~ Did you mean to spell `smokeing` this way?\n    5603 | > chewing. Bath every other day Read one improving book or magazine per week\nSuggest:\n  - Replace with: “smoking”\n  - Replace with: “shoeing”\n  - Replace with: “smocking”\n\n\n\nLint:    Capitalization (127 priority)\nMessage: |\n    5613 | great for that. He told me I et like a hog once, and I beat him for it.”\n         |                              ^~ This word's canonical spelling is all-caps.\nSuggest:\n  - Replace with: “ET”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5613 | great for that. He told me I et like a hog once, and I beat him for it.”\n         |                              ^~ Did you mean to spell `et` this way?\nSuggest:\n  - Replace with: “e”\n  - Replace with: “ea”\n  - Replace with: “eat”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5629 | then Mr. Gatz and the minister and I in the limousine, and a little later four\n         |          ^~~~ Did you mean to spell `Gatz` this way?\nSuggest:\n  - Replace with: “Gate”\n  - Replace with: “Garth”\n  - Replace with: “Goth”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5631 | wet to the skin. As we started through the gate into the cemetery I heard a car\n    5632 | stop and then the sound of some one splashing after us over the soggy ground. I\n         |                            ^~~~~~~~ Did you mean the closed compound `someone`?\nSuggest:\n  - Replace with: “someone”\n\n\n\nLint:    Agreement (31 priority)\nMessage: |\n    5631 | wet to the skin. As we started through the gate into the cemetery I heard a car\n    5632 | stop and then the sound of some one splashing after us over the soggy ground. I\n         |                                 ^~~~~~~~~~~~~ `splashing` is a mass noun.\nSuggest:\n  - Replace with: “one piece of splashing”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5633 | looked around. It was the man with owl-eyed glasses whom I had found marvelling\n         |                                                                      ^~~~~~~~~~ Did you mean `marveling`?\n    5634 | over Gatsby’s books in the library one night three months before.\nSuggest:\n  - Replace with: “marveling”\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5642 | message or a flower. Dimly I heard some one murmur “Blessed are the dead that\n         |                                    ^~~~~~~~ Did you mean the closed compound `someone`?\n    5643 | the rain falls on,” and then the owl-eyed man said “Amen to that,” in a brave\nSuggest:\n  - Replace with: “someone”\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    5642 | message or a flower. Dimly I heard some one murmur “Blessed are the dead that\n    5643 | the rain falls on,” and then the owl-eyed man said “Amen to that,” in a brave\n         |     ^~~~~~~~~~ Did you mean the closed compound noun “rainfalls”?\nSuggest:\n  - Replace with: “rainfalls”\n\n\n\nLint:    Capitalization (31 priority)\nMessage: |\n    5653 | “Go on!” He started. “Why, my God! they used to go there by the hundreds.”\n         |                                    ^~~~ This sentence does not start with a capital letter\nSuggest:\n  - Replace with: “They”\n\n\n\nLint:    Style (127 priority)\nMessage: |\n    5659 | One of my most vivid memories is of coming back West from prep school and later\n         |           ^~~~~~~~~~ This is not an error, but an inflected form of this adjective also exists\nSuggest:\n  - Replace with: “vividest”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5660 | from college at Christmas time. Those who went farther than Chicago would gather\n         |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5661 | in the old dim Union Street station at six o’clock of a December evening, with a\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5662 | few Chicago friends, already caught up into their own holiday gayeties, to bid\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5663 | them a hasty good-by. I remember the fur coats of the girls returning from Miss\n         | ~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5662 | few Chicago friends, already caught up into their own holiday gayeties, to bid\n         |                                                               ^~~~~~~~ Did you mean to spell `gayeties` this way?\n    5663 | them a hasty good-by. I remember the fur coats of the girls returning from Miss\nSuggest:\n  - Replace with: “gametes”\n  - Replace with: “gazettes”\n  - Replace with: “layettes”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5663 | them a hasty good-by. I remember the fur coats of the girls returning from Miss\n         |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5664 | This-or-That’s and the chatter of frozen breath and the hands waving overhead as\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5665 | we caught sight of old acquaintances, and the matchings of invitations: “Are you\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5666 | going to the Ordways’? the Herseys’? the Schultzes’?” and the long green tickets\n         | ~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5665 | we caught sight of old acquaintances, and the matchings of invitations: “Are you\n         |                                               ^~~~~~~~~ Did you mean to spell `matchings` this way?\nSuggest:\n  - Replace with: “matching”\n  - Replace with: “catchings”\n  - Replace with: “machines”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5665 | we caught sight of old acquaintances, and the matchings of invitations: “Are you\n    5666 | going to the Ordways’? the Herseys’? the Schultzes’?” and the long green tickets\n         |              ^~~~~~~ Did you mean to spell `Ordways` this way?\nSuggest:\n  - Replace with: “Ordeals”\n  - Replace with: “Endways”\n  - Replace with: “Midways”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5666 | going to the Ordways’? the Herseys’? the Schultzes’?” and the long green tickets\n         |                            ^~~~~~~ Did you mean to spell `Herseys` this way?\nSuggest:\n  - Replace with: “Hersey's”\n  - Replace with: “Hersey”\n  - Replace with: “Hershey's”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5666 | going to the Ordways’? the Herseys’? the Schultzes’?” and the long green tickets\n         |                                          ^~~~~~~~~ Did you mean to spell `Schultzes` this way?\nSuggest:\n  - Replace with: “Schultz's”\n  - Replace with: “Schulz's”\n  - Replace with: “Schultz”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5671 | When we pulled out into the winter night and the real snow, our snow, began to\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5672 | stretch out beside us and twinkle against the windows, and the dim lights of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5673 | small Wisconsin stations moved by, a sharp wild brace came suddenly into the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5674 | air. We drew in deep breaths of it as we walked back from dinner through the\n         | ~~~~ This sentence is 44 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5678 | That’s my Middle West—not the wheat or the prairies or the lost Swede towns, but\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5679 | the thrilling returning trains of my youth, and the street lamps and sleigh\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5680 | bells in the frosty dark and the shadows of holly wreaths thrown by lighted\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5681 | windows on the snow. I am part of that, a little solemn with the feel of those\n         | ~~~~~~~~~~~~~~~~~~~~ This sentence is 47 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    5679 | the thrilling returning trains of my youth, and the street lamps and sleigh\n         |                                                     ^~~~~~~~~~~~ Did you mean the closed compound noun “streetlamps”?\n    5680 | bells in the frosty dark and the shadows of holly wreaths thrown by lighted\nSuggest:\n  - Replace with: “streetlamps”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5682 | long winters, a little complacent from growing up in the Carraway house in a\n         |                                                          ^~~~~~~~ Did you mean to spell `Carraway` this way?\n    5683 | city where dwellings are still called through decades by a family’s name. I see\nSuggest:\n  - Replace with: “Caraway”\n  - Replace with: “Caraways”\n  - Replace with: “Castaway”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5683 | city where dwellings are still called through decades by a family’s name. I see\n         |                                                                           ^~~~~~\n    5684 | now that this has been a story of the West, after all—Tom and Gatsby, Daisy and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5685 | Jordan and I, were all Westerners, and perhaps we possessed some deficiency in\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5686 | common which made us subtly unadaptable to Eastern life.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    5684 | now that this has been a story of the West, after all—Tom and Gatsby, Daisy and\n         |                                                                       ^~~~~ An Oxford comma is necessary here.\n    5685 | Jordan and I, were all Westerners, and perhaps we possessed some deficiency in\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5685 | Jordan and I, were all Westerners, and perhaps we possessed some deficiency in\n    5686 | common which made us subtly unadaptable to Eastern life.\n         |                             ^~~~~~~~~~~ Did you mean `adaptable`?\nSuggest:\n  - Replace with: “adaptable”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5688 | Even when the East excited me most, even when I was most keenly aware of its\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5689 | superiority to the bored, sprawling, swollen towns beyond the Ohio, with their\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5690 | interminable inquisitions which spared only the children and the very old—even\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5691 | then it had always for me a quality of distortion. West Egg, especially, still\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 50 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5692 | figures in my more fantastic dreams. I see it as a night scene by El Greco: a\n         |                                                                   ^~ Did you mean to spell `El` this way?\nSuggest:\n  - Replace with: “Ell”\n  - Replace with: “E”\n  - Replace with: “Ea”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5692 | figures in my more fantastic dreams. I see it as a night scene by El Greco: a\n         |                                                                      ^~~~~ Did you mean to spell `Greco` this way?\nSuggest:\n  - Replace with: “Gecko”\n  - Replace with: “Grace”\n  - Replace with: “Great”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5693 | hundred houses, at once conventional and grotesque, crouching under a sullen,\n    5694 | overhanging sky and a lustreless moon. In the foreground four solemn men in\n         |                       ^~~~~~~~~~ Did you mean `lusterless`?\nSuggest:\n  - Replace with: “lusterless”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5712 | She was dressed to play golf, and I remember thinking she looked like a good\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5713 | illustration, her chin raised a little jauntily, her hair the color of an autumn\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5714 | leaf, her face the same brown tint as the fingerless glove on her knee. When I\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5714 | leaf, her face the same brown tint as the fingerless glove on her knee. When I\n         |                                           ^~~~~~~~~~ Did you mean `linerless`?\nSuggest:\n  - Replace with: “linerless”\n\n\n\nLint:    Typo (31 priority)\nMessage: |\n    5714 | leaf, her face the same brown tint as the fingerless glove on her knee. When I\n         |                                           ^~~~~~~~~~ `fingerless` should probably be written as `finger less`.\nSuggest:\n  - Replace with: “finger less”\n\n\n\nLint:    Punctuation (31 priority)\nMessage: |\n    5721 | “Nevertheless you did throw me over,” said Jordan suddenly. ‘‘You threw me over\n         |  ^~~~~~~~~~~~ Discourse markers at the beginning of a sentence should be followed by a comma.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    5723 | for me, and I felt a little dizzy for a while.”\n         |                                               ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    5727 | “Oh, and do you remember”—she added—“a conversation we had once about driving a\n         |                                     ^ This quote has no termination.\n\n\n\nLint:    Formatting (255 priority)\nMessage: |\n    5728 | car?”\n         |     ^ This quote has no termination.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5743 | One afternoon late in October I saw Tom Buchanan. He was walking ahead of me\n         |                                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5744 | along Fifth Avenue in his alert, aggressive way, his hands out a little from his\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5745 | body as if to fight off interference, his head moving sharply here and there,\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5746 | adapting itself to his restless eyes. Just as I slowed up to avoid overtaking\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 41 words long.\n\n\n\nLint:    Spelling (127 priority)\nMessage: |\n    5764 | ready to leave, and when I sent down word that we weren’t in he tried to force\n    5765 | his way up-stairs. He was crazy enough to kill me if I hadn’t told him who owned\n         |         ^~~~~~~~~ This looks like a prefix that can be joined with the rest of the word.\nSuggest:\n  - Replace with: “upstairs”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5775 | “And if you think I didn’t have my share of suffering—look here, when I went to\n         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5776 | give up that flat and saw that damn box of dog biscuits sitting there on the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5777 | sideboard, I sat down and cried like a baby. By God it was awful—”\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 42 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5780 | entirely justified. It was all very careless and confused. They were careless\n         |                                                            ^~~~~~~~~~~~~~~~~~~\n    5781 | people, Tom and Daisy—they smashed up things and creatures and then retreated\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5782 | back into their money or their vast carelessness, or whatever it was that kept\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5783 | them together, and let other people clean up the mess they had made. . . .\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 43 words long.\n\n\n\nLint:    Miscellaneous (31 priority)\nMessage: |\n    5780 | entirely justified. It was all very careless and confused. They were careless\n         |                                                                 ^~~~~ You may be missing a preposition here.\n    5781 | people, Tom and Daisy—they smashed up things and creatures and then retreated\n\n\n\nLint:    Style (31 priority)\nMessage: |\n    5780 | entirely justified. It was all very careless and confused. They were careless\n    5781 | people, Tom and Daisy—they smashed up things and creatures and then retreated\n         |         ^~~ An Oxford comma is necessary here.\nSuggest:\n  - Insert “,”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5791 | long as mine. One of the taxi drivers in the village never took a fare past the\n         |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5792 | entrance gate without stopping for a minute and pointing inside; perhaps it was\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5793 | he who drove Daisy and Gatsby over to East Egg the night of the accident, and\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5794 | perhaps he had made a story about it all his own. I didn’t want to hear it and I\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 54 words long.\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5797 | I spent my Saturday nights in New York because those gleaming, dazzling parties\n         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5798 | of his were with me so vividly that I could still hear the music and the\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5799 | laughter, faint and incessant, from his garden, and the cars going up and down\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5800 | his drive. One night I did hear a material car there, and saw its lights stop at\n         | ~~~~~~~~~~ This sentence is 45 words long.\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5807 | out clearly in the moonlight, and I erased it, drawing my shoe raspingly along\n         |                                                                ^~~~~~~~~ Did you mean to spell `raspingly` this way?\n    5808 | the stone. Then I wandered down to the beach and sprawled out on the sand.\nSuggest:\n  - Replace with: “ragingly”\n  - Replace with: “rasping”\n  - Replace with: “dashingly”\n\n\n\nLint:    Readability (127 priority)\nMessage: |\n    5814 | green breast of the new world. Its vanished trees, the trees that had made way\n         |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5815 | for Gatsby’s house, had once pandered in whispers to the last and greatest of\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5816 | all human dreams; for a transitory enchanted moment man must have held his\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5817 | breath in the presence of this continent, compelled into an esthetic\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5818 | contemplation he neither understood nor desired, face to face for the last time\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    5819 | in history with something commensurate to his capacity for wonder.\n         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This sentence is 70 words long.\n\n\n\nLint:    WordChoice (63 priority)\nMessage: |\n    5817 | breath in the presence of this continent, compelled into an esthetic\n         |                                                          ^~~~~~~~~~~ It seems these words would go better together.\n    5818 | contemplation he neither understood nor desired, face to face for the last time\nSuggest:\n  - Replace with: “anesthetic”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5817 | breath in the presence of this continent, compelled into an esthetic\n         |                                                             ^~~~~~~~ Did you mean to spell `esthetic` this way?\n    5818 | contemplation he neither understood nor desired, face to face for the last time\nSuggest:\n  - Replace with: “aesthetic”\n  - Replace with: “pathetic”\n  - Replace with: “aesthetics”\n\n\n\nLint:    Spelling (63 priority)\nMessage: |\n    5828 | Gatsby believed in the green light, the orgastic future that year by year\n         |                                         ^~~~~~~~ Did you mean to spell `orgastic` this way?\n    5829 | recedes before us. It eluded us then, but that’s no matter—to-morrow we will run\nSuggest:\n  - Replace with: “orgasmic”\n  - Replace with: “orgiastic”\n  - Replace with: “organic”\n\n\n\n"
  },
  {
    "path": "harper-core/tests/text/linters/this and that.snap.yml",
    "content": ""
  },
  {
    "path": "harper-core/tests/text/tagged/Alice's Adventures in Wonderland.md",
    "content": ">              Alice’s Adventures in        Wonderland\n# HeadingStart NPr$    NPl/V3     NPr/J/R/P NSg+\n>\n#\n> by    Lewis Carroll\n# NSg/P NPr+  NPr+\n>\n#\n> THE MILLENNIUM FULCRUM EDITION 3.0\n# D   NSg+       NSg     NSg+    #\n>\n#\n>              CHAPTER I       : Down        the Rabbit  - Hole\n# HeadingStart NSg/VB+ ISg/#r+ . N🅪Sg/VB/J/P D   NSg/VB+ . NSg/VB+\n>\n#\n> Alice was  beginning to get    very tired of sitting  by    her     sister  on  the bank    , and\n# NPr+  VLPt NSg/Vg/J  P  NSg/VB J/R  VP/J  P  NSg/Vg/J NSg/P ISg/D$+ NSg/VB+ J/P D+  NSg/VB+ . VB/C\n> of having  nothing  to do  : once  or    twice she  had peeped into the book    her     sister\n# P  Nᴹ/Vg/J NSg/I/J+ P  VXB . NSg/C NPr/C R     ISg+ VP  VP/J   P    D+  NSg/VB+ ISg/D$+ NSg/VB+\n> was  reading   , but     it       had no       pictures or    conversations in        it       , “ and  what   is  the use\n# VLPt NPrᴹ/Vg/J . NSg/C/P NPr/ISg+ VP  NSg/Dq/P NPl/V3   NPr/C NPl/V3+       NPr/J/R/P NPr/ISg+ . . VB/C NSg/I+ VL3 D   N🅪Sg/VB\n> of a   book    , ” thought Alice “ without pictures or    conversations ? ”\n# P  D/P NSg/VB+ . . N🅪Sg/VP NPr+  . C/P     NPl/V3   NPr/C NPl/V3+       . .\n>\n#\n> So          she  was  considering in        her     own       mind    ( as    well       as    she  could   , for   the hot       day\n# NSg/I/J/R/C ISg+ VLPt Nᴹ/Vg/J     NPr/J/R/P ISg/D$+ NSg/VB/J+ NSg/VB+ . R/C/P NSg/VB/J/R R/C/P ISg+ NSg/VXB . R/C/P D+  NSg/VB/J+ NPr🅪Sg+\n> made her     feel     very sleepy and  stupid ) , whether the pleasure of making  a\n# VP   ISg/D$+ NSg/I/VB J/R  NSg/J  VB/C NSg/J  . . I/C     D   NSg/VB   P  Nᴹ/Vg/J D/P+\n> daisy - chain    would be       worth    the trouble of getting up         and  picking the daisies ,\n# NPr+  . N🅪Sg/VB+ VXB   NSg/VLXB NSg/VB/J D   N🅪Sg/VB P  NSg/Vg  NSg/VB/J/P VB/C Nᴹ/Vg/J D   NPl     .\n> when    suddenly a   White       Rabbit  with pink      eyes    ran     close    by    her     .\n# NSg/I/C R        D/P NPr🅪Sg/VB/J NSg/VB+ P    N🅪Sg/VB/J NPl/V3+ NSg/VPt NSg/VB/J NSg/P ISg/D$+ .\n>\n#\n> There was  nothing  so          very remarkable in        that          ; nor   did  Alice think  it       so          very\n# R+    VLPt NSg/I/J+ NSg/I/J/R/C J/R  J          NPr/J/R/P NSg/I/C/Ddem+ . NSg/C VXPt NPr+  NSg/VB NPr/ISg+ NSg/I/J/R/C J/R\n> much         out          of the way    to hear the Rabbit  say    to itself , “ Oh     dear     ! Oh     dear     ! I       shall\n# NSg/I/J/R/Dq NSg/VB/J/R/P P  D+  NSg/J+ P  VB   D+  NSg/VB+ NSg/VB P  ISg+   . . NPr/VB NSg/VB/J . NPr/VB NSg/VB/J . ISg/#r+ VXB\n> be       late  ! ” ( when    she  thought it       over    afterwards , it       occurred to her     that         she\n# NSg/VLXB NSg/J . . . NSg/I/C ISg+ N🅪Sg/VP NPr/ISg+ NSg/J/P R/Comm     . NPr/ISg+ VP       P  ISg/D$+ NSg/I/C/Ddem ISg+\n> ought     to have    wondered at    this    , but     at    the time       it       all          seemed quite natural ) ;\n# NSg/I/VXB P  NSg/VXB VP/J     NSg/P I/Ddem+ . NSg/C/P NSg/P D+  N🅪Sg/VB/J+ NPr/ISg+ NSg/I/J/C/Dq VP/J   R     NSg/J   . .\n> but     when    the Rabbit  actually took a    watch   out          of its     waistcoat - pocket    , and\n# NSg/C/P NSg/I/C D+  NSg/VB+ R        VPt  D/P+ NSg/VB+ NSg/VB/J/R/P P  ISg/D$+ NSg       . NSg/VB/J+ . VB/C\n> looked at    it       , and  then      hurried on  , Alice started to her     feet , for   it       flashed\n# VP/J   NSg/P NPr/ISg+ . VB/C NSg/J/R/C VP/J    J/P . NPr+  VP/J    P  ISg/D$+ NPl+ . R/C/P NPr/ISg+ VP/J\n> across her     mind    that          she  had never before seen    a   rabbit  with either a\n# NSg/P  ISg/D$+ NSg/VB+ NSg/I/C/Ddem+ ISg+ VP  R     C/P    NSg/VPp D/P NSg/VB+ P    I/C    D/P\n> waistcoat - pocket    , or    a   watch  to take   out          of it       , and  burning with curiosity , she\n# NSg       . NSg/VB/J+ . NPr/C D/P NSg/VB P  NSg/VB NSg/VB/J/R/P P  NPr/ISg+ . VB/C Nᴹ/Vg/J P    NSg+      . ISg+\n> ran     across the field   after it       , and  fortunately was  just in        time       to see    it       pop\n# NSg/VPt NSg/P  D   NSg/VB+ P     NPr/ISg+ . VB/C R           VLPt J/R  NPr/J/R/P N🅪Sg/VB/J+ P  NSg/VB NPr/ISg+ N🅪Sg/VB/J+\n> down        a   large rabbit  - hole    under   the hedge   .\n# N🅪Sg/VB/J/P D/P NSg/J NSg/VB+ . NSg/VB+ NSg/J/P D   NSg/VB+ .\n>\n#\n> In        another moment down        went    Alice after it       , never once  considering how   in        the\n# NPr/J/R/P I/D+    NSg+   N🅪Sg/VB/J/P NSg/VPt NPr+  P     NPr/ISg+ . R     NSg/C Nᴹ/Vg/J     NSg/C NPr/J/R/P D+\n> world   she  was  to get    out          again .\n# NSg/VB+ ISg+ VLPt P  NSg/VB NSg/VB/J/R/P P     .\n>\n#\n> The rabbit  - hole    went    straight   on  like         a   tunnel for   some      way    , and  then      dipped\n# D+  NSg/VB+ . NSg/VB+ NSg/VPt NSg/VB/J/R J/P NSg/VB/J/C/P D/P NSg/VB R/C/P I/J/R/Dq+ NSg/J+ . VB/C NSg/J/R/C VP/J\n> suddenly down        , so          suddenly that         Alice had not     a   moment to think  about stopping\n# R        N🅪Sg/VB/J/P . NSg/I/J/R/C R        NSg/I/C/Ddem NPr+  VP  NSg/R/C D/P NSg    P  NSg/VB J/P   NSg/Vg\n> herself before she  found  herself falling down        a   very deep  well       .\n# ISg+    C/P    ISg+ NSg/VP ISg+    Nᴹ/Vg/J N🅪Sg/VB/J/P D/P J/R  NSg/J NSg/VB/J/R .\n>\n#\n> Either the well       was  very deep  , or    she  fell      very slowly , for   she  had plenty  of\n# I/C    D   NSg/VB/J/R VLPt J/R  NSg/J . NPr/C ISg+ NSg/VPt/J J/R  R      . R/C/P ISg+ VP  NSg/I/J P\n> time       as    she  went    down        to look   about her     and  to wonder  what   was  going   to happen\n# N🅪Sg/VB/J+ R/C/P ISg+ NSg/VPt N🅪Sg/VB/J/P P  NSg/VB J/P   ISg/D$+ VB/C P  N🅪Sg/VB NSg/I+ VLPt Nᴹ/Vg/J P  VB\n> next    . First , she  tried to look   down        and  make   out          what   she  was  coming  to , but     it\n# NSg/J/P . NSg/J . ISg+ VP/J  P  NSg/VB N🅪Sg/VB/J/P VB/C NSg/VB NSg/VB/J/R/P NSg/I+ ISg+ VLPt Nᴹ/Vg/J P  . NSg/C/P NPr/ISg+\n> was  too dark     to see    anything  ; then      she  looked at    the sides  of the well       , and\n# VLPt R   NSg/VB/J P  NSg/VB NSg/I/VB+ . NSg/J/R/C ISg+ VP/J   NSg/P D   NPl/V3 P  D   NSg/VB/J/R . VB/C\n> noticed that         they were     filled with cupboards and  book    - shelves ; here and  there\n# VP/J    NSg/I/C/Ddem IPl+ NSg/VLPt VP/J   P    NPl/V3    VB/C NSg/VB+ . NPl/V3+ . J/R  VB/C R+\n> she  saw     maps   and  pictures hung     upon pegs   . She  took down        a    jar     from one     of the\n# ISg+ NSg/VPt NPl/V3 VB/C NPl/V3+  NPr/VP/J P    NPl/V3 . ISg+ VPt  N🅪Sg/VB/J/P D/P+ NSg/VB+ P    NSg/I/J P  D+\n> shelves as    she  passed ; it       was  labelled  “ ORANGE      MARMALADE ” , but     to her     great\n# NPl/V3+ R/C/P ISg+ VP/J   . NPr/ISg+ VLPt VP/J/Comm . NPr🅪Sg/VB/J Nᴹ/VB     . . NSg/C/P P  ISg/D$+ NSg/J\n> disappointment it       was  empty    : she  did  not     like         to drop   the jar     for   fear     of\n# NSg+           NPr/ISg+ VLPt NSg/VB/J . ISg+ VXPt NSg/R/C NSg/VB/J/C/P P  NSg/VB D   NSg/VB+ R/C/P N🅪Sg/VB+ P\n> killing somebody underneath , so          managed to put     it       into one     of the cupboards as\n# Nᴹ/Vg/J NSg/I+   NSg/J/P    . NSg/I/J/R/C VP/J    P  NSg/VBP NPr/ISg+ P    NSg/I/J P  D   NPl/V3    R/C/P\n> she  fell      past       it       .\n# ISg+ NSg/VPt/J NSg/VB/J/P NPr/ISg+ .\n>\n#\n> “ Well       ! ” thought Alice to herself , “ after such  a    fall     as    this    , I       shall think\n# . NSg/VB/J/R . . N🅪Sg/VP NPr+  P  ISg+    . . P     NSg/I D/P+ N🅪Sg/VB+ R/C/P I/Ddem+ . ISg/#r+ VXB   NSg/VB\n> nothing  of tumbling down        stairs ! How   brave    they’ll all          think  me       at    home      ! Why    , I\n# NSg/I/J+ P  Nᴹ/Vg/J  N🅪Sg/VB/J/P NPl+   . NSg/C NSg/VB/J K       NSg/I/J/C/Dq NSg/VB NPr/ISg+ NSg/P NSg/VB/J+ . NSg/VB . ISg/#r+\n> wouldn’t say    anything  about it       , even       if    I       fell      off        the top      of the house   ! ” ( Which\n# VXB      NSg/VB NSg/I/VB+ J/P   NPr/ISg+ . NSg/VB/J/R NSg/C ISg/#r+ NSg/VPt/J NSg/VB/J/P D   NSg/VB/J P  D   NPr/VB+ . . . I/C+\n> was  very likely true     . )\n# VLPt J/R  NSg/J  NSg/VB/J . .\n>\n#\n> Down        , down        , down        . Would the fall     never come       to an   end     ? “ I       wonder  how   many        miles\n# N🅪Sg/VB/J/P . N🅪Sg/VB/J/P . N🅪Sg/VB/J/P . VXB   D+  N🅪Sg/VB+ R     NSg/VBPp/P P  D/P+ NSg/VB+ . . ISg/#r+ N🅪Sg/VB NSg/C NSg/I/J/Dq+ NPrPl+\n> I’ve fallen by    this   time       ? ” she  said aloud . “ I       must    be       getting somewhere near       the\n# K    VPp/J  NSg/P I/Ddem N🅪Sg/VB/J+ . . ISg+ VP/J J     . . ISg/#r+ NSg/VXB NSg/VLXB NSg/Vg  NSg       NSg/VB/J/P D\n> centre      of the earth    . Let     me       see    : that          would be       four thousand miles  down        , I\n# NSg/VB/Comm P  D+  NPrᴹ/VB+ . NSg/VBP NPr/ISg+ NSg/VB . NSg/I/C/Ddem+ VXB   NSg/VLXB NSg+ NSg+     NPrPl+ N🅪Sg/VB/J/P . ISg/#r+\n> think  — ” ( for   , you    see    , Alice had learnt several things of this    sort    in        her\n# NSg/VB . . . R/C/P . ISgPl+ NSg/VB . NPr+  VP  VB     J/Dq    NPl    P  I/Ddem+ NSg/VB+ NPr/J/R/P ISg/D$+\n> lessons in        the schoolroom , and  though this    was  not     a   very good     opportunity for\n# NPl/V3+ NPr/J/R/P D   NSg        . VB/C C      I/Ddem+ VLPt NSg/R/C D/P J/R  NPr/VB/J N🅪Sg+       R/C/P\n> showing  off        her     knowledge , as    there was  no       one      to listen to her     , still      it       was\n# Nᴹ/Vg/J+ NSg/VB/J/P ISg/D$+ Nᴹ+       . R/C/P R+    VLPt NSg/Dq/P NSg/I/J+ P  NSg/VB P  ISg/D$+ . NSg/VB/J/R NPr/ISg+ VLPt\n> good     practice to say    it       over    ) “ — yes    , that’s about the right    distance — but     then      I\n# NPr/VB/J NSg/VB+  P  NSg/VB NPr/ISg+ NSg/J/P . . . NPl/VB . NSg$   J/P   D   NPr/VB/J N🅪Sg/VB+ . NSg/C/P NSg/J/R/C ISg/#r+\n> wonder  what   Latitude or    Longitude I’ve got to ? ” ( Alice had no        idea what   Latitude\n# N🅪Sg/VB NSg/I+ NSg      NPr/C NSg+      K    VP  P  . . . NPr+  VP  NSg/Dq/P+ NSg+ NSg/I+ NSg+\n> was  , or    Longitude either , but     thought they were     nice  grand words  to say    . )\n# VLPt . NPr/C NSg+      I/C    . NSg/C/P N🅪Sg/VP IPl+ NSg/VLPt NPr/J NSg/J NPl/V3 P  NSg/VB . .\n>\n#\n> Presently she  began again . “ I       wonder  if    I       shall fall     right    through the earth    !\n# R         ISg+ VPt   P     . . ISg/#r+ N🅪Sg/VB NSg/C ISg/#r+ VXB   N🅪Sg/VB+ NPr/VB/J NSg/J/P D+  NPrᴹ/VB+ .\n> How   funny it’ll seem to come       out          among the people  that          walk   with their heads\n# NSg/C NSg/J K     VB   P  NSg/VBPp/P NSg/VB/J/R/P P     D   NPl/VB+ NSg/I/C/Ddem+ NSg/VB P    D$+   NPl/V3+\n> downward ! The Antipathies , I       think  — ” ( she  was  rather     glad     there was  no       one\n# J/R      . D   NPl         . ISg/#r+ NSg/VB . . . ISg+ VLPt NPr/VB/J/R NSg/VB/J R+    VLPt NSg/Dq/P NSg/I/J+\n> listening , this   time       , as    it       didn’t sound      at    all          the right    word    ) “ — but     I       shall\n# Nᴹ/Vg/J   . I/Ddem N🅪Sg/VB/J+ . R/C/P NPr/ISg+ VXPt   N🅪Sg/VB/J+ NSg/P NSg/I/J/C/Dq D   NPr/VB/J NSg/VB+ . . . NSg/C/P ISg/#r+ VXB\n> have    to ask    them     what   the name   of the country is  , you    know . Please , Ma’am  , is\n# NSg/VXB P  NSg/VB NSg/IPl+ NSg/I+ D   NSg/VB P  D   NSg/J+  VL3 . ISgPl+ VB   . VB     . NSg/VB . VL3\n> this   New   Zealand or    Australia ? ” ( and  she  tried to curtsey as    she  spoke   — fancy\n# I/Ddem NSg/J NPr     NPr/C NPr+      . . . VB/C ISg+ VP/J  P  ?       R/C/P ISg+ NSg/VPt . NSg/VB/J\n> curtseying as    you’re falling through the air      ! Do  you    think  you    could   manage it       ? )\n# ?          R/C/P K      Nᴹ/Vg/J NSg/J/P D   N🅪Sg/VB+ . VXB ISgPl+ NSg/VB ISgPl+ NSg/VXB NSg/VB NPr/ISg+ . .\n> “ And  what   an   ignorant little      girl    she’ll think  me       for   asking  ! No       , it’ll never do\n# . VB/C NSg/I+ D/P+ NSg/J+   NPr/I/J/Dq+ NSg/VB+ K      NSg/VB NPr/ISg+ R/C/P Nᴹ/Vg/J . NSg/Dq/P . K     R     VXB\n> to ask    : perhaps I       shall see    it       written up         somewhere . ”\n# P  NSg/VB . NSg/R   ISg/#r+ VXB   NSg/VB NPr/ISg+ VPp/J   NSg/VB/J/P NSg       . .\n>\n#\n> Down        , down        , down        . There was  nothing  else    to do  , so          Alice soon began talking\n# N🅪Sg/VB/J/P . N🅪Sg/VB/J/P . N🅪Sg/VB/J/P . R+    VLPt NSg/I/J+ NSg/J/C P  VXB . NSg/I/J/R/C NPr+  J/R  VPt   Nᴹ/Vg/J\n> again . “ Dinah’ll miss   me       very much         to - night    , I       should think  ! ” ( Dinah was  the\n# P     . . ?        NSg/VB NPr/ISg+ J/R  NSg/I/J/R/Dq P  . N🅪Sg/VB+ . ISg/#r+ VXB    NSg/VB . . . NPr   VLPt D\n> cat       . ) “ I       hope      they’ll remember her     saucer of milk     at    tea      - time       . Dinah my  dear     ! I\n# NSg/VB/J+ . . . ISg/#r+ NPr🅪Sg/VB K       NSg/VB   ISg/D$+ NSg/VB P  N🅪Sg/VB+ NSg/P N🅪Sg/VB+ . N🅪Sg/VB/J+ . NPr   D$+ NSg/VB/J . ISg/#r+\n> wish   you    were     down        here with me       ! There are no       mice   in        the air      , I’m afraid , but\n# NSg/VB ISgPl+ NSg/VLPt N🅪Sg/VB/J/P J/R  P    NPr/ISg+ . R+    VLB NSg/Dq/P NPl/VB NPr/J/R/P D+  N🅪Sg/VB+ . K   J      . NSg/C/P\n> you    might    catch  a   bat     , and  that’s very like         a   mouse   , you    know . But     do  cats    eat\n# ISgPl+ Nᴹ/VXB/J NSg/VB D/P NSg/VB+ . VB/C NSg$   J/R  NSg/VB/J/C/P D/P NSg/VB+ . ISgPl+ VB   . NSg/C/P VXB NPl/V3+ VB\n> bats   , I       wonder  ? ” And  here Alice began to get    rather     sleepy , and  went    on  saying\n# NPl/V3 . ISg/#r+ N🅪Sg/VB . . VB/C J/R  NPr+  VPt   P  NSg/VB NPr/VB/J/R NSg/J  . VB/C NSg/VPt J/P N🅪Sg/Vg/J\n> to herself , in        a   dreamy sort   of way    , “ Do  cats    eat bats   ? Do  cats    eat bats   ? ” and\n# P  ISg+    . NPr/J/R/P D/P J      NSg/VB P  NSg/J+ . . VXB NPl/V3+ VB  NPl/V3 . VXB NPl/V3+ VB  NPl/V3 . . VB/C\n> sometimes , “ Do  bats   eat cats    ? ” for   , you    see    , as    she  couldn’t answer  either\n# R         . . VXB NPl/V3 VB  NPl/V3+ . . R/C/P . ISgPl+ NSg/VB . R/C/P ISg+ VXB      NSg/VB+ I/C\n> question , it       didn’t much         matter  which way    she  put     it       . She  felt      that         she  was\n# NSg/VB+  . NPr/ISg+ VXPt   NSg/I/J/R/Dq N🅪Sg/VB I/C+  NSg/J+ ISg+ NSg/VBP NPr/ISg+ . ISg+ N🅪Sg/VP/J NSg/I/C/Ddem ISg+ VLPt\n> dozing  off        , and  had just begun to dream    that         she  was  walking hand    in        hand    with\n# Nᴹ/Vg/J NSg/VB/J/P . VB/C VP  J/R  VPp   P  NSg/VB/J NSg/I/C/Ddem ISg+ VLPt Nᴹ/Vg/J NSg/VB+ NPr/J/R/P NSg/VB+ P\n> Dinah , and  saying    to her     very earnestly , “ Now       , Dinah , tell   me       the truth    : did  you\n# NPr   . VB/C N🅪Sg/Vg/J P  ISg/D$+ J/R  R         . . NSg/J/R/C . NPr   . NPr/VB NPr/ISg+ D   N🅪Sg/VB+ . VXPt ISgPl+\n> ever eat a   bat     ? ” when    suddenly , thump   ! thump   ! down        she  came      upon a   heap   of\n# J/R  VB  D/P NSg/VB+ . . NSg/I/C R        . NSg/VB+ . NSg/VB+ . N🅪Sg/VB/J/P ISg+ NSg/VPt/P P    D/P NSg/VB P\n> sticks and  dry       leaves  , and  the fall     was  over    .\n# NPl/V3 VB/C NSg/VB/J+ NPl/V3+ . VB/C D+  N🅪Sg/VB+ VLPt NSg/J/P .\n>\n#\n> Alice was  not     a   bit     hurt      , and  she  jumped up         on  to her     feet in        a    moment : she\n# NPr+  VLPt NSg/R/C D/P NSg/VPt NSg/VBP/J . VB/C ISg+ VP/J   NSg/VB/J/P J/P P  ISg/D$+ NPl+ NPr/J/R/P D/P+ NSg+   . ISg+\n> looked up         , but     it       was  all          dark     overhead ; before her     was  another long     passage  ,\n# VP/J   NSg/VB/J/P . NSg/C/P NPr/ISg+ VLPt NSg/I/J/C/Dq NSg/VB/J NSg/J/P  . C/P    ISg/D$+ VLPt I/D     NPr/VB/J NSg/VB/J .\n> and  the White        Rabbit  was  still      in        sight    , hurrying down        it       . There was  not     a\n# VB/C D+  NPr🅪Sg/VB/J+ NSg/VB+ VLPt NSg/VB/J/R NPr/J/R/P N🅪Sg/VB+ . Nᴹ/Vg/J  N🅪Sg/VB/J/P NPr/ISg+ . R+    VLPt NSg/R/C D/P\n> moment to be       lost : away went    Alice like         the wind     , and  was  just in        time       to hear\n# NSg+   P  NSg/VLXB VP/J . VB/J NSg/VPt NPr+  NSg/VB/J/C/P D+  N🅪Sg/VB+ . VB/C VLPt J/R  NPr/J/R/P N🅪Sg/VB/J+ P  VB\n> it       say    , as    it       turned a    corner  , “ Oh     my  ears    and  whiskers , how   late  it’s getting ! ”\n# NPr/ISg+ NSg/VB . R/C/P NPr/ISg+ VP/J   D/P+ NSg/VB+ . . NPr/VB D$+ NPl/V3+ VB/C NPl      . NSg/C NSg/J K    NSg/Vg  . .\n> She  was  close    behind  it       when    she  turned the corner  , but     the Rabbit  was  no       longer\n# ISg+ VLPt NSg/VB/J NSg/J/P NPr/ISg+ NSg/I/C ISg+ VP/J   D+  NSg/VB+ . NSg/C/P D+  NSg/VB+ VLPt NSg/Dq/P NSg/JC\n> to be       seen    : she  found  herself in        a   long     , low         hall , which was  lit      up         by    a   row    of\n# P  NSg/VLXB NSg/VPp . ISg+ NSg/VP ISg+    NPr/J/R/P D/P NPr/VB/J . NSg/VB/J/R+ NPr+ . I/C+  VLPt NSg/VP/J NSg/VB/J/P NSg/P D/P NSg/VB P\n> lamps   hanging from the roof    .\n# NPl/V3+ Nᴹ/Vg/J P    D+  NSg/VB+ .\n>\n#\n> There were     doors   all          round      the hall , but     they were     all          locked ; and  when    Alice\n# R+    NSg/VLPt NPl/V3+ NSg/I/J/C/Dq NSg/VB/J/P D+  NPr+ . NSg/C/P IPl+ NSg/VLPt NSg/I/J/C/Dq VP/J   . VB/C NSg/I/C NPr+\n> had been     all          the way   down        one      side      and  up         the other    , trying  every door    , she\n# VP  NSg/VLPp NSg/I/J/C/Dq D   NSg/J N🅪Sg/VB/J/P NSg/I/J+ NSg/VB/J+ VB/C NSg/VB/J/P D   NSg/VB/J . Nᴹ/Vg/J Dq+   NSg/VB+ . ISg+\n> walked sadly down        the middle   , wondering how   she  was  ever to get    out          again .\n# VP/J   R     N🅪Sg/VB/J/P D   NSg/VB/J . Nᴹ/Vg/J   NSg/C ISg+ VLPt J/R  P  NSg/VB NSg/VB/J/R/P P     .\n>\n#\n> Suddenly she  came      upon a   little     three - legged   table   , all          made of solid glass      ;\n# R        ISg+ NSg/VPt/P P    D/P NPr/I/J/Dq NSg   . NSg/VP/J NSg/VB+ . NSg/I/J/C/Dq VP   P  NSg/J NPr🅪Sg/VB+ .\n> there was  nothing  on  it       except a   tiny  golden   key      , and  Alice’s first  thought  was\n# R+    VLPt NSg/I/J+ J/P NPr/ISg+ VB/C/P D/P NSg/J NPr/VB/J NPr/VB/J . VB/C NPr$    NSg/J+ N🅪Sg/VP+ VLPt\n> that         it       might    belong to one     of the doors  of the hall ; but     , alas  ! either the\n# NSg/I/C/Ddem NPr/ISg+ Nᴹ/VXB/J VB/P   P  NSg/I/J P  D   NPl/V3 P  D   NPr+ . NSg/C/P . NPrPl . I/C    D+\n> locks   were     too large , or    the key      was  too small    , but     at    any     rate    it       would not\n# NPl/V3+ NSg/VLPt R   NSg/J . NPr/C D   NPr/VB/J VLPt R   NPr/VB/J . NSg/C/P NSg/P I/R/Dq+ NSg/VB+ NPr/ISg+ VXB   NSg/R/C\n> open     any    of them     . However , on  the second    time       round      , she  came      upon a    low         curtain\n# NSg/VB/J I/R/Dq P  NSg/IPl+ . C       . J/P D+  NSg/VB/J+ N🅪Sg/VB/J+ NSg/VB/J/P . ISg+ NSg/VPt/P P    D/P+ NSg/VB/J/R+ NSg/VB+\n> she  had not     noticed before , and  behind  it       was  a   little     door   about fifteen inches\n# ISg+ VP  NSg/R/C VP/J    C/P    . VB/C NSg/J/P NPr/ISg+ VLPt D/P NPr/I/J/Dq NSg/VB J/P   NSg+    NPl/V3+\n> high       : she  tried the little     golden   key      in        the lock    , and  to her     great  delight    it\n# NSg/VB/J/R . ISg+ VP/J  D   NPr/I/J/Dq NPr/VB/J NPr/VB/J NPr/J/R/P D+  NSg/VB+ . VB/C P  ISg/D$+ NSg/J+ N🅪Sg/VB/J+ NPr/ISg+\n> fitted   !\n# NSg/VP/J .\n>\n#\n> Alice opened the door    and  found  that         it       led      into a    small     passage   , not     much\n# NPr+  VP/J   D+  NSg/VB+ VB/C NSg/VP NSg/I/C/Ddem NPr/ISg+ NSg/VP/J P    D/P+ NPr/VB/J+ NSg/VB/J+ . NSg/R/C NSg/I/J/R/Dq\n> larger than a   rat     - hole    : she  knelt down        and  looked along the passage   into the\n# JC     C/P  D/P NSg/VB+ . NSg/VB+ . ISg+ VP    N🅪Sg/VB/J/P VB/C VP/J   P     D   NSg/VB/J+ P    D\n> loveliest garden    you    ever saw     . How   she  longed to get    out          of that          dark      hall , and\n# JS        NSg/VB/J+ ISgPl+ J/R  NSg/VPt . NSg/C ISg+ VP/J   P  NSg/VB NSg/VB/J/R/P P  NSg/I/C/Ddem+ NSg/VB/J+ NPr+ . VB/C\n> wander about among those  beds   of bright    flowers   and  those  cool     fountains , but\n# NSg/VB J/P   P     I/Ddem NPl/V3 P  NPr/VB/J+ NPrPl/V3+ VB/C I/Ddem NSg/VB/J NPl/V3    . NSg/C/P\n> she  could   not     even       get    her     head      through the doorway ; “ and  even       if    my  head      would\n# ISg+ NSg/VXB NSg/R/C NSg/VB/J/R NSg/VB ISg/D$+ NPr/VB/J+ NSg/J/P D   NSg+    . . VB/C NSg/VB/J/R NSg/C D$+ NPr/VB/J+ VXB\n> go       through , ” thought poor     Alice , “ it       would be       of very little     use     without my\n# NSg/VB/J NSg/J/P . . N🅪Sg/VP NSg/VB/J NPr+  . . NPr/ISg+ VXB   NSg/VLXB P  J/R  NPr/I/J/Dq N🅪Sg/VB C/P     D$+\n> shoulders . Oh     , how   I       wish   I       could   shut      up         like         a    telescope ! I       think  I       could   , if\n# NPl/V3+   . NPr/VB . NSg/C ISg/#r+ NSg/VB ISg/#r+ NSg/VXB NSg/VBP/J NSg/VB/J/P NSg/VB/J/C/P D/P+ NSg/VB+   . ISg/#r+ NSg/VB ISg/#r+ NSg/VXB . NSg/C\n> I       only  knew how   to begin  . ” For   , you    see    , so          many       out          - of - the - way   things had\n# ISg/#r+ J/R/C VPt  NSg/C P  NSg/VB . . R/C/P . ISgPl+ NSg/VB . NSg/I/J/R/C NSg/I/J/Dq NSg/VB/J/R/P . P  . D   . NSg/J NPl+   VP\n> happened lately , that         Alice had begun to think  that         very few       things indeed were\n# VP/J     R      . NSg/I/C/Ddem NPr+  VP  VPp   P  NSg/VB NSg/I/C/Ddem J/R  NSg/I/Dq+ NPl+   R      NSg/VLPt\n> really impossible .\n# R      NSg/J      .\n>\n#\n> There seemed to be       no       use     in        waiting  by    the little      door    , so          she  went    back     to the\n# R+    VP/J   P  NSg/VLXB NSg/Dq/P N🅪Sg/VB NPr/J/R/P Nᴹ/Vg/J+ NSg/P D+  NPr/I/J/Dq+ NSg/VB+ . NSg/I/J/R/C ISg+ NSg/VPt NSg/VB/J P  D+\n> table   , half      hoping  she  might    find   another key      on  it       , or    at    any    rate    a   book   of\n# NSg/VB+ . N🅪Sg/J/P+ Nᴹ/Vg/J ISg+ Nᴹ/VXB/J NSg/VB I/D     NPr/VB/J J/P NPr/ISg+ . NPr/C NSg/P I/R/Dq NSg/VB+ D/P NSg/VB P\n> rules   for   shutting people  up         like         telescopes : this   time       she  found  a   little\n# NPl/V3+ R/C/P NSg/Vg   NPl/VB+ NSg/VB/J/P NSg/VB/J/C/P NPl/V3     . I/Ddem N🅪Sg/VB/J+ ISg+ NSg/VP D/P NPr/I/J/Dq\n> bottle  on  it       , ( “ which certainly was  not     here before , ” said Alice , ) and  round      the\n# NSg/VB+ J/P NPr/ISg+ . . . I/C+  R         VLPt NSg/R/C J/R  C/P    . . VP/J NPr+  . . VB/C NSg/VB/J/P D\n> neck   of the bottle  was  a   paper      label   , with the words   “ DRINK   ME       , ” beautifully\n# NSg/VB P  D   NSg/VB+ VLPt D/P N🅪Sg/VB/J+ NSg/VB+ . P    D   NPl/V3+ . NSg/VB+ NPr/ISg+ . . R\n> printed on  it       in        large letters .\n# VP/J    J/P NPr/ISg+ NPr/J/R/P NSg/J NPl/V3+ .\n>\n#\n> It       was  all          very well       to say    “ Drink   me       , ” but     the wise      little      Alice was  not     going\n# NPr/ISg+ VLPt NSg/I/J/C/Dq J/R  NSg/VB/J/R P  NSg/VB . NSg/VB+ NPr/ISg+ . . NSg/C/P D+  NPr/VB/J+ NPr/I/J/Dq+ NPr+  VLPt NSg/R/C Nᴹ/Vg/J\n> to do  that          in        a    hurry   . “ No       , I’ll look   first , ” she  said , “ and  see    whether it’s\n# P  VXB NSg/I/C/Ddem+ NPr/J/R/P D/P+ NSg/VB+ . . NSg/Dq/P . K    NSg/VB NSg/J . . ISg+ VP/J . . VB/C NSg/VB I/C     K\n> marked ‘          poison   ’ or    not     ” ; for   she  had read    several nice  little     histories about\n# VP/J   Unlintable N🅪Sg/VB+ . NPr/C NSg/R/C . . R/C/P ISg+ VP  NSg/VBP J/Dq    NPr/J NPr/I/J/Dq NPl       J/P\n> children who    had got burnt , and  eaten up         by    wild     beasts and  other    unpleasant\n# NPl+     NPr/I+ VP  VP  VB/J  . VB/C VPp/J NSg/VB/J/P NSg/P NSg/VB/J NPl/V3 VB/C NSg/VB/J NSg/J\n> things , all          because they would not     remember the simple   rules   their friends   had\n# NPl+   . NSg/I/J/C/Dq C/P     IPl+ VXB   NSg/R/C NSg/VB   D   NSg/VB/J NPl/V3+ D$+   NPrPl/V3+ VP\n> taught them     : such  as    , that         a   red    - hot      poker   will    burn   you    if    you    hold     it       too\n# VP     NSg/IPl+ . NSg/I R/C/P . NSg/I/C/Ddem D/P N🅪Sg/J . NSg/VB/J NSg/VB+ NPr/VXB NSg/VB ISgPl+ NSg/C ISgPl+ NSg/VB/J NPr/ISg+ R\n> long     ; and  that         if    you    cut       your finger  very deeply with a   knife   , it       usually\n# NPr/VB/J . VB/C NSg/I/C/Ddem NSg/C ISgPl+ NSg/VBP/J D$+  NSg/VB+ J/R  R      P    D/P NSg/VB+ . NPr/ISg+ R\n> bleeds ; and  she  had never forgotten that          , if    you    drink   much         from a   bottle  marked\n# NPl/V3 . VB/C ISg+ VP  R     NSg/VPp/J NSg/I/C/Ddem+ . NSg/C ISgPl+ NSg/VB+ NSg/I/J/R/Dq P    D/P NSg/VB+ VP/J\n> “ poison   , ” it       is  almost certain to disagree with you    , sooner or    later .\n# . N🅪Sg/VB+ . . NPr/ISg+ VL3 R      I/J     P  VB       P    ISgPl+ . JC     NPr/C JC    .\n>\n#\n> However , this    bottle  was  not     marked “ poison   , ” so          Alice ventured to taste    it       , and\n# C       . I/Ddem+ NSg/VB+ VLPt NSg/R/C VP/J   . N🅪Sg/VB+ . . NSg/I/J/R/C NPr+  VP/J     P  NSg/VB/J NPr/ISg+ . VB/C\n> finding it       very nice  , ( it       had , in        fact , a   sort   of mixed flavour      of cherry    - tart     ,\n# Nᴹ/Vg/J NPr/ISg+ J/R  NPr/J . . NPr/ISg+ VP  . NPr/J/R/P NSg+ . D/P NSg/VB P  VP/J  N🅪Sg/VB/Comm P  NPr🅪Sg/J+ . NSg/VB/J .\n> custard , pine   - apple   , roast     turkey    , toffee  , and  hot      buttered toast    , ) she  very\n# N🅪Sg    . NSg/VB . NPr🅪Sg+ . N🅪Sg/VB/J NPr🅪Sg/J+ . N🅪Sg/VB . VB/C NSg/VB/J VP/J     N🅪Sg/VB+ . . ISg+ J/R\n> soon finished it       off        .\n# J/R  VP/J     NPr/ISg+ NSg/VB/J/P .\n>\n#\n> “ What   a    curious feeling    ! ” said Alice ; “ I       must    be       shutting up         like         a   telescope . ”\n# . NSg/I+ D/P+ J+      N🅪Sg/Vg/J+ . . VP/J NPr+  . . ISg/#r+ NSg/VXB NSg/VLXB NSg/Vg   NSg/VB/J/P NSg/VB/J/C/P D/P NSg/VB+   . .\n>\n#\n> And  so          it       was  indeed : she  was  now       only  ten inches  high       , and  her     face    brightened\n# VB/C NSg/I/J/R/C NPr/ISg+ VLPt R      . ISg+ VLPt NSg/J/R/C J/R/C NSg NPl/V3+ NSg/VB/J/R . VB/C ISg/D$+ NSg/VB+ VP/J\n> up         at    the thought that         she  was  now       the right    size     for   going   through the little\n# NSg/VB/J/P NSg/P D   N🅪Sg/VP NSg/I/C/Ddem ISg+ VLPt NSg/J/R/C D   NPr/VB/J N🅪Sg/VB+ R/C/P Nᴹ/Vg/J NSg/J/P D   NPr/I/J/Dq\n> door    into that         lovely garden    . First , however , she  waited for   a    few       minutes to\n# NSg/VB+ P    NSg/I/C/Ddem NSg/J  NSg/VB/J+ . NSg/J . C       . ISg+ VP/J   R/C/P D/P+ NSg/I/Dq+ NPl/V3+ P\n> see    if    she  was  going   to shrink any    further : she  felt      a   little     nervous about\n# NSg/VB NSg/C ISg+ VLPt Nᴹ/Vg/J P  NSg/VB I/R/Dq VB/JC   . ISg+ N🅪Sg/VP/J D/P NPr/I/J/Dq J       J/P\n> this    ; “ for   it       might    end     , you    know , ” said Alice to herself , “ in        my  going   out\n# I/Ddem+ . . R/C/P NPr/ISg+ Nᴹ/VXB/J NSg/VB+ . ISgPl+ VB   . . VP/J NPr+  P  ISg+    . . NPr/J/R/P D$+ Nᴹ/Vg/J NSg/VB/J/R/P\n> altogether , like         a    candle  . I       wonder  what   I       should be       like         then      ? ” And  she  tried\n# NSg        . NSg/VB/J/C/P D/P+ NSg/VB+ . ISg/#r+ N🅪Sg/VB NSg/I+ ISg/#r+ VXB    NSg/VLXB NSg/VB/J/C/P NSg/J/R/C . . VB/C ISg+ VP/J\n> to fancy    what   the flame    of a    candle  is  like         after the candle  is  blown out          , for\n# P  NSg/VB/J NSg/I+ D   NSg/VB/J P  D/P+ NSg/VB+ VL3 NSg/VB/J/C/P P     D+  NSg/VB+ VL3 VPp/J NSg/VB/J/R/P . R/C/P\n> she  could   not     remember ever having  seen    such   a    thing .\n# ISg+ NSg/VXB NSg/R/C NSg/VB   J/R  Nᴹ/Vg/J NSg/VPp NSg/I+ D/P+ NSg+  .\n>\n#\n> After a    while       , finding that         nothing  more         happened , she  decided  on  going   into the\n# P     D/P+ NSg/VB/C/P+ . Nᴹ/Vg/J NSg/I/C/Ddem NSg/I/J+ NPr/I/J/R/Dq VP/J     . ISg+ NSg/VP/J J/P Nᴹ/Vg/J P    D+\n> garden    at    once  ; but     , alas  for   poor      Alice ! when    she  got to the door    , she  found\n# NSg/VB/J+ NSg/P NSg/C . NSg/C/P . NPrPl R/C/P NSg/VB/J+ NPr+  . NSg/I/C ISg+ VP  P  D+  NSg/VB+ . ISg+ NSg/VP\n> she  had forgotten the little     golden   key      , and  when    she  went    back     to the table   for\n# ISg+ VP  NSg/VPp/J D   NPr/I/J/Dq NPr/VB/J NPr/VB/J . VB/C NSg/I/C ISg+ NSg/VPt NSg/VB/J P  D+  NSg/VB+ R/C/P\n> it       , she  found  she  could   not     possibly reach  it       : she  could   see    it       quite plainly\n# NPr/ISg+ . ISg+ NSg/VP ISg+ NSg/VXB NSg/R/C R        NSg/VB NPr/ISg+ . ISg+ NSg/VXB NSg/VB NPr/ISg+ R     R\n> through the glass      , and  she  tried her     best       to climb  up         one     of the legs   of the\n# NSg/J/P D   NPr🅪Sg/VB+ . VB/C ISg+ VP/J  ISg/D$+ NPr/VXB/JS P  NSg/VB NSg/VB/J/P NSg/I/J P  D   NPl/V3 P  D\n> table   , but     it       was  too slippery ; and  when    she  had tired herself out          with trying  ,\n# NSg/VB+ . NSg/C/P NPr/ISg+ VLPt R   J        . VB/C NSg/I/C ISg+ VP  VP/J  ISg+    NSg/VB/J/R/P P    Nᴹ/Vg/J .\n> the poor     little     thing sat      down        and  cried .\n# D   NSg/VB/J NPr/I/J/Dq NSg+  NSg/VP/J N🅪Sg/VB/J/P VB/C VP/J  .\n>\n#\n> “ Come       , there’s no       use     in        crying  like         that          ! ” said Alice to herself , rather\n# . NSg/VBPp/P . K       NSg/Dq/P N🅪Sg/VB NPr/J/R/P Nᴹ/Vg/J NSg/VB/J/C/P NSg/I/C/Ddem+ . . VP/J NPr+  P  ISg+    . NPr/VB/J/R\n> sharply ; “ I       advise you    to leave  off        this    minute    ! ” She  generally gave herself\n# R       . . ISg/#r+ NSg/VB ISgPl+ P  NSg/VB NSg/VB/J/P I/Ddem+ NSg/VB/J+ . . ISg+ R         VPt  ISg+\n> very good      advice , ( though she  very seldom followed it       ) , and  sometimes she\n# J/R  NPr/VB/J+ Nᴹ+    . . C      ISg+ J/R  R      VP/J     NPr/ISg+ . . VB/C R         ISg+\n> scolded herself so          severely as    to bring tears   into her     eyes    ; and  once  she\n# VP/J    ISg+    NSg/I/J/R/C R        R/C/P P  VB    NPl/V3+ P    ISg/D$+ NPl/V3+ . VB/C NSg/C ISg+\n> remembered trying  to box    her     own      ears    for   having  cheated herself in        a   game      of\n# VP/J       Nᴹ/Vg/J P  NSg/VB ISg/D$+ NSg/VB/J NPl/V3+ R/C/P Nᴹ/Vg/J VP/J    ISg+    NPr/J/R/P D/P NSg/VB/J+ P\n> croquet she  was  playing against herself , for   this   curious child   was  very fond     of\n# NSg/VB  ISg+ VLPt Nᴹ/Vg/J C/P     ISg+    . R/C/P I/Ddem J       NSg/VB+ VLPt J/R  NSg/VB/J P\n> pretending to be       two people  . “ But     it’s no       use     now       , ” thought poor     Alice , “ to\n# Nᴹ/Vg/J    P  NSg/VLXB NSg NPl/VB+ . . NSg/C/P K    NSg/Dq/P N🅪Sg/VB NSg/J/R/C . . N🅪Sg/VP NSg/VB/J NPr+  . . P\n> pretend  to be       two people  ! Why    , there’s hardly enough of me       left     to make   one\n# NSg/VB/J P  NSg/VLXB NSg NPl/VB+ . NSg/VB . K       R      NSg/I  P  NPr/ISg+ NPr/VP/J P  NSg/VB NSg/I/J\n> respectable person  ! ”\n# NSg/J       NSg/VB+ . .\n>\n#\n> Soon her     eye     fell      on  a    little      glass      box     that          was  lying   under   the table   : she\n# J/R  ISg/D$+ NSg/VB+ NSg/VPt/J J/P D/P+ NPr/I/J/Dq+ NPr🅪Sg/VB+ NSg/VB+ NSg/I/C/Ddem+ VLPt Nᴹ/Vg/J NSg/J/P D+  NSg/VB+ . ISg+\n> opened it       , and  found  in        it       a   very small     cake     , on  which the words   “ EAT ME       ” were\n# VP/J   NPr/ISg+ . VB/C NSg/VP NPr/J/R/P NPr/ISg+ D/P J/R  NPr/VB/J+ N🅪Sg/VB+ . J/P I/C+  D+  NPl/V3+ . VB  NPr/ISg+ . NSg/VLPt\n> beautifully marked in        currants . “ Well       , I’ll eat it       , ” said Alice , “ and  if    it\n# R           VP/J   NPr/J/R/P NPl      . . NSg/VB/J/R . K    VB  NPr/ISg+ . . VP/J NPr+  . . VB/C NSg/C NPr/ISg+\n> makes  me       grow larger , I       can     reach  the key      ; and  if    it       makes  me       grow smaller , I\n# NPl/V3 NPr/ISg+ VB   JC     . ISg/#r+ NPr/VXB NSg/VB D   NPr/VB/J . VB/C NSg/C NPr/ISg+ NPl/V3 NPr/ISg+ VB   NSg/JC  . ISg/#r+\n> can     creep   under   the door    ; so          either way    I’ll get    into the garden    , and  I       don’t\n# NPr/VXB NSg/VB+ NSg/J/P D   NSg/VB+ . NSg/I/J/R/C I/C    NSg/J+ K    NSg/VB P    D   NSg/VB/J+ . VB/C ISg/#r+ VXB\n> care     which happens ! ”\n# N🅪Sg/VB+ I/C+  V3      . .\n>\n#\n> She  ate     a    little      bit      , and  said anxiously to herself , “ Which way    ? Which way    ? ” ,\n# ISg+ NSg/VPt D/P+ NPr/I/J/Dq+ NSg/VPt+ . VB/C VP/J R         P  ISg+    . . I/C+  NSg/J+ . I/C+  NSg/J+ . . .\n> holding her     hand    on  the top      of her     head      to feel     which way    it       was  growing , and\n# Nᴹ/Vg/J ISg/D$+ NSg/VB+ J/P D   NSg/VB/J P  ISg/D$+ NPr/VB/J+ P  NSg/I/VB I/C+  NSg/J+ NPr/ISg+ VLPt Nᴹ/Vg/J . VB/C\n> she  was  quite surprised to find   that         she  remained the same size     : to be       sure ,\n# ISg+ VLPt R     VP/J      P  NSg/VB NSg/I/C/Ddem ISg+ VP/J     D+  I/J+ N🅪Sg/VB+ . P  NSg/VLXB J    .\n> this   generally happens when    one     eats cake     , but     Alice had got so          much         into the\n# I/Ddem R         V3      NSg/I/C NSg/I/J V3   N🅪Sg/VB+ . NSg/C/P NPr+  VP  VP  NSg/I/J/R/C NSg/I/J/R/Dq P    D\n> way   of expecting nothing  but     out          - of - the - way   things to happen , that         it       seemed\n# NSg/J P  Nᴹ/Vg/J   NSg/I/J+ NSg/C/P NSg/VB/J/R/P . P  . D   . NSg/J NPl    P  VB     . NSg/I/C/Ddem NPr/ISg+ VP/J\n> quite dull and  stupid for   life     to go       on  in        the common    way    .\n# R     VB/J VB/C NSg/J  R/C/P N🅪Sg/VB+ P  NSg/VB/J J/P NPr/J/R/P D+  NSg/VB/J+ NSg/J+ .\n>\n#\n> So          she  set       to work    , and  very soon finished off        the cake     .\n# NSg/I/J/R/C ISg+ NPr/VBP/J P  N🅪Sg/VB . VB/C J/R  J/R  VP/J     NSg/VB/J/P D+  N🅪Sg/VB+ .\n>\n#\n>              CHAPTER II : The Pool   of Tears\n# HeadingStart NSg/VB+ #r . D   NSg/VB P  NPl/V3+\n>\n#\n> “ Curiouser and  curiouser ! ” cried Alice ( she  was  so          much         surprised , that         for   the\n# . ?         VB/C ?         . . VP/J  NPr+  . ISg+ VLPt NSg/I/J/R/C NSg/I/J/R/Dq VP/J      . NSg/I/C/Ddem R/C/P D+\n> moment she  quite forgot how   to speak  good      English      ) ; “ now       I’m opening out          like\n# NSg+   ISg+ R     VPt    NSg/C P  NSg/VB NPr/VB/J+ NPr🅪Sg/VB/J+ . . . NSg/J/R/C K   Nᴹ/Vg/J NSg/VB/J/R/P NSg/VB/J/C/P\n> the largest telescope that          ever was  ! Good     - bye     , feet ! ” ( for   when    she  looked down\n# D   JS      NSg/VB+   NSg/I/C/Ddem+ J/R  VLPt . NPr/VB/J . NSg/J/P . NPl+ . . . R/C/P NSg/I/C ISg+ VP/J   N🅪Sg/VB/J/P\n> at    her     feet , they seemed to be       almost out          of sight    , they were     getting so          far\n# NSg/P ISg/D$+ NPl+ . IPl+ VP/J   P  NSg/VLXB R      NSg/VB/J/R/P P  N🅪Sg/VB+ . IPl+ NSg/VLPt NSg/Vg  NSg/I/J/R/C NSg/VB/J\n> off        ) . “ Oh     , my  poor      little      feet , I       wonder  who    will    put     on  your shoes  and\n# NSg/VB/J/P . . . NPr/VB . D$+ NSg/VB/J+ NPr/I/J/Dq+ NPl+ . ISg/#r+ N🅪Sg/VB NPr/I+ NPr/VXB NSg/VBP J/P D$+  NPl/V3 VB/C\n> stockings for   you    now       , dears   ? I’m sure I       shan’t be       able     ! I       shall be       a    great  deal\n# NPl/V3+   R/C/P ISgPl+ NSg/J/R/C . NPl/V3+ . K   J    ISg/#r+ VXB    NSg/VLXB NSg/VB/J . ISg/#r+ VXB   NSg/VLXB D/P+ NSg/J+ NSg/VB/J+\n> too far      off        to trouble myself about you    : you    must    manage the best        way    you\n# R   NSg/VB/J NSg/VB/J/P P  N🅪Sg/VB ISg+   J/P   ISgPl+ . ISgPl+ NSg/VXB NSg/VB D+  NPr/VXB/JS+ NSg/J+ ISgPl+\n> can     ; — but     I       must    be       kind  to them     , ” thought Alice , “ or    perhaps they won’t walk   the\n# NPr/VXB . . NSg/C/P ISg/#r+ NSg/VXB NSg/VLXB NSg/J P  NSg/IPl+ . . N🅪Sg/VP NPr+  . . NPr/C NSg/R   IPl+ VXB   NSg/VB D\n> way    I       want   to go       ! Let     me       see    : I’ll give   them     a   new   pair   of boots   every\n# NSg/J+ ISg/#r+ NSg/VB P  NSg/VB/J . NSg/VBP NPr/ISg+ NSg/VB . K    NSg/VB NSg/IPl+ D/P NSg/J NSg/VB P  NPl/V3+ Dq\n> Christmas . ”\n# NPr/VB/J+ . .\n>\n#\n> And  she  went    on  planning to herself how   she  would manage it       . “ They must    go       by\n# VB/C ISg+ NSg/VPt J/P NSg/Vg   P  ISg+    NSg/C ISg+ VXB   NSg/VB NPr/ISg+ . . IPl+ NSg/VXB NSg/VB/J NSg/P\n> the carrier , ” she  thought ; “ and  how   funny it’ll seem , sending presents to one’s\n# D+  NPr+    . . ISg+ N🅪Sg/VP . . VB/C NSg/C NSg/J K     VB   . Nᴹ/Vg/J NPl/V3+  P  NSg$\n> own      feet ! And  how   odd    the directions will    look   !\n# NSg/VB/J NPl+ . VB/C NSg/C NSg/J+ D+  NPl+       NPr/VXB NSg/VB .\n>\n#\n> Alice’s Right     Foot    , Esq . , Hearthrug , near       the Fender , ( with Alice’s love      ) .\n# NPr$    NPr/VB/J+ NSg/VB+ . NSg . . NSg       . NSg/VB/J/P D   NSg/VB . . P    NPr$    NPr🅪Sg/VB . .\n>\n#\n> Oh     dear     , what   nonsense I’m talking ! ”\n# NPr/VB NSg/VB/J . NSg/I+ Nᴹ/VB/J+ K   Nᴹ/Vg/J . .\n>\n#\n> Just then      her     head      struck against the roof   of the hall : in        fact she  was  now       more\n# J/R  NSg/J/R/C ISg/D$+ NPr/VB/J+ VB     C/P     D   NSg/VB P  D+  NPr+ . NPr/J/R/P NSg+ ISg+ VLPt NSg/J/R/C NPr/I/J/R/Dq\n> than nine feet high       , and  she  at    once  took up         the little     golden   key      and  hurried\n# C/P  NSg+ NPl+ NSg/VB/J/R . VB/C ISg+ NSg/P NSg/C VPt  NSg/VB/J/P D   NPr/I/J/Dq NPr/VB/J NPr/VB/J VB/C VP/J\n> off        to the garden    door    .\n# NSg/VB/J/P P  D+  NSg/VB/J+ NSg/VB+ .\n>\n#\n> Poor      Alice ! It       was  as    much         as    she  could   do  , lying   down        on  one      side      , to look\n# NSg/VB/J+ NPr+  . NPr/ISg+ VLPt R/C/P NSg/I/J/R/Dq R/C/P ISg+ NSg/VXB VXB . Nᴹ/Vg/J N🅪Sg/VB/J/P J/P NSg/I/J+ NSg/VB/J+ . P  NSg/VB\n> through into the garden    with one      eye     ; but     to get    through was  more         hopeless than\n# NSg/J/P P    D   NSg/VB/J+ P    NSg/I/J+ NSg/VB+ . NSg/C/P P  NSg/VB NSg/J/P VLPt NPr/I/J/R/Dq J        C/P\n> ever : she  sat      down        and  began to cry    again .\n# J/R  . ISg+ NSg/VP/J N🅪Sg/VB/J/P VB/C VPt   P  NSg/VB P     .\n>\n#\n> “ You    ought     to be       ashamed of yourself , ” said Alice , “ a   great girl    like         you    , ” ( she\n# . ISgPl+ NSg/I/VXB P  NSg/VLXB J       P  ISg+     . . VP/J NPr+  . . D/P NSg/J NSg/VB+ NSg/VB/J/C/P ISgPl+ . . . ISg+\n> might    well       say    this    ) , “ to go       on  crying  in        this    way    ! Stop   this    moment , I       tell\n# Nᴹ/VXB/J NSg/VB/J/R NSg/VB I/Ddem+ . . . P  NSg/VB/J J/P Nᴹ/Vg/J NPr/J/R/P I/Ddem+ NSg/J+ . NSg/VB I/Ddem+ NSg+   . ISg/#r+ NPr/VB\n> you    ! ” But     she  went    on  all          the same , shedding gallons of tears   , until there was  a\n# ISgPl+ . . NSg/C/P ISg+ NSg/VPt J/P NSg/I/J/C/Dq D   I/J  . NSg/Vg   NPl     P  NPl/V3+ . C/P   R+    VLPt D/P\n> large pool    all          round      her     , about four inches  deep  and  reaching half      down        the\n# NSg/J NSg/VB+ NSg/I/J/C/Dq NSg/VB/J/P ISg/D$+ . J/P   NSg  NPl/V3+ NSg/J VB/C Nᴹ/Vg/J  N🅪Sg/J/P+ N🅪Sg/VB/J/P D\n> hall .\n# NPr+ .\n>\n#\n> After a    time       she  heard a   little     pattering of feet in        the distance , and  she\n# P     D/P+ N🅪Sg/VB/J+ ISg+ VP/J  D/P NPr/I/J/Dq Nᴹ/Vg/J   P  NPl  NPr/J/R/P D   N🅪Sg/VB+ . VB/C ISg+\n> hastily dried her     eyes    to see    what   was  coming  . It       was  the White       Rabbit\n# R       VP/J  ISg/D$+ NPl/V3+ P  NSg/VB NSg/I+ VLPt Nᴹ/Vg/J . NPr/ISg+ VLPt D   NPr🅪Sg/VB/J NSg/VB\n> returning , splendidly dressed , with a   pair   of white        kid     gloves  in        one     hand   and  a\n# Nᴹ/Vg/J   . R          VP/J    . P    D/P NSg/VB P  NPr🅪Sg/VB/J+ NSg/VB+ NPl/V3+ NPr/J/R/P NSg/I/J NSg/VB VB/C D/P+\n> large  fan     in        the other    : he       came      trotting along in        a    great  hurry   , muttering to\n# NSg/J+ NSg/VB+ NPr/J/R/P D   NSg/VB/J . NPr/ISg+ NSg/VPt/P NSg/Vg/J P     NPr/J/R/P D/P+ NSg/J+ NSg/VB+ . Nᴹ/Vg/J   P\n> himself as    he       came      , “ Oh     ! the Duchess , the Duchess ! Oh     ! won’t she  be       savage    if\n# ISg+    R/C/P NPr/ISg+ NSg/VPt/P . . NPr/VB . D   NSg/VB  . D   NSg/VB  . NPr/VB . VXB   ISg+ NSg/VLXB NPr/VB/J+ NSg/C\n> I’ve kept her     waiting ! ” Alice felt      so          desperate that         she  was  ready    to ask    help\n# K    VP   ISg/D$+ Nᴹ/Vg/J . . NPr+  N🅪Sg/VP/J NSg/I/J/R/C NSg/J     NSg/I/C/Ddem ISg+ VLPt NSg/VB/J P  NSg/VB NSg/VB\n> of any     one      ; so          , when    the Rabbit  came      near       her     , she  began , in        a   low        , timid voice   ,\n# P  I/R/Dq+ NSg/I/J+ . NSg/I/J/R/C . NSg/I/C D+  NSg/VB+ NSg/VPt/P NSg/VB/J/P ISg/D$+ . ISg+ VPt   . NPr/J/R/P D/P NSg/VB/J/R . J+    NSg/VB+ .\n> “ If    you    please , sir     — ” The Rabbit  started violently , dropped the white        kid     gloves\n# . NSg/C ISgPl+ VB     . NPr/VB+ . . D+  NSg/VB+ VP/J    R         . VP/J    D+  NPr🅪Sg/VB/J+ NSg/VB+ NPl/V3\n> and  the fan     , and  skurried away into the darkness as    hard     as    he       could   go       .\n# VB/C D+  NSg/VB+ . VB/C ?        VB/J P    D   Nᴹ+      R/C/P N🅪Sg/J/R R/C/P NPr/ISg+ NSg/VXB NSg/VB/J .\n>\n#\n> Alice took up         the fan    and  gloves  , and  , as    the hall was  very hot      , she  kept\n# NPr+  VPt  NSg/VB/J/P D   NSg/VB VB/C NPl/V3+ . VB/C . R/C/P D+  NPr+ VLPt J/R  NSg/VB/J . ISg+ VP\n> fanning herself all          the time       she  went    on  talking : “ Dear     , dear     ! How   queer\n# NSg/Vg  ISg+    NSg/I/J/C/Dq D   N🅪Sg/VB/J+ ISg+ NSg/VPt J/P Nᴹ/Vg/J . . NSg/VB/J . NSg/VB/J . NSg/C NSg/VB/J\n> everything is  to - day     ! And  yesterday things went    on  just as    usual . I       wonder  if\n# NSg/I/VB+  VL3 P  . NPr🅪Sg+ . VB/C NSg+      NPl+   NSg/VPt J/P J/R  R/C/P NSg/J . ISg/#r+ N🅪Sg/VB NSg/C\n> I’ve been     changed in        the night    ? Let     me       think  : was  I       the same when    I       got up         this\n# K    NSg/VLPp VP/J    NPr/J/R/P D   N🅪Sg/VB+ . NSg/VBP NPr/ISg+ NSg/VB . VLPt ISg/#r+ D   I/J  NSg/I/C ISg/#r+ VP  NSg/VB/J/P I/Ddem+\n> morning    ? I       almost think  I       can     remember feeling   a   little     different . But     if    I’m\n# N🅪Sg/Vg/J+ . ISg/#r+ R      NSg/VB ISg/#r+ NPr/VXB NSg/VB   N🅪Sg/Vg/J D/P NPr/I/J/Dq NSg/J     . NSg/C/P NSg/C K\n> not     the same , the next    question is  , Who    in        the world   am        I       ? Ah       , that’s the great\n# NSg/R/C D   I/J  . D   NSg/J/P NSg/VB+  VL3 . NPr/I+ NPr/J/R/P D   NSg/VB+ NPr/VLB/J ISg/#r+ . NSg/I/VB . NSg$   D   NSg/J\n> puzzle ! ” And  she  began thinking over    all           the children she  knew that          were     of the\n# NSg/VB . . VB/C ISg+ VPt   Nᴹ/Vg/J  NSg/J/P NSg/I/J/C/Dq+ D+  NPl+     ISg+ VPt  NSg/I/C/Ddem+ NSg/VLPt P  D+\n> same age      as    herself , to see    if    she  could   have    been     changed for   any    of them     .\n# I/J+ N🅪Sg/VB+ R/C/P ISg+    . P  NSg/VB NSg/C ISg+ NSg/VXB NSg/VXB NSg/VLPp VP/J    R/C/P I/R/Dq P  NSg/IPl+ .\n>\n#\n> “ I’m sure I’m not     Ada  , ” she  said , “ for   her     hair     goes   in        such  long     ringlets , and\n# . K   J    K   NSg/R/C NPr+ . . ISg+ VP/J . . R/C/P ISg/D$+ N🅪Sg/VB+ NPl/V3 NPr/J/R/P NSg/I NPr/VB/J NPl/V3   . VB/C\n> mine      doesn’t go       in        ringlets at    all          ; and  I’m sure I       can’t be       Mabel , for   I       know\n# NSg/I/VB+ VX3     NSg/VB/J NPr/J/R/P NPl/V3   NSg/P NSg/I/J/C/Dq . VB/C K   J    ISg/#r+ VXB   NSg/VLXB NPr   . R/C/P ISg/#r+ VB\n> all          sorts  of things , and  she  , oh     ! she  knows such  a   very little     ! Besides , she’s\n# NSg/I/J/C/Dq NPl/V3 P  NPl+   . VB/C ISg+ . NPr/VB . ISg+ V3    NSg/I D/P J/R  NPr/I/J/Dq . R/P     . K\n> she  , and  I’m I       , and  — oh     dear     , how   puzzling it       all          is  ! I’ll try      if    I       know all          the\n# ISg+ . VB/C K   ISg/#r+ . VB/C . NPr/VB NSg/VB/J . NSg/C Nᴹ/Vg/J  NPr/ISg+ NSg/I/J/C/Dq VL3 . K    NSg/VB/J NSg/C ISg/#r+ VB   NSg/I/J/C/Dq D\n> things I       used to know . Let     me       see    : four times   five is   twelve , and  four times   six\n# NPl+   ISg/#r+ VP/J P  VB   . NSg/VBP NPr/ISg+ NSg/VB . NSg  NPl/V3+ NSg  VL3+ NSg    . VB/C NSg+ NPl/V3+ NSg\n> is   thirteen , and  four times   seven is   — oh     dear     ! I       shall never get    to twenty at\n# VL3+ NSg      . VB/C NSg+ NPl/V3+ NSg+  VL3+ . NPr/VB NSg/VB/J . ISg/#r+ VXB   R     NSg/VB P  NSg    NSg/P\n> that          rate    ! However , the Multiplication Table   doesn’t signify : let’s try\n# NSg/I/C/Ddem+ NSg/VB+ . C       . D   Nᴹ             NSg/VB+ VX3     VB      . NSg$  NSg/VB/J\n> Geography . London is  the capital of Paris , and  Paris is  the capital of Rome , and\n# N🅪Sg+     . NPr+   VL3 D   N🅪Sg/J  P  NPr+  . VB/C NPr+  VL3 D   N🅪Sg/J  P  NPr+ . VB/C\n> Rome — no       , that’s all          wrong      , I’m certain ! I       must    have    been     changed for   Mabel ! I’ll\n# NPr+ . NSg/Dq/P . NSg$   NSg/I/J/C/Dq NSg/VB/J/R . K   I/J     . ISg/#r+ NSg/VXB NSg/VXB NSg/VLPp VP/J    R/C/P NPr   . K\n> try      and  say    ‘          How   doth the little     — ’ ” and  she  crossed her     hands   on  her     lap       as    if\n# NSg/VB/J VB/C NSg/VB Unlintable NSg/C V3   D   NPr/I/J/Dq . . . VB/C ISg+ VP/J    ISg/D$+ NPl/V3+ J/P ISg/D$+ NSg/VB/J+ R/C/P NSg/C\n> she  were     saying    lessons , and  began to repeat it       , but     her     voice   sounded hoarse\n# ISg+ NSg/VLPt N🅪Sg/Vg/J NPl/V3+ . VB/C VPt   P  NSg/VB NPr/ISg+ . NSg/C/P ISg/D$+ NSg/VB+ VP/J    NSg/VB/J\n> and  strange  , and  the words   did  not     come       the same as    they used to do  : —\n# VB/C NSg/VB/J . VB/C D   NPl/V3+ VXPt NSg/R/C NSg/VBPp/P D   I/J  R/C/P IPl+ VP/J P  VXB . .\n>\n#\n> “ How   doth the little     crocodile Improve his     shining tail      , And  pour   the waters\n# . NSg/C V3   D+  NPr/I/J/Dq NSg/VB+   VB      ISg/D$+ Nᴹ/Vg/J NSg/VB/J+ . VB/C NSg/VB D   NPrPl/V3\n> of the Nile On  every golden   scale    !\n# P  D   NPr+ J/P Dq    NPr/VB/J N🅪Sg/VB+ .\n>\n#\n> “ How   cheerfully he       seems to grin   , How   neatly spread   his     claws   , And  welcome\n# . NSg/C R          NPr/ISg+ V3    P  NSg/VB . NSg/C R      N🅪Sg/VBP ISg/D$+ NPl/V3+ . VB/C NSg/VB/J\n> little     fishes  in        With gently smiling jaws    ! ”\n# NPr/I/J/Dq NPl/V3+ NPr/J/R/P P    R      Nᴹ/Vg/J NPl/V3+ . .\n>\n#\n> “ I’m sure those   are not     the right    words   , ” said poor     Alice , and  her     eyes    filled\n# . K   J    I/Ddem+ VLB NSg/R/C D   NPr/VB/J NPl/V3+ . . VP/J NSg/VB/J NPr+  . VB/C ISg/D$+ NPl/V3+ VP/J\n> with tears   again as    she  went    on  , “ I       must    be       Mabel after all          , and  I       shall have    to\n# P    NPl/V3+ P     R/C/P ISg+ NSg/VPt J/P . . ISg/#r+ NSg/VXB NSg/VLXB NPr   P     NSg/I/J/C/Dq . VB/C ISg/#r+ VXB   NSg/VXB P\n> go       and  live in        that         poky  little     house   , and  have    next    to no       toys    to play    with ,\n# NSg/VB/J VB/C VB/J NPr/J/R/P NSg/I/C/Ddem NSg/J NPr/I/J/Dq NPr/VB+ . VB/C NSg/VXB NSg/J/P P  NSg/Dq/P NPl/V3+ P  N🅪Sg/VB P    .\n> and  oh     ! ever so          many       lessons to learn  ! No       , I’ve made up         my  mind    about it       ; if    I’m\n# VB/C NPr/VB . J/R  NSg/I/J/R/C NSg/I/J/Dq NPl/V3+ P  NSg/VB . NSg/Dq/P . K    VP   NSg/VB/J/P D$+ NSg/VB+ J/P   NPr/ISg+ . NSg/C K\n> Mabel , I’ll stay     down        here ! It’ll be       no       use     their putting their heads   down        and\n# NPr   . K    NSg/VB/J N🅪Sg/VB/J/P J/R  . K     NSg/VLXB NSg/Dq/P N🅪Sg/VB D$+   Nᴹ/Vg/J D$+   NPl/V3+ N🅪Sg/VB/J/P VB/C\n> saying    ‘          Come       up         again , dear     ! ’ I       shall only  look   up         and  say    ‘          Who    am        I       then      ? Tell\n# N🅪Sg/Vg/J Unlintable NSg/VBPp/P NSg/VB/J/P P     . NSg/VB/J . . ISg/#r+ VXB   J/R/C NSg/VB NSg/VB/J/P VB/C NSg/VB Unlintable NPr/I+ NPr/VLB/J ISg/#r+ NSg/J/R/C . NPr/VB\n> me       that         first , and  then      , if    I       like         being        that          person  , I’ll come       up         : if    not     , I’ll\n# NPr/ISg+ NSg/I/C/Ddem NSg/J . VB/C NSg/J/R/C . NSg/C ISg/#r+ NSg/VB/J/C/P N🅪Sg/VLg/J/C NSg/I/C/Ddem+ NSg/VB+ . K    NSg/VBPp/P NSg/VB/J/P . NSg/C NSg/R/C . K\n> stay     down        here till       I’m somebody else    ’ — but     , oh     dear     ! ” cried Alice , with a   sudden\n# NSg/VB/J N🅪Sg/VB/J/P J/R  NSg/VB/C/P K   NSg/I+   NSg/J/C . . NSg/C/P . NPr/VB NSg/VB/J . . VP/J  NPr+  . P    D/P NSg/J\n> burst  of tears   , “ I       do  wish   they would put     their heads   down        ! I       am        so          very tired\n# NSg/VB P  NPl/V3+ . . ISg/#r+ VXB NSg/VB IPl+ VXB   NSg/VBP D$+   NPl/V3+ N🅪Sg/VB/J/P . ISg/#r+ NPr/VLB/J NSg/I/J/R/C J/R  VP/J\n> of being        all          alone here ! ”\n# P  N🅪Sg/VLg/J/C NSg/I/J/C/Dq J     J/R  . .\n>\n#\n> As    she  said this    she  looked down        at    her     hands   , and  was  surprised to see    that         she\n# R/C/P ISg+ VP/J I/Ddem+ ISg+ VP/J   N🅪Sg/VB/J/P NSg/P ISg/D$+ NPl/V3+ . VB/C VLPt VP/J      P  NSg/VB NSg/I/C/Ddem ISg+\n> had put     on  one     of the Rabbit’s little     white       kid     gloves  while      she  was  talking .\n# VP  NSg/VBP J/P NSg/I/J P  D   NSg$     NPr/I/J/Dq NPr🅪Sg/VB/J NSg/VB+ NPl/V3+ NSg/VB/C/P ISg+ VLPt Nᴹ/Vg/J .\n> “ How   can     I       have    done      that          ? ” she  thought . “ I       must    be       growing small    again . ” She\n# . NSg/C NPr/VXB ISg/#r+ NSg/VXB NSg/VPp/J NSg/I/C/Ddem+ . . ISg+ N🅪Sg/VP . . ISg/#r+ NSg/VXB NSg/VLXB Nᴹ/Vg/J NPr/VB/J P     . . ISg+\n> got up         and  went    to the table   to measure herself by    it       , and  found  that          , as    nearly\n# VP  NSg/VB/J/P VB/C NSg/VPt P  D+  NSg/VB+ P  NSg/VB  ISg+    NSg/P NPr/ISg+ . VB/C NSg/VP NSg/I/C/Ddem+ . R/C/P R\n> as    she  could   guess  , she  was  now       about two  feet high       , and  was  going   on  shrinking\n# R/C/P ISg+ NSg/VXB NSg/VB . ISg+ VLPt NSg/J/R/C J/P   NSg+ NPl+ NSg/VB/J/R . VB/C VLPt Nᴹ/Vg/J J/P Nᴹ/Vg/J\n> rapidly : she  soon found  out          that         the cause     of this    was  the fan    she  was  holding ,\n# R       . ISg+ J/R  NSg/VP NSg/VB/J/R/P NSg/I/C/Ddem D   N🅪Sg/VB/C P  I/Ddem+ VLPt D+  NSg/VB ISg+ VLPt Nᴹ/Vg/J .\n> and  she  dropped it       hastily , just in        time       to avoid shrinking away altogether .\n# VB/C ISg+ VP/J    NPr/ISg+ R       . J/R  NPr/J/R/P N🅪Sg/VB/J+ P  VB    Nᴹ/Vg/J   VB/J NSg        .\n>\n#\n> “ That          was  a   narrow   escape  ! ” said Alice , a    good      deal      frightened at    the sudden\n# . NSg/I/C/Ddem+ VLPt D/P NSg/VB/J N🅪Sg/VB . . VP/J NPr+  . D/P+ NPr/VB/J+ NSg/VB/J+ VP/J       NSg/P D+  NSg/J+\n> change   , but     very glad     to find   herself still      in        existence ; “ and  now       for   the\n# N🅪Sg/VB+ . NSg/C/P J/R  NSg/VB/J P  NSg/VB ISg+    NSg/VB/J/R NPr/J/R/P NSg+      . . VB/C NSg/J/R/C R/C/P D+\n> garden    ! ” and  she  ran     with all           speed    back     to the little      door    : but     , alas  ! the\n# NSg/VB/J+ . . VB/C ISg+ NSg/VPt P    NSg/I/J/C/Dq+ N🅪Sg/VB+ NSg/VB/J P  D+  NPr/I/J/Dq+ NSg/VB+ . NSg/C/P . NPrPl . D+\n> little      door    was  shut      again , and  the little      golden    key       was  lying   on  the glass\n# NPr/I/J/Dq+ NSg/VB+ VLPt NSg/VBP/J P     . VB/C D+  NPr/I/J/Dq+ NPr/VB/J+ NPr/VB/J+ VLPt Nᴹ/Vg/J J/P D+  NPr🅪Sg/VB+\n> table   as    before , “ and  things are worse     than ever , ” thought the poor      child   , “ for\n# NSg/VB+ R/C/P C/P    . . VB/C NPl+   VLB NSg/VB/JC C/P  J/R  . . N🅪Sg/VP D+  NSg/VB/J+ NSg/VB+ . . R/C/P\n> I       never was  so          small    as    this   before , never ! And  I       declare it’s too bad      , that         it\n# ISg/#r+ R     VLPt NSg/I/J/R/C NPr/VB/J R/C/P I/Ddem C/P    . R     . VB/C ISg/#r+ VB      K    R   NSg/VB/J . NSg/I/C/Ddem NPr/ISg+\n> is  ! ”\n# VL3 . .\n>\n#\n> As    she  said these   words   her     foot    slipped , and  in        another moment , splash  ! she  was\n# R/C/P ISg+ VP/J I/Ddem+ NPl/V3+ ISg/D$+ NSg/VB+ VP/J    . VB/C NPr/J/R/P I/D+    NSg+   . NSg/VB+ . ISg+ VLPt\n> up         to her     chin    in        salt         water    . Her     first  idea was  that         she  had somehow fallen\n# NSg/VB/J/P P  ISg/D$+ NPr/VB+ NPr/J/R/P NPr🅪Sg/VB/J+ N🅪Sg/VB+ . ISg/D$+ NSg/J+ NSg+ VLPt NSg/I/C/Ddem ISg+ VP  R       VPp/J\n> into the sea  , “ and  in        that         case       I       can     go       back     by    railway , ” she  said to herself .\n# P    D+  NSg+ . . VB/C NPr/J/R/P NSg/I/C/Ddem NPr🅪Sg/VB+ ISg/#r+ NPr/VXB NSg/VB/J NSg/VB/J NSg/P NSg+    . . ISg+ VP/J P  ISg+    .\n> ( Alice had been     to the seaside once  in        her     life     , and  had come       to the general\n# . NPr+  VP  NSg/VLPp P  D   NPr/J   NSg/C NPr/J/R/P ISg/D$+ N🅪Sg/VB+ . VB/C VP  NSg/VBPp/P P  D   NSg/VB/J\n> conclusion , that          wherever you    go       to on  the English      coast   you    find   a   number     of\n# NSg+       . NSg/I/C/Ddem+ C        ISgPl+ NSg/VB/J P  J/P D   NPr🅪Sg/VB/J+ NSg/VB+ ISgPl+ NSg/VB D/P N🅪Sg/VB/JC P\n> bathing machines in        the sea  , some     children digging in        the sand      with wooden\n# Nᴹ/Vg/J NPl/V3+  NPr/J/R/P D   NSg+ . I/J/R/Dq NPl+     NSg/Vg  NPr/J/R/P D   NSg/VB/J+ P    J\n> spades , then      a   row    of lodging    houses  , and  behind  them     a   railway station . )\n# NPl/V3 . NSg/J/R/C D/P NSg/VB P  N🅪Sg/Vg/J+ NPl/V3+ . VB/C NSg/J/P NSg/IPl+ D/P NSg+    NSg/VB+ . .\n> However , she  soon made out          that         she  was  in        the pool   of tears   which she  had wept\n# C       . ISg+ J/R  VP   NSg/VB/J/R/P NSg/I/C/Ddem ISg+ VLPt NPr/J/R/P D   NSg/VB P  NPl/V3+ I/C+  ISg+ VP  VB\n> when    she  was  nine feet high       .\n# NSg/I/C ISg+ VLPt NSg  NPl  NSg/VB/J/R .\n>\n#\n> “ I       wish   I       hadn’t cried so          much         ! ” said Alice , as    she  swam about , trying  to find\n# . ISg/#r+ NSg/VB ISg/#r+ VPt    VP/J  NSg/I/J/R/C NSg/I/J/R/Dq . . VP/J NPr+  . R/C/P ISg+ VPt  J/P   . Nᴹ/Vg/J P  NSg/VB\n> her     way    out          . “ I       shall be       punished for   it       now       , I       suppose , by    being        drowned in        my\n# ISg/D$+ NSg/J+ NSg/VB/J/R/P . . ISg/#r+ VXB   NSg/VLXB VP/J     R/C/P NPr/ISg+ NSg/J/R/C . ISg/#r+ VB      . NSg/P N🅪Sg/VLg/J/C VP/J    NPr/J/R/P D$+\n> own       tears   ! That          will    be       a   queer     thing , to be       sure ! However , everything is  queer\n# NSg/VB/J+ NPl/V3+ . NSg/I/C/Ddem+ NPr/VXB NSg/VLXB D/P NSg/VB/J+ NSg+  . P  NSg/VLXB J    . C       . NSg/I/VB+  VL3 NSg/VB/J\n> to - day     . ”\n# P  . NPr🅪Sg+ . .\n>\n#\n> Just then      she  heard something splashing about in        the pool    a   little     way    off        , and\n# J/R  NSg/J/R/C ISg+ VP/J  NSg/I/J+  Nᴹ/Vg/J   J/P   NPr/J/R/P D   NSg/VB+ D/P NPr/I/J/Dq NSg/J+ NSg/VB/J/P . VB/C\n> she  swam nearer to make   out          what   it       was  : at    first she  thought it       must    be       a\n# ISg+ VPt  NSg/JC P  NSg/VB NSg/VB/J/R/P NSg/I+ NPr/ISg+ VLPt . NSg/P NSg/J ISg+ N🅪Sg/VP NPr/ISg+ NSg/VXB NSg/VLXB D/P\n> walrus  or    hippopotamus , but     then      she  remembered how   small    she  was  now       , and  she\n# NSg/VB+ NPr/C NSg          . NSg/C/P NSg/J/R/C ISg+ VP/J       NSg/C NPr/VB/J ISg+ VLPt NSg/J/R/C . VB/C ISg+\n> soon made out          that         it       was  only  a   mouse   that          had slipped in        like         herself .\n# J/R  VP   NSg/VB/J/R/P NSg/I/C/Ddem NPr/ISg+ VLPt J/R/C D/P NSg/VB+ NSg/I/C/Ddem+ VP  VP/J    NPr/J/R/P NSg/VB/J/C/P ISg+    .\n>\n#\n> “ Would it       be       of any     use      , now       , ” thought Alice , “ to speak  to this    mouse   ?\n# . VXB   NPr/ISg+ NSg/VLXB P  I/R/Dq+ N🅪Sg/VB+ . NSg/J/R/C . . N🅪Sg/VP NPr+  . . P  NSg/VB P  I/Ddem+ NSg/VB+ .\n> Everything is  so          out          - of - the - way   down        here , that         I       should think  very likely it\n# NSg/I/VB+  VL3 NSg/I/J/R/C NSg/VB/J/R/P . P  . D   . NSg/J N🅪Sg/VB/J/P J/R  . NSg/I/C/Ddem ISg/#r+ VXB    NSg/VB J/R  NSg/J  NPr/ISg+\n> can     talk    : at    any     rate    , there’s no        harm     in        trying  . ” So          she  began : “ O       Mouse   , do\n# NPr/VXB N🅪Sg/VB . NSg/P I/R/Dq+ NSg/VB+ . K       NSg/Dq/P+ N🅪Sg/VB+ NPr/J/R/P Nᴹ/Vg/J . . NSg/I/J/R/C ISg+ VPt   . . NPr/J/P NSg/VB+ . VXB\n> you    know the way    out          of this    pool    ? I       am        very tired of swimming about here , O\n# ISgPl+ VB   D+  NSg/J+ NSg/VB/J/R/P P  I/Ddem+ NSg/VB+ . ISg/#r+ NPr/VLB/J J/R  VP/J  P  NSg/Vg   J/P   J/R  . NPr/J/P\n> Mouse   ! ” ( Alice thought this    must    be       the right    way   of speaking to a    mouse   : she\n# NSg/VB+ . . . NPr+  N🅪Sg/VP I/Ddem+ NSg/VXB NSg/VLXB D   NPr/VB/J NSg/J P  Nᴹ/Vg/J  P  D/P+ NSg/VB+ . ISg+\n> had never done      such  a    thing before , but     she  remembered having  seen    in        her\n# VP  R     NSg/VPp/J NSg/I D/P+ NSg+  C/P    . NSg/C/P ISg+ VP/J       Nᴹ/Vg/J NSg/VPp NPr/J/R/P ISg/D$+\n> brother’s Latin Grammar  , “ A   mouse   — of a   mouse   — to a   mouse   — a   mouse   — O       mouse   ! ” ) The\n# NSg$      NPr/J N🅪Sg/VB+ . . D/P NSg/VB+ . P  D/P NSg/VB+ . P  D/P NSg/VB+ . D/P NSg/VB+ . NPr/J/P NSg/VB+ . . . D+\n> Mouse   looked at    her     rather     inquisitively , and  seemed to her     to wink   with one     of\n# NSg/VB+ VP/J   NSg/P ISg/D$+ NPr/VB/J/R R             . VB/C VP/J   P  ISg/D$+ P  NSg/VB P    NSg/I/J P\n> its     little     eyes    , but     it       said nothing  .\n# ISg/D$+ NPr/I/J/Dq NPl/V3+ . NSg/C/P NPr/ISg+ VP/J NSg/I/J+ .\n>\n#\n> “ Perhaps it       doesn’t understand English      , ” thought Alice ; “ I       daresay it’s a   French\n# . NSg/R   NPr/ISg+ VX3     VB         NPr🅪Sg/VB/J+ . . N🅪Sg/VP NPr+  . . ISg/#r+ VB      K    D/P NPr🅪Sg/VB/J\n> mouse   , come       over    with William the Conqueror . ” ( For   , with all          her     knowledge of\n# NSg/VB+ . NSg/VBPp/P NSg/J/P P    NPr+    D   NSg       . . . R/C/P . P    NSg/I/J/C/Dq ISg/D$+ Nᴹ        P\n> history , Alice had no       very clear     notion how   long     ago anything  had happened . ) So\n# N🅪Sg+   . NPr+  VP  NSg/Dq/P J/R  NSg/VB/J+ NSg+   NSg/C NPr/VB/J J/P NSg/I/VB+ VP  VP/J     . . NSg/I/J/R/C\n> she  began again : “ Où est  ma     chatte ? ” which was  the first sentence in        her     French\n# ISg+ VPt   P     . . ?  NPr+ NPr/J+ ?      . . I/C+  VLPt D   NSg/J NSg/VB   NPr/J/R/P ISg/D$+ NPr🅪Sg/VB/J\n> lesson  - book    . The Mouse   gave a    sudden leap      out          of the water    , and  seemed to quiver\n# NSg/VB+ . NSg/VB+ . D+  NSg/VB+ VPt  D/P+ NSg/J+ NSg/VB/J+ NSg/VB/J/R/P P  D+  N🅪Sg/VB+ . VB/C VP/J   P  NSg/VB/J\n> all          over     with fright   . “ Oh     , I       beg    your pardon ! ” cried Alice hastily , afraid that\n# NSg/I/J/C/Dq NSg/J/P+ P    NSg/VB/J . . NPr/VB . ISg/#r+ NSg/VB D$+  NSg/VB . . VP/J  NPr+  R       . J      NSg/I/C/Ddem\n> she  had hurt      the poor     animal’s feelings . “ I       quite forgot you    didn’t like         cats    . ”\n# ISg+ VP  NSg/VBP/J D   NSg/VB/J NSg$     NPl/V3+  . . ISg/#r+ R     VPt    ISgPl+ VXPt   NSg/VB/J/C/P NPl/V3+ . .\n>\n#\n> “ Not     like         cats    ! ” cried the Mouse   , in        a   shrill   , passionate voice   . “ Would you    like\n# . NSg/R/C NSg/VB/J/C/P NPl/V3+ . . VP/J  D+  NSg/VB+ . NPr/J/R/P D/P NSg/VB/J . NSg/VB/J+  NSg/VB+ . . VXB   ISgPl+ NSg/VB/J/C/P\n> cats    if    you    were     me       ? ”\n# NPl/V3+ NSg/C ISgPl+ NSg/VLPt NPr/ISg+ . .\n>\n#\n> “ Well       , perhaps not     , ” said Alice in        a    soothing tone       : “ don’t be       angry about it       .\n# . NSg/VB/J/R . NSg/R   NSg/R/C . . VP/J NPr+  NPr/J/R/P D/P+ Nᴹ/Vg/J+ N🅪Sg/I/VB+ . . VXB   NSg/VLXB VB/J  J/P   NPr/ISg+ .\n> And  yet      I       wish   I       could   show   you    our cat       Dinah : I       think  you’d take   a   fancy     to\n# VB/C NSg/VB/C ISg/#r+ NSg/VB ISg/#r+ NSg/VXB NSg/VB ISgPl+ D$+ NSg/VB/J+ NPr   . ISg/#r+ NSg/VB K     NSg/VB D/P NSg/VB/J+ P\n> cats   if    you    could   only  see    her     . She  is  such  a   dear     quiet     thing , ” Alice went    on  ,\n# NPl/V3 NSg/C ISgPl+ NSg/VXB J/R/C NSg/VB ISg/D$+ . ISg+ VL3 NSg/I D/P NSg/VB/J N🅪Sg/VB/J NSg   . . NPr+  NSg/VPt J/P .\n> half      to herself , as    she  swam lazily about in        the pool    , “ and  she  sits   purring so\n# N🅪Sg/J/P+ P  ISg+    . R/C/P ISg+ VPt  R      J/P   NPr/J/R/P D+  NSg/VB+ . . VB/C ISg+ NPl/V3 Nᴹ/Vg/J NSg/I/J/R/C\n> nicely by    the fire       , licking her     paws    and  washing her     face    — and  she  is  such  a   nice\n# R      NSg/P D   N🅪Sg/VB/J+ . Nᴹ/Vg/J ISg/D$+ NPl/V3+ VB/C Nᴹ/Vg/J ISg/D$+ NSg/VB+ . VB/C ISg+ VL3 NSg/I D/P NPr/J\n> soft  thing to nurse  — and  she’s such  a   capital one      for   catching mice    — oh     , I       beg\n# NSg/J NSg+  P  NSg/VB . VB/C K     NSg/I D/P N🅪Sg/J+ NSg/I/J+ R/C/P Nᴹ/Vg/J  NPl/VB+ . NPr/VB . ISg/#r+ NSg/VB\n> your pardon ! ” cried Alice again , for   this    time       the Mouse   was  bristling all          over    ,\n# D$+  NSg/VB . . VP/J  NPr+  P     . R/C/P I/Ddem+ N🅪Sg/VB/J+ D+  NSg/VB+ VLPt Nᴹ/Vg/J   NSg/I/J/C/Dq NSg/J/P .\n> and  she  felt      certain it       must    be       really offended . “ We   won’t talk    about her     any\n# VB/C ISg+ N🅪Sg/VP/J I/J     NPr/ISg+ NSg/VXB NSg/VLXB R      VP/J     . . IPl+ VXB   N🅪Sg/VB J/P   ISg/D$+ I/R/Dq\n> more         if    you’d rather     not     . ”\n# NPr/I/J/R/Dq NSg/C K     NPr/VB/J/R NSg/R/C . .\n>\n#\n> “ We   indeed ! ” cried the Mouse   , who    was  trembling down        to the end    of his     tail      . “ As\n# . IPl+ R      . . VP/J  D+  NSg/VB+ . NPr/I+ VLPt Nᴹ/Vg/J   N🅪Sg/VB/J/P P  D   NSg/VB P  ISg/D$+ NSg/VB/J+ . . R/C/P\n> if    I       would talk    on  such  a    subject   ! Our family  always hated cats    : nasty , low        ,\n# NSg/C ISg/#r+ VXB   N🅪Sg/VB J/P NSg/I D/P+ NSg/VB/J+ . D$+ N🅪Sg/J+ R      VP/J  NPl/V3+ . NSg/J . NSg/VB/J/R .\n> vulgar things ! Don’t let     me       hear the name    again ! ”\n# NSg/J  NPl+   . VXB   NSg/VBP NPr/ISg+ VB   D   NSg/VB+ P     . .\n>\n#\n> “ I       won’t indeed ! ” said Alice , in        a   great hurry   to change  the subject  of\n# . ISg/#r+ VXB   R      . . VP/J NPr+  . NPr/J/R/P D/P NSg/J NSg/VB+ P  N🅪Sg/VB D   NSg/VB/J P\n> conversation . “ Are you    — are you    fond     — of — of dogs    ? ” The Mouse   did  not     answer  , so\n# N🅪Sg/VB+     . . VLB ISgPl+ . VLB ISgPl+ NSg/VB/J . P  . P  NPl/V3+ . . D+  NSg/VB+ VXPt NSg/R/C NSg/VB+ . NSg/I/J/R/C\n> Alice went    on  eagerly : “ There is  such  a   nice  little     dog       near       our house   I       should\n# NPr+  NSg/VPt J/P R       . . R+    VL3 NSg/I D/P NPr/J NPr/I/J/Dq NSg/VB/J+ NSg/VB/J/P D$+ NPr/VB+ ISg/#r+ VXB\n> like         to show   you    ! A   little     bright   - eyed terrier , you    know , with oh     , such  long\n# NSg/VB/J/C/P P  NSg/VB ISgPl+ . D/P NPr/I/J/Dq NPr/VB/J . VP/J NSg     . ISgPl+ VB   . P    NPr/VB . NSg/I NPr/VB/J\n> curly   brown       hair     ! And  it’ll fetch  things when    you    throw  them     , and  it’ll sit    up\n# NSg/J/R NPr🅪Sg/VB/J N🅪Sg/VB+ . VB/C K     NSg/VB NPl+   NSg/I/C ISgPl+ NSg/VB NSg/IPl+ . VB/C K     NSg/VB NSg/VB/J/P\n> and  beg    for   its     dinner   , and  all          sorts  of things — I       can’t remember half     of\n# VB/C NSg/VB R/C/P ISg/D$+ N🅪Sg/VB+ . VB/C NSg/I/J/C/Dq NPl/V3 P  NPl+   . ISg/#r+ VXB   NSg/VB   N🅪Sg/J/P P\n> them     — and  it       belongs to a   farmer , you    know , and  he       says   it’s so          useful , it’s\n# NSg/IPl+ . VB/C NPr/ISg+ V3      P  D/P NPr+   . ISgPl+ VB   . VB/C NPr/ISg+ NPl/V3 K    NSg/I/J/R/C J      . K\n> worth    a   hundred pounds  ! He       says   it       kills  all           the rats    and  — oh     dear     ! ” cried Alice\n# NSg/VB/J D/P NSg     NPl/V3+ . NPr/ISg+ NPl/V3 NPr/ISg+ NPl/V3 NSg/I/J/C/Dq+ D+  NPl/V3+ VB/C . NPr/VB NSg/VB/J . . VP/J  NPr+\n> in        a   sorrowful tone       , “ I’m afraid I’ve offended it       again ! ” For   the Mouse   was\n# NPr/J/R/P D/P J         N🅪Sg/I/VB+ . . K   J      K    VP/J     NPr/ISg+ P     . . R/C/P D+  NSg/VB+ VLPt\n> swimming away from her     as    hard     as    it       could   go       , and  making  quite a   commotion in\n# NSg/Vg   VB/J P    ISg/D$+ R/C/P N🅪Sg/J/R R/C/P NPr/ISg+ NSg/VXB NSg/VB/J . VB/C Nᴹ/Vg/J R     D/P N🅪Sg      NPr/J/R/P\n> the pool    as    it       went    .\n# D   NSg/VB+ R/C/P NPr/ISg+ NSg/VPt .\n>\n#\n> So          she  called softly after it       , “ Mouse   dear     ! Do  come       back     again , and  we   won’t\n# NSg/I/J/R/C ISg+ VP/J   R      P     NPr/ISg+ . . NSg/VB+ NSg/VB/J . VXB NSg/VBPp/P NSg/VB/J P     . VB/C IPl+ VXB\n> talk    about cats    or    dogs    either , if    you    don’t like         them     ! ” When    the Mouse   heard\n# N🅪Sg/VB J/P   NPl/V3+ NPr/C NPl/V3+ I/C    . NSg/C ISgPl+ VXB   NSg/VB/J/C/P NSg/IPl+ . . NSg/I/C D+  NSg/VB+ VP/J\n> this    , it       turned round      and  swam slowly back     to her     : its     face    was  quite pale     ( with\n# I/Ddem+ . NPr/ISg+ VP/J   NSg/VB/J/P VB/C VPt  R      NSg/VB/J P  ISg/D$+ . ISg/D$+ NSg/VB+ VLPt R     NSg/VB/J . P\n> passion  , Alice thought ) , and  it       said in        a    low         trembling voice   , “ Let     us       get    to\n# NPrᴹ/VB+ . NPr+  N🅪Sg/VP . . VB/C NPr/ISg+ VP/J NPr/J/R/P D/P+ NSg/VB/J/R+ Nᴹ/Vg/J+  NSg/VB+ . . NSg/VBP NPr/IPl+ NSg/VB P\n> the shore   , and  then      I’ll tell   you    my  history , and  you’ll understand why    it       is  I\n# D+  NSg/VB+ . VB/C NSg/J/R/C K    NPr/VB ISgPl+ D$+ N🅪Sg+   . VB/C K      VB         NSg/VB NPr/ISg+ VL3 ISg/#r+\n> hate    cats   and  dogs    . ”\n# N🅪Sg/VB NPl/V3 VB/C NPl/V3+ . .\n>\n#\n> It       was  high       time      to go       , for   the pool    was  getting quite crowded with the birds\n# NPr/ISg+ VLPt NSg/VB/J/R N🅪Sg/VB/J P  NSg/VB/J . R/C/P D+  NSg/VB+ VLPt NSg/Vg  R     VP/J    P    D   NPl/V3\n> and  animals that          had fallen into it       : there were     a    Duck    and  a   Dodo , a   Lory and  an\n# VB/C NPl+    NSg/I/C/Ddem+ VP  VPp/J  P    NPr/ISg+ . R+    NSg/VLPt D/P+ NSg/VB+ VB/C D/P NSg  . D/P ?    VB/C D/P\n> Eaglet , and  several other    curious creatures . Alice led      the way    , and  the whole\n# NSg    . VB/C J/Dq    NSg/VB/J J       NPl+      . NPr+  NSg/VP/J D+  NSg/J+ . VB/C D+  NSg/J+\n> party     swam to the shore   .\n# NSg/VB/J+ VPt  P  D+  NSg/VB+ .\n>\n#\n>              CHAPTER III : A   Caucus  - Race    and  a   Long     Tale\n# HeadingStart NSg/VB+ #r  . D/P NSg/VB+ . N🅪Sg/VB VB/C D/P NPr/VB/J NSg/VB+\n>\n#\n> They were     indeed a   queer    - looking party     that          assembled on  the bank   — the birds  with\n# IPl+ NSg/VLPt R      D/P NSg/VB/J . Nᴹ/Vg/J NSg/VB/J+ NSg/I/C/Ddem+ VP/J      J/P D   NSg/VB . D   NPl/V3 P\n> draggled feathers , the animals with their fur          clinging close    to them     , and  all\n# ?        NPl/V3+  . D   NPl+    P    D$+   N🅪Sg/VB/C/P+ Nᴹ/Vg/J  NSg/VB/J P  NSg/IPl+ . VB/C NSg/I/J/C/Dq\n> dripping wet      , cross       , and  uncomfortable .\n# NSg/Vg   NSg/VP/J . NPr/VB/J/P+ . VB/C J             .\n>\n#\n> The first question of course  was  , how   to get    dry      again : they had a   consultation\n# D   NSg/J NSg/VB   P  NSg/VB+ VLPt . NSg/C P  NSg/VB NSg/VB/J P     . IPl+ VP  D/P NSg+\n> about this    , and  after a    few       minutes it       seemed quite natural to Alice to find\n# J/P   I/Ddem+ . VB/C P     D/P+ NSg/I/Dq+ NPl/V3+ NPr/ISg+ VP/J   R     NSg/J   P  NPr+  P  NSg/VB\n> herself talking familiarly with them     , as    if    she  had known them     all          her     life     .\n# ISg+    Nᴹ/Vg/J R          P    NSg/IPl+ . R/C/P NSg/C ISg+ VP  VPp/J NSg/IPl+ NSg/I/J/C/Dq ISg/D$+ N🅪Sg/VB+ .\n> Indeed , she  had quite a   long     argument with the Lory , who    at    last     turned sulky ,\n# R      . ISg+ VP  R     D/P NPr/VB/J N🅪Sg/VB  P    D   ?    . NPr/I+ NSg/P NSg/VB/J VP/J   NSg/J .\n> and  would only  say    , “ I       am        older than you    , and  must    know better     ; ” and  this   Alice\n# VB/C VXB   J/R/C NSg/VB . . ISg/#r+ NPr/VLB/J JC    C/P  ISgPl+ . VB/C NSg/VXB VB   NSg/VXB/JC . . VB/C I/Ddem NPr+\n> would not     allow without knowing    how   old   it       was  , and  , as    the Lory positively\n# VXB   NSg/R/C VB    C/P     NSg/Vg/J/P NSg/C NSg/J NPr/ISg+ VLPt . VB/C . R/C/P D   ?    R\n> refused to tell   its     age      , there was  no       more         to be       said .\n# VP/J    P  NPr/VB ISg/D$+ N🅪Sg/VB+ . R+    VLPt NSg/Dq/P NPr/I/J/R/Dq P  NSg/VLXB VP/J .\n>\n#\n> At    last     the Mouse   , who    seemed to be       a   person of authority among them     , called\n# NSg/P NSg/VB/J D+  NSg/VB+ . NPr/I+ VP/J   P  NSg/VLXB D/P NSg/VB P  N🅪Sg+     P     NSg/IPl+ . VP/J\n> out          , “ Sit    down        , all          of you    , and  listen to me       ! I’ll soon make   you    dry      enough ! ”\n# NSg/VB/J/R/P . . NSg/VB N🅪Sg/VB/J/P . NSg/I/J/C/Dq P  ISgPl+ . VB/C NSg/VB P  NPr/ISg+ . K    J/R  NSg/VB ISgPl+ NSg/VB/J NSg/I  . .\n> They all          sat      down        at    once  , in        a    large  ring    , with the Mouse   in        the middle   . Alice\n# IPl+ NSg/I/J/C/Dq NSg/VP/J N🅪Sg/VB/J/P NSg/P NSg/C . NPr/J/R/P D/P+ NSg/J+ NSg/VB+ . P    D+  NSg/VB+ NPr/J/R/P D   NSg/VB/J . NPr+\n> kept her     eyes    anxiously fixed on  it       , for   she  felt      sure she  would catch  a   bad\n# VP   ISg/D$+ NPl/V3+ R         VP/J  J/P NPr/ISg+ . R/C/P ISg+ N🅪Sg/VP/J J    ISg+ VXB   NSg/VB D/P NSg/VB/J\n> cold  if    she  did  not     get    dry      very soon .\n# NSg/J NSg/C ISg+ VXPt NSg/R/C NSg/VB NSg/VB/J J/R  J/R  .\n>\n#\n> “ Ahem ! ” said the Mouse   with an   important air      , “ are you    all          ready    ? This    is  the\n# . VB   . . VP/J D   NSg/VB+ P    D/P+ J+        N🅪Sg/VB+ . . VLB ISgPl+ NSg/I/J/C/Dq NSg/VB/J . I/Ddem+ VL3 D\n> driest thing I       know . Silence all          round      , if    you    please ! ‘          William the Conqueror ,\n# JS     NSg   ISg/#r+ VB   . NSg/VB+ NSg/I/J/C/Dq NSg/VB/J/P . NSg/C ISgPl+ VB     . Unlintable NPr+    D   NSg       .\n> whose cause      was  favoured  by    the pope    , was  soon submitted to by    the English      , who\n# I+    N🅪Sg/VB/C+ VLPt VP/J/Comm NSg/P D   NPr/VB+ . VLPt J/R  VP        P  NSg/P D   NPr🅪Sg/VB/J+ . NPr/I+\n> wanted leaders , and  had been     of late  much         accustomed to usurpation and  conquest .\n# VP/J   NPl+    . VB/C VP  NSg/VLPp P  NSg/J NSg/I/J/R/Dq VP/J       P  NSg        VB/C NSg/VB+  .\n> Edwin and  Morcar , the earls of Mercia and  Northumbria — ’ ”\n# NPr+  VB/C ?      . D   NPl+  P  NPr    VB/C ?           . . .\n>\n#\n> “ Ugh ! ” said the Lory , with a   shiver .\n# . W?  . . VP/J D   ?    . P    D/P NSg/VB .\n>\n#\n> “ I       beg    your pardon ! ” said the Mouse   , frowning , but     very politely : “ Did  you\n# . ISg/#r+ NSg/VB D$+  NSg/VB . . VP/J D+  NSg/VB+ . Nᴹ/Vg/J  . NSg/C/P J/R  R        . . VXPt ISgPl+\n> speak  ? ”\n# NSg/VB . .\n>\n#\n> “ Not     I       ! ” said the Lory hastily .\n# . NSg/R/C ISg/#r+ . . VP/J D   ?    R       .\n>\n#\n> “ I       thought you    did  , ” said the Mouse   . “ — I       proceed . ‘          Edwin and  Morcar , the earls\n# . ISg/#r+ N🅪Sg/VP ISgPl+ VXPt . . VP/J D+  NSg/VB+ . . . ISg/#r+ VB      . Unlintable NPr+  VB/C ?      . D   NPl+\n> of Mercia and  Northumbria , declared for   him  : and  even       Stigand , the patriotic\n# P  NPr    VB/C ?           . VP/J     R/C/P ISg+ . VB/C NSg/VB/J/R ?       . D   NSg/J\n> archbishop of Canterbury , found  it       advisable — ’ ”\n# NSg        P  NPr        . NSg/VP NPr/ISg+ J         . . .\n>\n#\n> “ Found  what   ? ” said the Duck    .\n# . NSg/VP NSg/I+ . . VP/J D+  NSg/VB+ .\n>\n#\n> “ Found  it       , ” the Mouse   replied rather     crossly : “ of course  you    know what   ‘          it       ’\n# . NSg/VP NPr/ISg+ . . D+  NSg/VB+ VP/J    NPr/VB/J/R R       . . P  NSg/VB+ ISgPl+ VB   NSg/I+ Unlintable NPr/ISg+ .\n> means  . ”\n# NPl/V3 . .\n>\n#\n> “ I       know what   ‘          it       ’ means  well       enough , when    I       find   a    thing , ” said the Duck    : “ it’s\n# . ISg/#r+ VB   NSg/I+ Unlintable NPr/ISg+ . NPl/V3 NSg/VB/J/R NSg/I  . NSg/I/C ISg/#r+ NSg/VB D/P+ NSg+  . . VP/J D+  NSg/VB+ . . K\n> generally a   frog   or    a   worm    . The question is  , what   did  the archbishop find   ? ”\n# R         D/P NSg/VB NPr/C D/P NSg/VB+ . D+  NSg/VB+  VL3 . NSg/I+ VXPt D   NSg        NSg/VB . .\n>\n#\n> The Mouse   did  not     notice this    question , but     hurriedly went    on  , “ ‘          — found  it\n# D+  NSg/VB+ VXPt NSg/R/C NSg/VB I/Ddem+ NSg/VB+  . NSg/C/P R         NSg/VPt J/P . . Unlintable . NSg/VP NPr/ISg+\n> advisable to go       with Edgar Atheling to meet     William and  offer     him  the crown     .\n# J         P  NSg/VB/J P    NPr+  ?        P  NSg/VB/J NPr+    VB/C NSg/VB/JC ISg+ D   NSg/VB/J+ .\n> William’s conduct at    first was  moderate . But     the insolence of his     Normans — ’ How\n# NPr$      NSg/VB  NSg/P NSg/J VLPt NSg/VB/J . NSg/C/P D   Nᴹ/VB     P  ISg/D$+ NPrPl   . . NSg/C\n> are you    getting on  now       , my  dear     ? ” it       continued , turning to Alice as    it       spoke   .\n# VLB ISgPl+ NSg/Vg  J/P NSg/J/R/C . D$+ NSg/VB/J . . NPr/ISg+ VP/J      . Nᴹ/Vg/J P  NPr+  R/C/P NPr/ISg+ NSg/VPt .\n>\n#\n> “ As    wet      as    ever , ” said Alice in        a   melancholy tone       : “ it       doesn’t seem to dry      me       at\n# . R/C/P NSg/VP/J R/C/P J/R  . . VP/J NPr+  NPr/J/R/P D/P NSg/J      N🅪Sg/I/VB+ . . NPr/ISg+ VX3     VB   P  NSg/VB/J NPr/ISg+ NSg/P\n> all          . ”\n# NSg/I/J/C/Dq . .\n>\n#\n> “ In        that          case       , ” said the Dodo solemnly , rising    to its     feet , “ I       move   that         the\n# . NPr/J/R/P NSg/I/C/Ddem+ NPr🅪Sg/VB+ . . VP/J D   NSg  R        . Nᴹ/Vg/J/P P  ISg/D$+ NPl+ . . ISg/#r+ NSg/VB NSg/I/C/Ddem D\n> meeting    adjourn , for   the immediate adoption of more         energetic remedies — ”\n# N🅪Sg/Vg/J+ VB      . R/C/P D   J         N🅪Sg     P  NPr/I/J/R/Dq NSg/J     NPl/V3+  . .\n>\n#\n> “ Speak  English      ! ” said the Eaglet . “ I       don’t know the meaning   of half      those  long\n# . NSg/VB NPr🅪Sg/VB/J+ . . VP/J D   NSg    . . ISg/#r+ VXB   VB   D   N🅪Sg/Vg/J P  N🅪Sg/J/P+ I/Ddem NPr/VB/J\n> words   , and  , what’s more         , I       don’t believe you    do  either ! ” And  the Eaglet bent\n# NPl/V3+ . VB/C . K      NPr/I/J/R/Dq . ISg/#r+ VXB   VB      ISgPl+ VXB I/C    . . VB/C D   NSg    NSg/VP/J\n> down        its     head      to hide   a   smile   : some     of the other    birds   tittered audibly .\n# N🅪Sg/VB/J/P ISg/D$+ NPr/VB/J+ P  NSg/VB D/P NSg/VB+ . I/J/R/Dq P  D   NSg/VB/J NPl/V3+ VP/J     R       .\n>\n#\n> “ What   I       was  going   to say    , ” said the Dodo in        an  offended tone       , “ was  , that         the\n# . NSg/I+ ISg/#r+ VLPt Nᴹ/Vg/J P  NSg/VB . . VP/J D   NSg  NPr/J/R/P D/P VP/J     N🅪Sg/I/VB+ . . VLPt . NSg/I/C/Ddem D\n> best       thing to get    us       dry      would be       a   Caucus  - race     . ”\n# NPr/VXB/JS NSg+  P  NSg/VB NPr/IPl+ NSg/VB/J VXB   NSg/VLXB D/P NSg/VB+ . N🅪Sg/VB+ . .\n>\n#\n> “ What   is  a   Caucus - race     ? ” said Alice ; not     that         she  wanted much         to know , but     the\n# . NSg/I+ VL3 D/P NSg/VB . N🅪Sg/VB+ . . VP/J NPr+  . NSg/R/C NSg/I/C/Ddem ISg+ VP/J   NSg/I/J/R/Dq P  VB   . NSg/C/P D\n> Dodo had paused as    if    it       thought that         somebody ought     to speak  , and  no       one      else\n# NSg  VP  VP/J   R/C/P NSg/C NPr/ISg+ N🅪Sg/VP NSg/I/C/Ddem NSg/I+   NSg/I/VXB P  NSg/VB . VB/C NSg/Dq/P NSg/I/J+ NSg/J/C\n> seemed inclined to say    anything  .\n# VP/J   VP/J     P  NSg/VB NSg/I/VB+ .\n>\n#\n> “ Why    , ” said the Dodo , “ the best       way    to explain it       is  to do  it       . ” ( And  , as    you\n# . NSg/VB . . VP/J D   NSg  . . D   NPr/VXB/JS NSg/J+ P  VB      NPr/ISg+ VL3 P  VXB NPr/ISg+ . . . VB/C . R/C/P ISgPl+\n> might    like         to try      the thing yourself , some      winter   day     , I       will    tell   you    how   the\n# Nᴹ/VXB/J NSg/VB/J/C/P P  NSg/VB/J D+  NSg+  ISg+     . I/J/R/Dq+ N🅪Sg/VB+ NPr🅪Sg+ . ISg/#r+ NPr/VXB NPr/VB ISgPl+ NSg/C D\n> Dodo managed it       . )\n# NSg  VP/J    NPr/ISg+ . .\n>\n#\n> First it       marked out          a   race     - course  , in        a   sort   of circle  , ( “ the exact shape\n# NSg/J NPr/ISg+ VP/J   NSg/VB/J/R/P D/P N🅪Sg/VB+ . NSg/VB+ . NPr/J/R/P D/P NSg/VB P  NSg/VB+ . . . D+  VB/J+ N🅪Sg/VB+\n> doesn’t matter   , ” it       said , ) and  then      all          the party     were     placed along the course  ,\n# VX3     N🅪Sg/VB+ . . NPr/ISg+ VP/J . . VB/C NSg/J/R/C NSg/I/J/C/Dq D   NSg/VB/J+ NSg/VLPt VP/J   P     D   NSg/VB+ .\n> here and  there . There was  no       “ One      , two , three , and  away , ” but     they began running\n# J/R  VB/C R     . R+    VLPt NSg/Dq/P . NSg/I/J+ . NSg . NSg   . VB/C VB/J . . NSg/C/P IPl+ VPt   Nᴹ/Vg/J/P\n> when    they liked , and  left     off        when    they liked , so          that         it       was  not     easy     to know\n# NSg/I/C IPl+ VP/J  . VB/C NPr/VP/J NSg/VB/J/P NSg/I/C IPl+ VP/J  . NSg/I/J/R/C NSg/I/C/Ddem NPr/ISg+ VLPt NSg/R/C NSg/VB/J P  VB\n> when    the race     was  over    . However , when    they had been     running   half      an   hour or    so          ,\n# NSg/I/C D+  N🅪Sg/VB+ VLPt NSg/J/P . C       . NSg/I/C IPl+ VP  NSg/VLPp Nᴹ/Vg/J/P N🅪Sg/J/P+ D/P+ NSg+ NPr/C NSg/I/J/R/C .\n> and  were     quite dry      again , the Dodo suddenly called out          “ The race     is  over    ! ” and\n# VB/C NSg/VLPt R     NSg/VB/J P     . D   NSg  R        VP/J   NSg/VB/J/R/P . D   N🅪Sg/VB+ VL3 NSg/J/P . . VB/C\n> they all          crowded round      it       , panting , and  asking  , “ But     who    has won      ? ”\n# IPl+ NSg/I/J/C/Dq VP/J    NSg/VB/J/P NPr/ISg+ . Nᴹ/Vg/J . VB/C Nᴹ/Vg/J . . NSg/C/P NPr/I+ V3  NSgPl/VP . .\n>\n#\n> This    question the Dodo could   not     answer  without a   great deal     of thought  , and  it\n# I/Ddem+ NSg/VB+  D   NSg  NSg/VXB NSg/R/C NSg/VB+ C/P     D/P NSg/J NSg/VB/J P  N🅪Sg/VP+ . VB/C NPr/ISg+\n> sat      for   a   long     time       with one     finger  pressed upon its     forehead ( the position in\n# NSg/VP/J R/C/P D/P NPr/VB/J N🅪Sg/VB/J+ P    NSg/I/J NSg/VB+ VP/J    P    ISg/D$+ NSg      . D   NSg/VB+  NPr/J/R/P\n> which you    usually see    Shakespeare , in        the pictures of him  ) , while      the rest\n# I/C+  ISgPl+ R       NSg/VB NPr/VB+     . NPr/J/R/P D   NPl/V3   P  ISg+ . . NSg/VB/C/P D   NSg/VB+\n> waited in        silence . At    last     the Dodo said , “ Everybody has won      , and  all          must    have\n# VP/J   NPr/J/R/P NSg/VB+ . NSg/P NSg/VB/J D   NSg  VP/J . . NSg/I+    V3  NSgPl/VP . VB/C NSg/I/J/C/Dq NSg/VXB NSg/VXB\n> prizes  . ”\n# NPl/V3+ . .\n>\n#\n> “ But     who    is  to give   the prizes  ? ” quite a   chorus of voices  asked .\n# . NSg/C/P NPr/I+ VL3 P  NSg/VB D+  NPl/V3+ . . R     D/P NSg/VB P  NPl/V3+ VP/J  .\n>\n#\n> “ Why    , she  , of course  , ” said the Dodo , pointing to Alice with one     finger  ; and  the\n# . NSg/VB . ISg+ . P  NSg/VB+ . . VP/J D   NSg  . Nᴹ/Vg/J  P  NPr+  P    NSg/I/J NSg/VB+ . VB/C D\n> whole party     at    once  crowded round      her     , calling out          in        a   confused way    , “ Prizes  !\n# NSg/J NSg/VB/J+ NSg/P NSg/C VP/J    NSg/VB/J/P ISg/D$+ . Nᴹ/Vg/J NSg/VB/J/R/P NPr/J/R/P D/P VP/J     NSg/J+ . . NPl/V3+ .\n> Prizes  ! ”\n# NPl/V3+ . .\n>\n#\n> Alice had no        idea what   to do  , and  in        despair she  put     her     hand    in        her     pocket    , and\n# NPr+  VP  NSg/Dq/P+ NSg+ NSg/I+ P  VXB . VB/C NPr/J/R/P NSg/VB+ ISg+ NSg/VBP ISg/D$+ NSg/VB+ NPr/J/R/P ISg/D$+ NSg/VB/J+ . VB/C\n> pulled out          a   box    of comfits , ( luckily the salt         water    had not     got into it       ) , and\n# VP/J   NSg/VB/J/R/P D/P NSg/VB P  NPl/V3  . . R       D   NPr🅪Sg/VB/J+ N🅪Sg/VB+ VP  NSg/R/C VP  P    NPr/ISg+ . . VB/C\n> handed them     round      as    prizes  . There was  exactly one     a   - piece   , all          round      .\n# VP/J   NSg/IPl+ NSg/VB/J/P R/C/P NPl/V3+ . R+    VLPt R       NSg/I/J D/P . NSg/VB+ . NSg/I/J/C/Dq NSg/VB/J/P .\n>\n#\n> “ But     she  must    have    a    prize     herself , you    know , ” said the Mouse   .\n# . NSg/C/P ISg+ NSg/VXB NSg/VXB D/P+ NSg/VB/J+ ISg+    . ISgPl+ VB   . . VP/J D+  NSg/VB+ .\n>\n#\n> “ Of course  , ” the Dodo replied very gravely . “ What   else    have    you    got in        your\n# . P  NSg/VB+ . . D   NSg  VP/J    J/R  R       . . NSg/I+ NSg/J/C NSg/VXB ISgPl+ VP  NPr/J/R/P D$+\n> pocket    ? ” he       went    on  , turning to Alice .\n# NSg/VB/J+ . . NPr/ISg+ NSg/VPt J/P . Nᴹ/Vg/J P  NPr+  .\n>\n#\n> “ Only  a   thimble , ” said Alice sadly .\n# . J/R/C D/P NSg/VB  . . VP/J NPr+  R     .\n>\n#\n> “ Hand    it       over    here , ” said the Dodo .\n# . NSg/VB+ NPr/ISg+ NSg/J/P J/R  . . VP/J D   NSg  .\n>\n#\n> Then      they all          crowded round      her     once  more         , while      the Dodo solemnly presented the\n# NSg/J/R/C IPl+ NSg/I/J/C/Dq VP/J    NSg/VB/J/P ISg/D$+ NSg/C NPr/I/J/R/Dq . NSg/VB/C/P D   NSg  R        VP/J      D\n> thimble , saying    “ We   beg    your acceptance of this   elegant thimble ; ” and  , when    it\n# NSg/VB  . N🅪Sg/Vg/J . IPl+ NSg/VB D$+  N🅪Sg       P  I/Ddem NSg/J   NSg/VB  . . VB/C . NSg/I/C NPr/ISg+\n> had finished this   short      speech   , they all          cheered .\n# VP  VP/J     I/Ddem NPr/VB/J/P N🅪Sg/VB+ . IPl+ NSg/I/J/C/Dq VP/J+   .\n>\n#\n> Alice thought the whole  thing very absurd , but     they all          looked so          grave    that         she\n# NPr+  N🅪Sg/VP D+  NSg/J+ NSg+  J/R  NSg/J  . NSg/C/P IPl+ NSg/I/J/C/Dq VP/J   NSg/I/J/R/C NSg/VB/J NSg/I/C/Ddem ISg+\n> did  not     dare    to laugh  ; and  , as    she  could   not     think  of anything  to say    , she\n# VXPt NSg/R/C NPr/VXB P  NSg/VB . VB/C . R/C/P ISg+ NSg/VXB NSg/R/C NSg/VB P  NSg/I/VB+ P  NSg/VB . ISg+\n> simply bowed , and  took the thimble , looking as    solemn as    she  could   .\n# R      VP/J  . VB/C VPt  D   NSg/VB  . Nᴹ/Vg/J R/C/P J      R/C/P ISg+ NSg/VXB .\n>\n#\n> The next     thing was  to eat the comfits : this   caused some     noise   and  confusion , as\n# D+  NSg/J/P+ NSg+  VLPt P  VB  D   NPl/V3  . I/Ddem VP/J   I/J/R/Dq N🅪Sg/VB VB/C N🅪Sg/VB+  . R/C/P\n> the large birds   complained that         they could   not     taste    theirs , and  the small    ones\n# D   NSg/J NPl/V3+ VP/J       NSg/I/C/Ddem IPl+ NSg/VXB NSg/R/C NSg/VB/J I+     . VB/C D   NPr/VB/J NPl+\n> choked and  had to be       patted on  the back     . However , it       was  over    at    last     , and  they\n# VP/J   VB/C VP  P  NSg/VLXB VP     J/P D   NSg/VB/J . C       . NPr/ISg+ VLPt NSg/J/P NSg/P NSg/VB/J . VB/C IPl+\n> sat      down        again in        a    ring    , and  begged the Mouse   to tell   them     something more         .\n# NSg/VP/J N🅪Sg/VB/J/P P     NPr/J/R/P D/P+ NSg/VB+ . VB/C VP     D+  NSg/VB+ P  NPr/VB NSg/IPl+ NSg/I/J+  NPr/I/J/R/Dq .\n>\n#\n> “ You    promised to tell   me       your history , you    know , ” said Alice , “ and  why    it       is  you\n# . ISgPl+ VP/J     P  NPr/VB NPr/ISg+ D$+  N🅪Sg+   . ISgPl+ VB   . . VP/J NPr+  . . VB/C NSg/VB NPr/ISg+ VL3 ISgPl+\n> hate    — C         and  D         , ” she  added in        a    whisper , half      afraid that         it       would be       offended\n# N🅪Sg/VB . NPr/VB/#r VB/C NPr/J/#r+ . . ISg+ VP/J  NPr/J/R/P D/P+ NSg/VB+ . N🅪Sg/J/P+ J      NSg/I/C/Ddem NPr/ISg+ VXB   NSg/VLXB VP/J\n> again .\n# P     .\n>\n#\n> “ Mine      is  a   long     and  a    sad       tale    ! ” said the Mouse   , turning to Alice , and  sighing .\n# . NSg/I/VB+ VL3 D/P NPr/VB/J VB/C D/P+ NSg/VB/J+ NSg/VB+ . . VP/J D+  NSg/VB+ . Nᴹ/Vg/J P  NPr+  . VB/C Nᴹ/Vg/J .\n>\n#\n> “ It       is  a   long     tail     , certainly , ” said Alice , looking down        with wonder  at    the\n# . NPr/ISg+ VL3 D/P NPr/VB/J NSg/VB/J . R         . . VP/J NPr+  . Nᴹ/Vg/J N🅪Sg/VB/J/P P    N🅪Sg/VB NSg/P D\n> Mouse’s tail      ; “ but     why    do  you    call   it       sad      ? ” And  she  kept on  puzzling about it\n# NSg$    NSg/VB/J+ . . NSg/C/P NSg/VB VXB ISgPl+ NSg/VB NPr/ISg+ NSg/VB/J . . VB/C ISg+ VP   J/P Nᴹ/Vg/J  J/P   NPr/ISg+\n> while      the Mouse   was  speaking , so          that         her     idea of the tale    was  something like\n# NSg/VB/C/P D+  NSg/VB+ VLPt Nᴹ/Vg/J  . NSg/I/J/R/C NSg/I/C/Ddem ISg/D$+ NSg  P  D+  NSg/VB+ VLPt NSg/I/J+  NSg/VB/J/C/P\n> this    : —\n# I/Ddem+ . .\n>\n#\n>  “Fury said to a\n# Unlintable\n>             mouse, That he\n# Unlintable Unlintable\n>            met in the\n# Unlintable Unlintable\n>\n# Unlintable\n>\n#\n> house   , ‘          Let     us       both   go       to law     : I       will    prosecute you    . — Come       , I’ll take   no\n# NPr/VB+ . Unlintable NSg/VBP NPr/IPl+ I/C/Dq NSg/VB/J P  N🅪Sg/VB . ISg/#r+ NPr/VXB VB        ISgPl+ . . NSg/VBPp/P . K    NSg/VB NSg/Dq/P\n> denial ; We   must    have    a   trial     : For   really this   morning    I’ve nothing  to do  . ’\n# N🅪Sg+  . IPl+ NSg/VXB NSg/VXB D/P NSg/VB/J+ . R/C/P R      I/Ddem N🅪Sg/Vg/J+ K    NSg/I/J+ P  VXB . .\n> Said the mouse   to the cur   , ‘          Such  a   trial     , dear     sir     , With no       jury     or    judge   ,\n# VP/J D+  NSg/VB+ P  D   NSg/J . Unlintable NSg/I D/P NSg/VB/J+ . NSg/VB/J NPr/VB+ . P    NSg/Dq/P NSg/VB/J NPr/C NSg/VB+ .\n> would be       wasting our breath     . ’ ‘          I’ll be       judge   , I’ll be       jury      , ’ Said cunning old\n# VXB   NSg/VLXB Nᴹ/Vg/J D$+ N🅪Sg/VB/J+ . . Unlintable K    NSg/VLXB NSg/VB+ . K    NSg/VLXB NSg/VB/J+ . . VP/J NSg/J   NSg/J\n> Fury  : ‘          I’ll try      the whole cause     , and  condemn you    to death  . ’ ”\n# N🅪Sg+ . Unlintable K    NSg/VB/J D   NSg/J N🅪Sg/VB/C . VB/C VB      ISgPl+ P  NPr🅪Sg . . .\n>\n#\n> “ You    are not     attending ! ” said the Mouse   to Alice severely . “ What   are you\n# . ISgPl+ VLB NSg/R/C Nᴹ/Vg/J   . . VP/J D   NSg/VB+ P  NPr+  R        . . NSg/I+ VLB ISgPl+\n> thinking of ? ”\n# Nᴹ/Vg/J  P  . .\n>\n#\n> “ I       beg    your pardon , ” said Alice very humbly : “ you    had got to the fifth    bend    , I\n# . ISg/#r+ NSg/VB D$+  NSg/VB . . VP/J NPr+  J/R  R      . . ISgPl+ VP  VP  P  D   NSg/VB/J NPr/VB+ . ISg/#r+\n> think  ? ”\n# NSg/VB . .\n>\n#\n> “ I       had not     ! ” cried the Mouse   , sharply and  very angrily .\n# . ISg/#r+ VP  NSg/R/C . . VP/J  D+  NSg/VB+ . R       VB/C J/R  R       .\n>\n#\n> “ A    knot    ! ” said Alice , always ready    to make   herself useful , and  looking anxiously\n# . D/P+ NSg/VB+ . . VP/J NPr+  . R      NSg/VB/J P  NSg/VB ISg+    J      . VB/C Nᴹ/Vg/J R\n> about her     . “ Oh     , do  let     me       help   to undo     it       ! ”\n# J/P   ISg/D$+ . . NPr/VB . VXB NSg/VBP NPr/ISg+ NSg/VB P  NSg/VB/J NPr/ISg+ . .\n>\n#\n> “ I       shall do  nothing of the sort    , ” said the Mouse   , getting up         and  walking away .\n# . ISg/#r+ VXB   VXB NSg/I/J P  D+  NSg/VB+ . . VP/J D+  NSg/VB+ . NSg/Vg  NSg/VB/J/P VB/C Nᴹ/Vg/J VB/J .\n> “ You    insult  me       by    talking such   nonsense ! ”\n# . ISgPl+ NSg/VB+ NPr/ISg+ NSg/P Nᴹ/Vg/J NSg/I+ Nᴹ/VB/J+ . .\n>\n#\n> “ I       didn’t mean     it       ! ” pleaded poor      Alice . “ But     you’re so          easily offended , you\n# . ISg/#r+ VXPt   NSg/VB/J NPr/ISg+ . . VP/J    NSg/VB/J+ NPr+  . . NSg/C/P K      NSg/I/J/R/C R      VP/J     . ISgPl+\n> know ! ”\n# VB   . .\n>\n#\n> The Mouse   only  growled in        reply   .\n# D+  NSg/VB+ J/R/C VP/J    NPr/J/R/P NSg/VB+ .\n>\n#\n> “ Please come       back     and  finish your story   ! ” Alice called after it       ; and  the others\n# . VB     NSg/VBPp/P NSg/VB/J VB/C NSg/VB D$+  NSg/VB+ . . NPr+  VP/J   P     NPr/ISg+ . VB/C D+  NPl/V3+\n> all          joined in        chorus  , “ Yes    , please do  ! ” but     the Mouse   only  shook     its     head\n# NSg/I/J/C/Dq VP/J   NPr/J/R/P NSg/VB+ . . NPl/VB . VB     VXB . . NSg/C/P D+  NSg/VB+ J/R/C NSg/VPt/J ISg/D$+ NPr/VB/J+\n> impatiently , and  walked a   little     quicker .\n# R           . VB/C VP/J   D/P NPr/I/J/Dq NSg/JC  .\n>\n#\n> “ What   a    pity     it       wouldn’t stay     ! ” sighed the Lory , as    soon as    it       was  quite out          of\n# . NSg/I+ D/P+ N🅪Sg/VB+ NPr/ISg+ VXB      NSg/VB/J . . VP/J   D   ?    . R/C/P J/R  R/C/P NPr/ISg+ VLPt R     NSg/VB/J/R/P P\n> sight    ; and  an  old   Crab    took the opportunity of saying    to her     daughter “ Ah       , my\n# N🅪Sg/VB+ . VB/C D/P NSg/J NSg/VB+ VPt  D   N🅪Sg        P  N🅪Sg/Vg/J P  ISg/D$+ NSg+     . NSg/I/VB . D$+\n> dear     ! Let     this    be       a   lesson to you    never to lose your temper     ! ” “ Hold     your tongue   ,\n# NSg/VB/J . NSg/VBP I/Ddem+ NSg/VLXB D/P NSg/VB P  ISgPl+ R     P  VB   D$+  NSg/VB/JC+ . . . NSg/VB/J D$+  N🅪Sg/VB+ .\n> Ma     ! ” said the young     Crab    , a   little     snappishly . “ You’re enough to try      the\n# NPr/J+ . . VP/J D+  NPr/VB/J+ NSg/VB+ . D/P NPr/I/J/Dq R          . . K      NSg/I  P  NSg/VB/J D\n> patience of an  oyster    ! ”\n# Nᴹ       P  D/P NSg/VB/J+ . .\n>\n#\n> “ I       wish   I       had our Dinah here , I       know I       do  ! ” said Alice aloud , addressing nobody\n# . ISg/#r+ NSg/VB ISg/#r+ VP  D$+ NPr   J/R  . ISg/#r+ VB   ISg/#r+ VXB . . VP/J NPr+  J     . Nᴹ/Vg/J    NSg/I+\n> in        particular . “ She’d soon fetch  it       back     ! ”\n# NPr/J/R/P NSg/J      . . K     J/R  NSg/VB NPr/ISg+ NSg/VB/J . .\n>\n#\n> “ And  who    is  Dinah , if    I       might    venture to ask    the question ? ” said the Lory .\n# . VB/C NPr/I+ VL3 NPr   . NSg/C ISg/#r+ Nᴹ/VXB/J NSg/VB+ P  NSg/VB D   NSg/VB+  . . VP/J D   ?    .\n>\n#\n> Alice replied eagerly , for   she  was  always ready    to talk    about her     pet       : “ Dinah’s\n# NPr+  VP/J    R       . R/C/P ISg+ VLPt R      NSg/VB/J P  N🅪Sg/VB J/P   ISg/D$+ NPr/VB/J+ . . NPr$\n> our cat       . And  she’s such  a   capital one      for   catching mice    you    can’t think  ! And  oh     ,\n# D$+ NSg/VB/J+ . VB/C K     NSg/I D/P N🅪Sg/J+ NSg/I/J+ R/C/P Nᴹ/Vg/J  NPl/VB+ ISgPl+ VXB   NSg/VB . VB/C NPr/VB .\n> I       wish   you    could   see    her     after the birds   ! Why    , she’ll eat a   little     bird      as    soon\n# ISg/#r+ NSg/VB ISgPl+ NSg/VXB NSg/VB ISg/D$+ P     D+  NPl/V3+ . NSg/VB . K      VB  D/P NPr/I/J/Dq NPr/VB/J+ R/C/P J/R\n> as    look   at    it       ! ”\n# R/C/P NSg/VB NSg/P NPr/ISg+ . .\n>\n#\n> This    speech   caused a   remarkable sensation among the party     . Some     of the birds\n# I/Ddem+ N🅪Sg/VB+ VP/J   D/P J          NSg+      P     D+  NSg/VB/J+ . I/J/R/Dq P  D+  NPl/V3+\n> hurried off        at    once  : one     old   Magpie began wrapping itself up         very carefully ,\n# VP/J+   NSg/VB/J/P NSg/P NSg/C . NSg/I/J NSg/J NSg/VB VPt   N🅪Sg/Vg+ ISg+   NSg/VB/J/P J/R  R         .\n> remarking , “ I       really must    be       getting home      ; the night    - air      doesn’t suit    my\n# Nᴹ/Vg/J   . . ISg/#r+ R      NSg/VXB NSg/VLXB NSg/Vg  NSg/VB/J+ . D   N🅪Sg/VB+ . N🅪Sg/VB+ VX3     NSg/VB+ D$+\n> throat  ! ” and  a   Canary   called out          in        a   trembling voice   to its     children , “ Come\n# NSg/VB+ . . VB/C D/P NSg/VB/J VP/J   NSg/VB/J/R/P NPr/J/R/P D/P Nᴹ/Vg/J   NSg/VB+ P  ISg/D$+ NPl+     . . NSg/VBPp/P\n> away , my  dears   ! It’s high        time       you    were     all          in        bed        ! ” On  various pretexts they\n# VB/J . D$+ NPl/V3+ . K    NSg/VB/J/R+ N🅪Sg/VB/J+ ISgPl+ NSg/VLPt NSg/I/J/C/Dq NPr/J/R/P NSg/VBP/J+ . . J/P J       NPl/V3   IPl+\n> all          moved off        , and  Alice was  soon left     alone .\n# NSg/I/J/C/Dq VP/J+ NSg/VB/J/P . VB/C NPr+  VLPt J/R  NPr/VP/J J     .\n>\n#\n> “ I       wish   I       hadn’t mentioned Dinah ! ” she  said to herself in        a   melancholy tone       .\n# . ISg/#r+ NSg/VB ISg/#r+ VPt    VP/J      NPr   . . ISg+ VP/J P  ISg+    NPr/J/R/P D/P NSg/J      N🅪Sg/I/VB+ .\n> “ Nobody seems to like         her     , down        here , and  I’m sure she’s the best       cat       in        the\n# . NSg/I+ V3    P  NSg/VB/J/C/P ISg/D$+ . N🅪Sg/VB/J/P J/R  . VB/C K   J    K     D   NPr/VXB/JS NSg/VB/J+ NPr/J/R/P D\n> world   ! Oh     , my  dear     Dinah ! I       wonder  if    I       shall ever see    you    any    more         ! ” And  here\n# NSg/VB+ . NPr/VB . D$+ NSg/VB/J NPr   . ISg/#r+ N🅪Sg/VB NSg/C ISg/#r+ VXB   J/R  NSg/VB ISgPl+ I/R/Dq NPr/I/J/R/Dq . . VB/C J/R\n> poor      Alice began to cry    again , for   she  felt      very lonely and  low        - spirited . In        a\n# NSg/VB/J+ NPr+  VPt   P  NSg/VB P     . R/C/P ISg+ N🅪Sg/VP/J J/R  J/R    VB/C NSg/VB/J/R . VP/J     . NPr/J/R/P D/P\n> little     while      , however , she  again heard a   little     pattering of footsteps in        the\n# NPr/I/J/Dq NSg/VB/C/P . C       . ISg+ P     VP/J  D/P NPr/I/J/Dq Nᴹ/Vg/J   P  NPl+      NPr/J/R/P D\n> distance , and  she  looked up         eagerly , half      hoping  that         the Mouse   had changed his\n# N🅪Sg/VB+ . VB/C ISg+ VP/J   NSg/VB/J/P R       . N🅪Sg/J/P+ Nᴹ/Vg/J NSg/I/C/Ddem D   NSg/VB+ VP  VP/J    ISg/D$+\n> mind    , and  was  coming  back     to finish his     story   .\n# NSg/VB+ . VB/C VLPt Nᴹ/Vg/J NSg/VB/J P  NSg/VB ISg/D$+ NSg/VB+ .\n>\n#\n>              CHAPTER IV        : The Rabbit  Sends  in        a   Little     Bill\n# HeadingStart NSg/VB+ NSg/J/#r+ . D   NSg/VB+ NPl/V3 NPr/J/R/P D/P NPr/I/J/Dq NPr/VB+\n>\n#\n> It       was  the White       Rabbit , trotting slowly back     again , and  looking anxiously about\n# NPr/ISg+ VLPt D   NPr🅪Sg/VB/J NSg/VB . NSg/Vg/J R      NSg/VB/J P     . VB/C Nᴹ/Vg/J R         J/P\n> as    it       went    , as    if    it       had lost something ; and  she  heard it       muttering to itself\n# R/C/P NPr/ISg+ NSg/VPt . R/C/P NSg/C NPr/ISg+ VP  VP/J NSg/I/J+  . VB/C ISg+ VP/J  NPr/ISg+ Nᴹ/Vg/J   P  ISg+\n> “ The Duchess ! The Duchess ! Oh     my  dear      paws    ! Oh     my  fur          and  whiskers ! She’ll get\n# . D   NSg/VB  . D   NSg/VB  . NPr/VB D$+ NSg/VB/J+ NPl/V3+ . NPr/VB D$+ N🅪Sg/VB/C/P+ VB/C NPl      . K      NSg/VB\n> me       executed , as    sure as    ferrets are ferrets ! Where   can     I       have    dropped them     , I\n# NPr/ISg+ VP/J     . R/C/P J    R/C/P NPl/V3  VLB NPl/V3  . NSg/R/C NPr/VXB ISg/#r+ NSg/VXB VP/J    NSg/IPl+ . ISg/#r+\n> wonder  ? ” Alice guessed in        a    moment that          it       was  looking for   the fan     and  the pair\n# N🅪Sg/VB . . NPr+  VP/J    NPr/J/R/P D/P+ NSg+   NSg/I/C/Ddem+ NPr/ISg+ VLPt Nᴹ/Vg/J R/C/P D+  NSg/VB+ VB/C D   NSg/VB\n> of white        kid     gloves  , and  she  very good     - naturedly began hunting about for   them     ,\n# P  NPr🅪Sg/VB/J+ NSg/VB+ NPl/V3+ . VB/C ISg+ J/R  NPr/VB/J . ?         VPt   Nᴹ/Vg/J J/P   R/C/P NSg/IPl+ .\n> but     they were     nowhere to be       seen    — everything seemed to have    changed since her\n# NSg/C/P IPl+ NSg/VLPt NSg/J   P  NSg/VLXB NSg/VPp . NSg/I/VB+  VP/J   P  NSg/VXB VP/J    C/P   ISg/D$+\n> swim   in        the pool    , and  the great hall , with the glass      table  and  the little     door    ,\n# NSg/VB NPr/J/R/P D   NSg/VB+ . VB/C D   NSg/J NPr+ . P    D   NPr🅪Sg/VB+ NSg/VB VB/C D   NPr/I/J/Dq NSg/VB+ .\n> had vanished completely .\n# VP  VP/J     R          .\n>\n#\n> Very soon the Rabbit  noticed Alice , as    she  went    hunting about , and  called out          to\n# J/R  J/R  D+  NSg/VB+ VP/J    NPr+  . R/C/P ISg+ NSg/VPt Nᴹ/Vg/J J/P   . VB/C VP/J   NSg/VB/J/R/P P\n> her     in        an   angry tone       , “ Why    , Mary Ann    , what   are you    doing   out          here ? Run      home      this\n# ISg/D$+ NPr/J/R/P D/P+ VB/J+ N🅪Sg/I/VB+ . . NSg/VB . NPr+ NPr/J+ . NSg/I+ VLB ISgPl+ Nᴹ/Vg/J NSg/VB/J/R/P J/R  . NSg/VBPp NSg/VB/J+ I/Ddem+\n> moment , and  fetch  me       a   pair   of gloves and  a    fan     ! Quick    , now       ! ” And  Alice was  so\n# NSg+   . VB/C NSg/VB NPr/ISg+ D/P NSg/VB P  NPl/V3 VB/C D/P+ NSg/VB+ . NSg/VB/J . NSg/J/R/C . . VB/C NPr+  VLPt NSg/I/J/R/C\n> much         frightened that         she  ran     off        at    once  in        the direction it       pointed to , without\n# NSg/I/J/R/Dq VP/J       NSg/I/C/Ddem ISg+ NSg/VPt NSg/VB/J/P NSg/P NSg/C NPr/J/R/P D+  N🅪Sg+     NPr/ISg+ VP/J    P  . C/P\n> trying  to explain the mistake it       had made .\n# Nᴹ/Vg/J P  VB      D+  NSg/VB+ NPr/ISg+ VP  VP   .\n>\n#\n> “ He       took me       for   his     housemaid , ” she  said to herself as    she  ran     . “ How   surprised\n# . NPr/ISg+ VPt  NPr/ISg+ R/C/P ISg/D$+ NSg/VB    . . ISg+ VP/J P  ISg+    R/C/P ISg+ NSg/VPt . . NSg/C VP/J\n> he’ll be       when    he       finds  out          who    I       am        ! But     I’d better     take   him  his     fan    and\n# K     NSg/VLXB NSg/I/C NPr/ISg+ NPl/V3 NSg/VB/J/R/P NPr/I+ ISg/#r+ NPr/VLB/J . NSg/C/P K   NSg/VXB/JC NSg/VB ISg+ ISg/D$+ NSg/VB VB/C\n> gloves  — that          is  , if    I       can     find   them     . ” As    she  said this    , she  came      upon a    neat\n# NPl/V3+ . NSg/I/C/Ddem+ VL3 . NSg/C ISg/#r+ NPr/VXB NSg/VB NSg/IPl+ . . R/C/P ISg+ VP/J I/Ddem+ . ISg+ NSg/VPt/P P    D/P+ J+\n> little      house   , on  the door   of which was  a   bright   brass     plate  with the name    “ W.\n# NPr/I/J/Dq+ NPr/VB+ . J/P D   NSg/VB P  I/C+  VLPt D/P NPr/VB/J N🅪Sg/VB/J NSg/VB P    D+  NSg/VB+ . ?\n> RABBIT  , ” engraved upon it       . She  went    in        without knocking , and  hurried upstairs ,\n# NSg/VB+ . . VP/J     P    NPr/ISg+ . ISg+ NSg/VPt NPr/J/R/P C/P     Nᴹ/Vg/J  . VB/C VP/J    NSg/J    .\n> in        great  fear     lest she  should meet     the real   Mary Ann    , and  be       turned out          of the\n# NPr/J/R/P NSg/J+ N🅪Sg/VB+ JS   ISg+ VXB    NSg/VB/J D+  NSg/J+ NPr+ NPr/J+ . VB/C NSg/VLXB VP/J   NSg/VB/J/R/P P  D+\n> house   before she  had found  the fan    and  gloves  .\n# NPr/VB+ C/P    ISg+ VP  NSg/VP D   NSg/VB VB/C NPl/V3+ .\n>\n#\n> “ How   queer    it       seems , ” Alice said to herself , “ to be       going   messages for   a    rabbit  !\n# . NSg/C NSg/VB/J NPr/ISg+ V3    . . NPr+  VP/J P  ISg+    . . P  NSg/VLXB Nᴹ/Vg/J NPl/V3   R/C/P D/P+ NSg/VB+ .\n> I       suppose Dinah’ll be       sending me       on  messages next    ! ” And  she  began fancying the\n# ISg/#r+ VB      ?        NSg/VLXB Nᴹ/Vg/J NPr/ISg+ J/P NPl/V3+  NSg/J/P . . VB/C ISg+ VPt   Nᴹ/Vg/J  D\n> sort   of thing that          would happen : “ ‘          Miss   Alice ! Come       here directly , and  get    ready\n# NSg/VB P  NSg+  NSg/I/C/Ddem+ VXB   VB     . . Unlintable NSg/VB NPr+  . NSg/VBPp/P J/R  R/C      . VB/C NSg/VB NSg/VB/J\n> for   your walk    ! ’ ‘          Coming  in        a    minute    , nurse   ! But     I’ve got to see    that         the mouse\n# R/C/P D$+  NSg/VB+ . . Unlintable Nᴹ/Vg/J NPr/J/R/P D/P+ NSg/VB/J+ . NSg/VB+ . NSg/C/P K    VP  P  NSg/VB NSg/I/C/Ddem D   NSg/VB+\n> doesn’t get    out          . ’ Only  I       don’t think  , ” Alice went    on  , “ that          they’d let     Dinah\n# VX3     NSg/VB NSg/VB/J/R/P . . J/R/C ISg/#r+ VXB   NSg/VB . . NPr+  NSg/VPt J/P . . NSg/I/C/Ddem+ K      NSg/VBP NPr\n> stop   in        the house   if    it       began ordering people  about like         that          ! ”\n# NSg/VB NPr/J/R/P D   NPr/VB+ NSg/C NPr/ISg+ VPt   Nᴹ/Vg/J  NPl/VB+ J/P   NSg/VB/J/C/P NSg/I/C/Ddem+ . .\n>\n#\n> By    this    time       she  had found  her     way    into a   tidy     little     room      with a   table   in        the\n# NSg/P I/Ddem+ N🅪Sg/VB/J+ ISg+ VP  NSg/VP ISg/D$+ NSg/J+ P    D/P NSg/VB/J NPr/I/J/Dq N🅪Sg/VB/J P    D/P NSg/VB+ NPr/J/R/P D\n> window  , and  on  it       ( as    she  had hoped ) a   fan     and  two or    three pairs  of tiny  white\n# NSg/VB+ . VB/C J/P NPr/ISg+ . R/C/P ISg+ VP  VP/J  . D/P NSg/VB+ VB/C NSg NPr/C NSg   NPl/V3 P  NSg/J NPr🅪Sg/VB/J\n> kid     gloves  : she  took up         the fan     and  a   pair   of the gloves  , and  was  just going   to\n# NSg/VB+ NPl/V3+ . ISg+ VPt  NSg/VB/J/P D   NSg/VB+ VB/C D/P NSg/VB P  D   NPl/V3+ . VB/C VLPt J/R  Nᴹ/Vg/J P\n> leave  the room       , when    her     eye     fell      upon a   little     bottle  that          stood near       the\n# NSg/VB D   N🅪Sg/VB/J+ . NSg/I/C ISg/D$+ NSg/VB+ NSg/VPt/J P    D/P NPr/I/J/Dq NSg/VB+ NSg/I/C/Ddem+ VP    NSg/VB/J/P D\n> looking  - glass      . There was  no        label   this   time       with the words   “ DRINK   ME       , ” but\n# Nᴹ/Vg/J+ . NPr🅪Sg/VB+ . R+    VLPt NSg/Dq/P+ NSg/VB+ I/Ddem N🅪Sg/VB/J+ P    D+  NPl/V3+ . NSg/VB+ NPr/ISg+ . . NSg/C/P\n> nevertheless she  uncorked it       and  put     it       to her     lips    . “ I       know something\n# R            ISg+ VP/J     NPr/ISg+ VB/C NSg/VBP NPr/ISg+ P  ISg/D$+ NPl/V3+ . . ISg/#r+ VB   NSg/I/J+\n> interesting is  sure to happen , ” she  said to herself , “ whenever I       eat or    drink\n# Vg/J        VL3 J    P  VB     . . ISg+ VP/J P  ISg+    . . C        ISg/#r+ VB  NPr/C NSg/VB+\n> anything  ; so          I’ll just see    what   this   bottle  does    . I       do  hope      it’ll make   me       grow\n# NSg/I/VB+ . NSg/I/J/R/C K    J/R  NSg/VB NSg/I+ I/Ddem NSg/VB+ NPl/VX3 . ISg/#r+ VXB NPr🅪Sg/VB K     NSg/VB NPr/ISg+ VB\n> large again , for   really I’m quite tired of being        such  a   tiny  little     thing ! ”\n# NSg/J P     . R/C/P R      K   R     VP/J  P  N🅪Sg/VLg/J/C NSg/I D/P NSg/J NPr/I/J/Dq NSg+  . .\n>\n#\n> It       did  so          indeed , and  much         sooner than she  had expected : before she  had drunk\n# NPr/ISg+ VXPt NSg/I/J/R/C R      . VB/C NSg/I/J/R/Dq JC     C/P  ISg+ VP  NSg/VP/J . C/P    ISg+ VP  NSg/VPp/J+\n> half      the bottle  , she  found  her     head      pressing against the ceiling , and  had to\n# N🅪Sg/J/P+ D+  NSg/VB+ . ISg+ NSg/VP ISg/D$+ NPr/VB/J+ Nᴹ/Vg/J  C/P     D+  NSg/VB+ . VB/C VP  P\n> stoop  to save       her     neck    from being        broken . She  hastily put     down        the bottle  ,\n# NSg/VB P  NSg/VB/C/P ISg/D$+ NSg/VB+ P    N🅪Sg/VLg/J/C VPp/J  . ISg+ R       NSg/VBP N🅪Sg/VB/J/P D+  NSg/VB+ .\n> saying    to herself “ That’s quite enough — I       hope      I       shan’t grow any    more         — As    it       is  , I\n# N🅪Sg/Vg/J P  ISg+    . NSg$   R     NSg/I  . ISg/#r+ NPr🅪Sg/VB ISg/#r+ VXB    VB   I/R/Dq NPr/I/J/R/Dq . R/C/P NPr/ISg+ VL3 . ISg/#r+\n> can’t get    out          at    the door    — I       do  wish   I       hadn’t drunk     quite so          much         ! ”\n# VXB   NSg/VB NSg/VB/J/R/P NSg/P D   NSg/VB+ . ISg/#r+ VXB NSg/VB ISg/#r+ VPt    NSg/VPp/J R     NSg/I/J/R/C NSg/I/J/R/Dq . .\n>\n#\n> Alas  ! it       was  too late  to wish   that          ! She  went    on  growing , and  growing , and  very\n# NPrPl . NPr/ISg+ VLPt R   NSg/J P  NSg/VB NSg/I/C/Ddem+ . ISg+ NSg/VPt J/P Nᴹ/Vg/J . VB/C Nᴹ/Vg/J . VB/C J/R\n> soon had to kneel down        on  the floor   : in        another minute    there was  not     even       room\n# J/R  VP  P  VB    N🅪Sg/VB/J/P J/P D   NSg/VB+ . NPr/J/R/P I/D     NSg/VB/J+ R+    VLPt NSg/R/C NSg/VB/J/R N🅪Sg/VB/J+\n> for   this    , and  she  tried the effect  of lying   down        with one     elbow   against the\n# R/C/P I/Ddem+ . VB/C ISg+ VP/J  D   NSg/VB+ P  Nᴹ/Vg/J N🅪Sg/VB/J/P P    NSg/I/J NSg/VB+ C/P     D\n> door    , and  the other    arm       curled round      her     head      . Still      she  went    on  growing , and  ,\n# NSg/VB+ . VB/C D   NSg/VB/J NSg/VB/J+ VP/J   NSg/VB/J/P ISg/D$+ NPr/VB/J+ . NSg/VB/J/R ISg+ NSg/VPt J/P Nᴹ/Vg/J . VB/C .\n> as    a    last      resource , she  put     one     arm       out          of the window  , and  one      foot    up         the\n# R/C/P D/P+ NSg/VB/J+ N🅪Sg/VB+ . ISg+ NSg/VBP NSg/I/J NSg/VB/J+ NSg/VB/J/R/P P  D+  NSg/VB+ . VB/C NSg/I/J+ NSg/VB+ NSg/VB/J/P D+\n> chimney , and  said to herself “ Now       I       can     do  no       more         , whatever happens . What   will\n# NSg/VB+ . VB/C VP/J P  ISg+    . NSg/J/R/C ISg/#r+ NPr/VXB VXB NSg/Dq/P NPr/I/J/R/Dq . NSg/I/J+ V3      . NSg/I+ NPr/VXB\n> become of me       ? ”\n# VBPp   P  NPr/ISg+ . .\n>\n#\n> Luckily for   Alice , the little      magic      bottle  had now       had its     full      effect  , and  she\n# R       R/C/P NPr+  . D+  NPr/I/J/Dq+ N🅪Sg/VB/J+ NSg/VB+ VP  NSg/J/R/C VP  ISg/D$+ NSg/VB/J+ NSg/VB+ . VB/C ISg+\n> grew no       larger : still      it       was  very uncomfortable , and  , as    there seemed to be       no\n# VPt  NSg/Dq/P JC     . NSg/VB/J/R NPr/ISg+ VLPt J/R  J             . VB/C . R/C/P R+    VP/J   P  NSg/VLXB NSg/Dq/P\n> sort   of chance   of her     ever getting out          of the room       again , no       wonder  she  felt\n# NSg/VB P  NPr/VB/J P  ISg/D$+ J/R  NSg/Vg  NSg/VB/J/R/P P  D+  N🅪Sg/VB/J+ P     . NSg/Dq/P N🅪Sg/VB ISg+ N🅪Sg/VP/J\n> unhappy  .\n# NSg/VB/J .\n>\n#\n> “ It       was  much         pleasanter at    home      , ” thought poor     Alice , “ when    one     wasn’t always\n# . NPr/ISg+ VLPt NSg/I/J/R/Dq JC         NSg/P NSg/VB/J+ . . N🅪Sg/VP NSg/VB/J NPr+  . . NSg/I/C NSg/I/J VPt    R\n> growing larger and  smaller , and  being        ordered about by    mice   and  rabbits . I\n# Nᴹ/Vg/J JC     VB/C NSg/JC  . VB/C N🅪Sg/VLg/J/C VP/J    J/P   NSg/P NPl/VB VB/C NPl/V3+ . ISg/#r+\n> almost wish   I       hadn’t gone    down        that         rabbit  - hole    — and  yet      — and  yet      — it’s rather\n# R      NSg/VB ISg/#r+ VPt    VPp/J/P N🅪Sg/VB/J/P NSg/I/C/Ddem NSg/VB+ . NSg/VB+ . VB/C NSg/VB/C . VB/C NSg/VB/C . K    NPr/VB/J/R\n> curious , you    know , this   sort   of life     ! I       do  wonder  what   can     have    happened to me       !\n# J       . ISgPl+ VB   . I/Ddem NSg/VB P  N🅪Sg/VB+ . ISg/#r+ VXB N🅪Sg/VB NSg/I+ NPr/VXB NSg/VXB VP/J     P  NPr/ISg+ .\n> When    I       used to read    fairy  - tales   , I       fancied that         kind  of thing never happened ,\n# NSg/I/C ISg/#r+ VP/J P  NSg/VBP NSg/J+ . NPl/V3+ . ISg/#r+ VP/J    NSg/I/C/Ddem NSg/J P  NSg+  R     VP/J     .\n> and  now       here I       am        in        the middle   of one     ! There ought     to be       a   book    written about\n# VB/C NSg/J/R/C J/R  ISg/#r+ NPr/VLB/J NPr/J/R/P D   NSg/VB/J P  NSg/I/J . R+    NSg/I/VXB P  NSg/VLXB D/P NSg/VB+ VPp/J   J/P\n> me       , that         there ought     ! And  when    I       grow up         , I’ll write  one     — but     I’m grown up         now       , ”\n# NPr/ISg+ . NSg/I/C/Ddem R+    NSg/I/VXB . VB/C NSg/I/C ISg/#r+ VB   NSg/VB/J/P . K    NSg/VB NSg/I/J . NSg/C/P K   VB/J  NSg/VB/J/P NSg/J/R/C . .\n> she  added in        a   sorrowful tone       ; “ at    least    there’s no       room       to grow up         any    more\n# ISg+ VP/J  NPr/J/R/P D/P J         N🅪Sg/I/VB+ . . NSg/P NSg/J/Dq K       NSg/Dq/P N🅪Sg/VB/J+ P  VB   NSg/VB/J/P I/R/Dq NPr/I/J/R/Dq\n> here . ”\n# J/R  . .\n>\n#\n> “ But     then      , ” thought Alice , “ shall I       never get    any    older than I       am        now       ? That’ll\n# . NSg/C/P NSg/J/R/C . . N🅪Sg/VP NPr+  . . VXB   ISg/#r+ R     NSg/VB I/R/Dq JC    C/P  ISg/#r+ NPr/VLB/J NSg/J/R/C . K\n> be       a   comfort  , one     way    — never to be       an  old   woman   — but     then      — always to have    lessons\n# NSg/VLXB D/P N🅪Sg/VB+ . NSg/I/J NSg/J+ . R     P  NSg/VLXB D/P NSg/J NSg/VB+ . NSg/C/P NSg/J/R/C . R      P  NSg/VXB NPl/V3+\n> to learn  ! Oh     , I       shouldn’t like         that          ! ”\n# P  NSg/VB . NPr/VB . ISg/#r+ VXB       NSg/VB/J/C/P NSg/I/C/Ddem+ . .\n>\n#\n> “ Oh     , you    foolish Alice ! ” she  answered herself . “ How   can     you    learn  lessons in\n# . NPr/VB . ISgPl+ J+      NPr+  . . ISg+ VP/J     ISg+    . . NSg/C NPr/VXB ISgPl+ NSg/VB NPl/V3+ NPr/J/R/P\n> here ? Why    , there’s hardly room       for   you    , and  no       room       at    all          for   any\n# J/R  . NSg/VB . K       R      N🅪Sg/VB/J+ R/C/P ISgPl+ . VB/C NSg/Dq/P N🅪Sg/VB/J+ NSg/P NSg/I/J/C/Dq R/C/P I/R/Dq\n> lesson  - books   ! ”\n# NSg/VB+ . NPl/V3+ . .\n>\n#\n> And  so          she  went    on  , taking   first  one      side      and  then      the other    , and  making  quite a\n# VB/C NSg/I/J/R/C ISg+ NSg/VPt J/P . NSg/Vg/J NSg/J+ NSg/I/J+ NSg/VB/J+ VB/C NSg/J/R/C D   NSg/VB/J . VB/C Nᴹ/Vg/J R     D/P\n> conversation of it       altogether ; but     after a    few       minutes she  heard a    voice\n# N🅪Sg/VB      P  NPr/ISg+ NSg        . NSg/C/P P     D/P+ NSg/I/Dq+ NPl/V3+ ISg+ VP/J  D/P+ NSg/VB+\n> outside   , and  stopped to listen .\n# Nᴹ/VB/J/P . VB/C VP/J    P  NSg/VB .\n>\n#\n> “ Mary Ann    ! Mary Ann    ! ” said the voice   . “ Fetch  me       my  gloves this    moment ! ” Then\n# . NPr+ NPr/J+ . NPr+ NPr/J+ . . VP/J D+  NSg/VB+ . . NSg/VB NPr/ISg+ D$+ NPl/V3 I/Ddem+ NSg+   . . NSg/J/R/C\n> came      a   little     pattering of feet on  the stairs . Alice knew it       was  the Rabbit\n# NSg/VPt/P D/P NPr/I/J/Dq Nᴹ/Vg/J   P  NPl  J/P D   NPl+   . NPr+  VPt  NPr/ISg+ VLPt D   NSg/VB\n> coming  to look   for   her     , and  she  trembled till       she  shook     the house   , quite\n# Nᴹ/Vg/J P  NSg/VB R/C/P ISg/D$+ . VB/C ISg+ VP/J     NSg/VB/C/P ISg+ NSg/VPt/J D+  NPr/VB+ . R\n> forgetting that         she  was  now       about a    thousand times   as    large as    the Rabbit  , and\n# NSg/Vg     NSg/I/C/Ddem ISg+ VLPt NSg/J/R/C J/P   D/P+ NSg+     NPl/V3+ R/C/P NSg/J R/C/P D+  NSg/VB+ . VB/C\n> had no       reason   to be       afraid of it       .\n# VP  NSg/Dq/P N🅪Sg/VB+ P  NSg/VLXB J      P  NPr/ISg+ .\n>\n#\n> Presently the Rabbit  came      up         to the door    , and  tried to open     it       ; but     , as    the door\n# R         D+  NSg/VB+ NSg/VPt/P NSg/VB/J/P P  D+  NSg/VB+ . VB/C VP/J  P  NSg/VB/J NPr/ISg+ . NSg/C/P . R/C/P D+  NSg/VB+\n> opened inwards , and  Alice’s elbow   was  pressed hard     against it       , that         attempt\n# VP/J   NPl     . VB/C NPr$    NSg/VB+ VLPt VP/J    N🅪Sg/J/R C/P     NPr/ISg+ . NSg/I/C/Ddem NSg/VB+\n> proved a   failure . Alice heard it       say    to itself “ Then      I’ll go       round      and  get    in        at\n# VP/J   D/P N🅪Sg+   . NPr+  VP/J  NPr/ISg+ NSg/VB P  ISg+   . NSg/J/R/C K    NSg/VB/J NSg/VB/J/P VB/C NSg/VB NPr/J/R/P NSg/P\n> the window  . ”\n# D   NSg/VB+ . .\n>\n#\n> “ That         you    won’t ! ” thought Alice , and  , after waiting till       she  fancied she  heard\n# . NSg/I/C/Ddem ISgPl+ VXB   . . N🅪Sg/VP NPr+  . VB/C . P     Nᴹ/Vg/J NSg/VB/C/P ISg+ VP/J    ISg+ VP/J\n> the Rabbit  just under   the window  , she  suddenly spread   out          her     hand    , and  made a\n# D+  NSg/VB+ J/R  NSg/J/P D+  NSg/VB+ . ISg+ R        N🅪Sg/VBP NSg/VB/J/R/P ISg/D$+ NSg/VB+ . VB/C VP   D/P\n> snatch in        the air      . She  did  not     get    hold     of anything  , but     she  heard a   little\n# NSg/VB NPr/J/R/P D   N🅪Sg/VB+ . ISg+ VXPt NSg/R/C NSg/VB NSg/VB/J P  NSg/I/VB+ . NSg/C/P ISg+ VP/J  D/P NPr/I/J/Dq\n> shriek and  a   fall     , and  a   crash    of broken glass      , from which she  concluded that         it\n# NSg/VB VB/C D/P N🅪Sg/VB+ . VB/C D/P NSg/VB/J P  VPp/J  NPr🅪Sg/VB+ . P    I/C+  ISg+ VP/J      NSg/I/C/Ddem NPr/ISg+\n> was  just possible it       had fallen into a   cucumber - frame   , or    something of the sort    .\n# VLPt J/R  NSg/J    NPr/ISg+ VP  VPp/J  P    D/P N🅪Sg+    . NSg/VB+ . NPr/C NSg/I/J   P  D   NSg/VB+ .\n>\n#\n> Next    came      an   angry voice   — the Rabbit’s — “ Pat       ! Pat       ! Where   are you    ? ” And  then      a\n# NSg/J/P NSg/VPt/P D/P+ VB/J+ NSg/VB+ . D   NSg$     . . NPr/VB/J+ . NPr/VB/J+ . NSg/R/C VLB ISgPl+ . . VB/C NSg/J/R/C D/P+\n> voice   she  had never heard before , “ Sure then      I’m here ! Digging for   apples , yer\n# NSg/VB+ ISg+ VP  R     VP/J  C/P    . . J    NSg/J/R/C K   J/R  . NSg/Vg  R/C/P NPl    . +\n> honour        ! ”\n# N🅪Sg/VB/Comm+ . .\n>\n#\n> “ Digging for   apples , indeed ! ” said the Rabbit  angrily . “ Here ! Come       and  help   me\n# . NSg/Vg  R/C/P NPl    . R      . . VP/J D+  NSg/VB+ R       . . J/R  . NSg/VBPp/P VB/C NSg/VB NPr/ISg+\n> out          of this    ! ” ( Sounds of more         broken glass      . )\n# NSg/VB/J/R/P P  I/Ddem+ . . . NPl/V3 P  NPr/I/J/R/Dq VPp/J  NPr🅪Sg/VB+ . .\n>\n#\n> “ Now       tell   me       , Pat       , what’s that          in        the window  ? ”\n# . NSg/J/R/C NPr/VB NPr/ISg+ . NPr/VB/J+ . K      NSg/I/C/Ddem+ NPr/J/R/P D   NSg/VB+ . .\n>\n#\n> “ Sure , it’s an  arm       , yer honour        ! ” ( He       pronounced it       “ arrum . ” )\n# . J    . K    D/P NSg/VB/J+ . +   N🅪Sg/VB/Comm+ . . . NPr/ISg+ VP/J       NPr/ISg+ . ?     . . .\n>\n#\n> “ An   arm       , you    goose   ! Who    ever saw     one     that          size     ? Why    , it       fills  the whole  window  ! ”\n# . D/P+ NSg/VB/J+ . ISgPl+ NSg/VB+ . NPr/I+ J/R  NSg/VPt NSg/I/J NSg/I/C/Ddem+ N🅪Sg/VB+ . NSg/VB . NPr/ISg+ NPl/V3 D+  NSg/J+ NSg/VB+ . .\n>\n#\n> “ Sure , it       does    , yer honour        : but     it’s an  arm       for   all           that          . ”\n# . J    . NPr/ISg+ NPl/VX3 . +   N🅪Sg/VB/Comm+ . NSg/C/P K    D/P NSg/VB/J+ R/C/P NSg/I/J/C/Dq+ NSg/I/C/Ddem+ . .\n>\n#\n> “ Well       , it’s got no       business there , at    any    rate    : go       and  take   it       away ! ”\n# . NSg/VB/J/R . K    VP  NSg/Dq/P N🅪Sg/J+  R     . NSg/P I/R/Dq NSg/VB+ . NSg/VB/J VB/C NSg/VB NPr/ISg+ VB/J . .\n>\n#\n> There was  a    long      silence after this    , and  Alice could   only  hear whispers now       and\n# R+    VLPt D/P+ NPr/VB/J+ NSg/VB+ P     I/Ddem+ . VB/C NPr+  NSg/VXB J/R/C VB   NPl/V3   NSg/J/R/C VB/C\n> then      ; such  as    , “ Sure , I       don’t like         it       , yer honour        , at    all          , at    all          ! ” “ Do  as    I\n# NSg/J/R/C . NSg/I R/C/P . . J    . ISg/#r+ VXB   NSg/VB/J/C/P NPr/ISg+ . +   N🅪Sg/VB/Comm+ . NSg/P NSg/I/J/C/Dq . NSg/P NSg/I/J/C/Dq . . . VXB R/C/P ISg/#r+\n> tell   you    , you    coward   ! ” and  at    last     she  spread   out          her     hand    again , and  made\n# NPr/VB ISgPl+ . ISgPl+ NPr/VB/J . . VB/C NSg/P NSg/VB/J ISg+ N🅪Sg/VBP NSg/VB/J/R/P ISg/D$+ NSg/VB+ P     . VB/C VP\n> another snatch in        the air      . This    time       there were     two  little      shrieks , and  more\n# I/D     NSg/VB NPr/J/R/P D   N🅪Sg/VB+ . I/Ddem+ N🅪Sg/VB/J+ R+    NSg/VLPt NSg+ NPr/I/J/Dq+ NPl/V3+ . VB/C NPr/I/J/R/Dq\n> sounds of broken glass      . “ What   a   number     of cucumber - frames  there must    be       ! ”\n# NPl/V3 P  VPp/J  NPr🅪Sg/VB+ . . NSg/I+ D/P N🅪Sg/VB/JC P  N🅪Sg+    . NPl/V3+ R+    NSg/VXB NSg/VLXB . .\n> thought Alice . “ I       wonder  what   they’ll do  next    ! As    for    pulling me       out          of the\n# N🅪Sg/VP NPr+  . . ISg/#r+ N🅪Sg/VB NSg/I+ K       VXB NSg/J/P . R/C/P R/C/P+ Nᴹ/Vg/J NPr/ISg+ NSg/VB/J/R/P P  D+\n> window  , I       only  wish   they could   ! I’m sure I       don’t want   to stay     in        here any\n# NSg/VB+ . ISg/#r+ J/R/C NSg/VB IPl+ NSg/VXB . K   J    ISg/#r+ VXB   NSg/VB P  NSg/VB/J NPr/J/R/P J/R  I/R/Dq\n> longer ! ”\n# NSg/JC . .\n>\n#\n> She  waited for   some     time       without hearing  anything  more         : at    last     came      a   rumbling\n# ISg+ VP/J   R/C/P I/J/R/Dq N🅪Sg/VB/J+ C/P     Nᴹ/Vg/J+ NSg/I/VB+ NPr/I/J/R/Dq . NSg/P NSg/VB/J NSg/VPt/P D/P N🅪Sg/Vg/J\n> of little     cartwheels , and  the sound     of a   good     many       voices  all          talking together :\n# P  NPr/I/J/Dq NPl/V3     . VB/C D   N🅪Sg/VB/J P  D/P NPr/VB/J NSg/I/J/Dq NPl/V3+ NSg/I/J/C/Dq Nᴹ/Vg/J J        .\n> she  made out          the words   : “ Where’s the other    ladder  ? — Why    , I       hadn’t to bring but\n# ISg+ VP   NSg/VB/J/R/P D   NPl/V3+ . . NSg$    D   NSg/VB/J NSg/VB+ . . NSg/VB . ISg/#r+ VPt    P  VB    NSg/C/P\n> one     ; Bill’s got the other    — Bill    ! fetch  it       here , lad ! — Here , put     ’ em       up         at    this\n# NSg/I/J . NPr$   VP  D   NSg/VB/J . NPr/VB+ . NSg/VB NPr/ISg+ J/R  . NSg . . J/R  . NSg/VBP . NSg/I/J+ NSg/VB/J/P NSg/P I/Ddem+\n> corner  — No       , tie     ’ em       together first — they don’t reach  half      high       enough yet      — Oh     !\n# NSg/VB+ . NSg/Dq/P . NSg/VB+ . NSg/I/J+ J        NSg/J . IPl+ VXB   NSg/VB N🅪Sg/J/P+ NSg/VB/J/R NSg/I  NSg/VB/C . NPr/VB .\n> they’ll do  well       enough ; don’t be       particular — Here , Bill    ! catch  hold     of this\n# K       VXB NSg/VB/J/R NSg/I  . VXB   NSg/VLXB NSg/J      . J/R  . NPr/VB+ . NSg/VB NSg/VB/J P  I/Ddem+\n> rope    — Will    the roof    bear      ? — Mind    that         loose     slate     — Oh     , it’s coming  down        ! Heads\n# NSg/VB+ . NPr/VXB D+  NSg/VB+ NSg/VB/J+ . . NSg/VB+ NSg/I/C/Ddem NSg/VB/J+ NSg/VB/J+ . NPr/VB . K    Nᴹ/Vg/J N🅪Sg/VB/J/P . NPl/V3+\n> below ! ” ( a    loud   crash     ) — “ Now       , who    did  that          ? — It       was  Bill    , I       fancy    — Who’s to go       down\n# P     . . . D/P+ NSg/J+ NSg/VB/J+ . . . NSg/J/R/C . NPr/I+ VXPt NSg/I/C/Ddem+ . . NPr/ISg+ VLPt NPr/VB+ . ISg/#r+ NSg/VB/J . NPr$  P  NSg/VB/J N🅪Sg/VB/J/P\n> the chimney ? — Nay      , I       shan’t ! You    do  it       ! — That         I       won’t , then      ! — Bill’s to go\n# D   NSg/VB+ . . NSg/VB/J . ISg/#r+ VXB    . ISgPl+ VXB NPr/ISg+ . . NSg/I/C/Ddem ISg/#r+ VXB   . NSg/J/R/C . . NPr$   P  NSg/VB/J\n> down        — Here , Bill    ! the master    says   you’re to go       down        the chimney ! ”\n# N🅪Sg/VB/J/P . J/R  . NPr/VB+ . D+  NPr/VB/J+ NPl/V3 K      P  NSg/VB/J N🅪Sg/VB/J/P D   NSg/VB+ . .\n>\n#\n> “ Oh     ! So          Bill’s got to come       down        the chimney , has he       ? ” said Alice to herself .\n# . NPr/VB . NSg/I/J/R/C NPr$   VP  P  NSg/VBPp/P N🅪Sg/VB/J/P D   NSg/VB+ . V3  NPr/ISg+ . . VP/J NPr+  P  ISg+    .\n> “ Shy      , they seem to put     everything upon Bill    ! I       wouldn’t be       in        Bill’s place    for   a\n# . NSg/VB/J . IPl+ VB   P  NSg/VBP NSg/I/VB+  P    NPr/VB+ . ISg/#r+ VXB      NSg/VLXB NPr/J/R/P NPr$   N🅪Sg/VB+ R/C/P D/P\n> good     deal      : this   fireplace is  narrow   , to be       sure ; but     I       think  I       can     kick   a\n# NPr/VB/J NSg/VB/J+ . I/Ddem NSg+      VL3 NSg/VB/J . P  NSg/VLXB J    . NSg/C/P ISg/#r+ NSg/VB ISg/#r+ NPr/VXB NSg/VB D/P\n> little     ! ”\n# NPr/I/J/Dq . .\n>\n#\n> She  drew    her     foot    as    far      down        the chimney as    she  could   , and  waited till       she\n# ISg+ NPr/VPt ISg/D$+ NSg/VB+ R/C/P NSg/VB/J N🅪Sg/VB/J/P D+  NSg/VB+ R/C/P ISg+ NSg/VXB . VB/C VP/J   NSg/VB/C/P ISg+\n> heard a    little      animal ( she  couldn’t guess  of what   sort    it       was  ) scratching and\n# VP/J  D/P+ NPr/I/J/Dq+ NSg/J+ . ISg+ VXB      NSg/VB P  NSg/I+ NSg/VB+ NPr/ISg+ VLPt . Nᴹ/Vg/J    VB/C\n> scrambling about in        the chimney close    above   her     : then      , saying    to herself “ This\n# Nᴹ/Vg/J    J/P   NPr/J/R/P D   NSg/VB+ NSg/VB/J NSg/J/P ISg/D$+ . NSg/J/R/C . N🅪Sg/Vg/J P  ISg+    . I/Ddem+\n> is  Bill    , ” she  gave one     sharp    kick    , and  waited to see    what   would happen next    .\n# VL3 NPr/VB+ . . ISg+ VPt  NSg/I/J NPr/VB/J NSg/VB+ . VB/C VP/J   P  NSg/VB NSg/I+ VXB   VB     NSg/J/P .\n>\n#\n> The first  thing she  heard was  a   general  chorus of “ There goes   Bill    ! ” then      the\n# D+  NSg/J+ NSg+  ISg+ VP/J  VLPt D/P NSg/VB/J NSg/VB P  . R+    NPl/V3 NPr/VB+ . . NSg/J/R/C D\n> Rabbit’s voice   along — “ Catch  him  , you    by    the hedge   ! ” then      silence , and  then\n# NSg$     NSg/VB+ P     . . NSg/VB ISg+ . ISgPl+ NSg/P D   NSg/VB+ . . NSg/J/R/C NSg/VB+ . VB/C NSg/J/R/C\n> another confusion of voices  — “ Hold     up         his     head      — Brandy  now       — Don’t choke  him  — How   was\n# I/D     N🅪Sg/VB   P  NPl/V3+ . . NSg/VB/J NSg/VB/J/P ISg/D$+ NPr/VB/J+ . NPr/VB+ NSg/J/R/C . VXB   NSg/VB ISg+ . NSg/C VLPt\n> it       , old   fellow ? What   happened to you    ? Tell   us       all          about it       ! ”\n# NPr/ISg+ . NSg/J NSg    . NSg/I+ VP/J     P  ISgPl+ . NPr/VB NPr/IPl+ NSg/I/J/C/Dq J/P   NPr/ISg+ . .\n>\n#\n> Last     came      a   little     feeble , squeaking voice   , ( “ That’s Bill    , ” thought Alice , )\n# NSg/VB/J NSg/VPt/P D/P NPr/I/J/Dq VB/J   . Nᴹ/Vg/J   NSg/VB+ . . . NSg$   NPr/VB+ . . N🅪Sg/VP NPr+  . .\n> “ Well       , I       hardly know — No       more         , thank  ye       ; I’m better     now       — but     I’m a   deal      too\n# . NSg/VB/J/R . ISg/#r+ R      VB   . NSg/Dq/P NPr/I/J/R/Dq . NSg/VB NSg/I/D+ . K   NSg/VXB/JC NSg/J/R/C . NSg/C/P K   D/P NSg/VB/J+ R\n> flustered to tell   you    — all          I       know is  , something comes  at    me       like         a\n# VP/J      P  NPr/VB ISgPl+ . NSg/I/J/C/Dq ISg/#r+ VB   VL3 . NSg/I/J+  NPl/V3 NSg/P NPr/ISg+ NSg/VB/J/C/P D/P\n> Jack      - in        - the - box     , and  up         I       goes   like         a   sky      - rocket  ! ”\n# NPr/VB/J+ . NPr/J/R/P . D   . NSg/VB+ . VB/C NSg/VB/J/P ISg/#r+ NPl/V3 NSg/VB/J/C/P D/P N🅪Sg/VB+ . NSg/VB+ . .\n>\n#\n> “ So          you    did  , old   fellow ! ” said the others  .\n# . NSg/I/J/R/C ISgPl+ VXPt . NSg/J NSg    . . VP/J D+  NPl/V3+ .\n>\n#\n> “ We   must    burn   the house   down        ! ” said the Rabbit’s voice   ; and  Alice called out          as\n# . IPl+ NSg/VXB NSg/VB D+  NPr/VB+ N🅪Sg/VB/J/P . . VP/J D   NSg$     NSg/VB+ . VB/C NPr+  VP/J   NSg/VB/J/R/P R/C/P\n> loud  as    she  could   , “ If    you    do  , I’ll set       Dinah at    you    ! ”\n# NSg/J R/C/P ISg+ NSg/VXB . . NSg/C ISgPl+ VXB . K    NPr/VBP/J NPr   NSg/P ISgPl+ . .\n>\n#\n> There was  a    dead      silence instantly , and  Alice thought to herself , “ I       wonder  what\n# R+    VLPt D/P+ NSg/VB/J+ NSg/VB+ R         . VB/C NPr+  N🅪Sg/VP P  ISg+    . . ISg/#r+ N🅪Sg/VB NSg/I+\n> they will    do  next    ! If    they had any     sense    , they’d take   the roof    off        . ” After a\n# IPl+ NPr/VXB VXB NSg/J/P . NSg/C IPl+ VP  I/R/Dq+ N🅪Sg/VB+ . K      NSg/VB D   NSg/VB+ NSg/VB/J/P . . P     D/P+\n> minute    or    two , they began moving  about again , and  Alice heard the Rabbit  say    , “ A\n# NSg/VB/J+ NPr/C NSg . IPl+ VPt   Nᴹ/Vg/J J/P   P     . VB/C NPr+  VP/J  D+  NSg/VB+ NSg/VB . . D/P\n> barrowful will    do  , to begin  with . ”\n# ?         NPr/VXB VXB . P  NSg/VB P    . .\n>\n#\n> “ A   barrowful of what   ? ” thought Alice ; but     she  had not     long     to doubt   , for   the\n# . D/P ?         P  NSg/I+ . . N🅪Sg/VP NPr+  . NSg/C/P ISg+ VP  NSg/R/C NPr/VB/J P  N🅪Sg/VB . R/C/P D\n> next     moment a   shower of little      pebbles came      rattling in        at    the window  , and  some\n# NSg/J/P+ NSg+   D/P NSg/VB P  NPr/I/J/Dq+ NPl/V3+ NSg/VPt/P Nᴹ/Vg/J  NPr/J/R/P NSg/P D+  NSg/VB+ . VB/C I/J/R/Dq\n> of them     hit       her     in        the face    . “ I’ll put     a   stop    to this    , ” she  said to herself , and\n# P  NSg/IPl+ NSg/VBP/J ISg/D$+ NPr/J/R/P D+  NSg/VB+ . . K    NSg/VBP D/P NSg/VB+ P  I/Ddem+ . . ISg+ VP/J P  ISg+    . VB/C\n> shouted out          , “ You’d better     not     do  that          again ! ” which produced another dead\n# VP/J    NSg/VB/J/R/P . . K     NSg/VXB/JC NSg/R/C VXB NSg/I/C/Ddem+ P     . . I/C+  VP/J     I/D+    NSg/VB/J+\n> silence .\n# NSg/VB+ .\n>\n#\n> Alice noticed with some     surprise that         the pebbles were     all          turning into little\n# NPr+  VP/J    P    I/J/R/Dq NSg/VB+  NSg/I/C/Ddem D+  NPl/V3+ NSg/VLPt NSg/I/J/C/Dq Nᴹ/Vg/J P    NPr/I/J/Dq+\n> cakes   as    they lay        on  the floor   , and  a    bright    idea came      into her     head      . “ If    I       eat\n# NPl/V3+ R/C/P IPl+ NSg/VBPt/J J/P D+  NSg/VB+ . VB/C D/P+ NPr/VB/J+ NSg+ NSg/VPt/P P    ISg/D$+ NPr/VB/J+ . . NSg/C ISg/#r+ VB\n> one     of these   cakes   , ” she  thought , “ it’s sure to make   some     change   in        my  size     ; and\n# NSg/I/J P  I/Ddem+ NPl/V3+ . . ISg+ N🅪Sg/VP . . K    J    P  NSg/VB I/J/R/Dq N🅪Sg/VB+ NPr/J/R/P D$+ N🅪Sg/VB+ . VB/C\n> as    it       can’t possibly make   me       larger , it       must    make   me       smaller , I       suppose . ”\n# R/C/P NPr/ISg+ VXB   R        NSg/VB NPr/ISg+ JC     . NPr/ISg+ NSg/VXB NSg/VB NPr/ISg+ NSg/JC  . ISg/#r+ VB      . .\n>\n#\n> So          she  swallowed one     of the cakes   , and  was  delighted to find   that         she  began\n# NSg/I/J/R/C ISg+ VP/J      NSg/I/J P  D+  NPl/V3+ . VB/C VLPt VP/J      P  NSg/VB NSg/I/C/Ddem ISg+ VPt\n> shrinking directly . As    soon as    she  was  small    enough to get    through the door    , she\n# Nᴹ/Vg/J   R/C      . R/C/P J/R  R/C/P ISg+ VLPt NPr/VB/J NSg/I  P  NSg/VB NSg/J/P D+  NSg/VB+ . ISg+\n> ran     out          of the house   , and  found  quite a   crowd  of little     animals and  birds\n# NSg/VPt NSg/VB/J/R/P P  D+  NPr/VB+ . VB/C NSg/VP R     D/P NSg/VB P  NPr/I/J/Dq NPl     VB/C NPl/V3+\n> waiting outside   . The poor     little     Lizard , Bill    , was  in        the middle   , being        held up\n# Nᴹ/Vg/J Nᴹ/VB/J/P . D   NSg/VB/J NPr/I/J/Dq NSg    . NPr/VB+ . VLPt NPr/J/R/P D   NSg/VB/J . N🅪Sg/VLg/J/C VP   NSg/VB/J/P\n> by    two guinea - pigs    , who    were     giving  it       something out          of a   bottle  . They all          made\n# NSg/P NSg NPr+   . NPl/V3+ . NPr/I+ NSg/VLPt Nᴹ/Vg/J NPr/ISg+ NSg/I/J+  NSg/VB/J/R/P P  D/P NSg/VB+ . IPl+ NSg/I/J/C/Dq VP\n> a   rush      at    Alice the moment she  appeared ; but     she  ran     off        as    hard     as    she  could   ,\n# D/P NPr/VB/J+ NSg/P NPr+  D+  NSg+   ISg+ VP/J     . NSg/C/P ISg+ NSg/VPt NSg/VB/J/P R/C/P N🅪Sg/J/R R/C/P ISg+ NSg/VXB .\n> and  soon found  herself safe     in        a    thick     wood         .\n# VB/C J/R  NSg/VP ISg+    NSg/VB/J NPr/J/R/P D/P+ NSg/VB/J+ NPr🅪Sg/VB/J+ .\n>\n#\n> “ The first  thing I’ve got to do  , ” said Alice to herself , as    she  wandered about\n# . D+  NSg/J+ NSg+  K    VP  P  VXB . . VP/J NPr+  P  ISg+    . R/C/P ISg+ VP/J     J/P\n> in        the wood         , “ is  to grow to my  right    size     again ; and  the second   thing is  to find\n# NPr/J/R/P D   NPr🅪Sg/VB/J+ . . VL3 P  VB   P  D$+ NPr/VB/J N🅪Sg/VB+ P     . VB/C D   NSg/VB/J NSg+  VL3 P  NSg/VB\n> my  way    into that         lovely garden    . I       think  that          will    be       the best        plan    . ”\n# D$+ NSg/J+ P    NSg/I/C/Ddem NSg/J  NSg/VB/J+ . ISg/#r+ NSg/VB NSg/I/C/Ddem+ NPr/VXB NSg/VLXB D+  NPr/VXB/JS+ NSg/VB+ . .\n>\n#\n> It       sounded an   excellent plan    , no        doubt    , and  very neatly and  simply arranged ; the\n# NPr/ISg+ VP/J    D/P+ J+        NSg/VB+ . NSg/Dq/P+ N🅪Sg/VB+ . VB/C J/R  R      VB/C R      VP/J     . D+\n> only   difficulty was  , that         she  had not     the smallest idea how   to set       about it       ; and\n# J/R/C+ N🅪Sg+      VLPt . NSg/I/C/Ddem ISg+ VP  NSg/R/C D+  JS       NSg  NSg/C P  NPr/VBP/J J/P   NPr/ISg+ . VB/C\n> while      she  was  peering about anxiously among the trees   , a   little     sharp    bark     just\n# NSg/VB/C/P ISg+ VLPt Nᴹ/Vg/J J/P   R         P     D   NPl/V3+ . D/P NPr/I/J/Dq NPr/VB/J N🅪Sg/VB+ J/R\n> over    her     head      made her     look   up         in        a   great hurry   .\n# NSg/J/P ISg/D$+ NPr/VB/J+ VP   ISg/D$+ NSg/VB NSg/VB/J/P NPr/J/R/P D/P NSg/J NSg/VB+ .\n>\n#\n> An   enormous puppy   was  looking down        at    her     with large round      eyes    , and  feebly\n# D/P+ J+       NSg/VB+ VLPt Nᴹ/Vg/J N🅪Sg/VB/J/P NSg/P ISg/D$+ P    NSg/J NSg/VB/J/P NPl/V3+ . VB/C R\n> stretching out          one      paw     , trying  to touch   her     . “ Poor      little      thing ! ” said Alice , in\n# Nᴹ/Vg/J    NSg/VB/J/R/P NSg/I/J+ NSg/VB+ . Nᴹ/Vg/J P  N🅪Sg/VB ISg/D$+ . . NSg/VB/J+ NPr/I/J/Dq+ NSg+  . . VP/J NPr+  . NPr/J/R/P\n> a   coaxing tone       , and  she  tried hard     to whistle to it       ; but     she  was  terribly\n# D/P Nᴹ/Vg/J N🅪Sg/I/VB+ . VB/C ISg+ VP/J  N🅪Sg/J/R P  NSg/VB  P  NPr/ISg+ . NSg/C/P ISg+ VLPt R\n> frightened all          the time       at    the thought that         it       might    be       hungry , in        which case       it\n# VP/J       NSg/I/J/C/Dq D   N🅪Sg/VB/J+ NSg/P D   N🅪Sg/VP NSg/I/C/Ddem NPr/ISg+ Nᴹ/VXB/J NSg/VLXB J      . NPr/J/R/P I/C+  NPr🅪Sg/VB+ NPr/ISg+\n> would be       very likely to eat her     up         in        spite     of all          her     coaxing .\n# VXB   NSg/VLXB J/R  NSg/J  P  VB  ISg/D$+ NSg/VB/J/P NPr/J/R/P NSg/VB/P+ P  NSg/I/J/C/Dq ISg/D$+ Nᴹ/Vg/J .\n>\n#\n> Hardly knowing    what   she  did  , she  picked up         a   little     bit     of stick     , and  held it\n# R      NSg/Vg/J/P NSg/I+ ISg+ VXPt . ISg+ VP/J   NSg/VB/J/P D/P NPr/I/J/Dq NSg/VPt P  NSg/VB/J+ . VB/C VP   NPr/ISg+\n> out          to the puppy   ; whereupon the puppy   jumped into the air      off        all          its     feet at\n# NSg/VB/J/R/P P  D+  NSg/VB+ . C         D+  NSg/VB+ VP/J   P    D   N🅪Sg/VB+ NSg/VB/J/P NSg/I/J/C/Dq ISg/D$+ NPl+ NSg/P\n> once  , with a   yelp   of delight    , and  rushed at    the stick     , and  made believe to worry\n# NSg/C . P    D/P NSg/VB P  N🅪Sg/VB/J+ . VB/C VP/J   NSg/P D   NSg/VB/J+ . VB/C VP   VB      P  N🅪Sg/VB\n> it       ; then      Alice dodged behind  a   great thistle , to keep   herself from being        run\n# NPr/ISg+ . NSg/J/R/C NPr+  VP/J   NSg/J/P D/P NSg/J NSg     . P  NSg/VB ISg+    P    N🅪Sg/VLg/J/C NSg/VBPp\n> over    ; and  the moment she  appeared on  the other    side      , the puppy   made another rush\n# NSg/J/P . VB/C D   NSg+   ISg+ VP/J     J/P D   NSg/VB/J NSg/VB/J+ . D   NSg/VB+ VP   I/D     NPr/VB/J+\n> at    the stick     , and  tumbled head      over    heels   in        its     hurry   to get    hold     of it       ; then\n# NSg/P D   NSg/VB/J+ . VB/C VP/J    NPr/VB/J+ NSg/J/P NPl/V3+ NPr/J/R/P ISg/D$+ NSg/VB+ P  NSg/VB NSg/VB/J P  NPr/ISg+ . NSg/J/R/C\n> Alice , thinking it       was  very like         having  a   game      of play    with a   cart    - horse   , and\n# NPr+  . Nᴹ/Vg/J  NPr/ISg+ VLPt J/R  NSg/VB/J/C/P Nᴹ/Vg/J D/P NSg/VB/J+ P  N🅪Sg/VB P    D/P NSg/VB+ . NSg/VB+ . VB/C\n> expecting every moment to be       trampled under   its     feet , ran     round      the thistle\n# Nᴹ/Vg/J   Dq    NSg+   P  NSg/VLXB VP/J     NSg/J/P ISg/D$+ NPl+ . NSg/VPt NSg/VB/J/P D   NSg\n> again ; then      the puppy   began a   series of short      charges at    the stick     , running   a\n# P     . NSg/J/R/C D   NSg/VB+ VPt   D/P NSgPl  P  NPr/VB/J/P NPl/V3+ NSg/P D   NSg/VB/J+ . Nᴹ/Vg/J/P D/P\n> very little     way    forwards each time       and  a   long     way    back     , and  barking  hoarsely all\n# J/R  NPr/I/J/Dq NSg/J+ NPl/V3   Dq   N🅪Sg/VB/J+ VB/C D/P NPr/VB/J NSg/J+ NSg/VB/J . VB/C Nᴹ/Vg/J+ R        NSg/I/J/C/Dq\n> the while      , till       at    last     it       sat      down        a   good     way    off        , panting , with its     tongue\n# D   NSg/VB/C/P . NSg/VB/C/P NSg/P NSg/VB/J NPr/ISg+ NSg/VP/J N🅪Sg/VB/J/P D/P NPr/VB/J NSg/J+ NSg/VB/J/P . Nᴹ/Vg/J . P    ISg/D$+ N🅪Sg/VB+\n> hanging out          of its     mouth   , and  its     great  eyes    half      shut      .\n# Nᴹ/Vg/J NSg/VB/J/R/P P  ISg/D$+ NSg/VB+ . VB/C ISg/D$+ NSg/J+ NPl/V3+ N🅪Sg/J/P+ NSg/VBP/J .\n>\n#\n> This   seemed to Alice a    good      opportunity for   making  her     escape  ; so          she  set       off        at\n# I/Ddem VP/J   P  NPr+  D/P+ NPr/VB/J+ N🅪Sg+       R/C/P Nᴹ/Vg/J ISg/D$+ N🅪Sg/VB . NSg/I/J/R/C ISg+ NPr/VBP/J NSg/VB/J/P NSg/P\n> once  , and  ran     till       she  was  quite tired and  out          of breath     , and  till       the puppy’s\n# NSg/C . VB/C NSg/VPt NSg/VB/C/P ISg+ VLPt R     VP/J  VB/C NSg/VB/J/R/P P  N🅪Sg/VB/J+ . VB/C NSg/VB/C/P D   NSg$\n> bark     sounded quite faint    in        the distance .\n# N🅪Sg/VB+ VP/J    R     NSg/VB/J NPr/J/R/P D   N🅪Sg/VB+ .\n>\n#\n> “ And  yet      what   a    dear      little      puppy   it       was  ! ” said Alice , as    she  leant against a\n# . VB/C NSg/VB/C NSg/I+ D/P+ NSg/VB/J+ NPr/I/J/Dq+ NSg/VB+ NPr/ISg+ VLPt . . VP/J NPr+  . R/C/P ISg+ ?     C/P     D/P\n> buttercup to rest   herself , and  fanned herself with one     of the leaves  : “ I       should\n# NSg       P  NSg/VB ISg+    . VB/C VP     ISg+    P    NSg/I/J P  D   NPl/V3+ . . ISg/#r+ VXB\n> have    liked teaching   it       tricks  very much         , if    — if    I’d only  been     the right    size     to\n# NSg/VXB VP/J  N🅪Sg/Vg/J+ NPr/ISg+ NPl/V3+ J/R  NSg/I/J/R/Dq . NSg/C . NSg/C K   J/R/C NSg/VLPp D   NPr/VB/J N🅪Sg/VB+ P\n> do  it       ! Oh     dear     ! I’d nearly forgotten that         I’ve got to grow up         again ! Let     me\n# VXB NPr/ISg+ . NPr/VB NSg/VB/J . K   R      NSg/VPp/J NSg/I/C/Ddem K    VP  P  VB   NSg/VB/J/P P     . NSg/VBP NPr/ISg+\n> see    — how   is  it       to be       managed ? I       suppose I       ought     to eat or    drink   something or\n# NSg/VB . NSg/C VL3 NPr/ISg+ P  NSg/VLXB VP/J    . ISg/#r+ VB      ISg/#r+ NSg/I/VXB P  VB  NPr/C NSg/VB+ NSg/I/J+  NPr/C\n> other    ; but     the great  question is  , what   ? ”\n# NSg/VB/J . NSg/C/P D+  NSg/J+ NSg/VB+  VL3 . NSg/I+ . .\n>\n#\n> The great  question certainly was  , what   ? Alice looked all          round      her     at    the\n# D+  NSg/J+ NSg/VB+  R         VLPt . NSg/I+ . NPr+  VP/J   NSg/I/J/C/Dq NSg/VB/J/P ISg/D$+ NSg/P D\n> flowers   and  the blades of grass      , but     she  did  not     see    anything  that          looked like\n# NPrPl/V3+ VB/C D   NPl/V3 P  NPr🅪Sg/VB+ . NSg/C/P ISg+ VXPt NSg/R/C NSg/VB NSg/I/VB+ NSg/I/C/Ddem+ VP/J   NSg/VB/J/C/P\n> the right    thing to eat or    drink   under   the circumstances . There was  a   large\n# D   NPr/VB/J NSg+  P  VB  NPr/C NSg/VB+ NSg/J/P D+  NPl/V3+       . R+    VLPt D/P NSg/J\n> mushroom  growing near       her     , about the same height as    herself ; and  when    she  had\n# N🅪Sg/VB/J Nᴹ/Vg/J NSg/VB/J/P ISg/D$+ . J/P   D   I/J  N🅪Sg+  R/C/P ISg+    . VB/C NSg/I/C ISg+ VP\n> looked under   it       , and  on  both   sides  of it       , and  behind  it       , it       occurred to her     that\n# VP/J   NSg/J/P NPr/ISg+ . VB/C J/P I/C/Dq NPl/V3 P  NPr/ISg+ . VB/C NSg/J/P NPr/ISg+ . NPr/ISg+ VP       P  ISg/D$+ NSg/I/C/Ddem\n> she  might    as    well       look   and  see    what   was  on  the top      of it       .\n# ISg+ Nᴹ/VXB/J R/C/P NSg/VB/J/R NSg/VB VB/C NSg/VB NSg/I+ VLPt J/P D   NSg/VB/J P  NPr/ISg+ .\n>\n#\n> She  stretched herself up         on  tiptoe    , and  peeped over    the edge   of the mushroom  ,\n# ISg+ VP/J      ISg+    NSg/VB/J/P J/P NSg/VB/J+ . VB/C VP/J   NSg/J/P D   NSg/VB P  D   N🅪Sg/VB/J .\n> and  her     eyes    immediately met those  of a   large blue      caterpillar , that          was  sitting\n# VB/C ISg/D$+ NPl/V3+ R           VP  I/Ddem P  D/P NSg/J N🅪Sg/VB/J NSg/VB      . NSg/I/C/Ddem+ VLPt NSg/Vg/J\n> on  the top       with its     arms    folded , quietly smoking a   long     hookah , and  taking   not\n# J/P D   NSg/VB/J+ P    ISg/D$+ NPl/V3+ VP/J   . R       Nᴹ/Vg/J D/P NPr/VB/J NSg    . VB/C NSg/Vg/J NSg/R/C\n> the smallest notice of her     or    of anything  else    .\n# D   JS       NSg/VB P  ISg/D$+ NPr/C P  NSg/I/VB+ NSg/J/C .\n>\n#\n>              CHAPTER V        : Advice from a   Caterpillar\n# HeadingStart NSg/VB+ NSg/P/#r . Nᴹ+    P    D/P NSg/VB\n>\n#\n> The Caterpillar and  Alice looked at    each other    for   some     time       in        silence : at    last\n# D   NSg/VB      VB/C NPr+  VP/J   NSg/P Dq   NSg/VB/J R/C/P I/J/R/Dq N🅪Sg/VB/J+ NPr/J/R/P NSg/VB+ . NSg/P NSg/VB/J\n> the Caterpillar took the hookah out          of its     mouth   , and  addressed her     in        a\n# D   NSg/VB      VPt  D   NSg    NSg/VB/J/R/P P  ISg/D$+ NSg/VB+ . VB/C VP/J      ISg/D$+ NPr/J/R/P D/P\n> languid , sleepy voice   .\n# NSg/J   . NSg/J  NSg/VB+ .\n>\n#\n> “ Who    are you    ? ” said the Caterpillar .\n# . NPr/I+ VLB ISgPl+ . . VP/J D   NSg/VB      .\n>\n#\n> This    was  not     an  encouraging opening for   a    conversation . Alice replied , rather\n# I/Ddem+ VLPt NSg/R/C D/P Nᴹ/Vg/J     Nᴹ/Vg/J R/C/P D/P+ N🅪Sg/VB+     . NPr+  VP/J    . NPr/VB/J/R\n> shyly , “ I       — I       hardly know , sir     , just at    present  — at    least    I       know who    I       was  when    I\n# R     . . ISg/#r+ . ISg/#r+ R      VB   . NPr/VB+ . J/R  NSg/P NSg/VB/J . NSg/P NSg/J/Dq ISg/#r+ VB   NPr/I+ ISg/#r+ VLPt NSg/I/C ISg/#r+\n> got up         this   morning    , but     I       think  I       must    have    been     changed several times   since\n# VP  NSg/VB/J/P I/Ddem N🅪Sg/Vg/J+ . NSg/C/P ISg/#r+ NSg/VB ISg/#r+ NSg/VXB NSg/VXB NSg/VLPp VP/J    J/Dq    NPl/V3+ C/P\n> then      . ”\n# NSg/J/R/C . .\n>\n#\n> “ What   do  you    mean     by    that          ? ” said the Caterpillar sternly . “ Explain yourself ! ”\n# . NSg/I+ VXB ISgPl+ NSg/VB/J NSg/P NSg/I/C/Ddem+ . . VP/J D   NSg/VB      R       . . VB      ISg+     . .\n>\n#\n> “ I       can’t explain myself , I’m afraid , sir     , ” said Alice , “ because I’m not     myself ,\n# . ISg/#r+ VXB   VB      ISg+   . K   J      . NPr/VB+ . . VP/J NPr+  . . C/P     K   NSg/R/C ISg+   .\n> you    see    . ”\n# ISgPl+ NSg/VB . .\n>\n#\n> “ I       don’t see    , ” said the Caterpillar .\n# . ISg/#r+ VXB   NSg/VB . . VP/J D   NSg/VB      .\n>\n#\n> “ I’m afraid I       can’t put     it       more         clearly , ” Alice replied very politely , “ for   I\n# . K   J      ISg/#r+ VXB   NSg/VBP NPr/ISg+ NPr/I/J/R/Dq R       . . NPr+  VP/J    J/R  R        . . R/C/P ISg/#r+\n> can’t understand it       myself to begin  with ; and  being        so          many       different sizes   in        a\n# VXB   VB         NPr/ISg+ ISg+   P  NSg/VB P    . VB/C N🅪Sg/VLg/J/C NSg/I/J/R/C NSg/I/J/Dq NSg/J     NPl/V3+ NPr/J/R/P D/P\n> day     is  very confusing . ”\n# NPr🅪Sg+ VL3 J/R  Nᴹ/Vg/J   . .\n>\n#\n> “ It       isn’t   , ” said the Caterpillar .\n# . NPr/ISg+ NSg/VX3 . . VP/J D   NSg/VB      .\n>\n#\n> “ Well       , perhaps you    haven’t found  it       so          yet      , ” said Alice ; “ but     when    you    have    to\n# . NSg/VB/J/R . NSg/R   ISgPl+ VXB     NSg/VP NPr/ISg+ NSg/I/J/R/C NSg/VB/C . . VP/J NPr+  . . NSg/C/P NSg/I/C ISgPl+ NSg/VXB P\n> turn   into a   chrysalis — you    will    some     day     , you    know — and  then      after that          into a\n# NSg/VB P    D/P NSg/VB    . ISgPl+ NPr/VXB I/J/R/Dq NPr🅪Sg+ . ISgPl+ VB   . VB/C NSg/J/R/C P     NSg/I/C/Ddem+ P    D/P\n> butterfly , I       should think  you’ll feel     it       a   little     queer    , won’t you    ? ”\n# NSg/VB+   . ISg/#r+ VXB    NSg/VB K      NSg/I/VB NPr/ISg+ D/P NPr/I/J/Dq NSg/VB/J . VXB   ISgPl+ . .\n>\n#\n> “ Not     a    bit      , ” said the Caterpillar .\n# . NSg/R/C D/P+ NSg/VPt+ . . VP/J D   NSg/VB      .\n>\n#\n> “ Well       , perhaps your feelings may     be       different , ” said Alice ; “ all          I       know is  , it\n# . NSg/VB/J/R . NSg/R   D$+  NPl/V3+  NPr/VXB NSg/VLXB NSg/J     . . VP/J NPr+  . . NSg/I/J/C/Dq ISg/#r+ VB   VL3 . NPr/ISg+\n> would feel     very queer    to me       . ”\n# VXB   NSg/I/VB J/R  NSg/VB/J P  NPr/ISg+ . .\n>\n#\n> “ You    ! ” said the Caterpillar contemptuously . “ Who    are you    ? ”\n# . ISgPl+ . . VP/J D   NSg/VB      R              . . NPr/I+ VLB ISgPl+ . .\n>\n#\n> Which brought them     back     again to the beginning of the conversation . Alice felt      a\n# I/C+  VP      NSg/IPl+ NSg/VB/J P     P  D   NSg/Vg/J  P  D+  N🅪Sg/VB+     . NPr+  N🅪Sg/VP/J D/P+\n> little      irritated at    the Caterpillar’s making  such  very short      remarks , and  she\n# NPr/I/J/Dq+ VP/J+     NSg/P D   NSg$          Nᴹ/Vg/J NSg/I J/R  NPr/VB/J/P NPl/V3+ . VB/C ISg+\n> drew    herself up         and  said , very gravely , “ I       think  , you    ought     to tell   me       who    you\n# NPr/VPt ISg+    NSg/VB/J/P VB/C VP/J . J/R  R       . . ISg/#r+ NSg/VB . ISgPl+ NSg/I/VXB P  NPr/VB NPr/ISg+ NPr/I+ ISgPl+\n> are , first . ”\n# VLB . NSg/J . .\n>\n#\n> “ Why    ? ” said the Caterpillar .\n# . NSg/VB . . VP/J D   NSg/VB      .\n>\n#\n> Here was  another puzzling question ; and  as    Alice could   not     think  of any     good\n# J/R  VLPt I/D+    Nᴹ/Vg/J+ NSg/VB+  . VB/C R/C/P NPr+  NSg/VXB NSg/R/C NSg/VB P  I/R/Dq+ NPr/VB/J+\n> reason   , and  as    the Caterpillar seemed to be       in        a   very unpleasant state   of mind    ,\n# N🅪Sg/VB+ . VB/C R/C/P D   NSg/VB      VP/J   P  NSg/VLXB NPr/J/R/P D/P J/R  NSg/J      N🅪Sg/VB P  NSg/VB+ .\n> she  turned away .\n# ISg+ VP/J   VB/J .\n>\n#\n> “ Come       back     ! ” the Caterpillar called after her     . “ I’ve something important to\n# . NSg/VBPp/P NSg/VB/J . . D   NSg/VB      VP/J   P     ISg/D$+ . . K    NSg/I/J+  J         P\n> say    ! ”\n# NSg/VB . .\n>\n#\n> This   sounded promising , certainly : Alice turned and  came      back     again .\n# I/Ddem VP/J    Nᴹ/Vg/J   . R         . NPr+  VP/J   VB/C NSg/VPt/P NSg/VB/J P     .\n>\n#\n> “ Keep   your temper     , ” said the Caterpillar .\n# . NSg/VB D$+  NSg/VB/JC+ . . VP/J D   NSg/VB      .\n>\n#\n> “ Is  that         all          ? ” said Alice , swallowing down        her     anger  as    well       as    she  could   .\n# . VL3 NSg/I/C/Ddem NSg/I/J/C/Dq . . VP/J NPr+  . Nᴹ/Vg/J    N🅪Sg/VB/J/P ISg/D$+ Nᴹ/VB+ R/C/P NSg/VB/J/R R/C/P ISg+ NSg/VXB .\n>\n#\n> “ No       , ” said the Caterpillar .\n# . NSg/Dq/P . . VP/J D   NSg/VB      .\n>\n#\n> Alice thought she  might    as    well       wait   , as    she  had nothing  else    to do  , and  perhaps\n# NPr+  N🅪Sg/VP ISg+ Nᴹ/VXB/J R/C/P NSg/VB/J/R NSg/VB . R/C/P ISg+ VP  NSg/I/J+ NSg/J/C P  VXB . VB/C NSg/R\n> after all          it       might    tell   her     something worth     hearing  . For   some      minutes it       puffed\n# P     NSg/I/J/C/Dq NPr/ISg+ Nᴹ/VXB/J NPr/VB ISg/D$+ NSg/I/J+  NSg/VB/J+ Nᴹ/Vg/J+ . R/C/P I/J/R/Dq+ NPl/V3+ NPr/ISg+ VP/J\n> away without speaking , but     at    last     it       unfolded its     arms    , took the hookah out          of\n# VB/J C/P     Nᴹ/Vg/J  . NSg/C/P NSg/P NSg/VB/J NPr/ISg+ VP/J     ISg/D$+ NPl/V3+ . VPt  D   NSg    NSg/VB/J/R/P P\n> its     mouth   again , and  said , “ So          you    think  you’re changed , do  you    ? ”\n# ISg/D$+ NSg/VB+ P     . VB/C VP/J . . NSg/I/J/R/C ISgPl+ NSg/VB K      VP/J    . VXB ISgPl+ . .\n>\n#\n> “ I’m afraid I       am        , sir     , ” said Alice ; “ I       can’t remember things as    I       used — and  I\n# . K   J      ISg/#r+ NPr/VLB/J . NPr/VB+ . . VP/J NPr+  . . ISg/#r+ VXB   NSg/VB   NPl+   R/C/P ISg/#r+ VP/J . VB/C ISg/#r+\n> don’t keep   the same size     for   ten minutes together ! ”\n# VXB   NSg/VB D   I/J  N🅪Sg/VB+ R/C/P NSg NPl/V3+ J        . .\n>\n#\n> “ Can’t remember what   things ? ” said the Caterpillar .\n# . VXB   NSg/VB   NSg/I+ NPl+   . . VP/J D   NSg/VB      .\n>\n#\n> “ Well       , I’ve tried to say    “ How   doth the little     busy     bee     , ” but     it       all          came\n# . NSg/VB/J/R . K    VP/J  P  NSg/VB . NSg/C V3   D   NPr/I/J/Dq NSg/VB/J NSg/VB+ . . NSg/C/P NPr/ISg+ NSg/I/J/C/Dq NSg/VPt/P\n> different ! ” Alice replied in        a   very melancholy voice   .\n# NSg/J     . . NPr+  VP/J    NPr/J/R/P D/P J/R  NSg/J      NSg/VB+ .\n>\n#\n> “ Repeat , “ You    are old   , Father  William , ’ ” said the Caterpillar .\n# . NSg/VB . . ISgPl+ VLB NSg/J . NPr/VB+ NPr+    . . . VP/J D   NSg/VB      .\n>\n#\n> Alice folded her     hands   , and  began : —\n# NPr+  VP/J   ISg/D$+ NPl/V3+ . VB/C VPt   . .\n>\n#\n> “ You    are old   , Father  William , ” the young     man       said , “ And  your hair     has become\n# . ISgPl+ VLB NSg/J . NPr/VB+ NPr+    . . D+  NPr/VB/J+ NPr/VB/J+ VP/J . . VB/C D$+  N🅪Sg/VB+ V3  VBPp\n> very white       ; And  yet      you    incessantly stand  on  your head      — Do  you    think  , at    your\n# J/R  NPr🅪Sg/VB/J . VB/C NSg/VB/C ISgPl+ R           NSg/VB J/P D$+  NPr/VB/J+ . VXB ISgPl+ NSg/VB . NSg/P D$+\n> age      , it       is  right    ? ”\n# N🅪Sg/VB+ . NPr/ISg+ VL3 NPr/VB/J . .\n>\n#\n> “ In        my  youth , ” Father  William replied to his     son     , “ I       feared it       might    injure\n# . NPr/J/R/P D$+ NSg+  . . NPr/VB+ NPr+    VP/J    P  ISg/D$+ NPr/VB+ . . ISg/#r+ VP/J   NPr/ISg+ Nᴹ/VXB/J VB\n> the brain      ; But     , now       that          I’m perfectly sure I       have    none   , Why    , I       do  it       again\n# D+  NPr🅪Sg/VB+ . NSg/C/P . NSg/J/R/C NSg/I/C/Ddem+ K   R         J    ISg/#r+ NSg/VXB NSg/I+ . NSg/VB . ISg/#r+ VXB NPr/ISg+ P\n> and  again . ”\n# VB/C P     . .\n>\n#\n> “ You    are old   , ” said the youth , “ as    I       mentioned before , And  have    grown most\n# . ISgPl+ VLB NSg/J . . VP/J D+  NSg+  . . R/C/P ISg/#r+ VP/J      C/P    . VB/C NSg/VXB VB/J  NSg/I/J/R/Dq\n> uncommonly fat       ; Yet      you    turned a   back     - somersault in        at    the door    — Pray , what   is\n# R          N🅪Sg/VB/J . NSg/VB/C ISgPl+ VP/J   D/P NSg/VB/J . NSg/VB     NPr/J/R/P NSg/P D   NSg/VB+ . VB   . NSg/I+ VL3\n> the reason  of that          ? ”\n# D   N🅪Sg/VB P  NSg/I/C/Ddem+ . .\n>\n#\n> “ In        my  youth , ” said the sage     , as    he       shook     his     grey              locks   , “ I       kept all           my  limbs\n# . NPr/J/R/P D$+ NSg+  . . VP/J D   NSg/VB/J . R/C/P NPr/ISg+ NSg/VPt/J ISg/D$+ NPr🅪Sg/VB/J/Comm+ NPl/V3+ . . ISg/#r+ VP   NSg/I/J/C/Dq+ D$+ NPl/V3+\n> very supple By    the use     of this   ointment — one     shilling  the box     — Allow me       to sell\n# J/R  VB/J   NSg/P D   N🅪Sg/VB P  I/Ddem N🅪Sg     . NSg/I/J N🅪Sg/Vg/J D   NSg/VB+ . VB    NPr/ISg+ P  NSg/VB\n> you    a   couple    ? ”\n# ISgPl+ D/P NSg/VB/J+ . .\n>\n#\n> “ You    are old   , ” said the youth , “ and  your jaws    are too weak For   anything\n# . ISgPl+ VLB NSg/J . . VP/J D+  NSg+  . . VB/C D$+  NPl/V3+ VLB R   J    R/C/P NSg/I/VB+\n> tougher than suet ; Yet      you    finished the goose   , with the bones   and  the beak    —\n# NSg/JC  C/P  NSg  . NSg/VB/C ISgPl+ VP/J     D   NSg/VB+ . P    D   NPl/V3+ VB/C D   NSg/VB+ .\n> Pray , how   did  you    manage to do  it       ? ”\n# VB   . NSg/C VXPt ISgPl+ NSg/VB P  VXB NPr/ISg+ . .\n>\n#\n> “ In        my  youth , ” said his     father  , “ I       took to the law      , And  argued each case       with\n# . NPr/J/R/P D$+ NSg+  . . VP/J ISg/D$+ NPr/VB+ . . ISg/#r+ VPt  P  D+  N🅪Sg/VB+ . VB/C VP/J   Dq   NPr🅪Sg/VB+ P\n> my  wife      ; And  the muscular strength , which it       gave to my  jaw       , Has lasted the\n# D$+ NSg/VB/J+ . VB/C D+  J+       N🅪Sg/VB+ . I/C+  NPr/ISg+ VPt  P  D$+ NSg/VB/J+ . V3  VP/J   D\n> rest   of my  life     . ”\n# NSg/VB P  D$+ N🅪Sg/VB+ . .\n>\n#\n> “ You    are old   , ” said the youth , “ one      would hardly suppose That         your eye     was  as\n# . ISgPl+ VLB NSg/J . . VP/J D+  NSg+  . . NSg/I/J+ VXB   R      VB      NSg/I/C/Ddem D$+  NSg/VB+ VLPt R/C/P\n> steady   as    ever ; Yet      you    balanced an  eel    on  the end    of your nose    — What   made you\n# NSg/VB/J R/C/P J/R  . NSg/VB/C ISgPl+ VP/J     D/P NSg/VB J/P D   NSg/VB P  D$+  NSg/VB+ . NSg/I+ VP   ISgPl+\n> so          awfully clever ? ”\n# NSg/I/J/R/C R       J      . .\n>\n#\n> “ I       have    answered three questions , and  that          is  enough , ” Said his     father  ; “ don’t\n# . ISg/#r+ NSg/VXB VP/J     NSg+  NPl/V3+   . VB/C NSg/I/C/Ddem+ VL3 NSg/I  . . VP/J ISg/D$+ NPr/VB+ . . VXB\n> give   yourself airs   ! Do  you    think  I       can     listen all          day     to such   stuff  ? Be       off        ,\n# NSg/VB ISg+     NPl/V3 . VXB ISgPl+ NSg/VB ISg/#r+ NPr/VXB NSg/VB NSg/I/J/C/Dq NPr🅪Sg+ P  NSg/I+ Nᴹ/VB+ . NSg/VLXB NSg/VB/J/P .\n> or    I’ll kick    you    down        stairs ! ”\n# NPr/C K    NSg/VB+ ISgPl+ N🅪Sg/VB/J/P NPl+   . .\n>\n#\n> “ That          is  not     said right    , ” said the Caterpillar .\n# . NSg/I/C/Ddem+ VL3 NSg/R/C VP/J NPr/VB/J . . VP/J D   NSg/VB      .\n>\n#\n> “ Not     quite right    , I’m afraid , ” said Alice , timidly ; “ some     of the words   have    got\n# . NSg/R/C R     NPr/VB/J . K   J      . . VP/J NPr+  . R       . . I/J/R/Dq P  D   NPl/V3+ NSg/VXB VP\n> altered  . ”\n# NSg/VP/J . .\n>\n#\n> “ It       is  wrong      from beginning to end    , ” said the Caterpillar decidedly , and  there\n# . NPr/ISg+ VL3 NSg/VB/J/R P    NSg/Vg/J+ P  NSg/VB . . VP/J D   NSg/VB      R         . VB/C R+\n> was  silence for   some     minutes .\n# VLPt NSg/VB+ R/C/P I/J/R/Dq NPl/V3+ .\n>\n#\n> The Caterpillar was  the first  to speak  .\n# D   NSg/VB      VLPt D   NSg/J+ P  NSg/VB .\n>\n#\n> “ What   size     do  you    want   to be       ? ” it       asked .\n# . NSg/I+ N🅪Sg/VB+ VXB ISgPl+ NSg/VB P  NSg/VLXB . . NPr/ISg+ VP/J  .\n>\n#\n> “ Oh     , I’m not     particular as    to size    , ” Alice hastily replied ; “ only  one     doesn’t\n# . NPr/VB . K   NSg/R/C NSg/J      R/C/P P  N🅪Sg/VB . . NPr+  R       VP/J    . . J/R/C NSg/I/J VX3\n> like         changing so          often , you    know . ”\n# NSg/VB/J/C/P Nᴹ/Vg/J  NSg/I/J/R/C R     . ISgPl+ VB   . .\n>\n#\n> “ I       don’t know , ” said the Caterpillar .\n# . ISg/#r+ VXB   VB   . . VP/J D   NSg/VB      .\n>\n#\n> Alice said nothing  : she  had never been     so          much         contradicted in        her     life     before ,\n# NPr+  VP/J NSg/I/J+ . ISg+ VP  R     NSg/VLPp NSg/I/J/R/C NSg/I/J/R/Dq VP/J         NPr/J/R/P ISg/D$+ N🅪Sg/VB+ C/P    .\n> and  she  felt      that         she  was  losing  her     temper     .\n# VB/C ISg+ N🅪Sg/VP/J NSg/I/C/Ddem ISg+ VLPt Nᴹ/Vg/J ISg/D$+ NSg/VB/JC+ .\n>\n#\n> “ Are you    content    now       ? ” said the Caterpillar .\n# . VLB ISgPl+ N🅪Sg/VB/J+ NSg/J/R/C . . VP/J D   NSg/VB      .\n>\n#\n> “ Well       , I       should like         to be       a   little     larger , sir     , if    you    wouldn’t mind    , ” said\n# . NSg/VB/J/R . ISg/#r+ VXB    NSg/VB/J/C/P P  NSg/VLXB D/P NPr/I/J/Dq JC     . NPr/VB+ . NSg/C ISgPl+ VXB      NSg/VB+ . . VP/J\n> Alice : “ three inches  is  such  a   wretched height to be       . ”\n# NPr+  . . NSg   NPl/V3+ VL3 NSg/I D/P J        N🅪Sg+  P  NSg/VLXB . .\n>\n#\n> “ It       is  a   very good      height indeed ! ” said the Caterpillar angrily , rearing  itself\n# . NPr/ISg+ VL3 D/P J/R  NPr/VB/J+ N🅪Sg+  R      . . VP/J D   NSg/VB      R       . Nᴹ/Vg/J+ ISg+\n> upright  as    it       spoke   ( it       was  exactly three inches  high       ) .\n# NSg/VB/J R/C/P NPr/ISg+ NSg/VPt . NPr/ISg+ VLPt R       NSg   NPl/V3+ NSg/VB/J/R . .\n>\n#\n> “ But     I’m not     used to it       ! ” pleaded poor     Alice in        a    piteous tone       . And  she  thought\n# . NSg/C/P K   NSg/R/C VP/J P  NPr/ISg+ . . VP/J    NSg/VB/J NPr+  NPr/J/R/P D/P+ J+      N🅪Sg/I/VB+ . VB/C ISg+ N🅪Sg/VP\n> of herself , “ I       wish   the creatures wouldn’t be       so          easily offended ! ”\n# P  ISg+    . . ISg/#r+ NSg/VB D+  NPl+      VXB      NSg/VLXB NSg/I/J/R/C R      VP/J     . .\n>\n#\n> “ You’ll get    used to it       in        time       , ” said the Caterpillar ; and  it       put     the hookah\n# . K      NSg/VB VP/J P  NPr/ISg+ NPr/J/R/P N🅪Sg/VB/J+ . . VP/J D   NSg/VB      . VB/C NPr/ISg+ NSg/VBP D   NSg\n> into its     mouth   and  began smoking  again .\n# P    ISg/D$+ NSg/VB+ VB/C VPt   Nᴹ/Vg/J+ P     .\n>\n#\n> This    time       Alice waited patiently until it       chose   to speak  again . In        a    minute    or\n# I/Ddem+ N🅪Sg/VB/J+ NPr+  VP/J   R         C/P   NPr/ISg+ NSg/VPt P  NSg/VB P     . NPr/J/R/P D/P+ NSg/VB/J+ NPr/C\n> two the Caterpillar took the hookah out          of its     mouth   and  yawned once  or    twice ,\n# NSg D   NSg/VB      VPt  D   NSg    NSg/VB/J/R/P P  ISg/D$+ NSg/VB+ VB/C VP/J   NSg/C NPr/C R     .\n> and  shook     itself . Then      it       got down        off        the mushroom  , and  crawled away in        the\n# VB/C NSg/VPt/J ISg+   . NSg/J/R/C NPr/ISg+ VP  N🅪Sg/VB/J/P NSg/VB/J/P D   N🅪Sg/VB/J . VB/C VP/J    VB/J NPr/J/R/P D\n> grass      , merely remarking as    it       went    , “ One     side      will    make   you    grow taller , and  the\n# NPr🅪Sg/VB+ . R      Nᴹ/Vg/J   R/C/P NPr/ISg+ NSg/VPt . . NSg/I/J NSg/VB/J+ NPr/VXB NSg/VB ISgPl+ VB   JC     . VB/C D\n> other    side      will    make   you    grow shorter . ”\n# NSg/VB/J NSg/VB/J+ NPr/VXB NSg/VB ISgPl+ VB   NSg/JC  . .\n>\n#\n> “ One     side     of what   ? The other    side     of what   ? ” thought Alice to herself .\n# . NSg/I/J NSg/VB/J P  NSg/I+ . D   NSg/VB/J NSg/VB/J P  NSg/I+ . . N🅪Sg/VP NPr+  P  ISg+    .\n>\n#\n> “ Of the mushroom  , ” said the Caterpillar , just as    if    she  had asked it       aloud ; and\n# . P  D   N🅪Sg/VB/J . . VP/J D   NSg/VB      . J/R  R/C/P NSg/C ISg+ VP  VP/J  NPr/ISg+ J     . VB/C\n> in        another moment it       was  out          of sight    .\n# NPr/J/R/P I/D     NSg+   NPr/ISg+ VLPt NSg/VB/J/R/P P  N🅪Sg/VB+ .\n>\n#\n> Alice remained looking thoughtfully at    the mushroom  for   a   minute    , trying  to make\n# NPr+  VP/J     Nᴹ/Vg/J R            NSg/P D   N🅪Sg/VB/J R/C/P D/P NSg/VB/J+ . Nᴹ/Vg/J P  NSg/VB\n> out          which were     the two sides  of it       ; and  as    it       was  perfectly round      , she  found\n# NSg/VB/J/R/P I/C+  NSg/VLPt D   NSg NPl/V3 P  NPr/ISg+ . VB/C R/C/P NPr/ISg+ VLPt R         NSg/VB/J/P . ISg+ NSg/VP\n> this   a   very difficult question . However , at    last     she  stretched her     arms    round      it\n# I/Ddem D/P J/R  VB/J      NSg/VB+  . C       . NSg/P NSg/VB/J ISg+ VP/J      ISg/D$+ NPl/V3+ NSg/VB/J/P NPr/ISg+\n> as    far      as    they would go       , and  broke     off        a   bit     of the edge    with each hand    .\n# R/C/P NSg/VB/J R/C/P IPl+ VXB   NSg/VB/J . VB/C NSg/VPt/J NSg/VB/J/P D/P NSg/VPt P  D   NSg/VB+ P    Dq+  NSg/VB+ .\n>\n#\n> “ And  now       which is  which ? ” she  said to herself , and  nibbled a   little     of the\n# . VB/C NSg/J/R/C I/C+  VL3 I/C+  . . ISg+ VP/J P  ISg+    . VB/C VP/J    D/P NPr/I/J/Dq P  D\n> right    - hand    bit      to try      the effect  : the next    moment she  felt      a   violent  blow\n# NPr/VB/J . NSg/VB+ NSg/VPt+ P  NSg/VB/J D   NSg/VB+ . D   NSg/J/P NSg+   ISg+ N🅪Sg/VP/J D/P NSg/VB/J NSg/VB/J+\n> underneath her     chin    : it       had struck her     foot    !\n# NSg/J/P    ISg/D$+ NPr/VB+ . NPr/ISg+ VP  VB     ISg/D$+ NSg/VB+ .\n>\n#\n> She  was  a   good     deal     frightened by    this   very sudden change  , but     she  felt      that\n# ISg+ VLPt D/P NPr/VB/J NSg/VB/J VP/J       NSg/P I/Ddem J/R  NSg/J  N🅪Sg/VB . NSg/C/P ISg+ N🅪Sg/VP/J NSg/I/C/Ddem\n> there was  no       time       to be       lost , as    she  was  shrinking rapidly ; so          she  set       to work\n# R+    VLPt NSg/Dq/P N🅪Sg/VB/J+ P  NSg/VLXB VP/J . R/C/P ISg+ VLPt Nᴹ/Vg/J   R       . NSg/I/J/R/C ISg+ NPr/VBP/J P  N🅪Sg/VB\n> at    once  to eat some     of the other     bit      . Her     chin    was  pressed so          closely against\n# NSg/P NSg/C P  VB  I/J/R/Dq P  D+  NSg/VB/J+ NSg/VPt+ . ISg/D$+ NPr/VB+ VLPt VP/J    NSg/I/J/R/C R       C/P\n> her     foot    , that         there was  hardly room       to open     her     mouth   ; but     she  did  it       at    last     ,\n# ISg/D$+ NSg/VB+ . NSg/I/C/Ddem R+    VLPt R      N🅪Sg/VB/J+ P  NSg/VB/J ISg/D$+ NSg/VB+ . NSg/C/P ISg+ VXPt NPr/ISg+ NSg/P NSg/VB/J .\n> and  managed to swallow a   morsel of the lefthand bit      .\n# VB/C VP/J    P  NSg/VB  D/P NSg/VB P  D   ?        NSg/VPt+ .\n>\n#\n> “ Come       , my  head’s free     at    last     ! ” said Alice in        a   tone      of delight    , which changed\n# . NSg/VBPp/P . D$+ NPr$   NSg/VB/J NSg/P NSg/VB/J . . VP/J NPr+  NPr/J/R/P D/P N🅪Sg/I/VB P  N🅪Sg/VB/J+ . I/C+  VP/J\n> into alarm    in        another moment , when    she  found  that         her     shoulders were     nowhere to\n# P    N🅪Sg/VB+ NPr/J/R/P I/D+    NSg+   . NSg/I/C ISg+ NSg/VP NSg/I/C/Ddem ISg/D$+ NPl/V3+   NSg/VLPt NSg/J   P\n> be       found  : all          she  could   see    , when    she  looked down        , was  an  immense length  of\n# NSg/VLXB NSg/VP . NSg/I/J/C/Dq ISg+ NSg/VXB NSg/VB . NSg/I/C ISg+ VP/J   N🅪Sg/VB/J/P . VLPt D/P NSg/J   N🅪Sg/VB P\n> neck    , which seemed to rise   like         a    stalk   out          of a   sea of green        leaves  that          lay\n# NSg/VB+ . I/C+  VP/J   P  NSg/VB NSg/VB/J/C/P D/P+ NSg/VB+ NSg/VB/J/R/P P  D/P NSg P  NPr🅪Sg/VB/J+ NPl/V3+ NSg/I/C/Ddem+ NSg/VBPt/J\n> far      below her     .\n# NSg/VB/J P     ISg/D$+ .\n>\n#\n> “ What   can     all          that         green        stuff  be       ? ” said Alice . “ And  where   have    my  shoulders got\n# . NSg/I+ NPr/VXB NSg/I/J/C/Dq NSg/I/C/Ddem NPr🅪Sg/VB/J+ Nᴹ/VB+ NSg/VLXB . . VP/J NPr+  . . VB/C NSg/R/C NSg/VXB D$+ NPl/V3+   VP\n> to ? And  oh     , my  poor      hands   , how   is  it       I       can’t see    you    ? ” She  was  moving  them     about\n# P  . VB/C NPr/VB . D$+ NSg/VB/J+ NPl/V3+ . NSg/C VL3 NPr/ISg+ ISg/#r+ VXB   NSg/VB ISgPl+ . . ISg+ VLPt Nᴹ/Vg/J NSg/IPl+ J/P\n> as    she  spoke   , but     no        result  seemed to follow , except a   little     shaking  among the\n# R/C/P ISg+ NSg/VPt . NSg/C/P NSg/Dq/P+ NSg/VB+ VP/J   P  NSg/VB . VB/C/P D/P NPr/I/J/Dq Nᴹ/Vg/J+ P     D+\n> distant green        leaves  .\n# J+      NPr🅪Sg/VB/J+ NPl/V3+ .\n>\n#\n> As    there seemed to be       no       chance   of getting her     hands   up         to her     head      , she  tried\n# R/C/P R+    VP/J   P  NSg/VLXB NSg/Dq/P NPr/VB/J P  NSg/Vg  ISg/D$+ NPl/V3+ NSg/VB/J/P P  ISg/D$+ NPr/VB/J+ . ISg+ VP/J\n> to get    her     head      down        to them     , and  was  delighted to find   that         her     neck    would bend\n# P  NSg/VB ISg/D$+ NPr/VB/J+ N🅪Sg/VB/J/P P  NSg/IPl+ . VB/C VLPt VP/J      P  NSg/VB NSg/I/C/Ddem ISg/D$+ NSg/VB+ VXB   NPr/VB+\n> about easily in        any     direction , like         a    serpent . She  had just succeeded in        curving\n# J/P   R      NPr/J/R/P I/R/Dq+ N🅪Sg+     . NSg/VB/J/C/P D/P+ NSg/VB+ . ISg+ VP  J/R  VP/J      NPr/J/R/P Nᴹ/Vg/J+\n> it       down        into a   graceful zigzag   , and  was  going   to dive   in        among the leaves  , which\n# NPr/ISg+ N🅪Sg/VB/J/P P    D/P J        NSg/VB/J . VB/C VLPt Nᴹ/Vg/J P  NSg/VB NPr/J/R/P P     D   NPl/V3+ . I/C+\n> she  found  to be       nothing  but     the tops   of the trees   under   which she  had been\n# ISg+ NSg/VP P  NSg/VLXB NSg/I/J+ NSg/C/P D   NPl/V3 P  D   NPl/V3+ NSg/J/P I/C+  ISg+ VP  NSg/VLPp\n> wandering , when    a   sharp    hiss    made her     draw   back     in        a   hurry   : a   large pigeon  had\n# Nᴹ/Vg/J   . NSg/I/C D/P NPr/VB/J NSg/VB+ VP   ISg/D$+ NSg/VB NSg/VB/J NPr/J/R/P D/P NSg/VB+ . D/P NSg/J NSg/VB+ VP\n> flown into her     face    , and  was  beating her     violently with its     wings   .\n# VPp/J P    ISg/D$+ NSg/VB+ . VB/C VLPt Nᴹ/Vg/J ISg/D$+ R         P    ISg/D$+ NPl/V3+ .\n>\n#\n> “ Serpent ! ” screamed the Pigeon  .\n# . NSg/VB+ . . VP/J     D+  NSg/VB+ .\n>\n#\n> “ I’m not     a   serpent ! ” said Alice indignantly . “ Let     me       alone ! ”\n# . K   NSg/R/C D/P NSg/VB+ . . VP/J NPr+  R           . . NSg/VBP NPr/ISg+ J     . .\n>\n#\n> “ Serpent , I       say    again ! ” repeated the Pigeon  , but     in        a   more         subdued tone      , and\n# . NSg/VB+ . ISg/#r+ NSg/VB P     . . VP/J     D+  NSg/VB+ . NSg/C/P NPr/J/R/P D/P NPr/I/J/R/Dq VP/J+   N🅪Sg/I/VB . VB/C\n> added with a   kind   of sob    , “ I’ve tried every way    , and  nothing  seems to suit\n# VP/J  P    D/P NSg/J+ P  NSg/VB . . K    VP/J  Dq    NSg/J+ . VB/C NSg/I/J+ V3    P  NSg/VB\n> them     ! ”\n# NSg/IPl+ . .\n>\n#\n> “ I       haven’t the least    idea what   you’re talking about , ” said Alice .\n# . ISg/#r+ VXB     D   NSg/J/Dq NSg+ NSg/I+ K      Nᴹ/Vg/J J/P   . . VP/J NPr+  .\n>\n#\n> “ I’ve tried the roots  of trees   , and  I’ve tried banks     , and  I’ve tried hedges , ”\n# . K    VP/J  D   NPl/V3 P  NPl/V3+ . VB/C K    VP/J  NPrPl/V3+ . VB/C K    VP/J  NPl/V3 . .\n> the Pigeon  went    on  , without attending to her     ; “ but     those  serpents ! There’s no\n# D   NSg/VB+ NSg/VPt J/P . C/P     Nᴹ/Vg/J   P  ISg/D$+ . . NSg/C/P I/Ddem NPl/V3   . K       NSg/Dq/P\n> pleasing them     ! ”\n# Nᴹ/Vg/J  NSg/IPl+ . .\n>\n#\n> Alice was  more         and  more         puzzled , but     she  thought there was  no       use     in        saying\n# NPr+  VLPt NPr/I/J/R/Dq VB/C NPr/I/J/R/Dq VP/J    . NSg/C/P ISg+ N🅪Sg/VP R+    VLPt NSg/Dq/P N🅪Sg/VB NPr/J/R/P N🅪Sg/Vg/J\n> anything  more         till       the Pigeon  had finished .\n# NSg/I/VB+ NPr/I/J/R/Dq NSg/VB/C/P D+  NSg/VB+ VP  VP/J     .\n>\n#\n> “ As    if    it       wasn’t trouble  enough hatching the eggs    , ” said the Pigeon  ; “ but     I       must\n# . R/C/P NSg/C NPr/ISg+ VPt    N🅪Sg/VB+ NSg/I  Nᴹ/Vg/J  D   NPl/V3+ . . VP/J D   NSg/VB+ . . NSg/C/P ISg/#r+ NSg/VXB\n> be       on  the look    - out          for   serpents night   and  day     ! Why    , I       haven’t had a   wink   of\n# NSg/VLXB J/P D   NSg/VB+ . NSg/VB/J/R/P R/C/P NPl/V3   N🅪Sg/VB VB/C NPr🅪Sg+ . NSg/VB . ISg/#r+ VXB     VP  D/P NSg/VB P\n> sleep    these  three weeks  ! ”\n# N🅪Sg/VB+ I/Ddem NSg   NPrPl+ . .\n>\n#\n> “ I’m very sorry    you’ve been     annoyed , ” said Alice , who    was  beginning to see    its\n# . K   J/R  NSg/VB/J K      NSg/VLPp VP/J    . . VP/J NPr+  . NPr/I+ VLPt NSg/Vg/J+ P  NSg/VB ISg/D$+\n> meaning    .\n# N🅪Sg/Vg/J+ .\n>\n#\n> “ And  just as    I’d taken the highest tree    in        the wood         , ” continued the Pigeon  ,\n# . VB/C J/R  R/C/P K   VPp/J D   JS      NSg/VB+ NPr/J/R/P D   NPr🅪Sg/VB/J+ . . VP/J      D   NSg/VB+ .\n> raising its     voice   to a   shriek , “ and  just as    I       was  thinking I       should be       free     of\n# Nᴹ/Vg/J ISg/D$+ NSg/VB+ P  D/P NSg/VB . . VB/C J/R  R/C/P ISg/#r+ VLPt Nᴹ/Vg/J  ISg/#r+ VXB    NSg/VLXB NSg/VB/J P\n> them     at    last     , they must    needs  come       wriggling down        from the sky      ! Ugh , Serpent ! ”\n# NSg/IPl+ NSg/P NSg/VB/J . IPl+ NSg/VXB NPl/V3 NSg/VBPp/P Nᴹ/Vg/J   N🅪Sg/VB/J/P P    D   N🅪Sg/VB+ . W?  . NSg/VB+ . .\n>\n#\n> “ But     I’m not     a   serpent , I       tell   you    ! ” said Alice . “ I’m a   — I’m a   — ”\n# . NSg/C/P K   NSg/R/C D/P NSg/VB+ . ISg/#r+ NPr/VB ISgPl+ . . VP/J NPr+  . . K   D/P . K   D/P . .\n>\n#\n> “ Well       ! What   are you    ? ” said the Pigeon  . “ I       can     see    you’re trying  to invent\n# . NSg/VB/J/R . NSg/I+ VLB ISgPl+ . . VP/J D+  NSg/VB+ . . ISg/#r+ NPr/VXB NSg/VB K      Nᴹ/Vg/J P  VB\n> something ! ”\n# NSg/I/J+  . .\n>\n#\n> “ I       — I’m a    little     girl    , ” said Alice , rather     doubtfully , as    she  remembered the\n# . ISg/#r+ . K   D/P+ NPr/I/J/Dq NSg/VB+ . . VP/J NPr+  . NPr/VB/J/R R          . R/C/P ISg+ VP/J       D\n> number     of changes she  had gone    through that         day     .\n# N🅪Sg/VB/JC P  NPl/V3+ ISg+ VP  VPp/J/P NSg/J/P NSg/I/C/Ddem NPr🅪Sg+ .\n>\n#\n> “ A    likely story   indeed ! ” said the Pigeon  in        a   tone      of the deepest contempt .\n# . D/P+ NSg/J+ NSg/VB+ R      . . VP/J D+  NSg/VB+ NPr/J/R/P D/P N🅪Sg/I/VB P  D+  JS+     Nᴹ+      .\n> “ I’ve seen    a   good     many       little     girls   in        my  time       , but     never one     with such  a   neck\n# . K    NSg/VPp D/P NPr/VB/J NSg/I/J/Dq NPr/I/J/Dq NPl/V3+ NPr/J/R/P D$+ N🅪Sg/VB/J+ . NSg/C/P R     NSg/I/J P    NSg/I D/P NSg/VB+\n> as    that          ! No       , no       ! You’re a    serpent ; and  there’s no       use     denying it       . I       suppose\n# R/C/P NSg/I/C/Ddem+ . NSg/Dq/P . NSg/Dq/P . K      D/P+ NSg/VB+ . VB/C K       NSg/Dq/P N🅪Sg/VB Nᴹ/Vg/J NPr/ISg+ . ISg/#r+ VB\n> you’ll be       telling me       next    that         you    never tasted an  egg      ! ”\n# K      NSg/VLXB Nᴹ/Vg/J NPr/ISg+ NSg/J/P NSg/I/C/Ddem ISgPl+ R     VP/J   D/P N🅪Sg/VB+ . .\n>\n#\n> “ I       have    tasted eggs    , certainly , ” said Alice , who    was  a   very truthful child   ; “ but\n# . ISg/#r+ NSg/VXB VP/J   NPl/V3+ . R         . . VP/J NPr+  . NPr/I+ VLPt D/P J/R  J        NSg/VB+ . . NSg/C/P\n> little     girls   eat eggs    quite as    much         as    serpents do  , you    know . ”\n# NPr/I/J/Dq NPl/V3+ VB  NPl/V3+ R     R/C/P NSg/I/J/R/Dq R/C/P NPl/V3   VXB . ISgPl+ VB   . .\n>\n#\n> “ I       don’t believe it       , ” said the Pigeon  ; “ but     if    they do  , why    then      they’re a   kind\n# . ISg/#r+ VXB   VB      NPr/ISg+ . . VP/J D   NSg/VB+ . . NSg/C/P NSg/C IPl+ VXB . NSg/VB NSg/J/R/C K       D/P NSg/J\n> of serpent , that’s all          I       can     say    . ”\n# P  NSg/VB+ . NSg$   NSg/I/J/C/Dq ISg/#r+ NPr/VXB NSg/VB . .\n>\n#\n> This    was  such  a   new   idea to Alice , that         she  was  quite silent for   a    minute    or\n# I/Ddem+ VLPt NSg/I D/P NSg/J NSg  P  NPr+  . NSg/I/C/Ddem ISg+ VLPt R     NSg/J  R/C/P D/P+ NSg/VB/J+ NPr/C\n> two , which gave the Pigeon  the opportunity of adding   , “ You’re looking for   eggs    ,\n# NSg . I/C+  VPt  D   NSg/VB+ D   N🅪Sg        P  Nᴹ/Vg/J+ . . K      Nᴹ/Vg/J R/C/P NPl/V3+ .\n> I       know that         well       enough ; and  what   does    it       matter   to me       whether you’re a   little\n# ISg/#r+ VB   NSg/I/C/Ddem NSg/VB/J/R NSg/I  . VB/C NSg/I+ NPl/VX3 NPr/ISg+ N🅪Sg/VB+ P  NPr/ISg+ I/C     K      D/P NPr/I/J/Dq\n> girl   or    a   serpent ? ”\n# NSg/VB NPr/C D/P NSg/VB+ . .\n>\n#\n> “ It       matters a    good      deal      to me       , ” said Alice hastily ; “ but     I’m not     looking for\n# . NPr/ISg+ NPl/V3  D/P+ NPr/VB/J+ NSg/VB/J+ P  NPr/ISg+ . . VP/J NPr+  R       . . NSg/C/P K   NSg/R/C Nᴹ/Vg/J R/C/P\n> eggs    , as    it       happens ; and  if    I       was  , I       shouldn’t want   yours : I       don’t like         them\n# NPl/V3+ . R/C/P NPr/ISg+ V3      . VB/C NSg/C ISg/#r+ VLPt . ISg/#r+ VXB       NSg/VB I+    . ISg/#r+ VXB   NSg/VB/J/C/P NSg/IPl+\n> raw      . ”\n# NSg/VB/J . .\n>\n#\n> “ Well       , be       off        , then      ! ” said the Pigeon  in        a    sulky  tone       , as    it       settled down        again\n# . NSg/VB/J/R . NSg/VLXB NSg/VB/J/P . NSg/J/R/C . . VP/J D   NSg/VB+ NPr/J/R/P D/P+ NSg/J+ N🅪Sg/I/VB+ . R/C/P NPr/ISg+ VP/J    N🅪Sg/VB/J/P P\n> into its     nest       . Alice crouched down        among the trees   as    well       as    she  could   , for   her\n# P    ISg/D$+ NSg/VB/JS+ . NPr+  VP/J     N🅪Sg/VB/J/P P     D+  NPl/V3+ R/C/P NSg/VB/J/R R/C/P ISg+ NSg/VXB . R/C/P ISg/D$+\n> neck    kept getting entangled among the branches , and  every now       and  then      she  had\n# NSg/VB+ VP   NSg/Vg  VP/J      P     D   NPl/V3+  . VB/C Dq    NSg/J/R/C VB/C NSg/J/R/C ISg+ VP\n> to stop   and  untwist it       . After a    while       she  remembered that         she  still      held the\n# P  NSg/VB VB/C NSg/VB  NPr/ISg+ . P     D/P+ NSg/VB/C/P+ ISg+ VP/J       NSg/I/C/Ddem ISg+ NSg/VB/J/R VP   D\n> pieces of mushroom  in        her     hands   , and  she  set       to work    very carefully , nibbling\n# NPl/V3 P  N🅪Sg/VB/J NPr/J/R/P ISg/D$+ NPl/V3+ . VB/C ISg+ NPr/VBP/J P  N🅪Sg/VB J/R  R         . Nᴹ/Vg/J\n> first at    one     and  then      at    the other    , and  growing sometimes taller and  sometimes\n# NSg/J NSg/P NSg/I/J VB/C NSg/J/R/C NSg/P D   NSg/VB/J . VB/C Nᴹ/Vg/J R         JC     VB/C R\n> shorter , until she  had succeeded in        bringing herself down        to her     usual height .\n# NSg/JC  . C/P   ISg+ VP  VP/J      NPr/J/R/P Nᴹ/Vg/J  ISg+    N🅪Sg/VB/J/P P  ISg/D$+ NSg/J N🅪Sg+  .\n>\n#\n> It       was  so          long     since she  had been     anything  near       the right     size     , that         it       felt\n# NPr/ISg+ VLPt NSg/I/J/R/C NPr/VB/J C/P   ISg+ VP  NSg/VLPp NSg/I/VB+ NSg/VB/J/P D+  NPr/VB/J+ N🅪Sg/VB+ . NSg/I/C/Ddem NPr/ISg+ N🅪Sg/VP/J\n> quite strange  at    first ; but     she  got used to it       in        a    few       minutes , and  began\n# R     NSg/VB/J NSg/P NSg/J . NSg/C/P ISg+ VP  VP/J P  NPr/ISg+ NPr/J/R/P D/P+ NSg/I/Dq+ NPl/V3+ . VB/C VPt\n> talking to herself , as    usual . “ Come       , there’s half      my  plan    done      now       ! How   puzzling\n# Nᴹ/Vg/J P  ISg+    . R/C/P NSg/J . . NSg/VBPp/P . K       N🅪Sg/J/P+ D$+ NSg/VB+ NSg/VPp/J NSg/J/R/C . NSg/C Nᴹ/Vg/J\n> all           these   changes are ! I’m never sure what   I’m going   to be       , from one     minute    to\n# NSg/I/J/C/Dq+ I/Ddem+ NPl/V3+ VLB . K   R     J    NSg/I+ K   Nᴹ/Vg/J P  NSg/VLXB . P    NSg/I/J NSg/VB/J+ P\n> another ! However , I’ve got back     to my  right    size     : the next    thing is  , to get    into\n# I/D     . C       . K    VP  NSg/VB/J P  D$+ NPr/VB/J N🅪Sg/VB+ . D   NSg/J/P NSg+  VL3 . P  NSg/VB P\n> that         beautiful garden    — how   is  that          to be       done      , I       wonder  ? ” As    she  said this    , she\n# NSg/I/C/Ddem NSg/J     NSg/VB/J+ . NSg/C VL3 NSg/I/C/Ddem+ P  NSg/VLXB NSg/VPp/J . ISg/#r+ N🅪Sg/VB . . R/C/P ISg+ VP/J I/Ddem+ . ISg+\n> came      suddenly upon an   open      place    , with a   little     house   in        it       about four feet\n# NSg/VPt/P R        P    D/P+ NSg/VB/J+ N🅪Sg/VB+ . P    D/P NPr/I/J/Dq NPr/VB+ NPr/J/R/P NPr/ISg+ J/P   NSg+ NPl+\n> high       . “ Whoever lives there , ” thought Alice , “ it’ll never do  to come       upon them\n# NSg/VB/J/R . . I+      V3+   R     . . N🅪Sg/VP NPr+  . . K     R     VXB P  NSg/VBPp/P P    NSg/IPl+\n> this   size     : why    , I       should frighten them     out          of their wits   ! ” So          she  began nibbling\n# I/Ddem N🅪Sg/VB+ . NSg/VB . ISg/#r+ VXB    VB       NSg/IPl+ NSg/VB/J/R/P P  D$+   NPl/V3 . . NSg/I/J/R/C ISg+ VPt   Nᴹ/Vg/J\n> at    the righthand bit      again , and  did  not     venture to go       near       the house   till       she\n# NSg/P D   ?         NSg/VPt+ P     . VB/C VXPt NSg/R/C NSg/VB+ P  NSg/VB/J NSg/VB/J/P D   NPr/VB+ NSg/VB/C/P ISg+\n> had brought herself down        to nine inches  high       .\n# VP  VP      ISg+    N🅪Sg/VB/J/P P  NSg  NPl/V3+ NSg/VB/J/R .\n>\n#\n>              CHAPTER VI     : Pig    and  Pepper\n# HeadingStart NSg/VB+ NPr/#r . NSg/VB VB/C N🅪Sg/VB+\n>\n#\n> For   a    minute    or    two she  stood looking at    the house   , and  wondering what   to do\n# R/C/P D/P+ NSg/VB/J+ NPr/C NSg ISg+ VP    Nᴹ/Vg/J NSg/P D+  NPr/VB+ . VB/C Nᴹ/Vg/J   NSg/I+ P  VXB\n> next    , when    suddenly a   footman in        livery   came      running   out          of the wood         — ( she\n# NSg/J/P . NSg/I/C R        D/P NSg     NPr/J/R/P NSg/VB/J NSg/VPt/P Nᴹ/Vg/J/P NSg/VB/J/R/P P  D   NPr🅪Sg/VB/J+ . . ISg+\n> considered him  to be       a   footman because he       was  in        livery   : otherwise , judging by\n# VP/J       ISg+ P  NSg/VLXB D/P NSg     C/P     NPr/ISg+ VLPt NPr/J/R/P NSg/VB/J . J/R       . Nᴹ/Vg/J NSg/P\n> his     face    only  , she  would have    called him  a   fish       ) — and  rapped loudly at    the door\n# ISg/D$+ NSg/VB+ J/R/C . ISg+ VXB   NSg/VXB VP/J   ISg+ D/P N🅪SgPl/VB+ . . VB/C VP     R      NSg/P D   NSg/VB+\n> with his     knuckles . It       was  opened by    another footman in        livery   , with a   round\n# P    ISg/D$+ NPl/V3   . NPr/ISg+ VLPt VP/J   NSg/P I/D     NSg     NPr/J/R/P NSg/VB/J . P    D/P NSg/VB/J/P\n> face    , and  large eyes    like         a   frog   ; and  both   footmen , Alice noticed , had powdered\n# NSg/VB+ . VB/C NSg/J NPl/V3+ NSg/VB/J/C/P D/P NSg/VB . VB/C I/C/Dq NPl     . NPr+  VP/J    . VP  VP/J\n> hair     that          curled all          over    their heads   . She  felt      very curious to know what   it       was\n# N🅪Sg/VB+ NSg/I/C/Ddem+ VP/J   NSg/I/J/C/Dq NSg/J/P D$+   NPl/V3+ . ISg+ N🅪Sg/VP/J J/R  J       P  VB   NSg/I+ NPr/ISg+ VLPt\n> all          about , and  crept a   little      way    out          of the wood         to listen .\n# NSg/I/J/C/Dq J/P   . VB/C VP    D/P NPr/I/J/Dq+ NSg/J+ NSg/VB/J/R/P P  D+  NPr🅪Sg/VB/J+ P  NSg/VB .\n>\n#\n> The Fish       - Footman began by    producing from under   his     arm      a   great letter  , nearly as\n# D+  N🅪SgPl/VB+ . NSg     VPt   NSg/P Nᴹ/Vg/J   P    NSg/J/P ISg/D$+ NSg/VB/J D/P NSg/J NSg/VB+ . R      R/C/P\n> large as    himself , and  this   he       handed over    to the other    , saying    , in        a   solemn\n# NSg/J R/C/P ISg+    . VB/C I/Ddem NPr/ISg+ VP/J   NSg/J/P P  D   NSg/VB/J . N🅪Sg/Vg/J . NPr/J/R/P D/P J\n> tone       , “ For   the Duchess . An  invitation from the Queen     to play    croquet . ” The\n# N🅪Sg/I/VB+ . . R/C/P D   NSg/VB  . D/P NSg+       P    D+  NPr/VB/J+ P  N🅪Sg/VB NSg/VB  . . D\n> Frog   - Footman repeated , in        the same solemn tone       , only  changing the order   of the\n# NSg/VB . NSg     VP/J     . NPr/J/R/P D   I/J  J      N🅪Sg/I/VB+ . J/R/C Nᴹ/Vg/J  D   N🅪Sg/VB P  D\n> words   a   little     , “ From the Queen     . An   invitation for   the Duchess to play    croquet . ”\n# NPl/V3+ D/P NPr/I/J/Dq . . P    D   NPr/VB/J+ . D/P+ NSg+       R/C/P D   NSg/VB  P  N🅪Sg/VB NSg/VB  . .\n>\n#\n> Then      they both   bowed low        , and  their curls  got entangled together .\n# NSg/J/R/C IPl+ I/C/Dq VP/J  NSg/VB/J/R . VB/C D$+   NPl/V3 VP  VP/J      J        .\n>\n#\n> Alice laughed so          much         at    this    , that         she  had to run      back     into the wood        for   fear\n# NPr+  VP/J    NSg/I/J/R/C NSg/I/J/R/Dq NSg/P I/Ddem+ . NSg/I/C/Ddem ISg+ VP  P  NSg/VBPp NSg/VB/J P    D   NPr🅪Sg/VB/J R/C/P N🅪Sg/VB\n> of their hearing  her     ; and  when    she  next    peeped out          the Fish       - Footman was  gone    ,\n# P  D$+   Nᴹ/Vg/J+ ISg/D$+ . VB/C NSg/I/C ISg+ NSg/J/P VP/J   NSg/VB/J/R/P D+  N🅪SgPl/VB+ . NSg     VLPt VPp/J/P .\n> and  the other    was  sitting  on  the ground     near       the door    , staring stupidly up         into\n# VB/C D   NSg/VB/J VLPt NSg/Vg/J J/P D   N🅪Sg/VB/J+ NSg/VB/J/P D   NSg/VB+ . Nᴹ/Vg/J R        NSg/VB/J/P P\n> the sky      .\n# D   N🅪Sg/VB+ .\n>\n#\n> Alice went    timidly up         to the door    , and  knocked .\n# NPr+  NSg/VPt R       NSg/VB/J/P P  D   NSg/VB+ . VB/C VP/J    .\n>\n#\n> “ There’s no       sort   of use     in        knocking , ” said the Footman , “ and  that          for   two\n# . K       NSg/Dq/P NSg/VB P  N🅪Sg/VB NPr/J/R/P Nᴹ/Vg/J+ . . VP/J D   NSg     . . VB/C NSg/I/C/Ddem+ R/C/P NSg\n> reasons . First , because I’m on  the same side     of the door    as    you    are ; secondly ,\n# NPl/V3+ . NSg/J . C/P     K   J/P D   I/J  NSg/VB/J P  D   NSg/VB+ R/C/P ISgPl+ VLB . R        .\n> because they’re making  such  a   noise    inside  , no       one      could   possibly hear you    . ” And\n# C/P     K       Nᴹ/Vg/J NSg/I D/P N🅪Sg/VB+ NSg/J/P . NSg/Dq/P NSg/I/J+ NSg/VXB R        VB   ISgPl+ . . VB/C\n> certainly there was  a   most         extraordinary noise   going   on  within  — a   constant\n# R         R+    VLPt D/P NSg/I/J/R/Dq NSg/J         N🅪Sg/VB Nᴹ/Vg/J J/P NSg/J/P . D/P NSg/J\n> howling and  sneezing , and  every now       and  then      a   great crash     , as    if    a   dish    or\n# Nᴹ/Vg/J VB/C Nᴹ/Vg/J  . VB/C Dq    NSg/J/R/C VB/C NSg/J/R/C D/P NSg/J NSg/VB/J+ . R/C/P NSg/C D/P NSg/VB+ NPr/C\n> kettle had been     broken to pieces .\n# NSg/VB VP  NSg/VLPp VPp/J  P  NPl/V3 .\n>\n#\n> “ Please , then      , ” said Alice , “ how   am        I       to get    in        ? ”\n# . VB     . NSg/J/R/C . . VP/J NPr+  . . NSg/C NPr/VLB/J ISg/#r+ P  NSg/VB NPr/J/R/P . .\n>\n#\n> “ There might    be       some     sense   in        your knocking , ” the Footman went    on  without\n# . R+    Nᴹ/VXB/J NSg/VLXB I/J/R/Dq N🅪Sg/VB NPr/J/R/P D$+  Nᴹ/Vg/J  . . D   NSg     NSg/VPt J/P C/P\n> attending to her     , “ if    we   had the door    between us       . For   instance , if    you    were\n# Nᴹ/Vg/J   P  ISg/D$+ . . NSg/C IPl+ VP  D   NSg/VB+ NSg/P   NPr/IPl+ . R/C/P NSg/VB+  . NSg/C ISgPl+ NSg/VLPt\n> inside  , you    might    knock  , and  I       could   let     you    out          , you    know . ” He       was  looking up\n# NSg/J/P . ISgPl+ Nᴹ/VXB/J NSg/VB . VB/C ISg/#r+ NSg/VXB NSg/VBP ISgPl+ NSg/VB/J/R/P . ISgPl+ VB   . . NPr/ISg+ VLPt Nᴹ/Vg/J NSg/VB/J/P\n> into the sky      all           the time       he       was  speaking , and  this    Alice thought decidedly\n# P    D+  N🅪Sg/VB+ NSg/I/J/C/Dq+ D+  N🅪Sg/VB/J+ NPr/ISg+ VLPt Nᴹ/Vg/J  . VB/C I/Ddem+ NPr+  N🅪Sg/VP R\n> uncivil . “ But     perhaps he       can’t help   it       , ” she  said to herself ; “ his     eyes    are so\n# J       . . NSg/C/P NSg/R   NPr/ISg+ VXB   NSg/VB NPr/ISg+ . . ISg+ VP/J P  ISg+    . . ISg/D$+ NPl/V3+ VLB NSg/I/J/R/C\n> very nearly at    the top      of his     head      . But     at    any     rate    he       might    answer\n# J/R  R      NSg/P D   NSg/VB/J P  ISg/D$+ NPr/VB/J+ . NSg/C/P NSg/P I/R/Dq+ NSg/VB+ NPr/ISg+ Nᴹ/VXB/J NSg/VB+\n> questions . — How   am        I       to get    in        ? ” she  repeated , aloud .\n# NPl/V3+   . . NSg/C NPr/VLB/J ISg/#r+ P  NSg/VB NPr/J/R/P . . ISg+ VP/J     . J     .\n>\n#\n> “ I       shall sit    here , ” the Footman remarked , “ till       tomorrow — ”\n# . ISg/#r+ VXB   NSg/VB J/R  . . D   NSg     VP/J     . . NSg/VB/C/P NSg+     . .\n>\n#\n> At    this    moment the door   of the house   opened , and  a    large  plate   came      skimming\n# NSg/P I/Ddem+ NSg+   D   NSg/VB P  D+  NPr/VB+ VP/J   . VB/C D/P+ NSg/J+ NSg/VB+ NSg/VPt/P NSg/Vg\n> out          , straight   at    the Footman’s head      : it       just grazed his     nose    , and  broke     to\n# NSg/VB/J/R/P . NSg/VB/J/R NSg/P D   NSg$      NPr/VB/J+ . NPr/ISg+ J/R  VP/J   ISg/D$+ NSg/VB+ . VB/C NSg/VPt/J P\n> pieces against one     of the trees   behind  him  .\n# NPl/V3 C/P     NSg/I/J P  D   NPl/V3+ NSg/J/P ISg+ .\n>\n#\n> “ — or    next     day     , maybe   , ” the Footman continued in        the same tone       , exactly as    if\n# . . NPr/C NSg/J/P+ NPr🅪Sg+ . NSg/J/R . . D   NSg     VP/J      NPr/J/R/P D   I/J  N🅪Sg/I/VB+ . R       R/C/P NSg/C\n> nothing  had happened .\n# NSg/I/J+ VP  VP/J     .\n>\n#\n> “ How   am        I       to get    in        ? ” asked Alice again , in        a    louder tone       .\n# . NSg/C NPr/VLB/J ISg/#r+ P  NSg/VB NPr/J/R/P . . VP/J  NPr+  P     . NPr/J/R/P D/P+ JC+    N🅪Sg/I/VB+ .\n>\n#\n> “ Are you    to get    in        at    all          ? ” said the Footman . “ That’s the first question , you\n# . VLB ISgPl+ P  NSg/VB NPr/J/R/P NSg/P NSg/I/J/C/Dq . . VP/J D   NSg     . . NSg$   D+  NSg/J NSg/VB+  . ISgPl+\n> know . ”\n# VB   . .\n>\n#\n> It       was  , no       doubt    : only  Alice did  not     like         to be       told so          . “ It’s really dreadful , ”\n# NPr/ISg+ VLPt . NSg/Dq/P N🅪Sg/VB+ . J/R/C NPr+  VXPt NSg/R/C NSg/VB/J/C/P P  NSg/VLXB VP   NSg/I/J/R/C . . K    R      NSg/J    . .\n> she  muttered to herself , “ the way    all          the creatures argue . It’s enough to drive\n# ISg+ VP/J     P  ISg+    . . D   NSg/J+ NSg/I/J/C/Dq D   NPl+      VB    . K    NSg/I  P  N🅪Sg/VB\n> one     crazy ! ”\n# NSg/I/J NSg/J . .\n>\n#\n> The Footman seemed to think  this   a   good     opportunity for   repeating his     remark  ,\n# D   NSg     VP/J   P  NSg/VB I/Ddem D/P NPr/VB/J N🅪Sg+       R/C/P Nᴹ/Vg/J   ISg/D$+ NSg/VB+ .\n> with variations . “ I       shall sit    here , ” he       said , “ on  and  off        , for   days and  days . ”\n# P    NPl        . . ISg/#r+ VXB   NSg/VB J/R  . . NPr/ISg+ VP/J . . J/P VB/C NSg/VB/J/P . R/C/P NPl  VB/C NPl+ . .\n>\n#\n> “ But     what   am        I       to do  ? ” said Alice .\n# . NSg/C/P NSg/I+ NPr/VLB/J ISg/#r+ P  VXB . . VP/J NPr+  .\n>\n#\n> “ Anything  you    like         , ” said the Footman , and  began whistling .\n# . NSg/I/VB+ ISgPl+ NSg/VB/J/C/P . . VP/J D   NSg     . VB/C VPt   Nᴹ/Vg/J   .\n>\n#\n> “ Oh     , there’s no       use     in        talking  to him  , ” said Alice desperately : “ he’s perfectly\n# . NPr/VB . K       NSg/Dq/P N🅪Sg/VB NPr/J/R/P Nᴹ/Vg/J+ P  ISg+ . . VP/J NPr+  R           . . NPr$ R\n> idiotic ! ” And  she  opened the door    and  went    in        .\n# J       . . VB/C ISg+ VP/J   D+  NSg/VB+ VB/C NSg/VPt NPr/J/R/P .\n>\n#\n> The door    led      right    into a    large  kitchen , which was  full     of smoke    from one      end     to\n# D+  NSg/VB+ NSg/VP/J NPr/VB/J P    D/P+ NSg/J+ NSg/VB+ . I/C+  VLPt NSg/VB/J P  N🅪Sg/VB+ P    NSg/I/J+ NSg/VB+ P\n> the other    : the Duchess was  sitting  on  a   three - legged   stool  in        the middle   ,\n# D   NSg/VB/J . D   NSg/VB  VLPt NSg/Vg/J J/P D/P NSg   . NSg/VP/J NSg/VB NPr/J/R/P D   NSg/VB/J .\n> nursing a   baby      ; the cook    was  leaning over    the fire       , stirring a   large cauldron\n# Nᴹ/Vg/J D/P NSg/VB/J+ . D   NPr/VB+ VLPt Nᴹ/Vg/J NSg/J/P D   N🅪Sg/VB/J+ . NSg/Vg/J D/P NSg/J NSg+\n> which seemed to be       full     of soup     .\n# I/C+  VP/J   P  NSg/VLXB NSg/VB/J P  N🅪Sg/VB+ .\n>\n#\n> “ There’s certainly too much         pepper   in        that         soup     ! ” Alice said to herself , as    well\n# . K       R         R   NSg/I/J/R/Dq N🅪Sg/VB+ NPr/J/R/P NSg/I/C/Ddem N🅪Sg/VB+ . . NPr+  VP/J P  ISg+    . R/C/P NSg/VB/J/R\n> as    she  could   for   sneezing .\n# R/C/P ISg+ NSg/VXB R/C/P Nᴹ/Vg/J  .\n>\n#\n> There was  certainly too much         of it       in        the air      . Even       the Duchess sneezed\n# R+    VLPt R         R   NSg/I/J/R/Dq P  NPr/ISg+ NPr/J/R/P D+  N🅪Sg/VB+ . NSg/VB/J/R D   NSg/VB  VP/J\n> occasionally ; and  as    for   the baby      , it       was  sneezing and  howling alternately\n# R            . VB/C R/C/P R/C/P D   NSg/VB/J+ . NPr/ISg+ VLPt Nᴹ/Vg/J  VB/C Nᴹ/Vg/J R\n> without a   moment’s pause   . The only  things in        the kitchen that          did  not     sneeze ,\n# C/P     D/P NSg$     NSg/VB+ . D   J/R/C NPl+   NPr/J/R/P D+  NSg/VB+ NSg/I/C/Ddem+ VXPt NSg/R/C NSg/VB .\n> were     the cook    , and  a    large  cat       which was  sitting  on  the hearth and  grinning from\n# NSg/VLPt D+  NPr/VB+ . VB/C D/P+ NSg/J+ NSg/VB/J+ I/C+  VLPt NSg/Vg/J J/P D   NSg    VB/C NSg/Vg   P\n> ear       to ear      .\n# NSg/VB/J+ P  NSg/VB/J .\n>\n#\n> “ Please would you    tell   me       , ” said Alice , a   little     timidly , for   she  was  not     quite\n# . VB     VXB   ISgPl+ NPr/VB NPr/ISg+ . . VP/J NPr+  . D/P NPr/I/J/Dq R       . R/C/P ISg+ VLPt NSg/R/C R\n> sure whether it       was  good     manners for   her     to speak  first , “ why    your cat       grins\n# J    I/C     NPr/ISg+ VLPt NPr/VB/J NPl+    R/C/P ISg/D$+ P  NSg/VB NSg/J . . NSg/VB D$+  NSg/VB/J+ NPl/V3\n> like         that          ? ”\n# NSg/VB/J/C/P NSg/I/C/Ddem+ . .\n>\n#\n> “ It’s a   Cheshire cat       , ” said the Duchess , “ and  that’s why    . Pig     ! ”\n# . K    D/P NPr      NSg/VB/J+ . . VP/J D   NSg/VB  . . VB/C NSg$   NSg/VB . NSg/VB+ . .\n>\n#\n> She  said the last     word   with such   sudden violence that          Alice quite jumped ; but\n# ISg+ VP/J D   NSg/VB/J NSg/VB P    NSg/I+ NSg/J+ Nᴹ/VB+   NSg/I/C/Ddem+ NPr+  R     VP/J   . NSg/C/P\n> she  saw     in        another moment that          it       was  addressed to the baby      , and  not     to her     , so\n# ISg+ NSg/VPt NPr/J/R/P I/D+    NSg+   NSg/I/C/Ddem+ NPr/ISg+ VLPt VP/J      P  D+  NSg/VB/J+ . VB/C NSg/R/C P  ISg/D$+ . NSg/I/J/R/C\n> she  took courage , and  went    on  again : —\n# ISg+ VPt  NSg/VB+ . VB/C NSg/VPt J/P P     . .\n>\n#\n> “ I       didn’t know that         Cheshire cats    always grinned ; in        fact , I       didn’t know that\n# . ISg/#r+ VXPt   VB   NSg/I/C/Ddem NPr      NPl/V3+ R      VP      . NPr/J/R/P NSg+ . ISg/#r+ VXPt   VB   NSg/I/C/Ddem\n> cats    could   grin    . ”\n# NPl/V3+ NSg/VXB NSg/VB+ . .\n>\n#\n> “ They all          can     , ” said the Duchess ; “ and  most         of ’ em       do  . ”\n# . IPl+ NSg/I/J/C/Dq NPr/VXB . . VP/J D   NSg/VB  . . VB/C NSg/I/J/R/Dq P  . NSg/I/J+ VXB . .\n>\n#\n> “ I       don’t know of any    that          do  , ” Alice said very politely , feeling   quite pleased\n# . ISg/#r+ VXB   VB   P  I/R/Dq NSg/I/C/Ddem+ VXB . . NPr+  VP/J J/R  R        . N🅪Sg/Vg/J R     VP/J\n> to have    got into a   conversation .\n# P  NSg/VXB VP  P    D/P N🅪Sg/VB+     .\n>\n#\n> “ You    don’t know much         , ” said the Duchess ; “ and  that’s a   fact . ”\n# . ISgPl+ VXB   VB   NSg/I/J/R/Dq . . VP/J D   NSg/VB  . . VB/C NSg$   D/P NSg+ . .\n>\n#\n> Alice did  not     at    all          like         the tone      of this    remark  , and  thought it       would be       as\n# NPr+  VXPt NSg/R/C NSg/P NSg/I/J/C/Dq NSg/VB/J/C/P D   N🅪Sg/I/VB P  I/Ddem+ NSg/VB+ . VB/C N🅪Sg/VP NPr/ISg+ VXB   NSg/VLXB R/C/P\n> well       to introduce some     other    subject  of conversation . While      she  was  trying  to\n# NSg/VB/J/R P  VB        I/J/R/Dq NSg/VB/J NSg/VB/J P  N🅪Sg/VB+     . NSg/VB/C/P ISg+ VLPt Nᴹ/Vg/J P\n> fix    on  one     , the cook   took the cauldron of soup     off        the fire       , and  at    once  set       to\n# NSg/VB J/P NSg/I/J . D   NPr/VB VPt  D   NSg      P  N🅪Sg/VB+ NSg/VB/J/P D+  N🅪Sg/VB/J+ . VB/C NSg/P NSg/C NPr/VBP/J P\n> work    throwing everything within  her     reach  at    the Duchess and  the baby      — the\n# N🅪Sg/VB Nᴹ/Vg/J  NSg/I/VB+  NSg/J/P ISg/D$+ NSg/VB NSg/P D   NSg/VB  VB/C D   NSg/VB/J+ . D\n> fire       - irons   came      first ; then      followed a   shower of saucepans , plates  , and  dishes  .\n# N🅪Sg/VB/J+ . NPl/V3+ NSg/VPt/P NSg/J . NSg/J/R/C VP/J     D/P NSg/VB P  NPl/V3    . NPl/V3+ . VB/C NPl/V3+ .\n> The Duchess took no       notice of them     even       when    they hit       her     ; and  the baby      was\n# D   NSg/VB  VPt  NSg/Dq/P NSg/VB P  NSg/IPl+ NSg/VB/J/R NSg/I/C IPl+ NSg/VBP/J ISg/D$+ . VB/C D   NSg/VB/J+ VLPt\n> howling so          much         already , that         it       was  quite impossible to say    whether the blows\n# Nᴹ/Vg/J NSg/I/J/R/C NSg/I/J/R/Dq R       . NSg/I/C/Ddem NPr/ISg+ VLPt R     NSg/J      P  NSg/VB I/C     D   NPl/V3\n> hurt      it       or    not     .\n# NSg/VBP/J NPr/ISg+ NPr/C NSg/R/C .\n>\n#\n> “ Oh     , please mind    what   you’re doing   ! ” cried Alice , jumping up         and  down        in        an\n# . NPr/VB . VB     NSg/VB+ NSg/I+ K      Nᴹ/Vg/J . . VP/J  NPr+  . Nᴹ/Vg/J NSg/VB/J/P VB/C N🅪Sg/VB/J/P NPr/J/R/P D/P\n> agony of terror . “ Oh     , there goes   his     precious nose    ! ” as    an  unusually large\n# N🅪Sg  P  N🅪Sg+  . . NPr/VB . R+    NPl/V3 ISg/D$+ NSg/J+   NSg/VB+ . . R/C/P D/P R         NSg/J+\n> saucepan flew      close    by    it       , and  very nearly carried it       off        .\n# NSg/VB+  NSg/VPt/J NSg/VB/J NSg/P NPr/ISg+ . VB/C J/R  R      VP/J    NPr/ISg+ NSg/VB/J/P .\n>\n#\n> “ If    everybody minded their own       business , ” the Duchess said in        a   hoarse   growl  ,\n# . NSg/C NSg/I+    VP/J+  D$+   NSg/VB/J+ N🅪Sg/J+  . . D   NSg/VB  VP/J NPr/J/R/P D/P NSg/VB/J NSg/VB .\n> “ the world   would go       round      a   deal      faster than it       does    . ”\n# . D   NSg/VB+ VXB   NSg/VB/J NSg/VB/J/P D/P NSg/VB/J+ NSg/JC C/P  NPr/ISg+ NPl/VX3 . .\n>\n#\n> “ Which would not     be       an   advantage , ” said Alice , who    felt      very glad     to get    an\n# . I/C+  VXB   NSg/R/C NSg/VLXB D/P+ N🅪Sg/VB+  . . VP/J NPr+  . NPr/I+ N🅪Sg/VP/J J/R  NSg/VB/J P  NSg/VB D/P\n> opportunity of showing off        a   little     of her     knowledge . “ Just think  of what   work\n# N🅪Sg        P  Nᴹ/Vg/J NSg/VB/J/P D/P NPr/I/J/Dq P  ISg/D$+ Nᴹ+       . . J/R  NSg/VB P  NSg/I+ N🅪Sg/VB+\n> it       would make   with the day    and  night    ! You    see    the earth    takes  twenty - four hours\n# NPr/ISg+ VXB   NSg/VB P    D   NPr🅪Sg VB/C N🅪Sg/VB+ . ISgPl+ NSg/VB D+  NPrᴹ/VB+ NPl/V3 NSg    . NSg  NPl\n> to turn   round      on  its     axis — ”\n# P  NSg/VB NSg/VB/J/P J/P ISg/D$+ NPr+ . .\n>\n#\n> “ Talking of axes         , ” said the Duchess , “ chop    off        her     head      ! ”\n# . Nᴹ/Vg/J P  NPl/V3/Am/Br . . VP/J D   NSg/VB  . . NSg/VB+ NSg/VB/J/P ISg/D$+ NPr/VB/J+ . .\n>\n#\n> Alice glanced rather     anxiously at    the cook    , to see    if    she  meant to take   the\n# NPr+  VP/J    NPr/VB/J/R R         NSg/P D+  NPr/VB+ . P  NSg/VB NSg/C ISg+ VP    P  NSg/VB D+\n> hint    ; but     the cook    was  busily stirring the soup     , and  seemed not     to be       listening ,\n# NSg/VB+ . NSg/C/P D+  NPr/VB+ VLPt R      NSg/Vg/J D+  N🅪Sg/VB+ . VB/C VP/J   NSg/R/C P  NSg/VLXB Nᴹ/Vg/J   .\n> so          she  went    on  again : “ Twenty - four hours , I       think  ; or    is  it       twelve ? I       — ”\n# NSg/I/J/R/C ISg+ NSg/VPt J/P P     . . NSg    . NSg  NPl+  . ISg/#r+ NSg/VB . NPr/C VL3 NPr/ISg+ NSg    . ISg/#r+ . .\n>\n#\n> “ Oh     , don’t bother me       , ” said the Duchess ; “ I       never could   abide figures ! ” And  with\n# . NPr/VB . VXB   Nᴹ/VB  NPr/ISg+ . . VP/J D   NSg/VB  . . ISg/#r+ R     NSg/VXB VB    NPl/V3+ . . VB/C P\n> that         she  began nursing her     child   again , singing a   sort    of lullaby to it       as    she\n# NSg/I/C/Ddem ISg+ VPt   Nᴹ/Vg/J ISg/D$+ NSg/VB+ P     . Nᴹ/Vg/J D/P NSg/VB+ P  NSg/VB  P  NPr/ISg+ R/C/P ISg+\n> did  so          , and  giving  it       a   violent  shake   at    the end    of every line    :\n# VXPt NSg/I/J/R/C . VB/C Nᴹ/Vg/J NPr/ISg+ D/P NSg/VB/J NSg/VB+ NSg/P D   NSg/VB P  Dq    NSg/VB+ .\n>\n#\n> “ Speak  roughly to your little      boy     , And  beat      him  when    he       sneezes : He       only  does\n# . NSg/VB R       P  D$+  NPr/I/J/Dq+ NSg/VB+ . VB/C N🅪Sg/VB/J ISg+ NSg/I/C NPr/ISg+ NPl/V3  . NPr/ISg+ J/R/C NPl/VX3\n> it       to annoy  , Because he       knows it       teases . ”\n# NPr/ISg+ P  NSg/VB . C/P     NPr/ISg+ V3    NPr/ISg+ NPl/V3 . .\n>\n#\n> CHORUS  . ( In        which the cook   and  the baby      joined ) :\n# NSg/VB+ . . NPr/J/R/P I/C+  D   NPr/VB VB/C D+  NSg/VB/J+ VP/J   . .\n>\n#\n> “ Wow    ! wow    ! wow    ! ”\n# . NSg/VB . NSg/VB . NSg/VB . .\n>\n#\n> While      the Duchess sang    the second   verse  of the song  , she  kept tossing the baby\n# NSg/VB/C/P D   NSg/VB  NPr/VPt D   NSg/VB/J NSg/VB P  D   N🅪Sg+ . ISg+ VP   Nᴹ/Vg/J D   NSg/VB/J+\n> violently up         and  down        , and  the poor     little     thing howled so          , that         Alice could\n# R         NSg/VB/J/P VB/C N🅪Sg/VB/J/P . VB/C D   NSg/VB/J NPr/I/J/Dq NSg+  VP/J   NSg/I/J/R/C . NSg/I/C/Ddem NPr+  NSg/VXB\n> hardly hear the words   : —\n# R      VB   D   NPl/V3+ . .\n>\n#\n> “ I       speak  severely to my  boy     , I       beat      him  when    he       sneezes ; For   he       can     thoroughly\n# . ISg/#r+ NSg/VB R        P  D$+ NSg/VB+ . ISg/#r+ N🅪Sg/VB/J ISg+ NSg/I/C NPr/ISg+ NPl/V3  . R/C/P NPr/ISg+ NPr/VXB R\n> enjoy The pepper   when    he       pleases ! ”\n# VB    D   N🅪Sg/VB+ NSg/I/C NPr/ISg+ V3      . .\n>\n#\n> CHORUS  .\n# NSg/VB+ .\n>\n#\n> “ Wow    ! wow    ! wow    ! ”\n# . NSg/VB . NSg/VB . NSg/VB . .\n>\n#\n> “ Here ! you    may     nurse  it       a    bit      , if    you    like         ! ” the Duchess said to Alice , flinging\n# . J/R  . ISgPl+ NPr/VXB NSg/VB NPr/ISg+ D/P+ NSg/VPt+ . NSg/C ISgPl+ NSg/VB/J/C/P . . D   NSg/VB  VP/J P  NPr+  . Nᴹ/Vg/J\n> the baby      at    her     as    she  spoke   . “ I       must    go       and  get    ready    to play    croquet with the\n# D   NSg/VB/J+ NSg/P ISg/D$+ R/C/P ISg+ NSg/VPt . . ISg/#r+ NSg/VXB NSg/VB/J VB/C NSg/VB NSg/VB/J P  N🅪Sg/VB NSg/VB  P    D+\n> Queen     , ” and  she  hurried out          of the room       . The cook   threw a   frying  - pan      after her\n# NPr/VB/J+ . . VB/C ISg+ VP/J    NSg/VB/J/R/P P  D   N🅪Sg/VB/J+ . D   NPr/VB VPt   D/P Nᴹ/Vg/J . NPr/VB/J P     ISg/D$+\n> as    she  went    out          , but     it       just missed her     .\n# R/C/P ISg+ NSg/VPt NSg/VB/J/R/P . NSg/C/P NPr/ISg+ J/R  VP/J   ISg/D$+ .\n>\n#\n> Alice caught the baby     with some      difficulty , as    it       was  a   queer    - shaped little\n# NPr+  VP/J   D   NSg/VB/J P    I/J/R/Dq+ N🅪Sg+      . R/C/P NPr/ISg+ VLPt D/P NSg/VB/J . VP/J   NPr/I/J/Dq+\n> creature , and  held out          its     arms   and  legs    in        all           directions , “ just like         a\n# NSg+     . VB/C VP   NSg/VB/J/R/P ISg/D$+ NPl/V3 VB/C NPl/V3+ NPr/J/R/P NSg/I/J/C/Dq+ NPl+       . . J/R  NSg/VB/J/C/P D/P\n> star    - fish       , ” thought Alice . The poor      little      thing was  snorting like         a\n# NSg/VB+ . N🅪SgPl/VB+ . . N🅪Sg/VP NPr+  . D+  NSg/VB/J+ NPr/I/J/Dq+ NSg+  VLPt Nᴹ/Vg/J  NSg/VB/J/C/P D/P\n> steam      - engine  when    she  caught it       , and  kept doubling itself up         and  straightening\n# N🅪Sg/VB/J+ . NSg/VB+ NSg/I/C ISg+ VP/J   NPr/ISg+ . VB/C VP   Nᴹ/Vg/J  ISg+   NSg/VB/J/P VB/C Nᴹ/Vg/J\n> itself out          again , so          that          altogether , for   the first minute    or    two , it       was  as\n# ISg+   NSg/VB/J/R/P P     . NSg/I/J/R/C NSg/I/C/Ddem+ NSg        . R/C/P D   NSg/J NSg/VB/J+ NPr/C NSg . NPr/ISg+ VLPt R/C/P\n> much         as    she  could   do  to hold     it       .\n# NSg/I/J/R/Dq R/C/P ISg+ NSg/VXB VXB P  NSg/VB/J NPr/ISg+ .\n>\n#\n> As    soon as    she  had made out          the proper way   of nursing it       , ( which was  to twist  it\n# R/C/P J/R  R/C/P ISg+ VP  VP   NSg/VB/J/R/P D   NSg/J  NSg/J P  Nᴹ/Vg/J NPr/ISg+ . . I/C+  VLPt P  NSg/VB NPr/ISg+\n> up         into a   sort   of knot    , and  then      keep   tight hold     of its     right    ear       and  left     foot    ,\n# NSg/VB/J/P P    D/P NSg/VB P  NSg/VB+ . VB/C NSg/J/R/C NSg/VB VB/J  NSg/VB/J P  ISg/D$+ NPr/VB/J NSg/VB/J+ VB/C NPr/VP/J NSg/VB+ .\n> so          as    to prevent its     undoing itself , ) she  carried it       out          into the open     air      . “ If\n# NSg/I/J/R/C R/C/P P  VB      ISg/D$+ NSg/Vg  ISg+   . . ISg+ VP/J    NPr/ISg+ NSg/VB/J/R/P P    D   NSg/VB/J N🅪Sg/VB+ . . NSg/C\n> I       don’t take   this   child   away with me       , ” thought Alice , “ they’re sure to kill   it\n# ISg/#r+ VXB   NSg/VB I/Ddem NSg/VB+ VB/J P    NPr/ISg+ . . N🅪Sg/VP NPr+  . . K       J    P  NSg/VB NPr/ISg+\n> in        a   day     or    two : wouldn’t it       be       murder   to leave  it       behind  ? ” She  said the last\n# NPr/J/R/P D/P NPr🅪Sg+ NPr/C NSg . VXB      NPr/ISg+ NSg/VLXB N🅪Sg/VB+ P  NSg/VB NPr/ISg+ NSg/J/P . . ISg+ VP/J D+  NSg/VB/J+\n> words   out          loud  , and  the little      thing grunted in        reply   ( it       had left     off        sneezing\n# NPl/V3+ NSg/VB/J/R/P NSg/J . VB/C D+  NPr/I/J/Dq+ NSg+  VP/J    NPr/J/R/P NSg/VB+ . NPr/ISg+ VP  NPr/VP/J NSg/VB/J/P Nᴹ/Vg/J\n> by    this   time       ) . “ Don’t grunt   , ” said Alice ; “ that’s not     at    all          a   proper way   of\n# NSg/P I/Ddem N🅪Sg/VB/J+ . . . VXB   NSg/VB+ . . VP/J NPr+  . . NSg$   NSg/R/C NSg/P NSg/I/J/C/Dq D/P NSg/J  NSg/J P\n> expressing yourself . ”\n# Nᴹ/Vg/J    ISg+     . .\n>\n#\n> The baby      grunted again , and  Alice looked very anxiously into its     face    to see\n# D+  NSg/VB/J+ VP/J    P     . VB/C NPr+  VP/J   J/R  R         P    ISg/D$+ NSg/VB+ P  NSg/VB\n> what   was  the matter   with it       . There could   be       no        doubt    that          it       had a   very turn   - up\n# NSg/I+ VLPt D   N🅪Sg/VB+ P    NPr/ISg+ . R+    NSg/VXB NSg/VLXB NSg/Dq/P+ N🅪Sg/VB+ NSg/I/C/Ddem+ NPr/ISg+ VP  D/P J/R  NSg/VB . NSg/VB/J/P\n> nose    , much         more         like         a   snout  than a   real  nose    ; also its     eyes    were     getting\n# NSg/VB+ . NSg/I/J/R/Dq NPr/I/J/R/Dq NSg/VB/J/C/P D/P NSg/VB C/P  D/P NSg/J NSg/VB+ . R/C  ISg/D$+ NPl/V3+ NSg/VLPt NSg/Vg\n> extremely small    for   a   baby      : altogether Alice did  not     like         the look   of the thing\n# R         NPr/VB/J R/C/P D/P NSg/VB/J+ . NSg        NPr+  VXPt NSg/R/C NSg/VB/J/C/P D   NSg/VB P  D   NSg+\n> at    all          . “ But     perhaps it       was  only  sobbing  , ” she  thought , and  looked into its     eyes\n# NSg/P NSg/I/J/C/Dq . . NSg/C/P NSg/R   NPr/ISg+ VLPt J/R/C NSg/Vg/J . . ISg+ N🅪Sg/VP . VB/C VP/J   P    ISg/D$+ NPl/V3+\n> again , to see    if    there were     any    tears   .\n# P     . P  NSg/VB NSg/C R+    NSg/VLPt I/R/Dq NPl/V3+ .\n>\n#\n> No       , there were     no        tears   . “ If    you’re going   to turn   into a   pig     , my  dear     , ” said\n# NSg/Dq/P . R+    NSg/VLPt NSg/Dq/P+ NPl/V3+ . . NSg/C K      Nᴹ/Vg/J P  NSg/VB P    D/P NSg/VB+ . D$+ NSg/VB/J . . VP/J\n> Alice , seriously , “ I’ll have    nothing  more         to do  with you    . Mind    now       ! ” The poor\n# NPr+  . R         . . K    NSg/VXB NSg/I/J+ NPr/I/J/R/Dq P  VXB P    ISgPl+ . NSg/VB+ NSg/J/R/C . . D+  NSg/VB/J+\n> little      thing sobbed again ( or    grunted , it       was  impossible to say    which ) , and  they\n# NPr/I/J/Dq+ NSg+  VP     P     . NPr/C VP/J    . NPr/ISg+ VLPt NSg/J      P  NSg/VB I/C+  . . VB/C IPl+\n> went    on  for   some     while      in        silence .\n# NSg/VPt J/P R/C/P I/J/R/Dq NSg/VB/C/P NPr/J/R/P NSg/VB+ .\n>\n#\n> Alice was  just beginning to think  to herself , “ Now       , what   am        I       to do  with this\n# NPr+  VLPt J/R  NSg/Vg/J  P  NSg/VB P  ISg+    . . NSg/J/R/C . NSg/I+ NPr/VLB/J ISg/#r+ P  VXB P    I/Ddem+\n> creature when    I       get    it       home      ? ” when    it       grunted again , so          violently , that         she\n# NSg+     NSg/I/C ISg/#r+ NSg/VB NPr/ISg+ NSg/VB/J+ . . NSg/I/C NPr/ISg+ VP/J    P     . NSg/I/J/R/C R         . NSg/I/C/Ddem ISg+\n> looked down        into its     face    in        some     alarm    . This    time       there could   be       no       mistake\n# VP/J   N🅪Sg/VB/J/P P    ISg/D$+ NSg/VB+ NPr/J/R/P I/J/R/Dq N🅪Sg/VB+ . I/Ddem+ N🅪Sg/VB/J+ R+    NSg/VXB NSg/VLXB NSg/Dq/P NSg/VB\n> about it       : it       was  neither more         nor   less       than a    pig     , and  she  felt      that         it       would be\n# J/P   NPr/ISg+ . NPr/ISg+ VLPt I/C     NPr/I/J/R/Dq NSg/C VB/J/R/C/P C/P  D/P+ NSg/VB+ . VB/C ISg+ N🅪Sg/VP/J NSg/I/C/Ddem NPr/ISg+ VXB   NSg/VLXB\n> quite absurd for   her     to carry  it       further .\n# R     NSg/J  R/C/P ISg/D$+ P  NSg/VB NPr/ISg+ VB/JC   .\n>\n#\n> So          she  set       the little      creature down        , and  felt      quite relieved to see    it       trot    away\n# NSg/I/J/R/C ISg+ NPr/VBP/J D+  NPr/I/J/Dq+ NSg+     N🅪Sg/VB/J/P . VB/C N🅪Sg/VP/J R     VP/J     P  NSg/VB NPr/ISg+ NSg/VB+ VB/J\n> quietly into the wood         . “ If    it       had grown up         , ” she  said to herself , “ it       would have\n# R       P    D+  NPr🅪Sg/VB/J+ . . NSg/C NPr/ISg+ VP  VB/J  NSg/VB/J/P . . ISg+ VP/J P  ISg+    . . NPr/ISg+ VXB   NSg/VXB\n> made a   dreadfully ugly      child   : but     it       makes  rather     a   handsome pig     , I       think  . ” And\n# VP   D/P R          NSg/VB/J+ NSg/VB+ . NSg/C/P NPr/ISg+ NPl/V3 NPr/VB/J/R D/P VB/J     NSg/VB+ . ISg/#r+ NSg/VB . . VB/C\n> she  began thinking over    other     children she  knew , who    might    do  very well       as    pigs    ,\n# ISg+ VPt   Nᴹ/Vg/J  NSg/J/P NSg/VB/J+ NPl+     ISg+ VPt  . NPr/I+ Nᴹ/VXB/J VXB J/R  NSg/VB/J/R R/C/P NPl/V3+ .\n> and  was  just saying    to herself , “ if    one     only  knew the right    way    to change  them     — ”\n# VB/C VLPt J/R  N🅪Sg/Vg/J P  ISg+    . . NSg/C NSg/I/J J/R/C VPt  D   NPr/VB/J NSg/J+ P  N🅪Sg/VB NSg/IPl+ . .\n> when    she  was  a   little     startled by    seeing     the Cheshire Cat       sitting  on  a   bough of\n# NSg/I/C ISg+ VLPt D/P NPr/I/J/Dq VP/J     NSg/P NSg/Vg/J/C D   NPr      NSg/VB/J+ NSg/Vg/J J/P D/P NSg   P\n> a   tree    a   few      yards   off        .\n# D/P NSg/VB+ D/P NSg/I/Dq NPl/V3+ NSg/VB/J/P .\n>\n#\n> The Cat       only  grinned when    it       saw     Alice . It       looked good     - natured , she  thought :\n# D+  NSg/VB/J+ J/R/C VP      NSg/I/C NPr/ISg+ NSg/VPt NPr+  . NPr/ISg+ VP/J   NPr/VB/J . ?       . ISg+ N🅪Sg/VP .\n> still      it       had very long     claws  and  a   great many       teeth , so          she  felt      that         it       ought\n# NSg/VB/J/R NPr/ISg+ VP  J/R  NPr/VB/J NPl/V3 VB/C D/P NSg/J NSg/I/J/Dq NPl+  . NSg/I/J/R/C ISg+ N🅪Sg/VP/J NSg/I/C/Ddem NPr/ISg+ NSg/I/VXB\n> to be       treated with respect .\n# P  NSg/VLXB VP/J    P    Nᴹ/VB+  .\n>\n#\n> “ Cheshire Puss , ” she  began , rather     timidly , as    she  did  not     at    all          know whether\n# . NPr      NSg  . . ISg+ VPt   . NPr/VB/J/R R       . R/C/P ISg+ VXPt NSg/R/C NSg/P NSg/I/J/C/Dq VB+  I/C\n> it       would like         the name    : however , it       only  grinned a   little     wider . “ Come       , it’s\n# NPr/ISg+ VXB   NSg/VB/J/C/P D   NSg/VB+ . C       . NPr/ISg+ J/R/C VP      D/P NPr/I/J/Dq JC    . . NSg/VBPp/P . K\n> pleased so          far      , ” thought Alice , and  she  went    on  . “ Would you    tell   me       , please ,\n# VP/J    NSg/I/J/R/C NSg/VB/J . . N🅪Sg/VP NPr+  . VB/C ISg+ NSg/VPt J/P . . VXB   ISgPl+ NPr/VB NPr/ISg+ . VB     .\n> which way    I       ought     to go       from here ? ”\n# I/C+  NSg/J+ ISg/#r+ NSg/I/VXB P  NSg/VB/J P    J/R  . .\n>\n#\n> “ That          depends a    good      deal      on  where   you    want   to get    to , ” said the Cat       .\n# . NSg/I/C/Ddem+ NPl/V3  D/P+ NPr/VB/J+ NSg/VB/J+ J/P NSg/R/C ISgPl+ NSg/VB P  NSg/VB P  . . VP/J D+  NSg/VB/J+ .\n>\n#\n> “ I       don’t much         care     where   — ” said Alice .\n# . ISg/#r+ VXB   NSg/I/J/R/Dq N🅪Sg/VB+ NSg/R/C . . VP/J NPr+  .\n>\n#\n> “ Then      it       doesn’t matter   which way    you    go       , ” said the Cat       .\n# . NSg/J/R/C NPr/ISg+ VX3     N🅪Sg/VB+ I/C+  NSg/J+ ISgPl+ NSg/VB/J . . VP/J D   NSg/VB/J+ .\n>\n#\n> “ — so          long     as    I       get    somewhere , ” Alice added as    an   explanation .\n# . . NSg/I/J/R/C NPr/VB/J R/C/P ISg/#r+ NSg/VB NSg       . . NPr+  VP/J  R/C/P D/P+ N🅪Sg+       .\n>\n#\n> “ Oh     , you’re sure to do  that          , ” said the Cat       , “ if    you    only  walk   long     enough . ”\n# . NPr/VB . K      J    P  VXB NSg/I/C/Ddem+ . . VP/J D   NSg/VB/J+ . . NSg/C ISgPl+ J/R/C NSg/VB NPr/VB/J NSg/I  . .\n>\n#\n> Alice felt      that         this    could   not     be       denied , so          she  tried another question . “ What\n# NPr+  N🅪Sg/VP/J NSg/I/C/Ddem I/Ddem+ NSg/VXB NSg/R/C NSg/VLXB VP/J   . NSg/I/J/R/C ISg+ VP/J  I/D+    NSg/VB+  . . NSg/I+\n> sort   of people  live about here ? ”\n# NSg/VB P  NPl/VB+ VB/J J/P   J/R  . .\n>\n#\n> “ In        that          direction , ” the Cat       said , waving  its     right     paw     round      , “ lives a   Hatter :\n# . NPr/J/R/P NSg/I/C/Ddem+ N🅪Sg+     . . D+  NSg/VB/J+ VP/J . Nᴹ/Vg/J ISg/D$+ NPr/VB/J+ NSg/VB+ NSg/VB/J/P . . V3+   D/P NSg/VB .\n> and  in        that         direction , ” waving  the other    paw     , “ lives a   March   Hare      . Visit  either\n# VB/C NPr/J/R/P NSg/I/C/Ddem N🅪Sg+     . . Nᴹ/Vg/J D   NSg/VB/J NSg/VB+ . . V3+   D/P NPr/VB+ NSg/VB/J+ . NSg/VB I/C\n> you    like         : they’re both   mad      . ”\n# ISgPl+ NSg/VB/J/C/P . K       I/C/Dq NSg/VB/J . .\n>\n#\n> “ But     I       don’t want   to go       among mad      people  , ” Alice remarked .\n# . NSg/C/P ISg/#r+ VXB   NSg/VB P  NSg/VB/J P     NSg/VB/J NPl/VB+ . . NPr+  VP/J     .\n>\n#\n> “ Oh     , you    can’t help   that          , ” said the Cat       : “ we’re all          mad      here . I’m mad      . You’re\n# . NPr/VB . ISgPl+ VXB   NSg/VB NSg/I/C/Ddem+ . . VP/J D   NSg/VB/J+ . . K     NSg/I/J/C/Dq NSg/VB/J J/R  . K   NSg/VB/J . K\n> mad      . ”\n# NSg/VB/J . .\n>\n#\n> “ How   do  you    know I’m mad      ? ” said Alice .\n# . NSg/C VXB ISgPl+ VB   K   NSg/VB/J . . VP/J NPr+  .\n>\n#\n> “ You    must    be       , ” said the Cat       , “ or    you    wouldn’t have    come       here . ”\n# . ISgPl+ NSg/VXB NSg/VLXB . . VP/J D+  NSg/VB/J+ . . NPr/C ISgPl+ VXB      NSg/VXB NSg/VBPp/P J/R  . .\n>\n#\n> Alice didn’t think  that          proved it       at    all          ; however , she  went    on  “ And  how   do  you\n# NPr+  VXPt   NSg/VB NSg/I/C/Ddem+ VP/J   NPr/ISg+ NSg/P NSg/I/J/C/Dq . C       . ISg+ NSg/VPt J/P . VB/C NSg/C VXB ISgPl+\n> know that         you’re mad      ? ”\n# VB   NSg/I/C/Ddem K      NSg/VB/J . .\n>\n#\n> “ To begin  with , ” said the Cat       , “ a   dog’s not     mad      . You    grant   that          ? ”\n# . P  NSg/VB P    . . VP/J D+  NSg/VB/J+ . . D/P NSg$  NSg/R/C NSg/VB/J . ISgPl+ NPr/VB+ NSg/I/C/Ddem+ . .\n>\n#\n> “ I       suppose so          , ” said Alice .\n# . ISg/#r+ VB      NSg/I/J/R/C . . VP/J NPr+  .\n>\n#\n> “ Well       , then      , ” the Cat       went    on  , “ you    see    , a    dog       growls when    it’s angry , and  wags\n# . NSg/VB/J/R . NSg/J/R/C . . D+  NSg/VB/J+ NSg/VPt J/P . . ISgPl+ NSg/VB . D/P+ NSg/VB/J+ NPl/V3 NSg/I/C K    VB/J  . VB/C NPl/V3\n> its     tail      when    it’s pleased . Now       I       growl  when    I’m pleased , and  wag    my  tail      when\n# ISg/D$+ NSg/VB/J+ NSg/I/C K    VP/J    . NSg/J/R/C ISg/#r+ NSg/VB NSg/I/C K   VP/J    . VB/C NSg/VB D$+ NSg/VB/J+ NSg/I/C\n> I’m angry . Therefore I’m mad      . ”\n# K   VB/J  . R         K   NSg/VB/J . .\n>\n#\n> “ I       call   it       purring , not     growling , ” said Alice .\n# . ISg/#r+ NSg/VB NPr/ISg+ Nᴹ/Vg/J . NSg/R/C Nᴹ/Vg/J  . . VP/J NPr+  .\n>\n#\n> “ Call   it       what   you    like         , ” said the Cat       . “ Do  you    play    croquet with the Queen\n# . NSg/VB NPr/ISg+ NSg/I+ ISgPl+ NSg/VB/J/C/P . . VP/J D+  NSg/VB/J+ . . VXB ISgPl+ N🅪Sg/VB NSg/VB  P    D   NPr/VB/J+\n> to - day     ? ”\n# P  . NPr🅪Sg+ . .\n>\n#\n> “ I       should like         it       very much         , ” said Alice , “ but     I       haven’t been     invited  yet      . ”\n# . ISg/#r+ VXB    NSg/VB/J/C/P NPr/ISg+ J/R  NSg/I/J/R/Dq . . VP/J NPr+  . . NSg/C/P ISg/#r+ VXB     NSg/VLPp NSg/VP/J NSg/VB/C . .\n>\n#\n> “ You’ll see    me       there , ” said the Cat       , and  vanished .\n# . K      NSg/VB NPr/ISg+ R     . . VP/J D   NSg/VB/J+ . VB/C VP/J     .\n>\n#\n> Alice was  not     much         surprised at    this    , she  was  getting so          used to queer     things\n# NPr+  VLPt NSg/R/C NSg/I/J/R/Dq VP/J      NSg/P I/Ddem+ . ISg+ VLPt NSg/Vg  NSg/I/J/R/C VP/J P  NSg/VB/J+ NPl+\n> happening . While      she  was  looking at    the place    where   it       had been     , it       suddenly\n# N🅪Sg/Vg/J . NSg/VB/C/P ISg+ VLPt Nᴹ/Vg/J NSg/P D+  N🅪Sg/VB+ NSg/R/C NPr/ISg+ VP  NSg/VLPp . NPr/ISg+ R\n> appeared again .\n# VP/J     P     .\n>\n#\n> “ By    - the - bye     , what   became of the baby      ? ” said the Cat       . “ I’d nearly forgotten to\n# . NSg/P . D   . NSg/J/P . NSg/I+ VPt    P  D+  NSg/VB/J+ . . VP/J D+  NSg/VB/J+ . . K   R      NSg/VPp/J P\n> ask    . ”\n# NSg/VB . .\n>\n#\n> “ It       turned into a    pig     , ” Alice quietly said , just as    if    it       had come       back     in        a\n# . NPr/ISg+ VP/J   P    D/P+ NSg/VB+ . . NPr+  R       VP/J . J/R  R/C/P NSg/C NPr/ISg+ VP  NSg/VBPp/P NSg/VB/J NPr/J/R/P D/P+\n> natural way    .\n# NSg/J+  NSg/J+ .\n>\n#\n> “ I       thought it       would , ” said the Cat       , and  vanished again .\n# . ISg/#r+ N🅪Sg/VP NPr/ISg+ VXB   . . VP/J D+  NSg/VB/J+ . VB/C VP/J     P     .\n>\n#\n> Alice waited a   little     , half      expecting to see    it       again , but     it       did  not     appear ,\n# NPr+  VP/J   D/P NPr/I/J/Dq . N🅪Sg/J/P+ Nᴹ/Vg/J   P  NSg/VB NPr/ISg+ P     . NSg/C/P NPr/ISg+ VXPt NSg/R/C VB     .\n> and  after a    minute    or    two she  walked on  in        the direction in        which the March   Hare\n# VB/C P     D/P+ NSg/VB/J+ NPr/C NSg ISg+ VP/J   J/P NPr/J/R/P D+  N🅪Sg+     NPr/J/R/P I/C+  D+  NPr/VB+ NSg/VB/J+\n> was  said to live . “ I’ve seen    hatters before , ” she  said to herself ; “ the March\n# VLPt VP/J P  VB/J . . K    NSg/VPp NPl/V3  C/P    . . ISg+ VP/J P  ISg+    . . D   NPr/VB+\n> Hare      will    be       much         the most         interesting , and  perhaps as    this    is  May     it       won’t be\n# NSg/VB/J+ NPr/VXB NSg/VLXB NSg/I/J/R/Dq D   NSg/I/J/R/Dq Vg/J        . VB/C NSg/R   R/C/P I/Ddem+ VL3 NPr/VXB NPr/ISg+ VXB   NSg/VLXB\n> raving  mad      — at    least    not     so          mad      as    it       was  in        March   . ” As    she  said this    , she  looked\n# Nᴹ/Vg/J NSg/VB/J . NSg/P NSg/J/Dq NSg/R/C NSg/I/J/R/C NSg/VB/J R/C/P NPr/ISg+ VLPt NPr/J/R/P NPr/VB+ . . R/C/P ISg+ VP/J I/Ddem+ . ISg+ VP/J\n> up         , and  there was  the Cat       again , sitting  on  a   branch of a    tree    .\n# NSg/VB/J/P . VB/C R+    VLPt D+  NSg/VB/J+ P     . NSg/Vg/J J/P D/P NPr/VB P  D/P+ NSg/VB+ .\n>\n#\n> “ Did  you    say    pig     , or    fig    ? ” said the Cat       .\n# . VXPt ISgPl+ NSg/VB NSg/VB+ . NPr/C NSg/VB . . VP/J D+  NSg/VB/J+ .\n>\n#\n> “ I       said pig     , ” replied Alice ; “ and  I       wish   you    wouldn’t keep   appearing and\n# . ISg/#r+ VP/J NSg/VB+ . . VP/J    NPr+  . . VB/C ISg/#r+ NSg/VB ISgPl+ VXB      NSg/VB Nᴹ/Vg/J   VB/C\n> vanishing so          suddenly : you    make   one     quite giddy    . ”\n# Nᴹ/Vg/J   NSg/I/J/R/C R        . ISgPl+ NSg/VB NSg/I/J R     NSg/VB/J . .\n>\n#\n> “ All          right    , ” said the Cat       ; and  this    time       it       vanished quite slowly , beginning\n# . NSg/I/J/C/Dq NPr/VB/J . . VP/J D+  NSg/VB/J+ . VB/C I/Ddem+ N🅪Sg/VB/J+ NPr/ISg+ VP/J     R     R      . NSg/Vg/J+\n> with the end    of the tail      , and  ending  with the grin    , which remained some      time\n# P    D   NSg/VB P  D+  NSg/VB/J+ . VB/C Nᴹ/Vg/J P    D+  NSg/VB+ . I/C+  VP/J     I/J/R/Dq+ N🅪Sg/VB/J+\n> after the rest   of it       had gone    .\n# P     D   NSg/VB P  NPr/ISg+ VP  VPp/J/P .\n>\n#\n> “ Well       ! I’ve often seen    a   cat       without a   grin    , ” thought Alice ; “ but     a   grin    without\n# . NSg/VB/J/R . K    R     NSg/VPp D/P NSg/VB/J+ C/P     D/P NSg/VB+ . . N🅪Sg/VP NPr+  . . NSg/C/P D/P NSg/VB+ C/P\n> a   cat       ! It’s the most         curious thing I       ever saw     in        my  life     ! ”\n# D/P NSg/VB/J+ . K    D   NSg/I/J/R/Dq J       NSg+  ISg/#r+ J/R  NSg/VPt NPr/J/R/P D$+ N🅪Sg/VB+ . .\n>\n#\n> She  had not     gone    much         farther before she  came      in        sight   of the house  of the March\n# ISg+ VP  NSg/R/C VPp/J/P NSg/I/J/R/Dq VB/JC   C/P    ISg+ NSg/VPt/P NPr/J/R/P N🅪Sg/VB P  D   NPr/VB P  D+  NPr/VB+\n> Hare      : she  thought it       must    be       the right     house   , because the chimneys were     shaped\n# NSg/VB/J+ . ISg+ N🅪Sg/VP NPr/ISg+ NSg/VXB NSg/VLXB D+  NPr/VB/J+ NPr/VB+ . C/P     D+  NPl/V3+  NSg/VLPt VP/J\n> like         ears   and  the roof    was  thatched with fur          . It       was  so          large a   house   , that         she\n# NSg/VB/J/C/P NPl/V3 VB/C D+  NSg/VB+ VLPt VP/J     P    N🅪Sg/VB/C/P+ . NPr/ISg+ VLPt NSg/I/J/R/C NSg/J D/P NPr/VB+ . NSg/I/C/Ddem ISg+\n> did  not     like         to go       nearer till       she  had nibbled some     more         of the lefthand bit      of\n# VXPt NSg/R/C NSg/VB/J/C/P P  NSg/VB/J NSg/JC NSg/VB/C/P ISg+ VP  VP/J    I/J/R/Dq NPr/I/J/R/Dq P  D   ?        NSg/VPt+ P\n> mushroom  , and  raised herself to about two feet high       : even       then      she  walked up\n# N🅪Sg/VB/J . VB/C VP/J   ISg+    P  J/P   NSg NPl+ NSg/VB/J/R . NSg/VB/J/R NSg/J/R/C ISg+ VP/J   NSg/VB/J/P\n> towards it       rather     timidly , saying    to herself “ Suppose it       should be       raving  mad\n# P       NPr/ISg+ NPr/VB/J/R R       . N🅪Sg/Vg/J P  ISg+    . VB      NPr/ISg+ VXB    NSg/VLXB Nᴹ/Vg/J NSg/VB/J\n> after all          ! I       almost wish   I’d gone    to see    the Hatter instead ! ”\n# P     NSg/I/J/C/Dq . ISg/#r+ R      NSg/VB K   VPp/J/P P  NSg/VB D   NSg/VB R       . .\n>\n#\n>              CHAPTER VII    : A   Mad      Tea      - Party\n# HeadingStart NSg/VB+ NSg/#r . D/P NSg/VB/J N🅪Sg/VB+ . NSg/VB/J+\n>\n#\n> There was  a    table   set       out          under   a   tree    in        front    of the house   , and  the March   Hare\n# R+    VLPt D/P+ NSg/VB+ NPr/VBP/J NSg/VB/J/R/P NSg/J/P D/P NSg/VB+ NPr/J/R/P NSg/VB/J P  D+  NPr/VB+ . VB/C D+  NPr/VB+ NSg/VB/J+\n> and  the Hatter were     having  tea      at    it       : a   Dormouse was  sitting  between them     , fast\n# VB/C D   NSg/VB NSg/VLPt Nᴹ/Vg/J N🅪Sg/VB+ NSg/P NPr/ISg+ . D/P NSg      VLPt NSg/Vg/J NSg/P   NSg/IPl+ . NSg/VB/J/R\n> asleep , and  the other    two were      using   it       as    a   cushion , resting  their elbows  on\n# J      . VB/C D   NSg/VB/J NSg NSg/VLPt+ Nᴹ/Vg/J NPr/ISg+ R/C/P D/P NSg/VB+ . Nᴹ/Vg/J+ D$+   NPl/V3+ J/P\n> it       , and  talking over    its     head      . “ Very uncomfortable for   the Dormouse , ” thought\n# NPr/ISg+ . VB/C Nᴹ/Vg/J NSg/J/P ISg/D$+ NPr/VB/J+ . . J/R  J             R/C/P D   NSg      . . N🅪Sg/VP\n> Alice ; “ only  , as    it’s asleep , I       suppose it       doesn’t mind    . ”\n# NPr+  . . J/R/C . R/C/P K    J      . ISg/#r+ VB      NPr/ISg+ VX3     NSg/VB+ . .\n>\n#\n> The table   was  a   large one     , but     the three were      all          crowded together at    one     corner\n# D+  NSg/VB+ VLPt D/P NSg/J NSg/I/J . NSg/C/P D+  NSg+  NSg/VLPt+ NSg/I/J/C/Dq VP/J    J        NSg/P NSg/I/J NSg/VB\n> of it       : “ No        room       ! No        room       ! ” they cried out          when    they saw     Alice coming  . “ There’s\n# P  NPr/ISg+ . . NSg/Dq/P+ N🅪Sg/VB/J+ . NSg/Dq/P+ N🅪Sg/VB/J+ . . IPl+ VP/J  NSg/VB/J/R/P NSg/I/C IPl+ NSg/VPt NPr+  Nᴹ/Vg/J . . K\n> plenty  of room       ! ” said Alice indignantly , and  she  sat      down        in        a   large arm       - chair\n# NSg/I/J P  N🅪Sg/VB/J+ . . VP/J NPr+  R           . VB/C ISg+ NSg/VP/J N🅪Sg/VB/J/P NPr/J/R/P D/P NSg/J NSg/VB/J+ . NSg/VB+\n> at    one     end    of the table   .\n# NSg/P NSg/I/J NSg/VB P  D   NSg/VB+ .\n>\n#\n> “ Have    some      wine     , ” the March   Hare      said in        an   encouraging tone       .\n# . NSg/VXB I/J/R/Dq+ N🅪Sg/VB+ . . D+  NPr/VB+ NSg/VB/J+ VP/J NPr/J/R/P D/P+ Nᴹ/Vg/J     N🅪Sg/I/VB+ .\n>\n#\n> Alice looked all          round      the table   , but     there was  nothing  on  it       but     tea      . “ I       don’t\n# NPr+  VP/J   NSg/I/J/C/Dq NSg/VB/J/P D+  NSg/VB+ . NSg/C/P R+    VLPt NSg/I/J+ J/P NPr/ISg+ NSg/C/P N🅪Sg/VB+ . . ISg/#r+ VXB\n> see    any    wine     , ” she  remarked .\n# NSg/VB I/R/Dq N🅪Sg/VB+ . . ISg+ VP/J     .\n>\n#\n> “ There isn’t   any    , ” said the March   Hare      .\n# . R+    NSg/VX3 I/R/Dq . . VP/J D   NPr/VB+ NSg/VB/J+ .\n>\n#\n> “ Then      it       wasn’t very civil of you    to offer     it       , ” said Alice angrily .\n# . NSg/J/R/C NPr/ISg+ VPt    J/R  J     P  ISgPl+ P  NSg/VB/JC NPr/ISg+ . . VP/J NPr+  R       .\n>\n#\n> “ It       wasn’t very civil of you    to sit    down        without being        invited  , ” said the March\n# . NPr/ISg+ VPt    J/R  J     P  ISgPl+ P  NSg/VB N🅪Sg/VB/J/P C/P     N🅪Sg/VLg/J/C NSg/VP/J . . VP/J D   NPr/VB+\n> Hare      .\n# NSg/VB/J+ .\n>\n#\n> “ I       didn’t know it       was  your table   , ” said Alice ; “ it’s laid for   a   great many       more\n# . ISg/#r+ VXPt   VB   NPr/ISg+ VLPt D$+  NSg/VB+ . . VP/J NPr+  . . K    VP/J R/C/P D/P NSg/J NSg/I/J/Dq NPr/I/J/R/Dq\n> than three . ”\n# C/P  NSg   . .\n>\n#\n> “ Your hair     wants  cutting  , ” said the Hatter . He       had been     looking at    Alice for\n# . D$+  N🅪Sg/VB+ NPl/V3 NSg/Vg/J . . VP/J D   NSg/VB . NPr/ISg+ VP  NSg/VLPp Nᴹ/Vg/J NSg/P NPr+  R/C/P\n> some     time      with great  curiosity , and  this    was  his     first  speech   .\n# I/J/R/Dq N🅪Sg/VB/J P    NSg/J+ NSg+      . VB/C I/Ddem+ VLPt ISg/D$+ NSg/J+ N🅪Sg/VB+ .\n>\n#\n> “ You    should learn  not     to make   personal remarks , ” Alice said with some     severity ;\n# . ISgPl+ VXB    NSg/VB NSg/R/C P  NSg/VB NSg/J+   NPl/V3+ . . NPr+  VP/J P    I/J/R/Dq NSg      .\n> “ it’s very rude . ”\n# . K    J/R  J    . .\n>\n#\n> The Hatter opened his     eyes    very wide  on  hearing  this    ; but     all          he       said was  , “ Why\n# D   NSg/VB VP/J   ISg/D$+ NPl/V3+ J/R  NSg/J J/P Nᴹ/Vg/J+ I/Ddem+ . NSg/C/P NSg/I/J/C/Dq NPr/ISg+ VP/J VLPt . . NSg/VB\n> is  a   raven    like         a   writing  - desk    ? ”\n# VL3 D/P NSg/VB/J NSg/VB/J/C/P D/P Nᴹ/Vg/J+ . NSg/VB+ . .\n>\n#\n> “ Come       , we   shall have    some     fun     now       ! ” thought Alice . “ I’m glad     they’ve begun\n# . NSg/VBPp/P . IPl+ VXB   NSg/VXB I/J/R/Dq Nᴹ/VB/J NSg/J/R/C . . N🅪Sg/VP NPr+  . . K   NSg/VB/J K       VPp\n> asking  riddles . — I       believe I       can     guess  that          , ” she  added aloud .\n# Nᴹ/Vg/J NPl/V3  . . ISg/#r+ VB      ISg/#r+ NPr/VXB NSg/VB NSg/I/C/Ddem+ . . ISg+ VP/J  J     .\n>\n#\n> “ Do  you    mean     that         you    think  you    can     find   out          the answer  to it       ? ” said the March\n# . VXB ISgPl+ NSg/VB/J NSg/I/C/Ddem ISgPl+ NSg/VB ISgPl+ NPr/VXB NSg/VB NSg/VB/J/R/P D+  NSg/VB+ P  NPr/ISg+ . . VP/J D+  NPr/VB+\n> Hare      .\n# NSg/VB/J+ .\n>\n#\n> “ Exactly so          , ” said Alice .\n# . R       NSg/I/J/R/C . . VP/J NPr+  .\n>\n#\n> “ Then      you    should say    what   you    mean     , ” the March   Hare      went    on  .\n# . NSg/J/R/C ISgPl+ VXB    NSg/VB NSg/I+ ISgPl+ NSg/VB/J . . D+  NPr/VB+ NSg/VB/J+ NSg/VPt J/P .\n>\n#\n> “ I       do  , ” Alice hastily replied ; “ at    least    — at    least    I       mean     what   I       say    — that’s the\n# . ISg/#r+ VXB . . NPr+  R       VP/J    . . NSg/P NSg/J/Dq . NSg/P NSg/J/Dq ISg/#r+ NSg/VB/J NSg/I+ ISg/#r+ NSg/VB . NSg$   D+\n> same thing , you    know . ”\n# I/J  NSg+  . ISgPl+ VB   . .\n>\n#\n> “ Not     the same thing a    bit      ! ” said the Hatter . “ You    might    just as    well       say    that          ‘          I\n# . NSg/R/C D+  I/J+ NSg+  D/P+ NSg/VPt+ . . VP/J D   NSg/VB . . ISgPl+ Nᴹ/VXB/J J/R  R/C/P NSg/VB/J/R NSg/VB NSg/I/C/Ddem+ Unlintable ISg/#r+\n> see    what   I       eat ’ is  the same thing as    ‘          I       eat what   I       see    ’ ! ”\n# NSg/VB NSg/I+ ISg/#r+ VB  . VL3 D+  I/J+ NSg+  R/C/P Unlintable ISg/#r+ VB  NSg/I+ ISg/#r+ NSg/VB . . .\n>\n#\n> “ You    might    just as    well       say    , ” added the March   Hare      , “ that          ‘          I       like         what   I       get    ’ is\n# . ISgPl+ Nᴹ/VXB/J J/R  R/C/P NSg/VB/J/R NSg/VB . . VP/J  D+  NPr/VB+ NSg/VB/J+ . . NSg/I/C/Ddem+ Unlintable ISg/#r+ NSg/VB/J/C/P NSg/I+ ISg/#r+ NSg/VB . VL3\n> the same thing as    ‘          I       get    what   I       like         ’ ! ”\n# D+  I/J+ NSg+  R/C/P Unlintable ISg/#r+ NSg/VB NSg/I+ ISg/#r+ NSg/VB/J/C/P . . .\n>\n#\n> “ You    might    just as    well       say    , ” added the Dormouse , who    seemed to be       talking in\n# . ISgPl+ Nᴹ/VXB/J J/R  R/C/P NSg/VB/J/R NSg/VB . . VP/J  D   NSg      . NPr/I+ VP/J   P  NSg/VLXB Nᴹ/Vg/J NPr/J/R/P\n> his     sleep    , “ that          ‘          I       breathe when    I       sleep   ’ is  the same thing as    ‘          I       sleep   when    I\n# ISg/D$+ N🅪Sg/VB+ . . NSg/I/C/Ddem+ Unlintable ISg/#r+ VB      NSg/I/C ISg/#r+ N🅪Sg/VB . VL3 D   I/J  NSg+  R/C/P Unlintable ISg/#r+ N🅪Sg/VB NSg/I/C ISg/#r+\n> breathe ’ ! ”\n# VB      . . .\n>\n#\n> “ It       is  the same thing with you    , ” said the Hatter , and  here the conversation\n# . NPr/ISg+ VL3 D   I/J  NSg   P    ISgPl+ . . VP/J D   NSg/VB . VB/C J/R  D   N🅪Sg/VB+\n> dropped , and  the party     sat      silent for   a   minute    , while      Alice thought over    all          she\n# VP/J    . VB/C D   NSg/VB/J+ NSg/VP/J NSg/J  R/C/P D/P NSg/VB/J+ . NSg/VB/C/P NPr+  N🅪Sg/VP NSg/J/P NSg/I/J/C/Dq ISg+\n> could   remember about ravens and  writing - desks   , which wasn’t much         .\n# NSg/VXB NSg/VB   J/P   NPl/V3 VB/C Nᴹ/Vg/J . NPl/V3+ . I/C+  VPt    NSg/I/J/R/Dq .\n>\n#\n> The Hatter was  the first  to break  the silence . “ What   day    of the month  is  it       ? ” he\n# D   NSg/VB VLPt D   NSg/J+ P  NSg/VB D   NSg/VB+ . . NSg/I+ NPr🅪Sg P  D+  NSg/J+ VL3 NPr/ISg+ . . NPr/ISg+\n> said , turning to Alice : he       had taken his     watch  out          of his     pocket    , and  was\n# VP/J . Nᴹ/Vg/J P  NPr+  . NPr/ISg+ VP  VPp/J ISg/D$+ NSg/VB NSg/VB/J/R/P P  ISg/D$+ NSg/VB/J+ . VB/C VLPt\n> looking at    it       uneasily , shaking it       every now       and  then      , and  holding it       to his\n# Nᴹ/Vg/J NSg/P NPr/ISg+ R        . Nᴹ/Vg/J NPr/ISg+ Dq    NSg/J/R/C VB/C NSg/J/R/C . VB/C Nᴹ/Vg/J NPr/ISg+ P  ISg/D$+\n> ear       .\n# NSg/VB/J+ .\n>\n#\n> Alice considered a   little     , and  then      said “ The fourth   . ”\n# NPr+  VP/J       D/P NPr/I/J/Dq . VB/C NSg/J/R/C VP/J . D   NPr/VB/J . .\n>\n#\n> “ Two  days wrong      ! ” sighed the Hatter . “ I       told you    butter  wouldn’t suit    the\n# . NSg+ NPl+ NSg/VB/J/R . . VP/J   D   NSg/VB . . ISg/#r+ VP   ISgPl+ NSg/VB+ VXB      NSg/VB+ D\n> works   ! ” he       added looking angrily at    the March   Hare      .\n# NPl/V3+ . . NPr/ISg+ VP/J  Nᴹ/Vg/J R       NSg/P D+  NPr/VB+ NSg/VB/J+ .\n>\n#\n> “ It       was  the best       butter , ” the March   Hare      meekly replied .\n# . NPr/ISg+ VLPt D   NPr/VXB/JS NSg/VB . . D+  NPr/VB+ NSg/VB/J+ R      VP/J    .\n>\n#\n> “ Yes    , but     some      crumbs  must    have    got in        as    well       , ” the Hatter grumbled : “ you\n# . NPl/VB . NSg/C/P I/J/R/Dq+ NPl/V3+ NSg/VXB NSg/VXB VP  NPr/J/R/P R/C/P NSg/VB/J/R . . D   NSg/VB VP/J     . . ISgPl+\n> shouldn’t have    put     it       in        with the bread    - knife   . ”\n# VXB       NSg/VXB NSg/VBP NPr/ISg+ NPr/J/R/P P    D   N🅪Sg/VB+ . NSg/VB+ . .\n>\n#\n> The March   Hare      took the watch  and  looked at    it       gloomily : then      he       dipped it       into\n# D+  NPr/VB+ NSg/VB/J+ VPt  D   NSg/VB VB/C VP/J   NSg/P NPr/ISg+ R        . NSg/J/R/C NPr/ISg+ VP/J   NPr/ISg+ P\n> his     cup    of tea      , and  looked at    it       again : but     he       could   think  of nothing  better     to\n# ISg/D$+ NSg/VB P  N🅪Sg/VB+ . VB/C VP/J   NSg/P NPr/ISg+ P     . NSg/C/P NPr/ISg+ NSg/VXB NSg/VB P  NSg/I/J+ NSg/VXB/JC P\n> say    than his     first remark  , “ It       was  the best       butter  , you    know . ”\n# NSg/VB C/P  ISg/D$+ NSg/J NSg/VB+ . . NPr/ISg+ VLPt D   NPr/VXB/JS NSg/VB+ . ISgPl+ VB   . .\n>\n#\n> Alice had been     looking over    his     shoulder with some      curiosity . “ What   a    funny\n# NPr+  VP  NSg/VLPp Nᴹ/Vg/J NSg/J/P ISg/D$+ NSg/VB+  P    I/J/R/Dq+ NSg+      . . NSg/I+ D/P+ NSg/J+\n> watch   ! ” she  remarked . “ It       tells  the day    of the month  , and  doesn’t tell   what\n# NSg/VB+ . . ISg+ VP/J     . . NPr/ISg+ NPl/V3 D   NPr🅪Sg P  D+  NSg/J+ . VB/C VX3     NPr/VB NSg/I+\n> o’clock it       is  ! ”\n# R       NPr/ISg+ VL3 . .\n>\n#\n> “ Why    should it       ? ” muttered the Hatter . “ Does    your watch  tell   you    what   year it\n# . NSg/VB VXB    NPr/ISg+ . . VP/J     D   NSg/VB . . NPl/VX3 D$+  NSg/VB NPr/VB ISgPl+ NSg/I+ NSg+ NPr/ISg+\n> is  ? ”\n# VL3 . .\n>\n#\n> “ Of course  not     , ” Alice replied very readily : “ but     that’s because it       stays  the\n# . P  NSg/VB+ NSg/R/C . . NPr+  VP/J    J/R  R       . . NSg/C/P NSg$   C/P     NPr/ISg+ NPl/V3 D\n> same year for   such  a   long     time       together . ”\n# I/J  NSg+ R/C/P NSg/I D/P NPr/VB/J N🅪Sg/VB/J+ J        . .\n>\n#\n> “ Which is  just the case      with mine      , ” said the Hatter .\n# . I/C+  VL3 J/R  D   NPr🅪Sg/VB P    NSg/I/VB+ . . VP/J D   NSg/VB .\n>\n#\n> Alice felt      dreadfully puzzled , The Hatter’s remark  seemed to have    no       sort   of\n# NPr+  N🅪Sg/VP/J R          VP/J    . D   NSg$     NSg/VB+ VP/J   P  NSg/VXB NSg/Dq/P NSg/VB P\n> meaning    in        it       , and  yet      it       was  certainly English      . “ I       don’t quite understand you    , ”\n# N🅪Sg/Vg/J+ NPr/J/R/P NPr/ISg+ . VB/C NSg/VB/C NPr/ISg+ VLPt R         NPr🅪Sg/VB/J+ . . ISg/#r+ VXB   R     VB         ISgPl+ . .\n> she  said , as    politely as    she  could   .\n# ISg+ VP/J . R/C/P R        R/C/P ISg+ NSg/VXB .\n>\n#\n> “ The Dormouse is  asleep again , ” said the Hatter , and  he       poured a   little     hot      tea\n# . D   NSg      VL3 J      P     . . VP/J D   NSg/VB . VB/C NPr/ISg+ VP/J   D/P NPr/I/J/Dq NSg/VB/J N🅪Sg/VB+\n> upon its     nose    .\n# P    ISg/D$+ NSg/VB+ .\n>\n#\n> The Dormouse shook     its     head      impatiently , and  said , without opening its     eyes    , “ Of\n# D   NSg      NSg/VPt/J ISg/D$+ NPr/VB/J+ R           . VB/C VP/J . C/P     Nᴹ/Vg/J ISg/D$+ NPl/V3+ . . P\n> course  , of course  ; just what   I       was  going   to remark myself . ”\n# NSg/VB+ . P  NSg/VB+ . J/R  NSg/I+ ISg/#r+ VLPt Nᴹ/Vg/J P  NSg/VB ISg+   . .\n>\n#\n> “ Have    you    guessed the riddle  yet      ? ” the Hatter said , turning to Alice again .\n# . NSg/VXB ISgPl+ VP/J    D+  NPr/VB+ NSg/VB/C . . D   NSg/VB VP/J . Nᴹ/Vg/J P  NPr+  P     .\n>\n#\n> “ No       , I       give   it       up         , ” Alice replied : “ what’s the answer  ? ”\n# . NSg/Dq/P . ISg/#r+ NSg/VB NPr/ISg+ NSg/VB/J/P . . NPr+  VP/J    . . K      D+  NSg/VB+ . .\n>\n#\n> “ I       haven’t the slightest idea , ” said the Hatter .\n# . ISg/#r+ VXB     D+  JS        NSg+ . . VP/J D   NSg/VB .\n>\n#\n> “ Nor   I       , ” said the March   Hare      .\n# . NSg/C ISg/#r+ . . VP/J D+  NPr/VB+ NSg/VB/J+ .\n>\n#\n> Alice sighed wearily . “ I       think  you    might    do  something better     with the time       , ” she\n# NPr+  VP/J   R       . . ISg/#r+ NSg/VB ISgPl+ Nᴹ/VXB/J VXB NSg/I/J+  NSg/VXB/JC P    D+  N🅪Sg/VB/J+ . . ISg+\n> said , “ than waste     it       in        asking  riddles that          have    no       answers . ”\n# VP/J . . C/P  NSg/VB/J+ NPr/ISg+ NPr/J/R/P Nᴹ/Vg/J NPl/V3  NSg/I/C/Ddem+ NSg/VXB NSg/Dq/P NPl/V3+ . .\n>\n#\n> “ If    you    knew Time       as    well       as    I       do  , ” said the Hatter , “ you    wouldn’t talk    about\n# . NSg/C ISgPl+ VPt  N🅪Sg/VB/J+ R/C/P NSg/VB/J/R R/C/P ISg/#r+ VXB . . VP/J D   NSg/VB . . ISgPl+ VXB      N🅪Sg/VB J/P\n> wasting it       . It’s him  . ”\n# Nᴹ/Vg/J NPr/ISg+ . K    ISg+ . .\n>\n#\n> “ I       don’t know what   you    mean     , ” said Alice .\n# . ISg/#r+ VXB   VB   NSg/I+ ISgPl+ NSg/VB/J . . VP/J NPr+  .\n>\n#\n> “ Of course  you    don’t ! ” the Hatter said , tossing his     head      contemptuously . “ I       dare\n# . P  NSg/VB+ ISgPl+ VXB   . . D   NSg/VB VP/J . Nᴹ/Vg/J ISg/D$+ NPr/VB/J+ R              . . ISg/#r+ NPr/VXB\n> say    you    never even       spoke   to Time      ! ”\n# NSg/VB ISgPl+ R     NSg/VB/J/R NSg/VPt P  N🅪Sg/VB/J . .\n>\n#\n> “ Perhaps not     , ” Alice cautiously replied : “ but     I       know I       have    to beat      time       when    I\n# . NSg/R   NSg/R/C . . NPr+  R          VP/J    . . NSg/C/P ISg/#r+ VB   ISg/#r+ NSg/VXB P  N🅪Sg/VB/J N🅪Sg/VB/J+ NSg/I/C ISg/#r+\n> learn  music      . ”\n# NSg/VB N🅪Sg/VB/J+ . .\n>\n#\n> “ Ah       ! that          accounts for   it       , ” said the Hatter . “ He       won’t stand  beating . Now       , if\n# . NSg/I/VB . NSg/I/C/Ddem+ NPl/V3+  R/C/P NPr/ISg+ . . VP/J D   NSg/VB . . NPr/ISg+ VXB   NSg/VB Nᴹ/Vg/J . NSg/J/R/C . NSg/C\n> you    only  kept on  good     terms   with him  , he’d do  almost anything  you    liked with the\n# ISgPl+ J/R/C VP   J/P NPr/VB/J NPl/V3+ P    ISg+ . K    VXB R      NSg/I/VB+ ISgPl+ VP/J  P    D\n> clock   . For   instance , suppose it       were     nine o’clock in        the morning    , just time       to\n# NSg/VB+ . R/C/P NSg/VB+  . VB      NPr/ISg+ NSg/VLPt NSg  R       NPr/J/R/P D+  N🅪Sg/Vg/J+ . J/R  N🅪Sg/VB/J+ P\n> begin  lessons : you’d only  have    to whisper a   hint    to Time      , and  round      goes   the\n# NSg/VB NPl/V3+ . K     J/R/C NSg/VXB P  NSg/VB  D/P NSg/VB+ P  N🅪Sg/VB/J . VB/C NSg/VB/J/P NPl/V3 D\n> clock   in        a   twinkling ! Half      - past       one     , time      for   dinner   ! ”\n# NSg/VB+ NPr/J/R/P D/P N🅪Sg/Vg/J . N🅪Sg/J/P+ . NSg/VB/J/P NSg/I/J . N🅪Sg/VB/J R/C/P N🅪Sg/VB+ . .\n>\n#\n> ( “ I       only  wish   it       was  , ” the March   Hare      said to itself in        a    whisper . )\n# . . ISg/#r+ J/R/C NSg/VB NPr/ISg+ VLPt . . D+  NPr/VB+ NSg/VB/J+ VP/J P  ISg+   NPr/J/R/P D/P+ NSg/VB+ . .\n>\n#\n> “ That          would be       grand , certainly , ” said Alice thoughtfully : “ but     then      — I       shouldn’t\n# . NSg/I/C/Ddem+ VXB   NSg/VLXB NSg/J . R         . . VP/J NPr+  R            . . NSg/C/P NSg/J/R/C . ISg/#r+ VXB\n> be       hungry for   it       , you    know . ”\n# NSg/VLXB J      R/C/P NPr/ISg+ . ISgPl+ VB   . .\n>\n#\n> “ Not     at    first , perhaps , ” said the Hatter : “ but     you    could   keep   it       to half     - past\n# . NSg/R/C NSg/P NSg/J . NSg/R   . . VP/J D   NSg/VB . . NSg/C/P ISgPl+ NSg/VXB NSg/VB NPr/ISg+ P  N🅪Sg/J/P . NSg/VB/J/P\n> one     as    long     as    you    liked . ”\n# NSg/I/J R/C/P NPr/VB/J R/C/P ISgPl+ VP/J  . .\n>\n#\n> “ Is  that         the way    you    manage ? ” Alice asked .\n# . VL3 NSg/I/C/Ddem D+  NSg/J+ ISgPl+ NSg/VB . . NPr+  VP/J  .\n>\n#\n> The Hatter shook     his     head      mournfully . “ Not     I       ! ” he       replied . “ We   quarrelled last\n# D   NSg/VB NSg/VPt/J ISg/D$+ NPr/VB/J+ R          . . NSg/R/C ISg/#r+ . . NPr/ISg+ VP/J    . . IPl+ VP/Comm    NSg/VB/J\n> March   — just before he       went    mad      , you    know — ” ( pointing with his     tea      spoon   at    the\n# NPr/VB+ . J/R  C/P    NPr/ISg+ NSg/VPt NSg/VB/J . ISgPl+ VB   . . . Nᴹ/Vg/J  P    ISg/D$+ N🅪Sg/VB+ NSg/VB+ NSg/P D\n> March   Hare      , ) “ — it       was  at    the great concert given       by    the Queen    of Hearts  , and  I\n# NPr/VB+ NSg/VB/J+ . . . . NPr/ISg+ VLPt NSg/P D   NSg/J NSg/VB+ NSg/VPp/J/P NSg/P D   NPr/VB/J P  NPl/V3+ . VB/C ISg/#r+\n> had to sing\n# VP  P  NSg/VB/J\n>\n#\n> ‘          Twinkle , twinkle , little     bat     ! How   I       wonder  what   you’re at    ! ’\n# Unlintable NSg/VB  . NSg/VB  . NPr/I/J/Dq NSg/VB+ . NSg/C ISg/#r+ N🅪Sg/VB NSg/I+ K      NSg/P . .\n>\n#\n> You    know the song  , perhaps ? ”\n# ISgPl+ VB   D+  N🅪Sg+ . NSg/R   . .\n>\n#\n> “ I’ve heard something like         it       , ” said Alice .\n# . K    VP/J  NSg/I/J+  NSg/VB/J/C/P NPr/ISg+ . . VP/J NPr+  .\n>\n#\n> “ It       goes   on  , you    know , ” the Hatter continued , “ in        this   way    : —\n# . NPr/ISg+ NPl/V3 J/P . ISgPl+ VB   . . D   NSg/VB VP/J      . . NPr/J/R/P I/Ddem NSg/J+ . .\n>\n#\n> ‘          Up         above   the world   you    fly      , Like         a   tea      - tray   in        the sky      . Twinkle , twinkle — ’ ”\n# Unlintable NSg/VB/J/P NSg/J/P D+  NSg/VB+ ISgPl+ NSg/VB/J . NSg/VB/J/C/P D/P N🅪Sg/VB+ . NSg/VB NPr/J/R/P D+  N🅪Sg/VB+ . NSg/VB  . NSg/VB  . . .\n>\n#\n> Here the Dormouse shook     itself , and  began singing in        its     sleep    “ Twinkle ,\n# J/R  D   NSg      NSg/VPt/J ISg+   . VB/C VPt   Nᴹ/Vg/J NPr/J/R/P ISg/D$+ N🅪Sg/VB+ . NSg/VB  .\n> twinkle , twinkle , twinkle — ” and  went    on  so          long     that         they had to pinch  it       to\n# NSg/VB  . NSg/VB  . NSg/VB  . . VB/C NSg/VPt J/P NSg/I/J/R/C NPr/VB/J NSg/I/C/Ddem IPl+ VP  P  NSg/VB NPr/ISg+ P\n> make   it       stop   .\n# NSg/VB NPr/ISg+ NSg/VB .\n>\n#\n> “ Well       , I’d hardly finished the first verse  , ” said the Hatter , “ when    the Queen\n# . NSg/VB/J/R . K   R      VP/J     D   NSg/J NSg/VB . . VP/J D   NSg/VB . . NSg/I/C D   NPr/VB/J+\n> jumped up         and  bawled out          , ‘          He’s murdering the time       ! Off        with his     head      ! ’ ”\n# VP/J   NSg/VB/J/P VB/C VP/J   NSg/VB/J/R/P . Unlintable NPr$ Nᴹ/Vg/J+  D   N🅪Sg/VB/J+ . NSg/VB/J/P P    ISg/D$+ NPr/VB/J+ . . .\n>\n#\n> “ How   dreadfully savage    ! ” exclaimed Alice .\n# . NSg/C R          NPr/VB/J+ . . VP/J      NPr+  .\n>\n#\n> “ And  ever since that          , ” the Hatter went    on  in        a   mournful tone       , “ he       won’t do  a\n# . VB/C J/R  C/P   NSg/I/C/Ddem+ . . D   NSg/VB NSg/VPt J/P NPr/J/R/P D/P J        N🅪Sg/I/VB+ . . NPr/ISg+ VXB   VXB D/P\n> thing I       ask    ! It’s always six o’clock now       . ”\n# NSg+  ISg/#r+ NSg/VB . K    R      NSg R       NSg/J/R/C . .\n>\n#\n> A    bright    idea came      into Alice’s head      . “ Is  that         the reason   so          many       tea      - things are\n# D/P+ NPr/VB/J+ NSg+ NSg/VPt/P P    NPr$    NPr/VB/J+ . . VL3 NSg/I/C/Ddem D+  N🅪Sg/VB+ NSg/I/J/R/C NSg/I/J/Dq N🅪Sg/VB+ . NPl+   VLB\n> put     out          here ? ” she  asked .\n# NSg/VBP NSg/VB/J/R/P J/R  . . ISg+ VP/J  .\n>\n#\n> “ Yes    , that’s it       , ” said the Hatter with a   sigh   : “ it’s always tea      - time       , and  we’ve\n# . NPl/VB . NSg$   NPr/ISg+ . . VP/J D   NSg/VB P    D/P NSg/VB . . K    R      N🅪Sg/VB+ . N🅪Sg/VB/J+ . VB/C K\n> no       time       to wash   the things between whiles . ”\n# NSg/Dq/P N🅪Sg/VB/J+ P  NPr/VB D   NPl+   NSg/P   NPl/V3 . .\n>\n#\n> “ Then      you    keep   moving  round      , I       suppose ? ” said Alice .\n# . NSg/J/R/C ISgPl+ NSg/VB Nᴹ/Vg/J NSg/VB/J/P . ISg/#r+ VB      . . VP/J NPr+  .\n>\n#\n> “ Exactly so          , ” said the Hatter : “ as    the things get    used up         . ”\n# . R       NSg/I/J/R/C . . VP/J D   NSg/VB . . R/C/P D   NPl+   NSg/VB VP/J NSg/VB/J/P . .\n>\n#\n> “ But     what   happens when    you    come       to the beginning again ? ” Alice ventured to ask    .\n# . NSg/C/P NSg/I+ V3      NSg/I/C ISgPl+ NSg/VBPp/P P  D+  NSg/Vg/J+ P     . . NPr+  VP/J     P  NSg/VB .\n>\n#\n> “ Suppose we   change  the subject   , ” the March   Hare      interrupted , yawning . “ I’m\n# . VB      IPl+ N🅪Sg/VB D+  NSg/VB/J+ . . D+  NPr/VB+ NSg/VB/J+ VP/J        . Nᴹ/Vg/J . . K\n> getting tired of this    . I       vote   the young     lady    tells  us       a    story   . ”\n# NSg/Vg  VP/J  P  I/Ddem+ . ISg/#r+ NSg/VB D+  NPr/VB/J+ NPr/VB+ NPl/V3 NPr/IPl+ D/P+ NSg/VB+ . .\n>\n#\n> “ I’m afraid I       don’t know one     , ” said Alice , rather     alarmed at    the proposal .\n# . K   J      ISg/#r+ VXB   VB   NSg/I/J . . VP/J NPr+  . NPr/VB/J/R VP/J    NSg/P D   NSg+     .\n>\n#\n> “ Then      the Dormouse shall ! ” they both   cried . “ Wake   up         , Dormouse ! ” And  they\n# . NSg/J/R/C D   NSg      VXB   . . IPl+ I/C/Dq VP/J  . . NPr/VB NSg/VB/J/P . NSg      . . VB/C IPl+\n> pinched it       on  both   sides   at    once  .\n# VP/J    NPr/ISg+ J/P I/C/Dq NPl/V3+ NSg/P NSg/C .\n>\n#\n> The Dormouse slowly opened his     eyes    . “ I       wasn’t asleep , ” he       said in        a   hoarse   ,\n# D   NSg      R      VP/J   ISg/D$+ NPl/V3+ . . ISg/#r+ VPt    J      . . NPr/ISg+ VP/J NPr/J/R/P D/P NSg/VB/J .\n> feeble voice   : “ I       heard every word    you    fellows were     saying    . ”\n# VB/J   NSg/VB+ . . ISg/#r+ VP/J  Dq    NSg/VB+ ISgPl+ NPl+    NSg/VLPt N🅪Sg/Vg/J . .\n>\n#\n> “ Tell   us       a    story   ! ” said the March   Hare      .\n# . NPr/VB NPr/IPl+ D/P+ NSg/VB+ . . VP/J D+  NPr/VB+ NSg/VB/J+ .\n>\n#\n> “ Yes    , please do  ! ” pleaded Alice .\n# . NPl/VB . VB     VXB . . VP/J    NPr+  .\n>\n#\n> “ And  be       quick    about it       , ” added the Hatter , “ or    you’ll be       asleep again before\n# . VB/C NSg/VLXB NSg/VB/J J/P   NPr/ISg+ . . VP/J  D   NSg/VB . . NPr/C K      NSg/VLXB J      P     C/P\n> it’s done      . ”\n# K    NSg/VPp/J . .\n>\n#\n> “ Once  upon a    time       there were     three little      sisters , ” the Dormouse began in        a\n# . NSg/C P    D/P+ N🅪Sg/VB/J+ R+    NSg/VLPt NSg+  NPr/I/J/Dq+ NPl/V3+ . . D   NSg      VPt   NPr/J/R/P D/P\n> great hurry   ; “ and  their names   were     Elsie , Lacie , and  Tillie ; and  they lived at\n# NSg/J NSg/VB+ . . VB/C D$+   NPl/V3+ NSg/VLPt NPr   . ?     . VB/C ?      . VB/C IPl+ VP/J  NSg/P\n> the bottom   of a   well        — ”\n# D   NSg/VB/J P  D/P NSg/VB/J/R+ . .\n>\n#\n> “ What   did  they live on  ? ” said Alice , who    always took a   great interest in\n# . NSg/I+ VXPt IPl+ VB/J J/P . . VP/J NPr+  . NPr/I+ R      VPt  D/P NSg/J N🅪Sg/VB  NPr/J/R/P\n> questions of eating   and  drinking .\n# NPl/V3    P  Nᴹ/Vg/J+ VB/C Nᴹ/Vg/J  .\n>\n#\n> “ They lived on  treacle , ” said the Dormouse , after thinking a   minute    or    two .\n# . IPl+ VP/J  J/P Nᴹ/VB   . . VP/J D   NSg      . P     Nᴹ/Vg/J  D/P NSg/VB/J+ NPr/C NSg .\n>\n#\n> “ They couldn’t have    done      that          , you    know , ” Alice gently remarked ; “ they’d have\n# . IPl+ VXB      NSg/VXB NSg/VPp/J NSg/I/C/Ddem+ . ISgPl+ VB   . . NPr+  R      VP/J     . . K      NSg/VXB\n> been     ill      . ”\n# NSg/VLPp NSg/VB/J . .\n>\n#\n> “ So          they were     , ” said the Dormouse ; “ very ill      . ”\n# . NSg/I/J/R/C IPl+ NSg/VLPt . . VP/J D   NSg      . . J/R  NSg/VB/J . .\n>\n#\n> Alice tried to fancy    to herself what   such  an  extraordinary way   of living  would\n# NPr+  VP/J  P  NSg/VB/J P  ISg+    NSg/I+ NSg/I D/P NSg/J         NSg/J P  Nᴹ/Vg/J VXB\n> be       like         , but     it       puzzled her     too much         , so          she  went    on  : “ But     why    did  they live at\n# NSg/VLXB NSg/VB/J/C/P . NSg/C/P NPr/ISg+ VP/J    ISg/D$+ R   NSg/I/J/R/Dq . NSg/I/J/R/C ISg+ NSg/VPt J/P . . NSg/C/P NSg/VB VXPt IPl+ VB/J NSg/P\n> the bottom   of a    well        ? ”\n# D   NSg/VB/J P  D/P+ NSg/VB/J/R+ . .\n>\n#\n> “ Take   some      more          tea      , ” the March   Hare      said to Alice , very earnestly .\n# . NSg/VB I/J/R/Dq+ NPr/I/J/R/Dq+ N🅪Sg/VB+ . . D+  NPr/VB+ NSg/VB/J+ VP/J P  NPr+  . J/R  R         .\n>\n#\n> “ I’ve had nothing  yet      , ” Alice replied in        an  offended tone       , “ so          I       can’t take\n# . K    VP  NSg/I/J+ NSg/VB/C . . NPr+  VP/J    NPr/J/R/P D/P VP/J     N🅪Sg/I/VB+ . . NSg/I/J/R/C ISg/#r+ VXB   NSg/VB\n> more         . ”\n# NPr/I/J/R/Dq . .\n>\n#\n> “ You    mean     you    can’t take   less       , ” said the Hatter : “ it’s very easy     to take   more\n# . ISgPl+ NSg/VB/J ISgPl+ VXB   NSg/VB VB/J/R/C/P . . VP/J D   NSg/VB . . K    J/R  NSg/VB/J P  NSg/VB NPr/I/J/R/Dq\n> than nothing  . ”\n# C/P  NSg/I/J+ . .\n>\n#\n> “ Nobody asked your opinion , ” said Alice .\n# . NSg/I+ VP/J  D$+  N🅪Sg+   . . VP/J NPr+  .\n>\n#\n> “ Who’s making  personal remarks now       ? ” the Hatter asked triumphantly .\n# . NPr$  Nᴹ/Vg/J NSg/J+   NPl/V3+ NSg/J/R/C . . D   NSg/VB VP/J  R            .\n>\n#\n> Alice did  not     quite know what   to say    to this    : so          she  helped herself to some     tea\n# NPr+  VXPt NSg/R/C R     VB   NSg/I+ P  NSg/VB P  I/Ddem+ . NSg/I/J/R/C ISg+ VP/J   ISg+    P  I/J/R/Dq N🅪Sg/VB\n> and  bread    - and  - butter  , and  then      turned to the Dormouse , and  repeated her\n# VB/C N🅪Sg/VB+ . VB/C . NSg/VB+ . VB/C NSg/J/R/C VP/J   P  D   NSg      . VB/C VP/J     ISg/D$+\n> question . “ Why    did  they live at    the bottom   of a    well        ? ”\n# NSg/VB+  . . NSg/VB VXPt IPl+ VB/J NSg/P D   NSg/VB/J P  D/P+ NSg/VB/J/R+ . .\n>\n#\n> The Dormouse again took a   minute    or    two to think  about it       , and  then      said , “ It\n# D   NSg      P     VPt  D/P NSg/VB/J+ NPr/C NSg P  NSg/VB J/P   NPr/ISg+ . VB/C NSg/J/R/C VP/J . . NPr/ISg+\n> was  a   treacle - well       . ”\n# VLPt D/P Nᴹ/VB   . NSg/VB/J/R . .\n>\n#\n> “ There’s no        such  thing ! ” Alice was  beginning very angrily , but     the Hatter and\n# . K       NSg/Dq/P+ NSg/I NSg+  . . NPr+  VLPt NSg/Vg/J+ J/R  R       . NSg/C/P D   NSg/VB VB/C\n> the March   Hare      went    “ Sh ! sh ! ” and  the Dormouse sulkily remarked , “ If    you    can’t\n# D   NPr/VB+ NSg/VB/J+ NSg/VPt . W? . W? . . VB/C D   NSg      R       VP/J     . . NSg/C ISgPl+ VXB\n> be       civil , you’d better     finish the story   for   yourself . ”\n# NSg/VLXB J     . K     NSg/VXB/JC NSg/VB D   NSg/VB+ R/C/P ISg+     . .\n>\n#\n> “ No       , please go       on  ! ” Alice said very humbly ; “ I       won’t interrupt again . I       dare    say\n# . NSg/Dq/P . VB     NSg/VB/J J/P . . NPr+  VP/J J/R  R      . . ISg/#r+ VXB   NSg/VB    P     . ISg/#r+ NPr/VXB NSg/VB\n> there may     be       one     . ”\n# R+    NPr/VXB NSg/VLXB NSg/I/J . .\n>\n#\n> “ One     , indeed ! ” said the Dormouse indignantly . However , he       consented to go       on  .\n# . NSg/I/J . R      . . VP/J D   NSg      R           . C       . NPr/ISg+ VP/J      P  NSg/VB/J J/P .\n> “ And  so          these   three little      sisters — they were     learning to draw   , you    know — ”\n# . VB/C NSg/I/J/R/C I/Ddem+ NSg+  NPr/I/J/Dq+ NPl/V3+ . IPl+ NSg/VLPt Nᴹ/Vg/J  P  NSg/VB . ISgPl+ VB   . .\n>\n#\n> “ What   did  they draw   ? ” said Alice , quite forgetting her     promise .\n# . NSg/I+ VXPt IPl+ NSg/VB . . VP/J NPr+  . R     NSg/Vg     ISg/D$+ NSg/VB+ .\n>\n#\n> “ Treacle , ” said the Dormouse , without considering at    all          this   time       .\n# . Nᴹ/VB   . . VP/J D   NSg      . C/P     Nᴹ/Vg/J     NSg/P NSg/I/J/C/Dq I/Ddem N🅪Sg/VB/J+ .\n>\n#\n> “ I       want   a    clean     cup     , ” interrupted the Hatter : “ let’s all          move   one     place    on  . ”\n# . ISg/#r+ NSg/VB D/P+ NSg/VB/J+ NSg/VB+ . . VP/J        D   NSg/VB . . NSg$  NSg/I/J/C/Dq NSg/VB NSg/I/J N🅪Sg/VB+ J/P . .\n>\n#\n> He       moved on  as    he       spoke   , and  the Dormouse followed him  : the March   Hare      moved\n# NPr/ISg+ VP/J  J/P R/C/P NPr/ISg+ NSg/VPt . VB/C D   NSg      VP/J     ISg+ . D   NPr/VB+ NSg/VB/J+ VP/J\n> into the Dormouse’s place    , and  Alice rather     unwillingly took the place   of the\n# P    D   NSg$       N🅪Sg/VB+ . VB/C NPr+  NPr/VB/J/R R           VPt  D   N🅪Sg/VB P  D\n> March   Hare      . The Hatter was  the only  one      who    got any    advantage from the change   :\n# NPr/VB+ NSg/VB/J+ . D   NSg/VB VLPt D   J/R/C NSg/I/J+ NPr/I+ VP  I/R/Dq N🅪Sg/VB+  P    D   N🅪Sg/VB+ .\n> and  Alice was  a   good     deal      worse     off        than before , as    the March   Hare      had just\n# VB/C NPr+  VLPt D/P NPr/VB/J NSg/VB/J+ NSg/VB/JC NSg/VB/J/P C/P  C/P    . R/C/P D   NPr/VB+ NSg/VB/J+ VP  J/R\n> upset    the milk     - jug     into his     plate   .\n# NSg/VB/J D   N🅪Sg/VB+ . NSg/VB+ P    ISg/D$+ NSg/VB+ .\n>\n#\n> Alice did  not     wish   to offend the Dormouse again , so          she  began very cautiously :\n# NPr+  VXPt NSg/R/C NSg/VB P  VB     D   NSg      P     . NSg/I/J/R/C ISg+ VPt   J/R  R          .\n> “ But     I       don’t understand . Where   did  they draw   the treacle from ? ”\n# . NSg/C/P ISg/#r+ VXB   VB         . NSg/R/C VXPt IPl+ NSg/VB D   Nᴹ/VB   P    . .\n>\n#\n> “ You    can     draw   water   out          of a    water    - well       , ” said the Hatter ; “ so          I       should think\n# . ISgPl+ NPr/VXB NSg/VB N🅪Sg/VB NSg/VB/J/R/P P  D/P+ N🅪Sg/VB+ . NSg/VB/J/R . . VP/J D   NSg/VB . . NSg/I/J/R/C ISg/#r+ VXB    NSg/VB\n> you    could   draw   treacle out          of a   treacle - well       — eh   , stupid ? ”\n# ISgPl+ NSg/VXB NSg/VB Nᴹ/VB   NSg/VB/J/R/P P  D/P Nᴹ/VB   . NSg/VB/J/R . VB/J . NSg/J  . .\n>\n#\n> “ But     they were     in        the well       , ” Alice said to the Dormouse , not     choosing to notice\n# . NSg/C/P IPl+ NSg/VLPt NPr/J/R/P D   NSg/VB/J/R . . NPr+  VP/J P  D   NSg      . NSg/R/C Nᴹ/Vg/J  P  NSg/VB\n> this   last     remark  .\n# I/Ddem NSg/VB/J NSg/VB+ .\n>\n#\n> “ Of course  they were     , ” said the Dormouse ; “ — well       in        . ”\n# . P  NSg/VB+ IPl+ NSg/VLPt . . VP/J D   NSg      . . . NSg/VB/J/R NPr/J/R/P . .\n>\n#\n> This    answer  so          confused poor      Alice , that         she  let     the Dormouse go       on  for   some\n# I/Ddem+ NSg/VB+ NSg/I/J/R/C VP/J+    NSg/VB/J+ NPr+  . NSg/I/C/Ddem ISg+ NSg/VBP D   NSg      NSg/VB/J J/P R/C/P I/J/R/Dq\n> time       without interrupting it       .\n# N🅪Sg/VB/J+ C/P     Nᴹ/Vg/J      NPr/ISg+ .\n>\n#\n> “ They were     learning to draw   , ” the Dormouse went    on  , yawning and  rubbing its\n# . IPl+ NSg/VLPt Nᴹ/Vg/J  P  NSg/VB . . D   NSg      NSg/VPt J/P . Nᴹ/Vg/J VB/C NSg/Vg  ISg/D$+\n> eyes    , for   it       was  getting very sleepy ; “ and  they drew    all          manner of\n# NPl/V3+ . R/C/P NPr/ISg+ VLPt NSg/Vg  J/R  NSg/J  . . VB/C IPl+ NPr/VPt NSg/I/J/C/Dq NSg    P\n> things — everything that          begins with an  M           — ”\n# NPl+   . NSg/I/VB+  NSg/I/C/Ddem+ NPl/V3 P    D/P NPr/VB/J/#r . .\n>\n#\n> “ Why    with an  M           ? ” said Alice .\n# . NSg/VB P    D/P NPr/VB/J/#r . . VP/J NPr+  .\n>\n#\n> “ Why    not     ? ” said the March   Hare      .\n# . NSg/VB NSg/R/C . . VP/J D+  NPr/VB+ NSg/VB/J+ .\n>\n#\n> Alice was  silent .\n# NPr+  VLPt NSg/J  .\n>\n#\n> The Dormouse had closed its     eyes    by    this   time       , and  was  going   off        into a   doze   ;\n# D   NSg      VP  VP/J   ISg/D$+ NPl/V3+ NSg/P I/Ddem N🅪Sg/VB/J+ . VB/C VLPt Nᴹ/Vg/J NSg/VB/J/P P    D/P NSg/VB .\n> but     , on  being        pinched by    the Hatter , it       woke     up         again with a   little     shriek , and\n# NSg/C/P . J/P N🅪Sg/VLg/J/C VP/J    NSg/P D   NSg/VB . NPr/ISg+ NSg/VB/J NSg/VB/J/P P     P    D/P NPr/I/J/Dq NSg/VB . VB/C\n> went    on  : “ — that          begins with an  M           , such  as    mouse   - traps  , and  the moon    , and  memory ,\n# NSg/VPt J/P . . . NSg/I/C/Ddem+ NPl/V3 P    D/P NPr/VB/J/#r . NSg/I R/C/P NSg/VB+ . NPl/V3 . VB/C D   NPr/VB+ . VB/C N🅪Sg+  .\n> and  muchness — you    know you    say    things are “ much         of a   muchness ” — did  you    ever see\n# VB/C NSg      . ISgPl+ VB   ISgPl+ NSg/VB NPl+   VLB . NSg/I/J/R/Dq P  D/P NSg      . . VXPt ISgPl+ J/R  NSg/VB\n> such  a   thing as    a   drawing   of a   muchness ? ”\n# NSg/I D/P NSg+  R/C/P D/P N🅪Sg/Vg/J P  D/P NSg      . .\n>\n#\n> “ Really , now       you    ask    me       , ” said Alice , very much         confused , “ I       don’t think  — ”\n# . R      . NSg/J/R/C ISgPl+ NSg/VB NPr/ISg+ . . VP/J NPr+  . J/R  NSg/I/J/R/Dq VP/J     . . ISg/#r+ VXB   NSg/VB . .\n>\n#\n> “ Then      you    shouldn’t talk    , ” said the Hatter .\n# . NSg/J/R/C ISgPl+ VXB       N🅪Sg/VB . . VP/J D   NSg/VB .\n>\n#\n> This   piece  of rudeness was  more         than Alice could   bear      : she  got up         in        great\n# I/Ddem NSg/VB P  NSg+     VLPt NPr/I/J/R/Dq C/P  NPr+  NSg/VXB NSg/VB/J+ . ISg+ VP  NSg/VB/J/P NPr/J/R/P NSg/J+\n> disgust , and  walked off        ; the Dormouse fell      asleep instantly , and  neither of the\n# Nᴹ/VB+  . VB/C VP/J   NSg/VB/J/P . D   NSg      NSg/VPt/J J      R         . VB/C I/C     P  D\n> others  took the least    notice of her     going   , though she  looked back     once  or    twice ,\n# NPl/V3+ VPt  D   NSg/J/Dq NSg/VB P  ISg/D$+ Nᴹ/Vg/J . C      ISg+ VP/J   NSg/VB/J NSg/C NPr/C R     .\n> half      hoping  that         they would call   after her     : the last     time       she  saw     them     , they\n# N🅪Sg/J/P+ Nᴹ/Vg/J NSg/I/C/Ddem IPl+ VXB   NSg/VB P     ISg/D$+ . D   NSg/VB/J N🅪Sg/VB/J+ ISg+ NSg/VPt NSg/IPl+ . IPl+\n> were     trying  to put     the Dormouse into the teapot .\n# NSg/VLPt Nᴹ/Vg/J P  NSg/VBP D   NSg      P    D   NSg    .\n>\n#\n> “ At    any     rate    I’ll never go       there again ! ” said Alice as    she  picked her     way\n# . NSg/P I/R/Dq+ NSg/VB+ K    R     NSg/VB/J R+    P     . . VP/J NPr+  R/C/P ISg+ VP/J   ISg/D$+ NSg/J+\n> through the wood         . “ It’s the stupidest tea      - party     I       ever was  at    in        all          my  life     ! ”\n# NSg/J/P D+  NPr🅪Sg/VB/J+ . . K    D   JS        N🅪Sg/VB+ . NSg/VB/J+ ISg/#r+ J/R  VLPt NSg/P NPr/J/R/P NSg/I/J/C/Dq D$+ N🅪Sg/VB+ . .\n>\n#\n> Just as    she  said this    , she  noticed that         one     of the trees   had a    door    leading\n# J/R  R/C/P ISg+ VP/J I/Ddem+ . ISg+ VP/J    NSg/I/C/Ddem NSg/I/J P  D+  NPl/V3+ VP  D/P+ NSg/VB+ Nᴹ/Vg/J\n> right    into it       . “ That’s very curious ! ” she  thought . “ But     everything’s curious\n# NPr/VB/J P    NPr/ISg+ . . NSg$   J/R  J       . . ISg+ N🅪Sg/VP . . NSg/C/P NSg$         J+\n> today  . I       think  I       may     as    well       go       in        at    once  . ” And  in        she  went    .\n# NSg/J+ . ISg/#r+ NSg/VB ISg/#r+ NPr/VXB R/C/P NSg/VB/J/R NSg/VB/J NPr/J/R/P NSg/P NSg/C . . VB/C NPr/J/R/P ISg+ NSg/VPt .\n>\n#\n> Once  more         she  found  herself in        the long      hall , and  close    to the little      glass\n# NSg/C NPr/I/J/R/Dq ISg+ NSg/VP ISg+    NPr/J/R/P D+  NPr/VB/J+ NPr+ . VB/C NSg/VB/J P  D+  NPr/I/J/Dq+ NPr🅪Sg/VB+\n> table   . “ Now       , I’ll manage better     this   time       , ” she  said to herself , and  began by\n# NSg/VB+ . . NSg/J/R/C . K    NSg/VB NSg/VXB/JC I/Ddem N🅪Sg/VB/J+ . . ISg+ VP/J P  ISg+    . VB/C VPt   NSg/P\n> taking   the little     golden   key      , and  unlocking the door    that          led      into the garden    .\n# NSg/Vg/J D   NPr/I/J/Dq NPr/VB/J NPr/VB/J . VB/C Nᴹ/Vg/J   D   NSg/VB+ NSg/I/C/Ddem+ NSg/VP/J P    D   NSg/VB/J+ .\n> Then      she  went    to work    nibbling at    the mushroom  ( she  had kept a   piece  of it       in\n# NSg/J/R/C ISg+ NSg/VPt P  N🅪Sg/VB Nᴹ/Vg/J  NSg/P D   N🅪Sg/VB/J . ISg+ VP  VP   D/P NSg/VB P  NPr/ISg+ NPr/J/R/P\n> her     pocket    ) till       she  was  about a   foot    high       : then      she  walked down        the little\n# ISg/D$+ NSg/VB/J+ . NSg/VB/C/P ISg+ VLPt J/P   D/P NSg/VB+ NSg/VB/J/R . NSg/J/R/C ISg+ VP/J   N🅪Sg/VB/J/P D   NPr/I/J/Dq\n> passage   : and  then      — she  found  herself at    last     in        the beautiful garden    , among the\n# NSg/VB/J+ . VB/C NSg/J/R/C . ISg+ NSg/VP ISg+    NSg/P NSg/VB/J NPr/J/R/P D   NSg/J     NSg/VB/J+ . P     D\n> bright   flower  - beds    and  the cool     fountains .\n# NPr/VB/J NSg/VB+ . NPl/V3+ VB/C D   NSg/VB/J NPl/V3    .\n>\n#\n>              CHAPTER VIII : The Queen’s Croquet - Ground\n# HeadingStart NSg/VB+ #r   . D   NPr$    NSg/VB  . N🅪Sg/VB/J+\n>\n#\n> A   large rose       - tree   stood near       the entrance of the garden    : the roses   growing on  it\n# D/P NSg/J NPr/VPt/J+ . NSg/VB VP    NSg/VB/J/P D   NSg/VB   P  D+  NSg/VB/J+ . D+  NPl/V3+ Nᴹ/Vg/J J/P NPr/ISg+\n> were     white       , but     there were     three gardeners at    it       , busily painting   them     red    .\n# NSg/VLPt NPr🅪Sg/VB/J . NSg/C/P R+    NSg/VLPt NSg+  NPl+      NSg/P NPr/ISg+ . R      N🅪Sg/Vg/J+ NSg/IPl+ N🅪Sg/J .\n> Alice thought this   a   very curious thing , and  she  went    nearer to watch  them     , and\n# NPr+  N🅪Sg/VP I/Ddem D/P J/R  J+      NSg+  . VB/C ISg+ NSg/VPt NSg/JC P  NSg/VB NSg/IPl+ . VB/C\n> just as    she  came      up         to them     she  heard one     of them     say    , “ Look   out          now       , Five !\n# J/R  R/C/P ISg+ NSg/VPt/P NSg/VB/J/P P  NSg/IPl+ ISg+ VP/J  NSg/I/J P  NSg/IPl+ NSg/VB . . NSg/VB NSg/VB/J/R/P NSg/J/R/C . NSg  .\n> Don’t go       splashing paint    over    me       like         that          ! ”\n# VXB   NSg/VB/J Nᴹ/Vg/J   N🅪Sg/VB+ NSg/J/P NPr/ISg+ NSg/VB/J/C/P NSg/I/C/Ddem+ . .\n>\n#\n> “ I       couldn’t help   it       , ” said Five , in        a   sulky tone       ; “ Seven jogged my  elbow   . ”\n# . ISg/#r+ VXB      NSg/VB NPr/ISg+ . . VP/J NSg  . NPr/J/R/P D/P NSg/J N🅪Sg/I/VB+ . . NSg   VP     D$+ NSg/VB+ . .\n>\n#\n> On  which Seven looked up         and  said , “ That’s right    , Five ! Always lay        the blame    on\n# J/P I/C+  NSg   VP/J   NSg/VB/J/P VB/C VP/J . . NSg$   NPr/VB/J . NSg  . R      NSg/VBPt/J D   NSg/VB/J J/P\n> others  ! ”\n# NPl/V3+ . .\n>\n#\n> “ You’d better     not     talk    ! ” said Five . “ I       heard the Queen     say    only  yesterday you\n# . K     NSg/VXB/JC NSg/R/C N🅪Sg/VB . . VP/J NSg  . . ISg/#r+ VP/J  D+  NPr/VB/J+ NSg/VB J/R/C NSg       ISgPl+\n> deserved to be       beheaded ! ”\n# VP/J     P  NSg/VLXB VP/J     . .\n>\n#\n> “ What   for   ? ” said the one      who    had spoken first .\n# . NSg/I+ R/C/P . . VP/J D+  NSg/I/J+ NPr/I+ VP  VPp/J  NSg/J .\n>\n#\n> “ That’s none  of your business , Two ! ” said Seven .\n# . NSg$   NSg/I P  D$+  N🅪Sg/J+  . NSg . . VP/J NSg   .\n>\n#\n> “ Yes    , it       is  his     business ! ” said Five , “ and  I’ll tell   him  — it       was  for   bringing the\n# . NPl/VB . NPr/ISg+ VL3 ISg/D$+ N🅪Sg/J+  . . VP/J NSg  . . VB/C K    NPr/VB ISg+ . NPr/ISg+ VLPt R/C/P Nᴹ/Vg/J  D\n> cook   tulip - roots   instead of onions . ”\n# NPr/VB NSg   . NPl/V3+ R       P  NPl+   . .\n>\n#\n> Seven flung down        his     brush   , and  had just begun “ Well       , of all          the unjust things — ”\n# NSg   VB    N🅪Sg/VB/J/P ISg/D$+ NSg/VB+ . VB/C VP  J/R  VPp   . NSg/VB/J/R . P  NSg/I/J/C/Dq D   J      NPl+   . .\n> when    his     eye     chanced to fall    upon Alice , as    she  stood watching them     , and  he\n# NSg/I/C ISg/D$+ NSg/VB+ VP/J    P  N🅪Sg/VB P    NPr+  . R/C/P ISg+ VP    Nᴹ/Vg/J  NSg/IPl+ . VB/C NPr/ISg+\n> checked himself suddenly : the others  looked round      also , and  all          of them     bowed\n# VP/J    ISg+    R        . D   NPl/V3+ VP/J   NSg/VB/J/P R/C  . VB/C NSg/I/J/C/Dq P  NSg/IPl+ VP/J\n> low        .\n# NSg/VB/J/R .\n>\n#\n> “ Would you    tell   me       , ” said Alice , a   little     timidly , “ why    you    are painting  those\n# . VXB   ISgPl+ NPr/VB NPr/ISg+ . . VP/J NPr+  . D/P NPr/I/J/Dq R       . . NSg/VB ISgPl+ VLB N🅪Sg/Vg/J I/Ddem\n> roses   ? ”\n# NPl/V3+ . .\n>\n#\n> Five and  Seven said nothing  , but     looked at    Two . Two began in        a    low         voice   , “ Why\n# NSg  VB/C NSg   VP/J NSg/I/J+ . NSg/C/P VP/J   NSg/P NSg . NSg VPt   NPr/J/R/P D/P+ NSg/VB/J/R+ NSg/VB+ . . NSg/VB\n> the fact is  , you    see    , Miss   , this   here ought     to have    been     a   red    rose      - tree    , and  we\n# D+  NSg+ VL3 . ISgPl+ NSg/VB . NSg/VB . I/Ddem J/R  NSg/I/VXB P  NSg/VXB NSg/VLPp D/P N🅪Sg/J NPr/VPt/J . NSg/VB+ . VB/C IPl+\n> put     a   white       one      in        by    mistake ; and  if    the Queen     was  to find   it       out          , we   should\n# NSg/VBP D/P NPr🅪Sg/VB/J NSg/I/J+ NPr/J/R/P NSg/P NSg/VB+ . VB/C NSg/C D+  NPr/VB/J+ VLPt P  NSg/VB NPr/ISg+ NSg/VB/J/R/P . IPl+ VXB\n> all          have    our heads   cut       off        , you    know . So          you    see    , Miss   , we’re doing   our best       ,\n# NSg/I/J/C/Dq NSg/VXB D$+ NPl/V3+ NSg/VBP/J NSg/VB/J/P . ISgPl+ VB   . NSg/I/J/R/C ISgPl+ NSg/VB . NSg/VB . K     Nᴹ/Vg/J D$+ NPr/VXB/JS .\n> afore she  comes  , to — ” At    this   moment Five , who    had been     anxiously looking across\n# R/C/P ISg+ NPl/V3 . P  . . NSg/P I/Ddem NSg+   NSg  . NPr/I+ VP  NSg/VLPp R         Nᴹ/Vg/J NSg/P\n> the garden    , called out          “ The Queen     ! The Queen     ! ” and  the three gardeners instantly\n# D   NSg/VB/J+ . VP/J   NSg/VB/J/R/P . D   NPr/VB/J+ . D+  NPr/VB/J+ . . VB/C D+  NSg+  NPl+      R\n> threw themselves flat     upon their faces   . There was  a   sound     of many        footsteps , and\n# VPt   IPl+       NSg/VB/J P    D$+   NPl/V3+ . R+    VLPt D/P N🅪Sg/VB/J P  NSg/I/J/Dq+ NPl+      . VB/C\n> Alice looked round      , eager    to see    the Queen     .\n# NPr+  VP/J   NSg/VB/J/P . NSg/VB/J P  NSg/VB D+  NPr/VB/J+ .\n>\n#\n> First came      ten  soldiers carrying clubs   ; these   were     all          shaped like         the three\n# NSg/J NSg/VPt/P NSg+ NPl/V3+  Nᴹ/Vg/J  NPl/V3+ . I/Ddem+ NSg/VLPt NSg/I/J/C/Dq VP/J   NSg/VB/J/C/P D+  NSg+\n> gardeners , oblong   and  flat     , with their hands  and  feet at    the corners : next    the\n# NPl+      . NSg/VB/J VB/C NSg/VB/J . P    D$+   NPl/V3 VB/C NPl+ NSg/P D   NPl/V3+ . NSg/J/P D\n> ten courtiers ; these   were     ornamented all          over     with diamonds , and  walked two and\n# NSg NPl       . I/Ddem+ NSg/VLPt VP/J       NSg/I/J/C/Dq NSg/J/P+ P    NPl/V3   . VB/C VP/J   NSg VB/C\n> two , as    the soldiers did  . After these  came      the royal  children ; there were     ten of\n# NSg . R/C/P D   NPl/V3+  VXPt . P     I/Ddem NSg/VPt/P D+  NPr/J+ NPl+     . R+    NSg/VLPt NSg P\n> them     , and  the little      dears   came      jumping merrily along hand    in        hand    , in        couples :\n# NSg/IPl+ . VB/C D+  NPr/I/J/Dq+ NPl/V3+ NSg/VPt/P Nᴹ/Vg/J R       P     NSg/VB+ NPr/J/R/P NSg/VB+ . NPr/J/R/P NPl/V3+ .\n> they were     all          ornamented with hearts  . Next    came      the guests  , mostly Kings   and\n# IPl+ NSg/VLPt NSg/I/J/C/Dq VP/J       P    NPl/V3+ . NSg/J/P NSg/VPt/P D+  NPl/V3+ . R      NPl/V3+ VB/C\n> Queens   , and  among them     Alice recognised the White       Rabbit  : it       was  talking in        a\n# NPrPl/V3 . VB/C P     NSg/IPl+ NPr+  VP/J/Au/Br D   NPr🅪Sg/VB/J NSg/VB+ . NPr/ISg+ VLPt Nᴹ/Vg/J NPr/J/R/P D/P\n> hurried nervous manner , smiling at    everything that          was  said , and  went    by    without\n# VP/J+   J+      NSg+   . Nᴹ/Vg/J NSg/P NSg/I/VB+  NSg/I/C/Ddem+ VLPt VP/J . VB/C NSg/VPt NSg/P C/P\n> noticing her     . Then      followed the Knave of Hearts  , carrying the King’s crown     on  a\n# Nᴹ/Vg/J  ISg/D$+ . NSg/J/R/C VP/J     D   NSg   P  NPl/V3+ . Nᴹ/Vg/J  D   NPr$   NSg/VB/J+ J/P D/P\n> crimson  velvet   cushion ; and  , last     of all          this   grand procession , came      THE KING\n# NSg/VB/J Nᴹ/VB/J+ NSg/VB+ . VB/C . NSg/VB/J P  NSg/I/J/C/Dq I/Ddem NSg/J NSg/VB+    . NSg/VPt/P D   NPr/VB/J+\n> AND  QUEEN     OF HEARTS  .\n# VB/C NPr/VB/J+ P  NPl/V3+ .\n>\n#\n> Alice was  rather     doubtful whether she  ought     not     to lie    down        on  her     face    like         the\n# NPr+  VLPt NPr/VB/J/R NSg/J    I/C     ISg+ NSg/I/VXB NSg/R/C P  NPr/VB N🅪Sg/VB/J/P J/P ISg/D$+ NSg/VB+ NSg/VB/J/C/P D\n> three gardeners , but     she  could   not     remember ever having  heard of such  a   rule    at\n# NSg   NPl+      . NSg/C/P ISg+ NSg/VXB NSg/R/C NSg/VB   J/R  Nᴹ/Vg/J VP/J  P  NSg/I D/P NSg/VB+ NSg/P\n> processions ; “ and  besides , what   would be       the use     of a   procession , ” thought she  ,\n# NPl         . . VB/C R/P     . NSg/I+ VXB   NSg/VLXB D   N🅪Sg/VB P  D/P NSg/VB+    . . N🅪Sg/VP ISg+ .\n> “ if    people  had all           to lie    down        upon their faces   , so          that         they couldn’t see    it       ? ”\n# . NSg/C NPl/VB+ VP  NSg/I/J/C/Dq+ P  NPr/VB N🅪Sg/VB/J/P P    D$+   NPl/V3+ . NSg/I/J/R/C NSg/I/C/Ddem IPl+ VXB      NSg/VB NPr/ISg+ . .\n> So          she  stood still      where   she  was  , and  waited .\n# NSg/I/J/R/C ISg+ VP    NSg/VB/J/R NSg/R/C ISg+ VLPt . VB/C VP/J   .\n>\n#\n> When    the procession came      opposite to Alice , they all          stopped and  looked at    her     ,\n# NSg/I/C D+  NSg/VB+    NSg/VPt/P NSg/J/P  P  NPr+  . IPl+ NSg/I/J/C/Dq VP/J    VB/C VP/J   NSg/P ISg/D$+ .\n> and  the Queen     said severely “ Who    is  this    ? ” She  said it       to the Knave of Hearts  ,\n# VB/C D+  NPr/VB/J+ VP/J R        . NPr/I+ VL3 I/Ddem+ . . ISg+ VP/J NPr/ISg+ P  D   NSg   P  NPl/V3+ .\n> who    only  bowed and  smiled in        reply   .\n# NPr/I+ J/R/C VP/J  VB/C VP/J   NPr/J/R/P NSg/VB+ .\n>\n#\n> “ Idiot  ! ” said the Queen     , tossing her     head      impatiently ; and  , turning to Alice ,\n# . NSg/J+ . . VP/J D+  NPr/VB/J+ . Nᴹ/Vg/J ISg/D$+ NPr/VB/J+ R           . VB/C . Nᴹ/Vg/J P  NPr+  .\n> she  went    on  , “ What’s your name    , child   ? ”\n# ISg+ NSg/VPt J/P . . K      D$+  NSg/VB+ . NSg/VB+ . .\n>\n#\n> “ My  name    is  Alice , so          please your Majesty , ” said Alice very politely ; but     she\n# . D$+ NSg/VB+ VL3 NPr+  . NSg/I/J/R/C VB     D$+  N🅪Sg/I+ . . VP/J NPr+  J/R  R        . NSg/C/P ISg+\n> added , to herself , “ Why    , they’re only  a   pack   of cards   , after all          . I       needn’t be\n# VP/J  . P  ISg+    . . NSg/VB . K       J/R/C D/P NSg/VB P  NPl/V3+ . P     NSg/I/J/C/Dq . ISg/#r+ VXB     NSg/VLXB\n> afraid of them     ! ”\n# J      P  NSg/IPl+ . .\n>\n#\n> “ And  who    are these  ? ” said the Queen     , pointing to the three gardeners who    were\n# . VB/C NPr/I+ VLB I/Ddem . . VP/J D+  NPr/VB/J+ . Nᴹ/Vg/J  P  D+  NSg+  NPl+      NPr/I+ NSg/VLPt\n> lying   round      the rose       - tree    ; for   , you    see    , as    they were     lying   on  their faces   , and\n# Nᴹ/Vg/J NSg/VB/J/P D   NPr/VPt/J+ . NSg/VB+ . R/C/P . ISgPl+ NSg/VB . R/C/P IPl+ NSg/VLPt Nᴹ/Vg/J J/P D$+   NPl/V3+ . VB/C\n> the pattern   on  their backs   was  the same as    the rest   of the pack    , she  could   not\n# D+  NSg/VB/J+ J/P D$+   NPl/V3+ VLPt D   I/J  R/C/P D   NSg/VB P  D+  NSg/VB+ . ISg+ NSg/VXB NSg/R/C\n> tell   whether they were     gardeners , or    soldiers , or    courtiers , or    three of her     own\n# NPr/VB I/C     IPl+ NSg/VLPt NPl       . NPr/C NPl/V3+  . NPr/C NPl       . NPr/C NSg   P  ISg/D$+ NSg/VB/J\n> children .\n# NPl+     .\n>\n#\n> “ How   should I       know ? ” said Alice , surprised at    her     own       courage . “ It’s no       business\n# . NSg/C VXB    ISg/#r+ VB   . . VP/J NPr+  . VP/J      NSg/P ISg/D$+ NSg/VB/J+ NSg/VB+ . . K    NSg/Dq/P N🅪Sg/J\n> of mine      . ”\n# P  NSg/I/VB+ . .\n>\n#\n> The Queen     turned crimson  with fury  , and  , after glaring at    her     for   a   moment like\n# D+  NPr/VB/J+ VP/J   NSg/VB/J P    N🅪Sg+ . VB/C . P     Nᴹ/Vg/J NSg/P ISg/D$+ R/C/P D/P NSg+   NSg/VB/J/C/P\n> a    wild      beast     , screamed “ Off        with her     head      ! Off        — ”\n# D/P+ NSg/VB/J+ NSg/VB/J+ . VP/J     . NSg/VB/J/P P    ISg/D$+ NPr/VB/J+ . NSg/VB/J/P . .\n>\n#\n> “ Nonsense ! ” said Alice , very loudly and  decidedly , and  the Queen     was  silent .\n# . Nᴹ/VB/J+ . . VP/J NPr+  . J/R  R      VB/C R         . VB/C D   NPr/VB/J+ VLPt NSg/J  .\n>\n#\n> The King      laid his     hand    upon her     arm       , and  timidly said “ Consider , my  dear     : she  is\n# D+  NPr/VB/J+ VP/J ISg/D$+ NSg/VB+ P    ISg/D$+ NSg/VB/J+ . VB/C R       VP/J . VB       . D$+ NSg/VB/J . ISg+ VL3\n> only  a   child   ! ”\n# J/R/C D/P NSg/VB+ . .\n>\n#\n> The Queen     turned angrily away from him  , and  said to the Knave “ Turn   them     over    ! ”\n# D+  NPr/VB/J+ VP/J   R       VB/J P    ISg+ . VB/C VP/J P  D   NSg   . NSg/VB NSg/IPl+ NSg/J/P . .\n>\n#\n> The Knave did  so          , very carefully , with one     foot    .\n# D   NSg   VXPt NSg/I/J/R/C . J/R  R         . P    NSg/I/J NSg/VB+ .\n>\n#\n> “ Get    up         ! ” said the Queen     , in        a   shrill   , loud  voice   , and  the three gardeners\n# . NSg/VB NSg/VB/J/P . . VP/J D+  NPr/VB/J+ . NPr/J/R/P D/P NSg/VB/J . NSg/J NSg/VB+ . VB/C D+  NSg+  NPl+\n> instantly jumped up         , and  began bowing  to the King      , the Queen     , the royal\n# R         VP/J   NSg/VB/J/P . VB/C VPt   Nᴹ/Vg/J P  D   NPr/VB/J+ . D   NPr/VB/J+ . D   NPr/J\n> children , and  everybody else    .\n# NPl+     . VB/C NSg/I+    NSg/J/C .\n>\n#\n> “ Leave  off        that          ! ” screamed the Queen     . “ You    make   me       giddy    . ” And  then      , turning to\n# . NSg/VB NSg/VB/J/P NSg/I/C/Ddem+ . . VP/J     D+  NPr/VB/J+ . . ISgPl+ NSg/VB NPr/ISg+ NSg/VB/J . . VB/C NSg/J/R/C . Nᴹ/Vg/J P\n> the rose       - tree    , she  went    on  , “ What   have    you    been     doing   here ? ”\n# D+  NPr/VPt/J+ . NSg/VB+ . ISg+ NSg/VPt J/P . . NSg/I+ NSg/VXB ISgPl+ NSg/VLPp Nᴹ/Vg/J J/R  . .\n>\n#\n> “ May     it       please your Majesty , ” said Two , in        a   very humble   tone       , going   down        on  one\n# . NPr/VXB NPr/ISg+ VB     D$+  N🅪Sg/I+ . . VP/J NSg . NPr/J/R/P D/P J/R  NSg/VB/J N🅪Sg/I/VB+ . Nᴹ/Vg/J N🅪Sg/VB/J/P J/P NSg/I/J+\n> knee    as    he       spoke   , “ we   were     trying  — ”\n# NSg/VB+ R/C/P NPr/ISg+ NSg/VPt . . IPl+ NSg/VLPt Nᴹ/Vg/J . .\n>\n#\n> “ I       see    ! ” said the Queen     , who    had meanwhile been     examining the roses   . “ Off        with\n# . ISg/#r+ NSg/VB . . VP/J D+  NPr/VB/J+ . NPr/I+ VP  NSg       NSg/VLPp Nᴹ/Vg/J   D+  NPl/V3+ . . NSg/VB/J/P P\n> their heads   ! ” and  the procession moved on  , three of the soldiers remaining\n# D$+   NPl/V3+ . . VB/C D+  NSg/VB+    VP/J  J/P . NSg   P  D+  NPl/V3+  Nᴹ/Vg/J\n> behind  to execute the unfortunate gardeners , who    ran     to Alice for   protection .\n# NSg/J/P P  VB      D+  NSg/J+      NPl+      . NPr/I+ NSg/VPt P  NPr   R/C/P N🅪Sg+      .\n>\n#\n> “ You    shan’t be       beheaded ! ” said Alice , and  she  put     them     into a   large flower  - pot\n# . ISgPl+ VXB    NSg/VLXB VP/J     . . VP/J NPr+  . VB/C ISg+ NSg/VBP NSg/IPl+ P    D/P NSg/J NSg/VB+ . N🅪Sg/VB+\n> that          stood near       . The three soldiers wandered about for   a    minute    or    two , looking\n# NSg/I/C/Ddem+ VP    NSg/VB/J/P . D+  NSg+  NPl/V3+  VP/J     J/P   R/C/P D/P+ NSg/VB/J+ NPr/C NSg . Nᴹ/Vg/J\n> for   them     , and  then      quietly marched off        after the others  .\n# R/C/P NSg/IPl+ . VB/C NSg/J/R/C R       VP/J    NSg/VB/J/P P     D+  NPl/V3+ .\n>\n#\n> “ Are their heads   off        ? ” shouted the Queen     .\n# . VLB D$+   NPl/V3+ NSg/VB/J/P . . VP/J    D+  NPr/VB/J+ .\n>\n#\n> “ Their heads   are gone    , if    it       please your Majesty ! ” the soldiers shouted in\n# . D$+   NPl/V3+ VLB VPp/J/P . NSg/C NPr/ISg+ VB     D$+  N🅪Sg/I+ . . D+  NPl/V3+  VP/J    NPr/J/R/P\n> reply   .\n# NSg/VB+ .\n>\n#\n> “ That’s right    ! ” shouted the Queen     . “ Can     you    play    croquet ? ”\n# . NSg$   NPr/VB/J . . VP/J    D+  NPr/VB/J+ . . NPr/VXB ISgPl+ N🅪Sg/VB NSg/VB  . .\n>\n#\n> The soldiers were     silent , and  looked at    Alice , as    the question was  evidently\n# D+  NPl/V3+  NSg/VLPt NSg/J  . VB/C VP/J   NSg/P NPr+  . R/C/P D+  NSg/VB+  VLPt R\n> meant for   her     .\n# VP    R/C/P ISg/D$+ .\n>\n#\n> “ Yes    ! ” shouted Alice .\n# . NPl/VB . . VP/J    NPr+  .\n>\n#\n> “ Come       on  , then      ! ” roared the Queen     , and  Alice joined the procession , wondering\n# . NSg/VBPp/P J/P . NSg/J/R/C . . VP/J   D+  NPr/VB/J+ . VB/C NPr+  VP/J   D+  NSg/VB+    . Nᴹ/Vg/J\n> very much         what   would happen next    .\n# J/R  NSg/I/J/R/Dq NSg/I+ VXB   VB     NSg/J/P .\n>\n#\n> “ It’s — it’s a   very fine     day     ! ” said a    timid voice   at    her     side      . She  was  walking by\n# . K    . K    D/P J/R  NSg/VB/J NPr🅪Sg+ . . VP/J D/P+ J+    NSg/VB+ NSg/P ISg/D$+ NSg/VB/J+ . ISg+ VLPt Nᴹ/Vg/J NSg/P\n> the White        Rabbit  , who    was  peeping anxiously into her     face    .\n# D+  NPr🅪Sg/VB/J+ NSg/VB+ . NPr/I+ VLPt Nᴹ/Vg/J R         P    ISg/D$+ NSg/VB+ .\n>\n#\n> “ Very , ” said Alice : “ — where’s the Duchess ? ”\n# . J/R  . . VP/J NPr+  . . . NSg$    D   NSg/VB  . .\n>\n#\n> “ Hush    ! Hush    ! ” said the Rabbit  in        a   low        , hurried tone       . He       looked anxiously over\n# . NSg/VB+ . NSg/VB+ . . VP/J D+  NSg/VB+ NPr/J/R/P D/P NSg/VB/J/R . VP/J    N🅪Sg/I/VB+ . NPr/ISg+ VP/J   R         NSg/J/P\n> his     shoulder as    he       spoke   , and  then      raised himself upon tiptoe    , put     his     mouth\n# ISg/D$+ NSg/VB+  R/C/P NPr/ISg+ NSg/VPt . VB/C NSg/J/R/C VP/J   ISg+    P    NSg/VB/J+ . NSg/VBP ISg/D$+ NSg/VB+\n> close    to her     ear       , and  whispered “ She’s under   sentence of execution . ”\n# NSg/VB/J P  ISg/D$+ NSg/VB/J+ . VB/C VP/J      . K     NSg/J/P NSg/VB   P  N🅪Sg+     . .\n>\n#\n> “ What   for   ? ” said Alice .\n# . NSg/I+ R/C/P . . VP/J NPr+  .\n>\n#\n> “ Did  you    say    ‘          What   a    pity     ! ’ ? ” the Rabbit  asked .\n# . VXPt ISgPl+ NSg/VB Unlintable NSg/I+ D/P+ N🅪Sg/VB+ . . . . D+  NSg/VB+ VP/J  .\n>\n#\n> “ No       , I       didn’t , ” said Alice : “ I       don’t think  it’s at    all          a   pity     . I       said ‘          What\n# . NSg/Dq/P . ISg/#r+ VXPt   . . VP/J NPr+  . . ISg/#r+ VXB   NSg/VB K    NSg/P NSg/I/J/C/Dq D/P N🅪Sg/VB+ . ISg/#r+ VP/J Unlintable NSg/I+\n> for   ? ’ ”\n# R/C/P . . .\n>\n#\n> “ She  boxed the Queen’s ears    — ” the Rabbit  began . Alice gave a   little     scream of\n# . ISg+ VP/J  D   NPr$    NPl/V3+ . . D   NSg/VB+ VPt   . NPr+  VPt  D/P NPr/I/J/Dq NSg/VB P\n> laughter . “ Oh     , hush    ! ” the Rabbit  whispered in        a    frightened tone       . “ The Queen     will\n# Nᴹ+      . . NPr/VB . NSg/VB+ . . D+  NSg/VB+ VP/J      NPr/J/R/P D/P+ VP/J       N🅪Sg/I/VB+ . . D+  NPr/VB/J+ NPr/VXB\n> hear you    ! You    see    , she  came      rather     late  , and  the Queen     said — ”\n# VB   ISgPl+ . ISgPl+ NSg/VB . ISg+ NSg/VPt/P NPr/VB/J/R NSg/J . VB/C D+  NPr/VB/J+ VP/J . .\n>\n#\n> “ Get    to your places  ! ” shouted the Queen     in        a   voice  of thunder , and  people  began\n# . NSg/VB P  D$+  NPl/V3+ . . VP/J    D+  NPr/VB/J+ NPr/J/R/P D/P NSg/VB P  NSg/VB+ . VB/C NPl/VB+ VPt\n> running   about in        all           directions , tumbling up         against each other    ; however , they\n# Nᴹ/Vg/J/P J/P   NPr/J/R/P NSg/I/J/C/Dq+ NPl+       . Nᴹ/Vg/J  NSg/VB/J/P C/P     Dq   NSg/VB/J . C       . IPl+\n> got settled down        in        a    minute    or    two , and  the game      began . Alice thought she  had\n# VP  VP/J    N🅪Sg/VB/J/P NPr/J/R/P D/P+ NSg/VB/J+ NPr/C NSg . VB/C D+  NSg/VB/J+ VPt   . NPr+  N🅪Sg/VP ISg+ VP\n> never seen    such  a   curious croquet - ground    in        her     life     ; it       was  all          ridges and\n# R     NSg/VPp NSg/I D/P J       NSg/VB  . N🅪Sg/VB/J NPr/J/R/P ISg/D$+ N🅪Sg/VB+ . NPr/ISg+ VLPt NSg/I/J/C/Dq NPl/V3 VB/C\n> furrows ; the balls   were     live hedgehogs , the mallets live flamingoes , and  the\n# NPl/V3  . D   NPl/V3+ NSg/VLPt VB/J NPl/V3    . D   NPl/V3  VB/J NPl        . VB/C D\n> soldiers had to double   themselves up         and  to stand  on  their hands  and  feet , to\n# NPl/V3+  VP  P  NSg/VB/J IPl+       NSg/VB/J/P VB/C P  NSg/VB J/P D$+   NPl/V3 VB/C NPl+ . P\n> make   the arches .\n# NSg/VB D   NPl/V3 .\n>\n#\n> The chief     difficulty Alice found  at    first was  in        managing her     flamingo : she\n# D+  NSg/VB/J+ N🅪Sg+      NPr+  NSg/VP NSg/P NSg/J VLPt NPr/J/R/P Nᴹ/Vg/J  ISg/D$+ NSg/J    . ISg+\n> succeeded in        getting its     body    tucked away , comfortably enough , under   her     arm       ,\n# VP/J      NPr/J/R/P NSg/Vg  ISg/D$+ NSg/VB+ VP/J   VB/J . R           NSg/I  . NSg/J/P ISg/D$+ NSg/VB/J+ .\n> with its     legs    hanging down        , but     generally , just as    she  had got its     neck    nicely\n# P    ISg/D$+ NPl/V3+ Nᴹ/Vg/J N🅪Sg/VB/J/P . NSg/C/P R         . J/R  R/C/P ISg+ VP  VP  ISg/D$+ NSg/VB+ R\n> straightened out          , and  was  going   to give   the hedgehog a   blow      with its     head      , it\n# VP/J         NSg/VB/J/R/P . VB/C VLPt Nᴹ/Vg/J P  NSg/VB D   NSg/VB+  D/P NSg/VB/J+ P    ISg/D$+ NPr/VB/J+ . NPr/ISg+\n> would twist  itself round      and  look   up         in        her     face    , with such  a   puzzled expression\n# VXB   NSg/VB ISg+   NSg/VB/J/P VB/C NSg/VB NSg/VB/J/P NPr/J/R/P ISg/D$+ NSg/VB+ . P    NSg/I D/P VP/J    N🅪Sg+\n> that          she  could   not     help   bursting out          laughing : and  when    she  had got its     head\n# NSg/I/C/Ddem+ ISg+ NSg/VXB NSg/R/C NSg/VB Nᴹ/Vg/J  NSg/VB/J/R/P Nᴹ/Vg/J  . VB/C NSg/I/C ISg+ VP  VP  ISg/D$+ NPr/VB/J+\n> down        , and  was  going   to begin  again , it       was  very provoking to find   that         the\n# N🅪Sg/VB/J/P . VB/C VLPt Nᴹ/Vg/J P  NSg/VB P     . NPr/ISg+ VLPt J/R  Nᴹ/Vg/J   P  NSg/VB NSg/I/C/Ddem D\n> hedgehog had unrolled itself , and  was  in        the act     of crawling away : besides all\n# NSg/VB+  VP  VP/J     ISg+   . VB/C VLPt NPr/J/R/P D   NPr/VB+ P  Nᴹ/Vg/J  VB/J . R/P     NSg/I/J/C/Dq\n> this    , there was  generally a   ridge   or    furrow in        the way    wherever she  wanted to\n# I/Ddem+ . R+    VLPt R         D/P NSg/VB+ NPr/C NSg/VB NPr/J/R/P D   NSg/J+ C        ISg+ VP/J   P\n> send   the hedgehog to , and  , as    the doubled - up         soldiers were     always getting up         and\n# NSg/VB D   NSg/VB+  P  . VB/C . R/C/P D   VP/J+   . NSg/VB/J/P NPl/V3+  NSg/VLPt R      NSg/Vg  NSg/VB/J/P VB/C\n> walking off        to other    parts  of the ground     , Alice soon came      to the conclusion that\n# Nᴹ/Vg/J NSg/VB/J/P P  NSg/VB/J NPl/V3 P  D   N🅪Sg/VB/J+ . NPr+  J/R  NSg/VPt/P P  D   NSg+       NSg/I/C/Ddem+\n> it       was  a   very difficult game      indeed .\n# NPr/ISg+ VLPt D/P J/R  VB/J      NSg/VB/J+ R      .\n>\n#\n> The players all           played at    once  without waiting for   turns  , quarrelling all          the\n# D+  NPl+    NSg/I/J/C/Dq+ VP/J+  NSg/P NSg/C C/P     Nᴹ/Vg/J R/C/P NPl/V3 . Nᴹ/Vg/Comm  NSg/I/J/C/Dq D\n> while      , and  fighting for   the hedgehogs ; and  in        a   very short      time       the Queen     was  in\n# NSg/VB/C/P . VB/C Nᴹ/Vg/J  R/C/P D   NPl/V3    . VB/C NPr/J/R/P D/P J/R  NPr/VB/J/P N🅪Sg/VB/J+ D   NPr/VB/J+ VLPt NPr/J/R/P\n> a   furious passion  , and  went    stamping about , and  shouting “ Off        with his     head      ! ” or\n# D/P J       NPrᴹ/VB+ . VB/C NSg/VPt NSg      J/P   . VB/C Nᴹ/Vg/J+ . NSg/VB/J/P P    ISg/D$+ NPr/VB/J+ . . NPr/C\n> “ Off        with her     head      ! ” about once  in        a    minute    .\n# . NSg/VB/J/P P    ISg/D$+ NPr/VB/J+ . . J/P   NSg/C NPr/J/R/P D/P+ NSg/VB/J+ .\n>\n#\n> Alice began to feel     very uneasy   : to be       sure , she  had not     as    yet      had any    dispute\n# NPr+  VPt   P  NSg/I/VB J/R  NSg/VB/J . P  NSg/VLXB J    . ISg+ VP  NSg/R/C R/C/P NSg/VB/C VP  I/R/Dq NSg/VB+\n> with the Queen     , but     she  knew that         it       might    happen any     minute    , “ and  then      , ”\n# P    D+  NPr/VB/J+ . NSg/C/P ISg+ VPt  NSg/I/C/Ddem NPr/ISg+ Nᴹ/VXB/J VB     I/R/Dq+ NSg/VB/J+ . . VB/C NSg/J/R/C . .\n> thought she  , “ what   would become of me       ? They’re dreadfully fond     of beheading\n# N🅪Sg/VP ISg+ . . NSg/I+ VXB   VBPp   P  NPr/ISg+ . K       R          NSg/VB/J P  NSg\n> people  here ; the great wonder   is  , that          there’s any    one      left     alive ! ”\n# NPl/VB+ J/R  . D   NSg/J N🅪Sg/VB+ VL3 . NSg/I/C/Ddem+ K       I/R/Dq NSg/I/J+ NPr/VP/J J     . .\n>\n#\n> She  was  looking about for   some     way   of escape   , and  wondering whether she  could\n# ISg+ VLPt Nᴹ/Vg/J J/P   R/C/P I/J/R/Dq NSg/J P  N🅪Sg/VB+ . VB/C Nᴹ/Vg/J   I/C     ISg+ NSg/VXB\n> get    away without being        seen    , when    she  noticed a   curious appearance in        the air      :\n# NSg/VB VB/J C/P     N🅪Sg/VLg/J/C NSg/VPp . NSg/I/C ISg+ VP/J    D/P J       NSg        NPr/J/R/P D+  N🅪Sg/VB+ .\n> it       puzzled her     very much         at    first , but     , after watching it       a    minute    or    two , she\n# NPr/ISg+ VP/J    ISg/D$+ J/R  NSg/I/J/R/Dq NSg/P NSg/J . NSg/C/P . P     Nᴹ/Vg/J  NPr/ISg+ D/P+ NSg/VB/J+ NPr/C NSg . ISg+\n> made it       out          to be       a    grin    , and  she  said to herself “ It’s the Cheshire Cat       : now       I\n# VP   NPr/ISg+ NSg/VB/J/R/P P  NSg/VLXB D/P+ NSg/VB+ . VB/C ISg+ VP/J P  ISg+    . K    D   NPr      NSg/VB/J+ . NSg/J/R/C ISg/#r+\n> shall have    somebody to talk    to . ”\n# VXB   NSg/VXB NSg/I+   P  N🅪Sg/VB P  . .\n>\n#\n> “ How   are you    getting on  ? ” said the Cat       , as    soon as    there was  mouth   enough for   it\n# . NSg/C VLB ISgPl+ NSg/Vg  J/P . . VP/J D+  NSg/VB/J+ . R/C/P J/R  R/C/P R+    VLPt NSg/VB+ NSg/I  R/C/P NPr/ISg+\n> to speak  with .\n# P  NSg/VB P    .\n>\n#\n> Alice waited till       the eyes    appeared , and  then      nodded . “ It’s no       use     speaking to\n# NPr+  VP/J   NSg/VB/C/P D+  NPl/V3+ VP/J     . VB/C NSg/J/R/C VP     . . K    NSg/Dq/P N🅪Sg/VB Nᴹ/Vg/J  P\n> it       , ” she  thought , “ till       its     ears    have    come       , or    at    least    one     of them     . ” In        another\n# NPr/ISg+ . . ISg+ N🅪Sg/VP . . NSg/VB/C/P ISg/D$+ NPl/V3+ NSg/VXB NSg/VBPp/P . NPr/C NSg/P NSg/J/Dq NSg/I/J P  NSg/IPl+ . . NPr/J/R/P I/D+\n> minute    the whole  head      appeared , and  then      Alice put     down        her     flamingo , and  began\n# NSg/VB/J+ D+  NSg/J+ NPr/VB/J+ VP/J     . VB/C NSg/J/R/C NPr+  NSg/VBP N🅪Sg/VB/J/P ISg/D$+ NSg/J    . VB/C VPt\n> an  account of the game      , feeling   very glad     she  had someone to listen to her     . The\n# D/P NSg/VB  P  D   NSg/VB/J+ . N🅪Sg/Vg/J J/R  NSg/VB/J ISg+ VP  NSg/I+  P  NSg/VB P  ISg/D$+ . D+\n> Cat       seemed to think  that         there was  enough of it       now       in        sight    , and  no       more         of it\n# NSg/VB/J+ VP/J   P  NSg/VB NSg/I/C/Ddem R+    VLPt NSg/I  P  NPr/ISg+ NSg/J/R/C NPr/J/R/P N🅪Sg/VB+ . VB/C NSg/Dq/P NPr/I/J/R/Dq P  NPr/ISg+\n> appeared .\n# VP/J     .\n>\n#\n> “ I       don’t think  they play    at    all          fairly , ” Alice began , in        rather     a   complaining\n# . ISg/#r+ VXB   NSg/VB IPl+ N🅪Sg/VB NSg/P NSg/I/J/C/Dq R+     . . NPr+  VPt   . NPr/J/R/P NPr/VB/J/R D/P Nᴹ/Vg/J\n> tone       , “ and  they all          quarrel so          dreadfully one     can’t hear oneself speak  — and  they\n# N🅪Sg/I/VB+ . . VB/C IPl+ NSg/I/J/C/Dq NSg/VB+ NSg/I/J/R/C R          NSg/I/J VXB   VB   I+      NSg/VB . VB/C IPl+\n> don’t seem to have    any    rules   in        particular ; at    least    , if    there are , nobody\n# VXB   VB   P  NSg/VXB I/R/Dq NPl/V3+ NPr/J/R/P NSg/J      . NSg/P NSg/J/Dq . NSg/C R+    VLB . NSg/I+\n> attends to them     — and  you’ve no       idea how   confusing it       is  all          the things being\n# V3      P  NSg/IPl+ . VB/C K      NSg/Dq/P NSg+ NSg/C Nᴹ/Vg/J   NPr/ISg+ VL3 NSg/I/J/C/Dq D   NPl+   N🅪Sg/VLg/J/C\n> alive ; for   instance , there’s the arch     I’ve got to go       through next    walking about\n# J     . R/C/P NSg/VB+  . K       D   NSg/VB/J K    VP  P  NSg/VB/J NSg/J/P NSg/J/P Nᴹ/Vg/J J/P\n> at    the other    end    of the ground     — and  I       should have    croqueted the Queen’s hedgehog\n# NSg/P D   NSg/VB/J NSg/VB P  D   N🅪Sg/VB/J+ . VB/C ISg/#r+ VXB    NSg/VXB VP/J      D   NPr$    NSg/VB+\n> just now       , only  it       ran     away when    it       saw     mine      coming  ! ”\n# J/R  NSg/J/R/C . J/R/C NPr/ISg+ NSg/VPt VB/J NSg/I/C NPr/ISg+ NSg/VPt NSg/I/VB+ Nᴹ/Vg/J . .\n>\n#\n> “ How   do  you    like         the Queen     ? ” said the Cat       in        a    low         voice   .\n# . NSg/C VXB ISgPl+ NSg/VB/J/C/P D+  NPr/VB/J+ . . VP/J D   NSg/VB/J+ NPr/J/R/P D/P+ NSg/VB/J/R+ NSg/VB+ .\n>\n#\n> “ Not     at    all          , ” said Alice : “ she’s so          extremely — ” Just then      she  noticed that         the\n# . NSg/R/C NSg/P NSg/I/J/C/Dq . . VP/J NPr+  . . K     NSg/I/J/R/C R         . . J/R  NSg/J/R/C ISg+ VP/J    NSg/I/C/Ddem D\n> Queen     was  close    behind  her     , listening : so          she  went    on  , “ — likely to win    , that\n# NPr/VB/J+ VLPt NSg/VB/J NSg/J/P ISg/D$+ . Nᴹ/Vg/J   . NSg/I/J/R/C ISg+ NSg/VPt J/P . . . NSg/J  P  NSg/VB . NSg/I/C/Ddem\n> it’s hardly worth    while      finishing the game      . ”\n# K    R      NSg/VB/J NSg/VB/C/P Nᴹ/Vg/J   D   NSg/VB/J+ . .\n>\n#\n> The Queen     smiled and  passed on  .\n# D+  NPr/VB/J+ VP/J   VB/C VP/J   J/P .\n>\n#\n> “ Who    are you    talking to ? ” said the King      , going   up         to Alice , and  looking at    the\n# . NPr/I+ VLB ISgPl+ Nᴹ/Vg/J P  . . VP/J D+  NPr/VB/J+ . Nᴹ/Vg/J NSg/VB/J/P P  NPr+  . VB/C Nᴹ/Vg/J NSg/P D\n> Cat’s head     with great curiosity .\n# NSg$  NPr/VB/J P    NSg/J NSg+      .\n>\n#\n> “ It’s a   friend   of mine      — a   Cheshire Cat       , ” said Alice : “ allow me       to introduce it       . ”\n# . K    D/P NPr/VB/J P  NSg/I/VB+ . D/P NPr      NSg/VB/J+ . . VP/J NPr+  . . VB    NPr/ISg+ P  VB        NPr/ISg+ . .\n>\n#\n> “ I       don’t like         the look   of it       at    all          , ” said the King      : “ however , it       may     kiss   my\n# . ISg/#r+ VXB   NSg/VB/J/C/P D   NSg/VB P  NPr/ISg+ NSg/P NSg/I/J/C/Dq . . VP/J D   NPr/VB/J+ . . C       . NPr/ISg+ NPr/VXB NSg/VB D$+\n> hand    if    it       likes  . ”\n# NSg/VB+ NSg/C NPr/ISg+ NPl/V3 . .\n>\n#\n> “ I’d rather     not     , ” the Cat       remarked .\n# . K   NPr/VB/J/R NSg/R/C . . D   NSg/VB/J+ VP/J     .\n>\n#\n> “ Don’t be       impertinent , ” said the King      , “ and  don’t look   at    me       like         that          ! ” He       got\n# . VXB   NSg/VLXB NSg/J       . . VP/J D   NPr/VB/J+ . . VB/C VXB   NSg/VB NSg/P NPr/ISg+ NSg/VB/J/C/P NSg/I/C/Ddem+ . . NPr/ISg+ VP\n> behind  Alice as    he       spoke   .\n# NSg/J/P NPr+  R/C/P NPr/ISg+ NSg/VPt .\n>\n#\n> “ A    cat       may     look   at    a    king      , ” said Alice . “ I’ve read    that         in        some     book    , but     I\n# . D/P+ NSg/VB/J+ NPr/VXB NSg/VB NSg/P D/P+ NPr/VB/J+ . . VP/J NPr+  . . K    NSg/VBP NSg/I/C/Ddem NPr/J/R/P I/J/R/Dq NSg/VB+ . NSg/C/P ISg/#r+\n> don’t remember where   . ”\n# VXB   NSg/VB   NSg/R/C . .\n>\n#\n> “ Well       , it       must    be       removed , ” said the King      very decidedly , and  he       called the\n# . NSg/VB/J/R . NPr/ISg+ NSg/VXB NSg/VLXB VP/J    . . VP/J D+  NPr/VB/J+ J/R  R         . VB/C NPr/ISg+ VP/J   D\n> Queen     , who    was  passing at    the moment , “ My  dear     ! I       wish   you    would have    this    cat\n# NPr/VB/J+ . NPr/I+ VLPt Nᴹ/Vg/J NSg/P D   NSg+   . . D$+ NSg/VB/J . ISg/#r+ NSg/VB ISgPl+ VXB   NSg/VXB I/Ddem+ NSg/VB/J+\n> removed ! ”\n# VP/J    . .\n>\n#\n> The Queen     had only  one     way   of settling all           difficulties , great or    small    . “ Off\n# D+  NPr/VB/J+ VP  J/R/C NSg/I/J NSg/J P  Nᴹ/Vg/J  NSg/I/J/C/Dq+ NPl+         . NSg/J NPr/C NPr/VB/J . . NSg/VB/J/P\n> with his     head      ! ” she  said , without even       looking round      .\n# P    ISg/D$+ NPr/VB/J+ . . ISg+ VP/J . C/P     NSg/VB/J/R Nᴹ/Vg/J NSg/VB/J/P .\n>\n#\n> “ I’ll fetch  the executioner myself , ” said the King      eagerly , and  he       hurried off        .\n# . K    NSg/VB D   NSg         ISg+   . . VP/J D   NPr/VB/J+ R       . VB/C NPr/ISg+ VP/J    NSg/VB/J/P .\n>\n#\n> Alice thought she  might    as    well       go       back     , and  see    how   the game      was  going   on  , as\n# NPr+  N🅪Sg/VP ISg+ Nᴹ/VXB/J R/C/P NSg/VB/J/R NSg/VB/J NSg/VB/J . VB/C NSg/VB NSg/C D+  NSg/VB/J+ VLPt Nᴹ/Vg/J J/P . R/C/P\n> she  heard the Queen’s voice   in        the distance , screaming with passion  . She  had\n# ISg+ VP/J  D   NPr$    NSg/VB+ NPr/J/R/P D   N🅪Sg/VB+ . Nᴹ/Vg/J   P    NPrᴹ/VB+ . ISg+ VP\n> already heard her     sentence three of the players to be       executed for   having  missed\n# R       VP/J  ISg/D$+ NSg/VB+  NSg   P  D+  NPl+    P  NSg/VLXB VP/J     R/C/P Nᴹ/Vg/J VP/J\n> their turns  , and  she  did  not     like         the look   of things at    all          , as    the game      was  in\n# D$+   NPl/V3 . VB/C ISg+ VXPt NSg/R/C NSg/VB/J/C/P D   NSg/VB P  NPl+   NSg/P NSg/I/J/C/Dq . R/C/P D+  NSg/VB/J+ VLPt NPr/J/R/P\n> such   confusion that          she  never knew whether it       was  her     turn   or    not     . So          she  went\n# NSg/I+ N🅪Sg/VB+  NSg/I/C/Ddem+ ISg+ R     VPt  I/C     NPr/ISg+ VLPt ISg/D$+ NSg/VB NPr/C NSg/R/C . NSg/I/J/R/C ISg+ NSg/VPt\n> in        search  of her     hedgehog .\n# NPr/J/R/P N🅪Sg/VB P  ISg/D$+ NSg/VB+  .\n>\n#\n> The hedgehog was  engaged in        a   fight   with another hedgehog , which seemed to Alice\n# D+  NSg/VB+  VLPt VP/J    NPr/J/R/P D/P NSg/VB+ P    I/D+    NSg/VB+  . I/C+  VP/J   P  NPr+\n> an   excellent opportunity for   croqueting one     of them     with the other    : the only\n# D/P+ J+        N🅪Sg+       R/C/P Nᴹ/Vg/J    NSg/I/J P  NSg/IPl+ P    D   NSg/VB/J . D   J/R/C\n> difficulty was  , that         her     flamingo was  gone    across to the other    side     of the\n# N🅪Sg+      VLPt . NSg/I/C/Ddem ISg/D$+ NSg/J    VLPt VPp/J/P NSg/P  P  D   NSg/VB/J NSg/VB/J P  D\n> garden    , where   Alice could   see    it       trying  in        a   helpless sort   of way    to fly      up         into\n# NSg/VB/J+ . NSg/R/C NPr+  NSg/VXB NSg/VB NPr/ISg+ Nᴹ/Vg/J NPr/J/R/P D/P J        NSg/VB P  NSg/J+ P  NSg/VB/J NSg/VB/J/P P\n> a   tree    .\n# D/P NSg/VB+ .\n>\n#\n> By    the time       she  had caught the flamingo and  brought it       back     , the fight   was  over    ,\n# NSg/P D+  N🅪Sg/VB/J+ ISg+ VP  VP/J   D   NSg/J    VB/C VP      NPr/ISg+ NSg/VB/J . D   NSg/VB+ VLPt NSg/J/P .\n> and  both   the hedgehogs were     out          of sight    : “ but     it       doesn’t matter   much         , ” thought\n# VB/C I/C/Dq D   NPl/V3    NSg/VLPt NSg/VB/J/R/P P  N🅪Sg/VB+ . . NSg/C/P NPr/ISg+ VX3     N🅪Sg/VB+ NSg/I/J/R/Dq . . N🅪Sg/VP\n> Alice , “ as    all          the arches are gone    from this   side     of the ground     . ” So          she  tucked\n# NPr+  . . R/C/P NSg/I/J/C/Dq D   NPl/V3 VLB VPp/J/P P    I/Ddem NSg/VB/J P  D   N🅪Sg/VB/J+ . . NSg/I/J/R/C ISg+ VP/J\n> it       away under   her     arm       , that         it       might    not     escape  again , and  went    back     for   a\n# NPr/ISg+ VB/J NSg/J/P ISg/D$+ NSg/VB/J+ . NSg/I/C/Ddem NPr/ISg+ Nᴹ/VXB/J NSg/R/C N🅪Sg/VB P     . VB/C NSg/VPt NSg/VB/J R/C/P D/P\n> little     more         conversation with her     friend    .\n# NPr/I/J/Dq NPr/I/J/R/Dq N🅪Sg/VB      P    ISg/D$+ NPr/VB/J+ .\n>\n#\n> When    she  got back     to the Cheshire Cat       , she  was  surprised to find   quite a   large\n# NSg/I/C ISg+ VP  NSg/VB/J P  D   NPr      NSg/VB/J+ . ISg+ VLPt VP/J      P  NSg/VB R     D/P NSg/J\n> crowd   collected round      it       : there was  a   dispute going   on  between the executioner ,\n# NSg/VB+ VP/J      NSg/VB/J/P NPr/ISg+ . R+    VLPt D/P NSg/VB+ Nᴹ/Vg/J J/P NSg/P   D   NSg         .\n> the King      , and  the Queen     , who    were     all          talking  at    once  , while      all          the rest    were\n# D   NPr/VB/J+ . VB/C D   NPr/VB/J+ . NPr/I+ NSg/VLPt NSg/I/J/C/Dq Nᴹ/Vg/J+ NSg/P NSg/C . NSg/VB/C/P NSg/I/J/C/Dq D   NSg/VB+ NSg/VLPt\n> quite silent , and  looked very uncomfortable .\n# R     NSg/J  . VB/C VP/J   J/R  J             .\n>\n#\n> The moment Alice appeared , she  was  appealed to by    all          three to settle the\n# D+  NSg+   NPr+  VP/J     . ISg+ VLPt VP/J     P  NSg/P NSg/I/J/C/Dq NSg   P  NSg/VB D+\n> question , and  they repeated their arguments to her     , though , as    they all           spoke    at\n# NSg/VB+  . VB/C IPl+ VP/J     D$+   NPl/V3+   P  ISg/D$+ . C      . R/C/P IPl+ NSg/I/J/C/Dq+ NSg/VPt+ NSg/P\n> once  , she  found  it       very hard     indeed to make   out          exactly what   they said .\n# NSg/C . ISg+ NSg/VP NPr/ISg+ J/R  N🅪Sg/J/R R      P  NSg/VB NSg/VB/J/R/P R       NSg/I+ IPl+ VP/J .\n>\n#\n> The executioner’s argument was  , that         you    couldn’t cut       off        a   head      unless there\n# D   NSg$          N🅪Sg/VB+ VLPt . NSg/I/C/Ddem ISgPl+ VXB      NSg/VBP/J NSg/VB/J/P D/P NPr/VB/J+ C      R+\n> was  a   body    to cut       it       off        from : that         he       had never had to do  such  a   thing before ,\n# VLPt D/P NSg/VB+ P  NSg/VBP/J NPr/ISg+ NSg/VB/J/P P    . NSg/I/C/Ddem NPr/ISg+ VP  R     VP  P  VXB NSg/I D/P NSg+  C/P    .\n> and  he       wasn’t going   to begin  at    his     time      of life     .\n# VB/C NPr/ISg+ VPt    Nᴹ/Vg/J P  NSg/VB NSg/P ISg/D$+ N🅪Sg/VB/J P  N🅪Sg/VB+ .\n>\n#\n> The King’s argument was  , that         anything  that          had a   head      could   be       beheaded , and\n# D   NPr$   N🅪Sg/VB+ VLPt . NSg/I/C/Ddem NSg/I/VB+ NSg/I/C/Ddem+ VP  D/P NPr/VB/J+ NSg/VXB NSg/VLXB VP/J     . VB/C\n> that         you    weren’t to talk    nonsense .\n# NSg/I/C/Ddem ISgPl+ VPt     P  N🅪Sg/VB Nᴹ/VB/J+ .\n>\n#\n> The Queen’s argument was  , that         if    something wasn’t done      about it       in        less       than no\n# D   NPr$    N🅪Sg/VB+ VLPt . NSg/I/C/Ddem NSg/C NSg/I/J+  VPt    NSg/VPp/J J/P   NPr/ISg+ NPr/J/R/P VB/J/R/C/P C/P  NSg/Dq/P\n> time       she’d have    everybody executed , all          round      . ( It       was  this   last     remark that          had\n# N🅪Sg/VB/J+ K     NSg/VXB NSg/I+    VP/J     . NSg/I/J/C/Dq NSg/VB/J/P . . NPr/ISg+ VLPt I/Ddem NSg/VB/J NSg/VB NSg/I/C/Ddem+ VP\n> made the whole  party     look   so          grave     and  anxious . )\n# VP   D+  NSg/J+ NSg/VB/J+ NSg/VB NSg/I/J/R/C NSg/VB/J+ VB/C J       . .\n>\n#\n> Alice could   think  of nothing  else    to say    but     “ It       belongs to the Duchess : you’d\n# NPr+  NSg/VXB NSg/VB P  NSg/I/J+ NSg/J/C P  NSg/VB NSg/C/P . NPr/ISg+ V3      P  D   NSg/VB  . K\n> better     ask    her     about it       . ”\n# NSg/VXB/JC NSg/VB ISg/D$+ J/P   NPr/ISg+ . .\n>\n#\n> “ She’s in        prison  , ” the Queen     said to the executioner : “ fetch  her     here . ” And  the\n# . K     NPr/J/R/P NSg/VB+ . . D   NPr/VB/J+ VP/J P  D   NSg         . . NSg/VB ISg/D$+ J/R  . . VB/C D\n> executioner went     off        like         an  arrow   .\n# NSg         NSg/VPt+ NSg/VB/J/P NSg/VB/J/C/P D/P NSg/VB+ .\n>\n#\n> The Cat’s head      began fading  away the moment he       was  gone    , and  , by    the time       he       had\n# D   NSg$  NPr/VB/J+ VPt   Nᴹ/Vg/J VB/J D   NSg+   NPr/ISg+ VLPt VPp/J/P . VB/C . NSg/P D   N🅪Sg/VB/J+ NPr/ISg+ VP\n> come       back     with the Duchess , it       had entirely disappeared ; so          the King      and  the\n# NSg/VBPp/P NSg/VB/J P    D   NSg/VB  . NPr/ISg+ VP  R        VP/J        . NSg/I/J/R/C D   NPr/VB/J+ VB/C D\n> executioner ran     wildly up         and  down        looking for   it       , while      the rest   of the party\n# NSg         NSg/VPt R      NSg/VB/J/P VB/C N🅪Sg/VB/J/P Nᴹ/Vg/J R/C/P NPr/ISg+ . NSg/VB/C/P D   NSg/VB P  D   NSg/VB/J+\n> went    back     to the game      .\n# NSg/VPt NSg/VB/J P  D   NSg/VB/J+ .\n>\n#\n>              CHAPTER IX : The Mock     Turtle’s Story\n# HeadingStart NSg/VB+ #r . D   NSg/VB/J NSg$     NSg/VB+\n>\n#\n> “ You    can’t think  how   glad     I       am        to see    you    again , you    dear     old   thing ! ” said the\n# . ISgPl+ VXB   NSg/VB NSg/C NSg/VB/J ISg/#r+ NPr/VLB/J P  NSg/VB ISgPl+ P     . ISgPl+ NSg/VB/J NSg/J NSg+  . . VP/J D\n> Duchess , as    she  tucked her     arm       affectionately into Alice’s , and  they walked off\n# NSg/VB  . R/C/P ISg+ VP/J   ISg/D$+ NSg/VB/J+ R              P    NPr$    . VB/C IPl+ VP/J   NSg/VB/J/P\n> together .\n# J        .\n>\n#\n> Alice was  very glad     to find   her     in        such   a    pleasant temper     , and  thought to\n# NPr+  VLPt J/R  NSg/VB/J P  NSg/VB ISg/D$+ NPr/J/R/P NSg/I+ D/P+ NSg/J+   NSg/VB/JC+ . VB/C N🅪Sg/VP P\n> herself that          perhaps it       was  only  the pepper   that          had made her     so          savage    when\n# ISg+    NSg/I/C/Ddem+ NSg/R   NPr/ISg+ VLPt J/R/C D+  N🅪Sg/VB+ NSg/I/C/Ddem+ VP  VP   ISg/D$+ NSg/I/J/R/C NPr/VB/J+ NSg/I/C\n> they met in        the kitchen .\n# IPl+ VP  NPr/J/R/P D+  NSg/VB+ .\n>\n#\n> “ When    I’m a   Duchess , ” she  said to herself , ( not     in        a   very hopeful tone       though ) ,\n# . NSg/I/C K   D/P NSg/VB  . . ISg+ VP/J P  ISg+    . . NSg/R/C NPr/J/R/P D/P J/R  NSg/J   N🅪Sg/I/VB+ C      . .\n> “ I       won’t have    any    pepper   in        my  kitchen at    all          . Soup     does    very well       without — Maybe\n# . ISg/#r+ VXB   NSg/VXB I/R/Dq N🅪Sg/VB+ NPr/J/R/P D$+ NSg/VB+ NSg/P NSg/I/J/C/Dq . N🅪Sg/VB+ NPl/VX3 J/R  NSg/VB/J/R C/P     . NSg/J/R\n> it’s always pepper  that          makes  people  hot      - tempered , ” she  went    on  , very much\n# K    R      N🅪Sg/VB NSg/I/C/Ddem+ NPl/V3 NPl/VB+ NSg/VB/J . VP/J     . . ISg+ NSg/VPt J/P . J/R  NSg/I/J/R/Dq\n> pleased at    having  found  out          a   new   kind  of rule    , “ and  vinegar that          makes  them\n# VP/J    NSg/P Nᴹ/Vg/J NSg/VP NSg/VB/J/R/P D/P NSg/J NSg/J P  NSg/VB+ . . VB/C NSg/VB+ NSg/I/C/Ddem+ NPl/V3 NSg/IPl+\n> sour     — and  camomile that          makes  them     bitter   — and  — and  barley - sugar   and  such  things\n# NSg/VB/J . VB/C ?        NSg/I/C/Ddem+ NPl/V3 NSg/IPl+ NSg/VB/J . VB/C . VB/C Nᴹ     . N🅪Sg/VB VB/C NSg/I NPl+\n> that          make   children sweet    - tempered . I       only  wish   people  knew that          : then      they\n# NSg/I/C/Ddem+ NSg/VB NPl+     NPr/VB/J . VP/J     . ISg/#r+ J/R/C NSg/VB NPl/VB+ VPt  NSg/I/C/Ddem+ . NSg/J/R/C IPl+\n> wouldn’t be       so          stingy about it       , you    know — ”\n# VXB      NSg/VLXB NSg/I/J/R/C J      J/P   NPr/ISg+ . ISgPl+ VB   . .\n>\n#\n> She  had quite forgotten the Duchess by    this   time       , and  was  a   little     startled when\n# ISg+ VP  R     NSg/VPp/J D   NSg/VB  NSg/P I/Ddem N🅪Sg/VB/J+ . VB/C VLPt D/P NPr/I/J/Dq VP/J     NSg/I/C\n> she  heard her     voice   close    to her     ear       . “ You’re thinking about something , my  dear     ,\n# ISg+ VP/J  ISg/D$+ NSg/VB+ NSg/VB/J P  ISg/D$+ NSg/VB/J+ . . K      Nᴹ/Vg/J  J/P   NSg/I/J+  . D$+ NSg/VB/J .\n> and  that          makes  you    forget to talk    . I       can’t tell   you    just now       what   the moral    of\n# VB/C NSg/I/C/Ddem+ NPl/V3 ISgPl+ VB     P  N🅪Sg/VB . ISg/#r+ VXB   NPr/VB ISgPl+ J/R  NSg/J/R/C NSg/I+ D   NSg/VB/J P\n> that          is  , but     I       shall remember it       in        a   bit      . ”\n# NSg/I/C/Ddem+ VL3 . NSg/C/P ISg/#r+ VXB   NSg/VB   NPr/ISg+ NPr/J/R/P D/P NSg/VPt+ . .\n>\n#\n> “ Perhaps it       hasn’t one     , ” Alice ventured to remark .\n# . NSg/R   NPr/ISg+ V3     NSg/I/J . . NPr+  VP/J     P  NSg/VB .\n>\n#\n> “ Tut    , tut    , child   ! ” said the Duchess . “ Everything’s got a   moral    , if    only  you    can\n# . NPr/VB . NPr/VB . NSg/VB+ . . VP/J D   NSg/VB  . . NSg$         VP  D/P NSg/VB/J . NSg/C J/R/C ISgPl+ NPr/VXB\n> find   it       . ” And  she  squeezed herself up         closer to Alice’s side      as    she  spoke   .\n# NSg/VB NPr/ISg+ . . VB/C ISg+ VP/J     ISg+    NSg/VB/J/P NSg/JC P  NPr$    NSg/VB/J+ R/C/P ISg+ NSg/VPt .\n>\n#\n> Alice did  not     much         like         keeping so          close    to her     : first , because the Duchess was\n# NPr+  VXPt NSg/R/C NSg/I/J/R/Dq NSg/VB/J/C/P Nᴹ/Vg/J NSg/I/J/R/C NSg/VB/J P  ISg/D$+ . NSg/J . C/P     D   NSg/VB  VLPt\n> very ugly     ; and  secondly , because she  was  exactly the right    height to rest   her\n# J/R  NSg/VB/J . VB/C R        . C/P     ISg+ VLPt R       D   NPr/VB/J N🅪Sg+  P  NSg/VB ISg/D$+\n> chin    upon Alice’s shoulder , and  it       was  an  uncomfortably sharp    chin    . However , she\n# NPr/VB+ P    NPr$    NSg/VB+  . VB/C NPr/ISg+ VLPt D/P R             NPr/VB/J NPr/VB+ . C       . ISg+\n> did  not     like         to be       rude , so          she  bore     it       as    well       as    she  could   .\n# VXPt NSg/R/C NSg/VB/J/C/P P  NSg/VLXB J    . NSg/I/J/R/C ISg+ NSg/VBPt NPr/ISg+ R/C/P NSg/VB/J/R R/C/P ISg+ NSg/VXB .\n>\n#\n> “ The game’s going   on  rather     better     now       , ” she  said , by    way   of keeping up         the\n# . D   NSg$   Nᴹ/Vg/J J/P NPr/VB/J/R NSg/VXB/JC NSg/J/R/C . . ISg+ VP/J . NSg/P NSg/J P  Nᴹ/Vg/J NSg/VB/J/P D\n> conversation a   little     .\n# N🅪Sg/VB+     D/P NPr/I/J/Dq .\n>\n#\n> “ ’ Tis so          , ” said the Duchess : “ and  the moral    of that          is  — ‘          Oh     , ’ tis love      , ’ tis\n# . . ?   NSg/I/J/R/C . . VP/J D   NSg/VB  . . VB/C D   NSg/VB/J P  NSg/I/C/Ddem+ VL3 . Unlintable NPr/VB . . ?   NPr🅪Sg/VB . . ?\n> love      , that          makes  the world   go       round      ! ’ ”\n# NPr🅪Sg/VB . NSg/I/C/Ddem+ NPl/V3 D   NSg/VB+ NSg/VB/J NSg/VB/J/P . . .\n>\n#\n> “ Somebody said , ” Alice whispered , “ that          it’s done      by    everybody minding their own\n# . NSg/I+   VP/J . . NPr+  VP/J      . . NSg/I/C/Ddem+ K    NSg/VPp/J NSg/P NSg/I+    Nᴹ/Vg/J D$+   NSg/VB/J\n> business ! ”\n# N🅪Sg/J+  . .\n>\n#\n> “ Ah       , well       ! It       means  much         the same thing , ” said the Duchess , digging her     sharp\n# . NSg/I/VB . NSg/VB/J/R . NPr/ISg+ NPl/V3 NSg/I/J/R/Dq D+  I/J+ NSg+  . . VP/J D   NSg/VB  . NSg/Vg  ISg/D$+ NPr/VB/J\n> little     chin    into Alice’s shoulder as    she  added , “ and  the moral    of that          is  — ‘          Take\n# NPr/I/J/Dq NPr/VB+ P    NPr$    NSg/VB+  R/C/P ISg+ VP/J  . . VB/C D   NSg/VB/J P  NSg/I/C/Ddem+ VL3 . Unlintable NSg/VB\n> care    of the sense    , and  the sounds  will    take   care    of themselves . ’ ”\n# N🅪Sg/VB P  D   N🅪Sg/VB+ . VB/C D   NPl/V3+ NPr/VXB NSg/VB N🅪Sg/VB P  IPl+       . . .\n>\n#\n> “ How   fond     she  is  of finding morals in        things ! ” Alice thought to herself .\n# . NSg/C NSg/VB/J ISg+ VL3 P  Nᴹ/Vg/J NPl/V3 NPr/J/R/P NPl+   . . NPr+  N🅪Sg/VP P  ISg+    .\n>\n#\n> “ I       dare    say    you’re wondering why    I       don’t put     my  arm       round      your waist , ” the\n# . ISg/#r+ NPr/VXB NSg/VB K      Nᴹ/Vg/J   NSg/VB ISg/#r+ VXB   NSg/VBP D$+ NSg/VB/J+ NSg/VB/J/P D$+  NSg+  . . D\n> Duchess said after a   pause   : “ the reason   is  , that          I’m doubtful about the temper\n# NSg/VB  VP/J P     D/P NSg/VB+ . . D   N🅪Sg/VB+ VL3 . NSg/I/C/Ddem+ K   NSg/J    J/P   D   NSg/VB/JC\n> of your flamingo . Shall I       try      the experiment ? ”\n# P  D$+  NSg/J    . VXB   ISg/#r+ NSg/VB/J D+  NSg/VB+    . .\n>\n#\n> “ He       might    bite   , ” Alice cautiously replied , not     feeling   at    all           anxious to have\n# . NPr/ISg+ Nᴹ/VXB/J NSg/VB . . NPr+  R          VP/J    . NSg/R/C N🅪Sg/Vg/J NSg/P NSg/I/J/C/Dq+ J+      P  NSg/VXB\n> the experiment tried .\n# D+  NSg/VB+    VP/J  .\n>\n#\n> “ Very true     , ” said the Duchess : “ flamingoes and  mustard both   bite   . And  the moral\n# . J/R  NSg/VB/J . . VP/J D   NSg/VB  . . NPl        VB/C Nᴹ/J    I/C/Dq NSg/VB . VB/C D   NSg/VB/J\n> of that          is  — ‘          Birds  of a    feather flock   together . ’ ”\n# P  NSg/I/C/Ddem+ VL3 . Unlintable NPl/V3 P  D/P+ NSg/VB+ NSg/VB+ J        . . .\n>\n#\n> “ Only  mustard isn’t   a   bird      , ” Alice remarked .\n# . J/R/C Nᴹ/J    NSg/VX3 D/P NPr/VB/J+ . . NPr+  VP/J     .\n>\n#\n> “ Right    , as    usual , ” said the Duchess : “ what   a   clear    way    you    have    of putting\n# . NPr/VB/J . R/C/P NSg/J . . VP/J D   NSg/VB  . . NSg/I+ D/P NSg/VB/J NSg/J+ ISgPl+ NSg/VXB P  Nᴹ/Vg/J\n> things ! ”\n# NPl+   . .\n>\n#\n> “ It’s a    mineral , I       think  , ” said Alice .\n# . K    D/P+ NSg/J+  . ISg/#r+ NSg/VB . . VP/J NPr+  .\n>\n#\n> “ Of course  it       is  , ” said the Duchess , who    seemed ready    to agree to everything\n# . P  NSg/VB+ NPr/ISg+ VL3 . . VP/J D   NSg/VB  . NPr/I+ VP/J   NSg/VB/J P  VB    P  NSg/I/VB+\n> that         Alice said ; “ there’s a   large mustard - mine      near       here . And  the moral    of that\n# NSg/I/C/Ddem NPr+  VP/J . . K       D/P NSg/J Nᴹ/J    . NSg/I/VB+ NSg/VB/J/P J/R  . VB/C D   NSg/VB/J P  NSg/I/C/Ddem+\n> is  — ‘          The more         there is  of mine      , the less       there is  of yours . ’ ”\n# VL3 . Unlintable D   NPr/I/J/R/Dq R     VL3 P  NSg/I/VB+ . D   VB/J/R/C/P R     VL3 P  I+    . . .\n>\n#\n> “ Oh     , I       know ! ” exclaimed Alice , who    had not     attended to this    last      remark  , “ it’s a\n# . NPr/VB . ISg/#r+ VB   . . VP/J      NPr+  . NPr/I+ VP  NSg/R/C VP/J     P  I/Ddem+ NSg/VB/J+ NSg/VB+ . . K    D/P+\n> vegetable . It       doesn’t look   like         one     , but     it       is  . ”\n# NSg/J+    . NPr/ISg+ VX3     NSg/VB NSg/VB/J/C/P NSg/I/J . NSg/C/P NPr/ISg+ VL3 . .\n>\n#\n> “ I       quite agree with you    , ” said the Duchess ; “ and  the moral    of that          is  — ‘          Be       what\n# . ISg/#r+ R     VB    P    ISgPl+ . . VP/J D   NSg/VB  . . VB/C D   NSg/VB/J P  NSg/I/C/Ddem+ VL3 . Unlintable NSg/VLXB NSg/I+\n> you    would seem to be       ’ — or    if    you’d like         it       put     more         simply — ‘          Never imagine\n# ISgPl+ VXB   VB   P  NSg/VLXB . . NPr/C NSg/C K     NSg/VB/J/C/P NPr/ISg+ NSg/VBP NPr/I/J/R/Dq R      . Unlintable R     NSg/VB\n> yourself not     to be       otherwise than what   it       might    appear to others that         what   you\n# ISg+     NSg/R/C P  NSg/VLXB J/R       C/P  NSg/I+ NPr/ISg+ Nᴹ/VXB/J VB     P  NPl/V3 NSg/I/C/Ddem NSg/I+ ISgPl+\n> were     or    might    have    been     was  not     otherwise than what   you    had been     would have\n# NSg/VLPt NPr/C Nᴹ/VXB/J NSg/VXB NSg/VLPp VLPt NSg/R/C J/R       C/P  NSg/I+ ISgPl+ VP  NSg/VLPp VXB   NSg/VXB\n> appeared to them     to be       otherwise . ’ ”\n# VP/J     P  NSg/IPl+ P  NSg/VLXB J/R       . . .\n>\n#\n> “ I       think  I       should understand that         better     , ” Alice said very politely , “ if    I       had\n# . ISg/#r+ NSg/VB ISg/#r+ VXB    VB         NSg/I/C/Ddem NSg/VXB/JC . . NPr+  VP/J J/R  R        . . NSg/C ISg/#r+ VP\n> it       written down        : but     I       can’t quite follow it       as    you    say    it       . ”\n# NPr/ISg+ VPp/J   N🅪Sg/VB/J/P . NSg/C/P ISg/#r+ VXB   R     NSg/VB NPr/ISg+ R/C/P ISgPl+ NSg/VB NPr/ISg+ . .\n>\n#\n> “ That’s nothing  to what   I       could   say    if    I       chose   , ” the Duchess replied , in        a\n# . NSg$   NSg/I/J+ P  NSg/I+ ISg/#r+ NSg/VXB NSg/VB NSg/C ISg/#r+ NSg/VPt . . D   NSg/VB  VP/J    . NPr/J/R/P D/P\n> pleased tone       .\n# VP/J    N🅪Sg/I/VB+ .\n>\n#\n> “ Pray don’t trouble  yourself to say    it       any    longer than that          , ” said Alice .\n# . VB   VXB   N🅪Sg/VB+ ISg+     P  NSg/VB NPr/ISg+ I/R/Dq NSg/JC C/P  NSg/I/C/Ddem+ . . VP/J NPr+  .\n>\n#\n> “ Oh     , don’t talk    about trouble  ! ” said the Duchess . “ I       make   you    a   present  of\n# . NPr/VB . VXB   N🅪Sg/VB J/P   N🅪Sg/VB+ . . VP/J D   NSg/VB  . . ISg/#r+ NSg/VB ISgPl+ D/P NSg/VB/J P\n> everything I’ve said as    yet      . ”\n# NSg/I/VB+  K    VP/J R/C/P NSg/VB/C . .\n>\n#\n> “ A   cheap    sort   of present  ! ” thought Alice . “ I’m glad     they don’t give   birthday\n# . D/P NSg/VB/J NSg/VB P  NSg/VB/J . . N🅪Sg/VP NPr+  . . K   NSg/VB/J IPl+ VXB   NSg/VB NSg/VB+\n> presents like         that          ! ” But     she  did  not     venture to say    it       out          loud  .\n# NPl/V3+  NSg/VB/J/C/P NSg/I/C/Ddem+ . . NSg/C/P ISg+ VXPt NSg/R/C NSg/VB+ P  NSg/VB NPr/ISg+ NSg/VB/J/R/P NSg/J .\n>\n#\n> “ Thinking again ? ” the Duchess asked , with another dig    of her     sharp    little     chin    .\n# . Nᴹ/Vg/J  P     . . D   NSg/VB  VP/J  . P    I/D     NSg/VB P  ISg/D$+ NPr/VB/J NPr/I/J/Dq NPr/VB+ .\n>\n#\n> “ I’ve a   right     to think  , ” said Alice sharply , for   she  was  beginning to feel     a\n# . K    D/P NPr/VB/J+ P  NSg/VB . . VP/J NPr+  R       . R/C/P ISg+ VLPt NSg/Vg/J+ P  NSg/I/VB D/P\n> little     worried .\n# NPr/I/J/Dq VP/J    .\n>\n#\n> “ Just about as    much         right    , ” said the Duchess , “ as    pigs    have    to fly      ; and  the m           — ”\n# . J/R  J/P   R/C/P NSg/I/J/R/Dq NPr/VB/J . . VP/J D   NSg/VB  . . R/C/P NPl/V3+ NSg/VXB P  NSg/VB/J . VB/C D   NPr/VB/J/#r . .\n>\n#\n> But     here , to Alice’s great  surprise , the Duchess’s voice   died away , even       in        the\n# NSg/C/P J/R  . P  NPr$    NSg/J+ NSg/VB+  . D   NSg$      NSg/VB+ VP/J VB/J . NSg/VB/J/R NPr/J/R/P D\n> middle   of her     favourite     word    ‘          moral    , ’ and  the arm       that          was  linked into hers\n# NSg/VB/J P  ISg/D$+ NSg/VB/J/Comm NSg/VB+ Unlintable NSg/VB/J . . VB/C D   NSg/VB/J+ NSg/I/C/Ddem+ VLPt VP/J   P    ISg+\n> began to tremble . Alice looked up         , and  there stood the Queen     in        front    of them     ,\n# VPt   P  NSg/VB  . NPr+  VP/J   NSg/VB/J/P . VB/C R+    VP    D   NPr/VB/J+ NPr/J/R/P NSg/VB/J P  NSg/IPl+ .\n> with her     arms    folded , frowning like         a   thunderstorm .\n# P    ISg/D$+ NPl/V3+ VP/J   . Nᴹ/Vg/J  NSg/VB/J/C/P D/P NSg          .\n>\n#\n> “ A    fine      day     , your Majesty ! ” the Duchess began in        a   low        , weak voice   .\n# . D/P+ NSg/VB/J+ NPr🅪Sg+ . D$+  N🅪Sg/I+ . . D   NSg/VB  VPt   NPr/J/R/P D/P NSg/VB/J/R . J    NSg/VB+ .\n>\n#\n> “ Now       , I       give   you    fair      warning    , ” shouted the Queen     , stamping on  the ground     as    she\n# . NSg/J/R/C . ISg/#r+ NSg/VB ISgPl+ NSg/VB/J+ N🅪Sg/Vg/J+ . . VP/J    D+  NPr/VB/J+ . NSg      J/P D+  N🅪Sg/VB/J+ R/C/P ISg+\n> spoke   ; “ either you    or    your head      must    be       off        , and  that          in        about half      no        time       !\n# NSg/VPt . . I/C    ISgPl+ NPr/C D$+  NPr/VB/J+ NSg/VXB NSg/VLXB NSg/VB/J/P . VB/C NSg/I/C/Ddem+ NPr/J/R/P J/P   N🅪Sg/J/P+ NSg/Dq/P+ N🅪Sg/VB/J+ .\n> Take   your choice  ! ”\n# NSg/VB D$+  N🅪Sg/J+ . .\n>\n#\n> The Duchess took her     choice  , and  was  gone    in        a   moment .\n# D   NSg/VB  VPt  ISg/D$+ N🅪Sg/J+ . VB/C VLPt VPp/J/P NPr/J/R/P D/P NSg+   .\n>\n#\n> “ Let’s go       on  with the game      , ” the Queen     said to Alice ; and  Alice was  too much\n# . NSg$  NSg/VB/J J/P P    D   NSg/VB/J+ . . D   NPr/VB/J+ VP/J P  NPr+  . VB/C NPr+  VLPt R   NSg/I/J/R/Dq\n> frightened to say    a   word    , but     slowly followed her     back     to the croquet - ground     .\n# VP/J       P  NSg/VB D/P NSg/VB+ . NSg/C/P R      VP/J     ISg/D$+ NSg/VB/J P  D   NSg/VB  . N🅪Sg/VB/J+ .\n>\n#\n> The other     guests  had taken advantage of the Queen’s absence , and  were     resting in\n# D+  NSg/VB/J+ NPl/V3+ VP  VPp/J N🅪Sg/VB   P  D   NPr$    N🅪Sg+   . VB/C NSg/VLPt Nᴹ/Vg/J NPr/J/R/P\n> the shade    : however , the moment they saw     her     , they hurried back     to the game      , the\n# D   N🅪Sg/VB+ . C       . D   NSg+   IPl+ NSg/VPt ISg/D$+ . IPl+ VP/J    NSg/VB/J P  D   NSg/VB/J+ . D\n> Queen     merely remarking that         a   moment’s delay       would cost       them     their lives .\n# NPr/VB/J+ R      Nᴹ/Vg/J   NSg/I/C/Ddem D/P NSg$     NSg/VBPt/J+ VXB   N🅪Sg/VBP/J NSg/IPl+ D$+   V3+   .\n>\n#\n> All           the time       they were     playing the Queen     never left     off        quarrelling with the\n# NSg/I/J/C/Dq+ D+  N🅪Sg/VB/J+ IPl+ NSg/VLPt Nᴹ/Vg/J D+  NPr/VB/J+ R     NPr/VP/J NSg/VB/J/P Nᴹ/Vg/Comm  P    D\n> other    players , and  shouting “ Off        with his     head      ! ” or    “ Off        with her     head      ! ” Those\n# NSg/VB/J NPl+    . VB/C Nᴹ/Vg/J+ . NSg/VB/J/P P    ISg/D$+ NPr/VB/J+ . . NPr/C . NSg/VB/J/P P    ISg/D$+ NPr/VB/J+ . . I/Ddem+\n> whom she  sentenced were     taken into custody by    the soldiers , who   of course  had to\n# I+   ISg+ VP/J      NSg/VLPt VPp/J P    Nᴹ+     NSg/P D   NPl/V3+  . NPr/I P  NSg/VB+ VP  P\n> leave  off        being        arches to do  this    , so          that          by    the end    of half      an  hour or    so\n# NSg/VB NSg/VB/J/P N🅪Sg/VLg/J/C NPl/V3 P  VXB I/Ddem+ . NSg/I/J/R/C NSg/I/C/Ddem+ NSg/P D   NSg/VB P  N🅪Sg/J/P+ D/P NSg+ NPr/C NSg/I/J/R/C\n> there were     no       arches left     , and  all          the players , except the King      , the Queen     , and\n# R+    NSg/VLPt NSg/Dq/P NPl/V3 NPr/VP/J . VB/C NSg/I/J/C/Dq D   NPl+    . VB/C/P D   NPr/VB/J+ . D   NPr/VB/J+ . VB/C\n> Alice , were     in        custody and  under   sentence of execution .\n# NPr+  . NSg/VLPt NPr/J/R/P Nᴹ+     VB/C NSg/J/P NSg/VB   P  N🅪Sg+     .\n>\n#\n> Then      the Queen     left      off        , quite out          of breath     , and  said to Alice , “ Have    you    seen\n# NSg/J/R/C D+  NPr/VB/J+ NPr/VP/J+ NSg/VB/J/P . R     NSg/VB/J/R/P P  N🅪Sg/VB/J+ . VB/C VP/J P  NPr+  . . NSg/VXB ISgPl+ NSg/VPp\n> the Mock      Turtle  yet      ? ”\n# D+  NSg/VB/J+ NSg/VB+ NSg/VB/C . .\n>\n#\n> “ No       , ” said Alice . “ I       don’t even       know what   a   Mock     Turtle  is  . ”\n# . NSg/Dq/P . . VP/J NPr+  . . ISg/#r+ VXB   NSg/VB/J/R VB   NSg/I+ D/P NSg/VB/J NSg/VB+ VL3 . .\n>\n#\n> “ It’s the thing Mock      Turtle  Soup     is  made from , ” said the Queen     .\n# . K    D+  NSg+  NSg/VB/J+ NSg/VB+ N🅪Sg/VB+ VL3 VP   P    . . VP/J D   NPr/VB/J+ .\n>\n#\n> “ I       never saw     one     , or    heard of one     , ” said Alice .\n# . ISg/#r+ R     NSg/VPt NSg/I/J . NPr/C VP/J  P  NSg/I/J . . VP/J NPr+  .\n>\n#\n> “ Come       on  , then      , ” said the Queen     , “ and  he       shall tell   you    his     history . ”\n# . NSg/VBPp/P J/P . NSg/J/R/C . . VP/J D+  NPr/VB/J+ . . VB/C NPr/ISg+ VXB   NPr/VB ISgPl+ ISg/D$+ N🅪Sg+   . .\n>\n#\n> As    they walked off        together , Alice heard the King      say    in        a    low         voice   , to the\n# R/C/P IPl+ VP/J   NSg/VB/J/P J        . NPr+  VP/J  D+  NPr/VB/J+ NSg/VB NPr/J/R/P D/P+ NSg/VB/J/R+ NSg/VB+ . P  D+\n> company generally , “ You    are all          pardoned . ” “ Come       , that’s a    good     thing ! ” she  said\n# N🅪Sg+   R         . . ISgPl+ VLB NSg/I/J/C/Dq VP/J     . . . NSg/VBPp/P . NSg$   D/P+ NPr/VB/J NSg+  . . ISg+ VP/J\n> to herself , for   she  had felt      quite unhappy  at    the number     of executions the Queen\n# P  ISg+    . R/C/P ISg+ VP  N🅪Sg/VP/J R     NSg/VB/J NSg/P D   N🅪Sg/VB/JC P  NPl+       D+  NPr/VB/J+\n> had ordered .\n# VP  VP/J    .\n>\n#\n> They very soon came      upon a   Gryphon , lying   fast       asleep in        the sun     . ( If    you    don’t\n# IPl+ J/R  J/R  NSg/VPt/P P    D/P ?       . Nᴹ/Vg/J NSg/VB/J/R J      NPr/J/R/P D   NPr/VB+ . . NSg/C ISgPl+ VXB\n> know what   a   Gryphon is  , look   at    the picture . ) “ Up         , lazy      thing ! ” said the Queen     ,\n# VB   NSg/I+ D/P ?       VL3 . NSg/VB NSg/P D   NSg/VB+ . . . NSg/VB/J/P . NSg/VB/J+ NSg+  . . VP/J D+  NPr/VB/J+ .\n> “ and  take   this    young    lady    to see    the Mock      Turtle  , and  to hear his     history . I\n# . VB/C NSg/VB I/Ddem+ NPr/VB/J NPr/VB+ P  NSg/VB D+  NSg/VB/J+ NSg/VB+ . VB/C P  VB   ISg/D$+ N🅪Sg+   . ISg/#r+\n> must    go       back     and  see    after some      executions I       have    ordered ; ” and  she  walked off        ,\n# NSg/VXB NSg/VB/J NSg/VB/J VB/C NSg/VB P     I/J/R/Dq+ NPl+       ISg/#r+ NSg/VXB VP/J    . . VB/C ISg+ VP/J   NSg/VB/J/P .\n> leaving Alice alone with the Gryphon . Alice did  not     quite like         the look   of the\n# Nᴹ/Vg/J NPr+  J     P    D   ?       . NPr+  VXPt NSg/R/C R     NSg/VB/J/C/P D   NSg/VB P  D+\n> creature , but     on  the whole she  thought it       would be       quite as    safe     to stay     with it\n# NSg+     . NSg/C/P J/P D+  NSg/J ISg+ N🅪Sg/VP NPr/ISg+ VXB   NSg/VLXB R     R/C/P NSg/VB/J P  NSg/VB/J P    NPr/ISg+\n> as    to go       after that         savage    Queen     : so          she  waited .\n# R/C/P P  NSg/VB/J P     NSg/I/C/Ddem NPr/VB/J+ NPr/VB/J+ . NSg/I/J/R/C ISg+ VP/J   .\n>\n#\n> The Gryphon sat      up         and  rubbed its     eyes    : then      it       watched the Queen     till       she  was\n# D   ?       NSg/VP/J NSg/VB/J/P VB/C VP/J   ISg/D$+ NPl/V3+ . NSg/J/R/C NPr/ISg+ VP/J    D   NPr/VB/J+ NSg/VB/C/P ISg+ VLPt\n> out          of sight    : then      it       chuckled . “ What   fun     ! ” said the Gryphon , half      to itself ,\n# NSg/VB/J/R/P P  N🅪Sg/VB+ . NSg/J/R/C NPr/ISg+ VP/J     . . NSg/I+ Nᴹ/VB/J . . VP/J D   ?       . N🅪Sg/J/P+ P  ISg+   .\n> half      to Alice .\n# N🅪Sg/J/P+ P  NPr+  .\n>\n#\n> “ What   is  the fun     ? ” said Alice .\n# . NSg/I+ VL3 D   Nᴹ/VB/J . . VP/J NPr+  .\n>\n#\n> “ Why    , she  , ” said the Gryphon . “ It’s all          her     fancy    , that          : they never executes\n# . NSg/VB . ISg+ . . VP/J D   ?       . . K    NSg/I/J/C/Dq ISg/D$+ NSg/VB/J . NSg/I/C/Ddem+ . IPl+ R     V3\n> nobody , you    know . Come       on  ! ”\n# NSg/I+ . ISgPl+ VB   . NSg/VBPp/P J/P . .\n>\n#\n> “ Everybody says   ‘          come       on  ! ’ here , ” thought Alice , as    she  went    slowly after it       : “ I\n# . NSg/I+    NPl/V3 Unlintable NSg/VBPp/P J/P . . J/R  . . N🅪Sg/VP NPr+  . R/C/P ISg+ NSg/VPt R      P     NPr/ISg+ . . ISg/#r+\n> never was  so          ordered about in        all           my  life     , never ! ”\n# R     VLPt NSg/I/J/R/C VP/J    J/P   NPr/J/R/P NSg/I/J/C/Dq+ D$+ N🅪Sg/VB+ . R     . .\n>\n#\n> They had not     gone    far      before they saw     the Mock     Turtle  in        the distance , sitting\n# IPl+ VP  NSg/R/C VPp/J/P NSg/VB/J C/P    IPl+ NSg/VPt D   NSg/VB/J NSg/VB+ NPr/J/R/P D+  N🅪Sg/VB+ . NSg/Vg/J\n> sad      and  lonely on  a   little     ledge  of rock       , and  , as    they came      nearer , Alice could\n# NSg/VB/J VB/C J/R    J/P D/P NPr/I/J/Dq NSg/VB P  NPr🅪Sg/VB+ . VB/C . R/C/P IPl+ NSg/VPt/P NSg/JC . NPr+  NSg/VXB\n> hear him  sighing as    if    his     heart    would break   . She  pitied him  deeply . “ What   is\n# VB   ISg+ Nᴹ/Vg/J R/C/P NSg/C ISg/D$+ N🅪Sg/VB+ VXB   NSg/VB+ . ISg+ VP/J   ISg+ R      . . NSg/I+ VL3\n> his     sorrow  ? ” she  asked the Gryphon , and  the Gryphon answered , very nearly in        the\n# ISg/D$+ N🅪Sg/VB . . ISg+ VP/J  D   ?       . VB/C D   ?       VP/J     . J/R  R      NPr/J/R/P D\n> same words   as    before , “ It’s all          his     fancy    , that          : he       hasn’t got no       sorrow  , you\n# I/J  NPl/V3+ R/C/P C/P    . . K    NSg/I/J/C/Dq ISg/D$+ NSg/VB/J . NSg/I/C/Ddem+ . NPr/ISg+ V3     VP  NSg/Dq/P N🅪Sg/VB . ISgPl+\n> know . Come       on  ! ”\n# VB   . NSg/VBPp/P J/P . .\n>\n#\n> So          they went    up         to the Mock      Turtle  , who    looked at    them     with large eyes   full     of\n# NSg/I/J/R/C IPl+ NSg/VPt NSg/VB/J/P P  D+  NSg/VB/J+ NSg/VB+ . NPr/I+ VP/J   NSg/P NSg/IPl+ P    NSg/J NPl/V3 NSg/VB/J P\n> tears   , but     said nothing  .\n# NPl/V3+ . NSg/C/P VP/J NSg/I/J+ .\n>\n#\n> “ This   here young     lady    , ” said the Gryphon , “ she  wants  for   to know your history ,\n# . I/Ddem J/R  NPr/VB/J+ NPr/VB+ . . VP/J D   ?       . . ISg+ NPl/V3 R/C/P P  VB   D$+  N🅪Sg+   .\n> she  do  . ”\n# ISg+ VXB . .\n>\n#\n> “ I’ll tell   it       her     , ” said the Mock     Turtle  in        a   deep  , hollow   tone       : “ sit    down        , both\n# . K    NPr/VB NPr/ISg+ ISg/D$+ . . VP/J D   NSg/VB/J NSg/VB+ NPr/J/R/P D/P NSg/J . NSg/VB/J N🅪Sg/I/VB+ . . NSg/VB N🅪Sg/VB/J/P . I/C/Dq\n> of you    , and  don’t speak  a   word    till       I’ve finished . ”\n# P  ISgPl+ . VB/C VXB   NSg/VB D/P NSg/VB+ NSg/VB/C/P K    VP/J     . .\n>\n#\n> So          they sat      down        , and  nobody spoke   for   some      minutes . Alice thought to herself ,\n# NSg/I/J/R/C IPl+ NSg/VP/J N🅪Sg/VB/J/P . VB/C NSg/I+ NSg/VPt R/C/P I/J/R/Dq+ NPl/V3+ . NPr+  N🅪Sg/VP P  ISg+    .\n> “ I       don’t see    how   he       can     ever finish , if    he       doesn’t begin  . ” But     she  waited\n# . ISg/#r+ VXB   NSg/VB NSg/C NPr/ISg+ NPr/VXB J/R  NSg/VB . NSg/C NPr/ISg+ VX3     NSg/VB . . NSg/C/P ISg+ VP/J\n> patiently .\n# R         .\n>\n#\n> “ Once  , ” said the Mock      Turtle  at    last     , with a   deep  sigh   , “ I       was  a   real  Turtle . ”\n# . NSg/C . . VP/J D+  NSg/VB/J+ NSg/VB+ NSg/P NSg/VB/J . P    D/P NSg/J NSg/VB . . ISg/#r+ VLPt D/P NSg/J NSg/VB . .\n>\n#\n> These   words   were     followed by    a   very long      silence , broken only  by    an  occasional\n# I/Ddem+ NPl/V3+ NSg/VLPt VP/J     NSg/P D/P J/R  NPr/VB/J+ NSg/VB+ . VPp/J  J/R/C NSg/P D/P NSg/J\n> exclamation of “ Hjckrrh ! ” from the Gryphon , and  the constant heavy    sobbing  of\n# NSg         P  . ?       . . P    D   ?       . VB/C D   NSg/J    NSg/VB/J NSg/Vg/J P\n> the Mock     Turtle  . Alice was  very nearly getting up         and  saying    , “ Thank  you    , sir     ,\n# D   NSg/VB/J NSg/VB+ . NPr+  VLPt J/R  R      NSg/Vg  NSg/VB/J/P VB/C N🅪Sg/Vg/J . . NSg/VB ISgPl+ . NPr/VB+ .\n> for   your interesting story   , ” but     she  could   not     help   thinking there must    be       more\n# R/C/P D$+  Vg/J+       NSg/VB+ . . NSg/C/P ISg+ NSg/VXB NSg/R/C NSg/VB Nᴹ/Vg/J  R+    NSg/VXB NSg/VLXB NPr/I/J/R/Dq\n> to come       , so          she  sat      still      and  said nothing  .\n# P  NSg/VBPp/P . NSg/I/J/R/C ISg+ NSg/VP/J NSg/VB/J/R VB/C VP/J NSg/I/J+ .\n>\n#\n> “ When    we   were     little     , ” the Mock      Turtle  went    on  at    last     , more         calmly , though\n# . NSg/I/C IPl+ NSg/VLPt NPr/I/J/Dq . . D+  NSg/VB/J+ NSg/VB+ NSg/VPt J/P NSg/P NSg/VB/J . NPr/I/J/R/Dq R      . C\n> still      sobbing  a   little     now       and  then      , “ we   went    to school  in        the sea  . The master\n# NSg/VB/J/R NSg/Vg/J D/P NPr/I/J/Dq NSg/J/R/C VB/C NSg/J/R/C . . IPl+ NSg/VPt P  N🅪Sg/VB NPr/J/R/P D   NSg+ . D+  NPr/VB/J+\n> was  an  old   Turtle — we   used to call   him  Tortoise — ”\n# VLPt D/P NSg/J NSg/VB . IPl+ VP/J P  NSg/VB ISg+ NSg+     . .\n>\n#\n> “ Why    did  you    call   him  Tortoise , if    he       wasn’t one     ? ” Alice asked .\n# . NSg/VB VXPt ISgPl+ NSg/VB ISg+ NSg+     . NSg/C NPr/ISg+ VPt    NSg/I/J . . NPr+  VP/J  .\n>\n#\n> “ We   called him  Tortoise because he       taught us       , ” said the Mock      Turtle  angrily :\n# . IPl+ VP/J   ISg+ NSg+     C/P     NPr/ISg+ VP     NPr/IPl+ . . VP/J D+  NSg/VB/J+ NSg/VB+ R       .\n> “ really you    are very dull ! ”\n# . R      ISgPl+ VLB J/R  VB/J . .\n>\n#\n> “ You    ought     to be       ashamed of yourself for   asking  such   a    simple    question , ” added\n# . ISgPl+ NSg/I/VXB P  NSg/VLXB J       P  ISg+     R/C/P Nᴹ/Vg/J NSg/I+ D/P+ NSg/VB/J+ NSg/VB+  . . VP/J\n> the Gryphon ; and  then      they both   sat      silent and  looked at    poor     Alice , who    felt\n# D   ?       . VB/C NSg/J/R/C IPl+ I/C/Dq NSg/VP/J NSg/J  VB/C VP/J   NSg/P NSg/VB/J NPr+  . NPr/I+ N🅪Sg/VP/J\n> ready    to sink   into the earth    . At    last     the Gryphon said to the Mock     Turtle  ,\n# NSg/VB/J P  NSg/VB P    D   NPrᴹ/VB+ . NSg/P NSg/VB/J D   ?       VP/J P  D   NSg/VB/J NSg/VB+ .\n> “ Drive   on  , old   fellow ! Don’t be       all          day     about it       ! ” and  he       went    on  in        these\n# . N🅪Sg/VB J/P . NSg/J NSg    . VXB   NSg/VLXB NSg/I/J/C/Dq NPr🅪Sg+ J/P   NPr/ISg+ . . VB/C NPr/ISg+ NSg/VPt J/P NPr/J/R/P I/Ddem+\n> words   :\n# NPl/V3+ .\n>\n#\n> “ Yes    , we   went    to school  in        the sea  , though you    mayn’t believe it       — ”\n# . NPl/VB . IPl+ NSg/VPt P  N🅪Sg/VB NPr/J/R/P D+  NSg+ . C      ISgPl+ VXB    VB      NPr/ISg+ . .\n>\n#\n> “ I       never said I       didn’t ! ” interrupted Alice .\n# . ISg/#r+ R     VP/J ISg/#r+ VXPt   . . VP/J        NPr+  .\n>\n#\n> “ You    did  , ” said the Mock      Turtle  .\n# . ISgPl+ VXPt . . VP/J D+  NSg/VB/J+ NSg/VB+ .\n>\n#\n> “ Hold     your tongue   ! ” added the Gryphon , before Alice could   speak  again . The Mock\n# . NSg/VB/J D$+  N🅪Sg/VB+ . . VP/J  D   ?       . C/P    NPr+  NSg/VXB NSg/VB P     . D+  NSg/VB/J+\n> Turtle  went    on  .\n# NSg/VB+ NSg/VPt J/P .\n>\n#\n> “ We   had the best       of educations — in        fact , we   went    to school  every day     — ”\n# . IPl+ VP  D   NPr/VXB/JS P  NPl        . NPr/J/R/P NSg+ . IPl+ NSg/VPt P  N🅪Sg/VB Dq    NPr🅪Sg+ . .\n>\n#\n> “ I’ve been     to a   day     - school   , too , ” said Alice ; “ you    needn’t be       so          proud as    all\n# . K    NSg/VLPp P  D/P NPr🅪Sg+ . N🅪Sg/VB+ . R   . . VP/J NPr+  . . ISgPl+ VXB     NSg/VLXB NSg/I/J/R/C J     R/C/P NSg/I/J/C/Dq\n> that          . ”\n# NSg/I/C/Ddem+ . .\n>\n#\n> “ With extras ? ” asked the Mock      Turtle  a   little     anxiously .\n# . P    NPl+   . . VP/J  D+  NSg/VB/J+ NSg/VB+ D/P NPr/I/J/Dq R         .\n>\n#\n> “ Yes    , ” said Alice , “ we   learned French      and  music      . ”\n# . NPl/VB . . VP/J NPr+  . . IPl+ VP/J    NPr🅪Sg/VB/J VB/C N🅪Sg/VB/J+ . .\n>\n#\n> “ And  washing ? ” said the Mock      Turtle  .\n# . VB/C Nᴹ/Vg/J . . VP/J D+  NSg/VB/J+ NSg/VB+ .\n>\n#\n> “ Certainly not     ! ” said Alice indignantly .\n# . R         NSg/R/C . . VP/J NPr+  R           .\n>\n#\n> “ Ah       ! then      yours wasn’t a   really good     school   , ” said the Mock     Turtle  in        a   tone      of\n# . NSg/I/VB . NSg/J/R/C I+    VPt    D/P R      NPr/VB/J N🅪Sg/VB+ . . VP/J D   NSg/VB/J NSg/VB+ NPr/J/R/P D/P N🅪Sg/I/VB P\n> great relief . “ Now       at    ours they had at    the end    of the bill    , ‘          French      , music      , and\n# NSg/J NSg/J+ . . NSg/J/R/C NSg/P I+   IPl+ VP  NSg/P D   NSg/VB P  D+  NPr/VB+ . Unlintable NPr🅪Sg/VB/J . N🅪Sg/VB/J+ . VB/C\n> washing — extra . ’ ”\n# Nᴹ/Vg/J . NSg/J . . .\n>\n#\n> “ You    couldn’t have    wanted it       much         , ” said Alice ; “ living  at    the bottom   of the\n# . ISgPl+ VXB      NSg/VXB VP/J   NPr/ISg+ NSg/I/J/R/Dq . . VP/J NPr+  . . Nᴹ/Vg/J NSg/P D   NSg/VB/J P  D\n> sea  . ”\n# NSg+ . .\n>\n#\n> “ I       couldn’t afford to learn  it       . ” said the Mock      Turtle  with a   sigh   . “ I       only  took\n# . ISg/#r+ VXB      VB     P  NSg/VB NPr/ISg+ . . VP/J D+  NSg/VB/J+ NSg/VB+ P    D/P NSg/VB . . ISg/#r+ J/R/C VPt\n> the regular course  . ”\n# D+  NSg/J+  NSg/VB+ . .\n>\n#\n> “ What   was  that          ? ” inquired Alice .\n# . NSg/I+ VLPt NSg/I/C/Ddem+ . . VP/J     NPr+  .\n>\n#\n> “ Reeling and  Writhing , of course  , to begin  with , ” the Mock     Turtle  replied ; “ and\n# . Nᴹ/Vg/J VB/C Nᴹ/Vg/J+ . P  NSg/VB+ . P  NSg/VB P    . . D   NSg/VB/J NSg/VB+ VP/J    . . VB/C\n> then      the different branches of Arithmetic — Ambition , Distraction , Uglification ,\n# NSg/J/R/C D   NSg/J     NPl/V3   P  Nᴹ/J       . N🅪Sg/VB+ . N🅪Sg/VB+    . N🅪Sg         .\n> and  Derision . ”\n# VB/C N🅪Sg     . .\n>\n#\n> “ I       never heard of ‘          Uglification , ’ ” Alice ventured to say    . “ What   is  it       ? ”\n# . ISg/#r+ R     VP/J  P  Unlintable N🅪Sg         . . . NPr+  VP/J     P  NSg/VB . . NSg/I+ VL3 NPr/ISg+ . .\n>\n#\n> The Gryphon lifted up         both   its     paws    in        surprise . “ What   ! Never heard of\n# D   ?       VP/J   NSg/VB/J/P I/C/Dq ISg/D$+ NPl/V3+ NPr/J/R/P NSg/VB+  . . NSg/I+ . R     VP/J  P\n> uglifying ! ” it       exclaimed . “ You    know what   to beautify is  , I       suppose ? ”\n# ?         . . NPr/ISg+ VP/J      . . ISgPl+ VB   NSg/I+ P  VB       VL3 . ISg/#r+ VB      . .\n>\n#\n> “ Yes    , ” said Alice doubtfully : “ it       means  — to — make   — anything  — prettier . ”\n# . NPl/VB . . VP/J NPr+  R          . . NPr/ISg+ NPl/V3 . P  . NSg/VB . NSg/I/VB+ . NSg/JC   . .\n>\n#\n> “ Well       , then      , ” the Gryphon went    on  , “ if    you    don’t know what   to uglify is  , you    are\n# . NSg/VB/J/R . NSg/J/R/C . . D   ?       NSg/VPt J/P . . NSg/C ISgPl+ VXB   VB   NSg/I+ P  ?      VL3 . ISgPl+ VLB\n> a   simpleton . ”\n# D/P NSg       . .\n>\n#\n> Alice did  not     feel     encouraged to ask    any     more          questions about it       , so          she  turned\n# NPr+  VXPt NSg/R/C NSg/I/VB VP/J       P  NSg/VB I/R/Dq+ NPr/I/J/R/Dq+ NPl/V3+   J/P   NPr/ISg+ . NSg/I/J/R/C ISg+ VP/J\n> to the Mock      Turtle  , and  said “ What   else    had you    to learn  ? ”\n# P  D+  NSg/VB/J+ NSg/VB+ . VB/C VP/J . NSg/I+ NSg/J/C VP  ISgPl+ P  NSg/VB . .\n>\n#\n> “ Well       , there was  Mystery , ” the Mock      Turtle  replied , counting off        the subjects on\n# . NSg/VB/J/R . R+    VLPt N🅪Sg+   . . D+  NSg/VB/J+ NSg/VB+ VP/J    . Nᴹ/Vg/J  NSg/VB/J/P D+  NPl/V3+  J/P\n> his     flappers , “ — Mystery , ancient and  modern , with Seaography : then      Drawling — the\n# ISg/D$+ NPl      . . . N🅪Sg+   . NSg/J   VB/C NSg/J  . P    ?          . NSg/J/R/C Nᴹ/Vg/J  . D\n> Drawling - master    was  an  old   conger - eel    , that          used to come       once  a   week   : he       taught\n# Nᴹ/Vg/J  . NPr/VB/J+ VLPt D/P NSg/J NSg    . NSg/VB . NSg/I/C/Ddem+ VP/J P  NSg/VBPp/P NSg/C D/P NSg/J+ . NPr/ISg+ VP\n> us       Drawling , Stretching , and  Fainting in        Coils   . ”\n# NPr/IPl+ Nᴹ/Vg/J  . Nᴹ/Vg/J    . VB/C Nᴹ/Vg/J+ NPr/J/R/P NPl/V3+ . .\n>\n#\n> “ What   was  that          like         ? ” said Alice .\n# . NSg/I+ VLPt NSg/I/C/Ddem+ NSg/VB/J/C/P . . VP/J NPr+  .\n>\n#\n> “ Well       , I       can’t show   it       you    myself , ” the Mock     Turtle  said : “ I’m too stiff    . And\n# . NSg/VB/J/R . ISg/#r+ VXB   NSg/VB NPr/ISg+ ISgPl+ ISg+   . . D   NSg/VB/J NSg/VB+ VP/J . . K   R   NSg/VB/J . VB/C\n> the Gryphon never learnt it       . ”\n# D   ?       R     VB     NPr/ISg+ . .\n>\n#\n> “ Hadn’t time       , ” said the Gryphon : “ I       went    to the Classics master    , though . He       was\n# . VPt    N🅪Sg/VB/J+ . . VP/J D   ?       . . ISg/#r+ NSg/VPt P  D   N🅪Pl+    NPr/VB/J+ . C      . NPr/ISg+ VLPt\n> an  old   crab   , he       was  . ”\n# D/P NSg/J NSg/VB . NPr/ISg+ VLPt . .\n>\n#\n> “ I       never went    to him  , ” the Mock      Turtle  said with a   sigh   : “ he       taught Laughing and\n# . ISg/#r+ R     NSg/VPt P  ISg+ . . D+  NSg/VB/J+ NSg/VB+ VP/J P    D/P NSg/VB . . NPr/ISg+ VP     Nᴹ/Vg/J  VB/C\n> Grief  , they used to say    . ”\n# Nᴹ/VB+ . IPl+ VP/J P  NSg/VB . .\n>\n#\n> “ So          he       did  , so          he       did  , ” said the Gryphon , sighing in        his     turn   ; and  both\n# . NSg/I/J/R/C NPr/ISg+ VXPt . NSg/I/J/R/C NPr/ISg+ VXPt . . VP/J D   ?       . Nᴹ/Vg/J NPr/J/R/P ISg/D$+ NSg/VB . VB/C I/C/Dq\n> creatures hid their faces   in        their paws    .\n# NPl+      VB  D$+   NPl/V3+ NPr/J/R/P D$+   NPl/V3+ .\n>\n#\n> “ And  how   many        hours a    day     did  you    do  lessons ? ” said Alice , in        a    hurry   to change\n# . VB/C NSg/C NSg/I/J/Dq+ NPl+  D/P+ NPr🅪Sg+ VXPt ISgPl+ VXB NPl/V3+ . . VP/J NPr+  . NPr/J/R/P D/P+ NSg/VB+ P  N🅪Sg/VB\n> the subject   .\n# D+  NSg/VB/J+ .\n>\n#\n> “ Ten  hours the first  day     , ” said the Mock      Turtle  : “ nine the next    , and  so          on  . ”\n# . NSg+ NPl+  D+  NSg/J+ NPr🅪Sg+ . . VP/J D+  NSg/VB/J+ NSg/VB+ . . NSg  D   NSg/J/P . VB/C NSg/I/J/R/C J/P . .\n>\n#\n> “ What   a    curious plan    ! ” exclaimed Alice .\n# . NSg/I+ D/P+ J+      NSg/VB+ . . VP/J      NPr+  .\n>\n#\n> “ That’s the reason   they’re called lessons , ” the Gryphon remarked : “ because they\n# . NSg$   D+  N🅪Sg/VB+ K       VP/J   NPl/V3+ . . D   ?       VP/J     . . C/P     IPl+\n> lessen from day     to day    . ”\n# VB/C   P    NPr🅪Sg+ P  NPr🅪Sg . .\n>\n#\n> This    was  quite a   new   idea to Alice , and  she  thought it       over    a   little     before she\n# I/Ddem+ VLPt R     D/P NSg/J NSg  P  NPr+  . VB/C ISg+ N🅪Sg/VP NPr/ISg+ NSg/J/P D/P NPr/I/J/Dq C/P    ISg+\n> made her     next     remark  . “ Then      the eleventh day     must    have    been     a    holiday ? ”\n# VP   ISg/D$+ NSg/J/P+ NSg/VB+ . . NSg/J/R/C D+  NSg/J+   NPr🅪Sg+ NSg/VXB NSg/VXB NSg/VLPp D/P+ NPr/VB+ . .\n>\n#\n> “ Of course  it       was  , ” said the Mock      Turtle  .\n# . P  NSg/VB+ NPr/ISg+ VLPt . . VP/J D+  NSg/VB/J+ NSg/VB+ .\n>\n#\n> “ And  how   did  you    manage on  the twelfth ? ” Alice went    on  eagerly .\n# . VB/C NSg/C VXPt ISgPl+ NSg/VB J/P D   NSg/J   . . NPr+  NSg/VPt J/P R       .\n>\n#\n> “ That’s enough about lessons , ” the Gryphon interrupted in        a   very decided  tone       :\n# . NSg$   NSg/I  J/P   NPl/V3+ . . D   ?       VP/J        NPr/J/R/P D/P J/R  NSg/VP/J N🅪Sg/I/VB+ .\n> “ tell   her     something about the games   now       . ”\n# . NPr/VB ISg/D$+ NSg/I/J+  J/P   D   NPl/V3+ NSg/J/R/C . .\n>\n#\n>              CHAPTER X         : The Lobster   Quadrille\n# HeadingStart NSg/VB+ NPr/J/#r+ . D+  NSg/VB/J+ NSg/VB/J\n>\n#\n> The Mock      Turtle  sighed deeply , and  drew    the back     of one     flapper across his     eyes    .\n# D+  NSg/VB/J+ NSg/VB+ VP/J   R      . VB/C NPr/VPt D   NSg/VB/J P  NSg/I/J NSg     NSg/P  ISg/D$+ NPl/V3+ .\n> He       looked at    Alice , and  tried to speak  , but     for   a    minute    or    two sobs   choked his\n# NPr/ISg+ VP/J   NSg/P NPr+  . VB/C VP/J  P  NSg/VB . NSg/C/P R/C/P D/P+ NSg/VB/J+ NPr/C NSg NPl/V3 VP/J   ISg/D$+\n> voice   . “ Same as    if    he       had a    bone       in        his     throat  , ” said the Gryphon : and  it       set       to\n# NSg/VB+ . . I/J  R/C/P NSg/C NPr/ISg+ VP  D/P+ N🅪Sg/VB/J+ NPr/J/R/P ISg/D$+ NSg/VB+ . . VP/J D   ?       . VB/C NPr/ISg+ NPr/VBP/J P\n> work    shaking him  and  punching him  in        the back     . At    last     the Mock      Turtle  recovered\n# N🅪Sg/VB Nᴹ/Vg/J ISg+ VB/C Nᴹ/Vg/J  ISg+ NPr/J/R/P D   NSg/VB/J . NSg/P NSg/VB/J D+  NSg/VB/J+ NSg/VB+ VP/J\n> his     voice   , and  , with tears   running   down        his     cheeks  , he       went    on  again : —\n# ISg/D$+ NSg/VB+ . VB/C . P    NPl/V3+ Nᴹ/Vg/J/P N🅪Sg/VB/J/P ISg/D$+ NPl/V3+ . NPr/ISg+ NSg/VPt J/P P     . .\n>\n#\n> “ You    may     not     have    lived much         under   the sea  — ” ( “ I       haven’t , ” said Alice ) — “ and\n# . ISgPl+ NPr/VXB NSg/R/C NSg/VXB VP/J  NSg/I/J/R/Dq NSg/J/P D+  NSg+ . . . . ISg/#r+ VXB     . . VP/J NPr+  . . . VB/C\n> perhaps you    were     never even       introduced to a   lobster   — ” ( Alice began to say    “ I\n# NSg/R   ISgPl+ NSg/VLPt R     NSg/VB/J/R VP/J       P  D/P NSg/VB/J+ . . . NPr+  VPt   P  NSg/VB . ISg/#r+\n> once  tasted — ” but     checked herself hastily , and  said “ No       , never ” ) “ — so          you    can\n# NSg/C VP/J   . . NSg/C/P VP/J    ISg+    R       . VB/C VP/J . NSg/Dq/P . R     . . . . NSg/I/J/R/C ISgPl+ NPr/VXB\n> have    no       idea what   a   delightful thing a   Lobster   Quadrille is  ! ”\n# NSg/VXB NSg/Dq/P NSg+ NSg/I+ D/P J          NSg+  D/P NSg/VB/J+ NSg/VB/J  VL3 . .\n>\n#\n> “ No       , indeed , ” said Alice . “ What   sort   of a    dance    is  it       ? ”\n# . NSg/Dq/P . R      . . VP/J NPr+  . . NSg/I+ NSg/VB P  D/P+ N🅪Sg/VB+ VL3 NPr/ISg+ . .\n>\n#\n> “ Why    , ” said the Gryphon , “ you    first form     into a   line    along the sea  - shore   — ”\n# . NSg/VB . . VP/J D   ?       . . ISgPl+ NSg/J N🅪Sg/VB+ P    D/P NSg/VB+ P     D   NSg+ . NSg/VB+ . .\n>\n#\n> “ Two  lines   ! ” cried the Mock      Turtle  . “ Seals   , turtles , salmon       , and  so          on  ; then      ,\n# . NSg+ NPl/V3+ . . VP/J  D+  NSg/VB/J+ NSg/VB+ . . NPl/V3+ . NPl/V3  . N🅪SgPl/VB/J+ . VB/C NSg/I/J/R/C J/P . NSg/J/R/C .\n> when    you’ve cleared all          the jelly     - fish       out          of the way    — ”\n# NSg/I/C K      VP/J    NSg/I/J/C/Dq D   NSg/VB/J+ . N🅪SgPl/VB+ NSg/VB/J/R/P P  D   NSg/J+ . .\n>\n#\n> “ That          generally takes  some      time       , ” interrupted the Gryphon .\n# . NSg/I/C/Ddem+ R         NPl/V3 I/J/R/Dq+ N🅪Sg/VB/J+ . . VP/J        D   ?       .\n>\n#\n> “ — you    advance   twice — ”\n# . . ISgPl+ NSg/VB/J+ R     . .\n>\n#\n> “ Each with a    lobster   as    a    partner ! ” cried the Gryphon .\n# . Dq   P    D/P+ NSg/VB/J+ R/C/P D/P+ NSg/VB+ . . VP/J  D   ?       .\n>\n#\n> “ Of course  , ” the Mock      Turtle  said : “ advance   twice , set       to partners — ”\n# . P  NSg/VB+ . . D+  NSg/VB/J+ NSg/VB+ VP/J . . NSg/VB/J+ R     . NPr/VBP/J P  NPl/V3   . .\n>\n#\n> “ — change   lobsters , and  retire in        same order    , ” continued the Gryphon .\n# . . N🅪Sg/VB+ NPl/V3   . VB/C NSg/VB NPr/J/R/P I/J  N🅪Sg/VB+ . . VP/J      D   ?       .\n>\n#\n> “ Then      , you    know , ” the Mock      Turtle  went    on  , “ you    throw  the — ”\n# . NSg/J/R/C . ISgPl+ VB   . . D+  NSg/VB/J+ NSg/VB+ NSg/VPt J/P . . ISgPl+ NSg/VB D   . .\n>\n#\n> “ The lobsters ! ” shouted the Gryphon , with a   bound     into the air      .\n# . D   NPl/V3   . . VP/J    D   ?       . P    D/P NSg/VP/J+ P    D   N🅪Sg/VB+ .\n>\n#\n> “ — as    far      out          to sea as    you    can     — ”\n# . . R/C/P NSg/VB/J NSg/VB/J/R/P P  NSg R/C/P ISgPl+ NPr/VXB . .\n>\n#\n> “ Swim   after them     ! ” screamed the Gryphon .\n# . NSg/VB P     NSg/IPl+ . . VP/J     D   ?       .\n>\n#\n> “ Turn   a   somersault in        the sea  ! ” cried the Mock      Turtle  , capering wildly about .\n# . NSg/VB D/P NSg/VB     NPr/J/R/P D   NSg+ . . VP/J  D+  NSg/VB/J+ NSg/VB+ . Nᴹ/Vg/J  R      J/P   .\n>\n#\n> “ Change   lobsters again ! ” yelled the Gryphon at    the top      of its     voice   .\n# . N🅪Sg/VB+ NPl/V3   P     . . VP/J   D   ?       NSg/P D   NSg/VB/J P  ISg/D$+ NSg/VB+ .\n>\n#\n> “ Back     to land      again , and  that’s all          the first figure  , ” said the Mock     Turtle  ,\n# . NSg/VB/J P  NPr🅪Sg/VB P     . VB/C NSg$   NSg/I/J/C/Dq D   NSg/J NSg/VB+ . . VP/J D   NSg/VB/J NSg/VB+ .\n> suddenly dropping his     voice   ; and  the two creatures , who    had been     jumping about\n# R        NSg/Vg   ISg/D$+ NSg/VB+ . VB/C D   NSg NPl+      . NPr/I+ VP  NSg/VLPp Nᴹ/Vg/J J/P\n> like         mad      things all          this   time       , sat      down        again very sadly and  quietly , and  looked\n# NSg/VB/J/C/P NSg/VB/J NPl+   NSg/I/J/C/Dq I/Ddem N🅪Sg/VB/J+ . NSg/VP/J N🅪Sg/VB/J/P P     J/R  R     VB/C R       . VB/C VP/J\n> at    Alice .\n# NSg/P NPr+  .\n>\n#\n> “ It       must    be       a   very pretty     dance    , ” said Alice timidly .\n# . NPr/ISg+ NSg/VXB NSg/VLXB D/P J/R  NSg/VB/J/R N🅪Sg/VB+ . . VP/J NPr+  R       .\n>\n#\n> “ Would you    like         to see    a   little     of it       ? ” said the Mock      Turtle  .\n# . VXB   ISgPl+ NSg/VB/J/C/P P  NSg/VB D/P NPr/I/J/Dq P  NPr/ISg+ . . VP/J D+  NSg/VB/J+ NSg/VB+ .\n>\n#\n> “ Very much         indeed , ” said Alice .\n# . J/R  NSg/I/J/R/Dq R      . . VP/J NPr+  .\n>\n#\n> “ Come       , let’s try      the first figure  ! ” said the Mock      Turtle  to the Gryphon . “ We   can\n# . NSg/VBPp/P . NSg$  NSg/VB/J D   NSg/J NSg/VB+ . . VP/J D+  NSg/VB/J+ NSg/VB+ P  D   ?       . . IPl+ NPr/VXB\n> do  without lobsters , you    know . Which shall sing     ? ”\n# VXB C/P     NPl/V3   . ISgPl+ VB   . I/C+  VXB   NSg/VB/J . .\n>\n#\n> “ Oh     , you    sing     , ” said the Gryphon . “ I’ve forgotten the words   . ”\n# . NPr/VB . ISgPl+ NSg/VB/J . . VP/J D   ?       . . K    NSg/VPp/J D   NPl/V3+ . .\n>\n#\n> So          they began solemnly dancing round      and  round      Alice , every now       and  then\n# NSg/I/J/R/C IPl+ VPt   R        Nᴹ/Vg/J NSg/VB/J/P VB/C NSg/VB/J/P NPr+  . Dq    NSg/J/R/C VB/C NSg/J/R/C\n> treading on  her     toes    when    they passed too close    , and  waving  their forepaws to\n# Nᴹ/Vg/J  J/P ISg/D$+ NPl/V3+ NSg/I/C IPl+ VP/J   R   NSg/VB/J . VB/C Nᴹ/Vg/J D$+   NPl      P\n> mark    the time       , while      the Mock     Turtle  sang    this    , very slowly and  sadly : —\n# NPr/VB+ D   N🅪Sg/VB/J+ . NSg/VB/C/P D   NSg/VB/J NSg/VB+ NPr/VPt I/Ddem+ . J/R  R      VB/C R     . .\n>\n#\n> “ Will    you    walk   a   little     faster ? ” said a    whiting      to a   snail  . “ There’s a\n# . NPr/VXB ISgPl+ NSg/VB D/P NPr/I/J/Dq NSg/JC . . VP/J D/P+ N🅪SgPl/Vg/J+ P  D/P NSg/VB . . K       D/P\n> porpoise close    behind  us       , and  he’s treading on  my  tail      . See    how   eagerly the\n# NSg/VB+  NSg/VB/J NSg/J/P NPr/IPl+ . VB/C NPr$ Nᴹ/Vg/J  J/P D$+ NSg/VB/J+ . NSg/VB NSg/C R       D\n> lobsters and  the turtles all          advance   ! They are waiting on  the shingle — will    you\n# NPl/V3   VB/C D   NPl/V3  NSg/I/J/C/Dq NSg/VB/J+ . IPl+ VLB Nᴹ/Vg/J J/P D   NSg/VB  . NPr/VXB ISgPl+\n> come       and  join   the dance    ? Will    you    , won’t you    , will    you    , won’t you    , will    you\n# NSg/VBPp/P VB/C NSg/VB D   N🅪Sg/VB+ . NPr/VXB ISgPl+ . VXB   ISgPl+ . NPr/VXB ISgPl+ . VXB   ISgPl+ . NPr/VXB ISgPl+\n> join   the dance    ? Will    you    , won’t you    , will    you    , won’t you    , won’t you    join   the\n# NSg/VB D   N🅪Sg/VB+ . NPr/VXB ISgPl+ . VXB   ISgPl+ . NPr/VXB ISgPl+ . VXB   ISgPl+ . VXB   ISgPl+ NSg/VB D\n> dance    ?\n# N🅪Sg/VB+ .\n>\n#\n> “ You    can     really have    no        notion how   delightful it       will    be       When    they take   us       up\n# . ISgPl+ NPr/VXB R      NSg/VXB NSg/Dq/P+ NSg+   NSg/C J          NPr/ISg+ NPr/VXB NSg/VLXB NSg/I/C IPl+ NSg/VB NPr/IPl+ NSg/VB/J/P\n> and  throw  us       , with the lobsters , out          to sea ! ” But     the snail  replied “ Too far      ,\n# VB/C NSg/VB NPr/IPl+ . P    D   NPl/V3   . NSg/VB/J/R/P P  NSg . . NSg/C/P D   NSg/VB VP/J    . R   NSg/VB/J .\n> too far      ! ” and  gave a   look   askance — Said he       thanked the whiting      kindly , but     he\n# R   NSg/VB/J . . VB/C VPt  D/P NSg/VB VB/J    . VP/J NPr/ISg+ VP/J    D   N🅪SgPl/Vg/J+ J/R    . NSg/C/P NPr/ISg+\n> would not     join   the dance    . Would not     , could   not     , would not     , could   not     , would\n# VXB   NSg/R/C NSg/VB D   N🅪Sg/VB+ . VXB   NSg/R/C . NSg/VXB NSg/R/C . VXB   NSg/R/C . NSg/VXB NSg/R/C . VXB\n> not     join   the dance    . Would not     , could   not     , would not     , could   not     , could   not     join\n# NSg/R/C NSg/VB D+  N🅪Sg/VB+ . VXB   NSg/R/C . NSg/VXB NSg/R/C . VXB   NSg/R/C . NSg/VXB NSg/R/C . NSg/VXB NSg/R/C NSg/VB\n> the dance    .\n# D+  N🅪Sg/VB+ .\n>\n#\n> “ What   matters it       how   far      we   go       ? ” his     scaly  friend    replied . “ There is  another\n# . NSg/I+ NPl/V3+ NPr/ISg+ NSg/C NSg/VB/J IPl+ NSg/VB/J . . ISg/D$+ NSg/J+ NPr/VB/J+ VP/J    . . R+    VL3 I/D+\n> shore   , you    know , upon the other     side      . The further off        from England the nearer\n# NSg/VB+ . ISgPl+ VB   . P    D+  NSg/VB/J+ NSg/VB/J+ . D   VB/JC   NSg/VB/J/P P    NPr+    D   NSg/JC\n> is  to France — Then      turn   not     pale     , beloved  snail  , but     come       and  join   the dance    .\n# VL3 P  NPr+   . NSg/J/R/C NSg/VB NSg/R/C NSg/VB/J . NSg/VB/J NSg/VB . NSg/C/P NSg/VBPp/P VB/C NSg/VB D   N🅪Sg/VB+ .\n> Will    you    , won’t you    , will    you    , won’t you    , will    you    join   the dance    ? Will    you    ,\n# NPr/VXB ISgPl+ . VXB   ISgPl+ . NPr/VXB ISgPl+ . VXB   ISgPl+ . NPr/VXB ISgPl+ NSg/VB D   N🅪Sg/VB+ . NPr/VXB ISgPl+ .\n> won’t you    , will    you    , won’t you    , won’t you    join   the dance    ? ”\n# VXB   ISgPl+ . NPr/VXB ISgPl+ . VXB   ISgPl+ . VXB   ISgPl+ NSg/VB D   N🅪Sg/VB+ . .\n>\n#\n> “ Thank  you    , it’s a   very interesting dance    to watch  , ” said Alice , feeling   very\n# . NSg/VB ISgPl+ . K    D/P J/R  Vg/J        N🅪Sg/VB+ P  NSg/VB . . VP/J NPr+  . N🅪Sg/Vg/J J/R\n> glad     that         it       was  over    at    last     : “ and  I       do  so          like         that         curious song about the\n# NSg/VB/J NSg/I/C/Ddem NPr/ISg+ VLPt NSg/J/P NSg/P NSg/VB/J . . VB/C ISg/#r+ VXB NSg/I/J/R/C NSg/VB/J/C/P NSg/I/C/Ddem J       N🅪Sg J/P   D\n> whiting      ! ”\n# N🅪SgPl/Vg/J+ . .\n>\n#\n> “ Oh     , as    to the whiting      , ” said the Mock      Turtle  , “ they — you’ve seen    them     , of\n# . NPr/VB . R/C/P P  D+  N🅪SgPl/Vg/J+ . . VP/J D+  NSg/VB/J+ NSg/VB+ . . IPl+ . K      NSg/VPp NSg/IPl+ . P\n> course  ? ”\n# NSg/VB+ . .\n>\n#\n> “ Yes    , ” said Alice , “ I’ve often seen    them     at    dinn — ” she  checked herself hastily .\n# . NPl/VB . . VP/J NPr+  . . K    R     NSg/VPp NSg/IPl+ NSg/P ?    . . ISg+ VP/J    ISg+    R       .\n>\n#\n> “ I       don’t know where   Dinn may     be       , ” said the Mock     Turtle  , “ but     if    you’ve seen    them\n# . ISg/#r+ VXB   VB   NSg/R/C ?    NPr/VXB NSg/VLXB . . VP/J D   NSg/VB/J NSg/VB+ . . NSg/C/P NSg/C K      NSg/VPp NSg/IPl+\n> so          often , of course  you    know what   they’re like         . ”\n# NSg/I/J/R/C R     . P  NSg/VB+ ISgPl+ VB   NSg/I+ K       NSg/VB/J/C/P . .\n>\n#\n> “ I       believe so          , ” Alice replied thoughtfully . “ They have    their tails   in        their\n# . ISg/#r+ VB      NSg/I/J/R/C . . NPr+  VP/J    R            . . IPl+ NSg/VXB D$+   NPl/V3+ NPr/J/R/P D$+\n> mouths  — and  they’re all          over    crumbs  . ”\n# NPl/V3+ . VB/C K       NSg/I/J/C/Dq NSg/J/P NPl/V3+ . .\n>\n#\n> “ You’re wrong      about the crumbs  , ” said the Mock     Turtle  : “ crumbs  would all          wash\n# . K      NSg/VB/J/R J/P   D   NPl/V3+ . . VP/J D   NSg/VB/J NSg/VB+ . . NPl/V3+ VXB   NSg/I/J/C/Dq NPr/VB+\n> off        in        the sea  . But     they have    their tails   in        their mouths  ; and  the reason   is  — ”\n# NSg/VB/J/P NPr/J/R/P D   NSg+ . NSg/C/P IPl+ NSg/VXB D$+   NPl/V3+ NPr/J/R/P D$+   NPl/V3+ . VB/C D+  N🅪Sg/VB+ VL3 . .\n> here the Mock      Turtle  yawned and  shut      his     eyes    . — “ Tell   her     about the reason   and\n# J/R  D+  NSg/VB/J+ NSg/VB+ VP/J   VB/C NSg/VBP/J ISg/D$+ NPl/V3+ . . . NPr/VB ISg/D$+ J/P   D+  N🅪Sg/VB+ VB/C\n> all          that          , ” he       said to the Gryphon .\n# NSg/I/J/C/Dq NSg/I/C/Ddem+ . . NPr/ISg+ VP/J P  D   ?       .\n>\n#\n> “ The reason   is  , ” said the Gryphon , “ that         they would go       with the lobsters to the\n# . D+  N🅪Sg/VB+ VL3 . . VP/J D   ?       . . NSg/I/C/Ddem IPl+ VXB   NSg/VB/J P    D   NPl/V3   P  D\n> dance    . So          they got thrown out          to sea . So          they had to fall    a    long      way    . So          they\n# N🅪Sg/VB+ . NSg/I/J/R/C IPl+ VP  VPp/J  NSg/VB/J/R/P P  NSg . NSg/I/J/R/C IPl+ VP  P  N🅪Sg/VB D/P+ NPr/VB/J+ NSg/J+ . NSg/I/J/R/C IPl+\n> got their tails   fast       in        their mouths  . So          they couldn’t get    them     out          again .\n# VP  D$+   NPl/V3+ NSg/VB/J/R NPr/J/R/P D$+   NPl/V3+ . NSg/I/J/R/C IPl+ VXB      NSg/VB NSg/IPl+ NSg/VB/J/R/P P     .\n> That’s all          . ”\n# NSg$   NSg/I/J/C/Dq . .\n>\n#\n> “ Thank  you    , ” said Alice , “ it’s very interesting . I       never knew so          much         about a\n# . NSg/VB ISgPl+ . . VP/J NPr+  . . K    J/R  Vg/J        . ISg/#r+ R     VPt  NSg/I/J/R/C NSg/I/J/R/Dq J/P   D/P+\n> whiting      before . ”\n# N🅪SgPl/Vg/J+ C/P    . .\n>\n#\n> “ I       can     tell   you    more         than that          , if    you    like         , ” said the Gryphon . “ Do  you    know why\n# . ISg/#r+ NPr/VXB NPr/VB ISgPl+ NPr/I/J/R/Dq C/P  NSg/I/C/Ddem+ . NSg/C ISgPl+ NSg/VB/J/C/P . . VP/J D   ?       . . VXB ISgPl+ VB   NSg/VB\n> it’s called a    whiting      ? ”\n# K    VP/J   D/P+ N🅪SgPl/Vg/J+ . .\n>\n#\n> “ I       never thought about it       , ” said Alice . “ Why    ? ”\n# . ISg/#r+ R     N🅪Sg/VP J/P   NPr/ISg+ . . VP/J NPr+  . . NSg/VB . .\n>\n#\n> “ It       does    the boots  and  shoes   , ” the Gryphon replied very solemnly .\n# . NPr/ISg+ NPl/VX3 D   NPl/V3 VB/C NPl/V3+ . . D   ?       VP/J    J/R  R        .\n>\n#\n> Alice was  thoroughly puzzled . “ Does    the boots  and  shoes   ! ” she  repeated in        a\n# NPr+  VLPt R          VP/J    . . NPl/VX3 D   NPl/V3 VB/C NPl/V3+ . . ISg+ VP/J     NPr/J/R/P D/P+\n> wondering tone       .\n# Nᴹ/Vg/J   N🅪Sg/I/VB+ .\n>\n#\n> “ Why    , what   are your shoes   done      with ? ” said the Gryphon . “ I       mean     , what   makes  them\n# . NSg/VB . NSg/I+ VLB D$+  NPl/V3+ NSg/VPp/J P    . . VP/J D   ?       . . ISg/#r+ NSg/VB/J . NSg/I+ NPl/V3 NSg/IPl+\n> so          shiny ? ”\n# NSg/I/J/R/C NSg/J . .\n>\n#\n> Alice looked down        at    them     , and  considered a   little     before she  gave her     answer  .\n# NPr+  VP/J   N🅪Sg/VB/J/P NSg/P NSg/IPl+ . VB/C VP/J       D/P NPr/I/J/Dq C/P    ISg+ VPt  ISg/D$+ NSg/VB+ .\n> “ They’re done      with blacking , I       believe . ”\n# . K       NSg/VPp/J P    Nᴹ/Vg/J  . ISg/#r+ VB      . .\n>\n#\n> “ Boots  and  shoes   under   the sea  , ” the Gryphon went    on  in        a   deep  voice   , “ are done\n# . NPl/V3 VB/C NPl/V3+ NSg/J/P D+  NSg+ . . D   ?       NSg/VPt J/P NPr/J/R/P D/P NSg/J NSg/VB+ . . VLB NSg/VPp/J\n> with a   whiting      . Now       you    know . ”\n# P    D/P N🅪SgPl/Vg/J+ . NSg/J/R/C ISgPl+ VB   . .\n>\n#\n> “ And  what   are they made of ? ” Alice asked in        a   tone      of great  curiosity .\n# . VB/C NSg/I+ VLB IPl+ VP   P  . . NPr+  VP/J  NPr/J/R/P D/P N🅪Sg/I/VB P  NSg/J+ NSg+      .\n>\n#\n> “ Soles   and  eels   , of course  , ” the Gryphon replied rather     impatiently : “ any    shrimp\n# . NPl/V3+ VB/C NPl/V3 . P  NSg/VB+ . . D   ?       VP/J    NPr/VB/J/R R           . . I/R/Dq N🅪SgPl/VB+\n> could   have    told you    that          . ”\n# NSg/VXB NSg/VXB VP   ISgPl+ NSg/I/C/Ddem+ . .\n>\n#\n> “ If    I’d been     the whiting      , ” said Alice , whose thoughts were     still      running   on  the\n# . NSg/C K   NSg/VLPp D   N🅪SgPl/Vg/J+ . . VP/J NPr+  . I+    NPl/V3+  NSg/VLPt NSg/VB/J/R Nᴹ/Vg/J/P J/P D\n> song  , “ I’d have    said to the porpoise , ‘          Keep   back     , please : we   don’t want   you    with\n# N🅪Sg+ . . K   NSg/VXB VP/J P  D   NSg/VB+  . Unlintable NSg/VB NSg/VB/J . VB     . IPl+ VXB   NSg/VB ISgPl+ P\n> us       ! ’ ”\n# NPr/IPl+ . . .\n>\n#\n> “ They were     obliged to have    him  with them     , ” the Mock      Turtle  said : “ no        wise      fish\n# . IPl+ NSg/VLPt VP/J    P  NSg/VXB ISg+ P    NSg/IPl+ . . D+  NSg/VB/J+ NSg/VB+ VP/J . . NSg/Dq/P+ NPr/VB/J+ N🅪SgPl/VB+\n> would go       anywhere without a    porpoise . ”\n# VXB   NSg/VB/J NSg/I    C/P     D/P+ NSg/VB+  . .\n>\n#\n> “ Wouldn’t it       really ? ” said Alice in        a   tone      of great  surprise .\n# . VXB      NPr/ISg+ R      . . VP/J NPr+  NPr/J/R/P D/P N🅪Sg/I/VB P  NSg/J+ NSg/VB+  .\n>\n#\n> “ Of course  not     , ” said the Mock      Turtle  : “ why    , if    a    fish       came      to me       , and  told me\n# . P  NSg/VB+ NSg/R/C . . VP/J D+  NSg/VB/J+ NSg/VB+ . . NSg/VB . NSg/C D/P+ N🅪SgPl/VB+ NSg/VPt/P P  NPr/ISg+ . VB/C VP   NPr/ISg+\n> he       was  going   a    journey , I       should say    ‘          With what   porpoise ? ’ ”\n# NPr/ISg+ VLPt Nᴹ/Vg/J D/P+ NSg/VB+ . ISg/#r+ VXB    NSg/VB Unlintable P    NSg/I+ NSg/VB+  . . .\n>\n#\n> “ Don’t you    mean     ‘          purpose  ’ ? ” said Alice .\n# . VXB   ISgPl+ NSg/VB/J Unlintable N🅪Sg/VB+ . . . VP/J NPr+  .\n>\n#\n> “ I       mean     what   I       say    , ” the Mock      Turtle  replied in        an   offended tone       . And  the\n# . ISg/#r+ NSg/VB/J NSg/I+ ISg/#r+ NSg/VB . . D+  NSg/VB/J+ NSg/VB+ VP/J    NPr/J/R/P D/P+ VP/J     N🅪Sg/I/VB+ . VB/C D\n> Gryphon added “ Come       , let’s hear some     of your adventures . ”\n# ?       VP/J  . NSg/VBPp/P . NSg$  VB   I/J/R/Dq P  D$+  NPl/V3+    . .\n>\n#\n> “ I       could   tell   you    my  adventures — beginning from this    morning    , ” said Alice a\n# . ISg/#r+ NSg/VXB NPr/VB ISgPl+ D$+ NPl/V3+    . NSg/Vg/J+ P    I/Ddem+ N🅪Sg/Vg/J+ . . VP/J NPr+  D/P\n> little     timidly : “ but     it’s no       use     going   back     to yesterday , because I       was  a\n# NPr/I/J/Dq R       . . NSg/C/P K    NSg/Dq/P N🅪Sg/VB Nᴹ/Vg/J NSg/VB/J P  NSg       . C/P     ISg/#r+ VLPt D/P\n> different person  then      . ”\n# NSg/J     NSg/VB+ NSg/J/R/C . .\n>\n#\n> “ Explain all          that          , ” said the Mock      Turtle  .\n# . VB      NSg/I/J/C/Dq NSg/I/C/Ddem+ . . VP/J D+  NSg/VB/J+ NSg/VB+ .\n>\n#\n> “ No       , no       ! The adventures first , ” said the Gryphon in        an  impatient tone       :\n# . NSg/Dq/P . NSg/Dq/P . D+  NPl/V3+    NSg/J . . VP/J D   ?       NPr/J/R/P D/P J         N🅪Sg/I/VB+ .\n> “ explanations take   such  a   dreadful time       . ”\n# . NPl+         NSg/VB NSg/I D/P NSg/J    N🅪Sg/VB/J+ . .\n>\n#\n> So          Alice began telling them     her     adventures from the time       when    she  first saw     the\n# NSg/I/J/R/C NPr+  VPt   Nᴹ/Vg/J NSg/IPl+ ISg/D$+ NPl/V3+    P    D+  N🅪Sg/VB/J+ NSg/I/C ISg+ NSg/J NSg/VPt D+\n> White        Rabbit  . She  was  a   little     nervous about it       just at    first , the two  creatures\n# NPr🅪Sg/VB/J+ NSg/VB+ . ISg+ VLPt D/P NPr/I/J/Dq J       J/P   NPr/ISg+ J/R  NSg/P NSg/J . D+  NSg+ NPl+\n> got so          close    to her     , one     on  each side      , and  opened their eyes   and  mouths  so          very\n# VP  NSg/I/J/R/C NSg/VB/J P  ISg/D$+ . NSg/I/J J/P Dq+  NSg/VB/J+ . VB/C VP/J   D$+   NPl/V3 VB/C NPl/V3+ NSg/I/J/R/C J/R\n> wide  , but     she  gained courage as    she  went    on  . Her     listeners were     perfectly quiet\n# NSg/J . NSg/C/P ISg+ VP/J   NSg/VB+ R/C/P ISg+ NSg/VPt J/P . ISg/D$+ +         NSg/VLPt R         N🅪Sg/VB/J\n> till       she  got to the part      about her     repeating “ You    are old   , Father  William , ” to\n# NSg/VB/C/P ISg+ VP  P  D+  NSg/VB/J+ J/P   ISg/D$+ Nᴹ/Vg/J   . ISgPl+ VLB NSg/J . NPr/VB+ NPr+    . . P\n> the Caterpillar , and  the words   all          coming  different , and  then      the Mock     Turtle\n# D   NSg/VB      . VB/C D   NPl/V3+ NSg/I/J/C/Dq Nᴹ/Vg/J NSg/J     . VB/C NSg/J/R/C D   NSg/VB/J NSg/VB+\n> drew    a   long     breath     , and  said “ That’s very curious . ”\n# NPr/VPt D/P NPr/VB/J N🅪Sg/VB/J+ . VB/C VP/J . NSg$   J/R  J       . .\n>\n#\n> “ It’s all          about as    curious as    it       can     be       , ” said the Gryphon .\n# . K    NSg/I/J/C/Dq J/P   R/C/P J       R/C/P NPr/ISg+ NPr/VXB NSg/VLXB . . VP/J D   ?       .\n>\n#\n> “ It       all          came      different ! ” the Mock      Turtle  repeated thoughtfully . “ I       should like\n# . NPr/ISg+ NSg/I/J/C/Dq NSg/VPt/P NSg/J     . . D+  NSg/VB/J+ NSg/VB+ VP/J     R            . . ISg/#r+ VXB    NSg/VB/J/C/P\n> to hear her     try      and  repeat something now       . Tell   her     to begin  . ” He       looked at    the\n# P  VB   ISg/D$+ NSg/VB/J VB/C NSg/VB NSg/I/J+  NSg/J/R/C . NPr/VB ISg/D$+ P  NSg/VB . . NPr/ISg+ VP/J   NSg/P D\n> Gryphon as    if    he       thought it       had some     kind  of authority over    Alice .\n# ?       R/C/P NSg/C NPr/ISg+ N🅪Sg/VP NPr/ISg+ VP  I/J/R/Dq NSg/J P  N🅪Sg+     NSg/J/P NPr+  .\n>\n#\n> “ Stand  up         and  repeat ‘          ’ Tis the voice  of the sluggard , ’ ” said the Gryphon .\n# . NSg/VB NSg/VB/J/P VB/C NSg/VB Unlintable . ?   D   NSg/VB P  D   NSg      . . . VP/J D   ?       .\n>\n#\n> “ How   the creatures order    one     about , and  make   one     repeat lessons ! ” thought Alice ;\n# . NSg/C D+  NPl+      N🅪Sg/VB+ NSg/I/J J/P   . VB/C NSg/VB NSg/I/J NSg/VB NPl/V3+ . . N🅪Sg/VP NPr+  .\n> “ I       might    as    well       be       at    school   at    once  . ” However , she  got up         , and  began to repeat\n# . ISg/#r+ Nᴹ/VXB/J R/C/P NSg/VB/J/R NSg/VLXB NSg/P N🅪Sg/VB+ NSg/P NSg/C . . C       . ISg+ VP  NSg/VB/J/P . VB/C VPt   P  NSg/VB\n> it       , but     her     head      was  so          full     of the Lobster   Quadrille , that         she  hardly knew what\n# NPr/ISg+ . NSg/C/P ISg/D$+ NPr/VB/J+ VLPt NSg/I/J/R/C NSg/VB/J P  D+  NSg/VB/J+ NSg/VB/J  . NSg/I/C/Ddem ISg+ R      VPt  NSg/I+\n> she  was  saying    , and  the words   came      very queer    indeed : —\n# ISg+ VLPt N🅪Sg/Vg/J . VB/C D   NPl/V3+ NSg/VPt/P J/R  NSg/VB/J R      . .\n>\n#\n> “ ’ Tis the voice  of the Lobster   ; I       heard him  declare , “ You    have    baked me       too\n# . . ?   D   NSg/VB P  D+  NSg/VB/J+ . ISg/#r+ VP/J  ISg+ VB      . . ISgPl+ NSg/VXB VP/J  NPr/ISg+ R\n> brown       , I       must    sugar   my  hair     . ” As    a   duck    with its     eyelids , so          he       with his     nose\n# NPr🅪Sg/VB/J . ISg/#r+ NSg/VXB N🅪Sg/VB D$+ N🅪Sg/VB+ . . R/C/P D/P NSg/VB+ P    ISg/D$+ NPl+    . NSg/I/J/R/C NPr/ISg+ P    ISg/D$+ NSg/VB+\n> Trims  his     belt    and  his     buttons , and  turns  out          his     toes    . ”\n# NPl/V3 ISg/D$+ NSg/VB+ VB/C ISg/D$+ NPl/V3+ . VB/C NPl/V3 NSg/VB/J/R/P ISg/D$+ NPl/V3+ . .\n>\n#\n> ( later editions continued as    follows When    the sands   are all          dry      , he       is  gay      as\n# . JC    NPl      VP/J      R/C/P NPl/V3  NSg/I/C D   NPl/V3+ VLB NSg/I/J/C/Dq NSg/VB/J . NPr/ISg+ VL3 NPr/VB/J R/C/P\n> a   lark   , And  will    talk    in        contemptuous tones  of the Shark   , But     , when    the tide\n# D/P NSg/VB . VB/C NPr/VXB N🅪Sg/VB NPr/J/R/P J            NPl/V3 P  D   NSg/VB+ . NSg/C/P . NSg/I/C D   NSg/VB+\n> rises   and  sharks are around , His     voice   has a   timid and  tremulous sound      . )\n# NPl/V3+ VB/C NPl/V3 VLB J/P    . ISg/D$+ NSg/VB+ V3  D/P J     VB/C J         N🅪Sg/VB/J+ . .\n>\n#\n> “ That’s different from what   I       used to say    when    I       was  a   child   , ” said the Gryphon .\n# . NSg$   NSg/J     P    NSg/I+ ISg/#r+ VP/J P  NSg/VB NSg/I/C ISg/#r+ VLPt D/P NSg/VB+ . . VP/J D   ?       .\n>\n#\n> “ Well       , I       never heard it       before , ” said the Mock      Turtle  ; “ but     it       sounds uncommon\n# . NSg/VB/J/R . ISg/#r+ R     VP/J  NPr/ISg+ C/P    . . VP/J D+  NSg/VB/J+ NSg/VB+ . . NSg/C/P NPr/ISg+ NPl/V3 NSg/VB/J+\n> nonsense . ”\n# Nᴹ/VB/J+ . .\n>\n#\n> Alice said nothing  ; she  had sat      down        with her     face    in        her     hands   , wondering if\n# NPr+  VP/J NSg/I/J+ . ISg+ VP  NSg/VP/J N🅪Sg/VB/J/P P    ISg/D$+ NSg/VB+ NPr/J/R/P ISg/D$+ NPl/V3+ . Nᴹ/Vg/J   NSg/C\n> anything  would ever happen in        a    natural way    again .\n# NSg/I/VB+ VXB   J/R  VB     NPr/J/R/P D/P+ NSg/J+  NSg/J+ P     .\n>\n#\n> “ I       should like         to have    it       explained , ” said the Mock      Turtle  .\n# . ISg/#r+ VXB    NSg/VB/J/C/P P  NSg/VXB NPr/ISg+ VP/J      . . VP/J D+  NSg/VB/J+ NSg/VB+ .\n>\n#\n> “ She  can’t explain it       , ” said the Gryphon hastily . “ Go       on  with the next    verse  . ”\n# . ISg+ VXB   VB      NPr/ISg+ . . VP/J D   ?       R       . . NSg/VB/J J/P P    D   NSg/J/P NSg/VB . .\n>\n#\n> “ But     about his     toes    ? ” the Mock      Turtle  persisted . “ How   could   he       turn   them     out\n# . NSg/C/P J/P   ISg/D$+ NPl/V3+ . . D+  NSg/VB/J+ NSg/VB+ VP/J      . . NSg/C NSg/VXB NPr/ISg+ NSg/VB NSg/IPl+ NSg/VB/J/R/P\n> with his     nose    , you    know ? ”\n# P    ISg/D$+ NSg/VB+ . ISgPl+ VB   . .\n>\n#\n> “ It’s the first position in        dancing . ” Alice said ; but     was  dreadfully puzzled by\n# . K    D+  NSg/J NSg/VB+  NPr/J/R/P Nᴹ/Vg/J . . NPr+  VP/J . NSg/C/P VLPt R          VP/J    NSg/P\n> the whole thing , and  longed to change  the subject   .\n# D   NSg/J NSg+  . VB/C VP/J   P  N🅪Sg/VB D   NSg/VB/J+ .\n>\n#\n> “ Go       on  with the next    verse  , ” the Gryphon repeated impatiently : “ it       begins ‘          I\n# . NSg/VB/J J/P P    D   NSg/J/P NSg/VB . . D   ?       VP/J     R           . . NPr/ISg+ NPl/V3 Unlintable ISg/#r+\n> passed by    his     garden    . ’ ”\n# VP/J   NSg/P ISg/D$+ NSg/VB/J+ . . .\n>\n#\n> Alice did  not     dare    to disobey , though she  felt      sure it       would all          come       wrong      , and\n# NPr+  VXPt NSg/R/C NPr/VXB P  VB      . C      ISg+ N🅪Sg/VP/J J    NPr/ISg+ VXB   NSg/I/J/C/Dq NSg/VBPp/P NSg/VB/J/R . VB/C\n> she  went    on  in        a   trembling voice   : —\n# ISg+ NSg/VPt J/P NPr/J/R/P D/P Nᴹ/Vg/J   NSg/VB+ . .\n>\n#\n> “ I       passed by    his     garden    , and  marked , with one      eye     , How   the Owl     and  the Panther\n# . ISg/#r+ VP/J   NSg/P ISg/D$+ NSg/VB/J+ . VB/C VP/J   . P    NSg/I/J+ NSg/VB+ . NSg/C D+  NSg/VB+ VB/C D   NSg\n> were     sharing a   pie      — ”\n# NSg/VLPt Nᴹ/Vg/J D/P N🅪Sg/VB+ . .\n>\n#\n> ( later editions continued as    follows The Panther took pie      - crust    , and  gravy    ,\n# . JC    NPl      VP/J      R/C/P NPl/V3  D   NSg     VPt  N🅪Sg/VB+ . N🅪Sg/VB+ . VB/C N🅪Sg/VB+ .\n> and  meat  , While      the Owl     had the dish    as    its     share  of the treat   . When    the pie\n# VB/C N🅪Sg+ . NSg/VB/C/P D   NSg/VB+ VP  D   NSg/VB+ R/C/P ISg/D$+ NSg/VB P  D   NSg/VB+ . NSg/I/C D+  N🅪Sg/VB+\n> was  all          finished , the Owl     , as    a   boon  , Was  kindly permitted to pocket   the\n# VLPt NSg/I/J/C/Dq VP/J     . D+  NSg/VB+ . R/C/P D/P NSg/J . VLPt J/R    VP/J      P  NSg/VB/J D\n> spoon   : While      the Panther received knife  and  fork    with a   growl  , And  concluded\n# NSg/VB+ . NSg/VB/C/P D   NSg     VP/J     NSg/VB VB/C NSg/VB+ P    D/P NSg/VB . VB/C VP/J\n> the banquet — )\n# D   NSg/VB+ . .\n>\n#\n> “ What   is  the use     of repeating all           that          stuff  , ” the Mock      Turtle  interrupted , “ if\n# . NSg/I+ VL3 D   N🅪Sg/VB P  Nᴹ/Vg/J   NSg/I/J/C/Dq+ NSg/I/C/Ddem+ Nᴹ/VB+ . . D+  NSg/VB/J+ NSg/VB+ VP/J        . . NSg/C\n> you    don’t explain it       as    you    go       on  ? It’s by    far      the most         confusing thing I       ever\n# ISgPl+ VXB   VB      NPr/ISg+ R/C/P ISgPl+ NSg/VB/J J/P . K    NSg/P NSg/VB/J D   NSg/I/J/R/Dq Nᴹ/Vg/J   NSg+  ISg/#r+ J/R\n> heard ! ”\n# VP/J  . .\n>\n#\n> “ Yes    , I       think  you’d better      leave   off        , ” said the Gryphon : and  Alice was  only  too\n# . NPl/VB . ISg/#r+ NSg/VB K     NSg/VXB/JC+ NSg/VB+ NSg/VB/J/P . . VP/J D   ?       . VB/C NPr+  VLPt J/R/C R\n> glad     to do  so          .\n# NSg/VB/J P  VXB NSg/I/J/R/C .\n>\n#\n> “ Shall we   try      another figure of the Lobster   Quadrille ? ” the Gryphon went    on  . “ Or\n# . VXB   IPl+ NSg/VB/J I/D     NSg/VB P  D+  NSg/VB/J+ NSg/VB/J  . . D   ?       NSg/VPt J/P . . NPr/C\n> would you    like         the Mock      Turtle  to sing     you    a    song  ? ”\n# VXB   ISgPl+ NSg/VB/J/C/P D+  NSg/VB/J+ NSg/VB+ P  NSg/VB/J ISgPl+ D/P+ N🅪Sg+ . .\n>\n#\n> “ Oh     , a    song  , please , if    the Mock      Turtle  would be       so          kind   , ” Alice replied , so\n# . NPr/VB . D/P+ N🅪Sg+ . VB     . NSg/C D+  NSg/VB/J+ NSg/VB+ VXB   NSg/VLXB NSg/I/J/R/C NSg/J+ . . NPr+  VP/J    . NSg/I/J/R/C\n> eagerly that         the Gryphon said , in        a   rather     offended tone       , “ Hm  ! No        accounting for\n# R       NSg/I/C/Ddem D   ?       VP/J . NPr/J/R/P D/P NPr/VB/J/R VP/J     N🅪Sg/I/VB+ . . NPr . NSg/Dq/P+ Nᴹ/Vg/J+   R/C/P\n> tastes ! Sing     her     ‘          Turtle  Soup     , ’ will    you    , old   fellow ? ”\n# NPl/V3 . NSg/VB/J ISg/D$+ Unlintable NSg/VB+ N🅪Sg/VB+ . . NPr/VXB ISgPl+ . NSg/J NSg    . .\n>\n#\n> The Mock      Turtle  sighed deeply , and  began , in        a    voice   sometimes choked with sobs   ,\n# D+  NSg/VB/J+ NSg/VB+ VP/J   R      . VB/C VPt   . NPr/J/R/P D/P+ NSg/VB+ R         VP/J   P    NPl/V3 .\n> to sing     this    : —\n# P  NSg/VB/J I/Ddem+ . .\n>\n#\n> “ Beautiful Soup     , so          rich     and  green       , Waiting in        a   hot      tureen ! Who    for   such\n# . NSg/J+    N🅪Sg/VB+ . NSg/I/J/R/C NPr/VB/J VB/C NPr🅪Sg/VB/J . Nᴹ/Vg/J NPr/J/R/P D/P NSg/VB/J NSg    . NPr/I+ R/C/P NSg/I\n> dainties would not     stoop  ? Soup    of the evening    , beautiful Soup     ! Soup    of the\n# NPl      VXB   NSg/R/C NSg/VB . N🅪Sg/VB P  D+  N🅪Sg/Vg/J+ . NSg/J+    N🅪Sg/VB+ . N🅪Sg/VB P  D+\n> evening    , beautiful Soup     ! Beau    — ootiful Soo — oop ! Beau    — ootiful Soo — oop ! Soo — oop\n# N🅪Sg/Vg/J+ . NSg/J+    N🅪Sg/VB+ . NPr/VB+ . ?       ?   . Nᴹ  . NPr/VB+ . ?       ?   . Nᴹ  . ?   . Nᴹ\n> of the e      — e     — evening    , Beautiful , beautiful Soup     !\n# P  D   NPr/I+ . NPr/I . N🅪Sg/Vg/J+ . NSg/J     . NSg/J     N🅪Sg/VB+ .\n>\n#\n> “ Beautiful Soup     ! Who    cares  for   fish       , Game      , or    any     other     dish    ? Who    would not\n# . NSg/J+    N🅪Sg/VB+ . NPr/I+ NPl/V3 R/C/P N🅪SgPl/VB+ . NSg/VB/J+ . NPr/C I/R/Dq+ NSg/VB/J+ NSg/VB+ . NPr/I+ VXB   NSg/R/C\n> give   all          else    for   two  p         ennyworth only  of beautiful Soup     ? Pennyworth only  of\n# NSg/VB NSg/I/J/C/Dq NSg/J/C R/C/P NSg+ NSg/VB/P+ ?         J/R/C P  NSg/J     N🅪Sg/VB+ . NSg        J/R/C P\n> beautiful Soup     ? Beau    — ootiful Soo — oop ! Beau    — ootiful Soo — oop ! Soo — oop of the\n# NSg/J     N🅪Sg/VB+ . NPr/VB+ . ?       ?   . Nᴹ  . NPr/VB+ . ?       ?   . Nᴹ  . ?   . Nᴹ  P  D\n> e      — e      — evening    , Beautiful , beauti — FUL SOUP     ! ”\n# NPr/I+ . NPr/I+ . N🅪Sg/Vg/J+ . NSg/J     . ?      . ?   N🅪Sg/VB+ . .\n>\n#\n> “ Chorus  again ! ” cried the Gryphon , and  the Mock     Turtle  had just begun to repeat\n# . NSg/VB+ P     . . VP/J  D   ?       . VB/C D   NSg/VB/J NSg/VB+ VP  J/R  VPp   P  NSg/VB\n> it       , when    a   cry    of “ The trial’s beginning ! ” was  heard in        the distance .\n# NPr/ISg+ . NSg/I/C D/P NSg/VB P  . D   NSg$    NSg/Vg/J+ . . VLPt VP/J  NPr/J/R/P D+  N🅪Sg/VB+ .\n>\n#\n> “ Come       on  ! ” cried the Gryphon , and  , taking   Alice by    the hand    , it       hurried off        ,\n# . NSg/VBPp/P J/P . . VP/J  D   ?       . VB/C . NSg/Vg/J NPr+  NSg/P D   NSg/VB+ . NPr/ISg+ VP/J    NSg/VB/J/P .\n> without waiting for   the end    of the song  .\n# C/P     Nᴹ/Vg/J R/C/P D   NSg/VB P  D   N🅪Sg+ .\n>\n#\n> “ What   trial     is  it       ? ” Alice panted as    she  ran     ; but     the Gryphon only  answered “ Come\n# . NSg/I+ NSg/VB/J+ VL3 NPr/ISg+ . . NPr+  VP/J   R/C/P ISg+ NSg/VPt . NSg/C/P D   ?       J/R/C VP/J     . NSg/VBPp/P\n> on  ! ” and  ran     the faster , while      more         and  more         faintly came      , carried on  the breeze\n# J/P . . VB/C NSg/VPt D   NSg/JC . NSg/VB/C/P NPr/I/J/R/Dq VB/C NPr/I/J/R/Dq R       NSg/VPt/P . VP/J    J/P D+  NSg/VB+\n> that          followed them     , the melancholy words   : —\n# NSg/I/C/Ddem+ VP/J     NSg/IPl+ . D   NSg/J      NPl/V3+ . .\n>\n#\n> “ Soo — oop of the e      — e      — evening    , Beautiful , beautiful Soup     ! ”\n# . ?   . Nᴹ  P  D   NPr/I+ . NPr/I+ . N🅪Sg/Vg/J+ . NSg/J     . NSg/J     N🅪Sg/VB+ . .\n>\n#\n>              CHAPTER XI     : Who    Stole   the Tarts  ?\n# HeadingStart NSg/VB+ NSg/#r . NPr/I+ NSg/VPt D   NPl/V3 .\n>\n#\n> The King     and  Queen    of Hearts  were     seated on  their throne when    they arrived , with\n# D   NPr/VB/J VB/C NPr/VB/J P  NPl/V3+ NSg/VLPt VP/J   J/P D$+   NSg/VB NSg/I/C IPl+ VP/J    . P\n> a   great crowd   assembled about them     — all          sorts  of little     birds  and  beasts  , as    well\n# D/P NSg/J NSg/VB+ VP/J      J/P   NSg/IPl+ . NSg/I/J/C/Dq NPl/V3 P  NPr/I/J/Dq NPl/V3 VB/C NPl/V3+ . R/C/P NSg/VB/J/R\n> as    the whole pack   of cards   : the Knave was  standing before them     , in        chains  , with\n# R/C/P D   NSg/J NSg/VB P  NPl/V3+ . D   NSg   VLPt Nᴹ/Vg/J  C/P    NSg/IPl+ . NPr/J/R/P NPl/V3+ . P\n> a   soldier   on  each side      to guard   him  ; and  near       the King      was  the White       Rabbit  ,\n# D/P NSg/VB/J+ J/P Dq   NSg/VB/J+ P  NSg/VB+ ISg+ . VB/C NSg/VB/J/P D   NPr/VB/J+ VLPt D   NPr🅪Sg/VB/J NSg/VB+ .\n> with a   trumpet in        one     hand    , and  a   scroll of parchment in        the other    . In        the very\n# P    D/P NSg/VB+ NPr/J/R/P NSg/I/J NSg/VB+ . VB/C D/P NSg/VB P  N🅪Sg+     NPr/J/R/P D   NSg/VB/J . NPr/J/R/P D   J/R\n> middle   of the court      was  a   table  , with a   large dish   of tarts  upon it       : they looked\n# NSg/VB/J P  D+  N🅪Sg/VB/J+ VLPt D/P NSg/VB . P    D/P NSg/J NSg/VB P  NPl/V3 P    NPr/ISg+ . IPl+ VP/J\n> so          good     , that         it       made Alice quite hungry to look   at    them     — “ I       wish   they’d get    the\n# NSg/I/J/R/C NPr/VB/J . NSg/I/C/Ddem NPr/ISg+ VP   NPr+  R     J      P  NSg/VB NSg/P NSg/IPl+ . . ISg/#r+ NSg/VB K      NSg/VB D\n> trial     done      , ” she  thought , “ and  hand    round      the refreshments ! ” But     there seemed to\n# NSg/VB/J+ NSg/VPp/J . . ISg+ N🅪Sg/VP . . VB/C NSg/VB+ NSg/VB/J/P D   NPl          . . NSg/C/P R+    VP/J   P\n> be       no       chance   of this    , so          she  began looking at    everything about her     , to pass   away\n# NSg/VLXB NSg/Dq/P NPr/VB/J P  I/Ddem+ . NSg/I/J/R/C ISg+ VPt   Nᴹ/Vg/J NSg/P NSg/I/VB+  J/P   ISg/D$+ . P  NSg/VB VB/J\n> the time       .\n# D+  N🅪Sg/VB/J+ .\n>\n#\n> Alice had never been     in        a   court     of justice before , but     she  had read    about them\n# NPr+  VP  R     NSg/VLPp NPr/J/R/P D/P N🅪Sg/VB/J P  NPr🅪Sg+ C/P    . NSg/C/P ISg+ VP  NSg/VBP J/P   NSg/IPl+\n> in        books   , and  she  was  quite pleased to find   that         she  knew the name   of nearly\n# NPr/J/R/P NPl/V3+ . VB/C ISg+ VLPt R     VP/J    P  NSg/VB NSg/I/C/Ddem ISg+ VPt  D   NSg/VB P  R\n> everything there . “ That’s the judge   , ” she  said to herself , “ because of his     great\n# NSg/I/VB+  R     . . NSg$   D+  NSg/VB+ . . ISg+ VP/J P  ISg+    . . C/P     P  ISg/D$+ NSg/J\n> wig     . ”\n# NSg/VB+ . .\n>\n#\n> The judge   , by    the way    , was  the King      ; and  as    he       wore his     crown     over    the wig     ,\n# D+  NSg/VB+ . NSg/P D+  NSg/J+ . VLPt D+  NPr/VB/J+ . VB/C R/C/P NPr/ISg+ VPt  ISg/D$+ NSg/VB/J+ NSg/J/P D+  NSg/VB+ .\n> ( look   at    the frontispiece if    you    want   to see    how   he       did  it       , ) he       did  not     look   at\n# . NSg/VB NSg/P D   NSg/VB       NSg/C ISgPl+ NSg/VB P  NSg/VB NSg/C NPr/ISg+ VXPt NPr/ISg+ . . NPr/ISg+ VXPt NSg/R/C NSg/VB NSg/P\n> all          comfortable , and  it       was  certainly not     becoming .\n# NSg/I/J/C/Dq NSg/J       . VB/C NPr/ISg+ VLPt R         NSg/R/C NSg/Vg/J .\n>\n#\n> “ And  that’s the jury      - box     , ” thought Alice , “ and  those  twelve creatures , ” ( she  was\n# . VB/C NSg$   D   NSg/VB/J+ . NSg/VB+ . . N🅪Sg/VP NPr+  . . VB/C I/Ddem NSg    NPl+      . . . ISg+ VLPt\n> obliged to say    “ creatures , ” you    see    , because some     of them     were     animals , and  some\n# VP/J    P  NSg/VB . NPl+      . . ISgPl+ NSg/VB . C/P     I/J/R/Dq P  NSg/IPl+ NSg/VLPt NPl+    . VB/C I/J/R/Dq+\n> were     birds   , ) “ I       suppose they are the jurors . ” She  said this    last     word    two or\n# NSg/VLPt NPl/V3+ . . . ISg/#r+ VB      IPl+ VLB D   NPl    . . ISg+ VP/J I/Ddem+ NSg/VB/J NSg/VB+ NSg NPr/C\n> three times   over    to herself , being        rather     proud of it       : for   she  thought  , and\n# NSg+  NPl/V3+ NSg/J/P P  ISg+    . N🅪Sg/VLg/J/C NPr/VB/J/R J     P  NPr/ISg+ . R/C/P ISg+ N🅪Sg/VP+ . VB/C\n> rightly too , that          very few      little     girls  of her     age      knew the meaning   of it       at\n# R       R   . NSg/I/C/Ddem+ J/R  NSg/I/Dq NPr/I/J/Dq NPl/V3 P  ISg/D$+ N🅪Sg/VB+ VPt  D   N🅪Sg/Vg/J P  NPr/ISg+ NSg/P\n> all          . However , “ jury      - men  ” would have    done      just as    well       .\n# NSg/I/J/C/Dq . C       . . NSg/VB/J+ . NPl+ . VXB   NSg/VXB NSg/VPp/J J/R  R/C/P NSg/VB/J/R .\n>\n#\n> The twelve jurors were     all          writing very busily on  slates . “ What   are they doing   ? ”\n# D   NSg    NPl    NSg/VLPt NSg/I/J/C/Dq Nᴹ/Vg/J J/R  R      J/P NPl/V3 . . NSg/I+ VLB IPl+ Nᴹ/Vg/J . .\n> Alice whispered to the Gryphon . “ They can’t have    anything  to put     down        yet      ,\n# NPr+  VP/J      P  D   ?       . . IPl+ VXB   NSg/VXB NSg/I/VB+ P  NSg/VBP N🅪Sg/VB/J/P NSg/VB/C .\n> before the trial’s begun . ”\n# C/P    D   NSg$    VPp   . .\n>\n#\n> “ They’re putting down        their names   , ” the Gryphon whispered in        reply   , “ for   fear\n# . K       Nᴹ/Vg/J N🅪Sg/VB/J/P D$+   NPl/V3+ . . D   ?       VP/J      NPr/J/R/P NSg/VB+ . . R/C/P N🅪Sg/VB+\n> they should forget them     before the end    of the trial     . ”\n# IPl+ VXB    VB     NSg/IPl+ C/P    D   NSg/VB P  D   NSg/VB/J+ . .\n>\n#\n> “ Stupid things ! ” Alice began in        a   loud  , indignant voice   , but     she  stopped\n# . NSg/J+ NPl+   . . NPr+  VPt   NPr/J/R/P D/P NSg/J . J         NSg/VB+ . NSg/C/P ISg+ VP/J\n> hastily , for   the White       Rabbit  cried out          , “ Silence in        the court      ! ” and  the King\n# R       . R/C/P D   NPr🅪Sg/VB/J NSg/VB+ VP/J  NSg/VB/J/R/P . . NSg/VB+ NPr/J/R/P D   N🅪Sg/VB/J+ . . VB/C D+  NPr/VB/J+\n> put     on  his     spectacles and  looked anxiously round      , to make   out          who    was  talking .\n# NSg/VBP J/P ISg/D$+ NPl        VB/C VP/J   R         NSg/VB/J/P . P  NSg/VB NSg/VB/J/R/P NPr/I+ VLPt Nᴹ/Vg/J .\n>\n#\n> Alice could   see    , as    well       as    if    she  were     looking over    their shoulders , that         all\n# NPr+  NSg/VXB NSg/VB . R/C/P NSg/VB/J/R R/C/P NSg/C ISg+ NSg/VLPt Nᴹ/Vg/J NSg/J/P D$+   NPl/V3+   . NSg/I/C/Ddem NSg/I/J/C/Dq\n> the jurors were     writing down        “ stupid things ! ” on  their slates , and  she  could\n# D   NPl    NSg/VLPt Nᴹ/Vg/J N🅪Sg/VB/J/P . NSg/J  NPl+   . . J/P D$+   NPl/V3 . VB/C ISg+ NSg/VXB\n> even       make   out          that         one     of them     didn’t know how   to spell  “ stupid , ” and  that         he\n# NSg/VB/J/R NSg/VB NSg/VB/J/R/P NSg/I/C/Ddem NSg/I/J P  NSg/IPl+ VXPt   VB   NSg/C P  NSg/VB . NSg/J  . . VB/C NSg/I/C/Ddem NPr/ISg+\n> had to ask    his     neighbour      to tell   him  . “ A    nice   muddle  their slates’ll be       in\n# VP  P  NSg/VB ISg/D$+ NSg/VB/J/Comm+ P  NPr/VB ISg+ . . D/P+ NPr/J+ NSg/VB+ D$+   ?         NSg/VLXB NPr/J/R/P\n> before the trial’s over    ! ” thought Alice .\n# C/P    D   NSg$    NSg/J/P . . N🅪Sg/VP NPr+  .\n>\n#\n> One     of the jurors had a   pencil  that          squeaked . This   of course  , Alice could   not\n# NSg/I/J P  D   NPl    VP  D/P NSg/VB+ NSg/I/C/Ddem+ VP/J     . I/Ddem P  NSg/VB+ . NPr+  NSg/VXB NSg/R/C\n> stand  , and  she  went    round      the court      and  got behind  him  , and  very soon found  an\n# NSg/VB . VB/C ISg+ NSg/VPt NSg/VB/J/P D+  N🅪Sg/VB/J+ VB/C VP  NSg/J/P ISg+ . VB/C J/R  J/R  NSg/VP D/P\n> opportunity of taking   it       away . She  did  it       so          quickly that         the poor     little     juror\n# N🅪Sg        P  NSg/Vg/J NPr/ISg+ VB/J . ISg+ VXPt NPr/ISg+ NSg/I/J/R/C R       NSg/I/C/Ddem D   NSg/VB/J NPr/I/J/Dq NSg\n> ( it       was  Bill    , the Lizard ) could   not     make   out          at    all          what   had become of it       ; so          ,\n# . NPr/ISg+ VLPt NPr/VB+ . D   NSg    . NSg/VXB NSg/R/C NSg/VB NSg/VB/J/R/P NSg/P NSg/I/J/C/Dq NSg/I+ VP  VBPp   P  NPr/ISg+ . NSg/I/J/R/C .\n> after hunting all          about for   it       , he       was  obliged to write  with one     finger  for   the\n# P     Nᴹ/Vg/J NSg/I/J/C/Dq J/P+  R/C/P NPr/ISg+ . NPr/ISg+ VLPt VP/J    P  NSg/VB P    NSg/I/J NSg/VB+ R/C/P D\n> rest   of the day     ; and  this    was  of very little     use      , as    it       left     no       mark    on  the\n# NSg/VB P  D   NPr🅪Sg+ . VB/C I/Ddem+ VLPt P  J/R  NPr/I/J/Dq N🅪Sg/VB+ . R/C/P NPr/ISg+ NPr/VP/J NSg/Dq/P NPr/VB+ J/P D\n> slate     .\n# NSg/VB/J+ .\n>\n#\n> “ Herald  , read    the accusation ! ” said the King      .\n# . NSg/VB+ . NSg/VBP D   N🅪Sg       . . VP/J D+  NPr/VB/J+ .\n>\n#\n> On  this    the White        Rabbit  blew      three blasts on  the trumpet , and  then      unrolled the\n# J/P I/Ddem+ D+  NPr🅪Sg/VB/J+ NSg/VB+ NSg/VPt/J NSg   NPl/V3 J/P D   NSg/VB+ . VB/C NSg/J/R/C VP/J     D\n> parchment scroll , and  read    as    follows : —\n# N🅪Sg+     NSg/VB . VB/C NSg/VBP R/C/P NPl/V3  . .\n>\n#\n> “ The Queen    of Hearts  , she  made some     tarts  , All          on  a   summer     day     : The Knave of\n# . D   NPr/VB/J P  NPl/V3+ . ISg+ VP   I/J/R/Dq NPl/V3 . NSg/I/J/C/Dq J/P D/P NPr🅪Sg/VB+ NPr🅪Sg+ . D   NSg   P\n> Hearts  , he       stole   those  tarts  , And  took them     quite away ! ”\n# NPl/V3+ . NPr/ISg+ NSg/VPt I/Ddem NPl/V3 . VB/C VPt  NSg/IPl+ R     VB/J . .\n>\n#\n> “ Consider your verdict , ” the King      said to the jury      .\n# . VB       D$+  NSg+    . . D+  NPr/VB/J+ VP/J P  D+  NSg/VB/J+ .\n>\n#\n> “ Not     yet      , not     yet      ! ” the Rabbit  hastily interrupted . “ There’s a   great deal      to\n# . NSg/R/C NSg/VB/C . NSg/R/C NSg/VB/C . . D+  NSg/VB+ R       VP/J        . . K       D/P NSg/J NSg/VB/J+ P\n> come       before that          ! ”\n# NSg/VBPp/P C/P    NSg/I/C/Ddem+ . .\n>\n#\n> “ Call   the first  witness , ” said the King      ; and  the White        Rabbit  blew      three blasts\n# . NSg/VB D+  NSg/J+ NSg/VB+ . . VP/J D+  NPr/VB/J+ . VB/C D+  NPr🅪Sg/VB/J+ NSg/VB+ NSg/VPt/J NSg   NPl/V3\n> on  the trumpet , and  called out          , “ First witness ! ”\n# J/P D   NSg/VB+ . VB/C VP/J   NSg/VB/J/R/P . . NSg/J NSg/VB+ . .\n>\n#\n> The first  witness was  the Hatter . He       came      in        with a   teacup in        one     hand    and  a\n# D+  NSg/J+ NSg/VB+ VLPt D   NSg/VB . NPr/ISg+ NSg/VPt/P NPr/J/R/P P    D/P NSg/J  NPr/J/R/P NSg/I/J NSg/VB+ VB/C D/P\n> piece  of bread    - and  - butter  in        the other    . “ I       beg    pardon , your Majesty , ” he       began ,\n# NSg/VB P  N🅪Sg/VB+ . VB/C . NSg/VB+ NPr/J/R/P D   NSg/VB/J . . ISg/#r+ NSg/VB NSg/VB . D$+  N🅪Sg/I+ . . NPr/ISg+ VPt   .\n> “ for   bringing these  in        : but     I       hadn’t quite finished my  tea      when    I       was  sent   for   . ”\n# . R/C/P Nᴹ/Vg/J  I/Ddem NPr/J/R/P . NSg/C/P ISg/#r+ VPt    R     VP/J     D$+ N🅪Sg/VB+ NSg/I/C ISg/#r+ VLPt NSg/VP R/C/P . .\n>\n#\n> “ You    ought     to have    finished , ” said the King      . “ When    did  you    begin  ? ”\n# . ISgPl+ NSg/I/VXB P  NSg/VXB VP/J     . . VP/J D+  NPr/VB/J+ . . NSg/I/C VXPt ISgPl+ NSg/VB . .\n>\n#\n> The Hatter looked at    the March   Hare      , who    had followed him  into the court      ,\n# D   NSg/VB VP/J   NSg/P D   NPr/VB+ NSg/VB/J+ . NPr/I+ VP  VP/J     ISg+ P    D   N🅪Sg/VB/J+ .\n> arm       - in        - arm       with the Dormouse . “ Fourteenth of March   , I       think  it       was  , ” he       said .\n# NSg/VB/J+ . NPr/J/R/P . NSg/VB/J+ P    D   NSg      . . NSg/J      P  NPr/VB+ . ISg/#r+ NSg/VB NPr/ISg+ VLPt . . NPr/ISg+ VP/J .\n>\n#\n> “ Fifteenth , ” said the March   Hare      .\n# . NSg/J+    . . VP/J D+  NPr/VB+ NSg/VB/J+ .\n>\n#\n> “ Sixteenth , ” added the Dormouse .\n# . NSg/J     . . VP/J  D   NSg      .\n>\n#\n> “ Write  that          down        , ” the King      said to the jury      , and  the jury      eagerly wrote down\n# . NSg/VB NSg/I/C/Ddem+ N🅪Sg/VB/J/P . . D+  NPr/VB/J+ VP/J P  D+  NSg/VB/J+ . VB/C D+  NSg/VB/J+ R       VPt   N🅪Sg/VB/J/P\n> all          three dates   on  their slates , and  then      added them     up         , and  reduced the answer\n# NSg/I/J/C/Dq NSg   NPl/V3+ J/P D$+   NPl/V3 . VB/C NSg/J/R/C VP/J  NSg/IPl+ NSg/VB/J/P . VB/C VP/J    D   NSg/VB+\n> to shillings and  pence .\n# P  NPl       VB/C NPl   .\n>\n#\n> “ Take   off        your hat     , ” the King      said to the Hatter .\n# . NSg/VB NSg/VB/J/P D$+  NSg/VB+ . . D+  NPr/VB/J+ VP/J P  D   NSg/VB .\n>\n#\n> “ It       isn’t   mine      , ” said the Hatter .\n# . NPr/ISg+ NSg/VX3 NSg/I/VB+ . . VP/J D   NSg/VB .\n>\n#\n> “ Stolen    ! ” the King      exclaimed , turning to the jury      , who    instantly made a\n# . NSg/VPp/J . . D+  NPr/VB/J+ VP/J      . Nᴹ/Vg/J P  D+  NSg/VB/J+ . NPr/I+ R         VP   D/P\n> memorandum of the fact .\n# NSg        P  D   NSg+ .\n>\n#\n> “ I       keep   them     to sell   , ” the Hatter added as    an  explanation ; “ I’ve none  of my  own      .\n# . ISg/#r+ NSg/VB NSg/IPl+ P  NSg/VB . . D   NSg/VB VP/J  R/C/P D/P N🅪Sg+       . . K    NSg/I P  D$+ NSg/VB/J .\n> I’m a   hatter . ”\n# K   D/P NSg/VB . .\n>\n#\n> Here the Queen     put     on  her     spectacles , and  began staring at    the Hatter , who\n# J/R  D+  NPr/VB/J+ NSg/VBP J/P ISg/D$+ NPl        . VB/C VPt   Nᴹ/Vg/J NSg/P D   NSg/VB . NPr/I+\n> turned pale     and  fidgeted .\n# VP/J   NSg/VB/J VB/C VP/J     .\n>\n#\n> “ Give   your evidence , ” said the King      ; “ and  don’t be       nervous , or    I’ll have    you\n# . NSg/VB D$+  Nᴹ/VB+   . . VP/J D+  NPr/VB/J+ . . VB/C VXB   NSg/VLXB J       . NPr/C K    NSg/VXB ISgPl+\n> executed on  the spot      . ”\n# VP/J     J/P D   NSg/VB/J+ . .\n>\n#\n> This    did  not     seem to encourage the witness at    all          : he       kept shifting from one\n# I/Ddem+ VXPt NSg/R/C VB   P  VB        D+  NSg/VB+ NSg/P NSg/I/J/C/Dq . NPr/ISg+ VP   Nᴹ/Vg/J+ P    NSg/I/J+\n> foot    to the other    , looking uneasily at    the Queen     , and  in        his     confusion he       bit     a\n# NSg/VB+ P  D   NSg/VB/J . Nᴹ/Vg/J R        NSg/P D   NPr/VB/J+ . VB/C NPr/J/R/P ISg/D$+ N🅪Sg/VB+  NPr/ISg+ NSg/VPt D/P\n> large piece   out          of his     teacup instead of the bread    - and  - butter  .\n# NSg/J NSg/VB+ NSg/VB/J/R/P P  ISg/D$+ NSg/J  R       P  D   N🅪Sg/VB+ . VB/C . NSg/VB+ .\n>\n#\n> Just at    this    moment Alice felt      a   very curious sensation , which puzzled her     a\n# J/R  NSg/P I/Ddem+ NSg+   NPr+  N🅪Sg/VP/J D/P J/R  J+      NSg+      . I/C+  VP/J    ISg/D$+ D/P+\n> good      deal      until she  made out          what   it       was  : she  was  beginning to grow larger\n# NPr/VB/J+ NSg/VB/J+ C/P   ISg+ VP   NSg/VB/J/R/P NSg/I+ NPr/ISg+ VLPt . ISg+ VLPt NSg/Vg/J  P  VB   JC\n> again , and  she  thought at    first she  would get    up         and  leave  the court      ; but     on\n# P     . VB/C ISg+ N🅪Sg/VP NSg/P NSg/J ISg+ VXB   NSg/VB NSg/VB/J/P VB/C NSg/VB D+  N🅪Sg/VB/J+ . NSg/C/P J/P\n> second    thoughts she  decided  to remain where   she  was  as    long     as    there was  room\n# NSg/VB/J+ NPl/V3+  ISg+ NSg/VP/J P  NSg/VB NSg/R/C ISg+ VLPt R/C/P NPr/VB/J R/C/P R+    VLPt N🅪Sg/VB/J+\n> for   her     .\n# R/C/P ISg/D$+ .\n>\n#\n> “ I       wish   you    wouldn’t squeeze so          . ” said the Dormouse , who    was  sitting  next    to\n# . ISg/#r+ NSg/VB ISgPl+ VXB      NSg/VB  NSg/I/J/R/C . . VP/J D   NSg      . NPr/I+ VLPt NSg/Vg/J NSg/J/P P\n> her     . “ I       can     hardly breathe . ”\n# ISg/D$+ . . ISg/#r+ NPr/VXB R      VB      . .\n>\n#\n> “ I       can’t help   it       , ” said Alice very meekly : “ I’m growing . ”\n# . ISg/#r+ VXB   NSg/VB NPr/ISg+ . . VP/J NPr+  J/R  R      . . K   Nᴹ/Vg/J . .\n>\n#\n> “ You’ve no       right     to grow here , ” said the Dormouse .\n# . K      NSg/Dq/P NPr/VB/J+ P  VB   J/R  . . VP/J D   NSg      .\n>\n#\n> “ Don’t talk    nonsense , ” said Alice more         boldly : “ you    know you’re growing too . ”\n# . VXB   N🅪Sg/VB Nᴹ/VB/J+ . . VP/J NPr+  NPr/I/J/R/Dq R      . . ISgPl+ VB   K      Nᴹ/Vg/J R   . .\n>\n#\n> “ Yes    , but     I       grow at    a    reasonable pace        , ” said the Dormouse : “ not     in        that\n# . NPl/VB . NSg/C/P ISg/#r+ VB   NSg/P D/P+ J+         NPr/VB/J/P+ . . VP/J D   NSg      . . NSg/R/C NPr/J/R/P NSg/I/C/Ddem\n> ridiculous fashion  . ” And  he       got up         very sulkily and  crossed over    to the other\n# J          N🅪Sg/VB+ . . VB/C NPr/ISg+ VP  NSg/VB/J/P J/R  R       VB/C VP/J    NSg/J/P P  D   NSg/VB/J\n> side     of the court      .\n# NSg/VB/J P  D   N🅪Sg/VB/J+ .\n>\n#\n> All           this    time       the Queen     had never left     off        staring at    the Hatter , and  , just as\n# NSg/I/J/C/Dq+ I/Ddem+ N🅪Sg/VB/J+ D+  NPr/VB/J+ VP  R     NPr/VP/J NSg/VB/J/P Nᴹ/Vg/J NSg/P D   NSg/VB . VB/C . J/R  R/C/P\n> the Dormouse crossed the court      , she  said to one     of the officers of the court      ,\n# D   NSg      VP/J    D   N🅪Sg/VB/J+ . ISg+ VP/J P  NSg/I/J P  D   NPl/V3   P  D   N🅪Sg/VB/J+ .\n> “ Bring me       the list   of the singers in        the last     concert ! ” on  which the wretched\n# . VB    NPr/ISg+ D   NSg/VB P  D   +       NPr/J/R/P D   NSg/VB/J NSg/VB+ . . J/P I/C+  D   J\n> Hatter trembled so          , that         he       shook     both   his     shoes   off        .\n# NSg/VB VP/J     NSg/I/J/R/C . NSg/I/C/Ddem NPr/ISg+ NSg/VPt/J I/C/Dq ISg/D$+ NPl/V3+ NSg/VB/J/P .\n>\n#\n> “ Give   your evidence , ” the King      repeated angrily , “ or    I’ll have    you    executed ,\n# . NSg/VB D$+  Nᴹ/VB+   . . D+  NPr/VB/J+ VP/J     R       . . NPr/C K    NSg/VXB ISgPl+ VP/J     .\n> whether you’re nervous or    not     . ”\n# I/C     K      J       NPr/C NSg/R/C . .\n>\n#\n> “ I’m a    poor     man       , your Majesty , ” the Hatter began , in        a   trembling voice   , “ — and  I\n# . K   D/P+ NSg/VB/J NPr/VB/J+ . D$+  N🅪Sg/I+ . . D   NSg/VB VPt   . NPr/J/R/P D/P Nᴹ/Vg/J   NSg/VB+ . . . VB/C ISg/#r+\n> hadn’t begun my  tea      — not     above   a   week   or    so          — and  what   with the bread    - and  - butter\n# VPt    VPp   D$+ N🅪Sg/VB+ . NSg/R/C NSg/J/P D/P NSg/J+ NPr/C NSg/I/J/R/C . VB/C NSg/I+ P    D   N🅪Sg/VB+ . VB/C . NSg/VB+\n> getting so          thin     — and  the twinkling of the tea      — ”\n# NSg/Vg  NSg/I/J/R/C NSg/VB/J . VB/C D   N🅪Sg/Vg/J P  D   N🅪Sg/VB+ . .\n>\n#\n> “ The twinkling of the what   ? ” said the King      .\n# . D   N🅪Sg/Vg/J P  D   NSg/I+ . . VP/J D+  NPr/VB/J+ .\n>\n#\n> “ It       began with the tea      , ” the Hatter replied .\n# . NPr/ISg+ VPt   P    D+  N🅪Sg/VB+ . . D   NSg/VB VP/J    .\n>\n#\n> “ Of course  twinkling begins with a   T      ! ” said the King      sharply . “ Do  you    take   me\n# . P  NSg/VB+ N🅪Sg/Vg/J NPl/V3 P    D/P NPr/J+ . . VP/J D+  NPr/VB/J+ R       . . VXB ISgPl+ NSg/VB NPr/ISg+\n> for   a   dunce ? Go       on  ! ”\n# R/C/P D/P NSg   . NSg/VB/J J/P . .\n>\n#\n> “ I’m a    poor     man       , ” the Hatter went    on  , “ and  most         things twinkled after that          — only\n# . K   D/P+ NSg/VB/J NPr/VB/J+ . . D   NSg/VB NSg/VPt J/P . . VB/C NSg/I/J/R/Dq NPl+   VP/J     P     NSg/I/C/Ddem+ . J/R/C\n> the March   Hare      said — ”\n# D   NPr/VB+ NSg/VB/J+ VP/J . .\n>\n#\n> “ I       didn’t ! ” the March   Hare      interrupted in        a    great  hurry   .\n# . ISg/#r+ VXPt   . . D+  NPr/VB+ NSg/VB/J+ VP/J        NPr/J/R/P D/P+ NSg/J+ NSg/VB+ .\n>\n#\n> “ You    did  ! ” said the Hatter .\n# . ISgPl+ VXPt . . VP/J D   NSg/VB .\n>\n#\n> “ I       deny it       ! ” said the March   Hare      .\n# . ISg/#r+ VB   NPr/ISg+ . . VP/J D+  NPr/VB+ NSg/VB/J+ .\n>\n#\n> “ He       denies it       , ” said the King      : “ leave  out          that         part      . ”\n# . NPr/ISg+ V3     NPr/ISg+ . . VP/J D   NPr/VB/J+ . . NSg/VB NSg/VB/J/R/P NSg/I/C/Ddem NSg/VB/J+ . .\n>\n#\n> “ Well       , at    any     rate    , the Dormouse said — ” the Hatter went    on  , looking anxiously\n# . NSg/VB/J/R . NSg/P I/R/Dq+ NSg/VB+ . D   NSg      VP/J . . D   NSg/VB NSg/VPt J/P . Nᴹ/Vg/J R\n> round      to see    if    he       would deny it       too : but     the Dormouse denied nothing  , being\n# NSg/VB/J/P P  NSg/VB NSg/C NPr/ISg+ VXB   VB   NPr/ISg+ R   . NSg/C/P D   NSg      VP/J   NSg/I/J+ . N🅪Sg/VLg/J/C\n> fast       asleep .\n# NSg/VB/J/R J      .\n>\n#\n> “ After that          , ” continued the Hatter , “ I       cut       some     more         bread    - and  - butter  — ”\n# . P     NSg/I/C/Ddem+ . . VP/J      D   NSg/VB . . ISg/#r+ NSg/VBP/J I/J/R/Dq NPr/I/J/R/Dq N🅪Sg/VB+ . VB/C . NSg/VB+ . .\n>\n#\n> “ But     what   did  the Dormouse say    ? ” one     of the jury      asked .\n# . NSg/C/P NSg/I+ VXPt D   NSg      NSg/VB . . NSg/I/J P  D+  NSg/VB/J+ VP/J  .\n>\n#\n> “ That         I       can’t remember , ” said the Hatter .\n# . NSg/I/C/Ddem ISg/#r+ VXB   NSg/VB   . . VP/J D   NSg/VB .\n>\n#\n> “ You    must    remember , ” remarked the King      , “ or    I’ll have    you    executed . ”\n# . ISgPl+ NSg/VXB NSg/VB   . . VP/J     D+  NPr/VB/J+ . . NPr/C K    NSg/VXB ISgPl+ VP/J     . .\n>\n#\n> The miserable Hatter dropped his     teacup and  bread    - and  - butter  , and  went    down        on\n# D   J         NSg/VB VP/J    ISg/D$+ NSg/J  VB/C N🅪Sg/VB+ . VB/C . NSg/VB+ . VB/C NSg/VPt N🅪Sg/VB/J/P J/P\n> one     knee    . “ I’m a    poor     man       , your Majesty , ” he       began .\n# NSg/I/J NSg/VB+ . . K   D/P+ NSg/VB/J NPr/VB/J+ . D$+  N🅪Sg/I+ . . NPr/ISg+ VPt   .\n>\n#\n> “ You’re a   very poor     speaker , ” said the King      .\n# . K      D/P J/R  NSg/VB/J NSg+    . . VP/J D   NPr/VB/J+ .\n>\n#\n> Here one     of the guinea - pigs    cheered , and  was  immediately suppressed by    the\n# J/R  NSg/I/J P  D+  NPr+   . NPl/V3+ VP/J    . VB/C VLPt R           VP/J       NSg/P D\n> officers of the court      . ( As    that          is  rather     a   hard     word   , I       will    just explain to\n# NPl/V3   P  D+  N🅪Sg/VB/J+ . . R/C/P NSg/I/C/Ddem+ VL3 NPr/VB/J/R D/P N🅪Sg/J/R NSg/VB . ISg/#r+ NPr/VXB J/R  VB      P\n> you    how   it       was  done      . They had a    large  canvas  bag     , which tied up         at    the mouth\n# ISgPl+ NSg/C NPr/ISg+ VLPt NSg/VPp/J . IPl+ VP  D/P+ NSg/J+ NSg/VB+ NSg/VB+ . I/C+  VP/J NSg/VB/J/P NSg/P D   NSg/VB+\n> with strings : into this    they slipped the guinea - pig    , head      first , and  then      sat\n# P    NPl/V3+ . P    I/Ddem+ IPl+ VP/J    D   NPr+   . NSg/VB . NPr/VB/J+ NSg/J . VB/C NSg/J/R/C NSg/VP/J\n> upon it       . )\n# P    NPr/ISg+ . .\n>\n#\n> “ I’m glad     I’ve seen    that          done      , ” thought Alice . “ I’ve so          often read    in        the\n# . K   NSg/VB/J K    NSg/VPp NSg/I/C/Ddem+ NSg/VPp/J . . N🅪Sg/VP NPr+  . . K    NSg/I/J/R/C R     NSg/VBP NPr/J/R/P D\n> newspapers , at    the end    of trials  , “ There was  some     attempts at    applause , which\n# NPl/V3+    . NSg/P D   NSg/VB P  NPl/V3+ . . R+    VLPt I/J/R/Dq NPl/V3+  NSg/P Nᴹ+      . I/C+\n> was  immediately suppressed by    the officers of the court      , ” and  I       never understood\n# VLPt R           VP/J       NSg/P D   NPl/V3   P  D   N🅪Sg/VB/J+ . . VB/C ISg/#r+ R     VP/J\n> what   it       meant till       now       . ”\n# NSg/I+ NPr/ISg+ VP    NSg/VB/C/P NSg/J/R/C . .\n>\n#\n> “ If    that’s all          you    know about it       , you    may     stand  down        , ” continued the King      .\n# . NSg/C NSg$   NSg/I/J/C/Dq ISgPl+ VB   J/P   NPr/ISg+ . ISgPl+ NPr/VXB NSg/VB N🅪Sg/VB/J/P . . VP/J      D   NPr/VB/J+ .\n>\n#\n> “ I       can’t go       no       lower     , ” said the Hatter : “ I’m on  the floor   , as    it       is  . ”\n# . ISg/#r+ VXB   NSg/VB/J NSg/Dq/P NSg/VB/JC . . VP/J D   NSg/VB . . K   J/P D   NSg/VB+ . R/C/P NPr/ISg+ VL3 . .\n>\n#\n> “ Then      you    may     sit    down        , ” the King      replied .\n# . NSg/J/R/C ISgPl+ NPr/VXB NSg/VB N🅪Sg/VB/J/P . . D+  NPr/VB/J+ VP/J    .\n>\n#\n> Here the other    guinea - pig     cheered , and  was  suppressed .\n# J/R  D   NSg/VB/J NPr+   . NSg/VB+ VP/J    . VB/C VLPt VP/J       .\n>\n#\n> “ Come       , that          finished the guinea - pigs    ! ” thought Alice . “ Now       we   shall get    on\n# . NSg/VBPp/P . NSg/I/C/Ddem+ VP/J     D   NPr+   . NPl/V3+ . . N🅪Sg/VP NPr+  . . NSg/J/R/C IPl+ VXB   NSg/VB J/P\n> better     . ”\n# NSg/VXB/JC . .\n>\n#\n> “ I’d rather     finish my  tea      , ” said the Hatter , with an  anxious look   at    the Queen     ,\n# . K   NPr/VB/J/R NSg/VB D$+ N🅪Sg/VB+ . . VP/J D   NSg/VB . P    D/P J       NSg/VB NSg/P D   NPr/VB/J+ .\n> who    was  reading   the list   of singers .\n# NPr/I+ VLPt NPrᴹ/Vg/J D   NSg/VB P  +       .\n>\n#\n> “ You    may     go       , ” said the King      , and  the Hatter hurriedly left     the court      , without\n# . ISgPl+ NPr/VXB NSg/VB/J . . VP/J D+  NPr/VB/J+ . VB/C D   NSg/VB R         NPr/VP/J D   N🅪Sg/VB/J+ . C/P\n> even       waiting to put     his     shoes   on  .\n# NSg/VB/J/R Nᴹ/Vg/J P  NSg/VBP ISg/D$+ NPl/V3+ J/P .\n>\n#\n> “ — and  just take   his     head      off        outside   , ” the Queen     added to one     of the officers :\n# . . VB/C J/R  NSg/VB ISg/D$+ NPr/VB/J+ NSg/VB/J/P Nᴹ/VB/J/P . . D+  NPr/VB/J+ VP/J  P  NSg/I/J P  D+  NPl/V3+  .\n> but     the Hatter was  out          of sight    before the officer could   get    to the door    .\n# NSg/C/P D   NSg/VB VLPt NSg/VB/J/R/P P  N🅪Sg/VB+ C/P    D   NSg/VB+ NSg/VXB NSg/VB P  D   NSg/VB+ .\n>\n#\n> “ Call   the next     witness ! ” said the King      .\n# . NSg/VB D+  NSg/J/P+ NSg/VB+ . . VP/J D+  NPr/VB/J+ .\n>\n#\n> The next     witness was  the Duchess’s cook   . She  carried the pepper   - box    in        her     hand    ,\n# D+  NSg/J/P+ NSg/VB+ VLPt D   NSg$      NPr/VB . ISg+ VP/J    D   N🅪Sg/VB+ . NSg/VB NPr/J/R/P ISg/D$+ NSg/VB+ .\n> and  Alice guessed who    it       was  , even       before she  got into the court      , by    the way    the\n# VB/C NPr+  VP/J    NPr/I+ NPr/ISg+ VLPt . NSg/VB/J/R C/P    ISg+ VP  P    D+  N🅪Sg/VB/J+ . NSg/P D+  NSg/J+ D\n> people  near       the door    began sneezing all          at    once  .\n# NPl/VB+ NSg/VB/J/P D+  NSg/VB+ VPt   Nᴹ/Vg/J  NSg/I/J/C/Dq NSg/P NSg/C .\n>\n#\n> “ Give   your evidence , ” said the King      .\n# . NSg/VB D$+  Nᴹ/VB+   . . VP/J D+  NPr/VB/J+ .\n>\n#\n> “ Shan’t , ” said the cook    .\n# . VXB    . . VP/J D   NPr/VB+ .\n>\n#\n> The King      looked anxiously at    the White        Rabbit  , who    said in        a    low         voice   , “ Your\n# D+  NPr/VB/J+ VP/J   R         NSg/P D+  NPr🅪Sg/VB/J+ NSg/VB+ . NPr/I+ VP/J NPr/J/R/P D/P+ NSg/VB/J/R+ NSg/VB+ . . D$+\n> Majesty must    cross       - examine this    witness . ”\n# N🅪Sg/I+ NSg/VXB NPr/VB/J/P+ . NSg/VB  I/Ddem+ NSg/VB+ . .\n>\n#\n> “ Well       , if    I       must    , I       must    , ” the King      said , with a   melancholy air      , and  , after\n# . NSg/VB/J/R . NSg/C ISg/#r+ NSg/VXB . ISg/#r+ NSg/VXB . . D+  NPr/VB/J+ VP/J . P    D/P NSg/J      N🅪Sg/VB+ . VB/C . P\n> folding his     arms    and  frowning at    the cook    till       his     eyes    were     nearly out          of\n# Nᴹ/Vg/J ISg/D$+ NPl/V3+ VB/C Nᴹ/Vg/J  NSg/P D   NPr/VB+ NSg/VB/C/P ISg/D$+ NPl/V3+ NSg/VLPt R      NSg/VB/J/R/P P\n> sight    , he       said in        a   deep  voice   , “ What   are tarts  made of ? ”\n# N🅪Sg/VB+ . NPr/ISg+ VP/J NPr/J/R/P D/P NSg/J NSg/VB+ . . NSg/I+ VLB NPl/V3 VP   P  . .\n>\n#\n> “ Pepper   , mostly , ” said the cook    .\n# . N🅪Sg/VB+ . R      . . VP/J D+  NPr/VB+ .\n>\n#\n> “ Treacle , ” said a   sleepy voice   behind  her     .\n# . Nᴹ/VB   . . VP/J D/P NSg/J  NSg/VB+ NSg/J/P ISg/D$+ .\n>\n#\n> “ Collar  that          Dormouse , ” the Queen     shrieked out          . “ Behead that          Dormouse ! Turn   that\n# . NSg/VB+ NSg/I/C/Ddem+ NSg      . . D   NPr/VB/J+ VP/J     NSg/VB/J/R/P . . VB     NSg/I/C/Ddem+ NSg      . NSg/VB NSg/I/C/Ddem+\n> Dormouse out          of court      ! Suppress him  ! Pinch  him  ! Off        with his     whiskers ! ”\n# NSg      NSg/VB/J/R/P P  N🅪Sg/VB/J+ . VB       ISg+ . NSg/VB ISg+ . NSg/VB/J/P P    ISg/D$+ NPl      . .\n>\n#\n> For   some      minutes the whole  court      was  in        confusion , getting the Dormouse turned\n# R/C/P I/J/R/Dq+ NPl/V3+ D+  NSg/J+ N🅪Sg/VB/J+ VLPt NPr/J/R/P N🅪Sg/VB+  . NSg/Vg  D   NSg      VP/J\n> out          , and  , by    the time       they had settled down        again , the cook    had disappeared .\n# NSg/VB/J/R/P . VB/C . NSg/P D   N🅪Sg/VB/J+ IPl+ VP  VP/J    N🅪Sg/VB/J/P P     . D   NPr/VB+ VP  VP/J        .\n>\n#\n> “ Never mind    ! ” said the King      , with an  air     of great  relief . “ Call   the next\n# . R     NSg/VB+ . . VP/J D+  NPr/VB/J+ . P    D/P N🅪Sg/VB P  NSg/J+ NSg/J+ . . NSg/VB D+  NSg/J/P+\n> witness . ” And  he       added in        an  undertone to the Queen     , “ Really , my  dear     , you    must\n# NSg/VB+ . . VB/C NPr/ISg+ VP/J  NPr/J/R/P D/P NSg/VB    P  D   NPr/VB/J+ . . R      . D$+ NSg/VB/J . ISgPl+ NSg/VXB\n> cross       - examine the next    witness . It       quite makes  my  forehead ache    ! ”\n# NPr/VB/J/P+ . NSg/VB  D   NSg/J/P NSg/VB+ . NPr/ISg+ R     NPl/V3 D$+ NSg+     NSg/VB+ . .\n>\n#\n> Alice watched the White        Rabbit  as    he       fumbled over    the list    , feeling   very curious\n# NPr+  VP/J    D+  NPr🅪Sg/VB/J+ NSg/VB+ R/C/P NPr/ISg+ VP/J    NSg/J/P D   NSg/VB+ . N🅪Sg/Vg/J J/R  J\n> to see    what   the next    witness would be       like         , “ — for   they haven’t got much         evidence\n# P  NSg/VB NSg/I+ D   NSg/J/P NSg/VB+ VXB   NSg/VLXB NSg/VB/J/C/P . . . R/C/P IPl+ VXB     VP  NSg/I/J/R/Dq Nᴹ/VB+\n> yet      , ” she  said to herself . Imagine her     surprise , when    the White        Rabbit  read    out          ,\n# NSg/VB/C . . ISg+ VP/J P  ISg+    . NSg/VB  ISg/D$+ NSg/VB+  . NSg/I/C D+  NPr🅪Sg/VB/J+ NSg/VB+ NSg/VBP NSg/VB/J/R/P .\n> at    the top      of his     shrill   little      voice   , the name    “ Alice ! ”\n# NSg/P D   NSg/VB/J P  ISg/D$+ NSg/VB/J NPr/I/J/Dq+ NSg/VB+ . D+  NSg/VB+ . NPr+  . .\n>\n#\n>              CHAPTER XII : Alice’s Evidence\n# HeadingStart NSg/VB+ #r  . NPr$    Nᴹ/VB+\n>\n#\n> “ Here ! ” cried Alice , quite forgetting in        the flurry of the moment how   large she\n# . J/R  . . VP/J  NPr+  . R     NSg/Vg     NPr/J/R/P D   NSg/VB P  D   NSg+   NSg/C NSg/J ISg+\n> had grown in        the last     few      minutes , and  she  jumped up         in        such  a   hurry   that          she\n# VP  VB/J  NPr/J/R/P D   NSg/VB/J NSg/I/Dq NPl/V3+ . VB/C ISg+ VP/J   NSg/VB/J/P NPr/J/R/P NSg/I D/P NSg/VB+ NSg/I/C/Ddem+ ISg+\n> tipped over    the jury      - box    with the edge   of her     skirt  , upsetting all          the jurymen\n# VP     NSg/J/P D   NSg/VB/J+ . NSg/VB P    D   NSg/VB P  ISg/D$+ NSg/VB . NSg/Vg/J  NSg/I/J/C/Dq D   NPl\n> on  to the heads  of the crowd   below , and  there they lay        sprawling about ,\n# J/P P  D   NPl/V3 P  D   NSg/VB+ P     . VB/C R+    IPl+ NSg/VBPt/J Nᴹ/Vg/J   J/P   .\n> reminding her     very much         of a   globe  of goldfish she  had accidentally upset    the\n# Nᴹ/Vg/J   ISg/D$+ J/R  NSg/I/J/R/Dq P  D/P NSg/VB P  NSgPl    ISg+ VP  R            NSg/VB/J D\n> week   before .\n# NSg/J+ C/P    .\n>\n#\n> “ Oh     , I       beg    your pardon ! ” she  exclaimed in        a   tone      of great  dismay  , and  began\n# . NPr/VB . ISg/#r+ NSg/VB D$+  NSg/VB . . ISg+ VP/J      NPr/J/R/P D/P N🅪Sg/I/VB P  NSg/J+ NSg/VB+ . VB/C VPt\n> picking them     up         again as    quickly as    she  could   , for   the accident of the goldfish\n# Nᴹ/Vg/J NSg/IPl+ NSg/VB/J/P P     R/C/P R       R/C/P ISg+ NSg/VXB . R/C/P D   NSg/J    P  D   NSgPl\n> kept running   in        her     head      , and  she  had a   vague    sort   of idea that          they must    be\n# VP   Nᴹ/Vg/J/P NPr/J/R/P ISg/D$+ NPr/VB/J+ . VB/C ISg+ VP  D/P NSg/VB/J NSg/VB P  NSg+ NSg/I/C/Ddem+ IPl+ NSg/VXB NSg/VLXB\n> collected at    once  and  put     back     into the jury      - box     , or    they would die    .\n# VP/J      NSg/P NSg/C VB/C NSg/VBP NSg/VB/J P    D   NSg/VB/J+ . NSg/VB+ . NPr/C IPl+ VXB   NSg/VB .\n>\n#\n> “ The trial     cannot  proceed , ” said the King      in        a   very grave     voice   , “ until all          the\n# . D+  NSg/VB/J+ NSg/VXB VB      . . VP/J D   NPr/VB/J+ NPr/J/R/P D/P J/R  NSg/VB/J+ NSg/VB+ . . C/P   NSg/I/J/C/Dq D\n> jurymen are back     in        their proper places  — all          , ” he       repeated with great emphasis ,\n# NPl     VLB NSg/VB/J NPr/J/R/P D$+   NSg/J  NPl/V3+ . NSg/I/J/C/Dq . . NPr/ISg+ VP/J     P    NSg/J NSg+     .\n> looking hard     at    Alice as    he       said so          .\n# Nᴹ/Vg/J N🅪Sg/J/R NSg/P NPr+  R/C/P NPr/ISg+ VP/J NSg/I/J/R/C .\n>\n#\n> Alice looked at    the jury      - box     , and  saw     that          , in        her     haste   , she  had put     the Lizard\n# NPr+  VP/J   NSg/P D   NSg/VB/J+ . NSg/VB+ . VB/C NSg/VPt NSg/I/C/Ddem+ . NPr/J/R/P ISg/D$+ NSg/VB+ . ISg+ VP  NSg/VBP D   NSg\n> in        head      downwards , and  the poor     little     thing was  waving  its     tail      about in        a\n# NPr/J/R/P NPr/VB/J+ R         . VB/C D   NSg/VB/J NPr/I/J/Dq NSg+  VLPt Nᴹ/Vg/J ISg/D$+ NSg/VB/J+ J/P   NPr/J/R/P D/P\n> melancholy way    , being        quite unable   to move   . She  soon got it       out          again , and  put\n# NSg/J      NSg/J+ . N🅪Sg/VLg/J/C R     NSg/VB/J P  NSg/VB . ISg+ J/R  VP  NPr/ISg+ NSg/VB/J/R/P P     . VB/C NSg/VBP\n> it       right    ; “ not     that         it       signifies much         , ” she  said to herself ; “ I       should think  it\n# NPr/ISg+ NPr/VB/J . . NSg/R/C NSg/I/C/Ddem NPr/ISg+ V3        NSg/I/J/R/Dq . . ISg+ VP/J P  ISg+    . . ISg/#r+ VXB    NSg/VB NPr/ISg+\n> would be       quite as    much         use     in        the trial     one      way    up         as    the other    . ”\n# VXB   NSg/VLXB R     R/C/P NSg/I/J/R/Dq N🅪Sg/VB NPr/J/R/P D+  NSg/VB/J+ NSg/I/J+ NSg/J+ NSg/VB/J/P R/C/P D   NSg/VB/J . .\n>\n#\n> As    soon as    the jury      had a   little     recovered from the shock  of being        upset    , and\n# R/C/P J/R  R/C/P D+  NSg/VB/J+ VP  D/P NPr/I/J/Dq VP/J+     P    D   N🅪Sg/J P  N🅪Sg/VLg/J/C NSg/VB/J . VB/C\n> their slates and  pencils had been     found  and  handed back     to them     , they set       to\n# D$+   NPl/V3 VB/C NPl/V3+ VP  NSg/VLPp NSg/VP VB/C VP/J   NSg/VB/J P  NSg/IPl+ . IPl+ NPr/VBP/J P\n> work    very diligently to write  out          a   history of the accident , all          except the\n# N🅪Sg/VB J/R  R          P  NSg/VB NSg/VB/J/R/P D/P N🅪Sg    P  D   NSg/J+   . NSg/I/J/C/Dq VB/C/P D\n> Lizard , who    seemed too much         overcome to do  anything  but     sit    with its     mouth   open     ,\n# NSg    . NPr/I+ VP/J   R   NSg/I/J/R/Dq VB       P  VXB NSg/I/VB+ NSg/C/P NSg/VB P    ISg/D$+ NSg/VB+ NSg/VB/J .\n> gazing  up         into the roof   of the court      .\n# Nᴹ/Vg/J NSg/VB/J/P P    D   NSg/VB P  D   N🅪Sg/VB/J+ .\n>\n#\n> “ What   do  you    know about this    business ? ” the King      said to Alice .\n# . NSg/I+ VXB ISgPl+ VB   J/P   I/Ddem+ N🅪Sg/J+  . . D+  NPr/VB/J+ VP/J P  NPr+  .\n>\n#\n> “ Nothing  , ” said Alice .\n# . NSg/I/J+ . . VP/J NPr+  .\n>\n#\n> “ Nothing  whatever ? ” persisted the King      .\n# . NSg/I/J+ NSg/I/J+ . . VP/J      D+  NPr/VB/J+ .\n>\n#\n> “ Nothing  whatever , ” said Alice .\n# . NSg/I/J+ NSg/I/J+ . . VP/J NPr+  .\n>\n#\n> “ That’s very important , ” the King      said , turning to the jury      . They were     just\n# . NSg$   J/R  J         . . D   NPr/VB/J+ VP/J . Nᴹ/Vg/J P  D   NSg/VB/J+ . IPl+ NSg/VLPt J/R\n> beginning to write  this   down        on  their slates , when    the White       Rabbit  interrupted :\n# NSg/Vg/J  P  NSg/VB I/Ddem N🅪Sg/VB/J/P J/P D$+   NPl/V3 . NSg/I/C D   NPr🅪Sg/VB/J NSg/VB+ VP/J        .\n> “ Unimportant , your Majesty means  , of course  , ” he       said in        a   very respectful tone       ,\n# . J           . D$+  N🅪Sg/I+ NPl/V3 . P  NSg/VB+ . . NPr/ISg+ VP/J NPr/J/R/P D/P J/R  J          N🅪Sg/I/VB+ .\n> but     frowning and  making  faces   at    him  as    he       spoke   .\n# NSg/C/P Nᴹ/Vg/J  VB/C Nᴹ/Vg/J NPl/V3+ NSg/P ISg+ R/C/P NPr/ISg+ NSg/VPt .\n>\n#\n> “ Unimportant , of course  , I       meant , ” the King      hastily said , and  went    on  to himself\n# . J           . P  NSg/VB+ . ISg/#r+ VP    . . D+  NPr/VB/J+ R       VP/J . VB/C NSg/VPt J/P P  ISg+\n> in        an  undertone ,\n# NPr/J/R/P D/P NSg/VB    .\n>\n#\n> “ important — unimportant — unimportant — important — ” as    if    he       were     trying  which word\n# . J         . J           . J           . J         . . R/C/P NSg/C NPr/ISg+ NSg/VLPt Nᴹ/Vg/J I/C+  NSg/VB+\n> sounded best       .\n# VP/J    NPr/VXB/JS .\n>\n#\n> Some     of the jury      wrote it       down        “ important , ” and  some     “ unimportant . ” Alice could\n# I/J/R/Dq P  D+  NSg/VB/J+ VPt   NPr/ISg+ N🅪Sg/VB/J/P . J         . . VB/C I/J/R/Dq . J           . . NPr+  NSg/VXB\n> see    this    , as    she  was  near       enough to look   over    their slates ; “ but     it       doesn’t\n# NSg/VB I/Ddem+ . R/C/P ISg+ VLPt NSg/VB/J/P NSg/I  P  NSg/VB NSg/J/P D$+   NPl/V3 . . NSg/C/P NPr/ISg+ VX3\n> matter   a   bit      , ” she  thought to herself .\n# N🅪Sg/VB+ D/P NSg/VPt+ . . ISg+ N🅪Sg/VP P  ISg+    .\n>\n#\n> At    this    moment the King      , who    had been     for   some      time       busily writing in        his\n# NSg/P I/Ddem+ NSg+   D+  NPr/VB/J+ . NPr/I+ VP  NSg/VLPp R/C/P I/J/R/Dq+ N🅪Sg/VB/J+ R      Nᴹ/Vg/J NPr/J/R/P ISg/D$+\n> note    - book    , cackled out          “ Silence ! ” and  read    out          from his     book    , “ Rule    Forty - two .\n# NSg/VB+ . NSg/VB+ . VP/J    NSg/VB/J/R/P . NSg/VB+ . . VB/C NSg/VBP NSg/VB/J/R/P P    ISg/D$+ NSg/VB+ . . NSg/VB+ NSg/J . NSg .\n> All           persons more         than a    mile high       to leave  the court      . ”\n# NSg/I/J/C/Dq+ NPl/V3+ NPr/I/J/R/Dq C/P  D/P+ NSg+ NSg/VB/J/R P  NSg/VB D+  N🅪Sg/VB/J+ . .\n>\n#\n> Everybody looked at    Alice .\n# NSg/I+    VP/J   NSg/P NPr+  .\n>\n#\n> “ I’m not     a   mile high       , ” said Alice .\n# . K   NSg/R/C D/P NSg+ NSg/VB/J/R . . VP/J NPr+  .\n>\n#\n> “ You    are , ” said the King      .\n# . ISgPl+ VLB . . VP/J D+  NPr/VB/J+ .\n>\n#\n> “ Nearly two  miles  high       , ” added the Queen     .\n# . R      NSg+ NPrPl+ NSg/VB/J/R . . VP/J  D+  NPr/VB/J+ .\n>\n#\n> “ Well       , I       shan’t go       , at    any    rate    , ” said Alice : “ besides , that’s not     a   regular\n# . NSg/VB/J/R . ISg/#r+ VXB    NSg/VB/J . NSg/P I/R/Dq NSg/VB+ . . VP/J NPr+  . . R/P     . NSg$   NSg/R/C D/P NSg/J\n> rule    : you    invented it       just now       . ”\n# NSg/VB+ . ISgPl+ VP/J     NPr/ISg+ J/R  NSg/J/R/C . .\n>\n#\n> “ It’s the oldest rule    in        the book    , ” said the King      .\n# . K    D   JS     NSg/VB+ NPr/J/R/P D   NSg/VB+ . . VP/J D   NPr/VB/J+ .\n>\n#\n> “ Then      it       ought     to be       Number      One     , ” said Alice .\n# . NSg/J/R/C NPr/ISg+ NSg/I/VXB P  NSg/VLXB N🅪Sg/VB/JC+ NSg/I/J . . VP/J NPr+  .\n>\n#\n> The King      turned pale     , and  shut      his     note    - book    hastily . “ Consider your verdict , ”\n# D+  NPr/VB/J+ VP/J   NSg/VB/J . VB/C NSg/VBP/J ISg/D$+ NSg/VB+ . NSg/VB+ R       . . VB       D$+  NSg+    . .\n> he       said to the jury      , in        a   low        , trembling voice   .\n# NPr/ISg+ VP/J P  D+  NSg/VB/J+ . NPr/J/R/P D/P NSg/VB/J/R . Nᴹ/Vg/J   NSg/VB+ .\n>\n#\n> “ There’s more         evidence to come       yet      , please your Majesty , ” said the White       Rabbit  ,\n# . K       NPr/I/J/R/Dq Nᴹ/VB+   P  NSg/VBPp/P NSg/VB/C . VB     D$+  N🅪Sg/I+ . . VP/J D   NPr🅪Sg/VB/J NSg/VB+ .\n> jumping up         in        a   great hurry   ; “ this   paper      has just been     picked up         . ”\n# Nᴹ/Vg/J NSg/VB/J/P NPr/J/R/P D/P NSg/J NSg/VB+ . . I/Ddem N🅪Sg/VB/J+ V3  J/R  NSg/VLPp VP/J   NSg/VB/J/P . .\n>\n#\n> “ What’s in        it       ? ” said the Queen     .\n# . K      NPr/J/R/P NPr/ISg+ . . VP/J D+  NPr/VB/J+ .\n>\n#\n> “ I       haven’t opened it       yet      , ” said the White       Rabbit  , “ but     it       seems to be       a   letter  ,\n# . ISg/#r+ VXB     VP/J   NPr/ISg+ NSg/VB/C . . VP/J D   NPr🅪Sg/VB/J NSg/VB+ . . NSg/C/P NPr/ISg+ V3    P  NSg/VLXB D/P NSg/VB+ .\n> written by    the prisoner to — to somebody . ”\n# VPp/J   NSg/P D   NSg+     P  . P  NSg/I+   . .\n>\n#\n> “ It       must    have    been     that          , ” said the King      , “ unless it       was  written to nobody , which\n# . NPr/ISg+ NSg/VXB NSg/VXB NSg/VLPp NSg/I/C/Ddem+ . . VP/J D+  NPr/VB/J+ . . C      NPr/ISg+ VLPt VPp/J   P  NSg/I+ . I/C+\n> isn’t   usual , you    know . ”\n# NSg/VX3 NSg/J . ISgPl+ VB   . .\n>\n#\n> “ Who    is  it       directed to ? ” said one     of the jurymen .\n# . NPr/I+ VL3 NPr/ISg+ VP/J     P  . . VP/J NSg/I/J P  D   NPl     .\n>\n#\n> “ It       isn’t   directed at    all          , ” said the White       Rabbit  ; “ in        fact , there’s nothing\n# . NPr/ISg+ NSg/VX3 VP/J     NSg/P NSg/I/J/C/Dq . . VP/J D   NPr🅪Sg/VB/J NSg/VB+ . . NPr/J/R/P NSg+ . K       NSg/I/J+\n> written on  the outside   . ” He       unfolded the paper      as    he       spoke   , and  added “ It       isn’t\n# VPp/J   J/P D   Nᴹ/VB/J/P . . NPr/ISg+ VP/J     D+  N🅪Sg/VB/J+ R/C/P NPr/ISg+ NSg/VPt . VB/C VP/J  . NPr/ISg+ NSg/VX3\n> a    letter  , after all          : it’s a   set        of verses . ”\n# D/P+ NSg/VB+ . P     NSg/I/J/C/Dq . K    D/P NPr/VBP/J+ P  NPl/V3 . .\n>\n#\n> “ Are they in        the prisoner’s handwriting ? ” asked another of the jurymen .\n# . VLB IPl+ NPr/J/R/P D   NSg$       Nᴹ/VB       . . VP/J  I/D     P  D   NPl     .\n>\n#\n> “ No       , they’re not     , ” said the White       Rabbit  , “ and  that’s the queerest thing about\n# . NSg/Dq/P . K       NSg/R/C . . VP/J D   NPr🅪Sg/VB/J NSg/VB+ . . VB/C NSg$   D   JS       NSg+  J/P\n> it       . ” ( The jury      all          looked puzzled . )\n# NPr/ISg+ . . . D+  NSg/VB/J+ NSg/I/J/C/Dq VP/J   VP/J    . .\n>\n#\n> “ He       must    have    imitated somebody else’s hand    , ” said the King      . ( The jury      all\n# . NPr/ISg+ NSg/VXB NSg/VXB VP/J     NSg/I+   NSg$   NSg/VB+ . . VP/J D   NPr/VB/J+ . . D+  NSg/VB/J+ NSg/I/J/C/Dq\n> brightened up         again . )\n# VP/J       NSg/VB/J/P P     . .\n>\n#\n> “ Please your Majesty , ” said the Knave , “ I       didn’t write  it       , and  they can’t prove\n# . VB     D$+  N🅪Sg/I+ . . VP/J D   NSg   . . ISg/#r+ VXPt   NSg/VB NPr/ISg+ . VB/C IPl+ VXB   NSg/VB\n> I       did  : there’s no       name    signed at    the end     . ”\n# ISg/#r+ VXPt . K       NSg/Dq/P NSg/VB+ VP/J   NSg/P D   NSg/VB+ . .\n>\n#\n> “ If    you    didn’t sign    it       , ” said the King      , “ that          only  makes  the matter   worse     . You\n# . NSg/C ISgPl+ VXPt   NSg/VB+ NPr/ISg+ . . VP/J D   NPr/VB/J+ . . NSg/I/C/Ddem+ J/R/C NPl/V3 D   N🅪Sg/VB+ NSg/VB/JC . ISgPl+\n> must    have    meant some      mischief , or    else    you’d have    signed your name    like         an\n# NSg/VXB NSg/VXB VP    I/J/R/Dq+ NSg/VB+  . NPr/C NSg/J/C K     NSg/VXB VP/J   D$+  NSg/VB+ NSg/VB/J/C/P D/P\n> honest man       . ”\n# VB/JS  NPr/VB/J+ . .\n>\n#\n> There was  a   general  clapping of hands   at    this    : it       was  the first really clever\n# R+    VLPt D/P NSg/VB/J Nᴹ/Vg    P  NPl/V3+ NSg/P I/Ddem+ . NPr/ISg+ VLPt D   NSg/J R      J\n> thing the King      had said that         day     .\n# NSg+  D+  NPr/VB/J+ VP  VP/J NSg/I/C/Ddem NPr🅪Sg+ .\n>\n#\n> “ That          proves his     guilt   , ” said the Queen     .\n# . NSg/I/C/Ddem+ NPl/V3 ISg/D$+ NSg/VB+ . . VP/J D+  NPr/VB/J+ .\n>\n#\n> “ It       proves nothing of the sort    ! ” said Alice . “ Why    , you    don’t even       know what\n# . NPr/ISg+ NPl/V3 NSg/I/J P  D+  NSg/VB+ . . VP/J NPr+  . . NSg/VB . ISgPl+ VXB   NSg/VB/J/R VB   NSg/I+\n> they’re about ! ”\n# K       J/P   . .\n>\n#\n> “ Read    them     , ” said the King      .\n# . NSg/VBP NSg/IPl+ . . VP/J D+  NPr/VB/J+ .\n>\n#\n> The White        Rabbit  put     on  his     spectacles . “ Where   shall I       begin  , please your\n# D+  NPr🅪Sg/VB/J+ NSg/VB+ NSg/VBP J/P ISg/D$+ NPl        . . NSg/R/C VXB   ISg/#r+ NSg/VB . VB     D$+\n> Majesty ? ” he       asked .\n# N🅪Sg/I+ . . NPr/ISg+ VP/J  .\n>\n#\n> “ Begin  at    the beginning , ” the King      said gravely , “ and  go       on  till       you    come       to the\n# . NSg/VB NSg/P D+  NSg/Vg/J+ . . D+  NPr/VB/J+ VP/J R       . . VB/C NSg/VB/J J/P NSg/VB/C/P ISgPl+ NSg/VBPp/P P  D\n> end     : then      stop   . ”\n# NSg/VB+ . NSg/J/R/C NSg/VB . .\n>\n#\n> These   were     the verses the White       Rabbit  read    : —\n# I/Ddem+ NSg/VLPt D   NPl/V3 D   NPr🅪Sg/VB/J NSg/VB+ NSg/VBP . .\n>\n#\n> “ They told me       you    had been     to her     , And  mentioned me       to him  : She  gave me       a    good\n# . IPl+ VP   NPr/ISg+ ISgPl+ VP  NSg/VLPp P  ISg/D$+ . VB/C VP/J      NPr/ISg+ P  ISg+ . ISg+ VPt  NPr/ISg+ D/P+ NPr/VB/J+\n> character , But     said I       could   not     swim   .\n# N🅪Sg/VB+  . NSg/C/P VP/J ISg/#r+ NSg/VXB NSg/R/C NSg/VB .\n>\n#\n> He       sent   them     word    I       had not     gone    ( We   know it       to be       true     ) : If    she  should push\n# NPr/ISg+ NSg/VP NSg/IPl+ NSg/VB+ ISg/#r+ VP  NSg/R/C VPp/J/P . IPl+ VB   NPr/ISg+ P  NSg/VLXB NSg/VB/J . . NSg/C ISg+ VXB    NSg/VB\n> the matter   on  , What   would become of you    ?\n# D+  N🅪Sg/VB+ J/P . NSg/I+ VXB   VBPp   P  ISgPl+ .\n>\n#\n> I       gave her     one     , they gave him  two , You    gave us       three or    more         ; They all\n# ISg/#r+ VPt  ISg/D$+ NSg/I/J . IPl+ VPt  ISg+ NSg . ISgPl+ VPt  NPr/IPl+ NSg   NPr/C NPr/I/J/R/Dq . IPl+ NSg/I/J/C/Dq\n> returned from him  to you    , Though they were     mine      before .\n# VP/J+    P    ISg+ P  ISgPl+ . C      IPl+ NSg/VLPt NSg/I/VB+ C/P    .\n>\n#\n> If    I       or    she  should chance    to be       Involved in        this    affair , He       trusts to you    to\n# NSg/C ISg/#r+ NPr/C ISg+ VXB    NPr/VB/J+ P  NSg/VLXB VP/J     NPr/J/R/P I/Ddem+ NSg+   . NPr/ISg+ NPl/V3 P  ISgPl+ P\n> set       them     free     , Exactly as    we   were     .\n# NPr/VBP/J NSg/IPl+ NSg/VB/J . R       R/C/P IPl+ NSg/VLPt .\n>\n#\n> My  notion was  that         you    had been     ( Before she  had this    fit        ) An   obstacle that\n# D$+ NSg+   VLPt NSg/I/C/Ddem ISgPl+ VP  NSg/VLPp . C/P    ISg+ VP  I/Ddem+ NSg/VBP/J+ . D/P+ NSg+     NSg/I/C/Ddem+\n> came      between Him  , and  ourselves , and  it       .\n# NSg/VPt/P NSg/P   ISg+ . VB/C IPl+      . VB/C NPr/ISg+ .\n>\n#\n> Don’t let     him  know she  liked them     best       , For   this    must    ever be       A   secret   , kept\n# VXB   NSg/VBP ISg+ VB   ISg+ VP/J  NSg/IPl+ NPr/VXB/JS . R/C/P I/Ddem+ NSg/VXB J/R  NSg/VLXB D/P NSg/VB/J . VP\n> from all          the rest    , Between yourself and  me       . ”\n# P    NSg/I/J/C/Dq D   NSg/VB+ . NSg/P   ISg+     VB/C NPr/ISg+ . .\n>\n#\n> “ That’s the most         important piece  of evidence we’ve heard yet      , ” said the King      ,\n# . NSg$   D   NSg/I/J/R/Dq J         NSg/VB P  Nᴹ/VB+   K     VP/J  NSg/VB/C . . VP/J D   NPr/VB/J+ .\n> rubbing his     hands   ; “ so          now       let     the jury      — ”\n# NSg/Vg  ISg/D$+ NPl/V3+ . . NSg/I/J/R/C NSg/J/R/C NSg/VBP D   NSg/VB/J+ . .\n>\n#\n> “ If    any    one     of them     can     explain it       , ” said Alice , ( she  had grown so          large in        the\n# . NSg/C I/R/Dq NSg/I/J P  NSg/IPl+ NPr/VXB VB      NPr/ISg+ . . VP/J NPr+  . . ISg+ VP  VB/J  NSg/I/J/R/C NSg/J NPr/J/R/P D+\n> last      few       minutes that          she  wasn’t a   bit      afraid of interrupting him  , ) “ I’ll give\n# NSg/VB/J+ NSg/I/Dq+ NPl/V3+ NSg/I/C/Ddem+ ISg+ VPt    D/P NSg/VPt+ J      P  Nᴹ/Vg/J      ISg+ . . . K    NSg/VB\n> him  sixpence . I       don’t believe there’s an  atom of meaning    in        it       . ”\n# ISg+ NSg      . ISg/#r+ VXB   VB      K       D/P NSg  P  N🅪Sg/Vg/J+ NPr/J/R/P NPr/ISg+ . .\n>\n#\n> The jury      all          wrote down        on  their slates , “ She  doesn’t believe there’s an  atom of\n# D+  NSg/VB/J+ NSg/I/J/C/Dq VPt   N🅪Sg/VB/J/P J/P D$+   NPl/V3 . . ISg+ VX3     VB      K       D/P NSg  P\n> meaning    in        it       , ” but     none  of them     attempted to explain the paper      .\n# N🅪Sg/Vg/J+ NPr/J/R/P NPr/ISg+ . . NSg/C/P NSg/I P  NSg/IPl+ VP/J      P  VB      D   N🅪Sg/VB/J+ .\n>\n#\n> “ If    there’s no       meaning    in        it       , ” said the King      , “ that          saves  a   world  of trouble  ,\n# . NSg/C K       NSg/Dq/P N🅪Sg/Vg/J+ NPr/J/R/P NPr/ISg+ . . VP/J D   NPr/VB/J+ . . NSg/I/C/Ddem+ NPl/V3 D/P NSg/VB P  N🅪Sg/VB+ .\n> you    know , as    we   needn’t try      to find   any    . And  yet      I       don’t know , ” he       went    on  ,\n# ISgPl+ VB   . R/C/P IPl+ VXB     NSg/VB/J P  NSg/VB I/R/Dq . VB/C NSg/VB/C ISg/#r+ VXB   VB   . . NPr/ISg+ NSg/VPt J/P .\n> spreading out          the verses on  his     knee    , and  looking at    them     with one     eye     ; “ I       seem\n# Nᴹ/Vg/J   NSg/VB/J/R/P D   NPl/V3 J/P ISg/D$+ NSg/VB+ . VB/C Nᴹ/Vg/J NSg/P NSg/IPl+ P    NSg/I/J NSg/VB+ . . ISg/#r+ VB\n> to see    some     meaning    in        them     , after all          . “ — said I       could   not     swim   — ” you    can’t\n# P  NSg/VB I/J/R/Dq N🅪Sg/Vg/J+ NPr/J/R/P NSg/IPl+ . P     NSg/I/J/C/Dq . . . VP/J ISg/#r+ NSg/VXB NSg/R/C NSg/VB . . ISgPl+ VXB\n> swim   , can     you    ? ” he       added , turning to the Knave .\n# NSg/VB . NPr/VXB ISgPl+ . . NPr/ISg+ VP/J  . Nᴹ/Vg/J P  D   NSg   .\n>\n#\n> The Knave shook     his     head      sadly . “ Do  I       look   like         it       ? ” he       said . ( Which he\n# D   NSg   NSg/VPt/J ISg/D$+ NPr/VB/J+ R     . . VXB ISg/#r+ NSg/VB NSg/VB/J/C/P NPr/ISg+ . . NPr/ISg+ VP/J . . I/C+  NPr/ISg+\n> certainly did  not     , being        made entirely of cardboard . )\n# R         VXPt NSg/R/C . N🅪Sg/VLg/J/C VP   R        P  Nᴹ/J+     . .\n>\n#\n> “ All          right    , so          far      , ” said the King      , and  he       went    on  muttering over    the verses to\n# . NSg/I/J/C/Dq NPr/VB/J . NSg/I/J/R/C NSg/VB/J . . VP/J D+  NPr/VB/J+ . VB/C NPr/ISg+ NSg/VPt J/P Nᴹ/Vg/J   NSg/J/P D   NPl/V3 P\n> himself : “ ‘          We   know it       to be       true     — ’ that’s the jury      , of course  — ‘          I       gave her     one     ,\n# ISg+    . . Unlintable IPl+ VB   NPr/ISg+ P  NSg/VLXB NSg/VB/J . . NSg$   D   NSg/VB/J+ . P  NSg/VB+ . Unlintable ISg/#r+ VPt  ISg/D$+ NSg/I/J .\n> they gave him  two — ’ why    , that          must    be       what   he       did  with the tarts  , you    know — ”\n# IPl+ VPt  ISg+ NSg . . NSg/VB . NSg/I/C/Ddem+ NSg/VXB NSg/VLXB NSg/I+ NPr/ISg+ VXPt P    D   NPl/V3 . ISgPl+ VB   . .\n>\n#\n> “ But     , it       goes   on  ‘          they all          returned from him  to you    , ’ ” said Alice .\n# . NSg/C/P . NPr/ISg+ NPl/V3 J/P Unlintable IPl+ NSg/I/J/C/Dq VP/J+    P    ISg+ P  ISgPl+ . . . VP/J NPr+  .\n>\n#\n> “ Why    , there they are ! ” said the King      triumphantly , pointing to the tarts  on  the\n# . NSg/VB . R+    IPl+ VLB . . VP/J D+  NPr/VB/J+ R            . Nᴹ/Vg/J  P  D   NPl/V3 J/P D\n> table   . “ Nothing  can     be       clearer than that          . Then      again — ‘          before she  had this    fit        — ’\n# NSg/VB+ . . NSg/I/J+ NPr/VXB NSg/VLXB NSg/JC  C/P  NSg/I/C/Ddem+ . NSg/J/R/C P     . Unlintable C/P    ISg+ VP  I/Ddem+ NSg/VBP/J+ . .\n> you    never had fits   , my  dear     , I       think  ? ” he       said to the Queen     .\n# ISgPl+ R     VP  NPl/V3 . D$+ NSg/VB/J . ISg/#r+ NSg/VB . . NPr/ISg+ VP/J P  D+  NPr/VB/J+ .\n>\n#\n> “ Never ! ” said the Queen     furiously , throwing an  inkstand at    the Lizard as    she\n# . R     . . VP/J D+  NPr/VB/J+ R         . Nᴹ/Vg/J  D/P NSg      NSg/P D   NSg    R/C/P ISg+\n> spoke   . ( The unfortunate little      Bill    had left     off        writing on  his     slate     with one\n# NSg/VPt . . D+  NSg/J+      NPr/I/J/Dq+ NPr/VB+ VP  NPr/VP/J NSg/VB/J/P Nᴹ/Vg/J J/P ISg/D$+ NSg/VB/J+ P    NSg/I/J+\n> finger  , as    he       found  it       made no        mark    ; but     he       now       hastily began again , using   the\n# NSg/VB+ . R/C/P NPr/ISg+ NSg/VP NPr/ISg+ VP   NSg/Dq/P+ NPr/VB+ . NSg/C/P NPr/ISg+ NSg/J/R/C R       VPt   P     . Nᴹ/Vg/J D+\n> ink      , that          was  trickling down        his     face    , as    long     as    it       lasted . )\n# N🅪Sg/VB+ . NSg/I/C/Ddem+ VLPt Nᴹ/Vg/J   N🅪Sg/VB/J/P ISg/D$+ NSg/VB+ . R/C/P NPr/VB/J R/C/P NPr/ISg+ VP/J   . .\n>\n#\n> “ Then      the words   don’t fit       you    , ” said the King      , looking round      the court      with a\n# . NSg/J/R/C D+  NPl/V3+ VXB   NSg/VBP/J ISgPl+ . . VP/J D   NPr/VB/J+ . Nᴹ/Vg/J NSg/VB/J/P D   N🅪Sg/VB/J+ P    D/P\n> smile   . There was  a    dead      silence .\n# NSg/VB+ . R+    VLPt D/P+ NSg/VB/J+ NSg/VB+ .\n>\n#\n> “ It’s a    pun     ! ” the King      added in        an   offended tone       , and  everybody laughed , “ Let\n# . K    D/P+ NSg/VB+ . . D+  NPr/VB/J+ VP/J  NPr/J/R/P D/P+ VP/J     N🅪Sg/I/VB+ . VB/C NSg/I+    VP/J    . . NSg/VBP\n> the jury      consider their verdict , ” the King      said , for   about the twentieth time\n# D+  NSg/VB/J+ VB       D$+   NSg+    . . D+  NPr/VB/J+ VP/J . R/C/P J/P   D+  NSg/J+    N🅪Sg/VB/J+\n> that          day     .\n# NSg/I/C/Ddem+ NPr🅪Sg+ .\n>\n#\n> “ No       , no       ! ” said the Queen     . “ Sentence first — verdict afterwards . ”\n# . NSg/Dq/P . NSg/Dq/P . . VP/J D+  NPr/VB/J+ . . NSg/VB+  NSg/J . NSg+    R/Comm     . .\n>\n#\n> “ Stuff and  nonsense ! ” said Alice loudly . “ The idea of having  the sentence\n# . Nᴹ/VB VB/C Nᴹ/VB/J+ . . VP/J NPr+  R      . . D   NSg  P  Nᴹ/Vg/J D+  NSg/VB+\n> first ! ”\n# NSg/J . .\n>\n#\n> “ Hold     your tongue   ! ” said the Queen     , turning purple    .\n# . NSg/VB/J D$+  N🅪Sg/VB+ . . VP/J D+  NPr/VB/J+ . Nᴹ/Vg/J N🅪Sg/VB/J .\n>\n#\n> “ I       won’t ! ” said Alice .\n# . ISg/#r+ VXB   . . VP/J NPr+  .\n>\n#\n> “ Off        with her     head      ! ” the Queen     shouted at    the top      of her     voice   . Nobody moved .\n# . NSg/VB/J/P P    ISg/D$+ NPr/VB/J+ . . D+  NPr/VB/J+ VP/J    NSg/P D   NSg/VB/J P  ISg/D$+ NSg/VB+ . NSg/I+ VP/J  .\n>\n#\n> “ Who    cares  for   you    ? ” said Alice , ( she  had grown to her     full      size     by    this    time       . )\n# . NPr/I+ NPl/V3 R/C/P ISgPl+ . . VP/J NPr+  . . ISg+ VP  VB/J  P  ISg/D$+ NSg/VB/J+ N🅪Sg/VB+ NSg/P I/Ddem+ N🅪Sg/VB/J+ . .\n> “ You’re nothing  but     a   pack   of cards   ! ”\n# . K      NSg/I/J+ NSg/C/P D/P NSg/VB P  NPl/V3+ . .\n>\n#\n> At    this    the whole  pack    rose      up         into the air      , and  came      flying  down        upon her     : she\n# NSg/P I/Ddem+ D+  NSg/J+ NSg/VB+ NPr/VPt/J NSg/VB/J/P P    D+  N🅪Sg/VB+ . VB/C NSg/VPt/P Nᴹ/Vg/J N🅪Sg/VB/J/P P    ISg/D$+ . ISg+\n> gave a    little      scream  , half     of fright   and  half     of anger  , and  tried to beat      them\n# VPt  D/P+ NPr/I/J/Dq+ NSg/VB+ . N🅪Sg/J/P P  NSg/VB/J VB/C N🅪Sg/J/P P  Nᴹ/VB+ . VB/C VP/J  P  N🅪Sg/VB/J NSg/IPl+\n> off        , and  found  herself lying   on  the bank    , with her     head      in        the lap      of her\n# NSg/VB/J/P . VB/C NSg/VP ISg+    Nᴹ/Vg/J J/P D   NSg/VB+ . P    ISg/D$+ NPr/VB/J+ NPr/J/R/P D   NSg/VB/J P  ISg/D$+\n> sister  , who    was  gently brushing away some     dead     leaves  that          had fluttered down\n# NSg/VB+ . NPr/I+ VLPt R      Nᴹ/Vg/J  VB/J I/J/R/Dq NSg/VB/J NPl/V3+ NSg/I/C/Ddem+ VP  VP/J      N🅪Sg/VB/J/P\n> from the trees   upon her     face    .\n# P    D   NPl/V3+ P    ISg/D$+ NSg/VB+ .\n>\n#\n> “ Wake   up         , Alice dear     ! ” said her     sister  ; “ Why    , what   a    long      sleep    you’ve had ! ”\n# . NPr/VB NSg/VB/J/P . NPr+  NSg/VB/J . . VP/J ISg/D$+ NSg/VB+ . . NSg/VB . NSg/I+ D/P+ NPr/VB/J+ N🅪Sg/VB+ K      VP  . .\n>\n#\n> “ Oh     , I’ve had such  a   curious dream     ! ” said Alice , and  she  told her     sister  , as\n# . NPr/VB . K    VP  NSg/I D/P J       NSg/VB/J+ . . VP/J NPr+  . VB/C ISg+ VP   ISg/D$+ NSg/VB+ . R/C/P\n> well       as    she  could   remember them     , all          these  strange  Adventures of hers that         you\n# NSg/VB/J/R R/C/P ISg+ NSg/VXB NSg/VB   NSg/IPl+ . NSg/I/J/C/Dq I/Ddem NSg/VB/J NPl/V3     P  ISg+ NSg/I/C/Ddem ISgPl+\n> have    just been     reading   about ; and  when    she  had finished , her     sister  kissed her     ,\n# NSg/VXB J/R  NSg/VLPp NPrᴹ/Vg/J J/P   . VB/C NSg/I/C ISg+ VP  VP/J     . ISg/D$+ NSg/VB+ VP/J   ISg/D$+ .\n> and  said , “ It       was  a   curious dream    , dear     , certainly : but     now       run      in        to your tea      ;\n# VB/C VP/J . . NPr/ISg+ VLPt D/P J       NSg/VB/J . NSg/VB/J . R         . NSg/C/P NSg/J/R/C NSg/VBPp NPr/J/R/P P  D$+  N🅪Sg/VB+ .\n> it’s getting late  . ” So          Alice got up         and  ran     off        , thinking while      she  ran     , as    well\n# K    NSg/Vg  NSg/J . . NSg/I/J/R/C NPr+  VP  NSg/VB/J/P VB/C NSg/VPt NSg/VB/J/P . Nᴹ/Vg/J  NSg/VB/C/P ISg+ NSg/VPt . R/C/P NSg/VB/J/R\n> she  might    , what   a    wonderful dream     it       had been     .\n# ISg+ Nᴹ/VXB/J . NSg/I+ D/P+ J+        NSg/VB/J+ NPr/ISg+ VP  NSg/VLPp .\n>\n#\n> But     her     sister  sat      still      just as    she  left     her     , leaning her     head      on  her     hand    ,\n# NSg/C/P ISg/D$+ NSg/VB+ NSg/VP/J NSg/VB/J/R J/R  R/C/P ISg+ NPr/VP/J ISg/D$+ . Nᴹ/Vg/J ISg/D$+ NPr/VB/J+ J/P ISg/D$+ NSg/VB+ .\n> watching the setting    sun     , and  thinking of little      Alice and  all           her     wonderful\n# Nᴹ/Vg/J  D+  N🅪Sg/Vg/J+ NPr/VB+ . VB/C Nᴹ/Vg/J  P  NPr/I/J/Dq+ NPr+  VB/C NSg/I/J/C/Dq+ ISg/D$+ J+\n> Adventures , till       she  too began dreaming after a    fashion  , and  this    was  her\n# NPl/V3+    . NSg/VB/C/P ISg+ R   VPt   Nᴹ/Vg/J+ P     D/P+ N🅪Sg/VB+ . VB/C I/Ddem+ VLPt ISg/D$+\n> dream     : —\n# NSg/VB/J+ . .\n>\n#\n> First , she  dreamed      of little      Alice herself , and  once  again the tiny   hands   were\n# NSg/J . ISg+ VP/J/NoAm/Au P  NPr/I/J/Dq+ NPr+  ISg+    . VB/C NSg/C P     D+  NSg/J+ NPl/V3+ NSg/VLPt\n> clasped upon her     knee    , and  the bright   eager    eyes    were     looking up         into hers — she\n# VP/J    P    ISg/D$+ NSg/VB+ . VB/C D   NPr/VB/J NSg/VB/J NPl/V3+ NSg/VLPt Nᴹ/Vg/J NSg/VB/J/P P    ISg+ . ISg+\n> could   hear the very tones  of her     voice   , and  see    that         queer    little     toss   of her\n# NSg/VXB VB   D   J/R  NPl/V3 P  ISg/D$+ NSg/VB+ . VB/C NSg/VB NSg/I/C/Ddem NSg/VB/J NPr/I/J/Dq NSg/VB P  ISg/D$+\n> head      to keep   back     the wandering hair     that          would always get    into her     eyes    — and\n# NPr/VB/J+ P  NSg/VB NSg/VB/J D   Nᴹ/Vg/J   N🅪Sg/VB+ NSg/I/C/Ddem+ VXB   R      NSg/VB P    ISg/D$+ NPl/V3+ . VB/C\n> still      as    she  listened , or    seemed to listen , the whole place    around her     became\n# NSg/VB/J/R R/C/P ISg+ VP/J     . NPr/C VP/J   P  NSg/VB . D   NSg/J N🅪Sg/VB+ J/P    ISg/D$+ VPt\n> alive with the strange  creatures of her     little     sister’s dream     .\n# J     P    D   NSg/VB/J NPl       P  ISg/D$+ NPr/I/J/Dq NSg$     NSg/VB/J+ .\n>\n#\n> The long      grass      rustled at    her     feet as    the White       Rabbit  hurried by    — the frightened\n# D+  NPr/VB/J+ NPr🅪Sg/VB+ VP/J    NSg/P ISg/D$+ NPl+ R/C/P D   NPr🅪Sg/VB/J NSg/VB+ VP/J    NSg/P . D   VP/J\n> Mouse   splashed his     way    through the neighbouring pool    — she  could   hear the rattle\n# NSg/VB+ VP/J     ISg/D$+ NSg/J+ NSg/J/P D   Nᴹ/Vg/J/Comm NSg/VB+ . ISg+ NSg/VXB VB   D   NSg/VB\n> of the teacups as    the March   Hare      and  his     friends   shared their never - ending  meal    ,\n# P  D   NPl     R/C/P D   NPr/VB+ NSg/VB/J+ VB/C ISg/D$+ NPrPl/V3+ VP/J   D$+   R     . Nᴹ/Vg/J NSg/VB+ .\n> and  the shrill   voice  of the Queen     ordering off        her     unfortunate guests  to\n# VB/C D   NSg/VB/J NSg/VB P  D   NPr/VB/J+ Nᴹ/Vg/J+ NSg/VB/J/P ISg/D$+ NSg/J       NPl/V3+ P\n> execution — once  more         the pig     - baby      was  sneezing on  the Duchess’s knee    , while\n# N🅪Sg      . NSg/C NPr/I/J/R/Dq D   NSg/VB+ . NSg/VB/J+ VLPt Nᴹ/Vg/J  J/P D   NSg$      NSg/VB+ . NSg/VB/C/P\n> plates and  dishes  crashed around it       — once  more         the shriek of the Gryphon , the\n# NPl/V3 VB/C NPl/V3+ VP/J    J/P    NPr/ISg+ . NSg/C NPr/I/J/R/Dq D   NSg/VB P  D   ?       . D\n> squeaking of the Lizard’s slate     - pencil  , and  the choking of the suppressed\n# Nᴹ/Vg/J   P  D   NSg$     NSg/VB/J+ . NSg/VB+ . VB/C D   Nᴹ/Vg/J P  D   VP/J\n> guinea - pigs    , filled the air      , mixed up         with the distant sobs   of the miserable\n# NPr+   . NPl/V3+ . VP/J   D   N🅪Sg/VB+ . VP/J  NSg/VB/J/P P    D   J       NPl/V3 P  D   J\n> Mock     Turtle  .\n# NSg/VB/J NSg/VB+ .\n>\n#\n> So          she  sat      on  , with closed eyes    , and  half      believed herself in        Wonderland , though\n# NSg/I/J/R/C ISg+ NSg/VP/J J/P . P    VP/J   NPl/V3+ . VB/C N🅪Sg/J/P+ VP/J     ISg+    NPr/J/R/P NSg+       . C\n> she  knew she  had but     to open     them     again , and  all          would change  to dull\n# ISg+ VPt  ISg+ VP  NSg/C/P P  NSg/VB/J NSg/IPl+ P     . VB/C NSg/I/J/C/Dq VXB   N🅪Sg/VB P  VB/J+\n> reality — the grass      would be       only  rustling in        the wind     , and  the pool    rippling to\n# N🅪Sg+   . D+  NPr🅪Sg/VB+ VXB   NSg/VLXB J/R/C Nᴹ/Vg/J  NPr/J/R/P D   N🅪Sg/VB+ . VB/C D   NSg/VB+ Nᴹ/Vg/J  P\n> the waving  of the reeds — the rattling teacups would change   to tinkling\n# D   Nᴹ/Vg/J P  D   NPl+  . D   Nᴹ/Vg/J  NPl     VXB   N🅪Sg/VB+ P  Nᴹ/Vg/J\n> sheep  - bells  , and  the Queen’s shrill   cries  to the voice  of the shepherd boy     — and\n# NSgPl+ . NPl/V3 . VB/C D   NPr$    NSg/VB/J NPl/V3 P  D   NSg/VB P  D   NPr/VB+  NSg/VB+ . VB/C\n> the sneeze of the baby      , the shriek of the Gryphon , and  all          the other    queer\n# D   NSg/VB P  D   NSg/VB/J+ . D   NSg/VB P  D   ?       . VB/C NSg/I/J/C/Dq D   NSg/VB/J NSg/VB/J\n> noises  , would change   ( she  knew ) to the confused clamour     of the busy\n# NPl/V3+ . VXB   N🅪Sg/VB+ . ISg+ VPt  . P  D   VP/J     NSg/VB/Comm P  D   NSg/VB/J\n> farm    - yard    — while      the lowing  of the cattle in        the distance would take   the place    of\n# NSg/VB+ . NSg/VB+ . NSg/VB/C/P D   Nᴹ/Vg/J P  D   Nᴹ/VB+ NPr/J/R/P D   N🅪Sg/VB+ VXB   NSg/VB D   N🅪Sg/VB+ P\n> the Mock     Turtle’s heavy    sobs   .\n# D   NSg/VB/J NSg$     NSg/VB/J NPl/V3 .\n>\n#\n> Lastly , she  pictured to herself how   this   same little     sister of hers would , in\n# R      . ISg+ VP/J     P  ISg+    NSg/C I/Ddem I/J  NPr/I/J/Dq NSg/VB P  ISg+ VXB   . NPr/J/R/P\n> the after - time       , be       herself a   grown woman   ; and  how   she  would keep   , through all\n# D   P     . N🅪Sg/VB/J+ . NSg/VLXB ISg+    D/P VB/J  NSg/VB+ . VB/C NSg/C ISg+ VXB   NSg/VB . NSg/J/P NSg/I/J/C/Dq\n> her     riper years , the simple   and  loving  heart   of her     childhood : and  how   she  would\n# ISg/D$+ NSg   NPl+  . D   NSg/VB/J VB/C Nᴹ/Vg/J N🅪Sg/VB P  ISg/D$+ NSg+      . VB/C NSg/C ISg+ VXB\n> gather about her     other    little     children , and  make   their eyes    bright   and  eager\n# NSg/VB J/P   ISg/D$+ NSg/VB/J NPr/I/J/Dq NPl+     . VB/C NSg/VB D$+   NPl/V3+ NPr/VB/J VB/C NSg/VB/J\n> with many       a   strange  tale    , perhaps even       with the dream    of Wonderland of long     ago :\n# P    NSg/I/J/Dq D/P NSg/VB/J NSg/VB+ . NSg/R   NSg/VB/J/R P    D   NSg/VB/J P  NSg+       P  NPr/VB/J J/P .\n> and  how   she  would feel     with all          their simple   sorrows , and  find   a   pleasure in        all\n# VB/C NSg/C ISg+ VXB   NSg/I/VB P    NSg/I/J/C/Dq D$+   NSg/VB/J NPl/V3+ . VB/C NSg/VB D/P NSg/VB+  NPr/J/R/P NSg/I/J/C/Dq\n> their simple   joys    , remembering her     own      child   - life     , and  the happy    summer     days .\n# D$+   NSg/VB/J NPl/V3+ . Nᴹ/Vg/J     ISg/D$+ NSg/VB/J NSg/VB+ . N🅪Sg/VB+ . VB/C D   NSg/VB/J NPr🅪Sg/VB+ NPl+ .\n>\n#\n> THE END\n# D+  NSg/VB+\n"
  },
  {
    "path": "harper-core/tests/text/tagged/Computer science.md",
    "content": "> <!--\n# Unlintable\n>            source: https://en.wikipedia.org/w/index.php?title=Computer_science&oldid=1286173304\n# Unlintable Unlintable\n>            license: CC BY-SA 4.0\n# Unlintable Unlintable\n>            -->\n# Unlintable Unlintable\n>                         Computer science\n# Unlintable HeadingStart NSg+     N🅪Sg/VB+\n>\n#\n> Computer science  is  the study  of computation , information , and  automation .\n# NSg+     N🅪Sg/VB+ VL3 D   NSg/VB P  NSg         . Nᴹ+         . VB/C N🅪Sg       .\n> Computer science  spans  theoretical disciplines ( such  as    algorithms , theory of\n# NSg+     N🅪Sg/VB+ NPl/V3 J           NPl/V3+     . NSg/I R/C/P NPl+       . N🅪Sg   P\n> computation , and  information theory ) to applied disciplines ( including the\n# NSg         . VB/C Nᴹ+         N🅪Sg+  . P  VP/J    NPl/V3+     . Nᴹ/Vg/J   D\n> design   and  implementation of hardware and  software ) .\n# N🅪Sg/VB+ VB/C N🅪Sg           P  Nᴹ       VB/C Nᴹ+      . .\n>\n#\n> Algorithms and  data  structures are central to computer science  . The theory of\n# NPl        VB/C N🅪Pl+ NPl/V3+    VLB NPr/J   P  NSg      N🅪Sg/VB+ . D   N🅪Sg   P\n> computation concerns abstract models of computation and  general  classes of\n# NSg         NPl/V3+  NSg/VB/J NPl/V3 P  NSg         VB/C NSg/VB/J NPl/V3  P\n> problems that          can     be       solved using   them     . The fields   of cryptography and  computer\n# NPl+     NSg/I/C/Ddem+ NPr/VXB NSg/VLXB VP/J   Nᴹ/Vg/J NSg/IPl+ . D   NPrPl/V3 P  Nᴹ           VB/C NSg+\n> security involve studying the means  for   secure communication and  preventing\n# Nᴹ+      VB      Nᴹ/Vg/J  D   NPl/V3 R/C/P VB/J   N🅪Sg+         VB/C Nᴹ/Vg/J\n> security vulnerabilities . Computer graphics and  computational geometry address\n# Nᴹ+      NPl+            . NSg+     NSgPl    VB/C J+            N🅪Sg+    NSg/VB+\n> the generation of images  . Programming language theory considers different ways\n# D   NSg        P  NPl/V3+ . Nᴹ/Vg/J+    N🅪Sg+    N🅪Sg+  V3        NSg/J     NPl+\n> to describe computational processes , and  database theory concerns the management\n# P  VB       J+            NPl/V3+   . VB/C NSg/VB+  N🅪Sg+  NPl/V3+  D   N🅪Sg\n> of repositories of data  . Human    – computer interaction investigates the interfaces\n# P  NPl          P  N🅪Pl+ . NSg/VB/J . NSg+     N🅪Sg+       V3           D+  NPl/V3+\n> through which humans and  computers interact , and  software engineering focuses on\n# NSg/J/P I/C+  NPl/V3 VB/C NPl+      NSg/VB   . VB/C Nᴹ+      Nᴹ/Vg/J+    NPl/V3  J/P\n> the design   and  principles behind  developing software . Areas such  as    operating\n# D   N🅪Sg/VB+ VB/C NPl/V3+    NSg/J/P Nᴹ/Vg/J    Nᴹ+      . NPl+  NSg/I R/C/P Nᴹ/Vg/J\n> systems , networks and  embedded systems investigate the principles and  design\n# NPl+    . NPl/V3+  VB/C VP/J     NPl+    VB          D   NPl/V3     VB/C N🅪Sg/VB+\n> behind  complex   systems . Computer architecture describes the construction of\n# NSg/J/P NSg/VB/J+ NPl+    . NSg+     N🅪Sg+        V3        D   N🅪Sg         P\n> computer components and  computer - operated equipment . Artificial intelligence and\n# NSg+     NPl        VB/C NSg+     . VP/J     Nᴹ+       . J          N🅪Sg         VB/C\n> machine learning aim    to synthesize goal    - orientated processes such  as\n# NSg/VB+ Nᴹ/Vg/J+ NSg/VB P  VB         NSg/VB+ . VP/J       NPl/V3    NSg/I R/C/P\n> problem - solving , decision - making  , environmental adaptation , planning and\n# NSg/J+  . Nᴹ/Vg/J . NSg/VB+  . Nᴹ/Vg/J . NSg/J         NSg+       . NSg/Vg   VB/C\n> learning found  in        humans and  animals . Within  artificial intelligence , computer\n# Nᴹ/Vg/J+ NSg/VP NPr/J/R/P NPl/V3 VB/C NPl+    . NSg/J/P J+         N🅪Sg+        . NSg+\n> vision   aims   to understand and  process image   and  video    data  , while      natural\n# N🅪Sg/VB+ NPl/V3 P  VB         VB/C NSg/VB+ N🅪Sg/VB VB/C N🅪Sg/VB+ N🅪Pl+ . NSg/VB/C/P NSg/J+\n> language processing aims   to understand and  process textual and  linguistic data  .\n# N🅪Sg+    Nᴹ/Vg/J+   NPl/V3 P  VB         VB/C NSg/VB+ J       VB/C J          N🅪Pl+ .\n>\n#\n> The fundamental concern of computer science  is  determining what   can     and  cannot\n# D   NSg/J       N🅪Sg/VB P  NSg+     N🅪Sg/VB+ VL3 Nᴹ/Vg/J     NSg/I+ NPr/VXB VB/C NSg/VXB\n> be       automated . The Turing Award   is  generally recognized as    the highest\n# NSg/VLXB VP/J      . D   NPr    NSg/VB+ VL3 R         VP/J       R/C/P D   JS\n> distinction in        computer science  .\n# N🅪Sg        NPr/J/R/P NSg+     N🅪Sg/VB+ .\n>\n#\n>              History\n# HeadingStart N🅪Sg+\n>\n#\n> The earliest foundations of what   would become computer science  predate the\n# D   JS       NPl         P  NSg/I+ VXB   VBPp   NSg+     N🅪Sg/VB+ NSg/VB  D\n> invention of the modern digital computer . Machines for   calculating fixed\n# N🅪Sg      P  D   NSg/J  NSg/J   NSg+     . NPl/V3+  R/C/P Nᴹ/Vg/J     VP/J\n> numerical tasks   such  as    the abacus have    existed since antiquity , aiding  in\n# J+        NPl/V3+ NSg/I R/C/P D   NSg    NSg/VXB VP/J    C/P   NSg+      . Nᴹ/Vg/J NPr/J/R/P\n> computations such  as    multiplication and  division . Algorithms for   performing\n# NPl          NSg/I R/C/P Nᴹ             VB/C NSg+     . NPl+       R/C/P Nᴹ/Vg/J\n> computations have    existed since antiquity , even       before the development of\n# NPl          NSg/VXB VP/J    C/P   NSg+      . NSg/VB/J/R C/P    D   N🅪Sg        P\n> sophisticated computing equipment .\n# VP/J          Nᴹ/Vg/J+  Nᴹ+       .\n>\n#\n> Wilhelm Schickard designed and  constructed the first working mechanical\n# NPr     ?         VP/J     VB/C VP/J        D   NSg/J Nᴹ/Vg/J NSg/J\n> calculator in        1623 . In        1673 , Gottfried Leibniz demonstrated a   digital mechanical\n# NSg+       NPr/J/R/P #    . NPr/J/R/P #    . ?         NPr     VP/J         D/P NSg/J   NSg/J\n> calculator , called the Stepped Reckoner . Leibniz may     be       considered the first\n# NSg+       . VP/J   D   J       ?        . NPr     NPr/VXB NSg/VLXB VP/J       D   NSg/J\n> computer scientist and  information theorist , because of various reasons ,\n# NSg+     NSg       VB/C Nᴹ+         NSg      . C/P     P  J       NPl/V3+ .\n> including the fact that          he       documented the binary  number      system . In        1820 , Thomas\n# Nᴹ/Vg/J   D   NSg+ NSg/I/C/Ddem+ NPr/ISg+ VP/J       D   N🅪Sg/J+ N🅪Sg/VB/JC+ NSg+   . NPr/J/R/P #    . NPr+\n> de   Colmar launched the mechanical calculator industry [ note    1 ] when    he       invented\n# NPr+ ?      VP/J     D   NSg/J      NSg+       N🅪Sg+    . NSg/VB+ # . NSg/I/C NPr/ISg+ VP/J\n> his     simplified arithmometer , the first calculating machine strong enough and\n# ISg/D$+ VP/J       ?            . D   NSg/J Nᴹ/Vg/J     NSg/VB+ NPr/J  NSg/I  VB/C\n> reliable enough to be       used daily      in        an  office  environment . Charles Babbage\n# NSg/J    NSg/I  P  NSg/VLXB VP/J NSg/VB/J/R NPr/J/R/P D/P NSg/VB+ N🅪Sg+       . NPr+    NPr\n> started the design  of the first automatic mechanical calculator , his     Difference\n# VP/J    D   N🅪Sg/VB P  D   NSg/J NSg/J     NSg/J      NSg+       . ISg/D$+ N🅪Sg/VB+\n> Engine  , in        1822 , which eventually gave him  the idea of the first programmable\n# NSg/VB+ . NPr/J/R/P #    . I/C+  R          VPt  ISg+ D   NSg  P  D   NSg/J NSg/J\n> mechanical calculator , his     Analytical Engine  . He       started developing this    machine\n# NSg/J      NSg+       . ISg/D$+ J          NSg/VB+ . NPr/ISg+ VP/J    Nᴹ/Vg/J    I/Ddem+ NSg/VB+\n> in        1834 , and  \" in        less       than two  years , he       had sketched out          many       of the salient\n# NPr/J/R/P #    . VB/C . NPr/J/R/P VB/J/R/C/P C/P  NSg+ NPl+  . NPr/ISg+ VP  VP/J     NSg/VB/J/R/P NSg/I/J/Dq P  D   NSg/J\n> features of the modern computer \" . \" A    crucial step    was  the adoption of a   punched\n# NPl/V3   P  D   NSg/J  NSg+     . . . D/P+ J+      NSg/VB+ VLPt D   N🅪Sg     P  D/P VP/J\n> card     system derived from the Jacquard loom   \" making  it       infinitely\n# N🅪Sg/VB+ NSg+   VP/J    P    D   NPr      NSg/VB . Nᴹ/Vg/J NPr/ISg+ R\n> programmable . [ note    2 ] In        1843 , during the translation of a   French      article on  the\n# NSg/J        . . NSg/VB+ # . NPr/J/R/P #    . VB/P   D   N🅪Sg        P  D/P NPr🅪Sg/VB/J NSg/VB+ J/P D\n> Analytical Engine  , Ada  Lovelace wrote , in        one     of the many       notes   she  included , an\n# J          NSg/VB+ . NPr+ NPr      VPt   . NPr/J/R/P NSg/I/J P  D   NSg/I/J/Dq NPl/V3+ ISg+ VP/J     . D/P\n> algorithm to compute the Bernoulli numbers   , which is  considered to be       the first\n# NSg       P  NSg/VB  D   NPr+      NPrPl/V3+ . I/C+  VL3 VP/J       P  NSg/VLXB D   NSg/J\n> published algorithm ever specifically tailored for   implementation on  a   computer .\n# VP/J      NSg       J/R  R            VP/J     R/C/P N🅪Sg+          J/P D/P NSg+     .\n> Around 1885 , Herman Hollerith invented the tabulator , which used punched cards\n# J/P    #    . NPr+   NPr       VP/J     D   NSg       . I/C+  VP/J VP/J    NPl/V3+\n> to process statistical information ; eventually his     company became part     of IBM  .\n# P  NSg/VB  J           Nᴹ+         . R          ISg/D$+ N🅪Sg+   VPt    NSg/VB/J P  NPr+ .\n> Following   Babbage , although unaware of his     earlier work     , Percy Ludgate in        1909\n# N🅪Sg/Vg/J/P NPr     . C        VB/J    P  ISg/D$+ JC      N🅪Sg/VB+ . NPr+  ?       NPr/J/R/P #\n> published the 2nd of the only  two designs for   mechanical analytical engines in\n# VP/J      D   #   P  D   J/R/C NSg NPl/V3+ R/C/P NSg/J      J          NPl/V3  NPr/J/R/P\n> history . In        1914 , the Spanish engineer Leonardo Torres Quevedo published his\n# N🅪Sg+   . NPr/J/R/P #    . D+  NPrᴹ/J+ NSg/VB+  NPr+     NPr    ?       VP/J      ISg/D$+\n> Essays  on  Automatics , and  designed , inspired by    Babbage , a   theoretical\n# NPl/V3+ J/P NPl        . VB/C VP/J     . VP/J     NSg/P NPr     . D/P J\n> electromechanical calculating machine which was  to be       controlled by    a   read     - only\n# J                 Nᴹ/Vg/J     NSg/VB+ I/C+  VLPt P  NSg/VLXB VP/J       NSg/P D/P NSg/VBP+ . J/R/C\n> program . The paper      also introduced the idea of floating - point   arithmetic . In\n# NPr/VB+ . D+  N🅪Sg/VB/J+ R/C  VP/J       D   NSg  P  Nᴹ/Vg/J+ . NSg/VB+ Nᴹ/J       . NPr/J/R/P\n> 1920 , to celebrate the 100th anniversary of the invention of the arithmometer ,\n# #    . P  VB        D   #     NSg         P  D   N🅪Sg      P  D   ?            .\n> Torres presented in        Paris the Electromechanical Arithmometer , a   prototype that\n# NPr    VP/J      NPr/J/R/P NPr+  D   J                 ?            . D/P NSg/VB+   NSg/I/C/Ddem+\n> demonstrated the feasibility of an  electromechanical analytical engine  , on  which\n# VP/J         D   Nᴹ          P  D/P J                 J          NSg/VB+ . J/P I/C+\n> commands could   be       typed and  the results printed automatically . In        1937 , one\n# NPl/V3+  NSg/VXB NSg/VLXB VP/J  VB/C D   NPl/V3+ VP/J    R             . NPr/J/R/P #    . NSg/I/J\n> hundred years after Babbage's impossible dream     , Howard Aiken convinced IBM  ,\n# NSg     NPl+  P     NPr$      NSg/J      NSg/VB/J+ . NPr+   NPr   VP/J      NPr+ .\n> which was  making  all          kinds of punched card     equipment and  was  also in        the\n# I/C+  VLPt Nᴹ/Vg/J NSg/I/J/C/Dq NPl   P  VP/J    N🅪Sg/VB+ Nᴹ+       VB/C VLPt R/C  NPr/J/R/P D\n> calculator business to develop his     giant programmable calculator , the\n# NSg+       N🅪Sg/J+  P  VB      ISg/D$+ NSg/J NSg/J        NSg+       . D\n> ASCC / Harvard Mark    I       , based on  Babbage's Analytical Engine  , which itself used\n# ?    . NPr+    NPr/VB+ ISg/#r+ . VP/J  J/P NPr$      J          NSg/VB+ . I/C+  ISg+   VP/J\n> cards  and  a   central computing unit . When    the machine was  finished , some     hailed\n# NPl/V3 VB/C D/P NPr/J   Nᴹ/Vg/J+  NSg+ . NSg/I/C D+  NSg/VB+ VLPt VP/J     . I/J/R/Dq VP/J\n> it       as    \" Babbage's dream     come       true     \" .\n# NPr/ISg+ R/C/P . NPr$      NSg/VB/J+ NSg/VBPp/P NSg/VB/J . .\n>\n#\n> During the 1940s , with the development of new   and  more         powerful computing\n# VB/P   D+  #d    . P    D   N🅪Sg        P  NSg/J VB/C NPr/I/J/R/Dq J        Nᴹ/Vg/J+\n> machines such  as    the Atanasoff – Berry      computer and  ENIAC , the term      computer came\n# NPl/V3   NSg/I R/C/P D   ?         . NPr🅪Sg/VB+ NSg+     VB/C ?     . D   NSg/VB/J+ NSg+     NSg/VPt/P\n> to refer  to the machines rather     than their human    predecessors . As    it       became\n# P  NSg/VB P  D   NPl/V3+  NPr/VB/J/R C/P  D$+   NSg/VB/J NPl+         . R/C/P NPr/ISg+ VPt\n> clear    that         computers could   be       used for   more         than just mathematical calculations ,\n# NSg/VB/J NSg/I/C/Ddem NPl+      NSg/VXB NSg/VLXB VP/J R/C/P NPr/I/J/R/Dq C/P  J/R  J+           +            .\n> the field  of computer science  broadened to study  computation in        general  . In\n# D   NSg/VB P  NSg+     N🅪Sg/VB+ VP/J      P  NSg/VB NSg         NPr/J/R/P NSg/VB/J . NPr/J/R/P\n> 1945 , IBM  founded the Watson Scientific Computing Laboratory at    Columbia\n# #    . NPr+ VP/J    D+  NPr+   J+         Nᴹ/Vg/J+  NSg+       NSg/P NPr+\n> University in        New    York City . The renovated fraternity house  on  Manhattan's West\n# NSg        NPr/J/R/P NSg/J+ NPr+ NSg+ . D   VP/J      NSg+       NPr/VB J/P NPr$        NPr/VB/J+\n> Side      was  IBM's first laboratory devoted to pure     science  . The lab  is  the\n# NSg/VB/J+ VLPt NPr$  NSg/J NSg+       VP/J    P  NSg/VB/J N🅪Sg/VB+ . D+  NPr+ VL3 D\n> forerunner of IBM's Research Division , which today  operates research facilities\n# NSg        P  NPr$  Nᴹ/VB+   NSg+     . I/C+  NSg/J+ V3       Nᴹ/VB+   NPl+\n> around the world   . Ultimately , the close    relationship between IBM and  Columbia\n# J/P    D   NSg/VB+ . R          . D   NSg/VB/J NSg          NSg/P   NPr VB/C NPr+\n> University was  instrumental in        the emergence of a   new   scientific discipline ,\n# NSg+       VLPt NSg/J        NPr/J/R/P D   Nᴹ        P  D/P NSg/J J          NSg/VB+    .\n> with Columbia offering  one     of the first academic - credit  courses in        computer\n# P    NPr+     N🅪Sg/Vg/J NSg/I/J P  D   NSg/J NSg/J    . NSg/VB+ NPl/V3  NPr/J/R/P NSg+\n> science  in        1946 . Computer science  began to be       established as    a   distinct academic\n# N🅪Sg/VB+ NPr/J/R/P #    . NSg+     N🅪Sg/VB+ VPt   P  NSg/VLXB VP/J        R/C/P D/P VB/J     NSg/J\n> discipline in        the 1950s and  early    1960s . The world's first computer science\n# NSg/VB+    NPr/J/R/P D   #d    VB/C NSg/J/R+ #d    . D   NSg$    NSg/J NSg+     N🅪Sg/VB+\n> degree program , the Cambridge Diploma in        Computer Science  , began at    the\n# NSg+   NPr/VB+ . D   NPr+      NSg     NPr/J/R/P NSg+     N🅪Sg/VB+ . VPt   NSg/P D\n> University of Cambridge Computer Laboratory in        1953 . The first  computer science\n# NSg        P  NPr+      NSg+     NSg+       NPr/J/R/P #    . D+  NSg/J+ NSg+     N🅪Sg/VB+\n> department in        the United States    was  formed at    Purdue University in        1962 . Since\n# NSg+       NPr/J/R/P D+  VP/J   NPrPl/V3+ VLPt VP/J   NSg/P NPr    NSg+       NPr/J/R/P #    . C/P\n> practical computers became available , many       applications of computing have    become\n# NSg/J+    NPl+      VPt    J         . NSg/I/J/Dq NPl          P  Nᴹ/Vg/J+  NSg/VXB VBPp\n> distinct areas of study   in        their own       rights  .\n# VB/J     NPl   P  NSg/VB+ NPr/J/R/P D$+   NSg/VB/J+ NPl/V3+ .\n>\n#\n>              Etymology and  scope\n# HeadingStart N🅪Sg      VB/C NSg/VB+\n>\n#\n> Although first proposed in        1956 , the term     \" computer science  \" appears in        a   1959\n# C        NSg/J VP/J     NPr/J/R/P #    . D   NSg/VB/J . NSg+     N🅪Sg/VB+ . V3      NPr/J/R/P D/P #\n> article in        Communications of the ACM , in        which Louis Fein argues for   the\n# NSg/VB  NPr/J/R/P NPl            P  D   NSg . NPr/J/R/P I/C+  NPr+  ?    V3     R/C/P D\n> creation of a   Graduate  School   in        Computer Sciences analogous to the creation of\n# NSg      P  D/P NSg/VB/J+ N🅪Sg/VB+ NPr/J/R/P NSg+     NPl/V3+  J         P  D   NSg      P\n> Harvard Business School   in        1921 . Louis justifies the name    by    arguing that          , like\n# NPr+    N🅪Sg/J+  N🅪Sg/VB+ NPr/J/R/P #    . NPr+  V3        D+  NSg/VB+ NSg/P Nᴹ/Vg/J NSg/I/C/Ddem+ . NSg/VB/J/C/P\n> management science  , the subject   is  applied and  interdisciplinary in        nature   ,\n# N🅪Sg+      N🅪Sg/VB+ . D+  NSg/VB/J+ VL3 VP/J    VB/C J                 NPr/J/R/P N🅪Sg/VB+ .\n> while      having  the characteristics typical of an  academic discipline . His     efforts ,\n# NSg/VB/C/P Nᴹ/Vg/J D   NPl+            NSg/J   P  D/P NSg/J    NSg/VB+    . ISg/D$+ NPl/V3+ .\n> and  those  of others  such  as    numerical analyst George Forsythe , were     rewarded :\n# VB/C I/Ddem P  NPl/V3+ NSg/I R/C/P J+        NSg+    NPr+   ?        . NSg/VLPt VP/J     .\n> universities went    on  to create such  departments , starting with Purdue in        1962 .\n# NPl+         NSg/VPt J/P P  VB/J   NSg/I NPl+        . Nᴹ/Vg/J  P    NPr    NPr/J/R/P #    .\n> Despite  its     name    , a   significant amount of computer science  does    not     involve the\n# NSg/VB/P ISg/D$+ NSg/VB+ . D/P NSg/J       NSg/VB P  NSg+     N🅪Sg/VB+ NPl/VX3 NSg/R/C VB      D\n> study  of computers themselves . Because of this    , several alternative names   have\n# NSg/VB P  NPl+      IPl+       . C/P     P  I/Ddem+ . J/Dq+   NSg/J+      NPl/V3+ NSg/VXB\n> been     proposed . Certain departments of major     universities prefer the term\n# NSg/VLPp VP/J     . I/J     NPl         P  NPr/VB/J+ NPl+         VB     D+  NSg/VB/J+\n> computing science  , to emphasize precisely that          difference . Danish  scientist\n# Nᴹ/Vg/J+  N🅪Sg/VB+ . P  VB        R         NSg/I/C/Ddem+ N🅪Sg/VB+   . NPrᴹ/J+ NSg+\n> Peter      Naur suggested the term      datalogy , to reflect the fact that         the scientific\n# NPr/VB/JC+ ?    VP/J      D   NSg/VB/J+ ?        . P  VB      D   NSg+ NSg/I/C/Ddem D   J\n> discipline revolves around data and  data  treatment , while      not     necessarily\n# NSg/VB+    NPl/V3   J/P    N🅪Pl VB/C N🅪Pl+ N🅪Sg+     . NSg/VB/C/P NSg/R/C R\n> involving computers . The first scientific institution to use     the term      was  the\n# Nᴹ/Vg/J   NPl+      . D   NSg/J J          NSg+        P  N🅪Sg/VB D+  NSg/VB/J+ VLPt D\n> Department of Datalogy at    the University of Copenhagen , founded in        1969 , with\n# NSg        P  ?        NSg/P D   NSg        P  NPr+       . VP/J    NPr/J/R/P #    . P\n> Peter      Naur being        the first professor in        datalogy . The term      is  used mainly in        the\n# NPr/VB/JC+ ?    N🅪Sg/VLg/J/C D   NSg/J NSg+      NPr/J/R/P ?        . D+  NSg/VB/J+ VL3 VP/J R      NPr/J/R/P D\n> Scandinavian countries . An   alternative term      , also proposed by    Naur , is  data\n# NSg/J        NPl+      . D/P+ NSg/J+      NSg/VB/J+ . R/C  VP/J     NSg/P ?    . VL3 N🅪Pl+\n> science  ; this    is  now       used for   a   multi - disciplinary field  of data  analysis ,\n# N🅪Sg/VB+ . I/Ddem+ VL3 NSg/J/R/C VP/J R/C/P D/P NSg   . NSg/J        NSg/VB P  N🅪Pl+ N🅪Sg+    .\n> including statistics and  databases .\n# Nᴹ/Vg/J   NPl/V3     VB/C NPl/V3+   .\n>\n#\n> In        the early   days of computing , a   number     of terms   for   the practitioners of the\n# NPr/J/R/P D   NSg/J/R NPl  P  Nᴹ/Vg/J+  . D/P N🅪Sg/VB/JC P  NPl/V3+ R/C/P D   NPl           P  D\n> field  of computing were     suggested ( albeit facetiously ) in        the Communications of\n# NSg/VB P  Nᴹ/Vg/J+  NSg/VLPt VP/J      . C      R           . NPr/J/R/P D   NPl            P\n> the ACM — turingineer , turologist , flow    - charts  - man       , applied meta  - mathematician ,\n# D   NSg . ?           . ?          . NSg/VB+ . NPl/V3+ . NPr/VB/J+ . VP/J    NSg/J . NSg+          .\n> and  applied epistemologist . Three months later in        the same journal   , comptologist\n# VB/C VP/J    NSg            . NSg+  NPl+   JC    NPr/J/R/P D+  I/J+ NSg/VB/J+ . ?\n> was  suggested , followed next    year by    hypologist . The term      computics has also\n# VLPt VP/J      . VP/J     NSg/J/P NSg+ NSg/P ?          . D+  NSg/VB/J+ ?         V3  R/C\n> been     suggested . In        Europe , terms   derived from contracted translations of the\n# NSg/VLPp VP/J      . NPr/J/R/P NPr+   . NPl/V3+ VP/J    P    VP/J       NPl          P  D+\n> expression \" automatic information \" ( e.g. \" informazione automatica \" in        Italian )\n# N🅪Sg+      . NSg/J+    Nᴹ+         . . NSg  . ?            ?          . NPr/J/R/P N🅪Sg/J  .\n> or    \" information and  mathematics \" are often used , e.g. informatique ( French      ) ,\n# NPr/C . Nᴹ          VB/C Nᴹ+         . VLB R     VP/J . NSg  ?            . NPr🅪Sg/VB/J . .\n> Informatik ( German   ) , informatica ( Italian , Dutch     ) , informática ( Spanish ,\n# ?          . NPr🅪Sg/J . . ?           . N🅪Sg/J  . NPrᴹ/VB/J . . ?           . NPrᴹ/J  .\n> Portuguese ) , informatika ( Slavic languages and  Hungarian ) or    pliroforiki\n# NPr/J      . . ?           . NSg/J  NPl+      VB/C NSg/J     . NPr/C ?\n> ( π          λ          η          ρ          ο          φ          ο          ρ          ι          κ          ή          , which means  informatics ) in        Greek    . Similar words   have    also been\n# . Unlintable Unlintable Unlintable Unlintable Unlintable Unlintable Unlintable Unlintable Unlintable Unlintable Unlintable . I/C+  NPl/V3 Nᴹ          . NPr/J/R/P NPr/VB/J . NSg/J+  NPl/V3+ NSg/VXB R/C  NSg/VLPp\n> adopted in        the UK   ( as    in        the School  of Informatics , University of Edinburgh ) .\n# VP/J    NPr/J/R/P D+  NPr+ . R/C/P NPr/J/R/P D   N🅪Sg/VB P  Nᴹ          . NSg        P  NPr+      . .\n> \" In        the U.S. , however , informatics is  linked with applied computing , or\n# . NPr/J/R/P D+  NPr+ . C       . Nᴹ          VL3 VP/J   P    VP/J    Nᴹ/Vg/J+  . NPr/C\n> computing in        the context of another domain . \"\n# Nᴹ/Vg/J+  NPr/J/R/P D   N🅪Sg/VB P  I/D     NSg+   . .\n>\n#\n> A   folkloric quotation , often attributed to — but     almost certainly not     first\n# D/P J         NSg       . R     VP/J       P  . NSg/C/P R      R         NSg/R/C NSg/J\n> formulated by    — Edsger Dijkstra , states    that          \" computer science  is  no       more         about\n# VP/J       NSg/P . ?      NSg      . NPrPl/V3+ NSg/I/C/Ddem+ . NSg+     N🅪Sg/VB+ VL3 NSg/Dq/P NPr/I/J/R/Dq J/P\n> computers than astronomy is  about telescopes . \" [ note    3 ] The design  and  deployment\n# NPl+      C/P  Nᴹ+       VL3 J/P   NPl/V3     . . . NSg/VB+ # . D   N🅪Sg/VB VB/C NSg\n> of computers and  computer systems is  generally considered the province of\n# P  NPl       VB/C NSg+     NPl+    VL3 R         VP/J       D   NSg      P\n> disciplines other    than computer science  . For   example , the study  of computer\n# NPl/V3+     NSg/VB/J C/P  NSg+     N🅪Sg/VB+ . R/C/P NSg/VB+ . D   NSg/VB P  NSg+\n> hardware is  usually considered part     of computer engineering , while      the study  of\n# Nᴹ+      VL3 R       VP/J       NSg/VB/J P  NSg+     Nᴹ/Vg/J+    . NSg/VB/C/P D   NSg/VB P\n> commercial computer systems and  their deployment is  often called information\n# NSg/J+     NSg+     NPl+    VB/C D$+   NSg+       VL3 R     VP/J   Nᴹ+\n> technology or    information systems . However , there has been     exchange of ideas\n# N🅪Sg       NPr/C Nᴹ+         NPl+    . C       . R+    V3  NSg/VLPp NSg/VB   P  NPl+\n> between the various computer - related disciplines . Computer science  research also\n# NSg/P   D   J       NSg+     . J+      NPl/V3+     . NSg+     N🅪Sg/VB+ Nᴹ/VB+   R/C\n> often intersects other    disciplines , such  as    cognitive science , linguistics ,\n# R     V3+        NSg/VB/J NPl/V3+     . NSg/I R/C/P NSg/J     N🅪Sg/VB . Nᴹ+         .\n> mathematics , physics , biology , Earth    science  , statistics , philosophy , and  logic    .\n# Nᴹ+         . NPl/V3+ . N🅪Sg+   . NPrᴹ/VB+ N🅪Sg/VB+ . NPl/V3+    . N🅪Sg/VB+   . VB/C Nᴹ/VB/J+ .\n>\n#\n> Computer science  is  considered by    some     to have    a   much         closer relationship with\n# NSg+     N🅪Sg/VB+ VL3 VP/J       NSg/P I/J/R/Dq P  NSg/VXB D/P NSg/I/J/R/Dq NSg/JC NSg          P\n> mathematics than many        scientific disciplines , with some      observers saying    that\n# Nᴹ+         C/P  NSg/I/J/Dq+ J+         NPl/V3+     . P    I/J/R/Dq+ NPl+      N🅪Sg/Vg/J NSg/I/C/Ddem\n> computing is  a   mathematical science . Early    computer science  was  strongly\n# Nᴹ/Vg/J+  VL3 D/P J            N🅪Sg/VB . NSg/J/R+ NSg+     N🅪Sg/VB+ VLPt R\n> influenced by    the work    of mathematicians such  as    Kurt Gödel , Alan Turing , John\n# VP/J       NSg/P D   N🅪Sg/VB P  NPl+           NSg/I R/C/P NPr  NPr   . NPr+ NPr    . NPr+\n> von Neumann , Rózsa Péter and  Alonzo Church     and  there continues to be       a   useful\n# ?   ?       . ?     ?     VB/C NPr    NPr🅪Sg/VB+ VB/C R+    NPl/V3    P  NSg/VLXB D/P J\n> interchange of ideas between the two fields    in        areas such  as    mathematical logic    ,\n# NSg/VB      P  NPl+  NSg/P   D   NSg NPrPl/V3+ NPr/J/R/P NPl+  NSg/I R/C/P J            Nᴹ/VB/J+ .\n> category theory , domain theory , and  algebra .\n# NSg+     N🅪Sg+  . NSg+   N🅪Sg+  . VB/C N🅪Sg+   .\n>\n#\n> The relationship between computer science and  software engineering is  a\n# D   NSg          NSg/P   NSg+     N🅪Sg/VB VB/C Nᴹ+      Nᴹ/Vg/J+    VL3 D/P\n> contentious issue  , which is  further muddied by    disputes over    what   the term\n# J           NSg/VB . I/C+  VL3 VB/JC   VP/J    NSg/P NPl/V3+  NSg/J/P NSg/I+ D   NSg/VB/J+\n> \" software engineering \" means  , and  how   computer science  is  defined . David Parnas ,\n# . Nᴹ+      Nᴹ/Vg/J+    . NPl/V3 . VB/C NSg/C NSg+     N🅪Sg/VB+ VL3 VP/J    . NPr+  ?      .\n> taking   a   cue     from the relationship between other    engineering and  science\n# NSg/Vg/J D/P NSg/VB+ P    D   NSg+         NSg/P   NSg/VB/J Nᴹ/Vg/J     VB/C N🅪Sg/VB+\n> disciplines , has claimed that         the principal focus   of computer science  is\n# NPl/V3+     . V3  VP/J    NSg/I/C/Ddem D   NSg/J     N🅪Sg/VB P  NSg+     N🅪Sg/VB+ VL3\n> studying the properties of computation in        general  , while      the principal focus   of\n# Nᴹ/Vg/J  D   NPl/V3+    P  NSg         NPr/J/R/P NSg/VB/J . NSg/VB/C/P D   NSg/J     N🅪Sg/VB P\n> software engineering is  the design  of specific computations to achieve practical\n# Nᴹ+      Nᴹ/Vg/J+    VL3 D   N🅪Sg/VB P  NSg/J    NPl          P  VB      NSg/J\n> goals   , making  the two separate but     complementary disciplines .\n# NPl/V3+ . Nᴹ/Vg/J D   NSg NSg/VB/J NSg/C/P NSg/J         NPl/V3+     .\n>\n#\n> The academic , political , and  funding  aspects of computer science  tend to depend\n# D   NSg/J    . NSg/J     . VB/C Nᴹ/Vg/J+ NPl/V3  P  NSg+     N🅪Sg/VB+ VB   P  NSg/VB\n> on  whether a    department is  formed with a   mathematical emphasis or    with an\n# J/P I/C     D/P+ NSg+       VL3 VP/J   P    D/P J            NSg      NPr/C P    D/P+\n> engineering emphasis . Computer science  departments with a    mathematics emphasis\n# Nᴹ/Vg/J+    NSg+     . NSg+     N🅪Sg/VB+ NPl+        P    D/P+ Nᴹ+         NSg+\n> and  with a    numerical orientation consider alignment with computational science  .\n# VB/C P    D/P+ J+        N🅪Sg+       VB       N🅪Sg      P    J+            N🅪Sg/VB+ .\n> Both   types  of departments tend to make   efforts to bridge  the field   educationally\n# I/C/Dq NPl/V3 P  NPl+        VB   P  NSg/VB NPl/V3+ P  N🅪Sg/VB D+  NSg/VB+ R\n> if    not     across all          research .\n# NSg/C NSg/R/C NSg/P  NSg/I/J/C/Dq Nᴹ/VB+   .\n>\n#\n>              Philosophy\n# HeadingStart N🅪Sg/VB+\n>\n#\n>              Epistemology of computer science\n# HeadingStart Nᴹ           P  NSg+     N🅪Sg/VB+\n>\n#\n> Despite  the word    science  in        its     name    , there is  debate   over    whether or    not\n# NSg/VB/P D+  NSg/VB+ N🅪Sg/VB+ NPr/J/R/P ISg/D$+ NSg/VB+ . R+    VL3 N🅪Sg/VB+ NSg/J/P I/C     NPr/C NSg/R/C\n> computer science  is  a   discipline of science  , mathematics , or    engineering . Allen\n# NSg+     N🅪Sg/VB+ VL3 D/P NSg/VB     P  N🅪Sg/VB+ . Nᴹ+         . NPr/C Nᴹ/Vg/J+    . NPr+\n> Newell and  Herbert A. Simon argued in        1975 ,\n# ?      VB/C NPr+    ?  NPr+  VP/J   NPr/J/R/P #    .\n>\n#\n> Computer science  is  an  empirical discipline . We   would have    called it       an\n# NSg+     N🅪Sg/VB+ VL3 D/P NSg/J     NSg/VB     . IPl+ VXB   NSg/VXB VP/J   NPr/ISg+ D/P+\n> experimental science  , but     like         astronomy , economics , and  geology , some     of its\n# NSg/J+       N🅪Sg/VB+ . NSg/C/P NSg/VB/J/C/P Nᴹ+       . Nᴹ+       . VB/C NSg     . I/J/R/Dq P  ISg/D$+\n> unique forms  of observation and  experience do  not     fit       a   narrow   stereotype of\n# NSg/J  NPl/V3 P  N🅪Sg        VB/C N🅪Sg/VB+   VXB NSg/R/C NSg/VBP/J D/P NSg/VB/J NSg/VB     P\n> the experimental method  . Nonetheless , they are experiments . Each new    machine\n# D   NSg/J        NSg/VB+ . R           . IPl+ VLB NPl/V3+     . Dq+  NSg/J+ NSg/VB+\n> that          is  built is  an   experiment . Actually constructing the machine poses   a\n# NSg/I/C/Ddem+ VL3 VP/J  VL3 D/P+ NSg/VB+    . R        Nᴹ/Vg/J      D+  NSg/VB+ NPl/V3+ D/P+\n> question to nature  ; and  we   listen for   the answer  by    observing the machine in\n# NSg/VB+  P  N🅪Sg/VB . VB/C IPl+ NSg/VB R/C/P D+  NSg/VB+ NSg/P Nᴹ/Vg/J   D   NSg/VB+ NPr/J/R/P\n> operation and  analyzing it       by    all          analytical and  measurement means  available .\n# N🅪Sg+     VB/C Nᴹ/Vg/J   NPr/ISg+ NSg/P NSg/I/J/C/Dq J          VB/C N🅪Sg+       NPl/V3 J         .\n>\n#\n> It       has since been     argued that         computer science  can     be       classified as    an   empirical\n# NPr/ISg+ V3  C/P+  NSg/VLPp VP/J   NSg/I/C/Ddem NSg+     N🅪Sg/VB+ NPr/VXB NSg/VLXB NSg/VP/J   R/C/P D/P+ NSg/J+\n> science  since it       makes  use     of empirical testing  to evaluate the correctness of\n# N🅪Sg/VB+ C/P   NPr/ISg+ NPl/V3 N🅪Sg/VB P  NSg/J     Nᴹ/Vg/J+ P  VB       D   NSg         P\n> programs  , but     a    problem remains in        defining the laws    and  theorems of computer\n# NPrPl/V3+ . NSg/C/P D/P+ NSg/J+  NPl/V3  NPr/J/R/P Nᴹ/Vg/J  D+  NPl/V3+ VB/C NPl/V3   P  NSg+\n> science  ( if    any    exist ) and  defining the nature  of experiments in        computer\n# N🅪Sg/VB+ . NSg/C I/R/Dq VB+   . VB/C Nᴹ/Vg/J  D   N🅪Sg/VB P  NPl/V3+     NPr/J/R/P NSg+\n> science  . Proponents of classifying computer science  as    an  engineering discipline\n# N🅪Sg/VB+ . NPl        P  Nᴹ/Vg/J     NSg+     N🅪Sg/VB+ R/C/P D/P Nᴹ/Vg/J+    NSg/VB+\n> argue that         the reliability of computational systems is  investigated in        the same\n# VB    NSg/I/C/Ddem D   Nᴹ          P  J             NPl+    VL3 VP/J         NPr/J/R/P D   I/J\n> way    as    bridges   in        civil engineering and  airplanes in        aerospace engineering . They\n# NSg/J+ R/C/P NPrPl/V3+ NPr/J/R/P J     Nᴹ/Vg/J+    VB/C NPl/V3    NPr/J/R/P NSg/J+    Nᴹ/Vg/J+    . IPl+\n> also argue that         while      empirical sciences observe what   presently exists , computer\n# R/C  VB    NSg/I/C/Ddem NSg/VB/C/P NSg/J+    NPl/V3+  NSg/VB  NSg/I+ R         V3     . NSg+\n> science  observes what   is  possible to exist and  while      scientists discover  laws\n# N🅪Sg/VB+ NPl/V3   NSg/I+ VL3 NSg/J    P  VB    VB/C NSg/VB/C/P NPl+       N🅪Sg/VB/J NPl/V3\n> from observation , no        proper laws    have    been     found  in        computer science  and  it       is\n# P    N🅪Sg+       . NSg/Dq/P+ NSg/J+ NPl/V3+ NSg/VXB NSg/VLPp NSg/VP NPr/J/R/P NSg+     N🅪Sg/VB+ VB/C NPr/ISg+ VL3\n> instead concerned with creating phenomena .\n# R       VP/J      P    Nᴹ/Vg/J  NSg+      .\n>\n#\n> Proponents of classifying computer science  as    a   mathematical discipline argue\n# NPl        P  Nᴹ/Vg/J     NSg+     N🅪Sg/VB+ R/C/P D/P J            NSg/VB+    VB\n> that         computer programs  are physical realizations  of mathematical entities and\n# NSg/I/C/Ddem NSg+     NPrPl/V3+ VLB NSg/J    NPl/Comm/NoAm P  J            NPl      VB/C\n> programs  that          can     be       deductively reasoned through mathematical formal methods .\n# NPrPl/V3+ NSg/I/C/Ddem+ NPr/VXB NSg/VLXB R           VP/J     NSg/J/P J            NSg/J  NPl/V3+ .\n> Computer scientists Edsger W. Dijkstra and  Tony  Hoare regard  instructions for\n# NSg+     NPl+       ?      ?  NSg      VB/C NPr/J ?     NSg/VB+ NPl          R/C/P\n> computer programs  as    mathematical sentences and  interpret formal semantics for\n# NSg+     NPrPl/V3+ R/C/P J            NPl/V3+   VB/C VB        NSg/J  NPl       R/C/P\n> programming languages as    mathematical axiomatic systems .\n# Nᴹ/Vg/J+    NPl+      R/C/P J            J         NPl+    .\n>\n#\n>              Paradigms of computer science\n# HeadingStart NPl       P  NSg+     N🅪Sg/VB+\n>\n#\n> A   number     of computer scientists have    argued for   the distinction of three\n# D/P N🅪Sg/VB/JC P  NSg+     NPl+       NSg/VXB VP/J   R/C/P D   N🅪Sg        P  NSg\n> separate paradigms in        computer science  . Peter      Wegner argued that         those  paradigms\n# NSg/VB/J NPl       NPr/J/R/P NSg+     N🅪Sg/VB+ . NPr/VB/JC+ ?      VP/J   NSg/I/C/Ddem I/Ddem NPl+\n> are science , technology , and  mathematics . Peter      Denning's working group   argued\n# VLB N🅪Sg/VB . N🅪Sg+      . VB/C Nᴹ+         . NPr/VB/JC+ ?         Nᴹ/Vg/J NSg/VB+ VP/J\n> that         they are theory , abstraction ( modeling ) , and  design   . Amnon H. Eden\n# NSg/I/C/Ddem IPl+ VLB N🅪Sg   . N🅪Sg        . Nᴹ/Vg/J+ . . VB/C N🅪Sg/VB+ . ?     ?  NPr+\n> described them     as    the \" rationalist paradigm \" ( which treats  computer science  as    a\n# VP/J      NSg/IPl+ R/C/P D   . NSg+        NSg+     . . I/C+  NPl/V3+ NSg+     N🅪Sg/VB+ R/C/P D/P\n> branch of mathematics , which is  prevalent in        theoretical computer science  , and\n# NPr/VB P  Nᴹ+         . I/C+  VL3 J         NPr/J/R/P J           NSg+     N🅪Sg/VB+ . VB/C\n> mainly employs deductive reasoning ) , the \" technocratic paradigm \" ( which might    be\n# R      NPl/V3  J         Nᴹ/Vg/J   . . D   . J            NSg+     . . I/C+  Nᴹ/VXB/J NSg/VLXB\n> found  in        engineering approaches , most         prominently in        software engineering ) , and\n# NSg/VP NPr/J/R/P Nᴹ/Vg/J+    NPl/V3+    . NSg/I/J/R/Dq R           NPr/J/R/P Nᴹ+      Nᴹ/Vg/J+    . . VB/C\n> the \" scientific paradigm \" ( which approaches computer - related artifacts from the\n# D   . J          NSg+     . . I/C+  NPl/V3+    NSg+     . J       NPl+      P    D\n> empirical perspective of natural sciences , identifiable in        some     branches of\n# NSg/J     NSg/J       P  NSg/J   NPl/V3+  . J            NPr/J/R/P I/J/R/Dq NPl/V3   P\n> artificial intelligence ) . Computer science  focuses on  methods involved in\n# J          N🅪Sg+        . . NSg+     N🅪Sg/VB+ NPl/V3  J/P NPl/V3+ VP/J     NPr/J/R/P\n> design   , specification , programming , verification , implementation and  testing of\n# N🅪Sg/VB+ . NSg+          . Nᴹ/Vg/J     . N🅪Sg+        . N🅪Sg           VB/C Nᴹ/Vg/J P\n> human    - made computing systems .\n# NSg/VB/J . VP   Nᴹ/Vg/J+  NPl+    .\n>\n#\n>              Fields\n# HeadingStart NPrPl/V3+\n>\n#\n> As    a    discipline , computer science  spans  a   range   of topics from theoretical\n# R/C/P D/P+ NSg/VB+    . NSg+     N🅪Sg/VB+ NPl/V3 D/P N🅪Sg/VB P  NPl+   P    J\n> studies of algorithms and  the limits of computation to the practical issues of\n# NPl/V3  P  NPl+       VB/C D   NPl/V3 P  NSg         P  D   NSg/J     NPl/V3 P\n> implementing computing systems in        hardware and  software . CSAB , formerly called\n# Nᴹ/Vg/J      Nᴹ/Vg/J+  NPl     NPr/J/R/P Nᴹ       VB/C Nᴹ+      . ?    . R        VP/J\n> Computing Sciences Accreditation Board    — which is  made up         of representatives of\n# Nᴹ/Vg/J+  NPl/V3+  N🅪Sg          N🅪Sg/VB+ . I/C+  VL3 VP   NSg/VB/J/P P  NPl             P\n> the Association for   Computing Machinery ( ACM ) , and  the IEEE Computer Society\n# D   N🅪Sg+       R/C/P Nᴹ/Vg/J+  Nᴹ+       . NSg . . VB/C D   NPr  NSg+     N🅪Sg+\n> ( IEEE CS     ) — identifies four areas that          it       considers crucial to the discipline of\n# . NPr  NPl/V3 . . V3         NSg  NPl+  NSg/I/C/Ddem+ NPr/ISg+ V3        J       P  D   NSg/VB     P\n> computer science  : theory of computation , algorithms and  data  structures ,\n# NSg+     N🅪Sg/VB+ . N🅪Sg   P  NSg         . NPl        VB/C N🅪Pl+ NPl/V3+    .\n> programming methodology and  languages , and  computer elements and  architecture .\n# Nᴹ/Vg/J+    NSg         VB/C NPl+      . VB/C NSg+     NPl/V3   VB/C N🅪Sg+        .\n> In        addition to these   four areas , CSAB also identifies fields    such  as    software\n# NPr/J/R/P NSg+     P  I/Ddem+ NSg+ NPl+  . ?    R/C  V3         NPrPl/V3+ NSg/I R/C/P Nᴹ+\n> engineering , artificial intelligence , computer networking and  communication ,\n# Nᴹ/Vg/J+    . J          N🅪Sg+        . NSg+     Nᴹ/Vg/J    VB/C N🅪Sg+         .\n> database systems , parallel computation , distributed computation , human    – computer\n# NSg/VB+  NPl+    . NSg/VB/J NSg         . VP/J        NSg         . NSg/VB/J . NSg+\n> interaction , computer graphics , operating systems , and  numerical and  symbolic\n# N🅪Sg+       . NSg+     NSgPl+   . Nᴹ/Vg/J   NPl+    . VB/C J         VB/C J\n> computation as    being        important areas of computer science  .\n# NSg         R/C/P N🅪Sg/VLg/J/C J         NPl   P  NSg+     N🅪Sg/VB+ .\n>\n#\n>              Theoretical computer science\n# HeadingStart J+          NSg+     N🅪Sg/VB+\n>\n#\n> Theoretical computer science  is  mathematical and  abstract in        spirit  , but     it\n# J+          NSg+     N🅪Sg/VB+ VL3 J            VB/C NSg/VB/J NPr/J/R/P NSg/VB+ . NSg/C/P NPr/ISg+\n> derives its     motivation from practical and  everyday computation . It       aims   to\n# NPl/V3  ISg/D$+ N🅪Sg+      P    NSg/J     VB/C NSg/J    NSg         . NPr/ISg+ NPl/V3 P\n> understand the nature  of computation and  , as    a   consequence of this\n# VB         D   N🅪Sg/VB P  NSg         VB/C . R/C/P D/P NSg/VB      P  I/Ddem\n> understanding , provide more         efficient methodologies .\n# N🅪Sg/Vg/J+    . VB      NPr/I/J/R/Dq NSg/J     NPl           .\n>\n#\n>              Theory of computation\n# HeadingStart N🅪Sg   P  NSg\n>\n#\n> According to Peter      Denning , the fundamental question underlying computer science\n# Nᴹ/Vg/J   P  NPr/VB/JC+ ?       . D+  NSg/J+      NSg/VB+  NSg/Vg/J+  NSg+     N🅪Sg/VB+\n> is  , \" What   can     be       automated ? \" Theory of computation is  focused on  answering\n# VL3 . . NSg/I+ NPr/VXB NSg/VLXB VP/J      . . N🅪Sg   P  NSg         VL3 VP/J    J/P Nᴹ/Vg/J\n> fundamental questions about what   can     be       computed and  what   amount of resources\n# NSg/J       NPl/V3+   J/P   NSg/I+ NPr/VXB NSg/VLXB VP/J     VB/C NSg/I+ NSg/VB P  NPl/V3+\n> are required to perform those  computations . In        an  effort   to answer the first\n# VLB VP/J     P  VB      I/Ddem NPl          . NPr/J/R/P D/P N🅪Sg/VB+ P  NSg/VB D+  NSg/J+\n> question , computability theory examines which computational problems are\n# NSg/VB+  . Nᴹ            N🅪Sg+  NPl/V3   I/C+  J+            NPl+     VLB\n> solvable on  various theoretical models of computation . The second    question is\n# J        J/P J       J           NPl/V3 P  NSg         . D+  NSg/VB/J+ NSg/VB+  VL3\n> addressed by    computational complexity theory , which studies the time      and  space\n# VP/J      NSg/P J             NSg        N🅪Sg+  . I/C+  NPl/V3  D   N🅪Sg/VB/J VB/C N🅪Sg/VB+\n> costs   associated with different approaches to solving a   multitude of\n# NPl/V3+ VP/J       P    NSg/J     NPl/V3+    P  Nᴹ/Vg/J D/P NSg       P\n> computational problems .\n# J             NPl+     .\n>\n#\n> The famous P         = NP  ? problem , one     of the Millennium Prize     Problems , is  an  open\n# D+  VB/J+  NSg/VB/P+ . NPr . NSg/J+  . NSg/I/J P  D+  NSg+       NSg/VB/J+ NPl+     . VL3 D/P NSg/VB/J\n> problem in        the theory of computation .\n# NSg/J   NPr/J/R/P D   N🅪Sg   P  NSg         .\n>\n#\n>              Information and  coding   theory\n# HeadingStart Nᴹ          VB/C Nᴹ/Vg/J+ N🅪Sg+\n>\n#\n> Information theory , closely related to probability and  statistics , is  related to\n# Nᴹ+         N🅪Sg+  . R       J       P  NSg         VB/C NPl/V3+    . VL3 J       P\n> the quantification of information . This    was  developed by    Claude Shannon to find\n# D   NSg            P  Nᴹ+         . I/Ddem+ VLPt VP/J      NSg/P NPr+   NPr+    P  NSg/VB\n> fundamental limits on  signal    processing operations such  as    compressing data  and\n# NSg/J       NPl/V3 J/P NSg/VB/J+ Nᴹ/Vg/J+   NPl+       NSg/I R/C/P Nᴹ/Vg/J     N🅪Pl+ VB/C\n> on  reliably storing and  communicating data  . Coding   theory is  the study  of the\n# J/P R        Nᴹ/Vg/J VB/C Nᴹ/Vg/J       N🅪Pl+ . Nᴹ/Vg/J+ N🅪Sg+  VL3 D   NSg/VB P  D\n> properties of codes   ( systems for   converting information from one     form     to\n# NPl/V3     P  NPl/V3+ . NPl+    R/C/P Nᴹ/Vg/J    Nᴹ+         P    NSg/I/J N🅪Sg/VB+ P\n> another ) and  their fitness for   a    specific application . Codes   are used for   data\n# I/D     . VB/C D$+   Nᴹ      R/C/P D/P+ NSg/J+   NSg+        . NPl/V3+ VLB VP/J R/C/P N🅪Pl+\n> compression , cryptography , error   detection and  correction , and  more         recently\n# NSg+        . Nᴹ           . NSg/VB+ N🅪Sg      VB/C NSg+       . VB/C NPr/I/J/R/Dq R\n> also for   network coding   . Codes   are studied for   the purpose of designing\n# R/C  R/C/P NSg/VB+ Nᴹ/Vg/J+ . NPl/V3+ VLB VP/J    R/C/P D   N🅪Sg/VB P  Nᴹ/Vg/J\n> efficient and  reliable data  transmission methods .\n# NSg/J     VB/C NSg/J+   N🅪Pl+ N🅪Sg+        NPl/V3+ .\n>\n#\n>              Data  structures and  algorithms\n# HeadingStart N🅪Pl+ NPl/V3     VB/C NPl+\n>\n#\n> Data  structures and  algorithms are the studies of commonly used computational\n# N🅪Pl+ NPl/V3     VB/C NPl+       VLB D   NPl/V3  P  R        VP/J J\n> methods and  their computational efficiency .\n# NPl/V3  VB/C D$+   J+            N🅪Sg+      .\n>\n#\n>              Programming language theory and  formal methods\n# HeadingStart Nᴹ/Vg/J+    N🅪Sg+    N🅪Sg   VB/C NSg/J  NPl/V3+\n>\n#\n> Programming language theory is  a   branch of computer science  that          deals  with the\n# Nᴹ/Vg/J+    N🅪Sg+    N🅪Sg+  VL3 D/P NPr/VB P  NSg+     N🅪Sg/VB+ NSg/I/C/Ddem+ NPl/V3 P    D\n> design   , implementation , analysis , characterization , and  classification of\n# N🅪Sg/VB+ . N🅪Sg+          . N🅪Sg+    . N🅪Sg             . VB/C N🅪Sg           P\n> programming languages and  their individual features . It       falls   within  the\n# Nᴹ/Vg/J+    NPl       VB/C D$+   NSg/J+     NPl/V3+  . NPr/ISg+ NPl/V3+ NSg/J/P D\n> discipline of computer science  , both   depending on  and  affecting mathematics ,\n# NSg/VB     P  NSg+     N🅪Sg/VB+ . I/C/Dq Nᴹ/Vg/J   J/P VB/C Nᴹ/Vg/J   Nᴹ+         .\n> software engineering , and  linguistics . It       is  an  active research area , with\n# Nᴹ+      Nᴹ/Vg/J+    . VB/C Nᴹ+         . NPr/ISg+ VL3 D/P NSg/J  Nᴹ/VB    N🅪Sg . P\n> numerous dedicated academic journals .\n# J+       VP/J+     NSg/J+   NPl/V3+  .\n>\n#\n> Formal methods are a   particular kind  of mathematically based technique for   the\n# NSg/J+ NPl/V3+ VLB D/P NSg/J      NSg/J P  R              VP/J  N🅪Sg+     R/C/P D+\n> specification , development and  verification of software and  hardware systems .\n# NSg+          . N🅪Sg        VB/C N🅪Sg         P  Nᴹ       VB/C Nᴹ+      NPl+    .\n> The use     of formal methods for   software and  hardware design   is  motivated by    the\n# D   N🅪Sg/VB P  NSg/J  NPl/V3  R/C/P Nᴹ       VB/C Nᴹ+      N🅪Sg/VB+ VL3 VP/J      NSg/P D+\n> expectation that          , as    in        other     engineering disciplines , performing appropriate\n# N🅪Sg+       NSg/I/C/Ddem+ . R/C/P NPr/J/R/P NSg/VB/J+ Nᴹ/Vg/J+    NPl/V3+     . Nᴹ/Vg/J    VB/J+\n> mathematical analysis can     contribute to the reliability and  robustness of a\n# J+           N🅪Sg+    NPr/VXB NSg/VB     P  D+  Nᴹ+         VB/C NSg        P  D/P\n> design   . They form    an  important theoretical underpinning for   software\n# N🅪Sg/VB+ . IPl+ N🅪Sg/VB D/P J         J           NSg/Vg       R/C/P Nᴹ+\n> engineering , especially where   safety  or    security is  involved . Formal methods are\n# Nᴹ/Vg/J+    . R          NSg/R/C N🅪Sg/VB NPr/C Nᴹ+      VL3 VP/J     . NSg/J+ NPl/V3+ VLB\n> a   useful adjunct  to software testing  since they help   avoid errors  and  can     also\n# D/P J      NSg/VB/J P  Nᴹ       Nᴹ/Vg/J+ C/P   IPl+ NSg/VB VB    NPl/V3+ VB/C NPr/VXB R/C\n> give   a   framework for   testing  . For   industrial use      , tool    support  is  required .\n# NSg/VB D/P NSg       R/C/P Nᴹ/Vg/J+ . R/C/P NSg/J      N🅪Sg/VB+ . NSg/VB+ N🅪Sg/VB+ VL3 VP/J     .\n> However , the high       cost       of using   formal methods means  that         they are usually only\n# C       . D   NSg/VB/J/R N🅪Sg/VBP/J P  Nᴹ/Vg/J NSg/J+ NPl/V3+ NPl/V3 NSg/I/C/Ddem IPl+ VLB R       J/R/C\n> used in        the development of high       - integrity and  life     - critical systems , where\n# VP/J NPr/J/R/P D   N🅪Sg        P  NSg/VB/J/R . Nᴹ        VB/C N🅪Sg/VB+ . NSg/J    NPl     . NSg/R/C\n> safety  or    security is  of utmost importance . Formal methods are best       described as\n# N🅪Sg/VB NPr/C Nᴹ+      VL3 P  NSg/J+ Nᴹ+        . NSg/J+ NPl/V3+ VLB NPr/VXB/JS VP/J      R/C/P\n> the application of a   fairly broad variety of theoretical computer science\n# D   NSg         P  D/P R      NSg/J N🅪Sg    P  J+          NSg+     N🅪Sg/VB+\n> fundamentals , in        particular logic    calculi , formal languages , automata theory ,\n# NPl+         . NPr/J/R/P NSg/J+     Nᴹ/VB/J+ NSg     . NSg/J  NPl+      . NPl      N🅪Sg+  .\n> and  program semantics , but     also type    systems and  algebraic data  types   to\n# VB/C NPr/VB+ NPl+      . NSg/C/P R/C  NSg/VB+ NPl     VB/C J         N🅪Pl+ NPl/V3+ P\n> problems in        software and  hardware specification and  verification .\n# NPl      NPr/J/R/P Nᴹ       VB/C Nᴹ+      NSg           VB/C N🅪Sg+        .\n>\n#\n>              Applied computer science\n# HeadingStart VP/J    NSg+     N🅪Sg/VB+\n>\n#\n>              Computer graphics and  visualization\n# HeadingStart NSg+     NSgPl    VB/C NSg+\n>\n#\n> Computer graphics is  the study  of digital visual contents and  involves the\n# NSg+     NSgPl+   VL3 D   NSg/VB P  NSg/J+  NSg/J+ NPl/V3+  VB/C V3       D\n> synthesis and  manipulation of image    data  . The study   is  connected to many       other\n# N🅪Sg      VB/C N🅪Sg         P  N🅪Sg/VB+ N🅪Pl+ . D+  NSg/VB+ VL3 VP/J      P  NSg/I/J/Dq NSg/VB/J\n> fields   in        computer science  , including computer vision  , image    processing , and\n# NPrPl/V3 NPr/J/R/P NSg+     N🅪Sg/VB+ . Nᴹ/Vg/J   NSg+     N🅪Sg/VB . N🅪Sg/VB+ Nᴹ/Vg/J+   . VB/C\n> computational geometry , and  is  heavily applied in        the fields   of special  effects\n# J+            N🅪Sg+    . VB/C VL3 R       VP/J    NPr/J/R/P D   NPrPl/V3 P  NSg/VB/J NPl/V3\n> and  video    games   .\n# VB/C N🅪Sg/VB+ NPl/V3+ .\n>\n#\n>              Image   and  sound      processing\n# HeadingStart N🅪Sg/VB VB/C N🅪Sg/VB/J+ Nᴹ/Vg/J+\n>\n#\n> Information can     take   the form    of images  , sound      , video    or    other    multimedia . Bits\n# Nᴹ+         NPr/VXB NSg/VB D   N🅪Sg/VB P  NPl/V3+ . N🅪Sg/VB/J+ . N🅪Sg/VB+ NPr/C NSg/VB/J Nᴹ/J       . NPl/V3\n> of information can     be       streamed via   signals . Its     processing is  the central notion\n# P  Nᴹ+         NPr/VXB NSg/VLXB VP/J     NSg/P NPl/V3  . ISg/D$+ Nᴹ/Vg/J+   VL3 D   NPr/J   NSg\n> of informatics , the European view    on  computing , which studies information\n# P  Nᴹ          . D   NSg/J    NSg/VB+ J/P Nᴹ/Vg/J+  . I/C+  NPl/V3+ Nᴹ+\n> processing algorithms independently of the type   of information carrier – whether\n# Nᴹ/Vg/J+   NPl+       R             P  D   NSg/VB P  Nᴹ+         NPr+    . I/C\n> it       is  electrical , mechanical or    biological . This    field   plays  important role in\n# NPr/ISg+ VL3 NSg/J      . NSg/J      NPr/C NSg/J      . I/Ddem+ NSg/VB+ NPl/V3 J         NSg  NPr/J/R/P\n> information theory , telecommunications , information engineering and  has\n# Nᴹ+         N🅪Sg+  . Nᴹ+                . Nᴹ+         Nᴹ/Vg/J+    VB/C V3\n> applications in        medical image    computing and  speech   synthesis , among others  . What\n# NPl          NPr/J/R/P NSg/J   N🅪Sg/VB+ Nᴹ/Vg/J   VB/C N🅪Sg/VB+ N🅪Sg+     . P     NPl/V3+ . NSg/I+\n> is  the lower     bound    on  the complexity of fast       Fourier transform algorithms ? is\n# VL3 D   NSg/VB/JC NSg/VP/J J/P D   NSg        P  NSg/VB/J/R NPr     NSg/VB    NPl+       . VL3\n> one     of the unsolved problems in        theoretical computer science  .\n# NSg/I/J P  D   VP/J     NPl      NPr/J/R/P J+          NSg+     N🅪Sg/VB+ .\n>\n#\n>              Computational science  , finance and  engineering\n# HeadingStart J             N🅪Sg/VB+ . N🅪Sg/VB VB/C Nᴹ/Vg/J+\n>\n#\n> Scientific computing ( or    computational science  ) is  the field  of study   concerned\n# J          Nᴹ/Vg/J   . NPr/C J+            N🅪Sg/VB+ . VL3 D   NSg/VB P  NSg/VB+ VP/J\n> with constructing mathematical models and  quantitative analysis techniques and\n# P    Nᴹ/Vg/J      J            NPl/V3 VB/C J+           N🅪Sg+    NPl+       VB/C\n> using   computers to analyze and  solve  scientific problems . A   major    usage of\n# Nᴹ/Vg/J NPl+      P  VB      VB/C NSg/VB J+         NPl+     . D/P NPr/VB/J N🅪Sg  P\n> scientific computing is  simulation of various processes , including computational\n# J+         Nᴹ/Vg/J+  VL3 N🅪Sg       P  J+      NPl/V3+   . Nᴹ/Vg/J   J+\n> fluid   dynamics , physical , electrical , and  electronic systems and  circuits , as\n# N🅪Sg/J+ NSgPl+   . NSg/J    . NSg/J      . VB/C J+         NPl+    VB/C NPl/V3   . R/C/P\n> well       as    societies and  social situations ( notably war      games   ) along with their\n# NSg/VB/J/R R/C/P NPl       VB/C NSg/J  +          . R       N🅪Sg/VB+ NPl/V3+ . P     P    D$+\n> habitats , among many       others  . Modern computers enable optimization of such\n# NPl      . P     NSg/I/J/Dq NPl/V3+ . NSg/J  NPl+      VB     N🅪Sg         P  NSg/I\n> designs as    complete  aircraft . Notable in        electrical and  electronic circuit\n# NPl/V3+ R/C/P NSg/VB/J+ NSgPl+   . J       NPr/J/R/P NSg/J      VB/C J+         NSg/VB+\n> design   are SPICE    , as    well       as    software for   physical realization   of new   ( or\n# N🅪Sg/VB+ VLB N🅪Sg/VB+ . R/C/P NSg/VB/J/R R/C/P Nᴹ       R/C/P NSg/J    NSg/Comm/NoAm P  NSg/J . NPr/C\n> modified ) designs . The latter includes essential design   software for   integrated\n# NSg/VP/J . NPl/V3+ . D   NSg/J  NPl/V3   NSg/J+    N🅪Sg/VB+ Nᴹ+      R/C/P VP/J\n> circuits .\n# NPl/V3   .\n>\n#\n>              Human    – computer interaction\n# HeadingStart NSg/VB/J . NSg+     N🅪Sg+\n>\n#\n> Human    – computer interaction ( HCI ) is  the field  of study  and  research concerned\n# NSg/VB/J . NSg+     N🅪Sg+       . ?   . VL3 D   NSg/VB P  NSg/VB VB/C Nᴹ/VB+   VP/J\n> with the design   and  use     of computer systems , mainly based on  the analysis of the\n# P    D   N🅪Sg/VB+ VB/C N🅪Sg/VB P  NSg+     NPl+    . R      VP/J  J/P D   N🅪Sg     P  D\n> interaction between humans and  computer interfaces . HCI has several subfields\n# N🅪Sg        NSg/P   NPl/V3 VB/C NSg+     NPl/V3+    . ?   V3  J/Dq    NPl\n> that         focus    on  the relationship between emotions , social behavior and  brain\n# NSg/I/C/Ddem N🅪Sg/VB+ J/P D   NSg          NSg/P   NPl+     . NSg/J  N🅪Sg/Am  VB/C NPr🅪Sg/VB+\n> activity with computers .\n# NSg      P    NPl+      .\n>\n#\n>              Software engineering\n# HeadingStart Nᴹ+      Nᴹ/Vg/J+\n>\n#\n> Software engineering is  the study  of designing , implementing , and  modifying the\n# Nᴹ+      Nᴹ/Vg/J+    VL3 D   NSg/VB P  Nᴹ/Vg/J+  . Nᴹ/Vg/J      . VB/C Nᴹ/Vg/J   D\n> software in        order    to ensure it       is  of high        quality , affordable , maintainable , and\n# Nᴹ+      NPr/J/R/P N🅪Sg/VB+ P  VB     NPr/ISg+ VL3 P  NSg/VB/J/R+ N🅪Sg/J+ . J          . J            . VB/C\n> fast       to build  . It       is  a   systematic approach to software design   , involving the\n# NSg/VB/J/R P  NSg/VB . NPr/ISg+ VL3 D/P J          N🅪Sg/VB  P  Nᴹ       N🅪Sg/VB+ . Nᴹ/Vg/J   D\n> application of engineering practices to software . Software engineering deals\n# NSg         P  Nᴹ/Vg/J+    NPl/V3+   P  Nᴹ       . Nᴹ+      Nᴹ/Vg/J+    NPl/V3+\n> with the organizing and  analyzing of software — it       does    not     just deal     with the\n# P    D   Nᴹ/Vg/J    VB/C Nᴹ/Vg/J   P  Nᴹ+      . NPr/ISg+ NPl/VX3 NSg/R/C J/R  NSg/VB/J P    D+\n> creation or    manufacture of new    software , but     its     internal arrangement and\n# NSg+     NPr/C NSg/VB      P  NSg/J+ Nᴹ+      . NSg/C/P ISg/D$+ J        NSg         VB/C\n> maintenance . For   example software testing  , systems engineering , technical debt\n# Nᴹ+         . R/C/P NSg/VB+ Nᴹ+      Nᴹ/Vg/J+ . NPl+    Nᴹ/Vg/J+    . NSg/J     N🅪Sg\n> and  software development processes .\n# VB/C Nᴹ+      N🅪Sg+       NPl/V3+   .\n>\n#\n>              Artificial intelligence\n# HeadingStart J+         N🅪Sg+\n>\n#\n> Artificial intelligence ( AI      ) aims   to or    is  required to synthesize\n# J          N🅪Sg         . NPr🅪Sg+ . NPl/V3 P  NPr/C VL3 VP/J     P  VB\n> goal    - orientated processes such  as    problem - solving , decision - making  ,\n# NSg/VB+ . VP/J       NPl/V3    NSg/I R/C/P NSg/J+  . Nᴹ/Vg/J . NSg/VB+  . Nᴹ/Vg/J .\n> environmental adaptation , learning , and  communication found  in        humans and\n# NSg/J         NSg+       . Nᴹ/Vg/J+ . VB/C N🅪Sg+         NSg/VP NPr/J/R/P NPl/V3 VB/C\n> animals . From its     origins in        cybernetics and  in        the Dartmouth Conference ( 1956 ) ,\n# NPl+    . P    ISg/D$+ NPl+    NPr/J/R/P Nᴹ          VB/C NPr/J/R/P D   NPr+      NSg/VB+    . #    . .\n> artificial intelligence research has been     necessarily cross       - disciplinary ,\n# J          N🅪Sg+        Nᴹ/VB+   V3  NSg/VLPp R           NPr/VB/J/P+ . NSg/J        .\n> drawing   on  areas of expertise such  as    applied mathematics , symbolic logic    ,\n# N🅪Sg/Vg/J J/P NPl   P  Nᴹ/VB+    NSg/I R/C/P VP/J    Nᴹ+         . J        Nᴹ/VB/J+ .\n> semiotics , electrical engineering , philosophy of mind    , neurophysiology , and\n# Nᴹ        . NSg/J      Nᴹ/Vg/J+    . N🅪Sg/VB    P  NSg/VB+ . Nᴹ              . VB/C\n> social intelligence . AI      is  associated in        the popular mind    with robotic\n# NSg/J  N🅪Sg+        . NPr🅪Sg+ VL3 VP/J       NPr/J/R/P D   NSg/J   NSg/VB+ P    J+\n> development , but     the main     field  of practical application has been     as    an  embedded\n# N🅪Sg+       . NSg/C/P D   NSg/VB/J NSg/VB P  NSg/J+    NSg+        V3  NSg/VLPp R/C/P D/P VP/J\n> component in        areas of software development , which require computational\n# NSg/J     NPr/J/R/P NPl   P  Nᴹ+      N🅪Sg+       . I/C+  NSg/VB  J+\n> understanding . The starting point   in        the late   1940s was  Alan Turing's question\n# N🅪Sg/Vg/J+    . D   Nᴹ/Vg/J  NSg/VB+ NPr/J/R/P D+  NSg/J+ #d    VLPt NPr  NPr$     NSg/VB+\n> \" Can     computers think  ? \" , and  the question remains effectively unanswered ,\n# . NPr/VXB NPl+      NSg/VB . . . VB/C D+  NSg/VB+  NPl/V3  R           J          .\n> although the Turing test    is  still      used to assess computer output    on  the scale   of\n# C        D   NPr    NSg/VB+ VL3 NSg/VB/J/R VP/J P  VB     NSg+     N🅪Sg/VBP+ J/P D   N🅪Sg/VB P\n> human    intelligence . But     the automation of evaluative and  predictive tasks   has\n# NSg/VB/J N🅪Sg+        . NSg/C/P D   N🅪Sg       P  J          VB/C J          NPl/V3+ V3\n> been     increasingly successful as    a   substitute for   human    monitoring and\n# NSg/VLPp R            J          R/C/P D/P NSg/VB+    R/C/P NSg/VB/J Nᴹ/Vg/J    VB/C\n> intervention in        domains of computer application involving complex  real  - world\n# NSg+         NPr/J/R/P NPl     P  NSg+     NSg+        Nᴹ/Vg/J   NSg/VB/J NSg/J . NSg/VB+\n> data  .\n# N🅪Pl+ .\n>\n#\n>              Computer systems\n# HeadingStart NSg+     NPl+\n>\n#\n>              Computer architecture and  microarchitecture\n# HeadingStart NSg+     N🅪Sg+        VB/C NSg\n>\n#\n> Computer architecture , or    digital computer organization , is  the conceptual\n# NSg+     N🅪Sg+        . NPr/C NSg/J+  NSg+     N🅪Sg+        . VL3 D   J\n> design   and  fundamental operational structure of a    computer system . It       focuses\n# N🅪Sg/VB+ VB/C NSg/J       J           N🅪Sg/VB   P  D/P+ NSg+     NSg+   . NPr/ISg+ NPl/V3\n> largely on  the way    by    which the central processing unit performs internally and\n# R       J/P D+  NSg/J+ NSg/P I/C+  D+  NPr/J+  Nᴹ/Vg/J+   NSg+ V3       R          VB/C\n> accesses addresses in        memory . Computer engineers study   computational logic   and\n# NPl/V3   NPl/V3    NPr/J/R/P N🅪Sg+  . NSg+     NPl/V3+   NSg/VB+ J             Nᴹ/VB/J VB/C\n> design  of computer hardware , from individual processor components ,\n# N🅪Sg/VB P  NSg+     Nᴹ+      . P    NSg/J+     NSg+      NPl+       .\n> microcontrollers , personal computers to supercomputers and  embedded systems . The\n# NPl              . NSg/J    NPl+      P  NPl            VB/C VP/J     NPl+    . D\n> term     \" architecture \" in        computer literature can     be       traced to the work    of Lyle R.\n# NSg/VB/J . N🅪Sg+        . NPr/J/R/P NSg+     Nᴹ+        NPr/VXB NSg/VLXB VP/J   P  D   N🅪Sg/VB P  NPr  ?\n> Johnson and  Frederick P. Brooks   Jr     . , members of the Machine Organization\n# NPr     VB/C NPr+      ?  NPrPl/V3 NSg/J+ . . NPl/V3  P  D+  NSg/VB+ N🅪Sg+\n> department in        IBM's main      research center       in        1959 .\n# NSg+       NPr/J/R/P NPr$  NSg/VB/J+ Nᴹ/VB+   NSg/VB/J/Am+ NPr/J/R/P #    .\n>\n#\n>              Concurrent , parallel and  distributed computing\n# HeadingStart NSg/J      . NSg/VB/J VB/C VP/J        Nᴹ/Vg/J+\n>\n#\n> Concurrency is  a   property of systems in        which several computations are executing\n# N🅪Sg        VL3 D/P NSg/VB   P  NPl+    NPr/J/R/P I/C+  J/Dq    NPl          VLB Nᴹ/Vg/J\n> simultaneously , and  potentially interacting with each other    . A   number     of\n# R              . VB/C R           Nᴹ/Vg/J     P    Dq   NSg/VB/J . D/P N🅪Sg/VB/JC P\n> mathematical models  have    been     developed for   general  concurrent computation\n# J+           NPl/V3+ NSg/VXB NSg/VLPp VP/J      R/C/P NSg/VB/J NSg/J      NSg\n> including Petri nets   , process calculi and  the parallel random   access   machine\n# Nᴹ/Vg/J   ?     NPl/V3 . NSg/VB+ NSg     VB/C D   NSg/VB/J NSg/VB/J N🅪Sg/VB+ NSg/VB+\n> model     . When    multiple  computers are connected in        a    network while      using\n# NSg/VB/J+ . NSg/I/C NSg/J/Dq+ NPl+      VLB VP/J      NPr/J/R/P D/P+ NSg/VB+ NSg/VB/C/P Nᴹ/Vg/J\n> concurrency , this    is  known as    a   distributed system . Computers within  that\n# N🅪Sg        . I/Ddem+ VL3 VPp/J R/C/P D/P VP/J+       NSg+   . NPl       NSg/J/P NSg/I/C/Ddem+\n> distributed system have    their own       private   memory , and  information can     be\n# VP/J        NSg+   NSg/VXB D$+   NSg/VB/J+ NSg/VB/J+ N🅪Sg+  . VB/C Nᴹ+         NPr/VXB NSg/VLXB\n> exchanged to achieve common    goals   .\n# VP/J      P  VB      NSg/VB/J+ NPl/V3+ .\n>\n#\n>              Computer networks\n# HeadingStart NSg+     NPl/V3+\n>\n#\n> This   branch of computer science  aims   to manage networks between computers\n# I/Ddem NPr/VB P  NSg+     N🅪Sg/VB+ NPl/V3 P  NSg/VB NPl/V3   NSg/P   NPl+\n> worldwide .\n# J         .\n>\n#\n>              Computer security and  cryptography\n# HeadingStart NSg+     Nᴹ+      VB/C Nᴹ\n>\n#\n> Computer security is  a   branch of computer technology with the objective of\n# NSg+     Nᴹ+      VL3 D/P NPr/VB P  NSg+     N🅪Sg+      P    D   NSg/J     P\n> protecting information from unauthorized access   , disruption , or    modification\n# Nᴹ/Vg/J    Nᴹ+         P    J            N🅪Sg/VB+ . N🅪Sg+      . NPr/C N🅪Sg+\n> while      maintaining the accessibility and  usability of the system for   its     intended\n# NSg/VB/C/P Nᴹ/Vg/J     D   Nᴹ+           VB/C Nᴹ        P  D   NSg+   R/C/P ISg/D$+ NSg/VP/J\n> users .\n# NPl+  .\n>\n#\n> Historical cryptography is  the art       of writing and  deciphering secret   messages .\n# NSg/J      Nᴹ           VL3 D   NPr🅪Sg/VB P  Nᴹ/Vg/J VB/C Nᴹ/Vg/J     NSg/VB/J NPl/V3+  .\n> Modern cryptography is  the scientific study  of problems relating to distributed\n# NSg/J  Nᴹ           VL3 D   J          NSg/VB P  NPl+     Nᴹ/Vg/J  P  VP/J\n> computations that          can     be       attacked . Technologies studied in        modern cryptography\n# NPl          NSg/I/C/Ddem+ NPr/VXB NSg/VLXB VP/J     . NPl+         VP/J    NPr/J/R/P NSg/J  Nᴹ\n> include symmetric and  asymmetric encryption , digital signatures , cryptographic\n# NSg/VB  J         VB/C J          N🅪Sg       . NSg/J   NPl+       . J\n> hash    functions , key      - agreement protocols , blockchain , zero     - knowledge proofs , and\n# NSg/VB+ NPl/V3+   . NPr/VB/J . N🅪Sg+     NPl/V3    . NSg        . NSg/VB/J . Nᴹ+       NPl/V3 . VB/C\n> garbled circuits .\n# VP/J    NPl/V3   .\n>\n#\n>              Databases and  data  mining\n# HeadingStart NPl/V3    VB/C N🅪Pl+ Nᴹ/Vg/J+\n>\n#\n> A    database is  intended to organize , store   , and  retrieve large amounts of data\n# D/P+ NSg/VB+  VL3 NSg/VP/J P  VB       . NSg/VB+ . VB/C NSg/VB   NSg/J NPl/V3  P  N🅪Pl+\n> easily . Digital databases are managed using   database management systems to\n# R      . NSg/J+  NPl/V3+   VLB VP/J    Nᴹ/Vg/J NSg/VB+  N🅪Sg+      NPl+    P\n> store  , create , maintain , and  search   data  , through database models and  query\n# NSg/VB . VB/J   . VB       . VB/C N🅪Sg/VB+ N🅪Pl+ . NSg/J/P NSg/VB+  NPl/V3 VB/C NSg/VB+\n> languages . Data  mining   is  a   process of discovering patterns in        large data  sets   .\n# NPl+      . N🅪Pl+ Nᴹ/Vg/J+ VL3 D/P NSg/VB  P  Nᴹ/Vg/J     NPl/V3+  NPr/J/R/P NSg/J N🅪Pl+ NPl/V3 .\n>\n#\n>              Discoveries\n# HeadingStart NPl+\n>\n#\n> The philosopher of computing Bill    Rapaport noted three Great Insights of\n# D   NSg         P  Nᴹ/Vg/J+  NPr/VB+ ?        VP/J  NSg   NSg/J NPl      P\n> Computer Science  :\n# NSg+     N🅪Sg/VB+ .\n>\n#\n>\n#\n>\n#\n> Gottfried Wilhelm Leibniz's , George Boole's , Alan Turing's , Claude Shannon's ,\n# ?         NPr     NPr$      . NPr+   NPr$    . NPr+ NPr$     . NPr+   NPr$      .\n> and  Samuel Morse's insight : there are only  two objects that         a   computer has to\n# VB/C NPr+   NPr$    N🅪Sg+   . R+    VLB J/R/C NSg NPl/V3+ NSg/I/C/Ddem D/P NSg+     V3  P\n> deal     with in        order    to represent \" anything  \" . [ note    4 ]\n# NSg/VB/J P    NPr/J/R/P N🅪Sg/VB+ P  VB        . NSg/I/VB+ . . . NSg/VB+ # .\n>\n#\n> All          the information about any    computable problem can     be       represented using\n# NSg/I/J/C/Dq D   Nᴹ+         J/P   I/R/Dq J          NSg/J+  NPr/VXB NSg/VLXB VP/J        Nᴹ/Vg/J\n> only  0 and  1 ( or    any    other    bistable pair    that          can     flip     - flop    between two\n# J/R/C # VB/C # . NPr/C I/R/Dq NSg/VB/J J        NSg/VB+ NSg/I/C/Ddem+ NPr/VXB NSg/VB/J . NSg/VB+ NSg/P   NSg\n> easily distinguishable states    , such  as    \" on  / off        \" , \" magnetized / de   - magnetized \" ,\n# R      J               NPrPl/V3+ . NSg/I R/C/P . J/P . NSg/VB/J/P . . . VP/J       . NPr+ . VP/J       . .\n> \" high       - voltage / low        - voltage \" , etc. ) .\n# . NSg/VB/J/R . NSg     . NSg/VB/J/R . NSg+    . . +    . .\n>\n#\n>\n#\n>\n#\n> Alan Turing's insight : there are only  five actions that         a   computer has to\n# NPr+ NPr$     N🅪Sg+   . R+    VLB J/R/C NSg  NPl/V3+ NSg/I/C/Ddem D/P NSg+     V3  P\n> perform in        order    to do  \" anything  \" .\n# VB      NPr/J/R/P N🅪Sg/VB+ P  VXB . NSg/I/VB+ . .\n>\n#\n> Every algorithm can     be       expressed in        a   language for   a   computer consisting of\n# Dq    NSg       NPr/VXB NSg/VLXB VP/J      NPr/J/R/P D/P N🅪Sg+    R/C/P D/P NSg+     Nᴹ/Vg/J    P\n> only  five basic instructions :\n# J/R/C NSg  NPr/J NPl+         .\n>\n#\n>\n#\n>\n#\n> move   left     one      location ;\n# NSg/VB NPr/VP/J NSg/I/J+ N🅪Sg+    .\n>\n#\n> move   right     one      location ;\n# NSg/VB NPr/VB/J+ NSg/I/J+ N🅪Sg+    .\n>\n#\n> read    symbol  at    current location ;\n# NSg/VBP NSg/VB+ NSg/P NSg/J+  N🅪Sg+    .\n>\n#\n> print     0 at    current location ;\n# N🅪Sg/VB/J # NSg/P NSg/J+  N🅪Sg+    .\n>\n#\n> print     1 at    current location .\n# N🅪Sg/VB/J # NSg/P NSg/J+  N🅪Sg+    .\n>\n#\n>\n#\n>\n#\n> Corrado Böhm and  Giuseppe Jacopini's insight : there are only  three ways of\n# ?       ?    VB/C NSg      ?          N🅪Sg+   . R+    VLB J/R/C NSg   NPl  P\n> combining these  actions ( into more         complex  ones ) that          are needed in        order    for\n# Nᴹ/Vg/J   I/Ddem NPl/V3+ . P    NPr/I/J/R/Dq NSg/VB/J NPl+ . NSg/I/C/Ddem+ VLB VP/J   NPr/J/R/P N🅪Sg/VB+ R/C/P\n> a   computer to do  \" anything  \" .\n# D/P NSg+     P  VXB . NSg/I/VB+ . .\n>\n#\n> Only  three rules   are needed to combine any    set       of basic  instructions into more\n# J/R/C NSg+  NPl/V3+ VLB VP/J   P  NSg/VB  I/R/Dq NPr/VBP/J P  NPr/J+ NPl+         P    NPr/I/J/R/Dq\n> complex   ones :\n# NSg/VB/J+ NPl+ .\n>\n#\n>\n#\n>\n#\n> sequence : first do  this    , then      do  that          ;\n# NSg/VB+  . NSg/J VXB I/Ddem+ . NSg/J/R/C VXB NSg/I/C/Ddem+ .\n>\n#\n> selection : IF    such  - and  - such  is  the case      , THEN      do  this    , ELSE    do  that          ;\n# N🅪Sg+     . NSg/C NSg/I . VB/C . NSg/I VL3 D   NPr🅪Sg/VB . NSg/J/R/C VXB I/Ddem+ . NSg/J/C VXB NSg/I/C/Ddem+ .\n>\n#\n> repetition : WHILE      such  - and  - such  is  the case      , DO  this    . The three rules  of\n# N🅪Sg/VB+   . NSg/VB/C/P NSg/I . VB/C . NSg/I VL3 D   NPr🅪Sg/VB . VXB I/Ddem+ . D   NSg   NPl/V3 P\n> Boehm's and  Jacopini's insight can     be       further simplified with the use      of\n# ?       VB/C ?          N🅪Sg+   NPr/VXB NSg/VLXB VB/JC   VP/J       P    D   N🅪Sg/VB+ P\n> goto ( which means  it       is  more         elementary than structured programming ) .\n# ?    . I/C+  NPl/V3 NPr/ISg+ VL3 NPr/I/J/R/Dq NSg/J      C/P  VP/J       Nᴹ/Vg/J+    . .\n>\n#\n>\n#\n>\n#\n>              Programming paradigms\n# HeadingStart Nᴹ/Vg/J+    NPl+\n>\n#\n> Programming languages can     be       used to accomplish different tasks   in        different\n# Nᴹ/Vg/J+    NPl+      NPr/VXB NSg/VLXB VP/J P  VB         NSg/J     NPl/V3+ NPr/J/R/P NSg/J+\n> ways . Common    programming paradigms include :\n# NPl+ . NSg/VB/J+ Nᴹ/Vg/J+    NPl+      NSg/VB  .\n>\n#\n>\n#\n>\n#\n> Functional programming , a   style  of building   the structure and  elements of\n# NSg/J+     Nᴹ/Vg/J+    . D/P NSg/VB P  N🅪Sg/Vg/J+ D   N🅪Sg/VB   VB/C NPl/V3   P\n> computer programs  that          treats  computation as    the evaluation of mathematical\n# NSg+     NPrPl/V3+ NSg/I/C/Ddem+ NPl/V3+ NSg         R/C/P D   N🅪Sg       P  J\n> functions and  avoids state    and  mutable data  . It       is  a   declarative programming\n# NPl/V3+   VB/C V3     N🅪Sg/VB+ VB/C J       N🅪Pl+ . NPr/ISg+ VL3 D/P NSg/J       Nᴹ/Vg/J+\n> paradigm , which means  programming is  done      with expressions or    declarations\n# NSg+     . I/C+  NPl/V3 Nᴹ/Vg/J+    VL3 NSg/VPp/J P    NPl         NPr/C NPl+\n> instead of statements .\n# R       P  NPl/V3+    .\n>\n#\n> Imperative programming , a    programming paradigm that          uses   statements that\n# NSg/J+     Nᴹ/Vg/J+    . D/P+ Nᴹ/Vg/J+    NSg+     NSg/I/C/Ddem+ NPl/V3 NPl/V3+    NSg/I/C/Ddem+\n> change  a   program's state    . In        much         the same way    that         the imperative mood in\n# N🅪Sg/VB D/P NPr$      N🅪Sg/VB+ . NPr/J/R/P NSg/I/J/R/Dq D   I/J  NSg/J+ NSg/I/C/Ddem D   NSg/J      N🅪Sg NPr/J/R/P\n> natural languages expresses commands , an   imperative program consists of\n# NSg/J+  NPl+      NPl/V3    NPl/V3+  . D/P+ NSg/J+     NPr/VB+ NPl/V3   P\n> commands for   the computer to perform . Imperative programming focuses on\n# NPl/V3+  R/C/P D+  NSg+     P  VB      . NSg/J+     Nᴹ/Vg/J+    NPl/V3  J/P\n> describing how   a    program operates .\n# Nᴹ/Vg/J    NSg/C D/P+ NPr/VB+ V3       .\n>\n#\n> Object  - oriented programming , a    programming paradigm based on  the concept of\n# NSg/VB+ . NPr/VP/J Nᴹ/Vg/J+    . D/P+ Nᴹ/Vg/J+    NSg+     VP/J  J/P D   NSg/VB  P\n> \" objects \" , which may     contain data  , in        the form    of fields    , often known as\n# . NPl/V3+ . . I/C+  NPr/VXB VB      N🅪Pl+ . NPr/J/R/P D   N🅪Sg/VB P  NPrPl/V3+ . R     VPp/J R/C/P\n> attributes ; and  code     , in        the form    of procedures , often known as    methods . A\n# NPl/V3+    . VB/C N🅪Sg/VB+ . NPr/J/R/P D   N🅪Sg/VB P  NPl+       . R     VPp/J R/C/P NPl/V3+ . D/P\n> feature of objects is  that         an  object's procedures can     access   and  often modify\n# NSg/VB  P  NPl/V3+ VL3 NSg/I/C/Ddem D/P NSg$     NPl+       NPr/VXB N🅪Sg/VB+ VB/C R     VB\n> the data  fields   of the object  with which they are associated . Thus\n# D   N🅪Pl+ NPrPl/V3 P  D   NSg/VB+ P    I/C+  IPl+ VLB VP/J       . NSg\n> object  - oriented computer programs  are made out          of objects that          interact with\n# NSg/VB+ . NPr/VP/J NSg+     NPrPl/V3+ VLB VP   NSg/VB/J/R/P P  NPl/V3+ NSg/I/C/Ddem+ NSg/VB   P\n> one     another .\n# NSg/I/J I/D     .\n>\n#\n> Service - oriented programming , a    programming paradigm that          uses   \" services \" as\n# NSg/VB+ . NPr/VP/J Nᴹ/Vg/J+    . D/P+ Nᴹ/Vg/J+    NSg+     NSg/I/C/Ddem+ NPl/V3 . NPl/V3+  . R/C/P\n> the unit of computer work     , to design  and  implement integrated business\n# D   NSg  P  NSg+     N🅪Sg/VB+ . P  N🅪Sg/VB VB/C NSg/VB    VP/J       N🅪Sg/J+\n> applications and  mission critical software programs  .\n# NPl          VB/C NSg/VB+ NSg/J+   Nᴹ+      NPrPl/V3+ .\n>\n#\n> Many        languages offer     support for   multiple  paradigms , making  the distinction more\n# NSg/I/J/Dq+ NPl+      NSg/VB/JC N🅪Sg/VB R/C/P NSg/J/Dq+ NPl+      . Nᴹ/Vg/J D+  N🅪Sg+       NPr/I/J/R/Dq\n> a   matter  of style   than of technical capabilities .\n# D/P N🅪Sg/VB P  NSg/VB+ C/P  P  NSg/J+    NPl+         .\n>\n#\n>              Research\n# HeadingStart Nᴹ/VB+\n>\n#\n> Conferences are important events for   computer science  research . During these\n# NPl/V3+     VLB J         NPl/V3 R/C/P NSg+     N🅪Sg/VB+ Nᴹ/VB+   . VB/P   I/Ddem+\n> conferences , researchers from the public  and  private  sectors present  their\n# NPl/V3+     . NPl+        P    D   Nᴹ/VB/J VB/C NSg/VB/J NPl+    NSg/VB/J D$+\n> recent work     and  meet     . Unlike     in        most         other    academic fields    , in        computer science  ,\n# NSg/J+ N🅪Sg/VB+ VB/C NSg/VB/J . NSg/VB/J/P NPr/J/R/P NSg/I/J/R/Dq NSg/VB/J NSg/J+   NPrPl/V3+ . NPr/J/R/P NSg+     N🅪Sg/VB+ .\n> the prestige of conference papers  is  greater than that         of journal   publications .\n# D   Nᴹ/VB/J  P  NSg/VB+    NPl/V3+ VL3 JC      C/P  NSg/I/C/Ddem P  NSg/VB/J+ NPl+         .\n> One     proposed explanation for   this    is  the quick    development of this   relatively\n# NSg/I/J VP/J     N🅪Sg+       R/C/P I/Ddem+ VL3 D   NSg/VB/J N🅪Sg        P  I/Ddem R\n> new   field   requires rapid review and  distribution of results , a    task    better\n# NSg/J NSg/VB+ NPl/V3   NSg/J NSg/VB VB/C NSg          P  NPl/V3+ . D/P+ NSg/VB+ NSg/VXB/JC\n> handled by    conferences than by    journals .\n# VP/J    NSg/P NPl/V3+     C/P  NSg/P NPl/V3+  .\n"
  },
  {
    "path": "harper-core/tests/text/tagged/Difficult sentences.md",
    "content": ">              Difficult sentences\n# HeadingStart VB/J+     NPl/V3+\n>\n#\n> A   collection of difficult sentences to test   Harper's ability to correctly tag     unusual / uncommon but     correct  sentences .\n# D/P N🅪Sg       P  VB/J      NPl/V3+   P  NSg/VB NPr$     N🅪Sg+   P  R         NSg/VB+ NSg/J   . NSg/VB/J NSg/C/P NSg/VB/J NPl/V3+   .\n>\n#\n> Note    that         some      word    may     not     be       tagged correctly right    now       .\n# NSg/VB+ NSg/I/C/Ddem I/J/R/Dq+ NSg/VB+ NPr/VXB NSg/R/C NSg/VLXB VP/J   R         NPr/VB/J NSg/J/R/C .\n>\n#\n> Most         example sentences are taken from https://en.wiktionary.org/. License : CC         BY    - SA        4.0 .\n# NSg/I/J/R/Dq NSg/VB+ NPl/V3+   VLB VPp/J P    Url                         NSg/VB+ . NSg/VB/#r+ NSg/P . NPr/VB/J+ #   .\n>\n#\n>              A\n# HeadingStart D/P\n>\n#\n> With one      attack    , he       was  torn a   pieces .\n# P    NSg/I/J+ NSg/VB/J+ . NPr/ISg+ VLPt VB/J D/P NPl/V3 .\n> I       brush  my  teeth twice a    day     .\n# ISg/#r+ NSg/VB D$+ NPl+  R     D/P+ NPr🅪Sg+ .\n>\n#\n>              At\n# HeadingStart NSg/P\n>\n#\n>              Preposition\n# HeadingStart NSg/VB\n>\n#\n> Caesar was  at    Rome ; a   climate  treaty  was  signed at    Kyoto in        1997 .\n# NPr    VLPt NSg/P NPr+ . D/P N🅪Sg/VB+ NSg/VB+ VLPt VP/J   NSg/P NPr+  NPr/J/R/P #    .\n> I       was  at    Jim’s house   at    the corner of Fourth   Street   and  Vine .\n# ISg/#r+ VLPt NSg/P NPr$  NPr/VB+ NSg/P D   NSg/VB P  NPr/VB/J NSg/VB/J VB/C NSg+ .\n> at    the bottom   of the page    ; sitting  at    the table   ; at    church     ; at    sea\n# NSg/P D   NSg/VB/J P  D+  NPr/VB+ . NSg/Vg/J NSg/P D+  NSg/VB+ . NSg/P NPr🅪Sg/VB+ . NSg/P NSg+\n> Target  at    five miles  . Prepare torpedoes !\n# NSg/VB+ NSg/P NSg+ NPrPl+ . VB      NPl/VB    .\n> Look   out          ! UFO at    two o'clock !\n# NSg/VB NSg/VB/J/R/P . NSg NSg/P NSg R       .\n> Don't pick   at    your food !\n# VXB   NSg/VB NSg/P D$+  NSg+ .\n> My  cat       keeps  scratching at    the furniture .\n# D$+ NSg/VB/J+ NPl/V3 Nᴹ/Vg/J    NSg/P D+  Nᴹ+       .\n> I       was  working at    the problem all           day     .\n# ISg/#r+ VLPt Nᴹ/Vg/J NSg/P D+  NSg/J+  NSg/I/J/C/Dq+ NPr🅪Sg+ .\n> He       shouted at    her     .\n# NPr/ISg+ VP/J    NSg/P ISg/D$+ .\n> She  pointed at    the curious animal .\n# ISg+ VP/J    NSg/P D+  J+      NSg/J+ .\n> At    my  request , they agreed to move   us       to another hotel .\n# NSg/P D$+ NSg/VB+ . IPl+ VP/J   P  NSg/VB NPr/IPl+ P  I/D+    NSg+  .\n> He       jumped at    the sudden noise    .\n# NPr/ISg+ VP/J   NSg/P D+  NSg/J+ N🅪Sg/VB+ .\n> We   laughed at    the joke    .\n# IPl+ VP/J    NSg/P D+  NSg/VB+ .\n> She  was  mad      at    their comments .\n# ISg+ VLPt NSg/VB/J NSg/P D$+   NPl/V3+  .\n> men at    work     ; children at    play\n# NPl NSg/P N🅪Sg/VB+ . NPl+     NSg/P N🅪Sg/VB\n> The two  countries are at    war      .\n# D+  NSg+ NPl+      VLB NSg/P N🅪Sg/VB+ .\n> She  is  at    sixes and  sevens with him  .\n# ISg+ VL3 NSg/P NPl   VB/C NPl    P    ISg+ .\n>\n#\n>              Noun\n# HeadingStart NSg/VB+\n>\n#\n> The at    sign    .\n# D   NSg/P NSg/VB+ .\n>\n#\n>              Verb\n# HeadingStart NSg/VB+\n>\n#\n> ( In        online chats   : ) Don't @ me       ! Don't at    me       !\n# . NPr/J/R/P VB/J+  NPl/V3+ . . VXB   . NPr/ISg+ . VXB   NSg/P NPr/ISg+ .\n>\n#\n>              By\n# HeadingStart NSg/P\n>\n#\n>              Preposition\n# HeadingStart NSg/VB\n>\n#\n> The mailbox is  by    the bus     stop   .\n# D   NSg     VL3 NSg/P D   NSg/VB+ NSg/VB .\n> The stream  runs   by    our back     door    .\n# D+  NSg/VB+ NPl/V3 NSg/P D$+ NSg/VB/J NSg/VB+ .\n> He       ran     straight   by    me       .\n# NPr/ISg+ NSg/VPt NSg/VB/J/R NSg/P NPr/ISg+ .\n> Be       back     by    ten o'clock ! .\n# NSg/VLXB NSg/VB/J NSg/P NSg R       . .\n> We'll find   someone by    the end    of March   .\n# K     NSg/VB NSg/I+  NSg/P D   NSg/VB P  NPr/VB+ .\n> We   will    send   it       by    the first week  of July .\n# IPl+ NPr/VXB NSg/VB NPr/ISg+ NSg/P D   NSg/J NSg/J P  NPr+ .\n> The matter   was  decided  by    the chairman .\n# D+  N🅪Sg/VB+ VLPt NSg/VP/J NSg/P D+  NSg/VB+  .\n> The boat    was  swamped by    the water    .\n# D+  NSg/VB+ VLPt VP/J    NSg/P D+  N🅪Sg/VB+ .\n> He       was  protected by    his     body    armour       .\n# NPr/ISg+ VLPt VP/J      NSg/P ISg/D$+ NSg/VB+ NPr/VB/Comm+ .\n> There was  a    call    by    the unions   for   a   30 % pay      rise    .\n# R+    VLPt D/P+ NSg/VB+ NSg/P D   NPrPl/V3 R/C/P D/P #  . NSg/VB/J NSg/VB+ .\n> I       was  aghast by    what   I       saw     .\n# ISg/#r+ VLPt J      NSg/P NSg/I+ ISg/#r+ NSg/VPt .\n> There are many       well       - known plays  by    William Shakespeare .\n# R+    VLB NSg/I/J/Dq NSg/VB/J/R . VPp/J NPl/V3 NSg/P NPr+    NPr/VB+     .\n> I       avoided the guards  by    moving  only  when    they weren't looking .\n# ISg/#r+ VP/J    D+  NPl/V3+ NSg/P Nᴹ/Vg/J J/R/C NSg/I/C IPl+ VPt     Nᴹ/Vg/J .\n> By    Pythagoras ' theorem , we   can     calculate the length  of the hypotenuse .\n# NSg/P NPr        . NSg/VB  . IPl+ NPr/VXB VB        D   N🅪Sg/VB P  D   NSg        .\n> We   went    by    bus     .\n# IPl+ NSg/VPt NSg/P NSg/VB+ .\n> I       discovered it       by    chance    .\n# ISg/#r+ VP/J       NPr/ISg+ NSg/P NPr/VB/J+ .\n> By    ' maybe   ' she  means  ' no       ' .\n# NSg/P . NSg/J/R . ISg+ NPl/V3 . NSg/Dq/P . .\n> The electricity was  cut       off        , so          we   had to read    by    candlelight .\n# D+  Nᴹ+         VLPt NSg/VBP/J NSg/VB/J/P . NSg/I/J/R/C IPl+ VP  P  NSg/VBP NSg/P Nᴹ          .\n> By    the power      vested in        me       , I       now       pronounce you    man      and  wife      .\n# NSg/P D+  N🅪Sg/VB/J+ VP/J   NPr/J/R/P NPr/ISg+ . ISg/#r+ NSg/J/R/C NSg/VB    ISgPl+ NPr/VB/J VB/C NSg/VB/J+ .\n> By    Jove ! I       think  she's got it       !\n# NSg/P NPr+ . ISg/#r+ NSg/VB K     VP  NPr/ISg+ .\n> By    all           that          is  holy    , I'll put     an  end     to this    .\n# NSg/P NSg/I/J/C/Dq+ NSg/I/C/Ddem+ VL3 NSg/J/R . K    NSg/VBP D/P NSg/VB+ P  I/Ddem+ .\n> I       sorted the items   by    category .\n# ISg/#r+ VP/J   D   NPl/V3+ NSg/P NSg+     .\n> Table   1 shows  details of our employees broken down        by    sex    and  age      .\n# NSg/VB+ # NPl/V3 NPl/V3  P  D$+ NPl+      VPp/J  N🅪Sg/VB/J/P NSg/P NSg/VB VB/C N🅪Sg/VB+ .\n> Our stock      is  up         by    ten  percent .\n# D$+ N🅪Sg/VB/J+ VL3 NSg/VB/J/P NSg/P NSg+ NSg+    .\n> We   won      by    six  goals   to three .\n# IPl+ NSgPl/VP NSg/P NSg+ NPl/V3+ P  NSg   .\n> His     date    of birth     was  wrong      by    ten  years .\n# ISg/D$+ N🅪Sg/VB P  NSg/VB/J+ VLPt NSg/VB/J/R NSg/P NSg+ NPl+  .\n> We   went    through the book    page    by    page    .\n# IPl+ NSg/VPt NSg/J/P D+  NSg/VB+ NPr/VB+ NSg/P NPr/VB+ .\n> We   crawled forward  by    inches  .\n# IPl+ VP/J    NSg/VB/J NSg/P NPl/V3+ .\n> sold   by    the yard    ; cheaper if    bought by    the gross\n# NSg/VP NSg/P D+  NSg/VB+ . NSg/JC  NSg/C NSg/VP NSg/P D   NPr/VB/J\n> While      sitting  listening to the radio    by    the hour , she  can     drink   brandy  by    the bucketful !\n# NSg/VB/C/P NSg/Vg/J Nᴹ/Vg/J   P  D+  N🅪Sg/VB+ NSg/P D+  NSg+ . ISg+ NPr/VXB NSg/VB+ NPr/VB+ NSg/P D   NSg       .\n> He       sits   listening to the radio    by    the hour .\n# NPr/ISg+ NPl/V3 Nᴹ/Vg/J   P  D+  N🅪Sg/VB+ NSg/P D+  NSg+ .\n> His     health was  deteriorating by    the day     .\n# ISg/D$+ Nᴹ+    VLPt Nᴹ/Vg/J       NSg/P D+  NPr🅪Sg+ .\n> The pickers are paid by    the bushel .\n# D   W?      VLB VP/J NSg/P D   NSg/VB .\n> He       cheated by    his     own       admission .\n# NPr/ISg+ VP/J    NSg/P ISg/D$+ NSg/VB/J+ NSg+      .\n> By    my  reckoning , we   should be       nearly there .\n# NSg/P D$+ Nᴹ/Vg/J+  . IPl+ VXB    NSg/VLXB R      R     .\n> It       is  easy     to invert   a   2 - by    - 2 matrix .\n# NPr/ISg+ VL3 NSg/VB/J P  NSg/VB/J D/P # . NSg/P . # NSg+   .\n> The room       was  about 4 foot   by    6 foot    .\n# D+  N🅪Sg/VB/J+ VLPt J/P   # NSg/VB NSg/P # NSg/VB+ .\n> The bricks  used to build  the wall    measured 10 by    20 by    30 cm  .\n# D+  NPl/V3+ VP/J P  NSg/VB D+  NPr/VB+ VP/J     #  NSg/P #  NSg/P #  #r+ .\n> She's a   lovely little     filly , by    Big   Lad , out          of Damsel in        Distress .\n# K     D/P NSg/J  NPr/I/J/Dq NSg   . NSg/P NSg/J NSg . NSg/VB/J/R/P P  NSg    NPr/J/R/P Nᴹ/VB+   .\n> Are you    eating  by    Rabbi Fischer ? ( at    the house  of )\n# VLB ISgPl+ Nᴹ/Vg/J NSg/P NSg+  NPr+    . . NSg/P D   NPr/VB P  .\n> By    Chabad , it's different . ( with , among )\n# NSg/P ?      . +    NSg/J     . . P    . P     .\n>\n#\n>              Adverb\n# HeadingStart NSg/VB+\n>\n#\n> I       watched the parade  as    it       passed by    .\n# ISg/#r+ VP/J    D+  NSg/VB+ R/C/P NPr/ISg+ VP/J   NSg/P .\n> There was  a    shepherd close    by    .\n# R+    VLPt D/P+ NPr/VB+  NSg/VB/J NSg/P .\n> I'll stop   by    on  my  way    home     from work     .\n# K    NSg/VB NSg/P J/P D$+ NSg/J+ NSg/VB/J P    N🅪Sg/VB+ .\n> We're right    near       the lifeguard station . Come       by    before you    leave  .\n# K     NPr/VB/J NSg/VB/J/P D   NSg+      NSg/VB+ . NSg/VBPp/P NSg/P C/P    ISgPl+ NSg/VB .\n> The women spent much         time       after harvest putting jams    by    for   winter  and  spring   .\n# D+  NPl+  VP/J  NSg/I/J/R/Dq N🅪Sg/VB/J+ P     NSg/VB+ Nᴹ/Vg/J NPl/V3+ NSg/P R/C/P N🅪Sg/VB VB/C N🅪Sg/VB+ .\n>\n#\n>              Adjective\n# HeadingStart NSg/VB/J+\n>\n#\n> a   by    path    ; a   by    room       ( Out          of the way    , off        to one      side      . )\n# D/P NSg/P NSg/VB+ . D/P NSg/P N🅪Sg/VB/J+ . NSg/VB/J/R/P P  D+  NSg/J+ . NSg/VB/J/P P  NSg/I/J+ NSg/VB/J+ . .\n> by    catch  ; a   by    issue  ( Subsidiary , incidental . )\n# NSg/P NSg/VB . D/P NSg/P NSg/VB . NSg/J+     . NSg/J      . .\n>\n#\n>              For\n# HeadingStart R/C/P\n>\n#\n>              Conjunction\n# HeadingStart NSg/VB+\n>\n#\n> I       had to stay     with my  wicked stepmother , for   I       had nowhere else    to go       .\n# ISg/#r+ VP  P  NSg/VB/J P    D$+ VP/J   NSg        . R/C/P ISg/#r+ VP  NSg/J   NSg/J/C P  NSg/VB/J .\n>\n#\n>              Preposition\n# HeadingStart NSg/VB\n>\n#\n> The astronauts headed for   the moon    .\n# D+  NPl+       VP/J   R/C/P D+  NPr/VB+ .\n> Run      for   the hills   !\n# NSg/VBPp R/C/P D+  NPl/V3+ .\n> He       was  headed for   the door    when    he       remembered .\n# NPr/ISg+ VLPt VP/J   R/C/P D+  NSg/VB+ NSg/I/C NPr/ISg+ VP/J       .\n> I       have    something for   you    .\n# ISg/#r+ NSg/VXB NSg/I/J+  R/C/P ISgPl+ .\n> Everything I       do  , I       do  for   you    .\n# NSg/I/VB+  ISg/#r+ VXB . ISg/#r+ VXB R/C/P ISgPl+ .\n> We're having  a   birthday party    for   Janet .\n# K     Nᴹ/Vg/J D/P NSg/VB+  NSg/VB/J R/C/P NPr+  .\n> The mayor gave a   speech  for   the charity gala   .\n# D+  NSg+  VPt  D/P N🅪Sg/VB R/C/P D+  NPr+    NSg/J+ .\n> If    having  to bag    the groceries correctly is  more         than you    can     handle , then      this   isn't   the job     for   you    .\n# NSg/C Nᴹ/Vg/J P  NSg/VB D+  NPl/V3+   R         VL3 NPr/I/J/R/Dq C/P  ISgPl+ NPr/VXB NSg/VB . NSg/J/R/C I/Ddem NSg/VX3 D   NPr/VB+ R/C/P ISgPl+ .\n> This    is  a   new   bell   for   my  bicycle .\n# I/Ddem+ VL3 D/P NSg/J NPr/VB R/C/P D$+ NSg/VB+ .\n> The cake     is  for   Tom    and  Helen's anniversary .\n# D+  N🅪Sg/VB+ VL3 R/C/P NPr/VB VB/C NPr$    NSg+        .\n> This    medicine is  for   your cough   .\n# I/Ddem+ N🅪Sg/VB+ VL3 R/C/P D$+  NSg/VB+ .\n> He       wouldn't apologize ; and  just for   that          , she  refused to help   him  .\n# NPr/ISg+ VXB      VB        . VB/C J/R  R/C/P NSg/I/C/Ddem+ . ISg+ VP/J    P  NSg/VB ISg+ .\n> He       looks  better     for   having  lost weight   . ( UK   usage )\n# NPr/ISg+ NPl/V3 NSg/VXB/JC R/C/P Nᴹ/Vg/J VP/J N🅪Sg/VB+ . . NPr+ N🅪Sg+ .\n> She  was  the worse     for   drink   .\n# ISg+ VLPt D   NSg/VB/JC R/C/P NSg/VB+ .\n> All          those  for   the motion   , raise  your hands   .\n# NSg/I/J/C/Dq I/Ddem R/C/P D+  N🅪Sg/VB+ . NSg/VB D$+  NPl/V3+ .\n> Who's for   ice        - cream      ?\n# NPr$+ R/C/P NPr🅪Sg/VB+ . N🅪Sg/VB/J+ .\n> I'm for   going   by    train\n# K   R/C/P Nᴹ/Vg/J NSg/P NSg/VB+\n> Ten voted for   , and  three against . ( with implied object  )\n# NSg VP/J  R/C/P . VB/C NSg   C/P     . . P    VP/J    NSg/VB+ .\n> Make   way   for   the president !\n# NSg/VB NSg/J R/C/P D+  NSg/VB+   .\n> Clear    the shelves for   our new    Christmas stock      !\n# NSg/VB/J D   NPl/V3  R/C/P D$+ NSg/J+ NPr/VB/J+ N🅪Sg/VB/J+ .\n> Stand  by    for   your cue     .\n# NSg/VB NSg/P R/C/P D$+  NSg/VB+ .\n> Prepare for   battle    .\n# VB      R/C/P NPr/VB/J+ .\n> They swept the area for   enemy   operatives .\n# IPl+ VP/J  D   N🅪Sg R/C/P NSg/VB+ NPl+       .\n> Police combed his     flat     for   clues   .\n# Nᴹ/VB+ VP/J   ISg/D$+ NSg/VB/J R/C/P NPl/V3+ .\n> I've lived here for   three years .\n# K    VP/J  J/R  R/C/P NSg   NPl+  .\n> They fought for   days over    a    silly  pencil  .\n# IPl+ VB     R/C/P NPl+ NSg/J/P D/P+ NSg/J+ NSg/VB+ .\n> The store   is  closed for   the day     .\n# D+  NSg/VB+ VL3 VP/J   R/C/P D+  NPr🅪Sg+ .\n> I       can     see    for   miles  .\n# ISg/#r+ NPr/VXB NSg/VB R/C/P NPrPl+ .\n> I       will    stand  in        for   him  .\n# ISg/#r+ NPr/VXB NSg/VB NPr/J/R/P R/C/P ISg+ .\n> I       speak  for   the Prime     Minister .\n# ISg/#r+ NSg/VB R/C/P D+  NSg/VB/J+ NSg/VB+  .\n> It       is  unreasonable for   our boss      to withhold our wages   .\n# NPr/ISg+ VL3 J            R/C/P D$+ NSg/VB/J+ P  NSg/VB   D$+ NPl/V3+ .\n> I       don't think  it's a   good     idea for   you    and  me       to meet     ever again .\n# ISg/#r+ VXB   NSg/VB +    D/P NPr/VB/J NSg+ R/C/P ISgPl+ VB/C NPr/ISg+ P  NSg/VB/J J/R  P     .\n> I       am        aiming  for   completion by    the end    of business Thursday .\n# ISg/#r+ NPr/VLB/J Nᴹ/Vg/J R/C/P NSg+       NSg/P D   NSg/VB P  N🅪Sg/J+  NSg+     .\n> He's going   for   his     doctorate .\n# NPr$ Nᴹ/Vg/J R/C/P ISg/D$+ NSg/VB+   .\n> Do  you    want   to go       for   coffee     ?\n# VXB ISgPl+ NSg/VB P  NSg/VB/J R/C/P N🅪Sg/VB/J+ .\n> I'm saving      up         for   a   car  .\n# K   N🅪Sg/Vg/J/P NSg/VB/J/P R/C/P D/P NSg+ .\n> Don't wait   for   an  answer  .\n# VXB   NSg/VB R/C/P D/P NSg/VB+ .\n> Fair     for   its     day     .\n# NSg/VB/J R/C/P ISg/D$+ NPr🅪Sg+ .\n> She's spry for   an  old   lady    .\n# K     J    R/C/P D/P NSg/J NPr/VB+ .\n> Don't take   me       for   a   fool      .\n# VXB   NSg/VB NPr/ISg+ R/C/P D/P NSg/VB/J+ .\n> For   all           his     expensive education , he       didn't seem very bright   .\n# R/C/P NSg/I/J/C/Dq+ ISg/D$+ J+        NSg+      . NPr/ISg+ VXPt   VB   J/R  NPr/VB/J .\n> And  now       for   a    slap      - up         meal    !\n# VB/C NSg/J/R/C R/C/P D/P+ NSg/VB/J+ . NSg/VB/J/P NSg/VB+ .\n> Go       scuba   diving   ? For   one      thing , I       can't even       swim   .\n# NSg/VB/J N🅪Sg/VB Nᴹ/Vg/J+ . R/C/P NSg/I/J+ NSg+  . ISg/#r+ VXB   NSg/VB/J/R NSg/VB .\n> For   another , we   don't have    any    equipment .\n# R/C/P I/D     . IPl+ VXB   NSg/VXB I/R/Dq Nᴹ+       .\n> He       is  named for   his     grandfather .\n# NPr/ISg+ VL3 VP/J  R/C/P ISg/D$+ NSg/VB/J+   .\n> He       totally screwed up         that          project . Now       he's surely for   the sack   .\n# NPr/ISg+ R       VP/J    NSg/VB/J/P NSg/I/C/Ddem+ NSg/VB+ . NSg/J/R/C NPr$ R      R/C/P D   NSg/VB .\n> In        term     of base      hits   , Jones   was  three for   four on  the day\n# NPr/J/R/P NSg/VB/J P  NSg/VB/J+ NPl/V3 . NPr/VB+ VLPt NSg   R/C/P NSg  J/P D+  NPr🅪Sg+\n> At    close    of play    , England were     305 for   3 .\n# NSg/P NSg/VB/J P  N🅪Sg/VB . NPr+    NSg/VLPt #   R/C/P # .\n> He       took the swing   shift   for   he       could   get    more         overtime .\n# NPr/ISg+ VPt  D+  NSg/VB+ NSg/VB+ R/C/P NPr/ISg+ NSg/VXB NSg/VB NPr/I/J/R/Dq NSg/VB   .\n> to account for   one's whereabouts .\n# P  NSg/VB  R/C/P NSg$+ NSg+        .\n>\n#\n>              From\n# HeadingStart P\n>\n#\n> Paul is  from New    Zealand .\n# NPr+ VL3 P    NSg/J+ NPr+    .\n> I       got a   letter  from my  brother   .\n# ISg/#r+ VP  D/P NSg/VB+ P    D$+ NSg/VB/J+ .\n> You    can't get    all          your news   from the Internet .\n# ISgPl+ VXB   NSg/VB NSg/I/J/C/Dq D$+  Nᴹ/VB+ P    D   NPrᴹ/VB+ .\n> He       had books   piled from floor   to ceiling .\n# NPr/ISg+ VP  NPl/V3+ VP/J  P    NSg/VB+ P  NSg/VB  .\n> He       departed yesterday from Chicago .\n# NPr/ISg+ NSg/VP/J NSg       P    NPr+    .\n> This    figure  has been     changed from a    one      to a   seven .\n# I/Ddem+ NSg/VB+ V3  NSg/VLPp VP/J    P    D/P+ NSg/I/J+ P  D/P NSg   .\n> Face    away from the wall    !\n# NSg/VB+ VB/J P    D+  NPr/VB+ .\n> The working day     runs   from 9 am         to 5 pm      .\n# D   Nᴹ/Vg/J NPr🅪Sg+ NPl/V3 P    # NPr/VLB/J+ P  # NSg/VB+ .\n> Tickets are available from 17th July .\n# NPl/V3+ VLB J         P    #    NPr+ .\n> Rate    your pain     from 1 to 10 .\n# NSg/VB+ D$+  N🅪Sg/VB+ P    # P  #  .\n> Start  counting from 1 .\n# NSg/VB Nᴹ/Vg/J  P    # .\n> You    can     study  anything  from math to literature .\n# ISgPl+ NPr/VXB NSg/VB NSg/I/VB+ P    +    P  Nᴹ         .\n> It's hard     to tell   from here .\n# +    N🅪Sg/J/R P  NPr/VB P    J/R  .\n> Try      to see    it       from his     point  of view    .\n# NSg/VB/J P  NSg/VB NPr/ISg+ P    ISg/D$+ NSg/VB P  NSg/VB+ .\n> The bomb      went     off        just 100 yards   from where   they were     standing .\n# D+  NSg/VB/J+ NSg/VPt+ NSg/VB/J/P J/R  #   NPl/V3+ P    NSg/R/C IPl+ NSg/VLPt Nᴹ/Vg/J  .\n> From the top      of the lighthouse you    can     just see    the mainland .\n# P    D   NSg/VB/J P  D+  NSg+       ISgPl+ NPr/VXB J/R  NSg/VB D+  NSg+     .\n> I’ve been     doing   this    from pickney .\n# K    NSg/VLPp Nᴹ/Vg/J I/Ddem+ P    ?       .\n> Your opinions differ    from mine      .\n# D$+  NPl+     NPr/VB/JC P    NSg/I/VB+ .\n> He       knows right    from wrong      .\n# NPr/ISg+ V3    NPr/VB/J P    NSg/VB/J/R .\n>\n#\n>              In\n# HeadingStart NPr/J/R/P\n>\n#\n>              Preposition\n# HeadingStart NSg/VB\n>\n#\n> Who    lives in        a   pineapple under   the sea  ?\n# NPr/I+ V3+   NPr/J/R/P D/P NSg       NSg/J/P D   NSg+ .\n> The dog       is  in        the kennel .\n# D+  NSg/VB/J+ VL3 NPr/J/R/P D   NSg/VB .\n> There were     three pickles in        a    jar     .\n# R+    NSg/VLPt NSg   NPl/V3  NPr/J/R/P D/P+ NSg/VB+ .\n> I       like         living  in        the city .\n# ISg/#r+ NSg/VB/J/C/P Nᴹ/Vg/J NPr/J/R/P D+  NSg+ .\n> There are lots   of trees   in        the park    .\n# R+    VLB NPl/V3 P  NPl/V3+ NPr/J/R/P D+  NPr/VB+ .\n> We   are in        the enemy   camp      .\n# IPl+ VLB NPr/J/R/P D+  NSg/VB+ NSg/VB/J+ .\n> Her     plane     is  in        the air      .\n# ISg/D$+ NSg/VB/J+ VL3 NPr/J/R/P D+  N🅪Sg/VB+ .\n> I       glanced over    at    the pretty     girl    in        the red     dress   .\n# ISg/#r+ VP/J    NSg/J/P NSg/P D+  NSg/VB/J/R NSg/VB+ NPr/J/R/P D+  N🅪Sg/J+ NSg/VB+ .\n> There wasn't much         of interest in        her     speech   .\n# R+    VPt    NSg/I/J/R/Dq P  N🅪Sg/VB+ NPr/J/R/P ISg/D$+ N🅪Sg/VB+ .\n> He       hasn't got an  original idea in        him  .\n# NPr/ISg+ V3     VP  D/P NSg/J    NSg+ NPr/J/R/P ISg+ .\n> You    are one     in        a   million .\n# ISgPl+ VLB NSg/I/J NPr/J/R/P D/P NSg     .\n> She's in        an  orchestra .\n# K     NPr/J/R/P D/P NSg+      .\n> My  birthday is  in        the first week  of December .\n# D$+ NSg/VB+  VL3 NPr/J/R/P D   NSg/J NSg/J P  NPr+     .\n> Easter  falls   in        the fourth    lunar  month  .\n# NPr/VB+ NPl/V3+ NPr/J/R/P D+  NPr/VB/J+ NSg/J+ NSg/J+ .\n> Will    you    be       able     to finish this    in        a    week   ?\n# NPr/VXB ISgPl+ NSg/VLXB NSg/VB/J P  NSg/VB I/Ddem+ NPr/J/R/P D/P+ NSg/J+ .\n> They said they would call   us       in        a    week   .\n# IPl+ VP/J IPl+ VXB   NSg/VB NPr/IPl+ NPr/J/R/P D/P+ NSg/J+ .\n> Less       water    gets   in        your boots  this    way    .\n# VB/J/R/C/P N🅪Sg/VB+ NPl/V3 NPr/J/R/P D$+  NPl/V3 I/Ddem+ NSg/J+ .\n> She  stood there looking in        the window  longingly .\n# ISg+ VP    R     Nᴹ/Vg/J NPr/J/R/P D+  NSg/VB+ R         .\n> In        replacing the faucet washers , he       felt      he       was  making  his     contribution to the environment .\n# NPr/J/R/P Nᴹ/Vg/J   D   NSg    NPl/V3  . NPr/ISg+ N🅪Sg/VP/J NPr/ISg+ VLPt Nᴹ/Vg/J ISg/D$+ NSg+         P  D   N🅪Sg+       .\n> In        trying  to make   amends , she  actually made matters worse     .\n# NPr/J/R/P Nᴹ/Vg/J P  NSg/VB NPl/V3 . ISg+ R        VP   NPl/V3+ NSg/VB/JC .\n> My  aim     in        travelling    there was  to find   my  missing friend    .\n# D$+ NSg/VB+ NPr/J/R/P NSg/Vg/J/Comm R+    VLPt P  NSg/VB D$+ Nᴹ/Vg/J NPr/VB/J+ .\n> My  fat       rolls   around in        folds   .\n# D$+ N🅪Sg/VB/J NPl/V3+ J/P    NPr/J/R/P NPl/V3+ .\n> The planes  flew      over    in        waves   .\n# D+  NPl/V3+ NSg/VPt/J NSg/J/P NPr/J/R/P NPl/V3+ .\n> Arrange the chairs  in        a    circle  .\n# NSg/VB  D   NPl/V3+ NPr/J/R/P D/P+ NSg/VB+ .\n> He       stalked away in        anger  .\n# NPr/ISg+ VP/J    VB/J NPr/J/R/P Nᴹ/VB+ .\n> John is  in        a   coma .\n# NPr+ VL3 NPr/J/R/P D/P NSg  .\n> My  fruit    trees   are in        bud        .\n# D$+ N🅪Sg/VB+ NPl/V3+ VLB NPr/J/R/P NPr🅪Sg/VB+ .\n> The company is  in        profit      .\n# D+  N🅪Sg+   VL3 NPr/J/R/P N🅪Sg/VBP/J+ .\n> You've got a   friend    in        me       .\n# K      VP  D/P NPr/VB/J+ NPr/J/R/P NPr/ISg+ .\n> He's met his     match   in        her     .\n# NPr$ VP  ISg/D$+ NSg/VB+ NPr/J/R/P ISg/D$+ .\n> There has been     no       change  in        his     condition .\n# R+    V3  NSg/VLPp NSg/Dq/P N🅪Sg/VB NPr/J/R/P ISg/D$+ N🅪Sg/VB+  .\n> What   grade   did  he       get    in        English      ?\n# NSg/I+ NSg/VB+ VXPt NPr/ISg+ NSg/VB NPr/J/R/P NPr🅪Sg/VB/J+ .\n> Please pay      me       in        cash       — preferably in        tens and  twenties .\n# VB     NSg/VB/J NPr/ISg+ NPr/J/R/P NPrᴹ/VB/J+ . R          NPr/J/R/P W?   VB/C NPl+     .\n> The deposit can     be       in        any    legal tender   , even       in        gold     .\n# D+  NSg/VB+ NPr/VXB NSg/VLXB NPr/J/R/P I/R/Dq NSg/J NSg/VB/J . NSg/VB/J/R NPr/J/R/P Nᴹ/VB/J+ .\n> Beethoven's \" Symphony No       . 5 \" in        C          minor    is  among his     most         popular .\n# NPr$        . NSg+     NSg/Dq/P . # . NPr/J/R/P NPr/VB/#r+ NSg/VB/J VL3 P     ISg/D$+ NSg/I/J/R/Dq NSg/J   .\n> His     speech   was  in        French      , but     was  simultaneously translated into eight  languages .\n# ISg/D$+ N🅪Sg/VB+ VLPt NPr/J/R/P NPr🅪Sg/VB/J . NSg/C/P VLPt R              VP/J       P    NSg/J+ NPl+      .\n> When    you    write  in        cursive , it's illegible .\n# NSg/I/C ISgPl+ NSg/VB NPr/J/R/P NSg/J   . +    J         .\n> Military letters should be       formal in        tone       , but     not     stilted .\n# NSg/J+   NPl/V3+ VXB    NSg/VLXB NSg/J  NPr/J/R/P N🅪Sg/I/VB+ . NSg/C/P NSg/R/C VP/J    .\n>\n#\n>              Verb\n# HeadingStart NSg/VB+\n>\n#\n> He       that          ears    my  land       spares my  team    and  gives  me       leave  to in        the crop    .\n# NPr/ISg+ NSg/I/C/Ddem+ NPl/V3+ D$+ NPr🅪Sg/VB+ NPl/V3 D$+ NSg/VB+ VB/C NPl/V3 NPr/ISg+ NSg/VB P  NPr/J/R/P D   NSg/VB+ .\n>\n#\n>              Adverb\n# HeadingStart NSg/VB+\n>\n#\n> Suddenly a    strange   man       walked in        .\n# R        D/P+ NSg/VB/J+ NPr/VB/J+ VP/J   NPr/J/R/P .\n> Would you    like         that          to take   away or    eat in        ?\n# VXB   ISgPl+ NSg/VB/J/C/P NSg/I/C/Ddem+ P  NSg/VB VB/J NPr/C VB  NPr/J/R/P .\n> He       ran     to the edge   of the swimming pool    and  dived in        .\n# NPr/ISg+ NSg/VPt P  D   NSg/VB P  D+  NSg/Vg   NSg/VB+ VB/C VP/J  NPr/J/R/P .\n> They flew      in        from London last      night    .\n# IPl+ NSg/VPt/J NPr/J/R/P P    NPr+   NSg/VB/J+ N🅪Sg/VB+ .\n> For   six  hours the tide    flows  in        , then      for   another six  hours it       flows  out          .\n# R/C/P NSg+ NPl+  D+  NSg/VB+ NPl/V3 NPr/J/R/P . NSg/J/R/C R/C/P I/D+    NSg+ NPl+  NPr/ISg+ NPl/V3 NSg/VB/J/R/P .\n> Bring the water    to the boil    and  drop   the vegetables in        .\n# VB    D+  N🅪Sg/VB+ P  D+  NSg/VB+ VB/C NSg/VB D+  NPl+       NPr/J/R/P .\n> The show   still      didn't become interesting 20 minutes in        .\n# D   NSg/VB NSg/VB/J/R VXPt   VBPp   Vg/J        #  NPl/V3+ NPr/J/R/P .\n>\n#\n>              Noun\n# HeadingStart NSg/VB+\n>\n#\n> His     parents got him  an  in        with the company .\n# ISg/D$+ NPl/V3+ VP  ISg+ D/P NPr/J/R/P P    D+  N🅪Sg+   .\n>\n#\n>              Adjective\n# HeadingStart NSg/VB/J+\n>\n#\n> Is  Mr   . Smith   in        ?\n# VL3 NSg+ . NPr/VB+ NPr/J/R/P .\n> Little     by    little     I       pushed the snake   into the basket  , until finally all          of it       was  in        .\n# NPr/I/J/Dq NSg/P NPr/I/J/Dq ISg/#r+ VP/J   D+  NPr/VB+ P    D+  NSg/VB+ . C/P   R       NSg/I/J/C/Dq P  NPr/ISg+ VLPt NPr/J/R/P .\n> The bullet  is  about five centimetres in        .\n# D+  NSg/VB+ VL3 J/P   NSg  NPl/Comm    NPr/J/R/P .\n> If    the tennis  ball    bounces on  the line    then      it's in        .\n# NSg/C D+  NSg/VB+ NPr/VB+ NPl/V3  J/P D+  NSg/VB+ NSg/J/R/C +    NPr/J/R/P .\n> I've discovered why    the TV   wasn't working – the plug    wasn't in        !\n# K    VP/J       NSg/VB D   NSg+ VPt    Nᴹ/Vg/J . D   NSg/VB+ VPt    NPr/J/R/P .\n> The replies to the questionnaires are now       all          in        .\n# D   NPl/V3+ P  D+  NPl/V3+        VLB NSg/J/R/C NSg/I/J/C/Dq NPr/J/R/P .\n> Skirts  are in        this    year .\n# NPl/V3+ VLB NPr/J/R/P I/Ddem+ NSg+ .\n> the in        train   ( incoming train   )\n# D   NPr/J/R/P NSg/VB+ . Nᴹ/Vg/J  NSg/VB+ .\n> You    can't get    round      the headland when    the tide's in        .\n# ISgPl+ VXB   NSg/VB NSg/VB/J/P D   NSg      NSg/I/C D   NSg$   NPr/J/R/P .\n> in        by    descent  ;            in        by    purchase ;            in        of the seisin of her     husband\n# NPr/J/R/P NSg/P N🅪Sg/VB+ . Unlintable NPr/J/R/P NSg/P NSg/VB+  . Unlintable NPr/J/R/P P  D   ?      P  ISg/D$+ NSg/VB+\n> He       is  very in        with the Joneses .\n# NPr/ISg+ VL3 J/R  NPr/J/R/P P    D   NPl/V3  .\n> I       need     to keep   in        with the neighbours   in        case       I       ever need     a    favour        from them     .\n# ISg/#r+ N🅪Sg/VXB P  NSg/VB NPr/J/R/P P    D   NPl/V3/Comm+ NPr/J/R/P NPr🅪Sg/VB+ ISg/#r+ J/R  N🅪Sg/VXB D/P+ N🅪Sg/VB/Comm+ P    NSg/IPl+ .\n> I       think  that          bird      fancies you    . You're in        there , mate   !\n# ISg/#r+ NSg/VB NSg/I/C/Ddem+ NPr/VB/J+ NPl/V3  ISgPl+ . +      NPr/J/R/P R     . NSg/VB .\n> I'm three drinks  in        right    now       .\n# K   NSg+  NPl/V3+ NPr/J/R/P NPr/VB/J NSg/J/R/C .\n> I       was  500 dollars in        when    the stock      crashed .\n# ISg/#r+ VLPt #   NPl     NPr/J/R/P NSg/I/C D+  N🅪Sg/VB/J+ VP/J    .\n>\n#\n>              Unit\n# HeadingStart NSg+\n>\n#\n> The glass      is  8 inches  .\n# D+  NPr🅪Sg/VB+ VL3 # NPl/V3+ .\n> The glass      is  8 in        .\n# D+  NPr🅪Sg/VB+ VL3 # NPr/J/R/P .\n>\n#\n>              Of\n# HeadingStart P\n>\n#\n> Take   the chicken    out          of the freezer .\n# NSg/VB D+  N🅪Sg/VB/J+ NSg/VB/J/R/P P  D+  NSg+    .\n> He       hasn't been     well       of late  .\n# NPr/ISg+ V3     NSg/VLPp NSg/VB/J/R P  NSg/J .\n> Finally she  was  relieved of the burden of caring  for   her     sick      husband .\n# R       ISg+ VLPt VP/J     P  D   NSg/VB P  Nᴹ/Vg/J R/C/P ISg/D$+ NSg/VB/J+ NSg/VB+ .\n> He       seemed devoid of human     feelings .\n# NPr/ISg+ VP/J   VB/J   P  NSg/VB/J+ NPl/V3+  .\n> The word    is  believed to be       of Japanese  origin .\n# D+  NSg/VB+ VL3 VP/J     P  NSg/VLXB P  NPr🅪Sg/J+ NSg+   .\n> Jesus  of Nazareth\n# NPr/VB P  NPr+\n> The invention was  born     of necessity .\n# D+  N🅪Sg+     VLPt NPr/VB/J P  NSg+      .\n> It       is  said that         she  died of a    broken heart    .\n# NPr/ISg+ VL3 VP/J NSg/I/C/Ddem ISg+ VP/J P  D/P+ VPp/J  N🅪Sg/VB+ .\n> What   a   lot    of nonsense !\n# NSg/I+ D/P NPr/VB P  Nᴹ/VB/J+ .\n> I'll have    a   dozen of those  apples , please .\n# K    NSg/VXB D/P NSg   P  I/Ddem NPl    . VB     .\n> Welcome  to the historic town of Harwich .\n# NSg/VB/J P  D   NSg/J    NSg  P  ?       .\n> I'm not     driving this   wreck  of a   car  .\n# K   NSg/R/C Nᴹ/Vg/J I/Ddem NSg/VB P  D/P NSg+ .\n> I'm always thinking of you    .\n# K   R      Nᴹ/Vg/J  P  ISgPl+ .\n> He       told us       the story  of his     journey to India .\n# NPr/ISg+ VP   NPr/IPl+ D   NSg/VB P  ISg/D$+ NSg/VB+ P  NPr+  .\n> This    behaviour  is  typical of teenagers .\n# I/Ddem+ N🅪Sg/Comm+ VL3 NSg/J   P  +         .\n> He       is  a   friend   of mine      .\n# NPr/ISg+ VL3 D/P NPr/VB/J P  NSg/I/VB+ .\n> We   want   a   larger slice    of the cake     .\n# IPl+ NSg/VB D/P JC     NSg/VB/J P  D+  N🅪Sg/VB+ .\n> The owner of the nightclub was  arrested .\n# D   NSg   P  D+  NSg/VB+   VLPt VP/J     .\n> My  companion seemed affable and  easy     of manner .\n# D$+ NSg/VB+   VP/J   J       VB/C NSg/VB/J P  NSg+   .\n> It's not     that         big   of a    deal      .\n# +    NSg/R/C NSg/I/C/Ddem NSg/J P  D/P+ NSg/VB/J+ .\n> I’ve not     taken her     out          of a   goodly long     while      .\n# K    NSg/R/C VPp/J ISg/D$+ NSg/VB/J/R/P P  D/P J/R    NPr/VB/J NSg/VB/C/P .\n> After a   delay      of three hours , the plane     finally took off        .\n# P     D/P NSg/VBPt/J P  NSg+  NPl+  . D+  NSg/VB/J+ R       VPt  NSg/VB/J/P .\n>\n#\n>              On\n# HeadingStart J/P\n>\n#\n>              Adjective\n# HeadingStart NSg/VB/J+\n>\n#\n> All           the lights  are on  , so          they must    be       home      .\n# NSg/I/J/C/Dq+ D+  NPl/V3+ VLB J/P . NSg/I/J/R/C IPl+ NSg/VXB NSg/VLXB NSg/VB/J+ .\n> We   had to ration our food because there was  a    war      on  .\n# IPl+ VP  P  NSg/VB D$+ NSg+ C/P     R+    VLPt D/P+ N🅪Sg/VB+ J/P .\n> Some     of the cast     went    down        with flu  , but     the show's still      on  .\n# I/J/R/Dq P  D   NSg/VB/J NSg/VPt N🅪Sg/VB/J/P P    NSg+ . NSg/C/P D   NSg$   NSg/VB/J/R J/P .\n> That          TV   programme     that          you    wanted to watch  is  on  now       .\n# NSg/I/C/Ddem+ NSg+ NSg/VB/Au/Br+ NSg/I/C/Ddem+ ISgPl+ VP/J   P  NSg/VB VL3 J/P NSg/J/R/C .\n> This    is  her     last      song  . You're on  next    !\n# I/Ddem+ VL3 ISg/D$+ NSg/VB/J+ N🅪Sg+ . +      J/P NSg/J/P .\n> Are we   still      on  for   tonight ?\n# VLB IPl+ NSg/VB/J/R J/P R/C/P NSg+    .\n> Mike    just threw coffee     onto Paul's lap       . It's on  now       .\n# NPr/VB+ J/R  VPt   N🅪Sg/VB/J+ J/P  NPr$   NSg/VB/J+ . +    J/P NSg/J/R/C .\n> England need     a   hundred runs   , with twenty - five overs remaining . Game      on  !\n# NPr+    N🅪Sg/VXB D/P NSg     NPl/V3 . P    NSg    . NSg  NPl   Nᴹ/Vg/J   . NSg/VB/J+ J/P .\n> Your feet will    soon warm     up         once  your socks   are on  .\n# D$+  NPl+ NPr/VXB J/R  NSg/VB/J NSg/VB/J/P NSg/C D$+  NPl/V3+ VLB J/P .\n> I       was  trying  to drink  out          of the bottle  while      the top       was  still      on  !\n# ISg/#r+ VLPt Nᴹ/Vg/J P  NSg/VB NSg/VB/J/R/P P  D+  NSg/VB+ NSg/VB/C/P D+  NSg/VB/J+ VLPt NSg/VB/J/R J/P .\n> Climbing up         that          steep     ridge   isn't   on  . We'll have    to find   another route   .\n# Nᴹ/Vg/J  NSg/VB/J/P NSg/I/C/Ddem+ NSg/VB/J+ NSg/VB+ NSg/VX3 J/P . K     NSg/VXB P  NSg/VB I/D     NSg/VB+ .\n> He'd like         to play    the red    next    to the black     spot      , but     that         shot      isn't   on  .\n# K    NSg/VB/J/C/P P  N🅪Sg/VB D   N🅪Sg/J NSg/J/P P  D   N🅪Sg/VB/J NSg/VB/J+ . NSg/C/P NSg/I/C/Ddem NSg/VP/J+ NSg/VX3 J/P .\n> The captain moved two fielders to the on  side      .\n# D+  NSg/VB+ VP/J  NSg W?       P  D   J/P NSg/VB/J+ .\n> Ponsonby - Smythe hit       a   thumping on  drive   .\n# ?        . ?      NSg/VBP/J D/P Nᴹ/Vg/J  J/P N🅪Sg/VB .\n> If    the player fails  to hit       the ball    on  , it's a   foul     .\n# NSg/C D+  NSg+   NPl/V3 P  NSg/VBP/J D+  NPr/VB+ J/P . +    D/P NSg/VB/J .\n> He       always has to be       on  , it's so          exhausting .\n# NPr/ISg+ R      V3  P  NSg/VLXB J/P . +    NSg/I/J/R/C Nᴹ/Vg/J    .\n>\n#\n>              Adverb\n# HeadingStart NSg/VB+\n>\n#\n> turn   the television on\n# NSg/VB D+  N🅪Sg/VB+   J/P\n> The lid     wasn't screwed on  properly .\n# D+  NSg/VB+ VPt    VP/J    J/P R        .\n> Put     on  your hat    and  gloves  .\n# NSg/VBP J/P D$+  NSg/VB VB/C NPl/V3+ .\n> The policeman moved the tramp  on  .\n# D+  NSg+      VP/J  D   NSg/VB J/P .\n> Drive   on  past        the railway station .\n# N🅪Sg/VB J/P NSg/VB/J/P+ D+  NSg+    NSg/VB+ .\n> From now       on  things are going   to be       different .\n# P    NSg/J/R/C J/P NPl+   VLB Nᴹ/Vg/J P  NSg/VLXB NSg/J     .\n> and  so          on  .\n# VB/C NSg/I/J/R/C J/P .\n> He       rambled on  and  on  .\n# NPr/ISg+ VP/J    J/P VB/C J/P .\n> Ten  years on  , nothing  had changed in        the village .\n# NSg+ NPl+  J/P . NSg/I/J+ VP  VP/J    NPr/J/R/P D+  NSg+    .\n>\n#\n>              Preposition\n# HeadingStart NSg/VB\n>\n#\n> A   vase   of flowers   stood on  the table   .\n# D/P NSg/VB P  NPrPl/V3+ VP    J/P D   NSg/VB+ .\n> Please lie    down        on  the couch   .\n# VB     NPr/VB N🅪Sg/VB/J/P J/P D+  NSg/VB+ .\n> The parrot  was  sitting  on  Jim's shoulder .\n# D+  NSg/VB+ VLPt NSg/Vg/J J/P NPr$  NSg/VB+  .\n> He       had a   scar    on  the side     of his     face    .\n# NPr/ISg+ VP  D/P NSg/VB+ J/P D   NSg/VB/J P  ISg/D$+ NSg/VB+ .\n> There is  a   dirty smudge on  this    window  .\n# R+    VL3 D/P VB/J  NSg/VB J/P I/Ddem+ NSg/VB+ .\n> The painting   hangs  on  the wall    .\n# D+  N🅪Sg/Vg/J+ NPl/V3 J/P D+  NPr/VB+ .\n> The fruit    ripened on  the trees   .\n# D+  N🅪Sg/VB+ VP/J    J/P D   NPl/V3+ .\n> Should there be       an  accent  on  the \" e      \" ?\n# VXB    R+    NSg/VLXB D/P NSg/VB+ J/P D   . NPr/I+ . .\n> He       wore old   shoes   on  his     feet .\n# NPr/ISg+ VPt  NSg/J NPl/V3+ J/P ISg/D$+ NPl+ .\n> The lighthouse that          you    can     see    is  on  the mainland .\n# D+  NSg+       NSg/I/C/Ddem+ ISgPl+ NPr/VXB NSg/VB VL3 J/P D+  NSg+     .\n> The suspect   is  thought to still      be       on  the campus  .\n# D+  NSg/VB/J+ VL3 N🅪Sg/VP P  NSg/VB/J/R NSg/VLXB J/P D+  NSg/VB+ .\n> We   live on  the edge   of the city .\n# IPl+ VB/J J/P D   NSg/VB P  D+  NSg+ .\n> on  the left      , on  the right    , on  the side      , on  the bottom    .\n# J/P D+  NPr/VP/J+ . J/P D   NPr/VB/J . J/P D+  NSg/VB/J+ . J/P D+  NSg/VB/J+ .\n> The fleet     is  on  the American coast   .\n# D+  NSg/VB/J+ VL3 J/P D+  NPr/J+   NSg/VB+ .\n> on  a    bus     , on  a    train   , on  a    plane     , on  a    ferry   , on  a    yacht   .\n# J/P D/P+ NSg/VB+ . J/P D/P+ NSg/VB+ . J/P D/P+ NSg/VB/J+ . J/P D/P+ NSg/VB+ . J/P D/P+ NSg/VB+ .\n> All          of the responsibility is  on  him  .\n# NSg/I/J/C/Dq P  D+  N🅪Sg+          VL3 J/P ISg+ .\n> I       put     a    bet       on  the winning  horse   .\n# ISg/#r+ NSg/VBP D/P+ NSg/VB/P+ J/P D+  NSg/Vg/J NSg/VB+ .\n> tug     on  the rope    ; push   hard     on  the door    .\n# NSg/VB+ J/P D+  NSg/VB+ . NSg/VB N🅪Sg/J/R J/P D+  NSg/VB+ .\n> I       stubbed my  toe     on  an  old   tree    stump  .\n# ISg/#r+ VP/J    D$+ NSg/VB+ J/P D/P NSg/J NSg/VB+ NSg/VB .\n> I       caught my  fingernail on  the door    handle .\n# ISg/#r+ VP/J   D$+ NSg+       J/P D+  NSg/VB+ NSg/VB .\n> The rope    snagged on  a   branch  .\n# D+  NSg/VB+ VP/J    J/P D/P NPr/VB+ .\n> to play    on  a   violin or    piano     .\n# P  N🅪Sg/VB J/P D/P NSg/VB NPr/C NSg/VB/J+ .\n> A    table   can't stand  on  two legs    .\n# D/P+ NSg/VB+ VXB   NSg/VB J/P NSg NPl/V3+ .\n> After resting  on  his     elbows  , he       stood on  his     toes    , then      walked on  his     heels   .\n# P     Nᴹ/Vg/J+ J/P ISg/D$+ NPl/V3+ . NPr/ISg+ VP    J/P ISg/D$+ NPl/V3+ . NSg/J/R/C VP/J   J/P ISg/D$+ NPl/V3+ .\n> The Tories are on  twenty - five percent in        this   constituency .\n# D   NPrPl  VLB J/P NSg    . NSg  NSg     NPr/J/R/P I/Ddem NSg+         .\n> The blue       team    are on  six points and  the red     team    on  five .\n# D+  N🅪Sg/VB/J+ NSg/VB+ VLB J/P NSg NPl/V3 VB/C D+  N🅪Sg/J+ NSg/VB+ J/P NSg  .\n> I'm on  question four .\n# K   J/P NSg/VB+  NSg  .\n> Born     on  the 4th of July .\n# NPr/VB/J J/P D   #   P  NPr+ .\n> On  Sunday  I'm busy     . I'll see    you    on  Monday .\n# J/P NSg/VB+ K   NSg/VB/J . K    NSg/VB ISgPl+ J/P NSg+   .\n> Can     I       see    you    on  a    different day     ?\n# NPr/VXB ISg/#r+ NSg/VB ISgPl+ J/P D/P+ NSg/J+    NPr🅪Sg+ .\n> Smith   scored again on  twelve minutes , doubling Mudchester Rovers ' lead      .\n# NPr/VB+ VP/J   P     J/P NSg+   NPl/V3+ . Nᴹ/Vg/J  ?          W?     . N🅪Sg/VB/J .\n> I       was  reading   a   book   on  history .\n# ISg/#r+ VLPt NPrᴹ/Vg/J D/P NSg/VB J/P N🅪Sg+   .\n> The city hosted the World   Summit  on  the Information Society\n# D+  NSg+ VP/J   D+  NSg/VB+ NSg/VB+ J/P D+  Nᴹ+         N🅪Sg+\n> I       have    no       opinion on  this    subject   .\n# ISg/#r+ NSg/VXB NSg/Dq/P N🅪Sg+   J/P I/Ddem+ NSg/VB/J+ .\n> I       saw     it       on  television .\n# ISg/#r+ NSg/VPt NPr/ISg+ J/P N🅪Sg/VB+   .\n> Can't you    see    I'm on  the phone   ?\n# VXB   ISgPl+ NSg/VB K   J/P D   NSg/VB+ .\n> My  favorite     shows   are on  BBC  America .\n# D$+ NSg/VB/J/Am+ NPl/V3+ VLB J/P NPr+ NPr+    .\n> I'll pay      on  card     .\n# K    NSg/VB/J J/P N🅪Sg/VB+ .\n> He       travelled on  false     documents .\n# NPr/ISg+ VP/J/Comm J/P NSg/VB/J+ NPl/V3+   .\n> They planned an  attack   on  London .\n# IPl+ VP/J    D/P NSg/VB/J J/P NPr+   .\n> The soldiers mutinied and  turned their guns    on  their officers .\n# D+  NPl/V3+  VP/J     VB/C VP/J   D$+   NPl/V3+ J/P D$+   NPl/V3+  .\n> Her     words   made a    lasting  impression on  my  mind    .\n# ISg/D$+ NPl/V3+ VP   D/P+ Nᴹ/Vg/J+ NSg/VB+    J/P D$+ NSg/VB+ .\n> What   will    be       the effect on  morale ?\n# NSg/I+ NPr/VXB NSg/VLXB D   NSg/VB J/P Nᴹ+    .\n> I       haven't got any    money   on  me       .\n# ISg/#r+ VXB     VP  I/R/Dq N🅪Sg/J+ J/P NPr/ISg+ .\n> On  Jack's entry , William got up         to leave  .\n# J/P NPr$   NSg+  . NPr+    VP  NSg/VB/J/P P  NSg/VB .\n> On  the addition of ammonia , a    chemical reaction   begins .\n# J/P D   NSg      P  Nᴹ+     . D/P+ NSg/J+   N🅪Sg/VB/J+ NPl/V3 .\n> The drinks  are on  me       tonight , boys    .\n# D+  NPl/V3+ VLB J/P NPr/ISg+ NSg+    . NPl/V3+ .\n> The meal    is  on  the house   .\n# D+  NSg/VB+ VL3 J/P D+  NPr/VB+ .\n> I       had a    terrible thirst on  me       .\n# ISg/#r+ VP  D/P+ J+       Nᴹ/VB+ J/P NPr/ISg+ .\n> Have    pity    or    compassion on  him  .\n# NSg/VXB N🅪Sg/VB NPr/C Nᴹ/VB+     J/P ISg+ .\n> He's on  his     lunch    break   .\n# NPr$ J/P ISg/D$+ N🅪Sg/VB+ NSg/VB+ .\n> I'm on  nights  all          this   week   .\n# K   J/P NPl/V3+ NSg/I/J/C/Dq I/Ddem NSg/J+ .\n> You've been     on  these  antidepressants far      too long     .\n# K      NSg/VLPp J/P I/Ddem NPl             NSg/VB/J R   NPr/VB/J .\n> I       depended on  them     for   assistance .\n# ISg/#r+ VP/J     J/P NSg/IPl+ R/C/P Nᴹ+        .\n> He       will    promise on  certain conditions .\n# NPr/ISg+ NPr/VXB NSg/VB  J/P I/J+    NPl/V3+    .\n> A    curse   on  him  !\n# D/P+ NSg/VB+ J/P ISg+ .\n> Please don't tell   on  her     and  get    her     in        trouble  .\n# VB     VXB   NPr/VB J/P ISg/D$+ VB/C NSg/VB ISg/D$+ NPr/J/R/P N🅪Sg/VB+ .\n>\n#\n>              Verb\n# HeadingStart NSg/VB+\n>\n#\n> Can     you    on  the light      ? ( switch    on  )\n# NPr/VXB ISgPl+ J/P D+  N🅪Sg/VB/J+ . . NSg/VB/J+ J/P .\n>\n#\n>              To\n# HeadingStart P\n>\n#\n>              Particle\n# HeadingStart NSg+\n>\n#\n> I       want   to leave  .\n# ISg/#r+ NSg/VB P  NSg/VB .\n> He       asked me       what   to do  .\n# NPr/ISg+ VP/J  NPr/ISg+ NSg/I+ P  VXB .\n> I       have    places  to go       and  people  to see    .\n# ISg/#r+ NSg/VXB NPl/V3+ P  NSg/VB/J VB/C NPl/VB+ P  NSg/VB .\n> To err is  human    .\n# P  VB  VL3 NSg/VB/J .\n> Who    am        I       to criticise ? I've done      worse      things myself .\n# NPr/I+ NPr/VLB/J ISg/#r+ P  VB/Au/Br  . K    NSg/VPp/J NSg/VB/JC+ NPl+   ISg+   .\n> Precisely to get    away from you    was  why    I       did  what   I       did  .\n# R         P  NSg/VB VB/J P    ISgPl+ VLPt NSg/VB ISg/#r+ VXPt NSg/I+ ISg/#r+ VXPt .\n> I       need     some     more         books   to read    and  friends   to go       partying with .\n# ISg/#r+ N🅪Sg/VXB I/J/R/Dq NPr/I/J/R/Dq NPl/V3+ P  NSg/VBP VB/C NPrPl/V3+ P  NSg/VB/J Nᴹ/Vg/J  P    .\n> If    he       hasn't read    it       yet      , he       ought     to .\n# NSg/C NPr/ISg+ V3     NSg/VBP NPr/ISg+ NSg/VB/C . NPr/ISg+ NSg/I/VXB P  .\n> I       went    to the shops   to buy    some      bread    .\n# ISg/#r+ NSg/VPt P  D+  NPl/V3+ P  NSg/VB I/J/R/Dq+ N🅪Sg/VB+ .\n>\n#\n>              Preposition\n# HeadingStart NSg/VB\n>\n#\n> She  looked to the heavens .\n# ISg+ VP/J   P  D+  NPl/V3+ .\n> We   are walking to the shop    .\n# IPl+ VLB Nᴹ/Vg/J P  D+  NSg/VB+ .\n> The water    came      right    to the top      of this    wall    .\n# D+  N🅪Sg/VB+ NSg/VPt/P NPr/VB/J P  D   NSg/VB/J P  I/Ddem+ NPr/VB+ .\n> The coconut fell      to the ground     .\n# D+  N🅪Sg+   NSg/VPt/J P  D+  N🅪Sg/VB/J+ .\n> I       gave the book    to him  .\n# ISg/#r+ VPt  D+  NSg/VB+ P  ISg+ .\n> His     face    was  beaten to a   pulp      .\n# ISg/D$+ NSg/VB+ VLPt VB/J   P  D/P N🅪Sg/VB/J .\n> I       sang    my  baby      to sleep   .\n# ISg/#r+ NPr/VPt D$+ NSg/VB/J+ P  N🅪Sg/VB .\n> Whisk  the mixture to a    smooth    consistency .\n# NSg/VB D+  N🅪Sg+   P  D/P+ NSg/VB/J+ NSg+        .\n> He       made several bad      - taste    jokes  to groans from the audience .\n# NPr/ISg+ VP   J/Dq    NSg/VB/J . NSg/VB/J NPl/V3 P  NPl/V3 P    D+  NSg+     .\n> I       tried complaining , but     it       was  to no        effect  .\n# ISg/#r+ VP/J  Nᴹ/Vg/J     . NSg/C/P NPr/ISg+ VLPt P  NSg/Dq/P+ NSg/VB+ .\n> It       was  to a   large extent true     .\n# NPr/ISg+ VLPt P  D/P NSg/J NSg/J+ NSg/VB/J .\n> We   manufacture these   parts   to a   very high        tolerance .\n# IPl+ NSg/VB      I/Ddem+ NPl/V3+ P  D/P J/R  NSg/VB/J/R+ N🅪Sg/VB+  .\n> This    gauge   is  accurate to a   second   .\n# I/Ddem+ NSg/VB+ VL3 J        P  D/P NSg/VB/J .\n> There's a   lot    of sense    to what   he       says   .\n# K       D/P NPr/VB P  N🅪Sg/VB+ P  NSg/I+ NPr/ISg+ NPl/V3 .\n> The name    has a    nice   ring    to it       .\n# D+  NSg/VB+ V3  D/P+ NPr/J+ NSg/VB+ P  NPr/ISg+ .\n> There are 100 pence to the pound   .\n# R+    VLB #   NPl   P  D+  NPr/VB+ .\n> It       takes  2 to 4 weeks  to process typical applications .\n# NPr/ISg+ NPl/V3 # P  # NPrPl+ P  NSg/VB  NSg/J+  NPl+         .\n> Three to the power     of two  is   nine .\n# NSg   P  D   N🅪Sg/VB/J P  NSg+ VL3+ NSg  .\n> Three to the second   is  nine .\n# NSg   P  D   NSg/VB/J VL3 NSg  .\n> Three squared or    three to the second    power      is  nine .\n# NSg   VP/J    NPr/C NSg   P  D+  NSg/VB/J+ N🅪Sg/VB/J+ VL3 NSg  .\n> What's the time       ? – It's quarter   to four in        the afternoon ( or    3 : 45 pm      ) .\n# K      D+  N🅪Sg/VB/J+ . . +    NSg/VB/J+ P  NSg  NPr/J/R/P D+  N🅪Sg+     . NPr/C # . #  NSg/VB+ . .\n>\n#\n>              Adverb\n# HeadingStart NSg/VB+\n>\n#\n> Please push   the door    to . ( close    )\n# VB     NSg/VB D+  NSg/VB+ P  . . NSg/VB/J .\n>\n#\n>              With\n# HeadingStart P\n>\n#\n>              Preposition\n# HeadingStart NSg/VB\n>\n#\n> He       picked a   fight  with the class      bully     .\n# NPr/ISg+ VP/J   D/P NSg/VB P    D+  N🅪Sg/VB/J+ NSg/VB/J+ .\n> He       went    with his     friends   .\n# NPr/ISg+ NSg/VPt P    ISg/D$+ NPrPl/V3+ .\n> She  owns   a    motorcycle with a   sidecar .\n# ISg+ NPl/V3 D/P+ NSg/VB+    P    D/P NSg     .\n> Jim  was  listening to Bach with his     eyes    closed .\n# NPr+ VLPt Nᴹ/Vg/J   P  NPr  P    ISg/D$+ NPl/V3+ VP/J   .\n> The match   result  was  10 - 5 , with John scoring  three goals   .\n# D+  NSg/VB+ NSg/VB+ VLPt #  . # . P    NPr+ Nᴹ/Vg/J+ NSg+  NPl/V3+ .\n> With a   heavy    sigh   , she  looked around the empty     room       .\n# P    D/P NSg/VB/J NSg/VB . ISg+ VP/J   J/P    D+  NSg/VB/J+ N🅪Sg/VB/J+ .\n> Four people  were     injured , with one     of them     in        critical condition .\n# NSg+ NPl/VB+ NSg/VLPt VP/J    . P    NSg/I/J P  NSg/IPl+ NPr/J/R/P NSg/J+   N🅪Sg/VB+  .\n> With their reputation on  the line    , they decided  to fire      their PR   team    .\n# P    D$+   NSg+       J/P D+  NSg/VB+ . IPl+ NSg/VP/J P  N🅪Sg/VB/J D$+   NSg+ NSg/VB+ .\n> We   are with you    all          the way    .\n# IPl+ VLB P    ISgPl+ NSg/I/J/C/Dq D+  NSg/J+ .\n> There are a   number     of problems with your plan   .\n# R+    VLB D/P N🅪Sg/VB/JC P  NPl+     P    D$+  NSg/VB .\n> What   on  Earth    is  wrong      with my  keyboard ?\n# NSg/I+ J/P NPrᴹ/VB+ VL3 NSg/VB/J/R P    D$+ NSg/VB+  .\n> He       was  pleased with the outcome .\n# NPr/ISg+ VLPt VP/J    P    D+  NSg+    .\n> I’m upset    with my  father  .\n# K   NSg/VB/J P    D$+ NPr/VB+ .\n> slain   with robbers .\n# NSg/VPp P    NPl     .\n> cut       with a    knife\n# NSg/VBP/J P    D/P+ NSg/VB+\n> I       water   my  plants  with this    watering can     . This    is  the watering can     I       water   my  plants  with .\n# ISg/#r+ N🅪Sg/VB D$+ NPl/V3+ P    I/Ddem+ Nᴹ/Vg/J+ NPr/VXB . I/Ddem+ VL3 D   Nᴹ/Vg/J  NPr/VXB ISg/#r+ N🅪Sg/VB D$+ NPl/V3+ P    .\n> Find   what   you    want   instantly with our search   engine  .\n# NSg/VB NSg/I+ ISgPl+ NSg/VB R         P    D$+ N🅪Sg/VB+ NSg/VB+ .\n> They dismissed the meeting    with a   wave   of their hand    .\n# IPl+ VP/J      D+  N🅪Sg/Vg/J+ P    D/P NSg/VB P  D$+   NSg/VB+ .\n> Speak  with a    confident voice   .\n# NSg/VB P    D/P+ NSg/J+    NSg/VB+ .\n> With what   / whose money   ? I       have    nothing  left     to buy    groceries ( with ) .\n# P    NSg/I+ . I+    N🅪Sg/J+ . ISg/#r+ NSg/VXB NSg/I/J+ NPr/VP/J P  NSg/VB NPl/V3+   . P    . .\n> It       was  small    and  bumpy , with a   tinge  of orange      .\n# NPr/ISg+ VLPt NPr/VB/J VB/C J     . P    D/P NSg/VB P  NPr🅪Sg/VB/J .\n> There are lots   of people  with no        homes   after the wildfire .\n# R+    VLB NPl/V3 P  NPl/VB+ P    NSg/Dq/P+ NPl/V3+ P     D   NSg      .\n> Speak  with confidence .\n# NSg/VB P    Nᴹ+        .\n> He       spoke   with sadness in        his     voice   .\n# NPr/ISg+ NSg/VPt P    Nᴹ+     NPr/J/R/P ISg/D$+ NSg/VB+ .\n> The sailors were     infected with malaria .\n# D+  NPl+    NSg/VLPt NSg/VP/J P    Nᴹ+     .\n> overcome with happiness\n# VB       P    Nᴹ+\n> green       with envy   ; flushed with success\n# NPr🅪Sg/VB/J P    Nᴹ/VB+ . VP/J    P    N🅪Sg+\n> She  was  with Acme for   twenty years before retiring last     fall     .\n# ISg+ VLPt P    NSg  R/C/P NSg    NPl+  C/P    Nᴹ/Vg/J  NSg/VB/J N🅪Sg/VB+ .\n> With your kind  of body    size     , you    shouldn’t be       eating  pizza at    all          .\n# P    D$+  NSg/J P  NSg/VB+ N🅪Sg/VB+ . ISgPl+ VXB       NSg/VLXB Nᴹ/Vg/J N🅪Sg+ NSg/P NSg/I/J/C/Dq .\n> That          was  a   lot    to explain ; are you    still      with me       ?\n# NSg/I/C/Ddem+ VLPt D/P NPr/VB P  VB      . VLB ISgPl+ NSg/VB/J/R P    NPr/ISg+ .\n>\n#\n>              Adverb\n# HeadingStart NSg/VB+\n>\n#\n> Do  you    want   to come       with ?\n# VXB ISgPl+ NSg/VB P  NSg/VBPp/P P    .\n"
  },
  {
    "path": "harper-core/tests/text/tagged/Part-of-speech tagging.md",
    "content": "> <!--\n# Unlintable\n>            source: https://en.wikipedia.org/w/index.php?title=Part-of-speech_tagging&oldid=1275774341\n# Unlintable Unlintable\n>            license: CC BY-SA 4.0\n# Unlintable Unlintable\n>            -->\n# Unlintable Unlintable\n>                         Part      - of - speech   tagging\n# Unlintable HeadingStart NSg/VB/J+ . P  . N🅪Sg/VB+ NSg/Vg\n>\n#\n> In        corpus linguistics , part      - of - speech   tagging ( POS  tagging or    PoS  tagging or\n# NPr/J/R/P NSg+   Nᴹ+         . NSg/VB/J+ . P  . N🅪Sg/VB+ NSg/Vg  . NSg+ NSg/Vg  NPr/C NSg+ NSg/Vg  NPr/C\n> POST         ) , also called grammatical tagging is  the process of marking up         a   word    in        a\n# NPr🅪Sg/VB/P+ . . R/C  VP/J   J           NSg/Vg  VL3 D   NSg/VB  P  Nᴹ/Vg/J NSg/VB/J/P D/P NSg/VB+ NPr/J/R/P D/P\n> text     ( corpus ) as    corresponding to a   particular part     of speech   , based on  both   its\n# N🅪Sg/VB+ . NSg+   . R/C/P Nᴹ/Vg/J       P  D/P NSg/J      NSg/VB/J P  N🅪Sg/VB+ . VP/J  J/P I/C/Dq ISg/D$+\n> definition and  its     context  . A   simplified form    of this    is  commonly taught to\n# NSg        VB/C ISg/D$+ N🅪Sg/VB+ . D/P VP/J       N🅪Sg/VB P  I/Ddem+ VL3 R        VP     P\n> school  - age      children , in        the identification of words   as    nouns  , verbs   , adjectives ,\n# N🅪Sg/VB . N🅪Sg/VB+ NPl+     . NPr/J/R/P D   Nᴹ             P  NPl/V3+ R/C/P NPl/V3 . NPl/V3+ . NPl/V3     .\n> adverbs , etc.\n# NPl/V3  . +\n>\n#\n> Once  performed by    hand    , POS  tagging is  now       done      in        the context of computational\n# NSg/C VP/J      NSg/P NSg/VB+ . NSg+ NSg/Vg  VL3 NSg/J/R/C NSg/VPp/J NPr/J/R/P D   N🅪Sg/VB P  J\n> linguistics , using   algorithms which associate discrete terms   , as    well       as    hidden\n# Nᴹ+         . Nᴹ/Vg/J NPl+       I/C+  NSg/VB/J+ J        NPl/V3+ . R/C/P NSg/VB/J/R R/C/P VB/J\n> parts  of speech   , by    a   set       of descriptive tags    . POS  - tagging algorithms fall     into\n# NPl/V3 P  N🅪Sg/VB+ . NSg/P D/P NPr/VBP/J P  NSg/J       NPl/V3+ . NSg+ . NSg/Vg  NPl+       N🅪Sg/VB+ P\n> two distinctive groups  : rule    - based and  stochastic . E. Brill's tagger , one     of the\n# NSg NSg/J       NPl/V3+ . NSg/VB+ . VP/J  VB/C J          . ?  ?       NSg    . NSg/I/J P  D\n> first and  most         widely used English      POS  - taggers , employs rule    - based algorithms .\n# NSg/J VB/C NSg/I/J/R/Dq R      VP/J NPr🅪Sg/VB/J+ NSg+ . NPl     . NPl/V3  NSg/VB+ . VP/J  NPl+       .\n>\n#\n>              Principle\n# HeadingStart N🅪Sg/VB+\n>\n#\n> Part      - of - speech   tagging is  harder than just having  a   list   of words   and  their\n# NSg/VB/J+ . P  . N🅪Sg/VB+ NSg/Vg  VL3 JC     C/P  J/R  Nᴹ/Vg/J D/P NSg/VB P  NPl/V3+ VB/C D$+\n> parts  of speech   , because some     words   can     represent more         than one     part     of speech\n# NPl/V3 P  N🅪Sg/VB+ . C/P     I/J/R/Dq NPl/V3+ NPr/VXB VB        NPr/I/J/R/Dq C/P  NSg/I/J NSg/VB/J P  N🅪Sg/VB+\n> at    different times   , and  because some     parts  of speech   are complex  . This    is  not\n# NSg/P NSg/J     NPl/V3+ . VB/C C/P     I/J/R/Dq NPl/V3 P  N🅪Sg/VB+ VLB NSg/VB/J . I/Ddem+ VL3 NSg/R/C\n> rare     — in        natural languages ( as    opposed to many        artificial languages ) , a   large\n# NSg/VB/J . NPr/J/R/P NSg/J+  NPl+      . R/C/P VP/J    P  NSg/I/J/Dq+ J+         NPl+      . . D/P NSg/J\n> percentage of word    - forms   are ambiguous . For   example , even       \" dogs    \" , which is\n# N🅪Sg       P  NSg/VB+ . NPl/V3+ VLB J         . R/C/P NSg/VB+ . NSg/VB/J/R . NPl/V3+ . . I/C+  VL3\n> usually thought of as    just a    plural noun    , can     also be       a    verb    :\n# R       N🅪Sg/VP P  R/C/P J/R  D/P+ NSg/J+ NSg/VB+ . NPr/VXB R/C  NSg/VLXB D/P+ NSg/VB+ .\n>\n#\n> The sailor dogs    the hatch   .\n# D+  NSg+   NPl/V3+ D+  NSg/VB+ .\n>\n#\n> Correct  grammatical tagging will    reflect that          \" dogs    \" is  here used as    a   verb    , not\n# NSg/VB/J J           NSg/Vg  NPr/VXB VB      NSg/I/C/Ddem+ . NPl/V3+ . VL3 J/R  VP/J R/C/P D/P NSg/VB+ . NSg/R/C\n> as    the more         common   plural noun    . Grammatical context  is  one     way   to determine\n# R/C/P D   NPr/I/J/R/Dq NSg/VB/J NSg/J  NSg/VB+ . J+          N🅪Sg/VB+ VL3 NSg/I/J NSg/J P  VB\n> this    ; semantic analysis can     also be       used to infer that          \" sailor \" and  \" hatch  \"\n# I/Ddem+ . NSg/J+   N🅪Sg+    NPr/VXB R/C  NSg/VLXB VP/J P  VB    NSg/I/C/Ddem+ . NSg+   . VB/C . NSg/VB .\n> implicate \" dogs    \" as    1 ) in        the nautical context  and  2 ) an  action     applied to the\n# NSg/VB    . NPl/V3+ . R/C/P # . NPr/J/R/P D   J        N🅪Sg/VB+ VB/C # . D/P N🅪Sg/VB/J+ VP/J    P  D\n> object  \" hatch  \" ( in        this   context  , \" dogs    \" is  a   nautical term      meaning    \" fastens ( a\n# NSg/VB+ . NSg/VB . . NPr/J/R/P I/Ddem N🅪Sg/VB+ . . NPl/V3+ . VL3 D/P J        NSg/VB/J+ N🅪Sg/Vg/J+ . V3      . D/P\n> watertight door    ) securely \" ) .\n# J          NSg/VB+ . R        . . .\n>\n#\n>              Tag     sets\n# HeadingStart NSg/VB+ NPl/V3\n>\n#\n> Schools commonly teach  that         there are 9 parts  of speech  in        English     : noun    , verb    ,\n# NPl/V3+ R        NSg/VB NSg/I/C/Ddem R+    VLB # NPl/V3 P  N🅪Sg/VB NPr/J/R/P NPr🅪Sg/VB/J . NSg/VB+ . NSg/VB+ .\n> article , adjective , preposition , pronoun , adverb  , conjunction , and  interjection .\n# NSg/VB+ . NSg/VB/J+ . NSg/VB      . NSg/VB+ . NSg/VB+ . NSg/VB+     . VB/C N🅪Sg+        .\n> However , there are clearly many        more          categories and  sub      - categories . For   nouns  ,\n# C       . R+    VLB R       NSg/I/J/Dq+ NPr/I/J/R/Dq+ NPl+       VB/C NSg/VB/P . NPl+       . R/C/P NPl/V3 .\n> the plural , possessive , and  singular forms   can     be       distinguished . In        many\n# D   NSg/J  . NSg/J      . VB/C NSg/J    NPl/V3+ NPr/VXB NSg/VLXB VP/J          . NPr/J/R/P NSg/I/J/Dq+\n> languages words   are also marked for   their \" case       \" ( role as    subject   , object  ,\n# NPl+      NPl/V3+ VLB R/C  VP/J   R/C/P D$+   . NPr🅪Sg/VB+ . . NSg  R/C/P NSg/VB/J+ . NSg/VB+ .\n> etc. ) , grammatical gender     , and  so          on  ; while      verbs   are marked for   tense    , aspect   ,\n# +    . . J+          N🅪Sg/VB/J+ . VB/C NSg/I/J/R/C J/P . NSg/VB/C/P NPl/V3+ VLB VP/J   R/C/P NSg/VB/J . N🅪Sg/VB+ .\n> and  other     things . In        some     tagging systems , different inflections of the same\n# VB/C NSg/VB/J+ NPl+   . NPr/J/R/P I/J/R/Dq NSg/Vg  NPl+    . NSg/J     NPl         P  D   I/J\n> root    word    will    get    different parts  of speech   , resulting in        a   large number     of\n# NPr/VB+ NSg/VB+ NPr/VXB NSg/VB NSg/J     NPl/V3 P  N🅪Sg/VB+ . Nᴹ/Vg/J   NPr/J/R/P D/P NSg/J N🅪Sg/VB/JC P\n> tags    . For   example , NN for   singular common   nouns  , NNS for   plural common   nouns  , NP\n# NPl/V3+ . R/C/P NSg/VB+ . ?  R/C/P NSg/J    NSg/VB/J NPl/V3 . ?   R/C/P NSg/J  NSg/VB/J NPl/V3 . NPr\n> for   singular proper nouns  ( see    the POS  tags    used in        the Brown       Corpus ) . Other\n# R/C/P NSg/J    NSg/J  NPl/V3 . NSg/VB D   NSg+ NPl/V3+ VP/J NPr/J/R/P D   NPr🅪Sg/VB/J NSg+   . . NSg/VB/J\n> tagging systems use     a   smaller number     of tags    and  ignore fine     differences or\n# NSg/Vg  NPl+    N🅪Sg/VB D/P NSg/JC  N🅪Sg/VB/JC P  NPl/V3+ VB/C VB     NSg/VB/J NPl/VB      NPr/C\n> model     them     as    features somewhat independent from part      - of - speech   .\n# NSg/VB/J+ NSg/IPl+ R/C/P NPl/V3+  NSg/I/R  NSg/J       P    NSg/VB/J+ . P  . N🅪Sg/VB+ .\n>\n#\n> In        part      - of - speech   tagging by    computer , it       is  typical to distinguish from 50 to\n# NPr/J/R/P NSg/VB/J+ . P  . N🅪Sg/VB+ NSg/Vg  NSg/P NSg+     . NPr/ISg+ VL3 NSg/J   P  VB          P    #  P\n> 150 separate parts  of speech  for   English      . Work    on  stochastic methods for   tagging\n# #   NSg/VB/J NPl/V3 P  N🅪Sg/VB R/C/P NPr🅪Sg/VB/J+ . N🅪Sg/VB J/P J          NPl/V3+ R/C/P NSg/Vg\n> Koine Greek    ( DeRose 1990 ) has used over    1 , 000 parts  of speech   and  found  that\n# ?     NPr/VB/J . ?      #    . V3  VP/J NSg/J/P # . #   NPl/V3 P  N🅪Sg/VB+ VB/C NSg/VP NSg/I/C/Ddem\n> about as    many       words   were     ambiguous in        that         language as    in        English      . A\n# J/P   R/C/P NSg/I/J/Dq NPl/V3+ NSg/VLPt J         NPr/J/R/P NSg/I/C/Ddem N🅪Sg+    R/C/P NPr/J/R/P NPr🅪Sg/VB/J+ . D/P\n> morphosyntactic descriptor in        the case      of morphologically rich     languages is\n# ?               NSg        NPr/J/R/P D   NPr🅪Sg/VB P  ?               NPr/VB/J NPl+      VL3\n> commonly expressed using   very short      mnemonics , such  as    Ncmsan for   Category = Noun    ,\n# R        VP/J      Nᴹ/Vg/J J/R  NPr/VB/J/P NPl       . NSg/I R/C/P ?      R/C/P NSg+     . NSg/VB+ .\n> Type    = common   , Gender     = masculine , Number      = singular , Case       = accusative , Animate\n# NSg/VB+ . NSg/VB/J . N🅪Sg/VB/J+ . NSg/J     . N🅪Sg/VB/JC+ . NSg/J    . NPr🅪Sg/VB+ . NSg/J      . VB/J\n> = no       .\n# . NSg/Dq/P .\n>\n#\n> The most         popular \" tag    set       \" for   POS  tagging for   American English      is  probably the\n# D   NSg/I/J/R/Dq NSg/J   . NSg/VB NPr/VBP/J . R/C/P NSg+ NSg/Vg  R/C/P NPr/J    NPr🅪Sg/VB/J+ VL3 R        D\n> Penn tag     set       , developed in        the Penn Treebank project . It       is  largely similar to\n# NPr+ NSg/VB+ NPr/VBP/J . VP/J      NPr/J/R/P D   NPr+ ?        NSg/VB+ . NPr/ISg+ VL3 R       NSg/J   P\n> the earlier Brown       Corpus and  LOB    Corpus tag     sets   , though much         smaller . In\n# D   JC      NPr🅪Sg/VB/J NSg    VB/C NSg/VB NSg+   NSg/VB+ NPl/V3 . C      NSg/I/J/R/Dq NSg/JC  . NPr/J/R/P\n> Europe , tag     sets   from the Eagles Guidelines see    wide  use      and  include versions\n# NPr+   . NSg/VB+ NPl/V3 P    D   NPl/V3 NPl+       NSg/VB NSg/J N🅪Sg/VB+ VB/C NSg/VB  NPl/V3+\n> for   multiple languages .\n# R/C/P NSg/J/Dq NPl+      .\n>\n#\n> POS  tagging work     has been     done      in        a   variety of languages , and  the set       of POS\n# NSg+ NSg/Vg  N🅪Sg/VB+ V3  NSg/VLPp NSg/VPp/J NPr/J/R/P D/P N🅪Sg    P  NPl+      . VB/C D   NPr/VBP/J P  NSg+\n> tags    used varies greatly with language . Tags    usually are designed to include\n# NPl/V3+ VP/J NPl/V3 R       P    N🅪Sg+    . NPl/V3+ R       VLB VP/J     P  NSg/VB\n> overt  morphological distinctions , although this   leads  to inconsistencies such  as\n# NSg/J+ J+            NPl+         . C        I/Ddem NPl/V3 P  NPl             NSg/I R/C/P\n> case       - marking for   pronouns but     not     nouns  in        English      , and  much         larger\n# NPr🅪Sg/VB+ . Nᴹ/Vg/J R/C/P NPl/V3   NSg/C/P NSg/R/C NPl/V3 NPr/J/R/P NPr🅪Sg/VB/J+ . VB/C NSg/I/J/R/Dq JC\n> cross       - language differences . The tag     sets   for   heavily inflected languages such  as\n# NPr/VB/J/P+ . N🅪Sg+    NPl/VB+     . D+  NSg/VB+ NPl/V3 R/C/P R       VP/J      NPl+      NSg/I R/C/P\n> Greek    and  Latin can     be       very large ; tagging words   in        agglutinative languages such\n# NPr/VB/J VB/C NPr/J NPr/VXB NSg/VLXB J/R  NSg/J . NSg/Vg  NPl/V3+ NPr/J/R/P J             NPl+      NSg/I\n> as    Inuit languages may     be       virtually impossible . At    the other    extreme , Petrov et\n# R/C/P NPr/J NPl+      NPr/VXB NSg/VLXB R         NSg/J      . NSg/P D   NSg/VB/J NSg/J   . ?      ?\n> al. have    proposed a   \" universal \" tag     set       , with 12 categories ( for   example , no\n# ?   NSg/VXB VP/J     D/P . NSg/J     . NSg/VB+ NPr/VBP/J . P    #  NPl+       . R/C/P NSg/VB+ . NSg/Dq/P\n> subtypes of nouns  , verbs   , punctuation , and  so          on  ) . Whether a   very small    set       of\n# NPl      P  NPl/V3 . NPl/V3+ . Nᴹ+         . VB/C NSg/I/J/R/C J/P . . I/C     D/P J/R  NPr/VB/J NPr/VBP/J P\n> very broad tags    or    a   much         larger set       of more         precise ones is  preferable , depends\n# J/R  NSg/J NPl/V3+ NPr/C D/P NSg/I/J/R/Dq JC     NPr/VBP/J P  NPr/I/J/R/Dq VB/J+   NPl+ VL3 J          . NPl/V3\n> on  the purpose  at    hand    . Automatic tagging is  easier on  smaller tag     - sets   .\n# J/P D   N🅪Sg/VB+ NSg/P NSg/VB+ . NSg/J     NSg/Vg  VL3 NSg/JC J/P NSg/JC  NSg/VB+ . NPl/V3 .\n>\n#\n>              History\n# HeadingStart N🅪Sg+\n>\n#\n>              The Brown       Corpus\n# HeadingStart D+  NPr🅪Sg/VB/J NSg+\n>\n#\n> Research on  part      - of - speech   tagging has been     closely tied to corpus linguistics .\n# Nᴹ/VB    J/P NSg/VB/J+ . P  . N🅪Sg/VB+ NSg/Vg  V3  NSg/VLPp R       VP/J P  NSg    Nᴹ+         .\n> The first major    corpus of English     for   computer analysis was  the Brown       Corpus\n# D   NSg/J NPr/VB/J NSg    P  NPr🅪Sg/VB/J R/C/P NSg+     N🅪Sg+    VLPt D   NPr🅪Sg/VB/J NSg\n> developed at    Brown       University by    Henry Kučera and  W. Nelson Francis , in        the\n# VP/J      NSg/P NPr🅪Sg/VB/J NSg+       NSg/P NPr+  ?      VB/C ?  NPr+   NPr+    . NPr/J/R/P D\n> mid      - 1960s . It       consists of about 1 , 000 , 000 words  of running   English      prose text     ,\n# NSg/J/P+ . #d    . NPr/ISg+ NPl/V3   P  J/P   # . #   . #   NPl/V3 P  Nᴹ/Vg/J/P NPr🅪Sg/VB/J+ Nᴹ/VB N🅪Sg/VB+ .\n> made up         of 500 samples from randomly chosen   publications . Each sample  is  2 , 000\n# VP   NSg/VB/J/P P  #   NPl/V3+ P    R        Nᴹ/VPp/J NPl+         . Dq+  NSg/VB+ VL3 # . #\n> or    more         words   ( ending  at    the first sentence - end     after 2 , 000 words   , so          that         the\n# NPr/C NPr/I/J/R/Dq NPl/V3+ . Nᴹ/Vg/J NSg/P D   NSg/J NSg/VB+  . NSg/VB+ P     # . #   NPl/V3+ . NSg/I/J/R/C NSg/I/C/Ddem D\n> corpus contains only  complete sentences ) .\n# NSg+   V3       J/R/C NSg/VB/J NPl/V3+   . .\n>\n#\n> The Brown        Corpus was  painstakingly \" tagged \" with part      - of - speech   markers over\n# D+  NPr🅪Sg/VB/J+ NSg+   VLPt R             . VP/J   . P    NSg/VB/J+ . P  . N🅪Sg/VB+ NPl/V3  NSg/J/P\n> many        years . A    first  approximation was  done      with a    program by    Greene and  Rubin ,\n# NSg/I/J/Dq+ NPl+  . D/P+ NSg/J+ N🅪Sg+         VLPt NSg/VPp/J P    D/P+ NPr/VB+ NSg/P NPr    VB/C NPr   .\n> which consisted of a   huge handmade list   of what   categories could   co        - occur at\n# I/C+  VP/J      P  D/P J    NSg/J    NSg/VB P  NSg/I+ NPl+       NSg/VXB NPr/I/VB+ . VB    NSg/P\n> all          . For   example , article then      noun    can     occur , but     article then      verb    ( arguably )\n# NSg/I/J/C/Dq . R/C/P NSg/VB+ . NSg/VB+ NSg/J/R/C NSg/VB+ NPr/VXB VB    . NSg/C/P NSg/VB+ NSg/J/R/C NSg/VB+ . R        .\n> cannot  . The program got about 70 % correct  . Its     results were     repeatedly reviewed\n# NSg/VXB . D+  NPr/VB+ VP  J/P   #  . NSg/VB/J . ISg/D$+ NPl/V3+ NSg/VLPt R          VP/J\n> and  corrected by    hand    , and  later users sent   in        errata so          that          by    the late  70 s\n# VB/C VP/J      NSg/P NSg/VB+ . VB/C JC    NPl+  NSg/VP NPr/J/R/P NSg    NSg/I/J/R/C NSg/I/C/Ddem+ NSg/P D   NSg/J #  ?\n> the tagging was  nearly perfect  ( allowing for   some     cases   on  which even       human\n# D   NSg/Vg  VLPt R      NSg/VB/J . Nᴹ/Vg/J  R/C/P I/J/R/Dq NPl/V3+ J/P I/C+  NSg/VB/J/R NSg/VB/J+\n> speakers might    not     agree ) .\n# +        Nᴹ/VXB/J NSg/R/C VB    . .\n>\n#\n> This    corpus has been     used for   innumerable studies of word    - frequency and  of\n# I/Ddem+ NSg+   V3  NSg/VLPp VP/J R/C/P J           NPl/V3  P  NSg/VB+ . NSg       VB/C P\n> part      - of - speech   and  inspired the development of similar \" tagged \" corpora in        many\n# NSg/VB/J+ . P  . N🅪Sg/VB+ VB/C VP/J     D   N🅪Sg        P  NSg/J   . VP/J   . NPl+    NPr/J/R/P NSg/I/J/Dq\n> other    languages . Statistics derived by    analyzing it       formed the basis for   most\n# NSg/VB/J NPl+      . NPl/V3+    VP/J    NSg/P Nᴹ/Vg/J   NPr/ISg+ VP/J   D+  NSg+  R/C/P NSg/I/J/R/Dq\n> later part      - of - speech   tagging systems , such  as    CLAWS   and  VOLSUNGA . However , by\n# JC    NSg/VB/J+ . P  . N🅪Sg/VB+ NSg/Vg  NPl+    . NSg/I R/C/P NPl/V3+ VB/C ?        . C       . NSg/P\n> this    time       ( 2005 ) it       has been     superseded by    larger corpora such  as    the 100\n# I/Ddem+ N🅪Sg/VB/J+ . #    . NPr/ISg+ V3  NSg/VLPp VP/J       NSg/P JC     NPl+    NSg/I R/C/P D   #\n> million word    British National Corpus , even       though larger corpora are rarely so\n# NSg     NSg/VB+ NPr/J   NSg/J    NSg+   . NSg/VB/J/R C      JC     NPl+    VLB R      NSg/I/J/R/C\n> thoroughly curated .\n# R          VP/J    .\n>\n#\n> For   some     time       , part      - of - speech   tagging was  considered an  inseparable part     of\n# R/C/P I/J/R/Dq N🅪Sg/VB/J+ . NSg/VB/J+ . P  . N🅪Sg/VB+ NSg/Vg  VLPt VP/J       D/P NSg/J       NSg/VB/J P\n> natural language processing , because there are certain cases   where   the correct\n# NSg/J   N🅪Sg+    Nᴹ/Vg/J+   . C/P     R+    VLB I/J     NPl/V3+ NSg/R/C D   NSg/VB/J\n> part     of speech   cannot  be       decided  without understanding the semantics or    even       the\n# NSg/VB/J P  N🅪Sg/VB+ NSg/VXB NSg/VLXB NSg/VP/J C/P     N🅪Sg/Vg/J+    D   NPl+      NPr/C NSg/VB/J/R D\n> pragmatics of the context  . This    is  extremely expensive , especially because\n# NPl        P  D   N🅪Sg/VB+ . I/Ddem+ VL3 R         J         . R          C/P\n> analyzing the higher  levels  is  much         harder when    multiple part     - of - speech\n# Nᴹ/Vg/J   D+  NSg/JC+ NPl/V3+ VL3 NSg/I/J/R/Dq JC     NSg/I/C NSg/J/Dq NSg/VB/J . P  . N🅪Sg/VB+\n> possibilities must    be       considered for   each word    .\n# NPl+          NSg/VXB NSg/VLXB VP/J       R/C/P Dq+  NSg/VB+ .\n>\n#\n>              Use     of hidden Markov models\n# HeadingStart N🅪Sg/VB P  VB/J   NPr    NPl/V3+\n>\n#\n> In        the mid      - 1980s , researchers in        Europe began to use     hidden Markov models  ( HMMs )\n# NPr/J/R/P D   NSg/J/P+ . #d    . NPl         NPr/J/R/P NPr+   VPt   P  N🅪Sg/VB VB/J   NPr    NPl/V3+ . ?    .\n> to disambiguate parts  of speech   , when    working to tag    the Lancaster - Oslo - Bergen\n# P  VB           NPl/V3 P  N🅪Sg/VB+ . NSg/I/C Nᴹ/Vg/J P  NSg/VB D   NPr       . NPr+ . NPr+\n> Corpus of British English      . HMMs involve counting cases   ( such  as    from the Brown\n# NSg    P  NPr/J   NPr🅪Sg/VB/J+ . ?    VB      Nᴹ/Vg/J  NPl/V3+ . NSg/I R/C/P P    D   NPr🅪Sg/VB/J\n> Corpus ) and  making  a   table  of the probabilities of certain sequences . For\n# NSg+   . VB/C Nᴹ/Vg/J D/P NSg/VB P  D   NPl           P  I/J     NPl/V3+   . R/C/P\n> example , once  you've seen    an  article such  as    ' the ' , perhaps the next    word    is  a\n# NSg/VB+ . NSg/C K      NSg/VPp D/P NSg/VB+ NSg/I R/C/P . D   . . NSg/R   D   NSg/J/P NSg/VB+ VL3 D/P\n> noun    40 % of the time       , an  adjective 40 % , and  a   number      20 % . Knowing    this    , a\n# NSg/VB+ #  . P  D   N🅪Sg/VB/J+ . D/P NSg/VB/J+ #  . . VB/C D/P N🅪Sg/VB/JC+ #  . . NSg/Vg/J/P I/Ddem+ . D/P+\n> program can     decide that          \" can     \" in        \" the can     \" is  far      more         likely to be       a   noun   than\n# NPr/VB+ NPr/VXB VB     NSg/I/C/Ddem+ . NPr/VXB . NPr/J/R/P . D+  NPr/VXB . VL3 NSg/VB/J NPr/I/J/R/Dq NSg/J  P  NSg/VLXB D/P NSg/VB C/P\n> a    verb    or    a   modal . The same method  can     , of course  , be       used to benefit from\n# D/P+ NSg/VB+ NPr/C D/P NSg/J . D+  I/J+ NSg/VB+ NPr/VXB . P  NSg/VB+ . NSg/VLXB VP/J P  NSg/VB  P\n> knowledge about the following   words   .\n# Nᴹ+       J/P   D+  N🅪Sg/Vg/J/P NPl/V3+ .\n>\n#\n> More         advanced ( \" higher - order   \" ) HMMs learn  the probabilities not     only  of pairs\n# NPr/I/J/R/Dq VP/J     . . NSg/JC . N🅪Sg/VB . . ?    NSg/VB D   NPl+          NSg/R/C J/R/C P  NPl/V3+\n> but     triples or    even       larger sequences . So          , for   example , if    you've just seen    a\n# NSg/C/P NPl/V3  NPr/C NSg/VB/J/R JC     NPl/V3+   . NSg/I/J/R/C . R/C/P NSg/VB+ . NSg/C K      J/R  NSg/VPp D/P\n> noun    followed by    a   verb    , the next    item    may     be       very likely a   preposition ,\n# NSg/VB+ VP/J     NSg/P D/P NSg/VB+ . D   NSg/J/P NSg/VB+ NPr/VXB NSg/VLXB J/R  NSg/J  D/P NSg/VB      .\n> article , or    noun    , but     much         less       likely another verb    .\n# NSg/VB+ . NPr/C NSg/VB+ . NSg/C/P NSg/I/J/R/Dq VB/J/R/C/P NSg/J  I/D     NSg/VB+ .\n>\n#\n> When    several ambiguous words   occur together , the possibilities multiply .\n# NSg/I/C J/Dq+   J+        NPl/V3+ VB    J        . D+  NPl+          NSg/VB   .\n> However , it       is  easy     to enumerate every combination and  to assign a   relative\n# C       . NPr/ISg+ VL3 NSg/VB/J P  VB        Dq+   N🅪Sg+       VB/C P  NSg/VB D/P NSg/J\n> probability to each one      , by    multiplying together the probabilities of each\n# NSg+        P  Dq   NSg/I/J+ . NSg/P Nᴹ/Vg/J     J        D   NPl           P  Dq\n> choice  in        turn   . The combination with the highest probability is  then      chosen   . The\n# N🅪Sg/J+ NPr/J/R/P NSg/VB . D   N🅪Sg        P    D+  JS+     NSg+        VL3 NSg/J/R/C Nᴹ/VPp/J . D+\n> European group   developed CLAWS   , a   tagging program that          did  exactly this   and\n# NSg/J+   NSg/VB+ VP/J      NPl/V3+ . D/P NSg/Vg  NPr/VB+ NSg/I/C/Ddem+ VXPt R       I/Ddem VB/C\n> achieved accuracy in        the 93 – 95 % range    .\n# VP/J     N🅪Sg+    NPr/J/R/P D   #  . #  . N🅪Sg/VB+ .\n>\n#\n> Eugene Charniak points  out          in        Statistical techniques for   natural language\n# NPr+   ?        NPl/V3+ NSg/VB/J/R/P NPr/J/R/P J           NPl        R/C/P NSg/J+  N🅪Sg+\n> parsing ( 1997 ) that          merely assigning the most         common   tag     to each known word    and\n# Nᴹ/Vg/J . #    . NSg/I/C/Ddem+ R      Nᴹ/Vg/J   D   NSg/I/J/R/Dq NSg/VB/J NSg/VB+ P  Dq   VPp/J NSg/VB+ VB/C\n> the tag     \" proper noun    \" to all          unknowns will    approach 90 % accuracy because many\n# D   NSg/VB+ . NSg/J  NSg/VB+ . P  NSg/I/J/C/Dq NPl/V3+  NPr/VXB N🅪Sg/VB+ #  . N🅪Sg+    C/P     NSg/I/J/Dq\n> words   are unambiguous , and  many       others  only  rarely represent their less       - common\n# NPl/V3+ VLB J           . VB/C NSg/I/J/Dq NPl/V3+ J/R/C R      VB        D$+   VB/J/R/C/P . NSg/VB/J\n> parts  of speech   .\n# NPl/V3 P  N🅪Sg/VB+ .\n>\n#\n> CLAWS   pioneered the field  of HMM - based part     of speech   tagging but     was  quite\n# NPl/V3+ VP/J      D   NSg/VB P  VB  . VP/J  NSg/VB/J P  N🅪Sg/VB+ NSg/Vg  NSg/C/P VLPt R\n> expensive since it       enumerated all          possibilities . It       sometimes had to resort to\n# J         C/P   NPr/ISg+ VP/J       NSg/I/J/C/Dq NPl+          . NPr/ISg+ R         VP  P  NSg/VB P\n> backup methods when    there were     simply too many       options ( the Brown        Corpus\n# NSg/J  NPl/V3+ NSg/I/C R+    NSg/VLPt R      R   NSg/I/J/Dq NPl/V3  . D+  NPr🅪Sg/VB/J+ NSg+\n> contains a   case       with 17 ambiguous words  in        a    row     , and  there are words   such  as\n# V3       D/P NPr🅪Sg/VB+ P    #  J         NPl/V3 NPr/J/R/P D/P+ NSg/VB+ . VB/C R+    VLB NPl/V3+ NSg/I R/C/P\n> \" still      \" that          can     represent as    many       as    7 distinct parts  of speech   .\n# . NSg/VB/J/R . NSg/I/C/Ddem+ NPr/VXB VB        R/C/P NSg/I/J/Dq R/C/P # VB/J     NPl/V3 P  N🅪Sg/VB+ .\n>\n#\n> HMMs underlie the functioning of stochastic taggers and  are used in        various\n# ?    VB       D   Nᴹ/Vg/J+    P  J          NPl     VB/C VLB VP/J NPr/J/R/P J\n> algorithms one     of the most         widely used being        the bi    - directional inference\n# NPl+       NSg/I/J P  D   NSg/I/J/R/Dq R      VP/J N🅪Sg/VLg/J/C D   NSg/J . NSg/J       NSg+\n> algorithm .\n# NSg       .\n>\n#\n>              Dynamic programming methods\n# HeadingStart NSg/J+  Nᴹ/Vg/J+    NPl/V3+\n>\n#\n> In        1987 , Steven DeRose and  Kenneth W. Church     independently developed dynamic\n# NPr/J/R/P #    . NPr+   ?      VB/C NPr+    ?  NPr🅪Sg/VB+ R             VP/J      NSg/J\n> programming algorithms to solve  the same problem in        vastly less       time       . Their\n# Nᴹ/Vg/J+    NPl+       P  NSg/VB D   I/J  NSg/J+  NPr/J/R/P R      VB/J/R/C/P N🅪Sg/VB/J+ . D$+\n> methods were     similar to the Viterbi algorithm known for   some     time       in        other\n# NPl/V3+ NSg/VLPt NSg/J   P  D   ?       NSg       VPp/J R/C/P I/J/R/Dq N🅪Sg/VB/J+ NPr/J/R/P NSg/VB/J\n> fields    . DeRose used a   table  of pairs   , while      Church     used a   table  of triples and  a\n# NPrPl/V3+ . ?      VP/J D/P NSg/VB P  NPl/V3+ . NSg/VB/C/P NPr🅪Sg/VB+ VP/J D/P NSg/VB P  NPl/V3  VB/C D/P\n> method of estimating the values  for   triples that          were     rare     or    nonexistent in        the\n# NSg/VB P  Nᴹ/Vg/J    D   NPl/V3+ R/C/P NPl/V3  NSg/I/C/Ddem+ NSg/VLPt NSg/VB/J NPr/C NSg/J       NPr/J/R/P D\n> Brown       Corpus ( an  actual measurement of triple   probabilities would require a   much\n# NPr🅪Sg/VB/J NSg+   . D/P NSg/J  N🅪Sg        P  NSg/VB/J NPl+          VXB   NSg/VB  D/P NSg/I/J/R/Dq\n> larger corpus ) . Both   methods achieved an  accuracy of over    95 % . DeRose's 1990\n# JC     NSg+   . . I/C/Dq NPl/V3+ VP/J     D/P N🅪Sg+    P  NSg/J/P #  . . ?        #\n> dissertation at    Brown       University included analyses     of the specific error   types   ,\n# NSg+         NSg/P NPr🅪Sg/VB/J NSg+       VP/J     NPl/V3/Au/Br P  D   NSg/J    NSg/VB+ NPl/V3+ .\n> probabilities , and  other    related data  , and  replicated his     work     for   Greek    , where\n# NPl+          . VB/C NSg/VB/J J       N🅪Pl+ . VB/C VP/J       ISg/D$+ N🅪Sg/VB+ R/C/P NPr/VB/J . NSg/R/C\n> it       proved similarly effective .\n# NPr/ISg+ VP/J   R         NSg/J     .\n>\n#\n> These   findings were     surprisingly disruptive to the field  of natural language\n# I/Ddem+ NSg+     NSg/VLPt R            J          P  D   NSg/VB P  NSg/J+  N🅪Sg+\n> processing . The accuracy reported was  higher than the typical accuracy of very\n# Nᴹ/Vg/J+   . D+  N🅪Sg+    VP/J     VLPt NSg/JC C/P  D   NSg/J   N🅪Sg     P  J/R\n> sophisticated algorithms that          integrated part     of speech   choice  with many       higher\n# VP/J+         NPl+       NSg/I/C/Ddem+ VP/J       NSg/VB/J P  N🅪Sg/VB+ N🅪Sg/J+ P    NSg/I/J/Dq NSg/JC\n> levels of linguistic analysis : syntax , morphology , semantics , and  so          on  . CLAWS   ,\n# NPl/V3 P  J          N🅪Sg     . Nᴹ+    . Nᴹ+        . NPl+      . VB/C NSg/I/J/R/C J/P . NPl/V3+ .\n> DeRose's and  Church's methods did  fail     for   some     of the known cases   where\n# ?        VB/C NPr$     NPl/V3+ VXPt NSg/VB/J R/C/P I/J/R/Dq P  D   VPp/J NPl/V3+ NSg/R/C\n> semantics is  required , but     those  proved negligibly rare     . This   convinced many       in\n# NPl+      VL3 VP/J     . NSg/C/P I/Ddem VP/J   R          NSg/VB/J . I/Ddem VP/J      NSg/I/J/Dq NPr/J/R/P\n> the field   that          part      - of - speech   tagging could   usefully be       separated from the other\n# D+  NSg/VB+ NSg/I/C/Ddem+ NSg/VB/J+ . P  . N🅪Sg/VB+ NSg/Vg  NSg/VXB R        NSg/VLXB VP/J      P    D   NSg/VB/J\n> levels of processing ; this    , in        turn   , simplified the theory and  practice of\n# NPl/V3 P  Nᴹ/Vg/J+   . I/Ddem+ . NPr/J/R/P NSg/VB . VP/J       D   N🅪Sg   VB/C NSg/VB   P\n> computerized language analysis and  encouraged researchers to find   ways to\n# VP/J         N🅪Sg+    N🅪Sg+    VB/C VP/J       NPl+        P  NSg/VB NPl+ P\n> separate other    pieces  as    well       . Markov Models  became the standard method  for   the\n# NSg/VB/J NSg/VB/J NPl/V3+ R/C/P NSg/VB/J/R . NPr    NPl/V3+ VPt    D   NSg/J    NSg/VB+ R/C/P D\n> part      - of - speech   assignment .\n# NSg/VB/J+ . P  . N🅪Sg/VB+ NSg+       .\n>\n#\n>              Unsupervised taggers\n# HeadingStart VB/J         NPl\n>\n#\n> The methods already discussed involve working from a    pre       - existing corpus to\n# D+  NPl/V3+ R       VP/J      VB      Nᴹ/Vg/J P    D/P+ NSg/VB/P+ . Nᴹ/Vg/J  NSg+   P\n> learn  tag     probabilities . It       is  , however , also possible to bootstrap using\n# NSg/VB NSg/VB+ NPl+          . NPr/ISg+ VL3 . C       . R/C  NSg/J    P  NSg/VB    Nᴹ/Vg/J\n> \" unsupervised \" tagging . Unsupervised tagging techniques use     an  untagged corpus\n# . VB/J         . NSg/Vg  . VB/J         NSg/Vg  NPl+       N🅪Sg/VB D/P VP/J     NSg+\n> for   their training data  and  produce the tagset by    induction . That          is  , they\n# R/C/P D$+   Nᴹ/Vg/J+ N🅪Pl+ VB/C Nᴹ/VB   D   NSg    NSg/P N🅪Sg      . NSg/I/C/Ddem+ VL3 . IPl+\n> observe patterns in        word    use     , and  derive part      - of - speech   categories themselves .\n# NSg/VB  NPl/V3+  NPr/J/R/P NSg/VB+ N🅪Sg/VB . VB/C NSg/VB NSg/VB/J+ . P  . N🅪Sg/VB+ NPl+       IPl+       .\n> For   example , statistics readily reveal that          \" the \" , \" a   \" , and  \" an  \" occur in\n# R/C/P NSg/VB+ . NPl/V3+    R       NSg/VB NSg/I/C/Ddem+ . D   . . . D/P . . VB/C . D/P . VB    NPr/J/R/P\n> similar contexts , while      \" eat \" occurs in        very different ones . With sufficient\n# NSg/J+  NPl/V3+  . NSg/VB/C/P . VB  . V3     NPr/J/R/P J/R  NSg/J+    NPl+ . P    J\n> iteration , similarity classes of words   emerge that          are remarkably similar to\n# N🅪Sg      . NSg        NPl/V3  P  NPl/V3+ NSg/VB NSg/I/C/Ddem+ VLB R          NSg/J   P\n> those  human    linguists would expect ; and  the differences themselves sometimes\n# I/Ddem NSg/VB/J NPl+      VXB   VB     . VB/C D   NPl/VB+     IPl+       R\n> suggest valuable new   insights .\n# VB      NSg/J    NSg/J NPl+     .\n>\n#\n> These   two  categories can     be       further subdivided into rule    - based , stochastic , and\n# I/Ddem+ NSg+ NPl+       NPr/VXB NSg/VLXB VB/JC   VP/J       P    NSg/VB+ . VP/J  . J          . VB/C\n> neural approaches .\n# J      NPl/V3+    .\n>\n#\n>              Other    taggers and  methods\n# HeadingStart NSg/VB/J NPl     VB/C NPl/V3+\n>\n#\n> Some     current major    algorithms for   part      - of - speech   tagging include the Viterbi\n# I/J/R/Dq NSg/J   NPr/VB/J NPl        R/C/P NSg/VB/J+ . P  . N🅪Sg/VB+ NSg/Vg  NSg/VB  D   ?\n> algorithm , Brill tagger , Constraint Grammar  , and  the Baum - Welch algorithm ( also\n# NSg       . NSg/J NSg    . NSg+       N🅪Sg/VB+ . VB/C D   NPr  . ?     NSg       . R/C\n> known as    the forward  - backward algorithm ) . Hidden Markov model     and  visible Markov\n# VPp/J R/C/P D   NSg/VB/J . NSg/J    NSg       . . VB/J   NPr    NSg/VB/J+ VB/C J       NPr\n> model     taggers can     both   be       implemented using   the Viterbi algorithm . The\n# NSg/VB/J+ NPl     NPr/VXB I/C/Dq NSg/VLXB VP/J        Nᴹ/Vg/J D   ?       NSg       . D+\n> rule    - based Brill tagger is  unusual in        that         it       learns a   set       of rule    patterns , and\n# NSg/VB+ . VP/J  NSg/J NSg    VL3 NSg/J   NPr/J/R/P NSg/I/C/Ddem NPr/ISg+ NPl/V3 D/P NPr/VBP/J P  NSg/VB+ NPl/V3+  . VB/C\n> then      applies those  patterns rather     than optimizing a   statistical quantity .\n# NSg/J/R/C V3      I/Ddem NPl/V3+  NPr/VB/J/R C/P  Nᴹ/Vg/J    D/P J           N🅪Sg+    .\n>\n#\n> Many        machine learning methods have    also been     applied to the problem of POS\n# NSg/I/J/Dq+ NSg/VB+ Nᴹ/Vg/J+ NPl/V3+ NSg/VXB R/C  NSg/VLPp VP/J    P  D   NSg/J   P  NSg+\n> tagging . Methods such  as    SVM , maximum entropy classifier , perceptron , and\n# NSg/Vg  . NPl/V3+ NSg/I R/C/P ?   . NSg/J   NSg     NSg        . NSg        . VB/C\n> nearest - neighbor     have    all          been     tried , and  most         can     achieve accuracy above\n# JS      . NSg/VB/J/Am+ NSg/VXB NSg/I/J/C/Dq NSg/VLPp VP/J  . VB/C NSg/I/J/R/Dq NPr/VXB VB      N🅪Sg+    NSg/J/P\n> 95 % . [ citation needed ]\n# #  . . . NSg+     VP/J   .\n>\n#\n> A   direct comparison of several methods is  reported ( with references ) at    the ACL\n# D/P VB/J   NSg        P  J/Dq+   NPl/V3+ VL3 VP/J     . P    NPl/V3+    . NSg/P D   NSg\n> Wiki    . This    comparison uses   the Penn tag     set       on  some     of the Penn Treebank data  ,\n# NSg/VB+ . I/Ddem+ NSg+       NPl/V3 D+  NPr+ NSg/VB+ NPr/VBP/J J/P I/J/R/Dq P  D   NPr+ ?        N🅪Pl+ .\n> so          the results are directly comparable . However , many       significant taggers are\n# NSg/I/J/R/C D   NPl/V3+ VLB R/C      NSg/J      . C       . NSg/I/J/Dq NSg/J       NPl     VLB\n> not     included ( perhaps because of the labor            involved in        reconfiguring them     for\n# NSg/R/C VP/J     . NSg/R   C/P     P  D   NPr🅪Sg/VB/Am/Au+ VP/J     NPr/J/R/P Nᴹ/Vg/J       NSg/IPl+ R/C/P\n> this   particular dataset ) . Thus , it       should not     be       assumed that         the results\n# I/Ddem NSg/J      NSg     . . NSg  . NPr/ISg+ VXB    NSg/R/C NSg/VLXB VP/J    NSg/I/C/Ddem D+  NPl/V3+\n> reported here are the best       that          can     be       achieved with a    given        approach ; nor   even\n# VP/J     J/R  VLB D   NPr/VXB/JS NSg/I/C/Ddem+ NPr/VXB NSg/VLXB VP/J     P    D/P+ NSg/VPp/J/P+ N🅪Sg/VB+ . NSg/C NSg/VB/J/R\n> the best        that          have    been     achieved with a    given        approach .\n# D+  NPr/VXB/JS+ NSg/I/C/Ddem+ NSg/VXB NSg/VLPp VP/J     P    D/P+ NSg/VPp/J/P+ N🅪Sg/VB+ .\n>\n#\n> In        2014 , a    paper      reporting using   the structure regularization method for\n# NPr/J/R/P #    . D/P+ N🅪Sg/VB/J+ Nᴹ/Vg/J   Nᴹ/Vg/J D   N🅪Sg/VB+  N🅪Sg           NSg/VB R/C/P\n> part      - of - speech   tagging , achieving 97.36 % on  a   standard benchmark dataset .\n# NSg/VB/J+ . P  . N🅪Sg/VB+ NSg/Vg  . Nᴹ/Vg/J   #     . J/P D/P NSg/J    NSg/VB    NSg     .\n"
  },
  {
    "path": "harper-core/tests/text/tagged/Spell.US.md",
    "content": ">              Spell\n# HeadingStart NSg/VB\n>\n#\n> This    document contains a   list   of words   spelled correctly in        some     dialects of English      , but     not     American English      . This    is  designed to test   the spelling suggestions we   give   for   such   mistakes .\n# I/Ddem+ NSg/VB+  V3       D/P NSg/VB P  NPl/V3+ VP/J    R         NPr/J/R/P I/J/R/Dq NPl      P  NPr🅪Sg/VB/J+ . NSg/C/P NSg/R/C NPr/J    NPr🅪Sg/VB/J+ . I/Ddem+ VL3 VP/J     P  NSg/VB D+  Nᴹ/Vg/J+ NPl+        IPl+ NSg/VB R/C/P NSg/I+ NPl/V3+  .\n>\n#\n> To achieve this    , the filename of this   file    contains `.US.`     , which will    tell   the snapshot generator to use     the American dialect , rather     than trying  to use     an  automatically detected dialect .\n# P  VB      I/Ddem+ . D   NSg      P  I/Ddem NSg/VB+ V3       Unlintable . I/C+  NPr/VXB NPr/VB D   NSg/VB+  NSg       P  N🅪Sg/VB D   NPr/J    NSg+    . NPr/VB/J/R C/P  Nᴹ/Vg/J P  N🅪Sg/VB D/P R             VP/J     NSg+    .\n>\n#\n>              Words\n# HeadingStart NPl/V3+\n>\n#\n>\n#\n>\n#\n> Afterwards .\n# R/Comm     .\n>\n#\n> Centre       .\n# NSg/VB/Comm+ .\n>\n#\n> Labelled  .\n# VP/J/Comm .\n>\n#\n> Flavour       .\n# N🅪Sg/VB/Comm+ .\n>\n#\n> Favoured  .\n# VP/J/Comm .\n>\n#\n> Honour        .\n# N🅪Sg/VB/Comm+ .\n>\n#\n> Grey             .\n# NPr🅪Sg/VB/J/Comm .\n>\n#\n> Quarrelled .\n# VP/Comm    .\n>\n#\n> Quarrelling .\n# Nᴹ/Vg/Comm  .\n>\n#\n> Recognised .\n# VP/J/Au/Br .\n>\n#\n> Neighbour      .\n# NSg/VB/J/Comm+ .\n>\n#\n> Neighbouring .\n# Nᴹ/Vg/J/Comm .\n>\n#\n> Clamour     .\n# NSg/VB/Comm .\n>\n#\n> Theatre    .\n# N🅪Sg/Comm+ .\n>\n#\n> Analyse  .\n# VB/Au/Br .\n"
  },
  {
    "path": "harper-core/tests/text/tagged/Spell.md",
    "content": ">              Spell\n# HeadingStart NSg/VB\n>\n#\n> This    document contains example sentences with misspelled words   that          we   want   to test   the spell  checker on  .\n# I/Ddem+ NSg/VB+  V3       NSg/VB+ NPl/V3+   P    VP/J       NPl/V3+ NSg/I/C/Ddem+ IPl+ NSg/VB P  NSg/VB D   NSg/VB NSg/VB  J/P .\n>\n#\n>              Example Sentences\n# HeadingStart NSg/VB+ NPl/V3+\n>\n#\n> My  favourite      color         is  blu .\n# D$+ NSg/VB/J/Comm+ N🅪Sg/VB/J/Am+ VL3 W?  .\n> I       must    defend my  honour        !\n# ISg/#r+ NSg/VXB NSg/VB D$+ N🅪Sg/VB/Comm+ .\n> I       recognize that         you    recognise me       .\n# ISg/#r+ VB        NSg/I/C/Ddem ISgPl+ VB/Au/Br  NPr/ISg+ .\n> I       analyze how   you    infantilize me       .\n# ISg/#r+ VB      NSg/C ISgPl+ VB          NPr/ISg+ .\n> I       analyse  how   you    infantilise me       .\n# ISg/#r+ VB/Au/Br NSg/C ISgPl+ ?           NPr/ISg+ .\n> Careful , traveller !\n# J       . NSg/Comm+ .\n> At    the centre      of the theatre    I       dropped a   litre    of coke       .\n# NSg/P D   NSg/VB/Comm P  D+  N🅪Sg/Comm+ ISg/#r+ VP/J    D/P NSg/Comm P  NPr🅪Sg/VB+ .\n"
  },
  {
    "path": "harper-core/tests/text/tagged/Swear.md",
    "content": ">              Swears\n# HeadingStart NPl/V3\n>\n#\n> This    documents tests   that         different forms   / variations of swears are tagged as    such  .\n# I/Ddem+ NPl/V3+   NPl/V3+ NSg/I/C/Ddem NSg/J+    NPl/V3+ . NPl        P  NPl/V3 VLB VP/J   R/C/P NSg/I .\n>\n#\n>              Examples\n# HeadingStart NPl/V3+\n>\n#\n> One      turd      , two turds    .\n# NSg/I/J+ NSg/VB+/B . NSg NPl/V3/B .\n>\n#\n> I       fart     , you're farting   , he       farts    , she  farted .\n# ISg/#r+ NSg/VB/B . +      Nᴹ/Vg/J/B . NPr/ISg+ NPl/V3/B . ISg+ VP/J/B .\n"
  },
  {
    "path": "harper-core/tests/text/tagged/The Constitution of the United States.md",
    "content": "> <!-- source: https://github.com/JesseKPhillips/USA-Constitution/blob/4cfdd130709fa7e8db998383b6917ba33b402ec6/Constitution.md -->\n# Unlintable\n>                         The Constitution Of The United States   Of America\n# Unlintable HeadingStart D   NPr+         P  D   VP/J   NPrPl/V3 P  NPr+\n>\n#\n> We   the People of the United States    , in        Order    to form    a   more         perfect   Union     ,\n# IPl+ D   NPl/VB P  D+  VP/J   NPrPl/V3+ . NPr/J/R/P N🅪Sg/VB+ P  N🅪Sg/VB D/P NPr/I/J/R/Dq NSg/VB/J+ NPr/VB/J+ .\n> establish Justice , insure domestic Tranquility , provide for   the common   defence    ,\n# VB        NPr🅪Sg+ . VB     NSg/J    NSg         . VB      R/C/P D   NSg/VB/J N🅪Sg/Comm+ .\n> promote the general  Welfare , and  secure the Blessings of Liberty to ourselves\n# NSg/VB  D   NSg/VB/J Nᴹ/VB+  . VB/C VB/J   D   NPl/V3    P  NSg+    P  IPl+\n> and  our Posterity , do  ordain and  establish this   Constitution for   the United\n# VB/C D$+ Nᴹ+       . VXB VB     VB/C VB        I/Ddem NPr+         R/C/P D   VP/J\n> States   of America .\n# NPrPl/V3 P  NPr+    .\n>\n#\n>              Article . I.\n# HeadingStart NSg/VB+ . ?\n>\n#\n>              Section . 1 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> All           legislative Powers    herein granted shall be       vested in        a\n# NSg/I/J/C/Dq+ NSg/J+      NPrPl/V3+ R      VP/J    VXB   NSg/VLXB VP/J   NPr/J/R/P D/P\n> Congress of the United States    , which shall consist of a   Senate and  House  of\n# NPr/VB   P  D+  VP/J   NPrPl/V3+ . I/C+  VXB   NSg/VB  P  D/P NPr+   VB/C NPr/VB P\n> Representatives . Congress shall make   no        law      respecting an  establishment of\n# NPl+            . NPr/VB+  VXB   NSg/VB NSg/Dq/P+ N🅪Sg/VB+ Nᴹ/Vg/J    D/P NSg           P\n> religion , or    prohibiting the free     exercise thereof ; or    abridging the freedom of\n# NSg/VB+  . NPr/C Nᴹ/Vg/J     D+  NSg/VB/J N🅪Sg/VB+ R       . NPr/C Nᴹ/Vg/J   D   N🅪Sg    P\n> speech   , or    of the press   ; or    the right    of the people  peaceably to assemble , and\n# N🅪Sg/VB+ . NPr/C P  D   NSg/VB+ . NPr/C D   NPr/VB/J P  D   NPl/VB+ R         P  VB       . VB/C\n> to petition the government for   a   redress of grievances .\n# P  NSg/VB   D   N🅪Sg+      R/C/P D/P NSg/VB  P  NPl        .\n>\n#\n> No        person  shall be       a   Senator or    Representative in        Congress , or    elector of\n# NSg/Dq/P+ NSg/VB+ VXB   NSg/VLXB D/P NSg     NPr/C NSg/J          NPr/J/R/P NPr/VB+  . NPr/C NSg     P\n> President and  Vice        President , or    hold     any    office  , civil or    military , under   the\n# NSg/VB    VB/C NSg/VB/J/P+ NSg/VB+   . NPr/C NSg/VB/J I/R/Dq NSg/VB+ . J     NPr/C NSg/J    . NSg/J/P D\n> United States    , or    under   any    State    , who    , having  previously taken an  oath    , as    a\n# VP/J   NPrPl/V3+ . NPr/C NSg/J/P I/R/Dq N🅪Sg/VB+ . NPr/I+ . Nᴹ/Vg/J R          VPp/J D/P NSg/VB+ . R/C/P D/P\n> member of Congress , or    as    an  officer of the United States    , or    as    a   member of\n# NSg/VB P  NPr/VB+  . NPr/C R/C/P D/P NSg/VB  P  D   VP/J   NPrPl/V3+ . NPr/C R/C/P D/P NSg/VB P\n> any    State    legislature , or    as    an  executive or    judicial officer of any    State    , to\n# I/R/Dq N🅪Sg/VB+ NSg+        . NPr/C R/C/P D/P NSg/J     NPr/C NSg/J    NSg/VB  P  I/R/Dq N🅪Sg/VB+ . P\n> support the Constitution of the United States    , shall have    engaged in\n# N🅪Sg/VB D   NPr          P  D   VP/J   NPrPl/V3+ . VXB   NSg/VXB VP/J    NPr/J/R/P\n> insurrection or    rebellion against the same , or    given       aid     or    comfort  to the\n# N🅪Sg         NPr/C N🅪Sg+     C/P     D   I/J  . NPr/C NSg/VPp/J/P N🅪Sg/VB NPr/C N🅪Sg/VB+ P  D\n> enemies thereof . But     Congress may     , by    a   vote   of two - thirds of each House   ,\n# NPl/V3+ R       . NSg/C/P NPr/VB+  NPr/VXB . NSg/P D/P NSg/VB P  NSg . NPl/V3 P  Dq+  NPr/VB+ .\n> remove such   disability .\n# NSg/VB NSg/I+ N🅪Sg+      .\n>\n#\n> The terms  of Senators and  Representatives shall end    at    noon    on  the 3 d         day    of\n# D   NPl/V3 P  NPl      VB/C NPl+            VXB   NSg/VB NSg/P NSg/VB+ J/P D   # NPr/J/#r+ NPr🅪Sg P\n> January , of the years in        which such   terms   end     ; and  the terms  of their\n# NPr+    . P  D+  NPl+  NPr/J/R/P I/C+  NSg/I+ NPl/V3+ NSg/VB+ . VB/C D   NPl/V3 P  D$+\n> successors shall then      begin  .\n# NPl+       VXB   NSg/J/R/C NSg/VB .\n>\n#\n>              Section . 2 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The House  of Representatives shall be       composed of Members\n# D   NPr/VB P  NPl+            VXB   NSg/VLXB VP/J     P  NPl/V3+\n> chosen   every second    Year by    the People of the several States    , and  the Electors\n# Nᴹ/VPp/J Dq+   NSg/VB/J+ NSg+ NSg/P D   NPl/VB P  D+  J/Dq+   NPrPl/V3+ . VB/C D   NPl\n> in        each State    shall have    the Qualifications requisite for   Electors of the most\n# NPr/J/R/P Dq   N🅪Sg/VB+ VXB   NSg/VXB D   NPl+           NSg/J+    R/C/P NPl      P  D   NSg/I/J/R/Dq\n> numerous Branch of the State    Legislature .\n# J        NPr/VB P  D   N🅪Sg/VB+ NSg+        .\n>\n#\n> No        Person  shall be       a    Representative who    shall not     have    attained to the Age     of\n# NSg/Dq/P+ NSg/VB+ VXB   NSg/VLXB D/P+ NSg/J+         NPr/I+ VXB   NSg/R/C NSg/VXB VP/J     P  D   N🅪Sg/VB P\n> twenty five Years , and  been     seven Years a   Citizen of the United States    , and  who\n# NSg    NSg  NPl+  . VB/C NSg/VLPp NSg   NPl+  D/P NSg     P  D   VP/J   NPrPl/V3+ . VB/C NPr/I+\n> shall not     , when    elected  , be       an  Inhabitant of that         State    in        which he       shall be\n# VXB   NSg/R/C . NSg/I/C NSg/VP/J . NSg/VLXB D/P NSg/J      P  NSg/I/C/Ddem N🅪Sg/VB+ NPr/J/R/P I/C+  NPr/ISg+ VXB   NSg/VLXB\n> chosen   .\n# Nᴹ/VPp/J .\n>\n#\n> Representatives shall be       apportioned among the several States    according to\n# NPl+            VXB   NSg/VLXB VP/J        P     D   J/Dq    NPrPl/V3+ Nᴹ/Vg/J   P\n> their respective numbers   , counting the whole number     of persons in        each State    ,\n# D$+   J          NPrPl/V3+ . Nᴹ/Vg/J  D   NSg/J N🅪Sg/VB/JC P  NPl/V3+ NPr/J/R/P Dq   N🅪Sg/VB+ .\n> excluding Indians not     taxed . But     when    the right     to vote   at    any    election for   the\n# Nᴹ/Vg/J   NPrPl+  NSg/R/C VP/J  . NSg/C/P NSg/I/C D+  NPr/VB/J+ P  NSg/VB NSg/P I/R/Dq NSg+     R/C/P D\n> choice of electors for   President and  Vice        President of the United States    ,\n# N🅪Sg/J P  NPl      R/C/P NSg/VB    VB/C NSg/VB/J/P+ NSg/VB    P  D   VP/J   NPrPl/V3+ .\n> Representatives in        Congress , the Executive and  Judicial officers of a   State    , or\n# NPl+            NPr/J/R/P NPr/VB+  . D   NSg/J     VB/C NSg/J    NPl/V3   P  D/P N🅪Sg/VB+ . NPr/C\n> the members of the Legislature thereof , is  denied to any    of the male\n# D   NPl/V3  P  D   NSg+        R       . VL3 VP/J   P  I/R/Dq P  D   NPr/J+\n> inhabitants of such  State    , being         twenty - one     years of age      , and  citizens of the\n# NPl         P  NSg/I N🅪Sg/VB+ . N🅪Sg/VLg/J/C+ NSg    . NSg/I/J NPl   P  N🅪Sg/VB+ . VB/C NPl      P  D\n> United States    , or    in        any    way    abridged , except for   participation in        rebellion ,\n# VP/J   NPrPl/V3+ . NPr/C NPr/J/R/P I/R/Dq NSg/J+ VP/J     . VB/C/P R/C/P Nᴹ+           NPr/J/R/P N🅪Sg+     .\n> or    other    crime    , the basis of representation therein shall be       reduced in        the\n# NPr/C NSg/VB/J N🅪Sg/VB+ . D   NSg   P  NSg+           R       VXB   NSg/VLXB VP/J    NPr/J/R/P D\n> proportion which the number     of such  male   citizens shall bear     to the whole\n# NSg/VB+    I/C+  D   N🅪Sg/VB/JC P  NSg/I NPr/J+ NPl+     VXB   NSg/VB/J P  D   NSg/J\n> number     of male   citizens twenty - one     years of age      in        such  State    . The actual\n# N🅪Sg/VB/JC P  NPr/J+ NPl+     NSg    . NSg/I/J NPl   P  N🅪Sg/VB+ NPr/J/R/P NSg/I N🅪Sg/VB+ . D   NSg/J\n> Enumeration shall be       made within  three Years after the first Meeting   of the\n# N🅪Sg        VXB   NSg/VLXB VP   NSg/J/P NSg   NPl+  P     D   NSg/J N🅪Sg/Vg/J P  D\n> Congress of the United States    , and  within  every subsequent Term     of ten Years ,\n# NPr/VB   P  D   VP/J   NPrPl/V3+ . VB/C NSg/J/P Dq    NSg/J      NSg/VB/J P  NSg NPl+  .\n> in        such  Manner as    they shall by    Law      direct . The Number     of Representatives shall\n# NPr/J/R/P NSg/I NSg+   R/C/P IPl+ VXB   NSg/P N🅪Sg/VB+ VB/J   . D   N🅪Sg/VB/JC P  NPl+            VXB\n> not     exceed one     for   every thirty Thousand , but     each State    shall have    at    Least\n# NSg/R/C VB     NSg/I/J R/C/P Dq    NSg    NSg      . NSg/C/P Dq+  N🅪Sg/VB+ VXB   NSg/VXB NSg/P NSg/J/Dq+\n> one      Representative ; and  until such  enumeration shall be       made , the State   of New\n# NSg/I/J+ NSg/J+         . VB/C C/P   NSg/I N🅪Sg        VXB   NSg/VLXB VP   . D   N🅪Sg/VB P  NSg/J\n> Hampshire shall be       entitled to chuse three , Massachusetts eight , Rhode - Island\n# NPr+      VXB   NSg/VLXB VP/J     P  ?     NSg   . NPr+          NSg/J . NPr   . NSg/VB\n> and  Providence Plantations one     , Connecticut five , New   - York six , New   Jersey\n# VB/C NPr+       NPl         NSg/I/J . NPr+        NSg  . NSg/J . NPr+ NSg . NSg/J NPr+\n> four , Pennsylvania eight , Delaware one     , Maryland six , Virginia ten , North\n# NSg  . NPr+         NSg/J . NPr      NSg/I/J . NPr      NSg . NPr+     NSg . NPr/VB/J+\n> Carolina five , South     Carolina five , and  Georgia three .\n# NPr+     NSg  . NPr/VB/J+ NPr+     NSg  . VB/C NPr+    NSg   .\n>\n#\n> When    vacancies happen in        the Representation from any    State    , the Executive\n# NSg/I/C NPl       VB     NPr/J/R/P D   NSg+           P    I/R/Dq N🅪Sg/VB+ . D   NSg/J\n> Authority thereof shall issue   Writs  of Election to fill   such  Vacancies .\n# N🅪Sg+     R       VXB   NSg/VB+ NPl/V3 P  NSg+     P  NSg/VB NSg/I NPl       .\n>\n#\n> The House  of Representatives shall chuse their Speaker and  other    Officers ; and\n# D   NPr/VB P  NPl+            VXB   ?     D$+   NSg     VB/C NSg/VB/J NPl/V3+  . VB/C\n> shall have    the sole     Power      of Impeachment .\n# VXB   NSg/VXB D   NSg/VB/J N🅪Sg/VB/J+ P  N🅪Sg        .\n>\n#\n>              Section . 3 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The Senate of the United States    shall be       composed of two\n# D   NPr    P  D+  VP/J   NPrPl/V3+ VXB   NSg/VLXB VP/J     P  NSg\n> Senators from each State    , elected  by    the people  thereof , for   six years ; and\n# NPl+     P    Dq+  N🅪Sg/VB+ . NSg/VP/J NSg/P D+  NPl/VB+ R       . R/C/P NSg NPl+  . VB/C\n> each Senator shall have    one     vote    . The electors in        each State    shall have    the\n# Dq   NSg+    VXB   NSg/VXB NSg/I/J NSg/VB+ . D   NPl      NPr/J/R/P Dq   N🅪Sg/VB+ VXB   NSg/VXB D\n> qualifications requisite for   electors of the most         numerous branch of the State\n# NPl+           NSg/J+    R/C/P NPl      P  D   NSg/I/J/R/Dq J        NPr/VB P  D   N🅪Sg/VB+\n> legislatures .\n# NPl          .\n>\n#\n> Immediately after they shall be       assembled in        Consequence of the first  Election ,\n# R           P     IPl+ VXB   NSg/VLXB VP/J      NPr/J/R/P NSg/VB      P  D+  NSg/J+ NSg+     .\n> they shall be       divided as    equally as    may     be       into three Classes . The Seats  of the\n# IPl+ VXB   NSg/VLXB VP/J    R/C/P R       R/C/P NPr/VXB NSg/VLXB P    NSg+  NPl/V3+ . D   NPl/V3 P  D\n> Senators of the first  Class      shall be       vacated at    the Expiration of the second\n# NPl      P  D+  NSg/J+ N🅪Sg/VB/J+ VXB   NSg/VLXB VP/J    NSg/P D   N🅪Sg       P  D+  NSg/VB/J+\n> Year , of the second   Class      at    the Expiration of the fourth    Year , and  of the\n# NSg+ . P  D   NSg/VB/J N🅪Sg/VB/J+ NSg/P D   N🅪Sg       P  D+  NPr/VB/J+ NSg+ . VB/C P  D\n> third    Class      at    the Expiration of the sixth     Year , so          that         one     third    may     be\n# NSg/VB/J N🅪Sg/VB/J+ NSg/P D   N🅪Sg       P  D+  NSg/VB/J+ NSg+ . NSg/I/J/R/C NSg/I/C/Ddem NSg/I/J NSg/VB/J NPr/VXB NSg/VLXB\n> chosen   every second    Year ; and  when    vacancies happen in        the representation of\n# Nᴹ/VPp/J Dq+   NSg/VB/J+ NSg+ . VB/C NSg/I/C NPl       VB     NPr/J/R/P D   NSg            P\n> any    State    in        the Senate , the executive authority of such  State    shall issue\n# I/R/Dq N🅪Sg/VB+ NPr/J/R/P D   NPr+   . D   NSg/J     N🅪Sg      P  NSg/I N🅪Sg/VB+ VXB   NSg/VB+\n> writs  of election to fill   such  vacancies : Provided , That         the legislature of any\n# NPl/V3 P  NSg+     P  NSg/VB NSg/I NPl       . VP/J/C   . NSg/I/C/Ddem D   NSg         P  I/R/Dq\n> State    may     empower the executive thereof to make   temporary appointments until\n# N🅪Sg/VB+ NPr/VXB VB      D   NSg/J     R       P  NSg/VB NSg/J     NPl+         C/P\n> the people  fill   the vacancies by    election as    the legislature may     direct .\n# D   NPl/VB+ NSg/VB D   NPl       NSg/P NSg+     R/C/P D   NSg+        NPr/VXB VB/J   .\n>\n#\n> No        Person  shall be       a    Senator who    shall not     have    attained to the Age     of thirty\n# NSg/Dq/P+ NSg/VB+ VXB   NSg/VLXB D/P+ NSg+    NPr/I+ VXB   NSg/R/C NSg/VXB VP/J     P  D   N🅪Sg/VB P  NSg\n> Years , and  been     nine Years a   Citizen of the United States    , and  who    shall not     ,\n# NPl+  . VB/C NSg/VLPp NSg  NPl+  D/P NSg     P  D   VP/J   NPrPl/V3+ . VB/C NPr/I+ VXB   NSg/R/C .\n> when    elected  , be       an  Inhabitant of that         State    for   which he       shall be       chosen   .\n# NSg/I/C NSg/VP/J . NSg/VLXB D/P NSg/J      P  NSg/I/C/Ddem N🅪Sg/VB+ R/C/P I/C+  NPr/ISg+ VXB   NSg/VLXB Nᴹ/VPp/J .\n>\n#\n> The Vice        President of the United States    shall be       President of the Senate , but\n# D   NSg/VB/J/P+ NSg/VB    P  D+  VP/J   NPrPl/V3+ VXB   NSg/VLXB NSg/VB    P  D+  NPr+   . NSg/C/P\n> shall have    no        Vote    , unless they be       equally divided .\n# VXB   NSg/VXB NSg/Dq/P+ NSg/VB+ . C      IPl+ NSg/VLXB R       VP/J    .\n>\n#\n> The Senate shall chuse their other    Officers , and  also a   President pro     tempore ,\n# D+  NPr+   VXB   ?     D$+   NSg/VB/J NPl/V3+  . VB/C R/C  D/P NSg/VB+   NSg/J/P ?       .\n> in        the Absence of the Vice        President , or    when    he       shall exercise the Office of\n# NPr/J/R/P D   N🅪Sg    P  D   NSg/VB/J/P+ NSg/VB+   . NPr/C NSg/I/C NPr/ISg+ VXB   N🅪Sg/VB  D   NSg/VB P\n> President of the United States    .\n# NSg/VB    P  D   VP/J   NPrPl/V3+ .\n>\n#\n> The Senate shall have    the sole      Power      to try      all          Impeachments . When    sitting  for\n# D+  NPr+   VXB   NSg/VXB D+  NSg/VB/J+ N🅪Sg/VB/J+ P  NSg/VB/J NSg/I/J/C/Dq NPl          . NSg/I/C NSg/Vg/J R/C/P\n> that          Purpose  , they shall be       on  Oath    or    Affirmation . When    the President of the\n# NSg/I/C/Ddem+ N🅪Sg/VB+ . IPl+ VXB   NSg/VLXB J/P NSg/VB+ NPr/C NSg         . NSg/I/C D   NSg/VB    P  D+\n> United States    is  tried , the Chief     Justice shall preside : And  no        Person  shall be\n# VP/J   NPrPl/V3+ VL3 VP/J  . D+  NSg/VB/J+ NPr🅪Sg+ VXB   VB      . VB/C NSg/Dq/P+ NSg/VB+ VXB   NSg/VLXB\n> convicted without the Concurrence of two thirds of the Members present  .\n# VP/J      C/P     D   NSg         P  NSg NPl/V3 P  D   NPl/V3+ NSg/VB/J .\n>\n#\n> Judgment in        Cases   of impeachment shall not     extend further than to removal from\n# NSg+     NPr/J/R/P NPl/V3+ P  N🅪Sg        VXB   NSg/R/C NSg/VB VB/JC   C/P  P  NSg     P\n> Office  , and  disqualification to hold     and  enjoy any    Office of honor       , Trust     or\n# NSg/VB+ . VB/C N🅪Sg             P  NSg/VB/J VB/C VB    I/R/Dq NSg/VB P  N🅪Sg/VB/Am+ . N🅪Sg/VB/J NPr/C\n> Profit      under   the United States    : but     the Party     convicted shall nevertheless be\n# N🅪Sg/VBP/J+ NSg/J/P D   VP/J   NPrPl/V3+ . NSg/C/P D   NSg/VB/J+ VP/J      VXB   R            NSg/VLXB\n> liable and  subject   to Indictment , Trial     , Judgment and  Punishment , according to\n# J      VB/C NSg/VB/J+ P  NSg        . NSg/VB/J+ . NSg      VB/C N🅪Sg+      . Nᴹ/Vg/J   P\n> Law     .\n# N🅪Sg/VB .\n>\n#\n>              Section . 4 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The Times   , Places  and  Manner of holding Elections for   Senators\n# D+  NPl/V3+ . NPl/V3+ VB/C NSg    P  Nᴹ/Vg/J NPl+      R/C/P NPl\n> and  Representatives , shall be       prescribed in        each State    by    the Legislature\n# VB/C NPl+            . VXB   NSg/VLXB VP/J       NPr/J/R/P Dq   N🅪Sg/VB+ NSg/P D   NSg+\n> thereof ; but     the Congress may     at    any    time       by    Law      make   or    alter  such\n# R       . NSg/C/P D   NPr/VB+  NPr/VXB NSg/P I/R/Dq N🅪Sg/VB/J+ NSg/P N🅪Sg/VB+ NSg/VB NPr/C NSg/VB NSg/I\n> Regulations , except as    to the Places of chusing Senators .\n# NPl+        . VB/C/P R/C/P P  D   NPl/V3 P  ?       NPl+     .\n>\n#\n> The Congress shall assemble at    least    once  in        every year , and  such   meeting    shall\n# D+  NPr/VB+  VXB   VB       NSg/P NSg/J/Dq NSg/C NPr/J/R/P Dq+   NSg+ . VB/C NSg/I+ N🅪Sg/Vg/J+ VXB\n> begin  at    noon    on  the 3 d         day    of January , unless they shall by    law      appoint a\n# NSg/VB NSg/P NSg/VB+ J/P D   # NPr/J/#r+ NPr🅪Sg P  NPr+    . C      IPl+ VXB   NSg/P N🅪Sg/VB+ VB      D/P+\n> different day     .\n# NSg/J     NPr🅪Sg+ .\n>\n#\n>              Section . 5 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> Each House   shall be       the Judge  of the Elections , Returns and\n# Dq+  NPr/VB+ VXB   NSg/VLXB D   NSg/VB P  D+  NPl+      . NPl/V3  VB/C\n> Qualifications of its     own       Members , and  a   Majority of each shall constitute a\n# NPl            P  ISg/D$+ NSg/VB/J+ NPl/V3+ . VB/C D/P NSg      P  Dq+  VXB   NSg/VB     D/P\n> Quorum to do  Business ; but     a   smaller Number      may     adjourn from day     to day    , and\n# NSg    P  VXB N🅪Sg/J+  . NSg/C/P D/P NSg/JC  N🅪Sg/VB/JC+ NPr/VXB VB      P    NPr🅪Sg+ P  NPr🅪Sg . VB/C\n> may     be       authorized to compel the Attendance of absent     Members , in        such  Manner ,\n# NPr/VXB NSg/VLXB VP/J       P  VB     D   NSg        P  NSg/VB/J/P NPl/V3+ . NPr/J/R/P NSg/I NSg+   .\n> and  under   such  Penalties as    each House   may     provide .\n# VB/C NSg/J/P NSg/I NPl+      R/C/P Dq   NPr/VB+ NPr/VXB VB      .\n>\n#\n> Each House   may     determine the Rules  of its     Proceedings , punish its     Members for\n# Dq+  NPr/VB+ NPr/VXB VB        D   NPl/V3 P  ISg/D$+ NPl+        . VB     ISg/D$+ NPl/V3+ R/C/P\n> disorderly Behaviour  , and  , with the Concurrence of two thirds  , expel a   Member  .\n# R+         N🅪Sg/Comm+ . VB/C . P    D   NSg         P  NSg NPl/V3+ . VB    D/P NSg/VB+ .\n>\n#\n> Each House   shall keep   a   Journal  of its     Proceedings , and  from time       to time\n# Dq+  NPr/VB+ VXB   NSg/VB D/P NSg/VB/J P  ISg/D$+ NPl+        . VB/C P    N🅪Sg/VB/J+ P  N🅪Sg/VB/J\n> publish the same , excepting such  Parts   as    may     in        their Judgment require\n# VB      D   I/J  . Nᴹ/Vg/J   NSg/I NPl/V3+ R/C/P NPr/VXB NPr/J/R/P D$+   NSg+     NSg/VB\n> Secrecy ; and  the Yeas and  Nays   of the Members of either House   on  any    question\n# Nᴹ      . VB/C D   NPl  VB/C NPl/V3 P  D   NPl/V3  P  I/C    NPr/VB+ J/P I/R/Dq NSg/VB+\n> shall , at    the Desire  of one     fifth    of those  Present  , be       entered on  the Journal   .\n# VXB   . NSg/P D   N🅪Sg/VB P  NSg/I/J NSg/VB/J P  I/Ddem NSg/VB/J . NSg/VLXB VP/J    J/P D   NSg/VB/J+ .\n>\n#\n> Neither House   , during the Session of Congress , shall , without the Consent of\n# I/C     NPr/VB+ . VB/P   D   NSg/VB  P  NPr/VB+  . VXB   . C/P     D   N🅪Sg/VP P\n> the other    , adjourn for   more         than three days , nor   to any    other    Place    than that\n# D   NSg/VB/J . VB      R/C/P NPr/I/J/R/Dq C/P  NSg   NPl+ . NSg/C P  I/R/Dq NSg/VB/J N🅪Sg/VB+ C/P  NSg/I/C/Ddem+\n> in        which the two Houses  shall be       sitting  .\n# NPr/J/R/P I/C+  D   NSg NPl/V3+ VXB   NSg/VLXB NSg/Vg/J .\n>\n#\n>              Section . 6 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The Senators and  Representatives shall receive a   Compensation\n# D   NPl      VB/C NPl+            VXB   NSg/VB  D/P N🅪Sg+\n> for   their Services , to be       ascertained by    Law      , and  paid out          of the Treasury of\n# R/C/P D$+   NPl/V3+  . P  NSg/VLXB VP/J        NSg/P N🅪Sg/VB+ . VB/C VP/J NSg/VB/J/R/P P  D   NPr      P\n> the United States    . They shall in        all           Cases   , except Treason , Felony and  Breach\n# D   VP/J   NPrPl/V3+ . IPl+ VXB   NPr/J/R/P NSg/I/J/C/Dq+ NPl/V3+ . VB/C/P NSg     . NSg    VB/C NSg/VB\n> of the Peace      , be       privileged from Arrest   during their Attendance at    the Session\n# P  D   NPr🅪Sg/VB+ . NSg/VLXB VP/J       P    N🅪Sg/VB+ VB/P   D$+   NSg+       NSg/P D   NSg/VB\n> of their respective Houses  , and  in        going   to and  returning from the same ; and\n# P  D$+   J          NPl/V3+ . VB/C NPr/J/R/P Nᴹ/Vg/J P  VB/C Nᴹ/Vg/J   P    D   I/J  . VB/C\n> for   any    Speech  or    Debate   in        either House   , they shall not     be       questioned in        any\n# R/C/P I/R/Dq N🅪Sg/VB NPr/C N🅪Sg/VB+ NPr/J/R/P I/C    NPr/VB+ . IPl+ VXB   NSg/R/C NSg/VLXB VP/J       NPr/J/R/P I/R/Dq\n> other    Place    .\n# NSg/VB/J N🅪Sg/VB+ .\n>\n#\n> No       Senator or    Representative shall , during the Time       for   which he       was  elected  ,\n# NSg/Dq/P NSg     NPr/C NSg/J+         VXB   . VB/P   D+  N🅪Sg/VB/J+ R/C/P I/C+  NPr/ISg+ VLPt NSg/VP/J .\n> be       appointed to any    civil Office  under   the Authority of the United States    ,\n# NSg/VLXB VP/J      P  I/R/Dq J+    NSg/VB+ NSg/J/P D   N🅪Sg      P  D+  VP/J   NPrPl/V3+ .\n> which shall have    been     created , or    the Emoluments whereof shall have    been\n# I/C+  VXB   NSg/VXB NSg/VLPp VP/J    . NPr/C D   NPl        C       VXB   NSg/VXB NSg/VLPp\n> encreased during such  time       ; and  no       Person  holding any    Office  under   the United\n# ?         VB/P   NSg/I N🅪Sg/VB/J+ . VB/C NSg/Dq/P NSg/VB+ Nᴹ/Vg/J I/R/Dq NSg/VB+ NSg/J/P D   VP/J\n> States    , shall be       a   Member of either House   during his     Continuance in        Office  . No\n# NPrPl/V3+ . VXB   NSg/VLXB D/P NSg/VB P  I/C    NPr/VB+ VB/P   ISg/D$+ NSg         NPr/J/R/P NSg/VB+ . NSg/Dq/P+\n> law      , varying the compensation for   the services of the Senators and\n# N🅪Sg/VB+ . Nᴹ/Vg/J D   N🅪Sg+        R/C/P D   NPl/V3   P  D   NPl      VB/C\n> Representatives , shall take   effect  , until an  election of Representatives shall\n# NPl+            . VXB   NSg/VB NSg/VB+ . C/P   D/P NSg      P  NPl+            VXB\n> have    intervened .\n# NSg/VXB VP/J       .\n>\n#\n>              Section . 7 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> All          Bills   for   raising Revenue shall originate in        the House  of\n# NSg/I/J/C/Dq NPl/V3+ R/C/P Nᴹ/Vg/J NSg+    VXB   VB        NPr/J/R/P D   NPr/VB P\n> Representatives ; but     the Senate may     propose or    concur with Amendments as    on\n# NPl+            . NSg/C/P D+  NPr+   NPr/VXB NSg/VB  NPr/C VB     P    NPl+       R/C/P J/P\n> other     Bills   .\n# NSg/VB/J+ NPl/V3+ .\n>\n#\n> Every Bill    which shall have    passed the House  of Representatives and  the Senate ,\n# Dq+   NPr/VB+ I/C+  VXB   NSg/VXB VP/J   D   NPr/VB P  NPl             VB/C D+  NPr+   .\n> shall , before it       become a    Law      , be       presented to the President of the United\n# VXB   . C/P    NPr/ISg+ VBPp   D/P+ N🅪Sg/VB+ . NSg/VLXB VP/J      P  D   NSg/VB    P  D+  VP/J\n> States    ; If    he       approve he       shall sign   it       , but     if    not     he       shall return it       , with his\n# NPrPl/V3+ . NSg/C NPr/ISg+ VB      NPr/ISg+ VXB   NSg/VB NPr/ISg+ . NSg/C/P NSg/C NSg/R/C NPr/ISg+ VXB   NSg/VB NPr/ISg+ . P    ISg/D$+\n> Objections to that          House   in        which it       shall have    originated , who    shall enter  the\n# NPl+       P  NSg/I/C/Ddem+ NPr/VB+ NPr/J/R/P I/C+  NPr/ISg+ VXB   NSg/VXB VP/J       . NPr/I+ VXB   NSg/VB D+\n> Objections at    large on  their Journal   , and  proceed to reconsider it       . If    after\n# NPl+       NSg/P NSg/J J/P D$+   NSg/VB/J+ . VB/C VB      P  VB         NPr/ISg+ . NSg/C P\n> such  Reconsideration two thirds of that         House   shall agree to pass   the Bill    , it\n# NSg/I N🅪Sg            NSg NPl/V3 P  NSg/I/C/Ddem NPr/VB+ VXB   VB    P  NSg/VB D   NPr/VB+ . NPr/ISg+\n> shall be       sent   , together with the Objections , to the other    House   , by    which it\n# VXB   NSg/VLXB NSg/VP . J        P    D   NPl+       . P  D   NSg/VB/J NPr/VB+ . NSg/P I/C+  NPr/ISg+\n> shall likewise be       reconsidered , and  if    approved by    two thirds of that         House   , it\n# VXB   R        NSg/VLXB VP/J         . VB/C NSg/C VP/J     NSg/P NSg NPl/V3 P  NSg/I/C/Ddem NPr/VB+ . NPr/ISg+\n> shall become a   Law      . But     in        all          such  Cases   the Votes  of both   Houses  shall be\n# VXB   VBPp   D/P N🅪Sg/VB+ . NSg/C/P NPr/J/R/P NSg/I/J/C/Dq NSg/I NPl/V3+ D   NPl/V3 P  I/C/Dq NPl/V3+ VXB   NSg/VLXB\n> determined by    yeas and  Nays   , and  the Names  of the Persons voting   for   and\n# VP/J       NSg/P NPl  VB/C NPl/V3 . VB/C D   NPl/V3 P  D   NPl/V3+ Nᴹ/Vg/J+ R/C/P VB/C\n> against the Bill    shall be       entered on  the Journal  of each House   respectively . If\n# C/P     D   NPr/VB+ VXB   NSg/VLXB VP/J    J/P D   NSg/VB/J P  Dq   NPr/VB+ R            . NSg/C\n> any     Bill    shall not     be       returned by    the President within  ten Days ( Sundays\n# I/R/Dq+ NPr/VB+ VXB   NSg/R/C NSg/VLXB VP/J     NSg/P D   NSg/VB    NSg/J/P NSg NPl  . NPl/V3+\n> excepted ) after it       shall have    been     presented to him  , the Same shall be       a   Law     ,\n# VP/J     . P     NPr/ISg+ VXB   NSg/VXB NSg/VLPp VP/J      P  ISg+ . D   I/J  VXB   NSg/VLXB D/P N🅪Sg/VB .\n> in        like         Manner as    if    he       had signed it       , unless the Congress by    their Adjournment\n# NPr/J/R/P NSg/VB/J/C/P NSg+   R/C/P NSg/C NPr/ISg+ VP  VP/J   NPr/ISg+ . C      D+  NPr/VB+  NSg/P D$+   NSg\n> prevent its     Return , in        which Case       it       shall not     be       a   Law      .\n# VB      ISg/D$+ NSg/VB . NPr/J/R/P I/C+  NPr🅪Sg/VB+ NPr/ISg+ VXB   NSg/R/C NSg/VLXB D/P N🅪Sg/VB+ .\n>\n#\n> Every Order    , Resolution , or    Vote    to which the Concurrence of the Senate and\n# Dq    N🅪Sg/VB+ . +          . NPr/C NSg/VB+ P  I/C+  D   NSg         P  D   NPr+   VB/C\n> House  of Representatives may     be       necessary ( except on  a   question of Adjournment )\n# NPr/VB P  NPl+            NPr/VXB NSg/VLXB NSg/J     . VB/C/P J/P D/P NSg/VB+  P  NSg         .\n> shall be       presented to the President of the United States    ; and  before the Same\n# VXB   NSg/VLXB VP/J      P  D   NSg/VB    P  D   VP/J   NPrPl/V3+ . VB/C C/P    D   I/J\n> shall take   Effect  , shall be       approved by    him  , or    being        disapproved by    him  , shall\n# VXB   NSg/VB NSg/VB+ . VXB   NSg/VLXB VP/J     NSg/P ISg+ . NPr/C N🅪Sg/VLg/J/C VP/J        NSg/P ISg+ . VXB\n> be       repassed by    two thirds of the Senate and  House  of Representatives , according\n# NSg/VLXB ?        NSg/P NSg NPl/V3 P  D   NPr+   VB/C NPr/VB P  NPl+            . Nᴹ/Vg/J\n> to the Rules  and  Limitations prescribed in        the Case      of a   Bill    .\n# P  D   NPl/V3 VB/C NPl+        VP/J       NPr/J/R/P D   NPr🅪Sg/VB P  D/P NPr/VB+ .\n>\n#\n>              Section . 8 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The Congress shall have    Power      To lay        and  collect  Taxes   , Duties ,\n# D+  NPr/VB+  VXB   NSg/VXB N🅪Sg/VB/J+ P  NSg/VBPt/J VB/C NSg/VB/J NPl/V3+ . NPl+   .\n> Imposts and  Excises , to pay      the Debts and  provide for   the common   Defence    and\n# NPl     VB/C NPl/V3  . P  NSg/VB/J D   NPl+  VB/C VB      R/C/P D   NSg/VB/J N🅪Sg/Comm+ VB/C\n> general  Welfare of the United States    ; but     all          Duties , Imposts and  Excises shall\n# NSg/VB/J Nᴹ/VB   P  D   VP/J   NPrPl/V3+ . NSg/C/P NSg/I/J/C/Dq NPl+   . NPl     VB/C NPl/V3  VXB\n> be       uniform  throughout the United States    ;\n# NSg/VLXB NSg/VB/J P          D   VP/J   NPrPl/V3+ .\n>\n#\n>\n#\n>\n#\n> To borrow Money   on  the credit of the United States    ;\n# P  NSg/VB N🅪Sg/J+ J/P D   NSg/VB P  D+  VP/J   NPrPl/V3+ .\n>\n#\n>\n#\n>\n#\n> To regulate Commerce with foreign Nations , and  among the several States    , and\n# P  VB       Nᴹ/VB+   P    NSg/J+  NPl+    . VB/C P     D+  J/Dq+   NPrPl/V3+ . VB/C\n> with the Indian Tribes  ;\n# P    D+  NPr/J+ NPl/V3+ .\n>\n#\n>\n#\n>\n#\n> To establish an  uniform  Rule   of Naturalization , and  uniform  Laws    on  the subject\n# P  VB        D/P NSg/VB/J NSg/VB P  Nᴹ             . VB/C NSg/VB/J NPl/V3+ J/P D   NSg/VB/J\n> of Bankruptcies throughout the United States    ;\n# P  NPl+         P          D   VP/J   NPrPl/V3+ .\n>\n#\n>\n#\n>\n#\n> To coin   Money   , regulate the Value    thereof , and  of foreign Coin    , and  fix    the\n# P  NSg/VB N🅪Sg/J+ . VB       D+  N🅪Sg/VB+ R       . VB/C P  NSg/J   NSg/VB+ . VB/C NSg/VB D\n> Standard of Weights and  Measures ;\n# NSg/J    P  NPl/V3  VB/C NPl/V3+  .\n>\n#\n>\n#\n>\n#\n> To provide for   the Punishment of counterfeiting the Securities and  current Coin\n# P  VB      R/C/P D   N🅪Sg       P  Nᴹ/Vg/J        D   NPl+       VB/C NSg/J   NSg/VB\n> of the United States    ;\n# P  D   VP/J   NPrPl/V3+ .\n>\n#\n>\n#\n>\n#\n> To establish Post         Offices and  post         Roads ;\n# P  VB        NPr🅪Sg/VB/P+ NPl/V3  VB/C NPr🅪Sg/VB/P+ NPl+  .\n>\n#\n>\n#\n>\n#\n> To promote the Progress of Science and  useful Arts    , by    securing for   limited\n# P  NSg/VB  D   Nᴹ/VB    P  N🅪Sg/VB VB/C J+     NPl/V3+ . NSg/P Nᴹ/Vg/J  R/C/P NSg/VP/J\n> Times   to Authors and  Inventors the exclusive Right    to their respective Writings\n# NPl/V3+ P  NPl/V3  VB/C NPl       D   NSg/J     NPr/VB/J P  D$+   J          NPl/V3\n> and  Discoveries ;\n# VB/C NPl+        .\n>\n#\n>\n#\n>\n#\n> To constitute Tribunals inferior to the supreme  Court      ;\n# P  NSg/VB     NPl       NSg/J    P  D   NSg/VB/J N🅪Sg/VB/J+ .\n>\n#\n>\n#\n>\n#\n> To define   and  punish Piracies and  Felonies committed on  the high       Seas , and\n# P  NSg/VB/J VB/C VB     ?        VB/C NPl      VP/J      J/P D   NSg/VB/J/R NPl+ . VB/C\n> Offences against the Law     of Nations ;\n# NPl/Comm C/P     D   N🅪Sg/VB P  NPl+    .\n>\n#\n>\n#\n>\n#\n> To declare War      , grant   Letters of Marque and  Reprisal , and  make   Rules   concerning\n# P  VB      N🅪Sg/VB+ . NPr/VB+ NPl/V3  P  NSg    VB/C NSg+     . VB/C NSg/VB NPl/V3+ NSg/Vg/J/P\n> Captures on  Land      and  Water    ;\n# NPl/V3   J/P NPr🅪Sg/VB VB/C N🅪Sg/VB+ .\n>\n#\n>\n#\n>\n#\n> To raise  and  support  Armies , but     no       Appropriation of Money   to that          Use     shall be\n# P  NSg/VB VB/C N🅪Sg/VB+ NPl+   . NSg/C/P NSg/Dq/P NSg           P  N🅪Sg/J+ P  NSg/I/C/Ddem+ N🅪Sg/VB VXB   NSg/VLXB\n> for   a   longer Term     than two  Years ;\n# R/C/P D/P NSg/JC NSg/VB/J C/P  NSg+ NPl+  .\n>\n#\n>\n#\n>\n#\n> To provide and  maintain a    Navy    ;\n# P  VB      VB/C VB       D/P+ N🅪Sg/J+ .\n>\n#\n>\n#\n>\n#\n> To make   Rules   for   the Government and  Regulation of the land      and  naval Forces  ;\n# P  NSg/VB NPl/V3+ R/C/P D   N🅪Sg       VB/C N🅪Sg/J     P  D   NPr🅪Sg/VB VB/C J+    NPl/V3+ .\n>\n#\n>\n#\n>\n#\n> To provide for   calling forth the Militia to execute the Laws   of the Union     ,\n# P  VB      R/C/P Nᴹ/Vg/J R     D   NSg     P  VB      D   NPl/V3 P  D   NPr/VB/J+ .\n> suppress Insurrections and  repel Invasions ;\n# VB       NPl           VB/C VB    NPl       .\n>\n#\n>\n#\n>\n#\n> To provide for   organizing , arming  , and  disciplining , the Militia , and  for\n# P  VB      R/C/P Nᴹ/Vg/J    . Nᴹ/Vg/J . VB/C Nᴹ/Vg/J      . D   NSg     . VB/C R/C/P\n> governing such  Part     of them     as    may     be       employed in        the Service of the United\n# Nᴹ/Vg/J   NSg/I NSg/VB/J P  NSg/IPl+ R/C/P NPr/VXB NSg/VLXB VP/J     NPr/J/R/P D   NSg/VB  P  D   VP/J\n> States    , reserving to the States    respectively , the Appointment of the Officers ,\n# NPrPl/V3+ . Nᴹ/Vg/J   P  D   NPrPl/V3+ R            . D   NSg         P  D   NPl/V3+  .\n> and  the Authority of training the Militia according to the discipline\n# VB/C D   N🅪Sg      P  Nᴹ/Vg/J+ D   NSg     Nᴹ/Vg/J   P  D   NSg/VB+\n> prescribed by    Congress ;\n# VP/J       NSg/P NPr/VB+  .\n>\n#\n>\n#\n>\n#\n> To exercise exclusive Legislation in        all           Cases   whatsoever , over    such  District\n# P  N🅪Sg/VB  NSg/J     NSg+        NPr/J/R/P NSg/I/J/C/Dq+ NPl/V3+ I          . NSg/J/P NSg/I NSg/VB/J+\n> ( not     exceeding ten  Miles  square   ) as    may     , by    Cession of particular States    , and\n# . NSg/R/C Nᴹ/Vg/J   NSg+ NPrPl+ NSg/VB/J . R/C/P NPr/VXB . NSg/P NSg     P  NSg/J      NPrPl/V3+ . VB/C\n> the Acceptance of Congress , become the Seat   of the Government of the United\n# D   N🅪Sg       P  NPr/VB+  . VBPp   D   NSg/VB P  D   N🅪Sg       P  D   VP/J\n> States    , and  to exercise like         Authority over    all          Places  purchased by    the Consent\n# NPrPl/V3+ . VB/C P  N🅪Sg/VB  NSg/VB/J/C/P N🅪Sg+     NSg/J/P NSg/I/J/C/Dq NPl/V3+ VP/J      NSg/P D   N🅪Sg/VP\n> of the Legislature of the State    in        which the Same shall be       , for   the Erection of\n# P  D   NSg         P  D   N🅪Sg/VB+ NPr/J/R/P I/C+  D   I/J  VXB   NSg/VLXB . R/C/P D   NSg      P\n> Forts  , Magazines , Arsenals , dock    - Yards   , and  other    needful Buildings ; — And\n# NPl/V3 . NPl+      . NPl+     . NSg/VB+ . NPl/V3+ . VB/C NSg/VB/J NSg/J   NPl/V3+   . . VB/C\n>\n#\n>\n#\n>\n#\n> To make   all           Laws    which shall be       necessary and  proper for   carrying into\n# P  NSg/VB NSg/I/J/C/Dq+ NPl/V3+ I/C+  VXB   NSg/VLXB NSg/J     VB/C NSg/J  R/C/P Nᴹ/Vg/J  P\n> Execution the foregoing Powers    , and  all          other    Powers    vested by    this\n# N🅪Sg+     D   Nᴹ/Vg/J   NPrPl/V3+ . VB/C NSg/I/J/C/Dq NSg/VB/J NPrPl/V3+ VP/J   NSg/P I/Ddem\n> Constitution in        the Government of the United States    , or    in        any    Department or\n# NPr+         NPr/J/R/P D   N🅪Sg       P  D   VP/J   NPrPl/V3+ . NPr/C NPr/J/R/P I/R/Dq NSg        NPr/C\n> Officer thereof .\n# NSg/VB+ R       .\n>\n#\n>\n#\n>\n#\n>              Section . 9 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The Migration or    Importation of such  Persons as    any    of the\n# D   NSg+      NPr/C N🅪Sg        P  NSg/I NPl/V3+ R/C/P I/R/Dq P  D\n> States    now       existing shall think  proper to admit , shall not     be       prohibited by    the\n# NPrPl/V3+ NSg/J/R/C Nᴹ/Vg/J  VXB   NSg/VB NSg/J  P  VB    . VXB   NSg/R/C NSg/VLXB VP/J       NSg/P D\n> Congress prior to the Year one      thousand eight hundred and  eight , but     a   Tax     or\n# NPr/VB+  NSg/J P  D   NSg+ NSg/I/J+ NSg      NSg/J NSg     VB/C NSg/J . NSg/C/P D/P N🅪Sg/VB NPr/C\n> duty  may     be       imposed on  such  Importation , not     exceeding ten dollars for   each\n# N🅪Sg+ NPr/VXB NSg/VLXB VP/J    J/P NSg/I N🅪Sg        . NSg/R/C Nᴹ/Vg/J   NSg NPl+    R/C/P Dq\n> Person  .\n# NSg/VB+ .\n>\n#\n> The Privilege of the Writ   of Habeas Corpus shall not     be       suspended , unless when\n# D   NSg/VB    P  D   NSg/VB P  ?      NSg+   VXB   NSg/R/C NSg/VLXB VP/J      . C      NSg/I/C\n> in        Cases  of Rebellion or    Invasion the public  Safety   may     require it       .\n# NPr/J/R/P NPl/V3 P  N🅪Sg+     NPr/C NSg      D   Nᴹ/VB/J N🅪Sg/VB+ NPr/VXB NSg/VB  NPr/ISg+ .\n>\n#\n> No       Bill   of Attainder or    ex        post         facto Law      shall be       passed .\n# NSg/Dq/P NPr/VB P  NSg       NPr/C NSg/VB/J+ NPr🅪Sg/VB/P+ ?     N🅪Sg/VB+ VXB   NSg/VLXB VP/J   .\n>\n#\n> No       Capitation , or    other    direct , Tax      shall be       laid , unless in        Proportion to the\n# NSg/Dq/P NSg        . NPr/C NSg/VB/J VB/J   . N🅪Sg/VB+ VXB   NSg/VLXB VP/J . C      NPr/J/R/P NSg/VB+    P  D\n> Census  or    Enumeration herein before directed to be       taken . Congress shall have\n# NSg/VB+ NPr/C N🅪Sg        R      C/P    VP/J     P  NSg/VLXB VPp/J . NPr/VB+  VXB   NSg/VXB\n> power      to lay        and  collect  taxes   on  incomes , from whatever source   derived ,\n# N🅪Sg/VB/J+ P  NSg/VBPt/J VB/C NSg/VB/J NPl/V3+ J/P NPl/V3+ . P    NSg/I/J+ N🅪Sg/VB+ VP/J    .\n> without apportionment among the several States    , and  without regard  to any\n# C/P     NSg           P     D   J/Dq    NPrPl/V3+ . VB/C C/P     NSg/VB+ P  I/R/Dq\n> census  or    enumeration .\n# NSg/VB+ NPr/C N🅪Sg        .\n>\n#\n> No       Tax     or    Duty  shall be       laid on  Articles exported from any    State    .\n# NSg/Dq/P N🅪Sg/VB NPr/C N🅪Sg+ VXB   NSg/VLXB VP/J J/P NPl/V3+  VP/J     P    I/R/Dq N🅪Sg/VB+ .\n>\n#\n> No        Preference shall be       given       by    any    Regulation of Commerce or    Revenue to the\n# NSg/Dq/P+ NSg/VB+    VXB   NSg/VLXB NSg/VPp/J/P NSg/P I/R/Dq N🅪Sg/J     P  Nᴹ/VB    NPr/C NSg+    P  D\n> Ports  of one     State    over    those  of another : nor   shall Vessels bound    to , or    from ,\n# NPl/V3 P  NSg/I/J N🅪Sg/VB+ NSg/J/P I/Ddem P  I/D     . NSg/C VXB   NPl/V3+ NSg/VP/J P  . NPr/C P    .\n> one      State    , be       obliged to enter  , clear    , or    pay      Duties in        another .\n# NSg/I/J+ N🅪Sg/VB+ . NSg/VLXB VP/J    P  NSg/VB . NSg/VB/J . NPr/C NSg/VB/J NPl+   NPr/J/R/P I/D     .\n>\n#\n> No        Money   shall be       drawn from the Treasury , but     in        Consequence of Appropriations\n# NSg/Dq/P+ N🅪Sg/J+ VXB   NSg/VLXB VPp/J P    D   NPr      . NSg/C/P NPr/J/R/P NSg/VB      P  +\n> made by    Law      ; and  a   regular Statement and  Account of the Receipts and\n# VP   NSg/P N🅪Sg/VB+ . VB/C D/P NSg/J   NSg/VB/J+ VB/C NSg/VB  P  D   NPl/V3+  VB/C\n> Expenditures of all          public  Money   shall be       published from time       to time      .\n# NPl          P  NSg/I/J/C/Dq Nᴹ/VB/J N🅪Sg/J+ VXB   NSg/VLXB VP/J      P    N🅪Sg/VB/J+ P  N🅪Sg/VB/J .\n>\n#\n> No       Title   of Nobility shall be       granted by    the United States    : And  no       Person\n# NSg/Dq/P NSg/VB+ P  NSg      VXB   NSg/VLXB VP/J    NSg/P D   VP/J   NPrPl/V3+ . VB/C NSg/Dq/P NSg/VB+\n> holding any    Office of Profit      or    Trust     under   them     , shall , without the Consent of\n# Nᴹ/Vg/J I/R/Dq NSg/VB P  N🅪Sg/VBP/J+ NPr/C N🅪Sg/VB/J NSg/J/P NSg/IPl+ . VXB   . C/P     D   N🅪Sg/VP P\n> the Congress , accept   of any    present  , Emolument , Office  , or    Title   , of any    kind\n# D   NPr/VB+  . NSg/VB/J P  I/R/Dq NSg/VB/J . NSg       . NSg/VB+ . NPr/C NSg/VB+ . P  I/R/Dq NSg/J+\n> whatever , from any    King      , Prince    , or    foreign State    .\n# NSg/I/J+ . P    I/R/Dq NPr/VB/J+ . NPr/VB/J+ . NPr/C NSg/J   N🅪Sg/VB+ .\n>\n#\n> The right    of citizens of the United States    to vote   in        any    primary  or    other\n# D   NPr/VB/J P  NPl      P  D+  VP/J   NPrPl/V3+ P  NSg/VB NPr/J/R/P I/R/Dq NSg/VB/J NPr/C NSg/VB/J\n> election for   President or    Vice        President , for   electors for   President or    Vice\n# NSg      R/C/P NSg/VB    NPr/C NSg/VB/J/P+ NSg/VB+   . R/C/P NPl      R/C/P NSg/VB    NPr/C NSg/VB/J/P+\n> President , or    for   Senator or    Representative in        Congress , shall not     be       denied or\n# NSg/VB+   . NPr/C R/C/P NSg     NPr/C NSg/J+         NPr/J/R/P NPr/VB+  . VXB   NSg/R/C NSg/VLXB VP/J   NPr/C\n> abridged by    the United States    or    any    State    by    reason  of failure to pay      any    poll\n# VP/J     NSg/P D   VP/J   NPrPl/V3+ NPr/C I/R/Dq N🅪Sg/VB+ NSg/P N🅪Sg/VB P  N🅪Sg+   P  NSg/VB/J I/R/Dq NSg/VB/J+\n> tax     or    other    tax      .\n# N🅪Sg/VB NPr/C NSg/VB/J N🅪Sg/VB+ .\n>\n#\n>              Section . 10 .\n# HeadingStart NSg/VB+ . #  .\n>\n#\n> No        State    shall enter  into any    Treaty  , Alliance , or\n# NSg/Dq/P+ N🅪Sg/VB+ VXB   NSg/VB P    I/R/Dq NSg/VB+ . N🅪Sg/VB+ . NPr/C\n> Confederation ; grant   Letters of Marque and  Reprisal ; coin    Money   ; emit Bills  of\n# NSg/J         . NPr/VB+ NPl/V3  P  NSg    VB/C NSg+     . NSg/VB+ N🅪Sg/J+ . VB   NPl/V3 P\n> Credit  ; make   any    Thing but     gold    and  silver   Coin    a   Tender   in        Payment of Debts ;\n# NSg/VB+ . NSg/VB I/R/Dq NSg+  NSg/C/P Nᴹ/VB/J VB/C Nᴹ/VB/J+ NSg/VB+ D/P NSg/VB/J NPr/J/R/P N🅪Sg    P  NPl+  .\n> pass   any    Bill   of Attainder , ex        post         facto Law      , or    Law      impairing the Obligation\n# NSg/VB I/R/Dq NPr/VB P  NSg       . NSg/VB/J+ NPr🅪Sg/VB/P+ ?     N🅪Sg/VB+ . NPr/C N🅪Sg/VB+ Nᴹ/Vg/J   D   N🅪Sg\n> of Contracts , or    grant  any    Title   of Nobility .\n# P  NPl/V3+   . NPr/C NPr/VB I/R/Dq NSg/VB+ P  NSg      .\n>\n#\n> No        State    shall , without the Consent of the Congress , lay        any    Imposts or    Duties\n# NSg/Dq/P+ N🅪Sg/VB+ VXB   . C/P     D   N🅪Sg/VP P  D+  NPr/VB+  . NSg/VBPt/J I/R/Dq NPl     NPr/C NPl+\n> on  Imports or    Exports , except what   may     be       absolutely necessary for   executing\n# J/P NPl/V3  NPr/C NPl/V3+ . VB/C/P NSg/I+ NPr/VXB NSg/VLXB R          NSg/J     R/C/P Nᴹ/Vg/J\n> it's inspection Laws    : and  the net       Produce of all          Duties and  Imposts , laid by\n# +    N🅪Sg+      NPl/V3+ . VB/C D   NSg/VB/J+ Nᴹ/VB   P  NSg/I/J/C/Dq NPl+   VB/C NPl     . VP/J NSg/P\n> any    State    on  Imports or    Exports , shall be       for   the Use     of the Treasury of the\n# I/R/Dq N🅪Sg/VB+ J/P NPl/V3  NPr/C NPl/V3+ . VXB   NSg/VLXB R/C/P D   N🅪Sg/VB P  D   NPr      P  D\n> United States    ; and  all          such  Laws    shall be       subject  to the Revision and  Controul\n# VP/J   NPrPl/V3+ . VB/C NSg/I/J/C/Dq NSg/I NPl/V3+ VXB   NSg/VLXB NSg/VB/J P  D   NSg/VB+  VB/C ?\n> of the Congress .\n# P  D   NPr/VB+  .\n>\n#\n> No        State    shall , without the Consent of Congress , lay        any    Duty of Tonnage , keep\n# NSg/Dq/P+ N🅪Sg/VB+ VXB   . C/P     D   N🅪Sg/VP P  NPr/VB+  . NSg/VBPt/J I/R/Dq N🅪Sg P  NSg+    . NSg/VB\n> Troops  , or    Ships  of War      in        time      of Peace      , enter  into any    Agreement or    Compact\n# NPl/V3+ . NPr/C NPl/V3 P  N🅪Sg/VB+ NPr/J/R/P N🅪Sg/VB/J P  NPr🅪Sg/VB+ . NSg/VB P    I/R/Dq N🅪Sg+     NPr/C NSg/VB/J\n> with another State    , or    with a    foreign Power      , or    engage in        War      , unless actually\n# P    I/D+    N🅪Sg/VB+ . NPr/C P    D/P+ NSg/J+  N🅪Sg/VB/J+ . NPr/C VB     NPr/J/R/P N🅪Sg/VB+ . C      R\n> invaded , or    in        such  imminent Danger      as    will    not     admit of delay       .\n# VP/J    . NPr/C NPr/J/R/P NSg/I J        N🅪Sg/VB/JC+ R/C/P NPr/VXB NSg/R/C VB    P  NSg/VBPt/J+ .\n>\n#\n>              Article . II .\n# HeadingStart NSg/VB+ . #r .\n>\n#\n>              Section . 1 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The executive Power      shall be       vested in        a   President of the\n# D+  NSg/J+    N🅪Sg/VB/J+ VXB   NSg/VLXB VP/J   NPr/J/R/P D/P NSg/VB    P  D\n> United States   of America . He       shall hold     his     Office  during the Term     of four\n# VP/J   NPrPl/V3 P  NPr+    . NPr/ISg+ VXB   NSg/VB/J ISg/D$+ NSg/VB+ VB/P   D   NSg/VB/J P  NSg+\n> Years ending  at    noon    on  the 20th day    of January , and  , together with the Vice\n# NPl+  Nᴹ/Vg/J NSg/P NSg/VB+ J/P D   #    NPr🅪Sg P  NPr+    . VB/C . J        P    D+  NSg/VB/J/P+\n> President , chosen   for   the same Term      , be       elected  , as    follows\n# NSg/VB+   . Nᴹ/VPp/J R/C/P D+  I/J+ NSg/VB/J+ . NSg/VLXB NSg/VP/J . R/C/P NPl/V3\n>\n#\n> Each State    shall appoint , in        such  Manner as    the Legislature thereof may     direct ,\n# Dq+  N🅪Sg/VB+ VXB   VB      . NPr/J/R/P NSg/I NSg+   R/C/P D   NSg+        R       NPr/VXB VB/J   .\n> a   Number      of Electors , equal    to the whole Number     of Senators and  Representatives\n# D/P N🅪Sg/VB/JC+ P  NPl      . NSg/VB/J P  D   NSg/J N🅪Sg/VB/JC P  NPl      VB/C NPl+\n> to which the State    may     be       entitled in        the Congress : but     no       Senator or\n# P  I/C+  D   N🅪Sg/VB+ NPr/VXB NSg/VLXB VP/J     NPr/J/R/P D   NPr/VB+  . NSg/C/P NSg/Dq/P NSg     NPr/C\n> Representative , or    Person  holding an  Office of Trust     or    Profit      under   the United\n# NSg/J+         . NPr/C NSg/VB+ Nᴹ/Vg/J D/P NSg/VB P  N🅪Sg/VB/J NPr/C N🅪Sg/VBP/J+ NSg/J/P D   VP/J\n> States    , shall be       appointed an  Elector .\n# NPrPl/V3+ . VXB   NSg/VLXB VP/J      D/P NSg     .\n>\n#\n>              SubSection . 1 .\n# HeadingStart NSg/VB+    . # .\n>\n#\n> The Electors shall meet     in        their respective states    , and  vote\n# D   NPl      VXB   NSg/VB/J NPr/J/R/P D$+   J          NPrPl/V3+ . VB/C NSg/VB+\n> by    ballot for   President and  Vice        - President , one     of whom , at    least    , shall not     be\n# NSg/P NSg/VB R/C/P NSg/VB    VB/C NSg/VB/J/P+ . NSg/VB+   . NSg/I/J P  I+   . NSg/P NSg/J/Dq . VXB   NSg/R/C NSg/VLXB\n> an  inhabitant of the same state    with themselves ; they shall name   in        their\n# D/P NSg/J      P  D   I/J  N🅪Sg/VB+ P    IPl+       . IPl+ VXB   NSg/VB NPr/J/R/P D$+\n> ballots the person  voted for   as    President , and  in        distinct ballots the person\n# NPl/V3  D   NSg/VB+ VP/J  R/C/P R/C/P NSg/VB+   . VB/C NPr/J/R/P VB/J     NPl/V3  D   NSg/VB+\n> voted for   as    Vice        - President , and  they shall make   distinct lists  of all          persons\n# VP/J  R/C/P R/C/P NSg/VB/J/P+ . NSg/VB+   . VB/C IPl+ VXB   NSg/VB VB/J     NPl/V3 P  NSg/I/J/C/Dq NPl/V3+\n> voted for   as    President , and  all          persons voted for   as    Vice        - President and  of the\n# VP/J  R/C/P R/C/P NSg/VB+   . VB/C NSg/I/J/C/Dq NPl/V3+ VP/J  R/C/P R/C/P NSg/VB/J/P+ . NSg/VB    VB/C P  D\n> number     of votes   for   each , which lists   they shall sign    and  certify , and  transmit\n# N🅪Sg/VB/JC P  NPl/V3+ R/C/P Dq   . I/C+  NPl/V3+ IPl+ VXB   NSg/VB+ VB/C VB      . VB/C VB\n> sealed to the seat   of the government of the United States    , directed to the\n# VP/J   P  D   NSg/VB P  D   N🅪Sg       P  D   VP/J   NPrPl/V3+ . VP/J     P  D\n> President of the Senate ; — The President of the Senate shall , in        the presence of\n# NSg/VB    P  D   NPr+   . . D   NSg/VB    P  D   NPr+   VXB   . NPr/J/R/P D   N🅪Sg/VB  P\n> the Senate and  House  of Representatives , open     all          the certificates and  the\n# D   NPr+   VB/C NPr/VB P  NPl+            . NSg/VB/J NSg/I/J/C/Dq D   NPl/V3+      VB/C D\n> votes   shall then      be       counted ; — The person  having  the greatest Number     of votes   for\n# NPl/V3+ VXB   NSg/J/R/C NSg/VLXB VP/J    . . D   NSg/VB+ Nᴹ/Vg/J D   JS       N🅪Sg/VB/JC P  NPl/V3+ R/C/P\n> President , shall be       the President , if    such  number      be       a   majority of the whole\n# NSg/VB+   . VXB   NSg/VLXB D   NSg/VB+   . NSg/C NSg/I N🅪Sg/VB/JC+ NSg/VLXB D/P NSg      P  D   NSg/J\n> number      of Electors appointed ; and  if    no       person  have    such  majority , then      from\n# N🅪Sg/VB/JC+ P  NPl      VP/J      . VB/C NSg/C NSg/Dq/P NSg/VB+ NSg/VXB NSg/I NSg+     . NSg/J/R/C P\n> the persons having  the highest numbers   not     exceeding three on  the list   of those\n# D   NPl/V3+ Nᴹ/Vg/J D   JS      NPrPl/V3+ NSg/R/C Nᴹ/Vg/J   NSg   J/P D   NSg/VB P  I/Ddem\n> voted for   as    President , the House  of Representatives shall choose   immediately ,\n# VP/J+ R/C/P R/C/P NSg/VB+   . D   NPr/VB P  NPl+            VXB   NSg/VB/C R           .\n> by    ballot  , the President . But     in        choosing the President , the votes   shall be\n# NSg/P NSg/VB+ . D   NSg/VB+   . NSg/C/P NPr/J/R/P Nᴹ/Vg/J  D+  NSg/VB+   . D+  NPl/V3+ VXB   NSg/VLXB\n> taken by    states    , the representation from each state    having  one      vote    ; a   quorum\n# VPp/J NSg/P NPrPl/V3+ . D   NSg            P    Dq+  N🅪Sg/VB+ Nᴹ/Vg/J NSg/I/J+ NSg/VB+ . D/P NSg\n> for   this   purpose  shall consist of a   member or    members from two - thirds of the\n# R/C/P I/Ddem N🅪Sg/VB+ VXB   NSg/VB  P  D/P NSg/VB NPr/C NPl/V3+ P    NSg . NPl/V3 P  D\n> states    , and  a   majority of all          the states    shall be       necessary to a   choice  . [ If    ,\n# NPrPl/V3+ . VB/C D/P NSg      P  NSg/I/J/C/Dq D   NPrPl/V3+ VXB   NSg/VLXB NSg/J     P  D/P N🅪Sg/J+ . . NSg/C .\n> at    the time       fixed for   the beginning of the term     of the President , the President\n# NSg/P D+  N🅪Sg/VB/J+ VP/J  R/C/P D   NSg/Vg/J  P  D   NSg/VB/J P  D+  NSg/VB+   . D+  NSg/VB+\n> elect    shall have    died , the Vice        President elect    shall become President . If    a\n# NSg/VB/J VXB   NSg/VXB VP/J . D   NSg/VB/J/P+ NSg/VB+   NSg/VB/J VXB   VBPp   NSg/VB+   . NSg/C D/P+\n> President shall not     have    been     chosen   before the time       fixed for   the beginning of\n# NSg/VB+   VXB   NSg/R/C NSg/VXB NSg/VLPp Nᴹ/VPp/J C/P    D+  N🅪Sg/VB/J+ VP/J  R/C/P D   NSg/Vg/J  P\n> his     term      , or    if    the President elect    shall have    failed to qualify , then      the Vice\n# ISg/D$+ NSg/VB/J+ . NPr/C NSg/C D+  NSg/VB+   NSg/VB/J VXB   NSg/VXB VP/J   P  NSg/VB  . NSg/J/R/C D   NSg/VB/J/P+\n> President elect    shall act     as    President until a   President shall have    qualified ;\n# NSg/VB+   NSg/VB/J VXB   NPr/VB+ R/C/P NSg/VB+   C/P   D/P NSg/VB+   VXB   NSg/VXB VP/J      .\n> and  the Congress may     by    law      provide for   the case       wherein neither a   President\n# VB/C D   NPr/VB+  NPr/VXB NSg/P N🅪Sg/VB+ VB      R/C/P D   NPr🅪Sg/VB+ C       I/C     D/P NSg/VB+\n> elect    nor   a   Vice        President elect    shall have    qualified , declaring who    shall then\n# NSg/VB/J NSg/C D/P NSg/VB/J/P+ NSg/VB+   NSg/VB/J VXB   NSg/VXB VP/J      . Nᴹ/Vg/J   NPr/I+ VXB   NSg/J/R/C\n> act     as    President , or    the manner in        which one     who    is  to act    shall be       selected ,\n# NPr/VB+ R/C/P NSg/VB+   . NPr/C D   NSg+   NPr/J/R/P I/C+  NSg/I/J NPr/I+ VL3 P  NPr/VB VXB   NSg/VLXB VP/J     .\n> and  such  person  shall act     accordingly until a   President or    Vice        President shall\n# VB/C NSg/I NSg/VB+ VXB   NPr/VB+ R           C/P   D/P NSg/VB    NPr/C NSg/VB/J/P+ NSg/VB+   VXB\n> have    qualified . The Congress may     by    law      provide for   the case      of the death  of any\n# NSg/VXB VP/J      . D+  NPr/VB+  NPr/VXB NSg/P N🅪Sg/VB+ VB      R/C/P D   NPr🅪Sg/VB P  D   NPr🅪Sg P  I/R/Dq\n> of the persons from whom the House  of Representatives may     choose   a    President\n# P  D   NPl/V3+ P    I+   D   NPr/VB P  NPl+            NPr/VXB NSg/VB/C D/P+ NSg/VB+\n> whenever the right    of choice  shall have    devolved upon them     , and  for   the case      of\n# C        D   NPr/VB/J P  N🅪Sg/J+ VXB   NSg/VXB VP/J     P    NSg/IPl+ . VB/C R/C/P D   NPr🅪Sg/VB P\n> the death  of any    of the persons from whom the Senate may     choose   a   Vice\n# D   NPr🅪Sg P  I/R/Dq P  D   NPl/V3+ P    I+   D   NPr+   NPr/VXB NSg/VB/C D/P NSg/VB/J/P+\n> President whenever the right    of choice  shall have    devolved upon them     . ] The\n# NSg/VB+   C        D   NPr/VB/J P  N🅪Sg/J+ VXB   NSg/VXB VP/J     P    NSg/IPl+ . . D+\n> person  having  the greatest number     of votes   as    Vice        - President , shall be       the\n# NSg/VB+ Nᴹ/Vg/J D   JS       N🅪Sg/VB/JC P  NPl/V3+ R/C/P NSg/VB/J/P+ . NSg/VB+   . VXB   NSg/VLXB D\n> Vice        - President , if    such   number      be       a   majority of the whole number     of Electors\n# NSg/VB/J/P+ . NSg/VB+   . NSg/C NSg/I+ N🅪Sg/VB/JC+ NSg/VLXB D/P NSg      P  D   NSg/J N🅪Sg/VB/JC P  NPl\n> appointed , and  if    no       person  have    a   majority , then      from the two highest numbers\n# VP/J      . VB/C NSg/C NSg/Dq/P NSg/VB+ NSg/VXB D/P NSg+     . NSg/J/R/C P    D   NSg JS      NPrPl/V3+\n> on  the list    , the Senate shall choose   the Vice        - President ; a   quorum for   the\n# J/P D   NSg/VB+ . D   NPr+   VXB   NSg/VB/C D   NSg/VB/J/P+ . NSg/VB+   . D/P NSg    R/C/P D\n> purpose  shall consist of two - thirds of the whole number     of Senators , and  a\n# N🅪Sg/VB+ VXB   NSg/VB  P  NSg . NPl/V3 P  D   NSg/J N🅪Sg/VB/JC P  NPl+     . VB/C D/P\n> majority of the whole number      shall be       necessary to a   choice  . But     no        person\n# NSg      P  D   NSg/J N🅪Sg/VB/JC+ VXB   NSg/VLXB NSg/J     P  D/P N🅪Sg/J+ . NSg/C/P NSg/Dq/P+ NSg/VB+\n> constitutionally ineligible to the office of President shall be       eligible to\n# R                NSg/J      P  D   NSg/VB P  NSg/VB+   VXB   NSg/VLXB NSg/J    P\n> that         of Vice        - President of the United States    .\n# NSg/I/C/Ddem P  NSg/VB/J/P+ . NSg/VB    P  D   VP/J   NPrPl/V3+ .\n>\n#\n> The Congress may     determine the Time      of chusing the Electors , and  the Day     on\n# D+  NPr/VB+  NPr/VXB VB        D   N🅪Sg/VB/J P  ?       D   NPl      . VB/C D   NPr🅪Sg+ J/P\n> which they shall give   their Votes   ; which Day     shall be       the same throughout the\n# I/C+  IPl+ VXB   NSg/VB D$+   NPl/V3+ . I/C+  NPr🅪Sg+ VXB   NSg/VLXB D   I/J  P          D\n> United States    .\n# VP/J   NPrPl/V3+ .\n>\n#\n>              SubSection . 2\n# HeadingStart NSg/VB+    . #\n>\n#\n> No       Person  except a    natural born      Citizen , or    a   Citizen of the\n# NSg/Dq/P NSg/VB+ VB/C/P D/P+ NSg/J+  NPr/VB/J+ NSg+    . NPr/C D/P NSg     P  D+\n> United States    , at    the time      of the Adoption of this    Constitution , shall be\n# VP/J   NPrPl/V3+ . NSg/P D   N🅪Sg/VB/J P  D   N🅪Sg     P  I/Ddem+ NPr+         . VXB   NSg/VLXB\n> eligible to the Office of President ; neither shall any     Person  be       eligible to\n# NSg/J    P  D   NSg/VB P  NSg/VB+   . I/C     VXB   I/R/Dq+ NSg/VB+ NSg/VLXB NSg/J    P\n> that         Office  who    shall not     have    attained to the Age     of thirty five Years , and\n# NSg/I/C/Ddem NSg/VB+ NPr/I+ VXB   NSg/R/C NSg/VXB VP/J     P  D   N🅪Sg/VB P  NSg    NSg  NPl+  . VB/C\n> been     fourteen Years a   Resident within  the United States    .\n# NSg/VLPp NSg      NPl+  D/P NSg/J+   NSg/J/P D   VP/J   NPrPl/V3+ .\n>\n#\n> No        person  shall be       elected  to the office of the President more         than twice , and\n# NSg/Dq/P+ NSg/VB+ VXB   NSg/VLXB NSg/VP/J P  D   NSg/VB P  D+  NSg/VB+   NPr/I/J/R/Dq C/P  R     . VB/C\n> no        person  who    has held the office of President , or    acted as    President , for   more\n# NSg/Dq/P+ NSg/VB+ NPr/I+ V3  VP   D   NSg/VB P  NSg/VB+   . NPr/C VP/J  R/C/P NSg/VB+   . R/C/P NPr/I/J/R/Dq\n> than two years of a    term      to which some      other     person  was  elected  President shall\n# C/P  NSg NPl   P  D/P+ NSg/VB/J+ P  I/C+  I/J/R/Dq+ NSg/VB/J+ NSg/VB+ VLPt NSg/VP/J NSg/VB+   VXB\n> be       elected  to the office of the President more         than once  . But     this    article\n# NSg/VLXB NSg/VP/J P  D   NSg/VB P  D+  NSg/VB+   NPr/I/J/R/Dq C/P  NSg/C . NSg/C/P I/Ddem+ NSg/VB+\n> shall not     apply to any     person  holding the office of President when    this    article\n# VXB   NSg/R/C VB/J  P  I/R/Dq+ NSg/VB+ Nᴹ/Vg/J D   NSg/VB P  NSg/VB+   NSg/I/C I/Ddem+ NSg/VB+\n> was  proposed by    the Congress , and  shall not     prevent any     person  who    may     be\n# VLPt VP/J     NSg/P D+  NPr/VB+  . VB/C VXB   NSg/R/C VB      I/R/Dq+ NSg/VB+ NPr/I+ NPr/VXB NSg/VLXB\n> holding the office of President , or    acting  as    President , during the term      within\n# Nᴹ/Vg/J D   NSg/VB P  NSg/VB+   . NPr/C Nᴹ/Vg/J R/C/P NSg/VB+   . VB/P   D   NSg/VB/J+ NSg/J/P\n> which this    article becomes operative from holding the office of President or\n# I/C+  I/Ddem+ NSg/VB+ V3      NSg/J+    P    Nᴹ/Vg/J D   NSg/VB P  NSg/VB+   NPr/C\n> acting  as    President during the remainder of such   term      .\n# Nᴹ/Vg/J R/C/P NSg/VB+   VB/P   D   NSg/VB/J  P  NSg/I+ NSg/VB/J+ .\n>\n#\n>              SubSection 3 .\n# HeadingStart NSg/VB+    # .\n>\n#\n> In        case      of the removal of the President from office  or    of his\n# NPr/J/R/P NPr🅪Sg/VB P  D   NSg     P  D   NSg/VB+   P    NSg/VB+ NPr/C P  ISg/D$+\n> death  or    resignation , the Vice        President shall become President .\n# NPr🅪Sg NPr/C NSg+        . D+  NSg/VB/J/P+ NSg/VB+   VXB   VBPp   NSg/VB+   .\n>\n#\n> Whenever there is  a   vacancy in        the office of the Vice        President , the President\n# C        R+    VL3 D/P N🅪Sg+   NPr/J/R/P D   NSg/VB P  D+  NSg/VB/J/P+ NSg/VB+   . D+  NSg/VB+\n> shall nominate a    Vice        President who    shall take   office  upon confirmation by    a\n# VXB   VB/J     D/P+ NSg/VB/J/P+ NSg/VB+   NPr/I+ VXB   NSg/VB NSg/VB+ P    N🅪Sg+        NSg/P D/P\n> majority vote   of both   Houses of Congress .\n# NSg+     NSg/VB P  I/C/Dq NPl/V3 P  NPr/VB+  .\n>\n#\n> Whenever the President transmits to the President pro     tempore of the Senate and\n# C        D+  NSg/VB+   V3        P  D   NSg/VB+   NSg/J/P ?       P  D   NPr+   VB/C\n> the Speaker of the House  of Representatives his     written declaration that          he       is\n# D   NSg     P  D   NPr/VB P  NPl+            ISg/D$+ VPp/J   NSg+        NSg/I/C/Ddem+ NPr/ISg+ VL3\n> unable   to discharge the powers    and  duties of his     office  , and  until he       transmits\n# NSg/VB/J P  N🅪Sg/VB   D   NPrPl/V3+ VB/C NPl    P  ISg/D$+ NSg/VB+ . VB/C C/P   NPr/ISg+ V3\n> to them     a   written declaration to the contrary  , such  powers   and  duties shall be\n# P  NSg/IPl+ D/P VPp/J   NSg+        P  D   NSg/VB/J+ . NSg/I NPrPl/V3 VB/C NPl+   VXB   NSg/VLXB\n> discharged by    the Vice        President as    Acting  President .\n# VP/J       NSg/P D   NSg/VB/J/P+ NSg/VB+   R/C/P Nᴹ/Vg/J NSg/VB+   .\n>\n#\n> Whenever the Vice        President and  a   majority of either the principal officers of\n# C        D   NSg/VB/J/P+ NSg/VB+   VB/C D/P NSg      P  I/C    D   NSg/J     NPl/V3   P\n> the executive departments or    of such  other     body    as    Congress may     by    law      provide ,\n# D   NSg/J     NPl+        NPr/C P  NSg/I NSg/VB/J+ NSg/VB+ R/C/P NPr/VB+  NPr/VXB NSg/P N🅪Sg/VB+ VB      .\n> transmit to the President pro     tempore of the Senate and  the Speaker of the\n# VB       P  D+  NSg/VB+   NSg/J/P ?       P  D   NPr+   VB/C D   NSg     P  D\n> House  of Representatives their written declaration that         the President is  unable\n# NPr/VB P  NPl+            D$+   VPp/J   NSg+        NSg/I/C/Ddem D   NSg/VB+   VL3 NSg/VB/J\n> to discharge the powers    and  duties of his     office  , the Vice        President shall\n# P  N🅪Sg/VB   D   NPrPl/V3+ VB/C NPl    P  ISg/D$+ NSg/VB+ . D   NSg/VB/J/P+ NSg/VB+   VXB\n> immediately assume the powers    and  duties of the office  as    Acting  President .\n# R           VB     D   NPrPl/V3+ VB/C NPl    P  D   NSg/VB+ R/C/P Nᴹ/Vg/J NSg/VB+   .\n>\n#\n> Thereafter , when    the President transmits to the President pro     tempore of the\n# NSg        . NSg/I/C D+  NSg/VB+   V3        P  D   NSg/VB+   NSg/J/P ?       P  D\n> Senate and  the Speaker of the House  of Representatives his     written declaration\n# NPr+   VB/C D   NSg     P  D   NPr/VB P  NPl+            ISg/D$+ VPp/J   NSg+\n> that         no       inability exists , he       shall resume the powers    and  duties of his     office\n# NSg/I/C/Ddem NSg/Dq/P N🅪Sg+     V3     . NPr/ISg+ VXB   NSg/VB D   NPrPl/V3+ VB/C NPl    P  ISg/D$+ NSg/VB+\n> unless the Vice        President and  a   majority of either the principal officers of\n# C      D   NSg/VB/J/P+ NSg/VB+   VB/C D/P NSg      P  I/C    D   NSg/J     NPl/V3   P\n> the executive department or    of such  other    body    as    Congress may     by    law      provide ,\n# D   NSg/J     NSg+       NPr/C P  NSg/I NSg/VB/J NSg/VB+ R/C/P NPr/VB+  NPr/VXB NSg/P N🅪Sg/VB+ VB      .\n> transmit within  four days to the President pro     tempore of the Senate and  the\n# VB       NSg/J/P NSg  NPl+ P  D   NSg/VB+   NSg/J/P ?       P  D   NPr+   VB/C D\n> Speaker of the House  of Representatives their written declaration that         the\n# NSg     P  D   NPr/VB P  NPl+            D$+   VPp/J   NSg+        NSg/I/C/Ddem D\n> President is  unable   to discharge the powers    and  duties of his     office  . Thereupon\n# NSg/VB+   VL3 NSg/VB/J P  N🅪Sg/VB   D   NPrPl/V3+ VB/C NPl    P  ISg/D$+ NSg/VB+ . R\n> Congress shall decide the issue   , assembling within  forty - eight hours for   that\n# NPr/VB+  VXB   VB     D   NSg/VB+ . Nᴹ/Vg/J    NSg/J/P NSg/J . NSg/J NPl+  R/C/P NSg/I/C/Ddem\n> purpose  if    not     in        session . If    the Congress , within  twenty - one     days after\n# N🅪Sg/VB+ NSg/C NSg/R/C NPr/J/R/P NSg/VB+ . NSg/C D+  NPr/VB+  . NSg/J/P NSg    . NSg/I/J NPl  P\n> receipt of the latter written declaration , or    , if    Congress is  not     in        session ,\n# NSg/VB  P  D+  NSg/J+ VPp/J   NSg+        . NPr/C . NSg/C NPr/VB+  VL3 NSg/R/C NPr/J/R/P NSg/VB+ .\n> within  twenty - one     days after Congress is  required to assemble , determines by\n# NSg/J/P NSg    . NSg/I/J NPl  P     NPr/VB+  VL3 VP/J     P  VB       . V3         NSg/P\n> two - thirds vote   of both   Houses  that         the President is  unable   to discharge the\n# NSg . NPl/V3 NSg/VB P  I/C/Dq NPl/V3+ NSg/I/C/Ddem D+  NSg/VB+   VL3 NSg/VB/J P  N🅪Sg/VB   D\n> powers   and  duties of his     office  , the Vice        President shall continue to discharge\n# NPrPl/V3 VB/C NPl    P  ISg/D$+ NSg/VB+ . D+  NSg/VB/J/P+ NSg/VB+   VXB   NSg/VB   P  N🅪Sg/VB\n> the same as    Acting  President ; otherwise , the President shall resume the powers\n# D   I/J  R/C/P Nᴹ/Vg/J NSg/VB+   . J/R       . D+  NSg/VB+   VXB   NSg/VB D   NPrPl/V3\n> and  duties of his     office  .\n# VB/C NPl    P  ISg/D$+ NSg/VB+ .\n>\n#\n>              SubSection 4 .\n# HeadingStart NSg/VB+    # .\n>\n#\n> The President shall , at    stated Times   , receive for   his\n# D+  NSg/VB+   VXB   . NSg/P VP/J   NPl/V3+ . NSg/VB  R/C/P ISg/D$+\n> Services , a    Compensation , which shall neither be       encreased nor   diminished\n# NPl/V3+  . D/P+ N🅪Sg+        . I/C+  VXB   I/C     NSg/VLXB ?         NSg/C VP/J\n> during the Period    for   which he       shall have    been     elected  , and  he       shall not\n# VB/P   D   NSg/VB/J+ R/C/P I/C+  NPr/ISg+ VXB   NSg/VXB NSg/VLPp NSg/VP/J . VB/C NPr/ISg+ VXB   NSg/R/C\n> receive within  that         Period    any    other    Emolument from the United States    , or    any\n# NSg/VB  NSg/J/P NSg/I/C/Ddem NSg/VB/J+ I/R/Dq NSg/VB/J NSg       P    D   VP/J   NPrPl/V3+ . NPr/C I/R/Dq\n> of them     .\n# P  NSg/IPl+ .\n>\n#\n> Before he       enter  on  the Execution of his     Office  , he       shall take   the following\n# C/P    NPr/ISg+ NSg/VB J/P D   N🅪Sg      P  ISg/D$+ NSg/VB+ . NPr/ISg+ VXB   NSg/VB D   N🅪Sg/Vg/J/P\n> Oath    or    Affirmation : - - \" I       do  solemnly swear    ( or    affirm ) that         I       will    faithfully\n# NSg/VB+ NPr/C NSg         . . . . ISg/#r+ VXB R        NSg/VB/J . NPr/C VB     . NSg/I/C/Ddem ISg/#r+ NPr/VXB R\n> execute the Office of President of the United States    , and  will    to the best       of\n# VB      D   NSg/VB P  NSg/VB    P  D   VP/J   NPrPl/V3+ . VB/C NPr/VXB P  D   NPr/VXB/JS P\n> my  Ability , preserve , protect and  defend the Constitution of the United\n# D$+ N🅪Sg+   . NSg/VB   . VB      VB/C NSg/VB D   NPr          P  D   VP/J\n> States    . \"\n# NPrPl/V3+ . .\n>\n#\n>              SubSection 5 .\n# HeadingStart NSg/VB+    # .\n>\n#\n> The District  constituting the seat   of Government of the\n# D+  NSg/VB/J+ Nᴹ/Vg/J      D   NSg/VB P  N🅪Sg       P  D\n> United States    shall appoint in        such  manner as    the Congress may     direct :\n# VP/J   NPrPl/V3+ VXB   VB      NPr/J/R/P NSg/I NSg+   R/C/P D   NPr/VB+  NPr/VXB VB/J   .\n>\n#\n> A   number     of electors of President and  Vice        President equal    to the whole number\n# D/P N🅪Sg/VB/JC P  NPl      P  NSg/VB    VB/C NSg/VB/J/P+ NSg/VB+   NSg/VB/J P  D   NSg/J N🅪Sg/VB/JC\n> of Senators and  Representatives in        Congress to which the District  would be\n# P  NPl+     VB/C NPl+            NPr/J/R/P NPr/VB+  P  I/C+  D   NSg/VB/J+ VXB   NSg/VLXB\n> entitled if    it       were     a   State    , but     in        no       event   more         than the least    populous\n# VP/J     NSg/C NPr/ISg+ NSg/VLPt D/P N🅪Sg/VB+ . NSg/C/P NPr/J/R/P NSg/Dq/P NSg/VB+ NPr/I/J/R/Dq C/P  D   NSg/J/Dq J\n> State    ; they shall be       in        addition to those  appointed by    the States    , but     they\n# N🅪Sg/VB+ . IPl+ VXB   NSg/VLXB NPr/J/R/P NSg+     P  I/Ddem VP/J+     NSg/P D   NPrPl/V3+ . NSg/C/P IPl+\n> shall be       considered , for   the purposes of the election of President and  Vice\n# VXB   NSg/VLXB VP/J       . R/C/P D   NPl/V3   P  D   NSg      P  NSg/VB    VB/C NSg/VB/J/P+\n> President , to be       electors appointed by    a   State    ; and  they shall meet     in        the\n# NSg/VB+   . P  NSg/VLXB NPl      VP/J      NSg/P D/P N🅪Sg/VB+ . VB/C IPl+ VXB   NSg/VB/J NPr/J/R/P D\n> District  and  perform such  duties as    provided by    this   article of the\n# NSg/VB/J+ VB/C VB      NSg/I NPl+   R/C/P VP/J/C   NSg/P I/Ddem NSg/VB  P  D\n> Constitution .\n# NPr+         .\n>\n#\n>              Section . 2 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The President shall be       Commander in        Chief    of the Army and  Navy\n# D+  NSg/VB+   VXB   NSg/VLXB NSg       NPr/J/R/P NSg/VB/J P  D   NSg  VB/C N🅪Sg/J\n> of the United States    , and  of the Militia of the several States    , when    called\n# P  D+  VP/J   NPrPl/V3+ . VB/C P  D   NSg     P  D   J/Dq    NPrPl/V3+ . NSg/I/C VP/J\n> into the actual Service of the United States    ; he       may     require the Opinion , in\n# P    D   NSg/J  NSg/VB  P  D   VP/J   NPrPl/V3+ . NPr/ISg+ NPr/VXB NSg/VB  D   N🅪Sg+   . NPr/J/R/P\n> writing , of the principal Officer in        each of the executive Departments , upon\n# Nᴹ/Vg/J . P  D   NSg/J     NSg/VB+ NPr/J/R/P Dq   P  D   NSg/J     NPl+        . P\n> any    Subject   relating to the Duties of their respective Offices , and  he       shall\n# I/R/Dq NSg/VB/J+ Nᴹ/Vg/J  P  D   NPl    P  D$+   J          NPl/V3+ . VB/C NPr/ISg+ VXB\n> have    Power      to grant  Reprieves and  Pardons for   Offences against the United\n# NSg/VXB N🅪Sg/VB/J+ P  NPr/VB NPl/V3    VB/C NPl/V3  R/C/P NPl/Comm C/P     D   VP/J\n> States    , except in        Cases   of Impeachment .\n# NPrPl/V3+ . VB/C/P NPr/J/R/P NPl/V3+ P  N🅪Sg        .\n>\n#\n> He       shall have    Power      , by    and  with the Advice and  Consent of the Senate , to make\n# NPr/ISg+ VXB   NSg/VXB N🅪Sg/VB/J+ . NSg/P VB/C P    D+  Nᴹ+    VB/C N🅪Sg/VP P  D+  NPr+   . P  NSg/VB\n> Treaties , provided two thirds of the Senators present   concur ; and  he       shall\n# NPl/V3+  . VP/J/C   NSg NPl/V3 P  D+  NPl+     NSg/VB/J+ VB+    . VB/C NPr/ISg+ VXB\n> nominate , and  by    and  with the Advice and  Consent of the Senate , shall appoint\n# VB/J     . VB/C NSg/P VB/C P    D   Nᴹ+    VB/C N🅪Sg/VP P  D   NPr+   . VXB   VB\n> Ambassadors , other    public  Ministers and  Consuls , Judges   of the supreme  Court      ,\n# NPl+        . NSg/VB/J Nᴹ/VB/J NPl/V3+   VB/C NPl     . NPrPl/V3 P  D   NSg/VB/J N🅪Sg/VB/J+ .\n> and  all          other    Officers of the United States    , whose Appointments are not     herein\n# VB/C NSg/I/J/C/Dq NSg/VB/J NPl/V3   P  D   VP/J   NPrPl/V3+ . I+    NPl+         VLB NSg/R/C R\n> otherwise provided for   , and  which shall be       established by    Law      : but     the Congress\n# J/R       VP/J/C   R/C/P . VB/C I/C+  VXB   NSg/VLXB VP/J        NSg/P N🅪Sg/VB+ . NSg/C/P D   NPr/VB+\n> may     by    Law      vest   the Appointment of such  inferior Officers , as    they think\n# NPr/VXB NSg/P N🅪Sg/VB+ NSg/VB D   NSg         P  NSg/I NSg/J    NPl/V3+  . R/C/P IPl+ NSg/VB\n> proper , in        the President alone , in        the Courts of Law      , or    in        the Heads  of\n# NSg/J  . NPr/J/R/P D   NSg/VB+   J     . NPr/J/R/P D   NPl/V3 P  N🅪Sg/VB+ . NPr/C NPr/J/R/P D   NPl/V3 P\n> Departments .\n# NPl+        .\n>\n#\n> The President shall have    Power      to fill   up         all          Vacancies that          may     happen during\n# D+  NSg/VB+   VXB   NSg/VXB N🅪Sg/VB/J+ P  NSg/VB NSg/VB/J/P NSg/I/J/C/Dq NPl       NSg/I/C/Ddem+ NPr/VXB VB     VB/P\n> the Recess   of the Senate , by    granting Commissions which shall expire at    the End\n# D   NSg/VB/J P  D   NPr+   . NSg/P Nᴹ/Vg/J+ NPl/V3+     I/C+  VXB   VB     NSg/P D   NSg/VB\n> of their next    Session .\n# P  D$+   NSg/J/P NSg/VB+ .\n>\n#\n> No        soldier   shall , in        time      of peace      be       quartered in        any     house   , without the\n# NSg/Dq/P+ NSg/VB/J+ VXB   . NPr/J/R/P N🅪Sg/VB/J P  NPr🅪Sg/VB+ NSg/VLXB VP/J      NPr/J/R/P I/R/Dq+ NPr/VB+ . C/P     D\n> consent of the owner , nor   in        time      of war      , but     in        a    manner to be       prescribed by\n# N🅪Sg/VP P  D+  NSg+  . NSg/C NPr/J/R/P N🅪Sg/VB/J P  N🅪Sg/VB+ . NSg/C/P NPr/J/R/P D/P+ NSg+   P  NSg/VLXB VP/J       NSg/P\n> law      .\n# N🅪Sg/VB+ .\n>\n#\n>              Section . 3 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> He       shall from time       to time      give   to the Congress Information of\n# NPr/ISg+ VXB   P    N🅪Sg/VB/J+ P  N🅪Sg/VB/J NSg/VB P  D   NPr/VB+  Nᴹ          P\n> the State   of the Union     , and  recommend to their Consideration such   Measures as\n# D   N🅪Sg/VB P  D+  NPr/VB/J+ . VB/C NSg/VB    P  D$+   N🅪Sg+         NSg/I+ NPl/V3+  R/C/P\n> he       shall judge   necessary and  expedient ; he       may     , on  extraordinary Occasions ,\n# NPr/ISg+ VXB   NSg/VB+ NSg/J     VB/C NSg/J     . NPr/ISg+ NPr/VXB . J/P NSg/J         NPl/V3+   .\n> convene both   Houses  , or    either of them     , and  in        Case      of Disagreement between\n# VB      I/C/Dq NPl/V3+ . NPr/C I/C    P  NSg/IPl+ . VB/C NPr/J/R/P NPr🅪Sg/VB P  N🅪Sg+        NSg/P\n> them     , with Respect to the Time       of Adjournment , he       may     adjourn them     to such  Time\n# NSg/IPl+ . P    Nᴹ/VB+  P  D   N🅪Sg/VB/J+ P  NSg         . NPr/ISg+ NPr/VXB VB      NSg/IPl+ P  NSg/I N🅪Sg/VB/J+\n> as    he       shall think  proper ; he       shall receive Ambassadors and  other    public\n# R/C/P NPr/ISg+ VXB   NSg/VB NSg/J  . NPr/ISg+ VXB   NSg/VB  NPl         VB/C NSg/VB/J Nᴹ/VB/J\n> Ministers ; he       shall take   Care     that         the Laws    be       faithfully executed , and  shall\n# NPl/V3+   . NPr/ISg+ VXB   NSg/VB N🅪Sg/VB+ NSg/I/C/Ddem D   NPl/V3+ NSg/VLXB R          VP/J     . VB/C VXB\n> Commission all          the Officers of the United States    .\n# N🅪Sg/VB    NSg/I/J/C/Dq D   NPl/V3   P  D   VP/J   NPrPl/V3+ .\n>\n#\n>              Section . 4 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The President , Vice        President and  all          civil Officers of the\n# D+  NSg/VB+   . NSg/VB/J/P+ NSg/VB+   VB/C NSg/I/J/C/Dq J     NPl/V3   P  D+\n> United States    , shall be       removed from Office  on  Impeachment for   , and  Conviction\n# VP/J   NPrPl/V3+ . VXB   NSg/VLXB VP/J    P    NSg/VB+ J/P N🅪Sg        R/C/P . VB/C N🅪Sg+\n> of , Treason , Bribery , or    other    high       Crimes  and  Misdemeanors .\n# P  . NSg     . Nᴹ      . NPr/C NSg/VB/J NSg/VB/J/R NPl/V3+ VB/C NPl          .\n>\n#\n>              Article . III .\n# HeadingStart NSg/VB+ . #r  .\n>\n#\n>              Section . 1 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The judicial Power     of the United States    , shall be       vested in\n# D   NSg/J    N🅪Sg/VB/J P  D+  VP/J   NPrPl/V3+ . VXB   NSg/VLXB VP/J   NPr/J/R/P\n> one     supreme  Court      , and  in        such  inferior Courts  as    the Congress may     from time       to\n# NSg/I/J NSg/VB/J N🅪Sg/VB/J+ . VB/C NPr/J/R/P NSg/I NSg/J+   NPl/V3+ R/C/P D+  NPr/VB+  NPr/VXB P    N🅪Sg/VB/J+ P\n> time      ordain and  establish . The Judges    , both   of the supreme  and  inferior Courts  ,\n# N🅪Sg/VB/J VB     VB/C VB        . D+  NPrPl/V3+ . I/C/Dq P  D   NSg/VB/J VB/C NSg/J+   NPl/V3+ .\n> shall hold     their Offices during good      Behaviour  , and  shall , at    stated Times   ,\n# VXB   NSg/VB/J D$+   NPl/V3+ VB/P   NPr/VB/J+ N🅪Sg/Comm+ . VB/C VXB   . NSg/P VP/J   NPl/V3+ .\n> receive for   their Services , a    Compensation , which shall not     be       diminished\n# NSg/VB  R/C/P D$+   NPl/V3+  . D/P+ N🅪Sg+        . I/C+  VXB   NSg/R/C NSg/VLXB VP/J\n> during their Continuance in        Office  .\n# VB/P   D$+   NSg         NPr/J/R/P NSg/VB+ .\n>\n#\n>              Section . 2 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The judicial Power      shall extend to all           Cases   , in        Law     and\n# D+  NSg/J+   N🅪Sg/VB/J+ VXB   NSg/VB P  NSg/I/J/C/Dq+ NPl/V3+ . NPr/J/R/P N🅪Sg/VB VB/C\n> Equity , arising under   this    Constitution , the Laws   of the United States    , and\n# NSg+   . Nᴹ/Vg/J NSg/J/P I/Ddem+ NPr+         . D   NPl/V3 P  D+  VP/J   NPrPl/V3+ . VB/C\n> Treaties made , or    which shall be       made , under   their Authority ; — to all           Cases\n# NPl/V3+  VP   . NPr/C I/C+  VXB   NSg/VLXB VP   . NSg/J/P D$+   N🅪Sg+     . . P  NSg/I/J/C/Dq+ NPl/V3+\n> affecting Ambassadors , other     public   Ministers and  Consuls ; — to all          Cases  of\n# Nᴹ/Vg/J   NPl+        . NSg/VB/J+ Nᴹ/VB/J+ NPl/V3+   VB/C NPl     . . P  NSg/I/J/C/Dq NPl/V3 P\n> admiralty and  maritime Jurisdiction ; — to Controversies to which the United\n# NPr       VB/C J        N🅪Sg+        . . P  NPl           P  I/C+  D   VP/J\n> States    shall be       a   Party     ; — to Controversies between two or    more         States    ; — between\n# NPrPl/V3+ VXB   NSg/VLXB D/P NSg/VB/J+ . . P  NPl           NSg/P   NSg NPr/C NPr/I/J/R/Dq NPrPl/V3+ . . NSg/P\n> Citizens of different States    , — between Citizens of the same State    claiming\n# NPl      P  NSg/J     NPrPl/V3+ . . NSg/P   NPl      P  D   I/J  N🅪Sg/VB+ Nᴹ/Vg/J\n> Lands   under   Grants of different States    .\n# NPl/V3+ NSg/J/P NPl/V3 P  NSg/J     NPrPl/V3+ .\n>\n#\n> In        all           Cases   affecting Ambassadors , other     public   Ministers and  Consuls , and\n# NPr/J/R/P NSg/I/J/C/Dq+ NPl/V3+ Nᴹ/Vg/J   NPl+        . NSg/VB/J+ Nᴹ/VB/J+ NPl/V3+   VB/C NPl     . VB/C\n> those  in        which a   State    shall be       Party     , the supreme  Court      shall have    original\n# I/Ddem NPr/J/R/P I/C+  D/P N🅪Sg/VB+ VXB   NSg/VLXB NSg/VB/J+ . D   NSg/VB/J N🅪Sg/VB/J+ VXB   NSg/VXB NSg/J\n> Jurisdiction . In        all          the other     Cases   before mentioned , the supreme   Court      shall\n# N🅪Sg+        . NPr/J/R/P NSg/I/J/C/Dq D+  NSg/VB/J+ NPl/V3+ C/P    VP/J      . D+  NSg/VB/J+ N🅪Sg/VB/J+ VXB\n> have    appellate Jurisdiction , both   as    to Law     and  Fact , with such  Exceptions , and\n# NSg/VXB J         N🅪Sg+        . I/C/Dq R/C/P P  N🅪Sg/VB VB/C NSg+ . P    NSg/I NPl+       . VB/C\n> under   such  Regulations as    the Congress shall make   .\n# NSg/J/P NSg/I NPl+        R/C/P D   NPr/VB+  VXB   NSg/VB .\n>\n#\n> The Trial    of all           Crimes  , except in        Cases   of Impeachment , shall be       by    Jury      ; and\n# D   NSg/VB/J P  NSg/I/J/C/Dq+ NPl/V3+ . VB/C/P NPr/J/R/P NPl/V3+ P  N🅪Sg        . VXB   NSg/VLXB NSg/P NSg/VB/J+ . VB/C\n> such  Trial     shall be       held in        the State    where   the said Crimes  shall have    been\n# NSg/I NSg/VB/J+ VXB   NSg/VLXB VP   NPr/J/R/P D   N🅪Sg/VB+ NSg/R/C D   VP/J NPl/V3+ VXB   NSg/VXB NSg/VLPp\n> committed ; but     when    not     committed within  any    State    , the Trial     shall be       at    such\n# VP/J      . NSg/C/P NSg/I/C NSg/R/C VP/J      NSg/J/P I/R/Dq N🅪Sg/VB+ . D   NSg/VB/J+ VXB   NSg/VLXB NSg/P NSg/I\n> Place   or    Places  as    the Congress may     by    Law      have    directed .\n# N🅪Sg/VB NPr/C NPl/V3+ R/C/P D   NPr/VB+  NPr/VXB NSg/P N🅪Sg/VB+ NSg/VXB VP/J     .\n>\n#\n>              Section . 3 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> Treason against the United States    , shall consist only  in\n# NSg     C/P     D   VP/J   NPrPl/V3+ . VXB   NSg/VB  J/R/C NPr/J/R/P\n> levying War      against them     , or    in        adhering to their Enemies , giving  them     Aid     and\n# Nᴹ/Vg/J N🅪Sg/VB+ C/P     NSg/IPl+ . NPr/C NPr/J/R/P Nᴹ/Vg/J  P  D$+   NPl/V3+ . Nᴹ/Vg/J NSg/IPl+ N🅪Sg/VB VB/C\n> Comfort  . No        Person  shall be       convicted of Treason unless on  the Testimony of two\n# N🅪Sg/VB+ . NSg/Dq/P+ NSg/VB+ VXB   NSg/VLXB VP/J      P  NSg     C      J/P D   NSg       P  NSg\n> Witnesses to the same overt Act     , or    on  Confession in        open     Court      .\n# NPl/V3+   P  D   I/J  NSg/J NPr/VB+ . NPr/C J/P N🅪Sg+      NPr/J/R/P NSg/VB/J N🅪Sg/VB/J+ .\n>\n#\n> The Congress shall have    Power      to declare the Punishment of Treason , but     no\n# D+  NPr/VB+  VXB   NSg/VXB N🅪Sg/VB/J+ P  VB      D   N🅪Sg       P  NSg     . NSg/C/P NSg/Dq/P\n> Attainder of Treason shall work     Corruption of Blood  , or    Forfeiture except\n# NSg       P  NSg     VXB   N🅪Sg/VB+ N🅪Sg       P  Nᴹ/VB+ . NPr/C NSg        VB/C/P\n> during the Life    of the Person  attainted .\n# VB/P   D   N🅪Sg/VB P  D   NSg/VB+ VP/J      .\n>\n#\n>              Section . 4 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The right    of the people  to be       secure in        their persons , houses  ,\n# D   NPr/VB/J P  D+  NPl/VB+ P  NSg/VLXB VB/J   NPr/J/R/P D$+   NPl/V3+ . NPl/V3+ .\n> papers  , and  effects , against unreasonable searches and  seizures , shall not     be\n# NPl/V3+ . VB/C NPl/V3+ . C/P     J            NPl/V3   VB/C NPl/V3+  . VXB   NSg/R/C NSg/VLXB\n> violated , and  no       warrants shall issue   , but     upon probable cause     , supported by\n# VP/J     . VB/C NSg/Dq/P NPl/V3+  VXB   NSg/VB+ . NSg/C/P P    NSg/J    N🅪Sg/VB/C . VP/J      NSg/P\n> oath    or    affirmation , and  particularly describing the place    to be       searched , and\n# NSg/VB+ NPr/C NSg         . VB/C R            Nᴹ/Vg/J    D   N🅪Sg/VB+ P  NSg/VLXB VP/J     . VB/C\n> the persons or    things to be       seized .\n# D   NPl/V3+ NPr/C NPl+   P  NSg/VLXB VP/J   .\n>\n#\n> No        person  shall be       held to answer for   a    capital , or    otherwise infamous crime    ,\n# NSg/Dq/P+ NSg/VB+ VXB   NSg/VLXB VP   P  NSg/VB R/C/P D/P+ N🅪Sg/J+ . NPr/C J/R       VB/J+    N🅪Sg/VB+ .\n> unless on  a   presentment or    indictment of a   grand jury      , except in        cases   arising\n# C      J/P D/P NSg         NPr/C NSg        P  D/P NSg/J NSg/VB/J+ . VB/C/P NPr/J/R/P NPl/V3+ Nᴹ/Vg/J\n> in        the land      or    naval forces  , or    in        the militia , when    in        actual service in        time\n# NPr/J/R/P D   NPr🅪Sg/VB NPr/C J     NPl/V3+ . NPr/C NPr/J/R/P D   NSg     . NSg/I/C NPr/J/R/P NSg/J  NSg/VB+ NPr/J/R/P N🅪Sg/VB/J\n> of war     or    public  danger      ; nor   shall any    person  be       subject  for   the same offense\n# P  N🅪Sg/VB NPr/C Nᴹ/VB/J N🅪Sg/VB/JC+ . NSg/C VXB   I/R/Dq NSg/VB+ NSg/VLXB NSg/VB/J R/C/P D   I/J  N🅪Sg+\n> to be       twice put     in        jeopardy of life    or    limb    ; nor   shall be       compelled in        any\n# P  NSg/VLXB R     NSg/VBP NPr/J/R/P NSg/VB   P  N🅪Sg/VB NPr/C NSg/VB+ . NSg/C VXB   NSg/VLXB VP/J      NPr/J/R/P I/R/Dq\n> criminal case       to be       a   witness against himself , nor   be       deprived of life     ,\n# NSg/J    NPr🅪Sg/VB+ P  NSg/VLXB D/P NSg/VB+ C/P     ISg+    . NSg/C NSg/VLXB VP/J     P  N🅪Sg/VB+ .\n> liberty , or    property , without due   process of law      ; nor   shall private  property be\n# NSg+    . NPr/C NSg/VB+  . C/P     NSg/J NSg/VB  P  N🅪Sg/VB+ . NSg/C VXB   NSg/VB/J NSg/VB+  NSg/VLXB\n> taken for   public  use      , without just compensation .\n# VPp/J R/C/P Nᴹ/VB/J N🅪Sg/VB+ . C/P     J/R  N🅪Sg+        .\n>\n#\n> In        all          criminal prosecutions , the accused shall enjoy the right    to a   speedy and\n# NPr/J/R/P NSg/I/J/C/Dq NSg/J    NPl          . D+  VP/J+   VXB   VB    D   NPr/VB/J P  D/P VB/J   VB/C\n> public  trial     , by    an  impartial jury     of the state    and  district  wherein the crime\n# Nᴹ/VB/J NSg/VB/J+ . NSg/P D/P J         NSg/VB/J P  D   N🅪Sg/VB+ VB/C NSg/VB/J+ C       D   N🅪Sg/VB+\n> shall have    been     committed , which district  shall have    been     previously\n# VXB   NSg/VXB NSg/VLPp VP/J      . I/C+  NSg/VB/J+ VXB   NSg/VXB NSg/VLPp R\n> ascertained by    law      , and  to be       informed of the nature   and  cause     of the\n# VP/J        NSg/P N🅪Sg/VB+ . VB/C P  NSg/VLXB VP/J     P  D   N🅪Sg/VB+ VB/C N🅪Sg/VB/C P  D\n> accusation ; to be       confronted with the witnesses against him  ; to have    compulsory\n# N🅪Sg       . P  NSg/VLXB VP/J       P    D   NPl/V3+   C/P     ISg+ . P  NSg/VXB NSg/J\n> process for   obtaining witnesses in        his     favor       , and  to have    the assistance of\n# NSg/VB+ R/C/P Nᴹ/Vg/J   NPl/V3+   NPr/J/R/P ISg/D$+ N🅪Sg/VB/Am+ . VB/C P  NSg/VXB D   Nᴹ         P\n> counsel for   his     defense     .\n# NSg/VB+ R/C/P ISg/D$+ N🅪Sg/VB/Am+ .\n>\n#\n> In        suits  at    common    law      , where   the value    in        controversy shall exceed twenty\n# NPr/J/R/P NPl/V3 NSg/P NSg/VB/J+ N🅪Sg/VB+ . NSg/R/C D   N🅪Sg/VB+ NPr/J/R/P N🅪Sg+       VXB   VB     NSg+\n> dollars , the right    of trial     by    jury      shall be       preserved , and  no        fact tried by    a\n# NPl+    . D   NPr/VB/J P  NSg/VB/J+ NSg/P NSg/VB/J+ VXB   NSg/VLXB VP/J      . VB/C NSg/Dq/P+ NSg+ VP/J  NSg/P D/P+\n> jury      , shall be       otherwise reexamined in        any    court     of the United States    , than\n# NSg/VB/J+ . VXB   NSg/VLXB J/R       VP/J       NPr/J/R/P I/R/Dq N🅪Sg/VB/J P  D   VP/J   NPrPl/V3+ . C/P\n> according to the rules  of the common   law      .\n# Nᴹ/Vg/J   P  D   NPl/V3 P  D   NSg/VB/J N🅪Sg/VB+ .\n>\n#\n> Excessive bail    shall not     be       required , nor   excessive fines  imposed , nor   cruel\n# J+        NSg/VB+ VXB   NSg/R/C NSg/VLXB VP/J     . NSg/C J         NPl/V3 VP/J    . NSg/C NSg/VB/J\n> and  unusual punishments inflicted .\n# VB/C NSg/J   NPl+        VP/J      .\n>\n#\n>              Article . IV        .\n# HeadingStart NSg/VB+ . NSg/J/#r+ .\n>\n#\n>              Section . 1 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> Full     Faith  and  Credit  shall be       given       in        each State    to the\n# NSg/VB/J NPr🅪Sg VB/C NSg/VB+ VXB   NSg/VLXB NSg/VPp/J/P NPr/J/R/P Dq   N🅪Sg/VB+ P  D\n> public  Acts     , Records , and  judicial Proceedings of every other     State    . And  the\n# Nᴹ/VB/J NPrPl/V3 . NPl/V3+ . VB/C NSg/J    NPl         P  Dq+   NSg/VB/J+ N🅪Sg/VB+ . VB/C D+\n> Congress may     by    general  Laws    prescribe the Manner in        which such  Acts      , Records\n# NPr/VB+  NPr/VXB NSg/P NSg/VB/J NPl/V3+ VB        D+  NSg+   NPr/J/R/P I/C+  NSg/I NPrPl/V3+ . NPl/V3\n> and  Proceedings shall be       proved , and  the Effect  thereof .\n# VB/C NPl+        VXB   NSg/VLXB VP/J   . VB/C D+  NSg/VB+ R       .\n>\n#\n>              Section . 2 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> All           persons born     or    naturalized in        the United States    , and\n# NSg/I/J/C/Dq+ NPl/V3+ NPr/VB/J NPr/C VP/J        NPr/J/R/P D   VP/J   NPrPl/V3+ . VB/C\n> subject   to the jurisdiction thereof , are citizens of the United States    and  of\n# NSg/VB/J+ P  D   N🅪Sg+        R       . VLB NPl      P  D   VP/J   NPrPl/V3+ VB/C P\n> the State    wherein they reside   . No        State    shall make   or    enforce any     law      which\n# D   N🅪Sg/VB+ C       IPl+ NSg/VB/J . NSg/Dq/P+ N🅪Sg/VB+ VXB   NSg/VB NPr/C VB      I/R/Dq+ N🅪Sg/VB+ I/C+\n> shall abridge the privileges or    immunities of citizens of the United States    ;\n# VXB   VB      D   NPl/V3+    NPr/C NPl        P  NPl      P  D   VP/J   NPrPl/V3+ .\n> nor   shall any    State    deprive any    person of life     , liberty , or    property , without\n# NSg/C VXB   I/R/Dq N🅪Sg/VB+ VB      I/R/Dq NSg/VB P  N🅪Sg/VB+ . NSg+    . NPr/C NSg/VB+  . C/P\n> due   process of law      ; nor   deny to any    person  within  its     jurisdiction the equal\n# NSg/J NSg/VB  P  N🅪Sg/VB+ . NSg/C VB   P  I/R/Dq NSg/VB+ NSg/J/P ISg/D$+ N🅪Sg         D   NSg/VB/J\n> protection of the laws    .\n# N🅪Sg       P  D   NPl/V3+ .\n>\n#\n> The right    of citizens of the United States    , who    are eighteen years of age      or\n# D   NPr/VB/J P  NPl      P  D+  VP/J   NPrPl/V3+ . NPr/I+ VLB NSg      NPl   P  N🅪Sg/VB+ NPr/C\n> older , to vote   shall not     be       denied or    abridged by    the United States    or    by    any\n# JC    . P  NSg/VB VXB   NSg/R/C NSg/VLXB VP/J   NPr/C VP/J     NSg/P D   VP/J   NPrPl/V3+ NPr/C NSg/P I/R/Dq\n> State    on  account of age      , sex     , race     , color         , or    previous condition of servitude .\n# N🅪Sg/VB+ J/P NSg/VB  P  N🅪Sg/VB+ . NSg/VB+ . N🅪Sg/VB+ . N🅪Sg/VB/J/Am+ . NPr/C NSg/J    N🅪Sg/VB+  P  NSg       .\n>\n#\n> A    Person  charged in        any     State    with Treason , Felony , or    other    Crime    , who    shall\n# D/P+ NSg/VB+ VP/J    NPr/J/R/P I/R/Dq+ N🅪Sg/VB+ P    NSg     . NSg    . NPr/C NSg/VB/J N🅪Sg/VB+ . NPr/I+ VXB\n> flee from Justice , and  be       found  in        another State    , shall on  Demand  of the\n# VB   P    NPr🅪Sg+ . VB/C NSg/VLXB NSg/VP NPr/J/R/P I/D     N🅪Sg/VB+ . VXB   J/P N🅪Sg/VB P  D\n> executive Authority of the State    from which he       fled , be       delivered up         , to be\n# NSg/J     N🅪Sg      P  D   N🅪Sg/VB+ P    I/C+  NPr/ISg+ J    . NSg/VLXB VP/J      NSg/VB/J/P . P  NSg/VLXB\n> removed to the State    having  Jurisdiction of the Crime    .\n# VP/J    P  D   N🅪Sg/VB+ Nᴹ/Vg/J N🅪Sg         P  D   N🅪Sg/VB+ .\n>\n#\n> Neither slavery nor   involuntary servitude , except as    a   punishment for   crime\n# I/C     NSg/J+  NSg/C J           NSg       . VB/C/P R/C/P D/P N🅪Sg       R/C/P N🅪Sg/VB+\n> whereof the party     shall have    been     duly convicted , shall exist within  the United\n# C       D   NSg/VB/J+ VXB   NSg/VXB NSg/VLPp R    VP/J      . VXB   VB    NSg/J/P D   VP/J\n> States    , or    any    place    subject   to their jurisdiction . No        Person  held to Service\n# NPrPl/V3+ . NPr/C I/R/Dq N🅪Sg/VB+ NSg/VB/J+ P  D$+   N🅪Sg+        . NSg/Dq/P+ NSg/VB+ VP   P  NSg/VB\n> or    Labour          in        one      State    , under   the Laws    thereof , escaping into another , shall ,\n# NPr/C NPr🅪Sg/VB/Comm+ NPr/J/R/P NSg/I/J+ N🅪Sg/VB+ . NSg/J/P D+  NPl/V3+ R       . Nᴹ/Vg/J  P    I/D     . VXB   .\n> in        Consequence of any    Law     or    Regulation therein , be       discharged from such\n# NPr/J/R/P NSg/VB      P  I/R/Dq N🅪Sg/VB NPr/C N🅪Sg/J+    R       . NSg/VLXB VP/J       P    NSg/I\n> Service or    Labour          , but     shall be       delivered up         on  Claim  of the Party     to whom such\n# NSg/VB  NPr/C NPr🅪Sg/VB/Comm+ . NSg/C/P VXB   NSg/VLXB VP/J      NSg/VB/J/P J/P NSg/VB P  D   NSg/VB/J+ P  I+   NSg/I\n> Service or    Labour          may     be       due   .\n# NSg/VB  NPr/C NPr🅪Sg/VB/Comm+ NPr/VXB NSg/VLXB NSg/J .\n>\n#\n>              Section . 3 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> New    States    may     be       admitted by    the Congress into this    Union     ; but\n# NSg/J+ NPrPl/V3+ NPr/VXB NSg/VLXB VP/J     NSg/P D+  NPr/VB+  P    I/Ddem+ NPr/VB/J+ . NSg/C/P\n> no        new    State    shall be       formed or    erected within  the Jurisdiction of any     other\n# NSg/Dq/P+ NSg/J+ N🅪Sg/VB+ VXB   NSg/VLXB VP/J   NPr/C VP/J    NSg/J/P D   N🅪Sg         P  I/R/Dq+ NSg/VB/J+\n> State    ; nor   any     State    be       formed by    the Junction of two or    more         States    , or    Parts\n# N🅪Sg/VB+ . NSg/C I/R/Dq+ N🅪Sg/VB+ NSg/VLXB VP/J   NSg/P D   NSg/VB   P  NSg NPr/C NPr/I/J/R/Dq NPrPl/V3+ . NPr/C NPl/V3\n> of States    , without the Consent of the Legislatures of the States    concerned as\n# P  NPrPl/V3+ . C/P     D   N🅪Sg/VP P  D   NPl          P  D   NPrPl/V3+ VP/J      R/C/P\n> well       as    of the Congress .\n# NSg/VB/J/R R/C/P P  D   NPr/VB+  .\n>\n#\n> The Congress shall have    Power      to dispose of and  make   all          needful Rules  and\n# D+  NPr/VB+  VXB   NSg/VXB N🅪Sg/VB/J+ P  NSg/VB  P  VB/C NSg/VB NSg/I/J/C/Dq NSg/J   NPl/V3 VB/C\n> Regulations respecting the Territory or    other    Property belonging to the United\n# NPl+        Nᴹ/Vg/J    D   N🅪Sg+     NPr/C NSg/VB/J NSg/VB+  N🅪Sg/Vg/J P  D   VP/J\n> States    ; and  nothing  in        this   Constitution shall be       so          construed as    to Prejudice\n# NPrPl/V3+ . VB/C NSg/I/J+ NPr/J/R/P I/Ddem NPr+         VXB   NSg/VLXB NSg/I/J/R/C VP/J      R/C/P P  NSg/VB/J+\n> any    Claims of the United States    , or    of any    particular State    .\n# I/R/Dq NPl/V3 P  D   VP/J   NPrPl/V3+ . NPr/C P  I/R/Dq NSg/J      N🅪Sg/VB+ .\n>\n#\n>              Section . 4 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The United States    shall guarantee to every State    in        this    Union\n# D+  VP/J   NPrPl/V3+ VXB   NSg/VB    P  Dq    N🅪Sg/VB+ NPr/J/R/P I/Ddem+ NPr/VB/J+\n> a   Republican Form    of Government , and  shall protect each of them     against\n# D/P NSg/J      N🅪Sg/VB P  N🅪Sg+      . VB/C VXB   VB      Dq   P  NSg/IPl+ C/P\n> Invasion ; and  on  Application of the Legislature , or    of the Executive ( when    the\n# NSg+     . VB/C J/P NSg         P  D+  NSg+        . NPr/C P  D   NSg/J     . NSg/I/C D+\n> Legislature cannot  be       convened ) against domestic Violence .\n# NSg+        NSg/VXB NSg/VLXB VP/J     . C/P     NSg/J    Nᴹ/VB+   .\n>\n#\n>              Section . 5 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The validity of the public  debt of the United States    ,\n# D   NSg      P  D   Nᴹ/VB/J N🅪Sg P  D+  VP/J   NPrPl/V3+ .\n> authorized by    law      , including debts incurred for   payment of pensions and\n# VP/J       NSg/P N🅪Sg/VB+ . Nᴹ/Vg/J   NPl+  VP       R/C/P N🅪Sg    P  NPl/V3   VB/C\n> bounties for   services in        suppressing insurrection or    rebellion , shall not     be\n# NPl/V3   R/C/P NPl/V3+  NPr/J/R/P Nᴹ/Vg/J     N🅪Sg         NPr/C N🅪Sg+     . VXB   NSg/R/C NSg/VLXB\n> questioned . But     neither the United States    nor   any     State    shall assume or    pay      any\n# VP/J       . NSg/C/P I/C     D   VP/J   NPrPl/V3+ NSg/C I/R/Dq+ N🅪Sg/VB+ VXB   VB     NPr/C NSg/VB/J I/R/Dq\n> debt or    obligation incurred in        aid     of insurrection or    rebellion against the\n# N🅪Sg NPr/C N🅪Sg+      VP       NPr/J/R/P N🅪Sg/VB P  N🅪Sg         NPr/C N🅪Sg+     C/P     D\n> United States    , or    any    claim   for   the loss     or    emancipation of any    slave   ; but     all\n# VP/J   NPrPl/V3+ . NPr/C I/R/Dq NSg/VB+ R/C/P D   N🅪Sg/VB+ NPr/C NSg          P  I/R/Dq NSg/VB+ . NSg/C/P NSg/I/J/C/Dq\n> such  debts , obligations and  claims  shall be       held illegal and  void      .\n# NSg/I NPl+  . NPl         VB/C NPl/V3+ VXB   NSg/VLXB VP   NSg/J   VB/C NSg/VB/J+ .\n>\n#\n>              Article . V.\n# HeadingStart NSg/VB+ . ?\n>\n#\n> The Congress , whenever two thirds of both   Houses  shall deem   it       necessary , shall\n# D+  NPr/VB+  . C        NSg NPl/V3 P  I/C/Dq NPl/V3+ VXB   NSg/VB NPr/ISg+ NSg/J     . VXB\n> propose Amendments to this    Constitution , or    , on  the Application of the\n# NSg/VB  NPl+       P  I/Ddem+ NPr+         . NPr/C . J/P D   NSg         P  D\n> Legislatures of two thirds of the several States    , shall call   a   Convention for\n# NPl          P  NSg NPl/V3 P  D   J/Dq    NPrPl/V3+ . VXB   NSg/VB D/P N🅪Sg+      R/C/P\n> proposing Amendments , which , in        either Case       , shall be       valid to all          Intents and\n# Nᴹ/Vg/J   NPl+       . I/C+  . NPr/J/R/P I/C    NPr🅪Sg/VB+ . VXB   NSg/VLXB J     P  NSg/I/J/C/Dq NPl     VB/C\n> Purposes , as    Part     of this   Constitution , when    ratified by    the Legislatures of\n# NPl/V3+  . R/C/P NSg/VB/J P  I/Ddem NPr+         . NSg/I/C VP/J     NSg/P D   NPl          P\n> three fourths of the several States    , or    by    Conventions in        three fourths\n# NSg   NSg     P  D   J/Dq    NPrPl/V3+ . NPr/C NSg/P NPl+        NPr/J/R/P NSg   NSg\n> thereof , as    the one      or    the other    Mode of Ratification may     be       proposed by    the\n# R       . R/C/P D   NSg/I/J+ NPr/C D   NSg/VB/J NSg  P  NSg+         NPr/VXB NSg/VLXB VP/J     NSg/P D\n> Congress ; Provided that         no       Amendment which may     be       made prior to the Year One\n# NPr/VB+  . VP/J/C   NSg/I/C/Ddem NSg/Dq/P NSg+      I/C+  NPr/VXB NSg/VLXB VP   NSg/J P  D   NSg+ NSg/I/J+\n> thousand eight hundred and  eight shall in        any    Manner affect the first and\n# NSg      NSg/J NSg     VB/C NSg/J VXB+  NPr/J/R/P I/R/Dq NSg+   NSg/VB D   NSg/J VB/C\n> fourth   Clauses in        the Ninth    Section of the first Article ; and  that         no       State    ,\n# NPr/VB/J NPl/V3+ NPr/J/R/P D   NSg/VB/J NSg/VB  P  D   NSg/J NSg/VB+ . VB/C NSg/I/C/Ddem NSg/Dq/P N🅪Sg/VB+ .\n> without its     Consent , shall be       deprived of its     equal    Suffrage in        the Senate .\n# C/P     ISg/D$+ N🅪Sg/VP . VXB   NSg/VLXB VP/J     P  ISg/D$+ NSg/VB/J NSg+     NPr/J/R/P D   NPr+   .\n>\n#\n>              Article . VI     .\n# HeadingStart NSg/VB+ . NPr/#r .\n>\n#\n> All           Debts contracted and  Engagements entered into , before the Adoption of this\n# NSg/I/J/C/Dq+ NPl+  VP/J       VB/C NPl         VP/J    P    . C/P    D   N🅪Sg     P  I/Ddem\n> Constitution , shall be       as    valid against the United States    under   this\n# NPr+         . VXB   NSg/VLXB R/C/P J     C/P     D   VP/J   NPrPl/V3+ NSg/J/P I/Ddem\n> Constitution , as    under   the Confederation .\n# NPr+         . R/C/P NSg/J/P D   NSg/J         .\n>\n#\n> This    Constitution , and  the Laws   of the United States    which shall be       made in\n# I/Ddem+ NPr+         . VB/C D   NPl/V3 P  D+  VP/J   NPrPl/V3+ I/C+  VXB   NSg/VLXB VP   NPr/J/R/P\n> Pursuance thereof ; and  all          Treaties made , or    which shall be       made , under   the\n# NSg       R       . VB/C NSg/I/J/C/Dq NPl/V3+  VP   . NPr/C I/C+  VXB   NSg/VLXB VP   . NSg/J/P D\n> Authority of the United States    , shall be       the supreme  Law     of the Land       ; and  the\n# N🅪Sg      P  D   VP/J   NPrPl/V3+ . VXB   NSg/VLXB D   NSg/VB/J N🅪Sg/VB P  D   NPr🅪Sg/VB+ . VB/C D\n> Judges    in        every State    shall be       bound    thereby , any    Thing in        the Constitution or\n# NPrPl/V3+ NPr/J/R/P Dq    N🅪Sg/VB+ VXB   NSg/VLXB NSg/VP/J R       . I/R/Dq NSg+  NPr/J/R/P D   NPr+         NPr/C\n> Laws   of any    State    to the Contrary  notwithstanding .\n# NPl/V3 P  I/R/Dq N🅪Sg/VB+ P  D   NSg/VB/J+ C/P             .\n>\n#\n> The Senators and  Representatives before mentioned , and  the Members of the\n# D   NPl      VB/C NPl+            C/P    VP/J      . VB/C D   NPl/V3  P  D+\n> several State    Legislatures , and  all          executive and  judicial Officers , both   of\n# J/Dq+   N🅪Sg/VB+ NPl          . VB/C NSg/I/J/C/Dq NSg/J     VB/C NSg/J    NPl/V3+  . I/C/Dq P\n> the United States    and  of the several States    , shall be       bound    by    Oath    or\n# D   VP/J   NPrPl/V3+ VB/C P  D   J/Dq    NPrPl/V3+ . VXB   NSg/VLXB NSg/VP/J NSg/P NSg/VB+ NPr/C\n> Affirmation , to support this   Constitution ; but     no       religious Test    shall ever be\n# NSg         . P  N🅪Sg/VB I/Ddem NPr+         . NSg/C/P NSg/Dq/P NSg/J     NSg/VB+ VXB   J/R  NSg/VLXB\n> required as    a   Qualification to any    Office  or    public  Trust     under   the United\n# VP/J     R/C/P D/P N🅪Sg+         P  I/R/Dq NSg/VB+ NPr/C Nᴹ/VB/J N🅪Sg/VB/J NSg/J/P D   VP/J\n> States    .\n# NPrPl/V3+ .\n>\n#\n> A   well       regulated militia , being        necessary to the security of a   free     state    , the\n# D/P NSg/VB/J/R VP/J      NSg     . N🅪Sg/VLg/J/C NSg/J     P  D   Nᴹ       P  D/P NSg/VB/J N🅪Sg/VB+ . D\n> right    of the people  to keep   and  bear      arms    , shall not     be       infringed .\n# NPr/VB/J P  D   NPl/VB+ P  NSg/VB VB/C NSg/VB/J+ NPl/V3+ . VXB   NSg/R/C NSg/VLXB VP/J      .\n>\n#\n>              Section . 1 .\n# HeadingStart NSg/VB+ . # .\n>\n#\n> The enumeration in        the Constitution , of certain rights  , shall\n# D   N🅪Sg        NPr/J/R/P D   NPr+         . P  I/J     NPl/V3+ . VXB\n> not     be       construed to deny or    disparage others  retained by    the people  .\n# NSg/R/C NSg/VLXB VP/J      P  VB   NPr/C NSg/VB    NPl/V3+ VP/J     NSg/P D   NPl/VB+ .\n>\n#\n> The powers    not     delegated to the United States    by    the Constitution , nor\n# D+  NPrPl/V3+ NSg/R/C VP/J      P  D   VP/J   NPrPl/V3+ NSg/P D   NPr+         . NSg/C\n> prohibited by    it       to the states    , are reserved to the states    respectively , or    to\n# VP/J       NSg/P NPr/ISg+ P  D   NPrPl/V3+ . VLB VP/J     P  D   NPrPl/V3+ R            . NPr/C P\n> the people  .\n# D   NPl/VB+ .\n>\n#\n>              Article . VII    .\n# HeadingStart NSg/VB+ . NSg/#r .\n>\n#\n> The Ratification of the Conventions of nine States    , shall be       sufficient for   the\n# D   NSg          P  D   NPl         P  NSg+ NPrPl/V3+ . VXB   NSg/VLXB J          R/C/P D\n> Establishment of this   Constitution between the States    so          ratifying the Same .\n# NSg           P  I/Ddem NPr          NSg/P   D+  NPrPl/V3+ NSg/I/J/R/C Nᴹ/Vg/J   D   I/J  .\n>\n#\n> The Word    \" the \" , being        interlined between the seventh and  eight Lines  of the\n# D+  NSg/VB+ . D   . . N🅪Sg/VLg/J/C VP/J       NSg/P   D   NSg/J   VB/C NSg/J NPl/V3 P  D\n> first Page    , The Word    \" Thirty \" being        partly written on  an  Erazure in        the\n# NSg/J NPr/VB+ . D   NSg/VB+ . NSg    . N🅪Sg/VLg/J/C R      VPp/J   J/P D/P ?       NPr/J/R/P D\n> fifteenth Line   of the first Page    . The Words   \" is  tried \" being        interlined between\n# NSg/J+    NSg/VB P  D   NSg/J NPr/VB+ . D+  NPl/V3+ . VL3 VP/J  . N🅪Sg/VLg/J/C VP/J       NSg/P\n> the thirty second   and  thirty third    Lines  of the first Page   and  the Word    \" the \"\n# D   NSg    NSg/VB/J VB/C NSg    NSg/VB/J NPl/V3 P  D   NSg/J NPr/VB VB/C D   NSg/VB+ . D   .\n> being        interlined between the forty third    and  forty fourth   Lines  of the second\n# N🅪Sg/VLg/J/C VP/J       NSg/P   D   NSg/J NSg/VB/J VB/C NSg/J NPr/VB/J NPl/V3 P  D   NSg/VB/J\n> Page    .\n# NPr/VB+ .\n>\n#\n> done      in        Convention by    the Unanimous Consent of the States    present  the\n# NSg/VPp/J NPr/J/R/P N🅪Sg+      NSg/P D   J         N🅪Sg/VP P  D+  NPrPl/V3+ NSg/VB/J D\n> Seventeenth Day    of September in        the Year of our Lord      one     thousand seven hundred\n# NSg/J       NPr🅪Sg P  NPr+      NPr/J/R/P D   NSg  P  D$+ NPr/VB/J+ NSg/I/J NSg      NSg   NSg\n> and  Eighty seven and  of the Independence of the United States   of America the\n# VB/C NSg    NSg   VB/C P  D   NPrᴹ         P  D   VP/J   NPrPl/V3 P  NPr+    D\n> Twelfth In        witness whereof We   have    hereunto subscribed our Names   ,\n# NSg/J   NPr/J/R/P NSg/VB  C       IPl+ NSg/VXB R        VP/J       D$+ NPl/V3+ .\n>\n#\n>              Article . VIII .\n# HeadingStart NSg/VB+ . #r   .\n>\n#\n>              Section 1 .\n# HeadingStart NSg/VB+ # .\n>\n#\n> The transportation or    importation into any    State    , Territory , or\n# D+  Nᴹ+            NPr/C N🅪Sg        P    I/R/Dq N🅪Sg/VB+ . N🅪Sg+     . NPr/C\n> possession of the United States    for   delivery  or    use     therein of intoxicating\n# N🅪Sg/VB    P  D   VP/J   NPrPl/V3+ R/C/P NSg/VB/J+ NPr/C N🅪Sg/VB R       P  Nᴹ/Vg/J\n> liquors , in        violation of the laws    thereof , is  hereby prohibited .\n# NPl/V3  . NPr/J/R/P NSg       P  D   NPl/V3+ R       . VL3 R      VP/J       .\n"
  },
  {
    "path": "harper-core/tests/text/tagged/The Great Gatsby.md",
    "content": ">              The Great Gatsby\n# HeadingStart D   NSg/J NPr\n>\n#\n> BY    F. SCOTT FITZGERALD\n# NSg/P ?  NPr+  NPr\n>\n#\n>              CHAPTER I\n# HeadingStart NSg/VB+ ISg/#r+\n>\n#\n> In        my  younger and  more         vulnerable years my  father  gave me       some      advice that          I’ve\n# NPr/J/R/P D$+ NSg/JC  VB/C NPr/I/J/R/Dq J+         NPl+  D$+ NPr/VB+ VPt  NPr/ISg+ I/J/R/Dq+ Nᴹ+    NSg/I/C/Ddem+ K\n> been     turning over    in        my  mind    ever since .\n# NSg/VLPp Nᴹ/Vg/J NSg/J/P NPr/J/R/P D$+ NSg/VB+ J/R  C/P   .\n>\n#\n> “ Whenever you    feel     like         criticising   any     one      , ” he       told me       , “ just remember that\n# . C        ISgPl+ NSg/I/VB NSg/VB/J/C/P Nᴹ/Vg/J/Au/Br I/R/Dq+ NSg/I/J+ . . NPr/ISg+ VP   NPr/ISg+ . . J/R  NSg/VB   NSg/I/C/Ddem\n> all          the people in        this    world   haven’t had the advantages that          you’ve had . ”\n# NSg/I/J/C/Dq D   NPl/VB NPr/J/R/P I/Ddem+ NSg/VB+ VXB     VP  D+  NPl/V3+    NSg/I/C/Ddem+ K      VP  . .\n>\n#\n> He       didn’t say    any    more         , but     we’ve always been     unusually communicative in        a\n# NPr/ISg+ VXPt   NSg/VB I/R/Dq NPr/I/J/R/Dq . NSg/C/P K     R      NSg/VLPp R         J             NPr/J/R/P D/P\n> reserved way    , and  I       understood that         he       meant a   great deal      more         than that          . In\n# VP/J     NSg/J+ . VB/C ISg/#r+ VP/J       NSg/I/C/Ddem NPr/ISg+ VP    D/P NSg/J NSg/VB/J+ NPr/I/J/R/Dq C/P  NSg/I/C/Ddem+ . NPr/J/R/P\n> consequence , I’m inclined to reserve all          judgments , a   habit   that          has opened up\n# NSg/VB+     . K   VP/J     P  NSg/VB  NSg/I/J/C/Dq NPl+      . D/P NSg/VB+ NSg/I/C/Ddem+ V3  VP/J   NSg/VB/J/P\n> many       curious natures to me       and  also made me       the victim  of not     a   few      veteran\n# NSg/I/J/Dq J       NPl/V3  P  NPr/ISg+ VB/C R/C  VP   NPr/ISg+ D   NSg/VB+ P  NSg/R/C D/P NSg/I/Dq NSg/J\n> bores  . The abnormal mind    is  quick    to detect and  attach itself to this    quality\n# NPl/V3 . D+  NSg/J+   NSg/VB+ VL3 NSg/VB/J P  VB     VB/C VB     ISg+   P  I/Ddem+ N🅪Sg/J+\n> when    it       appears in        a    normal person  , and  so          it       came      about that         in        college I       was\n# NSg/I/C NPr/ISg+ V3      NPr/J/R/P D/P+ NSg/J+ NSg/VB+ . VB/C NSg/I/J/R/C NPr/ISg+ NSg/VPt/P J/P   NSg/I/C/Ddem NPr/J/R/P NSg+    ISg/#r+ VLPt\n> unjustly accused of being        a   politician , because I       was  privy to the secret   griefs\n# R        VP/J    P  N🅪Sg/VLg/J/C D/P NSg+       . C/P     ISg/#r+ VLPt NSg/J P  D   NSg/VB/J NPl/V3\n> of wild     , unknown  men  . Most         of the confidences were     unsought — frequently I       have\n# P  NSg/VB/J . NSg/VB/J NPl+ . NSg/I/J/R/Dq P  D   NPl         NSg/VLPt VP       . R          ISg/#r+ NSg/VXB\n> feigned sleep    , preoccupation , or    a   hostile levity when    I       realized       by    some\n# VP/J    N🅪Sg/VB+ . NSg           . NPr/C D/P NSg/J   Nᴹ     NSg/I/C ISg/#r+ VP/J/Comm/NoAm NSg/P I/J/R/Dq\n> unmistakable sign    that         an  intimate revelation was  quivering on  the horizon ; for\n# J            NSg/VB+ NSg/I/C/Ddem D/P NSg/VB/J NPr        VLPt Nᴹ/Vg/J   J/P D   NSg+    . R/C/P\n> the intimate revelations of young    men  , or    at    least    the terms   in        which they\n# D   NSg/VB/J NPrPl       P  NPr/VB/J NPl+ . NPr/C NSg/P NSg/J/Dq D   NPl/V3+ NPr/J/R/P I/C+  IPl+\n> express  them     , are usually plagiaristic and  marred by    obvious suppressions .\n# NSg/VB/J NSg/IPl+ . VLB R       J            VB/C VP/J   NSg/P J       NPl          .\n> Reserving judgments is  a   matter  of infinite hope       . I       am        still      a   little     afraid of\n# Nᴹ/Vg/J   NPl+      VL3 D/P N🅪Sg/VB P  NSg/J    NPr🅪Sg/VB+ . ISg/#r+ NPr/VLB/J NSg/VB/J/R D/P NPr/I/J/Dq J      P\n> missing something if    I       forget that          , as    my  father  snobbishly suggested , and  I\n# Nᴹ/Vg/J NSg/I/J+  NSg/C ISg/#r+ VB     NSg/I/C/Ddem+ . R/C/P D$+ NPr/VB+ R          VP/J      . VB/C ISg/#r+\n> snobbishly repeat , a   sense   of the fundamental decencies is  parcelled out\n# R          NSg/VB . D/P N🅪Sg/VB P  D   NSg/J       NPl       VL3 VP/Comm   NSg/VB/J/R/P\n> unequally at    birth     .\n# R         NSg/P NSg/VB/J+ .\n>\n#\n> And  , after boasting this   way   of my  tolerance , I       come       to the admission that          it\n# VB/C . P     Nᴹ/Vg/J  I/Ddem NSg/J P  D$+ N🅪Sg/VB+  . ISg/#r+ NSg/VBPp/P P  D+  NSg+      NSg/I/C/Ddem+ NPr/ISg+\n> has a    limit     . Conduct may     be       founded on  the hard     rock      or    the wet       marshes , but\n# V3  D/P+ NSg/VB/J+ . NSg/VB  NPr/VXB NSg/VLXB VP/J    J/P D   N🅪Sg/J/R NPr🅪Sg/VB NPr/C D+  NSg/VP/J+ NPl+    . NSg/C/P\n> after a    certain point   I       don’t care     what   it’s founded on  . When    I       came      back     from\n# P     D/P+ I/J+    NSg/VB+ ISg/#r+ VXB   N🅪Sg/VB+ NSg/I+ K    VP/J    J/P . NSg/I/C ISg/#r+ NSg/VPt/P NSg/VB/J P\n> the East   last      autumn     I       felt      that         I       wanted the world   to be       in        uniform  and  at    a\n# D+  NPr/J+ NSg/VB/J+ NPr🅪Sg/VB+ ISg/#r+ N🅪Sg/VP/J NSg/I/C/Ddem ISg/#r+ VP/J   D+  NSg/VB+ P  NSg/VLXB NPr/J/R/P NSg/VB/J VB/C NSg/P D/P\n> sort   of moral     attention forever ; I       wanted no       more         riotous excursions with\n# NSg/VB P  NSg/VB/J+ NSg+      NSg/J   . ISg/#r+ VP/J   NSg/Dq/P NPr/I/J/R/Dq J       NPl/V3     P\n> privileged glimpses into the human    heart    . Only  Gatsby , the man       who    gives  his\n# VP/J       NPl/V3+  P    D   NSg/VB/J N🅪Sg/VB+ . J/R/C NPr    . D   NPr/VB/J+ NPr/I+ NPl/V3 ISg/D$+\n> name    to this   book    , was  exempt   from my  reaction   — Gatsby , who    represented\n# NSg/VB+ P  I/Ddem NSg/VB+ . VLPt NSg/VB/J P    D$+ N🅪Sg/VB/J+ . NPr    . NPr/I+ VP/J\n> everything for   which I       have    an  unaffected scorn   . If    personality is  an  unbroken\n# NSg/I/VB+  R/C/P I/C+  ISg/#r+ NSg/VXB D/P J          NSg/VB+ . NSg/C N🅪Sg+       VL3 D/P J\n> series of successful gestures , then      there was  something gorgeous about him  , some\n# NSgPl  P  J+         NPl/V3+  . NSg/J/R/C R+    VLPt NSg/I/J+  J        J/P   ISg+ . I/J/R/Dq\n> heightened sensitivity to the promises of life     , as    if    he       were     related to one     of\n# VP/J       N🅪Sg+       P  D   NPl/V3   P  N🅪Sg/VB+ . R/C/P NSg/C NPr/ISg+ NSg/VLPt J       P  NSg/I/J P\n> those  intricate machines that          register earthquakes ten  thousand miles  away . This\n# I/Ddem VB/J      NPl/V3+  NSg/I/C/Ddem+ NSg/VB   NPl/V3+     NSg+ NSg      NPrPl+ VB/J . I/Ddem+\n> responsiveness had nothing  to do  with that         flabby impressionability which is\n# Nᴹ+            VP  NSg/I/J+ P  VXB P    NSg/I/C/Ddem J      NSg               I/C+  VL3\n> dignified under   the name   of the “ creative temperament ” — it       was  an  extraordinary\n# VP/J      NSg/J/P D   NSg/VB P  D   . NSg/J    NSg+        . . NPr/ISg+ VLPt D/P NSg/J\n> gift    for   hope      , a   romantic readiness such  as    I       have    never found  in        any    other\n# NSg/VB+ R/C/P NPr🅪Sg/VB . D/P NSg/J    NSg       NSg/I R/C/P ISg/#r+ NSg/VXB R     NSg/VP NPr/J/R/P I/R/Dq NSg/VB/J\n> person  and  which it       is  not     likely I       shall ever find   again . No       — Gatsby turned out\n# NSg/VB+ VB/C I/C+  NPr/ISg+ VL3 NSg/R/C NSg/J  ISg/#r+ VXB   J/R  NSg/VB P     . NSg/Dq/P . NPr    VP/J   NSg/VB/J/R/P\n> all          right    at    the end     ; it       is  what   preyed on  Gatsby , what   foul     dust   floated in        the\n# NSg/I/J/C/Dq NPr/VB/J NSg/P D   NSg/VB+ . NPr/ISg+ VL3 NSg/I+ VP/J   J/P NPr    . NSg/I+ NSg/VB/J Nᴹ/VB+ VP/J    NPr/J/R/P D\n> wake   of his     dreams  that          temporarily closed out          my  interest in        the abortive\n# NPr/VB P  ISg/D$+ NPl/V3+ NSg/I/C/Ddem+ R           VP/J   NSg/VB/J/R/P D$+ N🅪Sg/VB+ NPr/J/R/P D   NSg/J\n> sorrows and  short      - winded elations of men  .\n# NPl/V3+ VB/C NPr/VB/J/P . VP/J   NPl      P  NPl+ .\n>\n#\n> My  family  have    been     prominent , well       - to - do  people in        this   Middle   Western city for\n# D$+ N🅪Sg/J+ NSg/VXB NSg/VLPp NSg/J     . NSg/VB/J/R . P  . VXB NPl/VB NPr/J/R/P I/Ddem NSg/VB/J NPr/J   NSg  R/C/P\n> three generations . The Carraways are something of a   clan , and  we   have    a\n# NSg+  NPl+        . D   ?         VLB NSg/I/J   P  D/P NSg+ . VB/C IPl+ NSg/VXB D/P\n> tradition that          we’re descended from the Dukes  of Buccleuch , but     the actual\n# N🅪Sg/VB+  NSg/I/C/Ddem+ K     VP/J      P    D   NPl/V3 P  ?         . NSg/C/P D   NSg/J\n> founder of my  line    was  my  grandfather’s brother   , who    came      here in        fifty - one     ,\n# NSg/VB  P  D$+ NSg/VB+ VLPt D$+ NSg$          NSg/VB/J+ . NPr/I+ NSg/VPt/P J/R  NPr/J/R/P NSg   . NSg/I/J .\n> sent   a   substitute to the Civil War      , and  started the wholesale hardware business\n# NSg/VP D/P NSg/VB+    P  D   J     N🅪Sg/VB+ . VB/C VP/J    D   NSg/VB/J  Nᴹ+      N🅪Sg/J+\n> that          my  father  carries on  to - day     .\n# NSg/I/C/Ddem+ D$+ NPr/VB+ NPl/V3  J/P P  . NPr🅪Sg+ .\n>\n#\n> I       never saw     this   great - uncle   , but     I’m supposed to look   like         him  — with special\n# ISg/#r+ R     NSg/VPt I/Ddem NSg/J . NSg/VB+ . NSg/C/P K   VP/J     P  NSg/VB NSg/VB/J/C/P ISg+ . P    NSg/VB/J\n> reference to the rather     hard     - boiled painting   that          hangs  in        father’s office  . I\n# NSg/VB+   P  D   NPr/VB/J/R N🅪Sg/J/R . VP/J   N🅪Sg/Vg/J+ NSg/I/C/Ddem+ NPl/V3 NPr/J/R/P NPr$     NSg/VB+ . ISg/#r+\n> graduated from New    Haven   in        1915 , just a   quarter  of a   century after my  father  ,\n# VP/J      P    NSg/J+ NSg/VB+ NPr/J/R/P #    . J/R  D/P NSg/VB/J P  D/P NSg+    P     D$+ NPr/VB+ .\n> and  a   little     later I       participated in        that          delayed Teutonic migration known as\n# VB/C D/P NPr/I/J/Dq JC    ISg/#r+ VP/J         NPr/J/R/P NSg/I/C/Ddem+ VP/J    NSg/J    NSg+      VPp/J R/C/P\n> the Great War      . I       enjoyed the counter   - raid    so          thoroughly that         I       came      back\n# D   NSg/J N🅪Sg/VB+ . ISg/#r+ VP/J    D   NSg/VB/J+ . NSg/VB+ NSg/I/J/R/C R          NSg/I/C/Ddem ISg/#r+ NSg/VPt/P NSg/VB/J\n> restless . Instead of being        the warm     centre      of the world   , the Middle    West      now\n# J        . R       P  N🅪Sg/VLg/J/C D   NSg/VB/J NSg/VB/Comm P  D+  NSg/VB+ . D+  NSg/VB/J+ NPr/VB/J+ NSg/J/R/C\n> seemed like         the ragged edge   of the universe — so          I       decided  to go       East   and  learn\n# VP/J   NSg/VB/J/C/P D   VP/J   NSg/VB P  D   NPr+     . NSg/I/J/R/C ISg/#r+ NSg/VP/J P  NSg/VB/J NPr/J+ VB/C NSg/VB\n> the bond      business . Everybody I       knew was  in        the bond      business , so          I       supposed it\n# D   NPr/VB/J+ N🅪Sg/J+  . NSg/I+    ISg/#r+ VPt  VLPt NPr/J/R/P D+  NPr/VB/J+ N🅪Sg/J+  . NSg/I/J/R/C ISg/#r+ VP/J     NPr/ISg+\n> could   support  one     more         single    man       . All          my  aunts and  uncles talked it       over    as    if\n# NSg/VXB N🅪Sg/VB+ NSg/I/J NPr/I/J/R/Dq NSg/VB/J+ NPr/VB/J+ . NSg/I/J/C/Dq D$+ NPl   VB/C NPl/V3 VP/J   NPr/ISg+ NSg/J/P R/C/P NSg/C\n> they were     choosing a   prep   school   for   me       , and  finally said , “ Why    — ye       - es    , ” with\n# IPl+ NSg/VLPt Nᴹ/Vg/J  D/P Nᴹ/VB+ N🅪Sg/VB+ R/C/P NPr/ISg+ . VB/C R       VP/J . . NSg/VB . NSg/I/D+ . NPrPl . . P\n> very grave     , hesitant faces   . Father  agreed to finance me       for   a    year , and  after\n# J/R  NSg/VB/J+ . J        NPl/V3+ . NPr/VB+ VP/J   P  N🅪Sg/VB NPr/ISg+ R/C/P D/P+ NSg+ . VB/C P\n> various delays  I       came      East   , permanently , I       thought , in        the spring  of twenty - two .\n# J+      NPl/V3+ ISg/#r+ NSg/VPt/P NPr/J+ . R           . ISg/#r+ N🅪Sg/VP . NPr/J/R/P D   N🅪Sg/VB P  NSg    . NSg .\n>\n#\n> The practical thing was  to find   rooms   in        the city , but     it       was  a   warm     season , and\n# D+  NSg/J+    NSg+  VLPt P  NSg/VB NPl/V3+ NPr/J/R/P D+  NSg+ . NSg/C/P NPr/ISg+ VLPt D/P NSg/VB/J NSg/VB . VB/C\n> I       had just left     a   country of wide  lawns  and  friendly trees   , so          when    a   young    man\n# ISg/#r+ VP  J/R  NPr/VP/J D/P NSg/J   P  NSg/J NPl/V3 VB/C NSg/J/R  NPl/V3+ . NSg/I/J/R/C NSg/I/C D/P NPr/VB/J NPr/VB/J+\n> at    the office  suggested that         we   take   a   house   together in        a   commuting town , it\n# NSg/P D   NSg/VB+ VP/J      NSg/I/C/Ddem IPl+ NSg/VB D/P NPr/VB+ J        NPr/J/R/P D/P Nᴹ/Vg/J   NSg+ . NPr/ISg+\n> sounded like         a   great idea . He       found  the house   , a   weatherbeaten cardboard\n# VP/J    NSg/VB/J/C/P D/P NSg/J NSg+ . NPr/ISg+ NSg/VP D+  NPr/VB+ . D/P ?             Nᴹ/J+\n> bungalow at    eighty a   month  , but     at    the last     minute    the firm      ordered him  to\n# NSg      NSg/P NSg    D/P NSg/J+ . NSg/C/P NSg/P D   NSg/VB/J NSg/VB/J+ D   NSg/VB/J+ VP/J    ISg+ P\n> Washington , and  I       went    out          to the country alone . I       had a    dog       — at    least    I       had him\n# NPr+       . VB/C ISg/#r+ NSg/VPt NSg/VB/J/R/P P  D   NSg/J+  J     . ISg/#r+ VP  D/P+ NSg/VB/J+ . NSg/P NSg/J/Dq ISg/#r+ VP  ISg+\n> for   a    few       days until he       ran     away — and  an  old   Dodge    and  a    Finnish woman   , who    made\n# R/C/P D/P+ NSg/I/Dq+ NPl+ C/P   NPr/ISg+ NSg/VPt VB/J . VB/C D/P NSg/J NPr/VB/J VB/C D/P+ NSg/J+  NSg/VB+ . NPr/I+ VP\n> my  bed        and  cooked breakfast and  muttered Finnish wisdom to herself over    the\n# D$+ NSg/VBP/J+ VB/C VP/J   N🅪Sg/VB+  VB/C VP/J     NSg/J+  Nᴹ+    P  ISg+    NSg/J/P D+\n> electric stove   .\n# NSg/J+   NSg/VB+ .\n>\n#\n> It       was  lonely for   a    day     or    so          until one      morning    some      man       , more         recently arrived\n# NPr/ISg+ VLPt J/R    R/C/P D/P+ NPr🅪Sg+ NPr/C NSg/I/J/R/C C/P   NSg/I/J+ N🅪Sg/Vg/J+ I/J/R/Dq+ NPr/VB/J+ . NPr/I/J/R/Dq R        VP/J\n> than I       , stopped me       on  the road    .\n# C/P  ISg/#r+ . VP/J    NPr/ISg+ J/P D+  N🅪Sg/J+ .\n>\n#\n> “ How   do  you    get    to West      Egg      village ? ” he       asked helplessly .\n# . NSg/C VXB ISgPl+ NSg/VB P  NPr/VB/J+ N🅪Sg/VB+ NSg+    . . NPr/ISg+ VP/J  R          .\n>\n#\n> I       told him  . And  as    I       walked on  I       was  lonely no       longer . I       was  a   guide  , a\n# ISg/#r+ VP   ISg+ . VB/C R/C/P ISg/#r+ VP/J   J/P ISg/#r+ VLPt J/R    NSg/Dq/P NSg/JC . ISg/#r+ VLPt D/P NSg/VB . D/P\n> pathfinder , an  original settler . He       had casually conferred on  me       the freedom of\n# NSg        . D/P NSg/J    NSg+    . NPr/ISg+ VP  R        VP        J/P NPr/ISg+ D   N🅪Sg    P\n> the neighborhood .\n# D+  NSg/Am+      .\n>\n#\n> And  so          with the sunshine and  the great bursts of leaves  growing on  the trees   ,\n# VB/C NSg/I/J/R/C P    D   Nᴹ/J+    VB/C D   NSg/J NPl/V3 P  NPl/V3+ Nᴹ/Vg/J J/P D+  NPl/V3+ .\n> just as    things grow in        fast        movies , I       had that         familiar conviction that          life     was\n# J/R  R/C/P NPl+   VB   NPr/J/R/P NSg/VB/J/R+ NPl+   . ISg/#r+ VP  NSg/I/C/Ddem NSg/J+   N🅪Sg+      NSg/I/C/Ddem+ N🅪Sg/VB+ VLPt\n> beginning over    again with the summer     .\n# NSg/Vg/J  NSg/J/P P     P    D+  NPr🅪Sg/VB+ .\n>\n#\n> There was  so          much         to read    , for   one      thing , and  so          much         fine     health to be       pulled\n# R+    VLPt NSg/I/J/R/C NSg/I/J/R/Dq P  NSg/VBP . R/C/P NSg/I/J+ NSg+  . VB/C NSg/I/J/R/C NSg/I/J/R/Dq NSg/VB/J Nᴹ+    P  NSg/VLXB VP/J\n> down        out          of the young     breath     - giving  air      . I       bought a   dozen volumes on  banking and\n# N🅪Sg/VB/J/P NSg/VB/J/R/P P  D+  NPr/VB/J+ N🅪Sg/VB/J+ . Nᴹ/Vg/J N🅪Sg/VB+ . ISg/#r+ NSg/VP D/P NSg   NPl/V3  J/P Nᴹ/Vg/J VB/C\n> credit and  investment securities , and  they stood on  my  shelf in        red    and  gold\n# NSg/VB VB/C N🅪Sg+      NPl+       . VB/C IPl+ VP    J/P D$+ NSg+  NPr/J/R/P N🅪Sg/J VB/C Nᴹ/VB/J\n> like         new    money   from the mint     , promising to unfold the shining secrets that         only\n# NSg/VB/J/C/P NSg/J+ N🅪Sg/J+ P    D   NSg/VB/J . Nᴹ/Vg/J   P  NSg/VB D   Nᴹ/Vg/J NPl/V3+ NSg/I/C/Ddem J/R/C\n> Midas and  Morgan and  Mæcenas knew . And  I       had the high       intention of reading   many\n# NPr   VB/C NPr+   VB/C ?       VPt  . VB/C ISg/#r+ VP  D   NSg/VB/J/R NSg/VB    P  NPrᴹ/Vg/J NSg/I/J/Dq+\n> other     books   besides . I       was  rather     literary in        college — one      year I       wrote a   series\n# NSg/VB/J+ NPl/V3+ R/P     . ISg/#r+ VLPt NPr/VB/J/R J        NPr/J/R/P NSg     . NSg/I/J+ NSg+ ISg/#r+ VPt   D/P NSgPl\n> of very solemn and  obvious editorials for   the Yale News   — and  now       I       was  going   to\n# P  J/R  J      VB/C J       NPl        R/C/P D+  NPr+ Nᴹ/VB+ . VB/C NSg/J/R/C ISg/#r+ VLPt Nᴹ/Vg/J P\n> bring back     all          such  things into my  life     and  become again that         most         limited  of\n# VB    NSg/VB/J NSg/I/J/C/Dq NSg/I NPl+   P    D$+ N🅪Sg/VB+ VB/C VBPp   P     NSg/I/C/Ddem NSg/I/J/R/Dq NSg/VP/J P\n> all          specialists , the “ well       - rounded man       . ” This   isn’t   just an  epigram — life     is  much\n# NSg/I/J/C/Dq NPl+        . D   . NSg/VB/J/R . VP/J    NPr/VB/J+ . . I/Ddem NSg/VX3 J/R  D/P NSg     . N🅪Sg/VB+ VL3 NSg/I/J/R/Dq\n> more         successfully looked at    from a   single   window  , after all          .\n# NPr/I/J/R/Dq R            VP/J   NSg/P P    D/P NSg/VB/J NSg/VB+ . P     NSg/I/J/C/Dq .\n>\n#\n> It       was  a   matter  of chance    that          I       should have    rented a    house   in        one     of the\n# NPr/ISg+ VLPt D/P N🅪Sg/VB P  NPr/VB/J+ NSg/I/C/Ddem+ ISg/#r+ VXB    NSg/VXB VP/J   D/P+ NPr/VB+ NPr/J/R/P NSg/I/J P  D\n> strangest communities in        North     America . It       was  on  that          slender riotous island\n# JS        NPl         NPr/J/R/P NPr/VB/J+ NPr+    . NPr/ISg+ VLPt J/P NSg/I/C/Ddem+ J       J       NSg/VB+\n> which extends itself due   east  of New   York — and  where   there are , among other\n# I/C+  NPl/V3  ISg+   NSg/J NPr/J P  NSg/J NPr+ . VB/C NSg/R/C R+    VLB . P     NSg/VB/J\n> natural curiosities , two unusual formations of land       . Twenty miles  from the city\n# NSg/J   NPl         . NSg NSg/J   NPl        P  NPr🅪Sg/VB+ . NSg    NPrPl+ P    D+  NSg+\n> a   pair   of enormous eggs    , identical in        contour and  separated only  by    a   courtesy\n# D/P NSg/VB P  J+       NPl/V3+ . NSg/J     NPr/J/R/P NSg/VB  VB/C VP/J      J/R/C NSg/P D/P NSg/VB/J+\n> bay       , jut    out          into the most         domesticated body   of salt         water    in        the Western\n# NSg/VB/J+ . NSg/VB NSg/VB/J/R/P P    D   NSg/I/J/R/Dq VP/J         NSg/VB P  NPr🅪Sg/VB/J+ N🅪Sg/VB+ NPr/J/R/P D   NPr/J\n> hemisphere , the great wet      barnyard of Long     Island  Sound      . They are not     perfect\n# NSg+       . D   NSg/J NSg/VP/J NSg/J    P  NPr/VB/J NSg/VB+ N🅪Sg/VB/J+ . IPl+ VLB NSg/R/C NSg/VB/J\n> ovals — like         the egg      in        the Columbus story   , they are both   crushed flat     at    the\n# NPl   . NSg/VB/J/C/P D   N🅪Sg/VB+ NPr/J/R/P D   NPr/VB+  NSg/VB+ . IPl+ VLB I/C/Dq VP/J    NSg/VB/J NSg/P D\n> contact  end     — but     their physical resemblance must    be       a   source  of perpetual wonder\n# N🅪Sg/VB+ NSg/VB+ . NSg/C/P D$+   NSg/J+   NSg+        NSg/VXB NSg/VLXB D/P N🅪Sg/VB P  NSg/J     N🅪Sg/VB\n> to the gulls  that          fly      overhead . To the wingless a   more         interesting phenomenon is\n# P  D   NPl/V3 NSg/I/C/Ddem+ NSg/VB/J NSg/J/P+ . P  D   J        D/P NPr/I/J/R/Dq Vg/J        NSg+       VL3\n> their dissimilarity in        every particular except shape   and  size     .\n# D$+   NSg           NPr/J/R/P Dq    NSg/J      VB/C/P N🅪Sg/VB VB/C N🅪Sg/VB+ .\n>\n#\n> I       lived at    West      Egg      , the — well       , the less       fashionable of the two , though this    is  a\n# ISg/#r+ VP/J  NSg/P NPr/VB/J+ N🅪Sg/VB+ . D   . NSg/VB/J/R . D   VB/J/R/C/P NSg/J       P  D   NSg . C      I/Ddem+ VL3 D/P\n> most         superficial tag    to express  the bizarre and  not     a   little     sinister contrast\n# NSg/I/J/R/Dq NSg/J       NSg/VB P  NSg/VB/J D   J       VB/C NSg/R/C D/P NPr/I/J/Dq J        NSg/VB\n> between them     . My  house   was  at    the very tip    of the egg      , only  fifty yards  from the\n# NSg/P   NSg/IPl+ . D$+ NPr/VB+ VLPt NSg/P D   J/R  NSg/VB P  D+  N🅪Sg/VB+ . J/R/C NSg   NPl/V3 P    D+\n> Sound      , and  squeezed between two  huge places  that          rented for   twelve or    fifteen\n# N🅪Sg/VB/J+ . VB/C VP/J     NSg/P   NSg+ J+   NPl/V3+ NSg/I/C/Ddem+ VP/J   R/C/P NSg    NPr/C NSg\n> thousand a    season  . The one     on  my  right    was  a   colossal affair by    any    standard — it\n# NSg+     D/P+ NSg/VB+ . D   NSg/I/J J/P D$+ NPr/VB/J VLPt D/P J        NSg    NSg/P I/R/Dq NSg/J    . NPr/ISg+\n> was  a   factual imitation of some     Hôtel de   Ville in        Normandy , with a   tower   on  one\n# VLPt D/P NSg/J   N🅪Sg      P  I/J/R/Dq ?     NPr+ ?     NPr/J/R/P NPr      . P    D/P NSg/VB+ J/P NSg/I/J\n> side      , spanking new   under   a   thin     beard  of raw      ivy  , and  a   marble    swimming pool    ,\n# NSg/VB/J+ . Nᴹ/Vg/J  NSg/J NSg/J/P D/P NSg/VB/J NPr/VB P  NSg/VB/J NPr+ . VB/C D/P NSg/VB/J+ NSg/Vg   NSg/VB+ .\n> and  more         than forty acres of lawn   and  garden    . It       was  Gatsby’s mansion . Or    ,\n# VB/C NPr/I/J/R/Dq C/P  NSg/J NPl   P  NSg/VB VB/C NSg/VB/J+ . NPr/ISg+ VLPt NPr$     NSg+    . NPr/C .\n> rather     , as    I       didn’t know Mr   . Gatsby , it       was  a   mansion inhabited by    a   gentleman\n# NPr/VB/J/R . R/C/P ISg/#r+ VXPt   VB   NSg+ . NPr    . NPr/ISg+ VLPt D/P NSg+    VP/J      NSg/P D/P NSg/J\n> of that         name    . My  own       house   was  an  eyesore , but     it       was  a   small    eyesore , and  it\n# P  NSg/I/C/Ddem NSg/VB+ . D$+ NSg/VB/J+ NPr/VB+ VLPt D/P NSg     . NSg/C/P NPr/ISg+ VLPt D/P NPr/VB/J NSg     . VB/C NPr/ISg+\n> had been     overlooked , so          I       had a   view   of the water    , a   partial  view   of my\n# VP  NSg/VLPp VP/J       . NSg/I/J/R/C ISg/#r+ VP  D/P NSg/VB P  D   N🅪Sg/VB+ . D/P NSg/VB/J NSg/VB P  D$+\n> neighbor’s lawn    , and  the consoling proximity of millionaires — all          for   eighty\n# NSg$/Am    NSg/VB+ . VB/C D   Nᴹ/Vg/J   Nᴹ        P  NPl          . NSg/I/J/C/Dq R/C/P NSg\n> dollars a   month  .\n# NPl+    D/P NSg/J+ .\n>\n#\n> Across the courtesy  bay       the white       palaces of fashionable East   Egg      glittered\n# NSg/P  D+  NSg/VB/J+ NSg/VB/J+ D   NPr🅪Sg/VB/J NPl/V3  P  NSg/J+      NPr/J+ N🅪Sg/VB+ VP/J\n> along the water    , and  the history of the summer     really begins on  the evening    I\n# P     D   N🅪Sg/VB+ . VB/C D   N🅪Sg    P  D   NPr🅪Sg/VB+ R      NPl/V3 J/P D   N🅪Sg/Vg/J+ ISg/#r+\n> drove   over    there to have    dinner   with the Tom     Buchanans . Daisy was  my  second\n# NSg/VPt NSg/J/P R+    P  NSg/VXB N🅪Sg/VB+ P    D   NPr/VB+ ?         . NPr+  VLPt D$+ NSg/VB/J+\n> cousin  once  removed , and  I’d known Tom     in        college . And  just after the war      I\n# NSg/VB+ NSg/C VP/J    . VB/C K   VPp/J NPr/VB+ NPr/J/R/P NSg+    . VB/C J/R  P     D+  N🅪Sg/VB+ ISg/#r+\n> spent two days with them     in        Chicago .\n# VP/J  NSg NPl+ P    NSg/IPl+ NPr/J/R/P NPr+    .\n>\n#\n> Her     husband , among various physical accomplishments , had been     one     of the most\n# ISg/D$+ NSg/VB+ . P     J+      NSg/J+   NPl+            . VP  NSg/VLPp NSg/I/J P  D   NSg/I/J/R/Dq\n> powerful ends    that          ever played football at    New    Haven   — a   national figure  in        a    way    ,\n# J        NPl/V3+ NSg/I/C/Ddem+ J/R  VP/J   NSg/VB+  NSg/P NSg/J+ NSg/VB+ . D/P NSg/J    NSg/VB+ NPr/J/R/P D/P+ NSg/J+ .\n> one     of those   men  who    reach  such  an   acute     limited   excellence at    twenty - one     that\n# NSg/I/J P  I/Ddem+ NPl+ NPr/I+ NSg/VB NSg/I D/P+ NSg/VB/J+ NSg/VP/J+ NSg+       NSg/P NSg    . NSg/I/J NSg/I/C/Ddem\n> everything afterward savors of anti    - climax . His     family  were     enormously\n# NSg/I/VB+  R/Am      NPl/V3 P  NSg/J/P . NSg/VB . ISg/D$+ N🅪Sg/J+ NSg/VLPt R\n> wealthy — even       in        college his     freedom with money   was  a   matter  for   reproach — but     now\n# NSg/J   . NSg/VB/J/R NPr/J/R/P NSg+    ISg/D$+ N🅪Sg    P    N🅪Sg/J+ VLPt D/P N🅪Sg/VB R/C/P NSg/VB   . NSg/C/P NSg/J/R/C\n> he’d left     Chicago and  come       East   in        a   fashion  that          rather     took your breath     away :\n# K    NPr/VP/J NPr+    VB/C NSg/VBPp/P NPr/J+ NPr/J/R/P D/P N🅪Sg/VB+ NSg/I/C/Ddem+ NPr/VB/J/R VPt  D$+  N🅪Sg/VB/J+ VB/J .\n> for   instance , he’d brought down        a   string of polo  ponies from Lake    Forest  . It       was\n# R/C/P NSg/VB+  . K    VP      N🅪Sg/VB/J/P D/P NSg/VB P  NPrᴹ+ NPl/V3 P    NSg/VB+ NPr/VB+ . NPr/ISg+ VLPt\n> hard     to realize      that         a    man       in        my  own       generation was  wealthy enough to do  that          .\n# N🅪Sg/J/R P  VB/Comm/NoAm NSg/I/C/Ddem D/P+ NPr/VB/J+ NPr/J/R/P D$+ NSg/VB/J+ NSg+       VLPt NSg/J   NSg/I  P  VXB NSg/I/C/Ddem+ .\n>\n#\n> Why    they came      East   I       don’t know . They had spent a   year in        France for   no\n# NSg/VB IPl+ NSg/VPt/P NPr/J+ ISg/#r+ VXB   VB   . IPl+ VP  VP/J  D/P NSg+ NPr/J/R/P NPr+   R/C/P NSg/Dq/P+\n> particular reason   , and  then      drifted here and  there unrestfully wherever people\n# NSg/J+     N🅪Sg/VB+ . VB/C NSg/J/R/C VP/J    J/R  VB/C R+    R           C        NPl/VB+\n> played polo  and  were     rich     together . This    was  a   permanent move   , said Daisy over\n# VP/J   NPrᴹ+ VB/C NSg/VLPt NPr/VB/J J        . I/Ddem+ VLPt D/P NSg/J     NSg/VB . VP/J NPr+  NSg/J/P\n> the telephone , but     I       didn’t believe it       — I       had no       sight    into Daisy’s heart    , but     I\n# D+  NSg/VB+   . NSg/C/P ISg/#r+ VXPt   VB      NPr/ISg+ . ISg/#r+ VP  NSg/Dq/P N🅪Sg/VB+ P    NPr$    N🅪Sg/VB+ . NSg/C/P ISg/#r+\n> felt      that         Tom     would drift  on  forever seeking , a   little     wistfully , for   the\n# N🅪Sg/VP/J NSg/I/C/Ddem NPr/VB+ VXB   NSg/VB J/P NSg/J   Nᴹ/Vg/J . D/P NPr/I/J/Dq R         . R/C/P D\n> dramatic turbulence of some     irrecoverable football game      .\n# J        NSg        P  I/J/R/Dq J             NSg/VB+  NSg/VB/J+ .\n>\n#\n> And  so          it       happened that         on  a    warm      windy  evening    I       drove   over    to East   Egg      to see\n# VB/C NSg/I/J/R/C NPr/ISg+ VP/J     NSg/I/C/Ddem J/P D/P+ NSg/VB/J+ NSg/J+ N🅪Sg/Vg/J+ ISg/#r+ NSg/VPt NSg/J/P P  NPr/J+ N🅪Sg/VB+ P  NSg/VB\n> two  old    friends   whom I       scarcely knew at    all          . Their house   was  even       more         elaborate\n# NSg+ NSg/J+ NPrPl/V3+ I+   ISg/#r+ R        VPt  NSg/P NSg/I/J/C/Dq . D$+   NPr/VB+ VLPt NSg/VB/J/R NPr/I/J/R/Dq VB/J\n> than I       expected , a   cheerful red    - and  - white       Georgian Colonial mansion , overlooking\n# C/P  ISg/#r+ NSg/VP/J . D/P J        N🅪Sg/J . VB/C . NPr🅪Sg/VB/J NSg/J    NSg/J+   NSg+    . Nᴹ/Vg/J\n> the bay       . The lawn    started at    the beach   and  ran     toward the front     door    for   a\n# D   NSg/VB/J+ . D+  NSg/VB+ VP/J    NSg/P D+  NPr/VB+ VB/C NSg/VPt J/P    D+  NSg/VB/J+ NSg/VB+ R/C/P D/P\n> quarter  of a    mile , jumping over    sun     - dials  and  brick      walks  and  burning\n# NSg/VB/J P  D/P+ NSg+ . Nᴹ/Vg/J NSg/J/P NPr/VB+ . NPl/V3 VB/C N🅪Sg/VB/J+ NPl/V3 VB/C Nᴹ/Vg/J\n> gardens — finally when    it       reached the house   drifting up         the side      in        bright   vines\n# NPl/V3+ . R       NSg/I/C NPr/ISg+ VP/J    D+  NPr/VB+ Nᴹ/Vg/J  NSg/VB/J/P D+  NSg/VB/J+ NPr/J/R/P NPr/VB/J NPl\n> as    though from the momentum of its     run      . The front     was  broken by    a   line   of French\n# R/C/P C      P    D   N🅪Sg     P  ISg/D$+ NSg/VBPp . D+  NSg/VB/J+ VLPt VPp/J  NSg/P D/P NSg/VB P  NPr🅪Sg/VB/J+\n> windows   , glowing now       with reflected gold     and  wide  open     to the warm      windy\n# NPrPl/V3+ . Nᴹ/Vg/J NSg/J/R/C P    VP/J      Nᴹ/VB/J+ VB/C NSg/J NSg/VB/J P  D+  NSg/VB/J+ NSg/J+\n> afternoon , and  Tom     Buchanan in        riding   clothes was  standing with his     legs    apart\n# N🅪Sg+     . VB/C NPr/VB+ NPr      NPr/J/R/P Nᴹ/Vg/J+ NPl/V3+ VLPt Nᴹ/Vg/J  P    ISg/D$+ NPl/V3+ J\n> on  the front     porch .\n# J/P D+  NSg/VB/J+ NSg+  .\n>\n#\n> He       had changed since his     New    Haven   years . Now       he       was  a   sturdy straw     - haired man\n# NPr/ISg+ VP  VP/J    C/P   ISg/D$+ NSg/J+ NSg/VB+ NPl+  . NSg/J/R/C NPr/ISg+ VLPt D/P NSg/J  N🅪Sg/VB/J . VP/J   NPr/VB/J\n> of thirty with a   rather     hard     mouth   and  a   supercilious manner . Two shining\n# P  NSg    P    D/P NPr/VB/J/R N🅪Sg/J/R NSg/VB+ VB/C D/P J            NSg+   . NSg Nᴹ/Vg/J\n> arrogant eyes    had established dominance over    his     face    and  gave him  the\n# J+       NPl/V3+ VP  VP/J        Nᴹ+       NSg/J/P ISg/D$+ NSg/VB+ VB/C VPt  ISg+ D\n> appearance of always leaning aggressively forward  . Not     even       the effeminate swank\n# NSg        P  R      Nᴹ/Vg/J R            NSg/VB/J . NSg/R/C NSg/VB/J/R D   NSg/VB/J   NSg/VB/J\n> of his     riding   clothes could   hide   the enormous power     of that         body    — he       seemed to\n# P  ISg/D$+ Nᴹ/Vg/J+ NPl/V3+ NSg/VXB NSg/VB D   J        N🅪Sg/VB/J P  NSg/I/C/Ddem NSg/VB+ . NPr/ISg+ VP/J   P\n> fill   those  glistening boots   until he       strained the top       lacing  , and  you    could   see\n# NSg/VB I/Ddem Nᴹ/Vg/J    NPl/V3+ C/P   NPr/ISg+ VP/J     D   NSg/VB/J+ Nᴹ/Vg/J . VB/C ISgPl+ NSg/VXB NSg/VB\n> a   great pack   of muscle   shifting when    his     shoulder moved under   his     thin     coat    . It\n# D/P NSg/J NSg/VB P  N🅪Sg/VB+ Nᴹ/Vg/J+ NSg/I/C ISg/D$+ NSg/VB+  VP/J  NSg/J/P ISg/D$+ NSg/VB/J NSg/VB+ . NPr/ISg+\n> was  a   body   capable of enormous leverage — a    cruel     body    .\n# VLPt D/P NSg/VB J       P  J        Nᴹ/VB    . D/P+ NSg/VB/J+ NSg/VB+ .\n>\n#\n> His     speaking voice   , a   gruff    husky tenor , added to the impression of\n# ISg/D$+ Nᴹ/Vg/J  NSg/VB+ . D/P NSg/VB/J NSg/J NSg/J . VP/J  P  D   NSg/VB+    P\n> fractiousness he       conveyed . There was  a   touch   of paternal contempt in        it       , even\n# NSg           NPr/ISg+ VP/J     . R+    VLPt D/P N🅪Sg/VB P  J        Nᴹ       NPr/J/R/P NPr/ISg+ . NSg/VB/J/R\n> toward people  he       liked — and  there were     men  at    New    Haven   who    had hated his     guts    .\n# J/P    NPl/VB+ NPr/ISg+ VP/J  . VB/C R+    NSg/VLPt NPl+ NSg/P NSg/J+ NSg/VB+ NPr/I+ VP  VP/J  ISg/D$+ NPl/V3+ .\n>\n#\n> “ Now       , don’t think  my  opinion on  these  matters is  final    , ” he       seemed to say    , “ just\n# . NSg/J/R/C . VXB   NSg/VB D$+ N🅪Sg+   J/P I/Ddem NPl/V3+ VL3 NSg/VB/J . . NPr/ISg+ VP/J   P  NSg/VB . . J/R\n> because I’m stronger and  more         of a   man       than you    are . ” We   were     in        the same senior\n# C/P     K   JC       VB/C NPr/I/J/R/Dq P  D/P NPr/VB/J+ C/P  ISgPl+ VLB . . IPl+ NSg/VLPt NPr/J/R/P D+  I/J+ NPr/J+\n> society , and  while      we   were     never intimate I       always had the impression that          he\n# N🅪Sg+   . VB/C NSg/VB/C/P IPl+ NSg/VLPt R     NSg/VB/J ISg/#r+ R      VP  D+  NSg/VB+    NSg/I/C/Ddem+ NPr/ISg+\n> approved of me       and  wanted me       to like         him  with some     harsh , defiant wistfulness of\n# VP/J     P  NPr/ISg+ VB/C VP/J   NPr/ISg+ P  NSg/VB/J/C/P ISg+ P    I/J/R/Dq VB/J  . NSg/J   Nᴹ          P\n> his     own      .\n# ISg/D$+ NSg/VB/J .\n>\n#\n> We   talked for   a   few       minutes on  the sunny  porch .\n# IPl+ VP/J   R/C/P D/P NSg/I/Dq+ NPl/V3+ J/P D+  NSg/J+ NSg+  .\n>\n#\n> “ I’ve got a   nice  place    here , ” he       said , his     eyes    flashing about restlessly .\n# . K    VP  D/P NPr/J N🅪Sg/VB+ J/R  . . NPr/ISg+ VP/J . ISg/D$+ NPl/V3+ Nᴹ/Vg/J  J/P   R          .\n>\n#\n> Turning me       around by    one      arm       , he       moved a    broad  flat      hand    along the front     vista   ,\n# Nᴹ/Vg/J NPr/ISg+ J/P    NSg/P NSg/I/J+ NSg/VB/J+ . NPr/ISg+ VP/J  D/P+ NSg/J+ NSg/VB/J+ NSg/VB+ P     D+  NSg/VB/J+ NSg/VB+ .\n> including in        its     sweep  a   sunken Italian garden   , a    half      acre of deep  , pungent\n# Nᴹ/Vg/J   NPr/J/R/P ISg/D$+ NSg/VB D/P VPp/J  N🅪Sg/J  NSg/VB/J . D/P+ N🅪Sg/J/P+ NSg  P  NSg/J . J\n> roses   , and  a   snub      - nosed motor     - boat    that          bumped the tide    offshore .\n# NPl/V3+ . VB/C D/P NSg/VB/J+ . VP/J  NSg/VB/J+ . NSg/VB+ NSg/I/C/Ddem+ VP/J   D   NSg/VB+ NSg/VB/J .\n>\n#\n> “ It       belonged to Demaine , the oil      man       . ” He       turned me       around again , politely and\n# . NPr/ISg+ VP/J     P  ?       . D   N🅪Sg/VB+ NPr/VB/J+ . . NPr/ISg+ VP/J   NPr/ISg+ J/P    P     . R        VB/C\n> abruptly . “ We'll go       inside  . ”\n# R        . . K     NSg/VB/J NSg/J/P . .\n>\n#\n> We   walked through a    high        hallway into a   bright   rosy     - colored     space    , fragilely\n# IPl+ VP/J   NSg/J/P D/P+ NSg/VB/J/R+ NSg+    P    D/P NPr/VB/J NSg/VB/J . NSg/VP/J/Am N🅪Sg/VB+ . R\n> bound    into the house   by    French      windows   at    either end     . The windows   were     ajar and\n# NSg/VP/J P    D   NPr/VB+ NSg/P NPr🅪Sg/VB/J NPrPl/V3+ NSg/P I/C    NSg/VB+ . D+  NPrPl/V3+ NSg/VLPt VB/J VB/C\n> gleaming white       against the fresh    grass      outside   that          seemed to grow a   little     way\n# Nᴹ/Vg/J  NPr🅪Sg/VB/J C/P     D   NSg/VB/J NPr🅪Sg/VB+ Nᴹ/VB/J/P NSg/I/C/Ddem+ VP/J   P  VB   D/P NPr/I/J/Dq NSg/J+\n> into the house   . A    breeze  blew      through the room       , blew      curtains in        at    one      end     and\n# P    D   NPr/VB+ . D/P+ NSg/VB+ NSg/VPt/J NSg/J/P D+  N🅪Sg/VB/J+ . NSg/VPt/J NPl/V3+  NPr/J/R/P NSg/P NSg/I/J+ NSg/VB+ VB/C\n> out          the other    like         pale      flags   , twisting them     up         toward the frosted wedding - cake\n# NSg/VB/J/R/P D   NSg/VB/J NSg/VB/J/C/P NSg/VB/J+ NPl/V3+ . Nᴹ/Vg/J  NSg/IPl+ NSg/VB/J/P J/P    D   VP/J    NSg/Vg+ . N🅪Sg/VB\n> of the ceiling , and  then      rippled over    the wine     - colored     rug       , making  a   shadow    on\n# P  D   NSg/VB+ . VB/C NSg/J/R/C VP/J    NSg/J/P D   N🅪Sg/VB+ . NSg/VP/J/Am NSg/VB/J+ . Nᴹ/Vg/J D/P NSg/VB/J+ J/P\n> it       as    wind     does    on  the sea  .\n# NPr/ISg+ R/C/P N🅪Sg/VB+ NPl/VX3 J/P D   NSg+ .\n>\n#\n> The only  completely stationary object  in        the room       was  an  enormous couch   on  which\n# D   J/R/C R          NSg/J      NSg/VB+ NPr/J/R/P D   N🅪Sg/VB/J+ VLPt D/P J        NSg/VB+ J/P I/C+\n> two young    women were     buoyed up         as    though upon an  anchored balloon . They were\n# NSg NPr/VB/J NPl+  NSg/VLPt VP/J   NSg/VB/J/P R/C/P C      P    D/P VP/J     NSg/VB+ . IPl+ NSg/VLPt\n> both   in        white       , and  their dresses were     rippling and  fluttering as    if    they had\n# I/C/Dq NPr/J/R/P NPr🅪Sg/VB/J . VB/C D$+   NPl/V3+ NSg/VLPt Nᴹ/Vg/J  VB/C Nᴹ/Vg/J    R/C/P NSg/C IPl+ VP\n> just been     blown back     in        after a   short      flight     around the house   . I       must    have    stood\n# J/R  NSg/VLPp VPp/J NSg/VB/J NPr/J/R/P P     D/P NPr/VB/J/P N🅪Sg/VB/J+ J/P    D   NPr/VB+ . ISg/#r+ NSg/VXB NSg/VXB VP\n> for   a    few       moments listening to the whip   and  snap     of the curtains and  the groan\n# R/C/P D/P+ NSg/I/Dq+ NPl+    Nᴹ/Vg/J   P  D   NSg/VB VB/C NSg/VB/J P  D   NPl/V3+  VB/C D   NSg/VB\n> of a   picture on  the wall    . Then      there was  a    boom    as    Tom     Buchanan shut      the rear\n# P  D/P NSg/VB+ J/P D   NPr/VB+ . NSg/J/R/C R+    VLPt D/P+ NSg/VB+ R/C/P NPr/VB+ NPr+     NSg/VBP/J D+  NSg/VB/J+\n> windows   and  the caught wind     died out          about the room       , and  the curtains and  the\n# NPrPl/V3+ VB/C D   VP/J   N🅪Sg/VB+ VP/J NSg/VB/J/R/P J/P   D+  N🅪Sg/VB/J+ . VB/C D   NPl/V3   VB/C D\n> rugs   and  the two  young     women ballooned slowly to the floor   .\n# NPl/V3 VB/C D+  NSg+ NPr/VB/J+ NPl+  VP/J      R      P  D   NSg/VB+ .\n>\n#\n> The younger of the two  was   a    stranger   to me       . She  was  extended full     length  at    her\n# D   NSg/JC  P  D+  NSg+ VLPt+ D/P+ NSg/VB/JC+ P  NPr/ISg+ . ISg+ VLPt VP/J     NSg/VB/J N🅪Sg/VB NSg/P ISg/D$+\n> end    of the divan , completely motionless , and  with her     chin    raised a   little     , as\n# NSg/VB P  D   NSg   . R          J          . VB/C P    ISg/D$+ NPr/VB+ VP/J   D/P NPr/I/J/Dq . R/C/P\n> if    she  were     balancing something on  it       which was  quite likely to fall    . If    she  saw\n# NSg/C ISg+ NSg/VLPt Nᴹ/Vg/J   NSg/I/J+  J/P NPr/ISg+ I/C+  VLPt R     NSg/J  P  N🅪Sg/VB . NSg/C ISg+ NSg/VPt\n> me       out          of the corner of her     eyes    she  gave no       hint   of it       — indeed , I       was  almost\n# NPr/ISg+ NSg/VB/J/R/P P  D   NSg/VB P  ISg/D$+ NPl/V3+ ISg+ VPt  NSg/Dq/P NSg/VB P  NPr/ISg+ . R      . ISg/#r+ VLPt R\n> surprised into murmuring an  apology for   having  disturbed her     by    coming  in        .\n# VP/J      P    Nᴹ/Vg/J   D/P N🅪Sg+   R/C/P Nᴹ/Vg/J VP/J      ISg/D$+ NSg/P Nᴹ/Vg/J NPr/J/R/P .\n>\n#\n> The other     girl    , Daisy , made an  attempt to rise   — she  leaned slightly forward  with\n# D+  NSg/VB/J+ NSg/VB+ . NPr+  . VP   D/P NSg/VB+ P  NSg/VB . ISg+ VP/J   R        NSg/VB/J P\n> a    conscientious expression — then      she  laughed , an  absurd , charming little      laugh   ,\n# D/P+ J+            N🅪Sg+      . NSg/J/R/C ISg+ VP/J    . D/P NSg/J  . Nᴹ/Vg/J+ NPr/I/J/Dq+ NSg/VB+ .\n> and  I       laughed too and  came      forward  into the room       .\n# VB/C ISg/#r+ VP/J    R   VB/C NSg/VPt/P NSg/VB/J P    D+  N🅪Sg/VB/J+ .\n>\n#\n> “ I’m p         - paralyzed with happiness . ”\n# . K   NSg/VB/P+ . VP/J      P    Nᴹ+       . .\n>\n#\n> She  laughed again , as    if    she  said something very witty , and  held my  hand    for   a\n# ISg+ VP/J    P     . R/C/P NSg/C ISg+ VP/J NSg/I/J+  J/R  J     . VB/C VP   D$+ NSg/VB+ R/C/P D/P\n> moment , looking up         into my  face    , promising that         there was  no       one      in        the world\n# NSg+   . Nᴹ/Vg/J NSg/VB/J/P P    D$+ NSg/VB+ . Nᴹ/Vg/J   NSg/I/C/Ddem R+    VLPt NSg/Dq/P NSg/I/J+ NPr/J/R/P D   NSg/VB+\n> she  so          much         wanted to see    . That          was  a   way   she  had . She  hinted in        a   murmur that\n# ISg+ NSg/I/J/R/C NSg/I/J/R/Dq VP/J   P  NSg/VB . NSg/I/C/Ddem+ VLPt D/P NSg/J ISg+ VP  . ISg+ VP/J   NPr/J/R/P D/P NSg/VB NSg/I/C/Ddem\n> the surname of the balancing girl    was  Baker . ( I’ve heard it       said that         Daisy’s\n# D   NSg/VB  P  D   Nᴹ/Vg/J+  NSg/VB+ VLPt NPr+  . . K    VP/J  NPr/ISg+ VP/J NSg/I/C/Ddem NPr$\n> murmur was  only  to make   people  lean     toward her     ; an  irrelevant criticism that\n# NSg/VB VLPt J/R/C P  NSg/VB NPl/VB+ NPr/VB/J J/P    ISg/D$+ . D/P J          N🅪Sg+     NSg/I/C/Ddem+\n> made it       no       less       charming . )\n# VP   NPr/ISg+ NSg/Dq/P VB/J/R/C/P Nᴹ/Vg/J  . .\n>\n#\n> At    any     rate    , Miss   Baker’s lips    fluttered , she  nodded at    me       almost imperceptibly ,\n# NSg/P I/R/Dq+ NSg/VB+ . NSg/VB NPr$    NPl/V3+ VP/J      . ISg+ VP     NSg/P NPr/ISg+ R      R             .\n> and  then      quickly tipped her     head      back     again — the object  she  was  balancing had\n# VB/C NSg/J/R/C R       VP     ISg/D$+ NPr/VB/J+ NSg/VB/J P     . D   NSg/VB+ ISg+ VLPt Nᴹ/Vg/J+  VP\n> obviously tottered a   little     and  given       her     something of a   fright   . Again a   sort   of\n# R         VP/J     D/P NPr/I/J/Dq VB/C NSg/VPp/J/P ISg/D$+ NSg/I/J+  P  D/P NSg/VB/J . P     D/P NSg/VB P\n> apology arose to my  lips    . Almost any    exhibition of complete  self        - sufficiency\n# N🅪Sg+   VPt   P  D$+ NPl/V3+ . R      I/R/Dq NSg        P  NSg/VB/J+ NSg/I/VB/J+ . NSg\n> draws  a   stunned tribute from me       .\n# NPl/V3 D/P VP/J    NSg/VB  P    NPr/ISg+ .\n>\n#\n> I       looked back     at    my  cousin  , who    began to ask    me       questions in        her     low        , thrilling\n# ISg/#r+ VP/J   NSg/VB/J NSg/P D$+ NSg/VB+ . NPr/I+ VPt   P  NSg/VB NPr/ISg+ NPl/V3+   NPr/J/R/P ISg/D$+ NSg/VB/J/R . Nᴹ/Vg/J\n> voice   . It       was  the kind  of voice   that         the ear       follows up         and  down        , as    if    each\n# NSg/VB+ . NPr/ISg+ VLPt D   NSg/J P  NSg/VB+ NSg/I/C/Ddem D+  NSg/VB/J+ NPl/V3  NSg/VB/J/P VB/C N🅪Sg/VB/J/P . R/C/P NSg/C Dq+\n> speech   is  an  arrangement of notes   that          will    never be       played again . Her     face    was\n# N🅪Sg/VB+ VL3 D/P NSg         P  NPl/V3+ NSg/I/C/Ddem+ NPr/VXB R     NSg/VLXB VP/J   P     . ISg/D$+ NSg/VB+ VLPt\n> sad      and  lovely with bright   things in        it       , bright   eyes   and  a    bright    passionate\n# NSg/VB/J VB/C NSg/J  P    NPr/VB/J NPl    NPr/J/R/P NPr/ISg+ . NPr/VB/J NPl/V3 VB/C D/P+ NPr/VB/J+ NSg/VB/J+\n> mouth   , but     there was  an  excitement in        her     voice   that          men  who    had cared for   her\n# NSg/VB+ . NSg/C/P R+    VLPt D/P NSg        NPr/J/R/P ISg/D$+ NSg/VB+ NSg/I/C/Ddem+ NPl+ NPr/I+ VP  VP    R/C/P ISg/D$+\n> found  difficult to forget : a   singing compulsion , a    whispered “ Listen , ” a    promise\n# NSg/VP VB/J      P  VB     . D/P Nᴹ/Vg/J NSg+       . D/P+ VP/J+     . NSg/VB . . D/P+ NSg/VB+\n> that          she  had done      gay      , exciting things just a    while       since and  that         there were\n# NSg/I/C/Ddem+ ISg+ VP  NSg/VPp/J NPr/VB/J . Nᴹ/Vg/J+ NPl+   J/R  D/P+ NSg/VB/C/P+ C/P   VB/C NSg/I/C/Ddem R+    NSg/VLPt\n> gay      , exciting things hovering in        the next    hour .\n# NPr/VB/J . Nᴹ/Vg/J+ NPl+   Nᴹ/Vg/J  NPr/J/R/P D   NSg/J/P NSg+ .\n>\n#\n> I       told her     how   I       had stopped off        in        Chicago for   a    day     on  my  way    East   , and  how   a\n# ISg/#r+ VP   ISg/D$+ NSg/C ISg/#r+ VP  VP/J    NSg/VB/J/P NPr/J/R/P NPr+    R/C/P D/P+ NPr🅪Sg+ J/P D$+ NSg/J+ NPr/J+ . VB/C NSg/C D/P+\n> dozen people  had sent   their love      through me       .\n# NSg+  NPl/VB+ VP  NSg/VP D$+   NPr🅪Sg/VB NSg/J/P NPr/ISg+ .\n>\n#\n> “ Do  they miss   me       ? ” she  cried ecstatically .\n# . VXB IPl+ NSg/VB NPr/ISg+ . . ISg+ VP/J  R            .\n>\n#\n> “ The whole  town is  desolate . All          the cars have    the left     rear      wheel   painted black\n# . D+  NSg/J+ NSg+ VL3 VB/J     . NSg/I/J/C/Dq D+  NPl+ NSg/VXB D   NPr/VP/J NSg/VB/J+ NSg/VB+ VP/J    N🅪Sg/VB/J\n> as    a   mourning wreath , and  there’s a   persistent wail   all          night    along the north\n# R/C/P D/P Nᴹ/Vg/J  NSg/VB . VB/C K       D/P J          NSg/VB NSg/I/J/C/Dq N🅪Sg/VB+ P     D   NPr/VB/J+\n> shore   . ”\n# NSg/VB+ . .\n>\n#\n> “ How   gorgeous ! Let’s go       back     , Tom     . To - morrow ! ” Then      she  added irrelevantly : “ You\n# . NSg/C J        . NSg$  NSg/VB/J NSg/VB/J . NPr/VB+ . P  . NPr/VB . . NSg/J/R/C ISg+ VP/J  R            . . ISgPl+\n> ought     to see    the baby      . ”\n# NSg/I/VXB P  NSg/VB D   NSg/VB/J+ . .\n>\n#\n> “ I’d like         to . ”\n# . K   NSg/VB/J/C/P P  . .\n>\n#\n> “ She’s asleep . She’s three years old   . Haven’t you    ever seen    her     ? ”\n# . K     J      . K     NSg+  NPl+  NSg/J . VXB     ISgPl+ J/R  NSg/VPp ISg/D$+ . .\n>\n#\n> “ Never . ”\n# . R     . .\n>\n#\n> “ Well       , you    ought     to see    her     . She’s — ”\n# . NSg/VB/J/R . ISgPl+ NSg/I/VXB P  NSg/VB ISg/D$+ . K     . .\n>\n#\n> Tom     Buchanan , who    had been     hovering restlessly about the room       , stopped and\n# NPr/VB+ NPr+     . NPr/I+ VP  NSg/VLPp Nᴹ/Vg/J  R          J/P   D   N🅪Sg/VB/J+ . VP/J    VB/C\n> rested his     hand    on  my  shoulder .\n# VP/J   ISg/D$+ NSg/VB+ J/P D$+ NSg/VB+  .\n>\n#\n> “ What   you    doing   , Nick    ? ”\n# . NSg/I+ ISgPl+ Nᴹ/Vg/J . NPr/VB+ . .\n>\n#\n> “ I’m a    bond      man       . ”\n# . K   D/P+ NPr/VB/J+ NPr/VB/J+ . .\n>\n#\n> \" Who    with ? ”\n# . NPr/I+ P    . .\n>\n#\n> I       told him  .\n# ISg/#r+ VP   ISg+ .\n>\n#\n> “ Never heard of them     , ” he       remarked decisively .\n# . R     VP/J  P  NSg/IPl+ . . NPr/ISg+ VP/J     R          .\n>\n#\n> This    annoyed me       .\n# I/Ddem+ VP/J    NPr/ISg+ .\n>\n#\n> “ You    will    , ” I       answered shortly . “ You    will    if    you    stay     in        the East   . ”\n# . ISgPl+ NPr/VXB . . ISg/#r+ VP/J     R       . . ISgPl+ NPr/VXB NSg/C ISgPl+ NSg/VB/J NPr/J/R/P D+  NPr/J+ . .\n>\n#\n> “ Oh     , I’ll stay     in        the East   , don’t you    worry   , ” he       said , glancing at    Daisy and\n# . NPr/VB . K    NSg/VB/J NPr/J/R/P D   NPr/J+ . VXB   ISgPl+ N🅪Sg/VB . . NPr/ISg+ VP/J . Nᴹ/Vg/J  NSg/P NPr+  VB/C\n> then      back     at    me       , as    if    he       were     alert     for   something more         . “ I’d be       a   God     damned\n# NSg/J/R/C NSg/VB/J NSg/P NPr/ISg+ . R/C/P NSg/C NPr/ISg+ NSg/VLPt NSg/VB/J+ R/C/P NSg/I/J+  NPr/I/J/R/Dq . . K   NSg/VLXB D/P NPr/VB+ VP/J\n> fool     to live anywhere else    . ”\n# NSg/VB/J P  VB/J NSg/I    NSg/J/C . .\n>\n#\n> At    this    point   Miss   Baker said : “ Absolutely ! ” with such  suddenness that         I\n# NSg/P I/Ddem+ NSg/VB+ NSg/VB NPr+  VP/J . . R          . . P    NSg/I Nᴹ         NSg/I/C/Ddem ISg/#r+\n> started — it       was  the first word    she  had uttered since I       came      into the room       .\n# VP/J    . NPr/ISg+ VLPt D   NSg/J NSg/VB+ ISg+ VP  VP/J    C/P   ISg/#r+ NSg/VPt/P P    D   N🅪Sg/VB/J+ .\n> Evidently it       surprised her     as    much         as    it       did  me       , for   she  yawned and  with a\n# R         NPr/ISg+ VP/J      ISg/D$+ R/C/P NSg/I/J/R/Dq R/C/P NPr/ISg+ VXPt NPr/ISg+ . R/C/P ISg+ VP/J   VB/C P    D/P\n> series of rapid , deft movements stood up         into the room       .\n# NSgPl  P  NSg/J . J    NPl+      VP    NSg/VB/J/P P    D   N🅪Sg/VB/J+ .\n>\n#\n> “ I’m stiff    , ” she  complained , “ I’ve been     lying   on  that         sofa    for   as    long     as    I       can\n# . K   NSg/VB/J . . ISg+ VP/J       . . K    NSg/VLPp Nᴹ/Vg/J J/P NSg/I/C/Ddem NSg/VB+ R/C/P R/C/P NPr/VB/J R/C/P ISg/#r+ NPr/VXB\n> remember . ”\n# NSg/VB   . .\n>\n#\n> “ Don’t look   at    me       , ” Daisy retorted , “ ‘          I’ve been     trying  to get    you    to New   York\n# . VXB   NSg/VB NSg/P NPr/ISg+ . . NPr+  VP/J     . . Unlintable K    NSg/VLPp Nᴹ/Vg/J P  NSg/VB ISgPl+ P  NSg/J NPr+\n> all          afternoon . ”\n# NSg/I/J/C/Dq N🅪Sg+     . .\n>\n#\n> “ No       , thanks  , ” said Miss   Baker to the four cocktails just in        from the pantry ,\n# . NSg/Dq/P . NPl/V3+ . . VP/J NSg/VB NPr+  P  D+  NSg+ NPl/V3+   J/R  NPr/J/R/P P    D+  NSg+   .\n> “ I’m absolutely in        training . ”\n# . K   R          NPr/J/R/P Nᴹ/Vg/J+ . .\n>\n#\n> Her     host    looked at    her     incredulously .\n# ISg/D$+ NSg/VB+ VP/J   NSg/P ISg/D$+ R             .\n>\n#\n> “ You    are ! ” He       took down        his     drink   as    if    it       were     a   drop   in        the bottom   of a    glass      .\n# . ISgPl+ VLB . . NPr/ISg+ VPt  N🅪Sg/VB/J/P ISg/D$+ NSg/VB+ R/C/P NSg/C NPr/ISg+ NSg/VLPt D/P NSg/VB NPr/J/R/P D   NSg/VB/J P  D/P+ NPr🅪Sg/VB+ .\n> “ How   you    ever get    anything  done      is  beyond me       . ”\n# . NSg/C ISgPl+ J/R  NSg/VB NSg/I/VB+ NSg/VPp/J VL3 NSg/P  NPr/ISg+ . .\n>\n#\n> I       looked at    Miss   Baker , wondering what   it       was  she  “ got done      . ” I       enjoyed looking\n# ISg/#r+ VP/J   NSg/P NSg/VB NPr+  . Nᴹ/Vg/J   NSg/I+ NPr/ISg+ VLPt ISg+ . VP  NSg/VPp/J . . ISg/#r+ VP/J    Nᴹ/Vg/J\n> at    her     . She  was  a   slender , small    - breasted girl    , with an  erect carriage , which\n# NSg/P ISg/D$+ . ISg+ VLPt D/P J       . NPr/VB/J . VP/J     NSg/VB+ . P    D/P VB/J  NSg      . I/C+\n> she  accentuated by    throwing her     body    backward at    the shoulders like         a   young\n# ISg+ VP/J        NSg/P Nᴹ/Vg/J  ISg/D$+ NSg/VB+ NSg/J    NSg/P D   NPl/V3+   NSg/VB/J/C/P D/P NPr/VB/J\n> cadet . Her     gray            sun     - strained eyes    looked back     at    me       with polite reciprocal\n# NSg   . ISg/D$+ NPr🅪Sg/VB/J/Am+ NPr/VB+ . VP/J     NPl/V3+ VP/J   NSg/VB/J NSg/P NPr/ISg+ P    VB/J   NSg/J\n> curiosity out          of a   wan       , charming , discontented face    . It       occurred to me       now       that\n# NSg+      NSg/VB/J/R/P P  D/P NSg/VB/J+ . Nᴹ/Vg/J  . VP/J         NSg/VB+ . NPr/ISg+ VP       P  NPr/ISg+ NSg/J/R/C NSg/I/C/Ddem\n> I       had seen    her     , or    a   picture of her     , somewhere before .\n# ISg/#r+ VP  NSg/VPp ISg/D$+ . NPr/C D/P NSg/VB  P  ISg/D$+ . NSg       C/P    .\n>\n#\n> “ You    live in        West      Egg      , ” she  remarked contemptuously . “ I       know somebody there . ”\n# . ISgPl+ VB/J NPr/J/R/P NPr/VB/J+ N🅪Sg/VB+ . . ISg+ VP/J     R              . . ISg/#r+ VB   NSg/I+   R     . .\n>\n#\n> “ I       don’t know a   single   — ”\n# . ISg/#r+ VXB   VB   D/P NSg/VB/J . .\n>\n#\n> “ You    must    know Gatsby . ”\n# . ISgPl+ NSg/VXB VB   NPr    . .\n>\n#\n> “ Gatsby ? ” demanded Daisy . “ What   Gatsby ? ”\n# . NPr    . . VP/J     NPr+  . . NSg/I+ NPr    . .\n>\n#\n> Before I       could   reply   that          he       was  my  neighbor     dinner   was  announced ; wedging his\n# C/P    ISg/#r+ NSg/VXB NSg/VB+ NSg/I/C/Ddem+ NPr/ISg+ VLPt D$+ NSg/VB/J/Am+ N🅪Sg/VB+ VLPt VP/J      . Nᴹ/Vg/J ISg/D$+\n> tense    arm       imperatively under   mine      , Tom     Buchanan compelled me       from the room       as\n# NSg/VB/J NSg/VB/J+ R            NSg/J/P NSg/I/VB+ . NPr/VB+ NPr+     VP/J      NPr/ISg+ P    D   N🅪Sg/VB/J+ R/C/P\n> though he       were     moving  a   checker to another square   .\n# C      NPr/ISg+ NSg/VLPt Nᴹ/Vg/J D/P NSg/VB  P  I/D     NSg/VB/J .\n>\n#\n> Slenderly , languidly , their hands   set       lightly on  their hips    , the two young    women\n# R         . R         . D$+   NPl/V3+ NPr/VBP/J R       J/P D$+   NPl/V3+ . D   NSg NPr/VB/J NPl+\n> preceded us       out          onto a   rosy     - colored     porch , open     toward the sunset  , where   four\n# VP/J     NPr/IPl+ NSg/VB/J/R/P J/P  D/P NSg/VB/J . NSg/VP/J/Am NSg+  . NSg/VB/J J/P    D   NSg/VB+ . NSg/R/C NSg\n> candles flickered on  the table   in        the diminished wind     .\n# NPl/V3+ VP/J      J/P D   NSg/VB+ NPr/J/R/P D   VP/J       N🅪Sg/VB+ .\n>\n#\n> “ Why    candles ? ” objected Daisy , frowning . She  snapped them     out          with her     fingers .\n# . NSg/VB NPl/V3+ . . VP/J     NPr+  . Nᴹ/Vg/J  . ISg+ VP      NSg/IPl+ NSg/VB/J/R/P P    ISg/D$+ NPl/V3+ .\n> “ In        two  weeks  it’ll be       the longest day     in        the year . ” She  looked at    us       all\n# . NPr/J/R/P NSg+ NPrPl+ K     NSg/VLXB D   JS      NPr🅪Sg+ NPr/J/R/P D   NSg+ . . ISg+ VP/J   NSg/P NPr/IPl+ NSg/I/J/C/Dq\n> radiantly . “ Do  you    always watch  for   the longest day    of the year and  then      miss\n# R         . . VXB ISgPl+ R      NSg/VB R/C/P D   JS      NPr🅪Sg P  D+  NSg+ VB/C NSg/J/R/C NSg/VB\n> it       ? I       always watch  for   the longest day     in        the year and  then      miss   it       . ”\n# NPr/ISg+ . ISg/#r+ R      NSg/VB R/C/P D   JS+     NPr🅪Sg+ NPr/J/R/P D+  NSg+ VB/C NSg/J/R/C NSg/VB NPr/ISg+ . .\n>\n#\n> “ We   ought     to plan   something , ” yawned Miss   Baker , sitting  down        at    the table   as    if\n# . IPl+ NSg/I/VXB P  NSg/VB NSg/I/J+  . . VP/J   NSg/VB NPr+  . NSg/Vg/J N🅪Sg/VB/J/P NSg/P D+  NSg/VB+ R/C/P NSg/C\n> she  were     getting into bed        .\n# ISg+ NSg/VLPt NSg/Vg  P    NSg/VBP/J+ .\n>\n#\n> “ All          right    , ” said Daisy . ‘          ‘          What’ll we   plan    ? ” She  turned to me       helplessly : ‘          ‘          What\n# . NSg/I/J/C/Dq NPr/VB/J . . VP/J NPr+  . Unlintable Unlintable K       IPl+ NSg/VB+ . . ISg+ VP/J   P  NPr/ISg+ R          . Unlintable Unlintable NSg/I+\n> do  people  plan    ? ”\n# VXB NPl/VB+ NSg/VB+ . .\n>\n#\n> Before I       could   answer her     eyes    fastened with an  awed expression on  her     little\n# C/P    ISg/#r+ NSg/VXB NSg/VB ISg/D$+ NPl/V3+ VP/J     P    D/P VP/J N🅪Sg+      J/P ISg/D$+ NPr/I/J/Dq\n> finger  .\n# NSg/VB+ .\n>\n#\n> “ Look   ! ” she  complained ; “ I       hurt      it       . ”\n# . NSg/VB . . ISg+ VP/J       . . ISg/#r+ NSg/VBP/J NPr/ISg+ . .\n>\n#\n> We   all           looked — the knuckle was  black     and  blue      .\n# IPl+ NSg/I/J/C/Dq+ VP/J+  . D   NSg/VB  VLPt N🅪Sg/VB/J VB/C N🅪Sg/VB/J .\n>\n#\n> “ You    did  it       , Tom     , ” she  said accusingly . “ I       know you    didn’t mean     to , but     you    did\n# . ISgPl+ VXPt NPr/ISg+ . NPr/VB+ . . ISg+ VP/J R          . . ISg/#r+ VB   ISgPl+ VXPt   NSg/VB/J P  . NSg/C/P ISgPl+ VXPt\n> do  it       . That’s what   I       get    for   marrying a   brute    of a   man       , a   great , big   , hulking\n# VXB NPr/ISg+ . NSg$   NSg/I+ ISg/#r+ NSg/VB R/C/P Nᴹ/Vg/J  D/P NSg/VB/J P  D/P NPr/VB/J+ . D/P NSg/J . NSg/J . Nᴹ/Vg/J\n> physical specimen of a   — ” ’\n# NSg/J    NSg      P  D/P . . .\n>\n#\n> “ I       hate    that          word    hulking , ” objected Tom     crossly , “ even       in        kidding . ”\n# . ISg/#r+ N🅪Sg/VB NSg/I/C/Ddem+ NSg/VB+ Nᴹ/Vg/J . . VP/J     NPr/VB+ R       . . NSg/VB/J/R NPr/J/R/P NSg/Vg  . .\n>\n#\n> “ Hulking , ” insisted Daisy .\n# . Nᴹ/Vg/J . . VP/J     NPr+  .\n>\n#\n> Sometimes she  and  Miss   Baker talked at    once  , unobtrusively and  with a   bantering\n# R         ISg+ VB/C NSg/VB NPr+  VP/J   NSg/P NSg/C . R             VB/C P    D/P Nᴹ/Vg/J\n> inconsequence that          was  never quite chatter , that          was  as    cool     as    their white\n# Nᴹ            NSg/I/C/Ddem+ VLPt R     R     NSg/VB+ . NSg/I/C/Ddem+ VLPt R/C/P NSg/VB/J R/C/P D$+   NPr🅪Sg/VB/J\n> dresses and  their impersonal eyes    in        the absence of all          desire   . They were     here ,\n# NPl/V3+ VB/C D$+   NSg/J      NPl/V3+ NPr/J/R/P D   N🅪Sg    P  NSg/I/J/C/Dq N🅪Sg/VB+ . IPl+ NSg/VLPt J/R  .\n> and  they accepted Tom     and  me       , making  only  a   polite pleasant effort   to entertain\n# VB/C IPl+ VP/J     NPr/VB+ VB/C NPr/ISg+ . Nᴹ/Vg/J J/R/C D/P VB/J   NSg/J    N🅪Sg/VB+ P  NSg/VB\n> or    to be       entertained . They knew that         presently dinner   would be       over    and  a   little\n# NPr/C P  NSg/VLXB VP/J        . IPl+ VPt  NSg/I/C/Ddem R         N🅪Sg/VB+ VXB   NSg/VLXB NSg/J/P VB/C D/P NPr/I/J/Dq\n> later the evening    too would be       over    and  casually put     away . It       was  sharply\n# JC    D+  N🅪Sg/Vg/J+ R   VXB   NSg/VLXB NSg/J/P VB/C R        NSg/VBP VB/J . NPr/ISg+ VLPt R\n> different from the West      , where   an   evening    was  hurried from phase   to phase  toward\n# NSg/J     P    D+  NPr/VB/J+ . NSg/R/C D/P+ N🅪Sg/Vg/J+ VLPt VP/J    P    NPr/VB+ P  NPr/VB J/P\n> its     close    , in        a   continually disappointed anticipation or    else    in        sheer    nervous\n# ISg/D$+ NSg/VB/J . NPr/J/R/P D/P R           VP/J         Nᴹ+          NPr/C NSg/J/C NPr/J/R/P NSg/VB/J J\n> dread     of the moment itself .\n# N🅪Sg/VB/J P  D+  NSg+   ISg+   .\n>\n#\n> “ You    make   me       feel     uncivilized , Daisy , ” I       confessed on  my  second   glass      of corky\n# . ISgPl+ NSg/VB NPr/ISg+ NSg/I/VB VB/J        . NPr+  . . ISg/#r+ VP/J      J/P D$+ NSg/VB/J NPr🅪Sg/VB+ P  J\n> but     rather     impressive claret  . “ Can’t you    talk    about crops   or    something ? ”\n# NSg/C/P NPr/VB/J/R J          Nᴹ/VB/J . . VXB   ISgPl+ N🅪Sg/VB J/P   NPl/V3+ NPr/C NSg/I/J+  . .\n>\n#\n> I       meant nothing  in        particular by    this    remark  , but     it       was  taken up         in        an\n# ISg/#r+ VP    NSg/I/J+ NPr/J/R/P NSg/J      NSg/P I/Ddem+ NSg/VB+ . NSg/C/P NPr/ISg+ VLPt VPp/J NSg/VB/J/P NPr/J/R/P D/P+\n> unexpected way    .\n# NSg/J+     NSg/J+ .\n>\n#\n> “ Civilization’s going   to pieces , ” broke     out          Tom     violently . “ I’ve gotten to be       a\n# . NPr$           Nᴹ/Vg/J P  NPl/V3 . . NSg/VPt/J NSg/VB/J/R/P NPr/VB+ R         . . K    VPp/J  P  NSg/VLXB D/P\n> terrible pessimist about things . Have    you    read    ‘          The Rise   of the Colored     Empires ’\n# J        NSg       J/P   NPl+   . NSg/VXB ISgPl+ NSg/VBP Unlintable D   NSg/VB P  D+  NSg/VP/J/Am NPl+    .\n> by    this    man       Goddard ? ”\n# NSg/P I/Ddem+ NPr/VB/J+ NPr+    . .\n>\n#\n> “ Why    , no       , ” I       answered , rather     surprised by    his     tone       .\n# . NSg/VB . NSg/Dq/P . . ISg/#r+ VP/J     . NPr/VB/J/R VP/J      NSg/P ISg/D$+ N🅪Sg/I/VB+ .\n>\n#\n> “ Well       , it’s a    fine     book    , and  everybody ought     to read    it       . The idea is  if    we   don’t\n# . NSg/VB/J/R . K    D/P+ NSg/VB/J NSg/VB+ . VB/C NSg/I+    NSg/I/VXB P  NSg/VBP NPr/ISg+ . D+  NSg+ VL3 NSg/C IPl+ VXB\n> look   out          the white       race     will    be       — will    be       utterly submerged . It’s all           scientific\n# NSg/VB NSg/VB/J/R/P D   NPr🅪Sg/VB/J N🅪Sg/VB+ NPr/VXB NSg/VLXB . NPr/VXB NSg/VLXB R       VP/J      . K    NSg/I/J/C/Dq+ J\n> stuff  ; it’s been     proved . ”\n# Nᴹ/VB+ . K    NSg/VLPp VP/J   . .\n>\n#\n> “ Tom’s getting very profound , ” said Daisy , with an  expression of unthoughtful\n# . NPr$  NSg/Vg  J/R  NSg/VB/J . . VP/J NPr+  . P    D/P N🅪Sg       P  J\n> sadness . “ He       reads  deep  books  with long      words   in        them     . What   was  that         word   we   — — — ”\n# Nᴹ+     . . NPr/ISg+ NPl/V3 NSg/J NPl/V3 P    NPr/VB/J+ NPl/V3+ NPr/J/R/P NSg/IPl+ . NSg/I+ VLPt NSg/I/C/Ddem NSg/VB IPl+ . . . .\n>\n#\n> “ Well       , these   books   are all          scientific , ” insisted Tom     , glancing at    her\n# . NSg/VB/J/R . I/Ddem+ NPl/V3+ VLB NSg/I/J/C/Dq J          . . VP/J     NPr/VB+ . Nᴹ/Vg/J  NSg/P ISg/D$+\n> impatiently . “ This   fellow has worked out          the whole  thing . It’s up         to us       , who    are\n# R           . . I/Ddem NSg    V3  VP/J   NSg/VB/J/R/P D+  NSg/J+ NSg+  . K    NSg/VB/J/P P  NPr/IPl+ . NPr/I+ VLB\n> the dominant race     , to watch  out          or    these  other    races   will    have    control of\n# D   NSg/J    N🅪Sg/VB+ . P  NSg/VB NSg/VB/J/R/P NPr/C I/Ddem NSg/VB/J NPl/V3+ NPr/VXB NSg/VXB N🅪Sg/VB P\n> things . ”\n# NPl+   . .\n>\n#\n> “ We’ve got to beat      them     down        , ” whispered Daisy , winking ferociously toward the\n# . K     VP  P  N🅪Sg/VB/J NSg/IPl+ N🅪Sg/VB/J/P . . VP/J      NPr+  . Nᴹ/Vg/J R           J/P    D\n> fervent sun     .\n# J       NPr/VB+ .\n>\n#\n> “ You    ought     to live in        California — ” began Miss   Baker , but     Tom     interrupted her     by\n# . ISgPl+ NSg/I/VXB P  VB/J NPr/J/R/P NPr+       . . VPt   NSg/VB NPr+  . NSg/C/P NPr/VB+ VP/J        ISg/D$+ NSg/P\n> shifting heavily in        his     chair   .\n# Nᴹ/Vg/J+ R       NPr/J/R/P ISg/D$+ NSg/VB+ .\n>\n#\n> “ This    idea is  that          we’re Nordics . I       am        , and  you    are , and  you    are , and  — ” After an\n# . I/Ddem+ NSg+ VL3 NSg/I/C/Ddem+ K     NPl     . ISg/#r+ NPr/VLB/J . VB/C ISgPl+ VLB . VB/C ISgPl+ VLB . VB/C . . P     D/P\n> infinitesimal hesitation he       included Daisy with a   slight   nod    , and  she  winked at\n# NSg/J         NSg+       NPr/ISg+ VP/J     NPr+  P    D/P NSg/VB/J NSg/VB . VB/C ISg+ VP/J   NSg/P\n> me       again . ‘          ‘          — And  we’ve produced all          the things that          go       to make   civilization — oh     ,\n# NPr/ISg+ P     . Unlintable Unlintable . VB/C K     VP/J     NSg/I/J/C/Dq D   NPl+   NSg/I/C/Ddem+ NSg/VB/J P  NSg/VB NPr🅪Sg+      . NPr/VB .\n> science and  art        , and  all          that          . Do  you    see    ? ”\n# N🅪Sg/VB VB/C NPr🅪Sg/VB+ . VB/C NSg/I/J/C/Dq NSg/I/C/Ddem+ . VXB ISgPl+ NSg/VB . .\n>\n#\n> There was  something pathetic in        his     concentration , as    if    his     complacency , more\n# R+    VLPt NSg/I/J+  J        NPr/J/R/P ISg/D$+ NSg+          . R/C/P NSg/C ISg/D$+ NSg         . NPr/I/J/R/Dq\n> acute    than of old   , was  not     enough to him  any    more         . When    , almost immediately , the\n# NSg/VB/J C/P  P  NSg/J . VLPt NSg/R/C NSg/I  P  ISg+ I/R/Dq NPr/I/J/R/Dq . NSg/I/C . R      R           . D+\n> telephone rang inside  and  the butler left     the porch Daisy seized upon the\n# NSg/VB+   VPt  NSg/J/P VB/C D   NPr/VB NPr/VP/J D   NSg+  NPr+  VP/J   P    D\n> momentary interruption and  leaned toward me       .\n# J         N🅪Sg+        VB/C VP/J   J/P    NPr/ISg+ .\n>\n#\n> “ I’ll tell   you    a   family  secret   , ” she  whispered enthusiastically . “ It’s about the\n# . K    NPr/VB ISgPl+ D/P N🅪Sg/J+ NSg/VB/J . . ISg+ VP/J      R                . . K    J/P   D\n> butler’s nose    . Do  you    want   to hear about the butler’s nose    ? ”\n# NPr$     NSg/VB+ . VXB ISgPl+ NSg/VB P  VB   J/P   D   NPr$     NSg/VB+ . .\n>\n#\n> “ That’s why    I       came      over    to - night    . ”\n# . NSg$   NSg/VB ISg/#r+ NSg/VPt/P NSg/J/P P  . N🅪Sg/VB+ . .\n>\n#\n> “ Well       , he       wasn’t always a   butler ; he       used to be       the silver   polisher for   some\n# . NSg/VB/J/R . NPr/ISg+ VPt    R      D/P NPr/VB . NPr/ISg+ VP/J P  NSg/VLXB D   Nᴹ/VB/J+ NSg/JC   R/C/P I/J/R/Dq\n> people  in        New   York that          had a   silver   service for   two hundred people  . He       had to\n# NPl/VB+ NPr/J/R/P NSg/J NPr+ NSg/I/C/Ddem+ VP  D/P Nᴹ/VB/J+ NSg/VB+ R/C/P NSg NSg     NPl/VB+ . NPr/ISg+ VP  P\n> polish   it       from morning    till       night    , until finally it       began to affect his     nose    — — — ”\n# NSg/VB/J NPr/ISg+ P    N🅪Sg/Vg/J+ NSg/VB/C/P N🅪Sg/VB+ . C/P   R       NPr/ISg+ VPt   P  NSg/VB ISg/D$+ NSg/VB+ . . . .\n>\n#\n> “ Things went    from bad      to worse     , ” suggested Miss   Baker .\n# . NPl+   NSg/VPt P    NSg/VB/J P  NSg/VB/JC . . VP/J      NSg/VB NPr+  .\n>\n#\n> “ Yes    . Things went    from bad      to worse     , until finally he       had to give   up         his\n# . NPl/VB . NPl+   NSg/VPt P    NSg/VB/J P  NSg/VB/JC . C/P   R       NPr/ISg+ VP  P  NSg/VB NSg/VB/J/P ISg/D$+\n> position . ”\n# NSg/VB+  . .\n>\n#\n> For   a    moment the last      sunshine fell      with romantic affection upon her     glowing\n# R/C/P D/P+ NSg+   D+  NSg/VB/J+ Nᴹ/J+    NSg/VPt/J P    NSg/J+   Nᴹ+       P    ISg/D$+ Nᴹ/Vg/J\n> face    ; her     voice   compelled me       forward  breathlessly as    I       listened — then      the glow\n# NSg/VB+ . ISg/D$+ NSg/VB+ VP/J      NPr/ISg+ NSg/VB/J R            R/C/P ISg/#r+ VP/J     . NSg/J/R/C D   NSg/VB+\n> faded , each light      deserting her     with lingering regret   , like         children leaving a\n# J     . Dq   N🅪Sg/VB/J+ Nᴹ/Vg/J   ISg/D$+ P    Nᴹ/Vg/J   N🅪Sg/VB+ . NSg/VB/J/C/P NPl+     Nᴹ/Vg/J D/P\n> pleasant street    at    dusk     .\n# NSg/J    NSg/VB/J+ NSg/P Nᴹ/VB/J+ .\n>\n#\n> The butler came      back     and  murmured something close    to Tom’s ear       , whereupon Tom\n# D   NPr/VB NSg/VPt/P NSg/VB/J VB/C VP/J     NSg/I/J+  NSg/VB/J P  NPr$  NSg/VB/J+ . C         NPr/VB+\n> frowned , pushed back     his     chair   , and  without a   word    went    inside  . As    if    his\n# VP/J    . VP/J   NSg/VB/J ISg/D$+ NSg/VB+ . VB/C C/P     D/P NSg/VB+ NSg/VPt NSg/J/P . R/C/P NSg/C ISg/D$+\n> absence quickened something within  her     , Daisy leaned forward  again , her     voice\n# N🅪Sg+   VP/J      NSg/I/J+  NSg/J/P ISg/D$+ . NPr+  VP/J   NSg/VB/J P     . ISg/D$+ NSg/VB+\n> glowing and  singing .\n# Nᴹ/Vg/J VB/C Nᴹ/Vg/J .\n>\n#\n> “ I       love      to see    you    at    my  table   , Nick    . You    remind me       of a   — of a    rose       , an   absolute\n# . ISg/#r+ NPr🅪Sg/VB P  NSg/VB ISgPl+ NSg/P D$+ NSg/VB+ . NPr/VB+ . ISgPl+ NSg/VB NPr/ISg+ P  D/P . P  D/P+ NPr/VPt/J+ . D/P+ NSg/J+\n> rose       . Doesn’t he       ? ” She  turned to Miss   Baker for   confirmation : “ An   absolute\n# NPr/VPt/J+ . VX3     NPr/ISg+ . . ISg+ VP/J   P  NSg/VB NPr+  R/C/P N🅪Sg+        . . D/P+ NSg/J+\n> rose       ? ”\n# NPr/VPt/J+ . .\n>\n#\n> This    was  untrue . I       am        not     even       faintly like         a    rose       . She  was  only  extemporizing ,\n# I/Ddem+ VLPt J      . ISg/#r+ NPr/VLB/J NSg/R/C NSg/VB/J/R R       NSg/VB/J/C/P D/P+ NPr/VPt/J+ . ISg+ VLPt J/R/C Nᴹ/Vg/J       .\n> but     a   stirring warmth flowed from her     , as    if    her     heart    was  trying  to come       out          to\n# NSg/C/P D/P NSg/Vg/J Nᴹ+    VP/J   P    ISg/D$+ . R/C/P NSg/C ISg/D$+ N🅪Sg/VB+ VLPt Nᴹ/Vg/J P  NSg/VBPp/P NSg/VB/J/R/P P\n> you    concealed in        one     of those  breathless , thrilling words   . Then      suddenly she\n# ISgPl+ VP/J      NPr/J/R/P NSg/I/J P  I/Ddem J          . Nᴹ/Vg/J   NPl/V3+ . NSg/J/R/C R        ISg+\n> threw her     napkin on  the table   and  excused herself and  went    into the house   .\n# VPt   ISg/D$+ NSg+   J/P D+  NSg/VB+ VB/C VP/J    ISg+    VB/C NSg/VPt P    D+  NPr/VB+ .\n>\n#\n> Miss   Baker and  I       exchanged a    short       glance  consciously devoid of meaning    . I       was\n# NSg/VB NPr+  VB/C ISg/#r+ VP/J      D/P+ NPr/VB/J/P+ NSg/VB+ R           VB/J   P  N🅪Sg/Vg/J+ . ISg/#r+ VLPt\n> about to speak  when    she  sat      up         alertly and  said “ Sh ! ” in        a    warning    voice   . A\n# J/P   P  NSg/VB NSg/I/C ISg+ NSg/VP/J NSg/VB/J/P R       VB/C VP/J . W? . . NPr/J/R/P D/P+ N🅪Sg/Vg/J+ NSg/VB+ . D/P\n> subdued impassioned murmur was  audible  in        the room       beyond , and  Miss   Baker leaned\n# VP/J    J           NSg/VB VLPt NSg/VB/J NPr/J/R/P D   N🅪Sg/VB/J+ NSg/P  . VB/C NSg/VB NPr+  VP/J\n> forward  unashamed , trying  to hear . The murmur trembled on  the verge  of\n# NSg/VB/J J         . Nᴹ/Vg/J P  VB   . D   NSg/VB VP/J     J/P D   NSg/VB P\n> coherence , sank down        , mounted excitedly , and  then      ceased altogether .\n# NSg+      . VPt  N🅪Sg/VB/J/P . VP/J    R         . VB/C NSg/J/R/C VP/J   NSg        .\n>\n#\n> “ This    Mr   . Gatsby you    spoke   of is  my  neighbor     — ” ’ I       began .\n# . I/Ddem+ NSg+ . NPr    ISgPl+ NSg/VPt P  VL3 D$+ NSg/VB/J/Am+ . . . ISg/#r+ VPt   .\n>\n#\n> “ Don’t talk    . I       want   to hear what   happens . ”\n# . VXB   N🅪Sg/VB . ISg/#r+ NSg/VB P  VB   NSg/I+ V3      . .\n>\n#\n> “ Is  something happening ? ” I       inquired innocently .\n# . VL3 NSg/I/J+  N🅪Sg/Vg/J . . ISg/#r+ VP/J     R          .\n>\n#\n> “ You    mean     to say    you    don’t know ? ” said Miss   Baker , honestly surprised . “ I\n# . ISgPl+ NSg/VB/J P  NSg/VB ISgPl+ VXB   VB   . . VP/J NSg/VB NPr+  . R        VP/J      . . ISg/#r+\n> thought everybody knew . ”\n# N🅪Sg/VP NSg/I+    VPt  . .\n>\n#\n> “ I       don’t . ”\n# . ISg/#r+ VXB   . .\n>\n#\n> “ Why    — ” she  said hesitantly , ‘          ‘          Tom’s got some     woman   in        New   York . ”\n# . NSg/VB . . ISg+ VP/J R          . Unlintable Unlintable NPr$  VP  I/J/R/Dq NSg/VB+ NPr/J/R/P NSg/J NPr+ . .\n>\n#\n> “ Got some      woman   ? ” I       repeated blankly .\n# . VP  I/J/R/Dq+ NSg/VB+ . . ISg/#r+ VP/J     R       .\n>\n#\n> Miss   Baker nodded .\n# NSg/VB NPr+  VP     .\n>\n#\n> “ She  might    have    the decency not     to telephone him  at    dinner   time       . Don’t you\n# . ISg+ Nᴹ/VXB/J NSg/VXB D   NSg     NSg/R/C P  NSg/VB    ISg+ NSg/P N🅪Sg/VB+ N🅪Sg/VB/J+ . VXB   ISgPl+\n> think  ? ”\n# NSg/VB . .\n>\n#\n> Almost before I       had grasped her     meaning    there was  the flutter of a   dress   and  the\n# R      C/P    ISg/#r+ VP  VP/J    ISg/D$+ N🅪Sg/Vg/J+ R+    VLPt D   NSg/VB  P  D/P NSg/VB+ VB/C D\n> crunch of leather    boots   , and  Tom    and  Daisy were     back     at    the table   .\n# NSg/VB P  N🅪Sg/VB/J+ NPl/V3+ . VB/C NPr/VB VB/C NPr+  NSg/VLPt NSg/VB/J NSg/P D+  NSg/VB+ .\n>\n#\n> “ It       couldn’t be       helped ! ” cried Daisy with tense    gayety .\n# . NPr/ISg+ VXB      NSg/VLXB VP/J   . . VP/J  NPr+  P    NSg/VB/J ?      .\n>\n#\n> She  sat      down        , glanced searchingly at    Miss   Baker and  then      at    me       , and  continued :\n# ISg+ NSg/VP/J N🅪Sg/VB/J/P . VP/J    R           NSg/P NSg/VB NPr+  VB/C NSg/J/R/C NSg/P NPr/ISg+ . VB/C VP/J      .\n> “ I       looked outdoors for   a   minute    , and  it’s very romantic outdoors . There’s a   bird\n# . ISg/#r+ VP/J   NSg/V3   R/C/P D/P NSg/VB/J+ . VB/C K    J/R  NSg/J    NSg/V3   . K       D/P NPr/VB/J+\n> on  the lawn    that          I       think  must    be       a   nightingale come       over    on  the Cunard or    White\n# J/P D   NSg/VB+ NSg/I/C/Ddem+ ISg/#r+ NSg/VB NSg/VXB NSg/VLXB D/P NPr         NSg/VBPp/P NSg/J/P J/P D   NPr    NPr/C NPr🅪Sg/VB/J\n> Star    Line    . He’s singing away — ” Her     voice   sang    : “ It’s romantic , isn’t   it       , Tom     ? ”\n# NSg/VB+ NSg/VB+ . NPr$ Nᴹ/Vg/J VB/J . . ISg/D$+ NSg/VB+ NPr/VPt . . K    NSg/J    . NSg/VX3 NPr/ISg+ . NPr/VB+ . .\n>\n#\n> “ Very romantic , ” he       said , and  then      miserably to me       : “ If    it’s light      enough after\n# . J/R  NSg/J    . . NPr/ISg+ VP/J . VB/C NSg/J/R/C R         P  NPr/ISg+ . . NSg/C K    N🅪Sg/VB/J+ NSg/I  P\n> dinner   , I       want   to take   you    down        to the stables . ”\n# N🅪Sg/VB+ . ISg/#r+ NSg/VB P  NSg/VB ISgPl+ N🅪Sg/VB/J/P P  D   NPl/V3+ . .\n>\n#\n> The telephone rang inside  , startingly , and  as    Daisy shook     her     head      decisively at\n# D+  NSg/VB+   VPt  NSg/J/P . R          . VB/C R/C/P NPr+  NSg/VPt/J ISg/D$+ NPr/VB/J+ R          NSg/P\n> Tom     the subject  of the stables , in        fact all          subjects , vanished into air      . Among\n# NPr/VB+ D   NSg/VB/J P  D   NPl/V3+ . NPr/J/R/P NSg+ NSg/I/J/C/Dq NPl/V3+  . VP/J     P    N🅪Sg/VB+ . P\n> the broken fragments of the last     five minutes at    table   I       remember the candles\n# D   VPp/J  NPl/V3    P  D   NSg/VB/J NSg  NPl/V3+ NSg/P NSg/VB+ ISg/#r+ NSg/VB   D+  NPl/V3+\n> being        lit      again , pointlessly , and  I       was  conscious of wanting to look   squarely at\n# N🅪Sg/VLg/J/C NSg/VP/J P     . R           . VB/C ISg/#r+ VLPt NSg/J     P  Nᴹ/Vg/J P  NSg/VB R        NSg/P\n> every one      , and  yet      to avoid all          eyes    . I       couldn’t guess  what   Daisy and  Tom     were\n# Dq    NSg/I/J+ . VB/C NSg/VB/C P  VB    NSg/I/J/C/Dq NPl/V3+ . ISg/#r+ VXB      NSg/VB NSg/I+ NPr   VB/C NPr/VB+ NSg/VLPt\n> thinking , but     I       doubt   if    even       Miss   Baker , who    seemed to have    mastered a   certain\n# Nᴹ/Vg/J  . NSg/C/P ISg/#r+ N🅪Sg/VB NSg/C NSg/VB/J/R NSg/VB NPr+  . NPr/I+ VP/J   P  NSg/VXB VP/J     D/P I/J\n> hardy scepticism , was  able     utterly to put     this   fifth    guest’s shrill   metallic\n# NPr/J Nᴹ/Au/Br   . VLPt NSg/VB/J R       P  NSg/VBP I/Ddem NSg/VB/J NSg$    NSg/VB/J NSg/J\n> urgency out          of mind    . To a    certain temperament the situation might    have    seemed\n# NSg     NSg/VB/J/R/P P  NSg/VB+ . P  D/P+ I/J+    NSg+        D+  NSg+      Nᴹ/VXB/J NSg/VXB VP/J\n> intriguing — my  own       instinct was  to telephone immediately for   the police .\n# Nᴹ/Vg/J    . D$+ NSg/VB/J+ NSg/J+   VLPt P  NSg/VB    R           R/C/P D+  Nᴹ/VB+ .\n>\n#\n> The horses  , needless to say    , were     not     mentioned again . Tom     and  Miss   Baker , with\n# D+  NPl/V3+ . J        P  NSg/VB . NSg/VLPt NSg/R/C VP/J      P     . NPr/VB+ VB/C NSg/VB NPr+  . P\n> several feet of twilight between them     , strolled back     into the library , as    if    to\n# J/Dq    NPl  P  Nᴹ/VB/J+ NSg/P   NSg/IPl+ . VP/J     NSg/VB/J P    D+  NSg+    . R/C/P NSg/C P\n> a   vigil  beside a   perfectly tangible body    , while      , trying  to look   pleasantly\n# D/P NSg/VB P      D/P R         NSg/J    NSg/VB+ . NSg/VB/C/P . Nᴹ/Vg/J P  NSg/VB R\n> interested and  a   little     deaf     , I       followed Daisy around a   chain   of connecting\n# VP/J       VB/C D/P NPr/I/J/Dq NSg/VB/J . ISg/#r+ VP/J     NPr+  J/P    D/P N🅪Sg/VB P  Nᴹ/Vg/J\n> verandas    to the porch in        front     . In        its     deep   gloom  we   sat      down        side      by    side      on  a\n# NPl/NoAm/Br P  D   NSg+  NPr/J/R/P NSg/VB/J+ . NPr/J/R/P ISg/D$+ NSg/J+ Nᴹ/VB+ IPl+ NSg/VP/J N🅪Sg/VB/J/P NSg/VB/J+ NSg/P NSg/VB/J+ J/P D/P\n> wicker settee .\n# NSg/JC NSg    .\n>\n#\n> Daisy took her     face    in        her     hands   as    if     feeling   its     lovely shape    , and  her     eyes\n# NPr+  VPt  ISg/D$+ NSg/VB+ NPr/J/R/P ISg/D$+ NPl/V3+ R/C/P NSg/C+ N🅪Sg/Vg/J ISg/D$+ NSg/J+ N🅪Sg/VB+ . VB/C ISg/D$+ NPl/V3+\n> moved gradually out          into the velvet   dusk     . I       saw     that         turbulent emotions\n# VP/J  R         NSg/VB/J/R/P P    D+  Nᴹ/VB/J+ Nᴹ/VB/J+ . ISg/#r+ NSg/VPt NSg/I/C/Ddem J         NPl+\n> possessed her     , so          I       asked what   I       thought would be       some     sedative questions about\n# VP/J      ISg/D$+ . NSg/I/J/R/C ISg/#r+ VP/J  NSg/I+ ISg/#r+ N🅪Sg/VP VXB   NSg/VLXB I/J/R/Dq NSg/J    NPl/V3+   J/P\n> her     little     girl    .\n# ISg/D$+ NPr/I/J/Dq NSg/VB+ .\n>\n#\n> “ We   don’t know each other    very well       , Nick    , ” she  said suddenly . “ Even       if    we   are\n# . IPl+ VXB   VB   Dq   NSg/VB/J J/R  NSg/VB/J/R . NPr/VB+ . . ISg+ VP/J R        . . NSg/VB/J/R NSg/C IPl+ VLB\n> cousins . You    didn’t come       to my  wedding . ”\n# NPl/V3+ . ISgPl+ VXPt   NSg/VBPp/P P  D$+ NSg/Vg+ . .\n>\n#\n> “ I       wasn’t back     from the war      . ”\n# . ISg/#r+ VPt    NSg/VB/J P    D   N🅪Sg/VB+ . .\n>\n#\n> “ That’s true     . ” She  hesitated . “ Well       , I’ve had a   very bad      time       , Nick    , and  I’m\n# . NSg$   NSg/VB/J . . ISg+ VP/J      . . NSg/VB/J/R . K    VP  D/P J/R  NSg/VB/J N🅪Sg/VB/J+ . NPr/VB+ . VB/C K\n> pretty     cynical about everything . ”\n# NSg/VB/J/R J       J/P   NSg/I/VB+  . .\n>\n#\n> Evidently she  had reason   to be       . I       waited but     she  didn’t say    any    more         , and  after\n# R         ISg+ VP  N🅪Sg/VB+ P  NSg/VLXB . ISg/#r+ VP/J   NSg/C/P ISg+ VXPt   NSg/VB I/R/Dq NPr/I/J/R/Dq . VB/C P\n> a   moment I       returned rather     feebly to the subject  of her     daughter .\n# D/P NSg+   ISg/#r+ VP/J     NPr/VB/J/R R      P  D   NSg/VB/J P  ISg/D$+ NSg+     .\n>\n#\n> “ I       suppose she  talks   , and  — eats , and  everything . ”\n# . ISg/#r+ VB      ISg+ NPl/V3+ . VB/C . V3   . VB/C NSg/I/VB+  . .\n>\n#\n> “ Oh     , yes    . ” She  looked at    me       absently . “ Listen , Nick    ; let     me       tell   you    what   I       said\n# . NPr/VB . NPl/VB . . ISg+ VP/J   NSg/P NPr/ISg+ R        . . NSg/VB . NPr/VB+ . NSg/VBP NPr/ISg+ NPr/VB ISgPl+ NSg/I+ ISg/#r+ VP/J\n> when    she  was  born     . Would you    like         to hear ? ”\n# NSg/I/C ISg+ VLPt NPr/VB/J . VXB   ISgPl+ NSg/VB/J/C/P P  VB   . .\n>\n#\n> “ Very much         . ”\n# . J/R  NSg/I/J/R/Dq . .\n>\n#\n> “ I’ll show   you    how   I’ve gotten to feel     about — things . Well       , she  was  less       than an\n# . K    NSg/VB ISgPl+ NSg/C K    VPp/J  P  NSg/I/VB J/P   . NPl+   . NSg/VB/J/R . ISg+ VLPt VB/J/R/C/P C/P  D/P\n> hour old   and  Tom     was  God     knows where   . I       woke     up         out          of the ether with an  utterly\n# NSg  NSg/J VB/C NPr/VB+ VLPt NPr/VB+ V3    NSg/R/C . ISg/#r+ NSg/VB/J NSg/VB/J/P NSg/VB/J/R/P P  D   Nᴹ/VB P    D/P R\n> abandoned feeling   , and  asked the nurse   right    away if    it       was  a   boy    or    a   girl    . She\n# VP/J      N🅪Sg/Vg/J . VB/C VP/J  D   NSg/VB+ NPr/VB/J VB/J NSg/C NPr/ISg+ VLPt D/P NSg/VB NPr/C D/P NSg/VB+ . ISg+\n> told me       it       was  a   girl   , and  so          I       turned my  head      away and  wept . ‘          All          right    , ’ I\n# VP   NPr/ISg+ NPr/ISg+ VLPt D/P NSg/VB . VB/C NSg/I/J/R/C ISg/#r+ VP/J   D$+ NPr/VB/J+ VB/J VB/C VB   . Unlintable NSg/I/J/C/Dq NPr/VB/J . . ISg/#r+\n> said , ‘          I’m glad     it’s a   girl    . And  I       hope      she’ll be       a   fool      — that’s the best       thing a\n# VP/J . Unlintable K   NSg/VB/J K    D/P NSg/VB+ . VB/C ISg/#r+ NPr🅪Sg/VB K      NSg/VLXB D/P NSg/VB/J+ . NSg$   D   NPr/VXB/JS NSg+  D/P\n> girl    can     be       in        this   world   , a   beautiful little     fool      . ’\n# NSg/VB+ NPr/VXB NSg/VLXB NPr/J/R/P I/Ddem NSg/VB+ . D/P NSg/J     NPr/I/J/Dq NSg/VB/J+ . .\n>\n#\n> “ You    see    I       think  everything’s terrible anyhow , ” she  went    on  in        a   convinced way    .\n# . ISgPl+ NSg/VB ISg/#r+ NSg/VB NSg$         J        J      . . ISg+ NSg/VPt J/P NPr/J/R/P D/P VP/J      NSg/J+ .\n> “ Everybody thinks so          — the most         advanced people  . And  I       know . I’ve been     everywhere\n# . NSg/I+    NPl/V3 NSg/I/J/R/C . D   NSg/I/J/R/Dq VP/J+    NPl/VB+ . VB/C ISg/#r+ VB   . K    NSg/VLPp Nᴹ/R\n> and  seen    everything and  done      everything . ” Her     eyes    flashed around her     in        a\n# VB/C NSg/VPp NSg/I/VB+  VB/C NSg/VPp/J NSg/I/VB+  . . ISg/D$+ NPl/V3+ VP/J    J/P    ISg/D$+ NPr/J/R/P D/P\n> defiant way    , rather     like         Tom’s , and  she  laughed with thrilling scorn   .\n# NSg/J   NSg/J+ . NPr/VB/J/R NSg/VB/J/C/P NPr$  . VB/C ISg+ VP/J    P    Nᴹ/Vg/J   NSg/VB+ .\n> “ Sophisticated — God     , I’m sophisticated ! ”\n# . VP/J          . NPr/VB+ . K   VP/J          . .\n>\n#\n> The instant   her     voice   broke     off        , ceasing to compel my  attention , my  belief , I\n# D+  NSg/VB/J+ ISg/D$+ NSg/VB+ NSg/VPt/J NSg/VB/J/P . Nᴹ/Vg/J P  VB     D$+ NSg+      . D$+ N🅪Sg+  . ISg/#r+\n> felt      the basic insincerity of what   she  had said . It       made me       uneasy   , as    though\n# N🅪Sg/VP/J D   NPr/J Nᴹ          P  NSg/I+ ISg+ VP  VP/J . NPr/ISg+ VP   NPr/ISg+ NSg/VB/J . R/C/P C\n> the whole  evening    had been     a   trick    of some      sort    to exact a   contributary emotion\n# D+  NSg/J+ N🅪Sg/Vg/J+ VP  NSg/VLPp D/P NSg/VB/J P  I/J/R/Dq+ NSg/VB+ P  VB/J  D/P ?            N🅪Sg+\n> from me       . I       waited , and  sure enough , in        a    moment she  looked at    me       with an\n# P    NPr/ISg+ . ISg/#r+ VP/J   . VB/C J    NSg/I  . NPr/J/R/P D/P+ NSg+   ISg+ VP/J   NSg/P NPr/ISg+ P    D/P+\n> absolute smirk     on  her     lovely face    , as    if    she  had asserted her     membership in        a\n# NSg/J+   NSg/VB/J+ J/P ISg/D$+ NSg/J+ NSg/VB+ . R/C/P NSg/C ISg+ VP  VP/J     ISg/D$+ N🅪Sg/VB+   NPr/J/R/P D/P\n> rather     distinguished secret   society to which she  and  Tom     belonged .\n# NPr/VB/J/R VP/J          NSg/VB/J N🅪Sg    P  I/C+  ISg+ VB/C NPr/VB+ VP/J     .\n>\n#\n> Inside  , the crimson   room       bloomed with light      . Tom     and  Miss   Baker sat      at    either\n# NSg/J/P . D+  NSg/VB/J+ N🅪Sg/VB/J+ VP/J    P    N🅪Sg/VB/J+ . NPr/VB+ VB/C NSg/VB NPr+  NSg/VP/J NSg/P I/C\n> end    of the long      couch   and  she  read    aloud to him  from the Saturday Evening\n# NSg/VB P  D+  NPr/VB/J+ NSg/VB+ VB/C ISg+ NSg/VBP J     P  ISg+ P    D+  NSg/VB+  N🅪Sg/Vg/J+\n> Post         — the words   , murmurous and  uninflected , running   together in        a   soothing tune    .\n# NPr🅪Sg/VB/P+ . D+  NPl/V3+ . J         VB/C J           . Nᴹ/Vg/J/P J        NPr/J/R/P D/P Nᴹ/Vg/J  NSg/VB+ .\n> The lamp    - light      , bright   on  his     boots   and  dull on  the autumn     - leaf   yellow   of her\n# D   NSg/VB+ . N🅪Sg/VB/J+ . NPr/VB/J J/P ISg/D$+ NPl/V3+ VB/C VB/J J/P D   NPr🅪Sg/VB+ . NSg/VB NSg/VB/J P  ISg/D$+\n> hair     , glinted along the paper      as    she  turned a   page    with a   flutter of slender\n# N🅪Sg/VB+ . VP/J    P     D+  N🅪Sg/VB/J+ R/C/P ISg+ VP/J   D/P NPr/VB+ P    D/P NSg/VB  P  J\n> muscles in        her     arms    .\n# NPl/V3+ NPr/J/R/P ISg/D$+ NPl/V3+ .\n>\n#\n> When    we   came      in        she  held us       silent for   a   moment with a    lifted hand    .\n# NSg/I/C IPl+ NSg/VPt/P NPr/J/R/P ISg+ VP   NPr/IPl+ NSg/J  R/C/P D/P NSg+   P    D/P+ VP/J   NSg/VB+ .\n>\n#\n> “ To be       continued , ” she  said , tossing the magazine on  the table   , “ in        our very\n# . P  NSg/VLXB VP/J      . . ISg+ VP/J . Nᴹ/Vg/J D   NSg+     J/P D   NSg/VB+ . . NPr/J/R/P D$+ J/R\n> next    issue   . ”\n# NSg/J/P NSg/VB+ . .\n>\n#\n> Her     body    asserted itself with a   restless movement of her     knee    , and  she  stood up         .\n# ISg/D$+ NSg/VB+ VP/J     ISg+   P    D/P J        N🅪Sg     P  ISg/D$+ NSg/VB+ . VB/C ISg+ VP    NSg/VB/J/P .\n>\n#\n> “ Ten o’clock , ” she  remarked , apparently finding the time       on  the ceiling . “ Time\n# . NSg R       . . ISg+ VP/J     . R          Nᴹ/Vg/J D   N🅪Sg/VB/J+ J/P D+  NSg/VB+ . . N🅪Sg/VB/J\n> for   this    good     girl    to go       to bed       . ”\n# R/C/P I/Ddem+ NPr/VB/J NSg/VB+ P  NSg/VB/J P  NSg/VBP/J . .\n>\n#\n> “ Jordan’s going   to play    in        the tournament tomorrow , ” explained Daisy , “ over    at\n# . NPr$     Nᴹ/Vg/J P  N🅪Sg/VB NPr/J/R/P D   NSg+       NSg+     . . VP/J      NPr+  . . NSg/J/P NSg/P\n> Westchester . ”\n# ?           . .\n>\n#\n> “ Oh     — you’re Jordan Baker . ”\n# . NPr/VB . K      NPr+   NPr+  . .\n>\n#\n> I       knew now       why    her     face    was  familiar — its     pleasing contemptuous expression had\n# ISg/#r+ VPt  NSg/J/R/C NSg/VB ISg/D$+ NSg/VB+ VLPt NSg/J    . ISg/D$+ Nᴹ/Vg/J  J            N🅪Sg+      VP\n> looked out          at    me       from many       rotogravure pictures of the sporting life     at\n# VP/J   NSg/VB/J/R/P NSg/P NPr/ISg+ P    NSg/I/J/Dq NSg         NPl/V3   P  D   Nᴹ/Vg/J  N🅪Sg/VB+ NSg/P\n> Asheville and  Hot      Springs and  Palm    Beach   . I       had heard some     story  of her     too , a\n# NPr       VB/C NSg/VB/J NPl/V3  VB/C NSg/VB+ NPr/VB+ . ISg/#r+ VP  VP/J  I/J/R/Dq NSg/VB P  ISg/D$+ R   . D/P\n> critical , unpleasant story   , but     what   it       was  I       had forgotten long     ago .\n# NSg/J    . NSg/J+     NSg/VB+ . NSg/C/P NSg/I+ NPr/ISg+ VLPt ISg/#r+ VP  NSg/VPp/J NPr/VB/J J/P .\n>\n#\n> “ Good      night    , ” she  said softly . “ Wake   me       at    eight , won’t you    . ”\n# . NPr/VB/J+ N🅪Sg/VB+ . . ISg+ VP/J R      . . NPr/VB NPr/ISg+ NSg/P NSg/J . VXB   ISgPl+ . .\n>\n#\n> “ If    you’ll get    up         . ”\n# . NSg/C K      NSg/VB NSg/VB/J/P . .\n>\n#\n> “ I       will    . Good     night    , Mr   . Carraway . See    you    anon   . ”\n# . ISg/#r+ NPr/VXB . NPr/VB/J N🅪Sg/VB+ . NSg+ . ?        . NSg/VB ISgPl+ NSg/J+ . .\n>\n#\n> “ Of course  you    will    , ” confirmed Daisy . “ In        fact I       think  I’ll arrange a   marriage .\n# . P  NSg/VB+ ISgPl+ NPr/VXB . . VP/J      NPr+  . . NPr/J/R/P NSg+ ISg/#r+ NSg/VB K    NSg/VB  D/P N🅪Sg+    .\n> Come       over    often , Nick    , and  I’ll sort    of — oh     — fling   you    together . You    know — lock    you\n# NSg/VBPp/P NSg/J/P R     . NPr/VB+ . VB/C K    NSg/VB+ P  . NPr/VB . Nᴹ/Vg/J ISgPl+ J        . ISgPl+ VB   . NSg/VB+ ISgPl+\n> up         accidentally in        linen   closets and  push   you    out          to sea in        a   boat    , and  all          that\n# NSg/VB/J/P R            NPr/J/R/P N🅪Sg/J+ NPl/V3  VB/C NSg/VB ISgPl+ NSg/VB/J/R/P P  NSg NPr/J/R/P D/P NSg/VB+ . VB/C NSg/I/J/C/Dq NSg/I/C/Ddem\n> sort   of thing — — — ”\n# NSg/VB P  NSg+  . . . .\n>\n#\n> “ Good      night    , ” called Miss   Baker from the stairs . “ I       haven’t heard a   word    . ”\n# . NPr/VB/J+ N🅪Sg/VB+ . . VP/J   NSg/VB NPr+  P    D+  NPl+   . . ISg/#r+ VXB     VP/J  D/P NSg/VB+ . .\n>\n#\n> “ She’s a    nice  girl    , ” said Tom     after a   moment . “ They oughtn’t to let     her     run\n# . K     D/P+ NPr/J NSg/VB+ . . VP/J NPr/VB+ P     D/P NSg+   . . IPl+ VXB      P  NSg/VBP ISg/D$+ NSg/VBPp\n> around the country this   way    . ”\n# J/P    D   NSg/J+  I/Ddem NSg/J+ . .\n>\n#\n> “ Who    oughtn’t to ? ” inquired Daisy coldly .\n# . NPr/I+ VXB      P  . . VP/J     NPr+  R      .\n>\n#\n> “ Her     family  . ”\n# . ISg/D$+ N🅪Sg/J+ . .\n>\n#\n> “ Her     family  is  one     aunt about a    thousand years old   . Besides , Nick’s going   to\n# . ISg/D$+ N🅪Sg/J+ VL3 NSg/I/J NSg  J/P   D/P+ NSg+     NPl+  NSg/J . R/P     . NPr$   Nᴹ/Vg/J P\n> look   after her     , aren’t you    , Nick    ? She’s going   to spend  lots   of week   - ends    out\n# NSg/VB P     ISg/D$+ . VB     ISgPl+ . NPr/VB+ . K     Nᴹ/Vg/J P  NSg/VB NPl/V3 P  NSg/J+ . NPl/V3+ NSg/VB/J/R/P\n> here this   summer     . I       think  the home      influence will    be       very good     for   her     . ”\n# J/R  I/Ddem NPr🅪Sg/VB+ . ISg/#r+ NSg/VB D+  NSg/VB/J+ N🅪Sg/VB+  NPr/VXB NSg/VLXB J/R  NPr/VB/J R/C/P ISg/D$+ . .\n>\n#\n> Daisy and  Tom     looked at    each other    for   a   moment in        silence .\n# NPr   VB/C NPr/VB+ VP/J   NSg/P Dq   NSg/VB/J R/C/P D/P NSg    NPr/J/R/P NSg/VB+ .\n>\n#\n> “ Is  she  from New    York ? ” I       asked quickly .\n# . VL3 ISg+ P    NSg/J+ NPr+ . . ISg/#r+ VP/J  R       .\n>\n#\n> “ From Louisville . Our white       girlhood was  passed together there . Our beautiful\n# . P    NPr        . D$+ NPr🅪Sg/VB/J N🅪Sg     VLPt VP/J   J        R     . D$+ NSg/J\n> white       — — — ”\n# NPr🅪Sg/VB/J . . . .\n>\n#\n> “ Did  you    give   Nick    a   little     heart    to heart   talk    on  the veranda      ? ” demanded Tom\n# . VXPt ISgPl+ NSg/VB NPr/VB+ D/P NPr/I/J/Dq N🅪Sg/VB+ P  N🅪Sg/VB N🅪Sg/VB J/P D+  NSg/NoAm/Br+ . . VP/J     NPr/VB+\n> suddenly .\n# R        .\n>\n#\n> “ Did  I       ? ” She  looked at    me       . “ I       can’t seem to remember , but     I       think  we   talked\n# . VXPt ISg/#r+ . . ISg+ VP/J   NSg/P NPr/ISg+ . . ISg/#r+ VXB   VB   P  NSg/VB   . NSg/C/P ISg/#r+ NSg/VB IPl+ VP/J\n> about the Nordic race     . Yes    , I’m sure we   did  . It       sort   of crept up         on  us       and  first\n# J/P   D   NSg/J  N🅪Sg/VB+ . NPl/VB . K   J    IPl+ VXPt . NPr/ISg+ NSg/VB P  VP    NSg/VB/J/P J/P NPr/IPl+ VB/C NSg/J+\n> thing you    know — — — ”\n# NSg+  ISgPl+ VB   . . . .\n>\n#\n> “ Don’t believe everything you    hear , Nick    , ” he       advised me       .\n# . VXB   VB      NSg/I/VB+  ISgPl+ VB   . NPr/VB+ . . NPr/ISg+ VP/J    NPr/ISg+ .\n>\n#\n> I       said lightly that         I       had heard nothing  at    all          , and  a    few       minutes later I       got up\n# ISg/#r+ VP/J R       NSg/I/C/Ddem ISg/#r+ VP  VP/J  NSg/I/J+ NSg/P NSg/I/J/C/Dq . VB/C D/P+ NSg/I/Dq+ NPl/V3+ JC    ISg/#r+ VP  NSg/VB/J/P\n> to go       home      . They came      to the door    with me       and  stood side      by    side      in        a   cheerful\n# P  NSg/VB/J NSg/VB/J+ . IPl+ NSg/VPt/P P  D+  NSg/VB+ P    NPr/ISg+ VB/C VP    NSg/VB/J+ NSg/P NSg/VB/J+ NPr/J/R/P D/P J\n> square   of light      . As    I       started my  motor     Daisy peremptorily called : “ Wait   !\n# NSg/VB/J P  N🅪Sg/VB/J+ . R/C/P ISg/#r+ VP/J    D$+ NSg/VB/J+ NPr+  R            VP/J   . . NSg/VB .\n>\n#\n> “ I       forgot to ask    you    something , and  it’s important . We   heard you    were     engaged to\n# . ISg/#r+ VPt    P  NSg/VB ISgPl+ NSg/I/J+  . VB/C K    J         . IPl+ VP/J  ISgPl+ NSg/VLPt VP/J    P\n> a    girl    out          West      . ”\n# D/P+ NSg/VB+ NSg/VB/J/R/P NPr/VB/J+ . .\n>\n#\n> “ That’s right    , ” corroborated Tom     kindly . “ We   heard that         you    were     engaged . ”\n# . NSg$   NPr/VB/J . . VP/J         NPr/VB+ J/R    . . IPl+ VP/J  NSg/I/C/Ddem ISgPl+ NSg/VLPt VP/J    . .\n>\n#\n> “ It’s a    libel   . I’m too poor     . ”\n# . K    D/P+ NSg/VB+ . K   R   NSg/VB/J . .\n>\n#\n> “ But     we   heard it       , ” insisted Daisy , surprising me       by    opening up         again in        a\n# . NSg/C/P IPl+ VP/J  NPr/ISg+ . . VP/J     NPr+  . Nᴹ/Vg/J    NPr/ISg+ NSg/P Nᴹ/Vg/J NSg/VB/J/P P     NPr/J/R/P D/P+\n> flower  - like         way    . “ We   heard it       from three people  , so          it       must    be       true     . ”\n# NSg/VB+ . NSg/VB/J/C/P NSg/J+ . . IPl+ VP/J  NPr/ISg+ P    NSg+  NPl/VB+ . NSg/I/J/R/C NPr/ISg+ NSg/VXB NSg/VLXB NSg/VB/J . .\n>\n#\n> Of course  I       knew what   they were     referring to , but     I       wasn’t even       vaguely engaged .\n# P  NSg/VB+ ISg/#r+ VPt  NSg/I+ IPl+ NSg/VLPt NSg/Vg    P  . NSg/C/P ISg/#r+ VPt    NSg/VB/J/R R       VP/J    .\n> The fact that          gossip   had published the banns was  one     of the reasons I       had come\n# D+  NSg+ NSg/I/C/Ddem+ N🅪Sg/VB+ VP  VP/J      D   NSg   VLPt NSg/I/J P  D   NPl/V3+ ISg/#r+ VP  NSg/VBPp/P\n> East   . You    can’t stop   going   with an  old   friend    on  account of rumors     , and  on  the\n# NPr/J+ . ISgPl+ VXB   NSg/VB Nᴹ/Vg/J P    D/P NSg/J NPr/VB/J+ J/P NSg/VB  P  NPl/V3/Am+ . VB/C J/P D\n> other    hand    I       had no       intention of being        rumored into marriage .\n# NSg/VB/J NSg/VB+ ISg/#r+ VP  NSg/Dq/P NSg/VB    P  N🅪Sg/VLg/J/C VP/J/Am P    N🅪Sg+    .\n>\n#\n> Their interest rather     touched me       and  made them     less       remotely rich     — nevertheless ,\n# D$+   N🅪Sg/VB+ NPr/VB/J/R VP/J    NPr/ISg+ VB/C VP   NSg/IPl+ VB/J/R/C/P R        NPr/VB/J . R            .\n> I       was  confused and  a   little     disgusted as    I       drove   away . It       seemed to me       that         the\n# ISg/#r+ VLPt VP/J     VB/C D/P NPr/I/J/Dq VP/J      R/C/P ISg/#r+ NSg/VPt VB/J . NPr/ISg+ VP/J   P  NPr/ISg+ NSg/I/C/Ddem D+\n> thing for   Daisy to do  was  to rush     out          of the house   , child   in        arms    — but     apparently\n# NSg+  R/C/P NPr+  P  VXB VLPt P  NPr/VB/J NSg/VB/J/R/P P  D+  NPr/VB+ . NSg/VB+ NPr/J/R/P NPl/V3+ . NSg/C/P R\n> there were     no       such  intentions in        her     head      . As    for   Tom     , the fact that          he       “ had\n# R+    NSg/VLPt NSg/Dq/P NSg/I NPl/V3+    NPr/J/R/P ISg/D$+ NPr/VB/J+ . R/C/P R/C/P NPr/VB+ . D+  NSg+ NSg/I/C/Ddem+ NPr/ISg+ . VP\n> some     woman  in        New    York ” was  really less       surprising than that         he       had been\n# I/J/R/Dq NSg/VB NPr/J/R/P NSg/J+ NPr+ . VLPt R      VB/J/R/C/P Nᴹ/Vg/J    C/P  NSg/I/C/Ddem NPr/ISg+ VP  NSg/VLPp\n> depressed by    a    book    . Something was  making  him  nibble at    the edge   of stale     ideas\n# VP/J      NSg/P D/P+ NSg/VB+ . NSg/I/J+  VLPt Nᴹ/Vg/J ISg+ NSg/VB NSg/P D   NSg/VB P  NSg/VB/J+ NPl+\n> as    if    his     sturdy physical egotism no       longer nourished his     peremptory heart    .\n# R/C/P NSg/C ISg/D$+ NSg/J  NSg/J    NSg     NSg/Dq/P NSg/JC VP/J+     ISg/D$+ NSg/J      N🅪Sg/VB+ .\n>\n#\n> Already it       was  deep  summer    on  roadhouse roofs   and  in        front     of wayside garages ,\n# R       NPr/ISg+ VLPt NSg/J NPr🅪Sg/VB J/P NSg+      NPl/V3+ VB/C NPr/J/R/P NSg/VB/J+ P  NSg/J   NPl/V3  .\n> where   new   red    gaspumps sat      out          in        pools  of light      , and  when    I       reached my  estate\n# NSg/R/C NSg/J N🅪Sg/J ?        NSg/VP/J NSg/VB/J/R/P NPr/J/R/P NPl/V3 P  N🅪Sg/VB/J+ . VB/C NSg/I/C ISg/#r+ VP/J    D$+ NSg/VB/J+\n> at    West      Egg      I       ran     the car  under   its     shed    and  sat      for   a   while       on  an  abandoned\n# NSg/P NPr/VB/J+ N🅪Sg/VB+ ISg/#r+ NSg/VPt D   NSg+ NSg/J/P ISg/D$+ NSg/VP+ VB/C NSg/VP/J R/C/P D/P NSg/VB/C/P+ J/P D/P VP/J\n> grass      roller in        the yard    . The wind     had blown off        , leaving a   loud  , bright   night    ,\n# NPr🅪Sg/VB+ NSg/VB NPr/J/R/P D   NSg/VB+ . D+  N🅪Sg/VB+ VP  VPp/J NSg/VB/J/P . Nᴹ/Vg/J D/P NSg/J . NPr/VB/J N🅪Sg/VB+ .\n> with wings   beating in        the trees   and  a   persistent organ  sound      as    the full     bellows\n# P    NPl/V3+ Nᴹ/Vg/J NPr/J/R/P D+  NPl/V3+ VB/C D/P J          NSg/VB N🅪Sg/VB/J+ R/C/P D   NSg/VB/J NPl/V3\n> of the earth    blew      the frogs  full     of life     . The silhouette of a    moving  cat       wavered\n# P  D   NPrᴹ/VB+ NSg/VPt/J D   NPl/V3 NSg/VB/J P  N🅪Sg/VB+ . D   NSg/VB     P  D/P+ Nᴹ/Vg/J NSg/VB/J+ VP/J\n> across the moonlight , and  turning my  head      to watch  it       , I       saw     that         I       was  not\n# NSg/P  D+  N🅪Sg/VB+  . VB/C Nᴹ/Vg/J D$+ NPr/VB/J+ P  NSg/VB NPr/ISg+ . ISg/#r+ NSg/VPt NSg/I/C/Ddem ISg/#r+ VLPt NSg/R/C\n> alone — fifty feet away a    figure  had emerged from the shadow   of my  neighbor’s\n# J     . NSg   NPl+ VB/J D/P+ NSg/VB+ VP  VP/J    P    D   NSg/VB/J P  D$+ NSg$/Am\n> mansion and  was  standing with his     hands   in        his     pockets regarding the silver\n# NSg+    VB/C VLPt Nᴹ/Vg/J  P    ISg/D$+ NPl/V3+ NPr/J/R/P ISg/D$+ NPl/V3+ Nᴹ/Vg/J   D   Nᴹ/VB/J+\n> pepper  of the stars   . Something in        his     leisurely movements and  the secure\n# N🅪Sg/VB P  D   NPl/V3+ . NSg/I/J+  NPr/J/R/P ISg/D$+ R+        NPl+      VB/C D   VB/J\n> position of his     feet upon the lawn    suggested that         it       was  Mr   . Gatsby himself ,\n# NSg/VB   P  ISg/D$+ NPl+ P    D+  NSg/VB+ VP/J      NSg/I/C/Ddem NPr/ISg+ VLPt NSg+ . NPr    ISg+    .\n> come       out          to determine what   share  was  his    of our local heavens .\n# NSg/VBPp/P NSg/VB/J/R/P P  VB        NSg/I+ NSg/VB VLPt ISg/D$ P  D$+ NSg/J NPl/V3+ .\n>\n#\n> I       decided  to call   to him  . Miss   Baker had mentioned him  at    dinner   , and  that          would\n# ISg/#r+ NSg/VP/J P  NSg/VB P  ISg+ . NSg/VB NPr+  VP  VP/J      ISg+ NSg/P N🅪Sg/VB+ . VB/C NSg/I/C/Ddem+ VXB\n> do  for   an   introduction . But     I       didn’t call   to him  , for   he       gave a   sudden\n# VXB R/C/P D/P+ NSg+         . NSg/C/P ISg/#r+ VXPt   NSg/VB P  ISg+ . R/C/P NPr/ISg+ VPt  D/P NSg/J\n> intimation that         he       was  content    to be       alone — he       stretched out          his     arms    toward the\n# NSg        NSg/I/C/Ddem NPr/ISg+ VLPt N🅪Sg/VB/J+ P  NSg/VLXB J     . NPr/ISg+ VP/J      NSg/VB/J/R/P ISg/D$+ NPl/V3+ J/P    D\n> dark     water    in        a   curious way    , and  , far      as    I       was  from him  , I       could   have    sworn he\n# NSg/VB/J N🅪Sg/VB+ NPr/J/R/P D/P J       NSg/J+ . VB/C . NSg/VB/J R/C/P ISg/#r+ VLPt P    ISg+ . ISg/#r+ NSg/VXB NSg/VXB VB/J  NPr/ISg+\n> was  trembling . Involuntarily I       glanced seaward — and  distinguished nothing  except\n# VLPt Nᴹ/Vg/J   . R             ISg/#r+ VP/J    NSg/J   . VB/C VP/J          NSg/I/J+ VB/C/P\n> a   single   green       light      , minute    and  far      away , that          might    have    been     the end    of a\n# D/P NSg/VB/J NPr🅪Sg/VB/J N🅪Sg/VB/J+ . NSg/VB/J+ VB/C NSg/VB/J VB/J . NSg/I/C/Ddem+ Nᴹ/VXB/J NSg/VXB NSg/VLPp D   NSg/VB P  D/P\n> dock    . When    I       looked once  more         for   Gatsby he       had vanished , and  I       was  alone again\n# NSg/VB+ . NSg/I/C ISg/#r+ VP/J   NSg/C NPr/I/J/R/Dq R/C/P NPr    NPr/ISg+ VP  VP/J     . VB/C ISg/#r+ VLPt J     P\n> in        the unquiet darkness .\n# NPr/J/R/P D   VB/J    Nᴹ+      .\n>\n#\n>              CHAPTER II\n# HeadingStart NSg/VB+ #r\n>\n#\n> About half      way   between West      Egg     and  New    York the motor     road    hastily joins  the\n# J/P   N🅪Sg/J/P+ NSg/J NSg/P   NPr/VB/J+ N🅪Sg/VB VB/C NSg/J+ NPr+ D+  NSg/VB/J+ N🅪Sg/J+ R       NPl/V3 D+\n> railroad and  runs   beside it       for   a   quarter  of a   mile , so          as    to shrink away from a\n# NSg/VB+  VB/C NPl/V3 P      NPr/ISg+ R/C/P D/P NSg/VB/J P  D/P NSg+ . NSg/I/J/R/C R/C/P P  NSg/VB VB/J P    D/P\n> certain desolate area of land       . This    is  a   valley of ashes   — a    fantastic farm    where\n# I/J     VB/J     N🅪Sg P  NPr🅪Sg/VB+ . I/Ddem+ VL3 D/P NSg/VB P  NPl/V3+ . D/P+ NSg/J+    NSg/VB+ NSg/R/C\n> ashes   grow like         wheat  into ridges and  hills  and  grotesque gardens ; where   ashes\n# NPl/V3+ VB   NSg/VB/J/C/P NSg/J+ P    NPl/V3 VB/C NPl/V3 VB/C NSg/J     NPl/V3+ . NSg/R/C NPl/V3+\n> take   the forms  of houses and  chimneys and  rising    smoke    and  , finally , with a\n# NSg/VB D   NPl/V3 P  NPl/V3 VB/C NPl/V3+  VB/C Nᴹ/Vg/J/P N🅪Sg/VB+ VB/C . R       . P    D/P\n> transcendent effort   , of ash      - gray           men  , who    move   dimly and  already crumbling\n# NSg/J        N🅪Sg/VB+ . P  N🅪Sg/VB+ . NPr🅪Sg/VB/J/Am NPl+ . NPr/I+ NSg/VB R     VB/C R       Nᴹ/Vg/J\n> through the powdery air      . Occasionally a   line   of gray            cars crawls along an\n# NSg/J/P D   J       N🅪Sg/VB+ . R            D/P NSg/VB P  NPr🅪Sg/VB/J/Am+ NPl+ NPl/V3 P     D/P+\n> invisible track   , gives  out          a   ghastly creak  , and  comes  to rest   , and  immediately\n# J+        NSg/VB+ . NPl/V3 NSg/VB/J/R/P D/P J       NSg/VB . VB/C NPl/V3 P  NSg/VB . VB/C R\n> the ash      - gray           men  swarm  up         with leaden spades and  stir   up         an  impenetrable cloud    ,\n# D   N🅪Sg/VB+ . NPr🅪Sg/VB/J/Am NPl+ NSg/VB NSg/VB/J/P P    VB/J   NPl/V3 VB/C NSg/VB NSg/VB/J/P D/P NSg/J        N🅪Sg/VB+ .\n> which screens their obscure operations from your sight    .\n# I/C+  NPl/V3+ D$+   VB/J    NPl+       P    D$+  N🅪Sg/VB+ .\n>\n#\n> But     above   the gray            land       and  the spasms of bleak dust   which drift  endlessly over\n# NSg/C/P NSg/J/P D+  NPr🅪Sg/VB/J/Am+ NPr🅪Sg/VB+ VB/C D   NPl/V3 P  NSg/J Nᴹ/VB+ I/C+  NSg/VB R         NSg/J/P\n> it       , you    perceive , after a   moment , the eyes   of Doctor  T. J. Eckleburg . The eyes\n# NPr/ISg+ . ISgPl+ VB       . P     D/P NSg+   . D   NPl/V3 P  NSg/VB+ ?  ?  ?         . D   NPl/V3\n> of Doctor  T. J. Eckleburg are blue      and  gigantic — their retinas are one     yard    high       .\n# P  NSg/VB+ ?  ?  ?         VLB N🅪Sg/VB/J VB/C J        . D$+   NPl     VLB NSg/I/J NSg/VB+ NSg/VB/J/R .\n> They look   out          of no        face    , but     , instead , from a   pair    of enormous yellow\n# IPl+ NSg/VB NSg/VB/J/R/P P  NSg/Dq/P+ NSg/VB+ . NSg/C/P . R       . P    D/P NSg/VB+ P  J        NSg/VB/J\n> spectacles which pass   over    a   nonexistent nose    . Evidently some     wild     wag    of an\n# NPl        I/C+  NSg/VB NSg/J/P D/P NSg/J       NSg/VB+ . R         I/J/R/Dq NSg/VB/J NSg/VB P  D/P\n> oculist set       them     there to fatten his     practice in        the borough of Queens   , and  then\n# NSg     NPr/VBP/J NSg/IPl+ R+    P  VB     ISg/D$+ NSg/VB+  NPr/J/R/P D   NSg+    P  NPrPl/V3 . VB/C NSg/J/R/C\n> sank down        himself into eternal blindness , or    forgot them     and  moved away . But     his\n# VPt  N🅪Sg/VB/J/P ISg+    P    NSg/J   NSg+      . NPr/C VPt    NSg/IPl+ VB/C VP/J  VB/J . NSg/C/P ISg/D$+\n> eyes    , dimmed a   little     by    many       paintless days , under   sun    and  rain     , brood    on  over\n# NPl/V3+ . VP     D/P NPr/I/J/Dq NSg/P NSg/I/J/Dq J         NPl+ . NSg/J/P NPr/VB VB/C N🅪Sg/VB+ . NSg/VB/J J/P NSg/J/P\n> the solemn dumping  ground     .\n# D   J      Nᴹ/Vg/J+ N🅪Sg/VB/J+ .\n>\n#\n> The valley of ashes   is  bounded on  one      side      by    a    small     foul      river   , and  , when    the\n# D   NSg/VB P  NPl/V3+ VL3 VP/J    J/P NSg/I/J+ NSg/VB/J+ NSg/P D/P+ NPr/VB/J+ NSg/VB/J+ NSg/VB+ . VB/C . NSg/I/C D\n> drawbridge is  up         to let     barges  through , the passengers on  waiting trains  can\n# NSg        VL3 NSg/VB/J/P P  NSg/VBP NPl/V3+ NSg/J/P . D   NPl/V3+    J/P Nᴹ/Vg/J NPl/V3+ NPr/VXB\n> stare   at    the dismal scene   for   as    long     as    half      an  hour . There is  always a    halt\n# NSg/VB+ NSg/P D   NSg/J  NSg/VB+ R/C/P R/C/P NPr/VB/J R/C/P N🅪Sg/J/P+ D/P NSg+ . R+    VL3 R      D/P+ NSg/VB/J+\n> there of at    least    a    minute    , and  it       was  because of this   that         I       first met Tom\n# R     P  NSg/P NSg/J/Dq D/P+ NSg/VB/J+ . VB/C NPr/ISg+ VLPt C/P     P  I/Ddem NSg/I/C/Ddem ISg/#r+ NSg/J VP  NPr/VB+\n> Buchanan’s mistress .\n# NPr$       NSg/VB+  .\n>\n#\n> The fact that          he       had one      was  insisted upon wherever he       was  known . His\n# D+  NSg+ NSg/I/C/Ddem+ NPr/ISg+ VP  NSg/I/J+ VLPt VP/J     P    C        NPr/ISg+ VLPt VPp/J . ISg/D$+\n> acquaintances resented the fact that          he       turned up         in        popular cafés with her     and  ,\n# NPl+          VP/J     D+  NSg+ NSg/I/C/Ddem+ NPr/ISg+ VP/J   NSg/VB/J/P NPr/J/R/P NSg/J   NPl   P    ISg/D$+ VB/C .\n> leaving her     at    a   table   , sauntered about , chatting with whomsoever he       knew .\n# Nᴹ/Vg/J ISg/D$+ NSg/P D/P NSg/VB+ . VP/J      J/P   . NSg/Vg   P    I          NPr/ISg+ VPt  .\n> Though I       was  curious to see    her     , I       had no        desire   to meet     her     — but     I       did  . I       went\n# C      ISg/#r+ VLPt J       P  NSg/VB ISg/D$+ . ISg/#r+ VP  NSg/Dq/P+ N🅪Sg/VB+ P  NSg/VB/J ISg/D$+ . NSg/C/P ISg/#r+ VXPt . ISg/#r+ NSg/VPt\n> up         to New   York with Tom     on  the train   one      afternoon , and  when    we   stopped by    the\n# NSg/VB/J/P P  NSg/J NPr+ P    NPr/VB+ J/P D+  NSg/VB+ NSg/I/J+ N🅪Sg+     . VB/C NSg/I/C IPl+ VP/J    NSg/P D\n> ashheaps he       jumped to his     feet and  , taking   hold     of my  elbow   , literally forced me\n# ?        NPr/ISg+ VP/J   P  ISg/D$+ NPl+ VB/C . NSg/Vg/J NSg/VB/J P  D$+ NSg/VB+ . R         VP/J   NPr/ISg+\n> from the car  .\n# P    D   NSg+ .\n>\n#\n> “ We're getting off        , ” he       insisted . “ I       want   you    to meet     my  girl    . ”\n# . K     NSg/Vg  NSg/VB/J/P . . NPr/ISg+ VP/J     . . ISg/#r+ NSg/VB ISgPl+ P  NSg/VB/J D$+ NSg/VB+ . .\n>\n#\n> I       think  he’d tanked up         a   good     deal      at    luncheon , and  his     determination to have    my\n# ISg/#r+ NSg/VB K    VP/J   NSg/VB/J/P D/P NPr/VB/J NSg/VB/J+ NSg/P NSg/VB+  . VB/C ISg/D$+ NSg+          P  NSg/VXB D$+\n> company bordered on  violence . The supercilious assumption was  that          on  Sunday\n# N🅪Sg+   VP/J     J/P Nᴹ/VB+   . D   J            N🅪Sg+      VLPt NSg/I/C/Ddem+ J/P NSg/VB+\n> afternoon I       had nothing  better     to do  .\n# N🅪Sg+     ISg/#r+ VP  NSg/I/J+ NSg/VXB/JC P  VXB .\n>\n#\n> I       followed him  over    a   low        whitewashed railroad fence   , and  we   walked back     a\n# ISg/#r+ VP/J     ISg+ NSg/J/P D/P NSg/VB/J/R VP/J        NSg/VB+  NSg/VB+ . VB/C IPl+ VP/J   NSg/VB/J D/P\n> hundred yards   along the road    under   Doctor  Eckleburg’s persistent stare   . The only\n# NSg     NPl/V3+ P     D   N🅪Sg/J+ NSg/J/P NSg/VB+ ?           J          NSg/VB+ . D   J/R/C\n> building  in        sight    was  a   small    block  of yellow    brick      sitting  on  the edge   of the\n# N🅪Sg/Vg/J NPr/J/R/P N🅪Sg/VB+ VLPt D/P NPr/VB/J NSg/VB P  NSg/VB/J+ N🅪Sg/VB/J+ NSg/Vg/J J/P D   NSg/VB P  D+\n> waste     land       , a   sort   of compact   Main      Street    ministering to it       , and  contiguous to\n# NSg/VB/J+ NPr🅪Sg/VB+ . D/P NSg/VB P  NSg/VB/J+ NSg/VB/J+ NSg/VB/J+ Nᴹ/Vg/J     P  NPr/ISg+ . VB/C J          P\n> absolutely nothing  . One     of the three shops   it       contained was  for   rent     and  another\n# R          NSg/I/J+ . NSg/I/J P  D+  NSg+  NPl/V3+ NPr/ISg+ VP/J      VLPt R/C/P Nᴹ/VB/J+ VB/C I/D+\n> was  an  all          - night    restaurant , approached by    a   trail  of ashes   ; the third    was  a\n# VLPt D/P NSg/I/J/C/Dq . N🅪Sg/VB+ NSg+       . VP/J       NSg/P D/P NSg/VB P  NPl/V3+ . D   NSg/VB/J VLPt D/P\n> garage — Repairs . George B. Wilson . Cars bought and  sold   . — and  I       followed Tom\n# NSg/VB . NPl/V3+ . NPr+   ?  NPr+   . NPl+ NSg/VP VB/C NSg/VP . . VB/C ISg/#r+ VP/J     NPr/VB+\n> inside  .\n# NSg/J/P .\n>\n#\n> The interior was  unprosperous and  bare     ; the only  car  visible was  the\n# D   NSg/J    VLPt J            VB/C NSg/VB/J . D   J/R/C NSg+ J       VLPt D\n> dust   - covered wreck  of a   Ford    which crouched in        a   dim      corner  . It       had occurred to\n# Nᴹ/VB+ . VP/J    NSg/VB P  D/P NPr/VB+ I/C+  VP/J     NPr/J/R/P D/P NSg/VB/J NSg/VB+ . NPr/ISg+ VP  VP       P\n> me       that         this   shadow   of a    garage  must    be       a   blind    , and  that          sumptuous and  romantic\n# NPr/ISg+ NSg/I/C/Ddem I/Ddem NSg/VB/J P  D/P+ NSg/VB+ NSg/VXB NSg/VLXB D/P NSg/VB/J . VB/C NSg/I/C/Ddem+ J         VB/C NSg/J\n> apartments were     concealed overhead , when    the proprietor himself appeared in        the\n# NPl+       NSg/VLPt VP/J      NSg/J/P+ . NSg/I/C D   NSg        ISg+    VP/J     NPr/J/R/P D\n> door   of an  office  , wiping  his     hands   on  a   piece  of waste     . He       was  a   blond    ,\n# NSg/VB P  D/P NSg/VB+ . Nᴹ/Vg/J ISg/D$+ NPl/V3+ J/P D/P NSg/VB P  NSg/VB/J+ . NPr/ISg+ VLPt D/P NSg/VB/J .\n> spiritless man       , anæmic , and  faintly handsome . When    he       saw     us       a   damp    gleam  of\n# J          NPr/VB/J+ . NSg/J  . VB/C R       VB/J     . NSg/I/C NPr/ISg+ NSg/VPt NPr/IPl+ D/P Nᴹ/VB/J NSg/VB P\n> hope      sprang into his     light      blue       eyes    .\n# NPr🅪Sg/VB VB     P    ISg/D$+ N🅪Sg/VB/J+ N🅪Sg/VB/J+ NPl/V3+ .\n>\n#\n> “ Hello  , Wilson , old    man       , ” said Tom     , slapping him  jovially on  the shoulder .\n# . NSg/VB . NPr+   . NSg/J+ NPr/VB/J+ . . VP/J NPr/VB+ . NSg/Vg/J ISg+ R        J/P D   NSg/VB+  .\n> ‘          ‘          How’s business ? ”\n# Unlintable Unlintable NSg$  N🅪Sg/J+  . .\n>\n#\n> “ I       can’t complain , ” answered Wilson unconvincingly . “ When    are you    going   to sell\n# . ISg/#r+ VXB   VB       . . VP/J     NPr+   R              . . NSg/I/C VLB ISgPl+ Nᴹ/Vg/J P  NSg/VB\n> me       that          car  ? ”\n# NPr/ISg+ NSg/I/C/Ddem+ NSg+ . .\n>\n#\n> “ Next     week   ; I’ve got my  man       working on  it       now       . ”\n# . NSg/J/P+ NSg/J+ . K    VP  D$+ NPr/VB/J+ Nᴹ/Vg/J J/P NPr/ISg+ NSg/J/R/C . .\n>\n#\n> “ Works   pretty     slow     , don’t he       ? ”\n# . NPl/V3+ NSg/VB/J/R NSg/VB/J . VXB   NPr/ISg+ . .\n>\n#\n> “ No       , he       doesn’t , ” said Tom     coldly . “ And  if    you    feel     that          way    about it       , maybe   I’d\n# . NSg/Dq/P . NPr/ISg+ VX3     . . VP/J NPr/VB+ R      . . VB/C NSg/C ISgPl+ NSg/I/VB NSg/I/C/Ddem+ NSg/J+ J/P   NPr/ISg+ . NSg/J/R K\n> better     sell   it       somewhere else    after all          . ”\n# NSg/VXB/JC NSg/VB NPr/ISg+ NSg       NSg/J/C P     NSg/I/J/C/Dq . .\n>\n#\n> “ I       don’t mean     that          , ” explained Wilson quickly . “ I       just meant — — — ”\n# . ISg/#r+ VXB   NSg/VB/J NSg/I/C/Ddem+ . . VP/J      NPr+   R       . . ISg/#r+ J/R  VP    . . . .\n>\n#\n> His     voice   faded off        and  Tom     glanced impatiently around the garage  . Then      I       heard\n# ISg/D$+ NSg/VB+ J     NSg/VB/J/P VB/C NPr/VB+ VP/J    R           J/P    D+  NSg/VB+ . NSg/J/R/C ISg/#r+ VP/J\n> footsteps on  a    stairs , and  in        a    moment the thickish figure of a   woman   blocked\n# NPl+      J/P D/P+ NPl+   . VB/C NPr/J/R/P D/P+ NSg+   D   J        NSg/VB P  D/P NSg/VB+ VP/J\n> out          the light      from the office  door    . She  was  in        the middle   thirties , and  faintly\n# NSg/VB/J/R/P D   N🅪Sg/VB/J+ P    D   NSg/VB+ NSg/VB+ . ISg+ VLPt NPr/J/R/P D   NSg/VB/J NPl+     . VB/C R\n> stout     , but     she  carried her     flesh      sensuously as    some      women can     . Her     face    , above   a\n# NPr/VB/J+ . NSg/C/P ISg+ VP/J    ISg/D$+ N🅪Sg/VB/J+ R          R/C/P I/J/R/Dq+ NPl+  NPr/VXB . ISg/D$+ NSg/VB+ . NSg/J/P D/P\n> spotted dress  of dark     blue      crêpe  - de   - chine  , contained no       facet   or    gleam  of\n# VP/J    NSg/VB P  NSg/VB/J N🅪Sg/VB/J NSg/VB . NPr+ . NSg/VB . VP/J      NSg/Dq/P NSg/VB+ NPr/C NSg/VB P\n> beauty     , but     there was  an  immediately perceptible vitality about her     as    if    the\n# N🅪Sg/VB/J+ . NSg/C/P R+    VLPt D/P R           NSg/J       Nᴹ+      J/P   ISg/D$+ R/C/P NSg/C D\n> nerves of her     body    were     continually smouldering  . She  smiled slowly and  , walking\n# NPl/V3 P  ISg/D$+ NSg/VB+ NSg/VLPt R           Nᴹ/Vg/J/Comm . ISg+ VP/J   R      VB/C . Nᴹ/Vg/J\n> through her     husband as    if    he       were     a   ghost    , shook     hands   with Tom     , looking him\n# NSg/J/P ISg/D$+ NSg/VB+ R/C/P NSg/C NPr/ISg+ NSg/VLPt D/P NSg/VB/J . NSg/VPt/J NPl/V3+ P    NPr/VB+ . Nᴹ/Vg/J ISg+\n> flush     in        the eye     . Then      she  wet      her     lips    , and  without turning around spoke   to her\n# NSg/VB/J+ NPr/J/R/P D+  NSg/VB+ . NSg/J/R/C ISg+ NSg/VP/J ISg/D$+ NPl/V3+ . VB/C C/P     Nᴹ/Vg/J J/P    NSg/VPt P  ISg/D$+\n> husband in        a   soft  , coarse voice   :\n# NSg/VB+ NPr/J/R/P D/P NSg/J . J+     NSg/VB+ .\n>\n#\n> “ Get    some      chairs  , why    don’t you    , so          somebody can     sit    down        . ”\n# . NSg/VB I/J/R/Dq+ NPl/V3+ . NSg/VB VXB   ISgPl+ . NSg/I/J/R/C NSg/I+   NPr/VXB NSg/VB N🅪Sg/VB/J/P . .\n>\n#\n> “ Oh     , sure , ” agreed Wilson hurriedly , and  went    toward the little     office  , mingling\n# . NPr/VB . J    . . VP/J   NPr+   R         . VB/C NSg/VPt J/P    D   NPr/I/J/Dq NSg/VB+ . Nᴹ/Vg/J+\n> immediately with the cement   color        of the walls     . A   white       ashen dust   veiled his\n# R           P    D   N🅪Sg/VB+ N🅪Sg/VB/J/Am P  D   NPrPl/V3+ . D/P NPr🅪Sg/VB/J J     Nᴹ/VB+ VP/J   ISg/D$+\n> dark     suit    and  his     pale     hair     as    it       veiled everything in        the vicinity — except his\n# NSg/VB/J NSg/VB+ VB/C ISg/D$+ NSg/VB/J N🅪Sg/VB+ R/C/P NPr/ISg+ VP/J   NSg/I/VB+  NPr/J/R/P D   NSg      . VB/C/P ISg/D$+\n> wife      , who    moved close    to Tom     .\n# NSg/VB/J+ . NPr/I+ VP/J  NSg/VB/J P  NPr/VB+ .\n>\n#\n> “ I       want   to see    you    , ” said Tom     intently . “ Get    on  the next     train   . ”\n# . ISg/#r+ NSg/VB P  NSg/VB ISgPl+ . . VP/J NPr/VB+ R        . . NSg/VB J/P D+  NSg/J/P+ NSg/VB+ . .\n>\n#\n> “ All          right    . ”\n# . NSg/I/J/C/Dq NPr/VB/J . .\n>\n#\n> “ I’ll meet     you    by    the news   - stand  on  the lower     level     . ”\n# . K    NSg/VB/J ISgPl+ NSg/P D   Nᴹ/VB+ . NSg/VB J/P D   NSg/VB/JC NSg/VB/J+ . .\n>\n#\n> She  nodded and  moved away from him  just as    George Wilson emerged with two chairs\n# ISg+ VP     VB/C VP/J  VB/J P    ISg+ J/R  R/C/P NPr+   NPr+   VP/J    P    NSg NPl/V3+\n> from his     office  door    .\n# P    ISg/D$+ NSg/VB+ NSg/VB+ .\n>\n#\n> We   waited for   her     down        the road    and  out          of sight    . It       was  a   few      days before the\n# IPl+ VP/J   R/C/P ISg/D$+ N🅪Sg/VB/J/P D+  N🅪Sg/J+ VB/C NSg/VB/J/R/P P  N🅪Sg/VB+ . NPr/ISg+ VLPt D/P NSg/I/Dq NPl  C/P    D\n> Fourth   of July , and  a   gray           , scrawny Italian child   was  setting    torpedoes in        a   row\n# NPr/VB/J P  NPr+ . VB/C D/P NPr🅪Sg/VB/J/Am . J       N🅪Sg/J  NSg/VB+ VLPt N🅪Sg/Vg/J+ NPl/VB    NPr/J/R/P D/P NSg/VB+\n> along the railroad track   .\n# P     D   NSg/VB+  NSg/VB+ .\n>\n#\n> “ Terrible place    , isn’t   it       , ” said Tom     , exchanging a   frown  with Doctor  Eckleburg .\n# . J+       N🅪Sg/VB+ . NSg/VX3 NPr/ISg+ . . VP/J NPr/VB+ . Nᴹ/Vg/J    D/P NSg/VB P    NSg/VB+ ?         .\n>\n#\n> “ Awful . ”\n# . J     . .\n>\n#\n> “ It       does    her     good     to get    away . ”\n# . NPr/ISg+ NPl/VX3 ISg/D$+ NPr/VB/J P  NSg/VB VB/J . .\n>\n#\n> “ Doesn’t her     husband object  ? ”\n# . VX3     ISg/D$+ NSg/VB+ NSg/VB+ . .\n>\n#\n> “ Wilson ? He       thinks she  goes   to see    her     sister in        New    York . He’s so          dumb he\n# . NPr+   . NPr/ISg+ NPl/V3 ISg+ NPl/V3 P  NSg/VB ISg/D$+ NSg/VB NPr/J/R/P NSg/J+ NPr+ . NPr$ NSg/I/J/R/C VB/J NPr/ISg+\n> doesn’t know he’s alive . ”\n# VX3     VB   NPr$ J     . .\n>\n#\n> So          Tom     Buchanan and  his     girl    and  I       went    up         together to New    York — or    not     quite\n# NSg/I/J/R/C NPr/VB+ NPr+     VB/C ISg/D$+ NSg/VB+ VB/C ISg/#r+ NSg/VPt NSg/VB/J/P J        P  NSg/J+ NPr+ . NPr/C NSg/R/C R\n> together , for   Mrs  . Wilson sat      discreetly in        another car  . Tom     deferred that          much\n# J        . R/C/P NPl+ . NPr+   NSg/VP/J R          NPr/J/R/P I/D     NSg+ . NPr/VB+ NSg/VP/J NSg/I/C/Ddem+ NSg/I/J/R/Dq\n> to the sensibilities of those  East   Eggers who    might    be       on  the train   .\n# P  D   NPl           P  I/Ddem NPr/J+ ?      NPr/I+ Nᴹ/VXB/J NSg/VLXB J/P D   NSg/VB+ .\n>\n#\n> She  had changed her     dress   to a    brown        figured muslin , which stretched tight over\n# ISg+ VP  VP/J    ISg/D$+ NSg/VB+ P  D/P+ NPr🅪Sg/VB/J+ VP/J+   NSg+   . I/C+  VP/J      VB/J  NSg/J/P\n> her     rather     wide   hips    as    Tom     helped her     to the platform in        New    York . At    the\n# ISg/D$+ NPr/VB/J/R NSg/J+ NPl/V3+ R/C/P NPr/VB+ VP/J   ISg/D$+ P  D   NSg/VB   NPr/J/R/P NSg/J+ NPr+ . NSg/P D+\n> news   - stand  she  bought a   copy   of Town Tattle and  a   moving   - picture magazine , and\n# Nᴹ/VB+ . NSg/VB ISg+ NSg/VP D/P NSg/VB P  NSg+ NSg/VB VB/C D/P Nᴹ/Vg/J+ . NSg/VB+ NSg+     . VB/C\n> in        the station drug    - store   some     cold  cream      and  a   small    flask  of perfume  .\n# NPr/J/R/P D   NSg/VB+ NSg/VB+ . NSg/VB+ I/J/R/Dq NSg/J N🅪Sg/VB/J+ VB/C D/P NPr/VB/J NSg/VB P  N🅪Sg/VB+ .\n> Up         - stairs , in        the solemn echoing  drive   she  let     four taxicabs drive   away before\n# NSg/VB/J/P . NPl+   . NPr/J/R/P D+  J+     Nᴹ/Vg/J+ N🅪Sg/VB ISg+ NSg/VBP NSg  NPl/V3   N🅪Sg/VB VB/J C/P\n> she  selected a   new   one      , lavender - colored     with gray           upholstery , and  in        this   we\n# ISg+ VP/J     D/P NSg/J NSg/I/J+ . Nᴹ/VB/J  . NSg/VP/J/Am P    NPr🅪Sg/VB/J/Am NSg        . VB/C NPr/J/R/P I/Ddem IPl+\n> slid out          from the mass        of the station into the glowing sunshine . But     immediately\n# VP   NSg/VB/J/R/P P    D   NPr🅪Sg/VB/J P  D   NSg/VB+ P    D   Nᴹ/Vg/J Nᴹ/J+    . NSg/C/P R\n> she  turned sharply from the window  and  , leaning forward  , tapped on  the front\n# ISg+ VP/J   R       P    D+  NSg/VB+ VB/C . Nᴹ/Vg/J NSg/VB/J . VP/J   J/P D   NSg/VB/J+\n> glass      .\n# NPr🅪Sg/VB+ .\n>\n#\n> “ I       want   to get    one     of those   dogs    , ” she  said earnestly . “ I       want   to get    one     for\n# . ISg/#r+ NSg/VB P  NSg/VB NSg/I/J P  I/Ddem+ NPl/V3+ . . ISg+ VP/J R         . . ISg/#r+ NSg/VB P  NSg/VB NSg/I/J R/C/P\n> the apartment . They’re nice  to have    — a   dog       . ”\n# D+  NSg+      . K       NPr/J P  NSg/VXB . D/P NSg/VB/J+ . .\n>\n#\n> We   backed up         to a    gray            old    man       who    bore     an  absurd resemblance to John D.\n# IPl+ VP/J   NSg/VB/J/P P  D/P+ NPr🅪Sg/VB/J/Am+ NSg/J+ NPr/VB/J+ NPr/I+ NSg/VBPt D/P NSg/J  NSg         P  NPr+ ?\n> Rockefeller . In        a    basket  swung from his     neck    cowered a   dozen very recent puppies\n# NPr         . NPr/J/R/P D/P+ NSg/VB+ VPp   P    ISg/D$+ NSg/VB+ VP/J    D/P NSg   J/R  NSg/J  NPl/V3\n> of an  indeterminate breed   .\n# P  D/P NSg/J         NSg/VB+ .\n>\n#\n> “ What   kind   are they ? ” asked Mrs  . Wilson eagerly , as    he       came      to the taxi    - window  .\n# . NSg/I+ NSg/J+ VLB IPl+ . . VP/J  NPl+ . NPr+   R       . R/C/P NPr/ISg+ NSg/VPt/P P  D   NSg/VB+ . NSg/VB+ .\n>\n#\n> “ All           kinds . What   kind   do  you    want   , lady    ? ”\n# . NSg/I/J/C/Dq+ NPl+  . NSg/I+ NSg/J+ VXB ISgPl+ NSg/VB . NPr/VB+ . .\n>\n#\n> “ I’d like         to get    one     of those  police dogs    ; I       don’t suppose you    got that         kind   ? ”\n# . K   NSg/VB/J/C/P P  NSg/VB NSg/I/J P  I/Ddem Nᴹ/VB+ NPl/V3+ . ISg/#r+ VXB   VB      ISgPl+ VP  NSg/I/C/Ddem NSg/J+ . .\n>\n#\n> The man       peered doubtfully into the basket  , plunged in        his     hand    and  drew    one     up         ,\n# D+  NPr/VB/J+ VP/J   R          P    D   NSg/VB+ . VP/J    NPr/J/R/P ISg/D$+ NSg/VB+ VB/C NPr/VPt NSg/I/J NSg/VB/J/P .\n> wriggling , by    the back     of the neck    .\n# Nᴹ/Vg/J   . NSg/P D   NSg/VB/J P  D   NSg/VB+ .\n>\n#\n> “ That’s no        police dog       , ” said Tom     .\n# . NSg$   NSg/Dq/P+ Nᴹ/VB+ NSg/VB/J+ . . VP/J NPr/VB+ .\n>\n#\n> “ No       , it’s not     exactly a   police dog       , ” said the man       with disappointment in        his\n# . NSg/Dq/P . K    NSg/R/C R       D/P Nᴹ/VB+ NSg/VB/J+ . . VP/J D   NPr/VB/J+ P    NSg+           NPr/J/R/P ISg/D$+\n> voice   . “ It’s more         of an  Airedale . ” He       passed his     hand    over    the brown       washrag of\n# NSg/VB+ . . K    NPr/I/J/R/Dq P  D/P NPr      . . NPr/ISg+ VP/J   ISg/D$+ NSg/VB+ NSg/J/P D   NPr🅪Sg/VB/J NSg     P\n> a   back      . “ Look   at    that          coat    . Some      coat    . That’s a    dog       that’ll never bother you\n# D/P NSg/VB/J+ . . NSg/VB NSg/P NSg/I/C/Ddem+ NSg/VB+ . I/J/R/Dq+ NSg/VB+ . NSg$   D/P+ NSg/VB/J+ K       R     Nᴹ/VB  ISgPl+\n> with catching cold  . ”\n# P    Nᴹ/Vg/J  NSg/J . .\n>\n#\n> “ I       think  it’s cute , ” said Mrs  . Wilson enthusiastically . “ How   much         is  it       ? ”\n# . ISg/#r+ NSg/VB K    J    . . VP/J NPl+ . NPr+   R                . . NSg/C NSg/I/J/R/Dq VL3 NPr/ISg+ . .\n>\n#\n> “ That          dog       ? ” He       looked at    it       admiringly . “ That         dog       will    cost       you    ten  dollars . ”\n# . NSg/I/C/Ddem+ NSg/VB/J+ . . NPr/ISg+ VP/J   NSg/P NPr/ISg+ R          . . NSg/I/C/Ddem NSg/VB/J+ NPr/VXB N🅪Sg/VBP/J ISgPl+ NSg+ NPl+    . .\n>\n#\n> The Airedale — undoubtedly there was  an  Airedale concerned in        it       somewhere , though\n# D   NPr      . R           R+    VLPt D/P NPr      VP/J      NPr/J/R/P NPr/ISg+ NSg       . C\n> its     feet were     startlingly white       — changed hands   and  settled down        into Mrs  .\n# ISg/D$+ NPl+ NSg/VLPt R           NPr🅪Sg/VB/J . VP/J    NPl/V3+ VB/C VP/J    N🅪Sg/VB/J/P P    NPl+ .\n> Wilson’s lap       , where   she  fondled the weatherproof coat    with rapture .\n# NPr$     NSg/VB/J+ . NSg/R/C ISg+ VP/J    D   VB/J         NSg/VB+ P    NSg/VB  .\n>\n#\n> “ Is  it       a   boy    or    a    girl    ? ” she  asked delicately .\n# . VL3 NPr/ISg+ D/P NSg/VB NPr/C D/P+ NSg/VB+ . . ISg+ VP/J  R          .\n>\n#\n> “ That          dog       ? That          dog’s a   boy     . ”\n# . NSg/I/C/Ddem+ NSg/VB/J+ . NSg/I/C/Ddem+ NSg$  D/P NSg/VB+ . .\n>\n#\n> “ It’s a    bitch   , ” said Tom     decisively . “ Here’s your money   . Go       and  buy    ten more\n# . K    D/P+ NSg/VB+ . . VP/J NPr/VB+ R          . . K      D$+  N🅪Sg/J+ . NSg/VB/J VB/C NSg/VB NSg NPr/I/J/R/Dq\n> dogs    with it       . ”\n# NPl/V3+ P    NPr/ISg+ . .\n>\n#\n> We   drove   over    to Fifth     Avenue , warm     and  soft  , almost pastoral , on  the summer\n# IPl+ NSg/VPt NSg/J/P P  NSg/VB/J+ NSg+   . NSg/VB/J VB/C NSg/J . R      NSg/J    . J/P D   NPr🅪Sg/VB+\n> Sunday  afternoon . I       wouldn’t have    been     surprised to see    a   great flock  of white\n# NSg/VB+ N🅪Sg+     . ISg/#r+ VXB      NSg/VXB NSg/VLPp VP/J      P  NSg/VB D/P NSg/J NSg/VB P  NPr🅪Sg/VB/J\n> sheep  turn   the corner  .\n# NSgPl+ NSg/VB D   NSg/VB+ .\n>\n#\n> “ Hold     on  , ” I       said , “ I       have    to leave  you    here . ”\n# . NSg/VB/J J/P . . ISg/#r+ VP/J . . ISg/#r+ NSg/VXB P  NSg/VB ISgPl+ J/R  . .\n>\n#\n> “ No       , you    don’t , ” interposed Tom     quickly . “ Myrtle’ll be       hurt      if    you    don’t come       up\n# . NSg/Dq/P . ISgPl+ VXB   . . VP/J       NPr/VB+ R       . . ?         NSg/VLXB NSg/VBP/J NSg/C ISgPl+ VXB   NSg/VBPp/P NSg/VB/J/P\n> to the apartment . Won’t you    , Myrtle ? ”\n# P  D   NSg+      . VXB   ISgPl+ . NPr    . .\n>\n#\n> “ Come       on  , ” she  urged . “ I'll telephone my  sister  Catherine . She’s said to be       very\n# . NSg/VBPp/P J/P . . ISg+ VP/J  . . K    NSg/VB+   D$+ NSg/VB+ NPr+      . K     VP/J P  NSg/VLXB J/R\n> beautiful by    people  who    ought     to know . ”\n# NSg/J     NSg/P NPl/VB+ NPr/I+ NSg/I/VXB P  VB   . .\n>\n#\n> “ Well       , I’d like         to , but     — ”\n# . NSg/VB/J/R . K   NSg/VB/J/C/P P  . NSg/C/P . .\n>\n#\n> We   went    on  , cutting  back     again over    the Park    toward the West      Hundreds . At    158th\n# IPl+ NSg/VPt J/P . NSg/Vg/J NSg/VB/J P     NSg/J/P D   NPr/VB+ J/P    D+  NPr/VB/J+ NPl+     . NSg/P #\n> Street    the cab     stopped at    one     slice     in        a   long     white       cake    of apartment - houses  .\n# NSg/VB/J+ D   NSg/VB+ VP/J    NSg/P NSg/I/J NSg/VB/J+ NPr/J/R/P D/P NPr/VB/J NPr🅪Sg/VB/J N🅪Sg/VB P  NSg+      . NPl/V3+ .\n> Throwing a   regal homecoming glance  around the neighborhood , Mrs  . Wilson gathered\n# Nᴹ/Vg/J  D/P NSg/J NSg        NSg/VB+ J/P    D   NSg/Am+      . NPl+ . NPr+   VP/J\n> up         her     dog       and  her     other     purchases , and  went    haughtily in        .\n# NSg/VB/J/P ISg/D$+ NSg/VB/J+ VB/C ISg/D$+ NSg/VB/J+ NPl/V3+   . VB/C NSg/VPt R         NPr/J/R/P .\n>\n#\n> “ I’m going   to have    the McKees come       up         , ” she  announced as    we   rose      in        the\n# . K   Nᴹ/Vg/J P  NSg/VXB D   ?      NSg/VBPp/P NSg/VB/J/P . . ISg+ VP/J      R/C/P IPl+ NPr/VPt/J NPr/J/R/P D\n> elevator . “ And  , of course  , I       got to call   up         my  sister  , too . ”\n# NSg/VB+  . . VB/C . P  NSg/VB+ . ISg/#r+ VP  P  NSg/VB NSg/VB/J/P D$+ NSg/VB+ . R   . .\n>\n#\n> The apartment was  on  the top       floor   — a   small    living   - room      , a   small    dining   - room      , a\n# D+  NSg+      VLPt J/P D   NSg/VB/J+ NSg/VB+ . D/P NPr/VB/J Nᴹ/Vg/J+ . N🅪Sg/VB/J . D/P NPr/VB/J Nᴹ/Vg/J+ . N🅪Sg/VB/J . D/P+\n> small     bedroom , and  a    bath    . The living   - room       was  crowded to the doors  with a   set\n# NPr/VB/J+ NSg+    . VB/C D/P+ NSg/VB+ . D+  Nᴹ/Vg/J+ . N🅪Sg/VB/J+ VLPt VP/J    P  D   NPl/V3 P    D/P NPr/VBP/J\n> of tapestried furniture entirely too large for   it       , so          that          to move   about was  to\n# P  J          Nᴹ+       R        R   NSg/J R/C/P NPr/ISg+ . NSg/I/J/R/C NSg/I/C/Ddem+ P  NSg/VB J/P   VLPt P\n> stumble continually over    scenes of ladies  swinging in        the gardens of Versailles .\n# NSg/VB  R           NSg/J/P NPl/V3 P  NPl/V3+ Nᴹ/Vg/J  NPr/J/R/P D   NPl/V3  P  NPr+       .\n> The only   picture was  an  over    - enlarged photograph , apparently a   hen    sitting  on  a\n# D+  J/R/C+ NSg/VB+ VLPt D/P NSg/J/P . VP/J     NSg/VB+    . R          D/P NSg/VB NSg/Vg/J J/P D/P\n> blurred rock       . Looked at    from a    distance , however , the hen    resolved itself into a\n# VP/J    NPr🅪Sg/VB+ . VP/J   NSg/P P    D/P+ N🅪Sg/VB+ . C       . D   NSg/VB VP/J     ISg+   P    D/P\n> bonnet , and  the countenance of a   stout     old   lady    beamed down        into the room       .\n# NSg/VB . VB/C D   NSg/VB      P  D/P NPr/VB/J+ NSg/J NPr/VB+ VP/J   N🅪Sg/VB/J/P P    D   N🅪Sg/VB/J+ .\n> Several old   copies of Town Tattle lay        on  the table   together with a   copy   of\n# J/Dq    NSg/J NPl/V3 P  NSg+ NSg/VB NSg/VBPt/J J/P D   NSg/VB+ J        P    D/P NSg/VB P\n> “ Simon Called Peter      , ” and  some     of the small    scandal  magazines of Broadway . Mrs  .\n# . NPr+  VP/J   NPr/VB/JC+ . . VB/C I/J/R/Dq P  D   NPr/VB/J N🅪Sg/VB+ NPl       P  NPr/J+   . NPl+ .\n> Wilson was  first concerned with the dog       . A   reluctant elevator - boy     went    for   a   box\n# NPr+   VLPt NSg/J VP/J      P    D+  NSg/VB/J+ . D/P J         NSg/VB+  . NSg/VB+ NSg/VPt R/C/P D/P NSg/VB\n> full     of straw     and  some      milk     , to which he       added on  his     own      initiative a   tin       of\n# NSg/VB/J P  N🅪Sg/VB/J VB/C I/J/R/Dq+ N🅪Sg/VB+ . P  I/C+  NPr/ISg+ VP/J  J/P ISg/D$+ NSg/VB/J NSg/J+     D/P N🅪Sg/VB/J P\n> large , hard      dog       - biscuits — one     of which decomposed apathetically in        the saucer of\n# NSg/J . N🅪Sg/J/R+ NSg/VB/J+ . NPl      . NSg/I/J P  I/C+  VP/J       R             NPr/J/R/P D   NSg/VB P\n> milk     all          afternoon . Meanwhile Tom     brought out          a   bottle of whiskey from a   locked\n# N🅪Sg/VB+ NSg/I/J/C/Dq N🅪Sg+     . NSg       NPr/VB+ VP      NSg/VB/J/R/P D/P NSg/VB P  N🅪Sg    P    D/P VP/J\n> bureau door    .\n# NSg+   NSg/VB+ .\n>\n#\n> I       have    been     drunk     just twice in        my  life     , and  the second    time       was  that         afternoon ;\n# ISg/#r+ NSg/VXB NSg/VLPp NSg/VPp/J J/R  R     NPr/J/R/P D$+ N🅪Sg/VB+ . VB/C D+  NSg/VB/J+ N🅪Sg/VB/J+ VLPt NSg/I/C/Ddem N🅪Sg+     .\n> so          everything that          happened has a   dim      , hazy  cast     over    it       , although until after\n# NSg/I/J/R/C NSg/I/VB+  NSg/I/C/Ddem+ VP/J     V3  D/P NSg/VB/J . NSg/J NSg/VB/J NSg/J/P NPr/ISg+ . C        C/P   P\n> eight o’clock the apartment was  full     of cheerful sun     . Sitting  on  Tom’s lap       Mrs  .\n# NSg/J R       D+  NSg+      VLPt NSg/VB/J P  J+       NPr/VB+ . NSg/Vg/J J/P NPr$  NSg/VB/J+ NPl+ .\n> Wilson called up         several people  on  the telephone ; then      there were     no        cigarettes ,\n# NPr+   VP/J   NSg/VB/J/P J/Dq    NPl/VB+ J/P D+  NSg/VB+   . NSg/J/R/C R+    NSg/VLPt NSg/Dq/P+ NPl/V3+    .\n> and  I       went    out          to buy    some     at    the drugstore on  the corner  . When    I       came      back     they\n# VB/C ISg/#r+ NSg/VPt NSg/VB/J/R/P P  NSg/VB I/J/R/Dq NSg/P D   NSg       J/P D   NSg/VB+ . NSg/I/C ISg/#r+ NSg/VPt/P NSg/VB/J IPl+\n> had both   disappeared , so          I       sat      down        discreetly in        the living   - room       and  read    a\n# VP  I/C/Dq VP/J        . NSg/I/J/R/C ISg/#r+ NSg/VP/J N🅪Sg/VB/J/P R          NPr/J/R/P D   Nᴹ/Vg/J+ . N🅪Sg/VB/J+ VB/C NSg/VBP D/P\n> chapter of “ Simon Called Peter      ” — either it       was  terrible stuff  or    the whiskey\n# NSg/VB  P  . NPr+  VP/J   NPr/VB/JC+ . . I/C    NPr/ISg+ VLPt J        Nᴹ/VB+ NPr/C D   N🅪Sg\n> distorted things , because it       didn’t make   any    sense    to me       .\n# VP/J      NPl+   . C/P     NPr/ISg+ VXPt   NSg/VB I/R/Dq N🅪Sg/VB+ P  NPr/ISg+ .\n>\n#\n> Just as    Tom     and  Myrtle ( after the first drink   Mrs  . Wilson and  I       called each\n# J/R  R/C/P NPr/VB+ VB/C NPr    . P     D   NSg/J NSg/VB+ NPl+ . NPr+   VB/C ISg/#r+ VP/J   Dq\n> other    by    our first  names   ) reappeared , company commenced to arrive at    the\n# NSg/VB/J NSg/P D$+ NSg/J+ NPl/V3+ . VP/J       . N🅪Sg+   VP/J      P  VB     NSg/P D\n> apartment - door    .\n# NSg+      . NSg/VB+ .\n>\n#\n> The sister  , Catherine , was  a   slender , worldly girl    of about thirty , with a\n# D+  NSg/VB+ . NPr+      . VLPt D/P J       . J       NSg/VB+ P  J/P   NSg    . P    D/P\n> solid , sticky   bob    of red    hair     , and  a   complexion powdered milky white       . Her\n# NSg/J . NSg/VB/J NPr/VB P  N🅪Sg/J N🅪Sg/VB+ . VB/C D/P NSg/VB+    VP/J     J     NPr🅪Sg/VB/J . ISg/D$+\n> eyebrows had been     plucked and  then      drawn on  again at    a   more         rakish angle   , but\n# NPl/V3+  VP  NSg/VLPp VP/J    VB/C NSg/J/R/C VPp/J J/P P     NSg/P D/P NPr/I/J/R/Dq J      NSg/VB+ . NSg/C/P\n> the efforts of nature   toward the restoration of the old   alignment gave a   blurred\n# D   NPl/V3  P  N🅪Sg/VB+ J/P    D   NPr🅪Sg      P  D   NSg/J N🅪Sg+     VPt  D/P VP/J\n> air      to her     face    . When    she  moved about there was  an  incessant clicking as\n# N🅪Sg/VB+ P  ISg/D$+ NSg/VB+ . NSg/I/C ISg+ VP/J  J/P   R+    VLPt D/P J         Nᴹ/Vg/J  R/C/P\n> innumerable pottery bracelets jingled up         and  down        upon her     arms    . She  came      in\n# J           N🅪Sg+   NPl/V3    VP/J    NSg/VB/J/P VB/C N🅪Sg/VB/J/P P    ISg/D$+ NPl/V3+ . ISg+ NSg/VPt/P NPr/J/R/P\n> with such   a    proprietary haste   , and  looked around so          possessively at    the\n# P    NSg/I+ D/P+ NSg/J+      NSg/VB+ . VB/C VP/J   J/P    NSg/I/J/R/C R            NSg/P D+\n> furniture that          I       wondered if    she  lived here . But     when    I       asked her     she  laughed\n# Nᴹ+       NSg/I/C/Ddem+ ISg/#r+ VP/J     NSg/C ISg+ VP/J  J/R  . NSg/C/P NSg/I/C ISg/#r+ VP/J  ISg/D$+ ISg+ VP/J\n> immoderately , repeated my  question aloud , and  told me       she  lived with a   girl\n# R            . VP/J     D$+ NSg/VB+  J     . VB/C VP   NPr/ISg+ ISg+ VP/J  P    D/P NSg/VB+\n> friend    at    a   hotel .\n# NPr/VB/J+ NSg/P D/P NSg+  .\n>\n#\n> Mr   . McKee was  a   pale     , feminine man       from the flat     below . He       had just shaved , for\n# NSg+ . NPr   VLPt D/P NSg/VB/J . NSg/J    NPr/VB/J+ P    D   NSg/VB/J P     . NPr/ISg+ VP  J/R  VP/J   . R/C/P\n> there was  a   white       spot     of lather on  his     cheekbone , and  he       was  most         respectful in\n# R+    VLPt D/P NPr🅪Sg/VB/J NSg/VB/J P  Nᴹ/VB  J/P ISg/D$+ NSg       . VB/C NPr/ISg+ VLPt NSg/I/J/R/Dq J          NPr/J/R/P\n> his     greeting to every one      in        the room       . He       informed me       that         he       was  in        the\n# ISg/D$+ Nᴹ/Vg/J+ P  Dq    NSg/I/J+ NPr/J/R/P D   N🅪Sg/VB/J+ . NPr/ISg+ VP/J     NPr/ISg+ NSg/I/C/Ddem NPr/ISg+ VLPt NPr/J/R/P D\n> “ artistic game      , ” and  I       gathered later that         he       was  a   photographer and  had made\n# . J+       NSg/VB/J+ . . VB/C ISg/#r+ VP/J     JC    NSg/I/C/Ddem NPr/ISg+ VLPt D/P NSg          VB/C VP  VP\n> the dim      enlargement of Mrs  . Wilson’s mother    which hovered like         an  ectoplasm on\n# D   NSg/VB/J NSg         P  NPl+ . NPr$     NSg/VB/J+ I/C+  VP/J    NSg/VB/J/C/P D/P N🅪Sg      J/P\n> the wall    . His     wife      was  shrill   , languid , handsome , and  horrible . She  told me       with\n# D   NPr/VB+ . ISg/D$+ NSg/VB/J+ VLPt NSg/VB/J . NSg/J   . VB/J     . VB/C NSg/J    . ISg+ VP   NPr/ISg+ P\n> pride  that          her     husband had photographed her     a   hundred and  twenty - seven times\n# Nᴹ/VB+ NSg/I/C/Ddem+ ISg/D$+ NSg/VB+ VP  VP/J         ISg/D$+ D/P NSg     VB/C NSg    . NSg   NPl/V3\n> since they had been     married  .\n# C/P   IPl+ VP  NSg/VLPp NSg/VP/J .\n>\n#\n> Mrs  . Wilson had changed her     costume some      time       before , and  was  now       attired in        an\n# NPl+ . NPr+   VP  VP/J    ISg/D$+ NSg/VB  I/J/R/Dq+ N🅪Sg/VB/J+ C/P    . VB/C VLPt NSg/J/R/C VP/J    NPr/J/R/P D/P\n> elaborate afternoon dress  of cream      - colored     chiffon , which gave out          a   continual\n# VB/J      N🅪Sg+     NSg/VB P  N🅪Sg/VB/J+ . NSg/VP/J/Am NSg     . I/C+  VPt  NSg/VB/J/R/P D/P J\n> rustle as    she  swept about the room       . With the influence of the dress   her\n# NSg/VB R/C/P ISg+ VP/J  J/P   D   N🅪Sg/VB/J+ . P    D   N🅪Sg/VB   P  D+  NSg/VB+ ISg/D$+\n> personality had also undergone a    change   . The intense vitality that          had been     so\n# N🅪Sg+       VP  R/C  VB        D/P+ N🅪Sg/VB+ . D+  J+      Nᴹ+      NSg/I/C/Ddem+ VP  NSg/VLPp NSg/I/J/R/C\n> remarkable in        the garage  was  converted into impressive hauteur . Her     laughter ,\n# J          NPr/J/R/P D+  NSg/VB+ VLPt VP/J      P    J          NSg     . ISg/D$+ Nᴹ+      .\n> her     gestures , her     assertions became more         violently affected moment by    moment ,\n# ISg/D$+ NPl/V3+  . ISg/D$+ NSg+       VPt    NPr/I/J/R/Dq R         NSg/VP/J NSg+   NSg/P NSg+   .\n> and  as    she  expanded the room       grew smaller around her     , until she  seemed to be\n# VB/C R/C/P ISg+ VP/J     D+  N🅪Sg/VB/J+ VPt  NSg/JC  J/P    ISg/D$+ . C/P   ISg+ VP/J   P  NSg/VLXB\n> revolving on  a   noisy , creaking pivot  through the smoky air      .\n# Nᴹ/Vg/J   J/P D/P J     . Nᴹ/Vg/J+ NSg/VB NSg/J/P D   J     N🅪Sg/VB+ .\n>\n#\n> “ My  dear     , ” she  told her     sister  in        a   high       , mincing shout  , “ most         of these  fellas\n# . D$+ NSg/VB/J . . ISg+ VP   ISg/D$+ NSg/VB+ NPr/J/R/P D/P NSg/VB/J/R . Nᴹ/Vg/J NSg/VB . . NSg/I/J/R/Dq P  I/Ddem NPl+\n> will    cheat  you    every time       . All          they think  of is  money   . I       had a    woman   up         here\n# NPr/VXB NSg/VB ISgPl+ Dq    N🅪Sg/VB/J+ . NSg/I/J/C/Dq IPl+ NSg/VB P  VL3 N🅪Sg/J+ . ISg/#r+ VP  D/P+ NSg/VB+ NSg/VB/J/P J/R\n> last      week   to look   at    my  feet , and  when    she  gave me       the bill    you’d of thought she\n# NSg/VB/J+ NSg/J+ P  NSg/VB NSg/P D$+ NPl+ . VB/C NSg/I/C ISg+ VPt  NPr/ISg+ D+  NPr/VB+ K     P  N🅪Sg/VP ISg+\n> had my  appendicitus out          . ”\n# VP  D$+ ?            NSg/VB/J/R/P . .\n>\n#\n> “ What   was  the name   of the woman   ? ” asked Mrs  . McKee .\n# . NSg/I+ VLPt D   NSg/VB P  D+  NSg/VB+ . . VP/J  NPl+ . NPr   .\n>\n#\n> “ Mrs  . Eberhardt . She  goes   around looking at    people’s feet in        their own       homes   . ”\n# . NPl+ . ?         . ISg+ NPl/V3 J/P    Nᴹ/Vg/J NSg/P NSg$     NPl+ NPr/J/R/P D$+   NSg/VB/J+ NPl/V3+ . .\n>\n#\n> “ I       like         your dress   , ” remarked Mrs  . McKee , “ I       think  it’s adorable . ”\n# . ISg/#r+ NSg/VB/J/C/P D$+  NSg/VB+ . . VP/J     NPl+ . NPr   . . ISg/#r+ NSg/VB K    J        . .\n>\n#\n> Mrs  . Wilson rejected the compliment by    raising her     eyebrow in        disdain .\n# NPl+ . NPr+   VP/J     D+  NSg/VB+    NSg/P Nᴹ/Vg/J ISg/D$+ NSg/VB  NPr/J/R/P Nᴹ/VB+  .\n>\n#\n> “ It’s just a   crazy old   thing , ” she  said . “ I       just slip   it       on  sometimes when    I\n# . K    J/R  D/P NSg/J NSg/J NSg+  . . ISg+ VP/J . . ISg/#r+ J/R  NSg/VB NPr/ISg+ J/P R         NSg/I/C ISg/#r+\n> don’t care     what   I       look   like         . ”\n# VXB   N🅪Sg/VB+ NSg/I+ ISg/#r+ NSg/VB NSg/VB/J/C/P . .\n>\n#\n> “ But     it       looks  wonderful on  you    , if    you    know what   I       mean     , ” pursued Mrs  . McKee .\n# . NSg/C/P NPr/ISg+ NPl/V3 J         J/P ISgPl+ . NSg/C ISgPl+ VB   NSg/I+ ISg/#r+ NSg/VB/J . . VP/J    NPl+ . NPr   .\n> “ If    Chester could   only  get    you    in        that          pose   I       think  he       could   make   something of\n# . NSg/C NPr+    NSg/VXB J/R/C NSg/VB ISgPl+ NPr/J/R/P NSg/I/C/Ddem+ NSg/VB ISg/#r+ NSg/VB NPr/ISg+ NSg/VXB NSg/VB NSg/I/J   P\n> it       . ”\n# NPr/ISg+ . .\n>\n#\n> We   all          looked in        silence at    Mrs  . Wilson , who    removed a   strand of hair     from over\n# IPl+ NSg/I/J/C/Dq VP/J   NPr/J/R/P NSg/VB+ NSg/P NPl+ . NPr+   . NPr/I+ VP/J    D/P NSg/VB P  N🅪Sg/VB+ P    NSg/J/P\n> her     eyes    and  looked back     at    us       with a   brilliant smile   . Mr   . McKee regarded her\n# ISg/D$+ NPl/V3+ VB/C VP/J   NSg/VB/J NSg/P NPr/IPl+ P    D/P NSg/J     NSg/VB+ . NSg+ . NPr   VP/J     ISg/D$+\n> intently with his     head      on  one      side      , and  then      moved his     hand    back     and  forth\n# R        P    ISg/D$+ NPr/VB/J+ J/P NSg/I/J+ NSg/VB/J+ . VB/C NSg/J/R/C VP/J  ISg/D$+ NSg/VB+ NSg/VB/J VB/C R\n> slowly in        front    of his     face    .\n# R      NPr/J/R/P NSg/VB/J P  ISg/D$+ NSg/VB+ .\n>\n#\n> “ I       should change  the light      , ” he       said after a    moment . “ I’d like         to bring out          the\n# . ISg/#r+ VXB    N🅪Sg/VB D+  N🅪Sg/VB/J+ . . NPr/ISg+ VP/J P     D/P+ NSg+   . . K   NSg/VB/J/C/P P  VB    NSg/VB/J/R/P D\n> modelling  of the features . And  I’d try      to get    hold     of all          the back     hair     . ”\n# Nᴹ/Vg/Comm P  D   NPl/V3+  . VB/C K   NSg/VB/J P  NSg/VB NSg/VB/J P  NSg/I/J/C/Dq D   NSg/VB/J N🅪Sg/VB+ . .\n>\n#\n> “ I       wouldn’t think  of changing the light      , ” cried Mrs  . McKee . “ I       think  it’s — — — ”\n# . ISg/#r+ VXB      NSg/VB P  Nᴹ/Vg/J  D   N🅪Sg/VB/J+ . . VP/J  NPl+ . NPr   . . ISg/#r+ NSg/VB K    . . . .\n>\n#\n> Her     husband said “ Sh ! ” and  we   all          looked at    the subject   again , whereupon Tom\n# ISg/D$+ NSg/VB+ VP/J . W? . . VB/C IPl+ NSg/I/J/C/Dq VP/J+  NSg/P D+  NSg/VB/J+ P     . C         NPr/VB+\n> Buchanan yawned audibly and  got to his     feet .\n# NPr+     VP/J   R       VB/C VP  P  ISg/D$+ NPl+ .\n>\n#\n> “ You    McKees have    something to drink  , ” he       said . “ Get    some     more         ice       and  mineral\n# . ISgPl+ ?      NSg/VXB NSg/I/J+  P  NSg/VB . . NPr/ISg+ VP/J . . NSg/VB I/J/R/Dq NPr/I/J/R/Dq NPr🅪Sg/VB VB/C NSg/J+\n> water    , Myrtle , before everybody goes   to sleep   . ”\n# N🅪Sg/VB+ . NPr    . C/P    NSg/I+    NPl/V3 P  N🅪Sg/VB . .\n>\n#\n> “ I       told that         boy    about the ice        . ” Myrtle raised her     eyebrows in        despair at    the\n# . ISg/#r+ VP   NSg/I/C/Ddem NSg/VB J/P   D+  NPr🅪Sg/VB+ . . NPr    VP/J   ISg/D$+ NPl/V3   NPr/J/R/P NSg/VB+ NSg/P D\n> shiftlessness of the lower     orders  . “ These   people  ! You    have    to keep   after them\n# Nᴹ            P  D   NSg/VB/JC NPl/V3+ . . I/Ddem+ NPl/VB+ . ISgPl+ NSg/VXB P  NSg/VB P     NSg/IPl+\n> all           the time       . ”\n# NSg/I/J/C/Dq+ D+  N🅪Sg/VB/J+ . .\n>\n#\n> She  looked at    me       and  laughed pointlessly . Then      she  flounced over    to the dog       ,\n# ISg+ VP/J   NSg/P NPr/ISg+ VB/C VP/J    R           . NSg/J/R/C ISg+ VP/J     NSg/J/P P  D   NSg/VB/J+ .\n> kissed it       with ecstasy , and  swept into the kitchen , implying that         a   dozen chefs\n# VP/J   NPr/ISg+ P    NSg/VB  . VB/C VP/J  P    D   NSg/VB+ . Nᴹ/Vg/J  NSg/I/C/Ddem D/P NSg   NPl/V3+\n> awaited her     orders  there .\n# VP/J    ISg/D$+ NPl/V3+ R     .\n>\n#\n> “ I’ve done      some     nice  things out          on  Long     Island  , ” asserted Mr   . McKee .\n# . K    NSg/VPp/J I/J/R/Dq NPr/J NPl+   NSg/VB/J/R/P J/P NPr/VB/J NSg/VB+ . . VP/J     NSg+ . NPr   .\n>\n#\n> Tom     looked at    him  blankly .\n# NPr/VB+ VP/J   NSg/P ISg+ R       .\n>\n#\n> “ Two of them     we   have    framed down        - stairs . ”\n# . NSg P  NSg/IPl+ IPl+ NSg/VXB VP/J   N🅪Sg/VB/J/P . NPl+   . .\n>\n#\n> “ Two what   ? ” demanded Tom     .\n# . NSg NSg/I+ . . VP/J     NPr/VB+ .\n>\n#\n> “ Two  studies . One     of them     I       call   ‘          Montauk Point   — The Gulls  , ’ and  the other    I       call\n# . NSg+ NPl/V3+ . NSg/I/J P  NSg/IPl+ ISg/#r+ NSg/VB Unlintable ?       NSg/VB+ . D   NPl/V3 . . VB/C D   NSg/VB/J ISg/#r+ NSg/VB\n> ‘          Montauk Point   — The Sea  . ’ ”\n# Unlintable ?       NSg/VB+ . D   NSg+ . . .\n>\n#\n> The sister  Catherine sat      down        beside me       on  the couch   .\n# D+  NSg/VB+ NPr+      NSg/VP/J N🅪Sg/VB/J/P P      NPr/ISg+ J/P D+  NSg/VB+ .\n>\n#\n> “ Do  you    live down        on  Long      Island  , too , ” she  inquired .\n# . VXB ISgPl+ VB/J N🅪Sg/VB/J/P J/P NPr/VB/J+ NSg/VB+ . R   . . ISg+ VP/J     .\n>\n#\n> “ I       live at    West      Egg      . ”\n# . ISg/#r+ VB/J NSg/P NPr/VB/J+ N🅪Sg/VB+ . .\n>\n#\n> “ Really ? I       was  down        there at    a   party    about a    month  ago . At    a    man       named Gatsby’s .\n# . R      . ISg/#r+ VLPt N🅪Sg/VB/J/P R     NSg/P D/P NSg/VB/J J/P   D/P+ NSg/J+ J/P . NSg/P D/P+ NPr/VB/J+ VP/J  NPr$     .\n> Do  you    know him  ? ”\n# VXB ISgPl+ VB   ISg+ . .\n>\n#\n> “ I       live next     door    to him  . ”\n# . ISg/#r+ VB/J NSg/J/P+ NSg/VB+ P  ISg+ . .\n>\n#\n> “ Well       , they say    he’s a   nephew or    a   cousin  of Kaiser Wilhelm’s . That’s where   all\n# . NSg/VB/J/R . IPl+ NSg/VB NPr$ D/P NSg    NPr/C D/P NSg/VB+ P  NPr    NPr$      . NSg$   NSg/R/C NSg/I/J/C/Dq\n> his     money   comes  from . ”\n# ISg/D$+ N🅪Sg/J+ NPl/V3 P    . .\n>\n#\n> “ Really ? ”\n# . R      . .\n>\n#\n> She  nodded .\n# ISg+ VP     .\n>\n#\n> “ I’m scared of him  . I’d hate    to have    him  get    anything  on  me       . ”\n# . K   VP/J   P  ISg+ . K   N🅪Sg/VB P  NSg/VXB ISg+ NSg/VB NSg/I/VB+ J/P NPr/ISg+ . .\n>\n#\n> This   absorbing information about my  neighbor     was  interrupted by    Mrs  . McKee’s\n# I/Ddem Nᴹ/Vg/J   Nᴹ          J/P   D$+ NSg/VB/J/Am+ VLPt VP/J        NSg/P NPl+ . NPr$\n> pointing suddenly at    Catherine :\n# Nᴹ/Vg/J  R        NSg/P NPr+      .\n>\n#\n> “ Chester , I       think  you    could   do  something with her     , ” she  broke     out          , but     Mr   . McKee\n# . NPr+    . ISg/#r+ NSg/VB ISgPl+ NSg/VXB VXB NSg/I/J+  P    ISg/D$+ . . ISg+ NSg/VPt/J NSg/VB/J/R/P . NSg/C/P NSg+ . NPr\n> only  nodded in        a   bored way    , and  turned his     attention to Tom     .\n# J/R/C VP     NPr/J/R/P D/P VP/J  NSg/J+ . VB/C VP/J   ISg/D$+ NSg+      P  NPr/VB+ .\n>\n#\n> “ I’d like         to do  more         work     on  Long     Island  , if    I       could   get    the entry . All          I       ask    is\n# . K   NSg/VB/J/C/P P  VXB NPr/I/J/R/Dq N🅪Sg/VB+ J/P NPr/VB/J NSg/VB+ . NSg/C ISg/#r+ NSg/VXB NSg/VB D   NSg+  . NSg/I/J/C/Dq ISg/#r+ NSg/VB VL3\n> that         they should give   me       a    start   . ”\n# NSg/I/C/Ddem IPl+ VXB    NSg/VB NPr/ISg+ D/P+ NSg/VB+ . .\n>\n#\n> “ Ask    Myrtle , ” said Tom     , breaking into a   short      shout  of laughter as    Mrs  . Wilson\n# . NSg/VB NPr    . . VP/J NPr/VB+ . Nᴹ/Vg/J  P    D/P NPr/VB/J/P NSg/VB P  Nᴹ+      R/C/P NPl+ . NPr+\n> entered with a    tray    . “ She'll give   you    a   letter of introduction , won’t you    ,\n# VP/J    P    D/P+ NSg/VB+ . . K      NSg/VB ISgPl+ D/P NSg/VB P  NSg+         . VXB   ISgPl+ .\n> Myrtle ? ”\n# NPr    . .\n>\n#\n> “ Do  what   ? ” she  asked , startled .\n# . VXB NSg/I+ . . ISg+ VP/J  . VP/J     .\n>\n#\n> “ You'll give   McKee a   letter of introduction to your husband , so          he       can     do  some\n# . K      NSg/VB NPr   D/P NSg/VB P  NSg+         P  D$+  NSg/VB+ . NSg/I/J/R/C NPr/ISg+ NPr/VXB VXB I/J/R/Dq\n> studies of him  . ” His     lips    moved silently for   a    moment as    he       invented . “ ‘          George\n# NPl/V3  P  ISg+ . . ISg/D$+ NPl/V3+ VP/J  R        R/C/P D/P+ NSg+   R/C/P NPr/ISg+ VP/J     . . Unlintable NPr+\n> B. Wilson at    the Gasoline Pump    , ’ or    something like         that          . ”\n# ?  NPr+   NSg/P D   Nᴹ       NSg/VB+ . . NPr/C NSg/I/J+  NSg/VB/J/C/P NSg/I/C/Ddem+ . .\n>\n#\n> Catherine leaned close    to me       and  whispered in        my  ear       :\n# NPr+      VP/J   NSg/VB/J P  NPr/ISg+ VB/C VP/J      NPr/J/R/P D$+ NSg/VB/J+ .\n>\n#\n> “ Neither of them     can     stand  the person  they’re married  to . ”\n# . I/C     P  NSg/IPl+ NPr/VXB NSg/VB D+  NSg/VB+ K       NSg/VP/J P  . .\n>\n#\n> “ Can’t they ? ”\n# . VXB   IPl+ . .\n>\n#\n> “ Can’t stand  them     . ” She  looked at    Myrtle and  then      at    Tom     . “ What   I       say    is  , why    go\n# . VXB   NSg/VB NSg/IPl+ . . ISg+ VP/J   NSg/P NPr    VB/C NSg/J/R/C NSg/P NPr/VB+ . . NSg/I+ ISg/#r+ NSg/VB VL3 . NSg/VB NSg/VB/J\n> on  living  with them     if    they can’t stand  them     ? If    I       was  them     I’d get    a   divorce\n# J/P Nᴹ/Vg/J P    NSg/IPl+ NSg/C IPl+ VXB   NSg/VB NSg/IPl+ . NSg/C ISg/#r+ VLPt NSg/IPl+ K   NSg/VB D/P NSg/VB+\n> and  get    married  to each other    right    away . ”\n# VB/C NSg/VB NSg/VP/J P  Dq   NSg/VB/J NPr/VB/J VB/J . .\n>\n#\n> “ Doesn’t she  like         Wilson either ? ”\n# . VX3     ISg+ NSg/VB/J/C/P NPr+   I/C    . .\n>\n#\n> The answer  to this    was  unexpected . It       came      from Myrtle , who    had overheard the\n# D+  NSg/VB+ P  I/Ddem+ VLPt NSg/J      . NPr/ISg+ NSg/VPt/P P    NPr    . NPr/I+ VP  VB        D\n> question , and  it       was  violent  and  obscene .\n# NSg/VB+  . VB/C NPr/ISg+ VLPt NSg/VB/J VB/C VB/J    .\n>\n#\n> “ You    see    , ” cried Catherine triumphantly . She  lowered her     voice   again . “ It’s\n# . ISgPl+ NSg/VB . . VP/J  NPr+      R            . ISg+ VP/J    ISg/D$+ NSg/VB+ P     . . K\n> really his     wife      that’s keeping them     apart . She’s a   Catholic , and  they don’t\n# R      ISg/D$+ NSg/VB/J+ NSg$   Nᴹ/Vg/J NSg/IPl+ J     . K     D/P NSg/J    . VB/C IPl+ VXB\n> believe in        divorce . ”\n# VB      NPr/J/R/P NSg/VB+ . .\n>\n#\n> Daisy was  not     a   Catholic , and  I       was  a   little     shocked at    the elaborateness of the\n# NPr+  VLPt NSg/R/C D/P NSg/J    . VB/C ISg/#r+ VLPt D/P NPr/I/J/Dq J       NSg/P D   NSg           P  D+\n> lie     .\n# NPr/VB+ .\n>\n#\n> “ When    they do  get    married  , ” continued Catherine , “ they’re going   West      to live for\n# . NSg/I/C IPl+ VXB NSg/VB NSg/VP/J . . VP/J      NPr+      . . K       Nᴹ/Vg/J NPr/VB/J+ P  VB/J R/C/P\n> a   while       until it       blows  over    . ”\n# D/P NSg/VB/C/P+ C/P   NPr/ISg+ NPl/V3 NSg/J/P . .\n>\n#\n> “ It’d be       more         discreet to go       to Europe . ”\n# . K    NSg/VLXB NPr/I/J/R/Dq J        P  NSg/VB/J P  NPr+   . .\n>\n#\n> “ Oh     , do  you    like         Europe ? ” she  exclaimed surprisingly . “ I       just got back     from\n# . NPr/VB . VXB ISgPl+ NSg/VB/J/C/P NPr+   . . ISg+ VP/J      R            . . ISg/#r+ J/R  VP  NSg/VB/J P\n> Monte Carlo . ”\n# NPr   NPr+  . .\n>\n#\n> “ Really . ”\n# . R      . .\n>\n#\n> “ Just last      year . I       went    over    there with another girl    . ”\n# . J/R  NSg/VB/J+ NSg+ . ISg/#r+ NSg/VPt NSg/J/P R     P    I/D+    NSg/VB+ . .\n>\n#\n> “ Stay     long     ? ”\n# . NSg/VB/J NPr/VB/J . .\n>\n#\n> “ No       , we   just went    to Monte Carlo and  back     . We   went    by    way   of Marseilles . We   had\n# . NSg/Dq/P . IPl+ J/R  NSg/VPt P  NPr   NPr+  VB/C NSg/VB/J . IPl+ NSg/VPt NSg/P NSg/J P  NPr        . IPl+ VP\n> over    twelve hundred dollars when    we   started , but     we   got gyped out          of it       all          in\n# NSg/J/P NSg+   NSg+    NPl+    NSg/I/C IPl+ VP/J    . NSg/C/P IPl+ VP  ?     NSg/VB/J/R/P P  NPr/ISg+ NSg/I/J/C/Dq NPr/J/R/P\n> two days in        the private  rooms   . We   had an   awful time       getting back     , I       can     tell\n# NSg NPl+ NPr/J/R/P D   NSg/VB/J NPl/V3+ . IPl+ VP  D/P+ J+    N🅪Sg/VB/J+ NSg/Vg  NSg/VB/J . ISg/#r+ NPr/VXB NPr/VB\n> you    . God     , how   I       hated that          town ! ”\n# ISgPl+ . NPr/VB+ . NSg/C ISg/#r+ VP/J  NSg/I/C/Ddem+ NSg+ . .\n>\n#\n> The late   afternoon sky      bloomed in        the window  for   a   moment like         the blue      honey     of\n# D+  NSg/J+ N🅪Sg+     N🅪Sg/VB+ VP/J    NPr/J/R/P D   NSg/VB+ R/C/P D/P NSg+   NSg/VB/J/C/P D   N🅪Sg/VB/J N🅪Sg/VB/J P\n> the Mediterranean — then      the shrill   voice  of Mrs  . McKee called me       back     into the\n# D   NPr/J+        . NSg/J/R/C D   NSg/VB/J NSg/VB P  NPl+ . NPr   VP/J   NPr/ISg+ NSg/VB/J P    D\n> room       .\n# N🅪Sg/VB/J+ .\n>\n#\n> “ I       almost made a    mistake , too , ” she  declared vigorously . “ I       almost married  a\n# . ISg/#r+ R      VP   D/P+ NSg/VB+ . R   . . ISg+ VP/J     R          . . ISg/#r+ R      NSg/VP/J D/P\n> little     kyke who’d been     after me       for   years . I       knew he       was  below me       . Everybody\n# NPr/I/J/Dq ?    K     NSg/VLPp P     NPr/ISg+ R/C/P NPl+  . ISg/#r+ VPt  NPr/ISg+ VLPt P     NPr/ISg+ . NSg/I+\n> kept saying    to me       : ‘          Lucille , that          man’s       ’ way    below you    ! ’ But     if    I       hadn’t met\n# VP   N🅪Sg/Vg/J P  NPr/ISg+ . Unlintable NPr+    . NSg/I/C/Ddem+ NPr$/I/VB/J . NSg/J+ P     ISgPl+ . . NSg/C/P NSg/C ISg/#r+ VPt    VP\n> Chester , he’d of got me       sure . ”\n# NPr+    . K    P  VP  NPr/ISg+ J    . .\n>\n#\n> “ Yes    , but     listen , ” said Myrtle Wilson , nodding  her     head      up         and  down        , “ at    least\n# . NPl/VB . NSg/C/P NSg/VB . . VP/J NPr    NPr+   . NSg/VP/J ISg/D$+ NPr/VB/J+ NSg/VB/J/P VB/C N🅪Sg/VB/J/P . . NSg/P NSg/J/Dq\n> you    didn’t marry him  . ”\n# ISgPl+ VXPt   VB    ISg+ . .\n>\n#\n> “ I       know I       didn’t . ”\n# . ISg/#r+ VB   ISg/#r+ VXPt   . .\n>\n#\n> “ Well       , I       married  him  , ” said Myrtle , ambiguously . “ And  that’s the difference\n# . NSg/VB/J/R . ISg/#r+ NSg/VP/J ISg+ . . VP/J NPr    . R           . . VB/C NSg$   D   N🅪Sg/VB\n> between your case       and  mine      . ”\n# NSg/P   D$+  NPr🅪Sg/VB+ VB/C NSg/I/VB+ . .\n>\n#\n> “ Why    did  you    , Myrtle ? ” demanded Catherine . “ Nobody forced you    to . ”\n# . NSg/VB VXPt ISgPl+ . NPr    . . VP/J     NPr+      . . NSg/I+ VP/J   ISgPl+ P  . .\n>\n#\n> Myrtle considered .\n# NPr    VP/J       .\n>\n#\n> “ I       married  him  because I       thought he       was  a   gentleman , ” she  said finally . “ I\n# . ISg/#r+ NSg/VP/J ISg+ C/P     ISg/#r+ N🅪Sg/VP NPr/ISg+ VLPt D/P NSg/J     . . ISg+ VP/J R       . . ISg/#r+\n> thought he       knew something about breeding , but     he       wasn’t fit       to lick   my  shoe    . ”\n# N🅪Sg/VP NPr/ISg+ VPt  NSg/I/J+  J/P   Nᴹ/Vg/J+ . NSg/C/P NPr/ISg+ VPt    NSg/VBP/J P  NSg/VB D$+ NSg/VB+ . .\n>\n#\n> “ You    were     crazy about him  for   a    while       , ” said Catherine .\n# . ISgPl+ NSg/VLPt NSg/J J/P   ISg+ R/C/P D/P+ NSg/VB/C/P+ . . VP/J NPr+      .\n>\n#\n> “ Crazy about him  ! ” cried Myrtle incredulously . “ Who    said I       was  crazy about him  ?\n# . NSg/J J/P   ISg+ . . VP/J  NPr    R             . . NPr/I+ VP/J ISg/#r+ VLPt NSg/J J/P   ISg+ .\n> I       never was  any    more         crazy about him  than I       was  about that          man       there . ”\n# ISg/#r+ R     VLPt I/R/Dq NPr/I/J/R/Dq NSg/J J/P   ISg+ C/P  ISg/#r+ VLPt J/P   NSg/I/C/Ddem+ NPr/VB/J+ R     . .\n>\n#\n> She  pointed suddenly at    me       , and  every one      looked at    me       accusingly . I       tried to\n# ISg+ VP/J    R        NSg/P NPr/ISg+ . VB/C Dq+   NSg/I/J+ VP/J   NSg/P NPr/ISg+ R          . ISg/#r+ VP/J  P\n> show   by    my  expression that          I       expected no        affection .\n# NSg/VB NSg/P D$+ N🅪Sg+      NSg/I/C/Ddem+ ISg/#r+ NSg/VP/J NSg/Dq/P+ Nᴹ+       .\n>\n#\n> “ The only  crazy I       was  was  when    I       married  him  . I       knew right    away I       made a\n# . D   J/R/C NSg/J ISg/#r+ VLPt VLPt NSg/I/C ISg/#r+ NSg/VP/J ISg+ . ISg/#r+ VPt  NPr/VB/J VB/J ISg/#r+ VP   D/P+\n> mistake . He       borrowed somebody’s best       suit    to get    married  in        , and  never even       told\n# NSg/VB+ . NPr/ISg+ VP/J     NSg$       NPr/VXB/JS NSg/VB+ P  NSg/VB NSg/VP/J NPr/J/R/P . VB/C R     NSg/VB/J/R VP\n> me       about it       , and  the man       came      after it       one     day     when    he       was  out          : ‘          Oh     , is  that\n# NPr/ISg+ J/P   NPr/ISg+ . VB/C D   NPr/VB/J+ NSg/VPt/P P     NPr/ISg+ NSg/I/J NPr🅪Sg+ NSg/I/C NPr/ISg+ VLPt NSg/VB/J/R/P . Unlintable NPr/VB . VL3 NSg/I/C/Ddem\n> your suit    ? ’ I       said . ‘          This    is  the first I       ever heard about it       . ’ But     I       gave it       to\n# D$+  NSg/VB+ . . ISg/#r+ VP/J . Unlintable I/Ddem+ VL3 D   NSg/J ISg/#r+ J/R  VP/J  J/P   NPr/ISg+ . . NSg/C/P ISg/#r+ VPt  NPr/ISg+ P\n> him  and  then      I       lay        down        and  cried to beat      the band    all           afternoon . ”\n# ISg+ VB/C NSg/J/R/C ISg/#r+ NSg/VBPt/J N🅪Sg/VB/J/P VB/C VP/J  P  N🅪Sg/VB/J D+  NSg/VB+ NSg/I/J/C/Dq+ N🅪Sg+     . .\n>\n#\n> “ She  really ought     to get    away from him  , ” resumed Catherine to me       . “ They’ve been\n# . ISg+ R      NSg/I/VXB P  NSg/VB VB/J P    ISg+ . . VP/J    NPr+      P  NPr/ISg+ . . K       NSg/VLPp\n> living  over    that         garage  for   eleven years . And  Tom’s the first sweetie she  ever\n# Nᴹ/Vg/J NSg/J/P NSg/I/C/Ddem NSg/VB+ R/C/P NSg    NPl+  . VB/C NPr$  D   NSg/J NSg     ISg+ J/R\n> had . ”\n# VP  . .\n>\n#\n> The bottle of whiskey — a   second   one      — was  now       in        constant demand   by    all          present  ,\n# D   NSg/VB P  N🅪Sg    . D/P NSg/VB/J NSg/I/J+ . VLPt NSg/J/R/C NPr/J/R/P NSg/J    N🅪Sg/VB+ NSg/P NSg/I/J/C/Dq NSg/VB/J .\n> excepting Catherine , who    “ felt      just as    good     on  nothing  at    all          . ” Tom     rang for   the\n# Nᴹ/Vg/J   NPr+      . NPr/I+ . N🅪Sg/VP/J J/R  R/C/P NPr/VB/J J/P NSg/I/J+ NSg/P NSg/I/J/C/Dq . . NPr/VB+ VPt  R/C/P D\n> janitor and  sent   him  for   some     celebrated sandwiches , which were     a   complete\n# NSg     VB/C NSg/VP ISg+ R/C/P I/J/R/Dq VP/J       NPl/V3+    . I/C+  NSg/VLPt D/P NSg/VB/J\n> supper  in        themselves . I       wanted to get    out          and  walk   eastward toward the park\n# NSg/VB+ NPr/J/R/P IPl+       . ISg/#r+ VP/J   P  NSg/VB NSg/VB/J/R/P VB/C NSg/VB NSg/J    J/P    D+  NPr/VB+\n> through the soft   twilight , but     each time       I       tried to go       I       became entangled in\n# NSg/J/P D+  NSg/J+ Nᴹ/VB/J+ . NSg/C/P Dq+  N🅪Sg/VB/J+ ISg/#r+ VP/J  P  NSg/VB/J ISg/#r+ VPt    VP/J      NPr/J/R/P\n> some     wild     , strident argument which pulled me       back     , as    if    with ropes  , into my\n# I/J/R/Dq NSg/VB/J . NSg/J    N🅪Sg/VB+ I/C+  VP/J   NPr/ISg+ NSg/VB/J . R/C/P NSg/C P    NPl/V3 . P    D$+\n> chair   . Yet      high       over    the city our line   of yellow    windows   must    have    contributed\n# NSg/VB+ . NSg/VB/C NSg/VB/J/R NSg/J/P D+  NSg+ D$+ NSg/VB P  NSg/VB/J+ NPrPl/V3+ NSg/VXB NSg/VXB VP/J\n> their share  of human    secrecy to the casual watcher in        the darkening streets , and\n# D$+   NSg/VB P  NSg/VB/J Nᴹ      P  D   NSg/J  NSg+    NPr/J/R/P D   Nᴹ/Vg/J   NPl/V3+ . VB/C\n> I       saw     him  too , looking up         and  wondering . I       was  within  and  without ,\n# ISg/#r+ NSg/VPt ISg+ R   . Nᴹ/Vg/J NSg/VB/J/P VB/C Nᴹ/Vg/J   . ISg/#r+ VLPt NSg/J/P VB/C C/P     .\n> simultaneously enchanted and  repelled by    the inexhaustible variety of life     .\n# R              VP/J      VB/C VP       NSg/P D   J             N🅪Sg    P  N🅪Sg/VB+ .\n>\n#\n> Myrtle pulled her     chair   close    to mine      , and  suddenly her     warm     breath     poured over\n# NPr    VP/J   ISg/D$+ NSg/VB+ NSg/VB/J P  NSg/I/VB+ . VB/C R        ISg/D$+ NSg/VB/J N🅪Sg/VB/J+ VP/J   NSg/J/P\n> me       the story  of her     first meeting    with Tom     .\n# NPr/ISg+ D   NSg/VB P  ISg/D$+ NSg/J N🅪Sg/Vg/J+ P    NPr/VB+ .\n>\n#\n> “ It       was  on  the two  little      seats   facing  each other     that          are always the last     ones\n# . NPr/ISg+ VLPt J/P D+  NSg+ NPr/I/J/Dq+ NPl/V3+ Nᴹ/Vg/J Dq+  NSg/VB/J+ NSg/I/C/Ddem+ VLB R      D   NSg/VB/J NPl\n> left     on  the train   . I       was  going   up         to New    York to see    my  sister  and  spend  the\n# NPr/VP/J J/P D+  NSg/VB+ . ISg/#r+ VLPt Nᴹ/Vg/J NSg/VB/J/P P  NSg/J+ NPr+ P  NSg/VB D$+ NSg/VB+ VB/C NSg/VB D+\n> night    . He       had on  a   dress   suit   and  patent    leather    shoes   , and  I       couldn’t keep   my\n# N🅪Sg/VB+ . NPr/ISg+ VP  J/P D/P NSg/VB+ NSg/VB VB/C NSg/VB/J+ N🅪Sg/VB/J+ NPl/V3+ . VB/C ISg/#r+ VXB      NSg/VB D$+\n> eyes    off        him  , but     every time       he       looked at    me       I       had to pretend  to be       looking at\n# NPl/V3+ NSg/VB/J/P ISg+ . NSg/C/P Dq    N🅪Sg/VB/J+ NPr/ISg+ VP/J   NSg/P NPr/ISg+ ISg/#r+ VP  P  NSg/VB/J P  NSg/VLXB Nᴹ/Vg/J NSg/P\n> the advertisement over    his     head      . When    we   came      into the station he       was  next    to\n# D   NSg           NSg/J/P ISg/D$+ NPr/VB/J+ . NSg/I/C IPl+ NSg/VPt/P P    D+  NSg/VB+ NPr/ISg+ VLPt NSg/J/P P\n> me       , and  his     white       shirt   - front     pressed against my  arm       , and  so          I       told him  I’d have\n# NPr/ISg+ . VB/C ISg/D$+ NPr🅪Sg/VB/J NSg/VB+ . NSg/VB/J+ VP/J    C/P     D$+ NSg/VB/J+ . VB/C NSg/I/J/R/C ISg/#r+ VP   ISg+ K   NSg/VXB\n> to call   a   policeman , but     he       knew I       lied     . I       was  so          excited that         when    I       got into a\n# P  NSg/VB D/P NSg+      . NSg/C/P NPr/ISg+ VPt  ISg/#r+ NSg/VP/J . ISg/#r+ VLPt NSg/I/J/R/C VP/J    NSg/I/C/Ddem NSg/I/C ISg/#r+ VP  P    D/P+\n> taxi    with him  I       didn’t hardly know I       wasn’t getting into a   subway  train   . All          I\n# NSg/VB+ P    ISg+ ISg/#r+ VXPt   R      VB   ISg/#r+ VPt    NSg/Vg  P    D/P NSg/VB+ NSg/VB+ . NSg/I/J/C/Dq ISg/#r+\n> kept thinking about , over    and  over    , was  ‘          You    can’t live forever ; you    can’t live\n# VP   Nᴹ/Vg/J  J/P   . NSg/J/P VB/C NSg/J/P . VLPt Unlintable ISgPl+ VXB   VB/J NSg/J   . ISgPl+ VXB   VB/J\n> forever . ’ ”\n# NSg/J   . . .\n>\n#\n> She  turned to Mrs . McKee and  the room       rang full     of her     artificial laughter .\n# ISg+ VP/J   P  NPl . NPr   VB/C D   N🅪Sg/VB/J+ VPt  NSg/VB/J P  ISg/D$+ J          Nᴹ+      .\n>\n#\n> “ My  dear     , ” she  cried , “ I’m going   to give   you    this   dress   as    soon as    I’m through\n# . D$+ NSg/VB/J . . ISg+ VP/J  . . K   Nᴹ/Vg/J P  NSg/VB ISgPl+ I/Ddem NSg/VB+ R/C/P J/R  R/C/P K   NSg/J/P\n> with it       . I’ve got to get    another one      to - morrow . I’m going   to make   a   list   of all\n# P    NPr/ISg+ . K    VP  P  NSg/VB I/D     NSg/I/J+ P  . NPr/VB . K   Nᴹ/Vg/J P  NSg/VB D/P NSg/VB P  NSg/I/J/C/Dq\n> the things I’ve got to get    . A   massage and  a    wave    , and  a   collar for   the dog       , and\n# D   NPl+   K    VP  P  NSg/VB . D/P NSg/VB  VB/C D/P+ NSg/VB+ . VB/C D/P NSg/VB R/C/P D+  NSg/VB/J+ . VB/C\n> one     of those  cute little     ash      - trays   where   you    touch   a    spring   , and  a   wreath with a\n# NSg/I/J P  I/Ddem J    NPr/I/J/Dq N🅪Sg/VB+ . NPl/V3+ NSg/R/C ISgPl+ N🅪Sg/VB D/P+ N🅪Sg/VB+ . VB/C D/P NSg/VB P    D/P\n> black     silk     bow    for   mother’s grave     that’ll last     all          summer     . I       got to write  down        a\n# N🅪Sg/VB/J N🅪Sg/VB+ NSg/VB R/C/P NSg$     NSg/VB/J+ K       NSg/VB/J NSg/I/J/C/Dq NPr🅪Sg/VB+ . ISg/#r+ VP  P  NSg/VB N🅪Sg/VB/J/P D/P+\n> list    so          I       won’t forget all          the things I       got to do  . ”\n# NSg/VB+ NSg/I/J/R/C ISg/#r+ VXB   VB     NSg/I/J/C/Dq D   NPl+   ISg/#r+ VP  P  VXB . .\n>\n#\n> It       was  nine o’clock — almost immediately afterward I       looked at    my  watch  and  found\n# NPr/ISg+ VLPt NSg  R       . R      R           R/Am      ISg/#r+ VP/J   NSg/P D$+ NSg/VB VB/C NSg/VP\n> it       was  ten . Mr   . McKee was  asleep on  a   chair   with his     fists   clenched in        his     lap       ,\n# NPr/ISg+ VLPt NSg . NSg+ . NPr   VLPt J      J/P D/P NSg/VB+ P    ISg/D$+ NPl/V3+ VP/J     NPr/J/R/P ISg/D$+ NSg/VB/J+ .\n> like         a   photograph of a   man      of action     . Taking   out          my  handkerchief I       wiped from\n# NSg/VB/J/C/P D/P NSg/VB     P  D/P NPr/VB/J P  N🅪Sg/VB/J+ . NSg/Vg/J NSg/VB/J/R/P D$+ NSg+         ISg/#r+ VP/J  P\n> his     cheek  the spot     of dried lather that          had worried me       all          the afternoon .\n# ISg/D$+ NSg/VB D   NSg/VB/J P  VP/J  Nᴹ/VB  NSg/I/C/Ddem+ VP  VP/J    NPr/ISg+ NSg/I/J/C/Dq D   N🅪Sg+     .\n>\n#\n> The little      dog       was  sitting  on  the table   looking with blind     eyes    through the\n# D+  NPr/I/J/Dq+ NSg/VB/J+ VLPt NSg/Vg/J J/P D+  NSg/VB+ Nᴹ/Vg/J P    NSg/VB/J+ NPl/V3+ NSg/J/P D+\n> smoke    , and  from time       to time      groaning faintly . People  disappeared , reappeared ,\n# N🅪Sg/VB+ . VB/C P    N🅪Sg/VB/J+ P  N🅪Sg/VB/J Nᴹ/Vg/J  R       . NPl/VB+ VP/J        . VP/J       .\n> made plans   to go       somewhere , and  then      lost each other    , searched for   each other    ,\n# VP   NPl/V3+ P  NSg/VB/J NSg       . VB/C NSg/J/R/C VP/J Dq   NSg/VB/J . VP/J     R/C/P Dq   NSg/VB/J .\n> found  each other    a   few      feet away . Some     time      toward midnight Tom     Buchanan and\n# NSg/VP Dq   NSg/VB/J D/P NSg/I/Dq NPl+ VB/J . I/J/R/Dq N🅪Sg/VB/J J/P    NSg/J+   NPr/VB+ NPr      VB/C\n> Mrs  . Wilson stood face    to face   discussing , in        impassioned voices  , whether Mrs  .\n# NPl+ . NPr+   VP    NSg/VB+ P  NSg/VB Nᴹ/Vg/J    . NPr/J/R/P J           NPl/V3+ . I/C     NPl+ .\n> Wilson had any    right     to mention Daisy’s name    .\n# NPr+   VP  I/R/Dq NPr/VB/J+ P  NSg/VB  NPr$    NSg/VB+ .\n>\n#\n> “ Daisy ! Daisy ! Daisy ! ” shouted Mrs  . Wilson . “ I’ll say    it       whenever I       want   to !\n# . NPr+  . NPr+  . NPr+  . . VP/J    NPl+ . NPr+   . . K    NSg/VB NPr/ISg+ C        ISg/#r+ NSg/VB P  .\n> Daisy ! Dai — — — ”\n# NPr+  . ?   . . . .\n>\n#\n> Making  a   short      deft movement , Tom     Buchanan broke     her     nose    with his     open     hand    .\n# Nᴹ/Vg/J D/P NPr/VB/J/P J    N🅪Sg+    . NPr/VB+ NPr+     NSg/VPt/J ISg/D$+ NSg/VB+ P    ISg/D$+ NSg/VB/J NSg/VB+ .\n>\n#\n> Then      there were     bloody   towels  upon the bathroom floor   , and  women’s voices\n# NSg/J/R/C R+    NSg/VLPt NSg/VB/J NPl/V3+ P    D+  NSg/VB+  NSg/VB+ . VB/C NSg$    NPl/V3+\n> scolding , and  high       over    the confusion a   long     broken wail   of pain     . Mr   . McKee\n# Nᴹ/Vg/J  . VB/C NSg/VB/J/R NSg/J/P D   N🅪Sg/VB+  D/P NPr/VB/J VPp/J+ NSg/VB P  N🅪Sg/VB+ . NSg+ . NPr\n> awoke from his     doze   and  started in        a   daze   toward the door    . When    he       had gone    half\n# VPt   P    ISg/D$+ NSg/VB VB/C VP/J    NPr/J/R/P D/P NSg/VB J/P    D   NSg/VB+ . NSg/I/C NPr/ISg+ VP  VPp/J/P N🅪Sg/J/P+\n> way    he       turned around and  stared at    the scene  — his     wife     and  Catherine scolding and\n# NSg/J+ NPr/ISg+ VP/J   J/P    VB/C VP/J   NSg/P D   NSg/VB . ISg/D$+ NSg/VB/J VB/C NPr+      Nᴹ/Vg/J  VB/C\n> consoling as    they stumbled here and  there among the crowded furniture with\n# Nᴹ/Vg/J   R/C/P IPl+ VP/J     J/R  VB/C R     P     D   VP/J    Nᴹ+       P\n> articles of aid      , and  the despairing figure  on  the couch   , bleeding fluently , and\n# NPl/V3   P  N🅪Sg/VB+ . VB/C D   Nᴹ/Vg/J    NSg/VB+ J/P D   NSg/VB+ . Nᴹ/Vg/J  R        . VB/C\n> trying  to spread   a   copy   of Town Tattle over    the tapestry scenes of Versailles .\n# Nᴹ/Vg/J P  N🅪Sg/VBP D/P NSg/VB P  NSg+ NSg/VB NSg/J/P D   N🅪Sg/VB  NPl/V3 P  NPr+       .\n> Then      Mr   . McKee turned and  continued on  out          the door    . Taking   my  hat     from the\n# NSg/J/R/C NSg+ . NPr   VP/J   VB/C VP/J      J/P NSg/VB/J/R/P D   NSg/VB+ . NSg/Vg/J D$+ NSg/VB+ P    D+\n> chandelier , I       followed .\n# NSg+       . ISg/#r+ VP/J     .\n>\n#\n> “ Come       to lunch   some      day     , ” he       suggested , as    we   groaned down        in        the elevator .\n# . NSg/VBPp/P P  N🅪Sg/VB I/J/R/Dq+ NPr🅪Sg+ . . NPr/ISg+ VP/J      . R/C/P IPl+ VP/J    N🅪Sg/VB/J/P NPr/J/R/P D+  NSg/VB+  .\n>\n#\n> “ Where   ? ”\n# . NSg/R/C . .\n>\n#\n> “ Anywhere . ”\n# . NSg/I    . .\n>\n#\n> “ Keep   your hands   off        the lever   , ” snapped the elevator boy     .\n# . NSg/VB D$+  NPl/V3+ NSg/VB/J/P D+  NSg/VB+ . . VP      D+  NSg/VB+  NSg/VB+ .\n>\n#\n> “ I       beg    your pardon , ” said Mr   . McKee with dignity , “ I       didn’t know I       was  touching\n# . ISg/#r+ NSg/VB D$+  NSg/VB . . VP/J NSg+ . NPr   P    NSg+    . . ISg/#r+ VXPt   VB   ISg/#r+ VLPt Nᴹ/Vg/J/P\n> it       . ”\n# NPr/ISg+ . .\n>\n#\n> “ All          right    , ” I       agreed , “ I’ll be       glad     to . ”\n# . NSg/I/J/C/Dq NPr/VB/J . . ISg/#r+ VP/J   . . K    NSg/VLXB NSg/VB/J P  . .\n>\n#\n> . . . I       was  standing beside his     bed        and  he       was  sitting  up         between the sheets  ,\n# . . . ISg/#r+ VLPt Nᴹ/Vg/J  P      ISg/D$+ NSg/VBP/J+ VB/C NPr/ISg+ VLPt NSg/Vg/J NSg/VB/J/P NSg/P   D+  NPl/V3+ .\n> clad in        his     underwear , with a   great portfolio in        his     hands   .\n# VB/J NPr/J/R/P ISg/D$+ Nᴹ+       . P    D/P NSg/J NSg       NPr/J/R/P ISg/D$+ NPl/V3+ .\n>\n#\n> “ Beauty    and  the Beast     . . . Loneliness . . . Old    Grocery Horse   . . . Brook’n\n# . N🅪Sg/VB/J VB/C D+  NSg/VB/J+ . . . Nᴹ         . . . NSg/J+ NSg/VB+ NSg/VB+ . . . ?\n> Bridge   . . . ” Then      I       was  lying   half      asleep in        the cold  lower     level    of the\n# N🅪Sg/VB+ . . . . NSg/J/R/C ISg/#r+ VLPt Nᴹ/Vg/J N🅪Sg/J/P+ J      NPr/J/R/P D   NSg/J NSg/VB/JC NSg/VB/J P  D+\n> Pennsylvania Station , staring at    the morning    Tribune , and  waiting for   the four\n# NPr+         NSg/VB+ . Nᴹ/Vg/J NSg/P D+  N🅪Sg/Vg/J+ NSg     . VB/C Nᴹ/Vg/J R/C/P D   NSg\n> o’clock train   .\n# R       NSg/VB+ .\n>\n#\n>              CHAPTER III\n# HeadingStart NSg/VB+ #r\n>\n#\n> There was  music      from my  neighbor’s house   through the summer     nights  . In        his     blue\n# R+    VLPt N🅪Sg/VB/J+ P    D$+ NSg$/Am    NPr/VB+ NSg/J/P D   NPr🅪Sg/VB+ NPl/V3+ . NPr/J/R/P ISg/D$+ N🅪Sg/VB/J\n> gardens men and  girls   came      and  went    like         moths   among the whisperings and  the\n# NPl/V3+ NPl VB/C NPl/V3+ NSg/VPt/P VB/C NSg/VPt NSg/VB/J/C/P NPl/VB+ P     D   NPl/V3      VB/C D\n> champagne and  the stars   . At    high       tide   in        the afternoon I       watched his     guests\n# N🅪Sg/VB/J VB/C D   NPl/V3+ . NSg/P NSg/VB/J/R NSg/VB NPr/J/R/P D+  N🅪Sg+     ISg/#r+ VP/J    ISg/D$+ NPl/V3+\n> diving   from the tower  of his     raft    , or    taking   the sun     on  the hot      sand     of his\n# Nᴹ/Vg/J+ P    D   NSg/VB P  ISg/D$+ NSg/VB+ . NPr/C NSg/Vg/J D+  NPr/VB+ J/P D   NSg/VB/J NSg/VB/J P  ISg/D$+\n> beach   while      his     two motor     - boats  slit     the waters   of the Sound      , drawing   aquaplanes\n# NPr/VB+ NSg/VB/C/P ISg/D$+ NSg NSg/VB/J+ . NPl/V3 NSg/VB/J D   NPrPl/V3 P  D+  N🅪Sg/VB/J+ . N🅪Sg/Vg/J NPl/V3\n> over    cataracts of foam     . On  week   - ends    his     Rolls   - Royce became an  omnibus   , bearing\n# NSg/J/P NPl       P  N🅪Sg/VB+ . J/P NSg/J+ . NPl/V3+ ISg/D$+ NPl/V3+ . NPr   VPt    D/P NSg/VB/J+ . Nᴹ/Vg/J\n> parties to and  from the city between nine in        the morning    and  long     past       midnight ,\n# NPl/V3+ P  VB/C P    D   NSg+ NSg/P   NSg  NPr/J/R/P D   N🅪Sg/Vg/J+ VB/C NPr/VB/J NSg/VB/J/P NSg/J+   .\n> while      his     station wagon   scampered like         a   brisk yellow   bug     to meet     all          trains  .\n# NSg/VB/C/P ISg/D$+ NSg/VB+ NSg/VB+ VP/J      NSg/VB/J/C/P D/P VB/J  NSg/VB/J NSg/VB+ P  NSg/VB/J NSg/I/J/C/Dq NPl/V3+ .\n> And  on  Mondays eight  servants , including an  extra gardener , toiled all          day     with\n# VB/C J/P NPl     NSg/J+ NPl/V3+  . Nᴹ/Vg/J   D/P NSg/J NSg/JC   . VP/J   NSg/I/J/C/Dq NPr🅪Sg+ P\n> mops   and  scrubbing - brushes and  hammers and  garden    - shears , repairing the ravages\n# NPl/V3 VB/C NSg/Vg    . NPl/V3+ VB/C NPl/V3  VB/C NSg/VB/J+ . NPl/V3 . Nᴹ/Vg/J   D   NPl/V3\n> of the night    before .\n# P  D   N🅪Sg/VB+ C/P    .\n>\n#\n> Every Friday five crates of oranges and  lemons  arrived from a   fruiterer in        New\n# Dq+   NSg+   NSg  NPl/V3 P  NPl/V3  VB/C NPl/V3+ VP/J    P    D/P NSg       NPr/J/R/P NSg/J\n> York — every Monday these  same oranges and  lemons  left     his     back     door    in        a   pyramid\n# NPr+ . Dq    NSg+   I/Ddem I/J  NPl/V3  VB/C NPl/V3+ NPr/VP/J ISg/D$+ NSg/VB/J NSg/VB+ NPr/J/R/P D/P NSg/VB\n> of pulpless halves . There was  a   machine in        the kitchen which could   extract the\n# P  ?        V3+    . R+    VLPt D/P NSg/VB+ NPr/J/R/P D+  NSg/VB+ I/C+  NSg/VXB NSg/VB  D\n> juice     of two hundred oranges in        half      an  hour if    a   little     button  was  pressed two\n# N🅪Sg/VB/J P  NSg NSg     NPl/V3  NPr/J/R/P N🅪Sg/J/P+ D/P NSg+ NSg/C D/P NPr/I/J/Dq NSg/VB+ VLPt VP/J    NSg\n> hundred times   by    a   butler’s thumb   .\n# NSg     NPl/V3+ NSg/P D/P NPr$     NSg/VB+ .\n>\n#\n> At    least    once  a   fortnight a   corps of caterers came      down        with several hundred\n# NSg/P NSg/J/Dq NSg/C D/P NSg/J     D/P NSg   P  +        NSg/VPt/P N🅪Sg/VB/J/P P    J/Dq    NSg\n> feet of canvas  and  enough colored     lights  to make   a   Christmas tree   of Gatsby’s\n# NPl  P  NSg/VB+ VB/C NSg/I  NSg/VP/J/Am NPl/V3+ P  NSg/VB D/P NPr/VB/J+ NSg/VB P  NPr$\n> enormous garden    . On  buffet  tables  , garnished with glistening hors - d’œuvre ,\n# J+       NSg/VB/J+ . J/P NPr/VB+ NPl/V3+ . VP/J      P    Nᴹ/Vg/J    ?    . ?       .\n> spiced baked hams    crowded against salads of harlequin designs and  pastry pigs\n# VP/J   VP/J  NPl/V3+ VP/J    C/P     NPl    P  NPr/VB/J  NPl/V3  VB/C N🅪Sg+  NPl/V3+\n> and  turkeys bewitched to a   dark     gold     . In        the main      hall a   bar       with a    real   brass\n# VB/C NPl     VP/J      P  D/P NSg/VB/J Nᴹ/VB/J+ . NPr/J/R/P D+  NSg/VB/J+ NPr+ D/P NSg/VB/P+ P    D/P+ NSg/J+ N🅪Sg/VB/J+\n> rail     was  set       up         , and  stocked with gins   and  liquors and  with cordials so          long\n# N🅪Sg/VB+ VLPt NPr/VBP/J NSg/VB/J/P . VB/C VP/J    P    NPl/V3 VB/C NPl/V3  VB/C P    NPl      NSg/I/J/R/C NPr/VB/J\n> forgotten that         most         of his     female guests  were     too young    to know one     from\n# NSg/VPp/J NSg/I/C/Ddem NSg/I/J/R/Dq P  ISg/D$+ NSg/J+ NPl/V3+ NSg/VLPt R   NPr/VB/J P  VB   NSg/I/J P\n> another .\n# I/D     .\n>\n#\n> By    seven o’clock the orchestra has arrived , no       thin     five - piece   affair , but     a\n# NSg/P NSg   R       D+  NSg+      V3  VP/J    . NSg/Dq/P NSg/VB/J NSg  . NSg/VB+ NSg+   . NSg/C/P D/P\n> whole pitful of oboes and  trombones and  saxophones and  viols  and  cornets and\n# NSg/J ?      P  NPl   VB/C NPl/V3    VB/C NPl/V3     VB/C NPl/V3 VB/C NPl     VB/C\n> piccolos , and  low        and  high       drums   . The last     swimmers have    come       in        from the beach\n# NPl      . VB/C NSg/VB/J/R VB/C NSg/VB/J/R NPl/V3+ . D   NSg/VB/J NPl      NSg/VXB NSg/VBPp/P NPr/J/R/P P    D   NPr/VB+\n> now       and  are dressing up         - stairs ; the cars from New   York are parked five deep  in\n# NSg/J/R/C VB/C VLB Nᴹ/Vg/J  NSg/VB/J/P . NPl+   . D   NPl+ P    NSg/J NPr+ VLB VP/J   NSg  NSg/J NPr/J/R/P\n> the drive    , and  already the halls and  salons and  verandas    are gaudy with primary\n# D   N🅪Sg/VB+ . VB/C R       D   NPl   VB/C NPl+   VB/C NPl/NoAm/Br VLB NSg/J P    NSg/VB/J\n> colors     , and  hair     bobbed in        strange  new   ways , and  shawls beyond the dreams  of\n# NPl/V3/Am+ . VB/C N🅪Sg/VB+ VP/J   NPr/J/R/P NSg/VB/J NSg/J NPl+ . VB/C NPl/V3 NSg/P  D   NPl/V3+ P\n> Castile . The bar       is  in        full      swing   , and  floating rounds of cocktails permeate the\n# ?       . D+  NSg/VB/P+ VL3 NPr/J/R/P NSg/VB/J+ NSg/VB+ . VB/C Nᴹ/Vg/J  NPl/V3 P  NPl/V3+   NSg/VB   D+\n> garden    outside   , until the air      is  alive with chatter and  laughter , and  casual\n# NSg/VB/J+ Nᴹ/VB/J/P . C/P   D+  N🅪Sg/VB+ VL3 J     P    NSg/VB  VB/C Nᴹ+      . VB/C NSg/J\n> innuendo and  introductions forgotten on  the spot      , and  enthusiastic meetings\n# N🅪Sg/VB  VB/C NPl+          NSg/VPp/J J/P D   NSg/VB/J+ . VB/C J            NPl/V3\n> between women who    never knew each other’s names   .\n# NSg/P   NPl+  NPr/I+ R     VPt  Dq   NSg$    NPl/V3+ .\n>\n#\n> The lights  grow brighter as    the earth    lurches away from the sun     , and  now       the\n# D+  NPl/V3+ VB   NSg/JC   R/C/P D+  NPrᴹ/VB+ NPl/V3  VB/J P    D   NPr/VB+ . VB/C NSg/J/R/C D\n> orchestra is  playing yellow   cocktail  music      , and  the opera of voices  pitches a\n# NSg+      VL3 Nᴹ/Vg/J NSg/VB/J NSg/VB/J+ N🅪Sg/VB/J+ . VB/C D   NSg   P  NPl/V3+ NPl/V3+ D/P\n> key      higher . Laughter is  easier minute   by    minute    , spilled with prodigality ,\n# NPr/VB/J NSg/JC . Nᴹ+      VL3 NSg/JC NSg/VB/J NSg/P NSg/VB/J+ . VP/J    P    Nᴹ          .\n> tipped out          at    a   cheerful word    . The groups  change   more         swiftly , swell     with new\n# VP     NSg/VB/J/R/P NSg/P D/P J        NSg/VB+ . D+  NPl/V3+ N🅪Sg/VB+ NPr/I/J/R/Dq R       . NSg/VB/J+ P    NSg/J\n> arrivals , dissolve and  form     in        the same breath     ; already there are wanderers ,\n# NPl      . NSg/VB   VB/C N🅪Sg/VB+ NPr/J/R/P D   I/J  N🅪Sg/VB/J+ . R       R+    VLB NPl       .\n> confident girls   who    weave  here and  there among the stouter and  more         stable   ,\n# NSg/J     NPl/V3+ NPr/I+ NSg/VB J/R  VB/C R     P     D   NSg/JC  VB/C NPr/I/J/R/Dq NSg/VB/J .\n> become for   a   sharp    , joyous moment the centre      of a   group   , and  then      , excited with\n# VBPp   R/C/P D/P NPr/VB/J . J      NSg+   D   NSg/VB/Comm P  D/P NSg/VB+ . VB/C NSg/J/R/C . VP/J    P\n> triumph  , glide  on  through the sea  - change  of faces  and  voices and  color         under   the\n# N🅪Sg/VB+ . NSg/VB J/P NSg/J/P D   NSg+ . N🅪Sg/VB P  NPl/V3 VB/C NPl/V3 VB/C N🅪Sg/VB/J/Am+ NSg/J/P D\n> constantly changing light      .\n# R          Nᴹ/Vg/J  N🅪Sg/VB/J+ .\n>\n#\n> Suddenly one     of these  gypsies  , in        trembling opal   , seizes a   cocktail  out          of the\n# R        NSg/I/J P  I/Ddem NPrPl/V3 . NPr/J/R/P Nᴹ/Vg/J   NPr🅪Sg . V3     D/P NSg/VB/J+ NSg/VB/J/R/P P  D\n> air      , dumps  it       down        for   courage and  , moving  her     hands  like         Frisco , dances  out\n# N🅪Sg/VB+ . NPl/V3 NPr/ISg+ N🅪Sg/VB/J/P R/C/P NSg/VB+ VB/C . Nᴹ/Vg/J ISg/D$+ NPl/V3 NSg/VB/J/C/P NPr+   . NPl/V3+ NSg/VB/J/R/P\n> alone on  the canvas  platform . A    momentary hush    ; the orchestra leader  varies his\n# J     J/P D   NSg/VB+ NSg/VB+  . D/P+ J+        NSg/VB+ . D+  NSg+      NSg/JC+ NPl/V3 ISg/D$+\n> rhythm   obligingly for   her     , and  there is  a   burst  of chatter as    the erroneous news\n# N🅪Sg/VB+ R          R/C/P ISg/D$+ . VB/C R+    VL3 D/P NSg/VB P  NSg/VB+ R/C/P D   J         Nᴹ/VB+\n> goes   around that         she  is  Gilda Gray’s  understudy from the Follies . The party     has\n# NPl/V3 J/P    NSg/I/C/Ddem ISg+ VL3 NPr   NPr$/Am NSg/VB     P    D   NPl/V3  . D+  NSg/VB/J+ V3\n> begun .\n# VPp   .\n>\n#\n> I       believe that         on  the first  night    I       went    to Gatsby’s house   I       was  one     of the few\n# ISg/#r+ VB      NSg/I/C/Ddem J/P D+  NSg/J+ N🅪Sg/VB+ ISg/#r+ NSg/VPt P  NPr$     NPr/VB+ ISg/#r+ VLPt NSg/I/J P  D   NSg/I/Dq\n> guests  who    had actually been     invited  . People  were     not     invited  — they went    there .\n# NPl/V3+ NPr/I+ VP  R        NSg/VLPp NSg/VP/J . NPl/VB+ NSg/VLPt NSg/R/C NSg/VP/J . IPl+ NSg/VPt R     .\n> They got into automobiles which bore     them     out          to Long     Island  , and  somehow they\n# IPl+ VP  P    NPl/V3      I/C+  NSg/VBPt NSg/IPl+ NSg/VB/J/R/P P  NPr/VB/J NSg/VB+ . VB/C R       IPl+\n> ended up         at    Gatsby’s door    . Once  there they were     introduced by    somebody who    knew\n# VP/J  NSg/VB/J/P NSg/P NPr$     NSg/VB+ . NSg/C R+    IPl+ NSg/VLPt VP/J       NSg/P NSg/I+   NPr/I+ VPt\n> Gatsby , and  after that         they conducted themselves according to the rules  of\n# NPr    . VB/C P     NSg/I/C/Ddem IPl+ VP/J      IPl+       Nᴹ/Vg/J   P  D   NPl/V3 P\n> behavior associated with an  amusement park    . Sometimes they came      and  went    without\n# N🅪Sg/Am+ VP/J       P    D/P NSg+      NPr/VB+ . R         IPl+ NSg/VPt/P VB/C NSg/VPt C/P\n> having  met Gatsby at    all          , came      for   the party     with a   simplicity of heart    that          was\n# Nᴹ/Vg/J VP  NPr    NSg/P NSg/I/J/C/Dq . NSg/VPt/P R/C/P D   NSg/VB/J+ P    D/P N🅪Sg       P  N🅪Sg/VB+ NSg/I/C/Ddem+ VLPt\n> its     own      ticket of admission .\n# ISg/D$+ NSg/VB/J NSg/VB P  NSg+      .\n>\n#\n> I       had been     actually invited  . A   chauffeur in        a   uniform  of robin’s - egg      blue\n# ISg/#r+ VP  NSg/VLPp R        NSg/VP/J . D/P NSg/VB    NPr/J/R/P D/P NSg/VB/J P  NPr$    . N🅪Sg/VB+ N🅪Sg/VB/J\n> crossed my  lawn    early   that         Saturday morning    with a   surprisingly formal note    from\n# VP/J    D$+ NSg/VB+ NSg/J/R NSg/I/C/Ddem NSg/VB+  N🅪Sg/Vg/J+ P    D/P R            NSg/J  NSg/VB+ P\n> his     employer : the honor       would be       entirely Gatsby’s , it       said , if    I       would attend\n# ISg/D$+ NSg+     . D   N🅪Sg/VB/Am+ VXB   NSg/VLXB R        NPr$     . NPr/ISg+ VP/J . NSg/C ISg/#r+ VXB   VB\n> his     “ little     party     ” that         night    . He       had seen    me       several times   , and  had intended to\n# ISg/D$+ . NPr/I/J/Dq NSg/VB/J+ . NSg/I/C/Ddem N🅪Sg/VB+ . NPr/ISg+ VP  NSg/VPp NPr/ISg+ J/Dq+   NPl/V3+ . VB/C VP  NSg/VP/J P\n> call   on  me       long     before , but     a   peculiar combination of circumstances had\n# NSg/VB J/P NPr/ISg+ NPr/VB/J C/P    . NSg/C/P D/P NSg/J    N🅪Sg        P  NPl/V3+       VP\n> prevented it       — signed Jay  Gatsby , in        a   majestic hand    .\n# VP/J      NPr/ISg+ . VP/J   NPr+ NPr    . NPr/J/R/P D/P J        NSg/VB+ .\n>\n#\n> Dressed up         in        white       flannels I       went    over    to his     lawn   a   little     after seven , and\n# VP/J    NSg/VB/J/P NPr/J/R/P NPr🅪Sg/VB/J NPl/V3   ISg/#r+ NSg/VPt NSg/J/P P  ISg/D$+ NSg/VB D/P NPr/I/J/Dq P     NSg   . VB/C\n> wandered around rather     ill      at    ease   among swirls and  eddies of people  I       didn’t\n# VP/J     J/P    NPr/VB/J/R NSg/VB/J NSg/P Nᴹ/VB+ P     NPl/V3 VB/C NPl/V3 P  NPl/VB+ ISg/#r+ VXPt\n> know — though here and  there was  a   face    I       had noticed on  the commuting train   . I\n# VB   . C      J/R  VB/C R+    VLPt D/P NSg/VB+ ISg/#r+ VP  VP/J    J/P D   Nᴹ/Vg/J   NSg/VB+ . ISg/#r+\n> was  immediately struck by    the number      of young    Englishmen dotted about ; all          well\n# VLPt R           VB     NSg/P D   N🅪Sg/VB/JC+ P  NPr/VB/J NPl        VP/J   J/P   . NSg/I/J/C/Dq NSg/VB/J/R\n> dressed , all          looking a   little     hungry , and  all          talking  in        low        , earnest   voices  to\n# VP/J    . NSg/I/J/C/Dq Nᴹ/Vg/J D/P NPr/I/J/Dq J      . VB/C NSg/I/J/C/Dq Nᴹ/Vg/J+ NPr/J/R/P NSg/VB/J/R . NPr/VB/J+ NPl/V3+ P\n> solid and  prosperous Americans . I       was  sure that         they were     selling something :\n# NSg/J VB/C J          NPrPl+    . ISg/#r+ VLPt J    NSg/I/C/Ddem IPl+ NSg/VLPt Nᴹ/Vg/J NSg/I/J+  .\n> bonds  or    insurance or    automobiles . They were     at    least    agonizingly aware of the\n# NPl/V3 NPr/C N🅪Sg+     NPr/C NPl/V3      . IPl+ NSg/VLPt NSg/P NSg/J/Dq R           VB/J  P  D\n> easy     money   in        the vicinity and  convinced that         it       was  theirs for   a   few      words   in\n# NSg/VB/J N🅪Sg/J+ NPr/J/R/P D   NSg      VB/C VP/J      NSg/I/C/Ddem NPr/ISg+ VLPt I+     R/C/P D/P NSg/I/Dq NPl/V3+ NPr/J/R/P\n> the right    key      .\n# D   NPr/VB/J NPr/VB/J .\n>\n#\n> As    soon as    I       arrived I       made an  attempt to find   my  host    , but     the two or    three\n# R/C/P J/R  R/C/P ISg/#r+ VP/J    ISg/#r+ VP   D/P NSg/VB+ P  NSg/VB D$+ NSg/VB+ . NSg/C/P D   NSg NPr/C NSg\n> people of whom I       asked his     whereabouts stared at    me       in        such  an  amazed way    , and\n# NPl/VB P  I+   ISg/#r+ VP/J  ISg/D$+ NSg+        VP/J   NSg/P NPr/ISg+ NPr/J/R/P NSg/I D/P VP/J   NSg/J+ . VB/C\n> denied so          vehemently any    knowledge of his     movements , that         I       slunk  off        in        the\n# VP/J   NSg/I/J/R/C R          I/R/Dq Nᴹ        P  ISg/D$+ NPl+      . NSg/I/C/Ddem ISg/#r+ NSg/VB NSg/VB/J/P NPr/J/R/P D\n> direction of the cocktail  table   — the only  place    in        the garden    where   a   single   man\n# N🅪Sg      P  D   NSg/VB/J+ NSg/VB+ . D   J/R/C N🅪Sg/VB+ NPr/J/R/P D   NSg/VB/J+ NSg/R/C D/P NSg/VB/J NPr/VB/J+\n> could   linger without looking purposeless and  alone .\n# NSg/VXB VB     C/P     Nᴹ/Vg/J J           VB/C J     .\n>\n#\n> I       was  on  my  way    to get    roaring drunk     from sheer    embarrassment when    Jordan Baker\n# ISg/#r+ VLPt J/P D$+ NSg/J+ P  NSg/VB Nᴹ/Vg/J NSg/VPp/J P    NSg/VB/J N🅪Sg+         NSg/I/C NPr+   NPr+\n> came      out          of the house   and  stood at    the head     of the marble    steps   , leaning a\n# NSg/VPt/P NSg/VB/J/R/P P  D+  NPr/VB+ VB/C VP    NSg/P D   NPr/VB/J P  D+  NSg/VB/J+ NPl/V3+ . Nᴹ/Vg/J D/P\n> little     backward and  looking with contemptuous interest down        into the garden    .\n# NPr/I/J/Dq NSg/J    VB/C Nᴹ/Vg/J P    J            N🅪Sg/VB+ N🅪Sg/VB/J/P P    D   NSg/VB/J+ .\n>\n#\n> Welcome  or    not     , I       found  it       necessary to attach myself to some      one      before I\n# NSg/VB/J NPr/C NSg/R/C . ISg/#r+ NSg/VP NPr/ISg+ NSg/J     P  VB     ISg+   P  I/J/R/Dq+ NSg/I/J+ C/P    ISg/#r+\n> should begin  to address cordial remarks to the passers - by    .\n# VXB    NSg/VB P  NSg/VB  NSg/J   NPl/V3+ P  D   NPl     . NSg/P .\n>\n#\n> “ Hello  ! ” I       roared , advancing toward her     . My  voice   seemed unnaturally loud  across\n# . NSg/VB . . ISg/#r+ VP/J   . Nᴹ/Vg/J   J/P    ISg/D$+ . D$+ NSg/VB+ VP/J   R           NSg/J NSg/P\n> the garden    .\n# D   NSg/VB/J+ .\n>\n#\n> “ I       thought you    might    be       here , ” she  responded absently as    I       came      up         . “ I\n# . ISg/#r+ N🅪Sg/VP ISgPl+ Nᴹ/VXB/J NSg/VLXB J/R  . . ISg+ VP/J      R        R/C/P ISg/#r+ NSg/VPt/P NSg/VB/J/P . . ISg/#r+\n> remembered you    lived next     door    to — — ”\n# VP/J       ISgPl+ VP/J  NSg/J/P+ NSg/VB+ P  . . .\n>\n#\n> She  held my  hand    impersonally , as    a   promise that          she’d take   care    of me       in        a\n# ISg+ VP   D$+ NSg/VB+ R            . R/C/P D/P NSg/VB+ NSg/I/C/Ddem+ K     NSg/VB N🅪Sg/VB P  NPr/ISg+ NPr/J/R/P D/P\n> minute    , and  gave ear       to two girls   in        twin      yellow    dresses , who    stopped at    the\n# NSg/VB/J+ . VB/C VPt  NSg/VB/J+ P  NSg NPl/V3+ NPr/J/R/P NSg/VB/J+ NSg/VB/J+ NPl/V3+ . NPr/I+ VP/J    NSg/P D\n> foot   of the steps   .\n# NSg/VB P  D   NPl/V3+ .\n>\n#\n> “ Hello  ! ” they cried together . “ Sorry    you    didn’t win    . ”\n# . NSg/VB . . IPl+ VP/J  J        . . NSg/VB/J ISgPl+ VXPt   NSg/VB . .\n>\n#\n> That          was  for   the golf    tournament . She  had lost in        the finals  the week   before .\n# NSg/I/C/Ddem+ VLPt R/C/P D+  NSg/VB+ NSg+       . ISg+ VP  VP/J NPr/J/R/P D+  NPl/V3+ D+  NSg/J+ C/P    .\n>\n#\n> “ You    don’t know who    we   are , ” said one     of the girls   in        yellow   , “ but     we   met you\n# . ISgPl+ VXB   VB   NPr/I+ IPl+ VLB . . VP/J NSg/I/J P  D   NPl/V3+ NPr/J/R/P NSg/VB/J . . NSg/C/P IPl+ VP  ISgPl+\n> here about a   month  ago . ”\n# J/R  J/P   D/P NSg/J+ J/P . .\n>\n#\n> “ You’ve dyed your hair     since then      , ” remarked Jordan , and  I       started , but     the\n# . K      VP/J D$+  N🅪Sg/VB+ C/P   NSg/J/R/C . . VP/J     NPr+   . VB/C ISg/#r+ VP/J    . NSg/C/P D\n> girls   had moved casually on  and  her     remark  was  addressed to the premature moon    ,\n# NPl/V3+ VP  VP/J  R        J/P VB/C ISg/D$+ NSg/VB+ VLPt VP/J      P  D   NSg/J     NPr/VB+ .\n> produced like         the supper  , no       doubt    , out          of a   caterer’s basket  . With Jordan’s\n# VP/J     NSg/VB/J/C/P D   NSg/VB+ . NSg/Dq/P N🅪Sg/VB+ . NSg/VB/J/R/P P  D/P NSg$      NSg/VB+ . P    NPr$\n> slender golden   arm       resting  in        mine      , we   descended the steps   and  sauntered about\n# J       NPr/VB/J NSg/VB/J+ Nᴹ/Vg/J+ NPr/J/R/P NSg/I/VB+ . IPl+ VP/J      D   NPl/V3+ VB/C VP/J      J/P\n> the garden    . A   tray   of cocktails floated at    us       through the twilight , and  we   sat\n# D   NSg/VB/J+ . D/P NSg/VB P  NPl/V3+   VP/J    NSg/P NPr/IPl+ NSg/J/P D+  Nᴹ/VB/J+ . VB/C IPl+ NSg/VP/J\n> down        at    a   table   with the two  girls   in        yellow   and  three men  , each one      introduced\n# N🅪Sg/VB/J/P NSg/P D/P NSg/VB+ P    D+  NSg+ NPl/V3+ NPr/J/R/P NSg/VB/J VB/C NSg+  NPl+ . Dq   NSg/I/J+ VP/J\n> to us       as    Mr   . Mumble .\n# P  NPr/IPl+ R/C/P NSg+ . NSg/VB .\n>\n#\n> “ Do  you    come       to these   parties often ? ” inquired Jordan of the girl    beside her     .\n# . VXB ISgPl+ NSg/VBPp/P P  I/Ddem+ NPl/V3+ R     . . VP/J     NPr    P  D+  NSg/VB+ P      ISg/D$+ .\n>\n#\n> “ The last      one      was  the one     I       met you    at    , ” answered the girl    , in        an   alert\n# . D+  NSg/VB/J+ NSg/I/J+ VLPt D   NSg/I/J ISg/#r+ VP  ISgPl+ NSg/P . . VP/J     D+  NSg/VB+ . NPr/J/R/P D/P+ NSg/VB/J+\n> confident voice   . She  turned to her     companion : “ Wasn’t it       for   you    , Lucille ? ”\n# NSg/J+    NSg/VB+ . ISg+ VP/J   P  ISg/D$+ NSg/VB+   . . VPt    NPr/ISg+ R/C/P ISgPl+ . NPr+    . .\n>\n#\n> It       was  for   Lucille , too .\n# NPr/ISg+ VLPt R/C/P NPr+    . R   .\n>\n#\n> “ I       like         to come       , ” Lucille said . “ I       never care    what   I       do  , so          I       always have    a    good\n# . ISg/#r+ NSg/VB/J/C/P P  NSg/VBPp/P . . NPr+    VP/J . . ISg/#r+ R     N🅪Sg/VB NSg/I+ ISg/#r+ VXB . NSg/I/J/R/C ISg/#r+ R      NSg/VXB D/P+ NPr/VB/J+\n> time       . When    I       was  here last     I       tore     my  gown    on  a    chair   , and  he       asked me       my  name\n# N🅪Sg/VB/J+ . NSg/I/C ISg/#r+ VLPt J/R  NSg/VB/J ISg/#r+ NSg/VB/J D$+ NSg/VB+ J/P D/P+ NSg/VB+ . VB/C NPr/ISg+ VP/J  NPr/ISg+ D$+ NSg/VB\n> and  address — inside  of a    week   I       got a    package from Croirier’s with a   new   evening\n# VB/C NSg/VB+ . NSg/J/P P  D/P+ NSg/J+ ISg/#r+ VP  D/P+ NSg/VB+ P    ?          P    D/P NSg/J N🅪Sg/Vg/J+\n> gown    in        it       . ”\n# NSg/VB+ NPr/J/R/P NPr/ISg+ . .\n>\n#\n> “ Did  you    keep   it       ? ” asked Jordan .\n# . VXPt ISgPl+ NSg/VB NPr/ISg+ . . VP/J  NPr+   .\n>\n#\n> “ Sure I       did  . I       was  going   to wear   it       to - night    , but     it       was  too big   in        the bust     and\n# . J    ISg/#r+ VXPt . ISg/#r+ VLPt Nᴹ/Vg/J P  NSg/VB NPr/ISg+ P  . N🅪Sg/VB+ . NSg/C/P NPr/ISg+ VLPt R   NSg/J NPr/J/R/P D   NSg/VB/J VB/C\n> had to be       altered  . It       was  gas      blue      with lavender beads   . Two hundred and\n# VP  P  NSg/VLXB NSg/VP/J . NPr/ISg+ VLPt NSg/VB/J N🅪Sg/VB/J P    Nᴹ/VB/J  NPl/V3+ . NSg NSg     VB/C\n> sixty - five dollars . ”\n# NSg   . NSg  NPl+    . .\n>\n#\n> “ There’s something funny about a   fellow that’ll do  a   thing like         that          , ” said the\n# . K       NSg/I/J+  NSg/J J/P   D/P NSg    K       VXB D/P NSg+  NSg/VB/J/C/P NSg/I/C/Ddem+ . . VP/J D\n> other    girl    eagerly . “ He       doesn’t want   any    trouble  with anybody . ”\n# NSg/VB/J NSg/VB+ R       . . NPr/ISg+ VX3     NSg/VB I/R/Dq N🅪Sg/VB+ P    NSg/I+  . .\n>\n#\n> “ Who    doesn’t ? ” I       inquired .\n# . NPr/I+ VX3     . . ISg/#r+ VP/J     .\n>\n#\n> “ Gatsby . Somebody told me       — — ”\n# . NPr    . NSg/I+   VP   NPr/ISg+ . . .\n>\n#\n> The two girls  and  Jordan leaned together confidentially .\n# D   NSg NPl/V3 VB/C NPr+   VP/J   J        R              .\n>\n#\n> “ Somebody told me       they thought he       killed a    man       once  . ”\n# . NSg/I+   VP   NPr/ISg+ IPl+ N🅪Sg/VP NPr/ISg+ VP/J   D/P+ NPr/VB/J+ NSg/C . .\n>\n#\n> A   thrill passed over    all          of us       . The three Mr   . Mumbles bent     forward  and  listened\n# D/P NSg/VB VP/J   NSg/J/P NSg/I/J/C/Dq P  NPr/IPl+ . D+  NSg+  NSg+ . NPl/V3  NSg/VP/J NSg/VB/J VB/C VP/J\n> eagerly .\n# R       .\n>\n#\n> “ I       don’t think  it’s so          much         that          , ” argued Lucille sceptically ; “ it’s more         that\n# . ISg/#r+ VXB   NSg/VB K    NSg/I/J/R/C NSg/I/J/R/Dq NSg/I/C/Ddem+ . . VP/J   NPr+    R/Au/Br     . . K    NPr/I/J/R/Dq NSg/I/C/Ddem\n> he       was  a   German   spy    during the war      . ”\n# NPr/ISg+ VLPt D/P NPr🅪Sg/J NSg/VB VB/P   D   N🅪Sg/VB+ . .\n>\n#\n> One     of the men  nodded in        confirmation .\n# NSg/I/J P  D+  NPl+ VP     NPr/J/R/P N🅪Sg+        .\n>\n#\n> “ I       heard that         from a    man       who    knew all          about him  , grew up         with him  in        Germany , ”\n# . ISg/#r+ VP/J  NSg/I/C/Ddem P    D/P+ NPr/VB/J+ NPr/I+ VPt  NSg/I/J/C/Dq J/P   ISg+ . VPt  NSg/VB/J/P P    ISg+ NPr/J/R/P NPr+    . .\n> he       assured  us       positively .\n# NPr/ISg+ NSg/VP/J NPr/IPl+ R          .\n>\n#\n> “ Oh     , no       , ” said the first  girl    , “ it       couldn’t be       that          , because he       was  in        the\n# . NPr/VB . NSg/Dq/P . . VP/J D+  NSg/J+ NSg/VB+ . . NPr/ISg+ VXB      NSg/VLXB NSg/I/C/Ddem+ . C/P     NPr/ISg+ VLPt NPr/J/R/P D\n> American army during the war      . ” As    our credulity switched back     to her     she  leaned\n# NPr/J    NSg+ VB/P   D   N🅪Sg/VB+ . . R/C/P D$+ NSg       VP/J     NSg/VB/J P  ISg/D$+ ISg+ VP/J\n> forward  with enthusiasm . “ You    look   at    him  sometimes when    he       thinks nobody’s\n# NSg/VB/J P    NSg+       . . ISgPl+ NSg/VB NSg/P ISg+ R         NSg/I/C NPr/ISg+ NPl/V3 NSg$\n> looking at    him  . I’ll bet       he       killed a   man       . ”\n# Nᴹ/Vg/J NSg/P ISg+ . K    NSg/VB/P+ NPr/ISg+ VP/J   D/P NPr/VB/J+ . .\n>\n#\n> She  narrowed her     eyes    and  shivered . Lucille shivered . We   all          turned and  looked\n# ISg+ VP/J     ISg/D$+ NPl/V3+ VB/C VP/J     . NPr+    VP/J     . IPl+ NSg/I/J/C/Dq VP/J   VB/C VP/J\n> around for   Gatsby . It       was  testimony to the romantic speculation he       inspired that\n# J/P    R/C/P NPr    . NPr/ISg+ VLPt NSg       P  D+  NSg/J+   Nᴹ+         NPr/ISg+ VP/J     NSg/I/C/Ddem\n> there were     whispers about him  from those  who    had found  little     that         it       was\n# R+    NSg/VLPt NPl/V3   J/P   ISg+ P    I/Ddem NPr/I+ VP  NSg/VP NPr/I/J/Dq NSg/I/C/Ddem NPr/ISg+ VLPt\n> necessary to whisper about in        this   world   .\n# NSg/J     P  NSg/VB  J/P   NPr/J/R/P I/Ddem NSg/VB+ .\n>\n#\n> The first  supper  — there would be       another one     after midnight — was  now       being        served ,\n# D+  NSg/J+ NSg/VB+ . R+    VXB   NSg/VLXB I/D     NSg/I/J P     NSg/J+   . VLPt NSg/J/R/C N🅪Sg/VLg/J/C VP/J   .\n> and  Jordan invited  me       to join   her     own       party     , who    were     spread   around a   table   on\n# VB/C NPr+   NSg/VP/J NPr/ISg+ P  NSg/VB ISg/D$+ NSg/VB/J+ NSg/VB/J+ . NPr/I+ NSg/VLPt N🅪Sg/VBP J/P    D/P NSg/VB+ J/P\n> the other    side     of the garden    . There were     three married  couples and  Jordan’s\n# D   NSg/VB/J NSg/VB/J P  D+  NSg/VB/J+ . R+    NSg/VLPt NSg   NSg/VP/J NPl/V3+ VB/C NPr$\n> escort , a   persistent undergraduate given       to violent  innuendo , and  obviously\n# NSg/VB . D/P J          NSg/J         NSg/VPp/J/P P  NSg/VB/J N🅪Sg/VB  . VB/C R\n> under   the impression that          sooner or    later Jordan was  going   to yield  him  up         her\n# NSg/J/P D   NSg/VB+    NSg/I/C/Ddem+ JC     NPr/C JC    NPr+   VLPt Nᴹ/Vg/J P  NSg/VB ISg+ NSg/VB/J/P ISg/D$+\n> person  to a   greater or    lesser degree . Instead of rambling this    party     had\n# NSg/VB+ P  D/P JC      NPr/C NSg/JC NSg+   . R       P  Nᴹ/Vg/J  I/Ddem+ NSg/VB/J+ VP\n> preserved a   dignified homogeneity , and  assumed to itself the function of\n# VP/J      D/P VP/J      NSg         . VB/C VP/J    P  ISg+   D   N🅪Sg/VB  P\n> representing the staid nobility of the country - side     — East   Egg      condescending to\n# Nᴹ/Vg/J      D   VB/J  NSg      P  D   NSg/J+  . NSg/VB/J . NPr/J+ N🅪Sg/VB+ Nᴹ/Vg/J       P\n> West      Egg      , and  carefully on  guard   against its     spectroscopic gayety .\n# NPr/VB/J+ N🅪Sg/VB+ . VB/C R         J/P NSg/VB+ C/P     ISg/D$+ J             ?      .\n>\n#\n> “ Let’s get    out          , ” whispered Jordan , after a   somehow wasteful and  inappropriate\n# . NSg$  NSg/VB NSg/VB/J/R/P . . VP/J      NPr+   . P     D/P R       J        VB/C J\n> half      - hour ; “ this    is  much         too polite for   me       . ”\n# N🅪Sg/J/P+ . NSg+ . . I/Ddem+ VL3 NSg/I/J/R/Dq R   VB/J   R/C/P NPr/ISg+ . .\n>\n#\n> We   got up         , and  she  explained that         we   were     going   to find   the host    : I       had never\n# IPl+ VP  NSg/VB/J/P . VB/C ISg+ VP/J      NSg/I/C/Ddem IPl+ NSg/VLPt Nᴹ/Vg/J P  NSg/VB D+  NSg/VB+ . ISg/#r+ VP  R\n> met him  , she  said , and  it       was  making  me       uneasy   . The undergraduate nodded in        a\n# VP  ISg+ . ISg+ VP/J . VB/C NPr/ISg+ VLPt Nᴹ/Vg/J NPr/ISg+ NSg/VB/J . D   NSg/J         VP     NPr/J/R/P D/P\n> cynical , melancholy way    .\n# J       . NSg/J      NSg/J+ .\n>\n#\n> The bar       , where   we   glanced first , was  crowded , but     Gatsby was  not     there . She\n# D+  NSg/VB/P+ . NSg/R/C IPl+ VP/J    NSg/J . VLPt VP/J    . NSg/C/P NPr    VLPt NSg/R/C R     . ISg+\n> couldn’t find   him  from the top      of the steps   , and  he       wasn’t on  the veranda      . On  a\n# VXB      NSg/VB ISg+ P    D   NSg/VB/J P  D   NPl/V3+ . VB/C NPr/ISg+ VPt    J/P D   NSg/NoAm/Br+ . J/P D/P+\n> chance    we   tried an  important - looking door    , and  walked into a    high        Gothic\n# NPr/VB/J+ IPl+ VP/J  D/P J         . Nᴹ/Vg/J NSg/VB+ . VB/C VP/J   P    D/P+ NSg/VB/J/R+ NPr/J+\n> library , panelled  with carved English      oak        , and  probably transported complete\n# NSg+    . VP/J/Comm P    VP/J   NPr🅪Sg/VB/J+ N🅪Sg/VB/J+ . VB/C R        VP/J        NSg/VB/J\n> from some     ruin   overseas .\n# P    I/J/R/Dq NSg/VB J/R      .\n>\n#\n> A    stout     , middle   - aged man      , with enormous owl     - eyed spectacles , was  sitting\n# D/P+ NPr/VB/J+ . NSg/VB/J . VP/J NPr/VB/J . P    J+       NSg/VB+ . VP/J NPl        . VLPt NSg/Vg/J\n> somewhat drunk     on  the edge   of a   great table   , staring with unsteady concentration\n# NSg/I/R  NSg/VPp/J J/P D   NSg/VB P  D/P NSg/J NSg/VB+ . Nᴹ/Vg/J P    VB/J     NSg+\n> at    the shelves of books   . As    we   entered he       wheeled excitedly around and  examined\n# NSg/P D   NPl/V3  P  NPl/V3+ . R/C/P IPl+ VP/J    NPr/ISg+ VP/J    R         J/P    VB/C VP/J\n> Jordan from head      to foot   .\n# NPr+   P    NPr/VB/J+ P  NSg/VB .\n>\n#\n> “ What   do  you    think  ? ” he       demanded impetuously .\n# . NSg/I+ VXB ISgPl+ NSg/VB . . NPr/ISg+ VP/J     R           .\n>\n#\n> “ About what   ? ”\n# . J/P   NSg/I+ . .\n>\n#\n> He       waved his     hand    toward the book    - shelves .\n# NPr/ISg+ VP/J  ISg/D$+ NSg/VB+ J/P    D   NSg/VB+ . NPl/V3+ .\n>\n#\n> “ About that          . As    a   matter  of fact you    needn’t bother to ascertain . I       ascertained .\n# . J/P   NSg/I/C/Ddem+ . R/C/P D/P N🅪Sg/VB P  NSg+ ISgPl+ VXB     Nᴹ/VB  P  VB        . ISg/#r+ VP/J        .\n> They’re real  . ”\n# K       NSg/J . .\n>\n#\n> “ The books   ? ”\n# . D+  NPl/V3+ . .\n>\n#\n> He       nodded .\n# NPr/ISg+ VP     .\n>\n#\n> “ Absolutely real  — have    pages   and  everything . I       thought they’d be       a   nice  durable\n# . R          NSg/J . NSg/VXB NPl/V3+ VB/C NSg/I/VB+  . ISg/#r+ N🅪Sg/VP K      NSg/VLXB D/P NPr/J NSg/J\n> cardboard . Matter  of fact , they’re absolutely real  . Pages   and  — Here ! Lemme show\n# Nᴹ/J+     . N🅪Sg/VB P  NSg+ . K       R          NSg/J . NPl/V3+ VB/C . J/R  . W?    NSg/VB\n> you    . ”\n# ISgPl+ . .\n>\n#\n> Taking   our scepticism for   granted , he       rushed to the bookcases and  returned with\n# NSg/Vg/J D$+ Nᴹ/Au/Br   R/C/P VP/J    . NPr/ISg+ VP/J   P  D   NPl       VB/C VP/J     P\n> Volume   One     of the “ Stoddard Lectures . ”\n# N🅪Sg/VB+ NSg/I/J P  D   . ?        NPl/V3+  . .\n>\n#\n> “ See    ! ” he       cried triumphantly . “ It’s a   bona - fide piece  of printed matter   . It\n# . NSg/VB . . NPr/ISg+ VP/J  R            . . K    D/P ?    . ?    NSg/VB P  VP/J    N🅪Sg/VB+ . NPr/ISg+\n> fooled me       . This   fella’s a   regular Belasco . It’s a    triumph  . What   thoroughness !\n# VP/J   NPr/ISg+ . I/Ddem ?       D/P NSg/J   ?       . K    D/P+ N🅪Sg/VB+ . NSg/I+ Nᴹ           .\n> What   realism ! Knew when    to stop   , too — didn’t cut       the pages   . But     what   do  you    want   ?\n# NSg/I+ Nᴹ+     . VPt  NSg/I/C P  NSg/VB . R   . VXPt   NSg/VBP/J D   NPl/V3+ . NSg/C/P NSg/I+ VXB ISgPl+ NSg/VB .\n> What   do  you    expect ? ”\n# NSg/I+ VXB ISgPl+ VB     . .\n>\n#\n> He       snatched the book    from me       and  replaced it       hastily on  its     shelf , muttering\n# NPr/ISg+ VP/J     D+  NSg/VB+ P    NPr/ISg+ VB/C VP/J     NPr/ISg+ R       J/P ISg/D$+ NSg+  . Nᴹ/Vg/J\n> that         if    one      brick      was  removed the whole  library was  liable to collapse .\n# NSg/I/C/Ddem NSg/C NSg/I/J+ N🅪Sg/VB/J+ VLPt VP/J    D+  NSg/J+ NSg+    VLPt J      P  N🅪Sg/VB  .\n>\n#\n> “ Who    brought you    ? ” he       demanded . “ Or    did  you    just come       ? I       was  brought . Most\n# . NPr/I+ VP      ISgPl+ . . NPr/ISg+ VP/J     . . NPr/C VXPt ISgPl+ J/R  NSg/VBPp/P . ISg/#r+ VLPt VP      . NSg/I/J/R/Dq\n> people  were     brought . ”\n# NPl/VB+ NSg/VLPt VP      . .\n>\n#\n> Jordan looked at    him  alertly , cheerfully , without answering .\n# NPr+   VP/J   NSg/P ISg+ R       . R          . C/P     Nᴹ/Vg/J   .\n>\n#\n> “ I       was  brought by    a    woman   named Roosevelt , ” he       continued . “ Mrs  . Claud Roosevelt .\n# . ISg/#r+ VLPt VP      NSg/P D/P+ NSg/VB+ VP/J  NPr+      . . NPr/ISg+ VP/J      . . NPl+ . ?     NPr+      .\n> Do  you    know her     ? I       met her     somewhere last      night    . I’ve been     drunk     for   about a\n# VXB ISgPl+ VB   ISg/D$+ . ISg/#r+ VP  ISg/D$+ NSg       NSg/VB/J+ N🅪Sg/VB+ . K    NSg/VLPp NSg/VPp/J R/C/P J/P   D/P\n> week   now       , and  I       thought it       might    sober me       up         to sit    in        a   library . ”\n# NSg/J+ NSg/J/R/C . VB/C ISg/#r+ N🅪Sg/VP NPr/ISg+ Nᴹ/VXB/J VB/J  NPr/ISg+ NSg/VB/J/P P  NSg/VB NPr/J/R/P D/P NSg+    . .\n>\n#\n> “ Has it       ? ”\n# . V3  NPr/ISg+ . .\n>\n#\n> “ A    little      bit      , I       think  . I       can’t tell   yet      . I’ve only  been     here an  hour . Did  I\n# . D/P+ NPr/I/J/Dq+ NSg/VPt+ . ISg/#r+ NSg/VB . ISg/#r+ VXB   NPr/VB NSg/VB/C . K    J/R/C NSg/VLPp J/R  D/P NSg+ . VXPt ISg/#r+\n> tell   you    about the books   ? They’re real  . They’re — ”\n# NPr/VB ISgPl+ J/P   D+  NPl/V3+ . K       NSg/J . K       . .\n>\n#\n> “ You    told us       . ”\n# . ISgPl+ VP   NPr/IPl+ . .\n>\n#\n> We   shook     hands   with him  gravely and  went    back     outdoors .\n# IPl+ NSg/VPt/J NPl/V3+ P    ISg+ R       VB/C NSg/VPt NSg/VB/J NSg/V3   .\n>\n#\n> There was  dancing now       on  the canvas  in        the garden    ; old    men  pushing young     girls\n# R+    VLPt Nᴹ/Vg/J NSg/J/R/C J/P D   NSg/VB+ NPr/J/R/P D+  NSg/VB/J+ . NSg/J+ NPl+ Nᴹ/Vg/J NPr/VB/J+ NPl/V3+\n> backward in        eternal graceless circles , superior couples holding each other\n# NSg/J    NPr/J/R/P NSg/J   J         NPl/V3+ . NPr/J    NPl/V3+ Nᴹ/Vg/J Dq   NSg/VB/J\n> tortuously , fashionably , and  keeping in        the corners — and  a   great number     of single\n# R          . R           . VB/C Nᴹ/Vg/J NPr/J/R/P D   NPl/V3+ . VB/C D/P NSg/J N🅪Sg/VB/JC P  NSg/VB/J\n> girls   dancing individualistically or    relieving the orchestra for   a   moment of the\n# NPl/V3+ Nᴹ/Vg/J R                   NPr/C Nᴹ/Vg/J   D   NSg+      R/C/P D/P NSg    P  D\n> burden of the banjo  or    the traps  . By    midnight the hilarity had increased . A\n# NSg/VB P  D   NSg/VB NPr/C D   NPl/V3 . NSg/P NSg/J+   D   NSg      VP  VP/J      . D/P\n> celebrated tenor had sung    in        Italian , and  a   notorious contralto had sung    in\n# VP/J       NSg/J VP  NPr/VPp NPr/J/R/P N🅪Sg/J  . VB/C D/P J         NSg       VP  NPr/VPp NPr/J/R/P\n> jazz    , and  between the numbers   people  were     doing   ‘          ‘          stunts ” all          over    the garden    ,\n# NSg/VB+ . VB/C NSg/P   D   NPrPl/V3+ NPl/VB+ NSg/VLPt Nᴹ/Vg/J Unlintable Unlintable NPl/V3 . NSg/I/J/C/Dq NSg/J/P D   NSg/VB/J+ .\n> while      happy    , vacuous bursts of laughter rose      toward the summer     sky      . A   pair   of\n# NSg/VB/C/P NSg/VB/J . J       NPl/V3 P  Nᴹ+      NPr/VPt/J J/P    D   NPr🅪Sg/VB+ N🅪Sg/VB+ . D/P NSg/VB P\n> stage   twins   , who    turned out          to be       the girls   in        yellow   , did  a    baby      act     in\n# NSg/VB+ NPl/V3+ . NPr/I+ VP/J   NSg/VB/J/R/P P  NSg/VLXB D+  NPl/V3+ NPr/J/R/P NSg/VB/J . VXPt D/P+ NSg/VB/J+ NPr/VB+ NPr/J/R/P\n> costume , and  champagne  was  served in        glasses bigger than finger  - bowls   . The moon\n# NSg/VB  . VB/C N🅪Sg/VB/J+ VLPt VP/J   NPr/J/R/P NPl/V3+ JC     C/P  NSg/VB+ . NPl/V3+ . D+  NPr/VB+\n> had risen higher , and  floating in        the Sound      was  a   triangle of silver   scales ,\n# VP  VPp/J NSg/JC . VB/C Nᴹ/Vg/J  NPr/J/R/P D+  N🅪Sg/VB/J+ VLPt D/P NSg      P  Nᴹ/VB/J+ NPl/V3 .\n> trembling a   little     to the stiff    , tinny drip   of the banjoes on  the lawn    .\n# Nᴹ/Vg/J   D/P NPr/I/J/Dq P  D   NSg/VB/J . NSg/J NSg/VB P  D   ?       J/P D   NSg/VB+ .\n>\n#\n> I       was  still      with Jordan Baker . We   were     sitting  at    a   table  with a   man      of about my\n# ISg/#r+ VLPt NSg/VB/J/R P    NPr+   NPr+  . IPl+ NSg/VLPt NSg/Vg/J NSg/P D/P NSg/VB P    D/P NPr/VB/J P  J/P   D$+\n> age     and  a    rowdy  little      girl    , who    gave way    upon the slightest provocation to\n# N🅪Sg/VB VB/C D/P+ NSg/J+ NPr/I/J/Dq+ NSg/VB+ . NPr/I+ VPt  NSg/J+ P    D   JS        NSg+        P\n> uncontrollable laughter . I       was  enjoying myself now       . I       had taken two finger  - bowls\n# NSg/J          Nᴹ+      . ISg/#r+ VLPt Nᴹ/Vg/J  ISg+   NSg/J/R/C . ISg/#r+ VP  VPp/J NSg NSg/VB+ . NPl/V3\n> of champagne  , and  the scene   had changed before my  eyes    into something\n# P  N🅪Sg/VB/J+ . VB/C D+  NSg/VB+ VP  VP/J    C/P    D$+ NPl/V3+ P    NSg/I/J+\n> significant , elemental , and  profound .\n# NSg/J       . NSg/J     . VB/C NSg/VB/J .\n>\n#\n> At    a   lull   in        the entertainment the man       looked at    me       and  smiled .\n# NSg/P D/P NSg/VB NPr/J/R/P D+  N🅪Sg+         D+  NPr/VB/J+ VP/J   NSg/P NPr/ISg+ VB/C VP/J   .\n>\n#\n> “ Your face    is  familiar , ” he       said , politely . “ Weren’t you    in        the First Division\n# . D$+  NSg/VB+ VL3 NSg/J    . . NPr/ISg+ VP/J . R        . . VPt     ISgPl+ NPr/J/R/P D   NSg/J NSg+\n> during the war      ? ”\n# VB/P   D   N🅪Sg/VB+ . .\n>\n#\n> “ Why    , yes    . I       was  in        the Twenty - eighth   Infantry . ”\n# . NSg/VB . NPl/VB . ISg/#r+ VLPt NPr/J/R/P D   NSg    . NSg/VB/J N🅪Sg+    . .\n>\n#\n> “ I       was  in        the Sixteenth until June nineteen - eighteen . I       knew I’d seen    you\n# . ISg/#r+ VLPt NPr/J/R/P D   NSg/J     C/P   NPr+ NSg      . NSg      . ISg/#r+ VPt  K   NSg/VPp ISgPl+\n> somewhere before . ”\n# NSg       C/P    . .\n>\n#\n> We   talked for   a    moment about some     wet      , gray           little     villages in        France . Evidently\n# IPl+ VP/J   R/C/P D/P+ NSg+   J/P   I/J/R/Dq NSg/VP/J . NPr🅪Sg/VB/J/Am NPr/I/J/Dq NPl      NPr/J/R/P NPr+   . R\n> he       lived in        this   vicinity , for   he       told me       that         he       had just bought a   hydroplane ,\n# NPr/ISg+ VP/J  NPr/J/R/P I/Ddem NSg      . R/C/P NPr/ISg+ VP   NPr/ISg+ NSg/I/C/Ddem NPr/ISg+ VP  J/R  NSg/VP D/P NSg/VB     .\n> and  was  going   to try      it       out          in        the morning    .\n# VB/C VLPt Nᴹ/Vg/J P  NSg/VB/J NPr/ISg+ NSg/VB/J/R/P NPr/J/R/P D   N🅪Sg/Vg/J+ .\n>\n#\n> “ Want   to go       with me       , old    sport   ? Just near       the shore   along the Sound      . ”\n# . NSg/VB P  NSg/VB/J P    NPr/ISg+ . NSg/J+ NSg/VB+ . J/R  NSg/VB/J/P D+  NSg/VB+ P     D+  N🅪Sg/VB/J+ . .\n>\n#\n> “ What   time       ? ”\n# . NSg/I+ N🅪Sg/VB/J+ . .\n>\n#\n> “ Any     time       that          suits  you    best       . ”\n# . I/R/Dq+ N🅪Sg/VB/J+ NSg/I/C/Ddem+ NPl/V3 ISgPl+ NPr/VXB/JS . .\n>\n#\n> It       was  on  the tip    of my  tongue   to ask    his     name    when    Jordan looked around and\n# NPr/ISg+ VLPt J/P D   NSg/VB P  D$+ N🅪Sg/VB+ P  NSg/VB ISg/D$+ NSg/VB+ NSg/I/C NPr+   VP/J   J/P    VB/C\n> smiled .\n# VP/J   .\n>\n#\n> “ Having  a    gay       time       now       ? ” she  inquired .\n# . Nᴹ/Vg/J D/P+ NPr/VB/J+ N🅪Sg/VB/J+ NSg/J/R/C . . ISg+ VP/J     .\n>\n#\n> “ Much         better     . ” I       turned again to my  new    acquaintance . “ This    is  an  unusual party\n# . NSg/I/J/R/Dq NSg/VXB/JC . . ISg/#r+ VP/J   P     P  D$+ NSg/J+ NSg+         . . I/Ddem+ VL3 D/P NSg/J   NSg/VB/J\n> for   me       . I       haven’t even       seen    the host    . I       live over    there — ” I       waved my  hand    at    the\n# R/C/P NPr/ISg+ . ISg/#r+ VXB     NSg/VB/J/R NSg/VPp D   NSg/VB+ . ISg/#r+ VB/J NSg/J/P R     . . ISg/#r+ VP/J  D$+ NSg/VB+ NSg/P D\n> invisible hedge   in        the distance , “ and  this    man       Gatsby sent   over    his     chauffeur\n# J         NSg/VB+ NPr/J/R/P D+  N🅪Sg/VB+ . . VB/C I/Ddem+ NPr/VB/J+ NPr    NSg/VP NSg/J/P ISg/D$+ NSg/VB\n> with an  invitation . ”\n# P    D/P NSg+       . .\n>\n#\n> For   a    moment he       looked at    me       as    if    he       failed to understand .\n# R/C/P D/P+ NSg+   NPr/ISg+ VP/J   NSg/P NPr/ISg+ R/C/P NSg/C NPr/ISg+ VP/J   P  VB         .\n>\n#\n> “ I’m Gatsby , ” he       said suddenly .\n# . K   NPr    . . NPr/ISg+ VP/J R        .\n>\n#\n> “ What   ! ” I       exclaimed . “ Oh     , I       beg    your pardon . ”\n# . NSg/I+ . . ISg/#r+ VP/J      . . NPr/VB . ISg/#r+ NSg/VB D$+  NSg/VB . .\n>\n#\n> “ I       thought you    knew , old    sport   . I’m afraid I’m not     a   very good     host    . ”\n# . ISg/#r+ N🅪Sg/VP ISgPl+ VPt  . NSg/J+ NSg/VB+ . K   J      K   NSg/R/C D/P J/R  NPr/VB/J NSg/VB+ . .\n>\n#\n> He       smiled understandingly — much         more         than understandingly . It       was  one     of those\n# NPr/ISg+ VP/J   R               . NSg/I/J/R/Dq NPr/I/J/R/Dq C/P  R               . NPr/ISg+ VLPt NSg/I/J P  I/Ddem\n> rare     smiles with a   quality of eternal reassurance in        it       , that         you    may     come\n# NSg/VB/J NPl/V3 P    D/P N🅪Sg/J  P  NSg/J   N🅪Sg+       NPr/J/R/P NPr/ISg+ . NSg/I/C/Ddem ISgPl+ NPr/VXB NSg/VBPp/P\n> across four or    five times  in        life     . It       faced — or    seemed to face   — the whole  eternal\n# NSg/P  NSg  NPr/C NSg  NPl/V3 NPr/J/R/P N🅪Sg/VB+ . NPr/ISg+ VP/J  . NPr/C VP/J   P  NSg/VB . D+  NSg/J+ NSg/J+\n> world   for   an  instant  , and  then      concentrated on  you    with an  irresistible\n# NSg/VB+ R/C/P D/P NSg/VB/J . VB/C NSg/J/R/C VP/J         J/P ISgPl+ P    D/P J\n> prejudice in        your favor       . It       understood you    just so          far      as    you    wanted to be\n# NSg/VB/J+ NPr/J/R/P D$+  N🅪Sg/VB/Am+ . NPr/ISg+ VP/J       ISgPl+ J/R  NSg/I/J/R/C NSg/VB/J R/C/P ISgPl+ VP/J   P  NSg/VLXB\n> understood , believed in        you    as    you    would like         to believe in        yourself , and\n# VP/J       . VP/J     NPr/J/R/P ISgPl+ R/C/P ISgPl+ VXB   NSg/VB/J/C/P P  VB      NPr/J/R/P ISg+     . VB/C\n> assured  you    that         it       had precisely the impression of you    that          , at    your best       , you\n# NSg/VP/J ISgPl+ NSg/I/C/Ddem NPr/ISg+ VP  R         D   NSg/VB     P  ISgPl+ NSg/I/C/Ddem+ . NSg/P D$+  NPr/VXB/JS . ISgPl+\n> hoped to convey . Precisely at    that          point   it       vanished — and  I       was  looking at    an\n# VP/J  P  VB     . R         NSg/P NSg/I/C/Ddem+ NSg/VB+ NPr/ISg+ VP/J     . VB/C ISg/#r+ VLPt Nᴹ/Vg/J NSg/P D/P\n> elegant young    rough    - neck   , a    year or    two over    thirty , whose elaborate formality\n# NSg/J   NPr/VB/J NSg/Vg/J . NSg/VB . D/P+ NSg+ NPr/C NSg NSg/J/P NSg    . I+    VB/J      NSg\n> of speech   just missed being        absurd . Some      time       before he       introduced himself I’d\n# P  N🅪Sg/VB+ J/R  VP/J   N🅪Sg/VLg/J/C NSg/J  . I/J/R/Dq+ N🅪Sg/VB/J+ C/P    NPr/ISg+ VP/J       ISg+    K\n> got a   strong impression that          he       was  picking his     words  with care     .\n# VP  D/P NPr/J  NSg/VB+    NSg/I/C/Ddem+ NPr/ISg+ VLPt Nᴹ/Vg/J ISg/D$+ NPl/V3 P    N🅪Sg/VB+ .\n>\n#\n> Almost at    the moment when    Mr   . Gatsby identified himself a   butler hurried toward\n# R      NSg/P D+  NSg+   NSg/I/C NSg+ . NPr    VP/J       ISg+    D/P NPr/VB VP/J    J/P\n> him  with the information that          Chicago was  calling him  on  the wire     . He       excused\n# ISg+ P    D   Nᴹ+         NSg/I/C/Ddem+ NPr+    VLPt Nᴹ/Vg/J ISg+ J/P D   N🅪Sg/VB+ . NPr/ISg+ VP/J\n> himself with a    small     bow     that          included each of us       in        turn   .\n# ISg+    P    D/P+ NPr/VB/J+ NSg/VB+ NSg/I/C/Ddem+ VP/J     Dq   P  NPr/IPl+ NPr/J/R/P NSg/VB .\n>\n#\n> “ If    you    want   anything  just ask    for   it       , old    sport   , ” he       urged me       . “ Excuse  me       . I\n# . NSg/C ISgPl+ NSg/VB NSg/I/VB+ J/R  NSg/VB R/C/P NPr/ISg+ . NSg/J+ NSg/VB+ . . NPr/ISg+ VP/J  NPr/ISg+ . . NSg/VB+ NPr/ISg+ . ISg/#r+\n> will    rejoin you    later . ”\n# NPr/VXB NSg/VB ISgPl+ JC    . .\n>\n#\n> When    he       was  gone    I       turned immediately to Jordan — constrained to assure her     of my\n# NSg/I/C NPr/ISg+ VLPt VPp/J/P ISg/#r+ VP/J   R           P  NPr+   . VP/J        P  VB     ISg/D$+ P  D$+\n> surprise . I       had expected that          Mr   . Gatsby would be       a   florid and  corpulent person\n# NSg/VB+  . ISg/#r+ VP  NSg/VP/J NSg/I/C/Ddem+ NSg+ . NPr    VXB   NSg/VLXB D/P J      VB/C J         NSg/VB+\n> in        his     middle   years .\n# NPr/J/R/P ISg/D$+ NSg/VB/J NPl+  .\n>\n#\n> “ Who    is  he       ? ” I       demanded . “ Do  you    know ? ”\n# . NPr/I+ VL3 NPr/ISg+ . . ISg/#r+ VP/J     . . VXB ISgPl+ VB   . .\n>\n#\n> “ He’s just a   man       named Gatsby . ”\n# . NPr$ J/R  D/P NPr/VB/J+ VP/J  NPr    . .\n>\n#\n> “ Where   is  he       from , I       mean     ? And  what   does    he       do  ? ”\n# . NSg/R/C VL3 NPr/ISg+ P    . ISg/#r+ NSg/VB/J . VB/C NSg/I+ NPl/VX3 NPr/ISg+ VXB . .\n>\n#\n> “ Now       you’re started on  the subject   , ” she  answered with a   wan      smile   . “ Well       , he\n# . NSg/J/R/C K      VP/J    J/P D   NSg/VB/J+ . . ISg+ VP/J     P    D/P NSg/VB/J NSg/VB+ . . NSg/VB/J/R . NPr/ISg+\n> told me       once  he       was  an  Oxford man      . ”\n# VP   NPr/ISg+ NSg/C NPr/ISg+ VLPt D/P NPr    NPr/VB/J . .\n>\n#\n> A    dim       background started to take   shape    behind  him  , but     at    her     next     remark  it\n# D/P+ NSg/VB/J+ NSg/VB/J+  VP/J    P  NSg/VB N🅪Sg/VB+ NSg/J/P ISg+ . NSg/C/P NSg/P ISg/D$+ NSg/J/P+ NSg/VB+ NPr/ISg+\n> faded away .\n# J     VB/J .\n>\n#\n> “ However , I       don’t believe it       . ”\n# . C       . ISg/#r+ VXB   VB      NPr/ISg+ . .\n>\n#\n> “ Why    not     ? ”\n# . NSg/VB NSg/R/C . .\n>\n#\n> “ I       don’t know , ” she  insisted , “ I       just don’t think  he       went    there . ”\n# . ISg/#r+ VXB   VB   . . ISg+ VP/J     . . ISg/#r+ J/R  VXB   NSg/VB NPr/ISg+ NSg/VPt R     . .\n>\n#\n> Something in        her     tone       reminded me       of the other    girl’s “ I       think  he       killed a   man       , ”\n# NSg/I/J+  NPr/J/R/P ISg/D$+ N🅪Sg/I/VB+ VP/J     NPr/ISg+ P  D   NSg/VB/J NSg$   . ISg/#r+ NSg/VB NPr/ISg+ VP/J   D/P NPr/VB/J+ . .\n> and  had the effect of stimulating my  curiosity . I       would have    accepted without\n# VB/C VP  D   NSg/VB P  Nᴹ/Vg/J     D$+ NSg+      . ISg/#r+ VXB   NSg/VXB VP/J     C/P\n> question the information that          Gatsby sprang from the swamps of Louisiana or    from\n# NSg/VB+  D+  Nᴹ+         NSg/I/C/Ddem+ NPr    VB     P    D   NPl/V3 P  NPr+      NPr/C P\n> the lower     East   Side     of New   York . That          was  comprehensible . But     young     men\n# D   NSg/VB/JC NPr/J+ NSg/VB/J P  NSg/J NPr+ . NSg/I/C/Ddem+ VLPt J              . NSg/C/P NPr/VB/J+ NPl+\n> didn’t — at    least    in        my  provincial inexperience I       believed they didn’t — drift\n# VXPt   . NSg/P NSg/J/Dq NPr/J/R/P D$+ NSg/J      Nᴹ           ISg/#r+ VP/J     IPl+ VXPt   . NSg/VB\n> coolly out          of nowhere and  buy    a   palace  on  Long     Island  Sound      .\n# R      NSg/VB/J/R/P P  NSg/J   VB/C NSg/VB D/P NSg/VB+ J/P NPr/VB/J NSg/VB+ N🅪Sg/VB/J+ .\n>\n#\n> “ Anyhow , he       gives  large  parties , ” said Jordan , changing the subject   with an\n# . J      . NPr/ISg+ NPl/V3 NSg/J+ NPl/V3+ . . VP/J NPr+   . Nᴹ/Vg/J  D   NSg/VB/J+ P    D/P\n> urban distaste for   the concrete   . “ And  I       like         large  parties . They’re so          intimate .\n# NPr/J NSg/VB   R/C/P D+  N🅪Sg/VB/J+ . . VB/C ISg/#r+ NSg/VB/J/C/P NSg/J+ NPl/V3+ . K       NSg/I/J/R/C NSg/VB/J .\n> At    small     parties there isn’t   any     privacy . ”\n# NSg/P NPr/VB/J+ NPl/V3+ R+    NSg/VX3 I/R/Dq+ Nᴹ+     . .\n>\n#\n> There was  the boom   of a    bass      drum   , and  the voice  of the orchestra leader  rang\n# R+    VLPt D   NSg/VB P  D/P+ NPr/VB/J+ NSg/VB . VB/C D   NSg/VB P  D+  NSg+      NSg/JC+ VPt\n> out          suddenly above   the chatter of the garden    .\n# NSg/VB/J/R/P R        NSg/J/P D   NSg/VB  P  D+  NSg/VB/J+ .\n>\n#\n> “ Ladies and  gentlemen , ” he       cried . “ At    the request of Mr   . Gatsby we   are going   to\n# . NPl/V3 VB/C NPl+      . . NPr/ISg+ VP/J  . . NSg/P D   NSg/VB  P  NSg+ . NPr    IPl+ VLB Nᴹ/Vg/J P\n> play    for   you    Mr   . Vladmir Tostoff’s latest  work     , which attracted so          much\n# N🅪Sg/VB R/C/P ISgPl+ NSg+ . ?       ?         NSg/JS+ N🅪Sg/VB+ . I/C+  VP/J      NSg/I/J/R/C NSg/I/J/R/Dq\n> attention at    Carnegie Hall last     May     . If    you    read    the papers  you    know there was  a\n# NSg+      NSg/P NPr+     NPr+ NSg/VB/J NPr/VXB . NSg/C ISgPl+ NSg/VBP D+  NPl/V3+ ISgPl+ VB   R+    VLPt D/P+\n> big    sensation . ” He       smiled with jovial condescension , and  added : “ Some\n# NSg/J+ NSg+      . . NPr/ISg+ VP/J   P    J      NSg           . VB/C VP/J  . . I/J/R/Dq\n> sensation ! ” Whereupon everybody laughed .\n# NSg+      . . C         NSg/I+    VP/J    .\n>\n#\n> “ The piece   is  known , ” he       concluded lustily , “ as    ‘          Vladmir Tostoff’s Jazz    History\n# . D+  NSg/VB+ VL3 VPp/J . . NPr/ISg+ VP/J      R       . . R/C/P Unlintable ?       ?         NSg/VB+ N🅪Sg\n> of the World   . ’ ”\n# P  D   NSg/VB+ . . .\n>\n#\n> The nature  of Mr   . Tostoff’s composition eluded me       , because just as    it       began my\n# D   N🅪Sg/VB P  NSg+ . ?         NSg+        VP/J   NPr/ISg+ . C/P     J/R  R/C/P NPr/ISg+ VPt   D$+\n> eyes    fell      on  Gatsby , standing alone on  the marble    steps   and  looking from one\n# NPl/V3+ NSg/VPt/J J/P NPr    . Nᴹ/Vg/J  J     J/P D   NSg/VB/J+ NPl/V3+ VB/C Nᴹ/Vg/J P    NSg/I/J\n> group   to another with approving eyes    . His     tanned skin     was  drawn attractively\n# NSg/VB+ P  I/D     P    Nᴹ/Vg/J   NPl/V3+ . ISg/D$+ VP/J+  N🅪Sg/VB+ VLPt VPp/J R\n> tight on  his     face    and  his     short      hair     looked as    though it       were     trimmed every day     .\n# VB/J  J/P ISg/D$+ NSg/VB+ VB/C ISg/D$+ NPr/VB/J/P N🅪Sg/VB+ VP/J   R/C/P C      NPr/ISg+ NSg/VLPt VP/J    Dq    NPr🅪Sg+ .\n> I       could   see    nothing  sinister about him  . I       wondered if    the fact that          he       was  not\n# ISg/#r+ NSg/VXB NSg/VB NSg/I/J+ J        J/P   ISg+ . ISg/#r+ VP/J     NSg/C D+  NSg+ NSg/I/C/Ddem+ NPr/ISg+ VLPt NSg/R/C\n> drinking helped to set       him  off        from his     guests  , for   it       seemed to me       that         he       grew\n# Nᴹ/Vg/J  VP/J   P  NPr/VBP/J ISg+ NSg/VB/J/P P    ISg/D$+ NPl/V3+ . R/C/P NPr/ISg+ VP/J   P  NPr/ISg+ NSg/I/C/Ddem NPr/ISg+ VPt\n> more         correct  as    the fraternal hilarity increased . When    the “ Jazz   History of the\n# NPr/I/J/R/Dq NSg/VB/J R/C/P D   NSg/J     NSg      VP/J      . NSg/I/C D   . NSg/VB N🅪Sg    P  D+\n> World   ” was  over    , girls   were     putting their heads   on  men’s shoulders in        a\n# NSg/VB+ . VLPt NSg/J/P . NPl/V3+ NSg/VLPt Nᴹ/Vg/J D$+   NPl/V3+ J/P NSg$  NPl/V3+   NPr/J/R/P D/P\n> puppyish , convivial way    , girls   were     swooning backward playfully into men’s arms    ,\n# ?        . J         NSg/J+ . NPl/V3+ NSg/VLPt Nᴹ/Vg/J  NSg/J    R         P    NSg$  NPl/V3+ .\n> even       into groups  , knowing    that         some     one      would arrest  their falls   — but     no       one\n# NSg/VB/J/R P    NPl/V3+ . NSg/Vg/J/P NSg/I/C/Ddem I/J/R/Dq NSg/I/J+ VXB   N🅪Sg/VB D$+   NPl/V3+ . NSg/C/P NSg/Dq/P NSg/I/J+\n> swooned backward on  Gatsby , and  no       French      bob     touched Gatsby’s shoulder , and  no\n# VP/J    NSg/J    J/P NPr    . VB/C NSg/Dq/P NPr🅪Sg/VB/J NPr/VB+ VP/J    NPr$     NSg/VB+  . VB/C NSg/Dq/P\n> singing quartets were     formed for   Gatsby’s head      for   one     link    .\n# Nᴹ/Vg/J NPl      NSg/VLPt VP/J   R/C/P NPr$     NPr/VB/J+ R/C/P NSg/I/J NSg/VB+ .\n>\n#\n> “ I       beg    your pardon . ”\n# . ISg/#r+ NSg/VB D$+  NSg/VB . .\n>\n#\n> Gatsby’s butler was  suddenly standing beside us       .\n# NPr$     NPr/VB VLPt R        Nᴹ/Vg/J  P      NPr/IPl+ .\n>\n#\n> “ Miss   Baker ? ” he       inquired . “ I       beg    your pardon , but     Mr   . Gatsby would like         to\n# . NSg/VB NPr+  . . NPr/ISg+ VP/J     . . ISg/#r+ NSg/VB D$+  NSg/VB . NSg/C/P NSg+ . NPr    VXB   NSg/VB/J/C/P P\n> speak  to you    alone . ”\n# NSg/VB P  ISgPl+ J     . .\n>\n#\n> “ With me       ? ” she  exclaimed in        surprise .\n# . P    NPr/ISg+ . . ISg+ VP/J      NPr/J/R/P NSg/VB+  .\n>\n#\n> “ Yes    , madame . ”\n# . NPl/VB . NSg+   . .\n>\n#\n> She  got up         slowly , raising her     eyebrows at    me       in        astonishment , and  followed the\n# ISg+ VP  NSg/VB/J/P R      . Nᴹ/Vg/J ISg/D$+ NPl/V3+  NSg/P NPr/ISg+ NPr/J/R/P Nᴹ+          . VB/C VP/J     D\n> butler toward the house   . I       noticed that         she  wore her     evening    - dress   , all          her\n# NPr/VB J/P    D   NPr/VB+ . ISg/#r+ VP/J    NSg/I/C/Ddem ISg+ VPt  ISg/D$+ N🅪Sg/Vg/J+ . NSg/VB+ . NSg/I/J/C/Dq ISg/D$+\n> dresses , like         sports  clothes — there was  a   jauntiness about her     movements as    if\n# NPl/V3+ . NSg/VB/J/C/P NPl/V3+ NPl/V3+ . R+    VLPt D/P NSg        J/P   ISg/D$+ NPl+      R/C/P NSg/C\n> she  had first learned to walk   upon golf    courses on  clean    , crisp    mornings .\n# ISg+ VP  NSg/J VP/J    P  NSg/VB P    NSg/VB+ NPl/V3+ J/P NSg/VB/J . NSg/VB/J NPl/V3+  .\n>\n#\n> I       was  alone and  it       was  almost two . For   some      time       confused and  intriguing sounds\n# ISg/#r+ VLPt J     VB/C NPr/ISg+ VLPt R      NSg . R/C/P I/J/R/Dq+ N🅪Sg/VB/J+ VP/J     VB/C Nᴹ/Vg/J    NPl/V3\n> had issued from a   long     , many       - windowed room       which overhung the terrace . Eluding\n# VP  VP/J   P    D/P NPr/VB/J . NSg/I/J/Dq . VP/J     N🅪Sg/VB/J+ I/C+  VP/J     D   NSg/VB+ . Nᴹ/Vg/J\n> Jordan’s undergraduate , who    was  now       engaged in        an  obstetrical conversation with\n# NPr$     NSg/J         . NPr/I+ VLPt NSg/J/R/C VP/J    NPr/J/R/P D/P J           N🅪Sg/VB+     P\n> two chorus  girls   , and  who    implored me       to join   him  , I       went    inside  .\n# NSg NSg/VB+ NPl/V3+ . VB/C NPr/I+ VP/J     NPr/ISg+ P  NSg/VB ISg+ . ISg/#r+ NSg/VPt NSg/J/P .\n>\n#\n> The large  room       was  full     of people  . One     of the girls   in        yellow   was  playing the\n# D+  NSg/J+ N🅪Sg/VB/J+ VLPt NSg/VB/J P  NPl/VB+ . NSg/I/J P  D+  NPl/V3+ NPr/J/R/P NSg/VB/J VLPt Nᴹ/Vg/J D+\n> piano     , and  beside her     stood a   tall  , red    - haired young    lady   from a   famous chorus  ,\n# NSg/VB/J+ . VB/C P      ISg/D$+ VP    D/P NSg/J . N🅪Sg/J . VP/J   NPr/VB/J NPr/VB P    D/P VB/J   NSg/VB+ .\n> engaged in        song  . She  had drunk     a   quantity of champagne  , and  during the course of\n# VP/J    NPr/J/R/P N🅪Sg+ . ISg+ VP  NSg/VPp/J D/P N🅪Sg     P  N🅪Sg/VB/J+ . VB/C VB/P   D   NSg/VB P\n> her     song  she  had decided  , ineptly , that         everything was  very , very sad      — she  was\n# ISg/D$+ N🅪Sg+ ISg+ VP  NSg/VP/J . R       . NSg/I/C/Ddem NSg/I/VB+  VLPt J/R  . J/R  NSg/VB/J . ISg+ VLPt\n> not     only  singing , she  was  weeping  too . Whenever there was  a   pause  in        the song\n# NSg/R/C J/R/C Nᴹ/Vg/J . ISg+ VLPt Nᴹ/Vg/J+ R   . C        R+    VLPt D/P NSg/VB NPr/J/R/P D+  N🅪Sg+\n> she  filled it       with gasping , broken sobs   , and  then      took up         the lyric again in        a\n# ISg+ VP/J   NPr/ISg+ P    Nᴹ/Vg/J . VPp/J  NPl/V3 . VB/C NSg/J/R/C VPt  NSg/VB/J/P D   NSg/J P     NPr/J/R/P D/P\n> quavering soprano . The tears   coursed down        her     cheeks  — not     freely , however , for\n# Nᴹ/Vg/J   NSg/VB+ . D+  NPl/V3+ VP/J    N🅪Sg/VB/J/P ISg/D$+ NPl/V3+ . NSg/R/C R      . C       . R/C/P\n> when    they came      into contact  with her     heavily beaded eyelashes they assumed an\n# NSg/I/C IPl+ NSg/VPt/P P    N🅪Sg/VB+ P    ISg/D$+ R       VP/J   NPl       IPl+ VP/J    D/P\n> inky color         , and  pursued the rest   of their way    in        slow     black     rivulets . A   humorous\n# J    N🅪Sg/VB/J/Am+ . VB/C VP/J    D   NSg/VB P  D$+   NSg/J+ NPr/J/R/P NSg/VB/J N🅪Sg/VB/J NPl      . D/P J\n> suggestion was  made that         she  sing     the notes   on  her     face    , whereupon she  threw up\n# N🅪Sg+      VLPt VP   NSg/I/C/Ddem ISg+ NSg/VB/J D   NPl/V3+ J/P ISg/D$+ NSg/VB+ . C         ISg+ VPt   NSg/VB/J/P\n> her     hands   , sank into a   chair   , and  went    off        into a   deep  vinous sleep    .\n# ISg/D$+ NPl/V3+ . VPt  P    D/P NSg/VB+ . VB/C NSg/VPt NSg/VB/J/P P    D/P NSg/J J      N🅪Sg/VB+ .\n>\n#\n> “ She  had a   fight  with a    man       who    says   he’s her     husband , ” explained a   girl    at    my\n# . ISg+ VP  D/P NSg/VB P    D/P+ NPr/VB/J+ NPr/I+ NPl/V3 NPr$ ISg/D$+ NSg/VB+ . . VP/J      D/P NSg/VB+ NSg/P D$+\n> elbow   .\n# NSg/VB+ .\n>\n#\n> I       looked around . Most         of the remaining women were     now       having  fights  with men\n# ISg/#r+ VP/J   J/P    . NSg/I/J/R/Dq P  D+  Nᴹ/Vg/J   NPl+  NSg/VLPt NSg/J/R/C Nᴹ/Vg/J NPl/V3+ P    NPl+\n> said to be       their husbands . Even       Jordan’s party     , the quartet from East   Egg      , were\n# VP/J P  NSg/VLXB D$+   NPl/V3+  . NSg/VB/J/R NPr$     NSg/VB/J+ . D   NSg+    P    NPr/J+ N🅪Sg/VB+ . NSg/VLPt\n> rent     asunder by    dissension . One     of the men  was  talking with curious intensity to\n# Nᴹ/VB/J+ R       NSg/P NSg        . NSg/I/J P  D+  NPl+ VLPt Nᴹ/Vg/J P    J       Nᴹ+       P\n> a    young     actress , and  his     wife      , after attempting to laugh  at    the situation in        a\n# D/P+ NPr/VB/J+ NSg+    . VB/C ISg/D$+ NSg/VB/J+ . P     Nᴹ/Vg/J    P  NSg/VB NSg/P D+  NSg+      NPr/J/R/P D/P\n> dignified and  indifferent way    , broke     down        entirely and  resorted to flank\n# VP/J      VB/C NSg/J+      NSg/J+ . NSg/VPt/J N🅪Sg/VB/J/P R        VB/C VP/J     P  NSg/VB/J\n> attacks — at    intervals she  appeared suddenly at    his     side      like         an  angry diamond   ,\n# NPl/V3+ . NSg/P NPl+      ISg+ VP/J     R        NSg/P ISg/D$+ NSg/VB/J+ NSg/VB/J/C/P D/P VB/J  N🅪Sg/VB/J .\n> and  hissed : “ You    promised ! ” into his     ear       .\n# VB/C VP/J   . . ISgPl+ VP/J     . . P    ISg/D$+ NSg/VB/J+ .\n>\n#\n> The reluctance to go       home      was  not     confined to wayward men  . The hall was  at\n# D   NSg+       P  NSg/VB/J NSg/VB/J+ VLPt NSg/R/C VP/J     P  J       NPl+ . D+  NPr+ VLPt NSg/P\n> present  occupied by    two deplorably sober men  and  their highly indignant wives .\n# NSg/VB/J VP/J     NSg/P NSg R          VB/J  NPl+ VB/C D$+   R      J         V3+   .\n> The wives were     sympathizing with each other    in        slightly raised voices  .\n# D+  V3+   NSg/VLPt Nᴹ/Vg/J      P    Dq   NSg/VB/J NPr/J/R/P R        VP/J   NPl/V3+ .\n>\n#\n> “ Whenever he       sees   I’m having  a    good     time       he       wants  to go       home      . ”\n# . C        NPr/ISg+ NPl/V3 K   Nᴹ/Vg/J D/P+ NPr/VB/J N🅪Sg/VB/J+ NPr/ISg+ NPl/V3 P  NSg/VB/J NSg/VB/J+ . .\n>\n#\n> “ Never heard anything  so          selfish in        my  life     . ”\n# . R     VP/J  NSg/I/VB+ NSg/I/J/R/C J       NPr/J/R/P D$+ N🅪Sg/VB+ . .\n>\n#\n> “ We're always the first ones to leave  . ”\n# . K     R      D   NSg/J NPl+ P  NSg/VB . .\n>\n#\n> “ So          are we   . ”\n# . NSg/I/J/R/C VLB IPl+ . .\n>\n#\n> “ Well       , we’re almost the last      to - night    , ” said one     of the men  sheepishly . “ The\n# . NSg/VB/J/R . K     R      D   NSg/VB/J+ P  . N🅪Sg/VB+ . . VP/J NSg/I/J P  D   NPl+ R          . . D+\n> orchestra left     half      an   hour ago . ”\n# NSg+      NPr/VP/J N🅪Sg/J/P+ D/P+ NSg+ J/P . .\n>\n#\n> In        spite    of the wives ’ agreement that         such  malevolence was  beyond credibility ,\n# NPr/J/R/P NSg/VB/P P  D+  V3+   . N🅪Sg+     NSg/I/C/Ddem NSg/I NSg         VLPt NSg/P  Nᴹ+         .\n> the dispute ended in        a   short      struggle , and  both   wives were     lifted , kicking , into\n# D   NSg/VB+ VP/J  NPr/J/R/P D/P NPr/VB/J/P NSg/VB+  . VB/C I/C/Dq V3+   NSg/VLPt VP/J   . Nᴹ/Vg/J . P\n> the night    .\n# D   N🅪Sg/VB+ .\n>\n#\n> As    I       waited for   my  hat     in        the hall the door   of the library opened and  Jordan\n# R/C/P ISg/#r+ VP/J   R/C/P D$+ NSg/VB+ NPr/J/R/P D+  NPr+ D   NSg/VB P  D+  NSg+    VP/J   VB/C NPr+\n> Baker and  Gatsby came      out          together . He       was  saying    some     last      word    to her     , but     the\n# NPr+  VB/C NPr    NSg/VPt/P NSg/VB/J/R/P J        . NPr/ISg+ VLPt N🅪Sg/Vg/J I/J/R/Dq NSg/VB/J+ NSg/VB+ P  ISg/D$+ . NSg/C/P D\n> eagerness in        his     manner tightened abruptly into formality as    several people\n# NSg       NPr/J/R/P ISg/D$+ NSg+   VP/J      R        P    NSg+      R/C/P J/Dq    NPl/VB+\n> approached him  to say    good     - by    .\n# VP/J       ISg+ P  NSg/VB NPr/VB/J . NSg/P .\n>\n#\n> Jordan’s party     were     calling impatiently to her     from the porch , but     she  lingered\n# NPr$     NSg/VB/J+ NSg/VLPt Nᴹ/Vg/J R           P  ISg/D$+ P    D   NSg+  . NSg/C/P ISg+ VP/J\n> for   a   moment to shake  hands   .\n# R/C/P D/P NSg+   P  NSg/VB NPl/V3+ .\n>\n#\n> “ I’ve just heard the most         amazing thing , ” she  whispered . “ How   long     were     we   in\n# . K    J/R  VP/J  D   NSg/I/J/R/Dq Nᴹ/Vg/J NSg+  . . ISg+ VP/J      . . NSg/C NPr/VB/J NSg/VLPt IPl+ NPr/J/R/P\n> there ? ”\n# R     . .\n>\n#\n> “ Why    , about an   hour . ”\n# . NSg/VB . J/P   D/P+ NSg+ . .\n>\n#\n> “ It       was  . . . simply amazing , ” she  repeated abstractedly . “ But     I       swore I\n# . NPr/ISg+ VLPt . . . R      Nᴹ/Vg/J . . ISg+ VP/J     R            . . NSg/C/P ISg/#r+ VB    ISg/#r+\n> wouldn’t tell   it       and  here I       am        tantalizing you    . ” She  yawned gracefully in        my\n# VXB      NPr/VB NPr/ISg+ VB/C J/R  ISg/#r+ NPr/VLB/J Nᴹ/Vg/J     ISgPl+ . . ISg+ VP/J   R          NPr/J/R/P D$+\n> face    . “ Please come       and  see    me       . . . . Phone   book    . . . . Under   the name   of Mrs  .\n# NSg/VB+ . . VB     NSg/VBPp/P VB/C NSg/VB NPr/ISg+ . . . . NSg/VB+ NSg/VB+ . . . . NSg/J/P D   NSg/VB P  NPl+ .\n> Sigourney Howard . . . . My  aunt . . . . ” She  was  hurrying off        as    she  talked — her\n# ?         NPr+   . . . . D$+ NSg+ . . . . . ISg+ VLPt Nᴹ/Vg/J  NSg/VB/J/P R/C/P ISg+ VP/J   . ISg/D$+\n> brown        hand    waved a    jaunty salute  as    she  melted into her     party     at    the door    .\n# NPr🅪Sg/VB/J+ NSg/VB+ VP/J  D/P+ NSg/J+ NSg/VB+ R/C/P ISg+ VP/J   P    ISg/D$+ NSg/VB/J+ NSg/P D+  NSg/VB+ .\n>\n#\n> Rather     ashamed that          on  my  first  appearance I       had stayed so          late  , I       joined the\n# NPr/VB/J/R J       NSg/I/C/Ddem+ J/P D$+ NSg/J+ NSg+       ISg/#r+ VP  VP/J   NSg/I/J/R/C NSg/J . ISg/#r+ VP/J   D\n> last     of Gatsby’s guests  , who    were     clustered around him  . I       wanted to explain that\n# NSg/VB/J P  NPr$     NPl/V3+ . NPr/I+ NSg/VLPt VP/J      J/P    ISg+ . ISg/#r+ VP/J   P  VB      NSg/I/C/Ddem\n> I’d hunted for   him  early   in        the evening    and  to apologize for   not     having  known\n# K   VP/J   R/C/P ISg+ NSg/J/R NPr/J/R/P D   N🅪Sg/Vg/J+ VB/C P  VB        R/C/P NSg/R/C Nᴹ/Vg/J VPp/J\n> him  in        the garden    .\n# ISg+ NPr/J/R/P D   NSg/VB/J+ .\n>\n#\n> “ Don’t mention it       , ” he       enjoined me       eagerly . “ Don’t give   it       another thought  , old\n# . VXB   NSg/VB  NPr/ISg+ . . NPr/ISg+ VP/J     NPr/ISg+ R       . . VXB   NSg/VB NPr/ISg+ I/D     N🅪Sg/VP+ . NSg/J\n> sport   . ” The familiar expression held no       more         familiarity than the hand    which\n# NSg/VB+ . . D+  NSg/J+   N🅪Sg+      VP   NSg/Dq/P NPr/I/J/R/Dq NSg+        C/P  D+  NSg/VB+ I/C+\n> reassuringly brushed my  shoulder . “ And  don’t forget we’re going   up         in        the\n# R            VP/J    D$+ NSg/VB+  . . VB/C VXB   VB     K     Nᴹ/Vg/J NSg/VB/J/P NPr/J/R/P D\n> hydroplane to - morrow morning    , at    nine o’clock . ”\n# NSg/VB     P  . NPr/VB N🅪Sg/Vg/J+ . NSg/P NSg  R       . .\n>\n#\n> Then      the butler , behind  his     shoulder :\n# NSg/J/R/C D   NPr/VB . NSg/J/P ISg/D$+ NSg/VB+  .\n>\n#\n> “ Philadelphia wants  you    on  the ’ phone  , sir     . ”\n# . NPr+         NPl/V3 ISgPl+ J/P D   . NSg/VB . NPr/VB+ . .\n>\n#\n> “ All          right    , in        a    minute    . Tell   them     I’ll be       right    there . . . . Good      night    . ”\n# . NSg/I/J/C/Dq NPr/VB/J . NPr/J/R/P D/P+ NSg/VB/J+ . NPr/VB NSg/IPl+ K    NSg/VLXB NPr/VB/J R     . . . . NPr/VB/J+ N🅪Sg/VB+ . .\n>\n#\n> “ Good      night    . ”\n# . NPr/VB/J+ N🅪Sg/VB+ . .\n>\n#\n> “ Good      night    . ” He       smiled — and  suddenly there seemed to be       a    pleasant significance\n# . NPr/VB/J+ N🅪Sg/VB+ . . NPr/ISg+ VP/J   . VB/C R        R+    VP/J   P  NSg/VLXB D/P+ NSg/J+   NSg+\n> in        having  been     among the last      to go       , as    if    he       had desired it       all           the time       . “ Good\n# NPr/J/R/P Nᴹ/Vg/J NSg/VLPp P     D+  NSg/VB/J+ P  NSg/VB/J . R/C/P NSg/C NPr/ISg+ VP  VP/J    NPr/ISg+ NSg/I/J/C/Dq+ D+  N🅪Sg/VB/J+ . . NPr/VB/J\n> night    , old    sport   . . . . Good      night    . ”\n# N🅪Sg/VB+ . NSg/J+ NSg/VB+ . . . . NPr/VB/J+ N🅪Sg/VB+ . .\n>\n#\n> But     as    I       walked down        the steps   I       saw     that         the evening    was  not     quite over    . Fifty\n# NSg/C/P R/C/P ISg/#r+ VP/J   N🅪Sg/VB/J/P D+  NPl/V3+ ISg/#r+ NSg/VPt NSg/I/C/Ddem D+  N🅪Sg/Vg/J+ VLPt NSg/R/C R     NSg/J/P . NSg\n> feet from the door    a   dozen headlights illuminated a   bizarre and  tumultuous\n# NPl  P    D+  NSg/VB+ D/P NSg   NPl        VP/J        D/P J       VB/C J\n> scene   . In        the ditch   beside the road    , right     side      up         , but     violently shorn of one\n# NSg/VB+ . NPr/J/R/P D+  NSg/VB+ P      D+  N🅪Sg/J+ . NPr/VB/J+ NSg/VB/J+ NSg/VB/J/P . NSg/C/P R         ?     P  NSg/I/J+\n> wheel   , rested a   new   coupé which had left     Gatsby’s drive   not     two minutes before .\n# NSg/VB+ . VP/J   D/P NSg/J ?     I/C+  VP  NPr/VP/J NPr$     N🅪Sg/VB NSg/R/C NSg NPl/V3+ C/P    .\n> The sharp    jut    of a   wall    accounted for   the detachment of the wheel   , which was  now\n# D   NPr/VB/J NSg/VB P  D/P NPr/VB+ VP/J      R/C/P D   N🅪Sg       P  D   NSg/VB+ . I/C+  VLPt NSg/J/R/C\n> getting considerable attention from half      a   dozen curious chauffeurs . However , as\n# NSg/Vg  NSg/J        NSg+      P    N🅪Sg/J/P+ D/P NSg   J       NPl/V3     . C       . R/C/P\n> they had left     their cars blocking the road    , a   harsh , discordant din     from those\n# IPl+ VP  NPr/VP/J D$+   NPl+ Nᴹ/Vg/J  D+  N🅪Sg/J+ . D/P VB/J  . J          NSg/VB+ P    I/Ddem\n> in        the rear     had been     audible  for   some     time       , and  added to the already violent\n# NPr/J/R/P D   NSg/VB/J VP  NSg/VLPp NSg/VB/J R/C/P I/J/R/Dq N🅪Sg/VB/J+ . VB/C VP/J  P  D   R       NSg/VB/J\n> confusion of the scene   .\n# N🅪Sg/VB   P  D   NSg/VB+ .\n>\n#\n> A   man       in        a    long      duster had dismounted from the wreck   and  now       stood in        the middle\n# D/P NPr/VB/J+ NPr/J/R/P D/P+ NPr/VB/J+ NSg+   VP  VP/J       P    D   NSg/VB+ VB/C NSg/J/R/C VP    NPr/J/R/P D   NSg/VB/J\n> of the road    , looking from the car  to the tire    and  from the tire    to the observers\n# P  D   N🅪Sg/J+ . Nᴹ/Vg/J P    D   NSg+ P  D   NSg/VB+ VB/C P    D   NSg/VB+ P  D   NPl+\n> in        a   pleasant , puzzled way    .\n# NPr/J/R/P D/P NSg/J    . VP/J    NSg/J+ .\n>\n#\n> “ See    ! ” he       explained . “ It       went    in        the ditch   . ”\n# . NSg/VB . . NPr/ISg+ VP/J      . . NPr/ISg+ NSg/VPt NPr/J/R/P D+  NSg/VB+ . .\n>\n#\n> The fact was  infinitely astonishing to him  , and  I       recognized first the unusual\n# D+  NSg+ VLPt R          Nᴹ/Vg/J     P  ISg+ . VB/C ISg/#r+ VP/J       NSg/J D   NSg/J\n> quality of wonder   , and  then      the man       — it       was  the late  patron of Gatsby’s library .\n# N🅪Sg/J  P  N🅪Sg/VB+ . VB/C NSg/J/R/C D   NPr/VB/J+ . NPr/ISg+ VLPt D   NSg/J NSg/VB P  NPr$     NSg+    .\n>\n#\n> “ How’d it       happen ? ”\n# . K     NPr/ISg+ VB     . .\n>\n#\n> He       shrugged his     shoulders .\n# NPr/ISg+ VP       ISg/D$+ NPl/V3+   .\n>\n#\n> “ I       know nothing  whatever about mechanics , ” he       said decisively .\n# . ISg/#r+ VB   NSg/I/J+ NSg/I/J+ J/P   Nᴹ+       . . NPr/ISg+ VP/J R          .\n>\n#\n> “ But     how   did  it       happen ? Did  you    run      into the wall    ? ”\n# . NSg/C/P NSg/C VXPt NPr/ISg+ VB     . VXPt ISgPl+ NSg/VBPp P    D+  NPr/VB+ . .\n>\n#\n> “ Don’t ask    me       , ” said Owl     Eyes    , washing his     hands  of the whole matter   . “ I       know\n# . VXB   NSg/VB NPr/ISg+ . . VP/J NSg/VB+ NPl/V3+ . Nᴹ/Vg/J ISg/D$+ NPl/V3 P  D   NSg/J N🅪Sg/VB+ . . ISg/#r+ VB\n> very little     about driving — next    to nothing  . It       happened , and  that’s all          I       know . ”\n# J/R  NPr/I/J/Dq J/P   Nᴹ/Vg/J . NSg/J/P P  NSg/I/J+ . NPr/ISg+ VP/J     . VB/C NSg$   NSg/I/J/C/Dq ISg/#r+ VB   . .\n>\n#\n> “ Well       , if    you’re a    poor     driver you    oughtn’t to try      driving at    night    . ”\n# . NSg/VB/J/R . NSg/C K      D/P+ NSg/VB/J NSg+   ISgPl+ VXB      P  NSg/VB/J Nᴹ/Vg/J NSg/P N🅪Sg/VB+ . .\n>\n#\n> “ But     I       wasn’t even       trying  , ” he       explained indignantly , “ I       wasn’t even       trying  . ”\n# . NSg/C/P ISg/#r+ VPt    NSg/VB/J/R Nᴹ/Vg/J . . NPr/ISg+ VP/J      R           . . ISg/#r+ VPt    NSg/VB/J/R Nᴹ/Vg/J . .\n>\n#\n> An  awed hush    fell      upon the bystanders .\n# D/P VP/J NSg/VB+ NSg/VPt/J P    D   NPl        .\n>\n#\n> “ Do  you    want   to commit suicide  ? ”\n# . VXB ISgPl+ NSg/VB P  NSg/VB N🅪Sg/VB+ . .\n>\n#\n> “ You're lucky it       was  just a   wheel   ! A    bad       driver and  not     even       trying  ! ”\n# . +      NSg/J NPr/ISg+ VLPt J/R  D/P NSg/VB+ . D/P+ NSg/VB/J+ NSg+   VB/C NSg/R/C NSg/VB/J/R Nᴹ/Vg/J . .\n>\n#\n> “ You    don’t understand , ” explained the criminal . “ I       wasn’t driving . There’s\n# . ISgPl+ VXB   VB         . . VP/J      D   NSg/J    . . ISg/#r+ VPt    Nᴹ/Vg/J . K\n> another man       in        the car  . ”\n# I/D     NPr/VB/J+ NPr/J/R/P D   NSg+ . .\n>\n#\n> The shock   that          followed this    declaration found  voice   in        a   sustained “ Ah       - h     - h      ! ” as\n# D+  N🅪Sg/J+ NSg/I/C/Ddem+ VP/J     I/Ddem+ NSg+        NSg/VP NSg/VB+ NPr/J/R/P D/P VP/J      . NSg/I/VB . NSg/J . NSg/J+ . . R/C/P\n> the door   of the coupé swung slowly open     . The crowd   — it       was  now       a   crowd   — stepped\n# D   NSg/VB P  D   ?     VPp   R      NSg/VB/J . D+  NSg/VB+ . NPr/ISg+ VLPt NSg/J/R/C D/P NSg/VB+ . J\n> back     involuntarily , and  when    the door    had opened wide  there was  a   ghostly pause   .\n# NSg/VB/J R             . VB/C NSg/I/C D   NSg/VB+ VP  VP/J   NSg/J R+    VLPt D/P J/R     NSg/VB+ .\n> Then      , very gradually , part      by    part      , a   pale     , dangling individual stepped out          of\n# NSg/J/R/C . J/R  R         . NSg/VB/J+ NSg/P NSg/VB/J+ . D/P NSg/VB/J . Nᴹ/Vg/J  NSg/J      J       NSg/VB/J/R/P P\n> the wreck   , pawing  tentatively at    the ground     with a   large uncertain dancing shoe    .\n# D+  NSg/VB+ . Nᴹ/Vg/J R           NSg/P D+  N🅪Sg/VB/J+ P    D/P NSg/J I/J       Nᴹ/Vg/J NSg/VB+ .\n>\n#\n> Blinded by    the glare    of the headlights and  confused by    the incessant groaning of\n# VP/J    NSg/P D   NSg/VB/J P  D   NPl        VB/C VP/J     NSg/P D   J         Nᴹ/Vg/J  P\n> the horns  , the apparition stood swaying for   a   moment before he       perceived the man\n# D   NPl/V3 . D   NSg+       VP    Nᴹ/Vg/J R/C/P D/P NSg+   C/P    NPr/ISg+ VP/J      D   NPr/VB/J+\n> in        the duster .\n# NPr/J/R/P D   NSg+   .\n>\n#\n> “ Wha’s matter   ? ” he       inquired calmly . “ Did  we   run      outa gas       ? ”\n# . ?     N🅪Sg/VB+ . . NPr/ISg+ VP/J     R      . . VXPt IPl+ NSg/VBPp ?    NSg/VB/J+ . .\n>\n#\n> “ Look   ! ”\n# . NSg/VB . .\n>\n#\n> Half      a    dozen fingers pointed at    the amputated wheel   — he       stared at    it       for   a\n# N🅪Sg/J/P+ D/P+ NSg   NPl/V3+ VP/J    NSg/P D+  VP/J+     NSg/VB+ . NPr/ISg+ VP/J   NSg/P NPr/ISg+ R/C/P D/P+\n> moment , and  then      looked upward as    though he       suspected that         it       had dropped from\n# NSg+   . VB/C NSg/J/R/C VP/J   NSg/J  R/C/P C      NPr/ISg+ VP/J      NSg/I/C/Ddem NPr/ISg+ VP  VP/J    P\n> the sky      .\n# D+  N🅪Sg/VB+ .\n>\n#\n> “ It       came      off        , ” some      one      explained .\n# . NPr/ISg+ NSg/VPt/P NSg/VB/J/P . . I/J/R/Dq+ NSg/I/J+ VP/J      .\n>\n#\n> He       nodded .\n# NPr/ISg+ VP     .\n>\n#\n> “ At    first I       din     ’ notice we’d stopped . ”\n# . NSg/P NSg/J ISg/#r+ NSg/VB+ . NSg/VB K    VP/J    . .\n>\n#\n> A    pause   . Then      , taking   a    long      breath     and  straightening his     shoulders , he       remarked\n# D/P+ NSg/VB+ . NSg/J/R/C . NSg/Vg/J D/P+ NPr/VB/J+ N🅪Sg/VB/J+ VB/C Nᴹ/Vg/J       ISg/D$+ NPl/V3+   . NPr/ISg+ VP/J\n> in        a    determined voice   :\n# NPr/J/R/P D/P+ VP/J       NSg/VB+ .\n>\n#\n> “ Wonder’ff tell   me       where   there’s a   gas’line station ? ”\n# . ?         NPr/VB NPr/ISg+ NSg/R/C K       D/P ?        NSg/VB+ . .\n>\n#\n> At    least    a    dozen men  , some     of them     a   little     better     off        than he       was  , explained to\n# NSg/P NSg/J/Dq D/P+ NSg+  NPl+ . I/J/R/Dq P  NSg/IPl+ D/P NPr/I/J/Dq NSg/VXB/JC NSg/VB/J/P C/P  NPr/ISg+ VLPt . VP/J      P\n> him  that         wheel  and  car  were     no       longer joined by    any     physical bond      .\n# ISg+ NSg/I/C/Ddem NSg/VB VB/C NSg+ NSg/VLPt NSg/Dq/P NSg/JC VP/J   NSg/P I/R/Dq+ NSg/J+   NPr/VB/J+ .\n>\n#\n> “ Back     out          , ” he       suggested after a    moment . “ Put     her     in        reverse  . ”\n# . NSg/VB/J NSg/VB/J/R/P . . NPr/ISg+ VP/J      P     D/P+ NSg+   . . NSg/VBP ISg/D$+ NPr/J/R/P NSg/VB/J . .\n>\n#\n> “ But     the wheel’s off        ! ”\n# . NSg/C/P D   NSg$    NSg/VB/J/P . .\n>\n#\n> He       hesitated .\n# NPr/ISg+ VP/J      .\n>\n#\n> “ No        harm     in        trying  , ” he       said .\n# . NSg/Dq/P+ N🅪Sg/VB+ NPr/J/R/P Nᴹ/Vg/J . . NPr/ISg+ VP/J .\n>\n#\n> The caterwauling horns  had reached a   crescendo and  I       turned away and  cut       across\n# D   Nᴹ/Vg/J      NPl/V3 VP  VP/J    D/P NSg/VB    VB/C ISg/#r+ VP/J   VB/J VB/C NSg/VBP/J NSg/P\n> the lawn    toward home      . I       glanced back     once  . A   wafer  of a    moon    was  shining over\n# D   NSg/VB+ J/P    NSg/VB/J+ . ISg/#r+ VP/J    NSg/VB/J NSg/C . D/P NSg/VB P  D/P+ NPr/VB+ VLPt Nᴹ/Vg/J NSg/J/P\n> Gatsby’s house   , making  the night    fine     as    before , and  surviving the laughter and\n# NPr$     NPr/VB+ . Nᴹ/Vg/J D   N🅪Sg/VB+ NSg/VB/J R/C/P C/P    . VB/C Nᴹ/Vg/J   D   Nᴹ+      VB/C\n> the sound     of his     still      glowing garden    . A    sudden emptiness seemed to flow   now\n# D   N🅪Sg/VB/J P  ISg/D$+ NSg/VB/J/R Nᴹ/Vg/J NSg/VB/J+ . D/P+ NSg/J+ Nᴹ+       VP/J   P  NSg/VB NSg/J/R/C\n> from the windows  and  the great  doors   , endowing with complete isolation the\n# P    D   NPrPl/V3 VB/C D+  NSg/J+ NPl/V3+ . Nᴹ/Vg/J  P    NSg/VB/J Nᴹ+       D\n> figure of the host    , who    stood on  the porch , his     hand    up         in        a   formal gesture of\n# NSg/VB P  D   NSg/VB+ . NPr/I+ VP    J/P D   NSg+  . ISg/D$+ NSg/VB+ NSg/VB/J/P NPr/J/R/P D/P NSg/J  NSg/VB  P\n> farewell  .\n# NSg/VB/J+ .\n>\n#\n> Reading   over    what   I       have    written so          far      , I       see    I       have    given       the impression that\n# NPrᴹ/Vg/J NSg/J/P NSg/I+ ISg/#r+ NSg/VXB VPp/J   NSg/I/J/R/C NSg/VB/J . ISg/#r+ NSg/VB ISg/#r+ NSg/VXB NSg/VPp/J/P D+  NSg/VB+    NSg/I/C/Ddem\n> the events of three nights  several weeks  apart were     all          that          absorbed me       . On  the\n# D   NPl/V3 P  NSg+  NPl/V3+ J/Dq+   NPrPl+ J     NSg/VLPt NSg/I/J/C/Dq NSg/I/C/Ddem+ VP/J     NPr/ISg+ . J/P D+\n> contrary  , they were     merely casual events in        a    crowded summer     , and  , until much\n# NSg/VB/J+ . IPl+ NSg/VLPt R      NSg/J  NPl/V3 NPr/J/R/P D/P+ VP/J+   NPr🅪Sg/VB+ . VB/C . C/P   NSg/I/J/R/Dq\n> later , they absorbed me       infinitely less       than my  personal affairs .\n# JC    . IPl+ VP/J     NPr/ISg+ R          VB/J/R/C/P C/P  D$+ NSg/J    NPl+    .\n>\n#\n> Most         of the time       I       worked . In        the early    morning    the sun     threw my  shadow    westward\n# NSg/I/J/R/Dq P  D+  N🅪Sg/VB/J+ ISg/#r+ VP/J   . NPr/J/R/P D+  NSg/J/R+ N🅪Sg/Vg/J+ D+  NPr/VB+ VPt   D$+ NSg/VB/J+ NSg/J\n> as    I       hurried down        the white       chasms of lower     New   York to the Probity Trust     . I\n# R/C/P ISg/#r+ VP/J    N🅪Sg/VB/J/P D   NPr🅪Sg/VB/J NPl    P  NSg/VB/JC NSg/J NPr+ P  D   Nᴹ      N🅪Sg/VB/J . ISg/#r+\n> knew the other    clerks and  young     bond      - salesmen by    their first names   , and  lunched\n# VPt  D   NSg/VB/J NPl/V3 VB/C NPr/VB/J+ NPr/VB/J+ . NPl      NSg/P D$+   NSg/J NPl/V3+ . VB/C VP/J\n> with them     in        dark     , crowded restaurants on  little     pig     sausages and  mashed\n# P    NSg/IPl+ NPr/J/R/P NSg/VB/J . VP/J    NPl+        J/P NPr/I/J/Dq NSg/VB+ NPl/V3+  VB/C VP/J\n> potatoes and  coffee     . I       even       had a   short      affair with a    girl    who    lived in        Jersey\n# NPl      VB/C N🅪Sg/VB/J+ . ISg/#r+ NSg/VB/J/R VP  D/P NPr/VB/J/P NSg    P    D/P+ NSg/VB+ NPr/I+ VP/J  NPr/J/R/P NPr+\n> City and  worked in        the accounting department , but     her     brother   began throwing\n# NSg+ VB/C VP/J   NPr/J/R/P D+  Nᴹ/Vg/J+   NSg+       . NSg/C/P ISg/D$+ NSg/VB/J+ VPt   Nᴹ/Vg/J\n> mean     looks  in        my  direction , so          when    she  went    on  her     vacation in        July I       let     it\n# NSg/VB/J NPl/V3 NPr/J/R/P D$+ N🅪Sg+     . NSg/I/J/R/C NSg/I/C ISg+ NSg/VPt J/P ISg/D$+ NSg/VB+  NPr/J/R/P NPr+ ISg/#r+ NSg/VBP NPr/ISg+\n> blow     quietly away .\n# NSg/VB/J R       VB/J .\n>\n#\n> I       took dinner   usually at    the Yale Club    — for   some      reason   it       was  the gloomiest\n# ISg/#r+ VPt  N🅪Sg/VB+ R       NSg/P D+  NPr+ NSg/VB+ . R/C/P I/J/R/Dq+ N🅪Sg/VB+ NPr/ISg+ VLPt D   JS\n> event  of my  day     — and  then      I       went    up         - stairs to the library and  studied investments\n# NSg/VB P  D$+ NPr🅪Sg+ . VB/C NSg/J/R/C ISg/#r+ NSg/VPt NSg/VB/J/P . NPl+   P  D   NSg+    VB/C VP/J    NPl+\n> and  securities for   a   conscientious hour . There were     generally a   few      rioters\n# VB/C NPl+       R/C/P D/P J             NSg+ . R+    NSg/VLPt R         D/P NSg/I/Dq NPl\n> around , but     they never came      into the library , so          it       was  a   good     place    to work    .\n# J/P    . NSg/C/P IPl+ R     NSg/VPt/P P    D   NSg+    . NSg/I/J/R/C NPr/ISg+ VLPt D/P NPr/VB/J N🅪Sg/VB+ P  N🅪Sg/VB .\n> After that          , if    the night    was  mellow   , I       strolled down        Madison Avenue past       the old\n# P     NSg/I/C/Ddem+ . NSg/C D+  N🅪Sg/VB+ VLPt NSg/VB/J . ISg/#r+ VP/J     N🅪Sg/VB/J/P NPr+    NSg+   NSg/VB/J/P D+  NSg/J+\n> Murray Hill    Hotel , and  over    33 d         Street    to the Pennsylvania Station .\n# NPr+   NPr/VB+ NSg+  . VB/C NSg/J/P #  NPr/J/#r+ NSg/VB/J+ P  D+  NPr+         NSg/VB+ .\n>\n#\n> I       began to like         New    York , the racy , adventurous feel     of it       at    night    , and  the\n# ISg/#r+ VPt   P  NSg/VB/J/C/P NSg/J+ NPr+ . D   J    . J           NSg/I/VB P  NPr/ISg+ NSg/P N🅪Sg/VB+ . VB/C D\n> satisfaction that         the constant flicker of men and  women and  machines gives  to\n# Nᴹ+          NSg/I/C/Ddem D   NSg/J    NSg/VB  P  NPl VB/C NPl+  VB/C NPl/V3+  NPl/V3 P\n> the restless eye     . I       liked to walk   up         Fifth     Avenue and  pick   out          romantic women\n# D   J        NSg/VB+ . ISg/#r+ VP/J  P  NSg/VB NSg/VB/J/P NSg/VB/J+ NSg+   VB/C NSg/VB NSg/VB/J/R/P NSg/J    NPl+\n> from the crowd   and  imagine that         in        a    few       minutes I       was  going   to enter  into their\n# P    D+  NSg/VB+ VB/C NSg/VB  NSg/I/C/Ddem NPr/J/R/P D/P+ NSg/I/Dq+ NPl/V3+ ISg/#r+ VLPt Nᴹ/Vg/J P  NSg/VB P    D$+\n> lives , and  no        one      would ever know or    disapprove . Sometimes , in        my  mind    , I\n# V3+   . VB/C NSg/Dq/P+ NSg/I/J+ VXB   J/R  VB   NPr/C VB         . R         . NPr/J/R/P D$+ NSg/VB+ . ISg/#r+\n> followed them     to their apartments on  the corners of hidden streets , and  they\n# VP/J     NSg/IPl+ P  D$+   NPl+       J/P D   NPl/V3  P  VB/J   NPl/V3+ . VB/C IPl+\n> turned and  smiled back     at    me       before they faded through a    door    into warm\n# VP/J   VB/C VP/J   NSg/VB/J NSg/P NPr/ISg+ C/P    IPl+ J     NSg/J/P D/P+ NSg/VB+ P    NSg/VB/J+\n> darkness . At    the enchanted metropolitan twilight I       felt      a   haunting loneliness\n# Nᴹ+      . NSg/P D   VP/J      NSg/J+       Nᴹ/VB/J+ ISg/#r+ N🅪Sg/VP/J D/P Nᴹ/Vg/J  Nᴹ\n> sometimes , and  felt      it       in        others  — poor     young    clerks  who    loitered in        front    of\n# R         . VB/C N🅪Sg/VP/J NPr/ISg+ NPr/J/R/P NPl/V3+ . NSg/VB/J NPr/VB/J NPl/V3+ NPr/I+ VP/J     NPr/J/R/P NSg/VB/J P\n> windows   waiting until it       was  time      for   a   solitary restaurant dinner   — young    clerks\n# NPrPl/V3+ Nᴹ/Vg/J C/P   NPr/ISg+ VLPt N🅪Sg/VB/J R/C/P D/P NSg/J    NSg+       N🅪Sg/VB+ . NPr/VB/J NPl/V3+\n> in        the dusk     , wasting the most         poignant moments of night   and  life     .\n# NPr/J/R/P D   Nᴹ/VB/J+ . Nᴹ/Vg/J D   NSg/I/J/R/Dq J        NPl     P  N🅪Sg/VB VB/C N🅪Sg/VB+ .\n>\n#\n> Again at    eight o’clock , when    the dark     lanes of the Forties were     lined five deep\n# P     NSg/P NSg/J R       . NSg/I/C D   NSg/VB/J NPl   P  D+  NPl+    NSg/VLPt VP/J  NSg  NSg/J\n> with throbbing taxicabs , bound    for   the theatre    district  , I       felt      a   sinking  in        my\n# P    NSg/Vg/J  NPl/V3   . NSg/VP/J R/C/P D   N🅪Sg/Comm+ NSg/VB/J+ . ISg/#r+ N🅪Sg/VP/J D/P Nᴹ/Vg/J+ NPr/J/R/P D$+\n> heart    . Forms   leaned together in        the taxis   as    they waited , and  voices  sang    , and\n# N🅪Sg/VB+ . NPl/V3+ VP/J   J        NPr/J/R/P D+  NPl/V3+ R/C/P IPl+ VP/J   . VB/C NPl/V3+ NPr/VPt . VB/C\n> there was  laughter from unheard jokes   , and  lighted cigarettes made\n# R+    VLPt Nᴹ       P    VP/J+   NPl/V3+ . VB/C VP/J    NPl/V3+    VP\n> unintelligible circles inside  . Imagining that          I       , too , was  hurrying toward gayety\n# J              NPl/V3+ NSg/J/P . Nᴹ/Vg/J   NSg/I/C/Ddem+ ISg/#r+ . R   . VLPt Nᴹ/Vg/J  J/P    ?\n> and  sharing their intimate excitement , I       wished them     well       .\n# VB/C Nᴹ/Vg/J D$+   NSg/VB/J NSg+       . ISg/#r+ VP/J   NSg/IPl+ NSg/VB/J/R .\n>\n#\n> For   a    while       I       lost sight   of Jordan Baker , and  then      in        midsummer I       found  her\n# R/C/P D/P+ NSg/VB/C/P+ ISg/#r+ VP/J N🅪Sg/VB P  NPr+   NPr+  . VB/C NSg/J/R/C NPr/J/R/P NSg/J     ISg/#r+ NSg/VP ISg/D$+\n> again . At    first I       was  flattered to go       places  with her     , because she  was  a   golf\n# P     . NSg/P NSg/J ISg/#r+ VLPt VP/J      P  NSg/VB/J NPl/V3+ P    ISg/D$+ . C/P     ISg+ VLPt D/P NSg/VB\n> champion , and  every one      knew her     name    . Then      it       was  something more         . I       wasn’t\n# NSg/VB/J . VB/C Dq+   NSg/I/J+ VPt  ISg/D$+ NSg/VB+ . NSg/J/R/C NPr/ISg+ VLPt NSg/I/J+  NPr/I/J/R/Dq . ISg/#r+ VPt\n> actually in        love      , but     I       felt      a   sort   of tender   curiosity . The bored haughty face\n# R        NPr/J/R/P NPr🅪Sg/VB . NSg/C/P ISg/#r+ N🅪Sg/VP/J D/P NSg/VB P  NSg/VB/J NSg+      . D   VP/J  J       NSg/VB+\n> that          she  turned to the world   concealed something — most         affectations conceal\n# NSg/I/C/Ddem+ ISg+ VP/J   P  D   NSg/VB+ VP/J      NSg/I/J+  . NSg/I/J/R/Dq NPl          VB\n> something eventually , even       though they don’t in        the beginning — and  one     day     I\n# NSg/I/J+  R          . NSg/VB/J/R C      IPl+ VXB   NPr/J/R/P D   NSg/Vg/J+ . VB/C NSg/I/J NPr🅪Sg+ ISg/#r+\n> found  what   it       was  . When    we   were     on  a   house   - party    together up         in        Warwick , she\n# NSg/VP NSg/I+ NPr/ISg+ VLPt . NSg/I/C IPl+ NSg/VLPt J/P D/P NPr/VB+ . NSg/VB/J J        NSg/VB/J/P NPr/J/R/P NPr+    . ISg+\n> left     a   borrowed car  out          in        the rain    with the top       down        , and  then      lied     about\n# NPr/VP/J D/P VP/J     NSg+ NSg/VB/J/R/P NPr/J/R/P D   N🅪Sg/VB P    D+  NSg/VB/J+ N🅪Sg/VB/J/P . VB/C NSg/J/R/C NSg/VP/J J/P\n> it       — and  suddenly I       remembered the story   about her     that          had eluded me       that          night\n# NPr/ISg+ . VB/C R        ISg/#r+ VP/J       D+  NSg/VB+ J/P   ISg/D$+ NSg/I/C/Ddem+ VP  VP/J   NPr/ISg+ NSg/I/C/Ddem+ N🅪Sg/VB+\n> at    Daisy’s . At    her     first  big    golf    tournament there was  a    row     that          nearly reached\n# NSg/P NPr$    . NSg/P ISg/D$+ NSg/J+ NSg/J+ NSg/VB+ NSg+       R+    VLPt D/P+ NSg/VB+ NSg/I/C/Ddem+ R      VP/J\n> the newspapers — a    suggestion that          she  had moved her     ball    from a    bad       lie     in        the\n# D+  NPl/V3+    . D/P+ N🅪Sg+      NSg/I/C/Ddem+ ISg+ VP  VP/J  ISg/D$+ NPr/VB+ P    D/P+ NSg/VB/J+ NPr/VB+ NPr/J/R/P D\n> semi - final    round      . The thing approached the proportions of a   scandal  — then      died\n# NSg  . NSg/VB/J NSg/VB/J/P . D+  NSg+  VP/J       D   NPl/V3      P  D/P N🅪Sg/VB+ . NSg/J/R/C VP/J\n> away . A   caddy retracted his     statement , and  the only  other    witness admitted that\n# VB/J . D/P NSg   VP/J      ISg/D$+ NSg/VB/J+ . VB/C D   J/R/C NSg/VB/J NSg/VB+ VP/J     NSg/I/C/Ddem\n> he       might    have    been     mistaken . The incident and  the name    had remained together in\n# NPr/ISg+ Nᴹ/VXB/J NSg/VXB NSg/VLPp VPp/J    . D   NSg/J    VB/C D+  NSg/VB+ VP  VP/J     J        NPr/J/R/P\n> my  mind    .\n# D$+ NSg/VB+ .\n>\n#\n> Jordan Baker instinctively avoided clever , shrewd men  , and  now       I       saw     that         this\n# NPr+   NPr+  R             VP/J    J      . J+     NPl+ . VB/C NSg/J/R/C ISg/#r+ NSg/VPt NSg/I/C/Ddem I/Ddem+\n> was  because she  felt      safer  on  a   plane     where   any    divergence from a   code     would be\n# VLPt C/P     ISg+ N🅪Sg/VP/J NSg/JC J/P D/P NSg/VB/J+ NSg/R/C I/R/Dq N🅪Sg       P    D/P N🅪Sg/VB+ VXB   NSg/VLXB\n> thought impossible . She  was  incurably dishonest . She  wasn’t able     to endure being\n# N🅪Sg/VP NSg/J      . ISg+ VLPt R         VB/J      . ISg+ VPt    NSg/VB/J P  VB     N🅪Sg/VLg/J/C\n> at    a   disadvantage and  , given       this   unwillingness , I       suppose she  had begun dealing\n# NSg/P D/P N🅪Sg/VB      VB/C . NSg/VPp/J/P I/Ddem NSg+          . ISg/#r+ VB      ISg+ VP  VPp   Nᴹ/Vg/J\n> in        subterfuges when    she  was  very young    in        order    to keep   that         cool     , insolent\n# NPr/J/R/P NPl         NSg/I/C ISg+ VLPt J/R  NPr/VB/J NPr/J/R/P N🅪Sg/VB+ P  NSg/VB NSg/I/C/Ddem NSg/VB/J . NSg/J\n> smile   turned to the world   and  yet      satisfy the demands of her     hard     , jaunty body    .\n# NSg/VB+ VP/J   P  D   NSg/VB+ VB/C NSg/VB/C VB      D   NPl/V3  P  ISg/D$+ N🅪Sg/J/R . NSg/J  NSg/VB+ .\n>\n#\n> It       made no        difference to me       . Dishonesty in        a   woman   is  a   thing you    never blame\n# NPr/ISg+ VP   NSg/Dq/P+ N🅪Sg/VB+   P  NPr/ISg+ . Nᴹ         NPr/J/R/P D/P NSg/VB+ VL3 D/P NSg+  ISgPl+ R     NSg/VB/J\n> deeply — I       was  casually sorry    , and  then      I       forgot . It       was  on  that          same house   party\n# R      . ISg/#r+ VLPt R        NSg/VB/J . VB/C NSg/J/R/C ISg/#r+ VPt    . NPr/ISg+ VLPt J/P NSg/I/C/Ddem+ I/J+ NPr/VB+ NSg/VB/J+\n> that          we   had a   curious conversation about driving a    car  . It       started because she\n# NSg/I/C/Ddem+ IPl+ VP  D/P J       N🅪Sg/VB+     J/P   Nᴹ/Vg/J D/P+ NSg+ . NPr/ISg+ VP/J    C/P     ISg+\n> passed so          close    to some      workmen that          our fender flicked a   button  on  one     man’s\n# VP/J   NSg/I/J/R/C NSg/VB/J P  I/J/R/Dq+ NPl+    NSg/I/C/Ddem+ D$+ NSg/VB VP/J    D/P NSg/VB+ J/P NSg/I/J NPr$/I/VB/J\n> coat    .\n# NSg/VB+ .\n>\n#\n> “ You’re a    rotten driver , ” I       protested . “ Either you    ought     to be       more         careful , or\n# . K      D/P+ J      NSg+   . . ISg/#r+ VP/J      . . I/C    ISgPl+ NSg/I/VXB P  NSg/VLXB NPr/I/J/R/Dq J       . NPr/C\n> you    oughtn’t to drive   at    all          . ”\n# ISgPl+ VXB      P  N🅪Sg/VB NSg/P NSg/I/J/C/Dq . .\n>\n#\n> “ I       am        careful . ”\n# . ISg/#r+ NPr/VLB/J J       . .\n>\n#\n> “ No       , you’re not     . ”\n# . NSg/Dq/P . K      NSg/R/C . .\n>\n#\n> “ Well       , other     people  are , ” she  said lightly .\n# . NSg/VB/J/R . NSg/VB/J+ NPl/VB+ VLB . . ISg+ VP/J R       .\n>\n#\n> “ What’s that          got to do  with it       ? ”\n# . K      NSg/I/C/Ddem+ VP  P  VXB P    NPr/ISg+ . .\n>\n#\n> “ They’ll keep   out          of my  way    , ” she  insisted . “ It       takes  two to make   an   accident . ”\n# . K       NSg/VB NSg/VB/J/R/P P  D$+ NSg/J+ . . ISg+ VP/J     . . NPr/ISg+ NPl/V3 NSg P  NSg/VB D/P+ NSg/J+   . .\n>\n#\n> “ Suppose you    met somebody just as    careless as    yourself . ”\n# . VB      ISgPl+ VP  NSg/I+   J/R  R/C/P J        R/C/P ISg+     . .\n>\n#\n> “ I       hope      I       never will    , ” she  answered . “ I       hate    careless people  . That’s why    I       like\n# . ISg/#r+ NPr🅪Sg/VB ISg/#r+ R     NPr/VXB . . ISg+ VP/J     . . ISg/#r+ N🅪Sg/VB J        NPl/VB+ . NSg$   NSg/VB ISg/#r+ NSg/VB/J/C/P\n> you    . ”\n# ISgPl+ . .\n>\n#\n> Her     gray           , sun     - strained eyes    stared straight   ahead , but     she  had deliberately\n# ISg/D$+ NPr🅪Sg/VB/J/Am . NPr/VB+ . VP/J     NPl/V3+ VP/J   NSg/VB/J/R R     . NSg/C/P ISg+ VP  R\n> shifted our relations , and  for   a   moment I       thought I       loved her     . But     I       am\n# VP/J    D$+ +         . VB/C R/C/P D/P NSg+   ISg/#r+ N🅪Sg/VP ISg/#r+ VP/J  ISg/D$+ . NSg/C/P ISg/#r+ NPr/VLB/J\n> slow     - thinking and  full     of interior rules   that          act    as    brakes  on  my  desires , and  I\n# NSg/VB/J . Nᴹ/Vg/J  VB/C NSg/VB/J P  NSg/J+   NPl/V3+ NSg/I/C/Ddem+ NPr/VB R/C/P NPl/V3+ J/P D$+ NPl/V3  . VB/C ISg/#r+\n> knew that         first I       had to get    myself definitely out          of that          tangle back     home      . I'd\n# VPt  NSg/I/C/Ddem NSg/J ISg/#r+ VP  P  NSg/VB ISg+   R          NSg/VB/J/R/P P  NSg/I/C/Ddem+ NSg/VB NSg/VB/J NSg/VB/J+ . +\n> been     writing letters once  a    week   and  signing them     : “ Love      , Nick    , ” and  all          I       could\n# NSg/VLPp Nᴹ/Vg/J NPl/V3+ NSg/C D/P+ NSg/J+ VB/C Nᴹ/Vg/J NSg/IPl+ . . NPr🅪Sg/VB . NPr/VB+ . . VB/C NSg/I/J/C/Dq ISg/#r+ NSg/VXB\n> think  of was  how   , when    that          certain girl    played tennis  , a   faint    mustache of\n# NSg/VB P  VLPt NSg/C . NSg/I/C NSg/I/C/Ddem+ I/J+    NSg/VB+ VP/J   NSg/VB+ . D/P NSg/VB/J NSg      P\n> perspiration appeared on  her     upper  lip     . Nevertheless there was  a    vague\n# Nᴹ+          VP/J     J/P ISg/D$+ NSg/J+ NSg/VB+ . R            R+    VLPt D/P+ NSg/VB/J+\n> understanding that          had to be       tactfully broken off        before I       was  free     .\n# N🅪Sg/Vg/J+    NSg/I/C/Ddem+ VP  P  NSg/VLXB R         VPp/J  NSg/VB/J/P C/P    ISg/#r+ VLPt NSg/VB/J .\n>\n#\n> Every one     suspects himself of at    least    one     of the cardinal virtues , and  this    is\n# Dq    NSg/I/J NPl/V3   ISg+    P  NSg/P NSg/J/Dq NSg/I/J P  D+  NSg/J+   NPl+    . VB/C I/Ddem+ VL3\n> mine      : I       am        one     of the few       honest people  that          I       have    ever known .\n# NSg/I/VB+ . ISg/#r+ NPr/VLB/J NSg/I/J P  D+  NSg/I/Dq+ VB/JS+ NPl/VB+ NSg/I/C/Ddem+ ISg/#r+ NSg/VXB J/R  VPp/J .\n>\n#\n>              CHAPTER IV\n# HeadingStart NSg/VB+ NSg/J/#r+\n>\n#\n> On  Sunday  morning    while      church     bells  rang in        the villages alongshore , the world\n# J/P NSg/VB+ N🅪Sg/Vg/J+ NSg/VB/C/P NPr🅪Sg/VB+ NPl/V3 VPt  NPr/J/R/P D   NPl+     J          . D   NSg/VB+\n> and  its     mistress returned to Gatsby’s house   and  twinkled hilariously on  his\n# VB/C ISg/D$+ NSg/VB+  VP/J     P  NPr$     NPr/VB+ VB/C VP/J     R           J/P ISg/D$+\n> lawn    .\n# NSg/VB+ .\n>\n#\n> “ He’s a   bootlegger , ” said the young    ladies  , moving  somewhere between his\n# . NPr$ D/P NSg        . . VP/J D   NPr/VB/J NPl/V3+ . Nᴹ/Vg/J NSg       NSg/P   ISg/D$+\n> cocktails and  his     flowers   . “ One      time       he       killed a    man       who    had found  out          that         he\n# NPl/V3+   VB/C ISg/D$+ NPrPl/V3+ . . NSg/I/J+ N🅪Sg/VB/J+ NPr/ISg+ VP/J   D/P+ NPr/VB/J+ NPr/I+ VP  NSg/VP NSg/VB/J/R/P NSg/I/C/Ddem NPr/ISg+\n> was  nephew to Von Hindenburg and  second   cousin  to the devil   . Reach  me       a   rose       ,\n# VLPt NSg    P  ?   NPr        VB/C NSg/VB/J NSg/VB+ P  D   NPr/VB+ . NSg/VB NPr/ISg+ D/P NPr/VPt/J+ .\n> honey      , and  pour   me       a    last      drop    into that         there crystal   glass      . ”\n# N🅪Sg/VB/J+ . VB/C NSg/VB NPr/ISg+ D/P+ NSg/VB/J+ NSg/VB+ P    NSg/I/C/Ddem R+    NPr🅪Sg/J+ NPr🅪Sg/VB+ . .\n>\n#\n> Once  I       wrote down        on  the empty    spaces of a    timetable the names  of those   who    came\n# NSg/C ISg/#r+ VPt   N🅪Sg/VB/J/P J/P D   NSg/VB/J NPl/V3 P  D/P+ NSg/VB+   D   NPl/V3 P  I/Ddem+ NPr/I+ NSg/VPt/P\n> to Gatsby’s house   that          summer     . It       is  an  old   time      - table   now       , disintegrating at\n# P  NPr$     NPr/VB+ NSg/I/C/Ddem+ NPr🅪Sg/VB+ . NPr/ISg+ VL3 D/P NSg/J N🅪Sg/VB/J . NSg/VB+ NSg/J/R/C . Nᴹ/Vg/J        NSg/P\n> its     folds   , and  headed “ This   schedule in        effect  July 5th , 1922 . ” But     I       can     still\n# ISg/D$+ NPl/V3+ . VB/C VP/J   . I/Ddem NSg/VB+  NPr/J/R/P NSg/VB+ NPr+ #   . #    . . NSg/C/P ISg/#r+ NPr/VXB NSg/VB/J/R\n> read    the gray            names   , and  they will    give   you    a    better      impression than my\n# NSg/VBP D+  NPr🅪Sg/VB/J/Am+ NPl/V3+ . VB/C IPl+ NPr/VXB NSg/VB ISgPl+ D/P+ NSg/VXB/JC+ NSg/VB+    C/P  D$+\n> generalities of those  who    accepted Gatsby’s hospitality and  paid him  the subtle\n# NPl          P  I/Ddem NPr/I+ VP/J     NPr$     Nᴹ+         VB/C VP/J ISg+ D   J\n> tribute of knowing    nothing  whatever about him  .\n# NSg/VB  P  NSg/Vg/J/P NSg/I/J+ NSg/I/J+ J/P   ISg+ .\n>\n#\n> From East   Egg      , then      , came      the Chester Beckers and  the Leeches , and  a   man       named\n# P    NPr/J+ N🅪Sg/VB+ . NSg/J/R/C . NSg/VPt/P D+  NPr+    ?       VB/C D   NPl/V3  . VB/C D/P NPr/VB/J+ VP/J\n> Bunsen , whom I       knew at    Yale , and  Doctor  Webster Civet , who    was  drowned last\n# NPr    . I+   ISg/#r+ VPt  NSg/P NPr+ . VB/C NSg/VB+ NPr     NSg+  . NPr/I+ VLPt VP/J    NSg/VB/J\n> summer     up         in        Maine . And  the Hornbeams and  the Willie Voltaires , and  a   whole clan\n# NPr🅪Sg/VB+ NSg/VB/J/P NPr/J/R/P NPr+  . VB/C D   ?         VB/C D   NPr+   ?         . VB/C D/P NSg/J NSg+\n> named Blackbuck , who    always gathered in        a   corner  and  flipped up         their noses  like\n# VP/J  ?         . NPr/I+ R      VP/J     NPr/J/R/P D/P NSg/VB+ VB/C VP      NSg/VB/J/P D$+   NPl/V3 NSg/VB/J/C/P\n> goats   at    whosoever came      near       . And  the Ismays and  the Chrysties ( or    rather     Hubert\n# NPl/V3+ NSg/P I+        NSg/VPt/P NSg/VB/J/P . VB/C D   ?      VB/C D   ?         . NPr/C NPr/VB/J/R NPr\n> Auerbach and  Mr   . Chrystie’s wife      ) , and  Edgar Beaver  , whose hair     , they say    ,\n# ?        VB/C NSg+ . ?          NSg/VB/J+ . . VB/C NPr+  NSg/VB+ . I+    N🅪Sg/VB+ . IPl+ NSg/VB .\n> turned cotton       - white       one     winter   afternoon for   no       good     reason   at    all          .\n# VP/J   NPr🅪Sg/VB/J+ . NPr🅪Sg/VB/J NSg/I/J N🅪Sg/VB+ N🅪Sg+     R/C/P NSg/Dq/P NPr/VB/J N🅪Sg/VB+ NSg/P NSg/I/J/C/Dq .\n>\n#\n> Clarence Endive was  from East   Egg      , as    I       remember . He       came      only  once  , in        white\n# NPr      NSg    VLPt P    NPr/J+ N🅪Sg/VB+ . R/C/P ISg/#r+ NSg/VB   . NPr/ISg+ NSg/VPt/P J/R/C NSg/C . NPr/J/R/P NPr🅪Sg/VB/J\n> knickerbockers , and  had a   fight   with a   bum      named Etty in        the garden    . From\n# NSg            . VB/C VP  D/P NSg/VB+ P    D/P NSg/VB/J VP/J  ?    NPr/J/R/P D   NSg/VB/J+ . P\n> farther out          on  the Island  came      the Cheadles and  the O. R. P. Schraeders , and  the\n# VB/JC   NSg/VB/J/R/P J/P D+  NSg/VB+ NSg/VPt/P D   ?        VB/C D   ?  ?  ?  ?          . VB/C D\n> Stonewall Jackson Abrams of Georgia , and  the Fishguards and  the Ripley Snells .\n# NSg/VB/J  NPr+    NPrPl  P  NPr+    . VB/C D   ?          VB/C D   NPr    ?      .\n> Snell was  there three days before he       went    to the penitentiary , so          drunk     out          on\n# NPr   VLPt R+    NSg   NPl+ C/P    NPr/ISg+ NSg/VPt P  D   NSg/J+       . NSg/I/J/R/C NSg/VPp/J NSg/VB/J/R/P J/P\n> the gravel   drive   that         Mrs  . Ulysses Swett’s automobile ran     over    his     right    hand    .\n# D   Nᴹ/VB/J+ N🅪Sg/VB NSg/I/C/Ddem NPl+ . NPr+    ?       NSg/VB/J   NSg/VPt NSg/J/P ISg/D$+ NPr/VB/J NSg/VB+ .\n> The Dancies came      , too , and  S. B. Whitebait , who    was  well       over    sixty , and  Maurice\n# D   ?       NSg/VPt/P . R   . VB/C ?  ?  NSg/VB    . NPr/I+ VLPt NSg/VB/J/R NSg/J/P NSg   . VB/C NPr\n> A. Flink , and  the Hammerheads , and  Beluga the tobacco importer , and  Beluga’s\n# ?  ?     . VB/C D   NPl         . VB/C NSg    D   N🅪Sg+   NSg      . VB/C NSg$\n> girls   .\n# NPl/V3+ .\n>\n#\n> From West      Egg      came      the Poles     and  the Mulreadys and  Cecil Roebuck and  Cecil\n# P    NPr/VB/J+ N🅪Sg/VB+ NSg/VPt/P D+  NPrPl/V3+ VB/C D   ?         VB/C NPr   NSg     VB/C NPr\n> Schoen and  Gulick the State    senator and  Newton Orchid , who    controlled Films   Par\n# ?      VB/C ?      D   N🅪Sg/VB+ NSg     VB/C NPr+   NSg/J  . NPr/I+ VP/J       NPl/V3+ NSg/VB/J/P\n> Excellence , and  Eckhaust and  Clyde Cohen and  Don     S. Schwartze ( the son     ) and\n# NSg+       . VB/C ?        VB/C NPr   NPr   VB/C NPr/VB+ ?  ?         . D   NPr/VB+ . VB/C\n> Arthur McCarty , all          connected with the movies in        one     way    or    another . And  the\n# NPr+   NPr     . NSg/I/J/C/Dq VP/J+     P    D   NPl+   NPr/J/R/P NSg/I/J NSg/J+ NPr/C I/D     . VB/C D\n> Catlips and  the Bembergs and  G. Earl Muldoon , brother   to that          Muldoon who\n# ?       VB/C D   ?        VB/C ?  NPr+ ?       . NSg/VB/J+ P  NSg/I/C/Ddem+ ?       NPr/I+\n> afterward strangled his     wife      . Da        Fontano the promoter came      there , and  Ed     Legros\n# R/Am      VP/J      ISg/D$+ NSg/VB/J+ . NPr/VB/J+ ?       D   NSg      NSg/VPt/P R     . VB/C NPr/J+ ?\n> and  James  B. ( “ Rot      - Gut        ” ) Ferret and  the De   Jongs and  Ernest Lilly — they came      to\n# VB/C NPrPl+ ?  . . N🅪Sg/VB+ . N🅪Sg/VB/J+ . . NSg/VB VB/C D   NPr+ ?     VB/C NPr+   NPr   . IPl+ NSg/VPt/P P\n> gamble , and  when    Ferret wandered into the garden    it       meant he       was  cleaned out          and\n# NPr/VB . VB/C NSg/I/C NSg/VB VP/J     P    D   NSg/VB/J+ NPr/ISg+ VP    NPr/ISg+ VLPt VP/J    NSg/VB/J/R/P VB/C\n> Associated Traction would have    to fluctuate profitably next    day     .\n# VP/J       Nᴹ/VB    VXB   NSg/VXB P  VB        R          NSg/J/P NPr🅪Sg+ .\n>\n#\n> A    man       named Klipspringer was  there so          often and  so          long     that         he       became known as\n# D/P+ NPr/VB/J+ VP/J  ?            VLPt R+    NSg/I/J/R/C R     VB/C NSg/I/J/R/C NPr/VB/J NSg/I/C/Ddem NPr/ISg+ VPt    VPp/J R/C/P\n> “ the boarder ” — I       doubt   if    he       had any    other    home      . Of theatrical people  there were\n# . D   NSg+    . . ISg/#r+ N🅪Sg/VB NSg/C NPr/ISg+ VP  I/R/Dq NSg/VB/J NSg/VB/J+ . P  NSg/J+     NPl/VB+ R+    NSg/VLPt\n> Gus  Waize and  Horace O’Donavan and  Lester Myer and  George Duckweed and  Francis\n# NPr+ ?     VB/C NPr+   ?         VB/C NPr    ?    VB/C NPr+   Nᴹ       VB/C NPr+\n> Bull      . Also from New    York were     the Chromes and  the Backhyssons and  the Dennickers\n# NSg/VB/J+ . R/C  P    NSg/J+ NPr+ NSg/VLPt D   NPl/V3  VB/C D   ?           VB/C D   ?\n> and  Russel Betty and  the Corrigans and  the Kellehers and  the Dewars and  the\n# VB/C NPr    NPr+  VB/C D   ?         VB/C D   ?         VB/C D   ?      VB/C D\n> Scullys and  S. W. Belcher and  the Smirkes and  the young    Quinns , divorced now       ,\n# ?       VB/C ?  ?  ?       VB/C D   ?       VB/C D   NPr/VB/J ?      . VP/J     NSg/J/R/C .\n> and  Henry L. Palmetto , who    killed himself by    jumping in        front    of a   subway  train\n# VB/C NPr+  ?  NSg      . NPr/I+ VP/J   ISg+    NSg/P Nᴹ/Vg/J NPr/J/R/P NSg/VB/J P  D/P NSg/VB+ NSg/VB+\n> in        Times   Square   .\n# NPr/J/R/P NPl/V3+ NSg/VB/J .\n>\n#\n> Benny McClenahan arrived always with four girls   . They were     never quite the same\n# NPr   ?          VP/J    R      P    NSg  NPl/V3+ . IPl+ NSg/VLPt R     R     D   I/J\n> ones in        physical person  , but     they were     so          identical one     with another that         it\n# NPl  NPr/J/R/P NSg/J+   NSg/VB+ . NSg/C/P IPl+ NSg/VLPt NSg/I/J/R/C NSg/J     NSg/I/J P    I/D     NSg/I/C/Ddem NPr/ISg+\n> inevitably seemed they had been     there before . I       have    forgotten their\n# R          VP/J   IPl+ VP  NSg/VLPp R+    C/P    . ISg/#r+ NSg/VXB NSg/VPp/J D$+\n> names   — Jaqueline , I       think  , or    else    Consuela , or    Gloria or    Judy or    June , and  their\n# NPl/V3+ . ?         . ISg/#r+ NSg/VB . NPr/C NSg/J/C ?        . NPr/C NPr    NPr/C NPr  NPr/C NPr+ . VB/C D$+\n> last     names   were     either the melodious names  of flowers  and  months or    the sterner\n# NSg/VB/J NPl/V3+ NSg/VLPt I/C    D   J         NPl/V3 P  NPrPl/V3 VB/C NPl+   NPr/C D   NSg/JC\n> ones of the great American capitalists whose cousins , if    pressed , they would\n# NPl  P  D   NSg/J NPr/J    NPl         I+    NPl/V3+ . NSg/C VP/J    . IPl+ VXB\n> confess  themselves to be       .\n# NSg/VB/J IPl+       P  NSg/VLXB .\n>\n#\n> In        addition to all          these   I       can     remember that         Faustina O’Brien came      there at\n# NPr/J/R/P NSg+     P  NSg/I/J/C/Dq I/Ddem+ ISg/#r+ NPr/VXB NSg/VB   NSg/I/C/Ddem ?        NPr     NSg/VPt/P R     NSg/P\n> least    once  and  the Baedeker girls   and  young    Brewer , who    had his     nose    shot      off        in\n# NSg/J/Dq NSg/C VB/C D   NPr      NPl/V3+ VB/C NPr/VB/J NPr    . NPr/I+ VP  ISg/D$+ NSg/VB+ NSg/VP/J+ NSg/VB/J/P NPr/J/R/P\n> the war      , and  Mr   . Albrucksburger and  Miss   Haag , his     fiancée , and  Ardita\n# D   N🅪Sg/VB+ . VB/C NSg+ . ?              VB/C NSg/VB ?    . ISg/D$+ ?       . VB/C ?\n> Fitz - Peters and  Mr   . P. Jewett , once  head     of the American Legion    , and  Miss\n# ?    . NPr    VB/C NSg+ . ?  ?      . NSg/C NPr/VB/J P  D   NPr/J    NSg/VB/J+ . VB/C NSg/VB\n> Claudia Hip       , with a   man       reputed to be       her     chauffeur , and  a   prince   of something ,\n# NPr+    NSg/VB/J+ . P    D/P NPr/VB/J+ VP/J    P  NSg/VLXB ISg/D$+ NSg/VB    . VB/C D/P NPr/VB/J P  NSg/I/J+  .\n> whom we   called Duke    , and  whose name    , if    I       ever knew it       , I       have    forgotten .\n# I+   IPl+ VP/J   NPr/VB+ . VB/C I+    NSg/VB+ . NSg/C ISg/#r+ J/R  VPt  NPr/ISg+ . ISg/#r+ NSg/VXB NSg/VPp/J .\n>\n#\n> All          these   people  came      to Gatsby’s house   in        the summer     .\n# NSg/I/J/C/Dq I/Ddem+ NPl/VB+ NSg/VPt/P P  NPr$     NPr/VB+ NPr/J/R/P D   NPr🅪Sg/VB+ .\n>\n#\n> At    nine o’clock , one     morning    late  in        July , Gatsby’s gorgeous car  lurched up         the\n# NSg/P NSg  R       . NSg/I/J N🅪Sg/Vg/J+ NSg/J NPr/J/R/P NPr+ . NPr$     J+       NSg+ VP/J    NSg/VB/J/P D\n> rocky drive   to my  door    and  gave out          a   burst  of melody from its     three - noted horn    .\n# NPr/J N🅪Sg/VB P  D$+ NSg/VB+ VB/C VPt  NSg/VB/J/R/P D/P NSg/VB P  NPr🅪Sg P    ISg/D$+ NSg   . VP/J  NPr/VB+ .\n> It       was  the first time      he       had called on  me       , though I       had gone    to two of his\n# NPr/ISg+ VLPt D   NSg/J N🅪Sg/VB/J NPr/ISg+ VP  VP/J   J/P NPr/ISg+ . C      ISg/#r+ VP  VPp/J/P P  NSg P  ISg/D$+\n> parties , mounted in        his     hydroplane , and  , at    his     urgent invitation , made frequent\n# NPl/V3+ . VP/J    NPr/J/R/P ISg/D$+ NSg/VB     . VB/C . NSg/P ISg/D$+ J      NSg+       . VP   VB/J\n> use     of his     beach   .\n# N🅪Sg/VB P  ISg/D$+ NPr/VB+ .\n>\n#\n> “ Good     morning    , old    sport   . You’re having  lunch    with me       to - day     and  I       thought we’d\n# . NPr/VB/J N🅪Sg/Vg/J+ . NSg/J+ NSg/VB+ . K      Nᴹ/Vg/J N🅪Sg/VB+ P    NPr/ISg+ P  . NPr🅪Sg+ VB/C ISg/#r+ N🅪Sg/VP K\n> ride    up         together . ”\n# NSg/VB+ NSg/VB/J/P J        . .\n>\n#\n> He       was  balancing himself on  the dashboard of his     car  with that          resourcefulness\n# NPr/ISg+ VLPt Nᴹ/Vg/J   ISg+    J/P D   NSg/VB    P  ISg/D$+ NSg+ P    NSg/I/C/Ddem+ Nᴹ\n> of movement that          is  so          peculiarly American — that          comes  , I       suppose , with the\n# P  N🅪Sg+    NSg/I/C/Ddem+ VL3 NSg/I/J/R/C R          NPr/J    . NSg/I/C/Ddem+ NPl/V3 . ISg/#r+ VB      . P    D\n> absence of lifting work     in        youth and  , even       more         , with the formless grace     of our\n# N🅪Sg    P  Nᴹ/Vg/J N🅪Sg/VB+ NPr/J/R/P NSg+  VB/C . NSg/VB/J/R NPr/I/J/R/Dq . P    D   J        NPr🅪Sg/VB P  D$+\n> nervous , sporadic games   . This    quality was  continually breaking through his\n# J       . J        NPl/V3+ . I/Ddem+ N🅪Sg/J+ VLPt R           Nᴹ/Vg/J  NSg/J/P ISg/D$+\n> punctilious manner in        the shape    of restlessness . He       was  never quite still      ; there\n# J           NSg+   NPr/J/R/P D   N🅪Sg/VB+ P  NSg          . NPr/ISg+ VLPt R     R     NSg/VB/J/R . R+\n> was  always a   tapping foot    somewhere or    the impatient opening  and  closing of a\n# VLPt R      D/P Nᴹ/Vg   NSg/VB+ NSg       NPr/C D+  J+        Nᴹ/Vg/J+ VB/C Nᴹ/Vg/J P  D/P+\n> hand    .\n# NSg/VB+ .\n>\n#\n> He       saw     me       looking with admiration at    his     car  .\n# NPr/ISg+ NSg/VPt NPr/ISg+ Nᴹ/Vg/J P    NSg+       NSg/P ISg/D$+ NSg+ .\n>\n#\n> “ It’s pretty     , isn’t   it       , old   sport   ? ” He       jumped off        to give   me       a    better      view    .\n# . K    NSg/VB/J/R . NSg/VX3 NPr/ISg+ . NSg/J NSg/VB+ . . NPr/ISg+ VP/J   NSg/VB/J/P P  NSg/VB NPr/ISg+ D/P+ NSg/VXB/JC+ NSg/VB+ .\n> “ Haven’t you    ever seen    it       before ? ”\n# . VXB     ISgPl+ J/R  NSg/VPp NPr/ISg+ C/P    . .\n>\n#\n> I’d seen    it       . Everybody had seen    it       . It       was  a   rich     cream     color        , bright   with\n# K   NSg/VPp NPr/ISg+ . NSg/I+    VP  NSg/VPp NPr/ISg+ . NPr/ISg+ VLPt D/P NPr/VB/J N🅪Sg/VB/J N🅪Sg/VB/J/Am . NPr/VB/J P\n> nickel   , swollen here and  there in        its     monstrous length   with triumphant hat     - boxes\n# NSg/VB/J . VB/J    J/R  VB/C R     NPr/J/R/P ISg/D$+ J         N🅪Sg/VB+ P    J          NSg/VB+ . NPl/V3\n> and  supper  - boxes  and  tool    - boxes   , and  terraced with a   labyrinth of wind     - shields\n# VB/C NSg/VB+ . NPl/V3 VB/C NSg/VB+ . NPl/V3+ . VB/C VP/J     P    D/P NSg/VB    P  N🅪Sg/VB+ . NPrPl/V3+\n> that         mirrored a   dozen suns     . Sitting  down        behind  many       layers of glass      in        a   sort\n# NSg/I/C/Ddem VP/J     D/P NSg   NPrPl/V3 . NSg/Vg/J N🅪Sg/VB/J/P NSg/J/P NSg/I/J/Dq NPl/V3 P  NPr🅪Sg/VB+ NPr/J/R/P D/P NSg/VB\n> of green        leather    conservatory , we   started to town .\n# P  NPr🅪Sg/VB/J+ N🅪Sg/VB/J+ NSg/J+       . IPl+ VP/J    P  NSg  .\n>\n#\n> I       had talked with him  perhaps half     a    dozen times   in        the past        month  and  found  , to\n# ISg/#r+ VP  VP/J   P    ISg+ NSg/R   N🅪Sg/J/P D/P+ NSg+  NPl/V3+ NPr/J/R/P D+  NSg/VB/J/P+ NSg/J+ VB/C NSg/VP . P\n> my  disappointment , that         he       had little     to say    . So          my  first  impression , that         he\n# D$+ NSg+           . NSg/I/C/Ddem NPr/ISg+ VP  NPr/I/J/Dq P  NSg/VB . NSg/I/J/R/C D$+ NSg/J+ NSg/VB+    . NSg/I/C/Ddem NPr/ISg+\n> was  a   person of some     undefined consequence , had gradually faded and  he       had\n# VLPt D/P NSg/VB P  I/J/R/Dq VP/J      NSg/VB+     . VP  R         J     VB/C NPr/ISg+ VP\n> become simply the proprietor of an  elaborate road    - house   next     door    .\n# VBPp   R      D   NSg        P  D/P VB/J      N🅪Sg/J+ . NPr/VB+ NSg/J/P+ NSg/VB+ .\n>\n#\n> And  then      came      that         disconcerting ride    . We   hadn’t reached West      Egg      Village before\n# VB/C NSg/J/R/C NSg/VPt/P NSg/I/C/Ddem Nᴹ/Vg/J       NSg/VB+ . IPl+ VPt    VP/J    NPr/VB/J+ N🅪Sg/VB+ NSg+    C/P\n> Gatsby began leaving his     elegant sentences unfinished and  slapping himself\n# NPr    VPt   Nᴹ/Vg/J ISg/D$+ NSg/J   NPl/V3+   VP/J       VB/C NSg/Vg/J ISg+\n> indecisively on  the knee   of his     caramel    - colored     suit    .\n# R            J/P D   NSg/VB P  ISg/D$+ N🅪Sg/VB/J+ . NSg/VP/J/Am NSg/VB+ .\n>\n#\n> “ Look   here , old    sport   , ” he       broke     out          surprisingly , “ what’s your opinion of me       ,\n# . NSg/VB J/R  . NSg/J+ NSg/VB+ . . NPr/ISg+ NSg/VPt/J NSg/VB/J/R/P R            . . K      D$+  N🅪Sg    P  NPr/ISg+ .\n> anyhow ? ”\n# J      . .\n>\n#\n> A    little      overwhelmed , I       began the generalized evasions which that         question\n# D/P+ NPr/I/J/Dq+ VP/J+       . ISg/#r+ VPt   D   VP/J        NPl      I/C+  NSg/I/C/Ddem NSg/VB+\n> deserves .\n# NPl/V3   .\n>\n#\n> “ Well       , I’m going   to tell   you    something about my  life     , ” he       interrupted . “ I       don’t\n# . NSg/VB/J/R . K   Nᴹ/Vg/J P  NPr/VB ISgPl+ NSg/I/J+  J/P   D$+ N🅪Sg/VB+ . . NPr/ISg+ VP/J        . . ISg/#r+ VXB\n> want   you    to get    a   wrong      idea of me       from all          these  stories you    hear . ”\n# NSg/VB ISgPl+ P  NSg/VB D/P NSg/VB/J/R NSg  P  NPr/ISg+ P    NSg/I/J/C/Dq I/Ddem NPl/V3+ ISgPl+ VB   . .\n>\n#\n> So          he       was  aware of the bizarre accusations that          flavored conversation in        his\n# NSg/I/J/R/C NPr/ISg+ VLPt VB/J  P  D+  J+      NPl+        NSg/I/C/Ddem+ VP/J/Am  N🅪Sg/VB      NPr/J/R/P ISg/D$+\n> halls .\n# NPl+  .\n>\n#\n> “ I’ll tell   you    God’s truth    . ” His     right     hand    suddenly ordered divine   retribution\n# . K    NPr/VB ISgPl+ NPr$  N🅪Sg/VB+ . . ISg/D$+ NPr/VB/J+ NSg/VB+ R        VP/J    NPr/VB/J NSg\n> to stand  by    . “ I       am        the son    of some     wealthy people in        the Middle    West      — all          dead\n# P  NSg/VB NSg/P . . ISg/#r+ NPr/VLB/J D   NPr/VB P  I/J/R/Dq NSg/J   NPl/VB NPr/J/R/P D+  NSg/VB/J+ NPr/VB/J+ . NSg/I/J/C/Dq NSg/VB/J\n> now       . I       was  brought up         in        America but     educated at    Oxford , because all           my\n# NSg/J/R/C . ISg/#r+ VLPt VP      NSg/VB/J/P NPr/J/R/P NPr+    NSg/C/P VP/J     NSg/P NPr+   . C/P     NSg/I/J/C/Dq+ D$+\n> ancestors have    been     educated there for   many        years . It       is  a   family tradition . ”\n# NPl/V3+   NSg/VXB NSg/VLPp VP/J     R     R/C/P NSg/I/J/Dq+ NPl+  . NPr/ISg+ VL3 D/P N🅪Sg/J N🅪Sg/VB   . .\n>\n#\n> He       looked at    me       sideways — and  I       knew why    Jordan Baker had believed he       was  lying   .\n# NPr/ISg+ VP/J   NSg/P NPr/ISg+ NSg/J    . VB/C ISg/#r+ VPt  NSg/VB NPr+   NPr+  VP  VP/J     NPr/ISg+ VLPt Nᴹ/Vg/J .\n> He       hurried the phrase  “ educated at    Oxford , ” or    swallowed it       , or    choked on  it       , as\n# NPr/ISg+ VP/J    D+  NSg/VB+ . VP/J     NSg/P NPr+   . . NPr/C VP/J      NPr/ISg+ . NPr/C VP/J   J/P NPr/ISg+ . R/C/P\n> though it       had bothered him  before . And  with this    doubt    , his     whole  statement fell\n# C      NPr/ISg+ VP  VP/J     ISg+ C/P    . VB/C P    I/Ddem+ N🅪Sg/VB+ . ISg/D$+ NSg/J+ NSg/VB/J+ NSg/VPt/J\n> to pieces , and  I       wondered if    there wasn’t something a   little     sinister about him  ,\n# P  NPl/V3 . VB/C ISg/#r+ VP/J     NSg/C R+    VPt    NSg/I/J+  D/P NPr/I/J/Dq J        J/P   ISg+ .\n> after all          .\n# P     NSg/I/J/C/Dq .\n>\n#\n> “ What   part     of the Middle    West      ? ” I       inquired casually .\n# . NSg/I+ NSg/VB/J P  D+  NSg/VB/J+ NPr/VB/J+ . . ISg/#r+ VP/J     R        .\n>\n#\n> “ San  Francisco . ”\n# . NPr+ NPr+      . .\n>\n#\n> “ I       see    . ”\n# . ISg/#r+ NSg/VB . .\n>\n#\n> “ My  family all          died and  I       came      into a   good     deal     of money   . ”\n# . D$+ N🅪Sg/J NSg/I/J/C/Dq VP/J VB/C ISg/#r+ NSg/VPt/P P    D/P NPr/VB/J NSg/VB/J P  N🅪Sg/J+ . .\n>\n#\n> His     voice   was  solemn , as    if    the memory of that         sudden extinction of a    clan still\n# ISg/D$+ NSg/VB+ VLPt J      . R/C/P NSg/C D   N🅪Sg   P  NSg/I/C/Ddem NSg/J  N🅪Sg       P  D/P+ NSg+ NSg/VB/J/R\n> haunted him  . For   a    moment I       suspected that         he       was  pulling my  leg       , but     a    glance\n# VP/J    ISg+ . R/C/P D/P+ NSg+   ISg/#r+ VP/J      NSg/I/C/Ddem NPr/ISg+ VLPt Nᴹ/Vg/J D$+ NSg/VB/J+ . NSg/C/P D/P+ NSg/VB+\n> at    him  convinced me       otherwise .\n# NSg/P ISg+ VP/J      NPr/ISg+ J/R       .\n>\n#\n> “ After that         I       lived like         a   young    rajah in        all          the capitals of Europe — Paris ,\n# . P     NSg/I/C/Ddem ISg/#r+ VP/J  NSg/VB/J/C/P D/P NPr/VB/J NSg   NPr/J/R/P NSg/I/J/C/Dq D   NPl      P  NPr+   . NPr+  .\n> Venice , Rome — collecting jewels  , chiefly rubies , hunting big   game      , painting   a\n# NPr+   . NPr+ . Nᴹ/Vg/J    NPl/V3+ . R       NPl/V3 . Nᴹ/Vg/J NSg/J NSg/VB/J+ . N🅪Sg/Vg/J+ D/P\n> little     , things for   myself only  , and  trying  to forget something very sad      that          had\n# NPr/I/J/Dq . NPl+   R/C/P ISg+   J/R/C . VB/C Nᴹ/Vg/J P  VB     NSg/I/J+  J/R  NSg/VB/J NSg/I/C/Ddem+ VP\n> happened to me       long     ago . ”\n# VP/J     P  NPr/ISg+ NPr/VB/J J/P . .\n>\n#\n> With an   effort   I       managed to restrain my  incredulous laughter . The very phrases\n# P    D/P+ N🅪Sg/VB+ ISg/#r+ VP/J    P  N🅪Sg/VB  D$+ J           Nᴹ+      . D+  J/R+ NPl/V3+\n> were     worn  so          threadbare that         they evoked no       image    except that         of a   turbaned\n# NSg/VLPt VPp/J NSg/I/J/R/C J          NSg/I/C/Ddem IPl+ VP/J   NSg/Dq/P N🅪Sg/VB+ VB/C/P NSg/I/C/Ddem P  D/P VP/J\n> “ character ” leaking sawdust at    every pore   as    he       pursued a   tiger through the Bois\n# . N🅪Sg/VB+  . Nᴹ/Vg/J Nᴹ/VB+  NSg/P Dq    NSg/VB R/C/P NPr/ISg+ VP/J    D/P NSg+  NSg/J/P D   ?\n> de   Boulogne .\n# NPr+ ?        .\n>\n#\n> “ Then      came      the war      , old    sport   . It       was  a   great relief , and  I       tried very hard     to\n# . NSg/J/R/C NSg/VPt/P D+  N🅪Sg/VB+ . NSg/J+ NSg/VB+ . NPr/ISg+ VLPt D/P NSg/J NSg/J  . VB/C ISg/#r+ VP/J  J/R  N🅪Sg/J/R P\n> die    , but     I       seemed to bear     an  enchanted life     . I       accepted a    commission as    first\n# NSg/VB . NSg/C/P ISg/#r+ VP/J   P  NSg/VB/J D/P VP/J      N🅪Sg/VB+ . ISg/#r+ VP/J     D/P+ N🅪Sg/VB+   R/C/P NSg/J+\n> lieutenant when    it       began . In        the Argonne Forest  I       took the remains of my\n# NSg/J+     NSg/I/C NPr/ISg+ VPt   . NPr/J/R/P D   NPr     NPr/VB+ ISg/#r+ VPt  D   NPl/V3  P  D$+\n> machine - gun     battalion so          far      forward  that         there was  a   half      mile gap     on  either\n# NSg/VB+ . NSg/VB+ NSg/VB    NSg/I/J/R/C NSg/VB/J NSg/VB/J NSg/I/C/Ddem R+    VLPt D/P N🅪Sg/J/P+ NSg+ NPr/VB+ J/P I/C\n> side     of us       where   the infantry couldn’t advance   . We   stayed there two days and  two\n# NSg/VB/J P  NPr/IPl+ NSg/R/C D   N🅪Sg+    VXB      NSg/VB/J+ . IPl+ VP/J   R+    NSg NPl  VB/C NSg+\n> nights  , a   hundred and  thirty men with sixteen Lewis guns    , and  when    the infantry\n# NPl/V3+ . D/P NSg     VB/C NSg    NPl P    NSg     NPr+  NPl/V3+ . VB/C NSg/I/C D+  N🅪Sg+\n> came      up         at    last     they found  the insignia of three German   divisions among the\n# NSg/VPt/P NSg/VB/J/P NSg/P NSg/VB/J IPl+ NSg/VP D   NSg      P  NSg   NPr🅪Sg/J NPl+      P     D\n> piles  of dead     . I       was  promoted to be       a   major    , and  every Allied government gave me\n# NPl/V3 P  NSg/VB/J . ISg/#r+ VLPt VP/J     P  NSg/VLXB D/P NPr/VB/J . VB/C Dq    VP/J   N🅪Sg+      VPt  NPr/ISg+\n> a   decoration — even       Montenegro , little     Montenegro down        on  the Adriatic Sea  ! ”\n# D/P N🅪Sg+      . NSg/VB/J/R NPr+       . NPr/I/J/Dq NPr+       N🅪Sg/VB/J/P J/P D   NPr/J    NSg+ . .\n>\n#\n> Little      Montenegro ! He       lifted up         the words   and  nodded at    them     — with his     smile   . The\n# NPr/I/J/Dq+ NPr+       . NPr/ISg+ VP/J   NSg/VB/J/P D+  NPl/V3+ VB/C VP     NSg/P NSg/IPl+ . P    ISg/D$+ NSg/VB+ . D+\n> smile   comprehended Montenegro’s troubled history and  sympathized with the brave\n# NSg/VB+ VP/J         NPr$         VP/J     N🅪Sg+   VB/C VP/J        P    D   NSg/VB/J\n> struggles of the Montenegrin people  . It       appreciated fully the chain   of national\n# NPl/V3    P  D   NSg/J       NPl/VB+ . NPr/ISg+ VP/J        R     D   N🅪Sg/VB P  NSg/J+\n> circumstances which had elicited this   tribute from Montenegro’s warm      little\n# NPl/V3+       I/C+  VP  VP/J     I/Ddem NSg/VB  P    NPr$         NSg/VB/J+ NPr/I/J/Dq\n> heart    . My  incredulity was  submerged in        fascination now       ; it       was  like         skimming\n# N🅪Sg/VB+ . D$+ NSg+        VLPt VP/J      NPr/J/R/P NSg+        NSg/J/R/C . NPr/ISg+ VLPt NSg/VB/J/C/P NSg/Vg\n> hastily through a   dozen magazines .\n# R       NSg/J/P D/P NSg   NPl+      .\n>\n#\n> He       reached in        his     pocket    , and  a   piece  of metal      , slung on  a    ribbon  , fell      into my\n# NPr/ISg+ VP/J    NPr/J/R/P ISg/D$+ NSg/VB/J+ . VB/C D/P NSg/VB P  N🅪Sg/VB/J+ . VP    J/P D/P+ NSg/VB+ . NSg/VPt/J P    D$+\n> palm    .\n# NSg/VB+ .\n>\n#\n> “ That’s the one     from Montenegro . ”\n# . NSg$   D   NSg/I/J P    NPr+       . .\n>\n#\n> To my  astonishment , the thing had an   authentic look    . “ Orderi di      Danilo , ” ran     the\n# P  D$+ Nᴹ+          . D+  NSg+  VP  D/P+ J+        NSg/VB+ . . ?      NPr/#r+ ?      . . NSg/VPt D\n> circular legend   , “ Montenegro , Nicolas Rex . ”\n# NSg/VB/J N🅪Sg/VB+ . . NPr+       . NPrPl   NPr . .\n>\n#\n> “ Turn   it       . ”\n# . NSg/VB NPr/ISg+ . .\n>\n#\n> “ Major     Jay  Gatsby , ” I       read    , “ For   Valour  Extraordinary . ”\n# . NPr/VB/J+ NPr+ NPr    . . ISg/#r+ NSg/VBP . . R/C/P Nᴹ/Comm NSg/J         . .\n>\n#\n> “ Here’s another thing I       always carry  . A   souvenir of Oxford days . It       was  taken in\n# . K      I/D     NSg+  ISg/#r+ R      NSg/VB . D/P NSg/VB   P  NPr+   NPl+ . NPr/ISg+ VLPt VPp/J NPr/J/R/P\n> Trinity Quad      — the man       on  my  left     is  now       the Earl of Doncaster . ”\n# NPr+    NSg/VB/J+ . D+  NPr/VB/J+ J/P D$+ NPr/VP/J VL3 NSg/J/R/C D   NPr  P  ?         . .\n>\n#\n> It       was  a   photograph of half      a    dozen young     men  in        blazers loafing in        an  archway\n# NPr/ISg+ VLPt D/P NSg/VB     P  N🅪Sg/J/P+ D/P+ NSg+  NPr/VB/J+ NPl+ NPr/J/R/P NPl     Nᴹ/Vg/J NPr/J/R/P D/P NSg\n> through which were     visible a   host   of spires  . There was  Gatsby , looking a   little     ,\n# NSg/J/P I/C+  NSg/VLPt J       D/P NSg/VB P  NPl/V3+ . R+    VLPt NPr    . Nᴹ/Vg/J D/P NPr/I/J/Dq .\n> not     much         , younger — with a   cricket bat     in        his     hand    .\n# NSg/R/C NSg/I/J/R/Dq . NSg/JC  . P    D/P N🅪Sg/VB NSg/VB+ NPr/J/R/P ISg/D$+ NSg/VB+ .\n>\n#\n> Then      it       was  all          true     . I       saw     the skins  of tigers flaming in        his     palace  on  the\n# NSg/J/R/C NPr/ISg+ VLPt NSg/I/J/C/Dq NSg/VB/J . ISg/#r+ NSg/VPt D   NPl/V3 P  NPl+   Nᴹ/Vg/J NPr/J/R/P ISg/D$+ NSg/VB+ J/P D\n> Grand Canal   ; I       saw     him  opening a   chest   of rubies to ease  , with their\n# NSg/J NSg/VB+ . ISg/#r+ NSg/VPt ISg+ Nᴹ/Vg/J D/P NSg/VB+ P  NPl/V3 P  Nᴹ/VB . P    D$+\n> crimson  - lighted depths , the gnawings of his     broken heart    .\n# NSg/VB/J . VP/J    NPl+   . D   ?        P  ISg/D$+ VPp/J  N🅪Sg/VB+ .\n>\n#\n> “ I’m going   to make   a   big   request of you    to - day     , ” he       said , pocketing his\n# . K   Nᴹ/Vg/J P  NSg/VB D/P NSg/J NSg/VB  P  ISgPl+ P  . NPr🅪Sg+ . . NPr/ISg+ VP/J . Nᴹ/Vg/J   ISg/D$+\n> souvenirs with satisfaction , “ so          I       thought you    ought     to know something about me       .\n# NPl/V3+   P    Nᴹ+          . . NSg/I/J/R/C ISg/#r+ N🅪Sg/VP ISgPl+ NSg/I/VXB P  VB   NSg/I/J+  J/P   NPr/ISg+ .\n> I       didn’t want   you    to think  I       was  just some     nobody . You    see    , I       usually find\n# ISg/#r+ VXPt   NSg/VB ISgPl+ P  NSg/VB ISg/#r+ VLPt J/R  I/J/R/Dq NSg/I+ . ISgPl+ NSg/VB . ISg/#r+ R       NSg/VB\n> myself among strangers because I       drift  here and  there trying  to forget the sad\n# ISg+   P     +         C/P     ISg/#r+ NSg/VB J/R  VB/C R+    Nᴹ/Vg/J P  VB     D+  NSg/VB/J+\n> thing that          happened to me       . ” He       hesitated . “ You’ll hear about it       this   afternoon . ”\n# NSg+  NSg/I/C/Ddem+ VP/J     P  NPr/ISg+ . . NPr/ISg+ VP/J      . . K      VB   J/P   NPr/ISg+ I/Ddem N🅪Sg+     . .\n>\n#\n> “ At    lunch    ? ”\n# . NSg/P N🅪Sg/VB+ . .\n>\n#\n> “ No       , this    afternoon . I       happened to find   out          that         you’re taking   Miss   Baker to\n# . NSg/Dq/P . I/Ddem+ N🅪Sg+     . ISg/#r+ VP/J     P  NSg/VB NSg/VB/J/R/P NSg/I/C/Ddem K      NSg/Vg/J NSg/VB NPr+  P\n> tea     . ”\n# N🅪Sg/VB . .\n>\n#\n> “ Do  you    mean     you’re in        love      with Miss   Baker ? ”\n# . VXB ISgPl+ NSg/VB/J K      NPr/J/R/P NPr🅪Sg/VB P    NSg/VB NPr+  . .\n>\n#\n> “ No       , old    sport   , I’m not     . But     Miss   Baker has kindly consented to speak  to you\n# . NSg/Dq/P . NSg/J+ NSg/VB+ . K   NSg/R/C . NSg/C/P NSg/VB NPr+  V3  J/R    VP/J      P  NSg/VB P  ISgPl+\n> about this    matter   . ”\n# J/P   I/Ddem+ N🅪Sg/VB+ . .\n>\n#\n> I       hadn’t the faintest idea what   “ this   matter   ” was  , but     I       was  more         annoyed than\n# ISg/#r+ VPt    D   JS       NSg+ NSg/I+ . I/Ddem N🅪Sg/VB+ . VLPt . NSg/C/P ISg/#r+ VLPt NPr/I/J/R/Dq VP/J    C/P\n> interested . I       hadn’t asked Jordan to tea     in        order    to discuss Mr   . Jay  Gatsby . I\n# VP/J       . ISg/#r+ VPt    VP/J  NPr+   P  N🅪Sg/VB NPr/J/R/P N🅪Sg/VB+ P  NSg/VB  NSg+ . NPr+ NPr    . ISg/#r+\n> was  sure the request would be       something utterly fantastic , and  for   a    moment I\n# VLPt J    D   NSg/VB+ VXB   NSg/VLXB NSg/I/J+  R       NSg/J     . VB/C R/C/P D/P+ NSg+   ISg/#r+\n> was  sorry    I’d ever set       foot    upon his     overpopulated lawn    .\n# VLPt NSg/VB/J K   J/R  NPr/VBP/J NSg/VB+ P    ISg/D$+ VP/J          NSg/VB+ .\n>\n#\n> He       wouldn’t say    another word    . His     correctness grew on  him  as    we   neared the city .\n# NPr/ISg+ VXB      NSg/VB I/D     NSg/VB+ . ISg/D$+ NSg+        VPt  J/P ISg+ R/C/P IPl+ VP/J   D+  NSg+ .\n> We   passed Port      Roosevelt , where   there was  a   glimpse of red    - belted ocean - going\n# IPl+ VP/J   NPr/VB/J+ NPr+      . NSg/R/C R+    VLPt D/P NSg/VB  P  N🅪Sg/J . VP/J   NSg+  . Nᴹ/Vg/J\n> ships   , and  sped   along a   cobbled slum    lined with the dark     , undeserted saloons of\n# NPl/V3+ . VB/C NSg/VP P     D/P VP/J    NSg/VB+ VP/J  P    D   NSg/VB/J . ?          NPl     P\n> the faded - gilt     nineteen - hundreds . Then      the valley of ashes   opened out          on  both\n# D   J+    . NSg/VB/J NSg      . NPl+     . NSg/J/R/C D   NSg/VB P  NPl/V3+ VP/J   NSg/VB/J/R/P J/P I/C/Dq\n> sides  of us       , and  I       had a   glimpse of Mrs  . Wilson straining at    the garage  pump\n# NPl/V3 P  NPr/IPl+ . VB/C ISg/#r+ VP  D/P NSg/VB  P  NPl+ . NPr+   Nᴹ/Vg/J   NSg/P D+  NSg/VB+ NSg/VB+\n> with panting vitality as    we   went    by    .\n# P    Nᴹ/Vg/J Nᴹ+      R/C/P IPl+ NSg/VPt NSg/P .\n>\n#\n> With fenders spread   like         wings   we   scattered light      through half      Astoria — only\n# P    +       N🅪Sg/VBP NSg/VB/J/C/P NPl/V3+ IPl+ VP/J      N🅪Sg/VB/J+ NSg/J/P N🅪Sg/J/P+ NPr     . J/R/C\n> half      , for   as    we   twisted among the pillars of the elevated I       heard the familiar\n# N🅪Sg/J/P+ . R/C/P R/C/P IPl+ VP/J    P     D   NPl/V3  P  D   VP/J     ISg/#r+ VP/J  D   NSg/J\n> “ jug     - jug     - spat   ! ” of a    motorcycle , and  a    frantic policeman rode    alongside .\n# . NSg/VB+ . NSg/VB+ . NSg/VB . . P  D/P+ NSg/VB+    . VB/C D/P+ NSg/J+  NSg+      NSg/VPt P         .\n>\n#\n> “ All          right    , old    sport   , ” called Gatsby . We   slowed down        . Taking   a   white       card     from\n# . NSg/I/J/C/Dq NPr/VB/J . NSg/J+ NSg/VB+ . . VP/J   NPr    . IPl+ VP/J   N🅪Sg/VB/J/P . NSg/Vg/J D/P NPr🅪Sg/VB/J N🅪Sg/VB+ P\n> his     wallet , he       waved it       before the man’s       eyes    .\n# ISg/D$+ NSg+   . NPr/ISg+ VP/J  NPr/ISg+ C/P    D   NPr$/I/VB/J NPl/V3+ .\n>\n#\n> “ Right    you    are , ” agreed the policeman , tipping his     cap     . “ Know you    next    time       , Mr   .\n# . NPr/VB/J ISgPl+ VLB . . VP/J   D+  NSg+      . NSg/Vg  ISg/D$+ NPr/VB+ . . VB   ISgPl+ NSg/J/P N🅪Sg/VB/J+ . NSg+ .\n> Gatsby . Excuse  me       ! ”\n# NPr    . NSg/VB+ NPr/ISg+ . .\n>\n#\n> “ What   was  that          ? ” I       inquired . “ The picture of Oxford ? ”\n# . NSg/I+ VLPt NSg/I/C/Ddem+ . . ISg/#r+ VP/J     . . D   NSg/VB  P  NPr+   . .\n>\n#\n> “ I       was  able     to do  the commissioner a    favor       once  , and  he       sends  me       a    Christmas\n# . ISg/#r+ VLPt NSg/VB/J P  VXB D+  NSg+         D/P+ N🅪Sg/VB/Am+ NSg/C . VB/C NPr/ISg+ NPl/V3 NPr/ISg+ D/P+ NPr/VB/J+\n> card    every year . ”\n# N🅪Sg/VB Dq+   NSg+ . .\n>\n#\n> Over    the great  bridge   , with the sunlight through the girders making  a   constant\n# NSg/J/P D+  NSg/J+ N🅪Sg/VB+ . P    D+  NSg/VB+  NSg/J/P D   NPl     Nᴹ/Vg/J D/P NSg/J\n> flicker upon the moving  cars , with the city rising    up         across the river   in        white\n# NSg/VB+ P    D   Nᴹ/Vg/J NPl+ . P    D   NSg+ Nᴹ/Vg/J/P NSg/VB/J/P NSg/P  D   NSg/VB+ NPr/J/R/P NPr🅪Sg/VB/J\n> heaps  and  sugar    lumps  all          built with a   wish    out          of non - olfactory money   . The city\n# NPl/V3 VB/C N🅪Sg/VB+ NPl/V3 NSg/I/J/C/Dq VP/J+ P    D/P NSg/VB+ NSg/VB/J/R/P P  NSg . NSg/J     N🅪Sg/J+ . D+  NSg+\n> seen    from the Queensboro Bridge   is  always the city seen    for   the first time       , in\n# NSg/VPp P    D   ?          N🅪Sg/VB+ VL3 R      D   NSg+ NSg/VPp R/C/P D   NSg/J N🅪Sg/VB/J+ . NPr/J/R/P\n> its     first wild     promise of all          the mystery and  the beauty     in        the world   .\n# ISg/D$+ NSg/J NSg/VB/J NSg/VB  P  NSg/I/J/C/Dq D   N🅪Sg+   VB/C D   N🅪Sg/VB/J+ NPr/J/R/P D   NSg/VB+ .\n>\n#\n> A    dead      man       passed us       in        a   hearse heaped with blooms , followed by    two carriages\n# D/P+ NSg/VB/J+ NPr/VB/J+ VP/J   NPr/IPl+ NPr/J/R/P D/P NSg/VB VP/J   P    NPl/V3 . VP/J     NSg/P NSg NPl\n> with drawn blinds  , and  by    more         cheerful carriages for   friends   . The friends\n# P    VPp/J NPl/V3+ . VB/C NSg/P NPr/I/J/R/Dq J        NPl       R/C/P NPrPl/V3+ . D+  NPrPl/V3+\n> looked out          at    us       with the tragic eyes    and  short      upper lips   of southeastern\n# VP/J   NSg/VB/J/R/P NSg/P NPr/IPl+ P    D+  NSg/J+ NPl/V3+ VB/C NPr/VB/J/P NSg/J NPl/V3 P  J+\n> Europe , and  I       was  glad     that         the sight   of Gatsby’s splendid car  was  included in\n# NPr+   . VB/C ISg/#r+ VLPt NSg/VB/J NSg/I/C/Ddem D   N🅪Sg/VB P  NPr$     J        NSg+ VLPt VP/J     NPr/J/R/P\n> their sombre        holiday . As    we   crossed Blackwell’s Island  a   limousine passed us       ,\n# D$+   NSg/VB/J/Comm NPr/VB+ . R/C/P IPl+ VP/J    NPr$        NSg/VB+ D/P NSg       VP/J   NPr/IPl+ .\n> driven by    a   white       chauffeur , in        which sat      three modish negroes , two bucks  and  a\n# VPp/J  NSg/P D/P NPr🅪Sg/VB/J NSg/VB    . NPr/J/R/P I/C+  NSg/VP/J NSg   J      NPl     . NSg NPl/V3 VB/C D/P\n> girl    . I       laughed aloud as    the yolks  of their eyeballs rolled toward us       in        haughty\n# NSg/VB+ . ISg/#r+ VP/J    J     R/C/P D   NPl/V3 P  D$+   NPl/V3+  VP/J   J/P    NPr/IPl+ NPr/J/R/P J\n> rivalry .\n# NSg+    .\n>\n#\n> “ Anything  can     happen now       that         we’ve slid over    this   bridge   , ” I       thought ; “ anything\n# . NSg/I/VB+ NPr/VXB VB     NSg/J/R/C NSg/I/C/Ddem K     VP   NSg/J/P I/Ddem N🅪Sg/VB+ . . ISg/#r+ N🅪Sg/VP . . NSg/I/VB+\n> at    all          . . . . ”\n# NSg/P NSg/I/J/C/Dq . . . . .\n>\n#\n> Even       Gatsby could   happen , without any    particular wonder   .\n# NSg/VB/J/R NPr    NSg/VXB VB     . C/P     I/R/Dq NSg/J      N🅪Sg/VB+ .\n>\n#\n> Roaring noon    . In        a    well        - fanned Forty - second   Street    cellar  I       met Gatsby for\n# Nᴹ/Vg/J NSg/VB+ . NPr/J/R/P D/P+ NSg/VB/J/R+ . VP     NSg/J . NSg/VB/J NSg/VB/J+ NSg/VB+ ISg/#r+ VP  NPr    R/C/P\n> lunch    . Blinking away the brightness of the street    outside   , my  eyes    picked him\n# N🅪Sg/VB+ . Nᴹ/Vg/J  VB/J D   Nᴹ         P  D+  NSg/VB/J+ Nᴹ/VB/J/P . D$+ NPl/V3+ VP/J   ISg+\n> out          obscurely in        the anteroom , talking to another man       .\n# NSg/VB/J/R/P R         NPr/J/R/P D   NSg      . Nᴹ/Vg/J P  I/D     NPr/VB/J+ .\n>\n#\n> “ Mr   . Carraway , this    is  my  friend    Mr   . Wolfshiem . ”\n# . NSg+ . ?        . I/Ddem+ VL3 D$+ NPr/VB/J+ NSg+ . ?         . .\n>\n#\n> A   small    , flat     - nosed Jew       raised his     large head      and  regarded me       with two fine\n# D/P NPr/VB/J . NSg/VB/J . VP/J  NPr/VB/J+ VP/J   ISg/D$+ NSg/J NPr/VB/J+ VB/C VP/J     NPr/ISg+ P    NSg NSg/VB/J\n> growths of hair     which luxuriated in        either nostril . After a    moment I       discovered\n# NPl     P  N🅪Sg/VB+ I/C+  VP/J       NPr/J/R/P I/C    NSg     . P     D/P+ NSg+   ISg/#r+ VP/J\n> his     tiny   eyes    in        the half      - darkness .\n# ISg/D$+ NSg/J+ NPl/V3+ NPr/J/R/P D+  N🅪Sg/J/P+ . Nᴹ+      .\n>\n#\n> “ So          I       took one     look   at    him  , ” said Mr   . Wolfshiem , shaking my  hand    earnestly , “ and\n# . NSg/I/J/R/C ISg/#r+ VPt  NSg/I/J NSg/VB NSg/P ISg+ . . VP/J NSg+ . ?         . Nᴹ/Vg/J D$+ NSg/VB+ R         . . VB/C\n> what   do  you    think  I       did  ? ”\n# NSg/I+ VXB ISgPl+ NSg/VB ISg/#r+ VXPt . .\n>\n#\n> “ What   ? ” I       inquired politely .\n# . NSg/I+ . . ISg/#r+ VP/J     R        .\n>\n#\n> But     evidently he       was  not     addressing me       , for   he       dropped my  hand    and  covered\n# NSg/C/P R         NPr/ISg+ VLPt NSg/R/C Nᴹ/Vg/J    NPr/ISg+ . R/C/P NPr/ISg+ VP/J    D$+ NSg/VB+ VB/C VP/J\n> Gatsby with his     expressive nose    .\n# NPr    P    ISg/D$+ NSg/J      NSg/VB+ .\n>\n#\n> “ I       handed the money   to Katspaugh and  I       sid : ‘          All          right    , Katspaugh , don’t pay      him\n# . ISg/#r+ VP/J   D+  N🅪Sg/J+ P  ?         VB/C ISg/#r+ NPr . Unlintable NSg/I/J/C/Dq NPr/VB/J . ?         . VXB   NSg/VB/J ISg+\n> a   penny   till       he       shuts  his     mouth   . ’ He       shut      it       then      and  there . ”\n# D/P NPr/VB+ NSg/VB/C/P NPr/ISg+ NPl/V3 ISg/D$+ NSg/VB+ . . NPr/ISg+ NSg/VBP/J NPr/ISg+ NSg/J/R/C VB/C R     . .\n>\n#\n> Gatsby took an  arm      of each of us       and  moved forward  into the restaurant ,\n# NPr    VPt  D/P NSg/VB/J P  Dq   P  NPr/IPl+ VB/C VP/J  NSg/VB/J P    D   NSg+       .\n> whereupon Mr   . Wolfshiem swallowed a   new   sentence he       was  starting and  lapsed into\n# C         NSg+ . ?         VP/J      D/P NSg/J NSg/VB+  NPr/ISg+ VLPt Nᴹ/Vg/J  VB/C VP/J   P\n> a   somnambulatory abstraction .\n# D/P ?              N🅪Sg+       .\n>\n#\n> “ Highballs ? ” asked the head      waiter  .\n# . NPl/V3    . . VP/J  D+  NPr/VB/J+ NSg/VB+ .\n>\n#\n> “ This    is  a   nice  restaurant here , ” said Mr   . Wolfshiem , looking at    the\n# . I/Ddem+ VL3 D/P NPr/J NSg        J/R  . . VP/J NSg+ . ?         . Nᴹ/Vg/J NSg/P D\n> Presbyterian nymphs on  the ceiling . “ But     I       like         across the street    better     ! ”\n# NSg/J        NPl/VB J/P D   NSg/VB+ . . NSg/C/P ISg/#r+ NSg/VB/J/C/P NSg/P  D+  NSg/VB/J+ NSg/VXB/JC . .\n>\n#\n> “ Yes    , highballs , ” agreed Gatsby , and  then      to Mr  . Wolfshiem : “ It’s too hot      over\n# . NPl/VB . NPl/V3    . . VP/J   NPr    . VB/C NSg/J/R/C P  NSg . ?         . . K    R   NSg/VB/J NSg/J/P\n> there . ”\n# R     . .\n>\n#\n> “ Hot      and  small    — yes    , ” said Mr   . Wolfshiem , “ but     full     of memories . ”\n# . NSg/VB/J VB/C NPr/VB/J . NPl/VB . . VP/J NSg+ . ?         . . NSg/C/P NSg/VB/J P  NPl+     . .\n>\n#\n> “ What   place    is  that          ? ” I       asked .\n# . NSg/I+ N🅪Sg/VB+ VL3 NSg/I/C/Ddem+ . . ISg/#r+ VP/J  .\n>\n#\n> “ The old   Metropole . ”\n# . D   NSg/J ?         . .\n>\n#\n> “ The old   Metropole , ” brooded Mr   . Wolfshiem gloomily . “ Filled with faces   dead     and\n# . D   NSg/J ?         . . VP/J    NSg+ . ?         R        . . VP/J   P    NPl/V3+ NSg/VB/J VB/C\n> gone    . Filled with friends   gone    now       forever . I       can’t forget so          long     as    I       live the\n# VPp/J/P . VP/J   P    NPrPl/V3+ VPp/J/P NSg/J/R/C NSg/J   . ISg/#r+ VXB   VB     NSg/I/J/R/C NPr/VB/J R/C/P ISg/#r+ VB/J D\n> night    they shot      Rosy     Rosenthal there . It       was  six of us       at    the table   , and  Rosy\n# N🅪Sg/VB+ IPl+ NSg/VP/J+ NSg/VB/J NPr       R     . NPr/ISg+ VLPt NSg P  NPr/IPl+ NSg/P D+  NSg/VB+ . VB/C NSg/VB/J\n> had eat and  drunk      a    lot     all           evening    . When    it       was  almost morning   the waiter  came\n# VP  VB  VB/C NSg/VPp/J+ D/P+ NPr/VB+ NSg/I/J/C/Dq+ N🅪Sg/Vg/J+ . NSg/I/C NPr/ISg+ VLPt R      N🅪Sg/Vg/J D+  NSg/VB+ NSg/VPt/P\n> up         to him  with a    funny  look    and  says   somebody wants  to speak  to him  outside   .\n# NSg/VB/J/P P  ISg+ P    D/P+ NSg/J+ NSg/VB+ VB/C NPl/V3 NSg/I+   NPl/V3 P  NSg/VB P  ISg+ Nᴹ/VB/J/P .\n> ‘          All          right    , ’ says   Rosy     , and  begins to get    up         , and  I       pulled him  down        in        his\n# Unlintable NSg/I/J/C/Dq NPr/VB/J . . NPl/V3 NSg/VB/J . VB/C NPl/V3 P  NSg/VB NSg/VB/J/P . VB/C ISg/#r+ VP/J   ISg+ N🅪Sg/VB/J/P NPr/J/R/P ISg/D$+\n> chair   .\n# NSg/VB+ .\n>\n#\n> “ ‘          Let     the bastards come       in        here if    they want   you    , Rosy     , but     don’t you    , so          help\n# . Unlintable NSg/VBP D   NPl/V3   NSg/VBPp/P NPr/J/R/P J/R  NSg/C IPl+ NSg/VB ISgPl+ . NSg/VB/J . NSg/C/P VXB   ISgPl+ . NSg/I/J/R/C NSg/VB\n> me       , move   outside   this   room       . ’\n# NPr/ISg+ . NSg/VB Nᴹ/VB/J/P I/Ddem N🅪Sg/VB/J+ . .\n>\n#\n> “ It       was  four o’clock in        the morning    then      , and  if    we’d of raised the blinds  we’d\n# . NPr/ISg+ VLPt NSg  R       NPr/J/R/P D+  N🅪Sg/Vg/J+ NSg/J/R/C . VB/C NSg/C K    P  VP/J   D+  NPl/V3+ K\n> of seen    daylight . ”\n# P  NSg/VPp N🅪Sg/VB  . .\n>\n#\n> “ Did  he       go       ? ” I       asked innocently .\n# . VXPt NPr/ISg+ NSg/VB/J . . ISg/#r+ VP/J  R          .\n>\n#\n> “ Sure he       went    . ” Mr   . Wolfshiem’s nose    flashed at    me       indignantly . “ He       turned\n# . J    NPr/ISg+ NSg/VPt . . NSg+ . ?           NSg/VB+ VP/J    NSg/P NPr/ISg+ R           . . NPr/ISg+ VP/J\n> around in        the door    and  says   : ‘          Don’t let     that         waiter  take   away my  coffee     ! ’ Then\n# J/P    NPr/J/R/P D+  NSg/VB+ VB/C NPl/V3 . Unlintable VXB   NSg/VBP NSg/I/C/Ddem NSg/VB+ NSg/VB VB/J D$+ N🅪Sg/VB/J+ . . NSg/J/R/C\n> he       went    out          on  the sidewalk , and  they shot      him  three times   in        his     full      belly   and\n# NPr/ISg+ NSg/VPt NSg/VB/J/R/P J/P D+  NSg+     . VB/C IPl+ NSg/VP/J+ ISg+ NSg+  NPl/V3+ NPr/J/R/P ISg/D$+ NSg/VB/J+ NSg/VB+ VB/C\n> drove   away . ”\n# NSg/VPt VB/J . .\n>\n#\n> “ Four of them     were     electrocuted , ” I       said , remembering .\n# . NSg  P  NSg/IPl+ NSg/VLPt VP/J         . . ISg/#r+ VP/J . Nᴹ/Vg/J     .\n>\n#\n> “ Five , with Becker . ” His     nostrils turned to me       in        an   interested way    . “ I\n# . NSg  . P    NPr    . . ISg/D$+ NPl+     VP/J   P  NPr/ISg+ NPr/J/R/P D/P+ VP/J+      NSg/J+ . . ISg/#r+\n> understand you’re looking for   a   business gonnegtion . ”\n# VB         K      Nᴹ/Vg/J R/C/P D/P N🅪Sg/J+  ?          . .\n>\n#\n> The juxtaposition of these  two remarks was  startling . Gatsby answered for   me       :\n# D   NSg/VB        P  I/Ddem NSg NPl/V3+ VLPt Nᴹ/Vg/J   . NPr    VP/J     R/C/P NPr/ISg+ .\n>\n#\n> “ Oh     , no       , ” he       exclaimed , ‘          ‘          this   isn’t   the man       . ”\n# . NPr/VB . NSg/Dq/P . . NPr/ISg+ VP/J      . Unlintable Unlintable I/Ddem NSg/VX3 D+  NPr/VB/J+ . .\n>\n#\n> “ No       ? ” Mr   . Wolfshiem seemed disappointed .\n# . NSg/Dq/P . . NSg+ . ?         VP/J   VP/J         .\n>\n#\n> “ This    is  just a   friend    . I       told you    we’d talk    about that         some     other    time       . ”\n# . I/Ddem+ VL3 J/R  D/P NPr/VB/J+ . ISg/#r+ VP   ISgPl+ K    N🅪Sg/VB J/P   NSg/I/C/Ddem I/J/R/Dq NSg/VB/J N🅪Sg/VB/J+ . .\n>\n#\n> “ I       beg    your pardon , ” said Mr   . Wolfshiem , “ I       had a   wrong      man       . ”\n# . ISg/#r+ NSg/VB D$+  NSg/VB . . VP/J NSg+ . ?         . . ISg/#r+ VP  D/P NSg/VB/J/R NPr/VB/J+ . .\n>\n#\n> A    succulent hash    arrived , and  Mr   . Wolfshiem , forgetting the more         sentimental\n# D/P+ NSg/J+    NSg/VB+ VP/J    . VB/C NSg+ . ?         . NSg/Vg     D   NPr/I/J/R/Dq J\n> atmosphere of the old   Metropole , began to eat with ferocious delicacy . His     eyes    ,\n# N🅪Sg       P  D   NSg/J ?         . VPt   P  VB  P    J         NSg+     . ISg/D$+ NPl/V3+ .\n> meanwhile , roved very slowly all          around the room       — he       completed the arc       by    turning\n# NSg       . VP/J  J/R  R      NSg/I/J/C/Dq J/P    D   N🅪Sg/VB/J+ . NPr/ISg+ VP/J      D   NPr/VB/J+ NSg/P Nᴹ/Vg/J\n> to inspect the people  directly behind  . I       think  that          , except for   my  presence , he\n# P  VB      D   NPl/VB+ R/C      NSg/J/P . ISg/#r+ NSg/VB NSg/I/C/Ddem+ . VB/C/P R/C/P D$+ N🅪Sg/VB+ . NPr/ISg+\n> would have    taken one     short       glance  beneath our own       table   .\n# VXB   NSg/VXB VPp/J NSg/I/J NPr/VB/J/P+ NSg/VB+ P       D$+ NSg/VB/J+ NSg/VB+ .\n>\n#\n> “ Look   here , old    sport   , ” said Gatsby , leaning toward me       , “ I’m afraid I       made you    a\n# . NSg/VB J/R  . NSg/J+ NSg/VB+ . . VP/J NPr    . Nᴹ/Vg/J J/P    NPr/ISg+ . . K   J      ISg/#r+ VP   ISgPl+ D/P\n> little     angry this   morning    in        the car  . ”\n# NPr/I/J/Dq VB/J  I/Ddem N🅪Sg/Vg/J+ NPr/J/R/P D   NSg+ . .\n>\n#\n> There was  the smile   again , but     this    time       I       held out          against it       .\n# R+    VLPt D+  NSg/VB+ P     . NSg/C/P I/Ddem+ N🅪Sg/VB/J+ ISg/#r+ VP   NSg/VB/J/R/P C/P     NPr/ISg+ .\n>\n#\n> “ I       don’t like         mysteries , ” I       answered , “ and  I       don’t understand why    you    won’t come\n# . ISg/#r+ VXB   NSg/VB/J/C/P NPl+      . . ISg/#r+ VP/J     . . VB/C ISg/#r+ VXB   VB         NSg/VB ISgPl+ VXB   NSg/VBPp/P\n> out          frankly and  tell   me       what   you    want   . Why    has it       all          got to come       through Miss\n# NSg/VB/J/R/P R       VB/C NPr/VB NPr/ISg+ NSg/I+ ISgPl+ NSg/VB . NSg/VB V3  NPr/ISg+ NSg/I/J/C/Dq VP  P  NSg/VBPp/P NSg/J/P NSg/VB\n> Baker ? ”\n# NPr+  . .\n>\n#\n> “ Oh     , it’s nothing  underhand , ” he       assured  me       . “ Miss   Baker’s a   great sportswoman ,\n# . NPr/VB . K    NSg/I/J+ NSg/VB/J  . . NPr/ISg+ NSg/VP/J NPr/ISg+ . . NSg/VB NPr$    D/P NSg/J NSg         .\n> you    know , and  she’d never do  anything  that          wasn’t all          right    . ”\n# ISgPl+ VB   . VB/C K     R     VXB NSg/I/VB+ NSg/I/C/Ddem+ VPt    NSg/I/J/C/Dq NPr/VB/J . .\n>\n#\n> Suddenly he       looked at    his     watch  , jumped up         , and  hurried from the room       , leaving\n# R        NPr/ISg+ VP/J   NSg/P ISg/D$+ NSg/VB . VP/J   NSg/VB/J/P . VB/C VP/J    P    D+  N🅪Sg/VB/J+ . Nᴹ/Vg/J\n> me       with Mr   . Wolfshiem at    the table   .\n# NPr/ISg+ P    NSg+ . ?         NSg/P D   NSg/VB+ .\n>\n#\n> “ He       has to telephone , ” said Mr   . Wolfshiem , following   him  with his     eyes    . “ Fine\n# . NPr/ISg+ V3  P  NSg/VB    . . VP/J NSg+ . ?         . N🅪Sg/Vg/J/P ISg+ P    ISg/D$+ NPl/V3+ . . NSg/VB/J\n> fellow , isn’t   he       ? Handsome to look   at    and  a    perfect   gentleman . ”\n# NSg    . NSg/VX3 NPr/ISg+ . VB/J     P  NSg/VB NSg/P VB/C D/P+ NSg/VB/J+ NSg/J+    . .\n>\n#\n> “ Yes    . ”\n# . NPl/VB . .\n>\n#\n> “ He’s an  Oggsford man       . ”\n# . NPr$ D/P ?        NPr/VB/J+ . .\n>\n#\n> “ Oh     ! ”\n# . NPr/VB . .\n>\n#\n> “ He       went    to Oggsford College in        England . You    know Oggsford College ? ”\n# . NPr/ISg+ NSg/VPt P  ?        NSg+    NPr/J/R/P NPr+    . ISgPl+ VB   ?        NSg+    . .\n>\n#\n> “ I’ve heard of it       . ”\n# . K    VP/J  P  NPr/ISg+ . .\n>\n#\n> “ It’s one     of the most         famous colleges in        the world   . ”\n# . K    NSg/I/J P  D   NSg/I/J/R/Dq VB/J   NPl+     NPr/J/R/P D   NSg/VB+ . .\n>\n#\n> “ Have    you    known Gatsby for   a    long     time       ? ” I       inquired .\n# . NSg/VXB ISgPl+ VPp/J NPr    R/C/P D/P+ NPr/VB/J N🅪Sg/VB/J+ . . ISg/#r+ VP/J     .\n>\n#\n> “ Several years , ” he       answered in        a    gratified way    .\n# . J/Dq+   NPl+  . . NPr/ISg+ VP/J     NPr/J/R/P D/P+ VP/J+     NSg/J+ .\n>\n#\n> “ I       made the pleasure of his     acquaintance just after the war      . But     I       knew I       had\n# . ISg/#r+ VP   D   NSg/VB   P  ISg/D$+ NSg+         J/R  P     D+  N🅪Sg/VB+ . NSg/C/P ISg/#r+ VPt  ISg/#r+ VP\n> discovered a   man      of fine      breeding after I       talked with him  an   hour . I       said to\n# VP/J       D/P NPr/VB/J P  NSg/VB/J+ Nᴹ/Vg/J+ P     ISg/#r+ VP/J   P    ISg+ D/P+ NSg+ . ISg/#r+ VP/J P\n> myself : ‘          There’s the kind  of man       you’d like         to take   home      and  introduce to your\n# ISg+   . Unlintable K       D   NSg/J P  NPr/VB/J+ K     NSg/VB/J/C/P P  NSg/VB NSg/VB/J+ VB/C VB        P  D$+\n> mother   and  sister  . ’ ” He       paused . “ I       see    you’re looking at    my  cuff   buttons . ”\n# NSg/VB/J VB/C NSg/VB+ . . . NPr/ISg+ VP/J   . . ISg/#r+ NSg/VB K      Nᴹ/Vg/J NSg/P D$+ NSg/VB NPl/V3+ . .\n>\n#\n> I       hadn’t been     looking at    them     , but     I       did  now       . They were     composed of oddly\n# ISg/#r+ VPt    NSg/VLPp Nᴹ/Vg/J NSg/P NSg/IPl+ . NSg/C/P ISg/#r+ VXPt NSg/J/R/C . IPl+ NSg/VLPt VP/J     P  R\n> familiar pieces of ivory     .\n# NSg/J    NPl/V3 P  NPr🅪Sg/J+ .\n>\n#\n> “ Finest specimens of human    molars , ” he       informed me       .\n# . JS     NPl       P  NSg/VB/J NPl    . . NPr/ISg+ VP/J     NPr/ISg+ .\n>\n#\n> “ Well       ! ” I       inspected them     . “ That’s a   very interesting idea . ”\n# . NSg/VB/J/R . . ISg/#r+ VP/J      NSg/IPl+ . . NSg$   D/P J/R  Vg/J        NSg+ . .\n>\n#\n> “ Yeah . ” He       flipped his     sleeves up         under   his     coat    . “ Yeah , Gatsby’s very careful\n# . NSg  . . NPr/ISg+ VP      ISg/D$+ NPl/V3+ NSg/VB/J/P NSg/J/P ISg/D$+ NSg/VB+ . . NSg  . NPr$     J/R  J\n> about women . He       would never so          much         as    look   at    a   friend’s wife      . ”\n# J/P   NPl+  . NPr/ISg+ VXB   R     NSg/I/J/R/C NSg/I/J/R/Dq R/C/P NSg/VB NSg/P D/P NPr$     NSg/VB/J+ . .\n>\n#\n> When    the subject  of this   instinctive trust     returned to the table   and  sat      down\n# NSg/I/C D   NSg/VB/J P  I/Ddem J           N🅪Sg/VB/J VP/J     P  D   NSg/VB+ VB/C NSg/VP/J N🅪Sg/VB/J/P\n> Mr   . Wolfshiem drank   his     coffee     with a   jerk    and  got to his     feet .\n# NSg+ . ?         NSg/VPt ISg/D$+ N🅪Sg/VB/J+ P    D/P NSg/VB+ VB/C VP  P  ISg/D$+ NPl+ .\n>\n#\n> “ I       have    enjoyed my  lunch    , ” he       said , “ and  I’m going   to run      off        from you    two young\n# . ISg/#r+ NSg/VXB VP/J    D$+ N🅪Sg/VB+ . . NPr/ISg+ VP/J . . VB/C K   Nᴹ/Vg/J P  NSg/VBPp NSg/VB/J/P P    ISgPl+ NSg NPr/VB/J\n> men  before I       outstay my  welcome  . ”\n# NPl+ C/P    ISg/#r+ VB      D$+ NSg/VB/J . .\n>\n#\n> “ Don’t hurry   , Meyer , ” said Gatsby , without enthusiasm . Mr   . Wolfshiem raised his\n# . VXB   NSg/VB+ . NPr   . . VP/J NPr    . C/P     NSg+       . NSg+ . ?         VP/J   ISg/D$+\n> hand    in        a   sort    of benediction .\n# NSg/VB+ NPr/J/R/P D/P NSg/VB+ P  N🅪Sg        .\n>\n#\n> “ You’re very polite , but     I       belong to another generation , ” he       announced solemnly .\n# . K      J/R  VB/J   . NSg/C/P ISg/#r+ VB/P   P  I/D     NSg+       . . NPr/ISg+ VP/J      R        .\n> “ You    sit    here and  discuss your sports and  your young     ladies  and  your — ” He\n# . ISgPl+ NSg/VB J/R  VB/C NSg/VB  D$+  NPl/V3 VB/C D$+  NPr/VB/J+ NPl/V3+ VB/C D$+  . . NPr/ISg+\n> supplied an  imaginary noun    with another wave   of his     hand    . “ As    for   me       , I       am        fifty\n# VP/J     D/P NSg/J     NSg/VB+ P    I/D     NSg/VB P  ISg/D$+ NSg/VB+ . . R/C/P R/C/P NPr/ISg+ . ISg/#r+ NPr/VLB/J NSg+\n> years old   , and  I       won’t impose myself on  you    any    longer . ”\n# NPl+  NSg/J . VB/C ISg/#r+ VXB   NSg/VB ISg+   J/P ISgPl+ I/R/Dq NSg/JC . .\n>\n#\n> As    he       shook     hands   and  turned away his     tragic nose    was  trembling . I       wondered if    I\n# R/C/P NPr/ISg+ NSg/VPt/J NPl/V3+ VB/C VP/J   VB/J ISg/D$+ NSg/J+ NSg/VB+ VLPt Nᴹ/Vg/J   . ISg/#r+ VP/J     NSg/C ISg/#r+\n> had said anything  to offend him  .\n# VP  VP/J NSg/I/VB+ P  VB     ISg+ .\n>\n#\n> “ He       becomes very sentimental sometimes , ” explained Gatsby . “ This    is  one     of his\n# . NPr/ISg+ V3      J/R  J           R         . . VP/J      NPr    . . I/Ddem+ VL3 NSg/I/J P  ISg/D$+\n> sentimental days . He’s quite a   character around New   York — a   denizen of Broadway . ”\n# J+          NPl+ . NPr$ R     D/P N🅪Sg/VB+  J/P    NSg/J NPr+ . D/P NSg/VB  P  NPr/J+   . .\n>\n#\n> “ Who    is  he       , anyhow , an   actor ? ”\n# . NPr/I+ VL3 NPr/ISg+ . J      . D/P+ NSg+  . .\n>\n#\n> “ No       . ”\n# . NSg/Dq/P . .\n>\n#\n> “ A    dentist ? ”\n# . D/P+ NSg+    . .\n>\n#\n> “ Meyer Wolfshiem ? No       , he’s a   gambler . ” Gatsby hesitated , then      added coolly :\n# . NPr   ?         . NSg/Dq/P . NPr$ D/P NSg     . . NPr    VP/J      . NSg/J/R/C VP/J  R      .\n> “ He’s the man       who    fixed the World’s Series back     in        1919 . ”\n# . NPr$ D   NPr/VB/J+ NPr/I+ VP/J  D   NSg$    NSgPl+ NSg/VB/J NPr/J/R/P #    . .\n>\n#\n> “ Fixed the World’s Series ? ” I       repeated .\n# . VP/J  D   NSg$    NSgPl+ . . ISg/#r+ VP/J     .\n>\n#\n> The idea staggered me       . I       remembered , of course  , that         the World’s Series had been\n# D+  NSg+ VP/J      NPr/ISg+ . ISg/#r+ VP/J       . P  NSg/VB+ . NSg/I/C/Ddem D   NSg$    NSgPl+ VP  NSg/VLPp\n> fixed in        1919 , but     if    I       had thought of it       at    all          I       would have    thought of it       as    a\n# VP/J  NPr/J/R/P #    . NSg/C/P NSg/C ISg/#r+ VP  N🅪Sg/VP P  NPr/ISg+ NSg/P NSg/I/J/C/Dq ISg/#r+ VXB   NSg/VXB N🅪Sg/VP P  NPr/ISg+ R/C/P D/P\n> thing that          merely happened , the end    of some     inevitable chain    . It       never occurred\n# NSg+  NSg/I/C/Ddem+ R      VP/J     . D   NSg/VB P  I/J/R/Dq NSg/J      N🅪Sg/VB+ . NPr/ISg+ R     VP\n> to me       that          one      man       could   start  to play    with the faith  of fifty million\n# P  NPr/ISg+ NSg/I/C/Ddem+ NSg/I/J+ NPr/VB/J+ NSg/VXB NSg/VB P  N🅪Sg/VB P    D   NPr🅪Sg P  NSg   NSg+\n> people  — with the single   - mindedness of a    burglar blowing a   safe     .\n# NPl/VB+ . P    D   NSg/VB/J . Nᴹ         P  D/P+ NSg/VB+ Nᴹ/Vg/J D/P NSg/VB/J .\n>\n#\n> “ How   did  he       happen to do  that          ? ” I       asked after a    minute    .\n# . NSg/C VXPt NPr/ISg+ VB     P  VXB NSg/I/C/Ddem+ . . ISg/#r+ VP/J  P     D/P+ NSg/VB/J+ .\n>\n#\n> “ He       just saw     the opportunity . ”\n# . NPr/ISg+ J/R  NSg/VPt D+  N🅪Sg+       . .\n>\n#\n> “ Why    isn’t   he       in        jail     ? ”\n# . NSg/VB NSg/VX3 NPr/ISg+ NPr/J/R/P N🅪Sg/VB+ . .\n>\n#\n> “ They can’t get    him  , old   sport   . He’s a    smart    man       . ”\n# . IPl+ VXB   NSg/VB ISg+ . NSg/J NSg/VB+ . NPr$ D/P+ NSg/VB/J NPr/VB/J+ . .\n>\n#\n> I       insisted on  paying  the check     . As    the waiter  brought my  change   I       caught sight\n# ISg/#r+ VP/J     J/P Nᴹ/Vg/J D+  NSg/VB/J+ . R/C/P D+  NSg/VB+ VP      D$+ N🅪Sg/VB+ ISg/#r+ VP/J   N🅪Sg/VB\n> of Tom     Buchanan across the crowded room       .\n# P  NPr/VB+ NPr+     NSg/P  D+  VP/J+   N🅪Sg/VB/J+ .\n>\n#\n> “ Come       along with me       for   a    minute    , ” I       said ; “ I’ve got to say    hello  to some     one      . ”\n# . NSg/VBPp/P P     P    NPr/ISg+ R/C/P D/P+ NSg/VB/J+ . . ISg/#r+ VP/J . . K    VP  P  NSg/VB NSg/VB P  I/J/R/Dq NSg/I/J+ . .\n>\n#\n> When    he       saw     us       Tom     jumped up         and  took half      a   dozen steps   in        our direction .\n# NSg/I/C NPr/ISg+ NSg/VPt NPr/IPl+ NPr/VB+ VP/J   NSg/VB/J/P VB/C VPt  N🅪Sg/J/P+ D/P NSg   NPl/V3+ NPr/J/R/P D$+ N🅪Sg+     .\n>\n#\n> “ Where’ve you    been     ? ” he       demanded eagerly . “ Daisy’s furious because you    haven’t\n# . ?        ISgPl+ NSg/VLPp . . NPr/ISg+ VP/J     R       . . NPr$    J       C/P     ISgPl+ VXB\n> called up         . ”\n# VP/J   NSg/VB/J/P . .\n>\n#\n> “ This    is  Mr   . Gatsby , Mr   . Buchanan . ”\n# . I/Ddem+ VL3 NSg+ . NPr    . NSg+ . NPr+     . .\n>\n#\n> They shook     hands   briefly , and  a   strained , unfamiliar look   of embarrassment came\n# IPl+ NSg/VPt/J NPl/V3+ R       . VB/C D/P VP/J     . NSg/J      NSg/VB P  N🅪Sg+         NSg/VPt/P\n> over    Gatsby’s face    .\n# NSg/J/P NPr$     NSg/VB+ .\n>\n#\n> “ How’ve you    been     , anyhow ? ” demanded Tom    of me       . “ How’d you    happen to come       up         this\n# . ?      ISgPl+ NSg/VLPp . J      . . VP/J     NPr/VB P  NPr/ISg+ . . K     ISgPl+ VB     P  NSg/VBPp/P NSg/VB/J/P I/Ddem\n> far      to eat ? ”\n# NSg/VB/J P  VB  . .\n>\n#\n> “ I’ve been     having  lunch    with Mr   . Gatsby . ”\n# . K    NSg/VLPp Nᴹ/Vg/J N🅪Sg/VB+ P    NSg+ . NPr    . .\n>\n#\n> I       turned toward Mr   . Gatsby , but     he       was  no       longer there .\n# ISg/#r+ VP/J   J/P    NSg+ . NPr    . NSg/C/P NPr/ISg+ VLPt NSg/Dq/P NSg/JC R     .\n>\n#\n> One      October day     in        nineteen - seventeen —\n# NSg/I/J+ NPr/VB+ NPr🅪Sg+ NPr/J/R/P NSg      . NSg       .\n>\n#\n> ( said Jordan Baker that          afternoon , sitting  up         very straight   on  a   straight   chair\n# . VP/J NPr+   NPr+  NSg/I/C/Ddem+ N🅪Sg+     . NSg/Vg/J NSg/VB/J/P J/R  NSg/VB/J/R J/P D/P NSg/VB/J/R NSg/VB\n> in        the tea      - garden   at    the Plaza Hotel )\n# NPr/J/R/P D   N🅪Sg/VB+ . NSg/VB/J NSg/P D+  NSg+  NSg+  .\n>\n#\n> — I       was  walking along from one     place    to another , half      on  the sidewalks and  half\n# . ISg/#r+ VLPt Nᴹ/Vg/J P     P    NSg/I/J N🅪Sg/VB+ P  I/D     . N🅪Sg/J/P+ J/P D   NPl       VB/C N🅪Sg/J/P+\n> on  the lawns  . I       was  happier on  the lawns  because I       had on  shoes   from England\n# J/P D   NPl/V3 . ISg/#r+ VLPt NSg/JC  J/P D   NPl/V3 C/P     ISg/#r+ VP  J/P NPl/V3+ P    NPr\n> with rubber    nobs   on  the soles   that          bit     into the soft  ground     . I       had on  a   new\n# P    NSg/VB/J+ NPl/V3 J/P D   NPl/V3+ NSg/I/C/Ddem+ NSg/VPt P    D   NSg/J N🅪Sg/VB/J+ . ISg/#r+ VP  J/P D/P NSg/J\n> plaid    skirt  also that          blew      a   little     in        the wind     , and  whenever this   happened the\n# NSg/VB/J NSg/VB R/C  NSg/I/C/Ddem+ NSg/VPt/J D/P NPr/I/J/Dq NPr/J/R/P D   N🅪Sg/VB+ . VB/C C        I/Ddem VP/J     D\n> red    , white       , and  blue      banners in        front    of all          the houses  stretched out          stiff    and\n# N🅪Sg/J . NPr🅪Sg/VB/J . VB/C N🅪Sg/VB/J NPl/V3+ NPr/J/R/P NSg/VB/J P  NSg/I/J/C/Dq D   NPl/V3+ VP/J      NSg/VB/J/R/P NSg/VB/J VB/C\n> said tut    - tut    - tut    - tut    , in        a   disapproving way    .\n# VP/J NPr/VB . NPr/VB . NPr/VB . NPr/VB . NPr/J/R/P D/P Nᴹ/Vg/J      NSg/J+ .\n>\n#\n> The largest of the banners and  the largest of the lawns  belonged to Daisy Fay’s\n# D   JS      P  D+  NPl/V3+ VB/C D   JS      P  D   NPl/V3 VP/J     P  NPr   NPr$\n> house   . She  was  just eighteen , two  years older than me       , and  by    far      the most\n# NPr/VB+ . ISg+ VLPt J/R  NSg      . NSg+ NPl+  JC    C/P  NPr/ISg+ . VB/C NSg/P NSg/VB/J D   NSg/I/J/R/Dq\n> popular of all          the young     girls   in        Louisville . She  dressed in        white       , and  had a\n# NSg/J   P  NSg/I/J/C/Dq D+  NPr/VB/J+ NPl/V3+ NPr/J/R/P NPr        . ISg+ VP/J    NPr/J/R/P NPr🅪Sg/VB/J . VB/C VP  D/P\n> little     white       roadster , and  all          day     long     the telephone rang in        her     house   and\n# NPr/I/J/Dq NPr🅪Sg/VB/J NSg      . VB/C NSg/I/J/C/Dq NPr🅪Sg+ NPr/VB/J D   NSg/VB+   VPt  NPr/J/R/P ISg/D$+ NPr/VB+ VB/C\n> excited young    officers from Camp      Taylor demanded the privilege of monopolizing\n# VP/J    NPr/VB/J NPl/V3   P    NSg/VB/J+ NPr+   VP/J     D   NSg/VB    P  Nᴹ/Vg/J\n> her     that         night    . “ Anyways , for   an   hour ! ”\n# ISg/D$+ NSg/I/C/Ddem N🅪Sg/VB+ . . R/NoAm  . R/C/P D/P+ NSg+ . .\n>\n#\n> When    I       came      opposite her     house   that          morning    her     white       roadster was  beside the\n# NSg/I/C ISg/#r+ NSg/VPt/P NSg/J/P+ ISg/D$+ NPr/VB+ NSg/I/C/Ddem+ N🅪Sg/Vg/J+ ISg/D$+ NPr🅪Sg/VB/J NSg      VLPt P      D\n> curb    , and  she  was  sitting  in        it       with a   lieutenant I       had never seen    before . They\n# NSg/VB+ . VB/C ISg+ VLPt NSg/Vg/J NPr/J/R/P NPr/ISg+ P    D/P NSg/J+     ISg/#r+ VP  R     NSg/VPp C/P    . IPl+\n> were     so          engrossed in        each other    that         she  didn’t see    me       until I       was  five feet\n# NSg/VLPt NSg/I/J/R/C VP/J      NPr/J/R/P Dq   NSg/VB/J NSg/I/C/Ddem ISg+ VXPt   NSg/VB NPr/ISg+ C/P   ISg/#r+ VLPt NSg  NPl+\n> away .\n# VB/J .\n>\n#\n> “ Hello  , Jordan , ” she  called unexpectedly . “ Please come       here . ”\n# . NSg/VB . NPr+   . . ISg+ VP/J   R            . . VB     NSg/VBPp/P J/R  . .\n>\n#\n> I       was  flattered that         she  wanted to speak  to me       , because of all           the older girls   I\n# ISg/#r+ VLPt VP/J      NSg/I/C/Ddem ISg+ VP/J   P  NSg/VB P  NPr/ISg+ . C/P     P  NSg/I/J/C/Dq+ D+  JC+   NPl/V3+ ISg/#r+\n> admired her     most         . She  asked me       if    I       was  going   to the Red     Cross       and  make\n# VP/J    ISg/D$+ NSg/I/J/R/Dq . ISg+ VP/J  NPr/ISg+ NSg/C ISg/#r+ VLPt Nᴹ/Vg/J P  D+  N🅪Sg/J+ NPr/VB/J/P+ VB/C NSg/VB\n> bandages . I       was  . Well       , then      , would I       tell   them     that         she  couldn’t come       that         day     ?\n# NPl/V3   . ISg/#r+ VLPt . NSg/VB/J/R . NSg/J/R/C . VXB   ISg/#r+ NPr/VB NSg/IPl+ NSg/I/C/Ddem ISg+ VXB      NSg/VBPp/P NSg/I/C/Ddem NPr🅪Sg+ .\n> The officer looked at    Daisy while      she  was  speaking , in        a   way    that         every young\n# D+  NSg/VB+ VP/J   NSg/P NPr+  NSg/VB/C/P ISg+ VLPt Nᴹ/Vg/J  . NPr/J/R/P D/P NSg/J+ NSg/I/C/Ddem Dq+   NPr/VB/J+\n> girl    wants  to be       looked at    sometime , and  because it       seemed romantic to me       I       have\n# NSg/VB+ NPl/V3 P  NSg/VLXB VP/J   NSg/P J        . VB/C C/P     NPr/ISg+ VP/J   NSg/J    P  NPr/ISg+ ISg/#r+ NSg/VXB\n> remembered the incident ever since . His     name    was  Jay  Gatsby , and  I       didn’t lay\n# VP/J       D+  NSg/J+   J/R  C/P   . ISg/D$+ NSg/VB+ VLPt NPr+ NPr    . VB/C ISg/#r+ VXPt   NSg/VBPt/J\n> eyes    on  him  again for   over    four years — even       after I'd met him  on  Long     Island  I\n# NPl/V3+ J/P ISg+ P     R/C/P NSg/J/P NSg  NPl+  . NSg/VB/J/R P     K   VP  ISg+ J/P NPr/VB/J NSg/VB+ ISg/#r+\n> didn’t realize      it       was  the same man       .\n# VXPt   VB/Comm/NoAm NPr/ISg+ VLPt D   I/J  NPr/VB/J+ .\n>\n#\n> That          was  nineteen - seventeen . By    the next     year I       had a   few      beaux myself , and  I\n# NSg/I/C/Ddem+ VLPt NSg      . NSg       . NSg/P D+  NSg/J/P+ NSg+ ISg/#r+ VP  D/P NSg/I/Dq ?     ISg+   . VB/C ISg/#r+\n> began to play    in        tournaments , so          I       didn’t see    Daisy very often . She  went    with a\n# VPt   P  N🅪Sg/VB NPr/J/R/P NPl         . NSg/I/J/R/C ISg/#r+ VXPt   NSg/VB NPr+  J/R  R     . ISg+ NSg/VPt P    D/P\n> slightly older crowd   — when    she  went    with anyone at    all          . Wild      rumors     were\n# R        JC+   NSg/VB+ . NSg/I/C ISg+ NSg/VPt P    NSg/I+ NSg/P NSg/I/J/C/Dq . NSg/VB/J+ NPl/V3/Am+ NSg/VLPt\n> circulating about her     — how   her     mother    had found  her     packing her     bag     one      winter\n# Nᴹ/Vg/J     J/P   ISg/D$+ . NSg/C ISg/D$+ NSg/VB/J+ VP  NSg/VP ISg/D$+ Nᴹ/Vg/J ISg/D$+ NSg/VB+ NSg/I/J+ N🅪Sg/VB+\n> night    to go       to New    York and  say    good     - by    to a    soldier   who    was  going   overseas . She\n# N🅪Sg/VB+ P  NSg/VB/J P  NSg/J+ NPr+ VB/C NSg/VB NPr/VB/J . NSg/P P  D/P+ NSg/VB/J+ NPr/I+ VLPt Nᴹ/Vg/J J/R      . ISg+\n> was  effectually prevented , but     she  wasn’t on  speaking terms   with her     family  for\n# VLPt R           VP/J      . NSg/C/P ISg+ VPt    J/P Nᴹ/Vg/J  NPl/V3+ P    ISg/D$+ N🅪Sg/J+ R/C/P\n> several weeks  . After that         she  didn’t play    around with the soldiers any    more         , but\n# J/Dq+   NPrPl+ . P     NSg/I/C/Ddem ISg+ VXPt   N🅪Sg/VB J/P    P    D   NPl/V3+  I/R/Dq NPr/I/J/R/Dq . NSg/C/P\n> only  with a   few      flat     - footed , shortsighted young    men  in        town , who    couldn’t get\n# J/R/C P    D/P NSg/I/Dq NSg/VB/J . VP/J   . J            NPr/VB/J NPl+ NPr/J/R/P NSg+ . NPr/I+ VXB      NSg/VB\n> into the army at    all          .\n# P    D   NSg+ NSg/P NSg/I/J/C/Dq .\n>\n#\n> By    the next     autumn     she  was  gay      again , gay      as    ever . She  had a   début after the\n# NSg/P D+  NSg/J/P+ NPr🅪Sg/VB+ ISg+ VLPt NPr/VB/J P     . NPr/VB/J R/C/P J/R  . ISg+ VP  D/P ?     P     D\n> armistice , and  in        February she  was  presumably engaged to a   man       from New   Orleans .\n# NPr🅪Sg    . VB/C NPr/J/R/P NPr+     ISg+ VLPt R          VP/J    P  D/P NPr/VB/J+ P    NSg/J NPr+    .\n> In        June she  married  Tom     Buchanan of Chicago , with more         pomp   and  circumstance\n# NPr/J/R/P NPr+ ISg+ NSg/VP/J NPr/VB+ NPr      P  NPr+    . P    NPr/I/J/R/Dq NSg/VB VB/C NSg/VB\n> than Louisville ever knew before . He       came      down        with a   hundred people  in        four\n# C/P  NPr        J/R  VPt  C/P    . NPr/ISg+ NSg/VPt/P N🅪Sg/VB/J/P P    D/P NSg     NPl/VB+ NPr/J/R/P NSg+\n> private   cars , and  hired a   whole floor  of the Muhlbach Hotel , and  the day     before\n# NSg/VB/J+ NPl+ . VB/C VP/J  D/P NSg/J NSg/VB P  D   ?        NSg+  . VB/C D   NPr🅪Sg+ C/P\n> the wedding he       gave her     a   string of pearls  valued at    three hundred and  fifty\n# D   NSg/Vg+ NPr/ISg+ VPt  ISg/D$+ D/P NSg/VB P  NPl/V3+ VP/J   NSg/P NSg   NSg     VB/C NSg\n> thousand dollars .\n# NSg      NPl+    .\n>\n#\n> I       was  a   bridesmaid . I       came      into her     room       half      an   hour before the bridal dinner   ,\n# ISg/#r+ VLPt D/P NSg/VB     . ISg/#r+ NSg/VPt/P P    ISg/D$+ N🅪Sg/VB/J+ N🅪Sg/J/P+ D/P+ NSg+ C/P    D+  NSg/J+ N🅪Sg/VB+ .\n> and  found  her     lying   on  her     bed        as    lovely as    the June night    in        her     flowered\n# VB/C NSg/VP ISg/D$+ Nᴹ/Vg/J J/P ISg/D$+ NSg/VBP/J+ R/C/P NSg/J  R/C/P D+  NPr+ N🅪Sg/VB+ NPr/J/R/P ISg/D$+ VP/J+\n> dress   — and  as    drunk     as    a    monkey  . She  had a   bottle of Sauterne in        one     hand   and  a\n# NSg/VB+ . VB/C R/C/P NSg/VPp/J R/C/P D/P+ NSg/VB+ . ISg+ VP  D/P NSg/VB P  ?        NPr/J/R/P NSg/I/J NSg/VB VB/C D/P\n> letter  in        the other    .\n# NSg/VB+ NPr/J/R/P D   NSg/VB/J .\n>\n#\n> “ ’ Gratulate me       , ” she  muttered . “ Never had a    drink   before , but     oh     how   I       do  enjoy\n# . . ?         NPr/ISg+ . . ISg+ VP/J     . . R     VP  D/P+ NSg/VB+ C/P    . NSg/C/P NPr/VB NSg/C ISg/#r+ VXB VB\n> it       . ”\n# NPr/ISg+ . .\n>\n#\n> “ What’s the matter   , Daisy ? ”\n# . K      D   N🅪Sg/VB+ . NPr+  . .\n>\n#\n> I       was  scared , I       can     tell   you    ; I’d never seen    a   girl    like         that          before .\n# ISg/#r+ VLPt VP/J   . ISg/#r+ NPr/VXB NPr/VB ISgPl+ . K   R     NSg/VPp D/P NSg/VB+ NSg/VB/J/C/P NSg/I/C/Ddem+ C/P    .\n>\n#\n> “ Here , deares ’ . ” She  groped around in        a   wastebasket she  had with her     on  the bed\n# . J/R  . ?      . . . ISg+ VP/J   J/P    NPr/J/R/P D/P NSg/VB      ISg+ VP  P    ISg/D$+ J/P D   NSg/VBP/J+\n> and  pulled out          the string of pearls  . ‘          Take   ’ em       down        - stairs and  give   ’ em       back     to\n# VB/C VP/J   NSg/VB/J/R/P D   NSg/VB P  NPl/V3+ . Unlintable NSg/VB . NSg/I/J+ N🅪Sg/VB/J/P . NPl+   VB/C NSg/VB . NSg/I/J+ NSg/VB/J P\n> whoever they belong to . Tell   ’ em       all          Daisy’s change   ’ her     mine      . Say    : ‘          Daisy’s\n# I+      IPl+ VB/P   P  . NPr/VB . NSg/I/J+ NSg/I/J/C/Dq NPr$    N🅪Sg/VB+ . ISg/D$+ NSg/I/VB+ . NSg/VB . Unlintable NPr$\n> change   ’ her     mine      ! ’ ”\n# N🅪Sg/VB+ . ISg/D$+ NSg/I/VB+ . . .\n>\n#\n> She  began to cry    — she  cried and  cried . I       rushed out          and  found  her     mother’s maid ,\n# ISg+ VPt   P  NSg/VB . ISg+ VP/J  VB/C VP/J  . ISg/#r+ VP/J   NSg/VB/J/R/P VB/C NSg/VP ISg/D$+ NSg$     NSg+ .\n> and  we   locked the door    and  got her     into a   cold  bath    . She  wouldn’t let     go       of the\n# VB/C IPl+ VP/J   D   NSg/VB+ VB/C VP  ISg/D$+ P    D/P NSg/J NSg/VB+ . ISg+ VXB      NSg/VBP NSg/VB/J P  D\n> letter  . She  took it       into the tub     with her     and  squeezed it       up         into a    wet       ball    ,\n# NSg/VB+ . ISg+ VPt  NPr/ISg+ P    D+  NSg/VB+ P    ISg/D$+ VB/C VP/J     NPr/ISg+ NSg/VB/J/P P    D/P+ NSg/VP/J+ NPr/VB+ .\n> and  only  let     me       leave  it       in        the soap     - dish    when    she  saw     that         it       was  coming  to\n# VB/C J/R/C NSg/VBP NPr/ISg+ NSg/VB NPr/ISg+ NPr/J/R/P D+  N🅪Sg/VB+ . NSg/VB+ NSg/I/C ISg+ NSg/VPt NSg/I/C/Ddem NPr/ISg+ VLPt Nᴹ/Vg/J P\n> pieces like         snow       .\n# NPl/V3 NSg/VB/J/C/P NPr🅪Sg/VB+ .\n>\n#\n> But     she  didn’t say    another word    . We   gave her     spirits of ammonia and  put     ice        on\n# NSg/C/P ISg+ VXPt   NSg/VB I/D     NSg/VB+ . IPl+ VPt  ISg/D$+ NPl/V3  P  Nᴹ+     VB/C NSg/VBP NPr🅪Sg/VB+ J/P\n> her     forehead and  hooked her     back     into her     dress   , and  half     an   hour later , when    we\n# ISg/D$+ NSg+     VB/C VP/J   ISg/D$+ NSg/VB/J P    ISg/D$+ NSg/VB+ . VB/C N🅪Sg/J/P D/P+ NSg+ JC    . NSg/I/C IPl+\n> walked out          of the room       , the pearls  were     around her     neck   and  the incident was\n# VP/J   NSg/VB/J/R/P P  D+  N🅪Sg/VB/J+ . D+  NPl/V3+ NSg/VLPt J/P    ISg/D$+ NSg/VB VB/C D+  NSg/J+   VLPt\n> over    . Next     day     at    five o’clock she  married  Tom     Buchanan without so          much         as    a\n# NSg/J/P . NSg/J/P+ NPr🅪Sg+ NSg/P NSg  R       ISg+ NSg/VP/J NPr/VB+ NPr+     C/P     NSg/I/J/R/C NSg/I/J/R/Dq R/C/P D/P\n> shiver , and  started off        on  a   three months ’ trip      to the South     Seas .\n# NSg/VB . VB/C VP/J    NSg/VB/J/P J/P D/P NSg   NPl+   . NSg/VB/J+ P  D   NPr/VB/J+ NPl+ .\n>\n#\n> I       saw     them     in        Santa Barbara when    they came      back     , and  I       thought I’d never seen    a\n# ISg/#r+ NSg/VPt NSg/IPl+ NPr/J/R/P NPr+  NPr+    NSg/I/C IPl+ NSg/VPt/P NSg/VB/J . VB/C ISg/#r+ N🅪Sg/VP K   R     NSg/VPp D/P\n> girl    so          mad      about her     husband . If    he       left     the room      for   a    minute    she’d look\n# NSg/VB+ NSg/I/J/R/C NSg/VB/J J/P   ISg/D$+ NSg/VB+ . NSg/C NPr/ISg+ NPr/VP/J D   N🅪Sg/VB/J R/C/P D/P+ NSg/VB/J+ K     NSg/VB\n> around uneasily , and  say    : ‘          ‘          Where’s Tom     gone    ? ” and  wear   the most         abstracted\n# J/P    R        . VB/C NSg/VB . Unlintable Unlintable NSg$    NPr/VB+ VPp/J/P . . VB/C NSg/VB D   NSg/I/J/R/Dq VP/J\n> expression until she  saw     him  coming  in        the door    . She  used to sit    on  the sand\n# N🅪Sg+      C/P   ISg+ NSg/VPt ISg+ Nᴹ/Vg/J NPr/J/R/P D   NSg/VB+ . ISg+ VP/J P  NSg/VB J/P D   NSg/VB/J+\n> with his     head      in        her     lap       by    the hour , rubbing her     fingers over    his     eyes    and\n# P    ISg/D$+ NPr/VB/J+ NPr/J/R/P ISg/D$+ NSg/VB/J+ NSg/P D+  NSg+ . NSg/Vg  ISg/D$+ NPl/V3+ NSg/J/P ISg/D$+ NPl/V3+ VB/C\n> looking at    him  with unfathomable delight    . It       was  touching  to see    them\n# Nᴹ/Vg/J NSg/P ISg+ P    J+           N🅪Sg/VB/J+ . NPr/ISg+ VLPt Nᴹ/Vg/J/P P  NSg/VB NSg/IPl+\n> together — it       made you    laugh  in        a   hushed , fascinated way    . That          was  in        August    . A\n# J        . NPr/ISg+ VP   ISgPl+ NSg/VB NPr/J/R/P D/P VP/J   . VP/J       NSg/J+ . NSg/I/C/Ddem+ VLPt NPr/J/R/P NPr/VB/J+ . D/P+\n> week   after I       left     Santa Barbara Tom     ran     into a    wagon   on  the Ventura road    one\n# NSg/J+ P     ISg/#r+ NPr/VP/J NPr+  NPr+    NPr/VB+ NSg/VPt P    D/P+ NSg/VB+ J/P D   ?       N🅪Sg/J+ NSg/I/J\n> night    , and  ripped a   front     wheel   off        his     car  . The girl    who    was  with him  got into\n# N🅪Sg/VB+ . VB/C VP/J   D/P NSg/VB/J+ NSg/VB+ NSg/VB/J/P ISg/D$+ NSg+ . D+  NSg/VB+ NPr/I+ VLPt P    ISg+ VP  P\n> the papers  , too , because her     arm       was  broken — she  was  one     of the chambermaids in\n# D+  NPl/V3+ . R   . C/P     ISg/D$+ NSg/VB/J+ VLPt VPp/J  . ISg+ VLPt NSg/I/J P  D   NPl          NPr/J/R/P\n> the Santa Barbara Hotel .\n# D   NPr+  NPr+    NSg+  .\n>\n#\n> The next     April Daisy had her     little      girl    , and  they went    to France for   a    year . I\n# D+  NSg/J/P+ NPr+  NPr+  VP  ISg/D$+ NPr/I/J/Dq+ NSg/VB+ . VB/C IPl+ NSg/VPt P  NPr+   R/C/P D/P+ NSg+ . ISg/#r+\n> saw     them     one     spring  in        Cannes , and  later in        Deauville , and  then      they came      back\n# NSg/VPt NSg/IPl+ NSg/I/J N🅪Sg/VB NPr/J/R/P NPr+   . VB/C JC    NPr/J/R/P ?         . VB/C NSg/J/R/C IPl+ NSg/VPt/P NSg/VB/J\n> to Chicago to settle down        . Daisy was  popular in        Chicago , as    you    know . They moved\n# P  NPr+    P  NSg/VB N🅪Sg/VB/J/P . NPr+  VLPt NSg/J   NPr/J/R/P NPr+    . R/C/P ISgPl+ VB   . IPl+ VP/J\n> with a    fast        crowd   , all          of them     young    and  rich     and  wild     , but     she  came      out          with an\n# P    D/P+ NSg/VB/J/R+ NSg/VB+ . NSg/I/J/C/Dq P  NSg/IPl+ NPr/VB/J VB/C NPr/VB/J VB/C NSg/VB/J . NSg/C/P ISg+ NSg/VPt/P NSg/VB/J/R/P P    D/P\n> absolutely perfect   reputation . Perhaps because she  doesn’t drink   . It’s a   great\n# R          NSg/VB/J+ NSg+       . NSg/R   C/P     ISg+ VX3     NSg/VB+ . K    D/P NSg/J\n> advantage not     to drink  among hard     - drinking people  . You    can     hold     your tongue   ,\n# N🅪Sg/VB+  NSg/R/C P  NSg/VB P     N🅪Sg/J/R . Nᴹ/Vg/J  NPl/VB+ . ISgPl+ NPr/VXB NSg/VB/J D$+  N🅪Sg/VB+ .\n> and  , moreover , you    can     time      any    little     irregularity of your own      so          that\n# VB/C . R        . ISgPl+ NPr/VXB N🅪Sg/VB/J I/R/Dq NPr/I/J/Dq NSg          P  D$+  NSg/VB/J NSg/I/J/R/C NSg/I/C/Ddem\n> everybody else    is  so          blind    that         they don’t see    or    care     . Perhaps Daisy never went\n# NSg/I+    NSg/J/C VL3 NSg/I/J/R/C NSg/VB/J NSg/I/C/Ddem IPl+ VXB   NSg/VB NPr/C N🅪Sg/VB+ . NSg/R   NPr+  R     NSg/VPt\n> in        for   amour at    all          — and  yet      there’s something in        that         voice  of hers . . . .\n# NPr/J/R/P R/C/P NSg   NSg/P NSg/I/J/C/Dq . VB/C NSg/VB/C K       NSg/I/J+  NPr/J/R/P NSg/I/C/Ddem NSg/VB P  ISg+ . . . .\n>\n#\n> Well       , about six  weeks  ago , she  heard the name    Gatsby for   the first time       in\n# NSg/VB/J/R . J/P   NSg+ NPrPl+ J/P . ISg+ VP/J  D+  NSg/VB+ NPr    R/C/P D   NSg/J N🅪Sg/VB/J+ NPr/J/R/P\n> years . It       was  when    I       asked you    — do  you    remember ? — if    you    knew Gatsby in        West      Egg      .\n# NPl+  . NPr/ISg+ VLPt NSg/I/C ISg/#r+ VP/J  ISgPl+ . VXB ISgPl+ NSg/VB   . . NSg/C ISgPl+ VPt  NPr    NPr/J/R/P NPr/VB/J+ N🅪Sg/VB+ .\n> After you    had gone    home      she  came      into my  room       and  woke     me       up         , and  said : “ What\n# P     ISgPl+ VP  VPp/J/P NSg/VB/J+ ISg+ NSg/VPt/P P    D$+ N🅪Sg/VB/J+ VB/C NSg/VB/J NPr/ISg+ NSg/VB/J/P . VB/C VP/J . . NSg/I+\n> Gatsby ? ” and  when    I       described him  — I       was  half     asleep — she  said in        the strangest\n# NPr    . . VB/C NSg/I/C ISg/#r+ VP/J      ISg+ . ISg/#r+ VLPt N🅪Sg/J/P J      . ISg+ VP/J NPr/J/R/P D   JS\n> voice   that          it       must    be       the man       she  used to know . It       wasn’t until then      that         I\n# NSg/VB+ NSg/I/C/Ddem+ NPr/ISg+ NSg/VXB NSg/VLXB D   NPr/VB/J+ ISg+ VP/J P  VB   . NPr/ISg+ VPt    C/P   NSg/J/R/C NSg/I/C/Ddem ISg/#r+\n> connected this   Gatsby with the officer in        her     white       car  .\n# VP/J      I/Ddem NPr    P    D   NSg/VB+ NPr/J/R/P ISg/D$+ NPr🅪Sg/VB/J NSg+ .\n>\n#\n> When    Jordan Baker had finished telling all           this    we   had left     the Plaza for   half\n# NSg/I/C NPr+   NPr+  VP  VP/J     Nᴹ/Vg/J NSg/I/J/C/Dq+ I/Ddem+ IPl+ VP  NPr/VP/J D   NSg   R/C/P N🅪Sg/J/P+\n> an   hour and  were     driving in        a    victoria through Central Park    . The sun     had gone\n# D/P+ NSg+ VB/C NSg/VLPt Nᴹ/Vg/J NPr/J/R/P D/P+ NPr+     NSg/J/P NPr/J+  NPr/VB+ . D+  NPr/VB+ VP  VPp/J/P\n> down        behind  the tall  apartments of the movie stars   in        the West      Fifties , and  the\n# N🅪Sg/VB/J/P NSg/J/P D   NSg/J NPl        P  D+  NSg+  NPl/V3+ NPr/J/R/P D+  NPr/VB/J+ NPl     . VB/C D\n> clear    voices of children , already gathered like         crickets on  the grass      , rose\n# NSg/VB/J NPl/V3 P  NPl+     . R       VP/J     NSg/VB/J/C/P NPl/V3+  J/P D   NPr🅪Sg/VB+ . NPr/VPt/J\n> through the hot      twilight :\n# NSg/J/P D   NSg/VB/J Nᴹ/VB/J+ .\n>\n#\n> “ I’m the Sheik  of Araby . Your love      belongs to me       . At    night    when    you’re asleep\n# . K   D   NSg/Ca P  NPr   . D$+  NPr🅪Sg/VB V3      P  NPr/ISg+ . NSg/P N🅪Sg/VB+ NSg/I/C K      J\n> Into your tent    I’ll creep   — ”\n# P    D$+  NSg/VB+ K    NSg/VB+ . .\n>\n#\n> “ It       was  a   strange  coincidence , ” I       said .\n# . NPr/ISg+ VLPt D/P NSg/VB/J N🅪Sg        . . ISg/#r+ VP/J .\n>\n#\n> “ But     it       wasn’t a   coincidence at    all          . ”\n# . NSg/C/P NPr/ISg+ VPt    D/P N🅪Sg+       NSg/P NSg/I/J/C/Dq . .\n>\n#\n> “ Why    not     ? ”\n# . NSg/VB NSg/R/C . .\n>\n#\n> “ Gatsby bought that         house   so          that         Daisy would be       just across the bay       . ”\n# . NPr    NSg/VP NSg/I/C/Ddem NPr/VB+ NSg/I/J/R/C NSg/I/C/Ddem NPr+  VXB   NSg/VLXB J/R  NSg/P  D   NSg/VB/J+ . .\n>\n#\n> Then      it       had not     been     merely the stars   to which he       had aspired on  that         June\n# NSg/J/R/C NPr/ISg+ VP  NSg/R/C NSg/VLPp R      D+  NPl/V3+ P  I/C+  NPr/ISg+ VP  VP/J    J/P NSg/I/C/Ddem NPr+\n> night    . He       came      alive to me       , delivered suddenly from the womb   of his     purposeless\n# N🅪Sg/VB+ . NPr/ISg+ NSg/VPt/P J     P  NPr/ISg+ . VP/J      R        P    D   NSg/VB P  ISg/D$+ J\n> splendor .\n# NSg/Am   .\n>\n#\n> “ He       wants  to know , ” continued Jordan , “ if    you'll invite Daisy to your house  some\n# . NPr/ISg+ NPl/V3 P  VB   . . VP/J      NPr+   . . NSg/C K      NSg/VB NPr+  P  D$+  NPr/VB I/J/R/Dq\n> afternoon and  then      let     him  come       over    . ”\n# N🅪Sg+     VB/C NSg/J/R/C NSg/VBP ISg+ NSg/VBPp/P NSg/J/P . .\n>\n#\n> The modesty of the demand   shook     me       . He       had waited five years and  bought a\n# D   Nᴹ      P  D   N🅪Sg/VB+ NSg/VPt/J NPr/ISg+ . NPr/ISg+ VP  VP/J   NSg+ NPl+  VB/C NSg/VP D/P+\n> mansion where   he       dispensed starlight to casual moths   — so          that         he       could   “ come\n# NSg+    NSg/R/C NPr/ISg+ VP/J      NSg       P  NSg/J  NPl/VB+ . NSg/I/J/R/C NSg/I/C/Ddem NPr/ISg+ NSg/VXB . NSg/VBPp/P\n> over    ” some     afternoon to a   stranger’s garden    .\n# NSg/J/P . I/J/R/Dq N🅪Sg+     P  D/P NSg$       NSg/VB/J+ .\n>\n#\n> “ Did  I       have    to know all          this   before he       could   ask    such   a    little      thing ? ”\n# . VXPt ISg/#r+ NSg/VXB P  VB   NSg/I/J/C/Dq I/Ddem C/P    NPr/ISg+ NSg/VXB NSg/VB NSg/I+ D/P+ NPr/I/J/Dq+ NSg+  . .\n>\n#\n> “ He’s afraid , he’s waited so          long     . He       thought you    might    be       offended . You    see    ,\n# . NPr$ J      . NPr$ VP/J   NSg/I/J/R/C NPr/VB/J . NPr/ISg+ N🅪Sg/VP ISgPl+ Nᴹ/VXB/J NSg/VLXB VP/J     . ISgPl+ NSg/VB .\n> he’s regular tough    underneath it       all          . ”\n# NPr$ NSg/J   NSg/VB/J NSg/J/P    NPr/ISg+ NSg/I/J/C/Dq . .\n>\n#\n> Something worried me       .\n# NSg/I/J+  VP/J    NPr/ISg+ .\n>\n#\n> “ Why    didn’t he       ask    you    to arrange a   meeting    ? ”\n# . NSg/VB VXPt   NPr/ISg+ NSg/VB ISgPl+ P  NSg/VB  D/P N🅪Sg/Vg/J+ . .\n>\n#\n> “ He       wants  her     to see    his     house   , ” she  explained . “ And  your house   is  right    next\n# . NPr/ISg+ NPl/V3 ISg/D$+ P  NSg/VB ISg/D$+ NPr/VB+ . . ISg+ VP/J      . . VB/C D$+  NPr/VB+ VL3 NPr/VB/J NSg/J/P+\n> door    . ”\n# NSg/VB+ . .\n>\n#\n> “ Oh     ! ”\n# . NPr/VB . .\n>\n#\n> “ I       think  he       half      expected her     to wander into one     of his     parties , some      night    , ”\n# . ISg/#r+ NSg/VB NPr/ISg+ N🅪Sg/J/P+ NSg/VP/J ISg/D$+ P  NSg/VB P    NSg/I/J P  ISg/D$+ NPl/V3+ . I/J/R/Dq+ N🅪Sg/VB+ . .\n> went    on  Jordan , “ but     she  never did  . Then      he       began asking  people  casually if    they\n# NSg/VPt J/P NPr+   . . NSg/C/P ISg+ R     VXPt . NSg/J/R/C NPr/ISg+ VPt   Nᴹ/Vg/J NPl/VB+ R        NSg/C IPl+\n> knew her     , and  I       was  the first one     he       found  . It       was  that         night   he       sent   for   me       at\n# VPt  ISg/D$+ . VB/C ISg/#r+ VLPt D   NSg/J NSg/I/J NPr/ISg+ NSg/VP . NPr/ISg+ VLPt NSg/I/C/Ddem N🅪Sg/VB NPr/ISg+ NSg/VP R/C/P NPr/ISg+ NSg/P\n> his     dance    , and  you    should have    heard the elaborate way    he       worked up         to it       . Of\n# ISg/D$+ N🅪Sg/VB+ . VB/C ISgPl+ VXB    NSg/VXB VP/J  D+  VB/J+     NSg/J+ NPr/ISg+ VP/J   NSg/VB/J/P P  NPr/ISg+ . P\n> course  , I       immediately suggested a   luncheon in        New    York — and  I       thought he’d go\n# NSg/VB+ . ISg/#r+ R           VP/J      D/P NSg/VB   NPr/J/R/P NSg/J+ NPr+ . VB/C ISg/#r+ N🅪Sg/VP K    NSg/VB/J\n> mad      :\n# NSg/VB/J .\n>\n#\n> “ ‘          I       don’t want   to do  anything  out          of the way    ! ’ he       kept saying    . ‘          I       want   to see\n# . Unlintable ISg/#r+ VXB   NSg/VB P  VXB NSg/I/VB+ NSg/VB/J/R/P P  D   NSg/J+ . . NPr/ISg+ VP   N🅪Sg/Vg/J . Unlintable ISg/#r+ NSg/VB P  NSg/VB\n> her     right     next     door    . ’\n# ISg/D$+ NPr/VB/J+ NSg/J/P+ NSg/VB+ . .\n>\n#\n> “ When    I       said you    were     a   particular friend   of Tom’s , he       started to abandon the\n# . NSg/I/C ISg/#r+ VP/J ISgPl+ NSg/VLPt D/P NSg/J      NPr/VB/J P  NPr$  . NPr/ISg+ VP/J    P  NSg/VB  D\n> whole idea . He       doesn’t know very much         about Tom     , though he       says   he’s read    a\n# NSg/J NSg+ . NPr/ISg+ VX3     VB   J/R  NSg/I/J/R/Dq J/P   NPr/VB+ . C      NPr/ISg+ NPl/V3 NPr$ NSg/VBP D/P\n> Chicago paper     for   years just on  the chance   of catching a   glimpse of Daisy’s\n# NPr+    N🅪Sg/VB/J R/C/P NPl+  J/R  J/P D   NPr/VB/J P  Nᴹ/Vg/J  D/P NSg/VB  P  NPr$\n> name    . ”\n# NSg/VB+ . .\n>\n#\n> It       was  dark     now       , and  as    we   dipped under   a    little      bridge   I       put     my  arm       around\n# NPr/ISg+ VLPt NSg/VB/J NSg/J/R/C . VB/C R/C/P IPl+ VP/J   NSg/J/P D/P+ NPr/I/J/Dq+ N🅪Sg/VB+ ISg/#r+ NSg/VBP D$+ NSg/VB/J+ J/P\n> Jordan’s golden    shoulder and  drew    her     toward me       and  asked her     to dinner  .\n# NPr$     NPr/VB/J+ NSg/VB+  VB/C NPr/VPt ISg/D$+ J/P    NPr/ISg+ VB/C VP/J  ISg/D$+ P  N🅪Sg/VB .\n> Suddenly I       wasn’t thinking of Daisy and  Gatsby any    more         , but     of this   clean    ,\n# R        ISg/#r+ VPt    Nᴹ/Vg/J  P  NPr+  VB/C NPr    I/R/Dq NPr/I/J/R/Dq . NSg/C/P P  I/Ddem NSg/VB/J .\n> hard     , limited  person  , who    dealt in        universal scepticism , and  who    leaned back\n# N🅪Sg/J/R . NSg/VP/J NSg/VB+ . NPr/I+ VB    NPr/J/R/P NSg/J     Nᴹ/Au/Br   . VB/C NPr/I+ VP/J   NSg/VB/J\n> jauntily just within  the circle of my  arm       . A    phrase  began to beat      in        my  ears\n# R        J/R  NSg/J/P D   NSg/VB P  D$+ NSg/VB/J+ . D/P+ NSg/VB+ VPt   P  N🅪Sg/VB/J NPr/J/R/P D$+ NPl/V3+\n> with a   sort   of heady excitement : ‘          ‘          There are only  the pursued , the pursuing , the\n# P    D/P NSg/VB P  J+    NSg+       . Unlintable Unlintable R+    VLB J/R/C D+  VP/J+   . D+  Nᴹ/Vg/J+ . D\n> busy     and  the tired . ”\n# NSg/VB/J VB/C D   VP/J  . .\n>\n#\n> “ And  Daisy ought     to have    something in        her     life     , ” murmured Jordan to me       .\n# . VB/C NPr+  NSg/I/VXB P  NSg/VXB NSg/I/J+  NPr/J/R/P ISg/D$+ N🅪Sg/VB+ . . VP/J     NPr+   P  NPr/ISg+ .\n>\n#\n> “ Does    she  want   to see    Gatsby ? ”\n# . NPl/VX3 ISg+ NSg/VB P  NSg/VB NPr    . .\n>\n#\n> “ She’s not     to know about it       . Gatsby doesn’t want   her     to know . You’re just\n# . K     NSg/R/C P  VB   J/P   NPr/ISg+ . NPr    VX3     NSg/VB ISg/D$+ P  VB   . K      J/R\n> supposed to invite her     to tea     . ”\n# VP/J     P  NSg/VB ISg/D$+ P  N🅪Sg/VB . .\n>\n#\n> We   passed a   barrier of dark      trees   , and  then      the façade of Fifty - ninth    Street   , a\n# IPl+ VP/J   D/P NSg/VB  P  NSg/VB/J+ NPl/V3+ . VB/C NSg/J/R/C D   ?      P  NSg   . NSg/VB/J NSg/VB/J . D/P\n> block  of delicate pale      light      , beamed down        into the park    . Unlike     Gatsby and  Tom\n# NSg/VB P  NSg/J+   NSg/VB/J+ N🅪Sg/VB/J+ . VP/J   N🅪Sg/VB/J/P P    D   NPr/VB+ . NSg/VB/J/P NPr    VB/C NPr/VB+\n> Buchanan , I       had no       girl    whose disembodied face    floated along the dark     cornices\n# NPr+     . ISg/#r+ VP  NSg/Dq/P NSg/VB+ I+    VP/J        NSg/VB+ VP/J    P     D   NSg/VB/J NPl/V3\n> and  blinding signs   , and  so          I       drew    up         the girl    beside me       , tightening my  arms    . Her\n# VB/C Nᴹ/Vg/J  NPl/V3+ . VB/C NSg/I/J/R/C ISg/#r+ NPr/VPt NSg/VB/J/P D   NSg/VB+ P      NPr/ISg+ . Nᴹ/Vg/J    D$+ NPl/V3+ . ISg/D$+\n> wan      , scornful mouth   smiled , and  so          I       drew    her     up         again closer , this   time       to my\n# NSg/VB/J . J        NSg/VB+ VP/J   . VB/C NSg/I/J/R/C ISg/#r+ NPr/VPt ISg/D$+ NSg/VB/J/P P     NSg/JC . I/Ddem N🅪Sg/VB/J+ P  D$+\n> face    .\n# NSg/VB+ .\n>\n#\n>              CHAPTER V\n# HeadingStart NSg/VB+ NSg/P/#r+\n>\n#\n> When    I       came      home      to West      Egg      that          night    I       was  afraid for   a    moment that          my  house\n# NSg/I/C ISg/#r+ NSg/VPt/P NSg/VB/J+ P  NPr/VB/J+ N🅪Sg/VB+ NSg/I/C/Ddem+ N🅪Sg/VB+ ISg/#r+ VLPt J      R/C/P D/P+ NSg+   NSg/I/C/Ddem+ D$+ NPr/VB+\n> was  on  fire       . Two o’clock and  the whole corner of the peninsula was  blazing with\n# VLPt J/P N🅪Sg/VB/J+ . NSg R       VB/C D   NSg/J NSg/VB P  D+  NSg+      VLPt Nᴹ/Vg/J P\n> light      , which fell      unreal on  the shrubbery and  made thin     elongating glints upon\n# N🅪Sg/VB/J+ . I/C+  NSg/VPt/J J      J/P D   NSg       VB/C VP   NSg/VB/J Nᴹ/Vg/J    NPl/V3 P\n> the roadside wires   . Turning a    corner  , I       saw     that         it       was  Gatsby’s house   , lit      from\n# D   NSg/J+   NPl/V3+ . Nᴹ/Vg/J D/P+ NSg/VB+ . ISg/#r+ NSg/VPt NSg/I/C/Ddem NPr/ISg+ VLPt NPr$     NPr/VB+ . NSg/VP/J P\n> tower   to cellar .\n# NSg/VB+ P  NSg/VB .\n>\n#\n> At    first I       thought it       was  another party    , a    wild      rout    that          had resolved itself\n# NSg/P NSg/J ISg/#r+ N🅪Sg/VP NPr/ISg+ VLPt I/D     NSg/VB/J . D/P+ NSg/VB/J+ NSg/VB+ NSg/I/C/Ddem+ VP  VP/J     ISg+\n> into “ hide   - and  - go       - seek   ” or    “ sardines - in        - the - box    ” with all          the house   thrown open\n# P    . NSg/VB . VB/C . NSg/VB/J . NSg/VB . NPr/C . NPl/V3+  . NPr/J/R/P . D   . NSg/VB . P    NSg/I/J/C/Dq D+  NPr/VB+ VPp/J  NSg/VB/J\n> to the game      . But     there wasn’t a   sound      . Only  wind     in        the trees   , which blew      the\n# P  D+  NSg/VB/J+ . NSg/C/P R+    VPt    D/P N🅪Sg/VB/J+ . J/R/C N🅪Sg/VB+ NPr/J/R/P D+  NPl/V3+ . I/C+  NSg/VPt/J D+\n> wires   and  made the lights  go        off        and  on  again as    if    the house   had winked into\n# NPl/V3+ VB/C VP   D+  NPl/V3+ NSg/VB/J+ NSg/VB/J/P VB/C J/P P     R/C/P NSg/C D+  NPr/VB+ VP  VP/J   P\n> the darkness . As    my  taxi    groaned away I       saw     Gatsby walking toward me       across his\n# D+  Nᴹ+      . R/C/P D$+ NSg/VB+ VP/J    VB/J ISg/#r+ NSg/VPt NPr    Nᴹ/Vg/J J/P    NPr/ISg+ NSg/P  ISg/D$+\n> lawn    .\n# NSg/VB+ .\n>\n#\n> “ Your place    looks  like         the World’s Fair     , ” I       said .\n# . D$+  N🅪Sg/VB+ NPl/V3 NSg/VB/J/C/P D   NSg$    NSg/VB/J . . ISg/#r+ VP/J .\n>\n#\n> “ Does    it       ? ” He       turned his     eyes    toward it       absently . “ I       have    been     glancing into\n# . NPl/VX3 NPr/ISg+ . . NPr/ISg+ VP/J   ISg/D$+ NPl/V3+ J/P    NPr/ISg+ R        . . ISg/#r+ NSg/VXB NSg/VLPp Nᴹ/Vg/J  P\n> some     of the rooms   . Let’s go       to Coney Island  , old   sport   . In        my  car  . ”\n# I/J/R/Dq P  D+  NPl/V3+ . NSg$  NSg/VB/J P  ?     NSg/VB+ . NSg/J NSg/VB+ . NPr/J/R/P D$+ NSg+ . .\n>\n#\n> “ It’s too late  . ”\n# . K    R   NSg/J . .\n>\n#\n> “ Well       , suppose we   take   a   plunge  in        the swimming - pool    ? I       haven’t made use     of it\n# . NSg/VB/J/R . VB      IPl+ NSg/VB D/P NSg/VB+ NPr/J/R/P D+  NSg/Vg+  . NSg/VB+ . ISg/#r+ VXB     VP   N🅪Sg/VB P  NPr/ISg+\n> all          summer     . ”\n# NSg/I/J/C/Dq NPr🅪Sg/VB+ . .\n>\n#\n> “ I’ve got to go       to bed       . ”\n# . K    VP  P  NSg/VB/J P  NSg/VBP/J . .\n>\n#\n> “ All          right    . ”\n# . NSg/I/J/C/Dq NPr/VB/J . .\n>\n#\n> He       waited , looking at    me       with suppressed eagerness .\n# NPr/ISg+ VP/J   . Nᴹ/Vg/J NSg/P NPr/ISg+ P    VP/J       NSg       .\n>\n#\n> “ I       talked with Miss   Baker , ” I       said after a    moment . “ I’m going   to call   up         Daisy\n# . ISg/#r+ VP/J   P    NSg/VB NPr+  . . ISg/#r+ VP/J P     D/P+ NSg+   . . K   Nᴹ/Vg/J P  NSg/VB NSg/VB/J/P NPr+\n> to - morrow and  invite her     over    here to tea     . ”\n# P  . NPr/VB VB/C NSg/VB ISg/D$+ NSg/J/P J/R  P  N🅪Sg/VB . .\n>\n#\n> “ Oh     , that’s all          right    , ” he       said carelessly . “ I       don’t want   to put     you    to any\n# . NPr/VB . NSg$   NSg/I/J/C/Dq NPr/VB/J . . NPr/ISg+ VP/J R          . . ISg/#r+ VXB   NSg/VB P  NSg/VBP ISgPl+ P  I/R/Dq\n> trouble  . ”\n# N🅪Sg/VB+ . .\n>\n#\n> “ What   day     would suit   you    ? ”\n# . NSg/I+ NPr🅪Sg+ VXB   NSg/VB ISgPl+ . .\n>\n#\n> “ What   day     would suit   you    ? ” he       corrected me       quickly . “ I       don’t want   to put     you    to\n# . NSg/I+ NPr🅪Sg+ VXB   NSg/VB ISgPl+ . . NPr/ISg+ VP/J      NPr/ISg+ R       . . ISg/#r+ VXB   NSg/VB P  NSg/VBP ISgPl+ P\n> any    trouble  , you    see    . ”\n# I/R/Dq N🅪Sg/VB+ . ISgPl+ NSg/VB . .\n>\n#\n> “ How   about the day     after to - morrow ? ”\n# . NSg/C J/P   D+  NPr🅪Sg+ P     P  . NPr/VB . .\n>\n#\n> He       considered for   a    moment . Then      , with reluctance :\n# NPr/ISg+ VP/J       R/C/P D/P+ NSg+   . NSg/J/R/C . P    NSg+       .\n>\n#\n> “ I       want   to get    the grass      cut       , ” he       said .\n# . ISg/#r+ NSg/VB P  NSg/VB D+  NPr🅪Sg/VB+ NSg/VBP/J . . NPr/ISg+ VP/J .\n>\n#\n> We   both   looked down        at    the grass      — there was  a    sharp     line    where   my  ragged lawn\n# IPl+ I/C/Dq VP/J   N🅪Sg/VB/J/P NSg/P D+  NPr🅪Sg/VB+ . R+    VLPt D/P+ NPr/VB/J+ NSg/VB+ NSg/R/C D$+ VP/J   NSg/VB+\n> ended and  the darker , well       - kept expanse of his     began . I       suspected that         he       meant\n# VP/J  VB/C D   NSg/JC . NSg/VB/J/R . VP   NSg     P  ISg/D$+ VPt   . ISg/#r+ VP/J      NSg/I/C/Ddem NPr/ISg+ VP\n> my  grass      .\n# D$+ NPr🅪Sg/VB+ .\n>\n#\n> “ There’s another little     thing , ” he       said uncertainly , and  hesitated .\n# . K       I/D+    NPr/I/J/Dq NSg+  . . NPr/ISg+ VP/J ?           . VB/C VP/J      .\n>\n#\n> “ Would you    rather     put     it       off        for   a    few       days ? ” I       asked .\n# . VXB   ISgPl+ NPr/VB/J/R NSg/VBP NPr/ISg+ NSg/VB/J/P R/C/P D/P+ NSg/I/Dq+ NPl+ . . ISg/#r+ VP/J  .\n>\n#\n> “ Oh     , it       isn’t   about that          . At    least    — ’ ’ He       fumbled with a   series of beginnings .\n# . NPr/VB . NPr/ISg+ NSg/VX3 J/P   NSg/I/C/Ddem+ . NSg/P NSg/J/Dq . . . NPr/ISg+ VP/J    P    D/P NSgPl  P  NPl/V3+    .\n> “ Why    , I       thought — why    , look   here , old    sport   , you    don’t make   much         money   , do  you    ? ”\n# . NSg/VB . ISg/#r+ N🅪Sg/VP . NSg/VB . NSg/VB J/R  . NSg/J+ NSg/VB+ . ISgPl+ VXB   NSg/VB NSg/I/J/R/Dq N🅪Sg/J+ . VXB ISgPl+ . .\n>\n#\n> “ Not     very much         . ”\n# . NSg/R/C J/R  NSg/I/J/R/Dq . .\n>\n#\n> This   seemed to reassure him  and  he       continued more         confidently .\n# I/Ddem VP/J   P  VB       ISg+ VB/C NPr/ISg+ VP/J      NPr/I/J/R/Dq R           .\n>\n#\n> “ I       thought you    didn’t , if    you'll pardon my  — you    see    , I       carry  on  a   little     business\n# . ISg/#r+ N🅪Sg/VP ISgPl+ VXPt   . NSg/C K      NSg/VB D$+ . ISgPl+ NSg/VB . ISg/#r+ NSg/VB J/P D/P NPr/I/J/Dq N🅪Sg/J+\n> on  the side      , a   sort   of side      line    , you    understand . And  I       thought that         if    you\n# J/P D   NSg/VB/J+ . D/P NSg/VB P  NSg/VB/J+ NSg/VB+ . ISgPl+ VB         . VB/C ISg/#r+ N🅪Sg/VP NSg/I/C/Ddem NSg/C ISgPl+\n> don’t make   very much         — You’re selling bonds   , aren’t you    , old   sport   ? ”\n# VXB   NSg/VB J/R  NSg/I/J/R/Dq . K      Nᴹ/Vg/J NPl/V3+ . VB     ISgPl+ . NSg/J NSg/VB+ . .\n>\n#\n> “ Trying  to . ”\n# . Nᴹ/Vg/J P  . .\n>\n#\n> “ Well       , this    would interest you    . It       wouldn’t take   up         much         of your time       and  you\n# . NSg/VB/J/R . I/Ddem+ VXB   N🅪Sg/VB  ISgPl+ . NPr/ISg+ VXB      NSg/VB NSg/VB/J/P NSg/I/J/R/Dq P  D$+  N🅪Sg/VB/J+ VB/C ISgPl+\n> might    pick   up         a   nice  bit     of money   . It       happens to be       a   rather     confidential sort\n# Nᴹ/VXB/J NSg/VB NSg/VB/J/P D/P NPr/J NSg/VPt P  N🅪Sg/J+ . NPr/ISg+ V3      P  NSg/VLXB D/P NPr/VB/J/R J            NSg/VB\n> of thing . ”\n# P  NSg+  . .\n>\n#\n> I       realize      now       that         under   different circumstances that          conversation might    have\n# ISg/#r+ VB/Comm/NoAm NSg/J/R/C NSg/I/C/Ddem NSg/J/P NSg/J+    NPl/V3+       NSg/I/C/Ddem+ N🅪Sg/VB+     Nᴹ/VXB/J NSg/VXB\n> been     one     of the crises of my  life     . But     , because the offer      was  obviously and\n# NSg/VLPp NSg/I/J P  D   NPl    P  D$+ N🅪Sg/VB+ . NSg/C/P . C/P     D+  NSg/VB/JC+ VLPt R         VB/C\n> tactlessly for   a   service to be       rendered , I       had no       choice  except to cut       him  off\n# R          R/C/P D/P NSg/VB+ P  NSg/VLXB VP/J     . ISg/#r+ VP  NSg/Dq/P N🅪Sg/J+ VB/C/P P  NSg/VBP/J ISg+ NSg/VB/J/P\n> there .\n# R     .\n>\n#\n> “ I’ve got my  hands   full     , ” I       said . “ I’m much         obliged but     I       couldn’t take   on  any\n# . K    VP  D$+ NPl/V3+ NSg/VB/J . . ISg/#r+ VP/J . . K   NSg/I/J/R/Dq VP/J    NSg/C/P ISg/#r+ VXB      NSg/VB J/P I/R/Dq\n> more         work     . ”\n# NPr/I/J/R/Dq N🅪Sg/VB+ . .\n>\n#\n> “ You    wouldn’t have    to do  any    business with Wolfshiem . ” Evidently he       thought that\n# . ISgPl+ VXB      NSg/VXB P  VXB I/R/Dq N🅪Sg/J+  P    ?         . . R         NPr/ISg+ N🅪Sg/VP NSg/I/C/Ddem\n> I       was  shying  away from the “ gonnegtion ” mentioned at    lunch    , but     I       assured  him  he\n# ISg/#r+ VLPt Nᴹ/Vg/J VB/J P    D   . ?          . VP/J      NSg/P N🅪Sg/VB+ . NSg/C/P ISg/#r+ NSg/VP/J ISg+ NPr/ISg+\n> was  wrong      . He       waited a    moment longer , hoping  I’d begin  a    conversation , but     I       was\n# VLPt NSg/VB/J/R . NPr/ISg+ VP/J   D/P+ NSg+   NSg/JC . Nᴹ/Vg/J K   NSg/VB D/P+ N🅪Sg/VB+     . NSg/C/P ISg/#r+ VLPt\n> too absorbed to be       responsive , so          he       went    unwillingly home      .\n# R   VP/J     P  NSg/VLXB J          . NSg/I/J/R/C NPr/ISg+ NSg/VPt R           NSg/VB/J+ .\n>\n#\n> The evening    had made me       light      - headed and  happy    ; I       think  I       walked into a    deep\n# D+  N🅪Sg/Vg/J+ VP  VP   NPr/ISg+ N🅪Sg/VB/J+ . VP/J   VB/C NSg/VB/J . ISg/#r+ NSg/VB ISg/#r+ VP/J   P    D/P+ NSg/J+\n> sleep    as    I       entered my  front     door    . So          I       don’t know whether or    not     Gatsby went    to\n# N🅪Sg/VB+ R/C/P ISg/#r+ VP/J    D$+ NSg/VB/J+ NSg/VB+ . NSg/I/J/R/C ISg/#r+ VXB   VB   I/C     NPr/C NSg/R/C NPr    NSg/VPt P\n> Coney Island  , or    for   how   many       hours he       “ glanced into rooms   ” while      his     house\n# ?     NSg/VB+ . NPr/C R/C/P NSg/C NSg/I/J/Dq NPl+  NPr/ISg+ . VP/J    P    NPl/V3+ . NSg/VB/C/P ISg/D$+ NPr/VB+\n> blazed gaudily on  . I       called up         Daisy from the office  next     morning    , and  invited\n# VP/J   R       J/P . ISg/#r+ VP/J   NSg/VB/J/P NPr+  P    D+  NSg/VB+ NSg/J/P+ N🅪Sg/Vg/J+ . VB/C NSg/VP/J\n> her     to come       to tea     .\n# ISg/D$+ P  NSg/VBPp/P P  N🅪Sg/VB .\n>\n#\n> “ Don’t bring Tom     , ” I       warned her     .\n# . VXB   VB    NPr/VB+ . . ISg/#r+ VP/J   ISg/D$+ .\n>\n#\n> “ What   ? ”\n# . NSg/I+ . .\n>\n#\n> “ Don’t bring Tom     . ”\n# . VXB   VB    NPr/VB+ . .\n>\n#\n> “ Who    is  ‘          Tom     ’ ? ” she  asked innocently .\n# . NPr/I+ VL3 Unlintable NPr/VB+ . . . ISg+ VP/J  R          .\n>\n#\n> The day     agreed upon was  pouring rain     . At    eleven o’clock a    man       in        a   raincoat ,\n# D+  NPr🅪Sg+ VP/J   P    VLPt Nᴹ/Vg/J N🅪Sg/VB+ . NSg/P NSg    R       D/P+ NPr/VB/J+ NPr/J/R/P D/P NSg      .\n> dragging a   lawn    - mower , tapped at    my  front     door    and  said that         Mr   . Gatsby had sent\n# NSg/Vg/J D/P NSg/VB+ . NSg   . VP/J   NSg/P D$+ NSg/VB/J+ NSg/VB+ VB/C VP/J NSg/I/C/Ddem NSg+ . NPr    VP  NSg/VP\n> him  over    to cut       my  grass      . This   reminded me       that         I       had forgotten to tell   my  Finn\n# ISg+ NSg/J/P P  NSg/VBP/J D$+ NPr🅪Sg/VB+ . I/Ddem VP/J     NPr/ISg+ NSg/I/C/Ddem ISg/#r+ VP  NSg/VPp/J P  NPr/VB D$+ NPr+\n> to come       back     , so          I       drove   into West      Egg      Village to search  for   her     among soggy\n# P  NSg/VBPp/P NSg/VB/J . NSg/I/J/R/C ISg/#r+ NSg/VPt P    NPr/VB/J+ N🅪Sg/VB+ NSg+    P  N🅪Sg/VB R/C/P ISg/D$+ P     J\n> whitewashed alleys and  to buy    some     cups   and  lemons and  flowers   .\n# VP/J        NPl    VB/C P  NSg/VB I/J/R/Dq NPl/V3 VB/C NPl/V3 VB/C NPrPl/V3+ .\n>\n#\n> The flowers   were     unnecessary , for   at    two o’clock a   greenhouse arrived from\n# D+  NPrPl/V3+ NSg/VLPt J           . R/C/P NSg/P NSg R       D/P NSg/VB+    VP/J    P\n> Gatsby’s , with innumerable receptacles to contain it       . An   hour later the front\n# NPr$     . P    J           NPl         P  VB      NPr/ISg+ . D/P+ NSg+ JC    D+  NSg/VB/J+\n> door    opened nervously , and  Gatsby , in        a   white       flannel   suit    , silver   shirt   , and\n# NSg/VB+ VP/J   R         . VB/C NPr    . NPr/J/R/P D/P NPr🅪Sg/VB/J NSg/VB/J+ NSg/VB+ . Nᴹ/VB/J+ NSg/VB+ . VB/C\n> gold     - colored     tie     , hurried in        . He       was  pale     , and  there were     dark     signs  of\n# Nᴹ/VB/J+ . NSg/VP/J/Am NSg/VB+ . VP/J    NPr/J/R/P . NPr/ISg+ VLPt NSg/VB/J . VB/C R+    NSg/VLPt NSg/VB/J NPl/V3 P\n> sleeplessness beneath his     eyes    .\n# NSg           P       ISg/D$+ NPl/V3+ .\n>\n#\n> “ Is  everything all          right    ? ” he       asked immediately .\n# . VL3 NSg/I/VB+  NSg/I/J/C/Dq NPr/VB/J . . NPr/ISg+ VP/J  R           .\n>\n#\n> “ The grass      looks  fine     , if    that’s what   you    mean     . ”\n# . D+  NPr🅪Sg/VB+ NPl/V3 NSg/VB/J . NSg/C NSg$   NSg/I+ ISgPl+ NSg/VB/J . .\n>\n#\n> “ What   grass      ? ” he       inquired blankly . “ Oh     , the grass     in        the yard    . ” He       looked out\n# . NSg/I+ NPr🅪Sg/VB+ . . NPr/ISg+ VP/J     R       . . NPr/VB . D   NPr🅪Sg/VB NPr/J/R/P D+  NSg/VB+ . . NPr/ISg+ VP/J   NSg/VB/J/R/P\n> the window  at    it       , but     , judging from his     expression , I       don’t believe he       saw     a\n# D+  NSg/VB+ NSg/P NPr/ISg+ . NSg/C/P . Nᴹ/Vg/J P    ISg/D$+ N🅪Sg+      . ISg/#r+ VXB   VB      NPr/ISg+ NSg/VPt D/P\n> thing .\n# NSg+  .\n>\n#\n> “ Looks  very good     , ” he       remarked vaguely . “ One     of the papers  said they thought the\n# . NPl/V3 J/R  NPr/VB/J . . NPr/ISg+ VP/J     R       . . NSg/I/J P  D+  NPl/V3+ VP/J IPl+ N🅪Sg/VP D+\n> rain     would stop   about four . I       think  it       was  The Journal  . Have    you    got everything\n# N🅪Sg/VB+ VXB   NSg/VB J/P   NSg  . ISg/#r+ NSg/VB NPr/ISg+ VLPt D+  NSg/VB/J . NSg/VXB ISgPl+ VP  NSg/I/VB+\n> you    need     in        the shape   of — of tea      ? ”\n# ISgPl+ N🅪Sg/VXB NPr/J/R/P D   N🅪Sg/VB P  . P  N🅪Sg/VB+ . .\n>\n#\n> I       took him  into the pantry , where   he       looked a   little     reproachfully at    the Finn .\n# ISg/#r+ VPt  ISg+ P    D+  NSg+   . NSg/R/C NPr/ISg+ VP/J   D/P NPr/I/J/Dq R             NSg/P D+  NPr+ .\n> Together we   scrutinized the twelve lemon      cakes   from the delicatessen shop    .\n# J        IPl+ VP/J        D   NSg    N🅪Sg/VB/J+ NPl/V3+ P    D   NSg          NSg/VB+ .\n>\n#\n> “ Will    they do  ? ” I       asked .\n# . NPr/VXB IPl+ VXB . . ISg/#r+ VP/J  .\n>\n#\n> “ Of course  , of course  ! They’re fine     ! ” and  he       added hollowly , “ . . . old    sport   . ”\n# . P  NSg/VB+ . P  NSg/VB+ . K       NSg/VB/J . . VB/C NPr/ISg+ VP/J  R        . . . . . NSg/J+ NSg/VB+ . .\n>\n#\n> The rain     cooled about half      - past       three to a    damp     mist     , through which occasional\n# D+  N🅪Sg/VB+ VP/J   J/P   N🅪Sg/J/P+ . NSg/VB/J/P NSg   P  D/P+ Nᴹ/VB/J+ N🅪Sg/VB+ . NSg/J/P I/C+  NSg/J+\n> thin      drops   swam like         dew      . Gatsby looked with vacant eyes    through a   copy   of\n# NSg/VB/J+ NPl/V3+ VPt  NSg/VB/J/C/P N🅪Sg/VB+ . NPr    VP/J   P    J      NPl/V3+ NSg/J/P D/P NSg/VB P\n> Clay’s “ Economics , ” starting at    the Finnish tread  that          shook     the kitchen floor   ,\n# NPr$   . Nᴹ+       . . Nᴹ/Vg/J  NSg/P D   NSg/J+  NSg/VB NSg/I/C/Ddem+ NSg/VPt/J D   NSg/VB+ NSg/VB+ .\n> and  peering toward the bleared windows   from time       to time      as    if    a   series of\n# VB/C Nᴹ/Vg/J J/P    D   ?       NPrPl/V3+ P    N🅪Sg/VB/J+ P  N🅪Sg/VB/J R/C/P NSg/C D/P NSgPl+ P\n> invisible but     alarming happenings were     taking   place   outside   . Finally he       got up\n# J         NSg/C/P Nᴹ/Vg/J  NPl/V3     NSg/VLPt NSg/Vg/J N🅪Sg/VB Nᴹ/VB/J/P . R       NPr/ISg+ VP  NSg/VB/J/P\n> and  informed me       , in        an   uncertain voice   , that         he       was  going   home      .\n# VB/C VP/J     NPr/ISg+ . NPr/J/R/P D/P+ I/J+      NSg/VB+ . NSg/I/C/Ddem NPr/ISg+ VLPt Nᴹ/Vg/J NSg/VB/J+ .\n>\n#\n> “ Why’s that          ? ”\n# . NSg$  NSg/I/C/Ddem+ . .\n>\n#\n> “ Nobody’s coming  to tea     . It’s too late  ! ” He       looked at    his     watch  as    if    there was\n# . NSg$     Nᴹ/Vg/J P  N🅪Sg/VB . K    R   NSg/J . . NPr/ISg+ VP/J   NSg/P ISg/D$+ NSg/VB R/C/P NSg/C R+    VLPt\n> some     pressing demand   on  his     time       elsewhere . “ I       can’t wait   all          day     . ”\n# I/J/R/Dq Nᴹ/Vg/J  N🅪Sg/VB+ J/P ISg/D$+ N🅪Sg/VB/J+ NSg       . . ISg/#r+ VXB   NSg/VB NSg/I/J/C/Dq NPr🅪Sg+ . .\n>\n#\n> “ Don’t be       silly ; it’s just two minutes to four . ”\n# . VXB   NSg/VLXB NSg/J . K    J/R  NSg NPl/V3+ P  NSg  . .\n>\n#\n> He       sat      down        miserably , as    if    I       had pushed him  , and  simultaneously there was  the\n# NPr/ISg+ NSg/VP/J N🅪Sg/VB/J/P R         . R/C/P NSg/C ISg/#r+ VP  VP/J   ISg+ . VB/C R              R+    VLPt D\n> sound     of a    motor     turning into my  lane . We   both   jumped up         , and  , a   little     harrowed\n# N🅪Sg/VB/J P  D/P+ NSg/VB/J+ Nᴹ/Vg/J P    D$+ NPr+ . IPl+ I/C/Dq VP/J   NSg/VB/J/P . VB/C . D/P NPr/I/J/Dq VP/J\n> myself , I       went    out          into the yard    .\n# ISg+   . ISg/#r+ NSg/VPt NSg/VB/J/R/P P    D   NSg/VB+ .\n>\n#\n> Under   the dripping bare     lilac  - trees   a   large open     car  was  coming  up         the drive    . It\n# NSg/J/P D   NSg/Vg   NSg/VB/J N🅪Sg/J . NPl/V3+ D/P NSg/J NSg/VB/J NSg+ VLPt Nᴹ/Vg/J NSg/VB/J/P D   N🅪Sg/VB+ . NPr/ISg+\n> stopped . Daisy’s face    , tipped sideways beneath a   three - cornered lavender hat     ,\n# VP/J    . NPr$    NSg/VB+ . VP     NSg/J    P       D/P NSg   . VP/J     Nᴹ/VB/J  NSg/VB+ .\n> looked out          at    me       with a   bright   ecstatic smile   .\n# VP/J   NSg/VB/J/R/P NSg/P NPr/ISg+ P    D/P NPr/VB/J NSg/J    NSg/VB+ .\n>\n#\n> “ Is  this   absolutely where   you    live , my  dearest one     ? ”\n# . VL3 I/Ddem R          NSg/R/C ISgPl+ VB/J . D$+ NSg/JS  NSg/I/J . .\n>\n#\n> The exhilarating ripple of her     voice   was  a   wild     tonic     in        the rain     . I       had to\n# D   Nᴹ/Vg/J      NSg/VB P  ISg/D$+ NSg/VB+ VLPt D/P NSg/VB/J N🅪Sg/VB/J NPr/J/R/P D   N🅪Sg/VB+ . ISg/#r+ VP  P\n> follow the sound     of it       for   a    moment , up         and  down        , with my  ear       alone , before any\n# NSg/VB D   N🅪Sg/VB/J P  NPr/ISg+ R/C/P D/P+ NSg+   . NSg/VB/J/P VB/C N🅪Sg/VB/J/P . P    D$+ NSg/VB/J+ J     . C/P    I/R/Dq+\n> words   came      through . A   damp    streak of hair     lay        like         a   dash   of blue       paint    across\n# NPl/V3+ NSg/VPt/P NSg/J/P . D/P Nᴹ/VB/J NSg/VB P  N🅪Sg/VB+ NSg/VBPt/J NSg/VB/J/C/P D/P NSg/VB P  N🅪Sg/VB/J+ N🅪Sg/VB+ NSg/P\n> her     cheek   , and  her     hand    was  wet      with glistening drops   as    I       took it       to help   her\n# ISg/D$+ NSg/VB+ . VB/C ISg/D$+ NSg/VB+ VLPt NSg/VP/J P    Nᴹ/Vg/J    NPl/V3+ R/C/P ISg/#r+ VPt  NPr/ISg+ P  NSg/VB ISg/D$+\n> from the car  .\n# P    D+  NSg+ .\n>\n#\n> “ Are you    in        love      with me       , ” she  said low        in        my  ear       , “ or    why    did  I       have    to come\n# . VLB ISgPl+ NPr/J/R/P NPr🅪Sg/VB P    NPr/ISg+ . . ISg+ VP/J NSg/VB/J/R NPr/J/R/P D$+ NSg/VB/J+ . . NPr/C NSg/VB VXPt ISg/#r+ NSg/VXB P  NSg/VBPp/P\n> alone ? ”\n# J     . .\n>\n#\n> “ That’s the secret   of Castle  Rackrent . Tell   your chauffeur to go       far      away and\n# . NSg$   D   NSg/VB/J P  NSg/VB+ ?        . NPr/VB D$+  NSg/VB    P  NSg/VB/J NSg/VB/J VB/J VB/C\n> spend  an  hour . ”\n# NSg/VB D/P NSg+ . .\n>\n#\n> “ Come       back     in        an   hour , Ferdie . ” Then      in        a    grave     murmur : “ His     name    is  Ferdie . ”\n# . NSg/VBPp/P NSg/VB/J NPr/J/R/P D/P+ NSg+ . ?      . . NSg/J/R/C NPr/J/R/P D/P+ NSg/VB/J+ NSg/VB . . ISg/D$+ NSg/VB+ VL3 ?      . .\n>\n#\n> “ Does    the gasoline affect his     nose    ? ”\n# . NPl/VX3 D   Nᴹ       NSg/VB ISg/D$+ NSg/VB+ . .\n>\n#\n> “ I       don’t think  so          , ” she  said innocently . “ Why    ? ”\n# . ISg/#r+ VXB   NSg/VB NSg/I/J/R/C . . ISg+ VP/J R          . . NSg/VB . .\n>\n#\n> We   went    in        . To my  overwhelming surprise the living   - room       was  deserted .\n# IPl+ NSg/VPt NPr/J/R/P . P  D$+ Nᴹ/Vg/J+     NSg/VB+  D+  Nᴹ/Vg/J+ . N🅪Sg/VB/J+ VLPt VP/J     .\n>\n#\n> “ Well       , that’s funny , ” I       exclaimed .\n# . NSg/VB/J/R . NSg$   NSg/J . . ISg/#r+ VP/J      .\n>\n#\n> “ What’s funny ? ”\n# . K      NSg/J . .\n>\n#\n> She  turned her     head      as    there was  a    light      dignified knocking at    the front     door    . I\n# ISg+ VP/J   ISg/D$+ NPr/VB/J+ R/C/P R+    VLPt D/P+ N🅪Sg/VB/J+ VP/J      Nᴹ/Vg/J  NSg/P D   NSg/VB/J+ NSg/VB+ . ISg/#r+\n> went    out          and  opened it       . Gatsby , pale     as    death   , with his     hands   plunged like\n# NSg/VPt NSg/VB/J/R/P VB/C VP/J   NPr/ISg+ . NPr    . NSg/VB/J R/C/P NPr🅪Sg+ . P    ISg/D$+ NPl/V3+ VP/J    NSg/VB/J/C/P\n> weights in        his     coat    pockets , was  standing in        a   puddle of water    glaring\n# NPl/V3+ NPr/J/R/P ISg/D$+ NSg/VB+ NPl/V3+ . VLPt Nᴹ/Vg/J  NPr/J/R/P D/P NSg/VB P  N🅪Sg/VB+ Nᴹ/Vg/J\n> tragically into my  eyes    .\n# R          P    D$+ NPl/V3+ .\n>\n#\n> With his     hands   still      in        his     coat    pockets he       stalked by    me       into the hall , turned\n# P    ISg/D$+ NPl/V3+ NSg/VB/J/R NPr/J/R/P ISg/D$+ NSg/VB+ NPl/V3+ NPr/ISg+ VP/J    NSg/P NPr/ISg+ P    D+  NPr+ . VP/J\n> sharply as    if    he       were     on  a    wire     , and  disappeared into the living   - room       . It       wasn’t\n# R       R/C/P NSg/C NPr/ISg+ NSg/VLPt J/P D/P+ N🅪Sg/VB+ . VB/C VP/J        P    D+  Nᴹ/Vg/J+ . N🅪Sg/VB/J+ . NPr/ISg+ VPt\n> a   bit      funny . Aware of the loud  beating of my  own       heart    I       pulled the door    to\n# D/P NSg/VPt+ NSg/J . VB/J  P  D   NSg/J Nᴹ/Vg/J P  D$+ NSg/VB/J+ N🅪Sg/VB+ ISg/#r+ VP/J   D+  NSg/VB+ P\n> against the increasing rain     .\n# C/P     D+  Nᴹ/Vg/J    N🅪Sg/VB+ .\n>\n#\n> For   half      a    minute    there wasn’t a    sound      . Then      from the living   - room       I       heard a   sort\n# R/C/P N🅪Sg/J/P+ D/P+ NSg/VB/J+ R+    VPt    D/P+ N🅪Sg/VB/J+ . NSg/J/R/C P    D+  Nᴹ/Vg/J+ . N🅪Sg/VB/J+ ISg/#r+ VP/J  D/P NSg/VB\n> of choking murmur and  part     of a   laugh   , followed by    Daisy’s voice   on  a   clear\n# P  Nᴹ/Vg/J NSg/VB VB/C NSg/VB/J P  D/P NSg/VB+ . VP/J     NSg/P NPr$    NSg/VB+ J/P D/P NSg/VB/J\n> artificial note    :\n# J          NSg/VB+ .\n>\n#\n> “ I       certainly am        awfully glad     to see    you    again . ”\n# . ISg/#r+ R         NPr/VLB/J R       NSg/VB/J P  NSg/VB ISgPl+ P     . .\n>\n#\n> A    pause   ; it       endured horribly . I       had nothing  to do  in        the hall , so          I       went    into\n# D/P+ NSg/VB+ . NPr/ISg+ VP/J    R        . ISg/#r+ VP  NSg/I/J+ P  VXB NPr/J/R/P D+  NPr+ . NSg/I/J/R/C ISg/#r+ NSg/VPt P\n> the room       .\n# D+  N🅪Sg/VB/J+ .\n>\n#\n> Gatsby , his     hands   still      in        his     pockets , was  reclining against the mantelpiece in\n# NPr    . ISg/D$+ NPl/V3+ NSg/VB/J/R NPr/J/R/P ISg/D$+ NPl/V3+ . VLPt Nᴹ/Vg/J   C/P     D   NSg+        NPr/J/R/P\n> a   strained counterfeit of perfect  ease   , even       of boredom . His     head      leaned back     so\n# D/P VP/J     NSg/VB/J    P  NSg/VB/J Nᴹ/VB+ . NSg/VB/J/R P  NSg     . ISg/D$+ NPr/VB/J+ VP/J   NSg/VB/J NSg/I/J/R/C\n> far      that         it       rested against the face   of a    defunct   mantelpiece clock   , and  from\n# NSg/VB/J NSg/I/C/Ddem NPr/ISg+ VP/J   C/P     D   NSg/VB P  D/P+ NSg/VB/J+ NSg+        NSg/VB+ . VB/C P\n> this    position his     distraught eyes    stared down        at    Daisy , who    was  sitting  ,\n# I/Ddem+ NSg/VB+  ISg/D$+ J          NPl/V3+ VP/J   N🅪Sg/VB/J/P NSg/P NPr+  . NPr/I+ VLPt NSg/Vg/J .\n> frightened but     graceful , on  the edge   of a   stiff    chair   .\n# VP/J       NSg/C/P J        . J/P D   NSg/VB P  D/P NSg/VB/J NSg/VB+ .\n>\n#\n> “ We've met before , ” muttered Gatsby . His     eyes    glanced momentarily at    me       , and  his\n# . K     VP  C/P    . . VP/J     NPr    . ISg/D$+ NPl/V3+ VP/J    R           NSg/P NPr/ISg+ . VB/C ISg/D$+\n> lips    parted with an  abortive attempt at    a   laugh   . Luckily the clock   took this\n# NPl/V3+ VP/J   P    D/P NSg/J    NSg/VB+ NSg/P D/P NSg/VB+ . R       D+  NSg/VB+ VPt  I/Ddem+\n> moment to tilt   dangerously at    the pressure of his     head      , whereupon he       turned and\n# NSg+   P  NSg/VB R           NSg/P D   N🅪Sg/VB  P  ISg/D$+ NPr/VB/J+ . C         NPr/ISg+ VP/J   VB/C\n> caught it       with trembling fingers , and  set       it       back     in        place    . Then      he       sat      down        ,\n# VP/J   NPr/ISg+ P    Nᴹ/Vg/J   NPl/V3+ . VB/C NPr/VBP/J NPr/ISg+ NSg/VB/J NPr/J/R/P N🅪Sg/VB+ . NSg/J/R/C NPr/ISg+ NSg/VP/J N🅪Sg/VB/J/P .\n> rigidly , his     elbow   on  the arm      of the sofa    and  his     chin    in        his     hand    .\n# R       . ISg/D$+ NSg/VB+ J/P D   NSg/VB/J P  D   NSg/VB+ VB/C ISg/D$+ NPr/VB+ NPr/J/R/P ISg/D$+ NSg/VB+ .\n>\n#\n> “ I’m sorry    about the clock   , ” he       said .\n# . K   NSg/VB/J J/P   D   NSg/VB+ . . NPr/ISg+ VP/J .\n>\n#\n> My  own       face    had now       assumed a    deep   tropical burn    . I       couldn’t muster  up         a   single\n# D$+ NSg/VB/J+ NSg/VB+ VP  NSg/J/R/C VP/J    D/P+ NSg/J+ NSg/J+   NSg/VB+ . ISg/#r+ VXB      NSg/VB+ NSg/VB/J/P D/P NSg/VB/J\n> commonplace out          of the thousand in        my  head      .\n# NSg/VB/J    NSg/VB/J/R/P P  D   NSg      NPr/J/R/P D$+ NPr/VB/J+ .\n>\n#\n> “ It’s an   old   clock   , ” I       told them     idiotically .\n# . K    D/P+ NSg/J NSg/VB+ . . ISg/#r+ VP   NSg/IPl+ R           .\n>\n#\n> I       think  we   all          believed for   a    moment that          it       had smashed in        pieces  on  the floor   .\n# ISg/#r+ NSg/VB IPl+ NSg/I/J/C/Dq VP/J     R/C/P D/P+ NSg+   NSg/I/C/Ddem+ NPr/ISg+ VP  VP/J    NPr/J/R/P NPl/V3+ J/P D+  NSg/VB+ .\n>\n#\n> “ We   haven’t met for   many       years , ” said Daisy , her     voice   as    matter   - of - fact as    it\n# . IPl+ VXB     VP  R/C/P NSg/I/J/Dq NPl+  . . VP/J NPr+  . ISg/D$+ NSg/VB+ R/C/P N🅪Sg/VB+ . P  . NSg+ R/C/P NPr/ISg+\n> could   ever be       .\n# NSg/VXB J/R  NSg/VLXB .\n>\n#\n> “ Five years next     November . ”\n# . NSg+ NPl+  NSg/J/P+ NPr+     . .\n>\n#\n> The automatic quality of Gatsby’s answer  set       us       all          back     at    least    another\n# D   NSg/J     N🅪Sg/J  P  NPr$     NSg/VB+ NPr/VBP/J NPr/IPl+ NSg/I/J/C/Dq NSg/VB/J NSg/P NSg/J/Dq I/D\n> minute    . I       had them     both   on  their feet with the desperate suggestion that          they\n# NSg/VB/J+ . ISg/#r+ VP  NSg/IPl+ I/C/Dq J/P D$+   NPl+ P    D+  NSg/J+    N🅪Sg+      NSg/I/C/Ddem+ IPl+\n> help   me       make   tea      in        the kitchen when    the demoniac Finn brought it       in        on  a   tray    .\n# NSg/VB NPr/ISg+ NSg/VB N🅪Sg/VB+ NPr/J/R/P D+  NSg/VB+ NSg/I/C D   NSg/J    NPr+ VP      NPr/ISg+ NPr/J/R/P J/P D/P NSg/VB+ .\n>\n#\n> Amid  the welcome  confusion of cups    and  cakes  a   certain physical decency\n# NSg/P D   NSg/VB/J N🅪Sg/VB   P  NPl/V3+ VB/C NPl/V3 D/P I/J     NSg/J    NSg\n> established itself . Gatsby got himself into a   shadow    and  , while      Daisy and  I\n# VP/J        ISg+   . NPr    VP  ISg+    P    D/P NSg/VB/J+ VB/C . NSg/VB/C/P NPr+  VB/C ISg/#r+\n> talked , looked conscientiously from one     to the other    of us       with tense    , unhappy\n# VP/J   . VP/J   R               P    NSg/I/J P  D   NSg/VB/J P  NPr/IPl+ P    NSg/VB/J . NSg/VB/J\n> eyes    . However , as    calmness wasn’t an  end     in        itself , I       made an  excuse  at    the\n# NPl/V3+ . C       . R/C/P Nᴹ+      VPt    D/P NSg/VB+ NPr/J/R/P ISg+   . ISg/#r+ VP   D/P NSg/VB+ NSg/P D\n> first possible moment , and  got to my  feet .\n# NSg/J NSg/J    NSg+   . VB/C VP  P  D$+ NPl+ .\n>\n#\n> “ Where   are you    going   ? ” demanded Gatsby in        immediate alarm    .\n# . NSg/R/C VLB ISgPl+ Nᴹ/Vg/J . . VP/J     NPr    NPr/J/R/P J         N🅪Sg/VB+ .\n>\n#\n> “ I’ll be       back     . ”\n# . K    NSg/VLXB NSg/VB/J . .\n>\n#\n> “ I’ve got to speak  to you    about something before you    go       . ”\n# . K    VP  P  NSg/VB P  ISgPl+ J/P   NSg/I/J+  C/P    ISgPl+ NSg/VB/J . .\n>\n#\n> He       followed me       wildly into the kitchen , closed the door    , and  whispered : “ Oh     ,\n# NPr/ISg+ VP/J     NPr/ISg+ R      P    D+  NSg/VB+ . VP/J   D+  NSg/VB+ . VB/C VP/J      . . NPr/VB .\n> God     ! ” in        a    miserable way    .\n# NPr/VB+ . . NPr/J/R/P D/P+ J+        NSg/J+ .\n>\n#\n> “ What’s the matter   ? ”\n# . K      D+  N🅪Sg/VB+ . .\n>\n#\n> “ This    is  a   terrible mistake , ” he       said , shaking his     head      from side      to side     , ‘          ‘          a\n# . I/Ddem+ VL3 D/P J        NSg/VB  . . NPr/ISg+ VP/J . Nᴹ/Vg/J ISg/D$+ NPr/VB/J+ P    NSg/VB/J+ P  NSg/VB/J . Unlintable Unlintable D/P\n> terrible , terrible mistake . ”\n# J        . J+       NSg/VB+ . .\n>\n#\n> “ You’re just embarrassed , that’s all          , ” and  luckily I       added : “ Daisy’s embarrassed\n# . K      J/R  VP/J        . NSg$   NSg/I/J/C/Dq . . VB/C R       ISg/#r+ VP/J  . . NPr$    VP/J\n> too . ”\n# R   . .\n>\n#\n> “ She’s embarrassed ? ” he       repeated incredulously .\n# . K     VP/J        . . NPr/ISg+ VP/J     R             .\n>\n#\n> “ Just as    much         as    you    are . ”\n# . J/R  R/C/P NSg/I/J/R/Dq R/C/P ISgPl+ VLB . .\n>\n#\n> “ Don’t talk    so          loud  . ”\n# . VXB   N🅪Sg/VB NSg/I/J/R/C NSg/J . .\n>\n#\n> “ You're acting  like         a    little      boy     , ” I       broke     out          impatiently . “ Not     only  that          , but\n# . +      Nᴹ/Vg/J NSg/VB/J/C/P D/P+ NPr/I/J/Dq+ NSg/VB+ . . ISg/#r+ NSg/VPt/J NSg/VB/J/R/P R           . . NSg/R/C J/R/C NSg/I/C/Ddem+ . NSg/C/P\n> you’re rude . Daisy’s sitting  in        there all          alone . ”\n# K      J    . NPr$    NSg/Vg/J NPr/J/R/P R+    NSg/I/J/C/Dq J     . .\n>\n#\n> He       raised his     hand    to stop   my  words   , looked at    me       with unforgettable reproach ,\n# NPr/ISg+ VP/J   ISg/D$+ NSg/VB+ P  NSg/VB D$+ NPl/V3+ . VP/J   NSg/P NPr/ISg+ P    J             NSg/VB   .\n> and  , opening the door    cautiously , went    back     into the other    room       .\n# VB/C . Nᴹ/Vg/J D   NSg/VB+ R          . NSg/VPt NSg/VB/J P    D   NSg/VB/J N🅪Sg/VB/J+ .\n>\n#\n> I       walked out          the back      way    — just as    Gatsby had when    he       had made his     nervous\n# ISg/#r+ VP/J   NSg/VB/J/R/P D+  NSg/VB/J+ NSg/J+ . J/R  R/C/P NPr    VP  NSg/I/C NPr/ISg+ VP  VP   ISg/D$+ J\n> circuit of the house   half      an  hour before — and  ran     for   a   huge black     knotted tree    ,\n# NSg/VB  P  D   NPr/VB+ N🅪Sg/J/P+ D/P NSg+ C/P    . VB/C NSg/VPt R/C/P D/P J    N🅪Sg/VB/J VP/J    NSg/VB+ .\n> whose massed leaves  made a   fabric   against the rain     . Once  more         it       was  pouring ,\n# I+    VP/J   NPl/V3+ VP   D/P N🅪Sg/VB+ C/P     D   N🅪Sg/VB+ . NSg/C NPr/I/J/R/Dq NPr/ISg+ VLPt Nᴹ/Vg/J .\n> and  my  irregular lawn    , well       - shaved by    Gatsby’s gardener , abounded in        small    muddy\n# VB/C D$+ NSg/J     NSg/VB+ . NSg/VB/J/R . VP/J   NSg/P NPr$     NSg/JC   . VP/J     NPr/J/R/P NPr/VB/J NSg/VB/J\n> swamps and  prehistoric marshes . There was  nothing  to look   at    from under   the tree\n# NPl/V3 VB/C J           NPl+    . R+    VLPt NSg/I/J+ P  NSg/VB NSg/P P    NSg/J/P D+  NSg/VB+\n> except Gatsby’s enormous house   , so          I       stared at    it       , like         Kant at    his     church\n# VB/C/P NPr$     J+       NPr/VB+ . NSg/I/J/R/C ISg/#r+ VP/J   NSg/P NPr/ISg+ . NSg/VB/J/C/P NPr+ NSg/P ISg/D$+ NPr🅪Sg/VB+\n> steeple , for   half      an  hour . A   brewer had built it       early   in        the “ period    ” craze  , a\n# NSg/VB  . R/C/P N🅪Sg/J/P+ D/P NSg+ . D/P NPr    VP  VP/J  NPr/ISg+ NSg/J/R NPr/J/R/P D   . NSg/VB/J+ . NSg/VB . D/P\n> decade before , and  there was  a   story   that          he’d agreed to pay      five years ’ taxes\n# NSg+   C/P    . VB/C R+    VLPt D/P NSg/VB+ NSg/I/C/Ddem+ K    VP/J   P  NSg/VB/J NSg  NPl+  . NPl/V3+\n> on  all          the neighboring cottages if    the owners would have    their roofs   thatched\n# J/P NSg/I/J/C/Dq D   Nᴹ/Vg/J/Am  NPl/V3+  NSg/C D   NPl+   VXB   NSg/VXB D$+   NPl/V3+ VP/J\n> with straw      . Perhaps their refusal took the heart    out          of his     plan    to Found  a\n# P    N🅪Sg/VB/J+ . NSg/R   D$+   NSg+    VPt  D+  N🅪Sg/VB+ NSg/VB/J/R/P P  ISg/D$+ NSg/VB+ P  NSg/VP D/P+\n> Family  — he       went    into an   immediate decline . His     children sold   his     house   with the\n# N🅪Sg/J+ . NPr/ISg+ NSg/VPt P    D/P+ J+        NSg/VB+ . ISg/D$+ NPl+     NSg/VP ISg/D$+ NPr/VB+ P    D\n> black     wreath still      on  the door    . Americans , while      willing  , even       eager    , to be\n# N🅪Sg/VB/J NSg/VB NSg/VB/J/R J/P D   NSg/VB+ . NPrPl+    . NSg/VB/C/P NSg/Vg/J . NSg/VB/J/R NSg/VB/J . P  NSg/VLXB\n> serfs , have    always been     obstinate about being        peasantry .\n# NPl   . NSg/VXB R      NSg/VLPp J         J/P   N🅪Sg/VLg/J/C N🅪Sg      .\n>\n#\n> After half      an   hour , the sun     shone again , and  the grocer’s automobile rounded\n# P     N🅪Sg/J/P+ D/P+ NSg+ . D+  NPr/VB+ VB    P     . VB/C D   NSg$     NSg/VB/J   VP/J\n> Gatsby’s drive   with the raw      material   for   his     servants ’ dinner   — I       felt      sure he\n# NPr$     N🅪Sg/VB P    D   NSg/VB/J N🅪Sg/VB/J+ R/C/P ISg/D$+ NPl/V3+  . N🅪Sg/VB+ . ISg/#r+ N🅪Sg/VP/J J    NPr/ISg+\n> wouldn’t eat a   spoonful . A    maid began opening the upper windows  of his     house   ,\n# VXB      VB  D/P NSg      . D/P+ NSg+ VPt   Nᴹ/Vg/J D   NSg/J NPrPl/V3 P  ISg/D$+ NPr/VB+ .\n> appeared momentarily in        each , and  , leaning from the large central bay       , spat\n# VP/J     R           NPr/J/R/P Dq   . VB/C . Nᴹ/Vg/J P    D   NSg/J NPr/J   NSg/VB/J+ . NSg/VB\n> meditatively into the garden    . It       was  time      I       went    back     . While      the rain     continued\n# R            P    D   NSg/VB/J+ . NPr/ISg+ VLPt N🅪Sg/VB/J ISg/#r+ NSg/VPt NSg/VB/J . NSg/VB/C/P D+  N🅪Sg/VB+ VP/J\n> it       had seemed like         the murmur of their voices  , rising    and  swelling a   little     now\n# NPr/ISg+ VP  VP/J   NSg/VB/J/C/P D   NSg/VB P  D$+   NPl/V3+ . Nᴹ/Vg/J/P VB/C Nᴹ/Vg/J  D/P NPr/I/J/Dq NSg/J/R/C\n> and  then      with gusts  of emotion . But     in        the new    silence I       felt      that         silence had\n# VB/C NSg/J/R/C P    NPl/V3 P  N🅪Sg+   . NSg/C/P NPr/J/R/P D+  NSg/J+ NSg/VB+ ISg/#r+ N🅪Sg/VP/J NSg/I/C/Ddem NSg/VB+ VP\n> fallen within  the house   too .\n# VPp/J  NSg/J/P D+  NPr/VB+ R   .\n>\n#\n> I       went    in        — after making  every possible noise    in        the kitchen , short      of pushing\n# ISg/#r+ NSg/VPt NPr/J/R/P . P     Nᴹ/Vg/J Dq+   NSg/J    N🅪Sg/VB+ NPr/J/R/P D+  NSg/VB+ . NPr/VB/J/P P  Nᴹ/Vg/J\n> over    the stove   — but     I       don’t believe they heard a   sound      . They were     sitting  at\n# NSg/J/P D+  NSg/VB+ . NSg/C/P ISg/#r+ VXB   VB      IPl+ VP/J  D/P N🅪Sg/VB/J+ . IPl+ NSg/VLPt NSg/Vg/J NSg/P\n> either end    of the couch   , looking at    each other    as    if    some      question had been\n# I/C    NSg/VB P  D+  NSg/VB+ . Nᴹ/Vg/J NSg/P Dq   NSg/VB/J R/C/P NSg/C I/J/R/Dq+ NSg/VB+  VP  NSg/VLPp\n> asked , or    was  in        the air      , and  every vestige of embarrassment was  gone    . Daisy’s\n# VP/J  . NPr/C VLPt NPr/J/R/P D+  N🅪Sg/VB+ . VB/C Dq    NSg     P  N🅪Sg+         VLPt VPp/J/P . NPr$\n> face    was  smeared with tears   , and  when    I       came      in        she  jumped up         and  began wiping\n# NSg/VB+ VLPt VP/J    P    NPl/V3+ . VB/C NSg/I/C ISg/#r+ NSg/VPt/P NPr/J/R/P ISg+ VP/J   NSg/VB/J/P VB/C VPt   Nᴹ/Vg/J\n> at    it       with her     handkerchief before a   mirror  . But     there was  a    change   in        Gatsby\n# NSg/P NPr/ISg+ P    ISg/D$+ NSg+         C/P    D/P NSg/VB+ . NSg/C/P R+    VLPt D/P+ N🅪Sg/VB+ NPr/J/R/P NPr\n> that          was  simply confounding . He       literally glowed ; without a   word    or    a   gesture of\n# NSg/I/C/Ddem+ VLPt R      Nᴹ/Vg/J     . NPr/ISg+ R         VP/J   . C/P     D/P NSg/VB+ NPr/C D/P NSg/VB  P\n> exultation a   new   well       - being        radiated from him  and  filled the little     room       .\n# NSg        D/P NSg/J NSg/VB/J/R . N🅪Sg/VLg/J/C VP/J     P    ISg+ VB/C VP/J   D   NPr/I/J/Dq N🅪Sg/VB/J+ .\n>\n#\n> “ Oh     , hello  , old    sport   , ” he       said , as    if    he       hadn’t seen    me       for   years . I       thought\n# . NPr/VB . NSg/VB . NSg/J+ NSg/VB+ . . NPr/ISg+ VP/J . R/C/P NSg/C NPr/ISg+ VPt    NSg/VPp NPr/ISg+ R/C/P NPl+  . ISg/#r+ N🅪Sg/VP\n> for   a    moment he       was  going   to shake  hands   .\n# R/C/P D/P+ NSg+   NPr/ISg+ VLPt Nᴹ/Vg/J P  NSg/VB NPl/V3+ .\n>\n#\n> “ It’s stopped raining . ”\n# . K    VP/J    Nᴹ/Vg/J . .\n>\n#\n> “ Has it       ? ” When    he       realized       what   I       was  talking about , that         there were\n# . V3  NPr/ISg+ . . NSg/I/C NPr/ISg+ VP/J/Comm/NoAm NSg/I+ ISg/#r+ VLPt Nᴹ/Vg/J J/P   . NSg/I/C/Ddem R+    NSg/VLPt\n> twinkle - bells  of sunshine in        the room       , he       smiled like         a   weather  man       , like         an\n# NSg/VB  . NPl/V3 P  Nᴹ/J+    NPr/J/R/P D   N🅪Sg/VB/J+ . NPr/ISg+ VP/J   NSg/VB/J/C/P D/P Nᴹ/VB/J+ NPr/VB/J+ . NSg/VB/J/C/P D/P\n> ecstatic patron of recurrent light      , and  repeated the news   to Daisy . “ What   do  you\n# NSg/J    NSg/VB P  NSg/J     N🅪Sg/VB/J+ . VB/C VP/J     D   Nᴹ/VB+ P  NPr   . . NSg/I+ VXB ISgPl+\n> think  of that          ? It’s stopped raining . ”\n# NSg/VB P  NSg/I/C/Ddem+ . K    VP/J    Nᴹ/Vg/J . .\n>\n#\n> “ I’m glad     , Jay  . ” Her     throat  , full     of aching  , grieving beauty     , told only  of her\n# . K   NSg/VB/J . NPr+ . . ISg/D$+ NSg/VB+ . NSg/VB/J P  Nᴹ/Vg/J . Nᴹ/Vg/J  N🅪Sg/VB/J+ . VP   J/R/C P  ISg/D$+\n> unexpected joy        .\n# NSg/J+     NPr🅪Sg/VB+ .\n>\n#\n> “ I       want   you    and  Daisy to come       over    to my  house   , ” ’ he       said , “ ‘          I’d like         to show\n# . ISg/#r+ NSg/VB ISgPl+ VB/C NPr+  P  NSg/VBPp/P NSg/J/P P  D$+ NPr/VB+ . . . NPr/ISg+ VP/J . . Unlintable K   NSg/VB/J/C/P P  NSg/VB\n> her     around . ”\n# ISg/D$+ J/P    . .\n>\n#\n> “ You’re sure you    want   me       to come       ? ”\n# . K      J    ISgPl+ NSg/VB NPr/ISg+ P  NSg/VBPp/P . .\n>\n#\n> “ Absolutely , old    sport   . ”\n# . R          . NSg/J+ NSg/VB+ . .\n>\n#\n> Daisy went    up         - stairs to wash   her     face    — too late  I       thought with humiliation of my\n# NPr+  NSg/VPt NSg/VB/J/P . NPl+   P  NPr/VB ISg/D$+ NSg/VB+ . R   NSg/J ISg/#r+ N🅪Sg/VP P    NSg         P  D$+\n> towels  — while      Gatsby and  I       waited on  the lawn    .\n# NPl/V3+ . NSg/VB/C/P NPr    VB/C ISg/#r+ VP/J   J/P D   NSg/VB+ .\n>\n#\n> “ My  house   looks  well       , doesn’t it       ? ” he       demanded . “ See    how   the whole front    of it\n# . D$+ NPr/VB+ NPl/V3 NSg/VB/J/R . VX3     NPr/ISg+ . . NPr/ISg+ VP/J     . . NSg/VB NSg/C D   NSg/J NSg/VB/J P  NPr/ISg+\n> catches the light      . ”\n# NPl/V3  D+  N🅪Sg/VB/J+ . .\n>\n#\n> I       agreed that         it       was  splendid .\n# ISg/#r+ VP/J   NSg/I/C/Ddem NPr/ISg+ VLPt J        .\n>\n#\n> “ Yes    . ” His     eyes    went    over    it       , every arched door   and  square    tower   . “ It       took me\n# . NPl/VB . . ISg/D$+ NPl/V3+ NSg/VPt NSg/J/P NPr/ISg+ . Dq    VP/J   NSg/VB VB/C NSg/VB/J+ NSg/VB+ . . NPr/ISg+ VPt  NPr/ISg+\n> just three years to earn   the money   that          bought it       . ”\n# J/R  NSg   NPl+  P  NSg/VB D+  N🅪Sg/J+ NSg/I/C/Ddem+ NSg/VP NPr/ISg+ . .\n>\n#\n> “ I       thought you    inherited your money   . ”\n# . ISg/#r+ N🅪Sg/VP ISgPl+ VP/J      D$+  N🅪Sg/J+ . .\n>\n#\n> “ I       did  , old    sport   , ” he       said automatically , “ but     I       lost most         of it       in        the big\n# . ISg/#r+ VXPt . NSg/J+ NSg/VB+ . . NPr/ISg+ VP/J R             . . NSg/C/P ISg/#r+ VP/J NSg/I/J/R/Dq P  NPr/ISg+ NPr/J/R/P D+  NSg/J+\n> panic      — the panic     of the war      . ”\n# N🅪Sg/VB/J+ . D   N🅪Sg/VB/J P  D+  N🅪Sg/VB+ . .\n>\n#\n> I       think  he       hardly knew what   he       was  saying    , for   when    I       asked him  what   business he\n# ISg/#r+ NSg/VB NPr/ISg+ R      VPt  NSg/I+ NPr/ISg+ VLPt N🅪Sg/Vg/J . R/C/P NSg/I/C ISg/#r+ VP/J  ISg+ NSg/I+ N🅪Sg/J+  NPr/ISg+\n> was  in        he       answered : ‘          ‘          That’s my  affair , ” before he       realized       that         it       wasn’t an\n# VLPt NPr/J/R/P NPr/ISg+ VP/J     . Unlintable Unlintable NSg$   D$+ NSg+   . . C/P    NPr/ISg+ VP/J/Comm/NoAm NSg/I/C/Ddem NPr/ISg+ VPt    D/P\n> appropriate reply   .\n# VB/J        NSg/VB+ .\n>\n#\n> “ Oh     , I’ve been     in        several things , ” he       corrected himself . “ I       was  in        the drug\n# . NPr/VB . K    NSg/VLPp NPr/J/R/P J/Dq    NPl+   . . NPr/ISg+ VP/J      ISg+    . . ISg/#r+ VLPt NPr/J/R/P D+  NSg/VB+\n> business and  then      I       was  in        the oil      business . But     I’m not     in        either one     now       . ” He\n# N🅪Sg/J+  VB/C NSg/J/R/C ISg/#r+ VLPt NPr/J/R/P D+  N🅪Sg/VB+ N🅪Sg/J+  . NSg/C/P K   NSg/R/C NPr/J/R/P I/C    NSg/I/J NSg/J/R/C . . NPr/ISg+\n> looked at    me       with more          attention . “ Do  you    mean     you’ve been     thinking over    what   I\n# VP/J   NSg/P NPr/ISg+ P    NPr/I/J/R/Dq+ NSg+      . . VXB ISgPl+ NSg/VB/J K      NSg/VLPp Nᴹ/Vg/J  NSg/J/P NSg/I+ ISg/#r+\n> proposed the other    night    ? ”\n# VP/J     D   NSg/VB/J N🅪Sg/VB+ . .\n>\n#\n> Before I       could   answer  , Daisy came      out          of the house   and  two rows   of brass      buttons\n# C/P    ISg/#r+ NSg/VXB NSg/VB+ . NPr+  NSg/VPt/P NSg/VB/J/R/P P  D   NPr/VB+ VB/C NSg NPl/V3 P  N🅪Sg/VB/J+ NPl/V3+\n> on  her     dress   gleamed in        the sunlight .\n# J/P ISg/D$+ NSg/VB+ VP/J    NPr/J/R/P D   NSg/VB+  .\n>\n#\n> “ That          huge place    there ? ” she  cried pointing .\n# . NSg/I/C/Ddem+ J+   N🅪Sg/VB+ R     . . ISg+ VP/J  Nᴹ/Vg/J  .\n>\n#\n> “ Do  you    like         it       ? ”\n# . VXB ISgPl+ NSg/VB/J/C/P NPr/ISg+ . .\n>\n#\n> “ I       love      it       , but     I       don’t see    how   you    live there all          alone . ”\n# . ISg/#r+ NPr🅪Sg/VB NPr/ISg+ . NSg/C/P ISg/#r+ VXB   NSg/VB NSg/C ISgPl+ VB/J R+    NSg/I/J/C/Dq J     . .\n>\n#\n> “ I       keep   it       always full     of interesting people  , night   and  day     . People  who    do\n# . ISg/#r+ NSg/VB NPr/ISg+ R      NSg/VB/J P  Vg/J        NPl/VB+ . N🅪Sg/VB VB/C NPr🅪Sg+ . NPl/VB+ NPr/I+ VXB\n> interesting things . Celebrated people  . ”\n# Vg/J+       NPl+   . VP/J       NPl/VB+ . .\n>\n#\n> Instead of taking   the short      cut       along the Sound      we   went    down        to the road    and\n# R       P  NSg/Vg/J D   NPr/VB/J/P NSg/VBP/J P     D+  N🅪Sg/VB/J+ IPl+ NSg/VPt N🅪Sg/VB/J/P P  D+  N🅪Sg/J+ VB/C\n> entered by    the big   postern . With enchanting murmurs Daisy admired this   aspect   or\n# VP/J    NSg/P D   NSg/J ?       . P    Nᴹ/Vg/J    NPl/V3  NPr+  VP/J    I/Ddem N🅪Sg/VB+ NPr/C\n> that         of the feudal silhouette against the sky      , admired the gardens , the\n# NSg/I/C/Ddem P  D   J      NSg/VB+    C/P     D   N🅪Sg/VB+ . VP/J    D   NPl/V3+ . D\n> sparkling odor    of jonquils and  the frothy odor    of hawthorn and  plum       blossoms and\n# Nᴹ/Vg/J   N🅪Sg/Am P  NPl      VB/C D   NSg/J  N🅪Sg/Am P  N🅪Sg     VB/C N🅪Sg/VB/J+ NPl/V3   VB/C\n> the pale     gold     odor    of kiss    - me       - at    - the - gate    . It       was  strange  to reach  the marble\n# D   NSg/VB/J Nᴹ/VB/J+ N🅪Sg/Am P  NSg/VB+ . NPr/ISg+ . NSg/P . D   . NSg/VB+ . NPr/ISg+ VLPt NSg/VB/J P  NSg/VB D+  NSg/VB/J+\n> steps   and  find   no       stir   of bright   dresses in        and  out          the door    , and  hear no       sound\n# NPl/V3+ VB/C NSg/VB NSg/Dq/P NSg/VB P  NPr/VB/J NPl/V3+ NPr/J/R/P VB/C NSg/VB/J/R/P D+  NSg/VB+ . VB/C VB   NSg/Dq/P N🅪Sg/VB/J+\n> but     bird      voices  in        the trees   .\n# NSg/C/P NPr/VB/J+ NPl/V3+ NPr/J/R/P D+  NPl/V3+ .\n>\n#\n> And  inside  , as    we   wandered through Marie Antoinette music      - rooms  and  Restoration\n# VB/C NSg/J/P . R/C/P IPl+ VP/J     NSg/J/P NPr+  NPr        N🅪Sg/VB/J+ . NPl/V3 VB/C NPr🅪Sg+\n> Salons , I       felt      that         there were     guests  concealed behind  every couch  and  table   ,\n# NPl+   . ISg/#r+ N🅪Sg/VP/J NSg/I/C/Ddem R+    NSg/VLPt NPl/V3+ VP/J      NSg/J/P Dq    NSg/VB VB/C NSg/VB+ .\n> under   orders  to be       breathlessly silent until we   had passed through . As    Gatsby\n# NSg/J/P NPl/V3+ P  NSg/VLXB R            NSg/J  C/P   IPl+ VP  VP/J   NSg/J/P . R/C/P NPr\n> closed the door   of ‘          ‘          the Merton College Library ” I       could   have    sworn I       heard the\n# VP/J   D   NSg/VB P  Unlintable Unlintable D   NPr    NSg+    NSg+    . ISg/#r+ NSg/VXB NSg/VXB VB/J  ISg/#r+ VP/J  D\n> owl     - eyed man       break   into ghostly laughter .\n# NSg/VB+ . VP/J NPr/VB/J+ NSg/VB+ P    J/R     Nᴹ+      .\n>\n#\n> We   went    up         - stairs , through period    bedrooms swathed in        rose      and  lavender silk     and\n# IPl+ NSg/VPt NSg/VB/J/P . NPl+   . NSg/J/P NSg/VB/J+ NPl+     J/Am    NPr/J/R/P NPr/VPt/J VB/C Nᴹ/VB/J  N🅪Sg/VB+ VB/C\n> vivid with new   flowers   , through dressing - rooms   and  poolrooms , and  bathrooms with\n# NSg/J P    NSg/J NPrPl/V3+ . NSg/J/P Nᴹ/Vg/J+ . NPl/V3+ VB/C NPl       . VB/C NPl/V3+   P\n> sunken baths   — intruding into one     chamber where   a   dishevelled man       in        pajamas was\n# VPp/J  NSg/VB+ . Nᴹ/Vg/J   P    NSg/I/J NSg/VB+ NSg/R/C D/P VP/J/Comm   NPr/VB/J+ NPr/J/R/P NPl     VLPt\n> doing   liver   exercises on  the floor   . It       was  Mr   . Klipspringer , the ‘          ‘          boarder . ” I\n# Nᴹ/Vg/J N🅪Sg/J+ NPl/V3+   J/P D   NSg/VB+ . NPr/ISg+ VLPt NSg+ . ?            . D   Unlintable Unlintable NSg+    . . ISg/#r+\n> had seen    him  wandering hungrily about the beach   that          morning    . Finally we   came      to\n# VP  NSg/VPp ISg+ Nᴹ/Vg/J   R        J/P   D+  NPr/VB+ NSg/I/C/Ddem+ N🅪Sg/Vg/J+ . R       IPl+ NSg/VPt/P P\n> Gatsby’s own      apartment , a   bedroom and  a   bath    , and  an  Adam’s study   , where   we   sat\n# NPr$     NSg/VB/J NSg+      . D/P NSg     VB/C D/P NSg/VB+ . VB/C D/P NPr$   NSg/VB+ . NSg/R/C IPl+ NSg/VP/J\n> down        and  drank   a   glass     of some     Chartreuse he       took from a   cupboard in        the wall    .\n# N🅪Sg/VB/J/P VB/C NSg/VPt D/P NPr🅪Sg/VB P  I/J/R/Dq NSg/J      NPr/ISg+ VPt  P    D/P NSg/VB+  NPr/J/R/P D   NPr/VB+ .\n>\n#\n> He       hadn’t once  ceased looking at    Daisy , and  I       think  he       revalued everything in\n# NPr/ISg+ VPt    NSg/C VP/J   Nᴹ/Vg/J NSg/P NPr+  . VB/C ISg/#r+ NSg/VB NPr/ISg+ VP/J     NSg/I/VB+  NPr/J/R/P\n> his     house   according to the measure of response it       drew    from her     well       - loved eyes    .\n# ISg/D$+ NPr/VB+ Nᴹ/Vg/J   P  D   NSg/VB  P  NSg+     NPr/ISg+ NPr/VPt P    ISg/D$+ NSg/VB/J/R . VP/J  NPl/V3+ .\n> Sometimes , too , he       stared around at    his     possessions in        a    dazed way    , as    though in\n# R         . R   . NPr/ISg+ VP/J   J/P    NSg/P ISg/D$+ NPl/V3+     NPr/J/R/P D/P+ VP/J+ NSg/J+ . R/C/P C      NPr/J/R/P\n> her     actual and  astounding presence none  of it       was  any    longer real  . Once  he\n# ISg/D$+ NSg/J  VB/C Nᴹ/Vg/J    N🅪Sg/VB+ NSg/I P  NPr/ISg+ VLPt I/R/Dq NSg/JC NSg/J . NSg/C NPr/ISg+\n> nearly toppled down        a   flight    of stairs .\n# R      VP/J    N🅪Sg/VB/J/P D/P N🅪Sg/VB/J P  NPl+   .\n>\n#\n> His     bedroom was  the simplest room      of all          — except where   the dresser was  garnished\n# ISg/D$+ NSg+    VLPt D   JS       N🅪Sg/VB/J P  NSg/I/J/C/Dq . VB/C/P NSg/R/C D+  NSg+    VLPt VP/J\n> with a   toilet  set       of pure      dull gold     . Daisy took the brush  with delight    , and\n# P    D/P NSg/VB+ NPr/VBP/J P  NSg/VB/J+ VB/J Nᴹ/VB/J+ . NPr+  VPt  D   NSg/VB P    N🅪Sg/VB/J+ . VB/C\n> smoothed her     hair     , whereupon Gatsby sat      down        and  shaded his     eyes    and  began to\n# VP/J     ISg/D$+ N🅪Sg/VB+ . C         NPr    NSg/VP/J N🅪Sg/VB/J/P VB/C J      ISg/D$+ NPl/V3+ VB/C VPt   P\n> laugh  .\n# NSg/VB .\n>\n#\n> “ It’s the funniest thing , old   sport   , ” he       said hilariously . “ I       can’t — When    I       try\n# . K    D   JS       NSg+  . NSg/J NSg/VB+ . . NPr/ISg+ VP/J R           . . ISg/#r+ VXB   . NSg/I/C ISg/#r+ NSg/VB/J\n> to — ”\n# P  . .\n>\n#\n> He       had passed visibly through two  states    and  was  entering upon a   third    . After\n# NPr/ISg+ VP  VP/J   R       NSg/J/P NSg+ NPrPl/V3+ VB/C VLPt Nᴹ/Vg/J  P    D/P NSg/VB/J . P\n> his     embarrassment and  his     unreasoning joy        he       was  consumed with wonder  at    her\n# ISg/D$+ N🅪Sg+         VB/C ISg/D$+ J           NPr🅪Sg/VB+ NPr/ISg+ VLPt VP/J     P    N🅪Sg/VB NSg/P ISg/D$+\n> presence . He       had been     full     of the idea so          long     , dreamed      it       right    through to the\n# N🅪Sg/VB+ . NPr/ISg+ VP  NSg/VLPp NSg/VB/J P  D+  NSg+ NSg/I/J/R/C NPr/VB/J . VP/J/NoAm/Au NPr/ISg+ NPr/VB/J NSg/J/P P  D+\n> end     , waited with his     teeth set       , so          to speak  , at    an  inconceivable pitch    of\n# NSg/VB+ . VP/J   P    ISg/D$+ NPl+  NPr/VBP/J . NSg/I/J/R/C P  NSg/VB . NSg/P D/P J             NSg/VB/J P\n> intensity . Now       , in        the reaction   , he       was  running   down        like         an  overwound clock   .\n# Nᴹ+       . NSg/J/R/C . NPr/J/R/P D+  N🅪Sg/VB/J+ . NPr/ISg+ VLPt Nᴹ/Vg/J/P N🅪Sg/VB/J/P NSg/VB/J/C/P D/P VP/J      NSg/VB+ .\n>\n#\n> Recovering himself in        a    minute    he       opened for   us       two hulking patent    cabinets\n# Nᴹ/Vg/J    ISg+    NPr/J/R/P D/P+ NSg/VB/J+ NPr/ISg+ VP/J   R/C/P NPr/IPl+ NSg Nᴹ/Vg/J NSg/VB/J+ NPl+\n> which held his     massed suits  and  dressing - gowns  and  ties    , and  his     shirts  , piled\n# I/C+  VP   ISg/D$+ VP/J   NPl/V3 VB/C Nᴹ/Vg/J+ . NPl/V3 VB/C NPl/V3+ . VB/C ISg/D$+ NPl/V3+ . VP/J\n> like         bricks  in        stacks  a   dozen high       .\n# NSg/VB/J/C/P NPl/V3+ NPr/J/R/P NPl/V3+ D/P NSg   NSg/VB/J/R .\n>\n#\n> “ I’ve got a   man       in        England who    buys   me       clothes . He       sends  over    a   selection of\n# . K    VP  D/P NPr/VB/J+ NPr/J/R/P NPr+    NPr/I+ NPl/V3 NPr/ISg+ NPl/V3+ . NPr/ISg+ NPl/V3 NSg/J/P D/P N🅪Sg      P\n> things at    the beginning of each season  , spring  and  fall     . ”\n# NPl+   NSg/P D   NSg/Vg/J  P  Dq+  NSg/VB+ . N🅪Sg/VB VB/C N🅪Sg/VB+ . .\n>\n#\n> He       took out          a   pile   of shirts  and  began throwing them     , one     by    one     , before us       ,\n# NPr/ISg+ VPt  NSg/VB/J/R/P D/P NSg/VB P  NPl/V3+ VB/C VPt   Nᴹ/Vg/J  NSg/IPl+ . NSg/I/J NSg/P NSg/I/J . C/P    NPr/IPl+ .\n> shirts of sheer    linen  and  thick    silk    and  fine      flannel   , which lost their folds   as\n# NPl/V3 P  NSg/VB/J N🅪Sg/J VB/C NSg/VB/J N🅪Sg/VB VB/C NSg/VB/J+ NSg/VB/J+ . I/C+  VP/J D$+   NPl/V3+ R/C/P\n> they fell      and  covered the table   in        many       colored     disarray . While      we   admired he\n# IPl+ NSg/VPt/J VB/C VP/J    D+  NSg/VB+ NPr/J/R/P NSg/I/J/Dq NSg/VP/J/Am NSg/VB   . NSg/VB/C/P IPl+ VP/J    NPr/ISg+\n> brought more         and  the soft  rich      heap    mounted higher — shirts with stripes and\n# VP      NPr/I/J/R/Dq VB/C D   NSg/J NPr/VB/J+ NSg/VB+ VP/J    NSg/JC . NPl/V3 P    NPl/V3+ VB/C\n> scrolls and  plaids in        coral  and  applegreen and  lavender and  faint    orange      , with\n# NPl/V3  VB/C NPl/V3 NPr/J/R/P N🅪Sg/J VB/C ?          VB/C Nᴹ/VB/J  VB/C NSg/VB/J NPr🅪Sg/VB/J . P\n> monograms of Indian blue      . Suddenly , with a   strained sound      , Daisy bent     her     head\n# NPl/V3    P  NPr/J  N🅪Sg/VB/J . R        . P    D/P VP/J     N🅪Sg/VB/J+ . NPr+  NSg/VP/J ISg/D$+ NPr/VB/J+\n> into the shirts  and  began to cry    stormily .\n# P    D   NPl/V3+ VB/C VPt   P  NSg/VB R        .\n>\n#\n> “ They’re such  beautiful shirts  , ” she  sobbed , her     voice   muffled in        the thick\n# . K       NSg/I NSg/J     NPl/V3+ . . ISg+ VP     . ISg/D$+ NSg/VB+ VP/J    NPr/J/R/P D   NSg/VB/J\n> folds   . “ It       makes  me       sad      because I’ve never seen    such  — such  beautiful shirts\n# NPl/V3+ . . NPr/ISg+ NPl/V3 NPr/ISg+ NSg/VB/J C/P     K    R     NSg/VPp NSg/I . NSg/I NSg/J     NPl/V3+\n> before . ”\n# C/P    . .\n>\n#\n> After the house   , we   were     to see    the grounds and  the swimming - pool    , and  the\n# P     D+  NPr/VB+ . IPl+ NSg/VLPt P  NSg/VB D   NPl/V3  VB/C D   NSg/Vg+  . NSg/VB+ . VB/C D\n> hydroplane and  the midsummer flowers   — but     outside   Gatsby’s window  it       began to\n# NSg/VB     VB/C D   NSg/J     NPrPl/V3+ . NSg/C/P Nᴹ/VB/J/P NPr$     NSg/VB+ NPr/ISg+ VPt   P\n> rain    again , so          we   stood in        a   row     looking at    the corrugated surface of the Sound      .\n# N🅪Sg/VB P     . NSg/I/J/R/C IPl+ VP    NPr/J/R/P D/P NSg/VB+ Nᴹ/Vg/J NSg/P D   VP/J       NSg/VB  P  D   N🅪Sg/VB/J+ .\n>\n#\n> “ If    it       wasn’t for   the mist     we   could   see    your home      across the bay       , ” said Gatsby .\n# . NSg/C NPr/ISg+ VPt    R/C/P D   N🅪Sg/VB+ IPl+ NSg/VXB NSg/VB D$+  NSg/VB/J+ NSg/P  D   NSg/VB/J+ . . VP/J NPr    .\n> “ You    always have    a    green        light      that          burns    all          night    at    the end    of your dock    . ”\n# . ISgPl+ R      NSg/VXB D/P+ NPr🅪Sg/VB/J+ N🅪Sg/VB/J+ NSg/I/C/Ddem+ NPrPl/V3 NSg/I/J/C/Dq N🅪Sg/VB+ NSg/P D   NSg/VB P  D$+  NSg/VB+ . .\n>\n#\n> Daisy put     her     arm       through his     abruptly , but     he       seemed absorbed in        what   he       had\n# NPr+  NSg/VBP ISg/D$+ NSg/VB/J+ NSg/J/P ISg/D$+ R        . NSg/C/P NPr/ISg+ VP/J   VP/J     NPr/J/R/P NSg/I+ NPr/ISg+ VP\n> just said . Possibly it       had occurred to him  that         the colossal significance of\n# J/R  VP/J . R        NPr/ISg+ VP  VP       P  ISg+ NSg/I/C/Ddem D   J        NSg          P\n> that         light      had now       vanished forever . Compared to the great  distance that          had\n# NSg/I/C/Ddem N🅪Sg/VB/J+ VP  NSg/J/R/C VP/J     NSg/J   . VP/J     P  D+  NSg/J+ N🅪Sg/VB+ NSg/I/C/Ddem+ VP\n> separated him  from Daisy it       had seemed very near       to her     , almost touching  her     . It\n# VP/J      ISg+ P    NPr+  NPr/ISg+ VP  VP/J   J/R  NSg/VB/J/P P  ISg/D$+ . R      Nᴹ/Vg/J/P ISg/D$+ . NPr/ISg+\n> had seemed as    close    as    a   star   to the moon    . Now       it       was  again a   green       light     on  a\n# VP  VP/J   R/C/P NSg/VB/J R/C/P D/P NSg/VB P  D+  NPr/VB+ . NSg/J/R/C NPr/ISg+ VLPt P     D/P NPr🅪Sg/VB/J N🅪Sg/VB/J J/P D/P+\n> dock    . His     count  of enchanted objects had diminished by    one     .\n# NSg/VB+ . ISg/D$+ NSg/VB P  VP/J      NPl/V3+ VP  VP/J       NSg/P NSg/I/J .\n>\n#\n> I       began to walk   about the room       , examining various indefinite objects in        the half\n# ISg/#r+ VPt   P  NSg/VB J/P   D+  N🅪Sg/VB/J+ . Nᴹ/Vg/J   J       NSg/J      NPl/V3  NPr/J/R/P D+  N🅪Sg/J/P+\n> darkness . A   large photograph of an   elderly man       in        yachting costume attracted me       ,\n# Nᴹ+      . D/P NSg/J NSg/VB     P  D/P+ R+      NPr/VB/J+ NPr/J/R/P Nᴹ/Vg/J  NSg/VB  VP/J      NPr/ISg+ .\n> hung     on  the wall    over    his     desk    .\n# NPr/VP/J J/P D   NPr/VB+ NSg/J/P ISg/D$+ NSg/VB+ .\n>\n#\n> “ Who’s this    ? ”\n# . NPr$  I/Ddem+ . .\n>\n#\n> “ That          ? That’s Mr   . Dan  Cody , old    sport   . ”\n# . NSg/I/C/Ddem+ . NSg$   NSg+ . NPr+ NPr  . NSg/J+ NSg/VB+ . .\n>\n#\n> The name    sounded faintly familiar .\n# D+  NSg/VB+ VP/J    R       NSg/J    .\n>\n#\n> “ He’s dead     now       . He       used to be       my  best        friend    years ago . ”\n# . NPr$ NSg/VB/J NSg/J/R/C . NPr/ISg+ VP/J P  NSg/VLXB D$+ NPr/VXB/JS+ NPr/VB/J+ NPl+  J/P . .\n>\n#\n> There was  a   small    picture of Gatsby , also in        yachting costume , on  the\n# R+    VLPt D/P NPr/VB/J NSg/VB  P  NPr    . R/C  NPr/J/R/P Nᴹ/Vg/J  NSg/VB  . J/P D\n> bureau — Gatsby with his     head      thrown back     defiantly — taken apparently when    he       was\n# NSg+   . NPr    P    ISg/D$+ NPr/VB/J+ VPp/J  NSg/VB/J R         . VPp/J R          NSg/I/C NPr/ISg+ VLPt\n> about eighteen .\n# J/P   NSg      .\n>\n#\n> “ I       adore it       , ” exclaimed Daisy . “ The pompadour ! You    never told me       you    had a\n# . ISg/#r+ VB    NPr/ISg+ . . VP/J      NPr+  . . D   NSg/VB    . ISgPl+ R     VP   NPr/ISg+ ISgPl+ VP  D/P\n> pompadour — or    a   yacht   . ”\n# NSg/VB    . NPr/C D/P NSg/VB+ . .\n>\n#\n> “ Look   at    this    , ” said Gatsby quickly . “ Here’s a   lot    of clippings — about you    . ”\n# . NSg/VB NSg/P I/Ddem+ . . VP/J NPr    R       . . K      D/P NPr/VB P  NPl/V3+   . J/P   ISgPl+ . .\n>\n#\n> They stood side      by    side      examining it       . I       was  going   to ask    to see    the rubies when\n# IPl+ VP    NSg/VB/J+ NSg/P NSg/VB/J+ Nᴹ/Vg/J   NPr/ISg+ . ISg/#r+ VLPt Nᴹ/Vg/J P  NSg/VB P  NSg/VB D   NPl/V3 NSg/I/C\n> the phone   rang , and  Gatsby took up         the receiver .\n# D   NSg/VB+ VPt  . VB/C NPr    VPt  NSg/VB/J/P D   NSg+     .\n>\n#\n> “ Yes    . . . . Well       , I       can’t talk    now       . . . . I       can’t talk    now       , old   sport   . . . . I\n# . NPl/VB . . . . NSg/VB/J/R . ISg/#r+ VXB   N🅪Sg/VB NSg/J/R/C . . . . ISg/#r+ VXB   N🅪Sg/VB NSg/J/R/C . NSg/J NSg/VB+ . . . . ISg/#r+\n> said a    small     town . . . . He       must    know what   a    small     town is  . . . . Well       , he’s no\n# VP/J D/P+ NPr/VB/J+ NSg+ . . . . NPr/ISg+ NSg/VXB VB   NSg/I+ D/P+ NPr/VB/J+ NSg+ VL3 . . . . NSg/VB/J/R . NPr$ NSg/Dq/P\n> use      to us       if    Detroit is  his     idea of a   small    town . . . . ” He       rang off        .\n# N🅪Sg/VB+ P  NPr/IPl+ NSg/C NPr+    VL3 ISg/D$+ NSg  P  D/P NPr/VB/J NSg+ . . . . . NPr/ISg+ VPt  NSg/VB/J/P .\n>\n#\n> “ Come       here quick    ! ” cried Daisy at    the window  .\n# . NSg/VBPp/P J/R  NSg/VB/J . . VP/J  NPr+  NSg/P D+  NSg/VB+ .\n>\n#\n> The rain     was  still      falling , but     the darkness had parted in        the west      , and  there\n# D+  N🅪Sg/VB+ VLPt NSg/VB/J/R Nᴹ/Vg/J . NSg/C/P D+  Nᴹ+      VP  VP/J   NPr/J/R/P D+  NPr/VB/J+ . VB/C R+\n> was  a   pink      and  golden   billow of foamy clouds  above   the sea  .\n# VLPt D/P N🅪Sg/VB/J VB/C NPr/VB/J NSg/VB P  NSg/J NPl/V3+ NSg/J/P D   NSg+ .\n>\n#\n> “ Look   at    that          , ” she  whispered , and  then      after a    moment : “ I’d like         to just get\n# . NSg/VB NSg/P NSg/I/C/Ddem+ . . ISg+ VP/J      . VB/C NSg/J/R/C P     D/P+ NSg+   . . K   NSg/VB/J/C/P P  J/R  NSg/VB\n> one     of those  pink      clouds  and  put     you    in        it       and  push   you    around . ”\n# NSg/I/J P  I/Ddem N🅪Sg/VB/J NPl/V3+ VB/C NSg/VBP ISgPl+ NPr/J/R/P NPr/ISg+ VB/C NSg/VB ISgPl+ J/P    . .\n>\n#\n> I       tried to go       then      , but     they wouldn’t hear of it       ; perhaps my  presence made them\n# ISg/#r+ VP/J  P  NSg/VB/J NSg/J/R/C . NSg/C/P IPl+ VXB      VB   P  NPr/ISg+ . NSg/R   D$+ N🅪Sg/VB+ VP   NSg/IPl+\n> feel     more         satisfactorily alone .\n# NSg/I/VB NPr/I/J/R/Dq R              J     .\n>\n#\n> “ I       know what   we'll do  , ” said Gatsby , “ we'll have    Klipspringer play    the piano     . ”\n# . ISg/#r+ VB   NSg/I+ K     VXB . . VP/J NPr    . . K     NSg/VXB ?            N🅪Sg/VB D   NSg/VB/J+ . .\n>\n#\n> He       went    out          of the room       calling “ Ewing ! ” and  returned in        a    few       minutes\n# NPr/ISg+ NSg/VPt NSg/VB/J/R/P P  D+  N🅪Sg/VB/J+ Nᴹ/Vg/J . NPr   . . VB/C VP/J     NPr/J/R/P D/P+ NSg/I/Dq+ NPl/V3+\n> accompanied by    an  embarrassed , slightly worn  young    man       , with shell      - rimmed\n# VP/J        NSg/P D/P VP/J        . R        VPp/J NPr/VB/J NPr/VB/J+ . P    NPr🅪Sg/VB+ . VP/J\n> glasses and  scanty blond    hair     . He       was  now       decently clothed in        a   “ sport   shirt   , ”\n# NPl/V3  VB/C J      NSg/VB/J N🅪Sg/VB+ . NPr/ISg+ VLPt NSg/J/R/C R        VP/J    NPr/J/R/P D/P . NSg/VB+ NSg/VB+ . .\n> open     at    the neck    , sneakers , and  duck    trousers of a   nebulous hue   .\n# NSg/VB/J NSg/P D   NSg/VB+ . NPl+     . VB/C NSg/VB+ NPl/V3   P  D/P J        N🅪Sg+ .\n>\n#\n> “ Did  we   interrupt your exercises ? ” inquired Daisy politely .\n# . VXPt IPl+ NSg/VB    D$+  NPl/V3+   . . VP/J     NPr+  R        .\n>\n#\n> “ I       was  asleep , ” cried Mr   . Klipspringer , in        a   spasm  of embarrassment . “ That          is  ,\n# . ISg/#r+ VLPt J      . . VP/J  NSg+ . ?            . NPr/J/R/P D/P NSg/VB P  N🅪Sg+         . . NSg/I/C/Ddem+ VL3 .\n> I’d been     asleep . Then      I       got up         . . . ”\n# K   NSg/VLPp J      . NSg/J/R/C ISg/#r+ VP  NSg/VB/J/P . . . .\n>\n#\n> “ Klipspringer plays  the piano     , ” said Gatsby , cutting  him  off        . “ Don’t you    , Ewing ,\n# . ?            NPl/V3 D   NSg/VB/J+ . . VP/J NPr    . NSg/Vg/J ISg+ NSg/VB/J/P . . VXB   ISgPl+ . NPr   .\n> old   sport   ? ”\n# NSg/J NSg/VB+ . .\n>\n#\n> “ I       don’t play    well       . I       don’t — I       hardly play    at    all          . I’m all          out           of prac — — — ”\n# . ISg/#r+ VXB   N🅪Sg/VB NSg/VB/J/R . ISg/#r+ VXB   . ISg/#r+ R      N🅪Sg/VB NSg/P NSg/I/J/C/Dq . K   NSg/I/J/C/Dq NSg/VB/J/R/P+ P  ?    . . . .\n>\n#\n> “ We’ll go       down        - stairs , ” interrupted Gatsby . He       flipped a    switch    . The gray\n# . K     NSg/VB/J N🅪Sg/VB/J/P . NPl+   . . VP/J        NPr    . NPr/ISg+ VP      D/P+ NSg/VB/J+ . D+  NPr🅪Sg/VB/J/Am+\n> windows   disappeared as    the house   glowed full     of light      .\n# NPrPl/V3+ VP/J        R/C/P D+  NPr/VB+ VP/J   NSg/VB/J P  N🅪Sg/VB/J+ .\n>\n#\n> In        the music      - room       Gatsby turned on  a   solitary lamp    beside the piano     . He       lit\n# NPr/J/R/P D+  N🅪Sg/VB/J+ . N🅪Sg/VB/J+ NPr    VP/J   J/P D/P NSg/J    NSg/VB+ P      D   NSg/VB/J+ . NPr/ISg+ NSg/VP/J\n> Daisy’s cigarette from a   trembling match   , and  sat      down        with her     on  a   couch   far\n# NPr$    NSg/VB+   P    D/P Nᴹ/Vg/J   NSg/VB+ . VB/C NSg/VP/J N🅪Sg/VB/J/P P    ISg/D$+ J/P D/P NSg/VB+ NSg/VB/J\n> across the room       , where   there was  no       light      save       what   the gleaming floor   bounced\n# NSg/P  D   N🅪Sg/VB/J+ . NSg/R/C R+    VLPt NSg/Dq/P N🅪Sg/VB/J+ NSg/VB/C/P NSg/I+ D   Nᴹ/Vg/J  NSg/VB+ VP/J\n> in        from the hall .\n# NPr/J/R/P P    D   NPr+ .\n>\n#\n> When    Klipspringer had played “ The Love      Nest       ” he       turned around on  the bench   and\n# NSg/I/C ?            VP  VP/J   . D   NPr🅪Sg/VB NSg/VB/JS+ . NPr/ISg+ VP/J   J/P    J/P D   NSg/VB+ VB/C\n> searched unhappily for   Gatsby in        the gloom  .\n# VP/J     R         R/C/P NPr    NPr/J/R/P D   Nᴹ/VB+ .\n>\n#\n> “ I’m all          out          of practice , you    see    . I       told you    I       couldn’t play    . I’m all          out          of\n# . K   NSg/I/J/C/Dq NSg/VB/J/R/P P  NSg/VB+  . ISgPl+ NSg/VB . ISg/#r+ VP   ISgPl+ ISg/#r+ VXB      N🅪Sg/VB . K   NSg/I/J/C/Dq NSg/VB/J/R/P P\n> prac — ”\n# ?    . .\n>\n#\n> “ Don’t talk    so          much         , old   sport   , ” commanded Gatsby . “ Play    ! ”\n# . VXB   N🅪Sg/VB NSg/I/J/R/C NSg/I/J/R/Dq . NSg/J NSg/VB+ . . VP/J      NPr    . . N🅪Sg/VB . .\n>\n#\n> “ In        the morning    , In        the evening    , Ain’t we   got fun     — — — ”\n# . NPr/J/R/P D+  N🅪Sg/Vg/J+ . NPr/J/R/P D+  N🅪Sg/Vg/J+ . VXB   IPl+ VP  Nᴹ/VB/J . . . .\n>\n#\n> Outside   the wind     was  loud  and  there was  a   faint    flow   of thunder along the Sound      .\n# Nᴹ/VB/J/P D+  N🅪Sg/VB+ VLPt NSg/J VB/C R+    VLPt D/P NSg/VB/J NSg/VB P  NSg/VB+ P     D+  N🅪Sg/VB/J+ .\n> All           the lights  were     going   on  in        West      Egg      now       ; the electric trains , men  - carrying ,\n# NSg/I/J/C/Dq+ D+  NPl/V3+ NSg/VLPt Nᴹ/Vg/J J/P NPr/J/R/P NPr/VB/J+ N🅪Sg/VB+ NSg/J/R/C . D   NSg/J    NPl/V3 . NPl+ . Nᴹ/Vg/J  .\n> were     plunging home      through the rain     from New   York . It       was  the hour of a    profound\n# NSg/VLPt Nᴹ/Vg/J  NSg/VB/J+ NSg/J/P D   N🅪Sg/VB+ P    NSg/J NPr+ . NPr/ISg+ VLPt D   NSg  P  D/P+ NSg/VB/J+\n> human     change   , and  excitement was  generating on  the air      .\n# NSg/VB/J+ N🅪Sg/VB+ . VB/C NSg+       VLPt Nᴹ/Vg/J    J/P D+  N🅪Sg/VB+ .\n>\n#\n> “ One     thing’s sure and  nothing’s surer The rich     get    richer and  the poor\n# . NSg/I/J NSg$    J    VB/C NSg$      JC    D   NPr/VB/J NSg/VB NSg/JC VB/C D   NSg/VB/J\n> get    — children . In        the meantime , In        between time       — — — ”\n# NSg/VB . NPl+     . NPr/J/R/P D+  NSg+     . NPr/J/R/P NSg/P   N🅪Sg/VB/J+ . . . .\n>\n#\n> As    I       went    over    to say    good     - by    I       saw     that         the expression of bewilderment had come\n# R/C/P ISg/#r+ NSg/VPt NSg/J/P P  NSg/VB NPr/VB/J . NSg/P ISg/#r+ NSg/VPt NSg/I/C/Ddem D   N🅪Sg+      P  NSg          VP  NSg/VBPp/P\n> back     into Gatsby’s face    , as    though a   faint    doubt    had occurred to him  as    to the\n# NSg/VB/J P    NPr$     NSg/VB+ . R/C/P C      D/P NSg/VB/J N🅪Sg/VB+ VP  VP       P  ISg+ R/C/P P  D\n> quality of his     present  happiness . Almost five years ! There must    have    been\n# N🅪Sg/J  P  ISg/D$+ NSg/VB/J Nᴹ+       . R      NSg+ NPl+  . R+    NSg/VXB NSg/VXB NSg/VLPp\n> moments even       that          afternoon when    Daisy tumbled short      of his     dreams  — not     through\n# NPl+    NSg/VB/J/R NSg/I/C/Ddem+ N🅪Sg+     NSg/I/C NPr+  VP/J    NPr/VB/J/P P  ISg/D$+ NPl/V3+ . NSg/R/C NSg/J/P\n> her     own       fault   , but     because of the colossal vitality of his     illusion . It       had gone\n# ISg/D$+ NSg/VB/J+ NSg/VB+ . NSg/C/P C/P     P  D   J        Nᴹ       P  ISg/D$+ N🅪Sg+    . NPr/ISg+ VP  VPp/J/P\n> beyond her     , beyond everything . He       had thrown himself into it       with a    creative\n# NSg/P  ISg/D$+ . NSg/P  NSg/I/VB+  . NPr/ISg+ VP  VPp/J  ISg+    P    NPr/ISg+ P    D/P+ NSg/J+\n> passion  , adding  to it       all          the time       , decking  it       out          with every bright    feather\n# NPrᴹ/VB+ . Nᴹ/Vg/J P  NPr/ISg+ NSg/I/J/C/Dq D+  N🅪Sg/VB/J+ . Nᴹ/Vg/J+ NPr/ISg+ NSg/VB/J/R/P P    Dq+   NPr/VB/J+ NSg/VB+\n> that          drifted his     way    . No       amount of fire      or    freshness can     challenge what   a    man\n# NSg/I/C/Ddem+ VP/J    ISg/D$+ NSg/J+ . NSg/Dq/P NSg/VB P  N🅪Sg/VB/J NPr/C NSg+      NPr/VXB N🅪Sg/VB   NSg/I+ D/P+ NPr/VB/J+\n> can     store  up         in        his     ghostly heart    .\n# NPr/VXB NSg/VB NSg/VB/J/P NPr/J/R/P ISg/D$+ J/R+    N🅪Sg/VB+ .\n>\n#\n> As    I       watched him  he       adjusted himself a   little     , visibly . His     hand    took hold     of\n# R/C/P ISg/#r+ VP/J    ISg+ NPr/ISg+ VP/J     ISg+    D/P NPr/I/J/Dq . R       . ISg/D$+ NSg/VB+ VPt  NSg/VB/J P\n> hers , and  as    she  said something low        in        his     ear       he       turned toward her     with a   rush\n# ISg+ . VB/C R/C/P ISg+ VP/J NSg/I/J+  NSg/VB/J/R NPr/J/R/P ISg/D$+ NSg/VB/J+ NPr/ISg+ VP/J   J/P    ISg/D$+ P    D/P NPr/VB/J\n> of emotion . I       think  that          voice   held him  most         , with its     fluctuating , feverish\n# P  N🅪Sg+   . ISg/#r+ NSg/VB NSg/I/C/Ddem+ NSg/VB+ VP   ISg+ NSg/I/J/R/Dq . P    ISg/D$+ Nᴹ/Vg/J     . J\n> warmth , because it       couldn’t be       over    - dreamed      — that         voice   was  a   deathless song  .\n# Nᴹ+    . C/P     NPr/ISg+ VXB      NSg/VLXB NSg/J/P . VP/J/NoAm/Au . NSg/I/C/Ddem NSg/VB+ VLPt D/P J         N🅪Sg+ .\n>\n#\n> They had forgotten me       , but     Daisy glanced up         and  held out          her     hand    ; Gatsby didn’t\n# IPl+ VP  NSg/VPp/J NPr/ISg+ . NSg/C/P NPr+  VP/J    NSg/VB/J/P VB/C VP   NSg/VB/J/R/P ISg/D$+ NSg/VB+ . NPr    VXPt\n> know me       now       at    all          . I       looked once  more         at    them     and  they looked back     at    me       ,\n# VB   NPr/ISg+ NSg/J/R/C NSg/P NSg/I/J/C/Dq . ISg/#r+ VP/J   NSg/C NPr/I/J/R/Dq NSg/P NSg/IPl+ VB/C IPl+ VP/J   NSg/VB/J NSg/P NPr/ISg+ .\n> remotely , possessed by    intense life     . Then      I       went    out          of the room       and  down        the\n# R        . VP/J      NSg/P J+      N🅪Sg/VB+ . NSg/J/R/C ISg/#r+ NSg/VPt NSg/VB/J/R/P P  D+  N🅪Sg/VB/J+ VB/C N🅪Sg/VB/J/P D+\n> marble    steps   into the rain     , leaving them     there together .\n# NSg/VB/J+ NPl/V3+ P    D+  N🅪Sg/VB+ . Nᴹ/Vg/J NSg/IPl+ R+    J        .\n>\n#\n>              CHAPTER VI\n# HeadingStart NSg/VB+ NPr/#r\n>\n#\n> About this    time       an  ambitious young    reporter from New    York arrived one     morning    at\n# J/P   I/Ddem+ N🅪Sg/VB/J+ D/P J         NPr/VB/J NSg/VB   P    NSg/J+ NPr+ VP/J    NSg/I/J N🅪Sg/Vg/J+ NSg/P\n> Gatsby’s door    and  asked him  if    he       had anything  to say    .\n# NPr$     NSg/VB+ VB/C VP/J  ISg+ NSg/C NPr/ISg+ VP  NSg/I/VB+ P  NSg/VB .\n>\n#\n> “ Anything  to say    about what   ? ” inquired Gatsby politely .\n# . NSg/I/VB+ P  NSg/VB J/P   NSg/I+ . . VP/J     NPr    R        .\n>\n#\n> “ Why    — any    statement to give   out          . ”\n# . NSg/VB . I/R/Dq NSg/VB/J+ P  NSg/VB NSg/VB/J/R/P . .\n>\n#\n> It       transpired after a   confused five minutes that         the man       had heard Gatsby’s name\n# NPr/ISg+ VP/J       P     D/P VP/J     NSg  NPl/V3+ NSg/I/C/Ddem D+  NPr/VB/J+ VP  VP/J  NPr$     NSg/VB+\n> around his     office  in        a   connection which he       either wouldn’t reveal or    didn’t\n# J/P    ISg/D$+ NSg/VB+ NPr/J/R/P D/P N🅪Sg+      I/C+  NPr/ISg+ I/C    VXB      NSg/VB NPr/C VXPt\n> fully understand . This    was  his     day     off        and  with laudable initiative he       had\n# R     VB         . I/Ddem+ VLPt ISg/D$+ NPr🅪Sg+ NSg/VB/J/P VB/C P    J+       NSg/J+     NPr/ISg+ VP\n> hurried out          “ to see    . ”\n# VP/J    NSg/VB/J/R/P . P  NSg/VB . .\n>\n#\n> It       was  a   random   shot     , and  yet      the reporter’s instinct was  right    . Gatsby’s\n# NPr/ISg+ VLPt D/P NSg/VB/J NSg/VP/J . VB/C NSg/VB/C D   NSg$       NSg/J+   VLPt NPr/VB/J . NPr$\n> notoriety , spread   about by    the hundreds who    had accepted his     hospitality and  so\n# Nᴹ        . N🅪Sg/VBP J/P   NSg/P D   NPl+     NPr/I+ VP  VP/J     ISg/D$+ Nᴹ+         VB/C NSg/I/J/R/C\n> become authorities upon his     past       , had increased all          summer     until he       fell      just\n# VBPp   NPl+        P    ISg/D$+ NSg/VB/J/P . VP  VP/J      NSg/I/J/C/Dq NPr🅪Sg/VB+ C/P   NPr/ISg+ NSg/VPt/J J/R\n> short      of being        news   . Contemporary legends such  as    the “ underground pipe    - line   to\n# NPr/VB/J/P P  N🅪Sg/VLg/J/C Nᴹ/VB+ . NSg/J        NPl/V3  NSg/I R/C/P D   . NSg/VB/J    NSg/VB+ . NSg/VB P\n> Canada ” attached themselves to him  , and  there was  one     persistent story   that          he\n# NPr+   . VP/J     IPl+       P  ISg+ . VB/C R+    VLPt NSg/I/J J          NSg/VB+ NSg/I/C/Ddem+ NPr/ISg+\n> didn’t live in        a   house   at    all          , but     in        a   boat    that          looked like         a   house   and  was\n# VXPt   VB/J NPr/J/R/P D/P NPr/VB+ NSg/P NSg/I/J/C/Dq . NSg/C/P NPr/J/R/P D/P NSg/VB+ NSg/I/C/Ddem+ VP/J   NSg/VB/J/C/P D/P NPr/VB+ VB/C VLPt\n> moved secretly up         and  down        the Long     Island  shore   . Just why    these  inventions were\n# VP/J  R        NSg/VB/J/P VB/C N🅪Sg/VB/J/P D   NPr/VB/J NSg/VB+ NSg/VB+ . J/R  NSg/VB I/Ddem NPl        NSg/VLPt\n> a   source  of satisfaction to James  Gatz of North     Dakota , isn’t   easy     to say    .\n# D/P N🅪Sg/VB P  Nᴹ+          P  NPrPl+ ?    P  NPr/VB/J+ NPr+   . NSg/VX3 NSg/VB/J P  NSg/VB .\n>\n#\n> James  Gatz — that          was  really , or    at    least    legally , his     name    . He       had changed it       at\n# NPrPl+ ?    . NSg/I/C/Ddem+ VLPt R      . NPr/C NSg/P NSg/J/Dq R       . ISg/D$+ NSg/VB+ . NPr/ISg+ VP  VP/J    NPr/ISg+ NSg/P\n> the age     of seventeen and  at    the specific moment that          witnessed the beginning of\n# D   N🅪Sg/VB P  NSg       VB/C NSg/P D+  NSg/J+   NSg+   NSg/I/C/Ddem+ VP/J      D   NSg/Vg/J  P\n> his     career    — when    he       saw     Dan  Cody’s yacht   drop    anchor  over    the most         insidious flat\n# ISg/D$+ NSg/VB/J+ . NSg/I/C NPr/ISg+ NSg/VPt NPr+ NPr$   NSg/VB+ NSg/VB+ NSg/VB+ NSg/J/P D   NSg/I/J/R/Dq J         NSg/VB/J\n> on  Lake    Superior . It       was  James  Gatz who    had been     loafing along the beach   that\n# J/P NSg/VB+ NPr/J    . NPr/ISg+ VLPt NPrPl+ ?    NPr/I+ VP  NSg/VLPp Nᴹ/Vg/J P     D   NPr/VB+ NSg/I/C/Ddem+\n> afternoon in        a   torn green       jersey and  a   pair   of canvas  pants   , but     it       was  already\n# N🅪Sg      NPr/J/R/P D/P VB/J NPr🅪Sg/VB/J NPr+   VB/C D/P NSg/VB P  NSg/VB+ NPl/V3+ . NSg/C/P NPr/ISg+ VLPt R\n> Jay  Gatsby who    borrowed a   rowboat , pulled out          to the Tuolomee , and  informed Cody\n# NPr+ NPr    NPr/I+ VP/J     D/P NSg/VB  . VP/J   NSg/VB/J/R/P P  D   ?        . VB/C VP/J     NPr\n> that         a   wind     might    catch  him  and  break   him  up         in        half      an  hour .\n# NSg/I/C/Ddem D/P N🅪Sg/VB+ Nᴹ/VXB/J NSg/VB ISg+ VB/C NSg/VB+ ISg+ NSg/VB/J/P NPr/J/R/P N🅪Sg/J/P+ D/P NSg+ .\n>\n#\n> I       suppose he’d had the name    ready    for   a   long     time       , even       then      . His     parents were\n# ISg/#r+ VB      K    VP  D   NSg/VB+ NSg/VB/J R/C/P D/P NPr/VB/J N🅪Sg/VB/J+ . NSg/VB/J/R NSg/J/R/C . ISg/D$+ NPl/V3+ NSg/VLPt\n> shiftless and  unsuccessful farm    people  — his     imagination had never really accepted\n# J         VB/C J            NSg/VB+ NPl/VB+ . ISg/D$+ NSg+        VP  R     R      VP/J\n> them     as    his     parents at    all          . The truth    was  that         Jay  Gatsby of West      Egg      , Long\n# NSg/IPl+ R/C/P ISg/D$+ NPl/V3+ NSg/P NSg/I/J/C/Dq . D+  N🅪Sg/VB+ VLPt NSg/I/C/Ddem NPr+ NPr    P  NPr/VB/J+ N🅪Sg/VB+ . NPr/VB/J+\n> Island  , sprang from his     Platonic conception of himself . He       was  a   son    of God     — a\n# NSg/VB+ . VB     P    ISg/D$+ NSg/J    N🅪Sg       P  ISg+    . NPr/ISg+ VLPt D/P NPr/VB P  NPr/VB+ . D/P+\n> phrase  which , if    it       means  anything  , means  just that          — and  he       must    be       about His\n# NSg/VB+ I/C+  . NSg/C NPr/ISg+ NPl/V3 NSg/I/VB+ . NPl/V3 J/R  NSg/I/C/Ddem+ . VB/C NPr/ISg+ NSg/VXB NSg/VLXB J/P   ISg/D$+\n> Father’s business , the service of a   vast  , vulgar , and  meretricious beauty     . So          he\n# NPr$     N🅪Sg/J+  . D   NSg/VB  P  D/P NSg/J . NSg/J  . VB/C J            N🅪Sg/VB/J+ . NSg/I/J/R/C NPr/ISg+\n> invented just the sort   of Jay  Gatsby that         a   seventeen year - old   boy     would be\n# VP/J     J/R  D   NSg/VB P  NPr+ NPr    NSg/I/C/Ddem D/P NSg       NSg+ . NSg/J NSg/VB+ VXB   NSg/VLXB\n> likely to invent , and  to this   conception he       was  faithful to the end     .\n# NSg/J  P  VB     . VB/C P  I/Ddem N🅪Sg       NPr/ISg+ VLPt NSg/J    P  D   NSg/VB+ .\n>\n#\n> For   over    a    year he       had been     beating his     way    along the south     shore  of Lake\n# R/C/P NSg/J/P D/P+ NSg+ NPr/ISg+ VP  NSg/VLPp Nᴹ/Vg/J ISg/D$+ NSg/J+ P     D   NPr/VB/J+ NSg/VB P  NSg/VB+\n> Superior as    a   clam     - digger and  a   salmon       - fisher or    in        any    other    capacity that\n# NPr/J    R/C/P D/P NSg/VB/J . NSg    VB/C D/P N🅪SgPl/VB/J+ . NPr+   NPr/C NPr/J/R/P I/R/Dq NSg/VB/J N🅪Sg/J+  NSg/I/C/Ddem+\n> brought him  food and  bed        . His     brown       , hardening body    lived naturally through the\n# VP      ISg+ NSg  VB/C NSg/VBP/J+ . ISg/D$+ NPr🅪Sg/VB/J . Nᴹ/Vg/J   NSg/VB+ VP/J  R         NSg/J/P D\n> half      - fierce , half      - lazy     work    of the bracing days . He       knew women early   , and  since\n# N🅪Sg/J/P+ . J      . N🅪Sg/J/P+ . NSg/VB/J N🅪Sg/VB P  D   Nᴹ/Vg/J NPl+ . NPr/ISg+ VPt  NPl+  NSg/J/R . VB/C C/P\n> they spoiled him  he       became contemptuous of them     , of young    virgins because they\n# IPl+ VP/J    ISg+ NPr/ISg+ VPt    J            P  NSg/IPl+ . P  NPr/VB/J NPl     C/P     IPl+\n> were     ignorant , of the others  because they were     hysterical about things which in\n# NSg/VLPt NSg/J    . P  D   NPl/V3+ C/P     IPl+ NSg/VLPt J          J/P   NPl+   I/C+  NPr/J/R/P\n> his     overwhelming self        - absorbtion he       took for   granted .\n# ISg/D$+ Nᴹ/Vg/J      NSg/I/VB/J+ . ?          NPr/ISg+ VPt  R/C/P VP/J    .\n>\n#\n> But     his     heart    was  in        a   constant , turbulent riot   . The most         grotesque and\n# NSg/C/P ISg/D$+ N🅪Sg/VB+ VLPt NPr/J/R/P D/P NSg/J    . J         NSg/VB . D   NSg/I/J/R/Dq NSg/J     VB/C\n> fantastic conceits haunted him  in        his     bed        at    night    . A   universe of ineffable\n# NSg/J     NPl/V3   VP/J    ISg+ NPr/J/R/P ISg/D$+ NSg/VBP/J+ NSg/P N🅪Sg/VB+ . D/P NPr      P  J\n> gaudiness spun itself out          in        his     brain      while      the clock   ticked on  the wash    - stand\n# Nᴹ        VB   ISg+   NSg/VB/J/R/P NPr/J/R/P ISg/D$+ NPr🅪Sg/VB+ NSg/VB/C/P D   NSg/VB+ VP/J   J/P D   NPr/VB+ . NSg/VB\n> and  the moon    soaked with wet      light      his     tangled clothes upon the floor   . Each\n# VB/C D   NPr/VB+ VP/J   P    NSg/VP/J N🅪Sg/VB/J+ ISg/D$+ VP/J    NPl/V3+ P    D   NSg/VB+ . Dq+\n> night    he       added to the pattern  of his     fancies until drowsiness closed down        upon\n# N🅪Sg/VB+ NPr/ISg+ VP/J  P  D   NSg/VB/J P  ISg/D$+ NPl/V3  C/P   Nᴹ         VP/J   N🅪Sg/VB/J/P P\n> some     vivid scene   with an  oblivious embrace . For   a    while       these  reveries provided\n# I/J/R/Dq NSg/J NSg/VB+ P    D/P J         NSg/VB+ . R/C/P D/P+ NSg/VB/C/P+ I/Ddem NPl/V3   VP/J/C\n> an  outlet for   his     imagination ; they were     a   satisfactory hint   of the unreality of\n# D/P NSg+   R/C/P ISg/D$+ NSg+        . IPl+ NSg/VLPt D/P NSg/J        NSg/VB P  D   N🅪Sg      P\n> reality , a   promise that         the rock      of the world   was  founded securely on  a   fairy’s\n# N🅪Sg+   . D/P NSg/VB+ NSg/I/C/Ddem D   NPr🅪Sg/VB P  D   NSg/VB+ VLPt VP/J    R        J/P D/P NSg$\n> wing    .\n# NSg/VB+ .\n>\n#\n> An  instinct toward his     future glory   had led      him  , some      months before , to the\n# D/P NSg/J+   J/P    ISg/D$+ NSg/J+ NSg/VB+ VP  NSg/VP/J ISg+ . I/J/R/Dq+ NPl+   C/P    . P  D\n> small    Lutheran College of St      . Olaf’s in        northern Minnesota . He       stayed there two\n# NPr/VB/J NSg/J    NSg     P  NPr/VB+ . NPr$   NPr/J/R/P NSg/J+   NPr+      . NPr/ISg+ VP/J   R+    NSg+\n> weeks  , dismayed at    its     ferocious indifference to the drums  of his     destiny , to\n# NPrPl+ . VP/J     NSg/P ISg/D$+ J         N🅪Sg/VB+     P  D   NPl/V3 P  ISg/D$+ N🅪Sg+   . P\n> destiny itself , and  despising the janitor’s work     with which he       was  to pay      his\n# N🅪Sg    ISg+   . VB/C Nᴹ/Vg/J   D   NSg$      N🅪Sg/VB+ P    I/C+  NPr/ISg+ VLPt P  NSg/VB/J ISg/D$+\n> way    through . Then      he       drifted back     to Lake    Superior , and  he       was  still      searching\n# NSg/J+ NSg/J/P . NSg/J/R/C NPr/ISg+ VP/J    NSg/VB/J P  NSg/VB+ NPr/J    . VB/C NPr/ISg+ VLPt NSg/VB/J/R Nᴹ/Vg/J\n> for   something to do  on  the day     that          Dan  Cody’s yacht   dropped anchor  in        the\n# R/C/P NSg/I/J+  P  VXB J/P D+  NPr🅪Sg+ NSg/I/C/Ddem+ NPr+ NPr$   NSg/VB+ VP/J    NSg/VB+ NPr/J/R/P D\n> shallows alongshore .\n# NPl/V3+  J          .\n>\n#\n> Cody was  fifty years old   then      , a   product of the Nevada silver   fields    , of the\n# NPr  VLPt NSg   NPl+  NSg/J NSg/J/R/C . D/P NSg/VB  P  D   NPr    Nᴹ/VB/J+ NPrPl/V3+ . P  D\n> Yukon , of every rush      for   metal      since seventy - five . The transactions in        Montana\n# NPr   . P  Dq    NPr/VB/J+ R/C/P N🅪Sg/VB/J+ C/P   NSg     . NSg  . D   NPl          NPr/J/R/P NPr+\n> copper     that          made him  many        times   a   millionaire found  him  physically robust but     on\n# N🅪Sg/VB/J+ NSg/I/C/Ddem+ VP   ISg+ NSg/I/J/Dq+ NPl/V3+ D/P NSg         NSg/VP ISg+ R          J      NSg/C/P J/P\n> the verge  of soft  - mindedness , and  , suspecting this    , an  infinite number     of women\n# D   NSg/VB P  NSg/J . Nᴹ+        . VB/C . Nᴹ/Vg/J    I/Ddem+ . D/P NSg/J    N🅪Sg/VB/JC P  NPl+\n> tried to separate him  from his     money   . The none   too savory ramifications by    which\n# VP/J  P  NSg/VB/J ISg+ P    ISg/D$+ N🅪Sg/J+ . D+  NSg/I+ R   NSg/J  +             NSg/P I/C+\n> Ella Kaye , the newspaper woman   , played Madame de   Maintenon to his     weakness and\n# NPr  NPr  . D   N🅪Sg/VB+  NSg/VB+ . VP/J   NSg+   NPr+ ?         P  ISg/D$+ N🅪Sg+    VB/C\n> sent   him  to sea in        a   yacht   , were     common   property of the turgid journalism\n# NSg/VP ISg+ P  NSg NPr/J/R/P D/P NSg/VB+ . NSg/VLPt NSg/VB/J NSg/VB   P  D   J      Nᴹ+\n> of 1902 . He       had been     coasting along all          too hospitable shores  for   five years\n# P  #    . NPr/ISg+ VP  NSg/VLPp Nᴹ/Vg/J  P     NSg/I/J/C/Dq R   J          NPl/V3+ R/C/P NSg  NPl+\n> when    he       turned up         as    James  Gatz’s destiny in        Little     Girl    Bay       .\n# NSg/I/C NPr/ISg+ VP/J   NSg/VB/J/P R/C/P NPrPl+ ?      N🅪Sg+   NPr/J/R/P NPr/I/J/Dq NSg/VB+ NSg/VB/J+ .\n>\n#\n> To young    Gatz , resting  on  his     oars   and  looking up         at    the railed deck    , that         yacht\n# P  NPr/VB/J ?    . Nᴹ/Vg/J+ J/P ISg/D$+ NPl/V3 VB/C Nᴹ/Vg/J NSg/VB/J/P NSg/P D   VP/J   NSg/VB+ . NSg/I/C/Ddem NSg/VB+\n> represented all          the beauty    and  glamour in        the world   . I       suppose he       smiled at\n# VP/J        NSg/I/J/C/Dq D   N🅪Sg/VB/J VB/C NSg/VB+ NPr/J/R/P D   NSg/VB+ . ISg/#r+ VB      NPr/ISg+ VP/J   NSg/P\n> Cody — he       had probably discovered that         people  liked him  when    he       smiled . At    any\n# NPr  . NPr/ISg+ VP  R        VP/J       NSg/I/C/Ddem NPl/VB+ VP/J  ISg+ NSg/I/C NPr/ISg+ VP/J   . NSg/P I/R/Dq+\n> rate    Cody asked him  a   few      questions ( one     of them     elicited the brand   new   name    )\n# NSg/VB+ NPr  VP/J  ISg+ D/P NSg/I/Dq NPl/V3+   . NSg/I/J P  NSg/IPl+ VP/J     D   NSg/VB+ NSg/J NSg/VB+ .\n> and  found  that         he       was  quick    and  extravagantly ambitious . A    few       days later he\n# VB/C NSg/VP NSg/I/C/Ddem NPr/ISg+ VLPt NSg/VB/J VB/C R             J         . D/P+ NSg/I/Dq+ NPl+ JC    NPr/ISg+\n> took him  to Duluth and  bought him  a   blue      coat    , six pair   of white       duck    trousers ,\n# VPt  ISg+ P  NPr    VB/C NSg/VP ISg+ D/P N🅪Sg/VB/J NSg/VB+ . NSg NSg/VB P  NPr🅪Sg/VB/J NSg/VB+ NPl/V3+  .\n> and  a   yachting cap     . And  when    the Tuolomee left     for   the West      Indies and  the\n# VB/C D/P Nᴹ/Vg/J  NPr/VB+ . VB/C NSg/I/C D   ?        NPr/VP/J R/C/P D   NPr/VB/J+ NPrPl  VB/C D\n> Barbary Coast   Gatsby left     too .\n# NPr     NSg/VB+ NPr    NPr/VP/J R   .\n>\n#\n> He       was  employed in        a    vague     personal capacity — while      he       remained with Cody he       was\n# NPr/ISg+ VLPt VP/J     NPr/J/R/P D/P+ NSg/VB/J+ NSg/J+   N🅪Sg/J+  . NSg/VB/C/P NPr/ISg+ VP/J     P    NPr  NPr/ISg+ VLPt\n> in        turn   steward , mate   , skipper , secretary , and  even       jailor , for   Dan  Cody sober\n# NPr/J/R/P NSg/VB NSg/VB+ . NSg/VB . NSg/VB+ . NPr/VB+   . VB/C NSg/VB/J/R ?      . R/C/P NPr+ NPr  VB/J\n> knew what   lavish   doings Dan  Cody drunk     might    soon be       about , and  he       provided for\n# VPt  NSg/I+ NSg/VB/J NPl/V3 NPr+ NPr  NSg/VPp/J Nᴹ/VXB/J J/R  NSg/VLXB J/P   . VB/C NPr/ISg+ VP/J/C   R/C/P\n> such  contingencies by    reposing more         and  more         trust     in        Gatsby . The arrangement\n# NSg/I NPl+          NSg/P Nᴹ/Vg/J  NPr/I/J/R/Dq VB/C NPr/I/J/R/Dq N🅪Sg/VB/J NPr/J/R/P NPr    . D+  NSg+\n> lasted five years , during which the boat    went    three times   around the Continent .\n# VP/J   NSg+ NPl+  . VB/P   I/C+  D+  NSg/VB+ NSg/VPt NSg   NPl/V3+ J/P    D+  NPr/J+    .\n> It       might    have    lasted indefinitely except for   the fact that          Ella Kaye came      on\n# NPr/ISg+ Nᴹ/VXB/J NSg/VXB VP/J   R            VB/C/P R/C/P D+  NSg+ NSg/I/C/Ddem+ NPr  NPr  NSg/VPt/P J/P\n> board    one     night    in        Boston and  a   week   later Dan  Cody inhospitably died .\n# N🅪Sg/VB+ NSg/I/J N🅪Sg/VB+ NPr/J/R/P NPr+   VB/C D/P NSg/J+ JC    NPr+ NPr  R            VP/J .\n>\n#\n> I       remember the portrait of him  up         in        Gatsby’s bedroom , a   gray           , florid man       with a\n# ISg/#r+ NSg/VB   D   NSg/VB/J P  ISg+ NSg/VB/J/P NPr/J/R/P NPr$     NSg+    . D/P NPr🅪Sg/VB/J/Am . J      NPr/VB/J+ P    D/P\n> hard     , empty    face    — the pioneer debauchee , who    during one     phase  of American life\n# N🅪Sg/J/R . NSg/VB/J NSg/VB+ . D   NSg/VB+ NSg       . NPr/I+ VB/P   NSg/I/J NPr/VB P  NPr/J    N🅪Sg/VB+\n> brought back     to the Eastern seaboard the savage    violence of the frontier brothel\n# VP      NSg/VB/J P  D   J       NSg+     D   NPr/VB/J+ Nᴹ/VB    P  D   NSg/VB+  NSg\n> and  saloon . It       was  indirectly due   to Cody that          Gatsby drank   so          little     . Sometimes\n# VB/C NSg+   . NPr/ISg+ VLPt R          NSg/J P  NPr  NSg/I/C/Ddem+ NPr    NSg/VPt NSg/I/J/R/C NPr/I/J/Dq . R\n> in        the course of gay       parties women used to rub    champagne  into his     hair     ; for\n# NPr/J/R/P D   NSg/VB P  NPr/VB/J+ NPl/V3+ NPl+  VP/J P  NSg/VB N🅪Sg/VB/J+ P    ISg/D$+ N🅪Sg/VB+ . R/C/P\n> himself he       formed the habit  of letting liquor   alone .\n# ISg+    NPr/ISg+ VP/J   D   NSg/VB P  NSg/Vg  N🅪Sg/VB+ J     .\n>\n#\n> And  it       was  from Cody that         he       inherited money   — a   legacy of twenty - five thousand\n# VB/C NPr/ISg+ VLPt P    NPr  NSg/I/C/Ddem NPr/ISg+ VP/J      N🅪Sg/J+ . D/P NSg/J  P  NSg    . NSg  NSg\n> dollars . He       didn’t get    it       . He       never understood the legal  device      that          was  used\n# NPl+    . NPr/ISg+ VXPt   NSg/VB NPr/ISg+ . NPr/ISg+ R     VP/J       D+  NSg/J+ NSg/VB/J/P+ NSg/I/C/Ddem+ VLPt VP/J\n> against him  , but     what   remained of the millions went    intact to Ella Kaye . He       was\n# C/P     ISg+ . NSg/C/P NSg/I+ VP/J     P  D+  NPl+     NSg/VPt J      P  NPr  NPr  . NPr/ISg+ VLPt\n> left     with his     singularly appropriate education ; the vague    contour of Jay  Gatsby\n# NPr/VP/J P    ISg/D$+ R          VB/J+       NSg+      . D   NSg/VB/J NSg/VB  P  NPr+ NPr\n> had filled out          to the substantiality of a   man       .\n# VP  VP/J   NSg/VB/J/R/P P  D   ?              P  D/P NPr/VB/J+ .\n>\n#\n> He       told me       all          this   very much         later , but     I’ve put     it       down        here with the idea of\n# NPr/ISg+ VP   NPr/ISg+ NSg/I/J/C/Dq I/Ddem J/R  NSg/I/J/R/Dq JC    . NSg/C/P K    NSg/VBP NPr/ISg+ N🅪Sg/VB/J/P J/R  P    D   NSg  P\n> exploding those  first wild     rumors     about his     antecedents , which weren’t even\n# Nᴹ/Vg/J   I/Ddem NSg/J NSg/VB/J NPl/V3/Am+ J/P   ISg/D$+ NPl         . I/C+  VPt     NSg/VB/J/R\n> faintly true     . Moreover he       told it       to me       at    a   time      of confusion , when    I       had\n# R       NSg/VB/J . R        NPr/ISg+ VP   NPr/ISg+ P  NPr/ISg+ NSg/P D/P N🅪Sg/VB/J P  N🅪Sg/VB+  . NSg/I/C ISg/#r+ VP\n> reached the point  of believing everything and  nothing  about him  . So          I       take\n# VP/J    D   NSg/VB P  Nᴹ/Vg/J   NSg/I/VB+  VB/C NSg/I/J+ J/P   ISg+ . NSg/I/J/R/C ISg/#r+ NSg/VB\n> advantage of this    short       halt      , while      Gatsby , so          to speak  , caught his     breath     , to\n# N🅪Sg/VB   P  I/Ddem+ NPr/VB/J/P+ NSg/VB/J+ . NSg/VB/C/P NPr    . NSg/I/J/R/C P  NSg/VB . VP/J   ISg/D$+ N🅪Sg/VB/J+ . P\n> clear    this   set        of misconceptions away .\n# NSg/VB/J I/Ddem NPr/VBP/J+ P  NPl            VB/J .\n>\n#\n> It       was  a   halt     , too , in        my  association with his     affairs . For   several weeks  I\n# NPr/ISg+ VLPt D/P NSg/VB/J . R   . NPr/J/R/P D$+ N🅪Sg+       P    ISg/D$+ NPl+    . R/C/P J/Dq+   NPrPl+ ISg/#r+\n> didn’t see    him  or    hear his     voice   on  the phone   — mostly I       was  in        New   York , trotting\n# VXPt   NSg/VB ISg+ NPr/C VB   ISg/D$+ NSg/VB+ J/P D   NSg/VB+ . R      ISg/#r+ VLPt NPr/J/R/P NSg/J NPr+ . NSg/Vg/J\n> around with Jordan and  trying  to ingratiate myself with her     senile aunt — but\n# J/P    P    NPr+   VB/C Nᴹ/Vg/J P  VB         ISg+   P    ISg/D$+ NSg/J  NSg+ . NSg/C/P\n> finally I       went    over    to his     house   one      Sunday  afternoon . I       hadn’t been     there two\n# R       ISg/#r+ NSg/VPt NSg/J/P P  ISg/D$+ NPr/VB+ NSg/I/J+ NSg/VB+ N🅪Sg+     . ISg/#r+ VPt    NSg/VLPp R+    NSg\n> minutes when    somebody brought Tom     Buchanan in        for   a   drink   . I       was  startled ,\n# NPl/V3+ NSg/I/C NSg/I+   VP      NPr/VB+ NPr+     NPr/J/R/P R/C/P D/P NSg/VB+ . ISg/#r+ VLPt VP/J     .\n> naturally , but     the really surprising thing was  that         it       hadn’t happened before .\n# R         . NSg/C/P D   R      Nᴹ/Vg/J+   NSg+  VLPt NSg/I/C/Ddem NPr/ISg+ VPt    VP/J     C/P    .\n>\n#\n> They were     a   party    of three on  horseback — Tom    and  a   man       named Sloane and  a   pretty\n# IPl+ NSg/VLPt D/P NSg/VB/J P  NSg   J/P Nᴹ        . NPr/VB VB/C D/P NPr/VB/J+ VP/J  NPr    VB/C D/P NSg/VB/J/R\n> woman   in        a   brown       riding   - habit   , who    had been     there previously .\n# NSg/VB+ NPr/J/R/P D/P NPr🅪Sg/VB/J Nᴹ/Vg/J+ . NSg/VB+ . NPr/I+ VP  NSg/VLPp R+    R          .\n>\n#\n> “ I’m delighted to see    you    , ” said Gatsby , standing on  his     porch . “ I’m delighted\n# . K   VP/J      P  NSg/VB ISgPl+ . . VP/J NPr    . Nᴹ/Vg/J  J/P ISg/D$+ NSg+  . . K   VP/J\n> that         you    dropped in        . ”\n# NSg/I/C/Ddem ISgPl+ VP/J    NPr/J/R/P . .\n>\n#\n> As    though they cared !\n# R/C/P C      IPl+ VP    .\n>\n#\n> “ Sit    right    down        . Have    a   cigarette or    a    cigar . ” He       walked around the room\n# . NSg/VB NPr/VB/J N🅪Sg/VB/J/P . NSg/VXB D/P NSg/VB    NPr/C D/P+ NSg+  . . NPr/ISg+ VP/J   J/P    D+  N🅪Sg/VB/J+\n> quickly , ringing bells  . “ I’ll have    something to drink  for   you    in        just a   minute    . ”\n# R       . Nᴹ/Vg/J NPl/V3 . . K    NSg/VXB NSg/I/J+  P  NSg/VB R/C/P ISgPl+ NPr/J/R/P J/R  D/P NSg/VB/J+ . .\n>\n#\n> He       was  profoundly affected by    the fact that          Tom     was  there . But     he       would be\n# NPr/ISg+ VLPt R          NSg/VP/J NSg/P D+  NSg+ NSg/I/C/Ddem+ NPr/VB+ VLPt R     . NSg/C/P NPr/ISg+ VXB   NSg/VLXB\n> uneasy   anyhow until he       had given       them     something , realizing         in        a    vague     way    that\n# NSg/VB/J J      C/P   NPr/ISg+ VP  NSg/VPp/J/P NSg/IPl+ NSg/I/J+  . Nᴹ/Vg/J/Comm/NoAm NPr/J/R/P D/P+ NSg/VB/J+ NSg/J+ NSg/I/C/Ddem+\n> that          was  all          they came      for   . Mr   . Sloane wanted nothing  . A    lemonade ? No       , thanks  . A\n# NSg/I/C/Ddem+ VLPt NSg/I/J/C/Dq IPl+ NSg/VPt/P R/C/P . NSg+ . NPr    VP/J   NSg/I/J+ . D/P+ N🅪Sg+    . NSg/Dq/P . NPl/V3+ . D/P+\n> little      champagne  ? Nothing  at    all          , thanks  . . . . I’m sorry    — — —\n# NPr/I/J/Dq+ N🅪Sg/VB/J+ . NSg/I/J+ NSg/P NSg/I/J/C/Dq . NPl/V3+ . . . . K   NSg/VB/J . . .\n>\n#\n> “ Did  you    have    a    nice   ride    ? ”\n# . VXPt ISgPl+ NSg/VXB D/P+ NPr/J+ NSg/VB+ . .\n>\n#\n> “ Very good      roads around here . ”\n# . J/R  NPr/VB/J+ NPl+  J/P    J/R  . .\n>\n#\n> “ I       suppose the automobiles — — — ”\n# . ISg/#r+ VB      D   NPl/V3      . . . .\n>\n#\n> “ Yeah . ”\n# . NSg  . .\n>\n#\n> Moved by    an   irresistible impulse , Gatsby turned to Tom     , who    had accepted the\n# VP/J  NSg/P D/P+ J+           NSg/VB+ . NPr    VP/J   P  NPr/VB+ . NPr/I+ VP  VP/J     D\n> introduction as    a   stranger   .\n# NSg+         R/C/P D/P NSg/VB/JC+ .\n>\n#\n> “ I       believe we’ve met somewhere before , Mr   . Buchanan . ”\n# . ISg/#r+ VB      K     VP  NSg       C/P    . NSg+ . NPr+     . .\n>\n#\n> “ Oh     , yes    , ” said Tom     , gruffly polite , but     obviously not     remembering . “ So          we   did  .\n# . NPr/VB . NPl/VB . . VP/J NPr/VB+ . R       VB/J   . NSg/C/P R         NSg/R/C Nᴹ/Vg/J     . . NSg/I/J/R/C IPl+ VXPt .\n> I       remember very well       . ”\n# ISg/#r+ NSg/VB   J/R  NSg/VB/J/R . .\n>\n#\n> “ About two  weeks  ago . ”\n# . J/P   NSg+ NPrPl+ J/P . .\n>\n#\n> “ That’s right    . You    were     with Nick    here . ”\n# . NSg$   NPr/VB/J . ISgPl+ NSg/VLPt P    NPr/VB+ J/R  . .\n>\n#\n> “ I       know your wife      , ” continued Gatsby , almost aggressively .\n# . ISg/#r+ VB   D$+  NSg/VB/J+ . . VP/J      NPr    . R      R            .\n>\n#\n> “ That          so          ? ”\n# . NSg/I/C/Ddem+ NSg/I/J/R/C . .\n>\n#\n> Tom     turned to me       .\n# NPr/VB+ VP/J   P  NPr/ISg+ .\n>\n#\n> “ You    live near       here , Nick    ? ”\n# . ISgPl+ VB/J NSg/VB/J/P J/R  . NPr/VB+ . .\n>\n#\n> “ Next     door    . ”\n# . NSg/J/P+ NSg/VB+ . .\n>\n#\n> “ That          so          ? ”\n# . NSg/I/C/Ddem+ NSg/I/J/R/C . .\n>\n#\n> Mr   . Sloane didn’t enter  into the conversation , but     lounged back     haughtily in        his\n# NSg+ . NPr    VXPt   NSg/VB P    D   N🅪Sg/VB+     . NSg/C/P VP/J    NSg/VB/J R         NPr/J/R/P ISg/D$+\n> chair   ; the woman   said nothing  either — until unexpectedly , after two highballs ,\n# NSg/VB+ . D   NSg/VB+ VP/J NSg/I/J+ I/C    . C/P   R            . P     NSg NPl/V3    .\n> she  became cordial .\n# ISg+ VPt    NSg/J   .\n>\n#\n> “ We’ll all          come        over    to your next    party     , Mr   . Gatsby , ” she  suggested . “ What   do\n# . K     NSg/I/J/C/Dq NSg/VBPp/P+ NSg/J/P P  D$+  NSg/J/P NSg/VB/J+ . NSg+ . NPr    . . ISg+ VP/J      . . NSg/I+ VXB\n> you    say    ? ”\n# ISgPl+ NSg/VB . .\n>\n#\n> “ Certainly ; I’d be       delighted to have    you    . ”\n# . R         . K   NSg/VLXB VP/J      P  NSg/VXB ISgPl+ . .\n>\n#\n> “ Be       ver ’ nice  , ” said Mr   . Sloane , without gratitude . “ Well       — think  ought     to be\n# . NSg/VLXB ?   . NPr/J . . VP/J NSg+ . NPr    . C/P     NSg+      . . NSg/VB/J/R . NSg/VB NSg/I/VXB P  NSg/VLXB\n> starting home      . ”\n# Nᴹ/Vg/J  NSg/VB/J+ . .\n>\n#\n> “ Please don’t hurry   , ” Gatsby urged them     . He       had control of himself now       , and  he\n# . VB     VXB   NSg/VB+ . . NPr    VP/J  NSg/IPl+ . NPr/ISg+ VP  N🅪Sg/VB P  ISg+    NSg/J/R/C . VB/C NPr/ISg+\n> wanted to see    more         of Tom     . “ Why    don’t you    — why    don’t you    stay     for   supper  ? I\n# VP/J   P  NSg/VB NPr/I/J/R/Dq P  NPr/VB+ . . NSg/VB VXB   ISgPl+ . NSg/VB VXB   ISgPl+ NSg/VB/J R/C/P NSg/VB+ . ISg/#r+\n> wouldn’t be       surprised if    some     other    people  dropped in        from New   York . ”\n# VXB      NSg/VLXB VP/J      NSg/C I/J/R/Dq NSg/VB/J NPl/VB+ VP/J    NPr/J/R/P P    NSg/J NPr+ . .\n>\n#\n> “ You    come       to supper with me       , ” said the lady    enthusiastically . “ Both   of you    . ”\n# . ISgPl+ NSg/VBPp/P P  NSg/VB P    NPr/ISg+ . . VP/J D+  NPr/VB+ R                . . I/C/Dq P  ISgPl+ . .\n>\n#\n> This   included me       . Mr   . Sloane got to his     feet .\n# I/Ddem VP/J     NPr/ISg+ . NSg+ . NPr    VP  P  ISg/D$+ NPl+ .\n>\n#\n> “ Come       along , ” he       said — but     to her     only  .\n# . NSg/VBPp/P P     . . NPr/ISg+ VP/J . NSg/C/P P  ISg/D$+ J/R/C .\n>\n#\n> “ I       mean     it       , ” she  insisted . “ I’d love      to have    you    . Lots   of room       . ”\n# . ISg/#r+ NSg/VB/J NPr/ISg+ . . ISg+ VP/J     . . K   NPr🅪Sg/VB P  NSg/VXB ISgPl+ . NPl/V3 P  N🅪Sg/VB/J+ . .\n>\n#\n> Gatsby looked at    me       questioningly . He       wanted to go       , and  he       didn’t see    that         Mr   .\n# NPr    VP/J   NSg/P NPr/ISg+ R             . NPr/ISg+ VP/J   P  NSg/VB/J . VB/C NPr/ISg+ VXPt   NSg/VB NSg/I/C/Ddem NSg+ .\n> Sloane had determined he       shouldn’t .\n# NPr    VP  VP/J       NPr/ISg+ VXB       .\n>\n#\n> “ I’m afraid I       won’t be       able     to , ” I       said .\n# . K   J      ISg/#r+ VXB   NSg/VLXB NSg/VB/J P  . . ISg/#r+ VP/J .\n>\n#\n> “ Well       , you    come       , ” she  urged , concentrating on  Gatsby .\n# . NSg/VB/J/R . ISgPl+ NSg/VBPp/P . . ISg+ VP/J  . Nᴹ/Vg/J       J/P NPr    .\n>\n#\n> Mr   . Sloane murmured something close    to her     ear       .\n# NSg+ . NPr    VP/J     NSg/I/J+  NSg/VB/J P  ISg/D$+ NSg/VB/J+ .\n>\n#\n> “ We   won’t be       late  if    we   start  now       , ” she  insisted aloud .\n# . IPl+ VXB   NSg/VLXB NSg/J NSg/C IPl+ NSg/VB NSg/J/R/C . . ISg+ VP/J     J     .\n>\n#\n> “ I       haven’t got a   horse   , ” said Gatsby . “ I       used to ride   in        the army , but     I’ve\n# . ISg/#r+ VXB     VP  D/P NSg/VB+ . . VP/J NPr    . . ISg/#r+ VP/J P  NSg/VB NPr/J/R/P D+  NSg+ . NSg/C/P K\n> never bought a   horse   . I’ll have    to follow you    in        my  car  . Excuse  me       for   just a\n# R     NSg/VP D/P NSg/VB+ . K    NSg/VXB P  NSg/VB ISgPl+ NPr/J/R/P D$+ NSg+ . NSg/VB+ NPr/ISg+ R/C/P J/R  D/P+\n> minute    . ”\n# NSg/VB/J+ . .\n>\n#\n> The rest   of us       walked out          on  the porch , where   Sloane and  the lady    began an\n# D   NSg/VB P  NPr/IPl+ VP/J   NSg/VB/J/R/P J/P D+  NSg+  . NSg/R/C NPr    VB/C D   NPr/VB+ VPt   D/P\n> impassioned conversation aside .\n# J           N🅪Sg/VB+     NSg/J .\n>\n#\n> “ My  God     , I       believe the man’s       coming  , ” said Tom     . “ Doesn’t he       know she  doesn’t\n# . D$+ NPr/VB+ . ISg/#r+ VB      D   NPr$/I/VB/J Nᴹ/Vg/J . . VP/J NPr/VB+ . . VX3     NPr/ISg+ VB   ISg+ VX3\n> want   him  ? ”\n# NSg/VB ISg+ . .\n>\n#\n> “ She  says   she  does    want   him  . ”\n# . ISg+ NPl/V3 ISg+ NPl/VX3 NSg/VB ISg+ . .\n>\n#\n> “ She  has a    big    dinner   party     and  he       won’t know a   soul     there . ” He       frowned . “ I\n# . ISg+ V3  D/P+ NSg/J+ N🅪Sg/VB+ NSg/VB/J+ VB/C NPr/ISg+ VXB   VB   D/P N🅪Sg/VB+ R     . . NPr/ISg+ VP/J    . . ISg/#r+\n> wonder  where   in        the devil   he       met Daisy . By    God     , I       may     be       old   - fashioned in        my\n# N🅪Sg/VB NSg/R/C NPr/J/R/P D+  NPr/VB+ NPr/ISg+ VP  NPr+  . NSg/P NPr/VB+ . ISg/#r+ NPr/VXB NSg/VLXB NSg/J . VP/J      NPr/J/R/P D$+\n> ideas , but     women run      around too much         these   days to suit   me       . They meet     all          kinds\n# NPl+  . NSg/C/P NPl+  NSg/VBPp J/P    R   NSg/I/J/R/Dq I/Ddem+ NPl+ P  NSg/VB NPr/ISg+ . IPl+ NSg/VB/J NSg/I/J/C/Dq NPl\n> of crazy  fish       . ”\n# P  NSg/J+ N🅪SgPl/VB+ . .\n>\n#\n> Suddenly Mr   . Sloane and  the lady    walked down        the steps   and  mounted their horses  .\n# R        NSg+ . NPr    VB/C D   NPr/VB+ VP/J   N🅪Sg/VB/J/P D   NPl/V3+ VB/C VP/J    D$+   NPl/V3+ .\n>\n#\n> “ Come       on  , ” said Mr   . Sloane to Tom     , “ we’re late  . We've got to go       . ” And  then      to\n# . NSg/VBPp/P J/P . . VP/J NSg+ . NPr    P  NPr/VB+ . . K     NSg/J . K     VP  P  NSg/VB/J . . VB/C NSg/J/R/C P\n> me       : “ Tell   him  we   couldn’t wait   , will    you    ? ”\n# NPr/ISg+ . . NPr/VB ISg+ IPl+ VXB      NSg/VB . NPr/VXB ISgPl+ . .\n>\n#\n> Tom     and  I       shook     hands   , the rest   of us       exchanged a   cool     nod    , and  they trotted\n# NPr/VB+ VB/C ISg/#r+ NSg/VPt/J NPl/V3+ . D   NSg/VB P  NPr/IPl+ VP/J      D/P NSg/VB/J NSg/VB . VB/C IPl+ VP\n> quickly down        the drive    , disappearing under   the August    foliage just as    Gatsby ,\n# R       N🅪Sg/VB/J/P D   N🅪Sg/VB+ . Nᴹ/Vg/J      NSg/J/P D   NPr/VB/J+ Nᴹ+     J/R  R/C/P NPr    .\n> with hat    and  light      overcoat in        hand    , came      out          the front     door    .\n# P    NSg/VB VB/C N🅪Sg/VB/J+ NSg/VB   NPr/J/R/P NSg/VB+ . NSg/VPt/P NSg/VB/J/R/P D   NSg/VB/J+ NSg/VB+ .\n>\n#\n> Tom     was  evidently perturbed at    Daisy’s running   around alone , for   on  the\n# NPr/VB+ VLPt R         VP/J      NSg/P NPr$    Nᴹ/Vg/J/P J/P    J     . R/C/P J/P D\n> following   Saturday night    he       came      with her     to Gatsby’s party     . Perhaps his\n# N🅪Sg/Vg/J/P NSg/VB+  N🅪Sg/VB+ NPr/ISg+ NSg/VPt/P P    ISg/D$+ P  NPr$     NSg/VB/J+ . NSg/R   ISg/D$+\n> presence gave the evening    its     peculiar quality of oppressiveness — it       stands out\n# N🅪Sg/VB+ VPt  D+  N🅪Sg/Vg/J+ ISg/D$+ NSg/J    N🅪Sg/J  P  Nᴹ             . NPr/ISg+ NPl/V3 NSg/VB/J/R/P\n> in        my  memory from Gatsby’s other     parties that          summer     . There were     the same\n# NPr/J/R/P D$+ N🅪Sg   P    NPr$     NSg/VB/J+ NPl/V3+ NSg/I/C/Ddem+ NPr🅪Sg/VB+ . R+    NSg/VLPt D+  I/J+\n> people  , or    at    least    the same sort   of people  , the same profusion of champagne  ,\n# NPl/VB+ . NPr/C NSg/P NSg/J/Dq D   I/J  NSg/VB P  NPl/VB+ . D   I/J  N🅪Sg/VB   P  N🅪Sg/VB/J+ .\n> the same many       - colored     , many       - keyed commotion , but     I       felt      an  unpleasantness in        the\n# D   I/J  NSg/I/J/Dq . NSg/VP/J/Am . NSg/I/J/Dq . VP/J  N🅪Sg      . NSg/C/P ISg/#r+ N🅪Sg/VP/J D/P NSg            NPr/J/R/P D\n> air      , a   pervading harshness that          hadn’t been     there before . Or    perhaps I       had\n# N🅪Sg/VB+ . D/P Nᴹ/Vg/J   NSg       NSg/I/C/Ddem+ VPt    NSg/VLPp R+    C/P    . NPr/C NSg/R   ISg/#r+ VP\n> merely grown used to it       , grown to accept   West      Egg      as    a    world   complete in        itself ,\n# R      VB/J  VP/J P  NPr/ISg+ . VB/J  P  NSg/VB/J NPr/VB/J+ N🅪Sg/VB+ R/C/P D/P+ NSg/VB+ NSg/VB/J NPr/J/R/P ISg+   .\n> with its     own      standards and  its     own       great  figures , second   to nothing  because it\n# P    ISg/D$+ NSg/VB/J NPl       VB/C ISg/D$+ NSg/VB/J+ NSg/J+ NPl/V3+ . NSg/VB/J P  NSg/I/J+ C/P     NPr/ISg+\n> had no       consciousness of being        so          , and  now       I       was  looking at    it       again , through\n# VP  NSg/Dq/P Nᴹ            P  N🅪Sg/VLg/J/C NSg/I/J/R/C . VB/C NSg/J/R/C ISg/#r+ VLPt Nᴹ/Vg/J NSg/P NPr/ISg+ P     . NSg/J/P\n> Daisy’s eyes    . It       is  invariably saddening to look   through new   eyes    at    things upon\n# NPr$    NPl/V3+ . NPr/ISg+ VL3 R          Nᴹ/Vg/J   P  NSg/VB NSg/J/P NSg/J NPl/V3+ NSg/P NPl+   P\n> which you    have    expended your own      powers   of adjustment .\n# I/C+  ISgPl+ NSg/VXB VP/J     D$+  NSg/VB/J NPrPl/V3 P  NSg+       .\n>\n#\n> They arrived at    twilight , and  , as    we   strolled out          among the sparkling hundreds ,\n# IPl+ VP/J    NSg/P Nᴹ/VB/J+ . VB/C . R/C/P IPl+ VP/J     NSg/VB/J/R/P P     D+  Nᴹ/Vg/J+  NPl+     .\n> Daisy’s voice   was  playing murmurous tricks  in        her     throat  .\n# NPr$    NSg/VB+ VLPt Nᴹ/Vg/J J         NPl/V3+ NPr/J/R/P ISg/D$+ NSg/VB+ .\n>\n#\n> “ These   things excite me       so          , ” she  whispered . “ If    you    want   to kiss   me       any    time\n# . I/Ddem+ NPl+   VB     NPr/ISg+ NSg/I/J/R/C . . ISg+ VP/J      . . NSg/C ISgPl+ NSg/VB P  NSg/VB NPr/ISg+ I/R/Dq N🅪Sg/VB/J+\n> during the evening    , Nick    , just let     me       know and  I'll be       glad     to arrange it       for\n# VB/P   D+  N🅪Sg/Vg/J+ . NPr/VB+ . J/R  NSg/VBP NPr/ISg+ VB   VB/C K    NSg/VLXB NSg/VB/J P  NSg/VB  NPr/ISg+ R/C/P\n> you    . Just mention my  name    . Or    present  a    green        card     . I’m giving  out          green       — ”\n# ISgPl+ . J/R  NSg/VB  D$+ NSg/VB+ . NPr/C NSg/VB/J D/P+ NPr🅪Sg/VB/J+ N🅪Sg/VB+ . K   Nᴹ/Vg/J NSg/VB/J/R/P NPr🅪Sg/VB/J . .\n>\n#\n> “ Look   around , ” suggested Gatsby\n# . NSg/VB J/P    . . VP/J      NPr\n>\n#\n> “ I’m looking around . I’m having  a   marvellous — ”\n# . K   Nᴹ/Vg/J J/P    . K   Nᴹ/Vg/J D/P J/Comm     . .\n>\n#\n> “ You    must    see    the faces  of many        people  you’ve heard about . ”\n# . ISgPl+ NSg/VXB NSg/VB D   NPl/V3 P  NSg/I/J/Dq+ NPl/VB+ K      VP/J  J/P   . .\n>\n#\n> Tom’s arrogant eyes    roamed the crowd   .\n# NPr$  J        NPl/V3+ VP/J   D   NSg/VB+ .\n>\n#\n> “ We   don’t go       around very much         , ” he       said ; “ in        fact , I       was  just thinking I       don’t\n# . IPl+ VXB   NSg/VB/J J/P    J/R  NSg/I/J/R/Dq . . NPr/ISg+ VP/J . . NPr/J/R/P NSg+ . ISg/#r+ VLPt J/R  Nᴹ/Vg/J  ISg/#r+ VXB\n> know a   soul     here . ”\n# VB   D/P N🅪Sg/VB+ J/R  . .\n>\n#\n> “ Perhaps you    know that          lady    , ” Gatsby indicated a   gorgeous , scarcely human    orchid\n# . NSg/R   ISgPl+ VB   NSg/I/C/Ddem+ NPr/VB+ . . NPr    VP/J      D/P J        . R        NSg/VB/J NSg/J\n> of a   woman   who    sat      in        state    under   a   white       - plum       tree    . Tom    and  Daisy stared , with\n# P  D/P NSg/VB+ NPr/I+ NSg/VP/J NPr/J/R/P N🅪Sg/VB+ NSg/J/P D/P NPr🅪Sg/VB/J . N🅪Sg/VB/J+ NSg/VB+ . NPr/VB VB/C NPr+  VP/J   . P\n> that          peculiarly unreal feeling   that         accompanies the recognition of a   hitherto\n# NSg/I/C/Ddem+ R          J      N🅪Sg/Vg/J NSg/I/C/Ddem V3          D   NSg         P  D/P J/R\n> ghostly celebrity of the movies .\n# J/R     N🅪Sg      P  D   NPl+   .\n>\n#\n> “ She’s lovely , ” said Daisy .\n# . K     NSg/J  . . VP/J NPr+  .\n>\n#\n> “ The man       bending over    her     is  her     director . ”\n# . D+  NPr/VB/J+ Nᴹ/Vg/J NSg/J/P ISg/D$+ VL3 ISg/D$+ NSg+     . .\n>\n#\n> He       took them     ceremoniously from group   to group  :\n# NPr/ISg+ VPt  NSg/IPl+ R             P    NSg/VB+ P  NSg/VB .\n>\n#\n> “ Mrs  . Buchanan . . . and  Mr   . Buchanan — ” After an  instant’s hesitation he       added :\n# . NPl+ . NPr+     . . . VB/C NSg+ . NPr+     . . P     D/P NSg$      NSg+       NPr/ISg+ VP/J  .\n> “ the polo  player . ”\n# . D   NPrᴹ+ NSg+   . .\n>\n#\n> “ Oh     no       , ” objected Tom     quickly , “ not     me       . ”\n# . NPr/VB NSg/Dq/P . . VP/J     NPr/VB+ R       . . NSg/R/C NPr/ISg+ . .\n>\n#\n> But     evidently the sound     of it       pleased Gatsby for   Tom     remained “ the polo  player ”\n# NSg/C/P R         D   N🅪Sg/VB/J P  NPr/ISg+ VP/J    NPr    R/C/P NPr/VB+ VP/J+    . D   NPrᴹ+ NSg+   .\n> for   the rest   of the evening    .\n# R/C/P D   NSg/VB P  D   N🅪Sg/Vg/J+ .\n>\n#\n> “ I’ve never met so          many       celebrities , ” Daisy exclaimed , “ I       liked that         man       — what\n# . K    R     VP  NSg/I/J/R/C NSg/I/J/Dq NPl+        . . NPr+  VP/J      . . ISg/#r+ VP/J  NSg/I/C/Ddem NPr/VB/J+ . NSg/I+\n> was  his     name    ? — with the sort   of blue       nose    . ”\n# VLPt ISg/D$+ NSg/VB+ . . P    D   NSg/VB P  N🅪Sg/VB/J+ NSg/VB+ . .\n>\n#\n> Gatsby identified him  , adding  that         he       was  a   small    producer .\n# NPr    VP/J       ISg+ . Nᴹ/Vg/J NSg/I/C/Ddem NPr/ISg+ VLPt D/P NPr/VB/J NSg+     .\n>\n#\n> “ Well       , I       liked him  anyhow . ”\n# . NSg/VB/J/R . ISg/#r+ VP/J  ISg+ J      . .\n>\n#\n> “ I’d a   little     rather     not     be       the polo  player , ” said Tom     pleasantly , “ I’d rather\n# . K   D/P NPr/I/J/Dq NPr/VB/J/R NSg/R/C NSg/VLXB D   NPrᴹ+ NSg+   . . VP/J NPr/VB+ R          . . K   NPr/VB/J/R\n> look   at    all          these  famous people  in        — in        oblivion . ”\n# NSg/VB NSg/P NSg/I/J/C/Dq I/Ddem VB/J   NPl/VB+ NPr/J/R/P . NPr/J/R/P NSg/VB+  . .\n>\n#\n> Daisy and  Gatsby danced . I       remember being        surprised by    his     graceful ,\n# NPr+  VB/C NPr    VP/J   . ISg/#r+ NSg/VB   N🅪Sg/VLg/J/C VP/J      NSg/P ISg/D$+ J        .\n> conservative fox     - trot   — I       had never seen    him  dance    before . Then      they sauntered\n# NSg/J        NPr/VB+ . NSg/VB . ISg/#r+ VP  R     NSg/VPp ISg+ N🅪Sg/VB+ C/P    . NSg/J/R/C IPl+ VP/J\n> over    to my  house   and  sat      on  the steps   for   half      an  hour , while      at    her     request I\n# NSg/J/P P  D$+ NPr/VB+ VB/C NSg/VP/J J/P D   NPl/V3+ R/C/P N🅪Sg/J/P+ D/P NSg+ . NSg/VB/C/P NSg/P ISg/D$+ NSg/VB+ ISg/#r+\n> remained watchfully in        the garden    . “ In        case       there’s a   fire      or    a   flood   , ” she\n# VP/J     R          NPr/J/R/P D   NSg/VB/J+ . . NPr/J/R/P NPr🅪Sg/VB+ K       D/P N🅪Sg/VB/J NPr/C D/P NSg/VB+ . . ISg+\n> explained , ‘          ‘          or    any    act    of God     . ”\n# VP/J      . Unlintable Unlintable NPr/C I/R/Dq NPr/VB P  NPr/VB+ . .\n>\n#\n> Tom     appeared from his     oblivion as    we   were     sitting  down        to supper together . “ Do\n# NPr/VB+ VP/J     P    ISg/D$+ NSg/VB+  R/C/P IPl+ NSg/VLPt NSg/Vg/J N🅪Sg/VB/J/P P  NSg/VB J        . . VXB\n> you    mind    if    I       eat with some      people  over    here ? ” he       said . “ A   fellow’s getting off\n# ISgPl+ NSg/VB+ NSg/C ISg/#r+ VB  P    I/J/R/Dq+ NPl/VB+ NSg/J/P J/R  . . NPr/ISg+ VP/J . . D/P NSg$     NSg/Vg+ NSg/VB/J/P\n> some     funny stuff  . ”\n# I/J/R/Dq NSg/J Nᴹ/VB+ . .\n>\n#\n> “ Go       ahead , ” answered Daisy genially , “ and  if    you    want   to take   down        any    addresses\n# . NSg/VB/J R     . . VP/J     NPr+  R        . . VB/C NSg/C ISgPl+ NSg/VB P  NSg/VB N🅪Sg/VB/J/P I/R/Dq NPl/V3+\n> here’s my  little     gold     pencil  . ” . . . She  looked around after a    moment and  told\n# K      D$+ NPr/I/J/Dq Nᴹ/VB/J+ NSg/VB+ . . . . . ISg+ VP/J   J/P    P     D/P+ NSg+   VB/C VP\n> me       the girl    was  “ common   but     pretty     , ” and  I       knew that         except for   the half      - hour\n# NPr/ISg+ D+  NSg/VB+ VLPt . NSg/VB/J NSg/C/P NSg/VB/J/R . . VB/C ISg/#r+ VPt  NSg/I/C/Ddem VB/C/P R/C/P D+  N🅪Sg/J/P+ . NSg+\n> she’d been     alone with Gatsby she  wasn’t having  a   good     time       .\n# K     NSg/VLPp J     P    NPr    ISg+ VPt    Nᴹ/Vg/J D/P NPr/VB/J N🅪Sg/VB/J+ .\n>\n#\n> We   were     at    a   particularly tipsy table   . That          was  my  fault   — Gatsby had been     called\n# IPl+ NSg/VLPt NSg/P D/P R            J     NSg/VB+ . NSg/I/C/Ddem+ VLPt D$+ NSg/VB+ . NPr    VP  NSg/VLPp VP/J\n> to the phone   , and  I’d enjoyed these  same people  only  two weeks  before . But     what\n# P  D   NSg/VB+ . VB/C K   VP/J    I/Ddem I/J  NPl/VB+ J/R/C NSg NPrPl+ C/P    . NSg/C/P NSg/I+\n> had amused me       then      turned septic on  the air      now       .\n# VP  VP/J   NPr/ISg+ NSg/J/R/C VP/J   NSg/J  J/P D+  N🅪Sg/VB+ NSg/J/R/C .\n>\n#\n> “ How   do  you    feel     , Miss   Baedeker ? ”\n# . NSg/C VXB ISgPl+ NSg/I/VB . NSg/VB NPr      . .\n>\n#\n> The girl    addressed was  trying  , unsuccessfully , to slump  against my  shoulder . At\n# D+  NSg/VB+ VP/J      VLPt Nᴹ/Vg/J . R              . P  NSg/VB C/P     D$+ NSg/VB+  . NSg/P\n> this    inquiry she  sat      up         and  opened her     eyes    .\n# I/Ddem+ NSg+    ISg+ NSg/VP/J NSg/VB/J/P VB/C VP/J   ISg/D$+ NPl/V3+ .\n>\n#\n> “ Wha ’ ? ”\n# . ?   . . .\n>\n#\n> A   massive and  lethargic woman   , who    had been     urging   Daisy to play    golf    with her\n# D/P NSg/J   VB/C J         NSg/VB+ . NPr/I+ VP  NSg/VLPp Nᴹ/Vg/J+ NPr+  P  N🅪Sg/VB NSg/VB+ P    ISg/D$+\n> at    the local club    to - morrow , spoke   in        Miss   Baedeker’s defence    :\n# NSg/P D   NSg/J NSg/VB+ P  . NPr/VB . NSg/VPt NPr/J/R/P NSg/VB NPr$       N🅪Sg/Comm+ .\n>\n#\n> “ Oh     , she’s all          right    now       . When    she’s had five or    six cocktails she  always starts\n# . NPr/VB . K     NSg/I/J/C/Dq NPr/VB/J NSg/J/R/C . NSg/I/C K     VP  NSg  NPr/C NSg NPl/V3+   ISg+ R      NPl/V3\n> screaming like         that          . I       tell   her     she  ought     to leave  it       alone . ”\n# Nᴹ/Vg/J   NSg/VB/J/C/P NSg/I/C/Ddem+ . ISg/#r+ NPr/VB ISg/D$+ ISg+ NSg/I/VXB P  NSg/VB NPr/ISg+ J     . .\n>\n#\n> “ I       do  leave  it       alone , ” affirmed the accused hollowly .\n# . ISg/#r+ VXB NSg/VB NPr/ISg+ J     . . VP/J     D   VP/J    R        .\n>\n#\n> “ We   heard you    yelling , so          I       said to Doc Civet here : ‘          There’s somebody that          needs\n# . IPl+ VP/J  ISgPl+ Nᴹ/Vg/J . NSg/I/J/R/C ISg/#r+ VP/J P  NSg NSg+  J/R  . Unlintable K       NSg/I+   NSg/I/C/Ddem+ NPl/V3\n> your help   , Doc  . ’ ”\n# D$+  NSg/VB . NSg+ . . .\n>\n#\n> “ She’s much         obliged , I’m sure , ” said another friend    , without gratitude , “ but     you\n# . K     NSg/I/J/R/Dq VP/J    . K   J    . . VP/J I/D     NPr/VB/J+ . C/P     NSg+      . . NSg/C/P ISgPl+\n> got her     dress  all          wet      when    you    stuck    her     head      in        the pool    . ”\n# VP  ISg/D$+ NSg/VB NSg/I/J/C/Dq NSg/VP/J NSg/I/C ISgPl+ NSg/VB/J ISg/D$+ NPr/VB/J+ NPr/J/R/P D   NSg/VB+ . .\n>\n#\n> “ Anything  I       hate    is  to get    my  head      stuck    in        a    pool    , ” mumbled Miss   Baedeker .\n# . NSg/I/VB+ ISg/#r+ N🅪Sg/VB VL3 P  NSg/VB D$+ NPr/VB/J+ NSg/VB/J NPr/J/R/P D/P+ NSg/VB+ . . VP/J    NSg/VB NPr      .\n> “ They almost drowned me       once  over    in        New    Jersey . ”\n# . IPl+ R      VP/J    NPr/ISg+ NSg/C NSg/J/P NPr/J/R/P NSg/J+ NPr+   . .\n>\n#\n> “ Then      you    ought     to leave  it       alone , ” countered Doctor  Civet .\n# . NSg/J/R/C ISgPl+ NSg/I/VXB P  NSg/VB NPr/ISg+ J     . . VB        NSg/VB+ NSg+  .\n>\n#\n> “ Speak  for   yourself ! ” cried Miss   Baedeker violently . “ Your hand    shakes . I\n# . NSg/VB R/C/P ISg+     . . VP/J  NSg/VB NPr      R         . . D$+  NSg/VB+ NPl/V3 . ISg/#r+\n> wouldn’t let     you    operate on  me       ! ”\n# VXB      NSg/VBP ISgPl+ VB      J/P NPr/ISg+ . .\n>\n#\n> It       was  like         that          . Almost the last      thing I       remember was  standing with Daisy and\n# NPr/ISg+ VLPt NSg/VB/J/C/P NSg/I/C/Ddem+ . R      D+  NSg/VB/J+ NSg+  ISg/#r+ NSg/VB   VLPt Nᴹ/Vg/J  P    NPr+  VB/C\n> watching the moving   - picture director and  his     Star    . They were     still      under   the\n# Nᴹ/Vg/J  D   Nᴹ/Vg/J+ . NSg/VB+ NSg      VB/C ISg/D$+ NSg/VB+ . IPl+ NSg/VLPt NSg/VB/J/R NSg/J/P D\n> white       - plum      tree   and  their faces   were     touching  except for   a   pale     , thin     ray    of\n# NPr🅪Sg/VB/J . N🅪Sg/VB/J NSg/VB VB/C D$+   NPl/V3+ NSg/VLPt Nᴹ/Vg/J/P VB/C/P R/C/P D/P NSg/VB/J . NSg/VB/J NPr/VB P\n> moonlight between . It       occurred to me       that         he       had been     very slowly bending toward\n# N🅪Sg/VB+  NSg/P   . NPr/ISg+ VP       P  NPr/ISg+ NSg/I/C/Ddem NPr/ISg+ VP  NSg/VLPp J/R  R      Nᴹ/Vg/J J/P\n> her     all          evening    to attain this    proximity , and  even       while      I       watched I       saw     him\n# ISg/D$+ NSg/I/J/C/Dq N🅪Sg/Vg/J+ P  VB     I/Ddem+ Nᴹ+       . VB/C NSg/VB/J/R NSg/VB/C/P ISg/#r+ VP/J    ISg/#r+ NSg/VPt ISg+\n> stoop  one      ultimate  degree and  kiss   at    her     cheek   .\n# NSg/VB NSg/I/J+ NSg/VB/J+ NSg+   VB/C NSg/VB NSg/P ISg/D$+ NSg/VB+ .\n>\n#\n> “ I       like         her     , ” said Daisy , “ I       think  she’s lovely . ”\n# . ISg/#r+ NSg/VB/J/C/P ISg/D$+ . . VP/J NPr+  . . ISg/#r+ NSg/VB K     NSg/J  . .\n>\n#\n> But     the rest    offended her     — and  inarguably , because it       wasn’t a   gesture but     an\n# NSg/C/P D+  NSg/VB+ VP/J     ISg/D$+ . VB/C ?          . C/P     NPr/ISg+ VPt    D/P NSg/VB+ NSg/C/P D/P\n> emotion . She  was  appalled by    West      Egg      , this   unprecedented “ place   ” that         Broadway\n# N🅪Sg+   . ISg+ VLPt VP/J     NSg/P NPr/VB/J+ N🅪Sg/VB+ . I/Ddem J             . N🅪Sg/VB . NSg/I/C/Ddem NPr/J+\n> had begotten upon a   Long     Island  fishing  village — appalled by    its     raw      vigor that\n# VP  VPp/J    P    D/P NPr/VB/J NSg/VB+ Nᴹ/Vg/J+ NSg+    . VP/J     NSg/P ISg/D$+ NSg/VB/J NSg+  NSg/I/C/Ddem+\n> chafed under   the old   euphemisms and  by    the too obtrusive fate    that          herded its\n# VP/J   NSg/J/P D   NSg/J NPl        VB/C NSg/P D   R   J         NSg/VB+ NSg/I/C/Ddem+ VP/J   ISg/D$+\n> inhabitants along a   short      - cut       from nothing  to nothing  . She  saw     something awful\n# NPl+        P     D/P NPr/VB/J/P . NSg/VBP/J P    NSg/I/J+ P  NSg/I/J+ . ISg+ NSg/VPt NSg/I/J+  J\n> in        the very simplicity she  failed to understand .\n# NPr/J/R/P D+  J/R+ N🅪Sg+      ISg+ VP/J   P  VB         .\n>\n#\n> I       sat      on  the front     steps   with them     while      they waited for   their car  . It       was  dark\n# ISg/#r+ NSg/VP/J J/P D+  NSg/VB/J+ NPl/V3+ P    NSg/IPl+ NSg/VB/C/P IPl+ VP/J   R/C/P D$+   NSg+ . NPr/ISg+ VLPt NSg/VB/J\n> here in        front     ; only  the bright   door    sent   ten square   feet of light      volleying out\n# J/R  NPr/J/R/P NSg/VB/J+ . J/R/C D   NPr/VB/J NSg/VB+ NSg/VP NSg NSg/VB/J NPl  P  N🅪Sg/VB/J+ Nᴹ/Vg/J   NSg/VB/J/R/P\n> into the soft  black     morning    . Sometimes a    shadow    moved against a   dressing - room\n# P    D   NSg/J N🅪Sg/VB/J N🅪Sg/Vg/J+ . R         D/P+ NSg/VB/J+ VP/J  C/P     D/P Nᴹ/Vg/J+ . N🅪Sg/VB/J\n> blind    above   , gave way    to another shadow    , an  indefinite procession of shadows ,\n# NSg/VB/J NSg/J/P . VPt  NSg/J+ P  I/D+    NSg/VB/J+ . D/P NSg/J      NSg/VB     P  NPl/V3+ .\n> who    rouged and  powdered in        an  invisible glass      .\n# NPr/I+ VP/J   VB/C VP/J     NPr/J/R/P D/P J         NPr🅪Sg/VB+ .\n>\n#\n> “ Who    is  this   Gatsby anyhow ? ” demanded Tom     suddenly . “ Some     big   bootlegger ? ”\n# . NPr/I+ VL3 I/Ddem NPr    J      . . VP/J     NPr/VB+ R        . . I/J/R/Dq NSg/J NSg        . .\n>\n#\n> “ Where’d you    hear that          ? ” I       inquired .\n# . K       ISgPl+ VB   NSg/I/C/Ddem+ . . ISg/#r+ VP/J     .\n>\n#\n> “ I       didn’t hear it       . I       imagined it       . A   lot    of these  newly rich      people  are just big\n# . ISg/#r+ VXPt   VB   NPr/ISg+ . ISg/#r+ VP/J     NPr/ISg+ . D/P NPr/VB P  I/Ddem R     NPr/VB/J+ NPl/VB+ VLB J/R  NSg/J\n> bootleggers , you    know . ”\n# NPl         . ISgPl+ VB   . .\n>\n#\n> “ Not     Gatsby , ” I       said shortly .\n# . NSg/R/C NPr    . . ISg/#r+ VP/J R       .\n>\n#\n> He       was  silent for   a    moment . The pebbles of the drive   crunched under   his     feet .\n# NPr/ISg+ VLPt NSg/J  R/C/P D/P+ NSg+   . D   NPl/V3  P  D   N🅪Sg/VB VP/J     NSg/J/P ISg/D$+ NPl+ .\n>\n#\n> “ Well       , he       certainly must    have    strained himself to get    this   menagerie together . ”\n# . NSg/VB/J/R . NPr/ISg+ R         NSg/VXB NSg/VXB VP/J     ISg+    P  NSg/VB I/Ddem NSg       J        . .\n>\n#\n> A    breeze  stirred the gray           haze    of Daisy’s fur          collar  .\n# D/P+ NSg/VB+ VP      D   NPr🅪Sg/VB/J/Am N🅪Sg/VB P  NPr$    N🅪Sg/VB/C/P+ NSg/VB+ .\n>\n#\n> “ At    least    they are more         interesting than the people  we   know , ” she  said with an\n# . NSg/P NSg/J/Dq IPl+ VLB NPr/I/J/R/Dq Vg/J        C/P  D+  NPl/VB+ IPl+ VB   . . ISg+ VP/J P    D/P+\n> effort   .\n# N🅪Sg/VB+ .\n>\n#\n> “ You    didn’t look   so          interested . ”\n# . ISgPl+ VXPt   NSg/VB NSg/I/J/R/C VP/J       . .\n>\n#\n> “ Well       , I       was  . ”\n# . NSg/VB/J/R . ISg/#r+ VLPt . .\n>\n#\n> Tom     laughed and  turned to me       .\n# NPr/VB+ VP/J    VB/C VP/J   P  NPr/ISg+ .\n>\n#\n> “ Did  you    notice Daisy’s face    when    that         girl    asked her     to put     her     under   a   cold\n# . VXPt ISgPl+ NSg/VB NPr$    NSg/VB+ NSg/I/C NSg/I/C/Ddem NSg/VB+ VP/J  ISg/D$+ P  NSg/VBP ISg/D$+ NSg/J/P D/P NSg/J\n> shower  ? ”\n# NSg/VB+ . .\n>\n#\n> Daisy began to sing     with the music      in        a   husky , rythmic whisper , bringing out          a\n# NPr+  VPt   P  NSg/VB/J P    D+  N🅪Sg/VB/J+ NPr/J/R/P D/P NSg/J . ?       NSg/VB  . Nᴹ/Vg/J  NSg/VB/J/R/P D/P\n> meaning    in        each word    that          it       had never had before and  would never have    again .\n# N🅪Sg/Vg/J+ NPr/J/R/P Dq   NSg/VB+ NSg/I/C/Ddem+ NPr/ISg+ VP  R     VP  C/P    VB/C VXB   R     NSg/VXB P     .\n> When    the melody rose      her     voice   broke     up         sweetly , following   it       , in        a   way\n# NSg/I/C D   NPr🅪Sg NPr/VPt/J ISg/D$+ NSg/VB+ NSg/VPt/J NSg/VB/J/P R       . N🅪Sg/Vg/J/P NPr/ISg+ . NPr/J/R/P D/P NSg/J+\n> contralto voices  have    , and  each change   tipped out          a   little     of her     warm     human\n# NSg       NPl/V3+ NSg/VXB . VB/C Dq   N🅪Sg/VB+ VP     NSg/VB/J/R/P D/P NPr/I/J/Dq P  ISg/D$+ NSg/VB/J NSg/VB/J\n> magic      upon the air      .\n# N🅪Sg/VB/J+ P    D   N🅪Sg/VB+ .\n>\n#\n> “ Lots   of people  come       who    haven’t been     invited  , ” she  said suddenly . “ That         girl\n# . NPl/V3 P  NPl/VB+ NSg/VBPp/P NPr/I+ VXB     NSg/VLPp NSg/VP/J . . ISg+ VP/J R        . . NSg/I/C/Ddem NSg/VB+\n> hadn’t been     invited  . They simply force   their way    in        and  he’s too polite to\n# VPt    NSg/VLPp NSg/VP/J . IPl+ R      N🅪Sg/VB D$+   NSg/J+ NPr/J/R/P VB/C NPr$ R   VB/J   P\n> object . ”\n# NSg/VB . .\n>\n#\n> “ I’d like         to know who    he       is  and  what   he       does    , ” insisted Tom     . “ And  I       think  I’ll\n# . K   NSg/VB/J/C/P P  VB   NPr/I+ NPr/ISg+ VL3 VB/C NSg/I+ NPr/ISg+ NPl/VX3 . . VP/J     NPr/VB+ . . VB/C ISg/#r+ NSg/VB K\n> make   a   point   of finding out          . ”\n# NSg/VB D/P NSg/VB+ P  Nᴹ/Vg/J NSg/VB/J/R/P . .\n>\n#\n> “ I       can     tell   you    right    now       , ” she  answered . “ He       owned some     drug    - stores , a   lot    of\n# . ISg/#r+ NPr/VXB NPr/VB ISgPl+ NPr/VB/J NSg/J/R/C . . ISg+ VP/J     . . NPr/ISg+ VP/J  I/J/R/Dq NSg/VB+ . NPl/V3 . D/P NPr/VB P\n> drug    - stores  . He       built them     up         himself . ”\n# NSg/VB+ . NPl/V3+ . NPr/ISg+ VP/J  NSg/IPl+ NSg/VB/J/P ISg+    . .\n>\n#\n> The dilatory limousine came      rolling up         the drive    .\n# D   J        NSg       NSg/VPt/P Nᴹ/Vg/J NSg/VB/J/P D   N🅪Sg/VB+ .\n>\n#\n> “ Good     night    , Nick    , ” said Daisy .\n# . NPr/VB/J N🅪Sg/VB+ . NPr/VB+ . . VP/J NPr+  .\n>\n#\n> Her     glance  left     me       and  sought the lighted top      of the steps   , where   “ Three o’Clock\n# ISg/D$+ NSg/VB+ NPr/VP/J NPr/ISg+ VB/C VP     D   VP/J    NSg/VB/J P  D+  NPl/V3+ . NSg/R/C . NSg   R\n> in        the Morning    , ” a   neat , sad      little     waltz  of that         year , was  drifting out          the\n# NPr/J/R/P D+  N🅪Sg/Vg/J+ . . D/P J    . NSg/VB/J NPr/I/J/Dq NSg/VB P  NSg/I/C/Ddem NSg+ . VLPt Nᴹ/Vg/J  NSg/VB/J/R/P D\n> open     door    . After all          , in        the very casualness of Gatsby’s party     there were\n# NSg/VB/J NSg/VB+ . P     NSg/I/J/C/Dq . NPr/J/R/P D   J/R  Nᴹ         P  NPr$     NSg/VB/J+ R+    NSg/VLPt\n> romantic possibilities totally absent     from her     world   . What   was  it       up         there in\n# NSg/J    NPl+          R       NSg/VB/J/P P    ISg/D$+ NSg/VB+ . NSg/I+ VLPt NPr/ISg+ NSg/VB/J/P R     NPr/J/R/P\n> the song  that          seemed to be       calling her     back     inside  ? What   would happen now       in        the\n# D+  N🅪Sg+ NSg/I/C/Ddem+ VP/J   P  NSg/VLXB Nᴹ/Vg/J ISg/D$+ NSg/VB/J NSg/J/P . NSg/I+ VXB   VB     NSg/J/R/C NPr/J/R/P D\n> dim      , incalculable hours ? Perhaps some      unbelievable guest   would arrive , a    person\n# NSg/VB/J . J            NPl+  . NSg/R   I/J/R/Dq+ J+           NSg/VB+ VXB   VB     . D/P+ NSg/VB+\n> infinitely rare     and  to be       marvelled at    , some     authentically radiant young    girl\n# R          NSg/VB/J VB/C P  NSg/VLXB VP/Comm   NSg/P . I/J/R/Dq R             NSg/J   NPr/VB/J NSg/VB+\n> who    with one     fresh    glance  at    Gatsby , one     moment of magical encounter , would blot\n# NPr/I+ P    NSg/I/J NSg/VB/J NSg/VB+ NSg/P NPr    . NSg/I/J NSg    P  J       NSg/VB+   . VXB   NSg/VB\n> out          those  five years of unwavering devotion .\n# NSg/VB/J/R/P I/Ddem NSg  NPl   P  J          NSg+     .\n>\n#\n> I       stayed late  that         night    , Gatsby asked me       to wait   until he       was  free     , and  I\n# ISg/#r+ VP/J   NSg/J NSg/I/C/Ddem N🅪Sg/VB+ . NPr    VP/J  NPr/ISg+ P  NSg/VB C/P   NPr/ISg+ VLPt NSg/VB/J . VB/C ISg/#r+\n> lingered in        the garden    until the inevitable swimming party     had run      up         , chilled\n# VP/J     NPr/J/R/P D   NSg/VB/J+ C/P   D   NSg/J      NSg/Vg   NSg/VB/J+ VP  NSg/VBPp NSg/VB/J/P . VP/J\n> and  exalted , from the black     beach   , until the lights  were     extinguished in        the\n# VB/C VP/J    . P    D   N🅪Sg/VB/J NPr/VB+ . C/P   D   NPl/V3+ NSg/VLPt VP/J         NPr/J/R/P D\n> guest   - rooms   overhead . When    he       came      down        the steps   at    last      the tanned skin     was\n# NSg/VB+ . NPl/V3+ NSg/J/P+ . NSg/I/C NPr/ISg+ NSg/VPt/P N🅪Sg/VB/J/P D+  NPl/V3+ NSg/P NSg/VB/J+ D+  VP/J+  N🅪Sg/VB+ VLPt\n> drawn unusually tight on  his     face    , and  his     eyes    were     bright   and  tired .\n# VPp/J R         VB/J  J/P ISg/D$+ NSg/VB+ . VB/C ISg/D$+ NPl/V3+ NSg/VLPt NPr/VB/J VB/C VP/J  .\n>\n#\n> “ She  didn’t like         it       , ” he       said immediately .\n# . ISg+ VXPt   NSg/VB/J/C/P NPr/ISg+ . . NPr/ISg+ VP/J R           .\n>\n#\n> “ Of course  she  did  . ”\n# . P  NSg/VB+ ISg+ VXPt . .\n>\n#\n> “ She  didn’t like         it       , ” he       insisted . “ She  didn’t have    a   good     time       . ”\n# . ISg+ VXPt   NSg/VB/J/C/P NPr/ISg+ . . NPr/ISg+ VP/J     . . ISg+ VXPt   NSg/VXB D/P NPr/VB/J N🅪Sg/VB/J+ . .\n>\n#\n> He       was  silent , and  I       guessed at    his     unutterable depression .\n# NPr/ISg+ VLPt NSg/J  . VB/C ISg/#r+ VP/J    NSg/P ISg/D$+ NSg/J       NSg+       .\n>\n#\n> “ I       feel     far      away from her     , ” he       said . “ It’s hard     to make   her     understand . ”\n# . ISg/#r+ NSg/I/VB NSg/VB/J VB/J P    ISg/D$+ . . NPr/ISg+ VP/J . . K    N🅪Sg/J/R P  NSg/VB ISg/D$+ VB         . .\n>\n#\n> “ You    mean     about the dance    ? ”\n# . ISgPl+ NSg/VB/J J/P   D+  N🅪Sg/VB+ . .\n>\n#\n> “ The dance    ? ” He       dismissed all           the dances  he       had given       with a   snap     of his\n# . D+  N🅪Sg/VB+ . . NPr/ISg+ VP/J      NSg/I/J/C/Dq+ D+  NPl/V3+ NPr/ISg+ VP  NSg/VPp/J/P P    D/P NSg/VB/J P  ISg/D$+\n> fingers . “ Old    sport   , the dance    is  unimportant . ”\n# NPl/V3+ . . NSg/J+ NSg/VB+ . D+  N🅪Sg/VB+ VL3 J           . .\n>\n#\n> He       wanted nothing  less       of Daisy than that         she  should go       to Tom     and  say    : “ I       never\n# NPr/ISg+ VP/J   NSg/I/J+ VB/J/R/C/P P  NPr+  C/P  NSg/I/C/Ddem ISg+ VXB    NSg/VB/J P  NPr/VB+ VB/C NSg/VB . . ISg/#r+ R\n> loved you    . ” After she  had obliterated four years with that         sentence they could\n# VP/J  ISgPl+ . . P     ISg+ VP  VP/J        NSg  NPl   P    NSg/I/C/Ddem NSg/VB+  IPl+ NSg/VXB\n> decide upon the more         practical measures to be       taken . One     of them     was  that          , after\n# VB     P    D   NPr/I/J/R/Dq NSg/J     NPl/V3   P  NSg/VLXB VPp/J . NSg/I/J P  NSg/IPl+ VLPt NSg/I/C/Ddem+ . P\n> she  was  free     , they were     to go       back     to Louisville and  be       married  from her\n# ISg+ VLPt NSg/VB/J . IPl+ NSg/VLPt P  NSg/VB/J NSg/VB/J P  NPr        VB/C NSg/VLXB NSg/VP/J P    ISg/D$+\n> house   — just as    if    it       were     five years ago .\n# NPr/VB+ . J/R  R/C/P NSg/C NPr/ISg+ NSg/VLPt NSg  NPl+  J/P .\n>\n#\n> “ And  she  doesn’t understand , ” he       said . “ She  used to be       able     to understand . We’d\n# . VB/C ISg+ VX3     VB         . . NPr/ISg+ VP/J . . ISg+ VP/J P  NSg/VLXB NSg/VB/J P  VB         . K\n> sit    for   hours — ”\n# NSg/VB R/C/P NPl+  . .\n>\n#\n> He       broke     off        and  began to walk   up         and  down        a   desolate path   of fruit    rinds  and\n# NPr/ISg+ NSg/VPt/J NSg/VB/J/P VB/C VPt   P  NSg/VB NSg/VB/J/P VB/C N🅪Sg/VB/J/P D/P VB/J     NSg/VB P  N🅪Sg/VB+ NPl/V3 VB/C\n> discarded favors     and  crushed flowers   .\n# VP/J      NPl/V3/Am+ VB/C VP/J    NPrPl/V3+ .\n>\n#\n> “ I       wouldn’t ask    too much         of her     , ” I       ventured . “ You    can’t repeat the past       . ”\n# . ISg/#r+ VXB      NSg/VB R   NSg/I/J/R/Dq P  ISg/D$+ . . ISg/#r+ VP/J     . . ISgPl+ VXB   NSg/VB D   NSg/VB/J/P . .\n>\n#\n> “ Can’t repeat the past       ? ” he       cried incredulously . “ Why    of course  you    can     ! ”\n# . VXB   NSg/VB D   NSg/VB/J/P . . NPr/ISg+ VP/J  R             . . NSg/VB P  NSg/VB+ ISgPl+ NPr/VXB . .\n>\n#\n> He       looked around him  wildly , as    if    the past       were     lurking here in        the shadow   of\n# NPr/ISg+ VP/J   J/P    ISg+ R      . R/C/P NSg/C D   NSg/VB/J/P NSg/VLPt Nᴹ/Vg/J J/R  NPr/J/R/P D   NSg/VB/J P\n> his     house   , just out          of reach  of his     hand    .\n# ISg/D$+ NPr/VB+ . J/R  NSg/VB/J/R/P P  NSg/VB P  ISg/D$+ NSg/VB+ .\n>\n#\n> “ I’m going   to fix    everything just the way    it       was  before , ” he       said , nodding\n# . K   Nᴹ/Vg/J P  NSg/VB NSg/I/VB+  J/R  D   NSg/J+ NPr/ISg+ VLPt C/P    . . NPr/ISg+ VP/J . NSg/VP/J\n> determinedly . “ She’ll see    . ”\n# R            . . K      NSg/VB . .\n>\n#\n> He       talked a    lot     about the past       , and  I       gathered that         he       wanted to recover\n# NPr/ISg+ VP/J   D/P+ NPr/VB+ J/P   D   NSg/VB/J/P . VB/C ISg/#r+ VP/J     NSg/I/C/Ddem NPr/ISg+ VP/J   P  N🅪Sg/VB/J\n> something , some     idea of himself perhaps , that          had gone    into loving   Daisy . His\n# NSg/I/J+  . I/J/R/Dq NSg  P  ISg+    NSg/R   . NSg/I/C/Ddem+ VP  VPp/J/P P    Nᴹ/Vg/J+ NPr+  . ISg/D$+\n> life     had been     confused and  disordered since then      , but     if    he       could   once  return to\n# N🅪Sg/VB+ VP  NSg/VLPp VP/J     VB/C VP/J       C/P   NSg/J/R/C . NSg/C/P NSg/C NPr/ISg+ NSg/VXB NSg/C NSg/VB P\n> a   certain starting place    and  go       over    it       all          slowly , he       could   find   out          what   that\n# D/P I/J     Nᴹ/Vg/J+ N🅪Sg/VB+ VB/C NSg/VB/J NSg/J/P NPr/ISg+ NSg/I/J/C/Dq R      . NPr/ISg+ NSg/VXB NSg/VB NSg/VB/J/R/P NSg/I+ NSg/I/C/Ddem\n> thing was  . . . .\n# NSg+  VLPt . . . .\n>\n#\n> . . . One      autumn     night    , five years before , they had been     walking down        the street\n# . . . NSg/I/J+ NPr🅪Sg/VB+ N🅪Sg/VB+ . NSg+ NPl+  C/P    . IPl+ VP  NSg/VLPp Nᴹ/Vg/J N🅪Sg/VB/J/P D+  NSg/VB/J+\n> when    the leaves  were     falling , and  they came      to a    place    where   there were     no       trees\n# NSg/I/C D+  NPl/V3+ NSg/VLPt Nᴹ/Vg/J . VB/C IPl+ NSg/VPt/P P  D/P+ N🅪Sg/VB+ NSg/R/C R+    NSg/VLPt NSg/Dq/P NPl/V3\n> and  the sidewalk was  white       with moonlight . They stopped here and  turned toward\n# VB/C D+  NSg+     VLPt NPr🅪Sg/VB/J P    N🅪Sg/VB+  . IPl+ VP/J    J/R  VB/C VP/J   J/P\n> each other    . Now       it       was  a   cool     night   with that          mysterious excitement in        it       which\n# Dq   NSg/VB/J . NSg/J/R/C NPr/ISg+ VLPt D/P NSg/VB/J N🅪Sg/VB P    NSg/I/C/Ddem+ J+         NSg+       NPr/J/R/P NPr/ISg+ I/C+\n> comes  at    the two changes of the year . The quiet     lights  in        the houses  were\n# NPl/V3 NSg/P D   NSg NPl/V3  P  D+  NSg+ . D   N🅪Sg/VB/J NPl/V3+ NPr/J/R/P D+  NPl/V3+ NSg/VLPt\n> humming  out          into the darkness and  there was  a   stir   and  bustle among the stars   .\n# NSg/Vg/J NSg/VB/J/R/P P    D+  Nᴹ+      VB/C R+    VLPt D/P NSg/VB VB/C NSg/VB P     D+  NPl/V3+ .\n> Out          of the corner of his     eye     Gatsby saw     that         the blocks of the sidewalks really\n# NSg/VB/J/R/P P  D   NSg/VB P  ISg/D$+ NSg/VB+ NPr    NSg/VPt NSg/I/C/Ddem D   NPl/V3 P  D   NPl+      R\n> formed a   ladder  and  mounted to a   secret   place    above   the trees   — he       could   climb  to\n# VP/J   D/P NSg/VB+ VB/C VP/J    P  D/P NSg/VB/J N🅪Sg/VB+ NSg/J/P D   NPl/V3+ . NPr/ISg+ NSg/VXB NSg/VB P\n> it       , if    he       climbed alone , and  once  there he       could   suck   on  the pap      of life     , gulp\n# NPr/ISg+ . NSg/C NPr/ISg+ VP/J    J     . VB/C NSg/C R+    NPr/ISg+ NSg/VXB NSg/VB J/P D   NSg/VB/J P  N🅪Sg/VB+ . NSg/VB\n> down        the incomparable milk    of wonder   .\n# N🅪Sg/VB/J/P D   NSg/J        N🅪Sg/VB P  N🅪Sg/VB+ .\n>\n#\n> His     heart    beat      faster and  faster as    Daisy’s white        face    came      up         to his     own      . He\n# ISg/D$+ N🅪Sg/VB+ N🅪Sg/VB/J NSg/JC VB/C NSg/JC R/C/P NPr$    NPr🅪Sg/VB/J+ NSg/VB+ NSg/VPt/P NSg/VB/J/P P  ISg/D$+ NSg/VB/J . NPr/ISg+\n> knew that         when    he       kissed this    girl    , and  forever wed    his     unutterable visions to\n# VPt  NSg/I/C/Ddem NSg/I/C NPr/ISg+ VP/J   I/Ddem+ NSg/VB+ . VB/C NSg/J   NSg/VB ISg/D$+ NSg/J       NPl/V3+ P\n> her     perishable breath     , his     mind    would never romp   again like         the mind   of God     . So\n# ISg/D$+ NSg/J      N🅪Sg/VB/J+ . ISg/D$+ NSg/VB+ VXB   R     NSg/VB P     NSg/VB/J/C/P D   NSg/VB P  NPr/VB+ . NSg/I/J/R/C\n> he       waited , listening for   a    moment longer to the tuning   - fork    that          had been     struck\n# NPr/ISg+ VP/J   . Nᴹ/Vg/J   R/C/P D/P+ NSg+   NSg/JC P  D+  Nᴹ/Vg/J+ . NSg/VB+ NSg/I/C/Ddem+ VP  NSg/VLPp VB\n> upon a    star    . Then      he       kissed her     . At    his     lips    ’ touch   she  blossomed for   him  like         a\n# P    D/P+ NSg/VB+ . NSg/J/R/C NPr/ISg+ VP/J   ISg/D$+ . NSg/P ISg/D$+ NPl/V3+ . N🅪Sg/VB ISg+ VP/J      R/C/P ISg+ NSg/VB/J/C/P D/P\n> flower  and  the incarnation was  complete .\n# NSg/VB+ VB/C D   NSg/J       VLPt NSg/VB/J .\n>\n#\n> Through all          he       said , even       through his     appalling sentimentality , I       was  reminded\n# NSg/J/P NSg/I/J/C/Dq NPr/ISg+ VP/J . NSg/VB/J/R NSg/J/P ISg/D$+ Nᴹ/Vg/J   Nᴹ+            . ISg/#r+ VLPt VP/J\n> of something — an  elusive rhythm   , a   fragment of lost words   , that         I       had heard\n# P  NSg/I/J+  . D/P J       N🅪Sg/VB+ . D/P NSg/VB   P  VP/J NPl/V3+ . NSg/I/C/Ddem ISg/#r+ VP  VP/J\n> somewhere a   long     time       ago . For   a    moment a    phrase  tried to take   shape    in        my  mouth\n# NSg       D/P NPr/VB/J N🅪Sg/VB/J+ J/P . R/C/P D/P+ NSg+   D/P+ NSg/VB+ VP/J  P  NSg/VB N🅪Sg/VB+ NPr/J/R/P D$+ NSg/VB+\n> and  my  lips    parted like         a   dumb man’s       , as    though there was  more         struggling upon\n# VB/C D$+ NPl/V3+ VP/J   NSg/VB/J/C/P D/P VB/J NPr$/I/VB/J . R/C/P C      R+    VLPt NPr/I/J/R/Dq Nᴹ/Vg/J    P\n> them     than a   wisp   of startled air      . But     they made no        sound      , and  what   I       had almost\n# NSg/IPl+ C/P  D/P NSg/VB P  VP/J     N🅪Sg/VB+ . NSg/C/P IPl+ VP   NSg/Dq/P+ N🅪Sg/VB/J+ . VB/C NSg/I+ ISg/#r+ VP  R\n> remembered was  uncommunicable forever .\n# VP/J       VLPt ?              NSg/J   .\n>\n#\n>              CHAPTER VII\n# HeadingStart NSg/VB+ NSg/#r\n>\n#\n> It       was  when    curiosity about Gatsby was  at    its     highest that         the lights  in        his\n# NPr/ISg+ VLPt NSg/I/C NSg+      J/P   NPr    VLPt NSg/P ISg/D$+ JS      NSg/I/C/Ddem D   NPl/V3+ NPr/J/R/P ISg/D$+\n> house   failed to go       on  one     Saturday night    — and  , as    obscurely as    it       had begun , his\n# NPr/VB+ VP/J   P  NSg/VB/J J/P NSg/I/J NSg/VB+  N🅪Sg/VB+ . VB/C . R/C/P R         R/C/P NPr/ISg+ VP  VPp   . ISg/D$+\n> career    as    Trimalchio was  over    . Only  gradually did  I       become aware that         the\n# NSg/VB/J+ R/C/P ?          VLPt NSg/J/P . J/R/C R         VXPt ISg/#r+ VBPp   VB/J  NSg/I/C/Ddem D\n> automobiles which turned expectantly into his     drive   stayed for   just a   minute    and\n# NPl/V3      I/C+  VP/J   R           P    ISg/D$+ N🅪Sg/VB VP/J   R/C/P J/R  D/P NSg/VB/J+ VB/C\n> then      drove   sulkily away . Wondering if    he       were     sick     I       went    over    to find   out          — an\n# NSg/J/R/C NSg/VPt R       VB/J . Nᴹ/Vg/J   NSg/C NPr/ISg+ NSg/VLPt NSg/VB/J ISg/#r+ NSg/VPt NSg/J/P P  NSg/VB NSg/VB/J/R/P . D/P\n> unfamiliar butler with a   villainous face    squinted at    me       suspiciously from the\n# NSg/J      NPr/VB P    D/P J          NSg/VB+ VP/J     NSg/P NPr/ISg+ R            P    D\n> door    .\n# NSg/VB+ .\n>\n#\n> “ Is  Mr   . Gatsby sick     ? ”\n# . VL3 NSg+ . NPr    NSg/VB/J . .\n>\n#\n> “ Nope   . ” After a    pause   he       added “ sir     ’ ’ in        a   dilatory , grudging way    .\n# . NSg/VB . . P     D/P+ NSg/VB+ NPr/ISg+ VP/J  . NPr/VB+ . . NPr/J/R/P D/P J        . Nᴹ/Vg/J  NSg/J+ .\n>\n#\n> “ I       hadn’t seen    him  around , and  I       was  rather     worried . Tell   him  Mr   . Carraway came\n# . ISg/#r+ VPt    NSg/VPp ISg+ J/P    . VB/C ISg/#r+ VLPt NPr/VB/J/R VP/J    . NPr/VB ISg+ NSg+ . ?        NSg/VPt/P\n> over    . ”\n# NSg/J/P . .\n>\n#\n> “ Who    ? ” he       demanded rudely .\n# . NPr/I+ . . NPr/ISg+ VP/J     R      .\n>\n#\n> “ Carraway . ”\n# . ?        . .\n>\n#\n> “ Carraway . All          right    , I'll tell   him  . ”\n# . ?        . NSg/I/J/C/Dq NPr/VB/J . K    NPr/VB ISg+ . .\n>\n#\n> Abruptly he       slammed the door    .\n# R        NPr/ISg+ VP/J    D+  NSg/VB+ .\n>\n#\n> My  Finn informed me       that         Gatsby had dismissed every servant in        his     house  a   week\n# D$+ NPr+ VP/J     NPr/ISg+ NSg/I/C/Ddem NPr    VP  VP/J      Dq    NSg/VB+ NPr/J/R/P ISg/D$+ NPr/VB D/P NSg/J+\n> ago and  replaced them     with half      a   dozen others  , who    never went    into West      Egg\n# J/P VB/C VP/J     NSg/IPl+ P    N🅪Sg/J/P+ D/P NSg   NPl/V3+ . NPr/I+ R     NSg/VPt P    NPr/VB/J+ N🅪Sg/VB+\n> Village to be       bribed by    the tradesmen , but     ordered moderate supplies over    the\n# NSg+    P  NSg/VLXB VP/J   NSg/P D   NPl       . NSg/C/P VP/J    NSg/VB/J NPl/V3+  NSg/J/P D\n> telephone . The grocery boy     reported that         the kitchen looked like         a    pigsty , and\n# NSg/VB+   . D+  NSg/VB+ NSg/VB+ VP/J     NSg/I/C/Ddem D+  NSg/VB+ VP/J   NSg/VB/J/C/P D/P+ NSg+   . VB/C\n> the general  opinion in        the village was  that         the new   people  weren’t servants at\n# D   NSg/VB/J N🅪Sg    NPr/J/R/P D+  NSg+    VLPt NSg/I/C/Ddem D   NSg/J NPl/VB+ VPt     NPl/V3+  NSg/P\n> all          .\n# NSg/I/J/C/Dq .\n>\n#\n> Next     day     Gatsby called me       on  the phone   .\n# NSg/J/P+ NPr🅪Sg+ NPr    VP/J   NPr/ISg+ J/P D   NSg/VB+ .\n>\n#\n> “ Going   away ? ” I       inquired .\n# . Nᴹ/Vg/J VB/J . . ISg/#r+ VP/J     .\n>\n#\n> “ No       , old    sport   . ”\n# . NSg/Dq/P . NSg/J+ NSg/VB+ . .\n>\n#\n> “ I       hear you    fired all           your servants . ”\n# . ISg/#r+ VB   ISgPl+ J     NSg/I/J/C/Dq+ D$+  NPl/V3+  . .\n>\n#\n> “ I       wanted somebody who    wouldn’t gossip   . Daisy comes  over    quite often — in        the\n# . ISg/#r+ VP/J   NSg/I+   NPr/I+ VXB      N🅪Sg/VB+ . NPr+  NPl/V3 NSg/J/P R     R     . NPr/J/R/P D\n> afternoons . ”\n# NPl        . .\n>\n#\n> So          the whole caravansary had fallen in        like         a   card     house   at    the disapproval in\n# NSg/I/J/R/C D   NSg/J NSg         VP  VPp/J  NPr/J/R/P NSg/VB/J/C/P D/P N🅪Sg/VB+ NPr/VB+ NSg/P D   N🅪Sg        NPr/J/R/P\n> her     eyes    .\n# ISg/D$+ NPl/V3+ .\n>\n#\n> “ They’re some      people  Wolfshiem wanted to do  something for   . They’re all          brothers\n# . K       I/J/R/Dq+ NPl/VB+ ?         VP/J   P  VXB NSg/I/J+  R/C/P . K       NSg/I/J/C/Dq NPl/V3\n> and  sisters . They used to run      a    small     hotel . ”\n# VB/C NPl/V3+ . IPl+ VP/J P  NSg/VBPp D/P+ NPr/VB/J+ NSg+  . .\n>\n#\n> “ I       see    . ”\n# . ISg/#r+ NSg/VB . .\n>\n#\n> He       was  calling up         at    Daisy’s request — would I       come       to lunch   at    her     house\n# NPr/ISg+ VLPt Nᴹ/Vg/J NSg/VB/J/P NSg/P NPr$    NSg/VB+ . VXB   ISg/#r+ NSg/VBPp/P P  N🅪Sg/VB NSg/P ISg/D$+ NPr/VB+\n> to - morrow ? Miss   Baker would be       there . Half      an   hour later Daisy herself\n# P  . NPr/VB . NSg/VB NPr+  VXB   NSg/VLXB R     . N🅪Sg/J/P+ D/P+ NSg+ JC    NPr   ISg+\n> telephoned and  seemed relieved to find   that         I       was  coming  . Something was  up         . And\n# VP/J       VB/C VP/J   VP/J     P  NSg/VB NSg/I/C/Ddem ISg/#r+ VLPt Nᴹ/Vg/J . NSg/I/J+  VLPt NSg/VB/J/P . VB/C\n> yet      I       couldn’t believe that         they would choose   this   occasion for   a\n# NSg/VB/C ISg/#r+ VXB      VB      NSg/I/C/Ddem IPl+ VXB   NSg/VB/C I/Ddem NSg/VB+  R/C/P D/P\n> scene   — especially for   the rather     harrowing scene  that          Gatsby had outlined in        the\n# NSg/VB+ . R          R/C/P D   NPr/VB/J/R Nᴹ/Vg/J   NSg/VB NSg/I/C/Ddem+ NPr    VP  VP/J     NPr/J/R/P D\n> garden    .\n# NSg/VB/J+ .\n>\n#\n> The next     day     was  broiling , almost the last     , certainly the warmest , of the\n# D+  NSg/J/P+ NPr🅪Sg+ VLPt Nᴹ/Vg/J  . R      D   NSg/VB/J . R         D   JS      . P  D\n> summer     . As    my  train   emerged from the tunnel  into sunlight , only  the hot      whistles\n# NPr🅪Sg/VB+ . R/C/P D$+ NSg/VB+ VP/J    P    D+  NSg/VB+ P    NSg/VB+  . J/R/C D   NSg/VB/J NPl/V3\n> of the National Biscuit Company broke     the simmering hush    at    noon    . The straw\n# P  D   NSg/J    NSg     N🅪Sg+   NSg/VPt/J D   Nᴹ/Vg/J   NSg/VB+ NSg/P NSg/VB+ . D   N🅪Sg/VB/J+\n> seats  of the car  hovered on  the edge   of combustion ; the woman   next    to me\n# NPl/V3 P  D+  NSg+ VP/J    J/P D   NSg/VB P  Nᴹ         . D   NSg/VB+ NSg/J/P P  NPr/ISg+\n> perspired delicately for   a   while       into her     white       shirtwaist , and  then      , as    her\n# VP/J      R          R/C/P D/P NSg/VB/C/P+ P    ISg/D$+ NPr🅪Sg/VB/J NSg        . VB/C NSg/J/R/C . R/C/P ISg/D$+\n> newspaper dampened under   her     fingers , lapsed despairingly into deep  heat   with a\n# N🅪Sg/VB+  VP/J     NSg/J/P ISg/D$+ NPl/V3+ . VP/J   R            P    NSg/J Nᴹ/VB+ P    D/P\n> desolate cry     . Her     pocket    - book   slapped to the floor   .\n# VB/J     NSg/VB+ . ISg/D$+ NSg/VB/J+ . NSg/VB VP      P  D+  NSg/VB+ .\n>\n#\n> “ Oh     , my  ! ” she  gasped .\n# . NPr/VB . D$+ . . ISg+ VP/J   .\n>\n#\n> I       picked it       up         with a    weary bend    and  handed it       back     to her     , holding it       at    arm’s\n# ISg/#r+ VP/J   NPr/ISg+ NSg/VB/J/P P    D/P+ VB/J+ NPr/VB+ VB/C VP/J   NPr/ISg+ NSg/VB/J P  ISg/D$+ . Nᴹ/Vg/J NPr/ISg+ NSg/P K\n> length   and  by    the extreme tip    of the corners to indicate that         I       had no       designs\n# N🅪Sg/VB+ VB/C NSg/P D   NSg/J   NSg/VB P  D   NPl/V3+ P  VB       NSg/I/C/Ddem ISg/#r+ VP  NSg/Dq/P NPl/V3+\n> upon it       — but     every one      near       by    , including the woman   , suspected me       just the same .\n# P    NPr/ISg+ . NSg/C/P Dq    NSg/I/J+ NSg/VB/J/P NSg/P . Nᴹ/Vg/J   D   NSg/VB+ . VP/J      NPr/ISg+ J/R  D   I/J  .\n>\n#\n> “ Hot      ! ” said the conductor to familiar faces   . “ Some      weather  ! . . . Hot      ! . . .\n# . NSg/VB/J . . VP/J D   NSg       P  NSg/J    NPl/V3+ . . I/J/R/Dq+ Nᴹ/VB/J+ . . . . NSg/VB/J . . . .\n> Hot      ! . . . Hot      ! . . . Is  it       hot      enough for   you    ? Is  it       hot      ? Is  it       . . . ? ”\n# NSg/VB/J . . . . NSg/VB/J . . . . VL3 NPr/ISg+ NSg/VB/J NSg/I  R/C/P ISgPl+ . VL3 NPr/ISg+ NSg/VB/J . VL3 NPr/ISg+ . . . . .\n>\n#\n> My  commutation ticket  came      back     to me       with a   dark     stain   from his     hand    . That         any\n# D$+ NSg         NSg/VB+ NSg/VPt/P NSg/VB/J P  NPr/ISg+ P    D/P NSg/VB/J NSg/VB+ P    ISg/D$+ NSg/VB+ . NSg/I/C/Ddem I/R/Dq+\n> one      should care    in        this    heat   whose flushed lips    he       kissed , whose head      made damp\n# NSg/I/J+ VXB    N🅪Sg/VB NPr/J/R/P I/Ddem+ Nᴹ/VB+ I+    VP/J    NPl/V3+ NPr/ISg+ VP/J   . I+    NPr/VB/J+ VP   Nᴹ/VB/J\n> the pajama pocket    over    his     heart    !\n# D   NSg    NSg/VB/J+ NSg/J/P ISg/D$+ N🅪Sg/VB+ .\n>\n#\n> . . . Through the hall of the Buchanans ’ house   blew      a   faint    wind     , carrying the\n# . . . NSg/J/P D   NPr  P  D   ?         . NPr/VB+ NSg/VPt/J D/P NSg/VB/J N🅪Sg/VB+ . Nᴹ/Vg/J  D\n> sound     of the telephone bell    out          to Gatsby and  me       as    we   waited at    the door    .\n# N🅪Sg/VB/J P  D   NSg/VB+   NPr/VB+ NSg/VB/J/R/P P  NPr    VB/C NPr/ISg+ R/C/P IPl+ VP/J   NSg/P D   NSg/VB+ .\n>\n#\n> “ The master’s body    ! ” roared the butler into the mouthpiece . “ I’m sorry    , madame ,\n# . D   NSg      NSg/VB+ . . VP/J   D   NPr/VB P    D   NSg+       . . K   NSg/VB/J . NSg+   .\n> but     we   can’t furnish it       — it’s far      too hot      to touch   this   noon    ! ”\n# NSg/C/P IPl+ VXB   NSg/VB  NPr/ISg+ . K    NSg/VB/J R   NSg/VB/J P  N🅪Sg/VB I/Ddem NSg/VB+ . .\n>\n#\n> What   he       really said was  : “ Yes    . . . Yes    . . . I’ll see    . ”\n# NSg/I+ NPr/ISg+ R      VP/J VLPt . . NPl/VB . . . NPl/VB . . . K    NSg/VB . .\n>\n#\n> He       set       down        the receiver and  came      toward us       , glistening slightly , to take   our\n# NPr/ISg+ NPr/VBP/J N🅪Sg/VB/J/P D+  NSg+     VB/C NSg/VPt/P J/P    NPr/IPl+ . Nᴹ/Vg/J    R        . P  NSg/VB D$+\n> stiff    straw      hats    .\n# NSg/VB/J N🅪Sg/VB/J+ NPl/V3+ .\n>\n#\n> “ Madame expects you    in        the salon ! ” he       cried , needlessly indicating the\n# . NSg+   V3      ISgPl+ NPr/J/R/P D+  NSg+  . . NPr/ISg+ VP/J  . R          Nᴹ/Vg/J    D\n> direction . In        this    heat   every extra  gesture was  an  affront to the common   store\n# N🅪Sg+     . NPr/J/R/P I/Ddem+ Nᴹ/VB+ Dq+   NSg/J+ NSg/VB+ VLPt D/P NSg/VB  P  D   NSg/VB/J NSg/VB\n> of life     .\n# P  N🅪Sg/VB+ .\n>\n#\n> The room       , shadowed well       with awnings , was  dark     and  cool     . Daisy and  Jordan lay\n# D+  N🅪Sg/VB/J+ . VP/J     NSg/VB/J/R P    NPl/V3  . VLPt NSg/VB/J VB/C NSg/VB/J . NPr   VB/C NPr+   NSg/VBPt/J\n> upon an   enormous couch   , like         silver   idols weighing down        their own      white       dresses\n# P    D/P+ J+       NSg/VB+ . NSg/VB/J/C/P Nᴹ/VB/J+ NPl+  Nᴹ/Vg/J  N🅪Sg/VB/J/P D$+   NSg/VB/J NPr🅪Sg/VB/J NPl/V3+\n> against the singing breeze of the fans    .\n# C/P     D   Nᴹ/Vg/J NSg/VB P  D   NPl/V3+ .\n>\n#\n> “ We   can’t move   , ” they said together .\n# . IPl+ VXB   NSg/VB . . IPl+ VP/J J        .\n>\n#\n> Jordan’s fingers , powdered white       over    their tan       , rested for   a   moment in        mine      .\n# NPr$     NPl/V3+ . VP/J     NPr🅪Sg/VB/J NSg/J/P D$+   NSg/VB/J+ . VP/J   R/C/P D/P NSg+   NPr/J/R/P NSg/I/VB+ .\n>\n#\n> “ And  Mr   . Thomas Buchanan , the athlete ? ” I       inquired .\n# . VB/C NSg+ . NPr+   NPr+     . D+  NSg+    . . ISg/#r+ VP/J     .\n>\n#\n> Simultaneously I       heard his     voice   , gruff    , muffled , husky , at    the hall telephone .\n# R              ISg/#r+ VP/J  ISg/D$+ NSg/VB+ . NSg/VB/J . VP/J    . NSg/J . NSg/P D   NPr+ NSg/VB+   .\n>\n#\n> Gatsby stood in        the centre      of the crimson  carpet  and  gazed around with\n# NPr    VP    NPr/J/R/P D   NSg/VB/Comm P  D   NSg/VB/J NSg/VB+ VB/C VP/J  J/P    P\n> fascinated eyes    . Daisy watched him  and  laughed , her     sweet    , exciting laugh   ; a\n# VP/J       NPl/V3+ . NPr+  VP/J    ISg+ VB/C VP/J    . ISg/D$+ NPr/VB/J . Nᴹ/Vg/J+ NSg/VB+ . D/P\n> tiny  gust   of powder   rose      from her     bosom     into the air      .\n# NSg/J NSg/VB P  N🅪Sg/VB+ NPr/VPt/J P    ISg/D$+ NSg/VB/J+ P    D   N🅪Sg/VB+ .\n>\n#\n> “ The rumor       is  , ” whispered Jordan , “ that          that’s Tom’s girl    on  the telephone . ”\n# . D+  N🅪Sg/VB/Am+ VL3 . . VP/J      NPr+   . . NSg/I/C/Ddem+ NSg$   NPr$  NSg/VB+ J/P D   NSg/VB+   . .\n>\n#\n> We   were     silent . The voice   in        the hall rose      high       with annoyance : “ Very well       ,\n# IPl+ NSg/VLPt NSg/J  . D   NSg/VB+ NPr/J/R/P D+  NPr+ NPr/VPt/J NSg/VB/J/R P    N🅪Sg      . . J/R  NSg/VB/J/R .\n> then      , I       won’t sell   you    the car  at    all          . . . . I’m under   no       obligations to you    at\n# NSg/J/R/C . ISg/#r+ VXB   NSg/VB ISgPl+ D   NSg+ NSg/P NSg/I/J/C/Dq . . . . K   NSg/J/P NSg/Dq/P NPl+        P  ISgPl+ NSg/P\n> all          . . . and  as    for   your bothering me       about it       at    lunch    time       , I       won’t stand\n# NSg/I/J/C/Dq . . . VB/C R/C/P R/C/P D$+  Nᴹ/Vg/J   NPr/ISg+ J/P   NPr/ISg+ NSg/P N🅪Sg/VB+ N🅪Sg/VB/J+ . ISg/#r+ VXB   NSg/VB\n> that         at    all          ! ”\n# NSg/I/C/Ddem NSg/P NSg/I/J/C/Dq . .\n>\n#\n> “ Holding down        the receiver , ” said Daisy cynically .\n# . Nᴹ/Vg/J N🅪Sg/VB/J/P D+  NSg+     . . VP/J NPr+  R         .\n>\n#\n> “ No       , he’s not     , ” I       assured  her     . “ It’s a   bona - fide deal      . I       happen to know about\n# . NSg/Dq/P . NPr$ NSg/R/C . . ISg/#r+ NSg/VP/J ISg/D$+ . . K    D/P ?    . ?    NSg/VB/J+ . ISg/#r+ VB     P  VB   J/P\n> it       . ”\n# NPr/ISg+ . .\n>\n#\n> Tom     flung open      the door    , blocked out          its     space    for   a   moment with his     thick     body    ,\n# NPr/VB+ VB    NSg/VB/J+ D+  NSg/VB+ . VP/J    NSg/VB/J/R/P ISg/D$+ N🅪Sg/VB+ R/C/P D/P NSg+   P    ISg/D$+ NSg/VB/J+ NSg/VB+ .\n> and  hurried into the room       .\n# VB/C VP/J    P    D+  N🅪Sg/VB/J+ .\n>\n#\n> “ Mr   . Gatsby ! ” He       put     out          his     broad , flat      hand    with well       - concealed dislike      . “ I’m\n# . NSg+ . NPr    . . NPr/ISg+ NSg/VBP NSg/VB/J/R/P ISg/D$+ NSg/J . NSg/VB/J+ NSg/VB+ P    NSg/VB/J/R . VP/J      NSg/VB/J/C/P . . K\n> glad     to see    you    , sir     . . . . Nick    . . . . ”\n# NSg/VB/J P  NSg/VB ISgPl+ . NPr/VB+ . . . . NPr/VB+ . . . . .\n>\n#\n> “ Make   us       a    cold   drink   , ” cried Daisy .\n# . NSg/VB NPr/IPl+ D/P+ NSg/J+ NSg/VB+ . . VP/J  NPr+  .\n>\n#\n> As    he       left     the room       again she  got up         and  went    over    to Gatsby and  pulled his     face\n# R/C/P NPr/ISg+ NPr/VP/J D+  N🅪Sg/VB/J+ P     ISg+ VP  NSg/VB/J/P VB/C NSg/VPt NSg/J/P P  NPr    VB/C VP/J   ISg/D$+ NSg/VB+\n> down        , kissing him  on  the mouth   .\n# N🅪Sg/VB/J/P . Nᴹ/Vg/J ISg+ J/P D   NSg/VB+ .\n>\n#\n> “ You    know I       love      you    , ” she  murmured .\n# . ISgPl+ VB   ISg/#r+ NPr🅪Sg/VB ISgPl+ . . ISg+ VP/J     .\n>\n#\n> “ You    forget there’s a   lady    present  , ” said Jordan .\n# . ISgPl+ VB     K       D/P NPr/VB+ NSg/VB/J . . VP/J NPr+   .\n>\n#\n> Daisy looked around doubtfully .\n# NPr+  VP/J   J/P    R          .\n>\n#\n> “ You    kiss   Nick    too . ”\n# . ISgPl+ NSg/VB NPr/VB+ R   . .\n>\n#\n> “ What   a   low        , vulgar girl    ! ”\n# . NSg/I+ D/P NSg/VB/J/R . NSg/J  NSg/VB+ . .\n>\n#\n> “ I       don’t care     ! ” cried Daisy , and  began to clog   on  the brick      fireplace . Then      she\n# . ISg/#r+ VXB   N🅪Sg/VB+ . . VP/J  NPr+  . VB/C VPt   P  NSg/VB J/P D+  N🅪Sg/VB/J+ NSg+      . NSg/J/R/C ISg+\n> remembered the heat   and  sat      down        guiltily on  the couch   just as    a   freshly\n# VP/J       D+  Nᴹ/VB+ VB/C NSg/VP/J N🅪Sg/VB/J/P R        J/P D+  NSg/VB+ J/R  R/C/P D/P R\n> laundered nurse   leading a   little     girl    came      into the room       .\n# VP/J      NSg/VB+ Nᴹ/Vg/J D/P NPr/I/J/Dq NSg/VB+ NSg/VPt/P P    D   N🅪Sg/VB/J+ .\n>\n#\n> “ Bles - sed pre      - cious , ” she  crooned , holding out          her     arms    . “ Come       to your own\n# . ?    . NPr NSg/VB/P . ?     . . ISg+ VP/J    . Nᴹ/Vg/J NSg/VB/J/R/P ISg/D$+ NPl/V3+ . . NSg/VBPp/P P  D$+  NSg/VB/J+\n> mother    that          loves  you    . ”\n# NSg/VB/J+ NSg/I/C/Ddem+ NPl/V3 ISgPl+ . .\n>\n#\n> The child   , relinquished by    the nurse   , rushed across the room       and  rooted shyly\n# D+  NSg/VB+ . VP/J         NSg/P D+  NSg/VB+ . VP/J   NSg/P  D+  N🅪Sg/VB/J+ VB/C VP/J   R\n> into her     mother’s dress   .\n# P    ISg/D$+ NSg$     NSg/VB+ .\n>\n#\n> “ The bles - sed pre      - cious ! Did  mother    get    powder   on  your old   yellowy hair     ? Stand\n# . D   ?    . NPr NSg/VB/P . ?     . VXPt NSg/VB/J+ NSg/VB N🅪Sg/VB+ J/P D$+  NSg/J J       N🅪Sg/VB+ . NSg/VB\n> up         now       , and  say    — How   - de   - do  . ”\n# NSg/VB/J/P NSg/J/R/C . VB/C NSg/VB . NSg/C . NPr+ . VXB . .\n>\n#\n> Gatsby and  I       in        turn   leaned down        and  took the small    reluctant hand    . Afterward he\n# NPr    VB/C ISg/#r+ NPr/J/R/P NSg/VB VP/J   N🅪Sg/VB/J/P VB/C VPt  D   NPr/VB/J J         NSg/VB+ . R/Am      NPr/ISg+\n> kept looking at    the child  with surprise . I       don’t think  he       had ever really\n# VP   Nᴹ/Vg/J NSg/P D   NSg/VB P    NSg/VB+  . ISg/#r+ VXB   NSg/VB NPr/ISg+ VP  J/R  R\n> believed in        its     existence before .\n# VP/J     NPr/J/R/P ISg/D$+ NSg+      C/P    .\n>\n#\n> “ I       got dressed before luncheon , ” said the child   , turning eagerly to Daisy .\n# . ISg/#r+ VP  VP/J    C/P    NSg/VB+  . . VP/J D+  NSg/VB+ . Nᴹ/Vg/J R       P  NPr   .\n>\n#\n> “ That’s because your mother    wanted to show   you    off        . ” Her     face    bent     into the\n# . NSg$   C/P     D$+  NSg/VB/J+ VP/J   P  NSg/VB ISgPl+ NSg/VB/J/P . . ISg/D$+ NSg/VB+ NSg/VP/J P    D\n> single   wrinkle of the small    white       neck    . “ You    dream     , you    . You    absolute little\n# NSg/VB/J NSg/VB  P  D   NPr/VB/J NPr🅪Sg/VB/J NSg/VB+ . . ISgPl+ NSg/VB/J+ . ISgPl+ . ISgPl+ NSg/J+   NPr/I/J/Dq+\n> dream     . ”\n# NSg/VB/J+ . .\n>\n#\n> “ Yes    , ” admitted the child   calmly . “ Aunt Jordan’s got on  a   white       dress   too . ”\n# . NPl/VB . . VP/J     D+  NSg/VB+ R      . . NSg+ NPr$     VP  J/P D/P NPr🅪Sg/VB/J NSg/VB+ R   . .\n>\n#\n> “ How   do  you    like         mother’s friends   ? ” Daisy turned her     around so          that         she  faced\n# . NSg/C VXB ISgPl+ NSg/VB/J/C/P NSg$     NPrPl/V3+ . . NPr+  VP/J   ISg/D$+ J/P    NSg/I/J/R/C NSg/I/C/Ddem ISg+ VP/J\n> Gatsby . “ Do  you    think  they’re pretty     ? ”\n# NPr    . . VXB ISgPl+ NSg/VB K       NSg/VB/J/R . .\n>\n#\n> “ Where’s Daddy     ? ”\n# . NSg$    NSg/VB/J+ . .\n>\n#\n> “ She  doesn’t look   like         her     father  , ” explained Daisy . “ She  looks  like         me       . She’s\n# . ISg+ VX3     NSg/VB NSg/VB/J/C/P ISg/D$+ NPr/VB+ . . VP/J      NPr+  . . ISg+ NPl/V3 NSg/VB/J/C/P NPr/ISg+ . K\n> got my  hair    and  shape   of the face    . ”\n# VP  D$+ N🅪Sg/VB VB/C N🅪Sg/VB P  D   NSg/VB+ . .\n>\n#\n> Daisy sat      back     upon the couch   . The nurse   took a    step    forward  and  held out          her\n# NPr+  NSg/VP/J NSg/VB/J P    D+  NSg/VB+ . D+  NSg/VB+ VPt  D/P+ NSg/VB+ NSg/VB/J VB/C VP   NSg/VB/J/R/P ISg/D$+\n> hand    .\n# NSg/VB+ .\n>\n#\n> “ Come       , Pammy . ”\n# . NSg/VBPp/P . ?     . .\n>\n#\n> “ Good     - by    , sweetheart ! ”\n# . NPr/VB/J . NSg/P . NSg        . .\n>\n#\n> With a   reluctant backward glance the well       - disciplined child  held to her     nurse’s\n# P    D/P J         NSg/J    NSg/VB D   NSg/VB/J/R . VP/J+       NSg/VB VP   P  ISg/D$+ NSg$\n> hand    and  was  pulled out          the door    , just as    Tom     came      back     , preceding four gin\n# NSg/VB+ VB/C VLPt VP/J   NSg/VB/J/R/P D   NSg/VB+ . J/R  R/C/P NPr/VB+ NSg/VPt/P NSg/VB/J . Nᴹ/Vg/J   NSg  N🅪Sg/VB/C+\n> rickeys that          clicked full     of ice        .\n# ?       NSg/I/C/Ddem+ VP/J    NSg/VB/J P  NPr🅪Sg/VB+ .\n>\n#\n> Gatsby took up         his     drink   .\n# NPr    VPt  NSg/VB/J/P ISg/D$+ NSg/VB+ .\n>\n#\n> “ They certainly look   cool     , ” he       said , with visible tension  .\n# . IPl+ R         NSg/VB NSg/VB/J . . NPr/ISg+ VP/J . P    J+      N🅪Sg/VB+ .\n>\n#\n> We   drank   in        long     , greedy swallows .\n# IPl+ NSg/VPt NPr/J/R/P NPr/VB/J . J+     NPl/V3+  .\n>\n#\n> “ I       read    somewhere that         the sun’s getting hotter    every year , ” said Tom     genially .\n# . ISg/#r+ NSg/VBP NSg       NSg/I/C/Ddem D   NPr$  NSg/Vg  NSg/VB/JC Dq    NSg+ . . VP/J NPr/VB+ R        .\n> “ It       seems that         pretty     soon the earth’s going   to fall    into the sun     — or    wait   a\n# . NPr/ISg+ V3    NSg/I/C/Ddem NSg/VB/J/R J/R  D   K       Nᴹ/Vg/J P  N🅪Sg/VB P    D   NPr/VB+ . NPr/C NSg/VB D/P\n> minute    — it’s just the opposite — the sun’s getting colder every year .\n# NSg/VB/J+ . K    J/R  D   NSg/J/P  . D   NPr$  NSg/Vg  JC     Dq    NSg+ .\n>\n#\n> “ Come       outside   , ” he       suggested to Gatsby , “ I’d like         you    to have    a   look    at    the\n# . NSg/VBPp/P Nᴹ/VB/J/P . . NPr/ISg+ VP/J      P  NPr    . . K   NSg/VB/J/C/P ISgPl+ P  NSg/VXB D/P NSg/VB+ NSg/P D\n> place    . ”\n# N🅪Sg/VB+ . .\n>\n#\n> I       went    with them     out          to the veranda      . On  the green        Sound      , stagnant in        the heat   ,\n# ISg/#r+ NSg/VPt P    NSg/IPl+ NSg/VB/J/R/P P  D+  NSg/NoAm/Br+ . J/P D+  NPr🅪Sg/VB/J+ N🅪Sg/VB/J+ . J        NPr/J/R/P D   Nᴹ/VB+ .\n> one     small    sail    crawled slowly toward the fresher sea  . Gatsby’s eyes    followed it\n# NSg/I/J NPr/VB/J NSg/VB+ VP/J    R      J/P    D   NSg/JC  NSg+ . NPr$     NPl/V3+ VP/J     NPr/ISg+\n> momentarily ; he       raised his     hand    and  pointed across the bay       .\n# R           . NPr/ISg+ VP/J   ISg/D$+ NSg/VB+ VB/C VP/J    NSg/P  D   NSg/VB/J+ .\n>\n#\n> “ I’m right    across from you    . ”\n# . K   NPr/VB/J NSg/P  P    ISgPl+ . .\n>\n#\n> “ So          you    are . ”\n# . NSg/I/J/R/C ISgPl+ VLB . .\n>\n#\n> Our eyes    lifted over    the rose       - beds   and  the hot      lawn    and  the weedy refuse of the\n# D$+ NPl/V3+ VP/J   NSg/J/P D   NPr/VPt/J+ . NPl/V3 VB/C D   NSg/VB/J NSg/VB+ VB/C D   J     NSg/VB P  D+\n> dog       - days alongshore . Slowly the white       wings  of the boat    moved against the blue\n# NSg/VB/J+ . NPl+ J          . R      D   NPr🅪Sg/VB/J NPl/V3 P  D+  NSg/VB+ VP/J  C/P     D   N🅪Sg/VB/J\n> cool     limit    of the sky      . Ahead lay        the scalloped ocean and  the abounding blessed\n# NSg/VB/J NSg/VB/J P  D+  N🅪Sg/VB+ . R     NSg/VBPt/J D   VP/J      NSg+  VB/C D   Nᴹ/Vg/J   VP/J\n> isles .\n# NPl+  .\n>\n#\n> “ There’s sport   for   you    , ” said Tom     , nodding  . “ I’d like         to be       out          there with him\n# . K       NSg/VB+ R/C/P ISgPl+ . . VP/J NPr/VB+ . NSg/VP/J . . K   NSg/VB/J/C/P P  NSg/VLXB NSg/VB/J/R/P R     P    ISg+\n> for   about an  hour . ”\n# R/C/P J/P   D/P NSg+ . .\n>\n#\n> We   had luncheon in        the dining   - room       , darkened too against the heat   , and  drank\n# IPl+ VP  NSg/VB+  NPr/J/R/P D+  Nᴹ/Vg/J+ . N🅪Sg/VB/J+ . VP/J     R   C/P     D+  Nᴹ/VB+ . VB/C NSg/VPt\n> down        nervous gayety with the cold  ale   .\n# N🅪Sg/VB/J/P J       ?      P    D   NSg/J N🅪Sg+ .\n>\n#\n> “ What’ll we   do  with ourselves this   afternoon ? ” cried Daisy , “ and  the day     after\n# . K       IPl+ VXB P    IPl+      I/Ddem N🅪Sg+     . . VP/J  NPr+  . . VB/C D+  NPr🅪Sg+ P\n> that          , and  the next     thirty years ? ”\n# NSg/I/C/Ddem+ . VB/C D+  NSg/J/P+ NSg+   NPl+  . .\n>\n#\n> “ Don’t be       morbid , ” Jordan said . “ Life     starts all          over    again when    it       gets   crisp\n# . VXB   NSg/VLXB J      . . NPr+   VP/J . . N🅪Sg/VB+ NPl/V3 NSg/I/J/C/Dq NSg/J/P P     NSg/I/C NPr/ISg+ NPl/V3 NSg/VB/J\n> in        the fall     . ”\n# NPr/J/R/P D+  N🅪Sg/VB+ . .\n>\n#\n> “ But     it’s so          hot      , ” insisted Daisy , on  the verge  of tears   , “ and  everything’s so\n# . NSg/C/P K    NSg/I/J/R/C NSg/VB/J . . VP/J     NPr+  . J/P D   NSg/VB P  NPl/V3+ . . VB/C NSg$         NSg/I/J/R/C\n> confused . Let’s all          go       to town ! ”\n# VP/J     . NSg$  NSg/I/J/C/Dq NSg/VB/J P  NSg  . .\n>\n#\n> Her     voice   struggled on  through the heat   , beating against it       , molding    its\n# ISg/D$+ NSg/VB+ VP/J      J/P NSg/J/P D+  Nᴹ/VB+ . Nᴹ/Vg/J C/P     NPr/ISg+ . N🅪Sg/Vg/J+ ISg/D$+\n> senselessness into forms   .\n# Nᴹ            P    NPl/V3+ .\n>\n#\n> “ I’ve heard of making  a   garage  out          of a   stable   , ” Tom     was  saying    to Gatsby , “ but\n# . K    VP/J  P  Nᴹ/Vg/J D/P NSg/VB+ NSg/VB/J/R/P P  D/P NSg/VB/J . . NPr/VB+ VLPt N🅪Sg/Vg/J P  NPr    . . NSg/C/P\n> I’m the first man       who    ever made a   stable   out          of a   garage  . ”\n# K   D   NSg/J NPr/VB/J+ NPr/I+ J/R  VP   D/P NSg/VB/J NSg/VB/J/R/P P  D/P NSg/VB+ . .\n>\n#\n> “ Who    wants  to go       to town ? ” demanded Daisy insistently . Gatsby’s eyes    floated\n# . NPr/I+ NPl/V3 P  NSg/VB/J P  NSg  . . VP/J     NPr+  R           . NPr$     NPl/V3+ VP/J\n> toward her     . “ Ah       , ” she  cried , “ you    look   so          cool     . ”\n# J/P    ISg/D$+ . . NSg/I/VB . . ISg+ VP/J  . . ISgPl+ NSg/VB NSg/I/J/R/C NSg/VB/J . .\n>\n#\n> Their eyes    met , and  they stared together at    each other    , alone in        space    . With an\n# D$+   NPl/V3+ VP  . VB/C IPl+ VP/J   J        NSg/P Dq   NSg/VB/J . J     NPr/J/R/P N🅪Sg/VB+ . P    D/P+\n> effort   she  glanced down        at    the table   .\n# N🅪Sg/VB+ ISg+ VP/J    N🅪Sg/VB/J/P NSg/P D+  NSg/VB+ .\n>\n#\n> “ You    always look   so          cool     , ” she  repeated .\n# . ISgPl+ R      NSg/VB NSg/I/J/R/C NSg/VB/J . . ISg+ VP/J     .\n>\n#\n> She  had told him  that         she  loved him  , and  Tom     Buchanan saw     . He       was  astounded . His\n# ISg+ VP  VP   ISg+ NSg/I/C/Ddem ISg+ VP/J  ISg+ . VB/C NPr/VB+ NPr+     NSg/VPt . NPr/ISg+ VLPt VP/J      . ISg/D$+\n> mouth   opened a   little     , and  he       looked at    Gatsby , and  then      back     at    Daisy as    if    he\n# NSg/VB+ VP/J   D/P NPr/I/J/Dq . VB/C NPr/ISg+ VP/J   NSg/P NPr    . VB/C NSg/J/R/C NSg/VB/J NSg/P NPr+  R/C/P NSg/C NPr/ISg+\n> had just recognized her     as    some     one      he       knew a   long     time       ago .\n# VP  J/R  VP/J       ISg/D$+ R/C/P I/J/R/Dq NSg/I/J+ NPr/ISg+ VPt  D/P NPr/VB/J N🅪Sg/VB/J+ J/P .\n>\n#\n> “ You    resemble the advertisement of the man       , ” she  went    on  innocently . ‘          You    know\n# . ISgPl+ VB       D   NSg           P  D   NPr/VB/J+ . . ISg+ NSg/VPt J/P R          . Unlintable ISgPl+ VB\n> the advertisement of the man       — ”\n# D   NSg           P  D   NPr/VB/J+ . .\n>\n#\n> “ All          right    , ” broke     in        Tom     quickly , “ I’m perfectly willing  to go       to town . Come\n# . NSg/I/J/C/Dq NPr/VB/J . . NSg/VPt/J NPr/J/R/P NPr/VB+ R       . . K   R         NSg/Vg/J P  NSg/VB/J P  NSg  . NSg/VBPp/P\n> on  — we’re all          going   to town . ”\n# J/P . K     NSg/I/J/C/Dq Nᴹ/Vg/J P  NSg  . .\n>\n#\n> He       got up         , his     eyes    still      flashing between Gatsby and  his     wife      . No       one     moved .\n# NPr/ISg+ VP  NSg/VB/J/P . ISg/D$+ NPl/V3+ NSg/VB/J/R Nᴹ/Vg/J  NSg/P   NPr    VB/C ISg/D$+ NSg/VB/J+ . NSg/Dq/P NSg/I/J VP/J  .\n>\n#\n> “ Come       on  ! ” His     temper     cracked a   little     . “ What’s the matter   , anyhow ? If    we’re\n# . NSg/VBPp/P J/P . . ISg/D$+ NSg/VB/JC+ VP/J    D/P NPr/I/J/Dq . . K      D+  N🅪Sg/VB+ . J      . NSg/C K\n> going   to town , let’s start  . ”\n# Nᴹ/Vg/J P  NSg  . NSg$  NSg/VB . .\n>\n#\n> His     hand    , trembling with his     effort   at    self        - control  , bore     to his     lips   the last\n# ISg/D$+ NSg/VB+ . Nᴹ/Vg/J   P    ISg/D$+ N🅪Sg/VB+ NSg/P NSg/I/VB/J+ . N🅪Sg/VB+ . NSg/VBPt P  ISg/D$+ NPl/V3 D   NSg/VB/J\n> of his     glass     of ale   . Daisy’s voice   got us       to our feet and  out          on  to the blazing\n# P  ISg/D$+ NPr🅪Sg/VB P  N🅪Sg+ . NPr$    NSg/VB+ VP  NPr/IPl+ P  D$+ NPl+ VB/C NSg/VB/J/R/P J/P P  D   Nᴹ/Vg/J\n> gravel   drive   .\n# Nᴹ/VB/J+ N🅪Sg/VB .\n>\n#\n> “ Are we   just going   to go       ? ” she  objected . “ Like         this    ? Aren’t we   going   to let     any\n# . VLB IPl+ J/R  Nᴹ/Vg/J P  NSg/VB/J . . ISg+ VP/J     . . NSg/VB/J/C/P I/Ddem+ . VB     IPl+ Nᴹ/Vg/J P  NSg/VBP I/R/Dq\n> one     smoke    a   cigarette first ? ”\n# NSg/I/J N🅪Sg/VB+ D/P NSg/VB+   NSg/J . .\n>\n#\n> “ Everybody smoked all          through lunch    . ”\n# . NSg/I+    VP/J   NSg/I/J/C/Dq NSg/J/P N🅪Sg/VB+ . .\n>\n#\n> “ Oh     , let’s have    fun     , ” she  begged him  . “ It’s too hot      to fuss    . ”\n# . NPr/VB . NSg$  NSg/VXB Nᴹ/VB/J . . ISg+ VP     ISg+ . . K    R   NSg/VB/J P  N🅪Sg/VB . .\n>\n#\n> He       didn’t answer  .\n# NPr/ISg+ VXPt   NSg/VB+ .\n>\n#\n> “ Have    it       your own       way    , ” she  said . “ Come       on  , Jordan . ”\n# . NSg/VXB NPr/ISg+ D$+  NSg/VB/J+ NSg/J+ . . ISg+ VP/J . . NSg/VBPp/P J/P . NPr+   . .\n>\n#\n> They went    up         - stairs to get    ready    while      we   three men  stood there shuffling the\n# IPl+ NSg/VPt NSg/VB/J/P . NPl+   P  NSg/VB NSg/VB/J NSg/VB/C/P IPl+ NSg+  NPl+ VP    R+    Nᴹ/Vg/J   D\n> hot      pebbles with our feet . A   silver   curve    of the moon    hovered already in        the\n# NSg/VB/J NPl/V3+ P    D$+ NPl+ . D/P Nᴹ/VB/J+ NSg/VB/J P  D+  NPr/VB+ VP/J    R       NPr/J/R/P D+\n> western sky      . Gatsby started to speak  , changed his     mind    , but     not     before Tom\n# NPr/J+  N🅪Sg/VB+ . NPr    VP/J    P  NSg/VB . VP/J    ISg/D$+ NSg/VB+ . NSg/C/P NSg/R/C C/P    NPr/VB+\n> wheeled and  faced him  expectantly .\n# VP/J    VB/C VP/J  ISg+ R           .\n>\n#\n> “ Have    you    got your stables here ? ” asked Gatsby with an  effort   .\n# . NSg/VXB ISgPl+ VP  D$+  NPl/V3+ J/R  . . VP/J  NPr    P    D/P N🅪Sg/VB+ .\n>\n#\n> “ About a   quarter  of a    mile down        the road    . ”\n# . J/P   D/P NSg/VB/J P  D/P+ NSg+ N🅪Sg/VB/J/P D+  N🅪Sg/J+ . .\n>\n#\n> “ Oh     . ”\n# . NPr/VB . .\n>\n#\n> A    pause   .\n# D/P+ NSg/VB+ .\n>\n#\n> “ I       don’t see    the idea of going   to town , ” broke     out          Tom     savagely . “ Women get\n# . ISg/#r+ VXB   NSg/VB D   NSg+ P  Nᴹ/Vg/J P  NSg  . . NSg/VPt/J NSg/VB/J/R/P NPr/VB+ R        . . NPl+  NSg/VB\n> these   notions in        their heads   — — — ”\n# I/Ddem+ NPl+    NPr/J/R/P D$+   NPl/V3+ . . . .\n>\n#\n> “ Shall we   take   anything  to drink  ? ” called Daisy from an   upper  window  .\n# . VXB   IPl+ NSg/VB NSg/I/VB+ P  NSg/VB . . VP/J   NPr+  P    D/P+ NSg/J+ NSg/VB+ .\n>\n#\n> “ I’ll get    some     whiskey , ” answered Tom     . He       went    inside  .\n# . K    NSg/VB I/J/R/Dq N🅪Sg    . . VP/J     NPr/VB+ . NPr/ISg+ NSg/VPt NSg/J/P .\n>\n#\n> Gatsby turned to me       rigidly :\n# NPr    VP/J   P  NPr/ISg+ R       .\n>\n#\n> “ I       can’t say    anything  in        his     house   , old   sport   . ”\n# . ISg/#r+ VXB   NSg/VB NSg/I/VB+ NPr/J/R/P ISg/D$+ NPr/VB+ . NSg/J NSg/VB+ . .\n>\n#\n> “ She’s got an  indiscreet voice   , ” I       remarked . “ It’s full     of — ” I       hesitated .\n# . K     VP  D/P J          NSg/VB+ . . ISg/#r+ VP/J     . . K    NSg/VB/J P  . . ISg/#r+ VP/J      .\n>\n#\n> “ Her     voice   is  full     of money   , ” he       said suddenly .\n# . ISg/D$+ NSg/VB+ VL3 NSg/VB/J P  N🅪Sg/J+ . . NPr/ISg+ VP/J R        .\n>\n#\n> That          was  it       . I’d never understood before . It       was  full     of money   — that          was  the\n# NSg/I/C/Ddem+ VLPt NPr/ISg+ . K   R     VP/J       C/P    . NPr/ISg+ VLPt NSg/VB/J P  N🅪Sg/J+ . NSg/I/C/Ddem+ VLPt D\n> inexhaustible charm   that          rose      and  fell      in        it       , the jingle of it       , the cymbals ’\n# J             N🅪Sg/VB NSg/I/C/Ddem+ NPr/VPt/J VB/C NSg/VPt/J NPr/J/R/P NPr/ISg+ . D   NSg/VB P  NPr/ISg+ . D   NPl     .\n> song of it       . . . . High       in        a   white       palace  the king’s daughter , the golden   girl    . .\n# N🅪Sg P  NPr/ISg+ . . . . NSg/VB/J/R NPr/J/R/P D/P NPr🅪Sg/VB/J NSg/VB+ D   NPr$   NSg+     . D   NPr/VB/J NSg/VB+ . .\n> . .\n# . .\n>\n#\n> Tom     came      out          of the house   wrapping a    quart     bottle  in        a    towel   , followed by    Daisy\n# NPr/VB+ NSg/VPt/P NSg/VB/J/R/P P  D+  NPr/VB+ N🅪Sg/Vg+ D/P+ NSg/VB/J+ NSg/VB+ NPr/J/R/P D/P+ NSg/VB+ . VP/J     NSg/P NPr\n> and  Jordan wearing small    tight hats   of metallic cloth and  carrying light      capes\n# VB/C NPr+   Nᴹ/Vg/J NPr/VB/J VB/J  NPl/V3 P  NSg/J+   NSg+  VB/C Nᴹ/Vg/J  N🅪Sg/VB/J+ NPl/V3+\n> over    their arms    .\n# NSg/J/P D$+   NPl/V3+ .\n>\n#\n> “ Shall we   all          go        in        my  car  ? ” suggested Gatsby . He       felt      the hot      , green       leather   of\n# . VXB   IPl+ NSg/I/J/C/Dq NSg/VB/J+ NPr/J/R/P D$+ NSg+ . . VP/J      NPr    . NPr/ISg+ N🅪Sg/VP/J D   NSg/VB/J . NPr🅪Sg/VB/J N🅪Sg/VB/J P\n> the seat    . “ I       ought     to have    left     it       in        the shade    . ”\n# D+  NSg/VB+ . . ISg/#r+ NSg/I/VXB P  NSg/VXB NPr/VP/J NPr/ISg+ NPr/J/R/P D+  N🅪Sg/VB+ . .\n>\n#\n> “ Is  it       standard shift   ? ” demanded Tom     .\n# . VL3 NPr/ISg+ NSg/J+   NSg/VB+ . . VP/J     NPr/VB+ .\n>\n#\n> “ Yes    . ”\n# . NPl/VB . .\n>\n#\n> “ Well       , you    take   my  coupé and  let     me       drive   your car  to town . ”\n# . NSg/VB/J/R . ISgPl+ NSg/VB D$+ ?     VB/C NSg/VBP NPr/ISg+ N🅪Sg/VB D$+  NSg+ P  NSg  . .\n>\n#\n> The suggestion was  distasteful to Gatsby .\n# D+  N🅪Sg+      VLPt J           P  NPr    .\n>\n#\n> “ I       don’t think  there’s much         gas       , ” he       objected .\n# . ISg/#r+ VXB   NSg/VB K       NSg/I/J/R/Dq NSg/VB/J+ . . NPr/ISg+ VP/J     .\n>\n#\n> “ Plenty  of gas       , ” said Tom     boisterously . He       looked at    the gauge   . “ And  if    it       runs\n# . NSg/I/J P  NSg/VB/J+ . . VP/J NPr/VB+ R            . NPr/ISg+ VP/J   NSg/P D+  NSg/VB+ . . VB/C NSg/C NPr/ISg+ NPl/V3\n> out          I       can     stop   at    a   drug    - store   . You    can     buy    anything  at    a   drug    - store   nowadays . ”\n# NSg/VB/J/R/P ISg/#r+ NPr/VXB NSg/VB NSg/P D/P NSg/VB+ . NSg/VB+ . ISgPl+ NPr/VXB NSg/VB NSg/I/VB+ NSg/P D/P NSg/VB+ . NSg/VB+ NSg      . .\n>\n#\n> A    pause   followed this   apparently pointless remark  . Daisy looked at    Tom     frowning ,\n# D/P+ NSg/VB+ VP/J     I/Ddem R          J         NSg/VB+ . NPr+  VP/J   NSg/P NPr/VB+ Nᴹ/Vg/J  .\n> and  an   indefinable expression , at    once  definitely unfamiliar and  vaguely\n# VB/C D/P+ J+          N🅪Sg+      . NSg/P NSg/C R          NSg/J      VB/C R\n> recognizable , as    if    I       had only  heard it       described in        words   , passed over    Gatsby’s\n# J            . R/C/P NSg/C ISg/#r+ VP  J/R/C VP/J  NPr/ISg+ VP/J      NPr/J/R/P NPl/V3+ . VP/J   NSg/J/P NPr$\n> face    .\n# NSg/VB+ .\n>\n#\n> “ Come       on  , Daisy , ” said Tom     , pressing her     with his     hand    toward Gatsby’s car  .\n# . NSg/VBPp/P J/P . NPr+  . . VP/J NPr/VB+ . Nᴹ/Vg/J  ISg/D$+ P    ISg/D$+ NSg/VB+ J/P    NPr$     NSg+ .\n> “ I’ll take   you    in        this   circus  wagon   . ”\n# . K    NSg/VB ISgPl+ NPr/J/R/P I/Ddem NSg/VB+ NSg/VB+ . .\n>\n#\n> He       opened the door    , but     she  moved out          from the circle of his     arm       .\n# NPr/ISg+ VP/J   D+  NSg/VB+ . NSg/C/P ISg+ VP/J  NSg/VB/J/R/P P    D   NSg/VB P  ISg/D$+ NSg/VB/J+ .\n>\n#\n> “ You    take   Nick   and  Jordan . We’ll follow you    in        the coupé . ”\n# . ISgPl+ NSg/VB NPr/VB VB/C NPr+   . K     NSg/VB ISgPl+ NPr/J/R/P D   ?     . .\n>\n#\n> She  walked close    to Gatsby , touching  his     coat    with her     hand    . Jordan and  Tom     and\n# ISg+ VP/J   NSg/VB/J P  NPr    . Nᴹ/Vg/J/P ISg/D$+ NSg/VB+ P    ISg/D$+ NSg/VB+ . NPr    VB/C NPr/VB+ VB/C\n> I       got into the front     seat   of Gatsby’s car  , Tom     pushed the unfamiliar gears\n# ISg/#r+ VP  P    D   NSg/VB/J+ NSg/VB P  NPr$     NSg+ . NPr/VB+ VP/J   D   NSg/J      NPl/V3+\n> tentatively , and  we   shot      off        into the oppressive heat   , leaving them     out          of sight\n# R           . VB/C IPl+ NSg/VP/J+ NSg/VB/J/P P    D   J          Nᴹ/VB+ . Nᴹ/Vg/J NSg/IPl+ NSg/VB/J/R/P P  N🅪Sg/VB+\n> behind  .\n# NSg/J/P .\n>\n#\n> “ Did  you    see    that          ? ” demanded Tom     .\n# . VXPt ISgPl+ NSg/VB NSg/I/C/Ddem+ . . VP/J     NPr/VB+ .\n>\n#\n> “ See    what   ? ”\n# . NSg/VB NSg/I+ . .\n>\n#\n> He       looked at    me       keenly , realizing         that         Jordan and  I       must    have    known all          along .\n# NPr/ISg+ VP/J   NSg/P NPr/ISg+ R      . Nᴹ/Vg/J/Comm/NoAm NSg/I/C/Ddem NPr+   VB/C ISg/#r+ NSg/VXB NSg/VXB VPp/J NSg/I/J/C/Dq P     .\n>\n#\n> “ You    think  I’m pretty     dumb , don’t you    ? ” he       suggested . “ Perhaps I       am        , but     I       have\n# . ISgPl+ NSg/VB K   NSg/VB/J/R VB/J . VXB   ISgPl+ . . NPr/ISg+ VP/J      . . NSg/R   ISg/#r+ NPr/VLB/J . NSg/C/P ISg/#r+ NSg/VXB\n> a   — almost a    second    sight    , sometimes , that          tells  me       what   to do  . Maybe   you    don’t\n# D/P . R      D/P+ NSg/VB/J+ N🅪Sg/VB+ . R         . NSg/I/C/Ddem+ NPl/V3 NPr/ISg+ NSg/I+ P  VXB . NSg/J/R ISgPl+ VXB\n> believe that          , but     science  — — — ”\n# VB      NSg/I/C/Ddem+ . NSg/C/P N🅪Sg/VB+ . . . .\n>\n#\n> He       paused . The immediate contingency overtook him  , pulled him  back     from the edge\n# NPr/ISg+ VP/J   . D   J         NSg         NSg/VPt  ISg+ . VP/J   ISg+ NSg/VB/J P    D   NSg/VB\n> of the theoretical abyss .\n# P  D   J           NSg+  .\n>\n#\n> “ I’ve made a   small    investigation of this   fellow , ” he       continued . “ I       could   have\n# . K    VP   D/P NPr/VB/J N🅪Sg          P  I/Ddem NSg    . . NPr/ISg+ VP/J      . . ISg/#r+ NSg/VXB NSg/VXB\n> gone    deeper if    I’d known — — — ”\n# VPp/J/P JC     NSg/C K   VPp/J . . . .\n>\n#\n> “ Do  you    mean     you’ve been     to a   medium ? ” inquired Jordan humorously .\n# . VXB ISgPl+ NSg/VB/J K      NSg/VLPp P  D/P NSg/J  . . VP/J     NPr+   R          .\n>\n#\n> “ What   ? ” Confused , he       stared at    us       as    we   laughed . “ A   medium ? ”\n# . NSg/I+ . . VP/J     . NPr/ISg+ VP/J   NSg/P NPr/IPl+ R/C/P IPl+ VP/J    . . D/P NSg/J  . .\n>\n#\n> “ About Gatsby . ”\n# . J/P   NPr    . .\n>\n#\n> “ About Gatsby ! No       , I       haven’t . I       said I’d been     making  a   small    investigation of\n# . J/P   NPr    . NSg/Dq/P . ISg/#r+ VXB     . ISg/#r+ VP/J K   NSg/VLPp Nᴹ/Vg/J D/P NPr/VB/J N🅪Sg          P\n> his     past       . ”\n# ISg/D$+ NSg/VB/J/P . .\n>\n#\n> “ And  you    found  he       was  an  Oxford man      , ” said Jordan helpfully .\n# . VB/C ISgPl+ NSg/VP NPr/ISg+ VLPt D/P NPr    NPr/VB/J . . VP/J NPr+   R         .\n>\n#\n> “ An   Oxford man       ! ” He       was  incredulous . “ Like         hell    he       is  ! He       wears  a    pink       suit    . ”\n# . D/P+ NPr+   NPr/VB/J+ . . NPr/ISg+ VLPt J           . . NSg/VB/J/C/P NPr/VB+ NPr/ISg+ VL3 . NPr/ISg+ NPl/V3 D/P+ N🅪Sg/VB/J+ NSg/VB+ . .\n>\n#\n> “ Nevertheless he’s an   Oxford man       . ”\n# . R            NPr$ D/P+ NPr+   NPr/VB/J+ . .\n>\n#\n> “ Oxford , New    Mexico , ” snorted Tom     contemptuously , “ or    something like         that          . ”\n# . NPr+   . NSg/J+ NPr+   . . VP/J    NPr/VB+ R              . . NPr/C NSg/I/J+  NSg/VB/J/C/P NSg/I/C/Ddem+ . .\n>\n#\n> “ Listen , Tom     . If    you’re such  a   snob , why    did  you    invite him  to lunch   ? ” demanded\n# . NSg/VB . NPr/VB+ . NSg/C K      NSg/I D/P NSg  . NSg/VB VXPt ISgPl+ NSg/VB ISg+ P  N🅪Sg/VB . . VP/J\n> Jordan crossly .\n# NPr+   R       .\n>\n#\n> “ Daisy invited  him  ; she  knew him  before we   were     married  — God     knows where   ! ”\n# . NPr+  NSg/VP/J ISg+ . ISg+ VPt  ISg+ C/P    IPl+ NSg/VLPt NSg/VP/J . NPr/VB+ V3    NSg/R/C . .\n>\n#\n> We   were     all          irritable now       with the fading  ale   , and  aware of it       we   drove   for   a\n# IPl+ NSg/VLPt NSg/I/J/C/Dq J         NSg/J/R/C P    D+  Nᴹ/Vg/J N🅪Sg+ . VB/C VB/J  P  NPr/ISg+ IPl+ NSg/VPt R/C/P D/P\n> while      in        silence . Then      as    Doctor  T. J. Eckleburg’s faded eyes    came      into sight\n# NSg/VB/C/P NPr/J/R/P NSg/VB+ . NSg/J/R/C R/C/P NSg/VB+ ?  ?  ?           J     NPl/V3+ NSg/VPt/P P    N🅪Sg/VB+\n> down        the road    , I       remembered Gatsby’s caution  about gasoline .\n# N🅪Sg/VB/J/P D   N🅪Sg/J+ . ISg/#r+ VP/J       NPr$     N🅪Sg/VB+ J/P   Nᴹ       .\n>\n#\n> “ We’ve got enough to get    us       to town , ” said Tom     .\n# . K     VP  NSg/I  P  NSg/VB NPr/IPl+ P  NSg  . . VP/J NPr/VB+ .\n>\n#\n> “ But     there’s a    garage  right    here , ” objected Jordan . “ I       don’t want   to get    stalled\n# . NSg/C/P K       D/P+ NSg/VB+ NPr/VB/J J/R  . . VP/J     NPr+   . . ISg/#r+ VXB   NSg/VB P  NSg/VB VP/J\n> in        this   baking   heat   . ”\n# NPr/J/R/P I/Ddem Nᴹ/Vg/J+ Nᴹ/VB+ . .\n>\n#\n> Tom     threw on  both    brakes  impatiently , and  we   slid to an  abrupt   dusty spot      under\n# NPr/VB+ VPt   J/P I/C/Dq+ NPl/V3+ R           . VB/C IPl+ VP   P  D/P NSg/VB/J NPr/J NSg/VB/J+ NSg/J/P\n> Wilson’s sign    . After a    moment the proprietor emerged from the interior of his\n# NPr$     NSg/VB+ . P     D/P+ NSg+   D   NSg        VP/J    P    D   NSg/J    P  ISg/D$+\n> establishment and  gazed hollow   - eyed at    the car  .\n# NSg+          VB/C VP/J  NSg/VB/J . VP/J NSg/P D   NSg+ .\n>\n#\n> “ Let’s have    some      gas       ! ” cried Tom     roughly . “ What   do  you    think  we   stopped for   — to\n# . NSg$  NSg/VXB I/J/R/Dq+ NSg/VB/J+ . . VP/J  NPr/VB+ R       . . NSg/I+ VXB ISgPl+ NSg/VB IPl+ VP/J    R/C/P . P\n> admire the view    ? ”\n# VB     D+  NSg/VB+ . .\n>\n#\n> “ I’m sick     , ” said Wilson without moving  . “ Been     sick     all           day     . ”\n# . K   NSg/VB/J . . VP/J NPr+   C/P     Nᴹ/Vg/J . . NSg/VLPp NSg/VB/J NSg/I/J/C/Dq+ NPr🅪Sg+ . .\n>\n#\n> “ What’s the matter   ? ”\n# . K      D+  N🅪Sg/VB+ . .\n>\n#\n> “ I’m all          run      down        . ”\n# . K   NSg/I/J/C/Dq NSg/VBPp N🅪Sg/VB/J/P . .\n>\n#\n> “ Well       , shall I       help   myself ? ” Tom     demanded . “ You    sounded well       enough on  the\n# . NSg/VB/J/R . VXB   ISg/#r+ NSg/VB ISg+   . . NPr/VB+ VP/J     . . ISgPl+ VP/J    NSg/VB/J/R NSg/I  J/P D+\n> phone   . ”\n# NSg/VB+ . .\n>\n#\n> With an   effort   Wilson left     the shade   and  support of the doorway and  , breathing\n# P    D/P+ N🅪Sg/VB+ NPr+   NPr/VP/J D   N🅪Sg/VB VB/C N🅪Sg/VB P  D+  NSg+    VB/C . Nᴹ/Vg/J\n> hard     , unscrewed the cap    of the tank    . In        the sunlight his     face    was  green       .\n# N🅪Sg/J/R . VP/J      D   NPr/VB P  D   NSg/VB+ . NPr/J/R/P D+  NSg/VB+  ISg/D$+ NSg/VB+ VLPt NPr🅪Sg/VB/J .\n>\n#\n> “ I       didn’t mean     to interrupt your lunch    , ” he       said . “ But     I       need     money   pretty     bad      ,\n# . ISg/#r+ VXPt   NSg/VB/J P  NSg/VB    D$+  N🅪Sg/VB+ . . NPr/ISg+ VP/J . . NSg/C/P ISg/#r+ N🅪Sg/VXB N🅪Sg/J+ NSg/VB/J/R NSg/VB/J .\n> and  I       was  wondering what   you    were     going   to do  with your old    car  . ”\n# VB/C ISg/#r+ VLPt Nᴹ/Vg/J   NSg/I+ ISgPl+ NSg/VLPt Nᴹ/Vg/J P  VXB P    D$+  NSg/J+ NSg+ . .\n>\n#\n> “ How   do  you    like         this    one      ? ” inquired Tom     . “ I       bought it       last      week   . ”\n# . NSg/C VXB ISgPl+ NSg/VB/J/C/P I/Ddem+ NSg/I/J+ . . VP/J     NPr/VB+ . . ISg/#r+ NSg/VP NPr/ISg+ NSg/VB/J+ NSg/J+ . .\n>\n#\n> “ It’s a    nice  yellow   one      , ” said Wilson , as    he       strained at    the handle  .\n# . K    D/P+ NPr/J NSg/VB/J NSg/I/J+ . . VP/J NPr+   . R/C/P NPr/ISg+ VP/J     NSg/P D   NSg/VB+ .\n>\n#\n> “ Like         to buy    it       ? ”\n# . NSg/VB/J/C/P P  NSg/VB NPr/ISg+ . .\n>\n#\n> “ Big    chance    , ” Wilson smiled faintly . “ No       , but     I       could   make   some      money   on  the\n# . NSg/J+ NPr/VB/J+ . . NPr+   VP/J   R       . . NSg/Dq/P . NSg/C/P ISg/#r+ NSg/VXB NSg/VB I/J/R/Dq+ N🅪Sg/J+ J/P D\n> other    . ”\n# NSg/VB/J . .\n>\n#\n> “ What   do  you    want   money   for   , all          of a   sudden ? ”\n# . NSg/I+ VXB ISgPl+ NSg/VB N🅪Sg/J+ R/C/P . NSg/I/J/C/Dq P  D/P NSg/J  . .\n>\n#\n> “ I’ve been     here too long     . I       want   to get    away . My  wife      and  I       want   to go       West      . ”\n# . K    NSg/VLPp J/R  R   NPr/VB/J . ISg/#r+ NSg/VB P  NSg/VB VB/J . D$+ NSg/VB/J+ VB/C ISg/#r+ NSg/VB P  NSg/VB/J NPr/VB/J+ . .\n>\n#\n> “ Your wife      does    , ” exclaimed Tom     , startled .\n# . D$+  NSg/VB/J+ NPl/VX3 . . VP/J      NPr/VB+ . VP/J     .\n>\n#\n> “ She’s been     talking about it       for   ten years . ” He       rested for   a   moment against the\n# . K     NSg/VLPp Nᴹ/Vg/J J/P   NPr/ISg+ R/C/P NSg NPl+  . . NPr/ISg+ VP/J   R/C/P D/P NSg+   C/P     D+\n> pump    , shading his     eyes    . “ And  now       she’s going   whether she  wants  to or    not     . I’m\n# NSg/VB+ . Nᴹ/Vg/J ISg/D$+ NPl/V3+ . . VB/C NSg/J/R/C K     Nᴹ/Vg/J I/C     ISg+ NPl/V3 P  NPr/C NSg/R/C . K\n> going   to get    her     away . ”\n# Nᴹ/Vg/J P  NSg/VB ISg/D$+ VB/J . .\n>\n#\n> The coupé flashed by    us       with a   flurry of dust   and  the flash    of a   waving  hand    .\n# D   ?     VP/J    NSg/P NPr/IPl+ P    D/P NSg/VB P  Nᴹ/VB+ VB/C D   NSg/VB/J P  D/P Nᴹ/Vg/J NSg/VB+ .\n>\n#\n> “ What   do  I       owe you    ? ” demanded Tom     harshly .\n# . NSg/I+ VXB ISg/#r+ VB  ISgPl+ . . VP/J     NPr/VB+ R       .\n>\n#\n> “ I       just got wised up         to something funny the last     two days , ” remarked Wilson .\n# . ISg/#r+ J/R  VP  VP/J  NSg/VB/J/P P  NSg/I/J+  NSg/J D   NSg/VB/J NSg NPl+ . . VP/J     NPr+   .\n> “ That’s why    I       want   to get    away . That’s why    I       been     bothering you    about the car  . ”\n# . NSg$   NSg/VB ISg/#r+ NSg/VB P  NSg/VB VB/J . NSg$   NSg/VB ISg/#r+ NSg/VLPp Nᴹ/Vg/J   ISgPl+ J/P   D   NSg+ . .\n>\n#\n> “ What   do  I       owe you    ? ”\n# . NSg/I+ VXB ISg/#r+ VB  ISgPl+ . .\n>\n#\n> “ Dollar twenty . ”\n# . NSg+   NSg    . .\n>\n#\n> The relentless beating heat   was  beginning to confuse me       and  I       had a    bad       moment\n# D+  J          Nᴹ/Vg/J Nᴹ/VB+ VLPt NSg/Vg/J  P  NSg/VB  NPr/ISg+ VB/C ISg/#r+ VP  D/P+ NSg/VB/J+ NSg+\n> there before I       realized       that         so          far      his     suspicions hadn’t alighted on  Tom     . He\n# R+    C/P    ISg/#r+ VP/J/Comm/NoAm NSg/I/C/Ddem NSg/I/J/R/C NSg/VB/J ISg/D$+ NPl/V3     VPt    VP/J     J/P NPr/VB+ . NPr/ISg+\n> had discovered that         Myrtle had some     sort   of life     apart from him  in        another\n# VP  VP/J       NSg/I/C/Ddem NPr    VP  I/J/R/Dq NSg/VB P  N🅪Sg/VB+ J     P    ISg+ NPr/J/R/P I/D\n> world   , and  the shock   had made him  physically sick     . I       stared at    him  and  then      at\n# NSg/VB+ . VB/C D   N🅪Sg/J+ VP  VP   ISg+ R          NSg/VB/J . ISg/#r+ VP/J   NSg/P ISg+ VB/C NSg/J/R/C NSg/P\n> Tom     , who    had made a   parallel  discovery less       than an   hour before — and  it       occurred\n# NPr/VB+ . NPr/I+ VP  VP   D/P NSg/VB/J+ N🅪Sg+     VB/J/R/C/P C/P  D/P+ NSg+ C/P    . VB/C NPr/ISg+ VP\n> to me       that         there was  no       difference between men  , in        intelligence or    race     , so\n# P  NPr/ISg+ NSg/I/C/Ddem R+    VLPt NSg/Dq/P N🅪Sg/VB    NSg/P   NPl+ . NPr/J/R/P N🅪Sg         NPr/C N🅪Sg/VB+ . NSg/I/J/R/C\n> profound as    the difference between the sick     and  the well       . Wilson was  so          sick\n# NSg/VB/J R/C/P D+  N🅪Sg/VB+   NSg/P   D   NSg/VB/J VB/C D   NSg/VB/J/R . NPr+   VLPt NSg/I/J/R/C NSg/VB/J\n> that         he       looked guilty , unforgivably guilty — as    if    he       had just got some     poor     girl\n# NSg/I/C/Ddem NPr/ISg+ VP/J   NSg/J  . R            NSg/J  . R/C/P NSg/C NPr/ISg+ VP  J/R  VP  I/J/R/Dq NSg/VB/J NSg/VB+\n> with child   .\n# P    NSg/VB+ .\n>\n#\n> “ I’ll let     you    have    that         car  , ” said Tom     . “ I’ll send   it       over    to - morrow afternoon . ”\n# . K    NSg/VBP ISgPl+ NSg/VXB NSg/I/C/Ddem NSg+ . . VP/J NPr/VB+ . . K    NSg/VB NPr/ISg+ NSg/J/P P  . NPr/VB N🅪Sg+     . .\n>\n#\n> That          locality was  always vaguely disquieting , even       in        the broad glare    of\n# NSg/I/C/Ddem+ NSg      VLPt R      R       Nᴹ/Vg/J     . NSg/VB/J/R NPr/J/R/P D   NSg/J NSg/VB/J P\n> afternoon , and  now       I       turned my  head      as    though I       had been     warned of something\n# N🅪Sg+     . VB/C NSg/J/R/C ISg/#r+ VP/J   D$+ NPr/VB/J+ R/C/P C      ISg/#r+ VP  NSg/VLPp VP/J   P  NSg/I/J+\n> behind  . Over    the ashheaps the giant eyes   of Doctor  T. J. Eckleburg kept their\n# NSg/J/P . NSg/J/P D   ?        D   NSg/J NPl/V3 P  NSg/VB+ ?  ?  ?         VP   D$+\n> vigil  , but     I       perceived , after a   moment , that         other    eyes    were     regarding us       with\n# NSg/VB . NSg/C/P ISg/#r+ VP/J      . P     D/P NSg+   . NSg/I/C/Ddem NSg/VB/J NPl/V3+ NSg/VLPt Nᴹ/Vg/J   NPr/IPl+ P\n> peculiar intensity from less       than twenty feet away .\n# NSg/J    Nᴹ+       P    VB/J/R/C/P C/P  NSg    NPl+ VB/J .\n>\n#\n> In        one     of the windows   over    the garage  the curtains had been     moved aside a\n# NPr/J/R/P NSg/I/J P  D+  NPrPl/V3+ NSg/J/P D+  NSg/VB+ D+  NPl/V3+  VP  NSg/VLPp VP/J  NSg/J D/P\n> little     , and  Myrtle Wilson was  peering down        at    the car  . So          engrossed was  she  that\n# NPr/I/J/Dq . VB/C NPr    NPr+   VLPt Nᴹ/Vg/J N🅪Sg/VB/J/P NSg/P D   NSg+ . NSg/I/J/R/C VP/J      VLPt ISg+ NSg/I/C/Ddem\n> she  had no       consciousness of being        observed , and  one     emotion after another crept\n# ISg+ VP  NSg/Dq/P Nᴹ            P  N🅪Sg/VLg/J/C VP/J     . VB/C NSg/I/J N🅪Sg+   P     I/D     VP+\n> into her     face   like         objects into a   slowly developing picture . Her     expression was\n# P    ISg/D$+ NSg/VB NSg/VB/J/C/P NPl/V3+ P    D/P R      Nᴹ/Vg/J    NSg/VB+ . ISg/D$+ N🅪Sg+      VLPt\n> curiously familiar — it       was  an  expression I       had often seen    on  women’s faces   , but\n# R         NSg/J    . NPr/ISg+ VLPt D/P N🅪Sg       ISg/#r+ VP  R     NSg/VPp J/P NSg$    NPl/V3+ . NSg/C/P\n> on  Myrtle Wilson’s face    it       seemed purposeless and  inexplicable until I       realized\n# J/P NPr    NPr$     NSg/VB+ NPr/ISg+ VP/J   J           VB/C J            C/P   ISg/#r+ VP/J/Comm/NoAm\n> that         her     eyes    , wide  with jealous terror , were     fixed not     on  Tom     , but     on  Jordan\n# NSg/I/C/Ddem ISg/D$+ NPl/V3+ . NSg/J P    VB/J    N🅪Sg+  . NSg/VLPt VP/J  NSg/R/C J/P NPr/VB+ . NSg/C/P J/P NPr+\n> Baker , whom she  took to be       his     wife      .\n# NPr+  . I+   ISg+ VPt  P  NSg/VLXB ISg/D$+ NSg/VB/J+ .\n>\n#\n> There is  no       confusion like         the confusion of a    simple    mind    , and  as    we   drove   away\n# R+    VL3 NSg/Dq/P N🅪Sg/VB   NSg/VB/J/C/P D   N🅪Sg/VB   P  D/P+ NSg/VB/J+ NSg/VB+ . VB/C R/C/P IPl+ NSg/VPt VB/J\n> Tom     was  feeling   the hot      whips  of panic      . His     wife     and  his     mistress , until an   hour\n# NPr/VB+ VLPt N🅪Sg/Vg/J D   NSg/VB/J NPl/V3 P  N🅪Sg/VB/J+ . ISg/D$+ NSg/VB/J VB/C ISg/D$+ NSg/VB+  . C/P   D/P+ NSg+\n> ago secure and  inviolate , were     slipping precipitately from his     control  . Instinct\n# J/P VB/J   VB/C J         . NSg/VLPt NSg/Vg   R             P    ISg/D$+ N🅪Sg/VB+ . NSg/J+\n> made him  step    on  the accelerator with the double   purpose of overtaking Daisy and\n# VP   ISg+ NSg/VB+ J/P D   NSg+        P    D   NSg/VB/J N🅪Sg/VB P  Nᴹ/Vg/J    NPr+  VB/C\n> leaving Wilson behind  , and  we   sped   along toward Astoria at    fifty miles  an  hour ,\n# Nᴹ/Vg/J NPr+   NSg/J/P . VB/C IPl+ NSg/VP P     J/P    NPr     NSg/P NSg   NPrPl+ D/P NSg+ .\n> until , among the spidery girders of the elevated , we   came      in        sight   of the\n# C/P   . P     D   J       NPl     P  D   VP/J+    . IPl+ NSg/VPt/P NPr/J/R/P N🅪Sg/VB P  D\n> easy     - going   blue      coupé .\n# NSg/VB/J . Nᴹ/Vg/J N🅪Sg/VB/J ?     .\n>\n#\n> “ Those  big   movies around Fiftieth Street    are cool     , ” suggested Jordan . “ I       love\n# . I/Ddem NSg/J NPl+   J/P    NSg/J    NSg/VB/J+ VLB NSg/VB/J . . VP/J      NPr+   . . ISg/#r+ NPr🅪Sg/VB\n> New   York on  summer     afternoons when    every one’s away . There’s something very\n# NSg/J NPr+ J/P NPr🅪Sg/VB+ NPl        NSg/I/C Dq    NSg$  VB/J . K       NSg/I/J+  J/R\n> sensuous about it       — overripe , as    if    all          sorts  of funny fruits  were     going   to fall\n# J        J/P   NPr/ISg+ . NSg/J    . R/C/P NSg/C NSg/I/J/C/Dq NPl/V3 P  NSg/J NPl/V3+ NSg/VLPt Nᴹ/Vg/J P  N🅪Sg/VB\n> into your hands   . ”\n# P    D$+  NPl/V3+ . .\n>\n#\n> The word    “ sensuous ” had the effect of further disquieting Tom     , but     before he\n# D+  NSg/VB+ . J        . VP  D   NSg/VB P  VB/JC   Nᴹ/Vg/J     NPr/VB+ . NSg/C/P C/P    NPr/ISg+\n> could   invent a   protest  the coupé came      to a   stop    , and  Daisy signalled us       to draw\n# NSg/VXB VB     D/P N🅪Sg/VB+ D   ?     NSg/VPt/P P  D/P NSg/VB+ . VB/C NPr+  VP/Comm   NPr/IPl+ P  NSg/VB\n> up         alongside .\n# NSg/VB/J/P P         .\n>\n#\n> “ Where   are we   going   ? ” she  cried .\n# . NSg/R/C VLB IPl+ Nᴹ/Vg/J . . ISg+ VP/J  .\n>\n#\n> “ How   about the movies ? ”\n# . NSg/C J/P   D+  NPl+   . .\n>\n#\n> “ It’s so          hot      , ” she  complained . “ You    go       . We'll ride    around and  meet     you    after . ”\n# . K    NSg/I/J/R/C NSg/VB/J . . ISg+ VP/J       . . ISgPl+ NSg/VB/J . K     NSg/VB+ J/P    VB/C NSg/VB/J ISgPl+ P     . .\n> With an   effort   her     wit        rose      faintly , “ We’ll meet     you    on  some     corner  . I'll be       the\n# P    D/P+ N🅪Sg/VB+ ISg/D$+ N🅪Sg/VB/P+ NPr/VPt/J R       . . K     NSg/VB/J ISgPl+ J/P I/J/R/Dq NSg/VB+ . K    NSg/VLXB D\n> man       smoking  two  cigarettes . ”\n# NPr/VB/J+ Nᴹ/Vg/J+ NSg+ NPl/V3+    . .\n>\n#\n> “ We   can’t argue about it       here , ” Tom     said impatiently , as    a   truck   gave out          a\n# . IPl+ VXB   VB    J/P   NPr/ISg+ J/R  . . NPr/VB+ VP/J R           . R/C/P D/P NSg/VB+ VPt  NSg/VB/J/R/P D/P\n> cursing whistle behind  us       . “ You    follow me       to the south     side     of Central Park    , in\n# Nᴹ/Vg/J NSg/VB  NSg/J/P NPr/IPl+ . . ISgPl+ NSg/VB NPr/ISg+ P  D   NPr/VB/J+ NSg/VB/J P  NPr/J+  NPr/VB+ . NPr/J/R/P\n> front    of the Plaza . ”\n# NSg/VB/J P  D+  NSg+  . .\n>\n#\n> Several times   he       turned his     head      and  looked back     for   their car  , and  if    the\n# J/Dq+   NPl/V3+ NPr/ISg+ VP/J   ISg/D$+ NPr/VB/J+ VB/C VP/J   NSg/VB/J R/C/P D$+   NSg+ . VB/C NSg/C D+\n> traffic  delayed them     he       slowed up         until they came      into sight    . I       think  he       was\n# Nᴹ/VB/J+ VP/J    NSg/IPl+ NPr/ISg+ VP/J   NSg/VB/J/P C/P   IPl+ NSg/VPt/P P    N🅪Sg/VB+ . ISg/#r+ NSg/VB NPr/ISg+ VLPt\n> afraid they would dart   down        a    side      street    and  out          of his     life     forever .\n# J      IPl+ VXB   NSg/VB N🅪Sg/VB/J/P D/P+ NSg/VB/J+ NSg/VB/J+ VB/C NSg/VB/J/R/P P  ISg/D$+ N🅪Sg/VB+ NSg/J   .\n>\n#\n> But     they didn’t . And  we   all          took the less       explicable step   of engaging the parlor\n# NSg/C/P IPl+ VXPt   . VB/C IPl+ NSg/I/J/C/Dq VPt  D   VB/J/R/C/P J          NSg/VB P  Nᴹ/Vg/J  D   NSg\n> of a   suite in        the Plaza Hotel .\n# P  D/P NSg+  NPr/J/R/P D   NSg+  NSg+  .\n>\n#\n> The prolonged and  tumultuous argument that          ended by    herding  us       into that         room\n# D   VP/J      VB/C J          N🅪Sg/VB+ NSg/I/C/Ddem+ VP/J  NSg/P Nᴹ/Vg/J+ NPr/IPl+ P    NSg/I/C/Ddem N🅪Sg/VB/J+\n> eludes me       , though I       have    a   sharp    physical memory that          , in        the course of it       , my\n# V3     NPr/ISg+ . C      ISg/#r+ NSg/VXB D/P NPr/VB/J NSg/J    N🅪Sg+  NSg/I/C/Ddem+ . NPr/J/R/P D   NSg/VB P  NPr/ISg+ . D$+\n> underwear kept climbing like         a   damp    snake   around my  legs    and  intermittent beads\n# Nᴹ+       VP   Nᴹ/Vg/J  NSg/VB/J/C/P D/P Nᴹ/VB/J NPr/VB+ J/P    D$+ NPl/V3+ VB/C NSg/J        NPl/V3\n> of sweat    raced cool     across my  back     . The notion originated with Daisy’s\n# P  N🅪Sg/VB+ VP/J  NSg/VB/J NSg/P  D$+ NSg/VB/J . D+  NSg+   VP/J       P    NPr$\n> suggestion that          we   hire   five bathrooms and  take   cold  baths   , and  then      assumed\n# N🅪Sg+      NSg/I/C/Ddem+ IPl+ NSg/VB NSg  NPl/V3+   VB/C NSg/VB NSg/J NSg/VB+ . VB/C NSg/J/R/C VP/J\n> more         tangible form     as    “ a   place    to have    a   mint     julep . ” Each of us       said over    and\n# NPr/I/J/R/Dq NSg/J    N🅪Sg/VB+ R/C/P . D/P N🅪Sg/VB+ P  NSg/VXB D/P NSg/VB/J NSg   . . Dq   P  NPr/IPl+ VP/J NSg/J/P VB/C\n> over    that         it       was  a   “ crazy idea ” — we   all           talked at    once  to a   baffled clerk   and\n# NSg/J/P NSg/I/C/Ddem NPr/ISg+ VLPt D/P . NSg/J NSg  . . IPl+ NSg/I/J/C/Dq+ VP/J+  NSg/P NSg/C P  D/P VP/J    NSg/VB+ VB/C\n> thought , or    pretended to think  , that         we   were     being        very funny . . .\n# N🅪Sg/VP . NPr/C VP/J      P  NSg/VB . NSg/I/C/Ddem IPl+ NSg/VLPt N🅪Sg/VLg/J/C J/R  NSg/J . . .\n>\n#\n> The room       was  large and  stifling , and  , though it       was  already four o’clock ,\n# D+  N🅪Sg/VB/J+ VLPt NSg/J VB/C Nᴹ/Vg/J  . VB/C . C      NPr/ISg+ VLPt R       NSg  R       .\n> opening the windows   admitted only  a   gust   of hot      shrubbery from the Park    . Daisy\n# Nᴹ/Vg/J D   NPrPl/V3+ VP/J     J/R/C D/P NSg/VB P  NSg/VB/J NSg       P    D   NPr/VB+ . NPr+\n> went    to the mirror  and  stood with her     back     to us       , fixing  her     hair     .\n# NSg/VPt P  D+  NSg/VB+ VB/C VP    P    ISg/D$+ NSg/VB/J P  NPr/IPl+ . Nᴹ/Vg/J ISg/D$+ N🅪Sg/VB+ .\n>\n#\n> “ It’s a    swell     suite , ” whispered Jordan respectfully , and  every one      laughed .\n# . K    D/P+ NSg/VB/J+ NSg+  . . VP/J      NPr+   R            . VB/C Dq    NSg/I/J+ VP/J    .\n>\n#\n> “ Open     another window  , ” commanded Daisy , without turning around .\n# . NSg/VB/J I/D+    NSg/VB+ . . VP/J      NPr+  . C/P     Nᴹ/Vg/J J/P    .\n>\n#\n> “ There aren’t any    more         . ”\n# . R+    VB     I/R/Dq NPr/I/J/R/Dq . .\n>\n#\n> “ Well       , we’d better     telephone for   an  axe        — — — ”\n# . NSg/VB/J/R . K    NSg/VXB/JC NSg/VB+   R/C/P D/P NSg/VB/Br+ . . . .\n>\n#\n> “ The thing to do  is  to forget about the heat   , ” said Tom     impatiently . “ You    make\n# . D+  NSg+  P  VXB VL3 P  VB     J/P   D+  Nᴹ/VB+ . . VP/J NPr/VB+ R           . . ISgPl+ NSg/VB\n> it       ten  times   worse     by    crabbing about it       . ”\n# NPr/ISg+ NSg+ NPl/V3+ NSg/VB/JC NSg/P NSg/Vg   J/P   NPr/ISg+ . .\n>\n#\n> He       unrolled the bottle of whiskey from the towel   and  put     it       on  the table   .\n# NPr/ISg+ VP/J     D   NSg/VB P  N🅪Sg    P    D   NSg/VB+ VB/C NSg/VBP NPr/ISg+ J/P D   NSg/VB+ .\n>\n#\n> “ Why    not     let     her     alone , old    sport   ? ” remarked Gatsby . “ You’re the one      that          wanted\n# . NSg/VB NSg/R/C NSg/VBP ISg/D$+ J     . NSg/J+ NSg/VB+ . . VP/J     NPr    . . K      D+  NSg/I/J+ NSg/I/C/Ddem+ VP/J\n> to come       to town . ”\n# P  NSg/VBPp/P P  NSg  . .\n>\n#\n> There was  a   moment of silence . The telephone book    slipped from its     nail    and\n# R+    VLPt D/P NSg    P  NSg/VB+ . D+  NSg/VB+   NSg/VB+ VP/J    P    ISg/D$+ NSg/VB+ VB/C\n> splashed to the floor   , whereupon Jordan whispered , “ Excuse  me       ” — but     this   time       no\n# VP/J     P  D+  NSg/VB+ . C         NPr+   VP/J      . . NSg/VB+ NPr/ISg+ . . NSg/C/P I/Ddem N🅪Sg/VB/J+ NSg/Dq/P\n> one      laughed .\n# NSg/I/J+ VP/J    .\n>\n#\n> “ I’ll pick   it       up         , ” I       offered .\n# . K    NSg/VB NPr/ISg+ NSg/VB/J/P . . ISg/#r+ VP/J    .\n>\n#\n> “ I’ve got it       . ” Gatsby examined the parted string  , muttered “ Hum    ! ” in        an\n# . K    VP  NPr/ISg+ . . NPr    VP/J     D   VP/J   NSg/VB+ . VP/J     . NSg/VB . . NPr/J/R/P D/P+\n> interested way    , and  tossed the book    on  a    chair   .\n# VP/J+      NSg/J+ . VB/C VP/J   D   NSg/VB+ J/P D/P+ NSg/VB+ .\n>\n#\n> “ That’s a   great expression of yours , isn’t   it       ? ” said Tom     sharply .\n# . NSg$   D/P NSg/J N🅪Sg       P  I+    . NSg/VX3 NPr/ISg+ . . VP/J NPr/VB+ R       .\n>\n#\n> “ What   is  ? ”\n# . NSg/I+ VL3 . .\n>\n#\n> “ All          this    ‘          old   sport   ’ business . Where’d you    pick   that          up         ? ”\n# . NSg/I/J/C/Dq I/Ddem+ Unlintable NSg/J NSg/VB+ . N🅪Sg/J+  . K       ISgPl+ NSg/VB NSg/I/C/Ddem+ NSg/VB/J/P . .\n>\n#\n> “ Now       see    here , Tom     , ” said Daisy , turning around from the mirror  , “ if    you’re\n# . NSg/J/R/C NSg/VB J/R  . NPr/VB+ . . VP/J NPr+  . Nᴹ/Vg/J J/P    P    D+  NSg/VB+ . . NSg/C K\n> going   to make   personal remarks I       won’t stay     here a   minute    . Call   up         and  order\n# Nᴹ/Vg/J P  NSg/VB NSg/J+   NPl/V3+ ISg/#r+ VXB   NSg/VB/J J/R  D/P NSg/VB/J+ . NSg/VB NSg/VB/J/P VB/C N🅪Sg/VB\n> some      ice        for   the mint     julep . ”\n# I/J/R/Dq+ NPr🅪Sg/VB+ R/C/P D   NSg/VB/J NSg   . .\n>\n#\n> As    Tom     took up         the receiver the compressed heat   exploded into sound      and  we   were\n# R/C/P NPr/VB+ VPt  NSg/VB/J/P D+  NSg+     D   VP/J       Nᴹ/VB+ VP/J     P    N🅪Sg/VB/J+ VB/C IPl+ NSg/VLPt\n> listening to the portentous chords of Mendelssohn’s Wedding March   from the\n# Nᴹ/Vg/J   P  D   J          NPl/V3 P  NPr$          NSg/Vg+ NPr/VB+ P    D\n> ballroom below .\n# NSg/VB+  P     .\n>\n#\n> “ Imagine marrying anybody in        this    heat   ! ” cried Jordan dismally .\n# . NSg/VB  Nᴹ/Vg/J  NSg/I+  NPr/J/R/P I/Ddem+ Nᴹ/VB+ . . VP/J  NPr+   R        .\n>\n#\n> “ Still      — I       was  married  in        the middle   of June , ” Daisy remembered , “ Louisville in\n# . NSg/VB/J/R . ISg/#r+ VLPt NSg/VP/J NPr/J/R/P D   NSg/VB/J P  NPr+ . . NPr+  VP/J       . . NPr        NPr/J/R/P\n> June ! Somebody fainted . Who    was  it       fainted , Tom     ? ”\n# NPr+ . NSg/I+   VP/J    . NPr/I+ VLPt NPr/ISg+ VP/J    . NPr/VB+ . .\n>\n#\n> “ Biloxi , ” he       answered shortly .\n# . ?      . . NPr/ISg+ VP/J     R       .\n>\n#\n> “ A    man       named Biloxi . ‘          Blocks  ’ Biloxi , and  he       made boxes   — that’s a    fact — and  he       was\n# . D/P+ NPr/VB/J+ VP/J  ?      . Unlintable NPl/V3+ . ?      . VB/C NPr/ISg+ VP   NPl/V3+ . NSg$   D/P+ NSg+ . VB/C NPr/ISg+ VLPt\n> from Biloxi , Tennessee . ”\n# P    ?      . NPr+      . .\n>\n#\n> “ They carried him  into my  house   , ” appended Jordan , “ because we   lived just two\n# . IPl+ VP/J    ISg+ P    D$+ NPr/VB+ . . VP/J     NPr+   . . C/P     IPl+ VP/J  J/R  NSg\n> doors   from the church     . And  he       stayed three weeks  , until Daddy     told him  he       had to\n# NPl/V3+ P    D   NPr🅪Sg/VB+ . VB/C NPr/ISg+ VP/J   NSg+  NPrPl+ . C/P   NSg/VB/J+ VP   ISg+ NPr/ISg+ VP  P\n> get    out          . The day     after he       left     Daddy     died . ” After a    moment she  added . ‘          ‘          There\n# NSg/VB NSg/VB/J/R/P . D+  NPr🅪Sg+ P     NPr/ISg+ NPr/VP/J NSg/VB/J+ VP/J . . P     D/P+ NSg+   ISg+ VP/J  . Unlintable Unlintable R+\n> wasn’t any    connection . ”\n# VPt    I/R/Dq N🅪Sg+      . .\n>\n#\n> “ I       used to know a    Bill    Biloxi from Memphis , ” I       remarked .\n# . ISg/#r+ VP/J P  VB   D/P+ NPr/VB+ ?      P    NPr+    . . ISg/#r+ VP/J     .\n>\n#\n> “ That          was  his     cousin  . I       knew his     whole  family  history before he       left     . He       gave me\n# . NSg/I/C/Ddem+ VLPt ISg/D$+ NSg/VB+ . ISg/#r+ VPt  ISg/D$+ NSg/J+ N🅪Sg/J+ N🅪Sg+   C/P    NPr/ISg+ NPr/VP/J . NPr/ISg+ VPt  NPr/ISg+\n> an   aluminum putter that         I       use     to - day     . ”\n# D/P+ Nᴹ/NoAm+ NSg/VB NSg/I/C/Ddem ISg/#r+ N🅪Sg/VB P  . NPr🅪Sg+ . .\n>\n#\n> The music      had died down        as    the ceremony began and  now       a    long      cheer   floated in        at\n# D+  N🅪Sg/VB/J+ VP  VP/J N🅪Sg/VB/J/P R/C/P D+  N🅪Sg+    VPt   VB/C NSg/J/R/C D/P+ NPr/VB/J+ NSg/VB+ VP/J    NPr/J/R/P NSg/P\n> the window  , followed by    intermittent cries  of “ Yea   — ea  — ea  ! ” and  finally by    a\n# D+  NSg/VB+ . VP/J     NSg/P NSg/J        NPl/V3 P  . NSg/C . NSg . NSg . . VB/C R       NSg/P D/P\n> burst  of jazz    as    the dancing began .\n# NSg/VB P  NSg/VB+ R/C/P D   Nᴹ/Vg/J VPt   .\n>\n#\n> “ We're getting old   , ” said Daisy . “ lf we   were     young    we’d rise   and  dance    . ”\n# . K     NSg/Vg  NSg/J . . VP/J NPr+  . . ?  IPl+ NSg/VLPt NPr/VB/J K    NSg/VB VB/C N🅪Sg/VB+ . .\n>\n#\n> “ Remember Biloxi , ” Jordan warned her     . ‘          ‘          Where’d you    know him  , Tom     ? ”\n# . NSg/VB   ?      . . NPr+   VP/J   ISg/D$+ . Unlintable Unlintable K       ISgPl+ VB   ISg+ . NPr/VB+ . .\n>\n#\n> “ Biloxi ? ” He       concentrated with an   effort   . “ I       didn’t know him  . He       was  a   friend   of\n# . ?      . . NPr/ISg+ VP/J         P    D/P+ N🅪Sg/VB+ . . ISg/#r+ VXPt   VB   ISg+ . NPr/ISg+ VLPt D/P NPr/VB/J P\n> Daisy’s . ”\n# NPr$    . .\n>\n#\n> “ He       was  not     , ” she  denied . “ I’d never seen    him  before . He       came      down        in        the\n# . NPr/ISg+ VLPt NSg/R/C . . ISg+ VP/J   . . K   R     NSg/VPp ISg+ C/P    . NPr/ISg+ NSg/VPt/P N🅪Sg/VB/J/P NPr/J/R/P D+\n> private   car  . ”\n# NSg/VB/J+ NSg+ . .\n>\n#\n> “ Well       , he       said he       knew you    . He       said he       was  raised in        Louisville . Asa Bird\n# . NSg/VB/J/R . NPr/ISg+ VP/J NPr/ISg+ VPt  ISgPl+ . NPr/ISg+ VP/J NPr/ISg+ VLPt VP/J   NPr/J/R/P NPr        . ?   NPr/VB/J+\n> brought him  around at    the last     minute    and  asked if    we   had room       for   him  . ”\n# VP      ISg+ J/P    NSg/P D   NSg/VB/J NSg/VB/J+ VB/C VP/J  NSg/C IPl+ VP  N🅪Sg/VB/J+ R/C/P ISg+ . .\n>\n#\n> Jordan smiled .\n# NPr+   VP/J   .\n>\n#\n> “ He       was  probably bumming his     way    home      . He       told me       he       was  president of your class\n# . NPr/ISg+ VLPt R        Vg      ISg/D$+ NSg/J+ NSg/VB/J+ . NPr/ISg+ VP   NPr/ISg+ NPr/ISg+ VLPt NSg/VB    P  D$+  N🅪Sg/VB/J+\n> at    Yale . ”\n# NSg/P NPr+ . .\n>\n#\n> Tom     and  I       looked at    each other    blankly .\n# NPr/VB+ VB/C ISg/#r+ VP/J   NSg/P Dq   NSg/VB/J R       .\n>\n#\n> “ Biloxi ? ”\n# . ?      . .\n>\n#\n> “ First  place    , we   didn’t have    any    president — — — ”\n# . NSg/J+ N🅪Sg/VB+ . IPl+ VXPt   NSg/VXB I/R/Dq NSg/VB+   . . . .\n>\n#\n> Gatsby’s foot    beat      a   short      , restless tattoo and  Tom     eyed him  suddenly .\n# NPr$     NSg/VB+ N🅪Sg/VB/J D/P NPr/VB/J/P . J        NSg/VB VB/C NPr/VB+ VP/J ISg+ R        .\n>\n#\n> “ By    the way    , Mr   . Gatsby , I       understand you’re an  Oxford man       . ”\n# . NSg/P D   NSg/J+ . NSg+ . NPr    . ISg/#r+ VB         K      D/P NPr+   NPr/VB/J+ . .\n>\n#\n> “ Not     exactly . ”\n# . NSg/R/C R       . .\n>\n#\n> “ Oh     , yes    , I       understand you    went    to Oxford . ”\n# . NPr/VB . NPl/VB . ISg/#r+ VB         ISgPl+ NSg/VPt P  NPr+   . .\n>\n#\n> “ Yes    — I       went    there . ”\n# . NPl/VB . ISg/#r+ NSg/VPt R     . .\n>\n#\n> A    pause   . Then      Tom’s voice   , incredulous and  insulting :\n# D/P+ NSg/VB+ . NSg/J/R/C NPr$  NSg/VB+ . J           VB/C Nᴹ/Vg/J   .\n>\n#\n> “ You    must    have    gone    there about the time       Biloxi went    to New    Haven   . ”\n# . ISgPl+ NSg/VXB NSg/VXB VPp/J/P R     J/P   D+  N🅪Sg/VB/J+ ?      NSg/VPt P  NSg/J+ NSg/VB+ . .\n>\n#\n> Another pause   . A    waiter  knocked and  came      in        with crushed mint     and  ice        but     the\n# I/D+    NSg/VB+ . D/P+ NSg/VB+ VP/J    VB/C NSg/VPt/P NPr/J/R/P P    VP/J    NSg/VB/J VB/C NPr🅪Sg/VB+ NSg/C/P D\n> silence was  unbroken by    his     “ thank  you    ” and  the soft  closing of the door    . This\n# NSg/VB+ VLPt J        NSg/P ISg/D$+ . NSg/VB ISgPl+ . VB/C D   NSg/J Nᴹ/Vg/J P  D   NSg/VB+ . I/Ddem+\n> tremendous detail     was  to be       cleared up         at    last     .\n# J+         N🅪Sg/VB/J+ VLPt P  NSg/VLXB VP/J    NSg/VB/J/P NSg/P NSg/VB/J .\n>\n#\n> “ I       told you    I       went    there , ” said Gatsby .\n# . ISg/#r+ VP   ISgPl+ ISg/#r+ NSg/VPt R     . . VP/J NPr    .\n>\n#\n> “ I       heard you    , but     I’d like         to know when    . ”\n# . ISg/#r+ VP/J  ISgPl+ . NSg/C/P K   NSg/VB/J/C/P P  VB   NSg/I/C . .\n>\n#\n> “ It       was  in        nineteen - nineteen , I       only  stayed five months . That’s why    I       can’t\n# . NPr/ISg+ VLPt NPr/J/R/P NSg      . NSg      . ISg/#r+ J/R/C VP/J   NSg+ NPl+   . NSg$   NSg/VB ISg/#r+ VXB\n> really call   myself an  Oxford man       . ”\n# R      NSg/VB ISg+   D/P NPr+   NPr/VB/J+ . .\n>\n#\n> Tom     glanced around to see    if    we   mirrored his     unbelief . But     we   were     all          looking\n# NPr/VB+ VP/J    J/P    P  NSg/VB NSg/C IPl+ VP/J+    ISg/D$+ N🅪Sg     . NSg/C/P IPl+ NSg/VLPt NSg/I/J/C/Dq Nᴹ/Vg/J\n> at    Gatsby .\n# NSg/P NPr    .\n>\n#\n> “ It       was  an  opportunity they gave to some     of the officers after the armistice , ”\n# . NPr/ISg+ VLPt D/P N🅪Sg        IPl+ VPt  P  I/J/R/Dq P  D+  NPl/V3+  P     D   NPr🅪Sg    . .\n> he       continued . “ We   could   go       to any    of the universities in        England or    France . ”\n# NPr/ISg+ VP/J      . . IPl+ NSg/VXB NSg/VB/J P  I/R/Dq P  D   NPl+         NPr/J/R/P NPr     NPr/C NPr+   . .\n>\n#\n> I       wanted to get    up         and  slap      him  on  the back     . I       had one     of those  renewals of\n# ISg/#r+ VP/J   P  NSg/VB NSg/VB/J/P VB/C NSg/VB/J+ ISg+ J/P D   NSg/VB/J . ISg/#r+ VP  NSg/I/J P  I/Ddem NPl      P\n> complete faith   in        him  that          I’d experienced before .\n# NSg/VB/J NPr🅪Sg+ NPr/J/R/P ISg+ NSg/I/C/Ddem+ K   VP/J        C/P    .\n>\n#\n> Daisy rose      , smiling faintly , and  went    to the table   .\n# NPr+  NPr/VPt/J . Nᴹ/Vg/J R       . VB/C NSg/VPt P  D+  NSg/VB+ .\n>\n#\n> “ Open     the whiskey , Tom     , ” she  ordered , ‘          ‘          and  I'll make   you    a   mint     julep . Then      you\n# . NSg/VB/J D   N🅪Sg    . NPr/VB+ . . ISg+ VP/J    . Unlintable Unlintable VB/C K    NSg/VB ISgPl+ D/P NSg/VB/J NSg   . NSg/J/R/C ISgPl+\n> won’t seem so          stupid to yourself . . . . Look   at    the mint     ! ”\n# VXB   VB   NSg/I/J/R/C NSg/J  P  ISg+     . . . . NSg/VB NSg/P D   NSg/VB/J . .\n>\n#\n> “ Wait   a    minute    , ” snapped Tom     , “ I       want   to ask    Mr   . Gatsby one      more         question . ”\n# . NSg/VB D/P+ NSg/VB/J+ . . VP      NPr/VB+ . . ISg/#r+ NSg/VB P  NSg/VB NSg+ . NPr    NSg/I/J+ NPr/I/J/R/Dq NSg/VB+  . .\n>\n#\n> “ Go       on  , ” Gatsby said politely .\n# . NSg/VB/J J/P . . NPr    VP/J R        .\n>\n#\n> “ What   kind  of a    row     are you    trying  to cause     in        my  house   anyhow ? ”\n# . NSg/I+ NSg/J P  D/P+ NSg/VB+ VLB ISgPl+ Nᴹ/Vg/J P  N🅪Sg/VB/C NPr/J/R/P D$+ NPr/VB+ J      . .\n>\n#\n> They were     out          in        the open     at    last     and  Gatsby was  content    .\n# IPl+ NSg/VLPt NSg/VB/J/R/P NPr/J/R/P D   NSg/VB/J NSg/P NSg/VB/J VB/C NPr    VLPt N🅪Sg/VB/J+ .\n>\n#\n> “ He       isn’t   causing a   row     , ” Daisy looked desperately from one     to the other    .\n# . NPr/ISg+ NSg/VX3 Nᴹ/Vg/J D/P NSg/VB+ . . NPr+  VP/J   R           P    NSg/I/J P  D   NSg/VB/J .\n> “ You’re causing a   row     . Please have    a   little     self        - control  . ”\n# . K      Nᴹ/Vg/J D/P NSg/VB+ . VB     NSg/VXB D/P NPr/I/J/Dq NSg/I/VB/J+ . N🅪Sg/VB+ . .\n>\n#\n> “ Self        - control  ! ” repeated Tom     incredulously . “ I       suppose the latest  thing is  to\n# . NSg/I/VB/J+ . N🅪Sg/VB+ . . VP/J     NPr/VB+ R             . . ISg/#r+ VB      D+  NSg/JS+ NSg+  VL3 P\n> sit    back     and  let     Mr   . Nobody from Nowhere make   love      to your wife      . Well       , if    that’s\n# NSg/VB NSg/VB/J VB/C NSg/VBP NSg+ . NSg/I+ P    NSg/J   NSg/VB NPr🅪Sg/VB P  D$+  NSg/VB/J+ . NSg/VB/J/R . NSg/C NSg$\n> the idea you    can     count  me       out          . . . . Nowadays people  begin  by    sneering at    family\n# D+  NSg+ ISgPl+ NPr/VXB NSg/VB NPr/ISg+ NSg/VB/J/R/P . . . . NSg      NPl/VB+ NSg/VB NSg/P Nᴹ/Vg/J  NSg/P N🅪Sg/J+\n> life    and  family  institutions , and  next    they’ll throw  everything overboard and\n# N🅪Sg/VB VB/C N🅪Sg/J+ +            . VB/C NSg/J/P K       NSg/VB NSg/I/VB+  VB/J      VB/C\n> have    intermarriage between black     and  white       . ”\n# NSg/VXB N🅪Sg          NSg/P   N🅪Sg/VB/J VB/C NPr🅪Sg/VB/J . .\n>\n#\n> Flushed with his     impassioned gibberish , he       saw     himself standing alone on  the\n# VP/J    P    ISg/D$+ J           NSg/J+    . NPr/ISg+ NSg/VPt ISg+    Nᴹ/Vg/J  J     J/P D\n> last     barrier of civilization .\n# NSg/VB/J NSg/VB  P  NPr🅪Sg+      .\n>\n#\n> “ We’re all          white       here , ” murmured Jordan .\n# . K     NSg/I/J/C/Dq NPr🅪Sg/VB/J J/R  . . VP/J     NPr+   .\n>\n#\n> “ I       know I’m not     very popular . I       don’t give   big   parties . I       suppose you’ve got to\n# . ISg/#r+ VB   K   NSg/R/C J/R  NSg/J   . ISg/#r+ VXB   NSg/VB NSg/J NPl/V3+ . ISg/#r+ VB      K      VP  P\n> make   your house   into a   pigsty in        order    to have    any    friends   — in        the modern world   . ”\n# NSg/VB D$+  NPr/VB+ P    D/P NSg+   NPr/J/R/P N🅪Sg/VB+ P  NSg/VXB I/R/Dq NPrPl/V3+ . NPr/J/R/P D   NSg/J  NSg/VB+ . .\n>\n#\n> Angry as    I       was  , as    we   all          were     , I       was  tempted to laugh  whenever he       opened his\n# VB/J  R/C/P ISg/#r+ VLPt . R/C/P IPl+ NSg/I/J/C/Dq NSg/VLPt . ISg/#r+ VLPt VP/J    P  NSg/VB C        NPr/ISg+ VP/J   ISg/D$+\n> mouth   . The transition from libertine to prig   was  so          complete .\n# NSg/VB+ . D+  NSg/VB+    P    NSg/J     P  NSg/VB VLPt NSg/I/J/R/C NSg/VB/J .\n>\n#\n> “ I’ve got something to tell   you    , old   sport   — ” began Gatsby . But     Daisy guessed at\n# . K    VP  NSg/I/J+  P  NPr/VB ISgPl+ . NSg/J NSg/VB+ . . VPt   NPr    . NSg/C/P NPr+  VP/J    NSg/P\n> his     intention .\n# ISg/D$+ NSg/VB+   .\n>\n#\n> “ Please don’t ! ” she  interrupted helplessly . “ Please let’s all          go       home      . Why    don’t\n# . VB     VXB   . . ISg+ VP/J        R          . . VB     NSg$  NSg/I/J/C/Dq NSg/VB/J NSg/VB/J+ . NSg/VB VXB\n> we   all          go       home      ? ”\n# IPl+ NSg/I/J/C/Dq NSg/VB/J NSg/VB/J+ . .\n>\n#\n> “ That’s a    good     idea . ” I       got up         . “ Come       on  , Tom     . Nobody wants  a    drink   . ”\n# . NSg$   D/P+ NPr/VB/J NSg+ . . ISg/#r+ VP  NSg/VB/J/P . . NSg/VBPp/P J/P . NPr/VB+ . NSg/I+ NPl/V3 D/P+ NSg/VB+ . .\n>\n#\n> “ I       want   to know what   Mr   . Gatsby has to tell   me       . ”\n# . ISg/#r+ NSg/VB P  VB   NSg/I+ NSg+ . NPr    V3  P  NPr/VB NPr/ISg+ . .\n>\n#\n> “ Your wife      doesn’t love      you    , ” said Gatsby . ‘          ‘          She’s never loved you    . She  loves\n# . D$+  NSg/VB/J+ VX3     NPr🅪Sg/VB ISgPl+ . . VP/J NPr    . Unlintable Unlintable K     R     VP/J  ISgPl+ . ISg+ NPl/V3\n> me       . ”\n# NPr/ISg+ . .\n>\n#\n> “ You    must    be       crazy ! ” exclaimed Tom     automatically .\n# . ISgPl+ NSg/VXB NSg/VLXB NSg/J . . VP/J      NPr/VB+ R             .\n>\n#\n> Gatsby sprang to his     feet , vivid with excitement .\n# NPr    VB     P  ISg/D$+ NPl+ . NSg/J P    NSg+       .\n>\n#\n> “ She  never loved you    , do  you    hear ? ” he       cried . “ She  only  married  you    because I\n# . ISg+ R     VP/J  ISgPl+ . VXB ISgPl+ VB   . . NPr/ISg+ VP/J  . . ISg+ J/R/C NSg/VP/J ISgPl+ C/P     ISg/#r+\n> was  poor     and  she  was  tired of waiting for   me       . It       was  a   terrible mistake , but     in\n# VLPt NSg/VB/J VB/C ISg+ VLPt VP/J  P  Nᴹ/Vg/J R/C/P NPr/ISg+ . NPr/ISg+ VLPt D/P J        NSg/VB  . NSg/C/P NPr/J/R/P\n> her     heart    she  never loved any     one      except me       ! ”\n# ISg/D$+ N🅪Sg/VB+ ISg+ R     VP/J  I/R/Dq+ NSg/I/J+ VB/C/P NPr/ISg+ . .\n>\n#\n> At    this    point   Jordan and  I       tried to go       , but     Tom     and  Gatsby insisted with\n# NSg/P I/Ddem+ NSg/VB+ NPr+   VB/C ISg/#r+ VP/J  P  NSg/VB/J . NSg/C/P NPr/VB+ VB/C NPr    VP/J     P\n> competitive firmness that         we   remain — as    though neither of them     had anything  to\n# J           Nᴹ       NSg/I/C/Ddem IPl+ NSg/VB . R/C/P C      I/C     P  NSg/IPl+ VP  NSg/I/VB+ P\n> conceal and  it       would be       a   privilege to partake vicariously of their emotions .\n# VB      VB/C NPr/ISg+ VXB   NSg/VLXB D/P NSg/VB+   P  VB      R           P  D$+   NPl+     .\n>\n#\n> “ Sit    down        , Daisy , ” Tom’s voice   groped unsuccessfully for   the paternal note    .\n# . NSg/VB N🅪Sg/VB/J/P . NPr+  . . NPr$  NSg/VB+ VP/J   R              R/C/P D   J        NSg/VB+ .\n> “ What’s been     going   on  ? I       want   to hear all          about it       . ”\n# . K      NSg/VLPp Nᴹ/Vg/J J/P . ISg/#r+ NSg/VB P  VB   NSg/I/J/C/Dq J/P   NPr/ISg+ . .\n>\n#\n> “ I       told you    what’s been     going   on  , ” said Gatsby . “ Going   on  for   five years — and  you\n# . ISg/#r+ VP   ISgPl+ K      NSg/VLPp Nᴹ/Vg/J J/P . . VP/J NPr    . . Nᴹ/Vg/J J/P R/C/P NSg+ NPl+  . VB/C ISgPl+\n> didn’t know . ”\n# VXPt   VB   . .\n>\n#\n> Tom     turned to Daisy sharply .\n# NPr/VB+ VP/J   P  NPr   R       .\n>\n#\n> “ You’ve been     seeing     this   fellow for   five years ? ”\n# . K      NSg/VLPp NSg/Vg/J/C I/Ddem NSg    R/C/P NSg  NPl+  . .\n>\n#\n> “ Not     seeing     , ” said Gatsby . “ No       , we   couldn’t meet     . But     both   of us       loved each\n# . NSg/R/C NSg/Vg/J/C . . VP/J NPr    . . NSg/Dq/P . IPl+ VXB      NSg/VB/J . NSg/C/P I/C/Dq P  NPr/IPl+ VP/J  Dq\n> other    all          that          time       , old    sport   , and  you    didn’t know . I       used to laugh\n# NSg/VB/J NSg/I/J/C/Dq NSg/I/C/Ddem+ N🅪Sg/VB/J+ . NSg/J+ NSg/VB+ . VB/C ISgPl+ VXPt   VB   . ISg/#r+ VP/J P  NSg/VB\n> sometimes ” — but     there was  no       laughter in        his     eyes    — “ to think  that         you    didn’t\n# R         . . NSg/C/P R+    VLPt NSg/Dq/P Nᴹ+      NPr/J/R/P ISg/D$+ NPl/V3+ . . P  NSg/VB NSg/I/C/Ddem ISgPl+ VXPt\n> know . ”\n# VB   . .\n>\n#\n> “ Oh     — that’s all          . ” Tom     tapped his     thick    fingers together like         a   clergyman and\n# . NPr/VB . NSg$   NSg/I/J/C/Dq . . NPr/VB+ VP/J   ISg/D$+ NSg/VB/J NPl/V3+ J        NSg/VB/J/C/P D/P NSg       VB/C\n> leaned back     in        his     chair   .\n# VP/J   NSg/VB/J NPr/J/R/P ISg/D$+ NSg/VB+ .\n>\n#\n> “ You’re crazy ! ” he       exploded . “ I       can’t speak  about what   happened five years ago ,\n# . K      NSg/J . . NPr/ISg+ VP/J     . . ISg/#r+ VXB   NSg/VB J/P   NSg/I+ VP/J     NSg  NPl+  J/P .\n> because I       didn’t know Daisy then      — and  I’ll be       damned if    I       see    how   you    got within\n# C/P     ISg/#r+ VXPt   VB   NPr+  NSg/J/R/C . VB/C K    NSg/VLXB VP/J   NSg/C ISg/#r+ NSg/VB NSg/C ISgPl+ VP  NSg/J/P\n> a   mile of her     unless you    brought the groceries to the back     door    . But     all          the\n# D/P NSg  P  ISg/D$+ C      ISgPl+ VP      D   NPl/V3+   P  D   NSg/VB/J NSg/VB+ . NSg/C/P NSg/I/J/C/Dq D\n> rest   of that’s a    God     damned lie     . Daisy loved me       when    she  married  me       and  she\n# NSg/VB P  NSg$   D/P+ NPr/VB+ VP/J   NPr/VB+ . NPr+  VP/J  NPr/ISg+ NSg/I/C ISg+ NSg/VP/J NPr/ISg+ VB/C ISg+\n> loves  me       now       . ”\n# NPl/V3 NPr/ISg+ NSg/J/R/C . .\n>\n#\n> “ No       , ” said Gatsby , shaking his     head      .\n# . NSg/Dq/P . . VP/J NPr    . Nᴹ/Vg/J ISg/D$+ NPr/VB/J+ .\n>\n#\n> “ She  does    , though . The trouble  is  that          sometimes she  gets   foolish ideas in        her\n# . ISg+ NPl/VX3 . C      . D+  N🅪Sg/VB+ VL3 NSg/I/C/Ddem+ R         ISg+ NPl/V3 J       NPl+  NPr/J/R/P ISg/D$+\n> head      and  doesn’t know what   she’s doing   . ” He       nodded sagely . “ And  what’s more         , I\n# NPr/VB/J+ VB/C VX3     VB   NSg/I+ K     Nᴹ/Vg/J . . NPr/ISg+ VP     R      . . VB/C K      NPr/I/J/R/Dq . ISg/#r+\n> love      Daisy too . Once  in        a    while       I       go       off        on  a    spree   and  make   a   fool     of myself ,\n# NPr🅪Sg/VB NPr+  R   . NSg/C NPr/J/R/P D/P+ NSg/VB/C/P+ ISg/#r+ NSg/VB/J NSg/VB/J/P J/P D/P+ NSg/VB+ VB/C NSg/VB D/P NSg/VB/J P  ISg+   .\n> but     I       always come       back     , and  in        my  heart    I       love      her     all           the time       . ”\n# NSg/C/P ISg/#r+ R      NSg/VBPp/P NSg/VB/J . VB/C NPr/J/R/P D$+ N🅪Sg/VB+ ISg/#r+ NPr🅪Sg/VB ISg/D$+ NSg/I/J/C/Dq+ D+  N🅪Sg/VB/J+ . .\n>\n#\n> “ You're revolting , ” said Daisy . She  turned to me       , and  her     voice   , dropping an\n# . +      Nᴹ/Vg/J   . . VP/J NPr+  . ISg+ VP/J   P  NPr/ISg+ . VB/C ISg/D$+ NSg/VB+ . NSg/Vg   D/P\n> octave   lower     , filled the room       with thrilling scorn   : “ Do  you    know why    we   left\n# NSg/VB/J NSg/VB/JC . VP/J   D   N🅪Sg/VB/J+ P    Nᴹ/Vg/J   NSg/VB+ . . VXB ISgPl+ VB   NSg/VB IPl+ NPr/VP/J\n> Chicago ? I’m surprised that         they didn’t treat  you    to the story  of that         little\n# NPr+    . K   VP/J      NSg/I/C/Ddem IPl+ VXPt   NSg/VB ISgPl+ P  D   NSg/VB P  NSg/I/C/Ddem NPr/I/J/Dq\n> spree   . ”\n# NSg/VB+ . .\n>\n#\n> Gatsby walked over    and  stood beside her     .\n# NPr    VP/J   NSg/J/P VB/C VP    P      ISg/D$+ .\n>\n#\n> “ Daisy , that’s all          over    now       , ” he       said earnestly . “ It       doesn’t matter   any    more         .\n# . NPr+  . NSg$   NSg/I/J/C/Dq NSg/J/P NSg/J/R/C . . NPr/ISg+ VP/J R         . . NPr/ISg+ VX3     N🅪Sg/VB+ I/R/Dq NPr/I/J/R/Dq .\n> Just tell   him  the truth    — that         you    never loved him  — and  it’s all           wiped out\n# J/R  NPr/VB ISg+ D+  N🅪Sg/VB+ . NSg/I/C/Ddem ISgPl+ R     VP/J  ISg+ . VB/C K    NSg/I/J/C/Dq+ VP/J+ NSg/VB/J/R/P\n> forever . ”\n# NSg/J   . .\n>\n#\n> She  looked at    him  blindly . “ Why    — how   could   I       love      him  — possibly ? ”\n# ISg+ VP/J   NSg/P ISg+ R       . . NSg/VB . NSg/C NSg/VXB ISg/#r+ NPr🅪Sg/VB ISg+ . R        . .\n>\n#\n> “ You    never loved him  . ”\n# . ISgPl+ R     VP/J  ISg+ . .\n>\n#\n> She  hesitated . Her     eyes    fell      on  Jordan and  me       with a   sort   of appeal  , as    though\n# ISg+ VP/J      . ISg/D$+ NPl/V3+ NSg/VPt/J J/P NPr+   VB/C NPr/ISg+ P    D/P NSg/VB P  NSg/VB+ . R/C/P C\n> she  realized       at    last      what   she  was  doing   — and  as    though she  had never , all          along ,\n# ISg+ VP/J/Comm/NoAm NSg/P NSg/VB/J+ NSg/I+ ISg+ VLPt Nᴹ/Vg/J . VB/C R/C/P C      ISg+ VP  R     . NSg/I/J/C/Dq P     .\n> intended doing   anything  at    all          . But     it       was  done      now       . It       was  too late  .\n# NSg/VP/J Nᴹ/Vg/J NSg/I/VB+ NSg/P NSg/I/J/C/Dq . NSg/C/P NPr/ISg+ VLPt NSg/VPp/J NSg/J/R/C . NPr/ISg+ VLPt R   NSg/J .\n>\n#\n> “ I       never loved him  , ” she  said , with perceptible reluctance .\n# . ISg/#r+ R     VP/J  ISg+ . . ISg+ VP/J . P    NSg/J       NSg+       .\n>\n#\n> “ Not     at    Kapiolani ? ” demanded Tom     suddenly .\n# . NSg/R/C NSg/P ?         . . VP/J     NPr/VB+ R        .\n>\n#\n> “ No       . ”\n# . NSg/Dq/P . .\n>\n#\n> From the ballroom beneath , muffled and  suffocating chords  were     drifting up         on\n# P    D+  NSg/VB+  P       . VP/J    VB/C Nᴹ/Vg/J     NPl/V3+ NSg/VLPt Nᴹ/Vg/J  NSg/VB/J/P J/P\n> hot      waves  of air      .\n# NSg/VB/J NPl/V3 P  N🅪Sg/VB+ .\n>\n#\n> “ Not     that          day     I       carried you    down        from the Punch      Bowl    to keep   your shoes   dry      ? ”\n# . NSg/R/C NSg/I/C/Ddem+ NPr🅪Sg+ ISg/#r+ VP/J    ISgPl+ N🅪Sg/VB/J/P P    D+  NPr🅪Sg/VB+ NSg/VB+ P  NSg/VB D$+  NPl/V3+ NSg/VB/J . .\n> There was  a   husky tenderness in        his     tone       . . . . “ Daisy ? ”\n# R+    VLPt D/P NSg/J Nᴹ         NPr/J/R/P ISg/D$+ N🅪Sg/I/VB+ . . . . . NPr+  . .\n>\n#\n> “ Please don’t . ” Her     voice   was  cold  , but     the rancor was  gone    from it       . She  looked\n# . VB     VXB   . . ISg/D$+ NSg/VB+ VLPt NSg/J . NSg/C/P D   NSg    VLPt VPp/J/P P    NPr/ISg+ . ISg+ VP/J\n> at    Gatsby . “ There , Jay  , ” she  said — but     her     hand    as    she  tried to light     a    cigarette\n# NSg/P NPr    . . R     . NPr+ . . ISg+ VP/J . NSg/C/P ISg/D$+ NSg/VB+ R/C/P ISg+ VP/J  P  N🅪Sg/VB/J D/P+ NSg/VB+\n> was  trembling . Suddenly she  threw the cigarette and  the burning match  on  the\n# VLPt Nᴹ/Vg/J   . R        ISg+ VPt   D+  NSg/VB+   VB/C D   Nᴹ/Vg/J NSg/VB J/P D+\n> carpet  .\n# NSg/VB+ .\n>\n#\n> “ Oh     , you    want   too much         ! ” she  cried to Gatsby . “ I       love      you    now       — isn’t   that          enough ?\n# . NPr/VB . ISgPl+ NSg/VB R   NSg/I/J/R/Dq . . ISg+ VP/J  P  NPr    . . ISg/#r+ NPr🅪Sg/VB ISgPl+ NSg/J/R/C . NSg/VX3 NSg/I/C/Ddem+ NSg/I  .\n> I       can’t help   what’s past       . ” She  began to sob    helplessly . “ I       did  love      him  once  — but\n# ISg/#r+ VXB   NSg/VB K      NSg/VB/J/P . . ISg+ VPt   P  NSg/VB R          . . ISg/#r+ VXPt NPr🅪Sg/VB ISg+ NSg/C . NSg/C/P\n> I       loved you    too . ”\n# ISg/#r+ VP/J  ISgPl+ R   . .\n>\n#\n> Gatsby’s eyes    opened and  closed .\n# NPr$     NPl/V3+ VP/J   VB/C VP/J   .\n>\n#\n> “ You    loved me       too ? ” he       repeated .\n# . ISgPl+ VP/J  NPr/ISg+ R   . . NPr/ISg+ VP/J     .\n>\n#\n> “ Even       that’s a    lie     , ” said Tom     savagely . “ She  didn’t know you    were     alive .\n# . NSg/VB/J/R NSg$   D/P+ NPr/VB+ . . VP/J NPr/VB+ R        . . ISg+ VXPt   VB   ISgPl+ NSg/VLPt J     .\n> Why    — there’re things between Daisy and  me       that          you’ll never know , things that\n# NSg/VB . ?        NPl+   NSg/P   NPr+  VB/C NPr/ISg+ NSg/I/C/Ddem+ K      R     VB   . NPl+   NSg/I/C/Ddem+\n> neither of us       can     ever forget . ”\n# I/C     P  NPr/IPl+ NPr/VXB J/R  VB     . .\n>\n#\n> The words   seemed to bite   physically into Gatsby .\n# D+  NPl/V3+ VP/J   P  NSg/VB R          P    NPr    .\n>\n#\n> “ I       want   to speak  to Daisy alone , ” he       insisted . “ She’s all          excited now       — ”\n# . ISg/#r+ NSg/VB P  NSg/VB P  NPr   J     . . NPr/ISg+ VP/J     . . K     NSg/I/J/C/Dq VP/J    NSg/J/R/C . .\n>\n#\n> “ Even       alone I       can’t say    I       never loved Tom     , ” she  admitted in        a   pitiful voice   . “ It\n# . NSg/VB/J/R J     ISg/#r+ VXB   NSg/VB ISg/#r+ R     VP/J  NPr/VB+ . . ISg+ VP/J     NPr/J/R/P D/P J       NSg/VB+ . . NPr/ISg+\n> wouldn’t be       true     . ”\n# VXB      NSg/VLXB NSg/VB/J . .\n>\n#\n> “ Of course  it       wouldn’t , ” agreed Tom     .\n# . P  NSg/VB+ NPr/ISg+ VXB      . . VP/J   NPr/VB+ .\n>\n#\n> She  turned to her     husband .\n# ISg+ VP/J   P  ISg/D$+ NSg/VB+ .\n>\n#\n> “ As    if    it       mattered to you    , ” she  said .\n# . R/C/P NSg/C NPr/ISg+ VP/J     P  ISgPl+ . . ISg+ VP/J .\n>\n#\n> “ Of course  it       matters . I’m going   to take   better     care    of you    from now       on  . ”\n# . P  NSg/VB+ NPr/ISg+ NPl/V3+ . K   Nᴹ/Vg/J P  NSg/VB NSg/VXB/JC N🅪Sg/VB P  ISgPl+ P    NSg/J/R/C J/P . .\n>\n#\n> “ You    don’t understand , ” said Gatsby , with a   touch   of panic      . “ You’re not     going   to\n# . ISgPl+ VXB   VB         . . VP/J NPr    . P    D/P N🅪Sg/VB P  N🅪Sg/VB/J+ . . K      NSg/R/C Nᴹ/Vg/J P\n> take   care    of her     any    more         . ”\n# NSg/VB N🅪Sg/VB P  ISg/D$+ I/R/Dq NPr/I/J/R/Dq . .\n>\n#\n> “ I’m not     ? ” Tom     opened his     eyes    wide  and  laughed . He       could   afford to control\n# . K   NSg/R/C . . NPr/VB+ VP/J   ISg/D$+ NPl/V3+ NSg/J VB/C VP/J    . NPr/ISg+ NSg/VXB VB     P  N🅪Sg/VB\n> himself now       . “ Why’s that          ? ”\n# ISg+    NSg/J/R/C . . NSg$  NSg/I/C/Ddem+ . .\n>\n#\n> “ Daisy’s leaving you    . ”\n# . NPr$    Nᴹ/Vg/J ISgPl+ . .\n>\n#\n> “ Nonsense . ”\n# . Nᴹ/VB/J+ . .\n>\n#\n> “ I       am        , though , ” she  said with a    visible effort   .\n# . ISg/#r+ NPr/VLB/J . C      . . ISg+ VP/J P    D/P+ J+      N🅪Sg/VB+ .\n>\n#\n> “ She’s not     leaving me       ! ” Tom’s words   suddenly leaned down        over    Gatsby . “ Certainly\n# . K     NSg/R/C Nᴹ/Vg/J NPr/ISg+ . . NPr$  NPl/V3+ R        VP/J   N🅪Sg/VB/J/P NSg/J/P NPr    . . R\n> not     for   a   common   swindler who’d have    to steal  the ring    he       put     on  her     finger  . ”\n# NSg/R/C R/C/P D/P NSg/VB/J NSg      K     NSg/VXB P  NSg/VB D   NSg/VB+ NPr/ISg+ NSg/VBP J/P ISg/D$+ NSg/VB+ . .\n>\n#\n> “ I       won’t stand  this    ! ” cried Daisy . “ Oh     , please let’s get    out          . ”\n# . ISg/#r+ VXB   NSg/VB I/Ddem+ . . VP/J  NPr+  . . NPr/VB . VB     NSg$  NSg/VB NSg/VB/J/R/P . .\n>\n#\n> “ Who    are you    , anyhow ? ” broke     out          Tom     . “ You’re one     of that         bunch   that          hangs\n# . NPr/I+ VLB ISgPl+ . J      . . NSg/VPt/J NSg/VB/J/R/P NPr/VB+ . . K      NSg/I/J P  NSg/I/C/Ddem NSg/VB+ NSg/I/C/Ddem+ NPl/V3\n> around with Meyer Wolfshiem — that          much         I       happen to know . I’ve made a   little\n# J/P    P    NPr   ?         . NSg/I/C/Ddem+ NSg/I/J/R/Dq ISg/#r+ VB     P  VB   . K    VP   D/P NPr/I/J/Dq\n> investigation into your affairs — and  I’ll carry  it       further to - morrow . ”\n# N🅪Sg+         P    D$+  NPl+    . VB/C K    NSg/VB NPr/ISg+ VB/JC   P  . NPr/VB . .\n>\n#\n> “ You    can     suit   yourself about that          , old    sport   . ” said Gatsby steadily .\n# . ISgPl+ NPr/VXB NSg/VB ISg+     J/P   NSg/I/C/Ddem+ . NSg/J+ NSg/VB+ . . VP/J NPr    R        .\n>\n#\n> “ I       found  out          what   your ‘          drug    - stores  ’ were     . ” He       turned to us       and  spoke   rapidly .\n# . ISg/#r+ NSg/VP NSg/VB/J/R/P NSg/I+ D$+  Unlintable NSg/VB+ . NPl/V3+ . NSg/VLPt . . NPr/ISg+ VP/J   P  NPr/IPl+ VB/C NSg/VPt R       .\n> “ He       and  this   Wolfshiem bought up         a   lot    of side      - street    drug    - stores  here and  in\n# . NPr/ISg+ VB/C I/Ddem ?         NSg/VP NSg/VB/J/P D/P NPr/VB P  NSg/VB/J+ . NSg/VB/J+ NSg/VB+ . NPl/V3+ J/R  VB/C NPr/J/R/P\n> Chicago and  sold   grain    alcohol over    the counter   . That’s one     of his     little\n# NPr+    VB/C NSg/VP N🅪Sg/VB+ N🅪Sg+   NSg/J/P D   NSg/VB/J+ . NSg$   NSg/I/J P  ISg/D$+ NPr/I/J/Dq\n> stunts . I       picked him  for   a   bootlegger the first time       I       saw     him  , and  I       wasn’t far\n# NPl/V3 . ISg/#r+ VP/J   ISg+ R/C/P D/P NSg        D+  NSg/J N🅪Sg/VB/J+ ISg/#r+ NSg/VPt ISg+ . VB/C ISg/#r+ VPt    NSg/VB/J\n> wrong      . ”\n# NSg/VB/J/R . .\n>\n#\n> “ What   about it       ? ” said Gatsby politely . “ I       guess  your friend    Walter Chase   wasn’t\n# . NSg/I+ J/P   NPr/ISg+ . . VP/J NPr    R        . . ISg/#r+ NSg/VB D$+  NPr/VB/J+ NPr+   NPr/VB+ VPt\n> too proud to come       in        on  it       . ”\n# R   J     P  NSg/VBPp/P NPr/J/R/P J/P NPr/ISg+ . .\n>\n#\n> “ And  you    left     him  in        the lurch   , didn’t you    ? You    let     him  go       to jail    for   a    month\n# . VB/C ISgPl+ NPr/VP/J ISg+ NPr/J/R/P D+  NSg/VB+ . VXPt   ISgPl+ . ISgPl+ NSg/VBP ISg+ NSg/VB/J P  N🅪Sg/VB R/C/P D/P+ NSg/J+\n> over    in        New    Jersey . God     ! You    ought     to hear Walter on  the subject  of you    . ”\n# NSg/J/P NPr/J/R/P NSg/J+ NPr+   . NPr/VB+ . ISgPl+ NSg/I/VXB P  VB   NPr+   J/P D   NSg/VB/J P  ISgPl+ . .\n>\n#\n> “ He       came      to us       dead      broke      . He       was  very glad     to pick   up         some      money   , old    sport   . ”\n# . NPr/ISg+ NSg/VPt/P P  NPr/IPl+ NSg/VB/J+ NSg/VPt/J+ . NPr/ISg+ VLPt J/R  NSg/VB/J P  NSg/VB NSg/VB/J/P I/J/R/Dq+ N🅪Sg/J+ . NSg/J+ NSg/VB+ . .\n>\n#\n> “ Don’t you    call   me       ‘          old   sport   ’ ! ” cried Tom     . Gatsby said nothing  . “ Walter could\n# . VXB   ISgPl+ NSg/VB NPr/ISg+ Unlintable NSg/J NSg/VB+ . . . VP/J  NPr/VB+ . NPr    VP/J NSg/I/J+ . . NPr+   NSg/VXB\n> have    you    up         on  the betting  laws    too , but     Wolfshiem scared him  into shutting his\n# NSg/VXB ISgPl+ NSg/VB/J/P J/P D   NSg/Vg/J NPl/V3+ R   . NSg/C/P ?         VP/J   ISg+ P    NSg/Vg   ISg/D$+\n> mouth   . ”\n# NSg/VB+ . .\n>\n#\n> That         unfamiliar yet      recognizable look    was  back     again in        Gatsby’s face    .\n# NSg/I/C/Ddem NSg/J      NSg/VB/C J+           NSg/VB+ VLPt NSg/VB/J P     NPr/J/R/P NPr$     NSg/VB+ .\n>\n#\n> “ That         drug    - store   business was  just small     change   , ” continued Tom     slowly , “ but\n# . NSg/I/C/Ddem NSg/VB+ . NSg/VB+ N🅪Sg/J+  VLPt J/R  NPr/VB/J+ N🅪Sg/VB+ . . VP/J      NPr/VB+ R      . . NSg/C/P\n> you’ve got something on  now       that          Walter’s afraid to tell   me       about . ”\n# K      VP  NSg/I/J+  J/P NSg/J/R/C NSg/I/C/Ddem+ NPr$     J      P  NPr/VB NPr/ISg+ J/P   . .\n>\n#\n> I       glanced at    Daisy , who    was  staring terrified between Gatsby and  her     husband ,\n# ISg/#r+ VP/J    NSg/P NPr+  . NPr/I+ VLPt Nᴹ/Vg/J VP/J      NSg/P   NPr    VB/C ISg/D$+ NSg/VB+ .\n> and  at    Jordan , who    had begun to balance an  invisible but     absorbing object  on  the\n# VB/C NSg/P NPr+   . NPr/I+ VP  VPp   P  N🅪Sg/VB D/P J         NSg/C/P Nᴹ/Vg/J   NSg/VB+ J/P D\n> tip    of her     chin    . Then      I       turned back     to Gatsby — and  was  startled at    his\n# NSg/VB P  ISg/D$+ NPr/VB+ . NSg/J/R/C ISg/#r+ VP/J   NSg/VB/J P  NPr    . VB/C VLPt VP/J     NSg/P ISg/D$+\n> expression . He       looked — and  this    is  said in        all          contempt for   the babbled slander\n# N🅪Sg+      . NPr/ISg+ VP/J   . VB/C I/Ddem+ VL3 VP/J NPr/J/R/P NSg/I/J/C/Dq Nᴹ+      R/C/P D   VP/J    NSg/VB\n> of his     garden    — as    if    he       had “ killed a   man       . ” For   a    moment the set       of his     face\n# P  ISg/D$+ NSg/VB/J+ . R/C/P NSg/C NPr/ISg+ VP  . VP/J   D/P NPr/VB/J+ . . R/C/P D/P+ NSg+   D   NPr/VBP/J P  ISg/D$+ NSg/VB+\n> could   be       described in        just that          fantastic way    .\n# NSg/VXB NSg/VLXB VP/J      NPr/J/R/P J/R  NSg/I/C/Ddem+ NSg/J+    NSg/J+ .\n>\n#\n> It       passed , and  he       began to talk    excitedly to Daisy , denying everything ,\n# NPr/ISg+ VP/J   . VB/C NPr/ISg+ VPt   P  N🅪Sg/VB R         P  NPr   . Nᴹ/Vg/J NSg/I/VB+  .\n> defending his     name    against accusations that          had not     been     made . But     with every\n# Nᴹ/Vg/J   ISg/D$+ NSg/VB+ C/P     NPl+        NSg/I/C/Ddem+ VP  NSg/R/C NSg/VLPp VP   . NSg/C/P P    Dq+\n> word    she  was  drawing   further and  further into herself , so          he       gave that          up         , and\n# NSg/VB+ ISg+ VLPt N🅪Sg/Vg/J VB/JC   VB/C VB/JC   P    ISg+    . NSg/I/J/R/C NPr/ISg+ VPt  NSg/I/C/Ddem+ NSg/VB/J/P . VB/C\n> only  the dead      dream     fought on  as    the afternoon slipped away , trying  to touch\n# J/R/C D+  NSg/VB/J+ NSg/VB/J+ VB     J/P R/C/P D+  N🅪Sg+     VP/J    VB/J . Nᴹ/Vg/J P  N🅪Sg/VB\n> what   was  no       longer tangible , struggling unhappily , undespairingly , toward that\n# NSg/I+ VLPt NSg/Dq/P NSg/JC NSg/J    . Nᴹ/Vg/J    R         . ?              . J/P    NSg/I/C/Ddem+\n> lost voice   across the room       .\n# VP/J NSg/VB+ NSg/P  D   N🅪Sg/VB/J+ .\n>\n#\n> The voice   begged again to go       .\n# D+  NSg/VB+ VP     P     P  NSg/VB/J .\n>\n#\n> “ Please , Tom     ! I       can’t stand  this   any    more         . ”\n# . VB     . NPr/VB+ . ISg/#r+ VXB   NSg/VB I/Ddem I/R/Dq NPr/I/J/R/Dq . .\n>\n#\n> Her     frightened eyes    told that         whatever intentions , whatever courage she  had had ,\n# ISg/D$+ VP/J       NPl/V3+ VP   NSg/I/C/Ddem NSg/I/J+ NPl/V3+    . NSg/I/J+ NSg/VB+ ISg+ VP  VP  .\n> were     definitely gone    .\n# NSg/VLPt R          VPp/J/P .\n>\n#\n> “ You    two start  on  home      , Daisy , ” said Tom     . “ In        Mr   . Gatsby’s car  . ”\n# . ISgPl+ NSg NSg/VB J/P NSg/VB/J+ . NPr+  . . VP/J NPr/VB+ . . NPr/J/R/P NSg+ . NPr$     NSg+ . .\n>\n#\n> She  looked at    Tom     , alarmed now       , but     he       insisted with magnanimous scorn   .\n# ISg+ VP/J   NSg/P NPr/VB+ . VP/J    NSg/J/R/C . NSg/C/P NPr/ISg+ VP/J     P    J           NSg/VB+ .\n>\n#\n> “ Go       on  . He       won’t annoy  you    . I       think  he       realizes     that         his     presumptuous little\n# . NSg/VB/J J/P . NPr/ISg+ VXB   NSg/VB ISgPl+ . ISg/#r+ NSg/VB NPr/ISg+ V3/Comm/NoAm NSg/I/C/Ddem ISg/D$+ J            NPr/I/J/Dq\n> flirtation is  over    . ”\n# NSg        VL3 NSg/J/P . .\n>\n#\n> They were     gone    , without a    word    , snapped out          , made accidental , isolated , like\n# IPl+ NSg/VLPt VPp/J/P . C/P     D/P+ NSg/VB+ . VP      NSg/VB/J/R/P . VP   NSg/J      . VP/J     . NSg/VB/J/C/P\n> ghosts  , even       from our pity     .\n# NPl/V3+ . NSg/VB/J/R P    D$+ N🅪Sg/VB+ .\n>\n#\n> After a    moment Tom     got up         and  began wrapping the unopened bottle of whiskey in\n# P     D/P+ NSg+   NPr/VB+ VP  NSg/VB/J/P VB/C VPt   N🅪Sg/Vg+ D   VB/J     NSg/VB P  N🅪Sg    NPr/J/R/P\n> the towel   .\n# D   NSg/VB+ .\n>\n#\n> “ Want   any    of this    stuff  ? Jordan ? . . . Nick    ? ”\n# . NSg/VB I/R/Dq P  I/Ddem+ Nᴹ/VB+ . NPr+   . . . . NPr/VB+ . .\n>\n#\n> I       didn’t answer  .\n# ISg/#r+ VXPt   NSg/VB+ .\n>\n#\n> “ Nick    ? ” He       asked again .\n# . NPr/VB+ . . NPr/ISg+ VP/J  P     .\n>\n#\n> “ What   ? ”\n# . NSg/I+ . .\n>\n#\n> “ Want   any    ? ”\n# . NSg/VB I/R/Dq . .\n>\n#\n> “ No       . . . I       just remembered that          to - day’s my  birthday . ”\n# . NSg/Dq/P . . . ISg/#r+ J/R  VP/J       NSg/I/C/Ddem+ P  . NPr$  D$+ NSg/VB+  . .\n>\n#\n> I       was  thirty . Before me       stretched the portentous , menacing road   of a   new   decade .\n# ISg/#r+ VLPt NSg    . C/P    NPr/ISg+ VP/J      D   J          . Nᴹ/Vg/J  N🅪Sg/J P  D/P NSg/J NSg+   .\n>\n#\n> It       was  seven o’clock when    we   got into the coupé with him  and  started for   Long\n# NPr/ISg+ VLPt NSg   R       NSg/I/C IPl+ VP  P    D   ?     P    ISg+ VB/C VP/J    R/C/P NPr/VB/J\n> Island  . Tom     talked incessantly , exulting and  laughing , but     his     voice   was  as\n# NSg/VB+ . NPr/VB+ VP/J   R           . Nᴹ/Vg/J  VB/C Nᴹ/Vg/J  . NSg/C/P ISg/D$+ NSg/VB+ VLPt R/C/P\n> remote   from Jordan and  me       as    the foreign clamor on  the sidewalk or    the tumult of\n# NSg/VB/J P    NPr+   VB/C NPr/ISg+ R/C/P D   NSg/J   NSg/VB J/P D   NSg+     NPr/C D   NSg/VB P\n> the elevated overhead . Human     sympathy has its     limits  , and  we   were     content   to let\n# D   VP/J     NSg/J/P+ . NSg/VB/J+ NSg+     V3  ISg/D$+ NPl/V3+ . VB/C IPl+ NSg/VLPt N🅪Sg/VB/J P  NSg/VBP\n> all           their tragic arguments fade     with the city lights  behind  . Thirty — the promise\n# NSg/I/J/C/Dq+ D$+   NSg/J+ NPl/V3+   NSg/VB/J P    D+  NSg+ NPl/V3+ NSg/J/P . NSg    . D   NSg/VB\n> of a   decade of loneliness , a   thinning list   of single   men  to know , a   thinning\n# P  D/P NSg    P  Nᴹ         . D/P NSg/Vg/J NSg/VB P  NSg/VB/J NPl+ P  VB   . D/P NSg/Vg/J\n> brief    - case      of enthusiasm , thinning hair     . But     there was  Jordan beside me       , who    ,\n# NSg/VB/J . NPr🅪Sg/VB P  NSg+       . NSg/Vg/J N🅪Sg/VB+ . NSg/C/P R+    VLPt NPr+   P      NPr/ISg+ . NPr/I+ .\n> unlike     Daisy , was  too wise     ever to carry  well       - forgotten dreams  from age      to age     .\n# NSg/VB/J/P NPr+  . VLPt R   NPr/VB/J J/R  P  NSg/VB NSg/VB/J/R . NSg/VPp/J NPl/V3+ P    N🅪Sg/VB+ P  N🅪Sg/VB .\n> As    we   passed over    the dark      bridge   her     wan      face    fell      lazily against my  coat’s\n# R/C/P IPl+ VP/J   NSg/J/P D+  NSg/VB/J+ N🅪Sg/VB+ ISg/D$+ NSg/VB/J NSg/VB+ NSg/VPt/J R      C/P     D$+ NSg$\n> shoulder and  the formidable stroke  of thirty died away with the reassuring\n# NSg/VB+  VB/C D   J          NSg/VB+ P  NSg    VP/J VB/J P    D   Nᴹ/Vg/J\n> pressure of her     hand    .\n# N🅪Sg/VB  P  ISg/D$+ NSg/VB+ .\n>\n#\n> So          we   drove   on  toward death   through the cooling  twilight .\n# NSg/I/J/R/C IPl+ NSg/VPt J/P J/P    NPr🅪Sg+ NSg/J/P D+  Nᴹ/Vg/J+ Nᴹ/VB/J+ .\n>\n#\n> The young    Greek    , Michaelis , who    ran     the coffee     joint    beside the ashheaps was  the\n# D   NPr/VB/J NPr/VB/J . ?         . NPr/I+ NSg/VPt D+  N🅪Sg/VB/J+ NSg/VB/J P      D   ?        VLPt D\n> principal witness at    the inquest . He       had slept through the heat   until after\n# NSg/J     NSg/VB  NSg/P D   NSg/VB  . NPr/ISg+ VP  VP    NSg/J/P D+  Nᴹ/VB+ C/P   P\n> five , when    he       strolled over    to the garage  , and  found  George Wilson sick     in        his\n# NSg  . NSg/I/C NPr/ISg+ VP/J     NSg/J/P P  D+  NSg/VB+ . VB/C NSg/VP NPr+   NPr+   NSg/VB/J NPr/J/R/P ISg/D$+\n> office  — really sick     , pale     as    his     own       pale      hair     and  shaking all          over    . Michaelis\n# NSg/VB+ . R      NSg/VB/J . NSg/VB/J R/C/P ISg/D$+ NSg/VB/J+ NSg/VB/J+ N🅪Sg/VB+ VB/C Nᴹ/Vg/J NSg/I/J/C/Dq NSg/J/P . ?\n> advised him  to go       to bed       , but     Wilson refused , saying    that         he’d miss   a   lot    of\n# VP/J    ISg+ P  NSg/VB/J P  NSg/VBP/J . NSg/C/P NPr+   VP/J    . N🅪Sg/Vg/J NSg/I/C/Ddem K    NSg/VB D/P NPr/VB P\n> business if    he       did  . While      his     neighbor     was  trying  to persuade him  a    violent\n# N🅪Sg/J+  NSg/C NPr/ISg+ VXPt . NSg/VB/C/P ISg/D$+ NSg/VB/J/Am+ VLPt Nᴹ/Vg/J P  VB       ISg+ D/P+ NSg/VB/J+\n> racket  broke     out          overhead .\n# NSg/VB+ NSg/VPt/J NSg/VB/J/R/P NSg/J/P+ .\n>\n#\n> “ I’ve got my  wife      locked in        up         there , ” explained Wilson calmly . “ She’s going   to\n# . K    VP  D$+ NSg/VB/J+ VP/J   NPr/J/R/P NSg/VB/J/P R     . . VP/J      NPr+   R      . . K     Nᴹ/Vg/J P\n> stay     there till       the day     after to - morrow , and  then      we’re going   to move   away . ”\n# NSg/VB/J R     NSg/VB/C/P D   NPr🅪Sg+ P     P  . NPr/VB . VB/C NSg/J/R/C K     Nᴹ/Vg/J P  NSg/VB VB/J . .\n>\n#\n> Michaelis was  astonished ; they had been     neighbors for   four years , and  Wilson had\n# ?         VLPt VP/J       . IPl+ VP  NSg/VLPp NPl/V3/Am R/C/P NSg+ NPl+  . VB/C NPr+   VP\n> never seemed faintly capable of such  a    statement . Generally he       was  one     of these\n# R     VP/J   R       J       P  NSg/I D/P+ NSg/VB/J+ . R         NPr/ISg+ VLPt NSg/I/J P  I/Ddem+\n> worn   - out          men  : when    he       wasn’t working , he       sat      on  a   chair   in        the doorway and\n# VPp/J+ . NSg/VB/J/R/P NPl+ . NSg/I/C NPr/ISg+ VPt    Nᴹ/Vg/J . NPr/ISg+ NSg/VP/J J/P D/P NSg/VB+ NPr/J/R/P D   NSg+    VB/C\n> stared at    the people  and  the cars that          passed along the road    . When    any    one      spoke\n# VP/J   NSg/P D   NPl/VB+ VB/C D   NPl+ NSg/I/C/Ddem+ VP/J   P     D   N🅪Sg/J+ . NSg/I/C I/R/Dq NSg/I/J+ NSg/VPt\n> to him  he       invariably laughed in        an  agreeable , colorless way    . He       was  his     wife’s\n# P  ISg+ NPr/ISg+ R          VP/J    NPr/J/R/P D/P J         . J/Am      NSg/J+ . NPr/ISg+ VLPt ISg/D$+ NSg$\n> man       and  not     his     own      .\n# NPr/VB/J+ VB/C NSg/R/C ISg/D$+ NSg/VB/J .\n>\n#\n> So          naturally Michaelis tried to find   out          what   had happened , but     Wilson wouldn’t\n# NSg/I/J/R/C R         ?         VP/J  P  NSg/VB NSg/VB/J/R/P NSg/I+ VP  VP/J     . NSg/C/P NPr+   VXB\n> say    a   word    — instead he       began to throw  curious , suspicious glances at    his     visitor\n# NSg/VB D/P NSg/VB+ . R       NPr/ISg+ VPt   P  NSg/VB J       . J          NPl/V3+ NSg/P ISg/D$+ NSg+\n> and  ask    him  what   he’d been     doing   at    certain times   on  certain days . Just as    the\n# VB/C NSg/VB ISg+ NSg/I+ K    NSg/VLPp Nᴹ/Vg/J NSg/P I/J     NPl/V3+ J/P I/J+    NPl+ . J/R  R/C/P D\n> latter was  getting uneasy   , some      workmen came      past       the door    bound    for   his\n# NSg/J  VLPt NSg/Vg  NSg/VB/J . I/J/R/Dq+ NPl+    NSg/VPt/P NSg/VB/J/P D+  NSg/VB+ NSg/VP/J R/C/P ISg/D$+\n> restaurant , and  Michaelis took the opportunity to get    away , intending to come\n# NSg+       . VB/C ?         VPt  D+  N🅪Sg+       P  NSg/VB VB/J . Nᴹ/Vg/J   P  NSg/VBPp/P\n> back     later . But     he       didn’t . He       supposed he       forgot to , that’s all          . When    he       came\n# NSg/VB/J JC    . NSg/C/P NPr/ISg+ VXPt   . NPr/ISg+ VP/J     NPr/ISg+ VPt    P  . NSg$   NSg/I/J/C/Dq . NSg/I/C NPr/ISg+ NSg/VPt/P\n> outside   again , a   little     after seven , he       was  reminded of the conversation because\n# Nᴹ/VB/J/P P     . D/P NPr/I/J/Dq P     NSg   . NPr/ISg+ VLPt VP/J     P  D+  N🅪Sg/VB+     C/P\n> he       heard Mrs  . Wilson’s voice   , loud  and  scolding , down        - stairs in        the garage  .\n# NPr/ISg+ VP/J  NPl+ . NPr$     NSg/VB+ . NSg/J VB/C Nᴹ/Vg/J  . N🅪Sg/VB/J/P . NPl+   NPr/J/R/P D   NSg/VB+ .\n>\n#\n> “ Beat      me       ! ” he       heard her     cry    . “ Throw  me       down        and  beat      me       , you    dirty little\n# . N🅪Sg/VB/J NPr/ISg+ . . NPr/ISg+ VP/J  ISg/D$+ NSg/VB . . NSg/VB NPr/ISg+ N🅪Sg/VB/J/P VB/C N🅪Sg/VB/J NPr/ISg+ . ISgPl+ VB/J  NPr/I/J/Dq\n> coward   ! ”\n# NPr/VB/J . .\n>\n#\n> A    moment later she  rushed out          into the dusk     , waving  her     hands  and\n# D/P+ NSg+   JC    ISg+ VP/J   NSg/VB/J/R/P P    D+  Nᴹ/VB/J+ . Nᴹ/Vg/J ISg/D$+ NPl/V3 VB/C\n> shouting — before he       could   move   from his     door   the business was  over    .\n# Nᴹ/Vg/J+ . C/P    NPr/ISg+ NSg/VXB NSg/VB P    ISg/D$+ NSg/VB D+  N🅪Sg/J+  VLPt NSg/J/P .\n>\n#\n> The “ death   car  ” as    the newspapers called it       , didn’t stop   ; it       came      out          of the\n# D   . NPr🅪Sg+ NSg+ . R/C/P D+  NPl/V3+    VP/J   NPr/ISg+ . VXPt   NSg/VB . NPr/ISg+ NSg/VPt/P NSg/VB/J/R/P P  D\n> gathering darkness , wavered tragically for   a   moment , and  then      disappeared around\n# Nᴹ/Vg/J   Nᴹ+      . VP/J    R          R/C/P D/P NSg+   . VB/C NSg/J/R/C VP/J        J/P\n> the next    bend    . Mavromichaelis wasn’t even       sure of its     color         — he       told the first\n# D   NSg/J/P NPr/VB+ . ?              VPt    NSg/VB/J/R J    P  ISg/D$+ N🅪Sg/VB/J/Am+ . NPr/ISg+ VP   D   NSg/J\n> policeman that          it       was  light      green       . The other     car  , the one      going   toward New    York ,\n# NSg+      NSg/I/C/Ddem+ NPr/ISg+ VLPt N🅪Sg/VB/J+ NPr🅪Sg/VB/J . D+  NSg/VB/J+ NSg+ . D+  NSg/I/J+ Nᴹ/Vg/J J/P    NSg/J+ NPr+ .\n> came      to rest   a    hundred yards   beyond , and  it’s driver hurried back     to where\n# NSg/VPt/P P  NSg/VB D/P+ NSg+    NPl/V3+ NSg/P  . VB/C K    NSg+   VP/J    NSg/VB/J P  NSg/R/C\n> Myrtle Wilson , her     life     violently extinguished , knelt in        the road    and  mingled\n# NPr    NPr+   . ISg/D$+ N🅪Sg/VB+ R         VP/J         . VP    NPr/J/R/P D   N🅪Sg/J+ VB/C VP/J\n> her     thick    dark     blood  with the dust   .\n# ISg/D$+ NSg/VB/J NSg/VB/J Nᴹ/VB+ P    D   Nᴹ/VB+ .\n>\n#\n> Michaelis and  this    man       reached her     first , but     when    they had torn open     her\n# ?         VB/C I/Ddem+ NPr/VB/J+ VP/J    ISg/D$+ NSg/J . NSg/C/P NSg/I/C IPl+ VP  VB/J NSg/VB/J ISg/D$+\n> shirtwaist , still      damp    with perspiration , they saw     that         her     left     breast  was\n# NSg        . NSg/VB/J/R Nᴹ/VB/J P    Nᴹ+          . IPl+ NSg/VPt NSg/I/C/Ddem ISg/D$+ NPr/VP/J NSg/VB+ VLPt\n> swinging loose    like         a   flap    , and  there was  no       need     to listen for   the heart\n# Nᴹ/Vg/J  NSg/VB/J NSg/VB/J/C/P D/P NSg/VB+ . VB/C R+    VLPt NSg/Dq/P N🅪Sg/VXB P  NSg/VB R/C/P D   N🅪Sg/VB+\n> beneath . The mouth   was  wide  open     and  ripped a   little     at    the corners , as    though\n# P       . D+  NSg/VB+ VLPt NSg/J NSg/VB/J VB/C VP/J   D/P NPr/I/J/Dq NSg/P D+  NPl/V3+ . R/C/P C\n> she  had choked a   little     in        giving  up         the tremendous vitality she  had stored so\n# ISg+ VP  VP/J   D/P NPr/I/J/Dq NPr/J/R/P Nᴹ/Vg/J NSg/VB/J/P D   J          Nᴹ+      ISg+ VP  VP/J   NSg/I/J/R/C\n> long     .\n# NPr/VB/J .\n>\n#\n> We   saw     the three or    four automobiles and  the crowd   when    we   were     still      some\n# IPl+ NSg/VPt D   NSg   NPr/C NSg  NPl/V3      VB/C D+  NSg/VB+ NSg/I/C IPl+ NSg/VLPt NSg/VB/J/R I/J/R/Dq\n> distance away\n# N🅪Sg/VB+ VB/J\n>\n#\n> “ Wreck   ! ” said Tom     . “ That’s good     . Wilson’ll have    a   little     business at    last     . ”\n# . NSg/VB+ . . VP/J NPr/VB+ . . NSg$   NPr/VB/J . ?         NSg/VXB D/P NPr/I/J/Dq N🅪Sg/J+  NSg/P NSg/VB/J . .\n>\n#\n> He       slowed down        , but     still      without any    intention of stopping , until , as    we   came\n# NPr/ISg+ VP/J   N🅪Sg/VB/J/P . NSg/C/P NSg/VB/J/R C/P     I/R/Dq NSg/VB    P  NSg/Vg+  . C/P   . R/C/P IPl+ NSg/VPt/P\n> nearer , the hushed , intent faces  of the people  at    the garage  door    made him\n# NSg/JC . D   VP/J   . NSg/J+ NPl/V3 P  D   NPl/VB+ NSg/P D   NSg/VB+ NSg/VB+ VP   ISg+\n> automatically put     on  the brakes  .\n# R             NSg/VBP J/P D   NPl/V3+ .\n>\n#\n> “ We'll take   a   look    , ” he       said doubtfully , “ just a   look    . ”\n# . K     NSg/VB D/P NSg/VB+ . . NPr/ISg+ VP/J R          . . J/R  D/P NSg/VB+ . .\n>\n#\n> I       became aware now       of a   hollow   , wailing sound      which issued incessantly from the\n# ISg/#r+ VPt    VB/J  NSg/J/R/C P  D/P NSg/VB/J . Nᴹ/Vg/J N🅪Sg/VB/J+ I/C+  VP/J   R           P    D\n> garage  , a   sound      which as    we   got out          of the coupé and  walked toward the door\n# NSg/VB+ . D/P N🅪Sg/VB/J+ I/C+  R/C/P IPl+ VP  NSg/VB/J/R/P P  D   ?     VB/C VP/J   J/P    D   NSg/VB+\n> resolved itself into the words   “ Oh     , my  God     ! ” uttered over    and  over    in        a   gasping\n# VP/J     ISg+   P    D   NPl/V3+ . NPr/VB . D$+ NPr/VB+ . . VP/J    NSg/J/P VB/C NSg/J/P NPr/J/R/P D/P Nᴹ/Vg/J\n> moan   .\n# NSg/VB .\n>\n#\n> “ There’s some      bad      trouble  here , ” said Tom     excitedly .\n# . K       I/J/R/Dq+ NSg/VB/J N🅪Sg/VB+ J/R  . . VP/J NPr/VB+ R         .\n>\n#\n> He       reached up         on  tiptoes and  peered over    a   circle of heads   into the garage  ,\n# NPr/ISg+ VP/J    NSg/VB/J/P J/P NPl/V3  VB/C VP/J   NSg/J/P D/P NSg/VB P  NPl/V3+ P    D   NSg/VB+ .\n> which was  lit      only  by    a   yellow   light      in        a   swinging metal      basket  overhead . Then\n# I/C+  VLPt NSg/VP/J J/R/C NSg/P D/P NSg/VB/J N🅪Sg/VB/J+ NPr/J/R/P D/P Nᴹ/Vg/J  N🅪Sg/VB/J+ NSg/VB+ NSg/J/P+ . NSg/J/R/C\n> he       made a   harsh sound      in        his     throat  , and  with a   violent  thrusting movement of\n# NPr/ISg+ VP   D/P VB/J  N🅪Sg/VB/J+ NPr/J/R/P ISg/D$+ NSg/VB+ . VB/C P    D/P NSg/VB/J Nᴹ/Vg/J+  N🅪Sg     P\n> his     powerful arms    pushed his     way    through .\n# ISg/D$+ J+       NPl/V3+ VP/J   ISg/D$+ NSg/J+ NSg/J/P .\n>\n#\n> The circle  closed up         again with a   running   murmur of expostulation ; it       was  a\n# D+  NSg/VB+ VP/J   NSg/VB/J/P P     P    D/P Nᴹ/Vg/J/P NSg/VB P  NSg+          . NPr/ISg+ VLPt D/P\n> minute    before I       could   see    anything  at    all          . Then      new   arrivals deranged the line    ,\n# NSg/VB/J+ C/P    ISg/#r+ NSg/VXB NSg/VB NSg/I/VB+ NSg/P NSg/I/J/C/Dq . NSg/J/R/C NSg/J NPl      VP/J     D   NSg/VB+ .\n> and  Jordan and  I       were     pushed suddenly inside  .\n# VB/C NPr+   VB/C ISg/#r+ NSg/VLPt VP/J   R        NSg/J/P .\n>\n#\n> Myrtle Wilson’s body    , wrapped in        a   blanket   , and  then      in        another blanket   , as\n# NPr    NPr$     NSg/VB+ . VP/J    NPr/J/R/P D/P NSg/VB/J+ . VB/C NSg/J/R/C NPr/J/R/P I/D     NSg/VB/J+ . R/C/P\n> though she  suffered from a   chill      in        the hot      night    , lay        on  a   work     - table   by    the\n# C      ISg+ VP/J     P    D/P N🅪Sg/VB/J+ NPr/J/R/P D   NSg/VB/J N🅪Sg/VB+ . NSg/VBPt/J J/P D/P N🅪Sg/VB+ . NSg/VB+ NSg/P D\n> wall    , and  Tom     , with his     back     to us       , was  bending over    it       , motionless . Next    to him\n# NPr/VB+ . VB/C NPr/VB+ . P    ISg/D$+ NSg/VB/J P  NPr/IPl+ . VLPt Nᴹ/Vg/J NSg/J/P NPr/ISg+ . J          . NSg/J/P P  ISg+\n> stood a    motorcycle policeman taking   down        names   with much         sweat   and  correction in\n# VP    D/P+ NSg/VB+    NSg+      NSg/Vg/J N🅪Sg/VB/J/P NPl/V3+ P    NSg/I/J/R/Dq N🅪Sg/VB VB/C NSg+       NPr/J/R/P\n> a    little      book    . At    first I       couldn’t find   the source  of the high       , groaning words\n# D/P+ NPr/I/J/Dq+ NSg/VB+ . NSg/P NSg/J ISg/#r+ VXB      NSg/VB D   N🅪Sg/VB P  D   NSg/VB/J/R . Nᴹ/Vg/J  NPl/V3+\n> that         echoed clamorously through the bare     garage  — then      I       saw     Wilson standing on\n# NSg/I/C/Ddem VP/J   ?           NSg/J/P D   NSg/VB/J NSg/VB+ . NSg/J/R/C ISg/#r+ NSg/VPt NPr+   Nᴹ/Vg/J  J/P\n> the raised threshold of his     office  , swaying back     and  forth and  holding to the\n# D   VP/J   NSg       P  ISg/D$+ NSg/VB+ . Nᴹ/Vg/J NSg/VB/J VB/C R     VB/C Nᴹ/Vg/J P  D\n> doorposts with both   hands   . Some      man       was  talking to him  in        a    low         voice   and\n# NPl       P    I/C/Dq NPl/V3+ . I/J/R/Dq+ NPr/VB/J+ VLPt Nᴹ/Vg/J P  ISg+ NPr/J/R/P D/P+ NSg/VB/J/R+ NSg/VB+ VB/C\n> attempting , from time       to time      , to lay        a    hand    on  his     shoulder , but     Wilson neither\n# Nᴹ/Vg/J    . P    N🅪Sg/VB/J+ P  N🅪Sg/VB/J . P  NSg/VBPt/J D/P+ NSg/VB+ J/P ISg/D$+ NSg/VB+  . NSg/C/P NPr+   I/C\n> heard nor   saw     . His     eyes    would drop    slowly from the swinging light      to the laden\n# VP/J  NSg/C NSg/VPt . ISg/D$+ NPl/V3+ VXB   NSg/VB+ R      P    D   Nᴹ/Vg/J  N🅪Sg/VB/J+ P  D+  VB/J+\n> table   by    the wall    , and  then      jerk    back     to the light      again , and  he       gave out\n# NSg/VB+ NSg/P D+  NPr/VB+ . VB/C NSg/J/R/C NSg/VB+ NSg/VB/J P  D+  N🅪Sg/VB/J+ P     . VB/C NPr/ISg+ VPt  NSg/VB/J/R/P\n> incessantly his     high       , horrible call    :\n# R           ISg/D$+ NSg/VB/J/R . NSg/J    NSg/VB+ .\n>\n#\n> “ Oh     , my  Ga   - od     ! Oh     , my  Ga   - od     ! Oh     , Ga   - od     ! Oh     , my  Ga   - od     ! ”\n# . NPr/VB . D$+ NPr+ . NSg/VB . NPr/VB . D$+ NPr+ . NSg/VB . NPr/VB . NPr+ . NSg/VB . NPr/VB . D$+ NPr+ . NSg/VB . .\n>\n#\n> Presently Tom     lifted his     head     with a    jerk    and  , after staring around the garage\n# R         NPr/VB+ VP/J   ISg/D$+ NPr/VB/J P    D/P+ NSg/VB+ VB/C . P     Nᴹ/Vg/J J/P    D+  NSg/VB+\n> with glazed eyes    , addressed a   mumbled incoherent remark to the policeman .\n# P    VP/J   NPl/V3+ . VP/J      D/P VP/J    J          NSg/VB P  D+  NSg+      .\n>\n#\n> “ M           - a   - v        — ” the policeman was  saying    , “ — o       — — — ”\n# . NPr/VB/J/#r . D/P . NSg/P/#r . . D+  NSg+      VLPt N🅪Sg/Vg/J . . . NPr/J/P . . . .\n>\n#\n> “ No       , r     — ” corrected the man       , “ M           - a   - v        - r     - o       — — — ”\n# . NSg/Dq/P . NPr/J . . VP/J      D+  NPr/VB/J+ . . NPr/VB/J/#r . D/P . NSg/P/#r . NPr/J . NPr/J/P . . . .\n>\n#\n> “ Listen to me       ! ” muttered Tom     fiercely .\n# . NSg/VB P  NPr/ISg+ . . VP/J     NPr/VB+ R        .\n>\n#\n> “ r     — ” said the policeman , “ o       — — — ”\n# . NPr/J . . VP/J D+  NSg+      . . NPr/J/P . . . .\n>\n#\n> “ g    — — — ”\n# . NSg+ . . . .\n>\n#\n> “ g    — ” He       looked up         as    Tom’s broad  hand    fell      sharply on  his     shoulder . “ What   you\n# . NSg+ . . NPr/ISg+ VP/J   NSg/VB/J/P R/C/P NPr$  NSg/J+ NSg/VB+ NSg/VPt/J R       J/P ISg/D$+ NSg/VB+  . . NSg/I+ ISgPl+\n> want   , fella ? ”\n# NSg/VB . NSg   . .\n>\n#\n> “ What   happened ? — that’s what   I       want   to know . ”\n# . NSg/I+ VP/J     . . NSg$   NSg/I+ ISg/#r+ NSg/VB P  VB   . .\n>\n#\n> “ Auto      hit       her     . Ins’antly killed . ”\n# . NSg/VB/J+ NSg/VBP/J ISg/D$+ . ?         VP/J   . .\n>\n#\n> “ Instantly killed , ” repeated Tom     , staring .\n# . R         VP/J   . . VP/J     NPr/VB+ . Nᴹ/Vg/J .\n>\n#\n> “ She  ran     out          ina road    . Son     - of - a   - bitch  didn’t even       stopus car  . ”\n# . ISg+ NSg/VPt NSg/VB/J/R/P NPr N🅪Sg/J+ . NPr/VB+ . P  . D/P . NSg/VB VXPt   NSg/VB/J/R ?      NSg+ . .\n>\n#\n> “ There was  two  cars , ” said Michaelis , “ one     comin ’ , one     goin ’ , see    ? ”\n# . R+    VLPt NSg+ NPl+ . . VP/J ?         . . NSg/I/J ?     . . NSg/I/J ?    . . NSg/VB . .\n>\n#\n> “ Going   where   ? ” asked the policeman keenly .\n# . Nᴹ/Vg/J NSg/R/C . . VP/J  D+  NSg+      R      .\n>\n#\n> “ One     goin ’ each way    . Well       , she  ” — his     hand    rose      toward the blankets but     stopped\n# . NSg/I/J ?    . Dq   NSg/J+ . NSg/VB/J/R . ISg+ . . ISg/D$+ NSg/VB+ NPr/VPt/J J/P    D+  NPl/V3+  NSg/C/P VP/J\n> half      way    and  fell      to his     side      — “ she  ran     out          there an  ’ the one      comin ’ from N’York\n# N🅪Sg/J/P+ NSg/J+ VB/C NSg/VPt/J P  ISg/D$+ NSg/VB/J+ . . ISg+ NSg/VPt NSg/VB/J/R/P R+    D/P . D+  NSg/I/J+ ?     . P    ?\n> knock  right    into her     , goin ’ thirty or    forty miles  an  hour . ”\n# NSg/VB NPr/VB/J P    ISg/D$+ . ?    . NSg    NPr/C NSg/J NPrPl+ D/P NSg+ . .\n>\n#\n> “ What’s the name   of this   place    here ? ” demanded the officer .\n# . K      D   NSg/VB P  I/Ddem N🅪Sg/VB+ J/R  . . VP/J     D+  NSg/VB+ .\n>\n#\n> “ Hasn’t got any    name    . ”\n# . V3     VP  I/R/Dq NSg/VB+ . .\n>\n#\n> A   pale     well       - dressed negro stepped near       .\n# D/P NSg/VB/J NSg/VB/J/R . VP/J    NSg/J J       NSg/VB/J/P .\n>\n#\n> “ It       was  a   yellow   car , ” he       said , “ big    yellow    car  . New   . ”\n# . NPr/ISg+ VLPt D/P NSg/VB/J NSg . . NPr/ISg+ VP/J . . NSg/J+ NSg/VB/J+ NSg+ . NSg/J . .\n>\n#\n> “ See    the accident ? ” asked the policeman .\n# . NSg/VB D+  NSg/J+   . . VP/J  D+  NSg+      .\n>\n#\n> “ No       , but     the car  passed me       down        the road    , going   faster’n forty . Going   fifty ,\n# . NSg/Dq/P . NSg/C/P D+  NSg+ VP/J   NPr/ISg+ N🅪Sg/VB/J/P D+  N🅪Sg/J+ . Nᴹ/Vg/J ?        NSg/J . Nᴹ/Vg/J NSg   .\n> sixty . ”\n# NSg   . .\n>\n#\n> “ Come       here and  let’s have    your name    . Look   out          now       . I       want   to get    his     name    . ”\n# . NSg/VBPp/P J/R  VB/C NSg$  NSg/VXB D$+  NSg/VB+ . NSg/VB NSg/VB/J/R/P NSg/J/R/C . ISg/#r+ NSg/VB P  NSg/VB ISg/D$+ NSg/VB+ . .\n>\n#\n> Some     words  of this    conversation must    have    reached Wilson , swaying in        the office\n# I/J/R/Dq NPl/V3 P  I/Ddem+ N🅪Sg/VB+     NSg/VXB NSg/VXB VP/J    NPr+   . Nᴹ/Vg/J NPr/J/R/P D+  NSg/VB+\n> door    , for   suddenly a    new    theme   found  voice   among his     gasping cries  :\n# NSg/VB+ . R/C/P R        D/P+ NSg/J+ NSg/VB+ NSg/VP NSg/VB+ P     ISg/D$+ Nᴹ/Vg/J NPl/V3 .\n>\n#\n> “ You    don’t have    to tell   me       what   kind  of car  it       was  ! I       know what   kind  of car  it\n# . ISgPl+ VXB   NSg/VXB P  NPr/VB NPr/ISg+ NSg/I+ NSg/J P  NSg+ NPr/ISg+ VLPt . ISg/#r+ VB   NSg/I+ NSg/J P  NSg+ NPr/ISg+\n> was  ! ”\n# VLPt . .\n>\n#\n> Watching Tom     , I       saw     the wad    of muscle   back     of his     shoulder tighten under   his\n# Nᴹ/Vg/J  NPr/VB+ . ISg/#r+ NSg/VPt D   NSg/VB P  N🅪Sg/VB+ NSg/VB/J P  ISg/D$+ NSg/VB+  VB      NSg/J/P ISg/D$+\n> coat    . He       walked quickly over    to Wilson and  , standing in        front    of him  seized him  ,\n# NSg/VB+ . NPr/ISg+ VP/J   R       NSg/J/P P  NPr+   VB/C . Nᴹ/Vg/J  NPr/J/R/P NSg/VB/J P  ISg+ VP/J   ISg+ .\n> firmly by    the upper  arms    .\n# R      NSg/P D+  NSg/J+ NPl/V3+ .\n>\n#\n> “ You've got to pull   yourself together , ” he       said with soothing gruffness .\n# . K      VP  P  NSg/VB ISg+     J        . . NPr/ISg+ VP/J P    Nᴹ/Vg/J  Nᴹ        .\n>\n#\n> Wilson’s eyes    fell      upon Tom     ; he       started up         on  his     tiptoes and  then      would have\n# NPr$     NPl/V3+ NSg/VPt/J P    NPr/VB+ . NPr/ISg+ VP/J    NSg/VB/J/P J/P ISg/D$+ NPl/V3  VB/C NSg/J/R/C VXB   NSg/VXB\n> collapsed to his     knees   had not     Tom     held him  upright  .\n# VP/J      P  ISg/D$+ NPl/V3+ VP  NSg/R/C NPr/VB+ VP   ISg+ NSg/VB/J .\n>\n#\n> “ Listen , ” said Tom     , shaking him  a   little     . “ I       just got here a    minute    ago , from\n# . NSg/VB . . VP/J NPr/VB+ . Nᴹ/Vg/J ISg+ D/P NPr/I/J/Dq . . ISg/#r+ J/R  VP  J/R  D/P+ NSg/VB/J+ J/P . P\n> New    York . I       was  bringing you    that         coupé we’ve been     talking about . That          yellow\n# NSg/J+ NPr+ . ISg/#r+ VLPt Nᴹ/Vg/J  ISgPl+ NSg/I/C/Ddem ?     K     NSg/VLPp Nᴹ/Vg/J J/P   . NSg/I/C/Ddem+ NSg/VB/J+\n> car  I       was  driving this    afternoon wasn’t mine      — do  you    hear ? I       haven’t seen    it       all\n# NSg+ ISg/#r+ VLPt Nᴹ/Vg/J I/Ddem+ N🅪Sg+     VPt    NSg/I/VB+ . VXB ISgPl+ VB   . ISg/#r+ VXB     NSg/VPp NPr/ISg+ NSg/I/J/C/Dq\n> afternoon . ”\n# N🅪Sg+     . .\n>\n#\n> Only  the negro and  I       were     near       enough to hear what   he       said , but     the policeman\n# J/R/C D   NSg/J VB/C ISg/#r+ NSg/VLPt NSg/VB/J/P NSg/I  P  VB   NSg/I+ NPr/ISg+ VP/J . NSg/C/P D+  NSg+\n> caught something in        the tone       and  looked over    with truculent eyes    .\n# VP/J   NSg/I/J+  NPr/J/R/P D+  N🅪Sg/I/VB+ VB/C VP/J   NSg/J/P P    J         NPl/V3+ .\n>\n#\n> “ What’s all          that          ? ” he       demanded .\n# . K      NSg/I/J/C/Dq NSg/I/C/Ddem+ . . NPr/ISg+ VP/J     .\n>\n#\n> “ I’m a   friend   of his     . ” Tom     turned his     head      but     kept his     hands   firm      on  Wilson’s\n# . K   D/P NPr/VB/J P  ISg/D$+ . . NPr/VB+ VP/J   ISg/D$+ NPr/VB/J+ NSg/C/P VP   ISg/D$+ NPl/V3+ NSg/VB/J+ J/P NPr$\n> body    . “ He       says   he       knows the car  that          did  it       . . . . It       was  a   yellow   car . ”\n# NSg/VB+ . . NPr/ISg+ NPl/V3 NPr/ISg+ V3    D+  NSg+ NSg/I/C/Ddem+ VXPt NPr/ISg+ . . . . NPr/ISg+ VLPt D/P NSg/VB/J NSg . .\n>\n#\n> Some      dim       impulse moved the policeman to look   suspiciously at    Tom     .\n# I/J/R/Dq+ NSg/VB/J+ NSg/VB+ VP/J  D+  NSg+      P  NSg/VB R            NSg/P NPr/VB+ .\n>\n#\n> “ And  what   color’s your car  ? ”\n# . VB/C NSg/I+ Am      D$+  NSg+ . .\n>\n#\n> “ It’s a    blue       car  , a   coupé . ”\n# . K    D/P+ N🅪Sg/VB/J+ NSg+ . D/P ?     . .\n>\n#\n> “ We've come       straight   from New   York , ” I       said .\n# . K     NSg/VBPp/P NSg/VB/J/R P    NSg/J NPr+ . . ISg/#r+ VP/J .\n>\n#\n> Some     one     who    had been     driving a   little     behind  us       confirmed this    , and  the\n# I/J/R/Dq NSg/I/J NPr/I+ VP  NSg/VLPp Nᴹ/Vg/J D/P NPr/I/J/Dq NSg/J/P NPr/IPl+ VP/J      I/Ddem+ . VB/C D+\n> policeman turned away .\n# NSg+      VP/J   VB/J .\n>\n#\n> “ Now       , if    you'll let     me       have    that         name    again correct  — — — ”\n# . NSg/J/R/C . NSg/C K      NSg/VBP NPr/ISg+ NSg/VXB NSg/I/C/Ddem NSg/VB+ P     NSg/VB/J . . . .\n>\n#\n> Picking up         Wilson like         a    doll , Tom     carried him  into the office  , set       him  down        in\n# Nᴹ/Vg/J NSg/VB/J/P NPr+   NSg/VB/J/C/P D/P+ NSg+ . NPr/VB+ VP/J    ISg+ P    D+  NSg/VB+ . NPr/VBP/J ISg+ N🅪Sg/VB/J/P NPr/J/R/P\n> a    chair   , and  came      back     .\n# D/P+ NSg/VB+ . VB/C NSg/VPt/P NSg/VB/J .\n>\n#\n> “ If    somebody’ll come       here and  sit    with him  , ” he       snapped authoritatively . He\n# . NSg/C ?           NSg/VBPp/P J/R  VB/C NSg/VB P    ISg+ . . NPr/ISg+ VP      R               . NPr/ISg+\n> watched while      the two  men  standing closest glanced at    each other    and  went\n# VP/J    NSg/VB/C/P D+  NSg+ NPl+ Nᴹ/Vg/J  JS      VP/J    NSg/P Dq   NSg/VB/J VB/C NSg/VPt\n> unwillingly into the room       . Then      Tom     shut      the door    on  them     and  came      down        the\n# R           P    D+  N🅪Sg/VB/J+ . NSg/J/R/C NPr/VB+ NSg/VBP/J D+  NSg/VB+ J/P NSg/IPl+ VB/C NSg/VPt/P N🅪Sg/VB/J/P D+\n> single    step    , his     eyes    avoiding the table   . As    he       passed close    to me       he       whispered :\n# NSg/VB/J+ NSg/VB+ . ISg/D$+ NPl/V3+ Nᴹ/Vg/J  D+  NSg/VB+ . R/C/P NPr/ISg+ VP/J   NSg/VB/J P  NPr/ISg+ NPr/ISg+ VP/J      .\n> “ Let’s get    out          . ”\n# . NSg$  NSg/VB NSg/VB/J/R/P . .\n>\n#\n> Self        - consciously , with his     authoritative arms    breaking the way    , we   pushed\n# NSg/I/VB/J+ . R           . P    ISg/D$+ J+            NPl/V3+ Nᴹ/Vg/J  D+  NSg/J+ . IPl+ VP/J\n> through the still      gathering crowd   , passing a   hurried doctor , case       in        hand    , who\n# NSg/J/P D   NSg/VB/J/R Nᴹ/Vg/J   NSg/VB+ . Nᴹ/Vg/J D/P VP/J    NSg/VB . NPr🅪Sg/VB+ NPr/J/R/P NSg/VB+ . NPr/I+\n> had been     sent   for   in        wild     hope      half      an   hour ago .\n# VP  NSg/VLPp NSg/VP R/C/P NPr/J/R/P NSg/VB/J NPr🅪Sg/VB N🅪Sg/J/P+ D/P+ NSg+ J/P .\n>\n#\n> Tom     drove   slowly until we   were     beyond the bend    — then      his     foot    came      down        hard     , and\n# NPr/VB+ NSg/VPt R      C/P   IPl+ NSg/VLPt NSg/P  D+  NPr/VB+ . NSg/J/R/C ISg/D$+ NSg/VB+ NSg/VPt/P N🅪Sg/VB/J/P N🅪Sg/J/R . VB/C\n> the coupé raced along through the night    . In        a   little     while      I       heard a   low        husky\n# D   ?     VP/J  P     NSg/J/P D   N🅪Sg/VB+ . NPr/J/R/P D/P NPr/I/J/Dq NSg/VB/C/P ISg/#r+ VP/J  D/P NSg/VB/J/R NSg/J\n> sob    , and  saw     that         the tears   were     overflowing down        his     face    .\n# NSg/VB . VB/C NSg/VPt NSg/I/C/Ddem D   NPl/V3+ NSg/VLPt Nᴹ/Vg/J     N🅪Sg/VB/J/P ISg/D$+ NSg/VB+ .\n>\n#\n> “ The God     damned coward   ! ” he       whimpered . “ He       didn’t even       stop   his     car  . ”\n# . D+  NPr/VB+ VP/J   NPr/VB/J . . NPr/ISg+ VP/J      . . NPr/ISg+ VXPt   NSg/VB/J/R NSg/VB ISg/D$+ NSg+ . .\n>\n#\n> The Buchanans ’ house   floated suddenly toward us       through the dark     rustling trees   .\n# D   ?         . NPr/VB+ VP/J    R        J/P    NPr/IPl+ NSg/J/P D   NSg/VB/J Nᴹ/Vg/J  NPl/V3+ .\n> Tom     stopped beside the porch and  looked up         at    the second    floor   , where   two\n# NPr/VB+ VP/J    P      D+  NSg+  VB/C VP/J   NSg/VB/J/P NSg/P D+  NSg/VB/J+ NSg/VB+ . NSg/R/C NSg+\n> windows   bloomed with light      among the vines .\n# NPrPl/V3+ VP/J    P    N🅪Sg/VB/J+ P     D   NPl   .\n>\n#\n> “ Daisy’s home      , ” he       said . As    we   got out          of the car  he       glanced at    me       and  frowned\n# . NPr$    NSg/VB/J+ . . NPr/ISg+ VP/J . R/C/P IPl+ VP  NSg/VB/J/R/P P  D+  NSg+ NPr/ISg+ VP/J    NSg/P NPr/ISg+ VB/C VP/J\n> slightly .\n# R        .\n>\n#\n> “ I       ought     to have    dropped you    in        West      Egg      , Nick    . There’s nothing  we   can     do\n# . ISg/#r+ NSg/I/VXB P  NSg/VXB VP/J    ISgPl+ NPr/J/R/P NPr/VB/J+ N🅪Sg/VB+ . NPr/VB+ . K       NSg/I/J+ IPl+ NPr/VXB VXB\n> to - night    . ”\n# P  . N🅪Sg/VB+ . .\n>\n#\n> A    change   had come       over    him  , and  he       spoke   gravely , and  with decision . As    we\n# D/P+ N🅪Sg/VB+ VP  NSg/VBPp/P NSg/J/P ISg+ . VB/C NPr/ISg+ NSg/VPt R       . VB/C P    NSg/VB+  . R/C/P IPl+\n> walked across the moonlight gravel   to the porch he       disposed of the situation in\n# VP/J   NSg/P  D+  N🅪Sg/VB+  Nᴹ/VB/J+ P  D+  NSg+  NPr/ISg+ VP/J     P  D+  NSg+      NPr/J/R/P\n> a   few      brisk phrases .\n# D/P NSg/I/Dq VB/J  NPl/V3+ .\n>\n#\n> “ I’ll telephone for   a   taxi    to take   you    home      , and  while      you’re waiting you    and\n# . K    NSg/VB+   R/C/P D/P NSg/VB+ P  NSg/VB ISgPl+ NSg/VB/J+ . VB/C NSg/VB/C/P K      Nᴹ/Vg/J ISgPl+ VB/C\n> Jordan better     go       in        the kitchen and  have    them     get    you    some     supper  — if    you    want\n# NPr+   NSg/VXB/JC NSg/VB/J NPr/J/R/P D   NSg/VB+ VB/C NSg/VXB NSg/IPl+ NSg/VB ISgPl+ I/J/R/Dq NSg/VB+ . NSg/C ISgPl+ NSg/VB\n> any    . ” He       opened the door    . “ Come       in        . ”\n# I/R/Dq . . NPr/ISg+ VP/J   D+  NSg/VB+ . . NSg/VBPp/P NPr/J/R/P . .\n>\n#\n> “ No       , thanks  . But     I’d be       glad     if    you’d order    me       the taxi    . I’ll wait   outside   . ”\n# . NSg/Dq/P . NPl/V3+ . NSg/C/P K   NSg/VLXB NSg/VB/J NSg/C K     N🅪Sg/VB+ NPr/ISg+ D   NSg/VB+ . K    NSg/VB Nᴹ/VB/J/P . .\n>\n#\n> Jordan put     her     hand    on  my  arm       .\n# NPr+   NSg/VBP ISg/D$+ NSg/VB+ J/P D$+ NSg/VB/J+ .\n>\n#\n> “ Won’t you    come       in        , Nick    ? ”\n# . VXB   ISgPl+ NSg/VBPp/P NPr/J/R/P . NPr/VB+ . .\n>\n#\n> “ No       , thanks  . ”\n# . NSg/Dq/P . NPl/V3+ . .\n>\n#\n> I       was  feeling   a   little     sick     and  I       wanted to be       alone . But     Jordan lingered for   a\n# ISg/#r+ VLPt N🅪Sg/Vg/J D/P NPr/I/J/Dq NSg/VB/J VB/C ISg/#r+ VP/J   P  NSg/VLXB J     . NSg/C/P NPr+   VP/J     R/C/P D/P\n> moment more         .\n# NSg+   NPr/I/J/R/Dq .\n>\n#\n> “ It’s only  half      - past       nine , ” she  said .\n# . K    J/R/C N🅪Sg/J/P+ . NSg/VB/J/P NSg  . . ISg+ VP/J .\n>\n#\n> I’d be       damned if    I’d go       in        ; I’d had enough of all          of them     for   one     day     , and\n# K   NSg/VLXB VP/J   NSg/C K   NSg/VB/J NPr/J/R/P . K   VP  NSg/I  P  NSg/I/J/C/Dq P  NSg/IPl+ R/C/P NSg/I/J NPr🅪Sg+ . VB/C\n> suddenly that          included Jordan too . She  must    have    seen    something of this    in        my\n# R        NSg/I/C/Ddem+ VP/J     NPr+   R   . ISg+ NSg/VXB NSg/VXB NSg/VPp NSg/I/J+  P  I/Ddem+ NPr/J/R/P D$+\n> expression , for   she  turned abruptly away and  ran     up         the porch steps   into the\n# N🅪Sg+      . R/C/P ISg+ VP/J   R        VB/J VB/C NSg/VPt NSg/VB/J/P D+  NSg+  NPl/V3+ P    D+\n> house   . I       sat      down        for   a   few       minutes with my  head      in        my  hands   , until I       heard the\n# NPr/VB+ . ISg/#r+ NSg/VP/J N🅪Sg/VB/J/P R/C/P D/P NSg/I/Dq+ NPl/V3+ P    D$+ NPr/VB/J+ NPr/J/R/P D$+ NPl/V3+ . C/P   ISg/#r+ VP/J  D+\n> phone   taken up         inside  and  the butler’s voice   calling a   taxi    . Then      I       walked\n# NSg/VB+ VPp/J NSg/VB/J/P NSg/J/P VB/C D   NPr$     NSg/VB+ Nᴹ/Vg/J D/P NSg/VB+ . NSg/J/R/C ISg/#r+ VP/J\n> slowly down        the drive   away from the house   , intending to wait   by    the gate    .\n# R      N🅪Sg/VB/J/P D   N🅪Sg/VB VB/J P    D+  NPr/VB+ . Nᴹ/Vg/J   P  NSg/VB NSg/P D+  NSg/VB+ .\n>\n#\n> I       hadn’t gone    twenty yards   when    I       heard my  name    and  Gatsby stepped from between\n# ISg/#r+ VPt    VPp/J/P NSg    NPl/V3+ NSg/I/C ISg/#r+ VP/J  D$+ NSg/VB+ VB/C NPr    J       P    NSg/P\n> two bushes  into the path    . I       must    have    felt      pretty     weird    by    that          time       , because I\n# NSg NPl/V3+ P    D   NSg/VB+ . ISg/#r+ NSg/VXB NSg/VXB N🅪Sg/VP/J NSg/VB/J/R NSg/VB/J NSg/P NSg/I/C/Ddem+ N🅪Sg/VB/J+ . C/P     ISg/#r+\n> could   think  of nothing  except the luminosity of his     pink      suit    under   the moon    .\n# NSg/VXB NSg/VB P  NSg/I/J+ VB/C/P D   Nᴹ         P  ISg/D$+ N🅪Sg/VB/J NSg/VB+ NSg/J/P D   NPr/VB+ .\n>\n#\n> “ What   are you    doing   ? ” I       inquired .\n# . NSg/I+ VLB ISgPl+ Nᴹ/Vg/J . . ISg/#r+ VP/J     .\n>\n#\n> “ Just standing here , old    sport   . ”\n# . J/R  Nᴹ/Vg/J  J/R  . NSg/J+ NSg/VB+ . .\n>\n#\n> Somehow , that          seemed a   despicable occupation . For   all           I       knew he       was  going   to rob\n# R       . NSg/I/C/Ddem+ VP/J   D/P NSg/J      N🅪Sg+      . R/C/P NSg/I/J/C/Dq+ ISg/#r+ VPt  NPr/ISg+ VLPt Nᴹ/Vg/J P  NPr/VB+\n> the house   in        a    moment ; I       wouldn’t have    been     surprised to see    sinister faces   , the\n# D+  NPr/VB+ NPr/J/R/P D/P+ NSg+   . ISg/#r+ VXB      NSg/VXB NSg/VLPp VP/J      P  NSg/VB J        NPl/V3+ . D\n> faces  of “ Wolfshiem’s people  , ” behind  him  in        the dark     shrubbery .\n# NPl/V3 P  . ?           NPl/VB+ . . NSg/J/P ISg+ NPr/J/R/P D   NSg/VB/J NSg       .\n>\n#\n> “ Did  you    see    any    trouble  on  the road    ? ” he       asked after a    minute    .\n# . VXPt ISgPl+ NSg/VB I/R/Dq N🅪Sg/VB+ J/P D+  N🅪Sg/J+ . . NPr/ISg+ VP/J  P     D/P+ NSg/VB/J+ .\n>\n#\n> “ Yes    . ”\n# . NPl/VB . .\n>\n#\n> He       hesitated .\n# NPr/ISg+ VP/J      .\n>\n#\n> “ Was  she  killed ? ”\n# . VLPt ISg+ VP/J   . .\n>\n#\n> “ Yes    . ”\n# . NPl/VB . .\n>\n#\n> “ I       thought so          ; I       told Daisy I       thought so          . It’s better     that         the shock   should all\n# . ISg/#r+ N🅪Sg/VP NSg/I/J/R/C . ISg/#r+ VP   NPr+  ISg/#r+ N🅪Sg/VP NSg/I/J/R/C . K    NSg/VXB/JC NSg/I/C/Ddem D   N🅪Sg/J+ VXB    NSg/I/J/C/Dq\n> come        at    once  . She  stood it       pretty     well       . ”\n# NSg/VBPp/P+ NSg/P NSg/C . ISg+ VP    NPr/ISg+ NSg/VB/J/R NSg/VB/J/R . .\n>\n#\n> He       spoke   as    if    Daisy’s reaction   was  the only  thing that          mattered .\n# NPr/ISg+ NSg/VPt R/C/P NSg/C NPr$    N🅪Sg/VB/J+ VLPt D   J/R/C NSg+  NSg/I/C/Ddem+ VP/J     .\n>\n#\n> “ I       got to West      Egg      by    a    side      road    , ” he       went    on  , “ and  left     the car  in        my  garage  .\n# . ISg/#r+ VP  P  NPr/VB/J+ N🅪Sg/VB+ NSg/P D/P+ NSg/VB/J+ N🅪Sg/J+ . . NPr/ISg+ NSg/VPt J/P . . VB/C NPr/VP/J D+  NSg+ NPr/J/R/P D$+ NSg/VB+ .\n> I       don’t think  anybody saw     us       , but     of course  I       can’t be       sure . ”\n# ISg/#r+ VXB   NSg/VB NSg/I+  NSg/VPt NPr/IPl+ . NSg/C/P P  NSg/VB+ ISg/#r+ VXB   NSg/VLXB J    . .\n>\n#\n> I       disliked him  so          much         by    this    time       that          I       didn’t find   it       necessary to tell   him\n# ISg/#r+ VP/J     ISg+ NSg/I/J/R/C NSg/I/J/R/Dq NSg/P I/Ddem+ N🅪Sg/VB/J+ NSg/I/C/Ddem+ ISg/#r+ VXPt   NSg/VB NPr/ISg+ NSg/J     P  NPr/VB ISg+\n> he       was  wrong      .\n# NPr/ISg+ VLPt NSg/VB/J/R .\n>\n#\n> “ Who    was  the woman   ? ” he       inquired .\n# . NPr/I+ VLPt D   NSg/VB+ . . NPr/ISg+ VP/J     .\n>\n#\n> “ Her     name    was  Wilson . Her     husband owns   the garage  . How   the devil   did  it       happen ? ”\n# . ISg/D$+ NSg/VB+ VLPt NPr+   . ISg/D$+ NSg/VB+ NPl/V3 D+  NSg/VB+ . NSg/C D+  NPr/VB+ VXPt NPr/ISg+ VB     . .\n>\n#\n> “ Well       , I       tried to swing  the wheel   — ” He       broke     off        , and  suddenly I       guessed at    the\n# . NSg/VB/J/R . ISg/#r+ VP/J  P  NSg/VB D+  NSg/VB+ . . NPr/ISg+ NSg/VPt/J NSg/VB/J/P . VB/C R        ISg/#r+ VP/J    NSg/P D+\n> truth    .\n# N🅪Sg/VB+ .\n>\n#\n> “ Was  Daisy driving ? ”\n# . VLPt NPr+  Nᴹ/Vg/J . .\n>\n#\n> “ Yes    , ” he       said after a    moment , “ but     of course  I'll say    I       was  . You    see    , when    we\n# . NPl/VB . . NPr/ISg+ VP/J P     D/P+ NSg+   . . NSg/C/P P  NSg/VB+ K    NSg/VB ISg/#r+ VLPt . ISgPl+ NSg/VB . NSg/I/C IPl+\n> left     New    York she  was  very nervous and  she  thought it       would steady   her     to\n# NPr/VP/J NSg/J+ NPr+ ISg+ VLPt J/R  J       VB/C ISg+ N🅪Sg/VP NPr/ISg+ VXB   NSg/VB/J ISg/D$+ P\n> drive   — and  this    woman   rushed out          at    us       just as    we   were     passing a    car  coming  the\n# N🅪Sg/VB . VB/C I/Ddem+ NSg/VB+ VP/J   NSg/VB/J/R/P NSg/P NPr/IPl+ J/R  R/C/P IPl+ NSg/VLPt Nᴹ/Vg/J D/P+ NSg+ Nᴹ/Vg/J D+\n> other     way    . It       all          happened in        a    minute    , but     it       seemed to me       that         she  wanted to\n# NSg/VB/J+ NSg/J+ . NPr/ISg+ NSg/I/J/C/Dq VP/J     NPr/J/R/P D/P+ NSg/VB/J+ . NSg/C/P NPr/ISg+ VP/J   P  NPr/ISg+ NSg/I/C/Ddem ISg+ VP/J   P\n> speak  to us       , thought we   were     somebody she  knew . Well       , first  Daisy turned away\n# NSg/VB P  NPr/IPl+ . N🅪Sg/VP IPl+ NSg/VLPt NSg/I+   ISg+ VPt  . NSg/VB/J/R . NSg/J+ NPr+  VP/J   VB/J\n> from the woman   toward the other     car  , and  then      she  lost her     nerve   and  turned\n# P    D+  NSg/VB+ J/P    D+  NSg/VB/J+ NSg+ . VB/C NSg/J/R/C ISg+ VP/J ISg/D$+ NSg/VB+ VB/C VP/J\n> back     . The second    my  hand    reached the wheel   I       felt      the shock   — it       must    have    killed\n# NSg/VB/J . D+  NSg/VB/J+ D$+ NSg/VB+ VP/J    D+  NSg/VB+ ISg/#r+ N🅪Sg/VP/J D+  N🅪Sg/J+ . NPr/ISg+ NSg/VXB NSg/VXB VP/J\n> her     instantly . ”\n# ISg/D$+ R         . .\n>\n#\n> “ It       ripped her     open     — — — ”\n# . NPr/ISg+ VP/J   ISg/D$+ NSg/VB/J . . . .\n>\n#\n> “ Don’t tell   me       , old   sport   . ” He       winced . “ Anyhow — Daisy stepped on  it       . I       tried to\n# . VXB   NPr/VB NPr/ISg+ . NSg/J NSg/VB+ . . NPr/ISg+ VP/J   . . J      . NPr+  J       J/P NPr/ISg+ . ISg/#r+ VP/J  P\n> make   her     stop   , but     she  couldn’t , so          I       pulled on  the emergency brake  . Then      she\n# NSg/VB ISg/D$+ NSg/VB . NSg/C/P ISg+ VXB      . NSg/I/J/R/C ISg/#r+ VP/J   J/P D   N🅪Sg+     NSg/VB . NSg/J/R/C ISg+\n> fell      over    into my  lap       and  I       drove   on  .\n# NSg/VPt/J NSg/J/P P    D$+ NSg/VB/J+ VB/C ISg/#r+ NSg/VPt J/P .\n>\n#\n> “ She'll be       all          right     to - morrow , ” he       said presently . “ I’m just going   to wait   here\n# . K      NSg/VLXB NSg/I/J/C/Dq NPr/VB/J+ P  . NPr/VB . . NPr/ISg+ VP/J R         . . K   J/R  Nᴹ/Vg/J P  NSg/VB J/R\n> and  see    if    he       tries  to bother her     about that          unpleasantness this   afternoon .\n# VB/C NSg/VB NSg/C NPr/ISg+ NPl/V3 P  Nᴹ/VB  ISg/D$+ J/P   NSg/I/C/Ddem+ NSg            I/Ddem N🅪Sg+     .\n> She’s locked herself into her     room       , and  if    he       tries  any    brutality she’s going   to\n# K     VP/J   ISg+    P    ISg/D$+ N🅪Sg/VB/J+ . VB/C NSg/C NPr/ISg+ NPl/V3 I/R/Dq Nᴹ+       K     Nᴹ/Vg/J P\n> turn   the light      out          and  on  again . ”\n# NSg/VB D   N🅪Sg/VB/J+ NSg/VB/J/R/P VB/C J/P P     . .\n>\n#\n> “ He       won’t touch   her     , ” I       said . “ He’s not     thinking about her     . ”\n# . NPr/ISg+ VXB   N🅪Sg/VB ISg/D$+ . . ISg/#r+ VP/J . . NPr$ NSg/R/C Nᴹ/Vg/J  J/P   ISg/D$+ . .\n>\n#\n> “ I       don’t trust     him  , old   sport   . ”\n# . ISg/#r+ VXB   N🅪Sg/VB/J ISg+ . NSg/J NSg/VB+ . .\n>\n#\n> “ How   long     are you    going   to wait   ? ”\n# . NSg/C NPr/VB/J VLB ISgPl+ Nᴹ/Vg/J P  NSg/VB . .\n>\n#\n> “ All           night    , if    necessary . Anyhow , till       they all          go       to bed       . ”\n# . NSg/I/J/C/Dq+ N🅪Sg/VB+ . NSg/C NSg/J     . J      . NSg/VB/C/P IPl+ NSg/I/J/C/Dq NSg/VB/J P  NSg/VBP/J . .\n>\n#\n> A   new   point  of view    occurred to me       . Suppose Tom     found  out          that         Daisy had been\n# D/P NSg/J NSg/VB P  NSg/VB+ VP       P  NPr/ISg+ . VB      NPr/VB+ NSg/VP NSg/VB/J/R/P NSg/I/C/Ddem NPr+  VP  NSg/VLPp\n> driving . He       might    think  he       saw     a    connection in        it       — he       might    think  anything  . I\n# Nᴹ/Vg/J . NPr/ISg+ Nᴹ/VXB/J NSg/VB NPr/ISg+ NSg/VPt D/P+ N🅪Sg+      NPr/J/R/P NPr/ISg+ . NPr/ISg+ Nᴹ/VXB/J NSg/VB NSg/I/VB+ . ISg/#r+\n> looked at    the house   ; there were     two or    three bright   windows   down        - stairs and  the\n# VP/J   NSg/P D+  NPr/VB+ . R+    NSg/VLPt NSg NPr/C NSg   NPr/VB/J NPrPl/V3+ N🅪Sg/VB/J/P . NPl    VB/C D\n> pink      glow   from Daisy’s room       on  the second   floor   .\n# N🅪Sg/VB/J NSg/VB P    NPr$    N🅪Sg/VB/J+ J/P D   NSg/VB/J NSg/VB+ .\n>\n#\n> “ You    wait   here , ” I       said . “ I’ll see    if    there’s any    sign   of a   commotion . ”\n# . ISgPl+ NSg/VB J/R  . . ISg/#r+ VP/J . . K    NSg/VB NSg/C K       I/R/Dq NSg/VB P  D/P N🅪Sg      . .\n>\n#\n> I       walked back     along the border of the lawn    , traversed the gravel   softly , and\n# ISg/#r+ VP/J   NSg/VB/J P     D   NSg/VB P  D+  NSg/VB+ . VP/J      D+  Nᴹ/VB/J+ R      . VB/C\n> tiptoed up         the veranda      steps   . The drawing    - room       curtains were     open     , and  I       saw\n# VP/J    NSg/VB/J/P D   NSg/NoAm/Br+ NPl/V3+ . D   N🅪Sg/Vg/J+ . N🅪Sg/VB/J+ NPl/V3+  NSg/VLPt NSg/VB/J . VB/C ISg/#r+ NSg/VPt\n> that         the room       was  empty    . Crossing the porch where   we   had dined that         June night\n# NSg/I/C/Ddem D+  N🅪Sg/VB/J+ VLPt NSg/VB/J . Nᴹ/Vg/J  D+  NSg+  NSg/R/C IPl+ VP  VP/J  NSg/I/C/Ddem NPr+ N🅪Sg/VB+\n> three months before , I       came      to a   small    rectangle of light      which I       guessed was\n# NSg+  NPl+   C/P    . ISg/#r+ NSg/VPt/P P  D/P NPr/VB/J NSg/J     P  N🅪Sg/VB/J+ I/C+  ISg/#r+ VP/J    VLPt\n> the pantry window  . The blind    was  drawn , but     I       found  a   rift    at    the sill   .\n# D+  NSg+   NSg/VB+ . D   NSg/VB/J VLPt VPp/J . NSg/C/P ISg/#r+ NSg/VP D/P NSg/VB+ NSg/P D+  NSg/J+ .\n>\n#\n> Daisy and  Tom     were     sitting  opposite each other    at    the kitchen table   , with a\n# NPr   VB/C NPr/VB+ NSg/VLPt NSg/Vg/J NSg/J/P  Dq   NSg/VB/J NSg/P D+  NSg/VB+ NSg/VB+ . P    D/P\n> plate  of cold  fried chicken   between them     , and  two bottles of ale   . He       was  talking\n# NSg/VB P  NSg/J VP/J  N🅪Sg/VB/J NSg/P   NSg/IPl+ . VB/C NSg NPl/V3  P  N🅪Sg+ . NPr/ISg+ VLPt Nᴹ/Vg/J\n> intently across the table   at    her     , and  in        his     earnestness his     hand    had fallen\n# R        NSg/P  D   NSg/VB+ NSg/P ISg/D$+ . VB/C NPr/J/R/P ISg/D$+ NSg         ISg/D$+ NSg/VB+ VP  VPp/J\n> upon and  covered her     own      . Once  in        a    while       she  looked up         at    him  and  nodded in\n# P    VB/C VP/J    ISg/D$+ NSg/VB/J . NSg/C NPr/J/R/P D/P+ NSg/VB/C/P+ ISg+ VP/J   NSg/VB/J/P NSg/P ISg+ VB/C VP     NPr/J/R/P\n> agreement .\n# N🅪Sg+     .\n>\n#\n> They weren’t happy    , and  neither of them     had touched the chicken   or    the ale   — and\n# IPl+ VPt     NSg/VB/J . VB/C I/C     P  NSg/IPl+ VP  VP/J    D   N🅪Sg/VB/J NPr/C D   N🅪Sg+ . VB/C\n> yet      they weren’t unhappy  either . There was  an  unmistakable air     of natural\n# NSg/VB/C IPl+ VPt     NSg/VB/J I/C    . R+    VLPt D/P J            N🅪Sg/VB P  NSg/J\n> intimacy about the picture , and  anybody would have    said that         they were\n# Nᴹ       J/P   D+  NSg/VB+ . VB/C NSg/I+  VXB   NSg/VXB VP/J NSg/I/C/Ddem IPl+ NSg/VLPt\n> conspiring together .\n# Nᴹ/Vg/J    J        .\n>\n#\n> As    I       tiptoed from the porch I       heard my  taxi    feeling   its     way    along the dark     road\n# R/C/P ISg/#r+ VP/J    P    D   NSg+  ISg/#r+ VP/J  D$+ NSg/VB+ N🅪Sg/Vg/J ISg/D$+ NSg/J+ P     D   NSg/VB/J N🅪Sg/J+\n> toward the house   . Gatsby was  waiting where   I       had left     him  in        the drive    .\n# J/P    D   NPr/VB+ . NPr    VLPt Nᴹ/Vg/J NSg/R/C ISg/#r+ VP  NPr/VP/J ISg+ NPr/J/R/P D   N🅪Sg/VB+ .\n>\n#\n> “ Is  it       all          quiet     up         there ? ” he       asked anxiously .\n# . VL3 NPr/ISg+ NSg/I/J/C/Dq N🅪Sg/VB/J NSg/VB/J/P R     . . NPr/ISg+ VP/J  R         .\n>\n#\n> “ Yes    , it’s all          quiet     . ” I       hesitated . “ You’d better     come       home      and  get    some     sleep    . ”\n# . NPl/VB . K    NSg/I/J/C/Dq N🅪Sg/VB/J . . ISg/#r+ VP/J      . . K     NSg/VXB/JC NSg/VBPp/P NSg/VB/J+ VB/C NSg/VB I/J/R/Dq N🅪Sg/VB+ . .\n>\n#\n> He       shook     his     head      .\n# NPr/ISg+ NSg/VPt/J ISg/D$+ NPr/VB/J+ .\n>\n#\n> “ I       want   to wait   here till       Daisy goes   to bed       . Good      night    , old    sport   . ”\n# . ISg/#r+ NSg/VB P  NSg/VB J/R  NSg/VB/C/P NPr+  NPl/V3 P  NSg/VBP/J . NPr/VB/J+ N🅪Sg/VB+ . NSg/J+ NSg/VB+ . .\n>\n#\n> He       put     his     hands   in        his     coat    pockets and  turned back     eagerly to his     scrutiny of\n# NPr/ISg+ NSg/VBP ISg/D$+ NPl/V3+ NPr/J/R/P ISg/D$+ NSg/VB+ NPl/V3+ VB/C VP/J   NSg/VB/J R       P  ISg/D$+ NSg/VB   P\n> the house   , as    though my  presence marred the sacredness of the vigil  . So          I       walked\n# D   NPr/VB+ . R/C/P C      D$+ N🅪Sg/VB+ VP/J   D   NSg        P  D   NSg/VB . NSg/I/J/R/C ISg/#r+ VP/J\n> away and  left     him  standing there in        the moonlight — watching over    nothing  .\n# VB/J VB/C NPr/VP/J ISg+ Nᴹ/Vg/J  R     NPr/J/R/P D+  N🅪Sg/VB+  . Nᴹ/Vg/J  NSg/J/P NSg/I/J+ .\n>\n#\n>              CHAPTER VIII\n# HeadingStart NSg/VB+ #r\n>\n#\n> I       couldn’t sleep    all          night    ; a   fog      - horn    was  groaning incessantly on  the Sound      ,\n# ISg/#r+ VXB      N🅪Sg/VB+ NSg/I/J/C/Dq N🅪Sg/VB+ . D/P N🅪Sg/VB+ . NPr/VB+ VLPt Nᴹ/Vg/J  R           J/P D   N🅪Sg/VB/J+ .\n> and  I       tossed half      - sick     between grotesque reality and  savage    , frightening dreams  .\n# VB/C ISg/#r+ VP/J   N🅪Sg/J/P+ . NSg/VB/J NSg/P   NSg/J     N🅪Sg    VB/C NPr/VB/J+ . Nᴹ/Vg/J     NPl/V3+ .\n> Toward dawn       I       heard a    taxi    go       up         Gatsby’s drive   , and  immediately I       jumped out          of\n# J/P    NPr🅪Sg/VB+ ISg/#r+ VP/J  D/P+ NSg/VB+ NSg/VB/J NSg/VB/J/P NPr$     N🅪Sg/VB . VB/C R           ISg/#r+ VP/J   NSg/VB/J/R/P P\n> bed        and  began to dress  — I       felt      that         I       had something to tell   him  , something to\n# NSg/VBP/J+ VB/C VPt   P  NSg/VB . ISg/#r+ N🅪Sg/VP/J NSg/I/C/Ddem ISg/#r+ VP  NSg/I/J+  P  NPr/VB ISg+ . NSg/I/J+  P\n> warn him  about , and  morning    would be       too late  .\n# VB   ISg+ J/P   . VB/C N🅪Sg/Vg/J+ VXB   NSg/VLXB R   NSg/J .\n>\n#\n> Crossing his     lawn    , I       saw     that         his     front     door    was  still      open     and  he       was  leaning\n# Nᴹ/Vg/J  ISg/D$+ NSg/VB+ . ISg/#r+ NSg/VPt NSg/I/C/Ddem ISg/D$+ NSg/VB/J+ NSg/VB+ VLPt NSg/VB/J/R NSg/VB/J VB/C NPr/ISg+ VLPt Nᴹ/Vg/J\n> against a   table   in        the hall , heavy    with dejection or    sleep    .\n# C/P     D/P NSg/VB+ NPr/J/R/P D+  NPr+ . NSg/VB/J P    Nᴹ        NPr/C N🅪Sg/VB+ .\n>\n#\n> “ Nothing  happened , ” he       said wanly . “ I       waited , and  about four o’clock she  came      to\n# . NSg/I/J+ VP/J     . . NPr/ISg+ VP/J R     . . ISg/#r+ VP/J   . VB/C J/P   NSg  R       ISg+ NSg/VPt/P P\n> the window  and  stood there for   a    minute    and  then      turned out          the light      . ”\n# D+  NSg/VB+ VB/C VP    R     R/C/P D/P+ NSg/VB/J+ VB/C NSg/J/R/C VP/J   NSg/VB/J/R/P D+  N🅪Sg/VB/J+ . .\n>\n#\n> His     house   had never seemed so          enormous to me       as    it       did  that          night    when    we   hunted\n# ISg/D$+ NPr/VB+ VP  R     VP/J   NSg/I/J/R/C J        P  NPr/ISg+ R/C/P NPr/ISg+ VXPt NSg/I/C/Ddem+ N🅪Sg/VB+ NSg/I/C IPl+ VP/J\n> through the great rooms  for   cigarettes . We   pushed aside curtains that          were     like\n# NSg/J/P D   NSg/J NPl/V3 R/C/P NPl/V3+    . IPl+ VP/J   NSg/J NPl/V3   NSg/I/C/Ddem+ NSg/VLPt NSg/VB/J/C/P\n> pavilions , and  felt      over    innumerable feet of dark     wall    for   electric light\n# NPl/V3    . VB/C N🅪Sg/VP/J NSg/J/P J           NPl  P  NSg/VB/J NPr/VB+ R/C/P NSg/J    N🅪Sg/VB/J+\n> switches — once  I       tumbled with a   sort   of splash  upon the keys   of a   ghostly piano     .\n# NPl/V3+  . NSg/C ISg/#r+ VP/J    P    D/P NSg/VB P  NSg/VB+ P    D   NPl/V3 P  D/P J/R     NSg/VB/J+ .\n> There was  an  inexplicable amount of dust   everywhere , and  the rooms   were     musty    ,\n# R+    VLPt D/P J            NSg/VB P  Nᴹ/VB+ Nᴹ/R       . VB/C D   NPl/V3+ NSg/VLPt NSg/VB/J .\n> as    though they hadn’t been     aired for   many       days . I       found  the humidor on  an\n# R/C/P C      IPl+ VPt    NSg/VLPp VP/J  R/C/P NSg/I/J/Dq NPl+ . ISg/#r+ NSg/VP D   NSg     J/P D/P\n> unfamiliar table   , with two stale    , dry      cigarettes inside  . Throwing open     the\n# NSg/J      NSg/VB+ . P    NSg NSg/VB/J . NSg/VB/J NPl/V3+    NSg/J/P . Nᴹ/Vg/J  NSg/VB/J D\n> French      windows  of the drawing    - room       , we   sat      smoking  out          into the darkness .\n# NPr🅪Sg/VB/J NPrPl/V3 P  D   N🅪Sg/Vg/J+ . N🅪Sg/VB/J+ . IPl+ NSg/VP/J Nᴹ/Vg/J+ NSg/VB/J/R/P P    D+  Nᴹ+      .\n>\n#\n> “ You    ought     to go       away , ” I       said . “ It’s pretty     certain they'll trace   your car  . ”\n# . ISgPl+ NSg/I/VXB P  NSg/VB/J VB/J . . ISg/#r+ VP/J . . K    NSg/VB/J/R I/J     K       NSg/VB+ D$+  NSg+ . .\n>\n#\n> “ Go       away now       , old    sport   ? ”\n# . NSg/VB/J VB/J NSg/J/R/C . NSg/J+ NSg/VB+ . .\n>\n#\n> “ Go       to Atlantic City for   a    week   , or    up         to Montreal . ”\n# . NSg/VB/J P  NPr/J    NSg+ R/C/P D/P+ NSg/J+ . NPr/C NSg/VB/J/P P  NPr      . .\n>\n#\n> He       wouldn’t consider it       . He       couldn’t possibly leave  Daisy until he       knew what   she\n# NPr/ISg+ VXB      VB       NPr/ISg+ . NPr/ISg+ VXB      R        NSg/VB NPr+  C/P   NPr/ISg+ VPt  NSg/I+ ISg+\n> was  going   to do  . He       was  clutching at    some     last     hope      and  I       couldn’t bear      to shake\n# VLPt Nᴹ/Vg/J P  VXB . NPr/ISg+ VLPt Nᴹ/Vg/J   NSg/P I/J/R/Dq NSg/VB/J NPr🅪Sg/VB VB/C ISg/#r+ VXB      NSg/VB/J+ P  NSg/VB\n> him  free     .\n# ISg+ NSg/VB/J .\n>\n#\n> It       was  this   night    that          he       told me       the strange  story  of his     youth with Dan\n# NPr/ISg+ VLPt I/Ddem N🅪Sg/VB+ NSg/I/C/Ddem+ NPr/ISg+ VP   NPr/ISg+ D   NSg/VB/J NSg/VB P  ISg/D$+ NSg   P    NPr+\n> Cody — told it       to me       because “ Jay  Gatsby ” had broken up         like         glass      against Tom’s\n# NPr  . VP   NPr/ISg+ P  NPr/ISg+ C/P     . NPr+ NPr    . VP  VPp/J  NSg/VB/J/P NSg/VB/J/C/P NPr🅪Sg/VB+ C/P     NPr$\n> hard     malice , and  the long     secret   extravaganza was  played out          . I       think  that         he\n# N🅪Sg/J/R NSg/VB . VB/C D   NPr/VB/J NSg/VB/J NSg          VLPt VP/J   NSg/VB/J/R/P . ISg/#r+ NSg/VB NSg/I/C/Ddem NPr/ISg+\n> would have    acknowledged anything  now       , without reserve , but     he       wanted to talk\n# VXB   NSg/VXB VP/J         NSg/I/VB+ NSg/J/R/C . C/P     NSg/VB+ . NSg/C/P NPr/ISg+ VP/J   P  N🅪Sg/VB\n> about Daisy .\n# J/P   NPr+  .\n>\n#\n> She  was  the first “ nice  ” girl    he       had ever known . In        various unrevealed\n# ISg+ VLPt D   NSg/J . NPr/J . NSg/VB+ NPr/ISg+ VP  J/R  VPp/J . NPr/J/R/P J       VP/J\n> capacities he       had come       in        contact  with such  people  , but     always with\n# NPl+       NPr/ISg+ VP  NSg/VBPp/P NPr/J/R/P N🅪Sg/VB+ P    NSg/I NPl/VB+ . NSg/C/P R      P\n> indiscernible barbed wire     between . He       found  her     excitingly desirable . He       went    to\n# J             VP/J   N🅪Sg/VB+ NSg/P   . NPr/ISg+ NSg/VP ISg/D$+ R          J         . NPr/ISg+ NSg/VPt P\n> her     house   , at    first with other    officers from Camp      Taylor , then      alone . It       amazed\n# ISg/D$+ NPr/VB+ . NSg/P NSg/J P    NSg/VB/J NPl/V3   P    NSg/VB/J+ NPr+   . NSg/J/R/C J     . NPr/ISg+ VP/J\n> him  — he       had never been     in        such  a    beautiful house   before . But     what   gave it       an  air\n# ISg+ . NPr/ISg+ VP  R     NSg/VLPp NPr/J/R/P NSg/I D/P+ NSg/J+    NPr/VB+ C/P    . NSg/C/P NSg/I+ VPt  NPr/ISg+ D/P N🅪Sg/VB\n> of breathless intensity , was  that          Daisy lived there — it       was  as    casual a   thing to\n# P  J+         Nᴹ+       . VLPt NSg/I/C/Ddem+ NPr+  VP/J  R     . NPr/ISg+ VLPt R/C/P NSg/J  D/P NSg   P\n> her     as    his     tent    out          at    camp      was  to him  . There was  a   ripe     mystery about it       , a\n# ISg/D$+ R/C/P ISg/D$+ NSg/VB+ NSg/VB/J/R/P NSg/P NSg/VB/J+ VLPt P  ISg+ . R+    VLPt D/P NSg/VB/J N🅪Sg    J/P   NPr/ISg+ . D/P\n> hint   of bedrooms up         - stairs more         beautiful and  cool     than other     bedrooms , of gay\n# NSg/VB P  NPl+     NSg/VB/J/P . NPl+   NPr/I/J/R/Dq NSg/J     VB/C NSg/VB/J C/P  NSg/VB/J+ NPl+     . P  NPr/VB/J\n> and  radiant activities taking   place    through its     corridors , and  of romances that\n# VB/C NSg/J+  NPl+       NSg/Vg/J N🅪Sg/VB+ NSg/J/P ISg/D$+ NPl+      . VB/C P  NPl/V3   NSg/I/C/Ddem+\n> were     not     musty    and  laid away already in        lavender but     fresh    and  breathing and\n# NSg/VLPt NSg/R/C NSg/VB/J VB/C VP/J VB/J R       NPr/J/R/P Nᴹ/VB/J  NSg/C/P NSg/VB/J VB/C Nᴹ/Vg/J   VB/C\n> redolent of this   year’s shining motor     - cars and  of dances  whose flowers   were\n# J        P  I/Ddem NSg$   Nᴹ/Vg/J NSg/VB/J+ . NPl  VB/C P  NPl/V3+ I+    NPrPl/V3+ NSg/VLPt\n> scarcely withered . It       excited him  , too , that         many        men  had already loved Daisy — it\n# R        VP/J     . NPr/ISg+ VP/J    ISg+ . R   . NSg/I/C/Ddem NSg/I/J/Dq+ NPl+ VP  R       VP/J  NPr+  . NPr/ISg+\n> increased her     value    in        his     eyes    . He       felt      their presence all          about the house   ,\n# VP/J      ISg/D$+ N🅪Sg/VB+ NPr/J/R/P ISg/D$+ NPl/V3+ . NPr/ISg+ N🅪Sg/VP/J D$+   N🅪Sg/VB  NSg/I/J/C/Dq J/P   D+  NPr/VB+ .\n> pervading the air      with the shades  and  echoes of still      vibrant emotions .\n# Nᴹ/Vg/J   D   N🅪Sg/VB+ P    D   NPl/V3+ VB/C NPl/VB P  NSg/VB/J/R NSg/J   NPl+     .\n>\n#\n> But     he       knew that         he       was  in        Daisy’s house   by    a   colossal accident . However\n# NSg/C/P NPr/ISg+ VPt  NSg/I/C/Ddem NPr/ISg+ VLPt NPr/J/R/P NPr$    NPr/VB+ NSg/P D/P J        NSg/J+   . C\n> glorious might    be       his     future as    Jay  Gatsby , he       was  at    present  a   penniless young\n# J        Nᴹ/VXB/J NSg/VLXB ISg/D$+ NSg/J+ R/C/P NPr+ NPr    . NPr/ISg+ VLPt NSg/P NSg/VB/J D/P J         NPr/VB/J\n> man       without a   past       , and  at    any    moment the invisible cloak  of his     uniform  might\n# NPr/VB/J+ C/P     D/P NSg/VB/J/P . VB/C NSg/P I/R/Dq NSg+   D   J         NSg/VB P  ISg/D$+ NSg/VB/J Nᴹ/VXB/J\n> slip   from his     shoulders . So          he       made the most         of his     time       . He       took what   he       could\n# NSg/VB P    ISg/D$+ NPl/V3+   . NSg/I/J/R/C NPr/ISg+ VP   D   NSg/I/J/R/Dq P  ISg/D$+ N🅪Sg/VB/J+ . NPr/ISg+ VPt  NSg/I+ NPr/ISg+ NSg/VXB\n> get    , ravenously and  unscrupulously — eventually he       took Daisy one     still      October\n# NSg/VB . R          VB/C R              . R          NPr/ISg+ VPt  NPr+  NSg/I/J NSg/VB/J/R NPr/VB+\n> night    , took her     because he       had no       real  right    to touch   her     hand    .\n# N🅪Sg/VB+ . VPt  ISg/D$+ C/P     NPr/ISg+ VP  NSg/Dq/P NSg/J NPr/VB/J P  N🅪Sg/VB ISg/D$+ NSg/VB+ .\n>\n#\n> He       might    have    despised himself , for   he       had certainly taken her     under   false\n# NPr/ISg+ Nᴹ/VXB/J NSg/VXB VP/J     ISg+    . R/C/P NPr/ISg+ VP  R         VPp/J ISg/D$+ NSg/J/P NSg/VB/J\n> pretenses . I       don’t mean     that         he       had traded on  his     phantom millions , but     he       had\n# NPl       . ISg/#r+ VXB   NSg/VB/J NSg/I/C/Ddem NPr/ISg+ VP  VP/J   J/P ISg/D$+ NSg/J+  NPl+     . NSg/C/P NPr/ISg+ VP\n> deliberately given       Daisy a   sense   of security ; he       let     her     believe that         he       was  a\n# R            NSg/VPp/J/P NPr+  D/P N🅪Sg/VB P  Nᴹ+      . NPr/ISg+ NSg/VBP ISg/D$+ VB      NSg/I/C/Ddem NPr/ISg+ VLPt D/P\n> person  from much         the same strata as    herself — that         he       was  fully able     to take   care\n# NSg/VB+ P    NSg/I/J/R/Dq D   I/J  NPl    R/C/P ISg+    . NSg/I/C/Ddem NPr/ISg+ VLPt R     NSg/VB/J P  NSg/VB N🅪Sg/VB\n> of her     . As    a   matter  of fact , he       had no        such   facilities — he       had no        comfortable\n# P  ISg/D$+ . R/C/P D/P N🅪Sg/VB P  NSg+ . NPr/ISg+ VP  NSg/Dq/P+ NSg/I+ NPl+       . NPr/ISg+ VP  NSg/Dq/P+ NSg/J+\n> family  standing behind  him  , and  he       was  liable at    the whim   of an  impersonal\n# N🅪Sg/J+ Nᴹ/Vg/J  NSg/J/P ISg+ . VB/C NPr/ISg+ VLPt J      NSg/P D   NSg/VB P  D/P NSg/J\n> government to be       blown anywhere about the world   .\n# N🅪Sg+      P  NSg/VLXB VPp/J NSg/I    J/P   D   NSg/VB+ .\n>\n#\n> But     he       didn’t despise himself and  it       didn’t turn   out          as    he       had imagined . He       had\n# NSg/C/P NPr/ISg+ VXPt   VB      ISg+    VB/C NPr/ISg+ VXPt   NSg/VB NSg/VB/J/R/P R/C/P NPr/ISg+ VP  VP/J     . NPr/ISg+ VP\n> intended , probably , to take   what   he       could   and  go       — but     now       he       found  that         he       had\n# NSg/VP/J . R        . P  NSg/VB NSg/I+ NPr/ISg+ NSg/VXB VB/C NSg/VB/J . NSg/C/P NSg/J/R/C NPr/ISg+ NSg/VP NSg/I/C/Ddem NPr/ISg+ VP\n> committed himself to the following   of a    grail . He       knew that         Daisy was\n# VP/J      ISg+    P  D   N🅪Sg/Vg/J/P P  D/P+ NSg+  . NPr/ISg+ VPt  NSg/I/C/Ddem NPr+  VLPt\n> extraordinary , but     he       didn’t realize      just how   extraordinary a   “ nice  ” girl    could\n# NSg/J         . NSg/C/P NPr/ISg+ VXPt   VB/Comm/NoAm J/R  NSg/C NSg/J         D/P . NPr/J . NSg/VB+ NSg/VXB\n> be       . She  vanished into her     rich      house   , into her     rich     , full      life     , leaving\n# NSg/VLXB . ISg+ VP/J     P    ISg/D$+ NPr/VB/J+ NPr/VB+ . P    ISg/D$+ NPr/VB/J . NSg/VB/J+ N🅪Sg/VB+ . Nᴹ/Vg/J\n> Gatsby — nothing  . He       felt      married  to her     , that          was  all          .\n# NPr    . NSg/I/J+ . NPr/ISg+ N🅪Sg/VP/J NSg/VP/J P  ISg/D$+ . NSg/I/C/Ddem+ VLPt NSg/I/J/C/Dq .\n>\n#\n> When    they met again , two  days later , it       was  Gatsby who    was  breathless , who    was  ,\n# NSg/I/C IPl+ VP  P     . NSg+ NPl+ JC    . NPr/ISg+ VLPt NPr    NPr/I+ VLPt J          . NPr/I+ VLPt .\n> somehow , betrayed . Her     porch was  bright   with the bought luxury of star    - shine    ;\n# R       . VP/J     . ISg/D$+ NSg+  VLPt NPr/VB/J P    D   NSg/VP N🅪Sg/J P  NSg/VB+ . N🅪Sg/VB+ .\n> the wicker of the settee squeaked fashionably as    she  turned toward him  and  he\n# D   NSg/JC P  D   NSg    VP/J     R           R/C/P ISg+ VP/J   J/P    ISg+ VB/C NPr/ISg+\n> kissed her     curious and  lovely mouth   . She  had caught a   cold  , and  it       made her\n# VP/J   ISg/D$+ J       VB/C NSg/J  NSg/VB+ . ISg+ VP  VP/J   D/P NSg/J . VB/C NPr/ISg+ VP   ISg/D$+\n> voice   huskier and  more         charming than ever , and  Gatsby was  overwhelmingly aware\n# NSg/VB+ JC      VB/C NPr/I/J/R/Dq Nᴹ/Vg/J  C/P  J/R  . VB/C NPr    VLPt R              VB/J\n> of the youth and  mystery that          wealth imprisons and  preserves , of the freshness\n# P  D   NSg   VB/C N🅪Sg+   NSg/I/C/Ddem+ N🅪Sg+  V3        VB/C NPl/V3    . P  D   NSg\n> of many       clothes , and  of Daisy , gleaming like         silver   , safe     and  proud above   the\n# P  NSg/I/J/Dq NPl/V3+ . VB/C P  NPr+  . Nᴹ/Vg/J  NSg/VB/J/C/P Nᴹ/VB/J+ . NSg/VB/J VB/C J     NSg/J/P D\n> hot      struggles of the poor     .\n# NSg/VB/J NPl/V3    P  D   NSg/VB/J .\n>\n#\n> “ I       can’t describe to you    how   surprised I       was  to find   out          I       loved her     , old   sport   .\n# . ISg/#r+ VXB   VB       P  ISgPl+ NSg/C VP/J      ISg/#r+ VLPt P  NSg/VB NSg/VB/J/R/P ISg/#r+ VP/J  ISg/D$+ . NSg/J NSg/VB+ .\n> I       even       hoped for   a    while       that          she’d throw  me       over    , but     she  didn’t , because she\n# ISg/#r+ NSg/VB/J/R VP/J  R/C/P D/P+ NSg/VB/C/P+ NSg/I/C/Ddem+ K     NSg/VB NPr/ISg+ NSg/J/P . NSg/C/P ISg+ VXPt   . C/P     ISg+\n> was  in        love      with me       too . She  thought I       knew a    lot     because I       knew different\n# VLPt NPr/J/R/P NPr🅪Sg/VB P    NPr/ISg+ R   . ISg+ N🅪Sg/VP ISg/#r+ VPt  D/P+ NPr/VB+ C/P     ISg/#r+ VPt  NSg/J+\n> things from her     . . . Well       , there I       was  , ’ way    off        my  ambitions , getting deeper\n# NPl+   P    ISg/D$+ . . . NSg/VB/J/R . R+    ISg/#r+ VLPt . . NSg/J+ NSg/VB/J/P D$+ NPl/V3+   . NSg/Vg  JC\n> in        love      every minute    , and  all          of a   sudden I       didn’t care     . What   was  the use     of\n# NPr/J/R/P NPr🅪Sg/VB Dq+   NSg/VB/J+ . VB/C NSg/I/J/C/Dq P  D/P NSg/J  ISg/#r+ VXPt   N🅪Sg/VB+ . NSg/I+ VLPt D   N🅪Sg/VB P\n> doing   great  things if    I       could   have    a    better      time       telling her     what   I       was  going   to\n# Nᴹ/Vg/J NSg/J+ NPl+   NSg/C ISg/#r+ NSg/VXB NSg/VXB D/P+ NSg/VXB/JC+ N🅪Sg/VB/J+ Nᴹ/Vg/J ISg/D$+ NSg/I+ ISg/#r+ VLPt Nᴹ/Vg/J P\n> do  ? ”\n# VXB . .\n>\n#\n> On  the last      afternoon before he       went    abroad  , he       sat      with Daisy in        his     arms    for   a\n# J/P D+  NSg/VB/J+ N🅪Sg+     C/P    NPr/ISg+ NSg/VPt NSg/J/P . NPr/ISg+ NSg/VP/J P    NPr+  NPr/J/R/P ISg/D$+ NPl/V3+ R/C/P D/P\n> long     , silent time       . It       was  a   cold  fall    day    , with fire       in        the room      and  her     cheeks\n# NPr/VB/J . NSg/J+ N🅪Sg/VB/J+ . NPr/ISg+ VLPt D/P NSg/J N🅪Sg/VB NPr🅪Sg . P    N🅪Sg/VB/J+ NPr/J/R/P D   N🅪Sg/VB/J VB/C ISg/D$+ NPl/V3+\n> flushed . Now       and  then      she  moved and  he       changed his     arm      a   little     , and  once  he\n# VP/J    . NSg/J/R/C VB/C NSg/J/R/C ISg+ VP/J  VB/C NPr/ISg+ VP/J    ISg/D$+ NSg/VB/J D/P NPr/I/J/Dq . VB/C NSg/C NPr/ISg+\n> kissed her     dark      shining hair     . The afternoon had made them     tranquil for   a    while       ,\n# VP/J   ISg/D$+ NSg/VB/J+ Nᴹ/Vg/J N🅪Sg/VB+ . D+  N🅪Sg+     VP  VP   NSg/IPl+ J        R/C/P D/P+ NSg/VB/C/P+ .\n> as    if    to give   them     a   deep  memory for   the long     parting   the next    day     promised .\n# R/C/P NSg/C P  NSg/VB NSg/IPl+ D/P NSg/J N🅪Sg+  R/C/P D   NPr/VB/J N🅪Sg/Vg/J D+  NSg/J/P NPr🅪Sg+ VP/J     .\n> They had never been     closer in        their month of love       , nor   communicated more\n# IPl+ VP  R     NSg/VLPp NSg/JC NPr/J/R/P D$+   NSg/J P  NPr🅪Sg/VB+ . NSg/C VP/J         NPr/I/J/R/Dq\n> profoundly one     with another , than when    she  brushed silent lips    against his\n# R          NSg/I/J P    I/D     . C/P  NSg/I/C ISg+ VP/J    NSg/J  NPl/V3+ C/P     ISg/D$+\n> coat’s shoulder or    when    he       touched the end    of her     fingers , gently , as    though she\n# NSg$   NSg/VB+  NPr/C NSg/I/C NPr/ISg+ VP/J    D   NSg/VB P  ISg/D$+ NPl/V3+ . R      . R/C/P C      ISg+\n> were     asleep .\n# NSg/VLPt J      .\n>\n#\n> He       did  extraordinarily well       in        the war      . He       was  a   captain before he       went    to the\n# NPr/ISg+ VXPt R               NSg/VB/J/R NPr/J/R/P D+  N🅪Sg/VB+ . NPr/ISg+ VLPt D/P NSg/VB  C/P    NPr/ISg+ NSg/VPt P  D+\n> front     , and  following   the Argonne battles he       got his     majority and  the command of\n# NSg/VB/J+ . VB/C N🅪Sg/Vg/J/P D   NPr     NPl/V3+ NPr/ISg+ VP  ISg/D$+ NSg+     VB/C D   NSg/VB  P\n> the divisional machine - guns    . After the armistice he       tried frantically to get\n# D   NSg/J      NSg/VB+ . NPl/V3+ . P     D   NPr🅪Sg    NPr/ISg+ VP/J  R           P  NSg/VB\n> home      , but     some     complication or    misunderstanding sent   him  to Oxford instead . He\n# NSg/VB/J+ . NSg/C/P I/J/R/Dq N🅪Sg         NPr/C N🅪Sg/Vg/J+       NSg/VP ISg+ P  NPr+   R       . NPr/ISg+\n> was  worried now       — there was  a   quality of nervous despair in        Daisy’s letters . She\n# VLPt VP/J    NSg/J/R/C . R+    VLPt D/P N🅪Sg/J  P  J       NSg/VB+ NPr/J/R/P NPr$    NPl/V3+ . ISg+\n> didn’t see    why    he       couldn’t come       . She  was  feeling   the pressure of the world\n# VXPt   NSg/VB NSg/VB NPr/ISg+ VXB      NSg/VBPp/P . ISg+ VLPt N🅪Sg/Vg/J D   N🅪Sg/VB  P  D+  NSg/VB+\n> outside   , and  she  wanted to see    him  and  feel     his     presence beside her     and  be\n# Nᴹ/VB/J/P . VB/C ISg+ VP/J   P  NSg/VB ISg+ VB/C NSg/I/VB ISg/D$+ N🅪Sg/VB+ P      ISg/D$+ VB/C NSg/VLXB\n> reassured that         she  was  doing   the right     thing after all          .\n# VP/J      NSg/I/C/Ddem ISg+ VLPt Nᴹ/Vg/J D+  NPr/VB/J+ NSg+  P     NSg/I/J/C/Dq .\n>\n#\n> For   Daisy was  young    and  her     artificial world   was  redolent of orchids and\n# R/C/P NPr+  VLPt NPr/VB/J VB/C ISg/D$+ J+         NSg/VB+ VLPt J        P  NPl     VB/C\n> pleasant , cheerful snobbery and  orchestras which set       the rhythm  of the year ,\n# NSg/J    . J        Nᴹ       VB/C NPl+       I/C+  NPr/VBP/J D   N🅪Sg/VB P  D   NSg+ .\n> summing up         the sadness and  suggestiveness of life     in        new   tunes  . All           night    the\n# NSg/Vg  NSg/VB/J/P D   Nᴹ+     VB/C NSg            P  N🅪Sg/VB+ NPr/J/R/P NSg/J NPl/V3 . NSg/I/J/C/Dq+ N🅪Sg/VB+ D\n> saxophones wailed the hopeless comment of the “ Beale Street    Blues   ” while      a\n# NPl/V3     VP/J   D   J        NSg/VB  P  D   . ?     NSg/VB/J+ NPl/V3+ . NSg/VB/C/P D/P\n> hundred pairs  of golden   and  silver   slippers shuffled the shining dust   . At    the\n# NSg     NPl/V3 P  NPr/VB/J VB/C Nᴹ/VB/J+ NPl/V3+  VP/J     D   Nᴹ/Vg/J Nᴹ/VB+ . NSg/P D+\n> gray            tea      hour there were     always rooms  that          throbbed incessantly with this   low        ,\n# NPr🅪Sg/VB/J/Am+ N🅪Sg/VB+ NSg+ R+    NSg/VLPt R      NPl/V3 NSg/I/C/Ddem+ VP       R           P    I/Ddem NSg/VB/J/R .\n> sweet    fever   , while      fresh    faces   drifted here and  there like         rose      petals blown by\n# NPr/VB/J NSg/VB+ . NSg/VB/C/P NSg/VB/J NPl/V3+ VP/J    J/R  VB/C R+    NSg/VB/J/C/P NPr/VPt/J NPl/V3 VPp/J NSg/P\n> the sad      horns  around the floor   .\n# D   NSg/VB/J NPl/V3 J/P    D   NSg/VB+ .\n>\n#\n> Through this    twilight universe Daisy began to move   again with the season  ;\n# NSg/J/P I/Ddem+ Nᴹ/VB/J+ NPr+     NPr+  VPt   P  NSg/VB P     P    D+  NSg/VB+ .\n> suddenly she  was  again keeping half      a    dozen dates   a   day    with half      a    dozen men  ,\n# R        ISg+ VLPt P     Nᴹ/Vg/J N🅪Sg/J/P+ D/P+ NSg   NPl/V3+ D/P NPr🅪Sg P    N🅪Sg/J/P+ D/P+ NSg+  NPl+ .\n> and  drowsing asleep at    dawn       with the beads   and  chiffon of an  evening    dress\n# VB/C Nᴹ/Vg/J  J      NSg/P NPr🅪Sg/VB+ P    D   NPl/V3+ VB/C NSg     P  D/P N🅪Sg/Vg/J+ NSg/VB+\n> tangled among dying   orchids on  the floor   beside her     bed        . And  all          the time\n# VP/J    P     Nᴹ/Vg/J NPl     J/P D   NSg/VB+ P      ISg/D$+ NSg/VBP/J+ . VB/C NSg/I/J/C/Dq D+  N🅪Sg/VB/J+\n> something within  her     was  crying  for   a    decision . She  wanted her     life     shaped now       ,\n# NSg/I/J+  NSg/J/P ISg/D$+ VLPt Nᴹ/Vg/J R/C/P D/P+ NSg/VB+  . ISg+ VP/J   ISg/D$+ N🅪Sg/VB+ VP/J   NSg/J/R/C .\n> immediately — and  the decision must    be       made by    some      force    — of love       , of money   , of\n# R           . VB/C D+  NSg/VB+  NSg/VXB NSg/VLXB VP   NSg/P I/J/R/Dq+ N🅪Sg/VB+ . P  NPr🅪Sg/VB+ . P  N🅪Sg/J+ . P\n> unquestionable practicality — that          was  close    at    hand    .\n# J              NSg          . NSg/I/C/Ddem+ VLPt NSg/VB/J NSg/P NSg/VB+ .\n>\n#\n> That          force    took shape    in        the middle   of spring   with the arrival of Tom     Buchanan .\n# NSg/I/C/Ddem+ N🅪Sg/VB+ VPt  N🅪Sg/VB+ NPr/J/R/P D   NSg/VB/J P  N🅪Sg/VB+ P    D   N🅪Sg    P  NPr/VB+ NPr+     .\n> There was  a   wholesome bulkiness about his     person and  his     position , and  Daisy was\n# R+    VLPt D/P J         Nᴹ        J/P   ISg/D$+ NSg/VB VB/C ISg/D$+ NSg/VB+  . VB/C NPr+  VLPt\n> flattered . Doubtless there was  a   certain struggle and  a    certain relief . The\n# VP/J      . J         R+    VLPt D/P I/J     NSg/VB   VB/C D/P+ I/J+    NSg/J+ . D+\n> letter  reached Gatsby while      he       was  still      at    Oxford .\n# NSg/VB+ VP/J    NPr    NSg/VB/C/P NPr/ISg+ VLPt NSg/VB/J/R NSg/P NPr+   .\n>\n#\n> It       was  dawn       now       on  Long      Island  and  we   went    about opening the rest   of the windows\n# NPr/ISg+ VLPt NPr🅪Sg/VB+ NSg/J/R/C J/P NPr/VB/J+ NSg/VB+ VB/C IPl+ NSg/VPt J/P   Nᴹ/Vg/J D   NSg/VB P  D+  NPrPl/V3+\n> down        - stairs , filling   the house   with gray           - turning , gold     - turning light      . The shadow\n# N🅪Sg/VB/J/P . NPl+   . N🅪Sg/Vg/J D+  NPr/VB+ P    NPr🅪Sg/VB/J/Am . Nᴹ/Vg/J . Nᴹ/VB/J+ . Nᴹ/Vg/J N🅪Sg/VB/J+ . D   NSg/VB/J\n> of a    tree    fell      abruptly across the dew      and  ghostly birds   began to sing     among the\n# P  D/P+ NSg/VB+ NSg/VPt/J R        NSg/P  D   N🅪Sg/VB+ VB/C J/R+    NPl/V3+ VPt   P  NSg/VB/J P     D+\n> blue       leaves  . There was  a   slow     , pleasant movement in        the air      , scarcely a    wind     ,\n# N🅪Sg/VB/J+ NPl/V3+ . R+    VLPt D/P NSg/VB/J . NSg/J    N🅪Sg     NPr/J/R/P D+  N🅪Sg/VB+ . R        D/P+ N🅪Sg/VB+ .\n> promising a   cool     , lovely day     .\n# Nᴹ/Vg/J   D/P NSg/VB/J . NSg/J  NPr🅪Sg+ .\n>\n#\n> “ I       don’t think  she  ever loved him  . ” Gatsby turned around from a   window  and\n# . ISg/#r+ VXB   NSg/VB ISg+ J/R  VP/J  ISg+ . . NPr    VP/J   J/P    P    D/P NSg/VB+ VB/C\n> looked at    me       challengingly . “ You    must    remember , old    sport   , she  was  very excited\n# VP/J   NSg/P NPr/ISg+ ?             . . ISgPl+ NSg/VXB NSg/VB   . NSg/J+ NSg/VB+ . ISg+ VLPt J/R  VP/J\n> this    afternoon . He       told her     those   things in        a    way    that          frightened her     — that          made\n# I/Ddem+ N🅪Sg+     . NPr/ISg+ VP   ISg/D$+ I/Ddem+ NPl+   NPr/J/R/P D/P+ NSg/J+ NSg/I/C/Ddem+ VP/J       ISg/D$+ . NSg/I/C/Ddem+ VP\n> it       look   as    if    I       was  some     kind  of cheap    sharper . And  the result  was  she  hardly\n# NPr/ISg+ NSg/VB R/C/P NSg/C ISg/#r+ VLPt I/J/R/Dq NSg/J P  NSg/VB/J NSg/JC  . VB/C D+  NSg/VB+ VLPt ISg+ R\n> knew what   she  was  saying    . ”\n# VPt  NSg/I+ ISg+ VLPt N🅪Sg/Vg/J . .\n>\n#\n> He       sat      down        gloomily .\n# NPr/ISg+ NSg/VP/J N🅪Sg/VB/J/P R        .\n>\n#\n> “ Of course  she  might    have    loved him  just for   a    minute    , when    they were     first\n# . P  NSg/VB+ ISg+ Nᴹ/VXB/J NSg/VXB VP/J  ISg+ J/R  R/C/P D/P+ NSg/VB/J+ . NSg/I/C IPl+ NSg/VLPt NSg/J+\n> married  — and  loved me       more         even       then      , do  you    see    ? ”\n# NSg/VP/J . VB/C VP/J  NPr/ISg+ NPr/I/J/R/Dq NSg/VB/J/R NSg/J/R/C . VXB ISgPl+ NSg/VB . .\n>\n#\n> Suddenly he       came      out          with a    curious remark  .\n# R        NPr/ISg+ NSg/VPt/P NSg/VB/J/R/P P    D/P+ J+      NSg/VB+ .\n>\n#\n> “ In        any     case       , ” he       said , “ it       was  just personal . ”\n# . NPr/J/R/P I/R/Dq+ NPr🅪Sg/VB+ . . NPr/ISg+ VP/J . . NPr/ISg+ VLPt J/R  NSg/J    . .\n>\n#\n> What   could   you    make   of that          , except to suspect  some      intensity in        his     conception\n# NSg/I+ NSg/VXB ISgPl+ NSg/VB P  NSg/I/C/Ddem+ . VB/C/P P  NSg/VB/J I/J/R/Dq+ Nᴹ+       NPr/J/R/P ISg/D$+ N🅪Sg\n> of the affair that          couldn’t be       measured ?\n# P  D   NSg+   NSg/I/C/Ddem+ VXB      NSg/VLXB VP/J     .\n>\n#\n> He       came      back     from France when    Tom    and  Daisy were     still      on  their wedding trip      ,\n# NPr/ISg+ NSg/VPt/P NSg/VB/J P    NPr+   NSg/I/C NPr/VB VB/C NPr+  NSg/VLPt NSg/VB/J/R J/P D$+   NSg/Vg+ NSg/VB/J+ .\n> and  made a   miserable but     irresistible journey to Louisville on  the last     of his\n# VB/C VP   D/P J         NSg/C/P J            NSg/VB  P  NPr        J/P D   NSg/VB/J P  ISg/D$+\n> army pay      . He       stayed there a    week   , walking the streets where   their footsteps had\n# NSg+ NSg/VB/J . NPr/ISg+ VP/J   R+    D/P+ NSg/J+ . Nᴹ/Vg/J D+  NPl/V3+ NSg/R/C D$+   NPl+      VP\n> clicked together through the November night    and  revisiting the out          - of - the - way\n# VP/J    J        NSg/J/P D+  NPr+     N🅪Sg/VB+ VB/C Nᴹ/Vg/J    D   NSg/VB/J/R/P . P  . D   . NSg/J+\n> places  to which they had driven in        her     white       car  . Just as    Daisy’s house   had\n# NPl/V3+ P  I/C+  IPl+ VP  VPp/J  NPr/J/R/P ISg/D$+ NPr🅪Sg/VB/J NSg+ . J/R  R/C/P NPr$    NPr/VB+ VP\n> always seemed to him  more         mysterious and  gay      than other    houses  , so          his     idea of\n# R      VP/J   P  ISg+ NPr/I/J/R/Dq J          VB/C NPr/VB/J C/P  NSg/VB/J NPl/V3+ . NSg/I/J/R/C ISg/D$+ NSg  P\n> the city itself , even       though she  was  gone    from it       , was  pervaded with a\n# D   NSg+ ISg+   . NSg/VB/J/R C      ISg+ VLPt VPp/J/P P    NPr/ISg+ . VLPt VP/J     P    D/P\n> melancholy beauty     .\n# NSg/J      N🅪Sg/VB/J+ .\n>\n#\n> He       left     feeling   that         if    he       had searched harder , he       might    have    found  her     — that         he\n# NPr/ISg+ NPr/VP/J N🅪Sg/Vg/J NSg/I/C/Ddem NSg/C NPr/ISg+ VP  VP/J     JC     . NPr/ISg+ Nᴹ/VXB/J NSg/VXB NSg/VP ISg/D$+ . NSg/I/C/Ddem NPr/ISg+\n> was  leaving her     behind  . The day     - coach   — he       was  penniless now       — was  hot      . He       went    out\n# VLPt Nᴹ/Vg/J ISg/D$+ NSg/J/P . D+  NPr🅪Sg+ . NSg/VB+ . NPr/ISg+ VLPt J         NSg/J/R/C . VLPt NSg/VB/J . NPr/ISg+ NSg/VPt NSg/VB/J/R/P\n> to the open     vestibule and  sat      down        on  a   folding  - chair   , and  the station slid away\n# P  D   NSg/VB/J NSg/VB    VB/C NSg/VP/J N🅪Sg/VB/J/P J/P D/P Nᴹ/Vg/J+ . NSg/VB+ . VB/C D   NSg/VB+ VP   VB/J\n> and  the backs  of unfamiliar buildings moved by    . Then      out          into the spring   fields    ,\n# VB/C D   NPl/V3 P  NSg/J      NPl/V3+   VP/J  NSg/P . NSg/J/R/C NSg/VB/J/R/P P    D+  N🅪Sg/VB+ NPrPl/V3+ .\n> where   a   yellow   trolley raced them     for   a   minute    with people  in        it       who    might    once\n# NSg/R/C D/P NSg/VB/J NSg/VB  VP/J  NSg/IPl+ R/C/P D/P NSg/VB/J+ P    NPl/VB+ NPr/J/R/P NPr/ISg+ NPr/I+ Nᴹ/VXB/J NSg/C\n> have    seen    the pale     magic     of her     face    along the casual street    .\n# NSg/VXB NSg/VPp D   NSg/VB/J N🅪Sg/VB/J P  ISg/D$+ NSg/VB+ P     D   NSg/J  NSg/VB/J+ .\n>\n#\n> The track   curved and  now       it       was  going   away from the sun     , which , as    it       sank\n# D+  NSg/VB+ VP/J   VB/C NSg/J/R/C NPr/ISg+ VLPt Nᴹ/Vg/J VB/J P    D+  NPr/VB+ . I/C+  . R/C/P NPr/ISg+ VPt\n> lower     , seemed to spread   itself in        benediction over    the vanishing city where   she\n# NSg/VB/JC . VP/J   P  N🅪Sg/VBP ISg+   NPr/J/R/P N🅪Sg        NSg/J/P D   Nᴹ/Vg/J   NSg+ NSg/R/C ISg+\n> had drawn her     breath     . He       stretched out          his     hand    desperately as    if    to snatch only\n# VP  VPp/J ISg/D$+ N🅪Sg/VB/J+ . NPr/ISg+ VP/J      NSg/VB/J/R/P ISg/D$+ NSg/VB+ R           R/C/P NSg/C P  NSg/VB J/R/C\n> a   wisp   of air      , to save       a   fragment of the spot      that          she  had made lovely for   him  .\n# D/P NSg/VB P  N🅪Sg/VB+ . P  NSg/VB/C/P D/P NSg/VB   P  D   NSg/VB/J+ NSg/I/C/Ddem+ ISg+ VP  VP   NSg/J  R/C/P ISg+ .\n> But     it       was  all          going   by    too fast       now       for   his     blurred eyes    and  he       knew that         he\n# NSg/C/P NPr/ISg+ VLPt NSg/I/J/C/Dq Nᴹ/Vg/J NSg/P R   NSg/VB/J/R NSg/J/R/C R/C/P ISg/D$+ VP/J    NPl/V3+ VB/C NPr/ISg+ VPt  NSg/I/C/Ddem NPr/ISg+\n> had lost that         part     of it       , the freshest and  the best       , forever .\n# VP  VP/J NSg/I/C/Ddem NSg/VB/J P  NPr/ISg+ . D   JS       VB/C D   NPr/VXB/JS . NSg/J   .\n>\n#\n> It       was  nine o’clock when    we   finished breakfast and  went    out          on  the porch . The\n# NPr/ISg+ VLPt NSg  R       NSg/I/C IPl+ VP/J     N🅪Sg/VB+  VB/C NSg/VPt NSg/VB/J/R/P J/P D+  NSg+  . D+\n> night    had made a   sharp    difference in        the weather  and  there was  an  autumn     flavor\n# N🅪Sg/VB+ VP  VP   D/P NPr/VB/J N🅪Sg/VB    NPr/J/R/P D+  Nᴹ/VB/J+ VB/C R+    VLPt D/P NPr🅪Sg/VB+ N🅪Sg/VB/Am\n> in        the air      . The gardener , the last     one     of Gatsby’s former servants , came      to the\n# NPr/J/R/P D+  N🅪Sg/VB+ . D   NSg/JC   . D   NSg/VB/J NSg/I/J P  NPr$     NSg/J  NPl/V3+  . NSg/VPt/P P  D\n> foot   of the steps   .\n# NSg/VB P  D   NPl/V3+ .\n>\n#\n> “ I’m going   to drain  the pool    to - day     , Mr   . Gatsby . Leaves’ll start  falling pretty\n# . K   Nᴹ/Vg/J P  NSg/VB D   NSg/VB+ P  . NPr🅪Sg+ . NSg+ . NPr    . ?         NSg/VB Nᴹ/Vg/J NSg/VB/J/R\n> soon , and  then      there’s always trouble  with the pipes   . ”\n# J/R  . VB/C NSg/J/R/C K       R      N🅪Sg/VB+ P    D   NPl/V3+ . .\n>\n#\n> “ Don’t do  it       to - day     , ” Gatsby answered . He       turned to me       apologetically . “ You\n# . VXB   VXB NPr/ISg+ P  . NPr🅪Sg+ . . NPr    VP/J     . NPr/ISg+ VP/J   P  NPr/ISg+ R              . . ISgPl+\n> know , old    sport   , I’ve never used that         pool    all          summer     ? ”\n# VB   . NSg/J+ NSg/VB+ . K    R     VP/J NSg/I/C/Ddem NSg/VB+ NSg/I/J/C/Dq NPr🅪Sg/VB+ . .\n>\n#\n> I       looked at    my  watch  and  stood up         .\n# ISg/#r+ VP/J   NSg/P D$+ NSg/VB VB/C VP    NSg/VB/J/P .\n>\n#\n> “ Twelve minutes to my  train   , ”\n# . NSg    NPl/V3+ P  D$+ NSg/VB+ . .\n>\n#\n> I       didn’t want   to go       to the city . I       wasn’t worth    a   decent stroke of work     , but     it\n# ISg/#r+ VXPt   NSg/VB P  NSg/VB/J P  D   NSg+ . ISg/#r+ VPt    NSg/VB/J D/P J      NSg/VB P  N🅪Sg/VB+ . NSg/C/P NPr/ISg+\n> was  more         than that          — I       didn’t want   to leave  Gatsby . I       missed that          train   , and  then\n# VLPt NPr/I/J/R/Dq C/P  NSg/I/C/Ddem+ . ISg/#r+ VXPt   NSg/VB P  NSg/VB NPr    . ISg/#r+ VP/J   NSg/I/C/Ddem+ NSg/VB+ . VB/C NSg/J/R/C\n> another , before I       could   get    myself away .\n# I/D     . C/P    ISg/#r+ NSg/VXB NSg/VB ISg+   VB/J .\n>\n#\n> “ I’ll call   you    up         , ” I       said finally .\n# . K    NSg/VB ISgPl+ NSg/VB/J/P . . ISg/#r+ VP/J R       .\n>\n#\n> “ Do  , old    sport   . ”\n# . VXB . NSg/J+ NSg/VB+ . .\n>\n#\n> “ I’ll call   you    about noon    . ”\n# . K    NSg/VB ISgPl+ J/P   NSg/VB+ . .\n>\n#\n> We   walked slowly down        the steps   .\n# IPl+ VP/J   R      N🅪Sg/VB/J/P D+  NPl/V3+ .\n>\n#\n> “ I       suppose Daisy’ll call   too . ” He       looked at    me       anxiously , as    if    he       hoped I’d\n# . ISg/#r+ VB      ?        NSg/VB R   . . NPr/ISg+ VP/J   NSg/P NPr/ISg+ R         . R/C/P NSg/C NPr/ISg+ VP/J  K\n> corroborate this    .\n# VB          I/Ddem+ .\n>\n#\n> “ I       suppose so          . ”\n# . ISg/#r+ VB      NSg/I/J/R/C . .\n>\n#\n> “ Well       , good     - by    . ”\n# . NSg/VB/J/R . NPr/VB/J . NSg/P . .\n>\n#\n> We   shook     hands   and  I       started away . Just before I       reached the hedge   I       remembered\n# IPl+ NSg/VPt/J NPl/V3+ VB/C ISg/#r+ VP/J    VB/J . J/R  C/P    ISg/#r+ VP/J    D+  NSg/VB+ ISg/#r+ VP/J\n> something and  turned around .\n# NSg/I/J+  VB/C VP/J   J/P    .\n>\n#\n> “ They’re a    rotten crowd   , ” I       shouted across the lawn    . “ You’re worth    the whole\n# . K       D/P+ J      NSg/VB+ . . ISg/#r+ VP/J    NSg/P  D   NSg/VB+ . . K      NSg/VB/J D   NSg/J\n> damn     bunch   put     together . ”\n# NSg/VB/J NSg/VB+ NSg/VBP J        . .\n>\n#\n> I’ve always been     glad     I       said that          . It       was  the only  compliment I       ever gave him  ,\n# K    R      NSg/VLPp NSg/VB/J ISg/#r+ VP/J NSg/I/C/Ddem+ . NPr/ISg+ VLPt D   J/R/C NSg/VB     ISg/#r+ J/R  VPt  ISg+ .\n> because I       disapproved of him  from beginning to end    . First he       nodded politely ,\n# C/P     ISg/#r+ VP/J        P  ISg+ P    NSg/Vg/J+ P  NSg/VB . NSg/J NPr/ISg+ VP     R        .\n> and  then      his     face    broke     into that         radiant and  understanding smile   , as    if    we’d\n# VB/C NSg/J/R/C ISg/D$+ NSg/VB+ NSg/VPt/J P    NSg/I/C/Ddem NSg/J   VB/C N🅪Sg/Vg/J+    NSg/VB+ . R/C/P NSg/C K\n> been     in        ecstatic cahoots on  that         fact all          the time       . His     gorgeous pink      rag    of a\n# NSg/VLPp NPr/J/R/P NSg/J    NPl/V3  J/P NSg/I/C/Ddem NSg+ NSg/I/J/C/Dq D   N🅪Sg/VB/J+ . ISg/D$+ J        N🅪Sg/VB/J NSg/VB P  D/P+\n> suit    made a   bright   spot     of color         against the white        steps   , and  I       thought of the\n# NSg/VB+ VP   D/P NPr/VB/J NSg/VB/J P  N🅪Sg/VB/J/Am+ C/P     D+  NPr🅪Sg/VB/J+ NPl/V3+ . VB/C ISg/#r+ N🅪Sg/VP P  D+\n> night    when    I       first came      to his     ancestral home      , three months before . The lawn    and\n# N🅪Sg/VB+ NSg/I/C ISg/#r+ NSg/J NSg/VPt/P P  ISg/D$+ NSg/J+    NSg/VB/J+ . NSg+  NPl+   C/P    . D+  NSg/VB+ VB/C\n> drive   had been     crowded with the faces  of those   who    guessed at    his     corruption — and\n# N🅪Sg/VB VP  NSg/VLPp VP/J    P    D   NPl/V3 P  I/Ddem+ NPr/I+ VP/J    NSg/P ISg/D$+ N🅪Sg+      . VB/C\n> he       had stood on  those   steps   , concealing his     incorruptible dream     , as    he       waved\n# NPr/ISg+ VP  VP    J/P I/Ddem+ NPl/V3+ . Nᴹ/Vg/J    ISg/D$+ NSg/J         NSg/VB/J+ . R/C/P NPr/ISg+ VP/J\n> them     good     - by    .\n# NSg/IPl+ NPr/VB/J . NSg/P .\n>\n#\n> I       thanked him  for   his     hospitality . We   were     always thanking him  for   that          — I       and\n# ISg/#r+ VP/J    ISg+ R/C/P ISg/D$+ Nᴹ+         . IPl+ NSg/VLPt R      Nᴹ/Vg/J  ISg+ R/C/P NSg/I/C/Ddem+ . ISg/#r+ VB/C\n> the others  .\n# D+  NPl/V3+ .\n>\n#\n> “ Good     - by    , ” I       called . “ I       enjoyed breakfast , Gatsby . ”\n# . NPr/VB/J . NSg/P . . ISg/#r+ VP/J   . . ISg/#r+ VP/J    N🅪Sg/VB+  . NPr    . .\n>\n#\n> Up         in        the city , I       tried for   a   while       to list   the quotations on  an  interminable\n# NSg/VB/J/P NPr/J/R/P D+  NSg+ . ISg/#r+ VP/J  R/C/P D/P NSg/VB/C/P+ P  NSg/VB D   NPl        J/P D/P J\n> amount of stock      , then      I       fell      asleep in        my  swivel  - chair   . Just before noon    the\n# NSg/VB P  N🅪Sg/VB/J+ . NSg/J/R/C ISg/#r+ NSg/VPt/J J      NPr/J/R/P D$+ NSg/VB+ . NSg/VB+ . J/R  C/P    NSg/VB+ D+\n> phone   woke     me       , and  I       started up         with sweat    breaking out          on  my  forehead . It       was\n# NSg/VB+ NSg/VB/J NPr/ISg+ . VB/C ISg/#r+ VP/J    NSg/VB/J/P P    N🅪Sg/VB+ Nᴹ/Vg/J  NSg/VB/J/R/P J/P D$+ NSg+     . NPr/ISg+ VLPt\n> Jordan Baker ; she  often called me       up         at    this    hour because the uncertainty of her\n# NPr+   NPr+  . ISg+ R     VP/J   NPr/ISg+ NSg/VB/J/P NSg/P I/Ddem+ NSg+ C/P     D   NSg         P  ISg/D$+\n> own      movements between hotels and  clubs  and  private   houses  made her     hard     to find\n# NSg/VB/J NPl       NSg/P   NPl    VB/C NPl/V3 VB/C NSg/VB/J+ NPl/V3+ VP   ISg/D$+ N🅪Sg/J/R P  NSg/VB\n> in        any     other     way    . Usually her     voice   came      over    the wire     as    something fresh    and\n# NPr/J/R/P I/R/Dq+ NSg/VB/J+ NSg/J+ . R       ISg/D$+ NSg/VB+ NSg/VPt/P NSg/J/P D+  N🅪Sg/VB+ R/C/P NSg/I/J+  NSg/VB/J VB/C\n> cool     , as    if    a   divot  from a   green       golf    - links   had come       sailing in        at    the office\n# NSg/VB/J . R/C/P NSg/C D/P NSg/VB P    D/P NPr🅪Sg/VB/J NSg/VB+ . NPl/V3+ VP  NSg/VBPp/P Nᴹ/Vg/J NPr/J/R/P NSg/P D   NSg/VB+\n> window  , but     this   morning    it       seemed harsh and  dry      .\n# NSg/VB+ . NSg/C/P I/Ddem N🅪Sg/Vg/J+ NPr/ISg+ VP/J   VB/J  VB/C NSg/VB/J .\n>\n#\n> “ I’ve left     Daisy’s house   , ” she  said . “ I’m at    Hempstead , and  I’m going   down        to\n# . K    NPr/VP/J NPr$    NPr/VB+ . . ISg+ VP/J . . K   NSg/P ?         . VB/C K   Nᴹ/Vg/J N🅪Sg/VB/J/P P\n> Southampton this   afternoon . ”\n# NPr+        I/Ddem N🅪Sg+     . .\n>\n#\n> Probably it       had been     tactful to leave  Daisy’s house   , but     the act     annoyed me       , and\n# R        NPr/ISg+ VP  NSg/VLPp J       P  NSg/VB NPr$    NPr/VB+ . NSg/C/P D   NPr/VB+ VP/J    NPr/ISg+ . VB/C\n> her     next    remark  made me       rigid .\n# ISg/D$+ NSg/J/P NSg/VB+ VP   NPr/ISg+ NSg/J .\n>\n#\n> “ You    weren’t so          nice  to me       last     night    . ”\n# . ISgPl+ VPt     NSg/I/J/R/C NPr/J P  NPr/ISg+ NSg/VB/J N🅪Sg/VB+ . .\n>\n#\n> “ How   could   it       have    mattered then      ? ”\n# . NSg/C NSg/VXB NPr/ISg+ NSg/VXB VP/J     NSg/J/R/C . .\n>\n#\n> Silence for   a    moment . Then      :\n# NSg/VB  R/C/P D/P+ NSg+   . NSg/J/R/C .\n>\n#\n> “ However — I       want   to see    you    . ”\n# . C       . ISg/#r+ NSg/VB P  NSg/VB ISgPl+ . .\n>\n#\n> “ I       want   to see    you    , too . ”\n# . ISg/#r+ NSg/VB P  NSg/VB ISgPl+ . R   . .\n>\n#\n> “ Suppose I       don’t go       to Southampton , and  come       into town this   afternoon ? ”\n# . VB      ISg/#r+ VXB   NSg/VB/J P  NPr+        . VB/C NSg/VBPp/P P    NSg+ I/Ddem N🅪Sg+     . .\n>\n#\n> “ No       — I       don’t think  this   afternoon . ”\n# . NSg/Dq/P . ISg/#r+ VXB   NSg/VB I/Ddem N🅪Sg+     . .\n>\n#\n> “ Very well       . ”\n# . J/R  NSg/VB/J/R . .\n>\n#\n> “ It’s impossible this   afternoon . Various — — — ”\n# . K    NSg/J      I/Ddem N🅪Sg+     . J       . . . .\n>\n#\n> We   talked like         that         for   a    while       , and  then      abruptly we   weren’t talking any\n# IPl+ VP/J   NSg/VB/J/C/P NSg/I/C/Ddem R/C/P D/P+ NSg/VB/C/P+ . VB/C NSg/J/R/C R        IPl+ VPt     Nᴹ/Vg/J I/R/Dq\n> longer . I       don’t know which of us       hung     up         with a   sharp    click   , but     I       know I       didn’t\n# NSg/JC . ISg/#r+ VXB   VB   I/C   P  NPr/IPl+ NPr/VP/J NSg/VB/J/P P    D/P NPr/VB/J NSg/VB+ . NSg/C/P ISg/#r+ VB   ISg/#r+ VXPt\n> care     . I       couldn’t have    talked to her     across a   tea      - table   that          day     if    I       never\n# N🅪Sg/VB+ . ISg/#r+ VXB      NSg/VXB VP/J   P  ISg/D$+ NSg/P  D/P N🅪Sg/VB+ . NSg/VB+ NSg/I/C/Ddem+ NPr🅪Sg+ NSg/C ISg/#r+ R\n> talked to her     again in        this   world   .\n# VP/J   P  ISg/D$+ P     NPr/J/R/P I/Ddem NSg/VB+ .\n>\n#\n> I       called Gatsby’s house   a   few      minutes later , but     the line    was  busy     . I       tried four\n# ISg/#r+ VP/J   NPr$     NPr/VB+ D/P NSg/I/Dq NPl/V3+ JC    . NSg/C/P D   NSg/VB+ VLPt NSg/VB/J . ISg/#r+ VP/J  NSg+\n> times   ; finally an  exasperated central told me       the wire     was  being        kept open     for\n# NPl/V3+ . R       D/P VP/J        NPr/J   VP   NPr/ISg+ D   N🅪Sg/VB+ VLPt N🅪Sg/VLg/J/C VP   NSg/VB/J R/C/P\n> long     distance from Detroit . Taking   out          my  time       - table   , I       drew    a    small     circle\n# NPr/VB/J N🅪Sg/VB  P    NPr+    . NSg/Vg/J NSg/VB/J/R/P D$+ N🅪Sg/VB/J+ . NSg/VB+ . ISg/#r+ NPr/VPt D/P+ NPr/VB/J+ NSg/VB+\n> around the three - fifty train   . Then      I       leaned back     in        my  chair   and  tried to think  .\n# J/P    D   NSg   . NSg   NSg/VB+ . NSg/J/R/C ISg/#r+ VP/J   NSg/VB/J NPr/J/R/P D$+ NSg/VB+ VB/C VP/J  P  NSg/VB .\n> It       was  just noon    .\n# NPr/ISg+ VLPt J/R  NSg/VB+ .\n>\n#\n> When    I       passed the ashheaps on  the train   that          morning    I       had crossed deliberately\n# NSg/I/C ISg/#r+ VP/J   D   ?        J/P D   NSg/VB+ NSg/I/C/Ddem+ N🅪Sg/Vg/J+ ISg/#r+ VP  VP/J    R\n> to the other    side     of the car  . I       supposed there’d be       a   curious crowd   around there\n# P  D   NSg/VB/J NSg/VB/J P  D   NSg+ . ISg/#r+ VP/J     K       NSg/VLXB D/P J       NSg/VB+ J/P    R+\n> all          day     with little     boys    searching for   dark     spots   in        the dust   , and  some\n# NSg/I/J/C/Dq NPr🅪Sg+ P    NPr/I/J/Dq NPl/V3+ Nᴹ/Vg/J   R/C/P NSg/VB/J NPl/V3+ NPr/J/R/P D   Nᴹ/VB+ . VB/C I/J/R/Dq\n> garrulous man       telling over    and  over    what   had happened , until it       became less       and\n# J         NPr/VB/J+ Nᴹ/Vg/J NSg/J/P VB/C NSg/J/P NSg/I+ VP  VP/J     . C/P   NPr/ISg+ VPt    VB/J/R/C/P VB/C\n> less       real  even       to him  and  he       could   tell   it       no       longer , and  Myrtle Wilson’s tragic\n# VB/J/R/C/P NSg/J NSg/VB/J/R P  ISg+ VB/C NPr/ISg+ NSg/VXB NPr/VB NPr/ISg+ NSg/Dq/P NSg/JC . VB/C NPr    NPr$     NSg/J\n> achievement was  forgotten . Now       I       want   to go       back     a   little     and  tell   what   happened\n# N🅪Sg+       VLPt NSg/VPp/J . NSg/J/R/C ISg/#r+ NSg/VB P  NSg/VB/J NSg/VB/J D/P NPr/I/J/Dq VB/C NPr/VB NSg/I+ VP/J\n> at    the garage  after we   left     there the night    before .\n# NSg/P D+  NSg/VB+ P     IPl+ NPr/VP/J R+    D+  N🅪Sg/VB+ C/P    .\n>\n#\n> They had difficulty in        locating the sister  , Catherine . She  must    have    broken her\n# IPl+ VP  N🅪Sg+      NPr/J/R/P Nᴹ/Vg/J  D   NSg/VB+ . NPr+      . ISg+ NSg/VXB NSg/VXB VPp/J  ISg/D$+\n> rule    against drinking that          night    , for   when    she  arrived she  was  stupid with\n# NSg/VB+ C/P     Nᴹ/Vg/J  NSg/I/C/Ddem+ N🅪Sg/VB+ . R/C/P NSg/I/C ISg+ VP/J    ISg+ VLPt NSg/J  P\n> liquor   and  unable   to understand that         the ambulance had already gone    to Flushing .\n# N🅪Sg/VB+ VB/C NSg/VB/J P  VB         NSg/I/C/Ddem D+  NSg/VB+   VP  R       VPp/J/P P  Nᴹ/Vg/J  .\n> When    they convinced her     of this    , she  immediately fainted , as    if    that          was  the\n# NSg/I/C IPl+ VP/J      ISg/D$+ P  I/Ddem+ . ISg+ R           VP/J    . R/C/P NSg/C NSg/I/C/Ddem+ VLPt D\n> intolerable part     of the affair . Some     one     , kind   or    curious , took her     in        his     car\n# J           NSg/VB/J P  D   NSg+   . I/J/R/Dq NSg/I/J . NSg/J+ NPr/C J       . VPt  ISg/D$+ NPr/J/R/P ISg/D$+ NSg+\n> and  drove   her     in        the wake   of her     sister’s body    .\n# VB/C NSg/VPt ISg/D$+ NPr/J/R/P D   NPr/VB P  ISg/D$+ NSg$     NSg/VB+ .\n>\n#\n> Until long     after midnight a   changing crowd   lapped up         against the front    of the\n# C/P   NPr/VB/J P     NSg/J+   D/P Nᴹ/Vg/J  NSg/VB+ VP/J   NSg/VB/J/P C/P     D   NSg/VB/J P  D+\n> garage  , while      George Wilson rocked himself back     and  forth on  the couch   inside  .\n# NSg/VB+ . NSg/VB/C/P NPr+   NPr+   VP/J   ISg+    NSg/VB/J VB/C R     J/P D+  NSg/VB+ NSg/J/P .\n> For   a   while       the door   of the office  was  open     , and  every one      who    came      into the\n# R/C/P D/P NSg/VB/C/P+ D   NSg/VB P  D+  NSg/VB+ VLPt NSg/VB/J . VB/C Dq+   NSg/I/J+ NPr/I+ NSg/VPt/P P    D+\n> garage  glanced irresistibly through it       . Finally some     one      said it       was  a   shame     ,\n# NSg/VB+ VP/J    R            NSg/J/P NPr/ISg+ . R       I/J/R/Dq NSg/I/J+ VP/J NPr/ISg+ VLPt D/P N🅪Sg/VB/J .\n> and  closed the door    . Michaelis and  several other     men  were     with him  ; first , four\n# VB/C VP/J   D+  NSg/VB+ . ?         VB/C J/Dq+   NSg/VB/J+ NPl+ NSg/VLPt P    ISg+ . NSg/J . NSg\n> or    five men  , later two or    three men  . Still      later Michaelis had to ask    the last\n# NPr/C NSg+ NPl+ . JC    NSg NPr/C NSg+  NPl+ . NSg/VB/J/R JC    ?         VP  P  NSg/VB D+  NSg/VB/J+\n> stranger   to wait   there fifteen minutes longer , while      he       went    back     to his     own\n# NSg/VB/JC+ P  NSg/VB R+    NSg+    NPl/V3+ NSg/JC . NSg/VB/C/P NPr/ISg+ NSg/VPt NSg/VB/J P  ISg/D$+ NSg/VB/J+\n> place    and  made a   pot     of coffee     . After that          , he       stayed there alone with Wilson\n# N🅪Sg/VB+ VB/C VP   D/P N🅪Sg/VB P  N🅪Sg/VB/J+ . P     NSg/I/C/Ddem+ . NPr/ISg+ VP/J   R     J     P    NPr+\n> until dawn       .\n# C/P   NPr🅪Sg/VB+ .\n>\n#\n> About three o’clock the quality of Wilson’s incoherent muttering changed — he       grew\n# J/P   NSg   R       D   N🅪Sg/J  P  NPr$     J+         Nᴹ/Vg/J+  VP/J    . NPr/ISg+ VPt\n> quieter and  began to talk    about the yellow   car  . He       announced that         he       had a   way\n# NSg/JC  VB/C VPt   P  N🅪Sg/VB J/P   D   NSg/VB/J NSg+ . NPr/ISg+ VP/J      NSg/I/C/Ddem NPr/ISg+ VP  D/P NSg/J\n> of finding out          whom the yellow    car  belonged to , and  then      he       blurted out          that         a\n# P  Nᴹ/Vg/J NSg/VB/J/R/P I+   D+  NSg/VB/J+ NSg+ VP/J     P  . VB/C NSg/J/R/C NPr/ISg+ VP/J    NSg/VB/J/R/P NSg/I/C/Ddem D/P\n> couple   of months ago his     wife      had come       from the city with her     face    bruised and\n# NSg/VB/J P  NPl+   J/P ISg/D$+ NSg/VB/J+ VP  NSg/VBPp/P P    D   NSg+ P    ISg/D$+ NSg/VB+ VP/J    VB/C\n> her     nose    swollen .\n# ISg/D$+ NSg/VB+ VB/J    .\n>\n#\n> But     when    he       heard himself say    this    , he       flinched and  began to cry    “ Oh     , my  God     ! ”\n# NSg/C/P NSg/I/C NPr/ISg+ VP/J  ISg+    NSg/VB I/Ddem+ . NPr/ISg+ VP/J     VB/C VPt   P  NSg/VB . NPr/VB . D$+ NPr/VB+ . .\n> again in        his     groaning voice   . Michaelis made a   clumsy attempt to distract him  .\n# P     NPr/J/R/P ISg/D$+ Nᴹ/Vg/J  NSg/VB+ . ?         VP   D/P NSg/J  NSg/VB+ P  NSg/VB/J ISg+ .\n>\n#\n> “ How   long     have    you    been     married  , George ? Come       on  there , try      and  sit    still      a\n# . NSg/C NPr/VB/J NSg/VXB ISgPl+ NSg/VLPp NSg/VP/J . NPr+   . NSg/VBPp/P J/P R     . NSg/VB/J VB/C NSg/VB NSg/VB/J/R D/P\n> minute   and  answer  my  question . How   long     have    you    been     married  ? ”\n# NSg/VB/J VB/C NSg/VB+ D$+ NSg/VB+  . NSg/C NPr/VB/J NSg/VXB ISgPl+ NSg/VLPp NSg/VP/J . .\n>\n#\n> “ Twelve years . ”\n# . NSg+   NPl+  . .\n>\n#\n> “ Ever had any     children ? Come       on  , George , sit    still      — I       asked you    a    question . Did\n# . J/R  VP  I/R/Dq+ NPl+     . NSg/VBPp/P J/P . NPr+   . NSg/VB NSg/VB/J/R . ISg/#r+ VP/J  ISgPl+ D/P+ NSg/VB+  . VXPt\n> you    ever have    any     children ? ”\n# ISgPl+ J/R  NSg/VXB I/R/Dq+ NPl+     . .\n>\n#\n> The hard      brown        beetles kept thudding against the dull light      , and  whenever\n# D+  N🅪Sg/J/R+ NPr🅪Sg/VB/J+ NPl/V3+ VP   NSg/Vg   C/P     D   VB/J N🅪Sg/VB/J+ . VB/C C\n> Michaelis heard a   car  go       tearing along the road    outside   it       sounded to him  like\n# ?         VP/J  D/P NSg+ NSg/VB/J Nᴹ/Vg/J P     D   N🅪Sg/J+ Nᴹ/VB/J/P NPr/ISg+ VP/J    P  ISg+ NSg/VB/J/C/P\n> the car  that          hadn’t stopped a   few      hours before . He       didn’t like         to go       into the\n# D   NSg+ NSg/I/C/Ddem+ VPt    VP/J    D/P NSg/I/Dq NPl+  C/P    . NPr/ISg+ VXPt   NSg/VB/J/C/P P  NSg/VB/J P    D\n> garage  , because the work     bench   was  stained where   the body    had been     lying   , so          he\n# NSg/VB+ . C/P     D   N🅪Sg/VB+ NSg/VB+ VLPt VP/J    NSg/R/C D   NSg/VB+ VP  NSg/VLPp Nᴹ/Vg/J . NSg/I/J/R/C NPr/ISg+\n> moved uncomfortably around the office  — he       knew every object  in        it       before\n# VP/J  R             J/P    D   NSg/VB+ . NPr/ISg+ VPt  Dq    NSg/VB+ NPr/J/R/P NPr/ISg+ C/P\n> morning    — and  from time       to time      sat      down        beside Wilson trying  to keep   him  more\n# N🅪Sg/Vg/J+ . VB/C P    N🅪Sg/VB/J+ P  N🅪Sg/VB/J NSg/VP/J N🅪Sg/VB/J/P P      NPr+   Nᴹ/Vg/J P  NSg/VB ISg+ NPr/I/J/R/Dq\n> quiet     .\n# N🅪Sg/VB/J .\n>\n#\n> “ Have    you    got a    church     you    go       to sometimes , George ? Maybe   even       if    you    haven’t\n# . NSg/VXB ISgPl+ VP  D/P+ NPr🅪Sg/VB+ ISgPl+ NSg/VB/J P  R         . NPr+   . NSg/J/R NSg/VB/J/R NSg/C ISgPl+ VXB\n> been     there for   a   long     time       ? Maybe   I       could   call   up         the church     and  get    a   priest    to\n# NSg/VLPp R     R/C/P D/P NPr/VB/J N🅪Sg/VB/J+ . NSg/J/R ISg/#r+ NSg/VXB NSg/VB NSg/VB/J/P D+  NPr🅪Sg/VB+ VB/C NSg/VB D/P NSg/VB/J+ P\n> come       over    and  he       could   talk    to you    , see    ? ”\n# NSg/VBPp/P NSg/J/P VB/C NPr/ISg+ NSg/VXB N🅪Sg/VB P  ISgPl+ . NSg/VB . .\n>\n#\n> “ Don’t belong to any    . ”\n# . VXB   VB/P   P  I/R/Dq . .\n>\n#\n> “ You    ought     to have    a    church     , George , for   times   like         this    . You    must    have    gone    to\n# . ISgPl+ NSg/I/VXB P  NSg/VXB D/P+ NPr🅪Sg/VB+ . NPr+   . R/C/P NPl/V3+ NSg/VB/J/C/P I/Ddem+ . ISgPl+ NSg/VXB NSg/VXB VPp/J/P P\n> church     once  . Didn’t you    get    married  in        a   church     ? Listen , George , listen to me       .\n# NPr🅪Sg/VB+ NSg/C . VXPt   ISgPl+ NSg/VB NSg/VP/J NPr/J/R/P D/P NPr🅪Sg/VB+ . NSg/VB . NPr+   . NSg/VB P  NPr/ISg+ .\n> Didn’t you    get    married  in        a   church     ? ”\n# VXPt   ISgPl+ NSg/VB NSg/VP/J NPr/J/R/P D/P NPr🅪Sg/VB+ . .\n>\n#\n> “ That          was  a   long     time      ago . ”\n# . NSg/I/C/Ddem+ VLPt D/P NPr/VB/J N🅪Sg/VB/J J/P . .\n>\n#\n> The effort  of answering broke     the rhythm  of his     rocking — for   a    moment he       was\n# D   N🅪Sg/VB P  Nᴹ/Vg/J   NSg/VPt/J D   N🅪Sg/VB P  ISg/D$+ Nᴹ/Vg/J . R/C/P D/P+ NSg+   NPr/ISg+ VLPt\n> silent . Then      the same half      - knowing    , half      - bewildered look   came      back     into his\n# NSg/J  . NSg/J/R/C D+  I/J+ N🅪Sg/J/P+ . NSg/Vg/J/P . N🅪Sg/J/P+ . VP/J       NSg/VB NSg/VPt/P NSg/VB/J P    ISg/D$+\n> faded eyes    .\n# J     NPl/V3+ .\n>\n#\n> “ Look   in        the drawer there , ” he       said , pointing at    the desk    .\n# . NSg/VB NPr/J/R/P D+  NSg+   R     . . NPr/ISg+ VP/J . Nᴹ/Vg/J  NSg/P D+  NSg/VB+ .\n>\n#\n> “ Which drawer ? ”\n# . I/C+  NSg+   . .\n>\n#\n> “ That         drawer — that          one      . ”\n# . NSg/I/C/Ddem NSg    . NSg/I/C/Ddem+ NSg/I/J+ . .\n>\n#\n> Michaelis opened the drawer nearest his     hand    . There was  nothing  in        it       but     a\n# ?         VP/J   D+  NSg+   JS+     ISg/D$+ NSg/VB+ . R+    VLPt NSg/I/J+ NPr/J/R/P NPr/ISg+ NSg/C/P D/P\n> small    , expensive dog       - leash   , made of leather   and  braided silver   . It       was\n# NPr/VB/J . J         NSg/VB/J+ . NSg/VB+ . VP   P  N🅪Sg/VB/J VB/C VP/J    Nᴹ/VB/J+ . NPr/ISg+ VLPt\n> apparently new   .\n# R          NSg/J .\n>\n#\n> “ This    ? ” he       inquired , holding it       up         .\n# . I/Ddem+ . . NPr/ISg+ VP/J     . Nᴹ/Vg/J NPr/ISg+ NSg/VB/J/P .\n>\n#\n> Wilson stared and  nodded .\n# NPr+   VP/J   VB/C VP     .\n>\n#\n> “ I       found  it       yesterday afternoon . She  tried to tell   me       about it       , but     I       knew it\n# . ISg/#r+ NSg/VP NPr/ISg+ NSg+      N🅪Sg+     . ISg+ VP/J  P  NPr/VB NPr/ISg+ J/P   NPr/ISg+ . NSg/C/P ISg/#r+ VPt  NPr/ISg+\n> was  something funny . ”\n# VLPt NSg/I/J+  NSg/J . .\n>\n#\n> “ You    mean     your wife      bought it       ? ”\n# . ISgPl+ NSg/VB/J D$+  NSg/VB/J+ NSg/VP NPr/ISg+ . .\n>\n#\n> “ She  had it       wrapped in        tissue   paper      on  her     bureau . ”\n# . ISg+ VP  NPr/ISg+ VP/J    NPr/J/R/P N🅪Sg/VB+ N🅪Sg/VB/J+ J/P ISg/D$+ NSg+   . .\n>\n#\n> Michaelis didn’t see    anything  odd   in        that          , and  he       gave Wilson a   dozen reasons\n# ?         VXPt   NSg/VB NSg/I/VB+ NSg/J NPr/J/R/P NSg/I/C/Ddem+ . VB/C NPr/ISg+ VPt  NPr+   D/P NSg   NPl/V3+\n> why    his     wife      might    have    bought the dog       - leash   . But     conceivably Wilson had heard\n# NSg/VB ISg/D$+ NSg/VB/J+ Nᴹ/VXB/J NSg/VXB NSg/VP D   NSg/VB/J+ . NSg/VB+ . NSg/C/P R           NPr+   VP  VP/J\n> some     of these   same explanations before , from Myrtle , because he       began saying\n# I/J/R/Dq P  I/Ddem+ I/J+ NPl+         C/P    . P    NPr    . C/P     NPr/ISg+ VPt   N🅪Sg/Vg/J\n> “ Oh     , my  God     ! ” again in        a   whisper — his     comforter left     several explanations in        the\n# . NPr/VB . D$+ NPr/VB+ . . P     NPr/J/R/P D/P NSg/VB+ . ISg/D$+ NSg+      NPr/VP/J J/Dq    NPl          NPr/J/R/P D+\n> air      .\n# N🅪Sg/VB+ .\n>\n#\n> “ Then      he       killed her     , ” said Wilson . His     mouth   dropped open     suddenly .\n# . NSg/J/R/C NPr/ISg+ VP/J   ISg/D$+ . . VP/J NPr+   . ISg/D$+ NSg/VB+ VP/J    NSg/VB/J R        .\n>\n#\n> “ Who    did  ? ”\n# . NPr/I+ VXPt . .\n>\n#\n> “ I       have    a   way   of finding out          . ”\n# . ISg/#r+ NSg/VXB D/P NSg/J P  Nᴹ/Vg/J NSg/VB/J/R/P . .\n>\n#\n> “ You’re morbid , George , ” said his     friend    . “ This    has been     a   strain  to you    and  you\n# . K      J      . NPr+   . . VP/J ISg/D$+ NPr/VB/J+ . . I/Ddem+ V3  NSg/VLPp D/P N🅪Sg/VB P  ISgPl+ VB/C ISgPl+\n> don’t know what   you're saying    . You’d better      try       and  sit    quiet     till       morning    . ”\n# VXB   VB   NSg/I+ +      N🅪Sg/Vg/J . K     NSg/VXB/JC+ NSg/VB/J+ VB/C NSg/VB N🅪Sg/VB/J NSg/VB/C/P N🅪Sg/Vg/J+ . .\n>\n#\n> “ He       murdered her     . ”\n# . NPr/ISg+ VP/J     ISg/D$+ . .\n>\n#\n> “ It       was  an  accident , George . ”\n# . NPr/ISg+ VLPt D/P NSg/J    . NPr+   . .\n>\n#\n> Wilson shook     his     head      . His     eyes    narrowed and  his     mouth   widened slightly with the\n# NPr+   NSg/VPt/J ISg/D$+ NPr/VB/J+ . ISg/D$+ NPl/V3+ VP/J     VB/C ISg/D$+ NSg/VB+ VP/J    R        P    D\n> ghost     of a   superior “ Hm  ! ”\n# NSg/VB/J+ P  D/P NPr/J    . NPr . .\n>\n#\n> “ I       know , ” he       said definitely , “ I’m one     of these  trusting fellas and  I       don’t\n# . ISg/#r+ VB   . . NPr/ISg+ VP/J R          . . K   NSg/I/J P  I/Ddem Nᴹ/Vg/J  NPl+   VB/C ISg/#r+ VXB\n> think  any    harm     to nobody , but     when    I       get    to know a   thing I       know it       . It       was  the\n# NSg/VB I/R/Dq N🅪Sg/VB+ P  NSg/I+ . NSg/C/P NSg/I/C ISg/#r+ NSg/VB P  VB   D/P NSg+  ISg/#r+ VB   NPr/ISg+ . NPr/ISg+ VLPt D\n> man      in        that          car  . She  ran     out          to speak  to him  and  he       wouldn’t stop   . ”\n# NPr/VB/J NPr/J/R/P NSg/I/C/Ddem+ NSg+ . ISg+ NSg/VPt NSg/VB/J/R/P P  NSg/VB P  ISg+ VB/C NPr/ISg+ VXB      NSg/VB . .\n>\n#\n> Michaelis had seen    this   too , but     it       hadn’t occurred to him  that         there was  any\n# ?         VP  NSg/VPp I/Ddem R   . NSg/C/P NPr/ISg+ VPt    VP       P  ISg+ NSg/I/C/Ddem R+    VLPt I/R/Dq\n> special  significance in        it       . He       believed that          Mrs  . Wilson had been     running   away\n# NSg/VB/J NSg+         NPr/J/R/P NPr/ISg+ . NPr/ISg+ VP/J     NSg/I/C/Ddem+ NPl+ . NPr+   VP  NSg/VLPp Nᴹ/Vg/J/P VB/J\n> from her     husband , rather     than trying  to stop   any     particular car  .\n# P    ISg/D$+ NSg/VB+ . NPr/VB/J/R C/P  Nᴹ/Vg/J P  NSg/VB I/R/Dq+ NSg/J+     NSg+ .\n>\n#\n> “ How   could   she  of been     like         that          ? ”\n# . NSg/C NSg/VXB ISg+ P  NSg/VLPp NSg/VB/J/C/P NSg/I/C/Ddem+ . .\n>\n#\n> “ She’s a    deep  one      , ” said Wilson , as    if    that          answered the question . “ Ah       - h      - h      — — — ”\n# . K     D/P+ NSg/J NSg/I/J+ . . VP/J NPr+   . R/C/P NSg/C NSg/I/C/Ddem+ VP/J     D   NSg/VB+  . . NSg/I/VB . NSg/J+ . NSg/J+ . . . .\n>\n#\n> He       began to rock      again , and  Michaelis stood twisting the leash   in        his     hand    .\n# NPr/ISg+ VPt   P  NPr🅪Sg/VB P     . VB/C ?         VP    Nᴹ/Vg/J  D+  NSg/VB+ NPr/J/R/P ISg/D$+ NSg/VB+ .\n>\n#\n> “ Maybe   you    got some      friend    that          I       could   telephone for   , George ? ”\n# . NSg/J/R ISgPl+ VP  I/J/R/Dq+ NPr/VB/J+ NSg/I/C/Ddem+ ISg/#r+ NSg/VXB NSg/VB    R/C/P . NPr+   . .\n>\n#\n> This    was  a   forlorn  hope      — he       was  almost sure that         Wilson had no       friend    : there was\n# I/Ddem+ VLPt D/P NSg/VB/J NPr🅪Sg/VB . NPr/ISg+ VLPt R      J    NSg/I/C/Ddem NPr+   VP  NSg/Dq/P NPr/VB/J+ . R+    VLPt\n> not     enough of him  for   his     wife      . He       was  glad     a   little     later when    he       noticed a\n# NSg/R/C NSg/I  P  ISg+ R/C/P ISg/D$+ NSg/VB/J+ . NPr/ISg+ VLPt NSg/VB/J D/P NPr/I/J/Dq JC    NSg/I/C NPr/ISg+ VP/J    D/P\n> change   in        the room       , a   blue       quickening by    the window  , and  realized       that          dawn\n# N🅪Sg/VB+ NPr/J/R/P D+  N🅪Sg/VB/J+ . D/P N🅪Sg/VB/J+ Nᴹ/Vg/J+   NSg/P D+  NSg/VB+ . VB/C VP/J/Comm/NoAm NSg/I/C/Ddem+ NPr🅪Sg/VB+\n> wasn’t far      off        . About five o’clock it       was  blue      enough outside   to snap      off        the\n# VPt    NSg/VB/J NSg/VB/J/P . J/P   NSg  R       NPr/ISg+ VLPt N🅪Sg/VB/J NSg/I  Nᴹ/VB/J/P P  NSg/VB/J+ NSg/VB/J/P D+\n> light      .\n# N🅪Sg/VB/J+ .\n>\n#\n> Wilson’s glazed eyes    turned out          to the ashheaps , where   small    gray           clouds  took on\n# NPr$     VP/J   NPl/V3+ VP/J   NSg/VB/J/R/P P  D   ?        . NSg/R/C NPr/VB/J NPr🅪Sg/VB/J/Am NPl/V3+ VPt  J/P\n> fantastic shapes  and  scurried here and  there in        the faint    dawn       wind     .\n# NSg/J     NPl/V3+ VB/C VP/J     J/R  VB/C R     NPr/J/R/P D   NSg/VB/J NPr🅪Sg/VB+ N🅪Sg/VB+ .\n>\n#\n> “ I       spoke   to her     , ” he       muttered , after a    long      silence . “ I       told her     she  might    fool\n# . ISg/#r+ NSg/VPt P  ISg/D$+ . . NPr/ISg+ VP/J     . P     D/P+ NPr/VB/J+ NSg/VB+ . . ISg/#r+ VP   ISg/D$+ ISg+ Nᴹ/VXB/J NSg/VB/J\n> me       but     she  couldn’t fool     God     . I       took her     to the window  ” — with an   effort   he       got up\n# NPr/ISg+ NSg/C/P ISg+ VXB      NSg/VB/J NPr/VB+ . ISg/#r+ VPt  ISg/D$+ P  D+  NSg/VB+ . . P    D/P+ N🅪Sg/VB+ NPr/ISg+ VP  NSg/VB/J/P\n> and  walked to the rear      window  and  leaned with his     face    pressed against it       — “ and  I\n# VB/C VP/J   P  D+  NSg/VB/J+ NSg/VB+ VB/C VP/J   P    ISg/D$+ NSg/VB+ VP/J    C/P     NPr/ISg+ . . VB/C ISg/#r+\n> said ‘          God     knows what   you’ve been     doing   , everything you’ve been     doing   . You    may\n# VP/J Unlintable NPr/VB+ V3    NSg/I+ K      NSg/VLPp Nᴹ/Vg/J . NSg/I/VB+  K      NSg/VLPp Nᴹ/Vg/J . ISgPl+ NPr/VXB\n> fool     me       , but     you    can’t fool     God     ! ’ ”\n# NSg/VB/J NPr/ISg+ . NSg/C/P ISgPl+ VXB   NSg/VB/J NPr/VB+ . . .\n>\n#\n> Standing behind  him  , Michaelis saw     with a    shock   that          he       was  looking at    the eyes\n# Nᴹ/Vg/J  NSg/J/P ISg+ . ?         NSg/VPt P    D/P+ N🅪Sg/J+ NSg/I/C/Ddem+ NPr/ISg+ VLPt Nᴹ/Vg/J NSg/P D   NPl/V3\n> of Doctor  T. J. Eckleburg , which had just emerged , pale     and  enormous , from the\n# P  NSg/VB+ ?  ?  ?         . I/C+  VP  J/R  VP/J    . NSg/VB/J VB/C J        . P    D\n> dissolving night    .\n# Nᴹ/Vg/J    N🅪Sg/VB+ .\n>\n#\n> “ God     sees   everything , ” repeated Wilson .\n# . NPr/VB+ NPl/V3 NSg/I/VB+  . . VP/J     NPr+   .\n>\n#\n> “ That’s an  advertisement , ” Michaelis assured  him  . Something made him  turn   away\n# . NSg$   D/P NSg           . . ?         NSg/VP/J ISg+ . NSg/I/J+  VP   ISg+ NSg/VB VB/J\n> from the window  and  look   back     into the room       . But     Wilson stood there a    long      time       ,\n# P    D+  NSg/VB+ VB/C NSg/VB NSg/VB/J P    D+  N🅪Sg/VB/J+ . NSg/C/P NPr+   VP    R+    D/P+ NPr/VB/J+ N🅪Sg/VB/J+ .\n> his     face    close    to the window  pane   , nodding  into the twilight .\n# ISg/D$+ NSg/VB+ NSg/VB/J P  D+  NSg/VB+ NSg/VB . NSg/VP/J P    D   Nᴹ/VB/J+ .\n>\n#\n> By    six o’clock Michaelis was  worn  out          , and  grateful for   the sound     of a    car\n# NSg/P NSg R       ?         VLPt VPp/J NSg/VB/J/R/P . VB/C J        R/C/P D   N🅪Sg/VB/J P  D/P+ NSg+\n> stopping outside   . It       was  one     of the watchers of the night    before who    had\n# NSg/Vg   Nᴹ/VB/J/P . NPr/ISg+ VLPt NSg/I/J P  D   NPl      P  D+  N🅪Sg/VB+ C/P    NPr/I+ VP\n> promised to come       back     , so          he       cooked breakfast for   three , which he       and  the other\n# VP/J     P  NSg/VBPp/P NSg/VB/J . NSg/I/J/R/C NPr/ISg+ VP/J   N🅪Sg/VB+  R/C/P NSg   . I/C+  NPr/ISg+ VB/C D+  NSg/VB/J+\n> man       ate     together . Wilson was  quieter now       , and  Michaelis went    home      to sleep   ; when\n# NPr/VB/J+ NSg/VPt J        . NPr+   VLPt NSg/JC  NSg/J/R/C . VB/C ?         NSg/VPt NSg/VB/J+ P  N🅪Sg/VB . NSg/I/C\n> he       awoke four hours later and  hurried back     to the garage  , Wilson was  gone    .\n# NPr/ISg+ VPt   NSg+ NPl+  JC    VB/C VP/J    NSg/VB/J P  D   NSg/VB+ . NPr+   VLPt VPp/J/P .\n>\n#\n> His     movements — he       was  on  foot    all          the time       — were     afterward traced to Port\n# ISg/D$+ NPl+      . NPr/ISg+ VLPt J/P NSg/VB+ NSg/I/J/C/Dq D+  N🅪Sg/VB/J+ . NSg/VLPt R/Am      VP/J   P  NPr/VB/J\n> Roosevelt and  then      to Gad’s Hill    , where   he       bought a   sandwich  that          he       didn’t eat ,\n# NPr+      VB/C NSg/J/R/C P  ?     NPr/VB+ . NSg/R/C NPr/ISg+ NSg/VP D/P NSg/VB/J+ NSg/I/C/Ddem+ NPr/ISg+ VXPt   VB  .\n> and  a   cup    of coffee     . He       must    have    been     tired and  walking slowly , for   he       didn’t\n# VB/C D/P NSg/VB P  N🅪Sg/VB/J+ . NPr/ISg+ NSg/VXB NSg/VXB NSg/VLPp VP/J  VB/C Nᴹ/Vg/J R      . R/C/P NPr/ISg+ VXPt\n> reach  Gad’s Hill    until noon    . Thus far      there was  no       difficulty in        accounting for\n# NSg/VB ?     NPr/VB+ C/P   NSg/VB+ . NSg  NSg/VB/J R+    VLPt NSg/Dq/P N🅪Sg       NPr/J/R/P Nᴹ/Vg/J+   R/C/P\n> his     time       — there were     boys    who    had seen    a    man       “ acting  sort    of crazy , ” and\n# ISg/D$+ N🅪Sg/VB/J+ . R+    NSg/VLPt NPl/V3+ NPr/I+ VP  NSg/VPp D/P+ NPr/VB/J+ . Nᴹ/Vg/J NSg/VB+ P  NSg/J . . VB/C\n> motorists at    whom he       stared oddly from the side     of the road    . Then      for   three\n# NPl       NSg/P I+   NPr/ISg+ VP/J   R     P    D   NSg/VB/J P  D   N🅪Sg/J+ . NSg/J/R/C R/C/P NSg+\n> hours he       disappeared from view    . The police , on  the strength of what   he       said to\n# NPl+  NPr/ISg+ VP/J        P    NSg/VB+ . D+  Nᴹ/VB+ . J/P D   N🅪Sg/VB  P  NSg/I+ NPr/ISg+ VP/J P\n> Michaelis , that          he       “ had a   way   of finding out          , ” supposed that         he       spent that          time\n# ?         . NSg/I/C/Ddem+ NPr/ISg+ . VP  D/P NSg/J P  Nᴹ/Vg/J NSg/VB/J/R/P . . VP/J     NSg/I/C/Ddem NPr/ISg+ VP/J  NSg/I/C/Ddem+ N🅪Sg/VB/J+\n> going   from garage  to garage thereabout , inquiring for   a   yellow   car  . On  the other\n# Nᴹ/Vg/J P    NSg/VB+ P  NSg/VB R          . Nᴹ/Vg/J   R/C/P D/P NSg/VB/J NSg+ . J/P D+  NSg/VB/J+\n> hand    , no        garage  man       who    had seen    him  ever came      forward  , and  perhaps he       had an\n# NSg/VB+ . NSg/Dq/P+ NSg/VB+ NPr/VB/J+ NPr/I+ VP  NSg/VPp ISg+ J/R  NSg/VPt/P NSg/VB/J . VB/C NSg/R   NPr/ISg+ VP  D/P\n> easier , surer way   of finding out          what   he       wanted to know . By    half      - past       two he       was\n# NSg/JC . JC    NSg/J P  Nᴹ/Vg/J NSg/VB/J/R/P NSg/I+ NPr/ISg+ VP/J   P  VB   . NSg/P N🅪Sg/J/P+ . NSg/VB/J/P NSg NPr/ISg+ VLPt\n> in        West      Egg      , where   he       asked some      one      the way    to Gatsby’s house   . So          by    that          time\n# NPr/J/R/P NPr/VB/J+ N🅪Sg/VB+ . NSg/R/C NPr/ISg+ VP/J  I/J/R/Dq+ NSg/I/J+ D   NSg/J+ P  NPr$     NPr/VB+ . NSg/I/J/R/C NSg/P NSg/I/C/Ddem+ N🅪Sg/VB/J+\n> he       knew Gatsby’s name    .\n# NPr/ISg+ VPt  NPr$     NSg/VB+ .\n>\n#\n> At    two o’clock Gatsby put     on  his     bathing - suit    and  left     word    with the butler that\n# NSg/P NSg R       NPr    NSg/VBP J/P ISg/D$+ Nᴹ/Vg/J . NSg/VB+ VB/C NPr/VP/J NSg/VB+ P    D   NPr/VB NSg/I/C/Ddem\n> if    any    one      phoned word    was  to be       brought to him  at    the pool    . He       stopped at    the\n# NSg/C I/R/Dq NSg/I/J+ VP/J   NSg/VB+ VLPt P  NSg/VLXB VP      P  ISg+ NSg/P D   NSg/VB+ . NPr/ISg+ VP/J    NSg/P D+\n> garage  for   a   pneumatic mattress that          had amused his     guests  during the summer     ,\n# NSg/VB+ R/C/P D/P NSg/J     NSg/VB   NSg/I/C/Ddem+ VP  VP/J   ISg/D$+ NPl/V3+ VB/P   D   NPr🅪Sg/VB+ .\n> and  the chauffeur helped him  pump    it       up         . Then      he       gave instructions that         the open\n# VB/C D   NSg/VB    VP/J   ISg+ NSg/VB+ NPr/ISg+ NSg/VB/J/P . NSg/J/R/C NPr/ISg+ VPt  NPl+         NSg/I/C/Ddem D+  NSg/VB/J+\n> car  wasn’t to be       taken out          under   any    circumstances — and  this    was  strange  , because\n# NSg+ VPt    P  NSg/VLXB VPp/J NSg/VB/J/R/P NSg/J/P I/R/Dq NPl/V3+       . VB/C I/Ddem+ VLPt NSg/VB/J . C/P\n> the front     right    fender needed repair   .\n# D   NSg/VB/J+ NPr/VB/J NSg/VB VP/J   N🅪Sg/VB+ .\n>\n#\n> Gatsby shouldered the mattress and  started for   the pool    . Once  he       stopped and\n# NPr    VP/J       D   NSg/VB   VB/C VP/J    R/C/P D   NSg/VB+ . NSg/C NPr/ISg+ VP/J    VB/C\n> shifted it       a   little     , and  the chauffeur asked him  if    he       needed help   , but     he       shook\n# VP/J    NPr/ISg+ D/P NPr/I/J/Dq . VB/C D   NSg/VB    VP/J  ISg+ NSg/C NPr/ISg+ VP/J   NSg/VB . NSg/C/P NPr/ISg+ NSg/VPt/J\n> his     head      and  in        a   moment disappeared among the yellowing trees   .\n# ISg/D$+ NPr/VB/J+ VB/C NPr/J/R/P D/P NSg+   VP/J        P     D   Nᴹ/Vg/J   NPl/V3+ .\n>\n#\n> No        telephone message arrived , but     the butler went    without his     sleep    and  waited\n# NSg/Dq/P+ NSg/VB+   NSg/VB+ VP/J    . NSg/C/P D   NPr/VB NSg/VPt C/P     ISg/D$+ N🅪Sg/VB+ VB/C VP/J\n> for   it       until four o’clock — until long     after there was  any    one      to give   it       to if    it\n# R/C/P NPr/ISg+ C/P   NSg  R       . C/P   NPr/VB/J P     R+    VLPt I/R/Dq NSg/I/J+ P  NSg/VB NPr/ISg+ P  NSg/C NPr/ISg+\n> came      . I       have    an   idea that          Gatsby himself didn’t believe it       would come       , and\n# NSg/VPt/P . ISg/#r+ NSg/VXB D/P+ NSg+ NSg/I/C/Ddem+ NPr    ISg+    VXPt   VB      NPr/ISg+ VXB   NSg/VBPp/P . VB/C\n> perhaps he       no       longer cared . If    that          was  true     he       must    have    felt      that         he       had lost\n# NSg/R   NPr/ISg+ NSg/Dq/P NSg/JC VP    . NSg/C NSg/I/C/Ddem+ VLPt NSg/VB/J NPr/ISg+ NSg/VXB NSg/VXB N🅪Sg/VP/J NSg/I/C/Ddem NPr/ISg+ VP  VP/J\n> the old    warm      world   , paid a    high        price      for   living  too long     with a    single    dream     .\n# D+  NSg/J+ NSg/VB/J+ NSg/VB+ . VP/J D/P+ NSg/VB/J/R+ NPr🅪Sg/VB+ R/C/P Nᴹ/Vg/J R   NPr/VB/J P    D/P+ NSg/VB/J+ NSg/VB/J+ .\n> He       must    have    looked up         at    an   unfamiliar sky      through frightening leaves  and\n# NPr/ISg+ NSg/VXB NSg/VXB VP/J   NSg/VB/J/P NSg/P D/P+ NSg/J+     N🅪Sg/VB+ NSg/J/P Nᴹ/Vg/J+    NPl/V3+ VB/C\n> shivered as    he       found  what   a    grotesque thing a    rose       is  and  how   raw      the sunlight\n# VP/J     R/C/P NPr/ISg+ NSg/VP NSg/I+ D/P+ NSg/J+    NSg+  D/P+ NPr/VPt/J+ VL3 VB/C NSg/C NSg/VB/J D+  NSg/VB+\n> was  upon the scarcely created grass      . A    new   world   , material   without being        real  ,\n# VLPt P    D   R        VP/J    NPr🅪Sg/VB+ . D/P+ NSg/J NSg/VB+ . N🅪Sg/VB/J+ C/P     N🅪Sg/VLg/J/C NSg/J .\n> where   poor      ghosts  , breathing dreams  like         air      , drifted fortuitously about . . .\n# NSg/R/C NSg/VB/J+ NPl/V3+ . Nᴹ/Vg/J   NPl/V3+ NSg/VB/J/C/P N🅪Sg/VB+ . VP/J    R            J/P   . . .\n> like         that          ashen , fantastic figure  gliding toward him  through the amorphous\n# NSg/VB/J/C/P NSg/I/C/Ddem+ J     . NSg/J     NSg/VB+ Nᴹ/Vg/J J/P    ISg+ NSg/J/P D   J\n> trees   .\n# NPl/V3+ .\n>\n#\n> The chauffeur — he       was  one     of Wolfshiem’s protégés — heard the shots   — afterward he\n# D   NSg/VB    . NPr/ISg+ VLPt NSg/I/J P  ?           ?        . VP/J  D   NPl/V3+ . R/Am      NPr/ISg+\n> could   only  say    that         he       hadn’t thought anything  much         about them     . I       drove   from the\n# NSg/VXB J/R/C NSg/VB NSg/I/C/Ddem NPr/ISg+ VPt    N🅪Sg/VP NSg/I/VB+ NSg/I/J/R/Dq J/P   NSg/IPl+ . ISg/#r+ NSg/VPt P    D+\n> station directly to Gatsby’s house   and  my  rushing anxiously up         the front     steps\n# NSg/VB+ R/C      P  NPr$     NPr/VB+ VB/C D$+ Nᴹ/Vg/J R         NSg/VB/J/P D   NSg/VB/J+ NPl/V3+\n> was  the first thing that         alarmed any    one      . But     they knew then      , I       firmly believe .\n# VLPt D   NSg/J NSg+  NSg/I/C/Ddem VP/J    I/R/Dq NSg/I/J+ . NSg/C/P IPl+ VPt  NSg/J/R/C . ISg/#r+ R      VB      .\n> With scarcely a    word    said , four of us       , the chauffeur , butler , gardener , and  I       ,\n# P    R        D/P+ NSg/VB+ VP/J . NSg  P  NPr/IPl+ . D   NSg/VB    . NPr/VB . NSg/JC   . VB/C ISg/#r+ .\n> hurried down        to the pool    .\n# VP/J    N🅪Sg/VB/J/P P  D   NSg/VB+ .\n>\n#\n> There was  a   faint    , barely perceptible movement of the water    as    the fresh    flow\n# R+    VLPt D/P NSg/VB/J . R      NSg/J       N🅪Sg     P  D   N🅪Sg/VB+ R/C/P D   NSg/VB/J NSg/VB+\n> from one     end     urged its     way    toward the drain   at    the other    . With little      ripples\n# P    NSg/I/J NSg/VB+ VP/J  ISg/D$+ NSg/J+ J/P    D   NSg/VB+ NSg/P D   NSg/VB/J . P    NPr/I/J/Dq+ NPl/V3+\n> that          were     hardly the shadows of waves   , the laden mattress moved irregularly down\n# NSg/I/C/Ddem+ NSg/VLPt R      D   NPl/V3  P  NPl/V3+ . D+  VB/J+ NSg/VB   VP/J  R           N🅪Sg/VB/J/P\n> the pool    . A   small    gust   of wind     that          scarcely corrugated the surface was  enough\n# D   NSg/VB+ . D/P NPr/VB/J NSg/VB P  N🅪Sg/VB+ NSg/I/C/Ddem+ R        VP/J       D   NSg/VB+ VLPt NSg/I\n> to disturb its     accidental course  with its     accidental burden  . The touch   of a\n# P  NSg/VB  ISg/D$+ NSg/J      NSg/VB+ P    ISg/D$+ NSg/J+     NSg/VB+ . D   N🅪Sg/VB P  D/P\n> cluster of leaves  revolved it       slowly , tracing , like         the leg      of transit , a   thin\n# NSg/VB  P  NPl/V3+ VP/J     NPr/ISg+ R      . Nᴹ/Vg/J . NSg/VB/J/C/P D   NSg/VB/J P  NSg/VB+ . D/P NSg/VB/J\n> red    circle  in        the water    .\n# N🅪Sg/J NSg/VB+ NPr/J/R/P D   N🅪Sg/VB+ .\n>\n#\n> It       was  after we   started with Gatsby toward the house   that         the gardener saw\n# NPr/ISg+ VLPt P     IPl+ VP/J    P    NPr    J/P    D   NPr/VB+ NSg/I/C/Ddem D   NSg/JC   NSg/VPt\n> Wilson’s body    a   little     way    off        in        the grass      , and  the holocaust was  complete .\n# NPr$     NSg/VB+ D/P NPr/I/J/Dq NSg/J+ NSg/VB/J/P NPr/J/R/P D   NPr🅪Sg/VB+ . VB/C D   NPr/VB+   VLPt NSg/VB/J .\n>\n#\n>              CHAPTER IX\n# HeadingStart NSg/VB+ #r\n>\n#\n> After two  years I       remember the rest   of that          day     , and  that         night   and  the next\n# P     NSg+ NPl+  ISg/#r+ NSg/VB   D   NSg/VB P  NSg/I/C/Ddem+ NPr🅪Sg+ . VB/C NSg/I/C/Ddem N🅪Sg/VB VB/C D+  NSg/J/P+\n> day     , only  as    an  endless drill  of police and  photographers and  newspaper men  in\n# NPr🅪Sg+ . J/R/C R/C/P D/P J       NSg/VB P  Nᴹ/VB  VB/C NPl           VB/C N🅪Sg/VB+  NPl+ NPr/J/R/P\n> and  out          of Gatsby’s front     door    . A    rope    stretched across the main     gate   and  a\n# VB/C NSg/VB/J/R/P P  NPr$     NSg/VB/J+ NSg/VB+ . D/P+ NSg/VB+ VP/J      NSg/P  D   NSg/VB/J NSg/VB VB/C D/P+\n> policeman by    it       kept out          the curious , but     little      boys    soon discovered that         they\n# NSg+      NSg/P NPr/ISg+ VP   NSg/VB/J/R/P D   J       . NSg/C/P NPr/I/J/Dq+ NPl/V3+ J/R  VP/J       NSg/I/C/Ddem IPl+\n> could   enter  through my  yard    , and  there were     always a   few      of them     clustered\n# NSg/VXB NSg/VB NSg/J/P D$+ NSg/VB+ . VB/C R+    NSg/VLPt R      D/P NSg/I/Dq P  NSg/IPl+ VP/J\n> open     - mouthed about the pool    . Some     one     with a    positive manner , perhaps a\n# NSg/VB/J . VP/J    J/P   D+  NSg/VB+ . I/J/R/Dq NSg/I/J P    D/P+ NSg/J+   NSg+   . NSg/R   D/P+\n> detective , used the expression “ madman ” as    he       bent     over    Wilson’s body    that\n# NSg/J+    . VP/J D+  N🅪Sg+      . NSg    . R/C/P NPr/ISg+ NSg/VP/J NSg/J/P NPr$     NSg/VB+ NSg/I/C/Ddem+\n> afternoon , and  the adventitious authority of his     voice   set       the key      for   the\n# N🅪Sg+     . VB/C D   J            N🅪Sg      P  ISg/D$+ NSg/VB+ NPr/VBP/J D   NPr/VB/J R/C/P D\n> newspaper reports next    morning    .\n# N🅪Sg/VB+  NPl/V3+ NSg/J/P N🅪Sg/Vg/J+ .\n>\n#\n> Most         of those   reports were     a    nightmare — grotesque , circumstantial , eager    , and\n# NSg/I/J/R/Dq P  I/Ddem+ NPl/V3+ NSg/VLPt D/P+ NSg/VB+   . NSg/J     . NSg/J          . NSg/VB/J . VB/C\n> untrue . When    Michaelis’s testimony at    the inquest brought to light     Wilson’s\n# J      . NSg/I/C ?           NSg+      NSg/P D   NSg/VB  VP      P  N🅪Sg/VB/J NPr$\n> suspicions of his     wife      I       thought the whole tale    would shortly be       served up         in\n# NPl/V3     P  ISg/D$+ NSg/VB/J+ ISg/#r+ N🅪Sg/VP D   NSg/J NSg/VB+ VXB   R       NSg/VLXB VP/J   NSg/VB/J/P NPr/J/R/P\n> racy pasquinade — but     Catherine , who    might    have    said anything  , didn’t say    a   word    .\n# J    ?          . NSg/C/P NPr+      . NPr/I+ Nᴹ/VXB/J NSg/VXB VP/J NSg/I/VB+ . VXPt   NSg/VB D/P NSg/VB+ .\n> She  showed a   surprising amount of character about it       too — looked at    the coroner\n# ISg+ VP/J   D/P Nᴹ/Vg/J    NSg/VB P  N🅪Sg/VB+  J/P   NPr/ISg+ R   . VP/J   NSg/P D+  NSg+\n> with determined eyes    under   that          corrected brow   of hers , and  swore that         her\n# P    VP/J       NPl/V3+ NSg/J/P NSg/I/C/Ddem+ VP/J      NSg/VB P  ISg+ . VB/C VB    NSg/I/C/Ddem ISg/D$+\n> sister  had never seen    Gatsby , that         her     sister  was  completely happy    with her\n# NSg/VB+ VP  R     NSg/VPp NPr    . NSg/I/C/Ddem ISg/D$+ NSg/VB+ VLPt R          NSg/VB/J P    ISg/D$+\n> husband , that         her     sister  had been     into no       mischief whatever . She  convinced\n# NSg/VB+ . NSg/I/C/Ddem ISg/D$+ NSg/VB+ VP  NSg/VLPp P    NSg/Dq/P NSg/VB+  NSg/I/J+ . ISg+ VP/J\n> herself of it       , and  cried into her     handkerchief , as    if    the very suggestion was\n# ISg+    P  NPr/ISg+ . VB/C VP/J  P    ISg/D$+ NSg+         . R/C/P NSg/C D+  J/R+ N🅪Sg+      VLPt\n> more         than she  could   endure . So          Wilson was  reduced to a    man       “ deranged by    grief  ”\n# NPr/I/J/R/Dq C/P  ISg+ NSg/VXB VB     . NSg/I/J/R/C NPr+   VLPt VP/J    P  D/P+ NPr/VB/J+ . VP/J     NSg/P Nᴹ/VB+ .\n> in        order    that         the case       might    remain in        its     simplest form     . And  it       rested there .\n# NPr/J/R/P N🅪Sg/VB+ NSg/I/C/Ddem D   NPr🅪Sg/VB+ Nᴹ/VXB/J NSg/VB NPr/J/R/P ISg/D$+ JS       N🅪Sg/VB+ . VB/C NPr/ISg+ VP/J   R     .\n>\n#\n> But     all          this   part     of it       seemed remote   and  unessential . I       found  myself on\n# NSg/C/P NSg/I/J/C/Dq I/Ddem NSg/VB/J P  NPr/ISg+ VP/J   NSg/VB/J VB/C J           . ISg/#r+ NSg/VP ISg+   J/P\n> Gatsby’s side      , and  alone . From the moment I       telephoned news  of the catastrophe\n# NPr$     NSg/VB/J+ . VB/C J     . P    D+  NSg+   ISg/#r+ VP/J       Nᴹ/VB P  D   NSg+\n> to West      Egg      village , every surmise about him  , and  every practical question , was\n# P  NPr/VB/J+ N🅪Sg/VB+ NSg+    . Dq    NSg/VB  J/P   ISg+ . VB/C Dq    NSg/J     NSg/VB+  . VLPt\n> referred to me       . At    first I       was  surprised and  confused ; then      , as    he       lay        in        his\n# VP       P  NPr/ISg+ . NSg/P NSg/J ISg/#r+ VLPt VP/J      VB/C VP/J     . NSg/J/R/C . R/C/P NPr/ISg+ NSg/VBPt/J NPr/J/R/P ISg/D$+\n> house   and  didn’t move   or    breathe or    speak  , hour upon hour , it       grew upon me       that\n# NPr/VB+ VB/C VXPt   NSg/VB NPr/C VB      NPr/C NSg/VB . NSg+ P    NSg+ . NPr/ISg+ VPt  P    NPr/ISg+ NSg/I/C/Ddem\n> I       was  responsible , because no       one      else    was  interested — interested , I       mean     , with\n# ISg/#r+ VLPt NSg/J       . C/P     NSg/Dq/P NSg/I/J+ NSg/J/C VLPt VP/J       . VP/J       . ISg/#r+ NSg/VB/J . P\n> that         intense personal interest to which every one      has some     vague    right    at    the\n# NSg/I/C/Ddem J       NSg/J    N🅪Sg/VB+ P  I/C+  Dq    NSg/I/J+ V3  I/J/R/Dq NSg/VB/J NPr/VB/J NSg/P D\n> end     .\n# NSg/VB+ .\n>\n#\n> I       called up         Daisy half      an   hour after we   found  him  , called her     instinctively and\n# ISg/#r+ VP/J   NSg/VB/J/P NPr+  N🅪Sg/J/P+ D/P+ NSg+ P     IPl+ NSg/VP ISg+ . VP/J   ISg/D$+ R             VB/C\n> without hesitation . But     she  and  Tom     had gone    away early   that         afternoon , and\n# C/P     NSg+       . NSg/C/P ISg+ VB/C NPr/VB+ VP  VPp/J/P VB/J NSg/J/R NSg/I/C/Ddem N🅪Sg+     . VB/C\n> taken baggage with them     .\n# VPp/J Nᴹ+     P    NSg/IPl+ .\n>\n#\n> “ Left     no        address ? ”\n# . NPr/VP/J NSg/Dq/P+ NSg/VB+ . .\n>\n#\n> “ No       . ”\n# . NSg/Dq/P . .\n>\n#\n> “ Say    when    they’d be       back     ? ”\n# . NSg/VB NSg/I/C K      NSg/VLXB NSg/VB/J . .\n>\n#\n> “ No       . ”\n# . NSg/Dq/P . .\n>\n#\n> “ Any     idea where   they are ? How   I       could   reach  them     ? ”\n# . I/R/Dq+ NSg+ NSg/R/C IPl+ VLB . NSg/C ISg/#r+ NSg/VXB NSg/VB NSg/IPl+ . .\n>\n#\n> “ I       don’t know . Can’t say    . ”\n# . ISg/#r+ VXB   VB   . VXB   NSg/VB . .\n>\n#\n> I       wanted to get    somebody for   him  . I       wanted to go       into the room       where   he       lay        and\n# ISg/#r+ VP/J   P  NSg/VB NSg/I+   R/C/P ISg+ . ISg/#r+ VP/J   P  NSg/VB/J P    D+  N🅪Sg/VB/J+ NSg/R/C NPr/ISg+ NSg/VBPt/J VB/C\n> reassure him  : “ I’ll get    somebody for   you    , Gatsby . Don’t worry   . Just trust     me       and\n# VB       ISg+ . . K    NSg/VB NSg/I+   R/C/P ISgPl+ . NPr    . VXB   N🅪Sg/VB . J/R  N🅪Sg/VB/J NPr/ISg+ VB/C\n> I’ll get    somebody for   you    — — — ”\n# K    NSg/VB NSg/I+   R/C/P ISgPl+ . . . .\n>\n#\n> Meyer Wolfshiem’s name    wasn’t in        the phone   book    . The butler gave me       his     office\n# NPr   ?           NSg/VB+ VPt    NPr/J/R/P D   NSg/VB+ NSg/VB+ . D   NPr/VB VPt  NPr/ISg+ ISg/D$+ NSg/VB+\n> address on  Broadway , and  I       called Information , but     by    the time       I       had the number\n# NSg/VB+ J/P NPr/J+   . VB/C ISg/#r+ VP/J   Nᴹ+         . NSg/C/P NSg/P D   N🅪Sg/VB/J+ ISg/#r+ VP  D   N🅪Sg/VB/JC+\n> it       was  long     after five , and  no       one      answered the phone   .\n# NPr/ISg+ VLPt NPr/VB/J P     NSg  . VB/C NSg/Dq/P NSg/I/J+ VP/J     D   NSg/VB+ .\n>\n#\n> “ Will    you    ring    again ? ”\n# . NPr/VXB ISgPl+ NSg/VB+ P     . .\n>\n#\n> “ I’ve rung      them     three times   . ”\n# . K    NSg/VPp/J NSg/IPl+ NSg+  NPl/V3+ . .\n>\n#\n> “ It’s very important . ”\n# . K    J/R  J         . .\n>\n#\n> “ Sorry    . I’m afraid no       one’s there . ”\n# . NSg/VB/J . K   J      NSg/Dq/P NSg$  R     . .\n>\n#\n> I       went    back     to the drawing    - room       and  thought for   an  instant  that         they were     chance\n# ISg/#r+ NSg/VPt NSg/VB/J P  D+  N🅪Sg/Vg/J+ . N🅪Sg/VB/J+ VB/C N🅪Sg/VP R/C/P D/P NSg/VB/J NSg/I/C/Ddem IPl+ NSg/VLPt NPr/VB/J+\n> visitors , all          these   official people  who    suddenly filled it       . But     , though they\n# NPl+     . NSg/I/J/C/Dq I/Ddem+ NSg/J+   NPl/VB+ NPr/I+ R        VP/J   NPr/ISg+ . NSg/C/P . C      IPl+\n> drew    back     the sheet   and  looked at    Gatsby with shocked eyes    , his     protest\n# NPr/VPt NSg/VB/J D+  NSg/VB+ VB/C VP/J   NSg/P NPr    P    J       NPl/V3+ . ISg/D$+ N🅪Sg/VB+\n> continued in        my  brain      :\n# VP/J      NPr/J/R/P D$+ NPr🅪Sg/VB+ .\n>\n#\n> “ Look   here , old    sport   , you’ve got to get    somebody for   me       . You’ve got to try\n# . NSg/VB J/R  . NSg/J+ NSg/VB+ . K      VP  P  NSg/VB NSg/I+   R/C/P NPr/ISg+ . K      VP  P  NSg/VB/J\n> hard     . I       can’t go       through this   alone . ”\n# N🅪Sg/J/R . ISg/#r+ VXB   NSg/VB/J NSg/J/P I/Ddem J     . .\n>\n#\n> Some     one     started to ask    me       questions , but     I       broke     away and  going   up         - stairs\n# I/J/R/Dq NSg/I/J VP/J    P  NSg/VB NPr/ISg+ NPl/V3+   . NSg/C/P ISg/#r+ NSg/VPt/J VB/J VB/C Nᴹ/Vg/J NSg/VB/J/P . NPl+\n> looked hastily through the unlocked parts  of his     desk    — he’d never told me\n# VP/J   R       NSg/J/P D   VP/J     NPl/V3 P  ISg/D$+ NSg/VB+ . K    R     VP   NPr/ISg+\n> definitely that         his     parents were     dead     . But     there was  nothing  — only  the picture of\n# R          NSg/I/C/Ddem ISg/D$+ NPl/V3+ NSg/VLPt NSg/VB/J . NSg/C/P R+    VLPt NSg/I/J+ . J/R/C D   NSg/VB  P\n> Dan  Cody , a   token    of forgotten violence , staring down        from the wall    .\n# NPr+ NPr  . D/P NSg/VB/J P  NSg/VPp/J Nᴹ/VB+   . Nᴹ/Vg/J N🅪Sg/VB/J/P P    D   NPr/VB+ .\n>\n#\n> Next     morning    I       sent   the butler to New   York with a   letter  to Wolfshiem , which\n# NSg/J/P+ N🅪Sg/Vg/J+ ISg/#r+ NSg/VP D   NPr/VB P  NSg/J NPr+ P    D/P NSg/VB+ P  ?         . I/C+\n> asked for   information and  urged him  to come       out          on  the next    train   . That          request\n# VP/J  R/C/P Nᴹ+         VB/C VP/J  ISg+ P  NSg/VBPp/P NSg/VB/J/R/P J/P D   NSg/J/P NSg/VB+ . NSg/I/C/Ddem+ NSg/VB+\n> seemed superfluous when    I       wrote it       . I       was  sure he’d start  when    he       saw     the\n# VP/J   J           NSg/I/C ISg/#r+ VPt   NPr/ISg+ . ISg/#r+ VLPt J    K    NSg/VB NSg/I/C NPr/ISg+ NSg/VPt D\n> newspapers , just as    I       was  sure there’d be       a   wire     from Daisy before noon    — but\n# NPl/V3+    . J/R  R/C/P ISg/#r+ VLPt J    K       NSg/VLXB D/P N🅪Sg/VB+ P    NPr+  C/P    NSg/VB+ . NSg/C/P\n> neither a   wire     nor   Mr   . Wolfshiem arrived ; no       one      arrived except more         police and\n# I/C     D/P N🅪Sg/VB+ NSg/C NSg+ . ?         VP/J    . NSg/Dq/P NSg/I/J+ VP/J    VB/C/P NPr/I/J/R/Dq Nᴹ/VB  VB/C\n> photographers and  newspaper men  . When    the butler brought back     Wolfshiem’s answer\n# NPl           VB/C N🅪Sg/VB+  NPl+ . NSg/I/C D   NPr/VB VP      NSg/VB/J ?           NSg/VB+\n> I       began to have    a   feeling   of defiance , of scornful solidarity between Gatsby and\n# ISg/#r+ VPt   P  NSg/VXB D/P N🅪Sg/Vg/J P  NSg/VB+  . P  J        NSg+       NSg/P   NPr    VB/C\n> me       against them     all          .\n# NPr/ISg+ C/P     NSg/IPl+ NSg/I/J/C/Dq .\n>\n#\n> Dear      Mr   . Carraway . This    has been     one     of the most         terrible shocks of my  life     to\n# NSg/VB/J+ NSg+ . ?        . I/Ddem+ V3  NSg/VLPp NSg/I/J P  D   NSg/I/J/R/Dq J        NPl    P  D$+ N🅪Sg/VB+ P\n> me       I       hardly can     believe it       that         it       is  true     at    all          . Such  a   mad      act     as    that         man\n# NPr/ISg+ ISg/#r+ R      NPr/VXB VB      NPr/ISg+ NSg/I/C/Ddem NPr/ISg+ VL3 NSg/VB/J NSg/P NSg/I/J/C/Dq . NSg/I D/P NSg/VB/J NPr/VB+ R/C/P NSg/I/C/Ddem NPr/VB/J+\n> did  should make   us       all           think   . I       cannot  come       down        now       as    I       am        tied up         in        some\n# VXPt VXB    NSg/VB NPr/IPl+ NSg/I/J/C/Dq+ NSg/VB+ . ISg/#r+ NSg/VXB NSg/VBPp/P N🅪Sg/VB/J/P NSg/J/R/C R/C/P ISg/#r+ NPr/VLB/J VP/J NSg/VB/J/P NPr/J/R/P I/J/R/Dq\n> very important business and  cannot  get    mixed up         in        this   thing now       . If    there is\n# J/R  J         N🅪Sg/J+  VB/C NSg/VXB NSg/VB VP/J  NSg/VB/J/P NPr/J/R/P I/Ddem NSg+  NSg/J/R/C . NSg/C R+    VL3\n> anything  I       can     do  a   little     later let     me       know in        a   letter  by    Edgar . I       hardly know\n# NSg/I/VB+ ISg/#r+ NPr/VXB VXB D/P NPr/I/J/Dq JC    NSg/VBP NPr/ISg+ VB   NPr/J/R/P D/P NSg/VB+ NSg/P NPr+  . ISg/#r+ R      VB\n> where   I       am        when    I       hear about a    thing like         this    and  am        completely knocked down\n# NSg/R/C ISg/#r+ NPr/VLB/J NSg/I/C ISg/#r+ VB   J/P   D/P+ NSg+  NSg/VB/J/C/P I/Ddem+ VB/C NPr/VLB/J R          VP/J    N🅪Sg/VB/J/P\n> and  out          .\n# VB/C NSg/VB/J/R/P .\n>\n#\n> Yours truly\n# I+    J/R\n>\n#\n> Meyer Wolfshiem\n# NPr   ?\n>\n#\n> and  then      hasty addenda beneath :\n# VB/C NSg/J/R/C J     NPl     P       .\n>\n#\n> Let     me       know about the funeral etc do  not     know his     family  at    all          .\n# NSg/VBP NPr/ISg+ VB   J/P   D+  NSg/J+  ?   VXB NSg/R/C VB   ISg/D$+ N🅪Sg/J+ NSg/P NSg/I/J/C/Dq .\n>\n#\n> When    the phone   rang that         afternoon and  Long      Distance said Chicago was  calling I\n# NSg/I/C D+  NSg/VB+ VPt  NSg/I/C/Ddem N🅪Sg      VB/C NPr/VB/J+ N🅪Sg/VB+ VP/J NPr+    VLPt Nᴹ/Vg/J ISg/#r+\n> thought this    would be       Daisy at    last     . But     the connection came      through as    a   man’s\n# N🅪Sg/VP I/Ddem+ VXB   NSg/VLXB NPr+  NSg/P NSg/VB/J . NSg/C/P D+  N🅪Sg+      NSg/VPt/P NSg/J/P R/C/P D/P NPr$/I/VB/J\n> voice   , very thin     and  far      away .\n# NSg/VB+ . J/R  NSg/VB/J VB/C NSg/VB/J VB/J .\n>\n#\n> “ This    is  Slagle speaking . . . ”\n# . I/Ddem+ VL3 ?      Nᴹ/Vg/J  . . . .\n>\n#\n> “ Yes    ? ” The name    was  unfamiliar .\n# . NPl/VB . . D+  NSg/VB+ VLPt NSg/J      .\n>\n#\n> “ Hell   of a    note    , isn’t   it       ? Get    my  wire     ? ”\n# . NPr/VB P  D/P+ NSg/VB+ . NSg/VX3 NPr/ISg+ . NSg/VB D$+ N🅪Sg/VB+ . .\n>\n#\n> “ There haven’t been     any    wires   . ”\n# . R+    VXB     NSg/VLPp I/R/Dq NPl/V3+ . .\n>\n#\n> “ Young    Parke’s in        trouble  , ” he       said rapidly . “ They picked him  up         when    he       handed\n# . NPr/VB/J ?       NPr/J/R/P N🅪Sg/VB+ . . NPr/ISg+ VP/J R       . . IPl+ VP/J   ISg+ NSg/VB/J/P NSg/I/C NPr/ISg+ VP/J\n> the bonds   over    the counter   . They got a   circular from New    York giving  ’ em       the\n# D+  NPl/V3+ NSg/J/P D+  NSg/VB/J+ . IPl+ VP  D/P NSg/VB/J P    NSg/J+ NPr+ Nᴹ/Vg/J . NSg/I/J+ D+\n> numbers   just five minutes before . What   d’you know about that          , hey ? You    never can\n# NPrPl/V3+ J/R  NSg+ NPl/V3+ C/P    . NSg/I+ ?     VB   J/P   NSg/I/C/Ddem+ . NSg . ISgPl+ R     NPr/VXB\n> tell   in        these  hick   towns — — — ”\n# NPr/VB NPr/J/R/P I/Ddem NSg/VB NPl+  . . . .\n>\n#\n> “ Hello  ! ” I       interrupted breathlessly . “ Look   here — this   isn’t   Mr   . Gatsby . Mr   .\n# . NSg/VB . . ISg/#r+ VP/J        R            . . NSg/VB J/R  . I/Ddem NSg/VX3 NSg+ . NPr    . NSg+ .\n> Gatsby’s dead     . ”\n# NPr$     NSg/VB/J . .\n>\n#\n> There was  a   long     silence on  the other    end    of the wire     , followed by    an\n# R+    VLPt D/P NPr/VB/J NSg/VB+ J/P D   NSg/VB/J NSg/VB P  D+  N🅪Sg/VB+ . VP/J     NSg/P D/P+\n> exclamation . . . then      a    quick    squawk  as    the connection was  broken .\n# NSg+        . . . NSg/J/R/C D/P+ NSg/VB/J NSg/VB+ R/C/P D+  N🅪Sg+      VLPt VPp/J  .\n>\n#\n> I       think  it       was  on  the third    day    that         a    telegram signed Henry C. Gatz arrived\n# ISg/#r+ NSg/VB NPr/ISg+ VLPt J/P D   NSg/VB/J NPr🅪Sg NSg/I/C/Ddem D/P+ NSg/VB+  VP/J   NPr+  ?  ?    VP/J\n> from a   town in        Minnesota . It       said only  that         the sender was  leaving immediately\n# P    D/P NSg+ NPr/J/R/P NPr+      . NPr/ISg+ VP/J J/R/C NSg/I/C/Ddem D+  NSg+   VLPt Nᴹ/Vg/J R\n> and  to postpone the funeral until he       came      .\n# VB/C P  VB       D+  NSg/J+  C/P   NPr/ISg+ NSg/VPt/P .\n>\n#\n> It       was  Gatsby’s father  , a   solemn old   man       , very helpless and  dismayed , bundled up\n# NPr/ISg+ VLPt NPr$     NPr/VB+ . D/P J      NSg/J NPr/VB/J+ . J/R  J        VB/C VP/J     . VP/J    NSg/VB/J/P\n> in        a   long     cheap    ulster against the warm     September day     . His     eyes    leaked\n# NPr/J/R/P D/P NPr/VB/J NSg/VB/J NPr+   C/P     D   NSg/VB/J NPr+      NPr🅪Sg+ . ISg/D$+ NPl/V3+ VP/J\n> continuously with excitement , and  when    I       took the bag    and  umbrella from his\n# R            P    NSg+       . VB/C NSg/I/C ISg/#r+ VPt  D   NSg/VB VB/C NSg/VB+  P    ISg/D$+\n> hands   he       began to pull   so          incessantly at    his     sparse gray            beard   that          I       had\n# NPl/V3+ NPr/ISg+ VPt   P  NSg/VB NSg/I/J/R/C R           NSg/P ISg/D$+ VB/J   NPr🅪Sg/VB/J/Am+ NPr/VB+ NSg/I/C/Ddem+ ISg/#r+ VP\n> difficulty in        getting off        his     coat    . He       was  on  the point  of collapse , so          I       took\n# N🅪Sg+      NPr/J/R/P NSg/Vg+ NSg/VB/J/P ISg/D$+ NSg/VB+ . NPr/ISg+ VLPt J/P D   NSg/VB P  N🅪Sg/VB+ . NSg/I/J/R/C ISg/#r+ VPt\n> him  into the music      room       and  made him  sit    down        while      I       sent   for   something to eat .\n# ISg+ P    D+  N🅪Sg/VB/J+ N🅪Sg/VB/J+ VB/C VP   ISg+ NSg/VB N🅪Sg/VB/J/P NSg/VB/C/P ISg/#r+ NSg/VP R/C/P NSg/I/J+  P  VB  .\n> But     he       wouldn’t eat , and  the glass     of milk     spilled from his     trembling hand    .\n# NSg/C/P NPr/ISg+ VXB      VB  . VB/C D   NPr🅪Sg/VB P  N🅪Sg/VB+ VP/J    P    ISg/D$+ Nᴹ/Vg/J   NSg/VB+ .\n>\n#\n> “ I       saw     it       in        the Chicago newspaper , ” he       said . “ It       was  all          in        the Chicago\n# . ISg/#r+ NSg/VPt NPr/ISg+ NPr/J/R/P D+  NPr+    N🅪Sg/VB+  . . NPr/ISg+ VP/J . . NPr/ISg+ VLPt NSg/I/J/C/Dq NPr/J/R/P D+  NPr+\n> newspaper . I       started right    away . ”\n# N🅪Sg/VB+  . ISg/#r+ VP/J    NPr/VB/J VB/J . .\n>\n#\n> “ I       didn’t know how   to reach  you    . ”\n# . ISg/#r+ VXPt   VB   NSg/C P  NSg/VB ISgPl+ . .\n>\n#\n> His     eyes    , seeing     nothing  , moved ceaselessly about the room       .\n# ISg/D$+ NPl/V3+ . NSg/Vg/J/C NSg/I/J+ . VP/J  R           J/P   D+  N🅪Sg/VB/J+ .\n>\n#\n> “ It       was  a   madman , ” he       said . “ He       must    have    been     mad      . ”\n# . NPr/ISg+ VLPt D/P NSg    . . NPr/ISg+ VP/J . . NPr/ISg+ NSg/VXB NSg/VXB NSg/VLPp NSg/VB/J . .\n>\n#\n> “ Wouldn’t you    like         some     coffee     ? ” I       urged him  .\n# . VXB      ISgPl+ NSg/VB/J/C/P I/J/R/Dq N🅪Sg/VB/J+ . . ISg/#r+ VP/J  ISg+ .\n>\n#\n> “ I       don’t want   anything  . I’m all          right    now       , Mr   — — — ”\n# . ISg/#r+ VXB   NSg/VB NSg/I/VB+ . K   NSg/I/J/C/Dq NPr/VB/J NSg/J/R/C . NSg+ . . . .\n>\n#\n> “ Carraway . ”\n# . ?        . .\n>\n#\n> “ Well       , I’m all          right    now       . Where   have    they got Jimmy   ? ”\n# . NSg/VB/J/R . K   NSg/I/J/C/Dq NPr/VB/J NSg/J/R/C . NSg/R/C NSg/VXB IPl+ VP  NPr/VB+ . .\n>\n#\n> I       took him  into the drawing    - room       , where   his     son     lay        , and  left     him  there . Some\n# ISg/#r+ VPt  ISg+ P    D   N🅪Sg/Vg/J+ . N🅪Sg/VB/J+ . NSg/R/C ISg/D$+ NPr/VB+ NSg/VBPt/J . VB/C NPr/VP/J ISg+ R     . I/J/R/Dq+\n> little      boys    had come       up         on  the steps   and  were     looking into the hall ; when    I       told\n# NPr/I/J/Dq+ NPl/V3+ VP  NSg/VBPp/P NSg/VB/J/P J/P D+  NPl/V3+ VB/C NSg/VLPt Nᴹ/Vg/J P    D+  NPr+ . NSg/I/C ISg/#r+ VP\n> them     who    had arrived , they went    reluctantly away .\n# NSg/IPl+ NPr/I+ VP  VP/J    . IPl+ NSg/VPt R           VB/J .\n>\n#\n> After a   little     while      Mr   . Gatz opened the door    and  came      out          , his     mouth   ajar , his\n# P     D/P NPr/I/J/Dq NSg/VB/C/P NSg+ . ?    VP/J   D   NSg/VB+ VB/C NSg/VPt/P NSg/VB/J/R/P . ISg/D$+ NSg/VB+ VB/J . ISg/D$+\n> face    flushed slightly , his     eyes    leaking isolated and  unpunctual tears   . He       had\n# NSg/VB+ VP/J    R        . ISg/D$+ NPl/V3+ Nᴹ/Vg/J VP/J     VB/C ?          NPl/V3+ . NPr/ISg+ VP\n> reached an   age      where   death  no       longer has the quality of ghastly surprise , and\n# VP/J    D/P+ N🅪Sg/VB+ NSg/R/C NPr🅪Sg NSg/Dq/P NSg/JC V3  D   N🅪Sg/J  P  J       NSg/VB+  . VB/C\n> when    he       looked around him  now       for   the first time       and  saw     the height and  splendor\n# NSg/I/C NPr/ISg+ VP/J   J/P    ISg+ NSg/J/R/C R/C/P D   NSg/J N🅪Sg/VB/J+ VB/C NSg/VPt D   N🅪Sg+  VB/C NSg/Am\n> of the hall and  the great rooms   opening out          from it       into other    rooms   , his     grief\n# P  D   NPr+ VB/C D   NSg/J NPl/V3+ Nᴹ/Vg/J NSg/VB/J/R/P P    NPr/ISg+ P    NSg/VB/J NPl/V3+ . ISg/D$+ Nᴹ/VB+\n> began to be       mixed with an  awed pride  . I       helped him  to a    bedroom up         - stairs ; while\n# VPt   P  NSg/VLXB VP/J  P    D/P VP/J Nᴹ/VB+ . ISg/#r+ VP/J   ISg+ P  D/P+ NSg+    NSg/VB/J/P . NPl+   . NSg/VB/C/P\n> he       took off        his     coat    and  vest   I       told him  that         all          arrangements had been     deferred\n# NPr/ISg+ VPt  NSg/VB/J/P ISg/D$+ NSg/VB+ VB/C NSg/VB ISg/#r+ VP   ISg+ NSg/I/C/Ddem NSg/I/J/C/Dq NPl+         VP  NSg/VLPp NSg/VP/J\n> until he       came      .\n# C/P   NPr/ISg+ NSg/VPt/P .\n>\n#\n> “ I       didn’t know what   you’d want   , Mr   . Gatsby — — — ”\n# . ISg/#r+ VXPt   VB   NSg/I+ K     NSg/VB . NSg+ . NPr    . . . .\n>\n#\n> “ Gatz is  my  name    . ”\n# . ?    VL3 D$+ NSg/VB+ . .\n>\n#\n> “ — Mr   . Gatz . I       thought you    might    want   to take   the body    West      . ”\n# . . NSg+ . ?    . ISg/#r+ N🅪Sg/VP ISgPl+ Nᴹ/VXB/J NSg/VB P  NSg/VB D+  NSg/VB+ NPr/VB/J+ . .\n>\n#\n> He       shook     his     head      .\n# NPr/ISg+ NSg/VPt/J ISg/D$+ NPr/VB/J+ .\n>\n#\n> “ Jimmy   always liked it       better     down        East   . He       rose      up         to his     position in        the East   .\n# . NPr/VB+ R      VP/J  NPr/ISg+ NSg/VXB/JC N🅪Sg/VB/J/P NPr/J+ . NPr/ISg+ NPr/VPt/J NSg/VB/J/P P  ISg/D$+ NSg/VB+  NPr/J/R/P D+  NPr/J+ .\n> Were     you    a   friend   of my  boy’s , Mr   . — — — ? ”\n# NSg/VLPt ISgPl+ D/P NPr/VB/J P  D$+ NSg$  . NSg+ . . . . . .\n>\n#\n> “ We   were     close    friends   . ”\n# . IPl+ NSg/VLPt NSg/VB/J NPrPl/V3+ . .\n>\n#\n> “ He       had a    big    future before him  , you    know . He       was  only  a   young    man      , but     he       had a\n# . NPr/ISg+ VP  D/P+ NSg/J+ NSg/J+ C/P    ISg+ . ISgPl+ VB   . NPr/ISg+ VLPt J/R/C D/P NPr/VB/J NPr/VB/J . NSg/C/P NPr/ISg+ VP  D/P\n> lot    of brain      power      here . ”\n# NPr/VB P  NPr🅪Sg/VB+ N🅪Sg/VB/J+ J/R  . .\n>\n#\n> He       touched his     head      impressively , and  I       nodded .\n# NPr/ISg+ VP/J    ISg/D$+ NPr/VB/J+ R            . VB/C ISg/#r+ VP     .\n>\n#\n> “ If    he’d of lived , he’d of been     a   great man       . A   man      like         James  J. Hill    . He’d of\n# . NSg/C K    P  VP/J+ . K    P  NSg/VLPp D/P NSg/J NPr/VB/J+ . D/P NPr/VB/J NSg/VB/J/C/P NPrPl+ ?  NPr/VB+ . K    P\n> helped build  up         the country . ”\n# VP/J   NSg/VB NSg/VB/J/P D   NSg/J+  . .\n>\n#\n> “ That’s true     , ” I       said , uncomfortably .\n# . NSg$   NSg/VB/J . . ISg/#r+ VP/J . R             .\n>\n#\n> He       fumbled at    the embroidered coverlet , trying  to take   it       from the bed        , and  lay\n# NPr/ISg+ VP/J    NSg/P D   VP/J        NSg      . Nᴹ/Vg/J P  NSg/VB NPr/ISg+ P    D   NSg/VBP/J+ . VB/C NSg/VBPt/J\n> down        stiffly — was  instantly asleep .\n# N🅪Sg/VB/J/P R       . VLPt R         J      .\n>\n#\n> That          night    an  obviously frightened person  called up         , and  demanded to know who    I\n# NSg/I/C/Ddem+ N🅪Sg/VB+ D/P R         VP/J       NSg/VB+ VP/J   NSg/VB/J/P . VB/C VP/J     P  VB   NPr/I+ ISg/#r+\n> was  before he       would give   his     name    .\n# VLPt C/P    NPr/ISg+ VXB   NSg/VB ISg/D$+ NSg/VB+ .\n>\n#\n> “ This    is  Mr   . Carraway , ” I       said .\n# . I/Ddem+ VL3 NSg+ . ?        . . ISg/#r+ VP/J .\n>\n#\n> “ Oh     ! ” He       sounded relieved . “ This    is  Klipspringer . ”\n# . NPr/VB . . NPr/ISg+ VP/J    VP/J     . . I/Ddem+ VL3 ?            . .\n>\n#\n> I       was  relieved too , for   that          seemed to promise another friend    at    Gatsby’s grave     .\n# ISg/#r+ VLPt VP/J     R   . R/C/P NSg/I/C/Ddem+ VP/J   P  NSg/VB  I/D+    NPr/VB/J+ NSg/P NPr$     NSg/VB/J+ .\n> I       didn’t want   it       to be       in        the papers  and  draw   a   sightseeing crowd   , so          I’d been\n# ISg/#r+ VXPt   NSg/VB NPr/ISg+ P  NSg/VLXB NPr/J/R/P D   NPl/V3+ VB/C NSg/VB D/P NSg/Vg+     NSg/VB+ . NSg/I/J/R/C K   NSg/VLPp\n> calling up         a   few      people  myself . They were     hard     to find   .\n# Nᴹ/Vg/J NSg/VB/J/P D/P NSg/I/Dq NPl/VB+ ISg+   . IPl+ NSg/VLPt N🅪Sg/J/R P  NSg/VB .\n>\n#\n> “ The funeral’s to - morrow , ” I       said . “ Three o’clock , here at    the house   . I       wish\n# . D   NSg$      P  . NPr/VB . . ISg/#r+ VP/J . . NSg   R       . J/R  NSg/P D+  NPr/VB+ . ISg/#r+ NSg/VB\n> you’d tell   anybody who’d be       interested . ”\n# K     NPr/VB NSg/I+  K     NSg/VLXB VP/J       . .\n>\n#\n> “ Oh     , I       will    , ” he       broke     out          hastily . “ Of course  I’m not     likely to see    anybody ,\n# . NPr/VB . ISg/#r+ NPr/VXB . . NPr/ISg+ NSg/VPt/J NSg/VB/J/R/P R       . . P  NSg/VB+ K   NSg/R/C NSg/J  P  NSg/VB NSg/I+  .\n> but     if    I       do  . ”\n# NSg/C/P NSg/C ISg/#r+ VXB . .\n>\n#\n> His     tone       made me       suspicious .\n# ISg/D$+ N🅪Sg/I/VB+ VP   NPr/ISg+ J          .\n>\n#\n> “ Of course  you’ll be       there yourself . ”\n# . P  NSg/VB+ K      NSg/VLXB R+    ISg+     . .\n>\n#\n> “ Well       , I’ll certainly try      . What   I       called up         about is  — — — ”\n# . NSg/VB/J/R . K    R         NSg/VB/J . NSg/I+ ISg/#r+ VP/J   NSg/VB/J/P J/P   VL3 . . . .\n>\n#\n> “ Wait   a    minute    , ” I       interrupted . “ How   about saying    you’ll come       ? ”\n# . NSg/VB D/P+ NSg/VB/J+ . . ISg/#r+ VP/J        . . NSg/C J/P   N🅪Sg/Vg/J K      NSg/VBPp/P . .\n>\n#\n> “ Well       , the fact is  — the truth   of the matter   is  that          I’m staying with some     people\n# . NSg/VB/J/R . D+  NSg+ VL3 . D   N🅪Sg/VB P  D+  N🅪Sg/VB+ VL3 NSg/I/C/Ddem+ K   Nᴹ/Vg/J P    I/J/R/Dq NPl/VB+\n> up         here in        Greenwich , and  they rather     expect me       to be       with them     tomorrow . In\n# NSg/VB/J/P J/R  NPr/J/R/P NPr+      . VB/C IPl+ NPr/VB/J/R VB     NPr/ISg+ P  NSg/VLXB P    NSg/IPl+ NSg+     . NPr/J/R/P\n> fact , there’s a   sort   of picnic  or    something . Of course  I’ll do  my  very best       to\n# NSg+ . K       D/P NSg/VB P  NSg/VB+ NPr/C NSg/I/J+  . P  NSg/VB+ K    VXB D$+ J/R  NPr/VXB/JS P\n> get    away . ”\n# NSg/VB VB/J . .\n>\n#\n> I       ejaculated an  unrestrained “ Huh ! ” and  he       must    have    heard me       , for   he       went    on\n# ISg/#r+ VP/J       D/P VP/J         . W?  . . VB/C NPr/ISg+ NSg/VXB NSg/VXB VP/J  NPr/ISg+ . R/C/P NPr/ISg+ NSg/VPt J/P\n> nervously :\n# R         .\n>\n#\n> “ What   I       called up         about was  a   pair   of shoes   I       left     there . I       wonder  if    it’d be\n# . NSg/I+ ISg/#r+ VP/J   NSg/VB/J/P J/P   VLPt D/P NSg/VB P  NPl/V3+ ISg/#r+ NPr/VP/J R     . ISg/#r+ N🅪Sg/VB NSg/C K    NSg/VLXB\n> too much         trouble  to have    the butler send   them     on  . You    see    , they’re tennis  shoes   ,\n# R   NSg/I/J/R/Dq N🅪Sg/VB+ P  NSg/VXB D   NPr/VB NSg/VB NSg/IPl+ J/P . ISgPl+ NSg/VB . K       NSg/VB+ NPl/V3+ .\n> and  I’m sort   of helpless without them     . My  address is  care    of B. F. — — — ”\n# VB/C K   NSg/VB P  J        C/P     NSg/IPl+ . D$+ NSg/VB+ VL3 N🅪Sg/VB P  ?  ?  . . . .\n>\n#\n> I       didn’t hear the rest   of the name    , because I       hung     up         the receiver .\n# ISg/#r+ VXPt   VB   D   NSg/VB P  D   NSg/VB+ . C/P     ISg/#r+ NPr/VP/J NSg/VB/J/P D   NSg+     .\n>\n#\n> After that         I       felt      a    certain shame      for   Gatsby — one     gentleman to whom I       telephoned\n# P     NSg/I/C/Ddem ISg/#r+ N🅪Sg/VP/J D/P+ I/J+    N🅪Sg/VB/J+ R/C/P NPr    . NSg/I/J NSg/J+    P  I+   ISg/#r+ VP/J\n> implied that         he       had got what   he       deserved . However , that          was  my  fault   , for   he       was\n# VP/J    NSg/I/C/Ddem NPr/ISg+ VP  VP  NSg/I+ NPr/ISg+ VP/J     . C       . NSg/I/C/Ddem+ VLPt D$+ NSg/VB+ . R/C/P NPr/ISg+ VLPt\n> one     of those  who    used to sneer  most         bitterly at    Gatsby on  the courage of\n# NSg/I/J P  I/Ddem NPr/I+ VP/J P  NSg/VB NSg/I/J/R/Dq R        NSg/P NPr    J/P D   NSg/VB  P\n> Gatsby’s liquor   , and  I       should have    known better     than to call   him  .\n# NPr$     N🅪Sg/VB+ . VB/C ISg/#r+ VXB    NSg/VXB VPp/J NSg/VXB/JC C/P  P  NSg/VB ISg+ .\n>\n#\n> The morning   of the funeral I       went    up         to New    York to see    Meyer Wolfshiem ; I\n# D   N🅪Sg/Vg/J P  D+  NSg/J+  ISg/#r+ NSg/VPt NSg/VB/J/P P  NSg/J+ NPr+ P  NSg/VB NPr   ?         . ISg/#r+\n> couldn’t seem to reach  him  any    other    way    . The door    that          I       pushed open     , on  the\n# VXB      VB   P  NSg/VB ISg+ I/R/Dq NSg/VB/J NSg/J+ . D+  NSg/VB+ NSg/I/C/Ddem+ ISg/#r+ VP/J   NSg/VB/J . J/P D\n> advice of an   elevator boy     , was  marked “ The Swastika Holding Company , ” and  at\n# Nᴹ     P  D/P+ NSg/VB+  NSg/VB+ . VLPt VP/J   . D   NSg      Nᴹ/Vg/J N🅪Sg+   . . VB/C NSg/P\n> first there didn’t seem to be       any    one      inside  . But     when    I’d shouted “ hello  ”\n# NSg/J R+    VXPt   VB   P  NSg/VLXB I/R/Dq NSg/I/J+ NSg/J/P . NSg/C/P NSg/I/C K   VP/J    . NSg/VB .\n> several times   in        vain , an  argument broke     out          behind  a   partition , and  presently a\n# J/Dq    NPl/V3+ NPr/J/R/P VB/J . D/P N🅪Sg/VB+ NSg/VPt/J NSg/VB/J/R/P NSg/J/P D/P N🅪Sg/VB+  . VB/C R         D/P\n> lovely Jewess appeared at    an  interior door    and  scrutinized me       with black     hostile\n# NSg/J  NSg    VP/J     NSg/P D/P NSg/J    NSg/VB+ VB/C VP/J        NPr/ISg+ P    N🅪Sg/VB/J NSg/J\n> eyes    .\n# NPl/V3+ .\n>\n#\n> “ Nobody’s in        , ” she  said . “ Mr   . Wolfshiem’s gone    to Chicago . ”\n# . NSg$     NPr/J/R/P . . ISg+ VP/J . . NSg+ . ?           VPp/J/P P  NPr+    . .\n>\n#\n> The first part     of this    was  obviously untrue , for   some      one      had begun to whistle\n# D   NSg/J NSg/VB/J P  I/Ddem+ VLPt R         J      . R/C/P I/J/R/Dq+ NSg/I/J+ VP  VPp   P  NSg/VB\n> “ The Rosary , ” tunelessly , inside  .\n# . D   NSg    . . R          . NSg/J/P .\n>\n#\n> “ Please say    that          Mr   . Carraway wants  to see    him  . ”\n# . VB     NSg/VB NSg/I/C/Ddem+ NSg+ . ?        NPl/V3 P  NSg/VB ISg+ . .\n>\n#\n> “ I       can’t get    him  back     from Chicago , can     I       ? ”\n# . ISg/#r+ VXB   NSg/VB ISg+ NSg/VB/J P    NPr+    . NPr/VXB ISg/#r+ . .\n>\n#\n> At    this    moment a    voice   , unmistakably Wolfshiem’s , called “ Stella ! ” from the\n# NSg/P I/Ddem+ NSg+   D/P+ NSg/VB+ . R            ?           . VP/J   . NPr+   . . P    D\n> other    side     of the door    .\n# NSg/VB/J NSg/VB/J P  D+  NSg/VB+ .\n>\n#\n> “ Leave  your name    on  the desk    , ” she  said quickly . “ I’ll give   it       to him  when    he\n# . NSg/VB D$+  NSg/VB+ J/P D+  NSg/VB+ . . ISg+ VP/J R       . . K    NSg/VB NPr/ISg+ P  ISg+ NSg/I/C NPr/ISg+\n> gets   back     . ”\n# NPl/V3 NSg/VB/J . .\n>\n#\n> “ But     I       know he’s there . ”\n# . NSg/C/P ISg/#r+ VB   NPr$ R     . .\n>\n#\n> She  took a    step    toward me       and  began to slide  her     hands   indignantly up         and  down\n# ISg+ VPt  D/P+ NSg/VB+ J/P    NPr/ISg+ VB/C VPt   P  NSg/VB ISg/D$+ NPl/V3+ R           NSg/VB/J/P VB/C N🅪Sg/VB/J/P\n> her     hips    .\n# ISg/D$+ NPl/V3+ .\n>\n#\n> “ You    young     men  think  you    can     force   your way    in        here any     time       , ” she  scolded .\n# . ISgPl+ NPr/VB/J+ NPl+ NSg/VB ISgPl+ NPr/VXB N🅪Sg/VB D$+  NSg/J+ NPr/J/R/P J/R  I/R/Dq+ N🅪Sg/VB/J+ . . ISg+ VP/J    .\n> “ We’re getting sick     in        tired of it       . When    I       say    he’s in        Chicago , he’s in\n# . K     NSg/Vg  NSg/VB/J NPr/J/R/P VP/J  P  NPr/ISg+ . NSg/I/C ISg/#r+ NSg/VB NPr$ NPr/J/R/P NPr+    . NPr$ NPr/J/R/P\n> Chicago . ”\n# NPr+    . .\n>\n#\n> I       mentioned Gatsby .\n# ISg/#r+ VP/J      NPr    .\n>\n#\n> “ Oh     - h      ! ” She  looked at    me       over    again . ‘          ‘          Will    you    just — What   was  your name    ? ”\n# . NPr/VB . NSg/J+ . . ISg+ VP/J   NSg/P NPr/ISg+ NSg/J/P P     . Unlintable Unlintable NPr/VXB ISgPl+ J/R  . NSg/I+ VLPt D$+  NSg/VB+ . .\n>\n#\n> She  vanished . In        a    moment Meyer Wolfsheim stood solemnly in        the doorway , holding\n# ISg+ VP/J     . NPr/J/R/P D/P+ NSg+   NPr   ?         VP    R        NPr/J/R/P D   NSg+    . Nᴹ/Vg/J\n> out          both   hands   . He       drew    me       into his     office  , remarking in        a   reverent voice   that\n# NSg/VB/J/R/P I/C/Dq NPl/V3+ . NPr/ISg+ NPr/VPt NPr/ISg+ P    ISg/D$+ NSg/VB+ . Nᴹ/Vg/J   NPr/J/R/P D/P J        NSg/VB+ NSg/I/C/Ddem+\n> it       was  a   sad      time       for   all          of us       , and  offered me       a   cigar .\n# NPr/ISg+ VLPt D/P NSg/VB/J N🅪Sg/VB/J+ R/C/P NSg/I/J/C/Dq P  NPr/IPl+ . VB/C VP/J    NPr/ISg+ D/P NSg+  .\n>\n#\n> “ My  memory goes   back     to when    first I       met him  , ” he       said . “ A   young    major    just out\n# . D$+ N🅪Sg+  NPl/V3 NSg/VB/J P  NSg/I/C NSg/J ISg/#r+ VP  ISg+ . . NPr/ISg+ VP/J . . D/P NPr/VB/J NPr/VB/J J/R  NSg/VB/J/R/P\n> of the army and  covered over    with medals  he       got in        the war      . He       was  so          hard     up         he\n# P  D+  NSg+ VB/C VP/J    NSg/J/P P    NPl/V3+ NPr/ISg+ VP  NPr/J/R/P D+  N🅪Sg/VB+ . NPr/ISg+ VLPt NSg/I/J/R/C N🅪Sg/J/R NSg/VB/J/P NPr/ISg+\n> had to keep   on  wearing his     uniform  because he       couldn’t buy    some     regular clothes .\n# VP  P  NSg/VB J/P Nᴹ/Vg/J ISg/D$+ NSg/VB/J C/P     NPr/ISg+ VXB      NSg/VB I/J/R/Dq NSg/J   NPl/V3+ .\n> First  time       I       saw     him  was  when    he       come       into Winebrenner’s poolroom at    Forty - third\n# NSg/J+ N🅪Sg/VB/J+ ISg/#r+ NSg/VPt ISg+ VLPt NSg/I/C NPr/ISg+ NSg/VBPp/P P    ?             NSg      NSg/P NSg/J . NSg/VB/J\n> Street    and  asked for   a   job     . He       hadn’t eat anything  for   a   couple   of days . ‘          Come\n# NSg/VB/J+ VB/C VP/J  R/C/P D/P NPr/VB+ . NPr/ISg+ VPt    VB  NSg/I/VB+ R/C/P D/P NSg/VB/J P  NPl+ . Unlintable NSg/VBPp/P\n> on  have    some      lunch    with me       , ’ I       sid . He       ate     more         than four dollars ’ worth    of food\n# J/P NSg/VXB I/J/R/Dq+ N🅪Sg/VB+ P    NPr/ISg+ . . ISg/#r+ NPr . NPr/ISg+ NSg/VPt NPr/I/J/R/Dq C/P  NSg  NPl+    . NSg/VB/J P  NSg\n> in        half      an   hour . ”\n# NPr/J/R/P N🅪Sg/J/P+ D/P+ NSg+ . .\n>\n#\n> “ Did  you    start  him  in        business ? ” I       inquired .\n# . VXPt ISgPl+ NSg/VB ISg+ NPr/J/R/P N🅪Sg/J+  . . ISg/#r+ VP/J     .\n>\n#\n> “ Start  him  ! I       made him  . ”\n# . NSg/VB ISg+ . ISg/#r+ VP   ISg+ . .\n>\n#\n> “ Oh     . ”\n# . NPr/VB . .\n>\n#\n> “ I       raised him  up         out          of nothing  , right    out          of the gutter . I       saw     right    away he\n# . ISg/#r+ VP/J   ISg+ NSg/VB/J/P NSg/VB/J/R/P P  NSg/I/J+ . NPr/VB/J NSg/VB/J/R/P P  D   NSg/VB . ISg/#r+ NSg/VPt NPr/VB/J VB/J NPr/ISg+\n> was  a   fine     - appearing , gentlemanly young     man       , and  when    he       told me       he       was  an\n# VLPt D/P NSg/VB/J . Nᴹ/Vg/J   . J/R+        NPr/VB/J+ NPr/VB/J+ . VB/C NSg/I/C NPr/ISg+ VP   NPr/ISg+ NPr/ISg+ VLPt D/P\n> Oggsford I       knew I       could   use     him  good     . I       got him  to join   up         in        the American\n# ?        ISg/#r+ VPt  ISg/#r+ NSg/VXB N🅪Sg/VB ISg+ NPr/VB/J . ISg/#r+ VP  ISg+ P  NSg/VB NSg/VB/J/P NPr/J/R/P D+  NPr/J+\n> Legion    and  he       used to stand  high       there . Right    off        he       did  some     work    for   a   client\n# NSg/VB/J+ VB/C NPr/ISg+ VP/J P  NSg/VB NSg/VB/J/R R     . NPr/VB/J NSg/VB/J/P NPr/ISg+ VXPt I/J/R/Dq N🅪Sg/VB R/C/P D/P NSg\n> of mine      up         to Albany . We   were     so          thick    like         that          in        everything ” — he       held up         two\n# P  NSg/I/VB+ NSg/VB/J/P P  NPr    . IPl+ NSg/VLPt NSg/I/J/R/C NSg/VB/J NSg/VB/J/C/P NSg/I/C/Ddem+ NPr/J/R/P NSg/I/VB+  . . NPr/ISg+ VP   NSg/VB/J/P NSg+\n> bulbous fingers — “ always together . ”\n# J+      NPl/V3+ . . R      J        . .\n>\n#\n> I       wondered if    this    partnership had included the World’s Series transaction\n# ISg/#r+ VP/J     NSg/C I/Ddem+ N🅪Sg+       VP  VP/J     D   NSg$    NSgPl+ NSg+\n> in        1919 .\n# NPr/J/R/P #    .\n>\n#\n> “ Now       he’s dead     , ” I       said after a   moment . “ You    were     his     closest friend    , so          I       know\n# . NSg/J/R/C NPr$ NSg/VB/J . . ISg/#r+ VP/J P     D/P NSg+   . . ISgPl+ NSg/VLPt ISg/D$+ JS+     NPr/VB/J+ . NSg/I/J/R/C ISg/#r+ VB\n> you'll want   to come       to his     funeral this   afternoon . ”\n# K      NSg/VB P  NSg/VBPp/P P  ISg/D$+ NSg/J   I/Ddem N🅪Sg+     . .\n>\n#\n> “ I’d like         to come       . ”\n# . K   NSg/VB/J/C/P P  NSg/VBPp/P . .\n>\n#\n> “ Well       , come       then      . ”\n# . NSg/VB/J/R . NSg/VBPp/P NSg/J/R/C . .\n>\n#\n> The hair     in        his     nostrils quivered slightly , and  as    he       shook     his     head      his     eyes\n# D+  N🅪Sg/VB+ NPr/J/R/P ISg/D$+ NPl+     VP/J     R        . VB/C R/C/P NPr/ISg+ NSg/VPt/J ISg/D$+ NPr/VB/J+ ISg/D$+ NPl/V3+\n> filled with tears   .\n# VP/J   P    NPl/V3+ .\n>\n#\n> “ I       can’t do  it       — I       can’t get    mixed up         in        it       , ” he       said .\n# . ISg/#r+ VXB   VXB NPr/ISg+ . ISg/#r+ VXB   NSg/VB VP/J  NSg/VB/J/P NPr/J/R/P NPr/ISg+ . . NPr/ISg+ VP/J .\n>\n#\n> “ There’s nothing  to get    mixed up         in        . It’s all          over    now       . ”\n# . K       NSg/I/J+ P  NSg/VB VP/J  NSg/VB/J/P NPr/J/R/P . K    NSg/I/J/C/Dq NSg/J/P NSg/J/R/C . .\n>\n#\n> “ When    a    man       gets   killed I       never like         to get    mixed up         in        it       in        any     way    . I       keep\n# . NSg/I/C D/P+ NPr/VB/J+ NPl/V3 VP/J   ISg/#r+ R     NSg/VB/J/C/P P  NSg/VB VP/J  NSg/VB/J/P NPr/J/R/P NPr/ISg+ NPr/J/R/P I/R/Dq+ NSg/J+ . ISg/#r+ NSg/VB\n> out          . When    I       was  a   young    man      it       was  different — if    a   friend   of mine      died , no        matter\n# NSg/VB/J/R/P . NSg/I/C ISg/#r+ VLPt D/P NPr/VB/J NPr/VB/J NPr/ISg+ VLPt NSg/J     . NSg/C D/P NPr/VB/J P  NSg/I/VB+ VP/J . NSg/Dq/P+ N🅪Sg/VB+\n> how   , I       stuck    with them     to the end     . You    may     think  that’s sentimental , but     I       mean\n# NSg/C . ISg/#r+ NSg/VB/J P    NSg/IPl+ P  D+  NSg/VB+ . ISgPl+ NPr/VXB NSg/VB NSg$   J           . NSg/C/P ISg/#r+ NSg/VB/J\n> it       — to the bitter   end     . ”\n# NPr/ISg+ . P  D   NSg/VB/J NSg/VB+ . .\n>\n#\n> I       saw     that         for   some     reason  of his     own      he       was  determined not     to come       , so          I       stood\n# ISg/#r+ NSg/VPt NSg/I/C/Ddem R/C/P I/J/R/Dq N🅪Sg/VB P  ISg/D$+ NSg/VB/J NPr/ISg+ VLPt VP/J       NSg/R/C P  NSg/VBPp/P . NSg/I/J/R/C ISg/#r+ VP\n> up         .\n# NSg/VB/J/P .\n>\n#\n> “ Are you    a    college man       ? ” he       inquired suddenly .\n# . VLB ISgPl+ D/P+ NSg+    NPr/VB/J+ . . NPr/ISg+ VP/J     R        .\n>\n#\n> For   a    moment I       thought he       was  going   to suggest a   “ gonnegtion , ” but     he       only\n# R/C/P D/P+ NSg+   ISg/#r+ N🅪Sg/VP NPr/ISg+ VLPt Nᴹ/Vg/J P  VB      D/P . ?          . . NSg/C/P NPr/ISg+ J/R/C\n> nodded and  shook     my  hand    .\n# VP     VB/C NSg/VPt/J D$+ NSg/VB+ .\n>\n#\n> “ Let     us       learn  to show   our friendship for   a    man       when    he       is  alive and  not     after he\n# . NSg/VBP NPr/IPl+ NSg/VB P  NSg/VB D$+ N🅪Sg       R/C/P D/P+ NPr/VB/J+ NSg/I/C NPr/ISg+ VL3 J     VB/C NSg/R/C P     NPr/ISg+\n> is  dead     , ” he       suggested . “ After that         my  own       rule    is  to let     everything alone . ”\n# VL3 NSg/VB/J . . NPr/ISg+ VP/J      . . P     NSg/I/C/Ddem D$+ NSg/VB/J+ NSg/VB+ VL3 P  NSg/VBP NSg/I/VB+  J     . .\n>\n#\n> When    I       left     his     office the sky      had turned dark     and  I       got back     to West      Egg      in        a\n# NSg/I/C ISg/#r+ NPr/VP/J ISg/D$+ NSg/VB D+  N🅪Sg/VB+ VP  VP/J   NSg/VB/J VB/C ISg/#r+ VP  NSg/VB/J P  NPr/VB/J+ N🅪Sg/VB+ NPr/J/R/P D/P+\n> drizzle  . After changing my  clothes I       went    next    door    and  found  Mr   . Gatz walking\n# N🅪Sg/VB+ . P     Nᴹ/Vg/J  D$+ NPl/V3+ ISg/#r+ NSg/VPt NSg/J/P NSg/VB+ VB/C NSg/VP NSg+ . ?    Nᴹ/Vg/J\n> up         and  down        excitedly in        the hall . His     pride  in        his     son     and  in        his     son’s\n# NSg/VB/J/P VB/C N🅪Sg/VB/J/P R         NPr/J/R/P D   NPr+ . ISg/D$+ Nᴹ/VB+ NPr/J/R/P ISg/D$+ NPr/VB+ VB/C NPr/J/R/P ISg/D$+ NPr$\n> possessions was  continually increasing and  now       he       had something to show   me       .\n# NPl/V3+     VLPt R           Nᴹ/Vg/J    VB/C NSg/J/R/C NPr/ISg+ VP  NSg/I/J+  P  NSg/VB NPr/ISg+ .\n>\n#\n> “ Jimmy   sent   me       this    picture . ” He       took out          his     wallet with trembling fingers .\n# . NPr/VB+ NSg/VP NPr/ISg+ I/Ddem+ NSg/VB+ . . NPr/ISg+ VPt  NSg/VB/J/R/P ISg/D$+ NSg+   P    Nᴹ/Vg/J   NPl/V3+ .\n> “ Look   there . ”\n# . NSg/VB R     . .\n>\n#\n> It       was  a   photograph of the house   , cracked in        the corners and  dirty with many\n# NPr/ISg+ VLPt D/P NSg/VB     P  D+  NPr/VB+ . VP/J    NPr/J/R/P D+  NPl/V3+ VB/C VB/J  P    NSg/I/J/Dq+\n> hands   . He       pointed out          every detail     to me       eagerly . “ Look   there ! ” and  then      sought\n# NPl/V3+ . NPr/ISg+ VP/J    NSg/VB/J/R/P Dq+   N🅪Sg/VB/J+ P  NPr/ISg+ R       . . NSg/VB R     . . VB/C NSg/J/R/C VP\n> admiration from my  eyes    . He       had shown it       so          often that         I       think  it       was  more         real\n# NSg+       P    D$+ NPl/V3+ . NPr/ISg+ VP  VPp   NPr/ISg+ NSg/I/J/R/C R     NSg/I/C/Ddem ISg/#r+ NSg/VB NPr/ISg+ VLPt NPr/I/J/R/Dq NSg/J\n> to him  now       than the house   itself .\n# P  ISg+ NSg/J/R/C C/P  D+  NPr/VB+ ISg+   .\n>\n#\n> “ Jimmy   sent   it       to me       . I       think  it’s a   very pretty     picture . It       shows  up         well       . ”\n# . NPr/VB+ NSg/VP NPr/ISg+ P  NPr/ISg+ . ISg/#r+ NSg/VB K    D/P J/R  NSg/VB/J/R NSg/VB+ . NPr/ISg+ NPl/V3 NSg/VB/J/P NSg/VB/J/R . .\n>\n#\n> “ Very well       . Had you    seen    him  lately ? ”\n# . J/R  NSg/VB/J/R . VP  ISgPl+ NSg/VPp ISg+ R      . .\n>\n#\n> “ He       come       out          to see    me       two  years ago and  bought me       the house   I       live in        now       . Of\n# . NPr/ISg+ NSg/VBPp/P NSg/VB/J/R/P P  NSg/VB NPr/ISg+ NSg+ NPl+  J/P VB/C NSg/VP NPr/ISg+ D+  NPr/VB+ ISg/#r+ VB/J NPr/J/R/P NSg/J/R/C . P\n> course  we   was  broke     up         when    he       run      off        from home      , but     I       see    now       there was  a\n# NSg/VB+ IPl+ VLPt NSg/VPt/J NSg/VB/J/P NSg/I/C NPr/ISg+ NSg/VBPp NSg/VB/J/P P    NSg/VB/J+ . NSg/C/P ISg/#r+ NSg/VB NSg/J/R/C R+    VLPt D/P\n> reason   for   it       . He       knew he       had a   big   future in        front    of him  . And  ever since he\n# N🅪Sg/VB+ R/C/P NPr/ISg+ . NPr/ISg+ VPt  NPr/ISg+ VP  D/P NSg/J NSg/J  NPr/J/R/P NSg/VB/J P  ISg+ . VB/C J/R  C/P   NPr/ISg+\n> made a    success he       was  very generous with me       . ”\n# VP   D/P+ N🅪Sg+   NPr/ISg+ VLPt J/R  J        P    NPr/ISg+ . .\n>\n#\n> He       seemed reluctant to put     away the picture , held it       for   another minute    ,\n# NPr/ISg+ VP/J   J         P  NSg/VBP VB/J D+  NSg/VB+ . VP   NPr/ISg+ R/C/P I/D+    NSg/VB/J+ .\n> lingeringly , before my  eyes    . Then      he       returned the wallet and  pulled from his\n# R           . C/P    D$+ NPl/V3+ . NSg/J/R/C NPr/ISg+ VP/J     D+  NSg+   VB/C VP/J   P    ISg/D$+\n> pocket   a   ragged old   copy   of a   book    called “ Hopalong Cassidy . ”\n# NSg/VB/J D/P VP/J   NSg/J NSg/VB P  D/P NSg/VB+ VP/J   . ?        NPr     . .\n>\n#\n> “ Look   here , this    is  a   book   he       had when    he       was  a   boy    . It       just shows  you    . ”\n# . NSg/VB J/R  . I/Ddem+ VL3 D/P NSg/VB NPr/ISg+ VP  NSg/I/C NPr/ISg+ VLPt D/P NSg/VB . NPr/ISg+ J/R  NPl/V3 ISgPl+ . .\n>\n#\n> He       opened it       at    the back     cover     and  turned it       around for   me       to see    . On  the last\n# NPr/ISg+ VP/J   NPr/ISg+ NSg/P D   NSg/VB/J N🅪Sg/VB/J VB/C VP/J   NPr/ISg+ J/P    R/C/P NPr/ISg+ P  NSg/VB . J/P D   NSg/VB/J\n> fly       - leaf    was  printed the word    SCHEDULE , and  the date     September 12 , 1906 . And\n# NSg/VB/J+ . NSg/VB+ VLPt VP/J    D+  NSg/VB+ NSg/VB+  . VB/C D+  N🅪Sg/VB+ NPr+      #  . #    . VB/C\n> underneath :\n# NSg/J/P    .\n>\n#\n> Rise from bed\t6.00\ta. m.\n# Unlintable\n> Dumbbell exercise and wall-scaling\t6.15–6.30\t„\n# Unlintable\n> Study electricity, etc.\t7.15–8.15\t„\n# Unlintable\n> Work\t8.30–4.30\tp. m.\n# Unlintable\n> Baseball and sports\t4.30–5.00\t„\n# Unlintable\n> Practice elocution, poise and how to attain it\t5.00–6.00\t„\n# Unlintable\n> Study needed inventions\t7.00–9.00\t„\n# Unlintable\n>\n# Unlintable\n>\n#\n> GENERAL  RESOLVES\n# NSg/VB/J NPl/V3\n>\n#\n> No       wasting time       at    Shafters or    [ a   name    , indecipherable ] No       more         smokeing or\n# NSg/Dq/P Nᴹ/Vg/J N🅪Sg/VB/J+ NSg/P ?        NPr/C . D/P NSg/VB+ . J              . NSg/Dq/P NPr/I/J/R/Dq ?        NPr/C\n> chewing . Bath    every other     day     Read    one     improving book   or    magazine per week\n# Nᴹ/Vg/J . NSg/VB+ Dq+   NSg/VB/J+ NPr🅪Sg+ NSg/VBP NSg/I/J Nᴹ/Vg/J   NSg/VB NPr/C NSg      NSg NSg/J+\n> Save       $ 5.00 [ crossed out          ] $ 3.00 per week   Be       better     to parents\n# NSg/VB/C/P . #    . VP/J    NSg/VB/J/R/P . . #    NSg NSg/J+ NSg/VLXB NSg/VXB/JC P  NPl/V3\n>\n#\n> “ I       come       across this   book    by    accident , ” said the old    man       . “ It       just shows  you    ,\n# . ISg/#r+ NSg/VBPp/P NSg/P  I/Ddem NSg/VB+ NSg/P NSg/J+   . . VP/J D+  NSg/J+ NPr/VB/J+ . . NPr/ISg+ J/R  NPl/V3 ISgPl+ .\n> don’t it       ? ”\n# VXB   NPr/ISg+ . .\n>\n#\n> “ It       just shows  you    . ”\n# . NPr/ISg+ J/R  NPl/V3 ISgPl+ . .\n>\n#\n> “ Jimmy   was  bound    to get    ahead . He       always had some     resolves like         this    or\n# . NPr/VB+ VLPt NSg/VP/J P  NSg/VB R     . NPr/ISg+ R      VP  I/J/R/Dq NPl/V3   NSg/VB/J/C/P I/Ddem+ NPr/C\n> something . Do  you    notice what   he’s got about improving his     mind    ? He       was  always\n# NSg/I/J+  . VXB ISgPl+ NSg/VB NSg/I+ NPr$ VP  J/P   Nᴹ/Vg/J   ISg/D$+ NSg/VB+ . NPr/ISg+ VLPt R\n> great for   that          . He       told me       I       et   like         a   hog    once  , and  I       beat      him  for   it       . ”\n# NSg/J R/C/P NSg/I/C/Ddem+ . NPr/ISg+ VP   NPr/ISg+ ISg/#r+ NSg+ NSg/VB/J/C/P D/P NSg/VB NSg/C . VB/C ISg/#r+ N🅪Sg/VB/J ISg+ R/C/P NPr/ISg+ . .\n>\n#\n> He       was  reluctant to close    the book    , reading   each item    aloud and  then      looking\n# NPr/ISg+ VLPt J         P  NSg/VB/J D+  NSg/VB+ . NPrᴹ/Vg/J Dq+  NSg/VB+ J     VB/C NSg/J/R/C Nᴹ/Vg/J\n> eagerly at    me       . I       think  he       rather     expected me       to copy   down        the list    for   my  own\n# R       NSg/P NPr/ISg+ . ISg/#r+ NSg/VB NPr/ISg+ NPr/VB/J/R NSg/VP/J NPr/ISg+ P  NSg/VB N🅪Sg/VB/J/P D+  NSg/VB+ R/C/P D$+ NSg/VB/J+\n> use      .\n# N🅪Sg/VB+ .\n>\n#\n> A   little     before three the Lutheran minister arrived from Flushing , and  I       began\n# D/P NPr/I/J/Dq C/P    NSg   D+  NSg/J+   NSg/VB+  VP/J    P    Nᴹ/Vg/J  . VB/C ISg/#r+ VPt\n> to look   involuntarily out          the windows   for   other    cars . So          did  Gatsby’s father  .\n# P  NSg/VB R             NSg/VB/J/R/P D   NPrPl/V3+ R/C/P NSg/VB/J NPl+ . NSg/I/J/R/C VXPt NPr$     NPr/VB+ .\n> And  as    the time       passed and  the servants came      in        and  stood waiting in        the hall ,\n# VB/C R/C/P D+  N🅪Sg/VB/J+ VP/J   VB/C D+  NPl/V3+  NSg/VPt/P NPr/J/R/P VB/C VP    Nᴹ/Vg/J NPr/J/R/P D+  NPr+ .\n> his     eyes    began to blink  anxiously , and  he       spoke   of the rain     in        a   worried ,\n# ISg/D$+ NPl/V3+ VPt   P  NSg/VB R         . VB/C NPr/ISg+ NSg/VPt P  D+  N🅪Sg/VB+ NPr/J/R/P D/P VP/J    .\n> uncertain way    . The minister glanced several times   at    his     watch  , so          I       took him\n# I/J+      NSg/J+ . D+  NSg/VB+  VP/J    J/Dq+   NPl/V3+ NSg/P ISg/D$+ NSg/VB . NSg/I/J/R/C ISg/#r+ VPt  ISg+\n> aside and  asked him  to wait   for   half      an   hour . But     it       wasn’t any    use      . Nobody\n# NSg/J VB/C VP/J  ISg+ P  NSg/VB R/C/P N🅪Sg/J/P+ D/P+ NSg+ . NSg/C/P NPr/ISg+ VPt    I/R/Dq N🅪Sg/VB+ . NSg/I+\n> came      .\n# NSg/VPt/P .\n>\n#\n> About five o’clock our procession of three cars reached the cemetery and  stopped\n# J/P   NSg  R       D$+ NSg/VB     P  NSg+  NPl+ VP/J    D+  NSg+     VB/C VP/J\n> in        a   thick    drizzle  beside the gate    — first  a    motor     hearse , horribly black     and  wet      ,\n# NPr/J/R/P D/P NSg/VB/J N🅪Sg/VB+ P      D+  NSg/VB+ . NSg/J+ D/P+ NSg/VB/J+ NSg/VB . R        N🅪Sg/VB/J VB/C NSg/VP/J .\n> then      Mr   . Gatz and  the minister and  I       in        the limousine , and  a   little     later four\n# NSg/J/R/C NSg+ . ?    VB/C D   NSg/VB+  VB/C ISg/#r+ NPr/J/R/P D   NSg       . VB/C D/P NPr/I/J/Dq JC    NSg\n> or    five servants and  the postman from West      Egg      , in        Gatsby’s station wagon   , all\n# NPr/C NSg  NPl/V3+  VB/C D   NSg     P    NPr/VB/J+ N🅪Sg/VB+ . NPr/J/R/P NPr$     NSg/VB+ NSg/VB+ . NSg/I/J/C/Dq\n> wet      to the skin     . As    we   started through the gate    into the cemetery I       heard a    car\n# NSg/VP/J P  D   N🅪Sg/VB+ . R/C/P IPl+ VP/J    NSg/J/P D+  NSg/VB+ P    D+  NSg+     ISg/#r+ VP/J  D/P+ NSg+\n> stop   and  then      the sound     of some      one      splashing after us       over    the soggy ground     . I\n# NSg/VB VB/C NSg/J/R/C D   N🅪Sg/VB/J P  I/J/R/Dq+ NSg/I/J+ Nᴹ/Vg/J   P     NPr/IPl+ NSg/J/P D   J     N🅪Sg/VB/J+ . ISg/#r+\n> looked around . It       was  the man      with owl     - eyed  glasses whom I       had found  marvelling\n# VP/J   J/P    . NPr/ISg+ VLPt D   NPr/VB/J P    NSg/VB+ . VP/J+ NPl/V3+ I+   ISg/#r+ VP  NSg/VP NSg/Vg/Comm\n> over    Gatsby’s books   in        the library one      night    three months before .\n# NSg/J/P NPr$     NPl/V3+ NPr/J/R/P D   NSg+    NSg/I/J+ N🅪Sg/VB+ NSg+  NPl+   C/P    .\n>\n#\n> I'd never seen    him  since then      . I       don’t know how   he       knew about the funeral , or\n# K   R     NSg/VPp ISg+ C/P   NSg/J/R/C . ISg/#r+ VXB   VB   NSg/C NPr/ISg+ VPt  J/P   D   NSg/J+  . NPr/C\n> even       his     name    . The rain     poured down        his     thick     glasses , and  he       took them     off        and\n# NSg/VB/J/R ISg/D$+ NSg/VB+ . D+  N🅪Sg/VB+ VP/J   N🅪Sg/VB/J/P ISg/D$+ NSg/VB/J+ NPl/V3+ . VB/C NPr/ISg+ VPt  NSg/IPl+ NSg/VB/J/P VB/C\n> wiped them     to see    the protecting canvas  unrolled from Gatsby’s grave     .\n# VP/J  NSg/IPl+ P  NSg/VB D+  Nᴹ/Vg/J    NSg/VB+ VP/J     P    NPr$     NSg/VB/J+ .\n>\n#\n> I       tried to think  about Gatsby then      for   a   moment , but     he       was  already too far\n# ISg/#r+ VP/J  P  NSg/VB J/P   NPr    NSg/J/R/C R/C/P D/P NSg+   . NSg/C/P NPr/ISg+ VLPt R       R   NSg/VB/J\n> away , and  I       could   only  remember , without resentment , that         Daisy hadn’t sent   a\n# VB/J . VB/C ISg/#r+ NSg/VXB J/R/C NSg/VB   . C/P     NSg+       . NSg/I/C/Ddem NPr+  VPt    NSg/VP D/P\n> message or    a   flower  . Dimly I       heard some      one      murmur “ Blessed are the dead     that\n# NSg/VB  NPr/C D/P NSg/VB+ . R     ISg/#r+ VP/J  I/J/R/Dq+ NSg/I/J+ NSg/VB . VP/J    VLB D   NSg/VB/J NSg/I/C/Ddem\n> the rain     falls   on  , ” and  then      the owl     - eyed man       said “ Amen   to that          , ” in        a   brave\n# D   N🅪Sg/VB+ NPl/V3+ J/P . . VB/C NSg/J/R/C D   NSg/VB+ . VP/J NPr/VB/J+ VP/J . NPr/VB P  NSg/I/C/Ddem+ . . NPr/J/R/P D/P NSg/VB/J\n> voice   .\n# NSg/VB+ .\n>\n#\n> We   straggled down        quickly through the rain     to the cars . Owl     - eyes    spoke   to me       by\n# IPl+ VP/J      N🅪Sg/VB/J/P R       NSg/J/P D   N🅪Sg/VB+ P  D   NPl+ . NSg/VB+ . NPl/V3+ NSg/VPt P  NPr/ISg+ NSg/P\n> the gate    .\n# D+  NSg/VB+ .\n>\n#\n> “ I       couldn’t get    to the house   , ” he       remarked .\n# . ISg/#r+ VXB      NSg/VB P  D   NPr/VB+ . . NPr/ISg+ VP/J     .\n>\n#\n> “ Neither could   anybody else    . ”\n# . I/C     NSg/VXB NSg/I+  NSg/J/C . .\n>\n#\n> “ Go       on  ! ” He       started . “ Why    , my  God     ! they used to go       there by    the hundreds . ”\n# . NSg/VB/J J/P . . NPr/ISg+ VP/J    . . NSg/VB . D$+ NPr/VB+ . IPl+ VP/J P  NSg/VB/J R     NSg/P D+  NPl+     . .\n>\n#\n> He       took off        his     glasses and  wiped them     again , outside   and  in        .\n# NPr/ISg+ VPt  NSg/VB/J/P ISg/D$+ NPl/V3+ VB/C VP/J  NSg/IPl+ P     . Nᴹ/VB/J/P VB/C NPr/J/R/P .\n>\n#\n> “ The poor     son     - of - a   - bitch  , ” he       said .\n# . D   NSg/VB/J NPr/VB+ . P  . D/P . NSg/VB . . NPr/ISg+ VP/J .\n>\n#\n> One     of my  most         vivid  memories is  of coming  back     West      from prep   school   and  later\n# NSg/I/J P  D$+ NSg/I/J/R/Dq NSg/J+ NPl+     VL3 P  Nᴹ/Vg/J NSg/VB/J NPr/VB/J+ P    Nᴹ/VB+ N🅪Sg/VB+ VB/C JC\n> from college at    Christmas time       . Those   who    went    farther than Chicago would gather\n# P    NSg     NSg/P NPr/VB/J+ N🅪Sg/VB/J+ . I/Ddem+ NPr/I+ NSg/VPt VB/JC   C/P  NPr+    VXB   NSg/VB\n> in        the old    dim       Union     Street    station at    six o’clock of a    December evening    , with a\n# NPr/J/R/P D+  NSg/J+ NSg/VB/J+ NPr/VB/J+ NSg/VB/J+ NSg/VB+ NSg/P NSg R       P  D/P+ NPr+     N🅪Sg/Vg/J+ . P    D/P+\n> few       Chicago friends   , already caught up         into their own       holiday gayeties , to bid\n# NSg/I/Dq+ NPr+    NPrPl/V3+ . R       VP/J   NSg/VB/J/P P    D$+   NSg/VB/J+ NPr/VB+ ?        . P  NSg/VBP\n> them     a   hasty good     - by    . I       remember the fur          coats  of the girls   returning from Miss\n# NSg/IPl+ D/P J     NPr/VB/J . NSg/P . ISg/#r+ NSg/VB   D   N🅪Sg/VB/C/P+ NPl/V3 P  D+  NPl/V3+ Nᴹ/Vg/J   P    NSg/VB\n> This    - or    - That’s and  the chatter of frozen breath     and  the hands   waving  overhead as\n# I/Ddem+ . NPr/C . NSg$   VB/C D   NSg/VB  P  VB/J   N🅪Sg/VB/J+ VB/C D   NPl/V3+ Nᴹ/Vg/J NSg/J/P+ R/C/P\n> we   caught sight   of old   acquaintances , and  the matchings of invitations : “ Are you\n# IPl+ VP/J   N🅪Sg/VB P  NSg/J NPl+          . VB/C D   ?         P  NPl+        . . VLB ISgPl+\n> going   to the Ordways ’ ? the Herseys ’ ? the Schultzes ’ ? ” and  the long      green        tickets\n# Nᴹ/Vg/J P  D   ?       . . D   ?       . . D   ?         . . . VB/C D+  NPr/VB/J+ NPr🅪Sg/VB/J+ NPl/V3+\n> clasped tight in        our gloved hands   . And  last     the murky yellow   cars of the\n# VP/J    VB/J  NPr/J/R/P D$+ VP/J   NPl/V3+ . VB/C NSg/VB/J D   J     NSg/VB/J NPl  P  D\n> Chicago , Milwaukee & St      . Paul railroad looking cheerful as    Christmas itself on\n# NPr+    . NPr       . NPr/VB+ . NPr+ NSg/VB+  Nᴹ/Vg/J J        R/C/P NPr/VB/J+ ISg+   J/P\n> the tracks  beside the gate    .\n# D+  NPl/V3+ P      D+  NSg/VB+ .\n>\n#\n> When    we   pulled out          into the winter   night    and  the real   snow       , our snow       , began to\n# NSg/I/C IPl+ VP/J   NSg/VB/J/R/P P    D+  N🅪Sg/VB+ N🅪Sg/VB+ VB/C D+  NSg/J+ NPr🅪Sg/VB+ . D$+ NPr🅪Sg/VB+ . VPt   P\n> stretch out          beside us       and  twinkle against the windows   , and  the dim      lights of\n# N🅪Sg/VB NSg/VB/J/R/P P      NPr/IPl+ VB/C NSg/VB  C/P     D   NPrPl/V3+ . VB/C D   NSg/VB/J NPl/V3 P\n> small    Wisconsin stations moved by    , a   sharp    wild     brace  came      suddenly into the\n# NPr/VB/J NPr+      +        VP/J  NSg/P . D/P NPr/VB/J NSg/VB/J NSg/VB NSg/VPt/P R        P    D\n> air      . We   drew    in        deep  breaths of it       as    we   walked back     from dinner   through the\n# N🅪Sg/VB+ . IPl+ NPr/VPt NPr/J/R/P NSg/J NPl     P  NPr/ISg+ R/C/P IPl+ VP/J   NSg/VB/J P    N🅪Sg/VB+ NSg/J/P D\n> cold  vestibules , unutterably aware of our identity with this   country for   one\n# NSg/J NPl/V3     . R           VB/J  P  D$+ NSg+     P    I/Ddem NSg/J+  R/C/P NSg/I/J\n> strange  hour , before we   melted indistinguishably into it       again .\n# NSg/VB/J NSg+ . C/P    IPl+ VP/J   R                 P    NPr/ISg+ P     .\n>\n#\n> That’s my  Middle   West      — not     the wheat  or    the prairies or    the lost Swede   towns , but\n# NSg$   D$+ NSg/VB/J NPr/VB/J+ . NSg/R/C D   NSg/J+ NPr/C D   NPl      NPr/C D   VP/J NSg/VB+ NPl+  . NSg/C/P\n> the thrilling returning trains of my  youth , and  the street    lamps  and  sleigh\n# D   Nᴹ/Vg/J   Nᴹ/Vg/J   NPl/V3 P  D$+ NSg+  . VB/C D   NSg/VB/J+ NPl/V3 VB/C NSg/VB/J+\n> bells  in        the frosty dark     and  the shadows of holly wreaths thrown by    lighted\n# NPl/V3 NPr/J/R/P D   J      NSg/VB/J VB/C D   NPl/V3  P  NPr+  NPl/VB  VPp/J  NSg/P VP/J\n> windows   on  the snow       . I       am        part     of that          , a   little     solemn with the feel     of those\n# NPrPl/V3+ J/P D   NPr🅪Sg/VB+ . ISg/#r+ NPr/VLB/J NSg/VB/J P  NSg/I/C/Ddem+ . D/P NPr/I/J/Dq J      P    D   NSg/I/VB P  I/Ddem+\n> long      winters   , a   little     complacent from growing up         in        the Carraway house  in        a\n# NPr/VB/J+ NPrPl/V3+ . D/P NPr/I/J/Dq J          P    Nᴹ/Vg/J NSg/VB/J/P NPr/J/R/P D   ?        NPr/VB NPr/J/R/P D/P\n> city where   dwellings are still      called through decades by    a   family’s name    . I       see\n# NSg+ NSg/R/C NPl/V3+   VLB NSg/VB/J/R VP/J   NSg/J/P NPl+    NSg/P D/P NSg$     NSg/VB+ . ISg/#r+ NSg/VB\n> now       that         this    has been     a   story  of the West      , after all          — Tom     and  Gatsby , Daisy and\n# NSg/J/R/C NSg/I/C/Ddem I/Ddem+ V3  NSg/VLPp D/P NSg/VB P  D+  NPr/VB/J+ . P     NSg/I/J/C/Dq . NPr/VB+ VB/C NPr    . NPr   VB/C\n> Jordan and  I       , were     all          Westerners , and  perhaps we   possessed some     deficiency in\n# NPr+   VB/C ISg/#r+ . NSg/VLPt NSg/I/J/C/Dq +          . VB/C NSg/R   IPl+ VP/J      I/J/R/Dq NSg+       NPr/J/R/P\n> common   which made us       subtly unadaptable to Eastern life     .\n# NSg/VB/J I/C+  VP   NPr/IPl+ R      ?           P  J       N🅪Sg/VB+ .\n>\n#\n> Even       when    the East   excited me       most         , even       when    I       was  most         keenly aware of its\n# NSg/VB/J/R NSg/I/C D+  NPr/J+ VP/J    NPr/ISg+ NSg/I/J/R/Dq . NSg/VB/J/R NSg/I/C ISg/#r+ VLPt NSg/I/J/R/Dq R      VB/J  P  ISg/D$+\n> superiority to the bored , sprawling , swollen towns beyond the Ohio   , with their\n# NSg+        P  D   VP/J  . Nᴹ/Vg/J   . VB/J    NPl+  NSg/P  D   NPr/J+ . P    D$+\n> interminable inquisitions which spared only  the children and  the very old   — even\n# J            NPl/V3       I/C+  VP/J   J/R/C D   NPl+     VB/C D   J/R  NSg/J . NSg/VB/J/R\n> then      it       had always for   me       a   quality of distortion . West      Egg      , especially , still\n# NSg/J/R/C NPr/ISg+ VP  R      R/C/P NPr/ISg+ D/P N🅪Sg/J  P  NSg+       . NPr/VB/J+ N🅪Sg/VB+ . R          . NSg/VB/J/R\n> figures in        my  more         fantastic dreams  . I       see    it       as    a   night    scene  by    El Greco : a\n# NPl/V3+ NPr/J/R/P D$+ NPr/I/J/R/Dq NSg/J+    NPl/V3+ . ISg/#r+ NSg/VB NPr/ISg+ R/C/P D/P N🅪Sg/VB+ NSg/VB NSg/P ?  ?     . D/P+\n> hundred houses  , at    once  conventional and  grotesque , crouching under   a   sullen   ,\n# NSg+    NPl/V3+ . NSg/P NSg/C NSg/J        VB/C NSg/J     . Nᴹ/Vg/J   NSg/J/P D/P NSg/VB/J .\n> overhanging sky      and  a   lustreless moon    . In        the foreground four solemn men in\n# Nᴹ/Vg/J     N🅪Sg/VB+ VB/C D/P J/Comm     NPr/VB+ . NPr/J/R/P D+  NSg/VB+    NSg  J      NPl NPr/J/R/P\n> dress   suits  are walking along the sidewalk with a   stretcher on  which lies   a\n# NSg/VB+ NPl/V3 VLB Nᴹ/Vg/J P     D+  NSg+     P    D/P NSg/VB    J/P I/C+  NPl/V3 D/P\n> drunken woman   in        a   white       evening    dress   . Her     hand    , which dangles over    the side      ,\n# VB/J    NSg/VB+ NPr/J/R/P D/P NPr🅪Sg/VB/J N🅪Sg/Vg/J+ NSg/VB+ . ISg/D$+ NSg/VB+ . I/C+  NPl/V3  NSg/J/P D   NSg/VB/J+ .\n> sparkles cold  with jewels  . Gravely the men  turn   in        at    a   house   — the wrong      house   .\n# NPl/V3   NSg/J P    NPl/V3+ . R       D+  NPl+ NSg/VB NPr/J/R/P NSg/P D/P NPr/VB+ . D   NSg/VB/J/R NPr/VB+ .\n> But     no       one      knows the woman’s name    , and  no       one      cares  .\n# NSg/C/P NSg/Dq/P NSg/I/J+ V3    D   NSg$    NSg/VB+ . VB/C NSg/Dq/P NSg/I/J+ NPl/V3 .\n>\n#\n> After Gatsby’s death   the East   was  haunted for   me       like         that          , distorted beyond my\n# P     NPr$     NPr🅪Sg+ D   NPr/J+ VLPt VP/J    R/C/P NPr/ISg+ NSg/VB/J/C/P NSg/I/C/Ddem+ . VP/J      NSg/P  D$+\n> eyes    ’ power     of correction . So          when    the blue      smoke   of brittle  leaves  was  in        the\n# NPl/V3+ . N🅪Sg/VB/J P  NSg+       . NSg/I/J/R/C NSg/I/C D   N🅪Sg/VB/J N🅪Sg/VB P  NSg/VB/J NPl/V3+ VLPt NPr/J/R/P D\n> air     and  the wind     blew      the wet      laundry stiff    on  the line    I       decided  to come       back\n# N🅪Sg/VB VB/C D   N🅪Sg/VB+ NSg/VPt/J D   NSg/VP/J N🅪Sg+   NSg/VB/J J/P D   NSg/VB+ ISg/#r+ NSg/VP/J P  NSg/VBPp/P NSg/VB/J\n> home      .\n# NSg/VB/J+ .\n>\n#\n> There was  one     thing to be       done      before I       left     , an  awkward , unpleasant thing that\n# R+    VLPt NSg/I/J NSg+  P  NSg/VLXB NSg/VPp/J C/P    ISg/#r+ NPr/VP/J . D/P NSg/J   . NSg/J+     NSg+  NSg/I/C/Ddem+\n> perhaps had better     have    been     let     alone . But     I       wanted to leave  things in        order\n# NSg/R   VP  NSg/VXB/JC NSg/VXB NSg/VLPp NSg/VBP J     . NSg/C/P ISg/#r+ VP/J   P  NSg/VB NPl+   NPr/J/R/P N🅪Sg/VB+\n> and  not     just trust     that         obliging and  indifferent sea  to sweep  my  refuse away . I\n# VB/C NSg/R/C J/R  N🅪Sg/VB/J NSg/I/C/Ddem Nᴹ/Vg/J  VB/C NSg/J       NSg+ P  NSg/VB D$+ NSg/VB VB/J . ISg/#r+\n> saw     Jordan Baker and  talked over    and  around what   had happened to us       together ,\n# NSg/VPt NPr+   NPr+  VB/C VP/J   NSg/J/P VB/C J/P    NSg/I+ VP  VP/J     P  NPr/IPl+ J        .\n> and  what   had happened afterward to me       , and  she  lay        perfectly still      , listening ,\n# VB/C NSg/I+ VP  VP/J     R/Am      P  NPr/ISg+ . VB/C ISg+ NSg/VBPt/J R         NSg/VB/J/R . Nᴹ/Vg/J   .\n> in        a    big    chair   .\n# NPr/J/R/P D/P+ NSg/J+ NSg/VB+ .\n>\n#\n> She  was  dressed to play    golf    , and  I       remember thinking she  looked like         a    good\n# ISg+ VLPt VP/J    P  N🅪Sg/VB NSg/VB+ . VB/C ISg/#r+ NSg/VB   Nᴹ/Vg/J  ISg+ VP/J   NSg/VB/J/C/P D/P+ NPr/VB/J+\n> illustration , her     chin    raised a   little     jauntily , her     hair    the color        of an  autumn\n# N🅪Sg+        . ISg/D$+ NPr/VB+ VP/J   D/P NPr/I/J/Dq R        . ISg/D$+ N🅪Sg/VB D   N🅪Sg/VB/J/Am P  D/P NPr🅪Sg/VB+\n> leaf    , her     face   the same brown       tint   as    the fingerless glove   on  her     knee    . When    I\n# NSg/VB+ . ISg/D$+ NSg/VB D   I/J  NPr🅪Sg/VB/J NSg/VB R/C/P D   ?          NSg/VB+ J/P ISg/D$+ NSg/VB+ . NSg/I/C ISg/#r+\n> had finished she  told me       without comment that          she  was  engaged to another man       . I\n# VP  VP/J     ISg+ VP   NPr/ISg+ C/P     NSg/VB+ NSg/I/C/Ddem+ ISg+ VLPt VP/J    P  I/D+    NPr/VB/J+ . ISg/#r+\n> doubted that          , though there were     several she  could   have    married  at    a   nod    of her\n# VP/J    NSg/I/C/Ddem+ . C      R+    NSg/VLPt J/Dq    ISg+ NSg/VXB NSg/VXB NSg/VP/J NSg/P D/P NSg/VB P  ISg/D$+\n> head      , but     I       pretended to be       surprised . For   just a    minute    I       wondered if    I       wasn’t\n# NPr/VB/J+ . NSg/C/P ISg/#r+ VP/J      P  NSg/VLXB VP/J      . R/C/P J/R  D/P+ NSg/VB/J+ ISg/#r+ VP/J     NSg/C ISg/#r+ VPt\n> making  a   mistake , then      I       thought it       all          over    again quickly and  got up         to say\n# Nᴹ/Vg/J D/P NSg/VB+ . NSg/J/R/C ISg/#r+ N🅪Sg/VP NPr/ISg+ NSg/I/J/C/Dq NSg/J/P P     R       VB/C VP  NSg/VB/J/P P  NSg/VB\n> good     - by    .\n# NPr/VB/J . NSg/P .\n>\n#\n> “ Nevertheless you    did  throw  me       over    , ” said Jordan suddenly . ‘          ‘          You    threw me       over\n# . R            ISgPl+ VXPt NSg/VB NPr/ISg+ NSg/J/P . . VP/J NPr+   R        . Unlintable Unlintable ISgPl+ VPt   NPr/ISg+ NSg/J/P\n> on  the telephone . I       don’t give   a   damn     about you    now       , but     it       was  a   new   experience\n# J/P D+  NSg/VB+   . ISg/#r+ VXB   NSg/VB D/P NSg/VB/J J/P   ISgPl+ NSg/J/R/C . NSg/C/P NPr/ISg+ VLPt D/P NSg/J N🅪Sg/VB\n> for   me       , and  I       felt      a   little     dizzy    for   a   while       . ”\n# R/C/P NPr/ISg+ . VB/C ISg/#r+ N🅪Sg/VP/J D/P NPr/I/J/Dq NSg/VB/J R/C/P D/P NSg/VB/C/P+ . .\n>\n#\n> We   shook     hands   .\n# IPl+ NSg/VPt/J NPl/V3+ .\n>\n#\n> “ Oh     , and  do  you    remember ” — she  added — “ a    conversation we   had once  about driving a\n# . NPr/VB . VB/C VXB ISgPl+ NSg/VB   . . ISg+ VP/J  . . D/P+ N🅪Sg/VB+     IPl+ VP  NSg/C J/P   Nᴹ/Vg/J D/P+\n> car  ? ”\n# NSg+ . .\n>\n#\n> “ Why    — not     exactly . ”\n# . NSg/VB . NSg/R/C R       . .\n>\n#\n> “ You    said a    bad       driver was  only  safe     until she  met another bad       driver ? Well       , I\n# . ISgPl+ VP/J D/P+ NSg/VB/J+ NSg+   VLPt J/R/C NSg/VB/J C/P   ISg+ VP  I/D+    NSg/VB/J+ NSg+   . NSg/VB/J/R . ISg/#r+\n> met another bad       driver , didn’t I       ? I       mean     it       was  careless of me       to make   such  a\n# VP  I/D+    NSg/VB/J+ NSg+   . VXPt   ISg/#r+ . ISg/#r+ NSg/VB/J NPr/ISg+ VLPt J        P  NPr/ISg+ P  NSg/VB NSg/I D/P\n> wrong      guess   . I       thought you    were     rather     an  honest , straightforward person  . I\n# NSg/VB/J/R NSg/VB+ . ISg/#r+ N🅪Sg/VP ISgPl+ NSg/VLPt NPr/VB/J/R D/P VB/JS  . J+              NSg/VB+ . ISg/#r+\n> thought it       was  your secret    pride  . ”\n# N🅪Sg/VP NPr/ISg+ VLPt D$+  NSg/VB/J+ Nᴹ/VB+ . .\n>\n#\n> “ I’m thirty , ” I       said . “ I’m five years too old   to lie    to myself and  call   it\n# . K   NSg    . . ISg/#r+ VP/J . . K   NSg+ NPl+  R   NSg/J P  NPr/VB P  ISg+   VB/C NSg/VB NPr/ISg+\n> honor       . ”\n# N🅪Sg/VB/Am+ . .\n>\n#\n> She  didn’t answer  . Angry , and  half      in        love      with her     , and  tremendously sorry    , I\n# ISg+ VXPt   NSg/VB+ . VB/J  . VB/C N🅪Sg/J/P+ NPr/J/R/P NPr🅪Sg/VB P    ISg/D$+ . VB/C R            NSg/VB/J . ISg/#r+\n> turned away .\n# VP/J   VB/J .\n>\n#\n> One      afternoon late  in        October I       saw     Tom     Buchanan . He       was  walking ahead of me\n# NSg/I/J+ N🅪Sg+     NSg/J NPr/J/R/P NPr/VB+ ISg/#r+ NSg/VPt NPr/VB+ NPr+     . NPr/ISg+ VLPt Nᴹ/Vg/J R     P  NPr/ISg+\n> along Fifth    Avenue in        his     alert     , aggressive way    , his     hands   out          a   little     from his\n# P     NSg/VB/J NSg+   NPr/J/R/P ISg/D$+ NSg/VB/J+ . NSg/J+     NSg/J+ . ISg/D$+ NPl/V3+ NSg/VB/J/R/P D/P NPr/I/J/Dq P    ISg/D$+\n> body    as    if    to fight  off        interference , his     head      moving  sharply here and  there ,\n# NSg/VB+ R/C/P NSg/C P  NSg/VB NSg/VB/J/P NSg/VB+      . ISg/D$+ NPr/VB/J+ Nᴹ/Vg/J R       J/R  VB/C R     .\n> adapting itself to his     restless eyes    . Just as    I       slowed up         to avoid overtaking\n# Nᴹ/Vg/J  ISg+   P  ISg/D$+ J        NPl/V3+ . J/R  R/C/P ISg/#r+ VP/J   NSg/VB/J/P P  VB    Nᴹ/Vg/J\n> him  he       stopped and  began frowning into the windows  of a    jewelry store   . Suddenly\n# ISg+ NPr/ISg+ VP/J    VB/C VPt   Nᴹ/Vg/J  P    D   NPrPl/V3 P  D/P+ Nᴹ/VB+  NSg/VB+ . R\n> he       saw     me       and  walked back     , holding out          his     hand    .\n# NPr/ISg+ NSg/VPt NPr/ISg+ VB/C VP/J   NSg/VB/J . Nᴹ/Vg/J NSg/VB/J/R/P ISg/D$+ NSg/VB+ .\n>\n#\n> “ What’s the matter   , Nick    ? Do  you    object  to shaking hands   with me       ? ”\n# . K      D   N🅪Sg/VB+ . NPr/VB+ . VXB ISgPl+ NSg/VB+ P  Nᴹ/Vg/J NPl/V3+ P    NPr/ISg+ . .\n>\n#\n> “ Yes    . You    know what   I       think  of you    . ”\n# . NPl/VB . ISgPl+ VB   NSg/I+ ISg/#r+ NSg/VB P  ISgPl+ . .\n>\n#\n> “ You're crazy , Nick    , ” he       said quickly . “ Crazy as    hell    . I       don’t know what’s the\n# . +      NSg/J . NPr/VB+ . . NPr/ISg+ VP/J R       . . NSg/J R/C/P NPr/VB+ . ISg/#r+ VXB   VB   K      D\n> matter   with you    . ”\n# N🅪Sg/VB+ P    ISgPl+ . .\n>\n#\n> “ Tom     , ” I       inquired , “ what   did  you    say    to Wilson that          afternoon ? ”\n# . NPr/VB+ . . ISg/#r+ VP/J     . . NSg/I+ VXPt ISgPl+ NSg/VB P  NPr+   NSg/I/C/Ddem+ N🅪Sg+     . .\n>\n#\n> He       stared at    me       without a    word    , and  I       knew I       had guessed right    about those\n# NPr/ISg+ VP/J   NSg/P NPr/ISg+ C/P     D/P+ NSg/VB+ . VB/C ISg/#r+ VPt  ISg/#r+ VP  VP/J    NPr/VB/J J/P   I/Ddem\n> missing hours . I       started to turn   away , but     he       took a    step    after me       and  grabbed\n# Nᴹ/Vg/J NPl+  . ISg/#r+ VP/J    P  NSg/VB VB/J . NSg/C/P NPr/ISg+ VPt  D/P+ NSg/VB+ P     NPr/ISg+ VB/C VP\n> my  arm       .\n# D$+ NSg/VB/J+ .\n>\n#\n> “ I       told him  the truth    , ” he       said . “ He       came      to the door    while      we   were     getting\n# . ISg/#r+ VP   ISg+ D+  N🅪Sg/VB+ . . NPr/ISg+ VP/J . . NPr/ISg+ NSg/VPt/P P  D+  NSg/VB+ NSg/VB/C/P IPl+ NSg/VLPt NSg/Vg\n> ready    to leave  , and  when    I       sent   down        word   that         we   weren’t in        he       tried to force\n# NSg/VB/J P  NSg/VB . VB/C NSg/I/C ISg/#r+ NSg/VP N🅪Sg/VB/J/P NSg/VB NSg/I/C/Ddem IPl+ VPt     NPr/J/R/P NPr/ISg+ VP/J  P  N🅪Sg/VB\n> his     way    up         - stairs . He       was  crazy enough to kill   me       if    I       hadn’t told him  who    owned\n# ISg/D$+ NSg/J+ NSg/VB/J/P . NPl+   . NPr/ISg+ VLPt NSg/J NSg/I  P  NSg/VB NPr/ISg+ NSg/C ISg/#r+ VPt    VP   ISg+ NPr/I+ VP/J\n> the car  . His     hand    was  on  a   revolver in        his     pocket   every minute    he       was  in        the\n# D   NSg+ . ISg/D$+ NSg/VB+ VLPt J/P D/P NSg      NPr/J/R/P ISg/D$+ NSg/VB/J Dq    NSg/VB/J+ NPr/ISg+ VLPt NPr/J/R/P D\n> house   — ” He       broke     off        defiantly . “ What   if    I       did  tell   him  ? That         fellow had it\n# NPr/VB+ . . NPr/ISg+ NSg/VPt/J NSg/VB/J/P R         . . NSg/I+ NSg/C ISg/#r+ VXPt NPr/VB ISg+ . NSg/I/C/Ddem NSg    VP  NPr/ISg+\n> coming  to him  . He       threw dust   into your eyes    just like         he       did  in        Daisy’s , but     he\n# Nᴹ/Vg/J P  ISg+ . NPr/ISg+ VPt   Nᴹ/VB+ P    D$+  NPl/V3+ J/R  NSg/VB/J/C/P NPr/ISg+ VXPt NPr/J/R/P NPr$    . NSg/C/P NPr/ISg+\n> was  a   tough    one      . He       ran     over    Myrtle like         you’d run      over    a   dog       and  never even\n# VLPt D/P NSg/VB/J NSg/I/J+ . NPr/ISg+ NSg/VPt NSg/J/P NPr    NSg/VB/J/C/P K     NSg/VBPp NSg/J/P D/P NSg/VB/J+ VB/C R     NSg/VB/J/R\n> stopped his     car  . ”\n# VP/J    ISg/D$+ NSg+ . .\n>\n#\n> There was  nothing  I       could   say    , except the one      unutterable fact that          it       wasn’t\n# R+    VLPt NSg/I/J+ ISg/#r+ NSg/VXB NSg/VB . VB/C/P D+  NSg/I/J+ NSg/J       NSg+ NSg/I/C/Ddem+ NPr/ISg+ VPt\n> true     .\n# NSg/VB/J .\n>\n#\n> “ And  if    you    think  I       didn’t have    my  share  of suffering — look   here , when    I       went    to\n# . VB/C NSg/C ISgPl+ NSg/VB ISg/#r+ VXPt   NSg/VXB D$+ NSg/VB P  Nᴹ/Vg/J+  . NSg/VB J/R  . NSg/I/C ISg/#r+ NSg/VPt P\n> give   up         that         flat     and  saw     that         damn     box    of dog       biscuits sitting  there on  the\n# NSg/VB NSg/VB/J/P NSg/I/C/Ddem NSg/VB/J VB/C NSg/VPt NSg/I/C/Ddem NSg/VB/J NSg/VB P  NSg/VB/J+ NPl      NSg/Vg/J R     J/P D\n> sideboard , I       sat      down        and  cried like         a   baby      . By    God     it       was  awful — ”\n# NSg/VB    . ISg/#r+ NSg/VP/J N🅪Sg/VB/J/P VB/C VP/J  NSg/VB/J/C/P D/P NSg/VB/J+ . NSg/P NPr/VB+ NPr/ISg+ VLPt J     . .\n>\n#\n> I       couldn’t forgive him  or    like         him  , but     I       saw     that         what   he       had done      was  , to him  ,\n# ISg/#r+ VXB      VB      ISg+ NPr/C NSg/VB/J/C/P ISg+ . NSg/C/P ISg/#r+ NSg/VPt NSg/I/C/Ddem NSg/I+ NPr/ISg+ VP  NSg/VPp/J VLPt . P  ISg+ .\n> entirely justified . It       was  all          very careless and  confused . They were     careless\n# R        VP/J      . NPr/ISg+ VLPt NSg/I/J/C/Dq J/R  J        VB/C VP/J     . IPl+ NSg/VLPt J\n> people , Tom    and  Daisy — they smashed up         things and  creatures and  then      retreated\n# NPl/VB . NPr/VB VB/C NPr+  . IPl+ VP/J    NSg/VB/J/P NPl    VB/C NPl+      VB/C NSg/J/R/C VP/J\n> back     into their money   or    their vast  carelessness , or    whatever it       was  that          kept\n# NSg/VB/J P    D$+   N🅪Sg/J+ NPr/C D$+   NSg/J Nᴹ           . NPr/C NSg/I/J+ NPr/ISg+ VLPt NSg/I/C/Ddem+ VP\n> them     together , and  let     other    people  clean    up         the mess    they had made . . . .\n# NSg/IPl+ J        . VB/C NSg/VBP NSg/VB/J NPl/VB+ NSg/VB/J NSg/VB/J/P D   NSg/VB+ IPl+ VP  VP   . . . .\n>\n#\n> I       shook     hands   with him  ; it       seemed silly not     to , for   I       felt      suddenly as    though I\n# ISg/#r+ NSg/VPt/J NPl/V3+ P    ISg+ . NPr/ISg+ VP/J   NSg/J NSg/R/C P  . R/C/P ISg/#r+ N🅪Sg/VP/J R        R/C/P C      ISg/#r+\n> were     talking to a    child   . Then      he       went    into the jewelry store   to buy    a    pearl\n# NSg/VLPt Nᴹ/Vg/J P  D/P+ NSg/VB+ . NSg/J/R/C NPr/ISg+ NSg/VPt P    D+  Nᴹ/VB+  NSg/VB+ P  NSg/VB D/P+ NPr/VB+\n> necklace — or    perhaps only  a   pair   of cuff   buttons — rid of my  provincial\n# NSg/VB+  . NPr/C NSg/R   J/R/C D/P NSg/VB P  NSg/VB NPl/V3+ . VB  P  D$+ NSg/J\n> squeamishness forever .\n# NSg           NSg/J   .\n>\n#\n> Gatsby’s house   was  still      empty    when    I       left     — the grass      on  his     lawn    had grown as\n# NPr$     NPr/VB+ VLPt NSg/VB/J/R NSg/VB/J NSg/I/C ISg/#r+ NPr/VP/J . D   NPr🅪Sg/VB+ J/P ISg/D$+ NSg/VB+ VP  VB/J  R/C/P\n> long     as    mine      . One     of the taxi    drivers in        the village never took a    fare     past       the\n# NPr/VB/J R/C/P NSg/I/VB+ . NSg/I/J P  D+  NSg/VB+ NPl+    NPr/J/R/P D+  NSg+    R     VPt  D/P+ N🅪Sg/VB+ NSg/VB/J/P D+\n> entrance gate    without stopping for   a    minute    and  pointing inside  ; perhaps it       was\n# NSg/VB+  NSg/VB+ C/P     NSg/Vg   R/C/P D/P+ NSg/VB/J+ VB/C Nᴹ/Vg/J  NSg/J/P . NSg/R   NPr/ISg+ VLPt\n> he       who    drove   Daisy and  Gatsby over    to East   Egg     the night   of the accident , and\n# NPr/ISg+ NPr/I+ NSg/VPt NPr+  VB/C NPr    NSg/J/P P  NPr/J+ N🅪Sg/VB D   N🅪Sg/VB P  D   NSg/J+   . VB/C\n> perhaps he       had made a   story   about it       all          his     own      . I       didn’t want   to hear it       and  I\n# NSg/R   NPr/ISg+ VP  VP   D/P NSg/VB+ J/P   NPr/ISg+ NSg/I/J/C/Dq ISg/D$+ NSg/VB/J . ISg/#r+ VXPt   NSg/VB P  VB   NPr/ISg+ VB/C ISg/#r+\n> avoided him  when    I       got off        the train   .\n# VP/J    ISg+ NSg/I/C ISg/#r+ VP  NSg/VB/J/P D   NSg/VB+ .\n>\n#\n> I       spent my  Saturday nights  in        New    York because those   gleaming , dazzling parties\n# ISg/#r+ VP/J  D$+ NSg/VB+  NPl/V3+ NPr/J/R/P NSg/J+ NPr+ C/P     I/Ddem+ Nᴹ/Vg/J+ . Nᴹ/Vg/J  NPl/V3\n> of his     were     with me       so          vividly that         I       could   still      hear the music     and  the\n# P  ISg/D$+ NSg/VLPt P    NPr/ISg+ NSg/I/J/R/C R       NSg/I/C/Ddem ISg/#r+ NSg/VXB NSg/VB/J/R VB   D   N🅪Sg/VB/J VB/C D+\n> laughter , faint    and  incessant , from his     garden    , and  the cars going   up         and  down\n# Nᴹ+      . NSg/VB/J VB/C J         . P    ISg/D$+ NSg/VB/J+ . VB/C D+  NPl+ Nᴹ/Vg/J NSg/VB/J/P VB/C N🅪Sg/VB/J/P\n> his     drive   . One      night    I       did  hear a    material   car  there , and  saw     its     lights  stop   at\n# ISg/D$+ N🅪Sg/VB . NSg/I/J+ N🅪Sg/VB+ ISg/#r+ VXPt VB   D/P+ N🅪Sg/VB/J+ NSg+ R     . VB/C NSg/VPt ISg/D$+ NPl/V3+ NSg/VB NSg/P\n> his     front     steps   . But     I       didn’t investigate . Probably it       was  some     final    guest  who\n# ISg/D$+ NSg/VB/J+ NPl/V3+ . NSg/C/P ISg/#r+ VXPt   VB          . R        NPr/ISg+ VLPt I/J/R/Dq NSg/VB/J NSg/VB NPr/I+\n> had been     away at    the ends   of the earth    and  didn’t know that         the party     was  over    .\n# VP  NSg/VLPp VB/J NSg/P D   NPl/V3 P  D+  NPrᴹ/VB+ VB/C VXPt   VB   NSg/I/C/Ddem D   NSg/VB/J+ VLPt NSg/J/P .\n>\n#\n> On  the last      night    , with my  trunk   packed and  my  car  sold   to the grocer , I       went\n# J/P D+  NSg/VB/J+ N🅪Sg/VB+ . P    D$+ NSg/VB+ VP/J   VB/C D$+ NSg+ NSg/VP P  D   NSg/VB . ISg/#r+ NSg/VPt\n> over    and  looked at    that         huge incoherent failure of a   house   once  more         . On  the\n# NSg/J/P VB/C VP/J   NSg/P NSg/I/C/Ddem J    J          N🅪Sg    P  D/P NPr/VB+ NSg/C NPr/I/J/R/Dq . J/P D+\n> white        steps   an  obscene word    , scrawled by    some     boy     with a   piece  of brick      , stood\n# NPr🅪Sg/VB/J+ NPl/V3+ D/P VB/J    NSg/VB+ . VP/J     NSg/P I/J/R/Dq NSg/VB+ P    D/P NSg/VB P  N🅪Sg/VB/J+ . VP\n> out          clearly in        the moonlight , and  I       erased it       , drawing   my  shoe    raspingly along\n# NSg/VB/J/R/P R       NPr/J/R/P D   N🅪Sg/VB+  . VB/C ISg/#r+ VP/J   NPr/ISg+ . N🅪Sg/Vg/J D$+ NSg/VB+ ?         P\n> the stone          . Then      I       wandered down        to the beach   and  sprawled out          on  the sand      .\n# D   NPr🅪SgPl/VB/J+ . NSg/J/R/C ISg/#r+ VP/J     N🅪Sg/VB/J/P P  D+  NPr/VB+ VB/C VP/J     NSg/VB/J/R/P J/P D+  NSg/VB/J+ .\n>\n#\n> Most         of the big    shore   places  were     closed now       and  there were     hardly any     lights\n# NSg/I/J/R/Dq P  D+  NSg/J+ NSg/VB+ NPl/V3+ NSg/VLPt VP/J   NSg/J/R/C VB/C R+    NSg/VLPt R      I/R/Dq+ NPl/V3+\n> except the shadowy , moving  glow   of a   ferryboat across the Sound      . And  as    the moon\n# VB/C/P D   J       . Nᴹ/Vg/J NSg/VB P  D/P NSg       NSg/P  D   N🅪Sg/VB/J+ . VB/C R/C/P D+  NPr/VB+\n> rose      higher the inessential houses  began to melt   away until gradually I       became\n# NPr/VPt/J NSg/JC D   NSg/J       NPl/V3+ VPt   P  NSg/VB VB/J C/P   R         ISg/#r+ VPt\n> aware of the old   island  here that         flowered once  for   Dutch     sailors ’ eyes    — a   fresh    ,\n# VB/J  P  D   NSg/J NSg/VB+ J/R  NSg/I/C/Ddem VP/J     NSg/C R/C/P NPrᴹ/VB/J NPl+    . NPl/V3+ . D/P NSg/VB/J .\n> green       breast of the new   world   . Its     vanished trees   , the trees   that          had made way\n# NPr🅪Sg/VB/J NSg/VB P  D   NSg/J NSg/VB+ . ISg/D$+ VP/J     NPl/V3+ . D+  NPl/V3+ NSg/I/C/Ddem+ VP  VP   NSg/J\n> for   Gatsby’s house   , had once  pandered in        whispers to the last     and  greatest of\n# R/C/P NPr$     NPr/VB+ . VP  NSg/C VP/J     NPr/J/R/P NPl/V3   P  D   NSg/VB/J VB/C JS       P\n> all          human    dreams  ; for   a   transitory enchanted moment man       must    have    held his\n# NSg/I/J/C/Dq NSg/VB/J NPl/V3+ . R/C/P D/P J          VP/J      NSg+   NPr/VB/J+ NSg/VXB NSg/VXB VP   ISg/D$+\n> breath     in        the presence of this   continent , compelled into an  esthetic\n# N🅪Sg/VB/J+ NPr/J/R/P D   N🅪Sg/VB  P  I/Ddem NPr/J+    . VP/J      P    D/P ?\n> contemplation he       neither understood nor   desired , face    to face   for   the last     time\n# Nᴹ            NPr/ISg+ I/C     VP/J       NSg/C VP/J    . NSg/VB+ P  NSg/VB R/C/P D   NSg/VB/J N🅪Sg/VB/J+\n> in        history with something commensurate to his     capacity for   wonder  .\n# NPr/J/R/P N🅪Sg+   P    NSg/I/J+  VB/J         P  ISg/D$+ N🅪Sg/J+  R/C/P N🅪Sg/VB .\n>\n#\n> And  as    I       sat      there brooding on  the old   , unknown   world   , I       thought of Gatsby’s\n# VB/C R/C/P ISg/#r+ NSg/VP/J R     Nᴹ/Vg/J  J/P D   NSg/J . NSg/VB/J+ NSg/VB+ . ISg/#r+ N🅪Sg/VP P  NPr$\n> wonder  when    he       first picked out          the green       light      at    the end    of Daisy’s dock    . He\n# N🅪Sg/VB NSg/I/C NPr/ISg+ NSg/J VP/J   NSg/VB/J/R/P D   NPr🅪Sg/VB/J N🅪Sg/VB/J+ NSg/P D   NSg/VB P  NPr$    NSg/VB+ . NPr/ISg+\n> had come       a   long     way    to this    blue       lawn    , and  his     dream     must    have    seemed so          close\n# VP  NSg/VBPp/P D/P NPr/VB/J NSg/J+ P  I/Ddem+ N🅪Sg/VB/J+ NSg/VB+ . VB/C ISg/D$+ NSg/VB/J+ NSg/VXB NSg/VXB VP/J   NSg/I/J/R/C NSg/VB/J\n> that         he       could   hardly fail     to grasp  it       . He       did  not     know that         it       was  already\n# NSg/I/C/Ddem NPr/ISg+ NSg/VXB R      NSg/VB/J P  NSg/VB NPr/ISg+ . NPr/ISg+ VXPt NSg/R/C VB   NSg/I/C/Ddem NPr/ISg+ VLPt R\n> behind  him  , somewhere back     in        that          vast   obscurity beyond the city , where   the\n# NSg/J/P ISg+ . NSg       NSg/VB/J NPr/J/R/P NSg/I/C/Ddem+ NSg/J+ Nᴹ+       NSg/P  D+  NSg+ . NSg/R/C D\n> dark     fields   of the republic rolled on  under   the night    .\n# NSg/VB/J NPrPl/V3 P  D+  Nᴹ/VB/J+ VP/J   J/P NSg/J/P D+  N🅪Sg/VB+ .\n>\n#\n> Gatsby believed in        the green       light      , the orgastic future that          year by    year\n# NPr    VP/J     NPr/J/R/P D   NPr🅪Sg/VB/J N🅪Sg/VB/J+ . D   ?        NSg/J+ NSg/I/C/Ddem+ NSg  NSg/P NSg+\n> recedes before us       . It       eluded us       then      , but     that’s no        matter   — to - morrow we   will    run\n# V3      C/P    NPr/IPl+ . NPr/ISg+ VP/J   NPr/IPl+ NSg/J/R/C . NSg/C/P NSg$   NSg/Dq/P+ N🅪Sg/VB+ . P  . NPr/VB IPl+ NPr/VXB NSg/VBPp\n> faster , stretch  out          our arms    farther . . . . And  one      fine      morning    — — —\n# NSg/JC . N🅪Sg/VB+ NSg/VB/J/R/P D$+ NPl/V3+ VB/JC   . . . . VB/C NSg/I/J+ NSg/VB/J+ N🅪Sg/Vg/J+ . . .\n>\n#\n> So          we   beat      on  , boats   against the current , borne back     ceaselessly into the past       .\n# NSg/I/J/R/C IPl+ N🅪Sg/VB/J J/P . NPl/V3+ C/P     D   NSg/J   . VB/J  NSg/VB/J R           P    D   NSg/VB/J/P .\n"
  },
  {
    "path": "harper-core/tests/text/tagged/this and that.md",
    "content": "> \" This    \" and  \" that          \" are common   and  fulfill multiple purposes in        everyday English      .\n# . I/Ddem+ . VB/C . NSg/I/C/Ddem+ . VLB NSg/VB/J VB/C VB/NoAm NSg/J/Dq NPl/V3   NPr/J/R/P NSg/J+   NPr🅪Sg/VB/J+ .\n> As    such  , disambiguating them     is  necessary .\n# R/C/P NSg/I . Nᴹ/Vg/J        NSg/IPl+ VL3 NSg/J     .\n>\n#\n> This    document contains various sentences that          use     \" this    \" , \" that          \" , \" these  \" , and\n# I/Ddem+ NSg/VB+  V3       J+      NPl/V3+   NSg/I/C/Ddem+ N🅪Sg/VB . I/Ddem+ . . . NSg/I/C/Ddem+ . . . I/Ddem . . VB/C\n> \" those  \" in        different contexts with a   lot    of edge    cases   .\n# . I/Ddem . NPr/J/R/P NSg/J     NPl/V3   P    D/P NPr/VB P  NSg/VB+ NPl/V3+ .\n>\n#\n>              Examples\n# HeadingStart NPl/V3+\n>\n#\n> This   triangle is  nice  .\n# I/Ddem NSg      VL3 NPr/J .\n> This    is  nice  .\n# I/Ddem+ VL3 NPr/J .\n> That          triangle is  nice  .\n# NSg/I/C/Ddem+ NSg      VL3 NPr/J .\n> That          is  nice  .\n# NSg/I/C/Ddem+ VL3 NPr/J .\n> These  triangles are nice  .\n# I/Ddem NPl       VLB NPr/J .\n> These   are nice  .\n# I/Ddem+ VLB NPr/J .\n> Those  triangles are nice  .\n# I/Ddem NPl       VLB NPr/J .\n> Those   are nice  .\n# I/Ddem+ VLB NPr/J .\n>\n#\n> This    massage is  nice  .\n# I/Ddem+ NSg/VB+ VL3 NPr/J .\n> That         massage is  nice  .\n# NSg/I/C/Ddem NSg/VB+ VL3 NPr/J .\n> These   massages are nice  .\n# I/Ddem+ NPl/V3+  VLB NPr/J .\n> Those   massages are nice  .\n# I/Ddem+ NPl/V3+  VLB NPr/J .\n> This    massages well       .\n# I/Ddem+ NPl/V3+  NSg/VB/J/R .\n> That          massages well       .\n# NSg/I/C/Ddem+ NPl/V3+  NSg/VB/J/R .\n> These   massage well       .\n# I/Ddem+ NSg/VB+ NSg/VB/J/R .\n> Those   massage well       .\n# I/Ddem+ NSg/VB+ NSg/VB/J/R .\n>\n#\n> That          could   be       a    solution .\n# NSg/I/C/Ddem+ NSg/VXB NSg/VLXB D/P+ N🅪Sg+    .\n> Find   all           candidates that          could   be       a    solution .\n# NSg/VB NSg/I/J/C/Dq+ NPl/V3+    NSg/I/C/Ddem+ NSg/VXB NSg/VLXB D/P+ N🅪Sg+    .\n>\n#\n> This    is  all          that         I       have    .\n# I/Ddem+ VL3 NSg/I/J/C/Dq NSg/I/C/Ddem ISg/#r+ NSg/VXB .\n> This    is  all          that         solutions can     do  .\n# I/Ddem+ VL3 NSg/I/J/C/Dq NSg/I/C/Ddem NPl+      NPr/VXB VXB .\n> That         solution can     do  .\n# NSg/I/C/Ddem N🅪Sg+    NPr/VXB VXB .\n>\n#\n> We   can     do  this    !\n# IPl+ NPr/VXB VXB I/Ddem+ .\n> I       can     do  this   and  that          .\n# ISg/#r+ NPr/VXB VXB I/Ddem VB/C NSg/I/C/Ddem+ .\n>\n#\n> We   unite  to stand  united in        unity .\n# IPl+ NSg/VB P  NSg/VB VP/J   NPr/J/R/P Nᴹ+   .\n"
  },
  {
    "path": "harper-core/tests/text/this and that.md",
    "content": "\"This\" and \"that\" are common and fulfill multiple purposes in everyday English.\nAs such, disambiguating them is necessary.\n\nThis document contains various sentences that use \"this\", \"that\", \"these\", and\n\"those\" in different contexts with a lot of edge cases.\n\n## Examples\n\nThis triangle is nice.\nThis is nice.\nThat triangle is nice.\nThat is nice.\nThese triangles are nice.\nThese are nice.\nThose triangles are nice.\nThose are nice.\n\nThis massage is nice.\nThat massage is nice.\nThese massages are nice.\nThose massages are nice.\nThis massages well.\nThat massages well.\nThese massage well.\nThose massage well.\n\nThat could be a solution.\nFind all candidates that could be a solution.\n\nThis is all that I have.\nThis is all that solutions can do.\nThat solution can do.\n\nWe can do this!\nI can do this and that.\n\nWe unite to stand united in unity.\n"
  },
  {
    "path": "harper-html/Cargo.toml",
    "content": "[package]\nname = \"harper-html\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\nharper-tree-sitter = { path = \"../harper-tree-sitter\", version = \"1.0.0\" }\ntree-sitter-html = \"0.23.2\"\ntree-sitter = \"0.25.10\"\n\n[dev-dependencies]\npaste = \"1.0.15\"\n"
  },
  {
    "path": "harper-html/src/lib.rs",
    "content": "use harper_core::parsers::{self, Parser, PlainEnglish};\nuse harper_core::{Token, TokenKind};\nuse harper_tree_sitter::TreeSitterMasker;\nuse tree_sitter::Node;\n\npub struct HtmlParser {\n    /// Used to grab the text nodes.\n    inner: parsers::Mask<TreeSitterMasker, PlainEnglish>,\n}\n\nimpl HtmlParser {\n    fn node_condition(n: &Node) -> bool {\n        n.kind() == \"text\"\n    }\n}\n\nimpl Default for HtmlParser {\n    fn default() -> Self {\n        Self {\n            inner: parsers::Mask::new(\n                TreeSitterMasker::new(tree_sitter_html::LANGUAGE.into(), Self::node_condition),\n                PlainEnglish,\n            ),\n        }\n    }\n}\n\nimpl Parser for HtmlParser {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mut tokens = self.inner.parse(source);\n\n        for token in &mut tokens {\n            if let TokenKind::Space(v) = &mut token.kind {\n                *v = (*v).clamp(0, 1);\n            }\n        }\n\n        tokens\n    }\n}\n"
  },
  {
    "path": "harper-html/tests/run_tests.rs",
    "content": "use harper_core::linting::{LintGroup, Linter};\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\n\n/// Creates a unit test checking that the linting of a Markdown document (in\n/// `tests_sources`) produces the expected number of lints.\nmacro_rules! create_test {\n    ($filename:ident.html, $correct_expected:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_ $filename _correctly>](){\n                 let source = include_str!(\n                    concat!(\n                        \"./test_sources/\",\n                        concat!(stringify!($filename), \".html\")\n                    )\n                 );\n\n                 let dict = FstDictionary::curated();\n                 let document = Document::new_markdown_default(&source, &dict);\n\n                 let mut linter = LintGroup::new_curated(dict, Dialect::American);\n                 let lints = linter.lint(&document);\n\n                 dbg!(&lints);\n                 assert_eq!(lints.len(), $correct_expected);\n\n                 // Make sure that all generated tokens span real characters\n                 for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                 }\n            }\n        }\n    };\n}\n\ncreate_test!(run_on.html, 0);\ncreate_test!(issue_156.html, 0);\ncreate_test!(issue_541.html, 0);\n"
  },
  {
    "path": "harper-html/tests/test_sources/issue_156.html",
    "content": "<p>\n  foo\n  <b>bar</b>\n</p>\n"
  },
  {
    "path": "harper-html/tests/test_sources/issue_541.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"utf-8\">\n</head>\n\n<body>\n  <p>\n    This block contains multiple lines of HTML. If Harper is throwing a \"too many spaces\" lint, it's\n    because <code>harper-html</code> isn't properly parsing the indent.\n  </p>\n</body>\n\n</html>\n"
  },
  {
    "path": "harper-html/tests/test_sources/run_on.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"utf-8\">\n\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n  <p>Here is a paragraph</p>\n</head>\n\n<body>\n</body>\n\n</html>\n"
  },
  {
    "path": "harper-ink/Cargo.toml",
    "content": "[package]\nname = \"harper-ink\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\nharper-tree-sitter = { path = \"../harper-tree-sitter\", version = \"1.0.0\" }\ntree-sitter-ink-lbz = \"0.0.1\"\ntree-sitter = \"0.25.10\"\n\n[dev-dependencies]\npaste = \"1.0.15\"\n"
  },
  {
    "path": "harper-ink/src/lib.rs",
    "content": "use harper_core::parsers::{self, Parser, PlainEnglish};\nuse harper_core::{Token, TokenKind};\nuse harper_tree_sitter::TreeSitterMasker;\nuse tree_sitter::Node;\n\npub struct InkParser {\n    inner: parsers::Mask<TreeSitterMasker, PlainEnglish>,\n}\n\nimpl InkParser {\n    fn node_condition(n: &Node) -> bool {\n        matches!(n.kind(), \"contentText\" | \"blockComment\" | \"lineComment\")\n    }\n}\n\nimpl Default for InkParser {\n    fn default() -> Self {\n        Self {\n            inner: parsers::Mask::new(\n                TreeSitterMasker::new(tree_sitter_ink_lbz::LANGUAGE.into(), Self::node_condition),\n                PlainEnglish,\n            ),\n        }\n    }\n}\n\nimpl Parser for InkParser {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mut tokens = self.inner.parse(source);\n\n        for token in &mut tokens {\n            if let TokenKind::Space(v) = &mut token.kind {\n                *v = (*v).clamp(0, 1);\n            }\n        }\n\n        tokens\n    }\n}\n"
  },
  {
    "path": "harper-ink/tests/run_tests.rs",
    "content": "use harper_core::linting::{LintGroup, Linter};\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\nuse harper_ink::InkParser;\n\n/// Creates a unit test checking that the linting of a Ink document (in\n/// `tests_sources`) produces the expected number of lints.\nmacro_rules! create_test {\n    ($filename:ident.ink, $correct_expected:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_ $filename _correctly>](){\n                 let source = include_str!(\n                    concat!(\n                        \"./test_sources/\",\n                        concat!(stringify!($filename), \".ink\")\n                    )\n                 );\n\n                 let dict = FstDictionary::curated();\n                 let document = Document::new(&source, &InkParser::default(),\n                      &FstDictionary::curated()\n                      );\n\n                 let mut linter = LintGroup::new_curated(dict, Dialect::American);\n                 let lints = linter.lint(&document);\n\n                 dbg!(&lints);\n                 assert_eq!(lints.len(), $correct_expected);\n\n                 // Make sure that all generated tokens span real characters\n                 for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                 }\n            }\n        }\n    };\n}\n\ncreate_test!(good.ink, 0);\ncreate_test!(bad.ink, 5);\n"
  },
  {
    "path": "harper-ink/tests/test_sources/bad.ink",
    "content": "=== Knot ===\ntext here is checked: chungus\n\n= Stitch\n\n~identifiersAreNotchecked = \"but strings are: chungus\"\n// comments are also checked -> chungus\n\n/*\nchungus\n*/\n\n* choices are checked\n+ chungus\n+ normal text\n"
  },
  {
    "path": "harper-ink/tests/test_sources/good.ink",
    "content": "=== Knot ===\n    this is a thing\n\n= Stitch\n  * an option\n  + another option\n\n  + normal text\n    + + indented choice\n    + + another indented choice\n\n  - gather\n\n= ThreeWordStitch\n    test"
  },
  {
    "path": "harper-jjdescription/Cargo.toml",
    "content": "[package]\nname = \"harper-jjdescription\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\nharper-tree-sitter = { path = \"../harper-tree-sitter\", version = \"1.0.0\" }\ntree-sitter-jjdescription = \"0.0.1\"\ntree-sitter = \"0.25.10\"\n\n[dev-dependencies]\npaste = \"1.0.15\"\n"
  },
  {
    "path": "harper-jjdescription/src/lib.rs",
    "content": "use harper_core::Token;\nuse harper_core::parsers::{self, Markdown, MarkdownOptions, Parser};\nuse harper_tree_sitter::TreeSitterMasker;\nuse tree_sitter::Node;\n\npub struct JJDescriptionParser {\n    /// Used to grab the text nodes, and parse them as markdown.\n    inner: parsers::Mask<TreeSitterMasker, Markdown>,\n}\n\nimpl JJDescriptionParser {\n    fn node_condition(n: &Node) -> bool {\n        n.kind() == \"text\"\n    }\n\n    pub fn new(markdown_options: MarkdownOptions) -> Self {\n        Self {\n            inner: parsers::Mask::new(\n                TreeSitterMasker::new(tree_sitter_jjdescription::language(), Self::node_condition),\n                Markdown::new(markdown_options),\n            ),\n        }\n    }\n}\n\nimpl Parser for JJDescriptionParser {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        self.inner.parse(source)\n    }\n}\n"
  },
  {
    "path": "harper-jjdescription/tests/run_tests.rs",
    "content": "use harper_core::linting::{LintGroup, Linter};\nuse harper_core::parsers::MarkdownOptions;\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\nuse harper_jjdescription::JJDescriptionParser;\n\n/// Creates a unit test checking that the linting of a git commit document (in\n/// `tests_sources`) produces the expected number of lints.\nmacro_rules! create_test {\n    ($filename:ident.txt, $correct_expected:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_ $filename _correctly>](){\n                 let source = include_str!(\n                    concat!(\n                        \"./test_sources/\",\n                        concat!(stringify!($filename), \".txt\")\n                    )\n                 );\n\n                 let dict = FstDictionary::curated();\n                 let document = Document::new(source, &JJDescriptionParser::new(MarkdownOptions::default()), &dict);\n\n                 let mut linter = LintGroup::new_curated(dict, Dialect::American);\n                 let lints = linter.lint(&document);\n\n                 dbg!(&lints);\n                 assert_eq!(lints.len(), $correct_expected);\n\n                 // Make sure that all generated tokens span real characters\n                 for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                 }\n            }\n        }\n    };\n}\n\ncreate_test!(simple_description.txt, 1);\ncreate_test!(complex_verbose_description.txt, 2);\ncreate_test!(conventional_description.txt, 3);\n"
  },
  {
    "path": "harper-jjdescription/tests/test_sources/complex_verbose_description.txt",
    "content": "This is the the subject\n\nThis is a first line without typos\nJJ: This is a comment with a typoo that should be ignored\nThis is a line below the comment with typooos\n\nJJ: This commit contains the following changes:\nJJ:     myfile.txt | 1 +\nJJ:     1 file changed, 1 insertion(+), 0 deletions(-)\n\nJJ: ignore-rest\ndiff --git a/myfile.txt b/myfile.txt\nnew file mode 100644\nindex 0000000000..54f266d2db\n--- /dev/null\n+++ b/myfile.txt\n@@ -0,0 +1,1 @@\n+typooo in the file\n\nJJ: Lines starting with \"JJ:\" (like this one) will be removed.\n"
  },
  {
    "path": "harper-jjdescription/tests/test_sources/conventional_description.txt",
    "content": "feat(stuff): use session-based authentiation\n\nBREAKING CHANGE: JWT authentication removed. API clients mustt now use\nsession cookies instead of Authorization headers with bearer tokens.\n\nSessions expire after 24 hours of inactvity.\n\nCloses: #247\nReviewed-by: John Doe <john@example.com>\n\nJJ: Change ID: qrutlxlw\nJJ: This commit contains the following changes:\nJJ:     M Cargo.lock\nJJ:     M Cargo.toml\nJJ:     A harper-jjdescription/Cargo.toml\nJJ:     A harper-jjdescription/src/lib.rs\nJJ:     A harper-jjdescription/tests/run_tests.rs\nJJ:     A harper-jjdescription/tests/test_sources/complex_verbose_description.txt\nJJ:     A harper-jjdescription/tests/test_sources/conventional_description.txt\nJJ:     A harper-jjdescription/tests/test_sources/simple_description.txt\nJJ:     M harper-ls/Cargo.toml\nJJ:     M harper-ls/src/backend.rs\nJJ:\nJJ: Lines starting with \"JJ:\" (like this one) will be removed.\n\n"
  },
  {
    "path": "harper-jjdescription/tests/test_sources/simple_description.txt",
    "content": "A simple description with a typo: descrption\n"
  },
  {
    "path": "harper-literate-haskell/Cargo.toml",
    "content": "[package]\nname = \"harper-literate-haskell\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\nharper-tree-sitter = { path = \"../harper-tree-sitter\", version = \"1.0.0\" }\nharper-comments = { path = \"../harper-comments\", version = \"1.0.0\" }\nitertools = \"0.14.0\"\npaste = \"1.0.14\"\n"
  },
  {
    "path": "harper-literate-haskell/src/lib.rs",
    "content": "use harper_comments::CommentParser;\nuse harper_core::{\n    Lrc, Masker, Token,\n    parsers::{Markdown, MarkdownOptions, Mask, Parser},\n};\n\nmod masker;\nuse harper_core::spell::MutableDictionary;\nuse itertools::Itertools;\nuse masker::LiterateHaskellMasker;\n\n/// Parses a Literate Haskell document by masking out the code and considering text as Markdown.\npub struct LiterateHaskellParser {\n    inner: Lrc<dyn Parser>,\n}\n\nimpl LiterateHaskellParser {\n    pub fn new(inner: Lrc<dyn Parser>) -> Self {\n        Self { inner }\n    }\n\n    pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {\n        Self {\n            inner: Lrc::new(Markdown::new(markdown_options)),\n        }\n    }\n\n    pub fn create_ident_dict(\n        &self,\n        source: &[char],\n        markdown_options: MarkdownOptions,\n    ) -> Option<MutableDictionary> {\n        let parser = CommentParser::new_from_language_id(\"haskell\", markdown_options).unwrap();\n        let mask = LiterateHaskellMasker::code_only().create_mask(source);\n\n        let code = mask\n            .iter_allowed(source)\n            .flat_map(|(_, src)| src.to_owned())\n            .collect_vec();\n        parser.create_ident_dict(&code)\n    }\n}\n\nimpl Parser for LiterateHaskellParser {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        Mask::new(LiterateHaskellMasker::text_only(), self.inner.clone()).parse(source)\n    }\n}\n"
  },
  {
    "path": "harper-literate-haskell/src/masker.rs",
    "content": "use harper_core::{CharStringExt, Mask, Masker, Span};\n\n/// Masker for selecting portions of Literate Haskell documents.\n///\n/// Based on the specifications outlined at https://wiki.haskell.org/Literate_programming.\npub struct LiterateHaskellMasker {\n    text: bool,\n    code: bool,\n}\n\nimpl LiterateHaskellMasker {\n    pub fn text_only() -> Self {\n        Self {\n            text: true,\n            code: false,\n        }\n    }\n\n    pub fn code_only() -> Self {\n        Self {\n            text: false,\n            code: true,\n        }\n    }\n}\n\nimpl Masker for LiterateHaskellMasker {\n    fn create_mask(&self, source: &[char]) -> harper_core::Mask {\n        let mut mask = Mask::new_blank();\n\n        let mut location = 0;\n        let mut in_code_env = false;\n        let mut last_line_blank = false;\n\n        for line in source.split(|c| *c == '\\n') {\n            let string_form = line.to_string();\n            let trimmed = string_form.trim();\n            let line_is_bird = line.first().is_some_and(|c| *c == '>');\n\n            // Code fencing\n            let latex_style = matches!(trimmed, r\"\\begin{code}\" | r\"\\end{code}\");\n            let code_start = trimmed == r\"\\begin{code}\" || (last_line_blank && line_is_bird);\n            let code_end = trimmed == r\"\\end{code}\" || trimmed.is_empty();\n\n            // Toggle on fence\n            if (!in_code_env && code_start) || (in_code_env && code_end) {\n                in_code_env = !in_code_env;\n\n                // Exclude latex-style fence\n                if latex_style {\n                    location += line.len() + 1; // +1 for the newline split on\n                    last_line_blank = trimmed.is_empty();\n                    continue;\n                }\n\n                // Exclude newline after code for bird style\n                if trimmed.is_empty() {\n                    location += line.len() + 1; // +1 for the newline split on\n                    last_line_blank = true;\n                    continue;\n                }\n            }\n\n            let end_loc = location + line.len();\n            if (!in_code_env && self.text) || (in_code_env && self.code) {\n                let start_loc = if line_is_bird { location + 2 } else { location };\n                mask.push_allowed(Span::new(start_loc, end_loc));\n            }\n\n            location = end_loc + 1; // +1 for the newline split on\n            last_line_blank = trimmed.is_empty();\n        }\n\n        mask.merge_whitespace_sep(source);\n        mask\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use harper_core::{Masker, Span};\n    use itertools::Itertools;\n\n    use super::LiterateHaskellMasker;\n\n    #[test]\n    fn bird_format() {\n        let source = r\"Text here\n\n> fact :: Integer -> Integer\n> fact 0 = 1\n> fact n = n * fact (n-1)\n\nText here\n\"\n        .chars()\n        .collect_vec();\n\n        let text_mask = LiterateHaskellMasker::text_only().create_mask(&source);\n        assert_eq!(\n            text_mask\n                .iter_allowed(&source)\n                .map(|(s, _)| s)\n                .collect_vec(),\n            vec![Span::new(0, 10), Span::new(80, 90)],\n        );\n\n        let code_mask = LiterateHaskellMasker::code_only().create_mask(&source);\n        assert_eq!(\n            code_mask\n                .iter_allowed(&source)\n                .map(|(s, _)| s)\n                .collect_vec(),\n            vec![Span::new(13, 39), Span::new(42, 52), Span::new(55, 78)],\n        );\n    }\n\n    #[test]\n    fn latex_format() {\n        let source = r#\"Text here\n\\begin{code}\nmain :: IO ()\nmain = print \"just an example\"\n\\end{code}\nText here\n\"#\n        .chars()\n        .collect_vec();\n\n        let text_mask = LiterateHaskellMasker::text_only().create_mask(&source);\n        assert_eq!(\n            text_mask\n                .iter_allowed(&source)\n                .map(|(s, _)| s)\n                .collect_vec(),\n            vec![Span::new(0, 9), Span::new(79, 89)],\n        );\n\n        let code_mask = LiterateHaskellMasker::code_only().create_mask(&source);\n        assert_eq!(\n            code_mask\n                .iter_allowed(&source)\n                .map(|(s, _)| s)\n                .collect_vec(),\n            vec![Span::new(23, 67)],\n        );\n    }\n}\n"
  },
  {
    "path": "harper-literate-haskell/tests/run_tests.rs",
    "content": "use harper_core::linting::{LintGroup, Linter};\nuse harper_core::parsers::MarkdownOptions;\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\nuse harper_literate_haskell::LiterateHaskellParser;\n\n/// Creates a unit test checking that the linting of a Markdown document (in\n/// `tests_sources`) produces the expected number of lints.\nmacro_rules! create_test {\n    ($filename:ident.lhs, $correct_expected:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_ $filename _correctly>](){\n                 let source = include_str!(\n                    concat!(\n                        \"./test_sources/\",\n                        concat!(stringify!($filename), \".lhs\")\n                    )\n                 );\n\n                 let dict = FstDictionary::curated();\n                 let document = Document::new_curated(&source, &LiterateHaskellParser::new_markdown(MarkdownOptions::default()));\n\n                 let mut linter = LintGroup::new_curated(dict, Dialect::American);\n                 let lints = linter.lint(&document);\n\n                 dbg!(&lints);\n                 assert_eq!(lints.len(), $correct_expected);\n\n                 // Make sure that all generated tokens span real characters\n                 for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                 }\n            }\n        }\n    };\n}\n\ncreate_test!(bird_format.lhs, 2);\ncreate_test!(latex_format.lhs, 2);\ncreate_test!(mixed_format.lhs, 4);\n"
  },
  {
    "path": "harper-literate-haskell/tests/test_sources/bird_format.lhs",
    "content": "Sourced from https://wiki.haskell.org/Literate_programming.\n\nIn Bird-style you have to leave a blnk before the code.\n\n> fact :: Integer -> Integer\n> fact 0 = 1\n> fact n = n * fact (n-1)\n\nAnd you have to leave a blnk line after the code as well.\n"
  },
  {
    "path": "harper-literate-haskell/tests/test_sources/latex_format.lhs",
    "content": "Sourced from https://wiki.haskell.org/Literate_programming.\n\nAnd the definition of the following function\nwould totally screw up my program, so I'm not\ndefinining it:\n\n\\begin{code}\nmain :: IO ()\nmain = print \"just an example\"\n\\end{code}\n\nSeee?\n"
  },
  {
    "path": "harper-literate-haskell/tests/test_sources/mixed_format.lhs",
    "content": "Sourced from https://wiki.haskell.org/Literate_programming.\n\nIn Bird-style you have to leave a blnk before the code.\n\n> fact :: Integer -> Integer\n> fact 0 = 1\n> fact n = n * fact (n-1)\n\nAnd you have to leave a blnk line after the code as well.\n\nAnd the definition of the following function\nwould totally screw up my program, so I'm not\ndefinining it:\n\n\\begin{code}\nmain :: IO ()\nmain = print \"just an example\"\n\\end{code}\n\nSeee?\n"
  },
  {
    "path": "harper-ls/Cargo.toml",
    "content": "[package]\nname = \"harper-ls\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nreadme = \"README.md\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-stats = { path = \"../harper-stats\", version = \"1.0.0\" }\nharper-literate-haskell = { path = \"../harper-literate-haskell\", version = \"1.0.0\" }\nharper-core = { path = \"../harper-core\", version = \"1.0.0\", features = [\"concurrent\"] }\nharper-comments = { path = \"../harper-comments\", version = \"1.0.0\" }\nharper-jjdescription = { path = \"../harper-jjdescription\", version = \"1.0.0\" }\nharper-typst = { path = \"../harper-typst\", version = \"1.0.0\" }\nharper-tex = { path = \"../harper-tex\", version = \"1.0.0\" }\nharper-html = { path = \"../harper-html\", version = \"1.0.0\" }\nharper-python = { path = \"../harper-python\", version = \"1.0.0\" }\nharper-asciidoc = { path = \"../harper-asciidoc\", version = \"1.0.0\" }\ntower-lsp-server = \"0.22.1\"\ntokio = { version = \"1.50.0\", default-features = false, features = [\"fs\", \"io-std\", \"io-util\", \"macros\", \"net\", \"rt-multi-thread\", \"sync\"] }\nclap = { version = \"4.6.0\", default-features = false, features = [\"derive\", \"std\"] }\ndirs = \"6.0.0\"\nanyhow = \"1.0.102\"\nserde_json = \"1.0.149\"\nitertools = \"0.14.0\"\ntracing = { version = \"0.1.44\", default-features = false, features = [\"std\"] }\ntracing-subscriber = { version = \"0.3.22\", default-features = false, features = [\"fmt\", \"std\"] }\nresolve-path = \"0.1.0\"\nopen = \"5.3.3\"\nfutures = \"0.3.32\"\nserde = { version = \"1.0.228\", features = [\"derive\"] }\nglobset = \"0.4.18\"\nharper-ink = { version = \"1.0.0\", path = \"../harper-ink\" }\n\n[features]\ndefault = []\nthesaurus = [\"harper-core/thesaurus\"]\n"
  },
  {
    "path": "harper-ls/README.md",
    "content": "# `harper-ls`\n\nDocumentation for `harper-ls` has moved to the main [website](https://writewithharper.com/docs/integrations/language-server).\n"
  },
  {
    "path": "harper-ls/src/backend.rs",
    "content": "use std::collections::HashMap;\nuse std::fs::OpenOptions;\nuse std::io::{BufWriter, Write};\nuse std::path::PathBuf;\nuse std::sync::Arc;\n\nuse crate::config::Config;\nuse crate::dictionary_io::{load_dict, save_dict};\nuse crate::document_state::DocumentState;\nuse crate::git_commit_parser::GitCommitParser;\nuse crate::ignored_lints_io::{load_ignored_lints, save_ignored_lints};\nuse crate::io_utils::fileify_path;\nuse anyhow::{Context, Result, anyhow};\nuse futures::future::join;\nuse harper_asciidoc::AsciidocParser;\nuse harper_comments::CommentParser;\nuse harper_core::linting::{LintGroup, LintGroupConfig};\nuse harper_core::parsers::{\n    CollapseIdentifiers, IsolateEnglish, Markdown, OrgMode, Parser, PlainEnglish,\n};\nuse harper_core::spell::{Dictionary, FstDictionary, MergedDictionary, MutableDictionary};\nuse harper_core::{Dialect, DictWordMetadata, Document, IgnoredLints};\nuse harper_html::HtmlParser;\nuse harper_ink::InkParser;\nuse harper_jjdescription::JJDescriptionParser;\nuse harper_literate_haskell::LiterateHaskellParser;\nuse harper_python::PythonParser;\nuse harper_stats::{Record, Stats};\nuse harper_tex::TeX;\nuse harper_typst::Typst;\nuse serde_json::{Value, json};\nuse tokio::sync::{Mutex, RwLock};\nuse tower_lsp_server::jsonrpc::Result as JsonResult;\nuse tower_lsp_server::lsp_types::notification::PublishDiagnostics;\nuse tower_lsp_server::lsp_types::{\n    CodeActionOrCommand, CodeActionParams, CodeActionProviderCapability, CodeActionResponse,\n    ConfigurationItem, Diagnostic, DidChangeConfigurationParams, DidChangeTextDocumentParams,\n    DidChangeWatchedFilesParams, DidChangeWatchedFilesRegistrationOptions,\n    DidCloseTextDocumentParams, DidOpenTextDocumentParams, ExecuteCommandOptions,\n    ExecuteCommandParams, FileChangeType, FileSystemWatcher, GlobPattern, InitializeParams,\n    InitializeResult, InitializedParams, MessageType, PublishDiagnosticsParams, Range,\n    Registration, ServerCapabilities, ServerInfo, TextDocumentSyncCapability, TextDocumentSyncKind,\n    TextDocumentSyncOptions, TextDocumentSyncSaveOptions, Uri, WatchKind,\n};\nuse tower_lsp_server::{Client, LanguageServer, UriExt};\nuse tracing::{error, info, warn};\n\n/// Return harper-ls version\npub fn ls_version() -> &'static str {\n    env!(\"CARGO_PKG_VERSION\")\n}\n\npub struct Backend {\n    client: Client,\n    root: RwLock<PathBuf>,\n    config: RwLock<Config>,\n    stats: RwLock<Stats>,\n    doc_state: Mutex<HashMap<Uri, DocumentState>>,\n}\n\nimpl Backend {\n    pub fn new(client: Client, config: Config) -> Self {\n        Self {\n            client,\n            root: RwLock::new(\".\".into()),\n            stats: RwLock::new(Stats::new()),\n            config: RwLock::new(config),\n            doc_state: Mutex::new(HashMap::new()),\n        }\n    }\n\n    /// Load a specific file's dictionary\n    async fn load_file_dictionary(&self, uri: &Uri) -> anyhow::Result<MutableDictionary> {\n        // VS Code's unsaved documents have \"untitled\" scheme\n        if uri\n            .scheme()\n            .is_some_and(|scheme| scheme.eq_lowercase(\"untitled\"))\n        {\n            return Ok(MutableDictionary::new());\n        }\n\n        let path = self\n            .get_file_dict_path(uri)\n            .await\n            .context(\"Unable to get the file path.\")?;\n\n        load_dict(path, self.config.read().await.dialect)\n            .await\n            .map_err(|err| info!(\"{err}\"))\n            .or(Ok(MutableDictionary::new()))\n    }\n\n    /// Compute the location of the ignored lint's store.\n    async fn get_ignored_lints_path(&self, uri: &Uri) -> anyhow::Result<PathBuf> {\n        let config = self.config.read().await;\n\n        Ok(config.ignored_lints_path.join(fileify_path(uri)?))\n    }\n\n    async fn save_ignored_lints(&self, uri: &Uri, ignored_lints: &IgnoredLints) -> Result<()> {\n        save_ignored_lints(\n            self.get_ignored_lints_path(uri)\n                .await\n                .context(\"Unable to get ignored lints path.\")?,\n            ignored_lints,\n        )\n        .await\n        .context(\"Unable to save ignored lints to path.\")\n    }\n\n    async fn load_ignored_lints(&self, uri: &Uri) -> Result<IgnoredLints> {\n        // VS Code's unsaved documents have \"untitled\" scheme\n        if uri\n            .scheme()\n            .is_some_and(|scheme| scheme.eq_lowercase(\"untitled\"))\n        {\n            return Ok(IgnoredLints::new());\n        }\n\n        Ok(load_ignored_lints(\n            self.get_ignored_lints_path(uri)\n                .await\n                .context(\"Unable to get ignored lints path.\")?,\n        )\n        .await\n        .map_err(|err| info!(\"{err}\"))\n        .unwrap_or(IgnoredLints::new()))\n    }\n\n    /// Compute the location of the file's specific dictionary\n    async fn get_file_dict_path(&self, uri: &Uri) -> anyhow::Result<PathBuf> {\n        let config = self.config.read().await;\n\n        Ok(config.file_dict_path.join(fileify_path(uri)?))\n    }\n\n    async fn save_file_dictionary(&self, uri: &Uri, dict: impl Dictionary) -> Result<()> {\n        save_dict(\n            self.get_file_dict_path(uri)\n                .await\n                .context(\"Unable to get the file path.\")?,\n            dict,\n        )\n        .await\n        .context(\"Unable to save the dictionary to path.\")\n    }\n\n    async fn load_user_dictionary(&self) -> MutableDictionary {\n        let config = self.config.read().await;\n\n        load_dict(&config.user_dict_path, self.config.read().await.dialect)\n            .await\n            .map_err(|err| info!(\"{err}\"))\n            .unwrap_or(MutableDictionary::new())\n    }\n\n    async fn save_user_dictionary(&self, dict: impl Dictionary) -> Result<()> {\n        let config = self.config.read().await;\n\n        save_dict(&config.user_dict_path, dict)\n            .await\n            .map_err(|err| anyhow!(\"Unable to save the dictionary to file: {err}\"))\n    }\n\n    async fn load_workspace_dictionary(&self) -> MutableDictionary {\n        let config = self.config.read().await;\n        load_dict(\n            &config.workspace_dict_path,\n            self.config.read().await.dialect,\n        )\n        .await\n        .map_err(|err| info!(\"{err}\"))\n        .unwrap_or(MutableDictionary::new())\n    }\n\n    async fn save_workspace_dictionary(&self, dict: impl Dictionary) -> Result<()> {\n        let config = self.config.read().await;\n        save_dict(&config.workspace_dict_path, dict)\n            .await\n            .map_err(|err| anyhow!(\"Unable to save the dictionary to file: {err}\"))\n    }\n\n    async fn save_stats(&self) -> Result<()> {\n        let (config, stats) = join(self.config.read(), self.stats.read()).await;\n\n        if let Some(parent) = config.stats_path.parent() {\n            tokio::fs::create_dir_all(parent).await?;\n        }\n\n        let mut writer = BufWriter::new(\n            OpenOptions::new()\n                .read(true)\n                .append(true)\n                .create(true)\n                .open(&config.stats_path)?,\n        );\n        stats.write(&mut writer)?;\n        writer.flush()?;\n\n        Ok(())\n    }\n\n    async fn generate_global_dictionary(&self) -> Result<MergedDictionary> {\n        let mut dict = MergedDictionary::new();\n        dict.add_dictionary(FstDictionary::curated());\n        let user_dict = self.load_user_dictionary().await;\n        dict.add_dictionary(Arc::new(user_dict));\n        let ws_dict = self.load_workspace_dictionary().await;\n        dict.add_dictionary(Arc::new(ws_dict));\n        Ok(dict)\n    }\n\n    async fn generate_file_dictionary(&self, uri: &Uri) -> Result<MergedDictionary> {\n        let (global_dictionary, file_dictionary) = tokio::join!(\n            self.generate_global_dictionary(),\n            self.load_file_dictionary(uri)\n        );\n\n        let mut global_dictionary =\n            global_dictionary.context(\"Unable to load the user dictionary.\")?;\n        global_dictionary.add_dictionary(Arc::new(\n            file_dictionary.context(\"Unable to load the file dictionary.\")?,\n        ));\n\n        Ok(global_dictionary)\n    }\n\n    async fn update_document_from_file(&self, uri: &Uri, language_id: Option<&str>) -> Result<()> {\n        let content = tokio::fs::read_to_string(\n            uri.to_file_path()\n                .ok_or_else(|| anyhow!(\"Unable to convert URL to file path.\"))?,\n        )\n        .await\n        .with_context(|| format!(\"Unable to read from file {uri:?}\"))?;\n\n        self.update_document(uri, &content, language_id).await\n    }\n\n    async fn update_document(\n        &self,\n        uri: &Uri,\n        text: &str,\n        language_id: Option<&str>,\n    ) -> Result<()> {\n        self.pull_config().await;\n\n        // Copy necessary configuration to avoid holding lock.\n        let (\n            lint_config,\n            markdown_options,\n            isolate_english,\n            dialect,\n            max_file_length,\n            exclude_patterns,\n        ) = {\n            let config = self.config.read().await;\n            (\n                config.lint_config.clone(),\n                config.markdown_options,\n                config.isolate_english,\n                config.dialect,\n                config.max_file_length,\n                config.exclude_patterns.clone(),\n            )\n        };\n\n        let mut doc_lock = self.doc_state.lock().await;\n\n        if !exclude_patterns.is_empty()\n            && exclude_patterns.is_match(\n                uri.to_file_path()\n                    .ok_or_else(|| anyhow!(\"Unable to convert URI to file path.\"))?,\n            )\n        {\n            doc_lock.remove(uri);\n            return Ok(());\n        }\n\n        let ignored_lints = self.load_ignored_lints(uri).await.unwrap_or_default();\n\n        let dict = Arc::new(\n            self.generate_file_dictionary(uri)\n                .await\n                .context(\"Unable to generate the file dictionary.\")?,\n        );\n\n        let doc_state = doc_lock.entry(uri.clone()).or_insert_with(|| {\n            info!(\"Constructing new LintGroup for new document.\");\n\n            DocumentState {\n                ignored_lints,\n                linter: LintGroup::new_curated(dict.clone(), dialect)\n                    .with_lint_config(lint_config.clone()),\n                language_id: language_id.map(|v| v.to_string()),\n                dict: dict.clone(),\n                uri: uri.clone(),\n                ..Default::default()\n            }\n        });\n\n        if doc_state.dict != dict {\n            doc_state.dict = dict.clone();\n            info!(\"Constructing new linter because of modified dictionary.\");\n            doc_state.linter =\n                LintGroup::new_curated(dict.clone(), dialect).with_lint_config(lint_config.clone());\n        }\n\n        let Some(language_id) = &doc_state.language_id else {\n            doc_lock.remove(uri);\n            return Ok(());\n        };\n\n        async fn use_ident_dict<'a>(\n            backend: &'a Backend,\n            new_dict: Arc<MutableDictionary>,\n            parser: impl Parser + 'static,\n            uri: &'a Uri,\n            doc_state: &'a mut DocumentState,\n            lint_config: &LintGroupConfig,\n            dialect: Dialect,\n        ) -> Result<Box<dyn Parser>> {\n            if doc_state.ident_dict != new_dict {\n                info!(\"Constructing new linter because of modified ident dictionary.\");\n                doc_state.ident_dict = new_dict.clone();\n\n                let mut merged = backend.generate_file_dictionary(uri).await?;\n                merged.add_dictionary(new_dict);\n                let merged = Arc::new(merged);\n\n                doc_state.linter = LintGroup::new_curated(merged.clone(), dialect)\n                    .with_lint_config(lint_config.clone());\n                doc_state.dict = merged.clone();\n            }\n\n            Ok(Box::new(CollapseIdentifiers::new(\n                Box::new(parser),\n                Box::new(doc_state.dict.clone()),\n            )))\n        }\n\n        let source: Vec<char> = text.chars().collect();\n        let ts_parser = CommentParser::new_from_language_id(language_id, markdown_options);\n        let parser: Option<Box<dyn Parser>> = match language_id.as_str() {\n            _ if ts_parser.is_some() => {\n                let ts_parser = ts_parser.unwrap();\n\n                if let Some(new_dict) = ts_parser.create_ident_dict(&Arc::new(source)) {\n                    Some(\n                        use_ident_dict(\n                            self,\n                            Arc::new(new_dict),\n                            ts_parser,\n                            uri,\n                            doc_state,\n                            &lint_config,\n                            dialect,\n                        )\n                        .await?,\n                    )\n                } else {\n                    Some(Box::new(ts_parser))\n                }\n            }\n            \"git-commit\" | \"gitcommit\" | \"octo\" => {\n                Some(Box::new(GitCommitParser::new_markdown(markdown_options)))\n            }\n            \"html\" => Some(Box::new(HtmlParser::default())),\n            \"asciidoc\" => Some(Box::new(AsciidocParser::default())),\n            \"ink\" => Some(Box::new(InkParser::default())),\n            \"jj-commit\" | \"jjdescription\" => {\n                Some(Box::new(JJDescriptionParser::new(markdown_options)))\n            }\n            \"lhaskell\" | \"literate haskell\" => {\n                let parser = LiterateHaskellParser::new_markdown(markdown_options);\n\n                if let Some(new_dict) =\n                    parser.create_ident_dict(&Arc::new(source), markdown_options)\n                {\n                    Some(\n                        use_ident_dict(\n                            self,\n                            Arc::new(new_dict),\n                            parser,\n                            uri,\n                            doc_state,\n                            &lint_config,\n                            dialect,\n                        )\n                        .await?,\n                    )\n                } else {\n                    Some(Box::new(parser))\n                }\n            }\n            \"mail\" => Some(Box::new(PlainEnglish)),\n            \"markdown\" => Some(Box::new(Markdown::new(markdown_options))),\n            \"org\" => Some(Box::new(OrgMode)),\n            \"plaintext\" | \"text\" => Some(Box::new(PlainEnglish)),\n            \"python\" => Some(Box::new(PythonParser::default())),\n            \"typst\" => Some(Box::new(Typst)),\n            \"tex\" | \"plaintex\" | \"latex\" => Some(Box::new(TeX::default())),\n            _ => None,\n        };\n\n        match parser {\n            None => {\n                doc_lock.remove(uri);\n            }\n            Some(mut parser) => {\n                if isolate_english {\n                    parser = Box::new(IsolateEnglish::new(parser, doc_state.dict.clone()));\n                }\n\n                // Don't lint on documents larger than the configured maximum length.\n                if text.len() <= max_file_length {\n                    doc_state.document = Document::new(text, &parser, &doc_state.dict);\n                } else {\n                    // Ensures that existing lints are cleared when we stop linting the file.\n                    // Otherwise, prior lints will remain, and they will quickly fall out of sync\n                    // with the document when it is edited.\n                    doc_state.document = Document::default();\n                }\n            }\n        }\n\n        Ok(())\n    }\n\n    async fn generate_code_actions(\n        &self,\n        uri: &Uri,\n        range: Range,\n    ) -> JsonResult<Vec<CodeActionOrCommand>> {\n        let (config, mut doc_states) = tokio::join!(self.config.read(), self.doc_state.lock());\n        let Some(doc_state) = doc_states.get_mut(uri) else {\n            return Ok(Vec::new());\n        };\n\n        Ok(doc_state.generate_code_actions(range, &config.code_action_config))\n    }\n\n    async fn generate_diagnostics(&self, uri: &Uri) -> Vec<Diagnostic> {\n        // Copy necessary configuration to avoid holding lock.\n        let diagnostic_severity = {\n            let config = self.config.read().await;\n            config.diagnostic_severity\n        };\n\n        let mut doc_states = self.doc_state.lock().await;\n        let Some(doc_state) = doc_states.get_mut(uri) else {\n            return Vec::new();\n        };\n\n        doc_state.generate_diagnostics(diagnostic_severity)\n    }\n\n    async fn publish_diagnostics(&self, uri: &Uri) {\n        let diagnostics = self.generate_diagnostics(uri).await;\n\n        let result = PublishDiagnosticsParams {\n            uri: uri.clone(),\n            diagnostics,\n            version: None,\n        };\n\n        self.client\n            .send_notification::<PublishDiagnostics>(result)\n            .await;\n    }\n\n    /// Update the configuration of the server and publish document updates that\n    /// match it.\n    async fn update_config_from_obj(&self, json_obj: Value) {\n        if let Ok(new_config) = Config::from_lsp_config(&self.root.read().await, json_obj)\n            .map_err(|err| error!(\"{err}\"))\n        {\n            let mut config = self.config.write().await;\n            *config = new_config;\n        }\n    }\n\n    async fn pull_config(&self) {\n        let mut new_config = self\n            .client\n            .configuration(vec![ConfigurationItem {\n                scope_uri: None,\n                section: None,\n            }])\n            .await\n            .unwrap_or(vec![json!({ \"harper-ls\": {} })]);\n\n        if let Some(first) = new_config.pop() {\n            self.update_config_from_obj(first).await;\n        }\n    }\n}\n\nimpl LanguageServer for Backend {\n    async fn initialize(&self, params: InitializeParams) -> JsonResult<InitializeResult> {\n        if let Some(root) = params\n            .workspace_folders\n            .as_ref()\n            // We take the first workspace folder\n            .and_then(|v| v.first())\n            .map(|f| &f.uri)\n            // Or failing that, the root_uri (which is deprecated in favour of workspace_folders)\n            .or(\n                #[allow(deprecated)]\n                params.root_uri.as_ref(),\n            )\n            .and_then(|u| u.to_file_path().map(PathBuf::from))\n            // Or failing that, the root_path (which is deprecated in favour of root_uri)\n            .or(\n                #[allow(deprecated)]\n                params.root_path.as_deref().map(PathBuf::from),\n            )\n        {\n            // Save the workspace root away for use during the configuration step\n            *self.root.write().await = root;\n        }\n\n        Ok(InitializeResult {\n            server_info: Some(ServerInfo {\n                name: \"harper-ls\".to_owned(),\n                version: Some(ls_version().to_owned()),\n            }),\n            capabilities: ServerCapabilities {\n                code_action_provider: Some(CodeActionProviderCapability::Simple(true)),\n                execute_command_provider: Some(ExecuteCommandOptions {\n                    commands: vec![\n                        \"HarperRecordLint\".to_owned(),\n                        \"HarperAddToUserDict\".to_owned(),\n                        \"HarperAddToWSDict\".to_owned(),\n                        \"HarperAddToFileDict\".to_owned(),\n                        \"HarperOpen\".to_owned(),\n                        \"HarperIgnoreLint\".to_owned(),\n                    ],\n                    ..Default::default()\n                }),\n                text_document_sync: Some(TextDocumentSyncCapability::Options(\n                    TextDocumentSyncOptions {\n                        open_close: Some(true),\n                        change: Some(TextDocumentSyncKind::FULL),\n                        will_save: None,\n                        will_save_wait_until: None,\n                        save: Some(TextDocumentSyncSaveOptions::Supported(true)),\n                    },\n                )),\n                ..Default::default()\n            },\n        })\n    }\n\n    async fn initialized(&self, _: InitializedParams) {\n        self.client\n            .log_message(MessageType::INFO, \"Server initialized!\")\n            .await;\n\n        self.pull_config().await;\n\n        let did_change_watched_files = Registration {\n            id: \"workspace/didChangeWatchedFiles\".to_owned(),\n            method: \"workspace/didChangeWatchedFiles\".to_owned(),\n            register_options: Some(\n                serde_json::to_value(DidChangeWatchedFilesRegistrationOptions {\n                    watchers: vec![FileSystemWatcher {\n                        glob_pattern: GlobPattern::String(\"**/*\".to_owned()),\n                        kind: Some(WatchKind::Delete),\n                    }],\n                })\n                .unwrap(),\n            ),\n        };\n        if let Err(err) = self\n            .client\n            .register_capability(vec![did_change_watched_files])\n            .await\n        {\n            warn!(\"Unable to register watch file capability: {}\", err);\n        }\n    }\n\n    async fn did_open(&self, params: DidOpenTextDocumentParams) {\n        self.update_document(\n            &params.text_document.uri,\n            &params.text_document.text,\n            Some(&params.text_document.language_id),\n        )\n        .await\n        .map_err(|err| error!(\"{err}\"))\n        .err();\n\n        self.publish_diagnostics(&params.text_document.uri).await;\n    }\n\n    async fn did_change(&self, params: DidChangeTextDocumentParams) {\n        let Some(last) = params.content_changes.last() else {\n            return;\n        };\n\n        if let Err(err) = self\n            .update_document(&params.text_document.uri, &last.text, None)\n            .await\n        {\n            error!(\"{err}\")\n        }\n\n        self.publish_diagnostics(&params.text_document.uri).await;\n    }\n\n    async fn did_close(&self, _params: DidCloseTextDocumentParams) {\n        let uri = _params.text_document.uri;\n        let mut doc_lock = self.doc_state.lock().await;\n        doc_lock.remove(&uri);\n\n        self.client\n            .send_notification::<PublishDiagnostics>(PublishDiagnosticsParams {\n                uri: uri.clone(),\n                diagnostics: vec![],\n                version: None,\n            })\n            .await;\n    }\n\n    async fn did_change_watched_files(&self, params: DidChangeWatchedFilesParams) {\n        let mut doc_lock = self.doc_state.lock().await;\n        let mut uris_to_clear = Vec::new();\n\n        for change in &params.changes {\n            if change.typ != FileChangeType::DELETED {\n                continue;\n            }\n\n            doc_lock.retain(|uri, _| {\n                // `change.uri` could be a directory so use `starts_with` instead of `==`.\n                let to_remove = uri.as_str().starts_with(change.uri.as_str());\n\n                if to_remove {\n                    uris_to_clear.push(uri.clone());\n                }\n\n                !to_remove\n            });\n        }\n\n        for uri in &uris_to_clear {\n            self.client\n                .send_notification::<PublishDiagnostics>(PublishDiagnosticsParams {\n                    uri: uri.clone(),\n                    diagnostics: vec![],\n                    version: None,\n                })\n                .await;\n        }\n    }\n\n    async fn execute_command(&self, params: ExecuteCommandParams) -> JsonResult<Option<Value>> {\n        let mut string_args = params\n            .arguments\n            .iter()\n            .map(|v| serde_json::from_value::<String>(v.clone()).unwrap());\n\n        let Some(first) = string_args.next() else {\n            return Ok(None);\n        };\n\n        info!(\"Received command: \\\"{}\\\"\", params.command.as_str());\n\n        match params.command.as_str() {\n            \"HarperRecordLint\" => {\n                let Ok(kind) = serde_json::from_str(&first) else {\n                    error!(\"Unable to deserialize RecordKind.\");\n                    return Ok(None);\n                };\n\n                let record = Record::now(kind);\n\n                let mut stats = self.stats.write().await;\n                stats.records.push(record);\n            }\n            \"HarperAddToUserDict\" => {\n                let word = &first.chars().collect::<Vec<_>>();\n\n                let Some(second) = string_args.next() else {\n                    return Ok(None);\n                };\n\n                let file_uri = second.parse().unwrap();\n\n                let mut dict = self.load_user_dictionary().await;\n                dict.append_word(word, DictWordMetadata::default());\n                self.save_user_dictionary(dict)\n                    .await\n                    .map_err(|err| error!(\"{err}\"))\n                    .err();\n                self.update_document_from_file(&file_uri, None)\n                    .await\n                    .map_err(|err| error!(\"{err}\"))\n                    .err();\n                self.publish_diagnostics(&file_uri).await;\n            }\n            \"HarperAddToWSDict\" => {\n                let word = &first.chars().collect::<Vec<_>>();\n\n                let Some(second) = string_args.next() else {\n                    return Ok(None);\n                };\n\n                let file_uri = second.parse().unwrap();\n\n                let mut dict = self.load_workspace_dictionary().await;\n                dict.append_word(word, DictWordMetadata::default());\n                self.save_workspace_dictionary(dict)\n                    .await\n                    .map_err(|err| error!(\"{err}\"))\n                    .err();\n                self.update_document_from_file(&file_uri, None)\n                    .await\n                    .map_err(|err| error!(\"{err}\"))\n                    .err();\n                self.publish_diagnostics(&file_uri).await;\n            }\n            \"HarperAddToFileDict\" => {\n                let word = &first.chars().collect::<Vec<_>>();\n\n                let Some(second) = string_args.next() else {\n                    return Ok(None);\n                };\n\n                let file_uri = second.parse().unwrap();\n\n                let mut dict = match self\n                    .load_file_dictionary(&file_uri)\n                    .await\n                    .map_err(|err| error!(\"{err}\"))\n                {\n                    Ok(dict) => dict,\n                    Err(_) => {\n                        return Ok(None);\n                    }\n                };\n                dict.append_word(word, DictWordMetadata::default());\n\n                self.save_file_dictionary(&file_uri, dict)\n                    .await\n                    .map_err(|err| error!(\"{err}\"))\n                    .err();\n                self.update_document_from_file(&file_uri, None)\n                    .await\n                    .map_err(|err| error!(\"{err}\"))\n                    .err();\n                self.publish_diagnostics(&file_uri).await;\n            }\n            \"HarperOpen\" => match open::that(&first) {\n                Ok(()) => {\n                    let message = format!(r#\"Opened \"{first}\"\"#);\n\n                    self.client.log_message(MessageType::INFO, &message).await;\n\n                    info!(\"{}\", message);\n                }\n                Err(err) => {\n                    self.client\n                        .log_message(MessageType::ERROR, \"Unable to open URL\")\n                        .await;\n                    error!(\"Unable to open URL: {}\", err);\n                }\n            },\n            \"HarperIgnoreLint\" => {\n                let Ok(uri) = first.parse() else {\n                    error!(\"Unable to parse URL from command: {first}\");\n                    return Ok(None);\n                };\n\n                let Some(second) = params.arguments.into_iter().nth(1) else {\n                    error!(\"Not enough arguments to HarperIgnoreLint\");\n                    return Ok(None);\n                };\n\n                let Ok(lint) = serde_json::from_value(second) else {\n                    error!(\"Unable to parse lint.\");\n                    return Ok(None);\n                };\n\n                let mut doc_lock = self.doc_state.lock().await;\n                let Some(doc_state) = doc_lock.get_mut(&uri) else {\n                    error!(\"Requested document has not been loaded.\");\n                    return Ok(None);\n                };\n\n                doc_state.ignore_lint(&lint);\n                if let Err(_err) = self\n                    .save_ignored_lints(&uri, &doc_state.ignored_lints)\n                    .await\n                {\n                    error!(\"Unable to save ignored lints.\");\n                    return Ok(None);\n                }\n\n                drop(doc_lock);\n\n                self.publish_diagnostics(&uri).await;\n            }\n            _ => (),\n        }\n\n        Ok(None)\n    }\n\n    async fn did_change_configuration(&self, params: DidChangeConfigurationParams) {\n        self.update_config_from_obj(params.settings).await;\n\n        let uris: Vec<Uri> = {\n            let mut doc_lock = self.doc_state.lock().await;\n            let config_lock = self.config.read().await;\n\n            for doc in doc_lock.values_mut() {\n                info!(\"Constructing new LintGroup for updated configuration.\");\n                doc.linter = LintGroup::new_curated(doc.dict.clone(), config_lock.dialect)\n                    .with_lint_config(config_lock.lint_config.clone());\n            }\n\n            doc_lock.keys().cloned().collect()\n        };\n\n        for uri in uris {\n            self.update_document_from_file(&uri, None)\n                .await\n                .map_err(|err| error!(\"{err}\"))\n                .err();\n            self.publish_diagnostics(&uri).await;\n        }\n    }\n\n    async fn code_action(\n        &self,\n        params: CodeActionParams,\n    ) -> JsonResult<Option<CodeActionResponse>> {\n        let actions = self\n            .generate_code_actions(&params.text_document.uri, params.range)\n            .await?;\n\n        Ok(Some(actions))\n    }\n\n    async fn shutdown(&self) -> JsonResult<()> {\n        let doc_states = self.doc_state.lock().await;\n\n        // Clears the diagnostics for open buffers.\n        for uri in doc_states.keys() {\n            let result = PublishDiagnosticsParams {\n                uri: uri.clone(),\n                diagnostics: vec![],\n                version: None,\n            };\n\n            self.client\n                .send_notification::<PublishDiagnostics>(result)\n                .await;\n        }\n\n        if self.save_stats().await.is_err() {\n            error!(\"Unable to save stats.\")\n        }\n\n        Ok(())\n    }\n}\n"
  },
  {
    "path": "harper-ls/src/config.rs",
    "content": "use std::path::{Path, PathBuf};\n\nuse anyhow::{Result, bail};\nuse dirs::{config_dir, data_local_dir};\nuse globset::{Glob, GlobSet};\nuse harper_core::{Dialect, linting::LintGroupConfig, parsers::MarkdownOptions};\nuse resolve_path::PathResolveExt;\nuse serde::{Deserialize, Serialize};\nuse serde_json::Value;\n\n#[derive(Debug, Serialize, Deserialize, Clone, Copy)]\n#[serde(rename_all = \"camelCase\")]\npub enum DiagnosticSeverity {\n    Error,\n    Warning,\n    Information,\n    Hint,\n}\n\nimpl DiagnosticSeverity {\n    /// Converts `self` to the equivalent LSP type.\n    pub fn to_lsp(self) -> tower_lsp_server::lsp_types::DiagnosticSeverity {\n        match self {\n            DiagnosticSeverity::Error => tower_lsp_server::lsp_types::DiagnosticSeverity::ERROR,\n            DiagnosticSeverity::Warning => tower_lsp_server::lsp_types::DiagnosticSeverity::WARNING,\n            DiagnosticSeverity::Information => {\n                tower_lsp_server::lsp_types::DiagnosticSeverity::INFORMATION\n            }\n            DiagnosticSeverity::Hint => tower_lsp_server::lsp_types::DiagnosticSeverity::HINT,\n        }\n    }\n}\n\n/// Configuration for how code actions are displayed.\n/// Originally motivated by [#89](https://github.com/automattic/harper/issues/89).\n#[derive(Debug, Clone, Default)]\npub struct CodeActionConfig {\n    /// Instructs `harper-ls` to place unstable code actions last.\n    /// In this case, \"unstable\" refers to their existence and action.\n    ///\n    /// For example, we always want to allow users to add \"misspelled\" elements\n    /// to dictionary, regardless of the spelling suggestions.\n    pub force_stable: bool,\n}\n\nimpl CodeActionConfig {\n    pub fn from_lsp_config(value: Value) -> Result<Self> {\n        let mut base = CodeActionConfig::default();\n\n        let Value::Object(value) = value else {\n            bail!(\"The code action configuration must be an object.\");\n        };\n\n        if let Some(force_stable_val) = value.get(\"ForceStable\") {\n            let Value::Bool(force_stable) = force_stable_val else {\n                bail!(\"ForceStable must be a boolean value.\");\n            };\n            base.force_stable = *force_stable;\n        };\n\n        Ok(base)\n    }\n}\n\n#[derive(Debug, Clone)]\npub struct Config {\n    pub user_dict_path: PathBuf,\n    pub file_dict_path: PathBuf,\n    pub workspace_dict_path: PathBuf,\n    pub ignored_lints_path: PathBuf,\n    pub stats_path: PathBuf,\n    pub lint_config: LintGroupConfig,\n    pub diagnostic_severity: DiagnosticSeverity,\n    pub code_action_config: CodeActionConfig,\n    pub isolate_english: bool,\n    pub markdown_options: MarkdownOptions,\n    pub dialect: Dialect,\n    /// Maximum length (in bytes) a file can have before it's skipped.\n    /// Above this limit, the file will not be linted.\n    pub max_file_length: usize,\n    pub exclude_patterns: GlobSet,\n}\n\nimpl Config {\n    pub fn from_lsp_config(workspace_root: &Path, value: Value) -> Result<Self> {\n        let mut base = Config::default();\n\n        let workspace_root = workspace_root.canonicalize()?;\n        let workspace_root = workspace_root.as_path();\n\n        let Value::Object(value) = value else {\n            bail!(\"Settings must be an object.\");\n        };\n\n        let Some(Value::Object(value)) = value.get(\"harper-ls\") else {\n            bail!(\"Settings must contain a \\\"harper-ls\\\" key.\");\n        };\n\n        if let Some(v) = value.get(\"userDictPath\") {\n            if !v.is_string() {\n                bail!(\"userDict path must be a string.\");\n            }\n\n            let path = v.as_str().unwrap();\n            if !path.is_empty() {\n                base.user_dict_path = path.try_resolve_in(workspace_root)?.to_path_buf();\n            }\n        }\n\n        if let Some(v) = value.get(\"fileDictPath\") {\n            if !v.is_string() {\n                bail!(\"fileDict path must be a string.\");\n            }\n\n            let path = v.as_str().unwrap();\n            if !path.is_empty() {\n                base.file_dict_path = path.try_resolve_in(workspace_root)?.to_path_buf();\n            }\n        }\n\n        if let Some(v) = value.get(\"workspaceDictPath\") {\n            if !v.is_string() {\n                bail!(\"workspaceDict path must be a string.\");\n            }\n            let path = v.as_str().unwrap();\n            if !path.is_empty() {\n                base.workspace_dict_path = path.try_resolve_in(workspace_root)?.to_path_buf();\n            }\n        } else {\n            // Resolve the default path in the project root\n            base.workspace_dict_path = base\n                .workspace_dict_path\n                .try_resolve_in(workspace_root)?\n                .to_path_buf();\n        }\n\n        if let Some(v) = value.get(\"ignoredLintsPath\") {\n            if !v.is_string() {\n                bail!(\"ignoredLintsPath path must be a string.\");\n            }\n\n            let path = v.as_str().unwrap();\n            if !path.is_empty() {\n                base.ignored_lints_path = path.try_resolve_in(workspace_root)?.to_path_buf();\n            }\n        }\n\n        if let Some(v) = value.get(\"statsPath\") {\n            if let Value::String(path) = v {\n                base.file_dict_path = path.try_resolve_in(workspace_root)?.to_path_buf();\n            } else {\n                bail!(\"fileDict path must be a string.\");\n            }\n        }\n\n        if let Some(v) = value.get(\"linters\") {\n            base.lint_config = serde_json::from_value(v.clone())?;\n        }\n\n        if let Some(v) = value.get(\"diagnosticSeverity\") {\n            base.diagnostic_severity = serde_json::from_value(v.clone())?;\n        }\n\n        if let Some(v) = value.get(\"dialect\") {\n            base.dialect = serde_json::from_value(v.clone())?;\n        }\n\n        if let Some(v) = value.get(\"codeActions\") {\n            base.code_action_config = CodeActionConfig::from_lsp_config(v.clone())?;\n        }\n\n        if let Some(v) = value.get(\"isolateEnglish\") {\n            if let Value::Bool(v) = v {\n                base.isolate_english = *v;\n            } else {\n                bail!(\"isolateEnglish path must be a boolean.\");\n            }\n        }\n\n        if let Some(v) = value.get(\"maxFileLength\") {\n            base.max_file_length = serde_json::from_value(v.clone())?;\n        }\n\n        if let Some(v) = value.get(\"markdown\")\n            && let Some(v) = v.get(\"IgnoreLinkTitle\")\n        {\n            base.markdown_options.ignore_link_title = serde_json::from_value(v.clone())?;\n        }\n\n        if let Some(v) = value.get(\"excludePatterns\") {\n            let Some(a) = v.as_array() else {\n                bail!(\"excludePatterns must be an array.\");\n            };\n\n            let patterns: Vec<Value> = a.to_vec();\n            if !patterns.is_empty() {\n                let mut builder = GlobSet::builder();\n\n                for pattern in patterns {\n                    builder.add(Glob::new(pattern.as_str().unwrap())?);\n                }\n\n                base.exclude_patterns = builder.build()?;\n            }\n        }\n\n        Ok(base)\n    }\n}\n\nimpl Default for Config {\n    fn default() -> Self {\n        Self {\n            user_dict_path: config_dir().unwrap().join(\"harper-ls/dictionary.txt\"),\n            file_dict_path: data_local_dir()\n                .unwrap()\n                .join(\"harper-ls/file_dictionaries/\"),\n            workspace_dict_path: \".harper-dictionary.txt\".into(),\n            ignored_lints_path: data_local_dir().unwrap().join(\"harper-ls/ignored_lints/\"),\n            stats_path: data_local_dir().unwrap().join(\"harper-ls/stats.txt\"),\n            lint_config: LintGroupConfig::default(),\n            diagnostic_severity: DiagnosticSeverity::Hint,\n            code_action_config: CodeActionConfig::default(),\n            isolate_english: false,\n            markdown_options: MarkdownOptions::default(),\n            dialect: Dialect::American,\n            max_file_length: 120_000,\n            exclude_patterns: GlobSet::empty(),\n        }\n    }\n}\n"
  },
  {
    "path": "harper-ls/src/diagnostics.rs",
    "content": "use std::collections::HashMap;\n\nuse harper_core::linting::{Lint, Suggestion};\nuse harper_core::{CharStringExt, Document};\nuse harper_stats::RecordKind;\nuse serde_json::Value;\nuse tower_lsp_server::lsp_types::{\n    CodeAction, CodeActionKind, CodeActionOrCommand, Command, Diagnostic, NumberOrString, TextEdit,\n    Uri, WorkspaceEdit,\n};\n\nuse crate::config::{CodeActionConfig, DiagnosticSeverity};\nuse crate::pos_conv::span_to_range;\n\npub fn lints_to_diagnostics<'a>(\n    source: &[char],\n    lints: impl IntoIterator<Item = (&'a str, &'a [Lint])>,\n    severity: DiagnosticSeverity,\n) -> Vec<Diagnostic> {\n    lints\n        .into_iter()\n        .flat_map(|(origin_tag, lints)| {\n            lints\n                .iter()\n                .map(|lint| lint_to_diagnostic(lint, source, origin_tag, severity))\n        })\n        .collect()\n}\n\npub fn lint_to_code_actions<'a>(\n    lint: &'a Lint,\n    uri: &'a Uri,\n    document: &Document,\n    config: &CodeActionConfig,\n) -> Vec<CodeActionOrCommand> {\n    let mut results = Vec::new();\n    let source = document.get_source();\n\n    results.extend(\n        lint.suggestions\n            .iter()\n            .flat_map(|suggestion| {\n                let range = span_to_range(source, lint.span);\n\n                let replace_string = match suggestion {\n                    Suggestion::ReplaceWith(with) => with.iter().collect(),\n                    Suggestion::Remove => \"\".to_string(),\n                    Suggestion::InsertAfter(with) => format!(\n                        \"{}{}\",\n                        lint.span.get_content_string(source),\n                        with.to_string()\n                    ),\n                };\n\n                Some(CodeAction {\n                    title: suggestion.to_string(),\n                    kind: Some(CodeActionKind::QUICKFIX),\n                    diagnostics: None,\n                    edit: Some(WorkspaceEdit {\n                        changes: Some(HashMap::from([(\n                            uri.clone(),\n                            vec![TextEdit {\n                                range,\n                                new_text: replace_string,\n                            }],\n                        )])),\n                        document_changes: None,\n                        change_annotations: None,\n                    }),\n                    command: Some(Command {\n                        title: \"Record lint statistic\".to_owned(),\n                        command: \"HarperRecordLint\".to_owned(),\n                        arguments: Some(vec![Value::String(\n                            serde_json::to_string(&RecordKind::from_lint(lint, document)).unwrap(),\n                        )]),\n                    }),\n                    is_preferred: None,\n                    disabled: None,\n                    data: None,\n                })\n            })\n            .map(CodeActionOrCommand::CodeAction),\n    );\n\n    results.push(CodeActionOrCommand::Command(Command {\n        title: \"Ignore Harper error.\".to_owned(),\n        command: \"HarperIgnoreLint\".to_owned(),\n        arguments: Some(vec![\n            serde_json::Value::String(uri.to_string()),\n            serde_json::to_value(lint).unwrap(),\n        ]),\n    }));\n\n    if lint.lint_kind.is_spelling() {\n        let orig = lint.span.get_content_string(source);\n\n        results.push(CodeActionOrCommand::Command(Command::new(\n            format!(\"Add \\\"{orig}\\\" to the user dictionary.\"),\n            \"HarperAddToUserDict\".to_string(),\n            Some(vec![orig.clone().into(), uri.to_string().into()]),\n        )));\n\n        results.push(CodeActionOrCommand::Command(Command::new(\n            format!(\"Add \\\"{orig}\\\" to the workspace dictionary.\"),\n            \"HarperAddToWSDict\".to_string(),\n            Some(vec![orig.clone().into(), uri.to_string().into()]),\n        )));\n\n        results.push(CodeActionOrCommand::Command(Command::new(\n            format!(\"Add \\\"{orig}\\\" to the file dictionary.\"),\n            \"HarperAddToFileDict\".to_string(),\n            Some(vec![orig.into(), uri.to_string().into()]),\n        )));\n    }\n\n    if config.force_stable {\n        results.reverse();\n    }\n\n    results\n}\n\nfn lint_to_diagnostic(\n    lint: &Lint,\n    source: &[char],\n    origin_tag: &str,\n    severity: DiagnosticSeverity,\n) -> Diagnostic {\n    let range = span_to_range(source, lint.span);\n\n    Diagnostic {\n        range,\n        severity: Some(severity.to_lsp()),\n        code_description: None,\n        source: Some(\"Harper\".to_owned()),\n        code: Some(NumberOrString::String(origin_tag.to_string())),\n        message: lint.message.clone(),\n        related_information: None,\n        tags: None,\n        data: None,\n    }\n}\n"
  },
  {
    "path": "harper-ls/src/dictionary_io.rs",
    "content": "use harper_core::DialectFlags;\nuse itertools::Itertools;\nuse std::path::Path;\n\nuse harper_core::spell::{Dictionary, MutableDictionary};\nuse harper_core::{Dialect, DictWordMetadata};\nuse tokio::fs::{self, File};\nuse tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, BufReader, BufWriter, Result};\n\n/// Save the contents of a dictionary to a file.\n/// Ensures that the path to the destination exists.\npub async fn save_dict(path: impl AsRef<Path>, dict: impl Dictionary) -> Result<()> {\n    if let Some(parent) = path.as_ref().parent() {\n        fs::create_dir_all(parent).await?;\n    }\n\n    let file = File::create(path.as_ref()).await?;\n    let mut write = BufWriter::new(file);\n\n    write_word_list(dict, &mut write).await?;\n    write.flush().await?;\n\n    Ok(())\n}\n\n/// Write a dictionary somewhere.\nasync fn write_word_list(dict: impl Dictionary, mut w: impl AsyncWrite + Unpin) -> Result<()> {\n    let mut cur_str = String::new();\n\n    for word in dict.words_iter().sorted() {\n        cur_str.clear();\n        cur_str.extend(word);\n\n        w.write_all(cur_str.as_bytes()).await?;\n        w.write_all(b\"\\n\").await?;\n    }\n\n    Ok(())\n}\n\n/// Load a dictionary from a file on disk.\npub async fn load_dict(path: impl AsRef<Path>, dialect: Dialect) -> Result<MutableDictionary> {\n    let file = File::open(path.as_ref()).await?;\n    let read = BufReader::new(file);\n\n    dict_from_word_list(read, dialect).await\n}\n\n/// Load a dictionary from a list of words.\n/// It could definitely be optimized to use less memory.\n/// Right now it isn't an issue.\nasync fn dict_from_word_list(\n    mut r: impl AsyncRead + Unpin,\n    dialect: Dialect,\n) -> Result<MutableDictionary> {\n    let mut str = String::new();\n\n    r.read_to_string(&mut str).await?;\n\n    let mut dict = MutableDictionary::new();\n    dict.extend_words(str.lines().map(|l| {\n        (\n            l.chars().collect::<Vec<char>>(),\n            DictWordMetadata {\n                dialects: DialectFlags::from_dialect(dialect),\n                ..Default::default()\n            },\n        )\n    }));\n\n    Ok(dict)\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use harper_core::spell::MutableDictionary;\n    use std::io::Cursor;\n\n    const TEST_UNSORTED_WORDS: [&str; 10] = [\n        \"peafowl\",\n        \"housebroken\",\n        \"blackjack\",\n        \"Žižek\",\n        \"BMX\",\n        \"icebox\",\n        \"stetting\",\n        \"ツ\",\n        \"ASCII\",\n        \"link\",\n    ];\n    const TEST_SORTED_WORDS: [&str; 10] = [\n        \"ASCII\",\n        \"BMX\",\n        \"blackjack\",\n        \"housebroken\",\n        \"icebox\",\n        \"link\",\n        \"peafowl\",\n        \"stetting\",\n        \"Žižek\",\n        \"ツ\",\n    ];\n\n    /// Creates an unsorted `MutableDictionary` for testing.\n    fn get_test_unsorted_dict() -> MutableDictionary {\n        let mut test_unsorted_dict = MutableDictionary::new();\n        test_unsorted_dict.extend_words(\n            TEST_UNSORTED_WORDS\n                .map(|w| (w.chars().collect::<Vec<_>>(), DictWordMetadata::default())),\n        );\n        test_unsorted_dict\n    }\n\n    #[tokio::test]\n    async fn writes_sorted_word_list() {\n        let test_unsorted_dict = get_test_unsorted_dict();\n        let mut test_writer = Cursor::new(Vec::new());\n        write_word_list(test_unsorted_dict, &mut test_writer)\n            .await\n            .expect(\"writing to Vec<u8> should not fail. (Unless OOM?)\");\n        assert_eq!(\n            // Append trailing newline to match write_word_list output format.\n            TEST_SORTED_WORDS.join(\"\\n\") + \"\\n\",\n            String::from_utf8_lossy(&test_writer.into_inner())\n        );\n    }\n}\n"
  },
  {
    "path": "harper-ls/src/document_state.rs",
    "content": "use crate::config::{CodeActionConfig, DiagnosticSeverity};\nuse crate::diagnostics::{lint_to_code_actions, lints_to_diagnostics};\nuse crate::pos_conv::range_to_span;\nuse harper_core::linting::{Lint, LintGroup, Linter};\nuse harper_core::spell::{MergedDictionary, MutableDictionary};\nuse harper_core::{Document, IgnoredLints, TokenKind, remove_overlaps_map};\nuse harper_core::{Lrc, Token};\nuse tower_lsp_server::lsp_types::{CodeActionOrCommand, Command, Diagnostic, Range, Uri};\n\npub struct DocumentState {\n    pub document: Document,\n    pub ident_dict: Lrc<MutableDictionary>,\n    pub dict: Lrc<MergedDictionary>,\n    pub linter: LintGroup,\n    pub language_id: Option<String>,\n    pub ignored_lints: IgnoredLints,\n    pub uri: Uri,\n}\n\nimpl DocumentState {\n    pub fn ignore_lint(&mut self, lint: &Lint) {\n        self.ignored_lints.ignore_lint(lint, &self.document);\n    }\n\n    pub fn generate_diagnostics(&mut self, severity: DiagnosticSeverity) -> Vec<Diagnostic> {\n        let temp = self.linter.config.clone();\n        self.linter.config.fill_with_curated();\n\n        let mut lints = self.linter.organized_lints(&self.document);\n\n        self.linter.config = temp;\n\n        for value in lints.values_mut() {\n            self.ignored_lints.remove_ignored(value, &self.document);\n        }\n\n        remove_overlaps_map(&mut lints);\n\n        lints_to_diagnostics(\n            self.document.get_full_content(),\n            lints\n                .iter()\n                .map(|(origin_tag, lints)| (origin_tag.as_str(), lints.as_slice())),\n            severity,\n        )\n    }\n\n    /// Generate code actions results for a selected area.\n    pub fn generate_code_actions(\n        &mut self,\n        range: Range,\n        code_action_config: &CodeActionConfig,\n    ) -> Vec<CodeActionOrCommand> {\n        let temp = self.linter.config.clone();\n        self.linter.config.fill_with_curated();\n\n        let mut lints = self.linter.lint(&self.document);\n\n        self.linter.config = temp;\n\n        self.ignored_lints\n            .remove_ignored(&mut lints, &self.document);\n\n        lints.sort_by_key(|l| l.priority);\n\n        let source_chars = self.document.get_full_content();\n\n        // Find lints whole span overlaps with range\n        let span = range_to_span(source_chars, range).with_len(1);\n\n        let mut actions: Vec<CodeActionOrCommand> = lints\n            .into_iter()\n            .filter(|lint| lint.span.overlaps_with(span))\n            .flat_map(|lint| {\n                lint_to_code_actions(&lint, &self.uri, &self.document, code_action_config)\n            })\n            .collect();\n\n        if let Some(Token {\n            kind: TokenKind::Url,\n            span,\n            ..\n        }) = self.document.get_token_at_char_index(span.start)\n        {\n            actions.push(CodeActionOrCommand::Command(Command::new(\n                \"Open URL\".to_string(),\n                \"HarperOpen\".to_string(),\n                Some(vec![self.document.get_span_content_str(span).into()]),\n            )))\n        }\n\n        actions\n    }\n}\n\nimpl Default for DocumentState {\n    fn default() -> Self {\n        Self {\n            document: Default::default(),\n            ident_dict: Default::default(),\n            dict: Default::default(),\n            linter: Default::default(),\n            language_id: Default::default(),\n            ignored_lints: Default::default(),\n            uri: \"https://example.net\".parse().unwrap(),\n        }\n    }\n}\n"
  },
  {
    "path": "harper-ls/src/git_commit_parser.rs",
    "content": "use harper_core::Lrc;\nuse harper_core::parsers::{Markdown, MarkdownOptions, Parser};\n\n/// A Harper parser for Git commit files\n#[derive(Clone)]\npub struct GitCommitParser {\n    inner: Lrc<dyn Parser>,\n}\n\nimpl GitCommitParser {\n    pub fn new(parser: Lrc<dyn Parser>) -> Self {\n        Self { inner: parser }\n    }\n\n    pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {\n        Self::new(Lrc::new(Markdown::new(markdown_options)))\n    }\n}\n\nimpl Parser for GitCommitParser {\n    /// Admittedly a somewhat naive implementation.\n    /// We're going to get _something_ to work, before we polish it off.\n    fn parse(&self, source: &[char]) -> Vec<harper_core::Token> {\n        // Locate the first `#`\n        let end = source\n            .iter()\n            .position(|c| *c == '#')\n            .unwrap_or(source.len());\n\n        self.inner.parse(&source[0..end])\n    }\n}\n"
  },
  {
    "path": "harper-ls/src/ignored_lints_io.rs",
    "content": "use std::path::Path;\n\nuse anyhow::Result;\nuse harper_core::IgnoredLints;\nuse tokio::{\n    fs::{self, File},\n    io::{AsyncReadExt, AsyncWriteExt, BufReader, BufWriter},\n};\n\n/// Save the contents of a dictionary to a file.\n/// Ensures that the path to the destination exists.\npub async fn save_ignored_lints(\n    path: impl AsRef<Path>,\n    ignored_lints: &IgnoredLints,\n) -> Result<()> {\n    if let Some(parent) = path.as_ref().parent() {\n        fs::create_dir_all(parent).await?;\n    }\n\n    let file = File::create(path.as_ref()).await?;\n    let mut write = BufWriter::new(file);\n\n    let json = serde_json::to_string_pretty(ignored_lints)?;\n    write.write_all(json.as_bytes()).await?;\n\n    write.flush().await?;\n\n    Ok(())\n}\n\n/// Load ignored lints from a file on disk.\npub async fn load_ignored_lints(path: impl AsRef<Path>) -> Result<IgnoredLints> {\n    let file = File::open(path.as_ref()).await?;\n    let mut read = BufReader::new(file);\n\n    let mut buf = String::new();\n    read.read_to_string(&mut buf).await?;\n\n    Ok(serde_json::from_str(&buf)?)\n}\n"
  },
  {
    "path": "harper-ls/src/io_utils.rs",
    "content": "use anyhow::anyhow;\nuse std::path::{Component, PathBuf};\n\nuse tower_lsp_server::{UriExt, lsp_types::Uri};\n\n/// Rewrites a path to a filename using the same conventions as\n/// [Neovim's undo-files](https://neovim.io/doc/user/options.html#'undodir').\npub fn fileify_path(uri: &Uri) -> anyhow::Result<PathBuf> {\n    let mut rewritten = String::new();\n\n    // We assume all URLs are local files and have a base.\n    for seg in uri\n        .to_file_path()\n        .ok_or_else(|| anyhow!(\"Unable to convert URI to file path.\"))?\n        .components()\n    {\n        if !matches!(seg, Component::RootDir) {\n            rewritten.push_str(&seg.as_os_str().to_string_lossy());\n            rewritten.push('%');\n        }\n    }\n\n    Ok(rewritten.into())\n}\n"
  },
  {
    "path": "harper-ls/src/main.rs",
    "content": "#![doc = include_str!(\"../README.md\")]\n\nuse std::io::stderr;\n\nuse config::Config;\nuse tokio::net::TcpListener;\nmod backend;\nmod config;\nmod diagnostics;\nmod dictionary_io;\nmod document_state;\nmod git_commit_parser;\nmod ignored_lints_io;\nmod io_utils;\nmod pos_conv;\n\nuse backend::Backend;\nuse clap::Parser;\nuse tower_lsp_server::{LspService, Server};\nuse tracing::Level;\nuse tracing_subscriber::FmtSubscriber;\n\nstatic DEFAULT_ADDRESS: &str = \"127.0.0.1:4000\";\n\n/// Start a language server to provide grammar checking inside of developer\n/// environments.\n///\n/// Will listen on 127.0.0.1:4000 by default.\n#[derive(Debug, Parser)]\n#[command(version, about)]\nstruct Args {\n    /// Set to listen on standard input / output rather than TCP.\n    #[arg(short, long, default_value_t = false)]\n    stdio: bool,\n}\n\n// Setting worker threads to four means the process will use about five threads total\n// This is because worker threads do not include blocking threads\n#[tokio::main(worker_threads = 1)]\nasync fn main() -> anyhow::Result<()> {\n    let subscriber = FmtSubscriber::builder()\n        .map_writer(move |_| stderr)\n        .with_ansi(false)\n        .with_max_level(Level::WARN)\n        .finish();\n\n    tracing::subscriber::set_global_default(subscriber)?;\n\n    let args = Args::parse();\n    let config = Config::default();\n\n    let (service, socket) = LspService::new(|client| Backend::new(client, config));\n\n    if args.stdio {\n        let stdin = tokio::io::stdin();\n        let stdout = tokio::io::stdout();\n        Server::new(stdin, stdout, socket).serve(service).await;\n    } else {\n        let listener = TcpListener::bind(DEFAULT_ADDRESS).await.unwrap();\n        println!(\"Listening on {DEFAULT_ADDRESS}\");\n        let (stream, _) = listener.accept().await.unwrap();\n        let (read, write) = tokio::io::split(stream);\n        Server::new(read, write, socket).serve(service).await;\n    }\n\n    Ok(())\n}\n"
  },
  {
    "path": "harper-ls/src/pos_conv.rs",
    "content": "//! This module includes various conversions from the index-based [`Span`]s that\n//! Harper uses, and the Ranges that the LSP uses.\n\nuse harper_core::Span;\nuse tower_lsp_server::lsp_types::{Position, Range};\n\npub fn span_to_range(source: &[char], span: Span<char>) -> Range {\n    let start = index_to_position(source, span.start);\n    let end = index_to_position(source, span.end);\n\n    Range { start, end }\n}\n\nfn index_to_position(source: &[char], index: usize) -> Position {\n    let before = &source[0..index];\n    let newline_indices: Vec<_> = before\n        .iter()\n        .enumerate()\n        .filter_map(|(idx, c)| if *c == '\\n' { Some(idx + 1) } else { None })\n        .collect();\n\n    let lines = newline_indices.len();\n\n    let last_newline_idx = newline_indices.last().copied().unwrap_or(0);\n\n    let cols: usize = source[last_newline_idx..index]\n        .iter()\n        .map(|c| c.len_utf16())\n        .sum();\n\n    Position {\n        line: lines as u32,\n        character: cols as u32,\n    }\n}\n\n/// Converts a position to a (zero-based) character index within the source character array.\n///\n/// The position is converted to an index using saturating arithmetic. If the requested line index\n/// is too high, the index of the last character in the source is returned. If the line is\n/// in-bounds but the requested character isn't, the last character of that line is returned.\nfn position_to_index(source: &[char], position: Position) -> usize {\n    // Find target line.\n    let Some(target_line) = source\n        // Split including the newline character so we don't lose any characters.\n        .split_inclusive(|char| *char == '\\n')\n        .nth(position.line as usize)\n    else {\n        // Requested line index is too high.\n        // Return the last char in `source' as the closest approximation.\n        // Uses `saturating_sub` to avoid underflow when `source` is empty.\n        return source.len().saturating_sub(1);\n    };\n\n    // Get a pointer to the char we seek.\n    // Check if specified character index is within bounds of the target line.\n    let target_char_pointer = if position.character\n        < target_line\n            .len()\n            .try_into()\n            .expect(\"target_line.len() can fit in u32\")\n    {\n        // Character index is inside the bounds of the specified line.\n        // Calculate pointer to the char we're looking for.\n        target_line\n            .as_ptr()\n            .wrapping_add(position.character as usize)\n    } else {\n        // Character index is outside the bounds of the specified line.\n        // Get pointer to the last character of the line.\n        target_line.last().expect(\"line cannot be empty\")\n    };\n\n    // Convert the char pointer to its index within `source`.\n    // Note: this could be simplified with `offset_from`, but that would require `unsafe`.\n    (target_char_pointer as usize - source.as_ptr() as usize) / size_of::<char>()\n}\n\npub fn range_to_span(source: &[char], range: Range) -> Span<char> {\n    let start = position_to_index(source, range.start);\n    let end = position_to_index(source, range.end);\n\n    Span::new(start, end)\n}\n\n#[cfg(test)]\nmod tests {\n    use tower_lsp_server::lsp_types::{Position, Range};\n\n    use super::{index_to_position, position_to_index, range_to_span};\n\n    #[test]\n    fn first_line_correct() {\n        let source: Vec<_> = \"Hello there.\".chars().collect();\n\n        let start = Position {\n            line: 0,\n            character: 4,\n        };\n\n        let i = position_to_index(&source, start);\n\n        assert_eq!(i, 4);\n\n        let p = index_to_position(&source, i);\n\n        assert_eq!(p, start)\n    }\n\n    #[test]\n    fn reversible_position_conv() {\n        let source: Vec<_> = \"There was a man,\\n his voice had timbre,\\n unlike a boy.\"\n            .chars()\n            .collect();\n\n        let a = Position {\n            line: 1,\n            character: 2,\n        };\n\n        let b = position_to_index(&source, a);\n\n        assert_eq!(b, 19);\n\n        let c = index_to_position(&source, b);\n\n        let d = position_to_index(&source, a);\n\n        assert_eq!(a, c);\n        assert_eq!(b, d);\n    }\n\n    #[test]\n    fn end_of_line() {\n        let source: Vec<_> = \"This is a short test\\n\".chars().collect();\n\n        let a = Position {\n            line: 0,\n            character: 20,\n        };\n\n        assert_eq!(position_to_index(&source, a), 20);\n    }\n\n    #[test]\n    fn end_of_file() {\n        let source: Vec<_> = \"This is a short test\".chars().collect();\n\n        let a = Position {\n            line: 0,\n            character: 19,\n        };\n\n        assert_eq!(position_to_index(&source, a), 19);\n    }\n\n    #[test]\n    fn issue_250() {\n        let source: Vec<_> = \"Hello thur\\n\".chars().collect();\n\n        let range = Range {\n            start: Position {\n                line: 0,\n                character: 9,\n            },\n            end: Position {\n                line: 0,\n                character: 10,\n            },\n        };\n\n        let out = range_to_span(&source, range);\n        assert_eq!(out.start, 9);\n        assert_eq!(out.end, 10);\n    }\n\n    /// Ensures that `position_to_index` does not produce an incorrect index of 0 for an input\n    /// `Position` of `{ line: 1, character: 0 }`.\n    /// Related to: https://github.com/Automattic/harper/issues/1253\n    #[test]\n    fn pos_to_index_correct_for_l1_c0() {\n        let source: Vec<_> = \". one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twenty-one twenty-two twenty-three twenty-four twenty-five twenty-six twenty-seven twenty-eight twenty-nine thirty thirty-one\\n\".chars().collect();\n        let position = Position {\n            line: 1,\n            character: 0,\n        };\n\n        let out_index = position_to_index(&source, position);\n        assert_ne!(out_index, 0);\n    }\n\n    /// Ensures `position_to_index` produces the correct result when indexing line 0 character 0.\n    #[test]\n    fn pos_to_index_off_by_one_check_l0_c0() {\n        let source: Vec<_> = \"abc\\ndef\\nghi\\njkl\".chars().collect();\n        let position = Position {\n            line: 0,\n            character: 0,\n        };\n\n        let out_index = position_to_index(&source, position);\n        assert_eq!(source[out_index], 'a');\n    }\n\n    /// Ensures `position_to_index` produces the correct result when indexing a non-zero line and\n    /// character.\n    #[test]\n    fn pos_to_index_off_by_one_check_l2_c1() {\n        let source: Vec<_> = \"abc\\ndef\\nghi\\njkl\".chars().collect();\n        let position = Position {\n            line: 2,\n            character: 1,\n        };\n\n        let out_index = position_to_index(&source, position);\n        assert_eq!(source[out_index], 'h');\n    }\n\n    /// Ensures `position_to_index` produces an index of 0 when indexing line 0 character 0 of\n    /// a source that contains only a newline (`\\n`).\n    #[test]\n    fn pos_to_index_newline_only_l0_c0() {\n        let source: Vec<_> = \"\\n\".chars().collect();\n        let position = Position {\n            line: 0,\n            character: 0,\n        };\n\n        let out_index = position_to_index(&source, position);\n        assert_eq!(out_index, 0);\n    }\n\n    /// Ensures `position_to_index` produces the last character index when indexing an out of\n    /// bounds line in a source that contains only newlines (`\\n`).\n    #[test]\n    fn pos_to_index_newlines_only_l7_c0() {\n        let source: Vec<_> = \"\\n\\n\\n\".chars().collect();\n        let position = Position {\n            line: 7,\n            character: 0,\n        };\n\n        let out_index = position_to_index(&source, position);\n        assert_eq!(out_index, 2);\n    }\n\n    /// Ensures `position_to_index` gives the last character of the line when indexing an out of\n    /// bounds character.\n    #[test]\n    fn pos_to_index_out_of_bounds_char() {\n        let source: Vec<_> = \"abc\\ndef\\nghi\\njkl\".chars().collect();\n        let position = Position {\n            line: 3, // \"jkl\"\n            character: 8,\n        };\n\n        let out_index = position_to_index(&source, position);\n        assert_eq!(source[out_index], 'l');\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/Cargo.toml",
    "content": "[package]\nname = \"harper-pos-utils\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nrs-conllu = \"0.3.0\"\nhashbrown = { version = \"0.16.1\", features = [\"serde\"] }\nstrum = \"0.28.0\"\nstrum_macros = \"0.28.0\"\nserde = { version = \"1.0.228\", features = [\"derive\"] }\nis-macro = \"0.3.7\"\nrand = { version = \"0.10.0\", optional = true }\nburn = { version = \"0.19.1\", default-features = false, features = [\"std\"] }\nburn-ndarray = { version = \"0.19.0\", default-features = false }\nserde_json = \"1.0.149\"\nlru = \"0.16.3\"\nrayon = { version = \"1.11.0\", optional = true }\n\n[features]\ndefault = []\ntraining = [\"dep:rand\", \"burn/train\", \"burn/autodiff\"]\nthreaded = [\"dep:rayon\"]\n"
  },
  {
    "path": "harper-pos-utils/src/chunker/brill_chunker/mod.rs",
    "content": "mod patch;\n\n#[cfg(feature = \"training\")]\nuse std::path::Path;\n\n#[cfg(feature = \"training\")]\nuse crate::word_counter::WordCounter;\nuse crate::{\n    UPOS,\n    chunker::{Chunker, upos_freq_dict::UPOSFreqDict},\n};\n\nuse patch::Patch;\nuse serde::{Deserialize, Serialize};\n\n/// A [`Chunker`] implementation based on the work by Eric Brill.\n///\n/// Additional reading:\n///\n/// - [Continuations on Transformation-based Learning](https://elijahpotter.dev/articles/more-transformation-based-learning)\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct BrillChunker {\n    base: UPOSFreqDict,\n    patches: Vec<Patch>,\n}\n\nimpl BrillChunker {\n    pub fn new(base: UPOSFreqDict) -> Self {\n        Self {\n            base,\n            patches: Vec::new(),\n        }\n    }\n\n    fn apply_patches(&self, sentence: &[String], tags: &[Option<UPOS>], np_states: &mut [bool]) {\n        for patch in &self.patches {\n            for i in 0..sentence.len() {\n                if patch.from == np_states[i]\n                    && patch.criteria.fulfils(sentence, tags, np_states, i)\n                {\n                    np_states[i] = !np_states[i];\n                }\n            }\n        }\n    }\n}\n\nimpl Chunker for BrillChunker {\n    fn chunk_sentence(&self, sentence: &[String], tags: &[Option<UPOS>]) -> Vec<bool> {\n        let mut initial_pass = self.base.chunk_sentence(sentence, tags);\n\n        self.apply_patches(sentence, tags, &mut initial_pass);\n\n        initial_pass\n    }\n}\n\n#[cfg(feature = \"training\")]\ntype CandidateArgs = (Vec<String>, Vec<Option<UPOS>>, Vec<bool>);\n\n#[cfg(feature = \"training\")]\nimpl BrillChunker {\n    /// Tag a provided sentence with the tagger, providing the \"correct\" tags (from a dataset or\n    /// other source), returning the number of errors.\n    pub fn count_patch_errors(\n        &self,\n        sentence: &[String],\n        tags: &[Option<UPOS>],\n        base_flags: &[bool],\n        correct_np_flags: &[bool],\n    ) -> usize {\n        let mut flags = base_flags.to_vec();\n        self.apply_patches(sentence, tags, &mut flags);\n\n        let mut loss = 0;\n        for (a, b) in flags.into_iter().zip(correct_np_flags) {\n            if a != *b {\n                loss += 1;\n            }\n        }\n\n        loss\n    }\n\n    /// Tag a provided sentence with the tagger, providing the \"correct\" tags (from a dataset or\n    /// other source), returning the number of errors.\n    pub fn count_chunk_errors(\n        &self,\n        sentence: &[String],\n        tags: &[Option<UPOS>],\n        correct_np_flags: &[bool],\n        relevant_words: &mut WordCounter,\n    ) -> usize {\n        let flags = self.chunk_sentence(sentence, tags);\n\n        let mut loss = 0;\n        for ((a, b), word) in flags.into_iter().zip(correct_np_flags).zip(sentence) {\n            if a != *b {\n                loss += 1;\n                relevant_words.inc(word);\n            }\n        }\n\n        loss\n    }\n\n    /// To speed up training, only try a subset of all possible candidates.\n    /// How many to select is given by the `candidate_selection_chance`. A higher chance means a\n    /// longer training time.\n    fn epoch(&mut self, training_files: &[impl AsRef<Path>], candidate_selection_chance: f32) {\n        use crate::conllu_utils::iter_sentences_in_conllu;\n        use rs_conllu::Sentence;\n        use std::time::Instant;\n\n        assert!((0.0..=1.0).contains(&candidate_selection_chance));\n\n        let mut total_tokens = 0;\n        let mut error_counter = 0;\n\n        let sentences: Vec<Sentence> = training_files\n            .iter()\n            .flat_map(iter_sentences_in_conllu)\n            .collect();\n        let mut sentences_flagged: Vec<CandidateArgs> = Vec::new();\n\n        for sent in &sentences {\n            use hashbrown::HashSet;\n\n            use crate::chunker::np_extraction::locate_noun_phrases_in_sent;\n\n            let mut toks: Vec<String> = Vec::new();\n            let mut tags = Vec::new();\n\n            for token in &sent.tokens {\n                let form = token.form.clone();\n                if let Some(last) = toks.last_mut() {\n                    match form.as_str() {\n                        \"sn't\" | \"n't\" | \"'ll\" | \"'ve\" | \"'re\" | \"'d\" | \"'m\" | \"'s\" => {\n                            last.push_str(&form);\n                            continue;\n                        }\n                        _ => {}\n                    }\n                }\n                toks.push(form);\n                tags.push(token.upos.and_then(UPOS::from_conllu));\n            }\n\n            let actual = locate_noun_phrases_in_sent(sent);\n            let actual_flat = actual.into_iter().fold(HashSet::new(), |mut a, b| {\n                a.extend(b.into_iter());\n                a\n            });\n\n            let mut actual_seq = Vec::new();\n\n            for el in actual_flat {\n                if el >= actual_seq.len() {\n                    actual_seq.resize(el + 1, false);\n                }\n                actual_seq[el] = true;\n            }\n\n            sentences_flagged.push((toks, tags, actual_seq));\n        }\n\n        let mut relevant_words = WordCounter::default();\n\n        for (tok_buf, tag_buf, flag_buf) in &sentences_flagged {\n            total_tokens += tok_buf.len();\n            error_counter += self.count_chunk_errors(\n                tok_buf.as_slice(),\n                tag_buf,\n                flag_buf.as_slice(),\n                &mut relevant_words,\n            );\n        }\n\n        println!(\"=============\");\n        println!(\"Total tokens in training set: {total_tokens}\");\n        println!(\"Tokens incorrectly flagged: {error_counter}\");\n        println!(\n            \"Error rate: {}%\",\n            error_counter as f32 / total_tokens as f32 * 100.\n        );\n\n        // Before adding any patches, let's get a good base.\n        let mut base_flags = Vec::new();\n        for (toks, tags, _) in &sentences_flagged {\n            base_flags.push(self.chunk_sentence(toks, tags));\n        }\n\n        let all_candidates = Patch::generate_candidate_patches(&relevant_words);\n        let mut pruned_candidates: Vec<Patch> = rand::seq::IndexedRandom::sample(\n            all_candidates.as_slice(),\n            &mut rand::rng(),\n            (all_candidates.len() as f32 * candidate_selection_chance) as usize,\n        )\n        .cloned()\n        .collect();\n\n        let start = Instant::now();\n\n        #[cfg(feature = \"threaded\")]\n        rayon::slice::ParallelSliceMut::par_sort_by_cached_key(\n            pruned_candidates.as_mut_slice(),\n            |candidate: &Patch| {\n                self.score_candidate(candidate.clone(), &sentences_flagged, &base_flags)\n            },\n        );\n\n        #[cfg(not(feature = \"threaded\"))]\n        pruned_candidates.sort_by_cached_key(|candidate| {\n            self.score_candidate(candidate.clone(), &sentences_flagged, &base_flags)\n        });\n\n        let duration = start.elapsed();\n        let seconds = duration.as_secs();\n        let millis = duration.subsec_millis();\n\n        println!(\n            \"It took {} seconds and {} milliseconds to search through {} candidates at {} c/sec.\",\n            seconds,\n            millis,\n            pruned_candidates.len(),\n            pruned_candidates.len() as f32 / seconds as f32\n        );\n\n        if let Some(best) = pruned_candidates.first() {\n            self.patches.push(best.clone());\n        }\n    }\n\n    /// Lower is better\n    fn score_candidate(\n        &self,\n        candidate: Patch,\n        sentences_flagged: &[CandidateArgs],\n        base_flags: &[Vec<bool>],\n    ) -> usize {\n        let mut tagger = BrillChunker::new(UPOSFreqDict::default());\n        tagger.patches.push(candidate);\n\n        let mut errors = 0;\n\n        for ((toks, tags, flags), base) in sentences_flagged.iter().zip(base_flags.iter()) {\n            errors += tagger.count_patch_errors(toks.as_slice(), tags.as_slice(), base, flags);\n        }\n\n        errors\n    }\n\n    /// Train a brand-new tagger on a `.conllu` dataset, provided via a path.\n    /// This does not do _any_ error handling, and should not run in production.\n    /// It should be used for training a model that _will_ be used in production.\n    pub fn train(\n        training_files: &[impl AsRef<Path>],\n        epochs: usize,\n        candidate_selection_chance: f32,\n    ) -> Self {\n        let mut freq_dict = UPOSFreqDict::default();\n\n        for file in training_files {\n            freq_dict.inc_from_conllu_file(file);\n        }\n\n        let mut chunker = Self::new(freq_dict);\n\n        for _ in 0..epochs {\n            chunker.epoch(training_files, candidate_selection_chance);\n        }\n\n        chunker\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/chunker/brill_chunker/patch.rs",
    "content": "use serde::{Deserialize, Serialize};\n\nuse crate::patch_criteria::PatchCriteria;\n#[cfg(feature = \"training\")]\nuse crate::word_counter::WordCounter;\n\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct Patch {\n    pub from: bool,\n    pub criteria: PatchCriteria,\n}\n\n#[cfg(feature = \"training\")]\nimpl Patch {\n    pub fn generate_candidate_patches(relevant_words: &WordCounter) -> Vec<Self> {\n        use crate::UPOS;\n        use strum::IntoEnumIterator;\n\n        const TOP_N_WORDS: usize = 50;\n        const REL_POS: [isize; 7] = [-3, -2, -1, 0, 1, 2, 3];\n\n        let mut atoms: Vec<(bool, PatchCriteria)> = Vec::new();\n\n        for from in [false, true] {\n            for rel in REL_POS {\n                for tag in UPOS::iter() {\n                    atoms.push((\n                        from,\n                        PatchCriteria::WordIsTaggedWith {\n                            relative: rel,\n                            is_tagged: tag,\n                        },\n                    ));\n                }\n            }\n            for max_rel in 1..=5 {\n                for tag in UPOS::iter() {\n                    atoms.push((\n                        from,\n                        PatchCriteria::AnyWordIsTaggedWith {\n                            max_relative: max_rel,\n                            is_tagged: tag,\n                        },\n                    ));\n                }\n            }\n            for prev in UPOS::iter() {\n                for post in UPOS::iter() {\n                    atoms.push((\n                        from,\n                        PatchCriteria::SandwichTaggedWith {\n                            prev_word_tagged: prev,\n                            post_word_tagged: post,\n                        },\n                    ));\n                }\n            }\n            for rel in REL_POS {\n                for is_np in [false, true] {\n                    atoms.push((\n                        from,\n                        PatchCriteria::NounPhraseAt {\n                            is_np,\n                            relative: rel,\n                        },\n                    ));\n                }\n            }\n        }\n\n        let tag_atom_count = atoms.len();\n\n        let mut word_atoms: Vec<(bool, PatchCriteria)> = Vec::new();\n        for from in [false, true] {\n            for rel in REL_POS {\n                for w in relevant_words.iter_top_n_words(TOP_N_WORDS) {\n                    word_atoms.push((\n                        from,\n                        PatchCriteria::WordIs {\n                            relative: rel,\n                            word: w.clone(),\n                        },\n                    ));\n                }\n            }\n        }\n\n        atoms.extend(word_atoms);\n\n        let total_atoms = atoms.len();\n        let word_start = tag_atom_count;\n        let word_atoms_ct = total_atoms - word_start;\n        let combos_ct = word_atoms_ct * total_atoms - word_atoms_ct;\n        let mut patches = Vec::with_capacity(total_atoms + combos_ct);\n\n        for (from, crit) in &atoms {\n            patches.push(Self {\n                from: *from,\n                criteria: crit.clone(),\n            });\n        }\n\n        for i in word_start..total_atoms {\n            let (from_i, ref crit_i) = atoms[i];\n            for (j, (_from_j, crit_j)) in atoms.iter().enumerate() {\n                if i == j {\n                    continue;\n                }\n                patches.push(Self {\n                    from: from_i,\n                    criteria: PatchCriteria::Combined {\n                        a: Box::new(crit_i.clone()),\n                        b: Box::new(crit_j.clone()),\n                    },\n                });\n            }\n        }\n\n        patches\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/chunker/burn_chunker.rs",
    "content": "use crate::{UPOS, chunker::Chunker};\n#[cfg(feature = \"training\")]\nuse burn::backend::Autodiff;\n\n#[cfg(feature = \"training\")]\nuse burn::nn::loss::{MseLoss, Reduction};\nuse burn::nn::{Dropout, DropoutConfig};\n#[cfg(feature = \"training\")]\nuse burn::optim::{GradientsParams, Optimizer};\nuse burn::record::{FullPrecisionSettings, NamedMpkBytesRecorder, NamedMpkFileRecorder, Recorder};\nuse burn::tensor::TensorData;\n#[cfg(feature = \"training\")]\nuse burn::tensor::backend::AutodiffBackend;\n\nuse burn::{\n    module::Module,\n    nn::{BiLstmConfig, EmbeddingConfig, LinearConfig},\n    tensor::{Int, Tensor, backend::Backend},\n};\nuse burn_ndarray::{NdArray, NdArrayDevice};\nuse hashbrown::HashMap;\nuse std::path::Path;\n\nconst UNK_IDX: usize = 1;\n\n#[derive(Module, Debug)]\nstruct NpModel<B: Backend> {\n    embedding_words: burn::nn::Embedding<B>,\n    embedding_upos: burn::nn::Embedding<B>,\n    lstm: burn::nn::BiLstm<B>,\n    linear_out: burn::nn::Linear<B>,\n    dropout: Dropout,\n}\n\nimpl<B: Backend> NpModel<B> {\n    fn new(vocab: usize, word_embed_dim: usize, dropout: f32, device: &B::Device) -> Self {\n        let upos_embed = 8;\n        let total_embed = word_embed_dim + upos_embed;\n\n        Self {\n            embedding_words: EmbeddingConfig::new(vocab, word_embed_dim).init(device),\n            embedding_upos: EmbeddingConfig::new(20, upos_embed).init(device),\n            lstm: BiLstmConfig::new(total_embed, total_embed, false).init(device),\n            // Multiply by two because the BiLSTM emits double the hidden parameters\n            linear_out: LinearConfig::new(total_embed * 2, 1).init(device),\n            dropout: DropoutConfig::new(dropout as f64).init(),\n        }\n    }\n\n    fn forward(\n        &self,\n        word_tens: Tensor<B, 2, Int>,\n        tag_tens: Tensor<B, 2, Int>,\n        use_dropout: bool,\n    ) -> Tensor<B, 2> {\n        let word_embed = self.embedding_words.forward(word_tens);\n        let tag_embed = self.embedding_upos.forward(tag_tens);\n\n        let mut x = Tensor::cat(vec![word_embed, tag_embed], 2);\n\n        if use_dropout {\n            x = self.dropout.forward(x);\n        }\n\n        let (mut x, _) = self.lstm.forward(x, None);\n\n        if use_dropout {\n            x = self.dropout.forward(x);\n        }\n\n        let x = self.linear_out.forward(x);\n        x.squeeze_dim::<2>(2)\n    }\n}\n\n/// A [`Chunker`] that uses a BiLSTM and the Burn machine learning framework.\n///\n/// Additional details in this [talk](https://elijahpotter.dev/articles/i-spoke-at-wordcamp-u.s.-in-2025)\npub struct BurnChunker<B: Backend> {\n    vocab: HashMap<String, usize>,\n    model: NpModel<B>,\n    device: B::Device,\n}\n\nimpl<B: Backend> BurnChunker<B> {\n    fn idx(&self, tok: &str) -> usize {\n        *self.vocab.get(tok).unwrap_or(&UNK_IDX)\n    }\n\n    fn to_tensors(\n        &self,\n        sent: &[String],\n        tags: &[Option<UPOS>],\n    ) -> (Tensor<B, 2, Int>, Tensor<B, 2, Int>) {\n        // Interleave with UPOS tags\n        let idxs: Vec<_> = sent.iter().map(|t| self.idx(t) as i32).collect();\n\n        let upos: Vec<_> = tags\n            .iter()\n            .map(|t| t.map(|o| o as i32 + 2).unwrap_or(1))\n            .collect();\n\n        let word_tensor =\n            Tensor::<B, 1, Int>::from_data(TensorData::from(idxs.as_slice()), &self.device)\n                .reshape([1, sent.len()]);\n\n        let tag_tensor =\n            Tensor::<B, 1, Int>::from_data(TensorData::from(upos.as_slice()), &self.device)\n                .reshape([1, sent.len()]);\n\n        (word_tensor, tag_tensor)\n    }\n\n    pub fn save_to(&self, dir: impl AsRef<Path>) {\n        let dir = dir.as_ref();\n        std::fs::create_dir_all(dir).unwrap();\n\n        let recorder = NamedMpkFileRecorder::<FullPrecisionSettings>::new();\n        self.model\n            .clone()\n            .save_file(dir.join(\"model.mpk\"), &recorder)\n            .unwrap();\n\n        let vocab_bytes = serde_json::to_vec(&self.vocab).unwrap();\n        std::fs::write(dir.join(\"vocab.json\"), vocab_bytes).unwrap();\n    }\n\n    pub fn load_from_bytes(\n        model_bytes: impl AsRef<[u8]>,\n        vocab_bytes: impl AsRef<[u8]>,\n        embed_dim: usize,\n        dropout: f32,\n        device: B::Device,\n    ) -> Self {\n        let vocab: HashMap<String, usize> = serde_json::from_slice(vocab_bytes.as_ref()).unwrap();\n\n        let recorder = NamedMpkBytesRecorder::<FullPrecisionSettings>::new();\n\n        let owned_data = model_bytes.as_ref().to_vec();\n        let record = recorder.load(owned_data, &device).unwrap();\n\n        let model = NpModel::new(vocab.len(), embed_dim, dropout, &device);\n        let model = model.load_record(record);\n\n        Self {\n            vocab,\n            model,\n            device,\n        }\n    }\n}\n\n#[cfg(feature = \"training\")]\nstruct ExtractedSentences(\n    Vec<Vec<String>>,\n    Vec<Vec<Option<UPOS>>>,\n    Vec<Vec<bool>>,\n    HashMap<String, usize>,\n);\n\n#[cfg(feature = \"training\")]\nimpl<B: Backend + AutodiffBackend> BurnChunker<B> {\n    fn to_label(&self, labels: &[bool]) -> Tensor<B, 2> {\n        let ys: Vec<_> = labels.iter().map(|b| if *b { 1. } else { 0. }).collect();\n\n        Tensor::<B, 1, _>::from_data(TensorData::from(ys.as_slice()), &self.device)\n            .reshape([1, labels.len()])\n    }\n\n    pub fn train(\n        training_files: &[impl AsRef<Path>],\n        test_file: &impl AsRef<Path>,\n        word_embed_dim: usize,\n        dropout: f32,\n        epochs: usize,\n        lr: f64,\n        device: B::Device,\n    ) -> Self {\n        use burn::tensor::cast::ToElement;\n\n        println!(\"Preparing datasets...\");\n        let ExtractedSentences(sents, tags, labs, vocab) =\n            Self::extract_sents_from_files(training_files);\n\n        println!(\"Preparing model and training config...\");\n\n        let mut model = NpModel::<B>::new(vocab.len(), word_embed_dim, dropout, &device);\n        let opt_config = burn::optim::AdamConfig::new();\n        let mut opt = opt_config.init();\n\n        let util = BurnChunker {\n            vocab: vocab.clone(),\n            model: model.clone(),\n            device: device.clone(),\n        };\n\n        let loss_fn = MseLoss::new();\n        let mut last_score = 0.;\n\n        println!(\"Training...\");\n\n        for _ in 0..epochs {\n            let mut total_loss = 0.;\n            let mut total_tokens = 0;\n            let mut total_correct: usize = 0;\n\n            for (i, ((x, w), y)) in sents.iter().zip(tags.iter()).zip(labs.iter()).enumerate() {\n                let (word_tens, tag_tens) = util.to_tensors(x, w);\n                let y_tensor = util.to_label(y);\n\n                let logits = model.forward(word_tens, tag_tens, true);\n                total_correct += logits\n                    .to_data()\n                    .iter()\n                    .map(|p: f32| p > 0.5)\n                    .zip(y)\n                    .map(|(a, b)| if a == *b { 1 } else { 0 })\n                    .sum::<usize>();\n\n                let loss = loss_fn.forward(logits, y_tensor, Reduction::Mean);\n\n                let grads = loss.backward();\n                let grads = GradientsParams::from_grads(grads, &model);\n\n                model = opt.step(lr, model, grads);\n\n                total_loss += loss.into_scalar().to_f64();\n                total_tokens += x.len();\n\n                if i % 1000 == 0 {\n                    println!(\"{i}/{}\", sents.len());\n                }\n            }\n\n            println!(\n                \"Average loss for epoch: {}\",\n                total_loss / sents.len() as f64 * 100.\n            );\n\n            println!(\n                \"{}% correct in training dataset\",\n                total_correct as f32 / total_tokens as f32 * 100.\n            );\n\n            let score = util.score_model(&model, test_file);\n            println!(\"{}% correct in test dataset\", score * 100.);\n\n            if score < last_score {\n                println!(\"Overfitting detected. Stopping...\");\n                break;\n            }\n\n            last_score = score;\n        }\n\n        Self {\n            vocab,\n            model,\n            device,\n        }\n    }\n\n    fn score_model(&self, model: &NpModel<B>, dataset: &impl AsRef<Path>) -> f32 {\n        let ExtractedSentences(sents, tags, labs, _) = Self::extract_sents_from_files(&[dataset]);\n\n        let mut total_tokens = 0;\n        let mut total_correct: usize = 0;\n\n        for ((x, w), y) in sents.iter().zip(tags.iter()).zip(labs.iter()) {\n            let (word_tens, tag_tens) = self.to_tensors(x, w);\n\n            let logits = model.forward(word_tens, tag_tens, false);\n            total_correct += logits\n                .to_data()\n                .iter()\n                .map(|p: f32| p > 0.5)\n                .zip(y)\n                .map(|(a, b)| if a == *b { 1 } else { 0 })\n                .sum::<usize>();\n\n            total_tokens += x.len();\n        }\n\n        total_correct as f32 / total_tokens as f32\n    }\n\n    fn extract_sents_from_files(files: &[impl AsRef<Path>]) -> ExtractedSentences {\n        use super::np_extraction::locate_noun_phrases_in_sent;\n        use crate::conllu_utils::iter_sentences_in_conllu;\n\n        let mut vocab: HashMap<String, usize> = HashMap::new();\n        vocab.insert(\"<UNK>\".into(), UNK_IDX);\n\n        let mut sents: Vec<Vec<String>> = Vec::new();\n        let mut sent_tags: Vec<Vec<Option<UPOS>>> = Vec::new();\n        let mut labs: Vec<Vec<bool>> = Vec::new();\n\n        const CONTRACTIONS: &[&str] = &[\"sn't\", \"n't\", \"'ll\", \"'ve\", \"'re\", \"'d\", \"'m\", \"'s\"];\n\n        for file in files {\n            for sent in iter_sentences_in_conllu(file) {\n                let spans = locate_noun_phrases_in_sent(&sent);\n\n                let mut original_mask = vec![false; sent.tokens.len()];\n                for span in spans {\n                    for i in span {\n                        original_mask[i] = true;\n                    }\n                }\n\n                let mut toks: Vec<String> = Vec::new();\n                let mut tags: Vec<Option<UPOS>> = Vec::new();\n                let mut mask: Vec<bool> = Vec::new();\n\n                for (idx, tok) in sent.tokens.iter().enumerate() {\n                    let is_contraction = CONTRACTIONS.contains(&&tok.form[..]);\n                    if is_contraction && !toks.is_empty() {\n                        let prev_tok = toks.pop().unwrap();\n                        let prev_mask = mask.pop().unwrap();\n                        toks.push(format!(\"{prev_tok}{}\", tok.form));\n                        mask.push(prev_mask || original_mask[idx]);\n                    } else {\n                        toks.push(tok.form.clone());\n                        tags.push(tok.upos.and_then(UPOS::from_conllu));\n                        mask.push(original_mask[idx]);\n                    }\n                }\n\n                for t in &toks {\n                    if !vocab.contains_key(t) {\n                        let next = vocab.len();\n                        vocab.insert(t.clone(), next);\n                    }\n                }\n\n                sents.push(toks);\n                sent_tags.push(tags);\n                labs.push(mask);\n            }\n        }\n\n        ExtractedSentences(sents, sent_tags, labs, vocab)\n    }\n}\n\n#[cfg(feature = \"training\")]\npub type BurnChunkerCpu = BurnChunker<burn::backend::Autodiff<NdArray>>;\n\n#[cfg(not(feature = \"training\"))]\npub type BurnChunkerCpu = BurnChunker<NdArray>;\n\nimpl BurnChunkerCpu {\n    pub fn load_from_bytes_cpu(\n        model_bytes: impl AsRef<[u8]>,\n        vocab_bytes: impl AsRef<[u8]>,\n        embed_dim: usize,\n        dropout: f32,\n    ) -> Self {\n        Self::load_from_bytes(\n            model_bytes,\n            vocab_bytes,\n            embed_dim,\n            dropout,\n            NdArrayDevice::Cpu,\n        )\n    }\n}\n\n#[cfg(feature = \"training\")]\nimpl BurnChunkerCpu {\n    pub fn train_cpu(\n        training_files: &[impl AsRef<Path>],\n        test_file: &impl AsRef<Path>,\n        embed_dim: usize,\n        dropout: f32,\n        epochs: usize,\n        lr: f64,\n    ) -> Self {\n        BurnChunker::<Autodiff<NdArray>>::train(\n            training_files,\n            test_file,\n            embed_dim,\n            dropout,\n            epochs,\n            lr,\n            NdArrayDevice::Cpu,\n        )\n    }\n}\n\nimpl<B: Backend> Chunker for BurnChunker<B> {\n    fn chunk_sentence(&self, sentence: &[String], tags: &[Option<UPOS>]) -> Vec<bool> {\n        // Solves a divide-by-zero error in the linear layer.\n        if sentence.is_empty() {\n            return Vec::new();\n        }\n\n        let (word_tens, tag_tens) = self.to_tensors(sentence, tags);\n        let prob = self.model.forward(word_tens, tag_tens, false);\n        prob.to_data().iter().map(|p: f32| p > 0.5).collect()\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/chunker/cached_chunker.rs",
    "content": "use lru::LruCache;\nuse std::hash::Hash;\nuse std::num::NonZeroUsize;\nuse std::sync::Mutex;\n\nuse super::Chunker;\nuse crate::UPOS;\n\n/// Wraps any chunker implementation to add an LRU Cache.\n/// Useful for incremental lints.\npub struct CachedChunker<C: Chunker> {\n    inner: C,\n    cache: Mutex<LruCache<CacheKey, Vec<bool>>>,\n}\n\nimpl<C: Chunker> CachedChunker<C> {\n    pub fn new(inner: C, capacity: NonZeroUsize) -> Self {\n        Self {\n            inner,\n            cache: Mutex::new(LruCache::new(capacity)),\n        }\n    }\n}\n\nimpl<C: Chunker> Chunker for CachedChunker<C> {\n    fn chunk_sentence(&self, sentence: &[String], tags: &[Option<UPOS>]) -> Vec<bool> {\n        let key = CacheKey::new(sentence, tags);\n\n        // Attempt a cache hit.\n        // We put this in the block so `read` gets dropped as early as possible.\n        if let Ok(mut read) = self.cache.try_lock()\n            && let Some(result) = read.get(&key)\n        {\n            return result.clone();\n        };\n\n        // We don't want to hold the lock since it may take a while to run the chunker.\n        let result = self.inner.chunk_sentence(sentence, tags);\n\n        if let Ok(mut cache) = self.cache.try_lock() {\n            cache.put(key, result.clone());\n        }\n\n        result\n    }\n}\n\n#[derive(Hash, PartialEq, Eq)]\nstruct CacheKey {\n    sentence: Vec<String>,\n    tags: Vec<Option<UPOS>>,\n}\n\nimpl CacheKey {\n    fn new(sentence: &[String], tags: &[Option<UPOS>]) -> Self {\n        Self {\n            sentence: sentence.to_vec(),\n            tags: tags.to_vec(),\n        }\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/chunker/mod.rs",
    "content": "use crate::UPOS;\n\nmod brill_chunker;\nmod burn_chunker;\nmod cached_chunker;\n#[cfg(feature = \"training\")]\nmod np_extraction;\nmod upos_freq_dict;\n\npub use brill_chunker::BrillChunker;\npub use burn_chunker::{BurnChunker, BurnChunkerCpu};\npub use cached_chunker::CachedChunker;\npub use upos_freq_dict::UPOSFreqDict;\n\n/// An implementer of this trait is capable of identifying the noun phrases in a provided sentence.\n/// [See here](https://en.wikipedia.org/wiki/Shallow_parsing) for more details on what this is and how it can work.\npub trait Chunker {\n    /// Iterate over the sentence, identifying the noun phrases contained within.\n    /// A token marked `true` is a component of a noun phrase.\n    /// A token marked `false` is not.\n    fn chunk_sentence(&self, sentence: &[String], tags: &[Option<UPOS>]) -> Vec<bool>;\n}\n"
  },
  {
    "path": "harper-pos-utils/src/chunker/np_extraction.rs",
    "content": "//! Methods for extracting nominal phrases from datasets.\n\nuse std::collections::VecDeque;\n\nuse hashbrown::HashSet;\nuse rs_conllu::{Sentence, Token, TokenID, UPOS};\n\npub fn locate_noun_phrases_in_sent(sent: &Sentence) -> Vec<HashSet<usize>> {\n    let mut found_noun_phrases = Vec::new();\n\n    for (i, token) in sent.tokens.iter().enumerate() {\n        if token.upos.is_some_and(is_root_upos) {\n            let noun_phrase = locate_noun_phrase_with_head_at(i, sent);\n\n            found_noun_phrases.push(noun_phrase);\n        }\n    }\n\n    found_noun_phrases.retain(is_contiguous);\n\n    reduce_to_maximal_nonoverlapping(found_noun_phrases)\n}\n\nfn is_contiguous(indices: &HashSet<usize>) -> bool {\n    if indices.is_empty() {\n        return false;\n    }\n    let lo = *indices.iter().min().unwrap();\n    let hi = *indices.iter().max().unwrap();\n    hi - lo + 1 == indices.len()\n}\n\nfn reduce_to_maximal_nonoverlapping(mut phrases: Vec<HashSet<usize>>) -> Vec<HashSet<usize>> {\n    phrases.sort_by_key(|s| usize::MAX - s.len());\n    let mut selected = Vec::new();\n    let mut occupied = HashSet::new();\n\n    for p in phrases {\n        if p.is_disjoint(&occupied) {\n            occupied.extend(&p);\n            selected.push(p);\n        }\n    }\n\n    selected\n}\n\nfn locate_noun_phrase_with_head_at(head_index: usize, sent: &Sentence) -> HashSet<usize> {\n    let mut children = HashSet::new();\n    let mut queue = VecDeque::new();\n    queue.push_back(head_index);\n\n    while let Some(c_i) = queue.pop_front() {\n        if children.contains(&c_i) {\n            continue;\n        }\n\n        let tok = &sent.tokens[c_i];\n\n        if is_noun_phrase_constituent(tok) || tok.upos.is_some_and(is_root_upos) {\n            children.insert(c_i);\n            queue.extend(get_children(sent, c_i));\n        }\n    }\n\n    children\n}\n\nfn is_root_upos(upos: UPOS) -> bool {\n    use UPOS::*;\n    matches!(upos, NOUN | PROPN | PRON)\n}\n\n/// Get the indices of the children of a given node.\nfn get_children(sent: &Sentence, of_node: usize) -> Vec<usize> {\n    let mut children = Vec::new();\n\n    for (index, token) in sent.tokens.iter().enumerate() {\n        if index == of_node {\n            continue;\n        }\n\n        if let Some(head) = token.head {\n            let is_child = match head {\n                TokenID::Single(i) => i != 0 && i - 1 == of_node,\n                TokenID::Range(start, end) => (start - 1..end - 1).contains(&of_node),\n                TokenID::Empty(_, _) => false,\n            };\n\n            if is_child {\n                children.push(index)\n            }\n        }\n    }\n\n    children\n}\n\nfn is_noun_phrase_constituent(token: &Token) -> bool {\n    let Some(ref deprel) = token.deprel else {\n        return false;\n    };\n\n    matches!(\n        deprel.as_str(),\n        \"det\" | \"amod\" | \"nummod\" | \"compound\" | \"fixed\" | \"flat\" | \"acl\" | \"aux:pass\"\n    )\n}\n"
  },
  {
    "path": "harper-pos-utils/src/chunker/upos_freq_dict.rs",
    "content": "#[cfg(feature = \"training\")]\nuse std::path::Path;\n\nuse hashbrown::HashMap;\nuse serde::{Deserialize, Serialize};\n\nuse crate::UPOS;\n\nuse super::Chunker;\n\n/// Tracks the number of times any given UPOS is associated with a noun phrase.\n/// Used as the baseline for the chunker.\n#[derive(Debug, Clone, Serialize, Deserialize, Default)]\npub struct UPOSFreqDict {\n    /// The # of times each [`UPOS`] was not part of an NP subtracted from the number of times it\n    /// was.\n    pub counts: HashMap<UPOS, isize>,\n}\n\nimpl UPOSFreqDict {\n    pub fn is_likely_np_component(&self, upos: &UPOS) -> bool {\n        self.counts.get(upos).cloned().unwrap_or_default() > 0\n    }\n}\n\nimpl Chunker for UPOSFreqDict {\n    fn chunk_sentence(&self, _sentence: &[String], tags: &[Option<UPOS>]) -> Vec<bool> {\n        tags.iter()\n            .map(|t| {\n                t.as_ref()\n                    .map(|t| self.is_likely_np_component(t))\n                    .unwrap_or(false)\n            })\n            .collect()\n    }\n}\n\n#[cfg(feature = \"training\")]\nimpl UPOSFreqDict {\n    /// Increment the count for a particular lint kind.\n    pub fn inc_is_np(&mut self, upos: UPOS, is_np: bool) {\n        self.counts\n            .entry(upos)\n            .and_modify(|counter| *counter += if is_np { 1 } else { -1 })\n            .or_insert(1);\n    }\n\n    /// Parse a `.conllu` file and use it to train a frequency dictionary.\n    /// For error-handling purposes, this function should not be made accessible outside of training.\n    pub fn inc_from_conllu_file(&mut self, path: impl AsRef<Path>) {\n        use super::np_extraction::locate_noun_phrases_in_sent;\n        use crate::conllu_utils::iter_sentences_in_conllu;\n\n        for sent in iter_sentences_in_conllu(path) {\n            use hashbrown::HashSet;\n\n            let noun_phrases = locate_noun_phrases_in_sent(&sent);\n\n            let flat = noun_phrases.into_iter().fold(HashSet::new(), |mut a, b| {\n                a.extend(b);\n                a\n            });\n\n            for (i, token) in sent.tokens.iter().enumerate() {\n                if let Some(upos) = token.upos.and_then(UPOS::from_conllu) {\n                    self.inc_is_np(upos, flat.contains(&i))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/conllu_utils.rs",
    "content": "use std::{fs::File, path::Path};\n\nuse rs_conllu::{Sentence, parse_file};\n\n/// Produce an iterator over the sentences in a `.conllu` file.\n/// Will panic on error, so this should not be used outside of training.\npub fn iter_sentences_in_conllu(path: impl AsRef<Path>) -> impl Iterator<Item = Sentence> {\n    let file = File::open(path).unwrap();\n    let doc = parse_file(file);\n\n    doc.map(|v| v.unwrap())\n}\n"
  },
  {
    "path": "harper-pos-utils/src/lib.rs",
    "content": "mod chunker;\n#[cfg(feature = \"training\")]\nmod conllu_utils;\nmod patch_criteria;\nmod tagger;\nmod upos;\n#[cfg(feature = \"training\")]\nmod word_counter;\n\npub use chunker::{\n    BrillChunker, BurnChunker, BurnChunkerCpu, CachedChunker, Chunker, UPOSFreqDict,\n};\npub use tagger::{BrillTagger, FreqDict, FreqDictBuilder, Tagger};\npub use upos::{UPOS, UPOSIter};\n"
  },
  {
    "path": "harper-pos-utils/src/patch_criteria.rs",
    "content": "use serde::{Deserialize, Serialize};\n\nuse crate::UPOS;\n\n#[derive(Debug, Clone, Serialize, Deserialize, Hash, PartialEq, Eq)]\npub enum PatchCriteria {\n    WordIsTaggedWith {\n        /// Which token to inspect.\n        relative: isize,\n        is_tagged: UPOS,\n    },\n    AnyWordIsTaggedWith {\n        /// The farthest relative index to look\n        max_relative: isize,\n        is_tagged: UPOS,\n    },\n    SandwichTaggedWith {\n        prev_word_tagged: UPOS,\n        post_word_tagged: UPOS,\n    },\n    WordIs {\n        relative: isize,\n        word: String,\n    },\n    /// Not applicable to the Brill Tagger, only the chunker\n    NounPhraseAt {\n        is_np: bool,\n        relative: isize,\n    },\n    Combined {\n        a: Box<PatchCriteria>,\n        b: Box<PatchCriteria>,\n    },\n}\n\nimpl PatchCriteria {\n    pub fn fulfils(\n        &self,\n        tokens: &[String],\n        tags: &[Option<UPOS>],\n        np_flags: &[bool],\n        index: usize,\n    ) -> bool {\n        match self {\n            PatchCriteria::WordIsTaggedWith {\n                relative,\n                is_tagged,\n            } => {\n                let Some(index) = add(index, *relative) else {\n                    return false;\n                };\n\n                tags.get(index)\n                    .copied()\n                    .flatten()\n                    .is_some_and(|t| t == *is_tagged)\n            }\n            PatchCriteria::AnyWordIsTaggedWith {\n                max_relative: relative,\n                is_tagged,\n            } => {\n                let Some(farthest_index) = add(index, *relative) else {\n                    return false;\n                };\n\n                (farthest_index.min(index)..farthest_index.max(index)).any(|i| {\n                    tags.get(i)\n                        .copied()\n                        .flatten()\n                        .is_some_and(|t| t == *is_tagged)\n                })\n            }\n            PatchCriteria::SandwichTaggedWith {\n                prev_word_tagged,\n                post_word_tagged,\n            } => {\n                if index == 0 {\n                    return false;\n                }\n\n                let prev_i = index - 1;\n                let post_i = index + 1;\n\n                tags.get(prev_i)\n                    .copied()\n                    .flatten()\n                    .is_some_and(|t| t == *prev_word_tagged)\n                    && tags\n                        .get(post_i)\n                        .copied()\n                        .flatten()\n                        .is_some_and(|t| t == *post_word_tagged)\n            }\n            Self::WordIs { relative, word } => {\n                let Some(index) = add(index, *relative) else {\n                    return false;\n                };\n\n                tokens.get(index).is_some_and(|w| {\n                    w.chars()\n                        .zip(word.chars())\n                        .all(|(a, b)| a.eq_ignore_ascii_case(&b))\n                })\n            }\n\n            Self::NounPhraseAt { is_np, relative } => {\n                let Some(index) = add(index, *relative) else {\n                    return false;\n                };\n\n                np_flags.get(index).is_some_and(|f| *is_np == *f)\n            }\n            Self::Combined { a, b } => {\n                a.fulfils(tokens, tags, np_flags, index) && b.fulfils(tokens, tags, np_flags, index)\n            }\n        }\n    }\n}\n\nfn add(u: usize, i: isize) -> Option<usize> {\n    if i.is_negative() {\n        u.checked_sub(i.wrapping_abs() as u32 as usize)\n    } else {\n        u.checked_add(i as usize)\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/tagger/brill_tagger/mod.rs",
    "content": "mod patch;\n\n#[cfg(feature = \"training\")]\nuse std::path::Path;\n\nuse patch::Patch;\nuse serde::{Deserialize, Serialize};\n\n#[cfg(feature = \"training\")]\nuse super::FreqDict;\n#[cfg(feature = \"training\")]\nuse super::error_counter::{ErrorCounter, ErrorKind};\n\nuse crate::{Tagger, UPOS};\n\n/// A [`Tagger`] implementation based on the work by Eric Brill.\n///\n/// Additional reading:\n///\n/// - [Brill tagger](https://en.wikipedia.org/wiki/Brill_tagger)\n/// - [Transformation-based Learning for POS Tagging](https://elijahpotter.dev/articles/transformation-based-learning)\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct BrillTagger<B>\nwhere\n    B: Tagger,\n{\n    base: B,\n    patches: Vec<Patch>,\n}\n\nimpl<B> BrillTagger<B>\nwhere\n    B: Tagger,\n{\n    pub fn new(base: B) -> Self {\n        Self {\n            base,\n            patches: Vec::new(),\n        }\n    }\n\n    fn apply_patches(&self, sentence: &[String], tags: &mut [Option<UPOS>]) {\n        for patch in &self.patches {\n            for i in 0..sentence.len() {\n                let Some(i_tag) = tags.get(i).copied().flatten() else {\n                    continue;\n                };\n\n                if patch.from == i_tag && patch.criteria.fulfils(sentence, tags, &[], i) {\n                    tags[i] = Some(patch.to);\n                }\n            }\n        }\n    }\n}\n\nimpl<B> Tagger for BrillTagger<B>\nwhere\n    B: Tagger,\n{\n    /// Tag a sentence using the provided frequency dictionary and current patch set.\n    /// If the tagger is unable to determine a POS, it returns [`None`] in that position.\n    fn tag_sentence(&self, sentence: &[String]) -> Vec<Option<UPOS>> {\n        let mut tags = self.base.tag_sentence(sentence);\n        self.apply_patches(sentence, &mut tags);\n\n        tags\n    }\n}\n\n#[cfg(feature = \"training\")]\nimpl BrillTagger<FreqDict> {\n    /// Tag a provided sentence with patches, providing the \"correct\" tags (from a dataset or\n    /// other source), returning the number of errors.\n    pub fn locate_patch_errors(\n        &self,\n        sentence: &[String],\n        correct_tags: &[Option<UPOS>],\n        base_tags: &[Option<UPOS>],\n        errors: &mut ErrorCounter,\n    ) {\n        let mut base_tags = base_tags.to_vec();\n        self.apply_patches(sentence, &mut base_tags);\n\n        for ((tag, correct_tag), word) in base_tags.iter().zip(correct_tags.iter()).zip(sentence) {\n            if let Some(tag) = tag\n                && let Some(correct_tag) = correct_tag\n                && tag != correct_tag\n            {\n                errors.inc(\n                    ErrorKind {\n                        was_tagged: *tag,\n                        correct_tag: *correct_tag,\n                    },\n                    word.as_str(),\n                )\n            }\n        }\n    }\n\n    /// Tag a provided sentence with the tagger, providing the \"correct\" tags (from a dataset or\n    /// other source), returning the number of errors.\n    pub fn locate_tag_errors(\n        &self,\n        sentence: &[String],\n        correct_tags: &[Option<UPOS>],\n    ) -> ErrorCounter {\n        let tags = self.tag_sentence(sentence);\n\n        let mut errors = ErrorCounter::new();\n\n        for ((tag, correct_tag), word) in tags.iter().zip(correct_tags.iter()).zip(sentence) {\n            if let Some(tag) = tag\n                && let Some(correct_tag) = correct_tag\n                && tag != correct_tag\n            {\n                errors.inc(\n                    ErrorKind {\n                        was_tagged: *tag,\n                        correct_tag: *correct_tag,\n                    },\n                    word.as_str(),\n                )\n            }\n        }\n\n        errors\n    }\n\n    /// To speed up training, only try a subset of all possible candidates.\n    /// How many to select is given by the `candidate_selection_chance`. A higher chance means a\n    /// longer training time.\n    fn epoch(&mut self, training_files: &[impl AsRef<Path>], candidate_selection_chance: f32) {\n        use crate::conllu_utils::iter_sentences_in_conllu;\n        use rs_conllu::Sentence;\n        use std::time::Instant;\n\n        assert!((0.0..=1.0).contains(&candidate_selection_chance));\n\n        let mut total_tokens = 0;\n        let mut error_counter = ErrorCounter::new();\n\n        let sentences: Vec<Sentence> = training_files\n            .iter()\n            .flat_map(iter_sentences_in_conllu)\n            .collect();\n        let mut sentences_tagged: Vec<(Vec<String>, Vec<Option<UPOS>>)> = Vec::new();\n\n        for sent in &sentences {\n            let mut toks: Vec<String> = Vec::new();\n            let mut tags = Vec::new();\n\n            for token in &sent.tokens {\n                let form = token.form.clone();\n                if let Some(last) = toks.last_mut() {\n                    match form.as_str() {\n                        \"sn't\" | \"n't\" | \"'ll\" | \"'ve\" | \"'re\" | \"'d\" | \"'m\" | \"'s\" => {\n                            last.push_str(&form);\n                            continue;\n                        }\n                        _ => {}\n                    }\n                }\n                toks.push(form);\n                tags.push(token.upos.and_then(UPOS::from_conllu));\n            }\n\n            sentences_tagged.push((toks, tags));\n        }\n\n        for (tok_buf, tag_buf) in &sentences_tagged {\n            total_tokens += tok_buf.len();\n            error_counter\n                .merge_from(self.locate_tag_errors(tok_buf.as_slice(), tag_buf.as_slice()));\n        }\n\n        println!(\"=============\");\n        println!(\"Total tokens in training set: {total_tokens}\");\n        println!(\n            \"Tokens incorrectly tagged: {}\",\n            error_counter.total_errors()\n        );\n        println!(\n            \"Error rate: {}%\",\n            error_counter.total_errors() as f32 / total_tokens as f32 * 100.\n        );\n\n        // Before adding any patches, let's get a good base.\n        let mut base_tags = Vec::new();\n        for (toks, _) in &sentences_tagged {\n            base_tags.push(self.tag_sentence(toks));\n        }\n\n        let all_candidates = Patch::generate_candidate_patches(&error_counter);\n        let mut pruned_candidates: Vec<Patch> = rand::seq::IndexedRandom::sample(\n            all_candidates.as_slice(),\n            &mut rand::rng(),\n            (all_candidates.len() as f32 * candidate_selection_chance) as usize,\n        )\n        .cloned()\n        .collect();\n\n        let start = Instant::now();\n\n        #[cfg(feature = \"threaded\")]\n        rayon::slice::ParallelSliceMut::par_sort_by_cached_key(\n            pruned_candidates.as_mut_slice(),\n            |candidate: &Patch| {\n                self.score_candidate(candidate.clone(), &sentences_tagged, &base_tags)\n            },\n        );\n\n        #[cfg(not(feature = \"threaded\"))]\n        pruned_candidates.sort_by_cached_key(|candidate| {\n            self.score_candidate(candidate.clone(), &sentences_tagged, &base_tags)\n        });\n\n        let duration = start.elapsed();\n        let seconds = duration.as_secs();\n        let millis = duration.subsec_millis();\n\n        println!(\n            \"It took {} seconds and {} milliseconds to search through {} candidates at {} c/sec.\",\n            seconds,\n            millis,\n            pruned_candidates.len(),\n            pruned_candidates.len() as f32 / seconds as f32\n        );\n\n        if let Some(best) = pruned_candidates.first() {\n            self.patches.push(best.clone());\n        }\n    }\n\n    /// Lower is better\n    fn score_candidate(\n        &self,\n        candidate: Patch,\n        sentences_tagged: &[(Vec<String>, Vec<Option<UPOS>>)],\n        base_tags: &[Vec<Option<UPOS>>],\n    ) -> usize {\n        let mut tagger = BrillTagger::new(FreqDict::default());\n        tagger.patches.push(candidate);\n\n        let mut candidate_errors = ErrorCounter::new();\n\n        for ((toks, tags), base) in sentences_tagged.iter().zip(base_tags.iter()) {\n            tagger.locate_patch_errors(\n                toks.as_slice(),\n                tags.as_slice(),\n                base,\n                &mut candidate_errors,\n            );\n        }\n\n        candidate_errors.total_errors()\n    }\n\n    /// Train a brand-new tagger on a `.conllu` dataset, provided via a path.\n    /// This does not do _any_ error handling, and should not run in production.\n    /// It should be used for training a model that _will_ be used in production.\n    pub fn train(\n        training_files: &[impl AsRef<Path>],\n        epochs: usize,\n        candidate_selection_chance: f32,\n    ) -> Self {\n        use crate::FreqDictBuilder;\n\n        let mut freq_dict_builder = FreqDictBuilder::new();\n\n        for file in training_files {\n            freq_dict_builder.inc_from_conllu_file(file);\n        }\n\n        let freq_dict = freq_dict_builder.build();\n\n        let mut tagger = Self::new(freq_dict);\n\n        for _ in 0..epochs {\n            tagger.epoch(training_files, candidate_selection_chance);\n        }\n\n        tagger\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/tagger/brill_tagger/patch.rs",
    "content": "#[cfg(feature = \"training\")]\nuse crate::tagger::error_counter::ErrorCounter;\nuse crate::{UPOS, patch_criteria::PatchCriteria};\n#[cfg(feature = \"training\")]\nuse hashbrown::HashSet;\nuse serde::{Deserialize, Serialize};\n\n#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct Patch {\n    pub from: UPOS,\n    pub to: UPOS,\n    pub criteria: PatchCriteria,\n}\n\n#[cfg(feature = \"training\")]\nimpl Patch {\n    /// Given a list of tagging errors, generate a collection of candidate patches that _might_ fix\n    /// them. Training involves determining which candidates actually work.\n    pub fn generate_candidate_patches(error_counter: &ErrorCounter) -> Vec<Patch> {\n        let mut candidates = Vec::new();\n\n        for key in error_counter.error_counts.keys() {\n            candidates.extend(Self::gen_simple_candidates().into_iter().map(|c| Patch {\n                from: key.was_tagged,\n                to: key.correct_tag,\n                criteria: c,\n            }));\n\n            for c in &Self::gen_simple_candidates() {\n                for word in error_counter.word_counts.iter_top_n_words(10) {\n                    for r in -3..3 {\n                        candidates.push(Patch {\n                            from: key.was_tagged,\n                            to: key.correct_tag,\n                            criteria: PatchCriteria::Combined {\n                                a: Box::new(PatchCriteria::WordIs {\n                                    relative: r,\n                                    word: word.to_string(),\n                                }),\n                                b: Box::new(c.clone()),\n                            },\n                        })\n                    }\n                }\n            }\n        }\n\n        candidates\n    }\n\n    /// Candidates to be tested against a dataset during training.\n    fn gen_simple_candidates() -> Vec<PatchCriteria> {\n        use strum::IntoEnumIterator;\n\n        let mut criteria = HashSet::new();\n        for upos in UPOS::iter() {\n            for i in -4..=4 {\n                criteria.insert(PatchCriteria::WordIsTaggedWith {\n                    relative: i,\n                    is_tagged: upos,\n                });\n            }\n\n            for i in -4..=4 {\n                criteria.insert(PatchCriteria::AnyWordIsTaggedWith {\n                    max_relative: i,\n                    is_tagged: upos,\n                });\n            }\n\n            for upos_b in UPOS::iter() {\n                criteria.insert(PatchCriteria::SandwichTaggedWith {\n                    prev_word_tagged: upos,\n                    post_word_tagged: upos_b,\n                });\n\n                criteria.insert(PatchCriteria::Combined {\n                    a: Box::new(PatchCriteria::WordIsTaggedWith {\n                        relative: 1,\n                        is_tagged: upos,\n                    }),\n                    b: Box::new(PatchCriteria::WordIsTaggedWith {\n                        relative: -2,\n                        is_tagged: upos_b,\n                    }),\n                });\n            }\n        }\n\n        criteria.into_iter().collect()\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/tagger/error_counter.rs",
    "content": "use hashbrown::HashMap;\n\nuse crate::{UPOS, word_counter::WordCounter};\n\n#[derive(Debug, Default, Clone, Hash, PartialEq, Eq)]\npub struct ErrorKind {\n    pub was_tagged: UPOS,\n    pub correct_tag: UPOS,\n}\n\n#[derive(Debug, Default)]\npub struct ErrorCounter {\n    pub error_counts: HashMap<ErrorKind, usize>,\n    /// The number of times a word is associated with an error.\n    pub word_counts: WordCounter,\n}\n\nimpl ErrorCounter {\n    pub fn new() -> Self {\n        Self::default()\n    }\n\n    /// Increment the count for a particular lint kind.\n    pub fn inc(&mut self, kind: ErrorKind, word: &str) {\n        self.error_counts\n            .entry(kind)\n            .and_modify(|counter| *counter += 1)\n            .or_insert(1);\n        self.word_counts.inc(word)\n    }\n\n    pub fn merge_from(&mut self, other: Self) {\n        for (key, value) in other.error_counts {\n            self.error_counts\n                .entry(key)\n                .and_modify(|counter| *counter += value)\n                .or_insert(value);\n        }\n\n        for (key, value) in other.word_counts.word_counts {\n            self.word_counts\n                .word_counts\n                .entry(key)\n                .and_modify(|counter| *counter += value)\n                .or_insert(value);\n        }\n    }\n\n    pub fn total_errors(&self) -> usize {\n        self.error_counts.values().sum()\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/tagger/freq_dict.rs",
    "content": "use hashbrown::HashMap;\nuse serde::{Deserialize, Serialize};\n\nuse super::Tagger;\nuse crate::upos::UPOS;\n\n/// A mapping between words (normalized to lowercase) and their most common UPOS tag.\n/// Can be used as a minimally accurate [`Tagger`].\n#[derive(Debug, Default, Serialize, Deserialize, Clone)]\npub struct FreqDict {\n    pub mapping: HashMap<String, UPOS>,\n}\n\nimpl FreqDict {\n    pub fn get(&self, word: &str) -> Option<UPOS> {\n        let word_lower = word.to_lowercase();\n        self.mapping.get(word_lower.as_str()).copied()\n    }\n}\n\nimpl Tagger for FreqDict {\n    fn tag_sentence(&self, sentence: &[String]) -> Vec<Option<UPOS>> {\n        let mut tags = Vec::new();\n\n        for word in sentence {\n            let tag = self.get(word);\n            tags.push(tag);\n        }\n\n        tags\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/tagger/freq_dict_builder.rs",
    "content": "#[cfg(feature = \"training\")]\nuse std::path::Path;\n\nuse hashbrown::{Equivalent, HashMap};\nuse strum::IntoEnumIterator;\n\nuse crate::{UPOS, tagger::FreqDict};\n\n/// A mapping between words and the frequency of each UPOS.\n/// If an element is missing from the map, it's count is assumed to be zero.\n#[derive(Debug, Default)]\npub struct FreqDictBuilder {\n    mapping: HashMap<FreqDictBuilderKey, usize>,\n}\n\nimpl FreqDictBuilder {\n    pub fn new() -> Self {\n        Default::default()\n    }\n\n    pub fn inc(&mut self, word: &str, tag: &UPOS) {\n        let word_lower = word.to_lowercase();\n        let counter = self.mapping.get_mut(&(word_lower.as_str(), tag));\n\n        if let Some(counter) = counter {\n            *counter += 1;\n        } else {\n            self.mapping.insert(\n                FreqDictBuilderKey {\n                    word: word_lower.to_string(),\n                    pos: *tag,\n                },\n                1,\n            );\n        }\n    }\n\n    // Inefficient, but effective method that gets the most used POS for a word in the map.\n    // Returns none if the word does not exist in the map.\n    fn most_freq_pos(&self, word: &str) -> Option<UPOS> {\n        let word_lower = word.to_lowercase();\n        let mut max_found: Option<(UPOS, usize)> = None;\n\n        for pos in UPOS::iter() {\n            if let Some(count) = self.mapping.get(&(word_lower.as_str(), &pos)) {\n                if let Some((_, max_count)) = max_found {\n                    if *count > max_count {\n                        max_found = Some((pos, *count))\n                    }\n                } else {\n                    max_found = Some((pos, *count))\n                }\n            }\n        }\n\n        max_found.map(|v| v.0)\n    }\n\n    /// Parse a `.conllu` file and use it to train a frequency dictionary.\n    /// For error-handling purposes, this function should not be made accessible outside of training.\n    #[cfg(feature = \"training\")]\n    pub fn inc_from_conllu_file(&mut self, path: impl AsRef<Path>) {\n        use crate::conllu_utils::iter_sentences_in_conllu;\n\n        for sent in iter_sentences_in_conllu(path) {\n            for token in sent.tokens {\n                if let Some(upos) = token.upos.and_then(UPOS::from_conllu) {\n                    self.inc(&token.form, &upos)\n                }\n            }\n        }\n    }\n\n    pub fn build(self) -> FreqDict {\n        let mut output = HashMap::new();\n\n        for key in self.mapping.keys() {\n            if output.contains_key(&key.word) {\n                continue;\n            }\n\n            output.insert(key.word.to_string(), self.most_freq_pos(&key.word).unwrap());\n        }\n\n        FreqDict { mapping: output }\n    }\n}\n\n#[derive(Debug, Eq, PartialEq, Hash)]\nstruct FreqDictBuilderKey {\n    word: String,\n    pos: UPOS,\n}\n\nimpl Equivalent<FreqDictBuilderKey> for (&str, &UPOS) {\n    fn equivalent(&self, key: &FreqDictBuilderKey) -> bool {\n        self.0 == key.word && *self.1 == key.pos\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/tagger/mod.rs",
    "content": "mod brill_tagger;\n#[cfg(feature = \"training\")]\nmod error_counter;\nmod freq_dict;\nmod freq_dict_builder;\n\nuse crate::UPOS;\n\npub use brill_tagger::BrillTagger;\npub use freq_dict::FreqDict;\npub use freq_dict_builder::FreqDictBuilder;\n\n/// An implementer of this trait is capable of assigned Part-of-Speech tags to a provided sentence.\n/// This is widely useful for various applications. [See here.](https://en.wikipedia.org/wiki/Part-of-speech_tagging)\npub trait Tagger {\n    fn tag_sentence(&self, sentence: &[String]) -> Vec<Option<UPOS>>;\n}\n"
  },
  {
    "path": "harper-pos-utils/src/upos.rs",
    "content": "use std::fmt::Display;\n\nuse is_macro::Is;\nuse serde::{Deserialize, Serialize};\nuse strum_macros::{AsRefStr, EnumIter, EnumString};\n\n/// Represents the universal parts of speech as outlined by [universaldependencies.org](https://universaldependencies.org/u/pos/index.html).\n#[derive(\n    EnumString,\n    Debug,\n    Default,\n    Hash,\n    Eq,\n    PartialEq,\n    Clone,\n    Copy,\n    EnumIter,\n    AsRefStr,\n    Serialize,\n    Deserialize,\n    PartialOrd,\n    Ord,\n    Is,\n)]\npub enum UPOS {\n    /// Adjective\n    ADJ,\n    /// Adposition\n    ADP,\n    /// Adverb\n    ADV,\n    /// Auxiliary\n    AUX,\n    /// Coordinating conjunction\n    CCONJ,\n    /// Determiner\n    DET,\n    /// Interjection\n    INTJ,\n    /// Noun\n    #[default]\n    NOUN,\n    /// Numeral\n    NUM,\n    /// Particle\n    PART,\n    /// Pronoun\n    PRON,\n    /// Proper noun\n    PROPN,\n    /// Punctuation\n    PUNCT,\n    /// Subordinating conjunction\n    SCONJ,\n    /// Symbol\n    SYM,\n    /// Verb\n    VERB,\n}\n\nimpl UPOS {\n    pub fn from_conllu(other: rs_conllu::UPOS) -> Option<Self> {\n        Some(match other {\n            rs_conllu::UPOS::ADJ => UPOS::ADJ,\n            rs_conllu::UPOS::ADP => UPOS::ADP,\n            rs_conllu::UPOS::ADV => UPOS::ADV,\n            rs_conllu::UPOS::AUX => UPOS::AUX,\n            rs_conllu::UPOS::CCONJ => UPOS::CCONJ,\n            rs_conllu::UPOS::DET => UPOS::DET,\n            rs_conllu::UPOS::INTJ => UPOS::INTJ,\n            rs_conllu::UPOS::NOUN => UPOS::NOUN,\n            rs_conllu::UPOS::NUM => UPOS::NUM,\n            rs_conllu::UPOS::PART => UPOS::PART,\n            rs_conllu::UPOS::PRON => UPOS::PRON,\n            rs_conllu::UPOS::PROPN => UPOS::PROPN,\n            rs_conllu::UPOS::PUNCT => UPOS::PUNCT,\n            rs_conllu::UPOS::SCONJ => UPOS::SCONJ,\n            rs_conllu::UPOS::SYM => UPOS::SYM,\n            rs_conllu::UPOS::VERB => UPOS::VERB,\n            rs_conllu::UPOS::X => return None,\n        })\n    }\n\n    pub fn is_nominal(&self) -> bool {\n        matches!(self, Self::NOUN | Self::PROPN | Self::PRON)\n    }\n}\n\nimpl Display for UPOS {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        let desc = match self {\n            UPOS::ADJ => \"Adjective\",\n            UPOS::ADP => \"Adposition\",\n            UPOS::ADV => \"Adverb\",\n            UPOS::AUX => \"Auxiliary\",\n            UPOS::CCONJ => \"Coordinating conjunction\",\n            UPOS::DET => \"Determiner\",\n            UPOS::INTJ => \"Interjection\",\n            UPOS::NOUN => \"Noun\",\n            UPOS::NUM => \"Numeral\",\n            UPOS::PART => \"Particle\",\n            UPOS::PRON => \"Pronoun\",\n            UPOS::PROPN => \"Proper noun\",\n            UPOS::PUNCT => \"Punctuation\",\n            UPOS::SCONJ => \"Subordinating conjunction\",\n            UPOS::SYM => \"Symbol\",\n            UPOS::VERB => \"Verb\",\n        };\n        write!(f, \"{desc}\")\n    }\n}\n"
  },
  {
    "path": "harper-pos-utils/src/word_counter.rs",
    "content": "use hashbrown::HashMap;\n\n#[derive(Debug, Default)]\npub struct WordCounter {\n    /// The number of times a word is associated with an error.\n    pub word_counts: HashMap<String, usize>,\n}\n\nimpl WordCounter {\n    pub fn new() -> Self {\n        Self::default()\n    }\n\n    /// Increment the count for a particular word.\n    pub fn inc(&mut self, word: &str) {\n        self.word_counts\n            .entry_ref(word)\n            .and_modify(|counter| *counter += 1)\n            .or_insert(1);\n    }\n\n    /// Get an iterator over the most frequent words associated with errors.\n    pub fn iter_top_n_words(&self, n: usize) -> impl Iterator<Item = &String> {\n        let mut counts: Vec<(&String, &usize)> = self.word_counts.iter().collect();\n        counts.sort_unstable_by(|a, b| b.1.cmp(a.1));\n        counts.into_iter().take(n).map(|(a, _b)| a)\n    }\n}\n"
  },
  {
    "path": "harper-python/Cargo.toml",
    "content": "[package]\nname = \"harper-python\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\nharper-tree-sitter = { path = \"../harper-tree-sitter\", version = \"1.0.0\" }\ntree-sitter-python = \"0.25.0\"\ntree-sitter = \"0.25.10\"\n\n[dev-dependencies]\npaste = \"1.0.15\"\n"
  },
  {
    "path": "harper-python/src/lib.rs",
    "content": "use harper_core::parsers::{self, Parser, PlainEnglish};\nuse harper_core::{Token, TokenKind};\nuse harper_tree_sitter::TreeSitterMasker;\nuse tree_sitter::Node;\n\npub struct PythonParser {\n    /// Used to grab the text nodes.\n    inner: parsers::Mask<TreeSitterMasker, PlainEnglish>,\n}\n\nimpl PythonParser {\n    fn node_condition(n: &Node) -> bool {\n        if n.kind().contains(\"comment\") {\n            return true;\n        }\n        if n.kind() == \"string_content\"\n            && let Some(expr_stmt) = parent_is_expression_statement(n)\n            && (is_module_level_docstring(&expr_stmt)\n                || is_fn_or_class_docstrings(&expr_stmt)\n                || is_attribute_docstring(&expr_stmt))\n        {\n            return true;\n        }\n        false\n    }\n}\n\nimpl Default for PythonParser {\n    fn default() -> Self {\n        Self {\n            inner: parsers::Mask::new(\n                TreeSitterMasker::new(tree_sitter_python::LANGUAGE.into(), Self::node_condition),\n                PlainEnglish,\n            ),\n        }\n    }\n}\n\nimpl Parser for PythonParser {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let mut tokens = self.inner.parse(source);\n\n        let mut prev_kind: Option<&TokenKind> = None;\n\n        for token in &mut tokens {\n            if let TokenKind::Space(v) = &mut token.kind {\n                if let Some(TokenKind::Newline(_)) = &prev_kind {\n                    // Lines in multiline docstrings are indented with spaces to match the current level.\n                    // We need to remove such spaces to avoid triggering French spaces rule.\n                    *v = 0;\n                } else {\n                    *v = (*v).clamp(0, 1);\n                }\n            }\n\n            prev_kind = Some(&token.kind);\n        }\n\n        tokens\n    }\n}\n\nfn parent_is_expression_statement<'a>(node: &Node<'a>) -> Option<Node<'a>> {\n    node.parent()\n        .filter(|n| n.kind() == \"string\")\n        .and_then(|string_node| string_node.parent())\n        .filter(|n| n.kind() == \"expression_statement\")\n}\n\n#[inline]\nfn is_module_level_docstring(expr_stmt: &Node) -> bool {\n    // (module . (expression_statement (string)))\n    expr_stmt.parent().is_some_and(|n| n.kind() == \"module\")\n}\n\n#[inline]\nfn is_fn_or_class_docstrings(expr_stmt: &Node) -> bool {\n    // (class/func_definition body: (block . (expression_statement (string))))\n    expr_stmt\n        .parent()\n        .filter(|n| n.kind() == \"block\")\n        .and_then(|n| n.parent())\n        .is_some_and(|n| n.kind() == \"function_definition\" || n.kind() == \"class_definition\")\n}\n\n#[inline]\nfn is_attribute_docstring(expr_stmt: &Node) -> bool {\n    // ((expression_statement (assignment)) . (expression_statement (string)))\n    expr_stmt\n        .prev_sibling()\n        .filter(|s| s.kind() == \"expression_statement\")\n        .and_then(|s| s.child(0))\n        .is_some_and(|c| c.kind() == \"assignment\")\n}\n"
  },
  {
    "path": "harper-python/tests/run_tests.rs",
    "content": "use harper_core::linting::{LintGroup, Linter};\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\nuse harper_python::PythonParser;\n\n/// Creates a unit test checking Python source code parsing.\nmacro_rules! create_test {\n    ($filename:ident.$ext:ident, $correct_expected:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_$ext _ $filename _correctly>](){\n                 let source = include_str!(\n                    concat!(\n                        \"./test_sources/\",\n                        concat!(\n                        stringify!($filename), \".\", stringify!($ext))\n                    )\n                 );\n\n                 let parser = PythonParser::default();\n                 let dict = FstDictionary::curated();\n                 let document = Document::new(&source, &parser, &dict);\n\n                 let mut linter = LintGroup::new_curated(dict, Dialect::American);\n                 let lints = linter.lint(&document);\n\n                 dbg!(&lints);\n                 assert_eq!(lints.len(), $correct_expected);\n\n                 // Make sure that all generated tokens span real characters\n                 for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                 }\n            }\n        }\n    };\n}\n\ncreate_test!(docstrings.py, 4);\ncreate_test!(field_docstrings.py, 2);\ncreate_test!(comments.py, 1);\n"
  },
  {
    "path": "harper-python/tests/test_sources/comments.py",
    "content": "\n# This is a camment.\n\nheader = \"This is a haeder.\"\n\ndef main():\n    welcome_message = \"Hellom World!\""
  },
  {
    "path": "harper-python/tests/test_sources/docstrings.py",
    "content": "\"\"\"Errors should never passs silently\"\"\"\ndef main():\n    \"\"\"Beautifull is better than ugly.\"\"\"\n\n\nclass Main:\n    \"\"\"Explicit is better than implicet.\"\"\"\n\n    def __init__(self):\n        \"\"\"Flat is bettter than nested.\"\"\"\n        pass\n\n\n\ndef multiline_docstring(action_name: str):\n    \"\"\"Perform the specified action.\n\n    Available actions:\n     - stop\n     - start\n     - pause\n    \"\"\""
  },
  {
    "path": "harper-python/tests/test_sources/field_docstrings.py",
    "content": "class Result:\n    output_path: str\n    \"\"\"The path to the autput file.\"\"\"\n    status: str\n    \"\"\"The stotus of the job.\"\"\"\n"
  },
  {
    "path": "harper-stats/Cargo.toml",
    "content": "[package]\nname = \"harper-stats\"\nversion = \"1.12.0\"\nedition = \"2021\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nreadme = \"README.md\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nserde = { version = \"1.0.228\", features = [\"derive\"] }\nharper-core = { path = \"../harper-core\", version = \"1.0.0\", features = [\"concurrent\"] }\nuuid = { version = \"1.22.0\", features = [\"serde\", \"v4\"] }\nserde_json = \"1.0.149\"\nchrono = \"0.4.44\"\n\n[features]\ndefault = []\njs = [\"uuid/js\"]\n"
  },
  {
    "path": "harper-stats/README.md",
    "content": "# `harper-stats`\n\nThis crate contains the centralized logic for Harper's statistics logging.\n"
  },
  {
    "path": "harper-stats/src/lib.rs",
    "content": "mod record;\nmod summary;\n\nuse std::io::{self, Read, Write};\nuse std::io::{BufRead, BufReader};\n\nuse harper_core::TokenKind;\npub use record::Record;\npub use record::RecordKind;\nuse serde::Serialize;\nuse serde_json::Serializer;\npub use summary::Summary;\n\n/// A collection of logged statistics for the various Harper frontends.\n#[derive(Debug, Clone, Eq, PartialEq)]\npub struct Stats {\n    pub records: Vec<Record>,\n}\n\nimpl Stats {\n    pub fn new() -> Self {\n        Self {\n            records: Vec::new(),\n        }\n    }\n\n    /// Count the number of each kind of lint applied.\n    pub fn summarize(&self) -> Summary {\n        let mut summary = Summary::new();\n\n        for record in &self.records {\n            match &record.kind {\n                RecordKind::Lint { kind, context } => {\n                    summary.inc_lint_count(*kind);\n\n                    for tok in context {\n                        if let TokenKind::Word(None) = tok.kind {\n                            summary.inc_misspelled_count(&tok.content);\n                        }\n                    }\n                }\n                RecordKind::LintConfigUpdate(lint_group_config) => {\n                    summary.final_config = lint_group_config.clone();\n                }\n            }\n        }\n\n        summary\n    }\n\n    /// Write the records from `self`.\n    /// Expects the target buffer to either be empty or already be terminated by a newline.\n    pub fn write(&self, w: &mut impl Write) -> io::Result<()> {\n        for record in &self.records {\n            let mut serializer = Serializer::new(&mut *w);\n            record.serialize(&mut serializer)?;\n            writeln!(w)?;\n        }\n\n        Ok(())\n    }\n\n    /// Read records from a buffer into `self`.\n    /// Assumes the buffer is properly formatted and terminated with a newline.\n    /// An empty buffer will result in no mutation to `self`.\n    pub fn read(r: &mut impl Read) -> io::Result<Self> {\n        let br = BufReader::new(r);\n        let mut records = Vec::new();\n\n        for line_res in br.lines() {\n            let line = line_res?;\n\n            let record: Record = serde_json::from_str(&line)?;\n            records.push(record);\n        }\n\n        Ok(Self { records })\n    }\n}\n\nimpl Default for Stats {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n"
  },
  {
    "path": "harper-stats/src/record.rs",
    "content": "use harper_core::{\n    linting::{Lint, LintGroupConfig, LintKind},\n    Document, FatStringToken,\n};\nuse serde::{Deserialize, Serialize};\nuse uuid::Uuid;\n\n#[derive(Debug, Deserialize, Serialize, Clone, Eq, PartialEq)]\npub struct Record {\n    pub kind: RecordKind,\n    /// Recorded as seconds from the Unix Epoch\n    pub when: i64,\n    pub uuid: Uuid,\n}\n\nimpl Record {\n    /// Record a new instance at the current system time.\n    pub fn now(kind: RecordKind) -> Self {\n        Self {\n            kind,\n            when: chrono::Utc::now().timestamp(),\n            uuid: Uuid::new_v4(),\n        }\n    }\n}\n\n#[derive(Debug, Deserialize, Serialize, Clone, Eq, PartialEq)]\npub enum RecordKind {\n    Lint {\n        kind: LintKind,\n        context: Vec<FatStringToken>,\n    },\n    LintConfigUpdate(LintGroupConfig),\n}\n\nimpl RecordKind {\n    pub fn from_lint(lint: &Lint, doc: &Document) -> Self {\n        Self::Lint {\n            kind: lint.lint_kind,\n            context: doc\n                .fat_tokens_intersecting(lint.span)\n                .into_iter()\n                .map(|t| t.into())\n                .collect(),\n        }\n    }\n}\n"
  },
  {
    "path": "harper-stats/src/summary.rs",
    "content": "use std::{collections::HashMap, fmt::Display};\n\nuse harper_core::linting::{LintGroupConfig, LintKind};\nuse serde::{Deserialize, Serialize};\n\n#[derive(Debug, Default, Serialize, Deserialize)]\npub struct Summary {\n    pub lint_counts: HashMap<LintKind, u32>,\n    pub total_applied: u32,\n    pub final_config: LintGroupConfig,\n    // The most common misspelled words.\n    pub misspelled: HashMap<String, u32>,\n}\n\nimpl Summary {\n    pub fn new() -> Self {\n        Self::default()\n    }\n\n    /// Increment the count for a particular lint kind.\n    pub fn inc_lint_count(&mut self, kind: LintKind) {\n        self.lint_counts\n            .entry(kind)\n            .and_modify(|counter| *counter += 1)\n            .or_insert(1);\n        self.total_applied += 1;\n    }\n\n    /// Increment the count for a particular misspelled word.\n    pub fn inc_misspelled_count(&mut self, word: impl AsRef<str>) {\n        if let Some(counter) = self.misspelled.get_mut(word.as_ref()) {\n            *counter += 1\n        } else {\n            self.misspelled.insert(word.as_ref().to_owned(), 1);\n        }\n    }\n\n    /// Get the count for a particular lint kind.\n    pub fn get_count(&self, kind: LintKind) -> u32 {\n        self.lint_counts.get(&kind).copied().unwrap_or(0)\n    }\n}\n\nimpl Display for Summary {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        writeln!(f, \"`LintKind` counts\")?;\n        writeln!(f, \"=================\")?;\n\n        for (kind, count) in &self.lint_counts {\n            writeln!(f, \"{kind}\\t{count}\")?;\n        }\n\n        writeln!(f, \"Misspelling counts\")?;\n        writeln!(f, \"=================\")?;\n\n        let mut misspelled: Vec<_> = self\n            .misspelled\n            .iter()\n            .map(|(a, b)| (a.clone(), *b))\n            .collect();\n\n        misspelled.sort_by_key(|(_a, b)| u32::MAX - b);\n\n        for (kind, count) in &misspelled {\n            writeln!(f, \"{kind}\\t{count}\")?;\n        }\n\n        Ok(())\n    }\n}\n"
  },
  {
    "path": "harper-tex/Cargo.toml",
    "content": "[package]\nname = \"harper-tex\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\n\n[dev-dependencies]\npaste = \"1.0.15\"\n"
  },
  {
    "path": "harper-tex/src/lib.rs",
    "content": "mod masker;\n\nuse harper_core::parsers::{Mask, Parser, PlainEnglish};\nuse harper_core::{Punctuation, Span, Token, TokenKind};\n\nuse self::masker::Masker;\n\n/// A parser for Harper that wraps the native `PlainEnglish` parser, allowing one use Harper on\n/// documents written in TeX, LaTeX, or any other TeX derivative.\n///\n/// This parser is crude, and could definitely use work if all features of Harper wish to be\n/// supported for the language.\npub struct TeX {\n    inner: Mask<Masker, PlainEnglish>,\n}\n\nimpl Default for TeX {\n    fn default() -> Self {\n        Self {\n            inner: Mask::new(Default::default(), PlainEnglish),\n        }\n    }\n}\n\nimpl Parser for TeX {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let tokens = self.inner.parse(source);\n        collapse_tex_dashes(tokens)\n    }\n}\n\nfn collapse_tex_dashes(tokens: Vec<Token>) -> Vec<Token> {\n    let mut out = Vec::with_capacity(tokens.len());\n    let mut i = 0;\n\n    while i < tokens.len() {\n        let is_triple_hyphen = i + 2 < tokens.len()\n            && matches!(tokens[i].kind, TokenKind::Punctuation(Punctuation::Hyphen))\n            && matches!(\n                tokens[i + 1].kind,\n                TokenKind::Punctuation(Punctuation::Hyphen)\n            )\n            && matches!(\n                tokens[i + 2].kind,\n                TokenKind::Punctuation(Punctuation::Hyphen)\n            )\n            && tokens[i].span.end == tokens[i + 1].span.start\n            && tokens[i + 1].span.end == tokens[i + 2].span.start;\n\n        if is_triple_hyphen {\n            out.push(Token::new(\n                Span::new(tokens[i].span.start, tokens[i + 2].span.end),\n                TokenKind::Punctuation(Punctuation::EmDash),\n            ));\n            i += 3;\n            continue;\n        }\n\n        let is_double_hyphen = i + 1 < tokens.len()\n            && matches!(tokens[i].kind, TokenKind::Punctuation(Punctuation::Hyphen))\n            && matches!(\n                tokens[i + 1].kind,\n                TokenKind::Punctuation(Punctuation::Hyphen)\n            )\n            && tokens[i].span.end == tokens[i + 1].span.start;\n\n        if is_double_hyphen {\n            out.push(Token::new(\n                Span::new(tokens[i].span.start, tokens[i + 1].span.end),\n                TokenKind::Punctuation(Punctuation::EnDash),\n            ));\n            i += 2;\n            continue;\n        }\n\n        out.push(tokens[i].clone());\n        i += 1;\n    }\n\n    out\n}\n\n#[cfg(test)]\nmod tests {\n    use harper_core::TokenKind;\n    use harper_core::parsers::StrParser;\n\n    use crate::TeX;\n\n    #[test]\n    fn ignores_comment_characters() {\n        let source = r\"%!!%\";\n\n        let toks = TeX::default().parse_str(source);\n        let tok_kinds: Vec<_> = toks.into_iter().map(|t| t.kind).collect();\n\n        assert_eq!(\n            tok_kinds,\n            vec![\n                TokenKind::Punctuation(harper_core::Punctuation::Bang),\n                TokenKind::Punctuation(harper_core::Punctuation::Bang),\n            ]\n        )\n    }\n\n    #[test]\n    fn passes_comment_characters_preceded_by_backslash() {\n        let source = r\"\\%!!\";\n\n        let toks = TeX::default().parse_str(source);\n        let tok_kinds: Vec<_> = toks.into_iter().map(|t| t.kind).collect();\n\n        assert_eq!(\n            tok_kinds,\n            vec![\n                TokenKind::Punctuation(harper_core::Punctuation::Bang),\n                TokenKind::Punctuation(harper_core::Punctuation::Bang)\n            ]\n        )\n    }\n\n    #[test]\n    fn parses_triple_hyphen_as_em_dash() {\n        let source = \"A---B\";\n\n        let toks = TeX::default().parse_str(source);\n        let tok_kinds: Vec<_> = toks.into_iter().map(|t| t.kind).collect();\n\n        assert_eq!(\n            tok_kinds,\n            vec![\n                TokenKind::Word(None),\n                TokenKind::Punctuation(harper_core::Punctuation::EmDash),\n                TokenKind::Word(None),\n            ]\n        )\n    }\n\n    #[test]\n    fn parses_double_hyphen_as_en_dash() {\n        let source = \"A--B\";\n\n        let toks = TeX::default().parse_str(source);\n        let tok_kinds: Vec<_> = toks.into_iter().map(|t| t.kind).collect();\n\n        assert_eq!(\n            tok_kinds,\n            vec![\n                TokenKind::Word(None),\n                TokenKind::Punctuation(harper_core::Punctuation::EnDash),\n                TokenKind::Word(None),\n            ]\n        )\n    }\n}\n"
  },
  {
    "path": "harper-tex/src/masker.rs",
    "content": "use std::collections::VecDeque;\n\nuse harper_core::{CharStringExt, Mask, Span};\n\n#[derive(Debug, Default)]\npub struct Masker {}\n\nimpl harper_core::Masker for Masker {\n    fn create_mask(&self, source: &[char]) -> Mask {\n        let mut cursor = 0;\n        let mut mask = Mask::new_blank();\n\n        let mut cur_mask_start = 0;\n        let mut actions = VecDeque::new();\n\n        loop {\n            if cursor >= source.len() {\n                break;\n            }\n\n            let c = source[cursor];\n\n            if matches!(c, '%') {\n                actions.push_back(CursorAction::PushMaskAndIncBy(1));\n            } else if let Some(s) = math_mode_at_cursor(cursor, source) {\n                actions.push_back(CursorAction::PushMaskAndIncBy(s));\n            } else if let Some(s) = equation_at_cursor(cursor, source) {\n                actions.push_back(CursorAction::PushMaskAndIncBy(s));\n            } else if !command_at_cursor(cursor, source, &mut actions) {\n                actions.push_back(CursorAction::IncBy(1));\n            }\n\n            while let Some(action) = actions.pop_front() {\n                match action {\n                    CursorAction::IncBy(n) => cursor = (cursor + n).min(source.len()),\n                    CursorAction::PushMaskAndIncBy(mut n) => {\n                        if cur_mask_start != cursor {\n                            mask.push_allowed(Span::new(cur_mask_start, cursor));\n                        }\n\n                        n = (cursor + n).min(source.len());\n\n                        cursor = n;\n                        cur_mask_start = n;\n                    }\n                }\n            }\n        }\n\n        if cur_mask_start != cursor {\n            mask.push_allowed(Span::new(cur_mask_start, cursor));\n        }\n\n        mask\n    }\n}\n\n/// Check whether there is a math mode block at the current cursor. If so, this function will return the amount cursor needs to be incremented by in order to escape the block.\nfn math_mode_at_cursor(cursor: usize, source: &[char]) -> Option<usize> {\n    if *source.get(cursor)? != '$' {\n        return None;\n    }\n\n    Some(\n        source\n            .iter()\n            .skip(cursor + 1)\n            .take_while(|t| **t != '$')\n            .count()\n            + 2,\n    )\n}\n\n/// Check whether there is a command at the current cursor. If so, this function will update the action queue to mask out the hidden elements.\n/// Returns whether the action queue was modified.\nfn command_at_cursor(cursor: usize, source: &[char], actions: &mut VecDeque<CursorAction>) -> bool {\n    let Some(CommandComponents {\n        name,\n        square_content,\n        curly_content,\n    }) = deconstruct_command(&source[cursor..])\n    else {\n        return false;\n    };\n\n    let content_commands = [\n        \"section\",\n        \"title\",\n        \"subsection\",\n        \"subsubsection\",\n        \"textbf\",\n        \"textit\",\n        \"emph\",\n        \"author\",\n        \"part\",\n        \"chapter\",\n        \"caption\",\n    ];\n    let is_content_command = content_commands\n        .iter()\n        .any(|c| name.iter().copied().eq(c.chars()));\n\n    let diff = 1 + name.len() + square_content.map(|c| c.len() + 2).unwrap_or_default();\n\n    if let Some(curly_content) = curly_content {\n        if is_content_command {\n            actions.push_back(CursorAction::PushMaskAndIncBy(diff + 1));\n            actions.push_back(CursorAction::IncBy(curly_content.len()));\n            actions.push_back(CursorAction::PushMaskAndIncBy(1));\n            true\n        } else {\n            actions.push_back(CursorAction::PushMaskAndIncBy(\n                curly_content.len() + diff + 1,\n            ));\n            true\n        }\n    } else {\n        actions.push_back(CursorAction::PushMaskAndIncBy(diff));\n        true\n    }\n}\n\nfn equation_at_cursor(cursor: usize, source: &[char]) -> Option<usize> {\n    let CommandComponents {\n        name,\n        square_content,\n        curly_content,\n    } = deconstruct_command(&source[cursor..])?;\n\n    if name.eq_ignore_ascii_case_str(\"begin\")\n        && curly_content.is_some_and(|cc| cc.eq_ignore_ascii_case_str(\"equation\"))\n    {\n        let mut diff = 1\n            + name.len()\n            + curly_content.unwrap().len()\n            + square_content.map(|sc| sc.len()).unwrap_or_default();\n\n        loop {\n            if let Some(CommandComponents {\n                name,\n                curly_content,\n                ..\n            }) = deconstruct_command(&source[cursor + diff..])\n                && name.eq_ignore_ascii_case_str(\"end\")\n                && curly_content.is_some_and(|cc| cc.eq_ignore_ascii_case_str(\"equation\"))\n            {\n                break;\n            }\n\n            diff += 1;\n        }\n\n        Some(diff)\n    } else {\n        None\n    }\n}\n\nstruct CommandComponents<'a> {\n    /// The command's name.\n    pub name: &'a [char],\n    /// The content of the command's square bracket arguments.\n    pub square_content: Option<&'a [char]>,\n    /// The content of the command's curly bracket arguments.\n    pub curly_content: Option<&'a [char]>,\n}\n\n/// Deconstruct a command into its constituent components.\n/// Assumes the command is at the beginning of the slice.\n/// Returns `None` if not command is present at the expected position.\nfn deconstruct_command<'a>(source: &'a [char]) -> Option<CommandComponents<'a>> {\n    let mut cursor = 0;\n\n    if source.get(cursor) != Some(&'\\\\') {\n        return None;\n    }\n\n    cursor += 1;\n\n    // The name of the command\n    let name_len = source\n        .iter()\n        .skip(cursor + 1)\n        .take_while(|t| t.is_alphabetic())\n        .count();\n    let name = &source[cursor..cursor + 1 + name_len];\n\n    cursor += name_len + 1;\n\n    // The optional square braces\n    let square_content = if source.get(cursor) == Some(&'[') {\n        cursor += 1;\n\n        let brace_len = source\n            .iter()\n            .skip(cursor)\n            .take_while(|t| **t != ']')\n            .count();\n\n        let content = &source[cursor..cursor + brace_len];\n\n        cursor += brace_len + 1;\n        Some(content)\n    } else {\n        None\n    };\n\n    // The optional square braces\n    let curly_content = if source.get(cursor) == Some(&'{') {\n        cursor += 1;\n\n        let brace_len = source\n            .iter()\n            .skip(cursor)\n            .take_while(|t| **t != '}')\n            .count();\n\n        let content = &source[cursor..cursor + brace_len];\n        Some(content)\n    } else {\n        None\n    };\n\n    Some(CommandComponents {\n        name,\n        square_content,\n        curly_content,\n    })\n}\n\n#[derive(Debug)]\nenum CursorAction {\n    IncBy(usize),\n    PushMaskAndIncBy(usize),\n}\n\n#[cfg(test)]\nmod tests {\n    use harper_core::Masker as _;\n\n    use crate::masker::CommandComponents;\n\n    use super::{Masker, deconstruct_command};\n\n    #[test]\n    fn ignores_many_comment_signs() {\n        let source: Vec<_> = \"%%%\".chars().collect();\n        let mask = Masker::default().create_mask(&source);\n\n        assert_eq!(mask.iter_allowed(&source).next(), None)\n    }\n\n    #[test]\n    fn ignores_single_comment_sign() {\n        let source: Vec<_> = \"%\".chars().collect();\n        let mask = Masker::default().create_mask(&source);\n\n        assert_eq!(mask.iter_allowed(&source).next(), None)\n    }\n\n    #[test]\n    fn ignores_single_comment_sign_in_phrase() {\n        let source: Vec<_> = \"this is a comment: % here it is!\".chars().collect();\n        let mask = Masker::default().create_mask(&source);\n\n        assert_eq!(mask.iter_allowed(&source).count(), 2)\n    }\n\n    #[test]\n    fn ignores_latex_command() {\n        let source: Vec<_> = r\"this is a command: \\LaTeX there it was!\".chars().collect();\n        let mask = Masker::default().create_mask(&source);\n\n        assert_eq!(mask.iter_allowed(&source).count(), 2)\n    }\n\n    #[test]\n    fn emits_all_command_components_correctly() {\n        let source: Vec<_> = r\"\\begin[some]{math}\".chars().collect();\n        let CommandComponents {\n            name,\n            square_content,\n            curly_content,\n        } = deconstruct_command(&source).unwrap();\n\n        assert_eq!(name.iter().collect::<String>(), \"begin\");\n        assert_eq!(square_content.unwrap().iter().collect::<String>(), \"some\");\n        assert_eq!(curly_content.unwrap().iter().collect::<String>(), \"math\");\n    }\n\n    #[test]\n    fn emits_command_curly_component_correctly() {\n        let source: Vec<_> = r\"\\begin{math}\".chars().collect();\n        let CommandComponents {\n            name,\n            square_content,\n            curly_content,\n        } = deconstruct_command(&source).unwrap();\n\n        assert_eq!(name.iter().collect::<String>(), \"begin\");\n        assert_eq!(square_content, None);\n        assert_eq!(curly_content.unwrap().iter().collect::<String>(), \"math\");\n    }\n\n    #[test]\n    fn emits_command_square_component_correctly() {\n        let source: Vec<_> = r\"\\begin[some]\".chars().collect();\n        let CommandComponents {\n            name,\n            square_content,\n            curly_content,\n        } = deconstruct_command(&source).unwrap();\n\n        assert_eq!(name.iter().collect::<String>(), \"begin\");\n        assert_eq!(square_content.unwrap().iter().collect::<String>(), \"some\");\n        assert_eq!(curly_content, None);\n    }\n\n    #[test]\n    fn emits_section_correctly() {\n        let source: Vec<_> = r\"\\section{Energy and Environment}\".chars().collect();\n        let CommandComponents {\n            name,\n            square_content,\n            curly_content,\n        } = deconstruct_command(&source).unwrap();\n\n        assert_eq!(name.iter().collect::<String>(), \"section\");\n        assert_eq!(square_content, None);\n        assert_eq!(\n            curly_content.unwrap().iter().collect::<String>(),\n            \"Energy and Environment\"\n        );\n    }\n}\n"
  },
  {
    "path": "harper-tex/tests/run_tests.rs",
    "content": "use harper_core::linting::{LintGroup, Linter};\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\nuse harper_tex::TeX;\n\n/// Creates a unit test checking that the linting of a document in\n/// `tests_sources` produces the expected number of lints.\nmacro_rules! create_test {\n    ($filename:ident.$ext:ident, $correct_expected:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_ $filename _correctly>](){\n                 let source = include_str!(\n                    concat!(\n                        \"./test_sources/\",\n                        concat!(stringify!($filename), \".\", stringify!($ext))\n                    )\n                 );\n\n                 let dict = FstDictionary::curated();\n                 let document = Document::new(&source, &TeX::default(), &dict);\n\n                 let mut linter = LintGroup::new_curated(dict, Dialect::American);\n                 let lints = linter.lint(&document);\n\n                 dbg!(&lints);\n                 assert_eq!(lints.len(), $correct_expected);\n\n                 // Make sure that all generated tokens span real characters\n                 for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                 }\n            }\n        }\n    };\n}\n\ncreate_test!(clean.tex, 0);\ncreate_test!(simple.tex, 1);\ncreate_test!(heading.tex, 1);\ncreate_test!(title.tex, 1);\ncreate_test!(city.tex, 0);\ncreate_test!(many_tags.tex, 6);\ncreate_test!(many_more_tags.tex, 11);\ncreate_test!(em_dash.tex, 0);\ncreate_test!(issue_2835.tex, 3);\n"
  },
  {
    "path": "harper-tex/tests/test_sources/city.tex",
    "content": "\\documentclass{article}\n\n\\usepackage[margin=1in]{geometry}\n\n\\title{Urban Development Report: The fictional city}\n\\author{Department of Civic Studies}\n\\date{\\today}\n\n\\begin{document}\n\n\\maketitle\n\n\\section{Executive Summary}\n\nThe fictional city is a fictional coastal city known for its advanced infrastructure, cultural diversity, and sustainable urban planning. The city serves as a model for integrated transportation systems and renewable energy adoption.\n\n\\section{Geography}\n\nThe fictional city is located along a crescent-shaped bay bordered by low mountain ranges to the north and wetlands to the south. The natural harbor enables a strong shipping industry while also supporting marine biodiversity zones protected by city law.\n\n\\section{Population}\n\nThe population of The fictional city is approximately 2.3 million residents. The city has a balanced demographic distribution with strong representation across age groups and professional sectors. Over 40 percent of residents work in research, technology, or education fields.\n\n\\section{Infrastructure}\n\nThe transportation network consists of elevated rail, underground metro lines, and autonomous electric bus corridors. Private car ownership is low due to efficient public transit coverage and pedestrian-first city zoning.\n\n\\section{Energy and Environment}\n\nThe fictional city operates on a hybrid renewable grid powered by offshore wind farms, tidal generators, and urban solar arrays integrated into building materials. The city maintains a carbon-negative energy profile during most months of the year.\n\n\\section{Culture}\n\nThe city is known for its annual Festival of Lights, public waterfront amphitheaters, and a dense network of public libraries and maker spaces. Local policy requires that new construction projects allocate space for public art installations.\n\n\\section{Economy}\n\nMajor economic sectors include marine engineering, climate technology research, and digital education services. The city government provides tax incentives for companies developing environmental restoration technologies.\n\n\\section{Conclusion}\n\nThe fictional city represents a theoretical model of a future-oriented city balancing technological progress, environmental stewardship, and high quality of life for residents.\n\n\\end{document}\n"
  },
  {
    "path": "harper-tex/tests/test_sources/clean.tex",
    "content": "\\documentclass[12pt]{article}\n\n\\usepackage[utf8]{inputenc}\n\\usepackage[T1]{fontenc}\n\\usepackage{geometry}\n\\usepackage{amsmath}\n\\usepackage{graphicx}\n\\usepackage{hyperref}\n\n\\geometry{margin=1in}\n\n\\title{A Small Representative Document}\n\\author{Author Name}\n\\date{\\today}\n\n\\begin{document}\n\n\\maketitle\n\n\\begin{abstract}\nThis document demonstrates a minimal but representative structure of a LaTeX article, including sections, mathematics, figures, and references.\n\\end{abstract}\n\n\\section{Introduction}\n\nLaTeX is widely used for scientific and technical documents because of its precision and typographic quality. This document provides a concise example of common elements.\n\n\\section{Mathematics Example}\n\nInline math example: $E = mc^2$.\n\nDisplayed equation:\n\\begin{equation}\n\\int_0^\\infty e^{-x^2} dx = \\frac{\\sqrt{\\pi}}{2}\n\\end{equation}\n\n\\section{Lists}\n\n\\subsection{Itemized List}\n\\begin{itemize}\n\\item First item\n\\item Second item\n\\item Third item\n\\end{itemize}\n\n\\subsection{Enumerated List}\n\\begin{enumerate}\n\\item Step one\n\\item Step two\n\\item Step three\n\\end{enumerate}\n\n\\section{Figures}\n\n\\begin{figure}[h]\n\\centering\n\\includegraphics[width=0.5\\textwidth]{example-image}\n\\caption{Example placeholder image}\n\\label{fig:example}\n\\end{figure}\n\n\\section{Conclusion}\n\nThis sample illustrates a typical structure suitable for academic or technical writing.\n\n\\end{document}\n"
  },
  {
    "path": "harper-tex/tests/test_sources/em_dash.tex",
    "content": "\\documentclass{article}\n\n\\begin{document}\n\nNo one's expecting you to drink yourself under the table---no one's ever expected that---but maybe a tipple is what you need after today.\n\n\\end{document}\n"
  },
  {
    "path": "harper-tex/tests/test_sources/heading.tex",
    "content": "\\documentclass{article}\n\n\\begin{document}\n\n\\section{This is an test.}\n\nHello, world.\n\n\\end{document}\n"
  },
  {
    "path": "harper-tex/tests/test_sources/issue_2835.tex",
    "content": "\\documentclass[11pt]{article}\n\n\\begin{document}\n\\section{TEST}\nerrawr % this will work\nthis is an \\test\nerrawr % this will work\nthis is an $\\test$\nerrawr % this will break\n\\end{document}\n"
  },
  {
    "path": "harper-tex/tests/test_sources/many_more_tags.tex",
    "content": "\\documentclass{report}\n\n\\usepackage[margin=1in]{geometry}\n\n\\title{Shwcase of Common Readable Content Commands}\n\\author{Exmple Author}\n\\date{\\today}\n\n\\begin{document}\n\n\\maketitle\n\n\\begin{abstract}\nThis abstract demonstrates readable narrative text stored inside the abstract environment.\n\\end{abstract}\n\n\\part{Mjor Structural Content}\n\n\\chapter{Chapter Level Contet}\n\n\\section{ection Level Content}\n\nThis is normal readable body text inside the document environment. \n\nHere is inline readable text using \\emph{emphasized cntent} and \\textbf{stongly highlighted content}.\n\n\\subsection{Subsection Level Cntent}\n\nThis subsection contains additional explanatory readable text that expands on the section above.\n\n\\subsubsection{Sbsubsection Level Content}\n\nThis level often contains very specific technical or descriptive readable information.\n\n\\paragraph{Pragraph Command Content}\n\nThis command typically introduces a short readable heading followed immediately by readable explanatory text.\n\n\\begin{figure}[h]\n\\centering\n\\rule{6cm}{3cm}\n\\caption{This cption demonstrates dense readable description explaining the figure meaning and Kontext.}\n\\end{figure}\n\n\\end{document}\n"
  },
  {
    "path": "harper-tex/tests/test_sources/many_tags.tex",
    "content": "\\documentclass{article}\n\n\\usepackage[margin=1in]{geometry}\n\\title{Demonstration of Readable Content Structures}\n\\author{Exmple Author}\n\\date{\\today}\n\n\\begin{document}\n\n\\maketitle\n\n\\begin{abstract}\nThis document demonstrates common LaTeX structures that typically contain readable content for humans rather than configuration or layout-only logic.\n\\end{abstract}\n\n\\section{Introduction}\n\nThis is normal body text, which in LaTeX is already primary readable content. \nHere is some \\textbf{bold readable text} and some \\emph{emhasized readable text}.\n\n\\subsection{Structured Environmnts}\n\n\\begin{quote}\nScience is what we understnd well enough to explain to a computer. Art is everything else we do.\n\\end{quote}\n\n\\begin{quotation}\nLong-form quoted text often lives in qotation environments. These typically contain dense narrative or explanatory prose and are high-signal readable regions.\n\\end{quotation}\n\n\\begin{verse}\nIn structured lines the meaning flows,\\\\\nBetween the commands the language grows.\n\\end{verse}\n\n\\section{Figures and capptions}\n\n\\begin{figure}[h]\n\\centering\n\\rule{6cm}{3cm}\n\\caption{This caption contains concise human-readable explanatory text describing the figure.}\n\\end{figure}\n\n\\end{document}\n"
  },
  {
    "path": "harper-tex/tests/test_sources/simple.tex",
    "content": "\\documentclass{article}\n\n\\begin{document}\n\nThis is an test.\n\n\\end{document}\n"
  },
  {
    "path": "harper-tex/tests/test_sources/title.tex",
    "content": "\\documentclass{article}\n\n\\title{This is an test.}\n\n\\begin{document}\n\nHello, world.\n\n\\end{document}\n"
  },
  {
    "path": "harper-thesaurus/Cargo.toml",
    "content": "[package]\nname = \"harper-thesaurus\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nhashbrown = \"0.16.0\"\nindexmap = \"2.13.0\"\nitertools = \"0.14.0\"\nruzstd = \"0.8.2\"\n\n[build-dependencies]\nzstd = { version = \"0.13.3\", default-features = false }\n"
  },
  {
    "path": "harper-thesaurus/build.rs",
    "content": "#![warn(clippy::pedantic)]\n\nuse std::env;\nuse std::fs::File;\nuse std::io::{BufReader, BufWriter};\nuse std::path::Path;\n\nconst THESAURUS_PATH: &str = \"thesaurus.txt\";\n\nfn main() {\n    println!(\"cargo::rerun-if-changed={THESAURUS_PATH}\");\n    let out_dir = env::var_os(\"OUT_DIR\").unwrap();\n    let dest_path = Path::new(&out_dir).join(\"compressed-thesaurus.zst\");\n\n    let in_file = File::open(THESAURUS_PATH).expect(\"Thesaurus file exists\");\n    let out_file = File::create(dest_path).expect(\"Can create output file\");\n    let reader = BufReader::new(in_file);\n    let writer = BufWriter::new(out_file);\n\n    // Use a lesser compression level to speed up debug builds.\n    let compression_level = match env::var(\"OPT_LEVEL\").unwrap().as_str() {\n        \"3\" | \"2\" | \"s\" | \"z\" => zstd::zstd_safe::max_c_level(), // 3.84 MiB\n        _ => 4,                                                  // 7.02 MiB\n    };\n\n    zstd::stream::copy_encode(reader, writer, compression_level)\n        .expect(\"Able to write compressed thesaurus\");\n}\n"
  },
  {
    "path": "harper-thesaurus/clippy.toml",
    "content": "disallowed-types = [\"std::collections::HashMap\", \"std::collections::HashSet\"]\n"
  },
  {
    "path": "harper-thesaurus/src/lib.rs",
    "content": "#![warn(clippy::pedantic)]\n\nmod thesaurus;\n\npub use thesaurus::thesaurus;\n"
  },
  {
    "path": "harper-thesaurus/src/thesaurus.rs",
    "content": "use ruzstd::io::Read;\nuse std::sync::OnceLock;\n\nuse hashbrown::HashMap;\nuse indexmap::IndexSet;\nuse ruzstd::decoding::StreamingDecoder;\n\nstatic COMPRESSED_THESAURUS: &[u8] =\n    include_bytes!(concat!(env!(\"OUT_DIR\"), \"/compressed-thesaurus.zst\"));\nstatic RAW_WORD_FREQUENCY_TEXT: &str = include_str!(\"../word-freq.txt\");\n\n/// Gets a read-only reference to the thesaurus.\npub fn thesaurus() -> &'static Thesaurus {\n    static THESAURUS: OnceLock<Thesaurus> = OnceLock::new();\n    THESAURUS.get_or_init(Thesaurus::new)\n}\n\n/// A list of words numbered by frequency of use. The most common word will have a number of 0, and\n/// rarer words count up from there.\nfn word_freq_map() -> &'static HashMap<String, u32> {\n    static WORD_FREQ_LIST: OnceLock<HashMap<String, u32>> = OnceLock::new();\n    WORD_FREQ_LIST.get_or_init(|| {\n        RAW_WORD_FREQUENCY_TEXT\n            .lines()\n            .enumerate()\n            .map(|(i, word)| (word.to_owned(), u32::try_from(i).unwrap()))\n            .collect()\n    })\n}\n\npub struct Thesaurus {\n    /// Contains the words in the thesaurus and their corresponding synonyms, both as indices into\n    /// [`Self::deduped_word_set`].\n    entries: HashMap<usize, Vec<usize>>,\n    /// Contains (and holds ownership of) all words that occur in the thesaurus, deduped.\n    deduped_word_set: IndexSet<String>,\n}\nimpl Thesaurus {\n    fn new() -> Thesaurus {\n        let mut entries = HashMap::new();\n        let mut deduped_word_set = IndexSet::<String>::new();\n\n        let mut decoder = StreamingDecoder::new(COMPRESSED_THESAURUS).unwrap();\n        let mut raw_thesaurus_text = Vec::new();\n        decoder\n            .read_to_end(&mut raw_thesaurus_text)\n            .expect(\"Compressed thesaurus is a valid ZSTD file\");\n\n        let raw_thesaurus_text =\n            str::from_utf8(&raw_thesaurus_text).expect(\"Thesaurus content is valid UTF-8\");\n\n        for line in raw_thesaurus_text.lines() {\n            let mut words = line.split(',');\n            let Some(entry_word) = words.next() else {\n                // Skip empty lines in thesaurus.\n                continue;\n            };\n            let word_idx = deduped_word_set.get_or_insert_word(entry_word);\n            let synonym_indices = words.map(|word| deduped_word_set.get_or_insert_word(word));\n            entries\n                .try_insert(word_idx, synonym_indices.collect())\n                .expect(\"Only one entry per word in thesaurus\");\n        }\n\n        Self {\n            entries,\n            deduped_word_set,\n        }\n    }\n\n    /// Retrieves a list of synonyms for a given word.\n    pub fn get_synonyms(&self, word: &str) -> Option<Vec<&str>> {\n        Some(\n            self.entries\n                .get(&self.deduped_word_set.get_index_of(word)?)?\n                .iter()\n                .map(|word_idx| -> &str {\n                    self.deduped_word_set\n                        .get_index(*word_idx)\n                        .expect(\"Deduped word set contains all words in thesaurus\")\n                })\n                .collect(),\n        )\n    }\n\n    /// Retrieves a list of synonyms, sorted by the frequency of their use.\n    pub fn get_synonyms_freq_sorted(&self, word: &str) -> Option<Vec<&str>> {\n        let mut syns = self.get_synonyms(word)?;\n        syns.sort_unstable_by_key(|syn| {\n            word_freq_map()\n                .get(&syn.to_ascii_lowercase())\n                .unwrap_or(&u32::MAX)\n        });\n        Some(syns)\n    }\n}\n\ntrait DedupedWordSetExt {\n    /// Gets or insert the provided word.\n    ///\n    /// Returns the index of the word.\n    fn get_or_insert_word(&mut self, word: &str) -> usize;\n}\nimpl DedupedWordSetExt for IndexSet<String> {\n    fn get_or_insert_word(&mut self, word: &str) -> usize {\n        if let Some(idx) = self.get_index_of(word) {\n            idx\n        } else {\n            // Avoid cloning unless we're inserting a new word.\n            self.insert_full(word.to_owned()).0\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    #[test]\n    fn great_is_synonym_of_large() {\n        assert!(\n            super::thesaurus()\n                .get_synonyms(\"large\")\n                .is_some_and(|syns| syns.contains(&\"great\"))\n        );\n    }\n}\n"
  },
  {
    "path": "harper-thesaurus/word-freq.txt",
    "content": "link\nanchor\nen\nlinks\ntitle\ndoc\nabstract\nof\nthe\nexternal\nand\nin\na\nalso\nsee\nc\nhistory\nis\ns\nto\ncareer\ncategory\nlist\npages\nlife\nall\nwith\nfrom\nby\nwas\nshort\nearly\nfor\nschool\nnew\nnotes\non\ndescription\nplace\ne\nas\nunited\narticles\nbirth\nat\nother\nfilm\nan\nb\nnational\nawards\nreading\ndistrict\nfurther\nor\nstation\nit\nworld\nalbum\npersonal\nstates\nhigh\ninternational\nseason\nstate\nseries\nnotable\njohn\ntrack\ndifferent\neducation\namerican\nsouth\npeople\nbiography\nde\nmusic\nmay\nname\nwar\nfootball\nreception\narticle\nbibliography\nlisting\nrailway\nuniversity\ndeath\ncollege\nd\npark\nthat\ni\ncity\nsong\nfirst\nbackground\nplot\ncounty\nf\nband\ntelevision\nm\nrefer\nnorth\nleague\nworks\ngeography\nfamily\none\nn\nolympics\ntv\nwest\nelection\nu\naustralia\npersonnel\nclub\nyears\nbritish\nborn\nproduction\nsummer\nare\nresults\nvideo\nculture\nroute\nmembers\nyork\ngame\nlacking\nteam\nlanguage\ngroup\ngallery\nbattle\npolitical\ngeneral\nwilliam\ncup\nriver\ntype\ncanada\nr\ncharacters\nmedia\ncast\nyear\nt\nhouse\ncouncil\nwhich\nv\nchurch\ndevelopment\no\ngames\nkingdom\nassociation\nstatistics\nl\nservice\nsingles\nparty\nparliament\ndavid\njames\nj\narea\nlegacy\nplaces\naustralian\nknown\nschools\nsystem\nhe\nsports\nlater\ncentury\nmen\nrelease\nunion\nbooks\nengland\nformer\nenglish\ncurrent\nisland\nh\neast\nprofessional\nrecords\nmilitary\ng\npublic\nairport\nlaw\nwork\np\ncompany\ngovernment\nmajor\ntwo\npost\nno\nhis\nk\nclass\nzealand\ntown\nwomen\nchampionship\nroad\nlocation\nair\ndivision\nsecond\nservices\nend\nlake\nline\ncountry\npopular\nthis\nafter\nbe\nwestern\nradio\nthomas\nlive\nthumb\ntime\ncanadian\nday\ncomics\npaul\ntransport\nuse\nbest\nevents\nw\nhuman\nconstituency\nla\npresent\ncritical\npopulation\nart\nbook\ncenter\ncharles\nact\noverview\nindia\nplaying\nalumni\nnovel\ncentral\narts\nal\nsan\nroyal\neuropean\nresearch\nselected\ndesign\nright\ncommunity\neconomy\nscience\npublications\naward\npolitics\nlondon\ncatholic\nbaseball\nsaint\npolitician\nrecord\nsociety\nstructure\nbased\nits\npeter\nused\nvirginia\nimage\nfrench\nhome\nstub\ncourt\nblack\nmarch\nrichard\nduring\nbasketball\nfinal\nperformance\nsummary\nstar\ngreat\nrock\nup\nmuseum\nhall\nhas\nbridge\ngerman\nliterature\nking\njapanese\nireland\nman\nunder\nyou\ndate\ninformation\nbetween\nhockey\nwere\nfootballer\nnorthern\nregion\nfrance\nhill\npublished\namerica\nspecies\nthree\nathletics\narmy\npart\nstadium\ntexas\nmodern\ncoaching\nwater\nnon\nrugby\nhenry\njapan\nfacilities\nset\nactivities\nprovince\nwashington\nstreet\nacademy\nred\nnumber\nmark\nsubdivision\nsurname\nwhite\ncoordinates\ninstitute\nhistorical\npacific\nroman\nindian\nbusiness\nmain\norder\nmost\napril\ntechnology\nactor\nrepublic\nlast\naugust\ngermany\nsocial\nbay\njoseph\ncivil\ngrand\nclimate\npower\ngreen\nold\nhealth\nwriter\nweekly\ndistribution\nsmith\njuly\nlove\nshow\neastern\ntheatre\nfield\noffice\nlong\nlocal\ncricket\nforce\ntour\ncan\nopen\nelectoral\norganization\ndepartment\nsport\nracing\nle\nmanagement\nhonors\nhistoric\ncharacter\nabout\nvalley\nspecial\narchitecture\nnetwork\nice\ntransportation\nmap\nchristian\noperation\ntheory\nrights\nmusical\nfeatures\nprovincial\nrelated\nnames\netymology\nmesh\nafrica\nregional\nfiction\nconstruction\nx\nstyle\nround\nterm\nfederal\nappearances\nblue\nwinter\nera\nnot\nmodel\nhave\njersey\nfestival\nversion\ncode\nsouthern\nstory\nnavy\nmy\nmedical\nbuilding\npx\nlocated\nstudio\nboard\nflorida\ncontroversy\npolice\nreturn\nprogram\ninto\nfm\ntyphoon\nsongs\noriginal\nhighway\ntop\nthey\nadministration\ndigital\nentertainment\nme\nchart\nchildren\nover\nbig\nmember\nreligion\nlight\nlittle\nfour\nmary\nperiod\ncultural\nchina\nscotland\naftermath\nre\nhead\norigin\nregiment\ndata\ncomposition\ncommon\nstatus\neurope\nfictional\nclassification\nmartin\nmusician\nmunicipal\npoint\nauthor\nmount\nbeen\nfort\norigins\nscottish\nthird\nplay\nindex\noperations\nmunicipality\nregular\nproject\nsingle\ny\nspace\ndirector\nvan\nrussian\npennsylvania\nfrank\njoe\nassembly\ntom\nmike\nlee\ncongressional\nmore\nafrican\nnd\nland\nscott\nbrown\narms\nmovement\nmountain\nmiddle\nbank\ncastle\nout\nplayer\nfoundation\nborough\ncreek\ncomputer\njack\nsystems\nyoung\nbill\nrecorded\nwritten\naction\nindependent\nbut\nside\nvictoria\ncross\nnews\nnight\npakistan\ntext\nadministrative\nacademic\nmexico\nasia\nalexander\ncarolina\nus\ncontrol\ndon\nmagazine\nwrestling\naircraft\nrail\nofficial\nreleased\nlouis\nvillage\njean\ntournament\nrecognition\nwhen\nship\nsection\ngenus\nlegal\nel\nground\nprince\nrepresentatives\nadditional\nsince\nbaron\nmedal\nsecondary\nwriting\nengineering\nco\ncriticism\njim\nfree\nempire\ndeaths\nmassachusetts\nsinger\ntest\nancient\ntrade\nbob\nfounded\nsmall\nrd\nartist\nrole\nsenior\nnow\nfire\nrailroad\nchinese\ncoast\nmemorial\npublication\ngolden\nconference\njones\nshe\nirish\nkong\nresponse\ntechnical\nhong\ncredits\nsome\nthrough\ncolumbia\nsoviet\nrelations\ncampaign\nform\nsuper\nheritage\nsuch\nbeach\nprocess\nusa\nearl\nsea\nam\nstaff\nrecording\nsynopsis\nrange\ncompetition\ncar\ncalled\npre\ncorporation\nspanish\nstage\nbefore\nsenate\nconvention\nrules\nstudent\nitalian\nlate\nindustry\nbox\nmissouri\nanalysis\nstations\nrace\ntraining\ncampus\ntropical\nnatural\nagainst\nhospital\nstudies\ncommercial\nandrew\nlord\nyouth\nclubs\nbroadcast\ndiocese\nmission\nfuture\nspain\nfive\nport\nsecurity\nindividual\nonly\ngroups\ndo\nfederation\nforest\ngreek\nqueen\nforces\nfunction\nnamed\nproducts\nforeign\nfood\nunit\ndemocratic\nnorway\nfollowing\nformation\nwhere\nage\ncontaining\nreligious\nhabitat\nchanges\ndaniel\ncd\ntoday\nestablished\nhurricane\nvolume\njunior\nparis\nstorm\nformat\nrecent\ncommonwealth\nstephen\ngold\ntable\ngiven\ntaxonomy\nnations\nmarriage\nbody\nmetropolitan\nenergy\nunits\nback\npresident\ncollection\ncricketer\nimpact\nindiana\nchannel\nmarine\ncharacteristics\nplan\nlibrary\ntemple\nz\nsupreme\nminister\nad\ndance\ncapital\neconomic\ncommission\neffects\nmade\nwell\nregister\nbishop\nbranch\nretirement\npast\nheld\nwars\nitaly\ncase\nhorse\nharry\nher\nnative\ncommittee\npolicy\nsolo\nsite\nmaryland\nsingapore\nbc\ncomic\nchief\nray\nconservation\ntwin\ndynasty\nsanta\nminor\nreal\nprimary\nuntil\ntony\nedition\nproducer\npop\nasian\nwhat\ncorps\ndivisions\nkorea\nnear\nofficer\nbus\ntimes\nduke\nwithin\nsound\nplant\nsir\nsupport\nfaculty\nengine\ngovernance\nseveral\nmountains\ndisc\nthere\nmetro\nmany\nisrael\nprivate\narena\nproperties\nlength\nheart\nmedicine\nnetherlands\nwalter\nway\ninterest\nabbey\nships\nterritory\nreference\ngarden\nlists\ngeneration\nbrazil\nlatin\nbuilt\nlike\neducational\ninfluence\ndel\nsignificance\nleadership\nrural\nnuclear\ncover\nbattalion\ntourism\nflight\nwilson\nglobal\ntree\nleader\nusing\ngrid\nsquad\nlabel\nsquadron\njewish\nincluding\nben\necology\ndown\nsister\ntower\nlines\nothers\nmarket\nthan\nreview\nward\nnaval\nstandard\ndu\naround\ninfantry\nphysical\ntreatment\nlevel\nfleet\ncomposer\ngo\nhad\nliterary\nopera\nenvironmental\nswimming\ncreated\nactress\naccess\nsquare\nanti\ncape\nolympic\ngovernor\nsun\nchange\nsamuel\nboth\njustice\ndefinition\nspeed\nequipment\nson\noff\nmethod\ngirl\ntraditional\nwing\nauthority\nelectric\nhampshire\npress\nmanager\nevent\ncongress\nstone\nmatthew\ncomplex\nelevation\ncompilation\ncomplete\ntennis\nrun\nvoice\nsafety\nminnesota\npolish\ncolorado\ncall\nurban\nleaders\nlayout\nusage\nparish\nsoccer\nmathematics\njournal\nself\ndays\nkey\nearth\nstories\nsimon\ncoat\nmetal\nsilver\ncontent\nda\nfamous\nformed\nrule\nblock\nphilosophy\nacts\nyour\npoetry\ntownship\nlewis\nphiladelphia\nstock\nboston\nboxing\nhotel\niran\nleft\ninstruments\ndutch\ncamp\natlantic\nphilippines\nepisode\nlegislative\nmarvel\nbase\nfront\nlady\ncandidates\nexample\nexchange\nstars\nmiss\ndead\nfound\nmeaning\ndraft\nupper\nmultiple\ndiscovery\nsix\nliving\nlarge\nclassical\nbeing\nhot\nmaria\nblood\nacting\nministry\ngrammar\ndc\nmalaysia\ntax\ncommand\ncourse\nbroadcasting\nposition\nexecutive\nwill\nactive\nserved\nsyndrome\nmachine\nrecreation\nwildlife\nwe\ngordon\noften\nmiller\nnova\ngood\ncathedral\ntrial\ncare\nexpansion\ngod\nboy\nseven\npresidential\ncrime\nfox\nlower\nski\nmanagerial\nsam\ndetails\nchild\ntennessee\npoet\nassociated\npalace\ngeology\nfounder\nplayed\ndark\ncreation\nprofessor\nhow\ndi\nwithout\nkentucky\nfinancial\nmurder\nfull\ngardens\nswedish\nscout\noriginally\nword\nsign\ntim\nthese\nadam\nturkey\ndefense\ninclude\nwood\nguard\nproduced\ntheorem\norchestra\nsaints\nrose\nnumbers\nvarious\nelements\northodox\nshooting\npro\nbell\nten\nprincess\njournalist\nholy\nrevolution\npoints\neffect\ntrain\nstakes\nwisconsin\nplants\ndog\nbilly\nlost\nminutes\nangel\nlabour\ndomestic\ninfrastructure\nsettlement\nfourth\nzone\nsales\ncircle\nissue\nathletic\nnorwegian\npeace\nfame\nsame\nfalls\nportugal\nindependence\nberlin\ncontemporary\nstudy\nparties\nprize\ntrail\ndoubles\nhours\ndes\nmaster\nenvironment\ncell\nindustrial\noil\nnature\narrondissement\nring\npowers\nalliance\nroger\nboundaries\nbirds\nterms\nfreedom\neach\ndouble\nallen\nsometimes\nbad\npeak\nletter\nmid\nconcept\ntrophy\nso\nparliamentary\ndeveloped\ntransit\ntotal\nczech\nsimilar\ngrant\nhighways\nfish\namateur\nguest\nreserve\nross\njuan\nford\ncommunist\nsoutheast\nalternative\npartial\nmoon\nintelligence\niron\nchristmas\nannual\nprotection\nelected\ntheater\nreaction\nformula\noregon\ngreater\nsource\nsights\nlimited\nanimal\nca\nmass\njoint\nusually\naerodrome\nmovie\ncard\nviews\nrussell\ndrama\nkhan\nimperial\nintroduction\nformerly\nworkers\nocean\ngas\npurpose\ncoach\npostal\nactivity\npremier\nlow\nfigure\nscientific\nany\nmethods\ndiagnosis\nles\nwild\namenities\njazz\ndisease\nparts\nhalf\nflora\nborder\nrome\nproduct\nconstitution\npage\ncount\nswitzerland\ncrisis\nbelgium\nmobile\nweb\njust\nopening\ntrust\ndeep\nresources\nyorkshire\njonathan\naustria\nwalker\ndaily\ncommunications\ndr\nagency\nif\nsecret\nvietnam\nconversion\nba\nnaming\nconflict\nbrigade\nflag\nmembership\nchemical\nmatch\ncontest\nsiege\nmexican\nharris\nfantasy\nalong\navenue\nportuguese\nlincoln\nstatutory\ndanish\nthompson\noperational\nmagic\ncycle\nreport\ncommonly\nwine\nlyrics\nacid\nelectronic\nages\ndoctor\ndam\nsex\nowned\nnext\nperson\nnick\naffairs\nbrunswick\nthen\npublishing\nluxembourg\nfounding\nmedieval\napplication\nkings\nownership\nnewspaper\nview\nroy\ntrek\noutside\nkelly\nnine\nmar\ncensus\nanimals\nsur\njohnny\ngrowth\nfunctions\nlearning\nbird\ntracks\nkent\nanimation\nhungary\ngraham\npassenger\ntreaty\nmarshall\nac\ndean\ndemography\nlargest\nattack\nkorean\nmoore\nplanning\nobservatory\nbiology\nbehavior\nraf\nlegend\ndj\nprofile\nfemale\nclinical\nimportant\ndream\ngenre\ncanal\ngolf\ndebut\ncold\nbar\nmixed\ncuisine\nwindows\ncycling\naviation\nchemistry\nmorris\ndd\nagriculture\nwritings\naccidents\nreign\nmale\nhigher\nsurface\nheat\nliberal\nwoman\nvictor\nprime\nresistance\npractice\njesus\nchannels\nanother\nadventures\ncriminal\nvariations\ndesigned\noxford\nethnic\ndefunct\ncontext\nvehicle\npromotion\nblues\nbrother\nskiing\nevolution\nfolk\nsky\nsuccess\nmayor\nplanet\nemperor\ncomparison\nglass\ncleveland\nwhile\nwarren\nchallenge\nhunter\nrelationship\nken\nbrand\nconcert\nspring\nregions\nprevious\ncombat\nhonor\njimmy\net\nmulti\nbasic\nclassic\nab\ntank\nfauna\nrepublican\ndefence\nsemi\nhand\ndragon\nbaker\nnation\ntransmission\naudio\nmechanism\ncrown\nanime\nreform\nwon\nstart\nsoul\nstandards\nskating\nmuhammad\ndirectors\nown\nball\ncolonial\nbenjamin\nsocialist\ngeographic\neditor\ngun\nfarm\nphysics\nchapter\nphase\nadvanced\nlogo\ndriver\ncharlie\nfriends\nteaching\nsymphony\nbowl\nmotor\ndelaware\njay\nbulgaria\nsunday\noblast\njane\nalpine\nworking\nexpress\narab\nuniverse\nprotein\noperating\nmine\ncomedy\nclan\nwright\norange\nsteel\nshopping\nrunner\nsigns\ndistance\nestablishment\nfund\nfair\ncinema\nprison\nlieutenant\naccomplishments\nnelson\neconomics\nemergency\ndrive\ncaptain\nproperty\nbuffalo\ncruiser\nanna\ninvestigation\nmoney\nselection\nbonus\nprice\nperforming\ndisaster\nrolling\nmuscle\nfall\nmaterial\ndecline\ninstitution\ncomputing\nbands\ndiet\nwall\nlaws\nweek\nresult\nreproduction\ngrey\nstarring\nroom\nlead\nclosure\nsymptoms\nroads\nproblem\npreservation\nhistorian\nwords\nsize\nflying\nluke\nincident\nproblems\nmans\ncome\nss\ncited\nrate\nnerve\nmythology\ninvasion\ngene\nplatform\nmiles\nknight\nbible\nautonomous\ntales\nfather\nterry\nrise\nopposition\ntranslation\nsecretary\nbaby\ninsurance\nboat\nvery\nalaska\nmorgan\nhousing\nwind\ncasting\nrunning\njerry\njunction\nmassacre\ncontents\namong\nproposed\nmake\npiano\ngray\nsearch\nwinston\npan\ngymnastics\neight\nleading\ninfluences\nspecific\nour\nguy\nbeyond\nper\noperated\napple\nancestry\nfiji\nridge\noccupation\nvisual\nadventure\nyellow\nwave\npoker\ndick\nmother\ncolor\njournalism\ndecorations\nchess\neagle\nma\nmartial\nprincipal\nsatellite\nestate\ncovers\nmissing\nos\nclasses\ntransfer\nrevolutionary\nwelsh\nrob\nwide\nrepresentation\nlane\nmeans\nchain\nsurrounding\nadaptation\ntrivia\nturkish\nhere\nelementary\nmill\nfifth\ncombination\ndelta\nsupporting\nextended\njacob\nidentity\nmall\ntunnel\nfighter\ninterpretation\nsexual\ngreatest\ncircuit\nsr\nrick\nrevival\nsubmarine\nderby\ncrew\nthailand\nsolar\nsetting\nrev\nhope\nchampion\nappearance\nget\ncarter\nunknown\ncat\neye\nclosed\nbeginnings\nfields\nreferred\nil\nexpedition\nconnections\nfashion\nloan\nbusinessman\nengineer\ntogether\ntechnique\nfinance\nrobin\ncolony\nscouting\nprogressive\nministers\nupon\nepiscopal\nmarketing\nli\ninitial\npat\nalpha\nfigures\npainter\nisle\nsaturday\nguide\njordan\nglossary\nfeature\ndesert\ninternal\nchristianity\nwolf\npreparation\nindigenous\ntheme\ntalk\nmaterials\ngulf\nmove\nmarc\nzero\nreactions\nrestoration\nbeginning\nhighlights\nuniversal\nyes\nguitar\nabilities\ntraffic\nraces\nferry\nmemory\nbobby\ncollegiate\nextension\ncuba\njudicial\nnever\nfighting\nfar\nmining\nweapons\nquality\nna\nconditions\nvalue\nhouses\njo\nfranklin\nram\ndevil\nheights\ntraditions\npeninsula\nlegislature\nneeding\nmotion\nultimate\nfile\nsprings\nsale\nentry\ncorporate\nconservative\nchamber\nbryan\nvice\ntouring\nsplit\nscreen\nnorthwest\nartery\nng\naccording\nsub\naustin\ndirect\nactors\nrich\nghost\ngabriel\nschedule\nprogramme\njudge\nhip\nfamilies\nactivism\ntrinity\nottoman\npersonalities\nne\nsynthesis\npunk\ndrug\nstand\ncommunication\ncancer\ntribe\npicture\nchrist\nbuddhism\nagain\nthem\narmed\nbaronet\nalice\ninterstate\ndie\nrice\npool\ncoins\nacross\nnote\ncitation\nartistic\narrest\nmile\ncollins\nstrike\nsons\nbegan\npublisher\nconsidered\nfast\nlang\nanalog\ndepression\nguinea\ntrue\nsailing\ncabinet\nranks\nnicholas\nalgorithm\nrescue\ngilbert\nfoster\nsnake\ncrossing\ncalendar\nbear\nuniform\nseventh\nagreement\nrank\nunderground\ndestroyer\ncharity\nstill\nisaac\nresidence\nchad\nbroadway\narchaeology\nimmigration\nmonastery\nwife\nserving\nmovies\nevery\ncommander\nspirit\nvariety\nrowing\nprominent\ncoverage\ntake\nfeatured\nthose\nbone\nhunt\nlisted\ngate\nstrategic\npersonality\ninvolvement\nroster\npass\nhop\ndue\nchoice\npossible\nnevada\ncomponents\nfactor\ncommons\nmars\ncore\ncombined\nflow\ncurriculum\nvictory\ntommy\nsixth\ncharter\nheavy\ntruck\nra\nhost\ncook\ntesting\nprefecture\nmac\norgan\narchitect\ngiant\nglacier\ndifferences\nspider\ncrystal\nmaking\nfaith\nqualifying\nbrain\nest\ngender\nconnection\nspin\ndiamond\ncable\nface\ncause\nsequence\nlabor\nguild\ncole\nmuslim\ncolombia\npressure\nmathematical\nvirgin\ntr\nscale\nsubject\nmaritime\noutstanding\nhell\nvermont\ndocumentary\nprimarily\nlaboratory\nvenezuela\nchile\nroll\nfrog\nbetter\nabraham\norders\nmart\ninterior\nwilderness\noptical\nfoot\naway\nquarter\notto\nlet\ncivic\nanimated\ndesigner\nmind\nled\nte\nprior\nbass\ngrace\nreservoir\nprotocol\nmiscellaneous\nlogic\nbush\nvampire\nap\nqualification\nexperience\nsubsequent\nbelgian\nbutterfly\ninter\nhard\nrelation\npsychology\ncharlotte\nempress\nvision\nfine\nterminal\nmotto\nsymbol\nstore\nfacility\nstorage\nrepresentative\nowner\nadult\nturner\nliberation\nequation\ndevice\nalthough\nfunding\nletters\ninstrument\nfranchise\narabic\ndna\nleo\ndemocracy\nshaw\nregulation\nterminology\nsacred\nreceived\nloss\ncarbon\nheadquarters\nrecurring\nedge\nstop\npaper\nlanding\nparker\nemployment\nvenue\ngang\nwheel\nlegislation\nindices\nbrad\nharvey\nscoring\nphonology\norganized\nmarines\nsession\ngenesis\nchildhood\narchaeological\nweather\nspeech\nseat\npainting\nsupply\nsoldier\nmorning\nenforcement\nsussex\nscandal\nchapel\nassistant\nactivist\npatent\nheads\nconfederation\nquantum\ncoastal\nwoods\noutline\ncaption\ntradition\nphilanthropy\nmanufacturing\njamaica\npilot\nagent\nkenya\nhollywood\nbronze\nmonument\nvol\ntherapy\nsuperior\nsteam\nagricultural\nobject\nacquisition\nsisters\nknowledge\njosh\nwinning\nprocessing\nfactors\npersian\nhighest\nfuel\nplans\nresort\nnationality\nhour\ndecision\ncooper\nteacher\nbotanical\nsignificant\npriest\nliberty\nslam\nmosque\nmerger\nthings\nphoenix\nhero\nassociations\nderived\nopinion\nportland\nfacts\ndescribed\ncontinental\nshah\nauto\narmstrong\npr\nwould\nstatistical\npersons\ndebate\ngeometry\nrequirements\ncanton\nbo\nmode\ncells\nbb\nteen\narnold\nrogers\nride\npope\nenterprise\nsignal\nshadow\nvirtual\ntiger\nreports\ntheories\nforum\nvienna\nphoto\ngrove\nprocedure\nincluded\nprofit\nextracurricular\ndegree\nmuch\napplied\nzip\nrenaissance\nbureau\nliturgics\neither\nassessment\nzoo\ngrade\ntravel\nfa\nha\nfencing\ncapture\nshore\ngraduate\nms\nangels\nvia\noldest\njustin\ncrash\nonce\ncoup\ninvestment\ndefined\ncave\nhurling\ncompetitive\nstring\nmeasurement\npresidency\nlions\ncredit\ntruth\nleeds\nviscount\nmental\nbreeding\negyptian\ndispute\nconstitutional\nmi\ngrande\ngregory\nfriday\nviolence\nsweet\nse\nnormal\nmason\nadvertising\nfr\nexpressway\ntypically\ntransition\npattern\nprinciple\nfly\nclose\nchairman\nbeer\nprinciples\npopulated\nsubspecies\nworldwide\npink\nnoise\ncontract\nrefuge\ncamera\nastronomy\nabuse\nfinnish\ntours\ntea\nwatson\nvirus\nsuccession\nhundred\nbicycle\ntheology\nsequel\nheaven\nrelief\nstrategy\nrhode\nevidence\nchase\nscholar\nmaintenance\nthroughout\nmin\ndurham\narm\nsouthwest\nshield\noverall\nheight\npreviously\nincome\nathens\nran\nporter\noffices\nrisk\nartillery\nscientist\nlives\nho\ngenerally\navailable\nsword\nprotected\naffiliated\nmolecular\nko\ndame\nplus\noperator\ncurrency\ncommerce\nweight\nkids\neyes\nbreak\nbond\nsierra\nperry\nranking\njulian\nhaving\ndraw\nworship\nups\nsporting\nindoor\nfisher\nelectrical\nbailey\nsector\ndaughter\ntrilogy\nstores\nsalt\noak\nmostly\nmanhattan\ndictionary\nimplementation\nformal\nfan\nlaunch\nhardware\ncultivation\nanglo\nretired\nnancy\ncondition\nsurrey\nhindu\nes\ndisplay\nassault\nmanor\ngap\nfrequency\nsnow\nsoil\nsimple\nnearby\nknow\nprogress\nibm\ncourses\nchi\ndiving\nphotography\nvilla\ncoalition\nclaims\nalternate\nselect\nreed\ndual\ndirection\njoel\nglen\nfate\nboundary\naid\nrebellion\nmini\ncavalry\nscore\nsaga\nheath\ngauge\nfactory\ntale\npotential\ncustom\nvoting\nreconstruction\ntourist\nafc\nsymbols\ndirected\ncomposed\nstrip\nidentification\nbutler\ntwenty\nmonday\nscheme\npatrol\nattorney\nsugar\nnewfoundland\nmeeting\nmatrix\nhart\nparticipation\ncomponent\ncollected\npartnership\ntrinidad\nleg\ngear\narchitectural\nverse\nstyles\nhim\nbeautiful\nauxiliary\nsenator\npictures\ngay\nargentine\nexperimental\ncommissioner\nadvantages\nescape\ndale\nbecause\nmillion\nlived\ndrum\ntoo\nframe\nfight\nbengal\ntrading\nsummit\nelectronics\ncontact\nworked\nmonster\nouter\nmodeling\ndisorder\nuser\nhebrew\nbermuda\nskin\nphilosopher\nlocomotive\ngeographical\ncanyon\nbiological\nvariation\nmedium\ninner\nincumbents\nbasin\narboretum\nportrait\nburial\npinpoint\nsituated\nperformed\nneighborhood\ngrounds\ncertain\ncanon\nsolomon\nfishing\nsituation\ninterface\niceland\nclaude\nswiss\npolo\nchronology\nsyria\nnickname\napproximately\nwalk\ntools\nrepresenting\nguitarist\nbottom\nti\nethics\nparticipating\ninterests\ngenetics\nvolleyball\nrapid\nnomenclature\njerusalem\nvale\npath\nearlier\ndomain\nstatement\noscar\ninsignia\ncost\nbeat\npalmer\nnoted\ngot\ndecade\nespecially\nceremony\napproach\ninside\nidol\nglobe\nwings\nresidential\nmovements\njourney\ncollaboration\ndeparture\ndominican\nalive\nsessions\nchronicles\nanniversary\nnorthwestern\narchives\nclay\nregistration\nprevention\nholmes\nrocket\nprint\npalm\nsomerset\njuno\nshanghai\npine\nbudget\nreactor\nparticular\nbroke\naddress\nstarted\nmainly\ngaelic\nexecution\nhull\ninvolved\nruth\nthunder\nseal\nstevens\nnet\nmonte\ndevices\nallied\nratio\ndialect\ncargo\nriding\nmystery\npride\nsultan\nimportance\nni\nkiss\nevil\npractices\nresolution\nproof\nofficials\nlion\nlebanon\ncourts\nwidth\nturn\nartificial\nwireless\nunified\nbomb\nrally\naccident\nprayer\nlinear\nframework\nanatomy\nstamps\norbit\nmonkey\njam\nexhibition\ncove\nberkeley\nbracket\ndry\ncyclone\ncitizens\nroots\nnovelist\nmarco\ncapacity\nbruno\nce\ncarnival\nballet\nsc\ntelephone\nquotes\nplaza\nge\nclock\nbeta\nmechanical\nmean\nterror\nsaxony\nalgebra\nprocesses\nromance\nexit\ntheological\nstrong\ngenetic\nrifle\nnotre\ntranslator\ntheatrical\nstages\nhit\necclesiastical\nclothing\ncasino\nbroad\nfederalist\ndeal\nun\nreunion\nhole\nemma\nbehind\nappeal\nscript\nrod\nnortheast\nkirk\nwards\nbasis\nexperiment\nwant\nsevere\nparadise\ncox\nraaf\npermanent\nbodies\nserver\nhonorary\nulster\ntobago\nloop\nlevels\ndegrees\nfruit\nflat\ndollar\ncadet\nbatman\nshot\nreality\nscene\nchuck\nbrook\narc\nspiritual\nmilan\nthought\narmenian\nace\ntriple\nsuffolk\nlineage\ndeputy\nrandy\ninitiative\nbiblical\nresponsible\ncensorship\nabove\nmad\nintegration\nexile\ncapitol\nbenefits\nbang\nwindsor\nquest\nmechanics\nfocus\nki\nbuddhist\nmotorcycle\nfeeding\ncheshire\nsin\nshop\nroosevelt\nextra\nbelow\nspringfield\nsoft\ngraphics\narchipelago\nwarfare\nprovinces\njurisdiction\nbombing\nwednesday\nmalta\nlimits\nspaces\ndated\ncontinuity\nex\ncopper\nartwork\ntributary\nsandy\nmanufacturer\nkit\npipeline\nlawyer\nstint\nmp\ndowntown\ncivilian\nrulers\nmv\nsnooker\nfrontier\nautomobile\nalexandria\ncoal\ntucker\noh\njumping\nlights\ndiameter\nberry\nroland\nplane\nhandball\ngraph\nfoods\nevaluation\nconductor\nchoir\ncertification\nversus\npiece\npi\nnavigation\ndogs\ncompounds\nvector\ntemperature\nhosts\noverseas\nconsisting\ncarol\npearl\nmail\nleast\nabc\ndifferential\ncarrier\natomic\nturtle\nrocks\ngospel\nsuperman\nsaid\nmeasure\nholder\ngrades\nforever\ndeclaration\nprelude\nrez\nrainbow\ngoal\nstep\nmadonna\nlies\nensemble\nbelt\nparkway\nbanking\nanthology\nreid\nnegative\ncharge\nsalvador\nrocky\nduo\ndoor\ncut\nsuicide\nregulations\nharbor\ndiplomatic\nwillie\nrivalry\npercy\nextreme\nwaters\nsimply\nseminary\npioneer\nkerry\ndoctrine\naffair\nhappy\ndeceased\nhybrid\nfear\ndancing\ncroatian\norganic\nhinduism\ncollective\nmarathon\nham\nthing\nreplacement\ninjury\nworth\nsutton\npoem\nlodge\nhorror\nfloor\nelement\npeer\ndaughters\nbrewery\ntroy\nterrorism\nflood\ndescendants\nbalance\nachievement\nlaser\nactions\nroller\ngoes\navailability\naboriginal\nspectrum\nepidemiology\nadoption\nneed\nlie\nheraldry\nones\nvariable\nmirror\nhorn\ncurve\narabia\nsay\nconcerns\nmouth\nfijian\ndress\ncircus\nrotation\nrobot\npositive\nboulevard\ngraphic\nflower\nfe\nchocolate\npartners\nar\nalone\nsides\nrecovery\nmorphology\nlandscape\ngothic\nprairie\never\ncongo\ncomes\ndescent\nid\nholiday\ncolors\nplains\nnordic\nblind\nthreats\nrising\npreparations\nhands\ndesigns\ncountess\nparticularly\nmoving\nfunctional\nalcohol\ntarget\nretail\nmidland\nleisure\nvinyl\nterritorial\nholdings\narchbishop\nrain\nfew\nemblem\ndiana\ncork\nbeauty\nphantom\ndamage\ncreative\nrosa\ndiesel\ndesignation\ncorner\nautomatic\ntwelve\nrestaurant\nlords\njump\nhood\nfolklore\naffiliation\nstructural\nsprint\nmatter\npresentation\nnothing\nkill\nintegrated\nglory\nliquid\nreissue\noffensive\nsurvey\nspeaking\nsold\nngc\nleaf\ncandy\nbroken\nant\ntrials\npay\nmilitia\nsmart\ncrazy\nconsumer\ncoffee\ntestament\nim\nfixed\npapers\ndin\ncyprus\nwatch\nvalues\nstrange\nrow\nstream\npotentially\nmaximum\nlateral\nedited\ndreams\ndiscontinued\ncelebrity\nban\nriot\nchen\nappearing\nunity\noceania\nduties\nbattery\nshape\nreasons\npostwar\npieces\nlatter\ninterchange\nconspiracy\ncomedian\nvariant\nlaunched\ncrater\nbull\nbath\nwaste\ntriangle\nless\nconsequences\nburke\ntin\nstanding\nplate\nwalking\ncardinal\nperfect\nhaven\nvictorian\nsponsorship\nshire\nassassination\nexpanded\nbarton\nsanctuary\nkind\nacoustic\nsilent\npopularity\nmoses\nhunting\ngubernatorial\ndistributed\nboxer\nbecome\nantarctica\nswan\nsuccessor\nmorocco\ntask\nmeat\ninstrumental\neven\ncounter\nash\nres\nphilosophical\ndedicated\nreporting\ndawn\nphysician\nfat\nduty\ngamma\nplateau\nnotation\nlyon\nefforts\nag\naccount\nwarner\ntornado\nitself\nfortress\nreformation\nmerchant\ngriffin\ntakes\npanama\nprovide\nlineup\ncommune\nbrief\nbowie\nwelfare\nparticle\nlook\nlawsuit\nkilling\ntram\nsolution\naverage\nadjacent\nvocal\nsample\nmeasures\nmagnetic\npet\nkuwait\nsavage\nmouse\nforward\negg\naffiliates\nmemorials\nfalse\nconquest\nwin\npa\ncooperation\nalphabet\nwonder\nsomething\nfusion\ncanterbury\nsave\nresponsibility\ncrest\ncash\nbin\nur\nrest\nhelp\ngoing\ncompleted\nbelle\ntailed\ntactical\nseen\nscholarship\nclosing\nintermediate\nencyclopedia\ncliff\nshark\nmascot\nkyle\ninvolving\ntool\nspelled\nmaple\naxis\nattempt\nsoldiers\nrapper\nperuvian\noriental\ndodge\nchapman\nana\ninn\nfluid\nassignments\nmineral\ncovered\nbowling\nsunshine\npresence\nphotographer\nparallel\nlighthouse\nfailure\neu\ncommentary\nrider\nparade\njet\nhalifax\nreputation\narchdiocese\nadvocacy\nsyntax\npotter\nnationalism\nmidnight\nbadge\nthough\nsideman\nnoble\nmust\nmidlands\nlongest\nexodus\nresource\nrare\nlayer\nearthquake\nsurgery\nscope\npetroleum\nlancaster\nconsent\nswitch\nplaywright\nlegion\nconception\nnursing\nmoss\nmilk\ndocuments\nbas\ntowards\nthursday\nsuccessful\nsubway\npond\nlens\npure\nlacrosse\nbotswana\nsamurai\nmix\nholding\nexpression\ntrio\nlotus\nlatest\nlot\ndiversity\ncopenhagen\ncitizenship\nsculpture\nraid\npound\nneo\nliterally\ngeo\nduck\ncurling\naa\nstress\nmigration\nadmissions\nrat\nforests\ncongregation\ncognitive\nquartet\ncompact\nchair\npain\nmonth\nfalcon\nemployees\ncolonel\nrush\nbillboard\nhawk\ngalaxy\ndissolution\nconviction\nchip\naerial\ndynamic\ndental\nslayer\nreconnaissance\ninteraction\nguns\ndesignated\nsand\nreduction\npole\nmissile\nhearts\ncards\napostolic\nitems\ninteractive\nhighland\nferdinand\nwindow\nsue\nread\nrandom\nniagara\nmo\njoshua\nworlds\ntag\nstick\nradar\npreparatory\nguests\nfriend\ncream\nwinner\nsheep\nsharp\nlock\narch\nairline\nthomson\nelsewhere\ncorruption\nboom\nbasque\nvenus\nerror\ndocument\ncartoonist\nantarctic\nsuit\nstrength\nsouthwestern\nplantation\nexploration\ntrent\nspy\npremise\ndiplomat\narchive\nyan\nwrestler\ntribal\nstrait\nmickey\nlimit\nliberia\nhair\nelectricity\ndiscrimination\nstarting\nsinging\nsidney\nladder\nseparate\ninventor\nherald\ntaken\nmick\ndivided\nsodium\npatterns\nabbreviated\npresenter\npartner\noutbreak\njerome\nhypothesis\nbit\nwaterloo\ntuesday\npreliminary\nchronicle\ntonight\nspoken\nmessage\njenny\nduchess\ncap\nbeliefs\ntransformation\nsuburban\ncopyright\nconstituent\nconcentration\ncarpenter\nbattleship\ntouch\nmonitoring\ndefensive\nautomotive\nselling\nrather\nendemic\ncartoon\nflash\ndrummer\ncherry\nware\nskills\nenemy\ncannon\nwidely\npair\ngaming\neducator\nbach\nyounger\nsolid\nsense\ngates\ndestruction\nspecifically\nlithuanian\ntheoretical\nstatic\nsleep\nruns\npassage\nintended\ngoverning\nbuck\nelectron\nden\nbeck\nvista\ntomorrow\nrenovation\nreceptor\nethiopia\ncotton\nmarching\npsychological\nmillennium\nlu\nfeed\ncomputational\nbat\nwarsaw\nwade\nta\nsol\nclarence\nbinding\nacademia\ndarkness\nwithdrawal\nweapon\npublishers\njudaism\nindo\ndirty\nvegetation\ntell\nevangelical\ndivine\nattendance\nadministrator\nstroke\nsilence\ncollapse\ntenure\nreformed\ncraft\nwanted\ngoods\ndestiny\nbal\ntactics\nsurviving\nradiation\nmanila\nextinct\nconfederate\nspeedway\nkilled\nkid\nexamination\ncritic\nalleged\nunique\nreservation\nregulatory\npresented\nga\nscores\nofficially\nexplorer\ndifference\nbyzantine\nroot\ndensity\ntaxation\nrn\ndetection\nvoyage\ndimensions\ncoming\nbright\ntissue\nposterior\nhold\npoor\nplain\nhoney\nfbi\nportion\nkeep\nincorporated\nideology\ndeer\ncasualties\nassistance\ntanzania\nomega\nmaxwell\ninspiration\neve\nequal\nconcerto\ncompound\nalgebraic\nparent\nlicense\ncontrolled\nambassador\nallegiance\nwa\nsainte\nsailor\nplanets\ninnovation\ndynamics\nbaroque\ndelivery\nchurchill\ntaking\nsi\nradical\npostage\nphylogeny\nlands\nissued\nclimbing\nacquired\nviolin\ncedar\nburning\naccounts\nvessel\npractical\nkiller\neverything\naccounting\nvertical\nsheriff\nshell\nrelative\ncl\narctic\ntreasure\nspeaker\nsonic\nsociology\nserial\npunishment\npo\ndisk\nstones\nmarsh\nhorses\nholocaust\nattribution\ntibetan\nrolls\nchicken\ncheese\nremote\nprominence\nmarina\nmansion\nlarger\nelder\neasy\nbankruptcy\narmored\nwedding\nlogistics\nlimitations\nalmost\ntube\nremains\npriory\nplanned\nphrase\nobjectives\nmercury\nfiles\ndistinguished\ncry\nboards\ntrick\nsp\nshift\nkeys\nharper\neden\ndriving\nlabrador\nentrance\nbreaking\nwhy\nmon\nlance\ncorrectional\nsuburbs\nsoutheastern\nranch\nplymouth\nmodule\ncosts\nambassadors\nsupported\nshrine\npurple\nheavyweight\nbarker\nrecreational\npollution\nmoment\nem\ntranslated\npocket\nmanufactured\nlynch\ninquiry\nfirm\ndrugs\nconnected\nbee\ntemporary\nrhythm\nneck\nkurdish\ninfection\ngrass\ncollector\ncarry\nyale\nplastic\nideas\ncloud\nwhole\nvolunteer\ntan\nroyce\nrhine\nhighlands\necological\ncuban\ncirculation\nprovisions\nguiding\ndebt\ndeanery\nauthorities\nveterans\ntwentieth\nruler\nfraud\ndrop\ncolumn\nchanging\nvocabulary\nrabbit\npipe\noxygen\njob\nfarmer\ndemise\nchilean\nquestion\nninth\nnamesake\nmonsters\nimaging\nhi\npromotional\nnotability\nhelicopter\nfritz\nfreeman\ndescribe\nconstant\nathlete\nappointed\nzambia\ntau\nsquirrel\ninferior\nfollow\ndove\nannually\ntrump\npregnancy\njungle\nexplosion\ndiaspora\nsing\npartition\nnumbering\nhampton\ngravity\ngive\ncr\ntoy\nsymmetry\nmajority\nfever\nfaculties\ncoaster\nchromosome\nprovidence\napproaches\ntwilight\nsteps\nnarrative\neighth\ndimensional\ncoin\nalbedo\nwarning\ntypical\ntrap\ninhabitants\ncomprehensive\nanterior\ntai\nlizard\nfern\namendment\nways\nunclear\nstem\nremoval\nmanual\nlighting\nfranco\naudience\ntoll\nsurveillance\nsculptor\nregency\nrecognized\nlay\ndorset\nwise\nsystematics\nintervention\ndating\nolder\nlinguistics\nimprisonment\nadvance\nskull\noccurrence\nnoel\nhidden\nfinite\nenrollment\nthoroughbred\nskater\nshould\nion\nfilter\nwire\nwarrior\ntrouble\nstraight\nrevenge\npolar\noutput\nepic\ndust\ncounts\ncool\nbeam\nbarbados\nadvisory\nslave\nrebirth\nprognosis\nnightmare\njoy\nhastings\nexercise\nultra\nsubjects\nslang\nsaw\nsally\nchambers\nbeast\nvolumes\nseeds\nsanskrit\nportable\nnad\nhammer\ncake\nadmiral\nfortune\nflowers\ntip\nfeet\necho\ncoventry\nbronx\nbarber\nrelay\nnarration\nillness\ndrink\nbooth\nappointments\norganizational\nsimulation\nheaded\nraven\ndowns\nalways\nshared\nroses\nbud\nboot\nspecialized\nscreenwriter\nrevolt\nprocedures\npredecessor\njudiciary\nhamburg\nefficiency\ncontinued\naddition\nthermal\nspelling\nseed\nprotestant\nlorenzo\nequestrian\nwan\nsubsidiary\nspecification\nrhodesia\nmissionary\nkeyboard\nfountain\ngross\nbangalore\nutility\ntoponymy\nsuburb\nshock\nrehabilitation\npyramid\nmeet\ncontinuous\ntomb\nsharon\nruby\nrabbi\nparaguay\nmonthly\nappeals\npurposes\npen\ninitially\nfairy\ndolly\nadmission\nshin\nnobility\nlac\nchaos\ncattle\ncancellation\npanel\nmighty\nlinked\naims\nuprising\nstark\nprinting\nevening\ndiscussion\ncaused\nborders\nundergraduate\ntopography\nspread\nregistered\nlogos\nfossil\ncomeback\nchronological\nbrewing\nschism\nrings\nguyana\ncontribution\ncandidate\nbaroness\narcade\nvoices\nresignation\nmormon\nflowering\nequivalent\ndetector\ncommissioned\ncitizen\nbreakthrough\nintellectual\nbrussels\nresident\nlegendary\nhammond\ngrowing\nfiber\ncustoms\ncommunal\ncharges\nverb\nsmooth\nsignals\nreserves\noffered\nmagnus\nearliest\ndangerous\nclassics\nbecoming\nviking\nshare\nscots\nput\nexpeditionary\nattention\nlooking\nillegal\ndong\nskeleton\nrevenue\nreporter\nligament\nfi\ndiscipline\nau\naerospace\nnaked\ngymnasium\ncm\nvote\ntwins\nthousand\nsat\nmoor\ndemand\ntrip\ntone\nperiods\ndimension\nyard\nwyoming\nweber\nsustainable\npharmacology\nop\nnumerous\nmiracle\ncurse\nwitch\nsoap\nromeo\nreach\nrates\nalma\nacquisitions\nwelcome\nvocational\nphysicist\necuador\ncorridor\npavilion\nmainland\neconomist\neclipse\ncruise\nbones\nactual\ntables\nsurf\nspecialist\nriverside\nmerchandise\nlitigation\nisles\nincomplete\nfundamental\ntracking\nhay\ndancer\ncherokee\nbeaumont\nwalls\noval\nleave\nhancock\neleven\ndetention\ndepot\ncovering\nclear\nbroadcaster\nberg\nassigned\nvalve\ntunisia\nthink\npatriot\ngoddess\nfellowship\ndarling\ncrow\narcher\nsovereign\nplacement\npalais\nmarks\nhaute\ngrave\nfuneral\ndeveloping\ncia\nsafe\nriley\nrides\nprovided\nproposal\nlucky\ndiary\ndeveloper\nmonk\ngone\ndei\naltitude\nsounds\nregina\npier\npack\nmonitor\nmelody\nhandicap\ngermanic\nfeel\nessential\nantiquity\nalien\nsymbolism\nstudied\nsignature\ninfinite\ndemon\ncooperative\nappointment\nvolcano\nfury\nbasilica\nvein\noriented\ninput\nhumanitarian\nhale\ncats\nblade\nalbatross\nvic\nnationale\ninch\nheather\nhardy\ngods\ncon\nstanford\nslovak\npuzzle\npresents\noutdoor\nlosses\nfrigate\nflint\nelite\nelephant\ndeficiency\nconventions\nvietnamese\ntoxicity\nsigned\nrite\nplease\nnarrow\nliteracy\ners\ncomet\ntelescope\nmont\nintelligent\nfuller\nended\nado\npump\nmediterranean\ninlet\neditorial\nbreed\npierce\ngovernmental\ndirectly\ndemolition\nstatue\nslow\nmobility\nholstein\ndissolved\ncameroon\nranger\ndrums\nbills\nautobiography\nargument\namazing\nparameter\noral\nmotivation\nmarxist\ndisappearance\nslavery\nknife\ninstruction\nicc\nguru\ngloria\nproposals\nkr\ngecko\nbend\nabsolute\nmodes\nhabits\ndiscovered\ncraftsman\ncentennial\ncanonical\nbec\narrival\nreceiver\npreserve\nmc\nclause\nabortion\ntape\nprisoner\npoverty\npitcher\ndepth\nbarrow\nund\ntang\nseparation\ndear\narguments\nventure\nvalentine\ntribute\ntobacco\nthin\nsunset\nrouge\npackaging\njudgment\nidea\ntensor\nrna\npretty\nnina\nhook\nexisting\nresponsibilities\nminimum\nlesser\nlaurel\nfun\ncult\natlas\nvisa\nhowever\nguardian\ndell\nclara\nbypass\nvoyager\nrating\nbanknotes\nowl\nnegro\nmapping\nlambert\nediting\ncrescent\ncreate\natmospheric\nzones\nwear\nrebel\nprotest\npersecution\nja\nguards\ncreator\ncheck\napollo\nwake\ntemporal\nplasma\npistol\nhare\nending\ndad\ncrane\nconcrete\nbread\nbenefit\nturbo\nsuite\nholly\nexistence\ntribunal\nrequired\ninfluenza\nfriendship\ncommodore\nmodified\nlung\nexplanation\nentrepreneur\nduchy\nwinchester\nslavic\nservant\nsentence\nregent\nprobability\npayment\noperative\nmadness\ndependent\nwish\nunitary\ntroubles\nro\nfeeder\ncreating\ncontroller\nruling\nmara\nlawn\nhiatus\ngraduation\ngalloway\ndrawn\ncylinder\nbliss\nbias\nbachelor\nastronomical\nweekend\nrusso\npassport\nmeter\nmandate\ndoo\ndialogue\ndeaf\nchancellor\nsharing\nphone\nintegral\ncommemorative\nclergy\narrow\ntechnological\nproduce\nmoved\nmoral\nhandling\nbarrier\nability\nnationalist\nivy\nfinish\nbike\nashes\ntroops\nstruggle\nmutant\nmoves\nmarried\nflame\nconsortium\nancestors\nsmoking\nsm\nshipping\nsecurities\nfeminist\nenzyme\ncombatant\nsonata\ningredients\ngateway\ndanger\nconjecture\ncertified\nassociates\nvisit\nstay\nsparrow\nraised\ninfluential\nempty\nbound\ntie\npottery\nplural\noriginated\ncommemoration\nburn\nassets\nstoke\nsino\nhoneycomb\ncomposite\ncluster\nbid\narsenal\nneeds\nmuscles\nhumanities\ncontroversial\nchance\nbow\nbarons\napocalypse\nyacht\nsuspension\nsurvival\npremiership\nlift\nforming\ncertificate\nsoftball\nshepherd\nseine\nplaced\noxfordshire\nmerged\nmama\nflip\ndover\ndeployment\nconcerning\nbacteria\narmament\nspatial\nmonarchy\njoined\nemmanuel\nsalle\nregarding\nreferendum\nraj\nnixon\nlam\ngeological\nconsul\nswing\nprostitution\nnorm\nchanged\ncaesar\narmor\naquarium\nseas\nremake\nquestions\npurchase\npiper\nmanuscript\nevolutionary\nbaba\nacacia\nabolition\ntanks\nrough\norchestral\nnurse\nicelandic\nhat\ndiagram\ncharleston\nbelieve\nbeaver\nspectroscopy\ngenerator\nendurance\ncharitable\nproducing\nprinces\nph\nnortheastern\nmanifesto\nlone\ninvention\ngathering\nfutures\neverybody\ncircled\nbluff\nproviding\npin\nmutual\nmint\nlicensed\nholt\nflu\ncomplexity\nunionist\nprinted\nminority\nfought\ndetective\nconstructed\ntheologian\ntalent\nstamp\nrubber\nrookie\nreader\nfife\nfabric\ncorpus\nconfiguration\nbean\naim\ntransactions\ntolerance\nmonroe\nmerit\nlaos\ndome\nberkshire\nwizard\nweeks\ntransmitter\nsparks\njill\nicon\ngarrison\nfailed\nenough\ncatch\ntalking\nrwanda\nmight\nkick\ninstrumentation\neffective\ndynamo\nbranding\numpire\ntorture\nracial\nphysiology\noccupied\ngp\nexcellence\ndistinct\ncompetitors\nbirthday\nvoluntary\nunderstanding\nration\nneural\nlightning\nfreight\ncollaborative\nautumn\natlantis\nabbot\nwheat\nthrone\npitch\ninstead\nhighly\nderivative\nbrass\nstern\nsterling\nherb\nengagement\ndevi\ncolombo\ncalculus\nuganda\ntate\nsixteen\nscholarly\nprose\npronounced\npowered\nping\nperformer\noptics\nmaya\nharmony\nfantastic\nexposure\ner\nbiggest\nadopted\npleasant\noxide\ngill\ncologne\ncelebration\nanthropology\nspectral\nserve\npigeon\npenny\ninterview\nbelonging\nbattlefield\nwheeler\ntract\nmanaging\nliturgical\nlinguistic\ngazette\neaster\nconstabulary\ncanoeing\nairfield\nperspective\npepper\nmatters\nmasculine\nfresh\ndock\natom\namount\nairlift\nveneration\ntail\nspa\nsaving\nparry\nminiature\nfavorite\ncompression\nangle\nquiet\npratt\nnucleus\nmyth\nmagical\nlunar\nlifetime\nincrease\nhank\nfeminine\ndoll\nconnector\ncodex\nchloride\nadvocate\nthus\nreturns\nparameters\nobjective\nfork\neligibility\ndirectorate\ndances\nville\nuncle\nsubfamily\npanther\nextent\ncompensation\nbinary\nvault\nroma\nprotect\nobservation\niris\ndrake\ndeck\ncorn\nconventional\nconsumption\nbasil\nthreat\nproper\nmainstream\nfunk\nfunds\ntraditionally\nshaped\nonwards\nhomer\ngrants\ngandhi\nadverse\ntoad\nprovisional\nideal\ngraves\nchorus\nbreakfast\nspike\nproprietary\nmotorway\nmedial\nmarker\nimprovement\ndemos\nbarney\nsoup\nshowing\nsheet\nposthumous\nordinary\noccupational\nmercy\ninnovations\ngeorgian\ncoinage\nchef\namazon\nalto\nvascular\nphenomenon\nhistorically\ncurry\nconsolidation\ncommanding\naria\nveronica\nquasi\npush\npageant\nmeridian\ngen\nforced\ndetermine\ntributes\ntopology\ntongue\nsophia\nresurrection\npastoral\nmls\nmacedonian\nhalls\nunification\ntelegraph\nswift\nsemantic\nsalisbury\nreflex\nprobably\npirate\nnorwich\nextinction\nboarding\nwartime\ntrades\ntat\nsmaller\nparable\nmeadows\ndot\nton\nplatinum\nmodification\nlonger\nlimerick\nknockout\ninvisible\nexpert\ndone\nclaim\nbenedictine\nvisiting\nunlimited\ntransmitting\nrevised\nretreat\nrepresent\nrage\nprocessor\nlab\nhanded\nfatal\nembassy\nclean\nauction\nuranium\nthirty\nsum\nsecrets\nraw\nproceedings\nparadox\ninscription\nflesh\nfishes\ndrawing\ncrimson\nconvergence\nbuild\nworker\nsurvivor\npolis\nmoray\nmanufacture\nmandarin\nkangaroo\ngibraltar\nformally\nconnecting\nbiographical\nbarracks\nbadminton\nunderwater\nspot\npronunciation\npromise\nfitness\nestonian\nencoding\ncynthia\ncutting\nblast\nassociate\nanthem\nadapted\nsexuality\nreverse\ninspired\nhorizontal\ncontrast\nvocalist\ntrademark\nrivera\ngift\ngambling\nautomated\naurora\npandemic\nclement\nsmile\nrap\npalatine\norbital\nfrequently\nelimination\ndairy\nboots\nalbanian\nupright\nshown\nrelocation\npolytechnic\nfarming\ncooking\nchin\nbotany\nbed\ntorpedo\nprincely\npaso\nnasa\nmodular\nmetabolism\ngroove\ncredited\nclosely\nyet\nscenes\npsychiatry\notherwise\nmethodology\nmagnet\nlandmark\ninduced\nhydrogen\ngeneric\nchoral\nauthorship\nrepair\nprojection\nincorporating\nfinch\nfact\nfacial\ndetermination\nclassified\ntooth\nthinking\nspacecraft\nselective\nhomes\ndinner\ncoliseum\ncobra\ncivilization\nbells\nbag\nwatershed\nvenom\ntiling\nnomination\ngoodman\nfallen\ncalculation\nsmoke\nruled\nritual\nrapids\npackage\northography\nminute\nlorraine\nlily\nlex\nevergreen\nderivation\nbunny\nattraction\nwet\nshadows\nroof\npopulations\nhimself\nfell\nexport\ncosmic\namos\nready\njury\nflute\nfellow\nentity\ncol\nbi\nneighboring\nlog\nhusband\ngreenwood\nacres\npoll\npassed\nnutrition\nnervous\nmembrane\nhawaiian\nfindings\nfind\nethical\ndriven\ndaddy\ncure\ncompanion\nwatts\ntravels\nsegment\nrisks\nrestrictions\nresonance\nremember\nprivacy\norgans\nmaker\nload\nfrost\nballoon\nqualifications\nprogression\nlevy\nleaves\nhearing\nvarsity\nsurgical\nsultanate\nreached\nharvest\ngambia\nenfield\nelectromagnetic\neinstein\ndevils\ndevelopmental\ndeluxe\nconcord\ncompatibility\ncolonization\nvisitor\nslough\nmicro\ncontinuing\nariel\naccuracy\nabroad\nwhether\nsage\nregression\npleasure\nmoth\nmet\nhonduras\nbuddha\nvera\nvaccine\ntruman\npropaganda\nprincipality\npassion\nhollow\nfurniture\neternal\ndonna\nconsolidated\nbreakup\nbars\nthirteen\nstud\nspell\nsenegal\nraphael\nphosphate\nfinancing\nends\neat\near\ncord\ncigarette\nwoodland\nvoltage\nvila\nreason\nquarterly\npassive\nessay\nequilibrium\nduff\nconservatory\ncinematography\nbloody\nambulance\nalignment\nthemselves\nrear\nphilharmonic\nmaiden\nhereditary\nfully\nfra\nbubble\nbon\nafro\nsecular\npony\npanic\nolive\nmartyr\nknot\nindexing\nghetto\nfinances\ndeputies\ncone\ncam\nbring\nasset\naged\ntill\nscheduling\nribbon\nracecourse\npsychologist\npremiere\njuice\ngloucester\ngenome\nballad\nwooden\nwheels\nwaiting\ntenth\nsubcontinent\nsquash\nsole\nperception\nmanifold\nleaving\nlamb\nfee\ndylan\ncollar\nautomation\nauditorium\nurdu\ntheft\nrelevant\npassing\nparticles\noath\nfeast\ncyril\ncopy\nbye\nbauer\nastronomer\narrangement\ntoward\nsick\nromani\nregal\nnapoleonic\nmud\ninfluenced\nguided\ndistinctions\nchartered\ncain\naf\nadded\nvanguard\nsunrise\nskyline\npursuit\npowder\npascal\nloch\nlibertarian\nhector\nflux\ncharacterization\nblocks\nauburn\nspeak\nrounds\nrespect\nreef\npreceding\nlea\nkana\nchosen\nbutcher\nbreakdown\nbourbon\nawareness\naquatic\ntorah\nthesis\nquick\nhamlet\nterra\nsensor\nregime\nnumerical\ninfinity\nelectrification\ndharma\ncs\ncreole\ncatalan\nalba\naffiliate\nyo\ntrace\ntitled\nsphere\nsonny\npromote\npinball\nnobel\nnearly\njade\nins\nfinn\nfer\nfalling\neyed\ncoordination\nclinic\nattached\nwatt\ntide\ntaxes\nspent\nrecruitment\nprovider\nmetric\nmccarthy\nharness\nentropy\ncommissioning\nblessed\nrape\noffshore\nnearest\nnato\nlack\nkitchen\nintersection\nholds\ngoose\nfathers\ncompeting\ncola\ntribune\nthrow\nsilk\nrhodesian\npropulsion\npatient\nmat\nmanaged\nhello\nfinding\nemerald\ndying\ndirectory\ndirecting\nassyrian\ntier\nroyalty\npig\npeel\norientation\nmound\nhousehold\ngenealogy\ndrinking\ncontain\nconsole\nconduct\nconclusion\ncellular\ncb\naccommodation\nzen\nweaver\ntextual\ntall\nshan\npainted\nliability\nidentified\ndefeat\nwillow\nviral\nterrorist\nstein\nspur\nroughly\nlogical\njesuit\njennings\ninsect\ncostume\ncollision\ncarried\nantony\nvelvet\ntragedy\nsurgeon\nromantic\nliturgy\nhate\ngoodbye\ncreatures\ncoral\nacute\nvoodoo\nstranger\nsomeone\nnoun\nneighbourhood\ndwarf\ndeadly\nassumption\nacronym\nswamp\nsolidarity\nsands\nmythos\nhubbard\nemergence\ndrinks\ndrag\ndish\ndemocrat\ndelay\nbreaks\nbabylon\nwen\nveterinary\ntam\nshelter\nrelativity\nneutron\nluck\nfeminism\nfault\ncharacteristic\nceremonial\ncaptivity\nbarrel\nsurrender\npredecessors\npenguin\npeerage\noracle\nmal\nflemish\nequality\nbury\nbanner\nattributed\ntreasury\nrt\nrespiratory\nprohibition\nparachute\nimpacts\ncompanions\nclaus\nbrush\nbelieved\nbelief\nvisible\ntranscription\nshine\nphrases\npace\nmead\ninhabited\ngrange\nforensic\neggs\ncircles\ncipher\ncarriage\nworcestershire\ntiming\nsoon\nshooter\nnone\ngoat\nendangered\ncrossover\ncoronation\ncompletion\nclient\nappear\namber\nwrong\nwhale\nwaves\ntrunk\ntire\nswimmer\nprojective\npraise\npossibly\nplanetary\nmarshal\ngalactic\nforty\nfool\ndesire\ncustos\nbotanist\nyukon\nvintage\nterrace\nsilicon\nprices\nopposed\nnickel\nmysteries\nlava\nfloating\ndisability\nconfidence\nammunition\nreturned\npseudonym\npoison\npit\noffering\nnice\nlargely\nknock\nindicator\nhercules\nfreeway\ndaytime\ncalling\nafghan\nsent\nmirza\nmadras\nling\ngus\nfoundations\nforgotten\nexterior\ncyclic\ncoupling\nbrought\nbenedict\nvengeance\nvalencia\nscenic\npapal\nopposing\nongoing\njoining\nisolation\ngrain\ngain\nfinger\ndiagnostic\ndetailed\nderrick\ncite\nchandler\nbuy\nbuddy\nalcoholic\nvacuum\ntwice\nshowdown\nrefugee\nracer\npharmaceutical\noutcome\norphaned\nmoments\nlyrical\nhierarchy\nhaunted\ngrape\nghosts\nclaimed\ncatalogue\ncapabilities\nbumps\ntuning\nrogue\nrenewal\npremium\noccur\nobservations\nnicaragua\nmeasuring\nloose\ninventory\nbowls\nara\naccepted\ntruncated\nticket\nsinus\nrope\nprussian\npathology\nmortgage\nmixing\nkildare\nexist\ncontinent\nbuzz\nbrewer\nyearly\ntransform\nrites\nrelating\npacket\nentire\nwonderful\nverses\nsubgroup\npot\nmater\ninvented\nhara\nfeeling\ndentistry\nbrotherhood\nbel\nasylum\nnominated\nmonetary\nkara\ninheritance\nindirect\nequity\ndub\ndemo\ncircular\nbride\nallow\ntwisted\ntriumph\nshoe\nrepertory\nqualified\nprehistoric\noutreach\nleninist\ninterval\nelectorate\nunofficial\ntoed\nthyroid\nrhythmic\nresulting\npotassium\nwilly\nspinal\nsignaling\nreduced\nliberties\nlattice\nemployee\ndinosaur\ncreed\nboss\nblitz\nva\nsynagogue\nsuppression\nsuperstar\nsuffrage\nsuccessors\nportal\nink\nhavana\nforamen\nexpo\nenhanced\nconverted\nattributes\nvelocity\nugly\nquarry\npeabody\nnonfiction\nnapoleon\ninstallations\nimmaculate\ngridiron\ngeneralized\ndoom\nworst\nvickers\ntaste\nrover\nrecently\nrational\npostgraduate\npenalty\nmer\nmath\nluna\nknee\ninduction\nhedgehog\ngorge\ndominion\ncycles\ncampo\nbug\namusement\nwrite\nshake\nsalmon\nrelegation\npetit\npatriotic\nparking\nneutral\nmafia\ninspector\nhoffmann\ngiving\ndistinctive\nceremonies\nbrick\nbreaststroke\nbomber\nbobsleigh\nadvantage\nadler\nsuperintendent\nserious\nscreening\nmoroccan\nmargin\nlesbian\nhistoriography\nhiking\nhang\nfry\nculinary\nbacterial\nsauce\nsandwich\nrh\npike\nmeadow\nlover\nillusion\ngore\nformulation\ndisposal\nanything\nsleeping\nshoulder\nsaved\nrelatives\nprototype\nprophet\nplexus\npal\nmerry\nmauritius\nfiat\ndischarge\ndestination\nconsciousness\nbundle\naffect\ntypeface\nsynthetic\nrelatively\nrealism\nprofessors\npaisley\ngoldberg\ncomparative\nautism\nalumnae\naccessories\nwax\nspotted\nsheikh\nrays\npentathlon\nmixture\nlonely\nexperiences\nexcept\neffectiveness\ncraven\ncamping\nbluegrass\nalley\nyiddish\nwreck\ntry\ntakeover\nstella\nshoes\nsang\nsacrifice\nregarded\npowerful\nnovi\nencounter\neddy\ncage\nbackstroke\ntold\nredistribution\nrabbinic\nphases\nfreemasonry\ndowager\ncontested\nclerk\nchant\nannounced\nsynod\nrockies\nreported\npsycho\nluge\nira\nhemisphere\ngenocide\nfollows\nfeud\nexecutives\neffort\ncompared\nbugs\namor\nwedgwood\nutilities\ntertiary\nremaining\npunch\npricing\nodyssey\nmongolia\nflooding\ndrainage\ndracula\ndiplomacy\ncustody\ncubic\nchronic\ncaucasus\nbloom\nbattalions\nweir\ntransaction\nscandinavian\nraising\npython\npercussion\npaddy\ninsurgency\ndesperate\ncritique\nconnect\nburgess\nbuilder\nviolinist\nrooms\nmoody\ninnocent\nfriendly\ndenomination\ncrusade\ncovenant\nchamp\ncafe\nbullet\nbaton\nbarking\nworms\nworkshop\nweird\nsurfing\nscarlet\nsaddle\nrue\nque\nnickelodeon\nmachinery\nlocality\ngal\neducated\ndice\ndeals\nconstellation\nchemicals\ncardiac\nblanc\nvega\nslovenian\nsetup\nrevision\nquotations\nincreasing\nhydrology\nheard\nelm\ndissent\ndiscrete\ncorvette\ncollecting\narrangements\nappleton\nsubordinate\nsouls\nsirius\nreich\nnerves\nmemoirs\ninternationally\nhear\ncorrespondence\ncharger\nbrave\nalarm\nadvisor\nupgrade\nsafari\nmetabolic\nmarked\nlevin\nlatitude\nforks\nexclusive\ndixie\ncowboy\nconstraint\nconsecutive\ncommissions\nbottle\nbamboo\natmosphere\nanonymous\nvital\nsubstance\nsensory\nobsolete\nmonarch\nmilo\nivory\nhunger\ndiamonds\nconfessions\ncavendish\naudit\ntwain\npaperback\nmob\nmanx\nimmune\nhub\nhq\nglider\ngeometric\nemerging\ndom\ndaisy\ncauseway\ncapitalism\naspect\nallocation\nable\ntractor\nsalvation\npulse\npatriarch\nparamount\nordnance\nnormally\njeremiah\nfrankenstein\nemployed\nemission\ndauphin\ncha\nburmese\nalta\ntrout\nsulfur\nspirits\nsad\npick\nobserver\njaguar\ngreens\nfinished\nemeritus\nea\ndirt\ndecoration\narray\nspecialty\nscanning\nrosemary\nregistry\nreasoning\nraja\nmarquis\ndeception\ncorrection\nclick\nbanded\nadvice\nzinc\nvotes\nties\nstrain\nrhetoric\nrepertoire\nrealm\nordained\nnightclub\nministerial\nmemories\nlemma\ngraf\ncontrols\ncongenital\ncolliery\nbrowser\naux\nactivation\nwrath\ntextile\nranked\nportfolio\noffence\nkaiser\ninverse\ninformal\ninclusion\nhawker\nforestry\ndownfall\ncomputation\ncheap\natkins\nalias\naccessibility\nturf\nterrain\ntermination\nslide\nseasonal\npatronage\npastor\nmercer\ngreco\ngladstone\nfanny\nextraordinary\ndramatic\ndiver\ndirk\napprentice\nvolcanic\nterrestrial\nsubsequently\nsalamander\nrouting\nquiz\npetty\nliechtenstein\nlaguna\ndocumentation\ndecomposition\nbutt\nbilled\nbadger\napproximation\nanalogue\nsinking\npolynomial\npaint\npaid\nmaze\nmalay\ninequality\ndistinction\ndisclosure\nbegin\nbeetle\nunlike\ntiny\nstrand\nscales\nresorts\npub\nphilanthropist\nmorrow\nlaid\ngale\ndisbandment\ndining\ndifficulties\ncreature\ncelebrations\ncelebrated\nbeacon\nyourself\ntriangular\nthermodynamics\nslaughter\npseudo\nmatching\nillustration\neucalyptus\nerrors\ncurves\ncaucus\ncatholicism\nbonds\nbet\nworm\nteeth\nstreaming\nstack\nscar\nopposite\nnegotiations\nmidway\nmadame\nlambeth\ninstant\ninstallation\nincredible\ngliding\nfragile\nfracture\nexact\neel\ncriterion\nbotanic\nbloc\nalphabetical\nacetate\nvar\nsyndication\nstrawberry\nscheduled\npp\npossession\nphenomena\nodd\nmystic\nlifeboat\nimmediate\nfluoride\nedo\ncontainer\ncharted\ncaste\nblow\nbare\nbanker\nantenna\nabbreviation\nwetlands\nviolent\nlegality\nknox\nagenda\nwarehouse\nvortex\ntemperament\nsymmetric\nstability\nsnakes\nsized\nreorganization\nprecedence\nlemon\nissuing\ngetting\nfascist\nexception\nemigration\ndifferentiation\ncomprising\nbugle\nbreast\narabian\naffected\nacclaim\nwonderland\ntwist\nstrictly\nrana\npontifical\nmomentum\nmartini\nhen\nheating\ngreenwich\nexposition\neisenhower\ndiabetes\ncutter\nburied\nbent\nastrology\nalmanac\nwealth\nviolet\ntitular\ntears\nstable\nshorts\nsecure\npropagation\npension\npeacock\nmister\nlottery\nleather\ninterim\nincreased\neleventh\ndrilling\nbowman\nbeverage\nbasket\nworkplace\nsubstances\nstrings\nshia\nrodeo\nmassive\nmae\nhellenic\nfaced\nabandoned\ntor\nspherical\nsecretariat\nrelevance\nranging\npollard\npie\noxidation\nnose\nmounted\nimmortal\nextraction\nemotional\nelectro\ndetermined\ncascade\napache\namour\nairborne\nvirtue\nstereo\nsocialism\nrevelation\nrearrangement\npedigree\nnov\nlagoon\ninfo\ninfectious\nimmunity\nfreedoms\nexam\nconsultant\nconsort\ncolored\navalon\nassignment\nprotective\nmora\niota\nenter\ndash\nconditional\nbunch\ntemperance\nsimulator\nreaders\npt\nperform\npar\nmask\nmajesty\nmagnum\nliquor\nhyperbolic\nharassment\ndresden\nvenetian\ntumor\nphysiological\nlazarus\ninhibition\ninaugural\ngarage\nextant\nchow\ncassette\nbravo\nbison\nbirch\naesthetics\nwoo\nwitness\nwarm\nvisitors\nshed\nremoved\nprivilege\nnotably\nmai\nmagnificent\nlatvian\nfur\nflames\nfixtures\ndiverse\ncustomer\natoms\nyeshiva\ntune\ntrauma\ntrained\nthor\nsupernova\nstriped\nsiberian\nshoot\nsherlock\nservants\npromoting\npharmacy\nmisconduct\nknoll\njockey\nhon\ngland\nfranciscan\nestablishing\ndrift\ndescribing\ndemonstration\nconcern\ncent\nbehavioral\nbanknote\nsnack\npull\nprism\nperhaps\nmetropolis\nmare\nloved\nlamp\njubilee\ninvitation\ninverness\nideals\nfunctionality\nexpeditions\nentered\ndavenport\ncow\ncitadel\nchemist\nburr\nbrethren\nbeau\nbearing\nvermilion\ntelecommunication\nrancho\nportage\npact\nmortal\nmermaid\nleach\nlap\nkernel\ngrow\ngenius\nexplanatory\nbadges\nyards\ntrafficking\nscrew\nmenu\nharp\nguidance\ngrim\ngravitational\nfirefly\ncrack\nconcerned\nclaw\ncavity\narithmetic\narchaeologist\nabsorption\nabsence\ntrustees\nsketch\nreduce\nqui\norient\nopportunity\nnatal\nmongolian\nmating\nmaoist\nmao\nliver\njewel\nhumanist\nhogan\ngifted\nempirical\ndetail\ndane\ncounseling\ncoordinate\ncookie\ncompliance\ncommentator\ncolumbian\ncoffin\nchili\napproval\nanchorage\nallowed\naeronautics\ntitan\ntestimony\nswords\nsportsman\nrand\npoetic\nmaltese\nlinn\nkidd\nhymn\nhydraulic\nhazel\nglover\ndevelop\nconfusion\nconfused\ncompete\nbucks\nabdominal\nunderwood\nsweat\nsimplified\nruins\nprediction\noffer\nnecessary\nhaitian\nexecuted\neruption\ndisputed\ncommands\ncock\nchesterfield\ntarzan\nrestricted\nrequest\nrationale\nprofession\npas\nmutiny\nmarin\nmanner\nlinguist\njock\nfreshwater\nfrequencies\nextensive\ncarrying\nbordeaux\nbengali\nacceptance\nviva\nvatican\nsyndicate\nspouse\nrepatriation\nore\nlistening\nlayers\njehovah\nfrontal\nentertainer\ndecay\ncrowned\ncoating\nburgundy\nwindmill\nwharf\nweak\ntristan\nslim\nsitting\nsavings\nsanitation\nreferring\nreducing\npunisher\nprimitive\nparrot\nnaturalist\nhereford\ngraduated\nfunny\necosystem\ndemons\ndart\nalongside\nwhatever\nskip\npreserved\noyster\nnominative\nmessenger\nmesa\nmemoir\nfringe\nevacuation\nenhancement\ndetachment\ndecatur\nchristi\ncartridge\nbolt\nvictim\npornography\nkilkenny\ninjection\nincarnation\nhahn\ngabon\ndeposition\nconvent\nchampagne\nchamberlain\nbulletin\nblank\naztec\nambrose\nalert\nala\najax\nthriller\nsigning\nremembered\nportrayal\nordered\nmeditation\nlightweight\njuvenile\njohansson\nfoundry\ndirections\ndiffusion\nchains\ncentered\ncasa\nbutte\nbounds\narmies\nandes\nadaptive\nviaduct\nsikh\nschemes\nsaturn\nsahara\npsychiatric\nmono\nlent\nhormone\neveryday\nestimated\ncottage\ncorrelation\ncapped\ncapacitor\nami\nsufi\nsalary\nplum\nnile\nmummy\ninferno\ncourthouse\ncontra\ncommunism\ncalcium\nbreathing\nbabe\nwoody\nwicked\numbrella\nturning\nseconds\nsail\nroar\nprosecution\npolling\npm\nlocke\nitem\nill\nhulk\nguidelines\ngrateful\ngong\ngamble\nfifty\ndespite\ndenial\nclash\nbounded\nballot\nask\namphibious\nvary\nsud\nstupid\nstatute\nstance\nsingular\nsalvage\nsahib\npathway\nmoonlight\nlikely\nforbidden\nfingers\neating\ndivinity\ncornish\ncharley\nbutton\nblanche\nbenito\nwound\nwhitehead\ntight\nteller\nsentinel\nprevent\nobserved\nmarble\nlime\nlegs\njurist\njacket\ning\nincorporation\nfragments\nfake\ndow\ndivorce\nconfluence\nchestnut\ncanoe\ncannot\ncamel\nbench\nark\ntaught\nsuccesses\nstreetcar\nsoprano\nsikhism\nretrospective\nperipheral\npax\npaste\nok\nmosaic\nfried\neponymous\ndominance\ncounting\nconverter\nconsistency\nzombie\ntwinning\nthreshold\nsurprise\nsort\nroe\nretailer\nracism\nprophecy\npriority\noversight\norion\njeep\nintensity\ninspection\nentering\ndevoted\ncleaning\nbowler\narcadia\naquatics\nwait\nserpent\nprecision\nluxury\nlocks\nintegrity\ninstructor\ninfrared\nhack\ngreenland\nfires\neventually\ndyke\ncosmology\ncooling\ncarpet\nbohemian\nzion\nuseful\nthief\npulp\npork\npilgrimage\nmedley\ngarde\nfrozen\nfinale\nembedded\ncervical\ncart\nbandy\napproved\nadder\nworn\nsesame\npetrel\norchid\nmicroscopy\nlearn\nkitty\nkeeper\ngorilla\nfallout\nexceptions\nconfession\nconceptual\nchassis\nachieved\nverbal\nvaluable\ntherefore\nspine\nreturning\nreflection\npercentage\ninvitational\niberian\nfed\neveryone\ndefender\ncatalog\nbonding\nboer\nbishopric\naqua\nwisdom\nverification\ntrainer\nsolitaire\nrent\npoisoning\npod\nphotographic\nperiodic\npatch\nnobleman\nmetals\nmanly\nlit\nhelmet\ngeneralization\nfen\nexcess\ndeity\ncomfort\nchromosomal\nbleeding\nautonomy\nusaf\nstuff\nspice\nspence\nshut\nsequential\nsanitary\nrespectively\nreconciliation\npenal\nmoose\nkarate\nimproved\nimmediately\nhorizon\nhee\ngrappling\nfunded\nexpulsion\ndolphin\ncube\nconvict\nclergyman\nbong\nbisexual\nbis\nbeard\nbackward\namplifier\ntricks\ntransistor\ntraits\ntablet\nremembrance\npredator\npooh\npillar\nnazareth\nnarrator\nkite\nkettle\ninland\nhumor\nhound\nginger\ndownhill\ndealing\ncope\nbiochemistry\nbanana\navant\nago\nunmanned\nspiral\nrusty\nresearcher\nreproductive\noption\nmirage\nmandatory\nlying\nkitchener\nkidney\ngrandson\ngarland\ngao\nfiscal\nelk\ncordillera\nconvex\ncactus\nblackout\nasa\napart\ntraction\nsit\npegasus\nmaxim\nlimestone\njoin\ninterference\nhandbook\ngem\nfourteen\nduct\ndivisional\ncyrillic\ncounsel\ncapability\nbor\nbm\nbelong\nbellied\nape\nalter\nveins\ntopic\nskinner\nshuttle\nreserved\nquarters\nprivy\nida\nhealing\ngenealogical\ndoors\ndeacon\ncrowd\ncompass\ncoefficient\nclouds\ncelestial\ncaptive\ncanvas\nblizzard\nbeef\nascension\namalgamation\ntycoon\nthoughts\nsergeant\nru\nmasked\nguerrilla\ngage\nfold\nensign\nbalkan\nbald\narteries\nvegetable\nturnpike\ntuck\ntrojan\ntidal\nserra\nrye\nrituals\nprecursor\npartisan\npants\nopus\nonto\nneon\nmargrave\nlatent\nkarma\ninvasive\nemotion\ndonation\nbombardment\nangular\nalps\nyoga\nwaterfront\nveteran\ntun\ntango\nsupplies\nsovereignty\nsect\npest\notter\nnovella\nnobody\nmagnolia\nkidnapping\nkeeping\ngranted\nfibers\nendowment\ncoined\ncarbonate\nbismarck\nwilton\nwedge\nvertigo\nsymbolic\nsemantics\nscotch\nprovision\nnest\nmagnesium\nhumanity\nheraldic\ngemini\ndiscourse\ndepending\ncortex\nconvoy\ncerebral\ncausing\nbuster\nbrake\nayrshire\nargus\naccession\ntortoise\nswitching\nscenario\nryder\nrumble\nrobbery\nrefinery\nquote\npartially\nmillionaire\nmg\nmanipulation\nlecture\nirrigation\nextremely\neternity\ndreaming\ndepiction\naccountability\ntraded\nsudden\nshelf\nsaxe\npolls\npercent\norganizing\nmedicinal\nlunch\nlaird\nfloral\ndivide\ncooled\nbrier\nboo\naffecting\nzoom\nvalued\ntransverse\nstops\nspectrometry\nspartan\nshining\nsap\npetition\npatty\norchard\nmysterious\nmagnitude\nkali\nir\nidentify\nhalloween\nexpressions\nerasure\ndungeon\ncolumnist\nattended\naccord\nvarying\nsaratoga\nreliability\nobtained\nmarx\nmania\ninception\ngrill\ngranite\nfascism\nelliptic\ndispersion\ndiploma\ncurvature\ncousin\nclipper\nballs\navatar\nassurance\napparatus\naimed\nadmiralty\ntimber\ntied\nstandardization\nsettled\nscalar\nrhyme\nreferee\nrecall\nprospects\nprinter\nmood\nlore\nhorticultural\ngentle\ndisabled\ncroft\nconstraints\nceramics\nbutter\nbologna\nyours\nupcoming\ntender\nstrict\nsqueeze\nspan\nsheets\nprep\npops\nolympiad\nnightingale\nmyself\nmagician\ndetermining\ncuts\ncop\ncontained\nconstable\naviator\nallowing\nuncertainty\ntreatise\nsulfate\nrune\nrotary\nrenowned\npalazzo\noctave\nnuts\nmodernization\nleopard\nhurdles\ngoldsmith\nfuck\ncosmos\ncisco\ncannabis\nbenton\nyahoo\nvaluation\nulysses\ntwelfth\ntransporter\ntrader\nsyriac\nsatisfaction\npotato\npolyhedron\nlearned\njupiter\nhose\nhanging\nfog\nfinally\nfender\nestablish\nescort\nduality\ndoe\ndisplacement\ndingle\ncaught\nboxes\nbard\nzebra\nvaliant\nunusual\nthorn\nsurveyor\nstunt\nsmoky\nsampling\nsal\nregeneration\nreflections\nrebuilding\npredominantly\npolymer\npol\npatron\npanda\npalau\nnasty\nmistress\nmag\nflats\nfiring\neighteenth\nedges\ncompletely\ncirca\nbarn\nballads\nwoodlands\ntorch\nstraits\nstatesman\nshetland\nrecruiting\nrcaf\nplague\nphosphorus\npagan\nolympus\nmori\nlicence\nimpossible\nhowitzer\nexpected\nester\ndefeated\ncanary\nbackup\nasteroid\nalameda\nadobe\nweighted\nvapor\ntroop\ntoto\nsup\nstreams\nsportscaster\nsorry\nrotor\nmarking\nlongitudinal\niconography\nhomosexuality\nharm\ngrouping\nfence\necumenical\ndonor\ndirective\nding\ncroix\ncondor\ncayman\nblossom\nbacon\nzodiac\ntoxic\ntaxonomic\nswallow\nstructured\nrho\nps\nphotograph\npetrol\npayments\nnitrogen\nmortality\nminoan\nmagna\nlantern\ninterscholastic\nidentifier\nhungry\ngym\ngovernorship\nfranc\nfederated\nexplosive\nestimation\ncommitted\ncoca\nbanned\nbabylonian\navalanche\nalready\naging\nvalidity\nsos\nrust\npunjabi\nproposition\nplug\npiston\noperate\noccasionally\nnewly\nmod\nlivestock\ninvariant\nhappiness\nfriction\nfrequent\nascent\nyield\nwidespread\nwalnut\nvicinity\ntoilet\ntexture\ntar\nsui\nspiders\nsentencing\nrenal\nreceiving\nrambler\nprospect\npitchfork\nmenace\nmeant\nmaxillary\nlobe\nkept\njasper\ninitiation\nfetal\nego\ndistillery\ncrab\ncongregational\nvowel\nultraviolet\nsupplement\nsemiconductor\nsec\nprobe\npitching\npile\nordination\nmalayalam\nlisten\nhitchcock\nglue\nfatty\nduration\nconservancy\ncommitment\nchew\nburgh\nactually\nyankee\nwhig\nturned\nstimulation\nsight\nresurgence\npromoter\nprocedural\npriesthood\npneumonia\npanorama\noutlaw\nonion\noceans\noccurring\nmarches\nlounge\nlivery\nlease\ninnocence\nhomestead\nhimalayan\nhash\ndelayed\ndecree\ncypress\ncryptography\ncine\nchord\ncentenary\ncartesian\nburden\narbor\nwinged\nwatching\nturkic\ntrend\ntnt\nstrongest\nstony\nslot\nslightly\nrestructuring\nplato\npilgrim\npali\nmasses\nlogging\nisis\nindustrialist\ngypsy\nganglion\nexcavation\nerosion\ndollars\ncolt\nblocking\nautoroute\nwhiskey\ntransitional\nthroated\nthank\nswitched\nspotlight\nsapphire\nretention\nrequiem\nrepeater\nreliable\nprevalence\nphonological\npermutation\nmitigation\nmarketplace\nmarijuana\nloyalist\nlibre\nisaiah\nhog\nhoax\nhexagonal\nexclusively\nelse\ndonkey\ndedication\ncocktail\ncloth\nclearing\nbillion\nanalyst\nturk\nthirteenth\ntattoo\nsting\nshortly\nsensitivity\nparody\npanzer\nmausoleum\nlose\njaw\nflexible\nfascia\nexpressed\nequivalence\ndistant\ndiscus\nconcurrent\nanalytical\nyoungest\nvegetarianism\ntrigger\nsuture\nsupplementary\nsniper\nslope\nshipyard\nshiny\nraise\nprecious\nmule\nknitting\nimplemented\nheron\nfit\nfistula\nfinishing\neyre\nemblems\ndominant\ndependency\ncrop\ncollier\nbriefly\nbore\nbile\narchery\nwarlord\nviceroy\nvicariate\nsturgeon\nshall\nrefurbishment\npour\nnapa\nlinking\njewelry\nhummingbird\nhomo\nfarewell\nentirely\ndomination\ncommuter\ncharged\nbeneath\nassist\nannouncer\nalligator\nvisualization\ntaxi\nstandardized\nsociologist\nrum\nrequirement\nprogrammer\noblique\noasis\nnumerals\nnovo\nneath\nmayflower\nmate\nloud\nlosing\nhumane\nhotspur\neuclidean\nesperanto\ndye\ndickens\ncruel\nconsumers\ncompetence\ncompatible\nbullock\nballistic\nbaghdad\nalveolar\nwesson\nuptown\nsymphonic\nspirituality\nspending\nshortest\nrestored\nreplication\noptional\nopponent\nnun\nneedle\nmessiah\nlobby\nlivelihood\nliaison\njuliet\nhut\nhence\nhelped\ngut\napartment\nwaltz\nvulgaris\nunderlying\nsystematic\nslug\nsegregation\nsargent\nsalad\nrink\nreverend\nrepetition\nregatta\nrama\nquantitative\nprotectorate\npreacher\nparasitic\noceanic\nnaga\nlumber\nloving\nlm\njail\nhomology\ngrown\ngoldstein\nglacial\ngerm\nfooted\nequatorial\nepilepsy\ndose\ndioxide\ndealer\ncourage\ncorrosion\nchest\nchat\nbullying\nbuffer\nbreaker\nbiologist\nbeaufort\nbeans\nwarship\nviewing\nvacation\nunfinished\ntreasurer\ntalmud\nsuspended\nstimulus\nstain\nskill\nshirt\nsensitive\nrival\nrevolutions\nradial\nquantity\npros\nprepared\npermit\npale\noptic\nnab\nmute\nmerlin\nmaintained\nleukemia\nlethal\nlc\nkhmer\njp\nhomeland\nheap\nfacto\ndoomsday\ndahl\ncrafts\ncombine\nclassroom\nbulk\nbold\nboiler\naddiction\nzulu\nwinery\nwinds\nvalence\nuncertain\ntraveling\ntones\nthumbnail\nthoracic\nsickness\nsentiment\nscratch\nrug\nroach\nrepeal\npulmonary\npease\npaw\noutfielder\nontology\nlombard\ngala\nfreedman\nearned\nclone\nboolean\nav\nabnormal\nwhites\nvegetables\ntrance\nsynchronization\nsupernatural\nsubmission\nsteady\nspecified\nserge\nrochdale\nreplica\nprey\npickup\npicasso\npartridge\nofferings\nmonorail\nlimitation\nleak\njonah\nic\nguilty\ngradient\nflagship\nfission\nexclusion\nefficient\ndive\ndiffraction\ndestroyed\ncleopatra\nclarinet\nci\ncabin\nbleach\nauthentication\narmageddon\narchival\nsensation\nsatan\nsampler\nrub\nromano\nrediscovery\noctopus\nnorma\nneeded\nmolecule\nlip\nlever\nkin\nimprove\nforget\nfertility\nenduring\ndusty\ndexter\ndecorative\ncorresponding\ncorona\nconjugation\ncomparable\ncolbert\ncardiovascular\ncadets\nanthropologist\nannex\nade\nabba\nwool\nwee\nvine\nvertex\ntreason\nsuffix\nspark\nshear\nsell\nrelational\nquickly\npursuivant\noutlet\northodoxy\noratory\noccipital\nnowhere\nnode\nlinden\nknows\nincidence\ninauguration\nhomicide\nhickey\nforge\nfont\nfacing\nendless\ndiscontinuation\ndiocesan\ndancers\ncuckoo\ncrested\nbey\nartistry\nanarchism\ntuberculosis\nskeletal\nrevealed\npeck\noptimal\nnautical\nmutation\nmecklenburg\nlyric\nholes\ngrading\ngens\nforth\nfisherman\ndorsal\ndetainee\ndeleted\ndefining\ndeclared\ncrimean\ncontributing\ncombustion\ncantonese\ncameo\nbellevue\ntherapeutic\nstampede\nseparated\nrunic\nriviera\nrendering\nreally\npupil\npropelled\npiercing\nnarrows\nlakeland\ngrapes\ngrad\ngoverned\nfunicular\nfoam\nflies\nfirsts\nfaust\nextending\nexcalibur\nemirate\ndoctoral\ncontinuation\nceramic\ncapable\nbunker\nbasics\naltar\nadvancement\nwow\nwidow\nvendetta\ntanner\ntalks\nsubstrate\nsteward\nsitcom\nprotestantism\npharyngeal\nnursery\nmodulation\nimmigrant\nhackney\ngi\nfeather\ndozen\ndavy\ncontraction\ncasualty\nbutch\nbreath\nballroom\nbacking\naryan\napartheid\nahead\ntitanic\nthick\nstationary\nstarts\nshots\nrc\nrattlesnake\npublicity\npreview\nprayers\npisa\nou\nnutritional\nmortar\nminimal\nmedication\nmd\nlowest\nloading\nlithium\nlibyan\nlexicon\ninflation\nhandle\nfilled\ndefending\ndefect\ncorrespondent\ncharities\ncantata\ncanals\ncache\nbra\nblink\narranged\naeronautical\nadding\nwoodpecker\nwholesale\nupdate\ntough\nsubcommittee\nspots\nspinning\nsomebody\nsimilarity\nrag\nplayhouse\nphd\npatches\nnotice\nmole\nliner\nkc\ninvestor\nidentical\nhydrography\ngrassland\ngaza\nfluorescence\nfifteen\ndraper\ndismissal\ndisciples\ndietary\ncylindrical\ncongressman\nbitter\nbiosphere\nbays\navoidance\nattitude\nwage\nviola\nutopia\ntheorist\ntemplate\nstreak\nsnub\nsixty\nshortened\nrook\nmeters\nmarathi\nlib\nkinetic\nindra\nimprint\nimaginary\nignatius\nfruits\nfertilization\nfay\nestimate\ncourier\ncomplaints\ncloser\ncarotid\ncanning\nbun\nbats\narrested\nzoology\nwarrant\nverve\nultrasound\ntomato\nterminus\nsupermarket\nshallow\nsecession\nscattering\nreleasing\nradius\npsychedelic\nnoteworthy\nniche\nnasal\nmeal\nmarge\ninflammatory\nidler\nhorseshoe\nhatch\nfreak\nfocal\nfeudal\nessayist\nendocrine\nelevated\ndunlop\ndamned\ncurt\ncourtier\ncorners\ncommandments\ncapsule\nbrowning\nbreach\nbirthplace\nattachment\ntransliteration\nthanksgiving\nsolving\nsham\nsans\nrestriction\nrejection\nnouvelle\nmoderate\nmess\nisolated\nhexagram\nharrow\nencore\nemu\ndescriptive\ndagger\ncw\ncourtesy\ncolonialism\ncod\ncheetah\nbust\nboca\nbite\natoll\nappraisal\nanger\nwoolly\ntransferred\nswim\nsuggested\nstated\nsorrow\nshiva\nrotating\nresidency\nradioactive\npupa\nproving\nphylogenetic\npassword\nmotive\ninorganic\nhilltop\nhernia\nfixing\nfitch\nfin\nenlightenment\neared\ndrill\ndelight\ndaphne\nblanket\narmada\namongst\nyam\nwestland\nviper\nundercover\nthieves\nsupports\nstudying\nscream\nscholastic\nrim\nprivately\nperennial\noutlook\nopossum\noils\nmahatma\nlookout\nkern\njoke\nisotope\nintention\nindications\ngum\nenchanted\ndeposits\ndecimal\ncurious\ncriminals\ncops\ncolumba\nbootleg\nbilingual\nanswer\nadvent\ntypology\ntweed\nturbine\nthousands\ntension\ntarn\nstraw\nshrimp\nsclerosis\nreciprocal\nqueue\npumping\nmeteorology\nmedian\nmau\nlyceum\nionization\nfestivities\nesp\nelectors\nelbow\ncrooked\nconsulting\nconcessions\ncinematic\nchalk\ncarving\nbreakers\nbaptism\narchaic\nwearing\nsweets\nspear\nshapes\nshame\nsalute\npuppet\nporcupine\npolly\npoles\npennant\nnominal\nmeasured\nmaintain\nlarva\nirregular\nhomecoming\ngrizzly\ngram\nflour\nfamine\nfabian\nexploitation\nevangelist\nenclosure\ndeeds\ncorrigan\nconsultative\nceres\ncanine\nbacked\napex\nwagon\nvedic\nvalidation\nunicorn\nsunni\nstatehood\nsoda\nshares\nseating\nrunway\nquaker\npygmy\npu\nproxy\npapa\nmythological\ninterdisciplinary\nhindustani\ngunner\nfocusing\nfiltering\nethanol\nefficacy\ndynastic\ndeposit\nconsensus\ncompromise\nannexation\nambient\nvaccination\nswat\nsurroundings\nscot\npurity\nprolific\npoly\nombudsman\nmock\nmichelangelo\nmessages\nintent\ngoliath\nfortification\nexercises\neponym\ndocumented\nconformal\ncircumstances\ncausal\nbrandy\nboa\nbatch\nave\nadviser\ntrolley\ntreated\ntreat\nthrowing\ntendency\ntavern\nstruck\nstigma\nsmallest\nrunaway\nroanoke\npreparedness\nloser\nintrinsic\ninternment\nhydro\ngrammatical\nforeman\nforaging\nespionage\nduel\ndowning\ndifficult\ncoconut\ncents\ncartilage\ncamouflage\nbitch\nars\nsupplemental\nsermon\nserena\nseaman\nsabbath\nqualifier\nquail\nprotagonist\npipes\nparental\njolly\ninteresting\nholm\nherring\ngettysburg\nfunky\ndisposition\nconvocation\ncontingent\ncaucasian\nbiscuit\nbark\naxe\nawakening\naustralasia\naqueduct\nantique\naccelerator\nwarp\nvita\nunsolved\nthread\nternary\ntent\nsupremacy\nsn\nsleeve\nshowcase\nsatellites\nritter\npreference\npowerhouse\nphoebe\norchids\nmil\nlowland\nlite\nlister\nlexical\nlao\ninstances\ninsertion\nhung\nfired\nerotic\nenlisted\nembroidery\ndefine\ncrossroads\nconducting\ncleanup\ncement\nboomerang\naccused\nwrit\nunrest\ntrident\ntrailer\nsomewhere\nsocio\nsegmentation\nrhino\nreel\nreaching\npharaoh\npetite\npersistent\npendulum\npencil\npahlavi\nomnibus\nnestor\nmysticism\nmiddleweight\nmetaphysics\nmaximus\nmarlin\nmammal\nloyalty\nlecturer\njug\nhershey\ngrenade\ngarner\nfolding\nfix\ndragoon\ndoubt\ncp\ncougar\ncouch\nclearance\ncarver\nbock\nbidding\nautobiographical\nantelope\nwolverine\nvalor\nslick\nsingleton\nshutdown\nscored\nringing\nreopening\nraider\nproud\npoppy\nplagiarism\npico\nphonetic\npatience\noscillator\nmilky\nlust\nlama\nimpression\nhypothetical\ngentleman\ngalley\nfreed\nextract\nemery\neasily\ndelivered\ndegradation\ncutaneous\ncigar\nbrilliant\nappropriate\nalchemy\naccessory\nslip\nscreaming\nrepeat\nrector\npropeller\npromenade\nocular\nnaturally\nmoselle\nmicah\nmaturity\ninverted\ninfirmary\ninactive\nholocene\nflotilla\ndistributor\ncompiler\ncollateral\nclimax\ncatcher\nbreathe\nbeasts\nbaths\nbaritone\nannuity\nancestral\nadjustment\nwoodruff\nwiener\nspheres\nseeking\nromanticism\nrip\nrevue\nrepeated\nprentice\npluto\nparadigm\nnosed\nness\nmover\nmisty\nmadden\nhospitality\ngardening\nfootwear\nfilling\nessence\nelephants\ndig\nconfirmed\nclemens\ncabaret\nambiguous\nafterwards\naccept\nwhip\nvogue\nturns\ntenor\nstretch\nskies\nsiberia\nsend\nsemitic\nsac\nquay\npea\npad\nolympian\nnephew\nmonastic\nmist\nlocalization\nleap\nkicks\njuniper\ninsolvency\nhorticulture\nhabit\nfurnace\nflowing\ncontributor\ncommunion\ncolleen\nchic\nbounty\nbingo\nbehalf\napparent\napology\naluminum\nwick\nviewed\nvicious\ntransliterated\ntaro\nstellar\nsamson\nreformer\npsychiatrist\npositioning\npays\nornithology\nminds\nmagistrate\ninitiated\nindigo\nindicate\nidentifying\ngully\nglow\ngastric\nfootage\nfollowers\nfirth\nfare\neverest\nestuary\ndial\ncriminology\nclown\nchick\ncharting\ncartel\ncalculator\nbethel\natheism\narranger\namino\nadditive\nabandonment\nvineyard\ntrench\ntreasures\ntally\nspruce\nsorted\nsenna\nremain\npedestrian\noperatic\nnotorious\nmystical\nmurderer\nminer\nlees\ninvestigative\ninquisition\ngull\ngrip\nfiddler\ndistinguishing\ndeus\ncurl\ncontinue\nchips\nbullets\nblessing\nblaze\nblackbird\nbertha\nalloy\nadd\nachieve\nworkman\nwit\ntubes\ntroupe\ntracker\ntort\nterrible\ntariff\ntackle\nsmyth\nsmash\nsixteenth\nshade\nseger\nrobust\nreplace\nrelics\nreactive\npistons\npinto\npawn\npanhandle\norpheus\nnonlinear\nnewborn\nneptune\nmetaphor\nmala\nlightship\nlending\nkitten\nhume\nhumanism\nheavily\nhazard\ngoshen\nfill\nfaithful\nexhibit\neros\nenigma\ndynamical\ndew\ndestroy\ndebating\ncrook\ncora\nconsist\ncompulsory\ncombining\ncavalier\nbromide\nbourg\nbetting\naxial\naggression\nvis\nsunny\nstyled\nsticks\nsteering\nsquire\nsocietal\nsettler\nroc\nreaper\nperpetual\npenelope\npeach\nnotification\nnotch\nmaroon\nmaintaining\nlifts\nkinship\ninterrupt\nimagery\nheavenly\nhaunting\nharmonic\nfamilial\nengaged\neldest\ndandy\ndamages\ncu\ncobalt\ncharm\ncaribou\ncane\nbucket\nbombardier\nbeep\nbeating\nauthenticity\nasymmetric\nwounded\nvitamin\ntoe\ntextbook\nsuperficial\nsteppe\nsphinx\nsoloist\nsexy\nsb\nreceive\nprofanity\npoplar\nnorthland\nmushroom\nlobster\nlineman\nlibretto\nkinetics\njar\nhorned\nguarantee\nfreelance\nforecasting\nflex\nfanning\ncyst\ncoronary\ncontamination\ncommodity\ncamino\nbetrayal\nbarley\nassumptions\narbitration\nangry\nallegro\nale\nwhereby\nutilization\ntroopers\ntorsion\ntechnician\ntangerine\nsulcus\nstout\nstiff\nsink\nscripture\nscrabble\nquantities\nquad\nprovost\nplanetarium\npelican\npatsy\nmaharaja\nloaf\nlisle\ninclusive\nhydroelectric\ngospels\nfcc\nexpanding\ndynamite\nconsideration\nburnt\nbracelets\navoid\nassay\nannouncement\nwadi\nverdict\ntrusted\ntrips\nsuperlative\nsunk\nsatirical\nsaharan\nsacrament\nprotector\npresenting\npasta\nox\nordinance\nnudity\nmandibular\nmahdi\nlute\nlittoral\nlandau\njanus\nist\nironworks\nimprovisation\nhobby\ngin\ngarbage\nformalism\nextradition\nentomologist\ndiva\ncontinuum\nconservatism\nconfidential\nclippers\nchiefly\ncatalyst\nbandit\nbabel\nanimator\naloud\nairship\nvillain\nvicar\nunsuccessful\nsumatra\nspill\nspanning\nsleeper\nsentimental\nrouse\nrib\nregulator\nposeidon\nparasite\nopium\nnomad\nmorality\nmonsieur\nlovely\nlocomotion\ninnovative\nindochina\nindependently\nhidalgo\nglucose\nfist\nendgame\ndispersal\ndare\ncouple\nconscription\nbump\nbreeze\nborne\nbender\nbeats\nbarrage\nagrarian\nweasel\nwash\nvulcan\nsonora\nsnap\nslogan\nshifting\nshelved\nshaping\nsentences\nseizure\nrufous\nrude\nripple\nqueer\nproton\npneumatic\npalladium\noscillation\nonward\nnauru\nmulligan\njumper\njew\ninstructions\ninstance\nidle\nhet\nheir\ngadget\nfrontiers\nexpectancy\nentre\nearnings\ndockyard\ndobson\ndessert\nchoose\nberserk\nass\nantibody\ntragic\ntamarin\nstolen\nsnowy\nshades\nseventy\nscorpion\nsaxophone\nsander\nrosary\nregulated\nredemption\nquery\nprovenance\nprimate\npractitioner\noffspring\noccasions\nobjections\nnotion\nneurological\nmythical\nkip\nkendal\ninstinct\nhail\ngee\nforecast\nfearless\nemployer\nemphasis\ndrying\ndomino\ndoing\ndigit\ncropped\ncoupled\nconcession\ncheckmate\ncarthage\nbray\nbegum\nastronaut\naesthetic\naddresses\nwaterfall\nvehicular\nvase\nsundown\nstylized\nsteak\nsimultaneous\nresting\npublicly\npetter\nperch\npenitentiary\npedal\norganism\noffset\nnoir\nmotivational\nmats\nmassif\nmalayan\nkraft\nkisses\nkingfisher\nintentional\nhooker\nhelium\nhakim\ngrandfather\ngel\nepoch\nengineered\ncrocodile\ncoptic\ncongestion\nconclusions\nclocks\ncandle\nboycott\nbordered\nbamboozle\naramaic\naortic\nwerewolf\nvoid\ntuition\ntend\ntalented\nsupposed\nsucker\nspeculative\nsomewhat\nsocket\nsnoop\nshrew\nrupee\nrunoff\nrot\nreplacing\nrecipient\npurse\nposse\nplayboy\noverthrow\nornithologist\nnavigator\nmort\nlabyrinth\nkeen\ninherited\nhurt\nhoy\nheader\ngreenhouse\ngodfather\nfolded\nfaction\ndough\ncosmopolitan\ncontrolling\ncomplement\nchinatown\nboulder\nadjusted\nabduction\nyeast\nsurrounded\nstochastic\nsponsor\nskipper\nsis\nsack\nruin\nredwood\nproductivity\npostbellum\npillars\nperihelion\nparakeet\noffense\nmuse\nmosquito\nmodernism\nmigrant\nlyricist\nknob\nita\nibis\nhonorific\nhoneymoon\nhermes\ngentry\nfungi\nfragmentation\nfortuna\nfibre\nenvelope\neminent\neminence\ndent\ncouncillor\ncocaine\ncausation\ncant\nbait\nannals\nacceleration\nworry\ntraumatic\ntick\ntempo\nsurvive\nsubtropical\nstored\nsolicitor\nsolely\nsausage\nresistant\nremington\nrani\nrack\nprecinct\nplaya\npiranha\npeanut\npeaceful\nobituary\nnormalization\nnexus\nmissed\nmilitant\nmidget\nmeteorite\nmechanized\nmarginal\nlemur\nlacy\njurisprudence\ninflammation\nimitation\nfasting\nexpenses\nentitled\necstasy\ndrowned\ndigestive\ndido\ndense\ndeficit\ndeed\ndecathlon\ndab\ncub\ncompressor\ncab\nbrace\navenger\nanxiety\nadjective\nyesterday\nwishing\nvest\nvaginal\nunderworld\nstriker\nsteamship\nstarred\nsociological\nsnacks\nsheppard\nshaker\nsearching\nscan\npsychotherapy\npsychic\nprefix\npossibility\nparole\nogle\nmoira\nmast\nmasonry\nlad\nkierkegaard\ninsight\nhydra\nhedge\nglove\nfoul\nexplicit\ndoppler\ndescendant\ndepths\nconversation\nconfectionery\nclauses\nbinomial\nbelly\nbasement\nattic\nwelterweight\nwaterman\nurinary\ntraveller\ntotally\nsperm\nsnapper\nsaber\npow\npiazza\norganizer\nnonstop\nmana\nlegitimate\njesu\ninversion\nindexed\nhumble\nhonored\nhillside\ngains\nfreshman\nextend\nemmet\nelect\ndun\ndistress\ndaylight\ncountryside\ncor\nclough\ncassation\ncandidacy\nbode\nbiochemical\nappalachian\napostle\nafternoon\nafterlife\nwicket\nwealthy\nvishnu\ntrey\ntransient\nstranded\nsault\nrf\nreagent\nprocurement\npracticed\nplayground\nperceived\npelham\npancreatic\nmechanic\nmammoth\nlesson\nlancelot\njustification\ninsulin\ninca\nhawthorn\nflaming\nfirearm\nfavor\nfatalities\neurasian\ndusk\ndiversification\ncrypt\ncrusades\ncorrect\nconjunction\ncochin\nclutch\ncheek\ncatfish\nbravery\nbleu\nbalancing\nbaccalaureate\naustralis\nancestor\nanarchist\naccumulation\nzenith\nweed\nwanderer\nvries\nvaried\ntivoli\nteach\ntanager\nswap\nsuperannuation\nstriking\nstaple\nsplinter\nsiren\nsinister\nsilo\nprotecting\nprodigy\nproclamation\npomona\npeculiar\nosprey\noldenburg\nnocturnal\nnirvana\nmime\nmention\nmarxism\njumbo\nintensive\ninjured\nhittite\nherd\ngangster\nfolly\nfeedback\neucharistic\nensure\nengraving\nelevator\neighty\ndivergence\ndickey\ndependence\ncurator\ncoil\nblockade\nbess\narmadillo\nappliance\nanal\nalternatively\nwonders\nusher\nupland\ntelling\ntaxis\ntanker\ntack\nsubjective\nstrongly\nstallion\nshotgun\nsherry\nseismic\nregularly\nreflector\nquite\nprints\nphilanthropic\nmotel\nmonde\nminus\nmarque\nmarchioness\nmandolin\njointly\njeans\nhazardous\ngrind\ngrasshopper\ngluteal\ngastronomy\nfugitive\nfraternity\nfraternal\nflock\nfaw\nfallacy\nessentially\nelectrons\ndorian\ndorado\ndiscount\ndemands\ncorneal\ncommunicative\ncoke\nchromium\ncaspian\nbroom\nbikini\nate\naquinas\napply\nangelica\nandaman\namnesty\nalmond\nally\nadvertisement\nwren\nunrelated\nsw\nstave\nstaging\nsolvent\nskate\nscaling\nsatire\nrevitalization\nreclamation\npuppy\npuff\nprogeny\npriestly\nprestige\npredictive\npolaris\npersona\nperiodical\nparagon\noccult\nnewtonian\nmaverick\nmangrove\nlooks\nliberalism\nkicking\njunk\ninterstitial\ninstability\nhurst\nhostage\ngunboat\ngasp\nfungus\nflyer\nfacade\nethyl\ndisplaced\ndies\ncommandant\nclothes\ncityscape\nbringing\nappliances\nwoodcock\nwattle\nwaterway\nwasted\nwarhead\nvolta\nvariability\nunemployment\nuncredited\ntransparency\nthroat\nstanhope\nshady\nshack\nscooter\nsamba\nrequire\nrecursion\nrarely\npsalter\npolygon\npiracy\npell\nnw\nnewcomer\nmom\nmeg\nlombardy\nlifting\nlick\ninfamous\nignition\nhustle\nhorns\nhoard\nhalfway\ngrenadier\ngopher\ngent\nforensics\nelector\nedit\ncurtain\ncrag\nconti\ncomprised\ncereal\ncaliphate\nbland\nbits\nbiennial\nbarred\narp\nanemia\nairing\nadulthood\nzoological\nvibration\nveil\ntap\nsubscription\nspoofing\nsphenoid\nsmell\nshaft\nsalon\nroyale\nquadrangle\nprosecutor\nperi\npentagonal\npardon\noven\nnp\nnewsletter\nnativity\nmilestone\nmaternal\nmasque\njellyfish\ninvoluntary\nintestinal\ninstalled\ninsider\nimpaired\nheidelberg\nguadalcanal\ngnu\ngamelan\nfragrance\nflavor\nfable\nesplanade\nelizabethan\nedict\nedible\ndwelling\ndodecahedron\ndocking\ndesigning\ndecided\nconceived\ncognition\ncalculating\nbonkers\nbenevolent\nbeech\nzeppelin\nwhisper\nvalid\ntoken\nterre\ntc\ntangent\nsweep\nswale\nsubstitution\nstew\nspaceship\nproximity\nprostate\nproportion\nprone\nprologue\npossessions\npeasant\nodds\nobtain\nnorthernmost\nnoodle\nnemesis\nnails\nnail\nmauritania\nmarkings\nmakeup\nloosely\nlips\nlegally\nlavender\nkindergarten\ninvolve\ninfertility\nhorde\nhistone\ngnome\nglycogen\nforemost\nfilmed\nepa\nemancipation\neau\ndreamer\ndilution\ndevotion\ndeportation\ndefault\ncoordinated\ncollectively\nclover\ncappella\ncaballero\nbranched\nbog\nbakery\nbackbone\nawesome\naunt\nappellate\nallergy\nactuarial\naccessible\nyeah\nxenon\nwithdrawn\nwham\ntuna\nsuccessive\nspectacular\nslender\nslate\nsedition\nsaloon\nplaque\nperimeter\nparticipant\northogonal\norphan\nnut\nnugget\nmyrtle\nmba\nmallet\nmalacca\nlimb\nlessons\nlaying\ninterracial\nimpedance\nheckler\nharvesting\ngoon\nfreeze\nfraction\nfail\nepidemic\ndelegation\ndefiance\ndea\nchar\ncantor\nbras\nbarony\nballoting\nballooning\nbabies\nauthorized\nassassin\namalgamated\nadductor\nwaldorf\nvisually\nunnamed\nundisputed\nspray\nsplitting\nsimplex\nscroll\nsandstone\nrigid\nretrieval\nregard\npussycat\nproctor\nnoodles\nmotif\nmelt\nmayday\nmartyrdom\nlei\nirons\nintense\ninteger\nhumorous\nhowler\nhelix\nhaut\ngregorian\ngoth\ngenuine\ngarnet\nflyweight\nfiddle\nfantasia\nfairly\nfabulous\nexpensive\nequinox\ndonations\ndip\ncoma\nchoreographer\ncapo\ncannibal\nburley\nblown\nbatting\nbarbarian\nazure\nanvil\nalaskan\nachieving\nvin\ntraverse\ntransplant\ntorn\ntemplar\nstopped\nstealth\nshangri\nsamos\nsaki\nrespective\nquarterback\nposter\npatriarchate\nolympians\nmotorized\nmot\nmetaphysical\nmemorable\nmanners\nmadeira\nloco\nlaughing\nideological\ngeyser\ngemma\nfreud\nfang\neffectively\nduval\ndried\ndominated\ndisciplinary\ncue\ncruelty\ncontinuously\ncoastline\nclamp\ncitrus\nbrigadier\nboost\nbongo\nblend\nbagpipes\nares\nanalytic\namplifiers\naggressor\naffinity\nweaving\nunite\nuhf\ntriton\ntransported\ntransparent\ntorque\ntilt\ntelephony\ntartan\ntarantula\nsyllable\nsloth\nskyscraper\nshaggy\nseek\nrig\nrendered\nraspberry\nproportional\npremature\npied\nnude\nmodal\nmayhem\nkanji\ninfringement\nicosahedral\ngazelle\nfond\nfidelity\nfeline\nenjoy\ndisarmament\ndamaged\ncurved\nconvenience\nconstructor\ncolon\nchameleon\ncation\nbookstore\nbathymetry\nbarbera\nbackyard\naxiom\naffordable\naboard\nvernacular\nventilation\nurine\ntried\ntracing\nthrust\nsupplier\nsubstitute\nstratigraphic\nstarling\nshamrock\nrocker\nregents\nquadratic\nprecipitation\npentagon\npapyrus\nobstruction\nnouveau\nnoon\nmelting\nlordship\nlira\nlibertarianism\nlazy\ninfernal\ninfant\nimmanuel\nigneous\nhopes\nheartland\nhanuman\nhalt\ngrotto\ngoody\nfjord\nexposed\nexpectation\ndetached\ncyclops\ncradle\ncounterpart\nconditioning\ncomplaint\nchoke\ncasual\nautomatically\naura\narroyo\nante\nangles\nalternating\nalsace\nairplane\nzoologist\nwrecking\nwhore\nweakness\nwashing\nvela\nusual\ntsunami\ntrying\ntraces\ntierra\ntemperate\ntad\nsynchronous\nstretching\nspeculation\nsided\nscrub\nsari\nsamoan\nrhapsody\nrepository\nrealignment\npup\npremises\npermitted\npamphlets\norchestration\nmurdered\nmartian\nmango\nlevant\nlace\nknots\ninvestigator\ninterested\nimport\nhush\nhex\nhel\nhalo\nfragment\nflamingo\nfairness\nextensively\nexponential\nevasion\nemotions\ncornerstone\ncoordinator\ncleaner\ncello\ncasket\nandroid\nalgebras\nadvances\nacoustics\nwishbone\nwildcat\nwaking\nvox\nvoiced\nultimately\ntug\ntory\ntm\nthickness\ntense\nsuperlatives\nstained\nsolstice\nsewer\nscam\nsanctioned\nsakai\nrosh\nrift\nretro\nransom\npopularly\npins\nphoton\npartly\npalms\nminerva\nmigratory\nmicrowave\nhornet\nheuristic\nhaze\ngrocery\ngreyhound\nfemme\nelastic\nears\ndrops\ndefenses\ndaydream\ncovert\nconvert\nchub\nchevalier\ncelebrate\ncanopy\ncalm\nbowery\nbower\nblunt\nbiographer\nbalanced\naxle\nyearbook\nwired\nvulnerability\nvenous\ntutor\ntermed\ntempest\nsuffering\nskunk\nsexually\nsender\nseater\nseaboard\nschooner\nschizophrenia\nrhododendron\nresidue\nramp\npuma\nprogrammed\noratorio\nops\nmusicologist\nmilt\nmeteor\nmelton\nlaugh\nlasting\nlandowner\nlag\ninnings\nimagination\nhygiene\nhomogeneous\nhive\nharlequin\nflycatcher\nfelt\nfax\nfascination\nexcelsior\nesoteric\neligible\ndescending\ncrying\ncrozier\nconner\ncircumflex\ncaravan\nbounce\nbarrister\nartemis\nannihilation\naccredited\nabyss\nwasp\nvulture\ntrash\nthistle\ntetrahedral\ntab\nsupportive\nsupervision\nstitch\nshun\nsedan\nscriptures\nreuse\nreflect\nraging\nquarantine\nprima\npledge\nparticipate\nparanormal\npang\nmustard\nmemento\nlw\nloyal\nlonesome\nliquidation\njingle\nintruder\nintercalated\ningredient\nimmersion\nhypertension\nhum\nhoused\nherbs\nhelping\nfrieze\nfermentation\nexcluding\neton\ndodecahedral\ndevotional\ndegeneration\nconfederacy\nconcluded\nclip\nchoreography\ncapuchin\nbranching\nbrains\nbout\nbought\nboiled\nblackwater\nattach\narid\ntops\ntile\nswaziland\nstool\nspit\nsilas\nrpm\nriddle\nresilience\nreplenishment\nrenewed\nrembrandt\nrefrigerator\nquintet\nparte\npalisades\noverlapping\nnull\nmultinational\nmidtown\nmeteorologist\nmerge\nmere\nmasjid\nlongevity\nlithography\njihad\ninterurban\ninsurrection\nimproving\nhealthy\nfixation\nfig\nelf\ndrowning\ndropped\ndictatorship\ncrossed\ncourtyard\ncorinthian\nconversations\nconsider\nconglomerate\ncong\nconduit\nchaplain\nbred\nbranco\nauditory\narise\naggregate\nwoodman\nwayland\nwarbler\nvast\nvanadium\ntransforming\ntrait\nthug\nteens\nsunlight\nsunflower\nspiny\nsleepy\nsilly\nshy\nshorter\nsenses\nruff\nquo\npheasant\npaleontology\nnotebook\nmuddy\nmisuse\nmicroscope\nmaybe\nmanslaughter\nlakshmi\nkashmiri\njourneys\nislander\nhypnosis\nhyper\nhistoricity\nhermitage\ngaussian\ngastrointestinal\nfrisian\nfishery\nfacilitate\nfabrication\nexperimentation\nexcursion\ndressing\ndistinguish\ndeclension\ndeciduous\ncracking\ncourtship\nconstituents\ncomprise\ncoeducational\ncleansing\ncirque\nchit\ncaterpillar\nbushranger\nbayonet\nbasal\naccidental\nzirconium\nwhiplash\nweighting\nwaist\nvariously\nunexpected\ntrumpet\ntransplantation\nthermometer\nsuitable\nsloop\nsimultaneously\nsimulated\nsignificantly\nshrub\nseptum\nscorer\nschiller\nsaffron\nrhetorical\nrental\nquotation\npreschool\noverlap\nordering\norb\noccidental\nnumeral\nnaughty\nmillstone\nmedicines\nmaid\nloaded\nliteral\nimpulse\nimplant\nimam\nhotchkiss\nhepatitis\ngurney\ngraveyard\nglobally\ngar\ngag\nfights\nexplain\nembrace\nelongated\ndm\ndirectional\ndieu\ndeb\ncurb\ncortical\ncarousel\nburnet\nbrahmin\nboyfriend\nbless\nbind\nbash\nbane\nauthorization\naugustinian\narbitrary\napproximate\nambiguity\naide\nagile\naffective\nwalkway\nunderstood\ntriennial\nsufficient\nsubstantial\nstove\nscent\nresisting\nreprise\nrepression\nremainder\nrebuilt\nrainfall\nprosper\npolymerization\nnaturalism\nmold\nmimicry\nmajestic\nlullaby\nkola\nishmael\ninterceptor\nhertz\ngasoline\nfuzzy\nfiling\nfatigue\nexperienced\nequine\nepilogue\nemulation\nducal\ndeva\ncrouch\ncoyote\nconstructive\nchihuahua\ncarcinoma\ncaliber\nblackjack\namphibian\naccent\nvisionary\nviolation\nuno\nunderneath\ntopical\nthrill\ntemptation\ntails\nsystemic\nsoar\nslovene\nsire\nsilica\nsiamese\nsculptoris\nremoving\nrelaxation\nrath\nprophets\npresiding\npong\npill\npicking\npersistence\nnike\nnebula\nmoo\nmankind\nkodak\njamboree\nischemic\ninterrogation\ninterception\ninsert\nindictment\nhitch\nherself\nhermit\nhabeas\ngallant\nfinest\nfancy\ndragonfly\ndiscoverer\ndinghy\ncredentials\ncorpse\nconsonant\ncondemned\ncompetitiveness\ncomment\nchildbirth\nbuying\nboon\nbaiting\nautomaton\nassumed\nabdomen\nundertaken\nunderpants\ntypography\ntrim\ntriangles\ntandem\nsympathetic\nsurge\nstripes\nstomach\nshuffle\nshattered\nschooling\nsavoie\npyramids\npicnic\nparity\npago\noverhead\noccasional\nnitrate\nmoisture\nmodernist\nmixer\nminstrel\nmemorandum\nmaris\njasmine\nicebreaker\nhowling\nhomeric\nhind\nhickory\nheyday\ngreatly\ngarment\ngad\nfourier\nfelicity\nexplicitly\neurasia\ndissident\ndefamation\ncrush\ncrude\ncreativity\ncontraception\nconqueror\nconnective\nconfrontation\nconfirmation\ncinnamon\ncham\ncarillon\ncampaigning\ncalico\ncad\nburst\nboogie\nbantamweight\nbanjo\nauditor\nappreciation\napplying\naorta\namplification\namore\naltered\nagua\nwindward\nwhistle\nturret\ntransfiguration\nsusceptibility\nsure\nsufism\nstocks\nsteal\nstaples\nspree\nspoon\nsnail\nsidewalk\nsequestration\nscare\nrousseau\nrifleman\nrefrigeration\nreasonable\nrasputin\npuritan\nprosperity\nperfection\npediatric\npavement\nparallax\nortega\nnoma\nnamely\nmontpellier\nmoist\nmalignant\nlocus\nlimburg\nlearner\nlean\nlaureate\nkelso\ninertia\ninductive\nilluminati\nhowl\nhexagon\ngunfire\ngrapevine\nglaciation\ngallium\nfeatherweight\nexotic\nenclave\ndebris\nconscious\ncolloquial\nchariot\nbum\nbop\nbalmoral\nalright\nuplands\ntoothed\ntonk\ntimbers\nthreatened\nsway\nsimilarly\nshout\nseems\nschema\nrevolver\nremedy\nregardless\nprivatization\npillow\npaganism\nmaneuver\nmanage\nloudspeaker\nlobbying\nlindy\nlilac\nlengths\nlegged\nlayered\nlargo\njudas\njavelin\nimposed\nhijacking\nheartbreak\ngunter\ngrail\ngardener\nfurious\ndosage\ndiffering\ndefection\ndecker\ncrust\ncreep\nconjugate\ncommencement\ncanonization\nbroker\nboucher\nboron\nbonnet\nbilliards\nbastard\naskari\napparently\nantimony\nanthrax\nanalogous\nadvertiser\nwessex\nweekday\nwages\nvas\ntundra\ntons\nthrush\nthematic\ntemporarily\ntabernacle\nsuspected\nspeckled\nsomeday\nsolitary\nshoal\nritz\nrenegade\nremove\nrated\nquartz\nprejudice\npreaching\npollination\npoisson\nplenty\npersuasion\nodin\nobtaining\nobsession\nmusica\nmountaineering\nmetrics\nmelodic\nmature\nlough\nlonghorn\nlanger\nknives\nionic\ninsufficiency\nidiot\nhostel\nharvester\ngrosso\ngoo\nglee\ngarlic\nfused\nformative\nfitted\nfannie\nfad\nenvy\ndune\ndramatist\ndistortion\nconsultation\nconstruct\ncommunicate\ncombe\nclimb\ncleric\ncerebellar\ncastaway\ncarnivorous\ncanceled\ncadre\nbudgeting\nboll\nberber\nbello\nbaked\napostasy\nantagonist\nafrikaans\nadventurer\nadvancing\nactivated\nzeus\nyen\nwavelet\nwagoner\nvane\nswinging\nsour\nsolitude\nslowly\nsedimentary\nsealed\nsavanna\nroyalist\nreservations\nquechua\npsychoanalysis\nprojected\nposture\nphilologist\norang\nnewt\nnecessarily\nneapolitan\nmultiplier\nmonumental\nlumbar\nlingual\nkeystone\njudgement\nintimate\nhurdle\nhoo\nheroic\nhelm\nhappen\nhamster\nglasses\nfoil\nflavored\neverywhere\nepistemology\nelderly\ndisruption\ncorporal\nconey\nchopper\ncatalytic\nbulb\nbrood\nassembler\nanu\namnesia\nalgae\naccelerated\nabsorbed\nwholly\nvisitation\nvie\nvanishing\nusability\ntorus\ntic\nthigh\ntextiles\nsubclass\nstagecoach\nsion\nshoulders\nshinto\nseaplane\nroly\nroadster\nresin\nquotient\npunt\npullman\npudding\npreparing\npray\npatronymic\npacking\noverkill\nopal\nonset\nnovelty\nmuscular\nmunitions\nmf\nmeals\nmantle\nlancers\nkindred\ninterstellar\ninsulation\nincognito\nimported\nhonorable\ngulden\ngifts\nfreehold\nfouling\nexhaust\nexactly\nequitable\ndisintegration\ndigits\ndaredevil\nconstrictor\ncommanded\ncolossus\nclosest\ncistercian\nchemotherapy\nchasing\ncentred\ncaustic\ncarp\ncalibration\nbubbles\nbooster\nbenoit\nbenign\nbarge\nbarbecue\narson\narsenic\nanzac\nantecedents\namtrak\nwrap\nwinding\nupdating\ntrumpeter\ntramp\ntoast\ntasting\ntabor\nswell\nstratigraphy\nstables\nspecialization\nspanned\nsmithsonian\nsel\nrondo\nriches\nremnant\nrecipe\nprimates\nphosphide\npayload\npatrician\novernight\noverdrive\novarian\nod\nnorms\nmerchandising\nmagpie\nlocust\nlocked\nlively\nlid\nlevee\nlaughter\ninflatable\nincumbent\niceberg\nhysteria\nhomeless\nfriar\nfissure\nfink\nfiend\nfacilitation\nendorsement\nenclosed\ndrunk\ndrain\ndoctorate\ndigest\ndevised\ndet\ndesired\ndermatitis\ncockatoo\nchieftain\ncharmed\ncentaur\ncakes\nblimp\nbatten\natc\napplicable\nanthropological\naec\nacclaimed\nzanzibar\nwhitecaps\nwavelength\nwatcher\nvoter\nvocalization\nviewpoint\nviewer\ntruncation\ntoxicology\ntheosophy\nsuburbia\nstabilization\nshit\nsalvo\nrotten\nrickey\nrevere\nrecommended\nproperly\nprocession\nprimer\npreventive\npermeability\noblivion\nnoisy\nnil\nnawab\nmountainous\nmethyl\nmasson\nmargins\nlimbs\nlieder\nlegions\nkala\nintercostal\nintake\ninfiltration\ninfielder\nimperium\nhooking\nhemoglobin\nhandy\nfizz\nfireworks\nfetus\nfeathers\nextraterrestrial\nexcerpts\netching\nescarpment\ndura\ndunning\ndisturbance\nconsecrated\nchorale\nchimney\nbiking\narticulation\nalgonquian\nakin\nwrongful\nwoven\nwhiting\nvandalism\ntrough\ntroubled\ntransposition\ntabloid\nswallowtail\nsuccessfully\nstratification\nstow\nspook\nsewing\nsewage\nrisen\nrevived\nreplay\nrecession\nreactivation\nraccoon\npuddle\nprohibited\npressing\nprecise\npouch\npolynesian\npeg\nparti\noverdose\noutdoors\nneuter\nneonatal\nnee\nmonsoon\nmentor\nmeniscus\nmainline\nmacaw\njoker\ninitials\nhydroxide\nhardness\ngrapefruit\ngenie\nfuturist\nfullerton\nfamiliar\nexcessive\nelegy\neaten\nease\ndropping\ndp\ndementia\ndefeating\ncutthroat\ncompagnie\ncolitis\ncoated\ncloset\nchrome\nchoosing\nchevron\nchecker\nbumper\nboating\nbelvedere\nbayou\nasthma\nyule\nyama\nwhitehall\nwarden\nunderstand\ntimeless\nthrash\nsympathy\nstormy\nstopping\nstonewall\nstatistician\nsquid\nsnowman\nslab\nseeing\nroux\nreveal\nresolve\nrelish\nregia\nreflecting\nrec\nplanner\npicket\npence\npeat\noverlay\noriole\nnix\nneolithic\nmultiplication\nmoro\nmoraine\nmineralogy\nmerging\nmeissen\nmanic\nlulu\nlaunching\nlark\njokes\ninvestigate\nintellectuals\nimperialism\nhuff\nguggenheim\ngras\ngetter\ngeronimo\nfunctioning\nfireman\nfiller\nferal\neurythmics\nembryonic\nead\ndreamland\ndisplayed\ndigger\ndetained\ndepository\ndeli\ndefinitive\ndecrease\ncyprian\ncracker\ncontracted\nconcours\ncolonist\nchimera\nchevy\ncerberus\ncarved\ncairn\nbulldog\nbribery\nboswell\nbifurcation\nberetta\nbazaar\nalder\nwizardry\nwhispering\nvisibility\nvat\nuninhabited\nuncommon\nturnover\ntiller\ntickle\ntectonic\ntear\nspecimen\nsoy\nsophomore\nsonar\nsine\nsill\nshunting\nsettling\nromney\nrejected\nrecorder\nravine\nrampage\nquantization\npsalm\nprosody\npalatal\npacked\noud\nneuropathy\nnecked\nmonopoly\nmillions\nmild\nmicroscopic\nmens\nlongitude\nladen\njugular\njudging\ninformally\nhumorist\nhoi\ngranuloma\nglands\ngetaway\nethnography\nequipped\nepithelium\nearn\ndubbed\ndevonshire\ndeferred\ncredential\nconsiderable\ncommunicating\ncombo\nclaiming\nchipmunk\ncalypso\nbunting\nblenheim\nblasting\nblackface\nbacklash\navian\nattrition\naggressive\nachilles\nabstraction\nyap\nunpublished\ntherapeutics\ntamer\ntalmudic\nsynonymy\nsynapse\nswine\nsuspect\nsupersonic\nsulfide\nstrap\nspreading\nspitfire\nspectator\nsinn\nscattered\nsawtooth\nroutine\nromanesque\nrode\nreptile\nregret\nreflected\nredeemer\nreadiness\npreserving\npositivism\nplume\nparietal\noni\nobservance\nmultilingual\nmicrophone\nmercenary\nmam\nlupus\nlisp\nleech\njumps\njd\nintervals\nhybridization\nhooks\nhonest\nhide\nheel\nheadland\ngander\ngallantry\nfiasco\nexpertise\nestimator\nentomology\nduplicate\ndressed\ndilemma\ndeux\ndetect\ndespair\ndenote\ndefinite\ncumulative\ncrichton\nconstrained\nconscience\nchateau\ncantonment\ncalvary\nbarrio\nbandicoot\nbaal\nastrophysics\nastrophysical\nashur\nascending\nanatolian\nammonia\nalp\nadequate\nyak\nwrist\nwold\nwindy\nwandering\nuntold\nunconventional\nsynchronized\nsubtitle\nstardom\nstagnation\nsportive\nspecifics\nsouthernmost\nserpentine\nsci\nsable\nquaternary\nprimordial\npolymorphism\npointed\npep\npate\nparthian\norator\nnecessity\nmunition\nmolten\nmn\nmellow\nmediation\nmarais\nmalice\nlimiting\nleyden\nleftist\nkumari\nkama\niq\niodide\nindefinite\nimagine\nhostess\nhomosexual\nhandler\ngrouped\ngoldfish\ngnosticism\ngambler\ndisruptive\ndielectric\ndiagonal\ndeprivation\ncustomary\ncrusher\ncraze\ncrayon\ncoordinating\nconsistent\ncompare\ncider\ncharging\nbrawl\nbonded\nbladder\nbassa\nbarium\nbarbary\nbanning\nbacchus\nattire\nathena\nastrologer\nagony\nadagio\nwitchcraft\nwilli\nwhereas\nvip\nvegetarian\nunseen\nunforgettable\ntheosophical\ntart\nsuspense\nsupplied\nsuisse\nspangled\nsic\nshortage\nscaled\nrushing\nroebuck\nreversal\nresist\nregistrar\nraiding\npronoun\nprom\nprestigious\npreamble\nporte\nordinal\nobstacle\nnimbus\nnesting\nneglect\nnance\nmoll\nmedallion\nmauser\nmalt\nlynx\nlux\nlauncher\nlaryngeal\njoss\njewels\njelly\nintrusion\ninnate\nharsh\nhalcyon\nguaranteed\ngodless\ngladiator\nglad\ngirder\nfortunate\nfolks\nflagstaff\nextremes\neventual\nencompassing\nenamel\nenable\nemporium\nebony\ndownstream\ndictator\ncrucifixion\nconduction\ncomposing\ncoadjutor\nchancery\nbyte\nbourse\nargent\nantibiotic\nanion\nancillary\nambush\nallocated\nwhipping\nwelding\nwaterfowl\nwarming\nventral\nupstairs\nunholy\numbilical\ntriassic\ntransferable\nthorp\nthorns\ntether\ntabasco\nsynonym\nsupervisory\nstrengths\nsolve\nslice\nshrike\nshimmer\nsettle\nserum\nsept\nseparately\nroadway\nrestraint\nreply\nrazor\nprudential\nprecautions\nporous\npointer\npleistocene\npending\npeaked\nnominee\nneedles\nmourning\nlug\nlien\nleibniz\nironclad\ninference\nherpes\nheliport\ngravel\ngeopolitical\nforeigner\nfloppy\nflick\nflexibility\nfilthy\neschatology\nencourage\nemergent\nell\ndressage\ndissenting\ndisciple\ndeemed\ndamn\ncultivated\ncrisp\ncosine\ncompartment\ncharismatic\ncatering\nbusby\nbraking\nboiling\nbiz\nberyl\nbedtime\nbastion\nattacked\narterial\nanyone\nanonymity\nanniversaries\nankle\nwardrobe\nvigilance\nvanilla\nuniting\nunable\ntympanic\ntruss\ntrotskyist\ntransformer\ntaboo\nsupporter\nstomp\nstole\nstems\nstarter\nsplendor\nspecially\nsorority\nsitu\nsingularity\nsilicate\nshelly\nsheath\nserenade\nsediment\nrequests\nrecognize\nraptor\nrampart\npuss\npogrom\nphoenician\npalette\npagoda\nnegotiation\nmiscellany\nmatador\nmantra\nmalagasy\nloy\nlombardo\nkp\njuggernaut\nintuition\nimplement\nhordes\nhiding\nhavoc\ngolem\ngenerate\ngeiger\nforgot\nfollower\nfitting\nferris\nextremity\nenhance\ndipper\ndifficulty\ndenominational\ncystic\ncursed\ncryptographic\ncro\ncontention\nconstitute\nconquer\ncolosseum\ncoached\nclimatology\ncigarettes\ncheat\nbolshevik\nblur\nauditing\nattested\narticulated\nanalogy\nagreed\nabductor\nwires\nuneven\ntranscript\nsupper\nsuperfamily\nstripe\nsteamer\nstationed\nsolano\nsinner\nsecured\nschizoid\nsatrap\nrestless\nresidual\nqc\npromised\nprojector\nprofits\nprincipally\nplurality\npapuan\noverture\noctahedral\noceanography\noccasion\nnip\nmullet\nmobilization\nmistake\nmissy\nmiscellanea\nmedicare\nmastermind\nmarital\nmach\nlandgrave\nkindness\ninternship\nincidental\nincarceration\nhomologous\nhired\nhairy\ngreetings\ngrandmother\ngotha\ngossip\ngeomorphology\nflake\nfederalism\netiquette\nenvirons\nelectromagnetism\ndy\ndecoy\ndeclined\ndaft\ncrucible\ncorrupt\ncooked\ncontender\nconsequence\ncompetitor\ncochlear\nchoo\ncatching\nbutyl\nburman\nbraille\nbovine\nboreal\nbittersweet\naustral\naspen\nargos\nanalyzer\nadjoining\nadherence\nacorn\nacademical\nwounds\nwheeling\nwestward\nvixen\nvend\nvang\nuterine\ntriptych\ntorrent\nsymposium\nsyllables\nsupervisor\nsubterranean\nstabilizer\nsmelt\nslime\nskepticism\nshareholder\nsax\nsabotage\nreigning\nreflective\nrapidly\npumpkin\npolity\nplatoon\npivot\npinch\nnada\nmica\nmetamorphosis\nmatched\nmalicious\nmaidenhead\nlipid\nkoala\nkissing\njourneyman\ninherent\ngrosbeak\ngenital\ngarter\nexceptional\nexcellent\neverlasting\neda\nearldom\ndrunken\ndispatch\ndarter\ncongruence\ncoloring\ncharcoal\ncenturion\ncapitalization\nbrahma\nbosworth\nbordering\nbanquet\nbags\nawake\nattenuator\narmistice\nanarchy\naddressing\nviscountess\nvirtues\nvanity\nvague\nural\nturpin\ntrustee\ntriad\ntl\nthrower\nswain\nsutra\nsurplus\nstepping\nstalker\nssc\nsplash\nspitz\nspawn\nsip\nshower\nshakedown\nscanner\nroan\nreward\nreversible\nrep\nreine\nrefining\nradiant\nproved\nprofessorship\npelvis\nparticipatory\npaddle\npacks\node\nmounting\nmodernity\nmidsummer\nmicrobiology\nmash\nmantua\nmalaria\nloveless\nlocale\nloader\nlis\nliar\nlauder\nkestrel\nkatakana\nimplicit\nhz\nhostilities\nhitting\nhiragana\nhem\nheadwaters\ngroovy\nglorious\ngaro\nfloat\nfade\nexpectations\nenlargement\nencephalitis\ndummy\ndivination\ndilation\ndeployed\ndecks\ndative\ncwm\ncupid\ncontractual\ncomb\ncollect\nchaser\ncarrot\nbusted\nbs\nbrow\nbrink\nbreakaway\nblacksmith\nbismuth\nbeware\natonement\naromatic\nappellation\nanselm\nabsinthe\nyoruba\nyom\nwhilst\nwhaling\nweald\nveer\nvariance\ntraveled\ntitanium\ntit\ntinker\nsupersonics\nsteeplechase\nstatistic\nsquared\nsoleil\nsly\nslight\nslash\nshaman\nsenatorial\nsefer\nrotational\nrosy\nrolled\nrepercussions\nreeve\nreefer\nratification\nraper\nrainy\npurification\nproven\nprecincts\npineapple\nphenomenology\npebble\nmethane\nmacaque\nloci\nlinkage\nlibrarian\nkachin\njackrabbit\nire\nintroductory\ninteracting\nhoc\nherbal\nhebrides\nheadline\ngris\ngeophysical\nfuturism\nflap\nfiesta\nethos\ndumping\ndomesticated\ndingo\ndebit\ncustard\ncurd\ncouples\nconsumed\nclerical\nchromosomes\ncelebrating\ncaution\ncalculated\nbulbul\nbridging\nbreakout\nboardwalk\nbedroom\naugmented\nasiatic\nannunciation\nannotated\nairy\nadvisors\nabsent\nwreath\nvenomous\ntulip\ntrespass\ntimetable\ntiffin\nterrier\ntenant\nsuppressed\nstripped\nsteamboat\nsponge\nspeedy\nsofa\nskid\nshunt\nrugged\nroundhouse\nretaliation\nresembling\nreliance\npunic\nprop\nprecedent\npornographic\npickle\npashto\noutsider\noptometry\nnmr\nnazism\nminotaur\nmelanoma\nmaternity\nlittlest\nlibel\nkrupp\njagannath\nintegrating\ninstrumentalist\ninflection\ninfected\nindicating\nincremental\nimmunology\nimago\nicing\nhydrocarbon\nhourglass\nherbaceous\nheal\nhaystack\nharmful\ngrandma\ngloom\nglade\ngita\ngeisha\nforeground\nfilament\nfashioned\nfab\nevaluating\nestrella\nessentials\nenumerated\nengraver\ndistillation\ndiner\ndiffer\ndeadlock\ndaffy\ncyanide\ncrowds\ncrawl\ncorsair\ncooks\nconn\ncondensation\nchromate\nchecklist\ncataloging\ncarte\nbramble\nbonny\nbodily\nboar\nbloodstone\nblame\nbeg\nasteroids\naristocratic\narising\napollon\nanglicized\nalgorithmic\nalgol\nacta\nzoned\nwhittle\nvirtually\nvertebrate\nurge\ntyrant\ntungsten\ntula\ntuba\ntransfusion\ntimon\ntalon\nsustained\nstrontium\nstork\nspecificity\nsnider\nslr\nsidecar\nsaturation\nrumor\nrevolving\nreset\nremedies\nrelapsing\nrefresh\nrectified\nrake\nrails\npulling\nprecisely\npolyester\npoliceman\nplacid\npia\npancake\nobscenity\nneutrality\nnarcissus\nmuscat\nmongoose\nmetallic\nmercantile\nmemo\nmagenta\nloops\nlocator\nlining\nlatency\nkayak\njinx\nimprisoned\nillumination\nhounds\nhopper\nharmonization\nglycoprotein\ngazetteer\ngainsborough\nfractional\nfinder\nfibrous\nfavorites\nexcel\neruptions\nenrichment\nelders\nduplex\ndraco\ndomesday\ndemonstrated\nconsolation\ncondemnation\nconcise\nchaldean\ncay\ncanto\ncalumet\ncaffeine\nbuzzard\nbusy\nbrunt\nboxed\nborrowed\nbookshop\nbola\nbleed\nbedlam\nbarbershop\naxon\nassimilation\narmorial\napparel\nantigen\nallowance\nalkali\nait\nairs\nadmitted\nadhesive\nacidification\naccomplished\nwishes\nwhenever\nvignette\nuseless\nuniformity\nunauthorized\ntroll\ntranslate\ntee\ntechnicolor\ntagalog\nsuperseded\nsuperconductor\nsuddenly\nsubstantive\nsubgenus\nstimuli\nsticky\nstereotype\nspying\nspar\nsnape\nsideshow\nsexton\nseverity\nservitude\nscissors\nrockaway\nricochet\nregulate\nrb\nquill\nprostitute\nproficiency\npossum\npose\nporcelain\npolarity\npixie\npeep\npare\nolivet\nobjection\nnumeric\nnomadic\nneuron\nnepali\nmenstrual\nmanitou\nmamba\nmallard\nmace\nlitter\nlaundering\nlandslide\nlamina\ninterrupted\ninsanity\nhusky\nhoyle\nhabitation\ngrinder\ngraft\nfoothills\nfamed\nexploding\neugenics\nembryo\nechoes\ndram\ndiversion\ndestructive\ndeserts\ndelimitation\ndeadline\ncrucial\ncritically\ncosmetics\ncontingency\ncloak\ncirrus\nchill\nchecks\ncastor\nbulla\nbuckle\nbroadly\nbraid\nbracelet\nblows\nblended\nbilateral\nautonomic\naristocrat\narcana\naperture\nanswers\namplitude\namity\nalteration\nagar\nafar\nadolescent\naddicted\nyogi\nwarnings\nvisceral\nundone\ntraveler\ntranscendental\ntranscendence\ntransatlantic\ntoucan\ntalisman\nstadt\nspoke\nsometime\nshowmanship\nsheaf\nsensing\nscarecrow\nrugs\nruddy\nromana\nretiring\nresemble\nrapture\nquicksilver\nputting\npromising\npossibilities\nplanting\npellet\npee\npb\noverload\norphanage\noriel\nnom\nnimrod\nnazarene\nmoonshine\nmink\nmilling\nmethodism\nmetacarpal\nmarist\nmarbled\nmaniac\nmaison\nlilith\nleviathan\nlawless\nlatex\nkino\nkilt\njunta\nheadgear\nhaw\ngyrus\ngilt\nghoul\ngait\nflaw\nexploring\nexplore\nexpense\nevert\nevaluate\ndump\ndogfish\ndisulfide\ndisappear\ndeviation\ndecorated\ndaystar\ncoupe\ncossack\ncocoa\nclandestine\nchinook\ncatastrophe\ncaritas\nbushy\nbeatification\navoiding\nattacking\nashram\naquarius\naptitude\nambition\nairman\nyip\nwhipped\nwapentake\nwali\nvow\nvacancy\nunless\ntugboat\ntubercle\ntropics\ntransactional\ntlc\ntested\nsylvan\nsufficiency\nstringed\nsteroid\nsickle\nshook\nscriptwriter\nschematic\nrupture\nrestore\nrendezvous\nreddish\nrectangular\nrecovered\nreciprocity\nrecherche\npur\nprowler\nprophetic\nprojectile\npore\npopcorn\npoliteness\nplatelet\nplaster\nplantar\npic\nperpendicular\npermission\npassions\nparalysis\npant\npancreas\novertime\novercome\noutpost\noutfit\noptimum\nophthalmic\noctagon\nnutcracker\nnotoriety\nnonsense\nnitride\nmusk\nmultiplex\nmountaineer\nmortuary\nmodality\nmishnah\nmisery\nmezzo\nmagma\nlaundry\nkingship\njigsaw\ninvader\nintransitive\ninterpreted\nindustrialization\nhyperactivity\nhydride\nhuge\nhostility\nhoop\nheresy\ngrounded\nfortunes\nfootbridge\nflare\nfactual\nexploratory\nerythema\nequally\nenhancing\ndiscover\ndeterminant\ndeclining\ndecency\ndaring\nconscientious\nconfessor\ncomplementary\ncoarse\nclubhouse\ncathode\ncassandra\ncarta\ncarboniferous\ncanaan\nbushmaster\nbeneficial\nbead\nbayard\naverages\naudubon\nasymptotic\nantiquarian\nanjou\nalgonquin\naccountant\nabsolutely\nvidar\nvet\nvertebral\nulcer\nturmoil\ntractate\nsyrup\nsteep\nsorting\nsnowball\nskeet\nshingle\nshifts\nshells\nseparates\nroofed\nricher\nresemblance\nrefused\npulpit\nproximal\nprobable\nprimus\npommel\npluralism\npinky\nperturbation\npaired\noutskirts\nobstacles\nobserving\nnether\nneoplasm\nnaturalization\nmural\nmundi\nmotley\nmesoderm\nmedea\nmavis\nmastery\nmarl\nmambo\nmaize\nlogistic\nlenin\nlanded\njag\niodine\nintonation\ninterpreter\ninfluencing\nhimalayas\nhighness\nheritability\nheist\nhap\nguise\ngriffon\ngig\ngeneticist\nfray\nfortified\nforte\nfinancier\nfewer\nfaa\neucharist\nescuela\nelemental\ndisposable\ndiscussed\ndiminutive\ndelegate\ncotter\nconciliation\ncomplicated\ncommunicator\nclassicism\ncirculated\nchipping\nchecking\ncastelo\nbyway\nburner\nbuff\nbuccaneer\nbrightness\nbrie\nbondage\nbizarre\nbearer\nbeadle\nbantam\nballerina\nballast\nbale\napocalyptic\nanomalous\nangler\nallergic\nallegation\nagama\nadaption\nwithholding\nvitae\nventricle\nutensils\nundead\ntypographical\ntombstone\ntidewater\nthrombosis\nthong\nthanks\ntb\ntalents\nsunbeam\nstunner\nstreptococcus\nstoned\nstayed\nstairs\nspontaneous\nspade\nsledge\nshoemaker\nserenity\nseparating\nsecrecy\nseafood\nscow\nscared\nremarkable\nrebuild\nproverbs\npropane\npritchard\nplunder\nplasticity\nplacing\npelagic\npapacy\npandora\nophthalmology\noats\nnewer\nnave\nnarcotics\nmonocotyledons\nminded\nmeritorious\nmarquise\nmagyar\nmagdalen\nlobo\nlair\nisthmus\nism\nipa\ninjustice\nimprovisational\nimagined\nhyperion\nhun\nhistology\nhemorrhage\nheathen\nhamburger\ngourmet\nfreely\nforearm\nfluorescent\nflop\nfermented\nfatality\nexpenditures\nexcursions\neuthanasia\neuchre\nesprit\ndrumming\ndownward\nditch\ndis\ndeliver\ncookbook\nconfinement\nclassicist\nchances\ncategorization\nbullion\nbrig\nbrat\nbleak\nbiplane\nbeliever\naugmentation\nathanasius\narrowhead\narmory\naqueous\nancien\nalign\naft\nacknowledgment\nabundance\nyew\nwherever\nwheelwright\nwhammy\nwelt\nwaffen\nvirgo\nvhf\nverte\nvaudeville\nultima\ntubular\ntrajectory\ntongued\ntoes\nthrasher\ntelevised\ntapping\nsucceeding\nstump\nstitching\nstair\nsphincter\nsnoopy\nserif\nsalaam\nropes\nrhea\nretina\nrein\nrehearsal\nquickening\nquartermaster\nqualify\npsychotic\npsychoanalytic\nprenatal\npossessive\npoli\nperoxide\npaying\norigination\nofficiating\nnectar\nnard\nmunch\nmorphological\nmoors\nmissal\nmegalopolis\nmassage\nmaestro\nloneliness\nlogarithmic\nloa\nlexicographer\nlampoon\nkodiak\nkiln\njournalistic\njive\ninterconnection\ninscribed\ninquest\nimplied\nimpeachment\nillegitimate\nholiness\nheroin\nhealer\ngosport\nfibrosis\nexchequer\nempowerment\nelectrochemical\ndole\ndialing\ndetonator\ndecoding\ncontagion\ncondenser\ncollide\ncoda\nclimber\nchrysalis\ncheddar\ncertainty\ncellulose\ncaretaker\ncapillary\ncapacitance\ncalculate\nbeggar\nbailiff\nawe\nattending\nanecdotes\nanaconda\namplified\nzoroastrianism\nzona\nzephyr\nwhistler\nweigh\nweaponry\nvodka\nunnatural\ntruly\ntrotter\nthou\nthereafter\ntester\nsupposedly\nsuffragan\nstd\nstainless\nsocrates\nsisterhood\nshatter\nrundown\nrudder\nrower\nrien\nreborn\nproportions\nproductive\npreliminaries\nprado\npolarization\nplating\npitched\nparabolic\nonyx\nolfactory\nobscure\nobligation\nnegligence\nmusket\nmiraculous\nmigraine\nmeaux\nlungs\nlucifer\nlotto\nlodging\nkook\nirradiation\nincarnate\nicosahedron\nherr\ngargoyle\ngaia\nfuturity\nfugue\nfrau\nfoothill\nfleury\nflea\nfingerprint\nfarina\nexaminer\nevolving\nether\nemulator\ndung\ndread\ndmz\ndistal\ndissipated\ndeterminacy\ndeliverance\ndaze\ndahlia\ncretaceous\ncoronet\ncontiguous\ncontextual\ncondyle\ncomptroller\ncellar\ncarbide\ncapita\ncaning\ncaddy\nburg\nbrakes\nblister\nbeak\nbanshee\nassembled\nagni\naerodynamic\nadjutant\nwildwood\nweighing\nwarts\nvirology\nvacant\nunrealized\nunnecessary\ntruce\ntrioxide\ntoda\ntexan\ntesticular\nterminated\ntendon\nteleplay\ntapestry\ntaoist\nsymbiosis\nsyllabary\nsuicidal\nstiffness\nsorcerer\nsolon\nsimulcast\nsibling\nsheer\nseta\nsealing\nscrewed\nscary\nsavior\nruined\nretained\nrestrictive\nresolved\nresiding\nrecessive\nrave\nrasa\nradiance\npublish\nproteus\npropositions\nproclaimed\nprocessed\nprimo\npreferred\npons\nplover\nplank\npictorial\npersonification\npeptide\npentagram\npaschal\nparochial\npaladin\noverlooking\noutback\nornamental\nofficio\nobelisk\nnominating\nnag\nmolding\nmelba\nmandated\nlush\nlooting\nloads\nlined\nknighthood\njoggling\ninterlude\ninterferometer\ninspirational\nhomogeneity\nhibiscus\nherpetologist\nhartmann\nharbinger\ngraphite\ngambit\nfunerary\nfours\nflue\nfeelings\nfaire\nexpressionist\neaves\ndrought\ndrafting\ndrafted\ndoubly\ndisbanding\ndiaeresis\nderiving\ndepressive\ncryptanalysis\ncontractor\ncomparing\ncessation\ncarnage\ncalf\nburned\nbullhead\nbourgeois\nborderlands\nbodyguard\nblueprint\nbloodline\nblazing\nbevel\nbeehive\nbarbet\nbaking\naware\nauspices\nassisting\narthritis\nairway\nadversary\nabundant\nabigail\nyank\nweathering\nvoicing\nturbulent\ntrivial\nting\ntestify\nsurveying\nstaining\nsnipe\nsideways\nshears\nseraphim\nscuba\nsatanic\nsaltwater\nroulette\nrichest\nrespected\nrejuvenation\nraft\npyramidal\npubic\npropensity\npreface\npredicate\npolka\npenetration\npedagogy\npear\npartitioning\npalmetto\nosteopathic\nnutrient\nnubian\nnonesuch\nmower\nmorgana\nmoat\nmisleading\nmetathesis\nlunatic\nlumberjack\nlarval\nlamprey\nlabeled\nkaunas\ninstallment\nindium\nindicated\nincreasingly\nincline\nincentive\nhurry\nhire\nheater\nheartbeat\nhatred\ngranting\ngigantism\ngeodesic\nflown\nfierce\nexpenditure\nexecutioner\neskimo\nequalization\nepiscopacy\nepiphany\nensigns\nelfin\nelectrostatic\nelectra\ndumb\ndoodle\ndismissed\ndicotyledons\ndiablo\ndiabetic\ndelilah\ncram\ncosmetic\ncontestant\nconstants\nconsecration\nconformity\nconch\ncockroach\nclinch\ncirculating\nchromatography\nchivalry\nchallenging\ncava\ncapri\ncadence\ncabbage\nbulldozer\nbudge\nbrutal\nbirdy\nbereavement\nbast\nauthentic\naudition\nattribute\natomics\nappendix\nanalyzing\namorphous\namine\nalmighty\nallegedly\nalienation\nalbinism\naerodynamics\nactively\naccusation\naccurately\nabbess\nzeal\nwilling\nvoiceless\nvictorious\nvedanta\nupstream\nunrecognized\ntuff\ntransitive\nsuperb\nsundays\nstratum\nstrains\nsterilization\nslavonic\nseduction\nschweinfurt\nroundup\nrooster\nrocketry\nrecruit\npuffin\nprimal\npossess\npositively\npity\nparcel\npantheon\npainful\npadre\npaddock\nodor\nobedience\nnilpotent\nmolar\nmodest\nmodeled\nmariner\nmanta\nmanifest\nmallow\nlouse\nlackey\nknocked\ninmate\nimpairment\nhopping\nheterogeneity\nharmonica\ngymnast\ngulch\ngrinding\ngravitation\ngoya\ngenetically\nfurnishings\nframing\nfda\nextrajudicial\nexcluded\nexcerpt\nespresso\neraser\nengage\ndravidian\ndispenser\ndiscovering\ndisappeared\ndelft\ncute\ncour\ncounterintelligence\ncounterfeit\ncountable\ncough\ncontesting\ncollie\ncog\ncharming\ncategorical\ncatamaran\nbuckskin\nbrutality\nbriar\nbillionaire\nbilling\nbenet\nbargaining\nastrakhan\nassess\nasker\naristocracy\namish\nalum\nalbumin\naggravated\nworse\nvolatility\nvertebrae\nvassal\nuzbek\nurchin\nundergrad\nunderdog\nunbound\ntrekking\ntreating\ntrapeze\ntopaz\ntome\nthinker\nthereby\nsynonymous\nsurround\nsunken\nstake\nstabbing\nshoreline\nshay\nsharpening\nseminars\nselenium\nscraping\nscoop\nsaline\nrods\nretailing\nregulating\nrancheria\nquint\nquark\nquadruple\nquadrant\npunctuation\npromontory\nprinz\npredict\npinnacle\npermanently\npatriarchs\npatria\nparentage\nornament\noccupying\nobjectivity\nnylon\nnb\nmoulin\nmortis\nmonasticism\nmarmoset\nmantled\nlyra\nlucid\nlido\nleger\nleased\nlathe\nknowing\nintroduce\ninsulator\ninsane\ninfusion\nillyrian\nhump\nheavens\ngunpowder\nguarani\ngreed\ngrazing\ngradually\ngloves\nglide\ngila\ngalilee\nfunnel\nfoolish\nflush\nflorin\nfirebrand\nfaithless\nexhaustion\nexec\nexamining\nescaped\nembryology\nelectrode\ndystrophy\ndirectorial\ndesolation\ncuria\ncremona\ncourbet\nconverse\nconstantia\nconspicuous\nconcentrated\ncommemorate\nchromatic\ncheeked\ncastilian\ncasanova\nbuggy\nborderland\nboosters\nbigger\nbecket\nbeams\nbarracuda\nbarns\nbackwards\nbackhouse\nax\nautostrada\napportionment\nammonium\nallegory\nagglomeration\nwaterside\nviscosity\nutopian\nultrasonic\ntraps\ntonic\ntired\nswelling\nswampy\nsuperiority\nstoring\nstoker\nstays\nstat\nstag\nsquaw\nsprinkler\nspindle\nsodom\nsmashing\nseller\nseeding\nscrutiny\nscissor\nsaying\nsake\nrundle\nrubidium\nrounded\nrobe\nrighteous\nrhinoceros\nrewriting\nresumption\nremuneration\nrefuse\nraving\npushing\npurported\npublicist\nprepare\nplaid\npip\nperegrine\npeking\nparting\noutward\nnecrosis\nnavigational\nmoot\nmonoxide\nmobster\nmaw\nmates\nmantis\nmackerel\nlouvre\nleakage\nketone\njeunesse\njargon\njacks\njab\nislet\nintercept\ninformed\ninfanta\nhitter\nhighwayman\nhandful\ngrundy\ngretna\ngantry\nfuzz\nfits\nfarmhouse\nextremities\nextremism\nexhaustive\nenquiry\ndoggy\ndodona\ndine\ndeterioration\ndenim\ndeliberate\ndeletion\ndefendant\ndamnation\ncroton\nconjunctive\ncondensed\ncomputable\ncoherence\nclearly\ncirculatory\nchose\nceiling\ncease\ncarburetor\nbund\nblunder\nblowout\nblot\nblackberry\nbeulah\nbedchamber\nbearded\nautopsy\nassistants\napplicability\nanomaly\nalamein\nagitation\naggregation\nadvocated\nadonis\naccompaniment\nabstinence\nabort\nwrench\nwildflower\nwatercraft\nwand\nvali\nupside\nunclassified\nunbroken\ntufa\ntenderness\ntemps\nsweepstakes\nstupa\nstuck\nstrengthening\nstreeter\nstandby\nsprite\nspectacle\nsmuggling\nshocker\nshipwreck\nsending\nseigneur\nsaucer\nsails\nsagittarius\nsag\nruble\nrodman\nreinforced\nreferral\nredesign\nrealistic\nrationalist\nracket\npurely\npracticing\npotatoes\nporn\nplea\npeanuts\npasture\npassionate\novary\nonslaught\noffender\noceanographic\nnotions\nnne\nnipple\nneat\nnanny\nmotorcycling\nmedusa\nlorry\nlifesaving\nledger\nlax\nkrait\njardin\nirreversible\ninhabit\nincisor\nilluminated\niconic\nibex\nhumidity\nhubble\nheirs\nheadmaster\nharpsichord\nhallmark\nhaired\ngrooming\ngrandeur\ngory\ngeopolitics\ngather\ngam\nfurs\nfuego\nfootprint\nflicker\nfide\nfailing\nfaded\nexcuse\newe\nescalation\nepisodic\nensuring\nembankment\nelliptical\nelective\nduet\ndraught\ndividing\ndike\ndiagnostics\ndefiant\ndebts\ndeafness\ndeactivation\ncreeping\ncrackdown\ncowl\ncorrelated\ncopied\ncons\nconcurrence\ncollagen\ncollaborator\nclio\nclaimant\ncicero\nchubb\ncheer\nchaparral\nchampaign\ncashmere\ncaring\nbuyer\nburp\nbrackets\nboyhood\nbowed\nboring\nbooty\nbonaventure\nbloomer\nbloodstain\nbirdlife\nbinder\nbeveridge\nbeaune\nbate\narriving\napathy\namulet\nambrosia\nacheron\nacadian\nyaw\nwits\nwinger\nvulnerable\nvindication\numbra\nthroughput\nsurya\nsubsistence\nstratosphere\nstenosis\nstaircase\nspotting\nspire\nspaghetti\nsmack\nslant\nskilled\nshale\nsequoia\nseasoning\nscarf\nsanton\nrubicon\nrota\nripper\nremind\nreckoning\nrebound\nracist\npythagorean\npsyche\npresumably\npossessed\npom\npointing\nphilo\npermian\npenner\npaley\nnumismatic\nnizam\nnit\nnegation\nmonger\nmig\nmerely\nmegaton\nmasquerade\nmarry\nmadman\nlure\nlegislator\nleaching\nintolerance\ninterpolation\nintact\nincense\nhypersensitivity\nhogarth\nhf\nhatchet\nhappily\nhappens\ngosling\ngoofy\nglycol\ngaruda\nfunnies\nfreer\nforecasts\nfoe\nfigurine\nextrinsic\nequator\nenvoy\neconomies\ndisplaying\ndisclaimer\ndiogenes\ndigestion\ndespot\ndelirium\ndeformation\ndeepest\ndawning\ncurly\ncrowded\ncorridors\ncontribute\nconsular\nconestoga\ncoaxial\nclue\nclarification\nclad\nchop\ncherish\nchastity\ncausa\ncadmium\nbreasted\nbooby\nboggy\nblindness\nbimbo\nbeheading\nbattling\nbacterium\nattend\natrophy\nastral\narchangel\nadoration\nadjudication\naccurate\nwallaby\nvows\nvestal\ntout\ntot\ntiara\nthreads\ntet\ntec\ntaurus\ntachycardia\nsyllabus\nsurrealist\nstamping\nstalking\nsatin\nsalty\nsadness\nrohr\nringed\nrespond\nresistor\nreprint\nreinforcement\nreckless\nreadership\nradioactivity\npulsar\npsychoanalyst\nprotester\npositional\nportmanteau\npokey\nplumbing\nplenipotentiary\npleasures\nplanter\npertaining\npedagogical\npassover\npalsy\npageantry\noverhaul\nomen\noecd\noccupancy\nnymph\nnous\nmottled\nmorals\nmikado\nmiddleman\nmanatee\nlode\nlistener\nlasso\nlassie\nlandfall\nlame\nkiowa\nkennelly\njeopardy\nindexes\niambic\nhustler\nhoof\nguilder\ngoring\ngauntlet\nfudge\nframed\nforerunner\nfootwork\nfastnacht\nextracted\nexpressive\nexpelled\ndurga\ndory\ndissociation\ndirac\ndeviance\ndesk\ndenied\ndefend\ndap\ncrashing\ncounselor\ncormorant\ncontour\nconger\nconfucius\nconfederated\ncond\ncommitments\ncollapsed\ncolic\nchute\nchasm\nchairmanship\ncentipede\ncavernous\ncanned\ncaerphilly\nbully\nbricks\nbrew\nbole\nblitzkrieg\nblending\nbenefactor\nbaring\nbail\nausterlitz\nattract\nasbestos\narbitrage\narawakan\nannouncing\namigo\naloha\naligned\nagnosia\nadrenal\nabdal\nabandon\nzag\nwac\nvulgate\nvolt\nvirulence\nvenerated\nunorganized\nuniqueness\ntriumphal\ntranquillity\ntragopan\ntheoretic\nsuggest\nsubmerged\nsubmachine\nsublime\nsubculture\nstrata\nstoryteller\nstetson\nsplice\nspend\nsolvable\nsodality\nsilicone\nshortening\nshipwrecked\nshave\nsane\nsacraments\nruse\nrigidity\nribbons\nresigned\nrem\nreinforcements\nrefusal\nreenactment\nrallying\nrainmaker\nquit\nquadrature\npuffy\npressed\nposting\nplebiscite\npiccolo\npenis\npenicillin\npatented\nparoles\noutfield\norganize\noccupy\nobscura\nnotices\nmarrow\nmanchu\nmackinaw\nlockout\nlocking\nliabilities\nirreducible\ninvincible\nintestine\nintermarriage\nindication\nincendiary\nimperfect\nhostile\nhera\nhausa\nguillotine\ngrindstone\ngrimaldi\ngoalkeeper\ngneiss\ngears\ngearing\ngathered\nforged\nflashing\nfinis\nfearsome\nfatherland\neyewitness\nexponent\nexempt\nerato\nepistle\nenabling\nelectrolysis\neffigy\ndusky\ndrone\ndisparity\ndisguise\ndime\ndewan\ndemonstrate\ndecreasing\ndecorator\nculmination\ncruising\ncrowning\ncrossfire\ncriticality\ncoward\ncorton\nconserved\ncomprehension\ncommit\ncoenzyme\ncleaver\nclassifying\nchiropractic\nchaperone\ncentrum\ncatalysis\nblinding\nbilliard\nbascule\nbambino\nasymmetry\nasp\narticular\nalbino\nalbertus\naffluent\nadhesion\nabsurd\nabode\nyogurt\nwester\nweep\nwaiver\nvicarious\nvibrato\nventricular\nusaaf\nunilateral\nunconscious\nunbounded\ntyranny\nturnaround\ntrove\ntrillium\ntoxin\ntopper\nthirds\nthi\nthermoplastic\ntactic\nswings\nsubsidy\nstutter\nstuffed\nstripper\nstradivarius\nspare\nsorceress\nsnare\nseverely\nsentry\nseminar\nseaport\nscum\nroxburgh\nrococo\nripe\nremotely\nrelate\nrectal\nrainwater\nquadrilateral\npurge\npurchasing\nprospective\npresto\npostulate\npopulous\npollen\nplutonium\nperil\npathological\npathfinder\npastel\nparsley\nparallelism\noverpopulation\nopt\noppression\noffshoot\nnightfall\nnigger\nmufti\nmissa\nmemorabilia\nmem\nmediator\nmastoid\nlipped\nlint\nknuckle\njustified\njester\njackal\ninvalid\nintrusive\ninteract\ninflow\ninbreeding\nhydrodynamic\nhorseman\nhobbes\nhandsome\nhaldane\nhaggard\nguess\ngrit\ngradual\ngown\ngoblin\ngeographically\ngatekeeper\ngatehouse\ngasworks\nfright\nflounder\nflak\nfixture\nexploded\nexpand\nethnology\nepiscopate\nenactment\nelasticity\nedged\necologist\neater\nearthworm\ndivers\ndigging\ndiaper\ndevolution\ndeuce\ndetonation\ndeterminism\ndentition\ndefector\ndally\ncunning\ncuneiform\ncretan\ncoster\nconventionally\ncommodities\ncognate\ncivet\ncartography\ncarmelite\ncareful\ncapitalist\nbuyers\nbulge\nbuckshot\nbreeder\nbottoms\nbona\nbobble\nbeginner\nbarb\nbandstand\nbalsam\nawful\nauxiliaries\natop\naside\napproaching\nanglicanism\nanesthesia\nanchored\nalderney\nalcoholism\naegis\nacquittal\naccompanying\naccommodations\nzoroastrian\nzn\nveto\nvalance\nuterus\nunc\ntuner\ntroubadour\ntransmit\ntow\ntitania\nthreatening\ntern\ntakeoff\ntagged\nswarm\nsuperstition\nsubpoena\nstronghold\nsteer\nstandoff\nspooky\nsolemn\nslut\nshiver\nserbo\nseminal\nsemen\nsemaphore\nseaside\nseafarer\nsatsuma\nsacks\nsabir\nrooted\nrhombic\nretroflex\nrenunciation\nremodeling\nreinstatement\nreindeer\nrecommendation\nrecess\nrecap\nratchet\nrash\nrancher\nquicksand\npursue\npsychosocial\nproponent\nprobation\npresently\npractised\npolite\npickled\nparsing\npardoned\noutrageous\noui\nosteitis\noiler\nobsessed\nobserve\nniter\nnicaea\nmuskogee\nmommy\nmarquee\nmandaeism\nmagnate\nmackintosh\nlymph\nllano\nlesion\nkites\niterative\ninward\ninterferon\ninjunction\nindeterminacy\nindemnity\ninches\nimpossibility\nhomage\nhemorrhagic\nheeled\nhebe\nheartless\ngunshot\nguarantees\ngrease\ngrating\ngoby\ngaunt\ngator\nfreya\nflashback\nfir\nfilth\nexhibited\neviction\neveryman\neuphoria\nesquire\nendowed\ndrosophila\ndowner\ndormancy\ndiscontinuous\ndimmer\ndiffuse\ndecent\ncustodian\ncorral\nconveyance\nconvection\nconsume\nconstituted\ncondensing\nconcourse\ncommutation\ncoed\nclove\nchuvash\nchimpanzee\ncares\ncantabile\ncannibalism\nbronco\nblazer\nbien\nbeholder\nbedouin\nbasso\nbaseman\nbarnabas\nbarely\nbackstage\naussie\naskew\narrive\narras\narmaments\nanorexia\nanaerobic\naltering\naltarpiece\naeon\nadjuvant\nadc\nacceptable\nyon\nwhitlow\nwarped\nwantage\nwacky\nunrestricted\ntying\ntigre\nthieving\ntetrachloride\ntaxing\nsyntactic\nsubacute\nstreamline\nsteels\nstarving\nsporadic\nspellbinder\nspecs\nsober\nslumber\nslipper\nskinned\nshrinking\nshortwave\nscenery\nsalutation\nsalina\nrusset\nroaring\nriverhead\nrepeating\nrendition\nregionalism\nreasoned\nrains\nquilting\npurgatory\npunishments\npun\npulled\npubis\nprincipalities\nprimrose\nprelate\nportraiture\nplumb\nphantasm\nparliamentarian\norozco\noriginate\nomission\nobligatory\nnormative\nnaturism\nmythic\nmussel\nmotte\nmoorish\nmonolith\nmoderation\nmistaken\nmelford\nmanpower\nmalachi\nlikelihood\nlenticular\nleek\nkippur\nkamarupa\niteration\nirony\nintersecting\nimplements\nidiom\nhoot\nhippo\nhilly\nhighlight\nheadless\nhangman\ngranger\nglut\ngirdle\ngasification\nganja\nformulated\nfoaled\nflamboyant\nfamille\nfalconry\nencoder\nelision\nelectrodynamic\ndwellers\ndude\ndroit\ndraughts\ndoubling\ndissemination\ndisappointment\ndiminished\ndepend\ndecreased\ndecide\nddt\ncuddy\ncrystalline\ncryptology\ncrucifix\ncreeps\ncorrecting\ncontraband\ncontaminated\nconfidentiality\nconcha\ncommandment\ncocker\ncoagulation\ncloister\nclog\nclockwork\nclam\ncheers\nchecked\ncatastrophic\ncarnal\ncarmine\nbursting\nbuoy\nbrio\nbrilliance\nbridle\nbookman\nblazon\nbirdman\nbargain\nattractive\nassent\narsenate\narmyworm\nardennes\narchetypal\naphrodite\nanyway\nancona\namen\nadvisers\nzuni\nwildfire\nwig\nweevil\nweeds\nvirtuoso\nvetch\nversatile\nvendor\nunusually\nunidentified\nturbulence\ntracer\ntenets\ntaiga\nsynergy\nsuperpower\nstyling\nspades\nsoftly\nshielding\nsemitism\nselene\nscrappy\nschoolhouse\nsauter\nruthless\nruthenium\nrhubarb\nrestitution\nregicide\nregalia\nreadable\nrah\nraga\nraffles\nquota\npsalms\npropositional\nproceeding\nprewar\npretender\npreemption\nprank\npounds\npopliteal\nphalanx\npavlov\npater\nparagraph\npap\npackaged\noperetta\noperculum\nohm\nobservable\nnodular\nninety\nmoccasin\nmite\nmephisto\nmeek\nmayan\nmaneuvers\nmako\nmahogany\nlowlands\nlocalized\nlingua\nlegitimacy\nlament\nlade\nlactate\nkosher\nkeck\nkarelian\njumpers\ninterlocking\ninsular\nhypertensive\nhick\nheartache\ngravy\nglamour\ngallows\ngaining\ngaga\ngab\nfictitious\nfeat\nestimating\neradication\nepitaph\nendowments\nendorsed\nencyclical\nelaborate\neclectic\ndues\ndreadnought\ndoss\ndiscretion\ndeterrence\ndeny\ndelicate\ncrocus\ncornet\ncompulsion\ncompressed\ncompleting\ncommemorating\ncollage\ncoherent\ncichlid\nchopped\nchard\ncaller\nbream\nbran\nbothriolepis\nborax\nblocked\nberm\nbanyan\nazar\nauld\nattracted\nankh\namphitheater\namalgam\nalphabetic\nallegorical\nalderman\nairliner\nadjustable\nadjunct\nadherents\nacquiring\nacknowledged\naccordance\nworded\nwidget\nwhitefish\nwhirlwind\nwander\nvolunteering\nvindicator\nversatility\nvc\nunto\nunmade\ntripartite\ntransformed\ntouched\ntopographic\ntoasted\nthumbs\ntamping\ntailor\nsuffer\nstrands\nstockade\nstoa\nstaring\nstarch\nspheroidal\nsooty\nsoma\nsocratic\nsled\nslaty\nsiva\nsiding\nshrink\nshamanism\nsemester\nselecting\nsecuring\nseashore\nsearchlight\nsamaritan\nsalut\nsagebrush\nribosome\nrial\nretain\nrenew\nrefinement\nrectory\nrectifier\nrecapture\nravel\nrationality\nramadan\nquorum\npsychosis\nprostatic\nprominently\nprankster\npotty\nporphyry\nplasterwork\npidgin\nperseverance\nperfusion\npejorative\npartnered\nparson\npampas\npajamas\noverboard\nokrug\noka\nmum\nmultiplicity\nmould\nmotoring\nmeningoencephalitis\nmaximal\nmaxima\nmastodon\nmasterpiece\nmardi\nmanned\nmalfunction\nlighter\nknuckles\nkairos\njuke\njuggling\ninsurgent\nincubus\nincorrectly\nincontinence\ninconsistent\ninappropriate\nhusbandry\nhostages\nhooked\nhooded\nholography\nheroine\nhearsay\nhandwriting\ngroom\ngrizzled\nglassware\nfrenzy\nfredericksburg\nfostering\nflyover\nflam\nexcited\nenlarged\nechidna\ndukedom\ndomestication\ndihedral\ndiggers\ndene\ndempster\ndaybreak\ndaisies\ncucumber\ncrawling\ncontrasts\nconfucianism\ncompetency\ncircuitry\nchronicler\nbonfire\nblowing\nblindfold\nbenchmark\nbatty\nbarnyard\navion\natua\nattachments\namethyst\nwrapper\nwiggle\nwhetstone\nwayward\nwaterworks\nvespers\nvert\nveneer\nvain\nvagina\nvagabond\nurgent\nupbringing\nunused\nunsigned\nundersea\ntubing\ntrombone\ntriage\ntransporting\ntransduction\ntopped\nthalia\ntequila\nsweetheart\nsurreal\nstalinism\nspiritism\nspaniel\nsot\nsnout\nsmokeless\nslowdown\nsliding\nshove\nsheltered\nsheik\nshebang\nshag\nseemingly\nsaturated\nsanhedrin\nrosette\nrodent\nriparian\nrewarded\nrestoring\nrepetitive\nrely\nreedy\nrebus\nprudent\nprevalent\npredatory\npoorly\npolished\npliocene\npita\npiping\npiety\npeony\npaternal\npantomime\npandit\nomitted\noctant\nnumb\nnovice\nneurology\nnaturalistic\nnaive\nmyriad\nmusicology\nmotions\nmoratorium\nmoniker\nmentality\nmeasurable\nmaterialism\nmammary\nmailing\nlocate\nlimiter\nlifted\nlapwing\nkaleidoscope\njaws\njackpot\nitch\ninterment\ninhuman\nincorrect\nimperative\nhammock\nhalide\ngrasses\ngnostic\nglossy\nglace\ngeneris\ngat\ngalena\nfuse\nfundamentals\nfullback\nfrey\nforfeiture\nfenian\nfaro\nextermination\nexorcism\nexiled\nexemption\nethylene\neocene\nenforced\nember\neffusion\ndunkirk\ndispersed\ndisguised\ndey\nderegulation\ndepletion\ndeceiver\ncybernetics\ncurlew\ncripple\ncreations\ncounted\ncopying\ncopley\ncontrasted\nconcentrating\nchinchilla\nchartreuse\ncapon\nbrougham\nbromine\nbogus\nbiddy\nbeside\nbearings\nbassoon\nattendant\nasm\nangina\nambitions\namadou\nagree\nafterward\naeration\nablation\nabbe\nwaxy\nwarring\nvena\nupward\ntyr\ntwister\ntreble\ntoughness\ntoccata\ntilling\ntesta\nteal\ntaupe\ntaoism\ntangier\nswear\nsuffixed\nsufficiently\nstringer\nstressed\nstead\nstarlight\nstacks\nsolace\nsinfonietta\nshellfish\nseriously\nseated\nsatanism\nrocking\nremittance\nredundant\nrebate\nrarity\nrapprochement\nquadruplex\nprovocation\nprobate\npreserves\npresbytery\npostmortem\npolyphony\nplight\nplanted\npituitary\npelt\nparsi\nparrott\noverseeing\novers\noutcast\noutburst\nosmotic\nornaments\noar\nnowadays\nneverland\nnematode\nneighbor\nnavel\nnationalization\nnadir\nmultipurpose\nmulberry\nmotivated\nmontage\nmoderato\nminter\nmineralogical\nmeander\nmapped\nmandeville\nmalformation\nmagellanic\nluggage\nlinen\nladdie\nlabial\nlabia\nkomi\nknocking\nkidneys\nisthmian\nironwood\ninterpretive\ninshore\nincubator\nhunchback\nhumid\nhologram\nhocking\nhelios\nharum\nhardening\ngumbo\ngratification\ngrandpa\nglazing\ngall\nfuturistic\nforwarding\nfolder\nfleece\nfled\nfiendish\nfavored\nfates\nexhale\netruscan\nemptiness\nemir\nemigrant\ndowel\ndoctrinal\ndislocation\ndisappearing\ndemonstrative\ndeeply\ndarkest\ncremation\ncranberry\ncorvus\nconsulate\nconsiderably\ncondiments\ncockpit\nclipping\nclimatic\ncleavage\nclassify\nchondrite\ncatacombs\ncapricorn\ncanteen\ncalvinism\nburying\nburgrave\nbuckler\nbrine\nbrickyard\nbracken\nbowel\nbori\nbonito\nboatman\nbestowed\nbelles\nbeanstalk\nbaronetage\narica\nantiquary\nannular\nangling\naller\nalike\nadvocating\nadultery\nadmittance\nyawning\nyachting\nxerox\nworthy\nwormwood\nwhitening\nweary\nwager\nvent\ntutoring\ntutorial\ntricky\ntreachery\ntonal\ntimed\ntiles\nthrown\nthrottle\nthereof\ntetracycline\ntasked\ntabula\nsuction\nstretched\nstitches\nstir\nsquamous\nspiller\nspecify\nsparkling\nsongbird\nsnick\nsmelter\nslobbovia\nskylark\nshopper\nshampoo\nshaken\nseeker\nsecretion\nroughness\nrote\nreluctant\nrealization\nquixote\nprong\nprodigal\nprivileged\nprivateer\nprescription\npregnant\npredicted\npoultry\npostscript\nperilous\npercutaneous\npedagogue\npecan\npeacetime\nparoxysmal\noutrage\nouting\northopedic\nogham\noctagonal\nobstetrics\nniobium\nnegotiate\nmurmur\nmonoplane\nmoline\nminted\nmidwinter\nmerits\nmatin\nmanifestation\nmagus\nlsd\nloo\nlofty\nliquefied\nlipstick\nlimbo\nlawmaking\nlaches\nkirchner\nkicker\njeune\nitalic\ninvocation\nintuitive\ninterconnect\nintegrative\ninsensitive\ninhabiting\nindividually\nincoming\nimprovised\nimaginative\nhypersonic\nhydroxy\nhiring\nheterocyclic\nhessian\nhappenstance\nhappenings\ngung\ngunboats\nguardsmen\ngrapple\ngraces\ngrab\ngoldeneye\ngmt\ngeranium\ngaze\ngallop\nfrosty\nfrith\nforwards\nfluctuations\nfingering\nfecal\nexcitement\nere\nepistemological\nenvironmentalist\nenrolled\nencouraging\nelegant\neldorado\nefficiently\nefferent\ndizzy\ndismemberment\ndisagreement\ndillinger\ndiamondback\ndewberry\ndeuterium\ndetailing\ndeceptive\ndazzle\ndalmatian\ncutoff\ncrib\ncozy\ncoroner\ncontinuance\ncomply\ncommutative\ncoloration\ncoded\ncivitas\ncircumstance\nchromatin\nchimes\nchewing\ncausative\ncater\ncartographer\ncarthusian\ncaramel\nbusting\nbuckeye\nbrunet\nbrannigan\nbirthright\nbegotten\nbeagle\nbauhaus\nbarrels\nbaggage\nauthoritative\naustronesian\nathenaeum\nastrophysicist\nartifact\narthropod\namend\nambrosian\nalia\naisle\nadverbial\nadverb\nacropolis\nacquire\nacme\nacidity\naccursed\nzoning\nyogini\nwyandotte\nwoolsey\nwoodwind\nwarranty\nwag\nvile\nvalediction\nursa\nupset\nunchained\ntrivium\ntribulation\ntits\ntinning\ntimer\ntimely\nthule\ntaxpayer\nsymptom\nswahili\nsummertime\nsummation\nsuborder\nstalk\nstacked\nsportswear\nspokesperson\nspectacled\nsouvenir\nsotto\nsnuff\nsnowfield\nslap\nsextet\nseparable\nsanity\nsalish\nsainthood\nsailcloth\nrigging\nrigger\nribs\nreside\nreliquary\nrelic\nreimbursement\nrefined\nrecurrence\nrecon\nrealty\nrata\nranunculus\npunching\npropellant\nprintmaker\nprefer\nprefect\npoisonous\npliers\npimp\npd\nparentheses\nozone\noutlying\nnostalgia\nnameless\nmurderous\nmodus\nminuscule\nmidwife\nmandible\nmagnetism\nloudness\nlop\nloon\nlongs\nlifelong\nlesbianism\nlemonade\nlemming\nleeward\nlagrangian\nlactic\nkoran\nkantian\ninvertebrate\ninterregnum\nintermission\ninsulated\ninnovator\ninformational\nimproper\nillustrious\nhymnal\nhecate\nharpoon\nhandicapped\ngush\nguilt\ngroats\ngloss\ngalilean\nfurry\nfrying\nfrostbite\nfresco\nfrascati\nfluke\nfluffy\nfleur\nfleeting\nfiled\nfathom\nexecute\nerotica\nepistles\nenriched\neats\ndrumhead\ndower\ndope\ndodger\ndividend\ndisturbed\ndispensation\ndisengagement\ndeflection\ndearest\ncypher\ncredo\ncontrasting\ncontrary\nconfection\nconcussion\ncompose\nclues\nclockwise\ncheating\ncategorized\ncantal\ncalligraphy\nburrow\nbrightly\nbriefs\nbonanza\nbloodletting\nblasphemy\nbibliotheca\nbequest\nbending\nats\nataxia\narresting\nargue\narchduke\nannexed\nalternately\naeroplane\nzig\nwolfram\nvomiting\nunwanted\nunproduced\nunison\ntweak\ntroyes\ntrillo\ntranscontinental\ntongues\ntheistic\ntempered\nteenager\nswastika\nsuperconductivity\nsubstantially\nstealing\nstateless\nsprout\nspicy\nsoaring\nskuld\nsinhalese\nsimplification\nshoals\nseer\nsectarian\nscarp\nsaturnalia\nsarcoma\nrighteousness\nreversed\nreticular\nretainer\nreshuffle\nreputed\nregimen\nreciprocating\nreceipt\nrealizability\nrandomness\nraglan\nquarrying\nquantification\nprove\nprescribed\npraying\npoona\npomegranate\npoltergeist\npigment\npicked\nphysiologic\npharmacist\nperoneus\npeccary\npangasinan\noutgoing\noppositional\noerlikon\noberon\nnozzle\nnitrite\nnightjar\nnap\nnaik\nmutineer\nmusicale\nmultitude\nmorbid\nminos\nmimic\nmillennial\nmayonnaise\nmartingale\nmarly\nmarbles\nmammy\nmalnutrition\nmab\nlocative\nlimousine\nlifeguard\nlied\nlicking\nlentigo\nleaky\nitinerary\ninvested\ningenious\nindirectly\nincorporate\ninconvenient\nimpose\nillustrative\nhydrolysis\nhuntress\nhumanoid\nhoosier\nhesperus\nhelpers\nhatchery\nharmonized\nguts\ngovern\ngorgeous\ngoaltender\ngaseous\nforthcoming\nformulaic\nflack\nfiltration\nfertilizer\nexcavator\nethnologist\nestuarine\nenfant\nemploy\neliminate\nelectrolyte\ndyeing\ndulcimer\ndisordered\ndialectic\ndermatology\ndengue\ndecentralization\ndecadence\ncutie\ncuff\ncreamery\ncorrector\ncorrective\ncorning\ncopernican\ncoop\ncooler\ncontrabass\nconsidering\ncomma\ncolorful\ncognac\ncocoon\ncleft\nclarion\nchaise\ncestui\ncentrifugal\ncensor\ncapacities\ncampanile\nbushveld\nbullfrog\nbroccoli\nbolts\nbesides\nbenzene\nbehold\navionics\nattained\nattacker\nassorted\narachnoid\naphasia\nairspace\nagate\nadz\nadopt\nadolescence\nadjusting\naccumulated\naccordion\naccidentally\naccepting\nzap\nwarmer\nvigil\nventurer\nvalhalla\nunstable\nunequal\nundeclared\numa\ntyping\nturnout\ntripping\ntrimmer\ntricycle\ntrickster\ntransducer\ntotem\ntote\ntoffee\ntingle\ntimekeeping\ntelegram\ntaxable\ntambourine\ntableau\nsuspicion\nsunglasses\nsuan\nstylistic\nstray\nsteelworks\nspitting\nspiritualism\nspawning\nsocialization\nskirmish\nskew\nsideswipe\nshovel\nshakespearean\nsewerage\nsever\nseaweed\nscrap\nsanction\nrobes\nriche\nrevocation\nrespiration\nreject\nregress\nrefractive\nreflux\nredstone\nredoubt\nrecurrent\nrectification\nrecoil\nrealschule\nrattle\npushed\nprovident\nproverb\nprospectus\npronto\nprofitability\nplatypus\nphryne\nphotojournalist\npesticide\npenance\npasser\npapillary\npains\nowe\nogre\nnissen\nnihilism\nnightshade\nnieve\nnautch\nnashua\nmuslin\nmura\nmultilateral\nmonsignor\nmonarchist\nmende\nmayoralty\nmanna\nmahayana\nlycian\nlogics\nlibra\nleukocyte\nlawful\nkui\nkrypton\nkinky\njezebel\nissuance\nisotopic\nintangible\ninert\nimporting\nimplosion\nikon\nhonky\nhinge\nhelper\nheated\ngur\nguerre\ngrudge\ngrammarian\ngop\nglitter\nglebe\ngilded\ngearbox\nfrantic\nfrankfurter\nflooded\nflail\nfixer\nfeist\nfabricated\nexfoliation\nexcitation\nenjoyment\nelixir\nefta\ndunk\ndraconian\ndormant\ndoorway\ndistribute\ndiscuss\ndiarrhea\ndianetics\ndeposed\ndeformity\ndagon\ncrux\ncrank\ncorvo\nconsumerism\nconquering\ncongratulations\nconfiscation\ncompliant\ncolorist\ncharms\nchanson\ncentering\nceleste\ncasus\ncastelli\ncapitata\ncannery\ncamas\nbubba\nbronchiolitis\nbouche\nbotticelli\nbooting\nbooking\nbony\nbloke\nblockhead\nblah\nbiff\nbibliographies\nbeads\nbarrens\nbaronetcy\nbarnacle\nbaldy\nautobahn\naudible\naraba\nappaloosa\nandante\nanalyze\nalumnus\nalternation\nagora\naffirmation\nafferent\nyeoman\nxhosa\nwrapped\nworkout\nwidening\nvinegar\nvestibule\nventilator\nvending\nvariegated\nuntamed\nunexplained\nundefined\nunassisted\ntypographic\nturboprop\ntrundle\ntrousers\ntreadle\ntrainee\ntoss\ntonality\ntimbuktu\nthales\ntem\nsynthesized\nstrife\nsteeple\nsteamed\nspite\nspaced\nsounding\nslack\nskiff\nsilvery\nsidewinder\nshouldered\nshaving\nseverance\nsensations\nseized\nseize\nscurry\nscourge\nscavenger\nsatisfy\nrut\nrumen\nrostral\nrialto\nretouch\nresolute\nrepublicanism\nreprieve\nremit\nreincarnation\nrefit\nreferential\nredundancy\nradon\nradiator\npuck\nprolonged\nproceeds\npranks\npostcard\npoaching\npippin\npinning\npew\npenitent\nparisian\npapoose\noverpower\nourselves\nopposites\noctane\noboe\nnighthawk\nniece\nmuffin\nmovable\nmouton\nmistral\nmiocene\nminaret\nmentalism\nmechanically\nmatriculation\nmartyred\nmarmot\nmantegna\nmanganese\nmanas\nmalus\nmadhouse\nmadam\nlikes\nlightly\nlexis\nlarch\nlager\njus\njuris\njukebox\njacky\ninventive\ninterruption\ninternally\nintermezzo\ninsomnia\ninducing\nindecent\ninadequate\nidem\nhumanistic\nhinterland\nhertha\nherder\nheartbreaker\nharem\nhades\ngaff\nfoundling\nfosse\nforgiveness\nfootnote\nfolds\nflipper\nfirma\nfireball\nfeudalism\nfencer\nfelony\nfeasibility\nfatherhood\nfarce\nfading\nezekiel\nextremist\nexhumation\nexcepted\nevaluated\nerhard\nengaging\nencampment\nempower\nemmental\nembodied\neasternmost\ndroop\ndreux\ndoughnut\ndorm\ndiehard\ndace\ncredibility\ncreamy\ncordon\ncookery\nconvolution\ncontemporaneous\nconjunctivitis\nconfined\nconcluding\ncircumscription\ncinque\ncholera\nchime\nchicane\ncelery\ncatawba\ncassel\ncalorimeter\nburin\nbrute\nbriefing\nbozo\nbounding\nbod\nblooming\nblinky\nblain\nbiopsy\nbight\nbhagavad\nbenediction\nbarren\nbarong\nbackcountry\navulsion\nassessing\narrogant\naristotelian\nardent\nappetite\nantidote\nanticipation\nangiography\nanalogical\namortization\nafterglow\nadrianople\nadiabatic\nwooded\nwipe\nwinkle\nwiles\nwhist\nvoltameter\nvitalis\nvictimization\nvibrations\nvial\nversicolor\nverity\nunlawful\nunintentional\nundesirable\ntrinket\ntriggering\ntrestle\nthallium\nswordsman\nstruma\nstorybook\nstinky\nspun\nspars\nsorts\nsloppy\nslay\nsitter\nsider\nshutter\nshoring\nshogun\nshingles\nshilling\nseraph\nseem\nsedimentation\nseance\nscone\nsandstorm\nsalivary\nsagging\nsachem\nruthenian\nroast\nrishi\nreverie\nretraction\nrepentance\nrcmp\nradiography\nradiative\nquestioning\npurpura\npuller\nprops\nporpoise\nplacenta\nphysique\nphaeton\nperforated\npeppermint\npeeping\npastry\nparlor\npanoramic\npaleolithic\npaleo\nowing\noverline\nossification\noppose\nolden\noceanographer\nobverse\nobligate\nnunnery\nnormalized\nnona\nnocturne\nnavigable\nmrna\nmoveable\nmotherhood\nmontrachet\nmonotone\nmondrian\nmoderator\nmisidentification\nminyan\nmerl\nmeningitis\nmatsya\nmasaccio\nmarvelous\nmartello\nlump\nloophole\nloom\nlobbyist\nlengthy\nlender\nlately\nlacing\nkink\nkilometer\nkibbutz\nkhaki\nkame\njoyful\njiva\nisolate\nintrinsically\nintertidal\nintercourse\ninterconnected\nintercession\ningle\nindicative\ninanimate\ninability\nimpressionist\nimmunization\nillicit\nhypertrophy\nhug\nhue\nhover\nhopeless\nhomegrown\nholographic\nhelicon\nheadband\nhag\nguideline\ngraded\ngesture\ngeophysics\ngabby\nfuries\nfuchsia\nfrolic\nfreezing\nfraudulent\nfoxy\nforbidding\nfootpath\nflutter\nfluent\nfleck\nfences\nexplaining\nerstwhile\nenumeration\nenlistment\nendocarditis\nemerge\nembolism\ndrinker\ndozens\ndods\ndivisor\ndistributive\ndistorted\ndissonance\ndissertation\ndisconnected\ndiabolical\ndesires\ndeserter\ndemi\ndegenerate\ndefective\ndefeasible\ndecimation\ndado\ncyclonic\ncutaway\ncuriosity\ncrushing\ncrump\ncrankshaft\ncot\ncorreggio\nconvertible\ncontainment\nconquered\nconjugated\nconcurring\ncommendation\ncodification\nclaymore\ncima\nchristen\nchopping\ncelibacy\ncasing\ncambrian\nbruiser\nbreakwater\nbouillon\nbottleneck\nbosses\nbooger\nbobcat\nbiochemist\nbimonthly\nbeater\nbathroom\nbasilar\nataraxia\nassemble\narmchair\nargued\naltimeter\naffirmative\nadrift\nyarn\nwink\nwhitey\nwhistling\nwatercourse\nwatchmaker\nwallpaper\nvp\nupgrading\nunspecified\nunpaid\nuniversally\nundine\nunconfirmed\nturquoise\ntowing\ntorso\ntollbooth\nthoroughfare\nthirst\ntautological\ntare\ntactile\nsyllabic\nswitchback\nsweeper\nstyx\nstrengthened\nstreaked\nstrategist\nstepped\nstencil\nsteed\nstaphylococcus\nspry\nspecifying\nspanner\nspandau\nsower\nsophisticated\nsop\nsocks\nsoak\nskipping\nsilkworm\nsetback\nselector\nsegregated\nseep\nseam\nsculptural\nsartre\nsanatorium\nruck\nroundabout\nrivet\nrimmed\nreviewing\nrepealed\nrented\nrecovering\nrecover\nrawhide\nradiotherapy\nquoted\npuffed\npudendal\npragmatic\npolyphonic\nplacer\npits\nphonetics\npertussis\npearly\npeacemaker\npayroll\npaved\npathogen\npastoralist\npans\nocclusion\nnewscast\nnevus\nnarcissism\nmutualism\nmotility\nmonochrome\nmodify\nmodifier\nmetered\nmetallurgical\nmeatus\nmattress\nmascara\nmarechal\nmarauder\nmandrake\nmammalian\nmaelstrom\nmachining\nlots\nlinger\nleaflet\nkiwi\nkinematic\nkhanum\nkale\njunkie\njudged\ninterchangeable\nintercalation\ninspire\ninhalation\ninfamy\ninaccessible\nimpress\nimminent\nides\nidealism\nichthyology\nhyperparathyroidism\nhype\nhowdah\nhoneydew\nholism\nhiss\nheels\nheadache\nhardback\nhandcart\nhammered\ngreeting\ngoldstone\nglobulin\ngerminal\ngenerative\ngannet\nfrater\nfoundered\nforcing\nfireside\nfiner\nfigurative\nfiery\nfetish\nextracts\nexpatriate\nenumerative\nenforce\nelectrochemistry\ndropout\ndrifting\ndoorstep\ndogma\ndisused\ndistilled\ndill\ndifferentiated\ndiamant\ndiable\ndetergent\ndeposited\ndecompression\nczar\ncyborg\ncrybaby\ncrunch\ncrumb\ncroce\ncouture\ncourtroom\ncounterfeiting\ncorrectness\ncoronal\ncords\nconsuming\nconstructivism\nconstitutionality\ncondom\nconditioned\nconcave\ncompetent\ncollapsible\nclustering\nclique\nchian\nchancel\nchained\ncaveman\ncate\ncarriageway\ncarnation\ncampaigner\nbuttermilk\nbrowed\nbrothel\nboutique\nbouquet\nbitty\nbiophysics\nbicentennial\nbiased\nbataan\nbankrupt\naye\nauklet\natheist\nasking\nargonaut\narchdeacon\napplicants\nanointing\nangelic\nambler\naircrew\nainu\nagglutinin\nadept\naccolade\nabsorber\nabdication\nzigzag\nyttrium\nyarrow\nwrecked\nwildest\nwiden\nwhiteness\nweave\nwealthiest\nwatchman\nwatchdog\nwahine\nveiled\nvaulter\nutilitarianism\nurea\nunifying\nundetermined\nunderage\ntwisting\ntusk\ntuned\ntum\ntrigonometry\ntrapping\ntransformational\ntranscendent\ntracked\ntowel\ntopping\ntoft\ntiff\ntelegraphy\ntelecast\ntawny\nsummons\nsully\nstunted\nstirred\nstilts\nstiletto\nsticker\nsterile\nsprinkle\nspleen\nsparse\nsow\nsonnet\nsolder\nsmock\nslinger\nskins\nsituational\nsita\nsiouan\nsimplicity\nsilurian\nshipman\nshakes\nsecularism\nscorecard\nscimitar\nschola\nscented\nrounder\nringmaster\nrigorous\nrhyming\nrfd\nrevisionist\nresponding\nrepulsion\nrepeatedly\nremembrancer\nremark\nreck\nreactance\nraincoat\nquaternion\nquartic\nprojecting\npredominant\nprairies\npoule\npositioned\npips\npiezoelectric\nphotosensitivity\nperpetrator\npenthouse\npectoral\nparfait\npamphlet\npaleozoic\noneself\nnonpartisan\nneurogenic\nneologism\nnecrology\nmull\nmucky\nmorphine\nmonogram\nmogul\nmitzvah\nminnow\nmicroform\nmend\nmelon\nmedievalism\nmagneto\nmaggot\nmacabre\nlubricant\nlovesick\nloft\nlash\nlapel\nkerosene\nkeelboat\njoiner\njetty\nintestines\nintermittent\nintensification\ninstallments\ninformant\niguana\nideation\nicy\nhypertrophic\nhydrophobic\nhunted\nhoodlum\nhomme\nhomburg\nheterogeneous\nheretic\nhardly\nhappening\nhaida\nhabitual\ngunning\ngunfight\ngrouse\ngroin\ngranddaughter\ngoggle\ngags\nforested\nflushing\nfloats\nfleshy\nfives\nferrous\nfamously\nexpect\nexcite\nevolve\nerroneously\nepidermis\nens\nenforcing\nembezzlement\nembargo\nellipsoid\neconomical\necon\ndrifter\ndredge\ndray\ndistraction\ndiscretionary\ndim\ndietetics\ndevonian\ndemotic\ndemobilization\ndemeter\ndelimit\ndecisive\ndecipherment\ndealings\ncurrant\ncrystallography\ncryogenic\ncrackers\ncorrectly\ncoping\nconsistently\nconsignment\nconservationist\nconditioner\ncompleteness\ncommute\ncollusion\nclientele\ncentralized\ncenotaph\ncatwalk\ncatbird\ncarrion\ncajun\nbridal\nbourdon\nbolognese\nblight\nblackfoot\nbiweekly\nbiotic\nbetterment\nbesieged\nbeloved\nbeatified\nbeaked\nbatak\nbarbed\nayatollah\nawarding\naversion\natheling\nastray\nastounding\nassociative\narchon\narchangels\narabesque\napt\napocryphal\naldehyde\nakkadian\nafterword\nafraid\nadolescents\nadjunction\nacrobatic\nyukaghir\nyell\nwrapping\nwinch\nwarn\nvolatile\nvocation\nvizier\nvisayan\nvigor\nurticaria\nunspoken\nunderwear\nundercurrent\nunbreakable\ntwining\ntuscan\ntroche\ntriumvirate\ntriplet\ntrickle\ntremor\ntray\ntraitor\ntouchdown\nthetis\nthermonuclear\ntelemetry\ntalker\ntagging\nswede\nsuitability\nsubtle\nsubmersible\nstumbling\nstratofreighter\nstarry\nstalemate\nspringtime\nspoils\nsplicing\nspender\nsouthbound\nsodomy\nsocially\nskinny\nsilhouette\nsighted\nshiner\nsecularization\nsecretly\nscarer\nscarce\nscapular\nsapiens\nsalience\nrustic\nrummy\nrobustness\nroasting\nroadhouse\nrive\nreseda\nreparations\nremorse\nremembering\nrealist\nrags\nragged\nradioisotope\npussy\npulley\nptolemaic\nprosperous\nprerogative\npreferential\npostman\npolyphemus\npolishing\npoetics\nplumage\nplosive\npleat\nphysiologist\nperiodontal\nperfectly\npentecost\npenology\npedals\npaternity\npascua\npallid\npall\npail\noverdraft\novercoat\noutlines\nornamentation\nophthalmologist\nolfaction\noctet\nobey\nnovelette\nnonunion\nnares\nmutism\nmoyen\nminimizing\nmileage\nmetrical\nmatron\nmane\nmademoiselle\nluminous\nlooby\nlegalization\nkeeps\njute\njure\njuicy\njig\nintramural\ninstantaneous\ninertial\nimp\nimmoral\nimbalance\nhurdler\nhorizontally\nhonesty\nhermetic\nheading\nhazy\nhalibut\nhaircut\nguaranty\nglycine\nglance\ngestures\ngeometrical\ngentile\ngaucho\nfurlough\nforester\nfoliage\nflotation\nflawless\nfishhook\nfieldwork\nfid\nfatale\nfaker\nexpecting\nespecial\nesophagus\nerection\nenteric\nemit\nelegance\nedema\nduster\nduplication\ndriftwood\ndraftee\ndormitory\ndoomed\ndolce\ndixieland\ndit\ndiscomfort\ndiorama\ndilatation\ndevastation\ndeparted\ndensely\ndemoiselle\ndelegated\ndeciding\ndashboard\ncured\ncryptic\ncrowding\ncracked\ncounterattack\ncornered\nconspirator\nconflicting\ncondominium\ncondiment\ncomsat\ncompute\ncompromised\ncompendium\ncloaca\nchops\nchiton\ncheckered\nchagrin\ncelluloid\ncavern\ncaveat\ncaries\ncarbine\ncapote\ncamper\ncamellia\nbyelorussian\nbuffet\nbrolly\nbrim\nbrazen\nbrainchild\nboyne\nbother\nbooklet\nboil\nblancmange\nberyllium\nbeefsteak\nbedrock\nbagatelle\nbaffle\naxiomatic\nauricular\natypical\nassemblage\nassamese\naspiration\naporia\napogee\nannotation\nammo\nakan\naddendum\nadad\naccusative\naccountancy\naccommodate\nabsorbent\nzygomatic\nzither\nyellowthroat\nwraith\nworkhouse\nwallop\nviability\nversa\nvermicelli\nverify\nvantage\nurogenital\nuncanny\nubiquitous\ntwitter\ntractable\ntortured\ntoreador\ntomahawk\ntithe\ntilting\ntideway\ntetrahedron\ntestimonial\ntelstar\ntellurium\ntedder\ntectonics\ntaint\nsymmetrical\nsymbiotic\nswash\nswallowed\nsupervising\nsuperposition\nstubborn\nstrut\nstride\nstrengthen\nstreamlined\nstorefront\nstepfather\nstamped\nsplenic\nsplendid\nspillway\nspectrometer\nsouthward\nsniffing\nsmithy\nsludge\nsif\nshorthorn\nshocked\nservo\nseparatism\nseneschal\nselectivity\nscribe\nscrapping\nscorched\nscandium\nscandalous\nsanitizer\nsanitarium\nrusk\nroam\nriff\nrevive\nrestatement\nregenerative\nreflexive\nreduplication\nrecollection\nreclaiming\nrecklessness\nreadily\nreact\nrattail\nrapier\nranching\nrampant\npylon\npuberty\nprunes\nprotease\nproprietor\nproblematic\nprintmaking\npresumed\nprat\npotency\npooling\npompano\npolyglot\npolaroid\npolarized\npoitiers\nphonemes\nperceptual\npentecostalism\npederasty\npanties\nobvious\noblate\nneurologist\nmorn\nmilitaire\nmidge\nmetrology\nmeridional\nmerciless\nmercersburg\nmedicaid\nmedalist\nmastered\nmadding\nluxurious\nlumen\nlitmus\nlimp\nliberator\nlandlocked\nknez\nkinesiology\njeu\njasmin\nirreligion\nintravenous\ninterrogative\nintentionally\nintegrate\ninhibitory\ninfinitive\nimportation\nillustrate\nhydrogenation\nhumain\nhorus\nhomeward\nhighline\nhegemony\nhaulage\nharmonics\nhardened\nhanky\nhallelujah\nhacienda\nguarding\ngranular\ngrandstand\ngoof\ngoodness\ngimmick\ngills\ngd\ngangland\nfuss\nfreighter\nfowl\nforesight\nfeu\nfertile\nfastener\nfaraway\nfantail\nexploit\nexistential\nexcommunication\nexcise\neuphonium\netat\nerr\nepithet\nenthusiast\nenlightened\nenjoining\nendeavor\nencapsulation\nembarrassment\nelysium\nelysian\nellipsoidal\nehf\ndutchman\ndull\ndug\ndresses\ndormouse\ndiversified\ndire\ndinka\ndignity\ndifferentiate\ndiem\ndeviant\ndevaki\ndetainment\ndesirability\ndescend\nderive\ndepart\ndenotational\ndemonstrator\ndemonetization\ndelinquency\ndeformed\ndefended\ndanse\ndaggers\ncursive\ncraftsmanship\ncoy\ncourageous\ncorti\ncorrupted\ncontradiction\ncondorcet\nconcentrate\ncomputerized\ncompile\ncolloquium\ncohesion\nchoked\nchivalric\nchaotic\ncentrist\ncelebratory\ncaviar\ncatholicity\ncareless\ncamembert\ncaged\ncafeteria\nbulletproof\nbuildup\nbueno\nbrutus\nborrowing\nbooze\nbodied\nblotting\nblackness\nblackfish\nbigot\nbicolor\nbenzoate\nbeneficiary\nbeet\nbauxite\nbarter\nbarrack\nbake\nayurveda\nawning\nastrodome\nascendancy\narranging\nargumentation\narcane\napricot\nanytime\nangiosperm\nalight\nakinetic\nadvise\nabscess\nzr\nyb\nwesternmost\nvernal\nvaruna\nutterance\nuto\nusurper\nupwards\nunpredictable\nundying\ntwitch\ntumbling\ntufted\ntriste\ntriode\ntrembling\ntrapezoid\ntrailing\ntelly\ntaffy\ntabular\nsworn\nsucceed\nsubcutaneous\nstruggling\nstationery\nspeciality\nspastic\nspank\nsorrel\nsoluble\nsoldering\nsolan\nsocialite\nsmiles\nsmashed\nskipped\nsilencer\nshuffleboard\nshuck\nshrunk\nshorthand\nshank\nseto\nsauna\nsatisfied\nsailboat\nrumba\nrowdy\nrounding\nrotator\nriser\nridged\nreverberation\nrevamp\nretribution\nretaining\nrespectful\nrepresentational\nrender\nremovable\nrejecting\nrealize\npyrenees\nproliferation\nproletarian\nproceed\nprobes\npredictable\npraxis\npounder\npouched\nposh\nponder\npolyhedral\nplowman\npivotal\npitfall\npickerel\nphotic\npersimmon\npeppercorn\npeavey\npatio\npassant\nparchment\noverturned\novercoming\noutcasts\nossian\norbiting\nopaque\noneness\nobsessive\nnurture\nnoblewoman\nnkvd\nnegus\nmultiply\nmop\nmoonstone\nmonocled\nmolybdenum\nmetallurgist\nmasculinity\nmarigold\nmanzanita\nmadrigal\nmacular\nmachinist\nluchon\nleftover\nkwa\nkeg\nkaid\njointed\njawbreaker\ninterlinking\nintergalactic\ninsufficient\ninnovate\ninform\nimmature\nicicle\nhypnotic\nhustings\nhuckleberry\nhouseholder\nhorticulturist\nhorseback\nhorrible\nhobo\nhob\nhippy\nhike\nhemp\nhegel\nhazing\nhayfield\nhaunt\nharlot\nhandmade\ngrappler\ngourd\ngist\ngilead\ngalleon\ngadfly\nfum\nfrightening\nfreaky\nforehead\nforage\nfolio\nflange\nflair\nfittings\nfestive\nferryman\nferret\nfarther\nexpiration\nexistentialism\nescrow\nepigraphy\nephemeral\nenergetic\necstatic\neconomizer\neconomically\neconometrics\nearthly\ndurable\ndurability\nduckling\ndrowsy\ndrove\ndowry\ndominate\ndoble\ndisjoint\ndisinfection\ndesirable\ndesignate\ndelusion\ndeclaring\ndamper\nculling\ncrystallization\ncried\ncrate\ncovey\ncopula\nconverge\nconstriction\nconfounding\nconformation\nconcordance\ncolossal\ncluniac\nclarity\ncinder\nchimaera\nchalice\nchaining\ncarling\ncamber\ncaliph\ncadeau\nbusboy\nbowing\nborer\nborderline\nbobtail\nbiomedicine\nbelsen\nbeena\nbeano\nauk\nattendants\natrial\nassuming\napostrophe\nanticipatory\nantic\nannihilator\nanimosity\nanguish\namid\nambling\nalms\nalise\nalibi\nager\nagape\naffection\nadditionally\nactivating\nacidosis\nabused\nyelp\nworkings\nwording\nwomb\nwitty\nwatering\nwalled\nwalkabout\nvive\nvitreous\nvitality\nvesicle\nvagueness\nupi\nunverified\nunsustainable\nunlikely\nunjust\nunavailable\ntransponder\ntouching\ntogetherness\ntigress\ntheotokos\ntetrameter\ntapered\nsyncope\nsustainment\nsuspicions\nsucking\nsubscriber\nstripping\nstraps\nstrangler\nstature\nstalwart\nspore\nspearman\nsowing\nsortable\nsore\nsonics\nsomatic\nsoi\nsod\nsnowfall\nskirts\nshriek\nshard\nsensible\nseltzer\nsambo\nrubble\nromancing\nrisky\nribonuclease\nrheumatoid\nrewrite\nrevel\nreusable\nretrial\nresume\nrepellent\nrenown\nremoteness\nreminiscent\nreluctance\nreligiosity\nreceptive\nrecco\nravager\nranged\nragtime\nradiated\nquivira\nquiver\npusher\npurim\nprogressivism\nprecession\npotash\npostmaster\npolyvinyl\npneumoconiosis\npneumatics\nplaywriting\nplat\nplasmodium\npigments\nphilology\nphallus\npermeation\nperiodically\npendragon\npeloponnesian\npatchwork\nparapsychology\npairing\npacifist\npacification\noverturning\noverconfidence\noutcry\noutbound\nosmosis\northodontic\nornate\norderly\nopenness\nnorthbound\nnod\nnevertheless\nnereus\nneodymium\nnaturalized\nmylohyoid\nmuzzle\nmutt\nmush\nmodifying\nmetropolitanate\nmetronome\nmetalwork\nmercator\nmensch\nmatte\nmacho\nluger\nlollipop\nlocalism\nliquefaction\nliana\nleveling\nledge\nlass\nlapse\nkreis\njuiced\njailbreak\nintimidation\ninitiate\ninitialism\ninflorescence\ninfighting\ninfancy\nindifferentism\nindeed\nimpressionism\nimpostor\nimplication\nimpending\nignorance\nhypothesized\nhoe\nhod\nhoarse\nhibernation\nheaviside\nhearted\nhawking\nhandgun\nhallowed\ngules\ngrist\ngraceful\ngonadal\ngnomic\nglorification\ngiver\ngish\ngibbon\ngermination\ngeorgette\ngently\ngalahad\nfractured\nforeword\nforay\nfleeing\nflee\nfixedness\nfinesse\nfavorable\nfanfare\nfalsely\nextortion\nexamine\nevaporation\nevanescence\nequivalently\nentourage\nentanglement\nenchantress\nelectromechanical\nelapsed\negalitarianism\neffendi\nearthbound\ndynamically\nduper\ndryer\ndribbling\ndrawback\ndowdy\ndonjon\ndissipation\ndissection\ndiscernment\ndinky\ndingdong\ndifferently\ndermal\ndemarcation\ndeliberately\ndecor\ndandelion\ndamping\ndaemon\ncumulus\ncrispy\ncreeper\ncpa\ncowling\ncountermeasure\ncooker\ncoo\nconurbation\ncontempt\nconsulship\ncomrade\ncolleague\ncockle\ncob\nclueless\nclever\ncitron\ncircumnavigation\ncheater\ncerebrospinal\ncensored\ncaudal\ncataract\ncasement\ncapping\ncandlelight\nbureaucracy\nbumble\nbren\nborate\nbluecoat\nblubber\nblacklist\nbitten\nbisexuality\nbifrost\nbelli\nbeige\nbehave\nbaryon\nbackgammon\nauntie\naspirant\narytenoid\narchivist\napprenticeship\nannus\nannulus\nanhydride\naneurysm\nallegretto\nadministering\nadapt\naccents\nabsorbing\naberration\nzipper\nzillion\nxanadu\nwrestle\nwiretapping\nwesterly\nweaker\nwaterborne\nwares\nwallet\nwaits\nwaffle\nvirago\nveal\nunwritten\nunregistered\nunintended\nundefeated\nunbelievable\numbilicus\ntypesetting\ntulu\ntrefoil\ntreacle\ntolerant\nthymus\nthunderbolt\nthirsty\ntetra\ntesticles\nterminating\ntechnologist\ntantalus\nswirl\nsupplicant\nsumerian\nsuitcase\nsuggestion\nsubtribe\nsubconscious\nstrega\nstreaky\nstimulate\nstandpoint\nsprung\nspoof\nspokesman\nspoiled\nspinner\nsparkle\nsmallpox\nsluice\nslowpoke\nskeptical\nsixpence\nsimian\nsilt\nsigmoid\nsieve\nshuffling\nsheepskin\nsexism\nserous\nsemiotics\nsecretory\nscoreboard\nschule\nscarred\nsancerre\nsailplane\nsacramental\nroyalties\nrotunda\nropeway\nroasted\nrigged\nridden\nresolving\nrealized\nrazorback\nravage\nramage\nrackets\nquince\nquadrangular\npvc\npunter\nprospector\npretend\npoundage\npoulsen\nposterity\nposed\npolymorphous\npodium\npleading\nplaintiff\nplacard\npitot\npiggy\npharynx\npersonally\npersonae\nparvati\nparing\nparenthood\npalfrey\novoid\noverseer\noutpatient\norgasm\noration\noperandi\nnullah\nnth\nnodal\nnighttime\nnerd\nmurillo\nmoorland\nmonism\nmisfit\nminimize\nmilanese\nmien\nmews\nmetamorphic\nmellitus\nmell\nmedic\nmeaningful\nmaori\nlyre\nlovejoy\nlongue\nlocating\nliquidator\nlimelight\nlibrettist\nlem\nlaterally\nlanthanum\nlancer\nlaminated\nlagan\nkodagu\njanitor\njailed\ninvest\ninvert\ninterdenominational\nintelsat\ninfinitely\ninconsistency\nincitement\nimprecise\nimpetus\nhypothalamus\nhypostasis\nhovercraft\nhopeful\nhaverhill\nhating\nhanukkah\ngramophone\ngnat\nglossopharyngeal\nglial\ngestalt\ngarret\ngaol\ngangrene\ngamecock\ngamba\nfragrant\nfou\nflettner\nfibered\nfaulty\nethnomusicologist\nescalator\neruptive\neppes\nentirety\nentertain\nenslaved\nencouragement\nelation\negghead\neffector\neducating\nechelon\neccentric\nduress\ndrover\ndoses\ndormer\ndonnybrook\ndisparate\ndisenchantment\ndevotions\ndestroying\nderogatory\ndeduction\ndeclarative\ndarn\ncruciate\ncrossbow\ncroquet\ncronk\ncotta\ncorset\ncorduroy\ncoon\nconvergent\ncontours\nconsequently\nconsequential\nconductivity\ncommoners\nclemency\ncic\ncassowary\ncarefully\ncarefree\ncaprice\ncaccia\nbureaucrat\nbrigandage\nbridegroom\nbreezy\nbrae\nbookseller\nbonuses\nbombard\nblond\nbastille\nbasset\nbagel\nbabi\nautograph\naudiophile\naudacious\narguing\napron\nanus\nanthropomorphic\nanole\nangora\nanecdote\namoroso\namharic\nageing\nadmissible\nadminister\naccuser\nabiotic\naberrant\nyonder\nwretched\nwrecker\nwitched\nwindmills\nwily\nwhitestone\nweld\nwasteland\nwasher\nwarty\nwakeful\nvulgar\nvoyageur\nvizard\nvigorous\nvideotape\nvermin\nveritable\nvanished\nvandal\nusable\nurethral\nunorthodox\nunofficially\nunlicensed\nuniversality\nunicameral\nuncontrolled\ntuberosity\ntuatara\ntrow\ntrimming\ntransgression\ntope\ntoleration\ntarragona\ntankard\ntame\nsycamore\nsupplying\nsuckling\nsubaltern\nstrides\nstradivari\nstoic\nstipe\nstaying\nstandstill\nstairway\nstaggered\nspoil\nspines\nspiel\nspasm\nsorption\nsoit\nsnapping\nslipping\nsling\nsilky\nshines\nsharpie\nshapeshifter\nserene\nsepia\nsenseless\nsectional\nseaway\nscaffold\nsavant\nsarge\nsalmagundi\nsafeguarding\nrube\nroadblock\nriper\nringer\nrind\nrijksmuseum\nrhizome\nresurrected\nrestraints\nremission\nrelapse\nreceivership\nreceipts\nrecast\nratified\nraison\nradiology\nquestionnaire\npulses\npronominal\nprickly\nprevailing\npremolar\nprawn\npolygonal\npolygamy\nplumber\nphotochemical\nphoneme\npert\npershing\npensioners\npenetrating\npend\npeaking\npayable\npatella\nparabola\npantry\npalisade\npalate\npagano\npadding\noversee\noutermost\nostrich\nostensibly\nopenly\nokay\nnobby\nnarcissistic\nmutually\nmucous\nmonarchism\nmieux\nmezzanine\nmeson\nmelamed\nmaturation\nmarduk\nmanhood\nmalevolent\nmailman\nlowered\nlogs\nlocket\nlocker\nlimoges\nlicensee\nletterer\nlend\nleer\nknees\nknapsack\nkarakul\njungian\njerk\njealous\njawed\nirrational\nintrauterine\nintoxication\ninterlock\ninterlingua\nintellect\ninspiring\ninformative\ninfantilism\nindecency\ninaccurate\nimpersonal\nimmortality\nimmaturity\nidentifiable\nhydroelectricity\nhummer\nhoodwinked\nhone\nhomunculus\nhomemade\nhogging\nhew\nheidegger\nhater\nharmonium\ngust\ngrot\ngreenbrier\ngondola\ngodspeed\ngodhead\ngermane\nganesha\nfulfilled\nfriary\nfreezer\nfoundational\nforebrain\nforager\nflooring\nfini\nfey\nfeathered\nfathead\neyebrow\nexpressionism\nexoneration\nexcretion\netang\nentitlement\nenosis\nengraved\nencyclopedic\nencroachment\nencompass\neames\ndwarfism\nduple\ndubious\ndrunkard\ndriller\ndraining\ndoorbell\ndiscounted\ndiscolor\ndexterity\ndeserve\ndemerit\ndeemster\ndeceit\ndarkened\ncuring\ncrawler\ncps\ncourtesan\ncourser\ncottonseed\nconvey\nconcubine\ncollectivization\ncoincidence\nclockmaker\ncleves\nclaws\nchutney\nchisel\nchiesa\ncentralization\ncavalcade\ncarbohydrate\ncantus\ncampsite\ncampground\ncableway\nbutea\nbushman\nburnout\nbrooding\nbreeches\nbrasserie\nbouncing\nbihari\nbibliopegy\nberth\nbelladonna\nbeekeeping\nbeechwood\nbackfire\nbacillus\navis\nattracting\nattenuation\nassume\nassessed\nartisan\narsenite\naroma\nareal\napplause\napologist\nantietam\nail\naerosol\nactualization\nabsolution\nabrupt\naardvark\nytterbium\nwrought\nwhirl\nweeping\nwafer\nvoluntarily\nvisuals\nvenerable\nusn\nunsaturated\nunlucky\nunlock\ntypewriter\ntutti\ntussler\nturntable\ntunneling\ntrot\ntreadmill\ntreacherous\ntraditionalism\ntotality\nthrifty\nthorax\nthinner\ntheoretician\nthalassemia\ntetragonal\ntektite\ntaunting\ntalus\nsync\nswipe\nsuzerainty\nsubmersion\nstylist\nstrum\nstocking\nstimulating\nsteely\nstarvation\nstalinist\nspoonful\nsorcery\nsongbook\nsock\nsoapy\nsneeze\nsnatcher\nsmoker\nslicing\nskateboard\nsideband\nsibyl\nshroud\nsheikhdom\nshaver\nsevenfold\nseparatist\nsensibility\nsegmental\nscramble\nsciatic\nscaly\nsaumur\nsassy\nsartor\nsaltation\nsalinity\nsalami\nsacrum\nrung\nrudra\nroommate\nrid\nreuters\nretrograde\nretardant\nrestricting\nresponsive\nresearching\nrefund\nredneck\nquestioned\nquack\npyrolysis\npursuing\npsychogenic\nproviso\npronounce\nprolegomena\nprogenitor\nprocrustes\nproconsul\nprivates\npressman\npreposition\npoulet\npolydipsia\nphrenology\npetrochemical\npersuaded\nperjury\nperiodicity\nperceive\npatera\npampa\noutage\norganometallic\noptimism\noccultism\nnudie\nnonconformist\nnephritis\nnein\nnco\nmutilation\nmuskrat\nmow\nmorgue\nmoolah\nmignon\nmentally\nmedico\nmedica\nmarrying\nmapper\nmandore\nmage\nlull\nlubrication\nlowlife\nlowering\nlonging\nlogician\nlimbu\nlifter\nlice\nleaved\nlarynx\nlapis\nlangur\nkuki\nkriss\nkilowatt\nkeener\njour\njewelers\nirrelevant\nintrigue\ninterpol\ninositol\ninflectional\ninfestation\nincubation\nincisive\nidealized\nicehouse\nhypochlorite\nhyacinth\nhopi\nholler\nholdfast\nhives\nhectare\nheadstock\nhalogen\nguardsman\ngrower\ngrisette\ngrin\ngrief\ngravedigger\ngoldwasser\ngoer\ngluteus\ngaudens\ngauche\ngarments\ngalvanic\nfutility\nfurthermore\nfurlong\nfunctionalism\nftc\nfrisky\nfretting\nfrege\nfoursquare\nforwarder\nfortran\nfortitude\nforgery\nforeclosure\nfluctuation\nfloss\nflammable\nfireproofing\nfirepower\nfireless\nfides\nfiddling\nfata\nfacies\neyelid\nexposing\nexocrine\nexistent\neuphemism\nermine\nergo\nerect\nepileptic\nencompassed\nemissary\nemf\nembalming\negress\neggshell\neclecticism\necclesiastic\neastward\nearshot\ndomus\ndobbin\ndisqualification\ndisputation\ndispensary\ndibber\ndesecration\ndeprived\ndelirious\ndecagonal\ndeadwood\ndazed\ndatum\ncygnet\ncwt\ncrt\ncrossbreed\ncrossbones\ncrimp\ncraving\ncourting\ncountertenor\ncottontail\ncotillion\ncote\ncorliss\ncontinually\ncomparatively\ncomparability\ncitrate\nchroma\nchlorine\nchipper\ncheque\ncharacterize\nchambermaid\ncentric\ncassia\ncarbonated\ncapper\ncaper\ncannonball\ncandidature\ncampfire\ncampaniform\ncacique\nbuttocks\nbuttered\nbusinesswoman\nburlesque\nbundled\nbumblebee\nbrindle\nbowlegs\nbonk\nblender\nblackbeard\nbisulfate\nbiota\nbiceps\nberet\nbarring\nbanishment\nbalm\nbalinese\navocado\nassured\nassize\narchetype\narboreal\napprehension\napplicant\napologies\napocrypha\nanzio\nanechoic\nanathema\naltogether\nallotment\nallhallows\nagincourt\nageless\naerobic\nadvised\nadapting\nacidic\nzephaniah\nyoke\nwreckage\nwordplay\nwobbler\nwitching\nwicker\nweatherman\nwatchful\nwart\nvolley\nviscous\nviolette\nveterinarian\nverifiable\nverge\nverdigris\nusurpation\nuplift\nuphill\nunveiled\nuniquely\nundergo\ntypo\ntweeter\nturbojet\ntrousseau\ntribulations\ntremors\ntransept\ntransceiver\ntrailblazer\ntog\ntipped\ntinkle\ntightly\nticking\nthunderball\nthraco\nthinning\ntherapist\nterrapin\nteapot\ntasty\ntammany\nswindle\nsusceptible\nsupranational\nsupernumerary\nsuck\nsubtraction\nsubsonic\nsubjunctive\nstewardship\nstatistically\nspinney\nspasms\nsouled\nsorbian\nsnips\nsniping\nsmoked\nsmelly\nslumberland\nslugger\nslippage\nslapstick\nsimba\nsigh\nsib\nshading\nseptuagint\nseptimal\nscud\nscriptural\nscreened\nscratches\nscraper\nscram\nschoolmaster\nschoolgirl\nscapegoat\nscalp\nsayings\nsaturnia\nsatirist\nsandspit\nsanctioning\nsalient\nsalesman\nsalers\nrubella\nrotate\nroost\nrookery\nroofing\nrhinitis\nrevenant\nretrospect\nretracted\nresonant\nreminiscence\nrelieve\nregulars\nregularization\nreformist\nrecognizable\nrecitation\nraisin\nrabble\nquenching\nquake\nputty\npurusha\npsaltery\nprudence\nproportionality\npropel\npris\nprinceps\nprimum\nprimacy\npriced\npretzel\npredetermined\npositivist\npolyunsaturated\npolecat\nplotting\nplenary\nplaner\npineal\npiled\nphysiography\nphotovoltaic\nphoebus\npersephone\npermissive\npermissible\npenile\npathologist\nparticiple\nparatyphoid\nparanoia\npansy\npaleontological\npaints\noverlook\noutrun\noutlined\nosmium\norangutan\nopener\noligocene\nofficeholder\nodysseus\nnones\nnominally\nnihilist\nnewscaster\nnetherworld\nnegatively\nnapkin\nnankeen\nmyocardial\nmyeloma\nmunda\nmlle\nmistreatment\nmisinformation\nminamata\nmilieu\nmaxilla\nmasse\nlupine\nlsm\nlodger\nlioness\nliberated\nlexicography\nleverage\nlevator\nleftovers\nlangmuir\nkookaburra\nkonkani\nkitsch\nkingfish\nkea\njohnnycake\njealousy\nirritant\nionizing\ninvalidity\nintrogression\ninheritors\ninexpensive\ninductance\ninactivity\nimposter\nhydrangea\nhumanitarianism\nhomelessness\nheteronuclear\nhelical\nharrier\nhanger\nhaiku\nhagiography\ngyre\ngunman\nguerilla\nguardianship\ngrinning\ngreatness\ngravelly\ngrandchildren\ngournay\ngordian\ngomorrah\ngirlie\nghat\ngertrudis\ngeochemistry\ngenitive\ngenealogist\nfusing\nfulfill\nfucus\nfrisk\nfootloose\nfondle\nfluorine\nflawed\nfistful\nfenland\nfane\nfandango\neyeball\nextravasation\nexpansive\nexciting\nexceeding\nesophagitis\nepoxy\neponymy\nendothelium\nender\nendangerment\nencode\nencephalomyelitis\nempathy\nelaboration\negret\neerie\neducationist\neducate\nedelweiss\ndyadic\ndurance\ndrip\ndrawbridge\ndownstairs\ndonga\ndisjunctive\ndisassembly\ndiaphragm\ndialectics\ndespised\ndesiring\ndeserted\ndepict\ndemonstrating\ndebtor\ndachshund\ncuttings\ncutis\ncustodial\ncrushed\ncrescendo\ncreosote\ncowherd\ncoupon\ncorrie\ncorrespond\ncoronach\ncontradictory\ncontemplation\nconic\nconductive\nconcurrently\nconcatenation\ncomrades\ncompleat\ncoalesce\nclank\ncinerama\nchirography\nchink\ncharybdis\ncharisma\ncerebellum\nceded\ncartilages\ncaricature\ncancel\ncameraman\ncamelback\ncaddie\nbrownie\nbrokerage\nbroadside\nbreathless\nbrambly\nbraided\nbrahman\nbrackish\nbombsight\nbocage\nblessings\nblemish\nbleacher\nblackthorn\nblackened\nbioluminescence\nbiodegradation\nbice\nbewitched\nbelted\nbellows\nbeaten\nbathhouse\nbateau\nbaptistery\nbanked\nbanister\nballade\nbailie\nawaiting\navid\naviary\nauroral\nattestation\nasphalt\nappropriation\napparition\nannalistic\nangra\nammonite\naides\nagriculturist\nagitator\nagee\naffirmed\nadmiration\nacne\nachromatic\nabridged\nabate\nwoogie\nwindshield\nwhaler\nween\nweakening\nwavy\nwasting\nwane\nwalrus\nwalling\nvitriol\nvim\nvanish\nurination\nunspeakable\nungulate\nunfaithful\nunconditional\nunchanged\nunbalanced\nunarmed\numlaut\ntwig\nturnip\ntupi\ntriceratops\ntread\ntrampled\ntouraine\ntoddy\ntoaster\nthrilling\nthesaurus\ntessellation\ntantalum\ntangible\ntaker\ntableland\nsynergistic\nsustaining\nsustain\nsundial\nsuited\nsubsequence\nstylus\nstudded\nstealer\nstater\nstab\nspoons\nspined\nspectacles\nspecialize\nspasmodic\nsoybean\nsolipsism\nsnide\nsmudge\nsmoothing\nskates\nsimulate\nseptal\nseductive\nseasoned\nscrambled\nscion\nscd\nsatyr\nsamarium\nsafely\nrorschach\nroaming\nrichness\nrevs\nreversion\nretroactive\nreticulum\nretainers\nresolvent\nrepudiation\nrepayment\nregards\nreentry\nredeeming\nreconstitution\nquench\nquadrennial\npyrotechnics\npursuant\nprotuberance\nprostatectomy\nprofound\nprisms\nprismatic\npreheater\npotens\npositron\nposes\nporch\nplywood\nplow\nplotter\nplatter\npiles\nphylum\nphrenic\nphobia\nphenol\nperiphery\npenning\npatrimony\npallet\npainfully\noverlord\noverhang\nouts\noutlander\noutflow\noutdated\nomnium\nocclusive\nobsidian\nobscurity\nnutmeg\nnonviolent\nnervosa\nnaris\nnarc\nmultiplied\nmotorboat\nmortals\nmonograph\nmonitorial\nmonad\nmolasses\nmodulated\nmnemonic\nmire\nministering\nmidterm\nmetastasis\nmesozoic\nmerino\nmegacolon\nmaximize\nlutetium\nluster\nlusatian\nloki\nligurian\nliege\nlepton\nlecher\nlaminar\nlaity\nladino\nlactation\nkloof\nkiosk\nkidder\nkeynote\njulienne\njudicature\njitney\njiffy\ninterplanetary\ninternationalism\nintermediary\ninsist\ninquisitor\ninlay\ningress\ninfarction\nindividualism\nindicted\nindeterminate\nindentured\nincest\nimpurities\nimplantation\nimpervious\nignite\nhomeopathy\nhermaphroditism\nherding\nherbarium\nhemlock\nheiress\nhardcase\nhangover\nhanged\nhandshake\ngroundwork\ngrassy\ngrained\ngloaming\nglaucoma\ngeodesy\nfundamentalist\nfulmar\nformulary\nforging\nforger\nforfeited\nfoliation\nfoggy\nflyleaf\nfling\nflattery\nfirehouse\nfigurehead\nferment\nfelid\nfederalization\nfarrow\nfaerie\nfactitious\nexceptionally\nepigenetic\nentente\nenquirer\nembark\nelectrosurgery\neisteddfod\nduodenum\ndownside\ndovetail\ndosing\ndolmen\ndiscrepancy\ndiscarded\ndirectorship\ndingbat\ndichotomy\ndeductions\ndebug\ndanica\ndamselfly\ncyclopedia\ncumulate\ncrustacean\ncreepy\ncrackerjack\ncovenanter\ncortese\ncornea\ncordite\ncorbel\nconstituting\ncongruent\nconductance\ncompassion\ncompaction\ncolloid\ncollineation\ncoalescent\nclos\nclaret\nclapping\nclabber\nchum\nchronicling\ncheckout\ncensure\ncarton\ncarpe\ncardamom\ncapitulation\ncamphor\nbx\nbunt\nbruit\nbreech\nbreastplate\nboxcar\nbottomed\nboozer\nboondocks\nbodkin\nbillet\nbicentenary\nbavin\nbathing\nbarricades\nauthoritarianism\nauthoritarian\naurelia\nauger\nattain\natelier\nastigmatism\nassertion\nasleep\narsis\nantidepressant\nannulment\nangelus\nanarcho\nananias\namicus\naerobics\nadjudicator\naccompany\nabnormally\nzilch\nyolk\nyep\nyellowtail\nyelling\nwraps\nwombat\nwishful\nwindfall\nwigwam\nwidgeon\nwellspring\nweakly\nwatermark\nvomit\nviolating\nvicarage\nviable\nurus\nuntouchable\nunprecedented\nunmarried\nuniformly\nundersecretary\ntwinned\ntuber\ntriumphant\ntrine\ntriggerfish\ntrappist\ntranslucent\ntransect\ntranquil\ntramping\ntraditionalist\ntouchstone\ntorticollis\ntoponymic\ntongs\ntightrope\ntemper\ntelepathic\ntechnic\ntautology\ntartrate\ntakelma\ntacit\ntablature\nsystematically\nsyndicalist\nswordfish\nswig\nswept\nsweeping\nsweater\nsuspensory\nsufferer\nsubstructure\nsubstituted\nstylistics\nsteppes\nstanza\nspoonbill\nspiritualist\nspiffy\nsparsely\nsounders\nsouci\nsolenoid\nsnows\nsniff\nsmelting\nslum\nslit\nslipknot\nslingshot\nslider\nsledgehammer\nslaying\nskirt\nsignify\nsienna\nshrove\nshaper\nsextant\nselfish\nscrooge\nscatter\nscapula\nsash\nsanguine\nsanctity\nsancta\nsalicylate\nrumored\nrotter\nrobber\nrioting\nringside\nrigor\nrepairing\nreliant\nregistering\nrefutation\nrecital\nreamer\nrapporteur\npurportedly\npummel\npuffer\nprovisioning\npropellers\nprepaid\npremonition\npowerboat\npots\nporcine\npoke\nplump\nplumbago\npious\npiling\nphonemic\npetrology\npersuader\nperron\npericarditis\npatriarchal\npasserine\nparenthetical\nparaphrenia\npaparazzi\npaddling\npacer\noxbow\novert\nosco\norangery\nont\nogo\noblong\nnorthward\nnoire\nnetting\nneoclassicism\nnebo\nmusicianship\nmurdering\nmuntz\nmorta\nmorale\nmonophony\nmoderated\nmitral\nministership\nminimization\nmercurial\nmentioning\nmedlar\nmedius\nmediate\nmayorship\nmateria\nmasthead\nmarsupial\nmarshmallow\nmarooned\nmandingo\nmacaroni\nlusty\nluminosity\nlooker\nloin\nlingo\nliked\nlieu\nlichen\nliable\nlettuce\nlegume\nlapin\nlait\nladybug\nlabiodental\nkiri\nkidnap\nkeynesian\nkerb\njunkyard\nitty\nitchy\nintensified\ninsipidus\ninnuendo\ninning\ninitio\ninformer\nimpressive\nimperialist\nimmaterial\nhyaline\nhussar\nhousewife\nhospice\nhoped\nhinder\nherod\nheliotrope\nhedonism\nhedging\nharden\ngrunt\ngrasp\ngranule\ngranny\ngnash\ngermanium\ngauleiter\ngallbladder\ngales\nfundamentalism\nfrogman\nfrag\nflocculus\nflirt\nflank\nflamethrower\nflamenco\nfireplace\nfiduciary\nfez\nfetch\nfemininity\nfanaticism\nfacilitating\neyeshield\nextravaganza\nexternally\nextensible\nexerted\nevangelization\neuphoric\neulogy\nerector\nenmity\nenchant\nelectrocutioner\nelan\nejector\nejective\neggplant\neeyore\ndweller\ndunce\nducky\ndualism\ndrown\ndreaded\ndraughtsman\ndramatis\ndragnet\ndogmatic\ndistension\ndistaff\ndisplace\ndisobedience\ndismiss\ndisgrace\ndiscounting\ndisbelief\ndiadem\ndetritus\ndetour\ndeterrent\ndeteriorating\ndescender\ndeluge\ndefiniteness\ndebutante\ndamsel\ndamocles\ndamaging\ndagoba\ndaffodil\ncymbals\ncyan\ncushion\ncultured\nculminating\ncubes\ncringle\ncrick\ncrema\ncrave\ncosting\ncorregidor\ncopyist\ncoot\ncoolant\nconvenient\nconvected\nconjoint\nconfetti\nconcentric\nconcealment\ncompactness\ncodon\nclutter\nclump\nclouded\nchubby\nchrysostom\nchrysanthemum\nchoses\nchomp\nchiffon\ncharacterizing\nchandelier\nceliac\ncatchpole\ncask\nburglary\nburglar\nbroth\nbrittle\nbonne\nbohr\nbogle\nblotto\nblackmail\nbellona\nbellboy\nbatter\nbathysphere\nbaguio\nbagpipe\nbabbler\nawaken\nattainment\nastrobiology\nasserted\nassassinate\nascendant\narian\napologetics\naphid\nantithesis\nantenatal\nannuities\nanimate\namoral\nallure\nactivator\nacknowledgments\nacanthus\nabusive\nabridgement\nabrasion\nabominable\nwoolen\nwoof\nweal\nwatsonian\nwarlock\nwaddy\nvole\nvivendi\nvivace\nventuri\nvastness\nvapid\nvalgus\nunfamiliar\nundertake\nunderpass\nunderdevelopment\nunconquered\nultimatum\nuke\ntuxedo\ntrunks\ntrucker\ntrna\ntrews\ntress\ntrente\ntopsail\ntidings\nthrones\nthriving\ntheoretically\ntheatricals\ntetralogy\ntelegraphic\ntehuantepec\ntegmentum\ntearing\ntannery\ntalkie\ntailored\nsyncretic\nsymptomatic\nsurcharge\nsubalpine\nsturdy\nstumble\nstp\nstockman\nstirrup\nstinking\nstink\nstimulant\nstatehouse\nstall\nspontaneously\nsplint\nsparing\nsoot\nsoke\nsocle\nsob\nskylight\nskips\nskeptic\nskald\nsitar\nsimultaneity\nsigner\nsidhe\nshillings\nsheen\nsharer\nshaded\nsequentially\nsenhora\nsellars\nseldom\nscrim\nschoolboy\nsatisfying\nsalted\nsacrilege\nrustication\nrunabout\nrumination\nrubdown\nrove\nromany\nrhesus\nrespects\nresign\nrescued\nremover\nremonstrance\nrelatedness\nredhead\nredeye\nredbird\nrearing\nradiological\nquizzing\nquestionable\nqueries\nputative\npushcart\npsychotherapist\npsychopathology\npseudotuberculosis\nprune\nprivateering\nprimavera\nprecocious\npraised\npox\npowerless\nposted\npossessor\npontoon\nponies\npolymorphic\npocus\nplumper\npitted\npiste\npinscher\npilsner\npiloting\npica\nphytochemistry\nphysicalism\nperky\nperks\nperistyle\nperilla\nperfume\nperforation\npensionary\npenned\npedestal\npeart\npave\npatterning\nparasol\npanky\npacemaker\noutlawed\nosiris\norpington\noleo\nobviative\nobstructive\nnock\nnoblesse\nnicene\nnaturalness\nmournful\nmots\nmorph\nmonotype\nmonotheism\nmonetization\nmolded\nmoderately\nmisunderstood\nmismanagement\nminiver\nmidas\nmeteors\nmechanistic\nmaul\nmasted\nmasking\nmarten\nmalayo\nmadly\nmachismo\nlunge\nlotion\nlorica\nlope\nlolly\nlobule\nlithic\nlinga\nlief\nletting\nleaning\nlapsus\nlammas\nlaconic\nkingmaker\nkeel\njuste\njungles\njoyous\njoinder\njackboot\njackass\nitai\ninvisibility\nintrepid\nintracardiac\nintimacy\ninterpret\nintegument\ninstinctive\ninglenook\ninfectivity\ninelastic\ninclined\nincandescent\nimpresario\nimpersonator\nimperishable\nimmunotherapy\nimmense\nilliteracy\nhumana\nhula\nhorsepower\nhootenanny\nhoming\nhohenlinden\nhocus\nhock\nhitchhiking\nhijack\nheterotopia\nhermaphrodite\nhellfire\nheightened\nheavier\nharmless\nhandspring\nhalves\nhalter\nhackamore\nhabitable\ngudgeon\nguar\ngreener\ngravely\ngorgon\ngooseberry\ngoober\ngoldfinch\ngodlike\ngoblet\nglaze\ngiraffe\ngenerous\ngeared\ngasket\ngainer\nfusible\nfrosted\nfractionation\nfortis\nforetold\nforename\nfore\nflexure\nflan\nfinely\nfeeble\nfashionable\nfarthest\nfarrago\nfarmland\nfaithfully\nfactoring\nextrapolation\nexternals\nexpropriation\nexporting\nexperimentally\nexperiential\nexercised\nexegesis\netymological\netna\nethane\netcher\nesteem\nephemera\nenforcer\nencrypted\nencirclement\nemulsion\nempyrean\neloquence\nellipse\nejection\neasterly\neastbound\ndwell\ndowntime\ndoubtful\ndossier\ndoric\ndoorman\ndominions\ndomicile\ndobro\ndivestment\ndialysis\ndialectal\ndesireless\ndeoxyribose\ndendritic\ndemanding\ndelinquent\ndeliberative\ndecoder\ndecipher\ndarwinism\ncrypto\ncresol\ncowgirl\ncountryman\ncountercurrent\ncouncilman\ncottonmouth\ncosy\ncornucopia\ncopyrighted\nconventual\nconsenting\nconfraternity\nconclave\ncompensatory\ncommemorated\ncoeli\ncivilized\nchurchman\nchunk\ncholesterol\nchlorophyll\nchinquapin\nchaplaincy\ncellophane\ncartwheel\ncardboard\ncanzone\ncandlemas\ncanard\ncadaver\ncabriolet\nbuttress\nbuttercup\nbung\nbulbous\nbreasts\nbranle\nbowled\nbookshelf\nboathouse\nblurred\nblunted\nbirr\nbiotin\nbilk\nbicorn\nbehemoth\nbaronial\nbarger\nbalder\nbadly\nbackdrop\nbabbitt\navifauna\naustere\natman\nassortment\nassessor\nassembling\nasphyxia\nasio\nashore\nasexual\nartificially\nartful\narousal\napse\napologetic\nanzus\nanubis\nantimicrobial\nanschluss\nangostura\nanesthetic\nandalusian\nancienne\nanatomic\nanalgesic\namoeba\nalkalosis\nalgarve\nalbeit\naffray\nadvising\nadoptive\nadenovirus\nactuator\nacoustical\nabortive\nzoophilia\nzest\nwot\nwort\nwildebeest\nwhiskered\nwed\nwcc\nwatchtower\nwail\nvivid\nvisage\nvibrating\nvested\nverified\nventer\nvarmint\nvagrant\nutilitarian\nuranus\nupheld\nunreliable\nunipart\nunfair\nunexpectedly\nunemployed\nunderweight\nunderhanded\nundecided\nuncut\ntyrolean\ntussle\ntuckahoe\ntuberculous\ntubby\ntrumpets\ntrill\ntrike\ntrice\ntrapper\ntransference\ntossing\ntopknot\ntipping\ntinting\ntheism\nteardrop\ntarsus\ntarnished\ntalos\ntailless\ntabulation\nsyphilis\nsymphysis\nsuperstructure\nsundry\nsumpter\nsuggesting\nsubstituent\nsubjected\nstubby\nstructuralism\nstriated\nstrangeness\nstraddling\nstorehouse\nstonecutter\nstirk\nstimulator\nstepsister\nsteinway\nstaghound\nsqueezing\nsqueezed\nspurious\nspousal\nsplashdown\nspectroscopic\nspecie\nsomnambulist\nsneak\nsmuggler\nsmoothness\nsleigh\nskinhead\nsimplify\nsiesta\nsidekick\nshortcut\nshedding\nshawl\nshader\nsere\nseabee\nscreech\nscherzo\nscatterbrain\nsasak\nsardinian\nsanctus\nsamadhi\nsaddleback\nrobbed\nribosomal\nrevoked\nretroactively\nrestructure\nrestrict\nrespecting\nrequesting\nrepulse\nrepressed\nrelying\nregularity\nregain\nrefraction\nreestablishment\nredwing\nrectilinear\nreconstructive\nreasonably\nragamuffin\nradicalization\nquilt\nqueenship\nquarrel\npushdown\npuissance\npsychoactive\npsittacine\nproximate\nprotestation\nprosecuting\nprohibitionism\nprobing\nprincesse\nprimeval\npresumptive\npowdered\npottage\nplotted\npleased\npique\npining\npicturesque\npicker\nphotostat\nphotolysis\npharos\npharisee\npetronel\npes\npermanence\nperching\npenfold\npemphigus\npeekaboo\npedophilia\npastures\npappy\npapillon\npaintbrush\nowning\nouzel\noutspoken\noutset\noutfitter\nossuary\nordeal\noptician\nophthalmia\nontogeny\nobjector\noatmeal\nnutty\nnutans\nnuncio\nnucleotide\nnovitiate\nnovial\nnotary\nnosebleed\nnodule\nneuritis\nneoplatonism\nnecromancer\nmystik\nmycology\nmvd\nmultiplying\nmottle\nmisfortune\nmillstream\nmidriff\nmfa\nmethionine\nmasturbation\nmassy\nmarksman\nmantilla\nmanchild\nmagnificat\nmadder\nlonghouse\nloess\nloach\nlimbic\nlikeness\nlicit\nleathernecks\nlactational\nlaced\nkismet\nket\nkeepsake\nkeening\nkaffir\njunco\njoule\njazzy\njacksonian\nisothermal\nionosphere\nintegrator\ninsurer\ninstall\ninseparable\ninfinitesimal\ninfest\ninferred\ninfantile\ninequitable\nindifference\ninattentive\nimpurity\nimpulsive\nimprobable\nimpersonation\nimpartial\nillusory\nicrc\nhydraulics\nhuck\nhooligan\nholistic\nhinged\nhideout\nheterosexual\nhenna\nhemispheres\nhearse\nhawkshaw\nhaul\nharvested\nhandmaid\nhairstyle\nhairs\nhairless\ngrotesque\ngoosey\ngoodwill\ngoldilocks\ngleaming\ngatling\nfuselage\nfrustration\nfruity\nfreshly\nformalized\nforgiving\nfodder\nfoal\nflattened\nflannel\nflagrant\nfieri\nfestschrift\nfenny\nfeller\nfebrile\nfeathering\nfeasible\nfanon\nfanged\nfactionalism\nfactional\nextractive\nexpiring\nexemplification\nevident\netiology\nethereal\nerratic\nepicurean\nendoplasm\nelastomer\ndumpy\ndumbbell\nduce\ndramatics\ndownturn\ndivorced\ndisuse\ndisturbing\ndisorganization\ndisjunct\ndiscontinuity\ndiminishing\ndetectable\ndestined\ndelicacy\ndeficient\ndeductive\ndarkling\ncyanine\ncubist\ncubicle\ncrucified\ncropper\ncrock\ncribbing\ncredible\ncrayfish\ncrass\ncrankcase\ncouleur\ncosmography\ncornel\ncorkscrew\ncordial\nconforming\nconformance\nconform\ncompurgation\ncomplicity\ncomplication\ncommunis\ncoir\ncoincide\ncoexistence\nclothier\nclavier\ncircumcision\nchurning\nchristened\nchock\nchiaroscuro\ncheeks\nchauvinist\nchauvin\nchalone\ncession\ncandlewick\ncahors\nbuckwheat\nbruise\nbristle\nbreakage\nbossy\nbodhisattva\nbloodsucker\nbloodbath\nbiogenesis\nbillabong\nbeluga\nbellow\naymara\naugur\nasphyxiation\nargosy\nappealing\nantler\nantagonism\nannum\nanacrusis\nampere\nambulatory\nambitious\nalphanumeric\nalluvial\nallele\naldermen\nalbinus\naffliction\nadmired\nacrobat\nache\nacademician\nabelard\nabaddon\nyummy\nyielding\nwreathed\nwondrous\nwok\nwindowpane\nwhimper\nwestbound\nwelcoming\nwaterproof\nwarmth\nwaiter\nwading\nvoce\nviolator\nviewfinder\nverifiability\nuroscopy\nuproar\nunpopular\nunpleasant\nunleash\nuninvited\nundiscovered\nuncensored\ntwirling\nturistas\ntuareg\ntriolet\ntrinomial\ntowhee\ntorment\ntopsy\ntoothlessness\ntooling\ntonnage\nthreshing\nthresher\ntentative\ntensile\ntelltale\ntelepathy\ntableware\nswoop\nswollen\nsurveyed\nsurrealism\nsurfactant\nsubmit\nstretcher\nstrath\nstockings\nstinger\nstilt\nstepmother\nstabile\nspud\nsportsmanship\nspiked\nspeck\nspearmint\nsparrer\nsommelier\nsobriety\nsnapshot\nslicker\nslaughterhouse\nshrouded\nshredded\nshowers\nshellac\nsharper\nshaking\nseptic\nseparator\nsentiments\nsentient\nsensitization\nseizing\nsegmenting\nseedling\nsedge\nsecretarial\nseclusion\nsculptured\nscrivener\nsclerosing\nscientifically\nsayer\nsaver\nsandglass\nsadistic\nroving\nrollback\nrighting\nridgeback\nribbed\nrhombus\nrhomboid\nrhinarium\nrheumatic\nreviving\nrevisionism\nreversing\nrevealing\nretriever\nretread\nrethinking\nresuscitate\nrespondent\nresplendent\nrerun\nreplicate\nreinvestment\nreformatory\nreduplicative\nrecapitulation\nrecalled\nream\nrationing\nrafter\nquietism\nquatrefoil\npulverized\npuli\npule\npublican\npterosaur\npsychodynamic\nprotozoan\nprolate\nprohibitory\nprofessorial\nprincipate\npreserver\npresentment\npreposterous\nprefab\npragmatism\npostilion\npossessing\npolemics\npoco\nplaymate\nplasmacytoma\nplaquette\nphrygian\nphonograph\nphilander\npeyote\npeptic\npentad\npeek\npayoff\npatter\npatriotism\npathogenic\nparticulars\nparanoid\nparang\nparamountcy\npanchen\npalpation\npagination\noverweight\noutright\noutgrowth\noffload\noctahedron\nobstetric\nobsolescence\nobscene\nnucleolar\nnorroy\nnonlinearity\nnoix\nnitroglycerin\nnewsreel\nnewest\nnetter\nnem\nnegotiator\nneglected\nneanderthal\nnausea\nnascent\nnaos\nnanna\nnaif\nmutton\nmullion\nmug\nmotivating\nmoron\nmoralistic\nmoonglow\nmonochromatic\nmockingbird\nmistakenly\nmilitarism\nmidgut\nmicrocosm\nmetaphorical\nmesial\nmerrythought\nmelodious\nmelanism\nmeiosis\nmedulla\nmea\nmastic\nmanure\nmannerist\nmannerism\nmannequin\nmanichaeism\nmanger\nmains\nluxuria\nlur\nlorelei\nlongbow\nloggia\nlinnaean\nlifeline\nlicorice\nlibido\nlibertine\nlettres\nlethargy\nlethality\nlavatory\nlapp\nlactose\nkulak\nkneading\nkilljoy\nkickapoo\nkennel\njurisdictional\njunto\nisopropyl\nisomerism\ninverter\ninvading\nintervene\nintersect\ninterjection\ninsurgents\ninflationary\ninduce\nindiscreet\nindic\nindentation\ninclination\nincantation\nimpromptu\nimpeach\nimmurement\nimmanence\nillusionist\nhyphen\nhydrous\nhydrographic\nhydrogenated\nhumpback\nhumidification\nhumbug\nhosea\nholystone\nhireling\nhid\nhest\nherbivore\nhedonic\nhasty\nhardwood\nhaddock\ngyroscope\ngrub\ngrilled\ngreaser\ngrantee\ngodmother\ngobe\nglazer\ngirt\nghosty\nghostly\ngenitals\ngeneralize\ngelling\ngaup\ngash\ngable\nfuniculus\nfulfilling\nfringes\nformality\nforegut\nforecaster\nfollicle\nflowered\nflax\nfirmly\nfirework\nfib\nfelon\nfearing\nfastball\nexpired\nexciter\nexceed\nexalted\nestrange\nerroneous\nerebus\nequiangular\nengram\nencapsulated\nempowered\neastwards\neager\ndurante\ndreamboat\ndodo\ndivider\ndivergent\ndisorganized\ndiscotheque\ndilute\ndiller\ndibble\ndesperation\ndesperado\ndermatosis\ndepleted\ndeparting\ndemoniac\ndelicious\ndefocus\ndeclare\ndauntless\ndamped\ncurium\nculverin\ncul\ncryptogenic\ncretin\ncranium\ncourant\ncounterinsurgency\ncorollary\ncorky\ncopycat\ncoppersmith\nconfidant\ncompensate\ncommensurability\ncolorless\ncoining\ncling\nclapper\ncircumambulation\nchez\ncheeseburger\nchambertin\ncavil\ncausey\ncatechism\ncartilaginous\ncarabao\ncapsular\ncapello\ncantina\ncantando\ncamshaft\ncalligrapher\nbuttonhole\nbullshit\nbudding\nbrushfire\nbreadth\nbrassy\nborealis\nbookbinding\nbookbinder\nbombshell\nbolter\nbolshevism\nblockage\nblinded\nblanking\nblackhead\nblab\nbipartisan\nbinet\nbets\nbetrothal\nbenthic\nbedding\nbeauties\nbeatnik\nbazooka\nbathtub\nbasically\nbasalt\nbandage\nbalcony\nbalaclava\nbadman\nathapaskan\naster\nassign\nascetic\narbiter\nappoint\nanticipated\nanthropometry\nanoxic\nannulled\nangelico\nandrogynous\nanchorman\namyotrophic\namide\naltruism\nallowances\nalienated\naleut\naground\nagglutination\naffix\nadversity\nadhere\nacrylic\nacrobatics\naccrued\nabed\nwynd\nwristwatch\nwhitsun\nwetting\nwellhead\nwechsler\nweatherly\nweathered\nwaterline\nwatered\nwarpath\nwarbling\nwanga\nwahoo\nvolans\nviz\nvisualize\nvise\nvestigial\nvermis\nverifying\nunveiling\nunsuccessfully\nunprotected\nunmoved\nunhappy\nundisclosed\nundeveloped\nuncontested\nunconstitutional\nuncompetitive\nunaffiliated\nukulele\nugric\ntypographer\ntwofold\ntumble\ntrucking\ntrimeter\ntrimer\ntrigonal\ntrawling\ntravail\ntrampoline\ntramontane\ntourniquet\ntotalitarianism\ntincture\ntimekeeper\ntimbrel\nthrive\nthickening\nthickened\ntenement\ntelecasting\ntechnetium\ntarpon\ntapioca\nsynoptic\nsuspicious\nsunfish\nsubversive\nstructuring\nstroll\nstriving\nstrictness\nstrays\nstile\nstereotypic\nsteamroller\nstatuary\nstately\nstaker\nsquawk\nsprue\nspringe\nspoiler\nspinous\nspeedup\nspeeding\nspeeder\nsoulless\nsou\nsociolinguistics\nsnowmobile\nsnafu\nsmiling\nsinopia\nsinful\nsignifying\nsignet\nshifty\nsharply\nshahzada\nshackle\nsexualis\nsext\nsexologist\nserine\nsemilunar\nselfishness\nselenite\nseagoing\nseacliff\nscrubbing\nscrimmage\nscepticism\nscentless\nscarcity\nsavarin\nsarcophagus\nsanctorum\nsaeta\nsaboteur\nrump\nrubbing\nroundel\nrootstock\nrooming\nrill\nrifling\nridiculous\nrheum\nreticulated\nretelling\nresupply\nrepute\nreproduce\nrejoice\nreins\nredfin\nredan\nrecumbent\nrectum\nrectangle\nreciting\nrdf\nrationalization\nrara\nradicalism\nquirk\nquintuple\nquantify\nqadi\npung\npsychopathia\nproterozoic\nproserpine\nprogressively\npretext\npredictor\npredicament\npothole\npotent\npopulist\npolytheistic\nplunge\nplumed\nplagued\npiss\npigmentation\npickpocket\nphytoplankton\nphytogeography\nphantasmagoria\npersecuted\nperplexity\nperitonitis\npeppered\npentobarbital\npellicle\npeacemaking\npayer\nparquet\nparlay\nparasitism\npandemonium\npaisano\npackager\npaced\noverriding\noso\noscillatory\nonomatopoeia\nnovus\nnots\nnostra\nnonsectarian\nnightly\nnicotine\nneutralization\nnaturist\nmutilated\nmuck\nmote\nmonotonic\nmonomer\nmitomycin\nmisrepresentation\nmintage\nminimally\nmined\nmethamphetamine\nmerciful\nmenagerie\nmeerkat\nmedially\nmechanician\nmeaty\nmaundy\nmatrimonial\nmatriarch\nmarshland\nmarmalade\nmanobo\nmalevolence\nmalarkey\nlucretius\nlozenge\nlosers\nlld\nliterate\nlightness\nlieutenancy\nlicked\nlettering\nlegation\nlard\nlaburnum\nknobkerrie\nkine\nkeno\njughead\njodhpurs\nitinerant\nisometric\nisolde\nirritability\nirregularly\ninvoke\nintrathecal\ninterventor\ninnermost\ninhabitation\ningleside\nineligible\ninducer\nindividualist\nindispensable\nincompatibility\nincision\nignorant\nhymnography\nhymnody\nhuntsman\nhundredth\nhumdrum\nhuddle\nhothouse\nhopscotch\nhoneypot\nhomeostasis\nhombre\nhokey\nhoist\nhillbilly\nhiatal\nherbicide\nheirloom\nheinie\nhandrail\nhandicraft\nhandicaps\nhairpin\nhacksaw\ngyron\ngusty\nguidon\nguarantor\ngreasy\ngrandparent\ngrampa\ngondolier\ngluttony\nglottalization\ngenitalia\ngalloping\nfurrow\nfunctionally\nfricative\nformidable\nfootprints\nfolie\nflatfoot\nflanks\nflagellum\nfins\nfingersmith\nfinery\nfillet\nffvs\nfarmstead\neyrie\neyeless\nextremists\nexercising\nexemplary\nepistolary\nenyo\nentrust\nentrainment\nentombment\nenshrined\nenormous\nenlil\nenclosing\nembarras\nelrod\necumenism\neakins\ndribble\ndragoman\ndowny\ndoughty\ndominoes\ndominating\ndoge\ndisturb\ndisenfranchisement\ndiscredited\ndiscoloration\ndisastrous\ndirecteur\ndiminuendo\ndilated\ndiarist\ndemonic\ndefer\ndazzler\ndangling\ncrowbar\ncrasis\ncounterweight\ncostumed\ncornice\ncorgi\nconundrum\ncontusion\ncontinual\ncontentious\nconstantly\nconfirm\nconcatenated\ncompensator\ncommonplace\ncommencing\ncombustible\ncoffeehouse\ncoercion\ncockade\ncluck\ncloudy\ncloudland\ncloudburst\nclef\nclairette\ncircumference\ncilia\nchummy\nchiller\nchignon\nchatter\nchardonnay\nchangeling\nchamfered\nchagres\ncenozoic\ncecum\ncavy\ncautionary\ncarat\ncaput\ncapriccio\ncanceling\ncaelum\nbushing\nburl\nbullwhip\nbronchitis\nbrokenhearted\nbroiler\nbrainstorm\nbrac\nbovid\nbookkeeping\nblustery\nbludgeon\nbloodhound\nblooded\nblockhouse\nbleaching\nblasphemous\nbivalent\nbipartite\nbinocular\nbicycling\nbibliographer\nbawbee\nbashkir\nbarnstormer\nbarf\nbackside\nawl\nautre\naural\nattaining\natlantean\nathanasia\nassert\nashen\nargand\narchduchess\narchbishopric\nappend\nantiseptic\nantaeus\nanswering\namputation\namicable\nalpen\naleck\naileron\naerobatics\nadventurous\nadsorption\nadore\naccomplishment\naccelerate\nabsorb\nabolishment\nyellowish\nwrinkly\nwrangler\nwithdraw\nwinnings\nwiesner\nwhitechapel\nwhippet\nvileness\nvex\nverd\nvegetative\nvalet\nvajrayana\nurethra\nupheaval\nunwed\nunsung\nunsorted\nunruly\nunproven\nunforgiving\nundress\nundivided\nunderside\nunderpinnings\nuncovered\nunborn\nunanswered\nunanimously\nunaccompanied\nulcerative\nturban\ntuberous\ntriplex\ntricked\ntransposed\ntorturer\ntortilla\ntoothpick\ntoboggan\ntilted\nthyme\nthunderstruck\nthump\ntheosophist\ntextualism\ntetroxide\ntetrarch\ntenderloin\ntaxed\ntaw\ntartar\ntangled\ntangential\ntainted\ntadpoles\nsyringe\nsyne\nswirling\nsurrogate\nsuperseding\nsuperhuman\nsunless\nsuing\nstratified\nstooge\nstellarator\nsteadfastness\nstargazer\nsputnik\nsplat\nspirited\nspiced\nspellbound\nspeculator\nsorter\nsordid\nsooner\nsolemnity\nsociality\nsmog\nslump\nslowing\nskit\nskillet\nskiffle\nsketchbook\nskein\nsirocco\nsiphoning\nsignatory\nsiderosis\nshortfall\nshivers\nshipment\nshamanic\nshadowgraph\nshackled\nseq\nsedentary\nsecessionist\nscorn\nscaring\nsawmill\nsatchel\nsalmonella\nsaliva\nrustle\nrooftop\nroentgen\nriptide\nripening\nrhinestone\nreticulate\nretardation\nresponsory\nreputedly\nreprimand\nrelaxed\nrelax\nrejects\nrectifiable\nrecreated\nreassembly\nreappraisal\nrayon\nravenous\nrations\nrationalism\nrapidity\nramrod\nraker\nrainstorm\nradiocommunication\nquixotic\nquid\nquickness\nquell\nquasar\nquadric\nqua\npyrotechnic\npyogenic\npurl\npunitive\npsych\npruning\nprovoked\nprosecute\npropulsive\nprompted\nprohibit\nprincipia\npresumption\nprecognition\npouring\npostponement\nportraying\nportcullis\npooka\npolonaise\npolarizing\npointless\npint\nphotoplay\npeseta\npermitting\npermeable\nperish\npergola\nperfumed\npercussive\npeephole\npaving\npause\npauper\nparochialism\npacifism\noxalate\novum\noverlayer\noutlandish\notolaryngology\notherworld\nostracism\nosteopathy\northogonality\norgy\noptimus\noptimistic\noppressed\noperant\nopacity\noft\noffbeat\noceanid\noblation\nnuclide\nnovena\nnoonday\nnogai\nnoddy\nnimble\nnigh\nnifty\nniacin\nnestle\nneckline\nnecklace\nnavigate\nnarcotic\nnabu\nmythopoetic\nmyology\nmutated\nmusca\nmuong\nmundane\nmoulder\nmorally\nmonstrosity\nmonocle\nmitigate\nmisdemeanor\nmiscarriage\nmildly\nmidshipman\nmichaelmas\nmew\nmeursault\nmelted\nmatchless\nmastectomy\nmaryknoll\nmartyrology\nmarquisate\nmarimba\nmannered\nmanipulated\nmangle\nmailer\nmagnification\nlyricism\nluscious\nloopy\nlivonian\nlippi\nlintel\nlinnet\nlayman\nlandlord\nlancing\nlamia\nladybird\nlabyrinthine\nlaborers\nkhasi\nkaas\njuveniles\njuggler\njarring\nirreconcilable\nintricate\ninternist\ninferential\ninfect\nineffective\nincumbency\nincredibly\ninchoative\ninadequacy\nimperator\nidiophone\nideally\nichthyologist\niced\nicebox\nhypnotism\nhyena\nhydrated\nhumanized\nhouseman\nhooray\nhoneysuckle\nhomonuclear\nholmium\nhippocampus\nhindsight\nhideaway\nhesitation\nhelpful\nhelminth\nheartthrob\nhearth\nheadward\nheadman\nhaver\ngyp\ngusto\ngummy\ngrievous\ngratuitous\ngraphically\ngossamer\ngolconda\nglobus\nglasshouse\ngladden\ngirth\ngestation\ngentian\ngenotype\ngeist\ngawain\ngasconade\ngaramond\ngallic\nfunctionary\nfulfillment\nfrutti\nfroth\nfrosting\nfrontiersman\nfrills\nfrankly\nfortnightly\nformic\nforeland\nfontina\nflowerpot\nflorists\nflatulence\nflatness\nfishtail\nfingered\nfief\nfawn\nfallback\nfacula\neyelids\nextragalactic\nexpendable\nestrangement\nesterase\nerode\nequerry\nepidermal\nensuing\nensor\nenlarge\nenema\nendocrinology\nelongation\nelecting\neidolon\negoism\neffluent\neeg\nedifying\nedger\neczema\neclair\neastland\nducking\ndrugstore\ndownwards\ndotty\ndoped\ndodecagonal\ndisqualified\ndisillusionment\ndisequilibrium\ndiscriminatory\ndiscontent\ndisallowance\ndionysos\ndilate\ndesensitized\nderivational\ndenture\ndelete\ndeism\ndebatable\ndearth\ndalai\ncur\ncupboard\nculvert\ncultus\ncruciferous\ncrevasse\ncrestfallen\ncramp\ncoulee\ncosmonaut\ncosa\ncorpuscular\ncorny\ncoppery\ncopperhead\ncontracture\ncontraceptive\ncontemplative\ncontagious\nconsolidate\nconquistador\ncompulsive\ncompressible\ncompelled\ncommunization\ncommonality\ncoils\ncockspur\ncoalescence\ncircumvention\ncinders\nchristology\nchilly\nchickadee\nchapeau\ncervix\ncentrally\ncatheter\ncatalpa\ncashier\ncaraway\ncanvass\ncanker\nbusty\nbureaucratic\nbumpy\nbullfinch\nbugging\nbubbling\nbronchial\nbroach\nbrindisi\nbrawling\nbrakeman\nbowline\nbountiful\nbough\nbottling\nbookmaker\nblower\nblockbuster\nbloat\nblinds\nblanch\nbigamy\nbicameral\nbelieving\nbanzai\nbalsa\nballistics\nbackpack\nbacker\nbabble\nazimuthal\nautoeroticism\nastonishing\nassimilated\naspasia\nasco\narbitrariness\napperception\nantipodes\nantecedent\naniline\nangled\nanchovy\nanatomist\nanaleptic\namok\namidst\namerind\naltmann\nalerting\naidoneus\nagnus\naggravation\nadmixture\nadjust\nadduct\nacquitted\nacolyte\naccumulator\naccountable\naccomplish\nabnormality\nyucca\nyarns\nworsening\nworkbench\nwolfish\nwoe\nwoden\nwiped\nwingman\nwhirlpool\nweightlifter\nwashed\nwanton\nwain\nwaif\nwagering\nvirtuous\nvino\nvingt\nvillager\nvertebra\nvayu\nvagrancy\nusury\nunreal\nunmeasured\nunloading\nundercarriage\nunabridged\ntub\ntrowel\ntrooper\ntroika\ntricolor\ntriangulation\ntrending\ntransonic\ntransitory\ntots\ntitty\ntippet\ntidy\nthrift\nthiosulfate\nthalamus\ntetrafluoroethylene\nterran\ntenet\ntending\ntendai\ntempera\nteaser\ntaunt\ntartarus\ntares\ntaming\ntamandua\ntallow\nsymbolist\nswoon\nswineherd\nswill\nswearing\nsuspend\nsupple\nsuperpatriot\nsuperiors\nsulfite\nsugarplum\nsuffragette\nsucculent\nsubversion\nsubsidence\nsubjectivity\nstumpy\nstrung\nstringent\nstreetwise\nstrathspey\nstranglehold\nstraddle\nstowage\nstipulated\nstimulated\nsquirt\nsqueak\nspringboard\nspoilt\nsphericity\nspecter\nspeckle\nspeakeasy\nsoybeans\nsourdough\nsorghum\nsolvency\nsneaky\nsmear\nslotted\nsleuth\nskipjack\nsisyphus\nsimmering\nsigil\nshred\nservomotor\nserrated\nsequitur\nseniority\nseditious\nseaward\nseamstress\nscythe\nscylla\nscurrilous\nschuller\nschopenhauer\nschooled\nscheiner\nsceptical\nscepter\nsavory\nsapping\nsanctum\nsalesperson\nsafeguard\nrostrum\nrondeau\nrime\nrightful\nrhetorician\nreturnee\nresuscitation\nresonances\nresistive\nreligieuse\nrehearsed\nreferent\nreductive\nrecycle\nreappearance\nrascal\nrapping\nrandomly\nramble\nraki\nquicken\nquantifying\nquakerism\npunish\npulsating\npsychodynamics\nprophylaxis\nprohibitive\nprohibitionist\nprohibiting\nprofane\nprocurator\nprized\npriming\nprim\npreempt\npreeminent\nprecautionary\npraising\npostulated\nponceau\npollyanna\npoacher\npoached\nplausible\nplaiting\npinot\npinna\npilate\npicquet\nphysic\nphonic\nphilistine\npetticoat\npetrified\npervasive\nperpetuity\nperfumer\npensive\npenitential\npeepers\npeasantry\npaternoster\nparthenope\nparthenogenesis\npanelist\npandura\npalooka\noutcrop\noutbreeding\noutboard\nordinarily\nonshore\noloron\noculist\noctoroon\noccupant\nnudist\nnonetheless\nnominate\nnisi\nneurosurgery\nnettle\nneophyte\nnativism\nnarrowly\nnaphthalene\nmusketoon\nmuses\nmucus\nmonotheist\nmongolic\nmonceau\nmolt\nmolossus\nmodulator\nmodernized\nmitigating\nmississippian\nmiserable\nmirroring\nminuet\nmilitancy\nmidden\nmidbrain\nmicronesian\nmicrofilm\nmethanol\nmessy\nmelchizedek\nmedaille\nmatrons\nmanzanilla\nmanliness\nmanipulate\nmaneuvering\nmalignancy\nmaire\nmachiavelli\nlydian\nlunacy\nluminescence\nlucrative\nluciferase\nlongboat\nlithographer\nlithograph\nlipoprotein\nlickerish\nlessee\nlenten\nlegislate\nlatitudes\nlatch\nlande\nkurbash\nknocks\nkneel\nknave\nkipp\nkidding\njustify\njuror\njuridical\njubilant\njointer\njeweler\nirenicism\ninvolution\nintrigues\nintervening\ninterplay\ninterlocked\ninterfere\ninsurrectionist\ninsult\ninsignificance\ninitiator\ninhale\ninhabitant\ningestion\ningenuity\ninflated\ninfallibilism\ninebriate\ninductee\nindefinitely\nincineration\ninarticulate\nimposition\nimply\nimplicated\nimpalement\nimagining\nignored\nhyoid\nhydroponics\nhumpy\nhospitalization\nhoodoo\nhoary\nhoagy\nhippodrome\nhint\nhexahedron\nhexadecimal\nheredity\nhellbender\nheadphone\nhatter\nharleian\nhaploid\nhalting\nhaeckel\ngunnery\nguidebook\nguenon\ngrocer\ngreet\ngreasepaint\ngraver\ngratitude\ngrana\nglyph\nglowworm\nglottal\nglazed\ngizmo\ngit\ngigolo\ngeocentric\ngelatin\ngaulish\ngarnish\ngarnered\ngalvanize\nfuthark\nfurthering\nfulani\nfruiting\nfrugality\nfronting\nfraidy\nfragmentary\nformalist\nforgiven\nforelock\nfoiled\nfishy\nfetlock\nfetishism\nfeldspar\nfalciform\nfaint\nfacsimile\nextramarital\nexterminator\nextensibility\nexpose\nexclude\neventful\nevaluator\neunuch\nethic\netch\nerrata\neon\nenvisioned\nencomium\nenchantment\nencamp\nemphasized\nemphasize\nembraced\nelongate\nelegantly\neland\nelaborated\nechoing\nearwig\ndystopia\ndusting\nduppy\ndully\ndruid\ndresser\ndrained\ndragster\ndowse\ndoubting\ndoubled\ndorsum\nditto\ndispleased\ndisperse\ndiseased\ndiscreet\ndiscord\ndischarging\ndisadvantaged\ndionysus\ndeter\ndepressed\ndeported\ndenying\ndenunciation\ndenier\ndemotion\ndelphinium\ndehydration\ndeference\ndecommission\ndebunking\ndebacle\ndangerously\ncytoplasm\ncygne\ncutlery\ncusp\ncuriously\ncubby\ncrossword\ncrippled\ncringer\ncriminality\ncouplet\ncounteroffensive\ncoulommiers\nconvexity\ncontrollability\nconsequent\nconnotation\nconnoisseur\nconjoined\nconifers\nconifer\ncongreve\nconfessional\nconcordat\ncomus\ncolonnade\ncollaborate\ncohort\ncogent\ncochlea\ncobble\nclumsy\ncloverleaf\ncleared\nclap\ncircumstantial\nciliate\nchthonic\nchristmastime\nchowder\nchorister\nchiliarch\nchequered\ncheckers\nchanger\ncertainly\ncelesta\ncauliflower\ncathodic\ncascading\ncarpal\ncarnivore\ncarcass\ncaracara\ncapitalistic\ncaloric\ncallus\ncalando\ncaduceus\ncabby\ncabal\nbuzzer\nbutane\nbushwhacker\nbuoyancy\nbrownstone\nbreeks\nbooming\nbooked\nbolster\nbolero\nboatswain\nbluebell\nbled\nbistro\nbiomechanics\nbini\nbetacism\nbeneficence\nbellman\nbedlington\nbeaker\nbeacons\nbattler\nbattleground\nbarreled\nbananas\nbackwash\nbacklog\naweigh\nautochthon\nauscultation\natrophic\natomism\nasymmetrical\nasshole\naspiring\naspire\nasparagus\nasceticism\narchway\narchdeaconry\narcadian\naraucanian\naqualung\napproving\nantipodean\nantics\nantiaircraft\nanodyne\nanimus\nangst\namputee\namericium\namericanism\nambit\nambergris\namaurosis\nalmonds\nalewife\nairburst\nagnosticism\nagility\naffectionately\naeacus\nadequacy\nadamant\nacutance\nacknowledge\naccomplice\nacclamation\nabrasive\nabatement\nzing\nzemi\nzapped\nyawl\nyakut\nxebec\nworshipful\nwoodblock\nwished\nwillet\nwiggler\nwhizzer\nwelder\nwebley\nwaving\nwatchword\nwassail\nwallflower\nvoucher\nvom\nvolstead\nvoix\nvize\nvivarium\nvivacious\nvielle\nviator\nvesicular\nvegetal\nvag\nvacated\nutilize\nunsuspected\nunsatisfied\nuninterrupted\nunify\nunidirectional\nunearned\nunbeaten\nump\ntyke\ntsetse\ntryst\ntrypan\ntrumps\ntromba\ntrolling\ntricolored\ntriaxial\ntriatriatum\ntremulous\ntremolo\ntrembles\ntransmissible\ntowner\ntouristic\ntoning\ntonicity\ntomcat\ntoil\ntitleholder\ntippler\ntinged\ntimbre\nthunderbolts\nthoth\ntheriac\ntherein\ntheocracy\nthaw\ntethered\nterminate\ntenoroon\nteamster\nteak\ntaxidermy\ntattler\ntater\ntassie\ntackling\nsyncopated\nswallowing\nsurrendered\nsurprising\nsurely\nsuppressor\nsunroom\nsuccessively\nsubnormal\nsubmitting\nsublimation\nstorekeeper\nstoppage\nstonemason\nstartle\nstabilized\nsquatter\nsprezzatura\nsprawl\nsporty\nsporadically\nsplurge\nsplashy\nsplanchnic\nspheroid\nspeechless\nsouthwards\nsordo\nsoothsayer\nsojourner\nsojourn\nsofter\nsnug\nsnowcap\nsnotty\nsnot\nsnoring\nslur\nsloping\nslicer\nslag\nskelter\nsiphon\nsilverware\nsilencing\nsignalman\nshimmy\nshekel\nsequin\nseesaw\nsecor\nseawall\nscullion\nscrapper\nscour\nschoolteacher\nschmuck\nschizo\nscat\nsanding\nsandbank\nsalutations\nsalpinx\nsagacity\nsacrificing\nsacking\nsabbatical\nruat\nripped\nrhymer\nrevolve\nrevisit\nrevels\nreveille\nretire\nresponder\nresilient\nreservist\nreproduced\nrenter\nremedial\nrejoining\nregrets\nrefusing\nrefill\nredemptive\nredaction\nrecount\nrebroadcast\nrebellious\nreassessment\nradix\nradiometry\nradiating\nquits\nquisling\nquietly\npythian\npursuer\npundit\npsychophysical\npsychologism\npsycholinguistics\nprotruding\nprotesting\npromethium\nproletariat\nprofitable\nprofessed\nprittle\npreservative\nprepayment\npremonstratensian\npousse\nposturing\npostnatal\nposada\npopulace\npooch\npolygraph\npolyconic\npleiad\nplatonic\nplankton\npizzeria\npiscina\npincher\npillbox\npickling\nphoney\nphlox\nphilosophic\nperverted\nperfecta\npentavalent\npennies\npeerless\npauvre\npatroness\npatristic\nparsonage\nparlance\nparishioners\nparched\npallidus\npadlock\npachyderm\noxyacid\noverturn\noverloaded\nophicleide\noperon\nonstage\nonomastics\nonomasticon\nobliteration\nobliged\nobjet\noas\nnymphet\nnuisance\nnudum\nnortherly\nnonviolence\nnicely\nnay\nnavarch\nnarthex\nmyopia\nmuster\nmulatto\nmuddle\nmru\nmossberg\nmorose\nmorbidity\nmooch\nmomentary\nmolehill\nmoldy\nmohair\nmodiste\nmnemosyne\nmistrial\nmisguided\nmischief\nmindfulness\nmillet\nmidstream\nmidday\nmicronucleus\nmetatarsal\nmenstruation\nmelodist\nmatchmaker\nmargarine\nmarauding\nmantel\nmanipulating\nmandrill\nmamma\nmajordomo\nmagnesia\nmackle\nmacadamia\nlunchroom\nlowing\nlout\nlorgnette\nlooped\nlongcloth\nloaves\nlithosphere\nlitany\nlinsey\nliminal\nliking\nleprosy\nleaflets\nlazuli\nlaxative\nlawman\nlavage\nlaughs\nlangue\nlamentation\nlactiferous\nlacquer\nkurma\nkunama\nkreuznach\nknotty\nkneeling\nknack\nkitchenware\nkirtle\nkinsman\nkingbird\nkilo\nkhamsin\njustitia\njoust\njinks\njehu\njawbone\njaded\nintuitionism\ninterviewer\ninterrelated\nintern\nintermedium\ninterline\ninsatiable\ninfrequently\ninfidel\nincapacity\ninbound\nimpractical\nimporter\niban\nhyperactive\nhumongous\nhumming\nhousekeeper\nhorsemanship\nhorrific\nhoopoe\nhieroglyphics\nhg\nhermeneutics\nhep\nhelter\nhastily\nhardboard\nhangar\nhajji\nhaft\ngymnosperms\nguillemot\ngritty\ngrabber\ngouge\ngolgi\nglances\ngeniculate\ngenerality\ngemsbok\ngauze\ngarron\ngaea\nfundamentally\nfuddy\nfructose\nfrontispiece\nfreudian\nfreshness\nfreewheel\nfranchised\nfragmented\nfount\nfortnight\nforsaken\nformalization\nforgetting\nforfeit\nforehand\nforbid\nfoodstuffs\nfontainebleau\nfolia\nflourishing\nfloored\nflitch\nflanked\nfireproof\nfilings\nfetter\nfenced\nfeiner\nfederative\nfazed\nfamiliaris\nfairing\nextensional\nexertion\nexcision\nevidential\neuryale\nesse\nequilateral\nequate\nepiscopalian\nendearment\nemphatic\nemcee\nelusive\nelopement\nelectrostatics\nelectrodeless\neec\nebb\nearthling\nearthenware\nearless\ndysautonomia\nduodenal\nduffel\ndripping\ndregs\ndolittle\ndoberman\ndither\ndistort\ndisproportionate\ndisorderly\ndisgorge\ndiscouraged\ndiscoid\ndipping\ndictated\ndichromate\ndiatonic\ndialectical\ndiagnose\ndewdrops\ndevastating\nderanged\ndepopulation\ndendrite\ndeme\ndelimited\ndelightful\ndelacroix\ndegas\ndefy\ndefinitely\ndecorum\ndeceived\ndeathblow\ndarb\ncystitis\ncutback\ncurfew\ncrossness\ncribbage\ncress\ncrambo\ncrafting\ncrafted\ncrabby\ncoven\ncountering\ncoulomb\ncostly\ncorpuscle\ncordiale\ncorbeau\ncopsewood\ncopperplate\ncontroversialist\ncontrition\ncontrastive\ncontinuo\nconsecutively\nconceptually\nconceptualization\nconcealed\nconceal\ncompress\ncompost\ncompos\ncompensated\ncommunicable\ncommingling\ncommandeering\ncolure\ncolumbine\ncollusive\ncolliding\ncollation\ncoinciding\ncognomen\ncodicil\nclipped\nclicking\nclematis\ncinch\nchromite\nchlorate\nchloral\ncheval\ncharwoman\ncharacteristically\nchandi\ncess\ncaudle\ncatches\ncatarrhal\ncartman\ncardiology\ncapitulary\ncanvassing\ncanuck\ncantilever\ncampine\ncalcification\ncalabash\ncaesarean\ncachet\nbunsen\nbungalow\nbuds\nbrotherly\nbroadening\nbreathtaking\nbrassard\nbrainwave\nbradstreet\nbows\nbouncy\nbookworm\nbolus\nbogeyman\nbluenose\nblowpipe\nbloomery\nbloods\nbloodless\nbiting\nbilge\nbildungsroman\nbighead\nbiconjugate\nbiannual\nbetray\nbangs\nbaluster\nballyhoo\naztecan\nazazel\navestan\nautumnal\nausterity\nattractiveness\nattaching\natropos\natherosclerosis\nasymptote\nastrolabe\nascend\narioso\nargon\narginine\narbela\nappropriately\nappeasement\napnea\nantisubmarine\nanimism\nanima\nangiosperms\nanemic\namiable\nambry\nambassadorial\nalopecia\nalexandrite\nalentejo\naffusion\nafford\naerials\nadjectival\nactinic\nack\nacetic\nabyssal\nabridge\nabomination\n"
  },
  {
    "path": "harper-tree-sitter/Cargo.toml",
    "content": "[package]\nname = \"harper-tree-sitter\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\ntree-sitter = \"0.25.10\"\n"
  },
  {
    "path": "harper-tree-sitter/src/lib.rs",
    "content": "use std::collections::HashSet;\n\nuse harper_core::spell::MutableDictionary;\nuse harper_core::{DictWordMetadata, Mask, Masker, Span};\nuse tree_sitter::{Language, Node, Tree, TreeCursor};\n\n/// A Harper [`Masker`] that wraps a given tree-sitter language and a condition,\n/// allowing you to selectively parse only specific tree-sitter nodes.\npub struct TreeSitterMasker {\n    language: Language,\n    node_condition: fn(&Node) -> bool,\n}\n\nimpl TreeSitterMasker {\n    pub fn new(language: Language, node_condition: fn(&Node) -> bool) -> Self {\n        Self {\n            language,\n            node_condition,\n        }\n    }\n\n    fn parse_root(&self, text: &str) -> Option<Tree> {\n        let mut parser = tree_sitter::Parser::new();\n        parser.set_language(&self.language).unwrap();\n\n        // TODO: Use incremental parsing\n        parser.parse(text, None)\n    }\n\n    pub fn create_ident_dict(&self, source: &[char]) -> Option<MutableDictionary> {\n        let text: String = source.iter().collect();\n\n        // Byte-indexed\n        let mut ident_spans = Vec::new();\n\n        let tree = self.parse_root(&text)?;\n        Self::visit_nodes(&mut tree.walk(), &mut |node: &Node| {\n            if node.child_count() == 0 && node.kind().contains(\"ident\") {\n                ident_spans.push(node.byte_range().into())\n            }\n        });\n\n        let ident_spans = byte_spans_to_char_spans(ident_spans, &text);\n\n        let mut idents = HashSet::new();\n\n        for span in ident_spans {\n            idents.insert(span.get_content(source));\n        }\n\n        let idents: Vec<_> = idents\n            .into_iter()\n            .map(|ident| (ident, DictWordMetadata::default()))\n            .collect();\n\n        let mut dictionary = MutableDictionary::new();\n        dictionary.extend_words(idents);\n\n        Some(dictionary)\n    }\n\n    /// Visits the children of a TreeSitter node, searching for comments.\n    ///\n    /// Returns the BYTE spans of the comment position.\n    fn extract_comments(&self, cursor: &mut TreeCursor, comments: &mut Vec<Span<u8>>) {\n        Self::visit_nodes(cursor, &mut |node: &Node| {\n            if (self.node_condition)(node) {\n                comments.push(node.byte_range().into());\n            }\n        });\n    }\n\n    fn visit_nodes(cursor: &mut TreeCursor, visit: &mut impl FnMut(&Node)) {\n        if !cursor.goto_first_child() {\n            return;\n        }\n\n        loop {\n            let node = cursor.node();\n\n            visit(&node);\n\n            Self::visit_nodes(cursor, visit);\n\n            if !cursor.goto_next_sibling() {\n                break;\n            }\n        }\n\n        cursor.goto_parent();\n    }\n}\n\nimpl Masker for TreeSitterMasker {\n    fn create_mask(&self, source: &[char]) -> Mask {\n        let text: String = source.iter().collect();\n\n        let Some(root) = self.parse_root(&text) else {\n            return Mask::new_blank();\n        };\n\n        let mut comments_spans = Vec::new();\n\n        self.extract_comments(&mut root.walk(), &mut comments_spans);\n        let comments_spans = byte_spans_to_char_spans(comments_spans, &text);\n\n        let mut mask = Mask::new_blank();\n\n        for span in comments_spans {\n            mask.push_allowed(span);\n        }\n\n        mask.merge_whitespace_sep(source);\n\n        mask\n    }\n}\n\n/// Converts a set of byte-indexed [`Span`]s to char-index Spans and returns them.\n/// NOTE: Will sort the given slice by their [`Span::start`].\n///\n/// If any spans overlap, it will merge them.\nfn byte_spans_to_char_spans(mut byte_spans: Vec<Span<u8>>, source: &str) -> Vec<Span<char>> {\n    byte_spans.sort_unstable_by_key(|s| s.start);\n\n    // merge overlapping spans\n    let mut spans = Vec::with_capacity(byte_spans.len());\n    for span in byte_spans {\n        match spans.last_mut() {\n            Some(last) if !span.overlaps_with(*last) => spans.push(span),\n            Some(last) => {\n                // ranges overlap, we can merge them\n                last.end = span.end;\n            }\n            None => spans.push(span),\n        }\n    }\n\n    // Convert byte spans to char spans.\n    spans\n        .iter()\n        .scan((0, 0), |(last_byte_pos, last_char_pos), span| {\n            let byte_span = *span;\n\n            *last_char_pos += source[*last_byte_pos..byte_span.start].chars().count();\n            let start = *last_char_pos;\n\n            *last_char_pos += source[byte_span.start..byte_span.end].chars().count();\n            let end = *last_char_pos;\n\n            *last_byte_pos = byte_span.end;\n            Some(Span::new(start, end))\n        })\n        .collect()\n}\n"
  },
  {
    "path": "harper-typst/Cargo.toml",
    "content": "[package]\nname = \"harper-typst\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\nlicense = \"Apache-2.0\"\nrepository = \"https://github.com/automattic/harper\"\n\n[dependencies]\nharper-core = { path = \"../harper-core\", version = \"1.0.0\" }\ntypst-syntax = { version = \"0.14.2\" }\nordered-float = { version = \"5.1.0\", features = [\"serde\"] }\nitertools = \"0.14.0\"\npaste = \"1.0.14\"\n"
  },
  {
    "path": "harper-typst/src/lib.rs",
    "content": "mod offset_cursor;\nmod typst_translator;\n\nuse typst_translator::TypstTranslator;\n\nuse harper_core::{Token, parsers::Parser};\nuse itertools::Itertools;\nuse typst_syntax::{\n    Source, SyntaxNode,\n    ast::{AstNode, Expr, Markup},\n};\n\n/// A parser that wraps Harper's `PlainEnglish` parser allowing one to ingest Typst files.\npub struct Typst;\n\nimpl Parser for Typst {\n    fn parse(&self, source: &[char]) -> Vec<Token> {\n        let source_str: String = source.iter().collect();\n\n        // Transform the source into an AST through the `typst_syntax` crate\n        let typst_document = Source::detached(source_str);\n        let typst_tree = Markup::from_untyped(typst_document.root())\n            .expect(\"Unable to create typst document from parsed tree!\");\n\n        // Recurse through AST to create tokens\n        let parse_helper = TypstTranslator::new(&typst_document);\n        let mut buf = Vec::new();\n        let exprs = typst_tree.exprs().collect_vec();\n        let exprs = convert_parbreaks(&mut buf, &exprs);\n        parse_helper.parse_exprs(&exprs)\n    }\n}\n\n/// Converts newlines after certain elements to paragraph breaks\n/// This is accomplished here instead of in the translating module because at this point there is\n/// still semantic information associated with the elements.\n///\n/// Newlines are separate expressions in the parse tree (as the Space variant)\nfn convert_parbreaks<'a>(buf: &'a mut Vec<SyntaxNode>, exprs: &'a [Expr]) -> Vec<Expr<'a>> {\n    // Owned collection of nodes forcibly casted to paragraph breaks\n    *buf = exprs\n        .iter()\n        .map(|e| {\n            let mut node = SyntaxNode::placeholder(typst_syntax::SyntaxKind::Parbreak);\n            node.synthesize(e.span());\n            node\n        })\n        .collect_vec();\n\n    let should_parbreak = |e1, e2, e3| {\n        matches!(e2, Expr::Space(_))\n            && (matches!(e1, Expr::Heading(_) | Expr::ListItem(_))\n                || matches!(e3, Expr::Heading(_) | Expr::ListItem(_)))\n    };\n\n    let mut res: Vec<Expr> = Vec::new();\n    let mut last_element: Option<Expr> = None;\n    for ((i, expr), (_, next_expr)) in exprs.iter().enumerate().tuple_windows() {\n        let mut current_expr = *expr;\n        if let Some(last_element) = last_element\n            && should_parbreak(last_element, *expr, *next_expr)\n        {\n            let pbreak = typst_syntax::ast::Parbreak::from_untyped(&buf[i])\n                .expect(\"Unable to convert expression to Parbreak\");\n            current_expr = Expr::Parbreak(pbreak);\n        }\n        res.push(current_expr);\n        last_element = Some(*expr)\n    }\n    // Push last element because it will be excluded by tuple_windows() above\n    if let Some(last) = exprs.iter().last() {\n        res.push(*last);\n    }\n\n    res\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use harper_core::parsers::StrParser;\n\n    #[test]\n    fn issue_1898() {\n        Typst.parse_str(\"#for \");\n        Typst.parse_str(\"#(.$#$$$. \");\n        Typst.parse_str(\"=#{m\\\"\\\".'m\\\"\\\"#p#\");\n    }\n}\n"
  },
  {
    "path": "harper-typst/src/offset_cursor.rs",
    "content": "use typst_syntax::Source;\n\n/// Encapsulation of the translation between byte-based spans and char-based spans. This is used to\n/// avoid recomputing the number of characters between the beginning of the file and the current\n/// byte since `typst_syntax` uses byte spans while we use char spans.\n#[derive(Debug, Clone, Copy)]\npub struct OffsetCursor<'a> {\n    doc: &'a Source,\n    pub char: usize,\n    pub byte: usize,\n}\n\nimpl<'a> OffsetCursor<'a> {\n    pub fn new(doc: &'a Source) -> Self {\n        Self {\n            doc,\n            char: 0,\n            byte: 0,\n        }\n    }\n\n    /// Returns a new [`OffsetCursor`] at the given byte based on the current cursor.\n    pub fn push_to(self, new_byte: usize) -> Option<Self> {\n        assert!(new_byte >= self.byte);\n\n        if new_byte == self.byte {\n            return Some(self);\n        }\n\n        Some(Self {\n            char: self.char + self.doc.text().get(self.byte..new_byte)?.chars().count(),\n            byte: new_byte,\n            ..self\n        })\n    }\n\n    /// Returns a new [`OffsetCursor`] at the beginning of the given [`typst_syntax::Span`] based\n    /// on the current cursor.\n    pub fn push_to_span(self, span: typst_syntax::Span) -> Option<Self> {\n        let new_byte = self.doc.range(span)?.start;\n\n        self.push_to(new_byte)\n    }\n}\n"
  },
  {
    "path": "harper-typst/src/typst_translator.rs",
    "content": "use crate::offset_cursor::OffsetCursor;\nuse harper_core::{\n    Punctuation, Token, TokenKind,\n    parsers::{PlainEnglish, StrParser},\n};\nuse itertools::Itertools;\nuse typst_syntax::{\n    Source,\n    ast::{\n        Arg, ArrayItem, AstNode, DestructuringItem, DictItem, Expr, FuncCall, Ident,\n        LetBindingKind, Param, Pattern, Spread,\n    },\n};\n\n/// Directly translate a span ($a) in a Typst source ($doc) to a token.\nmacro_rules! def_token {\n    ($doc:expr, $a:expr, $kind:expr, $offset:ident) => {{\n        let range = $doc.range($a.span())?;\n        let start = $offset.push_to(range.start)?;\n        let end_char_loc = start.push_to(range.end)?.char;\n\n        Some(vec![Token {\n            span: harper_core::Span::new(start.char, end_char_loc),\n            kind: $kind,\n        }])\n    }};\n}\n\n/// Combine the results of multiple parsing calls.\nmacro_rules! merge {\n    [$($inner:expr),*] => {\n        Some(\n            [$($inner),*]\n                .into_iter()\n                .flatten()\n                .flatten()\n                .collect_vec(),\n        )\n    };\n}\n\n/// Contains values used in parsing so they don't have to be passed around so much.\n#[derive(Clone, Copy)]\npub struct TypstTranslator<'a> {\n    doc: &'a Source,\n}\n\nimpl<'a> TypstTranslator<'a> {\n    pub fn new(doc: &'a Source) -> Self {\n        Self { doc }\n    }\n\n    pub fn parse_exprs(self, exprs: &[Expr]) -> Vec<Token> {\n        let base_offset = OffsetCursor::new(self.doc);\n        let mut tokens = Vec::new();\n        let mut index = 0;\n\n        while index < exprs.len() {\n            // Treat Text + apostrophe + Text as a single contraction token stream.\n            if let Some((mut parsed, consumed)) = self.parse_contraction(exprs, index) {\n                tokens.append(&mut parsed);\n                index += consumed;\n                continue;\n            }\n\n            if let Some(mut parsed) = self.parse_expr(exprs[index], base_offset) {\n                tokens.append(&mut parsed);\n            }\n            index += 1;\n        }\n\n        tokens\n    }\n\n    fn parse_contraction(self, exprs: &[Expr], index: usize) -> Option<(Vec<Token>, usize)> {\n        let exprs = exprs.get(index..index + 3)?;\n        let [expr1, expr2, expr3] = exprs else {\n            return None;\n        };\n\n        let (Expr::Text(left), Expr::SmartQuote(quote), Expr::Text(right)) =\n            (*expr1, *expr2, *expr3)\n        else {\n            return None;\n        };\n\n        if quote.double() {\n            return None;\n        }\n\n        let left_char = left.get().chars().last()?;\n        let right_char = right.get().chars().next()?;\n        if !left_char.is_alphabetic() || !right_char.is_alphabetic() {\n            return None;\n        }\n\n        let left_range = self.doc.range(left.span())?;\n        let quote_range = self.doc.range(quote.span())?;\n        let right_range = self.doc.range(right.span())?;\n        if left_range.end != quote_range.start || quote_range.end != right_range.start {\n            return None;\n        }\n\n        let joined = self.doc.text().get(left_range.start..right_range.end)?;\n        let offset = OffsetCursor::new(self.doc).push_to_span(left.span())?;\n        let parsed = self.parse_english(joined, offset)?;\n\n        Some((parsed, 3))\n    }\n\n    /// Use the [`PlainEnglish`] parser to parse plain text from a Typst expression.\n    fn parse_english(self, str: impl Into<String>, offset: OffsetCursor) -> Option<Vec<Token>> {\n        Some(\n            PlainEnglish\n                .parse_str(str.into())\n                .into_iter()\n                .map(|mut t| {\n                    t.span.push_by(offset.char);\n                    t\n                })\n                .collect_vec(),\n        )\n    }\n\n    /// Parse a pattern, one of the elements of Typst syntax\n    fn parse_pattern(self, pat: Pattern, offset: OffsetCursor) -> Option<Vec<Token>> {\n        /// Simplification of [`def_token!`] that bakes-in local variables\n        macro_rules! token {\n            ($a:expr, $kind:expr) => {\n                def_token!(self.doc, $a, $kind, offset)\n            };\n        }\n\n        match pat {\n            Pattern::Normal(expr) => self.parse_expr(expr, offset),\n            Pattern::Placeholder(underscore) => token!(underscore, TokenKind::Unlintable),\n            Pattern::Parenthesized(parenthesized) => merge![\n                self.parse_expr(parenthesized.expr(), offset),\n                self.parse_pattern(parenthesized.pattern(), offset)\n            ],\n            Pattern::Destructuring(destructuring) => Some(\n                destructuring\n                    .items()\n                    .filter_map(|item| match item {\n                        DestructuringItem::Pattern(pattern) => self.parse_pattern(pattern, offset),\n                        DestructuringItem::Named(named) => merge![\n                            token!(named.name(), TokenKind::Word(None)),\n                            self.parse_pattern(named.pattern(), offset)\n                        ],\n                        DestructuringItem::Spread(spread) => merge![\n                            spread\n                                .sink_ident()\n                                .and_then(|ident| self.parse_ident(ident, offset)),\n                            spread\n                                .sink_expr()\n                                .and_then(|expr| self.parse_expr(expr, offset))\n                        ],\n                    })\n                    .flatten()\n                    .collect(),\n            ),\n        }\n    }\n\n    /// Convenience wrapper of [`Self::parse_expr`] that packages the identifier as an expression\n    fn parse_ident(self, ident: Ident, offset: OffsetCursor) -> Option<Vec<Token>> {\n        self.parse_expr(Expr::Ident(ident), offset)\n    }\n\n    /// Do not use for spreads contained in DestructuringItem\n    fn parse_spread(self, spread: Spread, offset: OffsetCursor) -> Option<Vec<Token>> {\n        merge![\n            self.parse_expr(spread.expr(), offset),\n            spread\n                .sink_ident()\n                .and_then(|ident| self.parse_ident(ident, offset))\n        ]\n    }\n\n    pub fn parse_expr(self, expr: Expr, offset: OffsetCursor) -> Option<Vec<Token>> {\n        // Update the offset that will be passed to other functions by moving it to the beginning\n        // of the current expression's span.\n        let offset = offset.push_to_span(expr.span())?;\n\n        /// Simplification of [`def_token!`] that bakes-in local variables\n        macro_rules! token {\n            ($a:expr, $kind:expr) => {\n                def_token!(self.doc, $a, $kind, offset)\n            };\n        }\n\n        /// Quickly recurse without needing to pass in local variables.\n        /// Matches both single and many expressions.\n        macro_rules! recurse {\n            ($inner:expr) => {\n                self.parse_expr($inner, offset)\n            };\n            ($($inner:expr),+) => {\n                merge![\n                    $(recurse!($inner)),*\n                ]\n            };\n        }\n\n        macro_rules! get_text {\n            ($expr:expr) => {\n                self.doc\n                    .text()\n                    .get(self.doc.range($expr.span())?)\n                    .expect(\"Unable to get text from typst document span!\")\n            };\n        }\n\n        fn parbreak(pos: usize) -> Option<Vec<Token>> {\n            Some(vec![Token {\n                span: harper_core::Span::empty(pos),\n                kind: TokenKind::ParagraphBreak,\n            }])\n        }\n\n        fn isolate(inner: Option<Vec<Token>>) -> Option<Vec<Token>> {\n            let start = inner.as_ref()?.first().map_or(0, |token| token.span.start);\n            let end = inner.as_ref()?.last().map_or(0, |token| token.span.end);\n            merge![parbreak(start), inner, parbreak(end)]\n        }\n\n        // Recurse on each element of an iterator\n        let iter_recurse = |exprs: &mut dyn Iterator<Item = Expr>| {\n            let mut buf = Vec::new();\n            let exprs = exprs.collect_vec();\n            let exprs = super::convert_parbreaks(&mut buf, &exprs);\n            Some(\n                exprs\n                    .into_iter()\n                    .filter_map(|e| recurse!(e))\n                    .flatten()\n                    .collect_vec(),\n            )\n        };\n\n        // Parse the parameters of a function or closure\n        let parse_params = |params: &mut dyn Iterator<Item = Param>| {\n            Some(\n                params\n                    .filter_map(|p| match p {\n                        Param::Pos(pattern) => self.parse_pattern(pattern, offset),\n                        Param::Named(named) => merge![\n                            self.parse_ident(named.name(), offset),\n                            recurse!(named.expr())\n                        ],\n                        Param::Spread(spread) => self.parse_spread(spread, offset),\n                    })\n                    .flatten()\n                    .collect_vec(),\n            )\n        };\n\n        // Parse the arguments passed to a function or closure call\n        let parse_args = |params: &mut dyn Iterator<Item = Arg>| {\n            Some(\n                params\n                    .filter_map(|a| match a {\n                        Arg::Pos(expr) => recurse!(expr),\n                        Arg::Named(named) => merge![\n                            self.parse_ident(named.name(), offset),\n                            recurse!(named.expr())\n                        ],\n                        Arg::Spread(spread) => self.parse_spread(spread, offset),\n                    })\n                    .flatten()\n                    .collect_vec(),\n            )\n        };\n\n        // Parse a function call\n        let parse_func_call = |func: FuncCall| {\n            let parse_args_ignored = |ignore_pos: bool, ignore_nameds: &[&str]| {\n                let (dead, alive): (Vec<_>, Vec<_>) = func.args().items().partition(|a| match a {\n                    Arg::Pos(_) => ignore_pos,\n                    Arg::Named(named) => ignore_nameds.contains(&named.name().as_str()),\n                    Arg::Spread(_) => false,\n                });\n\n                Some(\n                    dead.iter()\n                        .flat_map(|a| token!(a, TokenKind::Unlintable))\n                        .chain(parse_args(&mut alive.into_iter()))\n                        .flatten()\n                        .collect_vec(),\n                )\n            };\n\n            let text = get_text!(func.callee());\n            merge![\n                token!(func.callee(), TokenKind::Unlintable),\n                match text {\n                    \"std.rgb\" | \"color.rgb\" | \"rgb\" => parse_args_ignored(true, &[]),\n                    \"std.plugin\" | \"plugin\" => parse_args_ignored(true, &[]),\n                    \"std.bibliography\" | \"bibliography\" => parse_args_ignored(true, &[\"style\"]),\n                    \"std.cite\" | \"cite\" => parse_args_ignored(true, &[\"style\"]),\n                    \"std.raw\" | \"raw\" => parse_args_ignored(false, &[\"syntaxes\", \"theme\"]),\n                    \"std.image\" | \"image\" => parse_args_ignored(true, &[]),\n                    \"std.regex\" | \"regex\" => parse_args_ignored(true, &[]),\n                    _ if text.ends_with(\".display\") => parse_args_ignored(true, &[]),\n                    _ => parse_args(&mut func.args().items()),\n                }\n            ]\n        };\n\n        // Delegate parsing based on the kind of Typst expression.\n        // Not all expression kinds have defined behavior, so the default behavior is\n        // an [`harper_core::TokenKind::Unlintable`] token.\n        //\n        // A full list of variants is available in the [typst_syntax docs](https://docs.rs/typst/latest/typst/syntax/ast/enum.Expr.html)\n        match expr {\n            Expr::Text(text) => self.parse_english(text.get(), offset.push_to_span(text.span())?),\n            Expr::Space(a) => {\n                let mut chars = get_text!(a).chars();\n                let first_char = chars.next().unwrap();\n                let length = chars.count() + 1;\n\n                if first_char == '\\n' {\n                    token!(a, TokenKind::Newline(1))\n                } else {\n                    token!(a, TokenKind::Space(length))\n                }\n            }\n            Expr::Linebreak(a) => token!(a, TokenKind::Newline(1)),\n            Expr::Parbreak(a) => token!(a, TokenKind::ParagraphBreak),\n            Expr::SmartQuote(quote) => {\n                if quote.double() {\n                    token!(\n                        quote,\n                        TokenKind::Punctuation(Punctuation::Quote(harper_core::Quote {\n                            twin_loc: None\n                        }))\n                    )\n                } else {\n                    token!(quote, TokenKind::Punctuation(Punctuation::Apostrophe))\n                }\n            }\n            Expr::Strong(strong) => iter_recurse(&mut strong.body().exprs()),\n            Expr::Emph(emph) => iter_recurse(&mut emph.body().exprs()),\n            Expr::Link(a) => token!(a, TokenKind::Url),\n            Expr::Heading(heading) => iter_recurse(&mut heading.body().exprs()),\n            Expr::ListItem(list_item) => iter_recurse(&mut list_item.body().exprs()),\n            Expr::EnumItem(enum_item) => iter_recurse(&mut enum_item.body().exprs()),\n            Expr::TermItem(term_item) => iter_recurse(\n                &mut term_item\n                    .term()\n                    .exprs()\n                    .chain(term_item.description().exprs()),\n            ),\n            Expr::Str(text) => {\n                let offset = offset.push_to_span(text.span())?.char + 1;\n                let string = text.to_untyped().text();\n\n                Some(\n                    PlainEnglish\n                        .parse_str(&string[1..string.len() - 1])\n                        .into_iter()\n                        .map(|mut t| {\n                            t.span.push_by(offset);\n                            t\n                        })\n                        .collect_vec(),\n                )\n            }\n            Expr::ContentBlock(content_block) => {\n                isolate(iter_recurse(&mut content_block.body().exprs()))\n            }\n            Expr::Parenthesized(parenthesized) => recurse!(parenthesized.expr()),\n            Expr::Array(array) => Some(\n                array\n                    .items()\n                    .filter_map(|i| {\n                        if let ArrayItem::Pos(e) = i {\n                            recurse!(e)\n                        } else {\n                            None\n                        }\n                    })\n                    .flatten()\n                    .collect_vec(),\n            ),\n            Expr::Dict(dict) => Some(\n                dict.items()\n                    .filter_map(|di| match di {\n                        DictItem::Named(named) => {\n                            merge![\n                                self.parse_ident(named.name(), offset),\n                                recurse!(named.expr())\n                            ]\n                        }\n                        DictItem::Keyed(keyed) => recurse!(keyed.key(), keyed.expr()),\n                        DictItem::Spread(spread) => self.parse_spread(spread, offset),\n                    })\n                    .flatten()\n                    .collect_vec(),\n            ),\n            Expr::FieldAccess(field_access) => merge![\n                recurse!(field_access.target()),\n                token!(field_access.field(), TokenKind::Word(None))\n            ],\n            Expr::LetBinding(let_binding) => merge![\n                match let_binding.kind() {\n                    LetBindingKind::Normal(pattern) => self.parse_pattern(pattern, offset),\n                    LetBindingKind::Closure(ident) => self.parse_ident(ident, offset),\n                },\n                let_binding.init().and_then(|e| recurse!(e))\n            ],\n            Expr::DestructAssignment(destruct_assignment) => {\n                recurse!(destruct_assignment.value())\n            }\n            Expr::SetRule(set_rule) => merge![\n                recurse!(set_rule.target()),\n                set_rule.condition().and_then(|expr| recurse!(expr)),\n                parse_args(&mut set_rule.args().items())\n            ],\n            Expr::ShowRule(show_rule) => merge![\n                recurse!(show_rule.transform()),\n                show_rule.selector().and_then(|expr| recurse!(expr))\n            ],\n            Expr::Contextual(contextual) => recurse!(contextual.body()),\n            Expr::Conditional(conditional) => merge![\n                recurse!(conditional.condition(), conditional.if_body()),\n                conditional.else_body().and_then(|expr| recurse!(expr))\n            ],\n            Expr::WhileLoop(while_loop) => recurse!(while_loop.condition(), while_loop.body()),\n            Expr::ForLoop(for_loop) => recurse!(for_loop.iterable(), for_loop.body()),\n            Expr::CodeBlock(code) => iter_recurse(&mut code.body().exprs()),\n            Expr::Closure(closure) => merge![\n                closure\n                    .name()\n                    .and_then(|ident| self.parse_ident(ident, offset)),\n                parse_params(&mut closure.params().children()),\n                recurse!(closure.body())\n            ],\n            Expr::FuncCall(func) => parse_func_call(func),\n            a => token!(a, TokenKind::Unlintable),\n        }\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use typst_syntax::ast::None;\n\n    #[test]\n    fn parse_none_returns_none() {\n        let source = Source::detached(\"\");\n        let translator = TypstTranslator::new(&source);\n\n        assert!(\n            translator\n                .parse_expr(Expr::None(None::default()), OffsetCursor::new(&source))\n                .is_none()\n        )\n    }\n}\n"
  },
  {
    "path": "harper-typst/tests/run_tests.rs",
    "content": "use harper_core::linting::{LintGroup, Linter};\nuse harper_core::spell::FstDictionary;\nuse harper_core::{Dialect, Document};\nuse harper_typst::Typst;\n\n/// Creates a unit test checking that the linting of a document in\n/// `tests_sources` produces the expected number of lints.\nmacro_rules! create_test {\n    ($filename:ident.$ext:ident, $correct_expected:expr) => {\n        paste::paste! {\n            #[test]\n            fn [<lints_ $filename _correctly>](){\n                 let source = include_str!(\n                    concat!(\n                        \"./test_sources/\",\n                        concat!(stringify!($filename), \".\", stringify!($ext))\n                    )\n                 );\n\n                 let dict = FstDictionary::curated();\n                 let document = Document::new(&source, &Typst, &dict);\n\n                 let mut linter = LintGroup::new_curated(dict, Dialect::American);\n                 let lints = linter.lint(&document);\n\n                 dbg!(&lints);\n                 assert_eq!(lints.len(), $correct_expected);\n\n                 // Make sure that all generated tokens span real characters\n                 for token in document.tokens(){\n                     assert!(token.span.try_get_content(document.get_source()).is_some());\n                 }\n            }\n        }\n    };\n}\n\ncreate_test!(complex_document.typ, 0);\ncreate_test!(simplified_document.typ, 0);\ncreate_test!(complex_document_with_spelling_mistakes.typ, 4);\n// create_test!(issue_399.typ, 3);\ncreate_test!(function_with_ignorable_args.typ, 9);\ncreate_test!(issue_1926.typ, 1);\ncreate_test!(contractions.typ, 0);\n"
  },
  {
    "path": "harper-typst/tests/test_sources/complex_document.typ",
    "content": "#set page(\n  paper: \"us-letter\",\n  columns: 2,\n)\n\n#let titleblock(\n  title: \"Default Title\",\n  authors: (\"Author 1\", \"Author 2\"),\n  abstract: [*This is content*],\n  body,\n) = {\n  set document(date: none)\n  set par(justify: true)\n  set page(\n    header: context {\n      if counter(page).get().first() > 1 [\n        #counter(page).get().first() of #counter(page).final().at(0)\n        #h(1fr)\n        #title\n      ]\n    },\n  )\n  place(\n    top + center,\n    float: true,\n    scope: \"parent\",\n    clearance: 2em,\n  )[\n    #align(center, text(17pt)[\n      *#title*\n    ])\n\n    #let authors = authors.filter(x => x.len() > 0)\n    #let count = authors.len()\n    #let authors_slice = authors.slice(0, calc.min(count, 3))\n    _#if count > 3 {\n        // et al. isn't parsed properly, but this isn't the fault of the Typst\n        // parser\n        // authors_slice.push(\"et al.\")\n        authors_slice.join(\", \")\n      } else {\n        authors_slice.join(\", \", last: \", and \")\n      }\n    _\n\n    #par(justify: false)[\n      *Abstract* \\\n      #abstract\n    ]\n  ]\n  body\n}\n\n#show: doc => [\n  #titleblock(\n    title: \"A fluid dynamic model for glacier flow\",\n    authors: (\"Grant Lemons\", \"John Doe\", \"Jane Doe\"),\n    abstract: lorem(80),\n    doc,\n  )\n]\n\n= Introduction\n#lorem(300)\n\n= Related Work\n#lorem(200)\n"
  },
  {
    "path": "harper-typst/tests/test_sources/complex_document_with_spelling_mistakes.typ",
    "content": "#set page(\n  paper: \"us-letter\",\n  columns: 2,\n)\n\n#let titleblock(\n  title: \"Defalt Title\",\n  authors: (\"Author 1\", \"Author 2\"),\n  abstract: [*This is contnt*],\n  body,\n) = {\n  set document(date: none)\n  set par(justify: true)\n  set page(\n    header: context {\n      if counter(page).get().first() > 1 [\n        #counter(page).get().first() of #counter(page).final().at(0)\n        #h(1fr)\n        #title\n      ]\n    },\n  )\n  place(\n    top + center,\n    float: true,\n    scope: \"parent\",\n    clearance: 2em,\n  )[\n    #align(center, text(17pt)[\n      *#title*\n    ])\n\n    #let authors = authors.filter(x => x.len() > 0)\n    #let count = authors.len()\n    #let authors_slice = authors.slice(0, calc.min(count, 3))\n    _#if count > 3 {\n        // et al. isn't parsed properly, but this isn't the fault of the Typst\n        // parser\n        // authors_slice.push(\"et al.\")\n        authors_slice.join(\", \")\n      } else {\n        authors_slice.join(\", \", last: \", and \")\n      }\n    _\n\n    #par(justify: false)[\n      *Abstract* \\\n      #abstract\n    ]\n  ]\n  body\n}\n\n#show: doc => [\n  #titleblock(\n    title: \"A fluid dynamic model for glaier flow\",\n    authors: (\"Grant Lemons\", \"John Doe\", \"Jane Doe\"),\n    abstract: lorem(80),\n    doc,\n  )\n]\n\n= Introduction\n#lorem(300)\n\n= Related ork\n#lorem(200)\n"
  },
  {
    "path": "harper-typst/tests/test_sources/contractions.typ",
    "content": "Typst used to have problems with contractions. Doesn't it still?\n"
  },
  {
    "path": "harper-typst/tests/test_sources/function_with_ignorable_args.typ",
    "content": "#rgb(\"ffffff\")\n#plugin(\"../a.wasm\")\n#bibliography((\"../a.bib\", \"../b.bib\"), style: \"../c.csl\", title: [Errorz])\n#cite(style: \"../a.csl\", supplement: [Errorz])\n#raw(syntaxes: (\"../a\", \"../b\"), theme: \"../c\", [Errorz])\n#image(\"../a\", caption: [Errorz])\n#regex(\"(?i)\")\n#std.rgb(\"ffffff\")\n#color.rgb(\"ffffff\")\n#std.plugin(\"../a.wasm\")\n#std.bibliography((\"../a.bib\", \"../b.bib\"), style: \"../c.csl\", title: [Errorz])\n#std.cite(style: \"../a.csl\", supplement: [Errorz])\n#std.raw(syntaxes: (\"../a\", \"../b\"), theme: \"../c\", [Errorz])\n#std.image(\"../a\", caption: [Errorz])\n#std.regex(\"(?i)\")\n#datetime.today().display(\"y:[year repr:last_two]\")\n#context counter(heading).display(\"i\", both: [Errorz])\n"
  },
  {
    "path": "harper-typst/tests/test_sources/issue_1926.typ",
    "content": "No No\n#table(\n  columns: 2,\n  [No], [No]\n)\n"
  },
  {
    "path": "harper-typst/tests/test_sources/issue_399.typ",
    "content": "#problem[\n\t4. Find all the $x$ values where the following function is discontinuous.\n]\n\n#solution[\n\t$x=-2,0,3$\n]\n\n#aside[\n\tat $x=-2$ jump discontinuity. \n\n\tat $x=0$ infinite discontinuity.\n\n\tat $x=3$ removable discontinuity. (can be removed via re-defining the domain to exclude that)\n]\n"
  },
  {
    "path": "harper-typst/tests/test_sources/simplified_document.typ",
    "content": "#let template(\n  title: \"Default Title\",\n  authors: (\"Author 1\", \"Author 2\"),\n  abstract: [*This is content*],\n  body,\n) = {\n  set document(date: none)\n  set par(justify: true)\n  set page(\n    paper: \"us-letter\",\n    columns: 2,\n    number-align: top,\n    numbering: (..n) => if n.pos().first() > 1 {\n      n.pos().map(str).join(\" of \") + h(1fr) + title\n    },\n  )\n\n  place(\n    top + center,\n    float: true,\n    scope: \"parent\",\n    clearance: 2em,\n  )[\n    #text(17pt, strong(title))\n\n    #let authors-line = if authors.len() > 3 {\n      // \"et al.\" isn't parsed properly, but this isn't the fault of the Typst\n      // parser.\n      // authors-max3.push(\"et al.\")\n      authors => authors.join(\", \")\n    } else {\n      authors => authors.join(\", \", last: \", and \")\n    }\n    #emph(authors-line(authors.slice(0, calc.min(authors.len(), 3))))\n\n    #par(justify: false)[\n      *Abstract* \\\n      #abstract\n    ]\n  ]\n\n  body\n}\n\n#show: template.with(\n  title: \"A fluid dynamic model for glacier flow\",\n  authors: (\"Grant Lemons\", \"John Doe\", \"Jane Doe\"),\n  abstract: lorem(80),\n)\n\n= Introduction\n#lorem(300)\n\n= Related Work\n#lorem(200)\n"
  },
  {
    "path": "harper-typst/tests/tests.rs",
    "content": "use itertools::Itertools;\nuse ordered_float::OrderedFloat;\n\nuse harper_core::{DictWordMetadata, Document, NounData, Number, Punctuation, TokenKind};\nuse harper_typst::Typst;\n\n#[test]\nfn number() {\n    let source = \"12 is larger than 11, but much less than 11!\";\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    assert!(matches!(\n        token_kinds.as_slice(),\n        &[\n            TokenKind::Number(Number {\n                value: OrderedFloat(12.0),\n                suffix: None,\n                ..\n            }),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Number(Number {\n                value: OrderedFloat(11.0),\n                suffix: None,\n                ..\n            }),\n            TokenKind::Punctuation(Punctuation::Comma),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Number(Number {\n                value: OrderedFloat(11.0),\n                suffix: None,\n                ..\n            }),\n            TokenKind::Punctuation(Punctuation::Bang),\n        ]\n    ))\n}\n\n#[test]\nfn math_unlintable() {\n    let source = \"$12 > 11$, $12 << 11!$\";\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    assert!(matches!(\n        token_kinds.as_slice(),\n        &[\n            TokenKind::Unlintable,\n            TokenKind::Punctuation(Punctuation::Comma),\n            TokenKind::Space(1),\n            TokenKind::Unlintable,\n        ]\n    ))\n}\n\n#[test]\nfn dict_parsing() {\n    let source = r#\"#let dict = (\n                          name: \"Typst\",\n                          born: 2019,\n                        )\"#;\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    let charslice = source.chars().collect_vec();\n    let tokens = document.tokens().collect_vec();\n    assert_eq!(tokens[2].span.get_content_string(&charslice), \"Typst\");\n\n    assert!(matches!(\n        token_kinds.as_slice(),\n        &[\n            TokenKind::Unlintable, // dict\n            TokenKind::Unlintable, // name (key 1)\n            TokenKind::Word(_),    // Typst (value 1)\n            TokenKind::Unlintable, // born (key 2)\n            TokenKind::Unlintable, // 2019 (value 2)\n        ]\n    ))\n}\n\n#[test]\nfn str_parsing() {\n    let source = r#\"#let ident = \"This is a string\"\"#;\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    assert!(matches!(\n        &token_kinds.as_slice(),\n        &[\n            TokenKind::Unlintable, // ident\n            TokenKind::Word(_),    // This\n            TokenKind::Space(1),   //\n            TokenKind::Word(_),    // is\n            TokenKind::Space(1),   //\n            TokenKind::Word(_),    // a\n            TokenKind::Space(1),   //\n            TokenKind::Word(_),    // string\n        ]\n    ))\n}\n\n#[test]\nfn non_adjacent_spaces_not_condensed() {\n    let source = r#\"#authors_slice.join(\", \", last: \", and \")  bob\"#;\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    assert!(matches!(\n        &token_kinds.as_slice(),\n        &[\n            TokenKind::Unlintable, // authors_slice.join\n            TokenKind::Punctuation(Punctuation::Comma),\n            TokenKind::Space(1),\n            TokenKind::Unlintable, // last\n            TokenKind::Punctuation(Punctuation::Comma),\n            TokenKind::Space(1),\n            TokenKind::Word(_), // and\n            TokenKind::Space(1),\n            TokenKind::Space(2),\n            TokenKind::Word(_), // bob\n        ]\n    ))\n}\n\n#[test]\nfn header_parsing() {\n    let source = \"= Header\n                      Paragraph\";\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    let charslice = source.chars().collect_vec();\n    let tokens = document.tokens().collect_vec();\n    assert_eq!(tokens[0].span.get_content_string(&charslice), \"Header\");\n    assert_eq!(tokens[2].span.get_content_string(&charslice), \"Paragraph\");\n\n    assert!(matches!(\n        &token_kinds.as_slice(),\n        &[\n            TokenKind::Word(_),\n            TokenKind::ParagraphBreak,\n            TokenKind::Word(_)\n        ]\n    ))\n}\n\n#[test]\nfn parbreak() {\n    let source = \"Paragraph\n\n                      Paragraph\";\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    assert!(matches!(\n        &token_kinds.as_slice(),\n        &[\n            TokenKind::Word(_),\n            TokenKind::ParagraphBreak,\n            TokenKind::Word(_),\n        ]\n    ))\n}\n\n#[test]\nfn label_ref_unlintable() {\n    let source = \"= Header\n                      <label>\n                      Paragraph @label\";\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    assert!(matches!(\n        &token_kinds.as_slice(),\n        &[\n            TokenKind::Word(_),\n            TokenKind::ParagraphBreak,\n            TokenKind::Unlintable,\n            TokenKind::Newline(_),\n            TokenKind::Word(_),\n            TokenKind::Space(_),\n            TokenKind::Unlintable,\n        ]\n    ))\n}\n\n#[test]\nfn sentence() {\n    let source = \"This is a sentence, it is not interesting.\";\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    assert!(matches!(\n        token_kinds.as_slice(),\n        &[\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Punctuation(Punctuation::Comma),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Space(1),\n            TokenKind::Word(_),\n            TokenKind::Punctuation(Punctuation::Period),\n        ]\n    ))\n}\n\n#[test]\nfn smart_apostrophe_newline() {\n    let source = \"group’s\n                      writing\";\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    let charslice = source.chars().collect_vec();\n    let tokens = document.tokens().collect_vec();\n    assert_eq!(tokens[2].span.get_content_string(&charslice), \"writing\");\n\n    assert!(matches!(\n        token_kinds.as_slice(),\n        &[\n            TokenKind::Word(Some(DictWordMetadata {\n                noun: Some(NounData {\n                    is_possessive: Some(true),\n                    ..\n                }),\n                ..\n            })),\n            TokenKind::Newline(1),\n            TokenKind::Word(_),\n        ]\n    ));\n}\n\n#[test]\nfn newline_in_paragraph() {\n    let source = \"Paragraph with\nnewlines\nnot paragraph breaks\";\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    assert!(matches!(\n        &token_kinds.as_slice(),\n        &[\n            TokenKind::Word(_), // Paragraph\n            TokenKind::Space(_),\n            TokenKind::Word(_), // with\n            TokenKind::Newline(1),\n            TokenKind::Word(_), // newlines\n            TokenKind::Newline(1),\n            TokenKind::Word(_), // not\n            TokenKind::Space(_),\n            TokenKind::Word(_), // paragraph\n            TokenKind::Space(_),\n            TokenKind::Word(_), // breaks\n        ]\n    ))\n}\n\n#[test]\nfn parbreaks_in_list() {\n    let source = \"This is a list:\n- p1\n- p2\n- p3\";\n\n    let document = Document::new_curated(source, &Typst);\n    let token_kinds = document.tokens().map(|t| t.kind.clone()).collect_vec();\n    dbg!(&token_kinds);\n\n    assert!(matches!(\n        &token_kinds.as_slice(),\n        &[\n            TokenKind::Word(_), // This\n            TokenKind::Space(_),\n            TokenKind::Word(_), // is\n            TokenKind::Space(_),\n            TokenKind::Word(_), // a\n            TokenKind::Space(_),\n            TokenKind::Word(_), // list\n            TokenKind::Punctuation(Punctuation::Colon),\n            TokenKind::ParagraphBreak,\n            TokenKind::Word(_),\n            TokenKind::ParagraphBreak,\n            TokenKind::Word(_),\n            TokenKind::ParagraphBreak,\n            TokenKind::Word(_)\n        ]\n    ))\n}\n"
  },
  {
    "path": "harper-wasm/Cargo.toml",
    "content": "[package]\nname = \"harper-wasm\"\nversion = \"0.1.0\"\nedition = \"2024\"\npublish = false\nrepository = \"https://github.com/automattic/harper\"\n\n[lib]\ncrate-type = [\"cdylib\", \"rlib\"]\n\n[dependencies]\nconsole_error_panic_hook = \"0.1.7\"\ntracing = \"0.1.44\"\ntracing-wasm = \"0.2.1\"\nwasm-bindgen = \"0.2.97\"\nharper-core = { path = \"../harper-core\", version = \"1.0.0\", features = [\"concurrent\"] }\nharper-typst = { path = \"../harper-typst\", version = \"1.0.0\" }\nonce_cell = \"1.21.4\"\nserde-wasm-bindgen = \"0.6.5\"\nserde_json = \"1.0.149\"\nserde = { version = \"1.0.228\", features = [\"derive\"] }\ngetrandom = { version = \"0.3.4\", default-features = false, features = [\"wasm_js\"] }\nharper-stats = { path = \"../harper-stats\", version = \"1.0.0\", features = [\"js\"] }\n\n[dev-dependencies]\nsysinfo = { version = \"0.38.3\", default-features = false, features = [ \"system\" ] }\n"
  },
  {
    "path": "harper-wasm/README.md",
    "content": "# `harper-wasm`\n\n`harper-wasm` is the WebAssembly-compiled version of the [Harper](https://github.com/automattic/harper) grammar checker.\n\nCurrently, the API exists to meet the needs of both the [web demo](https://writewithharper.com) and the Obsidian plugin.\n"
  },
  {
    "path": "harper-wasm/src/lib.rs",
    "content": "#![doc = include_str!(\"../README.md\")]\n\nuse std::collections::HashMap;\nuse std::convert::Into;\nuse std::io::Cursor;\nuse std::sync::Arc;\n\nuse harper_core::language_detection::is_doc_likely_english;\nuse harper_core::linting::{LintGroup, Linter as _};\nuse harper_core::parsers::{IsolateEnglish, Markdown, Mask, OopsAllHeadings, Parser, PlainEnglish};\nuse harper_core::remove_overlaps_map;\nuse harper_core::weirpack::Weirpack;\nuse harper_core::{\n    CharString, DictWordMetadata, Document, IgnoredLints, LintContext, Lrc, remove_overlaps,\n    spell::{Dictionary, FstDictionary, MergedDictionary, MutableDictionary},\n};\nuse harper_core::{DialectFlags, RegexMasker};\nuse harper_stats::{Record, RecordKind, Stats};\nuse harper_typst::Typst;\nuse serde::{Deserialize, Serialize};\nuse serde_wasm_bindgen::Serializer;\nuse wasm_bindgen::JsValue;\nuse wasm_bindgen::prelude::wasm_bindgen;\n\n/// Set up the WebAssembly module's logging.\n#[wasm_bindgen(start)]\npub fn setup() {\n    console_error_panic_hook::set_once();\n\n    // If `setup` gets called more than once, we want to allow this error to fall through.\n    let _ = tracing_wasm::try_set_as_global_default();\n}\n\nmacro_rules! make_serialize_fns_for {\n    ($name:ident) => {\n        #[wasm_bindgen]\n        impl $name {\n            pub fn to_json(&self) -> String {\n                serde_json::to_string(&self).unwrap()\n            }\n\n            pub fn from_json(json: String) -> Result<Self, String> {\n                serde_json::from_str(&json).map_err(|err| err.to_string())\n            }\n        }\n    };\n}\n\nmake_serialize_fns_for!(Suggestion);\nmake_serialize_fns_for!(Lint);\nmake_serialize_fns_for!(Span);\n\n#[wasm_bindgen]\n#[derive(Serialize, Deserialize, Debug, Copy, Clone)]\npub enum Language {\n    Plain,\n    Markdown,\n    Typst,\n}\n\nimpl Language {\n    fn create_parser(&self) -> Box<dyn Parser> {\n        match self {\n            Language::Plain => Box::new(PlainEnglish),\n            // TODO: Have a way to configure the Markdown parser\n            Language::Markdown => Box::new(Markdown::default()),\n            Language::Typst => Box::new(Typst),\n        }\n    }\n}\n\n/// Specifies an English Dialect, often used for linting.\n#[wasm_bindgen]\n#[derive(Serialize, Deserialize, Debug, Clone, Copy)]\npub enum Dialect {\n    American,\n    British,\n    Australian,\n    Canadian,\n    Indian,\n}\n\nimpl From<Dialect> for harper_core::Dialect {\n    fn from(dialect: Dialect) -> Self {\n        match dialect {\n            Dialect::American => harper_core::Dialect::American,\n            Dialect::Canadian => harper_core::Dialect::Canadian,\n            Dialect::Australian => harper_core::Dialect::Australian,\n            Dialect::British => harper_core::Dialect::British,\n            Dialect::Indian => harper_core::Dialect::Indian,\n        }\n    }\n}\n\n#[wasm_bindgen]\npub struct Linter {\n    lint_group: LintGroup,\n    /// The user-supplied dictionary.\n    ///\n    /// To make changes affect linting, run [`Self::synchronize_lint_dict`].\n    user_dictionary: MutableDictionary,\n    dictionary: Arc<MergedDictionary>,\n    ignored_lints: IgnoredLints,\n    dialect: Dialect,\n    stats: Stats,\n}\n\n#[derive(Serialize)]\nstruct WeirpackTestFailure {\n    expected: String,\n    got: String,\n}\n\n#[wasm_bindgen]\nimpl Linter {\n    /// Construct a new `Linter`.\n    /// Note that this can mean constructing the curated dictionary, which is the most expensive operation\n    /// in Harper.\n    pub fn new(dialect: Dialect) -> Self {\n        let dictionary = Self::construct_merged_dict(MutableDictionary::default());\n        let lint_group = LintGroup::new_curated_empty_config(dictionary.clone(), dialect.into());\n\n        Self {\n            lint_group,\n            user_dictionary: MutableDictionary::new(),\n            dictionary,\n            ignored_lints: IgnoredLints::default(),\n            dialect,\n            stats: Stats::default(),\n        }\n    }\n\n    /// Update the dictionary inside [`Self::lint_group`] to include [`Self::user_dictionary`].\n    /// This clears any linter caches, so use it sparingly.\n    fn synchronize_lint_dict(&mut self) {\n        let mut lint_config = self.lint_group.config.clone();\n        self.dictionary = Self::construct_merged_dict(self.user_dictionary.clone());\n        self.lint_group =\n            LintGroup::new_curated_empty_config(self.dictionary.clone(), self.dialect.into());\n        self.lint_group.config.merge_from(&mut lint_config);\n    }\n\n    /// Construct the actual dictionary to be used for linting and parsing from the curated dictionary\n    /// and [`Self::user_dictionary`].\n    fn construct_merged_dict(user_dictionary: MutableDictionary) -> Arc<MergedDictionary> {\n        let mut lint_dict = MergedDictionary::new();\n\n        lint_dict.add_dictionary(FstDictionary::curated());\n        lint_dict.add_dictionary(Arc::new(user_dictionary));\n\n        Arc::new(lint_dict)\n    }\n\n    /// Helper method to quickly check if a plain string is likely intended to be English\n    pub fn is_likely_english(&self, text: String) -> bool {\n        let document = Document::new_plain_english(&text, &self.dictionary);\n        is_doc_likely_english(&document, &self.dictionary)\n    }\n\n    /// Helper method to remove non-English text from a plain English document.\n    pub fn isolate_english(&self, text: String) -> String {\n        let document = Document::new(\n            &text,\n            &IsolateEnglish::new(Box::new(PlainEnglish), self.dictionary.clone()),\n            &self.dictionary,\n        );\n\n        document.to_string()\n    }\n\n    /// Get a JSON map containing the descriptions of all the linting rules, formatted as HTML.\n    pub fn get_lint_descriptions_html_as_json(&self) -> String {\n        serde_json::to_string(&self.lint_group.all_descriptions_html()).unwrap()\n    }\n\n    /// Get a Record containing the descriptions of all the linting rules, formatted as HTML.\n    pub fn get_lint_descriptions_html_as_object(&self) -> JsValue {\n        let serializer = Serializer::json_compatible();\n        self.lint_group\n            .all_descriptions_html()\n            .serialize(&serializer)\n            .unwrap()\n    }\n\n    /// Get a JSON map containing the descriptions of all the linting rules, formatted as Markdown.\n    pub fn get_lint_descriptions_as_json(&self) -> String {\n        serde_json::to_string(&self.lint_group.all_descriptions()).unwrap()\n    }\n\n    /// Get a Record containing the descriptions of all the linting rules, formatted as Markdown.\n    pub fn get_lint_descriptions_as_object(&self) -> JsValue {\n        let serializer = Serializer::json_compatible();\n        self.lint_group\n            .all_descriptions()\n            .serialize(&serializer)\n            .unwrap()\n    }\n\n    pub fn get_lint_config_as_json(&self) -> String {\n        serde_json::to_string(&self.lint_group.config).unwrap()\n    }\n\n    pub fn set_lint_config_from_json(&mut self, json: String) -> Result<(), String> {\n        self.lint_group.config = serde_json::from_str(&json).map_err(|v| v.to_string())?;\n        Ok(())\n    }\n\n    pub fn summarize_stats(&self, start_time: Option<i64>, end_time: Option<i64>) -> JsValue {\n        let mut operable_copy = self.stats.clone();\n\n        if let Some(start_time) = start_time {\n            operable_copy.records.retain(|i| i.when > start_time);\n        }\n\n        if let Some(end_time) = end_time {\n            operable_copy.records.retain(|i| i.when < end_time);\n        }\n\n        operable_copy\n            .summarize()\n            .serialize(&Serializer::json_compatible())\n            .unwrap()\n    }\n\n    pub fn get_lint_config_as_object(&self) -> JsValue {\n        // Important for downstream JSON serialization\n        let serializer = Serializer::json_compatible();\n\n        self.lint_group.config.serialize(&serializer).unwrap()\n    }\n\n    pub fn set_lint_config_from_object(&mut self, object: JsValue) -> Result<(), String> {\n        self.lint_group.config =\n            serde_wasm_bindgen::from_value(object).map_err(|v| v.to_string())?;\n        Ok(())\n    }\n\n    pub fn ignore_lint(&mut self, source_text: String, lint: Lint) {\n        let source: Vec<_> = source_text.chars().collect();\n\n        let document = Document::new_from_vec(\n            source.into(),\n            &lint.language.create_parser(),\n            &self.dictionary,\n        );\n\n        self.ignored_lints.ignore_lint(&lint.inner, &document);\n    }\n\n    /// Add a specific context hash to the ignored lints list.\n    pub fn ignore_hash(&mut self, hash: u64) {\n        self.ignored_lints.ignore_hash(hash);\n    }\n\n    /// Compute the context hash of a given lint.\n    pub fn context_hash(&self, source_text: String, lint: &Lint) -> u64 {\n        let source: Vec<_> = source_text.chars().collect();\n\n        let document = Document::new_from_vec(\n            source.into(),\n            &lint.language.create_parser(),\n            &self.dictionary,\n        );\n\n        let ctx = LintContext::from_lint(&lint.inner, &document);\n        ctx.default_hash()\n    }\n\n    pub fn organized_lints(\n        &mut self,\n        text: String,\n        language: Language,\n        all_headings: bool,\n        regex_mask: Option<String>,\n    ) -> Vec<OrganizedGroup> {\n        let source: Vec<_> = text.chars().collect();\n        let source = Lrc::new(source);\n\n        let mut parser = language.create_parser();\n\n        if let Some(regex) = regex_mask {\n            let masker_maybe = RegexMasker::new(regex.as_str(), true);\n            if let Some(masker) = masker_maybe {\n                parser = Box::new(Mask::new(masker, parser));\n            } else {\n                return vec![];\n            }\n        }\n\n        if all_headings {\n            parser = Box::new(OopsAllHeadings::new(parser));\n        }\n\n        let document = Document::new_from_vec(source.clone(), &parser, &self.dictionary);\n\n        let temp = self.lint_group.config.clone();\n        self.lint_group.config.fill_with_curated();\n\n        let mut lints = self.lint_group.organized_lints(&document);\n\n        self.lint_group.config = temp;\n\n        for value in lints.values_mut() {\n            self.ignored_lints.remove_ignored(value, &document);\n        }\n\n        remove_overlaps_map(&mut lints);\n\n        lints\n            .into_iter()\n            .map(|(s, ls)| OrganizedGroup {\n                group: s,\n                lints: ls\n                    .into_iter()\n                    .map(|l| {\n                        let problem_text = l.span.get_content_string(&source);\n                        let span = Into::<Span>::into(l.span).to_js_indices(source.as_slice());\n\n                        Lint::new(l, span, problem_text, language)\n                    })\n                    .collect(),\n            })\n            .collect()\n    }\n\n    /// Perform the configured linting on the provided text.\n    ///\n    /// If the provided regex mask cannot be parsed, this method will return an empty array.\n    pub fn lint(\n        &mut self,\n        text: String,\n        language: Language,\n        all_headings: bool,\n        regex_mask: Option<String>,\n    ) -> Vec<Lint> {\n        let source: Vec<_> = text.chars().collect();\n        let source = Lrc::new(source);\n\n        let mut parser = language.create_parser();\n\n        if let Some(regex) = regex_mask {\n            let masker_maybe = RegexMasker::new(regex.as_str(), true);\n            if let Some(masker) = masker_maybe {\n                parser = Box::new(Mask::new(masker, parser));\n            } else {\n                return vec![];\n            }\n        }\n\n        if all_headings {\n            parser = Box::new(OopsAllHeadings::new(parser));\n        }\n\n        let document = Document::new_from_vec(source.clone(), &parser, &self.dictionary);\n\n        let temp = self.lint_group.config.clone();\n        self.lint_group.config.fill_with_curated();\n\n        let mut lints = self.lint_group.lint(&document);\n\n        self.lint_group.config = temp;\n\n        self.ignored_lints.remove_ignored(&mut lints, &document);\n        remove_overlaps(&mut lints);\n\n        lints\n            .into_iter()\n            .map(|l| {\n                let problem_text = l.span.get_content_string(&source);\n                let span = Into::<Span>::into(l.span).to_js_indices(source.as_slice());\n                Lint::new(l, span, problem_text, language)\n            })\n            .collect()\n    }\n\n    /// Export the linter's ignored lints as a privacy-respecting JSON list of hashes.\n    pub fn export_ignored_lints(&self) -> String {\n        serde_json::to_string(&self.ignored_lints).unwrap()\n    }\n\n    /// Import into the linter's ignored lints from a privacy-respecting JSON list of hashes.\n    pub fn import_ignored_lints(&mut self, json: String) -> Result<(), String> {\n        let list: IgnoredLints = serde_json::from_str(&json).map_err(|err| err.to_string())?;\n\n        self.ignored_lints.append(list);\n\n        Ok(())\n    }\n\n    pub fn clear_ignored_lints(&mut self) {\n        self.ignored_lints = IgnoredLints::new();\n    }\n\n    /// Clear the user dictionary.\n    pub fn clear_words(&mut self) {\n        self.user_dictionary = MutableDictionary::new();\n        self.synchronize_lint_dict();\n    }\n\n    /// Import words into the dictionary.\n    pub fn import_words(&mut self, additional_words: Vec<String>) {\n        let init_len = self.user_dictionary.word_count();\n\n        self.user_dictionary\n            .extend_words(additional_words.iter().map(|word| {\n                (\n                    word.chars().collect::<CharString>(),\n                    DictWordMetadata {\n                        dialects: DialectFlags::from_dialect(self.dialect.into()),\n                        ..Default::default()\n                    },\n                )\n            }));\n\n        // Only synchronize if we added words that were not there before.\n        if self.user_dictionary.word_count() > init_len {\n            self.synchronize_lint_dict();\n        }\n    }\n\n    /// Export words from the dictionary.\n    /// Note: this will only return words previously added by [`Self::import_words`].\n    pub fn export_words(&mut self) -> Vec<String> {\n        self.user_dictionary\n            .words_iter()\n            .map(|v| v.iter().collect())\n            .collect()\n    }\n\n    /// Get the dialect this struct was constructed for.\n    pub fn get_dialect(&self) -> Dialect {\n        self.dialect\n    }\n\n    /// Apply a suggestion from a given lint.\n    /// This action will be logged to the Linter's statistics.\n    pub fn apply_suggestion(\n        &mut self,\n        source_text: String,\n        lint: &Lint,\n        suggestion: &Suggestion,\n    ) -> Result<String, String> {\n        let mut source: Vec<_> = source_text.chars().collect();\n\n        let doc = Document::new_from_vec(\n            source.clone().into(),\n            &lint.language.create_parser(),\n            &self.dictionary,\n        );\n\n        self.stats\n            .records\n            .push(Record::now(RecordKind::from_lint(&lint.inner, &doc)));\n\n        suggestion.inner.apply(lint.inner.span, &mut source);\n\n        Ok(source.iter().collect())\n    }\n\n    pub fn generate_stats_file(&self) -> String {\n        let mut output = Vec::new();\n        self.stats.write(&mut output).unwrap();\n\n        String::from_utf8(output).unwrap()\n    }\n\n    pub fn import_stats_file(&mut self, file: String) -> Result<(), String> {\n        let data = file.as_bytes();\n        let mut read = Cursor::new(data);\n\n        let mut new_stats = Stats::read(&mut read).map_err(|err| err.to_string())?;\n        self.stats.records.append(&mut new_stats.records);\n\n        Ok(())\n    }\n\n    /// Load a Weirpack from raw bytes, merging its rules into the current linter.\n    /// Returns test failures if any are found, and does not import in that case.\n    pub fn import_weirpack(&mut self, bytes: Vec<u8>) -> Result<JsValue, String> {\n        let pack = Weirpack::from_bytes(&bytes).map_err(|err| err.to_string())?;\n        let failures = pack.run_tests().map_err(|err| err.to_string())?;\n\n        if !failures.is_empty() {\n            let mapped: HashMap<String, Vec<WeirpackTestFailure>> = failures\n                .into_iter()\n                .map(|(rule, results)| {\n                    let failures = results\n                        .into_iter()\n                        .map(|result| WeirpackTestFailure {\n                            expected: result.expected,\n                            got: result.got,\n                        })\n                        .collect();\n                    (rule, failures)\n                })\n                .collect();\n\n            let serializer = Serializer::json_compatible();\n            let value = mapped\n                .serialize(&serializer)\n                .map_err(|err| err.to_string())?;\n            return Ok(value);\n        }\n\n        let mut group = pack.to_lint_group().map_err(|err| err.to_string())?;\n        self.lint_group.merge_from(&mut group);\n        Ok(JsValue::UNDEFINED)\n    }\n}\n\n#[wasm_bindgen]\npub fn to_title_case(text: String) -> String {\n    harper_core::make_title_case_str(&text, &PlainEnglish, &FstDictionary::curated())\n}\n\n/// A suggestion to fix a Lint.\n#[derive(Debug, Serialize, Deserialize)]\n#[wasm_bindgen]\npub struct Suggestion {\n    inner: harper_core::linting::Suggestion,\n}\n\n/// Tags the variant of suggestion.\n#[derive(Debug, Serialize, Deserialize)]\n#[wasm_bindgen]\npub enum SuggestionKind {\n    /// Replace the problematic text.\n    Replace = 0,\n    /// Remove the problematic text.\n    Remove = 1,\n    /// Insert additional text after the error.\n    InsertAfter = 2,\n}\n\n#[wasm_bindgen]\nimpl Suggestion {\n    pub(crate) fn new(inner: harper_core::linting::Suggestion) -> Self {\n        Self { inner }\n    }\n\n    /// Get the text that is going to replace the problematic section.\n    /// If [`Self::kind`] is `SuggestionKind::Remove`, this will return an empty\n    /// string.\n    pub fn get_replacement_text(&self) -> String {\n        match &self.inner {\n            harper_core::linting::Suggestion::Remove => \"\".to_string(),\n            harper_core::linting::Suggestion::ReplaceWith(chars) => chars.iter().collect(),\n            harper_core::linting::Suggestion::InsertAfter(chars) => chars.iter().collect(),\n        }\n    }\n\n    pub fn kind(&self) -> SuggestionKind {\n        match &self.inner {\n            harper_core::linting::Suggestion::Remove => SuggestionKind::Remove,\n            harper_core::linting::Suggestion::ReplaceWith(_) => SuggestionKind::Replace,\n            harper_core::linting::Suggestion::InsertAfter(_) => SuggestionKind::InsertAfter,\n        }\n    }\n}\n\n/// An error found in provided text.\n///\n/// May include zero or more suggestions that may fix the problematic text.\n#[derive(Debug, Deserialize, Serialize, Clone)]\n#[wasm_bindgen]\npub struct Lint {\n    inner: harper_core::linting::Lint,\n    /// Indexed in a proverbial JS string\n    span: Span,\n    /// The problematic text that produced this lint.\n    problem_text: String,\n    language: Language,\n}\n\n#[wasm_bindgen]\nimpl Lint {\n    pub(crate) fn new(\n        inner: harper_core::linting::Lint,\n        span: Span,\n        problem_text: String,\n        language: Language,\n    ) -> Self {\n        Self {\n            inner,\n            span,\n            problem_text,\n            language,\n        }\n    }\n\n    /// Get the content of the source material pointed to by [`Self::span`]\n    pub fn get_problem_text(&self) -> String {\n        self.problem_text.clone()\n    }\n\n    /// Get a string representing the general category of the lint.\n    pub fn lint_kind(&self) -> String {\n        self.inner.lint_kind.to_string_key()\n    }\n\n    /// Get a string representing the general category of the lint.\n    pub fn lint_kind_pretty(&self) -> String {\n        self.inner.lint_kind.to_string()\n    }\n\n    /// Equivalent to calling `.length` on the result of `suggestions()`.\n    pub fn suggestion_count(&self) -> usize {\n        self.inner.suggestions.len()\n    }\n\n    /// Get an array of any suggestions that may resolve the issue.\n    pub fn suggestions(&self) -> Vec<Suggestion> {\n        self.inner\n            .suggestions\n            .iter()\n            .map(|s| Suggestion::new(s.clone()))\n            .collect()\n    }\n\n    /// Get the location of the problematic text.\n    pub fn span(&self) -> Span {\n        self.span\n    }\n\n    /// Get a description of the error.\n    pub fn message(&self) -> String {\n        self.inner.message.clone()\n    }\n\n    /// Get a description of the error as HTML.\n    pub fn message_html(&self) -> String {\n        self.inner.message_html()\n    }\n}\n\n/// Convert Harper's character index into a UTF-16 code unit index understood by JS.\nfn char_idx_to_js_str_idx(char_idx: usize, char_str: &[char]) -> usize {\n    char_str.iter().take(char_idx).fold(0usize, |acc, ch| {\n        acc + if (*ch as u32) <= 0xFFFF { 1 } else { 2 }\n    })\n}\n\n#[wasm_bindgen]\npub fn get_default_lint_config_as_json() -> String {\n    let config =\n        LintGroup::new_curated(MutableDictionary::new().into(), Dialect::American.into()).config;\n\n    serde_json::to_string(&config).unwrap()\n}\n\n#[wasm_bindgen]\npub fn get_default_lint_config() -> JsValue {\n    let config =\n        LintGroup::new_curated(MutableDictionary::new().into(), Dialect::American.into()).config;\n\n    // Important for downstream JSON serialization\n    let serializer = Serializer::json_compatible();\n\n    config.serialize(&serializer).unwrap()\n}\n\n/// A struct that represents two character indices in a string: a start and an end.\n#[derive(Debug, Clone, Copy, Serialize, Deserialize)]\n#[wasm_bindgen]\npub struct Span {\n    pub start: usize,\n    pub end: usize,\n}\n\n#[wasm_bindgen]\nimpl Span {\n    pub fn new(start: usize, end: usize) -> Self {\n        Self { start, end }\n    }\n\n    pub fn is_empty(&self) -> bool {\n        self.len() == 0\n    }\n\n    pub fn len(&self) -> usize {\n        Into::<harper_core::Span<char>>::into(*self).len()\n    }\n}\n\nimpl Span {\n    pub fn to_js_indices(&self, source: &[char]) -> Self {\n        Self::new(\n            char_idx_to_js_str_idx(self.start, source),\n            char_idx_to_js_str_idx(self.end, source),\n        )\n    }\n}\n\nimpl From<Span> for harper_core::Span<char> {\n    fn from(value: Span) -> Self {\n        harper_core::Span::new(value.start, value.end)\n    }\n}\n\nimpl From<harper_core::Span<char>> for Span {\n    fn from(value: harper_core::Span<char>) -> Self {\n        Span::new(value.start, value.end)\n    }\n}\n\n/// Used exclusively for [`Linter::organized_lints`]\n#[wasm_bindgen]\n#[derive(Serialize, Deserialize, Clone)]\npub struct OrganizedGroup {\n    #[wasm_bindgen(getter_with_clone)]\n    pub group: String,\n    #[wasm_bindgen(getter_with_clone)]\n    pub lints: Vec<Lint>,\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use sysinfo::{Pid, ProcessRefreshKind, ProcessesToUpdate, System};\n\n    /// Get memory usage for the process with the given PID, in bytes.\n    ///\n    /// This will fail if the requested process does not exist.\n    #[must_use]\n    fn get_mem_usage_of_process(sys: &mut System, pid: Pid) -> Option<u64> {\n        sys.refresh_processes_specifics(\n            ProcessesToUpdate::Some(&[pid]),\n            false,\n            ProcessRefreshKind::nothing().with_memory(),\n        );\n        sys.process(pid).map(|process| process.memory())\n    }\n\n    /// If a word from another dialect is added to the user dictionary, it should be considered\n    /// part of the user's dialect as well.\n    #[test]\n    fn issue_2216() {\n        let text = \"Aeon\".to_owned();\n        let mut linter = Linter::new(Dialect::American);\n\n        linter.import_words(vec![text.clone()]);\n        dbg!(linter.dictionary.get_word_metadata_str(&text));\n\n        let lints = linter.lint(text, Language::Plain, false, None);\n        assert!(lints.is_empty());\n    }\n\n    #[test]\n    fn no_memory_leak_with_repeated_lints() {\n        let pid = Pid::from_u32(std::process::id());\n        let mut sys = System::new();\n\n        let mut prev_memory_usage = get_mem_usage_of_process(&mut sys, pid).unwrap();\n\n        if (0..10).all(|_| {\n            // Run a few times.\n            for _ in 0..10 {\n                let mut linter = Linter::new(Dialect::American);\n\n                let results = linter.lint(\n                    \"This is a grammatically correct sentence.\".to_string(),\n                    Language::Plain,\n                    false,\n                    None,\n                );\n\n                assert!(results.is_empty())\n            }\n            // Check if our process' memory usage increased.\n            let curr_memory_usage = get_mem_usage_of_process(&mut sys, pid).unwrap();\n            let memory_usage_increased = curr_memory_usage > prev_memory_usage;\n            prev_memory_usage = curr_memory_usage;\n            memory_usage_increased\n        }) {\n            panic!(\"Memory leak!\");\n        }\n    }\n}\n"
  },
  {
    "path": "justfile",
    "content": "# Format entire project\nalias fmt := format\nformat:\n  cargo fmt  \n  pnpm format\n\n# Build the shared component library\nbuild-components:\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  cd \"{{justfile_directory()}}/packages/components\"\n  pnpm install --engine-strict=false\n  pnpm build\n\n# Build the WebAssembly module\nbuild-wasm:\n  #!/usr/bin/env bash\n  cd \"{{justfile_directory()}}/harper-wasm\"\n  if [ \"${DISABLE_WASM_OPT:-0}\" -eq 1 ]; then\n    wasm-pack build --target web --no-opt\n  else\n    wasm-pack build --target web\n  fi\n\n# Build `harper.js` with all size optimizations available.\nalias build-harper-js := build-harperjs\nbuild-harperjs: build-wasm \n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  # Removes a duplicate copy of the WASM binary if Vite is left to its devices.\n  perl -pi -e 's/new URL\\(.*\\)/new URL()/g' \"{{justfile_directory()}}/harper-wasm/pkg/harper_wasm.js\"\n\n  cd \"{{justfile_directory()}}/packages/harper.js\"\n  pnpm install\n  pnpm build\n\n  # Generate API reference\n  ./docs.sh\n\n# Build the browser lint framework module\nbuild-lint-framework: build-harperjs\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  cd \"{{justfile_directory()}}/packages/lint-framework\"\n  pnpm install\n  pnpm build\n\nalias test-harper-js := test-harperjs\ntest-harperjs: build-harperjs\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  pnpm install\n  cd \"{{justfile_directory()}}/packages/harper.js\"\n  pnpm playwright install\n  pnpm test\n\n  # Test runnable examples\n  cd \"{{justfile_directory()}}/packages/harper.js/examples/commonjs-simple\"\n  pnpm start\n\ntest-obsidian: build-obsidian\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  pnpm install\n  cd \"{{justfile_directory()}}/packages/obsidian-plugin\"\n  pnpm playwright install\n  pnpm test\n\nalias dev-wordpress := dev-wp\ndev-wp: build-harperjs\n  #!/usr/bin/env bash\n\n  set -eo pipefail\n\n  cd \"{{justfile_directory()}}/packages/wordpress-plugin\"\n  pnpm install\n  pnpm wp-now start &\n  pnpm start \n\n# Build the WordPress plugin\nalias build-wordpress := build-wp\nbuild-wp: build-harperjs\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  cd \"{{justfile_directory()}}/packages/wordpress-plugin\"\n  pnpm install\n  pnpm build\n  pnpm plugin-zip\n\n# Compile the website's dependencies and start a development server. Note that if you make changes to `harper-wasm`, you will have to re-run this command.\ndev-web: build-harperjs build-lint-framework build-components\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  cd \"{{justfile_directory()}}/packages/web\"\n  pnpm install\n  pnpm dev\n\n# Build the Harper website.\nbuild-web: build-harperjs build-lint-framework build-components\n  #!/usr/bin/env bash\n  set -eo pipefail\n  \n  cd \"{{justfile_directory()}}/packages/web\"\n  pnpm install\n  pnpm build\n\n# Build the Harper Obsidian plugin.\nbuild-obsidian: build-harperjs\n  #!/usr/bin/env bash\n  set -eo pipefail\n  \n  cd \"{{justfile_directory()}}/packages/obsidian-plugin\"\n\n  pnpm install\n  pnpm build\n\n  zip harper-obsidian-plugin.zip manifest.json main.js\n\n# Build the Chrome extension.\nalias build-chrome := build-chrome-plugin\nalias build-chrome-extension := build-chrome-plugin\nbuild-chrome-plugin: build-harperjs build-lint-framework build-components\n  #!/usr/bin/env bash\n  set -eo pipefail\n  \n  cd \"{{justfile_directory()}}/packages/chrome-plugin\"\n\n  pnpm install \n  pnpm zip-for-chrome\n\n# Start a development server for the Chrome extension.\nalias dev-chrome := dev-chrome-plugin\nalias dev-chrome-extension := dev-chrome-plugin\ndev-chrome-plugin: build-harperjs build-lint-framework build-components\n  #!/usr/bin/env bash\n  set -eo pipefail\n  \n  cd \"{{justfile_directory()}}/packages/chrome-plugin\"\n\n  pnpm install \n  pnpm dev\n\n# Build the Firefox extension.\nalias build-firefox := build-firefox-plugin\nalias build-firefox-extension := build-firefox-plugin\nbuild-firefox-plugin: build-harperjs build-lint-framework build-components\n  #!/usr/bin/env bash\n  set -eo pipefail\n  \n  cd \"{{justfile_directory()}}/packages/chrome-plugin\"\n\n  pnpm install \n  pnpm zip-for-firefox\n\nalias test-chrome := test-chrome-plugin\nalias test-chrome-extension := test-chrome-plugin\ntest-chrome-plugin: build-chrome-plugin\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  pnpm install\n  cd \"{{justfile_directory()}}/packages/chrome-plugin\"\n  pnpm playwright install\n\n  # For environments without displays like CI servers or containers\n  if [[ \"$(uname)\" == \"Linux\" ]] && [[ -z \"$DISPLAY\" ]]; then\n    xvfb-run --auto-servernum pnpm test --project chromium\n  else\n    pnpm test --project chromium\n  fi\n\n\nalias test-firefox := test-firefox-plugin\nalias test-firefox-extension := test-firefox-plugin\ntest-firefox-plugin: build-firefox-plugin\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  pnpm install\n  cd \"{{justfile_directory()}}/packages/chrome-plugin\"\n  pnpm playwright install\n  # For environments without displays like CI servers or containers\n  if [[ \"$(uname)\" == \"Linux\" ]] && [[ -z \"$DISPLAY\" ]]; then\n    xvfb-run --auto-servernum pnpm test --project firefox\n  else\n    pnpm test --project firefox \n  fi\n\n# Run VSCode plugin unit and integration tests.\nalias test-vscode-extension := test-vscode\ntest-vscode:\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  ext_dir=\"{{justfile_directory()}}/packages/vscode-plugin\"\n  bin_dir=\"${ext_dir}/bin\"\n\n  if ! [[ -d \"$bin_dir\" ]]; then\n    mkdir \"$bin_dir\"\n  fi\n\n  echo Building binaries\n  cargo build --release -q\n\n  cp \"{{justfile_directory()}}/target/release/harper-ls\"* \"$bin_dir\"\n\n  cd \"$ext_dir\"\n\n  pnpm install\n  # For environments without displays like CI servers or containers\n  if [[ \"$(uname)\" == \"Linux\" ]] && [[ -z \"$DISPLAY\" ]]; then\n    xvfb-run --auto-servernum pnpm test\n  else\n    pnpm test\n  fi\n\n  # Over time, VSCode test versions take up space that can be hard to track down\n  if [[ -d .vscode-test ]]; then\n    all_versions=$(ls -1 .vscode-test | grep \"^vscode-\" | sort -V)\n    latest_version=$(echo \"$all_versions\" | tail -n 1)\n    old_versions=$(echo \"$all_versions\" | sed '$d')  # Delete last line instead\n    if [[ -n \"$old_versions\" ]]; then\n      count=$(echo \"$old_versions\" | wc -l)\n      echo \"$old_versions\" | xargs -I {} rm -rf .vscode-test/{}\n      echo \"✓ Deleted $count old VSCode versions, keeping $latest_version\"\n    else\n      echo \"✓ No old versions to clean (keeping $latest_version)\"\n    fi\n  fi\n\n# Build and package the Visual Studio Code extension.\n# If `target` is passed, it is assumed that `harper-ls` has been compiled beforehand and is in `packages/vscode-plugin/bin`. This is used in CI.\nalias package-vscode-extension := package-vscode\npackage-vscode target=\"\":\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  ext_dir=\"{{justfile_directory()}}/packages/vscode-plugin\"\n  bin_dir=\"${ext_dir}/bin\"\n\n  cp LICENSE \"$ext_dir\"\n\n  if [[ -z \"{{target}}\" ]]; then\n    echo Building binaries\n    cargo build --release -q\n\n    if ! [[ -d \"$bin_dir\" ]]; then\n      mkdir \"$bin_dir\"\n    fi\n\n    cp \"{{justfile_directory()}}/target/release/harper-ls\"* \"$bin_dir\"\n  fi\n\n  cd \"$ext_dir\"\n\n  pnpm install\n  if [[ -n \"{{target}}\" ]]; then\n    pnpm package --target {{target}}\n  else\n    pnpm package\n  fi\n\nupdate-vscode-linters:\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  linters_file=\"$(mktemp)\"\n  output_file=\"$(mktemp)\"\n  trap 'rm -f \"$linters_file\" \"$output_file\"' EXIT\n\n  cargo run --bin harper-cli -- config |\n    jq 'with_entries(.key |= \"harper.linters.\" + . |\n      .value |= {\n        \"scope\": \"resource\",\n        \"type\": \"boolean\",\n        \"default\": .default_value,\n        \"description\": .description\n      }\n    )' > \"$linters_file\"\n\n  cd \"{{justfile_directory()}}/packages/vscode-plugin\"\n\n  jq 'walk(\n    if type == \"object\" then\n      with_entries(select(.key | startswith(\"harper.linters\") | not))\n    end\n  )' package.json |\n    jq --slurpfile linters \"$linters_file\" \\\n      '.contributes.configuration.properties += $linters[0]' > \\\n      \"$output_file\"\n  mv \"$output_file\" package.json\n  just format\n\n# Run Rust formatting and linting.\ncheck-rust: audit-dictionary\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  cargo fmt -- --check\n  cargo clippy -- -Dwarnings -D clippy::dbg_macro -D clippy::needless_raw_string_hashes\n\n  cargo hack check --each-feature\n\n# Perform format and type checking.\ncheck: check-rust check-js build-web\n\ncheck-js: build-harperjs build-lint-framework build-components\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  pnpm install\n  pnpm check\n\n  # Needed because Svelte has special linters\n  cd \"{{justfile_directory()}}/packages/web\"\n  pnpm check\n\n# Populate build caches and install necessary local tooling (tools callable via `pnpm run <tool>`).\nsetup: build-harperjs test-harperjs test-vscode build-web build-wp build-obsidian build-chrome-plugin\n\n# Perform full format and type checking, build all projects and run all tests. Run this before pushing your code.\nprecommit: check test build-harperjs build-obsidian build-web build-wp build-firefox-plugin build-chrome-plugin \n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  echo Building binaries\n  cargo build --all-targets -q\n\n# Install `harper-cli` and `harper-ls` to your machine via `cargo`\ninstall:\n  cargo install --path harper-ls --locked \n  cargo install --path harper-cli --locked \n\n# Run `harper-cli` on the Harper repository\ndogfood:\n  #!/usr/bin/env bash\n  cargo build --release\n  \n  if command -v fd &> /dev/null; then\n    # Use fd if available (faster and more user-friendly)\n    fd_cmd() { fd -e rs; }\n  else\n    # Fall back to find if fd is not installed\n    fd_cmd() { find . -name \"*.rs\" -type f; }\n  fi\n\n  fd_cmd | while read -r file; do\n    echo \"Linting $file\"\n    ./target/release/harper-cli lint \"$file\"\n  done\n\ntest-rust:\n  echo Running all Rust tests\n  cargo test -q\n\n# Test everything.\ntest: test-rust test-harperjs test-vscode test-obsidian test-chrome-plugin test-firefox-plugin\n\n# Use `harper-cli` to parse a provided file and print out the resulting tokens.\nparse file:\n  cargo run --bin harper-cli -- parse {{file}}\n\n# Lint provided inputs using Harper and print the results.\n# The inputs can be files, directories, or a string on the command line.\n# If no inputs are provided, lint stdin.\nlint *inputs:\n  cargo run --bin harper-cli -- lint {{inputs}}\n\n# Show the spans of the parsed tokens overlapped in the provided file.\nspans file:\n  cargo run --bin harper-cli -- spans {{file}}\n\n# Add a noun to Harper's curated dictionary.\nalias add-noun := addnoun\naddnoun noun:\n  #!/usr/bin/env bash\n  DICT_FILE=./harper-core/dictionary.dict \n\n  cat $DICT_FILE | grep \"^{{noun}}/\"\n\n  if [ $? -eq 0 ]\n  then\n    echo \"That noun may already be in the dictionary.\"\n    exit 0\n  fi\n\n  # 'g': possessive -'s suffix for both common and proper nouns\n  flags='g'\n\n  # If the first letter is uppercase, treat it as a proper noun\n  if [[ \"{{noun}}\" =~ ^[A-Z] ]]; then\n    # 'O': proper noun, usually no plural\n    flags+='O'\n  else\n    # 'N': (common) singular noun, 'S': plural -(e)s\n    flags+='NS'\n  fi\n\n  # Echo the noun with its flags to the dictionary file\n  [[ -s $DICT_FILE && -n $(tail -c1 \"$DICT_FILE\") ]] && echo >> \"$DICT_FILE\"\n  echo \"{{noun}}/$flags\" >> \"$DICT_FILE\"\n\n# Search Harper's curated dictionary for a specific word\nsearch-dict-for word:\n  #!/usr/bin/env bash\n  if command -v rg > /dev/null; then\n    cargo run --bin harper-cli -- words | rg {{word}}\n  else\n    cargo run --bin harper-cli -- words | grep {{word}}\n  fi\n\n# Find words in the user's `harper-ls/dictionary.txt` for words already in the curated dictionary.\nuser-dict-overlap:\n  #!/usr/bin/env bash\n  USER_DICT_FILE=\"$HOME/.config/harper-ls/dictionary.txt\"\n\n  while read -r line; do\n    just searchdictfor $line 2> /dev/null\n  done < $USER_DICT_FILE\n\n# Get the metadata associated with one or more words in Harper's dictionary as JSON.\nget-metadata *words:\n  cargo run --bin harper-cli -- metadata {{words}}\n\nget-metadata-brief *words:\n  cargo run --bin harper-cli -- metadata --brief {{words}}\n\n# Get all the forms of a word using the affixes.\nget-forms word:\n  cargo run --bin harper-cli -- forms {{word}}\n\n# Get a random sample of words from Harper's dictionary and list all forms of each.\nsample-forms count:\n  #!/usr/bin/env bash\n  set -eo pipefail\n  DICT_FILE=./harper-core/dictionary.dict \n  # USER_DICT_FILE=\"$HOME/.config/harper-ls/dictionary.txt\"\n\n  if [ \"{{count}}\" -eq 0 ]; then\n    exit 0\n  fi\n\n  total_lines=$(wc -l < $DICT_FILE)\n  \n  # Cross-platform random line selection\n  if command -v shuf >/dev/null 2>&1; then\n    words=$(shuf -n \"{{count}}\" \"$DICT_FILE\")\n  elif command -v jot >/dev/null 2>&1; then\n    words=$(jot -r \"{{count}}\" 1 \"$total_lines\" | while read -r line_num; do \\\n      sed -n \"$line_num\"p \"$DICT_FILE\"; \\\n    done)\n  else\n    echo \"Error: Neither 'shuf' nor 'jot' found. Cannot generate random words.\" >&2\n    exit 1\n  fi\n  \n  cargo run --bin harper-cli -- forms $words\n\nbump-versions: update-vscode-linters\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  cargo ws version --no-git-push --no-git-tag --force '*'\n\n  HARPER_VERSION=$(tq --raw --file harper-core/Cargo.toml .package.version)\n\n  cd \"{{justfile_directory()}}/packages/harper.js\"\n\n  cat package.json | jq \".version = \\\"$HARPER_VERSION\\\"\" > package.json.edited\n  mv package.json.edited package.json\n\n  cd \"{{justfile_directory()}}/packages/vscode-plugin\"\n\n  cat package.json | jq \".version = \\\"$HARPER_VERSION\\\"\" > package.json.edited\n  mv package.json.edited package.json\n\n  cd \"{{justfile_directory()}}/packages/chrome-plugin\"\n\n  cat package.json | jq \".version = \\\"$HARPER_VERSION\\\"\" > package.json.edited\n  mv package.json.edited package.json\n\n  cd \"{{justfile_directory()}}/packages/obsidian-plugin\"\n\n  cat package.json | jq \".version = \\\"$HARPER_VERSION\\\"\" > package.json.edited\n  mv package.json.edited package.json\n\n  just format\n\n  lazygit\n\n# Enter an infinite loop of property testing until a bug is found.\nfuzz:\n  #!/usr/bin/env bash\n  \n  while true\n  do\n      QUICKCHECK_TESTS=100000 cargo test\n      if [[ x$? != x0 ]] ; then\n          exit $?\n      fi\n  done\n\nregister-linter module name:\n  #!/usr/bin/env bash\n\n  D=\"{{justfile_directory()}}/harper-core/src/linting\"\n\n  sed -i \"/pub use an_a::AnA;/a pub use {{module}}::{{name}};\" \"$D/mod.rs\"\n  sed -i \"/use super::an_a::AnA;/a use super::{{module}}::{{name}};\" \"$D/lint_group.rs\"\n  sed -i \"/insert_expr_rule!(ChockFull, true);/a \\ \\ \\ \\ insert_struct_rule!({{name}}, true);\" \"$D/lint_group.rs\"\n  just format\n\n# Print annotations and their descriptions from annotations.json\nalias print-affixes := print-annotations\nalias get-annotations := print-annotations\nalias list-annotations := print-annotations\nalias show-annotations := print-annotations\nprint-annotations:\n  #! /usr/bin/env node\n  const affixesData = require('{{justfile_directory()}}/harper-core/annotations.json');\n  const allEntries = {\n    ...affixesData.affixes || {},\n    ...affixesData.properties || {}\n  };\n  \n  // Calculate the maximum description length for alignment\n  const entries = Object.entries(allEntries);\n  const maxDescLength = entries.reduce((max, [flag, fields]) => {\n    const description = fields['#'] || '';\n    const lineLength = flag.length + 2 + description.length; // flag + ': ' + description\n    return Math.max(max, lineLength);\n  }, 0);\n  \n  entries.sort((a, b) => a[0].localeCompare(b[0])).forEach(([flag, fields]) => {\n    const description = fields['#'] || '';\n    const comment = fields['//'] || null;\n    if (description) {\n      const line = `${flag}: ${description}`;\n      const padding = ' '.repeat(Math.max(1, maxDescLength - line.length + 2));\n      console.log(line + (comment ? `${padding}// ${comment}` : ''));\n    }\n  });\n  \n  console.log('Available letters for new flags:', [...Array.from({length: 26}, (_, i) => \n    [String.fromCharCode(65 + i), String.fromCharCode(97 + i)]\n  ).flat()].filter(letter => !Object.keys(allEntries).includes(letter)).sort().join(' '));\n  console.log('Available digits for new flags:', [...Array.from({length: 10}, (_, i) => \n    String(i)\n  )].filter(digit => !Object.keys(allEntries).includes(digit)).sort().join(' '));\n  console.log('Available symbols for new flags:',\n    [...Array.from('!\"#$%&\\'()*+,-./:;<=>?@\\[\\\\\\]\\^_`{|}~')]\n  .filter(symbol => !Object.keys(allEntries).includes(symbol)).sort().join(' '));\n  console.log('Available Latin-1 characters for new flags:'); \n  [...Array.from({length: 256-160}, (_, i) => String.fromCharCode(160 + i))]\n    .filter(char => !Object.keys(allEntries).includes(char) && char.charCodeAt(0) !== 160 && char.charCodeAt(0) !== 173)\n    .sort()\n    .join(' ')\n    .match(/.{1,64}/g)\n    .forEach(line => console.log('  ' + line));\n    \n# Get the most recent changes to the curated dictionary. Includes an optional argument to specify the number of commits to look back. Defaults to 1.\nnewest-dict-changes *numCommits:\n  #! /usr/bin/env node\n\n  const { exec } = require('child_process');\n\n  const DICT_FILE = 'harper-core/dictionary.dict';\n\n  const [RST, BOLD, DIM, ITAL, NORM] = [0, 1, 2, 3, 22].map(c => `\\x1b[${c}m`);\n  const [RED, GRN, YLW, BLU, MGN, CYN, WHT] = [1, 2, 3, 4, 5, 6, 7].map(c => `\\x1b[${30+c}m`);\n\n  const argv = [...process.argv];\n\n  const [showHashes, showDiff] = [\"--show-hashes\", \"--show-diff\"].map(flag => argv.includes(flag) && argv.splice(argv.indexOf(flag), 1));\n\n  // uncomment first line to use in justfile, comment out second line to use standalone\n  const numCommits = \"{{numCommits}}\" || 1;\n  // const numCommits = argv[2] || 1;\n\n  // Command to get the last commit hash that modified the specified file\n  const hashCommand = `git log --no-merges -n ${numCommits} --format=\"%H\" -- ${DICT_FILE}`;\n  console.log(`${MGN}${BOLD}GET HASHES${NORM}: ${hashCommand}${RST}`);\n\n  // Execute the command to get the hash\n  exec(hashCommand, (error, hashString, stderr) => {\n    if (error) return console.error(`Error executing command: ${error.message}`);\n    if (stderr) return console.error(`stderr: ${stderr}`);\n\n    // avoid empty last line\n    const longHashes = hashString.trim().split('\\n');\n    if (showHashes) console.log(longHashes.length, longHashes);\n\n    if (longHashes.length < 1) {\n      console.error('No hash(es) returned. Exiting.');\n      process.exit(1);\n    }\n\n    // keep the last line and second last if there's more than one hash\n    const [hash2, hash1] = longHashes.slice(-2).map((h) => h.substring(0, 7));\n\n    // Command to get the word-level diff using the retrieved hash, using either one or two hashes\n    const hashes = longHashes.length == 1 ? `${hash2}` : `${hash1} ${hash2}`;\n    const diffCommand = `git diff --word-diff --no-color --unified=0 ${hashes} -- ${DICT_FILE}`;\n    console.log(`${MGN}${BOLD}GET DIFF${NORM}: ${diffCommand}${RST}`);\n\n    // Execute the diff command with a large buffer to avoid failing to handle large diffs such as:\n    // git diff --word-diff --no-color --unified=0 0761702 baeb08e -- harper-core/dictionary.dict\n    exec(diffCommand, { maxBuffer: 2048 * 1024 }, (diffError, diffString, diffStderr) => {\n      if (diffError) {\n        console.error(`Error executing diff command: ${diffError.message}`);\n        return;\n      }\n      if (diffStderr) return console.error(`stderr: ${diffStderr}`);\n\n      if (showDiff) console.log(`DIFFSTART\\n${diffString}\\nDIFFEND`);\n\n      // uncomment first line to use in justfile, comment out second line to use standalone\n      const affixes = require('{{justfile_directory()}}/harper-core/annotations.json').affixes;\n      // const affixes = require('./harper-core/annotations.json').affixes;\n\n      diffString.split(\"\\n\").forEach(line => {\n        const match = line.match(/^(?:\\[-(.*?)-\\])?(?:\\{\\+(.*?)\\+\\})?$/);\n        if (match) {\n          let [, before, after] = match;\n\n          if (before && after) {\n            // An entry changed\n            const [[oldword, oldaff], [newword, newaff]] = [before, after].map(e => e.split('/'));\n            if (oldword === newword) {\n              if (oldaff !== newaff) {\n                const [oldRest, newRest] = [oldaff, newaff].map(aff => aff ? `${DIM}/${aff}${RST}`: '');\n                console.log(`${BOLD}${CYN}CHG${RST} # ${oldword}${oldRest} -> ${newRest}`);\n                const [oldNorm, newNorm] = [oldaff, newaff].map(a => a ? a.split(''): [])\n                                                           .map(a => new Set(a))\n                                                           .map(a => Array.from(a))\n                                                           .map(a => a.sort());\n                const removed = oldNorm.filter(o => !newNorm.includes(o));\n                const added = newNorm.filter(n => !oldNorm.includes(n));\n                const [addStr, remStr] = [added, removed]\n                  .map(a => a.map(a => `    ${BOLD}${ITAL}${a}${RST} -> ${ (affixes[a] && affixes[a]['#']) || '???' }`)\n                             .join('\\n')\n                  );\n                if (removed.length > 0) console.log(`${RED}  ${BOLD}REMOVED${RST}:\\n${remStr}`);\n                if (added.length > 0) console.log(`${GRN}  ${BOLD}ADDED${RST}:\\n${addStr}`);\n              } else {\n                // should never happen\n                console.log(`${YLW} ?NO AFFIX CHG? '${oldaff}' -> '${newaff}'${RST}`);\n              }\n            } else {\n              // The word changed rather than its affixes\n              console.log(`${YLW}  ${BOLD}CHANGED${RST} ${RED}${oldword}${RST} -> ${GRN}${newword}${RST}`);\n            }\n          } else if (before || after) {\n            // An entry was added or removed\n            const [entry, symbol, action, colour] = before ? [before, \"-\", 'DEL', RED] : [after, \"+\", 'ADD', GRN];\n            const [word, affix] = entry.split('/');\n            console.log(`${colour}${BOLD}${action}${RST} ${symbol} ${word}${ affix ? `${DIM}/${affix}` : '' }${RST}`);\n          }\n        }\n      });\n    });\n  });\n\n# Print the input string or file with nominal phrases highlighted. These are generated using Harper's chunker.\nalias get-nominal-phrases := get-nps\nalias get-noun-phrases := get-nps\nget-nps text:\n  cargo run --bin harper-cli -- nominal-phrases \"{{text}}\"\n\n# Suggest annotations for a potential new property annotation\nsuggest-annotation input:\n  #! /usr/bin/env node\n  const affixesData = require('{{justfile_directory()}}/harper-core/annotations.json');\n  const allEntries = {\n    ...affixesData.affixes || {},\n    ...affixesData.properties || {}\n  };\n  \n  // Get all used flags\n  const usedFlags = new Set(Object.keys(allEntries));\n  \n  // Process input string and check both cases\n  const input = '{{input}}';\n  const normalizedInput = input.replace(/\\s/g, '');\n  const uniqueChars = [...new Set(normalizedInput.toUpperCase() + normalizedInput.toLowerCase())];\n  \n  console.log(`Checking input: \"${input}\"\\n${'='.repeat(50)}`);\n  \n  // Check each character in input\n  const availableChars = [...new Set(uniqueChars)]\n    .filter(char => !usedFlags.has(char));\n  \n  if (availableChars.length > 0) {\n    console.log(`These characters of \"${input}\" are available to use for new annotations:`);\n    availableChars.forEach(char => console.log(`  '${char}' (${char.charCodeAt(0)})`));\n  } else {\n    const inputChars = new Set(normalizedInput.toLowerCase() + normalizedInput.toUpperCase());\n    const renamable = Object.entries(allEntries)\n      .filter(([flag, entry]) => entry.rename_ok && inputChars.has(flag))\n      .sort((a, b) => a[0].localeCompare(b[0]));\n    \n    if (renamable.length > 0) {\n      console.log(`None of the characters of \"${input}\" are available to use for new annotations, but these ones are OK to be moved to make way for new annotations:`);\n      renamable.forEach(([flag, entry]) => {\n        console.log(`  '${flag}': ${entry['#'] || 'No description'}${entry['//'] ? ` (${entry['//']})` : ''}`);\n      });\n    } else {\n      console.log(`None of the characters of \"${input}\" are available to use for new annotations, and none of them are OK to be moved to make way for new annotations.`);\n    }\n  }\n\n# Audit the curated dictionary for any issues.\nalias audit-dict := audit-dictionary\naudit-dictionary DIR=\"harper-core\":\n  cargo run --bin harper-cli -- audit-dictionary {{DIR}}\n\nalias test-snapshots := run-snapshots\nalias test-pos-tagger := run-snapshots\nalias test-pos-tags := run-snapshots\nalias test-pos-tagging := run-snapshots\nrun-snapshots:\n  #!/usr/bin/env bash\n  set -eo pipefail\n\n  cd harper-core\n  cargo test -- test_pos_tagger test_most_lints\n"
  },
  {
    "path": "package.json",
    "content": "{\n\t\"private\": true,\n\t\"scripts\": {\n\t\t\"check-dependency-version-consistency\": \"check-dependency-version-consistency\",\n\t\t\"check\": \"biome check --diagnostic-level=error\",\n\t\t\"format\": \"biome check --write .\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22\",\n\t\t\"pnpm\": \"^10.6.3\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@babel/runtime\": \"catalog:\",\n\t\t\"@biomejs/biome\": \"2.3.3\",\n\t\t\"check-dependency-version-consistency\": \"^5.0.0\",\n\t\t\"typescript\": \"catalog:\"\n\t},\n\t\"packageManager\": \"pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39\"\n}\n"
  },
  {
    "path": "packages/chrome-plugin/.editorconfig",
    "content": "# EditorConfig is awesome: https://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n# Unix-style newlines with a newline ending every file\n[*]\nend_of_line = lf\ninsert_final_newline = true\n\n# Matches multiple files with brace expansion notation\n# Set default charset\n[*.{js,jsx,ts,tsx,md}]\ncharset = utf-8\nindent_style = space\nindent_size = 2\ntab_width = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n\n# Matches the exact files either package.json or .travis.yml\n[{package.json,.travis.yml}]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": "packages/chrome-plugin/.gitignore",
    "content": "# See https://help.github.com/ignore-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n\n# testing\n/coverage\n\n# production\n/build\n/package\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n.history\n*.log\n\n# secrets\nsecrets.*.js\n\npublic/wasm\n\n# Playwright\nnode_modules/\n/test-results/\n/playwright-report/\n/blob-report/\n/playwright/.cache/\n"
  },
  {
    "path": "packages/chrome-plugin/.npmignore",
    "content": "# OS \n.DS_Store\n\n# ignore node dependency directories & lock\nnode_modules\nyarn.lock\npnpm-lock.yaml\npackage-lock.json\n\n# ignore log files and local\n*.log\n*.local\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n.history\n\n# ignore compiled files\nbuild\ntypes\ncoverage\n\n# ignore ide settings\n.idea\n.vscode\n"
  },
  {
    "path": "packages/chrome-plugin/CHANGELOG.md",
    "content": "# CHANGELOG\n\n```txt\nSummary\n  1. document grouping follow 'SemVer2.0' protocol\n  2. use 'PATCH' as a minimum granularity\n  3. use concise descriptions\n  4. type: feat \\ fix \\ update \\ perf \\ remove \\ docs \\ chore\n  5. version timestamp follow the yyyy.MM.dd format\n```\n\n## 0.0.0 [2025.04.07]\n\n- feat: initial\n- feat: generator by ![create-chrome-ext](https://github.com/guocaoyi/create-chrome-ext)\n"
  },
  {
    "path": "packages/chrome-plugin/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2025-present, no one\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "packages/chrome-plugin/app.css",
    "content": "@import \"tailwindcss\";\n@import \"components/components.css\";\n\n@custom-variant dark (&:where(.dark, .dark *));\n\n@theme {\n\t--font-sans: \"Atkinson Hyperlegible\", sans-serif;\n\t--font-serif: Domine, serif;\n\n\t--color-primary-50: #fef4e7; /* honey bronze */\n\t--color-primary-100: #fce9cf;\n\t--color-primary-200: #f9d49f;\n\t--color-primary-300: #f7be6e;\n\t--color-primary-400: #f4a83e;\n\t--color-primary: #f1920e;\n\t--color-primary-600: #c1750b;\n\t--color-primary-700: #915808;\n\t--color-primary-800: #603b06;\n\t--color-primary-900: #301d03;\n\t--color-primary-950: #221402;\n\n\t--color-accent-50: #fee7e9; /* hot fuchsia */\n\t--color-accent-100: #fccfd3;\n\t--color-accent-200: #f99fa6;\n\t--color-accent-300: #f76e7a;\n\t--color-accent-400: #f43e4d;\n\t--color-accent: #f10e21;\n\t--color-accent-600: #c10b1a;\n\t--color-accent-700: #910814;\n\t--color-accent-800: #60060d;\n\t--color-accent-900: #300307;\n\t--color-accent-950: #220205;\n\n\t--color-cream: #fef4e7; /* simple cream */\n\t--color-cream-100: #fce9cf;\n\t--color-cream-200: #f9d49f;\n\t--color-cream-300: #f7be6e;\n\t--color-cream-400: #f4a83e;\n\t--color-cream-500: #f1920e;\n\t--color-cream-600: #c1750b;\n\t--color-cream-700: #915808;\n\t--color-cream-800: #603b06;\n\t--color-cream-900: #301d03;\n\t--color-cream-950: #221402;\n\n\t--color-champagne-mist-50: #fef4e7;\n\t--color-champagne-mist-100: #fce9cf;\n\t--color-champagne-mist-200: #fad49e;\n\t--color-champagne-mist-300: #f7be6e;\n\t--color-champagne-mist-400: #f5a83d;\n\t--color-champagne-mist-500: #f2930d;\n\t--color-champagne-mist-600: #c2750a;\n\t--color-champagne-mist-700: #915808;\n\t--color-champagne-mist-800: #613b05;\n\t--color-champagne-mist-900: #301d03;\n\t--color-champagne-mist-950: #221502;\n\n\t--color-white: #fffdfa;\n\t--color-white-100: #fceacf;\n\t--color-white-200: #fad59e;\n\t--color-white-300: #f7c06e;\n\t--color-white-400: #f5ab3d;\n\t--color-white-500: #f2960d;\n\t--color-white-600: #c2780a;\n\t--color-white-700: #915a08;\n\t--color-white-800: #613c05;\n\t--color-white-900: #301e03;\n\t--color-white-950: #221502;\n}\n\ncode {\n\t@apply bg-primary-100 rounded p-1 dark:text-black;\n}\n\n#app {\n\t@apply min-h-screen bg-white text-black dark:bg-black dark:text-white transition-colors duration-150;\n\n\tfont-family:\n\t\tAtkinson Hyperlegible,\n\t\tsans-serif;\n}\n\nh1,\nh2,\nh3,\nh4 {\n\tfont-family: Domine, serif;\n}\n"
  },
  {
    "path": "packages/chrome-plugin/options.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"UTF-8\" />\n  <link rel=\"icon\" href=\"/logo.png\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>Harper Settings</title>\n\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n<link\n\thref=\"https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400;1,700&family=Domine:wght@400..700&display=swap\"\n\trel=\"stylesheet\"\n/>\n\n<link\n\thref=\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap\"\n\trel=\"stylesheet\"\n/>\n</head>\n\n<body>\n  <div id=\"app\"></div>\n  <script type=\"module\" src=\"/src/options/index.ts\"></script>\n</body>\n\n</html>\n"
  },
  {
    "path": "packages/chrome-plugin/package.json",
    "content": "{\n\t\"name\": \"chrome-plugin\",\n\t\"displayName\": \"chrome-plugin\",\n\t\"version\": \"1.12.0\",\n\t\"author\": \"no one\",\n\t\"description\": \"The private grammar checker for 21st Century English\",\n\t\"type\": \"module\",\n\t\"license\": \"Apache-2.0\",\n\t\"keywords\": [\n\t\t\"chrome-extension\",\n\t\t\"svelte\",\n\t\t\"vite\",\n\t\t\"create-chrome-ext\"\n\t],\n\t\"engines\": {\n\t\t\"node\": \">=14.18.0\"\n\t},\n\t\"scripts\": {\n\t\t\"dev\": \"vite\",\n\t\t\"build\": \"vite build -l warn\",\n\t\t\"preview\": \"vite preview\",\n\t\t\"fmt\": \"prettier --write '**/*.{svelte,ts,json,css,scss,md}'\",\n\t\t\"zip-for-chrome\": \"TARGET_BROWSER=chrome npm run build && node src/zip.js harper-chrome-plugin.zip\",\n\t\t\"zip-for-firefox\": \"TARGET_BROWSER=firefox npm run build && node src/zip.js harper-firefox-plugin.zip\",\n\t\t\"test\": \"playwright test --headed --reporter=dot\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@crxjs/vite-plugin\": \"^2.3.0\",\n\t\t\"@playwright/test\": \"^1.58.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^4.0.0\",\n\t\t\"@types/chrome\": \"^0.0.246\",\n\t\t\"@types/lodash-es\": \"^4.17.12\",\n\t\t\"@types/node\": \"catalog:\",\n\t\t\"flowbite\": \"^3.1.2\",\n\t\t\"gulp\": \"^5.0.0\",\n\t\t\"gulp-zip\": \"^6.0.0\",\n\t\t\"http-server\": \"^14.1.1\",\n\t\t\"playwright-webextext\": \"^0.0.4\",\n\t\t\"prettier\": \"^3.1.0\",\n\t\t\"prettier-plugin-svelte\": \"^3.2.6\",\n\t\t\"rollup-plugin-copy\": \"^3.5.0\",\n\t\t\"svelte\": \"^5.0.0\",\n\t\t\"svelte-preprocess\": \"^6.0.0\",\n\t\t\"tslib\": \"^2.6.2\",\n\t\t\"typescript\": \"^5.5.0\",\n\t\t\"vite\": \"^5.4.10\",\n\t\t\"@tailwindcss/vite\": \"^4.1.4\",\n\t\t\"tailwindcss\": \"^4.1.4\"\n\t},\n\t\"dependencies\": {\n\t\t\"@fortawesome/free-solid-svg-icons\": \"^7.1.0\",\n\t\t\"@webcomponents/custom-elements\": \"^1.6.0\",\n\t\t\"components\": \"workspace:*\",\n\t\t\"harper.js\": \"workspace:*\",\n\t\t\"lint-framework\": \"workspace:*\",\n\t\t\"lodash-es\": \"^4.17.21\",\n\t\t\"lru-cache\": \"^11.1.0\",\n\t\t\"svelte-fa\": \"^4.0.4\"\n\t}\n}\n"
  },
  {
    "path": "packages/chrome-plugin/playwright.config.ts",
    "content": "import { defineConfig, devices } from '@playwright/test';\n\n/**\n * See https://playwright.dev/docs/test-configuration.\n */\nexport default defineConfig({\n\ttestDir: './tests',\n\tfullyParallel: true,\n\t/* Fail the build on CI if you accidentally left test.only in the source code. */\n\tforbidOnly: !!process.env.CI,\n\t/* Retry on CI only */\n\tretries: process.env.CI ? 4 : 0,\n\t/* Opt out of parallel tests on CI. */\n\tworkers: process.env.CI ? 1 : undefined,\n\t/* Reporter to use. See https://playwright.dev/docs/test-reporters */\n\treporter: 'html',\n\tuse: {\n\t\t/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */\n\t\ttrace: 'on-first-retry',\n\t},\n\t/** A half hour */\n\tglobalTimeout: 1800000,\n\twebServer: {\n\t\tcommand: 'pnpm exec http-server ./tests/pages -p 8081 -a 127.0.0.1',\n\t\turl: 'http://127.0.0.1:8081',\n\t\treuseExistingServer: true,\n\t\tstdout: 'pipe',\n\t\tstderr: 'pipe',\n\t},\n\t/* Configure projects for major browsers */\n\tprojects: [\n\t\t{\n\t\t\tname: 'chromium',\n\t\t\tuse: { ...devices['Desktop Chrome'] },\n\t\t},\n\t\t{\n\t\t\tname: 'firefox',\n\t\t\tuse: { ...devices['Desktop Firefox'] },\n\t\t},\n\t],\n});\n"
  },
  {
    "path": "packages/chrome-plugin/popup.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>Harper: The Private Grammar Checker</title>\n\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n<link\n\thref=\"https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400;1,700&family=Domine:wght@400..700&display=swap\"\n\trel=\"stylesheet\"\n/>\n\n<link\n\thref=\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap\"\n\trel=\"stylesheet\"\n/>\n</head>\n\n<body>\n  <div id=\"app\"></div>\n  <script type=\"module\" src=\"/src/popup/index.ts\"></script>\n</body>\n\n</html>\n"
  },
  {
    "path": "packages/chrome-plugin/public/google-docs-bridge-request-handler.js",
    "content": "/**\n * LSP type-import marker for shared protocol typedefs.\n * @typedef {import('./google-docs-protocol.js').GoogleDocsGetRectsRequest} GoogleDocsGetRectsRequest\n * @typedef {import('./google-docs-protocol.js').GoogleDocsReplaceTextRequest} GoogleDocsReplaceTextRequest\n * @typedef {import('./google-docs-protocol.js').GoogleDocsRequest} GoogleDocsRequest\n * @typedef {import('./google-docs-protocol.js').GoogleDocsRequestMessage} GoogleDocsRequestMessage\n * @typedef {import('./google-docs-protocol.js').GoogleDocsResponse} GoogleDocsResponse\n * @typedef {import('./google-docs-protocol.js').GoogleDocsResponseMessage} GoogleDocsResponseMessage\n */\n\nconst PROTOCOL_VERSION = 'harper-gdocs-bridge/v1';\nconst EVENT_REQUEST = 'harper:gdocs:request';\nconst EVENT_RESPONSE = 'harper:gdocs:response';\n\n/**\n * @callback GoogleDocsGetRectsRequestHandler\n * @param {GoogleDocsGetRectsRequest} request\n * @returns {Promise<GoogleDocsResponse>|GoogleDocsResponse}\n */\n\n/**\n * @callback GoogleDocsReplaceTextRequestHandler\n * @param {GoogleDocsReplaceTextRequest} request\n * @returns {Promise<GoogleDocsResponse>|GoogleDocsResponse}\n */\n\n/**\n * Request dispatcher used by the Google Docs bridge (main-world script).\n * It mirrors the background-script style of request handling.\n */\nexport class GoogleDocsBridgeRequestHandler {\n\t/**\n\t * @param {{\n\t *   onGetRectsRequest: GoogleDocsGetRectsRequestHandler,\n\t *   onReplaceTextRequest: GoogleDocsReplaceTextRequestHandler\n\t * }} handlers\n\t */\n\tconstructor(handlers) {\n\t\tthis.handlers = handlers;\n\t\tthis.onRequestEventBound = this.onRequestEvent.bind(this);\n\t}\n\n\tstart() {\n\t\tdocument.addEventListener(EVENT_REQUEST, this.onRequestEventBound);\n\t}\n\n\tstop() {\n\t\tdocument.removeEventListener(EVENT_REQUEST, this.onRequestEventBound);\n\t}\n\n\t/**\n\t * @param {Event} event\n\t */\n\tasync onRequestEvent(event) {\n\t\tconst detail = /** @type {CustomEvent} */ (event).detail;\n\t\tif (!this.isRequestMessage(detail)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst requestMessage = /** @type {GoogleDocsRequestMessage} */ (detail);\n\t\tconst { request } = requestMessage;\n\t\ttry {\n\t\t\tif (request.kind === 'getRects') {\n\t\t\t\tconst response = await this.handlers.onGetRectsRequest(request);\n\t\t\t\tthis.sendResponse(requestMessage.requestId, response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (request.kind === 'replaceText') {\n\t\t\t\tconst response = await this.handlers.onReplaceTextRequest(request);\n\t\t\t\tthis.sendResponse(requestMessage.requestId, response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.sendErrorResponse(\n\t\t\t\trequestMessage.requestId,\n\t\t\t\trequest.kind,\n\t\t\t\t'unsupported_request',\n\t\t\t\t'Unsupported request kind',\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tthis.sendErrorResponse(\n\t\t\t\trequestMessage.requestId,\n\t\t\t\trequest.kind,\n\t\t\t\t'handler_error',\n\t\t\t\terr instanceof Error ? err.message : 'Unknown bridge handler error',\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} requestId\n\t * @param {GoogleDocsResponse} response\n\t */\n\tsendResponse(requestId, response) {\n\t\t/** @type {GoogleDocsResponseMessage} */\n\t\tconst message = {\n\t\t\tprotocol: PROTOCOL_VERSION,\n\t\t\trequestId,\n\t\t\tresponse,\n\t\t};\n\t\tdocument.dispatchEvent(new CustomEvent(EVENT_RESPONSE, { detail: message }));\n\t}\n\n\t/**\n\t * @param {string} requestId\n\t * @param {GoogleDocsRequest['kind']} requestKind\n\t * @param {string} code\n\t * @param {string} message\n\t */\n\tsendErrorResponse(requestId, requestKind, code, message) {\n\t\tthis.sendResponse(requestId, {\n\t\t\tkind: 'error',\n\t\t\trequestKind,\n\t\t\tcode,\n\t\t\tmessage,\n\t\t});\n\t}\n\n\t/**\n\t * @param {unknown} value\n\t * @returns {value is GoogleDocsRequestMessage}\n\t */\n\tisRequestMessage(value) {\n\t\tif (!this.isObject(value)) return false;\n\t\treturn (\n\t\t\tvalue.protocol === PROTOCOL_VERSION &&\n\t\t\ttypeof value.requestId === 'string' &&\n\t\t\tthis.isObject(value.request) &&\n\t\t\ttypeof value.request.kind === 'string'\n\t\t);\n\t}\n\n\t/**\n\t * @param {unknown} value\n\t * @returns {value is Record<string, unknown>}\n\t */\n\tisObject(value) {\n\t\treturn value != null && typeof value === 'object';\n\t}\n}\n"
  },
  {
    "path": "packages/chrome-plugin/public/google-docs-bridge.js",
    "content": "import { GoogleDocsBridgeRequestHandler } from './google-docs-bridge-request-handler.js';\n\n(() => {\n\t/**\n\t * @typedef {{ x: number, y: number, width: number, height: number }} Rect\n\t */\n\n\t/**\n\t * @typedef {{ start: number, end: number }} SelectionEndpoints\n\t */\n\n\t/**\n\t * @typedef {{\n\t *   getText: () => string,\n\t *   setSelection: (start: number, end: number) => void,\n\t *   getSelection?: () => Array<Record<string, unknown>>\n\t * }} AnnotatedText\n\t */\n\n\tconst PROTOCOL_VERSION = 'harper-gdocs-bridge/v1';\n\tconst BRIDGE_ID = 'harper-google-docs-main-world-bridge';\n\tconst SYNC_INTERVAL_MS = 100;\n\tconst EDITOR_SELECTOR = '.kix-appview-editor';\n\tconst EDITOR_CONTAINER_SELECTOR = '.kix-appview-editor-container';\n\tconst DOCS_EDITOR_SELECTOR = '#docs-editor';\n\tconst CARET_SELECTOR = '.kix-cursor-caret';\n\tconst TEXT_EVENT_IFRAME_SELECTOR = '.docs-texteventtarget-iframe';\n\tconst LAYOUT_EPOCH_ATTR = 'data-harper-layout-epoch';\n\tconst LAYOUT_REASON_ATTR = 'data-harper-layout-reason';\n\tconst SELECTION_START_ATTR = 'data-harper-selection-start';\n\tconst SELECTION_END_ATTR = 'data-harper-selection-end';\n\tconst EVENT_NOTIFICATION = 'harper:gdocs:notification';\n\tconst EVENT_TEXT_UPDATED = 'harper:gdocs:text-updated';\n\tconst EVENT_LAYOUT_CHANGED = 'harper:gdocs:layout-changed';\n\tconst EVENT_GET_RECTS = 'harper:gdocs:get-rects';\n\tconst EVENT_REPLACE = 'harper:gdocs:replace';\n\n\tlet isComputingRects = false;\n\tlet layoutEpoch = 0;\n\tlet layoutBumpPending = false;\n\tlet lastCaretChoice = null;\n\tconst CARET_DIRECTION_THRESHOLD = 20;\n\tconst CARET_CHOICE_STALE_MS = 1500;\n\n\t/** @type {HTMLElement | null} */\n\tlet bridge = document.getElementById(BRIDGE_ID);\n\n\t/** @returns {HTMLElement} */\n\tfunction ensureBridgeExists() {\n\t\tif (bridge) {\n\t\t\treturn bridge;\n\t\t}\n\n\t\tconst nextBridge = document.createElement('div');\n\t\tnextBridge.id = BRIDGE_ID;\n\t\tnextBridge.setAttribute('aria-hidden', 'true');\n\t\tnextBridge.style.display = 'none';\n\t\tdocument.documentElement.appendChild(nextBridge);\n\t\tbridge = nextBridge;\n\n\t\treturn nextBridge;\n\t}\n\n\tensureBridgeExists();\n\n\t/** @param {string} name\n\t * @param {Record<string, unknown>} detail\n\t * @returns {void}\n\t */\n\tconst emitEvent = (name, detail) => {\n\t\ttry {\n\t\t\tdocument.dispatchEvent(new CustomEvent(name, { detail }));\n\t\t} catch {}\n\t};\n\n\t/**\n\t * @param {'textUpdated' | 'layoutChanged'} name\n\t * @param {Record<string, unknown>} detail\n\t * @returns {void}\n\t */\n\tconst emitNotification = (name, detail) => {\n\t\ttry {\n\t\t\tdocument.dispatchEvent(\n\t\t\t\tnew CustomEvent(EVENT_NOTIFICATION, {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tprotocol: PROTOCOL_VERSION,\n\t\t\t\t\t\tnotification: { kind: name, ...detail },\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch {}\n\t};\n\n\t/**\n\t * @param {string} reason\n\t * @returns {void}\n\t */\n\tconst bumpLayoutEpoch = (reason) => {\n\t\tif (layoutBumpPending) return;\n\t\tlayoutBumpPending = true;\n\t\tqueueMicrotask(() => {\n\t\t\tlayoutBumpPending = false;\n\t\t\tlayoutEpoch += 1;\n\t\t\tconst bridgeNode = ensureBridgeExists();\n\t\t\tbridgeNode.setAttribute(LAYOUT_EPOCH_ATTR, String(layoutEpoch));\n\t\t\tbridgeNode.setAttribute(LAYOUT_REASON_ATTR, String(reason));\n\t\t\temitEvent(EVENT_LAYOUT_CHANGED, { layoutEpoch, reason });\n\t\t\temitNotification('layoutChanged', { layoutEpoch, reason });\n\t\t});\n\t};\n\n\t/** @returns {Promise<void>} */\n\tconst syncText = async () => {\n\t\ttry {\n\t\t\tconst getAnnotatedText = window._docs_annotate_getAnnotatedText;\n\t\t\tif (typeof getAnnotatedText !== 'function') return;\n\t\t\t/** @type {AnnotatedText | null | undefined} */\n\t\t\tconst annotated = await getAnnotatedText();\n\t\t\tif (!annotated || typeof annotated.getText !== 'function') return;\n\t\t\twindow.__harperGoogleDocsAnnotatedText = annotated;\n\t\t\ttry {\n\t\t\t\tconst selection = annotated.getSelection?.()?.[0];\n\t\t\t\tconst endpoints = getSelectionEndpoints(selection);\n\t\t\t\tconst bridgeNode = ensureBridgeExists();\n\t\t\t\tif (endpoints) {\n\t\t\t\t\tbridgeNode.setAttribute(SELECTION_START_ATTR, String(endpoints.start));\n\t\t\t\t\tbridgeNode.setAttribute(SELECTION_END_ATTR, String(endpoints.end));\n\t\t\t\t} else {\n\t\t\t\t\tbridgeNode.removeAttribute(SELECTION_START_ATTR);\n\t\t\t\t\tbridgeNode.removeAttribute(SELECTION_END_ATTR);\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t\tconst nextText = annotated.getText();\n\t\t\tconst bridgeNode = ensureBridgeExists();\n\t\t\tif (bridgeNode.textContent !== nextText) {\n\t\t\t\tbridgeNode.textContent = nextText;\n\t\t\t\temitEvent(EVENT_TEXT_UPDATED, { length: nextText.length });\n\t\t\t\temitNotification('textUpdated', { length: nextText.length });\n\t\t\t}\n\t\t} catch {}\n\t};\n\n\t/**\n\t * @param {AnnotatedText} annotated\n\t * @param {number} position\n\t * @returns {Rect | null}\n\t */\n\tconst getCaretRect = (annotated, position) => {\n\t\tannotated.setSelection(position, position);\n\t\tconst viewportWidth = window.innerWidth;\n\t\tconst viewportHeight = window.innerHeight;\n\t\tconst epsilon = 0.5;\n\t\t/** @type {Rect[]} */\n\t\tconst carets = Array.from(document.querySelectorAll(CARET_SELECTOR))\n\t\t\t.map((caret) => {\n\t\t\t\tconst rect = caret.getBoundingClientRect();\n\t\t\t\tconst style = window.getComputedStyle(caret);\n\t\t\t\tconst isFullyOnScreen =\n\t\t\t\t\trect.left >= -epsilon &&\n\t\t\t\t\trect.top >= -epsilon &&\n\t\t\t\t\trect.right <= viewportWidth + epsilon &&\n\t\t\t\t\trect.bottom <= viewportHeight + epsilon;\n\t\t\t\tif (\n\t\t\t\t\t!rect ||\n\t\t\t\t\trect.width <= 0 ||\n\t\t\t\t\trect.height <= 0 ||\n\t\t\t\t\tstyle.display === 'none' ||\n\t\t\t\t\tstyle.visibility === 'hidden' ||\n\t\t\t\t\tstyle.opacity === '0' ||\n\t\t\t\t\t!isFullyOnScreen\n\t\t\t\t) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn { x: rect.x, y: rect.y, width: rect.width, height: rect.height };\n\t\t\t})\n\t\t\t.filter((rect) => rect != null);\n\t\tif (carets.length === 0) return null;\n\t\tconst inPage = carets.filter((rect) => rect.x > 100);\n\t\tconst pool = inPage.length > 0 ? inPage : carets;\n\t\tconst now = Date.now();\n\t\tif (!lastCaretChoice || now - lastCaretChoice.at > CARET_CHOICE_STALE_MS) {\n\t\t\tconst seed = pool.reduce((best, rect) => (rect.x < best.x ? rect : best), pool[0]);\n\t\t\tlastCaretChoice = { rect: seed, position, at: now };\n\t\t\treturn seed;\n\t\t}\n\n\t\tconst deltaPos = position - lastCaretChoice.position;\n\t\tlet chosen = null;\n\n\t\tif (deltaPos > CARET_DIRECTION_THRESHOLD) {\n\t\t\tconst downward = pool.filter((rect) => rect.y >= lastCaretChoice.rect.y - 2);\n\t\t\tif (downward.length > 0) {\n\t\t\t\tchosen = downward.reduce((best, rect) => {\n\t\t\t\t\tif (rect.y > best.y + 1) return rect;\n\t\t\t\t\tif (Math.abs(rect.y - best.y) <= 1 && rect.x < best.x) return rect;\n\t\t\t\t\treturn best;\n\t\t\t\t}, downward[0]);\n\t\t\t}\n\t\t} else if (deltaPos < -CARET_DIRECTION_THRESHOLD) {\n\t\t\tconst upward = pool.filter((rect) => rect.y <= lastCaretChoice.rect.y + 2);\n\t\t\tif (upward.length > 0) {\n\t\t\t\tchosen = upward.reduce((best, rect) => {\n\t\t\t\t\tif (rect.y < best.y - 1) return rect;\n\t\t\t\t\tif (Math.abs(rect.y - best.y) <= 1 && rect.x < best.x) return rect;\n\t\t\t\t\treturn best;\n\t\t\t\t}, upward[0]);\n\t\t\t}\n\t\t}\n\n\t\tif (!chosen) {\n\t\t\tchosen = pool.reduce((best, rect) => {\n\t\t\t\tconst bestScore =\n\t\t\t\t\tMath.abs(best.y - lastCaretChoice.rect.y) * 4 + Math.abs(best.x - lastCaretChoice.rect.x);\n\t\t\t\tconst rectScore =\n\t\t\t\t\tMath.abs(rect.y - lastCaretChoice.rect.y) * 4 + Math.abs(rect.x - lastCaretChoice.rect.x);\n\t\t\t\treturn rectScore < bestScore ? rect : best;\n\t\t\t}, pool[0]);\n\t\t}\n\n\t\tlastCaretChoice = { rect: chosen, position, at: now };\n\t\treturn chosen;\n\t};\n\n\t/**\n\t * @param {unknown} value\n\t * @returns {number | null}\n\t */\n\tconst asFiniteNumber = (value) => {\n\t\tconst num = Number(value);\n\t\treturn Number.isFinite(num) ? num : null;\n\t};\n\n\t/**\n\t * @param {unknown} selection\n\t * @returns {SelectionEndpoints | null}\n\t */\n\tconst getSelectionEndpoints = (selection) => {\n\t\tif (!selection || typeof selection !== 'object') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst candidates = [\n\t\t\t['anchor', 'focus'],\n\t\t\t['base', 'extent'],\n\t\t\t['start', 'end'],\n\t\t];\n\n\t\tfor (const [a, b] of candidates) {\n\t\t\tconst start = asFiniteNumber(selection[a]);\n\t\t\tconst end = asFiniteNumber(selection[b]);\n\t\t\tif (start != null && end != null) {\n\t\t\t\treturn { start, end };\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t};\n\n\t/**\n\t * @param {AnnotatedText} annotated\n\t * @param {SelectionEndpoints | null} selection\n\t * @returns {void}\n\t */\n\tconst restoreSelection = (annotated, selection) => {\n\t\tif (!selection) return;\n\t\ttry {\n\t\t\tannotated.setSelection(selection.start, selection.end);\n\t\t} catch {}\n\t};\n\n\t/**\n\t * @param {number} start\n\t * @param {number} end\n\t * @param {SelectionEndpoints | null} selection\n\t * @returns {boolean}\n\t */\n\tconst isSpanNearSelection = (start, end, selection) => {\n\t\tif (!selection) return false;\n\t\tconst spanStart = Math.max(0, Math.min(start, end));\n\t\tconst spanEnd = Math.max(spanStart, Math.max(start, end));\n\t\tconst selStart = Math.min(selection.start, selection.end);\n\t\tconst selEnd = Math.max(selection.start, selection.end);\n\t\tconst maxDistance = 2000;\n\n\t\tif (spanStart <= selEnd && spanEnd >= selStart) {\n\t\t\treturn true;\n\t\t}\n\t\tif (spanEnd < selStart) {\n\t\t\treturn selStart - spanEnd <= maxDistance;\n\t\t}\n\t\treturn spanStart - selEnd <= maxDistance;\n\t};\n\n\t/**\n\t * @typedef {{\n\t *   node: Window | Element,\n\t *   left: number,\n\t *   top: number\n\t * }} ScrollSnapshot\n\t */\n\n\t/**\n\t * @returns {ScrollSnapshot[]}\n\t */\n\tconst snapshotScroll = () => {\n\t\t/** @type {ScrollSnapshot[]} */\n\t\tconst snapshots = [{ node: window, left: window.scrollX, top: window.scrollY }];\n\t\tconst selectors = [EDITOR_SELECTOR, EDITOR_CONTAINER_SELECTOR, DOCS_EDITOR_SELECTOR];\n\t\tfor (const selector of selectors) {\n\t\t\tconst node = document.querySelector(selector);\n\t\t\tif (!(node instanceof Element)) continue;\n\t\t\tif (snapshots.some((entry) => entry.node === node)) continue;\n\t\t\tsnapshots.push({ node, left: node.scrollLeft, top: node.scrollTop });\n\t\t}\n\t\treturn snapshots;\n\t};\n\n\t/**\n\t * @param {ScrollSnapshot[]} snapshots\n\t * @returns {void}\n\t */\n\tconst restoreScroll = (snapshots) => {\n\t\tfor (const snap of snapshots) {\n\t\t\tif (snap.node === window) {\n\t\t\t\tif (window.scrollX !== snap.left || window.scrollY !== snap.top) {\n\t\t\t\t\twindow.scrollTo(snap.left, snap.top);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!(snap.node instanceof Element)) continue;\n\t\t\tif (snap.node.scrollLeft !== snap.left) {\n\t\t\t\tsnap.node.scrollLeft = snap.left;\n\t\t\t}\n\t\t\tif (snap.node.scrollTop !== snap.top) {\n\t\t\t\tsnap.node.scrollTop = snap.top;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @template T\n\t * @param {() => T} fn\n\t * @returns {T}\n\t */\n\tconst withSuppressedScrolling = (fn) => {\n\t\t/** @type {Array<() => void>} */\n\t\tconst restorers = [];\n\t\tconst noop = () => {};\n\t\tconst tryOverride = (obj, key) => {\n\t\t\tif (!obj) return;\n\t\t\tconst original = obj[key];\n\t\t\tif (typeof original !== 'function') return;\n\t\t\ttry {\n\t\t\t\tobj[key] = noop;\n\t\t\t\trestorers.push(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tobj[key] = original;\n\t\t\t\t\t} catch {}\n\t\t\t\t});\n\t\t\t} catch {}\n\t\t};\n\n\t\ttryOverride(window, 'scrollTo');\n\t\ttryOverride(window, 'scrollBy');\n\t\ttryOverride(Element.prototype, 'scrollIntoView');\n\t\ttryOverride(Element.prototype, 'scrollTo');\n\t\ttryOverride(Element.prototype, 'scrollBy');\n\n\t\ttry {\n\t\t\treturn fn();\n\t\t} finally {\n\t\t\tfor (let i = restorers.length - 1; i >= 0; i -= 1) {\n\t\t\t\trestorers[i]();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @param {{ start?: number, end?: number }} request\n\t * @returns {Promise<{ kind: 'getRects', rects: Rect[] }>}\n\t */\n\tconst handleGetRectsRequest = async (request) => {\n\t\tconst start = Number(request.start);\n\t\tconst end = Number(request.end);\n\t\t/** @type {AnnotatedText | undefined} */\n\t\tconst annotated = window.__harperGoogleDocsAnnotatedText;\n\t\tif (!annotated || typeof annotated.setSelection !== 'function') {\n\t\t\treturn { kind: 'getRects', rects: [] };\n\t\t}\n\n\t\tconst currentSelection = annotated.getSelection?.()?.[0];\n\t\tconst previousSelection = getSelectionEndpoints(currentSelection);\n\t\tif (!isSpanNearSelection(start, end, previousSelection)) {\n\t\t\treturn { kind: 'getRects', rects: [] };\n\t\t}\n\n\t\t/** @type {Rect[]} */\n\t\tconst rects = [];\n\t\tisComputingRects = true;\n\t\tconst scrollSnapshot = snapshotScroll();\n\t\ttry {\n\t\t\tconst spanStart = Math.max(0, Math.min(start, end));\n\t\t\tconst spanEnd = Math.max(spanStart, end);\n\t\t\tconst { startRect, endRect } = withSuppressedScrolling(() => {\n\t\t\t\treturn {\n\t\t\t\t\tstartRect: getCaretRect(annotated, spanStart),\n\t\t\t\t\tendRect: getCaretRect(annotated, spanEnd),\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tif (startRect && endRect && Math.abs(startRect.y - endRect.y) < 6) {\n\t\t\t\trects.push({\n\t\t\t\t\tx: Math.min(startRect.x, endRect.x),\n\t\t\t\t\ty: startRect.y,\n\t\t\t\t\twidth: Math.max(4, Math.abs(endRect.x - startRect.x)),\n\t\t\t\t\theight: startRect.height,\n\t\t\t\t});\n\t\t\t} else if (startRect) {\n\t\t\t\trects.push({\n\t\t\t\t\tx: startRect.x,\n\t\t\t\t\ty: startRect.y,\n\t\t\t\t\twidth: 8,\n\t\t\t\t\theight: startRect.height,\n\t\t\t\t});\n\t\t\t}\n\t\t} finally {\n\t\t\tisComputingRects = false;\n\t\t\trestoreSelection(annotated, previousSelection);\n\t\t\trestoreScroll(scrollSnapshot);\n\t\t\trequestAnimationFrame(() => restoreScroll(scrollSnapshot));\n\t\t}\n\n\t\treturn { kind: 'getRects', rects };\n\t};\n\n\t/**\n\t * @param {{ start?: number, end?: number, replacementText?: string, expectedText?: string, beforeContext?: string, afterContext?: string }} request\n\t * @returns {Promise<{ kind: 'replaceText', applied: boolean }>}\n\t */\n\tconst handleReplaceTextRequest = async (request) => {\n\t\tlet start = Number(request.start);\n\t\tlet end = Number(request.end);\n\t\tconst replacementText = String(request.replacementText ?? '');\n\t\tconst expectedText = String(request.expectedText ?? '');\n\t\tconst beforeContext = String(request.beforeContext ?? '');\n\t\tconst afterContext = String(request.afterContext ?? '');\n\t\tconst getAnnotatedText = window._docs_annotate_getAnnotatedText;\n\t\tif (typeof getAnnotatedText !== 'function') {\n\t\t\treturn { kind: 'replaceText', applied: false };\n\t\t}\n\t\t/** @type {AnnotatedText | null | undefined} */\n\t\tconst annotated = await getAnnotatedText();\n\t\tif (!annotated || typeof annotated.setSelection !== 'function') {\n\t\t\treturn { kind: 'replaceText', applied: false };\n\t\t}\n\n\t\tif (expectedText) {\n\t\t\tconst currentText = annotated.getText?.();\n\t\t\tif (typeof currentText === 'string') {\n\t\t\t\tconst spanLength = Math.max(0, end - start);\n\t\t\t\tconst normalizeStart = Math.max(0, Math.min(start, currentText.length));\n\t\t\t\tconst normalizeEnd = Math.max(normalizeStart, Math.min(end, currentText.length));\n\t\t\t\tconst direct = currentText.slice(normalizeStart, normalizeEnd);\n\t\t\t\tif (direct !== expectedText) {\n\t\t\t\t\tconst resolveByOffsetWindow = () => {\n\t\t\t\t\t\tfor (let delta = -12; delta <= 12; delta += 1) {\n\t\t\t\t\t\t\tconst candidateStart = normalizeStart + delta;\n\t\t\t\t\t\t\tif (candidateStart < 0) continue;\n\t\t\t\t\t\t\tconst candidateEnd = candidateStart + spanLength;\n\t\t\t\t\t\t\tif (candidateEnd > currentText.length) continue;\n\t\t\t\t\t\t\tif (currentText.slice(candidateStart, candidateEnd) === expectedText) {\n\t\t\t\t\t\t\t\treturn { start: candidateStart, end: candidateEnd };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t};\n\n\t\t\t\t\tconst resolveByContext = () => {\n\t\t\t\t\t\tconst hits = [];\n\t\t\t\t\t\tlet cursor = 0;\n\t\t\t\t\t\twhile (cursor <= currentText.length) {\n\t\t\t\t\t\t\tconst index = currentText.indexOf(expectedText, cursor);\n\t\t\t\t\t\t\tif (index < 0) break;\n\t\t\t\t\t\t\tconst indexEnd = index + expectedText.length;\n\t\t\t\t\t\t\tconst beforeTail = beforeContext ? beforeContext.slice(-16) : '';\n\t\t\t\t\t\t\tconst afterHead = afterContext ? afterContext.slice(0, 16) : '';\n\t\t\t\t\t\t\tlet score = 0;\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tbeforeTail &&\n\t\t\t\t\t\t\t\tcurrentText.slice(Math.max(0, index - beforeTail.length), index) === beforeTail\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tscore += 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tafterHead &&\n\t\t\t\t\t\t\t\tcurrentText.slice(\n\t\t\t\t\t\t\t\t\tindexEnd,\n\t\t\t\t\t\t\t\t\tMath.min(currentText.length, indexEnd + afterHead.length),\n\t\t\t\t\t\t\t\t) === afterHead\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tscore += 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tscore -= Math.abs(index - normalizeStart) / 1000;\n\t\t\t\t\t\t\thits.push({ start: index, end: indexEnd, score });\n\t\t\t\t\t\t\tcursor = index + 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (hits.length === 0) return null;\n\t\t\t\t\t\thits.sort((a, b) => b.score - a.score);\n\t\t\t\t\t\treturn { start: hits[0].start, end: hits[0].end };\n\t\t\t\t\t};\n\n\t\t\t\t\tconst resolved = resolveByOffsetWindow() ?? resolveByContext();\n\t\t\t\t\tif (resolved) {\n\t\t\t\t\t\tstart = resolved.start;\n\t\t\t\t\t\tend = resolved.end;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tannotated.setSelection(start, end);\n\t\tconst iframe = document.querySelector(TEXT_EVENT_IFRAME_SELECTOR);\n\t\tconst target = iframe?.contentDocument?.activeElement;\n\t\tif (!target) {\n\t\t\treturn { kind: 'replaceText', applied: false };\n\t\t}\n\n\t\tconst dt = new DataTransfer();\n\t\tdt.setData('text/plain', replacementText);\n\t\tconst pasteEvent = new ClipboardEvent('paste', {\n\t\t\tclipboardData: dt,\n\t\t\tcancelable: true,\n\t\t\tbubbles: true,\n\t\t});\n\t\ttarget.dispatchEvent(pasteEvent);\n\t\tsetTimeout(syncText, 0);\n\t\treturn { kind: 'replaceText', applied: true };\n\t};\n\n\tconst requestHandler = new GoogleDocsBridgeRequestHandler({\n\t\tonGetRectsRequest: handleGetRectsRequest,\n\t\tonReplaceTextRequest: handleReplaceTextRequest,\n\t});\n\trequestHandler.start();\n\n\t// Legacy compatibility bridge while callers migrate to request/response protocol.\n\tdocument.addEventListener(EVENT_GET_RECTS, (event) => {\n\t\ttry {\n\t\t\tconst detail = /** @type {CustomEvent} */ (event).detail || {};\n\t\t\tconst requestId = String(detail.requestId || '');\n\t\t\tif (!requestId) return;\n\t\t\tvoid handleGetRectsRequest(detail).then((response) => {\n\t\t\t\tensureBridgeExists().setAttribute(\n\t\t\t\t\t`data-harper-rects-${requestId}`,\n\t\t\t\t\tJSON.stringify(response.rects),\n\t\t\t\t);\n\t\t\t});\n\t\t} catch {}\n\t});\n\n\tdocument.addEventListener(EVENT_REPLACE, (event) => {\n\t\ttry {\n\t\t\tconst detail = /** @type {CustomEvent} */ (event).detail || {};\n\t\t\tvoid handleReplaceTextRequest(detail);\n\t\t} catch {}\n\t});\n\n\twindow.addEventListener('resize', () => bumpLayoutEpoch('resize'));\n\n\tconst observeLayout = () => {\n\t\tconst editor = document.querySelector(EDITOR_SELECTOR);\n\t\tif (!(editor instanceof HTMLElement)) {\n\t\t\tsetTimeout(observeLayout, 250);\n\t\t\treturn;\n\t\t}\n\n\t\tbumpLayoutEpoch('init');\n\t\tconst observer = new MutationObserver((mutations) => {\n\t\t\tfor (const mutation of mutations) {\n\t\t\t\tif (mutation.type === 'childList' || mutation.type === 'attributes') {\n\t\t\t\t\tbumpLayoutEpoch('mutation');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tobserver.observe(editor, {\n\t\t\tsubtree: true,\n\t\t\tchildList: true,\n\t\t\tattributes: true,\n\t\t\tattributeFilter: ['style', 'class'],\n\t\t});\n\t};\n\n\tobserveLayout();\n\tsyncText();\n\tsetInterval(syncText, SYNC_INTERVAL_MS);\n})();\n"
  },
  {
    "path": "packages/chrome-plugin/public/google-docs-protocol.js",
    "content": "/**\n * Type-only protocol specification for Google Docs bridge communication.\n *\n * This mirrors `protocol.ts` style:\n * - A single list of request and response types.\n * - No runtime code or constants.\n * - Transport details are handled by client/handler implementations.\n */\n\n/**\n * A rectangle in viewport coordinates.\n * @typedef {object} GoogleDocsRect\n * @property {number} x Left coordinate in CSS pixels.\n * @property {number} y Top coordinate in CSS pixels.\n * @property {number} width Width in CSS pixels.\n * @property {number} height Height in CSS pixels.\n */\n\n/**\n * Request to resolve rects for a text span.\n * @typedef {object} GoogleDocsGetRectsRequest\n * @property {'getRects'} kind Request kind.\n * @property {number} start Start offset in bridge text.\n * @property {number} end End offset in bridge text.\n */\n\n/**\n * Request to replace text in Google Docs.\n * @typedef {object} GoogleDocsReplaceTextRequest\n * @property {'replaceText'} kind Request kind.\n * @property {number} start Start offset in bridge text.\n * @property {number} end End offset in bridge text.\n * @property {string} replacementText Replacement text.\n * @property {string=} expectedText Optional expected source text for defensive re-alignment.\n * @property {string=} beforeContext Optional context before the span for re-alignment scoring.\n * @property {string=} afterContext Optional context after the span for re-alignment scoring.\n */\n\n/**\n * All supported bridge requests.\n * @typedef {GoogleDocsGetRectsRequest | GoogleDocsReplaceTextRequest} GoogleDocsRequest\n */\n\n/**\n * Successful response for `getRects`.\n * @typedef {object} GoogleDocsGetRectsResponse\n * @property {'getRects'} kind Response kind.\n * @property {GoogleDocsRect[]} rects Resolved span rects.\n */\n\n/**\n * Successful response for `replaceText`.\n * @typedef {object} GoogleDocsReplaceTextResponse\n * @property {'replaceText'} kind Response kind.\n * @property {boolean} applied Whether the bridge dispatched the edit operation to Docs.\n */\n\n/**\n * Error response for any request.\n * @typedef {object} GoogleDocsErrorResponse\n * @property {'error'} kind Response kind.\n * @property {GoogleDocsRequest['kind']} requestKind Kind of request that failed.\n * @property {string} code Machine-readable error code.\n * @property {string} message Human-readable error message.\n */\n\n/**\n * All bridge responses.\n * @typedef {GoogleDocsGetRectsResponse | GoogleDocsReplaceTextResponse | GoogleDocsErrorResponse} GoogleDocsResponse\n */\n\n/**\n * Notification when bridge text changes.\n * @typedef {object} GoogleDocsTextUpdatedNotification\n * @property {'textUpdated'} kind Notification kind.\n * @property {number} length Current bridge text length.\n */\n\n/**\n * Notification when bridge layout changes.\n * @typedef {object} GoogleDocsLayoutChangedNotification\n * @property {'layoutChanged'} kind Notification kind.\n * @property {number} layoutEpoch Monotonic layout epoch.\n * @property {string} reason Layout change reason.\n */\n\n/**\n * All bridge notifications.\n * @typedef {GoogleDocsTextUpdatedNotification | GoogleDocsLayoutChangedNotification} GoogleDocsNotification\n */\n\n/**\n * Transport envelope for a request event.\n * @typedef {object} GoogleDocsRequestMessage\n * @property {string} protocol Protocol version string.\n * @property {string} requestId Correlation id for request/response pairing.\n * @property {GoogleDocsRequest} request Request payload.\n */\n\n/**\n * Transport envelope for a response event.\n * @typedef {object} GoogleDocsResponseMessage\n * @property {string} protocol Protocol version string.\n * @property {string} requestId Correlation id matching a prior request.\n * @property {GoogleDocsResponse} response Response payload.\n */\n\n/**\n * Transport envelope for a notification event.\n * @typedef {object} GoogleDocsNotificationMessage\n * @property {string} protocol Protocol version string.\n * @property {GoogleDocsNotification} notification Notification payload.\n */\n\nexport {};\n"
  },
  {
    "path": "packages/chrome-plugin/sidepanel.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" href=\"/icons/logo.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Chrome Extension + Svelte + TS + Vite</title>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <script type=\"module\" src=\"/src/sidepanel/index.ts\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/chrome-plugin/src/PopupState.ts",
    "content": "export type PopupState =\n\t| {\n\t\t\tpage: 'onboarding';\n\t  }\n\t| {\n\t\t\tpage: 'main';\n\t  }\n\t| {\n\t\t\tpage: 'report-error';\n\t\t\tfeedback: string;\n\t\t\texample: string;\n\t\t\trule_id: string;\n\t  };\n\nexport function main(): PopupState {\n\treturn { page: 'main' };\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/ProtocolClient.ts",
    "content": "import type { Dialect, LintConfig, LintOptions } from 'harper.js';\nimport type { UnpackedLintGroups } from 'lint-framework';\nimport { LRUCache } from 'lru-cache';\nimport type { ActivationKey, Hotkey, WeirpackMeta } from './protocol';\n\nexport default class ProtocolClient {\n\tprivate static readonly lintCache = new LRUCache<string, Promise<UnpackedLintGroups>>({\n\t\tmax: 5000,\n\t\tttl: 5_000,\n\t});\n\n\tprivate static cacheKey(text: string, domain: string, options?: LintOptions): string {\n\t\treturn `${domain}:${text}:${options?.forceAllHeadings ?? ''}:${options?.language ?? ''}`;\n\t}\n\n\tpublic static async lint(\n\t\ttext: string,\n\t\tdomain: string,\n\t\toptions?: LintOptions,\n\t): Promise<UnpackedLintGroups> {\n\t\tconst key = this.cacheKey(text, domain, options);\n\t\tlet p = this.lintCache.get(key);\n\t\tif (!p) {\n\t\t\tp = chrome.runtime\n\t\t\t\t.sendMessage({ kind: 'lint', text, domain, options })\n\t\t\t\t.then((r) => r.lints as UnpackedLintGroups);\n\t\t\tthis.lintCache.set(key, p);\n\t\t}\n\t\treturn p;\n\t}\n\n\tpublic static async getLintConfig(): Promise<LintConfig> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getConfig' })).config;\n\t}\n\n\tpublic static async setLintConfig(lintConfig: LintConfig): Promise<void> {\n\t\tthis.lintCache.clear();\n\t\tawait chrome.runtime.sendMessage({ kind: 'setConfig', config: lintConfig });\n\t}\n\n\tpublic static async setRuleEnabled(ruleId: string, enabled: boolean): Promise<void> {\n\t\tconst config = await this.getLintConfig();\n\t\tconst nextConfig: LintConfig = { ...config, [ruleId]: enabled };\n\t\tawait this.setLintConfig(nextConfig);\n\t}\n\n\tpublic static async getLintDescriptions(): Promise<Record<string, string>> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getLintDescriptions' })).descriptions;\n\t}\n\n\tpublic static async getDialect(): Promise<Dialect> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getDialect' })).dialect;\n\t}\n\n\tpublic static async setDialect(dialect: Dialect): Promise<void> {\n\t\tawait chrome.runtime.sendMessage({ kind: 'setDialect', dialect });\n\t}\n\n\tpublic static async getDomainEnabled(domain: string): Promise<boolean> {\n\t\tthis.lintCache.clear();\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getDomainStatus', domain })).enabled;\n\t}\n\n\t/** Set whether Harper is enabled for a given domain.\n\t *\n\t * @param overrideValue dictates whether this should override a previous setting.\n\t * */\n\tpublic static async setDomainEnabled(\n\t\tdomain: string,\n\t\tenabled: boolean,\n\t\toverrideValue = true,\n\t): Promise<void> {\n\t\tawait chrome.runtime.sendMessage({ kind: 'setDomainStatus', enabled, domain, overrideValue });\n\t}\n\n\tpublic static async getDefaultEnabled(): Promise<boolean> {\n\t\tthis.lintCache.clear();\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getDefaultStatus' })).enabled;\n\t}\n\n\tpublic static async getEnabledDomains(): Promise<string[]> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getEnabledDomains' })).domains;\n\t}\n\n\tpublic static async setDefaultEnabled(enabled: boolean): Promise<void> {\n\t\tawait chrome.runtime.sendMessage({ kind: 'setDefaultStatus', enabled });\n\t}\n\n\tpublic static async getActivationKey(): Promise<ActivationKey> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getActivationKey' })).key;\n\t}\n\n\tpublic static async getHotkey(): Promise<Hotkey> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getHotkey' })).hotkey;\n\t}\n\n\tpublic static async setHotkey(hotkey: Hotkey): Promise<void> {\n\t\tconst modifiers = hotkey.modifiers;\n\t\tconst hotkeyCopy = {\n\t\t\tmodifiers: [...modifiers], // Create a new array\n\t\t\tkey: hotkey.key,\n\t\t};\n\t\tawait chrome.runtime.sendMessage({ kind: 'setHotkey', hotkey: hotkeyCopy });\n\t}\n\n\tpublic static async setActivationKey(key: ActivationKey): Promise<void> {\n\t\tawait chrome.runtime.sendMessage({ kind: 'setActivationKey', key });\n\t}\n\n\tpublic static async addToUserDictionary(words: string[]): Promise<void> {\n\t\tthis.lintCache.clear();\n\t\tawait chrome.runtime.sendMessage({ kind: 'addToUserDictionary', words });\n\t}\n\n\tpublic static async setUserDictionary(words: string[]): Promise<void> {\n\t\tthis.lintCache.clear();\n\t\tawait chrome.runtime.sendMessage({ kind: 'setUserDictionary', words });\n\t}\n\n\tpublic static async getUserDictionary(): Promise<string[]> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getUserDictionary' })).words;\n\t}\n\n\tpublic static async getInstalledOn(): Promise<string | null> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getInstalledOn' })).installedOn;\n\t}\n\n\tpublic static async getReviewed(): Promise<boolean> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getReviewed' })).reviewed;\n\t}\n\n\tpublic static async setReviewed(reviewed: boolean): Promise<void> {\n\t\tawait chrome.runtime.sendMessage({ kind: 'setReviewed', reviewed });\n\t}\n\n\tpublic static async ignoreHash(hash: string): Promise<void> {\n\t\tawait chrome.runtime.sendMessage({ kind: 'ignoreLint', contextHash: hash });\n\t\tthis.lintCache.clear();\n\t}\n\n\tpublic static async openReportError(\n\t\texample: string,\n\t\truleId: string,\n\t\tfeedback: string,\n\t): Promise<void> {\n\t\tawait chrome.runtime.sendMessage({\n\t\t\tkind: 'openReportError',\n\t\t\texample,\n\t\t\trule_id: ruleId,\n\t\t\tfeedback,\n\t\t});\n\t}\n\n\tpublic static async openOptions(): Promise<void> {\n\t\t// Use background to open options to support content scripts reliably\n\t\tawait chrome.runtime.sendMessage({ kind: 'openOptions' });\n\t}\n\n\tpublic static async postFormData(\n\t\turl: string,\n\t\tformData: Record<string, string>,\n\t): Promise<boolean> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'postFormData', url, formData })).success;\n\t}\n\n\tpublic static async getWeirpacks(): Promise<WeirpackMeta[]> {\n\t\treturn (await chrome.runtime.sendMessage({ kind: 'getWeirpacks' })).weirpacks;\n\t}\n\n\tpublic static async addWeirpack(filename: string, bytes: Uint8Array): Promise<void> {\n\t\tthis.lintCache.clear();\n\t\tawait chrome.runtime.sendMessage({ kind: 'addWeirpack', filename, bytes: Array.from(bytes) });\n\t}\n\n\tpublic static async removeWeirpack(id: string): Promise<void> {\n\t\tthis.lintCache.clear();\n\t\tawait chrome.runtime.sendMessage({ kind: 'removeWeirpack', id });\n\t}\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/background/detectDialect.ts",
    "content": "import { Dialect } from 'harper.js';\n\n/** Detect English dialect from browser language settings */\nexport function detectBrowserDialect(): Dialect {\n\t// Try chrome.i18n API first\n\tif (chrome.i18n?.getUILanguage) {\n\t\tconst locale = chrome.i18n.getUILanguage();\n\t\treturn localeToDialect(locale);\n\t}\n\n\t// Fallback to navigator.language\n\tconst lang = navigator.language || navigator.languages?.[0] || 'en-US';\n\treturn localeToDialect(lang);\n}\n\n/** Map locale string to Dialect */\nfunction localeToDialect(locale: string): Dialect {\n\tconst lower = locale.toLowerCase();\n\n\t// Explicit matches\n\tif (lower.includes('en-gb') || lower.includes('en_gb')) return Dialect.British;\n\tif (lower.includes('en-au') || lower.includes('en_au')) return Dialect.Australian;\n\tif (lower.includes('en-ca') || lower.includes('en_ca')) return Dialect.Canadian;\n\tif (lower.includes('en-in') || lower.includes('en_in')) return Dialect.Indian;\n\n\t// Fallback for English variants\n\tif (lower.startsWith('en')) {\n\t\t// New Zealand → Australian (closest match)\n\t\tif (lower.includes('en-nz') || lower.includes('en_nz')) return Dialect.Australian;\n\t\t// American\n\t\tif (lower.includes('en-us') || lower.includes('en_us')) return Dialect.American;\n\t\t// Other English variants → British as fallback\n\t\tif (lower.match(/^en[-_]/)) return Dialect.British;\n\t\t// Plain 'en' → American (default)\n\t\treturn Dialect.American;\n\t}\n\n\t// Non-English languages → American (fallback)\n\treturn Dialect.American;\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/background/index.ts",
    "content": "import {\n\tBinaryModule,\n\ttype Dialect,\n\ttype LintConfig,\n\tLocalLinter,\n\tunpackWeirpackBytes,\n} from 'harper.js';\nimport { type UnpackedLintGroups, unpackLint } from 'lint-framework';\nimport type { PopupState } from '../PopupState';\nimport {\n\tActivationKey,\n\ttype AddToUserDictionaryRequest,\n\ttype AddWeirpackRequest,\n\tcreateUnitResponse,\n\ttype GetActivationKeyResponse,\n\ttype GetConfigRequest,\n\ttype GetConfigResponse,\n\ttype GetDefaultStatusResponse,\n\ttype GetDialectRequest,\n\ttype GetDialectResponse,\n\ttype GetDomainStatusRequest,\n\ttype GetDomainStatusResponse,\n\ttype GetEnabledDomainsResponse,\n\ttype GetHotkeyResponse,\n\ttype GetInstalledOnRequest,\n\ttype GetInstalledOnResponse,\n\ttype GetLintDescriptionsRequest,\n\ttype GetLintDescriptionsResponse,\n\ttype GetReviewedRequest,\n\ttype GetReviewedResponse,\n\ttype GetUserDictionaryResponse,\n\ttype GetWeirpacksResponse,\n\ttype Hotkey,\n\ttype IgnoreLintRequest,\n\ttype LintRequest,\n\ttype LintResponse,\n\ttype OpenReportErrorRequest,\n\ttype PostFormDataRequest,\n\ttype PostFormDataResponse,\n\ttype RemoveWeirpackRequest,\n\ttype Request,\n\ttype Response,\n\ttype SetActivationKeyRequest,\n\ttype SetConfigRequest,\n\ttype SetDefaultStatusRequest,\n\ttype SetDialectRequest,\n\ttype SetDomainStatusRequest,\n\ttype SetHotkeyRequest,\n\ttype SetReviewedRequest,\n\ttype SetUserDictionaryRequest,\n\ttype UnitResponse,\n\ttype WeirpackMeta,\n} from '../protocol';\nimport { detectBrowserDialect } from './detectDialect';\n\nconsole.log('background is running');\n\nchrome.runtime.onInstalled.addListener((details) => {\n\tif (details.reason === chrome.runtime.OnInstalledReason.INSTALL) {\n\t\tchrome.runtime.setUninstallURL('https://writewithharper.com/uninstall-browser-extension');\n\t\tchrome.tabs.create({ url: 'https://writewithharper.com/install-browser-extension' });\n\t}\n});\n\nchrome.runtime.onMessage.addListener((request, _sender, sendResponse) => {\n\thandleRequest(request).then(sendResponse);\n\n\treturn true;\n});\n\nlet linter: LocalLinter;\nconst WEIRPACKS_KEY = 'weirpacks';\n\ngetDialect()\n\t.then(setDialect)\n\t.catch((err) => console.error('Failed to initialize linter:', err));\nsetInstalledOnIfMissing();\n\nasync function enableDefaultDomains() {\n\tconst defaultEnabledDomains = [\n\t\t'old.reddit.com',\n\t\t'sh.reddit.com',\n\t\t'www.reddit.com',\n\t\t'chatgpt.com',\n\t\t'www.perplexity.ai',\n\t\t'textarea.online',\n\t\t'webmail.porkbun.com',\n\t\t'mail.google.com',\n\t\t'trix-editor.org',\n\t\t'github.com',\n\t\t'messages.google.com',\n\t\t'blank.page',\n\t\t'blankpage.im',\n\t\t'froala.com',\n\t\t'playground.lexical.dev',\n\t\t'discord.com',\n\t\t'www.youtube.com',\n\t\t'www.instagram.com',\n\t\t'web.whatsapp.com',\n\t\t'outlook.live.com',\n\t\t'www.linkedin.com',\n\t\t'bsky.app',\n\t\t'pootlewriter.com',\n\t\t'www.tumblr.com',\n\t\t'dayone.me',\n\t\t'medium.com',\n\t\t'x.com',\n\t\t'www.notion.so',\n\t\t'hashnode.com',\n\t\t'www.slatejs.org',\n\t\t'localhost',\n\t\t'writewithharper.com',\n\t\t'prosemirror.net',\n\t\t'draftjs.org',\n\t\t'gitlab.com',\n\t\t'core.trac.wordpress.org',\n\t\t'write.ellipsus.com',\n\t\t'www.facebook.com',\n\t\t'www.upwork.com',\n\t\t'news.ycombinator.com',\n\t\t'classroom.google.com',\n\t\t'quilljs.com',\n\t\t'www.wattpad.com',\n\t\t'ckeditor.com',\n\t\t'app.slack.com',\n\t\t'openrouter.ai',\n\t\t'docs.google.com',\n\t\t'typst.app',\n\t];\n\n\tfor (const item of defaultEnabledDomains) {\n\t\tif (!(await isDomainSet(item))) {\n\t\t\tsetDomainEnable(item, true);\n\t\t}\n\t}\n}\n\nenableDefaultDomains();\n\nfunction handleRequest(message: Request): Promise<Response> {\n\tconsole.log(`Handling ${message.kind} request`);\n\n\tswitch (message.kind) {\n\t\tcase 'lint':\n\t\t\treturn handleLint(message);\n\t\tcase 'getConfig':\n\t\t\treturn handleGetConfig(message);\n\t\tcase 'setConfig':\n\t\t\treturn handleSetConfig(message);\n\t\tcase 'getLintDescriptions':\n\t\t\treturn handleGetLintDescriptions(message);\n\t\tcase 'setDialect':\n\t\t\treturn handleSetDialect(message);\n\t\tcase 'getDialect':\n\t\t\treturn handleGetDialect(message);\n\t\tcase 'getDomainStatus':\n\t\t\treturn handleGetDomainStatus(message);\n\t\tcase 'setDomainStatus':\n\t\t\treturn handleSetDomainStatus(message);\n\t\tcase 'addToUserDictionary':\n\t\t\treturn handleAddToUserDictionary(message);\n\t\tcase 'ignoreLint':\n\t\t\treturn handleIgnoreLint(message);\n\t\tcase 'setDefaultStatus':\n\t\t\treturn handleSetDefaultStatus(message);\n\t\tcase 'getDefaultStatus':\n\t\t\treturn handleGetDefaultStatus();\n\t\tcase 'getEnabledDomains':\n\t\t\treturn handleGetEnabledDomains();\n\t\tcase 'getUserDictionary':\n\t\t\treturn handleGetUserDictionary();\n\t\tcase 'setUserDictionary':\n\t\t\treturn handleSetUserDictionary(message);\n\t\tcase 'getActivationKey':\n\t\t\treturn handleGetActivationKey();\n\t\tcase 'setActivationKey':\n\t\t\treturn handleSetActivationKey(message);\n\t\tcase 'getHotkey':\n\t\t\treturn handleGetHotkey();\n\t\tcase 'setHotkey':\n\t\t\treturn handleSetHotkey(message);\n\t\tcase 'openReportError':\n\t\t\treturn handleOpenReportError(message);\n\t\tcase 'openOptions':\n\t\t\tchrome.runtime.openOptionsPage();\n\t\t\treturn Promise.resolve(createUnitResponse());\n\t\tcase 'postFormData':\n\t\t\treturn handlePostFormData(message);\n\t\tcase 'getInstalledOn':\n\t\t\treturn handleGetInstalledOn(message);\n\t\tcase 'getReviewed':\n\t\t\treturn handleGetReviewed(message);\n\t\tcase 'setReviewed':\n\t\t\treturn handleSetReviewed(message);\n\t\tcase 'getWeirpacks':\n\t\t\treturn handleGetWeirpacks();\n\t\tcase 'addWeirpack':\n\t\t\treturn handleAddWeirpack(message);\n\t\tcase 'removeWeirpack':\n\t\t\treturn handleRemoveWeirpack(message);\n\t}\n}\n\n/** Handle a request for linting. */\nasync function handleLint(req: LintRequest): Promise<LintResponse> {\n\tif (!(await enabledForDomain(req.domain))) {\n\t\treturn { kind: 'lints', lints: {} };\n\t}\n\n\tconst grouped = await linter.organizedLints(req.text, req.options);\n\tconst unpackedEntries = await Promise.all(\n\t\tObject.entries(grouped).map(async ([source, lints]) => {\n\t\t\tconst unpacked = await Promise.all(lints.map((lint) => unpackLint(req.text, lint, linter)));\n\t\t\treturn [source, unpacked] as const;\n\t\t}),\n\t);\n\tconst unpackedBySource = Object.fromEntries(unpackedEntries) as UnpackedLintGroups;\n\treturn { kind: 'lints', lints: unpackedBySource };\n}\n\nasync function handleGetConfig(_req: GetConfigRequest): Promise<GetConfigResponse> {\n\treturn { kind: 'getConfig', config: await getLintConfig() };\n}\n\nasync function handleSetConfig(req: SetConfigRequest): Promise<UnitResponse> {\n\tawait setLintConfig(req.config);\n\n\treturn createUnitResponse();\n}\n\nasync function handleSetDialect(req: SetDialectRequest): Promise<UnitResponse> {\n\tawait setDialect(req.dialect);\n\n\treturn createUnitResponse();\n}\n\nasync function handleGetDialect(_req: GetDialectRequest): Promise<GetDialectResponse> {\n\treturn { kind: 'getDialect', dialect: await getDialect() };\n}\n\nasync function handleIgnoreLint(req: IgnoreLintRequest): Promise<UnitResponse> {\n\tawait linter.ignoreLintHash(BigInt(req.contextHash));\n\tawait setIgnoredLints(await linter.exportIgnoredLints());\n\n\treturn createUnitResponse();\n}\n\nasync function handleGetDefaultStatus(): Promise<GetDefaultStatusResponse> {\n\treturn {\n\t\tkind: 'getDefaultStatus',\n\t\tenabled: await enabledByDefault(),\n\t};\n}\n\nasync function handleGetEnabledDomains(): Promise<GetEnabledDomainsResponse> {\n\tconst all = await chrome.storage.local.get(null as any);\n\tconst prefix = formatDomainKey(''); // yields 'domainStatus '\n\tconst domains = Object.entries(all)\n\t\t.filter(([k, v]) => typeof v === 'boolean' && v === true && k.startsWith(prefix))\n\t\t.map(([k]) => k.substring(prefix.length))\n\t\t.sort((a, b) => a.localeCompare(b));\n\n\treturn { kind: 'getEnabledDomains', domains };\n}\n\nasync function handleGetDomainStatus(\n\treq: GetDomainStatusRequest,\n): Promise<GetDomainStatusResponse> {\n\treturn {\n\t\tkind: 'getDomainStatus',\n\t\tdomain: req.domain,\n\t\tenabled: await enabledForDomain(req.domain),\n\t};\n}\n\nasync function handleSetDomainStatus(req: SetDomainStatusRequest): Promise<UnitResponse> {\n\tawait setDomainEnable(req.domain, req.enabled, req.overrideValue);\n\n\treturn createUnitResponse();\n}\n\nasync function handleSetDefaultStatus(req: SetDefaultStatusRequest): Promise<UnitResponse> {\n\tawait setDefaultEnable(req.enabled);\n\n\treturn createUnitResponse();\n}\n\nasync function handleGetLintDescriptions(\n\t_req: GetLintDescriptionsRequest,\n): Promise<GetLintDescriptionsResponse> {\n\treturn { kind: 'getLintDescriptions', descriptions: await linter.getLintDescriptionsHTML() };\n}\n\nasync function handleSetUserDictionary(req: SetUserDictionaryRequest): Promise<UnitResponse> {\n\tawait resetDictionary();\n\tawait addToDictionary(req.words);\n\n\treturn createUnitResponse();\n}\n\nasync function handleAddToUserDictionary(req: AddToUserDictionaryRequest): Promise<UnitResponse> {\n\tawait addToDictionary(req.words);\n\n\treturn createUnitResponse();\n}\n\nasync function handleGetUserDictionary(): Promise<GetUserDictionaryResponse> {\n\tconst dict = await getUserDictionary();\n\n\treturn { kind: 'getUserDictionary', words: dict };\n}\n\nasync function handleGetActivationKey(): Promise<GetActivationKeyResponse> {\n\tconst key = await getActivationKey();\n\n\treturn { kind: 'getActivationKey', key };\n}\n\nasync function handleSetActivationKey(req: SetActivationKeyRequest): Promise<UnitResponse> {\n\tif (!Object.values(ActivationKey).includes(req.key)) {\n\t\tthrow new Error(`Invalid activation key: ${req.key}`);\n\t}\n\tawait setActivationKey(req.key);\n\n\treturn createUnitResponse();\n}\n\nasync function handleGetHotkey(): Promise<GetHotkeyResponse> {\n\tconst hotkey = await getHotkey();\n\n\treturn { kind: 'getHotkey', hotkey };\n}\n\nasync function handleSetHotkey(req: SetHotkeyRequest): Promise<UnitResponse> {\n\t// Create a plain object to avoid proxy cloning issues\n\tconst hotkey = {\n\t\tmodifiers: [...req.hotkey.modifiers],\n\t\tkey: req.hotkey.key,\n\t};\n\tawait setHotkey(hotkey);\n}\n\nasync function handleOpenReportError(req: OpenReportErrorRequest): Promise<UnitResponse> {\n\tconst popupState: PopupState = {\n\t\tpage: 'report-error',\n\t\texample: req.example,\n\t\trule_id: req.rule_id,\n\t\tfeedback: req.feedback,\n\t};\n\n\tawait chrome.storage.local.set({ popupState });\n\n\tif (chrome.action?.openPopup) {\n\t\ttry {\n\t\t\tawait chrome.action.openPopup();\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to open popup for report error', error);\n\t\t}\n\t}\n\n\treturn createUnitResponse();\n}\n\nasync function handlePostFormData(req: PostFormDataRequest): Promise<PostFormDataResponse> {\n\tconst formData = new FormData();\n\tfor (const [key, value] of Object.entries(req.formData)) {\n\t\tformData.append(key, value);\n\t}\n\n\ttry {\n\t\tconst response = await fetch(req.url, {\n\t\t\tmethod: 'POST',\n\t\t\tbody: formData,\n\t\t});\n\n\t\treturn { kind: 'postFormData', success: response.ok };\n\t} catch (error) {\n\t\tconsole.error('Failed to post form data', error);\n\t\treturn { kind: 'postFormData', success: false };\n\t}\n}\n\nasync function handleGetInstalledOn(_req: GetInstalledOnRequest): Promise<GetInstalledOnResponse> {\n\treturn { kind: 'getInstalledOn', installedOn: await getInstalledOn() };\n}\n\nasync function handleGetReviewed(_req: GetReviewedRequest): Promise<GetReviewedResponse> {\n\treturn { kind: 'getReviewed', reviewed: await getReviewed() };\n}\n\nasync function handleSetReviewed(req: SetReviewedRequest): Promise<UnitResponse> {\n\tawait setReviewed(req.reviewed);\n\treturn createUnitResponse();\n}\n\nasync function handleGetWeirpacks(): Promise<GetWeirpacksResponse> {\n\tconst stored = await getStoredWeirpacks();\n\tconst weirpacks: WeirpackMeta[] = stored.map((item) => ({\n\t\tid: item.id,\n\t\tname: item.name,\n\t\tfilename: item.filename,\n\t\tversion: item.version,\n\t\tinstalledAt: item.installedAt,\n\t}));\n\n\treturn { kind: 'getWeirpacks', weirpacks };\n}\n\nasync function handleAddWeirpack(req: AddWeirpackRequest): Promise<UnitResponse> {\n\tconst bytes = Uint8Array.from(req.bytes);\n\tconst failures = await linter.loadWeirpackFromBytes(bytes);\n\tif (failures !== undefined) {\n\t\tthrow new Error(\n\t\t\t`This Weirpack has failing tests (${Object.keys(failures).length} rule(s) failed) and was not loaded.`,\n\t\t);\n\t}\n\n\tconst manifest = unpackWeirpackBytes(bytes).manifest;\n\tconst candidateName = manifest.name;\n\tconst candidateVersion = manifest.version;\n\tconst name =\n\t\ttypeof candidateName === 'string' && candidateName.trim().length > 0\n\t\t\t? candidateName.trim()\n\t\t\t: req.filename;\n\tconst version =\n\t\ttypeof candidateVersion === 'string' && candidateVersion.trim().length > 0\n\t\t\t? candidateVersion.trim()\n\t\t\t: null;\n\n\tconst current = await getStoredWeirpacks();\n\tcurrent.push({\n\t\tid: createWeirpackId(),\n\t\tname,\n\t\tfilename: req.filename,\n\t\tversion,\n\t\tinstalledAt: new Date().toISOString(),\n\t\tbytesBase64: bytesToBase64(bytes),\n\t});\n\tawait setStoredWeirpacks(current);\n\n\treturn createUnitResponse();\n}\n\nasync function handleRemoveWeirpack(req: RemoveWeirpackRequest): Promise<UnitResponse> {\n\tconst current = await getStoredWeirpacks();\n\tconst next = current.filter((item) => item.id !== req.id);\n\tawait setStoredWeirpacks(next);\n\n\tinitializeLinter(await linter.getDialect());\n\treturn createUnitResponse();\n}\n\n/** Set the lint configuration inside the global `linter` and in permanent storage. */\nasync function setLintConfig(lintConfig: LintConfig): Promise<void> {\n\tawait linter.setLintConfig(lintConfig);\n\n\tconst json = await linter.getLintConfigAsJSON();\n\n\tawait chrome.storage.local.set({ lintConfig: json });\n}\n\n/** Get the lint configuration from permanent storage. */\nasync function getLintConfig(): Promise<LintConfig> {\n\tconst json = await linter.getLintConfigAsJSON();\n\tconst resp = await chrome.storage.local.get({ lintConfig: json });\n\treturn JSON.parse(resp.lintConfig);\n}\n\n/** Get the ignored lint state from permanent storage. */\nasync function setIgnoredLints(state: string): Promise<void> {\n\tawait linter.importIgnoredLints(state);\n\n\tconst json = await linter.exportIgnoredLints();\n\n\tawait chrome.storage.local.set({ ignoredLints: json });\n}\n\n/** Get the ignored lint state from permanent storage. */\nasync function getIgnoredLints(): Promise<string> {\n\tconst state = await linter.exportIgnoredLints();\n\tconst resp = await chrome.storage.local.get({ ignoredLints: state });\n\treturn resp.ignoredLints;\n}\n\nasync function getDialect(): Promise<Dialect> {\n\tconst resp = await chrome.storage.local.get('dialect');\n\n\t// If user hasn't set a dialect, try to detect from browser language\n\tif (resp.dialect === undefined) {\n\t\treturn detectBrowserDialect();\n\t}\n\n\treturn resp.dialect;\n}\n\nasync function getActivationKey(): Promise<ActivationKey> {\n\tconst resp = await chrome.storage.local.get({ activationKey: ActivationKey.Off });\n\treturn resp.activationKey;\n}\n\nasync function getHotkey(): Promise<Hotkey> {\n\tconst resp = await chrome.storage.local.get({ hotkey: { modifiers: ['Ctrl'], key: 'e' } });\n\treturn resp.hotkey;\n}\n\nasync function setActivationKey(key: ActivationKey) {\n\tawait chrome.storage.local.set({ activationKey: key });\n}\n\nasync function setHotkey(hotkey: Hotkey) {\n\tawait chrome.storage.local.set({ hotkey: hotkey });\n}\n\nfunction initializeLinter(dialect: Dialect) {\n\tif (linter != null) {\n\t\tlinter.dispose();\n\t}\n\n\tlinter = new LocalLinter({\n\t\tbinary: BinaryModule.create(chrome.runtime.getURL('./wasm/harper_wasm_bg.wasm')),\n\t\tdialect,\n\t});\n\n\tgetIgnoredLints().then((i) => linter.importIgnoredLints(i));\n\tgetUserDictionary().then((u) => linter.importWords(u));\n\tgetLintConfig().then((c) => linter.setLintConfig(c));\n\tloadStoredWeirpacksIntoLinter();\n\tlinter.setup();\n}\n\nasync function setDialect(dialect: Dialect) {\n\tawait chrome.storage.local.set({ dialect });\n\tinitializeLinter(dialect);\n}\n\n/** Format the key to be used in local storage to store domain status. */\nfunction formatDomainKey(domain: string): string {\n\treturn `domainStatus ${domain}`;\n}\n\n/** Check if Harper has been enabled for a given domain. */\nasync function enabledForDomain(domain: string): Promise<boolean | null> {\n\tconst req = await chrome.storage.local.get({\n\t\t[formatDomainKey(domain)]: await enabledByDefault(),\n\t});\n\treturn req[formatDomainKey(domain)];\n}\n\n/** Set whether Harper is enabled for a given domain.\n *\n * @param overrideValue dictates whether this should override a previous setting.\n * */\nasync function setDomainEnable(domain: string, status: boolean, overrideValue = true) {\n\tlet shouldSet = !(await isDomainSet(domain));\n\n\tif (overrideValue) {\n\t\tshouldSet = true;\n\t}\n\n\tif (shouldSet) {\n\t\tawait chrome.storage.local.set({ [formatDomainKey(domain)]: status });\n\t}\n}\n\n/** Set whether Harper is enabled by default. */\nasync function setDefaultEnable(status: boolean) {\n\tawait chrome.storage.local.set({ defaultEnable: status });\n}\n\n/** Check if Harper has been enabled by default. */\nasync function enabledByDefault(): Promise<boolean> {\n\tconst req = await chrome.storage.local.get({ defaultEnable: false });\n\treturn req.defaultEnable;\n}\n\n/** Check whether Harper's state has been set for a given domain. */\nasync function isDomainSet(domain: string): Promise<boolean> {\n\tconst resp = await chrome.storage.local.get(formatDomainKey(domain));\n\treturn typeof resp[formatDomainKey(domain)] == 'boolean';\n}\n\n/** Reset the persistent user dictionary. */\nasync function resetDictionary(): Promise<void> {\n\tawait chrome.storage.local.set({ userDictionary: null });\n\n\tinitializeLinter(await linter.getDialect());\n}\n\n/** Add words to the persistent user dictionary. */\nasync function addToDictionary(words: string[]): Promise<void> {\n\tconst exported = await linter.exportWords();\n\texported.push(...words);\n\n\tawait Promise.all([\n\t\tlinter.importWords(exported),\n\t\tchrome.storage.local.set({ userDictionary: exported }),\n\t]);\n}\n\n/** Grab the user dictionary from persistent storage. */\nasync function getUserDictionary(): Promise<string[]> {\n\tconst resp = await chrome.storage.local.get({ userDictionary: [] });\n\treturn resp.userDictionary;\n}\n\n/** Record the date the extension was installed, if it's missing. */\nasync function setInstalledOnIfMissing(): Promise<void> {\n\tconst current = await getInstalledOn();\n\tif (current !== null) {\n\t\treturn;\n\t}\n\n\tconst installedOn = new Date().toISOString();\n\tawait chrome.storage.local.set({ installedOn });\n}\n\nasync function getInstalledOn(): Promise<string | null> {\n\tconst resp = await chrome.storage.local.get({ installedOn: null });\n\treturn resp.installedOn;\n}\n\nasync function getReviewed(): Promise<boolean> {\n\tconst resp = await chrome.storage.local.get({ reviewed: false });\n\treturn Boolean(resp.reviewed);\n}\n\nasync function setReviewed(reviewed: boolean): Promise<void> {\n\tawait chrome.storage.local.set({ reviewed });\n}\n\ntype StoredWeirpack = WeirpackMeta & {\n\tbytesBase64: string;\n};\n\nfunction createWeirpackId(): string {\n\treturn crypto.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n\tlet binary = '';\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary);\n}\n\nfunction base64ToBytes(encoded: string): Uint8Array {\n\tconst binary = atob(encoded);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let i = 0; i < binary.length; i++) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\treturn bytes;\n}\n\nasync function setStoredWeirpacks(weirpacks: StoredWeirpack[]): Promise<void> {\n\tawait chrome.storage.local.set({ [WEIRPACKS_KEY]: weirpacks });\n}\n\nasync function getStoredWeirpacks(): Promise<StoredWeirpack[]> {\n\tconst response = await chrome.storage.local.get({ [WEIRPACKS_KEY]: [] as StoredWeirpack[] });\n\tconst value = response[WEIRPACKS_KEY];\n\treturn Array.isArray(value) ? value : [];\n}\n\nasync function loadStoredWeirpacksIntoLinter(): Promise<void> {\n\tconst weirpacks = await getStoredWeirpacks();\n\tfor (const weirpack of weirpacks) {\n\t\ttry {\n\t\t\tconst failures = await linter.loadWeirpackFromBytes(base64ToBytes(weirpack.bytesBase64));\n\t\t\tif (failures !== undefined) {\n\t\t\t\tconsole.error(`Stored Weirpack ${weirpack.name} failed tests`, failures);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(`Failed to load stored Weirpack ${weirpack.name}`, error);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/contentScript/GoogleDocsBridgeClient.ts",
    "content": "// @ts-nocheck\n\nimport type {\n\tGoogleDocsGetRectsResponse,\n\tGoogleDocsNotificationMessage,\n\tGoogleDocsRect,\n\tGoogleDocsRequest,\n\tGoogleDocsRequestMessage,\n\tGoogleDocsResponse,\n\tGoogleDocsResponseMessage,\n} from '../../public/google-docs-protocol.js';\n\ntype PendingRequest = {\n\tresolve: (value: GoogleDocsResponse) => void;\n\treject: (reason?: unknown) => void;\n\ttimerId: number;\n};\n\nconst PROTOCOL_VERSION = 'harper-gdocs-bridge/v1';\nconst EVENT_REQUEST = 'harper:gdocs:request';\nconst EVENT_RESPONSE = 'harper:gdocs:response';\nconst EVENT_NOTIFICATION = 'harper:gdocs:notification';\n\n/** Content-script client for Google Docs bridge request/response + notifications. */\nexport default class GoogleDocsBridgeClient {\n\tprivate readonly documentRef: Document;\n\tprivate readonly timeoutMs: number;\n\tprivate readonly pending = new Map<string, PendingRequest>();\n\tprivate readonly onResponseBound: EventListener;\n\tprivate readonly onNotificationBound: EventListener;\n\n\tprivate readonly textUpdatedListeners = new Set<(length: number) => void>();\n\tprivate readonly layoutChangedListeners = new Set<\n\t\t(reason: string, layoutEpoch: number) => void\n\t>();\n\n\tpublic constructor(documentRef: Document = document, timeoutMs = 2000) {\n\t\tthis.documentRef = documentRef;\n\t\tthis.timeoutMs = timeoutMs;\n\t\tthis.onResponseBound = this.onResponse.bind(this);\n\t\tthis.onNotificationBound = this.onNotification.bind(this);\n\t\tthis.documentRef.addEventListener(EVENT_RESPONSE, this.onResponseBound);\n\t\tthis.documentRef.addEventListener(EVENT_NOTIFICATION, this.onNotificationBound);\n\t}\n\n\t/** Remove listeners and reject any pending bridge requests. */\n\tpublic dispose() {\n\t\tthis.documentRef.removeEventListener(EVENT_RESPONSE, this.onResponseBound);\n\t\tthis.documentRef.removeEventListener(EVENT_NOTIFICATION, this.onNotificationBound);\n\t\tfor (const [requestId, pending] of this.pending.entries()) {\n\t\t\tclearTimeout(pending.timerId);\n\t\t\tpending.reject(new Error(`Google Docs bridge request \"${requestId}\" was disposed`));\n\t\t}\n\t\tthis.pending.clear();\n\t\tthis.textUpdatedListeners.clear();\n\t\tthis.layoutChangedListeners.clear();\n\t}\n\n\t/** Get on-screen rects for a text span in the Google Doc. */\n\tpublic async getRects(start: number, end: number): Promise<GoogleDocsRect[]> {\n\t\tconst response = (await this.request({\n\t\t\tkind: 'getRects',\n\t\t\tstart,\n\t\t\tend,\n\t\t})) as GoogleDocsGetRectsResponse;\n\t\treturn response.rects;\n\t}\n\n\t/** Replace a text span in the Google Doc. Returns true if the edit was applied. */\n\tpublic async replaceText(\n\t\tstart: number,\n\t\tend: number,\n\t\treplacementText: string,\n\t\texpectedText?: string,\n\t\tbeforeContext?: string,\n\t\tafterContext?: string,\n\t): Promise<boolean> {\n\t\tconst response = await this.request({\n\t\t\tkind: 'replaceText',\n\t\t\tstart,\n\t\t\tend,\n\t\t\treplacementText,\n\t\t\texpectedText,\n\t\t\tbeforeContext,\n\t\t\tafterContext,\n\t\t});\n\t\treturn response.kind === 'replaceText' ? response.applied : false;\n\t}\n\n\t/** Listen for bridge text updates. Returns an unsubscribe function. */\n\tpublic onTextUpdated(cb: (length: number) => void): () => void {\n\t\tthis.textUpdatedListeners.add(cb);\n\t\treturn () => this.textUpdatedListeners.delete(cb);\n\t}\n\n\t/** Listen for bridge layout changes. Returns an unsubscribe function. */\n\tpublic onLayoutChanged(cb: (reason: string, layoutEpoch: number) => void): () => void {\n\t\tthis.layoutChangedListeners.add(cb);\n\t\treturn () => this.layoutChangedListeners.delete(cb);\n\t}\n\n\t/** Send one bridge request and wait for the response with the same request id. */\n\tprivate async request(request: GoogleDocsRequest): Promise<GoogleDocsResponse> {\n\t\tconst requestId = this.createRequestId();\n\t\tconst message: GoogleDocsRequestMessage = {\n\t\t\tprotocol: PROTOCOL_VERSION,\n\t\t\trequestId,\n\t\t\trequest,\n\t\t};\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst timerId = window.setTimeout(() => {\n\t\t\t\tthis.pending.delete(requestId);\n\t\t\t\treject(new Error(`Google Docs bridge request \"${request.kind}\" timed out`));\n\t\t\t}, this.timeoutMs);\n\n\t\t\tthis.pending.set(requestId, { resolve, reject, timerId });\n\t\t\tthis.documentRef.dispatchEvent(new CustomEvent(EVENT_REQUEST, { detail: message }));\n\t\t});\n\t}\n\n\t/** Route bridge responses to the matching pending request. */\n\tprivate onResponse(event: Event) {\n\t\tconst detail = (event as CustomEvent).detail;\n\t\tif (!this.isResponseMessage(detail)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst pending = this.pending.get(detail.requestId);\n\t\tif (!pending) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.pending.delete(detail.requestId);\n\t\tclearTimeout(pending.timerId);\n\t\tif (detail.response.kind === 'error') {\n\t\t\tpending.reject(new Error(detail.response.message || 'Google Docs bridge request failed'));\n\t\t\treturn;\n\t\t}\n\n\t\tpending.resolve(detail.response);\n\t}\n\n\t/** Route bridge notifications to local subscribers. */\n\tprivate onNotification(event: Event) {\n\t\tconst detail = (event as CustomEvent).detail;\n\t\tif (!this.isNotificationMessage(detail)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { notification } = detail;\n\t\tif (notification.kind === 'textUpdated') {\n\t\t\tfor (const listener of this.textUpdatedListeners) {\n\t\t\t\tlistener(notification.length);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (notification.kind === 'layoutChanged') {\n\t\t\tfor (const listener of this.layoutChangedListeners) {\n\t\t\t\tlistener(notification.reason, notification.layoutEpoch);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Create a request id for request/response matching. */\n\tprivate createRequestId(): string {\n\t\treturn `gdocs-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n\t}\n\n\tprivate isResponseMessage(value: unknown): value is GoogleDocsResponseMessage {\n\t\tif (!this.isObject(value)) return false;\n\t\treturn (\n\t\t\tvalue.protocol === PROTOCOL_VERSION &&\n\t\t\ttypeof value.requestId === 'string' &&\n\t\t\tthis.isObject(value.response) &&\n\t\t\ttypeof value.response.kind === 'string'\n\t\t);\n\t}\n\n\tprivate isNotificationMessage(value: unknown): value is GoogleDocsNotificationMessage {\n\t\tif (!this.isObject(value)) return false;\n\t\treturn (\n\t\t\tvalue.protocol === PROTOCOL_VERSION &&\n\t\t\tthis.isObject(value.notification) &&\n\t\t\ttypeof value.notification.kind === 'string'\n\t\t);\n\t}\n\n\tprivate isObject(value: unknown): value is Record<string, any> {\n\t\treturn value != null && typeof value === 'object';\n\t}\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/contentScript/googleDocs.ts",
    "content": "import type { LintFramework } from 'lint-framework';\nimport GoogleDocsBridgeClient from './GoogleDocsBridgeClient';\nimport {\n\tcreateGoogleDocsLineBand,\n\textendGoogleDocsLineBand,\n\ttype GoogleDocsLineBand,\n\ttype GoogleDocsRectLayout,\n\trectSharesGoogleDocsLineBand,\n\tshouldInsertGoogleDocsSpace,\n} from './googleDocsLayout';\n\ndeclare global {\n\tinterface Window {\n\t\t__harperGoogleDocsBridgeClient?: GoogleDocsBridgeClient;\n\t}\n}\n\nconst GOOGLE_DOCS_BRIDGE_ID = 'harper-google-docs-target';\nconst GOOGLE_DOCS_MAIN_WORLD_BRIDGE_ID = 'harper-google-docs-main-world-bridge';\nconst GOOGLE_DOCS_SCROLL_LAYOUT_REASONS = new Set(['scroll', 'wheel', 'key-scroll']);\nconst GOOGLE_DOCS_EDITOR_SELECTOR = '.kix-appview-editor';\nconst GOOGLE_DOCS_SVG_RECT_SELECTOR = 'rect[aria-label]';\nconst GOOGLE_DOCS_TABLE_CELL_GAP_THRESHOLD_PX = 60;\nconst GOOGLE_DOCS_PARAGRAPH_BREAK_GAP_RATIO = 0.5;\nconst GOOGLE_DOCS_MIN_PARAGRAPH_BREAK_GAP_PX = 6;\n\ntype LayoutRefreshFramework = LintFramework & {\n\trefreshLayout?: () => void;\n};\n\nexport function isGoogleDocsPage(): boolean {\n\treturn (\n\t\twindow.location.hostname === 'docs.google.com' &&\n\t\twindow.location.pathname.startsWith('/document/')\n\t);\n}\n\n/**\n * Creates a serialized sync function that keeps Harper's hidden lint target in step with\n * Google Docs' rendered text layer.\n *\n * Why: Google Docs does not expose a stable, contenteditable DOM surface we can lint directly.\n * We instead mirror its visual text rects into our own hidden bridge node, then point\n * `LintFramework` at that node.\n */\nexport function createGoogleDocsBridgeSync(fw: LintFramework): () => Promise<void> {\n\tlet googleDocsSyncInFlight = false;\n\tlet googleDocsSyncPending = false;\n\tlet googleDocsBridgeAttached = false;\n\tlet googleDocsEventsBound = false;\n\tlet googleDocsCloneSignature = '';\n\tlet googleDocsBridgeClient: GoogleDocsBridgeClient | null = null;\n\n\t/**\n\t * Ensures the hidden bridge element exists under the live editor container.\n\t *\n\t * Why: attaching to the editor keeps coordinate systems aligned so lint overlays map\n\t * correctly to what the user sees.\n\t */\n\tfunction getGoogleDocsBridge(editor: HTMLElement): HTMLElement {\n\t\tlet bridge = document.getElementById(GOOGLE_DOCS_BRIDGE_ID);\n\n\t\tif (!bridge) {\n\t\t\tbridge = document.createElement('div');\n\t\t\tbridge.id = GOOGLE_DOCS_BRIDGE_ID;\n\t\t\tbridge.setAttribute('data-harper-google-docs-target', 'true');\n\t\t\tbridge.setAttribute('aria-hidden', 'true');\n\t\t\tbridge.style.position = 'absolute';\n\t\t\tbridge.style.top = '0';\n\t\t\tbridge.style.left = '0';\n\t\t\tbridge.style.width = '0';\n\t\t\tbridge.style.height = '0';\n\t\t\tbridge.style.overflow = 'visible';\n\t\t\tbridge.style.pointerEvents = 'none';\n\t\t\tbridge.style.opacity = '0';\n\t\t\tbridge.style.zIndex = '-2147483648';\n\t\t\tbridge.setAttribute('contenteditable', 'false');\n\t\t\tbridge.setAttribute('data-language', 'plaintext');\n\t\t\teditor.appendChild(bridge);\n\t\t}\n\n\t\tif (bridge.parentElement !== editor) {\n\t\t\teditor.appendChild(bridge);\n\t\t}\n\n\t\treturn bridge;\n\t}\n\n\t/**\n\t * Injects the page-world bridge script once.\n\t *\n\t * Why: content scripts run in an isolated world and cannot directly access some\n\t * Google Docs internals. The injected main-world bridge can, then communicates via DOM events.\n\t */\n\tfunction ensureGoogleDocsMainWorldBridge() {\n\t\tif (document.getElementById(GOOGLE_DOCS_MAIN_WORLD_BRIDGE_ID)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst script = document.createElement('script');\n\t\tscript.type = 'module';\n\t\tscript.src = chrome.runtime.getURL('google-docs-bridge.js');\n\t\t(document.head || document.documentElement).appendChild(script);\n\t\tscript.onload = () => script.remove();\n\t}\n\n\t/**\n\t * Wires bridge events into framework refresh paths.\n\t *\n\t * Why: we react to push-style updates from Docs instead of polling heavily.\n\t * Layout refreshes intentionally ignore pure scroll reasons to avoid expensive\n\t * recalculations on high-frequency movement.\n\t */\n\tfunction bindGoogleDocsBridgeEvents(syncGoogleDocsBridge: () => Promise<void>) {\n\t\tif (!isGoogleDocsPage() || googleDocsEventsBound) {\n\t\t\treturn;\n\t\t}\n\n\t\tgoogleDocsEventsBound = true;\n\t\tgoogleDocsBridgeClient = new GoogleDocsBridgeClient(document);\n\t\twindow.__harperGoogleDocsBridgeClient = googleDocsBridgeClient;\n\t\tgoogleDocsBridgeClient.onTextUpdated(() => {\n\t\t\tvoid syncGoogleDocsBridge();\n\t\t});\n\t\tgoogleDocsBridgeClient.onLayoutChanged((reason) => {\n\t\t\tif (!GOOGLE_DOCS_SCROLL_LAYOUT_REASONS.has(String(reason))) {\n\t\t\t\t(fw as LayoutRefreshFramework).refreshLayout?.();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Normalizes Google Docs aria-label text into a whitespace shape closer to user-visible text.\n\t *\n\t * Why: Docs tokenization can collapse or split spaces around punctuation in ways that\n\t * produce false positives/offset drift for lint spans.\n\t */\n\tfunction normalizeGoogleDocsLabel(label: string): string {\n\t\tconst tokens = label.split(' ');\n\n\t\tfor (let i = 0; i < tokens.length; i += 1) {\n\t\t\tconst token = tokens[i];\n\t\t\tif (token === '') {\n\t\t\t\ttokens[i] = '\\xa0';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst isLast = i === tokens.length - 1;\n\t\t\tconst lastChar = token.charAt(token.length - 1);\n\t\t\tconst nextFirstChar = tokens[i + 1]?.charAt(0) ?? '';\n\t\t\tconst keepTightTrailing = /[([\"'“\\-_`]/.test(lastChar);\n\t\t\tconst keepTightLeadingNext = /[)\\]\"'”\\-_`]/.test(nextFirstChar);\n\n\t\t\ttokens[i] = !isLast && !keepTightTrailing && !keepTightLeadingNext ? `${token} ` : token;\n\t\t}\n\n\t\treturn tokens.join('');\n\t}\n\n\t/**\n\t * Adds a token to a small rolling hash (djb2 variant).\n\t *\n\t * Why: fast change detection lets us skip expensive DOM replacement and framework updates\n\t * when reconstructed clone output is effectively unchanged.\n\t */\n\tfunction addHashToken(hash: number, token: string): number {\n\t\tlet next = hash;\n\t\tfor (let i = 0; i < token.length; i += 1) {\n\t\t\tnext = (next * 33 + token.charCodeAt(i)) >>> 0;\n\t\t}\n\t\treturn next;\n\t}\n\n\tfunction isGoogleDocsStandaloneListMarker(label: string): boolean {\n\t\treturn /^(\\d+\\.|[-+*•◦▪‣])$/.test(label.trim());\n\t}\n\n\t/**\n\t * Rebuilds the hidden clone from Docs SVG text rects.\n\t *\n\t * How: each labeled rect becomes an absolutely-positioned span in the bridge.\n\t * Why: this preserves enough geometry for highlight placement while giving Harper a\n\t * stable text surface. The signature short-circuits no-op updates.\n\t */\n\tfunction rebuildGoogleDocsClone(editor: HTMLElement, clone: HTMLElement): { changed: boolean } {\n\t\tconst rectNodes = editor.querySelectorAll<SVGRectElement>(GOOGLE_DOCS_SVG_RECT_SELECTOR);\n\t\tconst editorRect = editor.getBoundingClientRect();\n\t\tconst scrollTop = editor.scrollTop;\n\t\tconst scrollLeft = editor.scrollLeft;\n\t\tconst fragment = document.createDocumentFragment();\n\t\tconst parts: string[] = [];\n\t\tlet nextHash = 5381;\n\t\tlet currentLineBand: GoogleDocsLineBand | null = null;\n\t\tlet lastLayoutRect: GoogleDocsRectLayout | null = null;\n\t\tlet lastLabel = '';\n\t\tlet lastRight: number | null = null;\n\t\tlet segmentCount = 0;\n\n\t\tfor (const rectNode of Array.from(rectNodes)) {\n\t\t\tconst areaLabel = rectNode.getAttribute('aria-label');\n\t\t\tif (!areaLabel) continue;\n\n\t\t\tconst normalizedLabel = normalizeGoogleDocsLabel(areaLabel);\n\t\t\tif (!normalizedLabel) continue;\n\n\t\t\tconst rect = rectNode.getBoundingClientRect();\n\t\t\tif (!Number.isFinite(rect.top) || rect.width <= 0 || rect.height <= 0) continue;\n\n\t\t\tconst top = rect.top - editorRect.top + scrollTop;\n\t\t\tconst left = rect.left - editorRect.left + scrollLeft;\n\t\t\tconst right = left + rect.width;\n\t\t\tif (!Number.isFinite(top)) continue;\n\t\t\tif (!Number.isFinite(left)) continue;\n\t\t\tif (!Number.isFinite(right)) continue;\n\n\t\t\tconst layoutRect: GoogleDocsRectLayout = {\n\t\t\t\ttop,\n\t\t\t\tleft,\n\t\t\t\twidth: rect.width,\n\t\t\t\theight: rect.height,\n\t\t\t};\n\t\t\tconst sharesVisualLine =\n\t\t\t\tcurrentLineBand != null && rectSharesGoogleDocsLineBand(layoutRect, currentLineBand);\n\t\t\tconst shouldInsertLineBreak =\n\t\t\t\t(currentLineBand != null && !sharesVisualLine) ||\n\t\t\t\t(sharesVisualLine &&\n\t\t\t\t\t!isGoogleDocsStandaloneListMarker(lastLabel) &&\n\t\t\t\t\tlastRight != null &&\n\t\t\t\t\tleft - lastRight >= GOOGLE_DOCS_TABLE_CELL_GAP_THRESHOLD_PX);\n\n\t\t\tif (shouldInsertLineBreak && parts.length > 0 && !parts[parts.length - 1].endsWith('\\n')) {\n\t\t\t\tconst lineGap =\n\t\t\t\t\tcurrentLineBand == null ? 0 : Math.max(0, layoutRect.top - currentLineBand.bottom);\n\t\t\t\tconst paragraphBreakThreshold = Math.max(\n\t\t\t\t\tGOOGLE_DOCS_MIN_PARAGRAPH_BREAK_GAP_PX,\n\t\t\t\t\tMath.min(currentLineBand?.bottom - currentLineBand?.top || 0, layoutRect.height) *\n\t\t\t\t\t\tGOOGLE_DOCS_PARAGRAPH_BREAK_GAP_RATIO,\n\t\t\t\t);\n\t\t\t\tconst breakText = !sharesVisualLine && lineGap >= paragraphBreakThreshold ? '\\n\\n' : '\\n';\n\t\t\t\tparts.push(breakText);\n\t\t\t\tfragment.appendChild(document.createTextNode(breakText));\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!shouldInsertLineBreak &&\n\t\t\t\tlastLayoutRect != null &&\n\t\t\t\t(isGoogleDocsStandaloneListMarker(lastLabel) ||\n\t\t\t\t\tshouldInsertGoogleDocsSpace(lastLayoutRect, layoutRect, lastLabel, normalizedLabel))\n\t\t\t) {\n\t\t\t\tparts.push(' ');\n\t\t\t\tfragment.appendChild(document.createTextNode(' '));\n\t\t\t}\n\n\t\t\tconst span = document.createElement('span');\n\t\t\tspan.textContent = normalizedLabel;\n\t\t\tspan.style.position = 'absolute';\n\t\t\tspan.style.whiteSpace = 'pre';\n\t\t\tspan.style.overflow = 'hidden';\n\t\t\tspan.style.left = `${left}px`;\n\t\t\tspan.style.top = `${top}px`;\n\t\t\tspan.style.width = `${Math.max(rect.width, 1)}px`;\n\t\t\tspan.style.height = `${Math.max(rect.height, 1)}px`;\n\t\t\tspan.style.lineHeight = `${Math.max(rect.height, 1)}px`;\n\t\t\tconst fontCss = rectNode.getAttribute('data-font-css');\n\t\t\tif (fontCss) {\n\t\t\t\tspan.style.font = fontCss;\n\t\t\t}\n\t\t\tfragment.appendChild(span);\n\n\t\t\tparts.push(normalizedLabel);\n\t\t\tcurrentLineBand =\n\t\t\t\tcurrentLineBand == null || shouldInsertLineBreak\n\t\t\t\t\t? createGoogleDocsLineBand(layoutRect)\n\t\t\t\t\t: extendGoogleDocsLineBand(currentLineBand, layoutRect);\n\t\t\tlastLayoutRect = layoutRect;\n\t\t\tlastLabel = normalizedLabel;\n\t\t\tlastRight = right;\n\t\t\tsegmentCount += 1;\n\n\t\t\tnextHash = addHashToken(nextHash, normalizedLabel);\n\t\t\tnextHash = addHashToken(\n\t\t\t\tnextHash,\n\t\t\t\t`${Math.round(top)}:${Math.round(left)}:${Math.round(rect.width)}`,\n\t\t\t);\n\t\t}\n\n\t\tconst nextText = parts.join('');\n\t\tnextHash = addHashToken(\n\t\t\tnextHash,\n\t\t\t`${nextText.length}:${segmentCount}:${Math.round(scrollTop)}`,\n\t\t);\n\t\tconst nextSignature = String(nextHash);\n\t\tif (nextSignature === googleDocsCloneSignature && clone.textContent === nextText) {\n\t\t\treturn { changed: false };\n\t\t}\n\n\t\tclone.replaceChildren(fragment);\n\t\tclone.setAttribute('data-harper-gdocs-segments', String(segmentCount));\n\t\tgoogleDocsCloneSignature = nextSignature;\n\t\treturn { changed: true };\n\t}\n\n\t/**\n\t * Performs one sync pass, with in-flight serialization and a pending replay.\n\t *\n\t * Why: Docs can fire bursts of changes; serialization prevents overlapping `fw.update()`\n\t * work and ensures we process at least one follow-up pass after a busy interval.\n\t */\n\tasync function syncGoogleDocsBridge() {\n\t\tif (!isGoogleDocsPage()) {\n\t\t\tif (googleDocsBridgeClient) {\n\t\t\t\tgoogleDocsBridgeClient.dispose();\n\t\t\t\tgoogleDocsBridgeClient = null;\n\t\t\t}\n\t\t\tdelete window.__harperGoogleDocsBridgeClient;\n\t\t\tgoogleDocsEventsBound = false;\n\t\t\treturn;\n\t\t}\n\n\t\tif (googleDocsSyncInFlight) {\n\t\t\tgoogleDocsSyncPending = true;\n\t\t\treturn;\n\t\t}\n\n\t\tgoogleDocsSyncInFlight = true;\n\n\t\ttry {\n\t\t\tensureGoogleDocsMainWorldBridge();\n\t\t\tbindGoogleDocsBridgeEvents(syncGoogleDocsBridge);\n\n\t\t\tconst editor = document.querySelector(GOOGLE_DOCS_EDITOR_SELECTOR);\n\t\t\tif (!(editor instanceof HTMLElement)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst target = getGoogleDocsBridge(editor);\n\t\t\tconst { changed } = rebuildGoogleDocsClone(editor, target);\n\n\t\t\tif (!googleDocsBridgeAttached) {\n\t\t\t\tawait fw.addTarget(target);\n\t\t\t\tgoogleDocsBridgeAttached = true;\n\t\t\t}\n\n\t\t\tif (changed) {\n\t\t\t\tawait fw.update();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error('Failed to sync Google Docs bridge text', err);\n\t\t} finally {\n\t\t\tgoogleDocsSyncInFlight = false;\n\n\t\t\tif (googleDocsSyncPending) {\n\t\t\t\tgoogleDocsSyncPending = false;\n\t\t\t\tvoid syncGoogleDocsBridge();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn syncGoogleDocsBridge;\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/contentScript/googleDocsBootstrap.js",
    "content": "(() => {\n\ttry {\n\t\t// Google Docs checks this main-world flag very early to enable\n\t\t// extension-specific annotation/canvas behavior.\n\t\twindow._docs_annotate_canvas_by_ext = 'hokifickgkhplphjiodbggjmoafhignh';\n\t} catch {}\n})();\n"
  },
  {
    "path": "packages/chrome-plugin/src/contentScript/googleDocsLayout.ts",
    "content": "export type GoogleDocsRectLayout = {\n\ttop: number;\n\tleft: number;\n\twidth: number;\n\theight: number;\n};\n\nexport type GoogleDocsLineBand = {\n\ttop: number;\n\tbottom: number;\n};\n\nconst GOOGLE_DOCS_LINE_OVERLAP_TOLERANCE_PX = 1;\nconst GOOGLE_DOCS_SPACE_GAP_RATIO = 0.2;\nconst GOOGLE_DOCS_MIN_SPACE_GAP_PX = 3;\n\nexport function createGoogleDocsLineBand(rect: GoogleDocsRectLayout): GoogleDocsLineBand {\n\treturn {\n\t\ttop: rect.top,\n\t\tbottom: rect.top + rect.height,\n\t};\n}\n\nexport function extendGoogleDocsLineBand(\n\tlineBand: GoogleDocsLineBand,\n\trect: GoogleDocsRectLayout,\n): GoogleDocsLineBand {\n\treturn {\n\t\ttop: Math.min(lineBand.top, rect.top),\n\t\tbottom: Math.max(lineBand.bottom, rect.top + rect.height),\n\t};\n}\n\nexport function rectSharesGoogleDocsLineBand(\n\trect: GoogleDocsRectLayout,\n\tlineBand: GoogleDocsLineBand,\n): boolean {\n\tconst rectBottom = rect.top + rect.height;\n\n\treturn (\n\t\trect.top <= lineBand.bottom + GOOGLE_DOCS_LINE_OVERLAP_TOLERANCE_PX &&\n\t\trectBottom >= lineBand.top - GOOGLE_DOCS_LINE_OVERLAP_TOLERANCE_PX\n\t);\n}\n\nexport function shouldInsertGoogleDocsSpace(\n\tpreviousRect: GoogleDocsRectLayout,\n\tcurrentRect: GoogleDocsRectLayout,\n\tpreviousText: string,\n\tcurrentText: string,\n): boolean {\n\tif (previousText.length === 0 || currentText.length === 0) {\n\t\treturn false;\n\t}\n\n\tif (/\\s$/.test(previousText) || /^\\s/.test(currentText)) {\n\t\treturn false;\n\t}\n\n\tif (/[([{\"'“‘-]$/.test(previousText) || /^[,.;:!?)\\]}\"'”’]/.test(currentText)) {\n\t\treturn false;\n\t}\n\n\tconst gap = currentRect.left - (previousRect.left + previousRect.width);\n\tconst threshold = Math.max(\n\t\tGOOGLE_DOCS_MIN_SPACE_GAP_PX,\n\t\tMath.min(previousRect.height, currentRect.height) * GOOGLE_DOCS_SPACE_GAP_RATIO,\n\t);\n\n\treturn gap >= threshold;\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/contentScript/index.ts",
    "content": "import '@webcomponents/custom-elements';\nimport {\n\tgetClosestBlockAncestor,\n\tisVisible,\n\tLintFramework,\n\tleafNodes,\n\ttype UnpackedLint,\n} from 'lint-framework';\nimport isSubstack from '../isSubstack';\nimport isWordPress from '../isWordPress';\nimport ProtocolClient from '../ProtocolClient';\nimport { createGoogleDocsBridgeSync, isGoogleDocsPage } from './googleDocs';\n\nif (isWordPress() || isSubstack()) {\n\tProtocolClient.setDomainEnabled(window.location.hostname, true, false);\n}\n\nconst fw = new LintFramework(\n\t(text, domain, options) => ProtocolClient.lint(text, domain, options),\n\t{\n\t\tignoreLint: (hash) => ProtocolClient.ignoreHash(hash),\n\t\tgetActivationKey: () => ProtocolClient.getActivationKey(),\n\t\tgetHotkey: () => ProtocolClient.getHotkey(),\n\t\topenOptions: () => ProtocolClient.openOptions(),\n\t\taddToUserDictionary: (words) => ProtocolClient.addToUserDictionary(words),\n\t\treportError: (lint: UnpackedLint, ruleId: string) =>\n\t\t\tProtocolClient.openReportError(\n\t\t\t\tpadWithContext(lint.source, lint.span.start, lint.span.end, 15),\n\t\t\t\truleId,\n\t\t\t\t'',\n\t\t\t),\n\t\tsetRuleEnabled: async (ruleId, enabled) => {\n\t\t\tawait ProtocolClient.setRuleEnabled(ruleId, enabled);\n\t\t\tfw.update();\n\t\t},\n\t},\n);\n\nconst syncGoogleDocsBridge = createGoogleDocsBridgeSync(fw);\n\nfunction padWithContext(source: string, start: number, end: number, contextLength: number): string {\n\tconst normalizedStart = Math.max(0, Math.min(start, source.length));\n\tconst normalizedEnd = Math.max(normalizedStart, Math.min(end, source.length));\n\tconst contextStart = Math.max(0, normalizedStart - contextLength);\n\tconst contextEnd = Math.min(source.length, normalizedEnd + contextLength);\n\n\treturn source.slice(contextStart, contextEnd);\n}\n\nconst keepAliveCallback = () => {\n\tProtocolClient.lint('', 'example.com', {});\n\tvoid syncGoogleDocsBridge();\n\n\tsetTimeout(keepAliveCallback, 400);\n};\n\nkeepAliveCallback();\n\nfunction scan() {\n\tvoid syncGoogleDocsBridge();\n\n\tif (isGoogleDocsPage()) {\n\t\treturn;\n\t}\n\n\tdocument.querySelectorAll<HTMLTextAreaElement>('textarea').forEach((element) => {\n\t\tif (\n\t\t\t!isVisible(element) ||\n\t\t\telement.getAttribute('data-enable-grammarly') === 'false' ||\n\t\t\telement.disabled ||\n\t\t\telement.readOnly\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tfw.addTarget(element);\n\t});\n\n\tdocument\n\t\t.querySelectorAll<HTMLInputElement>('input[type=\"text\"][spellcheck=\"true\"]')\n\t\t.forEach((element) => {\n\t\t\tif (element.disabled || element.readOnly) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfw.addTarget(element);\n\t\t});\n\n\tdocument.querySelectorAll('[data-testid=\"gutenberg-editor\"]').forEach((element) => {\n\t\tconst leafs = leafNodes(element);\n\n\t\tconst seenBlockContainers = new Set<Element>();\n\n\t\tfor (const leaf of leafs) {\n\t\t\tconst blockContainer = getClosestBlockAncestor(leaf, element);\n\n\t\t\tif (!blockContainer || seenBlockContainers.has(blockContainer)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tseenBlockContainers.add(blockContainer);\n\n\t\t\tif (!isVisible(blockContainer)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfw.addTarget(blockContainer);\n\t\t}\n\t});\n\n\tdocument\n\t\t.querySelectorAll<HTMLElement>('.cm-editor .cm-content[contenteditable=\"true\"]')\n\t\t.forEach((element) => {\n\t\t\tconst isTypstPlayground = window.location.hostname === 'typst.app';\n\t\t\tconst explicitlyTypst = element.getAttribute('data-language') === 'typst';\n\n\t\t\tif (!isTypstPlayground && !explicitlyTypst) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (element.closest('[contenteditable=\"false\"],[disabled],[readonly]') != null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!isVisible(element)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telement.setAttribute('data-language', 'typst');\n\t\t\tfw.addTarget(element);\n\t\t});\n\n\tdocument.querySelectorAll('[contenteditable=\"true\"],[contenteditable]').forEach((element) => {\n\t\tif (element.classList.contains('cm-content') && element.closest('.cm-editor') != null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\telement.matches('[role=\"combobox\"]') ||\n\t\t\telement.getAttribute('data-enable-grammarly') === 'false' ||\n\t\t\t(element.getAttribute('spellcheck') === 'false' &&\n\t\t\t\telement.getAttribute('data-language') !== 'markdown')\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (element.classList.contains('ck-editor__editable')) {\n\t\t\telement.querySelectorAll('p').forEach((paragraph) => {\n\t\t\t\tif (paragraph.closest('[contenteditable=\"false\"],[disabled],[readonly]') != null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!isVisible(paragraph)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfw.addTarget(paragraph);\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst leafs = leafNodes(element);\n\n\t\tconst seenBlockContainers = new Set<Element>();\n\n\t\tfor (const leaf of leafs) {\n\t\t\tif (leaf.parentElement?.closest('[contenteditable=\"false\"],[disabled],[readonly]') != null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst blockContainer = getClosestBlockAncestor(leaf, element);\n\n\t\t\tif (!blockContainer || seenBlockContainers.has(blockContainer)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tseenBlockContainers.add(blockContainer);\n\n\t\t\tif (!isVisible(blockContainer)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfw.addTarget(blockContainer);\n\t\t}\n\t});\n}\n\nscan();\nnew MutationObserver(scan).observe(document.body, {\n\tchildList: true,\n\tsubtree: true,\n});\n\nsetTimeout(scan, 1000);\n"
  },
  {
    "path": "packages/chrome-plugin/src/detectBrowserEngine.ts",
    "content": "export default function detectBrowserEngine() {\n\t// @ts-expect-error\n\tif (typeof InstallTrigger !== 'undefined') return 'firefox';\n\tif (typeof window.chrome !== 'undefined') return 'chromium';\n\treturn 'unknown';\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/generateGreeting.ts",
    "content": "export default function generateGreeting(): string {\n\tconst timeOfDay = getTimeOfDay();\n\n\tswitch (timeOfDay) {\n\t\tcase TimeOfDay.Morning:\n\t\t\treturn 'Good morning!';\n\t\tcase TimeOfDay.Afternoon:\n\t\t\treturn 'Good afternoon!';\n\t\tcase TimeOfDay.Evening:\n\t\t\treturn 'Good evening!';\n\t}\n}\n\nenum TimeOfDay {\n\tMorning = 0,\n\tAfternoon = 1,\n\tEvening = 2,\n}\n\nfunction getTimeOfDay(date: Date = new Date()): TimeOfDay {\n\tconst hour = date.getHours();\n\n\tif (hour >= 5 && hour < 12) return TimeOfDay.Morning;\n\tif (hour >= 12 && hour < 18) return TimeOfDay.Afternoon;\n\treturn TimeOfDay.Evening;\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/global.d.ts",
    "content": "/// <reference types=\"svelte\" />\n/// <reference types=\"vite/client\" />\n\ndeclare const __APP_VERSION__: string;\n"
  },
  {
    "path": "packages/chrome-plugin/src/isSubstack.ts",
    "content": "/** Does a rough estimate of whether the current page is a Substack page. */\nexport default function isSubstack(): boolean {\n\tconst hostname = window.location.hostname.toLowerCase();\n\n\tif (hostname === 'substack.com' || hostname.endsWith('.substack.com')) {\n\t\treturn true;\n\t}\n\n\tif (document.querySelector('link[rel=\"preconnect\"][href*=\"substackcdn.com\"]')) {\n\t\treturn true;\n\t}\n\n\tif (document.querySelector('meta[property=\"og:title\"][content*=\"| Substack\"]')) {\n\t\treturn true;\n\t}\n\n\tif (document.querySelector('meta[name=\"description\"][content*=\"a Substack publication\"]')) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/isWordPress.ts",
    "content": "/** Does a rough estimate of whether the current page is a WordPress page. */\nexport default function isWordPress(): boolean {\n\tif (document.querySelector('meta[name=\"generator\"][content*=\"WordPress\"]')) {\n\t\treturn true;\n\t}\n\n\tif (document.querySelector('link[rel=\"https://api.w.org/\"][href]')) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/manifest.ts",
    "content": "import { defineManifest } from '@crxjs/vite-plugin';\nimport packageData from '../package.json';\n\n//@ts-expect-error\nconst isDev = process.env.NODE_ENV == 'development';\n\n/**\n * Builds a CSP string that:\n *   • always meets the MV3 minimum (`'self' 'wasm-unsafe-eval'`)\n *   • whitelists the Vite HMR server only when `isDev` is true\n *\n * NOTE: `'unsafe-eval'` is *omitted* because Chrome blocks it outright.\n */\nexport function makeExtensionCSP(isDev: boolean): string {\n\tconst scriptSrc = [\"'self'\", \"'wasm-unsafe-eval'\"]; // minimum, cannot add more\n\tconst objectSrc = [\"'self'\"]; // standard\n\tconst connectSrc = [\"'self'\"]; // WebSocket goes here\n\tconst styleSrc = [\"'self'\", \"'unsafe-inline'\", 'https://fonts.googleapis.com'];\n\tconst fontSrc = [\"'self'\", 'https://fonts.gstatic.com', 'data:'];\n\n\tif (isDev) {\n\t\t// `ws://` and `http://` use the same host:port → list both\n\t\tconnectSrc.push('http://localhost:5173', 'ws://localhost:5173');\n\t\t// include the 127.0.0.1 loopback in case you switch hosts\n\t\tconnectSrc.push('http://127.0.0.1:*', 'ws://127.0.0.1:*');\n\t\tstyleSrc.push('http://localhost:5173', 'http://127.0.0.1:*');\n\t}\n\n\tconnectSrc.push('https://writewithharper.com');\n\n\t// Assemble the semicolon-delimited CSP\n\treturn `${[\n\t\t`script-src ${scriptSrc.join(' ')}`,\n\t\t`object-src ${objectSrc.join(' ')}`,\n\t\t`connect-src ${connectSrc.join(' ')}`,\n\t\t`style-src ${styleSrc.join(' ')}`,\n\t\t`font-src ${fontSrc.join(' ')}`,\n\t].join('; ')};`;\n}\n\nexport default defineManifest({\n\tname: `Private Grammar Checker - Harper${isDev ? ' ➡️ Dev' : ''}`,\n\tdescription: packageData.description,\n\tversion: packageData.version,\n\tmanifest_version: 3,\n\taction: {\n\t\tdefault_popup: 'popup.html',\n\t},\n\toptions_page: 'options.html',\n\tbrowser_specific_settings: {\n\t\tgecko: {\n\t\t\tid: 'harper@writewithharper.com',\n\t\t\tstrict_min_version: '146.0',\n\t\t},\n\t},\n\tbackground: {\n\t\tservice_worker: 'src/background/index.ts',\n\t\tscripts: ['src/background/index.ts'],\n\t\ttype: 'module',\n\t},\n\tcontent_scripts: [\n\t\t{\n\t\t\tmatches: ['https://docs.google.com/document/*'],\n\t\t\tall_frames: false,\n\t\t\tjs: ['src/contentScript/googleDocsBootstrap.js'],\n\t\t\trun_at: 'document_start',\n\t\t\tworld: 'MAIN',\n\t\t},\n\t\t{\n\t\t\tmatches: ['<all_urls>'],\n\t\t\tall_frames: true,\n\t\t\tmatch_about_blank: true,\n\t\t\tjs: ['src/contentScript/index.ts'],\n\t\t\trun_at: 'document_idle',\n\t\t},\n\t],\n\tweb_accessible_resources: [\n\t\t{\n\t\t\tmatches: ['<all_urls>'],\n\t\t\tresources: [\n\t\t\t\t'wasm/harper_wasm_bg.wasm',\n\t\t\t\t'google-docs-bridge.js',\n\t\t\t\t'google-docs-protocol.js',\n\t\t\t\t'google-docs-bridge-request-handler.js',\n\t\t\t],\n\t\t},\n\t],\n\ticons: {\n\t\t'512': 'logo.png',\n\t},\n\tpermissions: ['storage', 'tabs'],\n\tcontent_security_policy: {\n\t\textension_pages: makeExtensionCSP(isDev),\n\t},\n\thost_permissions: ['https://writewithharper.com/*'],\n});\n"
  },
  {
    "path": "packages/chrome-plugin/src/options/Options.svelte",
    "content": "<script lang=\"ts\">\nimport { Button, Card, Input, Select, Textarea } from 'components';\nimport { Dialect, type LintConfig } from 'harper.js';\nimport logo from '/logo.png';\nimport ProtocolClient from '../ProtocolClient';\nimport type { Hotkey, Modifier, WeirpackMeta } from '../protocol';\nimport { ActivationKey } from '../protocol';\n\nlet lintConfig: LintConfig = $state({});\nlet lintDescriptions: Record<string, string> = $state({});\nlet searchQuery = $state('');\nlet searchQueryLower = $derived(searchQuery.toLowerCase());\nlet dialect = $state(Dialect.American);\nlet defaultEnabled = $state(false);\nlet activationKey: ActivationKey = $state(ActivationKey.Off);\nlet userDict = $state('');\nlet modifyHotkeyButton: Button;\nlet hotkey: Hotkey = $state({ modifiers: ['Ctrl'], key: 'e' });\nlet anyRulesEnabled = $derived(Object.values(lintConfig ?? {}).some((value) => value !== false));\nlet weirpacks: WeirpackMeta[] = $state([]);\nlet weirpackBusy = $state(false);\nlet weirpackError = $state('');\n\n$effect(() => {\n\tProtocolClient.setLintConfig($state.snapshot(lintConfig));\n});\n\n$effect(() => {\n\tProtocolClient.setDialect(dialect);\n});\n\n$effect(() => {\n\tProtocolClient.setDefaultEnabled(defaultEnabled);\n});\n\n$effect(() => {\n\tProtocolClient.setActivationKey(activationKey);\n});\n\n$effect(() => {\n\tProtocolClient.setUserDictionary(stringToDict(userDict));\n});\n\nProtocolClient.getLintConfig().then((l) => {\n\tlintConfig = l;\n});\n\nProtocolClient.getLintDescriptions().then((d) => {\n\tlintDescriptions = d;\n});\n\nProtocolClient.getDialect().then((d) => {\n\tdialect = d;\n});\n\nProtocolClient.getDefaultEnabled().then((d) => {\n\tdefaultEnabled = d;\n});\n\nProtocolClient.getActivationKey().then((d) => {\n\tactivationKey = d;\n});\n\nProtocolClient.getHotkey().then((d) => {\n\t// Ensure we have a plain object, not a Proxy\n\thotkey = {\n\t\tmodifiers: [...d.modifiers],\n\t\tkey: d.key,\n\t};\n\tbuttonText = `Hotkey: ${d.modifiers.join('+')}+${d.key}`;\n});\n\nProtocolClient.getUserDictionary().then((d) => {\n\tuserDict = dictToString(d.toSorted());\n});\n\nProtocolClient.getWeirpacks().then((stored) => {\n\tweirpacks = stored.toSorted((a, b) => b.installedAt.localeCompare(a.installedAt));\n});\n\nfunction configValueToString(value: boolean | undefined): string {\n\tswitch (value) {\n\t\tcase true:\n\t\t\treturn 'enable';\n\t\tcase false:\n\t\t\treturn 'disable';\n\t\tcase undefined:\n\t\tcase null:\n\t\t\treturn 'default';\n\t}\n}\n\nfunction configStringToValue(str: string): boolean | undefined | null {\n\tswitch (str) {\n\t\tcase 'enable':\n\t\t\treturn true;\n\t\tcase 'disable':\n\t\t\treturn false;\n\t\tcase 'default':\n\t\t\treturn null;\n\t}\n\n\tthrow 'Fell through case';\n}\n\n/** Converts the content of a text area to viable dictionary values. */\nexport function stringToDict(s: string): string[] {\n\treturn s\n\t\t.split('\\n')\n\t\t.map((s) => s.trim())\n\t\t.filter((v) => v.length > 0);\n}\n\n/** Converts the content of a text area to viable dictionary values. */\nexport function dictToString(values: string[]): string {\n\treturn values.map((v) => v.trim()).join('\\n');\n}\n\nfunction resetRulesToDefaults(): void {\n\tconst keys = Object.keys(lintConfig ?? {});\n\tif (keys.length === 0) return;\n\n\tconst nextConfig: LintConfig = { ...lintConfig };\n\tfor (const key of keys) {\n\t\tnextConfig[key] = null;\n\t}\n\tlintConfig = nextConfig;\n}\n\nfunction updateAllRules(enabled: boolean): void {\n\tconst keys = Object.keys(lintConfig ?? {});\n\tif (keys.length === 0) {\n\t\treturn;\n\t}\n\n\tconst nextConfig: LintConfig = { ...lintConfig };\n\tfor (const key of keys) {\n\t\tnextConfig[key] = enabled;\n\t}\n\tlintConfig = nextConfig;\n}\n\nfunction toggleAllRules(): void {\n\tupdateAllRules(!anyRulesEnabled);\n}\n\nasync function exportEnabledDomainsCSV() {\n\ttry {\n\t\tconst enabledDomains = await ProtocolClient.getEnabledDomains();\n\t\tconst json = JSON.stringify(enabledDomains, null, 2);\n\n\t\tconst blob = new Blob([json], { type: 'application/json;charset=utf-8' });\n\t\tconst url = URL.createObjectURL(blob);\n\t\tconst a = document.createElement('a');\n\t\ta.href = url;\n\t\ta.download = 'enabled-domains.json';\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t\tURL.revokeObjectURL(url);\n\t} catch (e) {\n\t\tconsole.error('Failed to export enabled domains JSON:', e);\n\t}\n}\n\nlet buttonText = $state('Set Hotkey');\nlet isBlue = $state(false); // modify color of hotkey button once it is pressed\nfunction startHotkeyCapture(_modifyHotkeyButton: Button) {\n\tbuttonText = 'Press desired hotkey combination now.';\n\n\tconst handleKeydown = (event: KeyboardEvent) => {\n\t\tevent.preventDefault();\n\n\t\tconst modifiers: Modifier[] = [];\n\t\tif (event.ctrlKey) modifiers.push('Ctrl');\n\t\tif (event.shiftKey) modifiers.push('Shift');\n\t\tif (event.altKey) modifiers.push('Alt');\n\n\t\tlet key = event.key;\n\n\t\tif (key !== 'Control' && key !== 'Shift' && key !== 'Alt') {\n\t\t\tif (modifiers.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbuttonText = `Hotkey: ${modifiers.join('+')}+${key}`;\n\t\t\t// Create a plain object to avoid proxy cloning issues\n\t\t\tconst newHotkey = {\n\t\t\t\tmodifiers: [...modifiers],\n\t\t\t\tkey: key,\n\t\t\t};\n\n\t\t\thotkey = newHotkey;\n\n\t\t\t// Call ProtocolClient directly with the plain object to avoid proxy issues\n\t\t\tProtocolClient.setHotkey(newHotkey);\n\n\t\t\t// Remove listener\n\t\t\twindow.removeEventListener('keydown', handleKeydown);\n\n\t\t\t// change button color\n\t\t\tisBlue = !isBlue;\n\t\t}\n\t};\n\n\t// Add temporary key listener\n\twindow.addEventListener('keydown', handleKeydown);\n}\n\nasync function refreshWeirpacks() {\n\tconst stored = await ProtocolClient.getWeirpacks();\n\tweirpacks = stored.toSorted((a, b) => b.installedAt.localeCompare(a.installedAt));\n}\n\nasync function handleWeirpackUpload(event: Event) {\n\tconst input = event.currentTarget as HTMLInputElement | null;\n\tconst files = input?.files;\n\tif (!files || files.length === 0) {\n\t\treturn;\n\t}\n\n\tweirpackError = '';\n\tweirpackBusy = true;\n\ttry {\n\t\tfor (const file of files) {\n\t\t\tconst bytes = new Uint8Array(await file.arrayBuffer());\n\t\t\tawait ProtocolClient.addWeirpack(file.name, bytes);\n\t\t}\n\t\tawait refreshWeirpacks();\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : 'Failed to upload Weirpack.';\n\t\tweirpackError = message;\n\t} finally {\n\t\tweirpackBusy = false;\n\t\tinput.value = '';\n\t}\n}\n\nasync function removeWeirpack(id: string) {\n\tweirpackBusy = true;\n\tweirpackError = '';\n\ttry {\n\t\tawait ProtocolClient.removeWeirpack(id);\n\t\tawait refreshWeirpacks();\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : 'Failed to remove Weirpack.';\n\t\tweirpackError = message;\n\t} finally {\n\t\tweirpackBusy = false;\n\t}\n}\n\n// Import removed\n</script>\n\n<!-- centered wrapper with side gutters -->\n<div class=\"min-h-screen px-4 py-10\">\n  <div class=\"mx-auto max-w-screen-lg space-y-4\">\n    <Card class=\"flex items-center gap-3\">\n      <div class=\"flex h-9 w-9 items-center justify-center rounded-xl\">\n        <img src={logo} alt=\"Harper logo\" class=\"h-5 w-auto\" />\n      </div>\n      <div class=\"flex flex-col\">\n        <h1 class=\"text-base tracking-wide font-serif\">Harper</h1>\n        <p class=\"text-xs\">Settings</p>\n      </div>\n    </Card>\n\n    <!-- ── GENERAL ───────────────────────────── -->\n    <Card class=\"space-y-6\">\n      <h2 class=\"pb-1 text-xs uppercase tracking-wider\">General</h2>\n\n      <div class=\"space-y-5\">\n        <div class=\"flex items-center justify-between\">\n          <h3 class=\"text-sm\">English Dialect</h3>\n          <Select\n            size=\"sm\"\n            class=\"w-44\"\n            bind:value={dialect}\n          >\n            <option value={Dialect.American}>🇺🇸 American</option>\n            <option value={Dialect.British}>🇬🇧 British</option>\n            <option value={Dialect.Australian}>🇦🇺 Australian</option>\n            <option value={Dialect.Canadian}>🇨🇦 Canadian</option>\n            <option value={Dialect.Indian}>🇮🇳 Indian</option>\n          </Select>\n        </div>\n      </div>\n\n      <div class=\"space-y-5\">\n        <div class=\"flex items-center justify-between\">\n          <div class=\"flex flex-col\">\n            <h3 class=\"text-sm\">Enable on New Sites by Default</h3>\n            <p class=\"text-xs text-gray-600 dark:text-gray-400\">Can make some apps behave abnormally.</p>\n          </div>\n          <input type=\"checkbox\" bind:checked={defaultEnabled} class=\"h-5 w-5\" />\n        </div>\n      </div>\n\n      <div class=\"space-y-5\">\n        <div class=\"flex items-center justify-between\">\n          <div class=\"flex flex-col\">\n            <h3 class=\"text-sm\">Export Enabled Domains</h3>\n            <p class=\"text-xs text-gray-600 dark:text-gray-400\">Downloads JSON of domains explicitly enabled.</p>\n          </div>\n          <Button size=\"sm\" on:click={exportEnabledDomainsCSV}>Export JSON</Button>\n        </div>\n      </div>\n\n      <div class=\"space-y-5\">\n        <div class=\"flex items-center justify-between\">\n          <div class=\"flex flex-col\">\n            <h3 class=\"text-sm\">Activation Key</h3>\n            <p class=\"text-xs text-gray-600 dark:text-gray-400\">\n              If you're finding that you're accidentally triggering Harper.\n            </p>\n          </div>\n          <Select\n            size=\"sm\"\n            class=\"w-44\"\n            bind:value={activationKey}\n          >\n            <option value={ActivationKey.Shift}>Double Shift</option>\n            <option value={ActivationKey.Control}>Double Control</option>\n            <option value={ActivationKey.Off}>Off</option>\n          </Select>\n        </div>\n      </div>\n\n      <div class=\"space-y-5\">\n        <div class=\"flex items-center justify-between\">\n          <div class=\"flex flex-col\">\n            <h3 class=\"text-sm\">Apply Last Suggestion Hotkey</h3>\n            <p class=\"text-xs text-gray-600 dark:text-gray-400\">Applies suggestion to last highlighted word.</p>\n          </div>\n          <Textarea readonly bind:value={buttonText} />\n          <Button size=\"sm\" color=\"light\" style=\"background-color: {isBlue ? 'blue' : ''}\" bind:this={modifyHotkeyButton} on:click={() => {startHotkeyCapture(modifyHotkeyButton); isBlue = !isBlue}}>Modify Hotkey</Button>\n\n        </div>\n      </div>\n\n      <div class=\"space-y-5\">\n        <div class=\"flex items-center justify-between\">\n          <div class=\"flex flex-col\">\n            <h3 class=\"text-sm\">User Dictionary</h3>\n            <p class=\"text-xs text-gray-600 dark:text-gray-400\">Each word should be on its own line.</p>\n          </div>\n          <Textarea\n            bind:value={userDict}\n          ></Textarea>\n        </div>\n      </div>\n\n    </Card>\n\n    <Card class=\"space-y-4\">\n      <h2 class=\"pb-1 text-xs uppercase tracking-wider\">Weirpacks</h2>\n\n      <div class=\"space-y-2 flex flex-row w-full justify-between\">\n        <p class=\"text-xs text-gray-600 dark:text-gray-400\">\n          Upload one or more <code>.weirpack</code> files to add custom rule packs.\n        </p>\n        <input\n          type=\"file\"\n          accept=\".weirpack,application/zip\"\n          multiple\n          disabled={weirpackBusy}\n          onchange={handleWeirpackUpload}\n          class=\"block w-1/4 text-sm file:rounded-md file:border-0 file:bg-primary file:text-white disabled:opacity-50\"\n        />\n      </div>\n\n      {#if weirpackError}\n        <p class=\"text-xs text-red-700 dark:text-red-400\">{weirpackError}</p>\n      {/if}\n\n      {#if weirpacks.length === 0}\n        <p class=\"text-sm text-gray-600 dark:text-gray-400\">No Weirpacks installed.</p>\n      {:else}\n        <div class=\"space-y-3\">\n          {#each weirpacks as weirpack}\n            <div class=\"flex items-center justify-between gap-3 rounded-md border border-primary-100 p-3\">\n              <div class=\"min-w-0\">\n                <p class=\"truncate text-sm\">\n                  {weirpack.name}{weirpack.version ? ` v${weirpack.version}` : ''}\n                </p>\n                <p class=\"truncate text-xs text-gray-600 dark:text-gray-400\">{weirpack.filename}</p>\n              </div>\n              <Button\n                size=\"sm\"\n                color=\"light\"\n                disabled={weirpackBusy}\n                on:click={() => removeWeirpack(weirpack.id)}\n              >\n                Remove\n              </Button>\n            </div>\n          {/each}\n        </div>\n      {/if}\n    </Card>\n\n    <!-- ── RULES ─────────────────────────────── -->\n    <Card class=\"space-y-4\">\n      <div class=\"flex items-center justify-between gap-4\">\n        <h2 class=\"text-xs uppercase tracking-wider\">Rules</h2>\n        <Input\n          bind:value={searchQuery}\n          placeholder=\"Search for a rule…\"\n          size=\"sm\"\n          class=\"w-60\"\n        />\n      </div>\n      <div class=\"flex flex-wrap gap-3\">\n        <Button size=\"sm\" on:click={resetRulesToDefaults}>Reset to Default Rules</Button>\n        <Button size=\"sm\" on:click={toggleAllRules}>\n          {anyRulesEnabled ? 'Disable All Rules' : 'Enable All Rules'}\n        </Button>\n      </div>\n\n      {#each Object.entries(lintConfig).filter(\n        ([key]) =>\n          (lintDescriptions[key] ?? '').toLowerCase().includes(searchQueryLower) ||\n          key.toLowerCase().includes(searchQueryLower)\n      ) as [key, value]}\n        <div class=\"rule-scroll space-y-4 max-h-80 overflow-y-auto pr-1\">\n          <!-- rule card sample -->\n            <div class=\"flex items-start justify-between gap-4\">\n              <div class=\"space-y-0.5\">\n                <h3 class=\"text-sm\">{key}</h3>\n                <p class=\"text-xs\">{@html lintDescriptions[key]}</p>\n              </div>\n              <Select\n                size=\"md\"\n                value={configValueToString(value)}\n                on:change={(e) => {\n                  lintConfig[key] = configStringToValue(e.target.value);\n                }}\n              >\n                <option value=\"default\">⚙️ Default</option>\n                <option value=\"enable\">✅ On</option>\n                <option value=\"disable\">🚫 Off</option>\n              </Select>\n            </div>\n          </div>\n      {/each}\n\n    </Card>\n  </div>\n</div>\n"
  },
  {
    "path": "packages/chrome-plugin/src/options/index.ts",
    "content": "import '../../app.css';\nimport { mount } from 'svelte';\nimport { setupTheme } from '../theme';\nimport App from './Options.svelte';\n\nsetupTheme();\nconst app = mount(App, {\n\ttarget: document.getElementById('app')!,\n});\n\nexport default app;\n"
  },
  {
    "path": "packages/chrome-plugin/src/popup/Main.svelte",
    "content": "<script lang=\"ts\">\nimport { Button } from 'components';\nimport generateGreeting from '../generateGreeting';\nimport ProtocolClient from '../ProtocolClient';\n\nlet enabled = $state(true);\nlet domain = $state('');\n\nlet installDate: Date | null = $state(null);\nlet hasBeenReviewed: boolean | null = $state(null);\nconst REVIEW_URL =\n\t'https://chromewebstore.google.com/detail/private-grammar-checker-h/lodbfhdipoipcjmlebjbgmmgekckhpfb/reviews';\n\nconst isFirefox = isFirefoxExtension();\n\nif (!isFirefox) {\n\tProtocolClient.getInstalledOn().then((d) => {\n\t\tif (d == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tinstallDate = new Date(d);\n\t});\n\n\tProtocolClient.getReviewed().then((r) => {\n\t\thasBeenReviewed = r;\n\t});\n}\n\ngetCurrentTabDomain().then((d) => {\n\tdomain = d ?? '';\n});\n\n$effect(() => {\n\tProtocolClient.getDomainEnabled(domain).then((e) => {\n\t\tenabled = e;\n\t});\n});\n\n/**\n * Returns the registrable domain (e.g.  \"example.com\") of the\n * tab that the user had open when they clicked the extension icon.\n * If the URL is unavailable (about:blank, chrome://…) it resolves to undefined.\n */\nexport async function getCurrentTabDomain(): Promise<string | undefined> {\n\tconst [tab] = await chrome.tabs.query({ active: true, currentWindow: true });\n\n\tif (!tab?.url) return undefined;\n\n\ttry {\n\t\tconst { hostname } = new URL(tab.url);\n\t\treturn hostname.replace(/^www\\\\./, '');\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction toggleDomainEnabled() {\n\tconsole.log('toggle');\n\tenabled = !enabled;\n\tProtocolClient.setDomainEnabled(domain, enabled);\n}\n\nfunction openReviewPage() {\n\tProtocolClient.setReviewed(true);\n\tchrome.tabs.create({ url: REVIEW_URL });\n}\n\nfunction isFirefoxExtension(): boolean {\n\ttry {\n\t\treturn new URL(chrome.runtime.getURL('')).protocol === 'moz-extension:';\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/** Get the number of days since a given Date. */\nfunction daysSince(date: Date): number {\n\tlet now = Date.now();\n\tlet then = date.getTime();\n\n\tlet msDiff = now - then;\n\treturn msDiff / 86400000;\n}\n</script>\n\n<main>\n  <section class=\"p-6 space-y-5 text-gray-800 flex flex-row\">\n      <Button\n        size=\"lg\"\n        class=\"rounded-full! aspect-square h-24 w-24 p-0 shadow-lg transition-colors flex! flex-row justify-center\"\n        color={enabled ? 'var(--color-primary)' : 'var(--color-cream-50)'}\n        on:click={toggleDomainEnabled}\n      >\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          class=\"h-9 w-9\"\n          fill=\"none\"\n          viewBox=\"0 0 24 24\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n        >\n          <path\n          color={enabled ? 'var(--color-cream-50)' : 'var(--color-primary)'}\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n            d=\"M12 5v7m5.657-4.657a8 8 0 11-11.314 0\"\n          />\n        </svg>\n      </Button>\n  \n    <section class=\"items-end p-2\">\n      <h1 class=\"text-2xl dark:text-white text-right\">\n        {generateGreeting()}\n      </h1>\n  \n      <p class=\"text-sm font-medium font-sans dark:text-white text-right\">\n        Harper is {enabled ? 'enabled on ' : 'disabled on '}{domain}\n      </p>\n    </section>\n  </section>\n  \n  {#if !isFirefox && installDate != null && daysSince(installDate) > 14 && hasBeenReviewed === false}\n    <section class=\"bg-primary flex flex-row justify-between p-4\">\n      <div class=\"font-bold\">\n        It looks like you're enjoying Harper.<br>\n        Would you mind giving us a review?\n      </div>\n      <Button on:click={openReviewPage}>\n        Review\n      </Button>\n    </section>\n  {/if}\n</main>\n"
  },
  {
    "path": "packages/chrome-plugin/src/popup/Onboarding.svelte",
    "content": "<script lang=\"ts\">\nimport { Badge, Button } from 'components';\n\nlet { onConfirm }: { onConfirm: () => void } = $props();\n\nconst steps = [\n\t'Start typing in any large text box — emails, docs, blog posts, you name it.',\n\t'Keep writing — Harper quietly highlights potential hiccups as you go.',\n\t'Click a highlight to open focused, context‑aware suggestions.',\n];\n</script>\n\n<main class=\"p-6 space-y-6\">\n  <h2 class=\"text-base font-semibold\">\n    Welcome! Let’s see Harper in action:\n  </h2>\n\n  <ul class=\"space-y-6\">\n    {#each steps as line, i}\n      <li class=\"flex gap-4 items-start\">\n        <Badge class=\"w-8 h-8 bg-primary-300 text-primary-900 font-semibold flex items-center justify-center rounded-lg dark:bg-slate-900 dark:text-slate-100\">\n          {i + 1}\n        </Badge>\n        <p class=\"text-sm text-gray-700 dark:text-slate-300\">{line}</p>\n      </li>\n    {/each}\n  </ul>\n\n  <Button color=\"primary\"  class=\"w-full h-10\" on:click={onConfirm}>\n    Let's start writing\n  </Button>\n</main>\n"
  },
  {
    "path": "packages/chrome-plugin/src/popup/Popup.svelte",
    "content": "<script lang=\"ts\">\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons';\nimport { Button, Link } from 'components';\nimport { onMount } from 'svelte';\nimport Fa from 'svelte-fa';\nimport logo from '/logo.png';\nimport detectBrowserEngine from '../detectBrowserEngine';\nimport { main, type PopupState } from '../PopupState';\nimport Main from './Main.svelte';\nimport Onboarding from './Onboarding.svelte';\nimport ReportProblematicLint from './ReportProblematicLint.svelte';\n\nlet popupState: PopupState = $state({ page: 'main' });\n\nlet version = `v${chrome.runtime.getManifest().version}`;\nlet latestVersion: string | null = $state(null);\nlet versionMismatch = $state(false);\n\nonMount(async () => {\n\ttry {\n\t\tconst response = await fetch('https://writewithharper.com/latestversion');\n\t\tif (!response.ok) return;\n\n\t\tconst fetchedVersion = (await response.text()).trim();\n\t\tlatestVersion = fetchedVersion;\n\t\tversionMismatch = !!fetchedVersion && fetchedVersion !== version;\n\t} catch (err) {\n\t\tconsole.error('Failed to fetch latest version', err);\n\t}\n});\n\n$effect(() => {\n\tchrome.storage.local.get({ popupState: { page: 'onboarding' } }).then((result) => {\n\t\tpopupState = result.popupState;\n\t});\n});\n\n$effect(() => {\n\tchrome.storage.local.set({ popupState: $state.snapshot(popupState) });\n});\n\nfunction openSettings() {\n\tchrome.runtime?.openOptionsPage?.();\n}\n\nfunction openUpdateHelpPage() {\n\tlet url: string;\n\n\tif (detectBrowserEngine() == 'chromium') {\n\t\turl = 'https://writewithharper.com/docs/integrations/chrome-extension#Updating-the-Extension';\n\t} else {\n\t\turl = 'https://writewithharper.com/docs/integrations/firefox-extension#Updating-the-Extension';\n\t}\n\n\tchrome.tabs.create({\n\t\turl,\n\t});\n}\n</script>\n\n<div class=\"w-[340px] border border-gray-200 font-sans flex flex-col rounded-lg shadow-sm select-none dark:border-slate-800 dark:text-slate-100\">\n  <header class=\"flex flex-row justify-between items-center gap-2 px-3 py-2 rounded-t-lg\">\n    <div class=\"flex flex-row justify-start items-center gap-1\">\n      <img src={logo} alt=\"Harper logo\" class=\"h-6 w-auto rounded-lg mx-2\" />\n      <span class=\"font-semibold text-sm\">Harper</span>\n    </div>\n\n    {#if popupState.page != \"main\"}\n       <Button on:click={() => { \n          popupState = main();\n       }}><Fa icon={faArrowLeft}/></Button>\n    {:else}\n      <div onclick={openUpdateHelpPage}>\n        {#if versionMismatch}\n          <span class=\"ml-1\" title={`Newer version available: ${latestVersion ?? ''}. Click to find out more.`}>⚠️</span>\n        {/if}\n        <span class=\"text-sm font-mono\">{version}</span>\n      </div>\n    {/if}\n  </header>\n\n  {#if popupState.page == \"onboarding\"}\n    <Onboarding onConfirm={() => { popupState = main();}} />\n  {:else if popupState.page == \"main\"}\n    <Main /> \n  {:else if popupState.page == 'report-error'}\n    <ReportProblematicLint example={popupState.example} rule_id={popupState.rule_id} feedback={popupState.feedback} onSubmit={() => { popupState = main();}} />\n  {/if}\n\n  <footer class=\"flex items-center justify-center gap-6 px-3 py-2 text-sm border-t border-gray-100 rounded-b-lg bg-white/60 dark:border-slate-800 dark:bg-slate-900/70 dark:text-slate-100\">\n    <Link href=\"https://github.com/Automattic/harper\" target=\"_blank\" rel=\"noopener\" class=\"text-primary\">GitHub</Link>\n    <Link href=\"https://discord.com/invite/JBqcAaKrzQ\" target=\"_blank\" rel=\"noopener\" class=\"text-primary\">Discord</Link>\n    <Link href=\"https://writewithharper.com\" target=\"_blank\" rel=\"noopener\" class=\"text-primary\">Discover</Link>\n    <Link on:click={openSettings}>Settings</Link>\n  </footer>\n</div>\n"
  },
  {
    "path": "packages/chrome-plugin/src/popup/ReportProblematicLint.svelte",
    "content": "<script lang=\"ts\">\nimport { Button, Checkbox, Input, Label } from 'components';\nimport ProtocolClient from '../ProtocolClient';\n\nlet {\n\trule_id,\n\tfeedback,\n\texample,\n\tonSubmit,\n}: { rule_id: string; feedback: string; example: string; onSubmit: () => void } = $props();\n\nlet submitting = $state(false);\n\nasync function handleSubmit(event: SubmitEvent) {\n\tevent.preventDefault();\n\n\tsubmitting = true;\n\n\tconst success = await ProtocolClient.postFormData(\n\t\t'https://writewithharper.com/api/problematic-lints',\n\t\t{\n\t\t\texample,\n\t\t\trule_id,\n\t\t\tfeedback,\n\t\t\tis_false_positive: 'true',\n\t\t},\n\t);\n\n\tsubmitting = false;\n\n\tif (success) {\n\t\tonSubmit();\n\t}\n}\n</script>\n\n<div class=\"p-5\">\n\t<h1 class=\"text-2xl font-semibold\">Report Problematic Lint</h1>\n\t<p class=\"text-sm\">\n\t\tOnly the data you enter below will be sent to the Harper maintainer.\n\t</p>\n\t<form class=\"mt-4 space-y-6\" onsubmit={handleSubmit}>\n\t\t<div class=\"space-y-3\">\n\t\t\t<div class=\"flex items-baseline gap-2\">\n\t\t\t\t<Label class=\" \">What text caused (or should cause) feedback from Harper?</Label>\n\t\t\t</div>\n\t\t\t<Input\n\t\t\t\tname=\"example\"\n\t\t\t\tbind:value={example}\n\t\t\t\tplaceholder=\"Give us an example.\"\n\t\t\t\tclass=\"dark:bg-slate-900 dark:border-slate-700 \"\n\t\t\t/>\n\n\t\t\t<Checkbox name=\"is_false_positive\" value=\"true\" hidden />\n\n\t\t\t<div class=\"flex items-baseline gap-2\">\n\t\t\t\t<Label class=\" \">What rule caused (or should cause) feedback from Harper?</Label>\n\t\t\t</div>\n\t\t\t<Input\n\t\t\t\tname=\"rule_id\"\n\t\t\t\tplaceholder=\"We'd appreciate the specific rule ID, if applicable.\"\n\t\t\t\tbind:value={rule_id}\n\t\t\t\tclass=\"dark:bg-slate-900 dark:border-slate-700 \"\n\t\t\t/>\n\n\t\t\t<div class=\"flex items-baseline gap-2\">\n\t\t\t\t<Label class=\" \">Additional Feedback</Label>\n\t\t\t</div>\n\t\t\t<Input\n\t\t\t\tname=\"feedback\"\n\t\t\t\tplaceholder=\"Anything you want to add?\"\n\t\t\t\tbind:value={feedback}\n\t\t\t\tclass=\"dark:bg-slate-900 dark:border-slate-700 \"\n\t\t\t/>\n\n\t\t\t<div class=\"flex items-center justify-between pt-2\">\n\t\t\t\t<Button type=\"submit\" disabled={submitting}>Submit</Button>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n</div>\n"
  },
  {
    "path": "packages/chrome-plugin/src/popup/index.ts",
    "content": "import '../../app.css';\nimport { mount } from 'svelte';\nimport { setupTheme } from '../theme';\nimport App from './Popup.svelte';\n\nsetupTheme();\nconst app = mount(App, {\n\ttarget: document.getElementById('app')!,\n});\n\nexport default app;\n"
  },
  {
    "path": "packages/chrome-plugin/src/protocol.ts",
    "content": "import type { Dialect, LintConfig, LintOptions } from 'harper.js';\nimport type { UnpackedLintGroups } from 'lint-framework';\n\nexport type Request =\n\t| LintRequest\n\t| GetConfigRequest\n\t| SetConfigRequest\n\t| GetLintDescriptionsRequest\n\t| SetDialectRequest\n\t| GetDialectRequest\n\t| SetDomainStatusRequest\n\t| SetDefaultStatusRequest\n\t| GetDomainStatusRequest\n\t| GetDefaultStatusRequest\n\t| GetEnabledDomainsRequest\n\t| AddToUserDictionaryRequest\n\t| SetUserDictionaryRequest\n\t| IgnoreLintRequest\n\t| GetUserDictionaryRequest\n\t| GetActivationKeyRequest\n\t| SetActivationKeyRequest\n\t| GetHotkeyRequest\n\t| SetHotkeyRequest\n\t| OpenOptionsRequest\n\t| GetInstalledOnRequest\n\t| GetReviewedRequest\n\t| SetReviewedRequest\n\t| OpenReportErrorRequest\n\t| PostFormDataRequest\n\t| GetWeirpacksRequest\n\t| AddWeirpackRequest\n\t| RemoveWeirpackRequest;\n\nexport type Response =\n\t| LintResponse\n\t| GetConfigResponse\n\t| UnitResponse\n\t| GetLintDescriptionsResponse\n\t| GetDialectResponse\n\t| GetDomainStatusResponse\n\t| GetDefaultStatusResponse\n\t| GetEnabledDomainsResponse\n\t| GetUserDictionaryResponse\n\t| GetHotkeyResponse\n\t| GetActivationKeyResponse\n\t| GetInstalledOnResponse\n\t| GetReviewedResponse\n\t| PostFormDataResponse\n\t| GetWeirpacksResponse;\n\nexport type LintRequest = {\n\tkind: 'lint';\n\tdomain: string;\n\ttext: string;\n\toptions: LintOptions;\n};\n\nexport type LintResponse = {\n\tkind: 'lints';\n\tlints: UnpackedLintGroups;\n};\n\nexport type GetConfigRequest = {\n\tkind: 'getConfig';\n};\n\nexport type GetConfigResponse = {\n\tkind: 'getConfig';\n\tconfig: LintConfig;\n};\n\nexport type SetConfigRequest = {\n\tkind: 'setConfig';\n\tconfig: LintConfig;\n};\n\nexport type SetDialectRequest = {\n\tkind: 'setDialect';\n\tdialect: Dialect;\n};\n\nexport type GetLintDescriptionsRequest = {\n\tkind: 'getLintDescriptions';\n};\n\nexport type GetLintDescriptionsResponse = {\n\tkind: 'getLintDescriptions';\n\tdescriptions: Record<string, string>;\n};\n\nexport type GetDialectRequest = {\n\tkind: 'getDialect';\n};\n\nexport type GetDialectResponse = {\n\tkind: 'getDialect';\n\tdialect: Dialect;\n};\n\nexport type GetDomainStatusRequest = {\n\tkind: 'getDomainStatus';\n\tdomain: string;\n};\n\nexport type GetDomainStatusResponse = {\n\tkind: 'getDomainStatus';\n\tdomain: string;\n\tenabled: boolean;\n};\n\nexport type GetDefaultStatusRequest = {\n\tkind: 'getDefaultStatus';\n};\n\nexport type GetDefaultStatusResponse = {\n\tkind: 'getDefaultStatus';\n\tenabled: boolean;\n};\n\nexport type GetEnabledDomainsRequest = {\n\tkind: 'getEnabledDomains';\n};\n\nexport type GetEnabledDomainsResponse = {\n\tkind: 'getEnabledDomains';\n\tdomains: string[];\n};\n\nexport type SetDomainStatusRequest = {\n\tkind: 'setDomainStatus';\n\tdomain: string;\n\tenabled: boolean;\n\t/** Dictates whether this should override a previous setting. */\n\toverrideValue: boolean;\n};\n\nexport type SetDefaultStatusRequest = {\n\tkind: 'setDefaultStatus';\n\tenabled: boolean;\n};\n\nexport type AddToUserDictionaryRequest = {\n\tkind: 'addToUserDictionary';\n\twords: string[];\n};\n\nexport type SetUserDictionaryRequest = {\n\tkind: 'setUserDictionary';\n\twords: string[];\n};\n\nexport type GetUserDictionaryRequest = {\n\tkind: 'getUserDictionary';\n};\n\nexport type GetUserDictionaryResponse = {\n\tkind: 'getUserDictionary';\n\twords: string[];\n};\n\nexport type GetInstalledOnRequest = {\n\tkind: 'getInstalledOn';\n};\n\nexport type GetInstalledOnResponse = {\n\tkind: 'getInstalledOn';\n\tinstalledOn: string | null;\n};\n\nexport type GetReviewedRequest = {\n\tkind: 'getReviewed';\n};\n\nexport type GetReviewedResponse = {\n\tkind: 'getReviewed';\n\treviewed: boolean;\n};\n\nexport type SetReviewedRequest = {\n\tkind: 'setReviewed';\n\treviewed: boolean;\n};\n\nexport type IgnoreLintRequest = {\n\tkind: 'ignoreLint';\n\tcontextHash: string;\n};\n\n/** Similar to returning void. */\nexport type UnitResponse = {\n\tkind: 'unit';\n};\n\nexport function createUnitResponse(): UnitResponse {\n\treturn { kind: 'unit' };\n}\n\nexport enum ActivationKey {\n\tOff = 'off',\n\tShift = 'shift',\n\tControl = 'control',\n}\n\nexport type GetActivationKeyRequest = {\n\tkind: 'getActivationKey';\n};\n\nexport type GetHotkeyRequest = {\n\tkind: 'getHotkey';\n};\n\nexport type GetActivationKeyResponse = {\n\tkind: 'getActivationKey';\n\tkey: ActivationKey;\n};\n\nexport type PostFormDataResponse = {\n\tkind: 'postFormData';\n\tsuccess: boolean;\n};\n\nexport type SetActivationKeyRequest = {\n\tkind: 'setActivationKey';\n\tkey: ActivationKey;\n};\n\nexport type OpenOptionsRequest = {\n\tkind: 'openOptions';\n};\n\nexport type GetHotkeyResponse = {\n\tkind: 'getHotkey';\n\thotkey: Hotkey;\n};\n\nexport type SetHotkeyRequest = {\n\tkind: 'setHotkey';\n\thotkey: Hotkey;\n};\n\nexport type Modifier = 'Ctrl' | 'Shift' | 'Alt';\n\nexport type Hotkey = {\n\tmodifiers: Modifier[];\n\tkey: string;\n};\nexport type OpenReportErrorRequest = {\n\tkind: 'openReportError';\n\texample: string;\n\trule_id: string;\n\tfeedback: string;\n};\n\nexport type PostFormDataRequest = {\n\tkind: 'postFormData';\n\turl: string;\n\tformData: Record<string, string>;\n};\n\nexport type WeirpackMeta = {\n\tid: string;\n\tname: string;\n\tfilename: string;\n\tversion: string | null;\n\tinstalledAt: string;\n};\n\nexport type GetWeirpacksRequest = {\n\tkind: 'getWeirpacks';\n};\n\nexport type GetWeirpacksResponse = {\n\tkind: 'getWeirpacks';\n\tweirpacks: WeirpackMeta[];\n};\n\nexport type AddWeirpackRequest = {\n\tkind: 'addWeirpack';\n\tfilename: string;\n\tbytes: number[];\n};\n\nexport type RemoveWeirpackRequest = {\n\tkind: 'removeWeirpack';\n\tid: string;\n};\n"
  },
  {
    "path": "packages/chrome-plugin/src/theme.ts",
    "content": "const QUERY = '(prefers-color-scheme: dark)';\n\nfunction applyDarkTheme(shouldUseDark: boolean) {\n\tconst root = document.documentElement;\n\tconst body = document.body;\n\n\troot.classList.toggle('dark', shouldUseDark);\n\tbody?.classList.toggle('dark', shouldUseDark);\n}\n\nexport function setupTheme() {\n\tif (typeof window === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tconst mediaQuery = window.matchMedia(QUERY);\n\n\tapplyDarkTheme(mediaQuery.matches);\n\n\tconst listener = (event: MediaQueryListEvent) => {\n\t\tapplyDarkTheme(event.matches);\n\t};\n\n\tif ('addEventListener' in mediaQuery) {\n\t\tmediaQuery.addEventListener('change', listener);\n\t} else {\n\t\tmediaQuery.addListener(listener);\n\t}\n}\n"
  },
  {
    "path": "packages/chrome-plugin/src/zip.js",
    "content": "import gulp from 'gulp';\nimport zip from 'gulp-zip';\nimport { createRequire } from 'module';\n\nconst require = createRequire(import.meta.url);\nconst manifest = require('../build/manifest.json');\n\nconst [, , target] = process.argv;\nif (!target) {\n\tprocess.stderr.write('Specify a target filename as the first argument.\\n');\n\tprocess.exit(1);\n}\n\ngulp.src('build/**', { encoding: false }).pipe(zip(target)).pipe(gulp.dest('package'));\n"
  },
  {
    "path": "packages/chrome-plugin/tests/draft.spec.ts",
    "content": "import type { Locator, Page } from '@playwright/test';\nimport {\n\tgetDraftEditor,\n\ttestBasicSuggestion,\n\ttestCanBlockRuleSuggestion,\n\ttestCanIgnoreSuggestion,\n\ttestMultipleSuggestionsAndUndo,\n} from './testUtils';\n\nconst TEST_PAGE_URL = 'https://draftjs.org/';\n\nasync function setup(_page: Page, editor: Locator) {\n\tawait editor.scrollIntoViewIfNeeded();\n\tawait editor.click();\n}\n\ntestBasicSuggestion(TEST_PAGE_URL, getDraftEditor, setup);\ntestCanIgnoreSuggestion(TEST_PAGE_URL, getDraftEditor, setup);\ntestCanBlockRuleSuggestion(TEST_PAGE_URL, getDraftEditor, setup);\ntestMultipleSuggestionsAndUndo(TEST_PAGE_URL, getDraftEditor, setup);\n"
  },
  {
    "path": "packages/chrome-plugin/tests/fixtures.ts",
    "content": "import path from 'path';\nimport { createFixture } from 'playwright-webextext';\n\nconst pathToExtension = path.join(import.meta.dirname, '../build');\nconst { test, expect } = createFixture(pathToExtension);\n\ntest.afterEach(async ({ context }) => {\n\tconst bg = context.serviceWorkers()[0] ?? context.backgroundPages()[0];\n\tif (bg) await bg.evaluate(() => chrome?.storage?.local.clear?.());\n});\n\nexport { test, expect };\n"
  },
  {
    "path": "packages/chrome-plugin/tests/github.spec.ts",
    "content": "import type { Page } from '@playwright/test';\nimport { test } from './fixtures';\nimport {\n\tassertHarperHighlightBoxes,\n\tgetTextarea,\n\treplaceEditorContent,\n\ttestBasicSuggestion,\n\ttestCanBlockRuleSuggestion,\n\ttestCanIgnoreSuggestion,\n\ttestMultipleSuggestionsAndUndo,\n} from './testUtils';\n\nconst TEST_PAGE_URL = 'http://localhost:8081/github_textarea.html';\n\nasync function textareaSetup(page: Page) {\n\tawait page.waitForTimeout(2000);\n\tawait page.reload();\n}\n\ntestBasicSuggestion(TEST_PAGE_URL, getTextarea, textareaSetup);\ntestCanIgnoreSuggestion(TEST_PAGE_URL, getTextarea, textareaSetup);\ntestCanBlockRuleSuggestion(TEST_PAGE_URL, getTextarea);\ntestMultipleSuggestionsAndUndo(TEST_PAGE_URL, getTextarea, textareaSetup);\n\ntest('Wraps correctly', async ({ page }) => {\n\tawait page.goto(TEST_PAGE_URL);\n\n\tawait page.waitForTimeout(2000);\n\tawait page.reload();\n\n\tconst editor = getTextarea(page);\n\tawait replaceEditorContent(\n\t\teditor,\n\t\t'This is a test of the Harper grammar checker, specifically   if \\nit is wrapped around a line weirdl y',\n\t);\n\n\tawait page.waitForTimeout(6000);\n\n\tawait assertHarperHighlightBoxes(page, [\n\t\t{ x: 260.234375, y: 103, width: 67.21875, height: 18 },\n\t\t{ x: 512.28125, y: 63, width: 25.21875, height: 18 },\n\t]);\n});\n\ntest('Scrolls correctly', async ({ page }) => {\n\tawait page.goto(TEST_PAGE_URL);\n\n\tawait page.waitForTimeout(2000);\n\tawait page.reload();\n\n\tconst editor = getTextarea(page);\n\tawait replaceEditorContent(\n\t\teditor,\n\t\t'This is a test of the the Harper grammar checker, specifically if \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nit scrolls beyo nd the height of the buffer.',\n\t);\n\n\tawait page.waitForTimeout(6000);\n\n\tawait assertHarperHighlightBoxes(page, [{ width: 58.828125, x: 117.40625, y: 161, height: 18 }]);\n});\n"
  },
  {
    "path": "packages/chrome-plugin/tests/google_docs.spec.ts",
    "content": "import type { Page } from '@playwright/test';\nimport { expect, test } from './fixtures';\n\ntype MockGoogleDocsRect = {\n\tlabel: string;\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\theight: number;\n\tfontCss?: string;\n};\n\nconst TEST_PAGE_URL = 'https://docs.google.com/document/d/harper-formatting-regression/edit';\nconst FORMATTED_WORD_GAP_RECTS: MockGoogleDocsRect[] = [\n\t{\n\t\tlabel: 'not',\n\t\tleft: 48,\n\t\ttop: 48,\n\t\twidth: 24,\n\t\theight: 18,\n\t\tfontCss: '16px Arial',\n\t},\n\t{\n\t\tlabel: 'smart',\n\t\tleft: 80,\n\t\ttop: 56,\n\t\twidth: 42,\n\t\theight: 18,\n\t\tfontCss: 'italic 16px Arial',\n\t},\n\t{\n\t\tlabel: 'enough.',\n\t\tleft: 130,\n\t\ttop: 48,\n\t\twidth: 60,\n\t\theight: 18,\n\t\tfontCss: '16px Arial',\n\t},\n];\nconst ITALIC_SHIFTED_RECTS: MockGoogleDocsRect[] = [\n\t{\n\t\tlabel: 'This is an ',\n\t\tleft: 48,\n\t\ttop: 48,\n\t\twidth: 96,\n\t\theight: 18,\n\t\tfontCss: '16px Arial',\n\t},\n\t{\n\t\tlabel: 'test.',\n\t\tleft: 144,\n\t\ttop: 56,\n\t\twidth: 48,\n\t\theight: 18,\n\t\tfontCss: 'italic 16px Arial',\n\t},\n];\nconst PUNCTUATION_BOUNDARY_RECTS: MockGoogleDocsRect[] = [\n\t{\n\t\tlabel: 'not',\n\t\tleft: 48,\n\t\ttop: 48,\n\t\twidth: 24,\n\t\theight: 18,\n\t\tfontCss: '16px Arial',\n\t},\n\t{\n\t\tlabel: 'smart',\n\t\tleft: 80,\n\t\ttop: 56,\n\t\twidth: 42,\n\t\theight: 18,\n\t\tfontCss: 'italic 16px Arial',\n\t},\n\t{\n\t\tlabel: 'enough',\n\t\tleft: 130,\n\t\ttop: 48,\n\t\twidth: 54,\n\t\theight: 18,\n\t\tfontCss: '16px Arial',\n\t},\n\t{\n\t\tlabel: '.',\n\t\tleft: 184,\n\t\ttop: 48,\n\t\twidth: 6,\n\t\theight: 18,\n\t\tfontCss: '16px Arial',\n\t},\n\t{\n\t\tlabel: 'But',\n\t\tleft: 202,\n\t\ttop: 48,\n\t\twidth: 26,\n\t\theight: 18,\n\t\tfontCss: '16px Arial',\n\t},\n];\nconst SUPERSCRIPT_LIKE_RECTS: MockGoogleDocsRect[] = [\n\t{\n\t\tlabel: 'Testing ',\n\t\tleft: 48,\n\t\ttop: 96,\n\t\twidth: 68,\n\t\theight: 18,\n\t\tfontCss: '16px Arial',\n\t},\n\t{\n\t\tlabel: 'formatting',\n\t\tleft: 116,\n\t\ttop: 88,\n\t\twidth: 72,\n\t\theight: 11,\n\t\tfontCss: 'bold 11px Arial',\n\t},\n\t{\n\t\tlabel: ' matters.',\n\t\tleft: 188,\n\t\ttop: 96,\n\t\twidth: 64,\n\t\theight: 18,\n\t\tfontCss: '16px Arial',\n\t},\n];\n\nfunction buildMockGoogleDocsHtml(rects: MockGoogleDocsRect[]): string {\n\tconst rectMarkup = rects\n\t\t.map(\n\t\t\t(rect, index) => `\n\t\t\t\t<rect\n\t\t\t\t\tdata-rect-index=\"${index}\"\n\t\t\t\t\tx=\"${rect.left}\"\n\t\t\t\t\ty=\"${rect.top}\"\n\t\t\t\t\twidth=\"${rect.width}\"\n\t\t\t\t\theight=\"${rect.height}\"\n\t\t\t\t\tfill=\"rgba(15, 23, 42, 0.001)\"\n\t\t\t\t\taria-label=\"${escapeHtml(rect.label)}\"\n\t\t\t\t\tdata-font-css=\"${escapeHtml(rect.fontCss ?? '')}\"\n\t\t\t\t/>\n\t\t\t`,\n\t\t)\n\t\t.join('');\n\n\treturn `<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<title>Mock Google Docs</title>\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tmargin: 0;\n\t\t\t\tfont: 16px/1.4 sans-serif;\n\t\t\t\tbackground: #f3f4f6;\n\t\t\t}\n\n\t\t\t#docs-editor {\n\t\t\t\tposition: relative;\n\t\t\t\twidth: 900px;\n\t\t\t\theight: 240px;\n\t\t\t\tmargin: 32px auto;\n\t\t\t\tbackground: white;\n\t\t\t\tborder: 1px solid #d1d5db;\n\t\t\t}\n\n\t\t\tsvg {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div id=\"docs-editor\" class=\"kix-appview-editor\">\n\t\t\t<svg>${rectMarkup}</svg>\n\t\t</div>\n\t</body>\n</html>`;\n}\n\nfunction escapeHtml(text: string): string {\n\treturn text\n\t\t.replaceAll('&', '&amp;')\n\t\t.replaceAll('\"', '&quot;')\n\t\t.replaceAll('<', '&lt;')\n\t\t.replaceAll('>', '&gt;');\n}\n\nasync function mockGoogleDocsPage(page: Page, rects: MockGoogleDocsRect[]) {\n\tawait page.route(TEST_PAGE_URL, async (route) => {\n\t\tawait route.fulfill({\n\t\t\tcontentType: 'text/html',\n\t\t\tbody: buildMockGoogleDocsHtml(rects),\n\t\t});\n\t});\n}\n\nasync function installMockGoogleDocsGeometry(page: Page, rects: MockGoogleDocsRect[]) {\n\tawait page.evaluate((pageRects) => {\n\t\t(\n\t\t\twindow as Window & {\n\t\t\t\t_docs_annotate_getAnnotatedText?: () => Promise<{\n\t\t\t\t\tgetText: () => string;\n\t\t\t\t\tsetSelection: () => void;\n\t\t\t\t\tgetSelection: () => Array<{ start: number; end: number }>;\n\t\t\t\t}>;\n\t\t\t}\n\t\t)._docs_annotate_getAnnotatedText = async () => ({\n\t\t\tgetText: () => pageRects.map((rect) => rect.label).join(''),\n\t\t\tsetSelection: () => {},\n\t\t\tgetSelection: () => [{ start: 0, end: 0 }],\n\t\t});\n\t}, rects);\n}\n\nasync function openMockGoogleDocsPage(page: Page, rects: MockGoogleDocsRect[]) {\n\tawait mockGoogleDocsPage(page, rects);\n\tawait page.goto(TEST_PAGE_URL);\n\tawait installMockGoogleDocsGeometry(page, rects);\n\tawait page.locator('#harper-google-docs-target').waitFor({ state: 'attached' });\n}\n\nasync function getRawBridgeText(page: Page) {\n\treturn await page\n\t\t.locator('#harper-google-docs-target')\n\t\t.evaluate((node) => node.textContent ?? '');\n}\n\nasync function getNormalizedBridgeText(page: Page) {\n\treturn await page\n\t\t.locator('#harper-google-docs-target')\n\t\t.evaluate((node) =>\n\t\t\t(node.textContent ?? '').replaceAll('\\u00a0', ' ').replace(/\\s+/g, ' ').trim(),\n\t\t);\n}\n\ntest('Google Docs restores spaces around formatted inline words', async ({ page }) => {\n\tawait openMockGoogleDocsPage(page, FORMATTED_WORD_GAP_RECTS);\n\n\tawait expect\n\t\t.poll(() => getNormalizedBridgeText(page), { timeout: 10000 })\n\t\t.toBe('not smart enough.');\n\tawait expect.poll(() => getRawBridgeText(page), { timeout: 10000 }).not.toContain('\\n');\n});\n\ntest('Google Docs formatted rects stay in the same sentence', async ({ page }) => {\n\tawait openMockGoogleDocsPage(page, ITALIC_SHIFTED_RECTS);\n\n\tawait expect\n\t\t.poll(() => getNormalizedBridgeText(page), { timeout: 10000 })\n\t\t.toBe('This is an test.');\n\tawait expect.poll(() => getRawBridgeText(page), { timeout: 10000 }).not.toContain('\\n');\n});\n\ntest('Google Docs does not invent spaces around standalone punctuation rects', async ({ page }) => {\n\tawait openMockGoogleDocsPage(page, PUNCTUATION_BOUNDARY_RECTS);\n\n\tawait expect\n\t\t.poll(() => getNormalizedBridgeText(page), { timeout: 10000 })\n\t\t.toBe('not smart enough. But');\n\tawait expect.poll(() => getRawBridgeText(page), { timeout: 10000 }).not.toContain(' .');\n});\n\ntest('Google Docs superscript-like rects do not create a fake line break', async ({ page }) => {\n\tawait openMockGoogleDocsPage(page, SUPERSCRIPT_LIKE_RECTS);\n\n\tawait expect\n\t\t.poll(() => getNormalizedBridgeText(page), { timeout: 10000 })\n\t\t.toBe('Testing formatting matters.');\n\tawait expect.poll(() => getRawBridgeText(page), { timeout: 10000 }).not.toContain('\\n');\n});\n"
  },
  {
    "path": "packages/chrome-plugin/tests/hn.spec.ts",
    "content": "import type { Page } from '@playwright/test';\nimport { test } from './fixtures';\nimport {\n\tassertHarperHighlightBoxes,\n\tgetTextarea,\n\treplaceEditorContent,\n\ttestBasicSuggestion,\n\ttestCanBlockRuleSuggestion,\n\ttestCanIgnoreSuggestion,\n\ttestMultipleSuggestionsAndUndo,\n} from './testUtils';\n\n/** Must be computed. */\nasync function getTestPageUrl(page: Page) {\n\tawait page.goto('https://news.ycombinator.com');\n\n\tconst firstLink = page.locator('.subline').first().locator('a').last();\n\tawait firstLink.click();\n\n\treturn page.url();\n}\n\ntestBasicSuggestion(getTestPageUrl, getTextarea);\ntestCanIgnoreSuggestion(getTestPageUrl, getTextarea);\ntestCanBlockRuleSuggestion(getTestPageUrl, getTextarea);\ntestMultipleSuggestionsAndUndo(getTestPageUrl, getTextarea);\n\ntest('Hacker News wraps correctly', async ({ page }) => {\n\tawait page.goto(await getTestPageUrl(page));\n\n\tawait page.waitForTimeout(2000);\n\tawait page.reload();\n\n\t// Needed because this element has a variable height and may offset the highlight boxes by an unknown amount.\n\tawait page.locator('.toptext').evaluate((el) => el.remove());\n\n\tconst editor = getTextarea(page);\n\tawait replaceEditorContent(\n\t\teditor,\n\t\t'This is a test of the Harper grammar checker, specifically   if \\nit is wrapped around a line weirdl y',\n\t);\n\n\tawait page.waitForTimeout(6000);\n\n\tawait assertHarperHighlightBoxes(page, [\n\t\t{ x: 352.578125, y: 113, width: 63.984375, height: 19 },\n\t\t{ x: 592.484375, y: 96, width: 24, height: 19 },\n\t]);\n});\n\ntest('Hacker News scrolls correctly', async ({ page }) => {\n\tawait page.goto(await getTestPageUrl(page));\n\n\tawait page.waitForTimeout(2000);\n\tawait page.reload();\n\n\t// Needed because this element has a variable height and may offset the highlight boxes by an unknown amount.\n\tawait page.locator('.toptext').evaluate((el) => el.remove());\n\n\tconst editor = getTextarea(page);\n\tawait replaceEditorContent(\n\t\teditor,\n\t\t'This is a test of the the Harper grammar checker, specifically if \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nit scrolls beyo nd the height of the buffer.',\n\t);\n\n\tawait page.waitForTimeout(6000);\n\n\tawait assertHarperHighlightBoxes(page, [{ x: 216.625, y: 217, width: 56, height: 19 }]);\n});\n"
  },
  {
    "path": "packages/chrome-plugin/tests/lexical.spec.ts",
    "content": "import {\n\tgetLexicalEditor,\n\ttestBasicSuggestion,\n\ttestCanBlockRuleSuggestion,\n\ttestCanIgnoreSuggestion,\n\ttestMultipleSuggestionsAndUndo,\n} from './testUtils';\n\nconst TEST_PAGE_URL = 'https://playground.lexical.dev/';\n\ntestBasicSuggestion(TEST_PAGE_URL, getLexicalEditor);\ntestCanIgnoreSuggestion(TEST_PAGE_URL, getLexicalEditor);\ntestCanBlockRuleSuggestion(TEST_PAGE_URL, getLexicalEditor);\ntestMultipleSuggestionsAndUndo(TEST_PAGE_URL, getLexicalEditor);\n"
  },
  {
    "path": "packages/chrome-plugin/tests/lexical_webcomponent.spec.ts",
    "content": "import { expect, test } from './fixtures';\nimport {\n\tclickHarperHighlight,\n\tgetHarperHighlights,\n\tgetLexicalEditor,\n\treplaceEditorContent,\n} from './testUtils';\n\nconst TEST_PAGE_URL = 'http://localhost:8081/lexical_webcomponent.html';\n\ntest.describe('Lexical webcomponent regression', () => {\n\ttest.skip(\n\t\t({ browserName }) => browserName === 'firefox',\n\t\t'Firefox extension build lacks background scripts',\n\t);\n\ttest('Applying a suggestion does not duplicate text', async ({ page }) => {\n\t\tawait page.goto(TEST_PAGE_URL);\n\n\t\tconst lexical = getLexicalEditor(page);\n\t\tconst mirror = page.locator('#lexical-mirror');\n\t\tconst initialText = 'This is an test. This is an test again.';\n\t\tawait replaceEditorContent(lexical, initialText);\n\n\t\tawait page.waitForTimeout(6000);\n\t\tawait expect(mirror).toHaveText(initialText);\n\n\t\tawait clickHarperHighlight(page);\n\t\tawait page.getByTitle('Replace with \"a\"').click();\n\n\t\tawait page.waitForTimeout(3000);\n\t\tconst afterFirst = 'This is a test. This is an test again.';\n\t\tawait expect(lexical).toHaveText(afterFirst);\n\t\tawait expect(mirror).toHaveText(afterFirst);\n\t\tawait expect(getHarperHighlights(page)).toHaveCount(1);\n\n\t\tawait clickHarperHighlight(page);\n\t\tawait page.getByTitle('Replace with \"a\"').click();\n\n\t\tawait page.waitForTimeout(3000);\n\t\tconst finalText = 'This is a test. This is a test again.';\n\t\tawait expect(lexical).toHaveText(finalText);\n\t\tawait expect(mirror).toHaveText(finalText);\n\t\tawait expect(getHarperHighlights(page)).toHaveCount(0);\n\n\t\tconst lexicalText = (await lexical.textContent()) ?? '';\n\t\tconst mirrorText = (await mirror.textContent()) ?? '';\n\t\texpect(lexicalText.trim()).toBe(mirrorText.trim());\n\n\t\t// Verify editor state is preserved: arrow keys and backspace must work.\n\t\tawait lexical.press('End');\n\t\tawait lexical.press('Backspace');\n\t\tawait expect(lexical).toContainText('This is a test. This is a test again');\n\n\t\t// Verify typing still works.\n\t\tawait lexical.pressSequentially('.');\n\t\tawait expect(lexical).toContainText('This is a test. This is a test again.');\n\t});\n});\n"
  },
  {
    "path": "packages/chrome-plugin/tests/lint-kinds.spec.ts",
    "content": "import { test } from '@playwright/test';\nimport { LINT_KINDS, lintKindColor } from 'lint-framework';\n\n// biome-ignore lint/correctness/noEmptyPattern: Playwright requires an object destruction\ntest('display lint kind colors', async ({}, testInfo) => {\n\t// Generate color boxes for each lint kind\n\tconst colorBoxes = LINT_KINDS.map((kind) => {\n\t\tconst color = lintKindColor(kind);\n\t\treturn `<div class=\"color-box\" style=\"background-color: ${color}\">${kind}</div>`;\n\t}).join('\\n');\n\n\tconst htmlContent = `\n    <!DOCTYPE html>\n    <html>\n    <head>\n      <title>Lint Kind Colors</title>\n      <style>\n        body {\n          font-family: Arial, sans-serif;\n          padding: 20px;\n          background: #f5f5f5;\n        }\n        h1 {\n          color: #333;\n          margin-top: 0;\n        }\n        .container {\n          display: flex;\n          flex-wrap: wrap;\n          gap: 10px;\n          margin-top: 20px;\n        }\n        .color-box {\n          padding: 10px 20px;\n          border-radius: 4px;\n          color: white;\n          font-weight: bold;\n          box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n        }\n      </style>\n    </head>\n    <body>\n      <h1>Lint Kind Colors</h1>\n      <div class=\"container\">\n        ${colorBoxes}\n      </div>\n    </body>\n    </html>\n  `;\n\n\t// Attach the HTML report\n\tawait testInfo.attach('lint-colors.html', {\n\t\tbody: htmlContent,\n\t\tcontentType: 'text/html',\n\t});\n});\n"
  },
  {
    "path": "packages/chrome-plugin/tests/nested_elements.spec.ts",
    "content": "import { test } from './fixtures';\nimport { assertHarperHighlightBoxes, getTextarea, replaceEditorContent } from './testUtils';\n\nconst TEST_PAGE_URL = 'http://localhost:8081/nested_elements.html';\n\ntest('Positions properly in oddly nested page.', async ({ page }, _testInfo) => {\n\tawait page.goto(TEST_PAGE_URL);\n\n\tconst editor = getTextarea(page);\n\tawait replaceEditorContent(\n\t\teditor,\n\t\t'This is an test of the Harper grammar checker, specifically   if \\n the highlights are positionasd properly.',\n\t);\n\n\tawait page.waitForTimeout(6000);\n\n\tawait assertHarperHighlightBoxes(page, [\n\t\t{ x: 396.390625, y: 243, width: 15.625, height: 19 },\n\t\t{ x: 794.1875, y: 243, width: 23.421875, height: 19 },\n\t\t{ x: 490, y: 260, width: 85.828125, height: 19 },\n\t]);\n});\n"
  },
  {
    "path": "packages/chrome-plugin/tests/pages/github_textarea.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"utf-8\">\n</head>\n\n<body>\n  <div class=\"MarkdownEditor-module__container--LVNU1\"\n    style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:210px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:column;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:210px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:556px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:278px 105px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:278px 105px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:556px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n    <div\n      class=\"Shared-module__CommentBox--x3rre Shared-module__Condensed--p_BOv MarkdownEditor-module__inputWrapper--MtV0d\"\n      style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(255, 255, 255);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:170px;border-block-end-color:rgb(209, 217, 224);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgb(209, 217, 224);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgb(209, 217, 224);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(209, 217, 224);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgb(209, 217, 224);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgb(209, 217, 224);border-left-style:solid;border-left-width:1px;border-right-color:rgb(209, 217, 224);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(209, 217, 224);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:column;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:170px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:556px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:278px 85px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:278px 85px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:556px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n      <span class=\"sr-only\" id=\":r9g:-description\" aria-live=\"polite\"\n        style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:1px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:208px;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:inset(0px 100% 100% 0px);clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:1px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:1px;inset-block-end:208px;inset-block-start:1px;inset-inline-end:554px;inset-inline-start:1px;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:1px;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:hidden;overflow-clip-margin:0px;overflow-inline:hidden;overflow-wrap:normal;overflow-x:hidden;overflow-y:hidden;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0.5px 0.5px;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:554px;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:1px;touch-action:auto;transform:none;transform-origin:0.5px 0.5px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:1px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Markdown\n        input: edit mode selected.</span>\n      <header class=\"MarkdownEditor-module__header--i0pok\"\n        style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(246, 248, 250);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:36px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(31, 35, 40);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:36px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:554px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:277px 18px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:277px 18px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:554px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n        <div class=\"MarkdownEditor-module__viewSwitchWrapper--ezg8E\"\n          style=\"accent-color:auto;align-content:normal;align-items:flex-end;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:37px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:0px;flex-direction:row;flex-grow:1;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:37px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:142.5px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:-1px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:-1px;margin-left:-1px;margin-right:0px;margin-top:-1px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:71.25px 18.5px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:71.25px 18.5px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:142.5px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n          <div class=\"ViewSwitch-module__viewSwitch--fmIde\"\n            style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:37px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:37px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:134.219px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:67.1094px 18.5px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:67.1094px 18.5px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:134.219px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n            <div class=\"TabNav__TabNavBase-sc-pwdi4r-0\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:37px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:37px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:134.219px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:67.1094px 18.5px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:67.1094px 18.5px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:134.219px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n              <nav aria-label=\"View mode\" class=\"TabNav__TabNavNav-sc-pwdi4r-2 hSklQi\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:37px;border-block-end-color:rgb(209, 217, 224);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(209, 217, 224);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:37px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:134.219px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:67.1094px 18.5px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:67.1094px 18.5px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:134.219px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                <div role=\"tablist\" class=\"TabNav__TabNavTabList-sc-pwdi4r-1 DvNYj\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:37px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:37px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:134.219px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:-1px;margin-block-start:0px;margin-bottom:-1px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:auto;overflow-clip-margin:0px;overflow-inline:auto;overflow-wrap:break-word;overflow-x:auto;overflow-y:auto;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:67.1094px 18.5px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:67.1094px 18.5px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:134.219px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                  <button\n                    class=\"TabNav__TabNavLink-sc-pwdi4r-3 jbIphh ViewSwitch-module__tabNavLink--AZkCL ViewSwitch-module__editColor--UxQhv TabNav-item selected ViewSwitch-module__tabNavLink--AZkCL ViewSwitch-module__editColor--UxQhv\"\n                    role=\"tab\" aria-selected=\"true\" tabindex=\"0\"\n                    style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:button;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(255, 255, 255);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:37px;border-block-end-color:rgb(209, 217, 224);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(209, 217, 224);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgb(209, 217, 224);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(209, 217, 224);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgb(209, 217, 224);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgb(209, 217, 224);border-left-style:solid;border-left-width:1px;border-right-color:rgb(209, 217, 224);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(209, 217, 224);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:37px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:58.4219px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:20px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:8px;padding-block-start:8px;padding-bottom:8px;padding-inline-end:12px;padding-inline-start:12px;padding-left:12px;padding-right:12px;padding-top:8px;paint-order:normal;perspective:none;perspective-origin:29.2031px 18.5px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:29.2109px 18.5px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:58.4219px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Write</button><button\n                    class=\"TabNav__TabNavLink-sc-pwdi4r-3 jbIphh ViewSwitch-module__tabNavLink--AZkCL ViewSwitch-module__previewColor--aXo83 TabNav-item ViewSwitch-module__tabNavLink--AZkCL ViewSwitch-module__previewColor--aXo83\"\n                    role=\"tab\" aria-selected=\"false\" tabindex=\"-1\"\n                    style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:button;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:37px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:0px;border-start-start-radius:3px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:3px;border-top-right-radius:0px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:37px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:75.7969px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:20px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:8px;padding-block-start:8px;padding-bottom:8px;padding-inline-end:12px;padding-inline-start:12px;padding-left:12px;padding-right:12px;padding-top:8px;paint-order:normal;perspective:none;perspective-origin:37.8906px 18.5px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:37.8984px 18.5px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:75.7969px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Preview</button>\n                </div>\n              </nav>\n            </div>\n          </div>\n          <div class=\"MarkdownEditor-module__viewSwitchBorder--zeiDB\"\n            style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:1px;border-block-end-color:rgba(209, 217, 224, 0.7);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgba(209, 217, 224, 0.7);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:1;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:1px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:8.28125px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:4.14062px 0.5px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:4.14062px 0.5px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:8.28125px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n          </div>\n        </div>\n        <div aria-label=\"Formatting tools\" role=\"toolbar\" class=\"Toolbar-module__toolbar--CkIKP\"\n          style=\"accent-color:auto;align-content:normal;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:36px;border-block-end-color:rgb(209, 217, 224);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(209, 217, 224);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:0px;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:1;flex-shrink:1;flex-wrap:wrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:36px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:412.5px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:flex-end;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:4px;padding-inline-start:8px;padding-left:8px;padding-right:4px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:206.25px 18px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:0px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:206.25px 18px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:412.5px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n          <div\n            style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:0px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:0px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:0px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:0px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n            <button data-component=\"IconButton\" type=\"button\"\n              class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n              data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n              aria-describedby=\":r9i:-loading-announcement\" aria-labelledby=\":r9h:\" tabindex=\"0\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:2px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:189.5px;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:rect(1px, 1px, 1px, 1px);clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:2px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:18px;inset-block-end:189.5px;inset-block-start:18.5px;inset-inline-end:245px;inset-inline-start:293px;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:293px;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:hidden;overflow-clip-margin:0px;overflow-inline:hidden;overflow-wrap:break-word;overflow-x:hidden;overflow-y:hidden;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:9px 1px;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:245px;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:18.5px;touch-action:auto;transform:none;transform-origin:9px 1px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:18px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-heading\" viewBox=\"0 0 16 16\" width=\"16\"\n                height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                <path\n                  d=\"M3.75 2a.75.75 0 0 1 .75.75V7h7V2.75a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0V8.5h-7v4.75a.75.75 0 0 1-1.5 0V2.75A.75.75 0 0 1 3.75 2Z\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 3.75 2 A 0.75 0.75 0 0 1 4.5 2.75 V 7 H 11.5 V 2.75 A 0.75 0.75 0 0 1 13 2.75 V 13.25 A 0.75 0.75 0 0 1 11.5 13.25 V 8.5 H 4.5 V 13.25 A 0.75 0.75 0 0 1 3 13.25 V 2.75 A 0.75 0.75 0 0 1 3.75 2 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                </path>\n              </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":r9h:\"\n              popover=\"auto\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Heading</span><button\n              data-component=\"IconButton\" type=\"button\"\n              class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n              data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n              aria-describedby=\":r9k:-loading-announcement\" aria-labelledby=\":r9j:\" tabindex=\"-1\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:2px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:189.5px;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:rect(1px, 1px, 1px, 1px);clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:2px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:18px;inset-block-end:189.5px;inset-block-start:18.5px;inset-inline-end:245px;inset-inline-start:293px;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:293px;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:hidden;overflow-clip-margin:0px;overflow-inline:hidden;overflow-wrap:break-word;overflow-x:hidden;overflow-y:hidden;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:9px 1px;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:245px;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:18.5px;touch-action:auto;transform:none;transform-origin:9px 1px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:18px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-bold\" viewBox=\"0 0 16 16\" width=\"16\"\n                height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                <path\n                  d=\"M4 2h4.5a3.501 3.501 0 0 1 2.852 5.53A3.499 3.499 0 0 1 9.5 14H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Zm1 7v3h4.5a1.5 1.5 0 0 0 0-3Zm3.5-2a1.5 1.5 0 0 0 0-3H5v3Z\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 4 2 H 8.5 A 3.501 3.501 0 0 1 11.352 7.53 A 3.499 3.499 0 0 1 9.5 14 H 4 A 1 1 0 0 1 3 13 V 3 A 1 1 0 0 1 4 2 Z M 5 9 V 12 H 9.5 A 1.5 1.5 0 0 0 9.5 9 Z M 8.5 7 A 1.5 1.5 0 0 0 8.5 4 H 5 V 7 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                </path>\n              </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":r9j:\"\n              popover=\"auto\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Bold</span><button\n              data-component=\"IconButton\" type=\"button\"\n              class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n              data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n              aria-describedby=\":r9m:-loading-announcement\" aria-labelledby=\":r9l:\" tabindex=\"-1\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:2px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:189.5px;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:rect(1px, 1px, 1px, 1px);clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:2px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:18px;inset-block-end:189.5px;inset-block-start:18.5px;inset-inline-end:245px;inset-inline-start:293px;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:293px;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:hidden;overflow-clip-margin:0px;overflow-inline:hidden;overflow-wrap:break-word;overflow-x:hidden;overflow-y:hidden;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:9px 1px;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:245px;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:18.5px;touch-action:auto;transform:none;transform-origin:9px 1px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:18px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-italic\" viewBox=\"0 0 16 16\" width=\"16\"\n                height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                <path\n                  d=\"M6 2.75A.75.75 0 0 1 6.75 2h6.5a.75.75 0 0 1 0 1.5h-2.505l-3.858 9H9.25a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.505l3.858-9H6.75A.75.75 0 0 1 6 2.75Z\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 6 2.75 A 0.75 0.75 0 0 1 6.75 2 H 13.25 A 0.75 0.75 0 0 1 13.25 3.5 H 10.745 L 6.887 12.5 H 9.25 A 0.75 0.75 0 0 1 9.25 14 H 2.75 A 0.75 0.75 0 0 1 2.75 12.5 H 5.255 L 9.113 3.5 H 6.75 A 0.75 0.75 0 0 1 6 2.75 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                </path>\n              </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":r9l:\"\n              popover=\"auto\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Italic</span>\n          </div>\n          <div\n            style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:101px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:50.5px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50.5px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:101px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n            <div class=\"Toolbar-module__divider--uW6mE\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgba(209, 217, 224, 0.7);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(209, 217, 224, 0.7);border-left-style:solid;border-left-width:1px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:inline-grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:1px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:8px;margin-inline-start:8px;margin-left:8px;margin-right:8px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0.5px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0.5px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:1px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n            </div><button data-component=\"IconButton\" type=\"button\"\n              class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n              data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n              aria-describedby=\":r9o:-loading-announcement\" aria-labelledby=\":r9n:\" tabindex=\"-1\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:inline-grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:28px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:14px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:14px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:28px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-quote\" viewBox=\"0 0 16 16\" width=\"16\"\n                height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                <path\n                  d=\"M1.75 2.5h10.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5Zm4 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2.5 7.75v6a.75.75 0 0 1-1.5 0v-6a.75.75 0 0 1 1.5 0Z\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 1.75 2.5 H 12.25 A 0.75 0.75 0 0 1 12.25 4 H 1.75 A 0.75 0.75 0 0 1 1.75 2.5 Z M 5.75 7.5 H 14.25 A 0.75 0.75 0 0 1 14.25 9 H 5.75 A 0.75 0.75 0 0 1 5.75 7.5 Z M 5.75 12.5 H 14.25 A 0.75 0.75 0 0 1 14.25 14 H 5.75 A 0.75 0.75 0 0 1 5.75 12.5 Z M 2.5 7.75 V 13.75 A 0.75 0.75 0 0 1 1 13.75 V 7.75 A 0.75 0.75 0 0 1 2.5 7.75 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                </path>\n              </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":r9n:\"\n              popover=\"auto\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Quote</span><button\n              data-component=\"IconButton\" type=\"button\"\n              class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n              data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n              aria-describedby=\":r9q:-loading-announcement\" aria-labelledby=\":r9p:\" tabindex=\"-1\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:inline-grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:28px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:14px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:14px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:28px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-code\" viewBox=\"0 0 16 16\" width=\"16\"\n                height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                <path\n                  d=\"m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 11.28 3.22 L 15.53 7.47 A 0.75 0.75 0 0 1 15.53 8.53 L 11.28 12.78 A 0.749 0.749 0 0 1 10.005 12.454 A 0.749 0.749 0 0 1 10.22 11.72 L 13.94 8 L 10.22 4.28 A 0.749 0.749 0 0 1 10.546 3.005 A 0.749 0.749 0 0 1 11.28 3.22 Z M 4.72 3.22 A 0.751 0.751 0 0 1 5.762 3.238 A 0.751 0.751 0 0 1 5.78 4.28 L 2.06 8 L 5.78 11.72 A 0.749 0.749 0 0 1 5.454 12.995 A 0.749 0.749 0 0 1 4.72 12.78 L 0.47 8.53 A 0.75 0.75 0 0 1 0.47 7.47 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                </path>\n              </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":r9p:\"\n              popover=\"auto\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Code</span><button\n              data-component=\"IconButton\" type=\"button\"\n              class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n              data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n              aria-describedby=\":r9s:-loading-announcement\" aria-labelledby=\":r9r:\" tabindex=\"-1\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:inline-grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:28px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:14px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:14px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:28px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" width=\"16\"\n                height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                <path\n                  d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 7.775 3.275 L 9.025 2.025 A 3.5 3.5 0 1 1 13.975 6.975 L 11.475 9.475 A 3.5 3.5 0 0 1 6.525 9.475 A 0.751 0.751 0 0 1 6.543 8.433 A 0.751 0.751 0 0 1 7.585 8.415 A 1.998 1.998 0 0 0 10.415 8.415 L 12.915 5.915 A 2.002 2.002 0 0 0 10.085 3.085 L 8.835 4.335 A 0.751 0.751 0 0 1 7.793 4.317 A 0.751 0.751 0 0 1 7.775 3.275 Z M 3.085 12.915 A 1.998 1.998 0 0 0 5.915 12.915 L 7.165 11.665 A 0.751 0.751 0 0 1 8.207 11.683 A 0.751 0.751 0 0 1 8.225 12.725 L 6.975 13.975 A 3.5 3.5 0 1 1 2.025 9.025 L 4.525 6.525 A 3.5 3.5 0 0 1 9.475 6.525 A 0.751 0.751 0 0 1 9.457 7.567 A 0.751 0.751 0 0 1 8.415 7.585 A 1.998 1.998 0 0 0 5.585 7.585 L 3.085 10.085 A 1.998 1.998 0 0 0 3.085 12.915 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                </path>\n              </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":r9r:\"\n              popover=\"auto\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Link</span>\n          </div>\n          <div\n            style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:101px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:50.5px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50.5px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:101px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n            <div class=\"Toolbar-module__divider--uW6mE\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgba(209, 217, 224, 0.7);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(209, 217, 224, 0.7);border-left-style:solid;border-left-width:1px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:inline-grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:1px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:8px;margin-inline-start:8px;margin-left:8px;margin-right:8px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0.5px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0.5px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:1px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n            </div><button data-component=\"IconButton\" type=\"button\"\n              class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n              data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n              aria-describedby=\":r9u:-loading-announcement\" aria-labelledby=\":r9t:\" tabindex=\"-1\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:inline-grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:28px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:14px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:14px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:28px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-list-unordered\" viewBox=\"0 0 16 16\"\n                width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                <path\n                  d=\"M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 5.75 2.5 H 14.25 A 0.75 0.75 0 0 1 14.25 4 H 5.75 A 0.75 0.75 0 0 1 5.75 2.5 Z M 5.75 7.5 H 14.25 A 0.75 0.75 0 0 1 14.25 9 H 5.75 A 0.75 0.75 0 0 1 5.75 7.5 Z M 5.75 12.5 H 14.25 A 0.75 0.75 0 0 1 14.25 14 H 5.75 A 0.75 0.75 0 0 1 5.75 12.5 Z M 2 14 A 1 1 0 1 1 2 12 A 1 1 0 0 1 2 14 Z M 3 8 A 1 1 0 1 1 1 8 A 1 1 0 0 1 3 8 Z M 2 4 A 1 1 0 1 1 2 2 A 1 1 0 0 1 2 4 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                </path>\n              </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":r9t:\"\n              popover=\"auto\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Unordered\n              list</span><button data-component=\"IconButton\" type=\"button\"\n              class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n              data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n              aria-describedby=\":ra0:-loading-announcement\" aria-labelledby=\":r9v:\" tabindex=\"-1\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:inline-grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:28px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:14px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:14px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:28px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-list-ordered\" viewBox=\"0 0 16 16\" width=\"16\"\n                height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                <path\n                  d=\"M5 3.25a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 5 3.25Zm0 5a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 5 8.25Zm0 5a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1-.75-.75ZM.924 10.32a.5.5 0 0 1-.851-.525l.001-.001.001-.002.002-.004.007-.011c.097-.144.215-.273.348-.384.228-.19.588-.392 1.068-.392.468 0 .858.181 1.126.484.259.294.377.673.377 1.038 0 .987-.686 1.495-1.156 1.845l-.047.035c-.303.225-.522.4-.654.597h1.357a.5.5 0 0 1 0 1H.5a.5.5 0 0 1-.5-.5c0-1.005.692-1.52 1.167-1.875l.035-.025c.531-.396.8-.625.8-1.078a.57.57 0 0 0-.128-.376C1.806 10.068 1.695 10 1.5 10a.658.658 0 0 0-.429.163.835.835 0 0 0-.144.153ZM2.003 2.5V6h.503a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1h.503V3.308l-.28.14a.5.5 0 0 1-.446-.895l1.003-.5a.5.5 0 0 1 .723.447Z\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 5 3.25 A 0.75 0.75 0 0 1 5.75 2.5 H 14.25 A 0.75 0.75 0 0 1 14.25 4 H 5.75 A 0.75 0.75 0 0 1 5 3.25 Z M 5 8.25 A 0.75 0.75 0 0 1 5.75 7.5 H 14.25 A 0.75 0.75 0 0 1 14.25 9 H 5.75 A 0.75 0.75 0 0 1 5 8.25 Z M 5 13.25 A 0.75 0.75 0 0 1 5.75 12.5 H 14.25 A 0.75 0.75 0 0 1 14.25 14 H 5.75 A 0.75 0.75 0 0 1 5 13.25 Z M 0.924 10.32 A 0.5 0.5 0 0 1 0.073 9.795 L 0.074 9.794 L 0.075 9.792 L 0.077 9.788 L 0.084 9.777 C 0.181 9.633 0.299 9.504 0.432 9.393 C 0.66 9.203 1.02 9.001 1.5 9.001 C 1.968 9.001 2.358 9.182 2.626 9.485 C 2.885 9.779 3.003 10.158 3.003 10.523 C 3.003 11.51 2.317 12.018 1.847 12.368 L 1.8 12.403 C 1.497 12.628 1.278 12.803 1.146 13 H 2.503 A 0.5 0.5 0 0 1 2.503 14 H 0.5 A 0.5 0.5 0 0 1 0 13.5 C 0 12.495 0.692 11.98 1.167 11.625 L 1.202 11.6 C 1.733 11.204 2.002 10.975 2.002 10.522 A 0.57 0.57 0 0 0 1.874 10.146 C 1.806 10.068 1.695 10 1.5 10 A 0.658 0.658 0 0 0 1.071 10.163 A 0.835 0.835 0 0 0 0.927 10.316 Z M 2.003 2.5 V 6 H 2.506 A 0.5 0.5 0 0 1 2.506 7 H 0.5 A 0.5 0.5 0 0 1 0.5 6 H 1.003 V 3.308 L 0.723 3.448 A 0.5 0.5 0 0 1 0.277 2.553 L 1.28 2.053 A 0.5 0.5 0 0 1 2.003 2.5 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                </path>\n              </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":r9v:\"\n              popover=\"auto\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Numbered\n              list</span><button data-component=\"IconButton\" type=\"button\"\n              class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n              data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n              aria-describedby=\":ra2:-loading-announcement\" aria-labelledby=\":ra1:\" tabindex=\"-1\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:inline-grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:28px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:14px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:14px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:28px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-tasklist\" viewBox=\"0 0 16 16\" width=\"16\"\n                height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                <path\n                  d=\"M2 2h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Zm4.655 8.595a.75.75 0 0 1 0 1.06L4.03 14.28a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.095-2.095a.75.75 0 0 1 1.06 0ZM9.75 2.5h5.5a.75.75 0 0 1 0 1.5h-5.5a.75.75 0 0 1 0-1.5Zm0 5h5.5a.75.75 0 0 1 0 1.5h-5.5a.75.75 0 0 1 0-1.5Zm0 5h5.5a.75.75 0 0 1 0 1.5h-5.5a.75.75 0 0 1 0-1.5Zm-7.25-9v3h3v-3Z\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 2 2 H 6 A 1 1 0 0 1 7 3 V 7 A 1 1 0 0 1 6 8 H 2 A 1 1 0 0 1 1 7 V 3 A 1 1 0 0 1 2 2 Z M 6.655 10.595 A 0.75 0.75 0 0 1 6.655 11.655 L 4.03 14.28 A 0.75 0.75 0 0 1 2.97 14.28 L 1.47 12.78 A 0.749 0.749 0 0 1 1.796 11.505 A 0.749 0.749 0 0 1 2.53 11.72 L 3.5 12.69 L 5.595 10.595 A 0.75 0.75 0 0 1 6.655 10.595 Z M 9.75 2.5 H 15.25 A 0.75 0.75 0 0 1 15.25 4 H 9.75 A 0.75 0.75 0 0 1 9.75 2.5 Z M 9.75 7.5 H 15.25 A 0.75 0.75 0 0 1 15.25 9 H 9.75 A 0.75 0.75 0 0 1 9.75 7.5 Z M 9.75 12.5 H 15.25 A 0.75 0.75 0 0 1 15.25 14 H 9.75 A 0.75 0.75 0 0 1 9.75 12.5 Z M 2.5 3.5 V 6.5 H 5.5 V 3.5 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                </path>\n              </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":ra1:\"\n              popover=\"auto\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Task\n              list</span>\n          </div><button data-component=\"IconButton\" type=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\"\n            tabindex=\"-1\"\n            class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n            data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n            aria-describedby=\":ra9:-loading-announcement\" aria-labelledby=\":raa:\" id=\":ra9:\"\n            style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:28px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:14px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:14px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:28px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n              aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-reply\" viewBox=\"0 0 16 16\" width=\"16\"\n              height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n              <path\n                d=\"M6.78 1.97a.75.75 0 0 1 0 1.06L3.81 6h6.44A4.75 4.75 0 0 1 15 10.75v2.5a.75.75 0 0 1-1.5 0v-2.5a3.25 3.25 0 0 0-3.25-3.25H3.81l2.97 2.97a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L1.47 7.28a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 6.78 1.97 A 0.75 0.75 0 0 1 6.78 3.03 L 3.81 6 H 10.25 A 4.75 4.75 0 0 1 15 10.75 V 13.25 A 0.75 0.75 0 0 1 13.5 13.25 V 10.75 A 3.25 3.25 0 0 0 10.25 7.5 H 3.81 L 6.78 10.47 A 0.749 0.749 0 0 1 6.454 11.745 A 0.749 0.749 0 0 1 5.72 11.53 L 1.47 7.28 A 0.75 0.75 0 0 1 1.47 6.22 L 5.72 1.97 A 0.75 0.75 0 0 1 6.78 1.97 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n              </path>\n            </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":raa:\"\n            popover=\"auto\"\n            style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Saved\n            replies</span><button data-component=\"IconButton\" type=\"button\"\n            class=\"prc-Button-ButtonBase-c50BI ToolbarButton-module__iconButton--fTMrr prc-Button-IconButton-szpyj\"\n            data-loading=\"false\" data-no-visuals=\"true\" data-size=\"small\" data-variant=\"invisible\"\n            aria-describedby=\":rad:-loading-announcement\" aria-labelledby=\":rac:\" tabindex=\"-1\"\n            style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:28px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:14px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:14px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:28px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n              aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-diff-ignored\" viewBox=\"0 0 16 16\" width=\"16\"\n              height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n              <path\n                d=\"M13.25 1c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0 1 13.25 15H2.75A1.75 1.75 0 0 1 1 13.25V2.75C1 1.784 1.784 1 2.75 1ZM2.75 2.5a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25V2.75a.25.25 0 0 0-.25-.25Zm8.53 3.28-5.5 5.5a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l5.5-5.5a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 13.25 1 C 14.216 1 15 1.784 15 2.75 V 13.25 A 1.75 1.75 0 0 1 13.25 15 H 2.75 A 1.75 1.75 0 0 1 1 13.25 V 2.75 C 1 1.784 1.784 1 2.75 1 Z M 2.75 2.5 A 0.25 0.25 0 0 0 2.5 2.75 V 13.25 C 2.5 13.388 2.612 13.5 2.75 13.5 H 13.25 A 0.25 0.25 0 0 0 13.5 13.25 V 2.75 A 0.25 0.25 0 0 0 13.25 2.5 Z M 11.28 5.78 L 5.78 11.28 A 0.749 0.749 0 0 1 4.505 10.954 A 0.749 0.749 0 0 1 4.72 10.22 L 10.22 4.72 A 0.751 0.751 0 0 1 11.262 4.738 A 0.751 0.751 0 0 1 11.28 5.78 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n              </path>\n            </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\" id=\":rac:\"\n            popover=\"auto\"\n            style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Slash\n            commands</span>\n        </div>\n      </header>\n      <div class=\"InlineAutocomplete-module__container--UwGMb\"\n        style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:132px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:0px;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:1;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:132px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:554px;inset-block-end:0px;inset-block-start:0px;inset-inline-end:0px;inset-inline-start:0px;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:0px;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:277px 66px;pointer-events:auto;position:relative;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:0px;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:0px;touch-action:auto;transform:none;transform-origin:277px 66px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:554px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n        <span\n          class=\"MarkdownInput-module__textArea--QjIwG MarkdownInput-module__monospace--hhBf3 prc-components-TextInputBaseWrapper-ueK9q\"\n          style=\"accent-color:auto;align-content:normal;align-items:stretch;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(255, 255, 255);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:132px;border-block-end-color:rgb(209, 217, 224);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(209, 217, 224);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(209, 217, 224);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(209, 217, 224);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(209, 217, 224);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(209, 217, 224);border-left-style:none;border-left-width:0px;border-right-color:rgb(209, 217, 224);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(209, 217, 224);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:text;cx:0px;cy:0px;d:none;direction:ltr;display:inline-flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:132px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:554px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:20px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:32px;min-height:32px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:-4px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:hidden;overflow-clip-margin:0px;overflow-inline:hidden;overflow-wrap:break-word;overflow-x:hidden;overflow-y:hidden;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:277px 66px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:277px 66px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:middle;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:554px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><textarea\n            data-resize=\"both\" aria-required=\"false\" aria-invalid=\"false\" rows=\"5\" cols=\"30\"\n            class=\"prc-Textarea-TextArea-13q4j\" id=\":r9g:\" placeholder=\"Use Markdown to format your comment\"\n            aria-labelledby=\"comment-composer-heading\" aria-describedby=\":r9g:-description\"\n            style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:100px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:content-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:text;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:100px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:522px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:19.999px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:699.965px;max-height:699.965px;max-inline-size:none;max-width:none;min-block-size:99.995px;min-height:99.995px;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:auto;overflow-clip-margin:0px;overflow-inline:auto;overflow-wrap:break-word;overflow-x:auto;overflow-y:auto;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:16px;padding-block-start:16px;padding-bottom:16px;padding-inline-end:16px;padding-inline-start:16px;padding-left:16px;padding-right:16px;padding-top:16px;paint-order:normal;perspective:none;perspective-origin:277px 66px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:vertical;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:277px 66px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:preserve;widows:2;width:522px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"></textarea></span>\n      </div>\n      <div role=\"alert\"\n        style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:0px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:0px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:554px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:277px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:277px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:554px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n      </div>\n    </div>\n    <footer class=\"Footer-module__footer--ihBso\"\n      style=\"accent-color:auto;align-content:normal;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:40px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:8px;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:wrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:40px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:556px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:space-between;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:36px;min-height:36px;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:8px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:8px;paint-order:normal;perspective:none;perspective-origin:278px 20px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:8px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:278px 20px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:556px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n      <div class=\"Footer-module__footerWrapper--cGLx2\"\n        style=\"accent-color:auto;align-content:normal;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:84.0312px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:42.0156px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:42.0156px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:84.0312px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n        <div class=\"Box-sc-g0xbh4-0\" data-loading-wrapper=\"true\"\n          style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:84.0312px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:42.0156px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:42.0156px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:84.0312px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n          <button type=\"button\" class=\"prc-Button-ButtonBase-c50BI Footer-module__footerButton--JxULX\"\n            data-loading=\"false\" data-size=\"small\" data-variant=\"invisible\"\n            aria-describedby=\":rag:-loading-announcement\"\n            style=\"accent-color:auto;align-content:normal;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:28px;border-block-end-color:rgba(0, 0, 0, 0);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(0, 0, 0, 0);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(0, 0, 0, 0);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(0, 0, 0, 0);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(0, 0, 0, 0);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(0, 0, 0, 0);border-left-style:solid;border-left-width:1px;border-right-color:rgba(0, 0, 0, 0);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgba(0, 0, 0, 0);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:4px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:28px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:84.0312px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:space-between;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:max-content;min-width:max-content;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:8px;padding-inline-start:8px;padding-left:8px;padding-right:8px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:42.0156px 14px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:4px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:42.0156px 14px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:84.0312px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><span\n              data-component=\"buttonContent\" data-align=\"center\" class=\"prc-Button-ButtonContent-HKbr-\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:20px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:1;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:&quot;leadingVisual text trailingVisual&quot;;grid-template-columns:20px 46.0312px 0px;grid-template-rows:20px;height:20px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:66.0312px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:33.0156px 10px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:33.0156px 10px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:66.0312px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><span\n                data-component=\"leadingVisual\" class=\"prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:leadingVisual;grid-column-start:leadingVisual;grid-row-end:leadingVisual;grid-row-start:leadingVisual;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:4px;margin-inline-start:0px;margin-left:0px;margin-right:4px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:none;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                  aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-paperclip\" viewBox=\"0 0 16 16\" width=\"16\"\n                  height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:none;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                  <path\n                    d=\"M12.212 3.02a1.753 1.753 0 0 0-2.478.003l-5.83 5.83a3.007 3.007 0 0 0-.88 2.127c0 .795.315 1.551.88 2.116.567.567 1.333.89 2.126.89.79 0 1.548-.321 2.116-.89l5.48-5.48a.75.75 0 0 1 1.061 1.06l-5.48 5.48a4.492 4.492 0 0 1-3.177 1.33c-1.2 0-2.345-.487-3.187-1.33a4.483 4.483 0 0 1-1.32-3.177c0-1.195.475-2.341 1.32-3.186l5.83-5.83a3.25 3.25 0 0 1 5.553 2.297c0 .863-.343 1.691-.953 2.301L7.439 12.39c-.375.377-.884.59-1.416.593a1.998 1.998 0 0 1-1.412-.593 1.992 1.992 0 0 1 0-2.828l5.48-5.48a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-5.48 5.48a.492.492 0 0 0 0 .707.499.499 0 0 0 .352.154.51.51 0 0 0 .356-.154l5.833-5.827a1.755 1.755 0 0 0 0-2.481Z\"\n                    style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 12.212 3.02 A 1.753 1.753 0 0 0 9.734 3.023 L 3.904 8.853 A 3.007 3.007 0 0 0 3.024 10.98 C 3.024 11.775 3.339 12.531 3.904 13.096 C 4.471 13.663 5.237 13.986 6.03 13.986 C 6.82 13.986 7.578 13.665 8.146 13.096 L 13.626 7.616 A 0.75 0.75 0 0 1 14.687 8.676 L 9.207 14.156 A 4.492 4.492 0 0 1 6.03 15.486 C 4.83 15.486 3.685 14.999 2.843 14.156 A 4.483 4.483 0 0 1 1.523 10.979 C 1.523 9.784 1.998 8.638 2.843 7.793 L 8.673 1.963 A 3.25 3.25 0 0 1 14.226 4.26 C 14.226 5.123 13.883 5.951 13.273 6.561 L 7.439 12.39 C 7.064 12.767 6.555 12.98 6.023 12.983 A 1.998 1.998 0 0 1 4.611 12.39 A 1.992 1.992 0 0 1 4.611 9.562 L 10.091 4.082 A 0.751 0.751 0 0 1 11.133 4.1 A 0.751 0.751 0 0 1 11.151 5.142 L 5.671 10.622 A 0.492 0.492 0 0 0 5.671 11.329 A 0.499 0.499 0 0 0 6.023 11.483 A 0.51 0.51 0 0 0 6.379 11.329 L 12.212 5.502 A 1.755 1.755 0 0 0 12.212 3.021 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:18px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:none;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                  </path>\n                </svg></span><span data-component=\"text\" class=\"prc-Button-Label-pTQ3x\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:20px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:12px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:text;grid-column-start:text;grid-row-end:text;grid-row-start:text;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:20px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:46.0312px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:20px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:23.0156px 10px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:nowrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:23.0156px 10px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:46.0312px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Add\n                files</span></span></button>\n        </div>\n      </div>\n      <div class=\"Footer-module__childrenStyling--ySU6Z\"\n        style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:32px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:8px;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:wrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:32px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:247.062px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:flex-end;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:216.906px;margin-left:216.906px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:123.531px 16px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:8px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:123.531px 16px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:247.062px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n        <div id=\"issue-actions-portal-I_kwDOKjdIG86lf_jP\"\n          style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:32px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:32px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:152.375px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:76.1875px 16px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:76.1875px 16px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:152.375px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n          <div class=\"Box-sc-g0xbh4-0 IssueActions-module__ButtonGroup--VyDv0 prc-ButtonGroup-ButtonGroup-vcMeG\"\n            style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:32px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:32px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:152.375px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:isolate;justify-content:flex-end;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:76.1875px 16px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:76.1875px 16px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:middle;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:152.375px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n            <div\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:32px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:0px;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:32px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:122.375px;inset-block-end:0px;inset-block-start:0px;inset-inline-end:0px;inset-inline-start:0px;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:0px;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:-1px;margin-inline-start:0px;margin-left:0px;margin-right:-1px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:61.1875px 16px;pointer-events:auto;position:relative;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:0px;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:0px;touch-action:auto;transform:none;transform-origin:61.1875px 16px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:122.375px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n              <button type=\"button\" class=\"prc-Button-ButtonBase-c50BI\" data-loading=\"false\" data-size=\"medium\"\n                data-variant=\"default\" aria-describedby=\":rah:-loading-announcement\"\n                style=\"accent-color:auto;align-content:normal;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(246, 248, 250);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:32px;border-block-end-color:rgb(209, 217, 224);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgb(209, 217, 224);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgb(209, 217, 224);border-bottom-left-radius:6px;border-bottom-right-radius:0px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(209, 217, 224);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgb(209, 217, 224);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgb(209, 217, 224);border-left-style:solid;border-left-width:1px;border-right-color:rgb(209, 217, 224);border-right-style:solid;border-right-width:1px;border-start-end-radius:0px;border-start-start-radius:6px;border-top-color:rgb(209, 217, 224);border-top-left-radius:6px;border-top-right-radius:0px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:rgba(31, 35, 40, 0.04) 0px 1px 0px 0px;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(37, 41, 46);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(37, 41, 46);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:8px;column-rule-color:rgb(37, 41, 46);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:32px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:122.375px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:space-between;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:max-content;min-width:max-content;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(37, 41, 46);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:12px;padding-inline-start:12px;padding-left:12px;padding-right:12px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:61.1875px 16px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:8px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(37, 41, 46);text-decoration-color:rgb(37, 41, 46);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(37, 41, 46);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:61.1875px 16px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:122.375px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(37, 41, 46);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(37, 41, 46);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><span\n                  data-component=\"buttonContent\" data-align=\"center\" class=\"prc-Button-ButtonContent-HKbr-\"\n                  style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:20px;border-block-end-color:rgb(37, 41, 46);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(37, 41, 46);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(37, 41, 46);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(37, 41, 46);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(37, 41, 46);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(37, 41, 46);border-left-style:none;border-left-width:0px;border-right-color:rgb(37, 41, 46);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(37, 41, 46);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(37, 41, 46);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(37, 41, 46);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(37, 41, 46);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:1;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:&quot;leadingVisual text trailingVisual&quot;;grid-template-columns:24px 72.375px 0px;grid-template-rows:20px;height:20px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:96.375px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(37, 41, 46);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:48.1875px 10px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(37, 41, 46);text-decoration-color:rgb(37, 41, 46);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(37, 41, 46);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:48.1875px 10px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:96.375px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(37, 41, 46);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(37, 41, 46);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><span\n                    data-component=\"leadingVisual\" class=\"prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB\"\n                    style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:leadingVisual;grid-column-start:leadingVisual;grid-row-end:leadingVisual;grid-row-start:leadingVisual;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:8px;margin-inline-start:0px;margin-left:0px;margin-right:8px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:none;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                      aria-hidden=\"true\" focusable=\"false\"\n                      class=\"octicon octicon-issue-closed Octicon-sc-9kayk9-0 hjIZXg\" viewBox=\"0 0 16 16\" width=\"16\"\n                      height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                      style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(130, 80, 223);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(130, 80, 223);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(130, 80, 223);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(130, 80, 223);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(130, 80, 223);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(130, 80, 223);border-left-style:none;border-left-width:0px;border-right-color:rgb(130, 80, 223);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(130, 80, 223);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(130, 80, 223);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(130, 80, 223);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(130, 80, 223);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(130, 80, 223);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(130, 80, 223);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:none;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(130, 80, 223);text-decoration-color:rgb(130, 80, 223);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(130, 80, 223);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(130, 80, 223);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(130, 80, 223);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                      <path\n                        d=\"M11.28 6.78a.75.75 0 0 0-1.06-1.06L7.25 8.69 5.78 7.22a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.06 0l3.5-3.5Z\"\n                        style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(130, 80, 223);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(130, 80, 223);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(130, 80, 223);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(130, 80, 223);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(130, 80, 223);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(130, 80, 223);border-left-style:none;border-left-width:0px;border-right-color:rgb(130, 80, 223);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(130, 80, 223);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(130, 80, 223);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(130, 80, 223);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(130, 80, 223);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 11.28 6.78 A 0.75 0.75 0 0 0 10.22 5.72 L 7.25 8.69 L 5.78 7.22 A 0.75 0.75 0 0 0 4.72 8.28 L 6.72 10.28 A 0.75 0.75 0 0 0 7.78 10.28 L 11.28 6.78 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(130, 80, 223);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(130, 80, 223);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:none;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(130, 80, 223);text-decoration-color:rgb(130, 80, 223);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(130, 80, 223);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(130, 80, 223);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(130, 80, 223);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                      </path>\n                      <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-1.5 0a6.5 6.5 0 1 0-13 0 6.5 6.5 0 0 0 13 0Z\"\n                        style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(130, 80, 223);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(130, 80, 223);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(130, 80, 223);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(130, 80, 223);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(130, 80, 223);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(130, 80, 223);border-left-style:none;border-left-width:0px;border-right-color:rgb(130, 80, 223);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(130, 80, 223);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(130, 80, 223);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(130, 80, 223);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(130, 80, 223);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 16 8 A 8 8 0 1 1 0 8 A 8 8 0 0 1 16 8 Z M 14.5 8 A 6.5 6.5 0 1 0 1.5 8 A 6.5 6.5 0 0 0 14.5 8 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(130, 80, 223);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(130, 80, 223);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:none;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(130, 80, 223);text-decoration-color:rgb(130, 80, 223);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(130, 80, 223);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(130, 80, 223);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(130, 80, 223);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                      </path>\n                    </svg></span><span data-component=\"text\" class=\"prc-Button-Label-pTQ3x\"\n                    style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:20px;border-block-end-color:rgb(37, 41, 46);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(37, 41, 46);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(37, 41, 46);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(37, 41, 46);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(37, 41, 46);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(37, 41, 46);border-left-style:none;border-left-width:0px;border-right-color:rgb(37, 41, 46);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(37, 41, 46);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(37, 41, 46);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(37, 41, 46);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(37, 41, 46);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:text;grid-column-start:text;grid-row-end:text;grid-row-start:text;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:20px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:72.375px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:20px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(37, 41, 46);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:36.1875px 10px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(37, 41, 46);text-decoration-color:rgb(37, 41, 46);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(37, 41, 46);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:nowrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:36.1875px 10px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:72.375px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(37, 41, 46);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(37, 41, 46);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Close\n                    issue</span></span></button>\n            </div>\n            <div\n              style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:32px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:0px;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:32px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:32px;inset-block-end:0px;inset-block-start:0px;inset-inline-end:0px;inset-inline-start:0px;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:0px;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:-1px;margin-inline-start:0px;margin-left:0px;margin-right:-1px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:16px 16px;pointer-events:auto;position:relative;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:0px;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:0px;touch-action:auto;transform:none;transform-origin:16px 16px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:isolate;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:32px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n              <button data-component=\"IconButton\" type=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\" tabindex=\"0\"\n                class=\"prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj\" data-loading=\"false\"\n                data-no-visuals=\"true\" data-size=\"medium\" data-variant=\"default\"\n                aria-describedby=\":rai:-loading-announcement\" aria-labelledby=\":rak:\" id=\":rai:\"\n                style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(246, 248, 250);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:32px;border-block-end-color:rgb(209, 217, 224);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgb(209, 217, 224);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgb(209, 217, 224);border-bottom-left-radius:0px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(209, 217, 224);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgb(209, 217, 224);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgb(209, 217, 224);border-left-style:solid;border-left-width:1px;border-right-color:rgb(209, 217, 224);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:0px;border-top-color:rgb(209, 217, 224);border-top-left-radius:0px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:rgba(31, 35, 40, 0.04) 0px 1px 0px 0px;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:8px;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:inline-grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:16px;grid-template-rows:16px;height:32px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:32px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:16px 16px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:8px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:16px 16px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:32px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><svg\n                  aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-triangle-down\" viewBox=\"0 0 16 16\"\n                  width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\"\n                  style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:16px;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:16px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:16px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:content-box;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:8px 8px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:8px 8px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:text-bottom;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:16px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                  <path\n                    d=\"m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z\"\n                    style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(89, 99, 110);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(89, 99, 110);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(89, 99, 110);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(89, 99, 110);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(89, 99, 110);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(89, 99, 110);border-left-style:none;border-left-width:0px;border-right-color:rgb(89, 99, 110);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(89, 99, 110);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(89, 99, 110);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(89, 99, 110);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(89, 99, 110);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:pointer;cx:0px;cy:0px;d:path(&quot;M 4.427 7.427 L 7.823 10.823 A 0.25 0.25 0 0 0 8.177 10.823 L 11.573 7.427 A 0.25 0.25 0 0 0 11.396 7 H 4.604 A 0.25 0.25 0 0 0 4.427 7.427 Z&quot;);direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(89, 99, 110);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(89, 99, 110);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:0px 0px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(89, 99, 110);text-decoration-color:rgb(89, 99, 110);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(89, 99, 110);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:0px 0px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(89, 99, 110);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(89, 99, 110);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">\n                  </path>\n                </svg></button><span class=\"prc-TooltipV2-Tooltip-cYMVY\" data-direction=\"s\" aria-hidden=\"true\"\n                id=\":rak:\" popover=\"auto\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(37, 41, 46);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:fit-content;border-block-end-color:rgb(255, 255, 255);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(255, 255, 255);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(255, 255, 255);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(255, 255, 255);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(255, 255, 255);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(255, 255, 255);border-left-style:none;border-left-width:0px;border-right-color:rgb(255, 255, 255);border-right-style:none;border-right-width:0px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(255, 255, 255);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(255, 255, 255);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(255, 255, 255);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(255, 255, 255);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:none;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:11px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:fit-content;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:max-content;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:16.5px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:auto;margin-block-start:auto;margin-bottom:auto;margin-inline-end:auto;margin-inline-start:auto;margin-left:auto;margin-right:auto;margin-top:auto;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:250px;max-width:250px;min-block-size:0px;min-height:0px;min-inline-size:0px;min-width:0px;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:0;order:0;orphans:2;outline-color:rgb(255, 255, 255);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:5.5px;padding-block-start:5.5px;padding-bottom:5.5px;padding-inline-end:8.25px;padding-inline-start:8.25px;padding-left:8.25px;padding-right:8.25px;padding-top:5.5px;paint-order:normal;perspective:none;perspective-origin:50% 50%;pointer-events:auto;position:absolute;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(255, 255, 255);text-decoration-color:rgb(255, 255, 255);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(255, 255, 255);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:50% 50%;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:max-content;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:subpixel-antialiased;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(255, 255, 255);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(255, 255, 255);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">More\n                options</span>\n            </div>\n          </div>\n        </div><span role=\"tooltip\" aria-label=\"Comment can not be empty\" id=\":ram:\" data-testid=\"save-button-tooltip\"\n          class=\"Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-w\"\n          style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:32px;border-block-end-color:rgb(31, 35, 40);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(31, 35, 40);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgb(31, 35, 40);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(31, 35, 40);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(31, 35, 40);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgb(31, 35, 40);border-left-style:none;border-left-width:0px;border-right-color:rgb(31, 35, 40);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgb(31, 35, 40);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:0px;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(31, 35, 40);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgb(31, 35, 40);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgb(31, 35, 40);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:auto;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:32px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:86.6875px;inset-block-end:0px;inset-block-start:0px;inset-inline-end:0px;inset-inline-start:0px;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:0px;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgb(31, 35, 40);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:43.3438px 16px;pointer-events:auto;position:relative;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:0px;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:start;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgb(31, 35, 40);text-decoration-color:rgb(31, 35, 40);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgb(31, 35, 40);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:0px;touch-action:auto;transform:none;transform-origin:43.3438px 16px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:auto;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:86.6875px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(31, 35, 40);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgb(31, 35, 40);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><button\n            type=\"button\" disabled=\"\" class=\"prc-Button-ButtonBase-c50BI\" data-loading=\"false\" data-no-visuals=\"true\"\n            data-size=\"medium\" data-variant=\"primary\" aria-describedby=\":ran:-loading-announcement\"\n            style=\"accent-color:auto;align-content:normal;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgb(149, 216, 166);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:32px;border-block-end-color:rgb(149, 216, 166);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgb(149, 216, 166);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgb(149, 216, 166);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom-style:solid;border-bottom-width:1px;border-collapse:separate;border-end-end-radius:6px;border-end-start-radius:6px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(149, 216, 166);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgb(149, 216, 166);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgb(149, 216, 166);border-left-style:solid;border-left-width:1px;border-right-color:rgb(149, 216, 166);border-right-style:solid;border-right-width:1px;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:rgb(149, 216, 166);border-top-left-radius:6px;border-top-right-radius:6px;border-top-style:solid;border-top-width:1px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgba(255, 255, 255, 0.8);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgba(255, 255, 255, 0.8);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:8px;column-rule-color:rgba(255, 255, 255, 0.8);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:not-allowed;cx:0px;cy:0px;d:none;direction:ltr;display:flex;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:32px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:86.6875px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:space-between;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0px;min-inline-size:max-content;min-width:max-content;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgba(255, 255, 255, 0.8);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:12px;padding-inline-start:12px;padding-left:12px;padding-right:12px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:43.3438px 16px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:8px;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgba(255, 255, 255, 0.8);text-decoration-color:rgba(255, 255, 255, 0.8);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgba(255, 255, 255, 0.8);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:43.3438px 16px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0.08s;transition-property:color, fill, background-color, border-color;transition-timing-function:cubic-bezier(0.65, 0, 0.35, 1);translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:86.6875px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgba(255, 255, 255, 0.8);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgba(255, 255, 255, 0.8);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><span\n              data-component=\"buttonContent\" data-align=\"center\" class=\"prc-Button-ButtonContent-HKbr-\"\n              style=\"accent-color:auto;align-content:center;align-items:center;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:20px;border-block-end-color:rgba(255, 255, 255, 0.8);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgba(255, 255, 255, 0.8);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgba(255, 255, 255, 0.8);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(255, 255, 255, 0.8);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgba(255, 255, 255, 0.8);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgba(255, 255, 255, 0.8);border-left-style:none;border-left-width:0px;border-right-color:rgba(255, 255, 255, 0.8);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgba(255, 255, 255, 0.8);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgba(255, 255, 255, 0.8);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgba(255, 255, 255, 0.8);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgba(255, 255, 255, 0.8);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:not-allowed;cx:0px;cy:0px;d:none;direction:ltr;display:grid;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:1;flex-shrink:0;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:&quot;leadingVisual text trailingVisual&quot;;grid-template-columns:0px 60.6875px 0px;grid-template-rows:20px;height:20px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:60.6875px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:center;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:21px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgba(255, 255, 255, 0.8);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:30.3438px 10px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgba(255, 255, 255, 0.8);text-decoration-color:rgba(255, 255, 255, 0.8);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgba(255, 255, 255, 0.8);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:30.3438px 10px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:60.6875px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgba(255, 255, 255, 0.8);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgba(255, 255, 255, 0.8);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\"><span\n                data-component=\"text\" class=\"prc-Button-Label-pTQ3x\"\n                style=\"accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;anchor-name:none;anchor-scope:none;animation-composition:replace;animation-delay:0s;animation-direction:normal;animation-duration:0s;animation-fill-mode:none;animation-iteration-count:1;animation-name:none;animation-play-state:running;animation-range-end:normal;animation-range-start:normal;animation-timeline:auto;animation-timing-function:ease;app-region:none;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0, 0, 0, 0);background-image:none;background-origin:padding-box;background-position:0% 0%;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:20px;border-block-end-color:rgba(255, 255, 255, 0.8);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgba(255, 255, 255, 0.8);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:rgba(255, 255, 255, 0.8);border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-bottom-style:none;border-bottom-width:0px;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgba(255, 255, 255, 0.8);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgba(255, 255, 255, 0.8);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:rgba(255, 255, 255, 0.8);border-left-style:none;border-left-width:0px;border-right-color:rgba(255, 255, 255, 0.8);border-right-style:none;border-right-width:0px;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:rgba(255, 255, 255, 0.8);border-top-left-radius:0px;border-top-right-radius:0px;border-top-style:none;border-top-width:0px;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:border-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgba(255, 255, 255, 0.8);clear:none;clip:auto;clip-path:none;clip-rule:nonzero;color:rgba(255, 255, 255, 0.8);color-interpolation:srgb;color-interpolation-filters:linearrgb;color-rendering:auto;column-count:auto;column-gap:normal;column-rule-color:rgba(255, 255, 255, 0.8);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;container-name:none;container-type:normal;content:normal;cursor:not-allowed;cx:0px;cy:0px;d:none;direction:ltr;display:block;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill:rgb(0, 0, 0);fill-opacity:1;fill-rule:nonzero;filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0, 0, 0);flood-opacity:1;font-family:-apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans&quot;, Helvetica, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;;font-kerning:auto;font-optical-sizing:auto;font-palette:normal;font-size:14px;font-size-adjust:none;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:500;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:text;grid-column-start:text;grid-row-end:text;grid-row-start:text;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:20px;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:60.6875px;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interactivity:auto;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255, 255, 255);line-break:auto;line-height:20px;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0px;margin-inline-end:0px;margin-inline-start:0px;margin-left:0px;margin-right:0px;margin-top:0px;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:rgba(255, 255, 255, 0.8);outline-offset:0px;outline-style:none;outline-width:0px;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:break-word;overflow-x:visible;overflow-y:visible;overlay:none;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0px;padding-inline-end:0px;padding-inline-start:0px;padding-left:0px;padding-right:0px;padding-top:0px;paint-order:normal;perspective:none;perspective-origin:30.3438px 10px;pointer-events:auto;position:static;position-anchor:auto;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:always;print-color-adjust:economy;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;speak:normal;stop-color:rgb(0, 0, 0);stop-opacity:1;stroke:none;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;tab-size:4;table-layout:auto;text-align:center;text-align-last:auto;text-anchor:start;text-box-edge:auto;text-box-trim:none;text-decoration:none solid rgba(255, 255, 255, 0.8);text-decoration-color:rgba(255, 255, 255, 0.8);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-emphasis-color:rgba(255, 255, 255, 0.8);text-emphasis-position:over;text-emphasis-style:none;text-indent:0px;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:100%;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:nowrap;text-wrap-style:auto;timeline-scope:none;top:auto;touch-action:auto;transform:none;transform-origin:30.3438px 10px;transform-style:flat;transition-behavior:normal;transition-delay:0s;transition-duration:0s;transition-property:all;transition-timing-function:ease;translate:none;unicode-bidi:normal;user-select:none;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;view-transition-class:none;view-transition-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:60.6875px;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1;-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-locale:&quot;en&quot;;-webkit-mask-box-image:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-rtl-ordering:logical;-webkit-tap-highlight-color:rgba(0, 0, 0, 0.18);-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgba(255, 255, 255, 0.8);-webkit-text-orientation:vertical-right;-webkit-text-security:none;-webkit-text-stroke-color:rgba(255, 255, 255, 0.8);-webkit-text-stroke-width:0px;-webkit-user-drag:auto;-webkit-user-modify:read-only;-webkit-writing-mode:horizontal-tb;\">Comment</span></span></button></span>\n      </div>\n    </footer>\n  </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "packages/chrome-plugin/tests/pages/lexical_webcomponent.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>Lexical Webcomponent Test</title>\n    <style>\n      body {\n        font-family: sans-serif;\n        padding: 2rem;\n      }\n      reddit-lexical-editor {\n        display: block;\n        max-width: 600px;\n      }\n      [data-lexical-editor=\"true\"] {\n        border: 1px solid #ccc;\n        padding: 1rem;\n        min-height: 150px;\n        border-radius: 8px;\n      }\n    </style>\n  </head>\n  <body>\n    <h1>Lexical Editor Inside Webcomponent</h1>\n    <reddit-lexical-editor></reddit-lexical-editor>\n    <section aria-live=\"polite\" id=\"lexical-mirror\" style=\"margin-top: 1rem; font-weight: bold;\"></section>\n\n    <script type=\"module\">\n      class RedditLexicalEditor extends HTMLElement {\n        constructor() {\n          super();\n          this._init();\n        }\n\n        _init() {\n          const editor = document.createElement('div');\n          editor.setAttribute('contenteditable', 'true');\n          editor.setAttribute('data-lexical-editor', 'true');\n          editor.textContent = 'This is an test';\n\n          const mirror = document.getElementById('lexical-mirror');\n          const syncMirror = () => {\n            if (mirror) mirror.textContent = editor.textContent ?? '';\n          };\n\n          // Simulates WhatsApp's Lexical: tracks cursor internally, ignores programmatic selection\n          let internalCursorPosition = 0;\n\n          editor.addEventListener('click', () => {\n            const sel = window.getSelection();\n            if (sel && sel.rangeCount > 0) {\n              const range = sel.getRangeAt(0);\n              const preRange = document.createRange();\n              preRange.selectNodeContents(editor);\n              preRange.setEnd(range.startContainer, range.startOffset);\n              internalCursorPosition = preRange.toString().length;\n            }\n          });\n\n          editor.addEventListener('beforeinput', (event) => {\n            if (\n              event.isTrusted === false &&\n              event.inputType === 'insertText' &&\n              typeof event.data === 'string'\n            ) {\n              event.preventDefault();\n              // Mimic Reddit's Lexical behaviour that applies the full change\n              // in response to synthetic beforeinput events emitted by our\n              // extension when a suggestion is accepted.\n              setTimeout(() => {\n                const currentText = editor.textContent ?? '';\n                const newText =\n                  currentText.slice(0, internalCursorPosition) +\n                  event.data +\n                  currentText.slice(internalCursorPosition);\n                editor.textContent = newText;\n                syncMirror();\n              }, 0);\n            }\n          });\n\n          editor.addEventListener('input', syncMirror);\n          editor.addEventListener('keyup', syncMirror);\n\n          syncMirror();\n\n          this.append(editor);\n        }\n      }\n\n      customElements.define('reddit-lexical-editor', RedditLexicalEditor);\n    </script>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/chrome-plugin/tests/pages/nested_elements.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <title>Textarea Ancestor Positioning Hierarchy Test</title>\n    <style>\n      html,\n      body {\n        height: 100%;\n        margin: 0;\n      }\n\n      #hgl-container {\n        position: fixed;\n        top: 50%;\n        left: 50%;\n        transform: translate(-50%, -50%);\n        width: 50vw;\n        height: 50vh;\n        z-index: 2147483647;\n        background: rgb(255, 255, 255);\n        color: rgb(0, 0, 0);\n        border: 1px solid #ccc;\n        padding: 0;\n        box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);\n        box-sizing: border-box;\n        display: flex;\n        flex-direction: column;\n        font-family: system-ui, -apple-system, sans-serif;\n      }\n\n      #hgl-titlebar {\n        background-color: #f0f0f0;\n        color: rgb(0, 0, 0);\n        padding: 8px 12px;\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        cursor: move;\n        user-select: none;\n        border-bottom: 1px solid #ccc;\n        font-size: 13px;\n        font-weight: 500;\n        min-height: 32px;\n        box-sizing: border-box;\n      }\n\n      #hgl-close {\n        background: none;\n        border: none;\n        cursor: pointer;\n        font-size: 20px;\n        padding: 0 4px;\n        color: rgb(0, 0, 0);\n        min-width: 32px;\n        min-height: 32px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex: 0 0 auto;\n      }\n\n      #hgl-wrapper {\n        flex: 1;\n        overflow: hidden;\n        padding: 4px;\n        box-sizing: border-box;\n        position: relative;\n      }\n\n      #hgl-textarea {\n        width: 100%;\n        height: 100%;\n        box-sizing: border-box;\n        border: none;\n        font-family: monospace;\n        font-size: 13px;\n        resize: none;\n        padding: 8px;\n        color: rgb(0, 0, 0);\n        background-color: rgb(255, 255, 255);\n      }\n\n      #hgl-resize {\n        position: absolute;\n        bottom: 0;\n        right: 0;\n        width: 16px;\n        height: 16px;\n        cursor: nwse-resize;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        font-size: 14px;\n        color: #999;\n        pointer-events: none;\n        user-select: none;\n      }\n    </style>\n  </head>\n  <body>\n    <div id=\"hgl-container\">\n      <div id=\"hgl-titlebar\">\n        <span>Layout test</span>\n        <button id=\"hgl-close\" type=\"button\" aria-label=\"Close\">✕</button>\n      </div>\n\n      <div id=\"hgl-wrapper\">\n        <textarea id=\"hgl-textarea\" spellcheck=\"false\">Textarea content…</textarea>\n        <div id=\"hgl-resize\">⋱</div>\n      </div>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/chrome-plugin/tests/pages/quill_simple.html",
    "content": "<!DOCTYPE html> <html class=\"wf-slabo27px-n4-active wf-robotoslab-n4-active wf-inconsolata-n4-active wf-ubuntumono-n4-active wf-active\" style><!--\n Page saved with SingleFile \n url: https://quilljs.com/ \n saved date: Tue Nov 25 2025 08:26:15 GMT-0700 (Mountain Standard Time)\n--><meta charset=utf-8><meta name=viewport content=\"width=device-width\"><meta name=twitter:site content=@quilljs><meta name=twitter:title content=\"Quill - Your powerful rich text editor\"><meta name=twitter:description content=\"Quill is a free, open source rich text editor built for the modern web.\"><meta name=twitter:image content=https://quilljs.com/assets/images/brand-asset.png><meta property=og:type content=website><meta property=og:url content=https://quilljs.com><meta property=og:image content=https://quilljs.com/assets/images/brand-asset.png><meta property=og:title content=\"Quill - Your powerful rich text editor\"><meta property=og:site_name content=Quill><title>Quill - Your powerful rich text editor</title><meta name=description content=\"Quill is a free, open source WYSIWYG editor built for the modern web. Completely customize it for any need with its modular architecture and expressive API.\"><meta name=next-head-count content=13><style>:root{--fa-font-solid:normal 900 1em/1\"Font Awesome 7 Free\";--fa-font-regular:normal 400 1em/1\"Font Awesome 7 Free\";--fa-font-light:normal 300 1em/1\"Font Awesome 7 Pro\";--fa-font-thin:normal 100 1em/1\"Font Awesome 7 Pro\";--fa-font-duotone:normal 900 1em/1\"Font Awesome 7 Duotone\";--fa-font-duotone-regular:normal 400 1em/1\"Font Awesome 7 Duotone\";--fa-font-duotone-light:normal 300 1em/1\"Font Awesome 7 Duotone\";--fa-font-duotone-thin:normal 100 1em/1\"Font Awesome 7 Duotone\";--fa-font-brands:normal 400 1em/1\"Font Awesome 7 Brands\";--fa-font-sharp-solid:normal 900 1em/1\"Font Awesome 7 Sharp\";--fa-font-sharp-regular:normal 400 1em/1\"Font Awesome 7 Sharp\";--fa-font-sharp-light:normal 300 1em/1\"Font Awesome 7 Sharp\";--fa-font-sharp-thin:normal 100 1em/1\"Font Awesome 7 Sharp\";--fa-font-sharp-duotone-solid:normal 900 1em/1\"Font Awesome 7 Sharp Duotone\";--fa-font-sharp-duotone-regular:normal 400 1em/1\"Font Awesome 7 Sharp Duotone\";--fa-font-sharp-duotone-light:normal 300 1em/1\"Font Awesome 7 Sharp Duotone\";--fa-font-sharp-duotone-thin:normal 100 1em/1\"Font Awesome 7 Sharp Duotone\";--fa-font-slab-regular:normal 400 1em/1\"Font Awesome 7 Slab\";--fa-font-slab-press-regular:normal 400 1em/1\"Font Awesome 7 Slab Press\";--fa-font-whiteboard-semibold:normal 600 1em/1\"Font Awesome 7 Whiteboard\";--fa-font-thumbprint-light:normal 300 1em/1\"Font Awesome 7 Thumbprint\";--fa-font-notdog-solid:normal 900 1em/1\"Font Awesome 7 Notdog\";--fa-font-notdog-duo-solid:normal 900 1em/1\"Font Awesome 7 Notdog Duo\";--fa-font-etch-solid:normal 900 1em/1\"Font Awesome 7 Etch\";--fa-font-jelly-regular:normal 400 1em/1\"Font Awesome 7 Jelly\";--fa-font-jelly-fill-regular:normal 400 1em/1\"Font Awesome 7 Jelly Fill\";--fa-font-jelly-duo-regular:normal 400 1em/1\"Font Awesome 7 Jelly Duo\";--fa-font-chisel-regular:normal 400 1em/1\"Font Awesome 7 Chisel\";--fa-font-utility-semibold:normal 600 1em/1\"Font Awesome 7 Utility\";--fa-font-utility-duo-semibold:normal 600 1em/1\"Font Awesome 7 Utility Duo\";--fa-font-utility-fill-semibold:normal 600 1em/1\"Font Awesome 7 Utility Fill\"}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1,1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,0.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,0.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-0.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,0.95)) translateY(0)}57%{transform:scale(1,1) translateY(var(--fa-bounce-rebound,-0.125em))}64%{transform:scale(1,1) translateY(0)}100%{transform:scale(1,1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,0.4)}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,0.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,100%{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}</style><style>@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:normal;font-weight:700;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:italic;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:\"KaTeX_SansSerif\";font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAA4oAA4AAAAAHbQAAA3TAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgRQIDgmcDBEICo1oijYBNgIkA14LMgAEIAWJAAeBHAyBHBvbGiMRdnO0IkRRkiYDgr9KsJ1NUAf2kILNxgUmgqIgq1P89vcbIcmsQbRps3vCcXdYOKSWEPEKgZgQkprQQsxIXUgq0DqpGKmIvrgkeVGtEQD9DzAO29fM9jYhxZEsL2FeURH2JN4MIcTdO049NCVdxQ/w9NrSYFEBKTDKpLKfNkCGDc1RwjZLQcm3vqJ2UW9Xfa3tgAHz6ivp6vgC2yD4/6352ndnN0X0TL7seypkjZlMsjmZnf0Mm5Q+JykRWQBKCVCVPbARPXWyQtb5VgLB6Biq7/Uixcj2WGqdI8tGSgkuRG+t910GKP2D7AQH0DB9FMDW/obJZ8giFI3Wg8Cvevz0M+5m0rTh7XDBlvo9Y4vm13EXmfttwI4mBo1EG15fxJhUiCLbiiyCf/ZA6MFAhg3pGIZGdGIVjtPn6UcMk9A/UUr9PhoNsCENw1APAq0gpH73e+M+0ueyHbabc3vkbcdtzcf/fiy+NxQEjf9ud/ELBHAXJ0nk4z+MXH2Ev/kWyV4k7SkvpPc9Qr38F6RPWnM9cN6DJ0AdD1BhtgABtmoRoFCvPsBAumNm6soZG2Gk5GyVTo2sJncSyp0jQTYoR6WDvTwaaEcHsxHfvuWhHA3a6bN7twRKtcGok6NsCi7jYRrM2jExsUFMxMQYuJbMhuWNOumEJy9hi29Dmg5zMp/A5+hhPG19j1vBrq8JTLr8ki5VLPmG/PynJHVul440bxg5xuymHUFPBshC+nA9I1FmwbRBTNHAcik3Oae0cxKoI3MOriM42UrPe51nsaGxJ+WfXubAsP84aabUlQSJ1IiE0iPETLUU4CATgfXSCSpuRFRmCGbO+wSpAnzaeaCYW1VNEysRtuXCEL1kUFUbbtMv3Tilt/1c11jt3Q5bbMa84cpWipp8Elw3MZhOHsOlwwVUQM3lAR35JiFQbaYCRnMF2lxAWoOg2gyoIV4PouX8HytNIfLhqpJtXB4vjiViUI8IJ7bkC4ikkQvKksnOTKICwnqWSZ9YS5f0WCxmpgjbIq7EJcM4aI2nmhLNY2JIUgOjXZFWBHb+x5oh6cwb0Tv1ackHdKi0I9OO2wE9aogIOn540CCCziyhN+IaejtgAONKznHlHyutPrHGwCx9S6B8kfS4Mfi4Eyv7OU730bT1SCBjt834cXsf43zVjPUqqJjgrjeGnBxSG4aYAKFuVbeCfkDIjAqMb6yLNIbCuvXhMH2/+k2vkNpkORhR59N1CkzoOENvneIosjYmuTxlhUzaGEJQ/iWqx4dmwpmKjrwTiTGTCVozNAYqk/zXOndWxuWSmJkQpJw3pK5KX6QrLt5LATMqpmPAQhkhK6PUjzHUn7E0gHE0kPE0iKkolgkUx9SZmVAdDgpffdyJKg3k7VmzYGCwVXGz/tXmkOIp+vcWs+EMuhhvN0h9uhfzWJziBQmCREGSIFmQIkgVpAnSBRmC//6hkLZwaVhwxlrJSOdqlFtOYxlau9F2QN5Y98xmIAsiM1HVp2VFX+DHHGg6Ecjh3vmqtidX3qHI2qycTk/iwxSt5UzTmEP92ZBnEWTk4Mx8Mpl78ZDokxg/KWb+Q0QkvdKVmq3TMW+RXEgrsziSAfNXFMhDc60N5N9jQzjfO0kBKpUZl0ZmwJ41j/B9Hz6wmRaJB84niNmQrzp9eSlQCDDzazGDdVi3P36VZQ+Jy4f9UBNp+3zTjqI4abaFAm+GShVaXlsGdF3FYzZcDI6cori4kMxUECl9IjJZpzkvitAoxKue+90pDMvcKRxLl53TmOKCmV/xRolNKSqqUxc6LStOETmFOiLZZptlZepcKiAzteG8PEdpnQpbOMNcMsR4RR2Bs0cKFEvSmIjAFcnarqwUL4lDhHmnVkwu1IwshbiCcgvOheZuYyOteufZZwlcTlLgnZ3o/WcYdzZHW/WGaqaVfmTZ1aWCceJjkbZqsfbkOtcFlUZM/jy+hXHDbaUobWqqXaeWobbLO99yG5N3U4wxco0rQGGcOLASFMXeJoham8M+/x6O2WywK2l4HGbq1CoUyC/IZikQhdq3SiuNrvAEj0AVu9x2x3lp/xWzahaxidezFVtdcb5uEnzyl0ZmYiuKI0exvCd4Xc9CV1KB0db00z92wDPde0kukbvZIWN6jUWFTmPIC/Y4UPCm8UfDTFZpZNon1qLFTkBhxzB+FjQRA2Q/YRJT8pQigslMaUpFyAG8TMlXigiqmAZX4xgijKjRlGpLE0GdplRfCaJo0JQaSxNBk6ZmMzcya0FmrcisDdn0Q3HI2sWSppYigmlM1XT/kLQZSNpMJG0WkjYbSZuDpM1F0uYhFc1HxU4m1QJjDK6iL0S5uSj5rgXc3RejEigtcRBtqYPQsiTskmO5vosV+q4VGIKbOkDg0jtRrq+Em1YloaTFar3EGr1EUC8R0kus1Uus00usL97ABr2BjXoDm/QGNhuWtMVBKOwg/i78lT7hBsAvDmwHc/ao3vmUbBmhjeYySZNWvGkfZAgISDSaDo1SVpzGDsAEkF8B+gEapViUoZgUWXcRIGFZNm6gWbAKk0bp0k1MHG9fLYtV4iS2SmLEQFARzRcnf9PUS0LVn05/J9MiRRBU3v2IrvW974v4N00L7ZMk0wXP1409CHo/an8zTRHD3eSJ6m8D4YMkZNl3M79sqeuAsr/m3f+8/yl7A50aiAEJgeBeMWzu7ui9UfUBCe2TIqZIoOd/3/udRBOQidQZUERzb2/VwZN1H/Sju82ew2H2Wfr6qvfVf3hqwDvAIpkQVFy4B9Pe9e4/XvPeceu7h3dvO56iJPf0+A6cqA2ip18ER+iFgggiuOkvj24bby0N9j2UHIkgqIt+sVgfodC4YghLSMjSZbH0VR/6dMDrYJeKHilKTemt6v6kvzvn3/RrdWtr0GoN/xL+Sex/cPYLUpepx9cz/D46UPU5KXgAQa+NDps1v6J3xP1i2HtaDB0M9aX2deA7SYff//+gUCovMmIK/qfsFcOk+4Y5ZN97XlG6zebqtMbKgeRFi51vnxTQYBUik2rS/Cn6PC8ADR8FGxsRPB82dzfND90gIcshOcYUkfjherBz53odpm6TP8txlwOZ71xmfHHOvq053qFF/MRlS3jP0ELudrf2OeN8DHvp6ZceLe8qKYvWz/7yp0u4dKPfli3CYq0O13Ih71mylJ80tOi10On8wi+F4+LWgDPeJ30msSQt9/vkmHq9/Lvo2b461mP801v3W4xTcs6CbvF9UDdrSt+A8OUbpSh55qAUFXWznBBfdeJ8a4d7ugT5tvxUza3h9m4H7ptTqiG4z0g5dc0X29OcGlhpGFMpQo9ytTS+NViZpNdvU4kWx+LKxNY10kQ1yqGXrhe4/1nvP7E+nd5A92TtaRplbHSqoIdOqtRWti+fkB5/n1+/VvCmz12pG1kpQWsfi1ftlBobm0bpngs16CHkbIwdLnParxtTV3QYRlfJ0KFskH7pdN/YDn+yRuSd7sNH3aO0DYPggk6uWuXrfOc+fa3VTxFVvKaNxHsiHmsXyCLIE5yuOeN3/Jdf8HBL/5M6shjyhxHx9BjB1O0+4NLOnjLLSxwO7ukN4jMbOIcD879KLSi6Pk61Oqm2377n8079PXEEQ7cy7OKEC9nbpet118fxweTafpt69x/Bt8UqGzNQt7aelpc44dn5cqhwf71+qKp/Zf/+a0zcizOUWpl/iBcSXip0pplkatCchoH5c5aUM8I7/dWxAej8WicPL1URFZ9BDJelUwEwTkGqUhgSlydVes95YdXvhh9Gfz/aeFWvgVb4tuLbcv4+wLdutVZv/cUonwBD/6eDlE0aSiKK/uoH3+J1wDE/jMVqY2ysGufN84oIXB0sPzy8ollX/LegY74DgJXJR57sn+VGza0x3DnuIgABFM15LmajjjsNlYj+JEZGbuRYcAMOWxFkPN2w6Wd46xo4gVWQR/X4lyI/R6K/YK0110GzudPRW7Y+UOBGTfNNzHeYT0fiH0taunBpq9HEW8OKSaBGj21L0MqenEmNRWBAWDWAk4CpNoEZJ2tTaPFgbQYj8HxtFilErs3BTRwT8uO1NXQaWfIotchmPkAF5mMBAliEmZiOGVgCG9LgRzpscMAOOwowlT3JhusdazXGSC/hxR3UlmWVwWHpOIKheqONvjyhSiTHIkVUco5bnji8m//zL7PKaT1Vl5I6UE609f+gkr6MZKVyKc7zJRmCahLsdlyA5fdQkRSan9LgnnLEyGSkaKJCJog0wAgvepWBt80+1yKln1bMVtCljfNWDueKLsWwaEbBSfSPTEmVRsUcYYMnEjcjeyCZzBXK9E9BYBXLKjOSpUDR+nEV3TFSUdQaz+ot98QxgXwx0GQ+EEUAKB2qZPkQQ0GqFD8UPFMqyaCHM24BZmSGic9EYMagKizOw9Hz50DMrDLrqqLkTAhplMictiCAx5S3BIUQdeJeLnBy2CNtMfz6cV4u8XKoFZQesbf9YZiIERiHjaNodDW6LgcirX/mPnJIkBGDUpTBhSa0EIr38D5hCIszhCM8URGBqImoWjpvpt1ebu/v3Gl3qJfMnNM+9V+kiRFyROTPHQWOcs1dNW94/ukKMPZBvDi55i5CttdeJz84DLngLqjcdwEZ87bFFR8CIG35OAkDVN6VRDZ7aq67NteYqZ2lpT8oYB2CytoBd6VuAx4WgiAsnuj3WohG+LugzXiQRDeM3XYXlULv4dp5VFYC)format(\"woff2\")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:\"0.16.9\"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .msupsub{text-align:left}.katex .mspace{display:inline-block}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .sizing.reset-size6.size1{font-size:.5em}.katex .sizing.reset-size6.size3{font-size:.7em}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex .stretchy:after,.katex .stretchy:before{content:\"\"}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .eqn-num:before{content:\"(\"counter(katexEqnNo)\")\";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:\"(\"counter(mmlEqnNo)\")\";counter-increment:mmlEqnNo}body{counter-reset:katexEqnNo mmlEqnNo}</style><style>/*!\n * Quill Editor v2.0.3\n * https://quilljs.com\n * Copyright (c) 2017-2024, Slab\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */.ql-editor li>.ql-ui:before{display:inline-block;margin-left:-1.5em;margin-right:.3em;text-align:right;white-space:nowrap;width:1.2em}.ql-editor li[data-list=bullet]>.ql-ui:before{content:\"•\"}.ql-editor li[data-list=checked]>.ql-ui:before{content:\"☑\"}.ql-editor li[data-list=unchecked]>.ql-ui:before{content:\"☐\"}.ql-editor li[data-list=ordered]>.ql-ui:before{content:counter(list-0,decimal)\". \"}.ql-editor li[data-list=ordered].ql-indent-1>.ql-ui:before{content:counter(list-1,lower-alpha)\". \"}.ql-editor li[data-list=ordered].ql-indent-2>.ql-ui:before{content:counter(list-2,lower-roman)\". \"}.ql-editor li[data-list=ordered].ql-indent-3>.ql-ui:before{content:counter(list-3,decimal)\". \"}.ql-editor li[data-list=ordered].ql-indent-4>.ql-ui:before{content:counter(list-4,lower-alpha)\". \"}.ql-editor li[data-list=ordered].ql-indent-5>.ql-ui:before{content:counter(list-5,lower-roman)\". \"}.ql-editor li[data-list=ordered].ql-indent-6>.ql-ui:before{content:counter(list-6,decimal)\". \"}.ql-editor li[data-list=ordered].ql-indent-7>.ql-ui:before{content:counter(list-7,lower-alpha)\". \"}.ql-editor li[data-list=ordered].ql-indent-8>.ql-ui:before{content:counter(list-8,lower-roman)\". \"}.ql-editor li[data-list=ordered].ql-indent-9>.ql-ui:before{content:counter(list-9,decimal)\". \"}.ql-editor li.ql-direction-rtl>.ql-ui:before{margin-left:.3em;margin-right:-1.5em;text-align:left}.ql-editor.ql-blank::before{color:rgba(0,0,0,0.6);content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}.ql-snow.ql-toolbar:after,.ql-snow .ql-toolbar:after{clear:both;content:\"\";display:table}.ql-snow.ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-snow.ql-toolbar button svg{float:left;height:100%}.ql-snow.ql-toolbar button:active:hover,.ql-snow .ql-toolbar button:active:hover{outline:none}.ql-snow.ql-toolbar button:hover,.ql-snow .ql-toolbar button:hover,.ql-snow.ql-toolbar button:focus,.ql-snow .ql-toolbar button:focus,.ql-snow.ql-toolbar .ql-picker-label:hover,.ql-snow .ql-toolbar .ql-picker-label:hover,.ql-snow.ql-toolbar .ql-picker-item:hover,.ql-snow .ql-toolbar .ql-picker-item:hover{color:#06c}.ql-snow.ql-toolbar button:hover .ql-fill,.ql-snow .ql-toolbar button:hover .ql-fill,.ql-snow.ql-toolbar button:focus .ql-fill,.ql-snow .ql-toolbar button:focus .ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill{fill:#06c}.ql-snow.ql-toolbar button:hover .ql-stroke,.ql-snow .ql-toolbar button:hover .ql-stroke,.ql-snow.ql-toolbar button:focus .ql-stroke,.ql-snow .ql-toolbar button:focus .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow.ql-toolbar button:hover .ql-stroke-miter,.ql-snow .ql-toolbar button:hover .ql-stroke-miter,.ql-snow.ql-toolbar button:focus .ql-stroke-miter,.ql-snow .ql-toolbar button:focus .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter{stroke:#06c}@media (pointer:coarse){.ql-snow.ql-toolbar button:hover:not(.ql-active),.ql-snow .ql-toolbar button:hover:not(.ql-active){color:#444}.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#444}.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#444}}.ql-snow *{box-sizing:border-box}.ql-snow .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-snow .ql-formats{display:inline-block;vertical-align:middle}.ql-snow .ql-formats:after{clear:both;content:\"\";display:table}.ql-snow .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-snow .ql-fill,.ql-snow .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-even{fill-rule:evenodd}.ql-snow .ql-thin,.ql-snow .ql-stroke.ql-thin{stroke-width:1}.ql-snow .ql-transparent{opacity:.4}.ql-snow .ql-direction svg:last-child{display:none}.ql-snow .ql-editor a{text-decoration:underline}.ql-snow .ql-editor .ql-code-block-container{border-radius:3px}.ql-snow .ql-editor .ql-code-block-container{margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-snow .ql-editor .ql-code-block-container{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-snow .ql-picker{color:#444;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-snow .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-snow .ql-picker-label::before{display:inline-block;line-height:22px}.ql-snow .ql-picker-options{background-color:#fff;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-snow .ql-color-picker,.ql-snow .ql-icon-picker{width:28px}.ql-snow .ql-color-picker .ql-picker-label,.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-label svg,.ql-snow .ql-icon-picker .ql-picker-label svg{right:4px}.ql-snow .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-snow .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=\"\"])::before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=\"\"])::before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=\"\"])::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=\"\"])::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=\"\"])::before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=\"\"])::before{content:attr(data-label)}.ql-snow .ql-picker.ql-header .ql-picker-label::before,.ql-snow .ql-picker.ql-header .ql-picker-item::before{content:\"Normal\"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"1\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before{content:\"Heading 1\"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"2\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before{content:\"Heading 2\"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"3\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before{content:\"Heading 3\"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"4\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before{content:\"Heading 4\"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"5\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before{content:\"Heading 5\"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"6\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before{content:\"Heading 6\"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before{font-size:2em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before{font-size:1.5em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before{font-size:1.17em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before{font-size:1em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before{font-size:.83em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before{font-size:.67em}.ql-snow .ql-picker.ql-font .ql-picker-label::before,.ql-snow .ql-picker.ql-font .ql-picker-item::before{content:\"Sans Serif\"}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before{content:\"Serif\"}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before{content:\"Monospace\"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before{font-family:Georgia,Times New Roman,serif}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before{font-family:Monaco,Courier New,monospace}.ql-snow .ql-picker.ql-size{width:98px}.ql-snow .ql-picker.ql-size .ql-picker-label::before,.ql-snow .ql-picker.ql-size .ql-picker-item::before{content:\"Normal\"}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before{content:\"Small\"}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before{content:\"Large\"}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before{content:\"Huge\"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before{font-size:10px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before{font-size:18px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before{font-size:32px}.ql-toolbar.ql-snow{box-sizing:border-box;padding:8px}.ql-toolbar.ql-snow .ql-formats{margin-right:15px}.ql-toolbar.ql-snow .ql-picker-label{border:1px solid transparent}.ql-toolbar.ql-snow .ql-picker-options{border:1px solid transparent;box-shadow:rgba(0,0,0,0.2)0 2px 8px}.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover{border-color:#000}.ql-toolbar.ql-snow+.ql-container.ql-snow{border-top:0}.ql-snow .ql-tooltip{background-color:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ddd;color:#444;padding:5px 12px;white-space:nowrap}.ql-snow .ql-tooltip::before{content:\"Visit URL:\";line-height:26px;margin-right:8px}.ql-snow .ql-tooltip a.ql-action::after{border-right:1px solid #ccc;content:\"Edit\";margin-left:16px;padding-right:8px}.ql-snow .ql-tooltip a.ql-remove::before{content:\"Remove\";margin-left:8px}.ql-snow .ql-tooltip.ql-editing a.ql-action::after{border-right:0;content:\"Save\";padding-right:0}.ql-snow .ql-tooltip[data-mode=link]::before{content:\"Enter link:\"}.ql-snow .ql-tooltip[data-mode=formula]::before{content:\"Enter formula:\"}.ql-snow .ql-tooltip[data-mode=video]::before{content:\"Enter video:\"}.ql-snow a{color:#06c}</style><style>/*!\n * Quill Editor v2.0.3\n * https://quilljs.com\n * Copyright (c) 2017-2024, Slab\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-editor{box-sizing:border-box;counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;line-height:1.42;height:100%;outline:none;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor>*{cursor:text}.ql-editor p,.ql-editor h1,.ql-editor h2{margin:0;padding:0}@supports (counter-set:none){.ql-editor p,.ql-editor h1,.ql-editor h2{counter-set:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor p,.ql-editor h1,.ql-editor h2{counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li>.ql-ui:before{display:inline-block;margin-left:-1.5em;margin-right:.3em;text-align:right;white-space:nowrap;width:1.2em}.ql-editor li[data-list=bullet]>.ql-ui:before{content:\"•\"}.ql-editor li[data-list=checked]>.ql-ui:before{content:\"☑\"}.ql-editor li[data-list=unchecked]>.ql-ui:before{content:\"☐\"}.ql-editor li[data-list=ordered]>.ql-ui:before{content:counter(list-0,decimal)\". \"}.ql-editor li[data-list=ordered].ql-indent-1>.ql-ui:before{content:counter(list-1,lower-alpha)\". \"}.ql-editor li[data-list=ordered].ql-indent-2>.ql-ui:before{content:counter(list-2,lower-roman)\". \"}.ql-editor li[data-list=ordered].ql-indent-3>.ql-ui:before{content:counter(list-3,decimal)\". \"}.ql-editor li[data-list=ordered].ql-indent-4>.ql-ui:before{content:counter(list-4,lower-alpha)\". \"}.ql-editor li[data-list=ordered].ql-indent-5>.ql-ui:before{content:counter(list-5,lower-roman)\". \"}.ql-editor li[data-list=ordered].ql-indent-6>.ql-ui:before{content:counter(list-6,decimal)\". \"}.ql-editor li[data-list=ordered].ql-indent-7>.ql-ui:before{content:counter(list-7,lower-alpha)\". \"}.ql-editor li[data-list=ordered].ql-indent-8>.ql-ui:before{content:counter(list-8,lower-roman)\". \"}.ql-editor li[data-list=ordered].ql-indent-9>.ql-ui:before{content:counter(list-9,decimal)\". \"}.ql-editor li.ql-direction-rtl>.ql-ui:before{margin-left:.3em;margin-right:-1.5em;text-align:left}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-ui{position:absolute}.ql-editor.ql-blank::before{color:rgba(0,0,0,0.6);content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}.ql-bubble.ql-toolbar:after,.ql-bubble .ql-toolbar:after{clear:both;content:\"\";display:table}.ql-bubble.ql-toolbar button:active:hover,.ql-bubble .ql-toolbar button:active:hover{outline:none}.ql-bubble.ql-toolbar button:hover,.ql-bubble .ql-toolbar button:hover,.ql-bubble.ql-toolbar button:focus,.ql-bubble .ql-toolbar button:focus,.ql-bubble.ql-toolbar .ql-picker-label:hover,.ql-bubble .ql-toolbar .ql-picker-label:hover,.ql-bubble.ql-toolbar .ql-picker-item:hover,.ql-bubble .ql-toolbar .ql-picker-item:hover{color:#fff}.ql-bubble.ql-toolbar button:hover .ql-fill,.ql-bubble .ql-toolbar button:hover .ql-fill,.ql-bubble.ql-toolbar button:focus .ql-fill,.ql-bubble .ql-toolbar button:focus .ql-fill,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill{fill:#fff}.ql-bubble.ql-toolbar button:hover .ql-stroke,.ql-bubble .ql-toolbar button:hover .ql-stroke,.ql-bubble.ql-toolbar button:focus .ql-stroke,.ql-bubble .ql-toolbar button:focus .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-bubble.ql-toolbar button:hover .ql-stroke-miter,.ql-bubble .ql-toolbar button:hover .ql-stroke-miter,.ql-bubble.ql-toolbar button:focus .ql-stroke-miter,.ql-bubble .ql-toolbar button:focus .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter{stroke:#fff}@media (pointer:coarse){.ql-bubble.ql-toolbar button:hover:not(.ql-active),.ql-bubble .ql-toolbar button:hover:not(.ql-active){color:#ccc}.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#ccc}.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#ccc}}.ql-bubble{box-sizing:border-box}.ql-bubble *{box-sizing:border-box}.ql-bubble .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-bubble .ql-formats:after{clear:both;content:\"\";display:table}.ql-bubble .ql-editor a{text-decoration:underline}.ql-bubble .ql-editor .ql-code-block-container{border-radius:3px}.ql-bubble .ql-editor .ql-code-block-container{margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-bubble .ql-editor .ql-code-block-container{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-bubble .ql-picker-label::before{display:inline-block;line-height:22px}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=\"\"])::before,.ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=\"\"])::before,.ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=\"\"])::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=\"\"])::before,.ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=\"\"])::before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=\"\"])::before{content:attr(data-label)}.ql-bubble .ql-picker.ql-header .ql-picker-label::before,.ql-bubble .ql-picker.ql-header .ql-picker-item::before{content:\"Normal\"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"1\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before{content:\"Heading 1\"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"2\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before{content:\"Heading 2\"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"3\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before{content:\"Heading 3\"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"4\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before{content:\"Heading 4\"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"5\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before{content:\"Heading 5\"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"6\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before{content:\"Heading 6\"}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before{font-size:2em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before{font-size:1.5em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before{font-size:1.17em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before{font-size:1em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before{font-size:.83em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before{font-size:.67em}.ql-bubble .ql-picker.ql-font .ql-picker-label::before,.ql-bubble .ql-picker.ql-font .ql-picker-item::before{content:\"Sans Serif\"}.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before{content:\"Serif\"}.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before{content:\"Monospace\"}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before{font-family:Georgia,Times New Roman,serif}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before{font-family:Monaco,Courier New,monospace}.ql-bubble .ql-picker.ql-size .ql-picker-label::before,.ql-bubble .ql-picker.ql-size .ql-picker-item::before{content:\"Normal\"}.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]::before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before{content:\"Small\"}.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]::before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before{content:\"Large\"}.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before{content:\"Huge\"}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before{font-size:10px}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before{font-size:18px}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before{font-size:32px}.ql-code-block-container{position:relative}.ql-code-block-container .ql-ui{right:5px;top:5px}.ql-bubble .ql-color-picker .ql-picker-item:hover{border-color:#fff}.ql-bubble .ql-tooltip{background-color:#444;border-radius:25px;color:#fff}.ql-bubble .ql-tooltip-editor a:before{color:#ccc;content:\"×\";font-size:16px;font-weight:bold}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close){position:relative;white-space:nowrap}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close)::before{background-color:#444;border-radius:15px;top:-5px;font-size:12px;color:#fff;content:attr(href);font-weight:normal;overflow:hidden;padding:5px 15px;text-decoration:none;z-index:1}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close)::after{border-top:6px solid #444;border-left:6px solid transparent;border-right:6px solid transparent;top:0;content:\" \";height:0;width:0}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close)::before,.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close)::after{left:0;margin-left:50%;position:absolute;transform:translate(-50%,-100%);transition:visibility 0s ease 200ms;visibility:hidden}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close):hover::before,.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close):hover::after{visibility:visible}</style><style>/*! @docsearch/css 3.9.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0#555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0#d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0-2px 0 0#cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0-2px 0 0#cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0-1px 0 0#e0e3e8,0-3px 6px 0 rgba(69,98,155,.12)}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button-Placeholder{padding:0 12px 0 6px}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;top:-1px;transition-duration:.1s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}@media (prefers-reduced-motion){.DocSearch-Button-Key{transition:none}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}</style><style>.hljs-comment{color:#5c6370;font-style:italic}.hljs-keyword{color:#c678dd}.hljs-string{color:#98c379}.hljs-attr{color:#d19a66}.hljs-title{color:#61aeee}</style><style>.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input::-webkit-input-placeholder{color:#aaa}.searchbox__input::-ms-input-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:\"\"}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__reset:focus{outline:0}@-webkit-keyframes sbx-reset-in{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes sbx-reset-in{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:\"\";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:\"\";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:\"\";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:\"|\"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url(data:image/svg+xml;utf8,<svg\\ width=\\\"10\\\"\\ height=\\\"10\\\"\\ viewBox=\\\"0\\ 0\\ 20\\ 38\\\"\\ xmlns=\\\"http://www.w3.org/2000/svg\\\"><path\\ d=\\\"M1.49\\ 4.31l14\\ 16.126.002-2.624-14\\ 16.074-1.314\\ 1.51\\ 3.017\\ 2.626\\ 1.313-1.508\\ 14-16.075\\ 1.142-1.313-1.14-1.313-14-16.125L3.2.18.18\\ 2.8l1.31\\ 1.51z\\\"\\ fill-rule=\\\"evenodd\\\"\\ fill=\\\"%231D3657\\\"\\ \\/><\\/svg>);content:\"\";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:\"#\";font-weight:700;color:#458ee1;display:inline-block}</style><style id=sandpack>@media{@keyframes sp-k-eyOShd{0%{opacity:0}100%{opacity:1}}@keyframes sp-k-iOHdLQ{0%{transform:rotateX(-25.5deg) rotateY(45deg)}100%{transform:rotateX(-25.5deg) rotateY(405deg)}}}@media{.sp-c-bxeRRt:hover:not(:disabled,[data-active=\"true\"]){color:var(--sp-colors-hover)}}</style><style>@keyframes rt-fade-in{0%{opacity:0}to{opacity:1}}@keyframes rt-fade-out{0%{opacity:1}to{opacity:0}}@keyframes rt-slide-from-top{0%{transform:translateY(4px) scale(.97)}to{transform:translateY(0) scale(1)}}@keyframes rt-slide-to-top{0%{transform:translateY(0) scale(1)}to{transform:translateY(4px) scale(.97)}}@keyframes rt-slide-from-bottom{0%{transform:translateY(-4px) scale(.97)}to{transform:translateY(0) scale(1)}}@keyframes rt-slide-to-bottom{0%{transform:translateY(0) scale(1)}to{transform:translateY(-4px) scale(.97)}}@keyframes rt-slide-from-left{0%{transform:translateX(4px) scale(.97)}to{transform:translateX(0) scale(1)}}@keyframes rt-slide-to-left{0%{transform:translateX(0) scale(1)}to{transform:translateX(4px) scale(.97)}}@keyframes rt-slide-from-right{0%{transform:translateX(-4px) scale(.97)}to{transform:translateX(0) scale(1)}}@keyframes rt-slide-to-right{0%{transform:translateX(0) scale(1)}to{transform:translateX(-4px) scale(.97)}}.radix-themes:where([data-is-root-theme=true]){position:relative;z-index:0}:root{--tomato-1:#fffcfc;--tomato-2:#fff8f7;--tomato-3:#feebe7;--tomato-4:#ffdcd3;--tomato-5:#ffcdc2;--tomato-6:#fdbdaf;--tomato-7:#f5a898;--tomato-8:#ec8e7b;--tomato-9:#e54d2e;--tomato-10:#dd4425;--tomato-11:#d13415;--tomato-12:#5c271f;--tomato-a1:#ff000003;--tomato-a2:#ff200008;--tomato-a3:#f52b0018;--tomato-a4:#ff35002c;--tomato-a5:#ff2e003d;--tomato-a6:#f92d0050;--tomato-a7:#e7280067;--tomato-a8:#db250084;--tomato-a9:#df2600d1;--tomato-a10:#d72400da;--tomato-a11:#cd2200ea;--tomato-a12:#460900e0;--red-1:#fffcfc;--red-2:#fff7f7;--red-3:#feebec;--red-4:#ffdbdc;--red-5:#ffcdce;--red-6:#fdbdbe;--red-7:#f4a9aa;--red-8:#eb8e90;--red-9:#e5484d;--red-10:#dc3e42;--red-11:#ce2c31;--red-12:#641723;--red-a1:#ff000003;--red-a2:#ff000008;--red-a3:#f3000d14;--red-a4:#ff000824;--red-a5:#ff000632;--red-a6:#f8000442;--red-a7:#df000356;--red-a8:#d2000571;--red-a9:#db0007b7;--red-a10:#d10005c1;--red-a11:#c40006d3;--red-a12:#55000de8;--ruby-1:#fffcfd;--ruby-2:#fff7f8;--ruby-3:#feeaed;--ruby-4:#ffdce1;--ruby-5:#ffced6;--ruby-6:#f8bfc8;--ruby-7:#efacb8;--ruby-8:#e592a3;--ruby-9:#e54666;--ruby-10:#dc3b5d;--ruby-11:#ca244d;--ruby-12:#64172b;--ruby-a1:#ff005503;--ruby-a2:#ff002008;--ruby-a3:#f3002515;--ruby-a4:#ff002523;--ruby-a5:#ff002a31;--ruby-a6:#e4002440;--ruby-a7:#ce002553;--ruby-a8:#c300286d;--ruby-a9:#db002cb9;--ruby-a10:#d2002cc4;--ruby-a11:#c10030db;--ruby-a12:#550016e8;--crimson-1:#fffcfd;--crimson-2:#fef7f9;--crimson-3:#ffe9f0;--crimson-4:#fedce7;--crimson-5:#facedd;--crimson-6:#f3bed1;--crimson-7:#eaacc3;--crimson-8:#e093b2;--crimson-9:#e93d82;--crimson-10:#df3478;--crimson-11:#cb1d63;--crimson-12:#621639;--crimson-a1:#ff005503;--crimson-a2:#e0004008;--crimson-a3:#ff005216;--crimson-a4:#f8005123;--crimson-a5:#e5004f31;--crimson-a6:#d0004b41;--crimson-a7:#bf004753;--crimson-a8:#b6004a6c;--crimson-a9:#e2005bc2;--crimson-a10:#d70056cb;--crimson-a11:#c4004fe2;--crimson-a12:#530026e9;--pink-1:#fffcfe;--pink-2:#fef7fb;--pink-3:#fee9f5;--pink-4:#fbdcef;--pink-5:#f6cee7;--pink-6:#efbfdd;--pink-7:#e7acd0;--pink-8:#dd93c2;--pink-9:#d6409f;--pink-10:#cf3897;--pink-11:#c2298a;--pink-12:#651249;--pink-a1:#ff00aa03;--pink-a2:#e0008008;--pink-a3:#f4008c16;--pink-a4:#e2008b23;--pink-a5:#d1008331;--pink-a6:#c0007840;--pink-a7:#b6006f53;--pink-a8:#af006f6c;--pink-a9:#c8007fbf;--pink-a10:#c2007ac7;--pink-a11:#b60074d6;--pink-a12:#59003bed;--plum-1:#fefcff;--plum-2:#fdf7fd;--plum-3:#fbebfb;--plum-4:#f7def8;--plum-5:#f2d1f3;--plum-6:#e9c2ec;--plum-7:#deade3;--plum-8:#cf91d8;--plum-9:#ab4aba;--plum-10:#a144af;--plum-11:#953ea3;--plum-12:#53195d;--plum-a1:#aa00ff03;--plum-a2:#c000c008;--plum-a3:#cc00cc14;--plum-a4:#c200c921;--plum-a5:#b700bd2e;--plum-a6:#a400b03d;--plum-a7:#9900a852;--plum-a8:#9000a56e;--plum-a9:#89009eb5;--plum-a10:#7f0092bb;--plum-a11:#730086c1;--plum-a12:#40004be6;--purple-1:#fefcfe;--purple-2:#fbf7fe;--purple-3:#f7edfe;--purple-4:#f2e2fc;--purple-5:#ead5f9;--purple-6:#e0c4f4;--purple-7:#d1afec;--purple-8:#be93e4;--purple-9:#8e4ec6;--purple-10:#8347b9;--purple-11:#8145b5;--purple-12:#402060;--purple-a1:#aa00aa03;--purple-a2:#8000e008;--purple-a3:#8e00f112;--purple-a4:#8d00e51d;--purple-a5:#8000db2a;--purple-a6:#7a01d03b;--purple-a7:#6d00c350;--purple-a8:#6600c06c;--purple-a9:#5c00adb1;--purple-a10:#53009eb8;--purple-a11:#52009aba;--purple-a12:#250049df;--violet-1:#fdfcfe;--violet-2:#faf8ff;--violet-3:#f4f0fe;--violet-4:#ebe4ff;--violet-5:#e1d9ff;--violet-6:#d4cafe;--violet-7:#c2b5f5;--violet-8:#aa99ec;--violet-9:#6e56cf;--violet-10:#654dc4;--violet-11:#6550b9;--violet-12:#2f265f;--violet-a1:#5500aa03;--violet-a2:#4900ff07;--violet-a3:#4400ee0f;--violet-a4:#4300ff1b;--violet-a5:#3600ff26;--violet-a6:#3100fb35;--violet-a7:#2d01dd4a;--violet-a8:#2b00d066;--violet-a9:#2400b7a9;--violet-a10:#2300abb2;--violet-a11:#1f0099af;--violet-a12:#0b0043d9;--iris-1:#fdfdff;--iris-2:#f8f8ff;--iris-3:#f0f1fe;--iris-4:#e6e7ff;--iris-5:#dadcff;--iris-6:#cbcdff;--iris-7:#b8baf8;--iris-8:#9b9ef0;--iris-9:#5b5bd6;--iris-10:#5151cd;--iris-11:#5753c6;--iris-12:#272962;--iris-a1:#0000ff02;--iris-a2:#0000ff07;--iris-a3:#0011ee0f;--iris-a4:#000bff19;--iris-a5:#000eff25;--iris-a6:#000aff34;--iris-a7:#0008e647;--iris-a8:#0008d964;--iris-a9:#0000c0a4;--iris-a10:#0000b6ae;--iris-a11:#0600abac;--iris-a12:#000246d8;--indigo-1:#fdfdfe;--indigo-2:#f7f9ff;--indigo-3:#edf2fe;--indigo-4:#e1e9ff;--indigo-5:#d2deff;--indigo-6:#c1d0ff;--indigo-7:#abbdf9;--indigo-8:#8da4ef;--indigo-9:#3e63dd;--indigo-10:#3358d4;--indigo-11:#3a5bc7;--indigo-12:#1f2d5c;--indigo-a1:#00008002;--indigo-a2:#0040ff08;--indigo-a3:#0047f112;--indigo-a4:#0044ff1e;--indigo-a5:#0044ff2d;--indigo-a6:#003eff3e;--indigo-a7:#0037ed54;--indigo-a8:#0034dc72;--indigo-a9:#0031d2c1;--indigo-a10:#002ec9cc;--indigo-a11:#002bb7c5;--indigo-a12:#001046e0;--blue-1:#fbfdff;--blue-2:#f4faff;--blue-3:#e6f4fe;--blue-4:#d5efff;--blue-5:#c2e5ff;--blue-6:#acd8fc;--blue-7:#8ec8f6;--blue-8:#5eb1ef;--blue-9:#0090ff;--blue-10:#0588f0;--blue-11:#0d74ce;--blue-12:#113264;--blue-a1:#0080ff04;--blue-a2:#008cff0b;--blue-a3:#008ff519;--blue-a4:#009eff2a;--blue-a5:#0093ff3d;--blue-a6:#0088f653;--blue-a7:#0083eb71;--blue-a8:#0084e6a1;--blue-a9:#0090ff;--blue-a10:#0086f0fa;--blue-a11:#006dcbf2;--blue-a12:#002359ee;--cyan-1:#fafdfe;--cyan-2:#f2fafb;--cyan-3:#def7f9;--cyan-4:#caf1f6;--cyan-5:#b5e9f0;--cyan-6:#9ddde7;--cyan-7:#7dcedc;--cyan-8:#3db9cf;--cyan-9:#00a2c7;--cyan-10:#0797b9;--cyan-11:#107d98;--cyan-12:#0d3c48;--cyan-a1:#0099cc05;--cyan-a2:#009db10d;--cyan-a3:#00c2d121;--cyan-a4:#00bcd435;--cyan-a5:#01b4cc4a;--cyan-a6:#00a7c162;--cyan-a7:#009fbb82;--cyan-a8:#00a3c0c2;--cyan-a9:#00a2c7;--cyan-a10:#0094b7f8;--cyan-a11:#007491ef;--cyan-a12:#00323ef2;--teal-1:#fafefd;--teal-2:#f3fbf9;--teal-3:#e0f8f3;--teal-4:#ccf3ea;--teal-5:#b8eae0;--teal-6:#a1ded2;--teal-7:#83cdc1;--teal-8:#53b9ab;--teal-9:#12a594;--teal-10:#0d9b8a;--teal-11:#008573;--teal-12:#0d3d38;--teal-a1:#00cc9905;--teal-a2:#00aa800c;--teal-a3:#00c69d1f;--teal-a4:#00c39633;--teal-a5:#00b49047;--teal-a6:#00a6855e;--teal-a7:#0099807c;--teal-a8:#009783ac;--teal-a9:#009e8ced;--teal-a10:#009684f2;--teal-a11:#008573;--teal-a12:#00332df2;--jade-1:#fbfefd;--jade-2:#f4fbf7;--jade-3:#e6f7ed;--jade-4:#d6f1e3;--jade-5:#c3e9d7;--jade-6:#acdec8;--jade-7:#8bceb6;--jade-8:#56ba9f;--jade-9:#29a383;--jade-10:#26997b;--jade-11:#208368;--jade-12:#1d3b31;--jade-a1:#00c08004;--jade-a2:#00a3460b;--jade-a3:#00ae4819;--jade-a4:#00a85129;--jade-a5:#00a2553c;--jade-a6:#009a5753;--jade-a7:#00945f74;--jade-a8:#00976ea9;--jade-a9:#00916bd6;--jade-a10:#008764d9;--jade-a11:#007152df;--jade-a12:#002217e2;--green-1:#fbfefc;--green-2:#f4fbf6;--green-3:#e6f6eb;--green-4:#d6f1df;--green-5:#c4e8d1;--green-6:#adddc0;--green-7:#8eceaa;--green-8:#5bb98b;--green-9:#30a46c;--green-10:#2b9a66;--green-11:#218358;--green-12:#193b2d;--green-a1:#00c04004;--green-a2:#00a32f0b;--green-a3:#00a43319;--green-a4:#00a83829;--green-a5:#019c393b;--green-a6:#00963c52;--green-a7:#00914071;--green-a8:#00924ba4;--green-a9:#008f4acf;--green-a10:#008647d4;--green-a11:#00713fde;--green-a12:#002616e6;--grass-1:#fbfefb;--grass-2:#f5fbf5;--grass-3:#e9f6e9;--grass-4:#daf1db;--grass-5:#c9e8ca;--grass-6:#b2ddb5;--grass-7:#94ce9a;--grass-8:#65ba74;--grass-9:#46a758;--grass-10:#3e9b4f;--grass-11:#2a7e3b;--grass-12:#203c25;--grass-a1:#00c00004;--grass-a2:#0099000a;--grass-a3:#00970016;--grass-a4:#009f0725;--grass-a5:#00930536;--grass-a6:#008f0a4d;--grass-a7:#018b0f6b;--grass-a8:#008d199a;--grass-a9:#008619b9;--grass-a10:#007b17c1;--grass-a11:#006514d5;--grass-a12:#002006df;--orange-1:#fefcfb;--orange-2:#fff7ed;--orange-3:#ffefd6;--orange-4:#ffdfb5;--orange-5:#ffd19a;--orange-6:#ffc182;--orange-7:#f5ae73;--orange-8:#ec9455;--orange-9:#f76b15;--orange-10:#ef5f00;--orange-11:#cc4e00;--orange-12:#582d1d;--orange-a1:#c0400004;--orange-a2:#ff8e0012;--orange-a3:#ff9c0029;--orange-a4:#ff91014a;--orange-a5:#ff8b0065;--orange-a6:#ff81007d;--orange-a7:#ed6c008c;--orange-a8:#e35f00aa;--orange-a9:#f65e00ea;--orange-a10:#ef5f00;--orange-a11:#cc4e00;--orange-a12:#431200e2;--brown-1:#fefdfc;--brown-2:#fcf9f6;--brown-3:#f6eee7;--brown-4:#f0e4d9;--brown-5:#ebdaca;--brown-6:#e4cdb7;--brown-7:#dcbc9f;--brown-8:#cea37e;--brown-9:#ad7f58;--brown-10:#a07553;--brown-11:#815e46;--brown-12:#3e332e;--brown-a1:#aa550003;--brown-a2:#aa550009;--brown-a3:#a04b0018;--brown-a4:#9b4a0026;--brown-a5:#9f4d0035;--brown-a6:#a04e0048;--brown-a7:#a34e0060;--brown-a8:#9f4a0081;--brown-a9:#823c00a7;--brown-a10:#723300ac;--brown-a11:#522100b9;--brown-a12:#140600d1;--sky-1:#f9feff;--sky-2:#f1fafd;--sky-3:#e1f6fd;--sky-4:#d1f0fa;--sky-5:#bee7f5;--sky-6:#a9daed;--sky-7:#8dcae3;--sky-8:#60b3d7;--sky-9:#7ce2fe;--sky-10:#74daf8;--sky-11:#00749e;--sky-12:#1d3e56;--sky-a1:#00d5ff06;--sky-a2:#00a4db0e;--sky-a3:#00b3ee1e;--sky-a4:#00ace42e;--sky-a5:#00a1d841;--sky-a6:#0092ca56;--sky-a7:#0089c172;--sky-a8:#0085bf9f;--sky-a9:#00c7fe83;--sky-a10:#00bcf38b;--sky-a11:#00749e;--sky-a12:#002540e2;--mint-1:#f9fefd;--mint-2:#f2fbf9;--mint-3:#ddf9f2;--mint-4:#c8f4e9;--mint-5:#b3ecde;--mint-6:#9ce0d0;--mint-7:#7ecfbd;--mint-8:#4cbba5;--mint-9:#86ead4;--mint-10:#7de0cb;--mint-11:#027864;--mint-12:#16433c;--mint-a1:#00d5aa06;--mint-a2:#00b18a0d;--mint-a3:#00d29e22;--mint-a4:#00cc9937;--mint-a5:#00c0914c;--mint-a6:#00b08663;--mint-a7:#00a17d81;--mint-a8:#009e7fb3;--mint-a9:#00d3a579;--mint-a10:#00c39982;--mint-a11:#007763fd;--mint-a12:#00312ae9;--lime-1:#fcfdfa;--lime-2:#f8faf3;--lime-3:#eef6d6;--lime-4:#e2f0bd;--lime-5:#d3e7a6;--lime-6:#c2da91;--lime-7:#abc978;--lime-8:#8db654;--lime-9:#bdee63;--lime-10:#b0e64c;--lime-11:#5c7c2f;--lime-12:#37401c;--lime-a1:#66990005;--lime-a2:#6b95000c;--lime-a3:#96c80029;--lime-a4:#8fc60042;--lime-a5:#81bb0059;--lime-a6:#72aa006e;--lime-a7:#61990087;--lime-a8:#559200ab;--lime-a9:#93e4009c;--lime-a10:#8fdc00b3;--lime-a11:#375f00d0;--lime-a12:#1e2900e3;--yellow-1:#fdfdf9;--yellow-2:#fefce9;--yellow-3:#fffab8;--yellow-4:#fff394;--yellow-5:#ffe770;--yellow-6:#f3d768;--yellow-7:#e4c767;--yellow-8:#d5ae39;--yellow-9:#ffe629;--yellow-10:#ffdc00;--yellow-11:#9e6c00;--yellow-12:#473b1f;--yellow-a1:#aaaa0006;--yellow-a2:#f4dd0016;--yellow-a3:#ffee0047;--yellow-a4:#ffe3016b;--yellow-a5:#ffd5008f;--yellow-a6:#ebbc0097;--yellow-a7:#d2a10098;--yellow-a8:#c99700c6;--yellow-a9:#ffe100d6;--yellow-a10:#ffdc00;--yellow-a11:#9e6c00;--yellow-a12:#2e2000e0;--amber-1:#fefdfb;--amber-2:#fefbe9;--amber-3:#fff7c2;--amber-4:#ffee9c;--amber-5:#fbe577;--amber-6:#f3d673;--amber-7:#e9c162;--amber-8:#e2a336;--amber-9:#ffc53d;--amber-10:#ffba18;--amber-11:#ab6400;--amber-12:#4f3422;--amber-a1:#c0800004;--amber-a2:#f4d10016;--amber-a3:#ffde003d;--amber-a4:#ffd40063;--amber-a5:#f8cf0088;--amber-a6:#eab5008c;--amber-a7:#dc9b009d;--amber-a8:#da8a00c9;--amber-a9:#ffb300c2;--amber-a10:#ffb300e7;--amber-a11:#ab6400;--amber-a12:#341500dd;--gold-1:#fdfdfc;--gold-2:#faf9f2;--gold-3:#f2f0e7;--gold-4:#eae6db;--gold-5:#e1dccf;--gold-6:#d8d0bf;--gold-7:#cbc0aa;--gold-8:#b9a88d;--gold-9:#978365;--gold-10:#8c7a5e;--gold-11:#71624b;--gold-12:#3b352b;--gold-a1:#55550003;--gold-a2:#9d8a000d;--gold-a3:#75600018;--gold-a4:#6b4e0024;--gold-a5:#60460030;--gold-a6:#64440040;--gold-a7:#63420055;--gold-a8:#633d0072;--gold-a9:#5332009a;--gold-a10:#492d00a1;--gold-a11:#362100b4;--gold-a12:#130c00d4;--bronze-1:#fdfcfc;--bronze-2:#fdf7f5;--bronze-3:#f6edea;--bronze-4:#efe4df;--bronze-5:#e7d9d3;--bronze-6:#dfcdc5;--bronze-7:#d3bcb3;--bronze-8:#c2a499;--bronze-9:#a18072;--bronze-10:#957468;--bronze-11:#7d5e54;--bronze-12:#43302b;--bronze-a1:#55000003;--bronze-a2:#cc33000a;--bronze-a3:#92250015;--bronze-a4:#80280020;--bronze-a5:#7423002c;--bronze-a6:#7324003a;--bronze-a7:#6c1f004c;--bronze-a8:#671c0066;--bronze-a9:#551a008d;--bronze-a10:#4c150097;--bronze-a11:#3d0f00ab;--bronze-a12:#1d0600d4;--gray-1:#fcfcfc;--gray-2:#f9f9f9;--gray-3:#f0f0f0;--gray-4:#e8e8e8;--gray-5:#e0e0e0;--gray-6:#d9d9d9;--gray-7:#cecece;--gray-8:#bbb;--gray-9:#8d8d8d;--gray-10:#838383;--gray-11:#646464;--gray-12:#202020;--gray-a1:#00000003;--gray-a2:#00000006;--gray-a3:#0000000f;--gray-a4:#00000017;--gray-a5:#0000001f;--gray-a6:#00000026;--gray-a7:#00000031;--gray-a8:#00000044;--gray-a9:#00000072;--gray-a10:#0000007c;--gray-a11:#0000009b;--gray-a12:#000000df;--mauve-1:#fdfcfd;--mauve-2:#faf9fb;--mauve-3:#f2eff3;--mauve-4:#eae7ec;--mauve-5:#e3dfe6;--mauve-6:#dbd8e0;--mauve-7:#d0cdd7;--mauve-8:#bcbac7;--mauve-9:#8e8c99;--mauve-10:#84828e;--mauve-11:#65636d;--mauve-12:#211f26;--mauve-a1:#55005503;--mauve-a2:#2b005506;--mauve-a3:#30004010;--mauve-a4:#20003618;--mauve-a5:#20003820;--mauve-a6:#14003527;--mauve-a7:#10003332;--mauve-a8:#08003145;--mauve-a9:#05001d73;--mauve-a10:#0500197d;--mauve-a11:#0400119c;--mauve-a12:#020008e0;--slate-1:#fcfcfd;--slate-2:#f9f9fb;--slate-3:#f0f0f3;--slate-4:#e8e8ec;--slate-5:#e0e1e6;--slate-6:#d9d9e0;--slate-7:#cdced6;--slate-8:#b9bbc6;--slate-9:#8b8d98;--slate-10:#80838d;--slate-11:#60646c;--slate-12:#1c2024;--slate-a1:#00005503;--slate-a2:#00005506;--slate-a3:#0000330f;--slate-a4:#00002d17;--slate-a5:#0009321f;--slate-a6:#00002f26;--slate-a7:#00062e32;--slate-a8:#00083046;--slate-a9:#00051d74;--slate-a10:#00071b7f;--slate-a11:#0007149f;--slate-a12:#000509e3;--sage-1:#fbfdfc;--sage-2:#f7f9f8;--sage-3:#eef1f0;--sage-4:#e6e9e8;--sage-5:#dfe2e0;--sage-6:#d7dad9;--sage-7:#cbcfcd;--sage-8:#b8bcba;--sage-9:#868e8b;--sage-10:#7c8481;--sage-11:#5f6563;--sage-12:#1a211e;--sage-a1:#00804004;--sage-a2:#00402008;--sage-a3:#002d1e11;--sage-a4:#001f1519;--sage-a5:#00180820;--sage-a6:#00140d28;--sage-a7:#00140a34;--sage-a8:#000f0847;--sage-a9:#00110b79;--sage-a10:#00100a83;--sage-a11:#000a07a0;--sage-a12:#000805e5;--olive-1:#fcfdfc;--olive-2:#f8faf8;--olive-3:#eff1ef;--olive-4:#e7e9e7;--olive-5:#dfe2df;--olive-6:#d7dad7;--olive-7:#cccfcc;--olive-8:#b9bcb8;--olive-9:#898e87;--olive-10:#7f847d;--olive-11:#60655f;--olive-12:#1d211c;--olive-a1:#00550003;--olive-a2:#00490007;--olive-a3:#00200010;--olive-a4:#00160018;--olive-a5:#00180020;--olive-a6:#00140028;--olive-a7:#000f0033;--olive-a8:#040f0047;--olive-a9:#050f0078;--olive-a10:#040e0082;--olive-a11:#020a00a0;--olive-a12:#010600e3;--sand-1:#fdfdfc;--sand-2:#f9f9f8;--sand-3:#f1f0ef;--sand-4:#e9e8e6;--sand-5:#e2e1de;--sand-6:#dad9d6;--sand-7:#cfceca;--sand-8:#bcbbb5;--sand-9:#8d8d86;--sand-10:#82827c;--sand-11:#63635e;--sand-12:#21201c;--sand-a1:#55550003;--sand-a2:#25250007;--sand-a3:#20100010;--sand-a4:#1f150019;--sand-a5:#1f180021;--sand-a6:#19130029;--sand-a7:#19140035;--sand-a8:#1915014a;--sand-a9:#0f0f0079;--sand-a10:#0c0c0083;--sand-a11:#080800a1;--sand-a12:#060500e3;--gray-surface:#ffffffcc;--mauve-surface:#ffffffcc;--slate-surface:#ffffffcc;--sage-surface:#ffffffcc;--olive-surface:#ffffffcc;--sand-surface:#ffffffcc;--tomato-surface:#fff6f5cc;--red-surface:#fff5f5cc;--ruby-surface:#fff5f6cc;--crimson-surface:#fef5f8cc;--pink-surface:#fef5facc;--plum-surface:#fdf5fdcc;--purple-surface:#faf5fecc;--violet-surface:#f9f6ffcc;--iris-surface:#f6f6ffcc;--indigo-surface:#f5f8ffcc;--blue-surface:#f1f9ffcc;--cyan-surface:#eff9facc;--teal-surface:#f0faf8cc;--jade-surface:#f1faf5cc;--green-surface:#f1faf4cc;--grass-surface:#f3faf3cc;--brown-surface:#fbf8f4cc;--bronze-surface:#fdf5f3cc;--gold-surface:#f9f8efcc;--sky-surface:#eef9fdcc;--mint-surface:#effaf8cc;--lime-surface:#f6f9f0cc;--yellow-surface:#fefbe4cc;--amber-surface:#fefae4cc;--orange-surface:#fff5e9cc}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root{--tomato-1:color(display-p3 0.998 0.989 0.988);--tomato-2:color(display-p3 0.994 0.974 0.969);--tomato-3:color(display-p3 0.985 0.924 0.909);--tomato-4:color(display-p3 0.996 0.868 0.835);--tomato-5:color(display-p3 0.98 0.812 0.77);--tomato-6:color(display-p3 0.953 0.75 0.698);--tomato-7:color(display-p3 0.917 0.673 0.611);--tomato-8:color(display-p3 0.875 0.575 0.502);--tomato-9:color(display-p3 0.831 0.345 0.231);--tomato-10:color(display-p3 0.802 0.313 0.2);--tomato-11:color(display-p3 0.755 0.259 0.152);--tomato-12:color(display-p3 0.335 0.165 0.132);--tomato-a1:color(display-p3 0.675 0.024 0.024/0.012);--tomato-a2:color(display-p3 0.757 0.145 0.02/0.032);--tomato-a3:color(display-p3 0.831 0.184 0.012/0.091);--tomato-a4:color(display-p3 0.976 0.192 0.004/0.165);--tomato-a5:color(display-p3 0.918 0.192 0.004/0.232);--tomato-a6:color(display-p3 0.847 0.173 0.004/0.302);--tomato-a7:color(display-p3 0.788 0.165 0.004/0.389);--tomato-a8:color(display-p3 0.749 0.153 0.004/0.499);--tomato-a9:color(display-p3 0.78 0.149 0/0.769);--tomato-a10:color(display-p3 0.757 0.141 0/0.8);--tomato-a11:color(display-p3 0.755 0.259 0.152);--tomato-a12:color(display-p3 0.335 0.165 0.132);--red-1:color(display-p3 0.998 0.989 0.988);--red-2:color(display-p3 0.995 0.971 0.971);--red-3:color(display-p3 0.985 0.925 0.925);--red-4:color(display-p3 0.999 0.866 0.866);--red-5:color(display-p3 0.984 0.812 0.811);--red-6:color(display-p3 0.955 0.751 0.749);--red-7:color(display-p3 0.915 0.675 0.672);--red-8:color(display-p3 0.872 0.575 0.572);--red-9:color(display-p3 0.83 0.329 0.324);--red-10:color(display-p3 0.798 0.294 0.285);--red-11:color(display-p3 0.744 0.234 0.222);--red-12:color(display-p3 0.36 0.115 0.143);--red-a1:color(display-p3 0.675 0.024 0.024/0.012);--red-a2:color(display-p3 0.863 0.024 0.024/0.028);--red-a3:color(display-p3 0.792 0.008 0.008/0.075);--red-a4:color(display-p3 1 0.008 0.008/0.134);--red-a5:color(display-p3 0.918 0.008 0.008/0.189);--red-a6:color(display-p3 0.831 0.02 0.004/0.251);--red-a7:color(display-p3 0.741 0.016 0.004/0.33);--red-a8:color(display-p3 0.698 0.012 0.004/0.428);--red-a9:color(display-p3 0.749 0.008 0/0.675);--red-a10:color(display-p3 0.714 0.012 0/0.714);--red-a11:color(display-p3 0.744 0.234 0.222);--red-a12:color(display-p3 0.36 0.115 0.143);--ruby-1:color(display-p3 0.998 0.989 0.992);--ruby-2:color(display-p3 0.995 0.971 0.974);--ruby-3:color(display-p3 0.983 0.92 0.928);--ruby-4:color(display-p3 0.987 0.869 0.885);--ruby-5:color(display-p3 0.968 0.817 0.839);--ruby-6:color(display-p3 0.937 0.758 0.786);--ruby-7:color(display-p3 0.897 0.685 0.721);--ruby-8:color(display-p3 0.851 0.588 0.639);--ruby-9:color(display-p3 0.83 0.323 0.408);--ruby-10:color(display-p3 0.795 0.286 0.375);--ruby-11:color(display-p3 0.728 0.211 0.311);--ruby-12:color(display-p3 0.36 0.115 0.171);--ruby-a1:color(display-p3 0.675 0.024 0.349/0.012);--ruby-a2:color(display-p3 0.863 0.024 0.024/0.028);--ruby-a3:color(display-p3 0.804 0.008 0.11/0.079);--ruby-a4:color(display-p3 0.91 0.008 0.125/0.13);--ruby-a5:color(display-p3 0.831 0.004 0.133/0.185);--ruby-a6:color(display-p3 0.745 0.004 0.118/0.244);--ruby-a7:color(display-p3 0.678 0.004 0.114/0.314);--ruby-a8:color(display-p3 0.639 0.004 0.125/0.412);--ruby-a9:color(display-p3 0.753 0 0.129/0.679);--ruby-a10:color(display-p3 0.714 0 0.125/0.714);--ruby-a11:color(display-p3 0.728 0.211 0.311);--ruby-a12:color(display-p3 0.36 0.115 0.171);--crimson-1:color(display-p3 0.998 0.989 0.992);--crimson-2:color(display-p3 0.991 0.969 0.976);--crimson-3:color(display-p3 0.987 0.917 0.941);--crimson-4:color(display-p3 0.975 0.866 0.904);--crimson-5:color(display-p3 0.953 0.813 0.864);--crimson-6:color(display-p3 0.921 0.755 0.817);--crimson-7:color(display-p3 0.88 0.683 0.761);--crimson-8:color(display-p3 0.834 0.592 0.694);--crimson-9:color(display-p3 0.843 0.298 0.507);--crimson-10:color(display-p3 0.807 0.266 0.468);--crimson-11:color(display-p3 0.731 0.195 0.388);--crimson-12:color(display-p3 0.352 0.111 0.221);--crimson-a1:color(display-p3 0.675 0.024 0.349/0.012);--crimson-a2:color(display-p3 0.757 0.02 0.267/0.032);--crimson-a3:color(display-p3 0.859 0.008 0.294/0.083);--crimson-a4:color(display-p3 0.827 0.008 0.298/0.134);--crimson-a5:color(display-p3 0.753 0.008 0.275/0.189);--crimson-a6:color(display-p3 0.682 0.004 0.247/0.244);--crimson-a7:color(display-p3 0.62 0.004 0.251/0.318);--crimson-a8:color(display-p3 0.6 0.004 0.251/0.408);--crimson-a9:color(display-p3 0.776 0 0.298/0.702);--crimson-a10:color(display-p3 0.737 0 0.275/0.734);--crimson-a11:color(display-p3 0.731 0.195 0.388);--crimson-a12:color(display-p3 0.352 0.111 0.221);--pink-1:color(display-p3 0.998 0.989 0.996);--pink-2:color(display-p3 0.992 0.97 0.985);--pink-3:color(display-p3 0.981 0.917 0.96);--pink-4:color(display-p3 0.963 0.867 0.932);--pink-5:color(display-p3 0.939 0.815 0.899);--pink-6:color(display-p3 0.907 0.756 0.859);--pink-7:color(display-p3 0.869 0.683 0.81);--pink-8:color(display-p3 0.825 0.59 0.751);--pink-9:color(display-p3 0.775 0.297 0.61);--pink-10:color(display-p3 0.748 0.27 0.581);--pink-11:color(display-p3 0.698 0.219 0.528);--pink-12:color(display-p3 0.363 0.101 0.279);--pink-a1:color(display-p3 0.675 0.024 0.675/0.012);--pink-a2:color(display-p3 0.757 0.02 0.51/0.032);--pink-a3:color(display-p3 0.765 0.008 0.529/0.083);--pink-a4:color(display-p3 0.737 0.008 0.506/0.134);--pink-a5:color(display-p3 0.663 0.004 0.451/0.185);--pink-a6:color(display-p3 0.616 0.004 0.424/0.244);--pink-a7:color(display-p3 0.596 0.004 0.412/0.318);--pink-a8:color(display-p3 0.573 0.004 0.404/0.412);--pink-a9:color(display-p3 0.682 0 0.447/0.702);--pink-a10:color(display-p3 0.655 0 0.424/0.73);--pink-a11:color(display-p3 0.698 0.219 0.528);--pink-a12:color(display-p3 0.363 0.101 0.279);--plum-1:color(display-p3 0.995 0.988 0.999);--plum-2:color(display-p3 0.988 0.971 0.99);--plum-3:color(display-p3 0.973 0.923 0.98);--plum-4:color(display-p3 0.953 0.875 0.966);--plum-5:color(display-p3 0.926 0.825 0.945);--plum-6:color(display-p3 0.89 0.765 0.916);--plum-7:color(display-p3 0.84 0.686 0.877);--plum-8:color(display-p3 0.775 0.58 0.832);--plum-9:color(display-p3 0.624 0.313 0.708);--plum-10:color(display-p3 0.587 0.29 0.667);--plum-11:color(display-p3 0.543 0.263 0.619);--plum-12:color(display-p3 0.299 0.114 0.352);--plum-a1:color(display-p3 0.675 0.024 1/0.012);--plum-a2:color(display-p3 0.58 0.024 0.58/0.028);--plum-a3:color(display-p3 0.655 0.008 0.753/0.079);--plum-a4:color(display-p3 0.627 0.008 0.722/0.126);--plum-a5:color(display-p3 0.58 0.004 0.69/0.177);--plum-a6:color(display-p3 0.537 0.004 0.655/0.236);--plum-a7:color(display-p3 0.49 0.004 0.616/0.314);--plum-a8:color(display-p3 0.471 0.004 0.6/0.42);--plum-a9:color(display-p3 0.451 0 0.576/0.687);--plum-a10:color(display-p3 0.42 0 0.529/0.71);--plum-a11:color(display-p3 0.543 0.263 0.619);--plum-a12:color(display-p3 0.299 0.114 0.352);--purple-1:color(display-p3 0.995 0.988 0.996);--purple-2:color(display-p3 0.983 0.971 0.993);--purple-3:color(display-p3 0.963 0.931 0.989);--purple-4:color(display-p3 0.937 0.888 0.981);--purple-5:color(display-p3 0.904 0.837 0.966);--purple-6:color(display-p3 0.86 0.774 0.942);--purple-7:color(display-p3 0.799 0.69 0.91);--purple-8:color(display-p3 0.719 0.583 0.874);--purple-9:color(display-p3 0.523 0.318 0.751);--purple-10:color(display-p3 0.483 0.289 0.7);--purple-11:color(display-p3 0.473 0.281 0.687);--purple-12:color(display-p3 0.234 0.132 0.363);--purple-a1:color(display-p3 0.675 0.024 0.675/0.012);--purple-a2:color(display-p3 0.443 0.024 0.722/0.028);--purple-a3:color(display-p3 0.506 0.008 0.835/0.071);--purple-a4:color(display-p3 0.451 0.004 0.831/0.114);--purple-a5:color(display-p3 0.431 0.004 0.788/0.165);--purple-a6:color(display-p3 0.384 0.004 0.745/0.228);--purple-a7:color(display-p3 0.357 0.004 0.71/0.31);--purple-a8:color(display-p3 0.322 0.004 0.702/0.416);--purple-a9:color(display-p3 0.298 0 0.639/0.683);--purple-a10:color(display-p3 0.271 0 0.58/0.71);--purple-a11:color(display-p3 0.473 0.281 0.687);--purple-a12:color(display-p3 0.234 0.132 0.363);--violet-1:color(display-p3 0.991 0.988 0.995);--violet-2:color(display-p3 0.978 0.974 0.998);--violet-3:color(display-p3 0.953 0.943 0.993);--violet-4:color(display-p3 0.916 0.897 1);--violet-5:color(display-p3 0.876 0.851 1);--violet-6:color(display-p3 0.825 0.793 0.981);--violet-7:color(display-p3 0.752 0.712 0.943);--violet-8:color(display-p3 0.654 0.602 0.902);--violet-9:color(display-p3 0.417 0.341 0.784);--violet-10:color(display-p3 0.381 0.306 0.741);--violet-11:color(display-p3 0.383 0.317 0.702);--violet-12:color(display-p3 0.179 0.15 0.359);--violet-a1:color(display-p3 0.349 0.024 0.675/0.012);--violet-a2:color(display-p3 0.161 0.024 0.863/0.028);--violet-a3:color(display-p3 0.204 0.004 0.871/0.059);--violet-a4:color(display-p3 0.196 0.004 1/0.102);--violet-a5:color(display-p3 0.165 0.008 1/0.15);--violet-a6:color(display-p3 0.153 0.004 0.906/0.208);--violet-a7:color(display-p3 0.141 0.004 0.796/0.287);--violet-a8:color(display-p3 0.133 0.004 0.753/0.397);--violet-a9:color(display-p3 0.114 0 0.675/0.659);--violet-a10:color(display-p3 0.11 0 0.627/0.695);--violet-a11:color(display-p3 0.383 0.317 0.702);--violet-a12:color(display-p3 0.179 0.15 0.359);--iris-1:color(display-p3 0.992 0.992 0.999);--iris-2:color(display-p3 0.972 0.973 0.998);--iris-3:color(display-p3 0.943 0.945 0.992);--iris-4:color(display-p3 0.902 0.906 1);--iris-5:color(display-p3 0.857 0.861 1);--iris-6:color(display-p3 0.799 0.805 0.987);--iris-7:color(display-p3 0.721 0.727 0.955);--iris-8:color(display-p3 0.61 0.619 0.918);--iris-9:color(display-p3 0.357 0.357 0.81);--iris-10:color(display-p3 0.318 0.318 0.774);--iris-11:color(display-p3 0.337 0.326 0.748);--iris-12:color(display-p3 0.154 0.161 0.371);--iris-a1:color(display-p3 0.02 0.02 1/0.008);--iris-a2:color(display-p3 0.024 0.024 0.863/0.028);--iris-a3:color(display-p3 0.004 0.071 0.871/0.059);--iris-a4:color(display-p3 0.012 0.051 1/0.099);--iris-a5:color(display-p3 0.008 0.035 1/0.142);--iris-a6:color(display-p3 0 0.02 0.941/0.2);--iris-a7:color(display-p3 0.004 0.02 0.847/0.279);--iris-a8:color(display-p3 0.004 0.024 0.788/0.389);--iris-a9:color(display-p3 0 0 0.706/0.644);--iris-a10:color(display-p3 0 0 0.667/0.683);--iris-a11:color(display-p3 0.337 0.326 0.748);--iris-a12:color(display-p3 0.154 0.161 0.371);--indigo-1:color(display-p3 0.992 0.992 0.996);--indigo-2:color(display-p3 0.971 0.977 0.998);--indigo-3:color(display-p3 0.933 0.948 0.992);--indigo-4:color(display-p3 0.885 0.914 1);--indigo-5:color(display-p3 0.831 0.87 1);--indigo-6:color(display-p3 0.767 0.814 0.995);--indigo-7:color(display-p3 0.685 0.74 0.957);--indigo-8:color(display-p3 0.569 0.639 0.916);--indigo-9:color(display-p3 0.276 0.384 0.837);--indigo-10:color(display-p3 0.234 0.343 0.801);--indigo-11:color(display-p3 0.256 0.354 0.755);--indigo-12:color(display-p3 0.133 0.175 0.348);--indigo-a1:color(display-p3 0.02 0.02 0.51/0.008);--indigo-a2:color(display-p3 0.024 0.161 0.863/0.028);--indigo-a3:color(display-p3 0.008 0.239 0.886/0.067);--indigo-a4:color(display-p3 0.004 0.247 1/0.114);--indigo-a5:color(display-p3 0.004 0.235 1/0.169);--indigo-a6:color(display-p3 0.004 0.208 0.984/0.232);--indigo-a7:color(display-p3 0.004 0.176 0.863/0.314);--indigo-a8:color(display-p3 0.004 0.165 0.812/0.432);--indigo-a9:color(display-p3 0 0.153 0.773/0.726);--indigo-a10:color(display-p3 0 0.137 0.737/0.765);--indigo-a11:color(display-p3 0.256 0.354 0.755);--indigo-a12:color(display-p3 0.133 0.175 0.348);--blue-1:color(display-p3 0.986 0.992 0.999);--blue-2:color(display-p3 0.96 0.979 0.998);--blue-3:color(display-p3 0.912 0.956 0.991);--blue-4:color(display-p3 0.853 0.932 1);--blue-5:color(display-p3 0.788 0.894 0.998);--blue-6:color(display-p3 0.709 0.843 0.976);--blue-7:color(display-p3 0.606 0.777 0.947);--blue-8:color(display-p3 0.451 0.688 0.917);--blue-9:color(display-p3 0.247 0.556 0.969);--blue-10:color(display-p3 0.234 0.523 0.912);--blue-11:color(display-p3 0.15 0.44 0.84);--blue-12:color(display-p3 0.102 0.193 0.379);--blue-a1:color(display-p3 0.024 0.514 1/0.016);--blue-a2:color(display-p3 0.024 0.514 0.906/0.04);--blue-a3:color(display-p3 0.012 0.506 0.914/0.087);--blue-a4:color(display-p3 0.008 0.545 1/0.146);--blue-a5:color(display-p3 0.004 0.502 0.984/0.212);--blue-a6:color(display-p3 0.004 0.463 0.922/0.291);--blue-a7:color(display-p3 0.004 0.431 0.863/0.393);--blue-a8:color(display-p3 0 0.427 0.851/0.55);--blue-a9:color(display-p3 0 0.412 0.961/0.753);--blue-a10:color(display-p3 0 0.376 0.886/0.765);--blue-a11:color(display-p3 0.15 0.44 0.84);--blue-a12:color(display-p3 0.102 0.193 0.379);--cyan-1:color(display-p3 0.982 0.992 0.996);--cyan-2:color(display-p3 0.955 0.981 0.984);--cyan-3:color(display-p3 0.888 0.965 0.975);--cyan-4:color(display-p3 0.821 0.941 0.959);--cyan-5:color(display-p3 0.751 0.907 0.935);--cyan-6:color(display-p3 0.671 0.862 0.9);--cyan-7:color(display-p3 0.564 0.8 0.854);--cyan-8:color(display-p3 0.388 0.715 0.798);--cyan-9:color(display-p3 0.282 0.627 0.765);--cyan-10:color(display-p3 0.264 0.583 0.71);--cyan-11:color(display-p3 0.08 0.48 0.63);--cyan-12:color(display-p3 0.108 0.232 0.277);--cyan-a1:color(display-p3 0.02 0.608 0.804/0.02);--cyan-a2:color(display-p3 0.02 0.557 0.647/0.044);--cyan-a3:color(display-p3 0.004 0.694 0.796/0.114);--cyan-a4:color(display-p3 0.004 0.678 0.784/0.181);--cyan-a5:color(display-p3 0.004 0.624 0.733/0.248);--cyan-a6:color(display-p3 0.004 0.584 0.706/0.33);--cyan-a7:color(display-p3 0.004 0.541 0.667/0.436);--cyan-a8:color(display-p3 0 0.533 0.667/0.612);--cyan-a9:color(display-p3 0 0.482 0.675/0.718);--cyan-a10:color(display-p3 0 0.435 0.608/0.738);--cyan-a11:color(display-p3 0.08 0.48 0.63);--cyan-a12:color(display-p3 0.108 0.232 0.277);--teal-1:color(display-p3 0.983 0.996 0.992);--teal-2:color(display-p3 0.958 0.983 0.976);--teal-3:color(display-p3 0.895 0.971 0.952);--teal-4:color(display-p3 0.831 0.949 0.92);--teal-5:color(display-p3 0.761 0.914 0.878);--teal-6:color(display-p3 0.682 0.864 0.825);--teal-7:color(display-p3 0.581 0.798 0.756);--teal-8:color(display-p3 0.433 0.716 0.671);--teal-9:color(display-p3 0.297 0.637 0.581);--teal-10:color(display-p3 0.275 0.599 0.542);--teal-11:color(display-p3 0.08 0.5 0.43);--teal-12:color(display-p3 0.11 0.235 0.219);--teal-a1:color(display-p3 0.024 0.757 0.514/0.016);--teal-a2:color(display-p3 0.02 0.647 0.467/0.044);--teal-a3:color(display-p3 0.004 0.741 0.557/0.106);--teal-a4:color(display-p3 0.004 0.702 0.537/0.169);--teal-a5:color(display-p3 0.004 0.643 0.494/0.24);--teal-a6:color(display-p3 0.004 0.569 0.447/0.318);--teal-a7:color(display-p3 0.004 0.518 0.424/0.42);--teal-a8:color(display-p3 0 0.506 0.424/0.569);--teal-a9:color(display-p3 0 0.482 0.404/0.702);--teal-a10:color(display-p3 0 0.451 0.369/0.726);--teal-a11:color(display-p3 0.08 0.5 0.43);--teal-a12:color(display-p3 0.11 0.235 0.219);--jade-1:color(display-p3 0.986 0.996 0.992);--jade-2:color(display-p3 0.962 0.983 0.969);--jade-3:color(display-p3 0.912 0.965 0.932);--jade-4:color(display-p3 0.858 0.941 0.893);--jade-5:color(display-p3 0.795 0.909 0.847);--jade-6:color(display-p3 0.715 0.864 0.791);--jade-7:color(display-p3 0.603 0.802 0.718);--jade-8:color(display-p3 0.44 0.72 0.629);--jade-9:color(display-p3 0.319 0.63 0.521);--jade-10:color(display-p3 0.299 0.592 0.488);--jade-11:color(display-p3 0.15 0.5 0.37);--jade-12:color(display-p3 0.142 0.229 0.194);--jade-a1:color(display-p3 0.024 0.757 0.514/0.016);--jade-a2:color(display-p3 0.024 0.612 0.22/0.04);--jade-a3:color(display-p3 0.012 0.596 0.235/0.087);--jade-a4:color(display-p3 0.008 0.588 0.255/0.142);--jade-a5:color(display-p3 0.004 0.561 0.251/0.204);--jade-a6:color(display-p3 0.004 0.525 0.278/0.287);--jade-a7:color(display-p3 0.004 0.506 0.29/0.397);--jade-a8:color(display-p3 0 0.506 0.337/0.561);--jade-a9:color(display-p3 0 0.459 0.298/0.683);--jade-a10:color(display-p3 0 0.42 0.271/0.702);--jade-a11:color(display-p3 0.15 0.5 0.37);--jade-a12:color(display-p3 0.142 0.229 0.194);--green-1:color(display-p3 0.986 0.996 0.989);--green-2:color(display-p3 0.963 0.983 0.967);--green-3:color(display-p3 0.913 0.964 0.925);--green-4:color(display-p3 0.859 0.94 0.879);--green-5:color(display-p3 0.796 0.907 0.826);--green-6:color(display-p3 0.718 0.863 0.761);--green-7:color(display-p3 0.61 0.801 0.675);--green-8:color(display-p3 0.451 0.715 0.559);--green-9:color(display-p3 0.332 0.634 0.442);--green-10:color(display-p3 0.308 0.595 0.417);--green-11:color(display-p3 0.19 0.5 0.32);--green-12:color(display-p3 0.132 0.228 0.18);--green-a1:color(display-p3 0.024 0.757 0.267/0.016);--green-a2:color(display-p3 0.024 0.565 0.129/0.036);--green-a3:color(display-p3 0.012 0.596 0.145/0.087);--green-a4:color(display-p3 0.008 0.588 0.145/0.142);--green-a5:color(display-p3 0.004 0.541 0.157/0.204);--green-a6:color(display-p3 0.004 0.518 0.157/0.283);--green-a7:color(display-p3 0.004 0.486 0.165/0.389);--green-a8:color(display-p3 0 0.478 0.2/0.55);--green-a9:color(display-p3 0 0.455 0.165/0.667);--green-a10:color(display-p3 0 0.416 0.153/0.691);--green-a11:color(display-p3 0.19 0.5 0.32);--green-a12:color(display-p3 0.132 0.228 0.18);--grass-1:color(display-p3 0.986 0.996 0.985);--grass-2:color(display-p3 0.966 0.983 0.964);--grass-3:color(display-p3 0.923 0.965 0.917);--grass-4:color(display-p3 0.872 0.94 0.865);--grass-5:color(display-p3 0.811 0.908 0.802);--grass-6:color(display-p3 0.733 0.864 0.724);--grass-7:color(display-p3 0.628 0.803 0.622);--grass-8:color(display-p3 0.477 0.72 0.482);--grass-9:color(display-p3 0.38 0.647 0.378);--grass-10:color(display-p3 0.344 0.598 0.342);--grass-11:color(display-p3 0.263 0.488 0.261);--grass-12:color(display-p3 0.151 0.233 0.153);--grass-a1:color(display-p3 0.024 0.757 0.024/0.016);--grass-a2:color(display-p3 0.024 0.565 0.024/0.036);--grass-a3:color(display-p3 0.059 0.576 0.008/0.083);--grass-a4:color(display-p3 0.035 0.565 0.008/0.134);--grass-a5:color(display-p3 0.047 0.545 0.008/0.197);--grass-a6:color(display-p3 0.031 0.502 0.004/0.275);--grass-a7:color(display-p3 0.012 0.482 0.004/0.377);--grass-a8:color(display-p3 0 0.467 0.008/0.522);--grass-a9:color(display-p3 0.008 0.435 0/0.624);--grass-a10:color(display-p3 0.008 0.388 0/0.659);--grass-a11:color(display-p3 0.263 0.488 0.261);--grass-a12:color(display-p3 0.151 0.233 0.153);--orange-1:color(display-p3 0.995 0.988 0.985);--orange-2:color(display-p3 0.994 0.968 0.934);--orange-3:color(display-p3 0.989 0.938 0.85);--orange-4:color(display-p3 1 0.874 0.687);--orange-5:color(display-p3 1 0.821 0.583);--orange-6:color(display-p3 0.975 0.767 0.545);--orange-7:color(display-p3 0.919 0.693 0.486);--orange-8:color(display-p3 0.877 0.597 0.379);--orange-9:color(display-p3 0.9 0.45 0.2);--orange-10:color(display-p3 0.87 0.409 0.164);--orange-11:color(display-p3 0.76 0.34 0);--orange-12:color(display-p3 0.323 0.185 0.127);--orange-a1:color(display-p3 0.757 0.267 0.024/0.016);--orange-a2:color(display-p3 0.886 0.533 0.008/0.067);--orange-a3:color(display-p3 0.922 0.584 0.008/0.15);--orange-a4:color(display-p3 1 0.604 0.004/0.314);--orange-a5:color(display-p3 1 0.569 0.004/0.416);--orange-a6:color(display-p3 0.949 0.494 0.004/0.455);--orange-a7:color(display-p3 0.839 0.408 0/0.514);--orange-a8:color(display-p3 0.804 0.349 0/0.62);--orange-a9:color(display-p3 0.878 0.314 0/0.8);--orange-a10:color(display-p3 0.843 0.29 0/0.836);--orange-a11:color(display-p3 0.76 0.34 0);--orange-a12:color(display-p3 0.323 0.185 0.127);--brown-1:color(display-p3 0.995 0.992 0.989);--brown-2:color(display-p3 0.987 0.976 0.964);--brown-3:color(display-p3 0.959 0.936 0.909);--brown-4:color(display-p3 0.934 0.897 0.855);--brown-5:color(display-p3 0.909 0.856 0.798);--brown-6:color(display-p3 0.88 0.808 0.73);--brown-7:color(display-p3 0.841 0.742 0.639);--brown-8:color(display-p3 0.782 0.647 0.514);--brown-9:color(display-p3 0.651 0.505 0.368);--brown-10:color(display-p3 0.601 0.465 0.344);--brown-11:color(display-p3 0.485 0.374 0.288);--brown-12:color(display-p3 0.236 0.202 0.183);--brown-a1:color(display-p3 0.675 0.349 0.024/0.012);--brown-a2:color(display-p3 0.675 0.349 0.024/0.036);--brown-a3:color(display-p3 0.573 0.314 0.012/0.091);--brown-a4:color(display-p3 0.545 0.302 0.008/0.146);--brown-a5:color(display-p3 0.561 0.29 0.004/0.204);--brown-a6:color(display-p3 0.553 0.294 0.004/0.271);--brown-a7:color(display-p3 0.557 0.286 0.004/0.361);--brown-a8:color(display-p3 0.549 0.275 0.004/0.487);--brown-a9:color(display-p3 0.447 0.22 0/0.632);--brown-a10:color(display-p3 0.388 0.188 0/0.655);--brown-a11:color(display-p3 0.485 0.374 0.288);--brown-a12:color(display-p3 0.236 0.202 0.183);--sky-1:color(display-p3 0.98 0.995 0.999);--sky-2:color(display-p3 0.953 0.98 0.99);--sky-3:color(display-p3 0.899 0.963 0.989);--sky-4:color(display-p3 0.842 0.937 0.977);--sky-5:color(display-p3 0.777 0.9 0.954);--sky-6:color(display-p3 0.701 0.851 0.921);--sky-7:color(display-p3 0.604 0.785 0.879);--sky-8:color(display-p3 0.457 0.696 0.829);--sky-9:color(display-p3 0.585 0.877 0.983);--sky-10:color(display-p3 0.555 0.845 0.959);--sky-11:color(display-p3 0.193 0.448 0.605);--sky-12:color(display-p3 0.145 0.241 0.329);--sky-a1:color(display-p3 0.02 0.804 1/0.02);--sky-a2:color(display-p3 0.024 0.592 0.757/0.048);--sky-a3:color(display-p3 0.004 0.655 0.886/0.102);--sky-a4:color(display-p3 0.004 0.604 0.851/0.157);--sky-a5:color(display-p3 0.004 0.565 0.792/0.224);--sky-a6:color(display-p3 0.004 0.502 0.737/0.299);--sky-a7:color(display-p3 0.004 0.459 0.694/0.397);--sky-a8:color(display-p3 0 0.435 0.682/0.542);--sky-a9:color(display-p3 0.004 0.71 0.965/0.416);--sky-a10:color(display-p3 0.004 0.647 0.914/0.444);--sky-a11:color(display-p3 0.193 0.448 0.605);--sky-a12:color(display-p3 0.145 0.241 0.329);--mint-1:color(display-p3 0.98 0.995 0.992);--mint-2:color(display-p3 0.957 0.985 0.977);--mint-3:color(display-p3 0.888 0.972 0.95);--mint-4:color(display-p3 0.819 0.951 0.916);--mint-5:color(display-p3 0.747 0.918 0.873);--mint-6:color(display-p3 0.668 0.87 0.818);--mint-7:color(display-p3 0.567 0.805 0.744);--mint-8:color(display-p3 0.42 0.724 0.649);--mint-9:color(display-p3 0.62 0.908 0.834);--mint-10:color(display-p3 0.585 0.871 0.797);--mint-11:color(display-p3 0.203 0.463 0.397);--mint-12:color(display-p3 0.136 0.259 0.236);--mint-a1:color(display-p3 0.02 0.804 0.608/0.02);--mint-a2:color(display-p3 0.02 0.647 0.467/0.044);--mint-a3:color(display-p3 0.004 0.761 0.553/0.114);--mint-a4:color(display-p3 0.004 0.741 0.545/0.181);--mint-a5:color(display-p3 0.004 0.678 0.51/0.255);--mint-a6:color(display-p3 0.004 0.616 0.463/0.334);--mint-a7:color(display-p3 0.004 0.549 0.412/0.432);--mint-a8:color(display-p3 0 0.529 0.392/0.581);--mint-a9:color(display-p3 0.004 0.765 0.569/0.381);--mint-a10:color(display-p3 0.004 0.69 0.51/0.416);--mint-a11:color(display-p3 0.203 0.463 0.397);--mint-a12:color(display-p3 0.136 0.259 0.236);--lime-1:color(display-p3 0.989 0.992 0.981);--lime-2:color(display-p3 0.975 0.98 0.954);--lime-3:color(display-p3 0.939 0.965 0.851);--lime-4:color(display-p3 0.896 0.94 0.76);--lime-5:color(display-p3 0.843 0.903 0.678);--lime-6:color(display-p3 0.778 0.852 0.599);--lime-7:color(display-p3 0.694 0.784 0.508);--lime-8:color(display-p3 0.585 0.707 0.378);--lime-9:color(display-p3 0.78 0.928 0.466);--lime-10:color(display-p3 0.734 0.896 0.397);--lime-11:color(display-p3 0.386 0.482 0.227);--lime-12:color(display-p3 0.222 0.25 0.128);--lime-a1:color(display-p3 0.412 0.608 0.02/0.02);--lime-a2:color(display-p3 0.514 0.592 0.024/0.048);--lime-a3:color(display-p3 0.584 0.765 0.008/0.15);--lime-a4:color(display-p3 0.561 0.757 0.004/0.24);--lime-a5:color(display-p3 0.514 0.698 0.004/0.322);--lime-a6:color(display-p3 0.443 0.627 0/0.4);--lime-a7:color(display-p3 0.376 0.561 0.004/0.491);--lime-a8:color(display-p3 0.333 0.529 0/0.624);--lime-a9:color(display-p3 0.588 0.867 0/0.534);--lime-a10:color(display-p3 0.561 0.827 0/0.604);--lime-a11:color(display-p3 0.386 0.482 0.227);--lime-a12:color(display-p3 0.222 0.25 0.128);--yellow-1:color(display-p3 0.992 0.992 0.978);--yellow-2:color(display-p3 0.995 0.99 0.922);--yellow-3:color(display-p3 0.997 0.982 0.749);--yellow-4:color(display-p3 0.992 0.953 0.627);--yellow-5:color(display-p3 0.984 0.91 0.51);--yellow-6:color(display-p3 0.934 0.847 0.474);--yellow-7:color(display-p3 0.876 0.785 0.46);--yellow-8:color(display-p3 0.811 0.689 0.313);--yellow-9:color(display-p3 1 0.92 0.22);--yellow-10:color(display-p3 0.977 0.868 0.291);--yellow-11:color(display-p3 0.6 0.44 0);--yellow-12:color(display-p3 0.271 0.233 0.137);--yellow-a1:color(display-p3 0.675 0.675 0.024/0.024);--yellow-a2:color(display-p3 0.953 0.855 0.008/0.079);--yellow-a3:color(display-p3 0.988 0.925 0.004/0.251);--yellow-a4:color(display-p3 0.98 0.875 0.004/0.373);--yellow-a5:color(display-p3 0.969 0.816 0.004/0.491);--yellow-a6:color(display-p3 0.875 0.71 0/0.526);--yellow-a7:color(display-p3 0.769 0.604 0/0.542);--yellow-a8:color(display-p3 0.725 0.549 0/0.687);--yellow-a9:color(display-p3 1 0.898 0/0.781);--yellow-a10:color(display-p3 0.969 0.812 0/0.71);--yellow-a11:color(display-p3 0.6 0.44 0);--yellow-a12:color(display-p3 0.271 0.233 0.137);--amber-1:color(display-p3 0.995 0.992 0.985);--amber-2:color(display-p3 0.994 0.986 0.921);--amber-3:color(display-p3 0.994 0.969 0.782);--amber-4:color(display-p3 0.989 0.937 0.65);--amber-5:color(display-p3 0.97 0.902 0.527);--amber-6:color(display-p3 0.936 0.844 0.506);--amber-7:color(display-p3 0.89 0.762 0.443);--amber-8:color(display-p3 0.85 0.65 0.3);--amber-9:color(display-p3 1 0.77 0.26);--amber-10:color(display-p3 0.959 0.741 0.274);--amber-11:color(display-p3 0.64 0.4 0);--amber-12:color(display-p3 0.294 0.208 0.145);--amber-a1:color(display-p3 0.757 0.514 0.024/0.016);--amber-a2:color(display-p3 0.902 0.804 0.008/0.079);--amber-a3:color(display-p3 0.965 0.859 0.004/0.22);--amber-a4:color(display-p3 0.969 0.82 0.004/0.35);--amber-a5:color(display-p3 0.933 0.796 0.004/0.475);--amber-a6:color(display-p3 0.875 0.682 0.004/0.495);--amber-a7:color(display-p3 0.804 0.573 0/0.557);--amber-a8:color(display-p3 0.788 0.502 0/0.699);--amber-a9:color(display-p3 1 0.686 0/0.742);--amber-a10:color(display-p3 0.945 0.643 0/0.726);--amber-a11:color(display-p3 0.64 0.4 0);--amber-a12:color(display-p3 0.294 0.208 0.145);--gold-1:color(display-p3 0.992 0.992 0.989);--gold-2:color(display-p3 0.98 0.976 0.953);--gold-3:color(display-p3 0.947 0.94 0.909);--gold-4:color(display-p3 0.914 0.904 0.865);--gold-5:color(display-p3 0.88 0.865 0.816);--gold-6:color(display-p3 0.84 0.818 0.756);--gold-7:color(display-p3 0.788 0.753 0.677);--gold-8:color(display-p3 0.715 0.66 0.565);--gold-9:color(display-p3 0.579 0.517 0.41);--gold-10:color(display-p3 0.538 0.479 0.38);--gold-11:color(display-p3 0.433 0.386 0.305);--gold-12:color(display-p3 0.227 0.209 0.173);--gold-a1:color(display-p3 0.349 0.349 0.024/0.012);--gold-a2:color(display-p3 0.592 0.514 0.024/0.048);--gold-a3:color(display-p3 0.4 0.357 0.012/0.091);--gold-a4:color(display-p3 0.357 0.298 0.008/0.134);--gold-a5:color(display-p3 0.345 0.282 0.004/0.185);--gold-a6:color(display-p3 0.341 0.263 0.004/0.244);--gold-a7:color(display-p3 0.345 0.235 0.004/0.322);--gold-a8:color(display-p3 0.345 0.22 0.004/0.436);--gold-a9:color(display-p3 0.286 0.18 0/0.589);--gold-a10:color(display-p3 0.255 0.161 0/0.62);--gold-a11:color(display-p3 0.433 0.386 0.305);--gold-a12:color(display-p3 0.227 0.209 0.173);--bronze-1:color(display-p3 0.991 0.988 0.988);--bronze-2:color(display-p3 0.989 0.97 0.961);--bronze-3:color(display-p3 0.958 0.932 0.919);--bronze-4:color(display-p3 0.929 0.894 0.877);--bronze-5:color(display-p3 0.898 0.853 0.832);--bronze-6:color(display-p3 0.861 0.805 0.778);--bronze-7:color(display-p3 0.812 0.739 0.706);--bronze-8:color(display-p3 0.741 0.647 0.606);--bronze-9:color(display-p3 0.611 0.507 0.455);--bronze-10:color(display-p3 0.563 0.461 0.414);--bronze-11:color(display-p3 0.471 0.373 0.336);--bronze-12:color(display-p3 0.251 0.191 0.172);--bronze-a1:color(display-p3 0.349 0.024 0.024/0.012);--bronze-a2:color(display-p3 0.71 0.22 0.024/0.04);--bronze-a3:color(display-p3 0.482 0.2 0.008/0.083);--bronze-a4:color(display-p3 0.424 0.133 0.004/0.122);--bronze-a5:color(display-p3 0.4 0.145 0.004/0.169);--bronze-a6:color(display-p3 0.388 0.125 0.004/0.224);--bronze-a7:color(display-p3 0.365 0.11 0.004/0.295);--bronze-a8:color(display-p3 0.341 0.102 0.004/0.393);--bronze-a9:color(display-p3 0.29 0.094 0/0.546);--bronze-a10:color(display-p3 0.255 0.082 0/0.585);--bronze-a11:color(display-p3 0.471 0.373 0.336);--bronze-a12:color(display-p3 0.251 0.191 0.172);--gray-1:color(display-p3 0.988 0.988 0.988);--gray-2:color(display-p3 0.975 0.975 0.975);--gray-3:color(display-p3 0.939 0.939 0.939);--gray-4:color(display-p3 0.908 0.908 0.908);--gray-5:color(display-p3 0.88 0.88 0.88);--gray-6:color(display-p3 0.849 0.849 0.849);--gray-7:color(display-p3 0.807 0.807 0.807);--gray-8:color(display-p3 0.732 0.732 0.732);--gray-9:color(display-p3 0.553 0.553 0.553);--gray-10:color(display-p3 0.512 0.512 0.512);--gray-11:color(display-p3 0.392 0.392 0.392);--gray-12:color(display-p3 0.125 0.125 0.125);--gray-a1:color(display-p3 0 0 0/0.012);--gray-a2:color(display-p3 0 0 0/0.024);--gray-a3:color(display-p3 0 0 0/0.063);--gray-a4:color(display-p3 0 0 0/0.09);--gray-a5:color(display-p3 0 0 0/0.122);--gray-a6:color(display-p3 0 0 0/0.153);--gray-a7:color(display-p3 0 0 0/0.192);--gray-a8:color(display-p3 0 0 0/0.267);--gray-a9:color(display-p3 0 0 0/0.447);--gray-a10:color(display-p3 0 0 0/0.486);--gray-a11:color(display-p3 0 0 0/0.608);--gray-a12:color(display-p3 0 0 0/0.875);--mauve-1:color(display-p3 0.991 0.988 0.992);--mauve-2:color(display-p3 0.98 0.976 0.984);--mauve-3:color(display-p3 0.946 0.938 0.952);--mauve-4:color(display-p3 0.915 0.906 0.925);--mauve-5:color(display-p3 0.886 0.876 0.901);--mauve-6:color(display-p3 0.856 0.846 0.875);--mauve-7:color(display-p3 0.814 0.804 0.84);--mauve-8:color(display-p3 0.735 0.728 0.777);--mauve-9:color(display-p3 0.555 0.549 0.596);--mauve-10:color(display-p3 0.514 0.508 0.552);--mauve-11:color(display-p3 0.395 0.388 0.424);--mauve-12:color(display-p3 0.128 0.122 0.147);--mauve-a1:color(display-p3 0.349 0.024 0.349/0.012);--mauve-a2:color(display-p3 0.184 0.024 0.349/0.024);--mauve-a3:color(display-p3 0.129 0.008 0.255/0.063);--mauve-a4:color(display-p3 0.094 0.012 0.216/0.095);--mauve-a5:color(display-p3 0.098 0.008 0.224/0.126);--mauve-a6:color(display-p3 0.055 0.004 0.18/0.153);--mauve-a7:color(display-p3 0.067 0.008 0.184/0.197);--mauve-a8:color(display-p3 0.02 0.004 0.176/0.271);--mauve-a9:color(display-p3 0.02 0.004 0.106/0.451);--mauve-a10:color(display-p3 0.012 0.004 0.09/0.491);--mauve-a11:color(display-p3 0.016 0 0.059/0.612);--mauve-a12:color(display-p3 0.008 0 0.027/0.879);--slate-1:color(display-p3 0.988 0.988 0.992);--slate-2:color(display-p3 0.976 0.976 0.984);--slate-3:color(display-p3 0.94 0.941 0.953);--slate-4:color(display-p3 0.908 0.909 0.925);--slate-5:color(display-p3 0.88 0.881 0.901);--slate-6:color(display-p3 0.85 0.852 0.876);--slate-7:color(display-p3 0.805 0.808 0.838);--slate-8:color(display-p3 0.727 0.733 0.773);--slate-9:color(display-p3 0.547 0.553 0.592);--slate-10:color(display-p3 0.503 0.512 0.549);--slate-11:color(display-p3 0.379 0.392 0.421);--slate-12:color(display-p3 0.113 0.125 0.14);--slate-a1:color(display-p3 0.024 0.024 0.349/0.012);--slate-a2:color(display-p3 0.024 0.024 0.349/0.024);--slate-a3:color(display-p3 0.004 0.004 0.204/0.059);--slate-a4:color(display-p3 0.012 0.012 0.184/0.091);--slate-a5:color(display-p3 0.004 0.039 0.2/0.122);--slate-a6:color(display-p3 0.008 0.008 0.165/0.15);--slate-a7:color(display-p3 0.008 0.027 0.184/0.197);--slate-a8:color(display-p3 0.004 0.031 0.176/0.275);--slate-a9:color(display-p3 0.004 0.02 0.106/0.455);--slate-a10:color(display-p3 0.004 0.027 0.098/0.499);--slate-a11:color(display-p3 0 0.02 0.063/0.62);--slate-a12:color(display-p3 0 0.012 0.031/0.887);--sage-1:color(display-p3 0.986 0.992 0.988);--sage-2:color(display-p3 0.97 0.977 0.974);--sage-3:color(display-p3 0.935 0.944 0.94);--sage-4:color(display-p3 0.904 0.913 0.909);--sage-5:color(display-p3 0.875 0.885 0.88);--sage-6:color(display-p3 0.844 0.854 0.849);--sage-7:color(display-p3 0.8 0.811 0.806);--sage-8:color(display-p3 0.725 0.738 0.732);--sage-9:color(display-p3 0.531 0.556 0.546);--sage-10:color(display-p3 0.492 0.515 0.506);--sage-11:color(display-p3 0.377 0.395 0.389);--sage-12:color(display-p3 0.107 0.129 0.118);--sage-a1:color(display-p3 0.024 0.514 0.267/0.016);--sage-a2:color(display-p3 0.02 0.267 0.145/0.032);--sage-a3:color(display-p3 0.008 0.184 0.125/0.067);--sage-a4:color(display-p3 0.012 0.094 0.051/0.095);--sage-a5:color(display-p3 0.008 0.098 0.035/0.126);--sage-a6:color(display-p3 0.004 0.078 0.027/0.157);--sage-a7:color(display-p3 0 0.059 0.039/0.2);--sage-a8:color(display-p3 0.004 0.047 0.031/0.275);--sage-a9:color(display-p3 0.004 0.059 0.035/0.471);--sage-a10:color(display-p3 0 0.047 0.031/0.51);--sage-a11:color(display-p3 0 0.031 0.02/0.624);--sage-a12:color(display-p3 0 0.027 0.012/0.895);--olive-1:color(display-p3 0.989 0.992 0.989);--olive-2:color(display-p3 0.974 0.98 0.973);--olive-3:color(display-p3 0.939 0.945 0.937);--olive-4:color(display-p3 0.907 0.914 0.905);--olive-5:color(display-p3 0.878 0.885 0.875);--olive-6:color(display-p3 0.846 0.855 0.843);--olive-7:color(display-p3 0.803 0.812 0.8);--olive-8:color(display-p3 0.727 0.738 0.723);--olive-9:color(display-p3 0.541 0.556 0.532);--olive-10:color(display-p3 0.5 0.515 0.491);--olive-11:color(display-p3 0.38 0.395 0.374);--olive-12:color(display-p3 0.117 0.129 0.111);--olive-a1:color(display-p3 0.024 0.349 0.024/0.012);--olive-a2:color(display-p3 0.024 0.302 0.024/0.028);--olive-a3:color(display-p3 0.008 0.129 0.008/0.063);--olive-a4:color(display-p3 0.012 0.094 0.012/0.095);--olive-a5:color(display-p3 0.035 0.098 0.008/0.126);--olive-a6:color(display-p3 0.027 0.078 0.004/0.157);--olive-a7:color(display-p3 0.02 0.059 0/0.2);--olive-a8:color(display-p3 0.02 0.059 0.004/0.279);--olive-a9:color(display-p3 0.02 0.051 0.004/0.467);--olive-a10:color(display-p3 0.024 0.047 0/0.51);--olive-a11:color(display-p3 0.012 0.039 0/0.628);--olive-a12:color(display-p3 0.008 0.024 0/0.891);--sand-1:color(display-p3 0.992 0.992 0.989);--sand-2:color(display-p3 0.977 0.977 0.973);--sand-3:color(display-p3 0.943 0.942 0.936);--sand-4:color(display-p3 0.913 0.912 0.903);--sand-5:color(display-p3 0.885 0.883 0.873);--sand-6:color(display-p3 0.854 0.852 0.839);--sand-7:color(display-p3 0.813 0.81 0.794);--sand-8:color(display-p3 0.738 0.734 0.713);--sand-9:color(display-p3 0.553 0.553 0.528);--sand-10:color(display-p3 0.511 0.511 0.488);--sand-11:color(display-p3 0.388 0.388 0.37);--sand-12:color(display-p3 0.129 0.126 0.111);--sand-a1:color(display-p3 0.349 0.349 0.024/0.012);--sand-a2:color(display-p3 0.161 0.161 0.024/0.028);--sand-a3:color(display-p3 0.067 0.067 0.008/0.063);--sand-a4:color(display-p3 0.129 0.129 0.012/0.099);--sand-a5:color(display-p3 0.098 0.067 0.008/0.126);--sand-a6:color(display-p3 0.102 0.075 0.004/0.161);--sand-a7:color(display-p3 0.098 0.098 0.004/0.208);--sand-a8:color(display-p3 0.086 0.075 0.004/0.287);--sand-a9:color(display-p3 0.051 0.051 0.004/0.471);--sand-a10:color(display-p3 0.047 0.047 0/0.514);--sand-a11:color(display-p3 0.031 0.031 0/0.632);--sand-a12:color(display-p3 0.024 0.02 0/0.891);--gray-surface:color(display-p3 1 1 1/0.8);--mauve-surface:color(display-p3 1 1 1/0.8);--slate-surface:color(display-p3 1 1 1/0.8);--sage-surface:color(display-p3 1 1 1/0.8);--olive-surface:color(display-p3 1 1 1/0.8);--sand-surface:color(display-p3 1 1 1/0.8);--tomato-surface:color(display-p3 0.9922 0.9647 0.9608/0.8);--red-surface:color(display-p3 0.9961 0.9647 0.9647/0.8);--ruby-surface:color(display-p3 0.9961 0.9647 0.9647/0.8);--crimson-surface:color(display-p3 0.9922 0.9608 0.9725/0.8);--pink-surface:color(display-p3 0.9922 0.9608 0.9804/0.8);--plum-surface:color(display-p3 0.9843 0.9647 0.9843/0.8);--purple-surface:color(display-p3 0.9804 0.9647 0.9922/0.8);--violet-surface:color(display-p3 0.9725 0.9647 0.9961/0.8);--iris-surface:color(display-p3 0.9647 0.9647 0.9961/0.8);--indigo-surface:color(display-p3 0.9647 0.9725 0.9961/0.8);--blue-surface:color(display-p3 0.9529 0.9765 0.9961/0.8);--cyan-surface:color(display-p3 0.9412 0.9765 0.9804/0.8);--teal-surface:color(display-p3 0.9451 0.9804 0.9725/0.8);--jade-surface:color(display-p3 0.9529 0.9804 0.9608/0.8);--green-surface:color(display-p3 0.9569 0.9804 0.9608/0.8);--grass-surface:color(display-p3 0.9569 0.9804 0.9569/0.8);--brown-surface:color(display-p3 0.9843 0.9725 0.9569/0.8);--bronze-surface:color(display-p3 0.9843 0.9608 0.9529/0.8);--gold-surface:color(display-p3 0.9765 0.9725 0.9412/0.8);--sky-surface:color(display-p3 0.9412 0.9765 0.9843/0.8);--mint-surface:color(display-p3 0.9451 0.9804 0.9725/0.8);--lime-surface:color(display-p3 0.9725 0.9765 0.9412/0.8);--yellow-surface:color(display-p3 0.9961 0.9922 0.902/0.8);--amber-surface:color(display-p3 0.9922 0.9843 0.902/0.8);--orange-surface:color(display-p3 0.9961 0.9608 0.9176/0.8)}}}:root{--black-a1:rgba(0,0,0,.05);--black-a2:rgba(0,0,0,.1);--black-a3:rgba(0,0,0,.15);--black-a4:rgba(0,0,0,.2);--black-a5:rgba(0,0,0,.3);--black-a6:rgba(0,0,0,.4);--black-a7:rgba(0,0,0,.5);--black-a8:rgba(0,0,0,.6);--black-a9:rgba(0,0,0,.7);--black-a10:rgba(0,0,0,.8);--black-a11:rgba(0,0,0,.9);--black-a12:rgba(0,0,0,.95);--white-a1:hsla(0,0%,100%,.05);--white-a2:hsla(0,0%,100%,.1);--white-a3:hsla(0,0%,100%,.15);--white-a4:hsla(0,0%,100%,.2);--white-a5:hsla(0,0%,100%,.3);--white-a6:hsla(0,0%,100%,.4);--white-a7:hsla(0,0%,100%,.5);--white-a8:hsla(0,0%,100%,.6);--white-a9:hsla(0,0%,100%,.7);--white-a10:hsla(0,0%,100%,.8);--white-a11:hsla(0,0%,100%,.9);--white-a12:hsla(0,0%,100%,.95);--tomato-9-contrast:#fff;--red-9-contrast:#fff;--ruby-9-contrast:#fff;--crimson-9-contrast:#fff;--pink-9-contrast:#fff;--plum-9-contrast:#fff;--purple-9-contrast:#fff;--violet-9-contrast:#fff;--iris-9-contrast:#fff;--indigo-9-contrast:#fff;--blue-9-contrast:#fff;--cyan-9-contrast:#fff;--teal-9-contrast:#fff;--jade-9-contrast:#fff;--green-9-contrast:#fff;--grass-9-contrast:#fff;--orange-9-contrast:#fff;--brown-9-contrast:#fff;--sky-9-contrast:#1c2024;--mint-9-contrast:#1a211e;--lime-9-contrast:#1d211c;--yellow-9-contrast:#21201c;--amber-9-contrast:#21201c;--gold-9-contrast:#fff;--bronze-9-contrast:#fff;--gray-9-contrast:#fff}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root{--black-a1:color(display-p3 0 0 0/0.05);--black-a2:color(display-p3 0 0 0/0.1);--black-a3:color(display-p3 0 0 0/0.15);--black-a4:color(display-p3 0 0 0/0.2);--black-a5:color(display-p3 0 0 0/0.3);--black-a6:color(display-p3 0 0 0/0.4);--black-a7:color(display-p3 0 0 0/0.5);--black-a8:color(display-p3 0 0 0/0.6);--black-a9:color(display-p3 0 0 0/0.7);--black-a10:color(display-p3 0 0 0/0.8);--black-a11:color(display-p3 0 0 0/0.9);--black-a12:color(display-p3 0 0 0/0.95);--white-a1:color(display-p3 1 1 1/0.05);--white-a2:color(display-p3 1 1 1/0.1);--white-a3:color(display-p3 1 1 1/0.15);--white-a4:color(display-p3 1 1 1/0.2);--white-a5:color(display-p3 1 1 1/0.3);--white-a6:color(display-p3 1 1 1/0.4);--white-a7:color(display-p3 1 1 1/0.5);--white-a8:color(display-p3 1 1 1/0.6);--white-a9:color(display-p3 1 1 1/0.7);--white-a10:color(display-p3 1 1 1/0.8);--white-a11:color(display-p3 1 1 1/0.9);--white-a12:color(display-p3 1 1 1/0.95)}}}:where(.radix-themes){--color-background:#fff;--color-overlay:var(--black-a6);--color-panel-solid:#fff;--color-panel-translucent:hsla(0,0%,100%,.8);--color-surface:hsla(0,0%,100%,.9);--color-transparent:transparent;--shadow-1:inset 0 0 0 1px var(--gray-a5),inset 0 1.5px 2px 0 var(--gray-a2),inset 0 1.5px 2px 0 var(--black-a2);--shadow-2:0 0 0 1px var(--gray-a3),0 0 0 0.5px var(--black-a1),0 1px 1px 0 var(--gray-a4),0 2px 1px -1px var(--black-a1),0 1px 3px 0 var(--black-a1);--shadow-3:0 0 0 1px var(--gray-a3),0 2px 3px -2px var(--gray-a3),0 3px 12px -4px var(--black-a2),0 4px 16px -8px var(--black-a2);--shadow-4:0 0 0 1px var(--gray-a3),0 8px 40px var(--black-a1),0 12px 32px -16px var(--gray-a3);--shadow-5:0 0 0 1px var(--gray-a3),0 12px 60px var(--black-a3),0 12px 32px -16px var(--gray-a5);--shadow-6:0 0 0 1px var(--gray-a3),0 12px 60px var(--black-a3),0 16px 64px var(--gray-a2),0 16px 36px -20px var(--gray-a7);--base-button-classic-after-inset:2px;--base-button-classic-box-shadow-top:inset 0 0 0 1px var(--gray-a4),inset 0-2px 1px var(--gray-a3);--base-button-classic-box-shadow-bottom:inset 0 4px 2px -2px var(--white-a9),inset 0 2px 1px -1px var(--white-a9);--base-button-classic-disabled-box-shadow:var(--base-button-classic-box-shadow-top),var(--base-button-classic-box-shadow-bottom);--base-button-classic-active-filter:brightness(0.92) saturate(1.1);--base-button-classic-high-contrast-hover-filter:contrast(0.88) saturate(1.1) brightness(1.1);--base-button-classic-high-contrast-active-filter:contrast(0.82) saturate(1.2) brightness(1.16);--base-button-solid-active-filter:brightness(0.92) saturate(1.1);--base-button-solid-high-contrast-hover-filter:contrast(0.88) saturate(1.1) brightness(1.1);--base-button-solid-high-contrast-active-filter:contrast(0.82) saturate(1.2) brightness(1.16);--card-classic-hover-box-shadow:0 0 0 1px var(--gray-a5),0 1px 1px 1px var(--black-a2),0 2px 1px -1px var(--gray-a3),0 2px 3px -2px var(--black-a1),0 3px 12px -4px var(--gray-a3),0 4px 16px -8px var(--black-a1);--kbd-box-shadow:inset 0-0.05em 0.5em var(--gray-a2),inset 0 0.05em var(--white-a12),inset 0 0.25em 0.5em var(--gray-a2),inset 0-0.05em var(--gray-a6),0 0 0 0.05em var(--gray-a5),0 0.08em 0.17em var(--gray-a7);--select-trigger-classic-box-shadow:inset 0 0 0 1px var(--gray-a5),inset 0 2px 1px var(--white-a11),inset 0-2px 1px var(--gray-a4);--slider-range-high-contrast-background-image:linear-gradient(var(--black-a8),var(--black-a8));--slider-disabled-blend-mode:multiply;--switch-disabled-blend-mode:multiply;--switch-button-high-contrast-checked-color-overlay:var(--black-a8);--switch-button-high-contrast-checked-active-before-filter:contrast(0.82) saturate(1.2) brightness(1.16);--switch-button-surface-checked-active-filter:brightness(0.92) saturate(1.1)}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){.radix-themes{--color-transparent:color(display-p3 0 0 0/0)}}}.radix-themes,[data-accent-color]:where(:not([data-accent-color=gray])){--color-autofill-root:var(--accent-a3);--color-focus-root:var(--accent-8);--color-selection-root:var(--accent-a5)}.radix-themes ::selection{background-color:var(--color-selection-root)}.radix-themes:where([data-panel-background=translucent]){--color-panel:var(--color-panel-translucent)}[data-accent-color=yellow]{--color-surface-accent:var(--yellow-surface);--accent-1:var(--yellow-1);--accent-2:var(--yellow-2);--accent-3:var(--yellow-3);--accent-4:var(--yellow-4);--accent-5:var(--yellow-5);--accent-6:var(--yellow-6);--accent-7:var(--yellow-7);--accent-8:var(--yellow-8);--accent-9:var(--yellow-9);--accent-9-contrast:var(--yellow-9-contrast);--accent-10:var(--yellow-10);--accent-11:var(--yellow-11);--accent-12:var(--yellow-12);--accent-a1:var(--yellow-a1);--accent-a2:var(--yellow-a2);--accent-a3:var(--yellow-a3);--accent-a4:var(--yellow-a4);--accent-a5:var(--yellow-a5);--accent-a6:var(--yellow-a6);--accent-a7:var(--yellow-a7);--accent-a8:var(--yellow-a8);--accent-a9:var(--yellow-a9);--accent-a10:var(--yellow-a10);--accent-a11:var(--yellow-a11);--accent-a12:var(--yellow-a12)}.radix-themes:where([data-gray-color=sand]){--gray-surface:var(--sand-surface);--gray-1:var(--sand-1);--gray-2:var(--sand-2);--gray-2-translucent:var(--sand-2-translucent);--gray-3:var(--sand-3);--gray-4:var(--sand-4);--gray-5:var(--sand-5);--gray-6:var(--sand-6);--gray-7:var(--sand-7);--gray-8:var(--sand-8);--gray-9:var(--sand-9);--gray-10:var(--sand-10);--gray-11:var(--sand-11);--gray-12:var(--sand-12);--gray-a1:var(--sand-a1);--gray-a2:var(--sand-a2);--gray-a3:var(--sand-a3);--gray-a4:var(--sand-a4);--gray-a5:var(--sand-a5);--gray-a6:var(--sand-a6);--gray-a7:var(--sand-a7);--gray-a8:var(--sand-a8);--gray-a9:var(--sand-a9);--gray-a10:var(--sand-a10);--gray-a11:var(--sand-a11);--gray-a12:var(--sand-a12)}.radix-themes{--cursor-button:default;--cursor-checkbox:default;--cursor-disabled:not-allowed;--cursor-link:pointer;--cursor-menu-item:default;--cursor-radio:default;--cursor-slider-thumb:default;--cursor-slider-thumb-active:default;--cursor-switch:default;--space-1:calc(4px*var(--scaling));--space-2:calc(8px*var(--scaling));--space-3:calc(12px*var(--scaling));--space-4:calc(16px*var(--scaling));--space-5:calc(24px*var(--scaling));--space-6:calc(32px*var(--scaling));--space-7:calc(40px*var(--scaling));--space-8:calc(48px*var(--scaling));--space-9:calc(64px*var(--scaling));--font-size-1:calc(12px*var(--scaling));--font-size-2:calc(14px*var(--scaling));--font-size-3:calc(16px*var(--scaling));--font-size-4:calc(18px*var(--scaling));--font-size-5:calc(20px*var(--scaling));--font-size-6:calc(24px*var(--scaling));--font-size-7:calc(28px*var(--scaling));--font-size-8:calc(35px*var(--scaling));--font-size-9:calc(60px*var(--scaling));--font-weight-light:300;--font-weight-regular:400;--font-weight-medium:500;--font-weight-bold:700;--line-height-1:calc(16px*var(--scaling));--line-height-2:calc(20px*var(--scaling));--line-height-3:calc(24px*var(--scaling));--line-height-4:calc(26px*var(--scaling));--line-height-5:calc(28px*var(--scaling));--line-height-6:calc(30px*var(--scaling));--line-height-7:calc(36px*var(--scaling));--line-height-8:calc(40px*var(--scaling));--line-height-9:calc(60px*var(--scaling));--letter-spacing-1:0.0025em;--letter-spacing-2:0em;--letter-spacing-3:0em;--letter-spacing-4:-0.0025em;--letter-spacing-5:-0.005em;--letter-spacing-6:-0.00625em;--letter-spacing-7:-0.0075em;--letter-spacing-8:-0.01em;--letter-spacing-9:-0.025em;--default-font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI (Custom)\",Roboto,\"Helvetica Neue\",\"Open Sans (Custom)\",system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\";--default-font-size:var(--font-size-3);--default-font-style:normal;--default-font-weight:var(--font-weight-regular);--default-line-height:1.5;--default-letter-spacing:0em;--default-leading-trim-start:0.42em;--default-leading-trim-end:0.36em;--heading-font-family:var(--default-font-family);--heading-font-size-adjust:1;--heading-font-style:normal;--heading-leading-trim-start:var(--default-leading-trim-start);--heading-leading-trim-end:var(--default-leading-trim-end);--heading-letter-spacing:0em;--heading-line-height-1:calc(16px*var(--scaling));--heading-line-height-2:calc(18px*var(--scaling));--heading-line-height-3:calc(22px*var(--scaling));--heading-line-height-4:calc(24px*var(--scaling));--heading-line-height-5:calc(26px*var(--scaling));--heading-line-height-6:calc(30px*var(--scaling));--heading-line-height-7:calc(36px*var(--scaling));--heading-line-height-8:calc(40px*var(--scaling));--heading-line-height-9:calc(60px*var(--scaling));--code-font-family:\"Menlo\",\"Consolas (Custom)\",\"Bitstream Vera Sans Mono\",monospace,\"Apple Color Emoji\",\"Segoe UI Emoji\";--code-font-size-adjust:0.95;--code-font-style:normal;--code-font-weight:inherit;--code-letter-spacing:-0.007em;--code-padding-top:0.1em;--code-padding-bottom:0.1em;--strong-font-family:var(--default-font-family);--strong-font-size-adjust:1;--strong-font-style:inherit;--strong-font-weight:var(--font-weight-bold);--strong-letter-spacing:0em;--em-font-family:\"Times New Roman\",\"Times\",serif;--em-font-size-adjust:1.18;--em-font-style:italic;--em-font-weight:inherit;--em-letter-spacing:-0.025em;--quote-font-family:\"Times New Roman\",\"Times\",serif;--quote-font-size-adjust:1.18;--quote-font-style:italic;--quote-font-weight:inherit;--quote-letter-spacing:-0.025em;--tabs-trigger-active-letter-spacing:-0.01em;--tabs-trigger-active-word-spacing:0em;--tabs-trigger-inactive-letter-spacing:0em;--tabs-trigger-inactive-word-spacing:0em;overflow-wrap:break-word;font-family:var(--default-font-family);font-size:var(--default-font-size);font-weight:var(--default-font-weight);font-style:var(--default-font-style);line-height:var(--default-line-height);letter-spacing:var(--default-letter-spacing);text-size-adjust:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--container-1:448px;--container-2:688px;--container-3:880px;--container-4:1136px;--scrollarea-scrollbar-horizontal-margin-top:var(--space-1);--scrollarea-scrollbar-horizontal-margin-bottom:var(--space-1);--scrollarea-scrollbar-horizontal-margin-left:var(--space-1);--scrollarea-scrollbar-horizontal-margin-right:var(--space-1);--scrollarea-scrollbar-vertical-margin-top:var(--space-1);--scrollarea-scrollbar-vertical-margin-bottom:var(--space-1);--scrollarea-scrollbar-vertical-margin-left:var(--space-1);--scrollarea-scrollbar-vertical-margin-right:var(--space-1);color:var(--gray-12)}[data-radius]{--radius-1:calc(3px*var(--scaling)*var(--radius-factor));--radius-2:calc(4px*var(--scaling)*var(--radius-factor));--radius-3:calc(6px*var(--scaling)*var(--radius-factor));--radius-4:calc(8px*var(--scaling)*var(--radius-factor));--radius-5:calc(12px*var(--scaling)*var(--radius-factor));--radius-6:calc(16px*var(--scaling)*var(--radius-factor))}[data-radius=medium]{--radius-factor:1;--radius-full:0px;--radius-thumb:9999px}.radix-themes:where([data-scaling=\"100%\"]){--scaling:1}@font-face{font-family:\"Segoe UI (Custom)\";font-weight:300;size-adjust:103%;descent-override:35%;ascent-override:105%;src:local(\"Segoe UI Semilight\"),local(\"Segoe UI\")}@font-face{font-family:\"Segoe UI (Custom)\";font-weight:300;font-style:italic;size-adjust:103%;descent-override:35%;ascent-override:105%;src:local(\"Segoe UI Semilight Italic\"),local(\"Segoe UI Italic\")}@font-face{font-family:\"Segoe UI (Custom)\";font-weight:400;size-adjust:103%;descent-override:35%;ascent-override:105%;src:local(\"Segoe UI\")}@font-face{font-family:\"Segoe UI (Custom)\";font-weight:400;font-style:italic;size-adjust:103%;descent-override:35%;ascent-override:105%;src:local(\"Segoe UI Italic\")}@font-face{font-family:\"Segoe UI (Custom)\";font-weight:500;size-adjust:103%;descent-override:35%;ascent-override:105%;src:local(\"Segoe UI Semibold\"),local(\"Segoe UI\")}@font-face{font-family:\"Segoe UI (Custom)\";font-weight:500;font-style:italic;size-adjust:103%;descent-override:35%;ascent-override:105%;src:local(\"Segoe UI Semibold Italic\"),local(\"Segoe UI Italic\")}@font-face{font-family:\"Segoe UI (Custom)\";font-weight:700;size-adjust:103%;descent-override:35%;ascent-override:105%;src:local(\"Segoe UI Bold\")}@font-face{font-family:\"Segoe UI (Custom)\";font-weight:700;font-style:italic;size-adjust:103%;descent-override:35%;ascent-override:105%;src:local(\"Segoe UI Bold Italic\")}@font-face{font-family:\"Open Sans (Custom)\";font-weight:300;descent-override:35%;src:local(\"Open Sans Light\"),local(\"Open Sans Regular\")}@font-face{font-family:\"Open Sans (Custom)\";font-weight:300;font-style:italic;descent-override:35%;src:local(\"Open Sans Light Italic\"),local(\"Open Sans Italic\")}@font-face{font-family:\"Open Sans (Custom)\";font-weight:400;descent-override:35%;src:local(\"Open Sans Regular\")}@font-face{font-family:\"Open Sans (Custom)\";font-weight:400;font-style:italic;descent-override:35%;src:local(\"Open Sans Italic\")}@font-face{font-family:\"Open Sans (Custom)\";font-weight:500;descent-override:35%;src:local(\"Open Sans Medium\"),local(\"Open Sans Regular\")}@font-face{font-family:\"Open Sans (Custom)\";font-weight:500;font-style:italic;descent-override:35%;src:local(\"Open Sans Medium Italic\"),local(\"Open Sans Italic\")}@font-face{font-family:\"Open Sans (Custom)\";font-weight:700;descent-override:35%;src:local(\"Open Sans Bold\")}@font-face{font-family:\"Open Sans (Custom)\";font-weight:700;font-style:italic;descent-override:35%;src:local(\"Open Sans Bold Italic\")}@font-face{font-family:\"Consolas (Custom)\";font-weight:400;size-adjust:110%;ascent-override:85%;descent-override:22%;src:local(\"Consolas\")}@font-face{font-family:\"Consolas (Custom)\";font-weight:400;font-style:italic;size-adjust:110%;ascent-override:85%;descent-override:22%;src:local(\"Consolas Italic\")}@font-face{font-family:\"Consolas (Custom)\";font-weight:700;size-adjust:110%;ascent-override:85%;descent-override:22%;src:local(\"Consolas Bold\")}@font-face{font-family:\"Consolas (Custom)\";font-weight:700;font-style:italic;size-adjust:110%;ascent-override:85%;descent-override:22%;src:local(\"Consolas Bold Italic\")}.rt-BaseButton:where(.rt-variant-classic):after{content:\"\";position:absolute;border-radius:inherit;pointer-events:none;inset:0;z-index:-1;border:var(--base-button-classic-after-inset) solid transparent;background-clip:content-box;background-color:inherit;background-image:linear-gradient(var(--black-a1),transparent,var(--white-a2));box-shadow:inset 0 2px 3px -1px var(--white-a4)}.rt-BaseButton:where(.rt-variant-classic):where(.rt-high-contrast):after{background-image:linear-gradient(var(--black-a3),transparent,var(--white-a2))}.rt-BaseButton:where(.rt-variant-classic):where(:focus-visible){outline:2px solid var(--color-focus-root);outline-offset:2px}@media (hover:hover){.rt-BaseButton:where(.rt-variant-classic):where(:hover):after{background-color:var(--accent-10);background-image:linear-gradient(var(--black-a2) -15%,transparent,var(--white-a3))}.rt-BaseButton:where(.rt-variant-classic):where(:hover):where(.rt-high-contrast){filter:var(--base-button-classic-high-contrast-hover-filter)}.rt-BaseButton:where(.rt-variant-classic):where(:hover):where(.rt-high-contrast):after{background-color:var(--accent-12);background-image:linear-gradient(var(--black-a5),transparent,var(--white-a2))}}.rt-BaseButton:where(.rt-variant-classic):where([data-state=open]):after{background-color:var(--accent-10);background-image:linear-gradient(var(--black-a2) -15%,transparent,var(--white-a3))}.rt-BaseButton:where(.rt-variant-classic):where([data-state=open]):where(.rt-high-contrast):after{background-color:var(--accent-12);background-image:linear-gradient(var(--black-a5),transparent,var(--white-a2))}.rt-BaseButton:where(.rt-variant-classic):where(:active:not([data-state=open],[data-disabled])){background-color:var(--accent-9);background-image:linear-gradient(var(--black-a1),transparent);padding-top:var(--base-button-classic-active-padding-top);box-shadow:inset 0 4px 2px -2px var(--gray-a4),inset 0 1px 1px var(--gray-a7),inset 0 0 0 1px var(--gray-a5),inset 0 0 0 1px var(--accent-9),inset 0 3px 2px var(--gray-a3),inset 0 0 0 1px var(--white-a7),inset 0-2px 1px var(--white-a5)}.rt-BaseButton:where(.rt-variant-classic):where(:active:not([data-state=open],[data-disabled])):after{box-shadow:none;background-color:inherit;background-image:linear-gradient(var(--black-a2),transparent,var(--white-a3))}.rt-BaseButton:where(.rt-variant-classic):where(:active:not([data-state=open],[data-disabled])):where(.rt-high-contrast){background-color:var(--accent-12);filter:var(--base-button-classic-high-contrast-active-filter);box-shadow:var(--base-button__classic-active__shadow-front-layer),inset 0 0 0 1px var(--accent-12),var(--base-button__classic-active__shadow-bottom-layer)}.rt-BaseButton:where(.rt-variant-classic):where(:active:not([data-state=open],[data-disabled])):where(.rt-high-contrast):after{background-image:linear-gradient(var(--black-a5),transparent,var(--white-a3))}.rt-BaseButton:where(.rt-variant-classic):where([data-disabled]):after{box-shadow:none;background-color:var(--gray-a2);background-image:linear-gradient(var(--black-a1) -20%,transparent,var(--white-a1))}@media (hover:hover){.rt-BaseButton:where(.rt-variant-solid):where(:hover){background-color:var(--accent-10)}}.rt-BaseButton:where(.rt-variant-solid):where(:active:not([data-state=open])){background-color:var(--accent-10);filter:var(--base-button-solid-active-filter)}.rt-BaseButton:where(.rt-variant-solid):where(:focus-visible){outline:2px solid var(--color-focus-root);outline-offset:2px}@media (hover:hover){.rt-BaseButton:where(.rt-variant-solid):where(.rt-high-contrast):where(:hover){background-color:var(--accent-12);filter:var(--base-button-solid-high-contrast-hover-filter)}}.rt-BaseButton:where(.rt-variant-solid):where(.rt-high-contrast):where(:active:not([data-state=open])){background-color:var(--accent-12);filter:var(--base-button-solid-high-contrast-active-filter)}.rt-BaseButton:where(.rt-variant-soft):where(:focus-visible){outline:2px solid var(--accent-8);outline-offset:-1px}@media (hover:hover){.rt-BaseButton:where(.rt-variant-soft):where(:hover){background-color:var(--accent-a4)}}.rt-BaseButton:where(.rt-variant-soft):where(:active:not([data-state=open])){background-color:var(--accent-a5)}@media (hover:hover){.rt-BaseButton:where(.rt-variant-ghost):where(:hover){background-color:var(--accent-a3)}}.rt-BaseButton:where(.rt-variant-ghost):where(:focus-visible){outline:2px solid var(--color-focus-root);outline-offset:-1px}.rt-BaseButton:where(.rt-variant-ghost):where(:active:not([data-state=open])){background-color:var(--accent-a4)}@media (hover:hover){.rt-BaseButton:where(.rt-variant-outline):where(:hover){background-color:var(--accent-a2)}}.rt-BaseButton:where(.rt-variant-outline):where(:active:not([data-state=open])){background-color:var(--accent-a3)}.rt-BaseButton:where(.rt-variant-outline):where(:focus-visible){outline:2px solid var(--color-focus-root);outline-offset:-1px}@media (hover:hover){.rt-BaseButton:where(.rt-variant-surface):where(:hover){box-shadow:inset 0 0 0 1px var(--accent-a8)}}.rt-BaseButton:where(.rt-variant-surface):where(:active:not([data-state=open])){background-color:var(--accent-a3);box-shadow:inset 0 0 0 1px var(--accent-a8)}.rt-BaseButton:where(.rt-variant-surface):where(:focus-visible){outline:2px solid var(--color-focus-root);outline-offset:-1px}.rt-Card:after{inset:0;position:absolute;pointer-events:none;border-radius:inherit;content:\"\"}.rt-Card:where(:focus-visible):after{outline:2px solid var(--color-focus-root);outline-offset:-1px}.rt-Card:where(.rt-variant-surface):after{border-radius:var(--card-after-border-radius);box-shadow:0 0 0 1px var(--gray-a5)}@supports (box-shadow:0 0 0 1px color-mix(in oklab,white,black)){.rt-Card:where(.rt-variant-surface):after{box-shadow:0 0 0 1px color-mix(in oklab,var(--gray-a5),var(--gray-5) 25%)}}@media (hover:hover){.rt-Card:where(.rt-variant-surface):where(button,[href]):where(:hover):after{box-shadow:0 0 0 1px var(--gray-a7)}@supports (box-shadow:0 0 0 1px color-mix(in oklab,white,black)){.rt-Card:where(.rt-variant-surface):where(button,[href]):where(:hover):after{box-shadow:0 0 0 1px color-mix(in oklab,var(--gray-a7),var(--gray-7) 25%)}}}.rt-Card:where(.rt-variant-surface):where(button,[href]):where(:active:not([data-state=open])):after{box-shadow:0 0 0 1px var(--gray-a7),0 0 0 1px var(--gray-a6)}@supports (box-shadow:0 0 0 1px color-mix(in oklab,white,black)){.rt-Card:where(.rt-variant-surface):where(button,[href]):where(:active:not([data-state=open])):after{box-shadow:0 0 0 1px color-mix(in oklab,var(--gray-a7),var(--gray-7) 25%),0 0 0 1px var(--gray-a5)}}.rt-Card:where(.rt-variant-surface):where(button,[href]):where(:active:not([data-state=open])):where(:focus-visible){background-color:var(--gray-a3)}.rt-Card:where(.rt-variant-classic):after{border-radius:var(--card-after-border-radius);box-shadow:0 0 0 1px var(--color-transparent),var(--shadow-2);transition:box-shadow .12s}@media (hover:hover){.rt-Card:where(.rt-variant-classic):where(button,[href]):where(:hover):after{transition-duration:40ms;box-shadow:var(--card-classic-hover-box-shadow)}}.rt-Card:where(.rt-variant-classic):where(button,[href]):where(:active:not([data-state=open])):after{transition-duration:40ms;box-shadow:0 0 0 1px var(--gray-a5),var(--shadow-2)}.rt-Card:where(.rt-variant-classic):where(button,[href]):where(:active:not([data-state=open])):where(:focus-visible){background-color:var(--gray-a3)}@media (hover:hover){.rt-Card:where(.rt-variant-ghost):where(button,[href]):where(:hover){background-color:var(--gray-a3)}}.rt-Card:where(.rt-variant-ghost):where(button,[href]):where(:active:not([data-state=open])){background-color:var(--gray-a4)}.rt-CheckboxButton:where(:focus-visible){outline:2px solid var(--color-focus-root);outline-offset:2px}.rt-CheckboxButton:where(.rt-variant-soft):where(:focus-visible){outline-color:var(--accent-a8)}:where(.rt-Link:has(.rt-Code:where(.rt-variant-ghost):only-child)):where(:focus-visible) .rt-Code{text-decoration:none;outline:2px solid var(--color-focus-root);outline-offset:2px}.rt-Code:where(.rt-variant-solid)::selection{background-color:var(--accent-7);color:var(--accent-12)}@media (hover:hover){:where(.rt-Link:has(.rt-Code:where(.rt-variant-solid):only-child)) .rt-Code:where(:hover){background-color:var(--accent-10)}:where(.rt-Link:has(.rt-Code:where(.rt-variant-solid):only-child)) .rt-Code:where(.rt-high-contrast:hover){background-color:var(--accent-12);filter:var(--base-button-solid-high-contrast-hover-filter)}}:where(.rt-Link:has(.rt-Code:where(.rt-variant-solid):only-child)):where(:focus-visible) .rt-Code{outline:2px solid var(--color-focus-root);outline-offset:2px}@media (hover:hover){:where(.rt-Link:has(.rt-Code:where(.rt-variant-soft):only-child)) .rt-Code:where(:hover){background-color:var(--accent-a4)}}:where(.rt-Link:has(.rt-Code:where(.rt-variant-soft):only-child)):where(:focus-visible) .rt-Code{outline:2px solid var(--accent-8);outline-offset:-1px}@media (hover:hover){:where(.rt-Link:has(.rt-Code:where(.rt-variant-outline):only-child)) .rt-Code:where(:hover){background-color:var(--accent-a2)}}:where(.rt-Link:has(.rt-Code:where(.rt-variant-outline):only-child)):where(:focus-visible) .rt-Code{outline:2px solid var(--color-focus-root);outline-offset:-1px}.rt-DialogOverlay:after{content:\"\";position:absolute;inset:0;background-color:var(--color-overlay)}@media (prefers-reduced-motion:no-preference){@keyframes rt-dialog-overlay-no-op{0%{opacity:1}to{opacity:1}}@keyframes rt-dialog-content-show{0%{opacity:0;transform:translateY(5px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes rt-dialog-content-hide{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(5px) scale(.99)}}.rt-DialogOverlay:where([data-state=open]):after{animation:rt-fade-in .4s cubic-bezier(.16,1,.3,1)}.rt-DialogOverlay:where([data-state=closed]):after{animation:rt-fade-out .25s cubic-bezier(.16,1,.3,1)}}@media (hover:hover){.rt-Link:where(.rt-underline-auto):where(:hover){-webkit-text-decoration-line:underline;text-decoration-line:underline}}@media (hover:hover){.rt-Link:where(.rt-underline-hover):where(:hover){-webkit-text-decoration-line:underline;text-decoration-line:underline}}.rt-Link:where(:focus-visible){-webkit-text-decoration-line:none;text-decoration-line:none;outline-color:var(--color-focus-root);outline-width:2px;outline-style:solid;outline-offset:2px}.rt-RadioGroupButton:where(:focus-visible){outline:2px solid var(--color-focus-root);outline-offset:2px}.rt-RadioGroupRoot:where(.rt-variant-soft) :where(.rt-RadioGroupButton:focus-visible){outline-color:var(--accent-a8)}.rt-ScrollAreaViewport:where(:focus-visible)+:where(.rt-ScrollAreaViewportFocusRing){position:absolute;inset:0;pointer-events:none;outline:2px solid var(--color-focus-root);outline-offset:-2px}.rt-ScrollAreaThumb:before{content:\"\";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:100%;height:100%;min-width:var(--space-4);min-height:var(--space-4)}@media (hover:hover){.rt-ScrollAreaThumb:where(:hover){background-color:var(--gray-a9)}}.rt-SelectTrigger:where(:focus-visible){outline:2px solid var(--color-focus-root);outline-offset:-1px}@media (hover:hover){.rt-SelectTrigger:where(.rt-variant-surface):where(:hover){box-shadow:inset 0 0 0 1px var(--gray-a8)}}.rt-SelectTrigger:where(.rt-variant-classic):before{content:\"\";position:absolute;z-index:-1;inset:0;border:2px solid transparent;background-clip:content-box;border-radius:inherit;pointer-events:none;background-image:linear-gradient(var(--black-a1) -20%,transparent,var(--white-a1) 130%),linear-gradient(var(--color-surface),transparent)}@media (hover:hover){.rt-SelectTrigger:where(.rt-variant-classic):where(:hover){box-shadow:inset 0 0 0 1px var(--gray-a3),var(--select-trigger-classic-box-shadow)}.rt-SelectTrigger:where(.rt-variant-classic):where(:hover):before{background-image:linear-gradient(var(--black-a1) -15%,transparent,var(--white-a1) 120%),linear-gradient(var(--gray-2),var(--gray-1))}}.rt-SelectTrigger:where(.rt-variant-classic):where([data-state=open]):before{background-image:linear-gradient(var(--black-a1) -15%,transparent,var(--white-a1) 120%),linear-gradient(var(--gray-2),var(--gray-1))}.rt-SelectTrigger:where(.rt-variant-classic):where(:disabled):before{background-image:linear-gradient(var(--black-a1) -20%,transparent,var(--white-a1) 130%),linear-gradient(var(--color-surface),transparent)}@media (hover:hover){.rt-SelectTrigger:where(.rt-variant-soft):where(:hover){background-color:var(--accent-a4)}}.rt-SelectTrigger:where(.rt-variant-soft):where(:focus-visible){outline-color:var(--accent-8)}@media (hover:hover){.rt-SelectTrigger:where(.rt-variant-ghost):where(:hover){background-color:var(--accent-a3)}}.rt-SliderThumb:before{content:\"\";position:absolute;z-index:-1;width:calc(var(--slider-thumb-size)*3);height:calc(var(--slider-thumb-size)*3);top:50%;left:50%;transform:translate(-50%,-50%)}.rt-SliderThumb:after{content:\"\";position:absolute;inset:calc(-.25*var(--slider-track-size));background-color:#fff;border-radius:max(var(--radius-1),var(--radius-thumb));box-shadow:var(--slider-thumb-box-shadow);cursor:var(--cursor-slider-thumb)}.rt-SliderThumb:where(:focus-visible):after{box-shadow:var(--slider-thumb-box-shadow),0 0 0 3px var(--accent-3),0 0 0 5px var(--color-focus-root)}.rt-SliderThumb:where(:active){cursor:var(--cursor-slider-thumb-active)}.rt-SliderRoot:where(.rt-variant-surface) :where(.rt-SliderThumb):where([data-disabled]):after{background-color:var(--gray-1);box-shadow:0 0 0 1px var(--gray-6)}.rt-SliderRoot:where(.rt-variant-classic) :where(.rt-SliderTrack):before{content:\"\";inset:0;position:absolute;border-radius:inherit;box-shadow:var(--shadow-1)}.rt-SliderRoot:where(.rt-variant-classic) :where(.rt-SliderTrack):where([data-disabled]):before{opacity:.5}.rt-SliderRoot:where(.rt-variant-classic) :where(.rt-SliderThumb):where([data-disabled]):after{background-color:var(--gray-1);box-shadow:0 0 0 1px var(--gray-6)}.rt-SliderRoot:where(.rt-variant-soft) :where(.rt-SliderThumb):where([data-disabled]):after{background-color:var(--gray-1);box-shadow:0 0 0 1px var(--gray-5)}.rt-Skeleton:after,.rt-Skeleton:before{visibility:hidden!important}@keyframes rt-skeleton-pulse{0%{background-color:var(--gray-a3)}to{background-color:var(--gray-a4)}}.rt-SwitchButton:before{content:\"\";position:absolute;inset:0;pointer-events:none;border-radius:inherit;transition:background-position,background-color,box-shadow,filter;transition-timing-function:linear,ease-in-out,ease-in-out,ease-in-out;background-repeat:no-repeat;background-size:calc(var(--switch-width)*2 + var(--switch-height)) 100%}.rt-SwitchButton:where([data-state=unchecked]):before{transition-duration:.12s,.14s,.14s,.14s;background-position-x:100%}.rt-SwitchButton:where([data-state=checked]):before{transition-duration:.16s,.14s,.14s,.14s;background-position:0}.rt-SwitchButton:where(:active):before{transition-duration:30ms}.rt-SwitchButton:where(:focus-visible){outline:2px solid var(--color-focus-root);outline-offset:2px}.rt-SwitchRoot:where(.rt-variant-surface) :where(.rt-SwitchButton):before{background-color:var(--gray-a3);background-image:linear-gradient(to right,var(--accent-9) 40%,transparent 60%);box-shadow:inset 0 0 0 1px var(--gray-a5)}.rt-SwitchRoot:where(.rt-variant-surface) :where(.rt-SwitchButton):where(:active):before{background-color:var(--gray-a4)}.rt-SwitchRoot:where(.rt-variant-surface) :where(.rt-SwitchButton):where([data-state=checked]:active):before{filter:var(--switch-button-surface-checked-active-filter)}.rt-SwitchRoot:where(.rt-variant-surface) :where(.rt-SwitchButton):where(.rt-high-contrast):before{background-image:linear-gradient(to right,var(--switch-button-high-contrast-checked-color-overlay) 40%,transparent 60%),linear-gradient(to right,var(--accent-9) 40%,transparent 60%)}.rt-SwitchRoot:where(.rt-variant-surface) :where(.rt-SwitchButton):where(.rt-high-contrast):where([data-state=checked]:active):before{filter:var(--switch-button-high-contrast-checked-active-before-filter)}.rt-SwitchRoot:where(.rt-variant-surface) :where(.rt-SwitchButton):where([data-disabled]):before{filter:none;background-image:none;background-color:var(--gray-a3);box-shadow:inset 0 0 0 1px var(--gray-a3)}.rt-SwitchRoot:where(.rt-variant-classic) :where(.rt-SwitchButton):before{background-image:linear-gradient(to right,var(--accent-9) 40%,transparent 60%);background-color:var(--gray-a4);box-shadow:var(--shadow-1)}.rt-SwitchRoot:where(.rt-variant-classic) :where(.rt-SwitchButton):where([data-state=unchecked]:active):before{background-color:var(--gray-a5)}.rt-SwitchRoot:where(.rt-variant-classic) :where(.rt-SwitchButton):where([data-state=checked]):before{box-shadow:inset 0 0 0 1px var(--gray-a3),inset 0 0 0 1px var(--accent-a4),inset 0 0 0 1px var(--black-a1),inset 0 1.5px 2px 0 var(--black-a2)}.rt-SwitchRoot:where(.rt-variant-classic) :where(.rt-SwitchButton):where([data-state=checked]:active):before{filter:var(--switch-button-surface-checked-active-filter)}.rt-SwitchRoot:where(.rt-variant-classic) :where(.rt-SwitchButton):where(.rt-high-contrast):before{box-shadow:inset 0 0 0 1px var(--gray-a3),inset 0 0 0 1px var(--black-a2),inset 0 1.5px 2px 0 var(--black-a2);background-image:linear-gradient(to right,var(--switch-button-high-contrast-checked-color-overlay) 40%,transparent 60%),linear-gradient(to right,var(--accent-9) 40%,transparent 60%)}.rt-SwitchRoot:where(.rt-variant-classic) :where(.rt-SwitchButton):where(.rt-high-contrast):where([data-state=checked]:active):before{filter:var(--switch-button-high-contrast-checked-active-before-filter)}.rt-SwitchRoot:where(.rt-variant-classic) :where(.rt-SwitchButton):where([data-disabled]):before{filter:none;background-image:none;background-color:transparent;box-shadow:var(--shadow-1);opacity:.5}.rt-SwitchRoot:where(.rt-variant-soft) :where(.rt-SwitchButton):before{background-image:linear-gradient(to right,var(--accent-a4) 40%,transparent 60%),linear-gradient(to right,var(--accent-a4) 40%,transparent 60%),linear-gradient(to right,var(--accent-a4) 40%,var(--white-a1) 60%),linear-gradient(to right,var(--gray-a2) 40%,var(--gray-a3) 60%)}.rt-SwitchRoot:where(.rt-variant-soft) :where(.rt-SwitchButton):where([data-state=unchecked]):before{background-color:var(--gray-a3)}.rt-SwitchRoot:where(.rt-variant-soft) :where(.rt-SwitchButton):where(:active):before{background-color:var(--gray-a4)}.rt-SwitchRoot:where(.rt-variant-soft) :where(.rt-SwitchButton):where(.rt-high-contrast):before{background-image:linear-gradient(to right,var(--switch-button-high-contrast-checked-color-overlay) 40%,transparent 60%),linear-gradient(to right,var(--accent-a6) 40%,transparent 60%),linear-gradient(to right,var(--accent-a6) 40%,transparent 60%),linear-gradient(to right,var(--accent-a6) 40%,var(--white-a1) 60%),linear-gradient(to right,var(--accent-a3) 40%,var(--gray-a3) 60%)}.rt-SwitchRoot:where(.rt-variant-soft) :where(.rt-SwitchButton):where(.rt-high-contrast):where([data-state=checked]:active):before{filter:var(--switch-button-high-contrast-checked-active-before-filter)}.rt-SwitchRoot:where(.rt-variant-soft) :where(.rt-SwitchButton):where([data-disabled]):before{filter:none;background-image:none;background-color:var(--gray-a4)}.rt-TabsList::-webkit-scrollbar{display:none}@media (hover:hover){.rt-TabsTrigger:where(:hover){color:var(--gray-12)}.rt-TabsTrigger:where(:hover) :where(.rt-TabsTriggerInner){background-color:var(--gray-a3)}.rt-TabsTrigger:where(:focus-visible:hover) :where(.rt-TabsTriggerInner){background-color:var(--accent-a3)}}.rt-TabsTrigger:where(:focus-visible) :where(.rt-TabsTriggerInner){outline:2px solid var(--color-focus-root);outline-offset:-2px}.rt-TabsTrigger:where([data-state=active]):before{box-sizing:border-box;content:\"\";height:2px;position:absolute;bottom:0;left:0;right:0;background-color:var(--accent-10)}.rt-TabsContent:where(:focus-visible){outline:2px solid var(--color-focus-root)}.rt-TextAreaInput:where(:focus){outline:2px solid var(--color-focus-root);outline-offset:-1px}.rt-TextAreaInput::-webkit-scrollbar{width:var(--space-3);height:var(--space-3)}.rt-TextAreaInput::-webkit-scrollbar-thumb,.rt-TextAreaInput::-webkit-scrollbar-track{background-clip:content-box;border:var(--space-1) solid transparent;border-radius:var(--space-3)}.rt-TextAreaInput::-webkit-scrollbar-track{background-color:var(--gray-a3)}.rt-TextAreaInput::-webkit-scrollbar-thumb{background-color:var(--gray-a8)}@media (hover:hover){:where(.rt-TextAreaInput:not(:disabled))::-webkit-scrollbar-thumb:hover{background-color:var(--gray-a9)}}.rt-TextAreaRoot:where(.rt-variant-surface) :where(.rt-TextAreaInput)::placeholder{color:var(--gray-a10);opacity:1}.rt-TextAreaRoot:where(.rt-variant-classic) :where(.rt-TextAreaInput)::placeholder{color:var(--gray-a10);opacity:1}.rt-TextAreaRoot:where(.rt-variant-soft) :where(.rt-TextAreaInput)::selection{background-color:var(--accent-a5)}.rt-TextAreaRoot:where(.rt-variant-soft) :where(.rt-TextAreaInput)::placeholder{color:var(--accent-12);opacity:.65}.rt-TextAreaRoot:where(.rt-variant-soft) :where(.rt-TextAreaInput):where(:focus){outline-color:var(--accent-8)}.rt-TextAreaInput:where(:disabled,:-moz-read-only):where(:focus){outline:2px solid var(--gray-8)}.rt-TextAreaInput:where(:disabled,:read-only):where(:focus){outline:2px solid var(--gray-8)}.rt-TextAreaInput:where(:disabled,:-moz-read-only)::placeholder{opacity:.5}.rt-TextAreaInput:where(:disabled,:read-only)::placeholder{opacity:.5}.rt-TextAreaInput:where(:disabled,:-moz-read-only)::selection{background-color:var(--gray-a5)}.rt-TextAreaInput:where(:disabled,:read-only)::selection{background-color:var(--gray-a5)}:where(.rt-TextFieldInput:focus)+.rt-TextFieldChrome{outline:2px solid var(--color-focus-root);outline-offset:-1px}.rt-TextFieldInput:where(.rt-variant-surface)::placeholder{color:var(--gray-a10);opacity:1}.rt-TextFieldInput:where(.rt-variant-classic)::placeholder{color:var(--gray-a10);opacity:1}.rt-TextFieldInput:where(.rt-variant-soft)::placeholder{color:var(--accent-12);opacity:.6}.rt-TextFieldInput:where(.rt-variant-soft):where(:focus)+:where(.rt-TextFieldChrome){outline-color:var(--accent-8)}.rt-TextFieldInput:where(.rt-variant-soft)::selection{background-color:var(--accent-a5)}.rt-TextFieldInput:where(:disabled,:-moz-read-only):where(:focus)+:where(.rt-TextFieldChrome){outline:2px solid var(--gray-8)}.rt-TextFieldInput:where(:disabled,:read-only):where(:focus)+:where(.rt-TextFieldChrome){outline:2px solid var(--gray-8)}.rt-TextFieldInput:where(:disabled,:-moz-read-only)::placeholder{opacity:.5}.rt-TextFieldInput:where(:disabled,:read-only)::placeholder{opacity:.5}.rt-TextFieldInput:where(:disabled,:-moz-read-only)::selection{background-color:var(--gray-a5)}.rt-TextFieldInput:where(:disabled,:read-only)::selection{background-color:var(--gray-a5)}@media{.rt-r-lt-end:before,.rt-r-lt-normal:after,.rt-r-lt-normal:before,.rt-r-lt-start:after{content:none}.rt-r-lt-both:after,.rt-r-lt-both:before,.rt-r-lt-end:after,.rt-r-lt-start:before{content:\"\";display:table}.rt-r-lt-both:before,.rt-r-lt-start:before{margin-bottom:calc(var(--leading-trim-start,var(--default-leading-trim-start)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}.rt-r-lt-both:after,.rt-r-lt-end:after{margin-top:calc(var(--leading-trim-end,var(--default-leading-trim-end)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}}@media (min-width:520px){.xs\\:rt-r-lt-end:before,.xs\\:rt-r-lt-normal:after,.xs\\:rt-r-lt-normal:before,.xs\\:rt-r-lt-start:after{content:none}.xs\\:rt-r-lt-both:after,.xs\\:rt-r-lt-both:before,.xs\\:rt-r-lt-end:after,.xs\\:rt-r-lt-start:before{content:\"\";display:table}.xs\\:rt-r-lt-both:before,.xs\\:rt-r-lt-start:before{margin-bottom:calc(var(--leading-trim-start,var(--default-leading-trim-start)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}.xs\\:rt-r-lt-both:after,.xs\\:rt-r-lt-end:after{margin-top:calc(var(--leading-trim-end,var(--default-leading-trim-end)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}}@media (min-width:768px){.sm\\:rt-r-lt-end:before,.sm\\:rt-r-lt-normal:after,.sm\\:rt-r-lt-normal:before,.sm\\:rt-r-lt-start:after{content:none}.sm\\:rt-r-lt-both:after,.sm\\:rt-r-lt-both:before,.sm\\:rt-r-lt-end:after,.sm\\:rt-r-lt-start:before{content:\"\";display:table}.sm\\:rt-r-lt-both:before,.sm\\:rt-r-lt-start:before{margin-bottom:calc(var(--leading-trim-start,var(--default-leading-trim-start)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}.sm\\:rt-r-lt-both:after,.sm\\:rt-r-lt-end:after{margin-top:calc(var(--leading-trim-end,var(--default-leading-trim-end)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}}@media (min-width:1024px){.md\\:rt-r-lt-end:before,.md\\:rt-r-lt-normal:after,.md\\:rt-r-lt-normal:before,.md\\:rt-r-lt-start:after{content:none}.md\\:rt-r-lt-both:after,.md\\:rt-r-lt-both:before,.md\\:rt-r-lt-end:after,.md\\:rt-r-lt-start:before{content:\"\";display:table}.md\\:rt-r-lt-both:before,.md\\:rt-r-lt-start:before{margin-bottom:calc(var(--leading-trim-start,var(--default-leading-trim-start)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}.md\\:rt-r-lt-both:after,.md\\:rt-r-lt-end:after{margin-top:calc(var(--leading-trim-end,var(--default-leading-trim-end)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}}@media (min-width:1280px){.lg\\:rt-r-lt-end:before,.lg\\:rt-r-lt-normal:after,.lg\\:rt-r-lt-normal:before,.lg\\:rt-r-lt-start:after{content:none}.lg\\:rt-r-lt-both:after,.lg\\:rt-r-lt-both:before,.lg\\:rt-r-lt-end:after,.lg\\:rt-r-lt-start:before{content:\"\";display:table}.lg\\:rt-r-lt-both:before,.lg\\:rt-r-lt-start:before{margin-bottom:calc(var(--leading-trim-start,var(--default-leading-trim-start)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}.lg\\:rt-r-lt-both:after,.lg\\:rt-r-lt-end:after{margin-top:calc(var(--leading-trim-end,var(--default-leading-trim-end)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}}@media (min-width:1640px){.xl\\:rt-r-lt-end:before,.xl\\:rt-r-lt-normal:after,.xl\\:rt-r-lt-normal:before,.xl\\:rt-r-lt-start:after{content:none}.xl\\:rt-r-lt-both:after,.xl\\:rt-r-lt-both:before,.xl\\:rt-r-lt-end:after,.xl\\:rt-r-lt-start:before{content:\"\";display:table}.xl\\:rt-r-lt-both:before,.xl\\:rt-r-lt-start:before{margin-bottom:calc(var(--leading-trim-start,var(--default-leading-trim-start)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}.xl\\:rt-r-lt-both:after,.xl\\:rt-r-lt-end:after{margin-top:calc(var(--leading-trim-end,var(--default-leading-trim-end)) - var(--line-height,calc(1em*var(--default-line-height)))/2)}}.rt-ThemePanelShortcut:where(:focus-visible){outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--accent-9)}.rt-ThemePanelSwatchInput:where(:focus-visible){outline-style:solid;outline-color:var(--accent-9)}.rt-ThemePanelRadioCardInput:where(:focus-visible){background-color:var(--accent-a3);outline-style:solid;outline-color:var(--accent-9)}:root{--color-accent:#f2d123;--color-accent-emphasis:#e2b810;--color-bg-inset:#f0efea;--color-bg-inset-emphasis:#e1ded1;--docsearch-searchbox-background:var(--color-bg-inset);--docsearch-primary-color:var(--color-accent);--docsearch-key-shadow:none;--docsearch-key-gradient:transparent;--width-readable:800px}[data-accent-color=yellow]{--accent-9:var(--color-accent)!important}.radix-themes{--default-font-size:18px}/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}footer,header,nav{display:block}template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}h1{margin:.67em 0}svg:not(:root){overflow:hidden}kbd{font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}button,select{font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.container{position:relative;margin:0 auto;padding:0 20px}.columns,.container{width:100%;box-sizing:border-box}.columns{float:left}@media (min-width:400px){.container{width:85%;padding:0}}@media (min-width:550px){.container{width:80%}.columns{margin-left:4%}.columns:first-child{margin-left:0}}body{font-size:1.5em;line-height:1.6;font-weight:400;color:#222}h1,h2{margin-top:0;margin-bottom:2rem}h1{line-height:1.2}h1,h2{letter-spacing:-.1rem}h2{line-height:1.25}@media (min-width:550px){h1{font-size:5rem}h2{font-size:4.2rem}}p{margin-top:0}ul{padding-left:0;margin-top:0}li{margin-bottom:1rem}hr{border-width:0}hr,p,ul{margin-bottom:2.5rem}.container:after,.row:after{content:\"\";display:table;clear:both}@font-face{font-family:Sofia Pro;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:Sofia Pro;font-weight:700;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:Sailec Light;src:url(data:font/woff2;base64,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)format(\"woff2\")}@font-face{font-family:Sailec Light;font-weight:700;src:url(data:font/woff2;base64,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)format(\"woff2\")}html{font-size:12px;scroll-padding-top:98px}*{box-sizing:border-box}body{overflow-x:hidden}a{text-decoration:none;color:inherit}h1,h2{font-family:Sofia Pro,sans-serif;font-weight:400}hr{border-top:1px solid #d9dce1}li{list-style:none}button{background-color:transparent;cursor:pointer;font-size:11px;outline:none;text-align:center}strong{font-weight:700}svg .logo{fill:#1d1e30}svg .feat-1{fill:#f2d123}svg .feat-2{fill:#e3a931}svg .feat-3{fill:#4f5363}.action{background-color:#f2d123;border:2px solid transparent;font-family:Sofia Pro,sans-serif;font-weight:700;letter-spacing:.15rem;text-transform:uppercase;transition:background-color .1s,border-color .1s,color .1s}.action,.logo{display:inline-block}.logo{height:6.3em;vertical-align:middle;width:10.5em}.container{max-width:1200px}.arrow{padding:.33em .67em}.arrow .shaft{background-color:#000;border-bottom:3px solid #fff;border-top:3px solid #fff;float:left;height:.33em;width:.66em}.arrow .tip{display:inline-block;border-bottom:.17em solid transparent;border-top:.17em solid transparent}.arrow,.next,.prev{display:inline-block;height:1em;line-height:1em}.prev{float:left}.prev:hover .arrow{padding-left:.77em;padding-right:.57em}.prev .arrow{float:left}.prev .tip{float:left;border-right:.33em solid #000}.next,.next .arrow{float:right}.next .arrow:hover .arrow,.next .label:hover .arrow,.next:hover .arrow{padding-left:.57em;padding-right:.77em}.next .arrow{float:right}.next .arrow .tip,.next .tip{float:right;border-left:.33em solid #000}header{font-family:Sofia Pro,sans-serif;text-align:center}.new-blog:after{background-color:#f2d123;border-radius:6px;color:#1d1e30;content:\"new\";font-size:.8rem;font-weight:700;margin-left:5px;padding:1px 6px 1px 7px;text-transform:uppercase}.navbar-list .navbar-item.active .navbar-link:before{transform:scaleX(1);visibility:visible}.navbar-list .download-item .action:hover{background-color:#1d1e30;color:#fff}.action-link{position:relative}footer{font-size:1.5rem;background-color:#1d1e30;color:#fff;margin-top:5.5em;padding-bottom:5.5em;padding-top:7.5em;text-align:center}footer h1{font-family:Sailec Light,sans-serif;font-size:3.75rem;letter-spacing:.2rem;margin-bottom:1.67em;margin-top:1.67em}footer .actions.row{text-align:center}footer .action,footer .actions.row{display:flex;justify-content:center}footer .action{font-size:1.5rem;height:4.44em;align-items:center;margin:1.4em;vertical-align:middle;width:14.5em}footer .action.documentation{background-color:#1d1e30;border-color:#f2d123;color:#f2d123}footer .action:hover{background-color:#fff;border-color:transparent;color:#1d1e30}footer .logo{width:10em}footer .logo circle,footer .logo path{fill:#fff}#above-container{background-color:#f4f5f5;position:relative}#above-container>.container{height:840px}#announcement-container{font-family:Sofia Pro,sans-serif;margin-top:25px;position:absolute;text-align:center;width:100%;z-index:1}#users-container{font-size:1.25rem;left:0;padding-bottom:.53em;padding-top:5.53em;position:absolute;text-align:center;top:0;width:100%}#users-container h1{font-size:5rem;margin-bottom:.25em}#users-container h2{font-size:4rem}#users-container .next,#users-container .prev{font-size:.75em;border:none;height:1.33em}#logo-container{list-style:none;margin:4em 0;text-transform:uppercase}#logo-container li{display:inline-block;height:100%;line-height:100%;margin:0 1.4em;vertical-align:middle}#logo-container li:first-child{font-size:1.08rem}#logo-container li:not(:first-child){width:3em}#logo-container a{display:block}#logo-container svg{max-height:3em;max-width:3em}#laptop-container{background-color:#000;border:4px solid #707070;border-bottom:0;border-top-left-radius:40px;border-top-right-radius:40px;box-shadow:0 0 40px 2px rgba(28,31,47,.1);font-size:1.5rem;padding:20px 20px 0;position:absolute;width:100%}#above-container:not(.demo-active) #laptop-container:hover{bottom:-135px}#camera-container{background-color:#000;border-bottom-left-radius:8px;border-bottom-right-radius:8px;left:50%;line-height:26px;margin-left:-90px;position:absolute;text-align:center;width:180px;z-index:1}#camera-container .camera{cursor:pointer;display:inline-block;height:30px;width:30px}#camera-container .camera .dot{background-color:#707070;border-radius:4px;display:inline-block;height:8px;width:8px}#camera-container .camera.active .dot{background-color:#2dc937}#demo-container{background-color:#fff;border-top-left-radius:20px;border-top-right-radius:20px;overflow:hidden;width:100%}#demo-container h1{font-size:3rem}#demo-container h2{font-size:2rem}#above-container.demo-active #demo-container,#demo-container:hover{opacity:1}#carousel-container{font-size:1.5rem;margin-top:30px;transition:margin .5s ease-in-out 0s;width:300%}#carousel-container:after{clear:both;content:\"\";display:table}#demo-container .ql-snow{border:none}#demo-container .ql-snow a:active,#demo-container .ql-snow a:hover{color:#06c}#bubble-wrapper .ql-editor{padding:10% 10% 25px}#snow-wrapper{padding:10px 20px 0}#snow-wrapper .ql-editor{padding:0 17% 25px}#demo-container #bubble-container,#demo-container #full-container,#demo-container #snow-container{display:flex;flex-flow:column;height:100%}#demo-container #bubble-container .ql-container,#demo-container #full-container .ql-container,#demo-container #snow-container .ql-container{flex:2 1;overflow:hidden}#bubble-wrapper,#full-wrapper,#snow-wrapper{display:inline-block;float:left;height:595px;width:33.33%}#snow-wrapper .toolbar{border:none;padding:4.5% 16%}#full-wrapper .ql-toolbar{border-bottom:1px solid #ccc}#full-wrapper .ql-editor{padding:5% 8% 25px}#above-container.demo-active #users-container h2{display:inline-block}#above-container.demo-active #users-container ul{transition:opacity .5s linear 0s;opacity:0}#above-container.demo-active #demo-container .ql-editor{overflow-y:auto}#above-container.demo-active #laptop-container{transition:bottom .5s ease-in-out 0s;bottom:0}#detail-container{background-color:#fff;font-size:1.5rem;margin-top:-5px;position:relative;text-align:center;z-index:5}#detail-container .action{display:inline-block;font-size:1.5rem;letter-spacing:.25rem;margin-bottom:2em;margin-top:6.89em;padding:1.5em 2.78em}#detail-container .action:hover{background-color:#1d1e30;color:#fff}#detail-container h1{font-family:Sailec Light,sans-serif;letter-spacing:.2rem;font-size:3.33rem}#features-container{background-color:#fff;padding-top:5.83em;position:relative;z-index:10}#features-container .feature{padding:1.4em 1.4em 5.56em}#features-container #github-wrapper{height:3.33em;margin:0 auto;position:relative;text-align:center;width:18em}#features-container .feature.columns:last-child{border-left:1px solid #d9dce1}#features-container .feature.row{margin-top:5.56em}.feature.columns,.feature.row .columns{width:48%}.feature.row{display:block}.feature .details{padding:1.7em 0 1.8em 3.5em}#features-container #github-container{background-color:#fff;margin-left:1.8em;margin-top:-1.67em}#gallery-container a:hover .pen-label{opacity:.75;padding-bottom:18px;padding-top:18px}#features-container #github-wrapper+hr{margin-top:0;width:85%}.feature .action-link{display:inline-block;font-family:Sofia Pro,sans-serif;font-size:1.25rem;font-weight:700;letter-spacing:.15rem;margin-top:2.5em;text-transform:uppercase}.feature .details>h2{font-size:2.33rem;font-weight:700;letter-spacing:.4rem;text-transform:uppercase}.feature .details>span{display:block;font-size:1.33rem;letter-spacing:.1rem;line-height:200%;padding-right:2em}#demo-container .ql-editor,#demo-container .ql-editor h1,#demo-container .ql-editor h2,#demo-container .ql-toolbar{font-family:Sailec Light,sans-serif}#demo-container .ql-toolbar .ql-picker-label{font-size:15px}#demo-container .ql-snow .ql-header.ql-picker{width:115px}#demo-container .ql-snow .ql-font.ql-picker{width:132px}#demo-container .ql-snow .ql-picker.ql-font .ql-picker-label:not([data-label]):before{content:\"Sailec Light\"}#demo-container .ql-snow .ql-font .ql-picker-item[data-value=sofia]:before,#demo-container .ql-snow .ql-font .ql-picker-label[data-value=sofia]:not([data-label]):before{content:\"Sofia Pro\";font-family:Sofia Pro,sans-serif}#demo-container .ql-snow .ql-font .ql-picker-item[data-value=slabo]:before,#demo-container .ql-snow .ql-font .ql-picker-label[data-value=slabo]:not([data-label]):before{content:\"Slabo 13px\";font-family:Slabo\\ 13px,sans-serif}#demo-container .ql-snow .ql-font .ql-picker-item[data-value=roboto]:before,#demo-container .ql-snow .ql-font .ql-picker-label[data-value=roboto]:not([data-label]):before{content:\"Roboto Slab\";font-family:Roboto Slab,serif}#demo-container .ql-snow .ql-font .ql-picker-item[data-value=inconsolata]:before,#demo-container .ql-snow .ql-font .ql-picker-label[data-value=inconsolata]:not([data-label]):before{content:\"Inconsolata\";font-family:Inconsolata,monospace}#demo-container .ql-snow .ql-font .ql-picker-item[data-value=ubuntu]:before,#demo-container .ql-snow .ql-font .ql-picker-label[data-value=ubuntu]:not([data-label]):before{content:\"Ubuntu Mono\";font-family:Ubuntu Mono,monospace}#demo-container .ql-editor{font-size:1.5em}#demo-container .ql-editor .ql-code-block-container{font-family:Inconsolata,monospace;font-size:.8em}body:not(.home) .feature h2{margin-bottom:1.5em}body:not(.home) .navbar-list .download-item .action:hover{background-color:#fff;border-color:#fff;color:#1d1e30}body:not(.home) .navbar-link:before{background-color:#fff}.experimental:hover:after,.experimental:hover:before{visibility:visible}.experimental:after,.experimental:before{top:0;left:0;margin-left:100%;position:absolute;top:50%;transform:translateY(-50%);transition:visibility 0s ease .2s;visibility:hidden}.experimental:before{border-right:6px solid #444;border-top:6px solid transparent;border-bottom:6px solid transparent;content:\" \";height:0;margin-left:calc(100% + 5px);width:0}.experimental:after{background-color:#444;border-radius:5px;color:#fff;content:\"Semantic Versioning does not apply to experimental APIs\";font-size:1rem;font-weight:400;letter-spacing:0;line-height:1em;margin-left:calc(100% + 11px);overflow:hidden;padding:7px 10px 5px;text-decoration:none;text-transform:none;z-index:1;white-space:nowrap}#sidebar-container .sidebar-button:after{content:\"▼\";margin-left:1em}#sidebar-container.active .sidebar-button:after{content:\"▲\"}#content-container>blockquote:before{color:#d9dce1;content:\"“\";display:inline;float:left;font-size:4em;margin-left:-.5em;margin-top:-.5em}#content-container h2:after{border-bottom:1px solid #d9dce1;content:\" \";display:block}@media (max-width:1023px){#users-container h1{font-size:4rem}#laptop-container{padding:22px 22px 0}#snow-wrapper .toolbar{padding:2.5% 8% 5%}#snow-wrapper .ql-editor{padding:0 10%}.feature .details{padding:1em}.feature .details>span{line-height:1.6;padding-right:0}.experimental:after{white-space:normal}}@media (max-width:767px){html{font-size:10px}.logo{height:5.3em;width:8.5em}#above-container{padding-top:0}#above-container>.container{height:600px}#announcement-container{display:none}#users-container{padding-top:2em}#users-container .prev{padding-right:0}#users-container .next{padding-left:0}#users-container .tip{font-size:1.8em}#users-container .shaft{display:none}#users-container h1{font-size:2em;margin-bottom:.5em;padding:0 1.2em}#users-container h2{font-size:3rem}#logo-container{margin:2em 0}#logo-container li:first-child{display:block;margin-bottom:15px}#logo-container li:not(:first-child){margin:0 1em;width:2em}#logo-container svg{max-height:2em;max-width:2em}#demo-container{padding-left:0;padding-right:0}#demo-container .ql-editor{font-size:1em;padding:20px}.demo-active #bubble-wrapper,.demo-active #full-wrapper,.demo-active #snow-wrapper{height:455px}#snow-wrapper .toolbar .ql-font,#snow-wrapper .toolbar .ql-formats:nth-child(3),#snow-wrapper .toolbar .ql-formats:nth-child(5){display:none}#above-container:not(.demo-active) #laptop-container:hover{bottom:-105px}#laptop-container{bottom:-110px}#camera-container{height:20px;line-height:16px;margin-left:-60px;width:120px}#camera-container .camera{height:20px;width:20px}#camera-container .camera .dot{height:6px;width:6px}#detail-container .action{margin-top:3em}#detail-container h1{font-size:1.5em;padding:0 1em}#features-container{margin-bottom:6em;padding-top:0}#features-container hr{display:none}#features-container .feature{padding:1em}#features-container .feature.columns:last-child{border-left:none}#features-container #github-wrapper{bottom:-7em;position:absolute;width:23em;left:50%;margin-left:-11.5em}#features-container .feature.row{margin-top:0}.feature .details>h2{font-size:1em;margin-bottom:.75em}.feature .action-link{margin-top:1em}.feature.columns,.feature.row .columns{width:100%}.feature.row{display:flex;flex-direction:column-reverse}footer{font-size:1rem;padding-top:5em}footer h1{font-size:2.5rem;padding:0 1.3em}}@media (max-width:550px){#bubble-wrapper,#full-wrapper,#snow-wrapper{height:475px}#snow-wrapper .toolbar .ql-formats:nth-child(4),#snow-wrapper .toolbar .ql-formats:nth-child(6){display:none}#features-container{margin-bottom:10em}#features-container #github-wrapper{margin-left:-10em;width:20em}}@media (max-width:400px){#laptop-container{width:90%}}@media (min-width:550px){#sidebar-container a:hover{color:#1d1e30}}@media (min-width:768px){.container{width:90%}.action-link:before,.navbar-list .navbar-link:before{background-color:#000;bottom:-18px;content:\"\";height:3px;left:0;position:absolute;transform:scaleX(0);transition:all .3s ease-in-out 0s;visibility:hidden;width:100%}.action-link:hover:before,.navbar-list .navbar-link:hover:before{transform:scaleX(1);visibility:visible}#docs-container h1:hover .anchor,#docs-container h2:hover .anchor,#docs-container h3:hover .anchor,#docs-container h4:hover .anchor{display:inline-block}}</style><style>.GitHub_button__NOW4F{background-color:#1d1e30;border:3px solid #1d1e30;display:flex;flex-direction:row;font-family:Sofia Pro,sans-serif;font-weight:700;letter-spacing:.15rem;text-transform:uppercase;width:min-content}.GitHub_action__jv_N0{color:#fff;display:flex;flex-direction:row;font-size:1.33rem;line-height:32px;padding:10px 22px}.GitHub_action__jv_N0:hover{color:#fff}.GitHub_action__jv_N0 svg{float:left;height:32px;margin-right:12px;width:32px}.GitHub_action__jv_N0 path{fill:#fff}.GitHub_count__0bC6I{color:inherit;background-color:#fff;font-size:1.75rem;line-height:32px;padding:10px 30px}.Header_header__2AlXl{display:flex;align-items:center;justify-content:center}.Header_header__2AlXl{flex-direction:column;background:#fff;border-bottom:1px solid #e2e0e0;padding:14px 0;position:sticky;top:0;z-index:90}.Header_header__2AlXl .Header_headerContent__RlvqN{display:flex;width:100%;max-width:1400px;padding:0 40px;justify-content:space-around}.Header_header__2AlXl .Header_headerContent__RlvqN .Header_mainNav__xEPTs{display:flex;align-items:center;margin-left:30px;font-size:16px}.Header_header__2AlXl .Header_headerContent__RlvqN .Header_mainNav__xEPTs a{display:block;margin:0 8px;color:#323131;transition:background .2s;padding:9px 12px 6px;border-radius:8px;line-height:1}.Header_header__2AlXl .Header_headerContent__RlvqN .Header_mainNav__xEPTs a:hover{background:var(--color-bg-inset)}.Header_header__2AlXl .Header_headerContent__RlvqN .Header_mainNav__xEPTs a:active{background:var(--color-bg-inset-emphasis)}.Header_header__2AlXl .Header_headerContent__RlvqN .Header_secondaryNav__lKe_Q{margin-left:auto;display:flex;align-items:center}.Header_header__2AlXl .Header_headerContent__RlvqN .Header_secondaryNav__lKe_Q a{margin-left:18px;display:block;width:26px;transition:opacity .2s}.Header_header__2AlXl .Header_headerContent__RlvqN .Header_secondaryNav__lKe_Q a svg{display:block}.Header_header__2AlXl .Header_headerContent__RlvqN .Header_secondaryNav__lKe_Q a:hover{opacity:.6}.Header_header__2AlXl .Header_headerContent__RlvqN .Header_secondaryNav__lKe_Q .DocSearch-Button{width:200px}.Header_header__2AlXl .Header_headerContent__RlvqN .Header_mobileNavToggle__jNge_{border:none;padding:0;right:0;top:7.5em}.Header_header__2AlXl .Header_logo__d2E46,.Header_header__2AlXl .Header_logo__d2E46 a{display:flex;align-items:center}.Header_header__2AlXl .DocSearch-Button-Placeholder{font-size:14px;margin-top:2px}.Header_header__2AlXl .DocSearch-Button-Keys{display:flex;justify-content:center;background:#fff;border:1px solid #ccc;border-radius:6px;min-width:30px;text-align:center;padding:1px 5px 0;margin-right:8px;height:20px}.Header_header__2AlXl .DocSearch-Search-Icon{color:var(--docsearch-muted-color)}.Header_header__2AlXl .DocSearch-Button-Key{margin:0;padding:0;width:auto;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;line-height:1}.Header_versionWrapper__ByVS_{position:relative;margin-left:4px}.Header_versionWrapper__ByVS_ .Header_version__opXB6{display:flex;align-items:center;font-size:13px;border-radius:8px;line-height:1;background:var(--color-accent);font-family:Sofia Pro,sans-serif;transition:all .2s;border:2px solid transparent;padding:5px 6px 3px 8px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Header_versionWrapper__ByVS_ .Header_version__opXB6:hover{background:transparent;border:2px solid var(--color-accent)}.Header_versionWrapper__ByVS_ .Header_version__opXB6 svg{height:12px;width:12px;fill:#333}.Header_versionWrapper__ByVS_ .Header_versionDropdown__me7d2,.Header_versionWrapper__ByVS_ .Header_version__opXB6{margin-left:10px}.Header_versionWrapper__ByVS_ .Header_versionDropdown__me7d2{margin-top:8px;position:absolute;padding:12px 8px;width:max-content;text-align:left;font-size:16px;transition:opacity .2s;background:#fff;border-radius:8px;box-shadow:0 0 1rem rgba(0,0,0,.15)}.Header_versionWrapper__ByVS_ .Header_versionDropdown__me7d2:not(.Header_isOpen__BGKPB){pointer-events:none;opacity:0}.Header_versionWrapper__ByVS_ .Header_versionDropdown__me7d2 .Header_versionLabel__m77Q4{color:#999;text-transform:uppercase;font-size:12px;border-top:1px solid #eee;padding:12px 8px 0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Header_versionWrapper__ByVS_ .Header_versionDropdown__me7d2 .Header_versionLabel__m77Q4:not(:first-child){margin-top:8px}.Header_versionWrapper__ByVS_ .Header_versionDropdown__me7d2 .Header_versionDropdownItem__M3dAG{padding:8px 10px 7px;line-height:1;transition:background .2s;border-radius:8px}.Header_versionWrapper__ByVS_ .Header_versionDropdown__me7d2 .Header_versionDropdownItem__M3dAG svg{width:12px;height:12px;color:#ccc;margin-left:4px;margin-top:-1px;fill:#999}.Header_versionWrapper__ByVS_ .Header_versionDropdown__me7d2 .Header_versionDropdownItem__M3dAG:hover{background:#f5f5f5}@media (max-width:960px){.Header_header__2AlXl .DocSearch-Button{display:none}}@media (max-width:800px){.Header_header__2AlXl .Header_headerContent__RlvqN .Header_mainNav__xEPTs,.Header_header__2AlXl .Header_headerContent__RlvqN .Header_secondaryNav__lKe_Q{display:none}.Header_header__2AlXl .Header_headerContent__RlvqN{justify-content:space-between}.Header_header__2AlXl .Header_mobileNavToggle__jNge_{display:block}}</style><style>@font-face{font-family:\"Inconsolata\";font-style:normal;font-weight:400;font-stretch:100%;src:url(data:font/woff2;base64,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)format(\"woff2\");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:\"Roboto Slab\";font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:\"Slabo 27px\";font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:\"Ubuntu Mono\";font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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)format(\"woff2\");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style><style data-href=\"https://fonts.googleapis.com/css?family=Inconsolata&amp;display=optional\">@font-face{font-family:\"Inconsolata\";font-style:normal;font-weight:400;font-stretch:normal;src:url(data:font/woff;base64,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)format(\"woff\")}@font-face{font-family:\"Inconsolata\";font-style:normal;font-weight:400;font-stretch:100%;src:url(data:font/woff2;base64,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)format(\"woff2\");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style><meta name=referrer content=no-referrer><link rel=icon type=image/x-icon href=data:image/vnd.microsoft.icon;base64,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TABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAWEw6YEk7L5pCMiqyMB4d/zAeHf86KiTSSTsvmkk7L5puZkoEcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAG9mSgY0IiDqMB4d/1tPPE5xaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAPS0mwjAeHf8wHh3/MB4d/F1SPUhxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABfVT88VEg3ZjIgHvRdUj5MamFHGHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABoX0UeMB4d/2JXQTZxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAGxjSA4wHh3/SjwwknFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAb2dLAjAeHfwzIR/ubWRJDHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAMyEf7jAeHf9URzdscWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTAA3JiLeMB4d/zcnItxvZ0sEcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMADsrJcwwHh3/MB4d/1lNOlhxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAPzAovDAeHf8wHh3/PCslynBoSwJxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABDNCuuMB4d/zAeHf8wHh3/YFZAOnFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAEc5Lp4wHh3/MB4d/zAeHf9GOC2gcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwASjwwkjAeHf8wHh3/MB4d/zIhHvBuZkoIcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABNPzKIMB4d/zAeHf8wHh3/MB4d/19UP0JxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAE9CM4AwHh3/MB4d/zAeHf8wHh3/UkU1dHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAT0I0fDAeHf8wHh3/MB4d/zAeHf9LPTCQcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABPQjR8MB4d/zAeHf8wHh3/MB4d/0s9MJJxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAE9CM4AwHh3/MB4d/zAeHf8wHh3/T0IzfnFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwATT8yiDAeHf8wHh3/MB4d/zAeHf9YTTpacWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABKPC+UMB4d/zAeHf8wHh3/MB4d/2ddRCRxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAEU2LKYwHh3/MB4d/zAeHf85KSTScGhLAnFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAPzAovDAeHf8wHh3/MB4d/1VIN2hxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTAA4JyPaMB4d/zAeHf85KSTSb2ZKBnFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAb2dKBDEfHfgwHh3/MyEf8GVbQyxxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABlW0MqMB4d/zUkIeRiWEE0cWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAFpOO1JKPDCSa2JHFHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAHFpTABxaUwAcWlMAP/gH///5x///+cf///mn///4B////Af///8////+H////7////+/////n////5////+f////j////4////+H////h////4P///+D////g////4P////B////wf///4P///+D////g////4P///+H////h////4////+f////v//><style>.sf-hidden{display:none!important}</style><link rel=canonical href=https://quilljs.com/><meta http-equiv=content-security-policy content=\"default-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'unsafe-inline'; media-src 'self' data:; script-src 'unsafe-inline' data:; object-src 'self' data:; frame-src 'self' data:;\"><body><div id=__next><style class=sf-hidden>:root{--color-page-background:white}body{background-color:var(--color-page-background)}</style><div data-is-root-theme=true data-accent-color=yellow data-gray-color=sand data-has-background=false data-panel-background=translucent data-radius=medium data-scaling=100% class=radix-themes><header class=Header_header__2AlXl><div class=Header_headerContent__RlvqN><div class=Header_logo__d2E46><a href=https://quilljs.com/><svg xmlns=http://www.w3.org/2000/svg viewBox=\"0 0 942 559.9\" width=60><circle cx=749 cy=125.5 r=25.7 class=logo></circle><path d=\"M643.3 211.5v91.8c0 19.5-3.5 90.9-76.1 90.9-75.9 0-74.3-71.3-74.3-98.8v-83.8h-39v94.1s-8.1 128.5 111.3 128.5 115.4-124.5 115.4-124.5v-98.2zM816.5 45.2H855v378.5h-38.5zM504 472.7c-79.4 0-194.9-12-268.3-12.8-12.2 0-23 1.5-32.6 3.9l13-11.6c14.3-12.9 37.6-20.9 43.4-22 94.4-18.6 164.8-93.7 164.8-212.8C424.3 83.2 329.3 0 212.1 0S0 76.9 0 217.3c0 126.8 84.9 208 193.1 216.5 0 0 5.7.1 6.4 3.6.6 3.1-4.8 7.6-4.8 7.6l-64.4 59.6 12.4 13.4 23.8-21.3c13.3-10.6 35.1-23.6 62.1-23.6 89.3 0 188.2 89.1 280.1 86.9 134.4-3.2 165.7-93 169.1-104.6.2-.4-55.6 17.3-173.8 17.3M39.4 217.3c0-114.3 77.3-177 172.8-177 95.4 0 172.8 67.7 172.8 177 0 112.6-77.3 177-172.8 177-95.5-.1-172.8-67.8-172.8-177M903.5 45.2H942v378.5h-38.5zm-174 165.9H768v212.5h-38.5z\" class=logo></path></svg></a><div class=Header_versionWrapper__ByVS_><div role=button class=Header_version__opXB6>v2.0.3 <svg xmlns=http://www.w3.org/2000/svg aria-hidden=true class=vt-flyout-button-text-icon viewBox=\"0 0 24 24\"><path d=\"M12 16c-.3 0-.5-.1-.7-.3l-6-6c-.4-.4-.4-1 0-1.4s1-.4 1.4 0l5.3 5.3 5.3-5.3c.4-.4 1-.4 1.4 0s.4 1 0 1.4l-6 6c-.2.2-.4.3-.7.3\"></path></svg></div><div role=menu class=Header_versionDropdown__me7d2><a role=menuitem href=https://github.com/slab/quill/releases/tag/v2.0.3 class=Header_versionDropdownItem__M3dAG target=_blank>Release Notes <svg xmlns=http://www.w3.org/2000/svg aria-hidden=true class=vt-link-icon viewBox=\"0 0 24 24\"><path fill=none d=\"M0 0h24v24H0z\"></path><path d=\"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5z\"></path></svg></a><a role=menuitem href=https://github.com/slab/quill/blob/v2.0.3/.github/CONTRIBUTING.md class=Header_versionDropdownItem__M3dAG target=_blank>Contributing <svg xmlns=http://www.w3.org/2000/svg aria-hidden=true class=vt-link-icon viewBox=\"0 0 24 24\"><path fill=none d=\"M0 0h24v24H0z\"></path><path d=\"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5z\"></path></svg></a><div class=Header_versionLabel__m77Q4>Previous Versions</div><a role=menuitem href=https://v1.quilljs.com/ class=Header_versionDropdownItem__M3dAG target=_blank>v1.3.7 <svg xmlns=http://www.w3.org/2000/svg aria-hidden=true class=vt-link-icon viewBox=\"0 0 24 24\"><path fill=none d=\"M0 0h24v24H0z\"></path><path d=\"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5z\"></path></svg></a></div></div></div><nav class=Header_mainNav__xEPTs><a href=https://quilljs.com/docs/quickstart>Documentation</a><a href=https://quilljs.com/playground/snow>Playground</a></nav><nav class=Header_secondaryNav__lKe_Q><a href=https://github.com/slab/quill target=_blank title=\"Edit on GitHub\"><svg viewBox=\"0 0 16 16\"><path d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.3 6.53 5.47 7.6.4.06.55-.18.55-.4v-1.48c-2.02.37-2.54-.5-2.7-.94-.1-.23-.48-.94-.82-1.13-.28-.15-.68-.52 0-.53.62 0 1.07.58 1.22.82.72 1.2 1.87.87 2.33.66.07-.52.28-.87.5-1.07-1.77-.2-3.63-.9-3.63-3.95 0-.87.3-1.6.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.2 2.2.83.64-.18 1.32-.27 2-.27s1.36.1 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.93.08 2.13.5.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.3.25.54.73.54 1.48v2.2c0 .22.15.47.55.4C13.7 14.52 16 11.52 16 8c0-4.42-3.58-8-8-8\"></path></svg></a><button type=button class=\"DocSearch DocSearch-Button\" aria-label=Search><span class=DocSearch-Button-Container><svg width=20 height=20 class=DocSearch-Search-Icon viewBox=\"0 0 20 20\" aria-hidden=true><path d=\"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z\" stroke=currentColor fill=none fill-rule=evenodd stroke-linecap=round stroke-linejoin=round></path></svg><span class=DocSearch-Button-Placeholder>Search</span></span><span class=DocSearch-Button-Keys><kbd class=DocSearch-Button-Key><svg width=15 height=15 class=DocSearch-Control-Key-Icon><path d=\"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953\" stroke-width=1.2 stroke=currentColor fill=none stroke-linecap=square></path></svg></kbd><kbd class=DocSearch-Button-Key>K</kbd></span></button></nav><button class=\"Header_mobileNavToggle__jNge_ sf-hidden\"></button></div><div class=\"Header_mobileNav__Owv_Z sf-hidden\"></div></header><div id=above-container class=demo-active><div class=container><div id=announcement-container class=sf-hidden></div><div id=users-container><h2><button class=prev><span class=arrow><span class=tip></span><span class=shaft></span></span></button>Switch Examples<button class=next><span class=arrow><span class=tip></span><span class=shaft></span></span></button></h2><h1 class=sf-hidden>Your powerful rich text editor.</h1><ul id=logo-container><li>Used In<li><a title=LinkedIn href=https://www.linkedin.com/ target=_blank><svg xmlns=http://www.w3.org/2000/svg viewBox=\"0 5 2490 2490\"><path fill=#fff d=\"M185.2 313.1H2252V2291H185.2z\"></path><path fill=#0a66c2 d=\"M0 183.4C0 84.9 82.4 5 184 5h2122c101.6 0 184 79.9 184 178.4v2133.3c0 98.5-82.4 178.3-184 178.3H184c-101.6 0-184-79.8-184-178.3z\"></path><path fill=#fff d=\"M756.7 2088.8v-1121H384.1v1121zm-186.2-1274c129.9 0 210.8-86.1 210.8-193.7-2.4-110-80.9-193.7-208.3-193.7-127.5 0-210.8 83.7-210.8 193.7 0 107.6 80.8 193.7 205.9 193.7zm392.4 1274h372.6v-626c0-33.5 2.4-67 12.3-90.9 26.9-67 88.2-136.3 191.2-136.3 134.8 0 188.7 102.8 188.7 253.5v599.6h372.6V1446c0-344.3-183.8-504.5-428.9-504.5-201 0-289.2 112.3-338.3 188.8h2.5V967.8H962.9c4.9 105.2 0 1121 0 1121\"></path></svg></a><li><a title=Figma href=https://www.figma.com/ target=_blank><svg xmlns=http://www.w3.org/2000/svg fill=none viewBox=\"0 0 288 432\"><path d=\"M1.466 2.2h285.069v427.6H1.466z\"></path><path fill=#1ABCFE d=\"M144 216c0-39.359 31.907-71.267 71.267-71.267s71.267 31.908 71.267 71.267c0 39.36-31.908 71.267-71.267 71.267C175.907 287.267 144 255.36 144 216\"></path><path fill=#0ACF83 d=\"M1.466 358.534c0-39.359 31.907-71.267 71.267-71.267H144v71.267c0 39.36-31.907 71.267-71.267 71.267S1.466 397.894 1.466 358.534\"></path><path fill=#FF7262 d=\"M144 2.2v142.533h71.267c39.36 0 71.267-31.907 71.267-71.267S254.627 2.2 215.267 2.2z\"></path><path fill=#F24E1E d=\"M1.466 73.466c0 39.36 31.907 71.267 71.267 71.267H144V2.199H72.733c-39.36 0-71.267 31.908-71.267 71.267\"></path><path fill=#A259FF d=\"M1.466 216c0 39.36 31.907 71.267 71.267 71.267H144V144.733H72.733c-39.36 0-71.267 31.908-71.267 71.267\"></path></svg></a><li><a title=Grammarly href=https://www.grammarly.com/ target=_blank><svg xmlns=http://www.w3.org/2000/svg viewBox=\"0 0 92 92\"><circle cx=46 cy=46 r=46 fill=#2bb673></circle><path fill=#fff d=\"M55.1 52.2c-1.9 0-3.4 1.7-3.1 3.7.3 1.5 1.7 2.5 3.2 2.5H60l2.8-.4c-4.5 6.6-12.2 9.6-20.7 8.2-6.9-1.1-12.8-5.8-15.3-12.3-5.7-14.8 5.1-29 19.2-29 7.3 0 13.8 4.3 17.5 9.5v.1c1 1.4 2.9 1.8 4.3.8 1.3-.9 1.7-2.7.9-4.1-5.1-8-14.3-13.1-24.6-12.4C30.7 19.9 19.8 30.9 19 44.4c-.9 15.7 11.5 28.4 27 28.4 8.1 0 15.4-3.5 20.3-9.3l-.6 3.3v3c0 1.5 1 2.9 2.5 3.2 2 .4 3.7-1.2 3.7-3.1V52.2z\"></path></svg></a><li><a title=Typeform href=https://www.typeform.com/ target=_blank><svg xmlns=http://www.w3.org/2000/svg xml:space=preserve viewBox=\"0 0 122.3 80.3\"><path d=\"M94.3 0H65.4c-26 0-28 11.2-28 26.2v27.9c0 15.6 2 26.2 28.1 26.2h28.8c26 0 28-11.2 28-26.1v-28c0-15-2-26.2-28-26.2M0 20.1C0 6.9 5.2 0 14 0s14 6.9 14 20.1v40.1c0 13.2-5.2 20.1-14 20.1S0 73.4 0 60.2z\" style=fill:rgb(26,26,25)></path></svg></a><li><a title=Slab href=https://slab.com/ target=_blank><svg xmlns=http://www.w3.org/2000/svg fill=none viewBox=\"0 0 16 16\"><g fill-rule=evenodd clip-path=url(#a) clip-rule=evenodd><path fill=#50C5DC d=\"M7.995 5.3h8V3.767c0-2.08-1.79-3.767-4-3.767H4.233c2.094.12 3.762 5.3 3.762 5.3\"></path><path fill=#FCB415 d=\"M8 8H0V3.91C0 1.75 1.79 0 4 0h7.762C9.668.125 7.986 1.823 7.986 3.901z\"></path><path fill=#741448 d=\"M8.005 10.78h-8v1.533c0 2.08 1.79 3.767 4 3.767h7.762c-2.095-.12-3.762-5.3-3.762-5.3\"></path><path fill=#FF4143 d=\"M8 8h8v4.09c0 2.16-1.79 3.91-4 3.91H4.238c2.094-.125 3.776-1.823 3.776-3.901z\"></path><path fill=#fff d=\"M1.55 6.524h4.885v-.652H1.55zm0-1.486h4.885v-.652H1.55zm0-1.486h4.885V2.9H1.55zm7.98 6.6h4.885V9.5H9.53zm0 1.486h4.885v-.652H9.53zm0 1.486h4.885v-.652H9.53z\"></path></g><defs><clippath id=a><path fill=#fff d=\"M0 0h16v16H0z\"></path></clippath></defs></svg></a></ul></div><div id=laptop-container><div id=camera-container><div class=camera><div class=dot></div></div><div class=\"camera active\"><div class=dot></div></div><div class=camera><div class=dot></div></div></div><div id=demo-container><div id=carousel-container style=margin-left:-100%><div id=bubble-wrapper><div id=bubble-container><div class=\"ql-container ql-bubble\"><div class=ql-editor contenteditable=true><h1 class=ql-align-center>Quill Rich Text Editor</h1><p><br><p>Quill is a free, <a href=https://github.com/slab/quill/ rel=\"noopener noreferrer\" target=_blank>open source</a> WYSIWYG editor built for the modern web. With its <a href=https://quilljs.com/docs/modules/ rel=\"noopener noreferrer\" target=_blank>modular architecture</a> and expressive <a href=https://quilljs.com/docs/api rel=\"noopener noreferrer\" target=_blank>API</a>, it is completely customizable to fit any need.<p><br></p><iframe class=\"ql-video ql-align-center\" frameborder=0 allowfullscreen height=280 width=500 sandbox=\"allow-popups allow-top-navigation-by-user-activation allow-scripts allow-modals allow-popups allow-downloads allow-pointer-lock allow-presentation\" srcdoc=\"<!DOCTYPE html> <html lang=en><meta charset=utf-8>\n<meta name=viewport content=&quot;width=device-width,initial-scale=1,user-scalable=yes&quot;>\n<style>:root{--fa-font-solid:normal 900 1em/1&quot;Font Awesome 7 Free&quot;;--fa-font-regular:normal 400 1em/1&quot;Font Awesome 7 Free&quot;;--fa-font-light:normal 300 1em/1&quot;Font Awesome 7 Pro&quot;;--fa-font-thin:normal 100 1em/1&quot;Font Awesome 7 Pro&quot;;--fa-font-duotone:normal 900 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-duotone-regular:normal 400 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-duotone-light:normal 300 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-duotone-thin:normal 100 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-brands:normal 400 1em/1&quot;Font Awesome 7 Brands&quot;;--fa-font-sharp-solid:normal 900 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-regular:normal 400 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-light:normal 300 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-thin:normal 100 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-duotone-solid:normal 900 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-sharp-duotone-regular:normal 400 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-sharp-duotone-light:normal 300 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-sharp-duotone-thin:normal 100 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-slab-regular:normal 400 1em/1&quot;Font Awesome 7 Slab&quot;;--fa-font-slab-press-regular:normal 400 1em/1&quot;Font Awesome 7 Slab Press&quot;;--fa-font-whiteboard-semibold:normal 600 1em/1&quot;Font Awesome 7 Whiteboard&quot;;--fa-font-thumbprint-light:normal 300 1em/1&quot;Font Awesome 7 Thumbprint&quot;;--fa-font-notdog-solid:normal 900 1em/1&quot;Font Awesome 7 Notdog&quot;;--fa-font-notdog-duo-solid:normal 900 1em/1&quot;Font Awesome 7 Notdog Duo&quot;;--fa-font-etch-solid:normal 900 1em/1&quot;Font Awesome 7 Etch&quot;;--fa-font-jelly-regular:normal 400 1em/1&quot;Font Awesome 7 Jelly&quot;;--fa-font-jelly-fill-regular:normal 400 1em/1&quot;Font Awesome 7 Jelly Fill&quot;;--fa-font-jelly-duo-regular:normal 400 1em/1&quot;Font Awesome 7 Jelly Duo&quot;;--fa-font-chisel-regular:normal 400 1em/1&quot;Font Awesome 7 Chisel&quot;;--fa-font-utility-semibold:normal 600 1em/1&quot;Font Awesome 7 Utility&quot;;--fa-font-utility-duo-semibold:normal 600 1em/1&quot;Font Awesome 7 Utility Duo&quot;;--fa-font-utility-fill-semibold:normal 600 1em/1&quot;Font Awesome 7 Utility Fill&quot;}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1,1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,0.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,0.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-0.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,0.95)) translateY(0)}57%{transform:scale(1,1) translateY(var(--fa-bounce-rebound,-0.125em))}64%{transform:scale(1,1) translateY(0)}100%{transform:scale(1,1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,0.4)}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,0.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,100%{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}</style><link rel=canonical href=https://player.vimeo.com/video/253905163>\n<meta name=googlebot content=noindex,indexifembedded>\n<title>Big Buck Bunny from Jason Chen on Vimeo</title>\n<style>body,html,.player{overflow:hidden;width:100%;height:100%;margin:0;padding:0}</style>\n<style>@keyframes buffer{100%{transform:translateX(-10px)}}@-moz-keyframes bufferLeft{0%{left:0}100%{left:-10px}}@keyframes throb{0%,100%{background-color:#555}50%{background-color:#444}}@keyframes wiggle{0%{transform:translateY(10px)}20%{transform:translateY(0)}40%,80%{transform:translateX(8px)}60%{transform:translateX(-8px)}100%{transform:translateX(0)}}@keyframes pulse{50%{transform:scale(.9)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-135px}}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes scaleAnimation{0%{transform:scale(.9,.9)}100%{transform:scale(1,1)}}body:not(.showfocus) .player a,body:not(.showfocus) .player button,body:not(.showfocus) .player div,body:not(.showfocus) .player span,body:not(.showfocus) .player svg{outline:0!important}.vp-placeholder{transition:opacity 125ms ease-out .1s}.vp-placeholder-fadeout{opacity:0}.player{position:relative;max-height:100%;width:100%;height:100%;margin:0;padding:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:auto;color:#fff;line-height:normal;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial!important;font-size:10px;border-collapse:separate;user-select:none;-webkit-user-select:none;touch-action:manipulation}.player :focus{outline:2px solid #00adef;outline-offset:2px}.player,.player *,.player ::after,.player ::before{box-sizing:border-box;-webkit-tap-highlight-color:transparent}.player button{cursor:pointer;font-size:1em}.player button:not(.exclude-global-button-styles){appearance:none;border:0;padding:0;margin:0;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial;line-height:normal;height:auto;vertical-align:baseline}.player a:active,.player button:active,.player button:not(:focus){outline:0}.player img{border:0}.player a{text-decoration:none}.player .invisible{opacity:0}.player .fill{fill:#fff}.player .vp-target{top:0;left:0;height:100%;z-index:3}.player .vp-video-wrapper{opacity:1;transition:opacity 125ms ease-out}.player .vp-content-area-background,.player .vp-player-ui-container,.player .vp-player-ui-overlays{pointer-events:none;position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden}.player .vp-player-ui-container{z-index:4}.player .vp-player-ui-overlays{z-index:36}.player.hide-controls-mode video::-webkit-media-controls-start-playback-button{display:none}.player.right-content-area-supported{overflow:hidden}.player.right-content-area-supported>.content-area-sibling-enabled{width:100%;right:0;position:absolute}.player[data-filter] .thumb::after,.player[data-filter] .vp-preview::after,.player[data-filter] .vp-video::after{content:&quot;&quot;;display:block;height:100%;width:100%;top:0;left:0;position:absolute;opacity:1;background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,transparent,transparent)}.player[data-filter=aden] .thumb::after,.player[data-filter=aden] .vp-preview::after,.player[data-filter=aden] .vp-video::after{background:linear-gradient(to right,rgba(66,10,14,.2),transparent),radial-gradient(circle,transparent,transparent);mix-blend-mode:darken}.player[data-filter=earlybird] .thumb::after,.player[data-filter=earlybird] .vp-preview::after,.player[data-filter=earlybird] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,#d0ba8e 20%,#360309 85%,#1d0210 100%);mix-blend-mode:overlay}.player[data-filter=hudson] .thumb::after,.player[data-filter=hudson] .vp-preview::after,.player[data-filter=hudson] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,#a6b1ff 50%,#342134);mix-blend-mode:multiply;opacity:.5}.player[data-filter=inkwell] .thumb::after,.player[data-filter=inkwell] .vp-preview::after,.player[data-filter=inkwell] .vp-video::after{opacity:0}.player[data-filter=mayfair] .thumb::after,.player[data-filter=mayfair] .vp-preview::after,.player[data-filter=mayfair] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle at 40% 40%,rgba(255,255,255,.8),rgba(255,200,200,.6),#111 60%);mix-blend-mode:overlay;opacity:.4}.player[data-filter=toaster] .thumb::after,.player[data-filter=toaster] .vp-preview::after,.player[data-filter=toaster] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,#804e0f,#3b003b);mix-blend-mode:screen}.player[data-filter=ascii] .thumb::after{background-color:#0f0;mix-blend-mode:darken}.player .vp-video-wrapper{top:0;left:0;bottom:0;overflow:hidden}.player .vp-video-wrapper .vp-video{position:absolute;top:0;left:0;bottom:0;right:0;transition:filter .25s,opacity .25s}.player .vp-video-wrapper .vp-video::after{transition:all .25s}.player .vp-video-wrapper .vp-telecine{position:absolute;top:0;left:0;bottom:0;right:0;transition:opacity .25s}.player .vp-video-wrapper .vp-telecine.hide-webkit-controls video::-webkit-media-controls-play-button{display:none}.player .vp-video-wrapper .vp-telecine.hide-webkit-controls video::-webkit-media-controls-start-playback-button{display:none}.player .vp-video-wrapper video{width:100%;height:100%}.SideDock_module_root__eeb5e08f{position:absolute;top:0;right:0;padding:8px;padding-top:0;z-index:18;transform:translate3d(0,0,0);display:flex;flex-direction:column;align-items:flex-end}.SideDock_module_root__eeb5e08f,.SideDock_module_root__eeb5e08f .SideDock_module_sidedockInner__eeb5e08f{transition:opacity 250ms ease-out}.SideDock_module_root__eeb5e08f button{margin:8px;font-family:inherit;border-radius:4px;border:0;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;transition:background-color 40ms;margin-right:0;background-color:var(--color-one-opacity-ninety);color:var(--color-three)}.SideDock_module_root__eeb5e08f button svg{pointer-events:none}.SideDock_module_root__eeb5e08f button path{fill:var(--color-three)}.SideDock_module_root__eeb5e08f button,.SideDock_module_root__eeb5e08f label{margin-top:8px;margin-bottom:0}.SideDock_module_root__eeb5e08f.SideDock_module_visible__eeb5e08f button{pointer-events:auto}.SideDock_module_root__eeb5e08f button:not([data-vod-button=true]){padding:1px 6px}.SideDock_module_root__eeb5e08f button:focus{outline:none}.SideDock_module_root__eeb5e08f button:hover:not(:active){background-color:var(--color-two);color:var(--color-two-monochrome);border:none}.SideDock_module_root__eeb5e08f button:hover:not(:active) path{fill:var(--color-two-monochrome)}.SideDock_module_root__eeb5e08f.SideDock_module_outroVisible__eeb5e08f button:not(:hover){opacity:0.65}.LabeledButton_module_labeledButton__a4450693{background:rgba(0,0,0,0.9);transition:opacity 150ms ease-out,transform 150ms ease-out;margin:8px;font-family:inherit;color:#fff;border:0;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background-color:rgba(0,0,0,0.9);display:flex;border-radius:0.25rem;padding:0.8em 1.2em;line-height:1.88rem;height:2rem;font-size:1.2em;font-weight:bold;margin-right:0;align-items:center;white-space:nowrap}.LabeledButton_module_box__a4450693{display:flex;justify-content:flex-end;transition:transform 150ms ease-out}button.LikeButton_module_likeButton__3908feee.LikeButton_module_animating__3908feee:hover{background-color:var(--color-one-opacity-ninety);color:var(--color-three)}button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee{animation:LikeButton_module_heartbeat__3908feee 1s 1 ease-out}button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee path{stroke:var(--color-two-monochrome);fill:transparent}button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee.LikeButton_module_liked__3908feee path,button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee.LikeButton_module_liked__3908feee.LikeButton_module_redHeart__3908feee path{fill:var(--color-two-monochrome);stroke:var(--color-two-monochrome)}@media (prefers-reduced-motion:reduce){button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee{animation:none}}@keyframes LikeButton_module_heartbeat__3908feee{0%{transform:scale(1)}10%{transform:scale(1)}20%{transform:scale(1.3)}30%{transform:scale(1.1)}40%{transform:scale(1.3)}100%{transform:scale(1)}}.ShareButton_module_shareButton__26260904:hover .ShareButton_module_shareIcon__26260904{display:inline-block;animation:ShareButton_module_takeoff__26260904 750ms 1;animation-timing-function:ease-in-out;transform-origin:center}@media (prefers-reduced-motion:reduce){.ShareButton_module_shareButton__26260904:hover .ShareButton_module_shareIcon__26260904{animation:none}}@keyframes ShareButton_module_takeoff__26260904{0%{transform:translate(0,0)}20%{transform:translate(-3px,3px)}40%{transform:translate(2px,-2px)}60%{transform:translate(-1px,1px)}80%{transform:translate(0.5px,-0.5px)}100%{transform:translate(0,0)}}button.WatchLaterButton_module_watchLaterButton__238c6c3b.WatchLaterButton_module_animating__238c6c3b:hover{background-color:var(--color-one-opacity-ninety);color:var(--color-three)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) .WatchLaterButton_module_watchLaterIcon__238c6c3b{display:inline-block;animation:0.25s ease-in-out 0.1s 1;transform-origin:center;animation-name:WatchLaterButton_module_pop__238c6c3b}@media (prefers-reduced-motion:reduce){button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) .WatchLaterButton_module_watchLaterIcon__238c6c3b{animation:none}}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) circle[data-animated-clock-circle]{stroke:var(--color-two-monochrome)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) path[data-animated-clock-hand]{stroke:var(--color-two-monochrome)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b).WatchLaterButton_module_filled__238c6c3b circle[data-animated-clock-circle]{fill:var(--color-two-monochrome)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b).WatchLaterButton_module_filled__238c6c3b path[data-animated-clock-hand]{stroke:var(--color-two)}@keyframes WatchLaterButton_module_pop__238c6c3b{0%{transform:scale(1)}10%{transform:scale(1.15)}100%{transform:scale(1)}}.DebugPanel_module_debugButton__42adb963:hover:not(:active){border:none}.DebugValues_module_clipId__54d9bb7b:hover{text-decoration:underline}.DebugValues_module_bandwidthMin__54d9bb7b::before,.DebugValues_module_bandwidthMax__54d9bb7b::before{display:block;position:absolute;left:2px;font-size:0.8em;top:3px}.DebugValues_module_bandwidthMin__54d9bb7b::before{content:&quot;▼&quot;/&quot;Minimum bandwidth&quot;}.DebugValues_module_bandwidthMax__54d9bb7b::before{content:&quot;▲&quot;/&quot;Maximum bandwidth&quot;}.BandwidthSeriesDisplay_module_marker__e795ff85:hover{cursor:pointer;stroke-width:3}.TitleTags_module_tagWrapper__20a17f3b{display:inline-block}a.TitleTags_module_aiTag__20a17f3b[data-ai-content-tag=true]:hover{background:rgba(0,0,0,0.2);color:var(--color-two-monochrome)}.Title_module_title__9dc182ba{display:flex;position:relative;padding:8px;z-index:12;transition:opacity 250ms ease-out;margin-right:4.4em;pointer-events:auto;transform:translate3d(0,0,0)}.Title_module_portrait__9dc182ba{margin:0 0.4em 0 0;flex:1 0 auto;pointer-events:inherit}.Title_module_portrait__9dc182ba .Title_module_portraitLink__9dc182ba{position:relative;display:block;width:100%;height:100%}.player.player-xs .Title_module_portrait__9dc182ba{width:4.8em;height:4.8em}.Title_module_portrait__9dc182ba img{border:2px solid;border-color:var(--color-one-opacity-ninety);border-radius:50%}.Title_module_portrait__9dc182ba img:hover{border-color:var(--color-two)}.player.player-xs .Title_module_portrait__9dc182ba img{width:4.8em;height:4.8em}.Title_module_header__9dc182ba{margin:0;display:flex;flex-flow:row nowrap}.Title_module_headers__9dc182ba{display:flex;flex-flow:column nowrap;align-items:flex-start;flex:1 1 100%;min-width:0;overflow-wrap:break-word;hyphens:auto}.Title_module_headers__9dc182ba *{pointer-events:inherit}span.Title_module_titleText__9dc182ba{font-size:14px;letter-spacing:-0.2px}.Title_module_titleWrapper__9dc182ba{display:block;position:relative;background-color:var(--color-one-opacity-ninety);color:var(--color-three);border-radius:4px;margin-bottom:0.4em;height:auto}.Title_module_titleWrapper__9dc182ba .Title_module_textAndTagsWrapper__9dc182ba{display:inline-block;vertical-align:middle;border-radius:4px;font-size:14px;padding:0.2857142857em 0.5714285714em;line-height:20px;height:100%}.Title_module_titleWrapper__9dc182ba:hover{background-color:var(--color-two)}.Title_module_titleWrapper__9dc182ba:hover .Title_module_textAndTagsWrapper__9dc182ba{color:var(--color-two-monochrome)}.Title_module_titleWrapper__9dc182ba:hover .Title_module_textAndTagsWrapper__9dc182ba span[id=title-text]{color:var(--color-two-monochrome)}.Title_module_titleWrapper__9dc182ba:hover .Title_module_titleTag__9dc182ba{background:var(--color-two-monochrome-opacity-twenty-eighty)}a.Title_module_titleLink__9dc182ba{position:absolute;width:100%;height:100%}.Title_module_subtitle__9dc182ba{display:inline-flex;align-items:baseline;background-color:var(--color-one-opacity-ninety);color:var(--color-three);border-radius:4px;font-size:12px;gap:0.3333333333em;line-height:16px;padding:0.3333333333em 0.6666666667em;margin:0}.Title_module_subtitle__9dc182ba span{color:var(--color-three);font-size:inherit}.Title_module_subtitle__9dc182ba:hover{background-color:var(--color-two)}.Title_module_subtitle__9dc182ba:hover span{color:var(--color-two-monochrome)}.Card_module_card__924d992f:hover{background:var(--color-one);box-shadow:rgba(0,0,0,0.17)0 0.5rem 1rem -0.5rem,rgba(0,0,0,0.33)0 0 0.25rem -0.06rem}@keyframes TinyProgressBar_module_buffer__c04d36b1{100%{transform:translateX(-10px)}}.PlayButton_module_playButtonWrapper__b9d5abe0{transition:width 250ms ease-in-out,margin 250ms ease-in-out;width:5.6em;height:3.2em;margin:0 0.8em 0 0;pointer-events:all}.PlayButton_module_playButton__b9d5abe0{font-family:inherit;-webkit-font-smoothing:antialiased;width:5.6em;height:3.2em;color:#fff;margin:0;border:none;appearance:none;z-index:22;background-color:var(--color-one-opacity-ninety);opacity:1;transform:translate3d(0,0,0);transition:opacity 250ms ease-out,background-color 40ms,color 40ms,width 250ms ease-in-out,padding 250ms ease-in-out}.PlayButton_module_playButton__b9d5abe0 .PlayButton_module_playIcon__b9d5abe0{margin:0}.PlayButton_module_playButton__b9d5abe0 .PlayButton_module_playIcon__b9d5abe0 path{fill:var(--color-three)}.PlayButton_module_playButton__b9d5abe0 .PlayButton_module_playIcon__b9d5abe0{width:100%;min-height:auto;height:2.4em}@media (hover:hover){.PlayButton_module_playButton__b9d5abe0:hover{background-color:var(--color-two)}.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_playIcon__b9d5abe0 path,.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_pauseIcon__b9d5abe0 path,.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_replayIcon__b9d5abe0 path,.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_trailerIcon__b9d5abe0 path{fill:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_text__b9d5abe0{color:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover [data-tiny-played]{fill:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover [data-tiny-loaded]{fill:var(--color-two-monochrome-opacity-twenty)}.PlayButton_module_playButton__b9d5abe0:hover [data-tiny-buffer-pattern] line{stroke:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover:not(:active){border:none}}.PrefsButton_module_prefsButton__c0bd4f7c .PrefsButton_module_gearIcon__c0bd4f7c{height:100%;transform-origin:50% 50%;transition:transform 450ms cubic-bezier(0.08,0.82,0.17,1)}.VimeoLogoLink_module_vimeoLogo__970f58c4{display:flex;height:100%;z-index:22}.VimeoLogoLink_module_vimeoLogo__970f58c4 svg{height:100%;fill:#fff;padding:0.2em;width:24px}.ControlBarButton_module_controlBarButton__5e0eae92{width:2.4em;height:2.4em;padding:0.2em;appearance:none;border:none;transition:none;background:none;z-index:22}.ControlBarButton_module_controlBarButton__5e0eae92 svg{width:2.4em;height:100%}.ControlBarButton_module_controlBarButton__5e0eae92 svg path{fill:var(--color-three)}@media (hover:hover){.ControlBarButton_module_controlBarButton__5e0eae92:hover svg path{fill:var(--color-two)}}.ControlBarButton_module_controlBarButton__5e0eae92:active{background:rgba(255,255,255,0.4)}span.ControlBarButton_module_controlBarButtonChildren__5e0eae92{transform:translate3d(0,0,0);position:fixed;overflow:visible}span.ControlBarButton_module_controlBarButtonTooltip__5e0eae92{bottom:calc(1.3333333333em + 4px)}.ChromecastButton_module_chromecastButton__6a7b0286:active{outline:2px solid #00adef!important;outline-offset:2px;background:rgba(255,255,255,0.4)}.CuePointMarkers_module_cuePoints__7287c027:hover,.CuePointMarkers_module_cuePoints__7287c027:focus{opacity:1;transform:translateX(-50%) scale(1.5);z-index:26}.FocusTarget_module_focusTarget__abd564d5{width:100%;height:100%}.InteractiveMarker_module_interactiveMarker__6d3dc825:hover,.InteractiveMarker_module_interactiveMarker__6d3dc825:focus{height:1.2em;width:1.2em;border-radius:0.6em;margin-left:-0.6em;z-index:26}.Timecode_module_timecodeContainer__0e71c943{position:absolute;display:block;top:-0.8em;margin:-2em 0 0-1.2em}.Timecode_module_timecodeContainer__0e71c943 .Timecode_module_timecode__0e71c943{border-radius:4px;padding:0.2em 0.4em;line-height:1.6em;font-weight:500;position:relative;left:-50%;display:inline-block;margin-left:2.3em;background:#fff;color:#000;cursor:grab}.Timecode_module_timecodeContainer__0e71c943 .Timecode_module_timecode__0e71c943::after{border-left:0.4em solid transparent;border-right:0.4em solid transparent;border-top:0.4em solid #fff;bottom:-0.3em;content:&quot;&quot;;left:50%;margin-left:-0.4em;position:absolute}.ThumbnailPreview_module_thumbnailPreview__0cb46f3c{display:flex;flex-direction:column;justify-content:center;position:absolute;max-height:12em;border-radius:8px;transform:translateX(-50%);bottom:2.4em}.ThumbnailPreview_module_thumbnailPreview__0cb46f3c .ThumbnailPreview_module_thumbnailPreviewText__0cb46f3c{display:flex;justify-content:center;align-items:center;flex-direction:column;width:100%;max-height:5.8181818182em;line-height:1.4545454545em;padding:0.3636363636em;background:rgba(0,0,0,0.9);font-size:11px;font-weight:500;letter-spacing:0.4px;border-radius:0 0 8px 8px}.ThumbnailPreview_module_thumbnailPreview__0cb46f3c .ThumbnailPreview_module_thumbnailPreviewText__0cb46f3c .ThumbnailPreview_module_time__0cb46f3c{height:1.4545454545em}.ChapterSegment_module_chapter__33ca9410,.ChapterSegment_module_segmentBar__33ca9410{height:0.4em;border-radius:10em;position:relative;overflow:hidden}.ChapterSegment_module_chapter__33ca9410{transition:height 0.2s ease-in-out;background-color:var(--color-three-opacity-twenty)}.ChapterSegment_module_segmentBar__33ca9410{position:absolute}.ChapterSegment_module_chapterWrapper__33ca9410{position:relative;padding:1.6em 0;cursor:pointer}.ChapterSegment_module_chapterWrapper__33ca9410:first-of-type{margin-left:0}.ChapterSegment_module_chapterWrapper__33ca9410:not(.ChapterSegment_module_hoverDisabled__33ca9410):hover .ChapterSegment_module_chapter__33ca9410,.ChapterSegment_module_chapterWrapper__33ca9410:not(.ChapterSegment_module_hoverDisabled__33ca9410):hover .ChapterSegment_module_segmentBar__33ca9410{height:0.8em}.LoadedBar_module_loaded__3d837846{background-color:var(--color-three-opacity-twenty);transition:width 175ms cubic-bezier(0.18,0,0.07,1),height 0.2s ease-in-out}.PlayedBar_module_played__38fb8087{transition:height 0.2s ease-in-out;background-color:var(--color-two)}.ChapterSegments_module_chapterSegmentsWrapper__426e8ff1{position:absolute;width:100%;height:100%;display:flex;align-items:center;border-radius:10em}.ProgressBar_module_progressBarContainer__20d7fbb1{transition:width 250ms ease-in-out,margin 250ms ease-in-out,flex-grow 250ms ease-in-out,flex-shrink 250ms ease-in-out,padding 250ms ease-in-out;height:0.4em;display:flex;align-items:center;padding:16px 8px;width:100%}.ProgressBar_module_progressBarContainer__20d7fbb1 .ProgressBar_module_progressBar__20d7fbb1{cursor:pointer;display:flex;align-items:center;flex:1;height:0.4em;position:relative;width:100%}.ControlBar_module_controlBarWrapper__33f2e772{position:absolute;display:flex;justify-content:flex-end;align-items:flex-end;bottom:0.8em;left:0.8em;right:0.8em;height:3.2em;touch-action:pan-y pinch-zoom}.ControlBar_module_controls__33f2e772{transition:max-width 250ms ease-in-out;height:3.2em;z-index:22;display:flex;flex:1;pointer-events:all;justify-content:flex-end;max-width:calc(100% - 56px - 8px)}.ControlBar_module_progressBarAndButtons__33f2e772{transform:translate3d(0,0,0);transition:flex-grow 250ms ease-in-out;background-color:var(--color-one-opacity-ninety);border-radius:4px;display:flex;flex-grow:1;justify-content:flex-end;align-items:center;position:relative;height:32px;padding:4px;max-width:100%}.ResetButton_module_resetButton__5af7707c:hover{background:rgba(255,255,255,0.2)}.ChaptersPanelMenuOption_module_chapterListItem__22a198a7:hover:not(.ChaptersPanelMenuOption_module_disabled__22a198a7){background-color:rgba(255,255,255,0.2)}.ChaptersPanelMenuOption_module_chapterListItem__22a198a7:hover .ChaptersPanelMenuOption_module_copyLinkButton__22a198a7,.ChaptersPanelMenuOption_module_chapterListItem__22a198a7:focus-within .ChaptersPanelMenuOption_module_copyLinkButton__22a198a7{opacity:1}.ChaptersPanelMenuOption_module_chapterListButton__22a198a7:focus{outline-offset:-2px;border-radius:3px}button.ChaptersCopyLinkButton_module_button__fd58dc8d:hover,button.ChaptersCopyLinkButton_module_button__fd58dc8d:focus{background-color:rgba(255,255,255,0.2)}button.ChaptersCopyLinkButton_module_button__fd58dc8d.ChaptersCopyLinkButton_module_touchDevice__fd58dc8d:hover,button.ChaptersCopyLinkButton_module_button__fd58dc8d.ChaptersCopyLinkButton_module_touchDevice__fd58dc8d:focus{background-color:transparent}.VolumeControl_module_volumeControlContainer__02ffae11{padding:1.6em 0;display:flex;justify-content:center;pointer-events:auto}.VolumeControl_module_volumeControl__02ffae11{transform:translate3d(0,0,0);position:absolute;cursor:pointer;display:flex;justify-content:center;align-items:center;padding:0.8em 1em;width:3.2em;height:9.6em;background:rgba(0,0,0,0.9);border-radius:4px;bottom:3.2em}.VolumeControl_module_volumeControl__02ffae11:focus-within{outline:none}.VolumeControl_module_volumeControl__02ffae11:active{cursor:grabbing}.VolumeControl_module_volumeControl__02ffae11:focus-visible{outline:2px solid #00adef;outline-offset:2px}.VolumeControl_module_volumeBar__02ffae11{position:relative;display:flex;justify-content:center;height:7.2em;width:0.4em;background-color:rgba(255,255,255,0.4);border-radius:100px;transition:width 0.2s ease-in-out}.VolumeControl_module_volumeBarFill__02ffae11{position:absolute;width:100%;bottom:0;opacity:1;border-radius:100px;background-color:var(--color-two)}.VolumeControl_module_sliderHandle__02ffae11{position:absolute;transform:translateY(50%);background-color:#fff;height:0.8em;width:0.8em;border-radius:4px;margin:0 6em;transition:height 0.2s ease-in-out,width 0.2s ease-in-out,border-radius 0.2s ease-in-out}.ControlBarButtonsAndMenus_module_wrapper__768465f8{gap:4px;max-width:100%;display:flex;justify-content:flex-end;align-items:center;transition:opacity 250ms ease-out;height:100%;opacity:1;position:inherit;margin-right:4px}.ControlBarButtonsAndMenus_module_collapsibleWrapper__768465f8{-ms-overflow-style:none;scrollbar-width:none;container-type:scroll-state;transition:opacity 250ms ease-out,width 250ms ease-out,max-width 250ms ease-out,margin 250ms ease-out;height:32px;opacity:1;margin:0-4px;display:flex;align-items:center;justify-content:flex-start;z-index:21;width:fit-content;overflow:auto}.ControlBarButtonsAndMenus_module_collapsibleWrapper__768465f8::-webkit-scrollbar{display:none}.ControlBarButtonsAndMenus_module_collapsibleContent__768465f8{-ms-overflow-style:none;scrollbar-width:none;gap:4px;position:static;display:flex;justify-content:flex-end;align-items:center;width:auto;height:100%;padding:0 4px;pointer-events:none;overflow-y:hidden;clip-path:none;min-width:fit-content}.ControlBarButtonsAndMenus_module_collapsibleContent__768465f8::-webkit-scrollbar{display:none}.ControlBarButtonsAndMenus_module_collapsibleContent__768465f8 button{pointer-events:all}.NudgeNotification_module_nudge__5db47681{position:absolute;top:0;height:100%;display:flex;flex-direction:column;justify-content:center;margin:0}.NudgeNotification_module_nudge__5db47681 .NudgeNotification_module_nudgeInfo__5db47681{display:flex;flex-direction:column;align-items:center;align-self:center;position:relative;width:9.6em}@media (max-width:299px),(max-height:169px){.NudgeNotification_module_nudge__5db47681 .NudgeNotification_module_nudgeInfo__5db47681{width:9.6em}}@media (min-width:300px) and (max-width:375px){.NudgeNotification_module_nudge__5db47681 .NudgeNotification_module_nudgeInfo__5db47681{width:9.6em}}.NudgeNotification_module_nudge__5db47681.NudgeNotification_module_nudgeCenter__5db47681{width:auto;left:50%;transform:translateX(-50%)}.NudgeNotification_module_nudgeIcon__5db47681 svg{fill:#fff;height:3.2em}@media (max-width:299px),(max-height:169px){.NudgeNotification_module_nudgeIcon__5db47681 svg{height:2.4em}}.NudgeNotification_module_nudgeTime__5db47681{font-weight:bold;font-size:1.4em;letter-spacing:-0.4px;height:1.8em}@media (max-width:414px),(max-height:168px){.NudgeNotification_module_nudgeTime__5db47681{font-size:1.2em;height:1.6em}}.PipOverlay_module_overlay__82a6be37{display:flex;flex-direction:column;width:100%;height:100%;align-items:center;justify-content:center;background-color:#121212}.PipOverlay_module_overlay__82a6be37 svg{height:1.8em}.PipOverlay_module_overlay__82a6be37 .PipOverlay_module_title__82a6be37{margin-top:8px;font-size:16px}.RightContentArea_module_rightContentArea__a0f39df8{position:absolute;right:0;top:0;height:100%;z-index:38}.RightContentArea_module_rightContentArea__a0f39df8.RightContentArea_module_iframeEmbed__a0f39df8{background-color:transparent}.right-content-area-supported.app-xs .RightContentArea_module_rightContentArea__a0f39df8{width:100%;left:0%;opacity:0;pointer-events:none}.ContentAreaBackground_module_imgContainer__9da212ea{background-color:#000;width:100%;height:100%}.right-content-area-supported.app-xs .ContentAreaBackground_module_imgContainer__9da212ea{z-index:37;position:absolute;left:0;top:0}.ContentAreaBackground_module_img__9da212ea{width:100%;height:100%;object-fit:cover;filter:blur(10px)}.ContentAreaBackground_module_img__9da212ea.ContentAreaBackground_module_loaded__9da212ea{opacity:0.1}.BufferHandler_module_shade__94101f09{position:absolute;top:0;left:0;bottom:0;right:0;background-color:#000}.Captions_module_captions__5ed5b89b{padding:0 10px 10px;bottom:0}.Captions_module_captions__5ed5b89b.Captions_module_withControls__5ed5b89b{transform:translateY(-50px)}.Captions_module_captions__5ed5b89b.Captions_module_withControls__5ed5b89b.Captions_module_contentAreaSibling__5ed5b89b{transition:transform 150ms ease,width 400ms ease-in-out,right 400ms ease-in-out}.QoESurvey_module_thumbsUp__c40e38d2.QoESurvey_module_selected__c40e38d2:hover,.QoESurvey_module_thumbsDown__c40e38d2.QoESurvey_module_selected__c40e38d2:hover{background:none}.Toasts_module_toasts__b772bc4f{position:absolute;top:8px;left:8px;z-index:10;transition:transform 400ms ease-in-out}.TopCenterActionItems_module_topCenterActionItems__6bbfa089{position:absolute;top:8px;left:50%;transform:translateX(-50%);z-index:9}.AIWidget_module_aiWidget__f665b717{width:100%;height:100%}.Outro_module_outroWrapper__64bf980e{position:absolute;top:0;left:0;width:100%;height:100%;z-index:8!important}@keyframes OutroContentWrapper_module_fadeIn__06afa88b{0%{opacity:0}100%{opacity:1}}@keyframes LinkOutro_module_slideDown__0f1c39e6{to{transform:translate(0,0);opacity:1}}.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:hover,.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:active{color:var(--color-one-monochrome)}.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:hover::before,.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:active::before{content:&quot;&quot;;background-color:rgba(0,0,0,0.15);position:absolute;top:0;left:0;bottom:0;right:0}.ImageOutro_module_imageOutroLink__7772436e .ImageOutro_module_imageOutro__7772436e:hover{transform:scale(1.1)}.VideosList_module_videoLink__24b2c487:hover,.VideosList_module_videoLink__24b2c487:focus{z-index:1;opacity:1;transform:scale(1.1)}.VideosList_module_videoLink__24b2c487:hover .VideosList_module_videoHeader__24b2c487,.VideosList_module_videoLink__24b2c487:focus .VideosList_module_videoHeader__24b2c487{opacity:1}.VideosList_module_videoLink__24b2c487:active{transform:scale(1.07)}button.FollowButton_module_followButton__7f7b5348:hover{background-color:rgba(127,127,127,0.76)}h1.VideosHeader_module_videosTitle__75827656 a[href]:hover{color:var(--color-two)}a[href].VODButton_module_VODButton__9172ec57:hover{color:var(--color-two-monochrome)!important}.VODOutro_module_VODHeader__4642efe8 a[href]:hover{color:#fff}.Alert_module_close__59e6b5e4:active{transform:translateY(1px)}.PrivateGate_module_login__b6123279.PrivateGate_module_loginButton__b6123279:active,.PrivateGate_module_login__b6123279.PrivateGate_module_loginButton__b6123279:hover{background-color:var(--color-two-opacity-ninety)}input.PasswordGate_module_passwordInput__93d04c19[aria-invalid=true]:focus{outline:2px solid rgb(227,79,79);outline-offset:2px}button.PasswordGate_module_submitPassword__93d04c19:active,button.PasswordGate_module_submitPassword__93d04c19:hover{background-color:var(--color-two-opacity-ninety)}.VideoThumbnail_module_videoThumbnail__836d3344{position:absolute;top:0;left:0;bottom:0;right:0;background-repeat:no-repeat;background-position:50% 50%;transition:opacity 0.25s}.vp-video-wrapper.content-area-sibling-enabled .VideoThumbnail_module_videoThumbnail__836d3344.VideoThumbnail_module_cover__836d3344{background-size:contain}.ContextMenuOption_module_menuItem__36a0b8ce:hover,.ContextMenuOption_module_menuItem__36a0b8ce:active,a.ContextMenuOption_module_menuItem__36a0b8ce:hover,a.ContextMenuOption_module_menuItem__36a0b8ce:active{background:rgba(255,255,255,0.2);color:#fff}.Link_module_link__bdf8051d{position:relative;pointer-events:inherit}.Link_module_link__bdf8051d:hover{color:var(--color-two-complement)}.Link_module_link__bdf8051d:active,.Link_module_link__bdf8051d:hover{cursor:pointer}dialog.ModalMenu_module_menu__4fe0e031{-ms-overflow-style:none;scrollbar-width:none;position:absolute;background-color:rgba(0,0,0,0.8);backdrop-filter:blur(40px);z-index:29;overflow-x:auto;transition:opacity 200ms ease-out;color:#fff;height:100%;width:100%;border:0;margin:0;padding:0;overflow-y:hidden}dialog.ModalMenu_module_menu__4fe0e031::-webkit-scrollbar,dialog.ModalMenu_module_menu__4fe0e031:modal::-webkit-scrollbar{display:none}dialog.ModalMenu_module_menu__4fe0e031 .ModalMenu_module_menuBody__4fe0e031::-webkit-scrollbar,dialog.ModalMenu_module_menu__4fe0e031:modal .ModalMenu_module_menuBody__4fe0e031::-webkit-scrollbar{display:none}dialog.ModalMenu_module_menu__4fe0e031::backdrop,dialog.ModalMenu_module_menu__4fe0e031:-internal-dialog-in-top-layer::backdrop,dialog.ModalMenu_module_menu__4fe0e031:modal::backdrop,dialog.ModalMenu_module_menu__4fe0e031:modal:-internal-dialog-in-top-layer::backdrop{background-color:transparent}.PopoverMenu_module_menu__69cec309::-webkit-scrollbar{display:none}.PopoverMenu_module_menu__69cec309 .PopoverMenu_module_menuBody__69cec309::-webkit-scrollbar{display:none}.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_backButton__aa712564:hover,.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_closeButton__aa712564:hover{background-color:rgba(255,255,255,0.2)}.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_backButtonWrapper__aa712564 .MenuHeader_module_backButton__aa712564:not(:hover),.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_closeButtonWrapper__aa712564 .MenuHeader_module_closeButton__aa712564:not(:hover){background:none}.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_backButtonWrapper__aa712564 .MenuHeader_module_backButton__aa712564:hover:not(:active),.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_closeButtonWrapper__aa712564 .MenuHeader_module_closeButton__aa712564:hover:not(:active){border:none}.MenuOption_module_option__5ad9c96b.MenuOption_module_styled__5ad9c96b:hover{background-color:rgba(255,255,255,0.2)}.MenuOption_module_option__5ad9c96b.MenuOption_module_styled__5ad9c96b:focus{border-radius:3px}.MenuItem_module_optionButton__2ed021e3:hover{background:rgba(255,255,255,0.2)}.MenuItem_module_optionButton__2ed021e3:focus{outline-offset:-2px}.MenuItem_module_optionButton__2ed021e3:active{outline:none}body:not(.showfocus) .MenuItem_module_optionButton__2ed021e3:focus{outline:none}.MenuOptionListItem_module_listItem__5ba640e5:focus{outline-offset:-2px}.ButtonRow_module_filledButton__45a1df77:hover{background-color:rgba(255,255,255,0.2)}.ButtonRow_module_filledButton__45a1df77.ButtonRow_module_active__45a1df77:hover{background-color:#fff}.ColorSwabs_module_colorSwabs__1985ad2c .ColorSwabs_module_colorSwab__1985ad2c:hover{transform:scale(1.25)}.Tooltip_module_tooltip__b2bc4d16{display:flex;justify-content:center;align-items:center;color:#fff;background:rgba(0,0,0,0.9);font-size:12px;letter-spacing:0;bottom:2.6666666667em;padding:0.6666666667em 1em;height:2.6666666667em;line-height:1.25em;border-radius:4px;transition:opacity 150ms ease-out;position:absolute;font-weight:bold;white-space:pre;transform:translateX(-50%);cursor:default}.Tooltip_module_tooltipContainer__b2bc4d16[data-touch-device=false]:hover .Tooltip_module_tooltip__b2bc4d16{color:#fff}.Tooltip_module_playTooltip__b2bc4d16{margin-bottom:4px}.Text_module_text__73112353{line-height:1.25}.Text_module_bold__73112353{font-weight:bold}.Button_module_button__61be5b9c{position:relative;display:flex;align-items:center;justify-content:center;text-decoration:none;font-weight:600;white-space:nowrap;text-rendering:optimizelegibility;border-radius:0.4em;pointer-events:inherit}.Button_module_buttonChildren__61be5b9c{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Button_module_icon__61be5b9c svg{display:inline-flex;overflow:visible}.Button_module_icon__61be5b9c.Button_module_iconSm__61be5b9c>svg{width:1.8em;height:1.8em}.Button_module_primary__61be5b9c:hover{background-color:var(--color-two);color:var(--color-two-monochrome)}.Button_module_alternative__61be5b9c:hover:not(:active){background:rgba(255,255,255,0.2)}.Button_module_sm__61be5b9c{line-height:3em;height:3.2em;min-width:3.2em}.CopyLinkButton_module_copyLinkButton__fd675415:hover{background-color:rgba(255,255,255,0.2)}input.SearchInput_module_mobileSafari__e264b933:focus,input.SearchInput_module_mobileSafari__e264b933:focus+.SearchInput_module_label__e264b933{font-size:1.6em}.SearchInput_module_inputForm__e264b933[data-disabled=false]:hover{background-color:rgba(255,255,255,0.3)}.SearchInput_module_inputForm__e264b933 .SearchInput_module_searchButton__e264b933:hover:not(:disabled){background-color:rgba(255,255,255,0.3)}.SearchInput_module_inputForm__e264b933 .SearchInput_module_searchButton__e264b933:hover:not(:disabled):active{background-color:rgba(255,255,255,0.3)}.SearchInput_module_inputForm__e264b933 input:focus{outline:none}@keyframes Spinner_module_buffer__795e5e53{100%{transform:translateX(-10px)}}@-moz-keyframes Spinner_module_bufferLeft__795e5e53{0%{left:0}100%{left:-10px}}@keyframes Spinner_module_throb__795e5e53{0%,100%{background-color:#555}50%{background-color:#444}}@keyframes Spinner_module_wiggle__795e5e53{0%{transform:translateY(10px)}20%{transform:translateY(0)}40%,80%{transform:translateX(8px)}60%{transform:translateX(-8px)}100%{transform:translateX(0)}}@keyframes Spinner_module_pulse__795e5e53{50%{transform:scale(0.9)}}@keyframes Spinner_module_dash__795e5e53{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-135px}}@keyframes Spinner_module_rotate__795e5e53{100%{transform:rotate(360deg)}}@keyframes Spinner_module_scaleAnimation__795e5e53{0%{transform:scale(0.9,0.9)}100%{transform:scale(1,1)}}.Spinner_module_spinner__795e5e53{position:absolute;top:50%;left:50%;background:transparent;transform:translate(-50%,-50%);transition:opacity 0.1s,transform 0.25s cubic-bezier(0.17,0.88,0.32,1.28)}.Spinner_module_spinner__795e5e53 circle{background:transparent}.Spinner_module_spinner__795e5e53 [data-spinner-trace=true]{stroke-opacity:0.2}.Spinner_module_spinner__795e5e53 [data-spinner-circle=true]{transform-origin:50% 50%;stroke-linecap:round;stroke-dasharray:200;stroke-dashoffset:200;animation:Spinner_module_rotate__795e5e53 2s linear 0.25s infinite,Spinner_module_dash__795e5e53 1.5s ease-in-out 0.25s infinite}.Spinner_module_lg__795e5e53{max-width:120px;width:18%}.Spinner_module_lg__795e5e53 circle{stroke-width:2px}.Switch_module_switch__c1fb02cb:hover{background-color:rgba(255,255,255,0.2)}.Switch_module_switch__c1fb02cb:focus{border-radius:3px;outline-offset:-2px}.CaptionsRenderer_module_captions__04afad3c{text-align:center;position:absolute;z-index:6;left:0;right:0;user-select:text}.ToastBase_module_toast__211c883d{background:rgba(0,0,0,0.9);align-items:center;border-radius:4px;padding:4px;max-width:calc(100% - 16px)}.ToastButton_module_toastButton__609a14eb:active{background:rgba(255,255,255,0.2)}.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:active,.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:hover{background:var(--color-two)}.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:active span,.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:hover span{color:var(--color-two-monochrome)}p.shared_module_shareFootnote__360a097f a:hover{color:#00adef}.SocialShareLink_module_shareButton__cb9db123:hover,.SocialShareLink_module_shareButton__cb9db123:active{background-color:rgba(0,0,0,0.15)}.SocialShareLink_module_shareButton__cb9db123:focus{outline-color:#00adef}.SocialShare_module_socialShareContainer__241f1ad7 a.SocialShare_module_clipUrl__241f1ad7:hover{color:#00adef}.SegmentShareInputs_module_customCheckbox__d711f219::after{content:&quot;&quot;;position:absolute;display:none;left:34%;top:14%;width:6px;height:12px;border:solid #000;border-width:0 2px 2px 0;border-bottom-right-radius:1px;transform:rotate(45deg)}.SegmentShareInputs_module_customCheckbox__d711f219.SegmentShareInputs_module_checked__d711f219::after{display:block}.SegmentShareInputs_module_inputWrapper__d711f219:focus-within{outline:2px solid #00adef;outline-offset:2px}input.TimeInput_module_segmentShareInput__87e7fee4:focus{outline:none}input.TimeInput_module_segmentShareInput__87e7fee4::placeholder{color:rgba(255,255,255,0.6);opacity:1;padding-top:2px}.TimeInput_module_segmentShareInput__87e7fee4:focus+.TimeInput_module_floatingLabel__87e7fee4{color:#fff}.Error_module_buttonsWrapper__b6661b70 .Error_module_button__b6661b70:hover:not(:active){border:none}.BaseError_module_error__896e096f a:hover{color:#ff5210}.CloseOverlayButton_module_closeOverlayButton__74aa447b{position:absolute;right:0;opacity:0.7;background:none}.CloseOverlayButton_module_closeOverlayButton__74aa447b:hover{opacity:1}.CloseOverlayButton_module_closeOverlayButton__74aa447b svg{width:40px;height:40px;margin:8px}.OverlayBase_module_overlayCell__42ef25fe{width:100%;height:100%;display:flex;flex-flow:column nowrap;align-items:center;justify-content:center}.OverlayBase_module_overlayWrapper__42ef25fe{position:absolute;top:0;left:0;bottom:0;right:0;transition:background-color 200ms;background-position:center center;background-size:cover;text-align:center;background-image:linear-gradient(to bottom,rgba(20,21,22,0.3),#141516);z-index:31;user-select:text}.OverlayBase_module_overlayWrapper__42ef25fe.OverlayBase_module_hidden__42ef25fe *{pointer-events:none}.OverlayBase_module_overlayWrapper__42ef25fe .OverlayBase_module_overlayNav__42ef25fe{opacity:1;display:block;position:absolute;top:0;left:0;width:100%;z-index:32}.OverlayBase_module_overlay__42ef25fe{position:absolute;top:0;left:0;bottom:0;right:0;display:flex;align-items:center;justify-content:center;flex-direction:column;transform:scale(0.9,0.9);transition:transform 105ms,opacity 105ms}:root{--clock-rotate-direction:1}@keyframes AnimatedClock_module_hourHand__8976d762{to{rotate:calc(45deg*var(--clock-rotate-direction))}}@keyframes AnimatedClock_module_minuteHand__8976d762{to{rotate:calc(360deg*var(--clock-rotate-direction))}}.ContentAreaCloseButton_module_closeContentAreaButton__8960d891:hover,.ContentAreaCloseButton_module_closeContentAreaButton__8960d891:focus,.ContentAreaCloseButton_module_closeContentAreaButton__8960d891:active{background-color:transparent!important}.showfocus .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .shared_module_focusableCircle__29a0c6d5:focus::after,.showfocus .shared_module_focusableMarker__29a0c6d5:focus::after{outline:none}.showfocus .shared_module_focusable__29a0c6d5:focus::after,.showfocus .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .shared_module_focusableCircle__29a0c6d5:focus::after,.showfocus .shared_module_focusableMarker__29a0c6d5:focus::after{content:&quot;&quot;;pointer-events:none;position:absolute;border:2px solid #000;width:calc(100% + 8px);height:calc(100% + 8px);top:-4px;left:-4px;border-radius:8px;z-index:1;outline:2px solid #00adef;outline-offset:-4px}.showfocus .shared_module_focusableMarker__29a0c6d5:focus::after{width:calc(100% + 12px);height:calc(100% + 12px);top:-6px;left:-6px;border-radius:12px}.showfocus .shared_module_focusableCircle__29a0c6d5:focus::after{border-radius:50%}.showfocus .shared_module_focusableButton__29a0c6d5:focus::after{border-radius:12px}.showfocus .player.app-xxs .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .player.app-xs .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .player.app-tiny .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .player.app-mini .shared_module_focusableButton__29a0c6d5:focus::after{border-radius:8px}</style><meta name=referrer content=no-referrer><style>.sf-hidden{display:none!important}</style><meta http-equiv=content-security-policy content=&quot;default-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'unsafe-inline'; media-src 'self' data:; script-src 'unsafe-inline' data:; object-src 'self' data:; frame-src 'self' data:;&quot;></head>\n<body>\n<div class=&quot;vp-placeholder vp-placeholder-fadeout&quot; style=visibility:visible>\n <style class=sf-hidden>.vp-placeholder,.vp-placeholder-thumb,.vp-placeholder-thumb::before,.vp-placeholder-thumb::after{position:absolute;top:0;bottom:0;left:0;right:0}.vp-placeholder{width:100%;max-height:100%;height:calc(1080/1920*100vw);max-width:calc(1920/1080*100vh);margin:auto}.vp-placeholder-carousel{background-color:#000;position:absolute;left:0;right:0;bottom:-60px;height:60px}</style>\n \n \n <style class=sf-hidden>.vp-placeholder-thumb{overflow:hidden;width:100%;max-height:100%;margin:auto}.vp-placeholder-thumb::before,.vp-placeholder-thumb::after{content:&quot;&quot;;display:block;filter:blur(7px);margin:0;background:url(data:image/avif;base64,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)50% 50%/contain no-repeat}.vp-placeholder-thumb::before{margin:-30px}</style>\n \n <div class=vp-placeholder-thumb></div>\n <div class=&quot;vp-placeholder-carousel sf-hidden&quot;></div>\n \n \n</div>\n<div id=player class=&quot;player player-e223849d-08c4-4429-add3-d472ae382977 js-player-fullscreen with-fullscreen with-sticky-custom-logo player-normal player-xs app-xs right-content-area-supported&quot;>\n <div class=vp-content-area-background aria-hidden=true><div class=ContentAreaBackground_module_imgContainer__9da212ea style=overflow:hidden;opacity:0;pointer-events:none><img alt=&quot;video thumbnail&quot; class=&quot;ContentAreaBackground_module_img__9da212ea ContentAreaBackground_module_loaded__9da212ea&quot; src=&quot;data:image/avif;base64,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&quot;></div></div>\n <div class=&quot;vp-video-wrapper transparent content-area-sibling-enabled&quot; data-content-area-sibling-eligible aria-hidden=true>\n <div class=vp-video>\n <div class=&quot;vp-telecine invisible&quot;><video preload=none tabindex=-1 playsinline poster=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAEYCAYAAACqUARzAAAO8klEQVR4AezV23LcNhAEUFX+/6NTSdnWxVotl0SDwMzJQyztkg3MGVX1P2/+I0CAAAECBLYXUOjbr9AABAgQIEDg7S1b6IQJECBAgACBKQIKfQqzQwgQIECAQFZg50LPykgnQIAAAQIbCSj0jZblqgQIECBA4JGAQn8k43MCBAgQILCRgELfaFmuSoAAAQIEHgko9Ecy2c+lEyBAgACBoQIKfSinMAIECBAgcI+AQr/HPXuqdAIECBBoJ6DQ263cwAQIECBQUUChV9xqdibpBAgQILCggEJfcCmuRIAAAQIEXhVQ6K+KeT4rIJ0AAQIETgko9FNsXiJAgAABAmsJKPS19uE2WQHpBAgQKCug0Muu1mAECBAg0ElAoXfatlmzAtIJECBwo4BCvxHf0QQIECBAYJSAQh8lKYdAVkA6AQIEfhRQ6D/y+JIAAQIECOwhoND32JNbEsgKSCdAYHsBhb79Cg1AgAABAgTe3hS6vwICBNIC8gkQmCCg0CcgO4IAAQIECKQFFHpaWD4BAlkB6QQI/C+g0P9n8D8CBAgQILC3gELfe39uT4BAVkA6gW0EFPo2q3JRAgQIECDwWEChP7bxDQECBLIC0gkMFFDoAzFFESBAgACBuwQU+l3yziVAgEBWQHozAYXebOHGJUCAAIGaAgq95l5NRYAAgayA9OUEFPpyK3EhAgQIECDwuoBCf93MGwQIECCQFZB+QkChn0DzCgECBAgQWE1Aoa+2EfchQIAAgaxA0XSFXnSxxiJAgACBXgIKvde+TUuAAAECWYHb0hX6bfQOJkCAAAEC4wQU+jhLSQQIECBAICvwQ7pC/wHHVwQIECBAYBcBhb7LptyTAAECBAj8IDCg0H9I9xUBAgQIECAwRUChT2F2CAECBAgQyAosX+jZ8aUTIECAAIEaAgq9xh5NQYAAAQLNBZoXevPtG58AAQIEyggo9DKrNAgBAgQIdBZQ6MHtiyZAgAABArMEFPosaecQIECAAIGggEIP4majpRMgQIAAgXcBhf5u4ScCBAgQILCtgELfdnXZi0snQIAAgb0EFPpe+3JbAgQIECDwrYBC/5bFh1kB6QQIECAwWkChjxaVR4AAAQIEbhBQ6DegOzIrIJ0AAQIdBRR6x62bmQABAgTKCSj0cis1UFZAOgECBNYUUOhr7sWtCBAgQIDASwIK/SUuDxPICkgnQIDAWQGFflbOewQIECBAYCEBhb7QMlyFQFZAOgEClQUUeuXtmo0AAQIE2ggo9DarNiiBrIB0AgTuFVDo9/o7nQABAgQIDBFQ6EMYhRAgkBWQToDAMwGF/kzI9wQIECBAYAMBhb7BklyRAIGsgHQCFQQUeoUtmoEAAQIE2gso9PZ/AgAIEMgKSCcwR0Chz3F2CgECBAgQiAoo9CivcAIECGQFpBP4LaDQf0v4lwABAgQIbCyg0DdenqsTIEAgKyB9JwGFvtO23JUAAQIECDwQUOgPYHxMgAABAlkB6WMFFPpYT2kECBAgQOAWAYV+C7tDCRAgQCAr0C9doffbuYkJECBAoKCAQi+4VCMRIECAQFZgxXSFvuJW3IkAAQIECLwooNBfBPM4AQIECBDICpxLV+jn3LxFgAABAgSWElDoS63DZQgQIECAwDmBo4V+Lt1bBAgQIECAwBQBhT6F2SEECBAgQCArsEahZ2eUToAAAQIEygso9PIrNiABAgQIdBDoUOgd9mhGAgQIEGguoNCb/wEYnwABAgRqCCj0q3v0PgECBAgQWEBAoS+wBFcgQIAAAQJXBRT6VcHs+9IJECBAgMAhAYV+iMlDBAgQIEBgbQGFvvZ+sreTToAAAQJlBBR6mVUahAABAgQ6Cyj0ztvPzi6dAAECBCYKKPSJ2I4iQIAAAQIpAYWekpWbFZBOgAABAp8EFPonDr8QIECAAIE9BRT6nntz66yAdAIECGwnoNC3W5kLEyBAgACBvwUU+t8mPiGQFZBOgACBgIBCD6CKJECAAAECswUU+mxx5xHICkgnQKCpgEJvunhjEyBAgEAtAYVea5+mIZAVkE6AwLICCn3Z1bgYAQIECBA4LqDQj1t5kgCBrIB0AgQuCCj0C3heJUCAAAECqwgo9FU24R4ECGQFpBMoLqDQiy/YeAQIECDQQ0Ch99izKQkQyApIJ3C7gEK/fQUuQIAAAQIErgso9OuGEggQIJAVkE7ggIBCP4DkEQIECBAgsLqAQl99Q+5HgACBrID0IgIKvcgijUGAAAECvQUUeu/9m54AAQJZAenTBBT6NGoHESBAgACBnIBCz9lKJkCAAIGsgPQPAgr9A4YfCRAgQIDArgIKfdfNuTcBAgQIZAU2S1fomy3MdQkQIECAwHcCCv07FZ8RIECAAIGswPB0hT6cVCABAgQIEJgvoNDnmzuRAAECBAgMF/hU6MPTBRIgQIAAAQJTBBT6FGaHECBAgACBrMDEQs8OIp0AAQIECHQWUOidt292AgQIECgjUKbQy2zEIAQIECBA4ISAQj+B5hUCBAgQILCagEI/tBEPESBAgACBtQUU+tr7cTsCBAgQIHBIQKEfYso+JJ0AAQIECFwVUOhXBb1PgAABAgQWEFDoCywhewXpBAgQINBBQKF32LIZCRAgQKC8gEIvv+LsgNIJECBAYA0Bhb7GHtyCAAECBAhcElDol/i8nBWQToAAAQJHBRT6USnPESBAgACBhQUU+sLLcbWsgHQCBAhUElDolbZpFgIECBBoK6DQ267e4FkB6QQIEJgroNDnejuNAAECBAhEBBR6hFUogayAdAIECHwVUOhfRfxOgAABAgQ2FFDoGy7NlQlkBaQTILCjgELfcWvuTIAAAQIEvggo9C8gfiVAICsgnQCBjIBCz7hKJUCAAAECUwUU+lRuhxEgkBWQTqCvgELvu3uTEyBAgEAhAYVeaJlGIUAgKyCdwMoCCn3l7bgbAQIECBA4KKDQD0J5jAABAlkB6QSuCSj0a37eJkCAAAECSwgo9CXW4BIECBDICkivL6DQ6+/YhAQIECDQQEChN1iyEQkQIJAVkL6CgEJfYQvuQIAAAQIELgoo9IuAXidAgACBrID0YwIK/ZiTpwgQIECAwNICCn3p9bgcAQIECGQF6qQr9Dq7NAkBAgQINBZQ6I2Xb3QCBAgQyArMTFfoM7WdRYAAAQIEQgIKPQQrlgABAgQIZAU+pyv0zx5+I0CAAAECWwoo9C3X5tIECBAgQOCzwOhC/5zuNwIECBAgQGCKgEKfwuwQAgQIECCQFdir0LMW0gkQIECAwLYCCn3b1bk4AQIECBB4F1Do7xZ+IkCAAAEC2woo9G1X5+IECBAgQOBdQKG/W2R/kk6AAAECBIICCj2IK5oAAQIECMwSUOizpLPnSCdAgACB5gIKvfkfgPEJECBAoIaAQq+xx+wU0gkQIEBgeQGFvvyKXJAAAQIECDwXUOjPjTyRFZBOgAABAgMEFPoARBEECBAgQOBuAYV+9wacnxWQToAAgSYCCr3Joo1JgAABArUFFHrt/ZouKyCdAAECywgo9GVW4SIECBAgQOC8gEI/b+dNAlkB6QQIEHhBQKG/gOVRAgQIECCwqoBCX3Uz7kUgKyCdAIFiAgq92EKNQ4AAAQI9BRR6z72bmkBWQDoBAtMFFPp0cgcSIECAAIHxAgp9vKlEAgSyAtIJEPhGQKF/g+IjAgQIECCwm4BC321j7kuAQFZAOoFNBRT6potzbQIECBAg8FFAoX/U8DMBAgSyAtIJxAQUeoxWMAECBAgQmCeg0OdZO4kAAQJZAemtBRR66/UbngABAgSqCCj0Kps0BwECBLIC0hcXUOiLL8j1CBAgQIDAEQGFfkTJMwQIECCQFZB+WUChXyYUQIAAAQIE7hdQ6PfvwA0IECBAICvQIl2ht1izIQkQIECguoBCr75h8xEgQIBAVmCRdIW+yCJcgwABAgQIXBFQ6Ff0vEuAAAECBLICh9MV+mEqDxIgQIAAgXUFFPq6u3EzAgQIECBwWOBUoR9O9yABAgQIECAwRUChT2F2CAECBAgQyAosWOjZgaUTIECAAIGKAgq94lbNRIAAAQLtBNoVersNG5gAAQIEWggo9BZrNiQBAgQIVBdQ6EM3LIwAAQIECNwjoNDvcXcqAQIECBAYKqDQh3Jmw6QTIECAAIFHAgr9kYzPCRAgQIDARgIKfaNlZa8qnQABAgR2FlDoO2/P3QkQIECAwC8Bhf4Lwj9ZAekECBAgkBVQ6Flf6QQIECBAYIqAQp/C7JCsgHQCBAgQUOj+BggQIECAQAEBhV5giUbICkgnQIDADgIKfYctuSMBAgQIEHgioNCfAPmaQFZAOgECBMYIKPQxjlIIECBAgMCtAgr9Vn6HE8gKSCdAoI+AQu+za5MSIECAQGEBhV54uUYjkBWQToDASgIKfaVtuAsBAgQIEDgpoNBPwnmNAIGsgHQCBF4TUOiveXmaAAECBAgsKaDQl1yLSxEgkBWQTqCegEKvt1MTESBAgEBDAYXecOlGJkAgKyCdwB0CCv0OdWcSIECAAIHBAgp9MKg4AgQIZAWkE/heQKF/7+JTAgQIECCwlYBC32pdLkuAAIGsgPR9BRT6vrtzcwIECBAg8EdAof+h8AMBAgQIZAWkJwUUelJXNgECBAgQmCSg0CdBO4YAAQIEsgLd0xV6978A8xMgQIBACQGFXmKNhiBAgACBrMD66Qp9/R25IQECBAgQeCqg0J8SeYAAAQIECGQFRqQr9BGKMggQIECAwM0CCv3mBTieAAECBAiMEHhc6CPSZRAgQIAAAQJTBBT6FGaHECBAgACBrMBdhZ6dSjoBAgQIEGgmoNCbLdy4BAgQIFBToGah19yVqQgQIECAwEMBhf6QxhcECBAgQGAfAYX++q68QYAAAQIElhNQ6MutxIUIECBAgMDrAgr9dbPsG9IJECBAgMAJAYV+As0rBAgQIEBgNQGFvtpGsveRToAAAQJFBRR60cUaiwABAgR6CSj0XvvOTiudAAECBG4TUOi30TuYAAECBAiME1Do4ywlZQWkEyBAgMAPAgr9BxxfESBAgACBXQQU+i6bcs+sgHQCBAhsLqDQN1+g6xMgQIAAgf8E/gUAAP//yDi8IAAAAAZJREFUAwBstQIxZ+99lgAAAABJRU5ErkJggg==&quot;></video></div>\n </div>\n <div class=&quot;vp-preview VideoThumbnail_module_videoThumbnail__836d3344 VideoThumbnail_module_cover__836d3344&quot; data-thumb=&quot;https://i.vimeocdn.com/video/680918441-b17f6b5d3cf508f4554b9a176faacbf150df4e784b73dc1e905d32a53195b096-d?mw=500&amp;amp;mh=280&quot; style=&quot;background-image:url(data:image/avif;base64,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)&quot;></div></div>\n <div class=&quot;vp-target content-area-sibling-enabled&quot; data-content-area-sibling-eligible></div>\n <div class=&quot;vp-player-ui-container content-area-sibling-enabled&quot; data-content-area-sibling-eligible><style data-player-colors=e223849d-08c4-4429-add3-d472ae382977 class=sf-hidden>.player-e223849d-08c4-4429-add3-d472ae382977{--color-one:#000000ff;--color-two:#00adefff;--color-three:#ffffffff;--color-four:#000000ff;--color-one-monochrome:#ffffffff;--color-two-monochrome:#000000ff;--color-one-opacity-ninety:#000000e6;--color-two-opacity-ninety:#00adefe6;--color-three-opacity-twenty:#ffffff33;--color-one-monochrome-opacity-twenty:#ffffff33;--color-two-monochrome-opacity-twenty:#00000033;--color-one-monochrome-opacity-sixty:#ffffff99;--color-two-complement:#ff5210ff;--color-one-monochrome-opacity-twenty-eighty:#ffffff33;--color-two-monochrome-opacity-twenty-eighty:#000000cc}.player-e223849d-08c4-4429-add3-d472ae382977{background-color:transparent!important}.player-e223849d-08c4-4429-add3-d472ae382977 .vp-video-wrapper{background-color:transparent!important}</style><div aria-hidden=true class=&quot;NudgeNotification_module_nudge__5db47681 NudgeNotification_module_nudgeCenter__5db47681&quot; style=overflow:hidden;opacity:0;pointer-events:none><div class=NudgeNotification_module_nudgeInfo__5db47681><div class=NudgeNotification_module_nudgeIcon__5db47681><svg viewBox=&quot;0 0 64 64&quot;><path fill-rule=evenodd clip-rule=evenodd d=&quot;M12.4506 12.0055L32.4643 30.0179C33.6413 31.0772 33.6413 32.9228 32.4643 33.9821L12.4506 51.9945C10.7345 53.5389 8 52.3211 8 50.0124V13.9876C8 11.6789 10.7345 10.4611 12.4506 12.0055ZM39.1172 12.0055L59.131 30.0179C60.308 31.0772 60.308 32.9228 59.131 33.9821L39.1172 51.9945C37.4012 53.5389 34.6667 52.3211 34.6667 50.0124V13.9876C34.6667 11.6789 37.4012 10.4611 39.1172 12.0055Z&quot;></path></svg></div><div class=NudgeNotification_module_nudgeTime__5db47681></div></div></div><div class=PipOverlay_module_overlay__82a6be37 aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none><svg viewBox=&quot;0 0 16 12&quot;><polygon class=fill points=&quot;6 8 1 8 1 1 14 1 14 6 15 6 15 0 0 0 0 9 6 9 6 8&quot;></polygon><rect class=fill x=7 y=7 width=9 height=5></rect><polyline class=fill transform=&quot;translate(4, 4) rotate(180) translate(-4, -4)&quot; points=&quot;5.33 2 5.33 3 3.67 3 5.67 5 5 5.67 3 3.67 3 5.33 2 5.33 2 2&quot;></polyline></svg><div class=PipOverlay_module_title__82a6be37>Playing in picture-in-picture</div></div><span id=new-window hidden class=sf-hidden>(opens a new window)</span></div>\n <div class=&quot;vp-player-ui-overlays content-area-sibling-enabled&quot; data-content-area-sibling-eligible><div role=status class=&quot;ToastBase_module_toast__211c883d TopCenterActionItems_module_topCenterActionItems__6bbfa089&quot; style=overflow:hidden;opacity:0;pointer-events:none;display:none></div><div role=status class=&quot;ToastBase_module_toast__211c883d Toasts_module_toasts__b772bc4f&quot; style=&quot;overflow:hidden;opacity:0;pointer-events:none;transform:translateY(calc(-100% - 16px));display:none&quot;></div><div class=&quot;vp-title Title_module_title__9dc182ba&quot; role=presentation><header class=Title_module_header__9dc182ba role=presentation><div class=Title_module_portrait__9dc182ba><a href=&quot;https://vimeo.com/user5722801?fl=pl&amp;amp;fe=po&quot; class=&quot;Link_module_link__bdf8051d Title_module_portraitLink__9dc182ba shared_module_focusableCircle__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener variant=minimal tabindex=0><img src=&quot;data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAkoAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAADwAAAA8AAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQANAAAAABNjb2xybmNseAABAA0ABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAlJtZGF0EgAKCRgVe+2CAhoNSDK6BETwAMMMMUDd1Khg1unqRnGTMVrN2rqSVGvcLu7vYn//2jE8BKkb0S/urLB8GJjpqG4fWQZs1MdyQn+S20fOAYBDJryjLEG/0D+0nQItdVckXw4QK+xYkncXyqjHHn0tnefqtCwLGe2Dxo9LTdDXHFZMSHDqZDaXQKfQBP+pWxSnS1+rDUB7N5++IBZndamuqq+UzFAEvNrJ+Wl31NPMjuD27d+zRZwEkyQAyRaCbdl0+PLL/MRXjQPG5TW3D9kPcnSmvw/fbRu6hNWeIl1aLg7F6paM2T+tsB9KneMU6Bj44QFFkr6aRwvn5sFQ7qeVidMl+XMVyQ+NQ+VtsoM9Sk16u9HWDoMCVFNExyN5mwxxotAvsQEJKSWh5dD+4InbAdMo9/SxcQsnT2iTMN1SSUl86ITUhjPkwL6N9AVr8++JooJqcoG6W++o/nZA+OrRIukMz64AcuagVeRUH0QbO8IqpEipg9KzXgwjujI5n5m4/tJcvqdACDUZGLW5XZTBDKDT4YCNlrpBjJrAIQMQyE8dg8rwbRJqOLNsz0HGNAaVSSASfQuChWerHt3P+2htvIVgNKlPjEaAwgyDEZjJZh/GdSEc9IWFOGg18d3tWRVY3fJ7fkXhfP17hB2S8g4hUCJ5A05r7jr8HyZF//+tnI7hJK6huafRGn/geGKFmaXjhfp3uI7BaLcO6790yPtQ0dEyz7sNZccFylcph29iL14jbpm+UdFq/t7B0yO1rfXhr+UqbDC4drWVMA==&quot; alt=&quot;Link to video owner's profile&quot; width=60 height=60 data-trackclick=video-portrait></a></div><div class=Title_module_headers__9dc182ba><div class=Title_module_titleWrapper__9dc182ba><a href=&quot;https://vimeo.com/253905163?fl=pl&amp;amp;fe=ti&quot; class=&quot;Link_module_link__bdf8051d Title_module_titleLink__9dc182ba shared_module_focusable__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener data-track-click=video-title variant=minimal tabindex=0 aria-labelledby=title-text></a><div class=Title_module_textAndTagsWrapper__9dc182ba><span class=&quot;Text_module_text__73112353 Text_module_sm__73112353 Text_module_bold__73112353 Title_module_titleText__9dc182ba&quot; id=title-text aria-hidden=false>Big Buck Bunny</span><div class=TitleTags_module_tagWrapper__20a17f3b></div></div></div><a href=&quot;https://vimeo.com/user5722801?fl=pl&amp;amp;fe=by&quot; class=&quot;Link_module_link__bdf8051d Title_module_subtitle__9dc182ba shared_module_focusable__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener variant=minimal tabindex=0><span class=&quot;Text_module_text__73112353 Text_module_sm__73112353 Text_module_bold__73112353&quot; aria-hidden=false>Jason Chen</span></a></div></header></div><div class=&quot;vp-sidedock SideDock_module_root__eeb5e08f SideDock_module_visible__eeb5e08f&quot; data-sidedock=true><div class=SideDock_module_sidedockInner__eeb5e08f data-sidedock-inner=true style=opacity:1><div class=LabeledButton_module_box__a4450693><label class=LabeledButton_module_labeledButton__a4450693 role=presentation aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none><span>More options</span></label><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_primary__61be5b9c Button_module_sm__61be5b9c Button_module_icon__61be5b9c Button_module_iconSm__61be5b9c exclude-global-button-styles&quot; type=button tabindex=0 aria-label=&quot;More options&quot; aria-haspopup=dialog aria-expanded=false><svg width=4 height=19 viewBox=&quot;0 0 4 19&quot; fill=none xmlns=http://www.w3.org/2000/svg focusable=false><path d=&quot;M2 4.5C2.39556 4.5 2.78224 4.3827 3.11114 4.16294C3.44004 3.94318 3.69639 3.63082 3.84776 3.26537C3.99914 2.89992 4.03874 2.49778 3.96157 2.10982C3.8844 1.72186 3.69392 1.36549 3.41421 1.08579C3.13451 0.806082 2.77814 0.615601 2.39018 0.53843C2.00222 0.46126 1.60009 0.500867 1.23463 0.652242C0.869182 0.803617 0.556825 1.05996 0.337062 1.38886C0.117299 1.71776 1.07779e-06 2.10444 1.07779e-06 2.5C1.07779e-06 3.03043 0.210715 3.53914 0.585788 3.91421C0.960861 4.28929 1.46957 4.5 2 4.5ZM2 14.5C1.60444 14.5 1.21776 14.6173 0.888861 14.8371C0.559963 15.0568 0.303617 15.3692 0.152242 15.7346C0.000866562 16.1001 -0.0387401 16.5022 0.0384303 16.8902C0.115601 17.2781 0.306083 17.6345 0.585788 17.9142C0.865493 18.1939 1.22186 18.3844 1.60982 18.4616C1.99778 18.5387 2.39992 18.4991 2.76537 18.3478C3.13082 18.1964 3.44318 17.94 3.66294 17.6111C3.8827 17.2822 4 16.8956 4 16.5C4 15.9696 3.78929 15.4609 3.41421 15.0858C3.03914 14.7107 2.53043 14.5 2 14.5ZM2 7.5C1.60444 7.5 1.21776 7.6173 0.888861 7.83706C0.559963 8.05682 0.303617 8.36918 0.152242 8.73463C0.000866562 9.10009 -0.0387401 9.50222 0.0384303 9.89018C0.115601 10.2781 0.306083 10.6345 0.585788 10.9142C0.865493 11.1939 1.22186 11.3844 1.60982 11.4616C1.99778 11.5387 2.39992 11.4991 2.76537 11.3478C3.13082 11.1964 3.44318 10.94 3.66294 10.6111C3.8827 10.2822 4 9.89556 4 9.5C4 8.96957 3.78929 8.46086 3.41421 8.08579C3.03914 7.71071 2.53043 7.5 2 7.5Z&quot;></path></svg></button></div></div></div><dialog class=&quot;vp-menu ModalMenu_module_menu__4fe0e031 SideDockMenu_module_menu__3e8760ae&quot; data-menu=sidedock aria-modal=true style=overflow:hidden;opacity:0;pointer-events:none;display:none;max-width:500px;max-height:280px;top:50%;left:50%;transform:translate(-50%,-50%)></dialog><div class=&quot;OverlayBase_module_overlayWrapper__42ef25fe OverlayBase_module_hidden__42ef25fe&quot; role=dialog aria-modal=true aria-labelledby=overlay-labelledby data-content-area-sibling-eligible=true data-overlay=true style=overflow:hidden;opacity:0;pointer-events:none;display:block;visibility:hidden><div class=OverlayBase_module_overlayCell__42ef25fe><div class=OverlayBase_module_overlay__42ef25fe></div></div><nav class=OverlayBase_module_overlayNav__42ef25fe><button class=&quot;CloseOverlayButton_module_closeOverlayButton__74aa447b shared_module_focusableButton__29a0c6d5&quot; aria-label=&quot;Close overlay&quot; data-close-overlay=true><svg viewBox=&quot;0 0 20 20&quot;><path d=&quot;M11.06 10l4.597-4.596a.749.749 0 1 0-1.061-1.06L10 8.938 5.404 4.343a.749.749 0 1 0-1.06 1.061L8.938 10l-4.596 4.596a.749.749 0 1 0 1.061 1.06L10 11.062l4.596 4.596a.749.749 0 1 0 1.06-1.061L11.062 10z&quot; fill=#fff fill-rule=evenodd></path></svg></button></nav></div><div class=ControlBar_module_controlBarWrapper__33f2e772><div class=PlayButton_module_playButtonWrapper__b9d5abe0><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 PlayButton_module_playButton__b9d5abe0&quot; type=button tabindex=0 data-play-button=true aria-labelledby=play-button-tooltip data-touch-device=false><svg width=24 height=24 viewBox=&quot;0 0 24 24&quot; xmlns=http://www.w3.org/2000/svg data-play-icon=true class=PlayButton_module_playIcon__b9d5abe0><path d=&quot;M19 12C19 12.3557 18.8111 12.6846 18.5039 12.8638L6.50387 19.8638C6.19458 20.0442 5.81243 20.0455 5.50194 19.8671C5.19145 19.6888 5 19.3581 5 19L5 5C5 4.64193 5.19145 4.3112 5.50194 4.13286C5.81243 3.95452 6.19458 3.9558 6.50387 4.13622L18.5039 11.1362C18.8111 11.3154 19 11.6443 19 12Z&quot; class=fill></path></svg><span class=Button_module_buttonChildren__61be5b9c><span id=play-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 Tooltip_module_playTooltip__b2bc4d16&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Play</span></span></button></div><div class=&quot;vp-controls ControlBar_module_controls__33f2e772&quot; data-control-bar=true><div class=ControlBar_module_progressBarAndButtons__33f2e772><div class=ProgressBar_module_progressBarContainer__20d7fbb1><div class=&quot;vp-progress ProgressBar_module_progressBar__20d7fbb1&quot; data-progress-bar=true role=presentation><div class=&quot;FocusTarget_module_focusTarget__abd564d5 shared_module_focusable__29a0c6d5&quot; role=slider aria-label=&quot;Progress Bar&quot; aria-valuemin=0 aria-valuemax=596 aria-valuenow=0 aria-valuetext=&quot;00:00 of 09:56&quot; tabindex=0 data-progress-bar-focus-target=true></div><div class=ChapterSegments_module_chapterSegmentsWrapper__426e8ff1><div class=ChapterSegment_module_chapterWrapper__33ca9410 style=&quot;width:calc(100% + 0px)&quot;><div class=ChapterSegment_module_chapter__33ca9410><div class=&quot;LoadedBar_module_loaded__3d837846 ChapterSegment_module_segmentBar__33ca9410&quot; data-progress-bar-loaded=true style=width:0%></div><div class=&quot;PlayedBar_module_played__38fb8087 ChapterSegment_module_segmentBar__33ca9410&quot; data-progress-bar-played=true style=width:0%></div></div></div></div><div class=ThumbnailPreview_module_thumbnailPreview__0cb46f3c role=presentation aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:0%;max-width:120px><div class=ThumbnailPreview_module_thumbnailPreviewText__0cb46f3c><span class=ThumbnailPreview_module_time__0cb46f3c>00:00</span></div></div><div class=Timecode_module_timecodeContainer__0e71c943 role=presentation aria-hidden=true data-progress-bar-timecode-container=true style=left:0%><div class=Timecode_module_timecode__0e71c943 data-progress-bar-timecode=true>09:56</div></div></div></div><div class=ControlBarButtonsAndMenus_module_wrapper__768465f8><div class=ControlBarButtonsAndMenus_module_collapsibleWrapper__768465f8 role=presentation tabindex=-1 style=max-width:124px><div class=ControlBarButtonsAndMenus_module_collapsibleContent__768465f8 role=none><div class=VolumeControl_module_volumeControlContainer__02ffae11 data-volume-control-container=true><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles ControlBarButton_module_controlBarButton__5e0eae92&quot; type=button tabindex=0 aria-label=Mute aria-keyshortcuts=m data-volume-button=true><svg viewBox=&quot;0 0 24 24&quot; data-volume-icon=true><path fill-rule=evenodd clip-rule=evenodd d=&quot;M20 12C20 15.7277 17.4505 18.8599 14 19.7479V21.7999C18.5645 20.8734 22 16.8379 22 12C22 7.16206 18.5645 3.12655 14 2.20001V4.25201C17.4505 5.1401 20 8.2723 20 12ZM18 12C18 9.38754 16.3304 7.16506 14 6.34139V8.53511C15.1956 9.22672 16 10.5194 16 12C16 13.4805 15.1956 14.7732 14 15.4648V17.6586C16.3304 16.8349 18 14.6124 18 12ZM6.58579 8.00396H4C2.89543 8.00396 2 8.89939 2 10.004V14.004C2 15.1085 2.89543 16.004 4 16.004H6.58579L10.2929 20.7111C10.9229 21.341 12 20.8949 12 20.004V4.00396C12 3.11305 10.9229 2.66689 10.2929 3.29685L6.58579 8.00396Z&quot;></path></svg></button><div role=slider class=&quot;VolumeControl_module_volumeControl__02ffae11 volume shared_module_focusable__29a0c6d5&quot; tabindex=0 aria-label=&quot;Volume (use up/down arrow keys to change)&quot; aria-valuenow=100 aria-valuetext=&quot;100% volume&quot; aria-valuemin=0 aria-valuemax=100 data-volume-control=true style=overflow:hidden;opacity:0;pointer-events:none><div class=VolumeControl_module_volumeBar__02ffae11><div class=VolumeControl_module_volumeBarFill__02ffae11 style=height:100%></div><div class=VolumeControl_module_sliderHandle__02ffae11 style=bottom:100%></div></div></div></div><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 ControlBarButton_module_controlBarButton__5e0eae92 vp-prefs PrefsButton_module_prefsButton__c0bd4f7c&quot; type=button tabindex=0 id=prefs-control-bar-button aria-expanded=false aria-haspopup=dialog data-prefs-button=true aria-labelledby=prefs-control-bar-button-tooltip data-touch-device=false><svg width=20 height=20 viewBox=&quot;0 0 20 20&quot; fill=none xmlns=http://www.w3.org/2000/svg class=PrefsButton_module_gearIcon__c0bd4f7c><path fill-rule=evenodd clip-rule=evenodd d=&quot;M9.16668 1.66699C8.2462 1.66699 7.50001 2.41318 7.50001 3.33366V4.72835C7.21484 4.86382 6.94241 5.02175 6.68499 5.19984L5.46953 4.4981C4.68103 4.04285 3.66009 4.31415 3.20034 5.11047L2.36526 6.55686C1.90707 7.35046 2.17605 8.3701 2.96953 8.82822L4.18535 9.53017C4.17298 9.68526 4.16668 9.84206 4.16668 10.0003C4.16668 10.1586 4.17298 10.3154 4.18535 10.4705L2.96953 11.1724C2.17605 11.6306 1.90707 12.6502 2.36526 13.4438L3.20034 14.8902C3.66009 15.6865 4.68103 15.9578 5.46953 15.5026L6.685 14.8008C6.94241 14.9789 7.21484 15.1368 7.50001 15.2723V16.667C7.50001 17.5875 8.2462 18.3337 9.16668 18.3337H10.8333C11.7538 18.3337 12.5 17.5875 12.5 16.667V15.2723C12.7851 15.1369 13.0574 14.979 13.3147 14.801L14.5298 15.5026C15.3183 15.9578 16.3393 15.6865 16.799 14.8902L17.6341 13.4438C18.0923 12.6502 17.8233 11.6306 17.0298 11.1724L15.8146 10.4708C15.827 10.3156 15.8333 10.1587 15.8333 10.0003C15.8333 9.84193 15.827 9.68501 15.8146 9.52981L17.0298 8.82822C17.8233 8.3701 18.0923 7.35046 17.6341 6.55686L16.799 5.11047C16.3393 4.31415 15.3183 4.04285 14.5298 4.4981L13.3147 5.19963C13.0574 5.02162 12.7851 4.86377 12.5 4.72835V3.33366C12.5 2.41318 11.7538 1.66699 10.8333 1.66699H9.16668ZM12.5 10.0003C12.5 11.381 11.3807 12.5003 10 12.5003C8.6193 12.5003 7.50001 11.381 7.50001 10.0003C7.50001 8.61961 8.6193 7.50033 10 7.50033C11.3807 7.50033 12.5 8.61961 12.5 10.0003Z&quot;></path></svg><span class=&quot;Button_module_buttonChildren__61be5b9c ControlBarButton_module_controlBarButtonChildren__5e0eae92&quot;><span id=prefs-control-bar-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 ControlBarButton_module_controlBarButtonTooltip__5e0eae92&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Settings</span></span></button><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 ControlBarButton_module_controlBarButton__5e0eae92 pip&quot; type=button tabindex=0 id=pip-control-bar-button data-pip-button=true aria-labelledby=pip-control-bar-button-tooltip data-touch-device=false><svg width=20 height=20 viewBox=&quot;0 0 20 20&quot; fill=none xmlns=http://www.w3.org/2000/svg data-enter-pip=true><path fill-rule=evenodd clip-rule=evenodd d=&quot;M3.33329 4.99992H16.6666V9.99992H18.3333V4.99992C18.3333 4.07944 17.5871 3.33325 16.6666 3.33325H3.33329C2.41282 3.33325 1.66663 4.07944 1.66663 4.99992V13.3333C1.66663 14.2537 2.41282 14.9999 3.33329 14.9999H8.33329V13.3333H3.33329V4.99992ZM9.99996 12.6666C9.99996 12.1143 10.4477 11.6666 11 11.6666H17.3333C17.8856 11.6666 18.3333 12.1143 18.3333 12.6666V17.3333C18.3333 17.8855 17.8856 18.3333 17.3333 18.3333H11C10.4477 18.3333 9.99996 17.8855 9.99996 17.3333V12.6666ZM7.91663 7.60408V8.59492L6.17079 6.84909C6.05829 6.73659 5.90163 6.66659 5.72913 6.66659C5.38413 6.66659 5.10413 6.94575 5.10413 7.29159C5.10413 7.46409 5.17413 7.61992 5.28746 7.73325L7.03246 9.47909H6.04163C5.69663 9.47909 5.41663 9.75825 5.41663 10.1041C5.41663 10.4491 5.69663 10.7291 6.04163 10.7291H8.54163C8.88663 10.7291 9.16663 10.4491 9.16663 10.1041V7.60408C9.16663 7.25825 8.88663 6.97909 8.54163 6.97909C8.19663 6.97909 7.91663 7.25825 7.91663 7.60408Z&quot; fill=white></path></svg><span class=&quot;Button_module_buttonChildren__61be5b9c ControlBarButton_module_controlBarButtonChildren__5e0eae92&quot;><span id=pip-control-bar-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 ControlBarButton_module_controlBarButtonTooltip__5e0eae92&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Picture-in-Picture</span></span></button><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 ControlBarButton_module_controlBarButton__5e0eae92 fullscreen FullscreenButton_module_fullscreen__5b68e32b&quot; type=button tabindex=0 id=fullscreen-control-bar-button data-fullscreen-button=true aria-labelledby=fullscreen-control-bar-button-tooltip data-touch-device=false><svg class=enter-fullscreen-icon width=24 height=24 viewBox=&quot;0 0 24 24&quot; xmlns=http://www.w3.org/2000/svg data-enter-fullscreen=true><path fill-rule=evenodd clip-rule=evenodd d=&quot;M16 5L17.5858 5L14.2929 8.29292C13.9024 8.68345 13.9024 9.31661 14.2929 9.70714C14.6834 10.0977 15.3166 10.0977 15.7071 9.70714L19 6.41426V8C19 8.55228 19.4477 9 20 9C20.5523 9 21 8.55228 21 8V4C21 3.73478 20.8946 3.48043 20.7071 3.29289C20.5196 3.10536 20.2652 3 20 3H16C15.4477 3 15 3.44772 15 4C15 4.55228 15.4477 5 16 5ZM5 8.00002V6.4142L8.29292 9.70712C8.68345 10.0976 9.31661 10.0976 9.70714 9.70712C10.0977 9.3166 10.0977 8.68343 9.70714 8.29291L6.41424 5.00001L8 5.00002C8.55228 5.00002 9 4.5523 9 4.00002C9 3.44773 8.55228 3.00002 8 3.00002H4C3.73478 3.00002 3.48043 3.10537 3.29289 3.29291C3.10536 3.48044 3 3.7348 3 4.00002V8.00002C3 8.5523 3.44772 9.00001 4 9.00001C4.55228 9.00001 5 8.5523 5 8.00002ZM8.00002 19H6.4142L9.70712 15.7071C10.0976 15.3166 10.0976 14.6834 9.70712 14.2929C9.3166 13.9024 8.68343 13.9024 8.29291 14.2929L5.00001 17.5858V16C5.00001 15.4477 4.5523 15 4.00001 15C3.44773 15 3.00002 15.4477 3.00002 16L3.00002 20C3.00002 20.2652 3.10537 20.5196 3.29291 20.7071C3.48044 20.8947 3.7348 21 4.00002 21H8.00002C8.5523 21 9.00001 20.5523 9.00001 20C9.00001 19.4477 8.5523 19 8.00002 19ZM19 17.5858V16C19 15.4477 19.4477 15 20 15C20.5523 15 21 15.4477 21 16V20C21 20.2652 20.8946 20.5196 20.7071 20.7071C20.5196 20.8947 20.2652 21 20 21H16C15.4477 21 15 20.5523 15 20C15 19.4477 15.4477 19 16 19H17.5858L14.2929 15.7071C13.9023 15.3166 13.9023 14.6834 14.2929 14.2929C14.6834 13.9024 15.3166 13.9024 15.7071 14.2929L19 17.5858Z&quot;></path></svg><span class=&quot;Button_module_buttonChildren__61be5b9c ControlBarButton_module_controlBarButtonChildren__5e0eae92&quot;><span id=fullscreen-control-bar-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 ControlBarButton_module_controlBarButtonTooltip__5e0eae92&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Fullscreen</span></span></button></div></div><a href=&quot;https://vimeo.com/253905163?fl=pl&amp;amp;fe=vl&quot; class=&quot;Link_module_link__bdf8051d VimeoLogoLink_module_vimeoLogo__970f58c4 shared_module_focusable__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener data-vimeo-logo=true aria-label=&quot;Watch on Vimeo&quot;><svg viewBox=&quot;0 0 20 20&quot; xmlns=http://www.w3.org/2000/svg aria-hidden=true data-vimeo-small-icon=true><path fill=#fff fill-rule=evenodd clip-rule=evenodd d=&quot;M18.7781 6.00913C18.6943 7.81161 17.4171 10.2795 14.9465 13.4122C12.3922 16.6841 10.231 18.3203 8.46324 18.3203C7.36838 18.3203 6.44133 17.3242 5.68438 15.331C5.17905 13.5043 4.67352 11.6776 4.168 9.85093C3.60591 7.8589 3.00305 6.86167 2.35829 6.86167C2.21771 6.86167 1.7259 7.1533 0.88381 7.73392L0 6.61152C0.927048 5.80871 1.84171 5.00589 2.74171 4.20176C3.9781 3.14879 4.90648 2.59501 5.52533 2.53908C6.98743 2.40059 7.88743 3.38562 8.22533 5.49419C8.5901 7.76902 8.84286 9.18398 8.98457 9.73796C9.40629 11.6253 9.86971 12.5681 10.3766 12.5681C10.7697 12.5681 11.3602 11.9557 12.148 10.7316C12.9345 9.50713 13.3562 8.57558 13.413 7.93547C13.5251 6.87875 13.1034 6.34917 12.148 6.34917C11.6981 6.34917 11.2345 6.45126 10.7575 6.65281C11.6808 3.67218 13.445 2.22456 16.0486 2.30695C17.9792 2.36287 18.8891 3.59693 18.7781 6.00913Z&quot;></path></svg></a></div></div></div></div><dialog class=&quot;vp-menu ModalMenu_module_menu__4fe0e031&quot; data-menu=prefs aria-modal=true style=overflow:hidden;opacity:0;pointer-events:none;display:none;max-width:500px;max-height:280px;top:50%;left:50%;transform:translate(-50%,-50%)></dialog><div class=BufferHandler_module_shade__94101f09 data-shade=true style=overflow:hidden;opacity:0;pointer-events:none;display:none></div><svg viewBox=&quot;0 0 48 48&quot; xmlns=http://www.w3.org/2000/svg fill=none data-spinner=true class=&quot;Spinner_module_spinner__795e5e53 vp-spin Spinner_module_lg__795e5e53&quot; data-component-type=spinner style=overflow:hidden;opacity:0;pointer-events:none;display:none><circle data-spinner-trace=true cx=24 cy=24 r=22 stroke=white></circle><circle data-spinner-circle=true cx=24 cy=24 r=22 stroke=white></circle></svg><div class=&quot;vp-captions CaptionsRenderer_module_captions__04afad3c Captions_module_captions__5ed5b89b Captions_module_hide__5ed5b89b Captions_module_withControls__5ed5b89b Captions_module_contentAreaSibling__5ed5b89b sf-hidden&quot; aria-live=assertive style='font-size:13px;font-variant:initial;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;color:rgb(255,255,255);text-shadow:none'></div><div class=&quot;Outro_module_outroWrapper__64bf980e vp-outro-wrapper Outro_module_inactive__64bf980e&quot; data-content-area-sibling-eligible=true style=overflow:hidden;opacity:0;pointer-events:none;display:none></div></div>\n \n<div id=right-content-area class=&quot;RightContentArea_module_rightContentArea__a0f39df8 RightContentArea_module_iframeEmbed__a0f39df8&quot; aria-hidden=true><div class=&quot;AIWidget_module_aiWidget__f665b717 AIWidget_module_hidden__f665b717&quot; aria-label=&quot;Ask Vimeo AI&quot; role=dialog aria-modal=true aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;visibility:hidden;display:block></div></div></div>\n<script type=application/ld+json>{&quot;embedUrl&quot;:&quot;https://player.vimeo.com/video/253905163?h=6e63c9f991&quot;,&quot;thumbnailUrl&quot;:&quot;https://i.vimeocdn.com/video/680918441-b17f6b5d3cf508f4554b9a176faacbf150df4e784b73dc1e905d32a53195b096-d?f=webp&quot;,&quot;name&quot;:&quot;Big Buck Bunny&quot;,&quot;description&quot;:&quot;This is \\&quot;Big Buck Bunny\\&quot; by \\&quot;Jason Chen\\&quot; on Vimeo, the home for high quality videos and the people who love them.&quot;,&quot;duration&quot;:&quot;PT596S&quot;,&quot;uploadDate&quot;:&quot;2018-02-01T21:43:15-05:00&quot;,&quot;@context&quot;:&quot;https://schema.org/&quot;,&quot;@type&quot;:&quot;VideoObject&quot;}</script>\n<harper-render-box popover=manual style=pointer-events:none;border:none class=sf-hidden></harper-render-box>\"></iframe><p><br><h2 class=ql-align-center>Getting Started is Easy</h2><p><br><div class=ql-code-block-container spellcheck=false><select class=ql-ui contenteditable=false><option value=plain>Plain<option value=bash>Bash<option value=cpp>C++<option value=cs>C#<option value=css>CSS<option value=diff>Diff<option value=xml>HTML/XML<option value=java>Java<option value=javascript selected>JavaScript<option value=markdown>Markdown<option value=php>PHP<option value=python>Python<option value=ruby>Ruby<option value=sql>SQL</select><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-comment\">// &lt;link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.snow.css\" rel=\"stylesheet\"&gt;</span></div><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-comment\">// &lt;script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.js\"&gt;&lt;/script&gt;</span></div><div class=ql-code-block data-language=javascript><br></div><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-keyword\">const</span> quill = <span class=\"ql-token hljs-keyword\">new</span> <span class=\"ql-token hljs-title\">Quill</span>(<span class=\"ql-token hljs-string\">'#editor'</span>, {</div><div class=ql-code-block data-language=javascript>  <span class=\"ql-token hljs-attr\">modules</span>: {</div><div class=ql-code-block data-language=javascript>    <span class=\"ql-token hljs-attr\">toolbar</span>: <span class=\"ql-token hljs-string\">'#toolbar'</span></div><div class=ql-code-block data-language=javascript>  },</div><div class=ql-code-block data-language=javascript>  <span class=\"ql-token hljs-attr\">theme</span>: <span class=\"ql-token hljs-string\">'snow'</span></div><div class=ql-code-block data-language=javascript>});</div><div class=ql-code-block data-language=javascript><br></div><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-comment\">// Open your browser's developer console to try out the API!</span></div></div><p><br><p><br><p class=ql-align-center><strong>Built with</strong><p class=ql-align-center><span class=ql-formula data-value=\"x^2 + (y - \\sqrt[3]{x^2})^2 = 1\">﻿<span contenteditable=false><span class=katex><span class=katex-mathml><math xmlns=http://www.w3.org/1998/Math/MathML><semantics><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mo stretchy=false>(</mo><mi>y</mi><mo>−</mo><mroot><msup><mi>x</mi><mn>2</mn></msup><mn>3</mn></mroot><msup><mo stretchy=false>)</mo><mn>2</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding=application/x-tex>x^2 + (y - \\sqrt[3]{x^2})^2 = 1</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:0.8974em;vertical-align:-0.0833em></span><span class=mord><span class=\"mord mathnormal\">x</span><span class=msupsub><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.8141em><span style=top:-3.063em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2</span></span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2222em></span><span class=mbin>+</span><span class=mspace style=margin-right:0.2222em></span></span><span class=base><span class=strut style=height:1em;vertical-align:-0.25em></span><span class=mopen>(</span><span class=\"mord mathnormal\" style=margin-right:0.0359em>y</span><span class=mspace style=margin-right:0.2222em></span><span class=mbin>−</span><span class=mspace style=margin-right:0.2222em></span></span><span class=base><span class=strut style=height:1.2051em;vertical-align:-0.25em></span><span class=\"mord sqrt\"><span class=root><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.8443em><span style=top:-3.0221em><span class=pstrut style=height:2.5em></span><span class=\"sizing reset-size6 size1 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">3</span></span></span></span></span></span></span></span><span class=\"vlist-t vlist-t2\"><span class=vlist-r><span class=vlist style=height:0.9551em><span class=svg-align style=top:-3em><span class=pstrut style=height:3em></span><span class=mord style=padding-left:0.833em><span class=mord><span class=\"mord mathnormal\">x</span><span class=msupsub><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.7401em><span style=top:-2.989em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2</span></span></span></span></span></span></span></span></span></span><span style=top:-2.9151em><span class=pstrut style=height:3em></span><span class=hide-tail style=min-width:0.853em;height:1.08em><svg width=400em height=1.08em viewBox=\"0 0 400000 1080\" preserveAspectRatio=\"xMinYMin slice\"><path d=\"M95,702\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl0 -0\nc5.3,-9.3,12,-14,20,-14\nH400000v40H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM834 80h400000v40h-400000z\"></path></svg></span></span></span><span class=vlist-s>​</span></span><span class=vlist-r><span class=vlist style=height:0.0849em><span></span></span></span></span></span><span class=mclose><span class=mclose>)</span><span class=msupsub><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.8141em><span style=top:-3.063em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2</span></span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span></span><span class=base><span class=strut style=height:0.6444em></span><span class=mord>1</span></span></span></span></span>﻿</span><p><br></p></div><div class=\"ql-tooltip ql-hidden sf-hidden\"></div></div></div></div><div id=snow-wrapper><div id=snow-container><div class=\"toolbar ql-toolbar ql-snow\"><span class=ql-formats><span class=\"ql-header ql-picker\"><span class=ql-picker-label tabindex=0 role=button aria-expanded=false aria-controls=ql-picker-options-0 data-value=3 data-label=Normal><svg viewBox=\"0 0 18 18\"><polygon class=ql-stroke points=\"7 11 9 13 11 11 7 11\"></polygon><polygon class=ql-stroke points=\"7 7 9 5 11 7 7 7\"></polygon></svg></span><span class=\"ql-picker-options sf-hidden\" aria-hidden=true tabindex=-1 id=ql-picker-options-0></span></span><select class=ql-header style=display:none></select><span class=\"ql-font ql-picker\"><span class=ql-picker-label tabindex=0 role=button aria-expanded=false aria-controls=ql-picker-options-1 data-value=sailec data-label=\"Sailec Light\"><svg viewBox=\"0 0 18 18\"><polygon class=ql-stroke points=\"7 11 9 13 11 11 7 11\"></polygon><polygon class=ql-stroke points=\"7 7 9 5 11 7 7 7\"></polygon></svg></span><span class=\"ql-picker-options sf-hidden\" aria-hidden=true tabindex=-1 id=ql-picker-options-1></span></span><select class=ql-font style=display:none></select></span><span class=ql-formats><button class=ql-bold type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path><path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path></svg></button><button class=ql-italic type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line><line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line><line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line></svg></button><button class=ql-underline type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path><rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect></svg></button></span><span class=ql-formats><button class=ql-list value=ordered type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line><line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line><line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line><line class=\"ql-stroke ql-thin\" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line><path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path><path class=\"ql-stroke ql-thin\" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path><path class=\"ql-stroke ql-thin\" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path></svg></button><button class=ql-list value=bullet type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line><line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line><line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line><line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line><line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line><line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line></svg></button><span class=\"ql-align ql-picker ql-icon-picker\"><span class=ql-picker-label tabindex=0 role=button aria-expanded=false aria-controls=ql-picker-options-2><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line><line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line><line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line></svg></span><span class=\"ql-picker-options sf-hidden\" aria-hidden=true tabindex=-1 id=ql-picker-options-2></span></span><select class=ql-align style=display:none></select></span><span class=ql-formats><button class=ql-link type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line><path class=\"ql-even ql-stroke\" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path><path class=\"ql-even ql-stroke\" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path></svg></button><button class=ql-image type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><rect class=ql-stroke height=10 width=12 x=3 y=4></rect><circle class=ql-fill cx=6 cy=7 r=1></circle><polyline class=\"ql-even ql-fill\" points=\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\"></polyline></svg></button><button class=ql-video type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><rect class=ql-stroke height=12 width=12 x=3 y=3></rect><rect class=ql-fill height=12 width=1 x=5 y=3></rect><rect class=ql-fill height=12 width=1 x=12 y=3></rect><rect class=ql-fill height=2 width=8 x=5 y=8></rect><rect class=ql-fill height=1 width=3 x=3 y=5></rect><rect class=ql-fill height=1 width=3 x=3 y=7></rect><rect class=ql-fill height=1 width=3 x=3 y=10></rect><rect class=ql-fill height=1 width=3 x=3 y=12></rect><rect class=ql-fill height=1 width=3 x=12 y=5></rect><rect class=ql-fill height=1 width=3 x=12 y=7></rect><rect class=ql-fill height=1 width=3 x=12 y=10></rect><rect class=ql-fill height=1 width=3 x=12 y=12></rect></svg></button></span><span class=ql-formats><button class=ql-formula type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path><rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect><path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path></svg></button><button class=ql-code-block type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><polyline class=\"ql-even ql-stroke\" points=\"5 7 3 9 5 11\"></polyline><polyline class=\"ql-even ql-stroke\" points=\"13 7 15 9 13 11\"></polyline><line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line></svg></button></span><span class=ql-formats><button class=ql-clean type=button aria-pressed=false><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line><line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line><line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line><line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line><rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect></svg></button></span></div><div class=\"ql-container ql-snow\"><div class=ql-editor contenteditable=true><h1 class=ql-align-center>Quill Rich Text Editor</h1><p><br><p>Quill is a free, <a href=https://github.com/slab/quill/ rel=\"noopener noreferrer\" target=_blank>open source</a> WYSIWYG editor built for the modern web. With its <a href=https://quilljs.com/docs/modules/ rel=\"noopener noreferrer\" target=_blank>modular architecture</a> and expre ssive <a href=https://quilljs.com/docs/api rel=\"noopener noreferrer\" target=_blank>API</a>, it is completely customizable to fit any need.<p><br></p><iframe class=\"ql-video ql-align-center\" frameborder=0 allowfullscreen height=280 width=500 sandbox=\"allow-popups allow-top-navigation-by-user-activation allow-scripts allow-modals allow-popups allow-downloads allow-pointer-lock allow-presentation\" srcdoc=\"<!DOCTYPE html> <html lang=en><meta charset=utf-8>\n<meta name=viewport content=&quot;width=device-width,initial-scale=1,user-scalable=yes&quot;>\n<style>:root{--fa-font-solid:normal 900 1em/1&quot;Font Awesome 7 Free&quot;;--fa-font-regular:normal 400 1em/1&quot;Font Awesome 7 Free&quot;;--fa-font-light:normal 300 1em/1&quot;Font Awesome 7 Pro&quot;;--fa-font-thin:normal 100 1em/1&quot;Font Awesome 7 Pro&quot;;--fa-font-duotone:normal 900 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-duotone-regular:normal 400 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-duotone-light:normal 300 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-duotone-thin:normal 100 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-brands:normal 400 1em/1&quot;Font Awesome 7 Brands&quot;;--fa-font-sharp-solid:normal 900 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-regular:normal 400 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-light:normal 300 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-thin:normal 100 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-duotone-solid:normal 900 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-sharp-duotone-regular:normal 400 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-sharp-duotone-light:normal 300 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-sharp-duotone-thin:normal 100 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-slab-regular:normal 400 1em/1&quot;Font Awesome 7 Slab&quot;;--fa-font-slab-press-regular:normal 400 1em/1&quot;Font Awesome 7 Slab Press&quot;;--fa-font-whiteboard-semibold:normal 600 1em/1&quot;Font Awesome 7 Whiteboard&quot;;--fa-font-thumbprint-light:normal 300 1em/1&quot;Font Awesome 7 Thumbprint&quot;;--fa-font-notdog-solid:normal 900 1em/1&quot;Font Awesome 7 Notdog&quot;;--fa-font-notdog-duo-solid:normal 900 1em/1&quot;Font Awesome 7 Notdog Duo&quot;;--fa-font-etch-solid:normal 900 1em/1&quot;Font Awesome 7 Etch&quot;;--fa-font-jelly-regular:normal 400 1em/1&quot;Font Awesome 7 Jelly&quot;;--fa-font-jelly-fill-regular:normal 400 1em/1&quot;Font Awesome 7 Jelly Fill&quot;;--fa-font-jelly-duo-regular:normal 400 1em/1&quot;Font Awesome 7 Jelly Duo&quot;;--fa-font-chisel-regular:normal 400 1em/1&quot;Font Awesome 7 Chisel&quot;;--fa-font-utility-semibold:normal 600 1em/1&quot;Font Awesome 7 Utility&quot;;--fa-font-utility-duo-semibold:normal 600 1em/1&quot;Font Awesome 7 Utility Duo&quot;;--fa-font-utility-fill-semibold:normal 600 1em/1&quot;Font Awesome 7 Utility Fill&quot;}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1,1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,0.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,0.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-0.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,0.95)) translateY(0)}57%{transform:scale(1,1) translateY(var(--fa-bounce-rebound,-0.125em))}64%{transform:scale(1,1) translateY(0)}100%{transform:scale(1,1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,0.4)}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,0.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,100%{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}</style><link rel=canonical href=https://player.vimeo.com/video/253905163>\n<meta name=googlebot content=noindex,indexifembedded>\n<title>Big Buck Bunny from Jason Chen on Vimeo</title>\n<style>body,html,.player{overflow:hidden;width:100%;height:100%;margin:0;padding:0}</style>\n<style>@keyframes buffer{100%{transform:translateX(-10px)}}@-moz-keyframes bufferLeft{0%{left:0}100%{left:-10px}}@keyframes throb{0%,100%{background-color:#555}50%{background-color:#444}}@keyframes wiggle{0%{transform:translateY(10px)}20%{transform:translateY(0)}40%,80%{transform:translateX(8px)}60%{transform:translateX(-8px)}100%{transform:translateX(0)}}@keyframes pulse{50%{transform:scale(.9)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-135px}}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes scaleAnimation{0%{transform:scale(.9,.9)}100%{transform:scale(1,1)}}body:not(.showfocus) .player a,body:not(.showfocus) .player button,body:not(.showfocus) .player div,body:not(.showfocus) .player span,body:not(.showfocus) .player svg{outline:0!important}.player{position:relative;max-height:100%;width:100%;height:100%;margin:0;padding:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:auto;color:#fff;line-height:normal;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial!important;font-size:10px;border-collapse:separate;user-select:none;-webkit-user-select:none;touch-action:manipulation}.player :focus{outline:2px solid #00adef;outline-offset:2px}.player,.player *,.player ::after,.player ::before{box-sizing:border-box;-webkit-tap-highlight-color:transparent}.player button{cursor:pointer;font-size:1em}.player button:not(.exclude-global-button-styles){appearance:none;border:0;padding:0;margin:0;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial;line-height:normal;height:auto;vertical-align:baseline}.player a:active,.player button:active,.player button:not(:focus){outline:0}.player img{border:0}.player a{text-decoration:none}.player .hidden{display:none!important}.player .fill{fill:#fff}.player .vp-target{top:0;left:0;height:100%;z-index:3}.player .vp-video-wrapper{opacity:1;transition:opacity 125ms ease-out}.player .vp-content-area-background,.player .vp-player-ui-container,.player .vp-player-ui-overlays{pointer-events:none;position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden}.player .vp-player-ui-container{z-index:4}.player .vp-player-ui-overlays{z-index:36}.player.hide-controls-mode video::-webkit-media-controls-start-playback-button{display:none}.player.right-content-area-supported{overflow:hidden}.player.right-content-area-supported>.content-area-sibling-enabled{width:100%;right:0;position:absolute}.player[data-filter] .thumb::after,.player[data-filter] .vp-preview::after,.player[data-filter] .vp-video::after{content:&quot;&quot;;display:block;height:100%;width:100%;top:0;left:0;position:absolute;opacity:1;background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,transparent,transparent)}.player[data-filter=aden] .thumb::after,.player[data-filter=aden] .vp-preview::after,.player[data-filter=aden] .vp-video::after{background:linear-gradient(to right,rgba(66,10,14,.2),transparent),radial-gradient(circle,transparent,transparent);mix-blend-mode:darken}.player[data-filter=earlybird] .thumb::after,.player[data-filter=earlybird] .vp-preview::after,.player[data-filter=earlybird] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,#d0ba8e 20%,#360309 85%,#1d0210 100%);mix-blend-mode:overlay}.player[data-filter=hudson] .thumb::after,.player[data-filter=hudson] .vp-preview::after,.player[data-filter=hudson] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,#a6b1ff 50%,#342134);mix-blend-mode:multiply;opacity:.5}.player[data-filter=inkwell] .thumb::after,.player[data-filter=inkwell] .vp-preview::after,.player[data-filter=inkwell] .vp-video::after{opacity:0}.player[data-filter=mayfair] .thumb::after,.player[data-filter=mayfair] .vp-preview::after,.player[data-filter=mayfair] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle at 40% 40%,rgba(255,255,255,.8),rgba(255,200,200,.6),#111 60%);mix-blend-mode:overlay;opacity:.4}.player[data-filter=toaster] .thumb::after,.player[data-filter=toaster] .vp-preview::after,.player[data-filter=toaster] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,#804e0f,#3b003b);mix-blend-mode:screen}.player[data-filter=ascii] .thumb::after{background-color:#0f0;mix-blend-mode:darken}.player .vp-video-wrapper{top:0;left:0;bottom:0;overflow:hidden}.player .vp-video-wrapper .vp-video{position:absolute;top:0;left:0;bottom:0;right:0;transition:filter .25s,opacity .25s}.player .vp-video-wrapper .vp-video::after{transition:all .25s}.player .vp-video-wrapper .vp-telecine{position:absolute;top:0;left:0;bottom:0;right:0;transition:opacity .25s}.player .vp-video-wrapper .vp-telecine.hide-webkit-controls video::-webkit-media-controls-play-button{display:none}.player .vp-video-wrapper .vp-telecine.hide-webkit-controls video::-webkit-media-controls-start-playback-button{display:none}.player .vp-video-wrapper video{width:100%;height:100%}.SideDock_module_root__eeb5e08f{position:absolute;top:0;right:0;padding:8px;padding-top:0;z-index:18;transform:translate3d(0,0,0);display:flex;flex-direction:column;align-items:flex-end}.SideDock_module_root__eeb5e08f,.SideDock_module_root__eeb5e08f .SideDock_module_sidedockInner__eeb5e08f{transition:opacity 250ms ease-out}.SideDock_module_root__eeb5e08f button{margin:8px;font-family:inherit;border-radius:4px;border:0;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;transition:background-color 40ms;margin-right:0;background-color:var(--color-one-opacity-ninety);color:var(--color-three)}.SideDock_module_root__eeb5e08f button svg{pointer-events:none}.SideDock_module_root__eeb5e08f button path{fill:var(--color-three)}.SideDock_module_root__eeb5e08f button,.SideDock_module_root__eeb5e08f label{margin-top:8px;margin-bottom:0}.SideDock_module_root__eeb5e08f button:not([data-vod-button=true]){padding:1px 6px}.SideDock_module_root__eeb5e08f button:focus{outline:none}.SideDock_module_root__eeb5e08f button:hover:not(:active){background-color:var(--color-two);color:var(--color-two-monochrome);border:none}.SideDock_module_root__eeb5e08f button:hover:not(:active) path{fill:var(--color-two-monochrome)}.SideDock_module_root__eeb5e08f.SideDock_module_outroVisible__eeb5e08f button:not(:hover){opacity:0.65}.LabeledButton_module_labeledButton__a4450693{background:rgba(0,0,0,0.9);transition:opacity 150ms ease-out,transform 150ms ease-out;margin:8px;font-family:inherit;color:#fff;border:0;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background-color:rgba(0,0,0,0.9);display:flex;border-radius:0.25rem;padding:0.8em 1.2em;line-height:1.88rem;height:2rem;font-size:1.2em;font-weight:bold;margin-right:0;align-items:center;white-space:nowrap}.LabeledButton_module_box__a4450693{display:flex;justify-content:flex-end;transition:transform 150ms ease-out}button.LikeButton_module_likeButton__3908feee.LikeButton_module_animating__3908feee:hover{background-color:var(--color-one-opacity-ninety);color:var(--color-three)}button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee{animation:LikeButton_module_heartbeat__3908feee 1s 1 ease-out}button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee path{stroke:var(--color-two-monochrome);fill:transparent}button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee.LikeButton_module_liked__3908feee path,button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee.LikeButton_module_liked__3908feee.LikeButton_module_redHeart__3908feee path{fill:var(--color-two-monochrome);stroke:var(--color-two-monochrome)}@media (prefers-reduced-motion:reduce){button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee{animation:none}}@keyframes LikeButton_module_heartbeat__3908feee{0%{transform:scale(1)}10%{transform:scale(1)}20%{transform:scale(1.3)}30%{transform:scale(1.1)}40%{transform:scale(1.3)}100%{transform:scale(1)}}.ShareButton_module_shareButton__26260904:hover .ShareButton_module_shareIcon__26260904{display:inline-block;animation:ShareButton_module_takeoff__26260904 750ms 1;animation-timing-function:ease-in-out;transform-origin:center}@media (prefers-reduced-motion:reduce){.ShareButton_module_shareButton__26260904:hover .ShareButton_module_shareIcon__26260904{animation:none}}@keyframes ShareButton_module_takeoff__26260904{0%{transform:translate(0,0)}20%{transform:translate(-3px,3px)}40%{transform:translate(2px,-2px)}60%{transform:translate(-1px,1px)}80%{transform:translate(0.5px,-0.5px)}100%{transform:translate(0,0)}}button.WatchLaterButton_module_watchLaterButton__238c6c3b.WatchLaterButton_module_animating__238c6c3b:hover{background-color:var(--color-one-opacity-ninety);color:var(--color-three)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) .WatchLaterButton_module_watchLaterIcon__238c6c3b{display:inline-block;animation:0.25s ease-in-out 0.1s 1;transform-origin:center;animation-name:WatchLaterButton_module_pop__238c6c3b}@media (prefers-reduced-motion:reduce){button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) .WatchLaterButton_module_watchLaterIcon__238c6c3b{animation:none}}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) circle[data-animated-clock-circle]{stroke:var(--color-two-monochrome)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) path[data-animated-clock-hand]{stroke:var(--color-two-monochrome)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b).WatchLaterButton_module_filled__238c6c3b circle[data-animated-clock-circle]{fill:var(--color-two-monochrome)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b).WatchLaterButton_module_filled__238c6c3b path[data-animated-clock-hand]{stroke:var(--color-two)}@keyframes WatchLaterButton_module_pop__238c6c3b{0%{transform:scale(1)}10%{transform:scale(1.15)}100%{transform:scale(1)}}.DebugPanel_module_debugButton__42adb963:hover:not(:active){border:none}.DebugValues_module_clipId__54d9bb7b:hover{text-decoration:underline}.DebugValues_module_bandwidthMin__54d9bb7b::before,.DebugValues_module_bandwidthMax__54d9bb7b::before{display:block;position:absolute;left:2px;font-size:0.8em;top:3px}.DebugValues_module_bandwidthMin__54d9bb7b::before{content:&quot;▼&quot;/&quot;Minimum bandwidth&quot;}.DebugValues_module_bandwidthMax__54d9bb7b::before{content:&quot;▲&quot;/&quot;Maximum bandwidth&quot;}.BandwidthSeriesDisplay_module_marker__e795ff85:hover{cursor:pointer;stroke-width:3}.TitleTags_module_tagWrapper__20a17f3b{display:inline-block}a.TitleTags_module_aiTag__20a17f3b[data-ai-content-tag=true]:hover{background:rgba(0,0,0,0.2);color:var(--color-two-monochrome)}.Title_module_title__9dc182ba{display:flex;position:relative;padding:8px;z-index:12;transition:opacity 250ms ease-out;margin-right:4.4em;transform:translate3d(0,0,0)}.Title_module_portrait__9dc182ba{margin:0 0.4em 0 0;flex:1 0 auto;pointer-events:inherit}.Title_module_portrait__9dc182ba .Title_module_portraitLink__9dc182ba{position:relative;display:block;width:100%;height:100%}.player.player-xs .Title_module_portrait__9dc182ba{width:4.8em;height:4.8em}.Title_module_portrait__9dc182ba img{border:2px solid;border-color:var(--color-one-opacity-ninety);border-radius:50%}.Title_module_portrait__9dc182ba img:hover{border-color:var(--color-two)}.player.player-xs .Title_module_portrait__9dc182ba img{width:4.8em;height:4.8em}.Title_module_header__9dc182ba{margin:0;display:flex;flex-flow:row nowrap}.Title_module_headers__9dc182ba{display:flex;flex-flow:column nowrap;align-items:flex-start;flex:1 1 100%;min-width:0;overflow-wrap:break-word;hyphens:auto}.Title_module_headers__9dc182ba *{pointer-events:inherit}span.Title_module_titleText__9dc182ba{font-size:14px;letter-spacing:-0.2px}.Title_module_titleWrapper__9dc182ba{display:block;position:relative;background-color:var(--color-one-opacity-ninety);color:var(--color-three);border-radius:4px;margin-bottom:0.4em;height:auto}.Title_module_titleWrapper__9dc182ba .Title_module_textAndTagsWrapper__9dc182ba{display:inline-block;vertical-align:middle;border-radius:4px;font-size:14px;padding:0.2857142857em 0.5714285714em;line-height:20px;height:100%}.Title_module_titleWrapper__9dc182ba:hover{background-color:var(--color-two)}.Title_module_titleWrapper__9dc182ba:hover .Title_module_textAndTagsWrapper__9dc182ba{color:var(--color-two-monochrome)}.Title_module_titleWrapper__9dc182ba:hover .Title_module_textAndTagsWrapper__9dc182ba span[id=title-text]{color:var(--color-two-monochrome)}.Title_module_titleWrapper__9dc182ba:hover .Title_module_titleTag__9dc182ba{background:var(--color-two-monochrome-opacity-twenty-eighty)}a.Title_module_titleLink__9dc182ba{position:absolute;width:100%;height:100%}.Title_module_subtitle__9dc182ba{display:inline-flex;align-items:baseline;background-color:var(--color-one-opacity-ninety);color:var(--color-three);border-radius:4px;font-size:12px;gap:0.3333333333em;line-height:16px;padding:0.3333333333em 0.6666666667em;margin:0}.Title_module_subtitle__9dc182ba span{color:var(--color-three);font-size:inherit}.Title_module_subtitle__9dc182ba:hover{background-color:var(--color-two)}.Title_module_subtitle__9dc182ba:hover span{color:var(--color-two-monochrome)}.Card_module_card__924d992f:hover{background:var(--color-one);box-shadow:rgba(0,0,0,0.17)0 0.5rem 1rem -0.5rem,rgba(0,0,0,0.33)0 0 0.25rem -0.06rem}@keyframes TinyProgressBar_module_buffer__c04d36b1{100%{transform:translateX(-10px)}}.PlayButton_module_playButtonWrapper__b9d5abe0{transition:width 250ms ease-in-out,margin 250ms ease-in-out;width:5.6em;height:3.2em;margin:0 0.8em 0 0}.PlayButton_module_playButton__b9d5abe0{font-family:inherit;-webkit-font-smoothing:antialiased;width:5.6em;height:3.2em;color:#fff;margin:0;border:none;appearance:none;z-index:22;background-color:var(--color-one-opacity-ninety);opacity:1;transform:translate3d(0,0,0);transition:opacity 250ms ease-out,background-color 40ms,color 40ms,width 250ms ease-in-out,padding 250ms ease-in-out}.PlayButton_module_playButton__b9d5abe0 .PlayButton_module_pauseIcon__b9d5abe0{margin:0}.PlayButton_module_playButton__b9d5abe0 .PlayButton_module_pauseIcon__b9d5abe0 path{fill:var(--color-three)}.PlayButton_module_playButton__b9d5abe0 .PlayButton_module_pauseIcon__b9d5abe0{width:100%;min-height:auto;height:2.4em}@media (hover:hover){.PlayButton_module_playButton__b9d5abe0:hover{background-color:var(--color-two)}.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_playIcon__b9d5abe0 path,.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_pauseIcon__b9d5abe0 path,.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_replayIcon__b9d5abe0 path,.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_trailerIcon__b9d5abe0 path{fill:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_text__b9d5abe0{color:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover [data-tiny-played]{fill:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover [data-tiny-loaded]{fill:var(--color-two-monochrome-opacity-twenty)}.PlayButton_module_playButton__b9d5abe0:hover [data-tiny-buffer-pattern] line{stroke:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover:not(:active){border:none}}.PrefsButton_module_prefsButton__c0bd4f7c .PrefsButton_module_gearIcon__c0bd4f7c{height:100%;transform-origin:50% 50%;transition:transform 450ms cubic-bezier(0.08,0.82,0.17,1)}.VimeoLogoLink_module_vimeoLogo__970f58c4{display:flex;height:100%;z-index:22}.VimeoLogoLink_module_vimeoLogo__970f58c4 svg{height:100%;fill:#fff;padding:0.2em;width:24px}.ControlBarButton_module_controlBarButton__5e0eae92{width:2.4em;height:2.4em;padding:0.2em;appearance:none;border:none;transition:none;background:none;z-index:22}.ControlBarButton_module_controlBarButton__5e0eae92 svg{width:2.4em;height:100%}.ControlBarButton_module_controlBarButton__5e0eae92 svg path{fill:var(--color-three)}@media (hover:hover){.ControlBarButton_module_controlBarButton__5e0eae92:hover svg path{fill:var(--color-two)}}.ControlBarButton_module_controlBarButton__5e0eae92:active{background:rgba(255,255,255,0.4)}span.ControlBarButton_module_controlBarButtonChildren__5e0eae92{transform:translate3d(0,0,0);position:fixed;overflow:visible}span.ControlBarButton_module_controlBarButtonTooltip__5e0eae92{bottom:calc(1.3333333333em + 4px)}.ChromecastButton_module_chromecastButton__6a7b0286:active{outline:2px solid #00adef!important;outline-offset:2px;background:rgba(255,255,255,0.4)}.CuePointMarkers_module_cuePoints__7287c027:hover,.CuePointMarkers_module_cuePoints__7287c027:focus{opacity:1;transform:translateX(-50%) scale(1.5);z-index:26}.FocusTarget_module_focusTarget__abd564d5{width:100%;height:100%}.InteractiveMarker_module_interactiveMarker__6d3dc825:hover,.InteractiveMarker_module_interactiveMarker__6d3dc825:focus{height:1.2em;width:1.2em;border-radius:0.6em;margin-left:-0.6em;z-index:26}.Timecode_module_timecodeContainer__0e71c943{position:absolute;display:block;top:-0.8em;margin:-2em 0 0-1.2em}.Timecode_module_timecodeContainer__0e71c943 .Timecode_module_timecode__0e71c943{border-radius:4px;padding:0.2em 0.4em;line-height:1.6em;font-weight:500;position:relative;left:-50%;display:inline-block;margin-left:2.3em;background:#fff;color:#000;cursor:grab}.Timecode_module_timecodeContainer__0e71c943 .Timecode_module_timecode__0e71c943::after{border-left:0.4em solid transparent;border-right:0.4em solid transparent;border-top:0.4em solid #fff;bottom:-0.3em;content:&quot;&quot;;left:50%;margin-left:-0.4em;position:absolute}.ThumbnailPreview_module_thumbnailPreview__0cb46f3c{display:flex;flex-direction:column;justify-content:center;position:absolute;max-height:12em;border-radius:8px;transform:translateX(-50%);bottom:2.4em}.ThumbnailPreview_module_thumbnailPreview__0cb46f3c .ThumbnailPreview_module_thumbnailPreviewText__0cb46f3c{display:flex;justify-content:center;align-items:center;flex-direction:column;width:100%;max-height:5.8181818182em;line-height:1.4545454545em;padding:0.3636363636em;background:rgba(0,0,0,0.9);font-size:11px;font-weight:500;letter-spacing:0.4px;border-radius:0 0 8px 8px}.ThumbnailPreview_module_thumbnailPreview__0cb46f3c .ThumbnailPreview_module_thumbnailPreviewText__0cb46f3c .ThumbnailPreview_module_time__0cb46f3c{height:1.4545454545em}.ChapterSegment_module_chapter__33ca9410,.ChapterSegment_module_segmentBar__33ca9410{height:0.4em;border-radius:10em;position:relative;overflow:hidden}.ChapterSegment_module_chapter__33ca9410{transition:height 0.2s ease-in-out;background-color:var(--color-three-opacity-twenty)}.ChapterSegment_module_segmentBar__33ca9410{position:absolute}.ChapterSegment_module_chapterWrapper__33ca9410{position:relative;padding:1.6em 0;cursor:pointer}.ChapterSegment_module_chapterWrapper__33ca9410:first-of-type{margin-left:0}.ChapterSegment_module_chapterWrapper__33ca9410:not(.ChapterSegment_module_hoverDisabled__33ca9410):hover .ChapterSegment_module_chapter__33ca9410,.ChapterSegment_module_chapterWrapper__33ca9410:not(.ChapterSegment_module_hoverDisabled__33ca9410):hover .ChapterSegment_module_segmentBar__33ca9410{height:0.8em}.LoadedBar_module_loaded__3d837846{background-color:var(--color-three-opacity-twenty);transition:width 175ms cubic-bezier(0.18,0,0.07,1),height 0.2s ease-in-out}.PlayedBar_module_played__38fb8087{transition:height 0.2s ease-in-out;background-color:var(--color-two)}.ChapterSegments_module_chapterSegmentsWrapper__426e8ff1{position:absolute;width:100%;height:100%;display:flex;align-items:center;border-radius:10em}.ProgressBar_module_progressBarContainer__20d7fbb1{transition:width 250ms ease-in-out,margin 250ms ease-in-out,flex-grow 250ms ease-in-out,flex-shrink 250ms ease-in-out,padding 250ms ease-in-out;height:0.4em;display:flex;align-items:center;padding:16px 8px;width:100%}.ProgressBar_module_progressBarContainer__20d7fbb1 .ProgressBar_module_progressBar__20d7fbb1{cursor:pointer;display:flex;align-items:center;flex:1;height:0.4em;position:relative;width:100%}.ControlBar_module_controlBarWrapper__33f2e772{position:absolute;display:flex;justify-content:flex-end;align-items:flex-end;bottom:0.8em;left:0.8em;right:0.8em;height:3.2em;touch-action:pan-y pinch-zoom}.ControlBar_module_controls__33f2e772{transition:max-width 250ms ease-in-out;height:3.2em;z-index:22;display:flex;flex:1;justify-content:flex-end;max-width:calc(100% - 56px - 8px)}.ControlBar_module_progressBarAndButtons__33f2e772{transform:translate3d(0,0,0);transition:flex-grow 250ms ease-in-out;background-color:var(--color-one-opacity-ninety);border-radius:4px;display:flex;flex-grow:1;justify-content:flex-end;align-items:center;position:relative;height:32px;padding:4px;max-width:100%}.ResetButton_module_resetButton__5af7707c:hover{background:rgba(255,255,255,0.2)}.ChaptersPanelMenuOption_module_chapterListItem__22a198a7:hover:not(.ChaptersPanelMenuOption_module_disabled__22a198a7){background-color:rgba(255,255,255,0.2)}.ChaptersPanelMenuOption_module_chapterListItem__22a198a7:hover .ChaptersPanelMenuOption_module_copyLinkButton__22a198a7,.ChaptersPanelMenuOption_module_chapterListItem__22a198a7:focus-within .ChaptersPanelMenuOption_module_copyLinkButton__22a198a7{opacity:1}.ChaptersPanelMenuOption_module_chapterListButton__22a198a7:focus{outline-offset:-2px;border-radius:3px}button.ChaptersCopyLinkButton_module_button__fd58dc8d:hover,button.ChaptersCopyLinkButton_module_button__fd58dc8d:focus{background-color:rgba(255,255,255,0.2)}button.ChaptersCopyLinkButton_module_button__fd58dc8d.ChaptersCopyLinkButton_module_touchDevice__fd58dc8d:hover,button.ChaptersCopyLinkButton_module_button__fd58dc8d.ChaptersCopyLinkButton_module_touchDevice__fd58dc8d:focus{background-color:transparent}.VolumeControl_module_volumeControlContainer__02ffae11{padding:1.6em 0;display:flex;justify-content:center;pointer-events:auto}.VolumeControl_module_volumeControl__02ffae11{transform:translate3d(0,0,0);position:absolute;cursor:pointer;display:flex;justify-content:center;align-items:center;padding:0.8em 1em;width:3.2em;height:9.6em;background:rgba(0,0,0,0.9);border-radius:4px;bottom:3.2em}.VolumeControl_module_volumeControl__02ffae11:focus-within{outline:none}.VolumeControl_module_volumeControl__02ffae11:active{cursor:grabbing}.VolumeControl_module_volumeControl__02ffae11:focus-visible{outline:2px solid #00adef;outline-offset:2px}.VolumeControl_module_volumeBar__02ffae11{position:relative;display:flex;justify-content:center;height:7.2em;width:0.4em;background-color:rgba(255,255,255,0.4);border-radius:100px;transition:width 0.2s ease-in-out}.VolumeControl_module_volumeBarFill__02ffae11{position:absolute;width:100%;bottom:0;opacity:1;border-radius:100px;background-color:var(--color-two)}.VolumeControl_module_sliderHandle__02ffae11{position:absolute;transform:translateY(50%);background-color:#fff;height:0.8em;width:0.8em;border-radius:4px;margin:0 6em;transition:height 0.2s ease-in-out,width 0.2s ease-in-out,border-radius 0.2s ease-in-out}.ControlBarButtonsAndMenus_module_wrapper__768465f8{gap:4px;max-width:100%;display:flex;justify-content:flex-end;align-items:center;transition:opacity 250ms ease-out;height:100%;opacity:1;position:inherit;margin-right:4px}.ControlBarButtonsAndMenus_module_collapsibleWrapper__768465f8{-ms-overflow-style:none;scrollbar-width:none;container-type:scroll-state;transition:opacity 250ms ease-out,width 250ms ease-out,max-width 250ms ease-out,margin 250ms ease-out;height:32px;opacity:1;margin:0-4px;display:flex;align-items:center;justify-content:flex-start;z-index:21;width:fit-content;overflow:auto}.ControlBarButtonsAndMenus_module_collapsibleWrapper__768465f8::-webkit-scrollbar{display:none}.ControlBarButtonsAndMenus_module_collapsibleContent__768465f8{-ms-overflow-style:none;scrollbar-width:none;gap:4px;position:static;display:flex;justify-content:flex-end;align-items:center;width:auto;height:100%;padding:0 4px;pointer-events:none;overflow-y:hidden;clip-path:none;min-width:fit-content}.ControlBarButtonsAndMenus_module_collapsibleContent__768465f8::-webkit-scrollbar{display:none}.ControlBarButtonsAndMenus_module_collapsibleContent__768465f8 button{pointer-events:all}.NudgeNotification_module_nudge__5db47681{position:absolute;top:0;height:100%;display:flex;flex-direction:column;justify-content:center;margin:0}.NudgeNotification_module_nudge__5db47681 .NudgeNotification_module_nudgeInfo__5db47681{display:flex;flex-direction:column;align-items:center;align-self:center;position:relative;width:9.6em}@media (max-width:299px),(max-height:169px){.NudgeNotification_module_nudge__5db47681 .NudgeNotification_module_nudgeInfo__5db47681{width:9.6em}}@media (min-width:300px) and (max-width:375px){.NudgeNotification_module_nudge__5db47681 .NudgeNotification_module_nudgeInfo__5db47681{width:9.6em}}.NudgeNotification_module_nudge__5db47681.NudgeNotification_module_nudgeCenter__5db47681{width:auto;left:50%;transform:translateX(-50%)}.NudgeNotification_module_nudgeIcon__5db47681 svg{fill:#fff;height:3.2em}@media (max-width:299px),(max-height:169px){.NudgeNotification_module_nudgeIcon__5db47681 svg{height:2.4em}}.NudgeNotification_module_nudgeTime__5db47681{font-weight:bold;font-size:1.4em;letter-spacing:-0.4px;height:1.8em}@media (max-width:414px),(max-height:168px){.NudgeNotification_module_nudgeTime__5db47681{font-size:1.2em;height:1.6em}}.PipOverlay_module_overlay__82a6be37{display:flex;flex-direction:column;width:100%;height:100%;align-items:center;justify-content:center;background-color:#121212}.PipOverlay_module_overlay__82a6be37 svg{height:1.8em}.PipOverlay_module_overlay__82a6be37 .PipOverlay_module_title__82a6be37{margin-top:8px;font-size:16px}.RightContentArea_module_rightContentArea__a0f39df8{position:absolute;right:0;top:0;height:100%;z-index:38}.RightContentArea_module_rightContentArea__a0f39df8.RightContentArea_module_iframeEmbed__a0f39df8{background-color:transparent}.right-content-area-supported.app-xs .RightContentArea_module_rightContentArea__a0f39df8{width:100%;left:0%;opacity:0;pointer-events:none}.ContentAreaBackground_module_imgContainer__9da212ea{background-color:#000;width:100%;height:100%}.right-content-area-supported.app-xs .ContentAreaBackground_module_imgContainer__9da212ea{z-index:37;position:absolute;left:0;top:0}.ContentAreaBackground_module_img__9da212ea{width:100%;height:100%;object-fit:cover;filter:blur(10px)}.ContentAreaBackground_module_img__9da212ea.ContentAreaBackground_module_loaded__9da212ea{opacity:0.1}.BufferHandler_module_shade__94101f09{position:absolute;top:0;left:0;bottom:0;right:0;background-color:#000}.Captions_module_captions__5ed5b89b{padding:0 10px 10px;transform:translateY(0);bottom:0}.Captions_module_captions__5ed5b89b.Captions_module_contentAreaSibling__5ed5b89b{transition:transform 250ms ease-out 200ms,width 400ms ease-in-out,right 400ms ease-in-out}.QoESurvey_module_thumbsUp__c40e38d2.QoESurvey_module_selected__c40e38d2:hover,.QoESurvey_module_thumbsDown__c40e38d2.QoESurvey_module_selected__c40e38d2:hover{background:none}.Toasts_module_toasts__b772bc4f{position:absolute;top:8px;left:8px;z-index:10;transition:transform 400ms ease-in-out}.TopCenterActionItems_module_topCenterActionItems__6bbfa089{position:absolute;top:8px;left:50%;transform:translateX(-50%);z-index:9}.AIWidget_module_aiWidget__f665b717{width:100%;height:100%}.Outro_module_outroWrapper__64bf980e{position:absolute;top:0;left:0;width:100%;height:100%;z-index:8!important}@keyframes OutroContentWrapper_module_fadeIn__06afa88b{0%{opacity:0}100%{opacity:1}}@keyframes LinkOutro_module_slideDown__0f1c39e6{to{transform:translate(0,0);opacity:1}}.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:hover,.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:active{color:var(--color-one-monochrome)}.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:hover::before,.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:active::before{content:&quot;&quot;;background-color:rgba(0,0,0,0.15);position:absolute;top:0;left:0;bottom:0;right:0}.ImageOutro_module_imageOutroLink__7772436e .ImageOutro_module_imageOutro__7772436e:hover{transform:scale(1.1)}.VideosList_module_videoLink__24b2c487:hover,.VideosList_module_videoLink__24b2c487:focus{z-index:1;opacity:1;transform:scale(1.1)}.VideosList_module_videoLink__24b2c487:hover .VideosList_module_videoHeader__24b2c487,.VideosList_module_videoLink__24b2c487:focus .VideosList_module_videoHeader__24b2c487{opacity:1}.VideosList_module_videoLink__24b2c487:active{transform:scale(1.07)}button.FollowButton_module_followButton__7f7b5348:hover{background-color:rgba(127,127,127,0.76)}h1.VideosHeader_module_videosTitle__75827656 a[href]:hover{color:var(--color-two)}a[href].VODButton_module_VODButton__9172ec57:hover{color:var(--color-two-monochrome)!important}.VODOutro_module_VODHeader__4642efe8 a[href]:hover{color:#fff}.Alert_module_close__59e6b5e4:active{transform:translateY(1px)}.PrivateGate_module_login__b6123279.PrivateGate_module_loginButton__b6123279:active,.PrivateGate_module_login__b6123279.PrivateGate_module_loginButton__b6123279:hover{background-color:var(--color-two-opacity-ninety)}input.PasswordGate_module_passwordInput__93d04c19[aria-invalid=true]:focus{outline:2px solid rgb(227,79,79);outline-offset:2px}button.PasswordGate_module_submitPassword__93d04c19:active,button.PasswordGate_module_submitPassword__93d04c19:hover{background-color:var(--color-two-opacity-ninety)}.ContextMenuOption_module_menuItem__36a0b8ce:hover,.ContextMenuOption_module_menuItem__36a0b8ce:active,a.ContextMenuOption_module_menuItem__36a0b8ce:hover,a.ContextMenuOption_module_menuItem__36a0b8ce:active{background:rgba(255,255,255,0.2);color:#fff}.Link_module_link__bdf8051d{position:relative;pointer-events:inherit}.Link_module_link__bdf8051d:hover{color:var(--color-two-complement)}.Link_module_link__bdf8051d:active,.Link_module_link__bdf8051d:hover{cursor:pointer}dialog.ModalMenu_module_menu__4fe0e031{-ms-overflow-style:none;scrollbar-width:none;position:absolute;background-color:rgba(0,0,0,0.8);backdrop-filter:blur(40px);z-index:29;overflow-x:auto;transition:opacity 200ms ease-out;color:#fff;height:100%;width:100%;border:0;margin:0;padding:0;overflow-y:hidden}dialog.ModalMenu_module_menu__4fe0e031::-webkit-scrollbar,dialog.ModalMenu_module_menu__4fe0e031:modal::-webkit-scrollbar{display:none}dialog.ModalMenu_module_menu__4fe0e031 .ModalMenu_module_menuBody__4fe0e031::-webkit-scrollbar,dialog.ModalMenu_module_menu__4fe0e031:modal .ModalMenu_module_menuBody__4fe0e031::-webkit-scrollbar{display:none}dialog.ModalMenu_module_menu__4fe0e031::backdrop,dialog.ModalMenu_module_menu__4fe0e031:-internal-dialog-in-top-layer::backdrop,dialog.ModalMenu_module_menu__4fe0e031:modal::backdrop,dialog.ModalMenu_module_menu__4fe0e031:modal:-internal-dialog-in-top-layer::backdrop{background-color:transparent}.PopoverMenu_module_menu__69cec309::-webkit-scrollbar{display:none}.PopoverMenu_module_menu__69cec309 .PopoverMenu_module_menuBody__69cec309::-webkit-scrollbar{display:none}.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_backButton__aa712564:hover,.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_closeButton__aa712564:hover{background-color:rgba(255,255,255,0.2)}.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_backButtonWrapper__aa712564 .MenuHeader_module_backButton__aa712564:not(:hover),.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_closeButtonWrapper__aa712564 .MenuHeader_module_closeButton__aa712564:not(:hover){background:none}.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_backButtonWrapper__aa712564 .MenuHeader_module_backButton__aa712564:hover:not(:active),.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_closeButtonWrapper__aa712564 .MenuHeader_module_closeButton__aa712564:hover:not(:active){border:none}.MenuOption_module_option__5ad9c96b.MenuOption_module_styled__5ad9c96b:hover{background-color:rgba(255,255,255,0.2)}.MenuOption_module_option__5ad9c96b.MenuOption_module_styled__5ad9c96b:focus{border-radius:3px}.MenuItem_module_optionButton__2ed021e3:hover{background:rgba(255,255,255,0.2)}.MenuItem_module_optionButton__2ed021e3:focus{outline-offset:-2px}.MenuItem_module_optionButton__2ed021e3:active{outline:none}body:not(.showfocus) .MenuItem_module_optionButton__2ed021e3:focus{outline:none}.MenuOptionListItem_module_listItem__5ba640e5:focus{outline-offset:-2px}.ButtonRow_module_filledButton__45a1df77:hover{background-color:rgba(255,255,255,0.2)}.ButtonRow_module_filledButton__45a1df77.ButtonRow_module_active__45a1df77:hover{background-color:#fff}.ColorSwabs_module_colorSwabs__1985ad2c .ColorSwabs_module_colorSwab__1985ad2c:hover{transform:scale(1.25)}.Tooltip_module_tooltip__b2bc4d16{display:flex;justify-content:center;align-items:center;color:#fff;background:rgba(0,0,0,0.9);font-size:12px;letter-spacing:0;bottom:2.6666666667em;padding:0.6666666667em 1em;height:2.6666666667em;line-height:1.25em;border-radius:4px;transition:opacity 150ms ease-out;position:absolute;font-weight:bold;white-space:pre;transform:translateX(-50%);cursor:default}.Tooltip_module_tooltipContainer__b2bc4d16[data-touch-device=false]:hover .Tooltip_module_tooltip__b2bc4d16{color:#fff}.Tooltip_module_playTooltip__b2bc4d16{margin-bottom:4px}.Text_module_text__73112353{line-height:1.25}.Text_module_bold__73112353{font-weight:bold}.Button_module_button__61be5b9c{position:relative;display:flex;align-items:center;justify-content:center;text-decoration:none;font-weight:600;white-space:nowrap;text-rendering:optimizelegibility;border-radius:0.4em;pointer-events:inherit}.Button_module_buttonChildren__61be5b9c{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Button_module_icon__61be5b9c svg{display:inline-flex;overflow:visible}.Button_module_icon__61be5b9c.Button_module_iconSm__61be5b9c>svg{width:1.8em;height:1.8em}.Button_module_primary__61be5b9c:hover{background-color:var(--color-two);color:var(--color-two-monochrome)}.Button_module_alternative__61be5b9c:hover:not(:active){background:rgba(255,255,255,0.2)}.Button_module_sm__61be5b9c{line-height:3em;height:3.2em;min-width:3.2em}.CopyLinkButton_module_copyLinkButton__fd675415:hover{background-color:rgba(255,255,255,0.2)}input.SearchInput_module_mobileSafari__e264b933:focus,input.SearchInput_module_mobileSafari__e264b933:focus+.SearchInput_module_label__e264b933{font-size:1.6em}.SearchInput_module_inputForm__e264b933[data-disabled=false]:hover{background-color:rgba(255,255,255,0.3)}.SearchInput_module_inputForm__e264b933 .SearchInput_module_searchButton__e264b933:hover:not(:disabled){background-color:rgba(255,255,255,0.3)}.SearchInput_module_inputForm__e264b933 .SearchInput_module_searchButton__e264b933:hover:not(:disabled):active{background-color:rgba(255,255,255,0.3)}.SearchInput_module_inputForm__e264b933 input:focus{outline:none}@keyframes Spinner_module_buffer__795e5e53{100%{transform:translateX(-10px)}}@-moz-keyframes Spinner_module_bufferLeft__795e5e53{0%{left:0}100%{left:-10px}}@keyframes Spinner_module_throb__795e5e53{0%,100%{background-color:#555}50%{background-color:#444}}@keyframes Spinner_module_wiggle__795e5e53{0%{transform:translateY(10px)}20%{transform:translateY(0)}40%,80%{transform:translateX(8px)}60%{transform:translateX(-8px)}100%{transform:translateX(0)}}@keyframes Spinner_module_pulse__795e5e53{50%{transform:scale(0.9)}}@keyframes Spinner_module_dash__795e5e53{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-135px}}@keyframes Spinner_module_rotate__795e5e53{100%{transform:rotate(360deg)}}@keyframes Spinner_module_scaleAnimation__795e5e53{0%{transform:scale(0.9,0.9)}100%{transform:scale(1,1)}}.Spinner_module_spinner__795e5e53{position:absolute;top:50%;left:50%;background:transparent;transform:translate(-50%,-50%);transition:opacity 0.1s,transform 0.25s cubic-bezier(0.17,0.88,0.32,1.28)}.Spinner_module_spinner__795e5e53 circle{background:transparent}.Spinner_module_spinner__795e5e53 [data-spinner-trace=true]{stroke-opacity:0.2}.Spinner_module_spinner__795e5e53 [data-spinner-circle=true]{transform-origin:50% 50%;stroke-linecap:round;stroke-dasharray:200;stroke-dashoffset:200;animation:Spinner_module_rotate__795e5e53 2s linear 0.25s infinite,Spinner_module_dash__795e5e53 1.5s ease-in-out 0.25s infinite}.Spinner_module_lg__795e5e53{max-width:120px;width:18%}.Spinner_module_lg__795e5e53 circle{stroke-width:2px}.Switch_module_switch__c1fb02cb:hover{background-color:rgba(255,255,255,0.2)}.Switch_module_switch__c1fb02cb:focus{border-radius:3px;outline-offset:-2px}.CaptionsRenderer_module_captions__04afad3c{text-align:center;position:absolute;z-index:6;left:0;right:0;user-select:text}.CaptionsRenderer_module_captionsWindow__04afad3c{display:inline-flex;flex-direction:column;align-items:center}.ToastBase_module_toast__211c883d{background:rgba(0,0,0,0.9);align-items:center;border-radius:4px;padding:4px;max-width:calc(100% - 16px)}.ToastButton_module_toastButton__609a14eb:active{background:rgba(255,255,255,0.2)}.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:active,.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:hover{background:var(--color-two)}.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:active span,.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:hover span{color:var(--color-two-monochrome)}p.shared_module_shareFootnote__360a097f a:hover{color:#00adef}.SocialShareLink_module_shareButton__cb9db123:hover,.SocialShareLink_module_shareButton__cb9db123:active{background-color:rgba(0,0,0,0.15)}.SocialShareLink_module_shareButton__cb9db123:focus{outline-color:#00adef}.SocialShare_module_socialShareContainer__241f1ad7 a.SocialShare_module_clipUrl__241f1ad7:hover{color:#00adef}.SegmentShareInputs_module_customCheckbox__d711f219::after{content:&quot;&quot;;position:absolute;display:none;left:34%;top:14%;width:6px;height:12px;border:solid #000;border-width:0 2px 2px 0;border-bottom-right-radius:1px;transform:rotate(45deg)}.SegmentShareInputs_module_customCheckbox__d711f219.SegmentShareInputs_module_checked__d711f219::after{display:block}.SegmentShareInputs_module_inputWrapper__d711f219:focus-within{outline:2px solid #00adef;outline-offset:2px}input.TimeInput_module_segmentShareInput__87e7fee4:focus{outline:none}input.TimeInput_module_segmentShareInput__87e7fee4::placeholder{color:rgba(255,255,255,0.6);opacity:1;padding-top:2px}.TimeInput_module_segmentShareInput__87e7fee4:focus+.TimeInput_module_floatingLabel__87e7fee4{color:#fff}.Error_module_buttonsWrapper__b6661b70 .Error_module_button__b6661b70:hover:not(:active){border:none}.BaseError_module_error__896e096f a:hover{color:#ff5210}.CloseOverlayButton_module_closeOverlayButton__74aa447b{position:absolute;right:0;opacity:0.7;background:none}.CloseOverlayButton_module_closeOverlayButton__74aa447b:hover{opacity:1}.CloseOverlayButton_module_closeOverlayButton__74aa447b svg{width:40px;height:40px;margin:8px}.OverlayBase_module_overlayCell__42ef25fe{width:100%;height:100%;display:flex;flex-flow:column nowrap;align-items:center;justify-content:center}.OverlayBase_module_overlayWrapper__42ef25fe{position:absolute;top:0;left:0;bottom:0;right:0;transition:background-color 200ms;background-position:center center;background-size:cover;text-align:center;background-image:linear-gradient(to bottom,rgba(20,21,22,0.3),#141516);z-index:31;user-select:text}.OverlayBase_module_overlayWrapper__42ef25fe.OverlayBase_module_hidden__42ef25fe *{pointer-events:none}.OverlayBase_module_overlayWrapper__42ef25fe .OverlayBase_module_overlayNav__42ef25fe{opacity:1;display:block;position:absolute;top:0;left:0;width:100%;z-index:32}.OverlayBase_module_overlay__42ef25fe{position:absolute;top:0;left:0;bottom:0;right:0;display:flex;align-items:center;justify-content:center;flex-direction:column;transform:scale(0.9,0.9);transition:transform 105ms,opacity 105ms}:root{--clock-rotate-direction:1}@keyframes AnimatedClock_module_hourHand__8976d762{to{rotate:calc(45deg*var(--clock-rotate-direction))}}@keyframes AnimatedClock_module_minuteHand__8976d762{to{rotate:calc(360deg*var(--clock-rotate-direction))}}.ContentAreaCloseButton_module_closeContentAreaButton__8960d891:hover,.ContentAreaCloseButton_module_closeContentAreaButton__8960d891:focus,.ContentAreaCloseButton_module_closeContentAreaButton__8960d891:active{background-color:transparent!important}.showfocus .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .shared_module_focusableCircle__29a0c6d5:focus::after,.showfocus .shared_module_focusableMarker__29a0c6d5:focus::after{outline:none}.showfocus .shared_module_focusable__29a0c6d5:focus::after,.showfocus .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .shared_module_focusableCircle__29a0c6d5:focus::after,.showfocus .shared_module_focusableMarker__29a0c6d5:focus::after{content:&quot;&quot;;pointer-events:none;position:absolute;border:2px solid #000;width:calc(100% + 8px);height:calc(100% + 8px);top:-4px;left:-4px;border-radius:8px;z-index:1;outline:2px solid #00adef;outline-offset:-4px}.showfocus .shared_module_focusableMarker__29a0c6d5:focus::after{width:calc(100% + 12px);height:calc(100% + 12px);top:-6px;left:-6px;border-radius:12px}.showfocus .shared_module_focusableCircle__29a0c6d5:focus::after{border-radius:50%}.showfocus .shared_module_focusableButton__29a0c6d5:focus::after{border-radius:12px}.showfocus .player.app-xxs .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .player.app-xs .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .player.app-tiny .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .player.app-mini .shared_module_focusableButton__29a0c6d5:focus::after{border-radius:8px}</style><meta name=referrer content=no-referrer><style>.sf-hidden{display:none!important}</style><meta http-equiv=content-security-policy content=&quot;default-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'unsafe-inline'; media-src 'self' data:; script-src 'unsafe-inline' data:; object-src 'self' data:; frame-src 'self' data:;&quot;></head>\n<body>\n<div id=player class=&quot;player player-c8f61e96-4e09-4249-8a13-649842465401 js-player-fullscreen with-fullscreen with-sticky-custom-logo player-normal player-xs app-xs right-content-area-supported&quot; tabindex=0>\n <div class=vp-content-area-background aria-hidden=true><div class=ContentAreaBackground_module_imgContainer__9da212ea style=overflow:hidden;opacity:0;pointer-events:none><img alt=&quot;video thumbnail&quot; class=&quot;ContentAreaBackground_module_img__9da212ea ContentAreaBackground_module_loaded__9da212ea&quot; src=&quot;data:image/avif;base64,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&quot;></div></div>\n <div class=&quot;vp-video-wrapper transparent content-area-sibling-enabled&quot; data-content-area-sibling-eligible aria-hidden=true>\n <div class=vp-video>\n <div class=vp-telecine><video preload tabindex=-1 playsinline poster=&quot;data:image/png;base64,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&quot;></video></div>\n </div>\n </div>\n <div class=&quot;vp-target content-area-sibling-enabled hidden sf-hidden&quot; data-content-area-sibling-eligible hidden></div>\n <div class=&quot;vp-player-ui-container content-area-sibling-enabled&quot; data-content-area-sibling-eligible><style data-player-colors=c8f61e96-4e09-4249-8a13-649842465401 class=sf-hidden>.player-c8f61e96-4e09-4249-8a13-649842465401{--color-one:#000000ff;--color-two:#00adefff;--color-three:#ffffffff;--color-four:#000000ff;--color-one-monochrome:#ffffffff;--color-two-monochrome:#000000ff;--color-one-opacity-ninety:#000000e6;--color-two-opacity-ninety:#00adefe6;--color-three-opacity-twenty:#ffffff33;--color-one-monochrome-opacity-twenty:#ffffff33;--color-two-monochrome-opacity-twenty:#00000033;--color-one-monochrome-opacity-sixty:#ffffff99;--color-two-complement:#ff5210ff;--color-one-monochrome-opacity-twenty-eighty:#ffffff33;--color-two-monochrome-opacity-twenty-eighty:#000000cc}.player-c8f61e96-4e09-4249-8a13-649842465401{background-color:transparent!important}.player-c8f61e96-4e09-4249-8a13-649842465401 .vp-video-wrapper{background-color:transparent!important}</style><div aria-hidden=true class=&quot;NudgeNotification_module_nudge__5db47681 NudgeNotification_module_nudgeCenter__5db47681&quot; style=overflow:hidden;opacity:0;pointer-events:none><div class=NudgeNotification_module_nudgeInfo__5db47681><div class=NudgeNotification_module_nudgeIcon__5db47681><svg viewBox=&quot;0 0 64 64&quot;><path fill-rule=evenodd clip-rule=evenodd d=&quot;M12.4506 12.0055L32.4643 30.0179C33.6413 31.0772 33.6413 32.9228 32.4643 33.9821L12.4506 51.9945C10.7345 53.5389 8 52.3211 8 50.0124V13.9876C8 11.6789 10.7345 10.4611 12.4506 12.0055ZM39.1172 12.0055L59.131 30.0179C60.308 31.0772 60.308 32.9228 59.131 33.9821L39.1172 51.9945C37.4012 53.5389 34.6667 52.3211 34.6667 50.0124V13.9876C34.6667 11.6789 37.4012 10.4611 39.1172 12.0055Z&quot;></path></svg></div><div class=NudgeNotification_module_nudgeTime__5db47681></div></div></div><div class=PipOverlay_module_overlay__82a6be37 aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none><svg viewBox=&quot;0 0 16 12&quot;><polygon class=fill points=&quot;6 8 1 8 1 1 14 1 14 6 15 6 15 0 0 0 0 9 6 9 6 8&quot;></polygon><rect class=fill x=7 y=7 width=9 height=5></rect><polyline class=fill transform=&quot;translate(4, 4) rotate(180) translate(-4, -4)&quot; points=&quot;5.33 2 5.33 3 3.67 3 5.67 5 5 5.67 3 3.67 3 5.33 2 5.33 2 2&quot;></polyline></svg><div class=PipOverlay_module_title__82a6be37>Playing in picture-in-picture</div></div><span id=new-window hidden class=sf-hidden>(opens a new window)</span></div>\n <div class=&quot;vp-player-ui-overlays content-area-sibling-enabled&quot; data-content-area-sibling-eligible><div role=status class=&quot;ToastBase_module_toast__211c883d TopCenterActionItems_module_topCenterActionItems__6bbfa089&quot; style=overflow:hidden;opacity:0;pointer-events:none;display:none></div><div role=status class=&quot;ToastBase_module_toast__211c883d Toasts_module_toasts__b772bc4f&quot; style=&quot;overflow:hidden;opacity:0;pointer-events:none;transform:translateY(calc(-100% - 16px));display:none&quot;></div><div class=&quot;vp-title Title_module_title__9dc182ba&quot; role=presentation style=opacity:0;overflow:hidden;pointer-events:none><header class=Title_module_header__9dc182ba role=presentation><div class=Title_module_portrait__9dc182ba><a href=&quot;https://vimeo.com/user5722801?fl=pl&amp;amp;fe=po&quot; class=&quot;Link_module_link__bdf8051d Title_module_portraitLink__9dc182ba shared_module_focusableCircle__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener variant=minimal tabindex=-1><img src=&quot;data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAkoAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAADwAAAA8AAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQANAAAAABNjb2xybmNseAABAA0ABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAlJtZGF0EgAKCRgVe+2CAhoNSDK6BETwAMMMMUDd1Khg1unqRnGTMVrN2rqSVGvcLu7vYn//2jE8BKkb0S/urLB8GJjpqG4fWQZs1MdyQn+S20fOAYBDJryjLEG/0D+0nQItdVckXw4QK+xYkncXyqjHHn0tnefqtCwLGe2Dxo9LTdDXHFZMSHDqZDaXQKfQBP+pWxSnS1+rDUB7N5++IBZndamuqq+UzFAEvNrJ+Wl31NPMjuD27d+zRZwEkyQAyRaCbdl0+PLL/MRXjQPG5TW3D9kPcnSmvw/fbRu6hNWeIl1aLg7F6paM2T+tsB9KneMU6Bj44QFFkr6aRwvn5sFQ7qeVidMl+XMVyQ+NQ+VtsoM9Sk16u9HWDoMCVFNExyN5mwxxotAvsQEJKSWh5dD+4InbAdMo9/SxcQsnT2iTMN1SSUl86ITUhjPkwL6N9AVr8++JooJqcoG6W++o/nZA+OrRIukMz64AcuagVeRUH0QbO8IqpEipg9KzXgwjujI5n5m4/tJcvqdACDUZGLW5XZTBDKDT4YCNlrpBjJrAIQMQyE8dg8rwbRJqOLNsz0HGNAaVSSASfQuChWerHt3P+2htvIVgNKlPjEaAwgyDEZjJZh/GdSEc9IWFOGg18d3tWRVY3fJ7fkXhfP17hB2S8g4hUCJ5A05r7jr8HyZF//+tnI7hJK6huafRGn/geGKFmaXjhfp3uI7BaLcO6790yPtQ0dEyz7sNZccFylcph29iL14jbpm+UdFq/t7B0yO1rfXhr+UqbDC4drWVMA==&quot; alt=&quot;Link to video owner's profile&quot; width=60 height=60 data-trackclick=video-portrait></a></div><div class=Title_module_headers__9dc182ba><div class=Title_module_titleWrapper__9dc182ba><a href=&quot;https://vimeo.com/253905163?fl=pl&amp;amp;fe=ti&quot; class=&quot;Link_module_link__bdf8051d Title_module_titleLink__9dc182ba shared_module_focusable__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener data-track-click=video-title variant=minimal tabindex=-1 aria-labelledby=title-text></a><div class=Title_module_textAndTagsWrapper__9dc182ba><span class=&quot;Text_module_text__73112353 Text_module_sm__73112353 Text_module_bold__73112353 Title_module_titleText__9dc182ba&quot; id=title-text aria-hidden=false>Big Buck Bunny</span><div class=TitleTags_module_tagWrapper__20a17f3b></div></div></div><a href=&quot;https://vimeo.com/user5722801?fl=pl&amp;amp;fe=by&quot; class=&quot;Link_module_link__bdf8051d Title_module_subtitle__9dc182ba shared_module_focusable__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener variant=minimal tabindex=-1><span class=&quot;Text_module_text__73112353 Text_module_sm__73112353 Text_module_bold__73112353&quot; aria-hidden=false>Jason Chen</span></a></div></header></div><div class=&quot;vp-sidedock SideDock_module_root__eeb5e08f&quot; data-sidedock=true><div class=SideDock_module_sidedockInner__eeb5e08f data-sidedock-inner=true style=opacity:0;overflow:hidden;pointer-events:none><div class=LabeledButton_module_box__a4450693><label class=LabeledButton_module_labeledButton__a4450693 role=presentation aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none><span>More options</span></label><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_primary__61be5b9c Button_module_sm__61be5b9c Button_module_icon__61be5b9c Button_module_iconSm__61be5b9c exclude-global-button-styles&quot; type=button tabindex=-1 aria-label=&quot;More options&quot; aria-haspopup=dialog aria-expanded=false><svg width=4 height=19 viewBox=&quot;0 0 4 19&quot; fill=none xmlns=http://www.w3.org/2000/svg focusable=false><path d=&quot;M2 4.5C2.39556 4.5 2.78224 4.3827 3.11114 4.16294C3.44004 3.94318 3.69639 3.63082 3.84776 3.26537C3.99914 2.89992 4.03874 2.49778 3.96157 2.10982C3.8844 1.72186 3.69392 1.36549 3.41421 1.08579C3.13451 0.806082 2.77814 0.615601 2.39018 0.53843C2.00222 0.46126 1.60009 0.500867 1.23463 0.652242C0.869182 0.803617 0.556825 1.05996 0.337062 1.38886C0.117299 1.71776 1.07779e-06 2.10444 1.07779e-06 2.5C1.07779e-06 3.03043 0.210715 3.53914 0.585788 3.91421C0.960861 4.28929 1.46957 4.5 2 4.5ZM2 14.5C1.60444 14.5 1.21776 14.6173 0.888861 14.8371C0.559963 15.0568 0.303617 15.3692 0.152242 15.7346C0.000866562 16.1001 -0.0387401 16.5022 0.0384303 16.8902C0.115601 17.2781 0.306083 17.6345 0.585788 17.9142C0.865493 18.1939 1.22186 18.3844 1.60982 18.4616C1.99778 18.5387 2.39992 18.4991 2.76537 18.3478C3.13082 18.1964 3.44318 17.94 3.66294 17.6111C3.8827 17.2822 4 16.8956 4 16.5C4 15.9696 3.78929 15.4609 3.41421 15.0858C3.03914 14.7107 2.53043 14.5 2 14.5ZM2 7.5C1.60444 7.5 1.21776 7.6173 0.888861 7.83706C0.559963 8.05682 0.303617 8.36918 0.152242 8.73463C0.000866562 9.10009 -0.0387401 9.50222 0.0384303 9.89018C0.115601 10.2781 0.306083 10.6345 0.585788 10.9142C0.865493 11.1939 1.22186 11.3844 1.60982 11.4616C1.99778 11.5387 2.39992 11.4991 2.76537 11.3478C3.13082 11.1964 3.44318 10.94 3.66294 10.6111C3.8827 10.2822 4 9.89556 4 9.5C4 8.96957 3.78929 8.46086 3.41421 8.08579C3.03914 7.71071 2.53043 7.5 2 7.5Z&quot;></path></svg></button></div></div></div><dialog class=&quot;vp-menu ModalMenu_module_menu__4fe0e031 SideDockMenu_module_menu__3e8760ae&quot; data-menu=sidedock aria-modal=true style=overflow:hidden;opacity:0;pointer-events:none;display:none;max-width:500px;max-height:280px;top:50%;left:50%;transform:translate(-50%,-50%)></dialog><div class=&quot;OverlayBase_module_overlayWrapper__42ef25fe OverlayBase_module_hidden__42ef25fe&quot; role=dialog aria-modal=true aria-labelledby=overlay-labelledby data-content-area-sibling-eligible=true data-overlay=true style=overflow:hidden;opacity:0;pointer-events:none;display:block;visibility:hidden><div class=OverlayBase_module_overlayCell__42ef25fe><div class=OverlayBase_module_overlay__42ef25fe></div></div><nav class=OverlayBase_module_overlayNav__42ef25fe><button class=&quot;CloseOverlayButton_module_closeOverlayButton__74aa447b shared_module_focusableButton__29a0c6d5&quot; aria-label=&quot;Close overlay&quot; data-close-overlay=true><svg viewBox=&quot;0 0 20 20&quot;><path d=&quot;M11.06 10l4.597-4.596a.749.749 0 1 0-1.061-1.06L10 8.938 5.404 4.343a.749.749 0 1 0-1.06 1.061L8.938 10l-4.596 4.596a.749.749 0 1 0 1.061 1.06L10 11.062l4.596 4.596a.749.749 0 1 0 1.06-1.061L11.062 10z&quot; fill=#fff fill-rule=evenodd></path></svg></button></nav></div><div class=ControlBar_module_controlBarWrapper__33f2e772><div class=PlayButton_module_playButtonWrapper__b9d5abe0 style=opacity:0;overflow:hidden;pointer-events:none><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 PlayButton_module_playButton__b9d5abe0&quot; type=button tabindex=0 data-play-button=true aria-labelledby=play-button-tooltip data-touch-device=false><svg width=24 height=24 viewBox=&quot;0 0 24 24&quot; xmlns=http://www.w3.org/2000/svg data-pause-icon=true class=PlayButton_module_pauseIcon__b9d5abe0><path fill-rule=evenodd clip-rule=evenodd class=fill d=&quot;M8 4C6.89543 4 6 4.89543 6 6V18C6 19.1046 6.89543 20 8 20C9.10457 20 10 19.1046 10 18V6C10 4.89543 9.10457 4 8 4ZM16 4C14.8954 4 14 4.89543 14 6V18C14 19.1046 14.8954 20 16 20C17.1046 20 18 19.1046 18 18V6C18 4.89543 17.1046 4 16 4Z&quot;></path></svg><span class=Button_module_buttonChildren__61be5b9c><span id=play-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 Tooltip_module_playTooltip__b2bc4d16&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Pause</span></span></button></div><div class=&quot;vp-controls ControlBar_module_controls__33f2e772&quot; data-control-bar=true style=opacity:0;overflow:hidden;pointer-events:none><div class=ControlBar_module_progressBarAndButtons__33f2e772><div class=ProgressBar_module_progressBarContainer__20d7fbb1><div class=&quot;vp-progress ProgressBar_module_progressBar__20d7fbb1&quot; data-progress-bar=true role=presentation><div class=&quot;FocusTarget_module_focusTarget__abd564d5 shared_module_focusable__29a0c6d5&quot; role=slider aria-label=&quot;Progress Bar&quot; aria-valuemin=0 aria-valuemax=596.459 aria-valuenow=4 aria-valuetext=&quot;00:04 of 09:56&quot; tabindex=0 data-progress-bar-focus-target=true></div><div class=ChapterSegments_module_chapterSegmentsWrapper__426e8ff1><div class=ChapterSegment_module_chapterWrapper__33ca9410 style=&quot;width:calc(100% + 0px)&quot;><div class=ChapterSegment_module_chapter__33ca9410><div class=&quot;LoadedBar_module_loaded__3d837846 ChapterSegment_module_segmentBar__33ca9410&quot; data-progress-bar-loaded=true style=width:4%></div><div class=&quot;PlayedBar_module_played__38fb8087 ChapterSegment_module_segmentBar__33ca9410&quot; data-progress-bar-played=true style=width:0.715355%></div></div></div></div><div class=ThumbnailPreview_module_thumbnailPreview__0cb46f3c role=presentation aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:0%;max-width:120px><div class=ThumbnailPreview_module_thumbnailPreviewText__0cb46f3c><span class=ThumbnailPreview_module_time__0cb46f3c>00:00</span></div></div><div class=Timecode_module_timecodeContainer__0e71c943 role=presentation aria-hidden=true data-progress-bar-timecode-container=true style=left:0.715355%><div class=Timecode_module_timecode__0e71c943 data-progress-bar-timecode=true>00:04</div></div></div></div><div class=ControlBarButtonsAndMenus_module_wrapper__768465f8><div class=ControlBarButtonsAndMenus_module_collapsibleWrapper__768465f8 role=presentation tabindex=-1 style=max-width:124px><div class=ControlBarButtonsAndMenus_module_collapsibleContent__768465f8 role=none><div class=VolumeControl_module_volumeControlContainer__02ffae11 data-volume-control-container=true><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles ControlBarButton_module_controlBarButton__5e0eae92&quot; type=button tabindex=0 aria-label=Mute aria-keyshortcuts=m data-volume-button=true><svg viewBox=&quot;0 0 24 24&quot; data-volume-icon=true><path fill-rule=evenodd clip-rule=evenodd d=&quot;M20 12C20 15.7277 17.4505 18.8599 14 19.7479V21.7999C18.5645 20.8734 22 16.8379 22 12C22 7.16206 18.5645 3.12655 14 2.20001V4.25201C17.4505 5.1401 20 8.2723 20 12ZM18 12C18 9.38754 16.3304 7.16506 14 6.34139V8.53511C15.1956 9.22672 16 10.5194 16 12C16 13.4805 15.1956 14.7732 14 15.4648V17.6586C16.3304 16.8349 18 14.6124 18 12ZM6.58579 8.00396H4C2.89543 8.00396 2 8.89939 2 10.004V14.004C2 15.1085 2.89543 16.004 4 16.004H6.58579L10.2929 20.7111C10.9229 21.341 12 20.8949 12 20.004V4.00396C12 3.11305 10.9229 2.66689 10.2929 3.29685L6.58579 8.00396Z&quot;></path></svg></button><div role=slider class=&quot;VolumeControl_module_volumeControl__02ffae11 volume shared_module_focusable__29a0c6d5&quot; tabindex=0 aria-label=&quot;Volume (use up/down arrow keys to change)&quot; aria-valuenow=100 aria-valuetext=&quot;100% volume&quot; aria-valuemin=0 aria-valuemax=100 data-volume-control=true style=overflow:hidden;opacity:0;pointer-events:none><div class=VolumeControl_module_volumeBar__02ffae11><div class=VolumeControl_module_volumeBarFill__02ffae11 style=height:100%></div><div class=VolumeControl_module_sliderHandle__02ffae11 style=bottom:100%></div></div></div></div><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 ControlBarButton_module_controlBarButton__5e0eae92 vp-prefs PrefsButton_module_prefsButton__c0bd4f7c&quot; type=button tabindex=0 id=prefs-control-bar-button aria-expanded=false aria-haspopup=dialog data-prefs-button=true aria-labelledby=prefs-control-bar-button-tooltip data-touch-device=false><svg width=20 height=20 viewBox=&quot;0 0 20 20&quot; fill=none xmlns=http://www.w3.org/2000/svg class=PrefsButton_module_gearIcon__c0bd4f7c><path fill-rule=evenodd clip-rule=evenodd d=&quot;M9.16668 1.66699C8.2462 1.66699 7.50001 2.41318 7.50001 3.33366V4.72835C7.21484 4.86382 6.94241 5.02175 6.68499 5.19984L5.46953 4.4981C4.68103 4.04285 3.66009 4.31415 3.20034 5.11047L2.36526 6.55686C1.90707 7.35046 2.17605 8.3701 2.96953 8.82822L4.18535 9.53017C4.17298 9.68526 4.16668 9.84206 4.16668 10.0003C4.16668 10.1586 4.17298 10.3154 4.18535 10.4705L2.96953 11.1724C2.17605 11.6306 1.90707 12.6502 2.36526 13.4438L3.20034 14.8902C3.66009 15.6865 4.68103 15.9578 5.46953 15.5026L6.685 14.8008C6.94241 14.9789 7.21484 15.1368 7.50001 15.2723V16.667C7.50001 17.5875 8.2462 18.3337 9.16668 18.3337H10.8333C11.7538 18.3337 12.5 17.5875 12.5 16.667V15.2723C12.7851 15.1369 13.0574 14.979 13.3147 14.801L14.5298 15.5026C15.3183 15.9578 16.3393 15.6865 16.799 14.8902L17.6341 13.4438C18.0923 12.6502 17.8233 11.6306 17.0298 11.1724L15.8146 10.4708C15.827 10.3156 15.8333 10.1587 15.8333 10.0003C15.8333 9.84193 15.827 9.68501 15.8146 9.52981L17.0298 8.82822C17.8233 8.3701 18.0923 7.35046 17.6341 6.55686L16.799 5.11047C16.3393 4.31415 15.3183 4.04285 14.5298 4.4981L13.3147 5.19963C13.0574 5.02162 12.7851 4.86377 12.5 4.72835V3.33366C12.5 2.41318 11.7538 1.66699 10.8333 1.66699H9.16668ZM12.5 10.0003C12.5 11.381 11.3807 12.5003 10 12.5003C8.6193 12.5003 7.50001 11.381 7.50001 10.0003C7.50001 8.61961 8.6193 7.50033 10 7.50033C11.3807 7.50033 12.5 8.61961 12.5 10.0003Z&quot;></path></svg><span class=&quot;Button_module_buttonChildren__61be5b9c ControlBarButton_module_controlBarButtonChildren__5e0eae92&quot;><span id=prefs-control-bar-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 ControlBarButton_module_controlBarButtonTooltip__5e0eae92&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Settings</span></span></button><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 ControlBarButton_module_controlBarButton__5e0eae92 pip&quot; type=button tabindex=0 id=pip-control-bar-button data-pip-button=true aria-labelledby=pip-control-bar-button-tooltip data-touch-device=false><svg width=20 height=20 viewBox=&quot;0 0 20 20&quot; fill=none xmlns=http://www.w3.org/2000/svg data-enter-pip=true><path fill-rule=evenodd clip-rule=evenodd d=&quot;M3.33329 4.99992H16.6666V9.99992H18.3333V4.99992C18.3333 4.07944 17.5871 3.33325 16.6666 3.33325H3.33329C2.41282 3.33325 1.66663 4.07944 1.66663 4.99992V13.3333C1.66663 14.2537 2.41282 14.9999 3.33329 14.9999H8.33329V13.3333H3.33329V4.99992ZM9.99996 12.6666C9.99996 12.1143 10.4477 11.6666 11 11.6666H17.3333C17.8856 11.6666 18.3333 12.1143 18.3333 12.6666V17.3333C18.3333 17.8855 17.8856 18.3333 17.3333 18.3333H11C10.4477 18.3333 9.99996 17.8855 9.99996 17.3333V12.6666ZM7.91663 7.60408V8.59492L6.17079 6.84909C6.05829 6.73659 5.90163 6.66659 5.72913 6.66659C5.38413 6.66659 5.10413 6.94575 5.10413 7.29159C5.10413 7.46409 5.17413 7.61992 5.28746 7.73325L7.03246 9.47909H6.04163C5.69663 9.47909 5.41663 9.75825 5.41663 10.1041C5.41663 10.4491 5.69663 10.7291 6.04163 10.7291H8.54163C8.88663 10.7291 9.16663 10.4491 9.16663 10.1041V7.60408C9.16663 7.25825 8.88663 6.97909 8.54163 6.97909C8.19663 6.97909 7.91663 7.25825 7.91663 7.60408Z&quot; fill=white></path></svg><span class=&quot;Button_module_buttonChildren__61be5b9c ControlBarButton_module_controlBarButtonChildren__5e0eae92&quot;><span id=pip-control-bar-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 ControlBarButton_module_controlBarButtonTooltip__5e0eae92&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Picture-in-Picture</span></span></button><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 ControlBarButton_module_controlBarButton__5e0eae92 fullscreen FullscreenButton_module_fullscreen__5b68e32b&quot; type=button tabindex=0 id=fullscreen-control-bar-button data-fullscreen-button=true aria-labelledby=fullscreen-control-bar-button-tooltip data-touch-device=false><svg class=enter-fullscreen-icon width=24 height=24 viewBox=&quot;0 0 24 24&quot; xmlns=http://www.w3.org/2000/svg data-enter-fullscreen=true><path fill-rule=evenodd clip-rule=evenodd d=&quot;M16 5L17.5858 5L14.2929 8.29292C13.9024 8.68345 13.9024 9.31661 14.2929 9.70714C14.6834 10.0977 15.3166 10.0977 15.7071 9.70714L19 6.41426V8C19 8.55228 19.4477 9 20 9C20.5523 9 21 8.55228 21 8V4C21 3.73478 20.8946 3.48043 20.7071 3.29289C20.5196 3.10536 20.2652 3 20 3H16C15.4477 3 15 3.44772 15 4C15 4.55228 15.4477 5 16 5ZM5 8.00002V6.4142L8.29292 9.70712C8.68345 10.0976 9.31661 10.0976 9.70714 9.70712C10.0977 9.3166 10.0977 8.68343 9.70714 8.29291L6.41424 5.00001L8 5.00002C8.55228 5.00002 9 4.5523 9 4.00002C9 3.44773 8.55228 3.00002 8 3.00002H4C3.73478 3.00002 3.48043 3.10537 3.29289 3.29291C3.10536 3.48044 3 3.7348 3 4.00002V8.00002C3 8.5523 3.44772 9.00001 4 9.00001C4.55228 9.00001 5 8.5523 5 8.00002ZM8.00002 19H6.4142L9.70712 15.7071C10.0976 15.3166 10.0976 14.6834 9.70712 14.2929C9.3166 13.9024 8.68343 13.9024 8.29291 14.2929L5.00001 17.5858V16C5.00001 15.4477 4.5523 15 4.00001 15C3.44773 15 3.00002 15.4477 3.00002 16L3.00002 20C3.00002 20.2652 3.10537 20.5196 3.29291 20.7071C3.48044 20.8947 3.7348 21 4.00002 21H8.00002C8.5523 21 9.00001 20.5523 9.00001 20C9.00001 19.4477 8.5523 19 8.00002 19ZM19 17.5858V16C19 15.4477 19.4477 15 20 15C20.5523 15 21 15.4477 21 16V20C21 20.2652 20.8946 20.5196 20.7071 20.7071C20.5196 20.8947 20.2652 21 20 21H16C15.4477 21 15 20.5523 15 20C15 19.4477 15.4477 19 16 19H17.5858L14.2929 15.7071C13.9023 15.3166 13.9023 14.6834 14.2929 14.2929C14.6834 13.9024 15.3166 13.9024 15.7071 14.2929L19 17.5858Z&quot;></path></svg><span class=&quot;Button_module_buttonChildren__61be5b9c ControlBarButton_module_controlBarButtonChildren__5e0eae92&quot;><span id=fullscreen-control-bar-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 ControlBarButton_module_controlBarButtonTooltip__5e0eae92&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Fullscreen</span></span></button></div></div><a href=&quot;https://vimeo.com/253905163?fl=pl&amp;amp;fe=vl&quot; class=&quot;Link_module_link__bdf8051d VimeoLogoLink_module_vimeoLogo__970f58c4 shared_module_focusable__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener data-vimeo-logo=true aria-label=&quot;Watch on Vimeo&quot;><svg viewBox=&quot;0 0 20 20&quot; xmlns=http://www.w3.org/2000/svg aria-hidden=true data-vimeo-small-icon=true><path fill=#fff fill-rule=evenodd clip-rule=evenodd d=&quot;M18.7781 6.00913C18.6943 7.81161 17.4171 10.2795 14.9465 13.4122C12.3922 16.6841 10.231 18.3203 8.46324 18.3203C7.36838 18.3203 6.44133 17.3242 5.68438 15.331C5.17905 13.5043 4.67352 11.6776 4.168 9.85093C3.60591 7.8589 3.00305 6.86167 2.35829 6.86167C2.21771 6.86167 1.7259 7.1533 0.88381 7.73392L0 6.61152C0.927048 5.80871 1.84171 5.00589 2.74171 4.20176C3.9781 3.14879 4.90648 2.59501 5.52533 2.53908C6.98743 2.40059 7.88743 3.38562 8.22533 5.49419C8.5901 7.76902 8.84286 9.18398 8.98457 9.73796C9.40629 11.6253 9.86971 12.5681 10.3766 12.5681C10.7697 12.5681 11.3602 11.9557 12.148 10.7316C12.9345 9.50713 13.3562 8.57558 13.413 7.93547C13.5251 6.87875 13.1034 6.34917 12.148 6.34917C11.6981 6.34917 11.2345 6.45126 10.7575 6.65281C11.6808 3.67218 13.445 2.22456 16.0486 2.30695C17.9792 2.36287 18.8891 3.59693 18.7781 6.00913Z&quot;></path></svg></a></div></div></div></div><dialog class=&quot;vp-menu ModalMenu_module_menu__4fe0e031&quot; data-menu=prefs aria-modal=true style=overflow:hidden;opacity:0;pointer-events:none;display:none;max-width:500px;max-height:280px;top:50%;left:50%;transform:translate(-50%,-50%)></dialog><div class=BufferHandler_module_shade__94101f09 data-shade=true style=opacity:0;overflow:hidden;pointer-events:none;display:none></div><svg viewBox=&quot;0 0 48 48&quot; xmlns=http://www.w3.org/2000/svg fill=none data-spinner=true class=&quot;Spinner_module_spinner__795e5e53 vp-spin Spinner_module_lg__795e5e53&quot; data-component-type=spinner style=opacity:0;overflow:hidden;pointer-events:none;display:none><circle data-spinner-trace=true cx=24 cy=24 r=22 stroke=white></circle><circle data-spinner-circle=true cx=24 cy=24 r=22 stroke=white></circle></svg><div class=&quot;vp-captions CaptionsRenderer_module_captions__04afad3c Captions_module_captions__5ed5b89b Captions_module_contentAreaSibling__5ed5b89b&quot; aria-live=assertive style='font-size:13px;font-variant:initial;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;color:rgb(255,255,255);text-shadow:none'><span class=CaptionsRenderer_module_captionsWindow__04afad3c style=background-color:rgba(0,0,0,0)></span></div><div class=&quot;Outro_module_outroWrapper__64bf980e vp-outro-wrapper Outro_module_inactive__64bf980e&quot; data-content-area-sibling-eligible=true style=overflow:hidden;opacity:0;pointer-events:none;display:none></div></div>\n \n<div id=right-content-area class=&quot;RightContentArea_module_rightContentArea__a0f39df8 RightContentArea_module_iframeEmbed__a0f39df8&quot; aria-hidden=true><div class=&quot;AIWidget_module_aiWidget__f665b717 AIWidget_module_hidden__f665b717&quot; aria-label=&quot;Ask Vimeo AI&quot; role=dialog aria-modal=true aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;visibility:hidden;display:block></div></div></div>\n<script type=application/ld+json>{&quot;embedUrl&quot;:&quot;https://player.vimeo.com/video/253905163?h=6e63c9f991&quot;,&quot;thumbnailUrl&quot;:&quot;https://i.vimeocdn.com/video/680918441-b17f6b5d3cf508f4554b9a176faacbf150df4e784b73dc1e905d32a53195b096-d?f=webp&quot;,&quot;name&quot;:&quot;Big Buck Bunny&quot;,&quot;description&quot;:&quot;This is \\&quot;Big Buck Bunny\\&quot; by \\&quot;Jason Chen\\&quot; on Vimeo, the home for high quality videos and the people who love them.&quot;,&quot;duration&quot;:&quot;PT596S&quot;,&quot;uploadDate&quot;:&quot;2018-02-01T21:43:15-05:00&quot;,&quot;@context&quot;:&quot;https://schema.org/&quot;,&quot;@type&quot;:&quot;VideoObject&quot;}</script>\n<harper-render-box popover=manual style=pointer-events:none;border:none class=sf-hidden><template shadowrootmode=open></template></harper-render-box><script data-template-shadow-root>(()=>{document.currentScript.remove();processNode(document);function processNode(node){node.querySelectorAll(&quot;template[shadowrootmode]&quot;).forEach(element=>{let shadowRoot = element.parentElement.shadowRoot;if (!shadowRoot) {try {shadowRoot=element.parentElement.attachShadow({mode:element.getAttribute(&quot;shadowrootmode&quot;),delegatesFocus:element.getAttribute(&quot;shadowrootdelegatesfocus&quot;)!=null,clonable:element.getAttribute(&quot;shadowrootclonable&quot;)!=null,serializable:element.getAttribute(&quot;shadowrootserializable&quot;)!=null});shadowRoot.innerHTML=element.innerHTML;element.remove()} catch (error) {} if (shadowRoot) {processNode(shadowRoot)}}})}})()</script>\"></iframe><p><br><h2 class=ql-align-center>Getting Started is Easy</h2><p><br><div class=ql-code-block-container spellcheck=false><select class=ql-ui contenteditable=false><option value=plain>Plain<option value=bash>Bash<option value=cpp>C++<option value=cs>C#<option value=css>CSS<option value=diff>Diff<option value=xml>HTML/XML<option value=java>Java<option value=javascript selected>JavaScript<option value=markdown>Markdown<option value=php>PHP<option value=python>Python<option value=ruby>Ruby<option value=sql>SQL</select><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-comment\">// &lt;link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.snow.css\" rel=\"stylesheet\"&gt;</span></div><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-comment\">// &lt;script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.js\"&gt;&lt;/script&gt;</span></div><div class=ql-code-block data-language=javascript><br></div><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-keyword\">const</span> quill = <span class=\"ql-token hljs-keyword\">new</span> <span class=\"ql-token hljs-title\">Quill</span>(<span class=\"ql-token hljs-string\">'#editor'</span>, {</div><div class=ql-code-block data-language=javascript>  <span class=\"ql-token hljs-attr\">modules</span>: {</div><div class=ql-code-block data-language=javascript>    <span class=\"ql-token hljs-attr\">toolbar</span>: <span class=\"ql-token hljs-string\">'#toolbar'</span></div><div class=ql-code-block data-language=javascript>  },</div><div class=ql-code-block data-language=javascript>  <span class=\"ql-token hljs-attr\">theme</span>: <span class=\"ql-token hljs-string\">'snow'</span></div><div class=ql-code-block data-language=javascript>});</div><div class=ql-code-block data-language=javascript><br></div><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-comment\">// Open your browser's developer console to try out the API!</span></div></div><p><br><p><br><p class=ql-align-center><strong>Built with</strong><p class=ql-align-center><span class=ql-formula data-value=\"x^2 + (y - \\sqrt[3]{x^2})^2 = 1\">﻿<span contenteditable=false><span class=katex><span class=katex-mathml><math xmlns=http://www.w3.org/1998/Math/MathML><semantics><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mo stretchy=false>(</mo><mi>y</mi><mo>−</mo><mroot><msup><mi>x</mi><mn>2</mn></msup><mn>3</mn></mroot><msup><mo stretchy=false>)</mo><mn>2</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding=application/x-tex>x^2 + (y - \\sqrt[3]{x^2})^2 = 1</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:0.8974em;vertical-align:-0.0833em></span><span class=mord><span class=\"mord mathnormal\">x</span><span class=msupsub><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.8141em><span style=top:-3.063em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2</span></span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2222em></span><span class=mbin>+</span><span class=mspace style=margin-right:0.2222em></span></span><span class=base><span class=strut style=height:1em;vertical-align:-0.25em></span><span class=mopen>(</span><span class=\"mord mathnormal\" style=margin-right:0.0359em>y</span><span class=mspace style=margin-right:0.2222em></span><span class=mbin>−</span><span class=mspace style=margin-right:0.2222em></span></span><span class=base><span class=strut style=height:1.2051em;vertical-align:-0.25em></span><span class=\"mord sqrt\"><span class=root><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.8443em><span style=top:-3.0221em><span class=pstrut style=height:2.5em></span><span class=\"sizing reset-size6 size1 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">3</span></span></span></span></span></span></span></span><span class=\"vlist-t vlist-t2\"><span class=vlist-r><span class=vlist style=height:0.9551em><span class=svg-align style=top:-3em><span class=pstrut style=height:3em></span><span class=mord style=padding-left:0.833em><span class=mord><span class=\"mord mathnormal\">x</span><span class=msupsub><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.7401em><span style=top:-2.989em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2</span></span></span></span></span></span></span></span></span></span><span style=top:-2.9151em><span class=pstrut style=height:3em></span><span class=hide-tail style=min-width:0.853em;height:1.08em><svg width=400em height=1.08em viewBox=\"0 0 400000 1080\" preserveAspectRatio=\"xMinYMin slice\"><path d=\"M95,702\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl0 -0\nc5.3,-9.3,12,-14,20,-14\nH400000v40H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM834 80h400000v40h-400000z\"></path></svg></span></span></span><span class=vlist-s>​</span></span><span class=vlist-r><span class=vlist style=height:0.0849em><span></span></span></span></span></span><span class=mclose><span class=mclose>)</span><span class=msupsub><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.8141em><span style=top:-3.063em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2</span></span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span></span><span class=base><span class=strut style=height:0.6444em></span><span class=mord>1</span></span></span></span></span>﻿</span><p><br></p></div><div class=\"ql-tooltip ql-hidden sf-hidden\"></div></div></div></div><div id=full-wrapper><div id=full-container><div role=toolbar class=\"ql-toolbar ql-snow\"><span class=ql-formats><span class=\"ql-font ql-picker\"><span class=ql-picker-label tabindex=0 role=button aria-expanded=false aria-controls=ql-picker-options-3 data-value=sofia><svg viewBox=\"0 0 18 18\"><polygon class=ql-stroke points=\"7 11 9 13 11 11 7 11\"></polygon><polygon class=ql-stroke points=\"7 7 9 5 11 7 7 7\"></polygon></svg></span><span class=\"ql-picker-options sf-hidden\" aria-hidden=true tabindex=-1 id=ql-picker-options-3></span></span><select class=ql-font style=display:none></select><span class=\"ql-size ql-picker\"><span class=ql-picker-label tabindex=0 role=button aria-expanded=false aria-controls=ql-picker-options-4><svg viewBox=\"0 0 18 18\"><polygon class=ql-stroke points=\"7 11 9 13 11 11 7 11\"></polygon><polygon class=ql-stroke points=\"7 7 9 5 11 7 7 7\"></polygon></svg></span><span class=\"ql-picker-options sf-hidden\" aria-hidden=true tabindex=-1 id=ql-picker-options-4></span></span><select class=ql-size style=display:none></select></span><span class=ql-formats><button type=button class=ql-bold aria-pressed=false aria-label=bold><svg viewBox=\"0 0 18 18\"><path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path><path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path></svg></button><button type=button class=ql-italic aria-pressed=false aria-label=italic><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line><line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line><line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line></svg></button><button type=button class=ql-underline aria-pressed=false aria-label=underline><svg viewBox=\"0 0 18 18\"><path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path><rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect></svg></button><button type=button class=ql-strike aria-pressed=false aria-label=strike><svg viewBox=\"0 0 18 18\"><line class=\"ql-stroke ql-thin\" x1=15.5 x2=2.5 y1=8.5 y2=9.5></line><path class=ql-fill d=M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z></path><path class=ql-fill d=M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z></path></svg></button></span><span class=ql-formats><span class=\"ql-color ql-picker ql-color-picker\"><span class=ql-picker-label tabindex=0 role=button aria-expanded=false aria-controls=ql-picker-options-5><svg viewBox=\"0 0 18 18\"><line class=\"ql-color-label ql-stroke ql-transparent\" x1=3 x2=15 y1=15 y2=15></line><polyline class=ql-stroke points=\"5.5 11 9 3 12.5 11\"></polyline><line class=ql-stroke x1=11.63 x2=6.38 y1=9 y2=9></line></svg></span><span class=\"ql-picker-options sf-hidden\" aria-hidden=true tabindex=-1 id=ql-picker-options-5></span></span><select class=ql-color style=display:none></select><span class=\"ql-background ql-picker ql-color-picker\"><span class=ql-picker-label tabindex=0 role=button aria-expanded=false aria-controls=ql-picker-options-6><svg viewBox=\"0 0 18 18\"><g class=\"ql-fill ql-color-label\"><polygon points=\"6 6.868 6 6 5 6 5 7 5.942 7 6 6.868\"></polygon><rect height=1 width=1 x=4 y=4></rect><polygon points=\"6.817 5 6 5 6 6 6.38 6 6.817 5\"></polygon><rect height=1 width=1 x=2 y=6></rect><rect height=1 width=1 x=3 y=5></rect><rect height=1 width=1 x=4 y=7></rect><polygon points=\"4 11.439 4 11 3 11 3 12 3.755 12 4 11.439\"></polygon><rect height=1 width=1 x=2 y=12></rect><rect height=1 width=1 x=2 y=9></rect><rect height=1 width=1 x=2 y=15></rect><polygon points=\"4.63 10 4 10 4 11 4.192 11 4.63 10\"></polygon><rect height=1 width=1 x=3 y=8></rect><path d=M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z></path><path d=M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z></path><path d=M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z></path><rect height=1 width=1 x=12 y=2></rect><rect height=1 width=1 x=11 y=3></rect><path d=M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z></path><rect height=1 width=1 x=2 y=3></rect><rect height=1 width=1 x=6 y=2></rect><rect height=1 width=1 x=3 y=2></rect><rect height=1 width=1 x=5 y=3></rect><rect height=1 width=1 x=9 y=2></rect><rect height=1 width=1 x=15 y=14></rect><polygon points=\"13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174\"></polygon><rect height=1 width=1 x=13 y=7></rect><rect height=1 width=1 x=15 y=5></rect><rect height=1 width=1 x=14 y=6></rect><rect height=1 width=1 x=15 y=8></rect><rect height=1 width=1 x=14 y=9></rect><path d=M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z></path><rect height=1 width=1 x=14 y=3></rect><polygon points=\"12 6.868 12 6 11.62 6 12 6.868\"></polygon><rect height=1 width=1 x=15 y=2></rect><rect height=1 width=1 x=12 y=5></rect><rect height=1 width=1 x=13 y=4></rect><polygon points=\"12.933 9 13 9 13 8 12.495 8 12.933 9\"></polygon><rect height=1 width=1 x=9 y=14></rect><rect height=1 width=1 x=8 y=15></rect><path d=M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z></path><rect height=1 width=1 x=5 y=15></rect><path d=M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z></path><rect height=1 width=1 x=11 y=15></rect><path d=M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z></path><rect height=1 width=1 x=14 y=15></rect><rect height=1 width=1 x=15 y=11></rect></g><polyline class=ql-stroke points=\"5.5 13 9 5 12.5 13\"></polyline><line class=ql-stroke x1=11.63 x2=6.38 y1=11 y2=11></line></svg></span><span class=\"ql-picker-options sf-hidden\" aria-hidden=true tabindex=-1 id=ql-picker-options-6></span></span><select class=ql-background style=display:none></select></span><span class=ql-formats><button type=button class=ql-script aria-pressed=false value=super aria-label=\"script: super\"><svg viewBox=\"0 0 18 18\"><path class=ql-fill d=M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z></path><path class=ql-fill d=M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z></path></svg></button><button type=button class=ql-script aria-pressed=false value=sub aria-label=\"script: sub\"><svg viewBox=\"0 0 18 18\"><path class=ql-fill d=M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z></path><path class=ql-fill d=M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z></path></svg></button></span><span class=ql-formats><button type=button class=ql-header aria-pressed=false value=1 aria-label=\"header: 1\"><svg viewBox=\"0 0 18 18\"><path class=ql-fill d=M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z></path></svg></button><button type=button class=ql-header aria-pressed=false value=2 aria-label=\"header: 2\"><svg viewBox=\"0 0 18 18\"><path class=ql-fill d=M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z></path></svg></button><button type=button class=ql-blockquote aria-pressed=false aria-label=blockquote><svg viewBox=\"0 0 18 18\"><rect class=\"ql-fill ql-stroke\" height=3 width=3 x=4 y=5></rect><rect class=\"ql-fill ql-stroke\" height=3 width=3 x=11 y=5></rect><path class=\"ql-even ql-fill ql-stroke\" d=M7,8c0,4.031-3,5-3,5></path><path class=\"ql-even ql-fill ql-stroke\" d=M14,8c0,4.031-3,5-3,5></path></svg></button><button type=button class=ql-code-block aria-pressed=false aria-label=code-block><svg viewBox=\"0 0 18 18\"><polyline class=\"ql-even ql-stroke\" points=\"5 7 3 9 5 11\"></polyline><polyline class=\"ql-even ql-stroke\" points=\"13 7 15 9 13 11\"></polyline><line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line></svg></button></span><span class=ql-formats><button type=button class=ql-list aria-pressed=false value=ordered aria-label=\"list: ordered\"><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line><line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line><line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line><line class=\"ql-stroke ql-thin\" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line><path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path><path class=\"ql-stroke ql-thin\" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path><path class=\"ql-stroke ql-thin\" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path></svg></button><button type=button class=ql-list aria-pressed=false value=bullet aria-label=\"list: bullet\"><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line><line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line><line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line><line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line><line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line><line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line></svg></button><button type=button class=ql-indent aria-pressed=false value=-1 aria-label=\"indent: -1\"><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line><line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line><line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line><polyline class=ql-stroke points=\"5 7 5 11 3 9 5 7\"></polyline></svg></button><button type=button class=ql-indent aria-pressed=false value=+1 aria-label=\"indent: +1\"><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line><line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line><line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line><polyline class=\"ql-fill ql-stroke\" points=\"3 7 3 11 5 9 3 7\"></polyline></svg></button></span><span class=ql-formats><button type=button class=ql-direction aria-pressed=false value=rtl aria-label=\"direction: rtl\"><svg viewBox=\"0 0 18 18\"><polygon class=\"ql-stroke ql-fill\" points=\"3 11 5 9 3 7 3 11\"></polygon><line class=\"ql-stroke ql-fill\" x1=15 x2=11 y1=4 y2=4></line><path class=ql-fill d=M11,3a3,3,0,0,0,0,6h1V3H11Z></path><rect class=ql-fill height=11 width=1 x=11 y=4></rect><rect class=ql-fill height=11 width=1 x=13 y=4></rect></svg><svg viewBox=\"0 0 18 18\"><polygon class=\"ql-stroke ql-fill\" points=\"15 12 13 10 15 8 15 12\"></polygon><line class=\"ql-stroke ql-fill\" x1=9 x2=5 y1=4 y2=4></line><path class=ql-fill d=M5,3A3,3,0,0,0,5,9H6V3H5Z></path><rect class=ql-fill height=11 width=1 x=5 y=4></rect><rect class=ql-fill height=11 width=1 x=7 y=4></rect></svg></button><span class=\"ql-align ql-picker ql-icon-picker\"><span class=ql-picker-label tabindex=0 role=button aria-expanded=false aria-controls=ql-picker-options-7><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line><line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line><line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line></svg></span><span class=\"ql-picker-options sf-hidden\" aria-hidden=true tabindex=-1 id=ql-picker-options-7></span></span><select class=ql-align style=display:none></select></span><span class=ql-formats><button type=button class=ql-link aria-pressed=false aria-label=link><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line><path class=\"ql-even ql-stroke\" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path><path class=\"ql-even ql-stroke\" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path></svg></button><button type=button class=ql-image aria-pressed=false aria-label=image><svg viewBox=\"0 0 18 18\"><rect class=ql-stroke height=10 width=12 x=3 y=4></rect><circle class=ql-fill cx=6 cy=7 r=1></circle><polyline class=\"ql-even ql-fill\" points=\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\"></polyline></svg></button><button type=button class=ql-video aria-pressed=false aria-label=video><svg viewBox=\"0 0 18 18\"><rect class=ql-stroke height=12 width=12 x=3 y=3></rect><rect class=ql-fill height=12 width=1 x=5 y=3></rect><rect class=ql-fill height=12 width=1 x=12 y=3></rect><rect class=ql-fill height=2 width=8 x=5 y=8></rect><rect class=ql-fill height=1 width=3 x=3 y=5></rect><rect class=ql-fill height=1 width=3 x=3 y=7></rect><rect class=ql-fill height=1 width=3 x=3 y=10></rect><rect class=ql-fill height=1 width=3 x=3 y=12></rect><rect class=ql-fill height=1 width=3 x=12 y=5></rect><rect class=ql-fill height=1 width=3 x=12 y=7></rect><rect class=ql-fill height=1 width=3 x=12 y=10></rect><rect class=ql-fill height=1 width=3 x=12 y=12></rect></svg></button><button type=button class=ql-formula aria-pressed=false aria-label=formula><svg viewBox=\"0 0 18 18\"><path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path><rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect><path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path></svg></button></span><span class=ql-formats><button type=button class=ql-clean aria-pressed=false aria-label=clean><svg viewBox=\"0 0 18 18\"><line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line><line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line><line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line><line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line><rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect></svg></button></span></div><div class=\"ql-container ql-snow\"><div class=ql-editor contenteditable=true><h1 class=ql-align-center>Quill Rich Text Editor</h1><p><br><p>Quill is a free, <a href=https://github.com/slab/quill/ rel=\"noopener noreferrer\" target=_blank>open source</a> WYSIWYG editor built for the modern web. With its <a href=https://quilljs.com/docs/modules/ rel=\"noopener noreferrer\" target=_blank>modular architecture</a> and expressive <a href=https://quilljs.com/docs/api rel=\"noopener noreferrer\" target=_blank>API</a>, it is completely customizable to fit any need.<p><br></p><iframe class=\"ql-video ql-align-center\" frameborder=0 allowfullscreen height=280 width=500 sandbox=\"allow-popups allow-top-navigation-by-user-activation allow-scripts allow-modals allow-popups allow-downloads allow-pointer-lock allow-presentation\" srcdoc=\"<!DOCTYPE html> <html lang=en><meta charset=utf-8>\n<meta name=viewport content=&quot;width=device-width,initial-scale=1,user-scalable=yes&quot;>\n<style>:root{--fa-font-solid:normal 900 1em/1&quot;Font Awesome 7 Free&quot;;--fa-font-regular:normal 400 1em/1&quot;Font Awesome 7 Free&quot;;--fa-font-light:normal 300 1em/1&quot;Font Awesome 7 Pro&quot;;--fa-font-thin:normal 100 1em/1&quot;Font Awesome 7 Pro&quot;;--fa-font-duotone:normal 900 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-duotone-regular:normal 400 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-duotone-light:normal 300 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-duotone-thin:normal 100 1em/1&quot;Font Awesome 7 Duotone&quot;;--fa-font-brands:normal 400 1em/1&quot;Font Awesome 7 Brands&quot;;--fa-font-sharp-solid:normal 900 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-regular:normal 400 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-light:normal 300 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-thin:normal 100 1em/1&quot;Font Awesome 7 Sharp&quot;;--fa-font-sharp-duotone-solid:normal 900 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-sharp-duotone-regular:normal 400 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-sharp-duotone-light:normal 300 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-sharp-duotone-thin:normal 100 1em/1&quot;Font Awesome 7 Sharp Duotone&quot;;--fa-font-slab-regular:normal 400 1em/1&quot;Font Awesome 7 Slab&quot;;--fa-font-slab-press-regular:normal 400 1em/1&quot;Font Awesome 7 Slab Press&quot;;--fa-font-whiteboard-semibold:normal 600 1em/1&quot;Font Awesome 7 Whiteboard&quot;;--fa-font-thumbprint-light:normal 300 1em/1&quot;Font Awesome 7 Thumbprint&quot;;--fa-font-notdog-solid:normal 900 1em/1&quot;Font Awesome 7 Notdog&quot;;--fa-font-notdog-duo-solid:normal 900 1em/1&quot;Font Awesome 7 Notdog Duo&quot;;--fa-font-etch-solid:normal 900 1em/1&quot;Font Awesome 7 Etch&quot;;--fa-font-jelly-regular:normal 400 1em/1&quot;Font Awesome 7 Jelly&quot;;--fa-font-jelly-fill-regular:normal 400 1em/1&quot;Font Awesome 7 Jelly Fill&quot;;--fa-font-jelly-duo-regular:normal 400 1em/1&quot;Font Awesome 7 Jelly Duo&quot;;--fa-font-chisel-regular:normal 400 1em/1&quot;Font Awesome 7 Chisel&quot;;--fa-font-utility-semibold:normal 600 1em/1&quot;Font Awesome 7 Utility&quot;;--fa-font-utility-duo-semibold:normal 600 1em/1&quot;Font Awesome 7 Utility Duo&quot;;--fa-font-utility-fill-semibold:normal 600 1em/1&quot;Font Awesome 7 Utility Fill&quot;}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1,1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,0.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,0.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-0.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,0.95)) translateY(0)}57%{transform:scale(1,1) translateY(var(--fa-bounce-rebound,-0.125em))}64%{transform:scale(1,1) translateY(0)}100%{transform:scale(1,1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,0.4)}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,0.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,100%{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}</style><link rel=canonical href=https://player.vimeo.com/video/253905163>\n<meta name=googlebot content=noindex,indexifembedded>\n<title>Big Buck Bunny from Jason Chen on Vimeo</title>\n<style>body,html,.player{overflow:hidden;width:100%;height:100%;margin:0;padding:0}</style>\n<style>@keyframes buffer{100%{transform:translateX(-10px)}}@-moz-keyframes bufferLeft{0%{left:0}100%{left:-10px}}@keyframes throb{0%,100%{background-color:#555}50%{background-color:#444}}@keyframes wiggle{0%{transform:translateY(10px)}20%{transform:translateY(0)}40%,80%{transform:translateX(8px)}60%{transform:translateX(-8px)}100%{transform:translateX(0)}}@keyframes pulse{50%{transform:scale(.9)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-135px}}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes scaleAnimation{0%{transform:scale(.9,.9)}100%{transform:scale(1,1)}}body:not(.showfocus) .player a,body:not(.showfocus) .player button,body:not(.showfocus) .player div,body:not(.showfocus) .player span,body:not(.showfocus) .player svg{outline:0!important}.vp-placeholder{transition:opacity 125ms ease-out .1s}.vp-placeholder-fadeout{opacity:0}.player{position:relative;max-height:100%;width:100%;height:100%;margin:0;padding:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:auto;color:#fff;line-height:normal;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial!important;font-size:10px;border-collapse:separate;user-select:none;-webkit-user-select:none;touch-action:manipulation}.player :focus{outline:2px solid #00adef;outline-offset:2px}.player,.player *,.player ::after,.player ::before{box-sizing:border-box;-webkit-tap-highlight-color:transparent}.player button{cursor:pointer;font-size:1em}.player button:not(.exclude-global-button-styles){appearance:none;border:0;padding:0;margin:0;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial;line-height:normal;height:auto;vertical-align:baseline}.player a:active,.player button:active,.player button:not(:focus){outline:0}.player img{border:0}.player a{text-decoration:none}.player .invisible{opacity:0}.player .fill{fill:#fff}.player .vp-target{top:0;left:0;height:100%;z-index:3}.player .vp-video-wrapper{opacity:1;transition:opacity 125ms ease-out}.player .vp-content-area-background,.player .vp-player-ui-container,.player .vp-player-ui-overlays{pointer-events:none;position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden}.player .vp-player-ui-container{z-index:4}.player .vp-player-ui-overlays{z-index:36}.player.hide-controls-mode video::-webkit-media-controls-start-playback-button{display:none}.player.right-content-area-supported{overflow:hidden}.player.right-content-area-supported>.content-area-sibling-enabled{width:100%;right:0;position:absolute}.player[data-filter] .thumb::after,.player[data-filter] .vp-preview::after,.player[data-filter] .vp-video::after{content:&quot;&quot;;display:block;height:100%;width:100%;top:0;left:0;position:absolute;opacity:1;background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,transparent,transparent)}.player[data-filter=aden] .thumb::after,.player[data-filter=aden] .vp-preview::after,.player[data-filter=aden] .vp-video::after{background:linear-gradient(to right,rgba(66,10,14,.2),transparent),radial-gradient(circle,transparent,transparent);mix-blend-mode:darken}.player[data-filter=earlybird] .thumb::after,.player[data-filter=earlybird] .vp-preview::after,.player[data-filter=earlybird] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,#d0ba8e 20%,#360309 85%,#1d0210 100%);mix-blend-mode:overlay}.player[data-filter=hudson] .thumb::after,.player[data-filter=hudson] .vp-preview::after,.player[data-filter=hudson] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,#a6b1ff 50%,#342134);mix-blend-mode:multiply;opacity:.5}.player[data-filter=inkwell] .thumb::after,.player[data-filter=inkwell] .vp-preview::after,.player[data-filter=inkwell] .vp-video::after{opacity:0}.player[data-filter=mayfair] .thumb::after,.player[data-filter=mayfair] .vp-preview::after,.player[data-filter=mayfair] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle at 40% 40%,rgba(255,255,255,.8),rgba(255,200,200,.6),#111 60%);mix-blend-mode:overlay;opacity:.4}.player[data-filter=toaster] .thumb::after,.player[data-filter=toaster] .vp-preview::after,.player[data-filter=toaster] .vp-video::after{background:linear-gradient(to right,transparent,transparent),radial-gradient(circle,#804e0f,#3b003b);mix-blend-mode:screen}.player[data-filter=ascii] .thumb::after{background-color:#0f0;mix-blend-mode:darken}.player .vp-video-wrapper{top:0;left:0;bottom:0;overflow:hidden}.player .vp-video-wrapper .vp-video{position:absolute;top:0;left:0;bottom:0;right:0;transition:filter .25s,opacity .25s}.player .vp-video-wrapper .vp-video::after{transition:all .25s}.player .vp-video-wrapper .vp-telecine{position:absolute;top:0;left:0;bottom:0;right:0;transition:opacity .25s}.player .vp-video-wrapper .vp-telecine.hide-webkit-controls video::-webkit-media-controls-play-button{display:none}.player .vp-video-wrapper .vp-telecine.hide-webkit-controls video::-webkit-media-controls-start-playback-button{display:none}.player .vp-video-wrapper video{width:100%;height:100%}.SideDock_module_root__eeb5e08f{position:absolute;top:0;right:0;padding:8px;padding-top:0;z-index:18;transform:translate3d(0,0,0);display:flex;flex-direction:column;align-items:flex-end}.SideDock_module_root__eeb5e08f,.SideDock_module_root__eeb5e08f .SideDock_module_sidedockInner__eeb5e08f{transition:opacity 250ms ease-out}.SideDock_module_root__eeb5e08f button{margin:8px;font-family:inherit;border-radius:4px;border:0;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;transition:background-color 40ms;margin-right:0;background-color:var(--color-one-opacity-ninety);color:var(--color-three)}.SideDock_module_root__eeb5e08f button svg{pointer-events:none}.SideDock_module_root__eeb5e08f button path{fill:var(--color-three)}.SideDock_module_root__eeb5e08f button,.SideDock_module_root__eeb5e08f label{margin-top:8px;margin-bottom:0}.SideDock_module_root__eeb5e08f.SideDock_module_visible__eeb5e08f button{pointer-events:auto}.SideDock_module_root__eeb5e08f button:not([data-vod-button=true]){padding:1px 6px}.SideDock_module_root__eeb5e08f button:focus{outline:none}.SideDock_module_root__eeb5e08f button:hover:not(:active){background-color:var(--color-two);color:var(--color-two-monochrome);border:none}.SideDock_module_root__eeb5e08f button:hover:not(:active) path{fill:var(--color-two-monochrome)}.SideDock_module_root__eeb5e08f.SideDock_module_outroVisible__eeb5e08f button:not(:hover){opacity:0.65}.LabeledButton_module_labeledButton__a4450693{background:rgba(0,0,0,0.9);transition:opacity 150ms ease-out,transform 150ms ease-out;margin:8px;font-family:inherit;color:#fff;border:0;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background-color:rgba(0,0,0,0.9);display:flex;border-radius:0.25rem;padding:0.8em 1.2em;line-height:1.88rem;height:2rem;font-size:1.2em;font-weight:bold;margin-right:0;align-items:center;white-space:nowrap}.LabeledButton_module_box__a4450693{display:flex;justify-content:flex-end;transition:transform 150ms ease-out}button.LikeButton_module_likeButton__3908feee.LikeButton_module_animating__3908feee:hover{background-color:var(--color-one-opacity-ninety);color:var(--color-three)}button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee{animation:LikeButton_module_heartbeat__3908feee 1s 1 ease-out}button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee path{stroke:var(--color-two-monochrome);fill:transparent}button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee.LikeButton_module_liked__3908feee path,button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee.LikeButton_module_liked__3908feee.LikeButton_module_redHeart__3908feee path{fill:var(--color-two-monochrome);stroke:var(--color-two-monochrome)}@media (prefers-reduced-motion:reduce){button.LikeButton_module_likeButton__3908feee:hover:not(.LikeButton_module_animating__3908feee) .LikeButton_module_likeIcon__3908feee{animation:none}}@keyframes LikeButton_module_heartbeat__3908feee{0%{transform:scale(1)}10%{transform:scale(1)}20%{transform:scale(1.3)}30%{transform:scale(1.1)}40%{transform:scale(1.3)}100%{transform:scale(1)}}.ShareButton_module_shareButton__26260904:hover .ShareButton_module_shareIcon__26260904{display:inline-block;animation:ShareButton_module_takeoff__26260904 750ms 1;animation-timing-function:ease-in-out;transform-origin:center}@media (prefers-reduced-motion:reduce){.ShareButton_module_shareButton__26260904:hover .ShareButton_module_shareIcon__26260904{animation:none}}@keyframes ShareButton_module_takeoff__26260904{0%{transform:translate(0,0)}20%{transform:translate(-3px,3px)}40%{transform:translate(2px,-2px)}60%{transform:translate(-1px,1px)}80%{transform:translate(0.5px,-0.5px)}100%{transform:translate(0,0)}}button.WatchLaterButton_module_watchLaterButton__238c6c3b.WatchLaterButton_module_animating__238c6c3b:hover{background-color:var(--color-one-opacity-ninety);color:var(--color-three)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) .WatchLaterButton_module_watchLaterIcon__238c6c3b{display:inline-block;animation:0.25s ease-in-out 0.1s 1;transform-origin:center;animation-name:WatchLaterButton_module_pop__238c6c3b}@media (prefers-reduced-motion:reduce){button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) .WatchLaterButton_module_watchLaterIcon__238c6c3b{animation:none}}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) circle[data-animated-clock-circle]{stroke:var(--color-two-monochrome)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b) path[data-animated-clock-hand]{stroke:var(--color-two-monochrome)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b).WatchLaterButton_module_filled__238c6c3b circle[data-animated-clock-circle]{fill:var(--color-two-monochrome)}button.WatchLaterButton_module_watchLaterButton__238c6c3b:hover:not(.WatchLaterButton_module_animating__238c6c3b).WatchLaterButton_module_filled__238c6c3b path[data-animated-clock-hand]{stroke:var(--color-two)}@keyframes WatchLaterButton_module_pop__238c6c3b{0%{transform:scale(1)}10%{transform:scale(1.15)}100%{transform:scale(1)}}.DebugPanel_module_debugButton__42adb963:hover:not(:active){border:none}.DebugValues_module_clipId__54d9bb7b:hover{text-decoration:underline}.DebugValues_module_bandwidthMin__54d9bb7b::before,.DebugValues_module_bandwidthMax__54d9bb7b::before{display:block;position:absolute;left:2px;font-size:0.8em;top:3px}.DebugValues_module_bandwidthMin__54d9bb7b::before{content:&quot;▼&quot;/&quot;Minimum bandwidth&quot;}.DebugValues_module_bandwidthMax__54d9bb7b::before{content:&quot;▲&quot;/&quot;Maximum bandwidth&quot;}.BandwidthSeriesDisplay_module_marker__e795ff85:hover{cursor:pointer;stroke-width:3}.TitleTags_module_tagWrapper__20a17f3b{display:inline-block}a.TitleTags_module_aiTag__20a17f3b[data-ai-content-tag=true]:hover{background:rgba(0,0,0,0.2);color:var(--color-two-monochrome)}.Title_module_title__9dc182ba{display:flex;position:relative;padding:8px;z-index:12;transition:opacity 250ms ease-out;margin-right:4.4em;pointer-events:auto;transform:translate3d(0,0,0)}.Title_module_portrait__9dc182ba{margin:0 0.4em 0 0;flex:1 0 auto;pointer-events:inherit}.Title_module_portrait__9dc182ba .Title_module_portraitLink__9dc182ba{position:relative;display:block;width:100%;height:100%}.player.player-xs .Title_module_portrait__9dc182ba{width:4.8em;height:4.8em}.Title_module_portrait__9dc182ba img{border:2px solid;border-color:var(--color-one-opacity-ninety);border-radius:50%}.Title_module_portrait__9dc182ba img:hover{border-color:var(--color-two)}.player.player-xs .Title_module_portrait__9dc182ba img{width:4.8em;height:4.8em}.Title_module_header__9dc182ba{margin:0;display:flex;flex-flow:row nowrap}.Title_module_headers__9dc182ba{display:flex;flex-flow:column nowrap;align-items:flex-start;flex:1 1 100%;min-width:0;overflow-wrap:break-word;hyphens:auto}.Title_module_headers__9dc182ba *{pointer-events:inherit}span.Title_module_titleText__9dc182ba{font-size:14px;letter-spacing:-0.2px}.Title_module_titleWrapper__9dc182ba{display:block;position:relative;background-color:var(--color-one-opacity-ninety);color:var(--color-three);border-radius:4px;margin-bottom:0.4em;height:auto}.Title_module_titleWrapper__9dc182ba .Title_module_textAndTagsWrapper__9dc182ba{display:inline-block;vertical-align:middle;border-radius:4px;font-size:14px;padding:0.2857142857em 0.5714285714em;line-height:20px;height:100%}.Title_module_titleWrapper__9dc182ba:hover{background-color:var(--color-two)}.Title_module_titleWrapper__9dc182ba:hover .Title_module_textAndTagsWrapper__9dc182ba{color:var(--color-two-monochrome)}.Title_module_titleWrapper__9dc182ba:hover .Title_module_textAndTagsWrapper__9dc182ba span[id=title-text]{color:var(--color-two-monochrome)}.Title_module_titleWrapper__9dc182ba:hover .Title_module_titleTag__9dc182ba{background:var(--color-two-monochrome-opacity-twenty-eighty)}a.Title_module_titleLink__9dc182ba{position:absolute;width:100%;height:100%}.Title_module_subtitle__9dc182ba{display:inline-flex;align-items:baseline;background-color:var(--color-one-opacity-ninety);color:var(--color-three);border-radius:4px;font-size:12px;gap:0.3333333333em;line-height:16px;padding:0.3333333333em 0.6666666667em;margin:0}.Title_module_subtitle__9dc182ba span{color:var(--color-three);font-size:inherit}.Title_module_subtitle__9dc182ba:hover{background-color:var(--color-two)}.Title_module_subtitle__9dc182ba:hover span{color:var(--color-two-monochrome)}.Card_module_card__924d992f:hover{background:var(--color-one);box-shadow:rgba(0,0,0,0.17)0 0.5rem 1rem -0.5rem,rgba(0,0,0,0.33)0 0 0.25rem -0.06rem}@keyframes TinyProgressBar_module_buffer__c04d36b1{100%{transform:translateX(-10px)}}.PlayButton_module_playButtonWrapper__b9d5abe0{transition:width 250ms ease-in-out,margin 250ms ease-in-out;width:5.6em;height:3.2em;margin:0 0.8em 0 0;pointer-events:all}.PlayButton_module_playButton__b9d5abe0{font-family:inherit;-webkit-font-smoothing:antialiased;width:5.6em;height:3.2em;color:#fff;margin:0;border:none;appearance:none;z-index:22;background-color:var(--color-one-opacity-ninety);opacity:1;transform:translate3d(0,0,0);transition:opacity 250ms ease-out,background-color 40ms,color 40ms,width 250ms ease-in-out,padding 250ms ease-in-out}.PlayButton_module_playButton__b9d5abe0 .PlayButton_module_playIcon__b9d5abe0{margin:0}.PlayButton_module_playButton__b9d5abe0 .PlayButton_module_playIcon__b9d5abe0 path{fill:var(--color-three)}.PlayButton_module_playButton__b9d5abe0 .PlayButton_module_playIcon__b9d5abe0{width:100%;min-height:auto;height:2.4em}@media (hover:hover){.PlayButton_module_playButton__b9d5abe0:hover{background-color:var(--color-two)}.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_playIcon__b9d5abe0 path,.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_pauseIcon__b9d5abe0 path,.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_replayIcon__b9d5abe0 path,.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_trailerIcon__b9d5abe0 path{fill:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover .PlayButton_module_text__b9d5abe0{color:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover [data-tiny-played]{fill:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover [data-tiny-loaded]{fill:var(--color-two-monochrome-opacity-twenty)}.PlayButton_module_playButton__b9d5abe0:hover [data-tiny-buffer-pattern] line{stroke:var(--color-two-monochrome)}.PlayButton_module_playButton__b9d5abe0:hover:not(:active){border:none}}.PrefsButton_module_prefsButton__c0bd4f7c .PrefsButton_module_gearIcon__c0bd4f7c{height:100%;transform-origin:50% 50%;transition:transform 450ms cubic-bezier(0.08,0.82,0.17,1)}.VimeoLogoLink_module_vimeoLogo__970f58c4{display:flex;height:100%;z-index:22}.VimeoLogoLink_module_vimeoLogo__970f58c4 svg{height:100%;fill:#fff;padding:0.2em;width:24px}.ControlBarButton_module_controlBarButton__5e0eae92{width:2.4em;height:2.4em;padding:0.2em;appearance:none;border:none;transition:none;background:none;z-index:22}.ControlBarButton_module_controlBarButton__5e0eae92 svg{width:2.4em;height:100%}.ControlBarButton_module_controlBarButton__5e0eae92 svg path{fill:var(--color-three)}@media (hover:hover){.ControlBarButton_module_controlBarButton__5e0eae92:hover svg path{fill:var(--color-two)}}.ControlBarButton_module_controlBarButton__5e0eae92:active{background:rgba(255,255,255,0.4)}span.ControlBarButton_module_controlBarButtonChildren__5e0eae92{transform:translate3d(0,0,0);position:fixed;overflow:visible}span.ControlBarButton_module_controlBarButtonTooltip__5e0eae92{bottom:calc(1.3333333333em + 4px)}.ChromecastButton_module_chromecastButton__6a7b0286:active{outline:2px solid #00adef!important;outline-offset:2px;background:rgba(255,255,255,0.4)}.CuePointMarkers_module_cuePoints__7287c027:hover,.CuePointMarkers_module_cuePoints__7287c027:focus{opacity:1;transform:translateX(-50%) scale(1.5);z-index:26}.FocusTarget_module_focusTarget__abd564d5{width:100%;height:100%}.InteractiveMarker_module_interactiveMarker__6d3dc825:hover,.InteractiveMarker_module_interactiveMarker__6d3dc825:focus{height:1.2em;width:1.2em;border-radius:0.6em;margin-left:-0.6em;z-index:26}.Timecode_module_timecodeContainer__0e71c943{position:absolute;display:block;top:-0.8em;margin:-2em 0 0-1.2em}.Timecode_module_timecodeContainer__0e71c943 .Timecode_module_timecode__0e71c943{border-radius:4px;padding:0.2em 0.4em;line-height:1.6em;font-weight:500;position:relative;left:-50%;display:inline-block;margin-left:2.3em;background:#fff;color:#000;cursor:grab}.Timecode_module_timecodeContainer__0e71c943 .Timecode_module_timecode__0e71c943::after{border-left:0.4em solid transparent;border-right:0.4em solid transparent;border-top:0.4em solid #fff;bottom:-0.3em;content:&quot;&quot;;left:50%;margin-left:-0.4em;position:absolute}.ThumbnailPreview_module_thumbnailPreview__0cb46f3c{display:flex;flex-direction:column;justify-content:center;position:absolute;max-height:12em;border-radius:8px;transform:translateX(-50%);bottom:2.4em}.ThumbnailPreview_module_thumbnailPreview__0cb46f3c .ThumbnailPreview_module_thumbnailPreviewText__0cb46f3c{display:flex;justify-content:center;align-items:center;flex-direction:column;width:100%;max-height:5.8181818182em;line-height:1.4545454545em;padding:0.3636363636em;background:rgba(0,0,0,0.9);font-size:11px;font-weight:500;letter-spacing:0.4px;border-radius:0 0 8px 8px}.ThumbnailPreview_module_thumbnailPreview__0cb46f3c .ThumbnailPreview_module_thumbnailPreviewText__0cb46f3c .ThumbnailPreview_module_time__0cb46f3c{height:1.4545454545em}.ChapterSegment_module_chapter__33ca9410,.ChapterSegment_module_segmentBar__33ca9410{height:0.4em;border-radius:10em;position:relative;overflow:hidden}.ChapterSegment_module_chapter__33ca9410{transition:height 0.2s ease-in-out;background-color:var(--color-three-opacity-twenty)}.ChapterSegment_module_segmentBar__33ca9410{position:absolute}.ChapterSegment_module_chapterWrapper__33ca9410{position:relative;padding:1.6em 0;cursor:pointer}.ChapterSegment_module_chapterWrapper__33ca9410:first-of-type{margin-left:0}.ChapterSegment_module_chapterWrapper__33ca9410:not(.ChapterSegment_module_hoverDisabled__33ca9410):hover .ChapterSegment_module_chapter__33ca9410,.ChapterSegment_module_chapterWrapper__33ca9410:not(.ChapterSegment_module_hoverDisabled__33ca9410):hover .ChapterSegment_module_segmentBar__33ca9410{height:0.8em}.LoadedBar_module_loaded__3d837846{background-color:var(--color-three-opacity-twenty);transition:width 175ms cubic-bezier(0.18,0,0.07,1),height 0.2s ease-in-out}.PlayedBar_module_played__38fb8087{transition:height 0.2s ease-in-out;background-color:var(--color-two)}.ChapterSegments_module_chapterSegmentsWrapper__426e8ff1{position:absolute;width:100%;height:100%;display:flex;align-items:center;border-radius:10em}.ProgressBar_module_progressBarContainer__20d7fbb1{transition:width 250ms ease-in-out,margin 250ms ease-in-out,flex-grow 250ms ease-in-out,flex-shrink 250ms ease-in-out,padding 250ms ease-in-out;height:0.4em;display:flex;align-items:center;padding:16px 8px;width:100%}.ProgressBar_module_progressBarContainer__20d7fbb1 .ProgressBar_module_progressBar__20d7fbb1{cursor:pointer;display:flex;align-items:center;flex:1;height:0.4em;position:relative;width:100%}.ControlBar_module_controlBarWrapper__33f2e772{position:absolute;display:flex;justify-content:flex-end;align-items:flex-end;bottom:0.8em;left:0.8em;right:0.8em;height:3.2em;touch-action:pan-y pinch-zoom}.ControlBar_module_controls__33f2e772{transition:max-width 250ms ease-in-out;height:3.2em;z-index:22;display:flex;flex:1;pointer-events:all;justify-content:flex-end;max-width:calc(100% - 56px - 8px)}.ControlBar_module_progressBarAndButtons__33f2e772{transform:translate3d(0,0,0);transition:flex-grow 250ms ease-in-out;background-color:var(--color-one-opacity-ninety);border-radius:4px;display:flex;flex-grow:1;justify-content:flex-end;align-items:center;position:relative;height:32px;padding:4px;max-width:100%}.ResetButton_module_resetButton__5af7707c:hover{background:rgba(255,255,255,0.2)}.ChaptersPanelMenuOption_module_chapterListItem__22a198a7:hover:not(.ChaptersPanelMenuOption_module_disabled__22a198a7){background-color:rgba(255,255,255,0.2)}.ChaptersPanelMenuOption_module_chapterListItem__22a198a7:hover .ChaptersPanelMenuOption_module_copyLinkButton__22a198a7,.ChaptersPanelMenuOption_module_chapterListItem__22a198a7:focus-within .ChaptersPanelMenuOption_module_copyLinkButton__22a198a7{opacity:1}.ChaptersPanelMenuOption_module_chapterListButton__22a198a7:focus{outline-offset:-2px;border-radius:3px}button.ChaptersCopyLinkButton_module_button__fd58dc8d:hover,button.ChaptersCopyLinkButton_module_button__fd58dc8d:focus{background-color:rgba(255,255,255,0.2)}button.ChaptersCopyLinkButton_module_button__fd58dc8d.ChaptersCopyLinkButton_module_touchDevice__fd58dc8d:hover,button.ChaptersCopyLinkButton_module_button__fd58dc8d.ChaptersCopyLinkButton_module_touchDevice__fd58dc8d:focus{background-color:transparent}.VolumeControl_module_volumeControlContainer__02ffae11{padding:1.6em 0;display:flex;justify-content:center;pointer-events:auto}.VolumeControl_module_volumeControl__02ffae11{transform:translate3d(0,0,0);position:absolute;cursor:pointer;display:flex;justify-content:center;align-items:center;padding:0.8em 1em;width:3.2em;height:9.6em;background:rgba(0,0,0,0.9);border-radius:4px;bottom:3.2em}.VolumeControl_module_volumeControl__02ffae11:focus-within{outline:none}.VolumeControl_module_volumeControl__02ffae11:active{cursor:grabbing}.VolumeControl_module_volumeControl__02ffae11:focus-visible{outline:2px solid #00adef;outline-offset:2px}.VolumeControl_module_volumeBar__02ffae11{position:relative;display:flex;justify-content:center;height:7.2em;width:0.4em;background-color:rgba(255,255,255,0.4);border-radius:100px;transition:width 0.2s ease-in-out}.VolumeControl_module_volumeBarFill__02ffae11{position:absolute;width:100%;bottom:0;opacity:1;border-radius:100px;background-color:var(--color-two)}.VolumeControl_module_sliderHandle__02ffae11{position:absolute;transform:translateY(50%);background-color:#fff;height:0.8em;width:0.8em;border-radius:4px;margin:0 6em;transition:height 0.2s ease-in-out,width 0.2s ease-in-out,border-radius 0.2s ease-in-out}.ControlBarButtonsAndMenus_module_wrapper__768465f8{gap:4px;max-width:100%;display:flex;justify-content:flex-end;align-items:center;transition:opacity 250ms ease-out;height:100%;opacity:1;position:inherit;margin-right:4px}.ControlBarButtonsAndMenus_module_collapsibleWrapper__768465f8{-ms-overflow-style:none;scrollbar-width:none;container-type:scroll-state;transition:opacity 250ms ease-out,width 250ms ease-out,max-width 250ms ease-out,margin 250ms ease-out;height:32px;opacity:1;margin:0-4px;display:flex;align-items:center;justify-content:flex-start;z-index:21;width:fit-content;overflow:auto}.ControlBarButtonsAndMenus_module_collapsibleWrapper__768465f8::-webkit-scrollbar{display:none}.ControlBarButtonsAndMenus_module_collapsibleContent__768465f8{-ms-overflow-style:none;scrollbar-width:none;gap:4px;position:static;display:flex;justify-content:flex-end;align-items:center;width:auto;height:100%;padding:0 4px;pointer-events:none;overflow-y:hidden;clip-path:none;min-width:fit-content}.ControlBarButtonsAndMenus_module_collapsibleContent__768465f8::-webkit-scrollbar{display:none}.ControlBarButtonsAndMenus_module_collapsibleContent__768465f8 button{pointer-events:all}.NudgeNotification_module_nudge__5db47681{position:absolute;top:0;height:100%;display:flex;flex-direction:column;justify-content:center;margin:0}.NudgeNotification_module_nudge__5db47681 .NudgeNotification_module_nudgeInfo__5db47681{display:flex;flex-direction:column;align-items:center;align-self:center;position:relative;width:9.6em}@media (max-width:299px),(max-height:169px){.NudgeNotification_module_nudge__5db47681 .NudgeNotification_module_nudgeInfo__5db47681{width:9.6em}}@media (min-width:300px) and (max-width:375px){.NudgeNotification_module_nudge__5db47681 .NudgeNotification_module_nudgeInfo__5db47681{width:9.6em}}.NudgeNotification_module_nudge__5db47681.NudgeNotification_module_nudgeCenter__5db47681{width:auto;left:50%;transform:translateX(-50%)}.NudgeNotification_module_nudgeIcon__5db47681 svg{fill:#fff;height:3.2em}@media (max-width:299px),(max-height:169px){.NudgeNotification_module_nudgeIcon__5db47681 svg{height:2.4em}}.NudgeNotification_module_nudgeTime__5db47681{font-weight:bold;font-size:1.4em;letter-spacing:-0.4px;height:1.8em}@media (max-width:414px),(max-height:168px){.NudgeNotification_module_nudgeTime__5db47681{font-size:1.2em;height:1.6em}}.PipOverlay_module_overlay__82a6be37{display:flex;flex-direction:column;width:100%;height:100%;align-items:center;justify-content:center;background-color:#121212}.PipOverlay_module_overlay__82a6be37 svg{height:1.8em}.PipOverlay_module_overlay__82a6be37 .PipOverlay_module_title__82a6be37{margin-top:8px;font-size:16px}.RightContentArea_module_rightContentArea__a0f39df8{position:absolute;right:0;top:0;height:100%;z-index:38}.RightContentArea_module_rightContentArea__a0f39df8.RightContentArea_module_iframeEmbed__a0f39df8{background-color:transparent}.right-content-area-supported.app-xs .RightContentArea_module_rightContentArea__a0f39df8{width:100%;left:0%;opacity:0;pointer-events:none}.ContentAreaBackground_module_imgContainer__9da212ea{background-color:#000;width:100%;height:100%}.right-content-area-supported.app-xs .ContentAreaBackground_module_imgContainer__9da212ea{z-index:37;position:absolute;left:0;top:0}.ContentAreaBackground_module_img__9da212ea{width:100%;height:100%;object-fit:cover;filter:blur(10px)}.ContentAreaBackground_module_img__9da212ea.ContentAreaBackground_module_loaded__9da212ea{opacity:0.1}.BufferHandler_module_shade__94101f09{position:absolute;top:0;left:0;bottom:0;right:0;background-color:#000}.Captions_module_captions__5ed5b89b{padding:0 10px 10px;bottom:0}.Captions_module_captions__5ed5b89b.Captions_module_withControls__5ed5b89b{transform:translateY(-50px)}.Captions_module_captions__5ed5b89b.Captions_module_withControls__5ed5b89b.Captions_module_contentAreaSibling__5ed5b89b{transition:transform 150ms ease,width 400ms ease-in-out,right 400ms ease-in-out}.QoESurvey_module_thumbsUp__c40e38d2.QoESurvey_module_selected__c40e38d2:hover,.QoESurvey_module_thumbsDown__c40e38d2.QoESurvey_module_selected__c40e38d2:hover{background:none}.Toasts_module_toasts__b772bc4f{position:absolute;top:8px;left:8px;z-index:10;transition:transform 400ms ease-in-out}.TopCenterActionItems_module_topCenterActionItems__6bbfa089{position:absolute;top:8px;left:50%;transform:translateX(-50%);z-index:9}.AIWidget_module_aiWidget__f665b717{width:100%;height:100%}.Outro_module_outroWrapper__64bf980e{position:absolute;top:0;left:0;width:100%;height:100%;z-index:8!important}@keyframes OutroContentWrapper_module_fadeIn__06afa88b{0%{opacity:0}100%{opacity:1}}@keyframes LinkOutro_module_slideDown__0f1c39e6{to{transform:translate(0,0);opacity:1}}.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:hover,.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:active{color:var(--color-one-monochrome)}.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:hover::before,.LinkOutro_module_linkWrapper__0f1c39e6 .LinkOutro_module_button__0f1c39e6:active::before{content:&quot;&quot;;background-color:rgba(0,0,0,0.15);position:absolute;top:0;left:0;bottom:0;right:0}.ImageOutro_module_imageOutroLink__7772436e .ImageOutro_module_imageOutro__7772436e:hover{transform:scale(1.1)}.VideosList_module_videoLink__24b2c487:hover,.VideosList_module_videoLink__24b2c487:focus{z-index:1;opacity:1;transform:scale(1.1)}.VideosList_module_videoLink__24b2c487:hover .VideosList_module_videoHeader__24b2c487,.VideosList_module_videoLink__24b2c487:focus .VideosList_module_videoHeader__24b2c487{opacity:1}.VideosList_module_videoLink__24b2c487:active{transform:scale(1.07)}button.FollowButton_module_followButton__7f7b5348:hover{background-color:rgba(127,127,127,0.76)}h1.VideosHeader_module_videosTitle__75827656 a[href]:hover{color:var(--color-two)}a[href].VODButton_module_VODButton__9172ec57:hover{color:var(--color-two-monochrome)!important}.VODOutro_module_VODHeader__4642efe8 a[href]:hover{color:#fff}.Alert_module_close__59e6b5e4:active{transform:translateY(1px)}.PrivateGate_module_login__b6123279.PrivateGate_module_loginButton__b6123279:active,.PrivateGate_module_login__b6123279.PrivateGate_module_loginButton__b6123279:hover{background-color:var(--color-two-opacity-ninety)}input.PasswordGate_module_passwordInput__93d04c19[aria-invalid=true]:focus{outline:2px solid rgb(227,79,79);outline-offset:2px}button.PasswordGate_module_submitPassword__93d04c19:active,button.PasswordGate_module_submitPassword__93d04c19:hover{background-color:var(--color-two-opacity-ninety)}.VideoThumbnail_module_videoThumbnail__836d3344{position:absolute;top:0;left:0;bottom:0;right:0;background-repeat:no-repeat;background-position:50% 50%;transition:opacity 0.25s}.vp-video-wrapper.content-area-sibling-enabled .VideoThumbnail_module_videoThumbnail__836d3344.VideoThumbnail_module_cover__836d3344{background-size:contain}.ContextMenuOption_module_menuItem__36a0b8ce:hover,.ContextMenuOption_module_menuItem__36a0b8ce:active,a.ContextMenuOption_module_menuItem__36a0b8ce:hover,a.ContextMenuOption_module_menuItem__36a0b8ce:active{background:rgba(255,255,255,0.2);color:#fff}.Link_module_link__bdf8051d{position:relative;pointer-events:inherit}.Link_module_link__bdf8051d:hover{color:var(--color-two-complement)}.Link_module_link__bdf8051d:active,.Link_module_link__bdf8051d:hover{cursor:pointer}dialog.ModalMenu_module_menu__4fe0e031{-ms-overflow-style:none;scrollbar-width:none;position:absolute;background-color:rgba(0,0,0,0.8);backdrop-filter:blur(40px);z-index:29;overflow-x:auto;transition:opacity 200ms ease-out;color:#fff;height:100%;width:100%;border:0;margin:0;padding:0;overflow-y:hidden}dialog.ModalMenu_module_menu__4fe0e031::-webkit-scrollbar,dialog.ModalMenu_module_menu__4fe0e031:modal::-webkit-scrollbar{display:none}dialog.ModalMenu_module_menu__4fe0e031 .ModalMenu_module_menuBody__4fe0e031::-webkit-scrollbar,dialog.ModalMenu_module_menu__4fe0e031:modal .ModalMenu_module_menuBody__4fe0e031::-webkit-scrollbar{display:none}dialog.ModalMenu_module_menu__4fe0e031::backdrop,dialog.ModalMenu_module_menu__4fe0e031:-internal-dialog-in-top-layer::backdrop,dialog.ModalMenu_module_menu__4fe0e031:modal::backdrop,dialog.ModalMenu_module_menu__4fe0e031:modal:-internal-dialog-in-top-layer::backdrop{background-color:transparent}.PopoverMenu_module_menu__69cec309::-webkit-scrollbar{display:none}.PopoverMenu_module_menu__69cec309 .PopoverMenu_module_menuBody__69cec309::-webkit-scrollbar{display:none}.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_backButton__aa712564:hover,.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_closeButton__aa712564:hover{background-color:rgba(255,255,255,0.2)}.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_backButtonWrapper__aa712564 .MenuHeader_module_backButton__aa712564:not(:hover),.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_closeButtonWrapper__aa712564 .MenuHeader_module_closeButton__aa712564:not(:hover){background:none}.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_backButtonWrapper__aa712564 .MenuHeader_module_backButton__aa712564:hover:not(:active),.MenuHeader_module_menuHeader__aa712564 .MenuHeader_module_closeButtonWrapper__aa712564 .MenuHeader_module_closeButton__aa712564:hover:not(:active){border:none}.MenuOption_module_option__5ad9c96b.MenuOption_module_styled__5ad9c96b:hover{background-color:rgba(255,255,255,0.2)}.MenuOption_module_option__5ad9c96b.MenuOption_module_styled__5ad9c96b:focus{border-radius:3px}.MenuItem_module_optionButton__2ed021e3:hover{background:rgba(255,255,255,0.2)}.MenuItem_module_optionButton__2ed021e3:focus{outline-offset:-2px}.MenuItem_module_optionButton__2ed021e3:active{outline:none}body:not(.showfocus) .MenuItem_module_optionButton__2ed021e3:focus{outline:none}.MenuOptionListItem_module_listItem__5ba640e5:focus{outline-offset:-2px}.ButtonRow_module_filledButton__45a1df77:hover{background-color:rgba(255,255,255,0.2)}.ButtonRow_module_filledButton__45a1df77.ButtonRow_module_active__45a1df77:hover{background-color:#fff}.ColorSwabs_module_colorSwabs__1985ad2c .ColorSwabs_module_colorSwab__1985ad2c:hover{transform:scale(1.25)}.Tooltip_module_tooltip__b2bc4d16{display:flex;justify-content:center;align-items:center;color:#fff;background:rgba(0,0,0,0.9);font-size:12px;letter-spacing:0;bottom:2.6666666667em;padding:0.6666666667em 1em;height:2.6666666667em;line-height:1.25em;border-radius:4px;transition:opacity 150ms ease-out;position:absolute;font-weight:bold;white-space:pre;transform:translateX(-50%);cursor:default}.Tooltip_module_tooltipContainer__b2bc4d16[data-touch-device=false]:hover .Tooltip_module_tooltip__b2bc4d16{color:#fff}.Tooltip_module_playTooltip__b2bc4d16{margin-bottom:4px}.Text_module_text__73112353{line-height:1.25}.Text_module_bold__73112353{font-weight:bold}.Button_module_button__61be5b9c{position:relative;display:flex;align-items:center;justify-content:center;text-decoration:none;font-weight:600;white-space:nowrap;text-rendering:optimizelegibility;border-radius:0.4em;pointer-events:inherit}.Button_module_buttonChildren__61be5b9c{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Button_module_icon__61be5b9c svg{display:inline-flex;overflow:visible}.Button_module_icon__61be5b9c.Button_module_iconSm__61be5b9c>svg{width:1.8em;height:1.8em}.Button_module_primary__61be5b9c:hover{background-color:var(--color-two);color:var(--color-two-monochrome)}.Button_module_alternative__61be5b9c:hover:not(:active){background:rgba(255,255,255,0.2)}.Button_module_sm__61be5b9c{line-height:3em;height:3.2em;min-width:3.2em}.CopyLinkButton_module_copyLinkButton__fd675415:hover{background-color:rgba(255,255,255,0.2)}input.SearchInput_module_mobileSafari__e264b933:focus,input.SearchInput_module_mobileSafari__e264b933:focus+.SearchInput_module_label__e264b933{font-size:1.6em}.SearchInput_module_inputForm__e264b933[data-disabled=false]:hover{background-color:rgba(255,255,255,0.3)}.SearchInput_module_inputForm__e264b933 .SearchInput_module_searchButton__e264b933:hover:not(:disabled){background-color:rgba(255,255,255,0.3)}.SearchInput_module_inputForm__e264b933 .SearchInput_module_searchButton__e264b933:hover:not(:disabled):active{background-color:rgba(255,255,255,0.3)}.SearchInput_module_inputForm__e264b933 input:focus{outline:none}@keyframes Spinner_module_buffer__795e5e53{100%{transform:translateX(-10px)}}@-moz-keyframes Spinner_module_bufferLeft__795e5e53{0%{left:0}100%{left:-10px}}@keyframes Spinner_module_throb__795e5e53{0%,100%{background-color:#555}50%{background-color:#444}}@keyframes Spinner_module_wiggle__795e5e53{0%{transform:translateY(10px)}20%{transform:translateY(0)}40%,80%{transform:translateX(8px)}60%{transform:translateX(-8px)}100%{transform:translateX(0)}}@keyframes Spinner_module_pulse__795e5e53{50%{transform:scale(0.9)}}@keyframes Spinner_module_dash__795e5e53{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-135px}}@keyframes Spinner_module_rotate__795e5e53{100%{transform:rotate(360deg)}}@keyframes Spinner_module_scaleAnimation__795e5e53{0%{transform:scale(0.9,0.9)}100%{transform:scale(1,1)}}.Spinner_module_spinner__795e5e53{position:absolute;top:50%;left:50%;background:transparent;transform:translate(-50%,-50%);transition:opacity 0.1s,transform 0.25s cubic-bezier(0.17,0.88,0.32,1.28)}.Spinner_module_spinner__795e5e53 circle{background:transparent}.Spinner_module_spinner__795e5e53 [data-spinner-trace=true]{stroke-opacity:0.2}.Spinner_module_spinner__795e5e53 [data-spinner-circle=true]{transform-origin:50% 50%;stroke-linecap:round;stroke-dasharray:200;stroke-dashoffset:200;animation:Spinner_module_rotate__795e5e53 2s linear 0.25s infinite,Spinner_module_dash__795e5e53 1.5s ease-in-out 0.25s infinite}.Spinner_module_lg__795e5e53{max-width:120px;width:18%}.Spinner_module_lg__795e5e53 circle{stroke-width:2px}.Switch_module_switch__c1fb02cb:hover{background-color:rgba(255,255,255,0.2)}.Switch_module_switch__c1fb02cb:focus{border-radius:3px;outline-offset:-2px}.CaptionsRenderer_module_captions__04afad3c{text-align:center;position:absolute;z-index:6;left:0;right:0;user-select:text}.ToastBase_module_toast__211c883d{background:rgba(0,0,0,0.9);align-items:center;border-radius:4px;padding:4px;max-width:calc(100% - 16px)}.ToastButton_module_toastButton__609a14eb:active{background:rgba(255,255,255,0.2)}.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:active,.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:hover{background:var(--color-two)}.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:active span,.ToastButton_module_toastButton__609a14eb.ToastButton_module_fullToast__609a14eb:hover span{color:var(--color-two-monochrome)}p.shared_module_shareFootnote__360a097f a:hover{color:#00adef}.SocialShareLink_module_shareButton__cb9db123:hover,.SocialShareLink_module_shareButton__cb9db123:active{background-color:rgba(0,0,0,0.15)}.SocialShareLink_module_shareButton__cb9db123:focus{outline-color:#00adef}.SocialShare_module_socialShareContainer__241f1ad7 a.SocialShare_module_clipUrl__241f1ad7:hover{color:#00adef}.SegmentShareInputs_module_customCheckbox__d711f219::after{content:&quot;&quot;;position:absolute;display:none;left:34%;top:14%;width:6px;height:12px;border:solid #000;border-width:0 2px 2px 0;border-bottom-right-radius:1px;transform:rotate(45deg)}.SegmentShareInputs_module_customCheckbox__d711f219.SegmentShareInputs_module_checked__d711f219::after{display:block}.SegmentShareInputs_module_inputWrapper__d711f219:focus-within{outline:2px solid #00adef;outline-offset:2px}input.TimeInput_module_segmentShareInput__87e7fee4:focus{outline:none}input.TimeInput_module_segmentShareInput__87e7fee4::placeholder{color:rgba(255,255,255,0.6);opacity:1;padding-top:2px}.TimeInput_module_segmentShareInput__87e7fee4:focus+.TimeInput_module_floatingLabel__87e7fee4{color:#fff}.Error_module_buttonsWrapper__b6661b70 .Error_module_button__b6661b70:hover:not(:active){border:none}.BaseError_module_error__896e096f a:hover{color:#ff5210}.CloseOverlayButton_module_closeOverlayButton__74aa447b{position:absolute;right:0;opacity:0.7;background:none}.CloseOverlayButton_module_closeOverlayButton__74aa447b:hover{opacity:1}.CloseOverlayButton_module_closeOverlayButton__74aa447b svg{width:40px;height:40px;margin:8px}.OverlayBase_module_overlayCell__42ef25fe{width:100%;height:100%;display:flex;flex-flow:column nowrap;align-items:center;justify-content:center}.OverlayBase_module_overlayWrapper__42ef25fe{position:absolute;top:0;left:0;bottom:0;right:0;transition:background-color 200ms;background-position:center center;background-size:cover;text-align:center;background-image:linear-gradient(to bottom,rgba(20,21,22,0.3),#141516);z-index:31;user-select:text}.OverlayBase_module_overlayWrapper__42ef25fe.OverlayBase_module_hidden__42ef25fe *{pointer-events:none}.OverlayBase_module_overlayWrapper__42ef25fe .OverlayBase_module_overlayNav__42ef25fe{opacity:1;display:block;position:absolute;top:0;left:0;width:100%;z-index:32}.OverlayBase_module_overlay__42ef25fe{position:absolute;top:0;left:0;bottom:0;right:0;display:flex;align-items:center;justify-content:center;flex-direction:column;transform:scale(0.9,0.9);transition:transform 105ms,opacity 105ms}:root{--clock-rotate-direction:1}@keyframes AnimatedClock_module_hourHand__8976d762{to{rotate:calc(45deg*var(--clock-rotate-direction))}}@keyframes AnimatedClock_module_minuteHand__8976d762{to{rotate:calc(360deg*var(--clock-rotate-direction))}}.ContentAreaCloseButton_module_closeContentAreaButton__8960d891:hover,.ContentAreaCloseButton_module_closeContentAreaButton__8960d891:focus,.ContentAreaCloseButton_module_closeContentAreaButton__8960d891:active{background-color:transparent!important}.showfocus .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .shared_module_focusableCircle__29a0c6d5:focus::after,.showfocus .shared_module_focusableMarker__29a0c6d5:focus::after{outline:none}.showfocus .shared_module_focusable__29a0c6d5:focus::after,.showfocus .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .shared_module_focusableCircle__29a0c6d5:focus::after,.showfocus .shared_module_focusableMarker__29a0c6d5:focus::after{content:&quot;&quot;;pointer-events:none;position:absolute;border:2px solid #000;width:calc(100% + 8px);height:calc(100% + 8px);top:-4px;left:-4px;border-radius:8px;z-index:1;outline:2px solid #00adef;outline-offset:-4px}.showfocus .shared_module_focusableMarker__29a0c6d5:focus::after{width:calc(100% + 12px);height:calc(100% + 12px);top:-6px;left:-6px;border-radius:12px}.showfocus .shared_module_focusableCircle__29a0c6d5:focus::after{border-radius:50%}.showfocus .shared_module_focusableButton__29a0c6d5:focus::after{border-radius:12px}.showfocus .player.app-xxs .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .player.app-xs .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .player.app-tiny .shared_module_focusableButton__29a0c6d5:focus::after,.showfocus .player.app-mini .shared_module_focusableButton__29a0c6d5:focus::after{border-radius:8px}</style><meta name=referrer content=no-referrer><style>.sf-hidden{display:none!important}</style><meta http-equiv=content-security-policy content=&quot;default-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'unsafe-inline'; media-src 'self' data:; script-src 'unsafe-inline' data:; object-src 'self' data:; frame-src 'self' data:;&quot;></head>\n<body>\n<div class=&quot;vp-placeholder vp-placeholder-fadeout&quot; style=visibility:visible>\n <style class=sf-hidden>.vp-placeholder,.vp-placeholder-thumb,.vp-placeholder-thumb::before,.vp-placeholder-thumb::after{position:absolute;top:0;bottom:0;left:0;right:0}.vp-placeholder{width:100%;max-height:100%;height:calc(1080/1920*100vw);max-width:calc(1920/1080*100vh);margin:auto}.vp-placeholder-carousel{background-color:#000;position:absolute;left:0;right:0;bottom:-60px;height:60px}</style>\n \n \n <style class=sf-hidden>.vp-placeholder-thumb{overflow:hidden;width:100%;max-height:100%;margin:auto}.vp-placeholder-thumb::before,.vp-placeholder-thumb::after{content:&quot;&quot;;display:block;filter:blur(7px);margin:0;background:url(data:image/avif;base64,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)50% 50%/contain no-repeat}.vp-placeholder-thumb::before{margin:-30px}</style>\n \n <div class=vp-placeholder-thumb></div>\n <div class=&quot;vp-placeholder-carousel sf-hidden&quot;></div>\n \n \n</div>\n<div id=player class=&quot;player player-20a84f30-f222-4302-bf7a-906e52dc048d js-player-fullscreen with-fullscreen with-sticky-custom-logo player-normal player-xs app-xs right-content-area-supported&quot;>\n <div class=vp-content-area-background aria-hidden=true><div class=ContentAreaBackground_module_imgContainer__9da212ea style=overflow:hidden;opacity:0;pointer-events:none><img alt=&quot;video thumbnail&quot; class=&quot;ContentAreaBackground_module_img__9da212ea ContentAreaBackground_module_loaded__9da212ea&quot; src=&quot;data:image/avif;base64,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&quot;></div></div>\n <div class=&quot;vp-video-wrapper transparent content-area-sibling-enabled&quot; data-content-area-sibling-eligible aria-hidden=true>\n <div class=vp-video>\n <div class=&quot;vp-telecine invisible&quot;><video preload=none tabindex=-1 playsinline poster=&quot;data:image/png;base64,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&quot;></video></div>\n </div>\n <div class=&quot;vp-preview VideoThumbnail_module_videoThumbnail__836d3344 VideoThumbnail_module_cover__836d3344&quot; data-thumb=&quot;https://i.vimeocdn.com/video/680918441-b17f6b5d3cf508f4554b9a176faacbf150df4e784b73dc1e905d32a53195b096-d?mw=500&amp;amp;mh=280&quot; style=&quot;background-image:url(data:image/avif;base64,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)&quot;></div></div>\n <div class=&quot;vp-target content-area-sibling-enabled&quot; data-content-area-sibling-eligible></div>\n <div class=&quot;vp-player-ui-container content-area-sibling-enabled&quot; data-content-area-sibling-eligible><style data-player-colors=20a84f30-f222-4302-bf7a-906e52dc048d class=sf-hidden>.player-20a84f30-f222-4302-bf7a-906e52dc048d{--color-one:#000000ff;--color-two:#00adefff;--color-three:#ffffffff;--color-four:#000000ff;--color-one-monochrome:#ffffffff;--color-two-monochrome:#000000ff;--color-one-opacity-ninety:#000000e6;--color-two-opacity-ninety:#00adefe6;--color-three-opacity-twenty:#ffffff33;--color-one-monochrome-opacity-twenty:#ffffff33;--color-two-monochrome-opacity-twenty:#00000033;--color-one-monochrome-opacity-sixty:#ffffff99;--color-two-complement:#ff5210ff;--color-one-monochrome-opacity-twenty-eighty:#ffffff33;--color-two-monochrome-opacity-twenty-eighty:#000000cc}.player-20a84f30-f222-4302-bf7a-906e52dc048d{background-color:transparent!important}.player-20a84f30-f222-4302-bf7a-906e52dc048d .vp-video-wrapper{background-color:transparent!important}</style><div aria-hidden=true class=&quot;NudgeNotification_module_nudge__5db47681 NudgeNotification_module_nudgeCenter__5db47681&quot; style=overflow:hidden;opacity:0;pointer-events:none><div class=NudgeNotification_module_nudgeInfo__5db47681><div class=NudgeNotification_module_nudgeIcon__5db47681><svg viewBox=&quot;0 0 64 64&quot;><path fill-rule=evenodd clip-rule=evenodd d=&quot;M12.4506 12.0055L32.4643 30.0179C33.6413 31.0772 33.6413 32.9228 32.4643 33.9821L12.4506 51.9945C10.7345 53.5389 8 52.3211 8 50.0124V13.9876C8 11.6789 10.7345 10.4611 12.4506 12.0055ZM39.1172 12.0055L59.131 30.0179C60.308 31.0772 60.308 32.9228 59.131 33.9821L39.1172 51.9945C37.4012 53.5389 34.6667 52.3211 34.6667 50.0124V13.9876C34.6667 11.6789 37.4012 10.4611 39.1172 12.0055Z&quot;></path></svg></div><div class=NudgeNotification_module_nudgeTime__5db47681></div></div></div><div class=PipOverlay_module_overlay__82a6be37 aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none><svg viewBox=&quot;0 0 16 12&quot;><polygon class=fill points=&quot;6 8 1 8 1 1 14 1 14 6 15 6 15 0 0 0 0 9 6 9 6 8&quot;></polygon><rect class=fill x=7 y=7 width=9 height=5></rect><polyline class=fill transform=&quot;translate(4, 4) rotate(180) translate(-4, -4)&quot; points=&quot;5.33 2 5.33 3 3.67 3 5.67 5 5 5.67 3 3.67 3 5.33 2 5.33 2 2&quot;></polyline></svg><div class=PipOverlay_module_title__82a6be37>Playing in picture-in-picture</div></div><span id=new-window hidden class=sf-hidden>(opens a new window)</span></div>\n <div class=&quot;vp-player-ui-overlays content-area-sibling-enabled&quot; data-content-area-sibling-eligible><div role=status class=&quot;ToastBase_module_toast__211c883d TopCenterActionItems_module_topCenterActionItems__6bbfa089&quot; style=overflow:hidden;opacity:0;pointer-events:none;display:none></div><div role=status class=&quot;ToastBase_module_toast__211c883d Toasts_module_toasts__b772bc4f&quot; style=&quot;overflow:hidden;opacity:0;pointer-events:none;transform:translateY(calc(-100% - 16px));display:none&quot;></div><div class=&quot;vp-title Title_module_title__9dc182ba&quot; role=presentation><header class=Title_module_header__9dc182ba role=presentation><div class=Title_module_portrait__9dc182ba><a href=&quot;https://vimeo.com/user5722801?fl=pl&amp;amp;fe=po&quot; class=&quot;Link_module_link__bdf8051d Title_module_portraitLink__9dc182ba shared_module_focusableCircle__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener variant=minimal tabindex=0><img src=&quot;data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAkoAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAADwAAAA8AAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQANAAAAABNjb2xybmNseAABAA0ABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAlJtZGF0EgAKCRgVe+2CAhoNSDK6BETwAMMMMUDd1Khg1unqRnGTMVrN2rqSVGvcLu7vYn//2jE8BKkb0S/urLB8GJjpqG4fWQZs1MdyQn+S20fOAYBDJryjLEG/0D+0nQItdVckXw4QK+xYkncXyqjHHn0tnefqtCwLGe2Dxo9LTdDXHFZMSHDqZDaXQKfQBP+pWxSnS1+rDUB7N5++IBZndamuqq+UzFAEvNrJ+Wl31NPMjuD27d+zRZwEkyQAyRaCbdl0+PLL/MRXjQPG5TW3D9kPcnSmvw/fbRu6hNWeIl1aLg7F6paM2T+tsB9KneMU6Bj44QFFkr6aRwvn5sFQ7qeVidMl+XMVyQ+NQ+VtsoM9Sk16u9HWDoMCVFNExyN5mwxxotAvsQEJKSWh5dD+4InbAdMo9/SxcQsnT2iTMN1SSUl86ITUhjPkwL6N9AVr8++JooJqcoG6W++o/nZA+OrRIukMz64AcuagVeRUH0QbO8IqpEipg9KzXgwjujI5n5m4/tJcvqdACDUZGLW5XZTBDKDT4YCNlrpBjJrAIQMQyE8dg8rwbRJqOLNsz0HGNAaVSSASfQuChWerHt3P+2htvIVgNKlPjEaAwgyDEZjJZh/GdSEc9IWFOGg18d3tWRVY3fJ7fkXhfP17hB2S8g4hUCJ5A05r7jr8HyZF//+tnI7hJK6huafRGn/geGKFmaXjhfp3uI7BaLcO6790yPtQ0dEyz7sNZccFylcph29iL14jbpm+UdFq/t7B0yO1rfXhr+UqbDC4drWVMA==&quot; alt=&quot;Link to video owner's profile&quot; width=60 height=60 data-trackclick=video-portrait></a></div><div class=Title_module_headers__9dc182ba><div class=Title_module_titleWrapper__9dc182ba><a href=&quot;https://vimeo.com/253905163?fl=pl&amp;amp;fe=ti&quot; class=&quot;Link_module_link__bdf8051d Title_module_titleLink__9dc182ba shared_module_focusable__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener data-track-click=video-title variant=minimal tabindex=0 aria-labelledby=title-text></a><div class=Title_module_textAndTagsWrapper__9dc182ba><span class=&quot;Text_module_text__73112353 Text_module_sm__73112353 Text_module_bold__73112353 Title_module_titleText__9dc182ba&quot; id=title-text aria-hidden=false>Big Buck Bunny</span><div class=TitleTags_module_tagWrapper__20a17f3b></div></div></div><a href=&quot;https://vimeo.com/user5722801?fl=pl&amp;amp;fe=by&quot; class=&quot;Link_module_link__bdf8051d Title_module_subtitle__9dc182ba shared_module_focusable__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener variant=minimal tabindex=0><span class=&quot;Text_module_text__73112353 Text_module_sm__73112353 Text_module_bold__73112353&quot; aria-hidden=false>Jason Chen</span></a></div></header></div><div class=&quot;vp-sidedock SideDock_module_root__eeb5e08f SideDock_module_visible__eeb5e08f&quot; data-sidedock=true><div class=SideDock_module_sidedockInner__eeb5e08f data-sidedock-inner=true style=opacity:1><div class=LabeledButton_module_box__a4450693><label class=LabeledButton_module_labeledButton__a4450693 role=presentation aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none><span>More options</span></label><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_primary__61be5b9c Button_module_sm__61be5b9c Button_module_icon__61be5b9c Button_module_iconSm__61be5b9c exclude-global-button-styles&quot; type=button tabindex=0 aria-label=&quot;More options&quot; aria-haspopup=dialog aria-expanded=false><svg width=4 height=19 viewBox=&quot;0 0 4 19&quot; fill=none xmlns=http://www.w3.org/2000/svg focusable=false><path d=&quot;M2 4.5C2.39556 4.5 2.78224 4.3827 3.11114 4.16294C3.44004 3.94318 3.69639 3.63082 3.84776 3.26537C3.99914 2.89992 4.03874 2.49778 3.96157 2.10982C3.8844 1.72186 3.69392 1.36549 3.41421 1.08579C3.13451 0.806082 2.77814 0.615601 2.39018 0.53843C2.00222 0.46126 1.60009 0.500867 1.23463 0.652242C0.869182 0.803617 0.556825 1.05996 0.337062 1.38886C0.117299 1.71776 1.07779e-06 2.10444 1.07779e-06 2.5C1.07779e-06 3.03043 0.210715 3.53914 0.585788 3.91421C0.960861 4.28929 1.46957 4.5 2 4.5ZM2 14.5C1.60444 14.5 1.21776 14.6173 0.888861 14.8371C0.559963 15.0568 0.303617 15.3692 0.152242 15.7346C0.000866562 16.1001 -0.0387401 16.5022 0.0384303 16.8902C0.115601 17.2781 0.306083 17.6345 0.585788 17.9142C0.865493 18.1939 1.22186 18.3844 1.60982 18.4616C1.99778 18.5387 2.39992 18.4991 2.76537 18.3478C3.13082 18.1964 3.44318 17.94 3.66294 17.6111C3.8827 17.2822 4 16.8956 4 16.5C4 15.9696 3.78929 15.4609 3.41421 15.0858C3.03914 14.7107 2.53043 14.5 2 14.5ZM2 7.5C1.60444 7.5 1.21776 7.6173 0.888861 7.83706C0.559963 8.05682 0.303617 8.36918 0.152242 8.73463C0.000866562 9.10009 -0.0387401 9.50222 0.0384303 9.89018C0.115601 10.2781 0.306083 10.6345 0.585788 10.9142C0.865493 11.1939 1.22186 11.3844 1.60982 11.4616C1.99778 11.5387 2.39992 11.4991 2.76537 11.3478C3.13082 11.1964 3.44318 10.94 3.66294 10.6111C3.8827 10.2822 4 9.89556 4 9.5C4 8.96957 3.78929 8.46086 3.41421 8.08579C3.03914 7.71071 2.53043 7.5 2 7.5Z&quot;></path></svg></button></div></div></div><dialog class=&quot;vp-menu ModalMenu_module_menu__4fe0e031 SideDockMenu_module_menu__3e8760ae&quot; data-menu=sidedock aria-modal=true style=overflow:hidden;opacity:0;pointer-events:none;display:none;max-width:500px;max-height:280px;top:50%;left:50%;transform:translate(-50%,-50%)></dialog><div class=&quot;OverlayBase_module_overlayWrapper__42ef25fe OverlayBase_module_hidden__42ef25fe&quot; role=dialog aria-modal=true aria-labelledby=overlay-labelledby data-content-area-sibling-eligible=true data-overlay=true style=overflow:hidden;opacity:0;pointer-events:none;display:block;visibility:hidden><div class=OverlayBase_module_overlayCell__42ef25fe><div class=OverlayBase_module_overlay__42ef25fe></div></div><nav class=OverlayBase_module_overlayNav__42ef25fe><button class=&quot;CloseOverlayButton_module_closeOverlayButton__74aa447b shared_module_focusableButton__29a0c6d5&quot; aria-label=&quot;Close overlay&quot; data-close-overlay=true><svg viewBox=&quot;0 0 20 20&quot;><path d=&quot;M11.06 10l4.597-4.596a.749.749 0 1 0-1.061-1.06L10 8.938 5.404 4.343a.749.749 0 1 0-1.06 1.061L8.938 10l-4.596 4.596a.749.749 0 1 0 1.061 1.06L10 11.062l4.596 4.596a.749.749 0 1 0 1.06-1.061L11.062 10z&quot; fill=#fff fill-rule=evenodd></path></svg></button></nav></div><div class=ControlBar_module_controlBarWrapper__33f2e772><div class=PlayButton_module_playButtonWrapper__b9d5abe0><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 PlayButton_module_playButton__b9d5abe0&quot; type=button tabindex=0 data-play-button=true aria-labelledby=play-button-tooltip data-touch-device=false><svg width=24 height=24 viewBox=&quot;0 0 24 24&quot; xmlns=http://www.w3.org/2000/svg data-play-icon=true class=PlayButton_module_playIcon__b9d5abe0><path d=&quot;M19 12C19 12.3557 18.8111 12.6846 18.5039 12.8638L6.50387 19.8638C6.19458 20.0442 5.81243 20.0455 5.50194 19.8671C5.19145 19.6888 5 19.3581 5 19L5 5C5 4.64193 5.19145 4.3112 5.50194 4.13286C5.81243 3.95452 6.19458 3.9558 6.50387 4.13622L18.5039 11.1362C18.8111 11.3154 19 11.6443 19 12Z&quot; class=fill></path></svg><span class=Button_module_buttonChildren__61be5b9c><span id=play-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 Tooltip_module_playTooltip__b2bc4d16&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Play</span></span></button></div><div class=&quot;vp-controls ControlBar_module_controls__33f2e772&quot; data-control-bar=true><div class=ControlBar_module_progressBarAndButtons__33f2e772><div class=ProgressBar_module_progressBarContainer__20d7fbb1><div class=&quot;vp-progress ProgressBar_module_progressBar__20d7fbb1&quot; data-progress-bar=true role=presentation><div class=&quot;FocusTarget_module_focusTarget__abd564d5 shared_module_focusable__29a0c6d5&quot; role=slider aria-label=&quot;Progress Bar&quot; aria-valuemin=0 aria-valuemax=596 aria-valuenow=0 aria-valuetext=&quot;00:00 of 09:56&quot; tabindex=0 data-progress-bar-focus-target=true></div><div class=ChapterSegments_module_chapterSegmentsWrapper__426e8ff1><div class=ChapterSegment_module_chapterWrapper__33ca9410 style=&quot;width:calc(100% + 0px)&quot;><div class=ChapterSegment_module_chapter__33ca9410><div class=&quot;LoadedBar_module_loaded__3d837846 ChapterSegment_module_segmentBar__33ca9410&quot; data-progress-bar-loaded=true style=width:0%></div><div class=&quot;PlayedBar_module_played__38fb8087 ChapterSegment_module_segmentBar__33ca9410&quot; data-progress-bar-played=true style=width:0%></div></div></div></div><div class=ThumbnailPreview_module_thumbnailPreview__0cb46f3c role=presentation aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:0%;max-width:120px><div class=ThumbnailPreview_module_thumbnailPreviewText__0cb46f3c><span class=ThumbnailPreview_module_time__0cb46f3c>00:00</span></div></div><div class=Timecode_module_timecodeContainer__0e71c943 role=presentation aria-hidden=true data-progress-bar-timecode-container=true style=left:0%><div class=Timecode_module_timecode__0e71c943 data-progress-bar-timecode=true>09:56</div></div></div></div><div class=ControlBarButtonsAndMenus_module_wrapper__768465f8><div class=ControlBarButtonsAndMenus_module_collapsibleWrapper__768465f8 role=presentation tabindex=-1 style=max-width:124px><div class=ControlBarButtonsAndMenus_module_collapsibleContent__768465f8 role=none><div class=VolumeControl_module_volumeControlContainer__02ffae11 data-volume-control-container=true><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles ControlBarButton_module_controlBarButton__5e0eae92&quot; type=button tabindex=0 aria-label=Mute aria-keyshortcuts=m data-volume-button=true><svg viewBox=&quot;0 0 24 24&quot; data-volume-icon=true><path fill-rule=evenodd clip-rule=evenodd d=&quot;M20 12C20 15.7277 17.4505 18.8599 14 19.7479V21.7999C18.5645 20.8734 22 16.8379 22 12C22 7.16206 18.5645 3.12655 14 2.20001V4.25201C17.4505 5.1401 20 8.2723 20 12ZM18 12C18 9.38754 16.3304 7.16506 14 6.34139V8.53511C15.1956 9.22672 16 10.5194 16 12C16 13.4805 15.1956 14.7732 14 15.4648V17.6586C16.3304 16.8349 18 14.6124 18 12ZM6.58579 8.00396H4C2.89543 8.00396 2 8.89939 2 10.004V14.004C2 15.1085 2.89543 16.004 4 16.004H6.58579L10.2929 20.7111C10.9229 21.341 12 20.8949 12 20.004V4.00396C12 3.11305 10.9229 2.66689 10.2929 3.29685L6.58579 8.00396Z&quot;></path></svg></button><div role=slider class=&quot;VolumeControl_module_volumeControl__02ffae11 volume shared_module_focusable__29a0c6d5&quot; tabindex=0 aria-label=&quot;Volume (use up/down arrow keys to change)&quot; aria-valuenow=100 aria-valuetext=&quot;100% volume&quot; aria-valuemin=0 aria-valuemax=100 data-volume-control=true style=overflow:hidden;opacity:0;pointer-events:none><div class=VolumeControl_module_volumeBar__02ffae11><div class=VolumeControl_module_volumeBarFill__02ffae11 style=height:100%></div><div class=VolumeControl_module_sliderHandle__02ffae11 style=bottom:100%></div></div></div></div><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 ControlBarButton_module_controlBarButton__5e0eae92 vp-prefs PrefsButton_module_prefsButton__c0bd4f7c&quot; type=button tabindex=0 id=prefs-control-bar-button aria-expanded=false aria-haspopup=dialog data-prefs-button=true aria-labelledby=prefs-control-bar-button-tooltip data-touch-device=false><svg width=20 height=20 viewBox=&quot;0 0 20 20&quot; fill=none xmlns=http://www.w3.org/2000/svg class=PrefsButton_module_gearIcon__c0bd4f7c><path fill-rule=evenodd clip-rule=evenodd d=&quot;M9.16668 1.66699C8.2462 1.66699 7.50001 2.41318 7.50001 3.33366V4.72835C7.21484 4.86382 6.94241 5.02175 6.68499 5.19984L5.46953 4.4981C4.68103 4.04285 3.66009 4.31415 3.20034 5.11047L2.36526 6.55686C1.90707 7.35046 2.17605 8.3701 2.96953 8.82822L4.18535 9.53017C4.17298 9.68526 4.16668 9.84206 4.16668 10.0003C4.16668 10.1586 4.17298 10.3154 4.18535 10.4705L2.96953 11.1724C2.17605 11.6306 1.90707 12.6502 2.36526 13.4438L3.20034 14.8902C3.66009 15.6865 4.68103 15.9578 5.46953 15.5026L6.685 14.8008C6.94241 14.9789 7.21484 15.1368 7.50001 15.2723V16.667C7.50001 17.5875 8.2462 18.3337 9.16668 18.3337H10.8333C11.7538 18.3337 12.5 17.5875 12.5 16.667V15.2723C12.7851 15.1369 13.0574 14.979 13.3147 14.801L14.5298 15.5026C15.3183 15.9578 16.3393 15.6865 16.799 14.8902L17.6341 13.4438C18.0923 12.6502 17.8233 11.6306 17.0298 11.1724L15.8146 10.4708C15.827 10.3156 15.8333 10.1587 15.8333 10.0003C15.8333 9.84193 15.827 9.68501 15.8146 9.52981L17.0298 8.82822C17.8233 8.3701 18.0923 7.35046 17.6341 6.55686L16.799 5.11047C16.3393 4.31415 15.3183 4.04285 14.5298 4.4981L13.3147 5.19963C13.0574 5.02162 12.7851 4.86377 12.5 4.72835V3.33366C12.5 2.41318 11.7538 1.66699 10.8333 1.66699H9.16668ZM12.5 10.0003C12.5 11.381 11.3807 12.5003 10 12.5003C8.6193 12.5003 7.50001 11.381 7.50001 10.0003C7.50001 8.61961 8.6193 7.50033 10 7.50033C11.3807 7.50033 12.5 8.61961 12.5 10.0003Z&quot;></path></svg><span class=&quot;Button_module_buttonChildren__61be5b9c ControlBarButton_module_controlBarButtonChildren__5e0eae92&quot;><span id=prefs-control-bar-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 ControlBarButton_module_controlBarButtonTooltip__5e0eae92&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Settings</span></span></button><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 ControlBarButton_module_controlBarButton__5e0eae92 pip&quot; type=button tabindex=0 id=pip-control-bar-button data-pip-button=true aria-labelledby=pip-control-bar-button-tooltip data-touch-device=false><svg width=20 height=20 viewBox=&quot;0 0 20 20&quot; fill=none xmlns=http://www.w3.org/2000/svg data-enter-pip=true><path fill-rule=evenodd clip-rule=evenodd d=&quot;M3.33329 4.99992H16.6666V9.99992H18.3333V4.99992C18.3333 4.07944 17.5871 3.33325 16.6666 3.33325H3.33329C2.41282 3.33325 1.66663 4.07944 1.66663 4.99992V13.3333C1.66663 14.2537 2.41282 14.9999 3.33329 14.9999H8.33329V13.3333H3.33329V4.99992ZM9.99996 12.6666C9.99996 12.1143 10.4477 11.6666 11 11.6666H17.3333C17.8856 11.6666 18.3333 12.1143 18.3333 12.6666V17.3333C18.3333 17.8855 17.8856 18.3333 17.3333 18.3333H11C10.4477 18.3333 9.99996 17.8855 9.99996 17.3333V12.6666ZM7.91663 7.60408V8.59492L6.17079 6.84909C6.05829 6.73659 5.90163 6.66659 5.72913 6.66659C5.38413 6.66659 5.10413 6.94575 5.10413 7.29159C5.10413 7.46409 5.17413 7.61992 5.28746 7.73325L7.03246 9.47909H6.04163C5.69663 9.47909 5.41663 9.75825 5.41663 10.1041C5.41663 10.4491 5.69663 10.7291 6.04163 10.7291H8.54163C8.88663 10.7291 9.16663 10.4491 9.16663 10.1041V7.60408C9.16663 7.25825 8.88663 6.97909 8.54163 6.97909C8.19663 6.97909 7.91663 7.25825 7.91663 7.60408Z&quot; fill=white></path></svg><span class=&quot;Button_module_buttonChildren__61be5b9c ControlBarButton_module_controlBarButtonChildren__5e0eae92&quot;><span id=pip-control-bar-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 ControlBarButton_module_controlBarButtonTooltip__5e0eae92&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Picture-in-Picture</span></span></button><button class=&quot;Button_module_button__61be5b9c shared_module_focusable__29a0c6d5 Button_module_icon__61be5b9c exclude-global-button-styles Tooltip_module_tooltipContainer__b2bc4d16 ControlBarButton_module_controlBarButton__5e0eae92 fullscreen FullscreenButton_module_fullscreen__5b68e32b&quot; type=button tabindex=0 id=fullscreen-control-bar-button data-fullscreen-button=true aria-labelledby=fullscreen-control-bar-button-tooltip data-touch-device=false><svg class=enter-fullscreen-icon width=24 height=24 viewBox=&quot;0 0 24 24&quot; xmlns=http://www.w3.org/2000/svg data-enter-fullscreen=true><path fill-rule=evenodd clip-rule=evenodd d=&quot;M16 5L17.5858 5L14.2929 8.29292C13.9024 8.68345 13.9024 9.31661 14.2929 9.70714C14.6834 10.0977 15.3166 10.0977 15.7071 9.70714L19 6.41426V8C19 8.55228 19.4477 9 20 9C20.5523 9 21 8.55228 21 8V4C21 3.73478 20.8946 3.48043 20.7071 3.29289C20.5196 3.10536 20.2652 3 20 3H16C15.4477 3 15 3.44772 15 4C15 4.55228 15.4477 5 16 5ZM5 8.00002V6.4142L8.29292 9.70712C8.68345 10.0976 9.31661 10.0976 9.70714 9.70712C10.0977 9.3166 10.0977 8.68343 9.70714 8.29291L6.41424 5.00001L8 5.00002C8.55228 5.00002 9 4.5523 9 4.00002C9 3.44773 8.55228 3.00002 8 3.00002H4C3.73478 3.00002 3.48043 3.10537 3.29289 3.29291C3.10536 3.48044 3 3.7348 3 4.00002V8.00002C3 8.5523 3.44772 9.00001 4 9.00001C4.55228 9.00001 5 8.5523 5 8.00002ZM8.00002 19H6.4142L9.70712 15.7071C10.0976 15.3166 10.0976 14.6834 9.70712 14.2929C9.3166 13.9024 8.68343 13.9024 8.29291 14.2929L5.00001 17.5858V16C5.00001 15.4477 4.5523 15 4.00001 15C3.44773 15 3.00002 15.4477 3.00002 16L3.00002 20C3.00002 20.2652 3.10537 20.5196 3.29291 20.7071C3.48044 20.8947 3.7348 21 4.00002 21H8.00002C8.5523 21 9.00001 20.5523 9.00001 20C9.00001 19.4477 8.5523 19 8.00002 19ZM19 17.5858V16C19 15.4477 19.4477 15 20 15C20.5523 15 21 15.4477 21 16V20C21 20.2652 20.8946 20.5196 20.7071 20.7071C20.5196 20.8947 20.2652 21 20 21H16C15.4477 21 15 20.5523 15 20C15 19.4477 15.4477 19 16 19H17.5858L14.2929 15.7071C13.9023 15.3166 13.9023 14.6834 14.2929 14.2929C14.6834 13.9024 15.3166 13.9024 15.7071 14.2929L19 17.5858Z&quot;></path></svg><span class=&quot;Button_module_buttonChildren__61be5b9c ControlBarButton_module_controlBarButtonChildren__5e0eae92&quot;><span id=fullscreen-control-bar-button-tooltip class=&quot;Tooltip_module_tooltip__b2bc4d16 ControlBarButton_module_controlBarButtonTooltip__5e0eae92&quot; aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;left:50%;right:auto>Fullscreen</span></span></button></div></div><a href=&quot;https://vimeo.com/253905163?fl=pl&amp;amp;fe=vl&quot; class=&quot;Link_module_link__bdf8051d VimeoLogoLink_module_vimeoLogo__970f58c4 shared_module_focusable__29a0c6d5&quot; aria-describedby=new-window target=_blank rel=noopener data-vimeo-logo=true aria-label=&quot;Watch on Vimeo&quot;><svg viewBox=&quot;0 0 20 20&quot; xmlns=http://www.w3.org/2000/svg aria-hidden=true data-vimeo-small-icon=true><path fill=#fff fill-rule=evenodd clip-rule=evenodd d=&quot;M18.7781 6.00913C18.6943 7.81161 17.4171 10.2795 14.9465 13.4122C12.3922 16.6841 10.231 18.3203 8.46324 18.3203C7.36838 18.3203 6.44133 17.3242 5.68438 15.331C5.17905 13.5043 4.67352 11.6776 4.168 9.85093C3.60591 7.8589 3.00305 6.86167 2.35829 6.86167C2.21771 6.86167 1.7259 7.1533 0.88381 7.73392L0 6.61152C0.927048 5.80871 1.84171 5.00589 2.74171 4.20176C3.9781 3.14879 4.90648 2.59501 5.52533 2.53908C6.98743 2.40059 7.88743 3.38562 8.22533 5.49419C8.5901 7.76902 8.84286 9.18398 8.98457 9.73796C9.40629 11.6253 9.86971 12.5681 10.3766 12.5681C10.7697 12.5681 11.3602 11.9557 12.148 10.7316C12.9345 9.50713 13.3562 8.57558 13.413 7.93547C13.5251 6.87875 13.1034 6.34917 12.148 6.34917C11.6981 6.34917 11.2345 6.45126 10.7575 6.65281C11.6808 3.67218 13.445 2.22456 16.0486 2.30695C17.9792 2.36287 18.8891 3.59693 18.7781 6.00913Z&quot;></path></svg></a></div></div></div></div><dialog class=&quot;vp-menu ModalMenu_module_menu__4fe0e031&quot; data-menu=prefs aria-modal=true style=overflow:hidden;opacity:0;pointer-events:none;display:none;max-width:500px;max-height:280px;top:50%;left:50%;transform:translate(-50%,-50%)></dialog><div class=BufferHandler_module_shade__94101f09 data-shade=true style=overflow:hidden;opacity:0;pointer-events:none;display:none></div><svg viewBox=&quot;0 0 48 48&quot; xmlns=http://www.w3.org/2000/svg fill=none data-spinner=true class=&quot;Spinner_module_spinner__795e5e53 vp-spin Spinner_module_lg__795e5e53&quot; data-component-type=spinner style=overflow:hidden;opacity:0;pointer-events:none;display:none><circle data-spinner-trace=true cx=24 cy=24 r=22 stroke=white></circle><circle data-spinner-circle=true cx=24 cy=24 r=22 stroke=white></circle></svg><div class=&quot;vp-captions CaptionsRenderer_module_captions__04afad3c Captions_module_captions__5ed5b89b Captions_module_hide__5ed5b89b Captions_module_withControls__5ed5b89b Captions_module_contentAreaSibling__5ed5b89b sf-hidden&quot; aria-live=assertive style='font-size:13px;font-variant:initial;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;color:rgb(255,255,255);text-shadow:none'></div><div class=&quot;Outro_module_outroWrapper__64bf980e vp-outro-wrapper Outro_module_inactive__64bf980e&quot; data-content-area-sibling-eligible=true style=overflow:hidden;opacity:0;pointer-events:none;display:none></div></div>\n \n<div id=right-content-area class=&quot;RightContentArea_module_rightContentArea__a0f39df8 RightContentArea_module_iframeEmbed__a0f39df8&quot; aria-hidden=true><div class=&quot;AIWidget_module_aiWidget__f665b717 AIWidget_module_hidden__f665b717&quot; aria-label=&quot;Ask Vimeo AI&quot; role=dialog aria-modal=true aria-hidden=true style=overflow:hidden;opacity:0;pointer-events:none;visibility:hidden;display:block></div></div></div>\n<script type=application/ld+json>{&quot;embedUrl&quot;:&quot;https://player.vimeo.com/video/253905163?h=6e63c9f991&quot;,&quot;thumbnailUrl&quot;:&quot;https://i.vimeocdn.com/video/680918441-b17f6b5d3cf508f4554b9a176faacbf150df4e784b73dc1e905d32a53195b096-d?f=webp&quot;,&quot;name&quot;:&quot;Big Buck Bunny&quot;,&quot;description&quot;:&quot;This is \\&quot;Big Buck Bunny\\&quot; by \\&quot;Jason Chen\\&quot; on Vimeo, the home for high quality videos and the people who love them.&quot;,&quot;duration&quot;:&quot;PT596S&quot;,&quot;uploadDate&quot;:&quot;2018-02-01T21:43:15-05:00&quot;,&quot;@context&quot;:&quot;https://schema.org/&quot;,&quot;@type&quot;:&quot;VideoObject&quot;}</script>\n<harper-render-box popover=manual style=pointer-events:none;border:none class=sf-hidden></harper-render-box>\"></iframe><p><br><h2 class=ql-align-center>Getting Started is Easy</h2><p><br><div class=ql-code-block-container spellcheck=false><select class=ql-ui contenteditable=false><option value=plain>Plain<option value=bash>Bash<option value=cpp>C++<option value=cs>C#<option value=css>CSS<option value=diff>Diff<option value=xml>HTML/XML<option value=java>Java<option value=javascript selected>JavaScript<option value=markdown>Markdown<option value=php>PHP<option value=python>Python<option value=ruby>Ruby<option value=sql>SQL</select><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-comment\">// &lt;link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.snow.css\" rel=\"stylesheet\"&gt;</span></div><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-comment\">// &lt;script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.js\"&gt;&lt;/script&gt;</span></div><div class=ql-code-block data-language=javascript><br></div><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-keyword\">const</span> quill = <span class=\"ql-token hljs-keyword\">new</span> <span class=\"ql-token hljs-title\">Quill</span>(<span class=\"ql-token hljs-string\">'#editor'</span>, {</div><div class=ql-code-block data-language=javascript>  <span class=\"ql-token hljs-attr\">modules</span>: {</div><div class=ql-code-block data-language=javascript>    <span class=\"ql-token hljs-attr\">toolbar</span>: <span class=\"ql-token hljs-string\">'#toolbar'</span></div><div class=ql-code-block data-language=javascript>  },</div><div class=ql-code-block data-language=javascript>  <span class=\"ql-token hljs-attr\">theme</span>: <span class=\"ql-token hljs-string\">'snow'</span></div><div class=ql-code-block data-language=javascript>});</div><div class=ql-code-block data-language=javascript><br></div><div class=ql-code-block data-language=javascript><span class=\"ql-token hljs-comment\">// Open your browser's developer console to try out the API!</span></div></div><p><br><p><br><p class=ql-align-center><strong>Built with</strong><p class=ql-align-center><span class=ql-formula data-value=\"x^2 + (y - \\sqrt[3]{x^2})^2 = 1\">﻿<span contenteditable=false><span class=katex><span class=katex-mathml><math xmlns=http://www.w3.org/1998/Math/MathML><semantics><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mo stretchy=false>(</mo><mi>y</mi><mo>−</mo><mroot><msup><mi>x</mi><mn>2</mn></msup><mn>3</mn></mroot><msup><mo stretchy=false>)</mo><mn>2</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding=application/x-tex>x^2 + (y - \\sqrt[3]{x^2})^2 = 1</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:0.8974em;vertical-align:-0.0833em></span><span class=mord><span class=\"mord mathnormal\">x</span><span class=msupsub><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.8141em><span style=top:-3.063em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2</span></span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2222em></span><span class=mbin>+</span><span class=mspace style=margin-right:0.2222em></span></span><span class=base><span class=strut style=height:1em;vertical-align:-0.25em></span><span class=mopen>(</span><span class=\"mord mathnormal\" style=margin-right:0.0359em>y</span><span class=mspace style=margin-right:0.2222em></span><span class=mbin>−</span><span class=mspace style=margin-right:0.2222em></span></span><span class=base><span class=strut style=height:1.2051em;vertical-align:-0.25em></span><span class=\"mord sqrt\"><span class=root><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.8443em><span style=top:-3.0221em><span class=pstrut style=height:2.5em></span><span class=\"sizing reset-size6 size1 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">3</span></span></span></span></span></span></span></span><span class=\"vlist-t vlist-t2\"><span class=vlist-r><span class=vlist style=height:0.9551em><span class=svg-align style=top:-3em><span class=pstrut style=height:3em></span><span class=mord style=padding-left:0.833em><span class=mord><span class=\"mord mathnormal\">x</span><span class=msupsub><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.7401em><span style=top:-2.989em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2</span></span></span></span></span></span></span></span></span></span><span style=top:-2.9151em><span class=pstrut style=height:3em></span><span class=hide-tail style=min-width:0.853em;height:1.08em><svg width=400em height=1.08em viewBox=\"0 0 400000 1080\" preserveAspectRatio=\"xMinYMin slice\"><path d=\"M95,702\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl0 -0\nc5.3,-9.3,12,-14,20,-14\nH400000v40H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM834 80h400000v40h-400000z\"></path></svg></span></span></span><span class=vlist-s>​</span></span><span class=vlist-r><span class=vlist style=height:0.0849em><span></span></span></span></span></span><span class=mclose><span class=mclose>)</span><span class=msupsub><span class=vlist-t><span class=vlist-r><span class=vlist style=height:0.8141em><span style=top:-3.063em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2</span></span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span></span><span class=base><span class=strut style=height:0.6444em></span><span class=mord>1</span></span></span></span></span>﻿</span><p><br></p></div><div class=\"ql-tooltip ql-hidden sf-hidden\"></div></div></div></div></div></div></div></div></div><div id=detail-container><div class=container><a class=action href=https://quilljs.com/docs/quickstart>Documentation</a><h1>An API Driven Rich Text Editor</h1></div></div><div id=features-container><div class=container><div class=row><div class=\"feature columns\"><svg xmlns=http://www.w3.org/2000/svg viewBox=\"0 0 460 225\"><path d=\"M426.6 204.4c-3.18-12.34-9.85-23.4-24.1-23.14a25.8 25.8 0 0 0-9.53 2.16 55 55 0 0 0-6.88.1c-9 .65-17.08 5.37-26.13 6-11.28.73-22.38-3.9-32.7-7.72a5.68 5.68 0 0 0-6.32 1.84c-4.43-2.83-11.8 2.8-9 9.14 6.06 13.72 18.48 18.9 32.8 20.62 24.5 2.95 49.9 2.14 74.38-.4a8.2 8.2 0 0 0 2.9-.84c3.05-.9 5.6-3.76 4.56-7.75zm-43.4-1.35 1.2.24-2.1.1z\" class=feat-1></path><path d=\"M383.7 179.32c-17.23 11.27-35.88 7.17-54.6 2.23-6.85-1.8-11.7 8.47-5 11.8 18.58 9.17 38.65 11.08 58.5 5.1a6.1 6.1 0 0 0 4.53-6.13c1-.58 2-1.2 3.05-1.85 6.96-4.53.5-15.72-6.5-11.15z\" class=feat-2></path><path d=\"m320.06 163.68-6.8-5.56.05-43.12a2.9 2.9 0 0 0-.47-1.62 3.2 3.2 0 0 0 .78-2.16l.93-52.14a3 3 0 0 0-.76-2.18s0-.07 0-.1c0-.3-.1-.58-.13-.87v-.1a72.7 72.7 0 0 0-8.1-25 3.2 3.2 0 0 0-3.7-1.45l-.43-.67a2.8 2.8 0 0 0-.74-1.2l-.66-1.03c-1.4-2.25-4.84-1.7-5.84.25a28.73 28.73 0 0 0-9.3-12.66c-14.08-10.77-44.7-7.88-61-6-21.1 2.44-31.32 16.94-35.46 37a6.6 6.6 0 0 0 .34 3.8c-5.18 10.3-2.07 26-1.9 36.34.23 14.16.64 28.33 1.07 42.5a5.66 5.66 0 0 0-1.6 4.12c0 .52-.86 26.83-2.34 25.37-3.83-3.78-11.3-1.17-11 4.56.55 11.23 16.33 16.1 25.9 14.66a21.4 21.4 0 0 0 11.7-5.8 5.87 5.87 0 0 0 4.4-3.08 87.1 87.1 0 0 0 10.63-29.8 6.76 6.76 0 0 0-4.48-7.66 189 189 0 0 0 0-19.7 194 194 0 0 1 10.25-47.77c.76-2.05 1.55-4.1 2.33-6.17a6.9 6.9 0 0 0 2.25.4c17.68-.1 44.3 5.1 56.5-12.14a17.53 17.53 0 0 0 3-11.9l.12.32a30 30 0 0 0 2.7 7.95 3.65 3.65 0 0 0 2.75 2.1c0 12 4.08 23 4.7 35.1a2.85 2.85 0 0 0-1 2.47c.1 2.87.24 5.72.4 8.57.2 13.27-1.63 26.5-3.08 39.7-2 4.16-3.78 8.3-5.4 12.58l-13 10.47c-.48.3-1 .56-1.43.85a3 3 0 0 0-1.47 2.52 2.75 2.75 0 0 0-.92 2.3c.42 7 2.38 10.1 7.82 13.3 4.1 3.56 9.27 5.52 14.56 4.35 6 1.27 12.7-.6 19.26-6.3 1.9-1.6.87-4.82-1.38-5.4zM197.9 73.28v.26-.28h.04zm48.9-40.53-1.28-.23 2.4-.12zm57.66 112.47a4 4 0 0 0-.52 0c.14-.25.28-.5.4-.76.04.24.08.54.1.76zm-11.9 11.66-.13.07-1.06-.33a3 3 0 0 0-.27-.52l.8-.36q.3.56.64 1.14z\" class=feat-1></path><path d=\"M309.54 33.46a2.62 2.62 0 0 0-2.76-2.32c-2.62-4-7.92-7.22-12-8.5a2.8 2.8 0 0 0-3.38 1.2 7 7 0 0 0-.6-1c-9.55-13.14-23.44-16.08-39.16-15-16 1-41.87 3.7-54.6 14.25-13.04 10.8-7.5 34.42-7.55 49.4l-.1 40.8c0 6.3 3.43 47.32-6.92 45.65-8.13-1.3-11.63 11.13-3.43 12.46 31.85 5.15 23.23-44.06 23.27-62.18q0-16.32.08-32.63c0-10-3.7-27.52.1-36.72 8-19.56 65.36-25.75 77.16-9.53 3.53 4.85 10.42 2.75 12-1.35a3.15 3.15 0 0 0 1.08.73 6.7 6.7 0 0 0 .86 5.85l.1.14c1.2 4.42 3.45 9.37 7.53 10 6.3 1.08 9.2-6.3 8.3-11.26z\" class=feat-2></path><path d=\"M179.27 204.07a6.34 6.34 0 0 0-.9-5.45c-4.4-12.9-7.76-16.37-21.9-19.22-8.82-1.78-17.5-3.84-25.1-.74-3-3.4-7.17-4.42-13.14-2.45-1.6.54-2.4 2.75-3.8 3.53a41 41 0 0 1-6.65 2.77c-9.3-4.32-20.68-13-31.46-10.17-3.38.9-3.16 4.65-5.76 5.8A34 34 0 0 1 66 179.8c-7.4-.6-15.53.6-21.3 1.16a6.73 6.73 0 0 0-6.2 7.4 12.45 12.45 0 0 0-3.12 4 6.66 6.66 0 0 0 1 7.84l.34.3a12.6 12.6 0 0 0-1.72 1.7c-1.7 2.07-2.77 5.37-1 7.83 9.53 13.3 37.82 6.34 52 6.32l90.14-.14c7.06-.02 8.12-9.4 3.13-12.16z\" class=feat-1></path><path d=\"M102.7 183.63a14 14 0 0 0-2.22-.37c-1.27-1.12-2.65-2.12-4-3.14-5.08-3.73-10.28-7.3-15.54-10.8-6.47-4.3-12.53 5.1-7.75 10.12a6.38 6.38 0 0 0 1.7 3.76c5.38 5.9 13.65 9.42 17.37 16.7 2 3.9 7.07 3.88 10 1.43 2.53.37 4.77-.7 6.54-3 4.13-5.5.1-13.15-6.1-14.7m33.16-7.25a7.06 7.06 0 0 0-6-.3c-3.14-2.92-9.34-2.74-10.9 2.67a17.05 17.05 0 0 1-3.2 6.36c-3.66 4.37-1.2 9.62 3.14 10.65a7.4 7.4 0 0 0 .76 2 7.43 7.43 0 0 0 9.48 2.78c3.07-1.48 4.14-4.3 5.46-7.24l3.6-8c1.4-3.3.9-7.03-2.34-8.92\" class=feat-2></path><path d=\"M402.64 128.88a22.5 22.5 0 0 1-5.2 3.83 29.5 29.5 0 0 1-6.1 2.6 29 29 0 0 1-7.67 1.22 24.2 24.2 0 0 1-7.83-1.1 14.2 14.2 0 0 1-3.4-1.38 12.4 12.4 0 0 1-2.77-1.68 15.9 15.9 0 0 1-3.52-3.23c-.75-.87-1.13-1.38-1.13-1.38a1.17 1.17 0 0 1 1.34-1.8l.17.07s.58.22 1.53.63l1.65.77 2.18.8a17 17 0 0 0 2.54.77 18.6 18.6 0 0 0 2.85.6 21.5 21.5 0 0 0 3.07.38 24 24 0 0 0 3.2.1c1.1 0 2.2-.1 3.26-.17s2.16-.17 3.2-.4c2.07-.3 4-.76 5.73-1.12l5.7-1.46a1.2 1.2 0 0 1 1.46.86 1.2 1.2 0 0 1-.26 1.1z\" class=feat-3></path><ellipse cx=360.28 cy=86.6 class=feat-3 rx=3.91 ry=3.58></ellipse><ellipse cx=414.55 cy=86.6 class=feat-3 rx=3.98 ry=3.32></ellipse><path d=\"M282.1 128.88a22.5 22.5 0 0 1-5.2 3.83 29.5 29.5 0 0 1-6.12 2.6 29 29 0 0 1-7.66 1.22 24.2 24.2 0 0 1-7.83-1.1 14.2 14.2 0 0 1-3.4-1.38 12.4 12.4 0 0 1-2.78-1.68 15.9 15.9 0 0 1-3.52-3.23c-.75-.87-1.13-1.38-1.13-1.38a1.17 1.17 0 0 1 1.34-1.8l.2.05s.58.22 1.53.63l1.65.77 2.17.8a17 17 0 0 0 2.54.77 18.6 18.6 0 0 0 2.84.62 21.5 21.5 0 0 0 3.07.36 24 24 0 0 0 3.22.1c1.08 0 2.18-.1 3.25-.17s2.16-.2 3.2-.42c2.07-.3 4-.76 5.73-1.12l5.7-1.46a1.2 1.2 0 0 1 1.46.86 1.2 1.2 0 0 1-.27 1.12z\" class=feat-3></path><ellipse cx=239.73 cy=86.6 class=feat-3 rx=3.91 ry=3.58></ellipse><ellipse cx=294 cy=86.6 class=feat-3 rx=3.98 ry=3.32></ellipse><path d=\"M154.5 128.35a23.7 23.7 0 0 1-5.43 3.84 31.3 31.3 0 0 1-6.33 2.56 31 31 0 0 1-7.88 1.23 25.9 25.9 0 0 1-8-1.1 14.8 14.8 0 0 1-3.5-1.36 13.2 13.2 0 0 1-2.9-1.67 16.6 16.6 0 0 1-3.7-3.25c-.78-.88-1.18-1.4-1.18-1.4a1.17 1.17 0 0 1 1.32-1.8l.16.05s.6.22 1.58.64l1.7.8 2.27.78a18.4 18.4 0 0 0 2.66.78 19.5 19.5 0 0 0 3 .62 24 24 0 0 0 3.2.37 26 26 0 0 0 3.35.1c1.14 0 2.28-.1 3.4-.17s2.24-.18 3.3-.4c2.18-.3 4.2-.77 6-1.14l5.93-1.46a1.2 1.2 0 0 1 1.06 1.97z\" class=feat-3></path><ellipse cx=121.64 cy=83.23 class=feat-3 rx=4.06 ry=3.58></ellipse><ellipse cx=169.28 cy=83.23 class=feat-3 rx=4.06 ry=3.58></ellipse><path d=\"M425.22 196.5a20.1 20.1 0 0 0-9.08-10.9c-5-2.8-12.63-2.78-22.35-2.78h-2.48a26.5 26.5 0 0 1-9.4-1.55 8.88 8.88 0 0 1-5.24-6.64c-1.06-6-1.37-15.94 2.1-19 2-1.75 5.08-2.28 10.88-1.9.23 0 23.56 3.84 30.52-14.26 4-10.45 5.6-23.1 5.86-46.63a271.4 271.4 0 0 0-2.2-42.4c-1.14-8.14-6.83-15.2-16-19.82-3.2-1.6-10.5-3.72-18.96-4.55-10.18-1-21.6-.75-26.78.08a42.9 42.9 0 0 0-14.34 4.5C339.93 35 335 43.1 333.56 54.22a186 186 0 0 0-1.75 21.28c-.6 18.42-.6 51.2 1.27 88 0 .1.62 9.4-5.94 15.48-5.15 4.78-13.3 6.37-24.22 4.73a1 1 0 0 0-.7.15 16 16 0 0 0-2.67-.5c-2.6-.26-5.93-.3-9.8-.38-5-.1-10.63-.18-16.58-.7a44.5 44.5 0 0 1-10.45-2.76c-2.85-1.17-6.24-4.23-6.75-7.12-1.42-8-.57-14.26 2.27-16.76 1.9-1.67 4.88-2.17 11-1.9a44.4 44.4 0 0 0 10.5-.46 1 1 0 0 0-.06.14c-1.35 9.8 1 14.06 1.55 14.84 4.1 9.43 21.07 9.2 21.67 9.16q2 .18 3.76.18c6.16 0 11-1.55 14.34-4.63a14.92 14.92 0 0 0 4.78-10.25 1.08 1.08 0 0 0-.45-.88 1.1 1.1 0 0 0-1-.14c-2.57.9-4.56.78-6.08-.36-4.1-3.08-3.6-12.46-3.6-12.58l2.32-68.53c.7-22.63-1.54-34.54-1.64-35.05-4.53-21-22.85-22.87-23.6-22.94a28.18 28.18 0 0 0-15.14-11.75c-14.18-4.7-32.63-4.08-33.64-4a86.3 86.3 0 0 0-28.15 5.3 43.6 43.6 0 0 0-8.8 4.38c-19 12.4-18.48 28.57-18.46 29.2-.4 21.68-.13 104.93-.12 105.73-.1 3-.84 4.82-2.23 5.5-2.67 1.25-7.46-1.68-9.1-2.9a1.08 1.08 0 0 0-1.7.65c-1.2 6.3 0 11.32 3.48 14.9 5 5.17 13.8 6.27 20.36 6.27a58 58 0 0 0 8.54-.6 29.8 29.8 0 0 0 6-1.22 12.5 12.5 0 0 1-2.07 4.5c-2.6 3.5-7.2 5.3-13.6 5.38-.62 0-14.7.3-23.32 3.22a23.5 23.5 0 0 0-6.65-5.45c-5.12-2.8-13.1-2.77-23.15-2.76h-2.56a28.5 28.5 0 0 1-9.8-1.55 8.94 8.94 0 0 1-5.43-6.65c-1.1-6-1.43-15.92 2.18-19 2-1.68 5.08-2.2 11.4-1.9 1 .1 25.33 2.36 30.54-14.75l.45-1.5c2.55-8.33 5.66-18.5 6.45-37.9a7.65 7.65 0 0 0 4.15-6.76v-9.7a7.3 7.3 0 0 0-4-6.54A245 245 0 0 0 175 46.15C173.85 38 168 31 158.42 26.32c-3.3-1.6-10.87-3.72-19.63-4.54-10.56-1-22.4-.74-27.77.08a45.6 45.6 0 0 0-14.86 4.5C88.07 30.63 83 38.8 81.44 49.9a180 180 0 0 0-1.8 21.28c-.78 22.08-1.6 55.27.15 88.5 0 .07 1.05 8.3-3.25 13.85a13.53 13.53 0 0 1-9.5 5l-17.3.4a13.85 13.85 0 0 0-9.37 4.2c-5.6 5.38-8.43 14.9-8.43 28.34a1.08 1.08 0 0 0 2.15 0c0-15.9 4.2-23.3 7.7-26.73a11.82 11.82 0 0 1 7.93-3.66l17.46-.4a18.3 18.3 0 0 0 6-1.7l25.55 26.14a1.07 1.07 0 0 0 .77.32 1.08 1.08 0 0 0 .78-.37c4.2-4.82 8.26-9.63 11.88-14a123 123 0 0 1 15.47 13.08 1.08 1.08 0 0 0 .77.32h.22a1.08 1.08 0 0 0 .78-.66l9.15-23.23c1 .08 1.94.1 2.77.1h2.57c9.38 0 17.5 0 22.13 2.5a22.55 22.55 0 0 1 9.6 10.66c2.55 6.14 4 16 4.07 16.07a1.08 1.08 0 1 0 2.13-.32c-.06-.4-1.55-10.18-4.2-16.57a23.8 23.8 0 0 0-2.5-4.47c8.36-2.6 21.8-2.88 21.92-2.88a23.2 23.2 0 0 0 10.64-2.34 1.06 1.06 0 0 0 .44.76c.2.15 14.14 9.4 29.74 9.4A32.27 32.27 0 0 0 263 182.2a1 1 0 0 0 .1-.2 46.3 46.3 0 0 0 9.9 2.44c6 .53 11.7.63 16.73.7 3.8.08 7.1.13 9.62.37 8.08.78 13.76 8.46 15.1 11.85a39.4 39.4 0 0 1 2.47 12.65 1 1 0 0 0 1.08 1 1 1 0 0 0 1.07-1 40.9 40.9 0 0 0-2.63-13.4 25.07 25.07 0 0 0-8.74-10.16 39.5 39.5 0 0 0 9.5-.45 1 1 0 0 0 .06.1c.72.7 17.93 17 39.92 17h.82c4 0 23.5-.94 36.1-18.14 8.95 0 16.62 0 21 2.5a18.07 18.07 0 0 1 8.15 9.8 46.5 46.5 0 0 1 2.68 13.57 1.08 1.08 0 0 0 1.08 1 1.08 1.08 0 0 0 1-1.1 48 48 0 0 0-2.78-14.24zM179.14 78.82v9.7a5.3 5.3 0 0 1-5.1 5.38l-20.72-.24a5.13 5.13 0 0 1-5.12-5.12v-9.7c0-2.77 2.15-5.86 5-5.86l20.8.7a5.12 5.12 0 0 1 5.14 5.15zm-97.36-7.55a178 178 0 0 1 1.78-21c1.43-10.44 6.14-18 13.6-22a43 43 0 0 1 14.2-4.28c5.22-.8 16.84-1 27.23-.06 8.5.8 15.74 2.8 18.88 4.34 6.86 3.33 11.68 8 14 13.32a1.1 1.1 0 0 0-.35.07c-.27.1-27.83 11.34-77.2 2.62a1.08 1.08 0 0 0-1.27 1.05v38.88H82a1.05 1.05 0 0 0-.64.23c.14-4.72.28-9.14.42-13.18zm17.66 131.5-24.37-24.9a14.2 14.2 0 0 0 3.18-3 16 16 0 0 0 1.52-2.4 191 191 0 0 1 30.65 17.35c-3.36 4.05-7.1 8.48-10.98 12.94zm12.36-14.6a193.4 193.4 0 0 0-31.16-17.67 25.1 25.1 0 0 0 1.3-11c-1.4-26.27-1.16-52.6-.62-73.36a1.06 1.06 0 0 0 .7.26h11.72a1.08 1.08 0 0 0 1.08-1.08V46.6c49.2 8.42 76.88-2.86 77.16-3a1 1 0 0 0 .23-.16 19 19 0 0 1 .7 3 241 241 0 0 1 2.18 25.16 7 7 0 0 0-1-.08l-20.86-.72c-4.23 0-7.18 4.22-7.18 8v1.4a1 1 0 0 0 0 .1v.2a9 9 0 0 0-5.4-2.3 11.56 11.56 0 0 0-7 2.24v-1.6a7.7 7.7 0 0 0-7.37-7.66l-20.6.38a7.3 7.3 0 0 0-7.27 7.28v9.7c0 3.8 2.9 8 7.1 8l20.9-.73a7.28 7.28 0 0 0 7.26-7.27v-5.35c.9-.8 3.63-3 6.84-2.8a7.76 7.76 0 0 1 5.5 3.24v27.1h-15.7a1.08 1.08 0 1 0 0 2.16h16.76a1.08 1.08 0 0 0 1.08-1.07V93.68a7.23 7.23 0 0 0 5.15 2.15l20.7.25a7 7 0 0 0 1-.07c-.8 18.54-3.72 28.07-6.32 36.56l-.46 1.52c-4.7 15.4-28 13.25-28.3 13.23-6.1-.27-10.16 0-13 2.42-4.63 3.92-4 15-2.9 21a11 11 0 0 0 .47 1.7c-1.37 1.73-6.22 7.9-12.7 15.75zm19.7-109.35v9.7a5.13 5.13 0 0 1-5.1 5.12l-20.88.73c-2.9 0-4.92-3.1-4.92-5.85v-9.7a5.13 5.13 0 0 1 5.14-5.12l20.6-.37a5.5 5.5 0 0 1 5.17 5.5zM128 201.5a127 127 0 0 0-14.46-12.08c5.65-6.85 10-12.4 11.95-14.82a11 11 0 0 0 5.24 4.36 23.8 23.8 0 0 0 5.6 1.4zM313.17 45.6c0 .13 2.3 12.2 1.6 34.57l-2.33 68.5c0 .43-.57 10.62 4.46 14.4a7.58 7.58 0 0 0 6.5 1.14 12.9 12.9 0 0 1-3.95 7.22c-3.57 3.24-9.1 4.55-16.54 3.87-.1 0-16.34.24-19.9-8.2 0 0-2.58-3.67-1.24-13.38a1.07 1.07 0 0 0-.2-.8c6.86-1.47 14.52-5.13 17.1-13.93l.46-1.52c2.73-9.23 6.13-20.72 6.38-44.6a204 204 0 0 0-2-37.22c-.77-5.56-3.4-13.46-8-19a18 18 0 0 0 0-2.86 25.2 25.2 0 0 0-2.5-9.2c4.3.8 16.6 4.5 20.17 21zM206.42 172.7c-.2 0-19.25 3-27.08-5-2.68-2.75-3.74-6.56-3.16-11.34 2.27 1.44 6.62 3.66 9.86 2.13 2.18-1 3.34-3.53 3.46-7.4 0-.85-.26-84.07.13-105.8 0-.16-.42-15.67 17.47-27.37a41.6 41.6 0 0 1 8.38-4.16 84 84 0 0 1 27.44-5.16c.2 0 19-.66 32.9 3.95 10 3.33 16.74 11.53 17.47 21.4a20.4 20.4 0 0 1-3.34 12 18.2 18.2 0 0 1-9.4 6.73c-4.75 1.56-18.6 5.1-44.25 4.16a6.15 6.15 0 0 0-5.42 2.8c-1.32 2.12-3 6.2-3.43 13.57 0 .5-1.7 50.64-1.52 75.68.12.85 1.9 21.62-19.5 23.82zm2.93 9.6a13.4 13.4 0 0 0 3-2.9 15.3 15.3 0 0 0 2.74-6.7c14.54-6.4 13-23.85 13-24-.2-24.9 1.5-75 1.5-75.45.43-6.9 1.94-10.63 3.12-12.54a3.85 3.85 0 0 1 3.55-1.7c26 .92 40.14-2.67 45-4.27a20.13 20.13 0 0 0 10.53-7.62 24 24 0 0 0 3.2-7.48A40.4 40.4 0 0 1 301.32 56q.5 3.7.87 7.1c-3-.4-14.66-1.5-21.68 4.42-3.53 3-5.32 7.24-5.32 12.7v33.6h-15.06a1.08 1.08 0 1 0 0 2.15h16.15a1.08 1.08 0 0 0 1.07-1.08V80.16c0-4.78 1.53-8.5 4.55-11 6.8-5.73 19.1-4.06 20.5-3.85a188.5 188.5 0 0 1 .92 27.52c-.25 23.64-3.46 34.5-6.3 44.08l-.44 1.5c-4.52 15.4-27 13.26-27.25 13.23-5.88-.28-9.82 0-12.54 2.42-4.9 4.33-3.7 14.56-3 18.75.6 3.35 4 6.7 7.2 8.34-20.1 22.04-51.3 1.38-51.65 1.13zM335.68 54.53c1.38-10.44 5.9-18 13.1-22a40.2 40.2 0 0 1 13.65-4.25c5-.8 16.23-1 26.23-.07 8.18.8 15.16 2.8 18.2 4.33 6.6 3.33 11.24 8 13.5 13.33a1.1 1.1 0 0 0-.36.1c-.26.12-26.88 11.32-74.38 2.6a1.1 1.1 0 0 0-.88.24 1.07 1.07 0 0 0-.4.83v38.87h-10.2a1.05 1.05 0 0 0-.47.12c.06-4.9.17-9.3.3-13.07a183 183 0 0 1 1.7-21.06zm-7.1 126c7.33-6.8 6.67-16.8 6.64-17.2-1.44-28.2-1.77-54.04-1.57-72.83a1.05 1.05 0 0 0 .5.15h11.3a1.08 1.08 0 0 0 1.07-1.08V50.9c47.4 8.4 74.1-2.86 74.35-3a1 1 0 0 0 .17-.1 19.5 19.5 0 0 1 .65 3c.56 4.12 1 8.2 1.32 12.1-3.76-.4-15-1.1-21.83 4.73-3.62 3.06-5.45 7.43-5.45 13V115H380.7a1.08 1.08 0 0 0 0 2.15h16.14a1.08 1.08 0 0 0 1.08-1.08v-35.5c0-4.9 1.57-8.7 4.67-11.33 6.42-5.45 17.65-4.52 20.6-4.17a271 271 0 0 1 .68 27.73c-.3 26.6-2.4 37.3-5.7 45.9-6.34 16.46-27.94 13-28.26 12.9-6.57-.42-10.08.25-12.55 2.43-5.48 4.82-3.1 19.35-2.8 21a10.9 10.9 0 0 0 6.53 8.25l.54.2c-27.75 20.08-50.48-.23-53.15-2.8zM358 201h-.73c-18.3 0-33.6-12.16-37.5-15.56a21.9 21.9 0 0 0 7.07-3.34 47.4 47.4 0 0 0 16.92 10.05 40.8 40.8 0 0 0 13.1 2.2c8 0 17.42-2.46 27.38-10.08a32.6 32.6 0 0 0 7.13.75C379.35 200.12 361.63 201 358 201\" class=feat-3></path></svg><div class=details><h2>Built for Developers</h2><span>Granular access to the editor's content, changes and events through a simple API. Works consistently and deterministically with JSON as both input and output.</span></div></div><div class=\"feature columns\"><svg xmlns=http://www.w3.org/2000/svg viewBox=\"0 0 460 225\"><path d=\"M290 78.2a122 122 0 0 1-.9-23.2 2.88 2.88 0 0 0-2.82-2.83 19 19 0 0 1-3.7-.45l-.45-.26A3.05 3.05 0 0 0 280 50.3l-2.77-.38c-.5-.08-1-.15-1.5-.2l-.15-.05a13.06 13.06 0 0 0-8.1.1c-5.92-.5-11 3.58-16.13 6.5a2.86 2.86 0 0 0-1 3.87 6.7 6.7 0 0 1 1.2 2.06l.27.4-.07.27a7 7 0 0 1 .2 1.34l-.56.16-.07.26-1.33.18a11.6 11.6 0 0 0-1.64.77 2.34 2.34 0 0 0-3.2 1.22c-.1.22-.2.44-.28.67v.08a20.2 20.2 0 0 0-1.36 5.86c-.16.8-.32 1.6-.46 2.4a3 3 0 0 0-.43 1.3l-.28 3a2.3 2.3 0 0 0 .24 1.27 2.6 2.6 0 0 0 .88 2.14 2.74 2.74 0 0 0-.7 2.63A15.4 15.4 0 0 0 244 90.2a3 3 0 0 0 .25.5c.2.54.37 1.08.57 1.63a2.83 2.83 0 0 0 5.45-1.5 10.08 10.08 0 0 1 1.16-8.57 3.3 3.3 0 0 0 .3-.9 2.6 2.6 0 0 0 1 0h.2a2.82 2.82 0 0 0 2.75.92l4.25-.8c3.74-.4 7.66-.12 11.33-.38a64 64 0 0 1 15.3.68A2.88 2.88 0 0 0 290 78.2m-6.2-2.55.24-.23v.27zm-42.54 36.71c-12.37-7.43-25.7-8.1-38.67-2.23a4.52 4.52 0 0 0-2.94 4.13c-9.8 3-19.53 6.38-28.7 5-11.42-1.72-21.1-5.78-32.18 0-8.1 4.25-23.26 14.8-28.52 24.74a13 13 0 0 0-6.54 2.8c-4.35 3.23-3.13 10.38 2.85 10.55a143 143 0 0 0 15.85-.43 6 6 0 0 0 3.4-1.32c4.54.53 8.87 1.23 11.43 1.28 11.1.24 21.7.64 32.77 1.8 16.2 1.67 35.6 1.17 51.77-2.37 7.24.75 14.52 1.94 21.8 1.67 2.87-.1 5.93-2.5 5.66-5.65-1.2-14.25 5.88-31.62-8-39.96zM210 144.5a6.5 6.5 0 0 0 2.54-.14 5 5 0 0 0 .6.35h-3.2c.06-.08.06-.14.06-.2zm-21.65 2.82a7.3 7.3 0 0 0 1.33.38h-1.63a4 4 0 0 0 .34-.38zm3.42.42a4.3 4.3 0 0 0 2.6-1.35 5.5 5.5 0 0 0 1.83.9 5 5 0 0 0-.4.44h-4z\" class=feat-1></path><path d=\"M247 150.56c-19.07-4-48-9.88-55.68-30.47a3.06 3.06 0 0 0-5.22-.8 3.13 3.13 0 0 0-2.6 3.58c1.46 8.6 3.83 17.75 8.9 24a2.7 2.7 0 0 0-1.25 2.1l-1.62.07a3.05 3.05 0 0 0-2.65 2.3c-20.92.2-49.9 2.4-58.5-19-1.27-3.15-6.16-2.13-5.53 1.14a3 3 0 0 0-3.16.5 116 116 0 0 0-16.34 16.57 3.08 3.08 0 0 0-.26 3.5 2.86 2.86 0 0 0 3.28 4l5.7-1.64c6.57.24 18.94 1.86 20.3 1.88a2.7 2.7 0 0 0 .63-.06 166.2 166.2 0 0 0 35.87-.42 3 3 0 0 0 2.18-1.4c24.7 1.3 51 4.57 75.14 1.65a3.05 3.05 0 0 0 2.6-3.8 2.6 2.6 0 0 0-1.8-3.7zm-115 1.78a3.5 3.5 0 0 0 .54-1.4 25 25 0 0 0 1.88 1.64zm79.43-6.07a3 3 0 0 0-.33-.46q1.5.69 3 1.32-1.35-.42-2.67-.85zm-17.7-8.6a3 3 0 0 0-.27.32c-.2-.44-.4-.87-.58-1.3z\" class=feat-2></path><path d=\"M196.3 33.54a2.43 2.43 0 1 1 2.44-2.43 2.44 2.44 0 0 1-2.43 2.44zm0-3a.55.55 0 0 0-.54.55c0 .6 1.1.6 1.1 0a.55.55 0 0 0-.55-.54zM249 156.78H104.2v-8a175 175 0 0 0 23-19.7 44.5 44.5 0 0 1 15.3-10.4c9.1-3.58 17.74-3.42 25.68.48a22.6 22.6 0 0 0 9.3 2.65c4.75.13 12.5-1 22.14-7.27 13.6-8.88 30.64-8.87 43.4 0a75 75 0 0 1 6 4.67v-2.47a87 87 0 0 0-4.9-3.75c-13.4-9.32-31.25-9.34-45.5 0-9.25 6-16.6 7.1-21 7a20.8 20.8 0 0 1-8.55-2.46c-8.33-4.08-17.72-4.27-27.2-.55a46.3 46.3 0 0 0-16 10.83 176 176 0 0 1-21.66 18.73v-66c8.23.62 16.7.84 24.58.84 15.32 0 28.53-.83 33.76-1.2a2.16 2.16 0 0 0 1.72-1.1 2.23 2.23 0 0 0 .07-2.1c-1.48-3-4.68-6.67-11.48-6.67A25.6 25.6 0 0 0 144 72a2.2 2.2 0 0 1-2.6-.9c-3.83-5.63-11.3-9-20-9a30.5 30.5 0 0 0-17.2 5V44.42a4.5 4.5 0 0 1 4.5-4.5h175.23a4.5 4.5 0 0 1 4.5 4.5v8.12a31.1 31.1 0 0 0-17.28-5.16 29.66 29.66 0 0 0-22.64 10.3 16.7 16.7 0 0 0-6.5-1c-3.43 0-11.78.55-14.9 5.67a2.23 2.23 0 0 0 1.58 3.36 87 87 0 0 0 11.8.8c1 0 1.94 0 2.84-.04a30.4 30.4 0 0 0-1.93 8.5c-.66 8.56 2.13 16.42 7.63 21.66V94c-4.23-4.8-6.3-11.52-5.76-18.8a28.5 28.5 0 0 1 2.1-8.82c2.27-.14 4.1-.35 5.45-.54a2.7 2.7 0 0 0 2-3.84 8.6 8.6 0 0 0-2.66-3.33 27.8 27.8 0 0 1 21-9.36 29.14 29.14 0 0 1 17.27 5.58v26.75h1.88v-37.2a6.38 6.38 0 0 0-6.36-6.37H108.7a6.38 6.38 0 0 0-6.38 6.37v113.3a.94.94 0 0 0 .94.93H249v-1.88zm2.12-94a.8.8 0 0 1 0 .74.8.8 0 0 1-.6.42 78.8 78.8 0 0 1-21.6-.12.34.34 0 0 1-.24-.2.33.33 0 0 1 0-.32c2.64-4.3 10.2-4.77 13.32-4.77 5.2.02 7.67 1.17 9.15 4.26zM104.2 69.45C108.42 66 114.75 64 121.4 64c8 0 14.92 3 18.4 8.15a4.05 4.05 0 0 0 4.85 1.6 24 24 0 0 1 8.2-1.5c4.67 0 8 1.9 9.78 5.62a.35.35 0 0 1 0 .34.26.26 0 0 1-.22.15c-7.9.57-34.1 2.18-58.2.36v-9.25zm195.52-47.18H92.9a6.38 6.38 0 0 0-6.38 6.37v67.6h1.88v-67.6a4.5 4.5 0 0 1 4.48-4.5h206.84a4.5 4.5 0 0 1 4.5 4.5v53h1.87v-53a6.38 6.38 0 0 0-6.38-6.37zM97.38 186.23h151.65v1.88H97.38zm0-13.66h151.65v1.88H97.38z\" class=feat-3></path><path d=\"M91.13 162c.12-6-7.46-7-10.27-3.22-5.2-1.83-11.64 3.27-15.7 5.84A116.2 116.2 0 0 0 48 178.17c-3.48 3.25-.9 9.92 4 9.65 5.7-.3 11.38-.83 17.07-1.13 4.94-.27 9.5.43 14.3.67a6.6 6.6 0 0 0 7.3-5.83c1.08-6.2.33-13.3.46-19.54zM84 176c.25 0 .23 0 0 0\" class=feat-1></path><path d=\"M87.4 179.5a129 129 0 0 0-14.32 0c-4.23-2.48-5.46-8.1-5.82-12.57-.28-3.48-5.56-3.62-5.65-.35a2.36 2.36 0 0 0-2.44.17 42.2 42.2 0 0 0-12.1 12.77 2.9 2.9 0 0 0 0 2.87l-.4.33a2.86 2.86 0 0 0 2 4.83A6 6 0 0 0 52.6 186l.46-.18a3 3 0 0 0 .87-.16 3 3 0 0 0 .52 0c6 1.3 12.46.8 18.87.24 4.77 1.07 10.5 0 14.84-.8 3.26-.6 2.3-5.46-.76-5.6\" class=feat-2></path><path d=\"M91.82 202.73H44.36a6.38 6.38 0 0 1-6.36-6.37v-94.7a6.38 6.38 0 0 1 6.37-6.36h47.45a6.38 6.38 0 0 1 6.37 6.37v94.7a6.38 6.38 0 0 1-6.38 6.36zM44.36 97.2a4.5 4.5 0 0 0-4.48 4.48v94.7a4.5 4.5 0 0 0 4.48 4.48h47.46a4.5 4.5 0 0 0 4.48-4.5v-94.7a4.5 4.5 0 0 0-4.48-4.48H44.36zm28.51 7.88h-9.55a.94.94 0 1 1 0-1.88h9.55a.94.94 0 1 1 0 1.88m-4.77 93.17a4.35 4.35 0 1 1 4.34-4.35 4.36 4.36 0 0 1-4.35 4.35zm0-6.82a2.47 2.47 0 1 0 2.46 2.47 2.47 2.47 0 0 0-2.47-2.48zm19.67-80.33H48.4a3.66 3.66 0 0 0-3.65 3.66v68.53a3.66 3.66 0 0 0 3.66 3.65h39.37a3.66 3.66 0 0 0 3.66-3.66v-68.55a3.66 3.66 0 0 0-3.66-3.65zM48.4 113h39.37a1.77 1.77 0 0 1 1.77 1.77V121a22.6 22.6 0 0 0-6.13 3.38 3.53 3.53 0 0 1-3.56.85 15.5 15.5 0 0 0-4.7-.9c-4.15 0-7.4 2.35-9.2 6.6a2.37 2.37 0 0 0 .14 2.1 2.34 2.34 0 0 0 1.73 1.18 71 71 0 0 0 10.16.62c3.22 0 7.7-.14 11.58-.52v20.73a44 44 0 0 1-11.05 3.88c-17.36 3.18-28.12 15.66-31.86 22v-66.15A1.77 1.77 0 0 1 48.4 113m41.14 19.44a102 102 0 0 1-21.7-.07.25.25 0 0 1-.23-.23.52.52 0 0 1 0-.45c1-2.5 3.24-5.44 7.54-5.44a14.3 14.3 0 0 1 4.17.8 5.2 5.2 0 0 0 5.32-1.25 16.1 16.1 0 0 1 4.92-2.8v9.45zm-1.77 52.63H48.4a1.77 1.77 0 0 1-1.52-.9c2.66-4.6 12.75-19.87 31.86-23.37a37.3 37.3 0 0 0 10.8-3.62v26.12a1.77 1.77 0 0 1-1.77 1.75zm327.87 17.66H254.5a6.38 6.38 0 0 1-6.36-6.37V87.06a6.38 6.38 0 0 1 6.37-6.36h161.14a6.38 6.38 0 0 1 6.36 6.37v109.3a6.38 6.38 0 0 1-6.36 6.36zM254.5 82.58a4.5 4.5 0 0 0-4.5 4.5v109.3a4.5 4.5 0 0 0 4.48 4.48h161.16a4.5 4.5 0 0 0 4.5-4.5V87.07a4.5 4.5 0 0 0-4.5-4.48H254.5zm115.64 33.97a136.6 136.6 0 0 1-20.2-1.37.94.94 0 0 1-.58-.33l-.63-.78a.93.93 0 0 1-.2-.66c.44-6.84 7.78-12.2 16.7-12.2a15.13 15.13 0 0 1 11.3 4.38 3.74 3.74 0 0 0 3.65.82 15.9 15.9 0 0 1 4.76-.9c4 0 7.26 2.22 9.1 6.24a2.57 2.57 0 0 1-.1 2.32 2.53 2.53 0 0 1-1.94 1.27 202 202 0 0 1-21.86 1.22zm-19.55-3.17c16.88 2.5 35.77.7 41.18.1a.65.65 0 0 0 .5-.34.67.67 0 0 0 0-.6c-1.06-2.35-3.2-5.14-7.37-5.14a14.3 14.3 0 0 0-4.15.8 5.6 5.6 0 0 1-5.5-1.2 13.28 13.28 0 0 0-10-3.92c-7.77 0-14.18 4.4-14.8 10.1zM257 146.07a4.35 4.35 0 1 1 4.35-4.35 4.36 4.36 0 0 1-4.35 4.35m0-6.82a2.47 2.47 0 1 0 2.47 2.47 2.47 2.47 0 0 0-2.47-2.48z\" class=feat-3></path><path d=\"M397.78 162.45c-4.24-4.3-13-6.6-24.27-8.6-30.57-5.44-77.43 13.65-99.27-16.64-3.1-4.3-10.58-3.15-10.54 2.86.1 15.7.2 31.42.6 47.14.06 2.9 2.52 5.85 5.64 5.65 22.6-1.4 43.95.33 66.35 1.33 8.9.4 17.8-1.5 26.78-1.42 12 .1 24 1.06 35.93 1.58 3.3.15 5.35-2.73 5.66-5.65.77-7.2 1.2-14.15 1.33-21.37.07-4.8-4.84-6.44-8.22-4.88zm-64.12 2.88h-.2.27zm30.05-1.52a5.4 5.4 0 0 0-1.46 1.12l-.27.3a6.06 6.06 0 0 0-3.8-1.47c-.14-.13-.3-.25-.47-.37q3 .13 6 .43zM289 90.8c-4.5-.5-15.1-2.36-20.3.8-1.4-1.93-5.2-1.42-5.1 1.58l.23 7.3c.07 2.3 2.3 3.3 4.25 2.43 6.93-3.06 14.57-4 21.68-6.54a2.84 2.84 0 0 0-.76-5.55z\" class=feat-1></path><path d=\"M404.4 180.66c.48-3.57.84-7.13 1-10.8a2.4 2.4 0 0 0-1.33-2.4c-.24-2.62-3.84-3.07-5.25-1-.45.65-.9 1.28-1.4 1.9C385.73 179 367 182 350.46 182.62c-1.33-.14-2.68-.25-4.06-.33a2.7 2.7 0 0 0-1.34.23c-10-1.66-19.8-2.84-30.24-1.7-2 .2-7.18 1.3-13.3 2.4a2.73 2.73 0 0 0-2.3-1.23 58.5 58.5 0 0 1-31.22-6.13 2.82 2.82 0 0 0-2.92 4.82c-2 9-.8 11.5 5.75 11.78 9.1 1.53 19.94 2.45 27.23-2.74h2.54a107.3 107.3 0 0 0 22.3.8 2.5 2.5 0 0 0 1.38.36l5.9-.13a2.64 2.64 0 0 0 1.63.45l3.7-.1c8-.22 16.3-.17 24.36-.77h1.12a3.4 3.4 0 0 0 1.52.56 217 217 0 0 0 28.13 1.6 2.63 2.63 0 0 0 1.4-.4 10 10 0 0 0 3.53.06 3 3 0 0 0 1-.33 2.73 2.73 0 0 0 3.2.24 2.58 2.58 0 0 0 3.57-1.07c1.14-2.13 1.5-3 1.28-4.54l.74-2.83a3.17 3.17 0 0 0-.95-2.97z\" class=feat-2></path><path d=\"M402.55 90.4h-135a3.66 3.66 0 0 0-3.66 3.67v95.3a3.66 3.66 0 0 0 3.65 3.66h135a3.66 3.66 0 0 0 3.66-3.66v-95.3a3.66 3.66 0 0 0-3.65-3.66zm-136.73 3.66a1.77 1.77 0 0 1 1.77-1.77h22.83c-4.8 4.26-11.43 7.12-19.4 8.45a33 33 0 0 1-5.2.58v-7.27zm.34 9.2a31.7 31.7 0 0 0 5.16-.62c9.26-1.55 16.82-5.07 22-10.34h109.23a1.77 1.77 0 0 1 1.77 1.77v70.55c-37.7-22.5-69.6-11.66-69.92-11.54s-18.6 6.15-36-1.62c-10-4.46-22.73-13.8-32.62-21.1v-27.12h.34zm136.4 87.88h-135a1.77 1.77 0 0 1-1.78-1.77v-56.65c9.87 7.23 22.2 16.1 31.9 20.46 18 8.07 36.52 1.95 37.32 1.68.32-.1 31.58-10.87 69.28 11.95v22.57a1.77 1.77 0 0 1-1.73 1.76z\" class=feat-3></path></svg><div class=details><h2>Cross Platform</h2><span>Supports all modern browsers on desktops, tablets and phones. Experience the same consistent behavior and produced HTML across platforms.</span></div></div></div><div id=github-wrapper><div id=github-container><div class=GitHub_button__NOW4F><a class=GitHub_action__jv_N0 target=_blank title=\"Star Quill on GitHub\" href=https://github.com/slab/quill/><svg viewBox=\"0 0 16 16\"><path d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.3 6.53 5.47 7.6.4.06.55-.18.55-.4v-1.48c-2.02.37-2.54-.5-2.7-.94-.1-.23-.48-.94-.82-1.13-.28-.15-.68-.52 0-.53.62 0 1.07.58 1.22.82.72 1.2 1.87.87 2.33.66.07-.52.28-.87.5-1.07-1.77-.2-3.63-.9-3.63-3.95 0-.87.3-1.6.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.2 2.2.83.64-.18 1.32-.27 2-.27s1.36.1 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.93.08 2.13.5.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.3.25.54.73.54 1.48v2.2c0 .22.15.47.55.4C13.7 14.52 16 11.52 16 8c0-4.42-3.58-8-8-8\"></path></svg>Star</a><a class=GitHub_count__0bC6I target=_blank title=\"Quill Stargazers\" href=https://github.com/slab/quill/stargazers>46,510</a></div></div></div><hr><div class=\"feature row\"><div class=\"columns details\"><h2>Fits Like a Glove</h2><span>Used in small projects and giant Fortune 500s alike. Start simple with the Quill core then easily customize or add your own extensions later if your product needs grow.</span><a class=action-link href=https://quilljs.com/docs/quickstart>Learn More</a></div><div class=columns><svg xmlns=http://www.w3.org/2000/svg viewBox=\"0 0 460 225\"><path d=\"M280.62 52.53A3.27 3.27 0 0 0 284 53.9q-.6-5.92-1.4-11.84l-.34-2.47a3.37 3.37 0 0 0-3-.1 9.5 9.5 0 0 0-2.56.12c-2.9.53-6.36 1-9.08 2.25-2.3 1-4.9 3.24-5.7 5.83l-.24-.06c-3.8-.82-5.4 5-1.6 5.82 5.12 1.1 10.57 2.25 15.8 1.08a8.4 8.4 0 0 0 4.43-2.45c.15.15.22.3.32.43zm-5.25-6.3a19 19 0 0 1 2.57-.2c0 .16.06.3.1.46a9.4 9.4 0 0 0-2.67-.26\" class=feat-1></path><path d=\"M282.5 42.18c0-3.53-5-3.85-5.87-.95-.16-.15-.32-.3-.5-.46-2.9-2.54-7.2 1.72-4.26 4.27a14.7 14.7 0 0 1 4.73 7.45c.9 3.27 5.93 2.6 5.93-.8q0-4.77-.02-9.52z\" class=feat-2></path><path d=\"M416.12 185.58c-21.12.94-42.25 1.22-63.4 1-9.9-.1-24.12-3.78-33 1.8.4-3.25-4.83-4.47-6-1l-3.72 7.78c-1.4 2 .5 4.38 2.6 4.54 24.94 1.92 50.32.6 75.3.62 16.8 0 24.8 4.48 31.18-10.9.7-1.8-1.18-3.92-2.96-3.84\" class=feat-1></path><path d=\"M311.43 201.2c32.6-.47 70.54 4.08 102.4-3.4 3.77-.9 2.17-6.72-1.6-5.83-31.35 7.38-68.65 2.73-100.8 3.18-3.87.05-3.88 6.1 0 6z\" class=feat-2></path><path d=\"M372.5 152.5c-23.1-1.26-46.63 2.3-69.76.67-1.16-.08-1.16 1.73 0 1.8 23.13 1.63 46.65-1.9 69.77-.67 1.17.06 1.17-1.75 0-1.8zm-71.88-13.72c24.67.84 49.18-2 74-.7 1.16.07 1.16-1.74 0-1.8-24.83-1.33-49.35 1.53-74 .7a.9.9 0 0 0 0 1.8m6.24 54.02c-.07-1.75-1.9-3.7-3.82-2.9-4 1.63-10-1.65-14.65-3.12a2.6 2.6 0 0 0-1.1-.53 61.7 61.7 0 0 0-16.06-2 3.5 3.5 0 0 0-1.28.27c-3.08-.2-6.15-.4-9.24-.5s-3.7 3.65-1.9 5.3c-.1 5-.26 10-.33 15 0 2-.5 4.53.9 6.26 3.65 4.5 15.9 1.07 20.8.87 6.14-.25 18.75 3.1 24.1-.6 4.7-3.24 2.76-13.14 2.56-18.05z\" class=feat-1></path><path d=\"M307 207a13.5 13.5 0 0 1-1.08-2c.93-3.92.44-8.9.67-13.42.17-3.55-4.86-3.84-5.86-.9a3.16 3.16 0 0 0-4.28 2.72c0 .56-.1 1.1-.16 1.66a11 11 0 0 1-.83 2.64 15 15 0 0 1-.84 1.5 3 3 0 0 0-.6.4 25.5 25.5 0 0 1-6.6 4.1c-9.28-3.56-17.4-4.83-27.88.16-2.8 1.34-1.4 4.94 1.07 5.46a3 3 0 0 0 2.9 3.08c3.45.15 6.86.2 10.2.05l12.28.07c2.63 0 6.48.92 8.4-1.45a3.5 3.5 0 0 0 .3-.43 2.45 2.45 0 0 0 2.6 1.38c.38 0 .74-.07 1.1-.13a52 52 0 0 1 6.05-.33A3 3 0 0 0 307 207\" class=feat-2></path><path d=\"M170.3 17.4c31.4 38.57 13.46 96.78 2.25 140.48-1 3.76 4.85 5.37 5.82 1.6 11.9-46.4 29.55-105.4-3.8-146.35-2.46-3-6.7 1.28-4.28 4.27zm28.92 178.27c.07-2.75.64-5.4-2.3-6.8-3.3-1.55-9.34 1.5-12.5 2.14a104.4 104.4 0 0 1-14.64 2c-.84.05-7.83.63-10.34.68a3 3 0 0 0-.18-.25 3.48 3.48 0 0 0-3.27-1.3c-.8-3-5.9-2.72-5.93.85 0 3.88-1.76 13.1.87 16.35 2.34 2.9 7.15 1.8 10.37 1.82l23.45.1c3.63 0 10.28 1.66 13.15-1.38 2.5-2.7 1.24-10.87 1.32-14.2z\" class=feat-1></path><path d=\"M199.46 190.25c.1-3.08-3.66-3.7-5.3-1.9-1.55-1-4.17-.57-4.76 1.6-2.68 9.9-11.34 9.6-19.77 11.25-6.1 1.2-12.84 1.6-18.34 4.57-2.8 1.5-1.3 5.43 1.5 5.62a193 193 0 0 0 30.12-.13 65 65 0 0 0 7.6-.55 4.8 4.8 0 0 0 2.75.8c8.66.12 6.04-16.84 6.2-21.27z\" class=feat-2></path><path d=\"M90.67 195a2.63 2.63 0 0 0-.68-1.93 4 4 0 0 0 .07-1.6c-.9-6.4-9.87-7.46-15.2-7-3.14.28-5.64 1.44-8.5 2.54-6.92 2.68-14.2 3.14-21.55 3.7a3.2 3.2 0 0 0-1.92 5.48 13 13 0 0 0-1.28.65 3.14 3.14 0 0 0-1.4 3.4l.2 1.23a2.8 2.8 0 0 0 1.2 1.7 12 12 0 0 0 0 4c.95 5.94 10 5.28 14.72 5.47 5.62.23 11.18-.6 16.77-1 4.22-.33 10 .82 14-.73 5.8-2.25 3.3-10.83 3.57-15.9zm-43.2 12.06.2.16a.16.16 0 0 1-.2-.16m34.1-1.14a14 14 0 0 0 1.93-.48 5.8 5.8 0 0 1-1.92.47z\" class=feat-1></path><path d=\"M87.92 187.52a3.6 3.6 0 0 0-3.44.53c-4.92 4.14-6.68 9.57-13.45 11.68-7 2.2-15.14 2.44-22.46 2.65a2.9 2.9 0 0 0-2.9 2.8c-3.48.7-3.63 5.84.27 6 14.1.45 28.22.1 42.3.7a3 3 0 0 0 2.9-3.88c-1.57-5.2.8-13 1.43-18.25.34-2.75-2.76-3.5-4.65-2.23M84.72 202a28 28 0 0 0-.05 3.72l-1.54-.05a22.7 22.7 0 0 0 1.6-3.67z\" class=feat-2></path><path d=\"M87.74 175.87h-9.32a3.57 3.57 0 1 1 0-7.14h1.48a1 1 0 0 0 1-1v-7.62a1 1 0 0 0-1-1H54.42a1 1 0 0 0-1 1v7.63a1 1 0 0 0 1 1h1.5a3.57 3.57 0 1 1 0 7.14h-10a3.9 3.9 0 0 0-3.9 3.9v29.08a3.9 3.9 0 0 0 3.9 3.9h41.82a3.9 3.9 0 0 0 3.9-3.9v-29.08a3.9 3.9 0 0 0-3.9-3.9zm-41.82 2h10a5.58 5.58 0 1 0 0-11.16h-.5v-5.6H78.9v5.6h-.48a5.58 5.58 0 1 0 0 11.17h9.32a1.9 1.9 0 0 1 1.9 1.9v7.15a51.2 51.2 0 0 0-17.3.74A191.4 191.4 0 0 1 44 191.4v-11.63a1.9 1.9 0 0 1 1.92-1.9m41.82 32.86H45.92a1.9 1.9 0 0 1-1.92-1.88V193.4a194 194 0 0 0 28.7-3.76 48.8 48.8 0 0 1 16.9-.67v19.88a1.9 1.9 0 0 1-1.86 1.9zm119.8-133.17c-1.1-46.28-28.66-62.3-34.17-65a2.42 2.42 0 0 0-3.48 2.5l2 14.6a1 1 0 0 0 1.08.86 14.7 14.7 0 0 1 5.2.56 10.4 10.4 0 0 1-4.75 2 1 1 0 0 0-.92 1.14l1.1 8a348.7 348.7 0 0 1 1.3 83.18l-.25 2.45c-1.16 11-2.27 21.63-2.9 31.28h-9.37a1 1 0 0 0-1 1v7.62a1 1 0 0 0 1 1h1.5a3.57 3.57 0 1 1 0 7.14h-10a3.9 3.9 0 0 0-3.9 3.9v29.07a3.9 3.9 0 0 0 3.9 3.9h41.8a3.9 3.9 0 0 0 3.9-3.9v-29.1a3.9 3.9 0 0 0-3.9-3.9h-9.3a3.57 3.57 0 1 1 0-7.14h1.48a1 1 0 0 0 1-1v-7.62a1 1 0 0 0-1-1h-7.7c2.7-10.46 7.58-20.94 12.35-31.2 1.87-4 3.73-8 5.53-12.1a1.94 1.94 0 0 0 .2-1.53 1.4 1.4 0 0 0-.65-.66 11.94 11.94 0 0 1-4.9-3.9 16.8 16.8 0 0 1 6 1.74 1 1 0 0 0 .82.06 1 1 0 0 0 .6-.57c5.37-13.27 7.67-23.56 7.44-33.37zm-53.68 100.32h10a5.58 5.58 0 1 0 0-11.16h-.48v-5.6h8.23c-.22 3.87-.38 7.6-.42 11.1a44.7 44.7 0 0 0 4.2 19.24c-1.88.18-3.92.3-6.2.3-11.7 0-16.08-2.25-17.2-3v-9a1.9 1.9 0 0 1 1.88-1.88zm35.34 24.85a.42.42 0 0 1 .15.3v2.82a42.62 42.62 0 0 1-16.17-33.62c0-3.5.2-7.23.43-11.12h4a61.8 61.8 0 0 0-1.64 13.65c-.04 15.25 11.04 25.98 13.23 27.98zm6.5 8h-41.84a1.9 1.9 0 0 1-1.9-1.9v-17.72c2.3 1.13 7.26 2.67 17.2 2.67a66 66 0 0 0 7.16-.38 42.45 42.45 0 0 0 13.55 15.3 1 1 0 0 0 .48.13 1 1 0 0 0 1-1v-4.8a2.45 2.45 0 0 0-.8-1.78 42.7 42.7 0 0 1-7.35-9c1.74-.38 3.35-.8 4.9-1.2a46.4 46.4 0 0 1 9.47-1.78v19.58a1.9 1.9 0 0 1-1.9 1.9zm-8.85-49.63v5.6h-.48a5.58 5.58 0 1 0 0 11.17h9.32a1.9 1.9 0 0 1 1.88 1.9v7.48a48.5 48.5 0 0 0-10 1.85c-1.7.44-3.48.9-5.44 1.32a32.8 32.8 0 0 1-4.2-15.67 60.2 60.2 0 0 1 1.7-13.64h7.2zm11.77-51.94a17.16 17.16 0 0 0-7.88-1.5 1 1 0 0 0-.82 1.46 14.75 14.75 0 0 0 6.2 6c-1.74 4-3.6 7.95-5.44 11.9-4.9 10.5-9.88 21.26-12.62 32h-4.3c.63-9.56 1.74-20.1 2.9-31.06l.25-2.45a350.6 350.6 0 0 0-1.3-83.64l-1-7.06a15.25 15.25 0 0 0 6.13-3.3 1 1 0 0 0-.14-1.6 13.2 13.2 0 0 0-6.88-1.55l-1.86-13.68a.4.4 0 0 1 .6-.43c5.33 2.65 32 18.16 33.05 63.3.25 9.34-1.9 19.1-6.9 31.63z\" class=feat-3></path><path d=\"M371.87 69.5c-19.16-1.4-38.57 1.68-57.64 1.3q.08.9.14 1.8c19 .37 38.38-2.7 57.5-1.3 1.13.08 1.13-1.73 0-1.8m.63 16.7c-19.37-1.37-39 .9-58.48.93q-.13.9-.28 1.8c19.55 0 39.3-2.3 58.77-.93 1.17.08 1.17-1.73 0-1.8zm-.26 16.56c-20.68-1.34-41.6.12-62.35.7l-.66 1.84c21-.58 42.1-2.08 63-.73 1.16.08 1.16-1.73 0-1.8zm1.14 16.89c-23.3 0-47-1.18-70.27.35l-.84 1.86c23.54-1.62 47.53-.4 71.12-.4a.9.9 0 0 0 0-1.8zM278.4 17.4c31.43 38.57 13.48 96.78 2.27 140.48-1 3.76 4.85 5.37 5.82 1.6 11.9-46.4 29.5-105.4-3.82-146.34-2.45-3-6.7 1.28-4.27 4.27z\" class=feat-1></path><path d=\"M418.82 184.7h-30.26V53.36a15 15 0 0 0-15-15h-67.22C297.48 21.43 285 14.27 281.5 12.52A2.42 2.42 0 0 0 278 15l2 14.6a1 1 0 0 0 1.1.86 14.8 14.8 0 0 1 5.2.56 10.36 10.36 0 0 1-4.76 2 1 1 0 0 0-.7.37 1 1 0 0 0-.23.76l.58 4.22h-7.52a15 15 0 0 0-15 15 1 1 0 0 0 1 1h23.43a348 348 0 0 1-.12 71l-.23 2.62c-1.15 11-2.26 21.53-2.9 31.14h-9.3a1 1 0 0 0-1 1v7.62a1 1 0 0 0 1 1h1.5a3.57 3.57 0 1 1 0 7.14h-10a3.9 3.9 0 0 0-3.9 3.9v29.08a3.9 3.9 0 0 0 3.9 3.9h41.82a3.9 3.9 0 0 0 3.9-3.9v-8.17h97.07a15 15 0 0 0 15-15 1 1 0 0 0-1.02-1M281.46 40.4v.25l-.4-.26h.37zm-20.7 11.94a12.92 12.92 0 0 1 21.1-9q.6 4.5 1.07 9h-22.18zm24 75.83.26-2.6a351 351 0 0 0-1.32-83.64l-1-7.06a15.3 15.3 0 0 0 6.14-3.3 1 1 0 0 0-.14-1.6 13.4 13.4 0 0 0-6.88-1.55L280 14.75a.4.4 0 0 1 .17-.4.4.4 0 0 1 .43 0c5.33 2.65 32 18.16 33.05 63.3.22 9.27-1.92 19.04-6.92 31.56a17.2 17.2 0 0 0-7.88-1.5 1 1 0 0 0-.8 1.47 14.76 14.76 0 0 0 6.18 6c-1.74 4-3.58 7.94-5.43 11.9-4.9 10.5-9.88 21.24-12.62 32h-4.3c.62-9.5 1.72-20 2.87-30.9zm12.56 74.56a.44.44 0 0 1 .15.3v2.83a42.6 42.6 0 0 1-16.17-33.62c0-3.5.2-7.23.43-11.12h4a61.8 61.8 0 0 0-1.73 13.64c0 15.24 11.1 25.98 13.32 27.97m-37.15-23a1.9 1.9 0 0 1 1.9-1.9h10a5.58 5.58 0 1 0 0-11.15h-.5v-5.6h8.16c-.23 3.87-.4 7.6-.43 11.1a46.5 46.5 0 0 0 1.3 11 87.6 87.6 0 0 0-20.42-.17v-3.3zm45.6 29.08a1.9 1.9 0 0 1-1.9 1.9h-41.8a1.9 1.9 0 0 1-1.9-1.9v-23.7a86.6 86.6 0 0 1 21 .3A43.16 43.16 0 0 0 298 208.7a1 1 0 0 0 .47.13 1 1 0 0 0 .52-.15 1 1 0 0 0 .48-.86v-4.8a2.48 2.48 0 0 0-.8-1.77 42.4 42.4 0 0 1-10-14 28 28 0 0 1 2.9 1.18c4.15 2 7.62 3 10.38 3a8.4 8.4 0 0 0 3.06-.52 6 6 0 0 0 .72-.33v18.28zm0-20.87a3 3 0 0 1-1.55 1.1c-1.74.6-5.18.7-11.7-2.47a32 32 0 0 0-4.74-1.8 31 31 0 0 1-1.7-10 60.2 60.2 0 0 1 1.7-13.65H295v5.62h-.48a5.58 5.58 0 1 0 0 11.16h9.33a1.9 1.9 0 0 1 1.9 1.9v8.2zm-1.9-12.1h-9.32a3.57 3.57 0 1 1 0-7.14H296a1 1 0 0 0 1-1v-7.63a1 1 0 0 0-1-1h-7.8c2.73-10.47 7.6-20.95 12.37-31.2 1.86-4 3.72-8 5.52-12.1a1.94 1.94 0 0 0 .2-1.53 1.4 1.4 0 0 0-.67-.66 11.94 11.94 0 0 1-4.9-3.92 16.9 16.9 0 0 1 6 1.75 1 1 0 0 0 .83.07 1 1 0 0 0 .6-.57c5.4-13.26 7.7-23.55 7.47-33.36-.38-15.63-3.77-27.8-8.3-37.17h66.23a13 13 0 0 1 13 13V184.7h-71a1 1 0 0 0-1 1 13 13 0 0 1-6.75 11.36v-17.3a3.9 3.9 0 0 0-3.92-3.9zm101 22.8H309a15 15 0 0 0 7.45-11.95h101.3a13 13 0 0 1-12.9 12z\" class=feat-3></path></svg></div></div></div></div><footer><div class=container><div class=\"logo row\"><svg xmlns=http://www.w3.org/2000/svg viewBox=\"0 0 942 559.9\"><circle cx=749 cy=125.5 r=25.7 class=logo></circle><path d=\"M643.3 211.5v91.8c0 19.5-3.5 90.9-76.1 90.9-75.9 0-74.3-71.3-74.3-98.8v-83.8h-39v94.1s-8.1 128.5 111.3 128.5 115.4-124.5 115.4-124.5v-98.2zM816.5 45.2H855v378.5h-38.5zM504 472.7c-79.4 0-194.9-12-268.3-12.8-12.2 0-23 1.5-32.6 3.9l13-11.6c14.3-12.9 37.6-20.9 43.4-22 94.4-18.6 164.8-93.7 164.8-212.8C424.3 83.2 329.3 0 212.1 0S0 76.9 0 217.3c0 126.8 84.9 208 193.1 216.5 0 0 5.7.1 6.4 3.6.6 3.1-4.8 7.6-4.8 7.6l-64.4 59.6 12.4 13.4 23.8-21.3c13.3-10.6 35.1-23.6 62.1-23.6 89.3 0 188.2 89.1 280.1 86.9 134.4-3.2 165.7-93 169.1-104.6.2-.4-55.6 17.3-173.8 17.3M39.4 217.3c0-114.3 77.3-177 172.8-177 95.4 0 172.8 67.7 172.8 177 0 112.6-77.3 177-172.8 177-95.5-.1-172.8-67.8-172.8-177M903.5 45.2H942v378.5h-38.5zm-174 165.9H768v212.5h-38.5z\" class=logo></path></svg></div><h1>Your powerful rich text editor.</h1><div class=\"actions row\"><a class=\"action documentation\" href=https://quilljs.com/docs/quickstart>Documentation</a><a class=action href=https://quilljs.com/playground/snow>Playground</a></div></div></footer></div></div><next-route-announcer><p aria-live=assertive id=__next-route-announcer__ role=alert style=border:0px;clip:rect(0px,0px,0px,0px);height:1px;margin:-1px;overflow:hidden;padding:0px;position:absolute;top:0px;width:1px;white-space:nowrap;overflow-wrap:normal></p></next-route-announcer><harper-render-box popover=manual style=pointer-events:none;border:none class=sf-hidden><template shadowrootmode=open></template></harper-render-box><script data-template-shadow-root>(()=>{document.currentScript.remove();processNode(document);function processNode(node){node.querySelectorAll(\"template[shadowrootmode]\").forEach(element=>{let shadowRoot = element.parentElement.shadowRoot;if (!shadowRoot) {try {shadowRoot=element.parentElement.attachShadow({mode:element.getAttribute(\"shadowrootmode\"),delegatesFocus:element.getAttribute(\"shadowrootdelegatesfocus\")!=null,clonable:element.getAttribute(\"shadowrootclonable\")!=null,serializable:element.getAttribute(\"shadowrootserializable\")!=null});shadowRoot.innerHTML=element.innerHTML;element.remove()} catch (error) {} if (shadowRoot) {processNode(shadowRoot)}}})}})()</script>"
  },
  {
    "path": "packages/chrome-plugin/tests/pages/simple_inputs_disabled.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<body>\n  <h1>disabled Textarea</h1>\n  <textarea rows=\"5\" cols=\"33\" disabled>tis iss a mispeled sentce</textarea>\n\n  <h1>readonly Textarea</h1>\n  <textarea rows=\"5\" cols=\"33\" readonly>tis iss a mispeled sentce</textarea>\n\n  <h1>readonly + disabled Textarea</h1>\n  <textarea rows=\"5\" cols=\"33\" disabled readonly>tis iss a mispeled sentce</textarea>\n\n  <h1>disabled Input</h1>\n  <input type=\"text\" spellcheck=\"true\" disabled value=\"This is an test\">\n\n  <h1>readonly Input</h1>\n  <input type=\"text\" spellcheck=\"true\" readonly value=\"This is an test\">\n\n  <h1>readonly + disabled Input</h1>\n  <input type=\"text\" spellcheck=\"true\" readonly disabled value=\"This is an test\">\n</body>\n\n</html>\n"
  },
  {
    "path": "packages/chrome-plugin/tests/pages/simple_textarea.html",
    "content": "<!DOCTYPE html>\n<html>\n  <body>\n    <textarea rows=\"5\" cols=\"33\"></textarea>\n  </body>\n</html> \n"
  },
  {
    "path": "packages/chrome-plugin/tests/prosemirror.spec.ts",
    "content": "import {\n\tgetProseMirrorEditor,\n\ttestBasicSuggestion,\n\ttestCanBlockRuleSuggestion,\n\ttestCanIgnoreSuggestion,\n\ttestMultipleSuggestionsAndUndo,\n} from './testUtils';\n\nconst TEST_PAGE_URL = 'https://prosemirror.net/';\n\ntestBasicSuggestion(TEST_PAGE_URL, getProseMirrorEditor);\ntestCanIgnoreSuggestion(TEST_PAGE_URL, getProseMirrorEditor);\ntestCanBlockRuleSuggestion(TEST_PAGE_URL, getProseMirrorEditor);\ntestMultipleSuggestionsAndUndo(TEST_PAGE_URL, getProseMirrorEditor);\n"
  },
  {
    "path": "packages/chrome-plugin/tests/quill.spec.ts",
    "content": "import { testPageHasNHighlights } from './testUtils';\n\nconst TEST_PAGE_URL = 'http://localhost:8081/quill_simple.html';\n\ntestPageHasNHighlights(TEST_PAGE_URL, 1);\n"
  },
  {
    "path": "packages/chrome-plugin/tests/review_banner.spec.ts",
    "content": "import { expect, test } from './fixtures';\n\ntest.describe('review banner', () => {\n\ttest.skip(({ browserName }) => browserName === 'firefox', 'Review prompt disabled in Firefox');\n\n\ttest('review request hidden before 14 days', async ({ context, page }) => {\n\t\tconst background = context.serviceWorkers()[0] ?? (await context.waitForEvent('serviceworker'));\n\t\tconst extensionId = background.url().split('/')[2];\n\n\t\tconst popupUrl = `chrome-extension://${extensionId}/popup.html`;\n\t\tawait page.goto(popupUrl);\n\n\t\tawait page.getByText(\"Let's start writing\").click();\n\n\t\tawait expect(page.getByText('Harper is')).toBeVisible();\n\t\tawait expect(page.getByText('Would you mind giving us a review?')).toHaveCount(0);\n\t});\n\n\ttest('review request shown after 14 days', async ({ context, page }) => {\n\t\tconst background = context.serviceWorkers()[0] ?? (await context.waitForEvent('serviceworker'));\n\t\tconst extensionId = background.url().split('/')[2];\n\n\t\tconst popupUrl = `chrome-extension://${extensionId}/popup.html`;\n\t\tawait page.goto(popupUrl);\n\n\t\t// 8 days\n\t\tawait page.clock.install();\n\t\tawait page.clock.fastForward(15 * 1000 * 60 * 60 * 24);\n\n\t\tawait page.getByText(\"Let's start writing\").click();\n\n\t\tawait expect(page.getByText('Harper is')).toBeVisible();\n\t\tawait expect(page.getByText('Would you mind giving us a review?')).toHaveCount(1);\n\t});\n});\n"
  },
  {
    "path": "packages/chrome-plugin/tests/simple_inputs_disabled.spec.ts",
    "content": "import { test } from './fixtures';\nimport { assertHarperHighlightBoxes } from './testUtils';\n\nconst TEST_PAGE_URL = 'http://localhost:8081/simple_inputs_disabled.html';\n\ntest('Ignores disabled and readonly inputs', async ({ page }) => {\n\tawait page.goto(TEST_PAGE_URL);\n\n\tawait page.waitForTimeout(6000);\n\n\t// All inputs on this page are disabled or read-only, so no lint boxes should be drawn.\n\tawait assertHarperHighlightBoxes(page, []);\n});\n"
  },
  {
    "path": "packages/chrome-plugin/tests/simple_textarea.spec.ts",
    "content": "import { test } from './fixtures';\nimport {\n\tassertHarperHighlightBoxes,\n\tassertLocatorIsFocused,\n\tclickHarperHighlight,\n\tgetTextarea,\n\treplaceEditorContent,\n\ttestBasicSuggestion,\n\ttestCanBlockRuleSuggestion,\n\ttestCanIgnoreSuggestion,\n\ttestMultipleSuggestionsAndUndo,\n} from './testUtils';\n\nconst TEST_PAGE_URL = 'http://localhost:8081/simple_textarea.html';\n\ntestBasicSuggestion(TEST_PAGE_URL, getTextarea);\ntestCanIgnoreSuggestion(TEST_PAGE_URL, getTextarea);\ntestCanBlockRuleSuggestion(TEST_PAGE_URL, getTextarea);\ntestMultipleSuggestionsAndUndo(TEST_PAGE_URL, getTextarea);\n\ntest('Wraps correctly', async ({ page }, testInfo) => {\n\tawait page.goto(TEST_PAGE_URL);\n\n\tconst editor = getTextarea(page);\n\tawait replaceEditorContent(\n\t\teditor,\n\t\t'This is a test of the Harper grammar checker, specifically   if \\nit is wrapped around a line weirdl y',\n\t);\n\n\tawait page.waitForTimeout(6000);\n\n\tif (testInfo.project.name == 'chromium') {\n\t\tawait assertHarperHighlightBoxes(page, [\n\t\t\t{ x: 233.90625, y: 44, width: 48, height: 19 },\n\t\t\t{ x: 281.90625, y: 44, width: 8, height: 19 },\n\t\t\t{ x: 10, y: 61, width: 8, height: 19 },\n\t\t\t{ x: 241.90625, y: 27, width: 24, height: 19 },\n\t\t]);\n\t} else {\n\t\tawait assertHarperHighlightBoxes(page, [\n\t\t\t{ x: 10, y: 71, width: 57.599998474121094, height: 17 },\n\t\t\t{ x: 218.8000030517578, y: 26, width: 21.600006103515625, height: 17 },\n\t\t]);\n\t}\n});\n\ntest('Scrolls correctly', async ({ page }) => {\n\tawait page.goto(TEST_PAGE_URL);\n\n\tconst editor = getTextarea(page);\n\tawait replaceEditorContent(\n\t\teditor,\n\t\t'This is a test of the the Harper grammar checker, specifically if \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nit scrolls beyo nd the height of the buffer.',\n\t);\n\n\tawait page.waitForTimeout(6000);\n\n\tawait assertHarperHighlightBoxes(page, [{ height: 19, width: 56, x: 97.953125, y: 63 }]);\n});\n\ntest('Can dismiss with escape key', async ({ page }) => {\n\tawait page.goto(TEST_PAGE_URL);\n\n\tconst editor = getTextarea(page);\n\tawait replaceEditorContent(\n\t\teditor,\n\t\t'This is a test of the Harper grammar checker, specifically   if it is wrapped around a line weirdl y',\n\t);\n\n\tawait page.waitForTimeout(6000);\n\n\tawait clickHarperHighlight(page);\n\n\tawait page.locator('.harper-container').waitFor({ state: 'visible' });\n\n\tawait page.keyboard.press('Escape');\n\n\tawait page.locator('.harper-container').waitFor({ state: 'hidden' });\n\n\tawait assertLocatorIsFocused(page, editor);\n});\n"
  },
  {
    "path": "packages/chrome-plugin/tests/slate.spec.ts",
    "content": "import {\n\tgetSlateEditor,\n\ttestBasicSuggestion,\n\ttestCanBlockRuleSuggestion,\n\ttestCanIgnoreSuggestion,\n\ttestMultipleSuggestionsAndUndo,\n} from './testUtils';\n\nconst TEST_PAGE_URL = 'https://slatejs.org';\n\ntestBasicSuggestion(TEST_PAGE_URL, getSlateEditor);\ntestCanIgnoreSuggestion(TEST_PAGE_URL, getSlateEditor);\ntestCanBlockRuleSuggestion(TEST_PAGE_URL, getSlateEditor);\ntestMultipleSuggestionsAndUndo(TEST_PAGE_URL, getSlateEditor);\n"
  },
  {
    "path": "packages/chrome-plugin/tests/testUtils.ts",
    "content": "import type { Locator, Page } from '@playwright/test';\nimport type { Box } from 'lint-framework';\nimport { expect, test } from './fixtures';\n\nexport function randomString(length: number): string {\n\tconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\tlet result = '';\n\tfor (let i = 0; i < length; i++) {\n\t\tresult += chars.charAt(Math.floor(Math.random() * chars.length));\n\t}\n\treturn result;\n}\n\n/** Locate the [`Slate`](https://www.slatejs.org/examples/richtext) editor on the page.  */\nexport function getSlateEditor(page: Page): Locator {\n\treturn page.locator('[data-slate-editor=\"true\"]');\n}\n\n/** Locate the [`Lexical`](https://lexical.dev/) editor on the page.  */\nexport function getLexicalEditor(page: Page): Locator {\n\treturn page.locator('[data-lexical-editor=\"true\"]');\n}\n\n/** Locate the ProseMirror editor on the page.  */\nexport function getProseMirrorEditor(page: Page): Locator {\n\treturn page.locator('.ProseMirror');\n}\n\n/** Locate the Draft.js editor on the page (targets #rich-example on draftjs.org). */\nexport function getDraftEditor(page: Page): Locator {\n\treturn page.locator('#rich-example .public-DraftEditor-content');\n}\n\n/** Replace the content of a text editor. Handles newlines by pressing Enter. */\nexport async function replaceEditorContent(editorEl: Locator, text: string) {\n\tawait editorEl.selectText();\n\tawait editorEl.press('Backspace');\n\n\tconst lines = text.split('\\n');\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tawait editorEl.pressSequentially(lines[i]);\n\t\tif (i < lines.length - 1) {\n\t\t\tawait editorEl.press('Enter');\n\t\t}\n\t}\n}\n\n/** Locate the Harper highlights on a page. */\nexport function getHarperHighlights(page: Page): Locator {\n\treturn page.locator('#harper-highlight');\n}\n\nexport async function assertLocatorIsFocused(page: Page, loc: Locator) {\n\tawait assertLocatorsResolveEqually(page, loc, page.locator(':focus'));\n}\n\n/**  Checks that the two provided locators resolve to the same element. */\nexport async function assertLocatorsResolveEqually(page: Page, a: Locator, b: Locator) {\n\tconst areSame = await page.evaluate(\n\t\t([a, b]) => a === b,\n\t\t[await a.elementHandle(), await b.elementHandle()],\n\t);\n\n\texpect(areSame).toBe(true);\n}\n\n/** Locates the first Harper highlight on the page and clicks it.\n * It should result in the popup opening.\n * Returns whether the highlight was found. */\nexport async function clickHarperHighlight(page: Page): Promise<boolean> {\n\tconst highlights = getHarperHighlights(page);\n\n\t// Wait briefly for at least one highlight to appear.\n\t// If none appear within a reasonable time, return false.\n\ttry {\n\t\tawait highlights.first().waitFor({ state: 'visible', timeout: 12000 });\n\t} catch {\n\t\treturn false;\n\t}\n\n\tconst box = await highlights.first().boundingBox();\n\tif (box == null) return false;\n\n\t// Locate the center of the element and click to open the popup.\n\tconst cx = box.x + box.width / 2;\n\tconst cy = box.y + box.height / 2;\n\tawait page.mouse.click(cx, cy);\n\treturn true;\n}\n\n/** Grab the first `<textarea />` on a page. */\nexport function getTextarea(page: Page): Locator {\n\treturn page.locator('textarea');\n}\n\n/** A string or function that resolves to a test page. */\nexport type TestPageUrlProvider = string | ((page: Page) => Promise<string>);\n\n/** A function that returns an editor locator. */\nexport type EditorLocatorProvider = (page: Page) => Locator;\n\nasync function resolveTestPage(prov: TestPageUrlProvider, page: Page): Promise<string> {\n\tif (typeof prov === 'string') {\n\t\treturn prov;\n\t} else {\n\t\treturn await prov(page);\n\t}\n}\n\n/** Exact-match assertion: `toHaveValue` for form elements, `toHaveText` for contenteditable. */\nasync function assertEditorText(editor: Locator, text: string) {\n\tif (await isFormElement(editor)) {\n\t\tawait expect(editor).toHaveValue(text);\n\t} else {\n\t\tawait expect(editor).toHaveText(text);\n\t}\n}\n\n/** Substring assertion: `inputValue` for form elements, `toContainText` for contenteditable. */\nasync function assertEditorContains(editor: Locator, text: string) {\n\tif (await isFormElement(editor)) {\n\t\tconst value = await editor.inputValue();\n\t\texpect(value).toContain(text);\n\t} else {\n\t\tawait expect(editor).toContainText(text);\n\t}\n}\n\nasync function isFormElement(editor: Locator): Promise<boolean> {\n\treturn editor.evaluate((el) => el.tagName === 'TEXTAREA' || el.tagName === 'INPUT');\n}\n\n/** Test applying a basic suggestion and verify cursor position after replacement. */\nexport async function testBasicSuggestion(\n\ttestPageUrl: TestPageUrlProvider,\n\tgetEditor: EditorLocatorProvider,\n\tsetup?: (page: Page, editor: Locator) => Promise<void>,\n) {\n\ttest('Can apply basic suggestion.', async ({ page }) => {\n\t\ttest.slow();\n\t\tconst url = await resolveTestPage(testPageUrl, page);\n\t\tawait page.goto(url);\n\n\t\tconst editor = getEditor(page);\n\t\tif (setup) {\n\t\t\tawait setup(page, editor);\n\t\t}\n\t\tawait replaceEditorContent(editor, 'This is an test');\n\n\t\tconst opened = await clickHarperHighlight(page);\n\t\texpect(opened).toBe(true);\n\t\tawait page.getByTitle('Replace with \"a\"').click();\n\n\t\tawait page.waitForTimeout(3000);\n\n\t\tawait assertEditorText(editor, 'This is a test');\n\n\t\t// Cursor should be right after \"a\" (pos 9). ArrowRight×3 + Backspace deletes 'e'.\n\t\tawait page.keyboard.press('ArrowRight');\n\t\tawait page.keyboard.press('ArrowRight');\n\t\tawait page.keyboard.press('ArrowRight');\n\t\tawait page.keyboard.press('Backspace');\n\t\tawait assertEditorText(editor, 'This is a tst');\n\n\t\t// Verify typing still works.\n\t\tawait editor.pressSequentially('e');\n\t\tawait assertEditorText(editor, 'This is a test');\n\t});\n}\n\n/** Test ignoring a suggestion. */\nexport async function testCanIgnoreSuggestion(\n\ttestPageUrl: TestPageUrlProvider,\n\tgetEditor: EditorLocatorProvider,\n\tsetup?: (page: Page, editor: Locator) => Promise<void>,\n) {\n\ttest('Can ignore suggestion.', async ({ page }) => {\n\t\ttest.slow();\n\t\tconst url = await resolveTestPage(testPageUrl, page);\n\t\tawait page.goto(url);\n\n\t\tconst editor = getEditor(page);\n\t\tif (setup) {\n\t\t\tawait setup(page, editor);\n\t\t}\n\n\t\tconst cacheSalt = randomString(5);\n\t\tawait replaceEditorContent(editor, cacheSalt);\n\n\t\t// Open the popup for the first highlight and click Ignore.\n\t\tconst opened = await clickHarperHighlight(page);\n\t\texpect(opened).toBe(true);\n\t\tawait page.getByTitle('Ignore this lint').click();\n\n\t\t// Wait for highlights to disappear after ignoring.\n\t\tawait expect(getHarperHighlights(page)).toHaveCount(0);\n\n\t\t// Nothing should change.\n\t\tawait assertEditorText(editor, cacheSalt);\n\t\texpect(await clickHarperHighlight(page)).toBe(false);\n\t\tawait assertLocatorIsFocused(page, editor);\n\t});\n}\n\n/** Test disabling a lint rule via the block button. */\nexport async function testCanBlockRuleSuggestion(\n\ttestPageUrl: TestPageUrlProvider,\n\tgetEditor: EditorLocatorProvider,\n\tsetup?: (page: Page, editor: Locator) => Promise<void>,\n) {\n\ttest('Can hide with rule block button', async ({ page }) => {\n\t\ttest.slow();\n\t\tconst url = await resolveTestPage(testPageUrl, page);\n\t\tawait page.goto(url);\n\n\t\tconst editor = getEditor(page);\n\t\tif (setup) {\n\t\t\tawait setup(page, editor);\n\t\t}\n\t\tawait replaceEditorContent(editor, 'This is an test.');\n\n\t\tconst opened = await clickHarperHighlight(page);\n\t\texpect(opened).toBe(true);\n\n\t\tawait page.getByTitle('Disable the AnA rule').click();\n\n\t\tawait page.waitForTimeout(1000);\n\n\t\tawait assertHarperHighlightBoxes(page, []);\n\t\tawait assertLocatorIsFocused(page, editor);\n\t});\n}\n\n/** Get highlight bounding boxes sorted by visual position (top to bottom, left to right). */\nasync function getSortedHighlightBoxes(page: Page) {\n\tconst highlights = getHarperHighlights(page);\n\tconst count = await highlights.count();\n\tconst boxes: NonNullable<Awaited<ReturnType<Locator['boundingBox']>>>[] = [];\n\n\tfor (let i = 0; i < count; i++) {\n\t\tconst box = await highlights.nth(i).boundingBox();\n\t\tif (box) {\n\t\t\tboxes.push(box);\n\t\t}\n\t}\n\n\tboxes.sort((a, b) => (Math.abs(a.y - b.y) > 5 ? a.y - b.y : a.x - b.x));\n\n\treturn boxes;\n}\n\n/** Test multiline suggestion replacement and undo. */\nexport async function testMultipleSuggestionsAndUndo(\n\ttestPageUrl: TestPageUrlProvider,\n\tgetEditor: EditorLocatorProvider,\n\tsetup?: (page: Page, editor: Locator) => Promise<void>,\n) {\n\ttest('Multiple suggestions and undo.', async ({ page }) => {\n\t\tconst url = await resolveTestPage(testPageUrl, page);\n\t\tawait page.goto(url);\n\n\t\tconst editor = getEditor(page);\n\t\tif (setup) {\n\t\t\tawait setup(page, editor);\n\t\t}\n\t\tawait replaceEditorContent(editor, 'The first tset.\\nThe second tset.\\nThe third tset.');\n\n\t\tawait page.waitForTimeout(6000);\n\n\t\tconst highlights = getHarperHighlights(page);\n\t\tawait expect(highlights).toHaveCount(3);\n\n\t\t// Get highlights sorted by visual position and click on the middle one\n\t\tconst sortedBoxes = await getSortedHighlightBoxes(page);\n\t\texpect(sortedBoxes.length).toBe(3);\n\t\tconst box = sortedBoxes[1];\n\t\tawait page.mouse.click(box.x + box.width / 2, box.y + box.height / 2);\n\n\t\t// Move cursor away to test whether it handles race condition\n\t\tawait editor.press('End');\n\n\t\tawait page.getByTitle('Replace with \"test\"').click();\n\t\tawait page.waitForTimeout(500);\n\n\t\t// Verify only second \"tset\" was corrected\n\t\tawait assertEditorContains(editor, 'first tset');\n\t\tawait assertEditorContains(editor, 'second test');\n\t\tawait assertEditorContains(editor, 'third tset');\n\n\t\t// Undo\n\t\tawait editor.press('Control+z');\n\t\tawait page.waitForTimeout(300);\n\t\tawait assertEditorContains(editor, 'The second tset');\n\t});\n}\n\nexport async function assertHarperHighlightBoxes(page: Page, boxes: Box[]): Promise<void> {\n\tconst highlights = getHarperHighlights(page);\n\tawait expect(highlights).toHaveCount(boxes.length);\n\n\tfor (let i = 0; i < (await highlights.count()); i++) {\n\t\tconst box = await highlights.nth(i).boundingBox();\n\t\texpect(box).not.toBeNull();\n\n\t\tconsole.log(`Expected: ${JSON.stringify(boxes[i])}`);\n\t\tconsole.log(`Got: ${JSON.stringify(box)}`);\n\n\t\tassertBoxesClose(box!, boxes[i]);\n\t}\n}\n\n/** Create a test to assert that a page has a certain number highlights.\n * Wraps `assertPageHasNHighlights` */\nexport async function testPageHasNHighlights(testPageUrl: TestPageUrlProvider, n: number) {\n\ttest(`Page has ${n} highlights`, async ({ page }) => {\n\t\tconst url = await resolveTestPage(testPageUrl, page);\n\t\tawait page.goto(url);\n\n\t\tawait page.waitForTimeout(6000);\n\n\t\tassertPageHasNHighlights(page, n);\n\t});\n}\n\n/** Assert that the page has a specific number of highlights.\n * Useful for making sure certain patterns are ignored. */\nexport async function assertPageHasNHighlights(page: Page, n: number) {\n\tconst highlights = getHarperHighlights(page);\n\texpect(await highlights.count()).toBe(n);\n}\n\n/** An assertion that checks to ensure that two boxes are _approximately_ equal.\n * Leaves wiggle room for floating point error. */\nexport function assertBoxesClose(a: Box, b: Box) {\n\tassertClose(a.x, b.x);\n\tassertClose(a.y, b.y);\n\tassertClose(a.width, b.width);\n\tassertClose(a.height, b.height);\n}\n\nfunction assertClose(actual: number, expected: number) {\n\texpect(Math.abs(actual - expected)).toBeLessThanOrEqual(15);\n}\n"
  },
  {
    "path": "packages/chrome-plugin/tests/typst.spec.ts",
    "content": "import type { Page } from '@playwright/test';\nimport { expect, test } from './fixtures';\nimport { clickHarperHighlight, getHarperHighlights, replaceEditorContent } from './testUtils';\n\nconst TEST_PAGE_URL = 'https://typst.app/play/';\n\nasync function assertHighlightCount(page: Page, count: number) {\n\tawait expect(getHarperHighlights(page)).toHaveCount(count, { timeout: 30000 });\n}\n\ntest('Typst CodeMirror editor can apply a suggestion', async ({ page }) => {\n\tawait page.goto(TEST_PAGE_URL, { waitUntil: 'domcontentloaded' });\n\n\tconst editor = page.locator('.cm-editor .cm-content[contenteditable=\"true\"]').first();\n\tawait expect(editor).toBeVisible({ timeout: 30000 });\n\tawait replaceEditorContent(editor, 'This is an test');\n\n\tawait assertHighlightCount(page, 1);\n\n\texpect(await clickHarperHighlight(page)).toBe(true);\n\tawait page.getByTitle('Replace with \"a\"').click();\n\n\tawait expect(editor).toContainText('This is a test');\n});\n\ntest('Typst CodeMirror handles multiline suggestions distinctly', async ({ page }) => {\n\ttest.setTimeout(120000);\n\tawait page.goto(TEST_PAGE_URL, { waitUntil: 'domcontentloaded' });\n\n\tconst editor = page.locator('.cm-editor .cm-content[contenteditable=\"true\"]').first();\n\tawait expect(editor).toBeVisible({ timeout: 30000 });\n\tawait replaceEditorContent(editor, 'First line an test\\nSecond line an test');\n\n\tawait expect(editor).toContainText('First line an test');\n\tawait expect(editor).toContainText('Second line an test');\n\tawait assertHighlightCount(page, 2);\n\tconst initialHighlightCount = 2;\n\texpect(await clickHarperHighlight(page)).toBe(true);\n\tawait page.getByTitle('Replace with \"a\"').click();\n\n\tconst editorText = await editor.innerText();\n\texpect((editorText.match(/an test/g) ?? []).length).toBe(1);\n\texpect((editorText.match(/a test/g) ?? []).length).toBe(1);\n\tawait assertHighlightCount(page, initialHighlightCount - 1);\n});\n"
  },
  {
    "path": "packages/chrome-plugin/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"ESNext\",\n\t\t\"useDefineForClassFields\": true,\n\t\t\"lib\": [\"DOM\", \"DOM.Iterable\", \"ESNext\"],\n\t\t\"allowJs\": false,\n\t\t\"skipLibCheck\": true,\n\t\t\"verbatimModuleSyntax\": true,\n\t\t\"esModuleInterop\": false,\n\t\t\"allowSyntheticDefaultImports\": true,\n\t\t\"strict\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"module\": \"ESNext\",\n\t\t\"moduleResolution\": \"Node\",\n\t\t\"resolveJsonModule\": true,\n\t\t\"isolatedModules\": true,\n\t\t\"noEmit\": true,\n\t\t\"jsx\": \"react-jsx\"\n\t},\n\t\"include\": [\"src\"],\n\t\"references\": [\n\t\t{\n\t\t\t\"path\": \"./tsconfig.node.json\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/chrome-plugin/tsconfig.node.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"composite\": true,\n\t\t\"module\": \"ESNext\",\n\t\t\"moduleResolution\": \"Node\"\n\t},\n\t\"include\": [\"vite.config.ts\"]\n}\n"
  },
  {
    "path": "packages/chrome-plugin/vite.config.ts",
    "content": "import { crx } from '@crxjs/vite-plugin';\nimport { svelte } from '@sveltejs/vite-plugin-svelte';\nimport tailwindcss from '@tailwindcss/vite';\nimport path from 'path';\nimport copy from 'rollup-plugin-copy';\nimport sveltePreprocess from 'svelte-preprocess';\nimport { defineConfig, loadEnv } from 'vite';\nimport manifest from './src/manifest';\n\nexport default defineConfig(({ mode }) => {\n\tconst env = loadEnv(mode, process.cwd(), '');\n\n\tconst browser = env.TARGET_BROWSER ?? 'chrome';\n\n\tif (!['chrome', 'firefox'].includes(browser)) {\n\t\tthrow new Error('UNSUPPORTED BROWSER TYPE');\n\t}\n\n\tconsole.log(`Building for ${browser}`);\n\n\tconst production = mode === 'production';\n\n\treturn {\n\t\tbuild: {\n\t\t\tminify: false,\n\t\t\toutDir: 'build',\n\t\t\trollupOptions: {\n\t\t\t\toutput: {\n\t\t\t\t\tchunkFileNames: 'assets/chunk-[hash].js',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tplugins: [\n\t\t\tcopy({\n\t\t\t\thook: 'buildStart',\n\t\t\t\ttargets: [\n\t\t\t\t\t{\n\t\t\t\t\t\tsrc: '../harper.js/dist/harper_wasm_bg.wasm',\n\t\t\t\t\t\tdest: './public/wasm',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}),\n\t\t\ttailwindcss(),\n\t\t\tcrx({ manifest, browser }),\n\t\t\tsvelte({\n\t\t\t\tcompilerOptions: {\n\t\t\t\t\tdev: !production,\n\t\t\t\t},\n\t\t\t\tpreprocess: sveltePreprocess(),\n\t\t\t}),\n\t\t],\n\t\tresolve: {\n\t\t\talias: {\n\t\t\t\t'@': path.resolve(__dirname, 'src'),\n\t\t\t},\n\t\t},\n\t\tlegacy: {\n\t\t\tskipWebSocketTokenCheck: true,\n\t\t},\n\t};\n});\n"
  },
  {
    "path": "packages/components/.gitignore",
    "content": "node_modules\n\n# Output\n.output\n.vercel\n.netlify\n.wrangler\n/.svelte-kit\n/build\n/dist\n\n# OS\n.DS_Store\nThumbs.db\n\n# Env\n.env\n.env.*\n!.env.example\n!.env.test\n\n# Vite\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n"
  },
  {
    "path": "packages/components/.npmrc",
    "content": "engine-strict=true\n"
  },
  {
    "path": "packages/components/package.json",
    "content": "{\n\t\"name\": \"components\",\n\t\"version\": \"0.0.1\",\n\t\"scripts\": {\n\t\t\"dev\": \"vite dev\",\n\t\t\"build\": \"vite build && npm run prepack\",\n\t\t\"build:css\": \"TAILWIND_MODE=build tailwindcss -i ./src/lib/styles.css -o ./dist/components.css --minify\",\n\t\t\"preview\": \"vite preview\",\n\t\t\"prepare\": \"svelte-kit sync || echo ''\",\n\t\t\"prepack\": \"svelte-kit sync && svelte-package && pnpm run build:css && publint\",\n\t\t\"check\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json\",\n\t\t\"check:watch\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch\"\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"!dist/**/*.test.*\",\n\t\t\"!dist/**/*.spec.*\"\n\t],\n\t\"style\": \"./dist/components.css\",\n\t\"sideEffects\": [\n\t\t\"**/*.css\"\n\t],\n\t\"svelte\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"type\": \"module\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"svelte\": \"./dist/index.js\"\n\t\t},\n\t\t\"./components.css\": \"./dist/components.css\",\n\t\t\"./style.css\": \"./dist/components.css\"\n\t},\n\t\"peerDependencies\": {\n\t\t\"svelte\": \"^5.0.0\"\n\t},\n\t\"dependencies\": {\n\t\t\"flowbite-svelte\": \"^0.44.24\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^7.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.47.1\",\n\t\t\"@sveltejs/package\": \"^2.5.4\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^6.2.1\",\n\t\t\"@tailwindcss/cli\": \"^4.1.16\",\n\t\t\"@tailwindcss/vite\": \"^4.1.14\",\n\t\t\"flowbite\": \"^3.1.2\",\n\t\t\"publint\": \"^0.3.14\",\n\t\t\"svelte\": \"^5.41.0\",\n\t\t\"svelte-check\": \"^4.3.3\",\n\t\t\"tailwindcss\": \"^4.1.14\",\n\t\t\"typescript\": \"catalog:\",\n\t\t\"vite\": \"^7.1.10\"\n\t},\n\t\"keywords\": [\n\t\t\"svelte\"\n\t]\n}\n"
  },
  {
    "path": "packages/components/src/app.d.ts",
    "content": "// See https://svelte.dev/docs/kit/types#app.d.ts\n// for information about these interfaces\ndeclare global {\n\tnamespace App {\n\t\t// interface Error {}\n\t\t// interface Locals {}\n\t\t// interface PageData {}\n\t\t// interface PageState {}\n\t\t// interface Platform {}\n\t}\n}\n\nexport {};\n"
  },
  {
    "path": "packages/components/src/app.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"%sveltekit.assets%/favicon.svg\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t%sveltekit.head%\n\t</head>\n\t<body data-sveltekit-preload-data=\"hover\">\n\t\t<div style=\"display: contents\">%sveltekit.body%</div>\n\t</body>\n</html>\n"
  },
  {
    "path": "packages/components/src/lib/Button.svelte",
    "content": "<script lang=\"ts\">\nimport { createEventDispatcher } from 'svelte';\nimport type { AnchorHTMLAttributes, ButtonHTMLAttributes } from 'svelte/elements';\nimport Link from './Link.svelte';\n\ntype ButtonSize = 'xs' | 'sm' | 'md' | 'lg';\ntype ButtonColor = 'primary' | 'light' | 'gray' | 'white' | 'dark';\n\nexport let size: ButtonSize = 'md';\nexport let color: ButtonColor | string = 'primary';\nexport let textColor: string | undefined = undefined;\nexport let pill = false;\nexport let href: AnchorHTMLAttributes['href'] = undefined;\nexport let target: AnchorHTMLAttributes['target'] = undefined;\nexport let rel: AnchorHTMLAttributes['rel'] = undefined;\nexport let type: ButtonHTMLAttributes['type'] = 'button';\nexport let disabled: boolean | undefined = undefined;\n// Alias for the `class` attribute since `class` is a reserved TS keyword\nexport let className: string | undefined = undefined;\n\nlet restClass: string | undefined;\nlet restProps: Record<string, unknown> = {};\nconst dispatch = createEventDispatcher();\n\nconst sizeClasses: Record<ButtonSize, string> = {\n\txs: 'px-3 py-2 text-xs',\n\tsm: 'px-3 py-2 text-sm',\n\tmd: 'px-4 py-2.5 text-sm',\n\tlg: 'px-5 py-3 text-base',\n};\n\nconst colorClasses: Record<ButtonColor, string> = {\n\tprimary:\n\t\t'text-white bg-primary-600 hover:bg-primary-700 focus:ring-primary-300 dark:bg-primary-500 dark:hover:bg-primary-600 dark:focus:ring-primary-700',\n\tlight:\n\t\t'text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 focus:ring-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-600 dark:hover:bg-gray-700 dark:focus:ring-gray-700',\n\tgray: 'text-white bg-gray-800 hover:bg-gray-900 focus:ring-gray-300 dark:bg-gray-700 dark:hover:bg-gray-800 dark:focus:ring-gray-900',\n\twhite:\n\t\t'text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 focus:ring-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-600 dark:hover:bg-gray-700 dark:focus:ring-gray-700',\n\tdark: 'text-white bg-gray-900 hover:bg-black focus:ring-gray-300 dark:bg-gray-800 dark:hover:bg-black dark:focus:ring-gray-900',\n};\nconst baseClasses =\n\t'cursor-pointer inline-flex items-center gap-2 justify-center font-medium text-center transition-colors focus:outline-none focus:ring-4 disabled:opacity-50 disabled:cursor-not-allowed';\n\n$: toneClass = colorClasses[color as ButtonColor] ?? colorClasses.primary;\n$: shapeClass = pill ? 'rounded-full' : 'rounded-lg';\n$: sizeClass = sizeClasses[size] ?? sizeClasses.md;\n$: ({ class: restClass, ...restProps } = $$restProps);\n$: classes = [baseClasses, shapeClass, sizeClass, toneClass, restClass, className]\n\t.filter(Boolean)\n\t.join(' ');\n\n$: colorOverride = colorClasses[color as ButtonColor] == null ? color : undefined;\n$: inlineStyle =\n\tcolorOverride || textColor\n\t\t? [\n\t\t\t\tcolorOverride ? `background-color: ${colorOverride} !important;` : null,\n\t\t\t\ttextColor ? `color: ${textColor} !important;` : null,\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(' ')\n\t\t: undefined;\n\nfunction handleClick(event: MouseEvent) {\n\tif (disabled) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn;\n\t}\n\n\tdispatch('click', event);\n}\n</script>\n\n{#if href}\n\t<Link\n\t\tclass={classes}\n\t\tstyle={inlineStyle}\n\t\thref={disabled ? undefined : href}\n\t\taria-disabled={disabled}\n\t\trole={disabled ? 'link' : undefined}\n\t\ttabindex={disabled ? -1 : undefined}\n\t\trel={rel}\n\t\ttarget={target}\n\t\ton:click={handleClick}\n\t\t{...restProps}\n\t>\n\t\t<slot />\n\t</Link>\n{:else}\n\t<button\n\t\tclass={classes}\n\t\ttype={type}\n\t\t{disabled}\n\t\t{...restProps}\n\t\tstyle={inlineStyle}\n\t\ton:click={handleClick}\n\t>\n\t\t<slot />\n\t</button>\n{/if}\n"
  },
  {
    "path": "packages/components/src/lib/Card.svelte",
    "content": "<script lang=\"ts\">\nexport let className: string | undefined = undefined;\n\nlet restClass: string | undefined;\nlet restProps: Record<string, unknown> = {};\n\nconst baseClasses =\n\t'rounded-lg px-4 py-3 shadow-lg backdrop-blur border border-cream-100 dark:border-cream-700';\n\n$: ({ class: restClass, ...restProps } = $$restProps);\n$: classes = [baseClasses, restClass, className].filter(Boolean).join(' ');\n</script>\n\n<div class={classes} {...restProps}>\n\t<slot />\n</div>\n"
  },
  {
    "path": "packages/components/src/lib/Collapsible.svelte",
    "content": "<script lang=\"ts\">\nexport let title: string;\nexport let open = false;\nexport let className = '';\n\nconst baseClasses =\n\t'group rounded-lg border border-neutral-200 bg-white p-4 shadow-sm open:shadow-md dark:border-neutral-800 dark:bg-neutral-900';\n\n$: detailsClass = `${baseClasses} ${className}`.trim();\n</script>\n\n<details class={detailsClass} {open}>\n\t<summary class=\"cursor-pointer font-semibold marker:text-neutral-400\">{title}</summary>\n\t<div class=\"mt-3\">\n\t\t<slot />\n\t</div>\n</details>\n"
  },
  {
    "path": "packages/components/src/lib/Input.svelte",
    "content": "<script lang=\"ts\">\nimport { createEventDispatcher } from 'svelte';\nimport type { InputHTMLAttributes } from 'svelte/elements';\n\ntype InputSize = 'sm' | 'md' | 'lg';\n\nexport let type: InputHTMLAttributes['type'] = 'text';\nexport let value: InputHTMLAttributes['value'] = undefined;\nexport let placeholder: InputHTMLAttributes['placeholder'] = undefined;\nexport let className: string | undefined = undefined;\nexport let size: InputSize = 'md';\n\nlet restClass: string | undefined;\nlet restProps: Record<string, unknown> = {};\nconst dispatch = createEventDispatcher<{ keydown: KeyboardEvent; blur: FocusEvent }>();\n\nconst baseClasses =\n\t'rounded-lg border border-cream-200 bg-white text-gray-900 placeholder-gray-500 shadow-sm outline-none transition focus:ring-2 focus:ring-primary-300 focus:border-cream-300 dark:border-cream-700 dark:bg-cream-900 dark:text-white dark:placeholder-cream-200 dark:focus:border-cream-600 dark:focus:ring-primary-600';\nconst sizeClasses: Record<InputSize, string> = {\n\tsm: 'px-3 py-2 text-sm',\n\tmd: 'px-3 py-2.5 text-sm',\n\tlg: 'px-4 py-3 text-base',\n};\n\n$: ({ class: restClass, ...restProps } = $$restProps);\n$: classes = [baseClasses, sizeClasses[size] ?? sizeClasses.md, restClass, className]\n\t.filter(Boolean)\n\t.join(' ');\n</script>\n\n<input\n\tclass={classes}\n\ttype={type}\n\tplaceholder={placeholder}\n\tbind:value\n\ton:keydown={(event) => dispatch('keydown', event)}\n\ton:blur={(event) => dispatch('blur', event)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "packages/components/src/lib/Link.svelte",
    "content": "<script lang=\"ts\">\nimport { createEventDispatcher } from 'svelte';\nimport type { AnchorHTMLAttributes } from 'svelte/elements';\n\nexport let href: AnchorHTMLAttributes['href'] = undefined;\nexport let target: AnchorHTMLAttributes['target'] = undefined;\nexport let rel: AnchorHTMLAttributes['rel'] = undefined;\n// Alias for the `class` attribute since `class` is a reserved TS keyword\nexport let className: string | undefined = undefined;\nexport let underline = false;\n\nlet restClass: string | undefined;\nlet restProps: Record<string, unknown> = {};\n\nconst dispatch = createEventDispatcher();\n\nfunction handleClick(event: MouseEvent) {\n\tdispatch('click', event);\n}\n\n$: baseClasses = 'hover:underline text-primary dark:text-white';\n$: ({ class: restClass, ...restProps } = $$restProps);\n$: classes =\n\t[baseClasses, restClass, className, underline ? 'underline' : undefined]\n\t\t.filter(Boolean)\n\t\t.join(' ') || undefined;\n$: resolvedRel = target === '_blank' && !rel ? 'noreferrer noopener' : rel;\n</script>\n\n<a href={href} target={target} rel={resolvedRel} class={classes} {...restProps}\n\t\ton:click={handleClick}\n>\n\t<slot />\n</a>\n"
  },
  {
    "path": "packages/components/src/lib/Select.svelte",
    "content": "<script lang=\"ts\">\nimport type { SelectHTMLAttributes } from 'svelte/elements';\n\ntype SelectSize = 'sm' | 'md' | 'lg';\ntype SelectItem = {\n\tvalue: SelectHTMLAttributes['value'];\n\tname?: string;\n\tlabel?: string;\n\tdisabled?: boolean;\n\tselected?: boolean;\n};\n\nexport let size: SelectSize = 'md';\nexport let items: SelectItem[] | undefined = undefined;\nexport let className: string | undefined = undefined;\nexport let value: SelectHTMLAttributes['value'] = undefined;\n\nlet restClass: string | undefined;\nlet restProps: Record<string, unknown> = {};\n\nconst baseClasses =\n\t'rounded-lg border border-cream-200 bg-white shadow-sm outline-none transition focus:ring-2 focus:ring-primary-300 focus:border-cream-300 dark:border-cream-700 dark:bg-cream-900 dark:text-white dark:focus:border-cream-600 dark:focus:ring-primary-600 text-left';\nconst sizeClasses: Record<SelectSize, string> = {\n\tsm: 'pl-3 pr-8 py-2 text-sm',\n\tmd: 'pl-3 pr-8 py-2.5 text-sm',\n\tlg: 'pl-4 pr-8 py-3 text-base',\n};\n\n$: ({ class: restClass, ...restProps } = $$restProps);\n$: classes = [baseClasses, sizeClasses[size] ?? sizeClasses.md, restClass, className]\n\t.filter(Boolean)\n\t.join(' ');\n</script>\n\n<select class={classes} bind:value {...restProps}>\n\t{#if items?.length}\n\t\t{#each items as item (item.value)}\n\t\t\t<option value={item.value} disabled={item.disabled} selected={item.selected}>\n\t\t\t\t{item.name ?? item.label ?? item.value}\n\t\t\t</option>\n\t\t{/each}\n\t{:else}\n\t\t<slot />\n\t{/if}\n</select>\n"
  },
  {
    "path": "packages/components/src/lib/Textarea.svelte",
    "content": "<script lang=\"ts\">\nimport type { TextareaHTMLAttributes } from 'svelte/elements';\n\nexport let className: string | undefined = undefined;\nexport let value: TextareaHTMLAttributes['value'] = undefined;\nexport let rows: TextareaHTMLAttributes['rows'] = undefined;\nexport let cols: TextareaHTMLAttributes['cols'] = undefined;\n\nlet restClass: string | undefined;\nlet restProps: Record<string, unknown> = {};\n\nconst baseClasses =\n\t'rounded-lg border border-cream-200 bg-white text-gray-900 shadow-sm placeholder-gray-500 outline-none transition focus:ring-2 focus:ring-primary-300 focus:border-cream-300 dark:border-cream-700 dark:bg-cream-900 dark:text-white dark:placeholder-cream-200 dark:focus:border-cream-600 dark:focus:ring-primary-600';\n\n// Align with Svelte's `class` handling while allowing `className` as an alias.\n$: ({ class: restClass, ...restProps } = $$restProps);\n$: classes = [baseClasses, restClass, className].filter(Boolean).join(' ');\n</script>\n\n<textarea class={classes} bind:value rows={rows} cols={cols} {...restProps}>\n\t<slot />\n</textarea>\n"
  },
  {
    "path": "packages/components/src/lib/index.ts",
    "content": "export {\n\tBadge,\n\tCheckbox,\n\tFileupload,\n\tLabel,\n\tRadio,\n\tSpinner,\n\tTable,\n\tTableBody,\n\tTableBodyCell,\n\tTableBodyRow,\n\tTableHead,\n\tTableHeadCell,\n\tToggle,\n} from 'flowbite-svelte';\n\nexport { default as Button } from './Button.svelte';\nexport { default as Card } from './Card.svelte';\nexport { default as Collapsible } from './Collapsible.svelte';\nexport { default as Input } from './Input.svelte';\nexport { default as Link } from './Link.svelte';\nexport { default as Select } from './Select.svelte';\nexport { default as Textarea } from './Textarea.svelte';\n"
  },
  {
    "path": "packages/components/src/lib/styles.css",
    "content": "@import \"tailwindcss\";\n\n@plugin \"flowbite/plugin\";\n\n@custom-variant dark (&:where(.dark, .dark *));\n\n@source \"./src/lib/**/*.{svelte,ts}\";\n@source \"./node_modules/flowbite-svelte/**/*.{svelte,ts,js}\";\n\n@theme {\n\t--color-primary-50: #fef4e7; /* honey bronze */\n\t--color-primary-100: #fce9cf;\n\t--color-primary-200: #f9d49f;\n\t--color-primary-300: #f7be6e;\n\t--color-primary-400: #f4a83e;\n\t--color-primary: #f1920e;\n\t--color-primary-600: #c1750b;\n\t--color-primary-700: #915808;\n\t--color-primary-800: #603b06;\n\t--color-primary-900: #301d03;\n\t--color-primary-950: #221402;\n\n\t--color-accent-50: #fee7e9; /* hot fuchsia */\n\t--color-accent-100: #fccfd3;\n\t--color-accent-200: #f99fa6;\n\t--color-accent-300: #f76e7a;\n\t--color-accent-400: #f43e4d;\n\t--color-accent: #f10e21;\n\t--color-accent-600: #c10b1a;\n\t--color-accent-700: #910814;\n\t--color-accent-800: #60060d;\n\t--color-accent-900: #300307;\n\t--color-accent-950: #220205;\n\n\t--color-cream: #fef4e7; /* simple cream */\n\t--color-cream-100: #fce9cf;\n\t--color-cream-200: #f9d49f;\n\t--color-cream-300: #f7be6e;\n\t--color-cream-400: #f4a83e;\n\t--color-cream-500: #f1920e;\n\t--color-cream-600: #c1750b;\n\t--color-cream-700: #915808;\n\t--color-cream-800: #603b06;\n\t--color-cream-900: #301d03;\n\t--color-cream-950: #221402;\n\n\t--color-champagne-mist-50: #fef4e7;\n\t--color-champagne-mist-100: #fce9cf;\n\t--color-champagne-mist-200: #fad49e;\n\t--color-champagne-mist-300: #f7be6e;\n\t--color-champagne-mist-400: #f5a83d;\n\t--color-champagne-mist-500: #f2930d;\n\t--color-champagne-mist-600: #c2750a;\n\t--color-champagne-mist-700: #915808;\n\t--color-champagne-mist-800: #613b05;\n\t--color-champagne-mist-900: #301d03;\n\t--color-champagne-mist-950: #221502;\n\n\t--color-white: #fffdfa;\n\t--color-white-100: #fceacf;\n\t--color-white-200: #fad59e;\n\t--color-white-300: #f7c06e;\n\t--color-white-400: #f5ab3d;\n\t--color-white-500: #f2960d;\n\t--color-white-600: #c2780a;\n\t--color-white-700: #915a08;\n\t--color-white-800: #613c05;\n\t--color-white-900: #301e03;\n\t--color-white-950: #221502;\n}\n\nbody {\n\t@apply bg-white dark:bg-white-900 dark:text-white;\n}\n"
  },
  {
    "path": "packages/components/src/routes/+layout.svelte",
    "content": "<script lang=\"ts\">\nimport './layout.css';\n\nlet { children } = $props();\n</script>\n\n{@render children()}\n"
  },
  {
    "path": "packages/components/src/routes/+page.svelte",
    "content": "<script lang=\"ts\">\nimport Link from '$lib/Link.svelte';\n</script>\n\n<h1>Welcome to your library project</h1>\n<p>Create your package using @sveltejs/package and preview/showcase your work with SvelteKit</p>\n<p>Visit <Link href=\"https://svelte.dev/docs/kit\">svelte.dev/docs/kit</Link> to read the documentation</p>\n"
  },
  {
    "path": "packages/components/src/routes/layout.css",
    "content": "@import \"tailwindcss\";\n"
  },
  {
    "path": "packages/components/svelte.config.js",
    "content": "import adapter from '@sveltejs/adapter-auto';\nimport { vitePreprocess } from '@sveltejs/vite-plugin-svelte';\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n\t// Consult https://svelte.dev/docs/kit/integrations\n\t// for more information about preprocessors\n\tpreprocess: vitePreprocess(),\n\n\tkit: {\n\t\t// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.\n\t\t// If your environment is not supported, or you settled on a specific environment, switch out the adapter.\n\t\t// See https://svelte.dev/docs/kit/adapters for more information about adapters.\n\t\tadapter: adapter(),\n\t},\n};\n\nexport default config;\n"
  },
  {
    "path": "packages/components/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowImportingTsExtensions\": true,\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"module\": \"NodeNext\",\n\t\t\"moduleResolution\": \"NodeNext\"\n\t}\n}\n"
  },
  {
    "path": "packages/components/vite.config.ts",
    "content": "import { sveltekit } from '@sveltejs/kit/vite';\nimport tailwindcss from '@tailwindcss/vite';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n\tplugins: [tailwindcss(), sveltekit()],\n});\n"
  },
  {
    "path": "packages/harper.js/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\nhtml\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n\nmarkdown\ntemp\n"
  },
  {
    "path": "packages/harper.js/README.md",
    "content": "# Harper\n\nHarper is a grammar checker designed to be easy to consume and integrate into your products.\n**It always runs on-device**, which means there aren't any privacy considerations or servers to run.\n\n[Read the documentation to learn more.](https://writewithharper.com/docs/harperjs/introduction)\n\nWondering how good our algorithm is? [Give it a whirl.](https://writewithharper.com)\n"
  },
  {
    "path": "packages/harper.js/api-extractor.json",
    "content": "{\n\t\"mainEntryPointFilePath\": \"./dist/harper.d.ts\",\n\t\"apiReport\": {\n\t\t\"enabled\": false\n\t},\n\t\"docModel\": {\n\t\t\"enabled\": true\n\t},\n\t\"dtsRollup\": {\n\t\t\"enabled\": false\n\t},\n\t\"bundledPackages\": [\"harper-wasm\"],\n\t\"messages\": {\n\t\t\"extractorMessageReporting\": {\n\t\t\t\"ae-missing-release-tag\": {\n\t\t\t\t\"logLevel\": \"none\"\n\t\t\t},\n\t\t\t\"ae-forgotten-export\": {\n\t\t\t\t\"logLevel\": \"none\"\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/harper.js/docs.sh",
    "content": "#!/usr/bin/env bash\n\nset -eo pipefail\n\npnpm api-extractor run\npnpm api-documenter markdown -i temp\n\nhtml_dir=\"./html\"\nif [[ -d \"$html_dir\" ]]; then\n\techo \"Deleting old output from ${html_dir}\"\n\trm -r \"$html_dir\" || true\nfi\nmkdir \"$html_dir\" || true\n\nharperjs_docs_dir=\"../web/static/docs/harperjs\"\nif [[ -d \"$harperjs_docs_dir\" ]]; then\n\techo \"Deleting old output from ${harperjs_docs_dir}\"\n\trm -r \"$harperjs_docs_dir\" || true\nfi\nmkdir -p \"$harperjs_docs_dir\" || true\n\necho \"Rendering HTML...\"\nif command -v parallel &> /dev/null; then\n\tparallel '\n        base=$(basename {} .md)\n        node renderPage.js \"${base#\"harper.js.\"} - Harper\" \"API reference documentation for harper.js\" {} \"html/${base}.html\"\n    ' ::: ./markdown/*.md\nelse\n\techo \"parallel not found, falling back to sequential processing\"\n\tfor file in ./markdown/*.md; do\n\t\tbase=$(basename \"$file\" .md)\n    node renderPage.js \"${base#\"harper.js.\"} - Harper\" \"API reference documentation for harper.js\" \"$file\" \"html/${base}.html\"\n\tdone\nfi\nmv -f \"$html_dir\" \"${harperjs_docs_dir}/ref\"\n"
  },
  {
    "path": "packages/harper.js/examples/commonjs-simple/README.md",
    "content": "# `commonjs-simple`\n\nAn example of using `harper.js` in a Node.js application.\nRead the source code in `index.cjs` to see what's going on.\n\nYou can run it using pnpm:\n\n```\npnpm install\npnpm start\n```\n"
  },
  {
    "path": "packages/harper.js/examples/commonjs-simple/index.js",
    "content": "async function main() {\n\tconst harper = await import('harper.js');\n\t// We cannot use `WorkerLinter` on Node.js since it relies on web-specific APIs.\n\t// This constructs the linter to consume American English.\n\tconst linter = new harper.LocalLinter({\n\t\tbinary: harper.binary,\n\t\tdialect: harper.Dialect.American,\n\t});\n\n\tconst lints = await linter.lint('This is a example of how to use `harper.js`.');\n\n\tconsole.log('Here are the results of linting the above text:');\n\n\tfor (const lint of lints) {\n\t\tconsole.log(' - ', lint.span().start, ':', lint.span().end, lint.message());\n\n\t\tif (lint.suggestion_count() !== 0) {\n\t\t\tconsole.log('Suggestions:');\n\n\t\t\tfor (const sug of lint.suggestions()) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t'\\t - ',\n\t\t\t\t\tsug.kind() === 1 ? 'Remove' : 'Replace with',\n\t\t\t\t\tsug.get_replacement_text(),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nmain();\n"
  },
  {
    "path": "packages/harper.js/examples/commonjs-simple/package.json",
    "content": "{\n\t\"name\": \"commonjs-simple\",\n\t\"version\": \"0.0.1\",\n\t\"private\": true,\n\t\"scripts\": {\n\t\t\"start\": \"node index.js\"\n\t},\n\t\"dependencies\": {\n\t\t\"harper.js\": \"workspace:*\"\n\t}\n}\n"
  },
  {
    "path": "packages/harper.js/examples/raw-web/README.md",
    "content": "# `raw-web`\n\nAn example of using `harper.js` in a raw HTML webpage.\nYou can open it using [`microserver`](https://crates.io/crates/microserver):\n"
  },
  {
    "path": "packages/harper.js/examples/raw-web/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"utf-8\" />\n  <script type=\"module\">\n    // We can import `harper.js` using native ECMAScript syntax.\n    // TODO: Update to the latest version.\n    import {binaryInlined, WorkerLinter } from 'https://unpkg.com/harper.js@0.54.0/dist/harper.js';\n\n    // Since we are working in the browser, we can use either `WorkerLinter`, which doesn't block the event loop, or `LocalLinter`, which does.\n    const linter = new WorkerLinter({binary: binaryInlined});\n\n    // Every time the `<textarea/>` received an input, we process it and update our list.\n    async function onInput(e) {\n      const lints = await linter.lint(e.target.value);\n\n      const list = document.getElementById('errorlist');\n      // Clear previous results\n      list.innerHTML = '';\n\n      for (const lint of lints) {\n        const item = document.createElement('LI');\n        const text = document.createTextNode(lint.message());\n        item.appendChild(text);\n        list.appendChild(item);\n      }\n    }\n\n    const inputField = document.getElementById('maininput');\n    inputField.addEventListener('input', onInput);\n    onInput({target: inputField});\n  </script>\n\n  <!--Make the page look good using SimpleCSS-->\n  <link rel=\"stylesheet\" href=\"https://cdn.simplecss.org/simple.min.css\" />\n</head>\n\n<body>\n  <h1>Demo</h1>\n\n  <p>\n    This page is a simple example of using <code>harper.js</code> on a plain HTML page with a CDN.\n    It isn't pretty, but it demonstrates the fundamentals of using Harper. Start typing in the\n    text box below to start getting suggestions right in your browser.\n  </p>\n\n  <!--This is an intentional mistake to highlight the technology.-->\n  <textarea id=\"maininput\">This is an test</textarea>\n\n  <h2>Errors</h2>\n\n  <ul id=\"errorlist\">\n    Loading...\n  </ul>\n</body>\n\n</html>\n"
  },
  {
    "path": "packages/harper.js/package.json",
    "content": "{\n\t\"name\": \"harper.js\",\n\t\"version\": \"1.12.0\",\n\t\"license\": \"Apache-2.0\",\n\t\"author\": \"Elijah Potter\",\n\t\"description\": \"The grammar checker that respects your privacy.\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/automattic/harper.git\",\n\t\t\"directory\": \"packages/harper.js\"\n\t},\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/automattic/harper/issues\"\n\t},\n\t\"homepage\": \"https://writewithharper.com\",\n\t\"type\": \"module\",\n\t\"scripts\": {\n\t\t\"dev\": \"vite\",\n\t\t\"build\": \"tsc && vite build -l warn\",\n\t\t\"test\": \"vitest run\",\n\t\t\"test:debug\": \"vitest run --browser.headless false --testTimeout 0\",\n\t\t\"api:extractor\": \"api-extractor run\",\n\t\t\"api:documenter\": \"api-documenter markdown -i temp\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@microsoft/api-documenter\": \"^7.28.1\",\n\t\t\"@microsoft/api-extractor\": \"^7.55.1\",\n\t\t\"@types/node\": \"catalog:\",\n\t\t\"@vitest/browser\": \"^4.0.16\",\n\t\t\"@vitest/browser-playwright\": \"^4.0.16\",\n\t\t\"@vitest/ui\": \"4.0.16\",\n\t\t\"harper-wasm\": \"workspace:*\",\n\t\t\"marked\": \"^16.4.1\",\n\t\t\"p-lazy\": \"^5.0.0\",\n\t\t\"p-memoize\": \"^7.1.1\",\n\t\t\"playwright\": \"^1.58.0\",\n\t\t\"type-fest\": \"^4.37.0\",\n\t\t\"typescript\": \"catalog:\",\n\t\t\"vite\": \"^6.1.0\",\n\t\t\"vite-plugin-dts\": \"^4.5.0\",\n\t\t\"vite-plugin-virtual\": \"^0.3.0\",\n\t\t\"vitest\": \"^4.0.16\"\n\t},\n\t\"main\": \"dist/harper.js\",\n\t\"types\": \"dist/harper.d.ts\",\n\t\"sideEffects\": false,\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"dependencies\": {\n\t\t\"fflate\": \"^0.8.2\"\n\t}\n}\n"
  },
  {
    "path": "packages/harper.js/renderPage.js",
    "content": "import fs from 'fs';\nimport { marked } from 'marked';\n\nconst pageTitle = process.argv[2];\nconst description = process.argv[3];\nconst input = process.argv[4];\nconst output = process.argv[5];\n\nconst renderer = new marked.Renderer();\n\nrenderer.link = ({ href, title, text }) => {\n\tif (href.endsWith('.md')) {\n\t\thref = `${href.slice(0, href.length - 3)}.html`;\n\t}\n\tconst titleAttr = title ? ` title=\"${title}\"` : '';\n\treturn `<a href=\"${href}\" ${titleAttr}>${text.replaceAll('\\\\_', '_')}</a>`;\n};\n\nconst markdown = fs.readFileSync(input, 'utf8');\nconst body = marked.parse(markdown, { async: false, renderer });\n\nconst html = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>${pageTitle}</title>\n<meta name=\"description\" content=\"${description}\">\n<link\n  rel=\"stylesheet\"\n  href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\"\n>\n</head>\n<body class=\"container\">\n${body}\n</body>\n</html>\n`;\n\nfs.writeFileSync(output, html);\n"
  },
  {
    "path": "packages/harper.js/src/Linter.bench.ts",
    "content": "import { bench } from 'vitest';\nimport { binary } from './binary';\nimport LocalLinter from './LocalLinter';\nimport WorkerLinter from './WorkerLinter';\n\nconst linters = {\n\tWorkerLinter: WorkerLinter,\n\tLocalLinter: LocalLinter,\n};\n\nfor (const [linterName, Linter] of Object.entries(linters)) {\n\tconst linter = new Linter({ binary });\n\n\t// Prime caches\n\tlinter.setup();\n\n\tconst defaultConfig = await linter.getDefaultLintConfig();\n\tconst emptyIgnoreState = await linter.exportIgnoredLints();\n\n\tbench(`${linterName} set lint configuration`, async () => {\n\t\tawait linter.setLintConfig(defaultConfig);\n\t});\n\n\tbench(`${linterName} get lint configuration`, async () => {\n\t\tawait linter.getLintConfig();\n\t});\n\n\tbench(`${linterName} reset ignore state`, async () => {\n\t\tawait linter.clearIgnoredLints();\n\t\tawait linter.importIgnoredLints(emptyIgnoreState);\n\t});\n}\n"
  },
  {
    "path": "packages/harper.js/src/Linter.test.ts",
    "content": "import { expect, test } from 'vitest';\nimport { binary } from './binary';\nimport LocalLinter from './LocalLinter';\nimport WorkerLinter from './WorkerLinter';\n\nfunction randomString(length: number): string {\n\tconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\tlet result = '';\n\tfor (let i = 0; i < length; i++) {\n\t\tresult += chars.charAt(Math.floor(Math.random() * chars.length));\n\t}\n\treturn result;\n}\n\nconst WEIRPACK_PASS_BASE64 =\n\t'UEsDBBQAAAAIAFR7LFx+V+AhbQAAAIgAAAANAAAAbWFuaWZlc3QuanNvbi2MMQuDMBBG9/yKI3MJdnXrWNBNcE7iaQ9DLlxil+J/l5iO33u876cAtD3Kh0X3oCfMBV5tPqr6omTiWF1nOvNsdMHshVL5m7uakSRZv8PKAjPLjjJQLCjgAjsIbBeKm2kHgTzGjDUe35NW5wVQSwMEFAAAAAgAVHssXLV8hxV2AAAAoQAAABUAAABXZWlycGFja1Rlc3RSdWxlLndlaXJNzrENwzAMBMBeUxDskx0yQMoMQEtvh7BECaKMePwYdorgyz/gH3vrVESNJrEjIWQMKnCXBcQvB4036APtTeJKHS1LRIGNO582wWPXNrQa8eNPbhk0104DPtSWH1/VEvFTPSJnMdTNr2JCrMcu8XXkNuuOxOELUEsBAhQDFAAAAAgAVHssXH5X4CFtAAAAiAAAAA0AAAAAAAAAAAAAAIABAAAAAG1hbmlmZXN0Lmpzb25QSwECFAMUAAAACABUeyxctXyHFXYAAAChAAAAFQAAAAAAAAAAAAAAgAGYAAAAV2VpcnBhY2tUZXN0UnVsZS53ZWlyUEsFBgAAAAACAAIAfgAAAEEBAAAAAA==';\nconst WEIRPACK_FAIL_BASE64 =\n\t'UEsDBBQAAAAIABtOLVw9tWbJYgAAAH0AAAANAAAAbWFuaWZlc3QuanNvbi3LMQ9AMBCG4d2vuHSWhtVmNNgk5qYOF01J7zCI/07V+H1P3isDUGaXeQ2qAtUhC9Rp5pEODEyrj1boQpfpHZBtoE1++aoeKWzGLnCSzDAacuQnkJdYp8qRRc8Yi7bpVHY/UEsDBBQAAAAIABtOLVylaCfNfgAAALkAAAAVAAAAV2VpcnBhY2tUZXN0UnVsZS53ZWlyTY5RDsIwDEP/e4oo/3AHDsAnB+g6b0Rr06rJxI7PYICQf6z4WTG21qlEURqi7gohw6nALM4gvhnI76AHpLeYFupoOSYUqJ/5zY6w1KW5VCW+/JFrBk21k8NcdP7gi+hIfBVLyDkq6mpHMCDV/S/xMeQ0yYaRQ3jVv0f+mfAEUEsBAhQDFAAAAAgAG04tXD21ZsliAAAAfQAAAA0AAAAAAAAAAAAAAIABAAAAAG1hbmlmZXN0Lmpzb25QSwECFAMUAAAACAAbTi1cpWgnzX4AAAC5AAAAFQAAAAAAAAAAAAAAgAGNAAAAV2VpcnBhY2tUZXN0UnVsZS53ZWlyUEsFBgAAAAACAAIAfgAAAD4BAAAAAA==';\n\nfunction base64ToBytes(value: string): Uint8Array {\n\tconst raw = atob(value);\n\tconst bytes = new Uint8Array(raw.length);\n\tfor (let i = 0; i < raw.length; i++) {\n\t\tbytes[i] = raw.charCodeAt(i);\n\t}\n\treturn bytes;\n}\n\nconst linters = {\n\tWorkerLinter: WorkerLinter,\n\tLocalLinter: LocalLinter,\n};\n\nfor (const [linterName, Linter] of Object.entries(linters)) {\n\ttest(`${linterName} detects repeated words`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst lints = await linter.lint('The the problem is...');\n\n\t\texpect(lints.length).toBe(1);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} emits organized lints the same as it emits normal lints`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tconst source = 'The the problem is...';\n\n\t\tconst lints = await linter.lint(source);\n\t\texpect(lints.length).toBeGreaterThan(0);\n\n\t\tconst organized = await linter.organizedLints(source);\n\t\tconst normal = await linter.lint(source);\n\n\t\tconst flattened = [];\n\t\tfor (const [_, value] of Object.entries(organized)) {\n\t\t\tflattened.push(...value);\n\t\t}\n\n\t\texpect(flattened.length).toBe(1);\n\t\texpect(flattened.length).toBe(normal.length);\n\n\t\tconst item = flattened[0];\n\t\texpect(item.message().length).not.toBe(0);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} detects repeated words with multiple synchronous requests`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst promises = [\n\t\t\tlinter.lint('The problem is that that...'),\n\t\t\tlinter.lint('The problem is...'),\n\t\t\tlinter.lint('The the problem is...'),\n\t\t];\n\n\t\tconst results = await Promise.all(promises);\n\n\t\texpect(results[0].length).toBe(1);\n\t\texpect(results[0][0].suggestions().length).toBe(1);\n\t\texpect(results[1].length).toBe(0);\n\t\texpect(results[2].length).toBe(1);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} detects repeated words with concurrent requests`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst promises = [\n\t\t\tlinter.lint('The problem is that that...'),\n\t\t\tlinter.lint('The problem is...'),\n\t\t\tlinter.lint('The the problem is...'),\n\t\t];\n\n\t\tconst results = await Promise.all(promises);\n\n\t\texpect(results[0].length).toBe(1);\n\t\texpect(results[0][0].suggestions().length).toBe(1);\n\t\texpect(results[1].length).toBe(0);\n\t\texpect(results[2].length).toBe(1);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} detects lorem ipsum paragraph as not english`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst result = await linter.isLikelyEnglish(\n\t\t\t'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',\n\t\t);\n\n\t\texpect(result).toBeTypeOf('boolean');\n\t\texpect(result).toBe(false);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can run setup without issues`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tawait linter.setup();\n\t});\n\n\ttest(`${linterName} contains configuration option for repetition`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst lintConfig = await linter.getLintConfig();\n\t\texpect(lintConfig).toHaveProperty('RepeatedWords');\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can set its configuration away and to default`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tlet lintConfig = await linter.getLintConfig();\n\n\t\tfor (const key of Object.keys(lintConfig)) {\n\t\t\tlintConfig[key] = true;\n\t\t}\n\n\t\tawait linter.setLintConfig(lintConfig);\n\t\tlintConfig = await linter.getLintConfig();\n\n\t\tfor (const key of Object.keys(lintConfig)) {\n\t\t\tlintConfig[key] = null;\n\t\t}\n\n\t\tawait linter.setLintConfig(lintConfig);\n\t\tlintConfig = await linter.getLintConfig();\n\n\t\tfor (const key of Object.keys(lintConfig)) {\n\t\t\texpect(lintConfig[key]).toBe(null);\n\t\t}\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can both get and set its configuration`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tlet lintConfig = await linter.getLintConfig();\n\n\t\tfor (const key of Object.keys(lintConfig)) {\n\t\t\tlintConfig[key] = true;\n\t\t}\n\n\t\tawait linter.setLintConfig(lintConfig);\n\t\tlintConfig = await linter.getLintConfig();\n\n\t\tfor (const key of Object.keys(lintConfig)) {\n\t\t\texpect(lintConfig[key]).toBe(true);\n\t\t}\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can make things title case`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst titleCase = await linter.toTitleCase('this is a test for making titles');\n\n\t\texpect(titleCase).toBe('This Is a Test for Making Titles');\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can get rule descriptions`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst descriptions = await linter.getLintDescriptions();\n\n\t\texpect(descriptions).toBeTypeOf('object');\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can get rule descriptions in HTML.`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst descriptions = await linter.getLintDescriptionsHTML();\n\n\t\texpect(descriptions).toBeTypeOf('object');\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} rule descriptions are not empty`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst descriptions = await linter.getLintDescriptions();\n\n\t\tfor (const value of Object.values(descriptions)) {\n\t\t\texpect(value).toBeTypeOf('string');\n\t\t\texpect(value).not.toHaveLength(0);\n\t\t}\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} default lint config has no null values`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst lintConfig = await linter.getDefaultLintConfig();\n\n\t\tfor (const value of Object.values(lintConfig)) {\n\t\t\texpect(value).not.toBeNull();\n\t\t}\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can generate lint context hashes`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tconst source = 'This is an test.';\n\n\t\tconst lints = await linter.lint(source);\n\n\t\texpect(lints.length).toBeGreaterThanOrEqual(1);\n\n\t\tawait linter.contextHash(source, lints[0]);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can ignore lints`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tconst source = 'This is an test.';\n\n\t\tconst firstRound = await linter.lint(source);\n\n\t\texpect(firstRound.length).toBeGreaterThanOrEqual(1);\n\n\t\tawait linter.ignoreLint(source, firstRound[0]);\n\n\t\tconst secondRound = await linter.lint(source);\n\n\t\texpect(secondRound.length).toBeLessThan(firstRound.length);\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can ignore lints with hashes`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tconst source = 'This is an test.';\n\n\t\tconst firstRound = await linter.lint(source);\n\n\t\texpect(firstRound.length).toBeGreaterThanOrEqual(1);\n\n\t\tconst hash = await linter.contextHash(source, firstRound[0]);\n\t\tawait linter.ignoreLintHash(hash);\n\n\t\tconst secondRound = await linter.lint(source);\n\n\t\texpect(secondRound.length).toBeLessThan(firstRound.length);\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can ignore larger lints to reveal smaller ones`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tconst source = `This is a really long sentensd with some errorz in it, which in an old version of Harper, would get removedd when the bigger \"Long Sentences\" lint was ignored, that isn't what we woant, so we are writing a test for that exact problem.`;\n\n\t\tconst firstRound = await linter.lint(source);\n\n\t\texpect(firstRound.length).toBeGreaterThanOrEqual(1);\n\n\t\tawait linter.ignoreLint(source, firstRound[0]);\n\n\t\tconst secondRound = await linter.lint(source);\n\n\t\texpect(secondRound.length).toBe(4);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can reimport ignored lints.`, async () => {\n\t\tconst source = 'This is an test of exprting lints.';\n\n\t\tconst firstLinter = new Linter({ binary });\n\n\t\tconst firstLints = await firstLinter.lint(source);\n\n\t\tfor (const lint of firstLints) {\n\t\t\tawait firstLinter.ignoreLint(source, lint);\n\t\t}\n\n\t\tconst exported = await firstLinter.exportIgnoredLints();\n\n\t\t/// Create a new instance and reimport the lints.\n\t\tconst secondLinter = new Linter({ binary });\n\t\tawait secondLinter.importIgnoredLints(exported);\n\n\t\tconst secondLints = await secondLinter.lint(source);\n\n\t\texpect(firstLints.length).toBeGreaterThan(secondLints.length);\n\t\texpect(secondLints.length).toBe(0);\n\n\t\tawait firstLinter.dispose();\n\t\tawait secondLinter.dispose();\n\t});\n\n\ttest(`${linterName} can add words to the dictionary`, async () => {\n\t\tconst source = 'asdf is not a word';\n\n\t\tconst linter = new Linter({ binary });\n\t\tlet lints = await linter.lint(source);\n\n\t\texpect(lints).toHaveLength(1);\n\n\t\tawait linter.importWords(['asdf']);\n\t\tlints = await linter.lint(source);\n\n\t\texpect(lints).toHaveLength(0);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} allows correct capitalization of \"United States\"`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tconst lints = await linter.lint('The United States is a big country.');\n\n\t\texpect(lints).toHaveLength(0);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can summarize simple stat records`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tlinter.setup();\n\n\t\tconst source = 'This is an test.';\n\n\t\tconst lints = await linter.lint(source);\n\n\t\tconst lint = lints[0];\n\n\t\texpect(lint).not.toBeNull();\n\n\t\tconst sug = lint.suggestions()[0];\n\n\t\texpect(sug).not.toBeNull();\n\n\t\tconst applied = await linter.applySuggestion(source, lint, sug);\n\n\t\texpect(applied).toBe('This is a test.');\n\n\t\tconst summary = await linter.summarizeStats();\n\t\texpect(summary).toBeTypeOf('object');\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can save and restore stat records`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tlinter.setup();\n\n\t\tconst source = 'This is an test.';\n\n\t\tconst lints = await linter.lint(source);\n\n\t\tconst lint = lints[0];\n\n\t\texpect(lint).not.toBeNull();\n\n\t\tconst sug = lint.suggestions()[0];\n\n\t\texpect(sug).not.toBeNull();\n\n\t\tconst applied = await linter.applySuggestion(source, lint, sug);\n\n\t\texpect(applied).toBe('This is a test.');\n\n\t\tconst stats = await linter.generateStatsFile();\n\n\t\tconst newLinter = new Linter({ binary });\n\t\tawait newLinter.importStatsFile(stats);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} emits the correct span indices`, async () => {\n\t\tconst text = '✉️👋👍✉️🚀✉️🌴 This is to show the offset issue sdssda is it there?';\n\n\t\tconst linter = new LocalLinter({ binary });\n\t\tconst lints = await linter.lint(text);\n\n\t\tconst span = lints[0].span();\n\n\t\texpect(span.start).toBe(48);\n\t\texpect(span.end).toBe(54);\n\n\t\texpect(text.slice(span.start, span.end)).toBe('sdssda');\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} lints headings when forced to mark them as such`, async () => {\n\t\tconst text = 'This sentences should be forced to title case.';\n\n\t\tconst linter = new LocalLinter({ binary });\n\t\tconst lints = await linter.lint(text, { forceAllHeadings: true });\n\n\t\texpect(lints.length).toBe(1);\n\n\t\tconst lint = lints[0];\n\t\texpect(lint.lint_kind()).toBe('Capitalization');\n\t\texpect(lint.get_problem_text()).toBe(text);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} lints headings when forced to mark them as such with organized mode`, async () => {\n\t\tconst text = 'This sentences should be forced to title case.';\n\n\t\tconst linter = new LocalLinter({ binary });\n\t\tconst lints = await linter.organizedLints(text, { forceAllHeadings: true });\n\n\t\tconst titleCaseLints = lints.UseTitleCase;\n\t\texpect(titleCaseLints).not.toBeUndefined();\n\t\texpect(titleCaseLints.length).toBe(1);\n\n\t\tconst lint = titleCaseLints[0];\n\t\texpect(lint.lint_kind()).toBe('Capitalization');\n\t\texpect(lint.get_problem_text()).toBe(text);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} will lint many random strings with a single instance`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tfor (let i = 0; i < 250; i++) {\n\t\t\tconst text = randomString(10);\n\t\t\tconst lints = await linter.organizedLints(text);\n\n\t\t\texpect(lints).not.toBeNull();\n\t\t}\n\n\t\tawait linter.dispose();\n\t}, 120000);\n\n\ttest(`${linterName} can load Weirpacks from a Blob`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tawait linter.setup();\n\n\t\tconst bytes = base64ToBytes(WEIRPACK_PASS_BASE64);\n\t\tconst arr = new Uint8Array(bytes);\n\t\tconst blob = new Blob([arr], { type: 'application/zip' });\n\t\tconst failures = await linter.loadWeirpackFromBlob(blob);\n\n\t\texpect(failures).toBeUndefined();\n\n\t\tconst lints = await linter.organizedLints('banana');\n\t\texpect(lints.WeirpackTestRule).toHaveLength(1);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can load Weirpacks from Uint8Array`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tawait linter.setup();\n\n\t\tconst bytes = base64ToBytes(WEIRPACK_PASS_BASE64);\n\t\tconst failures = await linter.loadWeirpackFromBytes(bytes);\n\n\t\texpect(failures).toBeUndefined();\n\n\t\tconst lints = await linter.organizedLints('banana');\n\t\texpect(lints.WeirpackTestRule).toHaveLength(1);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} rejects Weirpacks with failing tests (Blob)`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tawait linter.setup();\n\n\t\tconst bytes = base64ToBytes(WEIRPACK_FAIL_BASE64);\n\t\tconst arr = new Uint8Array(bytes);\n\t\tconst blob = new Blob([arr], { type: 'application/zip' });\n\t\tconst failures = await linter.loadWeirpackFromBlob(blob);\n\n\t\texpect(failures).toBeTypeOf('object');\n\t\texpect(failures?.WeirpackTestRule?.[0]?.expected).toBe('banana');\n\n\t\tconst lints = await linter.organizedLints('banana');\n\t\texpect(lints.WeirpackTestRule).toBeUndefined();\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} rejects Weirpacks with failing tests (Uint8Array)`, async () => {\n\t\tconst linter = new Linter({ binary });\n\t\tawait linter.setup();\n\n\t\tconst bytes = base64ToBytes(WEIRPACK_FAIL_BASE64);\n\t\tconst failures = await linter.loadWeirpackFromBytes(bytes);\n\n\t\texpect(failures).toBeTypeOf('object');\n\t\texpect(failures?.WeirpackTestRule?.[0]?.expected).toBe('banana');\n\n\t\tconst lints = await linter.organizedLints('banana');\n\t\texpect(lints.WeirpackTestRule).toBeUndefined();\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can exclude things with Regex in organized lint function.`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst regex = 'errorz';\n\t\tconst source = 'This text contains errorz.';\n\n\t\t// Without regex, Harper should detect the error.\n\t\tlet lints = await linter.organizedLints(source);\n\t\tlet flattened = Object.values(lints).flat();\n\t\texpect(flattened).toHaveLength(1);\n\n\t\t// With regex, Harper should not detect the error.\n\t\tlints = await linter.organizedLints(source, { regex_mask: regex });\n\t\tflattened = Object.values(lints).flat();\n\t\texpect(flattened).toHaveLength(0);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} returns correct suggestion for 'ned' with organizedLints.`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst source = \"I don't ned it.\";\n\t\tconst lints = await linter.organizedLints(source);\n\t\tconst flattened = Object.values(lints).flat();\n\n\t\texpect(flattened).toHaveLength(1);\n\n\t\tconst suggestions = flattened[0].suggestions().map((s) => s.get_replacement_text());\n\n\t\texpect(suggestions).toContain('need');\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} can exclude things with Regex in normal lint function.`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst regex = 'errorz';\n\t\tconst source = 'This text contains errorz.';\n\n\t\t// Without regex, Harper should detect the error.\n\t\tlet lints = await linter.lint(source);\n\t\texpect(lints).toHaveLength(1);\n\n\t\t// With regex, Harper should not detect the error.\n\t\tlints = await linter.lint(source, { regex_mask: regex });\n\t\texpect(lints).toHaveLength(0);\n\n\t\tawait linter.dispose();\n\t});\n\n\ttest(`${linterName} returns correct suggestion for 'ned'.`, async () => {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconst source = \"I don't ned it.\";\n\t\tconst lints = await linter.lint(source);\n\n\t\texpect(lints).toHaveLength(1);\n\t\tconst suggestions = lints[0].suggestions().map((s) => s.get_replacement_text());\n\t\texpect(suggestions).toContain('need');\n\n\t\tawait linter.dispose();\n\t});\n}\n\n// Disabled because it significantly slows down CI\n// test('LocalLinters will lint many times with fresh instances', async () => {\n// \tfor (let i = 0; i < 300; i++) {\n// \t\tconst linter = new LocalLinter({ binary });\n//\n// \t\tconst text = 'This is a grammatically correct sentence.';\n// \t\tconst lints = await linter.organizedLints(text);\n// \t\texpect(lints).not.toBeNull();\n//\n// \t\tawait linter.dispose();\n// \t}\n// }, 120000);\n\ntest('Linters have the same config format', async () => {\n\tconst configs = [];\n\n\tfor (const Linter of Object.values(linters)) {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconfigs.push(await linter.getLintConfig());\n\n\t\tawait linter.dispose();\n\t}\n\n\tfor (const config of configs) {\n\t\texpect(config).toEqual(configs[0]);\n\t\texpect(config).toBeTypeOf('object');\n\t}\n});\n\ntest('Linters have the same JSON config format', async () => {\n\tconst configs = [];\n\n\tfor (const Linter of Object.values(linters)) {\n\t\tconst linter = new Linter({ binary });\n\n\t\tconfigs.push(await linter.getLintConfigAsJSON());\n\t\tawait linter.dispose();\n\t}\n\n\tfor (const config of configs) {\n\t\texpect(config).toEqual(configs[0]);\n\t\texpect(config).toBeTypeOf('string');\n\t}\n});\n"
  },
  {
    "path": "packages/harper.js/src/Linter.ts",
    "content": "import type { Dialect, Lint, Suggestion } from 'harper-wasm';\nimport type { BinaryModule } from './binary';\nimport type { LintConfig, LintOptions } from './main';\nimport type Summary from './Summary';\n\nexport interface WeirpackTestFailure {\n\texpected: string;\n\tgot: string;\n}\n\nexport type WeirpackTestFailures = Record<string, WeirpackTestFailure[]>;\n\n/** An interface for an object that can perform linting actions. */\nexport default interface Linter {\n\t/** Complete any setup that is necessary before linting. This may include downloading and compiling the WebAssembly binary.\n\t * This setup will complete when needed regardless of whether you call this function.\n\t * This function exists to allow you to do this work when it is of least impact to the user experiences (i.e. while you're loading something else). */\n\tsetup(): Promise<void>;\n\n\t/** Lint the provided text. */\n\tlint(text: string, options?: LintOptions): Promise<Lint[]>;\n\n\t/** Lint the provided text, maintaining the relationship with the source rule. */\n\torganizedLints(text: string, options?: LintOptions): Promise<Record<string, Lint[]>>;\n\n\t/** Apply a suggestion from a lint to text, returning the changed text. */\n\tapplySuggestion(text: string, lint: Lint, suggestion: Suggestion): Promise<string>;\n\n\t/** Determine if the provided text is likely to be intended to be English.\n\t * The algorithm can be described as \"proof of concept\" and as such does not work terribly well.*/\n\tisLikelyEnglish(text: string): Promise<boolean>;\n\n\t/** Determine which parts of a given string are intended to be English, returning those bits.\n\t * The algorithm can be described as \"proof of concept\" and as such does not work terribly well.*/\n\tisolateEnglish(text: string): Promise<string>;\n\n\t/** Get the linter's current configuration. */\n\tgetLintConfig(): Promise<LintConfig>;\n\n\t/** Get the default (unset) linter configuration as JSON.\n\t * This method does not affect the caller's lint configuration, nor does it return the current one. */\n\tgetDefaultLintConfigAsJSON(): Promise<string>;\n\n\t/** Get the default (unset) linter configuration.\n\t * This method does not affect the caller's lint configuration, nor does it return the current one. */\n\tgetDefaultLintConfig(): Promise<LintConfig>;\n\n\t/** Set the linter's current configuration. */\n\tsetLintConfig(config: LintConfig): Promise<void>;\n\n\t/** Get the linter's current configuration as JSON. */\n\tgetLintConfigAsJSON(): Promise<string>;\n\n\t/** Set the linter's current configuration from JSON. */\n\tsetLintConfigWithJSON(config: string): Promise<void>;\n\n\t/** Get the linting rule descriptions as a JSON map, formatted in Markdown. */\n\tgetLintDescriptionsAsJSON(): Promise<string>;\n\n\t/** Get the linting rule descriptions as an object, formatted in Markdown. */\n\tgetLintDescriptions(): Promise<Record<string, string>>;\n\n\t/** Get the linting rule descriptions as a JSON map, formatted in HTML.\n\t * Wraps the function on the BinaryModule by the same name. */\n\tgetLintDescriptionsHTMLAsJSON(): Promise<string>;\n\n\t/** Get the linting rule descriptions as an object, formatted in HTML.\n\t * Wraps the function on the BinaryModule by the same name. */\n\tgetLintDescriptionsHTML(): Promise<Record<string, string>>;\n\n\t/** Convert a string to Chicago-style title case. \n\t Wraps the function on the BinaryModule by the same name. */\n\ttoTitleCase(text: string): Promise<string>;\n\n\t/** Release resources held by this linter instance. */\n\tdispose(): Promise<void>;\n\n\t/** Ignore future instances of a lint from a previous linting run in future invocations. */\n\tignoreLint(source: string, lint: Lint): Promise<void>;\n\n\t/** Ignore future instances of a lint from a previous linting run in future invocations using its hash. */\n\tignoreLintHash(hash: bigint): Promise<void>;\n\n\t/** Export the ignored lints to a JSON list of privacy-respecting hashes. */\n\texportIgnoredLints(): Promise<string>;\n\n\t/** Import ignored lints from a JSON list to the linter.\n\t * This function appends to the existing lints, if any. */\n\timportIgnoredLints(json: string): Promise<void>;\n\n\t/** Produce a context-sensitive hash that represents a lint.  */\n\tcontextHash(source: string, lint: Lint): Promise<bigint>;\n\n\t/** Clear records of all previously ignored lints. */\n\tclearIgnoredLints(): Promise<void>;\n\n\t/** Clear the words which have been added to the dictionary. This will not clear words from the curated dictionary. */\n\tclearWords(): Promise<void>;\n\n\t/** Import words into the dictionary. This is a significant operation, so try to batch words. */\n\timportWords(words: string[]): Promise<void>;\n\n\t/** Export all added words from the dictionary. Note that this will NOT export anything from the curated dictionary,\n\t * only words from previous calls to `this.importWords`. */\n\texportWords(): Promise<string[]>;\n\n\t/** Get the dialect of English this linter was constructed for. */\n\tgetDialect(): Promise<Dialect>;\n\n\t/** Get the dialect of English this linter was constructed for. */\n\tsetDialect(dialect: Dialect): Promise<void>;\n\n\t/** Summarize the linter's usage statistics.\n\t * You may optionally pass in a start and/or end time.\n\t *\n\t * If so, the summary with only include data from _after_ the start time but _before_ the end time. */\n\tsummarizeStats(start?: bigint, end?: bigint): Promise<Summary>;\n\n\t/** Generate a statistics log file you can save to permanent storage. */\n\tgenerateStatsFile(): Promise<string>;\n\n\t/** Import a statistics log file. */\n\timportStatsFile(statsFile: string): Promise<void>;\n\n\t/**\n\t * Load a Weirpack from a Blob, merging its rules into the current linter.\n\t * Returns `undefined` when the Weirpack tests pass and the rules are imported,\n\t * otherwise returns a map of rule names → failing tests so the caller can\n\t * surface the broken expectations.\n\t */\n\tloadWeirpackFromBlob(blob: Blob): Promise<WeirpackTestFailures | undefined>;\n\n\t/**\n\t * Load a Weirpack from an array of bytes, merging its rules into the current linter.\n\t * Returns the same failure report structure as `loadWeirpackFromBlob`.\n\t */\n\tloadWeirpackFromBytes(bytes: Uint8Array): Promise<WeirpackTestFailures | undefined>;\n}\n\n/** The properties and information needed to construct a Linter. */\nexport interface LinterInit {\n\t/** The module or path to the WebAssembly binary. */\n\tbinary: BinaryModule;\n\t/** The dialect of English Harper should use. If omitted, Harper will default to American English. */\n\tdialect?: Dialect;\n}\n"
  },
  {
    "path": "packages/harper.js/src/LocalLinter.ts",
    "content": "import type { Dialect, Lint, Suggestion, Linter as WasmLinter } from 'harper-wasm';\nimport { Language } from 'harper-wasm';\nimport LazyPromise from 'p-lazy';\nimport type { SuperBinaryModule } from './binary';\nimport type Linter from './Linter';\nimport type { LinterInit, WeirpackTestFailures } from './Linter';\nimport type { LintConfig, LintOptions } from './main';\n\n/** A Linter that runs in the current JavaScript context (meaning it is allowed to block the event loop).\n * See the interface definition for more details. */\nexport default class LocalLinter implements Linter {\n\tbinary: SuperBinaryModule;\n\tprivate inner: Promise<WasmLinter>;\n\tprivate disposed = false;\n\n\tconstructor(init: LinterInit) {\n\t\tthis.binary = init.binary as SuperBinaryModule;\n\t\tthis.binary.setup();\n\t\tthis.inner = this.createInner(init.dialect);\n\t}\n\n\tprivate createInner(dialect?: Dialect): Promise<WasmLinter> {\n\t\treturn LazyPromise.from(async () => {\n\t\t\tawait this.binary.setup();\n\t\t\treturn this.binary.createLinter(dialect);\n\t\t});\n\t}\n\n\tasync setup(): Promise<void> {\n\t\tawait this.lint('', { language: 'plaintext' });\n\n\t\tconst exported = await this.exportIgnoredLints();\n\t\tawait this.importIgnoredLints(exported);\n\t}\n\n\tasync lint(text: string, options?: LintOptions): Promise<Lint[]> {\n\t\tconst inner = await this.inner;\n\n\t\tlet language = Language.Markdown;\n\n\t\tswitch (options?.language) {\n\t\t\tcase 'plaintext':\n\t\t\t\tlanguage = Language.Plain;\n\t\t\t\tbreak;\n\t\t\tcase 'markdown':\n\t\t\t\tlanguage = Language.Markdown;\n\t\t\t\tbreak;\n\t\t\tcase 'typst':\n\t\t\t\tlanguage = Language.Typst;\n\t\t}\n\n\t\tconst lints = inner.lint(\n\t\t\ttext,\n\t\t\tlanguage,\n\t\t\toptions?.forceAllHeadings ?? false,\n\t\t\toptions?.regex_mask,\n\t\t);\n\n\t\treturn lints;\n\t}\n\n\tasync organizedLints(text: string, options?: LintOptions): Promise<Record<string, Lint[]>> {\n\t\tconst inner = await this.inner;\n\t\tlet language = Language.Markdown;\n\n\t\tswitch (options?.language) {\n\t\t\tcase 'plaintext':\n\t\t\t\tlanguage = Language.Plain;\n\t\t\t\tbreak;\n\t\t\tcase 'markdown':\n\t\t\t\tlanguage = Language.Markdown;\n\t\t\t\tbreak;\n\t\t\tcase 'typst':\n\t\t\t\tlanguage = Language.Typst;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst lintGroups = inner.organized_lints(\n\t\t\ttext,\n\t\t\tlanguage,\n\t\t\toptions?.forceAllHeadings ?? false,\n\t\t\toptions?.regex_mask,\n\t\t);\n\n\t\tconst output: Record<string, Lint[]> = {};\n\n\t\tfor (const group of lintGroups) {\n\t\t\toutput[group.group] = group.lints;\n\t\t\tgroup.free();\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tasync applySuggestion(text: string, lint: Lint, suggestion: Suggestion): Promise<string> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.apply_suggestion(text, lint, suggestion);\n\t}\n\n\tasync isLikelyEnglish(text: string): Promise<boolean> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.is_likely_english(text);\n\t}\n\n\tasync isolateEnglish(text: string): Promise<string> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.isolate_english(text);\n\t}\n\n\tasync getLintConfig(): Promise<LintConfig> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.get_lint_config_as_object();\n\t}\n\n\tasync getDefaultLintConfigAsJSON(): Promise<string> {\n\t\treturn await this.binary.getDefaultLintConfigAsJSON();\n\t}\n\n\tasync getDefaultLintConfig(): Promise<LintConfig> {\n\t\treturn await this.binary.getDefaultLintConfig();\n\t}\n\n\tasync setLintConfig(config: LintConfig): Promise<void> {\n\t\tconst inner = await this.inner;\n\t\tinner.set_lint_config_from_object(config);\n\t}\n\n\tasync getLintConfigAsJSON(): Promise<string> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.get_lint_config_as_json();\n\t}\n\n\tasync setLintConfigWithJSON(config: string): Promise<void> {\n\t\tconst inner = await this.inner;\n\t\tinner.set_lint_config_from_json(config);\n\t}\n\n\tasync toTitleCase(text: string): Promise<string> {\n\t\treturn await this.binary.toTitleCase(text);\n\t}\n\n\tasync getLintDescriptions(): Promise<Record<string, string>> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.get_lint_descriptions_as_object();\n\t}\n\n\tasync getLintDescriptionsAsJSON(): Promise<string> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.get_lint_descriptions_as_json();\n\t}\n\n\tasync getLintDescriptionsHTML(): Promise<Record<string, string>> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.get_lint_descriptions_html_as_object();\n\t}\n\n\tasync getLintDescriptionsHTMLAsJSON(): Promise<string> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.get_lint_descriptions_html_as_json();\n\t}\n\n\tasync ignoreLint(source: string, lint: Lint): Promise<void> {\n\t\tconst inner = await this.inner;\n\t\tinner.ignore_lint(source, lint);\n\t}\n\n\tasync ignoreLintHash(hash: bigint): Promise<void> {\n\t\tconst inner = await this.inner;\n\t\tinner.ignore_hash(hash);\n\t}\n\n\tasync exportIgnoredLints(): Promise<string> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.export_ignored_lints();\n\t}\n\n\tasync importIgnoredLints(json: string): Promise<void> {\n\t\tconst inner = await this.inner;\n\t\tinner.import_ignored_lints(json);\n\t}\n\n\tasync contextHash(source: string, lint: Lint): Promise<bigint> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.context_hash(source, lint);\n\t}\n\n\tasync clearIgnoredLints(): Promise<void> {\n\t\tconst inner = await this.inner;\n\t\tinner.clear_ignored_lints();\n\t}\n\n\tasync clearWords(): Promise<void> {\n\t\tconst inner = await this.inner;\n\n\t\treturn inner.clear_words();\n\t}\n\n\tasync importWords(words: string[]): Promise<void> {\n\t\tconst inner = await this.inner;\n\n\t\treturn inner.import_words(words);\n\t}\n\n\tasync exportWords(): Promise<string[]> {\n\t\tconst inner = await this.inner;\n\n\t\treturn inner.export_words();\n\t}\n\n\tasync getDialect(): Promise<Dialect> {\n\t\tconst inner = await this.inner;\n\n\t\treturn inner.get_dialect();\n\t}\n\n\tasync setDialect(dialect: Dialect): Promise<void> {\n\t\tconst inner = await this.inner;\n\n\t\tif (inner.get_dialect() !== dialect) {\n\t\t\tinner.free();\n\t\t\tthis.inner = this.createInner(dialect);\n\t\t}\n\n\t\treturn Promise.resolve();\n\t}\n\n\tasync summarizeStats(start?: bigint, end?: bigint): Promise<any> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.summarize_stats(start, end);\n\t}\n\n\tasync generateStatsFile(): Promise<string> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.generate_stats_file();\n\t}\n\n\tasync importStatsFile(statsFile: string): Promise<void> {\n\t\tconst inner = await this.inner;\n\t\treturn inner.import_stats_file(statsFile);\n\t}\n\n\t/**\n\t * Load a Weirpack from a Blob.\n\t *\n\t * Returns `undefined` if tests pass and rules are imported, otherwise returns\n\t * the Weirpack test failures.\n\t */\n\tasync loadWeirpackFromBlob(blob: Blob): Promise<WeirpackTestFailures | undefined> {\n\t\tconst bytes = new Uint8Array(await blob.arrayBuffer());\n\t\treturn this.loadWeirpackFromBytes(bytes);\n\t}\n\n\t/**\n\t * Load a Weirpack from a byte array.\n\t *\n\t * Returns `undefined` if tests pass and rules are imported, otherwise returns\n\t * the Weirpack test failures.\n\t */\n\tasync loadWeirpackFromBytes(\n\t\tbytes: Uint8Array | number[],\n\t): Promise<WeirpackTestFailures | undefined> {\n\t\tconst inner = await this.inner;\n\t\tconst data = bytes instanceof Uint8Array ? bytes : Uint8Array.from(bytes);\n\t\tconst result = (\n\t\t\tinner as unknown as { import_weirpack: (input: Uint8Array) => unknown }\n\t\t).import_weirpack(data);\n\t\treturn result as WeirpackTestFailures | undefined;\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.disposed = true;\n\t\tconst inner = await this.inner;\n\t\tinner.free();\n\t}\n}\n"
  },
  {
    "path": "packages/harper.js/src/Serializer.test.ts",
    "content": "import { Span } from 'harper-wasm';\nimport { beforeEach, describe, expect, test } from 'vitest';\nimport { binary } from './binary';\nimport LocalLinter from './LocalLinter';\nimport Serializer from './Serializer';\n\ndescribe('Serializer', () => {\n\tlet serializer = new Serializer(binary);\n\n\tbeforeEach(() => {\n\t\tserializer = new Serializer(binary);\n\t});\n\n\ttest('works with strings', async () => {\n\t\tconst start = 'This is a string';\n\n\t\tconst end = await serializer.deserializeArg(\n\t\t\tstructuredClone(await serializer.serializeArg(start)),\n\t\t);\n\n\t\texpect(end).toBe(start);\n\t\texpect(typeof end).toBe(typeof start);\n\t});\n\n\ttest('works with false booleans', async () => {\n\t\tconst start = false;\n\n\t\tconst end = await serializer.deserializeArg(\n\t\t\tstructuredClone(await serializer.serializeArg(start)),\n\t\t);\n\n\t\texpect(end).toBe(start);\n\t\texpect(typeof end).toBe(typeof start);\n\t});\n\n\ttest('works with true booleans', async () => {\n\t\tconst start = true;\n\n\t\tconst end = await serializer.deserializeArg(\n\t\t\tstructuredClone(await serializer.serializeArg(start)),\n\t\t);\n\n\t\texpect(end).toBe(start);\n\t\texpect(typeof end).toBe(typeof start);\n\t});\n\n\ttest('works with numbers', async () => {\n\t\tconst start = 123;\n\n\t\tconst end = await serializer.deserializeArg(\n\t\t\tstructuredClone(await serializer.serializeArg(start)),\n\t\t);\n\n\t\texpect(end).toBe(start);\n\t\texpect(typeof end).toBe(typeof start);\n\t});\n\n\ttest('works with Spans', async () => {\n\t\tconst start = Span.new(123, 321);\n\n\t\tconst end = await serializer.deserializeArg(\n\t\t\tstructuredClone(await serializer.serializeArg(start)),\n\t\t);\n\n\t\texpect(end.start).toBe(start.start);\n\t\texpect(end.len()).toBe(start.len());\n\t\texpect(typeof end).toBe(typeof start);\n\t});\n\n\ttest('works with Lints', async () => {\n\t\tconst linter = new LocalLinter({ binary });\n\t\tconst lints = await linter.lint('This is an test.');\n\t\tconst start = lints[0];\n\n\t\texpect(start).not.toBeNull();\n\n\t\tconst end = await serializer.deserializeArg(\n\t\t\tstructuredClone(await serializer.serializeArg(start)),\n\t\t);\n\n\t\texpect(end.message()).toBe(start.message());\n\t\texpect(end.lint_kind()).toBe(start.lint_kind());\n\n\t\tawait linter.dispose();\n\t});\n});\n"
  },
  {
    "path": "packages/harper.js/src/Serializer.ts",
    "content": "import type { BinaryModule, SuperBinaryModule } from './binary';\nimport { assert } from './utils';\n\nexport type SerializableTypes =\n\t| 'string'\n\t| 'number'\n\t| 'boolean'\n\t| 'object'\n\t| 'Suggestion'\n\t| 'Lint'\n\t| 'Span'\n\t| 'Array'\n\t| 'undefined'\n\t| 'bigint';\n\n/** Serializable argument to a procedure to be run on the web worker. */\nexport interface RequestArg {\n\tjson: string;\n\ttype: SerializableTypes;\n}\n\n/** An object that is sent to the web worker to request work to be done. */\nexport interface SerializedRequest {\n\t/** The procedure to be executed. */\n\tprocName: string;\n\t/** The arguments to the procedure */\n\targs: RequestArg[];\n}\n\n/** An object that is received by the web worker to request work to be done. */\nexport interface DeserializedRequest {\n\t/** The procedure to be executed. */\n\tprocName: string;\n\t/** The arguments to the procedure */\n\targs: any[];\n}\n\nexport function isSerializedRequest(v: unknown): v is SerializedRequest {\n\treturn typeof v === 'object' && v !== null && 'procName' in v && 'args' in v;\n}\n\n/** An internal class that helps the `WorkerLinter` shuffle data across a messaging channel. */\nexport default class Serializer {\n\tbinary: SuperBinaryModule;\n\n\tconstructor(binary: BinaryModule) {\n\t\tthis.binary = binary as SuperBinaryModule;\n\t\tthis.binary.setup();\n\t}\n\n\tasync serializeArg(arg: any): Promise<RequestArg> {\n\t\tconst { Lint, Span, Suggestion } = await this.binary.getBinaryModule();\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn {\n\t\t\t\tjson: JSON.stringify(await Promise.all(arg.map((a) => this.serializeArg(a)))),\n\t\t\t\ttype: 'Array',\n\t\t\t};\n\t\t}\n\n\t\tconst argType = typeof arg;\n\t\tswitch (argType) {\n\t\t\tcase 'string':\n\t\t\tcase 'number':\n\t\t\tcase 'boolean':\n\t\t\tcase 'undefined':\n\t\t\t\treturn { json: JSON.stringify(arg), type: argType };\n\t\t\tcase 'bigint':\n\t\t\t\treturn { json: arg.toString(), type: argType };\n\t\t}\n\n\t\tif (arg.to_json !== undefined) {\n\t\t\tconst json = arg.to_json();\n\t\t\tlet type: SerializableTypes | undefined;\n\n\t\t\tif (arg instanceof Lint) {\n\t\t\t\ttype = 'Lint';\n\t\t\t} else if (arg instanceof Suggestion) {\n\t\t\t\ttype = 'Suggestion';\n\t\t\t} else if (arg instanceof Span) {\n\t\t\t\ttype = 'Span';\n\t\t\t}\n\n\t\t\tif (type === undefined) {\n\t\t\t\tthrow new Error('Unhandled case: type undefined');\n\t\t\t}\n\n\t\t\treturn { json, type };\n\t\t}\n\n\t\tif (argType == 'object') {\n\t\t\treturn {\n\t\t\t\tjson: JSON.stringify(\n\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\tObject.entries(arg).map(([key, value]) => this.serializeArg([key, value])),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\ttype: 'object',\n\t\t\t};\n\t\t}\n\n\t\tthrow new Error(`Unhandled case: ${arg}`);\n\t}\n\n\tasync serialize(req: DeserializedRequest): Promise<SerializedRequest> {\n\t\treturn {\n\t\t\tprocName: req.procName,\n\t\t\targs: await Promise.all(req.args.map((arg) => this.serializeArg(arg))),\n\t\t};\n\t}\n\n\tasync deserializeArg(requestArg: RequestArg): Promise<any> {\n\t\tconst { Lint, Span, Suggestion } = await this.binary.getBinaryModule();\n\n\t\tswitch (requestArg.type) {\n\t\t\tcase 'bigint':\n\t\t\t\treturn BigInt(requestArg.json);\n\t\t\tcase 'undefined':\n\t\t\t\treturn undefined;\n\t\t\tcase 'boolean':\n\t\t\tcase 'number':\n\t\t\tcase 'string':\n\t\t\t\treturn JSON.parse(requestArg.json);\n\t\t\tcase 'Suggestion':\n\t\t\t\treturn Suggestion.from_json(requestArg.json);\n\t\t\tcase 'Lint':\n\t\t\t\treturn Lint.from_json(requestArg.json);\n\t\t\tcase 'Span':\n\t\t\t\treturn Span.from_json(requestArg.json);\n\t\t\tcase 'Array': {\n\t\t\t\tconst parsed = JSON.parse(requestArg.json);\n\t\t\t\tassert(Array.isArray(parsed));\n\t\t\t\treturn await Promise.all(parsed.map((arg) => this.deserializeArg(arg)));\n\t\t\t}\n\t\t\tcase 'object': {\n\t\t\t\tconst parsed = JSON.parse(requestArg.json);\n\t\t\t\treturn Object.fromEntries(\n\t\t\t\t\tawait Promise.all(parsed.map((val: any) => this.deserializeArg(val))),\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unhandled case: ${requestArg.type}`);\n\t\t}\n\t}\n\n\tasync deserialize(request: SerializedRequest): Promise<DeserializedRequest> {\n\t\treturn {\n\t\t\tprocName: request.procName,\n\t\t\targs: await Promise.all(request.args.map((arg) => this.deserializeArg(arg))),\n\t\t};\n\t}\n}\n"
  },
  {
    "path": "packages/harper.js/src/Summary.ts",
    "content": "/**\n * Represents the summary of linting results and history.\n * Useful to show linting statistics or insights to the user.\n */\nexport default interface Summary {\n\t/**\n\t * An object mapping each lint type to its count.\n\t * Example: `{ \"Spelling\": 4, \"Capitalization\": 1 }`\n\t */\n\tlint_counts: Record<string, number>;\n\n\t/**\n\t * The total number of fixes applied.\n\t */\n\ttotal_applied: number;\n\n\t/**\n\t * An object mapping misspelled words to their occurrence counts.\n\t * Example: `{ \"mispelled\": 1, \"mispell\": 1, \"thigs\": 2 }`\n\t */\n\tmisspelled: Record<string, number>;\n}\n"
  },
  {
    "path": "packages/harper.js/src/WorkerLinter/index.ts",
    "content": "import type { Dialect, Lint, Suggestion } from 'harper-wasm';\nimport type { BinaryModule } from '../binary';\nimport type Linter from '../Linter';\nimport type { LinterInit, WeirpackTestFailures } from '../Linter';\nimport type { LintConfig, LintOptions } from '../main';\nimport type { DeserializedRequest } from '../Serializer';\nimport Serializer from '../Serializer';\nimport Worker from './worker.ts?worker&inline';\n\n/** The data necessary to complete a request once the worker has responded. */\nexport interface RequestItem {\n\tresolve: (item: unknown) => void;\n\treject: (item: unknown) => void;\n\trequest: DeserializedRequest;\n}\n\n/** A Linter that spins up a dedicated web worker to do processing on a separate thread.\n * Main benefit: this Linter will not block the event loop for large documents.\n *\n * NOTE: This class will not work properly in Node. In that case, just use `LocalLinter`. */\nexport default class WorkerLinter implements Linter {\n\tprivate binary: BinaryModule;\n\tprivate serializer: Serializer;\n\tprivate dialect?: Dialect;\n\tprivate worker: Worker;\n\tprivate requestQueue: RequestItem[];\n\tprivate working = true;\n\tprivate disposed = false;\n\n\tconstructor(init: LinterInit) {\n\t\tthis.binary = init.binary;\n\t\tthis.serializer = new Serializer(this.binary);\n\t\tthis.dialect = init.dialect;\n\t\tthis.worker = new Worker();\n\t\tthis.requestQueue = [];\n\n\t\t// Fires when the worker sends 'ready'.\n\t\tthis.worker.onmessage = () => {\n\t\t\tthis.setupMainEventListeners();\n\n\t\t\tthis.worker.postMessage([this.binary.url, this.dialect]);\n\n\t\t\tthis.working = false;\n\t\t\tthis.submitRemainingRequests();\n\t\t};\n\t}\n\n\tprivate setupMainEventListeners() {\n\t\tthis.worker.onmessage = (e: MessageEvent) => {\n\t\t\tconst { resolve } = this.requestQueue.shift()!;\n\t\t\tthis.serializer.deserializeArg(e.data).then((v) => {\n\t\t\t\tresolve(v);\n\n\t\t\t\tthis.working = false;\n\n\t\t\t\tthis.submitRemainingRequests();\n\t\t\t});\n\t\t};\n\n\t\tthis.worker.onmessageerror = (e: MessageEvent) => {\n\t\t\tconst { reject } = this.requestQueue.shift()!;\n\t\t\treject(e.data);\n\t\t\tthis.working = false;\n\n\t\t\tthis.submitRemainingRequests();\n\t\t};\n\t}\n\n\tsetup(): Promise<void> {\n\t\treturn this.rpc('setup', []);\n\t}\n\n\tlint(text: string, options?: LintOptions): Promise<Lint[]> {\n\t\treturn this.rpc('lint', [text, options]);\n\t}\n\n\torganizedLints(text: string, options?: LintOptions): Promise<Record<string, Lint[]>> {\n\t\treturn this.rpc('organizedLints', [text, options]);\n\t}\n\n\tapplySuggestion(text: string, lint: Lint, suggestion: Suggestion): Promise<string> {\n\t\treturn this.rpc('applySuggestion', [text, lint, suggestion]);\n\t}\n\n\tisLikelyEnglish(text: string): Promise<boolean> {\n\t\treturn this.rpc('isLikelyEnglish', [text]);\n\t}\n\n\tisolateEnglish(text: string): Promise<string> {\n\t\treturn this.rpc('isolateEnglish', [text]);\n\t}\n\n\tasync getLintConfig(): Promise<LintConfig> {\n\t\treturn JSON.parse(await this.getLintConfigAsJSON());\n\t}\n\n\tsetLintConfig(config: LintConfig): Promise<void> {\n\t\treturn this.setLintConfigWithJSON(JSON.stringify(config));\n\t}\n\n\tgetLintConfigAsJSON(): Promise<string> {\n\t\treturn this.rpc('getLintConfigAsJSON', []);\n\t}\n\n\tsetLintConfigWithJSON(config: string): Promise<void> {\n\t\treturn this.rpc('setLintConfigWithJSON', [config]);\n\t}\n\n\ttoTitleCase(text: string): Promise<string> {\n\t\treturn this.rpc('toTitleCase', [text]);\n\t}\n\n\tgetLintDescriptionsAsJSON(): Promise<string> {\n\t\treturn this.rpc('getLintDescriptionsAsJSON', []);\n\t}\n\n\tasync getLintDescriptions(): Promise<Record<string, string>> {\n\t\treturn JSON.parse(await this.getLintDescriptionsAsJSON()) as Record<string, string>;\n\t}\n\n\tgetLintDescriptionsHTMLAsJSON(): Promise<string> {\n\t\treturn this.rpc('getLintDescriptionsHTMLAsJSON', []);\n\t}\n\n\tasync getLintDescriptionsHTML(): Promise<Record<string, string>> {\n\t\treturn JSON.parse(await this.getLintDescriptionsHTMLAsJSON()) as Record<string, string>;\n\t}\n\n\tgetDefaultLintConfigAsJSON(): Promise<string> {\n\t\treturn this.rpc('getDefaultLintConfigAsJSON', []);\n\t}\n\n\tasync getDefaultLintConfig(): Promise<LintConfig> {\n\t\treturn JSON.parse(await this.getDefaultLintConfigAsJSON()) as LintConfig;\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.rpc('dispose', []);\n\n\t\tthis.disposed = true;\n\t\tthis.requestQueue = [];\n\t\tthis.worker.terminate();\n\t}\n\n\tignoreLint(source: string, lint: Lint): Promise<void> {\n\t\treturn this.rpc('ignoreLint', [source, lint]);\n\t}\n\n\tignoreLintHash(hash: bigint): Promise<void> {\n\t\treturn this.rpc('ignoreLintHash', [hash]);\n\t}\n\n\texportIgnoredLints(): Promise<string> {\n\t\treturn this.rpc('exportIgnoredLints', []);\n\t}\n\n\timportIgnoredLints(json: string): Promise<void> {\n\t\treturn this.rpc('importIgnoredLints', [json]);\n\t}\n\n\tcontextHash(source: string, lint: Lint): Promise<bigint> {\n\t\treturn this.rpc('contextHash', [source, lint]);\n\t}\n\n\tclearIgnoredLints(): Promise<void> {\n\t\treturn this.rpc('clearIgnoredLints', []);\n\t}\n\n\tclearWords(): Promise<void> {\n\t\treturn this.rpc('clearWords', []);\n\t}\n\n\timportWords(words: string[]): Promise<void> {\n\t\treturn this.rpc('importWords', [words]);\n\t}\n\n\texportWords(): Promise<string[]> {\n\t\treturn this.rpc('exportWords', []);\n\t}\n\n\tgetDialect(): Promise<Dialect> {\n\t\treturn this.rpc('getDialect', []);\n\t}\n\n\tsetDialect(dialect: Dialect): Promise<void> {\n\t\treturn this.rpc('setDialect', [dialect]);\n\t}\n\n\tsummarizeStats(start?: bigint, end?: bigint): Promise<any> {\n\t\treturn this.rpc('summarizeStats', [start, end]);\n\t}\n\n\tgenerateStatsFile(): Promise<string> {\n\t\treturn this.rpc('generateStatsFile', []);\n\t}\n\n\timportStatsFile(statsFile: string): Promise<void> {\n\t\treturn this.rpc('importStatsFile', [statsFile]);\n\t}\n\n\t/**\n\t * Load a Weirpack from a Blob via the worker thread.\n\t *\n\t * Returns `undefined` when the tests pass and the pack is imported, otherwise\n\t * forwards the failure report back to the caller.\n\t */\n\tasync loadWeirpackFromBlob(blob: Blob): Promise<WeirpackTestFailures | undefined> {\n\t\tconst bytes = new Uint8Array(await blob.arrayBuffer());\n\t\tconst arr = Array.from(bytes);\n\t\treturn await this.rpc('loadWeirpackFromBytes', [arr]);\n\t}\n\n\t/**\n\t * Load a Weirpack from bytes via the worker thread.\n\t *\n\t * Returns the failure report if tests fail or `undefined` when the pack is imported.\n\t */\n\tasync loadWeirpackFromBytes(\n\t\tbytes: Uint8Array | number[],\n\t): Promise<WeirpackTestFailures | undefined> {\n\t\tconst arr = Array.from(bytes);\n\t\treturn await this.rpc('loadWeirpackFromBytes', [arr]);\n\t}\n\n\t/** Run a procedure on the remote worker. */\n\tprivate async rpc(procName: string, args: unknown[]): Promise<any> {\n\t\tif (this.disposed) {\n\t\t\tthrow new Error('WorkerLinter has been disposed.');\n\t\t}\n\n\t\tconst promise = new Promise((resolve, reject) => {\n\t\t\tthis.requestQueue.push({\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t\trequest: { procName, args },\n\t\t\t});\n\n\t\t\tthis.submitRemainingRequests();\n\t\t});\n\n\t\treturn promise;\n\t}\n\n\tprivate async submitRemainingRequests() {\n\t\tif (this.working) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.working = true;\n\n\t\tif (this.requestQueue.length > 0) {\n\t\t\tconst { request } = this.requestQueue[0];\n\t\t\tconst serialized = await this.serializer.serialize(request);\n\t\t\tthis.worker.postMessage(serialized);\n\t\t} else {\n\t\t\tthis.working = false;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/harper.js/src/WorkerLinter/shims.ts",
    "content": "if (import.meta.env.MODE === 'test') {\n\t// @ts-expect-error\n\tglobalThis.__vitest_browser_runner__ = { wrapDynamicImport: (f) => f() };\n}\n"
  },
  {
    "path": "packages/harper.js/src/WorkerLinter/worker.ts",
    "content": "/// <reference lib=\"webworker\" />\nimport './shims';\nimport { SuperBinaryModule } from '../binary';\nimport LocalLinter from '../LocalLinter';\nimport Serializer, { isSerializedRequest, type SerializedRequest } from '../Serializer';\n\n// Notify the main thread that we are ready\nself.postMessage('ready');\n\nself.onmessage = (e) => {\n\tconst [binaryUrl, dialect] = e.data;\n\tif (typeof binaryUrl !== 'string') {\n\t\tthrow new TypeError(`Expected binary to be a string of url but got ${typeof binaryUrl}.`);\n\t}\n\tconst binary = SuperBinaryModule.create(binaryUrl);\n\tconst serializer = new Serializer(binary);\n\tconst linter = new LocalLinter({ binary, dialect });\n\n\tasync function processRequest(v: SerializedRequest) {\n\t\tconst { procName, args } = await serializer.deserialize(v);\n\n\t\tif (procName in linter) {\n\t\t\t// @ts-expect-error\n\t\t\tconst res = await linter[procName](...args);\n\t\t\tpostMessage(await serializer.serializeArg(res));\n\t\t}\n\t}\n\n\tself.onmessage = (e) => {\n\t\tif (isSerializedRequest(e.data)) {\n\t\t\tprocessRequest(e.data);\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "packages/harper.js/src/binary.ts",
    "content": "import { Dialect, type InitInput, type Linter as WasmLinter } from 'harper-wasm';\nimport { default as binaryInlinedUrl } from 'harper-wasm/harper_wasm_bg.wasm?inline';\nimport { default as binaryUrl } from 'harper-wasm/harper_wasm_bg.wasm?no-inline';\nimport LazyPromise from 'p-lazy';\nimport pMemoize from 'p-memoize';\nimport type { LintConfig } from './main';\n\nconst loadBinary = pMemoize(async (binary: string) => {\n\tconst exports = await import('harper-wasm');\n\n\tlet input: InitInput;\n\tif (typeof process !== 'undefined' && binary.startsWith('file://')) {\n\t\tconst fs = await import(/* webpackIgnore: true */ /* @vite-ignore */ 'fs');\n\t\tinput = new Promise((resolve, reject) => {\n\t\t\tfs.readFile(new URL(binary).pathname, (err, data) => {\n\t\t\t\tif (err) reject(err);\n\t\t\t\tresolve(data);\n\t\t\t});\n\t\t});\n\t} else {\n\t\tinput = binary;\n\t}\n\tawait exports.default({ module_or_path: input });\n\n\treturn exports;\n});\n\n/** A wrapper around the underlying WebAssembly module that contains Harper's core code. Used to construct a `Linter`, as well as access some miscellaneous other functions. */\nexport class BinaryModule {\n\tpublic url: string | URL = '';\n\tprivate inner: Promise<typeof import('harper-wasm')> | null = null;\n\n\t/** Load a binary from a specified URL. This is the only recommended way to construct this type. */\n\tpublic static create(url: string | URL): BinaryModule {\n\t\tconst module = new SuperBinaryModule();\n\n\t\tmodule.url = url;\n\t\tmodule.inner = LazyPromise.from(() =>\n\t\t\tloadBinary(typeof module.url === 'string' ? module.url : module.url.href),\n\t\t);\n\n\t\treturn module;\n\t}\n\n\tpublic async getDefaultLintConfigAsJSON(): Promise<string> {\n\t\tconst exported = await this.inner!;\n\t\treturn exported.get_default_lint_config_as_json();\n\t}\n\n\tpublic async getDefaultLintConfig(): Promise<LintConfig> {\n\t\tconst exported = await this.inner!;\n\t\treturn exported.get_default_lint_config();\n\t}\n\n\tpublic async toTitleCase(text: string): Promise<string> {\n\t\tconst exported = await this.inner!;\n\t\treturn exported.to_title_case(text);\n\t}\n\n\tpublic async setup(): Promise<void> {\n\t\tconst exported = await this.inner!;\n\t\texported.setup();\n\t}\n}\n\nexport class SuperBinaryModule extends BinaryModule {\n\tasync createLinter(dialect?: Dialect): Promise<WasmLinter> {\n\t\tconst exported = await this.getBinaryModule();\n\t\treturn exported.Linter.new(dialect ?? Dialect.American);\n\t}\n\n\tasync getBinaryModule(): Promise<any> {\n\t\treturn await LazyPromise.from(() =>\n\t\t\tloadBinary(typeof this.url === 'string' ? this.url : this.url.href),\n\t\t);\n\t}\n}\n\n/** A version of the Harper WebAssembly binary stored inline as a data URL.\n * Can be tree-shaken if unused. */\nexport const binary = /*@__PURE__*/ BinaryModule.create(binaryUrl);\n\n/** A version of the Harper WebAssembly binary stored inline as a data URL.\n * Can be tree-shaken if unused. */\nexport const binaryInlined = /*@__PURE__*/ BinaryModule.create(binaryInlinedUrl);\n"
  },
  {
    "path": "packages/harper.js/src/main.ts",
    "content": "export type { Lint, Span, Suggestion } from 'harper-wasm';\nexport { Dialect, SuggestionKind } from 'harper-wasm';\nexport {\n\tBinaryModule,\n\tbinary,\n\tbinaryInlined,\n} from './binary';\nexport type {\n\tdefault as Linter,\n\tLinterInit,\n\tWeirpackTestFailure,\n\tWeirpackTestFailures,\n} from './Linter';\nexport { default as LocalLinter } from './LocalLinter';\nexport type { default as Summary } from './Summary';\nexport { default as WorkerLinter } from './WorkerLinter';\nexport type { WeirpackArchive } from './weirpack';\nexport { packWeirpackFiles, unpackWeirpackBytes } from './weirpack';\n/** A linting rule configuration dependent on upstream Harper's available rules.\n * This is a record, since you shouldn't hard-code the existence of any particular rules and should generalize based on this struct. */\nexport type LintConfig = Record<string, boolean | null>;\n\n/**  Options available to configure Harper's parser for an individual linting operation. */\nexport interface LintOptions {\n\t/** The markup language that is being passed. Defaults to `markdown`. */\n\tlanguage?: 'plaintext' | 'markdown' | 'typst';\n\tregex_mask?: string;\n\n\t/** Force the entirety of the document to be composed of headings. An undefined value is assumed to be false.*/\n\tforceAllHeadings?: boolean;\n}\n"
  },
  {
    "path": "packages/harper.js/src/utils.ts",
    "content": "export function assert(condition: unknown, message?: string): asserts condition {\n\tif (!condition) {\n\t\tthrow new Error(message ?? 'Assertion failed');\n\t}\n}\n"
  },
  {
    "path": "packages/harper.js/src/weirpack.test.ts",
    "content": "import { strToU8, zipSync } from 'fflate';\nimport { describe, expect, test } from 'vitest';\nimport { packWeirpackFiles, unpackWeirpackBytes } from './weirpack';\n\ndescribe('weirpack helpers', () => {\n\ttest('round-trips a weirpack archive', () => {\n\t\tconst manifest = {\n\t\t\tauthor: 'Test Author',\n\t\t\tversion: '0.1.0',\n\t\t\tdescription: 'Test pack',\n\t\t\tlicense: 'MIT',\n\t\t};\n\n\t\tconst files = new Map([\n\t\t\t['manifest.json', JSON.stringify(manifest, null, 2)],\n\t\t\t['ExampleRule.weir', 'expr main test'],\n\t\t\t['AnotherRule.weir', 'expr main banana'],\n\t\t]);\n\n\t\tconst bytes = packWeirpackFiles(files);\n\t\tconst unpacked = unpackWeirpackBytes(bytes);\n\n\t\texpect(unpacked.manifest).toEqual(manifest);\n\t\texpect(unpacked.files.get('ExampleRule.weir')).toBe('expr main test');\n\t\texpect(unpacked.files.get('AnotherRule.weir')).toBe('expr main banana');\n\t});\n\n\ttest('packWeirpackFiles requires a manifest.json file', () => {\n\t\texpect(() => packWeirpackFiles(new Map([['Rule.weir', 'expr main test']]))).toThrow(\n\t\t\t'Weirpack is missing manifest.json',\n\t\t);\n\t});\n\n\ttest('unpackWeirpackBytes requires a manifest.json file', () => {\n\t\tconst bytes = zipSync({\n\t\t\t'Rule.weir': strToU8('expr main test'),\n\t\t});\n\n\t\texpect(() => unpackWeirpackBytes(bytes)).toThrow('Weirpack is missing manifest.json');\n\t});\n});\n"
  },
  {
    "path": "packages/harper.js/src/weirpack.ts",
    "content": "import { strFromU8, strToU8, unzipSync, zipSync } from 'fflate';\n\nexport type WeirpackArchive = {\n\tmanifest: Record<string, unknown>;\n\tfiles: Map<string, string>;\n};\n\nconst manifestFilename = 'manifest.json';\n\n/** Convert a Weirpack file system into a real Weirpack binary by compressing and serializing them into a byte array.\n *\n * For clarity on what a Weirpack is, read [the Weir documentation.](https://writewithharper.com/docs/weir#Weirpacks) */\nexport function packWeirpackFiles(files: Map<string, string>): Uint8Array {\n\tif (!files.has(manifestFilename)) {\n\t\tthrow new Error('Weirpack is missing manifest.json');\n\t}\n\n\tconst entries: Record<string, Uint8Array> = {};\n\tfor (const [name, content] of files.entries()) {\n\t\tentries[name] = strToU8(content);\n\t}\n\n\treturn zipSync(entries, { level: 6 });\n}\n\n/** Decompress and deserialize a Weirpack from a byte array. */\nexport function unpackWeirpackBytes(bytes: Uint8Array): WeirpackArchive {\n\tconst archive = unzipSync(bytes);\n\tconst manifestBytes = archive[manifestFilename];\n\tif (!manifestBytes) {\n\t\tthrow new Error('Weirpack is missing manifest.json');\n\t}\n\n\tconst manifestText = strFromU8(manifestBytes);\n\tconst manifest = JSON.parse(manifestText);\n\tconst files = new Map();\n\tfiles.set(manifestFilename, manifestText);\n\n\tconst fileNames = Object.keys(archive);\n\tfileNames.sort();\n\tfor (const name of fileNames) {\n\t\tconst data = archive[name];\n\t\tif (!data || name === manifestFilename) {\n\t\t\tcontinue;\n\t\t}\n\t\tfiles.set(name, strFromU8(data));\n\t}\n\n\treturn { manifest, files };\n}\n"
  },
  {
    "path": "packages/harper.js/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"ES2020\",\n\t\t\"useDefineForClassFields\": true,\n\t\t\"module\": \"ESNext\",\n\t\t\"lib\": [\"ES2020\", \"DOM\", \"DOM.Iterable\"],\n\t\t\"skipLibCheck\": true,\n\t\t/* Bundler mode */\n\t\t\"moduleResolution\": \"bundler\",\n\t\t\"allowImportingTsExtensions\": true,\n\t\t\"isolatedModules\": true,\n\t\t\"moduleDetection\": \"force\",\n\t\t\"noEmit\": true,\n\t\t/* Linting */\n\t\t\"strict\": true,\n\t\t\"noUnusedLocals\": true,\n\t\t\"noUnusedParameters\": true,\n\t\t\"noFallthroughCasesInSwitch\": true,\n\t\t\"types\": [\"vite/client\", \"node\"],\n\t\t\"paths\": {\n\t\t\t\"harper-wasm\": [\"../../harper-wasm/pkg\"]\n\t\t}\n\t},\n\t\"include\": [\"src\"]\n}\n"
  },
  {
    "path": "packages/harper.js/vite.config.ts",
    "content": "/// <reference types=\"vitest\" />\nimport { playwright } from '@vitest/browser-playwright';\nimport { resolve } from 'path';\nimport { defineConfig, type Plugin } from 'vite';\nimport dts from 'vite-plugin-dts';\nimport apiExtractorConfig from './api-extractor.json';\n\nfunction removeAssetsPlugin(options: { test: RegExp }): Plugin {\n\treturn {\n\t\tname: 'remove-wasm',\n\t\tgenerateBundle(_, bundle) {\n\t\t\tfor (const file in bundle) {\n\t\t\t\tif (options.test.test(file)) {\n\t\t\t\t\tdelete bundle[file];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport default defineConfig({\n\tbuild: {\n\t\tlib: {\n\t\t\tentry: resolve(__dirname, 'src/main.ts'),\n\t\t\tfileName: 'harper',\n\t\t\tname: 'harper',\n\t\t\tformats: ['es'],\n\t\t},\n\t\tminify: false,\n\t\tassetsInlineLimit: 0,\n\t\trollupOptions: {\n\t\t\texternal: [/^node:/, 'fs'],\n\t\t\toutput: {\n\t\t\t\tminifyInternalExports: false,\n\t\t\t\tinlineDynamicImports: true,\n\t\t\t},\n\t\t\ttreeshake: {\n\t\t\t\tmoduleSideEffects: false,\n\t\t\t\tpropertyReadSideEffects: false,\n\t\t\t},\n\t\t},\n\t},\n\tbase: './',\n\tplugins: [\n\t\tdts({\n\t\t\t...apiExtractorConfig,\n\t\t\trollupTypes: true,\n\t\t\ttsconfigPath: './tsconfig.json',\n\t\t}),\n\t],\n\tworker: {\n\t\tformat: 'es',\n\t\tplugins: () => [removeAssetsPlugin({ test: /\\.wasm$/ })],\n\t\trollupOptions: {\n\t\t\toutput: {\n\t\t\t\tinlineDynamicImports: true,\n\t\t\t},\n\t\t},\n\t},\n\tserver: {\n\t\tfs: {\n\t\t\tallow: ['../../harper-wasm/pkg'],\n\t\t},\n\t},\n\ttest: {\n\t\tretry: process.env.CI ? 5 : 0,\n\t\tbrowser: {\n\t\t\tprovider: playwright(),\n\t\t\tenabled: true,\n\t\t\theadless: true,\n\t\t\tscreenshotFailures: false,\n\t\t\tinstances: [{ browser: 'chromium' }, { browser: 'firefox' }],\n\t\t},\n\t},\n\tassetsInclude: ['**/*.wasm'],\n});\n"
  },
  {
    "path": "packages/lint-framework/.gitignore",
    "content": "dist\n"
  },
  {
    "path": "packages/lint-framework/README.md",
    "content": "# `lint-framework`\n\nThe `lint-framework` serves one specific purpose.\nIt contains all the logic needed to read and write text to a text editor on a web page to perform linting actions, as well as all logic needed to render underlines and UI for reviewing those actions.\nIt exists separate from the Chrome/Firefox extensions because there are places where we wish to perform linting actions outside of the Chrome extension (for example, in the demo on the Harper website).\n"
  },
  {
    "path": "packages/lint-framework/package.json",
    "content": "{\n\t\"name\": \"lint-framework\",\n\t\"version\": \"0.0.1\",\n\t\"license\": \"Apache-2.0\",\n\t\"type\": \"module\",\n\t\"private\": false,\n\t\"main\": \"dist/index.js\",\n\t\"types\": \"dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"default\": \"./dist/index.js\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"scripts\": {\n\t\t\"build\": \"tsc && vite build -l warn\",\n\t\t\"dev\": \"vite\",\n\t\t\"test\": \"echo 'no tests'\"\n\t},\n\t\"dependencies\": {\n\t\t\"@fortawesome/fontawesome-svg-core\": \"^7.1.0\",\n\t\t\"@fortawesome/free-solid-svg-icons\": \"^7.1.0\",\n\t\t\"colorjs.io\": \"^0.5.2\",\n\t\t\"virtual-dom\": \"^2.1.1\"\n\t},\n\t\"peerDependencies\": {\n\t\t\"harper.js\": \"workspace:*\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/chrome\": \"0.1.27\",\n\t\t\"@types/virtual-dom\": \"^2.1.4\",\n\t\t\"type-fest\": \"^4.37.0\",\n\t\t\"typescript\": \"catalog:\",\n\t\t\"vite\": \"^6.1.0\",\n\t\t\"vite-plugin-dts\": \"^4.5.0\"\n\t}\n}\n"
  },
  {
    "path": "packages/lint-framework/src/assets/bookDownSvg.ts",
    "content": "export default `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-book-down-icon lucide-book-down\"><path d=\"M12 13V7\"/><path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\"/><path d=\"m9 10 3 3 3-3\"/></svg>`;\n"
  },
  {
    "path": "packages/lint-framework/src/assets/hints.json",
    "content": "[\n\t\"Vary sentence length to keep readers engaged.\",\n\t\"Replace clichés with fresh, precise wording.\",\n\t\"Check subject‑verb agreement, especially in long sentences.\",\n\t\"Keep consistent terminology across the document.\",\n\t\"Read aloud to catch awkward phrasing.\",\n\t\"You can easily write em-dashes by typing out three hyphens in a row.\",\n\t\"You can easily write en-dashes by typing out two hyphens in a row.\",\n\t\"Harper can be configured to open with a hotkey. Check the extension's settings.\",\n\t\"Don't agree with a suggestion? Click 'Dismiss' and Harper will adapt to your writing style.\",\n\t\"You can add specialized terms, names, or acronyms to your personal dictionary in Harper's settings.\",\n\t\"Check your language preferences in Settings to get suggestions for different dialects (e.g., American vs. British English).\"\n]\n"
  },
  {
    "path": "packages/lint-framework/src/index.ts",
    "content": "export * from './lint/Box';\nexport { default as computeLintBoxes } from './lint/computeLintBoxes';\nexport * from './lint/domUtils';\nexport * from './lint/editorUtils';\nexport { default as Highlights } from './lint/Highlights';\nexport { default as LintFramework } from './lint/LintFramework';\nexport * from './lint/lintKindColor';\nexport { default as PopupHandler } from './lint/PopupHandler';\nexport { default as RenderBox } from './lint/RenderBox';\nexport * from './lint/unpackLint';\nexport { default as unpackLint } from './lint/unpackLint';\n"
  },
  {
    "path": "packages/lint-framework/src/lint/Box.ts",
    "content": "import type SourceElement from './SourceElement';\nimport type { UnpackedLint, UnpackedSuggestion } from './unpackLint';\n\nexport type Box = {\n\t/** Horizontal position in pixels */\n\tx: number;\n\t/** Vertical position in pixels */\n\ty: number;\n\t/** Width in pixels */\n\twidth: number;\n\t/** Height in pixels */\n\theight: number;\n};\n\nexport type LintBox = Box & {\n\tlint: UnpackedLint;\n\tsource: SourceElement;\n\t/** Optionally provided to improve highlight rendering performance. */\n\trange?: Range;\n\tapplySuggestion: (sug: UnpackedSuggestion) => void;\n};\n\nexport type IgnorableLintBox = LintBox & {\n\t/** The rule that produced the lint */\n\trule: string;\n\tignoreLint?: () => Promise<void>;\n};\n\n/** Get a box that represents the screen. */\nexport function screenBox(): Box {\n\treturn {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: window.innerWidth,\n\t\theight: window.innerHeight,\n\t};\n}\n\nexport function isPointInBox(point: [number, number], box: Box) {\n\tconst [x, y] = point;\n\n\treturn x >= box.x && x <= box.x + box.width && y >= box.y && y <= box.y + box.height;\n}\n\n/** Check if a box would be visible on the screen if drawn. */\nexport function isBoxInScreen(box: Box): boolean {\n\tconst screen = screenBox();\n\n\t// If any corner is in the screen, the box is visible.\n\tif (isPointInBox([box.x, box.y], screen)) {\n\t\treturn true;\n\t}\n\n\tif (isPointInBox([box.x + box.width, box.y], screen)) {\n\t\treturn true;\n\t}\n\n\tif (isPointInBox([box.x + box.width, box.y + box.height], screen)) {\n\t\treturn true;\n\t}\n\n\tif (isPointInBox([box.x, box.y + box.height], screen)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function boxesOverlap(a: Box, b: Box): boolean {\n\treturn a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y;\n}\n\nexport function domRectToBox(rect: DOMRect): Box {\n\treturn {\n\t\tx: rect.x,\n\t\ty: rect.y,\n\t\twidth: rect.width,\n\t\theight: rect.height,\n\t};\n}\n\nexport function isBottomEdgeInBox(inner: Box, outer: Box): boolean {\n\tconst leftBottom: [number, number] = [inner.x, inner.y + inner.height];\n\tconst rightBottom: [number, number] = [inner.x + inner.width, inner.y + inner.height];\n\treturn isPointInBox(leftBottom, outer) && isPointInBox(rightBottom, outer);\n}\n\nexport function closestBox(target: Box, boxes: Box[]): number {\n\tconst cx = target.x + target.width / 2;\n\tconst cy = target.y + target.height / 2;\n\n\tlet min = Number.POSITIVE_INFINITY;\n\tlet idx = -1;\n\n\tfor (let i = 0; i < boxes.length; i++) {\n\t\tconst b = boxes[i];\n\t\tif (boxesOverlap(target, b)) return i;\n\t\tconst bx = b.x + b.width / 2;\n\t\tconst by = b.y + b.height / 2;\n\t\tconst dist = Math.hypot(bx - cx, by - cy);\n\t\tif (dist < min) {\n\t\t\tmin = dist;\n\t\t\tidx = i;\n\t\t}\n\t}\n\treturn idx;\n}\n\nexport function shrinkBoxToFit(inner: Box, outer: Box): Box {\n\tconst nx = Math.max(inner.x, outer.x);\n\tconst ny = Math.max(inner.y, outer.y);\n\tconst rx = Math.min(inner.x + inner.width, outer.x + outer.width);\n\tconst by = Math.min(inner.y + inner.height, outer.y + outer.height);\n\treturn { x: nx, y: ny, width: Math.max(0, rx - nx), height: Math.max(0, by - ny) };\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/Highlights.ts",
    "content": "import type { VNode } from 'virtual-dom';\nimport h from 'virtual-dom/h';\nimport type { LintBox } from './Box';\nimport {\n\tgetCMRoot,\n\tgetDraftRoot,\n\tgetGhostRoot,\n\tgetGutenbergRoot,\n\tgetLexicalRoot,\n\tgetMediumRoot,\n\tgetNotionRoot,\n\tgetP2Root,\n\tgetPMRoot,\n\tgetQuillJsRoot,\n\tgetShredditComposerRoot,\n\tgetSlateRoot,\n\tgetTrixRoot,\n} from './editorUtils';\nimport { type LintKind, lintKindColor } from './lintKindColor';\nimport RenderBox from './RenderBox';\nimport type SourceElement from './SourceElement';\nimport type { UnpackedLint } from './unpackLint';\n\n/** A class that renders highlights to a page and nothing else. Uses a virtual DOM to minimize jitter. */\nexport default class Highlights {\n\trenderBoxes: Map<SourceElement, RenderBox>;\n\thighlights: Map<LintKind, Highlight> | null;\n\n\tconstructor() {\n\t\tthis.renderBoxes = new Map();\n\t\tthis.highlights = supportsCustomHighlights() ? new Map() : null;\n\t}\n\n\t/** Used for CSS highlight API */\n\tprivate insertHighlightStyle(tag: string, lint: UnpackedLint) {\n\t\tconst color = lintKindColor(lint.lint_kind);\n\t\tconst textDecor = `underline ${color} solid 2px`;\n\t\tconst backgroundColor = `${color}22`;\n\n\t\tconst styleId = `harper-highlight-style-${lint.lint_kind}`;\n\t\tif (document.getElementById(styleId)) return;\n\n\t\tconst style = document.createElement('style');\n\t\tstyle.id = styleId;\n\t\tstyle.textContent = `\n      ::highlight(${tag}) {\n        text-decoration: ${textDecor};\n        background-color: ${backgroundColor};\n      }\n    `;\n\t\tdocument.head.appendChild(style);\n\t}\n\n\tpublic renderLintBoxes(boxes: LintBox[]) {\n\t\t// Sort the lint boxes based on their source, so we can render them all together.\n\t\tconst sourceToBoxes: Map<SourceElement, { boxes: LintBox[]; cpa: DOMRect | null }> = new Map();\n\n\t\t// Clear old highlights if they exist\n\t\tif (this.highlights) {\n\t\t\tfor (const [_, highlight] of this.highlights) {\n\t\t\t\thighlight.clear();\n\t\t\t}\n\t\t}\n\n\t\tfor (const box of boxes) {\n\t\t\tif (box.range && this.highlights != null) {\n\t\t\t\tlet highlight = this.highlights.get(box.lint.lint_kind);\n\n\t\t\t\tif (highlight != null) {\n\t\t\t\t\thighlight.add(box.range);\n\t\t\t\t} else {\n\t\t\t\t\thighlight = new Highlight();\n\t\t\t\t\tconst tag = `harper-${box.lint.lint_kind}`;\n\t\t\t\t\tCSS.highlights.set(tag, highlight);\n\t\t\t\t\tthis.insertHighlightStyle(tag, box.lint);\n\t\t\t\t\thighlight.add(box.range);\n\t\t\t\t\tthis.highlights.set(box.lint.lint_kind, highlight);\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet renderBox = this.renderBoxes.get(box.source);\n\n\t\t\tif (renderBox == null) {\n\t\t\t\trenderBox = new RenderBox(this.computeRenderTarget(box.source));\n\t\t\t\tthis.renderBoxes.set(box.source, renderBox);\n\t\t\t}\n\n\t\t\tconst value = sourceToBoxes.get(box.source);\n\t\t\tconst icr = getInitialContainingRect(renderBox.getShadowHost());\n\n\t\t\tlet cpa = null;\n\n\t\t\tif (cpa == null) {\n\t\t\t\tif (icr != null) {\n\t\t\t\t\tcpa = icr;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value == null) {\n\t\t\t\tsourceToBoxes.set(box.source, { boxes: [box], cpa });\n\t\t\t} else {\n\t\t\t\tsourceToBoxes.set(box.source, { boxes: [...value.boxes, box], cpa });\n\t\t\t}\n\t\t}\n\n\t\tconst updated = new Set();\n\n\t\tfor (const [source, { boxes, cpa }] of sourceToBoxes.entries()) {\n\t\t\tconst renderBox = this.renderBoxes.get(source)!;\n\n\t\t\tconst host = renderBox.getShadowHost();\n\t\t\thost.id = 'harper-highlight-host';\n\t\t\tconst isGoogleDocsSource =\n\t\t\t\tsource instanceof HTMLElement &&\n\t\t\t\t(source.classList.contains('kix-appview-editor') ||\n\t\t\t\t\tsource.closest('.kix-appview-editor') != null);\n\n\t\t\tif (isGoogleDocsSource) {\n\t\t\t\tconst hostStyle = host.style;\n\n\t\t\t\thostStyle.position = 'absolute';\n\t\t\t\thostStyle.top = '0px';\n\t\t\t\thostStyle.left = '0px';\n\t\t\t\thostStyle.pointerEvents = 'none';\n\t\t\t\thostStyle.width = '0px';\n\t\t\t\thostStyle.height = '0px';\n\t\t\t\thostStyle.contain = 'none';\n\t\t\t\thostStyle.transform = 'none';\n\t\t\t\thostStyle.zIndex = '2147483647';\n\t\t\t} else if (cpa != null) {\n\t\t\t\tconst hostStyle = host.style;\n\n\t\t\t\thostStyle.position = 'absolute';\n\t\t\t\thostStyle.top = '0px';\n\t\t\t\thostStyle.left = '0px';\n\t\t\t\thostStyle.inset = '0';\n\t\t\t\thostStyle.pointerEvents = 'none';\n\t\t\t\thostStyle.width = '0px';\n\t\t\t\thostStyle.height = '0px';\n\t\t\t\thostStyle.contain = 'none';\n\t\t\t\thostStyle.transform = 'none';\n\t\t\t} else if (host.hasAttribute('style')) {\n\t\t\t\thost.removeAttribute('style');\n\t\t\t}\n\n\t\t\tconst gdocsRenderOffset =\n\t\t\t\tisGoogleDocsSource && source instanceof HTMLElement\n\t\t\t\t\t? this.getGoogleDocsRenderOffset(source)\n\t\t\t\t\t: null;\n\t\t\tconst offset =\n\t\t\t\tgdocsRenderOffset ?? (isGoogleDocsSource || cpa == null ? null : { x: cpa.x, y: cpa.y });\n\t\t\tconst boxPosition: 'absolute' | 'fixed' = isGoogleDocsSource ? 'absolute' : 'fixed';\n\n\t\t\trenderBox.render(this.renderTree(boxes, offset, boxPosition));\n\t\t\tupdated.add(source);\n\t\t}\n\n\t\tfor (const [source, box] of this.renderBoxes.entries()) {\n\t\t\tif (!updated.has(source)) {\n\t\t\t\tbox.render(h('div', {}, []));\n\t\t\t}\n\t\t}\n\n\t\tthis.pruneDetachedSources();\n\t}\n\n\t/** Remove the render boxes for sources that aren't attached any longer. */\n\tprivate pruneDetachedSources() {\n\t\tfor (const [source, box] of this.renderBoxes.entries()) {\n\t\t\tif (!document.contains(source)) {\n\t\t\t\tbox.remove();\n\t\t\t\tthis.renderBoxes.delete(source);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate renderTree(\n\t\tboxes: LintBox[],\n\t\toffset: { x: number; y: number } | null,\n\t\tboxPosition: 'absolute' | 'fixed',\n\t): VNode {\n\t\tconst elements = [];\n\t\tconst offsetX = offset?.x ?? 0;\n\t\tconst offsetY = offset?.y ?? 0;\n\n\t\tfor (const box of boxes) {\n\t\t\tconst x = box.x - offsetX;\n\t\t\tconst y = box.y - offsetY;\n\t\t\tconst positionStyle =\n\t\t\t\tboxPosition === 'fixed'\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\tleft: '0px',\n\t\t\t\t\t\t\ttop: '0px',\n\t\t\t\t\t\t\ttransform: `translate(${x}px, ${y}px)`,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\tleft: `${x}px`,\n\t\t\t\t\t\t\ttop: `${y}px`,\n\t\t\t\t\t\t};\n\n\t\t\tconst boxEl = h(\n\t\t\t\t'div',\n\t\t\t\t{\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...positionStyle,\n\t\t\t\t\t\twidth: `${box.width}px`,\n\t\t\t\t\t\theight: `${box.height}px`,\n\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\tborderBottom: `2px solid ${lintKindColor(box.lint.lint_kind)}`,\n\t\t\t\t\t\tbackgroundColor: `${lintKindColor(box.lint.lint_kind)}22`,\n\t\t\t\t\t},\n\t\t\t\t\tid: 'harper-highlight',\n\t\t\t\t},\n\t\t\t\t[],\n\t\t\t);\n\n\t\t\telements.push(boxEl);\n\t\t}\n\n\t\treturn h('div', {}, elements);\n\t}\n\n\t/** Determines which target the render boxes should be attached to.\n\t * Depends on text editor. */\n\tprivate computeRenderTarget(el: SourceElement): HTMLElement {\n\t\tif (\n\t\t\tel instanceof HTMLElement &&\n\t\t\t(el.classList.contains('kix-appview-editor') || el.closest('.kix-appview-editor') != null)\n\t\t) {\n\t\t\treturn el;\n\t\t}\n\n\t\tif (el.parentElement?.classList.contains('ProseMirror')) {\n\t\t\treturn el.parentElement.parentElement!;\n\t\t}\n\n\t\tconst queries = [\n\t\t\tgetQuillJsRoot,\n\t\t\tgetNotionRoot,\n\t\t\tgetGhostRoot,\n\t\t\tgetDraftRoot,\n\t\t\tgetPMRoot,\n\t\t\tgetCMRoot,\n\t\t\tgetSlateRoot,\n\t\t\tgetMediumRoot,\n\t\t\tgetShredditComposerRoot,\n\t\t\tgetLexicalRoot,\n\t\t\tgetP2Root,\n\t\t\tgetGutenbergRoot,\n\t\t\tgetTrixRoot,\n\t\t];\n\n\t\tfor (const query of queries) {\n\t\t\tconst root = query(el);\n\t\t\tif (root != null) {\n\t\t\t\treturn root.parentElement!;\n\t\t\t}\n\t\t}\n\n\t\treturn el.parentElement!;\n\t}\n\n\tprivate getGoogleDocsRenderOffset(source: HTMLElement): { x: number; y: number } {\n\t\tconst editorRect = source.getBoundingClientRect();\n\n\t\treturn {\n\t\t\tx: editorRect.x - source.scrollLeft,\n\t\t\ty: editorRect.y - source.scrollTop,\n\t\t};\n\t}\n}\n\nfunction getInitialContainingRect(el: HTMLElement): DOMRect | null {\n\tlet node = el.parentElement;\n\n\twhile (node && node.nodeType === 1) {\n\t\tif (isContainingBlock(node)) {\n\t\t\treturn node.getBoundingClientRect();\n\t\t}\n\t\tnode = node.parentElement;\n\t}\n\n\treturn null;\n}\n\n/**\n * Determines whether a given element would form the containing block\n * for a descendant with `position: fixed`, based on CSS transforms,\n * filters, containment, container queries, will-change, and\n * content-visibility.\n *\n * Logs the element and the precise reason it qualifies.\n */\nfunction isContainingBlock(el: Element): boolean {\n\tif (!(el instanceof Element)) {\n\t\tthrow new TypeError('Expected a DOM Element');\n\t}\n\n\tconst style = window.getComputedStyle(el);\n\n\tconst filter = style.getPropertyValue('filter');\n\tif (filter !== 'none') {\n\t\treturn true;\n\t}\n\n\tconst backdrop = style.getPropertyValue('backdrop-filter');\n\tif (backdrop !== 'none') {\n\t\treturn true;\n\t}\n\n\tconst transform = style.getPropertyValue('transform');\n\tif (transform !== 'none') {\n\t\treturn true;\n\t}\n\n\tconst perspective = style.getPropertyValue('perspective');\n\tif (perspective !== 'none') {\n\t\treturn true;\n\t}\n\n\tconst contain = style.getPropertyValue('contain');\n\tconst containMatch = contain.match(/\\b(layout|paint|strict|content)\\b/);\n\tif (containMatch) {\n\t\treturn true;\n\t}\n\n\tconst willChange = style.getPropertyValue('will-change');\n\tif (willChange && willChange.trim() !== 'auto') {\n\t\tconst declared = willChange.split(',').map((p) => p.trim());\n\t\tconst triggers = ['filter', 'backdrop-filter', 'transform', 'perspective'];\n\t\tconst intersection = declared.filter((p) => triggers.includes(p));\n\t\tif (intersection.length) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tconst contentVis = style.getPropertyValue('content-visibility');\n\tif (contentVis === 'auto') {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function supportsCustomHighlights() {\n\tconst root = globalThis.document?.documentElement;\n\tconst disableFlag =\n\t\troot?.getAttribute?.('data-harper-disable-css-highlights') === 'true' ||\n\t\troot?.dataset?.harperDisableCssHighlights === 'true';\n\tif (disableFlag) {\n\t\treturn false;\n\t}\n\tconst isAutomated = globalThis.navigator?.webdriver === true;\n\tif (isAutomated) {\n\t\treturn false;\n\t}\n\tif (!('CSS' in window) || typeof CSS.supports !== 'function') return false;\n\tconst supportsSelector = CSS.supports('selector(::highlight(__x))');\n\tconst reg = CSS?.highlights as any;\n\tconst hasRegistry =\n\t\t!!reg && ['get', 'set', 'has', 'delete', 'clear'].every((m) => typeof reg[m] === 'function');\n\tconst hasCtor = typeof window.Highlight === 'function';\n\tlet canRegister = false;\n\tif (hasRegistry && hasCtor) {\n\t\ttry {\n\t\t\tconst h = new Highlight();\n\t\t\tCSS.highlights.set('__probe__', h);\n\t\t\tcanRegister = CSS.highlights.has('__probe__');\n\t\t\tCSS.highlights.delete('__probe__');\n\t\t} catch {}\n\t}\n\treturn supportsSelector && hasRegistry && hasCtor && canRegister;\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/LintFramework.ts",
    "content": "import type { LintOptions } from 'harper.js';\nimport { closestBox, type IgnorableLintBox } from './Box';\nimport computeLintBoxes from './computeLintBoxes';\nimport { isHeading, isVisible } from './domUtils';\nimport { getCaretPosition, getCMRoot } from './editorUtils';\nimport Highlights from './Highlights';\nimport PopupHandler from './PopupHandler';\nimport type { UnpackedLint, UnpackedLintGroups } from './unpackLint';\n\ntype ActivationKey = 'off' | 'shift' | 'control';\n\ntype Modifier = 'Ctrl' | 'Shift' | 'Alt';\n\ntype Hotkey = {\n\tmodifiers: Modifier[];\n\tkey: string;\n};\n\n/** Events on an input (any kind) that can trigger a re-render. */\nconst INPUT_EVENTS = ['focus', 'keyup', 'paste', 'change', 'scroll'];\n/** Events on the window that can trigger a re-render. */\nconst PAGE_EVENTS = ['resize', 'scroll'];\n\n/** Orchestrates linting and rendering in response to events on the page. */\nexport default class LintFramework {\n\tprivate highlights: Highlights;\n\tprivate popupHandler: PopupHandler;\n\tprivate targets: Set<Node>;\n\tprivate scrollableAncestors: Set<HTMLElement>;\n\tprivate lintRequested = false;\n\tprivate renderRequested = false;\n\tprivate lastLints: { target: HTMLElement; lints: UnpackedLintGroups }[] = [];\n\tprivate lastBoxes: IgnorableLintBox[] = [];\n\tprivate lastLintBoxes: IgnorableLintBox[] = [];\n\n\t/** The function to be called to re-render the highlights. This is a variable because it is used to register/deregister event listeners. */\n\tprivate updateEventCallback: () => void;\n\n\t/** Function used to fetch lints for a given text/domain. */\n\tprivate lintProvider: (\n\t\ttext: string,\n\t\tdomain: string,\n\t\toptions?: LintOptions,\n\t) => Promise<UnpackedLintGroups>;\n\t/** Actions wired by host environment (extension/app). */\n\tprivate actions: {\n\t\tignoreLint?: (hash: string) => Promise<void>;\n\t\tgetActivationKey?: () => Promise<ActivationKey>;\n\t\tgetHotkey?: () => Promise<Hotkey>;\n\t\topenOptions?: () => Promise<void>;\n\t\taddToUserDictionary?: (words: string[]) => Promise<void>;\n\t\treportError?: (lint: UnpackedLint, ruleId: string) => Promise<void>;\n\t\tsetRuleEnabled?: (ruleId: string, enabled: boolean) => Promise<void> | void;\n\t};\n\n\tconstructor(\n\t\tlintProvider: (\n\t\t\ttext: string,\n\t\t\tdomain: string,\n\t\t\toptions?: LintOptions,\n\t\t) => Promise<UnpackedLintGroups>,\n\t\tactions: {\n\t\t\tignoreLint?: (hash: string) => Promise<void>;\n\t\t\tgetActivationKey?: () => Promise<ActivationKey>;\n\t\t\tgetHotkey?: () => Promise<Hotkey>;\n\t\t\topenOptions?: () => Promise<void>;\n\t\t\taddToUserDictionary?: (words: string[]) => Promise<void>;\n\t\t\treportError?: (lint: UnpackedLint, ruleId: string) => Promise<void>;\n\t\t\tsetRuleEnabled?: (ruleId: string, enabled: boolean) => Promise<void> | void;\n\t\t},\n\t) {\n\t\tthis.lintProvider = lintProvider;\n\t\tthis.actions = actions;\n\t\tthis.highlights = new Highlights();\n\t\tthis.popupHandler = new PopupHandler({\n\t\t\tgetActivationKey: actions.getActivationKey,\n\t\t\topenOptions: actions.openOptions,\n\t\t\taddToUserDictionary: actions.addToUserDictionary,\n\t\t\treportError: actions.reportError,\n\t\t\tsetRuleEnabled: actions.setRuleEnabled,\n\t\t});\n\t\tthis.targets = new Set();\n\t\tthis.scrollableAncestors = new Set();\n\t\tthis.lastLints = [];\n\n\t\tthis.updateEventCallback = () => {\n\t\t\tthis.update();\n\t\t};\n\n\t\tconst timeoutCallback = () => {\n\t\t\tthis.update();\n\n\t\t\tsetTimeout(timeoutCallback, 100);\n\t\t};\n\n\t\ttimeoutCallback();\n\n\t\tthis.attachWindowListeners();\n\t}\n\n\t/** Returns the currents targets that are visible on-screen. */\n\tonScreenTargets(): Node[] {\n\t\tconst onScreen = [] as Node[];\n\n\t\tfor (const target of this.targets) {\n\t\t\tif (isVisible(target)) {\n\t\t\t\tonScreen.push(target);\n\t\t\t}\n\t\t}\n\n\t\treturn onScreen;\n\t}\n\n\tasync update() {\n\t\tthis.requestRender();\n\t\tthis.requestLintUpdate();\n\t}\n\n\tasync requestLintUpdate() {\n\t\tif (this.lintRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Avoid duplicate requests in the queue\n\t\tthis.lintRequested = true;\n\n\t\tconst lintResults = await Promise.all(\n\t\t\tthis.onScreenTargets().map(async (target) => {\n\t\t\t\tif (!document.contains(target)) {\n\t\t\t\t\tthis.targets.delete(target);\n\t\t\t\t\treturn { target: null as HTMLElement | null, lints: {} };\n\t\t\t\t}\n\n\t\t\t\tlet text = null;\n\n\t\t\t\t// Check if it is a CodeMirror instance, which needs to be handled in a specific way.\n\t\t\t\tconst isCM = target instanceof HTMLElement && getCMRoot(target) != null;\n\n\t\t\t\tif (isCM) {\n\t\t\t\t\tconst lineElements = target.querySelectorAll<HTMLElement>('.cm-line');\n\t\t\t\t\tconst lines = Array.from(lineElements).map((el) => el.textContent);\n\t\t\t\t\ttext = lines.reduce((acc: string, x: string) => `${acc + x}\\n`, '');\n\t\t\t\t} else {\n\t\t\t\t\ttext =\n\t\t\t\t\t\ttarget instanceof HTMLTextAreaElement || target instanceof HTMLInputElement\n\t\t\t\t\t\t\t? target.value\n\t\t\t\t\t\t\t: target.textContent;\n\t\t\t\t}\n\n\t\t\t\tconst newLineIndices = [];\n\t\t\t\tlet i = 0;\n\t\t\t\tfor (const c of text ?? '') {\n\t\t\t\t\tif (c == '\\n') {\n\t\t\t\t\t\tnewLineIndices.push(i);\n\t\t\t\t\t}\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\tif (!text || text.length > 120000) {\n\t\t\t\t\treturn { target: null as HTMLElement | null, lints: {} };\n\t\t\t\t}\n\n\t\t\t\tconst language = getTargetLanguage(target);\n\t\t\t\tlet lintsBySource = await this.lintProvider(text, window.location.hostname, {\n\t\t\t\t\tforceAllHeadings: isHeading(target),\n\t\t\t\t\tlanguage,\n\t\t\t\t});\n\n\t\t\t\tif (isCM) {\n\t\t\t\t\t// We're about to modify a reference, so let's work on a copy.\n\t\t\t\t\tlintsBySource = window.structuredClone(lintsBySource);\n\n\t\t\t\t\tfor (const lints of Object.values(lintsBySource)) {\n\t\t\t\t\t\tfor (const lint of lints) {\n\t\t\t\t\t\t\tconst offset_start = newLineIndices.findIndex((i) => i > lint.span.start);\n\t\t\t\t\t\t\tconst offset_end = newLineIndices.findIndex((i) => i > lint.span.end);\n\n\t\t\t\t\t\t\tlint.span.start -= offset_start;\n\t\t\t\t\t\t\tlint.span.end -= offset_end;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn { target: target as HTMLElement, lints: lintsBySource };\n\t\t\t}),\n\t\t);\n\n\t\tthis.lastLints = lintResults.filter((r) => r.target != null) as any;\n\t\tthis.lintRequested = false;\n\t\tthis.requestRender();\n\t}\n\n\t/**\n\t * Hotkey to apply the suggestion of the most likely word\n\t */\n\tpublic async lintHotkey() {\n\t\tconst hotkey = await this.actions.getHotkey?.();\n\n\t\tdocument.addEventListener(\n\t\t\t'keydown',\n\t\t\t(event: KeyboardEvent) => {\n\t\t\t\tif (!hotkey) return;\n\n\t\t\t\tconst key = event.key.toLowerCase();\n\t\t\t\tconst expectedKey = hotkey.key.toLowerCase();\n\n\t\t\t\tconst hasCtrl = event.ctrlKey === hotkey.modifiers.includes('Ctrl');\n\t\t\t\tconst hasAlt = event.altKey === hotkey.modifiers.includes('Alt');\n\t\t\t\tconst hasShift = event.shiftKey === hotkey.modifiers.includes('Shift');\n\n\t\t\t\tconst match = key === expectedKey && hasCtrl && hasAlt && hasShift;\n\n\t\t\t\tif (match) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopImmediatePropagation();\n\n\t\t\t\t\tconst caretPosition = getCaretPosition();\n\n\t\t\t\t\tif (caretPosition != null) {\n\t\t\t\t\t\tconst closestIdx = closestBox(caretPosition, this.lastBoxes);\n\n\t\t\t\t\t\tconst previousBox = this.lastBoxes[closestIdx];\n\t\t\t\t\t\tconst suggestions = previousBox.lint.suggestions;\n\t\t\t\t\t\tif (suggestions.length > 0) {\n\t\t\t\t\t\t\tpreviousBox.applySuggestion(suggestions[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpreviousBox.ignoreLint?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ capture: true },\n\t\t);\n\t}\n\n\tpublic async addTarget(target: Node) {\n\t\tif (!this.targets.has(target)) {\n\t\t\tthis.targets.add(target);\n\t\t\tthis.update();\n\t\t\tthis.attachTargetListeners(target);\n\t\t}\n\t}\n\n\tpublic async removeTarget(target: HTMLElement) {\n\t\tif (this.targets.has(target)) {\n\t\t\tthis.targets.delete(target);\n\t\t\tthis.update();\n\t\t\tthis.detachTargetListeners(target);\n\t\t} else {\n\t\t\tthrow new Error('HTMLElement not added.');\n\t\t}\n\t}\n\n\t/** Return the last known ignorable lint boxes rendered on-screen. */\n\tpublic getLastIgnorableLintBoxes(): IgnorableLintBox[] {\n\t\treturn this.lastLintBoxes;\n\t}\n\n\tprivate attachTargetListeners(target: Node) {\n\t\tfor (const event of INPUT_EVENTS) {\n\t\t\ttarget.addEventListener(event, this.updateEventCallback);\n\t\t}\n\n\t\tconst observer = new MutationObserver(this.updateEventCallback);\n\t\tconst config = { subtree: true, characterData: true };\n\n\t\tif ((target as any).tagName == undefined) {\n\t\t\tobserver.observe((target as any).parentElement!, config);\n\t\t} else {\n\t\t\tobserver.observe(target as Element, config);\n\t\t}\n\n\t\tconst scrollableAncestors = getScrollableAncestors(target);\n\n\t\tfor (const el of scrollableAncestors) {\n\t\t\tif (!this.scrollableAncestors.has(el as HTMLElement)) {\n\t\t\t\tthis.scrollableAncestors.add(el as HTMLElement);\n\t\t\t\t(el as HTMLElement).addEventListener('scroll', this.updateEventCallback, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t\tpassive: true,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate detachTargetListeners(target: HTMLElement) {\n\t\tfor (const event of INPUT_EVENTS) {\n\t\t\ttarget.removeEventListener(event, this.updateEventCallback);\n\t\t}\n\t}\n\n\tprivate attachWindowListeners() {\n\t\tthis.lintHotkey();\n\t\tfor (const event of PAGE_EVENTS) {\n\t\t\twindow.addEventListener(event, this.updateEventCallback);\n\t\t}\n\t}\n\n\tprivate requestRender() {\n\t\tif (this.renderRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.renderRequested = true;\n\n\t\trequestAnimationFrame(() => {\n\t\t\tconst boxes = this.lastLints.flatMap(({ target, lints }) =>\n\t\t\t\ttarget\n\t\t\t\t\t? Object.entries(lints).flatMap(([ruleName, ls]) =>\n\t\t\t\t\t\t\tls.flatMap((l) =>\n\t\t\t\t\t\t\t\tcomputeLintBoxes(target, l as any, ruleName, {\n\t\t\t\t\t\t\t\t\tignoreLint: this.actions.ignoreLint,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t: [],\n\t\t\t);\n\t\t\tthis.lastLintBoxes = boxes;\n\t\t\tthis.highlights.renderLintBoxes(boxes);\n\t\t\tthis.popupHandler.updateLintBoxes(boxes);\n\n\t\t\tthis.renderRequested = false;\n\t\t\tthis.lastBoxes = boxes;\n\t\t});\n\t}\n}\n\n/**\n * Returns all scrollable ancestor elements of a given element,\n * ordered from nearest to furthest (ending with the page scroller).\n */\nfunction getScrollableAncestors(element: Node): Element[] {\n\tconst scrollables: Element[] = [];\n\tconst root = document.scrollingElement || document.documentElement;\n\tlet parent = (element as any).parentElement;\n\n\twhile (parent) {\n\t\tconst style = window.getComputedStyle(parent);\n\t\tconst { overflowY, overflowX } = style;\n\t\tconst canScrollY = overflowY.includes('auto') || overflowY.includes('scroll');\n\t\tconst canScrollX = overflowX.includes('auto') || overflowX.includes('scroll');\n\n\t\tif (canScrollY || canScrollX) {\n\t\t\tscrollables.push(parent);\n\t\t}\n\t\tparent = parent.parentElement;\n\t}\n\n\t// Always include the document scroller at the end\n\tif (root && scrollables[scrollables.length - 1] !== root) {\n\t\tscrollables.push(root);\n\t}\n\n\treturn scrollables;\n}\n\nfunction getTargetLanguage(target: Node): LintOptions['language'] | undefined {\n\tif (!(target instanceof Element)) return undefined;\n\n\tconst language = target.getAttribute('data-language');\n\tswitch (language) {\n\t\tcase 'plaintext':\n\t\tcase 'markdown':\n\t\tcase 'typst':\n\t\t\treturn language;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/PopupHandler.ts",
    "content": "import h from 'virtual-dom/h';\nimport { closestBox, type IgnorableLintBox, isPointInBox } from './Box';\nimport { getCaretPosition } from './editorUtils';\nimport type { UnpackedLint } from './unpackLint';\n\ntype ActivationKey = 'off' | 'shift' | 'control';\n\nimport hintsData from '../assets/hints.json';\nimport RenderBox from './RenderBox';\nimport SuggestionBox from './SuggestionBox';\n\ntype ActivationHandler = () => void;\n\nfunction monitorActivationKey(\n\tonActivation: ActivationHandler,\n\tkey: string,\n\tinterval = 300,\n): () => void {\n\tlet lastTime = 0;\n\tconst handler = (e: KeyboardEvent) => {\n\t\tif (e.key.toLowerCase() !== key.toLowerCase()) return;\n\t\tconst now = performance.now();\n\t\tconst diff = now - lastTime;\n\t\tif (diff <= interval && diff > 10) onActivation();\n\t\tlastTime = now;\n\t};\n\twindow.addEventListener('keydown', handler);\n\treturn () => window.removeEventListener('keydown', handler);\n}\n\nexport default class PopupHandler {\n\tprivate currentLintBoxes: IgnorableLintBox[];\n\tprivate popupLint: number | undefined;\n\tprivate currentHint: string | null | undefined;\n\tprivate currentHintFor: number | undefined;\n\tprivate renderBox: RenderBox;\n\tprivate pointerDownCallback: (e: PointerEvent) => void;\n\tprivate activationKeyListener: (() => void) | undefined;\n\tprivate readonly actions: {\n\t\tgetActivationKey?: () => Promise<ActivationKey>;\n\t\topenOptions?: () => Promise<void>;\n\t\taddToUserDictionary?: (words: string[]) => Promise<void>;\n\t\treportError?: (lint: UnpackedLint, ruleId: string) => Promise<void>;\n\t\tsetRuleEnabled?: (ruleId: string, enabled: boolean) => Promise<void> | void;\n\t};\n\n\tconstructor(actions: {\n\t\tgetActivationKey?: () => Promise<ActivationKey>;\n\t\topenOptions?: () => Promise<void>;\n\t\taddToUserDictionary?: (words: string[]) => Promise<void>;\n\t\treportError?: (lint: UnpackedLint, ruleId: string) => Promise<void>;\n\t\tsetRuleEnabled?: (ruleId: string, enabled: boolean) => Promise<void> | void;\n\t}) {\n\t\tthis.actions = actions;\n\t\tthis.currentLintBoxes = [];\n\t\tthis.currentHint = undefined;\n\t\tthis.currentHintFor = undefined;\n\t\tthis.renderBox = new RenderBox(document.body);\n\t\tthis.renderBox.getShadowHost().popover = 'manual';\n\t\tthis.renderBox.getShadowHost().style.pointerEvents = 'none';\n\t\tthis.renderBox.getShadowHost().style.border = 'none';\n\t\tthis.pointerDownCallback = (e) => {\n\t\t\tthis.onPointerDown(e);\n\t\t};\n\n\t\tthis.updateActivationKeyListener();\n\t}\n\n\tprivate updateActivationKeyListener() {\n\t\tif (this.activationKeyListener) {\n\t\t\tthis.activationKeyListener();\n\t\t\tthis.activationKeyListener = undefined;\n\t\t}\n\n\t\tconst getKey = this.actions.getActivationKey;\n\t\tif (getKey) {\n\t\t\tgetKey().then((key) => {\n\t\t\t\tif (key !== 'off') {\n\t\t\t\t\tthis.activationKeyListener = monitorActivationKey(() => this.openClosestToCaret(), key);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/** Tries to get the current caret position.\n\t * If successful, opens the popup closes to it. */\n\tprivate openClosestToCaret() {\n\t\tconst caretPosition = getCaretPosition();\n\n\t\tif (caretPosition != null) {\n\t\t\tconst closestIdx = closestBox(caretPosition, this.currentLintBoxes);\n\n\t\t\tif (closestIdx >= 0) {\n\t\t\t\tthis.popupLint = closestIdx;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onPointerDown(e: PointerEvent) {\n\t\tfor (let i = 0; i < this.currentLintBoxes.length; i++) {\n\t\t\tconst box = this.currentLintBoxes[i];\n\n\t\t\tif (isPointInBox([e.x, e.y], box)) {\n\t\t\t\tthis.popupLint = i;\n\t\t\t\tthis.render();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.popupLint = undefined;\n\t\tthis.render();\n\t}\n\n\tprivate render() {\n\t\tlet tree = h('div', {}, []);\n\n\t\tthis.updateHint();\n\n\t\tif (this.popupLint != null && this.popupLint < this.currentLintBoxes.length) {\n\t\t\tconst box = this.currentLintBoxes[this.popupLint];\n\n\t\t\ttree = SuggestionBox(box, this.actions, this.currentHint ?? null, () => {\n\t\t\t\tthis.popupLint = undefined;\n\t\t\t\tthis.updateHint();\n\t\t\t});\n\t\t\tthis.renderBox.getShadowHost().style.setProperty('visibility', 'visible', 'important');\n\t\t\tthis.renderBox.getShadowHost().showPopover();\n\t\t} else {\n\t\t\tthis.renderBox.getShadowHost().hidePopover();\n\t\t}\n\n\t\tthis.renderBox.render(tree);\n\t}\n\n\t/** Synchronize the hint with the currently focused lint.\n\t * - If no lint is open, clear the hint state.\n\t * - If a different lint opens, or the hint is uninitialized, decide once (~10%).\n\t */\n\tprivate updateHint() {\n\t\tif (this.popupLint == null) {\n\t\t\tthis.currentHint = undefined;\n\t\t\tthis.currentHintFor = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.currentHintFor !== this.popupLint || this.currentHint === undefined) {\n\t\t\tconst hints: string[] = Array.isArray(hintsData)\n\t\t\t\t? ((hintsData as unknown[]).filter((v) => typeof v === 'string') as string[])\n\t\t\t\t: [];\n\t\t\tconst show = Math.random() < 0.1 && hints.length > 0;\n\t\t\tthis.currentHint = show ? hints[Math.floor(Math.random() * hints.length)] : null;\n\t\t\tthis.currentHintFor = this.popupLint;\n\t\t}\n\t}\n\n\tpublic updateLintBoxes(boxes: IgnorableLintBox[]) {\n\t\tthis.currentLintBoxes.forEach((b) => {\n\t\t\tb.source.removeEventListener('pointerdown', this.pointerDownCallback as EventListener);\n\t\t});\n\n\t\tif (boxes.length != this.currentLintBoxes.length) {\n\t\t\tthis.popupLint = undefined;\n\t\t}\n\n\t\tthis.currentLintBoxes = boxes;\n\t\tthis.currentLintBoxes.forEach((b) => {\n\t\t\tb.source.addEventListener('pointerdown', this.pointerDownCallback as EventListener);\n\t\t});\n\n\t\tthis.render();\n\t}\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/RenderBox.ts",
    "content": "import type { VNode } from 'virtual-dom';\nimport createElement from 'virtual-dom/create-element';\nimport diff from 'virtual-dom/diff';\nimport patch from 'virtual-dom/patch';\n\n/** Wraps `virtual-dom` to create a box that is unaffected by the style of the rest of the page. */\nexport default class RenderBox {\n\t/** The node we reattach into if a host is removed by editor-managed DOM updates. */\n\tprivate parent: Node;\n\t/** The element our virtual DOM is attached to. */\n\tprivate virtualRoot: Element | undefined;\n\t/** The current state of the virtual DOM */\n\tprivate virtualTree: VNode | undefined;\n\t/** The shadow DOM the `virtualRoot` is attached to. */\n\tprivate shadowHost: HTMLElement;\n\n\tconstructor(parent: Node) {\n\t\tthis.parent = parent;\n\t\tthis.shadowHost = document.createElement('harper-render-box');\n\t\tparent.appendChild(this.shadowHost);\n\t}\n\n\t/** Render to the box. */\n\tpublic render(node: VNode) {\n\t\tif (!this.shadowHost.isConnected) {\n\t\t\tthis.parent.appendChild(this.shadowHost);\n\t\t}\n\n\t\tif (!this.virtualRoot || !this.virtualTree) {\n\t\t\tthis.virtualRoot = createElement(node);\n\t\t\tconst shadow = this.shadowHost.attachShadow({ mode: 'open' });\n\t\t\tshadow.appendChild(this.virtualRoot);\n\t\t} else {\n\t\t\tconst patches = diff(this.virtualTree, node);\n\t\t\tthis.virtualRoot = patch(this.virtualRoot, patches);\n\t\t}\n\t\tthis.virtualTree = node;\n\t}\n\n\t/** Remove the box from the DOM. */\n\tpublic remove() {\n\t\ttry {\n\t\t\tthis.shadowHost.outerHTML = this.shadowHost.outerHTML;\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t}\n\t\tthis.virtualRoot = undefined;\n\t\tthis.virtualTree = undefined;\n\t}\n\n\tpublic getShadowHost(): HTMLElement {\n\t\treturn this.shadowHost;\n\t}\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/SourceElement.ts",
    "content": "/** An element that could be considered a _source_ for text to be linted.*/\ntype SourceElement = HTMLElement | Text;\n\nexport default SourceElement;\n"
  },
  {
    "path": "packages/lint-framework/src/lint/SuggestionBox.ts",
    "content": "/** biome-ignore-all lint/complexity/useArrowFunction: It cannot be an arrow function for the logic to work. */\nimport { type IconDefinition, icon } from '@fortawesome/fontawesome-svg-core';\nimport { faSliders, faToggleOff } from '@fortawesome/free-solid-svg-icons';\nimport { SuggestionKind } from 'harper.js';\nimport type { VNode } from 'virtual-dom';\nimport h from 'virtual-dom/h';\nimport bookDownSvg from '../assets/bookDownSvg';\nimport type { IgnorableLintBox, LintBox } from './Box';\nimport { type LintKind, lintKindColor, lintKindTextColor } from './lintKindColor';\n// Decoupled: actions passed in by framework consumer\nimport type { UnpackedLint, UnpackedSuggestion } from './unpackLint';\n\nfunction iconSvg(definition: IconDefinition): string {\n\treturn icon(definition).html.join('');\n}\n\nconst settingsIconSvg = iconSvg(faSliders);\nconst disableIconSvg = iconSvg(faToggleOff);\n\nlet previouslyActiveElement: null | HTMLElement = null;\n\nvar FocusHook: any = function () {};\nFocusHook.prototype.hook = function (node: any, _propertyName: any, _previousValue: any) {\n\tif ((node as any).__harperAutofocused) {\n\t\treturn;\n\t}\n\n\trequestAnimationFrame(() => {\n\t\tif (document.activeElement?.tagName.toLowerCase() != 'harper-render-box') {\n\t\t\tpreviouslyActiveElement = document.activeElement as HTMLElement;\n\t\t}\n\n\t\tnode.focus();\n\t\tObject.defineProperty(node, '__harperAutofocused', {\n\t\t\tvalue: true,\n\t\t\tenumerable: false,\n\t\t\tconfigurable: false,\n\t\t});\n\t});\n};\n\nvar CloseOnEscapeHook: any = function (this: any, onClose: () => void) {\n\tthis.onClose = onClose;\n};\n\nCloseOnEscapeHook.prototype.hook = function (this: { onClose: () => void }, node: HTMLElement) {\n\tconst handler = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Escape') {\n\t\t\tthis.onClose();\n\t\t}\n\t};\n\twindow.addEventListener('keydown', handler);\n\t(node as any).__harperCloseOnEscapeHandler = handler;\n};\n\nCloseOnEscapeHook.prototype.unhook = function (this: any, node: HTMLElement) {\n\tconst handler = (node as any).__harperCloseOnEscapeHandler;\n\tif (handler) {\n\t\twindow.removeEventListener('keydown', handler);\n\t\tdelete (node as any).__harperCloseOnEscapeHandler;\n\t}\n};\n\nfunction header(\n\ttitle: string,\n\tcolor: string,\n\tonClose: () => void,\n\topenOptions?: () => Promise<void>,\n\trule?: string,\n\tsetRuleEnabled?: (ruleId: string, enabled: boolean) => Promise<void> | void,\n): any {\n\tconst closeButton = h(\n\t\t'button',\n\t\t{\n\t\t\tclassName: 'harper-close-btn',\n\t\t\tonclick: onClose,\n\t\t\ttitle: 'Close',\n\t\t\t'aria-label': 'Close',\n\t\t},\n\t\t'×',\n\t);\n\n\tconst settingsButton = openOptions\n\t\t? h(\n\t\t\t\t'button',\n\t\t\t\t{\n\t\t\t\t\tclassName: 'harper-gear-btn',\n\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\topenOptions();\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'Settings',\n\t\t\t\t\t'aria-label': 'Settings',\n\t\t\t\t\tinnerHTML: settingsIconSvg,\n\t\t\t\t},\n\t\t\t\t[],\n\t\t\t)\n\t\t: undefined;\n\n\tconst disableRuleButton =\n\t\tsetRuleEnabled && rule\n\t\t\t? h(\n\t\t\t\t\t'button',\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'harper-disable-btn',\n\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\tPromise.resolve(setRuleEnabled(rule, false)).finally(() => {\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitle: `Disable the ${rule} rule`,\n\t\t\t\t\t\t'aria-label': 'Disable this lint rule',\n\t\t\t\t\t\tinnerHTML: disableIconSvg,\n\t\t\t\t\t},\n\t\t\t\t\t[],\n\t\t\t\t)\n\t\t\t: undefined;\n\n\tconst controlsChildren = [disableRuleButton, settingsButton, closeButton].filter(\n\t\t(node): node is VNode => node != null,\n\t);\n\tconst controls = h('div', { className: 'harper-controls' }, controlsChildren);\n\tconst titleEl = h('span', { className: 'harper-title' }, [title]);\n\n\treturn h(\n\t\t'div',\n\t\t{\n\t\t\tclassName: 'harper-header',\n\t\t\tstyle: { borderBottom: `2px solid ${color}` },\n\t\t},\n\t\t[titleEl, controls],\n\t);\n}\n\nfunction body(message_html: string): any {\n\treturn h('div', { className: 'harper-body', innerHTML: message_html }, []);\n}\n\nfunction button(\n\tlabel: string,\n\textraStyle: { [key: string]: string },\n\tonClick: (event: Event) => void,\n\tdescription?: string,\n\textraProps: Record<string, unknown> = {},\n): any {\n\tconst desc = description || label;\n\treturn h(\n\t\t'button',\n\t\t{\n\t\t\tclassName: 'harper-btn',\n\t\t\tstyle: extraStyle,\n\t\t\tonclick: onClick,\n\t\t\ttitle: desc,\n\t\t\ttype: 'button',\n\t\t\t'aria-label': desc,\n\t\t\t...extraProps,\n\t\t},\n\t\tlabel,\n\t);\n}\n\nfunction footer(leftChildren: any, rightChildren: any) {\n\tconst left = h('div', { className: 'harper-child-cont' }, leftChildren);\n\tconst right = h('div', { className: 'harper-child-cont' }, rightChildren);\n\treturn h('div', { className: 'harper-footer' }, [left, right]);\n}\n\nfunction hintDrawer(hint: string | null): any {\n\tif (!hint) return undefined;\n\treturn h('div', { className: 'harper-hint-drawer', role: 'note', 'aria-live': 'polite' }, [\n\t\th('div', { className: 'harper-hint-content' }, [\n\t\t\th('div', { className: 'harper-hint-icon', 'aria-hidden': 'true' }, '💡'),\n\t\t\th('div', {}, [\n\t\t\t\th('div', { className: 'harper-hint-title' }, 'Tip'),\n\t\t\t\th('div', {}, String(hint)),\n\t\t\t]),\n\t\t]),\n\t]);\n}\n\nfunction addToDictionary(\n\tbox: LintBox,\n\taddToUserDictionary?: (words: string[]) => Promise<void>,\n): any {\n\treturn h(\n\t\t'button',\n\t\t{\n\t\t\tclassName: 'harper-btn',\n\t\t\tonclick: () => {\n\t\t\t\taddToUserDictionary?.([box.lint.problem_text]);\n\t\t\t},\n\t\t\ttitle: 'Add word to user dictionary',\n\t\t\t'aria-label': 'Add word to user dictionary',\n\t\t\tinnerHTML: bookDownSvg,\n\t\t},\n\t\t[],\n\t);\n}\n\nfunction suggestions(\n\tlintKind: LintKind,\n\tsuggestions: UnpackedSuggestion[],\n\tapply: (s: UnpackedSuggestion) => void,\n): any {\n\treturn suggestions.map((s: UnpackedSuggestion, i: number) => {\n\t\tconst label =\n\t\t\ts.replacement_text !== '' ? s.replacement_text : String(suggestionKindToLabel(s.kind));\n\t\tconst desc = `Replace with \"${label}\"`;\n\t\tconst props = i === 0 ? { hook: new FocusHook() } : {};\n\t\treturn button(\n\t\t\tlabel,\n\t\t\t{ background: lintKindColor(lintKind), color: lintKindTextColor(lintKind) },\n\t\t\t() => apply(s),\n\t\t\tdesc,\n\t\t\tprops,\n\t\t);\n\t});\n}\n\nfunction suggestionKindToLabel(s: SuggestionKind): string {\n\tswitch (s) {\n\t\tcase SuggestionKind.Replace:\n\t\t\treturn 'Replace';\n\t\tcase SuggestionKind.Remove:\n\t\t\treturn 'Remove';\n\t\tcase SuggestionKind.InsertAfter:\n\t\t\treturn 'Insert After';\n\t}\n}\n\nfunction reportProblemButton(reportError?: () => Promise<void>): any {\n\tif (!reportError) {\n\t\treturn undefined;\n\t}\n\n\treturn h(\n\t\t'button',\n\t\t{\n\t\t\tclassName: 'harper-report-link',\n\t\t\ttype: 'button',\n\t\t\tonclick: () => {\n\t\t\t\treportError();\n\t\t\t},\n\t\t\ttitle: 'Report an issue with this lint',\n\t\t\t'aria-label': 'Report an issue with this lint',\n\t\t},\n\t\t'Report',\n\t);\n}\n\nfunction styleTag(lintKind: LintKind) {\n\treturn h('style', { id: 'harper-suggestion-style' }, [\n\t\t`code{\n      text-decoration: underline solid ${lintKindColor(lintKind)} 2px;\n      padding:0.125rem;\n      border-radius:0.25rem\n      }\n      .harper-container{\n      max-width:420px;\n      max-height:400px;\n      overflow-y:auto;\n      background:#ffffff;\n      border:1px solid #d0d7de;\n      border-radius:8px;\n      box-shadow:0 4px 12px rgba(140,149,159,0.3);\n      padding:8px;\n      display:flex;\n      flex-direction:column;\n      z-index:5000;\n      font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;\n      pointer-events:auto\n      }\n      .harper-header{\n      display:flex;\n      align-items:center;\n      justify-content:space-between;\n      font-weight:600;\n      font-size:14px;\n      line-height:20px;\n      color:#1f2328;\n      padding-bottom:4px;\n      margin-bottom:4px;\n      user-select:none\n      }\n      .harper-title{\n      display:flex;\n      align-items:center;\n      gap:6px;\n      }\n      .harper-body{\n      font-size:14px;\n      line-height:20px;\n      color:#57606a\n      }\n      .harper-btn{\n      display:inline-flex;\n      align-items:center;\n      justify-content:center;\n      gap:4px;\n      cursor:pointer;\n      border:none;\n      border-radius:6px;\n      padding:3px 6px;\n      min-height:28px;\n      font-size:13px;\n      font-weight:600;\n      line-height:20px;\n      transition:background 120ms ease,transform 80ms ease\n      }\n      .harper-btn:hover{filter:brightness(0.92)}\n      .harper-btn:active{transform:scale(0.97)}\n      .harper-close-btn{background:transparent;border:none;cursor:pointer;font-size:20px;line-height:1;color:#57606a;padding:0 4px;}\n      .harper-close-btn:hover{color:#1f2328;}\n      .harper-disable-btn,\n      .harper-gear-btn{\n      background:transparent;\n      border:none;\n      cursor:pointer;\n      font-size:18px;\n      line-height:1;\n      color:#57606a;\n      padding:0 4px;\n      display:inline-flex;\n      align-items:center;\n      justify-content:center;\n      }\n      .harper-disable-btn:hover,\n      .harper-gear-btn:hover{color:#1f2328;}\n      .harper-disable-btn svg,\n      .harper-gear-btn svg{\n      width:18px;\n      height:18px;\n      display:block;\n      }\n      .harper-controls{display:flex;align-items:center;gap:3px;}\n      .harper-child-cont{\n      display:flex;\n      flex-wrap:wrap;\n      justify-content:flex-end;\n      gap:8px\n      }\n      .harper-footer{\n      display:flex;\n      flex-wrap:wrap;\n      justify-content:space-between;\n      padding:2px;\n      gap:16px\n      }\n\n      /* Hint drawer styles */\n      .harper-hint-drawer{\n        margin-top:6px;\n        border-top:1px solid #eaeef2;\n        background:#f6f8fa;\n        color:#3e4c59;\n        border-radius:0 0 6px 6px;\n      }\n      .harper-hint-content{\n        display:flex;\n        gap:8px;\n        align-items:flex-start;\n        padding:8px 10px;\n        font-size:13px;\n        line-height:18px;\n      }\n      .harper-hint-icon{\n        flex:0 0 auto;\n        width:18px;height:18px;\n        border-radius:50%;\n        background:#fff3c4;\n        color:#7c5e10;\n        display:flex;align-items:center;justify-content:center;\n        font-weight:700;\n      }\n      .harper-hint-title{ font-weight:600; margin-right:6px; color:#1f2328; }\n\n    .fade-in {\n      animation: fadeIn 100ms ease-in-out forwards;\n    }\n\n      @keyframes fadeIn {\n        from {\n          opacity: 0;\n          transform: scale(0.95);\n        }\n        to {\n          opacity: 1;\n          transform: scale(1);\n        }\n      }\n\n      @media (prefers-color-scheme:dark){\n      code{background-color:#1f2d3d;color:#c9d1d9}\n      .harper-container{\n      background:#0d1117;\n      border-color:#30363d;\n      box-shadow:0 4px 12px rgba(1,4,9,0.85)\n      }\n      .harper-header{color:#e6edf3}\n      .harper-body{color:#8b949e}\n      .harper-btn{\n      background:#21262d;\n      color:#c9d1d9\n      }\n      .harper-btn:hover{filter:brightness(1.15)}\n      .harper-close-btn{color:#8b949e;}\n      .harper-close-btn:hover{color:#e6edf3;}\n      .harper-disable-btn,\n      .harper-gear-btn{color:#8b949e;}\n      .harper-disable-btn:hover,\n      .harper-gear-btn:hover{color:#e6edf3;}\n      .harper-btn[style*=\"background: #2DA44E\"]{background:#238636}\n      .harper-btn[style*=\"background: #e5e5e5\"]{\n      background:#4b4b4b;\n      color:#ffffff\n      }\n      .harper-hint-drawer{ border-top-color:#30363d; background:#151b23; color:#9aa4af; }\n      .harper-hint-icon{ background:#3a2f0b; color:#f2cc60; }\n      .harper-hint-title{ color:#e6edf3; }\n      }\n      .harper-report-link{\n      margin-top:8px;\n      align-self:flex-start;\n      background:none;\n      border:none;\n      padding:0;\n      color:#0969da;\n      font-size:13px;\n      font-weight:600;\n      cursor:pointer;\n      }\n      .harper-report-link:hover{text-decoration:underline;}\n      .harper-report-link:focus{outline:2px solid #0969da; outline-offset:2px;}\n      @media (prefers-color-scheme:dark){\n      .harper-report-link{color:#58a6ff;}\n      }`,\n\t]);\n}\n\nfunction ignoreLint(onIgnore: () => void | Promise<void>): any {\n\treturn button(\n\t\t'Dismiss',\n\t\t{ background: '#e5e5e5', color: '#000000', fontWeight: 'lighter' },\n\t\tonIgnore,\n\t\t'Ignore this lint',\n\t);\n}\n\nexport default function SuggestionBox(\n\tbox: IgnorableLintBox,\n\tactions: {\n\t\topenOptions?: () => Promise<void>;\n\t\taddToUserDictionary?: (words: string[]) => Promise<void>;\n\t\treportError?: (lint: UnpackedLint, ruleId: string) => Promise<void>;\n\t\tsetRuleEnabled?: (ruleId: string, enabled: boolean) => Promise<void> | void;\n\t},\n\thint: string | null,\n\tclose: () => void,\n) {\n\tconst top = box.y + box.height + 3;\n\tlet bottom: number | undefined;\n\tconst left = box.x;\n\n\tif (top + 400 > window.innerHeight) {\n\t\tbottom = window.innerHeight - box.y - 3;\n\t}\n\n\tconst positionStyle: { [key: string]: string } = {\n\t\tposition: 'fixed',\n\t\ttop: bottom ? '' : `${top}px`,\n\t\tbottom: bottom ? `${bottom}px` : '',\n\t\tleft: `${left}px`,\n\t\ttransformOrigin: `${bottom ? 'bottom' : 'top'} left`,\n\t};\n\n\tconst ignoreLintCallback = box.ignoreLint;\n\n\tconst refocusClose = () => {\n\t\tpreviouslyActiveElement?.focus();\n\t\tclose();\n\t};\n\n\treturn h(\n\t\t'div',\n\t\t{\n\t\t\tclassName: 'harper-container fade-in',\n\t\t\tstyle: positionStyle,\n\t\t\t'harper-close-on-escape': new CloseOnEscapeHook(refocusClose),\n\t\t},\n\t\t[\n\t\t\tstyleTag(box.lint.lint_kind),\n\t\t\theader(\n\t\t\t\tbox.lint.lint_kind_pretty,\n\t\t\t\tlintKindColor(box.lint.lint_kind),\n\t\t\t\trefocusClose,\n\t\t\t\tactions.openOptions,\n\t\t\t\tbox.rule,\n\t\t\t\tactions.setRuleEnabled,\n\t\t\t),\n\t\t\tbody(box.lint.message_html),\n\t\t\tfooter(\n\t\t\t\tsuggestions(box.lint.lint_kind, box.lint.suggestions, (v) => {\n\t\t\t\t\tbox.applySuggestion(v);\n\t\t\t\t\trefocusClose();\n\t\t\t\t}),\n\t\t\t\t[\n\t\t\t\t\tbox.lint.lint_kind === 'Spelling' && actions.addToUserDictionary\n\t\t\t\t\t\t? addToDictionary(box, actions.addToUserDictionary)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tignoreLintCallback\n\t\t\t\t\t\t? ignoreLint(() => ignoreLintCallback().then(refocusClose))\n\t\t\t\t\t\t: undefined,\n\t\t\t\t],\n\t\t\t),\n\t\t\thintDrawer(hint),\n\t\t\tactions.reportError\n\t\t\t\t? reportProblemButton(() => actions.reportError!(box.lint, box.rule))\n\t\t\t\t: undefined,\n\t\t],\n\t);\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/TextFieldRange.ts",
    "content": "import type { ConditionalKeys, WritableKeysOf } from 'type-fest';\nimport { boxesOverlap, domRectToBox } from './Box';\n\n/** A version of the `Range` object that works for `<textarea />` and `<input />` elements. */\nexport default class TextFieldRange {\n\tfield: HTMLTextAreaElement | HTMLInputElement;\n\tstartOffset: number;\n\tendOffset: number;\n\n\t// Shared arena per field to avoid repeated layout work\n\tprivate static arenas: WeakMap<\n\t\tHTMLTextAreaElement | HTMLInputElement,\n\t\t{\n\t\t\tmirror: HTMLDivElement;\n\t\t\ttext: Text;\n\t\t\trefs: number;\n\t\t}\n\t> = new WeakMap();\n\n\tprivate arena: { mirror: HTMLDivElement; text: Text; refs: number };\n\n\t/**\n\t * Create a range-like object for a given text input field.\n\t * @param field - A HTMLTextAreaElement or a HTMLInputElement (of type \"text\").\n\t * @param startOffset - The starting character index.\n\t * @param endOffset - The ending character index.\n\t */\n\tconstructor(\n\t\tfield: HTMLTextAreaElement | HTMLInputElement,\n\t\tstartOffset: number,\n\t\tendOffset: number,\n\t) {\n\t\t// In this case we assume the caller provided a text field\n\t\tif (!(field instanceof HTMLTextAreaElement || field instanceof HTMLInputElement)) {\n\t\t\tthrow new Error('TextFieldRange expects an HTMLTextAreaElement or HTMLInputElement');\n\t\t}\n\t\tthis.field = field;\n\t\tthis.startOffset = startOffset;\n\t\tthis.endOffset = endOffset;\n\t\tthis.arena = TextFieldRange.ensureArena(this.field);\n\t\tthis.arena.refs++;\n\t}\n\n\t/**\n\t * Creates (or reuses) an off-screen mirror element that mimics the field's styles\n\t * and positions it exactly over the field.\n\t */\n\tprivate static ensureArena(field: HTMLTextAreaElement | HTMLInputElement): {\n\t\tmirror: HTMLDivElement;\n\t\ttext: Text;\n\t\trefs: number;\n\t} {\n\t\tconst existing = TextFieldRange.arenas.get(field);\n\t\tif (existing) return existing;\n\n\t\tconst mirror = document.createElement('div');\n\t\tmirror.className = 'harper-textfield-mirror';\n\n\t\t// Copy necessary computed styles from the field (affecting text layout)\n\t\tconst computed: CSSStyleDeclaration = window.getComputedStyle(field);\n\t\tconst propertiesToCopy: Array<\n\t\t\tConditionalKeys<Pick<CSSStyleDeclaration, WritableKeysOf<CSSStyleDeclaration>>, string>\n\t\t> = [\n\t\t\t'fontFamily',\n\t\t\t'fontSize',\n\t\t\t'fontWeight',\n\t\t\t'fontStyle',\n\t\t\t'letterSpacing',\n\t\t\t'lineHeight',\n\t\t\t'textTransform',\n\t\t\t'paddingTop',\n\t\t\t'paddingRight',\n\t\t\t'paddingBottom',\n\t\t\t'paddingLeft',\n\t\t\t'borderTopWidth',\n\t\t\t'borderRightWidth',\n\t\t\t'borderBottomWidth',\n\t\t\t'borderLeftWidth',\n\t\t\t'boxSizing',\n\t\t\t'overflowX',\n\t\t\t'overflowY',\n\t\t];\n\n\t\tpropertiesToCopy.forEach((prop) => {\n\t\t\t(mirror.style as any)[prop] = (computed as any)[prop];\n\t\t});\n\n\t\tif (field instanceof HTMLTextAreaElement) {\n\t\t\tmirror.style.overflowX = 'auto';\n\t\t\tmirror.style.overflowY = 'auto';\n\t\t}\n\n\t\t// Position the mirror exactly over the field.\n\t\tTextFieldRange.positionMirror(mirror, field);\n\n\t\tObject.assign(mirror.style, {\n\t\t\tboxSizing: 'border-box',\n\t\t\twhiteSpace: field.tagName.toLowerCase() === 'textarea' ? 'pre-wrap' : 'pre',\n\t\t\twordWrap: 'break-word',\n\t\t\tvisibility: 'hidden',\n\t\t\tposition: 'absolute',\n\t\t\tpointerEvents: 'none',\n\t\t});\n\n\t\tconst text = document.createTextNode('');\n\t\tmirror.appendChild(text);\n\n\t\t// Initialize text + scroll\n\t\ttext.nodeValue = field.value;\n\t\tdocument.body.appendChild(mirror);\n\t\tmirror.scrollTop = field.scrollTop;\n\t\tmirror.scrollLeft = field.scrollLeft;\n\n\t\tconst arena = { mirror, text, refs: 0 } as const;\n\t\tTextFieldRange.arenas.set(field, arena);\n\t\treturn arena;\n\t}\n\n\tprivate static positionMirror(\n\t\tmirror: HTMLDivElement,\n\t\tfield: HTMLTextAreaElement | HTMLInputElement,\n\t) {\n\t\tconst fieldRect = field.getBoundingClientRect();\n\t\tconst scrollTop = window.scrollY || document.documentElement.scrollTop;\n\t\tconst scrollLeft = window.scrollX || document.documentElement.scrollLeft;\n\t\tObject.assign(mirror.style, {\n\t\t\ttop: `${fieldRect.top + scrollTop}px`,\n\t\t\tleft: `${fieldRect.left + scrollLeft}px`,\n\t\t\twidth: `${fieldRect.width}px`,\n\t\t\theight: `${fieldRect.height}px`,\n\t\t});\n\t}\n\n\t/**\n\t * Updates the mirror's text node with the current value of the field.\n\t */\n\tprivate syncMirror(): void {\n\t\t// Ensure text, scroll, and position reflect the current field\n\t\tthis.arena.text.nodeValue = this.field.value;\n\t\tthis.arena.mirror.scrollTop = this.field.scrollTop;\n\t\tthis.arena.mirror.scrollLeft = this.field.scrollLeft;\n\t\tTextFieldRange.positionMirror(this.arena.mirror, this.field);\n\t}\n\n\t/**\n\t * Returns an array of DOMRect objects corresponding to the range's visual segments.\n\t * This mimics the native Range.getClientRects() method.\n\t * @returns {DOMRect[]} An array of DOMRect objects.\n\t */\n\tgetClientRects(): DOMRect[] {\n\t\tthis.syncMirror();\n\n\t\tconst range = document.createRange();\n\t\trange.setStart(this.arena.text, this.startOffset);\n\t\trange.setEnd(this.arena.text, this.endOffset);\n\n\t\tlet arr = Array.from(range.getClientRects());\n\n\t\tconst fieldBox = domRectToBox(this.field.getBoundingClientRect());\n\n\t\t// Filter out rectangles that should be hidden\n\t\tarr = arr.filter((rect) => {\n\t\t\tconst box = domRectToBox(rect);\n\t\t\treturn boxesOverlap(box, fieldBox);\n\t\t});\n\n\t\treturn arr;\n\t}\n\n\tgetBoundingClientRect(): DOMRect | null {\n\t\tthis.syncMirror();\n\t\treturn this.arena.mirror.getBoundingClientRect();\n\t}\n\n\t/**\n\t * Detaches (removes) the mirror element from the document.\n\t */\n\tdetach(): void {\n\t\t// Release this handle; keep the shared mirror for reuse unless the field is gone.\n\t\tthis.arena.refs = Math.max(0, this.arena.refs - 1);\n\t\t// If the field is no longer in the document, clean up the arena.\n\t\tif (!document.contains(this.field)) {\n\t\t\ttry {\n\t\t\t\tthis.arena.mirror.parentNode?.removeChild(this.arena.mirror);\n\t\t\t} catch {}\n\t\t\tTextFieldRange.arenas.delete(this.field);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/computeLintBoxes.ts",
    "content": "import { type Span, SuggestionKind } from 'harper.js';\nimport { domRectToBox, type IgnorableLintBox, isBottomEdgeInBox, shrinkBoxToFit } from './Box';\nimport { getRangeForTextSpan } from './domUtils';\nimport {\n\tgetCkEditorRoot,\n\tgetCMRoot,\n\tgetDraftRoot,\n\tgetLexicalRoot,\n\tgetSlateRoot,\n\tisFormEl,\n} from './editorUtils';\nimport TextFieldRange from './TextFieldRange';\nimport {\n\tapplySuggestion,\n\ttype UnpackedLint,\n\ttype UnpackedSpan,\n\ttype UnpackedSuggestion,\n} from './unpackLint';\n\nconst GOOGLE_DOCS_EDITOR_SELECTOR = '.kix-appview-editor';\n\ntype GoogleDocsReplacePayload = {\n\tstart: number;\n\tend: number;\n\treplacementText: string;\n\texpectedText: string;\n\tbeforeContext: string;\n\tafterContext: string;\n};\n\ntype GoogleDocsBridgeClientLike = {\n\treplaceText: (\n\t\tstart: number,\n\t\tend: number,\n\t\treplacementText: string,\n\t\texpectedText?: string,\n\t\tbeforeContext?: string,\n\t\tafterContext?: string,\n\t) => Promise<unknown> | unknown;\n};\n\ntype WindowWithGoogleDocsBridgeClient = Window & {\n\t__harperGoogleDocsBridgeClient?: GoogleDocsBridgeClientLike;\n};\n\nexport default function computeLintBoxes(\n\tel: HTMLElement,\n\tlint: UnpackedLint,\n\trule: string,\n\topts: { ignoreLint?: (hash: string) => Promise<void> },\n): IgnorableLintBox[] {\n\tif (isGoogleDocsTarget(el)) {\n\t\treturn computeGoogleDocsLintBoxes(el, lint, rule, opts);\n\t}\n\n\ttry {\n\t\tlet range: Range | TextFieldRange | null = null;\n\n\t\tif (isFormEl(el)) {\n\t\t\trange = new TextFieldRange(el, lint.span.start, lint.span.end);\n\t\t} else {\n\t\t\trange = getRangeForTextSpan(el, lint.span as Span);\n\t\t}\n\n\t\tif (!range) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst targetRects = Array.from(\n\t\t\t(range as Range).getClientRects ? (range as Range).getClientRects() : [],\n\t\t);\n\t\tconst elBox = domRectToBox((range as Range).getBoundingClientRect());\n\t\t(range as any).detach?.();\n\n\t\tconst boxes: IgnorableLintBox[] = [];\n\n\t\tlet source: HTMLElement | null = null;\n\n\t\tif (el.tagName == undefined) {\n\t\t\tsource = el.parentElement;\n\t\t} else {\n\t\t\tsource = el;\n\t\t}\n\n\t\tif (source == null) {\n\t\t\treturn [];\n\t\t}\n\n\t\tfor (const targetRect of targetRects as DOMRect[]) {\n\t\t\tif (!isBottomEdgeInBox(targetRect, elBox)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst shrunkBox = shrinkBoxToFit(targetRect, elBox);\n\n\t\t\tboxes.push({\n\t\t\t\tx: shrunkBox.x,\n\t\t\t\ty: shrunkBox.y,\n\t\t\t\twidth: shrunkBox.width,\n\t\t\t\theight: shrunkBox.height,\n\t\t\t\tlint,\n\t\t\t\tsource,\n\t\t\t\trule,\n\t\t\t\trange: range instanceof Range ? range : undefined,\n\t\t\t\tapplySuggestion: (sug: UnpackedSuggestion) => {\n\t\t\t\t\tconst current = isFormEl(el)\n\t\t\t\t\t\t? (el as HTMLInputElement | HTMLTextAreaElement).value\n\t\t\t\t\t\t: (el.textContent ?? '');\n\t\t\t\t\treplaceValue(el, lint.span, suggestionToReplacementText(sug, lint.span, current));\n\t\t\t\t},\n\t\t\t\tignoreLint: opts.ignoreLint ? () => opts.ignoreLint!(lint.context_hash) : undefined,\n\t\t\t});\n\t\t}\n\t\treturn boxes;\n\t} catch (e) {\n\t\t// If there's an error, it's likely because the element no longer exists\n\t\treturn [];\n\t}\n}\n\nfunction isGoogleDocsTarget(el: HTMLElement): boolean {\n\treturn el.getAttribute('data-harper-google-docs-target') === 'true';\n}\n\nfunction computeGoogleDocsLintBoxes(\n\ttarget: HTMLElement,\n\tlint: UnpackedLint,\n\trule: string,\n\topts: { ignoreLint?: (hash: string) => Promise<void> },\n): IgnorableLintBox[] {\n\ttry {\n\t\tconst editor = document.querySelector(GOOGLE_DOCS_EDITOR_SELECTOR) as HTMLElement | null;\n\t\tconst source = target.textContent ?? '';\n\n\t\tif (!editor) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (lint.source !== source) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst range = getRangeForTextSpan(target, lint.span as Span);\n\t\tif (!range) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst targetRects = Array.from(range.getClientRects ? range.getClientRects() : []);\n\t\tconst elBox = domRectToBox(range.getBoundingClientRect());\n\t\t(range as any).detach?.();\n\n\t\tconst boxes: IgnorableLintBox[] = [];\n\t\tfor (const targetRect of targetRects as DOMRect[]) {\n\t\t\tif (!isBottomEdgeInBox(targetRect, elBox)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst shrunkBox = shrinkBoxToFit(targetRect, elBox);\n\t\t\tboxes.push({\n\t\t\t\tx: shrunkBox.x,\n\t\t\t\ty: shrunkBox.y,\n\t\t\t\twidth: shrunkBox.width,\n\t\t\t\theight: shrunkBox.height,\n\t\t\t\tlint,\n\t\t\t\tsource: editor,\n\t\t\t\trule,\n\t\t\t\tapplySuggestion: (sug: UnpackedSuggestion) => {\n\t\t\t\t\tconst replacementText = suggestionToReplacementText(sug, lint.span, source);\n\t\t\t\t\treplaceGoogleDocsValue(lint.span, replacementText, source);\n\t\t\t\t},\n\t\t\t\tignoreLint: opts.ignoreLint ? () => opts.ignoreLint!(lint.context_hash) : undefined,\n\t\t\t});\n\t\t}\n\n\t\treturn boxes;\n\t} catch {\n\t\treturn [];\n\t}\n}\n\n/** Transform an arbitrary suggestion to the equivalent replacement text. */\nfunction suggestionToReplacementText(\n\tsug: UnpackedSuggestion,\n\tspan: UnpackedSpan,\n\tsource: string,\n): string {\n\tswitch (sug.kind) {\n\t\tcase SuggestionKind.Replace:\n\t\t\treturn sug.replacement_text;\n\t\tcase SuggestionKind.Remove:\n\t\t\treturn '';\n\t\tcase SuggestionKind.InsertAfter:\n\t\t\treturn source.slice(span.start, span.end) + sug.replacement_text;\n\t}\n}\n\nfunction replaceValue(\n\tel: HTMLElement,\n\tspan: { start: number; end: number },\n\treplacementText: string,\n) {\n\tif (isFormEl(el)) {\n\t\treplaceFormElementValue(el as HTMLTextAreaElement | HTMLInputElement, span, replacementText);\n\t} else if (getLexicalRoot(el) != null) {\n\t\treplaceLexicalValue(el, span, replacementText);\n\t} else if (getDraftRoot(el) != null) {\n\t\treplaceDraftValue(el, span, replacementText);\n\t} else if (getCMRoot(el) != null) {\n\t\treplaceCodeMirrorValue(el, span, replacementText);\n\t} else if (getSlateRoot(el) != null || getCkEditorRoot(el) != null) {\n\t\treplaceRichTextEditorValue(el, span, replacementText);\n\t} else {\n\t\treplaceGenericContentEditable(el, span, replacementText);\n\t}\n\n\tel.dispatchEvent(new Event('change', { bubbles: true }));\n}\n\nfunction replaceGoogleDocsValue(\n\tspan: { start: number; end: number },\n\treplacementText: string,\n\tsource: string,\n) {\n\ttry {\n\t\tconst safeStart = Math.max(0, Math.min(span.start, source.length));\n\t\tconst safeEnd = Math.max(safeStart, Math.min(span.end, source.length));\n\t\tconst expectedText = source.slice(safeStart, safeEnd);\n\t\tconst contextRadius = 64;\n\t\tconst beforeContext = source.slice(Math.max(0, safeStart - contextRadius), safeStart);\n\t\tconst afterContext = source.slice(safeEnd, Math.min(source.length, safeEnd + contextRadius));\n\n\t\tconst payload: GoogleDocsReplacePayload = {\n\t\t\tstart: span.start,\n\t\t\tend: span.end,\n\t\t\treplacementText,\n\t\t\texpectedText,\n\t\t\tbeforeContext,\n\t\t\tafterContext,\n\t\t};\n\t\t// This looks awkward because lint-framework cannot import chrome-plugin code directly.\n\t\t// The content script puts the bridge client on window so this shared package can call it.\n\t\tconst bridgeClient = (window as WindowWithGoogleDocsBridgeClient)\n\t\t\t.__harperGoogleDocsBridgeClient;\n\t\tif (bridgeClient && typeof bridgeClient.replaceText === 'function') {\n\t\t\tvoid Promise.resolve(\n\t\t\t\tbridgeClient.replaceText(\n\t\t\t\t\tpayload.start,\n\t\t\t\t\tpayload.end,\n\t\t\t\t\tpayload.replacementText,\n\t\t\t\t\tpayload.expectedText,\n\t\t\t\t\tpayload.beforeContext,\n\t\t\t\t\tpayload.afterContext,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t} catch {\n\t\t// Ignore bridge dispatch failures.\n\t}\n}\n\nfunction replaceFormElementValue(\n\tel: HTMLTextAreaElement | HTMLInputElement,\n\tspan: { start: number; end: number },\n\treplacementText: string,\n) {\n\tel.focus();\n\tel.setSelectionRange(span.start, span.end);\n\tdocument.execCommand('insertText', false, replacementText);\n}\n\nfunction replaceLexicalValue(\n\tel: HTMLElement,\n\tspan: { start: number; end: number },\n\treplacementText: string,\n) {\n\tconst setup = selectSpanInEditor(el, span);\n\tif (!setup) return;\n\n\tconst { doc, sel, range } = setup;\n\n\t// Direct DOM replacement\n\treplaceTextInRange(doc, sel, range, replacementText);\n\n\t// Notify\n\tel.dispatchEvent(new InputEvent('input', { bubbles: true, cancelable: false }));\n}\n\nfunction replaceDraftValue(\n\tel: HTMLElement,\n\tspan: { start: number; end: number },\n\treplacementText: string,\n) {\n\tconst setup = selectSpanInEditor(el, span);\n\tif (!setup) return;\n\n\tconst { doc, sel, range } = setup;\n\n\tsetTimeout(() => {\n\t\tconst beforeEvt = new InputEvent('beforeinput', {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t\tinputType: 'insertText',\n\t\t\tdata: replacementText,\n\t\t});\n\t\tel.dispatchEvent(beforeEvt);\n\n\t\tif (!beforeEvt.defaultPrevented) {\n\t\t\treplaceTextInRange(doc, sel, range, replacementText);\n\t\t}\n\n\t\tel.dispatchEvent(new InputEvent('input', { bubbles: true, inputType: 'insertText' }));\n\t}, 0);\n}\n\nfunction selectSpanInEditor(el: HTMLElement, span: { start: number; end: number }) {\n\tconst doc = el.ownerDocument;\n\tconst sel = doc.defaultView?.getSelection();\n\n\tif (!sel) {\n\t\treturn null;\n\t}\n\n\tel.focus();\n\n\tconst range = getRangeForTextSpan(el, span as Span);\n\tif (!range) {\n\t\treturn null;\n\t}\n\n\tsel.removeAllRanges();\n\tsel.addRange(range);\n\n\treturn { doc, sel, range };\n}\n\nfunction replaceRichTextEditorValue(\n\tel: HTMLElement,\n\tspan: { start: number; end: number },\n\treplacementText: string,\n) {\n\tconst setup = selectSpanInEditor(el, span);\n\tif (!setup) return;\n\n\tconst { doc, sel, range } = setup;\n\n\tconst evInit: InputEventInit = {\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tinputType: 'insertReplacementText',\n\t\tdata: replacementText,\n\t};\n\n\tif ('StaticRange' in self) {\n\t\tevInit.targetRanges = [new StaticRange(range)];\n\t}\n\n\tconst beforeEvt = new InputEvent('beforeinput', evInit);\n\tel.dispatchEvent(beforeEvt);\n\n\tif (!beforeEvt.defaultPrevented) {\n\t\treplaceTextInRange(doc, sel, range, replacementText);\n\t\tel.dispatchEvent(new InputEvent('input', { bubbles: true, cancelable: false }));\n\t}\n}\n\nfunction replaceCodeMirrorValue(\n\tel: HTMLElement,\n\tspan: { start: number; end: number },\n\treplacementText: string,\n) {\n\tconst setup = selectSpanInEditor(el, span);\n\tif (!setup) return;\n\n\tconst { doc, sel, range } = setup;\n\n\tconst evInit: InputEventInit = {\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tinputType: 'insertReplacementText',\n\t\tdata: replacementText,\n\t};\n\n\tif ('StaticRange' in self) {\n\t\tevInit.targetRanges = [new StaticRange(range)];\n\t}\n\n\tconst beforeEvt = new InputEvent('beforeinput', evInit);\n\tel.dispatchEvent(beforeEvt);\n\n\t// CodeMirror-style editors can handle replacement during beforeinput.\n\t// If not handled, fall back to direct DOM replacement.\n\tif (!beforeEvt.defaultPrevented) {\n\t\treplaceTextInRange(doc, sel, range, replacementText);\n\t\tel.dispatchEvent(\n\t\t\tnew InputEvent('input', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: false,\n\t\t\t\tinputType: 'insertReplacementText',\n\t\t\t\tdata: replacementText,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction replaceTextInRange(doc: Document, sel: Selection, range: Range, replacementText: string) {\n\tconst startContainer = range.startContainer;\n\tconst endContainer = range.endContainer;\n\n\tif (startContainer === endContainer && startContainer.nodeType === Node.TEXT_NODE) {\n\t\tconst textNode = startContainer as Text;\n\t\tconst startOffset = range.startOffset;\n\t\tconst endOffset = range.endOffset;\n\n\t\tconst oldText = textNode.textContent || '';\n\t\tconst newText =\n\t\t\toldText.substring(0, startOffset) + replacementText + oldText.substring(endOffset);\n\n\t\ttextNode.textContent = newText;\n\n\t\t// Set cursor after replacement\n\t\tconst newRange = doc.createRange();\n\t\tconst cursorPosition = startOffset + replacementText.length;\n\t\tnewRange.setStart(textNode, cursorPosition);\n\t\tnewRange.setEnd(textNode, cursorPosition);\n\t\tsel.removeAllRanges();\n\t\tsel.addRange(newRange);\n\t} else {\n\t\t// Multi node range fallback\n\t\trange.deleteContents();\n\t\tconst textNode = doc.createTextNode(replacementText);\n\t\trange.insertNode(textNode);\n\n\t\tconst newRange = doc.createRange();\n\t\tnewRange.setStartAfter(textNode);\n\t\tnewRange.setEndAfter(textNode);\n\t\tsel.removeAllRanges();\n\t\tsel.addRange(newRange);\n\t}\n}\n\nfunction replaceGenericContentEditable(\n\tel: HTMLElement,\n\tspan: { start: number; end: number },\n\treplacementText: string,\n) {\n\tif (span && replacementText !== undefined) {\n\t\tconst setup = selectSpanInEditor(el, span);\n\t\tif (setup) {\n\t\t\tconst { doc, sel, range } = setup;\n\t\t\treplaceTextInRange(doc, sel, range, replacementText);\n\t\t\tel.dispatchEvent(new InputEvent('input', { bubbles: true, cancelable: false }));\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Fallback: replace entire content\n\tel.textContent = applySuggestion(el.textContent, span, {\n\t\tkind: SuggestionKind.Replace,\n\t\treplacement_text: replacementText,\n\t});\n\tel.dispatchEvent(new InputEvent('input', { bubbles: true }));\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/domUtils.ts",
    "content": "import type { Span } from 'harper.js';\nimport { isBoxInScreen } from './Box';\n\n/**\n * Turn a `NodeList` into a normal JavaScript array.\n * @param collection\n */\nexport function extractFromHTMLCollection(collection: HTMLCollection): Element[] {\n\tconst elements: Element[] = [];\n\tfor (let i = 0; i < collection.length; i++) {\n\t\tconst el = collection.item(i);\n\t\tif (el) elements.push(el);\n\t}\n\treturn elements;\n}\n\n/**\n * Turn a `NodeList` into a normal JavaScript array.\n * @param list\n */\nexport function extractFromNodeList<T extends Node>(list: NodeListOf<T>): T[] {\n\tconst elements: T[] = [];\n\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst item = list[i];\n\t\telements.push(item);\n\t}\n\n\treturn elements;\n}\n\nexport function getNodesFromQuerySelector(element: Element, query: string) {\n\treturn extractFromNodeList(element.querySelectorAll(query));\n}\n\n/** Get a node's closest ancestor that has `display: block`. */\nexport function getClosestBlockAncestor(leaf: Node, root: Element): Element | null {\n\tlet current: Node | null = leaf;\n\n\twhile (current) {\n\t\tif (current instanceof Element) {\n\t\t\tif (getComputedStyle(current).display === 'block') {\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\tif (current === root) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tcurrent = current.parentNode;\n\t}\n\n\treturn null;\n}\n\n/**\n * Flatten a provided node, and its children into a single array.\n * @param node\n */\nexport function leafNodes(node: Node): Node[] {\n\tconst out: Node[] = [];\n\n\tconst children = extractFromNodeList(node.childNodes);\n\n\tif (children.length === 0) {\n\t\treturn [node];\n\t}\n\n\tfor (const child of children) {\n\t\tconst sub = leafNodes(child);\n\t\tsub.forEach((v) => {\n\t\t\tout.push(v);\n\t\t});\n\t}\n\n\treturn out;\n}\n\n/**\n * Given an element and a Span of text inside it, compute the Range that represents the region of the DOM represented.\n * @param target\n * @param span\n */\nexport function getRangeForTextSpan(target: Element, span: Span): Range | null {\n\tconst children = leafNodes(target);\n\n\tconst range = document.createRange();\n\tlet traversed = 0;\n\n\tlet startFound = false;\n\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst child = children[i] as HTMLElement;\n\t\tconst childText = child.textContent ?? '';\n\n\t\tif (traversed + childText.length > span.start && !startFound) {\n\t\t\trange.setStart(child, span.start - traversed);\n\t\t\tstartFound = true;\n\t\t}\n\n\t\tif (startFound && traversed + childText.length >= span.end) {\n\t\t\trange.setEnd(child, span.end - traversed);\n\t\t\treturn range;\n\t\t}\n\n\t\ttraversed += childText?.length ?? 0;\n\t}\n\n\treturn null;\n}\n\nconst sharedRange: Range | null = typeof document !== 'undefined' ? document.createRange() : null;\n\n/** Check if a node represents a heading (native heading tags or role=\"heading\"). */\nexport function isHeading(node: Node): boolean {\n\tif (!(node instanceof Element)) return false;\n\n\tconst tag = node.tagName.toLowerCase();\n\tif (/^h[1-6]$/.test(tag)) return true;\n\n\tconst role = node.getAttribute('role');\n\treturn role?.toLowerCase() === 'heading';\n}\n\n/** Check if an element is visible to the user.\n *\n * It is coarse and meant for performance improvements, not precision.*/\nexport function isVisible(node: Node): boolean {\n\ttry {\n\t\tif (!node || !(node as any).ownerDocument) return false;\n\n\t\tif (node instanceof Element) {\n\t\t\tif (!node.isConnected) return false;\n\n\t\t\t// Google Docs integration uses an off-screen bridge element that is intentionally\n\t\t\t// hidden from users. Treat it as visible when its editor container is on-screen.\n\t\t\tif (node.getAttribute('data-harper-google-docs-target') === 'true') {\n\t\t\t\tconst editor = node.closest('.kix-appview-editor') as HTMLElement | null;\n\t\t\t\tif (!editor) return false;\n\t\t\t\treturn isBoxInScreen(editor.getBoundingClientRect());\n\t\t\t}\n\n\t\t\tconst rect = node.getBoundingClientRect();\n\t\t\tif (!isBoxInScreen(rect)) return false;\n\t\t\tconst cv = (node as any).checkVisibility;\n\t\t\tif (typeof cv === 'function') return cv.call(node);\n\t\t\tconst cs = getComputedStyle(node);\n\t\t\tif (cs.display === 'none' || cs.visibility === 'hidden' || cs.opacity === '0') return false;\n\t\t\treturn true;\n\t\t}\n\n\t\tif (!sharedRange) return false;\n\t\tconst parent = (node as any).parentElement as Element | null;\n\t\tif (parent && !parent.isConnected) return false;\n\t\tsharedRange.selectNode(node);\n\t\tconst rect = sharedRange.getBoundingClientRect();\n\t\treturn isBoxInScreen(rect);\n\t} catch {\n\t\treturn false;\n\t}\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/editorUtils.ts",
    "content": "import { type Box, domRectToBox } from './Box';\nimport type SourceElement from './SourceElement';\nimport TextFieldRange from './TextFieldRange';\n\nexport function findAncestor(\n\tel: SourceElement,\n\tpredicate: (el: SourceElement) => boolean,\n): SourceElement | null {\n\tlet current: SourceElement | null = el;\n\twhile (current != null) {\n\t\tif (predicate(current)) return current;\n\t\tcurrent = current.parentElement;\n\t}\n\treturn null;\n}\n\nexport function getGhostRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) => !isTextNode(node) && node.closest('article, main, section') != null,\n\t);\n}\n\nexport function getDraftRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) =>\n\t\t\t!isTextNode(node) && node.classList.contains('public-DraftEditor-content'),\n\t);\n}\n\nexport function getPMRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) => !isTextNode(node) && node.classList.contains('ProseMirror'),\n\t);\n}\n\nexport function getCMRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) => !isTextNode(node) && node.classList.contains('cm-editor'),\n\t);\n}\n\nexport function getNotionRoot(): SourceElement | null {\n\treturn document.getElementById('notion-app');\n}\n\nexport function getSlateRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) => !isTextNode(node) && node.getAttribute('data-slate-editor') === 'true',\n\t);\n}\n\nexport function getLexicalRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) =>\n\t\t\t!isTextNode(node) && node.getAttribute('data-lexical-editor') === 'true',\n\t);\n}\n\nexport function getCkEditorRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) => !isTextNode(node) && node.classList.contains('ck-editor__editable'),\n\t);\n}\n\nexport function getLexicalEditable(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) => !isTextNode(node) && node.getAttribute('contenteditable') === 'true',\n\t);\n}\n\nexport function getMediumRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) => node.nodeName == 'MAIN' && location.hostname == 'medium.com',\n\t);\n}\n\nexport function getShredditComposerRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) => !isTextNode(node) && node.nodeName == 'SHREDDIT-COMPOSER',\n\t);\n}\n\nexport function getQuillJsRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) => !isTextNode(node) && node.classList.contains('ql-container'),\n\t);\n}\n\nexport function getP2Root(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) =>\n\t\t\t!isTextNode(node) && (node.id === 'p2' || node.classList.contains('p2')),\n\t);\n}\n\nexport function getGutenbergRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(\n\t\tel,\n\t\t(node: SourceElement) =>\n\t\t\t!isTextNode(node) &&\n\t\t\t(node.id === 'editor' || node.classList.contains('editor-styles-wrapper')),\n\t);\n}\n\nexport function getTrixRoot(el: SourceElement): SourceElement | null {\n\treturn findAncestor(el, (node: SourceElement) => node.nodeName == 'TRIX-EDITOR');\n}\n\nexport function getCaretPosition(): Box | null {\n\tconst active = document.activeElement;\n\n\tif (\n\t\tactive instanceof HTMLTextAreaElement ||\n\t\t(active instanceof HTMLInputElement && active.type === 'text')\n\t) {\n\t\tif (\n\t\t\tactive.selectionStart == null ||\n\t\t\tactive.selectionEnd == null ||\n\t\t\tactive.selectionStart !== active.selectionEnd\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst offset = active.selectionStart;\n\t\tconst tfRange = new TextFieldRange(active, offset, offset);\n\t\tconst rects = tfRange.getClientRects();\n\t\ttfRange.detach();\n\n\t\treturn rects.length ? domRectToBox(rects[0]) : null;\n\t}\n\n\tconst selection = window.getSelection();\n\tif (!selection || selection.rangeCount === 0) return null;\n\n\tconst range = selection.getRangeAt(0);\n\tif (!range.collapsed) return null;\n\n\treturn domRectToBox(range.getBoundingClientRect());\n}\n\nexport function isFormEl(el: any): el is HTMLInputElement | HTMLTextAreaElement {\n\treturn el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement;\n}\n\nexport function isTextNode(el: SourceElement): el is Text {\n\treturn el.nodeType === Node.TEXT_NODE;\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/lintKindColor.ts",
    "content": "import { getContrastingTextColor } from './utils';\n\n// First, define the color map as a constant\nconst LINT_KIND_COLORS = {\n\tAgreement: '#228B22', // Forest green\n\tBoundaryError: '#8B4513', // Saddle brown\n\tCapitalization: '#540D6E', // Deep purple\n\tEggcorn: '#FF8C00', // Dark orange\n\tEnhancement: '#0EAD69', // Green\n\tFormatting: '#7D3C98', // Amethyst purple\n\tGrammar: '#9B59B6', // Medium purple\n\tMalapropism: '#C71585', // Medium violet red\n\tMiscellaneous: '#3BCEAC', // Turquoise\n\tNonstandard: '#008B8B', // Dark cyan\n\tPunctuation: '#D4850F', // Dark orange\n\tReadability: '#2E8B57', // Sea green\n\tRedundancy: '#4682B4', // Steel blue\n\tRegionalism: '#C061CB', // Vibrant purple\n\tRepetition: '#00A67C', // Green-cyan\n\tSpelling: '#EE4266', // Pink-red\n\tStyle: '#FFD23F', // Yellow\n\tTypo: '#FF6B35', // Vibrant orange-red\n\tUsage: '#1E90FF', // Dodger blue\n\tWordChoice: '#228B22', // Forest green\n} as const;\n\n// Export the type for the lint kind keys\nexport type LintKind = keyof typeof LINT_KIND_COLORS;\n\n// Export the array of all lint kind names\nexport const LINT_KINDS = Object.keys(LINT_KIND_COLORS) as LintKind[];\n\n// The main function that uses the map\nexport function lintKindColor(lintKindKey: string): string {\n\tconst color = LINT_KIND_COLORS[lintKindKey as LintKind];\n\tif (!color) {\n\t\tthrow new Error(`Unexpected lint kind: ${lintKindKey}`);\n\t}\n\treturn color;\n}\n\nexport function lintKindTextColor(lintKindKeyOrColor: string): 'black' | 'white' {\n\tconst color = LINT_KIND_COLORS[lintKindKeyOrColor as LintKind] ?? lintKindKeyOrColor;\n\treturn getContrastingTextColor(color);\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/unpackLint.ts",
    "content": "import { type Lint, type Linter, SuggestionKind } from 'harper.js';\nimport type { LintKind } from './lintKindColor';\n\nexport type UnpackedSpan = {\n\tstart: number;\n\tend: number;\n};\n\nexport type UnpackedLint = {\n\tspan: UnpackedSpan;\n\tmessage_html: string;\n\tproblem_text: string;\n\tlint_kind: LintKind;\n\tlint_kind_pretty: string;\n\tsuggestions: UnpackedSuggestion[];\n\tcontext_hash: string;\n\tsource: string;\n};\n\nexport type UnpackedLintGroups = Record<string, UnpackedLint[]>;\n\nexport type UnpackedSuggestion = {\n\tkind: SuggestionKind;\n\t/// An empty string if replacement text is not applicable.\n\treplacement_text: string;\n};\n\nexport default async function unpackLint(\n\ttext: string,\n\tlint: Lint,\n\tlinter: Linter,\n): Promise<UnpackedLint> {\n\tconst span = lint.span();\n\n\treturn {\n\t\tspan: { start: span.start, end: span.end },\n\t\tmessage_html: lint.message_html(),\n\t\tproblem_text: lint.get_problem_text(),\n\t\tlint_kind: lint.lint_kind() as LintKind,\n\t\tlint_kind_pretty: lint.lint_kind_pretty(),\n\t\tsuggestions: lint.suggestions().map((sug) => {\n\t\t\treturn { kind: sug.kind(), replacement_text: sug.get_replacement_text() };\n\t\t}),\n\t\tcontext_hash: (await linter.contextHash(text, lint)).toString(),\n\t\tsource: text,\n\t};\n}\n\nexport function applySuggestion(text: string, span: UnpackedSpan, sug: UnpackedSuggestion): string {\n\tswitch (sug.kind) {\n\t\tcase SuggestionKind.Remove:\n\t\t\treturn text.slice(0, span.start) + text.slice(span.end);\n\t\tcase SuggestionKind.Replace:\n\t\t\treturn text.slice(0, span.start) + sug.replacement_text + text.slice(span.end);\n\t\tcase SuggestionKind.InsertAfter:\n\t\t\treturn text.slice(0, span.end) + sug.replacement_text + text.slice(span.end);\n\t}\n}\n"
  },
  {
    "path": "packages/lint-framework/src/lint/utils.ts",
    "content": "import Color from 'colorjs.io';\n\n/** Get the text color that best contrasts with a background of the provided color. */\nexport function getContrastingTextColor(color: string): 'black' | 'white' {\n\tconst c = new Color(color);\n\tconst luminance = c.luminance;\n\n\tif (luminance > 0.5) {\n\t\treturn 'black';\n\t} else {\n\t\treturn 'white';\n\t}\n}\n"
  },
  {
    "path": "packages/lint-framework/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"ES2020\",\n\t\t\"useDefineForClassFields\": true,\n\t\t\"module\": \"ESNext\",\n\t\t\"lib\": [\"ES2020\", \"DOM\", \"DOM.Iterable\"],\n\t\t\"skipLibCheck\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t/* Bundler mode */\n\t\t\"moduleResolution\": \"bundler\",\n\t\t\"allowImportingTsExtensions\": true,\n\t\t\"isolatedModules\": true,\n\t\t\"moduleDetection\": \"force\",\n\t\t\"noEmit\": true,\n\t\t/* Linting */\n\t\t\"strict\": true,\n\t\t\"noUnusedLocals\": true,\n\t\t\"noUnusedParameters\": true,\n\t\t\"noFallthroughCasesInSwitch\": true\n\t},\n\t\"include\": [\"src\"]\n}\n"
  },
  {
    "path": "packages/lint-framework/vite.config.ts",
    "content": "import { resolve } from 'path';\nimport { defineConfig } from 'vite';\nimport dts from 'vite-plugin-dts';\n\nexport default defineConfig({\n\tbuild: {\n\t\tlib: {\n\t\t\tentry: resolve(__dirname, 'src/index.ts'),\n\t\t\tname: 'lintFramework',\n\t\t\tfileName: 'index',\n\t\t\tformats: ['es'],\n\t\t},\n\t\tminify: true,\n\t\trollupOptions: {\n\t\t\texternal: ['harper.js'],\n\t\t\toutput: {\n\t\t\t\tinlineDynamicImports: true,\n\t\t\t\tminifyInternalExports: true,\n\t\t\t},\n\t\t\ttreeshake: {\n\t\t\t\tmoduleSideEffects: false,\n\t\t\t\tpropertyReadSideEffects: false,\n\t\t\t},\n\t\t},\n\t},\n\tplugins: [\n\t\tdts({\n\t\t\trollupTypes: true,\n\t\t\ttsconfigPath: './tsconfig.json',\n\t\t}),\n\t],\n});\n"
  },
  {
    "path": "packages/obsidian-plugin/.gitignore",
    "content": "*.wasm\nmain.js\nnode_modules\nharper-obsidian-plugin.zip\nmanifest.json\ndata.json\n"
  },
  {
    "path": "packages/obsidian-plugin/README.md",
    "content": "# Obsidian Plugin\n\nThis directory contains the source code for the [Obsidian](https://obsidian.md/) plugin.\n\nThe full documentation can be found [here](https://github.com/automattic/harper-obsidian-plugin).\n\n## Building\n\nIn order to build the plugin, you may use `just` like so:\n\n```bash\njust build-obsidian\n```\n"
  },
  {
    "path": "packages/obsidian-plugin/package.json",
    "content": "{\n\t\"name\": \"obsidian-plugin\",\n\t\"private\": true,\n\t\"version\": \"1.12.0\",\n\t\"main\": \"main.js\",\n\t\"devDependencies\": {\n\t\t\"@playwright/test\": \"^1.58.0\",\n\t\t\"@rollup/plugin-node-resolve\": \"^16.0.0\",\n\t\t\"@types/lodash-es\": \"^4.17.12\",\n\t\t\"@vitest/browser\": \"^4.0.16\",\n\t\t\"@vitest/browser-playwright\": \"^4.0.16\",\n\t\t\"obsidian\": \"^1.7.2\",\n\t\t\"rollup-plugin-peer-deps-external\": \"^2.2.4\",\n\t\t\"rollup-plugin-svg-import\": \"^3.0.0\",\n\t\t\"vite\": \"^6.3.5\",\n\t\t\"vitest\": \"^4.0.16\"\n\t},\n\t\"scripts\": {\n\t\t\"build\": \"vite build -l warn\",\n\t\t\"dev\": \"vite build --watch\",\n\t\t\"test\": \"vitest run\"\n\t},\n\t\"peerDependencies\": {\n\t\t\"@codemirror/autocomplete\": \"^6.16.3\",\n\t\t\"@codemirror/collab\": \"^6.1.1\",\n\t\t\"@codemirror/commands\": \"^6.6.0\",\n\t\t\"@codemirror/language\": \"^6.10.2\",\n\t\t\"@codemirror/lint\": \"^6.8.1\",\n\t\t\"@codemirror/search\": \"^6.5.6\",\n\t\t\"@codemirror/state\": \"^6.4.1\",\n\t\t\"@codemirror/view\": \"^6.28.3\",\n\t\t\"@lezer/common\": \"^1.2.1\",\n\t\t\"@lezer/highlight\": \"^1.2.0\",\n\t\t\"@lezer/lr\": \"^1.4.1\"\n\t},\n\t\"dependencies\": {\n\t\t\"crelt\": \"^1.0.5\",\n\t\t\"harper.js\": \"workspace:*\",\n\t\t\"lodash-es\": \"^4.17.21\",\n\t\t\"minimatch\": \"^10.0.3\",\n\t\t\"tslib\": \"catalog:\"\n\t}\n}\n"
  },
  {
    "path": "packages/obsidian-plugin/src/HarperSettingTab.ts",
    "content": "import './index.js';\nimport { Dialect } from 'harper.js';\nimport { startCase } from 'lodash-es';\nimport type { ButtonComponent } from 'obsidian';\nimport { type App, Notice, PluginSettingTab, Setting } from 'obsidian';\nimport type HarperPlugin from './index.js';\nimport type State from './State.js';\nimport type { Settings } from './State.js';\nimport { linesToString, stringToLines } from './textUtils';\n\nconst LintSettingId = 'HarperLintSettings';\n\nexport class HarperSettingTab extends PluginSettingTab {\n\tprivate settings: Settings;\n\tprivate descriptionsHTML: Record<string, string>;\n\tprivate defaultLintConfig: Record<string, boolean>;\n\tprivate currentRuleSearchQuery = '';\n\tprivate plugin: HarperPlugin;\n\tprivate toggleAllButton?: ButtonComponent;\n\n\tprivate get state() {\n\t\treturn this.plugin.state;\n\t}\n\n\tconstructor(app: App, plugin: HarperPlugin) {\n\t\tsuper(app, plugin);\n\t\tthis.plugin = plugin;\n\t}\n\n\tupdate() {\n\t\tthis.updateDescriptions();\n\t\tthis.updateSettings();\n\t\tthis.updateDefaults();\n\t}\n\n\tupdateSettings() {\n\t\tthis.state.getSettings().then((v) => {\n\t\t\tthis.settings = v;\n\t\t\tthis.updateToggleAllRulesButton();\n\t\t});\n\t}\n\n\tupdateDescriptions() {\n\t\tthis.state.getDescriptionHTML().then((v) => {\n\t\t\tthis.descriptionsHTML = v;\n\t\t});\n\t}\n\n\tupdateDefaults() {\n\t\tthis.state.getDefaultLintConfig().then((v) => {\n\t\t\tthis.defaultLintConfig = v as unknown as Record<string, boolean>;\n\t\t\tthis.updateToggleAllRulesButton();\n\t\t});\n\t}\n\n\tdisplay(update = true) {\n\t\tif (update) {\n\t\t\tthis.update();\n\t\t\tthis.display(false);\n\t\t}\n\n\t\tconst { containerEl } = this;\n\t\tcontainerEl.empty();\n\n\t\tnew Setting(containerEl)\n\t\t\t.setName('Use Web Worker')\n\t\t\t.setDesc(\n\t\t\t\t'Whether to run the Harper engine in a separate thread. Improves stability and speed at the cost of memory.',\n\t\t\t)\n\t\t\t.addToggle((toggle) =>\n\t\t\t\ttoggle.setValue(this.settings.useWebWorker).onChange(async (value) => {\n\t\t\t\t\tthis.settings.useWebWorker = value;\n\t\t\t\t\tawait this.state.initializeFromSettings(this.settings);\n\t\t\t\t}),\n\t\t\t);\n\n\t\tnew Setting(containerEl).setName('English Dialect').addDropdown((dropdown) => {\n\t\t\tdropdown\n\t\t\t\t.addOption(Dialect.American.toString(), 'American')\n\t\t\t\t.addOption(Dialect.Canadian.toString(), 'Canadian')\n\t\t\t\t.addOption(Dialect.British.toString(), 'British')\n\t\t\t\t.addOption(Dialect.Australian.toString(), 'Australian')\n\t\t\t\t.addOption(Dialect.Indian.toString(), 'Indian')\n\t\t\t\t.setValue((this.settings.dialect ?? Dialect.American).toString())\n\t\t\t\t.onChange(async (value) => {\n\t\t\t\t\tconst dialect = Number.parseInt(value, 10);\n\t\t\t\t\tthis.settings.dialect = dialect;\n\t\t\t\t\tawait this.state.initializeFromSettings(this.settings);\n\t\t\t\t\tthis.plugin.updateStatusBar(dialect);\n\t\t\t\t});\n\t\t});\n\n\t\tnew Setting(containerEl)\n\t\t\t.setName('Activate Harper')\n\t\t\t.setDesc('Enable or disable Harper with this option.')\n\t\t\t.addToggle((toggle) =>\n\t\t\t\ttoggle.setValue(this.settings.lintEnabled).onChange(async (_value) => {\n\t\t\t\t\tthis.state.toggleAutoLint();\n\t\t\t\t\tthis.plugin.updateStatusBar();\n\t\t\t\t}),\n\t\t\t);\n\n\t\tnew Setting(containerEl)\n\t\t\t.setName('Mask')\n\t\t\t.setDesc(\n\t\t\t\t\"Hide certain text from Harper's pedantic gaze with a regular expression. Follows the standard Rust syntax.\",\n\t\t\t)\n\t\t\t.addTextArea((ta) =>\n\t\t\t\tta.setValue(this.settings.regexMask ?? '').onChange(async (value) => {\n\t\t\t\t\tthis.settings.regexMask = value;\n\t\t\t\t\tawait this.state.initializeFromSettings(this.settings);\n\t\t\t\t}),\n\t\t\t);\n\n\t\tnew Setting(containerEl)\n\t\t\t.setName('Personal Dictionary')\n\t\t\t.setDesc(\n\t\t\t\t'Make edits to your personal dictionary. Add names, places, or terms you use often. Each line should contain its own word.',\n\t\t\t)\n\t\t\t.addTextArea((ta) => {\n\t\t\t\tta.inputEl.cols = 20;\n\t\t\t\tta.setValue(linesToString(this.settings.userDictionary ?? [''])).onChange(async (v) => {\n\t\t\t\t\tconst dict = stringToLines(v);\n\t\t\t\t\tthis.settings.userDictionary = dict;\n\t\t\t\t\tawait this.state.initializeFromSettings(this.settings);\n\t\t\t\t});\n\t\t\t});\n\n\t\tnew Setting(containerEl)\n\t\t\t.setName('Ignored Files')\n\t\t\t.setDesc(\n\t\t\t\t'Instruct Harper to ignore certain files in your vault. Accepts glob matches (`folder/**`, etc.)',\n\t\t\t)\n\t\t\t.addTextArea((ta) => {\n\t\t\t\tta.inputEl.cols = 20;\n\t\t\t\tta.setValue(linesToString(this.settings.ignoredGlobs ?? [''])).onChange(async (v) => {\n\t\t\t\t\tconst lines = stringToLines(v);\n\t\t\t\t\tthis.settings.ignoredGlobs = lines;\n\t\t\t\t\tawait this.state.initializeFromSettings(this.settings);\n\t\t\t\t});\n\t\t\t});\n\n\t\tnew Setting(containerEl)\n\t\t\t.setName('Delay')\n\t\t\t.setDesc(\n\t\t\t\t'Set the delay (in milliseconds) before Harper checks your work after you make a change. Set to -1 for no delay.',\n\t\t\t)\n\t\t\t.addSlider((slider) => {\n\t\t\t\tslider\n\t\t\t\t\t.setDynamicTooltip()\n\t\t\t\t\t.setLimits(-1, 10000, 50)\n\t\t\t\t\t.setValue(this.settings.delay ?? -1)\n\t\t\t\t\t.onChange(async (value) => {\n\t\t\t\t\t\tthis.settings.delay = value;\n\t\t\t\t\t\tawait this.state.initializeFromSettings(this.settings);\n\t\t\t\t\t});\n\t\t\t});\n\n\t\tnew Setting(containerEl).setName('The Danger Zone').addButton((button) => {\n\t\t\tbutton\n\t\t\t\t.setButtonText('Forget Ignored Suggestions')\n\t\t\t\t.onClick(() => {\n\t\t\t\t\tthis.settings.ignoredLints = undefined;\n\t\t\t\t\tthis.state.initializeFromSettings(this.settings);\n\t\t\t\t})\n\t\t\t\t.setWarning();\n\t\t});\n\n\t\tnew Setting(containerEl)\n\t\t\t.setName('Rules')\n\t\t\t.setDesc('Search for a specific Harper rule.')\n\t\t\t.addSearch((search) => {\n\t\t\t\tsearch.setPlaceholder('Search for a rule...').onChange((query) => {\n\t\t\t\t\tthis.currentRuleSearchQuery = query;\n\t\t\t\t\tthis.renderLintSettingsToId(query, LintSettingId);\n\t\t\t\t});\n\t\t\t});\n\n\t\t// Global reset for rule overrides\n\t\tnew Setting(containerEl)\n\t\t\t.setName('Reset Rules to Defaults')\n\t\t\t.setDesc(\n\t\t\t\t'Restore all rule overrides back to their default values. This does not affect other settings.',\n\t\t\t)\n\t\t\t.addButton((button) => {\n\t\t\t\tbutton\n\t\t\t\t\t.setButtonText('Reset All to Defaults')\n\t\t\t\t\t.onClick(async () => {\n\t\t\t\t\t\tconst confirmed = confirm(\n\t\t\t\t\t\t\t'Reset all rule overrides to their defaults? This cannot be undone.',\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!confirmed) return;\n\t\t\t\t\t\tawait this.state.resetAllRulesToDefaults();\n\t\t\t\t\t\tthis.settings = await this.state.getSettings();\n\t\t\t\t\t\tthis.renderLintSettingsToId(this.currentRuleSearchQuery, LintSettingId);\n\t\t\t\t\t\tthis.updateToggleAllRulesButton();\n\t\t\t\t\t\tnew Notice('Harper rules reset to defaults');\n\t\t\t\t\t})\n\t\t\t\t\t.setWarning();\n\t\t\t});\n\n\t\t// Single bulk toggle button: If any rules are enabled, turn all off; otherwise turn all on.\n\t\tnew Setting(containerEl)\n\t\t\t.setName('Toggle All Rules')\n\t\t\t.setDesc(\n\t\t\t\t'Enable or disable all rules in bulk. Overrides individual rule settings until changed again.',\n\t\t\t)\n\t\t\t.addButton((button) => {\n\t\t\t\tthis.toggleAllButton = button;\n\t\t\t\tthis.updateToggleAllRulesButton();\n\t\t\t\tbutton.setWarning().onClick(async () => {\n\t\t\t\t\tconst anyEnabledNow = await this.state.areAnyRulesEnabled();\n\t\t\t\t\tconst action = anyEnabledNow ? 'Disable' : 'Enable';\n\t\t\t\t\tconst confirmed = confirm(`${action} all rules? This will override individual settings.`);\n\t\t\t\t\tif (!confirmed) return;\n\n\t\t\t\t\tawait this.state.setAllRulesEnabled(!anyEnabledNow);\n\t\t\t\t\tthis.settings = await this.state.getSettings();\n\t\t\t\t\tthis.renderLintSettingsToId(this.currentRuleSearchQuery, LintSettingId);\n\t\t\t\t\tthis.updateToggleAllRulesButton();\n\t\t\t\t\tnew Notice(`All Harper rules ${anyEnabledNow ? 'disabled' : 'enabled'}`);\n\t\t\t\t});\n\t\t\t});\n\n\t\tconst lintSettings = document.createElement('DIV');\n\t\tlintSettings.id = LintSettingId;\n\t\tcontainerEl.appendChild(lintSettings);\n\n\t\t// Ensure default config is loaded before initial render so values reflect defaults.\n\t\tthis.state.getDefaultLintConfig().then((v) => {\n\t\t\tthis.defaultLintConfig = v as unknown as Record<string, boolean>;\n\t\t\tthis.renderLintSettingsToId(this.currentRuleSearchQuery, lintSettings.id);\n\t\t});\n\t}\n\n\tprivate async updateToggleAllRulesButton() {\n\t\tif (!this.toggleAllButton) return;\n\t\tconst anyEnabled = await this.state.areAnyRulesEnabled();\n\t\tthis.toggleAllButton.setButtonText(anyEnabled ? 'Disable All Rules' : 'Enable All Rules');\n\t}\n\n\tasync renderLintSettingsToId(searchQuery: string, id: string) {\n\t\tconst el = document.getElementById(id);\n\t\tif (!el) return;\n\t\tconst effective = await this.state.getEffectiveLintConfig();\n\t\tthis.renderLintSettings(searchQuery, el, effective);\n\t}\n\n\tprivate renderLintSettings(\n\t\tsearchQuery: string,\n\t\tcontainerEl: HTMLElement,\n\t\teffectiveConfig: Record<string, boolean>,\n\t) {\n\t\tcontainerEl.innerHTML = '';\n\n\t\tconst queryLower = searchQuery.toLowerCase();\n\n\t\tfor (const setting of Object.keys(this.settings.lintSettings)) {\n\t\t\tconst value = this.settings.lintSettings[setting];\n\t\t\tconst descriptionHTML = this.descriptionsHTML[setting];\n\n\t\t\tif (\n\t\t\t\tsearchQuery !== '' &&\n\t\t\t\t!(\n\t\t\t\t\tdescriptionHTML?.toLowerCase().contains(queryLower) ||\n\t\t\t\t\tsetting.toLowerCase().contains(queryLower)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst fragment = document.createDocumentFragment();\n\t\t\tconst template = document.createElement('template');\n\t\t\ttemplate.innerHTML = descriptionHTML;\n\t\t\tfragment.appendChild(template.content);\n\n\t\t\t// Determine default for this rule (if available)\n\t\t\tconst defaultVal = this.defaultLintConfig?.[setting];\n\n\t\t\tnew Setting(containerEl)\n\t\t\t\t.setName(startCase(setting))\n\t\t\t\t.setDesc(fragment)\n\t\t\t\t.addDropdown((dropdown) => {\n\t\t\t\t\tconst effective: boolean | undefined = effectiveConfig[setting];\n\t\t\t\t\tconst usingDefault = value === null;\n\t\t\t\t\tconst onLabel = usingDefault && defaultVal === true ? 'On (default)' : 'On';\n\t\t\t\t\tconst offLabel = usingDefault && defaultVal === false ? 'Off (default)' : 'Off';\n\t\t\t\t\tdropdown\n\t\t\t\t\t\t.addOption('enable', onLabel)\n\t\t\t\t\t\t.addOption('disable', offLabel)\n\t\t\t\t\t\t.setValue(effective ? 'enable' : 'disable')\n\t\t\t\t\t\t.onChange(async (v) => {\n\t\t\t\t\t\t\tthis.settings.lintSettings[setting] = v === 'enable';\n\t\t\t\t\t\t\tawait this.state.initializeFromSettings(this.settings);\n\t\t\t\t\t\t\t// Re-render to update labels (remove \"(default)\" once overridden)\n\t\t\t\t\t\t\tthis.renderLintSettingsToId(this.currentRuleSearchQuery, LintSettingId);\n\t\t\t\t\t\t\tthis.updateToggleAllRulesButton();\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\t}\n}\n\n// Note: dropdowns present only On/Off. When using defaults (unset),\n// the matching option label includes \"(default)\".\n"
  },
  {
    "path": "packages/obsidian-plugin/src/State.test.ts",
    "content": "import { shuffle } from 'lodash-es';\nimport { expect, test } from 'vitest';\nimport State from './State';\n\nfunction randomString(length: number): string {\n\tconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\tlet result = '';\n\tfor (let i = 0; i < length; i++) {\n\t\tresult += chars.charAt(Math.floor(Math.random() * chars.length));\n\t}\n\treturn result;\n}\n\n/** Create an instance of the test class that doesn't use external persistence. */\nfunction createEphemeralState(): State {\n\treturn new State(\n\t\t(_) => Promise.resolve(),\n\t\t() => {},\n\t\tundefined,\n\t);\n}\n\ntest('Toggling linting should change extension array.', () => {\n\tconst state = createEphemeralState();\n\n\tconst editorExtensions = state.getCMEditorExtensions();\n\tstate.enableEditorLinter();\n\n\texpect(editorExtensions.length).toBe(1);\n\n\tstate.disableEditorLinter();\n\n\texpect(editorExtensions.length).toBe(0);\n});\n\ntest('Passing default settings back in should have a null net change.', async () => {\n\tconst state = createEphemeralState();\n\n\tconst initialSettings = await state.getSettings();\n\tawait state.initializeFromSettings(initialSettings);\n\tconst reinitSettings = await state.getSettings();\n\n\texpect(reinitSettings).toStrictEqual(initialSettings);\n});\n\ntest('Default settings should have null linter configs', async () => {\n\tconst state = createEphemeralState();\n\n\tconst defaultSettings = await state.getSettings();\n\n\tconst linterKeys = Object.keys(defaultSettings.lintSettings);\n\n\texpect(linterKeys.length).toBeGreaterThan(0);\n\n\tfor (const key of linterKeys) {\n\t\tconst setting = defaultSettings.lintSettings[key];\n\t\texpect(setting).toBeNull();\n\t}\n});\n\ntest('Lint keys are not undefined', async () => {\n\tconst state = createEphemeralState();\n\n\tconst defaultSettings = await state.getSettings();\n\n\texpect(defaultSettings.lintSettings.ThisKeyDoesNotExist).toBeUndefined();\n\texpect(defaultSettings.lintSettings.RepeatedWords).toBeNull();\n});\n\ntest('Lint keys can be enabled, then set to default.', async () => {\n\tconst state = createEphemeralState();\n\n\tlet settings = await state.getSettings();\n\n\tsettings.lintSettings.RepeatedWords = true;\n\tawait state.initializeFromSettings(settings);\n\tsettings = await state.getSettings();\n\texpect(settings.lintSettings.RepeatedWords).toBe(true);\n\n\tsettings.lintSettings.RepeatedWords = null;\n\tawait state.initializeFromSettings(settings);\n\tsettings = await state.getSettings();\n\texpect(settings.lintSettings.RepeatedWords).toBe(null);\n});\n\ntest('Lint settings and descriptions have the same keys', async () => {\n\tconst state = createEphemeralState();\n\n\tconst settings = await state.getSettings();\n\tconst descriptions = await state.getDescriptionHTML();\n\n\texpect(Object.keys(descriptions).sort()).toStrictEqual(Object.keys(settings.lintSettings).sort());\n});\n\ntest('Can be initialized with incomplete lint settings and retain default state.', async () => {\n\tconst state = createEphemeralState();\n\n\t// Get the default settings\n\tconst defaultSettings = await state.getSettings();\n\n\t// Pick just a few lint settings to keep.\n\tconst numberToKeep = 5;\n\tconst reducedLintSettings = Object.fromEntries(\n\t\tshuffle(Object.entries(defaultSettings.lintSettings)).slice(0, numberToKeep),\n\t);\n\texpect(Object.keys(reducedLintSettings).length).toBe(numberToKeep);\n\n\tawait state.initializeFromSettings({ ...defaultSettings, lintSettings: reducedLintSettings });\n\n\texpect(await state.getSettings()).toStrictEqual(defaultSettings);\n});\n\ntest('resetAllRulesToDefaults sets all overrides to null', async () => {\n\tconst state = createEphemeralState();\n\n\t// Start with all enabled, then reset\n\tlet settings = await state.getSettings();\n\tfor (const key of Object.keys(settings.lintSettings)) {\n\t\tsettings.lintSettings[key] = true;\n\t}\n\tawait state.initializeFromSettings(settings);\n\n\tawait state.resetAllRulesToDefaults();\n\tsettings = await state.getSettings();\n\tfor (const key of Object.keys(settings.lintSettings)) {\n\t\texpect(settings.lintSettings[key]).toBeNull();\n\t}\n});\n\ntest('setAllRulesEnabled toggles all rules on and off', async () => {\n\tconst state = createEphemeralState();\n\n\tawait state.setAllRulesEnabled(true);\n\tlet settings = await state.getSettings();\n\tfor (const key of Object.keys(settings.lintSettings)) {\n\t\texpect(settings.lintSettings[key]).toBe(true);\n\t}\n\n\tawait state.setAllRulesEnabled(false);\n\tsettings = await state.getSettings();\n\tfor (const key of Object.keys(settings.lintSettings)) {\n\t\texpect(settings.lintSettings[key]).toBe(false);\n\t}\n});\n\ntest('getEffectiveLintConfig matches defaults after reset', async () => {\n\tconst state = createEphemeralState();\n\tawait state.resetAllRulesToDefaults();\n\tconst effective = await state.getEffectiveLintConfig();\n\tconst defaults = (await state.getDefaultLintConfig()) as Record<string, boolean>;\n\texpect(Object.keys(effective).sort()).toStrictEqual(Object.keys(defaults).sort());\n\tfor (const k of Object.keys(defaults)) {\n\t\texpect(effective[k]).toBe(defaults[k]);\n\t}\n});\n\ntest('getEffectiveLintConfig reflects explicit overrides', async () => {\n\tconst state = createEphemeralState();\n\tconst settings = await state.getSettings();\n\tfor (const key of Object.keys(settings.lintSettings)) {\n\t\tsettings.lintSettings[key] = true;\n\t}\n\tawait state.initializeFromSettings(settings);\n\tconst effective = await state.getEffectiveLintConfig();\n\tfor (const k of Object.keys(effective)) {\n\t\texpect(effective[k]).toBe(true);\n\t}\n});\n\ntest('can persist dictionary words in settings', async () => {\n\tconst state = createEphemeralState();\n\tlet settings = await state.getSettings();\n\n\tconst testWord = 'ajhsbdajshdb';\n\tsettings.userDictionary = [testWord];\n\n\tawait state.initializeFromSettings(settings);\n\n\tsettings = await state.getSettings();\n\n\texpect(settings.userDictionary).toStrictEqual([testWord]);\n});\n\ntest('can persist dictionary order in settings', async () => {\n\tconst state = createEphemeralState();\n\tlet settings = await state.getSettings();\n\n\tconst testDictionary: string[] = [];\n\tfor (let i = 0; i < 200; i++) {\n\t\ttestDictionary.push(randomString(10));\n\t}\n\n\tsettings.userDictionary = testDictionary;\n\tawait state.initializeFromSettings(settings);\n\n\tsettings = await state.getSettings();\n\n\tconst roundOne = settings.userDictionary;\n\n\tawait state.initializeFromSettings(settings);\n\tsettings = await state.getSettings();\n\tconst roundTwo = settings.userDictionary;\n\n\texpect(roundOne).toStrictEqual(roundTwo);\n});\n\ntest('can overwrite dictionary words in settings', async () => {\n\tconst state = createEphemeralState();\n\tlet settings = await state.getSettings();\n\n\tconst testWord = 'ajhsbdajshdb';\n\tsettings.userDictionary = [testWord];\n\n\tawait state.initializeFromSettings(settings);\n\tsettings = await state.getSettings();\n\n\texpect(settings.userDictionary).toStrictEqual([testWord]);\n\n\tsettings.userDictionary = [];\n\n\tawait state.initializeFromSettings(settings);\n\tsettings = await state.getSettings();\n\n\texpect(settings.userDictionary).toStrictEqual([]);\n});\n"
  },
  {
    "path": "packages/obsidian-plugin/src/State.ts",
    "content": "import type { Extension, StateField } from '@codemirror/state';\nimport type { Lint, LintConfig, Linter, Suggestion } from 'harper.js';\nimport { binaryInlined, type Dialect, LocalLinter, SuggestionKind, WorkerLinter } from 'harper.js';\nimport { minimatch } from 'minimatch';\nimport type { MarkdownFileInfo, Workspace } from 'obsidian';\nimport {\n\ttype CustomReplacements,\n\tcloneCustomReplacements,\n\tgetCustomSuggestions,\n\tnormalizeCustomReplacements,\n} from './customSuggestions';\nimport { type Action, linter } from './lint';\nimport { lintKindClass } from './lintKindColor';\n\nexport type Settings = {\n\tignoredLints?: string;\n\tuseWebWorker: boolean;\n\tdialect?: Dialect;\n\tlintSettings: LintConfig;\n\tuserDictionary?: string[];\n\tdelay?: number;\n\tignoredGlobs?: string[];\n\tlintEnabled?: boolean;\n\tregexMask?: string;\n};\n\nconst DEFAULT_DELAY = -1;\n\n/** The centralized state for the entire Obsidian plugin.\n * Since it also contains most business logic, for testing purpose it should not interact with Obsidian directly.*/\nexport default class State {\n\tprivate harper: Linter;\n\tprivate saveData: (data: any) => Promise<void>;\n\tprivate delay: number;\n\tprivate workspace: Workspace;\n\tprivate onExtensionChange: () => void;\n\tprivate ignoredGlobs?: string[];\n\tprivate editorInfoField?: StateField<MarkdownFileInfo>;\n\tprivate lintEnabled?: boolean;\n\tprivate regexMask?: string;\n\n\t/** The CodeMirror extension objects that should be inserted by the host. */\n\tprivate editorExtensions: Extension[];\n\n\t/** @param saveDataCallback A callback which will be used to save data on disk.\n\t * @param onExtensionChange A callback this class will run when the extension array is modified.\n\t * @param editorViewField Needed to provide support for ignoring files based on path.*/\n\tconstructor(\n\t\tsaveDataCallback: (data: any) => Promise<void>,\n\t\tonExtensionChange: () => void,\n\t\t_editorInfoField?: StateField<MarkdownFileInfo>,\n\t) {\n\t\tthis.harper = new WorkerLinter({ binary: binaryInlined });\n\t\tthis.delay = DEFAULT_DELAY;\n\t\tthis.saveData = saveDataCallback;\n\t\tthis.onExtensionChange = onExtensionChange;\n\t\tthis.editorExtensions = [];\n\n\t\tthis.editorInfoField = _editorInfoField;\n\t}\n\n\tpublic async initializeFromSettings(settings: Settings | null) {\n\t\tif (settings == null) {\n\t\t\tsettings = {\n\t\t\t\tuseWebWorker: true,\n\t\t\t\tlintEnabled: true,\n\t\t\t\tlintSettings: {},\n\t\t\t};\n\t\t}\n\n\t\tconst defaultConfig = await this.harper.getDefaultLintConfig();\n\t\tfor (const key of Object.keys(defaultConfig)) {\n\t\t\tif (settings.lintSettings[key] == undefined) {\n\t\t\t\tsettings.lintSettings[key] = null;\n\t\t\t}\n\t\t}\n\n\t\tconst oldSettings = await this.getSettings();\n\n\t\tif (\n\t\t\tsettings.useWebWorker !== oldSettings.useWebWorker ||\n\t\t\tsettings.dialect !== oldSettings.dialect\n\t\t) {\n\t\t\tif (settings.useWebWorker) {\n\t\t\t\tthis.harper.dispose();\n\t\t\t\tthis.harper = new WorkerLinter({ binary: binaryInlined, dialect: settings.dialect });\n\t\t\t} else {\n\t\t\t\tthis.harper.dispose();\n\t\t\t\tthis.harper = new LocalLinter({ binary: binaryInlined, dialect: settings.dialect });\n\t\t\t}\n\t\t} else {\n\t\t\tawait this.harper.clearIgnoredLints();\n\t\t}\n\n\t\tif (settings.ignoredLints !== undefined) {\n\t\t\tawait this.harper.importIgnoredLints(settings.ignoredLints);\n\t\t}\n\n\t\tif (settings.userDictionary != null) {\n\t\t\tawait this.harper.clearWords();\n\t\t\tif (settings.userDictionary.length > 0) {\n\t\t\t\tawait this.harper.importWords(settings.userDictionary);\n\t\t\t}\n\t\t}\n\n\t\tawait this.harper.setLintConfig(settings.lintSettings);\n\t\tthis.harper.setup();\n\n\t\tthis.delay = settings.delay ?? DEFAULT_DELAY;\n\t\tthis.ignoredGlobs = settings.ignoredGlobs;\n\t\tthis.lintEnabled = settings.lintEnabled;\n\t\tthis.regexMask = settings.regexMask;\n\n\t\t// Reinitialize it.\n\t\tif (this.hasEditorLinter()) {\n\t\t\tthis.disableEditorLinter(false);\n\t\t\tthis.enableEditorLinter(false);\n\t\t}\n\n\t\tawait this.saveData(settings);\n\t}\n\n\t/** Construct the linter plugin that actually shows the errors. */\n\tprivate constructEditorLinter(): Extension {\n\t\treturn linter(\n\t\t\tasync (view) => {\n\t\t\t\tconst ignoredGlobs = this.ignoredGlobs ?? [];\n\n\t\t\t\tif (this.editorInfoField != null) {\n\t\t\t\t\tconst mdView = view.state.field(this.editorInfoField, false);\n\t\t\t\t\tconst file = mdView?.file;\n\n\t\t\t\t\tif (file != null) {\n\t\t\t\t\t\tconst path = file.path;\n\t\t\t\t\t\tfor (const glob of ignoredGlobs) {\n\t\t\t\t\t\t\tif (minimatch(path, glob)) {\n\t\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst text = view.state.doc.sliceString(-1);\n\t\t\t\tconst lints = await this.harper.organizedLints(text, { regex_mask: this.regexMask });\n\n\t\t\t\treturn Object.entries(lints).flatMap(([linterName, lints]) =>\n\t\t\t\t\tlints.map((lint) => {\n\t\t\t\t\t\tconst span = lint.span();\n\n\t\t\t\t\t\tconst actions = lint.suggestions().map((sug) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tkind: 'suggestion' as const,\n\t\t\t\t\t\t\t\tname:\n\t\t\t\t\t\t\t\t\tsug.kind() == SuggestionKind.Replace\n\t\t\t\t\t\t\t\t\t\t? sug.get_replacement_text()\n\t\t\t\t\t\t\t\t\t\t: suggestionToLabel(sug),\n\t\t\t\t\t\t\t\ttitle: suggestionToLabel(sug),\n\t\t\t\t\t\t\t\tapply: (view, from, to) => {\n\t\t\t\t\t\t\t\t\tif (sug.kind() === SuggestionKind.Remove) {\n\t\t\t\t\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\t\t\t\t\tchanges: {\n\t\t\t\t\t\t\t\t\t\t\t\tfrom,\n\t\t\t\t\t\t\t\t\t\t\t\tto,\n\t\t\t\t\t\t\t\t\t\t\t\tinsert: '',\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tselection: {\n\t\t\t\t\t\t\t\t\t\t\t\tanchor: from,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t} else if (sug.kind() === SuggestionKind.Replace) {\n\t\t\t\t\t\t\t\t\t\tconst replacement = sug.get_replacement_text();\n\t\t\t\t\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\t\t\t\t\tchanges: {\n\t\t\t\t\t\t\t\t\t\t\t\tfrom,\n\t\t\t\t\t\t\t\t\t\t\t\tto,\n\t\t\t\t\t\t\t\t\t\t\t\tinsert: replacement,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tselection: {\n\t\t\t\t\t\t\t\t\t\t\t\tanchor: from + replacement.length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t} else if (sug.kind() === SuggestionKind.InsertAfter) {\n\t\t\t\t\t\t\t\t\t\tconst replacement = sug.get_replacement_text();\n\t\t\t\t\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\t\t\t\t\tchanges: {\n\t\t\t\t\t\t\t\t\t\t\t\tfrom: to,\n\t\t\t\t\t\t\t\t\t\t\t\tto,\n\t\t\t\t\t\t\t\t\t\t\t\tinsert: replacement,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tselection: {\n\t\t\t\t\t\t\t\t\t\t\t\tanchor: to + replacement.length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (lint.lint_kind() === 'Spelling') {\n\t\t\t\t\t\t\tconst word = lint.get_problem_text();\n\n\t\t\t\t\t\t\tactions.push({\n\t\t\t\t\t\t\t\tkind: 'dictionary',\n\t\t\t\t\t\t\t\tname: '📖',\n\t\t\t\t\t\t\t\ttitle: `Add “${word}” to your dictionary`,\n\t\t\t\t\t\t\t\tapply: (view, _from, to) => {\n\t\t\t\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\t\t\t\tselection: {\n\t\t\t\t\t\t\t\t\t\t\tanchor: to,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tthis.harper.importWords([word]);\n\t\t\t\t\t\t\t\t\tthis.reinitialize();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tfrom: span.start,\n\t\t\t\t\t\t\tto: span.end,\n\t\t\t\t\t\t\tsource: linterName,\n\t\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t\t\tmarkClass: lintKindClass(lint.lint_kind()),\n\t\t\t\t\t\t\ttitle: lint.lint_kind_pretty(),\n\t\t\t\t\t\t\trenderMessage: (_view) => {\n\t\t\t\t\t\t\t\tconst node = document.createElement('template');\n\t\t\t\t\t\t\t\tnode.innerHTML = lint.message_html();\n\t\t\t\t\t\t\t\treturn node.content;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tignore: async () => {\n\t\t\t\t\t\t\t\tawait this.ignoreLints(text, [lint]);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdisable: async () => {\n\t\t\t\t\t\t\t\tconst lintConfig = await this.harper.getLintConfig();\n\t\t\t\t\t\t\t\tlintConfig[linterName] = false;\n\t\t\t\t\t\t\t\tawait this.harper.setLintConfig(lintConfig);\n\n\t\t\t\t\t\t\t\tawait this.reinitialize();\n\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\tactions,\n\t\t\t\t\t\t};\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t\t{\n\t\t\t\tdelay: this.delay,\n\t\t\t},\n\t\t);\n\t}\n\n\t/** Use this method instead of interacting with the linter directly. */\n\tpublic async ignoreLints(text: string, lints: Lint[]) {\n\t\tfor (const lint of lints) {\n\t\t\tawait this.harper.ignoreLint(text, lint);\n\t\t}\n\n\t\tawait this.reinitialize();\n\t}\n\n\tpublic async reinitialize() {\n\t\tconst settings = await this.getSettings();\n\t\tawait this.initializeFromSettings(settings);\n\t}\n\n\tpublic async getSettings(): Promise<Settings> {\n\t\tconst usingWebWorker = this.harper instanceof WorkerLinter;\n\n\t\tconst userDictionary = await this.harper.exportWords();\n\t\tuserDictionary.sort();\n\n\t\treturn {\n\t\t\tignoredLints: await this.harper.exportIgnoredLints(),\n\t\t\tuseWebWorker: usingWebWorker,\n\t\t\tlintSettings: await this.harper.getLintConfig(),\n\t\t\tuserDictionary,\n\t\t\tdialect: await this.harper.getDialect(),\n\t\t\tdelay: this.delay,\n\t\t\tignoredGlobs: this.ignoredGlobs,\n\t\t\tlintEnabled: this.lintEnabled,\n\t\t\tregexMask: this.regexMask,\n\t\t};\n\t}\n\n\t/**\n\t * Reset all lint rule overrides back to their defaults (null).\n\t * Persists and reinitializes state to apply changes.\n\t */\n\tpublic async resetAllRulesToDefaults(): Promise<void> {\n\t\tconst settings = await this.getSettings();\n\t\tfor (const key of Object.keys(settings.lintSettings)) {\n\t\t\tsettings.lintSettings[key] = null;\n\t\t}\n\t\tawait this.initializeFromSettings(settings);\n\t}\n\n\t/**\n\t * Enable or disable all lint rules in bulk by setting explicit values.\n\t * This overrides individual rule settings until changed again.\n\t */\n\tpublic async setAllRulesEnabled(enabled: boolean): Promise<void> {\n\t\tconst settings = await this.getSettings();\n\t\tfor (const key of Object.keys(settings.lintSettings)) {\n\t\t\tsettings.lintSettings[key] = enabled;\n\t\t}\n\t\tawait this.initializeFromSettings(settings);\n\t}\n\n\tpublic async getDescriptionHTML(): Promise<Record<string, string>> {\n\t\treturn await this.harper.getLintDescriptionsHTML();\n\t}\n\n\t/** Expose the default lint configuration for UI rendering. */\n\tpublic async getDefaultLintConfig(): Promise<LintConfig> {\n\t\treturn await this.harper.getDefaultLintConfig();\n\t}\n\n\t/** Effective config: merges defaults with overrides (null/undefined uses default). */\n\tpublic async getEffectiveLintConfig(): Promise<Record<string, boolean>> {\n\t\tconst defaults = (await this.getDefaultLintConfig()) as Record<string, boolean>;\n\t\tconst overrides = (await this.getSettings()).lintSettings as Record<\n\t\t\tstring,\n\t\t\tboolean | null | undefined\n\t\t>;\n\t\tconst effective: Record<string, boolean> = {};\n\t\tfor (const key of Object.keys(defaults)) {\n\t\t\tconst v = overrides[key];\n\t\t\teffective[key] = v === null || v === undefined ? defaults[key] : Boolean(v);\n\t\t}\n\t\treturn effective;\n\t}\n\n\t/** Determine if any rules are effectively enabled, considering defaults. */\n\tpublic async areAnyRulesEnabled(): Promise<boolean> {\n\t\tconst settings = await this.getSettings();\n\t\tconst defaults = await this.getDefaultLintConfig();\n\t\tfor (const key of Object.keys(settings.lintSettings)) {\n\t\t\tconst v = settings.lintSettings[key] as boolean | null | undefined;\n\t\t\tconst def = (defaults as Record<string, boolean | undefined>)[key];\n\t\t\tconst effective = v === null || v === undefined ? def : v;\n\t\t\tif (effective) return true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/** Get a reference to the CM editor extensions.\n\t * Do not mutate the returned value, except via methods on this class. */\n\tpublic getCMEditorExtensions(): Extension[] {\n\t\treturn this.editorExtensions;\n\t}\n\n\t/** Enables the editor linter by adding an extension to the editor extensions array. */\n\tpublic enableEditorLinter(reinit = true) {\n\t\tif (!this.hasEditorLinter()) {\n\t\t\tthis.editorExtensions.push(this.constructEditorLinter());\n\t\t\tthis.lintEnabled = true;\n\t\t\tthis.onExtensionChange();\n\t\t\tif (reinit) this.reinitialize();\n\t\t\tconsole.log('Enabled');\n\t\t}\n\t}\n\n\t/** Disables the editor linter by removing the extension from the editor extensions array. */\n\tpublic disableEditorLinter(reinit = true) {\n\t\twhile (this.hasEditorLinter()) {\n\t\t\tthis.editorExtensions.pop();\n\t\t}\n\t\tthis.lintEnabled = false;\n\t\tthis.onExtensionChange();\n\t\tif (reinit) this.reinitialize();\n\t\tconsole.log('Disabled');\n\t}\n\n\tpublic hasEditorLinter(): boolean {\n\t\treturn this.editorExtensions.length !== 0;\n\t}\n\n\tpublic toggleAutoLint() {\n\t\tif (this.hasEditorLinter()) {\n\t\t\tthis.disableEditorLinter();\n\t\t} else {\n\t\t\tthis.enableEditorLinter();\n\t\t}\n\t}\n\n\t/** Get a reference to the current linter.\n\t * It's best not to hold on to this type and to instead use this function again if another reference is needed. */\n\tpublic getLinter(): Linter {\n\t\treturn this.harper;\n\t}\n}\n\nfunction suggestionToLabel(sug: Suggestion) {\n\tif (sug.kind() === SuggestionKind.Remove) {\n\t\treturn 'Remove';\n\t} else if (sug.kind() === SuggestionKind.Replace) {\n\t\treturn `Replace with “${sug.get_replacement_text()}”`;\n\t} else if (sug.kind() === SuggestionKind.InsertAfter) {\n\t\treturn `Insert “${sug.get_replacement_text()}” after this.`;\n\t}\n}\n"
  },
  {
    "path": "packages/obsidian-plugin/src/index.ts",
    "content": "import type { EditorView } from '@codemirror/view';\nimport { Dialect } from 'harper.js';\nimport {\n\ttype App,\n\teditorInfoField,\n\tMarkdownView,\n\tMenu,\n\tNotice,\n\tPlugin,\n\ttype PluginManifest,\n} from 'obsidian';\nimport logoSvg from '../logo.svg?raw';\nimport logoSvgDisabled from '../logo-disabled.svg?raw';\nimport { HarperSettingTab } from './HarperSettingTab';\nimport {\n\taddWordToDictionaryFromVisibleTooltip,\n\tapplySuggestionFromVisibleTooltip,\n\tcanAddWordToDictionaryFromVisibleTooltip,\n\tcanApplySuggestionFromVisibleTooltip,\n\tcanDismissFocusedLintTooltip,\n\tcanIgnoreVisibleTooltipDiagnostic,\n\tcanNavigateDiagnostics,\n\tdismissFocusedLintTooltip,\n\tignoreVisibleTooltipDiagnostic,\n\tnavigateDiagnostic,\n} from './lint';\nimport State from './State';\n\nexport default class HarperPlugin extends Plugin {\n\tstate: State;\n\tprivate dialectSpan: HTMLSpanElement | null = null;\n\tprivate logo: HTMLSpanElement | null = null;\n\tprivate settings: HarperSettingTab | null = null;\n\n\tconstructor(app: App, manifest: PluginManifest) {\n\t\tsuper(app, manifest);\n\t}\n\n\tasync onload() {\n\t\tif (typeof Response === 'undefined') {\n\t\t\tnew Notice('Please update your Electron version before running Harper.', 0);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.app.workspace.onLayoutReady(async () => {\n\t\t\tthis.state = new State(\n\t\t\t\t(n) => this.saveData(n),\n\t\t\t\t() => this.app.workspace.updateOptions(),\n\t\t\t\teditorInfoField,\n\t\t\t);\n\n\t\t\tthis.registerEditorExtension(this.state.getCMEditorExtensions());\n\t\t\tawait this.reloadSettingsFromDisk();\n\t\t\tthis.setupStatusBar();\n\t\t});\n\n\t\tthis.settings = new HarperSettingTab(this.app, this);\n\t\tthis.addSettingTab(this.settings);\n\n\t\tthis.setupCommands();\n\t}\n\n\tasync onExternalSettingsChange() {\n\t\tawait this.reloadSettingsFromDisk();\n\t}\n\n\tprivate async reloadSettingsFromDisk() {\n\t\tconst data = await this.loadData();\n\t\tif (this.state == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.state.initializeFromSettings(data);\n\n\t\tif (!(data?.lintEnabled ?? true)) {\n\t\t\tthis.state.disableEditorLinter(false);\n\t\t} else {\n\t\t\tthis.state.enableEditorLinter(false);\n\t\t}\n\n\t\tthis.settings?.update();\n\t\tthis.updateStatusBar(data?.dialect ?? Dialect.American);\n\t}\n\n\tprivate getDialectStatus(dialectNum: Dialect): string {\n\t\tconst code = {\n\t\t\tAmerican: 'US',\n\t\t\tBritish: 'GB',\n\t\t\tAustralian: 'AU',\n\t\t\tCanadian: 'CA',\n\t\t}[Dialect[dialectNum]];\n\t\tif (code === undefined) {\n\t\t\treturn '';\n\t\t}\n\t\treturn `${code\n\t\t\t.split('')\n\t\t\t.map((c) => String.fromCodePoint(c.charCodeAt(0) + 127397))\n\t\t\t.join('')}${code}`;\n\t}\n\n\tprivate setupStatusBar() {\n\t\tconst statusBarItem: HTMLElement = this.addStatusBarItem();\n\t\tstatusBarItem.className += ' mod-clickable';\n\n\t\tconst button = document.createElement('span');\n\t\tbutton.style.display = 'flex';\n\t\tbutton.style.alignItems = 'center';\n\n\t\tconst logo = document.createElement('span');\n\t\tlogo.style.width = '24px';\n\t\tlogo.innerHTML = this.state.hasEditorLinter() ? logoSvg : logoSvgDisabled;\n\t\tthis.logo = logo;\n\t\tbutton.appendChild(logo);\n\n\t\tconst dialect = document.createElement('span');\n\t\tthis.dialectSpan = dialect;\n\n\t\tthis.state.getSettings().then((settings) => {\n\t\t\tconst dialectNum = settings.dialect ?? Dialect.American;\n\t\t\tthis.updateStatusBar(dialectNum);\n\t\t\tbutton.appendChild(dialect);\n\t\t});\n\n\t\tbutton.addEventListener('click', (event) => {\n\t\t\tconst menu = new Menu();\n\n\t\t\tmenu.addItem((item) =>\n\t\t\t\titem\n\t\t\t\t\t.setTitle(`${this.state.hasEditorLinter() ? 'Disable' : 'Enable'} automatic checking`)\n\t\t\t\t\t.setIcon('documents')\n\t\t\t\t\t.onClick(() => {\n\t\t\t\t\t\tthis.toggleAutoLint();\n\t\t\t\t\t}),\n\t\t\t);\n\n\t\t\tmenu.addItem((item) =>\n\t\t\t\titem\n\t\t\t\t\t.setTitle('Ignore all errors in file')\n\t\t\t\t\t.setIcon('eraser')\n\t\t\t\t\t.onClick(() => {\n\t\t\t\t\t\tthis.doIgnoreAllFlow();\n\t\t\t\t\t}),\n\t\t\t);\n\n\t\t\tmenu.showAtMouseEvent(event);\n\t\t});\n\n\t\tstatusBarItem.appendChild(button);\n\t}\n\n\t/** Preferred over directly calling `this.state.toggleAutoLint()` */\n\tprivate toggleAutoLint() {\n\t\tthis.state.toggleAutoLint();\n\t\tthis.updateStatusBar();\n\t}\n\n\tprivate setupCommands() {\n\t\tthis.addCommand({\n\t\t\tid: 'harper-toggle-auto-lint',\n\t\t\tname: 'Toggle automatic grammar checking',\n\t\t\tcallback: () => {\n\t\t\t\tthis.toggleAutoLint();\n\t\t\t},\n\t\t});\n\n\t\tthis.addCommand({\n\t\t\tid: 'harper-ignore-all-in-buffer',\n\t\t\tname: 'Ignore all errors in the open file',\n\t\t\tcallback: async () => {\n\t\t\t\tawait this.doIgnoreAllFlow();\n\t\t\t},\n\t\t});\n\n\t\tthis.addCommand({\n\t\t\tid: 'harper-jump-to-next-suggestion',\n\t\t\tname: 'Jump to next suggestion',\n\t\t\tcheckCallback: (checking) => {\n\t\t\t\tconst editorView = this.getActiveEditorView();\n\t\t\t\tif (!editorView) return false;\n\t\t\t\tif (checking) return canNavigateDiagnostics(editorView);\n\t\t\t\treturn navigateDiagnostic(editorView, 'next');\n\t\t\t},\n\t\t});\n\n\t\tthis.addCommand({\n\t\t\tid: 'harper-jump-to-previous-suggestion',\n\t\t\tname: 'Jump to previous suggestion',\n\t\t\tcheckCallback: (checking) => {\n\t\t\t\tconst editorView = this.getActiveEditorView();\n\t\t\t\tif (!editorView) return false;\n\t\t\t\tif (checking) return canNavigateDiagnostics(editorView);\n\t\t\t\treturn navigateDiagnostic(editorView, 'previous');\n\t\t\t},\n\t\t});\n\n\t\tthis.addCommand(this.getApplySuggestionCommand(1));\n\t\tthis.addCommand(this.getApplySuggestionCommand(2));\n\t\tthis.addCommand(this.getApplySuggestionCommand(3));\n\n\t\tthis.addCommand({\n\t\t\tid: 'harper-add-word-to-dictionary',\n\t\t\tname: 'Add current word to dictionary',\n\t\t\tcheckCallback: (checking) => {\n\t\t\t\tconst editorView = this.getActiveEditorView();\n\t\t\t\tif (!editorView) return false;\n\t\t\t\tif (checking) return canAddWordToDictionaryFromVisibleTooltip(editorView);\n\t\t\t\treturn addWordToDictionaryFromVisibleTooltip(editorView);\n\t\t\t},\n\t\t});\n\n\t\tthis.addCommand({\n\t\t\tid: 'harper-ignore-focused-diagnostic',\n\t\t\tname: 'Ignore focused diagnostic',\n\t\t\thotkeys: [],\n\t\t\tcheckCallback: (checking) => {\n\t\t\t\tconst editorView = this.getActiveEditorView();\n\t\t\t\tif (!editorView) return false;\n\t\t\t\tif (checking) return canIgnoreVisibleTooltipDiagnostic(editorView);\n\t\t\t\treturn ignoreVisibleTooltipDiagnostic(editorView);\n\t\t\t},\n\t\t});\n\n\t\tthis.addCommand({\n\t\t\tid: 'harper-dismiss-focused-tooltip',\n\t\t\tname: 'Dismiss focused suggestion tooltip',\n\t\t\tcheckCallback: (checking) => {\n\t\t\t\tconst editorView = this.getActiveEditorView();\n\t\t\t\tif (!editorView) return false;\n\t\t\t\tif (checking) return canDismissFocusedLintTooltip(editorView);\n\t\t\t\treturn dismissFocusedLintTooltip(editorView);\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate getApplySuggestionCommand(n: number) {\n\t\treturn {\n\t\t\tid: `harper-apply-suggestion-${n}`,\n\t\t\tname: `Apply suggestion #${n}`,\n\t\t\tcheckCallback: (checking: boolean) => {\n\t\t\t\tconst editorView = this.getActiveEditorView();\n\t\t\t\tif (!editorView) return false;\n\t\t\t\tif (checking) return canApplySuggestionFromVisibleTooltip(editorView, n);\n\t\t\t\treturn applySuggestionFromVisibleTooltip(editorView, n);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate getActiveEditorView(): EditorView | null {\n\t\tconst view = this.app.workspace.getActiveViewOfType(MarkdownView);\n\t\tif (!view) return null;\n\t\treturn (view.editor as any).cm as EditorView;\n\t}\n\n\t/** Trigger the flow for ignoring all files in a document, including a confirmation modal. */\n\tpublic async doIgnoreAllFlow() {\n\t\tconst file = this.app.workspace.getActiveFile();\n\t\tif (file != null) {\n\t\t\tconst text = await this.app.vault.read(file);\n\n\t\t\tconst lints = await this.state.getLinter().lint(text);\n\t\t\tconst confirmation = confirm(\n\t\t\t\t`Are you sure you want to ignore ${lints.length} errors from Harper?`,\n\t\t\t);\n\n\t\t\tif (confirmation) {\n\t\t\t\tawait this.state.ignoreLints(text, lints);\n\t\t\t}\n\t\t} else {\n\t\t\tnew Notice('No file currently open.');\n\t\t}\n\t}\n\n\tpublic updateStatusBar(dialect?: Dialect) {\n\t\tif (this.logo != null) {\n\t\t\tthis.logo.innerHTML = this.state.hasEditorLinter() ? logoSvg : logoSvgDisabled;\n\t\t}\n\t\tif (typeof dialect !== 'undefined') {\n\t\t\tif (this.dialectSpan != null) {\n\t\t\t\tthis.dialectSpan.innerHTML = this.getDialectStatus(dialect);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/obsidian-plugin/src/lint.test.ts",
    "content": "import type { EditorView } from '@codemirror/view';\nimport { expect, test } from 'vitest';\nimport { canApplySuggestionFromVisibleTooltip } from './lint';\n\ntest('canApplySuggestionFromVisibleTooltip handles null tooltip entries', () => {\n\tconst mockView = {\n\t\tstate: {\n\t\t\tfield: () => ({\n\t\t\t\tcommandTooltip: null,\n\t\t\t\tdiagnostics: {\n\t\t\t\t\tbetween: () => {},\n\t\t\t\t},\n\t\t\t}),\n\t\t\tfacet: () => [null],\n\t\t},\n\t} as unknown as EditorView;\n\n\texpect(() => canApplySuggestionFromVisibleTooltip(mockView, 1)).not.toThrow();\n\texpect(canApplySuggestionFromVisibleTooltip(mockView, 1)).toBe(false);\n});\n"
  },
  {
    "path": "packages/obsidian-plugin/src/lint.ts",
    "content": "import {\n\tcombineConfig,\n\ttype EditorState,\n\ttype Extension,\n\tFacet,\n\tRangeSet,\n\tStateEffect,\n\tStateField,\n\ttype Transaction,\n\ttype TransactionSpec,\n} from '@codemirror/state';\nimport {\n\tDecoration,\n\ttype DecorationSet,\n\tEditorView,\n\thoverTooltip,\n\tlogException,\n\tshowTooltip,\n\ttype Tooltip,\n\ttooltips,\n\tViewPlugin,\n\ttype ViewUpdate,\n\tWidgetType,\n} from '@codemirror/view';\nimport elt from 'crelt';\nimport { LINT_KIND_COLORS } from './lintKindColor';\n\ntype Severity = 'hint' | 'info' | 'warning' | 'error';\n\n/// Describes a problem or hint for a piece of code.\nexport interface Diagnostic {\n\t/// The start position of the relevant text.\n\tfrom: number;\n\t/// The end position. May be equal to `from`, though actually\n\t/// covering text is preferable.\n\tto: number;\n\t/// The severity of the problem. This will influence how it is\n\t/// displayed.\n\tseverity: Severity;\n\t/// When given, add an extra CSS class to parts of the code that\n\t/// this diagnostic applies to.\n\tmarkClass?: string;\n\t/// An optional source string indicating where the diagnostic is\n\t/// coming from. You can put the name of your linter here, if\n\t/// applicable.\n\tsource?: string;\n\ttitle?: string;\n\t/// The message associated with this diagnostic.\n\tmessage: string;\n\t/// An optional custom rendering function that displays the message\n\t/// as a DOM node.\n\trenderMessage?: (view: EditorView) => Node;\n\t/// An optional array of actions that can be taken on this\n\t/// diagnostic.\n\tactions?: readonly Action[];\n\t/// A callback for when the user selects to \"ignore\" the diagnostic.\n\tignore?: () => void;\n\t/// A callback for when the user selects to \"disable\" the source of the diagnostic.\n\tdisable?: () => void;\n}\n\n/// An action associated with a diagnostic.\nexport interface Action {\n\t/// The label to show to the user. Should be relatively short.\n\tname: string;\n\t/// The value to pass the title property of the button.\n\ttitle: string;\n\t/// Optional kind marker for keyboard command routing.\n\tkind?: 'suggestion' | 'dictionary';\n\t/// The function to call when the user activates this action. Is\n\t/// given the diagnostic's _current_ position, which may have\n\t/// changed since the creation of the diagnostic, due to editing.\n\tapply: (view: EditorView, from: number, to: number) => void;\n}\n\ntype DiagnosticFilter = (diagnostics: readonly Diagnostic[], state: EditorState) => Diagnostic[];\n\ninterface LintConfig {\n\t/// Time to wait (in milliseconds) after a change before running\n\t/// the linter. Defaults to 750ms.\n\tdelay?: number;\n\t/// Optional predicate that can be used to indicate when diagnostics\n\t/// need to be recomputed. Linting is always re-done on document\n\t/// changes.\n\tneedsRefresh?: null | ((update: ViewUpdate) => boolean);\n\t/// Optional filter to determine which diagnostics produce markers\n\t/// in the content.\n\tmarkerFilter?: null | DiagnosticFilter;\n\t/// Filter applied to a set of diagnostics shown in a tooltip. No\n\t/// tooltip will appear if the empty set is returned.\n\ttooltipFilter?: null | DiagnosticFilter;\n\t/// Can be used to control what kind of transactions cause lint\n\t/// hover tooltips associated with the given document range to be\n\t/// hidden. By default any transaction that changes the line\n\t/// around the range will hide it. Returning null falls back to this\n\t/// behavior.\n\thideOn?: (tr: Transaction, from: number, to: number) => boolean | null;\n\t/// When enabled (defaults to off), this will cause the lint panel\n\t/// to automatically open when diagnostics are found, and close when\n\t/// all diagnostics are resolved or removed.\n\tautoPanel?: boolean;\n}\n\nclass SelectedDiagnostic {\n\tconstructor(\n\t\treadonly from: number,\n\t\treadonly to: number,\n\t\treadonly diagnostic: Diagnostic,\n\t) {}\n}\n\nclass LintState {\n\tconstructor(\n\t\treadonly diagnostics: DecorationSet,\n\t\treadonly selected: SelectedDiagnostic | null,\n\t\treadonly commandTooltip: SelectedDiagnostic | null,\n\t) {}\n\n\tstatic init(diagnostics: readonly Diagnostic[], state: EditorState) {\n\t\t// Filter the list of diagnostics for which to create markers\n\t\tlet markedDiagnostics = diagnostics;\n\t\tconst diagnosticFilter = state.facet(lintConfig).markerFilter;\n\t\tif (diagnosticFilter) markedDiagnostics = diagnosticFilter(markedDiagnostics, state);\n\n\t\tconst ranges = Decoration.set(\n\t\t\tmarkedDiagnostics.map((d: Diagnostic) => {\n\t\t\t\t// For zero-length ranges or ranges covering only a line break, create a widget\n\t\t\t\treturn d.from == d.to || (d.from == d.to - 1 && state.doc.lineAt(d.from).to == d.from)\n\t\t\t\t\t? Decoration.widget({\n\t\t\t\t\t\t\twidget: new DiagnosticWidget(d),\n\t\t\t\t\t\t\tdiagnostic: d,\n\t\t\t\t\t\t}).range(d.from)\n\t\t\t\t\t: Decoration.mark({\n\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\tclass: `cm-lintRange cm-lintRange-${d.severity}${d.markClass ? ` ${d.markClass}` : ''}`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdiagnostic: d,\n\t\t\t\t\t\t}).range(d.from, d.to);\n\t\t\t}),\n\t\t\ttrue,\n\t\t);\n\t\treturn new LintState(ranges, null, null);\n\t}\n}\n\nfunction findDiagnostic(\n\tdiagnostics: DecorationSet,\n\tdiagnostic: Diagnostic | null = null,\n\tafter = 0,\n): SelectedDiagnostic | null {\n\tlet found: SelectedDiagnostic | null = null;\n\tdiagnostics.between(after, 1e9, (from, to, { spec }) => {\n\t\tif (diagnostic && spec.diagnostic != diagnostic) return;\n\t\tfound = new SelectedDiagnostic(from, to, spec.diagnostic);\n\t\treturn false;\n\t});\n\treturn found;\n}\n\ninterface HarperTooltipMeta {\n\tharperLint?: true;\n\tharperSource?: 'hover' | 'keyboard';\n\tharperDiagnostics?: readonly Diagnostic[];\n\tharperDiagnostic?: Diagnostic;\n}\n\nfunction hideTooltip(tr: Transaction, tooltip: Tooltip) {\n\tconst from = tooltip.pos;\n\tconst to = tooltip.end || from;\n\tif (tr.effects.some((e) => e.is(setCommandTooltipEffect))) return true;\n\tconst result = tr.state.facet(lintConfig).hideOn(tr, from, to);\n\tif (result != null) return result;\n\tconst line = tr.startState.doc.lineAt(tooltip.pos);\n\treturn !!(\n\t\ttr.effects.some((e) => e.is(setDiagnosticsEffect)) ||\n\t\ttr.changes.touchesRange(line.from, Math.max(line.to, to))\n\t);\n}\n\nfunction maybeEnableLint(state: EditorState, effects: readonly StateEffect<unknown>[]) {\n\treturn state.field(lintState, false)\n\t\t? effects\n\t\t: effects.concat(StateEffect.appendConfig.of(lintExtensions));\n}\n\n/// Returns a transaction spec which updates the current set of\n/// diagnostics, and enables the lint extension if if wasn't already\n/// active.\nexport function setDiagnostics(\n\tstate: EditorState,\n\tdiagnostics: readonly Diagnostic[],\n): TransactionSpec {\n\treturn {\n\t\teffects: maybeEnableLint(state, [setDiagnosticsEffect.of(diagnostics)]),\n\t};\n}\n\n/// The state effect that updates the set of active diagnostics. Can\n/// be useful when writing an extension that needs to track these.\nexport const setDiagnosticsEffect = StateEffect.define<readonly Diagnostic[]>();\n\nconst movePanelSelection = StateEffect.define<SelectedDiagnostic | null>();\nconst setCommandTooltipEffect = StateEffect.define<SelectedDiagnostic | null>();\n\nconst lintState = StateField.define<LintState>({\n\tcreate() {\n\t\treturn new LintState(Decoration.none, null, null);\n\t},\n\tupdate(value, tr) {\n\t\tif (tr.docChanged && value.diagnostics.size) {\n\t\t\tconst mapped = value.diagnostics.map(tr.changes);\n\t\t\tvalue = new LintState(mapped, null, null);\n\t\t}\n\n\t\tfor (const effect of tr.effects) {\n\t\t\tif (effect.is(setDiagnosticsEffect)) {\n\t\t\t\tvalue = LintState.init(effect.value, tr.state);\n\t\t\t} else if (effect.is(movePanelSelection)) {\n\t\t\t\tvalue = new LintState(value.diagnostics, effect.value, value.commandTooltip);\n\t\t\t} else if (effect.is(setCommandTooltipEffect)) {\n\t\t\t\tvalue = new LintState(value.diagnostics, value.selected, effect.value);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tprovide: (f) => [EditorView.decorations.from(f, (s) => s.diagnostics)],\n});\n\nfunction createLintTooltip(\n\tstate: EditorState,\n\tdiagnostics: readonly Diagnostic[],\n\tfrom: number,\n\tto: number,\n\tsource: 'hover' | 'keyboard',\n): Tooltip {\n\treturn {\n\t\tpos: from,\n\t\tend: to,\n\t\tabove: state.doc.lineAt(from).to < to,\n\t\tstrictSide: false,\n\t\tcreate(view) {\n\t\t\treturn { dom: diagnosticsTooltip(view, diagnostics) };\n\t\t},\n\t\tharperLint: true,\n\t\tharperSource: source,\n\t\tharperDiagnostics: diagnostics,\n\t\tharperDiagnostic: diagnostics[0],\n\t} as Tooltip & HarperTooltipMeta;\n}\n\nfunction lintTooltip(view: EditorView, pos: number, side: -1 | 1) {\n\tconst { diagnostics, commandTooltip } = view.state.field(lintState);\n\tlet found: Diagnostic[] = [];\n\tlet stackStart = 2e8;\n\tlet stackEnd = 0;\n\tdiagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {\n\t\tif (\n\t\t\tpos >= from &&\n\t\t\tpos <= to &&\n\t\t\t(from == to || ((pos > from || side > 0) && (pos < to || side < 0)))\n\t\t) {\n\t\t\tfound.push(spec.diagnostic);\n\t\t\tstackStart = Math.min(from, stackStart);\n\t\t\tstackEnd = Math.max(to, stackEnd);\n\t\t}\n\t});\n\n\tconst diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;\n\tif (diagnosticFilter) found = diagnosticFilter(found, view.state);\n\n\tif (commandTooltip) {\n\t\tconst hoveringAnotherDiagnostic = found.some((d) => d !== commandTooltip.diagnostic);\n\t\tif (hoveringAnotherDiagnostic) {\n\t\t\tview.dispatch({\n\t\t\t\teffects: [setCommandTooltipEffect.of(null), movePanelSelection.of(null)],\n\t\t\t});\n\t\t}\n\t\treturn null;\n\t}\n\n\tif (!found.length) return null;\n\n\treturn createLintTooltip(view.state, found, stackStart, stackEnd, 'hover');\n}\n\nfunction diagnosticsTooltip(view: EditorView, diagnostics: readonly Diagnostic[]) {\n\treturn elt(\n\t\t'ul',\n\t\t{ class: 'cm-tooltip-lint' },\n\t\tdiagnostics.map((d) => renderDiagnostic(view, d, false)),\n\t);\n}\n\n/// The type of a function that produces diagnostics.\nexport type LintSource = (\n\tview: EditorView,\n) => readonly Diagnostic[] | Promise<readonly Diagnostic[]>;\n\nconst lintPlugin = ViewPlugin.fromClass(\n\tclass {\n\t\tlintTime: number;\n\t\ttimeout = -1;\n\t\tset = true;\n\n\t\tconstructor(readonly view: EditorView) {\n\t\t\tconst { delay } = view.state.facet(lintConfig);\n\t\t\tthis.lintTime = Date.now() + delay;\n\t\t\tthis.run = this.run.bind(this);\n\t\t\tthis.timeout = setTimeout(this.run, delay);\n\t\t}\n\n\t\trun() {\n\t\t\tclearTimeout(this.timeout);\n\t\t\tconst now = Date.now();\n\t\t\tif (now < this.lintTime - 10) {\n\t\t\t\tthis.timeout = setTimeout(this.run, this.lintTime - now);\n\t\t\t} else {\n\t\t\t\tthis.set = false;\n\t\t\t\tconst { state } = this.view;\n\t\t\t\tconst { sources } = state.facet(lintConfig);\n\t\t\t\tif (sources.length)\n\t\t\t\t\tPromise.all(sources.map((source) => Promise.resolve(source(this.view)))).then(\n\t\t\t\t\t\t(annotations) => {\n\t\t\t\t\t\t\tconst all = annotations.reduce((a, b) => a.concat(b));\n\t\t\t\t\t\t\tif (this.view.state.doc == state.doc)\n\t\t\t\t\t\t\t\tthis.view.dispatch(setDiagnostics(this.view.state, all));\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(error) => {\n\t\t\t\t\t\t\tlogException(this.view.state, error);\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tupdate(update: ViewUpdate) {\n\t\t\tconst config = update.state.facet(lintConfig);\n\t\t\tif (\n\t\t\t\tupdate.docChanged ||\n\t\t\t\tconfig != update.startState.facet(lintConfig) ||\n\t\t\t\tconfig.needsRefresh?.(update)\n\t\t\t) {\n\t\t\t\tthis.lintTime = Date.now() + config.delay;\n\t\t\t\tif (!this.set) {\n\t\t\t\t\tthis.set = true;\n\t\t\t\t\tthis.timeout = setTimeout(this.run, config.delay);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tforce() {\n\t\t\tif (this.set) {\n\t\t\t\tthis.lintTime = Date.now();\n\t\t\t\tthis.run();\n\t\t\t}\n\t\t}\n\n\t\tdestroy() {\n\t\t\tclearTimeout(this.timeout);\n\t\t}\n\t},\n);\n\nconst lintConfig = Facet.define<\n\t{ source: LintSource | null; config: LintConfig },\n\tRequired<LintConfig> & { sources: readonly LintSource[] }\n>({\n\tcombine(input) {\n\t\treturn {\n\t\t\tsources: input.map((i) => i.source).filter((x) => x != null) as readonly LintSource[],\n\t\t\t...combineConfig(\n\t\t\t\tinput.map((i) => i.config),\n\t\t\t\t{\n\t\t\t\t\tdelay: 750,\n\t\t\t\t\tmarkerFilter: null,\n\t\t\t\t\ttooltipFilter: null,\n\t\t\t\t\tneedsRefresh: null,\n\t\t\t\t\thideOn: () => null,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tneedsRefresh: (a, b) => (!a ? b : !b ? a : (u) => a(u) || b(u)),\n\t\t\t\t},\n\t\t\t),\n\t\t};\n\t},\n});\n\n/// Given a diagnostic source, this function returns an extension that\n/// enables linting with that source. It will be called whenever the\n/// editor is idle (after its content changed). If `null` is given as\n/// source, this only configures the lint extension.\nexport function linter(source: LintSource | null, config: LintConfig = {}): Extension {\n\treturn [lintConfig.of({ source, config }), lintPlugin, lintExtensions];\n}\n\n/// Forces any linters [configured](#lint.linter) to run when the\n/// editor is idle to run right away.\nexport function forceLinting(view: EditorView) {\n\tconst plugin = view.plugin(lintPlugin);\n\tif (plugin) plugin.force();\n}\n\nfunction assignKeys(actions: readonly Action[] | undefined) {\n\tconst assigned: string[] = [];\n\tif (actions)\n\t\t// biome-ignore lint/suspicious/noLabelVar: reasons\n\t\tactions: for (const { name } of actions) {\n\t\t\tfor (let i = 0; i < name.length; i++) {\n\t\t\t\tconst ch = name[i];\n\t\t\t\tif (/[a-zA-Z]/.test(ch) && !assigned.some((c) => c.toLowerCase() == ch.toLowerCase())) {\n\t\t\t\t\tassigned.push(ch);\n\t\t\t\t\tcontinue actions;\n\t\t\t\t}\n\t\t\t}\n\t\t\tassigned.push('');\n\t\t}\n\treturn assigned;\n}\n\nfunction renderDiagnostic(view: EditorView, diagnostic: Diagnostic, inPanel: boolean) {\n\tconst keys = inPanel ? assignKeys(diagnostic.actions) : [];\n\treturn elt(\n\t\t'li',\n\t\t{\n\t\t\tclass: `cm-diagnostic cm-diagnostic-${diagnostic.severity}${diagnostic.markClass ? ` ${diagnostic.markClass}` : ''}`,\n\t\t},\n\t\telt('span', { class: 'cm-diagnosticTitle' }, diagnostic.title),\n\t\telt(\n\t\t\t'span',\n\t\t\t{ class: 'cm-diagnosticText' },\n\t\t\tdiagnostic.renderMessage ? diagnostic.renderMessage(view) : diagnostic.message,\n\t\t),\n\t\telt(\n\t\t\t'span',\n\t\t\t{ class: 'cm-diagnosticActionCont' },\n\t\t\tdiagnostic.actions?.map((action, i) => {\n\t\t\t\tlet fired = false;\n\t\t\t\tconst click = (e: Event) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tif (fired) return;\n\t\t\t\t\tfired = true;\n\t\t\t\t\tconst found = findDiagnostic(view.state.field(lintState).diagnostics, diagnostic);\n\t\t\t\t\tif (found) action.apply(view, found.from, found.to);\n\t\t\t\t};\n\t\t\t\tconst { name, title } = action;\n\t\t\t\tconst keyIndex = keys[i] ? name.indexOf(keys[i]) : -1;\n\t\t\t\tconst nameElt =\n\t\t\t\t\tkeyIndex < 0\n\t\t\t\t\t\t? name\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\tname.slice(0, keyIndex),\n\t\t\t\t\t\t\t\telt('u', name.slice(keyIndex, keyIndex + 1)),\n\t\t\t\t\t\t\t\tname.slice(keyIndex + 1),\n\t\t\t\t\t\t\t];\n\t\t\t\treturn elt(\n\t\t\t\t\t'button',\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\tclass: 'cm-diagnosticAction',\n\t\t\t\t\t\tonclick: click,\n\t\t\t\t\t\tonmousedown: click,\n\t\t\t\t\t\t'aria-label': ` ${title}${keyIndex < 0 ? '' : ` (access key \"${keys[i]})\"`}.`,\n\t\t\t\t\t},\n\t\t\t\t\tnameElt,\n\t\t\t\t);\n\t\t\t}),\n\t\t),\n\t\telt('div', { class: 'cm-diagnosticRow' }, [\n\t\t\tdiagnostic.ignore &&\n\t\t\t\telt(\n\t\t\t\t\t'div',\n\t\t\t\t\t{\n\t\t\t\t\t\tclass: 'cm-diagnosticIgnore',\n\t\t\t\t\t\tonclick: (e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tif (diagnostic.ignore) {\n\t\t\t\t\t\t\t\tdiagnostic.ignore();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t'Ignore Diagnostic',\n\t\t\t\t),\n\t\t\tdiagnostic.disable &&\n\t\t\t\telt(\n\t\t\t\t\t'div',\n\t\t\t\t\t{\n\t\t\t\t\t\tclass: 'cm-diagnosticDisable',\n\t\t\t\t\t\tonclick: (e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tif (diagnostic.disable) {\n\t\t\t\t\t\t\t\tdiagnostic.disable();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitle: `Disable ${diagnostic.source}`,\n\t\t\t\t\t},\n\t\t\t\t\t'Disable Rule',\n\t\t\t\t),\n\t\t]),\n\t);\n}\n\nclass DiagnosticWidget extends WidgetType {\n\tconstructor(readonly diagnostic: Diagnostic) {\n\t\tsuper();\n\t}\n\n\teq(other: DiagnosticWidget) {\n\t\treturn other.diagnostic == this.diagnostic;\n\t}\n\n\ttoDOM() {\n\t\treturn elt('span', {\n\t\t\tclass: `cm-lintPoint cm-lintPoint-${this.diagnostic.severity}${this.diagnostic.markClass ? ` ${this.diagnostic.markClass}` : ''}`,\n\t\t});\n\t}\n}\n\nfunction svg(content: string, attrs = `viewBox=\"0 0 40 40\"`) {\n\treturn `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${attrs}>${encodeURIComponent(content)}</svg>')`;\n}\n\nfunction underline(color: string) {\n\treturn svg(\n\t\t`<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${color}\" fill=\"none\" stroke-width=\"1\"/>`,\n\t\t`width=\"6\" height=\"3\"`,\n\t);\n}\n\nconst lintKindRangeTheme = Object.fromEntries(\n\tObject.entries(LINT_KIND_COLORS).map(([lintKind, color]) => [\n\t\t`.cm-lintRange.harper-lintRange-${lintKind}`,\n\t\t{ backgroundImage: underline(color) },\n\t]),\n);\n\nconst lintKindDiagnosticTheme = Object.fromEntries(\n\tObject.entries(LINT_KIND_COLORS).map(([lintKind, color]) => [\n\t\t`.cm-diagnostic.harper-lintRange-${lintKind} .cm-diagnosticTitle`,\n\t\t{ boxShadow: `inset 0 -2px ${color}` },\n\t]),\n);\n\nconst lintKindPointTheme = Object.fromEntries(\n\tObject.entries(LINT_KIND_COLORS).map(([lintKind, color]) => [\n\t\t`.cm-lintPoint.harper-lintRange-${lintKind}`,\n\t\t{ '&:after': { borderBottomColor: color } },\n\t]),\n);\n\nconst baseTheme = EditorView.baseTheme({\n\t'.cm-diagnostic': {\n\t\tpadding: '4px',\n\t\tmarginLeft: '0px',\n\t\tdisplay: 'flex',\n\t\tflexDirection: 'column',\n\t\twhiteSpace: 'pre-wrap',\n\t\tmaxHeight: 'calc(100% - var(--header-height)) !important',\n\t},\n\n\t'.cm-diagnosticTitle': {\n\t\tboxShadow: 'inset 0 -2px #DB2B39',\n\t\twidth: 'max-content',\n\t\tfontWeight: 'bold',\n\t},\n\n\t'.cm-diagnosticText': {\n\t\tmarginTop: '8px',\n\t},\n\n\t'.cm-diagnosticText p': {\n\t\tmargin: '0px',\n\t\tpadding: '0px',\n\t\tdisplay: 'inline',\n\t},\n\n\t'.cm-diagnosticText code': {\n\t\tborderRadius: '0.25rem',\n\t\tbackgroundColor: 'var(--background-secondary) !important',\n\t\tborder:\n\t\t\t'1px solid rgb(from var(--background-secondary) calc(255 - r) calc(255 - g) calc(255 - b))',\n\t\tpadding: '0.25rem',\n\t},\n\n\t'.cm-diagnosticActionCont': {\n\t\tdisplay: 'flex',\n\t\tflexWrap: 'wrap',\n\t\tjustifyContent: 'flex-start',\n\t\talignItems: 'flex-start',\n\t\talignContent: 'flex-start',\n\t\tgap: 'var(--size-4-2)',\n\t},\n\n\t'.cm-diagnosticRow': {\n\t\tdisplay: 'flex',\n\t\tflexDirection: 'row',\n\t\tjustifyContent: 'space-between',\n\t},\n\n\t'.cm-diagnosticAction': {\n\t\tfont: 'inherit',\n\t\tborder: 'none',\n\t\tmarginTop: '8px',\n\t\tdisplay: 'flex',\n\t\talignItems: 'center',\n\t\tgap: 'var(--size-4-2)',\n\t\tpadding: 'var(--size-4-1) var(--size-4-2)',\n\t\tcursor: 'var(--cursor)',\n\t\tfontSize: 'var(--font-ui-small)',\n\t\tborderRadius: 'var(--radius-s)',\n\t\twhiteSpace: 'nowrap',\n\t},\n\n\t'.cm-tooltip': {\n\t\tpadding: 'var(--size-2-3) !important',\n\t\tborder: '1px solid var(--background-modifier-border-hover) !important',\n\t\tbackgroundColor: 'var(--background-secondary) !important',\n\t\tborderRadius: 'var(--radius-m) !important',\n\t\tboxShadow: 'var(--shadow-s) !important',\n\t\tzIndex: 'var(--layer-menu) !important',\n\t\tuserSelect: 'none !important',\n\t\toverflow: 'hidden !important',\n\t},\n\n\t'.cm-diagnosticSource': {\n\t\tfontSize: '70%',\n\t\topacity: 0.7,\n\t},\n\n\t'.cm-diagnosticIgnore': {\n\t\tpadding: 'var(--size-4-1) 0px',\n\t\tfontSize: 'var(--font-ui-small)',\n\t},\n\n\t'.cm-diagnosticIgnore:hover': {\n\t\ttextDecoration: 'underline',\n\t},\n\n\t'.cm-diagnosticDisable': {\n\t\tpadding: 'var(--size-4-1) 0px',\n\t\tfontSize: 'var(--font-ui-small)',\n\t},\n\n\t'.cm-diagnosticDisable:hover': {\n\t\ttextDecoration: 'underline',\n\t},\n\n\t'.cm-lintRange': {\n\t\tbackgroundPosition: 'left bottom',\n\t\tbackgroundRepeat: 'repeat-x',\n\t\tpaddingBottom: '0.7px',\n\t},\n\n\t'.cm-lintRange-error': { backgroundImage: underline('#d11') },\n\t'.cm-lintRange-warning': { backgroundImage: underline('orange') },\n\t'.cm-lintRange-info': { backgroundImage: underline('#999') },\n\t'.cm-lintRange-hint': { backgroundImage: underline('#66d') },\n\t...lintKindRangeTheme,\n\t'.cm-lintRange-active': { backgroundColor: '#ffdd9980' },\n\n\t'.cm-tooltip-lint': {\n\t\tpadding: 0,\n\t\tmargin: 0,\n\t},\n\n\t'.cm-lintPoint': {\n\t\tposition: 'relative',\n\n\t\t'&:after': {\n\t\t\tcontent: '\"\"',\n\t\t\tposition: 'absolute',\n\t\t\tbottom: 0,\n\t\t\tleft: '-2px',\n\t\t\tborderLeft: '3px solid transparent',\n\t\t\tborderRight: '3px solid transparent',\n\t\t\tborderBottom: '4px solid #d11',\n\t\t},\n\t},\n\n\t'.cm-lintPoint-warning': {\n\t\t'&:after': { borderBottomColor: 'orange' },\n\t},\n\t'.cm-lintPoint-info': {\n\t\t'&:after': { borderBottomColor: '#999' },\n\t},\n\t'.cm-lintPoint-hint': {\n\t\t'&:after': { borderBottomColor: '#66d' },\n\t},\n\t...lintKindPointTheme,\n\t...lintKindDiagnosticTheme,\n\n\t'.cm-panel.cm-panel-lint': {\n\t\tposition: 'relative',\n\t\t'& ul': {\n\t\t\tmaxHeight: '100px',\n\t\t\toverflowY: 'auto',\n\t\t\t'& [aria-selected]': {\n\t\t\t\tbackgroundColor: '#ddd',\n\t\t\t\t'& u': { textDecoration: 'underline' },\n\t\t\t},\n\t\t\t'&:focus [aria-selected]': {\n\t\t\t\tbackground_fallback: '#bdf',\n\t\t\t\tbackgroundColor: 'Highlight',\n\t\t\t\tcolor_fallback: 'white',\n\t\t\t\tcolor: 'HighlightText',\n\t\t\t},\n\t\t\t'& u': { textDecoration: 'none' },\n\t\t\tpadding: 0,\n\t\t\tmargin: 0,\n\t\t},\n\t\t'& [name=close]': {\n\t\t\tposition: 'absolute',\n\t\t\ttop: '0',\n\t\t\tright: '2px',\n\t\t\tbackground: 'inherit',\n\t\t\tborder: 'none',\n\t\t\tfont: 'inherit',\n\t\t\tpadding: 0,\n\t\t\tmargin: 0,\n\t\t},\n\t},\n});\n\nconst commandTooltipField = StateField.define<readonly Tooltip[]>({\n\tcreate(state) {\n\t\tconst { commandTooltip } = state.field(lintState);\n\t\treturn commandTooltip\n\t\t\t? [\n\t\t\t\t\tcreateLintTooltip(\n\t\t\t\t\t\tstate,\n\t\t\t\t\t\t[commandTooltip.diagnostic],\n\t\t\t\t\t\tcommandTooltip.from,\n\t\t\t\t\t\tcommandTooltip.to,\n\t\t\t\t\t\t'keyboard',\n\t\t\t\t\t),\n\t\t\t\t]\n\t\t\t: [];\n\t},\n\tupdate(_tooltips, tr) {\n\t\tconst { commandTooltip } = tr.state.field(lintState);\n\t\treturn commandTooltip\n\t\t\t? [\n\t\t\t\t\tcreateLintTooltip(\n\t\t\t\t\t\ttr.state,\n\t\t\t\t\t\t[commandTooltip.diagnostic],\n\t\t\t\t\t\tcommandTooltip.from,\n\t\t\t\t\t\tcommandTooltip.to,\n\t\t\t\t\t\t'keyboard',\n\t\t\t\t\t),\n\t\t\t\t]\n\t\t\t: [];\n\t},\n\tprovide: (f) => showTooltip.computeN([f], (state) => state.field(f)),\n});\n\nconst lintExtensions = [\n\ttooltips({\n\t\tposition: 'absolute',\n\t\ttooltipSpace: (view) => {\n\t\t\tconst rect = view.dom.getBoundingClientRect();\n\t\t\treturn {\n\t\t\t\ttop: rect.top,\n\t\t\t\tleft: rect.left,\n\t\t\t\tbottom: rect.bottom,\n\t\t\t\tright: rect.right,\n\t\t\t};\n\t\t},\n\t}),\n\tlintState,\n\tcommandTooltipField,\n\tEditorView.domEventHandlers({\n\t\tmousedown(event, view) {\n\t\t\tconst { commandTooltip, selected } = view.state.field(lintState);\n\t\t\tif (!commandTooltip && !selected) return false;\n\t\t\tconst target = event.target as HTMLElement | null;\n\t\t\tif (target?.closest('.cm-tooltip')) return false;\n\t\t\tview.dispatch({\n\t\t\t\teffects: [setCommandTooltipEffect.of(null), movePanelSelection.of(null)],\n\t\t\t});\n\t\t\treturn false;\n\t\t},\n\t}),\n\thoverTooltip(lintTooltip, { hideOn: hideTooltip }),\n\tbaseTheme,\n];\n\n/// Iterate over the marked diagnostics for the given editor state,\n/// calling `f` for each of them. Note that, if the document changed\n/// since the diagnostics were created, the `Diagnostic` object will\n/// hold the original outdated position, whereas the `to` and `from`\n/// arguments hold the diagnostic's current position.\nexport function forEachDiagnostic(\n\tstate: EditorState,\n\tf: (d: Diagnostic, from: number, to: number) => void,\n) {\n\tconst lState = state.field(lintState, false);\n\tif (lState?.diagnostics.size)\n\t\tfor (let iter = RangeSet.iter([lState.diagnostics]); iter.value; iter.next())\n\t\t\tf(iter.value.spec.diagnostic, iter.from, iter.to);\n}\n\nfunction collectDiagnostics(diagnostics: DecorationSet): SelectedDiagnostic[] {\n\tconst all: SelectedDiagnostic[] = [];\n\tdiagnostics.between(0, 1e9, (from, to, { spec }) => {\n\t\tall.push(new SelectedDiagnostic(from, to, spec.diagnostic));\n\t});\n\treturn all;\n}\n\nfunction selectedIndexOf(all: readonly SelectedDiagnostic[], selected: SelectedDiagnostic) {\n\treturn all.findIndex(\n\t\t(d) => d.from === selected.from && d.to === selected.to && d.diagnostic === selected.diagnostic,\n\t);\n}\n\nfunction getDiagnosticForTooltipRange(\n\tdiagnostics: DecorationSet,\n\tfrom: number,\n\tto: number,\n): SelectedDiagnostic | null {\n\tlet found: SelectedDiagnostic | null = null;\n\tdiagnostics.between(from, to, (dFrom, dTo, { spec }) => {\n\t\tif (dFrom <= to && dTo >= from) {\n\t\t\tfound = new SelectedDiagnostic(dFrom, dTo, spec.diagnostic);\n\t\t\treturn false;\n\t\t}\n\t});\n\treturn found;\n}\n\nfunction getActiveTooltipMatch(view: EditorView): SelectedDiagnostic | null {\n\tconst lState = view.state.field(lintState, false);\n\tif (!lState) return null;\n\tif (lState.commandTooltip) {\n\t\treturn lState.commandTooltip;\n\t}\n\n\tconst active = view.state.facet(showTooltip) as\n\t\t| readonly ((Tooltip & HarperTooltipMeta) | null)[]\n\t\t| null;\n\tif (!active) return null;\n\tfor (const tooltip of active) {\n\t\tif (!tooltip || tooltip.harperLint !== true) continue;\n\t\tconst from = tooltip.pos;\n\t\tconst to = tooltip.end ?? from;\n\t\tconst matched = getDiagnosticForTooltipRange(lState.diagnostics, from, to);\n\t\tif (matched) return matched;\n\t}\n\treturn null;\n}\n\nfunction getMappedDiagnostic(view: EditorView, diagnostic: Diagnostic): SelectedDiagnostic | null {\n\tconst lState = view.state.field(lintState, false);\n\tif (!lState) return null;\n\treturn findDiagnostic(lState.diagnostics, diagnostic);\n}\n\nfunction getSuggestionActions(diagnostic: Diagnostic): readonly Action[] {\n\treturn (diagnostic.actions ?? []).filter((action) => action.kind !== 'dictionary');\n}\n\nfunction getDictionaryAction(diagnostic: Diagnostic): Action | null {\n\tfor (const action of diagnostic.actions ?? []) {\n\t\tif (action.kind === 'dictionary') return action;\n\t}\n\treturn null;\n}\n\nfunction clearKeyboardFocus(view: EditorView): boolean {\n\tconst lState = view.state.field(lintState, false);\n\tif (!lState || (!lState.commandTooltip && !lState.selected)) return false;\n\tview.dispatch({\n\t\tselection: { anchor: view.state.selection.main.to },\n\t\teffects: [movePanelSelection.of(null), setCommandTooltipEffect.of(null)],\n\t});\n\treturn true;\n}\n\nfunction hideVisibleLintTooltip(view: EditorView) {\n\tview.dispatch({\n\t\teffects: [setCommandTooltipEffect.of(null)],\n\t});\n}\n\nexport function canNavigateDiagnostics(view: EditorView): boolean {\n\tconst lState = view.state.field(lintState, false);\n\treturn Boolean(lState?.diagnostics.size);\n}\n\nexport function navigateDiagnostic(view: EditorView, direction: 'next' | 'previous'): boolean {\n\tconst lState = view.state.field(lintState, false);\n\tif (!lState?.diagnostics.size) return false;\n\tconst all = collectDiagnostics(lState.diagnostics);\n\tif (!all.length) return false;\n\n\tlet target: SelectedDiagnostic | null = null;\n\tif (lState.selected) {\n\t\tconst index = selectedIndexOf(all, lState.selected);\n\t\tif (index >= 0) {\n\t\t\ttarget =\n\t\t\t\tdirection === 'next'\n\t\t\t\t\t? all[(index + 1) % all.length]\n\t\t\t\t\t: all[(index - 1 + all.length) % all.length];\n\t\t}\n\t}\n\n\tif (!target) {\n\t\tconst cursor = view.state.selection.main.head;\n\t\tif (direction === 'next') {\n\t\t\ttarget = all.find((d) => d.from > cursor) ?? all[0];\n\t\t} else {\n\t\t\ttarget = [...all].reverse().find((d) => d.to < cursor) ?? all[all.length - 1];\n\t\t}\n\t}\n\n\tview.dispatch({\n\t\tselection: { anchor: target.from, head: target.to },\n\t\teffects: [movePanelSelection.of(target), setCommandTooltipEffect.of(target)],\n\t});\n\treturn true;\n}\n\nexport function canApplySuggestionFromVisibleTooltip(view: EditorView, index: number): boolean {\n\tconst matched = getActiveTooltipMatch(view);\n\tif (!matched) return false;\n\treturn getSuggestionActions(matched.diagnostic).length >= index;\n}\n\nexport function applySuggestionFromVisibleTooltip(view: EditorView, index: number): boolean {\n\tconst matched = getActiveTooltipMatch(view);\n\tif (!matched) return false;\n\tconst action = getSuggestionActions(matched.diagnostic)[index - 1];\n\tif (!action) return false;\n\tconst mapped = getMappedDiagnostic(view, matched.diagnostic) ?? matched;\n\taction.apply(view, mapped.from, mapped.to);\n\thideVisibleLintTooltip(view);\n\tclearKeyboardFocus(view);\n\treturn true;\n}\n\nexport function canAddWordToDictionaryFromVisibleTooltip(view: EditorView): boolean {\n\tconst matched = getActiveTooltipMatch(view);\n\tif (!matched) return false;\n\treturn Boolean(getDictionaryAction(matched.diagnostic));\n}\n\nexport function addWordToDictionaryFromVisibleTooltip(view: EditorView): boolean {\n\tconst matched = getActiveTooltipMatch(view);\n\tif (!matched) return false;\n\tconst action = getDictionaryAction(matched.diagnostic);\n\tif (!action) return false;\n\tconst mapped = getMappedDiagnostic(view, matched.diagnostic) ?? matched;\n\taction.apply(view, mapped.from, mapped.to);\n\thideVisibleLintTooltip(view);\n\tclearKeyboardFocus(view);\n\treturn true;\n}\n\nexport function canIgnoreVisibleTooltipDiagnostic(view: EditorView): boolean {\n\tconst matched = getActiveTooltipMatch(view);\n\tif (!matched) return false;\n\treturn typeof matched.diagnostic.ignore === 'function';\n}\n\nexport function ignoreVisibleTooltipDiagnostic(view: EditorView): boolean {\n\tconst matched = getActiveTooltipMatch(view);\n\tif (!matched || typeof matched.diagnostic.ignore !== 'function') return false;\n\tvoid matched.diagnostic.ignore();\n\thideVisibleLintTooltip(view);\n\tclearKeyboardFocus(view);\n\treturn true;\n}\n\nexport function canDismissFocusedLintTooltip(view: EditorView): boolean {\n\tconst lState = view.state.field(lintState, false);\n\treturn Boolean(lState?.commandTooltip || lState?.selected);\n}\n\nexport function dismissFocusedLintTooltip(view: EditorView): boolean {\n\treturn clearKeyboardFocus(view);\n}\n"
  },
  {
    "path": "packages/obsidian-plugin/src/lintKindColor.test.ts",
    "content": "import { expect, test } from 'vitest';\nimport { lintKindClass, lintKindColor } from './lintKindColor';\n\ntest('lintKindColor matches Harper web colors for common kinds', () => {\n\texpect(lintKindColor('Spelling')).toBe('#EE4266');\n\texpect(lintKindColor('Style')).toBe('#FFD23F');\n\texpect(lintKindColor('Grammar')).toBe('#9B59B6');\n});\n\ntest('lint kind helpers produce safe fallback values', () => {\n\texpect(lintKindColor('DoesNotExist')).toBe('#d11');\n\texpect(lintKindClass('Style')).toBe('harper-lintRange-Style');\n});\n"
  },
  {
    "path": "packages/obsidian-plugin/src/lintKindColor.ts",
    "content": "const FALLBACK_LINT_COLOR = '#d11';\n\nexport const LINT_KIND_COLORS = {\n\tAgreement: '#228B22',\n\tBoundaryError: '#8B4513',\n\tCapitalization: '#540D6E',\n\tEggcorn: '#FF8C00',\n\tEnhancement: '#0EAD69',\n\tFormatting: '#7D3C98',\n\tGrammar: '#9B59B6',\n\tMalapropism: '#C71585',\n\tMiscellaneous: '#3BCEAC',\n\tNonstandard: '#008B8B',\n\tPunctuation: '#D4850F',\n\tReadability: '#2E8B57',\n\tRedundancy: '#4682B4',\n\tRegionalism: '#C061CB',\n\tRepetition: '#00A67C',\n\tSpelling: '#EE4266',\n\tStyle: '#FFD23F',\n\tTypo: '#FF6B35',\n\tUsage: '#1E90FF',\n\tWordChoice: '#228B22',\n} as const;\n\nexport function lintKindColor(lintKindKey: string): string {\n\treturn LINT_KIND_COLORS[lintKindKey as keyof typeof LINT_KIND_COLORS] ?? FALLBACK_LINT_COLOR;\n}\n\nexport function lintKindClass(lintKindKey: string): string {\n\treturn `harper-lintRange-${lintKindKey}`;\n}\n"
  },
  {
    "path": "packages/obsidian-plugin/src/textUtils.test.ts",
    "content": "import { expect, test } from 'vitest';\nimport { linesToString, stringToLines } from './textUtils';\n\ntest('Dictionary values are reversible', () => {\n\tconst possibleDicts = [\n\t\t[\n\t\t\t'lynx',\n\t\t\t'capybara',\n\t\t\t'ibex',\n\t\t\t'wombat',\n\t\t\t'ocelot',\n\t\t\t'pangolin',\n\t\t\t'stoat',\n\t\t\t'vole',\n\t\t\t'caracal',\n\t\t\t'gazelle',\n\t\t],\n\t\t[\n\t\t\t'azurite',\n\t\t\t'feldspar',\n\t\t\t'gabbro',\n\t\t\t'peridot',\n\t\t\t'chalcedony',\n\t\t\t'rutile',\n\t\t\t'aragonite',\n\t\t\t'spinel',\n\t\t\t'pyrite',\n\t\t\t'malachite',\n\t\t],\n\t\t[\n\t\t\t'auscultation',\n\t\t\t'phlebotomy',\n\t\t\t'sutures',\n\t\t\t'anticoagulant',\n\t\t\t'intubation',\n\t\t\t'tachycardia',\n\t\t\t'catheter',\n\t\t\t'defibrillator',\n\t\t\t'ischemia',\n\t\t\t'hematoma',\n\t\t],\n\t\t[\n\t\t\t'fennel',\n\t\t\t'sunchoke',\n\t\t\t'burrata',\n\t\t\t'tamarind',\n\t\t\t'sumac',\n\t\t\t'cassava',\n\t\t\t'farro',\n\t\t\t'durian',\n\t\t\t'romanesco',\n\t\t\t'chicory',\n\t\t],\n\t\t[\n\t\t\t'taciturn',\n\t\t\t'indelible',\n\t\t\t'verdant',\n\t\t\t'oblique',\n\t\t\t'incisive',\n\t\t\t'mellifluous',\n\t\t\t'crepuscular',\n\t\t\t'effulgent',\n\t\t\t'sinistral',\n\t\t\t'pellucid',\n\t\t],\n\t];\n\n\tfor (const set of possibleDicts) {\n\t\tconst text = linesToString(set);\n\t\tconst back = stringToLines(text);\n\n\t\texpect(back).toStrictEqual(set);\n\t}\n});\n\ntest('Can handle multiple newlines', () => {\n\tconst dictText = 'worda\\n\\nwordb';\n\n\texpect(stringToLines(dictText)).toStrictEqual(['worda', 'wordb']);\n});\n\ntest('Can handle carriage returns', () => {\n\tconst dictText = 'worda\\r\\n\\r\\nwordb\\r\\nwordc';\n\texpect(stringToLines(dictText)).toStrictEqual(['worda', 'wordb', 'wordc']);\n});\n"
  },
  {
    "path": "packages/obsidian-plugin/src/textUtils.ts",
    "content": "/** Converts the content of a text area to individual lines. */\nexport function stringToLines(s: string): string[] {\n\treturn s\n\t\t.split('\\n')\n\t\t.map((s) => s.trim())\n\t\t.filter((v) => v.length > 0);\n}\n\n/** Converts the content of a text area to viable dictionary values. */\nexport function linesToString(values: string[]): string {\n\treturn values.map((v) => v.trim()).join('\\n');\n}\n"
  },
  {
    "path": "packages/obsidian-plugin/vite.config.ts",
    "content": "import { playwright } from '@vitest/browser-playwright';\nimport external from 'rollup-plugin-peer-deps-external';\nimport svg from 'rollup-plugin-svg-import';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n\tplugins: [svg({ stringify: true }), external()],\n\tbuild: {\n\t\toutDir: '.',\n\t\ttarget: 'es6',\n\t\tlib: {\n\t\t\tentry: 'src/index.ts',\n\t\t\tformats: ['cjs'],\n\t\t\tfileName: 'main',\n\t\t},\n\t\trollupOptions: {\n\t\t\texternal: ['obsidian', 'electron'],\n\t\t\toutput: {\n\t\t\t\tinlineDynamicImports: true,\n\t\t\t},\n\t\t},\n\t},\n\ttest: {\n\t\tretry: process.env.CI ? 5 : 0,\n\t\tbrowser: {\n\t\t\tprovider: playwright(),\n\t\t\tenabled: true,\n\t\t\theadless: true,\n\t\t\tscreenshotFailures: false,\n\t\t\tinstances: [{ browser: 'chromium' }],\n\t\t},\n\t},\n});\n"
  },
  {
    "path": "packages/vscode-plugin/.gitignore",
    "content": "build\n*.vsix\nLICENSE\nbin\n.vscode-test\n"
  },
  {
    "path": "packages/vscode-plugin/.vscodeignore",
    "content": "**/**\n!build/extension.js\n!package.json\n!LICENSE\n!CHANGELOG.md\n!bin\n!icon.png\n!media/\n"
  },
  {
    "path": "packages/vscode-plugin/README.md",
    "content": "# Harper for VS Code\n\nHarper is the next-generation grammar checker for your code. You can think of it as an alternative to Grammarly. It catches common stylistic errors, as well as complex grammatical or layout-related problems. It works for almost [all common programming languages](https://writewithharper.com/docs/integrations/language-server#Supported-Languages) and a number of markup formats.\n\nIf you use Rust, Java, JavaScript, or any number of other programming languages, your comments may end up as part of your API's documentation. If that's the case, grammatical mistakes in your code could be down-ranking your site on search results and tarnishing your reputation for quality.\n\nMost importantly, Harper runs on-device and uses barely any memory at all. That means you can get feedback on your work in milliseconds, dramatically increasing your iteration speed.\n\nYou can learn more about [this extension](https://writewithharper.com/docs/integrations/visual-studio-code) and [Harper](https://writewithharper.com/docs/about) over at our [official website](https://writewithharper.com).\n"
  },
  {
    "path": "packages/vscode-plugin/development-guide.md",
    "content": "# Development Guide\n\nThis document has been moved to the [official documentation](https://writewithharper.com/docs/contributors/visual-studio-code).\n"
  },
  {
    "path": "packages/vscode-plugin/esbuild.cjs",
    "content": "const esbuild = require('esbuild');\n\nconst production = process.argv.includes('--production');\nconst watch = process.argv.includes('--watch');\n\n/**\n * @type {import('esbuild').Plugin}\n */\nconst esbuildProblemMatcherPlugin = {\n\tname: 'esbuild-problem-matcher',\n\n\tsetup(build) {\n\t\tbuild.onStart(() => {\n\t\t\tconsole.log('[watch] build started');\n\t\t});\n\t\tbuild.onEnd((result) => {\n\t\t\tresult.errors.forEach(({ text, location }) => {\n\t\t\t\tconsole.error(`✘ [ERROR] ${text}`);\n\t\t\t\tconsole.error(`    ${location.file}:${location.line}:${location.column}:`);\n\t\t\t});\n\t\t\tconsole.log('[watch] build finished');\n\t\t});\n\t},\n};\n\nasync function main() {\n\tconst ctx = await esbuild.context({\n\t\tentryPoints: ['src/extension.ts'],\n\t\tbundle: true,\n\t\tformat: 'cjs',\n\t\tminify: production,\n\t\tsourcemap: !production,\n\t\tsourcesContent: false,\n\t\tplatform: 'node',\n\t\toutfile: 'build/extension.js',\n\t\texternal: ['vscode'],\n\t\tlogLevel: 'silent',\n\t\tplugins: [\n\t\t\t/* Add to the end of plugins array */\n\t\t\tesbuildProblemMatcherPlugin,\n\t\t],\n\t});\n\tif (watch) {\n\t\tawait ctx.watch();\n\t} else {\n\t\tawait ctx.rebuild();\n\t\tawait ctx.dispose();\n\t}\n}\n\nmain().catch((e) => {\n\tconsole.error(e);\n\tprocess.exit(1);\n});\n"
  },
  {
    "path": "packages/vscode-plugin/package.json",
    "content": "{\n\t\"name\": \"harper\",\n\t\"displayName\": \"Harper - Grammar / Spell Checking\",\n\t\"description\": \"The grammar checker for developers\",\n\t\"version\": \"1.12.0\",\n\t\"private\": true,\n\t\"author\": \"Elijah Potter\",\n\t\"publisher\": \"elijah-potter\",\n\t\"license\": \"Apache-2.0\",\n\t\"icon\": \"icon.png\",\n\t\"galleryBanner\": {\n\t\t\"color\": \"#F2F2F2\",\n\t\t\"theme\": \"light\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/automattic/harper\"\n\t},\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/automattic/harper/issues\"\n\t},\n\t\"engines\": {\n\t\t\"vscode\": \"^1.96.2\"\n\t},\n\t\"categories\": [\n\t\t\"Other\"\n\t],\n\t\"keywords\": [\n\t\t\"grammar\",\n\t\t\"spellcheck\",\n\t\t\"writing\"\n\t],\n\t\"activationEvents\": [\n\t\t\"onLanguage:asciidoc\",\n\t\t\"onLanguage:c\",\n\t\t\"onLanguage:clojure\",\n\t\t\"onLanguage:cmake\",\n\t\t\"onLanguage:cpp\",\n\t\t\"onLanguage:csharp\",\n\t\t\"onLanguage:dart\",\n\t\t\"onLanguage:git-commit\",\n\t\t\"onLanguage:go\",\n\t\t\"onLanguage:groovy\",\n\t\t\"onLanguage:haskell\",\n\t\t\"onLanguage:html\",\n\t\t\"onLanguage:ink\",\n\t\t\"onLanguage:java\",\n\t\t\"onLanguage:javascript\",\n\t\t\"onLanguage:javascriptreact\",\n\t\t\"onLanguage:jj-commit\",\n\t\t\"onLanguage:kotlin\",\n\t\t\"onLanguage:literate haskell\",\n\t\t\"onLanguage:lua\",\n\t\t\"onLanguage:markdown\",\n\t\t\"onLanguage:nix\",\n\t\t\"onLanguage:org\",\n\t\t\"onLanguage:php\",\n\t\t\"onLanguage:powershell\",\n\t\t\"onLanguage:plaintext\",\n\t\t\"onLanguage:python\",\n\t\t\"onLanguage:ruby\",\n\t\t\"onLanguage:rust\",\n\t\t\"onLanguage:scala\",\n\t\t\"onLanguage:shellscript\",\n\t\t\"onLanguage:solidity\",\n\t\t\"onLanguage:swift\",\n\t\t\"onLanguage:tex\",\n\t\t\"onLanguage:latex\",\n\t\t\"onLanguage:toml\",\n\t\t\"onLanguage:typescript\",\n\t\t\"onLanguage:typescriptreact\",\n\t\t\"onLanguage:typst\",\n\t\t\"onLanguage:zig\"\n\t],\n\t\"main\": \"./build/extension.js\",\n\t\"contributes\": {\n\t\t\"icons\": {\n\t\t\t\"harper-logo\": {\n\t\t\t\t\"description\": \"Harper logo\",\n\t\t\t\t\"default\": {\n\t\t\t\t\t\"fontPath\": \"media/harper.woff\",\n\t\t\t\t\t\"fontCharacter\": \"\\\\e900\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"commands\": [\n\t\t\t{\n\t\t\t\t\"command\": \"harper.languageserver.restart\",\n\t\t\t\t\"title\": \"Harper: Restart Language Server\",\n\t\t\t\t\"description\": \"Restart harper-ls\"\n\t\t\t}\n\t\t],\n\t\t\"configuration\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"title\": \"Harper\",\n\t\t\t\"properties\": {\n\t\t\t\t\"harper.path\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Optional path to a harper-ls executable to use.\"\n\t\t\t\t},\n\t\t\t\t\"harper.codeActions.ForceStable\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": false,\n\t\t\t\t\t\"description\": \"Make code actions appear in \\\"stable\\\" positions by placing code actions that should always be available, like adding misspelled words in the dictionary, first.\"\n\t\t\t\t},\n\t\t\t\t\"harper.dialect\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\"British\",\n\t\t\t\t\t\t\"American\",\n\t\t\t\t\t\t\"Canadian\",\n\t\t\t\t\t\t\"Australian\"\n\t\t\t\t\t],\n\t\t\t\t\t\"default\": \"American\",\n\t\t\t\t\t\"description\": \"Set which dialect of English Harper should expect.\"\n\t\t\t\t},\n\t\t\t\t\"harper.diagnosticSeverity\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"enum\": [\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\t\"hint\",\n\t\t\t\t\t\t\"information\",\n\t\t\t\t\t\t\"warning\"\n\t\t\t\t\t],\n\t\t\t\t\t\"default\": \"information\",\n\t\t\t\t\t\"description\": \"How severe do you want diagnostics to appear in the editor?\"\n\t\t\t\t},\n\t\t\t\t\"harper.excludePatterns\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\"description\": \"A set of globs to ignore. If a file matches any of the globs, it will not be linted.\"\n\t\t\t\t},\n\t\t\t\t\"harper.fileDictPath\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Optional path to a file dictionary directory to use.\"\n\t\t\t\t},\n\t\t\t\t\"harper.isolateEnglish\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": false,\n\t\t\t\t\t\"description\": \"Only lint English text in documents that are a mixture of English and another language.\"\n\t\t\t\t},\n\t\t\t\t\"harper.markdown.IgnoreLinkTitle\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": false,\n\t\t\t\t\t\"description\": \"Skip linting link titles.\"\n\t\t\t\t},\n\t\t\t\t\"harper.maxFileLength\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"number\",\n\t\t\t\t\t\"default\": 120000,\n\t\t\t\t\t\"description\": \"Maximum length of file to be linted (in bytes). If a file is larger than this, it will not be linted.\"\n\t\t\t\t},\n\t\t\t\t\"harper.userDictPath\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Optional path to a user dictionary file to use.\"\n\t\t\t\t},\n\t\t\t\t\"harper.workspaceDictPath\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Optional path to a workspace-local dictionary file to use.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ACoupleMore\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `a couple of more` to `a couple more`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ALongTime\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `along time` to `a long time`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AOkHyphen\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces the loose article-plus-abbreviation pairing with the standard hyphenated form whenever a linking verb describes readiness or approval.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.APart\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Finds and corrects common mistakes between 'a part' and 'apart'\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AWhile\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Enforces `awhile` after verbs and `a while` everywhere else.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AdNauseam\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `as nauseam` to `ad nauseam`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Addicting\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces `addicting` with `addictive` when used as an adjective.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AdjectiveDoubleDegree\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Finds adjectives that are used as double degrees (e.g. `more prettier`).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AdjectiveOfA\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This rule looks for sequences of words of the form `adjective of a`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Ado\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `adieu` to `ado`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AfterAWhile\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the missing article in `after while`, forming `after a while`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AfterAll\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `afterall` to `after all`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AfterLater\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks for the word `later` following `after [a period of time]`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AheadAnd\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `an` to `and` after `ahead`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Albeit\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects this expression to the standard `albeit`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AllHellBreakLoose\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects forms of `all hell breaks out` to `all hell breaks loose`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AllIntentsAndPurposes\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Finds and corrects common wrong forms of the phrase 'for all intents and purposes' / 'to all intents and purposes'.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AllOfASudden\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Guides this expression toward the standard `all of a sudden`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AllReady\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags `all ready` when it precedes an adjective so the adverb `already` can take its place.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AllThough\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Nobody means to write the two-word phrase `all though` when the single word `although` is intended.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AllowTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags erroneous usage of `allow to` without a subject.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Alongside\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces the spaced form `along side` with `alongside`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AlzheimersDisease\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes the common misnomer `old-timers' disease`, ensuring the correct medical term `Alzheimer’s disease` is used.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AmInTheMorning\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Finds redundant am/pm indicators used together with time periods such as 'in the morning' or 'at night'.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AmazonNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to the various products of Amazon.com, make sure to treat them as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Americas\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to North, Central, and South America, make sure to treat them as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AmountsFor\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `amounts for` to either `amounts to` or `accounts for`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AnA\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"A rule that looks for incorrect indefinite articles. For example, `this is an mule` would be flagged as incorrect.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AnAnother\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `an another` and `a another`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AndIn\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes the incorrect phrase `an in` to `and in` for proper conjunction usage.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AndTheLike\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects mistakes in `and the like` and `or the like`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AnotherAn\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `another an` to `another`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AnotherOnes\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `another ones`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AnotherThingComing\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Though `another think coming` is the original phrase, `another thing coming` is now more common.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AnotherThings\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `another things`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AnotherThinkComing\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": false,\n\t\t\t\t\t\"description\": \"Though `another thing coming` is now more common, `another think coming` is the original phrase.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Anybody\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `anybody`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Anyhow\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `anyhow`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Anywhere\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `anywhere`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ApartFrom\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags the misspelling `apart form` and suggests `apart from`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AppleNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to Apple products and services, make sure to treat them as proper nouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ArriveOnWeekday\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Keeps schedules explicit by preferring the familiar `arrive on Friday` pattern instead of a bare weekday.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AsFarAsIKnow\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AsFarBackAs\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects nonstandard `as early back as` to `as far back as`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AsFollows\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the phrase `as follow`, which is sometimes produced by overcorrection. While it appeared briefly in 19th-century English, it is now considered archaic; modern standard usage requires `as follows` regardless of number.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AsIfThough\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects redundant `as if though`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AsItHappens\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `as it so happens` to `as it happens`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AsLongAs\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `aslong as` to `as long as`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AsOfCurrently\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `as of currently` to `currently` or `as of now`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AsOfLately\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `as of lately` to `lately` or `as of late`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AsOpposedTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `as oppose to` to `as opposed to`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AsSoonAsPossible\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AskNoPreposition\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Identifies sequences like `ask to us` or `tell to him` and recommends removing the superfluous “to”.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AtFaceValue\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `on face value` to the more usual `at face value`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AtTheEndOfTheDay\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `in the end of the day` to `at the end of the day`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AtTheExpenseOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The correct idiom is `at the expense of`, with singular `expense`. But retain `expanse` if this phrase refers to a wide area.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Australia\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to states, territories, and cities in Australia, make sure to treat them as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AvoidAndAlso\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Reduces redundancy by replacing `and also` with `and`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AvoidCurses\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags offensive language and offers various ways to censor or replace with euphemisms.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AwaitFor\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests using either `await` or `wait for` but not both, as they express the same meaning.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AwareOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `aware about` to the standard `aware of`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.AzureNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to Azure cloud services, make sure to treat them as proper nouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BackInTheDay\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This linter flags instances of the nonstandard phrase `back in the days`. The correct, more accepted form is `back in the day`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Backplane\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `backplane`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BadRap\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Changes `bed rap` to the proper idiom `bad rap`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BanTogether\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects and corrects the common error of using `ban together` instead of the idiom `band together`, which means to unite or join forces.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BareInMind\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures the phrase `bear in mind` is used correctly instead of `bare in mind`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BatedBreath\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Changes `baited breath` to the correct `bated breath`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BeAllowed\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures the passive form uses `be allowed` after future negatives.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BeRightBack\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BeWorried\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects incorrect use of 'be worry' instead of `be worried`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BeckAndCall\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes `back and call` to `beck and call`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BeenThere\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the misspelling `bee there` to the proper phrase `been there`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Beforehand\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"`Beforehand` functions as a fixed adverb meaning ‘in advance’; writing it as two words or with a hyphen is nonstandard and can jar readers.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BehindTheScenes\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `behind the scene` to `behind the scenes`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BesideThePoint\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `besides the point` to `beside the point`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BestOfAllTime\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks for nonstandard `of all times` in superlatives instead of singular `time`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BestRegards\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"In valedictions, `best` expresses your highest regard—avoid the typo `beat regards`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BetterOffWith\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `better of with` to `better off with`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BewareOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The verb `beware` naturally pairs with `of` before the noun being warned about, so swap other prepositions for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BlacklistWhitelist\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Normalize the two-word sequence `black list`/`white list` so it matches the established compound noun or verb.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BlanketStatement\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects common errors in the phrase `blanket statement`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Bollocks\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `bullocks` to `bollocks` when the meaning is `nonsense`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BoringWords\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": false,\n\t\t\t\t\t\"description\": \"This rule looks for particularly boring or overused words. Using varied language is an easy way to keep a reader's attention.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Bought\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces the incorrect past-tense spelling `bough` with `bought` after subject pronouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BrandBrandish\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for `brandish` wrongly used when `brand` is intended.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Brutality\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests the more standard and common synonym `brutality`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.BuiltIn\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"English convention treats `built-in` as a single, attributive adjective—meaning something integrated from the outset—whereas other forms like `in built` are nonstandard and can feel awkward to readers.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ByAccident\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Incorrect preposition: `by accident` is the idiomatic expression.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ByTheWay\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Bypass\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `bypass`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CanBeSeen\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `can be seem` to the proper phrase `can be seen`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Canada\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to provinces, territories, and cities in Canada, make sure to treat them as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Cant\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests correcting `cant` to `can't`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CapitalizePersonalPronouns\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Forgetting to capitalize personal pronouns, like \\\"I\\\" or \\\"I'm\\\" is one of the most common errors. This rule helps with that.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CaseInPoint\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `case and point` to `case in point`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CaseSensitive\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `case-sensitive` is correctly hyphenated.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CautionaryTale\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects confusion between `tale` (story) and `tail` (appendage) in common phrases.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Chalkboard\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `chalkboard`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ChampAtTheBit\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `chomp at the bit` to the idiom `champ at the bit`, which has an equestrian origin referring to the way an anxious horse grinds its teeth against the metal part of the bridle.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ChangeTack\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Locates errors in the idioms `to change tack` and `change of tack` to convey the correct meaning of altering one's course or strategy.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ChineseCommunistParty\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to the political party, make sure to treat them as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ChockFull\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags common soundalikes of \\\"chock-full\\\" and makes sure they're hyphenated.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ClickThroughRate\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Hyphenates the verb+preposition pair when it directly precedes rate-style nouns, mirroring how these terms are commonly styled in analytics writing.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ClientOrServerSide\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects extraneous apostrophe in `client's side` and `server's side`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CommaFixes\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fix common comma errors such as no space after, erroneous space before, etc., Asian commas instead of English commas, etc.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CommitmentTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `commitment toward/towards` to `commitment to`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CompaniesProductsAndTrademarks\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensure proper capitalization of companies, products, and trademarks.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CompoundNouns\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects compound nouns split by a space and suggests merging them when both parts form a valid noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CompoundSubjectI\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Promotes `I` in compound subjects headed by a possessive determiner.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ComprisesOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"`Comprises` already contains the notion of `of`, so following it with another `of` is redundant.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CompulseToCompel\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests replacing the obsolete or archaic verb `compulse` with the standard `compel`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CondenseAllThe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests removing `of` in `all of the` for a more concise phrase.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Confident\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This linter detects instances where the noun `confidant` is incorrectly used in place of the adjective `confident`. `Confidant` refers to a trusted person, whereas `confident` describes certainty or self-assurance. The rule suggests replacing `confidant` with `confident` when used in an adjectival context.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ConfirmThat\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `conform` typos to `confirm`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Copyright\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `copywrite` to `copyright`. `Copywrite` refers to writing copy, while `copyright` is the legal right to creative works.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CorrectNumberSuffix\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When making quick edits, it is common for authors to change the value of a number without changing its suffix. This rule looks for these cases, for example: `2st`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Countries\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to Countries, make sure to treat it as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CoursingThroughVeins\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"In English idioms, `to course` means to flow rapidly—so avoid the eggcorn `cursing through veins.`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CriteriaPhenomena\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The words “criteria” and “phenomena” are the plurals of “criterion” and “phenomenon”, respectively. They are often incorrectly used as singular.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CureFor\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags `cure against` and prefers the standard `cure for` pairing.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CurrencyPlacement\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The location of currency symbols varies by country. The rule looks for and corrects improper positioning.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.CuttingAgeEggcorn\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `cutting age` or `cutting-age` to `cutting-edge` or `cutting edge`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Cybersec\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the informal abbreviation `cybersec` to `cybersecurity`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Damages\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks for plural `damages` not in the context of a court case.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DampSquib\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `damp squid` to `damp squib`, ensuring the intended meaning of a failed or underwhelming outcome.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Dashes\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Writers often type `--` or `---` expecting their editor to convert them into proper dashes. Replace these sequences with the correct characters: use an en dash (–) for ranges or connections and an em dash (—) for a break in thought.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DayAndAge\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes wrong variants of the idiom `in this day and age`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DayOneNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensure proper capitalization of Day One and Day One Premium as brand names.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Deadlift\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `deadlift`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DefiniteArticle\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The name of the word `the` is `definite article`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DegreesKelvin\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects use of `degrees kelvin` to `kelvins`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DegreesKelvinSymbol\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects use of `°K` to `K`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Desktop\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `desktop`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DespiteItIs\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `despite` being used with the wrong form of `is`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DespiteOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the misuse of `despite of` and suggests the proper alternatives `despite` or `in spite of`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Devops\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `devops`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DidPast\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects past forms of verbs to their base form, when used together with \\\"did\\\".\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Didnt\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `dint` to `didn't` after subject pronouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DigestiveTract\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `digestive track` to `digestive tract`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DiscourseMarkers\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags sentences that begin with a discourse marker but omit the required following comma.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Discuss\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Removes unnecessary `about` after `discuss`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DisjointPrefixes\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for words with their prefixes written with a space or hyphen between instead of joined.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DoIAdjective\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Swaps the helping verb `do` for `am` in `Do I <adjective>` questions so they use the correct linking verb.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DoMistake\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `do a mistake` to `make a mistake`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DoNotWant\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"In English, negation still requires the complete verb form (`want`), so avoid truncating it to `wan.`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DoToDueTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the typo `do to` when it is intended to mean `due to` in causal phrases.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DoesOrDose\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Tries to correct typos of `dose` to `does`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DontCan\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `don't can` to `can't` or `cannot`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DotInitialisms\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures common initialisms (like \\\"i.e.\\\") are properly dot-separated.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DoubleClick\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Encourages hyphenating `double-click` and its inflections.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DoubleEdgedSword\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects variants of `double-edged sword`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DoubleModal\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Two modal verbs in a row are rarely grammatical; remove one of them.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DoubleNegative\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces the determiner `no` with `any` when it follows the auxiliary `didn't/did not` plus a main verb (e.g., have, need, want, make, take, get) so the clause contains only one negation.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DueDiligence\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `do diligence` to `due diligence`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.DuringAges\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The idiomatic duration is 'for ages', so swap the initial preposition whenever the words refer to a general span.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EachAndEveryOne\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `each and everyone` to `each and every one`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EagleEyed\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Treats the phrase as a compound modifier and replaces the space with a hyphen so it reads like one idea.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EggYolk\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `egg yoke`, replacing it with the standard culinary term `egg yolk`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EllipsisLength\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Make sure you have the correct number of dots in your ellipsis.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ElsePossessive\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects missing apostrophes in phrases like `someone elses book` and suggests the correct possessive form `else’s`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EludedTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `eluded to` to `alluded to` in contexts referring to indirect references.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EnMasse\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects variants like `on mass` or `in mass` and suggests `en masse`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EnRoute\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects variants like `on route` or `in route` and suggests `en route`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EverEvery\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Tries to correct typos of `every` instead of `ever`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EverPresent\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the missing hyphen in `ever present` to the compound adjective `ever-present`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EverSince\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `every since` to `ever since`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EveryOnceAndAgain\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `every once and again` to `every once in a while` or `once again`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.EveryTime\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `everytime` to `every time`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Everybody\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `everybody`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Everyday\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This rule tries to sort out confusing the adjective `everyday` and the adverb `every day`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Everyone\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `everyone`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Everywhere\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `everywhere`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Excellent\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Provides a stronger word choice by replacing `very good` with `excellent` for clarity and emphasis.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandAlloc\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `alloc` to the full word `allocate` or `allocation` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandArgument\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `arg` to the full word `argument` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandBecause\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the informal abbreviation `cuz` to the full word `because` for formality.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandControl\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the informal abbreviation `ctrl` to the full word `control` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandDecl\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `decl` to the full word `declaration` or `declarator` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandDependencies\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `deps` to the full word `dependencies` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandDeref\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `deref` to the full word `dereference` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandForward\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `fwd` to the full word `forward` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandMemoryShorthands\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands memory-related abbreviations (`B`, `kB`, `MB`, `GB`, `TB`, `PB`, `KiB`, `MiB`, `GiB`, `TiB`, `PiB`, etc.) to their full forms (`byte`, `kilobyte`, `megabyte`, `gigabyte`, `terabyte`, `petabyte`, `kibibyte`, `mebibyte`, `gibibyte`, `tebibyte`, `pebibyte`, etc.).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandMinimum\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `min` to the full word `minimum` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandParameter\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `param` to the full word `parameter` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandPointer\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `ptr` to the full word `pointer` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandPrevious\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `prev` to the full word `previous` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandStandardInputAndOutput\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviations `stdin`, `stdout`, and `stderr` to the full words `standard input`, etc. for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandThrough\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the informal spelling `thru` to the standard word `through`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandTimeShorthands\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands time-related abbreviations (`hr`, `hrs`, `min`, `mins`, `sec`, `secs`, `ms`, `msec`, `msecs`) to their full forms (`hour`, `hours`, `minute`, `minutes`, `second`, `seconds`, `millisecond`, `milliseconds`).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandWith\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `w/` to the full word `with` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExpandWithout\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands the abbreviation `w/o` to the full word `without` for clarity.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Expat\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the mistake of writing `expat` as two words.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Expatriate\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes the misinterpretation of `expatriate`, ensuring the correct term is used for individuals residing abroad.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExplainLikeImFive\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExplanationMark\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `explanation mark/point` to `exclamation mark/point`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ExtendOrExtent\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `extend` to `extent` when the context is a noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FaceFirst\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `face first` is correctly hyphenated as `face-first` when used before `into`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FairBit\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects malapropisms of `a fair bit`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FarAndFewBetween\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `far and few between` to the standard idiom `few and far between`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FarBeIt\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags misuse of `far be it` and suggests using `from` when it is followed by `for`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FascinatedBy\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures the correct prepositions are used with `fascinated` (e.g., `fascinated by` or `fascinated with`).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FastPaste\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects incorrect usage of `fast paste` or `fast-paste` and suggests `fast-paced` as the correct phrase.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FatalOutcome\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces `fatal outcome` with the more direct term `death` for conciseness.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FedUpWith\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `fed up of` to `fed up with` in dialects other than British English.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FeelFell\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects some expressions using `fell` where `feel` is correct.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FetalPosition\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures the correct use of `fetal position`, avoiding confusion with `feeble position`, which is not a standard phrase.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FewUnitsOfTimeAgo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects some expressions using `few` where `a few` is correct.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FillerWords\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Removes filler words.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FindFine\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes the common typo where writers write `find` when they mean `fine`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FirstAidKit\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects when “kid” after “aid”, “starter”, “travel”, or “tool” should be “kit” (a set of supplies).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FleshOutVsFullFledged\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects mixing up `flesh out` and `full fledged`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FoamAtTheMouth\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the idiom `foam out the mouth` to the standard `foam at the mouth`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FootTheBill\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `flip the bill` to `foot the bill`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ForALongTime\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Eliminates the incorrect merging in `for along time`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ForAWhile\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the missing article in `for while`, forming `for a while`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ForArgumentsSake\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `for argument sake` to `for argument's sake`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ForNoun\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the archaic or mistaken `fro` to `for` when followed by a noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ForTheMostPart\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `for most part` to `for the most part`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ForWhatItsWorth\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ForYourInformation\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FreePredicate\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Helps swap in `free` when a linking verb is followed by the noun `fee`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FreeRein\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures the correct use of `free rein`, avoiding confusion with `free reign`, which incorrectly suggests authority rather than freedom of action.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Freezing\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Encourages vivid writing by suggesting `freezing` instead of weaker expressions like `very cold.`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FriendOfMe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects wrong pronoun usage in constructions like `a friend of me`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.FromTheGetGo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `from the get-go` is correctly hyphenated, preserving the idiom’s meaning of ‘from the very beginning’.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Furthermore\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `furthermore`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GetRidOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects common misspellings of the idiom `get rid of`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GetUsedTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `used of` to `used to`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GildedAge\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"If referring to the period of economic prosperity, the correct term is `Gilded Age`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GoSoFarAsTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags 'go so far to' when it should be 'go so far as to' to express going beyond expectations\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GoToWar\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces `go at war` with `go to war`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GoggleBrand\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces the misspelling `goggle` when it is paired with a well-known Google service.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GoingTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `gong to` to the intended phrase `going to`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GoodAt\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks for `good in` used instead of `good at` to describe proficiency with a skill.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GoogleNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to Google products and services, make sure to treat them as proper nouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GrindToAHalt\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the idiom `grind to halt` to the standard `grind to a halt`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.GuineaBissau\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks for the correct official name of the African country.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HadOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags the unnecessary use of `of` after `had` and suggests the correct forms.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HalfAnHour\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes the eggcorn `half an our` to the accepted `half an hour`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Handful\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Keeps the palm-sized quantity expressed by `handful` as one word.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Haphazard\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `half hazard` to `haphazard`, which properly means lacking organization or being random.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HavePassed\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests `past` for `passed` in case a verb was intended.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HavePronoun\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags questions that begin with `has` followed by a pronoun that requires `have`, such as `Has we …` or `Has I …`, and suggests the correct auxiliary.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HaveTakeALook\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects either `have a look` or `take a look` to the other, depending on the dialect.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HeDos\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the misspelling `dos` after `he`, `she`, or `it`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HeartToHeard\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `heart` or `herd` to `heard` in common `have ... heard of/about` questions.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Hedging\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags hedging language (e.g. `I would argue that`, `..., so to speak`, `to a certain degree`).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HelloGreeting\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Encourages greeting someone with `hello` instead of the homophone `halo`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Henceforth\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `henceforth`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Hereby\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"`Here by` in some contexts should be `hereby`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HiddenIn\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `hidden into` to `hidden in`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HitTheNailOnTheHead\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `hit the nail in the head` to the standard `hit the nail on the head`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Holidays\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to holidays, make sure to treat them as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HolyWar\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects misspellings of `holy war`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HomeInOn\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `hone in on` to `home in on`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HopHope\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Handles common errors involving `hop` and `hope`. Ensures `hop` is used correctly in phrases like `hop on a bus` while correcting mistaken uses of `hope` in contexts where `hop` is expected.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HowItLooksLike\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `how ... looks like` to `how ... looks` or `what ... looks like`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HowMach\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Swaps `how mach` or `how match` with the correct quantifier `how much`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HowTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects the omission of `to` in constructions like `how clone / how install` and suggests `how to …`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.However\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `however`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HumanBeings\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Eliminates the incorrect possessive/plural usage like `human's beings` or `humans beings`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HumanLife\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Changes `human live` to `human life`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HungerPang\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `hunger pain` to `hunger pang`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.HyphenateNumberDay\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures a hyphen is used in `X-day` when it is part of a compound adjective, such as `4-day work week`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.IAm\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes the incorrect spacing in `I a m` to properly form `I am`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.IAmAgreement\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `I are` to `I am`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.IDo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `I does` to `I do`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.IDontKnow\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.IfIRecallCorrectly\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.IfIUnderstandCorrectly\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.IfWouldve\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `if I would've done` etc. to `if I had done` etc.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.IfYouKnowYouKnow\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ImitateFrom\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"After `imitate ...`, idiomatic phrasing points to the inspiration with `of` instead of `from`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InAHurry\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `in hurry` to `in a hurry`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InAWhile\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the missing article in `in while`, forming `in a while`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InAnyWay\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects ungrammatical `in anyway` to `in any way`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InCaseYouMissedIt\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InDetail\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects unidiomatic plural `in details` to `in detail`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InLieuOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the misspelling `in lue of` to `in lieu of`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InMyHumbleOpinion\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InMyOpinion\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InNeedOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `in need for` to `in need of`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InOfItself\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects nonstandard `in of itself` to standard `in itself` or `in and of itself`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InOnTheCards\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects either `in the cards` or `on the cards` to the other, depending on the dialect.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InRealLife\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InThe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects and corrects a spacing error where `in the` is mistakenly written as `int he`. Proper spacing is essential for readability and grammatical correctness in common phrases.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InflectedVerbAfterTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This rule looks for `to verb` where `verb` is not in the infinitive form.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Initiatively\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects nonstandard `initiatively`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Insensitive\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests the more standard and common synonym `insensitive`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Insofar\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `insofar`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Instead\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `instead`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InsteadOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the archaic or mistaken separation `in stead of` to `instead of` in everyday usage.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Insurmountable\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests the more standard and common synonym `insurmountable`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Intact\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `intact`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InterestedIn\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures the correct preposition is used with the word `interested` (e.g. `interested in`).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.InvestIn\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"`Invest` is traditionally followed by 'in,' not `into.`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.IsKnownFor\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Typo: `known` is the correct past participle.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ItCan\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the misspelling `It cam` to the proper phrase `It can`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ItLooksLikeThat\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `it looks like that` to just `it looks like`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ItsContraction\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects places where the possessive `its` should be the contraction `it's`, including before verbs/clauses and before proper nouns after opinion verbs.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ItsPossessive\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"In English, possessive pronouns never take an apostrophe. Use `its` to show ownership (e.g. “its texture”) and avoid confusing it with `it's`, which always means “it is” or “it has.”\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Itself\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `itself`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.IveGotTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the slip `I've go to` to the idiomatic `I've got to`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.JawDropping\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `jar-dropping` to `jaw-dropping`, ensuring the intended meaning of something that causes amazement.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.JealousOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Encourages the standard preposition after `jealous`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.JetpackNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensure proper capitalization of Jetpack-related terms.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.JohnsHopkins\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Recommends the proper spelling `Johns Hopkins`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.JustDeserts\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `just deserts` is used correctly, preserving its meaning of receiving an appropriate outcome for one's actions.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Keystroke\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `keystroke`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Keystrokes\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `keystrokes`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.KindOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `kinda of` to `kind of`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.KindRegards\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Changes `kid regards` to `kind regards`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.KindSortOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags `kind if` or `sort off` that stand before qualifiers so the filler `of` stays intact.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Koreas\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to the nations, make sure to treat them as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Laos\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to provinces and cities in Laos, make sure to treat them as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Laptop\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `laptop`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LastButNotLeast\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects common errors in the phrase `last but not least`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LastDitch\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects wrong variations of the idiomatic adjective `last-ditch`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LastNight\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags `yesterday night` and suggests the standard phrasing `last night`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LaughOfAt\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Warns when `laugh` takes `of` before a person or pronoun and nudges writers toward the conventional `at`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LayoutVerb\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags nonstandard verb forms of `layout` (like `layouted` and `layouting`) and suggests the standard English verb forms (`laid out` and `laying out`).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LeadRiseTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `leads rise to` to `gives rise to`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LeaveToFor\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When describing travel plans that include a destination and a time frame, prefer `leave for a destination` instead of `leave to a destination`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LeftRightHand\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `left hand` and `right hand` are hyphenated when used as adjectives before a noun, such as in `left-hand side` or `right-hand corner`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LessWorse\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests alternatives to `less/least worse/worst` for more standard, clearer comparisons.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LetAlone\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Changes `let along` to `let alone`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LetToDo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects extraneous `to` after `let`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LetsConfusion\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"It's often hard to determine where the subject should go with the word `let`. This rule attempts to find common errors with redundancy and contractions that may lead to confusion for readers.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LikeAsIf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects redundant `like as if` to `like` or `as if`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LikeThePlague\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `like a plague` to `like the plague`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LikeTheresNoTomorrow\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `like no tomorrow` to `like there's no tomorrow`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LikelyHood\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Treat the split tokens as one compound word (`likelihood`) whenever the adjective `likely` precedes `hood`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Likewise\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `likewise`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LinesOfCode\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects pluralizing the wrong noun in `lines of code`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LitotesDirectPositive\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Offers direct-positive alternatives when double negatives might feel heavy.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LongSentences\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This rule looks for run-on sentences, which can make your work harder to grok.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LookDownOnesNose\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `look one's nose down` to `look down one's nose`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LookingForwardTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This rule identifies instances where the phrase `looking forward to` is followed by a base form verb instead of the required gerund (verb + `-ing` form).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LooksLikes\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This rule turns `looks likes`, `looked likes`, and `looking likes` into the idiomatic `look ... like`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.LowHangingFruit\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects nonstandard variants of `low-hanging fruit`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MakeDoWith\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `make due` to `make do` when followed by `with`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MakeItSeem\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `make it seems` to `make it seem`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MakeSense\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `make senses` to `make sense`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Malaysia\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to the states of Malaysia and their capitals, make sure to treat them as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ManagerialReins\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `managerial reigns` to the idiomatic `managerial reins`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MassNouns\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects mass nouns used as countable nouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MercedesBenzHyphen\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Connect the separate words `Mercedes` and `Benz` whenever they appear together so the brand stays consistent with its official styling.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MergeWords\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Accidentally inserting a space inside a word is common. This rule looks for valid words that are split by whitespace.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MetaNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to Meta products and services, make sure to treat them as proper nouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MicrosoftNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to Microsoft products and services, make sure to treat them as proper nouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Middleware\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `middleware`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MissingDeterminer\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects likely missing determiners in common request phrases and offers to insert one where necessary.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MissingPreposition\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Locates potentially missing prepositions.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MissingTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags verbs and adjectives like `need`, `want`, or `ready` that are missing `to` before an infinitive.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Misspell\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `misspell` and its inflected forms are written as a single word.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Misunderstand\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `misunderstand`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Misunderstood\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `misunderstood`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Misuse\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `misuse`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Misused\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `misused`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MixedBag\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `mixed bad` to `mixed bag`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ModalBeAdjective\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for `be` missing between a modal verb and adjective.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ModalOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects `of` mistakenly used with `would`, `could`, `should`, etc.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ModalSeem\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects modal verbs followed by `seen` before adjectives and suggests `seem` or `be`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Months\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects months written with a lowercase first letter.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Monumentous\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Advises using `momentous` or `monumental` instead of `monumentous` for serious usage.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MootPoint\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `mute` to `moot` in the phrase `moot point`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MoreAdjective\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for comparative adjective constructions with `more` than could use inflected forms.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MoreBetter\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Finds redundant paring of `more` or `most` with adjectives already in the comparative or superlative form.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MoreThatLikely\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the common typo `more that likely` to `more than likely`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MostNumber\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `most number` and `most amount`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MostOfTheTimes\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `a lot of the times` and `most of the times` to use singular `time`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Multicore\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `multicore`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Multimedia\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `multimedia`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MultipleFrequencyAdverbs\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for adjacent adverbs of frequency, which will be either redundant or contradictory.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MultipleSequentialPronouns\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When editing work to change point of view (i.e. first-person or third-person) it is common to add pronouns while neglecting to remove old ones. This rule catches cases where you have multiple disparate pronouns in sequence.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Multithreading\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `multithreading`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.MyHouse\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes the typo `mu house` to `my house`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Myself\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `myself`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NailOnTheHead\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces hat/had/hit/hid in the idiom `nail on the head` with `head`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NationalCapitals\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to national capitals, make sure to treat it as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NeedHelp\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Changes `ned help` to the correct `need help`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NeedToNoun\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags `need to` when it is immediately followed by a noun, which usually means the infinitive verb is missing.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NerveRacking\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects common misspellings and missing hyphen in `nerve-racking`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NervousWreck\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests using `nervous wreck` when referring to a person's emotional state.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NeverMind\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NoFrenchSpaces\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Stops users from accidentally inserting French spaces.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NoLonger\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `not longer` when it should be `no longer`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NoMatchFor\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"No match for\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NoOxfordComma\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": false,\n\t\t\t\t\t\"description\": \"The Oxford comma is one of the more controversial rules in common use today. Enabling this lint checks that there is no comma before `and`, `or` or `nor` when listing out more than two ideas.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NobelPeacePrize\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the frequent typos that swap the Nobel/Peace/Prize spelling when people mention the prize.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Nobody\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `nobody`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NominalWants\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures you use the correct `want` / `wants` after a nominal.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Nonetheless\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `nonetheless`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NorModalPronoun\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the order of the pronoun and modal verb after `nor`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NotBeAfterNot\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Removes the redundant linking verb that sneaks in between `not` and the predicate after a conjugated `be`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NotIn\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces `no in` with `not in`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NotOnly\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `no only` to `not only` before forms of `to be`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NotOnlyInversion\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `not only it is` to `not only is it`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NotTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `no to` to `not to`, ensuring proper negation.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NotablePlaces\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensure proper capitalization of notable places that are significant regional centers, travel destinations, or have international importance.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Nothing\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `nothing`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Notwithstanding\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `notwithstanding`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NounVerbConfusion\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Handles common confusions between related nouns and verbs (e.g., 'advice/advise', 'breath/breathe')\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NowWay\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `now way` to `no way` in high-confidence contexts while avoiding comparative contexts like `now way too`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Nowhere\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `nowhere`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.NumberSuffixCapitalization\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"You should never capitalize number suffixes.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ObsessPreposition\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures valid prepositions are used with `obsess`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OceansAndSeas\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to the world's oceans and seas, ensure they are treated as proper nouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OfCourse\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects common mistaken forms of `of course`, including `of curse`, `off course`, and `ofcourse`, while ignoring valid phrases like `kind of curse`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OffTheCuff\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `off-the-cuff` is correctly hyphenated.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OhMyGod\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OldWivesTale\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `old wise tale` to `old wives' tale`, preserving the phrase’s meaning as an unfounded traditional belief.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OldestInTheBook\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects the idiom `oldest X in the books`, which should use singular `book`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OnFirstGlance\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The standard idiom starts with `at` for quick appraisals, so swap the preposition to keep the phrase idiomatic.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OnFloor\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This rule identifies incorrect uses of the prepositions `in` or `at` when referring to locations inside a building and recommends using `on the floor` instead.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OnSecondThought\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces the nonstandard `on second though` with the common idiom `on second thought` to indicate reconsideration.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OnTheSpurOfTheMoment\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures the correct use of `on the spur of the moment`, avoiding nonstandard variations.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OnTopOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `ontop of` and `in top of` to `on top of`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OnceInAWhile\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects two common malapropisms of `once in a while`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OnceOrTwice\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects the mistaken phrase `once a twice` and suggests `once or twice`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OneAndTheSame\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This linter flags instances of the nonstandard phrase `one in the same`. The correct, more accepted form is `one and the same`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OneFellSwoop\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `one foul swoop` to `one fell swoop`, preserving the phrase’s original meaning of sudden and complete action.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OneHanded\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Treat 'one handed' and 'two handed' as single adjectives before nouns so the measurement stays attached to 'handed'.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OneOfTheSingular\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects 'one of the [singular]' to 'one of the [plural]'\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OpenCompounds\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects compound words that should be written as two words.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OpenTheLight\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects using `open` instead of `turn on` or `switch on`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OperatingSystem\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `operating system` is used correctly instead of `operative system`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OrthographicConsistency\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures word casing matches the dictionary's canonical orthography.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OughtToBe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects the mistaken `out to be` and suggests `ought to be`, while ignoring legitimate phrasal-verb uses such as `turn out to be` and `make it out to be`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OutOfDate\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures that the phrase `out of date` is written with a hyphen as `out-of-date` when used as a compound adjective.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OutOfSync\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `out of sink` to `out of sync` or `out of synch`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Overall\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `overall`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Overclocking\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `overclocking`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Overload\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `overload`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Overnight\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `overnight`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.OxfordComma\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The Oxford comma is one of the more controversial rules in common use today. Enabling this lint checks that there is a comma before `and`, `or`, or `nor` when listing out more than two ideas.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Oxymorons\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags oxymoronic phrases (e.g. `amateur expert`, `increasingly less`, etc.).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PartsOfSpeech\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects pluralizing the wrong noun in `part of speech`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PassersBy\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `passerbys` and `passer-bys` to `passersby` or `passers-by`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PasswordProtectedHyphen\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Keeps the compound adjective together before nouns like folders, files, or web pages so the dependency between them is clear.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PeaceOfMind\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `piece of mind` to `peace of mind`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PedalToTheMetal\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `pedal to the medal` to the standard idiom `pedal to the metal`, meaning to accelerate at full speed.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PeekBehindTheCurtain\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `peak behind the curtain` to `peek behind the curtain`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PerSe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects common misspellings of `per se`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PhrasalVerbAsCompoundNoun\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This rule looks for phrasal verbs written as compound nouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Piggyback\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `piggy bag` to `piggyback`, which is the proper term for riding on someone’s back or using an existing system.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PiqueInterest\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects incorrect usage of `peak` or `peek` when the intended word is `pique`, as in the phrase `you've peaked my interest`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PleaseTakeALook\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PluralDecades\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags plural decades erroneously using an apostrophe before the `s`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PluralWrongWordOfPhrase\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects noun phrases that pluralize the last noun instead of the main noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PocketCastsNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensure proper capitalization of Pocket Casts and Pocket Casts Plus as brand names.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PointsOfView\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects pluralizing the wrong noun in `point of view`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PortAuPrince\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks for the correct official name of the capital of Haiti.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PortoNovo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks for the correct official name of the capital of Benin.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PossessiveNoun\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": false,\n\t\t\t\t\t\"description\": \"Use an apostrophe and `s` to form a noun’s possessive.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PossessiveYour\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The possessive form of `you` is more likely before nouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Postpone\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `postpone`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PrayingMantis\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `preying mantis` to `praying mantis`, ensuring accurate reference to the insect’s characteristic pose.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ProgressiveNeedsBe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects the ungrammatical patterns `<pronoun> have …ing` (e.g., `I have …ing`) and `<pronoun>'ve …ing` (e.g., `I've …ing`) and suggests either the present progressive (e.g., `I'm/We're/You're/They're …`) or the present perfect progressive (e.g., `I/We/You/They have been …` or `I've/We've/You've/They've been …`).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PronounAre\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Spots the letter `r` used in place of `are` or `you're` after plural first- or second-person pronouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PronounContraction\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Choosing when to contract pronouns is a challenging art. This rule looks for faults.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PronounInflectionBe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks subject–verb agreement for the verb `be`. Third-person singular pronouns (`he`, `she`, `it`) require the singular form `is`, while the plural pronoun `they` takes `are`. The linter flags mismatches such as `He are` or `They is` and offers the correct concord.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PronounKnew\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects when “new” following a pronoun (optionally with an adverb) is a typo for the past tense “knew.”\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.PronounVerbAgreement\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures pronouns agree with their verbs.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Proofread\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `proofread`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ProperNouns\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensure proper capitalization of proper nouns.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.QuantifierNeedsOf\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects missing `of` after the quantifier “a couple” when it precedes a plural noun\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.QuantifierNumeralConflict\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects quantifier-numeral conflicts\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.QuiteMany\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `quite many` to `quite a few`, which is the more natural and idiomatic phrase in standard English. `Quite many` is considered nonstandard usage.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.QuiteQuiet\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Helps distinguish between ‘quiet’ (making ‘little noise’) and ‘quite’ (meaning ‘rather’).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.QuoteSpacing\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks that quotation marks are preceded or succeeded by whitespace.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RainbowColoredHyphen\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When rainbow-colored or cream-colored describe a noun, replace the space between the color words with a hyphen to keep the modifier cohesive.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RallyToReally\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Catches the typo where `rally` sneaks into `be + ...ing` constructions, including common contractions.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RapidFire\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks to ensure writers hyphenate `rapid-fire`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RealTrouper\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures the correct use of `real trouper`, distinguishing it from `trooper`, which refers to a soldier or police officer.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Really\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ReasonForDoing\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `reason of doing` to `reason for doing` etc.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RedundantAcronyms\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Identifies redundant acronyms where the last word repeats the last letter's meaning (e.g., `ATM machine` → `ATM` or `automated teller machine`).\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RedundantAdditiveAdverbs\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects redundant additive adverbs.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RedundantIIRC\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags redundant use of 'if' or 'correctly' with `IIRC`, since `IIRC` already stands for 'if I recall correctly'.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RedundantPretty\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"`Pretty` is redundant when modifying `decent`. Use `decent` alone.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RedundantProgressiveComparative\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects redundant comparatives like `increasingly more` and `increasingly less`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RedundantSuperlatives\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Simplifies redundant double positives like `most optimal` to the base form.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RedundantThat\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"There is rarely a situation where `that that` cannot be condensed into a single token.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Regardless\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `regardless`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Regionalisms\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Regionalisms\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RegularIrregulars\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces wrong regular inflections of words with their correct irregular forms.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RepeatedWords\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This rule looks for repetitions of words that are not homographs.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Respond\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags uses of the noun `response` where the verb `respond` is needed after an auxiliary.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ResponsibilityFor\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `take/assume/claim responsibility of` to `take/assume/claim responsibility for`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RifeWith\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `ripe with` to `rife with`, preserving the phrase’s meaning of being filled with something, often undesirable.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RightClick\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Hyphenates right-click style mouse commands.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RiseTheQuestion\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `rise the question` to `raise the question`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RiseTheRanks\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the nonstandard phrase `rise the ranks` to the standard `rise through the ranks` or `rise from the ranks`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RoadMap\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects when `roadmap` is used instead of `road map`, prompting the correct spacing.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RollerSkated\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Encourages hyphenating the past tense of `roller-skate`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.RulesOfThumb\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects pluralizing the wrong noun in `rule of thumb`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SafeToSave\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects `safe` (adjective) when `save` (verb) is intended after modal verbs like `could` or `should`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SameAs\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the incorrect phrase `same then` to the standard `same as`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SaveToSafe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `save to <verb>` to `safe to <verb>` after a form of `be`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ScantilyClad\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes `scandally clad` to `scantily clad`, ensuring clarity in describing minimal attire.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ScapeGoat\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `scape goat` to `scapegoat`, which is the proper term for a person blamed for others' failures.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SeamToSeem\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `seam` to `seem` when used as a verb meaning `to appear` or `to give the impression`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SendAnEmailTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces the verbose phrase `send an email to` with the concise verb `email`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SentenceCapitalization\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The opening word of a sentence should almost always be capitalized.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ShootOneselfInTheFoot\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects nonstandard variants of 'shoot oneself in the foot'.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Shortcoming\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `shortcoming`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Shortcomings\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `shortcomings`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ShutdownVerb\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Keeps `shutdown` as a noun when it stands alone but swaps it for the phrasal verb `shut down` whenever an auxiliary precedes it.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SimilarLike\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The adjective 'similar' pairs with the preposition 'to', so never follow it with 'like'.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SimpleGrammatical\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `simply grammatical` to `simple grammatical` for proper adjective usage.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SimplePastToPastParticiple\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects simple past tense verbs to past participle after auxiliary verbs like \\\"have\\\" or \\\"be\\\".\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SinceDuration\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects the use of 'since' with a duration instead of a point in time.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SingleBe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Removes adjacent duplicate inflections of `be`, including contracted forms followed by another `be` verb.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SneakingSuspicion\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Changes `sneaky suspicion` to `sneaking suspicion`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SomeOfThe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Quantity words such as `some` normally take `of` before a definite article. Including `of` signals that you mean a subset of a larger set, preventing a momentary stumble in comprehension.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SomeWithoutArticle\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects the redundant article in front of `some` and suggests more natural phrasing.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Somebody\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `somebody`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SomebodyElses\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `somebody else's` when the `'s` is in the wrong place.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Somehow\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `somehow`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Someone\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `someone`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SomethingIs\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags forms like `somethings` before progressive verbs and suggests using `something's` or `something is`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SomewhatSomething\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags the phrase `somewhat of a` in favor of `something of a`, which can be considered more traditional.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Somewhere\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `somewhere`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SoonToBe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Hyphenates `soon-to-be` when it appears before a noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SoonerOrLater\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes the improper phrase `sooner than later` by suggesting standard alternatives.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SoughtAfter\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Correct `sort after` to `sought after`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Spaces\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Words should be separated by at most one space.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SpecialAttention\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Changes `spacial attention` to `special attention`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SpellCheck\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks and provides corrections for misspelled words.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SpelledNumbers\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": false,\n\t\t\t\t\t\"description\": \"Most style guides recommend that you spell out numbers less than ten.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SpinalChord\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The words `spinal`, `vocal`, `umbilical`, and `electrical` are followed by `cord`, so replace accidental `chord`/`chords`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SplitWords\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Finds missing spaces in improper compound words.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Starving\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Encourages vivid writing by suggesting `starving` instead of weaker expressions like `very hungry.`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.StateOfTheArt\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects incorrect usage of `state of art` and suggests `state of the art` as the correct phrase.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.StatuteOfLimitations\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `statue of limitations` to `statute of limitations`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.StrikeChord\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The phrase about resonating with someone is spelled with a chord, not a cord, so fix the typo and keep the idiom intact.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SubjectPronoun\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes sentences that start with `me and X` by putting the proper noun first and using `I`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SubjunctiveWasToWere\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures proper use of the subjunctive mood in counterfactual conditional statements starting with `if only` or `I wish`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SufficeItToSay\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `suffice to say` to `suffice it to say`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.SupposedTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes `suppose to` to the correct `supposed to`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TakeALookTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `take a look to`/`have a look to` to correctly use `at`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TakeItPersonally\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `take it personal` to `take it personally`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TakeMedicine\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Encourages pairing medicine-related nouns with verbs like `take` or `swallow` instead of `eat`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TalkToYouLater\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThanksALot\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the missing article in `thanks lot`, forming `thanks a lot`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThatChallenged\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `the challenged` to `that challenged` for proper relative clause usage.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThatThan\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the typo `that` to `than` in comparisons.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThatThis\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes `the this` to the correct phrase `that this`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThatWhich\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Repeating the word \\\"that\\\" is often redundant. The phrase `that which` is easier to read.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.The\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes especially common misspellings of the word `the`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TheAnother\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `the another`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TheDifferenceBetween\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `the different(s) between to `the difference between`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TheHowWhy\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Removes the extra `the` from expressions like `the how`, skipping `how to` and `who's who`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TheMy\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags the definite article used together with a possessive.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThePointFor\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `the point for` to `the point of`\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TheProperNounPossessive\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks for redundant `the` before possessive proper noun such as `The London's population`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TheirToThere\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `their` when the intended meaning is `there`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TheirToTheyre\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `their` when the intended meaning is `they're`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThenThan\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects mixing up `then` and `than`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.There\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `there`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThereToTheir\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `there` when the intended meaning is `their`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Therefore\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `therefore`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Theres\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces the mistaken possessive `their's` before a determiner with the contraction `there's`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Thereupon\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `thereupon`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThesesThese\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the common misspelling of `these` as `theses`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TheyToThem\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Converts `they` to `them` whenever the pronoun serves as an object after common prepositions or actions that take direct objects.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TheyreConfusions\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects apostrophe and locative edge cases that are awkward to model with standard contraction checks.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TheyreToTheir\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `they're` when the intended meaning is `their`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThingThink\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the typo `thing` when it should be `think`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThisTypeOfThing\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks that the parts of `this/these type(s) of thing(s)` agree in grammatical number\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThoughThought\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `though` when it's a typo for `thought`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThoughtProcess\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Changes `though process` to `thought process`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThreatenVerb\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Normalize `threat` to `threaten` when it is used after modals (or their contractions) because the noun form is being mistaken for a verb.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThrowAway\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Finds the typo `through away` and suggests `throw away` or `threw away` instead.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ThrowRubbish\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks for throwing rubbish rather than throwing it away.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TickingTimeClock\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `ticking time clock` to `ticking time bomb` for idiomatic urgency or `ticking clock` otherwise.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToAdverb\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags duplicated `to` around certain adverbs (e.g. `to never to`) and offers fixes that keep only one `to`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToBackOut\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Treats `to backout` as a mistyped infinitive and prefers the two-word verb.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToBeHonest\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Expands an initialism.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToDoHyphen\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `to-do` is correctly hyphenated.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToGreatLengths\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `through great lengths` to `to great lengths`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToLoseTooLoose\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects mixing up `to` with `too` and `lose` with `loose`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToSomeDegree\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `in some degree` to `to some degree`, meaning to a certain extent.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToTheMannerBorn\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `to the manor born` to `to the manner born`, ensuring the intended meaning of being naturally suited to a way of life.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToTooIdioms\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `to` used instead of `too`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToTwoToo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects homophone confusion between `to` and `too`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ToWorryAbout\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes incorrect use of `to worried about`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TongueInCheek\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the idiom when `and` replaces the needed preposition.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TooTo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `too` used instead of `to`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Touristic\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Suggests replacing the uncommon word `touristic` with `tourist`, `tourism`, and/or `touristy`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Towards\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Removes redundant `to` before `towards`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TransposedSpace\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for a space one character too early or too late between words.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TrialAndError\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `trail` to `trial` in `trial and error`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TrueToWord\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Normalizes phrasing around `true to <possessive>` so it follows the conventional `true to one's word`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TryOnesHandAt\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `try one's hands at` to `try one's hand at`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TuffEnough\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The adjective `tough` pairs with words like `enough` or `like`, so correct the common typo `tuff` in those constructions.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TumblrNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensure proper capitalization of Tumblr-related terms.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.TurnItOff\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Fixes the mistake in the phrase `turn it off`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.USUniversities\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensure proper capitalization of major universities in the United States.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.UnclosedQuotes\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Quotation marks should always be closed. Unpaired quotation marks are a hallmark of sloppy work.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Underclock\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `underclock`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.UnitedOrganizations\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When referring to national or international organizations, make sure to treat them as a proper noun.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Unless\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `unless if`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.UpdatePlaceNames\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"This rule looks for deprecated place names and offers to update them.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Upset\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `upset`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Upward\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `upward`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.UseTitleCase\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Prompts you to use title case in relevant headings.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.VerbToAdjective\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for article-led gerund noun phrases like `a fully accounting of`, where an adjective is more likely than an adverb.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.VeryKnown\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"`very well-known` (or `well-known`) is the standard way to describe something widely recognized, so we flag the uncommon `very known` word pair.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.VeryLess\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `very less`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.VeryUnique\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags phrases like `very unique`, `pretty unique`, etc., and suggests using `unique` alone or a more precise adjective such as `special`, `rare`, or `unusual`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ViceVersa\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Recommends writing ‘vice versa’ without hyphens.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ViciousCircle\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects and standardizes common errors and variants of `vicious/virtuous circle`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ViciousCircleOrCycle\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": false,\n\t\t\t\t\t\"description\": \"Corrects common errors in `vicious/virtuous circle/cycle`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.ViciousCycle\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": false,\n\t\t\t\t\t\"description\": \"Corrects and standardizes common errors and variants of `vicious/virtuous cycle`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WantBe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects incorrect usage of `want be` and suggests `won't be` or `want to be` based on context.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WasAloud\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `was aloud` and `were aloud` are corrected to `was allowed` or `were allowed` when referring to permission.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WaveFunction\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Identifies the mistake of merging `wave` and `function` into one word. In quantum mechanics, a `wave function` (written as two words) describes the mathematical function that represents the quantum state of a particle or system. Correct usage is crucial for clear and accurate scientific communication.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WayTooAdjective\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces the preposition `to` with the adverb `too` after `way` when followed by an adjective (e.g. `way too fast`)\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WellBeing\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `well-being` is correctly hyphenated.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WellEducated\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Replaces `good-educated` with the accepted compound `well-educated`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WellKept\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags `highly-kept` and recommends `well-kept` as an alternative.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Whereas\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"The Whereas rule is designed to identify instances where the phrase `where as` is used in text and suggests replacing it with the single word `whereas`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Whereupon\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `whereupon`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WhetYourAppetite\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures `whet your appetite` is used correctly, distinguishing it from the incorrect `wet` variation.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WholeEntire\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the redundancy in `whole entire` to `whole` or `entire`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WhomSubjectOfVerb\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Detects whom and its variants used as the subject of a verb instead of who.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WidelyAccepted\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Flags `wide accepted`, `wide acceptable`, or `wide used` and recommends switching `wide` to the adverb `widely`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Widespread\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `widespread`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WillContain\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Incorrect verb form: `will` should be followed by the base form `contain`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WinPrize\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Catches the mix-up between `price`/`prise` and `prize` after the verb `win`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WishCould\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Checks for `can` being used after `wish` when it should be `could`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Without\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `without`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WithoutOut\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"When writers accidentally type `without out`, Harper can collapse the two words back into the single preposition.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WordPressDotcom\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Ensures correct capitalization of WordPress.com. This rule verifies that the official stylization of WordPress.com is used when referring to the hosting provider.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.Worldwide\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Looks for incorrect spacing inside the closed compound `worldwide`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WorseOrWorst\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `worse` and `worst` used in contexts where the other belongs.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WorstCaseScenario\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `worst-case scenario` when the hyphen is missing or `worse` is used instead of `worst`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WorthToDo\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `worth to` + a verb to `worth` + the gerund of the verb.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WouldNeverHave\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `would/could have never` to `never would/could have`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WreakHavoc\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects the eggcorn `wreck havoc` to `wreak havoc`, which is the proper term for causing chaos or destruction.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WrongApostrophe\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects semicolons or acute accents typed instead of apostrophes.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WroteToRote\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `by wrote` to `by rote`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.WroughtIron\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"`Wrought iron` is low-carbon, malleable iron used for decorative work; variants like `rod iron` or `rot iron` are phonetic misspellings that may confuse readers.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.YeaToYeah\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `yea` to `yeah`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.YehToYeah\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Corrects `yeh` to `yeah`.\"\n\t\t\t\t},\n\t\t\t\t\"harper.linters.YourPredicateAdjective\": {\n\t\t\t\t\t\"scope\": \"resource\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"default\": true,\n\t\t\t\t\t\"description\": \"Catches cases where a predicate adjective follows `your`, `yr`, `ur`, or `ya` and suggests the proper contraction so the sentence states how someone is feeling or behaving.\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\"scripts\": {\n\t\t\"watch:esbuild\": \"node esbuild.cjs --watch\",\n\t\t\"watch:tsc\": \"tsc --noEmit --watch\",\n\t\t\"pretest\": \"tsc && node esbuild.cjs\",\n\t\t\"test\": \"node build/tests/runTests.js\",\n\t\t\"vscode:prepublish\": \"tsc --noEmit && node esbuild.cjs --production\",\n\t\t\"package\": \"vsce package --no-dependencies\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/jasmine\": \"^5.1.7\",\n\t\t\"@types/node\": \"catalog:\",\n\t\t\"@types/vscode\": \"^1.96.2\",\n\t\t\"@vscode/test-electron\": \"^2.3.9\",\n\t\t\"@vscode/vsce\": \"^3.3.0\",\n\t\t\"esbuild\": \"^0.25.0\",\n\t\t\"jasmine\": \"^5.6.0\",\n\t\t\"typescript\": \"catalog:\"\n\t},\n\t\"dependencies\": {\n\t\t\"vscode-languageclient\": \"^9.0.1\"\n\t}\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/extension.ts",
    "content": "import type { ExtensionContext, QuickPickItem, StatusBarItem } from 'vscode';\nimport { ConfigurationTarget, commands, StatusBarAlignment, Uri, window, workspace } from 'vscode';\nimport type { Executable, LanguageClientOptions } from 'vscode-languageclient/node';\nimport { LanguageClient, ResponseError, TransportKind } from 'vscode-languageclient/node';\n\n// There's no publicly available extension manifest type except for the internal one from VS Code's\n// codebase. So, we declare our own with only the fields we need and have. See:\n// https://stackoverflow.com/a/78536803\ntype ExtensionManifest = {\n\tactivationEvents: string[];\n\tcontributes: { configuration: { properties: { [key: string]: object } } };\n};\n\nlet client: LanguageClient | undefined;\nconst serverOptions: Executable = { command: '', transport: TransportKind.stdio };\nconst clientOptions: LanguageClientOptions = {\n\tmiddleware: {\n\t\tworkspace: {\n\t\t\tasync configuration(params, token, next) {\n\t\t\t\tconst response = await next(params, token);\n\n\t\t\t\tif (response instanceof ResponseError) {\n\t\t\t\t\treturn response;\n\t\t\t\t}\n\n\t\t\t\treturn [{ 'harper-ls': response[0].harper }];\n\t\t\t},\n\t\t},\n\t\texecuteCommand(command, args, next) {\n\t\t\tif (\n\t\t\t\t[\n\t\t\t\t\t'HarperAddToUserDict',\n\t\t\t\t\t'HarperAddToWSDict',\n\t\t\t\t\t'HarperAddToFileDict',\n\t\t\t\t\t'HarperIgnoreLint',\n\t\t\t\t].includes(command) &&\n\t\t\t\targs.find((a) => typeof a === 'string' && a.startsWith('untitled:'))\n\t\t\t) {\n\t\t\t\twindow\n\t\t\t\t\t.showInformationMessage('Save the file to execute this command.', 'Save File', 'Dismiss')\n\t\t\t\t\t.then((selected) => {\n\t\t\t\t\t\tif (selected === 'Save File') {\n\t\t\t\t\t\t\tcommands.executeCommand('workbench.action.files.save');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnext(command, args);\n\t\t},\n\t},\n};\n\nlet dialectStatusBarItem: StatusBarItem | undefined;\n\nexport async function activate(context: ExtensionContext): Promise<void> {\n\tserverOptions.command = getExecutablePath(context);\n\n\tlet manifest: ExtensionManifest;\n\ttry {\n\t\tmanifest = JSON.parse(\n\t\t\t(await workspace.fs.readFile(Uri.joinPath(context.extensionUri, 'package.json'))).toString(),\n\t\t);\n\t} catch (error) {\n\t\tshowError('Failed to read manifest file', error);\n\t\treturn;\n\t}\n\n\tclientOptions.documentSelector = manifest.activationEvents\n\t\t.filter((e) => e.startsWith('onLanguage:'))\n\t\t.flatMap((e) => {\n\t\t\tconst language = e.split(':')[1];\n\t\t\treturn [\n\t\t\t\t{ language, scheme: 'file' },\n\t\t\t\t{ language, scheme: 'untitled' },\n\t\t\t];\n\t\t});\n\n\tclientOptions.outputChannel = window.createOutputChannel('Harper');\n\tcontext.subscriptions.push(clientOptions.outputChannel);\n\n\tconst configs = Object.keys(manifest.contributes.configuration.properties);\n\tcontext.subscriptions.push(\n\t\tworkspace.onDidChangeConfiguration(async (event) => {\n\t\t\tif (event.affectsConfiguration('harper.path')) {\n\t\t\t\tserverOptions.command = getExecutablePath(context);\n\t\t\t\tawait startLanguageServer();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (configs.find((c) => event.affectsConfiguration(c))) {\n\t\t\t\tawait client?.sendNotification('workspace/didChangeConfiguration', {\n\t\t\t\t\tsettings: { 'harper-ls': workspace.getConfiguration('harper') },\n\t\t\t\t});\n\t\t\t}\n\t\t}),\n\t);\n\n\tcontext.subscriptions.push(\n\t\tcommands.registerCommand('harper.languageserver.restart', startLanguageServer),\n\t);\n\n\tcontext.subscriptions.push(commands.registerCommand('harper.changeDialect', changeDialect));\n\n\tawait startLanguageServer();\n\n\t// VS Code:\n\t// <= 100 is between Copilot and Notifications.\n\t// 101..102 is between the magnifying glass and encoding\n\t// >= 103 is left of the magnifying glass\n\t// Windsurf:\n\t// 100 is just to the right of programming language - perfect!\n\t// 101 is left of line/column\n\tdialectStatusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 100);\n\tdialectStatusBarItem.tooltip = 'Harper English dialect';\n\tdialectStatusBarItem.command = 'harper.changeDialect';\n\tcontext.subscriptions.push(dialectStatusBarItem);\n\n\tcontext.subscriptions.push(\n\t\tworkspace.onDidChangeConfiguration(async (event) => {\n\t\t\tif (event.affectsConfiguration('harper.dialect')) {\n\t\t\t\tupdateDialectStatusBar();\n\t\t\t}\n\t\t}),\n\t);\n\n\tupdateDialectStatusBar();\n}\n\nfunction getExecutablePath(context: ExtensionContext): string {\n\tconst path = workspace.getConfiguration('harper').get<string>('path', '');\n\n\tif (path !== '') {\n\t\treturn path;\n\t}\n\n\treturn Uri.joinPath(\n\t\tcontext.extensionUri,\n\t\t'bin',\n\t\t`harper-ls${process.platform === 'win32' ? '.exe' : ''}`,\n\t).fsPath;\n}\n\nasync function startLanguageServer(): Promise<void> {\n\tif (client?.needsStop()) {\n\t\tif (client.diagnostics) {\n\t\t\tclient.diagnostics.clear();\n\t\t}\n\n\t\ttry {\n\t\t\tawait client.stop(2000);\n\t\t} catch (error) {\n\t\t\tshowError('Failed to stop harper-ls', error);\n\t\t\treturn;\n\t\t}\n\t}\n\n\ttry {\n\t\tclient = new LanguageClient('harper', 'Harper', serverOptions, clientOptions);\n\t\tawait client.start();\n\t} catch (error) {\n\t\tshowError('Failed to start harper-ls', error);\n\t\tclient = undefined;\n\t}\n}\n\nfunction showError(message: string, error: Error | unknown): void {\n\tlet info = '';\n\tif (error instanceof Error) {\n\t\tinfo = error.stack ? error.stack : error.message;\n\t}\n\n\twindow.showErrorMessage(message, 'Show Info', 'Dismiss').then((selected) => {\n\t\tif (selected === 'Show Info') {\n\t\t\tclientOptions.outputChannel?.appendLine('---');\n\t\t\tclientOptions.outputChannel?.appendLine(message);\n\t\t\tclientOptions.outputChannel?.appendLine(info);\n\t\t\tclientOptions.outputChannel?.appendLine(\n\t\t\t\t'If the issue persists, please report at https://github.com/automattic/harper/issues',\n\t\t\t);\n\t\t\tclientOptions.outputChannel?.appendLine('---');\n\t\t\tclientOptions.outputChannel?.show();\n\t\t}\n\t});\n}\n\nfunction updateDialectStatusBar(): void {\n\tif (!dialectStatusBarItem) return;\n\n\tconst dialect = workspace.getConfiguration('harper').get<string>('dialect', '');\n\tif (dialect === '') return;\n\n\tconst flagAndCode = getFlagAndCode(dialect);\n\tif (!flagAndCode) return;\n\n\tdialectStatusBarItem.text = `$(harper-logo) ${flagAndCode.join(' ')}`;\n\tdialectStatusBarItem.show();\n\tconsole.log(`** dialect set to ${dialect} **`, dialect);\n}\n\nasync function changeDialect(): Promise<void> {\n\tconst dialectNames = ['American', 'British', 'Australian', 'Canadian', 'Indian'];\n\tconst dialects: QuickPickItem[] = dialectNames.map((name) => ({\n\t\tlabel: name,\n\t}));\n\n\tconst selected = await window.showQuickPick(dialects, {\n\t\tplaceHolder: 'Select Harper dialect',\n\t});\n\n\tif (selected && typeof selected !== 'string') {\n\t\tawait workspace\n\t\t\t.getConfiguration('harper')\n\t\t\t.update('dialect', selected.label, ConfigurationTarget.Global);\n\t}\n}\n\nexport function deactivate(): Thenable<void> | undefined {\n\tif (!client) {\n\t\treturn undefined;\n\t}\n\n\treturn client.stop();\n}\n\nfunction getFlagAndCode(dialect: string): string[] | undefined {\n\treturn {\n\t\tAmerican: ['🇺🇸', 'US'],\n\t\tAustralian: ['🇦🇺', 'AU'],\n\t\tBritish: ['🇬🇧', 'GB'],\n\t\tCanadian: ['🇨🇦', 'CA'],\n\t\tIndian: ['🇮🇳', 'IN'],\n\t}[dialect];\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/integration.md",
    "content": "# Integration\n\nThis sentence has grammar errorz, like this this one.\n\nOn the other hand, you'll realise that this sentence doesn't have an error if you're using British English.\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.10)\nproject(HelloWorld)\nadd_executable(HelloWorld #[[ Errorz ]] cpp.cpp)"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/c.c",
    "content": "#include <stdio.h>\n\n// Errorz\nint main() {\n  printf(\"Hello World!\\n\");\n  return 0;\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/cpp.cpp",
    "content": "import module std;\n\nint main() {\n  /* Errorz */\n  std::print(\"Hello World!\\n\");\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/cpp.h",
    "content": "// Errorz"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/csharp.cs",
    "content": "/*\n\n\t\tErrorz\n\n*/\nSystem.Console.WriteLine(\"Hello World!\");\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/dart.dart",
    "content": "void main() { /*\n                             Errorz\n */\n  print(\"Hello, World!\");\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/git-commit",
    "content": "Errorz\n\n# Please enter the commit message for your changes. Lines starting\n# with '#' will be ignored, and an empty message aborts the commit.\n#\n# On branch main\n# Changes to be committed:\n#       modified:   hello-world\n#\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/go.go",
    "content": "package main\n\nimport \"fmt\"\n\n//\t\tErrorz\nfunc main() {\n\tfmt.Println(\"Hello World!\")\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/groovy.groovy",
    "content": "// Errorz\nclass HelloWorld {\n  static void main(String[] args) {\n    println('Hello World!')\n  }\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/haskell.hs",
    "content": "main :: IO ()\n-- Errorz\nmain = putStrLn \"Hello World!\"\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/html.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\t\t<title>Hello World!</title>\n\t</head>\n\t<body>\n\t\t<h1>Errorz</h1>\n\t</body>\n</html>\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/java.java",
    "content": "public class HelloWorld {\n  /**\n   * @param args Errorz\n   */\n  public static void main(String[] args) {\n    System.out.println(\"Hello World!\");\n  }\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/javascript.js",
    "content": "console.log('Hello World!');\n// Errorz\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/javascriptreact.jsx",
    "content": "/**\n * @param {{message: string}} props Errorz\n */\nexport default function Main(props = { message: 'Hello World!' }) {\n\treturn <h1>{props.message}</h1>;\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/latex.tex",
    "content": "\\documentclass{article}\n\n\\begin{document}\n\nErrorz\n\n\\end{document}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/literate-haskell.lhs",
    "content": "\\begin{code}\nmain :: IO ()\nmain = putStrLn \"Hello World!\"\n\\end{code}\n\nErrorz\n\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/lua.lua",
    "content": "print \"Hello World!\" -- Errorz"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/nix.nix",
    "content": "\"Hello World!\"\n# Errorz\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/php.php",
    "content": "<?php\n\necho \"Hello World!\"; //        Errorz"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/plaintext",
    "content": "Errorz"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/plaintext.txt",
    "content": "\n\n\n\nErrorz\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/powershell.ps1",
    "content": "# Errorz should trigger a spellcheck diagnostic.\nWrite-Output \"Hello\"\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/python.py",
    "content": "print(\"Hello World!\")\n# Errorz"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/ruby.rb",
    "content": "puts \"Hello World!\" =begin\n\n\n                Errorz\n\n\n=end"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/rust.rs",
    "content": "/// Errorz\nfn main() {\n  println!(\"Hello World!\");\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/shellscript",
    "content": "#!/usr/bin/env bash\n\necho \"Hello World!\"\n# Errorz\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/shellscript.bash",
    "content": "echo \"Hello World!\"\n\n\n\n\n\n\n#        Errorz\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/shellscript.sh",
    "content": "echo \"Hello World!\" # Errorz\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/solidity.sol",
    "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.20;\n\n/// Errorz\ncontract Test {\n    uint256 internal test;\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/swift.swift",
    "content": "\n\n\n\n\n\n\n\n\n                       // Errorz\n\n\n\n\n\n\n\n\n\n\n\nprint(\"Hello, World!\")"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/toml.toml",
    "content": "[hello-world]\n# Errorz\noutput = \"Hello World!\"\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/typescript.ts",
    "content": "console.log('Hello World!'); // Errorz\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/typescriptreact.tsx",
    "content": "export default function Main({ message = 'Hello World!' }: { message: string }) {\n\treturn (\n\t\t<h1>\n\t\t\t{/* Errorz */}\n\t\t\t{message}\n\t\t</h1>\n\t);\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/typst.typ",
    "content": "= Title\n\n*Errorz*\n\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/fixtures/languages/zig.zig",
    "content": "// Errorz\nconst std = @import(\"std\");\n\npub fn main() !void {\n    try std.fs.File.stdout().writeAll(\"hello world!\\n\");\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/runTests.ts",
    "content": "import path from 'node:path';\nimport { runTests } from '@vscode/test-electron';\n\n(async () => {\n\ttry {\n\t\tawait runTests({\n\t\t\textensionDevelopmentPath: path.join(__dirname, '..', '..'),\n\t\t\textensionTestsPath: path.join(__dirname, 'suite'),\n\t\t\tlaunchArgs: [\n\t\t\t\t'--disable-extensions',\n\t\t\t\tpath.join(__dirname, '..', '..', 'src', 'tests', 'fixtures'),\n\t\t\t],\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('Failed to run tests', error);\n\t\tprocess.exit(1);\n\t}\n})();\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/suite/helper.ts",
    "content": "import type { Diagnostic, Extension } from 'vscode';\n\nimport {\n\tDiagnosticSeverity,\n\textensions,\n\tlanguages,\n\tPosition,\n\tRange,\n\tUri,\n\twindow,\n\tworkspace,\n} from 'vscode';\n\nexport async function closeAll(): Promise<void> {\n\tfor (const tabGroup of window.tabGroups.all) {\n\t\tawait window.tabGroups.close(tabGroup);\n\t}\n}\n\nexport async function activateHarper(): Promise<Extension<void>> {\n\tconst harper = extensions.getExtension('elijah-potter.harper')!;\n\n\tif (!harper.isActive) {\n\t\tawait harper.activate();\n\t}\n\n\treturn harper;\n}\n\nexport function getUri(...pathSegments: string[]): Uri {\n\treturn Uri.joinPath(Uri.file(workspace.workspaceFolders![0].uri.path), ...pathSegments);\n}\n\nexport async function openUri(uri: Uri): Promise<void> {\n\tawait window.showTextDocument(await workspace.openTextDocument(uri));\n}\n\nexport async function openUntitled(text: string): Promise<Uri> {\n\tconst document = await workspace.openTextDocument();\n\tconst editor = await window.showTextDocument(document);\n\tawait editor.edit((editBuilder) => editBuilder.insert(new Position(0, 0), text));\n\treturn document.uri;\n}\n\nexport async function setTextDocumentLanguage(uri: Uri, languageId: string): Promise<void> {\n\tconst document = await workspace.openTextDocument(uri);\n\tawait languages.setTextDocumentLanguage(document, languageId);\n}\n\nexport function createExpectedDiagnostics(\n\t...data: { message: string; range: Range; source: string; code: string }[]\n): Diagnostic[] {\n\treturn data.map((d) => ({ ...d, severity: DiagnosticSeverity.Information }));\n}\n\nexport function compareActualVsExpectedDiagnostics(\n\tactual: Diagnostic[],\n\texpected: Diagnostic[],\n): void {\n\tif (actual.length !== expected.length) {\n\t\tthrow new Error(`Expected ${expected.length} diagnostics, got ${actual.length}.`);\n\t}\n\n\tfor (let i = 0; i < actual.length; i++) {\n\t\texpect(actual[i].source).toBe(expected[i].source);\n\t\texpect(actual[i].message).toBe(expected[i].message);\n\t\texpect(actual[i].severity).toBe(expected[i].severity);\n\t\texpect(actual[i].range).toEqual(expected[i].range);\n\t}\n}\n\nexport function createRange(\n\tstartRow: number,\n\tstartColumn: number,\n\tendRow: number,\n\tendColumn: number,\n): Range {\n\treturn new Range(new Position(startRow, startColumn), new Position(endRow, endColumn));\n}\n\nfunction getActualDiagnostics(resource: Uri): Diagnostic[] {\n\treturn languages.getDiagnostics(resource).filter((d) => d.source?.includes('Harper'));\n}\n\n/** Note that this function times out if there is no change detected. */\nexport function waitForDiagnosticsChange(\n\turi: Uri,\n\tfunc?: () => Promise<void>,\n): Promise<Diagnostic[]> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst before = func ? getActualDiagnostics(uri) : [];\n\n\t\t(func || (async () => {}))().then(() => {\n\t\t\tconst delay = 50;\n\t\t\tconst limit = 20;\n\t\t\tlet counter = 0;\n\n\t\t\tconst tryCompare = () => {\n\t\t\t\tconst after = getActualDiagnostics(uri);\n\t\t\t\ttry {\n\t\t\t\t\tcompareActualVsExpectedDiagnostics(before, after);\n\n\t\t\t\t\t// after didn't change, try again\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\ttryAgain();\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// after did change, try until stabilized\n\t\t\t\t\tcounter++;\n\t\t\t\t\tif (counter < limit) {\n\t\t\t\t\t\ttryAgain();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclearTimeout(rejectTimer);\n\t\t\t\t\t\tresolve(after);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tlet tryTimer = setTimeout(tryCompare);\n\t\t\tconst tryAgain = () => {\n\t\t\t\ttryTimer = setTimeout(tryCompare, delay);\n\t\t\t};\n\n\t\t\tconst rejectTimer = setTimeout(() => {\n\t\t\t\tclearTimeout(tryTimer);\n\t\t\t\treject('No change of diagnostics detected.');\n\t\t\t}, 4000);\n\t\t});\n\t});\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/suite/index.ts",
    "content": "import path from 'node:path';\nimport Jasmine from 'jasmine';\n\nexport async function run(): Promise<void> {\n\tconst jasmine = new Jasmine();\n\tjasmine.exitOnCompletion = false;\n\tjasmine.loadConfig({\n\t\tspec_dir: path.relative(process.cwd(), __dirname),\n\t\tspec_files: ['*.test.js'],\n\t\trandom: false,\n\t});\n\n\tconst result = await jasmine.execute();\n\tif (result.overallStatus !== 'passed') {\n\t\tthrow new Error('Tests failed');\n\t}\n}\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/suite/integration.test.ts",
    "content": "import type { Extension, Uri } from 'vscode';\n\nimport { ConfigurationTarget, commands, workspace } from 'vscode';\n\nimport {\n\tactivateHarper,\n\tcloseAll,\n\tcompareActualVsExpectedDiagnostics,\n\tcreateExpectedDiagnostics,\n\tcreateRange,\n\tgetUri,\n\topenUntitled,\n\topenUri,\n\tsetTextDocumentLanguage,\n\twaitForDiagnosticsChange,\n} from './helper';\n\ndescribe('Integration >', () => {\n\tlet harper: Extension<void>;\n\tlet markdownUri: Uri;\n\n\tbeforeAll(async () => {\n\t\tawait closeAll();\n\t\tharper = await activateHarper();\n\t\tmarkdownUri = getUri('integration.md');\n\t\tawait openUri(markdownUri);\n\t});\n\n\tit('runs', () => {\n\t\texpect(harper.isActive).toBe(true);\n\t});\n\n\tit('gives correct diagnostics for files', async () => {\n\t\tcompareActualVsExpectedDiagnostics(\n\t\t\tawait waitForDiagnosticsChange(markdownUri),\n\t\t\tcreateExpectedDiagnostics(\n\t\t\t\t{\n\t\t\t\t\tmessage: 'Did you mean to repeat this word?',\n\t\t\t\t\trange: createRange(2, 39, 2, 48),\n\t\t\t\t\tsource: 'Harper',\n\t\t\t\t\tcode: 'RepeatedWords',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessage: 'Did you mean to spell `errorz` this way?',\n\t\t\t\t\trange: createRange(2, 26, 2, 32),\n\t\t\t\t\tsource: 'Harper',\n\t\t\t\t\tcode: 'SpellCheck',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessage: 'Did you mean to spell `realise` this way?',\n\t\t\t\t\trange: createRange(4, 26, 4, 33),\n\t\t\t\t\tsource: 'Harper',\n\t\t\t\t\tcode: 'SpellCheck',\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t});\n\n\tit('gives correct diagnostics for untitled', async () => {\n\t\tconst untitledUri = await openUntitled('Errorz');\n\n\t\tcompareActualVsExpectedDiagnostics(\n\t\t\tawait waitForDiagnosticsChange(untitledUri),\n\t\t\tcreateExpectedDiagnostics({\n\t\t\t\tmessage: 'Did you mean to spell `Errorz` this way?',\n\t\t\t\trange: createRange(0, 0, 0, 6),\n\t\t\t\tsource: 'Harper',\n\t\t\t\tcode: 'SpellCheck',\n\t\t\t}),\n\t\t);\n\t});\n\n\tit('gives correct diagnostics when language is changed', async () => {\n\t\tconst untitledUri = await openUntitled('Errorz # Errorz');\n\n\t\tcompareActualVsExpectedDiagnostics(\n\t\t\tawait waitForDiagnosticsChange(\n\t\t\t\tuntitledUri,\n\t\t\t\tasync () => await setTextDocumentLanguage(untitledUri, 'plaintext'),\n\t\t\t),\n\t\t\tcreateExpectedDiagnostics(\n\t\t\t\t{\n\t\t\t\t\tmessage: 'Did you mean to spell `Errorz` this way?',\n\t\t\t\t\trange: createRange(0, 0, 0, 6),\n\t\t\t\t\tsource: 'Harper',\n\t\t\t\t\tcode: 'SpellCheck',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessage: 'Did you mean to spell `Errorz` this way?',\n\t\t\t\t\trange: createRange(0, 9, 0, 15),\n\t\t\t\t\tsource: 'Harper',\n\t\t\t\t\tcode: 'SpellCheck',\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\n\t\tcompareActualVsExpectedDiagnostics(\n\t\t\tawait waitForDiagnosticsChange(\n\t\t\t\tuntitledUri,\n\t\t\t\tasync () => await setTextDocumentLanguage(untitledUri, 'shellscript'),\n\t\t\t),\n\t\t\tcreateExpectedDiagnostics({\n\t\t\t\tmessage: 'Did you mean to spell `Errorz` this way?',\n\t\t\t\trange: createRange(0, 9, 0, 15),\n\t\t\t\tsource: 'Harper',\n\t\t\t\tcode: 'SpellCheck',\n\t\t\t}),\n\t\t);\n\t});\n\n\tit('updates diagnostics on configuration change', async () => {\n\t\tconst config = workspace.getConfiguration('harper.linters');\n\n\t\tcompareActualVsExpectedDiagnostics(\n\t\t\tawait waitForDiagnosticsChange(\n\t\t\t\tmarkdownUri,\n\t\t\t\tasync () => await config.update('RepeatedWords', false, ConfigurationTarget.Workspace),\n\t\t\t),\n\t\t\tcreateExpectedDiagnostics(\n\t\t\t\t{\n\t\t\t\t\tmessage: 'Did you mean to spell `errorz` this way?',\n\t\t\t\t\trange: createRange(2, 26, 2, 32),\n\t\t\t\t\tsource: 'Harper',\n\t\t\t\t\tcode: 'SpellCheck',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessage: 'Did you mean to spell `realise` this way?',\n\t\t\t\t\trange: createRange(4, 26, 4, 33),\n\t\t\t\t\tsource: 'Harper',\n\t\t\t\t\tcode: 'SpellCheck',\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\n\t\t// Set config back to default value\n\t\tawait waitForDiagnosticsChange(\n\t\t\tmarkdownUri,\n\t\t\tasync () => await config.update('RepeatedWords', true, ConfigurationTarget.Workspace),\n\t\t);\n\t});\n\n\tit('accepts British spellings when dialect is set to British', async () => {\n\t\tconst config = workspace.getConfiguration('harper');\n\n\t\tcompareActualVsExpectedDiagnostics(\n\t\t\tawait waitForDiagnosticsChange(\n\t\t\t\tmarkdownUri,\n\t\t\t\tasync () => await config.update('dialect', 'British', ConfigurationTarget.Workspace),\n\t\t\t),\n\t\t\tcreateExpectedDiagnostics(\n\t\t\t\t{\n\t\t\t\t\tmessage: 'Did you mean to repeat this word?',\n\t\t\t\t\trange: createRange(2, 39, 2, 48),\n\t\t\t\t\tsource: 'Harper',\n\t\t\t\t\tcode: 'RepeatedWords',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessage: 'Did you mean to spell `errorz` this way?',\n\t\t\t\t\trange: createRange(2, 26, 2, 32),\n\t\t\t\t\tsource: 'Harper',\n\t\t\t\t\tcode: 'SpellCheck',\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\n\t\t// Set config back to default value\n\t\tawait waitForDiagnosticsChange(\n\t\t\tmarkdownUri,\n\t\t\tasync () => await config.update('dialect', 'American', ConfigurationTarget.Workspace),\n\t\t);\n\t});\n\n\tit('excludes Markdown files when excludePatterns include *.md', async () => {\n\t\tconst config = workspace.getConfiguration('harper');\n\n\t\tcompareActualVsExpectedDiagnostics(\n\t\t\tawait waitForDiagnosticsChange(markdownUri, async () => {\n\t\t\t\tawait config.update('excludePatterns', ['*.md'], ConfigurationTarget.Workspace);\n\t\t\t}),\n\t\t\tcreateExpectedDiagnostics(),\n\t\t);\n\n\t\tawait waitForDiagnosticsChange(markdownUri, async () => {\n\t\t\t// Set config back to default value\n\t\t\tawait config.update('excludePatterns', [], ConfigurationTarget.Workspace);\n\n\t\t\t// Ideally, we can just execute `workbench.action.closeActiveEditor` then\n\t\t\t// `workbench.action.reopenClosedEditor` here and the diagnostics should reset since that\n\t\t\t// works when done manually as that triggers `textDocument/didOpen`, but when done automated,\n\t\t\t// it won't work. So, we delete, restore, then reopen the file instead.\n\t\t\tconst markdownContent = await workspace.fs.readFile(markdownUri);\n\t\t\tawait commands.executeCommand('workbench.files.action.showActiveFileInExplorer');\n\t\t\tawait commands.executeCommand('deleteFile');\n\t\t\tawait workspace.fs.writeFile(markdownUri, markdownContent);\n\t\t\tawait openUri(markdownUri);\n\t\t});\n\t});\n\n\tit('updates diagnostics when files are deleted', async () => {\n\t\tconst markdownContent = await workspace.fs.readFile(markdownUri);\n\n\t\t// Delete file through VS Code\n\t\tawait commands.executeCommand('workbench.files.action.showActiveFileInExplorer');\n\n\t\tcompareActualVsExpectedDiagnostics(\n\t\t\tawait waitForDiagnosticsChange(\n\t\t\t\tmarkdownUri,\n\t\t\t\tasync () => await commands.executeCommand('deleteFile'),\n\t\t\t),\n\t\t\tcreateExpectedDiagnostics(),\n\t\t);\n\n\t\t// Restore and reopen deleted file\n\t\tawait workspace.fs.writeFile(markdownUri, markdownContent);\n\t\tawait waitForDiagnosticsChange(markdownUri, async () => await openUri(markdownUri));\n\n\t\t// Delete file directly\n\t\tcompareActualVsExpectedDiagnostics(\n\t\t\tawait waitForDiagnosticsChange(\n\t\t\t\tmarkdownUri,\n\t\t\t\tasync () => await workspace.fs.delete(markdownUri),\n\t\t\t),\n\t\t\tcreateExpectedDiagnostics(),\n\t\t);\n\n\t\t// Restore and reopen deleted file\n\t\tawait workspace.fs.writeFile(markdownUri, markdownContent);\n\t});\n});\n"
  },
  {
    "path": "packages/vscode-plugin/src/tests/suite/languages.test.ts",
    "content": "import {\n\tcompareActualVsExpectedDiagnostics,\n\tcreateExpectedDiagnostics,\n\tcreateRange,\n\tgetUri,\n\topenUri,\n\twaitForDiagnosticsChange,\n} from './helper';\n\ndescribe('Languages >', () => {\n\t// NOTE: There's no need to activate Harper here since it was already activated in\n\t// `integration.test.ts`, which runs first.\n\n\t[\n\t\t// Uncomment when #265 is fixed.\n\t\t// { type: 'JavaScript JSX', file: 'javascriptreact.jsx', row: 1, column: 36 },\n\n\t\t// VS Code doesn't support CMake, Haskell, Literate Haskell, Nix, Solidity, TOML, and Typst files out of\n\t\t// the box. Uncomment when you figure out how to support them during testing.\n\t\t// { type: 'CMake', file: 'CMakeLists.txt', row: 2, column: 30 },\n\t\t// { type: 'Haskell', file: 'haskell.hs', row: 1, column: 3 },\n\t\t// { type: 'Literate Haskell', file: 'literate-haskell.lhs', row: 5, column: 0 },\n\t\t// { type: 'Nix', file: 'nix.nix', row: 1, column: 2 },\n\t\t// { type: 'TOML', file: 'toml.toml', row: 1, column: 2 },\n\t\t// { type: 'Typst', file: 'typst.typ', row: 2, column: 1 },\n\t\t// { type: 'Solidity', file: 'solidity.sol', row: 3, column: 4 },\n\t\t// { type: 'Zig', file: 'zig.zig', row: 0, column: 2 },\n\n\t\t{ type: 'C', file: 'c.c', row: 2, column: 3 },\n\t\t{ type: 'C++', file: 'cpp.cpp', row: 3, column: 5 },\n\t\t{ type: 'H', file: 'cpp.h', row: 0, column: 3 },\n\t\t{ type: 'C#', file: 'csharp.cs', row: 2, column: 2 },\n\t\t{ type: 'Dart', file: 'dart.dart', row: 1, column: 29 },\n\t\t{ type: 'Git Commit', file: 'git-commit', row: 0, column: 0 },\n\t\t{ type: 'Go', file: 'go.go', row: 4, column: 4 },\n\t\t{ type: 'Groovy', file: 'groovy.groovy', row: 0, column: 3 },\n\t\t{ type: 'HTML', file: 'html.html', row: 8, column: 6 },\n\t\t{ type: 'Java', file: 'java.java', row: 2, column: 17 },\n\t\t{ type: 'JavaScript', file: 'javascript.js', row: 1, column: 3 },\n\t\t{ type: 'Lua', file: 'lua.lua', row: 0, column: 24 },\n\t\t{ type: 'PHP', file: 'php.php', row: 2, column: 31 },\n\t\t{ type: 'Plaintext without extension', file: 'plaintext', row: 0, column: 0 },\n\t\t{ type: 'Plaintext with extension', file: 'plaintext.txt', row: 4, column: 0 },\n\t\t{ type: 'PowerShell', file: 'powershell.ps1', row: 0, column: 2 },\n\t\t{ type: 'Python', file: 'python.py', row: 1, column: 2 },\n\t\t{ type: 'Ruby', file: 'ruby.rb', row: 3, column: 16 },\n\t\t{ type: 'Rust', file: 'rust.rs', row: 0, column: 4 },\n\t\t{ type: 'Shellscript without extension', file: 'shellscript', row: 3, column: 2 },\n\t\t{ type: 'Shellscript with .bash extension', file: 'shellscript.bash', row: 7, column: 9 },\n\t\t{ type: 'Shellscript with .sh extension', file: 'shellscript.sh', row: 0, column: 22 },\n\t\t{ type: 'Swift', file: 'swift.swift', row: 9, column: 26 },\n\t\t{ type: 'TypeScript', file: 'typescript.ts', row: 0, column: 32 },\n\t\t{ type: 'TypeScript JSX', file: 'typescriptreact.tsx', row: 3, column: 7 },\n\t\t{ type: 'LaTeX', file: 'latex.tex', row: 4, column: 0 },\n\t].forEach((testCase) => {\n\t\tit(`gives correct diagnostics for ${testCase.type} files`, async () => {\n\t\t\tconst uri = getUri('languages', testCase.file);\n\n\t\t\tcompareActualVsExpectedDiagnostics(\n\t\t\t\tawait waitForDiagnosticsChange(uri, async () => await openUri(uri)),\n\t\t\t\tcreateExpectedDiagnostics({\n\t\t\t\t\tmessage: 'Did you mean to spell `Errorz` this way?',\n\t\t\t\t\trange: createRange(testCase.row, testCase.column, testCase.row, testCase.column + 6),\n\t\t\t\t\tsource: 'Harper',\n\t\t\t\t\tcode: 'SpellCheck',\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/vscode-plugin/tsconfig.json",
    "content": "{\n\t\"exclude\": [\"src/tests/fixtures\"],\n\t\"compilerOptions\": {\n\t\t\"module\": \"Node16\",\n\t\t\"target\": \"ES2022\",\n\t\t\"lib\": [\"ES2022\", \"DOM\"],\n\t\t\"sourceMap\": true,\n\t\t\"rootDir\": \"src\",\n\t\t\"outDir\": \"build\",\n\t\t\"strict\": true,\n\t\t\"skipLibCheck\": true\n\t}\n}\n"
  },
  {
    "path": "packages/web/.dockerignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n"
  },
  {
    "path": "packages/web/.gitignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/.sveltepress\n/package\n.env\n.env.*\n!.env.example\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n\nstatic/docs/harperjs/ref\n"
  },
  {
    "path": "packages/web/README.md",
    "content": "# Web\n\nThis directory contains the source code for [https://writewithharper.com].\n\n## Building\n\nIn order to build the site, you must first compile `harper-wasm` with:\n\n```bash\nwasm-pack build --target bundler\n```\n"
  },
  {
    "path": "packages/web/demo_wp_blueprint.json",
    "content": "{\n\t\"$schema\": \"https://playground.wordpress.net/blueprint-schema.json\",\n\t\"preferredVersions\": {\n\t\t\"php\": \"8.0\",\n\t\t\"wp\": \"6.7\"\n\t},\n\t\"meta\": {\n\t\t\"title\": \"Demo of Harper for WordPress\",\n\t\t\"description\": \"Harper is a grammar checker for people who want to write, without any fuss.\",\n\t\t\"author\": \"elijah-potter\",\n\t\t\"categories\": []\n\t},\n\t\"landingPage\": \"/wp-admin/post.php?post=4&action=edit\",\n\t\"steps\": [\n\t\t{\n\t\t\t\"step\": \"login\",\n\t\t\t\"username\": \"admin\",\n\t\t\t\"password\": \"password\"\n\t\t},\n\t\t{\n\t\t\t\"step\": \"installPlugin\",\n\t\t\t\"pluginData\": {\n\t\t\t\t\"resource\": \"url\",\n\t\t\t\t\"url\": \"https://github.com/Automattic/harper/releases/download/v0.27.0/harper.zip\"\n\t\t\t},\n\t\t\t\"options\": {\n\t\t\t\t\"activate\": true\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"step\": \"installTheme\",\n\t\t\t\"themeData\": {\n\t\t\t\t\"resource\": \"wordpress.org/themes\",\n\t\t\t\t\"slug\": \"twentytwentyfour\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"step\": \"runPHP\",\n\t\t\t\"code\": \"<?php require_once 'wordpress/wp-load.php'; wp_insert_post(array('post_title' => 'Harper, in WordPress', 'post_content' => '<!-- wp:paragraph --><p><strong>Click on the Harper button on the top right of this page to get started.</strong></p><!-- /wp:paragraph --><!-- wp:paragraph --><p>Writing on the web can be scary. Theres a lot of competition for traffic and even a small grammatical mstake can be costly to your reputation and search rankings.</p><!-- /wp:paragraph --><!-- wp:paragraph --><p>That\\\\'s why we created Harper: an plugin to save you the embarassment. it can fix typos, serial commas and overall just make your life better.</p><!-- /wp:paragraph --><!-- wp:paragraph --><p>All that while respecting your privacy. You data should never leave Wordpress until you hit \\\"Publish\\\".</p><!-- /wp:paragraph -->'));\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/web/drizzle/0000_cute_zuras.sql",
    "content": "CREATE TABLE `uninstall_feedback` (\n\t`id` int AUTO_INCREMENT NOT NULL,\n\t`feedback` text NOT NULL,\n\t`timestamp` timestamp NOT NULL DEFAULT (now()),\n\tCONSTRAINT `uninstall_feedback_id` PRIMARY KEY(`id`)\n);\n"
  },
  {
    "path": "packages/web/drizzle/0001_blushing_corsair.sql",
    "content": "CREATE TABLE `problematic_lint` (\n\t`id` int AUTO_INCREMENT NOT NULL,\n\t`is_false_positive` boolean NOT NULL,\n\t`example` text NOT NULL,\n\t`feedback` text NOT NULL,\n\t`timestamp` timestamp NOT NULL DEFAULT (now()),\n\tCONSTRAINT `problematic_lint_id` PRIMARY KEY(`id`)\n);\n"
  },
  {
    "path": "packages/web/drizzle/0002_blushing_chameleon.sql",
    "content": "ALTER TABLE `problematic_lint` ADD `rule_id` text;"
  },
  {
    "path": "packages/web/drizzle/meta/0000_snapshot.json",
    "content": "{\n\t\"version\": \"5\",\n\t\"dialect\": \"mysql\",\n\t\"id\": \"c5978949-00ad-4366-8af4-31ca63a60f87\",\n\t\"prevId\": \"00000000-0000-0000-0000-000000000000\",\n\t\"tables\": {\n\t\t\"uninstall_feedback\": {\n\t\t\t\"name\": \"uninstall_feedback\",\n\t\t\t\"columns\": {\n\t\t\t\t\"id\": {\n\t\t\t\t\t\"name\": \"id\",\n\t\t\t\t\t\"type\": \"int\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": true\n\t\t\t\t},\n\t\t\t\t\"feedback\": {\n\t\t\t\t\t\"name\": \"feedback\",\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false\n\t\t\t\t},\n\t\t\t\t\"timestamp\": {\n\t\t\t\t\t\"name\": \"timestamp\",\n\t\t\t\t\t\"type\": \"timestamp\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false,\n\t\t\t\t\t\"default\": \"(now())\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"indexes\": {},\n\t\t\t\"foreignKeys\": {},\n\t\t\t\"compositePrimaryKeys\": {\n\t\t\t\t\"uninstall_feedback_id\": {\n\t\t\t\t\t\"name\": \"uninstall_feedback_id\",\n\t\t\t\t\t\"columns\": [\"id\"]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"uniqueConstraints\": {},\n\t\t\t\"checkConstraint\": {}\n\t\t}\n\t},\n\t\"views\": {},\n\t\"_meta\": {\n\t\t\"schemas\": {},\n\t\t\"tables\": {},\n\t\t\"columns\": {}\n\t},\n\t\"internal\": {\n\t\t\"tables\": {},\n\t\t\"indexes\": {}\n\t}\n}\n"
  },
  {
    "path": "packages/web/drizzle/meta/0001_snapshot.json",
    "content": "{\n\t\"version\": \"5\",\n\t\"dialect\": \"mysql\",\n\t\"id\": \"a13c6522-4577-4493-a811-fc9a29305fcb\",\n\t\"prevId\": \"c5978949-00ad-4366-8af4-31ca63a60f87\",\n\t\"tables\": {\n\t\t\"problematic_lint\": {\n\t\t\t\"name\": \"problematic_lint\",\n\t\t\t\"columns\": {\n\t\t\t\t\"id\": {\n\t\t\t\t\t\"name\": \"id\",\n\t\t\t\t\t\"type\": \"int\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": true\n\t\t\t\t},\n\t\t\t\t\"is_false_positive\": {\n\t\t\t\t\t\"name\": \"is_false_positive\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false\n\t\t\t\t},\n\t\t\t\t\"example\": {\n\t\t\t\t\t\"name\": \"example\",\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false\n\t\t\t\t},\n\t\t\t\t\"feedback\": {\n\t\t\t\t\t\"name\": \"feedback\",\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false\n\t\t\t\t},\n\t\t\t\t\"timestamp\": {\n\t\t\t\t\t\"name\": \"timestamp\",\n\t\t\t\t\t\"type\": \"timestamp\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false,\n\t\t\t\t\t\"default\": \"(now())\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"indexes\": {},\n\t\t\t\"foreignKeys\": {},\n\t\t\t\"compositePrimaryKeys\": {\n\t\t\t\t\"problematic_lint_id\": {\n\t\t\t\t\t\"name\": \"problematic_lint_id\",\n\t\t\t\t\t\"columns\": [\"id\"]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"uniqueConstraints\": {},\n\t\t\t\"checkConstraint\": {}\n\t\t},\n\t\t\"uninstall_feedback\": {\n\t\t\t\"name\": \"uninstall_feedback\",\n\t\t\t\"columns\": {\n\t\t\t\t\"id\": {\n\t\t\t\t\t\"name\": \"id\",\n\t\t\t\t\t\"type\": \"int\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": true\n\t\t\t\t},\n\t\t\t\t\"feedback\": {\n\t\t\t\t\t\"name\": \"feedback\",\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false\n\t\t\t\t},\n\t\t\t\t\"timestamp\": {\n\t\t\t\t\t\"name\": \"timestamp\",\n\t\t\t\t\t\"type\": \"timestamp\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false,\n\t\t\t\t\t\"default\": \"(now())\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"indexes\": {},\n\t\t\t\"foreignKeys\": {},\n\t\t\t\"compositePrimaryKeys\": {\n\t\t\t\t\"uninstall_feedback_id\": {\n\t\t\t\t\t\"name\": \"uninstall_feedback_id\",\n\t\t\t\t\t\"columns\": [\"id\"]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"uniqueConstraints\": {},\n\t\t\t\"checkConstraint\": {}\n\t\t}\n\t},\n\t\"views\": {},\n\t\"_meta\": {\n\t\t\"schemas\": {},\n\t\t\"tables\": {},\n\t\t\"columns\": {}\n\t},\n\t\"internal\": {\n\t\t\"tables\": {},\n\t\t\"indexes\": {}\n\t}\n}\n"
  },
  {
    "path": "packages/web/drizzle/meta/0002_snapshot.json",
    "content": "{\n\t\"version\": \"5\",\n\t\"dialect\": \"mysql\",\n\t\"id\": \"fbee3b57-d046-43fc-aa34-a2ef07e19993\",\n\t\"prevId\": \"a13c6522-4577-4493-a811-fc9a29305fcb\",\n\t\"tables\": {\n\t\t\"problematic_lint\": {\n\t\t\t\"name\": \"problematic_lint\",\n\t\t\t\"columns\": {\n\t\t\t\t\"id\": {\n\t\t\t\t\t\"name\": \"id\",\n\t\t\t\t\t\"type\": \"int\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": true\n\t\t\t\t},\n\t\t\t\t\"is_false_positive\": {\n\t\t\t\t\t\"name\": \"is_false_positive\",\n\t\t\t\t\t\"type\": \"boolean\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false\n\t\t\t\t},\n\t\t\t\t\"example\": {\n\t\t\t\t\t\"name\": \"example\",\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false\n\t\t\t\t},\n\t\t\t\t\"feedback\": {\n\t\t\t\t\t\"name\": \"feedback\",\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false\n\t\t\t\t},\n\t\t\t\t\"rule_id\": {\n\t\t\t\t\t\"name\": \"rule_id\",\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": false,\n\t\t\t\t\t\"autoincrement\": false\n\t\t\t\t},\n\t\t\t\t\"timestamp\": {\n\t\t\t\t\t\"name\": \"timestamp\",\n\t\t\t\t\t\"type\": \"timestamp\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false,\n\t\t\t\t\t\"default\": \"(now())\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"indexes\": {},\n\t\t\t\"foreignKeys\": {},\n\t\t\t\"compositePrimaryKeys\": {\n\t\t\t\t\"problematic_lint_id\": {\n\t\t\t\t\t\"name\": \"problematic_lint_id\",\n\t\t\t\t\t\"columns\": [\"id\"]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"uniqueConstraints\": {},\n\t\t\t\"checkConstraint\": {}\n\t\t},\n\t\t\"uninstall_feedback\": {\n\t\t\t\"name\": \"uninstall_feedback\",\n\t\t\t\"columns\": {\n\t\t\t\t\"id\": {\n\t\t\t\t\t\"name\": \"id\",\n\t\t\t\t\t\"type\": \"int\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": true\n\t\t\t\t},\n\t\t\t\t\"feedback\": {\n\t\t\t\t\t\"name\": \"feedback\",\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false\n\t\t\t\t},\n\t\t\t\t\"timestamp\": {\n\t\t\t\t\t\"name\": \"timestamp\",\n\t\t\t\t\t\"type\": \"timestamp\",\n\t\t\t\t\t\"primaryKey\": false,\n\t\t\t\t\t\"notNull\": true,\n\t\t\t\t\t\"autoincrement\": false,\n\t\t\t\t\t\"default\": \"(now())\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"indexes\": {},\n\t\t\t\"foreignKeys\": {},\n\t\t\t\"compositePrimaryKeys\": {\n\t\t\t\t\"uninstall_feedback_id\": {\n\t\t\t\t\t\"name\": \"uninstall_feedback_id\",\n\t\t\t\t\t\"columns\": [\"id\"]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"uniqueConstraints\": {},\n\t\t\t\"checkConstraint\": {}\n\t\t}\n\t},\n\t\"views\": {},\n\t\"_meta\": {\n\t\t\"schemas\": {},\n\t\t\"tables\": {},\n\t\t\"columns\": {}\n\t},\n\t\"internal\": {\n\t\t\"tables\": {},\n\t\t\"indexes\": {}\n\t}\n}\n"
  },
  {
    "path": "packages/web/drizzle/meta/_journal.json",
    "content": "{\n\t\"version\": \"7\",\n\t\"dialect\": \"mysql\",\n\t\"entries\": [\n\t\t{\n\t\t\t\"idx\": 0,\n\t\t\t\"version\": \"5\",\n\t\t\t\"when\": 1760386452851,\n\t\t\t\"tag\": \"0000_cute_zuras\",\n\t\t\t\"breakpoints\": true\n\t\t},\n\t\t{\n\t\t\t\"idx\": 1,\n\t\t\t\"version\": \"5\",\n\t\t\t\"when\": 1760545628828,\n\t\t\t\"tag\": \"0001_blushing_corsair\",\n\t\t\t\"breakpoints\": true\n\t\t},\n\t\t{\n\t\t\t\"idx\": 2,\n\t\t\t\"version\": \"5\",\n\t\t\t\"when\": 1760546819156,\n\t\t\t\"tag\": \"0002_blushing_chameleon\",\n\t\t\t\"breakpoints\": true\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/web/drizzle.config.ts",
    "content": "import { defineConfig } from 'drizzle-kit';\n\nexport default defineConfig({\n\tout: './drizzle',\n\tschema: './src/lib/db/schema.ts',\n\tdialect: 'mysql',\n\tdbCredentials: {\n\t\turl: process.env.DATABASE_URL!,\n\t},\n});\n"
  },
  {
    "path": "packages/web/package.json",
    "content": "{\n\t\"name\": \"harper-web\",\n\t\"version\": \"0.0.1\",\n\t\"private\": true,\n\t\"scripts\": {\n\t\t\"dev\": \"vite dev\",\n\t\t\"build\": \"vite build -l warn\",\n\t\t\"preview\": \"vite preview\",\n\t\t\"check\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json\",\n\t\t\"check:watch\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch\",\n\t\t\"start\": \"node build\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-node\": \"^5.2.12\",\n\t\t\"@sveltejs/kit\": \"^2.37.1\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^5.0.3\",\n\t\t\"@tailwindcss/vite\": \"^4.1.4\",\n\t\t\"@types/reveal.js\": \"^5.0.3\",\n\t\t\"autoprefixer\": \"^10.4.21\",\n\t\t\"drizzle-kit\": \"^0.31.5\",\n\t\t\"flowbite\": \"^3.1.2\",\n\t\t\"svelte\": \"^5.15.0\",\n\t\t\"svelte-check\": \"^4.1.5\",\n\t\t\"tailwindcss\": \"^4.1.16\",\n\t\t\"tslib\": \"catalog:\",\n\t\t\"tsx\": \"^4.20.6\",\n\t\t\"typescript\": \"catalog:\",\n\t\t\"vite\": \"^6.1.0\",\n\t\t\"vite-plugin-top-level-await\": \"^1.5.0\",\n\t\t\"vite-plugin-wasm\": \"^3.4.1\"\n\t},\n\t\"type\": \"module\",\n\t\"dependencies\": {\n\t\t\"@sveltepress/theme-default\": \"^5.0.7\",\n\t\t\"@sveltepress/vite\": \"^1.1.5\",\n\t\t\"brace\": \"^0.11.1\",\n\t\t\"chart.js\": \"^4.4.8\",\n\t\t\"components\": \"workspace:*\",\n\t\t\"drizzle-orm\": \"^0.44.6\",\n\t\t\"drizzle-zod\": \"^0.8.3\",\n\t\t\"harper.js\": \"workspace:*\",\n\t\t\"lint-framework\": \"workspace:*\",\n\t\t\"lodash-es\": \"^4.17.21\",\n\t\t\"mysql2\": \"^3.15.2\",\n\t\t\"posthog-js\": \"^1.245.1\",\n\t\t\"quill\": \"^2.0.3\",\n\t\t\"reveal.js\": \"^5.1.0\",\n\t\t\"svelte-ace\": \"^1.0.21\",\n\t\t\"svelte-intersection-observer\": \"^1.0.0\",\n\t\t\"typed.js\": \"^2.1.0\",\n\t\t\"zod\": \"^4.1.12\"\n\t}\n}\n"
  },
  {
    "path": "packages/web/src/app.css",
    "content": "@import \"tailwindcss\";\n@import \"components/components.css\";\n\n@custom-variant dark (&:where(.dark, .dark *));\n\n@theme {\n\t--color-primary-50: #fef4e7; /* honey bronze */\n\t--color-primary-100: #fce9cf;\n\t--color-primary-200: #f9d49f;\n\t--color-primary-300: #f7be6e;\n\t--color-primary-400: #f4a83e;\n\t--color-primary: #f1920e;\n\t--color-primary-600: #c1750b;\n\t--color-primary-700: #915808;\n\t--color-primary-800: #603b06;\n\t--color-primary-900: #301d03;\n\t--color-primary-950: #221402;\n\n\t--color-accent-50: #fee7e9; /* hot fuchsia */\n\t--color-accent-100: #fccfd3;\n\t--color-accent-200: #f99fa6;\n\t--color-accent-300: #f76e7a;\n\t--color-accent-400: #f43e4d;\n\t--color-accent: #f10e21;\n\t--color-accent-600: #c10b1a;\n\t--color-accent-700: #910814;\n\t--color-accent-800: #60060d;\n\t--color-accent-900: #300307;\n\t--color-accent-950: #220205;\n\n\t--color-cream: #fef4e7; /* simple cream */\n\t--color-cream-100: #fce9cf;\n\t--color-cream-200: #f9d49f;\n\t--color-cream-300: #f7be6e;\n\t--color-cream-400: #f4a83e;\n\t--color-cream-500: #f1920e;\n\t--color-cream-600: #c1750b;\n\t--color-cream-700: #915808;\n\t--color-cream-800: #603b06;\n\t--color-cream-900: #301d03;\n\t--color-cream-950: #221402;\n\n\t--color-champagne-mist-50: #fef4e7;\n\t--color-champagne-mist-100: #fce9cf;\n\t--color-champagne-mist-200: #fad49e;\n\t--color-champagne-mist-300: #f7be6e;\n\t--color-champagne-mist-400: #f5a83d;\n\t--color-champagne-mist-500: #f2930d;\n\t--color-champagne-mist-600: #c2750a;\n\t--color-champagne-mist-700: #915808;\n\t--color-champagne-mist-800: #613b05;\n\t--color-champagne-mist-900: #301d03;\n\t--color-champagne-mist-950: #221502;\n\n\t--color-white: #fffdfa;\n\t--color-white-100: #fceacf;\n\t--color-white-200: #fad59e;\n\t--color-white-300: #f7c06e;\n\t--color-white-400: #f5ab3d;\n\t--color-white-500: #f2960d;\n\t--color-white-600: #c2780a;\n\t--color-white-700: #915a08;\n\t--color-white-800: #613c05;\n\t--color-white-900: #301e03;\n\t--color-white-950: #221502;\n}\n\nbody {\n\t@apply bg-white text-black dark:bg-black dark:text-white;\n\n\tfont-family:\n\t\tAtkinson Hyperlegible,\n\t\tsans-serif;\n}\n\nul {\n\t@apply list-disc pl-4;\n}\n\nol {\n\t@apply list-decimal pl-4;\n}\n\nh1 {\n\t@apply text-4xl font-extrabold tracking-tight lg:text-5xl py-4;\n\tfont-family: Domine, serif;\n}\n\nh2 {\n\t@apply text-3xl font-semibold tracking-tight py-4;\n\tfont-family: Domine, serif;\n}\n\nh3 {\n\t@apply text-2xl font-semibold tracking-tight py-4;\n\tfont-family: Domine, serif;\n}\n\nh4 {\n\t@apply text-xl font-semibold tracking-tight;\n\tfont-family: Domine, serif;\n}\n\np {\n\t@apply leading-[130%] [&:not(:first-child)]:mt-6;\n}\n\na {\n\t@apply underline-offset-4 text-black dark:text-white;\n}\n\nblockquote {\n\t@apply mt-6 border-l-2 border-gray-200 pl-6 italic dark:border-gray-700;\n}\n\ncode {\n\tfont-family: \"JetBrains Mono\", monospace;\n\tword-break: keep-all;\n}\n\ncode * {\n\tfont-family: \"JetBrains Mono\", monospace;\n}\n\n.underlinespecial {\n\tposition: relative;\n\tbackground-color: var(--bg-color);\n}\n\n.underlinespecial::after {\n\ttransition-property: all;\n\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n\ttransition-duration: 150ms;\n\tcontent: \"\";\n\tdisplay: block;\n\twidth: 100%;\n\theight: var(--line-width);\n\tborder-radius: 1000px;\n\tbackground: var(--line-color);\n\tposition: absolute;\n\tbottom: -3px;\n\tleft: 0;\n}\n\ntextarea {\n\t--tw-ring-shadow: 0 0 #000;\n}\n\n.animate-bigbounce {\n\tanimation: bigbounce 1s infinite;\n}\n\n.animate-after-bigbounce::after {\n\tanimation: bigbounce 1s infinite;\n}\n\n@keyframes bigbounce {\n\t0%,\n\t100% {\n\t\ttransform: translateY(-40%);\n\t\tanimation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n\t}\n\t50% {\n\t\ttransform: none;\n\t\tanimation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n\t}\n}\n\n.header {\n\tpadding-top: 6px;\n}\n\nth[align=\"center\"] {\n\ttext-align: center;\n}\n\nth[align=\"right\"] {\n\ttext-align: right;\n}\n\n.skew-hover {\n\t@apply transition-all hover:rotate-3 hover:scale-105;\n}\n\n.skew-hover-left {\n\t@apply transition-all hover:-rotate-3 hover:scale-105;\n}\n\n.last-update {\n\tdisplay: none;\n}\n"
  },
  {
    "path": "packages/web/src/app.d.ts",
    "content": "// See https://kit.svelte.dev/docs/types#app\n// for information about these interfaces\ndeclare global {\n\tnamespace App {\n\t\t// interface Error {}\n\t\t// interface Locals {}\n\t\t// interface PageData {}\n\t\t// interface Platform {}\n\t}\n}\n\nexport {};\n"
  },
  {
    "path": "packages/web/src/app.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"utf-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n  <meta name=\"language\" content=\"en\" />\n  <meta name=\"robots\" content=\"index,follow\" />\n\n  <title>Harper | Privacy-First Offline Grammar Checker for Developers & Writers</title>\n\n  <meta name=\"description\"\n    content=\"Harper is a blazing-fast, open-source grammar & spell checker that runs entirely on your device, covering US, UK, Canadian & Australian English—no data ever leaves your machine. Harper is the only grammar checker that doesn't use AI.\" />\n\n  <meta name=\"keywords\"\n    content=\"Harper, grammar checker, spell checker, privacy-first, offline, open source, fast grammar tool, developer writing, markdown checker\" />\n  <meta name=\"author\" content=\"Elijah Potter\" />\n\n  <link rel=\"canonical\" href=\"https://writewithharper.com/\" />\n\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon.png\" />\n  <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/favicon-32x32.png\" />\n  <link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/favicon-16x16.png\" />\n  <link rel=\"manifest\" href=\"/site.webmanifest\" />\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg\" color=\"#5bbad5\" />\n  <meta name=\"msapplication-TileColor\" content=\"#da532c\" />\n  <meta name=\"theme-color\" content=\"#ffffff\" />\n\n  <meta property=\"og:type\" content=\"website\" />\n  <meta property=\"og:site_name\" content=\"Harper\" />\n  <meta property=\"og:locale\" content=\"en_US\" />\n  <meta property=\"og:url\" content=\"https://writewithharper.com/\" />\n  <meta property=\"og:title\" content=\"Harper | Privacy-First Offline Grammar Checker\" />\n  <meta property=\"og:description\"\n    content=\"Harper checks your writing instantly—fast, lightweight and utterly private—so you can polish every clause without surrendering a single keystroke.\" />\n\n  <meta name=\"twitter:card\" content=\"summary_large_image\" />\n  <meta name=\"twitter:title\" content=\"Harper | Privacy-First Offline Grammar Checker\" />\n  <meta name=\"twitter:description\"\n    content=\"Blazing-fast, open-source grammar & spell checking that never sends your words to the cloud.\" />\n  <meta property=\"og:image\" content=\"https://writewithharper.com/social_image.png\" />\n  <meta property=\"og:image:alt\" content=\"Stylised ‘Harper’ wordmark on a clean pastel backdrop\" />\n  <meta property=\"og:image:type\" content=\"image/png\" />\n  <meta property=\"og:image:width\" content=\"1200\" />\n  <meta property=\"og:image:height\" content=\"630\" />\n\n  <meta name=\"twitter:image\" content=\"https://writewithharper.com/social_image.png\" />\n  <meta name=\"twitter:image:alt\" content=\"Stylised ‘Harper’ wordmark on a clean pastel backdrop\" />\n\n  <meta name=\"algolia-site-verification\" content=\"3129E6D505B8ED8A\" />\n\n  <script type=\"application/ld+json\">\n    {\n      \"@context\":\"https://schema.org\",\n      \"@type\":\"SoftwareApplication\",\n      \"name\":\"Harper\",\n      \"url\":\"https://writewithharper.com\",\n      \"applicationCategory\":\"WritingApplication\",\n      \"operatingSystem\":\"Web, Browser Extension, Node.js\",\n      \"offers\": { \"@type\":\"Offer\", \"price\":\"0\", \"priceCurrency\":\"USD\" },\n      \"author\":  { \"@type\":\"Person\", \"name\":\"Elijah Potter\", \"url\":\"https://elijahpotter.dev\" },\n      \"description\":\"Harper is a privacy-first, offline grammar and spell checker that covers multiple English dialects and runs entirely on-device.\"\n    }\n  </script>\n\n  <title>Harper: Free, Open Source Grammar Checker</title>\n  <meta name=\"description\" content=\"Harper checks your writing fast, without compromising your privacy.\" />\n  <link rel=\"canonical\" href=\"https://writewithharper.com\" />\n  <meta property=\"og:title\" content=\"Harper: Free, Open Source Grammar Checker\" />\n  <meta property=\"og:description\" content=\"Harper checks your writing fast, without compromising your privacy.\" />\n  <meta property=\"og:url\" content=\"https://writewithharper.com\" />\n\n  <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n  <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n  <link\n    href=\"https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400;1,700&family=Domine:wght@400..700&display=swap\"\n    rel=\"stylesheet\" />\n\n  <link href=\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap\"\n    rel=\"stylesheet\" />\n\n  <script>\n    (function() {\n      var stored = localStorage.getItem('theme');\n      if (stored === 'dark' || (!stored && window.matchMedia('(prefers-color-scheme: dark)').matches)) {\n        document.documentElement.classList.add('dark');\n      }\n    })();\n  </script>\n\n  %sveltekit.head%\n</head>\n\n<body data-sveltekit-preload-data=\"false\" class=\"m-0 p-0 w-full h-full\">\n  <div style=\"display: contents\" class=\"m-0 p-0 h-full\">%sveltekit.body%</div>\n</body>\n\n</html>\n"
  },
  {
    "path": "packages/web/src/brace.d.ts",
    "content": "declare module 'brace/mode/*';\ndeclare module 'brace/theme/*';\n"
  },
  {
    "path": "packages/web/src/hooks.server.ts",
    "content": "import { migrate } from 'drizzle-orm/mysql2/migrator';\nimport { db } from '$lib/db';\n\n// Migrate exactly once at startup\ntry {\n\tawait migrate(db, { migrationsFolder: './drizzle', migrationsTable: '__drizzle_migrations' });\n} catch (e: any) {\n\tconsole.log('Failed to migrate database.');\n\tconsole.error(e);\n}\n"
  },
  {
    "path": "packages/web/src/lib/GitHubClient.ts",
    "content": "export class GithubClient {\n\t/// Map of string -> [content, expiration time]\n\tprivate static versionCache: Map<string, [string, number]> = new Map();\n\n\tpublic static async getLatestReleaseFromCache(\n\t\trepoOwner: string,\n\t\trepoName: string,\n\t): Promise<string | null> {\n\t\tconst key = `${repoOwner}/${repoName}`;\n\n\t\tconst val = this.versionCache.get(key);\n\n\t\tif (val == null) {\n\t\t\tconst updatedValue = await this.getLatestRelease(repoOwner, repoName);\n\t\t\tthis.versionCache.set(key, [updatedValue, Date.now() + 3600 * 3000]);\n\t\t\treturn updatedValue;\n\t\t}\n\n\t\tconst [value, expiry] = val;\n\n\t\tif (expiry - Date.now() < 0) {\n\t\t\tthis.versionCache.delete(key);\n\t\t\tconst updatedValue = await this.getLatestRelease(repoOwner, repoName);\n\t\t\tthis.versionCache.set(key, [updatedValue, Date.now() + 3600 * 3000]);\n\t\t\treturn updatedValue;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tpublic static async getLatestRelease(repoOwner: string, repoName: string): Promise<string> {\n\t\tconst resp = await fetch(\n\t\t\t`https://api.github.com/repos/${encodeURIComponent(repoOwner)}/${encodeURIComponent(repoName)}/releases/latest`,\n\t\t\t{\n\t\t\t\theaders: {\n\t\t\t\t\tContentType: 'application/json',\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\tconst body = await resp.json();\n\n\t\treturn body.name;\n\t}\n}\n"
  },
  {
    "path": "packages/web/src/lib/components/AutomatticLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg\n\t{width}\n\t{height}\n\tviewBox=\"0 0 1080 200\"\n\tfill=\"none\"\n\txmlns=\"http://www.w3.org/2000/svg\"\n\tclass=\"fill-black dark:fill-white\"\n>\n\t<path\n\t\td=\"M414.223 134.241C390.908 134.241 375.797 117.463 375.797 99.9815V97.7964C375.797 80.0186 390.908 63.5371 414.223 63.5371C437.538 63.5371 452.741 80.0186 452.741 97.7964V99.9815C452.741 117.407 437.63 134.241 414.223 134.241ZM440.297 98.0001C440.297 85.2593 431.038 73.926 414.223 73.926C397.408 73.926 388.297 85.2778 388.297 98.0001V99.5741C388.297 112.315 397.556 123.87 414.223 123.87C430.889 123.87 440.297 112.315 440.297 99.5741V98.0001Z\"\n\t/>\n\t<path\n\t\td=\"M151.112 131.682L142.408 115.386H103.704L95.2969 131.682H82.334L117.778 65.9043H128.056L164.204 131.682H151.112ZM122.667 78.7376L108.353 106.386H137.482L122.667 78.7376Z\"\n\t/>\n\t<path\n\t\td=\"M220.333 134.238C196.74 134.238 185.777 121.404 185.777 104.312V65.9043H198.018V104.441C198.018 116.589 206.018 123.793 221.222 123.793C236.833 123.793 243.259 116.589 243.259 104.441V65.9043H255.592V104.312C255.592 120.608 245.129 134.238 220.333 134.238Z\"\n\t/>\n\t<path d=\"M324.352 76.1636V131.719H312.001V76.1636H283.26V65.9043H353.093V76.1636H324.352Z\" />\n\t<path\n\t\td=\"M562.759 131.682V79.6265L559.5 85.3487L531.944 131.645H525.926L498.666 85.3487L495.407 79.6265V131.682H483.352V65.9043H500.444L526.37 111.034L529.426 116.589L532.481 111.034L558.166 65.9043H575.185V131.682H562.759Z\"\n\t/>\n\t<path\n\t\td=\"M668.444 131.682L659.759 115.386H621.129L612.74 131.682H599.777L635.333 65.9043H645.555L681.703 131.682H668.444ZM640.092 78.7376L625.777 106.386H654.907L640.092 78.7376Z\"\n\t/>\n\t<path d=\"M731.464 76.1636V131.719H719.112V76.1636H690.371V65.9043H760.204V76.1636H731.464Z\" />\n\t<path d=\"M822.019 76.1636V131.719H809.686V76.1636H780.945V65.9043H850.779V76.1636H822.019Z\" />\n\t<path\n\t\td=\"M881.186 131.682V72.1265C886.13 72.1265 888.093 69.4599 888.093 65.9043H893.334V131.682H881.186Z\"\n\t/>\n\t<path\n\t\td=\"M990 84.462C982.881 77.7046 973.446 73.9278 963.63 73.9065C946.037 73.9065 936.167 85.9435 936.167 98.4991V99.7768C936.167 112.221 946.13 123.851 964.5 123.851C974.115 123.676 983.317 119.911 990.297 113.295L997.704 121.092C988.477 129.66 976.313 134.359 963.723 134.221C938.834 134.221 923.723 118.036 923.723 100.258V98.0731C923.723 80.2953 940.204 63.5176 964.315 63.5176C978.241 63.5176 990.889 69.3324 997.649 76.6472L990 84.462Z\"\n\t/>\n\t<path\n\t\td=\"M415.726 87.83L404.415 105.348C402.984 107.564 403.62 110.522 405.837 111.953L405.853 111.963C408.069 113.394 411.027 112.758 412.458 110.541L423.769 93.0234C425.2 90.8066 424.564 87.8493 422.347 86.418L422.331 86.4079C420.115 84.9766 417.157 85.6133 415.726 87.83Z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/ChromeLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg {width} {height} viewBox=\"0 0 32 32\" data-name=\"Layer 1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.7434,22.505A12.9769,12.9769,0,0,0,14.88,28.949l5.8848-10.1927L16,16.0058,11.2385,18.755l-1.5875-2.75L8.4885,13.9919,5.3553,8.5649A12.9894,12.9894,0,0,0,4.7434,22.505Z\" fill=\"#00ac47\"/><path d=\"M16,3.0072A12.9769,12.9769,0,0,0,5.3507,8.5636l5.8848,10.1927L16,16.0057V10.5072H27.766A12.99,12.99,0,0,0,16,3.0072Z\" fill=\"#ea4435\"/><path d=\"M27.2557,22.505a12.9772,12.9772,0,0,0,.5124-12H15.9986v5.5011l4.7619,2.7492-1.5875,2.75-1.1625,2.0135-3.1333,5.4269A12.99,12.99,0,0,0,27.2557,22.505Z\" fill=\"#ffba00\"/><circle cx=\"15.9995\" cy=\"16.0072\" fill=\"#ffffff\" r=\"5.5\"/><circle cx=\"15.9995\" cy=\"16.0072\" fill=\"#4285f4\" r=\"4.25\"/></svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/CodeLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg {width} {height} viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t<mask id=\"mask0\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"100\" height=\"100\">\n\t\t<path\n\t\t\tfill-rule=\"evenodd\"\n\t\t\tclip-rule=\"evenodd\"\n\t\t\td=\"M70.9119 99.3171C72.4869 99.9307 74.2828 99.8914 75.8725 99.1264L96.4608 89.2197C98.6242 88.1787 100 85.9892 100 83.5872V16.4133C100 14.0113 98.6243 11.8218 96.4609 10.7808L75.8725 0.873756C73.7862 -0.130129 71.3446 0.11576 69.5135 1.44695C69.252 1.63711 69.0028 1.84943 68.769 2.08341L29.3551 38.0415L12.1872 25.0096C10.589 23.7965 8.35363 23.8959 6.86933 25.2461L1.36303 30.2549C-0.452552 31.9064 -0.454633 34.7627 1.35853 36.417L16.2471 50.0001L1.35853 63.5832C-0.454633 65.2374 -0.452552 68.0938 1.36303 69.7453L6.86933 74.7541C8.35363 76.1043 10.589 76.2037 12.1872 74.9905L29.3551 61.9587L68.769 97.9167C69.3925 98.5406 70.1246 99.0104 70.9119 99.3171ZM75.0152 27.2989L45.1091 50.0001L75.0152 72.7012V27.2989Z\"\n\t\t\tfill=\"white\"\n\t\t/>\n\t</mask>\n\t<g mask=\"url(#mask0)\">\n\t\t<path\n\t\t\td=\"M96.4614 10.7962L75.8569 0.875542C73.4719 -0.272773 70.6217 0.211611 68.75 2.08333L1.29858 63.5832C-0.515693 65.2373 -0.513607 68.0937 1.30308 69.7452L6.81272 74.754C8.29793 76.1042 10.5347 76.2036 12.1338 74.9905L93.3609 13.3699C96.086 11.3026 100 13.2462 100 16.6667V16.4275C100 14.0265 98.6246 11.8378 96.4614 10.7962Z\"\n\t\t\tfill=\"#0065A9\"\n\t\t/>\n\t\t<g filter=\"url(#filter0_d)\">\n\t\t\t<path\n\t\t\t\td=\"M96.4614 89.2038L75.8569 99.1245C73.4719 100.273 70.6217 99.7884 68.75 97.9167L1.29858 36.4169C-0.515693 34.7627 -0.513607 31.9063 1.30308 30.2548L6.81272 25.246C8.29793 23.8958 10.5347 23.7964 12.1338 25.0095L93.3609 86.6301C96.086 88.6974 100 86.7538 100 83.3334V83.5726C100 85.9735 98.6246 88.1622 96.4614 89.2038Z\"\n\t\t\t\tfill=\"#007ACC\"\n\t\t\t/>\n\t\t</g>\n\t\t<g filter=\"url(#filter1_d)\">\n\t\t\t<path\n\t\t\t\td=\"M75.8578 99.1263C73.4721 100.274 70.6219 99.7885 68.75 97.9166C71.0564 100.223 75 98.5895 75 95.3278V4.67213C75 1.41039 71.0564 -0.223106 68.75 2.08329C70.6219 0.211402 73.4721 -0.273666 75.8578 0.873633L96.4587 10.7807C98.6234 11.8217 100 14.0112 100 16.4132V83.5871C100 85.9891 98.6234 88.1786 96.4586 89.2196L75.8578 99.1263Z\"\n\t\t\t\tfill=\"#1F9CF0\"\n\t\t\t/>\n\t\t</g>\n\t\t<g style=\"mix-blend-mode:overlay\" opacity=\"0.25\">\n\t\t\t<path\n\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\tclip-rule=\"evenodd\"\n\t\t\t\td=\"M70.8511 99.3171C72.4261 99.9306 74.2221 99.8913 75.8117 99.1264L96.4 89.2197C98.5634 88.1787 99.9392 85.9892 99.9392 83.5871V16.4133C99.9392 14.0112 98.5635 11.8217 96.4001 10.7807L75.8117 0.873695C73.7255 -0.13019 71.2838 0.115699 69.4527 1.44688C69.1912 1.63705 68.942 1.84937 68.7082 2.08335L29.2943 38.0414L12.1264 25.0096C10.5283 23.7964 8.29285 23.8959 6.80855 25.246L1.30225 30.2548C-0.513334 31.9064 -0.515415 34.7627 1.29775 36.4169L16.1863 50L1.29775 63.5832C-0.515415 65.2374 -0.513334 68.0937 1.30225 69.7452L6.80855 74.754C8.29285 76.1042 10.5283 76.2036 12.1264 74.9905L29.2943 61.9586L68.7082 97.9167C69.3317 98.5405 70.0638 99.0104 70.8511 99.3171ZM74.9544 27.2989L45.0483 50L74.9544 72.7012V27.2989Z\"\n\t\t\t\tfill=\"url(#paint0_linear)\"\n\t\t\t/>\n\t\t</g>\n\t</g>\n\t<defs>\n\t\t<filter\n\t\t\tid=\"filter0_d\"\n\t\t\tx=\"-8.39411\"\n\t\t\ty=\"15.8291\"\n\t\t\twidth=\"116.727\"\n\t\t\theight=\"92.2456\"\n\t\t\tfilterUnits=\"userSpaceOnUse\"\n\t\t\tcolor-interpolation-filters=\"sRGB\"\n\t\t>\n\t\t\t<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n\t\t\t<feColorMatrix\n\t\t\t\tin=\"SourceAlpha\"\n\t\t\t\ttype=\"matrix\"\n\t\t\t\tvalues=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n\t\t\t/>\n\t\t\t<feOffset />\n\t\t\t<feGaussianBlur stdDeviation=\"4.16667\" />\n\t\t\t<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\" />\n\t\t\t<feBlend mode=\"overlay\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\" />\n\t\t\t<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\" />\n\t\t</filter>\n\t\t<filter\n\t\t\tid=\"filter1_d\"\n\t\t\tx=\"60.4167\"\n\t\t\ty=\"-8.07558\"\n\t\t\twidth=\"47.9167\"\n\t\t\theight=\"116.151\"\n\t\t\tfilterUnits=\"userSpaceOnUse\"\n\t\t\tcolor-interpolation-filters=\"sRGB\"\n\t\t>\n\t\t\t<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n\t\t\t<feColorMatrix\n\t\t\t\tin=\"SourceAlpha\"\n\t\t\t\ttype=\"matrix\"\n\t\t\t\tvalues=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n\t\t\t/>\n\t\t\t<feOffset />\n\t\t\t<feGaussianBlur stdDeviation=\"4.16667\" />\n\t\t\t<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\" />\n\t\t\t<feBlend mode=\"overlay\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\" />\n\t\t\t<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\" />\n\t\t</filter>\n\t\t<linearGradient\n\t\t\tid=\"paint0_linear\"\n\t\t\tx1=\"49.9392\"\n\t\t\ty1=\"0.257812\"\n\t\t\tx2=\"49.9392\"\n\t\t\ty2=\"99.7423\"\n\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t>\n\t\t\t<stop stop-color=\"white\" />\n\t\t\t<stop offset=\"1\" stop-color=\"white\" stop-opacity=\"0\" />\n\t\t</linearGradient>\n\t</defs>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/DefaultNeovimConfig.svelte",
    "content": "<script>\nimport { Button } from 'components';\nimport { binary, LocalLinter } from 'harper.js';\n\nlet linter = new LocalLinter({ binary });\n\nlet head = `lspconfig.harper_ls.setup {\n  settings = {\n    [\"harper-ls\"] = {\n      linters = {\n`;\n\nlet tail = `      }\n    }\n  },\n}`;\n\nasync function generateConfig() {\n\tlet default_config = await linter.getDefaultLintConfig();\n\n\tlet rows = Object.entries(default_config)\n\t\t.map(([key, value]) => `\\t\\t\\t${key} = ${value},`)\n\t\t.reduce((prev, cur) => `${prev}\\n${cur}`);\n\n\treturn head + rows + tail;\n}\n\nasync function copyConfig() {\n\tlet defaultConfig = await generateConfig();\n\tnavigator.clipboard.writeText(defaultConfig);\n}\n</script>\n\n<Button onclick={copyConfig}>Copy Default Config to Clipboard</Button>\n"
  },
  {
    "path": "packages/web/src/lib/components/EdgeLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg {width} {height} xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\"><defs><radialGradient id=\"b\" cx=\"161.8\" cy=\"68.9\" r=\"95.4\" gradientTransform=\"matrix(1 0 0 -.95 0 248.8)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".7\" stop-opacity=\"0\"/><stop offset=\".9\" stop-opacity=\".5\"/><stop offset=\"1\"/></radialGradient><radialGradient id=\"d\" cx=\"-340.3\" cy=\"63\" r=\"143.2\" gradientTransform=\"matrix(.15 -.99 -.8 -.12 176.6 -125.4)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".8\" stop-opacity=\"0\"/><stop offset=\".9\" stop-opacity=\".5\"/><stop offset=\"1\"/></radialGradient><radialGradient id=\"e\" cx=\"113.4\" cy=\"570.2\" r=\"202.4\" gradientTransform=\"matrix(-.04 1 2.13 .08 -1179.5 -106.7)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#35c1f1\"/><stop offset=\".1\" stop-color=\"#34c1ed\"/><stop offset=\".2\" stop-color=\"#2fc2df\"/><stop offset=\".3\" stop-color=\"#2bc3d2\"/><stop offset=\".7\" stop-color=\"#36c752\"/></radialGradient><radialGradient id=\"f\" cx=\"376.5\" cy=\"568\" r=\"97.3\" gradientTransform=\"matrix(.28 .96 .78 -.23 -303.8 -148.5)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#66eb6e\"/><stop offset=\"1\" stop-color=\"#66eb6e\" stop-opacity=\"0\"/></radialGradient><linearGradient id=\"a\" x1=\"63.3\" y1=\"84\" x2=\"241.7\" y2=\"84\" gradientTransform=\"matrix(1 0 0 -1 0 266)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#0c59a4\"/><stop offset=\"1\" stop-color=\"#114a8b\"/></linearGradient><linearGradient id=\"c\" x1=\"157.3\" y1=\"161.4\" x2=\"46\" y2=\"40.1\" gradientTransform=\"matrix(1 0 0 -1 0 266)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#1b9de2\"/><stop offset=\".2\" stop-color=\"#1595df\"/><stop offset=\".7\" stop-color=\"#0680d7\"/><stop offset=\"1\" stop-color=\"#0078d4\"/></linearGradient></defs><path d=\"M235.7 195.5a93.7 93.7 0 0 1-10.6 4.7 101.9 101.9 0 0 1-35.9 6.4c-47.3 0-88.5-32.5-88.5-74.3a31.5 31.5 0 0 1 16.4-27.3c-42.8 1.8-53.8 46.4-53.8 72.5 0 74 68.1 81.4 82.8 81.4 7.9 0 19.8-2.3 27-4.6l1.3-.4a128.3 128.3 0 0 0 66.6-52.8 4 4 0 0 0-5.3-5.6Z\" transform=\"translate(-4.6 -5)\" style=\"fill:url(#a)\"/><path d=\"M235.7 195.5a93.7 93.7 0 0 1-10.6 4.7 101.9 101.9 0 0 1-35.9 6.4c-47.3 0-88.5-32.5-88.5-74.3a31.5 31.5 0 0 1 16.4-27.3c-42.8 1.8-53.8 46.4-53.8 72.5 0 74 68.1 81.4 82.8 81.4 7.9 0 19.8-2.3 27-4.6l1.3-.4a128.3 128.3 0 0 0 66.6-52.8 4 4 0 0 0-5.3-5.6Z\" transform=\"translate(-4.6 -5)\" style=\"isolation:isolate;opacity:.35;fill:url(#b)\"/><path d=\"M110.3 246.3A79.2 79.2 0 0 1 87.6 225a80.7 80.7 0 0 1 29.5-120c3.2-1.5 8.5-4.1 15.6-4a32.4 32.4 0 0 1 25.7 13 31.9 31.9 0 0 1 6.3 18.7c0-.2 24.5-79.6-80-79.6-43.9 0-80 41.6-80 78.2a130.2 130.2 0 0 0 12.1 56 128 128 0 0 0 156.4 67 75.5 75.5 0 0 1-62.8-8Z\" transform=\"translate(-4.6 -5)\" style=\"fill:url(#c)\"/><path d=\"M110.3 246.3A79.2 79.2 0 0 1 87.6 225a80.7 80.7 0 0 1 29.5-120c3.2-1.5 8.5-4.1 15.6-4a32.4 32.4 0 0 1 25.7 13 31.9 31.9 0 0 1 6.3 18.7c0-.2 24.5-79.6-80-79.6-43.9 0-80 41.6-80 78.2a130.2 130.2 0 0 0 12.1 56 128 128 0 0 0 156.4 67 75.5 75.5 0 0 1-62.8-8Z\" transform=\"translate(-4.6 -5)\" style=\"opacity:.41;fill:url(#d);isolation:isolate\"/><path d=\"M157 153.8c-.9 1-3.4 2.5-3.4 5.6 0 2.6 1.7 5.2 4.8 7.3 14.3 10 41.4 8.6 41.5 8.6a59.6 59.6 0 0 0 30.3-8.3 61.4 61.4 0 0 0 30.4-52.9c.3-22.4-8-37.3-11.3-43.9C228 28.8 182.3 5 132.6 5a128 128 0 0 0-128 126.2c.5-36.5 36.8-66 80-66 3.5 0 23.5.3 42 10a72.6 72.6 0 0 1 30.9 29.3c6.1 10.6 7.2 24.1 7.2 29.5s-2.7 13.3-7.8 19.9Z\" transform=\"translate(-4.6 -5)\" style=\"fill:url(#e)\"/><path d=\"M157 153.8c-.9 1-3.4 2.5-3.4 5.6 0 2.6 1.7 5.2 4.8 7.3 14.3 10 41.4 8.6 41.5 8.6a59.6 59.6 0 0 0 30.3-8.3 61.4 61.4 0 0 0 30.4-52.9c.3-22.4-8-37.3-11.3-43.9C228 28.8 182.3 5 132.6 5a128 128 0 0 0-128 126.2c.5-36.5 36.8-66 80-66 3.5 0 23.5.3 42 10a72.6 72.6 0 0 1 30.9 29.3c6.1 10.6 7.2 24.1 7.2 29.5s-2.7 13.3-7.8 19.9Z\" transform=\"translate(-4.6 -5)\" style=\"fill:url(#f)\"/></svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/Editor.svelte",
    "content": "<script lang=\"ts\">\nimport { Card } from 'components';\nimport { type WorkerLinter } from 'harper.js';\nimport {\n\ttype IgnorableLintBox,\n\tLintFramework,\n\ttype UnpackedLintGroups,\n\tunpackLint,\n} from 'lint-framework';\nimport LintSidebar from '$lib/components/LintSidebar.svelte';\nimport demo from '../../../../../demo.md?raw';\n\nexport let content = demo.trim();\nexport let onReady: () => void = () => null;\n\nlet editor: HTMLDivElement | null;\nlet linter: WorkerLinter;\nlet quill: any;\nlet lintBoxes: IgnorableLintBox[] = [];\n\n$: if (linter != null && quill != null) {\n\tonReady();\n}\n\nlet lfw = new LintFramework(\n\tasync (text) => {\n\t\tif (!linter) return {};\n\n\t\tconst raw = await linter.organizedLints(text);\n\t\t// The framework expects grouped lints keyed by source\n\t\tconst entries = await Promise.all(\n\t\t\tObject.entries(raw).map(async ([source, lintGroup]) => {\n\t\t\t\tconst unpacked = await Promise.all(lintGroup.map((lint) => unpackLint(text, lint, linter)));\n\t\t\t\treturn [source, unpacked] as const;\n\t\t\t}),\n\t\t);\n\n\t\tconst grouped: UnpackedLintGroups = Object.fromEntries(entries);\n\n\t\tlintBoxes = lfw.getLastIgnorableLintBoxes();\n\n\t\treturn grouped;\n\t},\n\t{\n\t\tignoreLint: async (hash: string) => {\n\t\t\tif (!linter) return;\n\t\t\ttry {\n\t\t\t\tawait linter.ignoreLintHash(BigInt(hash));\n\t\t\t\tconsole.log(`Ignored ${hash}`);\n\t\t\t\t// Re-run linting to hide ignored lint immediately\n\t\t\t\tlfw.update();\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Failed to ignore lint', e);\n\t\t\t}\n\t\t},\n\t},\n);\n\n(async () => {\n\tlet { WorkerLinter, binary } = await import('harper.js');\n\tlet newLinter = new WorkerLinter({ binary });\n\n\tnewLinter.setup();\n\tawait newLinter.lint(content);\n\tlinter = newLinter;\n})();\n\nasync function updateLintFrameworkElements() {\n\tif (editor == null) {\n\t\treturn;\n\t}\n\n\tif (quill == null) {\n\t\tlet { default: Quill } = await import('quill');\n\t\tquill = new Quill(editor, {});\n\t\tconst container = quill.container ?? quill.root?.parentElement;\n\t\tcontainer?.classList.add('h-full', 'min-h-0');\n\n\t\tquill.root?.classList.add('flex', 'flex-col', 'h-full', 'min-h-0', 'outline-transparent');\n\t\tquill.root?.setAttribute('data-enable-grammarly', 'false');\n\t}\n\n\tfor (let el of editor.getElementsByTagName('p')) {\n\t\tlfw.addTarget(el);\n\t}\n}\n\n$: if (editor != null) {\n\tlet mo = new MutationObserver(updateLintFrameworkElements);\n\tmo.observe(editor, { childList: true, subtree: true });\n\tupdateLintFrameworkElements();\n}\n\nfunction jumpTo(lintBox: IgnorableLintBox) {\n\tif (typeof window === 'undefined') {\n\t\treturn;\n\t}\n\n\tconst range = lintBox.range;\n\tif (!range) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst rect = range.getBoundingClientRect();\n\n\t\tconst selection = window.getSelection();\n\t\tif (selection) {\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange(range.cloneRange());\n\t\t}\n\n\t\tconst margin = Math.max(10, window.innerHeight * 0.2);\n\t\tconst target = Math.max(0, window.scrollY + rect.top - margin);\n\t\twindow.scrollTo({ top: target, behavior: 'smooth' });\n\t} catch (error) {\n\t\tconsole.error('Failed to jump to lint', error);\n\t}\n}\n</script>\n\n<div class=\"flex flex-row h-full w-full [&_*]:outline-none\">\n\t<Card class=\"flex-1 h-full p-5 z-10 max-w-full text-lg mr-5 bg-white dark:bg-black overflow-auto\">\n    <div bind:this={editor} spellcheck=\"false\">\n    {@html content.replace(/\\n\\n/g, '<br>')}\n    </div>\n\t</Card>\n\n\t<LintSidebar\n\t\tlintBoxes={lintBoxes}\n\t\tfocusLint={jumpTo}\n\t/>\n</div>\n"
  },
  {
    "path": "packages/web/src/lib/components/EmacsLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg {width} {height} xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 128 128\">\n\t<circle cx=\"64\" cy=\"64\" r=\"64\" fill=\"#ffffff\" />\n\t<path\n\t\tfill=\"#421f5f\"\n\t\td=\"M60.613 8.012a56.04 56.04 0 0 0-27.34 9.062c-3.437 2.262-5.847 4.238-8.91 7.29-4.652 4.66-8.011 9.363-10.863 15.198-7.938 16.313-7.375 35.938 1.488 51.75 2.598 4.626 5.512 8.461 9.375 12.325 3.063 3.05 5.473 5.039 8.899 7.277a56.014 56.014 0 0 0 61.476 0c3.426-2.238 5.836-4.227 8.899-7.277 3.863-3.864 6.777-7.7 9.375-12.325 8.863-15.812 9.425-35.437 1.488-51.75-2.852-5.835-6.21-10.539-10.863-15.199-3.063-3.05-5.473-5.027-8.91-7.289a55.965 55.965 0 0 0-34.114-9.062Zm27.325 21.914c4.574 1.187 7.55 4.523 7.773 8.699.187 3.336-1.563 5.96-4.625 6.95-.848.277-1.262.323-2.398.323-1.665.016-2.551-.109-6.665-.898-3.875-.75-5.41-.96-8.46-1.125-7.461-.398-11.461.262-12.387 2.023-.477.914.086 2.204 1.648 3.852.84.863 3.2 2.738 11.176 8.836 5.574 4.25 10.05 7.738 9.96 7.75-.073.027-4.698.203-10.272.414-10.227.387-11.239.46-13.551 1.012-4.285 1.011-8.364 2.925-10.035 4.715-2.227 2.375-1.551 4.734 2.023 7.136 3.5 2.336 9.313 4.301 19.688 6.637 9.726 2.188 14.062 3.602 16.949 5.477.988.648 1.55 1.21 1.812 1.859.688 1.613-1.836 3.176-6.597 4.102-3.188.613-5.29.75-11.727.75-10.336-.012-20.613-.836-26.46-2.137-2.767-.614-2.704-.664.71-.59 6.676.152 23.324-.586 26.05-1.148 1.575-.325 2.063-.864 1.337-1.477-.801-.672-2.098-.984-4.95-1.211-5.55-.438-11.726-1.852-17.148-3.95C43.637 84.79 37.352 80.314 34 75.274c-3.602-5.41-1.563-10.023 5.7-12.937 4.788-1.922 11.76-3 18.175-2.785 4.836.148 8.074.71 11.75 2.035.102.039-.512-.348-1.375-.86-10.324-6.124-16.188-11.5-19.313-17.714-.624-1.25-1.062-2.723-1.062-3.575 0-1.437.8-2.648 2.176-3.3 1.363-.649 2.472-.825 5.136-.825 2.637.012 3.239.075 8.188.876 4.512.726 7.398 1.136 9.625 1.363 4.773.5 9.602.562 10.96.148.79-.25 1.29-.785 1.29-1.398 0-1.664-4.96-3.54-13.875-5.239-3.54-.675-3.914-.789-2.75-.812.45-.012 3.762-.176 7.375-.375 7.938-.438 10.113-.426 11.938.05Zm0 0\"\n\t/>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/FirefoxLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg width={width} height={height} viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M28.9905 10.7265C28.3816 9.2574 27.1473 7.67139 26.1784 7.17039C26.967 8.72015 27.4232 10.2746 27.5976 11.4344C27.5976 11.4344 27.5976 11.4426 27.6005 11.4578C26.0156 7.49777 23.3277 5.90065 21.1327 2.42407C21.0213 2.24869 20.9105 2.07331 20.802 1.88566C20.7407 1.77985 20.6911 1.68397 20.648 1.59336C20.557 1.41757 20.4867 1.23179 20.4386 1.03975C20.439 1.03063 20.4359 1.02169 20.4301 1.01467C20.4243 1.00765 20.4161 1.00305 20.4071 1.00175C20.3985 0.999416 20.3894 0.999416 20.3808 1.00175C20.3785 1.00281 20.3763 1.00419 20.3744 1.00584C20.3709 1.00584 20.3674 1.00994 20.3639 1.0111L20.3697 1.0035C16.8483 3.07063 15.6536 6.89446 15.544 8.80784C14.1368 8.90428 12.7913 9.42358 11.683 10.298C11.5672 10.1998 11.4461 10.1081 11.3202 10.0232C11.0008 8.9027 10.9873 7.71683 11.2811 6.58931C9.84091 7.24697 8.72095 8.28463 7.90664 9.20303H7.90023C7.34433 8.49742 7.38341 6.17015 7.41491 5.68435C7.40849 5.65395 7.00076 5.89656 6.94826 5.93339C6.45773 6.2841 5.9992 6.67771 5.57805 7.1096C5.0988 7.59655 4.66096 8.12276 4.26909 8.68274C3.36752 9.96323 2.72814 11.4101 2.3879 12.9398C2.38149 12.9702 2.37565 13.0017 2.36924 13.0327C2.34299 13.1561 2.24791 13.7751 2.23099 13.9096V13.9406C2.10704 14.5803 2.02984 15.2282 2 15.8791V15.951C2 23.7097 8.27646 30 16.0182 30C22.9521 30 28.7088 24.9549 29.8364 18.328C29.8597 18.1485 29.8789 17.9673 29.8999 17.786C30.1788 15.3763 29.869 12.8439 28.9905 10.7265ZM12.8327 21.7239C12.8981 21.7549 12.9599 21.7894 13.027 21.8197L13.0363 21.8256C12.9692 21.7929 12.901 21.759 12.8333 21.7239H12.8327ZM27.6017 11.4642V11.4508V11.466V11.4642Z\" fill=\"url(#paint0_linear_87_7118)\"/>\n<path d=\"M28.9907 10.7265C28.3818 9.25741 27.1475 7.67141 26.1786 7.17041C26.9672 8.72017 27.4234 10.2746 27.5978 11.4344V11.4631C28.9208 15.0572 28.1998 18.7121 27.1615 20.9452C25.555 24.4002 21.6661 27.9416 15.578 27.7692C9.00581 27.5821 3.21175 22.6885 2.1297 16.2842C1.93254 15.2735 2.1297 14.7608 2.22886 13.9406C2.10812 14.5725 2.06203 14.7555 2.00195 15.8791V15.951C2.00195 23.7098 8.27842 30 16.0202 30C22.954 30 28.7108 24.9549 29.8383 18.328C29.8616 18.1485 29.8809 17.9673 29.9019 17.7861C30.179 15.3764 29.8692 12.8439 28.9907 10.7265Z\" fill=\"url(#paint1_radial_87_7118)\"/>\n<path d=\"M28.9907 10.7265C28.3818 9.25741 27.1475 7.67141 26.1786 7.17041C26.9672 8.72017 27.4234 10.2746 27.5978 11.4344V11.4631C28.9208 15.0572 28.1998 18.7121 27.1615 20.9452C25.555 24.4002 21.6661 27.9416 15.578 27.7692C9.00581 27.5821 3.21175 22.6885 2.1297 16.2842C1.93254 15.2735 2.1297 14.7608 2.22886 13.9406C2.10812 14.5725 2.06203 14.7555 2.00195 15.8791V15.951C2.00195 23.7098 8.27842 30 16.0202 30C22.954 30 28.7108 24.9549 29.8383 18.328C29.8616 18.1485 29.8809 17.9673 29.9019 17.7861C30.179 15.3764 29.8692 12.8439 28.9907 10.7265Z\" fill=\"url(#paint2_radial_87_7118)\"/>\n<path d=\"M22.1776 12.3773C22.2085 12.3989 22.2359 12.4205 22.2651 12.4422C21.9133 11.8161 21.4749 11.243 20.9631 10.7398C16.6058 6.37292 19.821 1.27058 20.3629 1.01102L20.3687 1.00342C16.8473 3.07054 15.6526 6.89438 15.543 8.80776C15.7063 8.79665 15.869 8.78262 16.0353 8.78262C18.6631 8.78262 20.952 10.2312 22.1776 12.3773Z\" fill=\"url(#paint3_radial_87_7118)\"/>\n<path d=\"M16.0446 13.2499C16.0219 13.6006 14.7899 14.8049 14.3589 14.8049C10.3725 14.8049 9.72559 17.2216 9.72559 17.2216C9.90058 19.2572 11.3157 20.9332 13.0277 21.82C13.1059 21.8604 13.1846 21.8966 13.2611 21.9329C13.3981 21.9913 13.5358 22.0498 13.6729 22.1018C14.26 22.3094 14.8748 22.4276 15.4969 22.4526C22.4838 22.7811 23.8383 14.08 18.7955 11.5534C20.0864 11.3283 21.4269 11.8492 22.1753 12.3759C20.9503 10.2299 18.6608 8.78125 16.033 8.78125C15.8667 8.78125 15.704 8.79528 15.5406 8.80639C14.1345 8.90403 12.7903 9.4239 11.6832 10.2983C11.8973 10.4801 12.1388 10.7221 12.6468 11.2237C13.6 12.1661 16.0394 13.1359 16.0446 13.2499Z\" fill=\"url(#paint4_radial_87_7118)\"/>\n<path d=\"M16.0446 13.2499C16.0219 13.6006 14.7899 14.8049 14.3589 14.8049C10.3725 14.8049 9.72559 17.2216 9.72559 17.2216C9.90058 19.2572 11.3157 20.9332 13.0277 21.82C13.1059 21.8604 13.1846 21.8966 13.2611 21.9329C13.3981 21.9913 13.5358 22.0498 13.6729 22.1018C14.26 22.3094 14.8748 22.4276 15.4969 22.4526C22.4838 22.7811 23.8383 14.08 18.7955 11.5534C20.0864 11.3283 21.4269 11.8492 22.1753 12.3759C20.9503 10.2299 18.6608 8.78125 16.033 8.78125C15.8667 8.78125 15.704 8.79528 15.5406 8.80639C14.1345 8.90403 12.7903 9.4239 11.6832 10.2983C11.8973 10.4801 12.1388 10.7221 12.6468 11.2237C13.6 12.1661 16.0394 13.1359 16.0446 13.2499Z\" fill=\"url(#paint5_radial_87_7118)\"/>\n<path d=\"M11.0311 9.83093C11.1448 9.90459 11.2382 9.96656 11.3227 10.0233C11.0034 8.90275 10.9899 7.71688 11.2837 6.58936C9.84345 7.24702 8.72349 8.28468 7.90918 9.20308C7.97509 9.20132 10.0085 9.16449 11.0311 9.83093Z\" fill=\"url(#paint6_radial_87_7118)\"/>\n<path d=\"M2.1297 16.284C3.21175 22.6883 9.00581 27.5819 15.5827 27.769C21.6707 27.9414 25.5574 24.4 27.1661 20.945C28.2044 18.7113 28.9254 15.057 27.6025 11.4629V11.436C27.6025 11.4395 27.6025 11.4442 27.6054 11.4594C28.1024 14.7138 26.451 17.8665 23.8692 19.9986C23.8666 20.0045 23.8641 20.0106 23.8617 20.0167C18.8306 24.1223 14.0165 22.4936 13.0418 21.8289C12.9741 21.7962 12.9059 21.7623 12.8382 21.7272C9.9047 20.3242 8.69316 17.6438 8.95273 15.3469C6.47656 15.3469 5.63192 13.2529 5.63192 13.2529C5.63192 13.2529 7.85552 11.664 10.7861 13.046C13.5003 14.3262 16.0493 13.2535 16.0493 13.2529C16.0441 13.1389 13.6047 12.1662 12.6533 11.2267C12.1452 10.7251 11.9037 10.4831 11.6896 10.3013C11.5738 10.2031 11.4527 10.1114 11.3268 10.0265C11.2434 9.96809 11.1518 9.90963 11.0352 9.83421C10.0126 9.16778 7.97918 9.20461 7.9121 9.20636H7.90568C7.34978 8.50076 7.38886 6.17348 7.42036 5.68769C7.41395 5.65729 7.00621 5.89989 6.95371 5.93672C6.46318 6.28743 6.00465 6.68104 5.58351 7.11293C5.10426 7.59988 4.66642 8.12609 4.27455 8.68607C3.37298 9.96657 2.7336 11.4134 2.39336 12.9431C2.38228 12.97 1.88354 15.1523 2.1297 16.284Z\" fill=\"url(#paint7_radial_87_7118)\"/>\n<path d=\"M20.9634 10.7399C21.4752 11.2431 21.9135 11.8162 22.2653 12.4423C22.3383 12.4971 22.4083 12.5557 22.4753 12.6176C25.6532 15.55 23.9908 19.7012 23.8642 19.9993C26.446 17.8673 28.0973 14.7146 27.6003 11.4601C26.0155 7.49777 23.3276 5.90065 21.1325 2.42407C21.0211 2.24869 20.9103 2.07331 20.8018 1.88566C20.7406 1.77985 20.691 1.68397 20.6478 1.59336C20.5569 1.41757 20.4866 1.23179 20.4384 1.03975C20.4388 1.03063 20.4358 1.02169 20.43 1.01467C20.4241 1.00765 20.4159 1.00305 20.4069 1.00175C20.3983 0.999416 20.3893 0.999416 20.3807 1.00175C20.3783 1.00281 20.3762 1.00419 20.3742 1.00584C20.3707 1.00584 20.3672 1.00994 20.3637 1.0111C19.8213 1.27066 16.606 6.37301 20.9634 10.7399Z\" fill=\"url(#paint8_radial_87_7118)\"/>\n<path d=\"M22.4743 12.6146C22.4073 12.5526 22.3372 12.4941 22.2643 12.4392C22.2357 12.4176 22.206 12.396 22.1768 12.3743C21.4284 11.8482 20.088 11.3267 18.7971 11.5518C23.8393 14.0784 22.4854 22.7795 15.4985 22.451C14.8764 22.426 14.2616 22.3078 13.6744 22.1002C13.5374 22.0488 13.3997 21.9921 13.2626 21.9313C13.1833 21.895 13.1045 21.8588 13.0293 21.8185L13.0386 21.8243C14.0133 22.4908 18.8274 24.1194 23.8585 20.0121C23.8585 20.0121 23.8614 20.0045 23.8661 19.9939C23.9909 19.7011 25.6534 15.5499 22.4743 12.6146Z\" fill=\"url(#paint9_radial_87_7118)\"/>\n<path d=\"M9.72532 17.2215C9.72532 17.2215 10.3722 14.8048 14.3586 14.8048C14.7897 14.8048 16.0216 13.5994 16.0444 13.2498C16.0671 12.9002 13.4953 14.3231 10.7811 13.0428C7.85055 11.6608 5.62695 13.2498 5.62695 13.2498C5.62695 13.2498 6.47159 15.3438 8.94776 15.3438C8.68819 17.6407 9.89973 20.3187 12.8332 21.7241C12.8986 21.755 12.9604 21.7895 13.0275 21.8199C11.3154 20.9349 9.90207 19.2571 9.72532 17.2215Z\" fill=\"url(#paint10_radial_87_7118)\"/>\n<path d=\"M28.9905 10.7265C28.3816 9.2574 27.1473 7.67139 26.1784 7.17039C26.967 8.72015 27.4232 10.2746 27.5976 11.4344C27.5976 11.4344 27.5976 11.4426 27.6005 11.4578C26.0156 7.49777 23.3277 5.90065 21.1327 2.42407C21.0213 2.24869 20.9105 2.07331 20.802 1.88566C20.7407 1.77985 20.6911 1.68397 20.648 1.59336C20.557 1.41757 20.4867 1.23179 20.4386 1.03975C20.439 1.03063 20.4359 1.02169 20.4301 1.01467C20.4243 1.00765 20.4161 1.00305 20.4071 1.00175C20.3985 0.999416 20.3894 0.999416 20.3808 1.00175C20.3785 1.00281 20.3763 1.00419 20.3744 1.00584C20.3709 1.00584 20.3674 1.00994 20.3639 1.0111L20.3697 1.0035C16.8483 3.07063 15.6536 6.89446 15.544 8.80784C15.7073 8.79673 15.8701 8.78271 16.0363 8.78271C18.6641 8.78271 20.9531 10.2313 22.1786 12.3774C21.4302 11.8512 20.0898 11.3298 18.7989 11.5549C23.841 14.0815 22.4872 22.7826 15.5002 22.454C14.8782 22.429 14.2633 22.3108 13.6762 22.1033C13.5391 22.0518 13.4015 21.9951 13.2644 21.9343C13.1851 21.8981 13.1063 21.8618 13.0311 21.8215L13.0404 21.8273C12.9727 21.7946 12.9045 21.7607 12.8368 21.7256C12.9021 21.7566 12.964 21.7911 13.0311 21.8215C11.3155 20.9347 9.90216 19.2569 9.72542 17.2213C9.72542 17.2213 10.3723 14.8046 14.3587 14.8046C14.7898 14.8046 16.0217 13.5992 16.0445 13.2496C16.0392 13.1356 13.5998 12.1628 12.6484 11.2234C12.1403 10.7218 11.8988 10.4798 11.6848 10.298C11.5689 10.1998 11.4478 10.1081 11.3219 10.0232C11.0026 8.9027 10.9891 7.71683 11.2829 6.58931C9.84266 7.24697 8.7227 8.28463 7.90839 9.20303H7.90198C7.34608 8.49742 7.38516 6.17015 7.41666 5.68435C7.41024 5.65395 7.00251 5.89656 6.95001 5.93339C6.45948 6.2841 6.00095 6.67771 5.5798 7.1096C5.10055 7.59655 4.66271 8.12276 4.27084 8.68274C3.36927 9.96323 2.72989 11.4101 2.38965 12.9398C2.38324 12.9702 2.3774 13.0017 2.37099 13.0327C2.34474 13.1561 2.22574 13.7839 2.20941 13.9184C2.20941 13.9289 2.20941 13.9084 2.20941 13.9184C2.10019 14.5671 2.03026 15.2219 2 15.8791V15.951C2 23.7097 8.27646 30 16.0182 30C22.9521 30 28.7088 24.9549 29.8364 18.328C29.8597 18.1485 29.8789 17.9673 29.8999 17.786C30.1788 15.3763 29.869 12.8439 28.9905 10.7265ZM27.5999 11.4479V11.4631V11.4479Z\" fill=\"url(#paint11_linear_87_7118)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_87_7118\" x1=\"27.135\" y1=\"5.49261\" x2=\"3.81392\" y2=\"27.9437\" gradientUnits=\"userSpaceOnUse\">\n<stop offset=\"0.05\" stop-color=\"#FFF44F\"/>\n<stop offset=\"0.11\" stop-color=\"#FFE847\"/>\n<stop offset=\"0.22\" stop-color=\"#FFC830\"/>\n<stop offset=\"0.37\" stop-color=\"#FF980E\"/>\n<stop offset=\"0.4\" stop-color=\"#FF8B16\"/>\n<stop offset=\"0.46\" stop-color=\"#FF672A\"/>\n<stop offset=\"0.53\" stop-color=\"#FF3647\"/>\n<stop offset=\"0.7\" stop-color=\"#E31587\"/>\n</linearGradient>\n<radialGradient id=\"paint1_radial_87_7118\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(26.0596 4.21879) scale(29.2246 29.2888)\">\n<stop offset=\"0.13\" stop-color=\"#FFBD4F\"/>\n<stop offset=\"0.19\" stop-color=\"#FFAC31\"/>\n<stop offset=\"0.25\" stop-color=\"#FF9D17\"/>\n<stop offset=\"0.28\" stop-color=\"#FF980E\"/>\n<stop offset=\"0.4\" stop-color=\"#FF563B\"/>\n<stop offset=\"0.47\" stop-color=\"#FF3750\"/>\n<stop offset=\"0.71\" stop-color=\"#F5156C\"/>\n<stop offset=\"0.78\" stop-color=\"#EB0878\"/>\n<stop offset=\"0.86\" stop-color=\"#E50080\"/>\n</radialGradient>\n<radialGradient id=\"paint2_radial_87_7118\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(15.3809 16.1925) scale(29.2246 29.2888)\">\n<stop offset=\"0.3\" stop-color=\"#960E18\"/>\n<stop offset=\"0.35\" stop-color=\"#B11927\" stop-opacity=\"0.74\"/>\n<stop offset=\"0.43\" stop-color=\"#DB293D\" stop-opacity=\"0.34\"/>\n<stop offset=\"0.5\" stop-color=\"#F5334B\" stop-opacity=\"0.09\"/>\n<stop offset=\"0.53\" stop-color=\"#FF3750\" stop-opacity=\"0\"/>\n</radialGradient>\n<radialGradient id=\"paint3_radial_87_7118\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(18.904 -2.42815) scale(21.172 21.2184)\">\n<stop offset=\"0.13\" stop-color=\"#FFF44F\"/>\n<stop offset=\"0.25\" stop-color=\"#FFDC3E\"/>\n<stop offset=\"0.51\" stop-color=\"#FF9D12\"/>\n<stop offset=\"0.53\" stop-color=\"#FF980E\"/>\n</radialGradient>\n<radialGradient id=\"paint4_radial_87_7118\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(12.1487 23.8433) scale(13.915 13.9455)\">\n<stop offset=\"0.35\" stop-color=\"#3A8EE6\"/>\n<stop offset=\"0.47\" stop-color=\"#5C79F0\"/>\n<stop offset=\"0.67\" stop-color=\"#9059FF\"/>\n<stop offset=\"1\" stop-color=\"#C139E6\"/>\n</radialGradient>\n<radialGradient id=\"paint5_radial_87_7118\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(15.8005 12.7119) rotate(-13.9265) scale(7.37316 8.67852)\">\n<stop offset=\"0.21\" stop-color=\"#9059FF\" stop-opacity=\"0\"/>\n<stop offset=\"0.28\" stop-color=\"#8C4FF3\" stop-opacity=\"0.06\"/>\n<stop offset=\"0.75\" stop-color=\"#7716A8\" stop-opacity=\"0.45\"/>\n<stop offset=\"0.97\" stop-color=\"#6E008B\" stop-opacity=\"0.6\"/>\n</radialGradient>\n<radialGradient id=\"paint6_radial_87_7118\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(15.011 3.02041) scale(10.0108 10.0328)\">\n<stop stop-color=\"#FFE226\"/>\n<stop offset=\"0.12\" stop-color=\"#FFDB27\"/>\n<stop offset=\"0.3\" stop-color=\"#FFC82A\"/>\n<stop offset=\"0.5\" stop-color=\"#FFA930\"/>\n<stop offset=\"0.73\" stop-color=\"#FF7E37\"/>\n<stop offset=\"0.79\" stop-color=\"#FF7139\"/>\n</radialGradient>\n<radialGradient id=\"paint7_radial_87_7118\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(22.8805 -3.34313) scale(42.7109 42.8046)\">\n<stop offset=\"0.11\" stop-color=\"#FFF44F\"/>\n<stop offset=\"0.46\" stop-color=\"#FF980E\"/>\n<stop offset=\"0.62\" stop-color=\"#FF5634\"/>\n<stop offset=\"0.72\" stop-color=\"#FF3647\"/>\n<stop offset=\"0.9\" stop-color=\"#E31587\"/>\n</radialGradient>\n<radialGradient id=\"paint8_radial_87_7118\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(18.7517 1.33374) rotate(84.2447) scale(31.1996 20.4543)\">\n<stop stop-color=\"#FFF44F\"/>\n<stop offset=\"0.06\" stop-color=\"#FFE847\"/>\n<stop offset=\"0.17\" stop-color=\"#FFC830\"/>\n<stop offset=\"0.3\" stop-color=\"#FF980E\"/>\n<stop offset=\"0.36\" stop-color=\"#FF8B16\"/>\n<stop offset=\"0.45\" stop-color=\"#FF672A\"/>\n<stop offset=\"0.57\" stop-color=\"#FF3647\"/>\n<stop offset=\"0.74\" stop-color=\"#E31587\"/>\n</radialGradient>\n<radialGradient id=\"paint9_radial_87_7118\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(14.7757 6.73593) scale(26.6644 26.723)\">\n<stop offset=\"0.14\" stop-color=\"#FFF44F\"/>\n<stop offset=\"0.48\" stop-color=\"#FF980E\"/>\n<stop offset=\"0.59\" stop-color=\"#FF5634\"/>\n<stop offset=\"0.66\" stop-color=\"#FF3647\"/>\n<stop offset=\"0.9\" stop-color=\"#E31587\"/>\n</radialGradient>\n<radialGradient id=\"paint10_radial_87_7118\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(21.8145 8.30059) scale(29.1844 29.2484)\">\n<stop offset=\"0.09\" stop-color=\"#FFF44F\"/>\n<stop offset=\"0.23\" stop-color=\"#FFE141\"/>\n<stop offset=\"0.51\" stop-color=\"#FFAF1E\"/>\n<stop offset=\"0.63\" stop-color=\"#FF980E\"/>\n</radialGradient>\n<linearGradient id=\"paint11_linear_87_7118\" x1=\"26.855\" y1=\"5.37218\" x2=\"7.01043\" y2=\"25.1739\" gradientUnits=\"userSpaceOnUse\">\n<stop offset=\"0.17\" stop-color=\"#FFF44F\" stop-opacity=\"0.8\"/>\n<stop offset=\"0.27\" stop-color=\"#FFF44F\" stop-opacity=\"0.63\"/>\n<stop offset=\"0.49\" stop-color=\"#FFF44F\" stop-opacity=\"0.22\"/>\n<stop offset=\"0.6\" stop-color=\"#FFF44F\" stop-opacity=\"0\"/>\n</linearGradient>\n</defs>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/GitHubLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg {width} {height} viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\">\n\t<circle cx=\"16\" cy=\"17\" r=\"15\" fill=\"#fff\"></circle>\n\t<path\n\t\td=\"M16 0.396c-8.839 0-16 7.167-16 16 0 7.073 4.584 13.068 10.937 15.183 0.803 0.151 1.093-0.344 1.093-0.772 0-0.38-0.009-1.385-0.015-2.719-4.453 0.964-5.391-2.151-5.391-2.151-0.729-1.844-1.781-2.339-1.781-2.339-1.448-0.989 0.115-0.968 0.115-0.968 1.604 0.109 2.448 1.645 2.448 1.645 1.427 2.448 3.744 1.74 4.661 1.328 0.14-1.031 0.557-1.74 1.011-2.135-3.552-0.401-7.287-1.776-7.287-7.907 0-1.751 0.62-3.177 1.645-4.297-0.177-0.401-0.719-2.031 0.141-4.235 0 0 1.339-0.427 4.4 1.641 1.281-0.355 2.641-0.532 4-0.541 1.36 0.009 2.719 0.187 4 0.541 3.043-2.068 4.381-1.641 4.381-1.641 0.859 2.204 0.317 3.833 0.161 4.235 1.015 1.12 1.635 2.547 1.635 4.297 0 6.145-3.74 7.5-7.296 7.891 0.556 0.479 1.077 1.464 1.077 2.959 0 2.14-0.020 3.864-0.020 4.385 0 0.416 0.28 0.916 1.104 0.755 6.4-2.093 10.979-8.093 10.979-15.156 0-8.833-7.161-16-16-16z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/Graph.svelte",
    "content": "<script lang=\"ts\">\nimport IntersectionObserver from 'svelte-intersection-observer';\n\nlet data = new Map<string, number>();\ndata.set('Harper', 10);\ndata.set('LanguageTool', 650);\ndata.set('Grammarly', 4000);\n\nlet maxW = 0;\n\nfor (let val of data.values()) {\n\tif (val > maxW) {\n\t\tmaxW = val;\n\t}\n}\n\nlet scaledData = new Map();\n\nfor (let [key, val] of data.entries()) {\n\tscaledData.set(key, val / maxW);\n}\n\nlet els: Record<string, HTMLElement> = {};\n\nfunction expand(_node: HTMLElement, { width, duration }: { width: number; duration: number }) {\n\treturn {\n\t\tduration,\n\t\tcss: (t: number) => {\n\t\t\treturn `width: ${width * 100 * t}%;`;\n\t\t},\n\t};\n}\n</script>\n\n<div class=\"flex flex-col justify-start w-full h-full\">\n\t{#each scaledData as [name, width] (name)}\n\t\t<IntersectionObserver element={els[name]} let:intersecting>\n\t\t\t<div bind:this={els[name]}>\n\t\t\t\t{#if intersecting}\n\t\t\t\t\t<div class=\"relative w-full h-full\">\n\t\t\t\t\t\t{name} - {width * maxW} ms\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"rounded transition-all mb-4 p-2 font-bold bg-gray-200\"\n\t\t\t\t\t\t\tin:expand={{ width, duration: width * maxW }}\n\t\t\t\t\t\t\tstyle={`width: ${width * 100}%;`}\n\t\t\t\t\t\t></div>\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</IntersectionObserver>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/web/src/lib/components/GutterCenter.svelte",
    "content": "<div class=\"flex flex-row justify-center h-full\">\n\t<div class=\"lg:w-[1024px] w-full h-full\">\n\t\t<slot />\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/web/src/lib/components/HelixLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg {width} {height} xmlns=\"http://www.w3.org/2000/svg\" xml:space=\"preserve\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2\" viewBox=\"663.38 37.57 575.35 903.75\"><path d=\"m1083.58 1875.72 551.48 318.4a47.66 47.66 0 0 1 23.82 41.27v105.94c0 8.51-2.27 16.7-6.38 23.83 0 0-437.8-252.76-545.3-314.83a47.245 47.245 0 0 1-23.62-40.92z\" style=\"fill:#706bc8\" transform=\"translate(-420.173 -1838.145)\"/><path d=\"M1635.26 2604.84a47.228 47.228 0 0 1 23.62 40.91v133.69l-551.47-318.39a47.66 47.66 0 0 1-23.83-41.27v-105.94c0-8.52 2.27-16.71 6.38-23.83 0 0 437.8 252.76 545.3 314.83\" style=\"fill:#55c5e4\" transform=\"translate(-420.173 -1838.145)\"/><path d=\"M790.407 1432.56a35.033 35.033 0 0 0-12.898 12.9c-9.647 16.7-4.036 38.3 12.495 48.13h-.006l-28.825-16.64a47.644 47.644 0 0 1-23.829-41.27v-105.94c0-17.03 9.083-32.76 23.829-41.27l498.417-287.73.24-.14a34.962 34.962 0 0 0 12.65-12.756c9.65-16.708 4.04-38.3-12.49-48.137h.01l28.82 16.642a47.648 47.648 0 0 1 23.83 41.273v105.938c0 17.03-9.08 32.76-23.83 41.27l-29.63 17.11.4-.26z\" style=\"fill:#84ddea\" transform=\"translate(-73.938 -854.05)\"/><path d=\"M790.407 1686.24a35.08 35.08 0 0 0-12.898 12.89c-9.647 16.71-4.036 38.3 12.495 48.14h-.006l-28.825-16.64a47.656 47.656 0 0 1-23.829-41.27v-105.94c0-17.03 9.083-32.76 23.829-41.27l498.417-287.73.24-.14c5.09-2.99 9.5-7.29 12.65-12.76 9.65-16.71 4.04-38.3-12.49-48.14h.01l28.82 16.65a47.636 47.636 0 0 1 23.83 41.27v105.94c0 17.02-9.08 32.76-23.83 41.27l-29.63 17.1.4-.25z\" style=\"fill:#997bc8\" transform=\"translate(-73.938 -854.05)\"/></svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/Isolate.svelte",
    "content": "<div class=\"fixed left-0 top-0 w-screen h-screen bg-white dark:bg-black z-1000\">\n    <slot />\n</div>\n"
  },
  {
    "path": "packages/web/src/lib/components/LazyEditor.svelte",
    "content": "<script lang=\"ts\">\nimport { Spinner } from 'components';\nexport let content: string | undefined = undefined;\n\nlet editor = import('./Editor.svelte');\nlet loading = true;\n\nfunction onReady() {\n\tloading = false;\n}\n</script>\n\n{#await editor then { default: Editor}}\n  <div class={`flex-row h-full w-full ${loading ? \"hidden\" : \"flex\"}`}>\n\t\t<Editor content={content} {onReady}/>\n  </div>\n{/await}\n\n{#if loading}\n  <div class=\"flex h-full max-w-full flex-col items-center justify-center gap-2\">\n    <Spinner color=\"green\" />\n    <p class=\"text-sm\">Loading Harper's grammar engine...</p>\n  </div>\n{/if}\n"
  },
  {
    "path": "packages/web/src/lib/components/LintCard.svelte",
    "content": "<script lang=\"ts\">\nimport { Button } from 'components';\nimport {\n\tlintKindColor,\n\tlintKindTextColor,\n\ttype UnpackedLint,\n\ttype UnpackedSuggestion,\n} from 'lint-framework';\nimport { slide } from 'svelte/transition';\n\nexport let lint: UnpackedLint;\nexport let open = false;\nexport let onToggleOpen: () => void;\nexport let focusError: () => void;\nexport let onApply: (s: UnpackedSuggestion) => void;\nexport let snippet: {\n\tprefix: string;\n\tproblem: string;\n\tsuffix: string;\n\tprefixEllipsis: boolean;\n\tsuffixEllipsis: boolean;\n};\n\nfunction suggestionText(s: UnpackedSuggestion): string {\n\treturn s.replacement_text !== '' ? s.replacement_text : String(s.kind);\n}\n</script>\n\n<div\n  class=\"rounded-lg border border-gray-300 dark:border-gray-700 shadow-sm bg-white dark:bg-[#0d1117]\"\n  on:click={() => focusError?.()}\n>\n  <div\n    role=\"button\"\n    tabindex=\"0\"\n    class=\"flex items-center justify-between p-3 cursor-pointer select-none\"\n    aria-expanded={open}\n    on:click={() => onToggleOpen?.()}\n    on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && (e.preventDefault(), onToggleOpen?.())}\n  >\n    <div\n      class=\"text-sm font-semibold pb-1\"\n      style={`border-bottom: 2px solid ${lintKindColor(lint.lint_kind)}`}\n    >\n      {lint.lint_kind_pretty}\n    </div>\n    <svg\n      class={`ml-3 h-4 w-4 transform transition-transform duration-200 ${open ? 'rotate-180' : ''}`}\n      viewBox=\"0 0 20 20\"\n      fill=\"currentColor\"\n      aria-hidden=\"true\"\n    >\n      <path fill-rule=\"evenodd\" d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.127l3.71-3.896a.75.75 0 111.08 1.04l-4.243 4.46a.75.75 0 01-1.08 0L5.25 8.27a.75.75 0 01-.02-1.06z\" clip-rule=\"evenodd\" />\n    </svg>\n  </div>\n  {#if open}\n    <div class=\"px-3 pb-3\" in:slide={{ duration: 150 }} out:slide={{ duration: 150 }}>\n      <div class=\"text-sm text-gray-700 dark:text-gray-300 mb-2 break-words\">\n        {@html lint.message_html}\n      </div>\n      <div class=\"text-xs font-mono mb-2 p-2 rounded border border-gray-200 dark:border-gray-800 bg-gray-50 dark:bg-[#0b0f14] text-gray-800 dark:text-gray-200 leading-snug\">\n        <span class=\"text-gray-500\">{snippet.prefixEllipsis ? '…' : ''}{snippet.prefix}</span>\n        <span class=\"px-0.5 rounded bg-yellow-200 text-black dark:bg-yellow-800 dark:text-yellow-100\">{snippet.problem}</span>\n        <span class=\"text-gray-500\">{snippet.suffix}{snippet.suffixEllipsis ? '…' : ''}</span>\n      </div>\n      {#if lint.suggestions && lint.suggestions.length > 0}\n        <div class=\"flex flex-wrap gap-2 justify-end\">\n          {#each lint.suggestions as s}\n            <Button\n              size=\"xs\"\n              color={lintKindColor(lint.lint_kind)}\n              textColor={lintKindTextColor(lint.lint_kind)}\n              class=\"!px-2 !py-1 text-xs font-semibold\"\n              title={`Replace with \\\"${suggestionText(s)}\\\"`}\n              on:click={() => onApply?.(s)}\n            >\n              {suggestionText(s)}\n            </Button>\n          {/each}\n        </div>\n      {:else}\n        <div class=\"text-xs text-gray-400\">No suggestions available.</div>\n      {/if}\n    </div>\n  {/if}\n</div>\n"
  },
  {
    "path": "packages/web/src/lib/components/LintKindChart.svelte",
    "content": "<script lang=\"ts\">\nimport Chart from 'chart.js/auto';\nimport { lintKindColor } from 'lint-framework';\nimport { onMount } from 'svelte';\n\n// Receive lint counts from the parent component\nexport let lintCounts: Record<string, number> = {};\n\nlet chartCanvas: HTMLCanvasElement;\nlet lintChart: Chart | null = null;\n\n// Update the chart data with new lint counts\nfunction updateChart() {\n\tif (lintChart) {\n\t\tlintChart.data.labels = Object.keys(lintCounts);\n\t\tlintChart.data.datasets[0].data = Object.values(lintCounts);\n\t\tlintChart.update();\n\t}\n}\n\nonMount(() => {\n\t// Create a new Chart.js bar chart on mount\n\tlintChart = new Chart(chartCanvas, {\n\t\ttype: 'bar',\n\t\tdata: {\n\t\t\tlabels: Object.keys(lintCounts),\n\t\t\tdatasets: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Number of Corrections Applied',\n\t\t\t\t\tdata: Object.values(lintCounts),\n\t\t\t\t\tbackgroundColor: Object.keys(lintCounts).map(lintKindColor),\n\t\t\t\t\tborderColor: 'rgba(80, 80, 80, 1)',\n\t\t\t\t\tborderWidth: 2,\n\t\t\t\t\tborderRadius: 6, // Rounded corners\n\t\t\t\t\tbarPercentage: 0.6, // Thicker bars\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\toptions: {\n\t\t\tresponsive: true,\n\t\t\tmaintainAspectRatio: false,\n\t\t\tplugins: {\n\t\t\t\ttitle: {\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\ttext: 'Most Common Kinds of Corrections',\n\t\t\t\t\tcolor: '#444', // Dark gray text\n\t\t\t\t\tfont: {\n\t\t\t\t\t\tsize: 18,\n\t\t\t\t\t\tweight: 'bold',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tdisplay: false,\n\t\t\t\t},\n\t\t\t},\n\t\t\tscales: {\n\t\t\t\tx: {\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tcolor: '#ddd',\n\t\t\t\t\t},\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tcolor: '#333',\n\t\t\t\t\t\tfont: {\n\t\t\t\t\t\t\tsize: 14,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ty: {\n\t\t\t\t\tbeginAtZero: true,\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tcolor: '#ddd',\n\t\t\t\t\t},\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tstepSize: 1,\n\t\t\t\t\t\tcolor: '#333',\n\t\t\t\t\t\tfont: {\n\t\t\t\t\t\t\tsize: 14,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t});\n});\n\n// Whenever lintCounts changes, update the chart\n$: if (lintChart) {\n\tupdateChart();\n}\n</script>\n\n<style>\n  /* Wrap the chart in a container to control layout and background */\n  .chart-container {\n    background: #f9f9f9;       /* Subtle off-white background */\n    border: 1px solid #ccc;    /* Light gray border */\n    border-radius: 8px;        /* Rounded corners */\n    padding: 1rem;\n    width: 100%;\n    max-width: 700px;          /* Adjust as needed */\n    height: 400px;             /* Fixed height for the chart area */\n    margin: 0 auto;            /* Center horizontally */\n  }\n\n  canvas {\n    width: 100%;\n    height: 100%;\n  }\n</style>\n\n<div class=\"chart-container\">\n  <canvas bind:this={chartCanvas}></canvas>\n</div>\n"
  },
  {
    "path": "packages/web/src/lib/components/LintSidebar.svelte",
    "content": "<script lang=\"ts\">\nimport { Button, Card } from 'components';\nimport { type IgnorableLintBox, type LintBox, type UnpackedLint } from 'lint-framework';\nimport LintCard from '$lib/components/LintCard.svelte';\n\nexport let lintBoxes: IgnorableLintBox[] = [];\nexport let focusLint: (lintBox: IgnorableLintBox) => void = () => {};\n\nasync function ignoreAll() {\n\tawait Promise.all(lintBoxes.map((b) => (b.ignoreLint ? b.ignoreLint() : Promise.resolve())));\n}\n\nlet openSet: Set<number> = new Set();\n\n$: allOpen = lintBoxes.length > 0 && openSet.size === lintBoxes.length;\n\nfunction toggleCard(i: number) {\n\tconst wasOpen = openSet.has(i);\n\tif (wasOpen) {\n\t\tconst ns = new Set(openSet);\n\t\tns.delete(i);\n\t\topenSet = ns;\n\t} else {\n\t\tconst ns = new Set(openSet);\n\t\tns.add(i);\n\t\topenSet = ns;\n\t}\n}\n\nfunction toggleAll() {\n\tif (allOpen) {\n\t\topenSet = new Set();\n\t} else {\n\t\topenSet = new Set(lintBoxes.map((_, i) => i));\n\t}\n}\n\nfunction collapse(contents: string) {\n\treturn contents.replace(/\\s+/g, ' ').trim();\n}\n\nfunction createSnippetFor(lintBox: LintBox) {\n\tlet lint = lintBox.lint;\n\tlet content = lintBox.source.textContent ?? '';\n\n\tconst CONTEXT = 60;\n\tconst start = Math.max(0, lint.span.start - CONTEXT);\n\tconst end = Math.min(content.length, lint.span.end + CONTEXT);\n\n\tlet prefix = content.slice(start, lint.span.start);\n\tlet suffix = content.slice(lint.span.end, end);\n\n\tprefix = collapse(prefix);\n\tconst problem = collapse(lint.problem_text);\n\tsuffix = collapse(suffix);\n\n\treturn {\n\t\tprefix,\n\t\tproblem,\n\t\tsuffix,\n\t\tprefixEllipsis: start > 0,\n\t\tsuffixEllipsis: end < content.length,\n\t};\n}\n\n$: if (openSet.size > 0) {\n\tconst max = lintBoxes.length;\n\tconst next = new Set<number>();\n\tfor (const idx of openSet) {\n\t\tif (idx >= 0 && idx < max) next.add(idx);\n\t}\n\tif (next.size !== openSet.size) openSet = next;\n}\n</script>\n\n<Card class=\"hidden md:flex md:flex-col md:w-1/3 h-full p-5 z-10 bg-white dark:bg-black\">\n\t<div class=\"flex items-center justify-between mb-3\">\n\t\t<div class=\"text-base font-semibold\">Problems</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button\n\t\t\t\tsize=\"xs\"\n\t\t\t\tcolor=\"light\"\n\t\t\t\tclass=\"text-xs\"\n\t\t\t\ton:click={toggleAll}\n\t\t\t\taria-label={allOpen ? 'Collapse all lint cards' : 'Open all lint cards'}\n\t\t\t>\n\t\t\t\t{allOpen ? 'Collapse all' : 'Open all'}\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tsize=\"xs\"\n\t\t\t\tcolor=\"light\"\n\t\t\t\tclass=\"text-xs\"\n\t\t\t\ton:click={ignoreAll}\n\t\t\t\tdisabled={lintBoxes.length === 0}\n\t\t\t\taria-label=\"Ignore all current lints\"\n\t\t\t>\n\t\t\t\tIgnore all\n\t\t\t</Button>\n\t\t</div>\n\t</div>\n\t<div class=\"flex-1 overflow-y-auto pr-1\">\n\t\t{#if lintBoxes.length === 0}\n\t\t\t<p class=\"text-sm text-gray-500\">No lints yet.</p>\n\t\t{:else}\n\t\t\t<div class=\"space-y-3\">\n\t\t\t\t{#each lintBoxes as lintBox, i}\n\t\t\t\t\t<LintCard\n\t\t\t\t\t\tlint={lintBox.lint}\n\t\t\t\t\t\tsnippet={createSnippetFor(lintBox)}\n\t\t\t\t\t\topen={openSet.has(i)}\n\t\t\t\t\t\tonToggleOpen={() => toggleCard(i)}\n\t\t\t\t\t\tfocusError={() => focusLint(lintBox)}\n\t\t\t\t\t\tonApply={(s) => lintBox.applySuggestion(s)}\n\t\t\t\t\t/>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t{/if}\n\t</div>\n</Card>\n"
  },
  {
    "path": "packages/web/src/lib/components/Logo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg\n\t{width}\n\t{height}\n\tviewBox=\"0 0 695 411\"\n\tversion=\"1.1\"\n\txmlns=\"http://www.w3.org/2000/svg\"\n\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\txml:space=\"preserve\"\n\tstyle=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;\"\n\tclass=\"dark:text-white text-black\"\n>\n\t<g transform=\"matrix(1,0,0,1,-5,-1720)\">\n\t\t<g id=\"Artboard1\" transform=\"matrix(0.824576,0,0,0.749254,0.365685,430.856)\">\n\t\t\t<rect x=\"5.62\" y=\"1720.57\" width=\"842.425\" height=\"547.24\" style=\"fill:none;\" />\n\t\t\t<g transform=\"matrix(1.21274,0,0,1.33466,-2183.71,393.157)\">\n\t\t\t\t<g transform=\"matrix(1,0,0,1,-22.3927,1.08043)\">\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M1930.93,1121.75C1930.93,1121.75 1974.66,1080.73 2041.34,1094.1C2086.61,1103.18 2122.83,1145.4 2122.83,1145.4\"\n\t\t\t\t\t\tstroke=\"currentcolor\"\n\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\tstroke-width=\"22.92px\"\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\t\t\t\t<g transform=\"matrix(1,0,0,1,-47.3485,12.3935)\">\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M2250.3,1107.1C2250.3,1107.1 2261.8,1065.58 2311.59,1047.05C2361.62,1028.44 2422.42,1051.13 2422.42,1051.13\"\n\t\t\t\t\t\tstroke=\"currentcolor\"\n\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\tstroke-width=\"22.92px\"\n\t\t\t\t\t/>\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\t\t\t\t<g transform=\"matrix(1.10085,0,0,1.10085,-212.096,-122.054)\">\n\t\t\t\t\t<g transform=\"matrix(1,0,0,1,14.3186,-0.853887)\">\n\t\t\t\t\t\t<ellipse\n\t\t\t\t\t\t\tcx=\"1981.62\"\n\t\t\t\t\t\t\tcy=\"1247.49\"\n\t\t\t\t\t\t\trx=\"87.401\"\n\t\t\t\t\t\t\try=\"87.881\"\n\t\t\t\t\t\t\tstroke=\"currentcolor\"\n\t\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\t\tstroke-width=\"22.92px\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t\t<rect\n\t\t\t\t\t\tx=\"2083.34\"\n\t\t\t\t\t\ty=\"1231.11\"\n\t\t\t\t\t\twidth=\"66.702\"\n\t\t\t\t\t\theight=\"15.521\"\n\t\t\t\t\t\tstroke=\"currentcolor\"\n\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\tstroke-width=\"22.92px\"\n\t\t\t\t\t/>\n\t\t\t\t\t<rect\n\t\t\t\t\t\tx=\"1892.23\"\n\t\t\t\t\t\ty=\"1208.69\"\n\t\t\t\t\t\twidth=\"16.306\"\n\t\t\t\t\t\theight=\"30.182\"\n\t\t\t\t\t\tstroke=\"currentcolor\"\n\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\tstroke-width=\"22.92px\"\n\t\t\t\t\t/>\n\t\t\t\t\t<g transform=\"matrix(-1,0,0,1,4281.79,-0.853887)\">\n\t\t\t\t\t\t<ellipse\n\t\t\t\t\t\t\tcx=\"1981.62\"\n\t\t\t\t\t\t\tcy=\"1247.49\"\n\t\t\t\t\t\t\trx=\"87.401\"\n\t\t\t\t\t\t\try=\"87.881\"\n\t\t\t\t\t\t\tstroke=\"currentcolor\"\n\t\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\t\tstroke-width=\"22.92px\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t\t<g transform=\"matrix(-1,0,0,1,4296.11,0)\">\n\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\tx=\"2083.34\"\n\t\t\t\t\t\t\ty=\"1231.11\"\n\t\t\t\t\t\t\twidth=\"66.702\"\n\t\t\t\t\t\t\theight=\"15.521\"\n\t\t\t\t\t\t\tstroke=\"currentcolor\"\n\t\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\t\tstroke-width=\"22.92px\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t\t<g transform=\"matrix(-1,0,0,1,4296.11,0)\">\n\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\tx=\"1892.23\"\n\t\t\t\t\t\t\ty=\"1208.69\"\n\t\t\t\t\t\t\twidth=\"16.306\"\n\t\t\t\t\t\t\theight=\"30.182\"\n\t\t\t\t\t\t\tstroke=\"currentcolor\"\n\t\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\t\tstroke-width=\"22.92px\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t</g>\n\t\t</g>\n\t</g>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/NeovimLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg {width} {height} viewBox=\"0 0 602 734\" xmlns=\"http://www.w3.org/2000/svg\">\n  <defs>\n    <linearGradient id=\"g1\" x1=\"50%\" y1=\"0%\" x2=\"50%\" y2=\"100%\">\n      <stop offset=\"0%\"  stop-color=\"#16B0ED\" stop-opacity=\"0.80\"/>\n      <stop offset=\"100%\" stop-color=\"#0F59B2\" stop-opacity=\"0.84\"/>\n    </linearGradient>\n    <linearGradient id=\"g2\" x1=\"50%\" y1=\"0%\" x2=\"50%\" y2=\"100%\">\n      <stop offset=\"0%\" stop-color=\"#7DB643\"/>\n      <stop offset=\"100%\" stop-color=\"#367533\"/>\n    </linearGradient>\n    <linearGradient id=\"g3\" x1=\"50%\" y1=\"0%\" x2=\"50%\" y2=\"100%\">\n      <stop offset=\"0%\" stop-color=\"#88C649\" stop-opacity=\"0.8\"/>\n      <stop offset=\"100%\" stop-color=\"#439240\" stop-opacity=\"0.84\"/>\n    </linearGradient>\n  </defs>\n  <g fill=\"none\" stroke=\"none\" fill-rule=\"evenodd\">\n    <!-- left green section -->\n    <path d=\"M0 155.57 155 0v733.43L0 578.24V155.57z\" fill=\"url(#g1)\"/>\n    <!-- right green section -->\n    <path d=\"M598 155.57 443 0v733.43l155-155.19V155.57z\" fill=\"url(#g2)\" transform=\"translate(598 366.71) scale(-1 1) translate(0px -366.71)\"/>\n    <!-- central cross -->\n    <path d=\"M155 0l403 615.19-112.78 112.81L42 114.17z\" fill=\"url(#g3)\"/>\n    <!-- subtle shadow -->\n    <path d=\"M155 283.83l-.21 24.17L31 124.71l11.46-11.71z\" fill=\"#000\" opacity=\"0.13\"/>\n  </g>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/ObsidianLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg {width} {height} viewBox=\"0 0 512 512\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t<defs>\n\t\t<radialGradient\n\t\t\tid=\"b\"\n\t\t\tcx=\"0\"\n\t\t\tcy=\"0\"\n\t\t\tr=\"1\"\n\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\tgradientTransform=\"matrix(-48 -185 123 -32 179 429.7)\"\n\t\t>\n\t\t\t<stop stop-color=\"#fff\" stop-opacity=\".4\" />\n\t\t\t<stop offset=\"1\" stop-opacity=\".1\" />\n\t\t</radialGradient>\n\t\t<radialGradient\n\t\t\tid=\"c\"\n\t\t\tcx=\"0\"\n\t\t\tcy=\"0\"\n\t\t\tr=\"1\"\n\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\tgradientTransform=\"matrix(41 -310 229 30 341.6 351.3)\"\n\t\t>\n\t\t\t<stop stop-color=\"#fff\" stop-opacity=\".6\" />\n\t\t\t<stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".1\" />\n\t\t</radialGradient>\n\t\t<radialGradient\n\t\t\tid=\"d\"\n\t\t\tcx=\"0\"\n\t\t\tcy=\"0\"\n\t\t\tr=\"1\"\n\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\tgradientTransform=\"matrix(57 -261 178 39 190.5 296.3)\"\n\t\t>\n\t\t\t<stop stop-color=\"#fff\" stop-opacity=\".8\" />\n\t\t\t<stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".4\" />\n\t\t</radialGradient>\n\t\t<radialGradient\n\t\t\tid=\"e\"\n\t\t\tcx=\"0\"\n\t\t\tcy=\"0\"\n\t\t\tr=\"1\"\n\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\tgradientTransform=\"matrix(-79 -133 153 -90 321.4 464.2)\"\n\t\t>\n\t\t\t<stop stop-color=\"#fff\" stop-opacity=\".3\" />\n\t\t\t<stop offset=\"1\" stop-opacity=\".3\" />\n\t\t</radialGradient>\n\t\t<radialGradient\n\t\t\tid=\"f\"\n\t\t\tcx=\"0\"\n\t\t\tcy=\"0\"\n\t\t\tr=\"1\"\n\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\tgradientTransform=\"matrix(-29 136 -92 -20 300.7 149.9)\"\n\t\t>\n\t\t\t<stop stop-color=\"#fff\" stop-opacity=\"0\" />\n\t\t\t<stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".2\" />\n\t\t</radialGradient>\n\t\t<radialGradient\n\t\t\tid=\"g\"\n\t\t\tcx=\"0\"\n\t\t\tcy=\"0\"\n\t\t\tr=\"1\"\n\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\tgradientTransform=\"matrix(72 73 -155 153 137.8 225.2)\"\n\t\t>\n\t\t\t<stop stop-color=\"#fff\" stop-opacity=\".2\" />\n\t\t\t<stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".4\" />\n\t\t</radialGradient>\n\t\t<radialGradient\n\t\t\tid=\"h\"\n\t\t\tcx=\"0\"\n\t\t\tcy=\"0\"\n\t\t\tr=\"1\"\n\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\tgradientTransform=\"matrix(20 118 -251 43 215.1 273.7)\"\n\t\t>\n\t\t\t<stop stop-color=\"#fff\" stop-opacity=\".1\" />\n\t\t\t<stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".3\" />\n\t\t</radialGradient>\n\t\t<radialGradient\n\t\t\tid=\"i\"\n\t\t\tcx=\"0\"\n\t\t\tcy=\"0\"\n\t\t\tr=\"1\"\n\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\tgradientTransform=\"matrix(-162 -85 268 -510 374.4 371.7)\"\n\t\t>\n\t\t\t<stop stop-color=\"#fff\" stop-opacity=\".2\" />\n\t\t\t<stop offset=\".5\" stop-color=\"#fff\" stop-opacity=\".2\" />\n\t\t\t<stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".3\" />\n\t\t</radialGradient>\n\t\t<filter\n\t\t\tid=\"a\"\n\t\t\tx=\"80.1\"\n\t\t\ty=\"37\"\n\t\t\twidth=\"351.1\"\n\t\t\theight=\"443.2\"\n\t\t\tfilterUnits=\"userSpaceOnUse\"\n\t\t\tcolor-interpolation-filters=\"sRGB\"\n\t\t>\n\t\t\t<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n\t\t\t<feBlend in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\" />\n\t\t\t<feGaussianBlur stdDeviation=\"6.5\" result=\"effect1_foregroundBlur_744_9191\" />\n\t\t</filter>\n\t</defs>\n\t<rect id=\"logo-bg\" fill=\"#262626\" width=\"512\" height=\"512\" rx=\"100\" />\n\t<g filter=\"url(#a)\">\n\t\t<path\n\t\t\td=\"M359.2 437.5c-2.6 19-21.3 33.9-40 28.7-26.5-7.2-57.2-18.6-84.8-20.7l-42.4-3.2a28 28 0 0 1-18-8.3l-73-74.8a27.7 27.7 0 0 1-5.4-30.7s45-98.6 46.8-103.7c1.6-5.1 7.8-49.9 11.4-73.9a28 28 0 0 1 9-16.5L249 57.2a28 28 0 0 1 40.6 3.4l72.6 91.6a29.5 29.5 0 0 1 6.2 18.3c0 17.3 1.5 53 11.2 76a301.3 301.3 0 0 0 35.6 58.2 14 14 0 0 1 1 15.6c-6.3 10.7-18.9 31.3-36.6 57.6a142.2 142.2 0 0 0-20.5 59.6Z\"\n\t\t\tfill=\"#000\"\n\t\t\tfill-opacity=\".3\"\n\t\t/>\n\t</g>\n\t<path\n\t\tid=\"arrow\"\n\t\td=\"M359.9 434.3c-2.6 19.1-21.3 34-40 28.9-26.4-7.3-57-18.7-84.7-20.8l-42.3-3.2a27.9 27.9 0 0 1-18-8.4l-73-75a27.9 27.9 0 0 1-5.4-31s45.1-99 46.8-104.2c1.7-5.1 7.8-50 11.4-74.2a28 28 0 0 1 9-16.6l86.2-77.5a28 28 0 0 1 40.6 3.5l72.5 92a29.7 29.7 0 0 1 6.2 18.3c0 17.4 1.5 53.2 11.1 76.3a303 303 0 0 0 35.6 58.5 14 14 0 0 1 1.1 15.7c-6.4 10.8-18.9 31.4-36.7 57.9a143.3 143.3 0 0 0-20.4 59.8Z\"\n\t\tfill=\"#6C31E3\"\n\t/>\n\t<path\n\t\td=\"M182.7 436.4c33.9-68.7 33-118 18.5-153-13.2-32.4-37.9-52.8-57.3-65.5-.4 1.9-1 3.7-1.8 5.4L96.5 324.8a27.9 27.9 0 0 0 5.5 31l72.9 75c2.3 2.3 5 4.2 7.8 5.6Z\"\n\t\tfill=\"url(#b)\"\n\t/>\n\t<path\n\t\td=\"M274.9 297c9.1.9 18 2.9 26.8 6.1 27.8 10.4 53.1 33.8 74 78.9 1.5-2.6 3-5.1 4.6-7.5a1222 1222 0 0 0 36.7-57.9 14 14 0 0 0-1-15.7 303 303 0 0 1-35.7-58.5c-9.6-23-11-58.9-11.1-76.3 0-6.6-2.1-13.1-6.2-18.3l-72.5-92-1.2-1.5c5.3 17.5 5 31.5 1.7 44.2-3 11.8-8.6 22.5-14.5 33.8-2 3.8-4 7.7-5.9 11.7a140 140 0 0 0-15.8 58c-1 24.2 3.9 54.5 20 95Z\"\n\t\tfill=\"url(#c)\"\n\t/>\n\t<path\n\t\td=\"M274.8 297c-16.1-40.5-21-70.8-20-95 1-24 8-42 15.8-58l6-11.7c5.8-11.3 11.3-22 14.4-33.8a78.5 78.5 0 0 0-1.7-44.2 28 28 0 0 0-39.4-2l-86.2 77.5a28 28 0 0 0-9 16.6L144.2 216c0 .7-.2 1.3-.3 2 19.4 12.6 44 33 57.3 65.3 2.6 6.4 4.8 13.1 6.4 20.4a200 200 0 0 1 67.2-6.8Z\"\n\t\tfill=\"url(#d)\"\n\t/>\n\t<path\n\t\td=\"M320 463.2c18.6 5.1 37.3-9.8 39.9-29a153 153 0 0 1 15.9-52.2c-21-45.1-46.3-68.5-74-78.9-29.5-11-61.6-7.3-94.2.6 7.3 33.1 3 76.4-24.8 132.7 3.1 1.6 6.6 2.5 10.1 2.8l43.9 3.3c23.8 1.7 59.3 14 83.2 20.7Z\"\n\t\tfill=\"url(#e)\"\n\t/>\n\t<path\n\t\tfill-rule=\"evenodd\"\n\t\tclip-rule=\"evenodd\"\n\t\td=\"M255 200.5c-1.1 24 1.9 51.4 18 91.8l-5-.5c-14.5-42.1-17.7-63.7-16.6-88 1-24.3 8.9-43 16.7-59 2-4 6.6-11.5 8.6-15.3 5.8-11.3 9.7-17.2 13-27.5 4.8-14.4 3.8-21.2 3.2-28 3.7 24.5-10.4 45.8-21 67.5a145 145 0 0 0-17 59Z\"\n\t\tfill=\"url(#f)\"\n\t/>\n\t<path\n\t\tfill-rule=\"evenodd\"\n\t\tclip-rule=\"evenodd\"\n\t\td=\"M206 285.1c2 4.4 3.7 8 4.9 13.5l-4.3 1c-1.7-6.4-3-11-5.5-16.5-14.6-34.3-38-52-57-65 23 12.4 46.7 31.9 61.9 67Z\"\n\t\tfill=\"url(#g)\"\n\t/>\n\t<path\n\t\tfill-rule=\"evenodd\"\n\t\tclip-rule=\"evenodd\"\n\t\td=\"M211.1 303c8 37.5-1 85.2-27.5 131.6 22.2-46 33-90.1 24-131l3.5-.7Z\"\n\t\tfill=\"url(#h)\"\n\t/>\n\t<path\n\t\tfill-rule=\"evenodd\"\n\t\tclip-rule=\"evenodd\"\n\t\td=\"M302.7 299.5c43.5 16.3 60.3 52 72.8 81.9-15.5-31.2-37-65.7-74.4-78.5-28.4-9.8-52.4-8.6-93.5.7l-.9-4c43.6-10 66.4-11.2 96 0Z\"\n\t\tfill=\"url(#i)\"\n\t/>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/Section.svelte",
    "content": "<script lang=\"ts\">\nexport let layout: 'single' | 'split' = 'single';\nexport let reverse = false;\n\nconst hasSubtitle = Boolean($$slots.subtitle);\nconst hasAside = Boolean($$slots.aside);\n\nconst { class: extraClass = '', ...restProps } = $$restProps;\n</script>\n\n<section\n\t{...restProps}\n\tclass={`w-full px-4 md:px-6 ${extraClass}`.trim()}\n>\n\t{#if layout === 'split'}\n\t\t<div class={`grid gap-8 md:grid-cols-2 ${hasAside ? 'md:items-start' : ''}`}>\n\t\t\t<div class={`space-y-4 ${reverse ? 'md:order-2' : ''}`}>\n\t\t\t\t{#if $$slots.title}\n\t\t\t\t\t<h3 class=\"font-semibold\">\n\t\t\t\t\t\t<slot name=\"title\" />\n\t\t\t\t\t</h3>\n\t\t\t\t{/if}\n\t\t\t\t{#if hasSubtitle}\n\t\t\t\t\t<p class=\"text-gray-600 dark:text-gray-300\">\n\t\t\t\t\t\t<slot name=\"subtitle\" />\n\t\t\t\t\t</p>\n\t\t\t\t{/if}\n\t\t\t\t{#if $$slots.default}\n\t\t\t\t\t<div class=\"space-y-3\">\n\t\t\t\t\t\t<slot />\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t\t{#if hasAside}\n\t\t\t\t<div class={`${reverse ? 'md:order-1' : ''}`}>\n\t\t\t\t\t<slot name=\"aside\" />\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t</div>\n\t{:else}\n\t\t<div class=\"space-y-4\">\n\t\t\t{#if $$slots.title}\n\t\t\t\t<h3 class=\"font-semibold\">\n\t\t\t\t\t<slot name=\"title\" />\n\t\t\t\t</h3>\n\t\t\t{/if}\n\t\t\t{#if hasSubtitle}\n\t\t\t\t<p class=\"text-gray-600 dark:text-gray-300\">\n\t\t\t\t\t<slot name=\"subtitle\" />\n\t\t\t\t</p>\n\t\t\t{/if}\n\t\t\t{#if $$slots.default}\n\t\t\t\t<div class=\"space-y-3\">\n\t\t\t\t\t<slot />\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t</div>\n\t{/if}\n</section>\n"
  },
  {
    "path": "packages/web/src/lib/components/SublimeLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg {width} {height} id=\"Layer_1\" data-name=\"Layer 1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 512.23 512.12\"><defs><style>.cls-1{fill:#4d4d4e;}.cls-2{fill:#f89820;}.cls-3{fill:url(#linear-gradient);}</style><linearGradient id=\"linear-gradient\" x1=\"45.04\" y1=\"421.1\" x2=\"93.51\" y2=\"437.87\" gradientTransform=\"matrix(5.59, 0, 0, -5.59, -126.58, 2748.7)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0.23\" stop-color=\"#f89822\"/><stop offset=\"1\" stop-color=\"#c27818\"/></linearGradient></defs><title>sublime-text</title><path class=\"cls-1\" d=\"M492.17,511.79H19.6A19.91,19.91,0,0,1-.23,492V19.5A19.91,19.91,0,0,1,19.6-.33H492.17A19.91,19.91,0,0,1,512,19.5V492.07a19.89,19.89,0,0,1-19.83,19.72Z\" transform=\"translate(0.23 0.33)\"/><path class=\"cls-2\" d=\"M117.85,154.33l268-85.07s19-10,14.45,8.48l.68,82s3.33,12-13.18,15L278.93,208.78Z\" transform=\"translate(0.23 0.33)\"/><path class=\"cls-2\" d=\"M117.85,154.33s-10.55,2.52-7.45,20.52l-.57,79s-.92,10,18,14l265.64,85.52s8.94,3.55,7.91-7.45l.11-88s2.52-9.06-14-15L278.93,208.78Z\" transform=\"translate(0.23 0.33)\"/><path class=\"cls-3\" d=\"M234.9,302.22l-113,34.51s-13.64.46-12,26-.12,77-.12,77,1.15,9.52,14.22,4l268-85.53s9.51-2.41,1.49-5S234.9,302.22,234.9,302.22Z\" transform=\"translate(0.23 0.33)\"/></svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/Testimonial.svelte",
    "content": "<script lang=\"ts\">\nimport { Card } from 'components';\n\nexport let authorName: string;\nexport let authorSubtitle: string;\nexport let testimonial: string;\n</script>\n\n<Card class=\"flex h-full flex-col justify-between gap-6\">\n\t<p class=\"text-base text-neutral-700 dark:text-neutral-200\">\n\t\t&ldquo;{testimonial}&rdquo;\n\t</p>\n\t<footer class=\"flex flex-col gap-1\">\n\t\t<span class=\"font-semibold text-neutral-900 dark:text-neutral-50\">{authorName}</span>\n\t\t<span class=\"text-sm text-neutral-600 dark:text-neutral-400\">{authorSubtitle}</span>\n\t</footer>\n</Card>\n"
  },
  {
    "path": "packages/web/src/lib/components/TestimonialCollection.svelte",
    "content": "<script lang=\"ts\">\nimport { Link } from 'components';\nimport Testimonial from './Testimonial.svelte';\n\ntype TestimonialItem = {\n\tauthorName: string;\n\tauthorSubtitle: string;\n\ttestimonial: string;\n\t/** The URL the testimonial was sourced from. */\n\tsource: string;\n};\n\nexport let testimonials: TestimonialItem[] = [];\n\nconst { class: extraClass = '', ...restProps } = $$restProps;\n</script>\n\n<section\n\t{...restProps}\n\tclass={`mx-auto w-full max-w-6xl ${extraClass}`.trim()}\n>\n\t<div class=\"columns-1 gap-6 sm:columns-2 lg:columns-3\">\n\t\t{#each testimonials as item, index (item.authorName + index)}\n\t\t\t<Link href={item.source} class={`block mb-6 break-inside-avoid ${index % 2 == 0 ? \"skew-hover\" : \"skew-hover-left\"}`}>\n\t\t\t\t<Testimonial\n\t\t\t\t\tauthorName={item.authorName}\n\t\t\t\t\tauthorSubtitle={item.authorSubtitle}\n\t\t\t\t\ttestimonial={item.testimonial}\n\t\t\t\t/>\n\t\t\t</Link>\n\t\t{/each}\n\t</div>\n</section>\n"
  },
  {
    "path": "packages/web/src/lib/components/Toasts.svelte",
    "content": "<script lang=\"ts\" context=\"module\">\nexport type ToastTone = 'success' | 'error' | 'info';\nexport type Toast = {\n\tid: number;\n\ttitle: string;\n\tbody?: string;\n\ttone: ToastTone;\n};\n</script>\n\n<script lang=\"ts\">\nimport { Card } from 'components';\n\nexport let toasts: Toast[] = [];\nexport let className: string | undefined = undefined;\n</script>\n\n<div class={`fixed bottom-24 right-6 z-20 flex w-[320px] flex-col gap-3 ${className ?? ''}`}>\n\t{#each toasts as toast (toast.id)}\n\t\t<Card\n\t\t\tclassName={`border px-4 py-3 text-sm shadow-xl ${\n\t\t\t\ttoast.tone === 'success'\n\t\t\t\t\t? 'border-green-200 bg-green-50 text-green-900'\n\t\t\t\t\t: toast.tone === 'error'\n\t\t\t\t\t\t? 'border-red-200 bg-red-50 text-red-900'\n\t\t\t\t\t\t: 'border-black/10 bg-white text-black'\n\t\t\t}`}\n\t\t>\n\t\t\t<div class=\"text-sm font-semibold\">{toast.title}</div>\n\t\t\t{#if toast.body}\n\t\t\t\t<div class=\"mt-1 text-xs leading-snug text-black/70\">{toast.body}</div>\n\t\t\t{/if}\n\t\t</Card>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/web/src/lib/components/WeirStudioFileExplorer.svelte",
    "content": "<script lang=\"ts\">\nimport { Button, Input } from 'components';\nimport CheckIcon from '$lib/components/icons/CheckIcon.svelte';\nimport ChevronLeftIcon from '$lib/components/icons/ChevronLeftIcon.svelte';\nimport EditIcon from '$lib/components/icons/EditIcon.svelte';\nimport PlusIcon from '$lib/components/icons/PlusIcon.svelte';\nimport TrashIcon from '$lib/components/icons/TrashIcon.svelte';\nimport ChevronRightIcon from './icons/ChevronRightIcon.svelte';\n\n/** Whether to render the file explorer as a closed drawer or an open one. */\nexport let drawerOpen = true;\nexport let files: Map<string, string> = new Map();\n/** The filename of the currently selected file. */\nexport let activeFile: string | null = null;\n\nlet renamingFile: string | null = null;\nlet renameValue = '';\n\nexport let onCreateFile: () => void;\nexport let onSelectFile: (id: string) => void;\nexport let onDeleteFile: (file: string) => void;\nexport let onRenameFile: (from: string, to: string) => void;\nexport let onToggleDrawer: () => void = () => {\n\tdrawerOpen = !drawerOpen;\n};\n\nfunction startRename(file: string) {\n\trenamingFile = file;\n\trenameValue = file;\n}\n\nfunction commitRename(from: string) {\n\tif (renamingFile !== from) {\n\t\treturn;\n\t}\n\n\tconst trimmed = renameValue.trim();\n\trenamingFile = null;\n\n\tif (trimmed.length === 0 || trimmed === from) {\n\t\treturn;\n\t}\n\n\tonRenameFile(from, trimmed);\n}\n</script>\n\n<aside\n\tclass={`relative z-10 flex h-full flex-col border-r border-black/10 bg-white/80 backdrop-blur transition-all duration-300 ${drawerOpen ? 'w-72' : 'w-14'}`}\n>\n\t<div class=\"flex items-center justify-between px-3 py-3\">\n\t\t{#if drawerOpen}\n\t\t\t<div class=\"text-sm font-semibold uppercase tracking-wider text-black/70\">Weirpack</div>\n\t\t\t<Button\n\t\t\t\tsize=\"xs\"\n\t\t\t\tcolor=\"white\"\n\t\t\t\tclassName=\"h-8 w-8 !p-0\"\n\t\t\t\ton:click={onToggleDrawer}\n\t\t\t\ttitle=\"Collapse drawer\"\n\t\t\t\taria-label=\"Collapse drawer\"\n\t\t\t>\n\t\t\t\t<ChevronLeftIcon className=\"h-4 w-4\" />\n\t\t\t</Button>\n\t\t{:else}\n\t\t\t<Button\n\t\t\t\tsize=\"xs\"\n\t\t\t\tcolor=\"white\"\n\t\t\t\tclassName=\"mx-auto h-8 w-8 !p-0\"\n\t\t\t\ton:click={onToggleDrawer}\n\t\t\t\ttitle=\"Expand drawer\"\n\t\t\t\taria-label=\"Expand drawer\"\n\t\t\t>\n\t\t\t\t<ChevronRightIcon className=\"h-4 w-4\" />\n\t\t\t</Button>\n\t\t{/if}\n\t</div>\n\n\t{#if drawerOpen}\n\t\t<div class=\"px-3 pb-2\">\n\t\t\t<Button\n\t\t\t\tcolor=\"dark\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tclassName=\"w-full uppercase tracking-wide\"\n\t\t\t\ton:click={onCreateFile}\n\t\t\t>\n\t\t\t\t<PlusIcon className=\"h-4 w-4\" />\n\t\t\t\tNew file\n\t\t\t</Button>\n\t\t</div>\n\n\t\t<div class=\"flex-1 overflow-auto px-2 pb-4\">\n\t\t\t{#each files as [file]}\n\t\t\t\t<div\n\t\t\t\t\tclass={`group flex items-center justify-between rounded-lg px-2 py-2 text-sm ${file == activeFile ? 'bg-white shadow-sm' : 'hover:bg-white/60'}`}\n\t\t\t\t>\n\t\t\t\t\t<div class=\"flex flex-1 items-center gap-2 text-left\">\n\t\t\t\t\t\t<span class={`h-2 w-2 rounded-full ${file == activeFile ? 'bg-primary': ''} bg-cream`}></span>\n\t\t\t\t\t\t{#if renamingFile === file}\n\t\t\t\t\t\t\t<div class=\"flex-1\">\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tclassName=\"w-full text-xs\"\n\t\t\t\t\t\t\t\t\tautofocus\n\t\t\t\t\t\t\t\t\tbind:value={renameValue}\n\t\t\t\t\t\t\t\t\ton:keydown={(event: CustomEvent<KeyboardEvent>) => {\n\t\t\t\t\t\t\t\t\t\tconst keyboardEvent = event.detail;\n\t\t\t\t\t\t\t\t\t\tif (keyboardEvent.key === 'Enter') {\n\t\t\t\t\t\t\t\t\t\t\tcommitRename(file);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (keyboardEvent.key === 'Escape') {\n\t\t\t\t\t\t\t\t\t\t\trenamingFile = null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ton:blur={() => commitRename(file)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<button class=\"flex-1 truncate text-left\" on:click={() => onSelectFile(file)}>\n\t\t\t\t\t\t\t\t{file}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass={`flex items-center gap-1 text-black/50 transition ${renamingFile === file ? 'opacity-100' : 'opacity-0 group-hover:opacity-100'}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{#if renamingFile === file}\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\tcolor=\"white\"\n\t\t\t\t\t\t\t\tclassName=\"h-6 w-6 !p-0\"\n\t\t\t\t\t\t\t\ton:click={() => commitRename(file)}\n\t\t\t\t\t\t\t\ttitle=\"Confirm rename\"\n\t\t\t\t\t\t\t\taria-label=\"Confirm rename\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CheckIcon className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\tcolor=\"white\"\n\t\t\t\t\t\t\t\tclassName=\"h-6 w-6 !p-0\"\n\t\t\t\t\t\t\t\ton:click={() => startRename(file)}\n\t\t\t\t\t\t\t\ttitle=\"Rename file\"\n\t\t\t\t\t\t\t\taria-label=\"Rename file\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<EditIcon className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{#if files.size > 1}\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\tcolor=\"white\"\n\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6 !p-0\"\n\t\t\t\t\t\t\t\t\ton:click={() => onDeleteFile(file)}\n\t\t\t\t\t\t\t\t\ttitle=\"Delete file\"\n\t\t\t\t\t\t\t\t\taria-label=\"Delete file\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<TrashIcon className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t</div>\n\t{:else}\n\t\t<div class=\"flex flex-1 flex-col items-center gap-4 pt-6 text-xs text-black/50\">\n\t\t\t<div class=\"rotate-135 text-xs font-semibold tracking-widest uppercase\">Files</div>\n\t\t</div>\n\t{/if}\n</aside>\n"
  },
  {
    "path": "packages/web/src/lib/components/WeirStudioStart.svelte",
    "content": "<script lang=\"ts\">\nimport { Button, Card } from 'components';\n\nexport let onUpload: () => void;\nexport let onOpenExample: () => void;\nexport let onCreateEmpty: () => void;\nexport let onUploadChange: (event: Event) => void;\nexport let fileInputEl: HTMLInputElement | null = null;\nexport let loading = false;\nexport let loadingLabel = 'Checking for saved Weirpack...';\n</script>\n\n<div class=\"absolute inset-0 z-30 flex items-center justify-center bg-[#fef4e7]/95\">\n\t<Card className=\"w-[min(640px,90vw)] space-y-6 border-black/10 bg-white/95 p-8\">\n\t\t<div class=\"space-y-2\">\n\t\t\t<div class=\"text-xs font-semibold uppercase tracking-[0.25em] text-black/50\">Weir Studio</div>\n\t\t\t{#if loading}\n\t\t\t\t<h2 class=\"text-2xl font-semibold text-black\">Restoring session</h2>\n\t\t\t\t<p class=\"text-sm text-black/60\">{loadingLabel}</p>\n\t\t\t{:else}\n\t\t\t\t<h2 class=\"text-2xl font-semibold text-black\">Choose how to start</h2>\n\t\t\t\t<p class=\"text-sm text-black/60\">\n\t\t\t\t\tLoad a Weirpack to edit rules, run tests, and export updates.\n\t\t\t\t</p>\n\t\t\t{/if}\n\t\t</div>\n\n\t\t<div class={`grid gap-3 ${loading ? 'opacity-60' : ''}`}>\n\t\t\t<input\n\t\t\t\tclass=\"hidden\"\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept=\".weirpack,application/zip\"\n\t\t\t\tbind:this={fileInputEl}\n\t\t\t\ton:change={onUploadChange}\n\t\t\t/>\n\t\t\t<Button\n\t\t\t\tcolor=\"dark\"\n\t\t\t\tsize=\"md\"\n\t\t\t\tclassName=\"w-full justify-between\"\n\t\t\t\ton:click={onUpload}\n\t\t\t\tdisabled={loading}\n\t\t\t>\n\t\t\t\t<span>Upload an existing Weirpack</span>\n\t\t\t\t<span class=\"text-xs uppercase tracking-[0.2em] text-white/60\">Upload</span>\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tcolor=\"white\"\n\t\t\t\tsize=\"md\"\n\t\t\t\tclassName=\"w-full justify-between\"\n\t\t\t\ton:click={onOpenExample}\n\t\t\t\tdisabled={loading}\n\t\t\t>\n\t\t\t\t<span>Open example Weirpack</span>\n\t\t\t\t<span class=\"text-xs uppercase tracking-[0.2em] text-black/40\">Example</span>\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tcolor=\"white\"\n\t\t\t\tsize=\"md\"\n\t\t\t\tclassName=\"w-full justify-between\"\n\t\t\t\ton:click={onCreateEmpty}\n\t\t\t\tdisabled={loading}\n\t\t\t>\n\t\t\t\t<span>Create an empty Weirpack</span>\n\t\t\t\t<span class=\"text-xs uppercase tracking-[0.2em] text-black/40\">Empty</span>\n\t\t\t</Button>\n\t\t</div>\n\t</Card>\n</div>\n"
  },
  {
    "path": "packages/web/src/lib/components/WeirStudioWorkspace.svelte",
    "content": "<script lang=\"ts\">\nimport { Button, Card } from 'components';\nimport type { ComponentType } from 'svelte';\nimport CloseIcon from '$lib/components/icons/CloseIcon.svelte';\nimport DownloadIcon from '$lib/components/icons/DownloadIcon.svelte';\nimport PlayIcon from '$lib/components/icons/PlayIcon.svelte';\nimport WeirStudioFileExplorer from '$lib/components/WeirStudioFileExplorer.svelte';\n\nexport let drawerOpen = true;\nexport let files: Map<string, string> = new Map();\nexport let activeFile: string | null = null;\nexport let editorReady = false;\nexport let AceEditorComponent: ComponentType | null = null;\nexport let editorOptions: Record<string, unknown>;\nexport let linterReady = false;\nexport let runningTests = false;\nexport let packLoaded = false;\n\nexport let onToggleDrawer: () => void;\nexport let onCreateFile: () => void;\nexport let onSelectFile: (id: string) => void;\nexport let onRenameFile: (from: string, to: string) => void;\nexport let onDeleteFile: (file: string) => void;\nexport let onUpdateContent: (value: string) => void;\nexport let onRunTests: () => void;\nexport let onDownload: () => void;\nexport let onClosePack: () => void;\n\nexport let getEditorMode: (name: string) => string;\n</script>\n\n<WeirStudioFileExplorer\n\t{drawerOpen}\n\t{files}\n\t{activeFile}\n\t{onToggleDrawer}\n\t{onCreateFile}\n\t{onSelectFile}\n\t{onDeleteFile}\n  {onRenameFile}\n/>\n\n<main class=\"relative z-10 flex flex-1 flex-col\">\n\t<div class=\"flex items-center justify-between border-b border-black/10 bg-white/70 px-4 py-3\">\n\t\t<div class=\"flex items-center gap-3\">\n\t\t\t<div class=\"text-xs font-semibold uppercase tracking-[0.2em] text-black/50\">Studio</div>\n\t\t\t<div class=\"text-sm font-medium text-black/80\">{activeFile ?? 'No file selected'}</div>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-3\">\n\t\t\t<div class=\"text-xs uppercase tracking-[0.18em] text-black/40\">\n\t\t\t\t{linterReady ? 'Weir runner online' : 'Warming up harper.js'}\n\t\t\t</div>\n\t\t\t<Button\n\t\t\t\tsize=\"xs\"\n\t\t\t\tcolor=\"white\"\n\t\t\t\tclassName=\"h-8 w-8 !p-0\"\n\t\t\t\ttitle=\"Close Weirpack\"\n\t\t\t\taria-label=\"Close Weirpack\"\n\t\t\t\ton:click={onClosePack}\n\t\t\t>\n\t\t\t\t<CloseIcon className=\"h-3.5 w-3.5\" />\n\t\t\t</Button>\n\t\t</div>\n\t</div>\n\n\t<div class=\"flex-1 overflow-hidden p-4\">\n\t\t<Card className=\"h-full border-black/10 bg-white/95 p-0 shadow-[0_20px_60px_-40px_rgba(0,0,0,0.4)]\">\n\t\t\t{#if editorReady && AceEditorComponent}\n\t\t\t\t{#key activeFile}\n\t\t\t\t\t<svelte:component\n\t\t\t\t\t\tthis={AceEditorComponent}\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\tvalue={activeFile ? files.get(activeFile) : \"\"}\n\t\t\t\t\t\tlang={getEditorMode(activeFile ?? '')}\n\t\t\t\t\t\ttheme=\"chrome\"\n\t\t\t\t\t\toptions={editorOptions}\n\t\t\t\t\t\ton:input={(event: CustomEvent<string>) => onUpdateContent(event.detail)}\n\t\t\t\t\t/>\n\t\t\t\t{/key}\n\t\t\t{:else}\n\t\t\t\t<div class=\"flex h-full items-center justify-center text-sm uppercase tracking-[0.3em] text-black/40\">\n\t\t\t\t\tLoading editor…\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t</Card>\n\t</div>\n</main>\n\n<div class=\"fixed bottom-6 right-6 z-20 flex items-center gap-3\">\n\t<Button\n\t\tsize=\"md\"\n\t\tcolor=\"dark\"\n\t\tpill\n\t\tclassName={runningTests ? 'opacity-70' : undefined}\n\t\ton:click={onRunTests}\n\t\tdisabled={!packLoaded || runningTests}\n\t>\n\t\t<PlayIcon className=\"h-4 w-4\" />\n\t\t{runningTests ? 'Running' : 'Run tests'}\n\t</Button>\n\t<Button size=\"md\" color=\"white\" pill on:click={onDownload} disabled={!packLoaded}>\n\t\t<DownloadIcon className=\"h-4 w-4\" />\n\t\tDownload\n\t</Button>\n</div>\n"
  },
  {
    "path": "packages/web/src/lib/components/WordPressLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg\n\t{width}\n\t{height}\n\tversion=\"1.1\"\n\tid=\"Layer_1\"\n\txmlns=\"http://www.w3.org/2000/svg\"\n\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\tx=\"0px\"\n\ty=\"0px\"\n\tviewBox=\"0 0 122.88 122.88\"\n\tstyle=\"enable-background:new 0 0 122.88 122.88\"\n\txml:space=\"preserve\"\n>\n\t<style type=\"text/css\">.st0{fill:#32373C;}</style>\n\t<g>\n\t\t<circle cx=\"61.44\" cy=\"61.44\" r=\"61.44\" fill=\"#ffffff\" />\n\t\t<path\n\t\t\tclass=\"st0\"\n\t\t\td=\"M61.44,0C27.51,0,0,27.51,0,61.44c0,33.93,27.51,61.44,61.44,61.44c33.93,0,61.44-27.51,61.44-61.44 C122.88,27.51,95.37,0,61.44,0L61.44,0z M106.37,36.88c0.22,1.63,0.34,3.38,0.34,5.26c0,5.19-0.97,11.03-3.89,18.34l-15.64,45.21 c15.22-8.87,25.46-25.37,25.46-44.25C112.64,52.54,110.37,44.17,106.37,36.88L106.37,36.88z M62.34,65.92l-15.36,44.64 c4.59,1.35,9.44,2.09,14.46,2.09c5.96,0,11.68-1.03,17-2.9c-0.14-0.22-0.26-0.45-0.37-0.71L62.34,65.92L62.34,65.92z M96,58.86 c0-6.33-2.27-10.71-4.22-14.12c-2.6-4.22-5.03-7.79-5.03-12.01c0-4.71,3.57-9.09,8.6-9.09c0.23,0,0.44,0.03,0.66,0.04 c-9.11-8.35-21.25-13.44-34.57-13.44c-17.89,0-33.62,9.18-42.78,23.08c1.2,0.04,2.33,0.06,3.3,0.06c5.35,0,13.65-0.65,13.65-0.65 c2.76-0.16,3.08,3.89,0.33,4.22c0,0-2.77,0.32-5.86,0.49l18.64,55.46l11.21-33.6l-7.98-21.86c-2.76-0.16-5.37-0.49-5.37-0.49 c-2.76-0.16-2.44-4.38,0.32-4.22c0,0,8.45,0.65,13.48,0.65c5.35,0,13.65-0.65,13.65-0.65c2.76-0.16,3.08,3.89,0.33,4.22 c0,0-2.78,0.32-5.86,0.49L87,92.47l5.28-16.74C94.63,68.42,96,63.24,96,58.86L96,58.86z M10.24,61.44 c0,20.27,11.78,37.78,28.86,46.08L14.67,40.6C11.83,46.97,10.24,54.01,10.24,61.44L10.24,61.44z M61.44,3.69 c7.8,0,15.36,1.53,22.48,4.54c3.42,1.45,6.72,3.24,9.81,5.32c3.06,2.07,5.94,4.44,8.55,7.05c2.61,2.61,4.99,5.49,7.05,8.55 c2.09,3.09,3.88,6.39,5.32,9.81c3.01,7.12,4.54,14.68,4.54,22.48c0,7.8-1.53,15.36-4.54,22.48c-1.45,3.42-3.24,6.72-5.32,9.81 c-2.07,3.06-4.44,5.94-7.05,8.55c-2.61,2.61-5.49,4.99-8.55,7.05c-3.09,2.09-6.39,3.88-9.81,5.32c-7.12,3.01-14.68,4.54-22.48,4.54 c-7.8,0-15.36-1.53-22.48-4.54c-3.42-1.45-6.72-3.24-9.81-5.32c-3.06-2.07-5.94-4.44-8.55-7.05c-2.61-2.61-4.99-5.49-7.05-8.55 c-2.09-3.09-3.88-6.39-5.32-9.81C5.21,76.8,3.69,69.24,3.69,61.44c0-7.8,1.53-15.36,4.54-22.48c1.45-3.42,3.24-6.72,5.32-9.81 c2.07-3.06,4.44-5.94,7.05-8.55c2.61-2.61,5.49-4.99,8.55-7.05c3.09-2.09,6.39-3.88,9.81-5.32C46.08,5.21,53.64,3.69,61.44,3.69 L61.44,3.69z\"\n\t\t/>\n\t</g>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/ZedLogo.svelte",
    "content": "<script lang=\"ts\">\nexport let width = '100%';\nexport let height = '100%';\n</script>\n\n<svg\n\tclass=\"block dark:hidden\"\n\t{width}\n\t{height}\n\tviewBox=\"0 0 90 90\"\n\tfill=\"none\"\n\txmlns=\"http://www.w3.org/2000/svg\"\n>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.4375 5.625C6.8842 5.625 5.625 6.8842 5.625 8.4375V70.3125H0V8.4375C0 3.7776 3.7776 0 8.4375 0H83.7925C87.551 0 89.4333 4.5442 86.7756 7.20186L40.3642 53.6133H53.4375V47.8125H59.0625V55.0195C59.0625 57.3495 57.1737 59.2383 54.8438 59.2383H34.7392L25.0712 68.9062H68.9062V33.75H74.5312V68.9062C74.5312 72.0128 72.0128 74.5312 68.9062 74.5312H19.4462L9.60248 84.375H81.5625C83.1158 84.375 84.375 83.1158 84.375 81.5625V19.6875H90V81.5625C90 86.2224 86.2224 90 81.5625 90H6.20749C2.44898 90 0.566723 85.4558 3.22438 82.7981L49.46 36.5625H36.5625V42.1875H30.9375V35.1562C30.9375 32.8263 32.8263 30.9375 35.1562 30.9375H55.085L64.9288 21.0938H21.0938V56.25H15.4688V21.0938C15.4688 17.9871 17.9871 15.4688 21.0938 15.4688H70.5538L80.3975 5.625H8.4375Z\" fill=\"black\"/>\n</svg>\n\n<svg\n\tclass=\"hidden dark:block\"\n\t{width}\n\t{height}\n\tviewBox=\"0 0 90 90\"\n\tfill=\"none\"\n\txmlns=\"http://www.w3.org/2000/svg\"\n>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.4375 5.625C6.8842 5.625 5.625 6.8842 5.625 8.4375V70.3125H0V8.4375C0 3.7776 3.7776 0 8.4375 0H83.7925C87.551 0 89.4333 4.5442 86.7756 7.20186L40.3642 53.6133H53.4375V47.8125H59.0625V55.0195C59.0625 57.3495 57.1737 59.2383 54.8438 59.2383H34.7392L25.0712 68.9062H68.9062V33.75H74.5312V68.9062C74.5312 72.0128 72.0128 74.5312 68.9062 74.5312H19.4462L9.60248 84.375H81.5625C83.1158 84.375 84.375 83.1158 84.375 81.5625V19.6875H90V81.5625C90 86.2224 86.2224 90 81.5625 90H6.20749C2.44898 90 0.566723 85.4558 3.22438 82.7981L49.46 36.5625H36.5625V42.1875H30.9375V35.1562C30.9375 32.8263 32.8263 30.9375 35.1562 30.9375H55.085L64.9288 21.0938H21.0938V56.25H15.4688V21.0938C15.4688 17.9871 17.9871 15.4688 21.0938 15.4688H70.5538L80.3975 5.625H8.4375Z\" fill=\"white\"/>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/icons/CheckIcon.svelte",
    "content": "<script lang=\"ts\">\nexport let className: string | undefined = undefined;\n</script>\n\n<svg viewBox=\"0 0 20 20\" class={className} fill=\"currentColor\" aria-hidden=\"true\">\n\t<path\n\t\td=\"M16.7 5.3a1 1 0 0 1 0 1.4l-7.3 7.3a1 1 0 0 1-1.4 0L3.3 9.3a1 1 0 1 1 1.4-1.4l3.3 3.3 6.6-6.6a1 1 0 0 1 1.4 0z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/icons/ChevronLeftIcon.svelte",
    "content": "<script lang=\"ts\">\nexport let className: string | undefined = undefined;\n</script>\n\n<svg viewBox=\"0 0 20 20\" class={className} fill=\"currentColor\" aria-hidden=\"true\">\n\t<path d=\"M11.78 4.22a.75.75 0 0 1 0 1.06L8.06 9l3.72 3.72a.75.75 0 1 1-1.06 1.06L6.47 9.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0z\" />\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/icons/ChevronRightIcon.svelte",
    "content": "<script lang=\"ts\">\nexport let className: string | undefined = undefined;\n</script>\n\n<svg viewBox=\"0 0 20 20\" class={className} fill=\"currentColor\" aria-hidden=\"true\">\n\t<path d=\"M8.22 4.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 1 1-1.06-1.06L11.94 9 8.22 5.28a.75.75 0 0 1 0-1.06z\" />\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/icons/CloseIcon.svelte",
    "content": "<script lang=\"ts\">\nexport let className: string | undefined = undefined;\n</script>\n\n<svg viewBox=\"0 0 20 20\" class={className} fill=\"currentColor\" aria-hidden=\"true\">\n\t<path d=\"M5.72 5.72a.75.75 0 0 1 1.06 0L10 8.94l3.22-3.22a.75.75 0 1 1 1.06 1.06L11.06 10l3.22 3.22a.75.75 0 1 1-1.06 1.06L10 11.06l-3.22 3.22a.75.75 0 0 1-1.06-1.06L8.94 10 5.72 6.78a.75.75 0 0 1 0-1.06z\" />\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/icons/DownloadIcon.svelte",
    "content": "<script lang=\"ts\">\nexport let className: string | undefined = undefined;\n</script>\n\n<svg viewBox=\"0 0 20 20\" class={className} fill=\"currentColor\" aria-hidden=\"true\">\n\t<path d=\"M10 3.5a.75.75 0 0 1 .75.75v6.19l2.22-2.22a.75.75 0 1 1 1.06 1.06l-3.5 3.5a.75.75 0 0 1-1.06 0l-3.5-3.5a.75.75 0 1 1 1.06-1.06l2.22 2.22V4.25A.75.75 0 0 1 10 3.5z\" />\n\t<path d=\"M4 13.75a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 .75.75v1.5A2.75 2.75 0 0 1 13.25 18h-6.5A2.75 2.75 0 0 1 4 15.25v-1.5z\" />\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/icons/EditIcon.svelte",
    "content": "<script lang=\"ts\">\nexport let className: string | undefined = undefined;\n</script>\n\n<svg viewBox=\"0 0 20 20\" class={className} fill=\"currentColor\" aria-hidden=\"true\">\n\t<path d=\"M13.64 2.86a1.5 1.5 0 0 1 2.12 2.12l-8.5 8.5-3.36.84.84-3.36 8.5-8.5z\" />\n\t<path d=\"M11.5 4.99 15 8.5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/icons/PlayIcon.svelte",
    "content": "<script lang=\"ts\">\nexport let className: string | undefined = undefined;\n</script>\n\n<svg viewBox=\"0 0 20 20\" class={className} fill=\"currentColor\" aria-hidden=\"true\">\n\t<path d=\"M6.75 4.25a.75.75 0 0 1 .78.02l7.5 4.75a.75.75 0 0 1 0 1.26l-7.5 4.75A.75.75 0 0 1 6 14.5v-9a.75.75 0 0 1 .75-.75z\" />\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/icons/PlusIcon.svelte",
    "content": "<script lang=\"ts\">\nexport let className: string | undefined = undefined;\n</script>\n\n<svg viewBox=\"0 0 20 20\" class={className} fill=\"currentColor\" aria-hidden=\"true\">\n\t<path d=\"M10 4a.75.75 0 0 1 .75.75v4.5h4.5a.75.75 0 0 1 0 1.5h-4.5v4.5a.75.75 0 0 1-1.5 0v-4.5h-4.5a.75.75 0 0 1 0-1.5h4.5v-4.5A.75.75 0 0 1 10 4z\" />\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/components/icons/TrashIcon.svelte",
    "content": "<script lang=\"ts\">\nexport let className: string | undefined = undefined;\n</script>\n\n<svg viewBox=\"0 0 20 20\" class={className} fill=\"currentColor\" aria-hidden=\"true\">\n\t<path d=\"M7.5 3a1 1 0 0 0-1 1v1H4.75a.75.75 0 0 0 0 1.5h.57l.6 9.01A2 2 0 0 0 7.91 17h4.18a2 2 0 0 0 1.99-1.49l.6-9.01h.57a.75.75 0 0 0 0-1.5H13.5V4a1 1 0 0 0-1-1h-5zM8 6h4v8H8V6z\" />\n</svg>\n"
  },
  {
    "path": "packages/web/src/lib/db/index.ts",
    "content": "import { drizzle } from 'drizzle-orm/mysql2';\n\nexport const db = drizzle({ connection: { uri: process.env.DATABASE_URL } });\n"
  },
  {
    "path": "packages/web/src/lib/db/models/ProblematicLints.ts",
    "content": "import { createInsertSchema, createSelectSchema } from 'drizzle-zod';\nimport { db } from '..';\nimport { problematicLintTable } from '../schema';\n\nexport type ProblematicLintRow = typeof problematicLintTable.$inferSelect;\nconst ProblematicLintRowParser = createSelectSchema(problematicLintTable);\n\nexport type ProblematicLintSubmission = typeof problematicLintTable.$inferInsert;\nconst ProblematicLintSubmissionParser = createInsertSchema(problematicLintTable);\n\nexport default class ProblematicLints {\n\tpublic static async validateAndCreate(rec: any) {\n\t\tconst parsed = ProblematicLintSubmissionParser.parse(rec);\n\t\tawait this.create(parsed);\n\t}\n\n\tpublic static async create(rec: ProblematicLintSubmission) {\n\t\tawait db.insert(problematicLintTable).values(rec);\n\t}\n}\n"
  },
  {
    "path": "packages/web/src/lib/db/models/UninstallFeedback.ts",
    "content": "import { createInsertSchema, createSelectSchema } from 'drizzle-zod';\nimport { db } from '..';\nimport { uninstallFeedbackTable } from '../schema';\n\nexport type UninstallFeedbackRow = typeof uninstallFeedbackTable.$inferSelect;\nconst UninstallFeedbackRowParser = createSelectSchema(uninstallFeedbackTable);\n\nexport type UninstallFeedbackSubmission = typeof uninstallFeedbackTable.$inferInsert;\nconst UninstallFeedbackSubmissionParser = createInsertSchema(uninstallFeedbackTable);\n\nexport default class UninstallFeedback {\n\tpublic static async validateAndCreate(rec: any) {\n\t\tconst parsed = UninstallFeedbackSubmissionParser.parse(rec);\n\t\tawait this.create(parsed);\n\t}\n\n\tpublic static async create(rec: UninstallFeedbackSubmission) {\n\t\tawait db.insert(uninstallFeedbackTable).values(rec);\n\t}\n}\n"
  },
  {
    "path": "packages/web/src/lib/db/schema.ts",
    "content": "import { boolean, int, mysqlTable, text, timestamp } from 'drizzle-orm/mysql-core';\n\nexport const uninstallFeedbackTable = mysqlTable('uninstall_feedback', {\n\tid: int().autoincrement().primaryKey(),\n\tfeedback: text().notNull(),\n\ttimestamp: timestamp().notNull().defaultNow(),\n});\n\nexport const problematicLintTable = mysqlTable('problematic_lint', {\n\tid: int().autoincrement().primaryKey(),\n\t/** If false, implied to be a false-negative. */\n\tis_false_positive: boolean().notNull(),\n\texample: text().notNull(),\n\tfeedback: text().notNull(),\n\trule_id: text(),\n\ttimestamp: timestamp().notNull().defaultNow(),\n});\n"
  },
  {
    "path": "packages/web/src/routes/+layout.svelte",
    "content": "<script lang=\"ts\">\nimport '../app.css';\n\nimport { Link } from 'components';\nimport posthog from 'posthog-js';\nimport { onMount } from 'svelte';\nimport { browser } from '$app/environment';\nimport AutomatticLogo from '$lib/components/AutomatticLogo.svelte';\nimport GutterCenter from '$lib/components/GutterCenter.svelte';\n\nonMount(() => {\n\tif (browser) {\n\t\tposthog.init('phc_ghFPi5nkwgxTGU9VEHflX8QCXlfrdxFD4skfb6lpH4y', {\n\t\t\tapi_host: 'https://us.i.posthog.com',\n\t\t\tpersistence: 'sessionStorage',\n\t\t\tperson_profiles: 'always',\n\t\t});\n\t}\n});\n\nlet names = ['Grammar Guru', 'Grammar Checker', 'Grammar Savior'];\nlet displayName = names[Math.floor(Math.random() * names.length)];\n</script>\n\n<div class=\"flex flex-col h-full\">\n\t<div class=\"flex-1\">\n\t\t<GutterCenter>\n\t\t\t<slot />\n\t\t</GutterCenter>\n\t</div>\n\n\t<div class=\"w-full flex flex-row justify-center h-12\">\n\t\t<Link href=\"https://automattic.com/\">\n\t\t\t<div class=\"flex items-center\">\n\t\t\t\tAn\n\t\t\t\t<div class=\"inline-block\"><AutomatticLogo height=\"32px\" width=\"140px\" /></div>\n\t\t\t\t{displayName}\n\t\t\t</div>\n\t\t</Link>\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/web/src/routes/+page.svelte",
    "content": "<script module>\nexport const frontmatter = {\n\thome: false,\n};\n</script>\n\n<script lang=\"ts\">\nimport ChromeLogo from '$lib/components/ChromeLogo.svelte';\nimport CodeLogo from '$lib/components/CodeLogo.svelte';\nimport LazyEditor from '$lib/components/LazyEditor.svelte';\nimport FirefoxLogo from '$lib/components/FirefoxLogo.svelte';\nimport GitHubLogo from '$lib/components/GitHubLogo.svelte';\nimport ObsidianLogo from '$lib/components/ObsidianLogo.svelte';\nimport Logo from '$lib/components/Logo.svelte';\nimport Graph from '$lib/components/Graph.svelte';\nimport Section from '$lib/components/Section.svelte';\nimport TestimonialCollection from '$lib/components/TestimonialCollection.svelte';\nimport EmacsLogo from '$lib/components/EmacsLogo.svelte';\nimport HelixLogo from '$lib/components/HelixLogo.svelte';\nimport NeovimLogo from '$lib/components/NeovimLogo.svelte';\nimport SublimeLogo from '$lib/components/SublimeLogo.svelte';\nimport WordPressLogo from '$lib/components/WordPressLogo.svelte';\nimport ZedLogo from '$lib/components/ZedLogo.svelte';\nimport EdgeLogo from '$lib/components/EdgeLogo.svelte';\nimport { Card, Collapsible, Link } from 'components';\nimport { browser } from '$app/environment';\n\n/**\n * @param {string} keyword\n */\nfunction agentHas(keyword: string): boolean | undefined {\n\tif (!browser) {\n\t\treturn false;\n\t}\n\n\treturn navigator.userAgent.toLowerCase().includes(keyword.toLowerCase());\n}\n\n\nconst testimonials = [\n  {\n    authorName: \"Rich Edmonds\",\n    authorSubtitle: \"Lead PC Hardware Editor, XDA Developers\",\n    testimonial: \"Written in Rust, everything is processed in an instant and I find it neat to see the browser extension highlight words as I type, effectively checking per letter. And no account is required, allowing me to get up and running in no time.\",\n    source: \"https://www.xda-developers.com/ditched-grammarly-for-this-amazing-open-source-alternative/\"\n  },\n  {\n    authorName: \"Justin Pot\",\n    authorSubtitle: \"Tech journalist, Lifehacker\",\n    testimonial: \"Obsidian is my favorite productivity app, and Harper is a grammar checking tool that works well with it.\",\n    source: \"https://lifehacker.com/tech/harper-offline-alternative-to-grammarly?test_uuid=02DN02BmbRCcASIX6xMQtY9&test_variant=B\"\n  },\n  {\n    authorName: \"Filip Cujanovic\",\n    authorSubtitle: \"Chrome Extension Review\",\n    testimonial: \"Awesome extension! It's privacy focused, that means that every check it done locally on your computer, there is no server where your data goes! And because of that it's blazingly fast compared to Grammarly.\",\n    source: \"https://chromewebstore.google.com/detail/private-grammar-checker-h/lodbfhdipoipcjmlebjbgmmgekckhpfb/reviews\"\n  },\n  {\n    authorName: \"Tim Miller\",\n    authorSubtitle: \"Author, Obsidian Rocks\",\n    testimonial: \"Harper is great: it is discreet, fast, powerful, and private.\",\n    source: \"https://obsidian.rocks/resource-harper/\"\n  },\n  {\n    authorName: \"Prakash Joshi Pax\",\n    authorSubtitle: \"Writer, Medium\",\n    testimonial: \"What I loved about this tool is that it's private, and open source and really fast.\",\n    source: \"https://beingpax.medium.com/9-new-obsidian-plugins-you-need-to-check-out-today-d55dba29bfb8\"\n  },\n  {\n    authorName: \"imbolc\",\n    authorSubtitle: \"Chrome Extension Review\",\n    testimonial: \"I've been using Harper in Neovim for a long time and am glad to see it as an extension!\",\n    source: \"https://chromewebstore.google.com/detail/private-grammar-checker-h/lodbfhdipoipcjmlebjbgmmgekckhpfb/reviews\"\n\n  },\n  {\n    authorName: \"Martijn Gribnau\",\n    authorSubtitle: \"Software Engineer\",\n    testimonial: \"What a delightful way to check for flagrant spelling errors in markdown files. Thanks Harper authors!\",\n    source: \"https://gribnau.dev/posts/harper-cli/\"\n  },\n  {\n    authorName: \"Chloe Ferguson\",\n    authorSubtitle: \"Writer, We Are Founders\",\n    testimonial: \"Harper excels at catching the kinds of mistakes that matter in technical writing – improper capitalization, misspelled words, and awkward phrasing that can make documentation unclear.\",\n    source: \"https://www.wearefounders.uk/the-grammar-checker-that-actually-gets-developers-meet-harper/\"\n  },\n  {\n    authorName: \"Rogerio Taques\",\n    authorSubtitle: \"Chrome Extension Review\",\n    testimonial: \"I've been using Harper instead of Grammarly for a few months already, and I can't be happier! I can't wait to see the great improvement when this tool reaches version 1.0.0! Great job! I hope that, eventually, it will also support languages other than English.\",\n    source: \"https://chromewebstore.google.com/detail/private-grammar-checker-h/lodbfhdipoipcjmlebjbgmmgekckhpfb/reviews\"\n  },\n];\n</script>\n\n<main class=\"mx-auto flex w-full max-w-5xl flex-col gap-12 py-12\">\n\t<div class=\"space-y-6 px-4 md:px-6\">\n\t\t<div class=\"flex w-full flex-col items-center\">\n\t\t\t<Logo width=\"200px\" />\n\t\t</div>\n\t\t<div class=\"space-y-2 text-center\">\n\t\t\t<h1 class=\"font-bold\">Hi. I'm Harper.</h1>\n\t\t\t<h2>\n\t\t\t\tThe <strong class=\"bg-primary-100 dark:bg-primary-800 p-1 inline-block -rotate-1\">Free</strong> Grammar Checker That Respects Your Privacy\n\t\t\t</h2>\n\t\t</div>\n\n\t\t<div\n\t\t\tclass=\"md:flex md:flex-row grid grid-cols-2 items-center justify-evenly place-items-center gap-2 pt-2 text-center\"\n\t\t>\n\t\t\t<Link\n\t\t\t\thref=\"https://github.com/automattic/harper\"\n\t\t\t\tclass=\"flex flex-row items-center [&>*]:m-2 skew-hover-left\"\n\t\t\t>\n\t\t\t\t<GitHubLogo width=\"40px\" height=\"40px\" />GitHub\n\t\t\t</Link>\n\n      {#if agentHas(\"firefox\")}\n\t      <Link href=\"https://addons.mozilla.org/en-US/firefox/addon/private-grammar-checker-harper/\" class=\"flex flex-row items-center [&>*]:m-2 skew-hover\"\n\t      \t><FirefoxLogo width=\"40px\" height=\"40px\" />Add to Firefox</Link\n\t      >\n      {:else if agentHas(\"Edg\")}\n\t      <Link href=\"https://microsoftedge.microsoft.com/addons/detail/private-grammar-checker-/ihjkkjfembmnjldmdchmadigpmapkpdh\" class=\"flex flex-row items-center [&>*]:m-2 skew-hover-left\"\n\t      \t><EdgeLogo width=\"40px\" height=\"40px\" />Add to Edge</Link\n\t      >\n      {:else}\n\t      <Link href=\"https://chromewebstore.google.com/detail/private-grammar-checking/lodbfhdipoipcjmlebjbgmmgekckhpfb?utm_source=harper-homepage&utm_medium=referral\" class=\"flex flex-row items-center [&>*]:m-2 skew-hover\"\n\t      \t><ChromeLogo width=\"40px\" height=\"40px\" />Add to Chrome</Link\n\t      >\n      {/if}\n\t\t\t<Link\n\t\t\t\thref=\"https://marketplace.visualstudio.com/items?itemName=elijah-potter.harper\"\n\t\t\t\tclass=\"flex flex-row items-center [&>*]:m-2 skew-hover-left\"\n\t\t\t>\n\t\t\t\t<CodeLogo width=\"40px\" height=\"40px\" />Install in VS Code\n\t\t\t</Link>\n\t\t\t<Link\n\t\t\t\thref=\"/docs/integrations/obsidian\"\n\t\t\t\tclass=\"flex flex-row items-center [&>*]:m-2 skew-hover\"\n\t\t\t>\n\t\t\t\t<ObsidianLogo width=\"40px\" height=\"40px\" />Install in Obsidian\n\t\t\t</Link>\n      <Link href=\"https://elijahpotter.dev\" class=\"flex flex-row items-center [&>*]:m-2 skew-hover-left\"\n\t\t><img\n\t\t\twidth=\"40\"\n\t\t\theight=\"40\"\n\t\t\tsrc=\"/icons/profile.svg\"\n\t\t\talt=\"Author\"\n\t\t/>Author</Link\n\t>\n\t\t</div>\n\n\t\t<div class=\"h-[800px] w-full\">\n      {#if browser}\n\t\t\t  <LazyEditor />\n      {/if}\n\t\t</div>\n\t</div>\n\n\t<Section>\n\t\t<svelte:fragment slot=\"title\">What is it?</svelte:fragment>\n\t\t<p>\n\t\t\tHarper is a free English grammar checker designed to be just right. You can think of it as an\n\t\t\topen-source alternative to Grammarly. I created it after years of dealing with the shortcomings\n\t\t\tof the competition.\n\t\t</p>\n\t</Section>\n\n\t<Section layout=\"split\">\n\t\t<svelte:fragment slot=\"title\">Private</svelte:fragment>\n\t\t<p>Harper is completely private, in every sense of the word.</p>\n\t\t<p>Since Harper runs on-device, your data doesn't go anywhere you don't want it to.</p>\n\t\t<p>\n\t\t\tThat means you have 100% certainty we don't violate your copyright by training large language\n\t\t\tmodels.\n\t\t</p>\n\t\t<p>\n\t\t\tHarper also intentionally avoids including any kind of generative AI in any part of our processing pipeline.\n\t\t</p>\n\t\t<svelte:fragment slot=\"aside\">\n\t\t\t<img\n\t\t\t\tsrc=\"/images/camera.webp\"\n\t\t\t\tclass=\"w-full rounded-xl object-cover shadow-sm\"\n\t\t\t\talt=\"Graffiti of a camera.\"\n\t\t\t/>\n\t\t</svelte:fragment>\n\t</Section>\n\n\t<Section layout=\"split\" reverse>\n\t\t<svelte:fragment slot=\"title\">Native Everywhere</svelte:fragment>\n\t\t<p>\n\t\t\tHarper is available as a\n\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/language-server\">language server</Link>,\n\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/harperjs/introduction\">JavaScript library</Link>\n\t\t\tthrough WebAssembly, and\n\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"https://crates.io/crates/harper-core\">Rust crate</Link>,\n\t\t\tso you can get fantastic grammar checking anywhere you work.\n\t\t</p>\n\t\t<p>\n\t\t\tThat said, we take extra care to make sure the\n\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/visual-studio-code\">Visual Studio Code</Link>,\n\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/neovim\">Neovim</Link>,\n\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/obsidian\">Obsidian</Link>, and\n\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"https://chromewebstore.google.com/detail/private-grammar-checking/lodbfhdipoipcjmlebjbgmmgekckhpfb\">Chrome</Link>\n\t\t\textensions are amazing.\n\t\t</p>\n\t\t<svelte:fragment slot=\"aside\">\n\t\t\t<div class=\"grid gap-2 sm:grid-cols-2\">\n\t\t\t\t<Link\n\t\t\t\t\thref=\"/docs/integrations/obsidian\"\n\t\t\t\t\tclass=\"skew-hover-left\"\n\t\t\t\t>\n\t\t\t\t\t<Card class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<ObsidianLogo width=\"40\" height=\"40\" />\n\t\t\t\t\t\t<span class=\"font-medium\">Obsidian</span>\n\t\t\t\t\t</Card>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"/docs/integrations/visual-studio-code\"\n\t\t\t\t\tclass=\"skew-hover\"\n\t\t\t\t>\n\t\t\t\t\t<Card class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<CodeLogo width=\"40\" height=\"40\" />\n\t\t\t\t\t\t<span class=\"font-medium\">Visual Studio Code</span>\n\t\t\t\t\t</Card>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"/docs/integrations/neovim\"\n\t\t\t\t\tclass=\"skew-hover\"\n\t\t\t\t>\n\t\t\t\t\t<Card class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<NeovimLogo width=\"40\" height=\"40\" />\n\t\t\t\t\t\t<span class=\"font-medium\">Neovim</span>\n\t\t\t\t\t</Card>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"https://chromewebstore.google.com/detail/private-grammar-checking/lodbfhdipoipcjmlebjbgmmgekckhpfb\"\n\t\t\t\t\tclass=\"skew-hover-left\"\n\t\t\t\t>\n\t\t\t\t\t<Card class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<ChromeLogo width=\"40\" height=\"40\" />\n\t\t\t\t\t\t<span class=\"font-medium\">Chrome</span>\n\t\t\t\t\t</Card>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"https://addons.mozilla.org/en-US/firefox/addon/private-grammar-checker-harper/\"\n\t\t\t\t\tclass=\"skew-hover\"\n\t\t\t\t>\n\t\t\t\t\t<Card class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<FirefoxLogo width=\"40\" height=\"40\" />\n\t\t\t\t\t\t<span class=\"font-medium\">Firefox</span>\n\t\t\t\t\t</Card>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"/docs/integrations/helix\"\n\t\t\t\t\tclass=\"skew-hover-left\"\n\t\t\t\t>\n\t\t\t\t\t<Card class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<HelixLogo width=\"40\" height=\"40\" />\n\t\t\t\t\t\t<span class=\"font-medium\">Helix</span>\n\t\t\t\t\t</Card>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"/docs/integrations/wordpress\"\n\t\t\t\t\tclass=\"skew-hover-left\"\n\t\t\t\t>\n\t\t\t\t\t<Card class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<WordPressLogo width=\"40\" height=\"40\" />\n\t\t\t\t\t\t<span class=\"font-medium\">WordPress</span>\n\t\t\t\t\t</Card>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"/docs/integrations/zed\"\n\t\t\t\t\tclass=\"skew-hover\"\n\t\t\t\t>\n\t\t\t\t\t<Card class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<ZedLogo width=\"40\" height=\"40\" />\n\t\t\t\t\t\t<span class=\"font-medium\">Zed</span>\n\t\t\t\t\t</Card>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"/docs/integrations/emacs\"\n\t\t\t\t\tclass=\"skew-hover-left\"\n\t\t\t\t>\n\t\t\t\t\t<Card class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<EmacsLogo width=\"40\" height=\"40\" />\n\t\t\t\t\t\t<span class=\"font-medium\">Emacs</span>\n\t\t\t\t\t</Card>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"/docs/integrations/sublime-text\"\n\t\t\t\t\tclass=\"skew-hover\"\n\t\t\t\t>\n\t\t\t\t\t<Card class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<SublimeLogo width=\"40\" height=\"40\" />\n\t\t\t\t\t\t<span class=\"font-medium\">Sublime Text</span>\n\t\t\t\t\t</Card>\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t</svelte:fragment>\n\t</Section>\n\n\t<Section layout=\"split\">\n\t\t<svelte:fragment slot=\"title\">Wicked Fast</svelte:fragment>\n\t\t<p>\n\t\t\tSince Harper runs on your devices, it's able to serve up suggestions in under 10 milliseconds.\n\t\t</p>\n\t\t<p>No network request, no massive language models, no fuss.</p>\n\t\t<svelte:fragment slot=\"aside\">\n\t\t\t<Card>\n\t\t\t\t<Graph />\n\t\t\t</Card>\n\t\t</svelte:fragment>\n\t</Section>\n\n\t<Section>\n\t\t<svelte:fragment slot=\"title\">Loved by Thousands</svelte:fragment>\n\t\t<TestimonialCollection testimonials={testimonials} />\n\t</Section>\n\n\t<Section id=\"faqs\">\n\t\t<svelte:fragment slot=\"title\">FAQs</svelte:fragment>\n\t\t<div class=\"space-y-4\">\n\t\t\t<Collapsible title=\"Is Harper Free?\">\n\t\t\t\t<p>\n\t\t\t\t\tYes. Harper is free in every sense of the word. You don't need a credit card to start using\n\t\t\t\t\tHarper, and the source code is freely available under the Apache-2.0 license.\n\t\t\t\t</p>\n\t\t\t</Collapsible>\n\t\t\t<Collapsible title=\"How Does Harper Work?\">\n\t\t\t\t<p>\n\t\t\t\t\tHarper watches your writing and provides instant suggestions when it notices a grammatical\n\t\t\t\t\terror. When you see an underline, it's probably because Harper has something to say.\n\t\t\t\t</p>\n\t\t\t</Collapsible>\n\t\t\t<Collapsible title=\"Does Harper Change The Meaning of My Words?\">\n\t\t\t\t<p>\n\t\t\t\t\tNo. Harper will never intentionally suggest an edit that might change your meaning. Harper\n\t\t\t\t\tstrives to never make it harder to express your creativity.\n\t\t\t\t</p>\n\t\t\t</Collapsible>\n\t\t\t<Collapsible title=\"Is Harper Really Private?\">\n\t\t\t\t<p>\n\t\t\t\t\tHarper is the only widespread and comprehensive grammar checker that is truly private. Your\n\t\t\t\t\tdata never leaves your device. Your writing should remain just that: <strong>yours.</strong>\n\t\t\t\t</p>\n\t\t\t</Collapsible>\n\t\t\t<Collapsible title=\"How Do I Use or Integrate Harper?\">\n\t\t\t\t<div class=\"space-y-3\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\tThat depends on your use case. Do you want to use it within Obsidian? We have an\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/obsidian\">Obsidian plugin</Link>. Do you want to use it within WordPress? We have a\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/wordpress\">WordPress plugin</Link>. Do you want to use it within your Browser? We have a\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/chrome-extension\">Chrome extension</Link> and a\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/firefox-extension\">Firefox plugin</Link>. Do you want to use it within your code editor? We have documentation on how you can integrate with\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/visual-studio-code\">Visual Studio Code and its forks</Link>,\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/neovim\">Neovim</Link>,\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/helix\">Helix</Link>,\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/emacs\">Emacs</Link>,\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/zed\">Zed</Link> and\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/sublime-text\">Sublime Text</Link>. If you're using a different code editor, then you can integrate directly with our language server,\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/language-server\">harper-ls</Link>. Do you want to integrate it in your web app or your JavaScript/TypeScript codebase? You can use\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/harperjs/introduction\">harper.js</Link>. Do you want to integrate it in your Rust program or codebase? You can use\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"https://crates.io/crates/harper-core\">harper-core</Link>.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</Collapsible>\n\t\t\t<Collapsible title=\"What Human Languages Do You Support?\">\n\t\t\t\t<p>\n\t\t\t\t\tWe currently only support English and its dialects British, American, Canadian,\n\t\t\t\t\tAustralian, and Indian. Other languages are on the horizon, but we want our English support to be truly\n\t\t\t\t\tamazing before we diversify.\n\t\t\t\t</p>\n\t\t\t</Collapsible>\n\t\t\t<Collapsible title=\"What Programming Languages Do You Support?\">\n\t\t\t\t<div class=\"space-y-3\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\tFor <code>harper-ls</code> and our code editor integrations, we support a wide variety of\n\t\t\t\t\t\tprogramming languages. You can view all of them over at the\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"/docs/integrations/language-server#Supported-Languages\">harper-ls documentation</Link>.\n\t\t\t\t\t\tWe are entirely open to PRs that add support. If you just want to be able to run grammar checking\n\t\t\t\t\t\ton your code's comments, you can use\n\t\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"https://github.com/Automattic/harper/pull/332\">this PR as a model for what to do</Link>.\n\t\t\t\t\t</p>\n\t\t\t\t\t<p>\n\t\t\t\t\t\tFor <code>harper.js</code> and those that use it under the hood like our Obsidian plugin, we\n\t\t\t\t\t\tsupport plaintext and/or Markdown.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</Collapsible>\n\t\t\t<Collapsible title=\"Where Did the Name Harper Come From?\">\n\t\t\t\t<p>\n\t\t\t\t\tSee <Link class=\"text-blue-600 dark:text-blue-400\" href=\"https://elijahpotter.dev/articles/naming_harper\">this blog post</Link>.\n\t\t\t\t</p>\n\t\t\t</Collapsible>\n\t\t\t<Collapsible title=\"Do I Need a GPU?\">\n\t\t\t\t<p>No. Harper runs on-device, no matter what. There are no special hardware requirements. No GPU, no additional memory, no fuss.</p>\n\t\t\t</Collapsible>\n\t\t\t<Collapsible title=\"What Do I Do If My Question Isn't Here?\">\n\t\t\t\t<p>\n\t\t\t\t\tYou can join our\n\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"https://discord.gg/invite/JBqcAaKrzQ\">Discord</Link>\n\t\t\t\t\tand ask your questions there or you can start a discussion over at\n\t\t\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"https://github.com/Automattic/harper/discussions\">GitHub</Link>.\n\t\t\t\t</p>\n\t\t\t</Collapsible>\n\t\t\t<Collapsible title=\"Why Isn't Harper Working in Gmail?\">\n\t\t\t\t<p>\n          Harper will not run in Gmail unless the built-in grammar checker is disabled. If you wish to use Harper in Gmail, please <Link class=\"text-blue-600 dark:text-blue-400\" href=\"https://support.google.com/mail/answer/7987?hl=en\">disable the built-in grammar checker.</Link>\n\t\t\t\t</p>\n\t\t\t</Collapsible>\n\t\t</div>\n\t</Section>\n\n\t<Section>\n\t\t<svelte:fragment slot=\"title\">Open Source</svelte:fragment>\n\t\t<p>Harper is completely open source under the Apache-2.0 license.</p>\n\t\t<p>\n\t\t\tCome pay us a visit on\n\t\t\t<Link class=\"text-blue-600 dark:text-blue-400\" href=\"https://github.com/automattic/harper\">GitHub</Link>.\n\t\t</p>\n\t</Section>\n</main>\n"
  },
  {
    "path": "packages/web/src/routes/api/problematic-lints/+server.ts",
    "content": "import { type RequestEvent, redirect } from '@sveltejs/kit';\nimport ProblematicLints from '$lib/db/models/ProblematicLints';\n\nexport const POST = async ({ request }: RequestEvent) => {\n\tconst data = await request.formData();\n\n\tawait ProblematicLints.validateAndCreate({\n\t\tis_false_positive: data.get('is_false_positive') === 'true',\n\t\texample: data.get('example'),\n\t\trule_id: data.get('rule_id'),\n\t\tfeedback: data.get('feedback'),\n\t});\n\n\tthrow redirect(303, '/');\n};\n"
  },
  {
    "path": "packages/web/src/routes/api/uninstall-feedback/+server.ts",
    "content": "import { type RequestEvent, redirect } from '@sveltejs/kit';\nimport UninstallFeedback from '$lib/db/models/UninstallFeedback';\n\nexport const POST = async ({ request }: RequestEvent) => {\n\tconst data = await request.formData();\n\n\tawait UninstallFeedback.validateAndCreate({\n\t\tfeedback: data.get('feedback'),\n\t});\n\tthrow redirect(303, '/');\n};\n"
  },
  {
    "path": "packages/web/src/routes/cache-healthcheck/+server.ts",
    "content": "export async function GET() {\n\treturn new Response('OK', {\n\t\theaders: {\n\t\t\t'Cache-Control': 'no-cache',\n\t\t},\n\t});\n}\n"
  },
  {
    "path": "packages/web/src/routes/docs/about/+page.md",
    "content": "---\ntitle: What Is Harper?\n---\n\nHarper is a grammar checker designed to run anywhere there is text (so really, anywhere).\nMost Harper users are catching their mistakes in [Neovim](./integrations/neovim), [Obsidian](./integrations/obsidian), or [Visual Studio Code](./integrations/visual-studio-code).\n\n<script>\n    import Editor from \"$lib/components/Editor.svelte\"\n</script>\n\n<div class=\"h-96\">\n    <Editor content={`You can try out a editor that uses\\nHarper under the hood here.\\n\\nIt is rnning in your browser right now. \\n\\nNo server required!`}/>\n</div>\n\n## How Does It Work?\n\nHarper takes advantage of decades of natural language research to analyze exactly how your words come together.\nIf something is off, Harper lets you know.\n\nIn a way, Harper is an error-tolerant parser for English.\n\n## Versioning Policy\n\nHarper uses [semantic versioning](https://semver.org/).\n\nAll components and integrations of Harper stay in version sync, including but not limited to:\n\n- `harper.js`\n- `harper-core`\n- `harper-comments`\n- `harper-ls`\n- The Obsidian Plugin\n- The VS Code Plugin\n- The Chrome Extension\n\nThat means that a change in `harper.js` can cause a release of the Obsidian plugin with a version bump, even if nothing has directly changed in the Obsidian plugin.\nWe do this because we view Harper not as a disparate set of integrations, but as a holistic system accessible in a wide variety of places.\n\nFor the time being, we only actively develop and maintain the latest version of Harper (seen in the `master` branch on GitHub). \nIf long-term support for older versions is desired, please let us know and we will do our best to accommodate you.\n\n## Projects Using Harper\n\nSome of the open-source projects using Harper include:\n\n- [Gherlint](https://github.com/gherlint/gherlint)\n- [walletbeat](https://github.com/walletbeat/walletbeat)\n- [Stencila](https://github.com/stencila/stencila)\n- [fixmyspelling](https://github.com/samedwardes/fixmyspelling)\n- [Tally](https://tally.johng.io)\n\nAre you using Harper in your open source work and want to be included in this list?\nIf so, please open a PR. \nWe would be happy to add it.\n"
  },
  {
    "path": "packages/web/src/routes/docs/about/+page.ts",
    "content": "export const ssr = false;\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/architecture/+page.md",
    "content": "---\ntitle: Harper's Architecture\n---\n\nThis document seeks to solve one simple problem:\n\n> \"Roughly, it takes 2x more time to write a patch if you are unfamiliar with the project, but it takes 10x more time to figure out **where** you should change the code.\" - [Alex Kladov](https://matklad.github.io/2021/02/06/ARCHITECTURE.md.html)\n\nThis document is meant to serve as a kind of table of contents for the Harper project.\nHopefully, we can reduce that 10x down to something a little more reasonable.\n\n## What does Harper do?\n\nHarper tries to do one thing well: find grammatical and spelling errors in English text.\nIf possible, provide suggestions to correct those errors.\nAn error and its possible corrections together form what we call a lint.\n\nIn this vein, Harper serves the role of a [Linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for English.\n\n## `harper-core`\n\n`harper-core` is where all the magic happens.\nIt contains the code needed to tokenize, parse, analyze and lint English text.\n\nAt a high level, there are just a couple types you need to worry about.\n\n- [Document](https://docs.rs/harper-core/latest/harper_core/struct.Document.html): A representation of an English document. Implements [`TokenStringExt`](https://docs.rs/harper-core/latest/harper_core/trait.TokenStringExt.html) to make it easier to query.\n- [Parser](https://docs.rs/harper-core/latest/harper_core/parsers/trait.Parser.html): A trait that describes an object that consumes text and emits tokens. The name is somewhat of a misnomer since it is supposed to only lex English (and emit [Tokens](https://docs.rs/harper-core/latest/harper_core/struct.Token.html)), not parse it. It is called a parser since most types that implement this trait parse _other_ languages (JavaScript) to extract the English text.\n  - The [Markdown parser](https://docs.rs/harper-core/latest/harper_core/parsers/struct.Markdown.html) is a great example.\n- [Linter](https://docs.rs/harper-core/latest/harper_core/linting/trait.Linter.html): A trait that, provided a document, will produce zero or more [Lints](https://docs.rs/harper-core/latest/harper_core/linting/struct.Lint.html#). This is usually done using direct queries on the document or by implementing a [`PatternLinter`](https://docs.rs/harper-core/latest/harper_core/linting/trait.PatternLinter.html).\n\nIf you want to add a linter to Harper, create a new file under the `linters` module in `harper-core` and create a public struct that implements the `Linter` trait.\nThere are a couple places in other parts of the codebase you'll need to update before it will show up in editors and have persistent settings, but that's a problem for after you've opened your pull request.\n\n## `harper-ls`\n\n`harper-ls` is a language server that wraps around `harper-core`.\nIn essence, it enables text editors and IDEs to access the capabilities of Harper over a network or via standard input/output.\n\nIf you aren't familiar with what a language server does, I would suggest reading [this](https://tamerlan.dev/an-introduction-to-the-language-server-protocol/) or the [official language server protocol documentation](https://microsoft.github.io/language-server-protocol/).\n\nWhen Harper is used through Neovim, Visual Studio Code, Helix, Emacs or Sublime Text, `harper-ls` is the interface.\n\nYou can read more about it [here](../integrations/language-server).\n\n## `harper.js`\n\n`harper.js` is a JavaScript/TypeScript module that enables developers to use Harper on any platform that supports JavaScript and WebAssembly.\nMost of the JavaScript code in `harper.js` exists to load and manage the underlying WebAssembly module (otherwise known as `harper-wasm`).\n\n[There are more details about it in the documentation.](../harperjs/introduction)\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/author-a-rule/+page.md",
    "content": "---\ntitle: Author a Rule\n---\n\n[Harper's grammatical rules are many](../rules), but most are relatively easy to understand.\nBefore we get into how to write a rule, it is important that we get some of the language cleared up.\n\nWhen we refer to a Harper rule, we are talking about [an implementation of the Linter trait](https://docs.rs/harper-core/latest/harper_core/linting/trait.Linter.html).\nAs you can see, there is an enormous amount of flexibility in this trait and a wide variety of potential strategies for querying the provided document to locate errors.\n\nThis guide will go through one easy way to add a complex rule to Harper.\nThe lofty goal is for this to be doable by someone with little to no Rust experience.\nYou should, however, be able to figure out how to use Git.\n\nWhile this guide should be enough to get stared, [others](https://elijahpotter.dev/articles/writing_a_grammatical_rule_for_harper) have been written.\n\n## Fork the Harper Monorepo\n\nBefore you can open a pull request or modify any code, you need a mutable copy of our monorepo.\nThe best way to do that is to [fork it in GitHub](https://github.com/Automattic/harper/fork).\n\nNext, you'll want to copy this fork onto your computer and create a new branch.\nGitHub has an [excellent page explaining how to clone repositories](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository).\n\n## Get Your Environment Set Up\n\nPlease read our [guide for getting your environment set up](./environment).\n\n## Open a Draft Pull Request\n\nNext, you'll want to open a draft pull request.\nThis gives us (the Harper maintainers) a better view of what is actively being worked on.\nIt also makes it much easier to ask questions about how Harper works while you're working on your rule.\n[This page has more detail on why we want draft pull requests as early as possible.](https://elijahpotter.dev/articles/never_wait).\n\nGitHub has some [good documentation on how to create a draft PR](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) if this is your first time.\n\n## Determine Your Rule's Needed Complexity\n\nA vast plurality of potential grammatical rules are pretty simple.\nIf you're trying to extend Harper to identify a given phrase (like \"all of the sudden\") and replace it with something else (like \"all of a sudden\"), you can do this without any complex programming at all.\nAll you have to do is add a line to `harper-core/src/linting/phrase_corrections/mod.rs`:\n\n```rust\n\"AllOfASudden\" => (\n    // The offending phrase\n    [\"all of the sudden\"],\n    // The correct phrase\n    [\"all of a sudden\"],\n    // The message to notify the user of the error\n    \"The phrase is `all of a sudden`, meaning `unexpectedly`.\",\n    // A description of the rule.\n    \"Corrects `all of the sudden` to `all of a sudden`.\"\n),\n```\n\nThis method also covers more complex cases, like if one of the words contains capitalization or the phrase is split by a line break.\n\nYou can actually add multiple offending phrases and correct phrases to the same rule:\n\n```rust\n\"EnMasse\" => (\n    // Multiple offending phrases\n    [\"on mass\", \"on masse\", \"in mass\"],\n    [\"en masse\"],\n```\n```rust\n\"InOfItself\" => (\n    [\"in of itself\"],\n    // Multiple correct phrases\n    [\"in itself\", \"in and of itself\"],\n```\n\nFor more complex corrections with multiple variants, singular and plural, or multiple verb tenses, you can use `harper-core/src/linting/phrase_set_corrections/mod.rs`.\n\nIt has two sections. The `add_1_to_1_mappings` section is simpler, supporting sets of corrections with a single name, where each pair is a single offending phrase and a single correct phrase.\n```rust\n\"Ado\" => (\n    &[\n        // Multiple variants but only one offending phrase\n        // and one correct phrase\n        (\"further adieu\", \"further ado\"),\n        (\"much adieu\", \"much ado\"),\n    ],\n    \"Use `ado` (meaning 'fuss') not `adieu` (meaning 'farewell').\",\n    \"Corrects `adieu` to `ado` in common phrases.\"\n),\n```\n\nThe `add_many_to_many_mappings` section is more complex. Each set still has a single name, but each pair can have multiple offending phrases and multiple correct phrases.\n```rust\n\"ChangeTack\" => (\n    &[\n        // Both multiple variants and also multiple offending\n        // phrases and/or correct phrases\n        (&[\"change tact\", \"change tacks\"], &[\"change tack\"]),\n        (&[\"changed tact\", \"changed tacks\"], &[\"changed tack\"]),\n    ],\n    \"A change in direction is a change of `tack` (not `tact`).\",\n    \"Corrects the idiom `change tack`.\"\n),\n```\n\n\nSimilarly, if you just want Harper to enforce proper capitalization of a multi-token proper noun (like \"Tumblr Blaze\") you just need to add an entry to `harper-core/proper_noun_rules.json`.\n\n```javascript\n// The name of the rule\n\"TumblrNames\": {\n    // The canonical capitalization of the proper noun.\n\t\"canonical\": [\n\t\t\"Tumblr Blaze\",\n\t\t\"Tumblr Pro\",\n\t\t\"Tumblr Live\",\n\t\t\"Tumblr Ads\",\n\t\t\"Tumblr Communities\",\n\t\t\"Tumblr Shop\",\n\t\t\"Tumblr Dashboard\"\n\t],\n    // A description to be shown to the user when they make a mistake.\n\t\"description\": \"Ensure proper capitalization of Tumblr-related terms.\"\n},\n```\n\nIf neither of those work for the rule you have in mind, continue on to the next section.\n\n## Create Your Rule's Module\n\nNow that we've established that your rule is of a non-trivial level of complexity, here is what you need to do.\n\nWe separate each rule into its own file inside the `harper-core/src/linting` [directory.](https://github.com/Automattic/harper/tree/master/harper-core/src/linting)\nCreate a new file under that directory with the name of your rule in `snake_case`.\nIf you can't decide yet, just call it `my_rule.rs`.\n\nDon't put anything in this file yet, there's some bookkeeping we have to do first.\n\n## Register Your Rule\n\nBefore we start describing to Harper what grammatical errors to look for, we need to register your rule within the system.\n\nFirst, add your rule's module to the tree by adding it to [the top of the mod file](https://github.com/Automattic/harper/blob/master/harper-core/src/linting/mod.rs).\nIt should look something like this:\n\n```rust title=\"harper-core/src/linting/mod.rs\"\nmod an_a;\nmod avoid_curses;\nmod boring_words;\nmod capitalize_personal_pronouns;\n// [svp! df:+]mod my_rule;\n```\n\nNext, we need to configure whether your rule will be enabled by default.\nWhile you're working on it, we **highly suggest** you enable it to avoid confusion.\n\nTo do that, import your rule at the top of the `lint_group` [file](https://github.com/Automattic/harper/blob/master/harper-core/src/linting/mod.rs).\n\n```rust title=\"harper-core/src/linting/lint_group.rs\"\nuse super::an_a::AnA;\nuse super::avoid_curses::AvoidCurses;\nuse super::boring_words::BoringWords;\nuse super::capitalize_personal_pronouns::CapitalizePersonalPronouns;\nuse super::correct_number_suffix::CorrectNumberSuffix;\n// [svp! df:+]use super::my_rule::MyRule;\n```\n\nFinally, enable it in a macro invocation near the bottom:\n\n```rust title=\"harper-core/src/linting/lint_group.rs\"\ninsert_struct_rule!(AdjectiveOfA, true);\ninsert_expr_rule!(BackInTheDay, true);\ninsert_struct_rule!(WordPressDotcom, true);\ninsert_expr_rule!(OutOfDate, true);\n// [svp! df:+]insert_expr_rule!(MyRule, true);\n```\n\nIf you use a `ExprLinter`, use `insert_expr_rule` to take advantage of Harper's aggressive caching.\nOtherwise, use `insert_struct_rule`.\n\n## Write Your Rule\n\nDefining an expression and [implementing the ExprLinter trait](https://docs.rs/harper-core/latest/harper_core/linting/trait.ExprLinter.html) is the easiest way to define a new rule for Harper.\nHere's a template to get you started:\n\n```rust title=\"my_rule.rs\"\nuse crate::{\n    Lrc, Token\n};\n\nuse super::{Lint, ExprLinter};\n\npub struct MyRule {\n    expr: Box<dyn Expr>,\n}\n\nimpl Default for MyRule {\n    fn default() -> Self {\n        // Define the grammatical expr the rule should look for in user text.\n        let mut expr = todo!();\n\n        Self {\n            expr: Box::new(expr),\n        }\n    }\n}\n\nimpl ExprLinter for ThatWhich {\n    /// Pass the expr to the ExprLinter framework.\n    fn expr(&self) -> &dyn Expr {\n        self.expr.as_ref()\n    }\n\n    /// Any series of tokens that match the expr provided in the `default()` method above will\n    /// be provided to this function, which you are required to map into a [`Lint`] object.\n    fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Option<Lint> {\n        unimplemented!();\n    }\n\n    fn description(&self) -> &'static str {\n        \"Replace this text with a description of what your rule looks for.\"\n    }\n}\n```\n\n## Test Your Changes\n\nTo test your rule, first write out an example of the error it looks for in a test file at the root of the Harper monorepo.\n\n```markdown title=\"test.md\"\nThis is an test of the `an_a` rule.\nYour test should look different.\n```\n\n### Using the Command Line\n\nFrom there, you can run `just lint <test filename>`.\nIt should emit a readable report of the grammatical errors in the document.\nIf the error your rule looks for does _not_ appear in this list, something is wrong.\n\nIf you need any help writing or debugging rules, don't be afraid to contact the Harper team in your draft pull request.\n\n> **Note:** if two lints (or suggestions) overlap or address the same problem, this command will only display the first one.\n> In that case, you might want to use another method of debugging.\n\n### Using Visual Studio Code\n\nFirst make sure you have [the extension installed from the marketplace](https://marketplace.visualstudio.com/items?itemName=elijah-potter.harper).\nThen, configure the path of the `harper-ls` binary the Visual Studio Code extension uses in the settings page.\nSet it to `<harper repo>/target/release/harper-ls`.\n\n![How to change the `harper-ls` path](/images/vscode_harper_path.webp)\n\nEvery time you want to test a change, you'll have to recompile `harper-ls` and reload Visual Studio Code with the `Developer: Reload Window` command in the command palette.\n\n```bash\ncargo build --release # Run in the monorepo to compile `harper-ls`.\n```\n\n:::note\nThis workflow only works if all you're changing is the Rust code. If your changes include updates to the VS Code extension or if you'd like to test your new rule's setting in VS Code by adding it to `package.json`, then you'd need to open the extension in an [Extension Development Host](./visual-studio-code#Running-the-Extension).\n:::\n\n## Elevate Your Pull Request\n\nOnce you're satisfied with your rule, you can go ahead and elevate your pull request to mark it as \"ready for review.\"\nAt that point, a maintainer on the Harper team take a look at it and (hopefully) merge it.\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/brill/+page.md",
    "content": "---\ntitle: Brill Tagging\n---\n\nHarper uses Brill tagging as a refinement step to a dictionary-based [POS tagging](https://en.wikipedia.org/wiki/Part-of-speech_tagging) approach.\nThis method retains low-latency and high-throughput without bundling a large, high-entropy language model.\n\nWhile documentation on this site is sparse, initial development was accompanied by [a blog post](https://elijahpotter.dev/articles/transformation-based_learning), which can hopefully explain some of the more abstract details of the process.\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/chrome-extension/+page.md",
    "content": "---\ntitle: Chrome Extension\n---\n\nHarper's Chrome extension is still in its infancy.\nAt a high level, there are just three components: the content script, the options page and the popup \"page\".\n\nAt the moment, this document is also in its infancy.\nIt is incomplete, and we would _really appreciate_ contributions to make it better.\n\n![The Chrome extension's high-level architecture.](/images/chrome_extension_diagram.png)\n\n## The Content Script\n\nThe content script has three responsibilities:\n\n- Reading text from the user's currently open web page.\n- Writing text back to the user's web page (after applying a suggestion to it).\n- Rendering underlines over their text (this is the hard part).\n\nAll three of these responsibilities are handled by the `lint-framework` package.\n\nNotably, it does not do any linting itself.\nInstead, it submits requests to the background worker to do so, since instantiating a WebAssembly module on every page load is expensive.\n\n## Popup Page\n\n![The Chrome extension's popup page](/images/chrome_extension_popup.png)\n\nAt the moment, the popup page has just one functional button that toggles Harper on the current domain.\nAgain, it doesn't interact with local storage itself to do this.\nRather, it initiated requests to the background worker, which then interfaces with local storage.\n\n## Options Page\n\n![The Chrome extension's popup page](/images/chrome_extension_options.png)\n\nSimilar to the popup page, the options page initiates requests to the background worker to change the extensions configuration.\nIt has settings for:\n\n- Changing the English dialect Harper lints for.\n- Enabling/disabling individual rules\n\nIt will eventually allow users to clear ignored suggestions and configure their dictionary.\n\n## The Background Worker\n\nThis is the location of a lot of centralized \"business\" logic.\nIt:\n\n- Loads `harper.js` and performs linting\n- Handles persistent storage and configuration of:\n    - Dialect\n    - Rules\n    - Domain toggling\n\n## The Firefox Extension\n\nDespite the name of the package, the `chrome-plugin` also supports Firefox. \nTo build for Firefox, just use `pnpm zip-for-firefox` or otherwise compile with the environment variable `TARGET_BROWSER=firefox`.\n\n## Google Docs Support\n\nGoogle Docs is a complex beast.\nUsed by billions around the world, it's honestly an engineering marvel.\nNaturally, we want to allow Harper users to use that marvel if they so wish.\nThat posed a complex problem for us, which is why many of our early users may remember a (relatively) long era where we simply didn't support Google Docs.\n\nGoogle Docs was difficult to support for two simple reasons:\n\n1. It doesn't render to the DOM at all. Instead, Google Docs uses a specialized document renderer called Kix that is composed of a single `<canvas />` element.\n1. The API to access the internal document state of Kix existed, but was entirely undocumented.\n\nOur saving grace was the [open-sourcing of Witty Works](https://github.com/witty-works/browser-extension), an inclusive language checker.\nThey figured out a way to access the internal document state, which we took inspiration from.\nHere's how it works.\n\n### How We Read and Write to Google Docs\n\nTo get Google Docs into a readable state, we need to trick it a little bit.\nKix's API is official, but Google provides it to a limited number of \"supported\" vendors.\nIn practice, that means that if a user has one of a limited number of Chrome extensions installed, Google Docs will expose it's operable underbelly.\nDespite many attempts to get on Google's whitelist, Harper is not one of these extensions.\nSo we have to trick it.\n\nThat's the purpose of the `googleDocsBootstrap.js` content script.\nIt's short, sweet, and to the point:\n\n@code(../../../../../../chrome-plugin/src/contentScript/googleDocsBootstrap.js)\n\nAll we're doing is telling Google Docs that we're one of the supported extension, even if we technically aren't.\n\nOnce our deception is complete, Google Docs will start writing SVG nodes to the DOM, mirroring the text that's being rendered to the `<canvas />` element that we talked about earlier.\n\nThis is where our bridge comes in.\nAt the soonest available opportunity, Harper will inject the `google-docs-bridge.js` script into the main world of the session.\nWe need to do this because normal content scripts are not allowed to read or write to the APIs necessary.\nThis \"bridge\" can.\n\nI thoroughly encourage you to read the actual source code or reach out if you have any questions.\nIn short, though, the bridge maintains a mirrored version of the Google Docs state, one that is readable by the normal lint framework.\nIn other words, it acts as middleman between the rest of the Chrome extension and Google Docs, allowing most of the existing code to be able to treat Google Docs the same way it would treat any other text editor on the web.\n\n## Other Reading\n\n- [Putting Harper in the Browser: Technical Details](https://elijahpotter.dev/articles/putting_harper_in_your_browser)\n- [The Art of Exception](https://elijahpotter.dev/articles/the_art_of_exception)\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/committing/+page.md",
    "content": "---\ntitle: Committing\n---\n\nHarper follows [conventional commit practices](https://www.conventionalcommits.org/en/v1.0.0/).\nBefore creating a pull request, please make sure all your commits follow the linked conventions.\n\nAdditionally, to minimize the labor required to review your commit, we run a relatively strict suite of formatting and linting programs.\nWe highly recommend that you run both `just format` and `just precommit` before submitting a pull request.\nIf those scripts don't work in your environment, we run `just precommit` through GitHub Actions inside of pull requests, so you may make modifications and push until the checks pass.\n\nIf this sounds intimidating, don't worry.\nWe are entirely willing to work with you to make sure your code can make it into Harper, just know it might take a little longer.\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/dictionary/+page.md",
    "content": "---\ntitle: Updating the Curated Dictionary\n---\n\nThe curated dictionary is the English dictionary Harper uses as reference internally when analyzing or modifying English text.\nIt is common, especially with technical language, to come across words that are not in this dictionary.\nIf this happens to you, please open a PR to get them in.\n\nPR [#343](https://github.com/Automattic/harper/pull/343) is a practical example of the ideas described here.\n\nThere are two files you need to worry about.\n[`harper-core/dictionary.dict`](https://github.com/Automattic/harper/blob/master/harper-core/dictionary.dict) and [`harper-core/annotations.json`](https://github.com/Automattic/harper/blob/master/harper-core/annotations.json) (formerly `affixes.json`).\nThe first is a list of words, tagged with modifiers defined in the second.\n\nFor example, all words, such as \"move\", tagged with `L`, will be expanded to two dictionary entries, \"move\" and \"movement\".\nIn `annotations.json`, this expansion rule looks like this:\n\n```js title=annotations.json\n{\n\t\"L\": {\n\t\t// A description of the rule.\n\t\t\"#\": \"'-ment' suffix\",\n        // Denotes that the area of interest is at the _end_ of the base word.\n\t\t\"kind\": \"suffix\",\n        // Declare that it is OK to use the result of the expansion with other expansions.\n\t\t\"cross_product\": true,\n        // The actual replacement rules that result in an expansion.\n\t\t\"replacements\": [\n\t\t\t{\n                // If present, remove this text from the area of interest before expansion.\n\t\t\t\t\"remove\": \"\",\n\t\t\t\t\"add\": \"ment\",\n                // A simplified regex-like pattern that describes what the area of interest must look like in order for this particular replacement to be applied.\n\t\t\t\t\"condition\": \".\"\n\t\t\t}\n\t\t],\n        // The metadata that should be applied to the expanded word.\n\t\t\"target\": {},\n        // The metadata that should be applied to the base word.\n\t\t\"base_metadata\": {}\n\t}\n}\n```\n\nThose familiar with `hunspell` might notice some similarities with their dictionary format.\nThe main differences are the [metadata fields.](https://docs.rs/harper-core/latest/harper_core/lexeme_metadata/struct.LexemeMetadata.html)\n\nThere is a separate section, `properties` that is specifically for special rules that add only metadata to the words they're applied to.\n\n## Adding Nouns\n\nYou don't need to know any of the nitty-gritty details to add nouns to the dictionary.\nUse the tool we have in the repo:\n\n```bash\njust addnoun <YOUR NOUN HERE>\n```\n\nIf this command doesn't look familiar, [read our setup documentation for contributors](./environment).\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/environment/+page.md",
    "content": "---\ntitle: Set Up Your Environment\n---\n\nDepending on what you're wanting to work on within the Harper repo, you may not need to set up every aspect of the environment described on this page.\nFor example, if you only intend to work on the core grammar engine, `harper-ls`, or `harper-cli`, you only need `cargo` installed.\nIn that case, Harper follows all of the standard conventions for Rust projects, so any existing Rust knowledge will apply.\n\nIf you intend to work on the Chrome extension, Obsidian plugin, or certain other projects, you'll need the full environment set up.\n\nTo use _all_ the tooling we use to build and debug Harper, you'll need the following programs available in your `$PATH`.\nPlease read the manuals for each tool for instructions on how to install it.\nFor Nix users, we provide a [Nix development shell](#Nix-development-shell) to setup all the necessary tooling automatically.\n\n- [`just`](https://github.com/casey/just)\n- `bash`\n- [`cargo`](https://www.rust-lang.org/) (we develop against the latest version of Rust)\n- `pnpm`\n- `node`\n- `grep`\n- [`wasm-pack`](https://drager.github.io/wasm-pack/installer/)\n- `zip`\n- [`cargo-hack`](https://github.com/taiki-e/cargo-hack?tab=readme-ov-file#installation)\n\nTo run integration tests, you may also need `libnss3` and/or `libasound3`.\nThese are installable in Ubuntu using `apt-get`.\n\n```bash\nsudo apt-get install libnss3\nsudo apt-get install libasound2\n```\n\nWe develop a set of tools, accessible via `just`, to build and debug Harper's algorithm (otherwise known as `harper-core`) and its various integrations.\nThe source code is in the `justfile` [at the root of the repository](https://github.com/Automattic/harper/blob/master/justfile).\nTo see all the tools in the toolbox, run:\n\n```bash\njust --list\n```\n\n> Please note that `just build-web` _only_ builds the website for production, while `just dev-web` also spins up a development server.\n\nBefore making any modifications, we highly recommend that you run `just setup` to populate your build caches and download all dependencies.\nIf you see a Visual Studio code window pop open, don't worry! That's just a part of our integration tests.\n\n## Nix development shell\n\nIf you use [nix-direnv](https://github.com/nix-community/nix-direnv), the shell will be loaded automatically when you change into the project directory.\n\nOtherwise, run:\n\n```bash\nnix develop\n```\n\nThis will start a bash shell that provides the build environment with everything you need to start contributing!\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/faq/+page.md",
    "content": "---\ntitle: Frequently Asked Questions\n---\n\nThis page will be composed of frequently asked questions for contributors.\n\n## What's the Difference Between a `Linter` and a `PatternLinter`?\n\n![A diagram that shows the relationship between a `Linter` and a `PatternLinter`](/images/linter_diagram.png)\n\nA [`Linter`](https://docs.rs/harper-core/latest/harper_core/linting/trait.Linter.html) is a Rust trait for a type that queries a [`Document`](https://docs.rs/harper-core/latest/harper_core/struct.Document.html) to identify grammatical errors, returning a human-readable list of errors, optionally with suggestions that could resolve them.\n\nA [`PatternLinter`](https://docs.rs/harper-core/latest/harper_core/linting/trait.PatternLinter.html) is another Rust trait for a type that can hook into the `PatternLinter` framework.\nThe `PatternLinter` provides a pattern, which the framework locates inside of documents.\nWhen a sequence of tokens is matched, they are provided to `match_to_lint` to map the match to a human-readable error.\n\nAll types that implement `PatternLinter` also implement `Linter` thanks to a [blanket implementation](https://doc.rust-lang.org/reference/glossary.html?highlight=blanket#blanket-implementation) of the latter upon the former.\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/introduction/+page.md",
    "content": "---\ntitle: Introduction to Contributing\n---\n\nHarper is completely open to outside contributions of any kind.\n\nIf you have a feature request or bug to report, please [create an issue](https://github.com/automattic/harper/issues) or ask us [a question on Discord](https://discord.gg/JBqcAaKrzQ) and we'll get back to you as soon as we can.\n\nIf you're interested in making a change to the code, we have documentation on [setting up your environment](./environment) and [getting your changes merged in](./committing).\n\n## Other Resources\n\n- [Why you should open a draft pull request as soon as possible.](https://elijahpotter.dev/articles/never_wait)\n- [LLM-Assisted Fuzzing](https://elijahpotter.dev/articles/LLM_assisted_fuzzing)\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/local-stats/+page.md",
    "content": "---\ntitle: Local Statistics\n---\n\nHarper keeps track of certain aspects of your writing.\nThings like:\n\n- What words are misspelled most often?\n- How often do you accept Harper's suggestions?\n- How much do you write?\n\nHarper does this to help _you_ improve _your_ writing.\nIn the interest of maintaining our user's data sovereignty, Harper aims to do all this processing __on the device__.\nNone of this data is sent anywhere without your explicit permission.\n\nThis document seeks to detail how Harper's statistics logging works under the hood.\n\n## The `stats.txt` File.\n\nThe `stats.txt` file (whose name is subject to change) is a log of actions taken by Harper or the user.\nIt records specific events, along with some contextual information (like which word was misspelled).\n\nThe `stats.txt` file is formatted into lines (so it is easy to open in append-mode), each containing a JSON object.\n\n```\n{\"kind\":{\"Lint\":{\"kind\":\"Spelling\",\"context\":[{\"content\":\"mispelled\",\"kind\":{\"kind\":\"Word\",\"value\":null}}]}},\"when\":1743696274,\"uuid\":\"39d29bd0-5eb1-4bad-89ee-5a48531a4cbe\"}\n{\"kind\":{\"Lint\":{\"kind\":\"Spelling\",\"context\":[{\"content\":\"isnt\",\"kind\":{\"kind\":\"Word\",\"value\":null}}]}},\"when\":1743696281,\"uuid\":\"22e1ca15-e583-49c5-9da3-bc7e625d9682\"}\n{\"kind\":{\"Lint\":{\"kind\":\"Spelling\",\"context\":[{\"content\":\"Teasting\",\"kind\":{\"kind\":\"Word\",\"value\":null}}]}},\"when\":1743696288,\"uuid\":\"bd955190-a4d9-4f3e-b7df-d4bf6f12a415\"}\n```\n\nIn `harper-ls` it is written to the Harper `data` directory. (On Linux `~/.local/share/harper-ls/stats.txt`, on macOS `~/Library/Application Support/harper-ls/stats.txt`, on Windows `%FOLDERID_LocalAppData%/harper-ls/stats.txt`)\nIn `harper.js` it is available through methods of objects that implement the [`Linter`](/docs/harperjs/ref/harper.js.linter.html) interface.\n\nA simple dashboard to view a summary of these statistics is available [on our website](/stats).\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/obsidian/+page.md",
    "content": "---\ntitle: Contributor's Guide to the Obsidian Plugin\n---\n\nThis page will outline the most important bits of information needed to work on the Harper Obsidian plugin.\nIn addition to that outlined in [environment set up page](./environment), you'll also need a working [Obsidian installation](https://obsidian.md/) and vault prepared.\n\nAll the code for the Obsidian plugin lies in the `packages/obsidian-plugin` directory of our [monorepo](https://github.com/automattic/harper).\n\n## Obsidian's Quirks\n\nObsidian, in the interest of relieving their development team of any overhead, imposes some restrictions on our plugins that make the build and deploy process unusual.\n\n### Plugins Must Be a Single File\n\nAll the executable code for an Obsidian plugin must be contained within a single file.\nThat includes both JavaScript and—in our case—WebAssembly.\n\nThis is why the only artifact of the Harper Obsidian plugin build process is a single, [heavily minimized](https://www.cloudflare.com/learning/performance/why-minify-javascript-code/) `main.js` file.\n\n### Plugins Are Loaded from a GitHub Repository\n\nAll Obsidian plugins are downloaded and installed from the latest release in a dedicated GitHub repository.\nSince Harper uses a monorepo, our [dedicated GitHub repository](https://github.com/Automattic/harper-obsidian-plugin) is just a skeleton, containing barely more than a plugin manifest and `README.md`.\n\nPRs for the Obsidian plugin should be __submitted to the monorepo__.\nWhen a release is necessary, Harper maintainers will increment the version in the [skeletal repository](https://github.com/Automattic/harper-obsidian-plugin) and create a release.\n\n## Developing the Harper Obsidian Plugin\n\nObsidian loads its plugins from the dedicated plugin directory inside your vault:\n\n```\n<vault dir>/.obsidian/plugins/<plugin name>\n```\n\nFor Harper, this looks exactly as you'd expect:\n\n```\n<vault dir>/.obsidian/plugins/harper\n```\n\nThe workflow for quickly iterating on the plugin looks something like this:\n\n1. Compile and start watching for changes with `just setup && cd packages/obsidian-plugin && pnpm dev`.\n   This will continously rebuild `main.js` anytime you make a change to a file in the `packages/obsidian-plugin` directory.\n2. Copy the `manifest.json` from the skeletal repo to the dedicated plugin directory shown above.\n3. Create a symbolic link to the `main.js` produced by step 1 in the dedicated plugin directory above.\n4. Anytime you make a change, run the `Reload app without saving` command inside of Obsidian.\n\nIf you've done everything right, the dedicated plugin directory should contain three files:\n\n1. `main.js`\n2. `manifest.json`\n3. `data.json` \n\n`data.json` is a configuration file created and modified by the Harper plugin to persist settings, the user's dictionary and other miscellaneous things.\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/review/+page.md",
    "content": "---\ntitle: Reviewing Pull Requests\n---\n\nThere are a lot of individual components and artifacts that make up Harper.\nHow a patch gets reviewed depends significantly on which component or artifact it affects.\nThis page seeks to document the tooling available for downloading and testing patches on a local machine.\n\n## Patches to `harper-core`\n\nIf a patch only affects a grammar rule, it should only be touching `harper-core`.\nThis means you can test the change using any Harper frontend (of which there are many).\n\n### Using GitHub Actions Artifacts\n\nWe run builds for a variety of platforms whenever a Pull Request is pushed to.\nYou can use these to review changes to various aspects of Harper, including `harper-ls`, `harper-cli`, and the Visual Studio Code plugin.\n\n![How to download the Windows Visual Studio Code plugin from the GitHub Actions run.](/images/download_artifact.gif)\n\n### Testing Using Cargo and `harper-cli`\n\nMost of our build tooling exists for Harper's various integrations.\nIf you are testing `harper-core`, you can skip all the fluff and compile the patch using [Cargo](https://doc.rust-lang.org/cargo/) directly.\n\n```bash\ncargo install --git https://github.com/automattic/harper --branch <branch-name> <binary-artifact> --locked\n```\n\nFor example, for [PR #445](https://github.com/Automattic/harper/pull/455), we can install the patched version of the `harper-cli` debug tool with the following command:\n\n```bash\ncargo install --git https://github.com/automattic/harper --branch somewhat-something harper-cli --locked\n```\n\nFrom there, you can run the tool on any file with `harper-cli lint <path>`.\n\n### Testing Via the Docker Image\n\nWe build our web documentation in a Docker image.\nThis documentation includes a [demo](/), so you can also use this image to review changes to linting rules and other aspects of the core algorithm.\n\n```bash\ngit clone https://github.com/automattic/harper\ncd harper\ngit switch <branch from PR>\nIMAGE_HASH=$(docker build . -q)\ndocker run -p 3000:3000 -it $IMAGE_HASH\n```\n\nFrom there, open up `http://localhost:3000` in your web browser of choice and use the text area to test the change.\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/tests/+page.md",
    "content": "---\ntitle: About Harper's Test Suite\n---\n\nHarper's goal is to deliver top-tier grammar checking fast, without compromising privacy.\nHow do we maintain quality while also iterating quickly on our core engine?\n\nAs you know, Harper's core engine is written in Rust.\nAs a corollary to that, we use Cargo to pull dependencies, build, and test the system.\nWhile we do take advantage of snapshot and integration tests, we tend to focus our efforts on unit tests.\n\n## Performance\n\nIn the interest of maintaining fast iteration cycles, we run our tests with `opt-level = 1`.\nThese optimizations are known to cause issues with debuggers. \nIf you plan to use one, you may want to comment them out.\n\n@code(../../../../../../../Cargo.toml)\n\n## Other Reading\n\n- [3 Traits of Good Test Suites](https://elijahpotter.dev/articles/3_traits_of_good_test_suites)\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/visual-studio-code/+page.md",
    "content": "---\ntitle: Visual Studio Code\n---\n\nThis document details how to develop the Visual Studio Code extension locally. If you're interested in how it's packaged and distributed, you can check out the [Release VS Code Plugin](https://github.com/Automattic/harper/blob/master/.github/workflows/release_vscode_plugin.yml) workflow.\n\n## Notes\n\n- The extension code and its tests live in the `packages/vscode-plugin/src` directory. Most changes you'll need to make will be there.\n- VS Code can only pick up the tasks and launch configurations set in `packages/vscode-plugin/.vscode` if `packages/vscode-plugin`, not the root of the Harper repository, is open.\n- You can look at the project's [`justfile`](https://github.com/Automattic/harper/blob/master/justfile) to see exactly what running the `just` recipes below does.\n\n## Prerequisites\n\n- Make sure to [set up your environment](./environment). Be sure to run `just setup` as the guide recommends to make sure the extension's dependencies are installed.\n- Install the [recommended extension](https://github.com/Automattic/harper/blob/master/packages/vscode-plugin/.vscode/extensions.json), [`connor4312.esbuild-problem-matchers`](https://marketplace.visualstudio.com/items?itemName=connor4312.esbuild-problem-matchers), so VS Code can understand and run esbuild tasks.\n- Before running or testing the extension using VS Code's Debugger, make sure you have `harper-ls` in `packages/vscode-plugin/bin`. You can either manually create the directory, compile `harper-ls`, and put it there or you can run `just test-vscode` or `just package-vscode` which will do that for you.\n\n## Running the Extension\n\nFollowing these steps will open the extension in a new Extension Development Host window, so you can view your changes.\n\n1. Open the Run and Debug view by selecting it from the Activity Bar or by pressing `Ctrl+Shift+D`.\n2. Choose `Run Extension`, if not chosen already.\n3. Click the play (Start Debugging) button or press `F5`.\n\n## Running the Tests\n\n### Using the Command Line\n\nYou may run the following command to run the tests, this is the recommended way.\n\n```bash\njust test-vscode\n```\n\n### Using VS Code's Debugger\n\nRemember: VS Code can only pick up the tasks and launch configurations set in `packages/vscode-plugin/.vscode` if `packages/vscode-plugin`, not the root of the Harper repository, is open.\nThat means you need to manually open VS Code in the `vscode-plugin` directory yourself.\n\nYou may also follow these steps to run the tests through your VS Code installation.\n\n1. Open the Run and Debug view by selecting it from the Activity Bar or by pressing `Ctrl+Shift+D`.\n2. Choose `Test Extension`, if not chosen already.\n3. Click the play (Start Debugging) button or press `F5`.\n\n## Packaging and Installing the Extension\n\n1. Package the extension:\n\n   ```bash\n   just package-vscode\n   ```\n\n2. Install the extension:\n\n   ```bash\n   code --install-extension path/to/created/.vsix\n   ```\n"
  },
  {
    "path": "packages/web/src/routes/docs/contributors/wordpress/+page.md",
    "content": "---\ntitle: WordPress Plugin\n---\n\nThis page will describe most of what you need to know to build and develop the WordPress plugin locally.\nYou do NOT need to have a WordPress installation on your machine (or hosted on a server, for that matter) to work on the Harper plugin.\n\nMake sure you read the [introduction to contributing](./introduction) before opening a pull request.\n\n## Notes\n\n- The plugin does not have any kind of automated testing.\n- You can look at the project's [`justfile`](https://github.com/Automattic/harper/blob/master/justfile) to see exactly what running the `just` recipes below do.\n\n## Prerequisites\n\nMake sure to [set up your environment](./environment).\n\n## Running the Plugin on Your Machine\n\nYou should have already run `just setup` to prepare your environment.\nAll you need to do from here is run `just dev-wp`. This will:\n\n- Download a local copy of the WordPress Playground to your machine\n- Build and start watching for changes to the plugin code.\n- Run WordPress, mounting the build directory to the Playground instance.\n\nWhen you make changes to the plugin code, it will be rebuild and you will be able to reload the WordPress page to see your change.\n\n:::info[Remember]\nThe Harper WordPress plugin only works on the Gutenberg editor.\nYou will need to draft or edit a post to see the option to open the sidebar.\n:::\n\n![Open the Harper Sidebar](/images/harper_wp_sidebar_button.png)\n"
  },
  {
    "path": "packages/web/src/routes/docs/harperjs/CDN/+page.md",
    "content": "---\ntitle: Using a CDN\n---\n\nYou can consume Harper from the [unpkg](https://unpkg.com/) CDN using native ECMAScript module syntax which is supported by all modern browsers.\n\n[A simple example is provided below.](./CDN/example)\n\n@code(../../../../../../harper.js/examples/raw-web/index.html)\n"
  },
  {
    "path": "packages/web/src/routes/docs/harperjs/CDN/example/+server.ts",
    "content": "import pageHtml from '../../../../../../../harper.js/examples/raw-web/index.html?raw';\n\nexport async function GET() {\n\treturn new Response(pageHtml, {\n\t\theaders: {\n\t\t\t'Content-Type': 'text/html',\n\t\t},\n\t});\n}\n"
  },
  {
    "path": "packages/web/src/routes/docs/harperjs/configurerules/+page.md",
    "content": "---\ntitle: Configure Rules\n---\n\nWe add new [rules](/docs/rules) to Harper on a daily basis.\nAs such, it is not recommended for consumers of `harper.js` to rely on any rule to exist.\nFurther, consumers should allow space (in their UI, database, etc.) for additional rules to be added whenever a new version of `harper.js` is published.\n\nTo make this easier, `harper.js` exposes a [`LintConfig`](/docs/harperjs/ref/harper.js.lintconfig.html) type, which can be obtained via `Linter.getLintConfig` and written using `Linter.setLintConfig`.\n\nEach key refers to a specific rule. Each rule can be disabled (set the value to `false`), enabled (set the value to `true`), or to the default (set the value to `undefined`).\nFor example, the following code disables `SpellCheck`, enables `ExplanationMarks`, and sets `SameAs` to assume the default value.\n\n```javascript\nlet linter = new WorkerLinter();\n\nawait linter.setLintConfig({\n    SpellCheck: false,\n    ExplanationMarks: true,\n});\n```\n"
  },
  {
    "path": "packages/web/src/routes/docs/harperjs/introduction/+page.md",
    "content": "---\ntitle: Introduction to harper.js\n---\n\n## The Mission\n\nIf you're a developer, odds are that you are using JavaScript or TypeScript on a daily basis.\nYour project probably has at least a little bit of either.\n\nFurthermore, a plurality of focused authorship happens inside either a web browser or an [Electron-based app](https://www.electronjs.org/).\nGiven this, we wanted to create an environment where it would be trivial to integrate fantastic grammar checking into web applications.\nThat's why we created `harper.js`.\n\nToday, it serves as the foundation for our [Obsidian plugin](/docs/integrations/obsidian) and our [website](/).\n\n## Installation\n\n`harper.js` is an ECMAScript module designed to be easy to import into any project.\nOn the inside, it uses a copy of Harper's core algorithm compiled to [WebAssembly](https://webassembly.org/).\n\nIt can be imported [natively in a browser](./CDN) or through [npm](https://www.npmjs.com/package/harper.js) and [consumed in Node.js](./node).\n\n@install-pkg(harper.js)\n\nNotice that the `harper.js` package is currently in early access.\nThis means that the API is not yet stable and we are still working out the kinks.\n"
  },
  {
    "path": "packages/web/src/routes/docs/harperjs/linting/+page.md",
    "content": "---\ntitle: Linting With harper.js\n---\n\n[Linting](<https://en.wikipedia.org/wiki/Lint_(software)>) is the process of consuming, analyzing, and finding faults in text.\nThis is the principle task Harper tries to do.\nWhen possible, Harper also tries to automatically generate fixes for any issues it finds.\n\nIn `harper.js`, there's just one interface you need to worry about: the `Linter`.\n\n## Linters\n\nThe `Linter` type is relatively straightforward and has two implementations: the `LocalLinter` and the `WorkerLinter`.\nNotice how every method returns a `Promise<...>`.\n\n@code(../../../../../../harper.js/src/Linter.ts)\n\nA `LocalLinter` will instantiate and prepare Harper's WebAssembly module asynchronously, but **in the same event loop**.\nThis can result in high [LCP](https://developer.mozilla.org/en-US/docs/Glossary/Largest_contentful_paint), so this implementation is only recommended in situations where the event loop will not be doing other latency-sensitive things.\nIn other words: `LocalLinter`s are not for the web.\n\nA `WorkerLinter`, on the other hand, will instantiate and prepare Harper's WebAssembly module inside a [Web Worker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API), which means it will **not** block the event loop.\nThis is recommended for interactive web applications.\n\n[Visit our page about CDNs](./CDN) to see an example of a `WorkerLinter` in action, or [the page about Node.js](./node) for a `LocalLinter`.\n"
  },
  {
    "path": "packages/web/src/routes/docs/harperjs/node/+page.md",
    "content": "---\ntitle: Using Harper in Node.js\n---\n\nHarper.js can run in Node.js.\nThere is just one consideration: as described in [more detailed here](./linting), we cannot use the `WorkerLinter`.\nThat means we must use the `LocalLinter`.\n\nAdditionally, since `harper.js` is an ECMAScript module, it must be imported in a relatively recent version of Node.js.\n\n## Example Code\n\nThe example below can be found in [the Harper monorepo.](https://github.com/Automattic/harper/tree/master/packages/harper.js/examples/commonjs-simple)\n\n@code(../../../../../../harper.js/examples/commonjs-simple/index.js)\n"
  },
  {
    "path": "packages/web/src/routes/docs/harperjs/spans/+page.md",
    "content": "---\ntitle: Spans\n---\n\nWhen you lint a document using `harper.js`, you'll get back a series of `Lint` objects, each with a `span` method available.\nThere are a number of questions that come up about this method.\n\n## What is a span?\n\nA span is a struct that contains a start index and an end index.\nThe Rust code looks something like this:\n\n```rust\nstruct Span {\n    start: usize,\n    end: usize\n}\n```\n\nFor the uninitiated, a `usize` is an unsigned integer.\nMost commonly (and always in the context of a `Lint`), spans are referring to character windows.\nMore precisely, spans are windows or slices into an array of [unicode scalar values](https://www.unicode.org/glossary/#unicode_scalar_value).\nThis is less relevant to JavaScript consumers.\nSome get confused and believe these are indices into byte arrays (C-style strings).\n\n##  Why do I need to obtain the span through a method call?\n\nThe actual span for a `Lint` is stored inside WebAssembly memory.\nIn order to access that data from JavaScript, a tiny bit of WebAssembly code must be run to serialize it and convert its indices to JavaScript [number types](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number).\n\n## What can I use it for?\n\nIn a `Lint`, the span represents two things:\n\n1. The location of the problematic text.\n1. The text that would be edited by the relevant suggestions.\n\nIn other words, you use the span to underline the problem, then again to solve it.\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/chrome-extension/+page.md",
    "content": "---\ntitle: The Harper Chrome Extension\n---\n\nHarper is free to use for the > 3.6 billion people out there using Chrome.\nUnlike other grammar checking plugins out there, Harper's Chrome extension does all of its work offline.\nWe help improve the prose and grammar of your emails, messages, and documents, all while respecting your privacy.\n\n![A screenshot of the Chrome extension at work.](/images/chrome_extension_github.png)\n\nTo install it, visit the [Chrome Web Store](https://chromewebstore.google.com/detail/private-grammar-checking/lodbfhdipoipcjmlebjbgmmgekckhpfb) and click 'Add to Chrome'.\n\nFor our nerdy friends out there, you'll be happy to hear the Chrome extension is powered by [`harper.js`](/docs/harperjs/introduction).\n\n## Updating the Extension\n\nWe're constantly improving our grammar engine and introducing new features to our Chrome Extension.\nTo get the best experience with Harper, make sure your installation is up-to-date.\n\nYour browser will automatically update the extension to the latest version as soon as it is available.\nIf it is delayed, you can initiate a manual update yourself by:\n\n1. Navigating to `chrome://extensions`.\n1. Enabling Developer mode using the toggle in the top-right corner.\n1. Clicking the Update button that appears.\n\nBe advised: Google's review process is often slower than other integrations (for example, Obsidian).\nThis means that Chrome Extension updates are usually delayed by a few days compared to everything else.\nWe appreciate your patience.\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/emacs/+page.md",
    "content": "---\ntitle: Emacs\n---\n\nOur Emacs integration is powered by [`harper-ls`](./language-server).\n\n## Required Setup\n\nMake sure you have [`harper-ls` installed](./language-server#Installation) on your system and available in your `PATH`.\n\nSince version 29, Emacs has had native support for the Language Server Protocol through [Eglot](https://www.gnu.org/software/emacs/manual/html_mono/eglot.html), so all you have to do is configure it to use `harper-ls` in your `init.el`:\n\n```elisp title=init.el\n(with-eval-after-load 'eglot\n  (add-to-list 'eglot-server-programs\n               '(text-mode . (\"harper-ls\" \"--stdio\"))))\n```\n\nwhere `text-mode` can be set to any, some, or all major modes that correspond to the [languages `harper-ls` supports](./language-server#Supported-Languages). Typically, if you want to use `harper-ls` to edit Markdown files and you have [`markdown-mode`](https://jblevins.org/projects/markdown-mode) installed, you can configure it like this:\n\n```elisp title=init.el\n(with-eval-after-load 'eglot\n  (add-to-list 'eglot-server-programs\n               '(markdown-mode . (\"harper-ls\" \"--stdio\"))))\n```\n\n:::note\n\nA possible gotcha you may be encountering if you don't see any diagnostics is when Eglot automatically deduces the language ID being sent to `harper-ls` based on the major mode you used. In which case, you can set the language ID to one that is supported:\n\n```elisp title=init.el\n(with-eval-after-load 'eglot\n  (add-to-list 'eglot-server-programs\n               '((english-prose-mode :language-id \"plaintext\") . (\"harper-ls\" \"--stdio\"))\n```\n\n:::\n\n## Optional Configuration\n\nAdditionally, you can also configure things like which linters to use or how you want code actions to appear. Below is an example config where everything is set to their default values:\n\n```elisp title=init.el\n(setq-default eglot-workspace-configuration\n              '(:harper-ls (:userDictPath \"\"\n                            :workspaceDictPath \"\"\n                            :fileDictPath \"\"\n                            :linters (:SpellCheck t\n                                      :SpelledNumbers :json-false\n                                      :AnA t\n                                      :SentenceCapitalization t\n                                      :UnclosedQuotes t\n                                      :WrongQuotes :json-false\n                                      :LongSentences t\n                                      :RepeatedWords t\n                                      :Spaces t\n                                      :Matcher t\n                                      :CorrectNumberSuffix t)\n                            :codeActions (:ForceStable :json-false)\n                            :markdown (:IgnoreLinkTitle :json-false)\n                            :diagnosticSeverity \"hint\"\n                            :isolateEnglish :json-false\n                            :dialect \"American\"\n                            :maxFileLength 120000\n                            :ignoredLintsPath \"\"\n                            :excludePatterns [])))\n```\n\n:::note\nThis example only contains some of the available linters, check out our [rules page](../rules) to view the full list.\n:::\n\nFor more information on what each of these configs do, you can head over to the [configuration section](./language-server#Configuration) of our `harper-ls` documentation.\n\n## Common Config Changes\n\nProgrammers often find certain rules have too much of a hair-trigger.\nThe below config is a simple cut-and-paste that gives you much fewer false-positives.\n\n```elisp title=init.el\n(setq-default eglot-workspace-configuration\n              '(:harper-ls (:linters (:SpellCheck :json-false\n                                      :SentenceCapitalization :json-false))))\n```\n\n## Additional Links\n\n- [Community discussion on configuring `harper-ls` for Emacs](https://github.com/Automattic/harper/discussions/150)\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/firefox-extension/+page.md",
    "content": "---\ntitle: The Harper Firefox Extension\n---\n\nHarper is available for the millions who rely on Firefox for fast, private, and independent browsing.\nUnlike most grammar tools, Harper's Firefox extension performs all analysis locally—never sending your text to the cloud.\nEmails, chat messages, blog posts, and comments benefit from real-time grammar improvements, with your privacy intact.\n\n![A screenshot of the Firefox extension in use.](/images/chrome_extension_github.png)\n\nTo install, head to the [Firefox Add-ons site](https://addons.mozilla.org/en-US/firefox/addon/private-grammar-checker-harper/) and select 'Add to Firefox'.\n\nCurious how it works? The Firefox extension runs entirely on [`harper.js`](/docs/harperjs/introduction), our open-source JavaScript library.\n\n## Updating the Extension\n\nWe're constantly improving our grammar engine and introducing new features to our Firefox Extension.\nTo get the best experience with Harper, make sure your installation is up-to-date.\n\nYour browser will automatically update the extension to the latest version as soon as it is available.\nIf it is delayed, you can initiate a manual update yourself by following [this guide](https://support.mozilla.org/en-US/kb/how-update-add-ons).\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/helix/+page.md",
    "content": "---\ntitle: Helix\n---\n\nOur Helix integration is powered by [`harper-ls`](./language-server).\n\n## Required Setup\n\nMake sure you have [`harper-ls` installed](./language-server#Installation) on your system and available in your `PATH`.\n\nHelix supports language servers [out-of-the-box](https://docs.helix-editor.com/languages.html), but you'll still need to configure it to use `harper-ls`. First, you need to tell Helix how it should run `harper-ls`:\n\n```toml title=languages.toml\n[language-server.harper-ls]\ncommand = \"harper-ls\"\nargs = [\"--stdio\"]\n```\n\nThen, for all the [languages `harper-ls` supports](./language-server#Supported-Languages) that you want it to be enabled for, you need to declare the following in your `languages.toml`:\n\n```toml title=languages.toml\n[[language]]\nname = \"language-id\"\nlanguage-servers = [\"default-servers\", \"harper-ls\"]\n```\n\nwhere `language-id` is the language ID of the language you want `harper-ls` to be used for and `default-servers` are any of the [default language servers](https://docs.helix-editor.com/lang-support.html) supported by Helix that you use for that language. For example, if you want to configure it for Markdown and you use both Marksman and Markdown-Oxide, you'd end up with this:\n\n```toml title=languages.toml\n[[language]]\nname = \"markdown\"\nlanguage-servers = [\"marksman\", \"markdown-oxide\", \"harper-ls\"]\n```\n\nYou need to include the default language servers since there currently isn't a way to append a language server to the default `language-servers` list. Of course, you can also add other language servers you use before or after `harper-ls`.\n\n## Optional Configuration\n\nAdditionally, you can also configure things like which linters to use or how you want code actions to appear. Below is an example config where everything is set to their default values:\n\n```toml title=languages.toml\n[language-server.harper-ls.config.harper-ls]\nuserDictPath = \"\"\nworkspaceDictPath = \"\"\nfileDictPath = \"\"\ndiagnosticSeverity = \"hint\"\nisolateEnglish = false\ndialect = \"American\"\nmaxFileLength = 120000\nignoredLintsPath = \"\"\nexcludePatterns = []\n\n[language-server.harper-ls.config.harper-ls.linters]\nSpellCheck = true\nSpelledNumbers = false\nAnA = true\nSentenceCapitalization = true\nUnclosedQuotes = true\nWrongQuotes = false\nLongSentences = true\nRepeatedWords = true\nSpaces = true\nMatcher = true\nCorrectNumberSuffix = true\n\n[language-server.harper-ls.config.harper-ls.codeActions]\nForceStable = false\n\n[language-server.harper-ls.config.harper-ls.markdown]\nIgnoreLinkTitle = false\n```\n\n:::note\nThis example only contains some of the available linters, check out our [rules page](../rules) to view the full list.\n:::\n\nFor more information on what each of these configs do, you can head over to the [configuration section](./language-server#Configuration) of our `harper-ls` documentation.\n\n## Common Config Changes\n\nProgrammers often find certain rules have too much of a hair-trigger.\nThe below config is a simple cut-and-paste that gives you much fewer false-positives.\n\n```toml title=languages.toml\n[language-server.harper-ls.config.harper-ls.linters]\nSpellCheck = false\nSentenceCapitalization = false\n```\n\n## Additional Links\n\n- [Helix's official documentation on `harper-ls`](https://github.com/helix-editor/helix/wiki/Language-Server-Configurations#harper-ls)\n- [Community discussion on configuring `harper-ls` for Helix](https://github.com/Automattic/harper/discussions/135)\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/language-server/+page.md",
    "content": "---\ntitle: Language Server\n---\n\n`harper-ls` is the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) frontend for Harper.\nOut of the box, it has built-in support for parsing the comments of most programming languages, as well as any and all Markdown files.\n\n## Installation\n\n### Scoop\n\nYou can install Harper on Windows through [Scoop](https://scoop.sh/#/apps?q=harper).\n\n```bash\nscoop install harper\n```\n\n### Homebrew\n\nYou can install Harper on macOS and Linux through [Homebrew](https://formulae.brew.sh/formula/harper).\n\n```bash\nbrew install harper\n```\n\n### Arch Linux\n\n#### Stable Release\n\nThe latest stable release is available through the [`extra` repo](https://archlinux.org/packages/extra/x86_64/harper):\n\n```bash\nsudo pacman -S harper\n```\n\n#### Bleeding-Edge\n\nIf you want the latest bleeding-edge, you can install `harper-git` from the [Arch User Repository](https://aur.archlinux.org/packages/harper-git) with your favorite AUR helper:\n\n```bash\nparu -S harper-git\n# or yay -S harper-git, etc.\n```\n\n### Nixpkgs/NixOS\n\nYou may install Harper via\n[Nixpkgs](https://search.nixos.org/packages?channel=unstable&show=harper&from=0&size=50&sort=relevance&type=packages&query=harper).\nYou can install the `harper` package via any of the normal methods such as\nadding it to `environment.systemPackages`. You can try Harper within an\nephemeral shell using:\n\n```bash\nnix-shell -p harper\n```\n\nor if you have the `nix-command` and `flakes` experimental features enabled:\n\n```bash\nnix shell 'nixpkgs#harper'\n```\n\n### Cargo\n\nIf you have Rust installed, `harper-ls` is on [crates.io](https://crates.io/crates/harper-ls), so you can simply run:\n\n```bash\ncargo install harper-ls --locked\n```\n\nFor this to work, make sure that `~/.cargo/bin` is in your system `$PATH`. If you are on a Debian-based Linux distribution, you may need to install `build-essential`.\n\n### GitHub Releases\n\nIf none of the previous installation methods are available to you, we also provide [portable pre-built binaries on GitHub](https://github.com/Automattic/harper/releases).\n\n## Dictionaries\n\n`harper-ls` has four kinds of dictionaries: user, workspace, file-local, and static dictionaries. All four dictionaries are combined and used together when spell checking files.\n\n### User Dictionary\n\nEach user of `harper-ls` has their own dictionary, created on-demand the first time that a word is added to it, which by default, is located at the following paths on each operating system:\n\n| Operating System |                                                                                Location |\n| :--------------- | --------------------------------------------------------------------------------------: |\n| Linux            | `$XDG_CONFIG_HOME/harper-ls/dictionary.txt` or `$HOME/.config/harper-ls/dictionary.txt` |\n| macOS            |                            `$HOME/Library/Application Support/harper-ls/dictionary.txt` |\n| Windows          |                                    `%FOLDERID_RoamingAppData%/harper-ls/dictionary.txt` |\n\nThis dictionary is a simple line-separated word list in plaintext. You can add and remove words at will. Code actions on misspelled words allow you to add elements to this list. Additionally, [its location is configurable](#Directories).\n\n### Workspace Dictionary\n\nEach workspace in which you use `harper-ls` has its own dictionary, which by default is located at `.harper-dictionary.txt` in the root of the workspace.\n\nThis dictionary is a simple line-separated word list in plaintext. You can add and remove words at will. Code actions on misspelled words allow you to add elements to this list. Additionally, [its location is configurable](#Directories).\n\n### File-Local Dictionary\n\nSometimes, you'll encounter a word (or name) that is only valid within the context of a specific file. In this case, you can add this file-specific word to a file-local dictionary using code actions. Any words added to this dictionary will only be included in the combined dictionary when spell checking a file at that specific path.\n\nYou can find the file-local dictionaries in the following directories by default on each operation system:\n\n| Operating System |                                                                                         Location |\n| :--------------- | -----------------------------------------------------------------------------------------------: |\n| Linux            | `$XDG_DATA_HOME/harper-ls/file_dictionaries` or `$HOME/.local/share/harper-ls/file_dictionaries` |\n| macOS            |                                  `$HOME/Library/Application Support/harper-ls/file_dictionaries` |\n| Windows          |                                            `%FOLDERID_LocalAppData%/harper-ls/file_dictionaries` |\n\nThe format of these files is identical to user dictionaries and [their location can also be configured](#Directories).\n\n### Static Dictionary\n\nThe static dictionary is built into the binary and is (as of now) immutable. It contains almost all words you could possibly encounter.\n\nWe _do_ take pull requests or issues for adding words to the static dictionary. [Read the documentation on the matter before you do](../contributors/dictionary).\n\n## Code Actions\n\n`harper-ls` has code actions that help in quickly dealing with spelling or grammar errors you encounter. The examples below assume that you have misspelled \"contained\" as \"containes\" and have selected it to apply a code action to it.\n\n| Code Action or Command | Description                                                | Example                                        |\n| ---------------------- | ---------------------------------------------------------- | ---------------------------------------------- |\n| Quick Fixes            | Suggests fixes for the selected error                      | `Replace with: \"contained\"`                    |\n| `HarperIgnoreLint`     | Ignores the selected error for the duration of the session | `Ignore Harper error.`                         |\n| `HarperAddToUserDict`  | Adds the selected word to the user dictionary              | `Add \"containes\" to the user dictionary.`      |\n| `HarperAddToWSDict`    | Adds the selected word to the workspace dictionary         | `Add \"containes\" to the workspace dictionary.` |\n| `HarperAddToFileDict`  | Adds the selected word to a file-local dictionary          | `Add \"containes\" to the file dictionary.`      |\n\n## Ignore Comments\n\n`harper-ls` supports skipping comment blocks that contain any of following:\n\n- `harper:ignore`\n- `harper: ignore`\n- `spellcheck:ignore`\n- `spellcheck: ignore`\n- `spell-checker:ignore`\n- `spell-checker: ignore`\n- `spellchecker:ignore`\n- `spellchecker: ignore`\n\nYou may notice that the last four ignore comments are the same with some of CSpell's ignore comments. That is intentional in case users wish to use Harper and CSpell together.\n\nHere's an example of how these comments can be used:\n\n```js\n// harper:ignore this line will not be spellcheckd\nfunction sample() {\n\t// harper: ignore\n\t// This line and any other line after it\n\t// will also not be spellcheckd\n\n\t// including this this one\n}\n```\n\nIn the above example, \"spellcheckd\", \"this this\", and other spelling or grammar errors will not be flagged.\n\n## Configuration\n\n`harper-ls` expects a JSON object with a `harper-ls` key that contains your configs:\n\n```json\n{\n\t\"harper-ls\": {\n\t\t// Your config goes here...\n\t}\n}\n```\n\n### Directories\n\n| Config              | Type     | Default Value | Description                                                     |\n| ------------------- | -------- | ------------- | --------------------------------------------------------------- |\n| `userDictPath`      | `string` | `\"\"`          | Set the file path where the user dictionary is located          |\n| `workspaceDictPath` | `string` | `\"\"`          | Set the file path where the workspace dictionary is located     |\n| `fileDictPath`      | `string` | `\"\"`          | Set the directory where the file-local dictionaries are located |\n| `ignoredLintsPath`  | `string` | `\"\"`          | Set the directory where the ignored lint lists are located      |\n\nThese paths are always resolved relative to the root of the workspace in which `harper-ls` was invoked.\n\n### Linters\n\nThese configs are under the `linters` key:\n\n```json\n{\n\t\"harper-ls\": {\n\t\t\"linters\": {\n\t\t\t// Your linter configs go here...\n\t\t}\n\t}\n}\n```\n\nThe list of linters together with their descriptions can be found at our [rules page](../rules). All linters are of `boolean` type. Here's an example config with some of them and their default values:\n\n```json\n{\n\t\"harper-ls\": {\n\t\t\"linters\": {\n\t\t\t\"SpellCheck\": true,\n\t\t\t\"SpelledNumbers\": false,\n\t\t\t\"AnA\": true,\n\t\t\t\"SentenceCapitalization\": true,\n\t\t\t\"UnclosedQuotes\": true,\n\t\t\t\"WrongQuotes\": false,\n\t\t\t\"LongSentences\": true,\n\t\t\t\"RepeatedWords\": true,\n\t\t\t\"Spaces\": true,\n\t\t\t\"Matcher\": true,\n\t\t\t\"CorrectNumberSuffix\": true\n\t\t}\n\t}\n}\n```\n\n### Code Actions\n\nThese configs are under the `codeActions` key:\n\n```json\n{\n\t\"harper-ls\": {\n\t\t\"codeActions\": {\n\t\t\t// Your code action configs go here...\n\t\t}\n\t}\n}\n```\n\n| Config        | Type      | Default Value | Description                                                                                                                                                    |\n| ------------- | --------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `ForceStable` | `boolean` | `false`       | Make code actions appear in \"stable\" positions by placing code actions that should always be available, like adding misspelled words in the dictionary, first. |\n\n### Markdown\n\nThese configs are under the `markdown` key:\n\n```json\n{\n\t\"harper-ls\": {\n\t\t\"markdown\": {\n\t\t\t// Your Markdown configs go here...\n\t\t}\n\t}\n}\n```\n\n| Config            | Type      | Default Value | Description              |\n| ----------------- | --------- | ------------- | ------------------------ |\n| `IgnoreLinkTitle` | `boolean` | `false`       | Skip linting link titles |\n\n### Other Configs\n\n| Config               | Type                                                                | Default Value | Description                                                                                                                                                               |\n| -------------------- | ------------------------------------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `diagnosticSeverity` | `\"error\"`, `\"hint\"`, `\"information\"`, `\"warning\"`                   | `\"hint\"`      | Configures how severe diagnostics appear in your editor                                                                                                                   |\n| `isolateEnglish`     | `boolean`                                                           | `false`       | In documents that are a mixture of English and another language, only lint English text. This feature is incredibly new and unstable. Do not expect it to work perfectly. |\n| `dialect`            | `\"American\"`, `\"British\"`, `\"Australian\"`, `\"Canadian\"`, `\"Indian\"` | `\"American\"`  | Set the dialect of English Harper should expect.                                                                                                                          |\n| `maxFileLength`      | `number`                                                            | `120000`      | Maximum length of file to be linted (in bytes). If a file is larger/longer than this, it will not be linted.                                                              |\n| `excludePatterns`    | `array`                                                             | `[]`          | A set of globs to ignore. If a file matches any of the globs, it will not be linted.                                                                                      |\n\n## Supported Languages\n\n`harper-ls` supports a wide variety of programming and markup languages.\n\n| Language            |          Language ID          | Comments Only |\n| :------------------ | :---------------------------: | ------------: |\n| AsciiDoc            |          `asciidoc`           |               |\n| C                   |              `c`              |            ✅ |\n| Clojure             |           `clojure`           |            ✅ |\n| CMake               |            `cmake`            |            ✅ |\n| C++                 |             `cpp`             |            ✅ |\n| C#                  |           `csharp`            |            ✅ |\n| DAML                |            `daml`             |            ✅ |\n| Dart                |            `dart`             |            ✅ |\n| Git Commit          |   `git-commit`/`gitcommit`    |               |\n| Go                  |             `go`              |            ✅ |\n| Groovy              |           `groovy`            |            ✅ |\n| Haskell             |           `haskell`           |            ✅ |\n| HTML                |            `html`             |               |\n| Ink                 |             `ink`             |               |\n| Java                |            `java`             |            ✅ |\n| JavaScript          |         `javascript`          |            ✅ |\n| JavaScript React    |       `javascriptreact`       |            ✅ |\n| Jujutsu Description |  `jj-commit`/`jjdescription`  |               |\n| Kotlin              |           `kotlin`            |            ✅ |\n| Literate Haskell    | `lhaskell`/`literate haskell` |               |\n| Lua                 |             `lua`             |            ✅ |\n| Email               |            `mail`             |               |\n| Markdown            |          `markdown`           |               |\n| Nix                 |             `nix`             |            ✅ |\n| Org Mode            |             `org`             |               |\n| PHP                 |             `php`             |            ✅ |\n| PowerShell          |         `powershell`          |            ✅ |\n| Plain Text          |      `plaintext`/`text`       |               |\n| Python              |           `python`            |            ✅ |\n| Ruby                |            `ruby`             |            ✅ |\n| Rust                |            `rust`             |            ✅ |\n| Scala               |            `scala`            |            ✅ |\n| Shell/Bash Script   |         `shellscript`         |            ✅ |\n| Solidity            |          `solidity`           |            ✅ |\n| Swift               |            `swift`            |            ✅ |\n| TOML                |            `toml`             |            ✅ |\n| TypeScript          |         `typescript`          |            ✅ |\n| TypeScript React    |       `typescriptreact`       |            ✅ |\n| Typst               |            `typst`            |               |\n| Zig                 |             `zig`             |            ✅ |\n| LaTeX/TeX           | `latex`/`tex`/`plaintex`      |               |\n\nWant your language added?\nLet us know by [commenting on this issue](https://github.com/Automattic/harper/issues/79).\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/neovim/+page.md",
    "content": "---\ntitle: Neovim\n---\n\nOur Neovim integration is powered by [`harper-ls`](./language-server).\n\n## Required Setup\n\nMake sure you have `harper-ls` installed and available on your global or Neovim's `PATH`. You can do this using [`mason.nvim`](https://mason-registry.dev/registry/list?search=harper-ls) or via any of our other [supported installation methods](./language-server#Installation).\n\nThough Neovim supports language servers [out-of-the-box](https://neovim.io/doc/user/lsp.html), for ease of use, we suggest using `harper-ls` through [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig).\n\nOnce you have `harper-ls` and nvim-lspconfig installed, you need to add this to your `init.lua`:\n\n```lua title=init.lua\nrequire('lspconfig').harper_ls.setup {}\n```\n\n## Optional Configuration\n\nAdditionally, you can also configure things like which linters to use or how you want code actions to appear. Below is an example config where everything is set to their default values:\n\n```lua title=init.lua\nrequire('lspconfig').harper_ls.setup {\n  settings = {\n    [\"harper-ls\"] = {\n      userDictPath = \"\",\n      workspaceDictPath = \"\",\n      fileDictPath = \"\",\n      linters = {\n        SpellCheck = true,\n        SpelledNumbers = false,\n        AnA = true,\n        SentenceCapitalization = true,\n        UnclosedQuotes = true,\n        WrongQuotes = false,\n        LongSentences = true,\n        RepeatedWords = true,\n        Spaces = true,\n        Matcher = true,\n        CorrectNumberSuffix = true\n      },\n      codeActions = {\n        ForceStable = false\n      },\n      markdown = {\n        IgnoreLinkTitle = false\n      },\n      diagnosticSeverity = \"hint\",\n      isolateEnglish = false,\n      dialect = \"American\",\n      maxFileLength = 120000,\n      ignoredLintsPath = \"\",\n      excludePatterns = {}\n    }\n  }\n}\n```\n\n:::note\nThis example only contains some of the available linters, check out our [rules page](../rules) to view the full list.\n:::\n\nFor more information on what each of these configs do, you can head over to the [configuration section](./language-server#Configuration) of our `harper-ls` documentation.\n\n## Common Config Changes\n\nProgrammers often find certain rules have too much of a hair-trigger.\nThe below config is a simple cut-and-paste that gives you much fewer false-positives.\n\n```lua title=init.lua\nrequire('lspconfig').harper_ls.setup {\n  settings = {\n    [\"harper-ls\"] = {\n      linters = {\n        SentenceCapitalization = false,\n        SpellCheck = false\n      }\n    }\n  }\n}\n```\n\n## Additional Links\n\n- [nvim-lspconfig's documentation on `harper-ls`](https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#harper_ls)\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/obsidian/+page.md",
    "content": "---\ntitle: Harper for Obsidian\n---\n\nPut simply, [Harper](https://writewithharper.com/) is a grammar checking plugin that doesn't violate your privacy.\nOther systems, like LanguageTool, ship your writing over the internet to centralized servers, where it's used for god-knows-what.\nHarper isn't like that.\n\nInstead, Harper runs its grammar checking engine directly _inside Obsidian_.\nThat means your data doesn't go anywhere you don't want it to.\nYour Obsidian vault should be just what you expect: locked down and private.\n\n![A screenshot of Obsidian with Harper installed](/images/obsidian_screenshot.webp)\n\nUnlike other offerings (like Grammarly) Harper also explicitly ignores the contents of code fences and inline code blocks.\nSince it runs entirely on-device, Harper also ends up being noticeably faster than alternatives, partly because there is no network latency.\n\n### Open Source\n\n- Harper is fully open source, allowing transparency and community contributions to improve its functionality.\n- Developers can review the codebase or contribute directly via the [GitHub repository](https://github.com/automattic/harper).\n\n## How It Compares to Other Plugins\n\n| Feature                | Harper                        | LanguageTool                      |\n| ---------------------- | ----------------------------- | --------------------------------- |\n| **Privacy**            | 100% offline                  | Requires self-hosting for privacy |\n| **Real-Time Checking** | Yes                           | Yes                               |\n| **Language Support**   | English (extensible) | 30+ languages                     |\n| **Open Source**        | Yes                           | Partially                         |\n| **Ease of Use**        | Simple setup                  | Requires API/self-hosting setup   |\n| **Performance**        | Fast and lightweight          | Resource-intensive                |\n\n## Installation Guide\n\n1. Open Obsidian and navigate to **Settings → Community Plugins → Browse**.\n2. Search for \"Harper\" in the plugin library.\n3. Click \"Install\" and then \"Enable.\"\n4. Start typing in your notes—Harper will automatically highlight errors as you go!\n\n> **Warning**\n> Harper expects an up-to-date version of the Obsidian installer. If you have issues, [reinstall Obsidian](https://obsidian.md/download) or otherwise update your installer version.\n\n## Where's all the code?\n\nAll the code for the Harper Obsidian plugin lives [in the main Harper monorepo](https://github.com/automattic/harper/tree/master/packages/obsidian-plugin).\nThis repository exists to satisfy the [requirements](https://docs.obsidian.md/Plugins/Releasing/Submit+your+plugin) laid out by the Obsidian team for their plugins.\n\n## I have a problem or feature request...\n\nLet me know if you have any problems, feature requests, or feedback of any kind by filling out an [issue on the main repository](https://github.com/automattic/harper/issues/new).\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/sublime-text/+page.md",
    "content": "---\ntitle: Sublime Text\n---\n\nOur [Sublime Text](https://www.sublimetext.com/) integration is powered by [`harper-ls`](./language-server).\n\n## Required Setup\n\nMake sure you have `harper-ls` installed and available on your global or Sublime Text's `PATH`. You can do this using the [supported installation methods](./language-server#Installation).\n\nEnsure you have [LSP for Sublime Text](https://lsp.sublimetext.io/) installed.\n\n## Optional Configuration\n\nOpen `Preferences > Package Settings > LSP > Settings` and add the `harper-ls` client configuration to the \"clients\" section:\n\n```json title=LSP.sublime-settings\n{\n  \"clients\": {\n    \"harper-ls\": {\n      \"enabled\": true,\n      \"command\": [\n        \"harper-ls\",\n        \"--stdio\"\n      ],\n      \"selector\": \"source.markdown | text.html.markdown | text.plain\",\n      \"settings\": {\n        \"harper-ls\": {\n          \"userDictPath\": \"\",\n          \"workspaceDictPath\": \"\",\n          \"fileDictPath\": \"\",\n          \"linters\": {\n            \"SpellCheck\": true,\n            \"SpelledNumbers\": false,\n            \"AnA\": true,\n            \"SentenceCapitalization\": true,\n            \"UnclosedQuotes\": true,\n            \"WrongQuotes\": false,\n            \"LongSentences\": true,\n            \"RepeatedWords\": true,\n            \"Spaces\": true,\n            \"Matcher\": true,\n            \"CorrectNumberSuffix\": true\n          },\n          \"codeActions\": {\n            \"ForceStable\": false\n          },\n          \"markdown\": {\n            \"IgnoreLinkTitle\": false\n          },\n          \"diagnosticSeverity\": \"hint\",\n          \"isolateEnglish\": false,\n          \"dialect\": \"American\",\n          \"maxFileLength\": 120000,\n          \"ignoredLintsPath\": \"\",\n          \"excludePatterns\": []\n        }\n      }\n    }\n  }\n}\n```\n\nFor more information on what each of these configs do, you can head over to the [configuration section](./language-server#Configuration) of our `harper-ls` documentation.\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/visual-studio-code/+page.md",
    "content": "---\ntitle: Visual Studio Code\n---\n\nFor our Visual Studio Code integration, we provide an extension powered by [`harper-ls`](./language-server), which also works for VS Code forks like VSCodium and Windsurf. It's available in the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=elijah-potter.harper) as well as the [Open VSX Registry](https://open-vsx.org/extension/elijah-potter/harper).\n\n## Installation\n\nOpen the Extensions view in your editor by selecting the Extensions icon in the Activity Bar or by using the `Ctrl+Shift+X` keyboard shortcut, then search for \"Harper\" and click \"Install\".\n\nIf you prefer to use the command line, you can use the following command:\n\n```bash\ncode --install-extension elijah-potter.harper\n```\n\n## Commands\n\n| Command                         | ID                              | Description          |\n| ------------------------------- | ------------------------------- | -------------------- |\n| Harper: Restart Language Server | `harper.languageserver.restart` | Restarts `harper-ls` |\n\n## Settings\n\nThe settings below are VS Code specific. There are other settings that `harper-ls` supports such as which linters to use or how code actions should appear that you can configure. You can view them in your editor's Settings UI under \"Harper\" or peruse through them in the [configuration section](./language-server#Configuration) of our `harper-ls` documentation.\n\n| Setting       | Type     | Default Value | Description                                                                                                                                                 |\n| ------------- | -------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `harper.path` | `string` | `\"\"`          | Optional path to a `harper-ls` executable to use. Primarily useful if the bundled binary doesn't work in your system like in immutable Linux distributions. |\n\n## Other Features\n\nSince the extension is powered by `harper-ls`, it also supports [dictionaries](./language-server#Dictionaries), [code actions](./language-server#Code-Actions), and [ignore comments](./language-server#Ignore-Comments).\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/wordpress/+page.md",
    "content": "---\ntitle: Harper for WordPress\n---\n\n<script>\n    import {Button} from \"components\"\n</script>\n\nHarper still works great with WordPress, but the recommended way to use it today is the\n[Chrome extension](https://chromewebstore.google.com/detail/private-grammar-checking/lodbfhdipoipcjmlebjbgmmgekckhpfb).<br/>\nRead the announcement: [The Chrome Extension Supersedes the WordPress Plugin](https://elijahpotter.dev/articles/the_chrome_extension_supersedes_the_wordpress_plugin).\n\nThe extension is faster to iterate on than the WordPress.com plugin review process, which means you get new\nfeatures and fixes right away. It also offers a more holistic experience by keeping your Harper preferences in\nsync across the sites where you write.\n\n![A screenshot of the Harper WordPress Demo](/images/harper_wp_playground_screenshot.png)\n\n<Button href='https://chromewebstore.google.com/detail/private-grammar-checking/lodbfhdipoipcjmlebjbgmmgekckhpfb' target=\"_blank\">Install the Chrome Extension</Button>\n\nWant to explore the classic workflow? Visit our online demo that runs inside the WordPress Playground.\n\n<Button href='/wpdemo' target=\"_blank\">Go to the Demo</Button>\n\n## Still using the plugin?\n\nThe existing Harper WordPress plugin will stick around, but it no longer receives regular updates and is already a\nfew months behind the Chrome extension. If you need a manual copy, you can still download `harper.zip` from\n[GitHub releases](https://github.com/Automattic/harper/releases/latest) and upload it to your site.\n"
  },
  {
    "path": "packages/web/src/routes/docs/integrations/zed/+page.md",
    "content": "---\ntitle: Zed\n---\n\nFor our Zed integration, we have an [extension](https://github.com/zed-extensions/harper) that automatically downloads and runs [`harper-ls`](./language-server). For more information on how to install it and how it works, you can head over to the [extension's README](https://github.com/zed-extensions/harper/blob/main/README.md).\n"
  },
  {
    "path": "packages/web/src/routes/docs/rules/+page.svelte",
    "content": "<script module lang=\"ts\">\nimport {\n\tTable,\n\tTableBody,\n\tTableBodyCell,\n\tTableBodyRow,\n\tTableHead,\n\tTableHeadCell,\n} from 'components';\nimport { binary, type LintConfig, LocalLinter } from 'harper.js';\n\nexport const frontmatter = {\n\ttitle: 'Rules',\n};\n\nlet descriptions: Record<string, string> = $state({});\nlet default_config: LintConfig = $state({});\n\nlet linter = new LocalLinter({ binary });\nlinter.getLintDescriptionsHTML().then(async (v) => {\n\tdescriptions = v;\n});\nlinter.getDefaultLintConfig().then(async (v) => {\n\tdefault_config = v;\n});\n</script>\n\n<p>This page is an incomplete list of the various grammatical rules Harper checks for.</p>\n\n<Table>\n\t<TableHead>\n\t\t<TableHeadCell>Name</TableHeadCell>\n\t\t<TableHeadCell>Enabled by Default</TableHeadCell>\n\t\t<TableHeadCell>Description</TableHeadCell>\n\t</TableHead>\n\t<TableBody>\n\t\t{#each Object.entries(descriptions) as [name, description]}\n\t\t\t<TableBodyRow>\n\t\t\t\t<TableBodyCell>{name}</TableBodyCell>\n\t\t\t\t<TableBodyCell>{default_config[name] ? '✔️' : '❌'}</TableBodyCell>\n\t\t\t\t<TableBodyCell tdClass=\"px-6 py-4 font-medium\">{@html description.replaceAll('<p>', \"\").replaceAll('<p />', \"\")}</TableBodyCell>\n\t\t\t</TableBodyRow>\n\t\t{/each}\n\t</TableBody>\n</Table>\n"
  },
  {
    "path": "packages/web/src/routes/docs/weir/+page.md",
    "content": "# The Weir Language\n\nMost large organizations have a style guide.\nA document that decides which versions of a linguistic rule to use.\nThat could be whether to use the Oxford comma, or if contractions are allowed.\nIt could declare that a certain word should be capitalized in a specific context.\n\nHarper can cover *most* of the rules in *most* style guides, but there will always be outliers that we can't support (or simply don't know about).\nThat is why it is critical that Harper allow individuals and organizations to define rules and conventions for Harper to enforce.\n\nTry the in-browser [Weir studio](/weir/studio) to experiment with rules and tests.\n\n## Introducing Weir\n\nThe heart of Weir is an expression language that mimics the pseudocode Harper contributors tend to use when describing the Rust code they intend to write.\n\nImagine you work at Google. You've just rebranded the \"G Suite\" collection of apps and services to the new name \"Google Workspace\".\nBefore that, they were collectively named \"Google Apps for Work\".\nMoving forward, you don't want you or your coworkers to accidentally write \"G Suite\" on public documentation, because doing so might confuse users.\nTo solve this, you use the following Weir rule:\n\n```plaintext\nexpr main [(G [Suite, Suit]), (Google Apps for Work)]\n\nlet message \"Use the updated brand.\"\nlet description \"`G Suite` or `Google Apps for Work` is now called `Google Workspace`\"\nlet kind \"Miscellaneous\"\nlet becomes \"Google Workspace\"\n```\n\nThe first line describes the pattern of the problematic text.\nThere are two cases here:\n\n1. The letter \"G\" followed by \"Suite\" or its misspelling \"Suit\"\n1. The literal phrase \"Google Apps for Work\"\n\nHere is a semantically equivalent example that you may find a bit easier to read:\n\n```plaintext\n [(G Suite), (G Suit), (Google Apps for Work)]\n```\n\nThe remaining lines describe:\n\n1. The message to be shown to the user when the error in encountered.\n1. A description of the rule itself, explaining why it exists.\n1. What kind of rule it is. \n1. What corrections to provide to the user.\n\n## Comments\n\nComments are written using a single pound sign (`#`), like so:\n\n```plaintext\n# This is a comment and has no effect on the rest of the file.\n [(G Suite), (G Suit), (Google Apps for Work)]\n```\n\n## The Various Kinds of Expressions\n\nAs previously stated, Weir's expression language is the heart of the system.\nThere are a few key bits of notation you should know when writing a rule.\n\n### Words\n\nA word is the simplest kind of expression.\nIt is exactly what it sounds like: if a document contains a specific word, it will match.\nNote that these matches are case-insensitive.\n\nHere's an example:\n\n```plaintext\nexpr main teh\n\nlet message \"Did you mean the definite article?\"\nlet description \"Fixes especially common misspellings of the word `the`\"\nlet kind \"Typo\"\nlet becomes \"the\"\n\ntest \"I adore teh light of the moon.\" \"I adore the light of the moon.\"\ntest \"I adore TEH LIGHT OF THE MOON.\" \"I adore THE LIGHT OF THE MOON.\"\n```\n\nWhen Harper encounters the literal word \"teh\", it will correct it directly to \"the\".\nWe'll get to the test notation later in this document.\n\n### Sequences\n\nA sequence, notated with round braces `()`, is exactly what it sounds like.\nIt is a sequence of other expressions. \nIn order for a portion of a document to match against a sequence, all child expressions must match, in the sequence they are declared.\n\nIt's common to see expressions that string words together in a sequence to match against specific phrases.\n\n```plaintext\nexpr main (gong to)\n\nlet message \"Did you mean `going to`?\"\nlet description \"Corrects `gong to` to the intended phrase `going to`.\"\nlet kind \"Typo\"\nlet becomes \"going to\"\n```\n\nIf the above rule is enabled, when Harper encounters the words `gong` and `to`, separated by whitespace, Harper will replace them with \"going to\".\nThe top-level expression assumed to be a sequence, so the first line can be replaced with this without changing the rule's behavior:\n\n```plaintext\nexpr main gong to\n```\n\n### Alternatives\n\nAlternatives in Weir, notated with `[]`, allow Harper to search for multiple potential options at a time.\nFor a document to match, it only needs to fulfill one of the options in the alternative array.\n\nThis syntax should look familiar from the first example we looked at in the introduction.\nWe have multiple specific phrases we want to look for, and change all of them, should they exist, to the same thing.\n\n```plaintext\nexpr main [(low hanging fruit), (low hanging fruits), (low-hanging fruits)]\n\nlet message \"The standard form is `low-hanging fruit` with a hyphen and singular form.\"\nlet description \"Corrects nonstandard variants of `low-hanging fruit`.\"\nlet kind \"Usage\"\nlet becomes \"low-hanging fruit\"\n```\n\nImportantly, we can refactor this into just two sequences, by moving the arrays further into the expression.\n\n```plaintext\nexpr main [(low[-, ( )]hanging fruits), (low hanging fruit)]\n```\n\n### Filters\n\nFilters in Weir allow you to locate an expression, then narrow down the search to a shorter segment of that same expression.\nThis can be done as many times as you like.\nThe example below uses the filter syntax (the `<>`) to first select the broader phrase, then another to select the whitespace in between (that's the `( )` part).\n\n```plaintext\nexpr main <([right, middle, left] $click), ( )>\nlet message \"Hyphenate this mouse command\"\nlet description \"Hyphenates right-click style mouse commands.\"\nlet kind \"Punctuation\"\nlet becomes \"-\"\n\ntest \"Right click the icon.\" \"Right-click the icon.\"\ntest \"Please right click on the link.\" \"Please right-click on the link.\"\ntest \"They right clicked the submit button.\" \"They right-clicked the submit button.\"\ntest \"Right clicking the item highlights it.\" \"Right-clicking the item highlights it.\"\ntest \"Right clicks are tracked in the log.\" \"Right-clicks are tracked in the log.\"\ntest \"He RIGHT CLICKED the file.\" \"He RIGHT-CLICKED the file.\"\ntest \"Left click the checkbox.\" \"Left-click the checkbox.\"\ntest \"Middle click to open in a new tab.\" \"Middle-click to open in a new tab.\"\n```\n\nThis is extremely useful for identifying exceptions to a rule, since you can include the exceptions in the first layer of the filter, then slowly become more specific.\n\nSee the testing section of this document for a more detailed description of the `test` syntax.\n\n### UPOS\n\nWeir allows you to require that certain words assume a specific role in the sentence by writing the [Universal Part-Of-Speech tag](https://universaldependencies.org/u/pos/index.html), literally, in the position you wish to require it..\nFor example, if you wanted to locate phrases that start with a determiner and are succeeded by a noun, you can write:\n\n```plaintext\nexpr main DET NOUN\n```\n\nThis will match against \"the word\", \"a banana\", \"an apple\", among others.\n\n### Progressive Verbs\n\nYou can require that a token be a progressive verb with the keyword PROG.\nFor example:\n\n```plaintext\nexpr main PROG\n```\n\n### Exceptions\n\nYou can add exceptions to expressions by throwing an exclamation mark in front of any other expression.\nThis is useful for excluding certain contexts from a match.\nFor example, if we wanted to locate all determiners when they are not followed by a noun, we can do this:\n\n```\nexpr main DET !NOUN\n```\n\nSimilarly, we can do the same with arrays or sequences of words:\n\n```\nexpr main DET ![break, braking]\n```\n\n### Wildcards\n\nIf you need to allow a token between two others, or otherwise want to include an unknown and unrestricted token in the expression, you can use a wildcard.\nAlthough they look like the single-character wildcard from regex (Weir borrows the `*` syntax), Weir wildcards match over entire tokens, including words, punctuation, and whitespace.\n\nExample:\n\n```plaintext\n# To match any token that is preceded by a noun and succeeded by a noun.\nexpr main NOUN * NOUN\n```\n\n### Punctuation\n\nAny punctuation that does not otherwise hold semantic meaning in Weir (like wildcards, etc.) is an expression that matches itself.\nThat means you can match a period with `.` or a question mark with `?`.\n\n```\n# Looks for all doubled hyphens.\nexpr main --\n\nlet message \"The second mark is redundant.\"\nlet description \"Looks for redundant doubling of hyphens.\"\nlet kind \"Punctuation\"\nlet becomes \"-\"\n```\n\n### Expression References\n\nYou can refer back to a previous expression you've defined using the `@` symbol.\nThis is useful for creating lists of words or patterns that might be used in multiple places in the rule.\n\n```\nexpr vehicles [bikes, trains, automobiles]\nexpr main @vehicles aren't fast enough\n```\n\n## Replacement Strategies\n\nYou can dictate how Harper will suggest a replacement using the `strategy` tag.\nThis allows rule authors to describe which strategy Harper will use when applying the replacements.\nRight now, the only two options are `Exact` or `MatchCase`, which apply either the exact text, or the exact text but matching the capitalization of the text it replaces.\nIn the below example, we use `Exact` because we want to correct the capitalization of a proper noun, and it doesn't matter what the original text looked like.\n\n```plaintext\nexpr main [(G [Suite, Suit]), (Google Apps for Work)]\nlet message \"Use the updated brand.\"\nlet description \"`G Suite` or `Google Apps for Work` is now called `Google Workspace`\"\nlet kind \"Miscellaneous\"\nlet becomes \"Google Workspace\"\nlet strategy \"Exact\"\n```\n\n## Adding Tests\n\nThe Weir language supports the inclusion of tests directly in the file.\nYou can imagine these to be a lot like assertions.\nIt is a way of saying, \"I expect this rule to transform this text into this other text.\"\n\nIt is pretty much always a good idea to include tests, just to make sure your rule does what you expect.\n\nThe syntax is pretty simple:\n\n```plaintext\n# I expect A to become B\ntest \"A\" \"B\"\n```\n\nYou can also assert that the rule _will not_ change anything.\n\n```plaintext\n# I don't expect the rule to change anything\nallows \"A\"\n```\n\nIn the future, expect new types of tests to become available.\n\nIf you have `harper-cli` available, you can run the tests in a given Weir file by running `harper-cli test <path to the Weir file>`.\n\n## Weirpacks\n\nWeirpacks are zip archives of Weir rules meant for distribution. They use the `.weirpack` extension for clarity, but the contents are standard ZIP.\n\n### Layout\n\n- The archive root contains one or more `.weir` files.\n- Each rule name is the filename stem (for example, `TheirToThere.weir` becomes `TheirToThere`).\n- A `manifest.json` file is required at the root.\n\n### Manifest\n\nThe manifest is JSON. It must include the required fields below and may include any extra metadata you want.\n\nRequired fields:\n- `author`\n- `version`\n- `description`\n- `license`\n\nExample:\n\n```json\n{\n  \"author\": \"Ada Lovelace\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Rules for Victorian technical writing.\",\n  \"license\": \"MIT\",\n  \"keywords\": [\"victorian\", \"technical\", \"style\"],\n  \"website\": \"https://example.com\"\n}\n```\n\n### Loading\n\nIn `harper-cli`, use `--weirpack` to load one or more packs at lint time:\n\n```bash\nharper-cli lint --weirpack path/to/rules.weirpack README.md\n```\n\n## See Also:\n\n- [Building the Weir Language](https://elijahpotter.dev/articles/building-the-weir-language)\n- [Updates on the Weir Language](https://elijahpotter.dev/articles/updates-on-the-weir-language)\n\n## Additional Examples\n\n```plaintext\nexpr main (like as if)\n\nlet message \"Avoid redundancy. Use either `like` or `as if`.\"\nlet description \"Corrects redundant `like as if` to `like` or `as if`.\"\nlet becomes [\"like\", \"as if\"]\n\ntest \"And looks like as if linux-personality hasn't got any changes for 8 years.\" \"And looks as if linux-personality hasn't got any changes for 8 years.\"\n```\n\n```plaintext\nexpr main (w/o)\n\nlet message \"Use `without` instead of `w/o`\"\nlet description \"Expands the abbreviation `w/o` to the full word `without` for clarity.\"\nlet kind \"Style\"\nlet becomes \"without\"\n```\n"
  },
  {
    "path": "packages/web/src/routes/editor/+page.svelte",
    "content": "<script>\n/// This page exists to be embedded via an `iframe`.\n\nimport { page } from '$app/stores';\nimport Editor from '$lib/components/Editor.svelte';\nimport Isolate from '$lib/components/Isolate.svelte';\n\nlet content = $page.url.searchParams.get('initialText') ?? '';\n</script>\n\n<Isolate>\n\t<Editor {content}></Editor>\n</Isolate>\n"
  },
  {
    "path": "packages/web/src/routes/editor/+page.ts",
    "content": "export const ssr = false;\n"
  },
  {
    "path": "packages/web/src/routes/install-browser-extension/+page.svelte",
    "content": "<script lang=\"ts\">\nimport { Link, Textarea } from 'components';\n\nlet demoText =\n\t'Ths is an text box you can type in.\\n\\nany other site on the web will work the the same!';\n</script>\n\n<div class=\"fixed left-0 top-0 w-screen h-screen bg-white dark:bg-black z-1000\">\n  <div class=\"max-w-6xl mx-auto shadow-md border-gray-300 dark:border-x h-full overflow-y-auto\">\n    <section class=\"px-6 sm:px-10 py-16 sm:py-24\">\n      <h1 class=\"text-center font-bold text-primary text-4xl sm:text-6xl mb-6\">\n        Thanks for Installing Harper!\n      </h1>\n\n      <p class=\"text-center text-lg sm:text-xl mb-4 max-w-3xl mx-auto\">\n        Writing is hard. Writing well is harder. Now that Harper is available on most websites you visit, it should be a little easier.\n      </p>\n\n      <h2 class=\"text-center text-3xl mb-4 font-bold max-w-3xl mx-auto\">\n        Here's How It Works:\n      </h2>\n\n      <div class=\"w-full max-w-5xl mx-auto flex flex-col gap-4 mb-6\">\n        <div class=\"w-full p-4 sm:p-6 border rounded-xl shadow-md\">\n          <h3 class=\"font-bold text-xl sm:text-2xl text-center py-0 mb-2\">Launch Any Site</h3>\n          <p>Harper plugs right into the page of any site you visit.</p>\n        </div>\n        <div class=\"w-full p-4 sm:p-6 border rounded-xl shadow-md\">\n          <h3 class=\"font-bold text-xl sm:text-2xl text-center py-0 mb-2\">Type Naturally</h3>\n          <video\n            class=\"mt-3 w-full rounded-lg border border-gray-200\"\n            autoplay\n            muted\n            loop\n            playsinline\n            src=\"/videos/step-2.mp4\"\n          >\n            Your browser does not support embedded videos.\n          </video>\n        </div>\n        <div class=\"w-full p-4 sm:p-6 border rounded-xl shadow-md\">\n          <h3 class=\"font-bold text-xl sm:text-2xl text-center py-0 mb-2\">Review & Accept</h3>\n          <video\n            class=\"mt-3 w-full rounded-lg border border-gray-200\"\n            autoplay\n            muted\n            loop\n            playsinline\n            src=\"/videos/step-3.mp4\"\n          >\n            Your browser does not support embedded videos.\n          </video>\n        </div>\n      </div>\n\n\n      <h2 class=\"text-center text-3xl mb-4 font-bold max-w-3xl mx-auto\">\n        Give It a Whirl!\n      </h2>\n\n      <h3 class=\"text-center text-xl mb-4 max-w-xl mx-auto\">\n        It may take a moment for the engine to start...\n      </h3>\n\n      <div class=\"md:col-span-2 relative\">\n        <Textarea\n          rows={10}\n          bind:value={demoText}\n          class=\"w-full rounded-lg border border-base-300 focus:ring-4 focus:ring-primary/30 transition text-xl! dark:text-white\"\n        />\n      </div>\n\n\n      <h2 class=\"text-center text-3xl mb-4 font-bold max-w-3xl mx-auto\">\n        Nothing is Happening?\n      </h2>\n\n\n    <div class=\"flex flex-row\">\n      <p class=\"text-left text-lg sm:text-xl mb-4 max-w-3xl mx-auto\">\n        Harper will only enable itself automatically on sites we've tested before. \n        <br/>\n        <br/>\n        If you work somewhere that isn't on our list of supported sites, you can enable the extension anyway by opening the Harper extension popup and clicking the power button.\n        <br/>\n        <br/>\n        Alternatively, <Link href=\"/request-browser-support\">let us know</Link> which sites you want us to support and we'll add it as soon as we can.\n      </p>\n\n      <img\n        src=\"/images/chrome_extension_popup.png\"\n        alt=\"The Chrome extension’s popup page\"\n        class=\"max-w-full h-auto object-contain\"\n      />\n    </div>\n\n    </section>\n  </div>\n</div>\n"
  },
  {
    "path": "packages/web/src/routes/languagedetection/+page.svelte",
    "content": "<script lang=\"ts\">\nimport { Select, Textarea } from 'components';\nimport { binary, WorkerLinter } from 'harper.js';\nimport demoText from '../../../../../demo.md?raw';\n\nlet isEnglish: boolean | null = null;\nlet text = '';\nlet strippedText = '';\n\nlet linter = new WorkerLinter({ binary });\nlinter.setup();\n\n$: linter.isLikelyEnglish(text).then((v) => {\n\tisEnglish = v;\n});\n$: linter.isolateEnglish(text).then((t) => {\n\tstrippedText = t;\n});\n\n$: color = isEnglish == null ? '' : isEnglish ? 'bg-green-100' : 'bg-red-100';\n\nlet templates = [\n\t{\n\t\tname: 'Java Code',\n\t\tvalue: `public class Main {\n  public static void main(String[] args) {\n    System.out.println(\"Hello World\");\n  }\n}`,\n\t},\n\t{ name: 'Poor Grammar', value: demoText },\n\t{\n\t\tname: 'Chinese Lorem Ipsum',\n\t\tvalue:\n\t\t\t'食棵支每躲種。奶象打星爪子二細喜才記行在發像原斤！頁固點子衣點豆看身蝴看苗急午公何足，筆娘經色蝶行元香也要。麻了綠尼固世，色北書目登功；因告黑。',\n\t},\n\t{\n\t\tname: 'Spanish English Mix',\n\t\tvalue: 'En la mañana, como a dish de los huevos, un poquito of tocino, y a lot of leche.',\n\t},\n\t{\n\t\tname: 'Polish English Chunked',\n\t\tvalue: 'I have a simple motto in life: jeśli jesteś spragniony, napij się wody.',\n\t},\n];\n\nfunction selectChange(e: Event) {\n\ttext = (e.target as HTMLSelectElement).value;\n}\n</script>\n\n<div class=\"[&>*]:mt-12 p-4 dark:[&>*]:text-white\">\n\t<h1 class=\"text-2xl\">Language Detection Demo</h1>\n\t<p>\n\t\tThis is demonstration of Harper's ability to quickly (under 1 ms for large documents) determine\n\t\twhether a provided document is intended to be English. The algorithm is flexible to bad grammar.\n\t\t<br />\n\t\tSince this is used to redact commented-out code, it airs on the side of producing false-positives.\n\t</p>\n\n\t<Select items={templates} on:change={selectChange} />\n\n\t<Textarea\n\t\trows={8}\n\t\tclass={color}\n\t\tbind:value={text}\n\t\tplaceholder=\"Is your text supposed to be English?\"\n\t/>\n\n\t<p>This lower area will show the chunks of the provided text that are marked as English.</p>\n\n\t<Textarea rows={8} value={strippedText} readonly />\n</div>\n"
  },
  {
    "path": "packages/web/src/routes/latestversion/+server.ts",
    "content": "import { GithubClient } from '$lib/GitHubClient';\n\nexport async function GET() {\n\tconst latestVersion = await GithubClient.getLatestReleaseFromCache('automattic', 'harper');\n\n\tif (latestVersion == null) {\n\t\tthrow new Error('Unable to get latest version.');\n\t}\n\n\tconsole.log(`Received request for latest version. Responding with ${latestVersion}`);\n\n\treturn new Response(latestVersion, {\n\t\theaders: {\n\t\t\t'Access-Control-Allow-Origin': 'app://obsidian.md',\n\t\t\t'Cache-Control': 'no-cache',\n\t\t},\n\t});\n}\n\nexport async function OPTIONS() {\n\treturn new Response(null, {\n\t\theaders: {\n\t\t\t'Access-Control-Allow-Origin': 'app://obsidian.md',\n\t\t\t'Access-Control-Allow-Methods': 'GET',\n\t\t\t'Access-Control-Allow-Headers': 'Harper-Version',\n\t\t},\n\t});\n}\n"
  },
  {
    "path": "packages/web/src/routes/presentation/+page.svelte",
    "content": "<script lang=\"ts\">\nimport 'reveal.js/dist/reveal.css';\nimport 'reveal.js/dist/theme/serif.css';\nimport { Link } from 'components';\nimport Reveal from 'reveal.js';\nimport { onMount } from 'svelte';\nimport Logo from '$lib/components/Logo.svelte';\n\nonMount(() => {\n\tlet deck = new Reveal();\n\tdeck.initialize();\n});\n</script>\n\n<div class=\"reveal\">\n\t<div class=\"slides\">\n\t\t<section>\n\t\t\t<Logo width=\"50%\" />\n\t\t\t<h1>Harper</h1>\n\t\t\t<h2>The Grammar Checker for Developers</h2>\n\t\t</section>\n\t\t<section>\n\t\t\t<h1>Context</h1>\n\t\t\t<h3>I was bored</h3>\n\t\t</section>\n\t\t<section>\n\t\t\t<h2>\n\t\t\t\tThat became\n\t\t\t\t<img\n\t\t\t\t\tsrc=\"https://thrax.elijahpotter.dev/logo.svg\"\n\t\t\t\t\talt=\"The Thrax Logo\"\n\t\t\t\t\tclass=\"w-1/2 inline rounded-lg\"\n\t\t\t\t/>\n\t\t\t</h2>\n\t\t</section>\n\t\t<section>\n\t\t\t<h2>The language wasn't great, but the parser was fast.</h2>\n\t\t</section>\n\t\t<section>\n\t\t\t<h1>The Problem:</h1>\n\t\t\t<h1 class=\"fragment fade-in\"><strong>Grammarly</strong></h1>\n\t\t</section>\n\t\t<section>\n\t\t\t<h3>It is a privacy nightmare.</h3>\n\t\t\t<p class=\"fragment fade-in\">\n\t\t\t\tEvery request gets sent to their servers and stored <strong>forever.</strong>\n\t\t\t</p>\n\t\t</section>\n\t\t<section>\n\t\t\t<h3>It is <i>slow.</i></h3>\n\t\t\t<p class=\"fragment fade-in\">Grammarly requests can take as many as 4000ms to resolve.*</p>\n\t\t</section>\n\t\t<section>\n\t\t\t<h3>LanguageTool</h3>\n\t\t\t<p class=\"fragment fade-in\">You can self-host it, but...</p>\n\t\t\t<p class=\"fragment fade-in\">there are memory issues.</p>\n\t\t</section>\n\t\t<section>\n\t\t\t<Logo width=\"40%\" />\n\t\t\t<h2>Let me introduce:</h2>\n\t\t\t<h1>Harper</h1>\n\t\t</section>\n\t\t<section>\n\t\t\t<h2>The mission:</h2>\n\t\t\t<p>Create a grammar checker of the same caliber as Grammarly and LanguageTool.</p>\n\t\t\t<p class=\"fragment fade-in\"><strong>Without the cruft.</strong></p>\n\t\t</section>\n\t\t<section>\n\t\t\t<h2>That means:</h2>\n\t\t\t<ul>\n\t\t\t\t<li class=\"fragment fade-in\">It must be completely private.</li>\n\t\t\t\t<li class=\"fragment fade-in\">It must encourage painless revision <i>by a human</i>.</li>\n\t\t\t\t<li class=\"fragment fade-in\">It has to get out of the way.</li>\n\t\t\t</ul>\n\t\t</section>\n\t\t<section>\n\t\t\t<h2>Harper (right now)</h2>\n\t\t\t<ul>\n\t\t\t\t<li class=\"fragment fade-in\">Runs on-device.</li>\n\t\t\t\t<li class=\"fragment fade-in\">\n\t\t\t\t\tThe entire grammar checker fits under 500kb (including datasets).\n\t\t\t\t</li>\n\t\t\t\t<li class=\"fragment fade-in\">Completes checking on large documents in under 10-20ms.</li>\n\t\t\t</ul>\n\t\t</section>\n\t\t<section>\n\t\t\t<h2>Linters</h2>\n\t\t\t<ul>\n\t\t\t\t<li>\"a\" v.s. \"an\" usage.</li>\n\t\t\t\t<li>Spell-checking.</li>\n\t\t\t\t<li>Accidental word repetition (e.x. \"We ate at <i>the the</i> cafe\").</li>\n\t\t\t\t<li>Extraneous spaces.</li>\n\t\t\t\t<li>More than 100 curated patterns.</li>\n\t\t\t\t<li>Run-on sentences.</li>\n\t\t\t</ul>\n\t\t</section>\n\t\t<section>\n\t\t\t<h2>Availability</h2>\n\t\t\t<h3>Full Support:</h3>\n\t\t\t<ul>\n\t\t\t\t<li>Neovim (LSP)</li>\n\t\t\t\t<li>Web (WebAssembly)</li>\n\t\t\t</ul>\n\t\t\t<h3>Early Access (talk to me)</h3>\n\t\t\t<ul><li>Obsidian (CodeMirror + WebAssembly)</li></ul>\n\t\t\t<h3>Planned:</h3>\n\t\t\t<ul>\n\t\t\t\t<li>JetBrains products (LSP)</li>\n\t\t\t\t<li>Visual Studio Code (LSP)</li>\n\t\t\t</ul>\n\t\t</section>\n\t\t<section>\n\t\t\t<h2>Try It!</h2>\n\t\t\t<p>\n\t\t\t\tGo to <Link href=\"https://writewithharper.com\">https://writewithharper.com</Link> on a laptop.\n\t\t\t\t<img\n\t\t\t\t\talt=\"The QR code for the website.\"\n\t\t\t\t\tsrc=\" https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://writewithharper.com\"\n\t\t\t\t/>\n\t\t\t</p>\n\t\t</section>\n\t</div>\n</div>\n\n<style>\n\t.reveal * {\n\t\ttext-align: left;\n\t}\n</style>\n"
  },
  {
    "path": "packages/web/src/routes/report-problematic-lint/+page.svelte",
    "content": "<script lang=\"ts\">\nimport { Button, Card, Checkbox, Input, Label, Radio } from 'components';\nimport Isolate from '$lib/components/Isolate.svelte';\n</script>\n\n<Isolate>\n  <div class=\"flex flex-row justify-center items-center h-screen\"> \n    <Card> \n      <h1 class=\"text-3xl font-semibold\">Report Problematic Lint</h1> \n      <p class=\"text-sm text-gray-600\">If you've encountered an example of Harper producing an incorrect result, we'd love to know about it.</p>\n      <form method=\"POST\" class=\"mt-4 space-y-6\" action=\"/api/problematic-lints\">\n        <div class=\"space-y-3\">\n          <div class=\"flex items-baseline gap-2\">\n            <Label>What text caused (or should cause) feedback from Harper?</Label>\n          </div>\n          <Input name=\"example\" placeholder=\"Give us an example.\" />\n\n          <Checkbox name=\"is_false_positive\">Is it a false positive? Otherwise, leave unchecked.</Checkbox>\n\n          <div class=\"flex items-baseline gap-2\">\n            <Label>What rule caused (or should cause) feedback from Harper?</Label>\n          </div>\n          <Input name=\"rule_id\" placeholder=\"We'd appreciate the specific rule ID, if applicable.\" />\n\n\n          <div class=\"flex items-baseline gap-2\">\n            <Label>Additional Feedback</Label>\n          </div>\n          <Input name=\"feedback\" placeholder=\"Anything you want to add?\" />\n\n          <div class=\"flex items-center justify-between pt-2\">\n            <Button type=\"submit\">Submit</Button>\n          </div>\n        </div>\n      </form>\n    </Card> \n  </div>\n</Isolate>\n"
  },
  {
    "path": "packages/web/src/routes/request-browser-support/+page.svelte",
    "content": "<div class=\"fixed left-0 top-0 w-screen h-screen bg-white dark:bg-black z-1000\">\n\t<div class=\"max-w-4xl mx-auto shadow-md border-gray-300 dark:border-x h-full\">\n    <iframe src=\"https://docs.google.com/forms/d/e/1FAIpQLScaWQWtnszKS_oQ8DYEAt1Ei5ORIQFViaoImjZ06pXntbCarA/viewform?embedded=true\" width=\"100%\" height=\"100%\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" title=\"A form to request support for a specific website.\">Loading…</iframe>\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/web/src/routes/stats/+page.svelte",
    "content": "<script lang=\"ts\">\nimport {\n\tFileupload,\n\tTable,\n\tTableBody,\n\tTableBodyCell,\n\tTableBodyRow,\n\tTableHead,\n\tTableHeadCell,\n} from 'components';\nimport { binary, type Summary, WorkerLinter } from 'harper.js';\nimport LintKindChart from '$lib/components/LintKindChart.svelte';\n\nlet linter = new WorkerLinter({ binary: binary });\nlet files = $state<FileList | undefined>();\nlet summary: Summary | undefined = $state();\n\n$effect(() => {\n\t(async () => {\n\t\tif (files && files.length >= 1) {\n\t\t\tlet file = files.item(0);\n\n\t\t\tlet t = await file?.text();\n\n\t\t\tif (!t) {\n\t\t\t\tthrow new Error('Unable to get text content.');\n\t\t\t}\n\n\t\t\tawait linter.importStatsFile(t);\n\t\t\tsummary = await linter.summarizeStats();\n\t\t}\n\t})();\n});\n</script>\n\n{#if summary}\n  <h1>Harper Statistics</h1>\n\n  {#if summary.lint_counts}\n    <h2>Most Common Kinds of Corrections</h2>\n    <LintKindChart lintCounts={summary.lint_counts}/>\n  {/if}\n\n  {#if summary.total_applied}\n    <p>In total, {summary.total_applied} corrections were applied.</p>\n  {/if}\n\n  {#if summary.misspelled}\n    <h2>Most Misspelled Words</h2>\n    <Table>\n    \t<TableHead>\n    \t\t<TableHeadCell>Word</TableHeadCell>\n    \t\t<TableHeadCell># of Times Misspelled</TableHeadCell>\n    \t</TableHead>\n    \t<TableBody>\n    \t\t{#each Object.entries(summary.misspelled) as [word, count]}\n    \t\t\t<TableBodyRow>\n    \t\t\t\t<TableBodyCell>{word}</TableBodyCell>\n    \t\t\t\t<TableBodyCell>{count}</TableBodyCell>\n    \t\t\t</TableBodyRow>\n    \t\t{/each}\n    \t</TableBody>\n    </Table>\n    {/if}\n{:else}\n  <p> Upload your `stats.txt` file to start reflecting on your authorship. </p>\n  <Fileupload bind:files={files}/>\n{/if}\n"
  },
  {
    "path": "packages/web/src/routes/titlecase/+page.svelte",
    "content": "<script lang=\"ts\">\nimport { Link, Textarea } from 'components';\nimport type { WorkerLinter } from 'harper.js';\nimport { onMount } from 'svelte';\nimport Typed from 'typed.js';\n\nlet linter: WorkerLinter | null = null;\nlet text = '';\nlet titlecaseRun = 0;\n\nonMount(() => {\n\t(async () => {\n\t\tif (typeof Worker !== 'undefined') {\n\t\t\tconst { WorkerLinter, binary } = await import('harper.js');\n\t\t\tconst newLinter = new WorkerLinter({ binary });\n\n\t\t\tnewLinter.setup();\n\t\t\tlinter = newLinter;\n\t\t}\n\t})();\n\n\tconst typed = new Typed('#titleCaseInputField', {\n\t\tstrings: [\n\t\t\t'Click Here to Write an Article Title',\n\t\t\t'Click Here to Write a Blog Title',\n\t\t\t'Click Here to Write a Social Media Post Title',\n\t\t\t'Click Here to Write a Newsletter Title',\n\t\t\t'Click Here to Write a Video Script Title',\n\t\t\t'Click Here to Write a Press Release Title',\n\t\t\t'Click Here to Brainstorm a New Ebook Title',\n\t\t],\n\t\ttypeSpeed: 50,\n\t\tshowCursor: false,\n\t\tattr: 'placeholder',\n\t});\n\n\treturn () => typed.destroy();\n});\n\n$: if (linter) {\n\tconst requestId = ++titlecaseRun;\n\tconst currentText = text;\n\n\tlinter.toTitleCase(currentText).then((converted) => {\n\t\tif (requestId !== titlecaseRun) return;\n\t\tif (converted !== currentText) {\n\t\t\ttext = converted;\n\t\t}\n\t});\n}\n</script>\n\n<h1>Title Case Converter</h1>\n\n<div class=\"fixed left-0 top-0 w-screen h-screen bg-white dark:bg-black z-1000\">\n\t<div class=\"max-w-4xl mx-auto shadow-md border-gray-300 dark:border-x h-full\">\n\t\t<!-- Header -->\n\t\t<header class=\"border-b border-gray-300 p-4\">\n\t\t\t<div class=\"flex justify-between items-center\">\n\t\t\t\t<h1 class=\"text-3xl font-serif font-bold\">The News, Written by You</h1>\n\t\t\t\t<span class=\"text-sm\">July 4th 1776</span>\n\t\t\t</div>\n\t\t\t<div class=\"flex justify-between mt-2\">\n\t\t\t\t<div class=\"text-xs\">Vol. 123, No. 45</div>\n\t\t\t\t<div class=\"text-xs\">Your trusted news source</div>\n\t\t\t</div>\n\t\t</header>\n\n\t\t<main class=\"p-4 md:p-6\">\n\t\t\t<article class=\"mb-8\">\n\t\t\t\t<Textarea\n\t\t\t\t\tbind:value={text}\n\t\t\t\t\trows=\"1\"\n\t\t\t\t\tclass=\"heading-textarea w-full font-serif text-2xl md:text-3xl font-bold border-none focus:ring-2 focus:ring-blue-200 bg-transparent p-0 resize-none overflow-hidden\"\n\t\t\t\t\tid=\"titleCaseInputField\"\n\t\t\t\t/>\n\t\t\t\t<div class=\"text-sm mb-3\">By John Doe, Staff Writer</div>\n\n\t\t\t\t<p class=\"leading-relaxed\">\n\t\t\t\t\t<Link href=\"/\">Harper</Link> ships out-of-the box with everything you need to perform complex operations\n\t\t\t\t\ton English text at the edge. That includes converting text to title-case.\n\t\t\t\t</p>\n\n\t\t\t\t<p class=\"leading-relaxed\">\n\t\t\t\t\tJust enter your text in the heading above and it'll be converted to title case following\n\t\t\t\t\tthe <Link href=\"https://www.chicagomanualofstyle.org/home.html\">Chicago Style</Link>. Your\n\t\t\t\t\tprivacy means something. Keep your data where you want it: in your hands and on your\n\t\t\t\t\tdevice.\n\t\t\t\t</p>\n\t\t\t</article>\n\t\t</main>\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/web/src/routes/uninstall-browser-extension/+page.svelte",
    "content": "<script lang=\"ts\">\nimport { Button, Card, Input, Label, Radio } from 'components';\nimport Isolate from '$lib/components/Isolate.svelte';\n\nconst reasons = {\n\tconfused: 'I was confused by how it worked',\n\t'unsupported-language': \"It doesn't support my language\",\n\t'slowed-down-browser': 'It slowed down my browser',\n\t'false-positive': 'It incorrectly flagged my text as an error',\n\t'false-negative': \"It didn't identify enough errors in my text\",\n\t'no-positives': \"It didn't identify any errors in my text\",\n};\n\nlet otherSelected: string | number | undefined;\nlet otherText = '';\n\nfunction handleFormData(e: FormDataEvent) {\n\tconst fd = e.formData;\n\tif (fd.get('feedback') === 'other') {\n\t\tconst v = (fd.get('other') || '').toString().trim();\n\t\tif (v) fd.set('feedback', v);\n\t}\n}\n</script>\n\n<Isolate>\n  <div class=\"flex flex-row justify-center items-center h-screen\"> \n    <Card> \n      <h1 class=\"text-3xl font-semibold\">Uninstalling Harper</h1> <p class=\"text-sm text-gray-600\">We’re sorry to see you go. If you have a minute, would you mind telling us why you uninstalled our browser extension?</p>\n      <form method=\"POST\" class=\"mt-4 space-y-6\" action=\"/api/uninstall-feedback\" on:formdata={handleFormData}>\n        <div class=\"space-y-3\">\n          <div class=\"flex items-baseline gap-2\">\n            <Label>Why did you uninstall Harper?</Label>\n          </div>\n      \n          <div class=\"space-y-3\">\n            {#each Object.entries(reasons) as [k, r], i}\n              <Radio value={k} name=\"feedback\">{r}</Radio>\n            {/each}\n      \n            <Radio name=\"feedback\" value=\"other\" bind:group={otherSelected}>Other</Radio>\n            {#if otherSelected}\n              <Input name=\"other\" bind:value={otherText} placeholder=\"Your answer\" />\n            {/if}\n        </div>\n      \n        <div class=\"flex items-center justify-between pt-2\">\n          <Button type=\"submit\">Submit</Button>\n        </div>\n      </form>\n    </Card> \n  </div>\n</Isolate>\n"
  },
  {
    "path": "packages/web/src/routes/weir/studio/+page.svelte",
    "content": "<script lang=\"ts\">\nimport { packWeirpackFiles, unpackWeirpackBytes } from 'harper.js';\nimport type { ComponentType } from 'svelte';\nimport { onMount } from 'svelte';\nimport { browser } from '$app/environment';\nimport Isolate from '$lib/components/Isolate.svelte';\nimport type { Toast } from '$lib/components/Toasts.svelte';\nimport Toasts from '$lib/components/Toasts.svelte';\nimport WeirStudioStart from '$lib/components/WeirStudioStart.svelte';\nimport WeirStudioWorkspace from '$lib/components/WeirStudioWorkspace.svelte';\n\ntype WeirpackTestFailure = {\n\texpected: string;\n\tgot: string;\n};\n\ntype WeirpackTestFailures = Record<string, WeirpackTestFailure[]>;\n\nconst defaultManifest = {\n\tname: 'Weirpack Studio',\n\tauthor: 'Anonymous',\n\tversion: '0.1.0',\n\tdescription: 'Exploring Weir rules in the browser.',\n\tlicense: 'MIT',\n};\n\nconst newRuleTemplate = 'expr main';\n\nconst defaultRule = `expr main (w/o)\n\nlet message \"Use \\`without\\` instead of \\`w/o\\`\"\nlet description \"Expands the abbreviation \\`w/o\\` to the full word \\`without\\`.\"\nlet kind \"Style\"\nlet becomes \"without\"\n\ntest \"She lacks w/o experience.\" \"She lacks without experience.\"\ntest \"He has w/o skills w/o knowledge.\" \"He has without skills without knowledge.\"\n`;\n\n/** Used for generating new filenames */\nlet nextId = 2;\n\n/** Is the drawer open? */\nlet drawerOpen = true;\n\n/** The name of the file currently in the viewport. */\nlet activeFileId: string | null = '';\n\nlet toasts: Toast[] = [];\nlet runningTests = false;\nlet linterReady = false;\nlet linter: import('harper.js').LocalLinter | null = null;\nlet AceEditorComponent: ComponentType | null = null;\nlet editorReady = false;\nlet packLoaded = false;\nlet fileInputEl: HTMLInputElement | null = null;\nlet checkingStorage = true;\n\nconst storageKey = 'harper-weirpack-studio';\n\nlet files: Map<string, string> = new Map();\n\nconst editorOptions = {\n\tenableBasicAutocompletion: true,\n\tenableLiveAutocompletion: true,\n\tenableSnippets: true,\n\tshowPrintMargin: false,\n\twrap: true,\n\tfontFamily: '\"JetBrains Mono\", monospace',\n\tfontSize: '14px',\n};\n\nconst modeByExtension: Record<string, string> = {\n\tjson: 'json',\n\tjs: 'javascript',\n\tts: 'typescript',\n\tmd: 'markdown',\n\tmarkdown: 'markdown',\n\tyaml: 'yaml',\n\tyml: 'yaml',\n};\n\nfunction createFileName(): string {\n\treturn `NewRule-${nextId++}.weir`;\n}\n\nfunction getEditorMode(name: string): string {\n\tlet ext = name.split('.', 2)[1];\n\tif (ext == null) {\n\t\t('text');\n\t}\n\n\tlet mode = modeByExtension[ext];\n\treturn mode;\n}\n\nfunction setActiveFile(id: string) {\n\tactiveFileId = id;\n}\n\nfunction updateActiveContent(value: string) {\n\tif (activeFileId) files.set(activeFileId, value);\n\tfiles = new Map(files);\n}\n\nfunction createFile() {\n\tfiles.set(createFileName(), newRuleTemplate);\n\tfiles = new Map(files);\n}\n\nfunction deleteFile(file: string) {\n\tfiles.delete(file);\n\tfiles = new Map(files);\n}\n\nfunction pushToast(toast: Omit<Toast, 'id'>) {\n\tconst id = Date.now() + Math.floor(Math.random() * 1000);\n\ttoasts = [...toasts, { ...toast, id }];\n\tsetTimeout(() => {\n\t\ttoasts = toasts.filter((item) => item.id !== id);\n\t}, 4500);\n}\n\nfunction initializePack(entries: Map<string, string>) {\n\tfiles = entries;\n\tactiveFileId = entries.keys().next().value ?? null;\n\tpackLoaded = true;\n}\n\nfunction openExamplePack() {\n\tinitializePack(\n\t\tnew Map([\n\t\t\t['manifest.json', JSON.stringify(defaultManifest, null, 2)],\n\t\t\t['ExampleRule.weir', defaultRule],\n\t\t]),\n\t);\n}\n\nfunction onRenameFile(from: string, to: string) {\n\tlet origVal = files.get(from);\n\n\tif (origVal == undefined) {\n\t\treturn;\n\t}\n\n\tfiles.set(to, origVal);\n\tfiles.delete(from);\n\n\tfiles = new Map(files);\n}\n\nfunction createEmptyPack() {\n\tconst manifest = {\n\t\t...defaultManifest,\n\t\tname: 'Untitled Weirpack',\n\t};\n\tinitializePack(new Map([['manifest.json', JSON.stringify(manifest, null, 2)]]));\n}\n\nfunction resetToStartScreen() {\n\tfiles = new Map();\n\tactiveFileId = null;\n\tpackLoaded = false;\n\tif (browser) {\n\t\tlocalStorage.removeItem(storageKey);\n\t}\n}\n\nfunction loadWeirpackFromBytes(bytes: Uint8Array) {\n\ttry {\n\t\tconst unpacked = unpackWeirpackBytes(bytes);\n\t\tconst entries: Map<string, string> = new Map(unpacked.files);\n\t\tentries.set('manifest.json', JSON.stringify(unpacked.manifest, null, 2));\n\n\t\tnextId = entries.size + 1;\n\t\tinitializePack(entries);\n\t} catch (error) {\n\t\tpushToast({\n\t\t\ttitle: 'Unable to load Weirpack',\n\t\t\tbody: 'Make sure the file is a valid .weirpack archive.',\n\t\t\ttone: 'error',\n\t\t});\n\t}\n}\n\nasync function handleUpload(event: Event) {\n\tconst input = event.currentTarget as HTMLInputElement;\n\tif (!input.files?.length) {\n\t\treturn;\n\t}\n\tconst file = input.files[0];\n\tconst bytes = new Uint8Array(await file.arrayBuffer());\n\tloadWeirpackFromBytes(bytes);\n\tinput.value = '';\n}\n\nfunction parseManifest() {\n\tif (!files.has('manifest.json')) {\n\t\treturn defaultManifest;\n\t}\n\ttry {\n\t\tconst parsed = JSON.parse(files.get('manifest.json')!);\n\t\treturn parsed;\n\t} catch (error) {\n\t\tpushToast({\n\t\t\ttitle: 'manifest.json is invalid',\n\t\t\tbody: 'Fix the JSON before running tests or downloading.',\n\t\t\ttone: 'error',\n\t\t});\n\t\treturn null;\n\t}\n}\n\nfunction validateManifest(manifest: Record<string, unknown>) {\n\tconst required = ['author', 'version', 'description', 'license'];\n\tfor (const key of required) {\n\t\tif (typeof manifest[key] !== 'string' || manifest[key] === '') {\n\t\t\tpushToast({\n\t\t\t\ttitle: `Manifest field missing: ${key}`,\n\t\t\t\tbody: 'Each field must be a non-empty string.',\n\t\t\t\ttone: 'error',\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction buildWeirpackBytes(): Uint8Array<ArrayBufferLike> | null {\n\tconst manifest = parseManifest();\n\tif (!manifest || !validateManifest(manifest)) {\n\t\treturn null;\n\t}\n\n\tconst normalizedFiles = new Map(files);\n\tnormalizedFiles.set('manifest.json', JSON.stringify(manifest, null, 2));\n\n\ttry {\n\t\treturn packWeirpackFiles(normalizedFiles);\n\t} catch (error) {\n\t\tpushToast({\n\t\t\ttitle: 'Weirpack export failed',\n\t\t\tbody: 'manifest.json is required to save a Weirpack.',\n\t\t\ttone: 'error',\n\t\t});\n\t\treturn null;\n\t}\n}\n\nfunction bytesToBase64(bytes: Uint8Array) {\n\tlet binary = '';\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary);\n}\n\nfunction base64ToBytes(base64: string) {\n\tconst binary = atob(base64);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let i = 0; i < binary.length; i += 1) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\treturn bytes;\n}\n\nfunction saveWeirpackToStorage() {\n\tif (!browser || !packLoaded) {\n\t\treturn;\n\t}\n\tconst bytes = buildWeirpackBytes();\n\tif (!bytes) {\n\t\treturn;\n\t}\n\ttry {\n\t\tlocalStorage.setItem(storageKey, bytesToBase64(bytes));\n\t} catch (error) {\n\t\tconsole.warn('Unable to store Weirpack', error);\n\t}\n}\n\nasync function runTests() {\n\tif (!packLoaded) {\n\t\tpushToast({\n\t\t\ttitle: 'No Weirpack loaded',\n\t\t\tbody: 'Choose a Weirpack to run tests.',\n\t\t\ttone: 'info',\n\t\t});\n\t\treturn;\n\t}\n\tif (!linter) {\n\t\tpushToast({\n\t\t\ttitle: 'Linter still loading',\n\t\t\tbody: 'Give it a moment and try again.',\n\t\t\ttone: 'info',\n\t\t});\n\t\treturn;\n\t}\n\tconst bytes = buildWeirpackBytes();\n\tif (!bytes) {\n\t\treturn;\n\t}\n\trunningTests = true;\n\ttry {\n\t\tconst failures = (await linter.loadWeirpackFromBytes(bytes)) as\n\t\t\t| WeirpackTestFailures\n\t\t\t| undefined;\n\t\tif (!failures || Object.keys(failures).length === 0) {\n\t\t\tpushToast({\n\t\t\t\ttitle: 'All tests passed',\n\t\t\t\tbody: 'The tests in your Weirpack all pass.',\n\t\t\t\ttone: 'success',\n\t\t\t});\n\t\t} else {\n\t\t\tfor (const [ruleName, failuresForRule] of Object.entries(failures)) {\n\t\t\t\tfor (const failure of failuresForRule) {\n\t\t\t\t\tpushToast({\n\t\t\t\t\t\ttitle: `${ruleName} failed`,\n\t\t\t\t\t\tbody: `Expected \"${failure.expected}\" but got \"${failure.got}\".`,\n\t\t\t\t\t\ttone: 'error',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tpushToast({\n\t\t\ttitle: 'Unable to run tests',\n\t\t\tbody: 'The Weirpack could not be evaluated. Make sure your rules are syntactically correct.',\n\t\t\ttone: 'error',\n\t\t});\n\t} finally {\n\t\trunningTests = false;\n\t}\n}\n\nfunction downloadWeirpack() {\n\tif (!packLoaded) {\n\t\tpushToast({\n\t\t\ttitle: 'No Weirpack loaded',\n\t\t\tbody: 'Choose a Weirpack to download.',\n\t\t\ttone: 'info',\n\t\t});\n\t\treturn;\n\t}\n\tconst bytes = buildWeirpackBytes();\n\tif (!bytes) {\n\t\treturn;\n\t}\n\tconst manifest = parseManifest() ?? defaultManifest;\n\tconst baseName = String(manifest.name ?? 'weirpack').trim() || 'weirpack';\n\tconst safeName = baseName.replace(/[^a-zA-Z0-9_-]/g, '-');\n\tconst blob = new Blob([bytes.slice().buffer], { type: 'application/zip' });\n\tconst url = URL.createObjectURL(blob);\n\tconst link = document.createElement('a');\n\tlink.href = url;\n\tlink.download = `${safeName}.weirpack`;\n\tlink.click();\n\tURL.revokeObjectURL(url);\n}\n\nonMount(async () => {\n\tif (!browser) {\n\t\treturn;\n\t}\n\tconst stored = localStorage.getItem(storageKey);\n\tif (stored) {\n\t\ttry {\n\t\t\tconst bytes = base64ToBytes(stored);\n\t\t\tloadWeirpackFromBytes(bytes);\n\t\t} catch (error) {\n\t\t\tconsole.warn('Unable to restore Weirpack', error);\n\t\t}\n\t}\n\tcheckingStorage = false;\n\n\tconst [{ LocalLinter, binary }, { AceEditor }] = await Promise.all([\n\t\timport('harper.js'),\n\t\timport('svelte-ace'),\n\t]);\n\n\tawait Promise.all([\n\t\timport('brace/mode/json'),\n\t\timport('brace/mode/javascript'),\n\t\timport('brace/mode/markdown'),\n\t\timport('brace/mode/text'),\n\t\timport('brace/mode/typescript'),\n\t\timport('brace/mode/yaml'),\n\t\timport('brace/theme/chrome'),\n\t]);\n\n\tconst newLinter = new LocalLinter({ binary });\n\tawait newLinter.setup();\n\tlinter = newLinter;\n\tlinterReady = true;\n\tAceEditorComponent = AceEditor as unknown as ComponentType;\n\teditorReady = true;\n});\n\nsetInterval(saveWeirpackToStorage, 5000);\n</script>\n\n<Isolate>\n\t<div class=\"relative flex h-screen w-screen overflow-hidden bg-[#fef4e7] text-black\">\n\t\t<div class=\"pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_top,rgba(244,168,62,0.25),transparent_55%)]\"></div>\n\n\t\t<WeirStudioWorkspace\n\t\t\t{drawerOpen}\n\t\t\t{files}\n\t\t\t{editorReady}\n\t\t\t{AceEditorComponent}\n\t\t\t{editorOptions}\n\t\t\t{linterReady}\n\t\t\t{runningTests}\n\t\t\t{packLoaded}\n\t\t\t{getEditorMode}\n      activeFile={activeFileId}\n\t\t\tonToggleDrawer={() => (drawerOpen = !drawerOpen)}\n\t\t\tonCreateFile={createFile}\n\t\t\tonSelectFile={setActiveFile}\n\t\t\tonRenameFile={onRenameFile}\n\t\t\tonDeleteFile={deleteFile}\n\t\t\tonUpdateContent={updateActiveContent}\n\t\t\tonRunTests={runTests}\n\t\t\tonDownload={downloadWeirpack}\n\t\t\tonClosePack={resetToStartScreen}\n\t\t/>\n\n\t\t<Toasts {toasts} />\n\n\t\t{#if !packLoaded}\n\t\t\t<WeirStudioStart\n\t\t\t\tonUpload={() => fileInputEl?.click()}\n\t\t\t\tonOpenExample={openExamplePack}\n\t\t\t\tonCreateEmpty={createEmptyPack}\n\t\t\t\tonUploadChange={handleUpload}\n\t\t\t\tbind:fileInputEl\n\t\t\t\tloading={checkingStorage}\n\t\t\t\tloadingLabel=\"Checking local storage for a saved Weirpack.\"\n\t\t\t/>\n\t\t{/if}\n\t</div>\n</Isolate>\n"
  },
  {
    "path": "packages/web/src/routes/wpdemo/+page.server.ts",
    "content": "import { redirect } from '@sveltejs/kit';\nimport blueprint from '../../../demo_wp_blueprint.json?raw';\n\nconst base64Blueprint = btoa(blueprint);\nconst playgroundUrl = `https://playground.wordpress.net/?mode=seamless#${base64Blueprint}`;\n\nexport function load() {\n\tredirect(302, playgroundUrl);\n}\n"
  },
  {
    "path": "packages/web/static/browserconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<browserconfig>\n    <msapplication>\n        <tile>\n            <square150x150logo src=\"/mstile-150x150.png\"/>\n            <TileColor>#da532c</TileColor>\n        </tile>\n    </msapplication>\n</browserconfig>\n"
  },
  {
    "path": "packages/web/static/site.webmanifest",
    "content": "{\n\t\"name\": \"\",\n\t\"short_name\": \"\",\n\t\"icons\": [\n\t\t{\n\t\t\t\"src\": \"/android-chrome-192x192.png\",\n\t\t\t\"sizes\": \"192x192\",\n\t\t\t\"type\": \"image/png\"\n\t\t},\n\t\t{\n\t\t\t\"src\": \"/android-chrome-512x512.png\",\n\t\t\t\"sizes\": \"512x512\",\n\t\t\t\"type\": \"image/png\"\n\t\t}\n\t],\n\t\"theme_color\": \"#ffffff\",\n\t\"background_color\": \"#ffffff\",\n\t\"display\": \"standalone\"\n}\n"
  },
  {
    "path": "packages/web/svelte.config.js",
    "content": "import adapter from '@sveltejs/adapter-node';\nimport { vitePreprocess } from '@sveltejs/vite-plugin-svelte';\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n\textensions: ['.svelte', '.md'],\n\tpreprocess: vitePreprocess(),\n\tkit: {\n\t\tcsrf: {\n\t\t\ttrustedOrigins: [\n\t\t\t\t'chrome-extension://lodbfhdipoipcjmlebjbgmmgekckhpfb',\n\t\t\t\t'chrome-extension://hkjdmakdmihopipoiplebkelbhebigea',\n\t\t\t\t'chrome-extension://ihjkkjfembmnjldmdchmadigpmapkpdh',\n\t\t\t],\n\t\t},\n\t\tprerender: {\n\t\t\tentries: [],\n\t\t},\n\t\tadapter: adapter({\n\t\t\tout: 'build',\n\t\t}),\n\t},\n};\n\nexport default config;\n"
  },
  {
    "path": "packages/web/tailwind.config.js",
    "content": "export default {\n\tcontent: ['./src/**/*.{html,js,svelte,ts}', './node_modules/components/**/*.{html,js,svelte,ts}'],\n\tplugins: [],\n};\n"
  },
  {
    "path": "packages/web/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true\n\t}\n\t// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias\n\t//\n\t// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes\n\t// from the referenced tsconfig.json - TypeScript does not merge them in\n}\n"
  },
  {
    "path": "packages/web/vite.config.ts",
    "content": "import tailwindcss from '@tailwindcss/vite';\nimport { defineConfig } from 'vite';\nimport topLevelAwait from 'vite-plugin-top-level-await';\nimport wasm from 'vite-plugin-wasm';\n\nconst prod = process.env.APP_ENV === 'production';\n\nexport default defineConfig(async () => {\n\tconst [{ defaultTheme }, { sveltepress }] = await Promise.all([\n\t\timport('@sveltepress/theme-default'),\n\t\timport('@sveltepress/vite'),\n\t]);\n\n\treturn {\n\t\tssr: {\n\t\t\tnoExternal: prod ? ['mysql2', 'drizzle-orm', 'posthog-js', 'drizzle-zod', 'zod'] : [],\n\t\t},\n\t\tserver: {\n\t\t\tport: 3000,\n\t\t\tfs: {\n\t\t\t\tallow: ['../harper.js/dist'],\n\t\t\t},\n\t\t},\n\t\tplugins: [\n\t\t\tsveltepress({\n\t\t\t\tsiteConfig: {\n\t\t\t\t\ttitle: 'Harper: The Private Grammar Checker',\n\t\t\t\t\tdescription: 'The Free Grammar Checker That Respects Your Privacy',\n\t\t\t\t},\n\t\t\t\ttheme: defaultTheme({\n\t\t\t\t\teditLink:\n\t\t\t\t\t\t'https://github.com/automattic/harper/edit/master/packages/web/src/routes/:route',\n\t\t\t\t\tlogo: '/circle-logo.png',\n\t\t\t\t\tgithub: 'https://github.com/automattic/harper',\n\t\t\t\t\tdiscord: 'https://discord.gg/invite/JBqcAaKrzQ',\n\t\t\t\t\tthemeColor: {\n\t\t\t\t\t\tprimary: '#f1920e',\n\t\t\t\t\t\tdark: '#301d03',\n\t\t\t\t\t\tgradient: {\n\t\t\t\t\t\t\tstart: '#355280',\n\t\t\t\t\t\t\tend: '#818eae',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tnavbar: [\n\t\t\t\t\t\t{ title: 'Documentation', to: '/docs/about' },\n\t\t\t\t\t\t{ title: 'Obsidian', to: '/docs/integrations/obsidian' },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: 'Chrome Extension',\n\t\t\t\t\t\t\tto: 'https://chromewebstore.google.com/detail/private-grammar-checking/lodbfhdipoipcjmlebjbgmmgekckhpfb',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdocsearch: {\n\t\t\t\t\t\tindexName: 'Documentation',\n\t\t\t\t\t\tappId: 'YIV4D9QMR0',\n\t\t\t\t\t\tapiKey: 'ff521ad7f129e4f4defe97dce3c923ad',\n\t\t\t\t\t},\n\t\t\t\t\tsidebar: {\n\t\t\t\t\t\t'/docs/': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'About',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/about',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Weir',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/weir',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: 'Integrations',\n\t\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Obsidian',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/obsidian',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Chrome Extension',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/chrome-extension',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Firefox Extension',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/firefox-extension',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'WordPress',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/wordpress',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Language Server',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/language-server',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Visual Studio Code',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/visual-studio-code',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Neovim',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/neovim',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Helix',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/helix',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Emacs',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/emacs',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Zed',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/zed',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Sublime Text',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/integrations/sublime-text',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: 'harper.js',\n\t\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Introduction',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/harperjs/introduction',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Linting',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/harperjs/linting',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Spans',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/harperjs/spans',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Configure Rules',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/harperjs/configurerules',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Node.js',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/harperjs/node',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'CDN',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/harperjs/CDN',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'API Reference',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/harperjs/ref/index.html',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: 'Contributors',\n\t\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Introduction',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/introduction',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Environment',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/environment',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Committing',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/committing',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Architecture',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/architecture',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Dictionary',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/dictionary',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Test Suite',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/tests',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Author a Rule',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/author-a-rule',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Visual Studio Code',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/visual-studio-code',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Chrome Extension',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/chrome-extension',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'WordPress',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/wordpress',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Obsidian',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/obsidian',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Reviewing Pull Requests',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/review',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Local Statistics',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/local-stats',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Brill Tagging',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/brill',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttitle: 'FAQ',\n\t\t\t\t\t\t\t\t\t\tto: '/docs/contributors/faq',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: 'Rust Reference',\n\t\t\t\t\t\t\t\tto: 'https://docs.rs/harper-core/latest/harper_core/',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: 'Rules',\n\t\t\t\t\t\t\t\tto: '/docs/rules',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\thighlighter: {\n\t\t\t\t\t\tlanguages: [\n\t\t\t\t\t\t\t'svelte',\n\t\t\t\t\t\t\t'sh',\n\t\t\t\t\t\t\t'js',\n\t\t\t\t\t\t\t'html',\n\t\t\t\t\t\t\t'ts',\n\t\t\t\t\t\t\t'md',\n\t\t\t\t\t\t\t'css',\n\t\t\t\t\t\t\t'scss',\n\t\t\t\t\t\t\t'toml',\n\t\t\t\t\t\t\t'rust',\n\t\t\t\t\t\t\t'lua',\n\t\t\t\t\t\t\t'json',\n\t\t\t\t\t\t\t'elisp',\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t}),\n\t\t\twasm(),\n\t\t\ttopLevelAwait(),\n\t\t\ttailwindcss(),\n\t\t],\n\t};\n});\n"
  },
  {
    "path": "packages/wordpress-plugin/.editorconfig",
    "content": "# This file is for unifying the coding style for different editors and IDEs\n# editorconfig.org\n\n# WordPress Coding Standards\n# https://make.wordpress.org/core/handbook/coding-standards/\n\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\nindent_style = tab\n\n[*.{yml,yaml}]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": "packages/wordpress-plugin/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild\n\n# Dependency directories\nnode_modules/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Output of `npm pack`\n*.tgz\n\n# Output of `wp-scripts plugin-zip`\n*.zip\n\n# dotenv environment variables file\n.env\n"
  },
  {
    "path": "packages/wordpress-plugin/README.md",
    "content": "# Harper for WordPress\n\n![The early prototype version of the plugin](./screenshot.png)\n\nThis repository contains the WordPress plugin for [Harper](https://writewithharper.com).\nIt is a work-in-progress. Here be dragons!\n\n## Contributing\n\nRefer to [the online documentation](https://writewithharper.com/docs/contributors/wordpress) for instructions to contribute to the plugin.\n"
  },
  {
    "path": "packages/wordpress-plugin/harper.php",
    "content": "<?php\n/**\n * Plugin Name:       Harper\n * Plugin URI:        https://writewithharper.com\n * Description:       Harper is the grammar checker that respects your privacy\n * Version:           0.0.1\n * Requires at least: 6.7\n * Requires PHP:      7.4\n * Author:            Elijah Potter\n * License:           GPL-2.0-or-later\n * License URI:       https://www.gnu.org/licenses/gpl-2.0.html\n * Text Domain:       harper\n *\n * @package Harper\n */\n\ndeclare( strict_types = 1 );\n\nif ( ! defined( 'ABSPATH' ) ) {\n\texit; // Exit if accessed directly.\n}\n\n/**\n * Registers the block using the metadata loaded from the `block.json` file.\n * Behind the scenes, it registers also all assets so they can be enqueued\n * through the block editor in the corresponding context.\n *\n * @see https://developer.wordpress.org/reference/functions/register_block_type/\n */\nfunction create_harper_block_init() {\n\tregister_block_type( __DIR__ . '/build/harper' );\n}\nadd_action( 'init', 'create_harper_block_init' );\n"
  },
  {
    "path": "packages/wordpress-plugin/package.json",
    "content": "{\n\t\"name\": \"wordpress-plugin\",\n\t\"private\": true,\n\t\"version\": \"0.0.1\",\n\t\"description\": \"The grammar checker that respects your privacy.\",\n\t\"main\": \"build/index.js\",\n\t\"scripts\": {\n\t\t\"build\": \"wp-scripts build --webpack-copy-php\",\n\t\t\"packages-update\": \"wp-scripts packages-update\",\n\t\t\"plugin-zip\": \"zip harper.zip build harper.php screenshot.png -r\",\n\t\t\"start\": \"wp-scripts start --webpack-copy-php\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@wordpress/scripts\": \"^30.9.0\",\n\t\t\"@wp-now/wp-now\": \"^0.1.74\",\n\t\t\"typescript\": \"catalog:\"\n\t},\n\t\"dependencies\": {\n\t\t\"@wordpress/components\": \"^29.2.0\",\n\t\t\"@wordpress/data\": \"^10.15.1\",\n\t\t\"@wordpress/edit-post\": \"^8.16.0\",\n\t\t\"@wordpress/editor\": \"^14.20.0\",\n\t\t\"@wordpress/preferences-persistence\": \"^2.17.0\",\n\t\t\"harper.js\": \"workspace:*\",\n\t\t\"lodash-es\": \"^4.17.21\",\n\t\t\"react\": \"^18.0.0\",\n\t\t\"react-dom\": \"^18.0.0\"\n\t}\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/Box.ts",
    "content": "import type { Lint, Suggestion } from 'harper.js';\n\nexport type Box = {\n\t/** Horizontal position in pixels */\n\tx: number;\n\t/** Vertical position in pixels */\n\ty: number;\n\t/** Width in pixels */\n\twidth: number;\n\t/** Height in pixels */\n\theight: number;\n};\n\nexport type LintBox = Box & {\n\tlint: Lint;\n\tapplySuggestion: (sug: Suggestion) => void;\n};\n\nexport type IgnorableLintBox = LintBox & {\n\tignoreLint: () => Promise<void>;\n};\n\nexport function isPointInBox(point: [number, number], box: Box) {\n\tconst [x, y] = point;\n\n\treturn x > box.x && x < box.x + box.width && y > box.y && y < box.y + box.height;\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/DataBlock.ts",
    "content": "import { dispatch } from '@wordpress/data';\nimport { getNodesFromQuerySelector, getRichTextContainers } from './domUtils';\nimport RichText from './RichText';\n\n/**\n * Represents a Gutenberg block on-screen.\n * So named because all of these blocks have a `data-block` attribute.\n */\nexport default class DataBlock {\n\tpublic readonly targetElement: Element;\n\n\tconstructor(targetElement: Element) {\n\t\tthis.targetElement = targetElement;\n\t}\n\n\tprivate getClientId(): string {\n\t\treturn this.targetElement.getAttribute('data-block')!;\n\t}\n\n\tpublic getAllRichText(): RichText[] {\n\t\tconst containers = getRichTextContainers(this.targetElement);\n\n\t\treturn containers.map(\n\t\t\t(cont) =>\n\t\t\t\tnew RichText(cont, this, async (newContent: string) => {\n\t\t\t\t\tconst { updateBlockAttributes } = dispatch('core/block-editor');\n\n\t\t\t\t\tconst attributeName = cont.getAttribute('data-wp-block-attribute-key') ?? 'content';\n\n\t\t\t\t\tawait updateBlockAttributes(this.getClientId(), {\n\t\t\t\t\t\t[attributeName]: newContent,\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t);\n\t}\n\n\tpublic static getAllDataBlocks(): DataBlock[] {\n\t\tconst container = this.getContainer();\n\n\t\tconst targetNodes = [...getNodesFromQuerySelector(container, '[data-block]')];\n\n\t\treturn targetNodes.map((node) => new DataBlock(node));\n\t}\n\n\t/** Get all DataBlocks in the document, then remove any that have other DataBlocks as children. */\n\tpublic static getTerminalDataBlocks(): DataBlock[] {\n\t\tconst blocks = this.getAllDataBlocks();\n\n\t\treturn blocks.filter((block) => {\n\t\t\tfor (const otherBlock of blocks) {\n\t\t\t\tif (otherBlock === block) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (block.targetElement.contains(otherBlock.targetElement)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tpublic static getContainer(): Element {\n\t\tconst iframe = document.querySelector('iframe[name=\"editor-canvas\"]');\n\t\tconst iframeDocument = iframe?.contentDocument || iframe?.contentWindow.document;\n\t\tconst container =\n\t\t\tiframeDocument?.body || document.querySelector('.edit-post-visual-editor > div');\n\t\treturn container;\n\t}\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/DialectSelectRow.tsx",
    "content": "import { SelectControl } from '@wordpress/components';\nimport { Dialect } from 'harper.js';\nimport useDialect from './useDialect';\n\nexport default function DialectSelectRow() {\n\tconst [dialect, setDialect] = useDialect();\n\n\treturn (\n\t\t<div>\n\t\t\t<h3>Dialect</h3>\n\t\t\t<p>Choose which English dialect Harper should expect.</p>\n\t\t\t<SelectControl\n\t\t\t\tlabel=\"Dialect\"\n\t\t\t\tvalue={dialect.toString()}\n\t\t\t\toptions={[\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'American',\n\t\t\t\t\t\tvalue: Dialect.American.toString(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Canadian',\n\t\t\t\t\t\tvalue: Dialect.Canadian.toString(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Australian',\n\t\t\t\t\t\tvalue: Dialect.Australian.toString(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'British',\n\t\t\t\t\t\tvalue: Dialect.British.toString(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Indian',\n\t\t\t\t\t\tvalue: Dialect.Indian.toString(),\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tonChange={(value) => setDialect(Number.parseInt(value, 10))}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/Highlighter.tsx",
    "content": "import { useEffect } from 'react';\nimport type { LintBox } from './Box';\nimport type RichText from './RichText';\nimport SuggestionControl from './SuggestionControl';\n\n/**\n * Renders controls to the user around the errors.\n * @param root0\n * @param root0.lintBoxes\n * @param root0.richText\n */\nexport default function Highlighter({\n\tlintBoxes,\n\trichText,\n}: {\n\tlintBoxes: LintBox[];\n\trichText: RichText;\n}) {\n\t// Disable browser spellchecking in favor of ours\n\tuseEffect(() => {\n\t\trichText.getTargetElement().spellcheck = false;\n\n\t\treturn () => {\n\t\t\trichText.getTargetElement().spellcheck = true;\n\t\t};\n\t}, [richText]);\n\n\tconst visible = richText.getTargetElement().checkVisibility();\n\n\treturn (\n\t\t<>{visible && lintBoxes.map((b, index) => <SuggestionControl lintBox={b} key={index} />)}</>\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/LintList.tsx",
    "content": "import { Animate, Spinner } from '@wordpress/components';\nimport type { IgnorableLintBox } from './Box';\nimport LintListItem from './LintListItem';\n\nexport default function LintList({\n\tlintBoxes,\n\tloading,\n}: {\n\tlintBoxes: IgnorableLintBox[];\n\tloading: boolean;\n}) {\n\tif (lintBoxes.length === 0) {\n\t\treturn (\n\t\t\t<div className=\"harper-solved-cont\">\n\t\t\t\t<Animate type=\"appear\" options={{ origin: 'middle' }}>\n\t\t\t\t\t{({ className }) => (\n\t\t\t\t\t\t<div className={className ?? ''}>\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t<Spinner\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\theight: 'calc(4px * 20)',\n\t\t\t\t\t\t\t\t\t\twidth: 'calc(4px * 20)',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<h2>LGTM 👍</h2>\n\t\t\t\t\t\t\t\t\t<p>Harper could not find any problems with your work.</p>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</Animate>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{lintBoxes\n\t\t\t\t.filter((box) => box.lint.suggestion_count() > 0)\n\t\t\t\t.map((box, index) => (\n\t\t\t\t\t<LintListItem key={index} box={box} />\n\t\t\t\t))}\n\t\t</>\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/LintListItem.tsx",
    "content": "import { Button, Card, CardBody } from '@wordpress/components';\nimport type { IgnorableLintBox } from './Box';\nimport { suggestionText } from './lintUtils';\nimport { useAddToDictionary } from './usePersonalDictionary';\n\nexport default function LintListItem({ box }: { box: IgnorableLintBox }) {\n\tconst addToDictionary = useAddToDictionary();\n\n\treturn (\n\t\t<Card size=\"small\" className=\"harper-lint-card\">\n\t\t\t<CardBody>\n\t\t\t\t<h2 className={`harper-underline-${box.lint.lint_kind()}`}>\n\t\t\t\t\t{box.lint.lint_kind_pretty()}\n\t\t\t\t</h2>\n\t\t\t\t<p>{box.lint.message()}</p>\n\n\t\t\t\t{box.lint.suggestions().map((sug, index) => (\n\t\t\t\t\t<Button variant=\"primary\" key={index} onClick={() => box.applySuggestion(sug)}>\n\t\t\t\t\t\t{suggestionText(sug.kind(), box.lint.get_problem_text(), sug.get_replacement_text())}\n\t\t\t\t\t</Button>\n\t\t\t\t))}\n\n\t\t\t\t{box.lint.lint_kind() === 'Spelling' ? (\n\t\t\t\t\t<Button onClick={() => addToDictionary(box.lint.get_problem_text())} variant=\"primary\">\n\t\t\t\t\t\tAdd “{box.lint.get_problem_text()}” to the dictionary\n\t\t\t\t\t</Button>\n\t\t\t\t) : (\n\t\t\t\t\t<></>\n\t\t\t\t)}\n\n\t\t\t\t<Button variant=\"link\" onClick={box.ignoreLint}>\n\t\t\t\t\tIgnore\n\t\t\t\t</Button>\n\t\t\t</CardBody>\n\t\t</Card>\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/LintSettingList.tsx",
    "content": "import { SearchControl } from '@wordpress/components';\nimport { useState } from 'react';\nimport { useLintDescriptions } from './LinterProvider';\nimport LintSettingRow from './LintSettingRow';\nimport useLintConfig, { useDefaultLintConfig } from './useLintConfig';\n\nexport default function LintSettingList() {\n\tconst [lintConfig, setLintConfig] = useLintConfig();\n\tconst defaultConfig = useDefaultLintConfig();\n\tconst descriptions = useLintDescriptions();\n\tconst [query, setQuery] = useState('');\n\n\treturn (\n\t\t<div className=\"harper-lint-config-cont\">\n\t\t\t<SearchControl value={query} onChange={setQuery} placeholder=\"Search for a rule...\" />\n\n\t\t\t{Object.entries(lintConfig)\n\t\t\t\t.filter(([key]) => key.includes(query) || descriptions[key]?.includes(query))\n\t\t\t\t.map(([key, value]) => (\n\t\t\t\t\t<LintSettingRow\n\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\tname={key}\n\t\t\t\t\t\tdescription={descriptions[key]}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tdefaultValue={defaultConfig[key]!}\n\t\t\t\t\t\tsetValue={(newValue) => setLintConfig({ ...lintConfig, [key]: newValue })}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t</div>\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/LintSettingRow.tsx",
    "content": "import { Animate, CheckboxControl } from '@wordpress/components';\nimport { useEffect, useState } from 'react';\nimport { useLinter } from './LinterProvider';\n\nexport default function LintSettingRow({\n\tname,\n\tvalue,\n\tdefaultValue,\n\tsetValue,\n\tdescription,\n}: {\n\tname: string;\n\tdescription: string;\n\tvalue: boolean | undefined;\n\tdefaultValue: boolean;\n\tsetValue: (newValue: boolean | undefined) => void;\n}) {\n\tconst linter = useLinter();\n\n\tconst [title, setTitle] = useState<string | null>(null);\n\n\tuseEffect(() => {\n\t\tlinter.toTitleCase(name.replace(/_/g, ' ')).then(setTitle);\n\t}, [linter, name]);\n\n\treturn title && description ? (\n\t\t<Animate type={title === null ? undefined : 'slide-in'}>\n\t\t\t{({ className }) => (\n\t\t\t\t<div className={`${className} harper-lint-config-row`}>\n\t\t\t\t\t<h3>{title}</h3>\n\t\t\t\t\t<p>{description}</p>\n\n\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tvalue == null\n\t\t\t\t\t\t\t\t? `Default (${defaultValue ? 'Enabled' : 'Disabled'})`\n\t\t\t\t\t\t\t\t: value\n\t\t\t\t\t\t\t\t\t? 'Enabled'\n\t\t\t\t\t\t\t\t\t: 'Disabled'\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonChange={(val) => setValue(val)}\n\t\t\t\t\t\tchecked={value ?? defaultValue}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Animate>\n\t) : (\n\t\t<></>\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/LinterProvider.tsx",
    "content": "import { binaryInlined, type Linter, WorkerLinter } from 'harper.js';\nimport { createContext, type ReactNode, useContext, useEffect, useRef, useState } from 'react';\n\nconst linterContext = createContext<Linter>(new WorkerLinter({ binary: binaryInlined }));\n\nexport default function LinterProvider({ children }: { children: ReactNode | ReactNode[] }) {\n\tconst linter = useRef(new WorkerLinter({ binary: binaryInlined }));\n\n\treturn <linterContext.Provider value={linter.current}>{children}</linterContext.Provider>;\n}\n\nexport function useLinter(): Linter {\n\treturn useContext(linterContext);\n}\n\nexport function useLintDescriptions(): Record<string, string> {\n\tconst linter = useLinter();\n\tconst [descriptions, setDescriptions] = useState({});\n\n\tuseEffect(() => {\n\t\tlinter.getLintDescriptions().then(setDescriptions);\n\t}, [linter]);\n\n\treturn descriptions;\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/Logo.jsx",
    "content": "export default function Logo() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t\tviewBox=\"0 0 695 411\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t\t\txmlSpace=\"preserve\"\n\t\t\tstyle={{\n\t\t\t\tfillRule: 'evenodd',\n\t\t\t\tclipRule: 'evenodd',\n\t\t\t\tstrokeLinecap: 'round',\n\t\t\t\tstrokeLinejoin: 'round',\n\t\t\t\tstrokeMiterlimit: 1.5,\n\t\t\t}}\n\t\t>\n\t\t\t<g transform=\"matrix(1,0,0,1,-5,-1720)\">\n\t\t\t\t<g id=\"Artboard1\" transform=\"matrix(0.824576,0,0,0.749254,0.365685,430.856)\">\n\t\t\t\t\t<g transform=\"matrix(1.21274,0,0,1.33466,-2183.71,393.157)\">\n\t\t\t\t\t\t<g transform=\"matrix(1,0,0,1,-22.3927,1.08043)\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M1930.93,1121.75C1930.93,1121.75 1974.66,1080.73 2041.34,1094.1C2086.61,1103.18 2122.83,1145.4 2122.83,1145.4\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tfill: 'none',\n\t\t\t\t\t\t\t\t\tstroke: 'currentColor',\n\t\t\t\t\t\t\t\t\tstrokeWidth: '22.92px',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t\t<g transform=\"matrix(1,0,0,1,-47.3485,12.3935)\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M2250.3,1107.1C2250.3,1107.1 2261.8,1065.58 2311.59,1047.05C2361.62,1028.44 2422.42,1051.13 2422.42,1051.13\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tfill: 'none',\n\t\t\t\t\t\t\t\t\tstroke: 'currentColor',\n\t\t\t\t\t\t\t\t\tstrokeWidth: '22.92px',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t\t<g transform=\"matrix(1.10085,0,0,1.10085,-212.096,-122.054)\">\n\t\t\t\t\t\t\t<g transform=\"matrix(1,0,0,1,14.3186,-0.853887)\">\n\t\t\t\t\t\t\t\t<ellipse\n\t\t\t\t\t\t\t\t\tcx={1981.62}\n\t\t\t\t\t\t\t\t\tcy={1247.49}\n\t\t\t\t\t\t\t\t\trx={87.401}\n\t\t\t\t\t\t\t\t\try={87.881}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfill: 'none',\n\t\t\t\t\t\t\t\t\t\tstroke: 'currentColor',\n\t\t\t\t\t\t\t\t\t\tstrokeWidth: '20.82px',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tx={2083.34}\n\t\t\t\t\t\t\t\ty={1231.11}\n\t\t\t\t\t\t\t\twidth={66.702}\n\t\t\t\t\t\t\t\theight={15.521}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tfill: 'none',\n\t\t\t\t\t\t\t\t\tstroke: 'currentColor',\n\t\t\t\t\t\t\t\t\tstrokeWidth: '20.82px',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tx={1892.23}\n\t\t\t\t\t\t\t\ty={1208.69}\n\t\t\t\t\t\t\t\twidth={16.306}\n\t\t\t\t\t\t\t\theight={30.182}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tfill: 'none',\n\t\t\t\t\t\t\t\t\tstroke: 'currentColor',\n\t\t\t\t\t\t\t\t\tstrokeWidth: '20.82px',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<g transform=\"matrix(-1,0,0,1,4281.79,-0.853887)\">\n\t\t\t\t\t\t\t\t<ellipse\n\t\t\t\t\t\t\t\t\tcx={1981.62}\n\t\t\t\t\t\t\t\t\tcy={1247.49}\n\t\t\t\t\t\t\t\t\trx={87.401}\n\t\t\t\t\t\t\t\t\try={87.881}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfill: 'none',\n\t\t\t\t\t\t\t\t\t\tstroke: 'currentColor',\n\t\t\t\t\t\t\t\t\t\tstrokeWidth: '20.82px',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t<g transform=\"matrix(-1,0,0,1,4296.11,0)\">\n\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\tx={2083.34}\n\t\t\t\t\t\t\t\t\ty={1231.11}\n\t\t\t\t\t\t\t\t\twidth={66.702}\n\t\t\t\t\t\t\t\t\theight={15.521}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfill: 'none',\n\t\t\t\t\t\t\t\t\t\tstroke: 'currentColor',\n\t\t\t\t\t\t\t\t\t\tstrokeWidth: '20.82px',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t<g transform=\"matrix(-1,0,0,1,4296.11,0)\">\n\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\tx={1892.23}\n\t\t\t\t\t\t\t\t\ty={1208.69}\n\t\t\t\t\t\t\t\t\twidth={16.306}\n\t\t\t\t\t\t\t\t\theight={30.182}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfill: 'none',\n\t\t\t\t\t\t\t\t\t\tstroke: 'currentColor',\n\t\t\t\t\t\t\t\t\t\tstrokeWidth: '20.82px',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/RichText.ts",
    "content": "import { binaryInlined, type Lint, LocalLinter, type Suggestion } from 'harper.js';\nimport type { LintBox } from './Box';\nimport DataBlock from './DataBlock';\nimport { getRangeForTextSpan } from './domUtils';\n\nexport type EditContentCallback = (newContent: string) => void;\n\n/**\n * Represents a rich text element on-screen.\n * It can either be a child element of a `DataBlock` or be the `DataBlock` itself.\n */\nexport default class RichText {\n\tprivate targetElement: Element;\n\tprivate parent: DataBlock;\n\tprivate editContent: EditContentCallback;\n\n\tconstructor(targetElement: Element, parent: DataBlock, editContent: EditContentCallback) {\n\t\tthis.targetElement = targetElement;\n\t\tthis.parent = parent;\n\t\tthis.editContent = editContent;\n\t}\n\n\tpublic getTargetElement(): Element {\n\t\treturn this.targetElement;\n\t}\n\n\tpublic getTextContent(): string {\n\t\treturn this.targetElement.textContent ?? '';\n\t}\n\n\tpublic computeLintBox(lint: Lint): LintBox[] {\n\t\tconst text = this.targetElement.textContent;\n\t\tconst span = lint.span();\n\t\tconst range = getRangeForTextSpan(this.targetElement, span);\n\t\t// Use a local linter because we won't be doing any expensive operations with it.\n\t\tconst linter = new LocalLinter({ binary: binaryInlined });\n\n\t\tif (range === null || text === null) {\n\t\t\tconsole.log('Could not locate range.');\n\t\t\treturn [];\n\t\t}\n\n\t\tconst targetRects = range.getClientRects();\n\t\tconst container = DataBlock.getContainer();\n\t\tconst contRect = container.getBoundingClientRect();\n\n\t\tconst boxes: LintBox[] = [];\n\n\t\tfor (const targetRect of targetRects) {\n\t\t\tboxes.push({\n\t\t\t\tx: targetRect.x - contRect.x,\n\t\t\t\ty: targetRect.y - contRect.y,\n\t\t\t\twidth: targetRect.width,\n\t\t\t\theight: targetRect.height,\n\t\t\t\tlint,\n\t\t\t\tapplySuggestion: async (sug: Suggestion) => {\n\t\t\t\t\tconst fixed = await linter.applySuggestion(text, lint, sug);\n\n\t\t\t\t\tthis.editContent(fixed);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn boxes;\n\t}\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/SidebarControl.tsx",
    "content": "import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport DataBlock from './DataBlock';\nimport Highlighter from './Highlighter';\nimport SidebarTabContainer from './SidebarTabContainer';\nimport useLintBoxes from './useLintBoxes';\n\nexport default function SidebarControl() {\n\tconst documentContainer = useMemo<Element>(() => DataBlock.getContainer(), []);\n\n\tconst [blocks, setBlocks] = useState<DataBlock[]>(DataBlock.getTerminalDataBlocks());\n\n\tconst updateBlocks = useCallback(() => setBlocks(DataBlock.getTerminalDataBlocks()), []);\n\n\tuseEffect(updateBlocks, [updateBlocks]);\n\n\tuseEffect(() => {\n\t\tconst observer = new MutationObserver(updateBlocks);\n\n\t\tobserver.observe(documentContainer, {\n\t\t\tsubtree: true,\n\t\t\tchildList: true,\n\t\t});\n\n\t\treturn () => observer.disconnect();\n\t}, [documentContainer, updateBlocks]);\n\n\tconst richTexts = useMemo(() => blocks.flatMap((block) => block.getAllRichText()), [blocks]);\n\n\tconst [lintBoxes, loadingLints] = useLintBoxes(richTexts);\n\n\tconst highlights =\n\t\tdocumentContainer &&\n\t\trichTexts.map((richText, index) => {\n\t\t\tconst boxes = lintBoxes[index] ?? [];\n\t\t\treturn createPortal(\n\t\t\t\t<Highlighter richText={richText} key={richText.getTextContent()} lintBoxes={boxes} />,\n\t\t\t\tdocumentContainer,\n\t\t\t);\n\t\t});\n\n\treturn (\n\t\t<>\n\t\t\t{highlights}\n\t\t\t<SidebarTabContainer lintBoxes={lintBoxes.flat()} loading={loadingLints} />\n\t\t</>\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/SidebarTabContainer.tsx",
    "content": "import { Panel, PanelBody, TabPanel } from '@wordpress/components';\nimport type { IgnorableLintBox } from './Box';\nimport DialectSelectRow from './DialectSelectRow';\nimport LintList from './LintList';\nimport LintSettingList from './LintSettingList';\n\nexport default function SidebarTabContainer({\n\tlintBoxes,\n\tloading,\n}: {\n\tlintBoxes: IgnorableLintBox[];\n\tloading: boolean;\n}) {\n\treturn (\n\t\t<TabPanel\n\t\t\ttabs={[\n\t\t\t\t{ name: 'errors', title: 'Errors' },\n\t\t\t\t{ name: 'settings', title: 'Settings' },\n\t\t\t]}\n\t\t>\n\t\t\t{(tab) => {\n\t\t\t\tswitch (tab.name) {\n\t\t\t\t\tcase 'errors':\n\t\t\t\t\t\treturn <LintList lintBoxes={lintBoxes} loading={loading} />;\n\t\t\t\t\tcase 'settings':\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Panel>\n\t\t\t\t\t\t\t\t<PanelBody title=\"Rules\">\n\t\t\t\t\t\t\t\t\t<DialectSelectRow />\n\t\t\t\t\t\t\t\t\t<LintSettingList />\n\t\t\t\t\t\t\t\t</PanelBody>\n\t\t\t\t\t\t\t</Panel>\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}}\n\t\t</TabPanel>\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/SuggestionControl.tsx",
    "content": "import { Button, Popover } from '@wordpress/components';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { type IgnorableLintBox, isPointInBox } from './Box';\nimport { suggestionText } from './lintUtils';\nimport { useAddToDictionary } from './usePersonalDictionary';\n\n/**\n * A control for an individual suggestion shown on the screen.\n * This includes both the underline to be shown, and the control that appears when you hover over it.\n * @param root0\n * @param root0.lintBox\n */\nexport default function SuggestionControl({ lintBox }: { lintBox: IgnorableLintBox }) {\n\tconst { x, y, width, height, lint, applySuggestion, ignoreLint } = lintBox;\n\tconst addToDictionary = useAddToDictionary();\n\n\tconst underlineRef = useRef<HTMLDivElement | null>(null);\n\tconst popoverRef = useRef<HTMLDivElement | null>(null);\n\n\tconst suggestions = useMemo(() => lint.suggestions(), [lint]);\n\tconst [showPopover, setShowPopover] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst effectTarget = underlineRef.current;\n\t\tconst popover = popoverRef.current;\n\n\t\tfunction mouseUp(e: MouseEvent) {\n\t\t\tif (effectTarget === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst underlineRect = effectTarget.getBoundingClientRect();\n\t\t\tconst popoverRect = popover?.getBoundingClientRect();\n\n\t\t\tif (\n\t\t\t\tisPointInBox([e.clientX, e.clientY], underlineRect) ||\n\t\t\t\t(popoverRect && isPointInBox([e.clientX, e.clientY], popoverRect))\n\t\t\t) {\n\t\t\t\tsetShowPopover(() => true);\n\t\t\t} else {\n\t\t\t\tsetShowPopover(false);\n\t\t\t}\n\t\t}\n\n\t\teffectTarget?.parentElement?.addEventListener('mouseup', mouseUp);\n\n\t\treturn () => {\n\t\t\teffectTarget?.parentElement?.removeEventListener('mouseup', mouseUp);\n\t\t};\n\t}, [underlineRef.current, popoverRef.current]);\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tref={underlineRef}\n\t\t\t\tclassName={`harper-underline-${lint.lint_kind()}`}\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: `${y}px`,\n\t\t\t\t\tleft: ` ${x}px`,\n\t\t\t\t\twidth: `${width}px`,\n\t\t\t\t\theight: `${height}px`,\n\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\tzIndex: 1,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{showPopover ? (\n\t\t\t\t<Popover ref={popoverRef} anchor={underlineRef.current} className=\"harper-popover\">\n\t\t\t\t\t<h2 className={`harper-underline-${lint.lint_kind()}`}>{lint.lint_kind_pretty()}</h2>\n\t\t\t\t\t<p>{lint.message()}</p>\n\t\t\t\t\t{suggestions.map((sug, index) => (\n\t\t\t\t\t\t<Button key={index} onClick={() => applySuggestion(sug)} variant=\"primary\">\n\t\t\t\t\t\t\t{suggestionText(sug.kind(), lint.get_problem_text(), sug.get_replacement_text())}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t))}\n\n\t\t\t\t\t{lint.lint_kind() === 'Spelling' ? (\n\t\t\t\t\t\t<Button onClick={() => addToDictionary(lint.get_problem_text())} variant=\"primary\">\n\t\t\t\t\t\t\tAdd “{lint.get_problem_text()}” to the dictionary\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<></>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<Button variant=\"link\" onClick={ignoreLint}>\n\t\t\t\t\t\tIgnore\n\t\t\t\t\t</Button>\n\t\t\t\t</Popover>\n\t\t\t) : (\n\t\t\t\t<></>\n\t\t\t)}\n\t\t</>\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/block.json",
    "content": "{\n\t\"$schema\": \"https://schemas.wp.org/trunk/block.json\",\n\t\"apiVersion\": 3,\n\t\"name\": \"harper/harper\",\n\t\"version\": \"0.0.1\",\n\t\"title\": \"Harper\",\n\t\"category\": \"text\",\n\t\"icon\": \"smiley\",\n\t\"description\": \"Harper is the grammar checker that respects your privacy\",\n\t\"example\": {},\n\t\"supports\": {\n\t\t\"html\": false\n\t},\n\t\"textdomain\": \"harper\",\n\t\"editorScript\": \"file:./index.js\",\n\t\"editorStyle\": \"file:./index.css\"\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/domUtils.ts",
    "content": "import type { Span } from 'harper.js';\n\n/**\n * Turn a `NodeList` into a normal JavaScript array.\n * @param collection\n */\nexport function extractFromHTMLCollection(collection: HTMLCollection): Element[] {\n\tconst elements: Element[] = [];\n\n\tfor (const el of collection) {\n\t\telements.push(el);\n\t}\n\n\treturn elements;\n}\n\n/**\n * Turn a `NodeList` into a normal JavaScript array.\n * @param list\n */\nexport function extractFromNodeList<T extends Node>(list: NodeListOf<T>): T[] {\n\tconst elements: T[] = [];\n\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst item = list[i];\n\t\telements.push(item);\n\t}\n\n\treturn elements;\n}\n\nexport function getNodesFromQuerySelector(element: Element, query: string) {\n\treturn extractFromNodeList(element.querySelectorAll(query));\n}\n\n/**\n * Flatten a provided node, and its children into a single array.\n * @param node\n */\nexport function leafNodes(node: Node): Node[] {\n\tconst out: Node[] = [];\n\n\tconst children = extractFromNodeList(node.childNodes);\n\n\tif (children.length === 0) {\n\t\treturn [node];\n\t}\n\n\tfor (const child of children) {\n\t\tconst sub = leafNodes(child);\n\t\tsub.forEach((v) => {\n\t\t\tout.push(v);\n\t\t});\n\t}\n\n\treturn out;\n}\n\n/**\n * Given an element and a Span of text inside it, compute the Range that represents the region of the DOM represented.\n * @param target\n * @param span\n */\nexport function getRangeForTextSpan(target: Element, span: Span): Range | null {\n\tconst children = leafNodes(target);\n\n\tconst range = document.createRange();\n\tlet traversed = 0;\n\n\tlet startFound = false;\n\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst child = children[i] as HTMLElement;\n\t\tconst childText = child.textContent ?? '';\n\n\t\tif (traversed + childText.length > span.start && !startFound) {\n\t\t\trange.setStart(child, span.start - traversed);\n\t\t\tstartFound = true;\n\t\t}\n\n\t\tif (startFound && traversed + childText.length >= span.end) {\n\t\t\trange.setEnd(child, span.end - traversed);\n\t\t\treturn range;\n\t\t}\n\n\t\ttraversed += childText?.length ?? 0;\n\t}\n\n\treturn null;\n}\n\n/**\n * Locate the rich text containers inside a given element.\n * Notice: this function may return the provided element.\n * @param target\n */\nexport function getRichTextContainers(target: Element): Element[] {\n\tconst elms: Element[] = [];\n\n\tif (target.classList.contains('rich-text')) {\n\t\telms.push(target);\n\t}\n\n\telms.push(...extractFromHTMLCollection(target.getElementsByClassName('rich-text')));\n\n\treturn elms;\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/index.css",
    "content": ".harper-popover > div {\n\twidth: 300px;\n\tz-index: 100;\n\tpadding: 10px;\n}\n\n.harper-solved-cont {\n\tpadding: 35px;\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n}\n\n.harper-solved-cont h2 {\n\tfont-size: 20px;\n\tfont-weight: bold;\n}\n\n.harper-solved-cont p {\n\tfont-size: 16px;\n}\n\n.harper-lint-card {\n\tmargin: 4px;\n}\n\n.harper-lint-card h2 {\n\tfont-weight: bold;\n\tfont-size: large;\n}\n\n.harper-lint-card button {\n\twidth: 100%;\n\tmargin-top: 6px;\n}\n\n.harper-lint-config-cont {\n\toverflow-x: hidden;\n}\n\n.harper-lint-config-row {\n\tpadding: 6px;\n}\n\n.harper-lint-config-row > h3 {\n\tfont-weight: bold;\n}\n\n.harper-popover > div > button {\n\twidth: 100%;\n\tmargin-top: 6px;\n}\n\n.harper-underline-Spelling {\n\tborder-bottom: 3px solid #ee4266;\n}\n\n.harper-underline-Capitalization {\n\tborder-bottom: 3px solid #540d6e;\n}\n\n.harper-underline-Style {\n\tborder-bottom: 3px solid #ffd23f;\n}\n\n.harper-underline-Formatting {\n\tborder-bottom: 3px solid #540d6e;\n}\n\n.harper-underline-Repetition {\n\tborder-bottom: 3px solid #3bceac;\n}\n\n.harper-underline-Enhancement {\n\tborder-bottom: 3px solid #0ead69;\n}\n\n.harper-underline-Readability {\n\tborder-bottom: 3px solid #0ead69;\n}\n\n.harper-underline-WordChoice {\n\tborder-bottom: 3px solid #0ead69;\n}\n\n.harper-underline-Miscellaneous {\n\tborder-bottom: 3px solid #3bceac;\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/index.tsx",
    "content": "import { PluginSidebar, PluginSidebarMoreMenuItem } from '@wordpress/edit-post';\nimport { registerPlugin } from '@wordpress/plugins';\nimport Logo from './Logo';\nimport SidebarControl from './SidebarControl';\nimport './index.css';\nimport LinterProvider from './LinterProvider';\n\nfunction Sidebar() {\n\treturn (\n\t\t<>\n\t\t\t<PluginSidebarMoreMenuItem target=\"harper-sidebar\" icon={Logo()}>\n\t\t\t\tHarper\n\t\t\t</PluginSidebarMoreMenuItem>\n\t\t\t<PluginSidebar name=\"harper-sidebar\" title=\"Harper\" icon={Logo}>\n\t\t\t\t<LinterProvider>\n\t\t\t\t\t<SidebarControl />\n\t\t\t\t</LinterProvider>\n\t\t\t</PluginSidebar>\n\t\t</>\n\t);\n}\n\n// @ts-expect-error\nif (!window.__harperSidebarRegistered) {\n\tregisterPlugin('harper-sidebar', { render: Sidebar });\n\t// @ts-expect-error\n\twindow.__harperSidebarRegistered = true;\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/lintUtils.ts",
    "content": "import { SuggestionKind } from 'harper.js';\n\n/**\n * Produce the UI text shown inside suggestion buttons.\n * @param kind\n * @param problemText\n * @param replacementText\n */\nexport function suggestionText(\n\tkind: SuggestionKind,\n\tproblemText: string,\n\treplacementText: string,\n): string {\n\tif (kind === SuggestionKind.Remove) {\n\t\treturn `Remove “${problemText}”`;\n\t} else if (kind === SuggestionKind.Replace) {\n\t\treturn `Replace with “${replacementText}”`;\n\t}\n\treturn `Insert “${replacementText}”`;\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/useDialect.ts",
    "content": "import { useDispatch, useSelect } from '@wordpress/data';\nimport { Dialect } from 'harper.js';\nimport { useCallback, useMemo } from 'react';\n\nconst KEY = 'dialect';\n\nexport default function useDialect(): [Dialect, (newState: Dialect) => void] {\n\tconst dialect = useSelect((select) => select('core/preferences').get('harper-wp', KEY), []);\n\n\tconst { set } = useDispatch('core/preferences');\n\n\tconst setConfig = useCallback((newValue) => {\n\t\tset('harper-wp', KEY, newValue);\n\t}, []);\n\n\tconst nonNull = useMemo(() => {\n\t\tif (dialect == null) {\n\t\t\treturn Dialect.American;\n\t\t}\n\t\treturn dialect;\n\t}, [dialect]);\n\n\treturn [nonNull, setConfig];\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/useIgnoredLintState.ts",
    "content": "import { useDispatch, useSelect } from '@wordpress/data';\nimport type { Lint } from 'harper.js';\nimport { useCallback } from 'react';\nimport { useLinter } from './LinterProvider';\n\nconst KEY = 'ignoredLints';\n\nexport default function useIgnoredLintState(): [string | undefined, (newState: string) => void] {\n\tconst ignoredLintState = useSelect(\n\t\t(select) => select('core/preferences').get('harper-wp', KEY),\n\t\t[],\n\t);\n\n\tconst { set } = useDispatch('core/preferences');\n\n\tconst updateState = useCallback((newValue: string) => set('harper-wp', KEY, newValue), [set]);\n\n\treturn [ignoredLintState, updateState];\n}\n\n/** Get a callback that adds a lint to the global ignored lint state. */\nexport function useIgnoreLint(): (lint: Lint) => Promise<void> {\n\tconst linter = useLinter();\n\tconst [ignoredLintState, setIgnoredLintState] = useIgnoredLintState();\n\n\treturn async (lint) => {\n\t\tawait linter.clearIgnoredLints();\n\n\t\tif (ignoredLintState) {\n\t\t\tawait linter.importIgnoredLints(ignoredLintState);\n\t\t}\n\n\t\tawait linter.ignoreLint(lint);\n\t\tsetIgnoredLintState(await linter.exportIgnoredLints());\n\t};\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/useLintBoxes.ts",
    "content": "import type { Lint } from 'harper.js';\nimport { useCallback, useEffect, useState } from 'react';\nimport type { IgnorableLintBox } from './Box';\nimport { useLinter } from './LinterProvider';\nimport type RichText from './RichText';\nimport useDialect from './useDialect';\nimport useIgnoredLintState, { useIgnoreLint } from './useIgnoredLintState';\nimport useLintConfig from './useLintConfig';\nimport usePersonalDictionary from './usePersonalDictionary';\n\n/**\n * Lint given elements and return the resulting error targets.\n * Provides a loading state as well.\n * @param richTexts\n */\nexport default function useLintBoxes(richTexts: RichText[]): [IgnorableLintBox[][], boolean] {\n\tconst linter = useLinter();\n\tconst [config] = useLintConfig();\n\tconst [dialect] = useDialect();\n\tconst [ignoreState] = useIgnoredLintState();\n\tconst [personalDictionary] = usePersonalDictionary();\n\tconst ignoreLint = useIgnoreLint();\n\n\tconst [targetBoxes, setTargetBoxes] = useState<IgnorableLintBox[][]>([]);\n\tconst [lints, setLints] = useState<Lint[][]>([]);\n\tconst [loading, setLoading] = useState(true);\n\n\tconst updateLints = useCallback(async () => {\n\t\tif ((await linter.exportIgnoredLints()) !== ignoreState) {\n\t\t\tawait linter.clearIgnoredLints();\n\t\t}\n\n\t\tconsole.log(dialect);\n\n\t\tawait linter.setDialect(dialect);\n\n\t\tif (personalDictionary) {\n\t\t\tawait linter.importWords(personalDictionary);\n\t\t}\n\n\t\tif (JSON.stringify(await linter.getLintConfig()) !== JSON.stringify(config)) {\n\t\t\tawait linter.setLintConfig(config);\n\t\t}\n\n\t\tif (ignoreState) {\n\t\t\tawait linter.importIgnoredLints(ignoreState);\n\t\t}\n\n\t\t// We assume that a given index always refers to the same rich text field.\n\t\tconst newLints = await Promise.all(\n\t\t\trichTexts.map(async (richText) => {\n\t\t\t\tconst contents = richText.getTextContent();\n\n\t\t\t\treturn await linter.lint(contents);\n\t\t\t}),\n\t\t);\n\n\t\tsetLoading(false);\n\t\tsetLints(newLints);\n\t}, [richTexts, linter, config, ignoreState, personalDictionary, dialect]);\n\n\tuseEffect(() => {\n\t\tupdateLints();\n\n\t\tconst observers = richTexts.map((richText) => {\n\t\t\tconst observer = new MutationObserver(updateLints);\n\t\t\tobserver.observe(richText.getTargetElement(), {\n\t\t\t\tchildList: true,\n\t\t\t\tcharacterData: true,\n\t\t\t\tsubtree: true,\n\t\t\t});\n\t\t\treturn observer;\n\t\t});\n\n\t\treturn () => {\n\t\t\tobservers.forEach((observer) => {\n\t\t\t\tobserver.disconnect();\n\t\t\t});\n\t\t};\n\t}, [richTexts, updateLints]);\n\n\t// Update the lint boxes each frame.\n\t// Probably overkill.\n\t//\n\t// TODO: revisit this to do more lazily.\n\t// Maybe `onLayoutEffect`?\n\tuseEffect(() => {\n\t\tlet running = true;\n\n\t\tfunction onFrame() {\n\t\t\tconst lintBoxes = lints.map((lintForText, index) => {\n\t\t\t\tconst richText = richTexts[index];\n\t\t\t\treturn lintForText\n\t\t\t\t\t.flatMap((lint) => richText.computeLintBox(lint))\n\t\t\t\t\t.map((box) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...box,\n\t\t\t\t\t\t\tignoreLint: () => ignoreLint(box.lint),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t});\n\n\t\t\tsetTargetBoxes(lintBoxes);\n\n\t\t\tif (running) {\n\t\t\t\trequestAnimationFrame(onFrame);\n\t\t\t}\n\t\t}\n\n\t\trequestAnimationFrame(onFrame);\n\n\t\treturn () => {\n\t\t\trunning = false;\n\t\t};\n\t}, [lints, richTexts, ignoreLint]);\n\n\treturn [targetBoxes, loading];\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/useLintConfig.ts",
    "content": "import { useDispatch, useSelect } from '@wordpress/data';\nimport type { LintConfig } from 'harper.js';\nimport { merge } from 'lodash-es';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useLinter } from './LinterProvider';\n\nconst KEY = 'lintConfig';\n\nexport default function useLintConfig(): [LintConfig, (newState: LintConfig) => void] {\n\tconst defaultConfig = useDefaultLintConfig();\n\tconst lintConfig = useSelect((select) => select('core/preferences').get('harper-wp', KEY), []);\n\n\tconst { set } = useDispatch('core/preferences');\n\n\tconst setConfig = useCallback((newValue) => {\n\t\tset('harper-wp', KEY, newValue);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tlintConfig == null ||\n\t\t\tObject.entries(lintConfig).length < Object.entries(defaultConfig).length\n\t\t) {\n\t\t\tmerge(lintConfig, defaultConfig);\n\t\t\tsetConfig({ ...lintConfig });\n\t\t}\n\t}, [defaultConfig, setConfig]);\n\n\tconst nonNull = useMemo(() => {\n\t\tif (lintConfig == null) {\n\t\t\treturn defaultConfig;\n\t\t}\n\t\treturn lintConfig;\n\t}, [lintConfig]);\n\n\treturn [nonNull, setConfig];\n}\n\nexport function useDefaultLintConfig(): LintConfig {\n\tconst linter = useLinter();\n\tconst [defaultConfig, setDefaultConfig] = useState({});\n\n\tuseEffect(() => {\n\t\tlinter.getDefaultLintConfig().then(setDefaultConfig);\n\t}, [linter]);\n\n\treturn defaultConfig;\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/usePersonalDictionary.ts",
    "content": "import { useDispatch, useSelect } from '@wordpress/data';\nimport { useCallback } from 'react';\n\nconst KEY = 'personalDictionary';\n\n/** Read and add to the user's personal dictionary. */\nexport default function usePersonalDictionary(): [\n\tstring[] | undefined,\n\t(updatedDictionary: string[]) => void,\n] {\n\tconst personalDictionary = useSelect(\n\t\t(select) => select('core/preferences').get('harper-wp', KEY),\n\t\t[],\n\t);\n\n\tconst { set } = useDispatch('core/preferences');\n\n\tconst updateState = useCallback(\n\t\t(updatedDictionary: string[]) => set('harper-wp', KEY, updatedDictionary),\n\t\t[set],\n\t);\n\n\treturn [personalDictionary, updateState];\n}\n\n/** Get a callback that adds a word to the personal dictionary. */\nexport function useAddToDictionary(): (word: string) => void {\n\tconst [dict, setDict] = usePersonalDictionary();\n\n\treturn useCallback(\n\t\t(word: string) => {\n\t\t\tif (!dict?.includes(word)) {\n\t\t\t\tsetDict([...(dict ?? []), word]);\n\t\t\t}\n\t\t},\n\t\t[dict, setDict],\n\t);\n}\n"
  },
  {
    "path": "packages/wordpress-plugin/src/harper/useToggle.ts",
    "content": "import { useState } from 'react';\n\nexport default function useToggle(): [boolean, () => void] {\n\tconst [value, setValue] = useState(false);\n\n\treturn [value, () => setValue(!value)];\n}\n"
  },
  {
    "path": "pnpm-workspace.yaml",
    "content": "packages:\n  - packages/*\n  - harper-wasm/pkg\n  - packages/harper.js/examples/*\ncatalog:\n  typescript: ^5.9.3\n  tslib: ^2.8.1\n  \"@types/node\": ^22.13.10\n  \"@babel/runtime\": ^7.26.10\nonlyBuiltDependencies:\n  - \"@biomejs/biome\"\n  - \"@parcel/watcher\"\n  - \"@swc/core\"\n  - \"@vscode/vsce-sign\"\n  - core-js\n  - core-js-pure\n  - esbuild\n  - keytar\n  - msw\n  - svelte-preprocess\n  - \"@tailwindcss/oxide\"\n"
  },
  {
    "path": "rust-toolchain.toml",
    "content": "[toolchain]\nchannel = \"stable\"\ntargets = [\"wasm32-unknown-unknown\"]\n"
  },
  {
    "path": "rustfmt.toml",
    "content": "newline_style = \"Unix\"\nuse_field_init_shorthand = true\nreorder_imports = true\n"
  },
  {
    "path": "weir_rules/AtLeasToLeast.weir",
    "content": "expr main <([(at leas)]), leas>\n\nlet message \"Use the standard phrase with `least` here.\"\nlet description \"Fixes the frequent typo `at leas` when the intended expression is `at least`.\"\nlet kind \"Typo\"\nlet becomes \"least\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"At leas we shipped the patch.\" \"At least we shipped the patch.\"\ntest \"at leas I remembered to push.\" \"at least I remembered to push.\"\ntest \"We can, at leas, retry tomorrow.\" \"We can, at least, retry tomorrow.\"\ntest \"AT LEAS TRY AGAIN.\" \"AT LEAST TRY AGAIN.\"\ntest \"I guess at leas one test should pass.\" \"I guess at least one test should pass.\"\ntest \"At leas, this error is reproducible.\" \"At least, this error is reproducible.\"\n\n# True negatives / false positives\n\ntest \"At least we shipped the patch.\" \"At least we shipped the patch.\"\ntest \"I have a leas on that apartment.\" \"I have a leas on that apartment.\"\ntest \"Please at leisure review the draft.\" \"Please at leisure review the draft.\"\ntest \"The least risky option won.\" \"The least risky option won.\"\ntest \"They said: \\\"at leash\\\" as a joke.\" \"They said: \\\"at leash\\\" as a joke.\"\ntest \"The release is at, leas, in notes.\" \"The release is at, leas, in notes.\"\n\n# Boundary and false-negative coverage\n\ntest \"At leas? Maybe.\" \"At least? Maybe.\"\ntest \"If not now, at leas tomorrow.\" \"If not now, at least tomorrow.\"\ntest \"We are at leas halfway done.\" \"We are at least halfway done.\"\ntest \"At leas!\" \"At least!\"\ntest \"I wrote \\\"at leas\\\" twice: at leas.\" \"I wrote \\\"at least\\\" twice: at least.\"\ntest \"Looking at least-cost models.\" \"Looking at least-cost models.\"\n"
  },
  {
    "path": "weir_rules/BelieveInPreposition.weir",
    "content": "expr main [(believe to)]\n\nlet message \"This verb usually takes `in` here.\"\nlet description \"Replaces `believe to` with `believe in` in common object-taking usage.\"\nlet kind \"Grammar\"\nlet becomes \"believe in\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"I believe to this plan.\" \"I believe in this plan.\"\ntest \"They believe to ghosts.\" \"They believe in ghosts.\"\ntest \"Many teens believe to luck.\" \"Many teens believe in luck.\"\ntest \"Do you believe to fate?\" \"Do you believe in fate?\"\ntest \"We still believe to science.\" \"We still believe in science.\"\ntest \"I believe to your potential.\" \"I believe in your potential.\"\ntest \"BELIEVE TO YOURSELF FOR ONCE.\" \"BELIEVE IN YOURSELF FOR ONCE.\"\ntest \"I wonder if you believe to miracles.\" \"I wonder if you believe in miracles.\"\n\n# True negatives / false positives\n\nallows \"I believe in this plan.\"\nallows \"They believe that this plan works.\"\nallows \"I choose to believe this story.\"\nallows \"We believe in each other.\"\nallows \"Do you believe in fate?\"\n\n# Known false positives (current boundary)\n\ntest \"I believe to this day that we were right.\" \"I believe in this day that we were right.\"\ntest \"I believe to this moment it is true.\" \"I believe in this moment it is true.\"\n\n# Potential false negatives (accepted gaps)\n\nallows \"She believes to her team.\"\nallows \"We believed to that strategy for years.\"\nallows \"He is believing to the mission again.\"\n"
  },
  {
    "path": "weir_rules/BetterOffPhrase.weir",
    "content": "expr main (better of)\n\nlet message \"This expression usually takes `off` instead of `of`.\"\nlet description \"Rewrites `better of` to `better off` in common comparative phrasing.\"\nlet kind \"Grammar\"\nlet becomes \"better off\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"People who are better of can donate more.\" \"People who are better off can donate more.\"\ntest \"You will be better of waiting until tomorrow.\" \"You will be better off waiting until tomorrow.\"\ntest \"I feel better of without that app.\" \"I feel better off without that app.\"\ntest \"We are better of focusing on quality.\" \"We are better off focusing on quality.\"\ntest \"They were better of before the update.\" \"They were better off before the update.\"\ntest \"She is far better of now.\" \"She is far better off now.\"\ntest \"He'd be better of at home.\" \"He'd be better off at home.\"\ntest \"The team is BETTER OF with clear goals.\" \"The team is BETTER OFF with clear goals.\"\ntest \"Are we better of if we delay launch?\" \"Are we better off if we delay launch?\"\n\n# True negatives / false-positive checks\n\ntest \"People who are better off can donate more.\" \"People who are better off can donate more.\"\ntest \"This is a matter of better options.\" \"This is a matter of better options.\"\ntest \"Of course this is better overall.\" \"Of course this is better overall.\"\ntest \"He offered better outcomes, not quick fixes.\" \"He offered better outcomes, not quick fixes.\"\ntest \"They got off the train early.\" \"They got off the train early.\"\ntest \"A better offer arrived yesterday.\" \"A better offer arrived yesterday.\"\n\n# Boundary / accepted limits\n\nallows \"She chose the better option from the list.\"\nallows \"Pick the best design from these three mockups.\"\nallows \"They discussed old and new methods in detail.\"\n"
  },
  {
    "path": "weir_rules/BluRayHyphen.weir",
    "content": "expr main (blu ray)\n\nlet message \"Use the hyphenated spelling for this media format.\"\nlet description \"Joins the two-word spelling of the optical disc format into the standard compound form.\"\nlet kind \"Punctuation\"\nlet becomes \"blu-ray\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"I ordered a Blu ray player.\" \"I ordered a Blu-ray player.\"\ntest \"This movie ships on blu ray.\" \"This movie ships on blu-ray.\"\ntest \"Do you still buy BLU RAY discs?\" \"Do you still buy BLU-RAY discs?\"\ntest \"A Blu ray drive is installed.\" \"A Blu-ray drive is installed.\"\ntest \"They found cheap blu ray movies.\" \"They found cheap blu-ray movies.\"\ntest \"BLU RAY\" \"BLU-RAY\"\n\n# False positives / true negatives\n\ntest \"I ordered a Blu-ray player.\" \"I ordered a Blu-ray player.\"\ntest \"The ray looked blue in that photo.\" \"The ray looked blue in that photo.\"\ntest \"We watched a DVD last night.\" \"We watched a DVD last night.\"\ntest \"The Blu rays are on the shelf.\" \"The Blu rays are on the shelf.\"\ntest \"A blur ay effect appeared in the lens.\" \"A blur ay effect appeared in the lens.\"\ntest \"The brand name is Blue Ray Labs.\" \"The brand name is Blue Ray Labs.\"\n\n# False negatives and edge behavior checks\n\ntest \"blu ray\" \"blu-ray\"\ntest \"Blu ray, DVD, and VHS.\" \"Blu-ray, DVD, and VHS.\"\ntest \"I keep one blu ray.\" \"I keep one blu-ray.\"\ntest \"Many people said BLU ray still works.\" \"Many people said BLU-ray still works.\"\n"
  },
  {
    "path": "weir_rules/CauseItIsBecause.weir",
    "content": "expr main (cause it is)\n\nlet message \"Prefer `because it is` in this clause.\"\nlet description \"Normalizes informal `cause it is` to the standard subordinating form in explanatory clauses.\"\nlet kind \"Style\"\nlet becomes \"because it is\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"Cause it is late, we should leave.\" \"Because it is late, we should leave.\"\ntest \"cause it is noisy, I use headphones.\" \"because it is noisy, I use headphones.\"\ntest \"I stayed home cause it is raining.\" \"I stayed home because it is raining.\"\ntest \"We paused deployment cause it is unstable.\" \"We paused deployment because it is unstable.\"\ntest \"CAUSE IT IS CLEAR NOW.\" \"BECAUSE IT IS CLEAR NOW.\"\ntest \"Cause it is simple, ship it.\" \"Because it is simple, ship it.\"\ntest \"They agreed cause it is practical.\" \"They agreed because it is practical.\"\n\n# False negatives (intentionally out of scope)\n\ntest \"Cause it was late, we should leave.\" \"Cause it was late, we should leave.\"\ntest \"Cause it's late, we should leave.\" \"Cause it's late, we should leave.\"\ntest \"Cause it has changed, reread docs.\" \"Cause it has changed, reread docs.\"\ntest \"Cause it had failed, we rolled back.\" \"Cause it had failed, we rolled back.\"\n\n# True negatives / false positives\n\ntest \"Because it is late, we should leave.\" \"Because it is late, we should leave.\"\ntest \"Stress can cause it is not obvious.\" \"Stress can because it is not obvious.\"\ntest \"The cause it is unclear.\" \"The because it is unclear.\"\ntest \"They discuss cause and effect.\" \"They discuss cause and effect.\"\ntest \"Because it was late, we should leave.\" \"Because it was late, we should leave.\"\ntest \"No one said cause it is wrong.\" \"No one said because it is wrong.\"\n"
  },
  {
    "path": "weir_rules/ColdModalTypo.weir",
    "content": "expr subjects [i, you, we, they, he, she, it]\nexpr baseVerbs [be, have, do, go, get, make, take, see, say, know, think, find, use, work, help, start, stop, leave, feel, need, want]\nexpr main <([(@subjects cold @baseVerbs), (@subjects cold ADV @baseVerbs), (@subjects cold not @baseVerbs), (@subjects cold never @baseVerbs), (@subjects cold ADV not @baseVerbs)]), cold>\n\nlet message \"This looks like a modal typo.\"\nlet description \"Rewrites `cold` to `could` when it appears in common subject-plus-verb modal contexts.\"\nlet kind \"Typo\"\nlet becomes \"could\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"I cold go now.\" \"I could go now.\"\ntest \"You cold make dinner tonight.\" \"You could make dinner tonight.\"\ntest \"We cold take the train.\" \"We could take the train.\"\ntest \"They cold see the issue.\" \"They could see the issue.\"\ntest \"He cold feel the difference.\" \"He could feel the difference.\"\ntest \"She cold help us later.\" \"She could help us later.\"\ntest \"It cold work this time.\" \"It could work this time.\"\ntest \"I cold not find the setting.\" \"I could not find the setting.\"\ntest \"We cold never know the reason.\" \"We could never know the reason.\"\ntest \"They cold really use a break.\" \"They could really use a break.\"\ntest \"I COLD GO IF NEEDED.\" \"I COULD GO IF NEEDED.\"\n\n# False positives / true negatives\n\nallows \"It was cold outside all day.\"\nallows \"A cold drink helped a lot.\"\nallows \"He caught a cold last week.\"\nallows \"The soup went cold quickly.\"\nallows \"I enjoy cold brew coffee.\"\nallows \"She gave me a cold stare.\"\n\n# False negatives (accepted limits)\n\nallows \"I cold call prospects each morning.\"\nallows \"You cold text me later.\"\nallows \"They cold build a prototype fast.\"\n"
  },
  {
    "path": "weir_rules/DoubleCheckHyphen.weir",
    "content": "expr main (double check)\n\nlet message \"Use the hyphenated form in this compound.\"\nlet description \"Normalizes the common two-word form `double check` to `double-check`.\"\nlet kind \"Punctuation\"\nlet becomes \"double-check\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"Please double check the report before sending.\" \"Please double-check the report before sending.\"\ntest \"I always double check numbers in production.\" \"I always double-check numbers in production.\"\ntest \"Can you double check this again?\" \"Can you double-check this again?\"\ntest \"We should double check with legal.\" \"We should double-check with legal.\"\ntest \"You need to double check every file.\" \"You need to double-check every file.\"\ntest \"DOUBLE CHECK THE FINAL TOTAL.\" \"DOUBLE-CHECK THE FINAL TOTAL.\"\ntest \"double check this quickly.\" \"double-check this quickly.\"\ntest \"If unsure, double check.\" \"If unsure, double-check.\"\n\n# True negatives / false positives\n\ntest \"Please double-click the button.\" \"Please double-click the button.\"\ntest \"Please double click the button.\" \"Please double click the button.\"\ntest \"They double checked the config after deploy.\" \"They double checked the config after deploy.\"\ntest \"We are double checking every migration.\" \"We are double checking every migration.\"\ntest \"She double checks each invoice manually.\" \"She double checks each invoice manually.\"\ntest \"A careful check is still needed.\" \"A careful check is still needed.\"\ntest \"The team did one more review.\" \"The team did one more review.\"\ntest \"double-check the report before sending.\" \"double-check the report before sending.\"\ntest \"Double-checking takes discipline.\" \"Double-checking takes discipline.\"\n"
  },
  {
    "path": "weir_rules/EachOthersPossessive.weir",
    "content": "expr main <((each others) [NOUN, PROPN, ADJ, DET]), (each others)>\n\nlet message \"Use the reciprocal possessive form here.\"\nlet description \"Rewrites `each others` to `each other's` when it modifies a following noun phrase.\"\nlet kind \"Grammar\"\nlet becomes \"each other's\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"They reviewed each others code before release.\" \"They reviewed each other's code before release.\"\ntest \"We checked each others notes after class.\" \"We checked each other's notes after class.\"\ntest \"The two teams respected each others traditions.\" \"The two teams respected each other's traditions.\"\ntest \"The siblings borrowed each others bikes.\" \"The siblings borrowed each other's bikes.\"\ntest \"Please verify each others entries.\" \"Please verify each other's entries.\"\ntest \"They corrected each others grammar in chat.\" \"They corrected each other's grammar in chat.\"\ntest \"Each others schedules kept drifting.\" \"Each other's schedules kept drifting.\"\ntest \"EACH OTHERS PROJECTS WERE MERGED.\" \"EACH OTHER'S PROJECTS WERE MERGED.\"\ntest \"Writers should respect each others voices.\" \"Writers should respect each other's voices.\"\ntest \"Designers critique each others drafts weekly.\" \"Designers critique each other's drafts weekly.\"\n\n# False positives / true negatives\n\ntest \"They reviewed each other's code before release.\" \"They reviewed each other's code before release.\"\ntest \"They reviewed each other during rehearsals.\" \"They reviewed each other during rehearsals.\"\ntest \"Others' opinions were shared in the thread.\" \"Others' opinions were shared in the thread.\"\ntest \"Each other was mentioned in the report.\" \"Each other was mentioned in the report.\"\ntest \"They checked others code before release.\" \"They checked others code before release.\"\ntest \"They checked others' code before release.\" \"They checked others' code before release.\"\n\n# False negatives (known limitation: does not target misspelled reciprocal phrases with extra apostrophes)\n\nallows \"They reviewed each others' code before release.\"\nallows \"They corrected each others' grammar in chat.\"\n"
  },
  {
    "path": "weir_rules/EasyGoingCompoundAdjective.weir",
    "content": "expr main <(easy going [person, people, attitude, style, approach, tone, manner, personality, vibe, team, culture, workflow]), ( )>\n\nlet message \"Hyphenate this compound modifier.\"\nlet description \"Adds a hyphen in `easy going` when it directly describes a following noun.\"\nlet kind \"Punctuation\"\nlet becomes \"-\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"He is an easy going person.\" \"He is an easy-going person.\"\ntest \"She has an easy going attitude.\" \"She has an easy-going attitude.\"\ntest \"They built an easy going culture.\" \"They built an easy-going culture.\"\ntest \"We want an easy going workflow.\" \"We want an easy-going workflow.\"\ntest \"I like her easy going style.\" \"I like her easy-going style.\"\ntest \"That is an easy going approach.\" \"That is an easy-going approach.\"\ntest \"Our coach keeps an easy going tone.\" \"Our coach keeps an easy-going tone.\"\ntest \"AN EASY GOING TEAM CAN STILL WIN.\" \"AN EASY-GOING TEAM CAN STILL WIN.\"\n\n# False positives / true negatives\n\ntest \"He is easy going.\" \"He is easy going.\"\ntest \"They are going easy on us.\" \"They are going easy on us.\"\ntest \"We took it easy going forward.\" \"We took it easy going forward.\"\ntest \"She has an easy-going attitude.\" \"She has an easy-going attitude.\"\ntest \"This is an easy and going concern.\" \"This is an easy and going concern.\"\ntest \"An easy path is better.\" \"An easy path is better.\"\ntest \"They welcomed easy going people.\" \"They welcomed easy-going people.\"\n\n# False negatives / boundary behavior\n\ntest \"She is an easy really going manager.\" \"She is an easy really going manager.\"\ntest \"It felt easy going into finals.\" \"It felt easy going into finals.\"\ntest \"The easy going-away party was short.\" \"The easy going-away party was short.\"\ntest \"The phrase easy going appears in notes.\" \"The phrase easy going appears in notes.\"\n"
  },
  {
    "path": "weir_rules/ExistentialPluralAgreement.weir",
    "content": "expr manyCase <((is there many !a), (is there))>\nexpr tooManyCase <((is there too many), (is there))>\nexpr fewCase <((is there few), (is there))>\nexpr tooFewCase <((is there too few), (is there))>\nexpr lotsCase <((is there lots of), (is there))>\nexpr main [@manyCase, @tooManyCase, @fewCase, @tooFewCase, @lotsCase]\n\nlet message \"Use the plural verb form in this existential construction.\"\nlet description \"Adjusts `is there` to `are there` when it introduces a plural quantity phrase.\"\nlet kind \"Grammar\"\nlet becomes \"are there\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"Is there many users waiting?\" \"Are there many users waiting?\"\ntest \"Is there few tickets left?\" \"Are there few tickets left?\"\ntest \"Is there lots of noise tonight?\" \"Are there lots of noise tonight?\"\ntest \"Is there too many redirects in this chain?\" \"Are there too many redirects in this chain?\"\ntest \"Is there too few backups on that node?\" \"Are there too few backups on that node?\"\ntest \"is there many examples in the guide?\" \"are there many examples in the guide?\"\ntest \"IS THERE FEW OPTIONS REMAINING?\" \"ARE THERE FEW OPTIONS REMAINING?\"\ntest \"I asked, is there many reasons to wait?\" \"I asked, are there many reasons to wait?\"\ntest \"Is there lots of updates this morning?\" \"Are there lots of updates this morning?\"\n\n# True negatives / false positives\n\nallows \"Is there a user waiting?\"\nallows \"Is there an update?\"\nallows \"Are there many users waiting?\"\nallows \"There is many users waiting.\"\nallows \"Is there many a reason to pause?\"\nallows \"Is there lots to do today?\"\n\n# Potential false negatives (accepted gaps)\n\nallows \"Is there, many users say, no quick fix?\"\nallows \"Is there really many users waiting?\"\n"
  },
  {
    "path": "weir_rules/ExitedExcitedContext.weir",
    "content": "expr main <([((am exited [about, for, to, that])), ((are exited [about, for, to, that])), ((is exited [about, for, to, that])), ((was exited [about, for, to, that])), ((were exited [about, for, to, that])), ((be exited [about, for, to, that])), ((been exited [about, for, to, that])), ((being exited [about, for, to, that])), ((am ADV exited [about, for, to, that])), ((are ADV exited [about, for, to, that])), ((is ADV exited [about, for, to, that])), ((was ADV exited [about, for, to, that])), ((were ADV exited [about, for, to, that])), ((be ADV exited [about, for, to, that])), ((been ADV exited [about, for, to, that])), ((being ADV exited [about, for, to, that])), ((am [really, very, so, super, quite, extremely] exited [about, for, to, that])), ((are [really, very, so, super, quite, extremely] exited [about, for, to, that])), ((is [really, very, so, super, quite, extremely] exited [about, for, to, that])), ((was [really, very, so, super, quite, extremely] exited [about, for, to, that])), ((were [really, very, so, super, quite, extremely] exited [about, for, to, that])), ((be [really, very, so, super, quite, extremely] exited [about, for, to, that])), ((been [really, very, so, super, quite, extremely] exited [about, for, to, that])), ((being [really, very, so, super, quite, extremely] exited [about, for, to, that]))]), exited>\n\nlet message \"This word choice looks off for this meaning.\"\nlet description \"Changes `exited` to `excited` when the sentence indicates enthusiasm or anticipation.\"\nlet kind \"Typo\"\nlet becomes \"excited\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"She is exited about the launch.\" \"She is excited about the launch.\"\ntest \"I am exited for the trip.\" \"I am excited for the trip.\"\ntest \"They were exited to join.\" \"They were excited to join.\"\ntest \"We are really exited about this update.\" \"We are really excited about this update.\"\ntest \"He was very exited for the game.\" \"He was very excited for the game.\"\ntest \"It is so exited to start.\" \"It is so excited to start.\"\ntest \"YOU ARE EXITED ABOUT THIS.\" \"YOU ARE EXCITED ABOUT THIS.\"\ntest \"I am exited that we shipped.\" \"I am excited that we shipped.\"\n\n# False positives / true negatives\n\ntest \"The process exited with code 1.\" \"The process exited with code 1.\"\ntest \"She exited the editor without saving.\" \"She exited the editor without saving.\"\ntest \"The container is in exited state.\" \"The container is in exited state.\"\ntest \"He is excited about the launch.\" \"He is excited about the launch.\"\ntest \"They were excited to join.\" \"They were excited to join.\"\ntest \"The user exited, then rejoined.\" \"The user exited, then rejoined.\"\n\n# False negatives / boundary behavior\n\ntest \"I feel exited about this.\" \"I feel exited about this.\"\ntest \"Everyone seemed exited to help.\" \"Everyone seemed exited to help.\"\ntest \"She sounded exited for the interview.\" \"She sounded exited for the interview.\"\ntest \"I got exited about this.\" \"I got exited about this.\"\n"
  },
  {
    "path": "weir_rules/FirstPersonModifierHyphen.weir",
    "content": "expr main <([first, second, third] person [shooter, shooters, game, games, narrative, narratives, perspective, perspectives, view, voice, voices, pronoun, pronouns, account, accounts, mode, modes]), ( )>\n\nlet message \"Hyphenate this compound modifier.\"\nlet description \"Adds a hyphen to ordinal-person modifiers when they directly describe a following noun.\"\nlet kind \"Punctuation\"\nlet becomes \"-\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"I enjoy first person games.\" \"I enjoy first-person games.\"\ntest \"She wrote a first person narrative.\" \"She wrote a first-person narrative.\"\ntest \"They published a second person account.\" \"They published a second-person account.\"\ntest \"The essay uses third person voice.\" \"The essay uses third-person voice.\"\ntest \"We switched to first person mode.\" \"We switched to first-person mode.\"\ntest \"FIRST PERSON SHOOTERS dominated the event.\" \"FIRST-PERSON SHOOTERS dominated the event.\"\ntest \"This is a Third Person Perspective.\" \"This is a Third-Person Perspective.\"\ntest \"He prefers second person pronouns in examples.\" \"He prefers second-person pronouns in examples.\"\n\n# True negatives / false-positive checks\n\ntest \"The narrator is in first person.\" \"The narrator is in first person.\"\ntest \"Speak in second person.\" \"Speak in second person.\"\ntest \"That paragraph is third person.\" \"That paragraph is third person.\"\ntest \"I like first-person games.\" \"I like first-person games.\"\ntest \"First person, shooter or strategy, both are fun.\" \"First person, shooter or strategy, both are fun.\"\ntest \"The first person who arrived signed in.\" \"The first person who arrived signed in.\"\n\n# Boundary checks\n\ntest \"A first person view helps in tutorials.\" \"A first-person view helps in tutorials.\"\ntest \"The guide explains third person pronouns clearly.\" \"The guide explains third-person pronouns clearly.\"\n"
  },
  {
    "path": "weir_rules/FullWithToOf.weir",
    "content": "expr main (full with)\n\nlet message \"Use `of` after `full` in this construction.\"\nlet description \"Fixes the nonstandard phrase where `full` is followed by `with`.\"\nlet kind \"Usage\"\nlet becomes \"full of\"\n\ntest \"The pantry is full with snacks.\" \"The pantry is full of snacks.\"\ntest \"Our inbox is full with alerts again.\" \"Our inbox is full of alerts again.\"\ntest \"That thread is full with repeated arguments.\" \"That thread is full of repeated arguments.\"\ntest \"Her notebook was full with sketches.\" \"Her notebook was full of sketches.\"\ntest \"The comment section is full with bots.\" \"The comment section is full of bots.\"\ntest \"A shared folder can be full with duplicate files.\" \"A shared folder can be full of duplicate files.\"\ntest \"The cart was full with produce from the market.\" \"The cart was full of produce from the market.\"\ntest \"Their feed is FULL WITH memes.\" \"Their feed is FULL OF memes.\"\ntest \"By noon, the queue was full with pending jobs.\" \"By noon, the queue was full of pending jobs.\"\ntest \"The room felt full with tension before the vote.\" \"The room felt full of tension before the vote.\"\n\ntest \"The pantry is full of snacks.\" \"The pantry is full of snacks.\"\ntest \"The glass is full.\" \"The glass is full.\"\ntest \"The form is full-width on desktop.\" \"The form is full-width on desktop.\"\ntest \"This section applies in full with respect to archived records.\" \"This section applies in full of respect to archived records.\"\ntest \"Please fill the tank with fuel before sunrise.\" \"Please fill the tank with fuel before sunrise.\"\ntest \"His hands were full with gloves on top.\" \"His hands were full of gloves on top.\"\ntest \"A suitcase full with souvenirs sat by the door.\" \"A suitcase full of souvenirs sat by the door.\"\ntest \"FULL with placeholders, the draft was still useful.\" \"FULL of placeholders, the draft was still useful.\"\n"
  },
  {
    "path": "weir_rules/HaveNegNoAny.weir",
    "content": "expr main <(([(haven't), (hasn't), (hadn't), (have not), (has not), (had not), (have n't), (has n't), (had n't)] VERB no NOUN)), no>\n\nlet message \"This negative form sounds nonstandard; use `any` after the negated auxiliary.\"\nlet description \"Rewrites `no` to `any` in clauses like `haven't done no X` so the sentence keeps a single clear negation.\"\nlet kind \"Grammar\"\nlet becomes \"any\"\n\n# True positives\ntest \"I haven't done no harm.\" \"I haven't done any harm.\"\ntest \"She hasn't seen no emails yet.\" \"She hasn't seen any emails yet.\"\ntest \"They hadn't made no progress by noon.\" \"They hadn't made any progress by noon.\"\ntest \"We have not received no update.\" \"We have not received any update.\"\ntest \"He has not shown no interest.\" \"He has not shown any interest.\"\ntest \"You had not found no evidence.\" \"You had not found any evidence.\"\ntest \"I have n't done no chores today.\" \"I have n't done any chores today.\"\ntest \"WE HAVEN'T DONE NO WORK.\" \"WE HAVEN'T DONE ANY WORK.\"\ntest \"She hasn't caused no trouble, honestly.\" \"She hasn't caused any trouble, honestly.\"\ntest \"They hadn't kept no records.\" \"They hadn't kept any records.\"\n\n# False positives / true negatives\nallows \"I haven't done any harm.\"\nallows \"She has done no harm.\"\nallows \"We did not make no promises.\"\nallows \"I have no idea what happened.\"\nallows \"They haven't gone anywhere.\"\nallows \"He hadn't, no joke, slept all week.\"\n"
  },
  {
    "path": "weir_rules/InAdjectiveMatter.weir",
    "content": "expr booster [very, really, quite, fairly, rather, pretty, extremely]\nexpr article [a, an]\nexpr blockedAdj [legal, criminal, financial, policy, personnel, security, administrative, regulatory, disciplinary, constitutional, civil, private, public, diplomatic, technical, medical, tax]\nexpr plainCase <((in @article !@blockedAdj matter), (matter))>\nexpr boostedCase <((in @article @booster !@blockedAdj matter), (matter))>\nexpr main [@plainCase, @boostedCase]\n\nlet message \"In this wording, `manner` is usually the intended noun.\"\nlet description \"Swaps `matter` to `manner` after `in a/an` plus a descriptive adjective, while skipping common topic-domain usages.\"\nlet kind \"Grammar\"\nlet becomes \"manner\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"Please answer in a respectful matter.\" \"Please answer in a respectful manner.\"\ntest \"He spoke in a calm matter during the meeting.\" \"He spoke in a calm manner during the meeting.\"\ntest \"She handled it in an efficient matter.\" \"She handled it in an efficient manner.\"\ntest \"Try to react in a professional matter.\" \"Try to react in a professional manner.\"\ntest \"They negotiated in a patient matter.\" \"They negotiated in a patient manner.\"\ntest \"We should respond in a clear matter.\" \"We should respond in a clear manner.\"\ntest \"She presented it in a very thoughtful matter.\" \"She presented it in a very thoughtful manner.\"\ntest \"Please discuss this in a really careful matter.\" \"Please discuss this in a really careful manner.\"\ntest \"IN A CALM MATTER, EXPLAIN THE ISSUE.\" \"IN A CALM MANNER, EXPLAIN THE ISSUE.\"\n\n# False positives / true negatives\n\nallows \"The case is now in a legal matter docket.\"\nallows \"They consulted counsel in a financial matter.\"\nallows \"The agency intervened in a regulatory matter.\"\nallows \"This belongs in a private matter file.\"\nallows \"He spoke in a calm manner during the meeting.\"\nallows \"Please answer respectfully.\"\n\n# False negatives / boundary behavior\n\nallows \"Please answer in a matter of minutes.\"\nallows \"The report was in an order that looked odd.\"\nallows \"They worked in a super calm matter.\"\nallows \"Try to respond in a, calm matter.\"\nallows \"We discussed this in careful matter.\"\n"
  },
  {
    "path": "weir_rules/IntroCueCommaBeforeThanks.weir",
    "content": "expr main (no thanks)\n\nlet message \"Set off `no` with a comma in the response phrase `no, thanks`.\"\nlet description \"Normalizes the common refusal phrase by inserting the missing comma.\"\nlet kind \"Punctuation\"\nlet becomes \"no, thanks\"\nlet strategy \"MatchCase\"\n\n# True positives\ntest \"No thanks I am fine.\" \"No, thanks I am fine.\"\ntest \"No thanks we already solved it.\" \"No, thanks we already solved it.\"\ntest \"No thanks this is enough detail.\" \"No, thanks this is enough detail.\"\ntest \"No thanks that will not help.\" \"No, thanks that will not help.\"\ntest \"No thanks there is no need.\" \"No, thanks there is no need.\"\ntest \"No thanks here is my reason.\" \"No, thanks here is my reason.\"\ntest \"No thanks maybe later tonight.\" \"No, thanks maybe later tonight.\"\ntest \"no thanks i will pass.\" \"no, thanks i will pass.\"\ntest \"NO THANKS I ALREADY ATE.\" \"NO, THANKS I ALREADY ATE.\"\ntest \"No thanks they can take this one.\" \"No, thanks they can take this one.\"\ntest \"No thanks.\" \"No, thanks.\"\ntest \"No thanks!\" \"No, thanks!\"\ntest \"No thanks?\" \"No, thanks?\"\ntest \"No thanks for asking.\" \"No, thanks for asking.\"\n\n# False positives / true negatives\nallows \"No, thanks I am fine.\"\nallows \"No, thanks.\"\nallows \"No, thanks needed.\"\nallows \"No, thanks for asking.\"\nallows \"No thank you, I am good.\"\nallows \"Yes thanks I am fine.\"\nallows \"No-thanks messages are short.\"\nallows \"Nothing to say, thanks.\"\n"
  },
  {
    "path": "weir_rules/IsBeenAuxSequence.weir",
    "content": "expr main (is been)\n\nlet message \"This helper sequence is nonstandard in edited English.\"\nlet description \"Rewrites `is been` to a standard perfect-passive form.\"\nlet kind \"Grammar\"\nlet becomes \"has been\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"The patch is been deployed to production.\" \"The patch has been deployed to production.\"\ntest \"My account is been reviewed by support.\" \"My account has been reviewed by support.\"\ntest \"This endpoint is been rate-limited today.\" \"This endpoint has been rate-limited today.\"\ntest \"The feature is been rolled out gradually.\" \"The feature has been rolled out gradually.\"\ntest \"The issue is been tracked in Jira.\" \"The issue has been tracked in Jira.\"\ntest \"Our request is been denied again.\" \"Our request has been denied again.\"\ntest \"The ticket IS BEEN reopened overnight.\" \"The ticket HAS BEEN reopened overnight.\"\ntest \"Everything is been backed up nightly.\" \"Everything has been backed up nightly.\"\n\n# True negatives / false positives\n\ntest \"The patch has been deployed to production.\" \"The patch has been deployed to production.\"\ntest \"The patch is being deployed to production.\" \"The patch is being deployed to production.\"\ntest \"The patch was deployed to production.\" \"The patch was deployed to production.\"\ntest \"I think this has been fixed already.\" \"I think this has been fixed already.\"\ntest \"The phrase is beneficial for SEO.\" \"The phrase is beneficial for SEO.\"\ntest \"This is, been there, done that.\" \"This is, been there, done that.\"\n\n# False negatives / accepted scope limits\n\ntest \"The patch was been deployed to production.\" \"The patch was been deployed to production.\"\ntest \"The patch is not been deployed to production.\" \"The patch is not been deployed to production.\"\ntest \"The patch isn't been deployed to production.\" \"The patch isn't been deployed to production.\"\ntest \"The patch is really been deployed to production.\" \"The patch is really been deployed to production.\"\n"
  },
  {
    "path": "weir_rules/ItTimeAuxiliary.weir",
    "content": "expr main <([([it, It] time to), ([it, It] time for)]), [it, It]>\n\nlet message \"This phrase usually needs the contraction `it's` before `time` in this construction.\"\nlet description \"Fixes missing auxiliary usage in `it time to/for ...` patterns by inserting the contraction form.\"\nlet kind \"Grammar\"\nlet becomes \"it's\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"It time to leave the thread.\" \"It's time to leave the thread.\"\ntest \"it time to update the docs.\" \"it's time to update the docs.\"\ntest \"It time for lunch.\" \"It's time for lunch.\"\ntest \"it time for another deploy.\" \"it's time for another deploy.\"\ntest \"I think it time to restart.\" \"I think it's time to restart.\"\ntest \"When it time for backups, ping me.\" \"When it's time for backups, ping me.\"\ntest \"IT TIME TO SHIP.\" \"IT'S TIME TO SHIP.\"\ntest \"If it time to vote, we should vote.\" \"If it's time to vote, we should vote.\"\n\n# False positives / true negatives\n\ntest \"It's time to leave the thread.\" \"It's time to leave the thread.\"\ntest \"It's time for lunch.\" \"It's time for lunch.\"\ntest \"I know it is time to restart.\" \"I know it is time to restart.\"\ntest \"Give it a minute to cool down.\" \"Give it a minute to cool down.\"\ntest \"The app tracks time for every task.\" \"The app tracks time for every task.\"\ntest \"It was time to go.\" \"It was time to go.\"\ntest \"It takes time to go from draft to launch.\" \"It takes time to go from draft to launch.\"\n\n# False negatives / boundary behavior\n\ntest \"It finally time to merge.\" \"It finally time to merge.\"\ntest \"it now time for bed.\" \"it now time for bed.\"\ntest \"it,time to move\" \"it,time to move\"\n"
  },
  {
    "path": "weir_rules/KnowNothingVerb.weir",
    "content": "expr subjects [i, you, we, they, he, she, it]\nexpr main <(@subjects no nothing), no>\n\nlet message \"This looks like a misspelled verb in this phrase.\"\nlet description \"Fixes `no` to `know` in common `subject + no nothing` constructions.\"\nlet kind \"Grammar\"\nlet becomes \"know\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"You no nothing about me.\" \"You know nothing about me.\"\ntest \"I no nothing about networking.\" \"I know nothing about networking.\"\ntest \"We no nothing about this outage.\" \"We know nothing about this outage.\"\ntest \"They no nothing about the timeline.\" \"They know nothing about the timeline.\"\ntest \"He no nothing about the contract.\" \"He know nothing about the contract.\"\ntest \"She no nothing about this repo.\" \"She know nothing about this repo.\"\ntest \"It no nothing about human language.\" \"It know nothing about human language.\"\ntest \"YOU NO NOTHING ABOUT THIS.\" \"YOU KNOW NOTHING ABOUT THIS.\"\n\n# False positives / true negatives\n\ntest \"You know nothing about me.\" \"You know nothing about me.\"\ntest \"I know nothing about networking.\" \"I know nothing about networking.\"\ntest \"No, nothing changed in production.\" \"No, nothing changed in production.\"\ntest \"You said no; nothing else was required.\" \"You said no; nothing else was required.\"\ntest \"You no longer need this setting.\" \"You no longer need this setting.\"\ntest \"They know absolutely nothing about the incident.\" \"They know absolutely nothing about the incident.\"\ntest \"The sign says no nothing policy exceptions.\" \"The sign says no nothing policy exceptions.\"\ntest \"He knows nothing about the contract.\" \"He knows nothing about the contract.\"\n\n# False negatives / known limits by design\n\ntest \"You no absolutely nothing about me.\" \"You no absolutely nothing about me.\"\ntest \"My team no nothing about this outage.\" \"My team no nothing about this outage.\"\n"
  },
  {
    "path": "weir_rules/LookInto.weir",
    "content": "expr lookVerbs [look, looks, looked, looking]\nexpr whWords [what, who, whom, whose, when, where, why, how, which, whoever, whomever, whichever, whatever, whether, whenever]\n\nexpr main <((@lookVerbs in to) @whWords), (in to)>\n\nlet message \"Keep `look into` together before question words so the verb stays idiomatic.\"\nlet description \"Merges the split preposition when a look-verb is followed by a clause that starts with a question word.\"\nlet kind \"Grammar\"\nlet becomes \"into\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"I look in to what happened last night.\" \"I look into what happened last night.\"\ntest \"She looks in to who wrote the note.\" \"She looks into who wrote the note.\"\ntest \"They looked in to where the alarm originated.\" \"They looked into where the alarm originated.\"\ntest \"We are looking in to why the download fails.\" \"We are looking into why the download fails.\"\ntest \"LOOK in to WHEN the site crashed.\" \"LOOK into WHEN the site crashed.\"\ntest \"Looking in to whichever document you choose helps.\" \"Looking into whichever document you choose helps.\"\ntest \"I looked in to how you fixed the bug.\" \"I looked into how you fixed the bug.\"\ntest \"Look in to whoever can help with it.\" \"Look into whoever can help with it.\"\ntest \"She looks in to whom the report belongs.\" \"She looks into whom the report belongs.\"\ntest \"They are looking in to whether the patch helps.\" \"They are looking into whether the patch helps.\"\ntest \"We look in to whose section needs focus.\" \"We look into whose section needs focus.\"\ntest \"He looked in to whenever the team opens the log.\" \"He looked into whenever the team opens the log.\"\ntest \"Looking in to whomever the judge permits is polite.\" \"Looking into whomever the judge permits is polite.\"\n\n# False positives / true negatives\n\nallows \"Look into the code to find the bug.\"\nallows \"I looked into the notes before replying.\"\nallows \"Please look in to the manual to see the steps.\"\nallows \"He looks in to the dataset in order to compare.\"\nallows \"Looking in to the folder to check if the file exists.\"\nallows \"We look in the box to count the screws.\"\n"
  },
  {
    "path": "weir_rules/MakeupCompoundNoun.weir",
    "content": "expr determiner [the, a, an, this, that, these, those, my, your, his, her, its, our, their]\nexpr main <([(@determiner make up), (@determiner ADJ make up)]), (make up)>\n\nlet message \"Use the closed compound for this cosmetics noun form.\"\nlet description \"Finds determiner-led noun phrases where the split spelling appears and closes it.\"\nlet kind \"Style\"\nlet becomes \"makeup\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"Her make up looked great in photos.\" \"Her makeup looked great in photos.\"\ntest \"My make up bag is on the desk.\" \"My makeup bag is on the desk.\"\ntest \"The make up artist arrived early.\" \"The makeup artist arrived early.\"\ntest \"A make up routine can be simple.\" \"A makeup routine can be simple.\"\ntest \"Our everyday make up stays in this drawer.\" \"Our everyday makeup stays in this drawer.\"\ntest \"His dramatic make up style changed.\" \"His dramatic makeup style changed.\"\ntest \"That bridal make up trial helped.\" \"That bridal makeup trial helped.\"\ntest \"The MAKE UP room is ready.\" \"The MAKEUP room is ready.\"\n\n# False-positive checks / true negatives\n\ntest \"They will make up after the argument.\" \"They will make up after the argument.\"\ntest \"Please make up your mind quickly.\" \"Please make up your mind quickly.\"\ntest \"We can make up stories for the game.\" \"We can make up stories for the game.\"\ntest \"I need to make up for lost time.\" \"I need to make up for lost time.\"\ntest \"She asked them to make up before dinner.\" \"She asked them to make up before dinner.\"\ntest \"The team tried to make up ground in Q4.\" \"The team tried to make up ground in Q4.\"\ntest \"This makeup kit is already packed.\" \"This makeup kit is already packed.\"\ntest \"Makeup tutorials are everywhere.\" \"Makeup tutorials are everywhere.\"\n\n# Expected limits / false negatives currently out of scope\n\ntest \"Daily make up can feel heavy in summer.\" \"Daily make up can feel heavy in summer.\"\ntest \"Make up is expensive these days.\" \"Make up is expensive these days.\"\n"
  },
  {
    "path": "weir_rules/OvertimeCompoundNoun.weir",
    "content": "expr overTimePay <(over time pay), ( )>\nexpr overTimeRate <(over time rate), ( )>\nexpr overTimeRates <(over time rates), ( )>\nexpr overTimeWage <(over time wage), ( )>\nexpr overTimeWages <(over time wages), ( )>\nexpr overTimeHour <(over time hour), ( )>\nexpr overTimeHours <(over time hours), ( )>\nexpr overTimeShift <(over time shift), ( )>\nexpr overTimeShifts <(over time shifts), ( )>\nexpr overTimeDetails <(over time details), ( )>\nexpr overTimeClaim <(over time claim), ( )>\nexpr overTimeClaims <(over time claims), ( )>\nexpr overTimeApproval <(over time approval), ( )>\nexpr overTimeApprovals <(over time approvals), ( )>\nexpr main [@overTimePay, @overTimeRate, @overTimeRates, @overTimeWage, @overTimeWages, @overTimeHour, @overTimeHours, @overTimeShift, @overTimeShifts, @overTimeDetails, @overTimeClaim, @overTimeClaims, @overTimeApproval, @overTimeApprovals]\n\nlet message \"Use `overtime` as one word when referring to extra paid work hours.\"\nlet description \"Finds job-hours contexts where the split form appears and joins it into the standard compound.\"\nlet kind \"Style\"\nlet becomes \"\"\n\n# True positives\ntest \"The report includes over time pay details.\" \"The report includes overtime pay details.\"\ntest \"HR confirmed over time wages for Sunday.\" \"HR confirmed overtime wages for Sunday.\"\ntest \"They filed an over time claim yesterday.\" \"They filed an overtime claim yesterday.\"\ntest \"Finance reviewed over time approvals this morning.\" \"Finance reviewed overtime approvals this morning.\"\ntest \"We saw over time hours spike in July.\" \"We saw overtime hours spike in July.\"\ntest \"The policy covers over time shifts in emergencies.\" \"The policy covers overtime shifts in emergencies.\"\ntest \"Our sheet tracks over time rates by region.\" \"Our sheet tracks overtime rates by region.\"\ntest \"Please submit over time approval before Friday.\" \"Please submit overtime approval before Friday.\"\ntest \"Managers audit over time details weekly.\" \"Managers audit overtime details weekly.\"\n\n# True negatives / false-positive checks\ntest \"The metal weakens over time.\" \"The metal weakens over time.\"\ntest \"Our process improved over time.\" \"Our process improved over time.\"\ntest \"The timeline moves over time zones.\" \"The timeline moves over time zones.\"\ntest \"We already approved overtime yesterday.\" \"We already approved overtime yesterday.\"\ntest \"They watched trends over time in the dashboard.\" \"They watched trends over time in the dashboard.\"\ntest \"I prefer over-time as a stylized heading.\" \"I prefer over-time as a stylized heading.\"\n\n# Known false negatives (currently out of scope)\ntest \"They worked over time during the holidays.\" \"They worked over time during the holidays.\"\ntest \"She was paid over time for Sunday.\" \"She was paid over time for Sunday.\"\ntest \"We log over time whenever call volume spikes.\" \"We log over time whenever call volume spikes.\"\n"
  },
  {
    "path": "weir_rules/PleasRequestVerb.weir",
    "content": "expr main <([(pleas review), (pleas check), (pleas help), (pleas read), (pleas fix), (pleas explain), (pleas advise), (pleas share), (pleas update), (pleas confirm), (pleas send), (pleas tell), (pleas look)]), pleas>\n\nlet message \"Use `please` as the request opener.\"\nlet description \"Fixes the typo `pleas` when it appears as a request cue before common action verbs.\"\nlet kind \"Typo\"\nlet becomes \"please\"\n\n# true positives\n\ntest \"Pleas review this pull request.\" \"Please review this pull request.\"\ntest \"pleas check the logs again.\" \"please check the logs again.\"\ntest \"Pleas help me with this error.\" \"Please help me with this error.\"\ntest \"Could you pleas read this quickly?\" \"Could you please read this quickly?\"\ntest \"Pleas fix the broken link.\" \"Please fix the broken link.\"\ntest \"Pleas explain what changed.\" \"Please explain what changed.\"\ntest \"Pleas share the screenshot.\" \"Please share the screenshot.\"\ntest \"Pleas update the ticket status.\" \"Please update the ticket status.\"\ntest \"Pleas confirm receipt.\" \"Please confirm receipt.\"\ntest \"Pleas send the invoice today.\" \"Please send the invoice today.\"\n\n# true negatives / false-positive guards\n\ntest \"Please review this pull request.\" \"Please review this pull request.\"\ntest \"Their legal pleas were ignored.\" \"Their legal pleas were ignored.\"\ntest \"The pleas fall on deaf ears.\" \"The pleas fall on deaf ears.\"\ntest \"He pleas for mercy.\" \"He pleas for mercy.\"\ntest \"Could you please check the logs again?\" \"Could you please check the logs again?\"\ntest \"These pleas sound desperate.\" \"These pleas sound desperate.\"\n"
  },
  {
    "path": "weir_rules/PostItNoteHyphen.weir",
    "content": "expr main <(post it [note, notes]), ( )>\n\nlet message \"Use a hyphen in this compound term.\"\nlet description \"Standardizes the sticky-note product phrase by joining the first two words.\"\nlet kind \"Punctuation\"\nlet becomes \"-\"\n\n# True positives\ntest \"Please grab a post it note.\" \"Please grab a post-it note.\"\ntest \"I left a post it note on your monitor.\" \"I left a post-it note on your monitor.\"\ntest \"She buys post it notes in bulk.\" \"She buys post-it notes in bulk.\"\ntest \"Can you read that POST IT NOTE?\" \"Can you read that POST-IT NOTE?\"\ntest \"The drawer has Post It Notes.\" \"The drawer has Post-It Notes.\"\ntest \"post it note\" \"post-it note\"\ntest \"post it notes\" \"post-it notes\"\ntest \"A bright yellow post it note helped.\" \"A bright yellow post-it note helped.\"\n\n# False positives / true negatives\ntest \"Please post it now.\" \"Please post it now.\"\ntest \"This post itches sometimes.\" \"This post itches sometimes.\"\ntest \"She wrote on a post-it note.\" \"She wrote on a post-it note.\"\ntest \"We discussed post it board layouts.\" \"We discussed post it board layouts.\"\ntest \"They said, 'post it,' then left.\" \"They said, 'post it,' then left.\"\ntest \"Bring one sticky note.\" \"Bring one sticky note.\"\n\n# False negatives guardrails\ntest \"That Post It note was clear.\" \"That Post-It note was clear.\"\ntest \"I found POST IT notes everywhere.\" \"I found POST-IT notes everywhere.\"\n"
  },
  {
    "path": "weir_rules/PrincipleToPrincipalRoleNoun.weir",
    "content": "expr determiners [my, your, his, her, our, their, the, this, that, these, those, a, an]\nexpr roleNouns [job, jobs, role, roles, duty, duties, task, tasks, focus, priority, priorities, concern, concerns, objective, objectives, goal, goals, aim, aims, purpose, purposes, responsibility, responsibilities, motivation, motivations, reason, reasons]\nexpr main <([(@determiners principle @roleNouns)]), principle>\n\nlet message \"Use `principal` for the adjective meaning `main` in this phrase.\"\nlet description \"Fixes `principle` to `principal` when it appears as an adjective before common role, goal, and priority nouns (for example, `my principle job`).\"\nlet kind \"Grammar\"\nlet becomes \"principal\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"My principle job was to keep the release stable.\" \"My principal job was to keep the release stable.\"\ntest \"Her principle concern is latency.\" \"Her principal concern is latency.\"\ntest \"Our principle objective remains reliability.\" \"Our principal objective remains reliability.\"\ntest \"The principle reason we paused was safety.\" \"The principal reason we paused was safety.\"\ntest \"Their principle role is mentoring new hires.\" \"Their principal role is mentoring new hires.\"\ntest \"This principle focus feels too narrow.\" \"This principal focus feels too narrow.\"\ntest \"A principle goal for Q3 is retention.\" \"A principal goal for Q3 is retention.\"\ntest \"His principle responsibility is approvals.\" \"His principal responsibility is approvals.\"\ntest \"THEIR PRINCIPLE PRIORITY IS UPTIME.\" \"THEIR PRINCIPAL PRIORITY IS UPTIME.\"\ntest \"My principle duties include incident response.\" \"My principal duties include incident response.\"\n\n# False positives / true negatives\n\nallows \"My principle was to communicate clearly.\"\nallows \"The first principle is simplicity.\"\nallows \"She explained the governing principle to the team.\"\nallows \"My principal job was to keep the release stable.\"\nallows \"The principal reason we paused was safety.\"\n\n# False negatives / accepted gaps\n\nallows \"My very principle job was to keep the release stable.\"\nallows \"My principle, job was to keep the release stable.\"\nallows \"My principle day job is still support.\"\n"
  },
  {
    "path": "weir_rules/RelayOnForRely.weir",
    "content": "expr main [(relay on)]\n\nlet message \"Use `rely on` when you mean depend on something.\"\nlet description \"Corrects the frequent typo where `relay` is used in place of `rely` in the phrase `relay on`.\"\nlet kind \"Grammar\"\nlet becomes \"rely on\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"They relay on shared docs to coordinate releases.\" \"They rely on shared docs to coordinate releases.\"\ntest \"I relay on this checklist every Friday.\" \"I rely on this checklist every Friday.\"\ntest \"We relay on each other during incidents.\" \"We rely on each other during incidents.\"\ntest \"You relay on cached responses too much.\" \"You rely on cached responses too much.\"\ntest \"Many users relay on search snippets.\" \"Many users rely on search snippets.\"\ntest \"Please relay on us while this stabilizes.\" \"Please rely on us while this stabilizes.\"\ntest \"RELAY ON ME if the deployment fails.\" \"RELY ON ME if the deployment fails.\"\ntest \"Startups often relay on investor timing.\" \"Startups often rely on investor timing.\"\n\n# Potential false negatives (currently out of scope)\n\nallows \"They relayed on old procedures for years.\"\nallows \"She relays on luck far too often.\"\nallows \"The team is relaying on stale metrics.\"\n\n# False positives / true negatives\n\nallows \"They rely on shared docs to coordinate releases.\"\nallows \"I relay status updates every morning.\"\nallows \"We relayed the interview on public radio.\"\nallows \"A relay switch on the board is overheating.\"\nallows \"Please relay this note to the next person.\"\nallows \"Rely on tested rollbacks for safer releases.\"\nallows \"The relay unit on shelf three is new.\"\n"
  },
  {
    "path": "weir_rules/SayTellYou.weir",
    "content": "expr guard ![AUX, VERB]\nexpr main <((say you) @guard), (say)>\n\nlet message \"Use `tell` when your direct object is the person you are naming.\"\nlet description \"`say` wants a clause after it; when a person (`you`) appears as the object, swap in `tell`.\"\nlet kind \"Usage\"\nlet becomes \"tell\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"I want to say you the truth.\" \"I want to tell you the truth.\"\ntest \"Can I say you something before we leave?\" \"Can I tell you something before we leave?\"\ntest \"He promised to say you the rules at the meeting.\" \"He promised to tell you the rules at the meeting.\"\ntest \"Say you the news once it lands.\" \"Tell you the news once it lands.\"\ntest \"I'll say you the password later today.\" \"I'll tell you the password later today.\"\ntest \"Say you, in private, anything you need.\" \"Tell you, in private, anything you need.\"\ntest \"They plan to say you her schedule before noon.\" \"They plan to tell you her schedule before noon.\"\ntest \"She started to say you the whole saga.\" \"She started to tell you the whole saga.\"\ntest \"say you your concerns, and I'll listen.\" \"tell you your concerns, and I'll listen.\"\ntest \"SAY YOU THIS IDEA NEEDS REVIEW.\" \"TELL YOU THIS IDEA NEEDS REVIEW.\"\n\n# True negatives / false positives\n\nallows \"Say you are wrong.\"\nallows \"Say you will wait until tomorrow.\"\nallows \"Say you have seen the problem.\"\nallows \"Say you can help with this.\"\nallows \"Say you like that idea.\"\nallows \"Say you might be right.\"\n"
  },
  {
    "path": "weir_rules/SneakPeekPreview.weir",
    "content": "expr main <([(sneak peak)]), peak>\n\nlet message \"Use `peek` for the preview phrase.\"\nlet description \"Corrects the common phrase-level confusion where `peak` is used instead of `peek` after `sneak`.\"\nlet kind \"WordChoice\"\nlet becomes \"peek\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"Here is a sneak peak at the update.\" \"Here is a sneak peek at the update.\"\ntest \"We got a sneak peak before launch.\" \"We got a sneak peek before launch.\"\ntest \"Can I get a sneak peak?\" \"Can I get a sneak peek?\"\ntest \"The trailer gives a sneak peak into episode two.\" \"The trailer gives a sneak peek into episode two.\"\ntest \"They posted a sneak peak yesterday.\" \"They posted a sneak peek yesterday.\"\ntest \"Sneak peak footage just dropped.\" \"Sneak peek footage just dropped.\"\ntest \"SNEAK PEAK INSIDE.\" \"SNEAK PEEK INSIDE.\"\ntest \"A quick sneak peak: new icons and themes.\" \"A quick sneak peek: new icons and themes.\"\n\n# False negatives (positive variants that should still be caught)\n\ntest \"I want a sneak peak, not the full demo.\" \"I want a sneak peek, not the full demo.\"\ntest \"Another sneak peak came from QA.\" \"Another sneak peek came from QA.\"\ntest \"This blog has a sneak peak of the redesign.\" \"This blog has a sneak peek of the redesign.\"\n\n# False positives / true negatives\n\ntest \"Here is a sneak peek at the update.\" \"Here is a sneak peek at the update.\"\ntest \"The hikers reached the peak at sunrise.\" \"The hikers reached the peak at sunrise.\"\ntest \"He took a peek at the draft.\" \"He took a peek at the draft.\"\ntest \"A sneaky peak can be seen from that ridge.\" \"A sneaky peak can be seen from that ridge.\"\ntest \"The phrase 'sneak-peak' was used in the title.\" \"The phrase 'sneak-peak' was used in the title.\"\n"
  },
  {
    "path": "weir_rules/TheWhetherWeather.weir",
    "content": "expr main (the whether)\n\nlet message \"This phrase likely uses the noun for atmospheric conditions.\"\nlet description \"Fixes the common mix-up where `whether` is used after `the` when the weather noun is intended.\"\nlet kind \"WordChoice\"\nlet becomes \"the weather\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"Can you check the whether?\" \"Can you check the weather?\"\ntest \"How is the whether today?\" \"How is the weather today?\"\ntest \"I checked the whether before driving.\" \"I checked the weather before driving.\"\ntest \"Please post the whether update.\" \"Please post the weather update.\"\ntest \"THE WHETHER LOOKS BAD.\" \"THE WEATHER LOOKS BAD.\"\ntest \"the whether in Seattle changes fast.\" \"the weather in Seattle changes fast.\"\ntest \"What's the whether like there?\" \"What's the weather like there?\"\ntest \"We planned around the whether forecast.\" \"We planned around the weather forecast.\"\n\n# True negatives / false-positive guards\n\ntest \"Can you check the weather?\" \"Can you check the weather?\"\ntest \"I wonder whether we should leave.\" \"I wonder whether we should leave.\"\ntest \"Whether you stay or go is up to you.\" \"Whether you stay or go is up to you.\"\ntest \"The weather is perfect.\" \"The weather is perfect.\"\ntest \"She asked whether the weather would hold.\" \"She asked whether the weather would hold.\"\ntest \"We debated whether to cancel.\" \"We debated whether to cancel.\"\n\n# Boundary and near-miss coverage\n\ntest \"Check whether the weather changed.\" \"Check whether the weather changed.\"\ntest \"THE WEATHER report is ready.\" \"THE WEATHER report is ready.\"\ntest \"The whether, as written here, is a typo.\" \"The weather, as written here, is a typo.\"\ntest \"He asked whether there was bad weather.\" \"He asked whether there was bad weather.\"\n"
  },
  {
    "path": "weir_rules/ThereAfterCompound.weir",
    "content": "expr continuation [VERB, AUX, ADV]\nexpr context (there after @continuation)\nexpr main <@context, (there after)>\n\nlet message \"This two-word form is likely intended as the single adverb.\"\nlet description \"Normalizes split `there after` to the closed form in adverbial contexts.\"\nlet kind \"Grammar\"\nlet becomes \"thereafter\"\nlet strategy \"MatchCase\"\n\n# True positives\ntest \"There after came a second wave of reports.\" \"Thereafter came a second wave of reports.\"\ntest \"there after came another outage.\" \"thereafter came another outage.\"\ntest \"There after arrived a second alert.\" \"Thereafter arrived a second alert.\"\ntest \"THERE AFTER CAME THE RETRY LOOP.\" \"THEREAFTER CAME THE RETRY LOOP.\"\ntest \"There after appeared a warning banner.\" \"Thereafter appeared a warning banner.\"\ntest \"there after often we verify backups.\" \"thereafter often we verify backups.\"\ntest \"there after can we close the incident.\" \"thereafter can we close the incident.\"\ntest \"There after is not ideal, but there after was written.\" \"Thereafter is not ideal, but thereafter was written.\"\ntest \"There after had we seen similar errors.\" \"Thereafter had we seen similar errors.\"\ntest \"there after will we archive logs.\" \"thereafter will we archive logs.\"\n\n# False positives / true negatives\nallows \"We met there after dinner.\"\nallows \"I left my bag there after class.\"\nallows \"Please stand there after the bell rings.\"\nallows \"They drove there after lunch.\"\nallows \"She sat there after work every day.\"\nallows \"there afterparty tickets sold out quickly.\"\n\n# False negatives (accepted limits)\nallows \"There after lunch we reviewed logs.\"\nallows \"I was there after that incident.\"\n"
  },
  {
    "path": "weir_rules/ThereMissingIsClause.weir",
    "content": "expr starter [if, when, whether, because, unless]\nexpr article [a, an, another]\nexpr main <([(@starter there @article)]), there>\n\nlet message \"This clause usually needs a linking verb after `there`.\"\nlet description \"Inserts `is` in common subordinate clauses like `if there a ...` where the copula is omitted.\"\nlet kind \"Grammar\"\nlet becomes \"there is\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"Tell me if there a delay.\" \"Tell me if there is a delay.\"\ntest \"Ping me when there an outage.\" \"Ping me when there is an outage.\"\ntest \"Ask whether there another option.\" \"Ask whether there is another option.\"\ntest \"I worry because there a mismatch.\" \"I worry because there is a mismatch.\"\ntest \"Escalate unless there a fix.\" \"Escalate unless there is a fix.\"\ntest \"If there a blocker, post it.\" \"If there is a blocker, post it.\"\ntest \"WHEN THERE AN ISSUE, CALL ME.\" \"WHEN THERE IS AN ISSUE, CALL ME.\"\ntest \"because there another route, we can retry\" \"because there is another route, we can retry\"\n\n# False positives / true negatives\n\ntest \"Tell me if there is a delay.\" \"Tell me if there is a delay.\"\ntest \"Ping me when there are outages.\" \"Ping me when there are outages.\"\ntest \"I worry because there was a mismatch.\" \"I worry because there was a mismatch.\"\ntest \"Unless there is a fix, escalate.\" \"Unless there is a fix, escalate.\"\ntest \"If there, a delay is likely.\" \"If there, a delay is likely.\"\ntest \"When there isn't an issue, we proceed.\" \"When there isn't an issue, we proceed.\"\n\n# False negatives / boundary behavior\n\ntest \"Tell me if there any delay.\" \"Tell me if there any delay.\"\ntest \"Ping me when there no outage.\" \"Ping me when there no outage.\"\ntest \"Ask whether there many options.\" \"Ask whether there many options.\"\ntest \"I worry because there one mismatch.\" \"I worry because there one mismatch.\"\n"
  },
  {
    "path": "weir_rules/ThieveNoun.weir",
    "content": "expr determiners [the, a, an, this, that, my, your, his, her, their, our, its]\nexpr nounContext [(@determiners thieve), (@determiners [ADJ] thieve)]\nexpr main <(@nounContext), thieve>\n\nlet message \"Use `thief` for a single person who steals.\"\nlet description \"Fixes accidental `thieve` in noun phrases where singular `thief` is intended.\"\nlet kind \"Spelling\"\nlet becomes \"thief\"\n\n# true positives\n\ntest \"The thieve ran off before anyone noticed.\" \"The thief ran off before anyone noticed.\"\ntest \"A thieve took my bike from the rack.\" \"A thief took my bike from the rack.\"\ntest \"My thieve character has max stealth.\" \"My thief character has max stealth.\"\ntest \"Their thieve escaped through the alley.\" \"Their thief escaped through the alley.\"\ntest \"An elusive thieve slipped past security.\" \"An elusive thief slipped past security.\"\ntest \"His notorious thieve was finally identified.\" \"His notorious thief was finally identified.\"\ntest \"Our thieve was caught on camera.\" \"Our thief was caught on camera.\"\ntest \"This thieve left muddy footprints.\" \"This thief left muddy footprints.\"\n\n# false positives / true negatives\n\ntest \"The thief ran off before anyone noticed.\" \"The thief ran off before anyone noticed.\"\ntest \"Thieves ran off before anyone noticed.\" \"Thieves ran off before anyone noticed.\"\ntest \"They thieve from cargo ships at night.\" \"They thieve from cargo ships at night.\"\ntest \"Do not thieve from your neighbors.\" \"Do not thieve from your neighbors.\"\ntest \"The archive stores old legal briefs and pleas.\" \"The archive stores old legal briefs and pleas.\"\ntest \"My brave thief character has max stealth.\" \"My brave thief character has max stealth.\"\ntest \"Our very clever thief left no trace.\" \"Our very clever thief left no trace.\"\ntest \"That very skilled thief cracked the safe.\" \"That very skilled thief cracked the safe.\"\n"
  },
  {
    "path": "weir_rules/ThinkKnowOff.weir",
    "content": "expr cue [think, thinking, thought, know, knows, knew, known]\nexpr main <([(@cue off ![hand, the, of]), (@cue ADV off ![hand, the, of])]), off>\n\nlet message \"This collocation usually takes `of` rather than `off`.\"\nlet description \"Fixes the common preposition mix-up after verbs like `know` and `think` in phrases such as `know off` and `thought off` when a following token indicates the intended meaning is `of`.\"\nlet kind \"Grammar\"\nlet becomes \"of\"\n\n# True positives\n\ntest \"It's the only part of the stack I know off that still depends on legacy auth.\" \"It's the only part of the stack I know of that still depends on legacy auth.\"\ntest \"I can think off three reasons to postpone the migration.\" \"I can think of three reasons to postpone the migration.\"\ntest \"She thought off a better fallback before launch.\" \"She thought of a better fallback before launch.\"\ntest \"We knew off several vendors with that certification.\" \"We knew of several vendors with that certification.\"\ntest \"He knows off one maintainer who can approve this.\" \"He knows of one maintainer who can approve this.\"\ntest \"They were thinking off possible names all afternoon.\" \"They were thinking of possible names all afternoon.\"\ntest \"KNOWN OFF nobody outside the team.\" \"KNOWN OF nobody outside the team.\"\ntest \"Do you know off anyone who still uses that plugin?\" \"Do you know of anyone who still uses that plugin?\"\n\n# True negatives / false positives\n\ntest \"I know off hand how that API behaves.\" \"I know off hand how that API behaves.\"\ntest \"I know off the top of my head what caused it.\" \"I know off the top of my head what caused it.\"\ntest \"I know off of one mirror in that region.\" \"I know off of one mirror in that region.\"\ntest \"This threat was enough to make them think twice.\" \"This threat was enough to make them think twice.\"\ntest \"They know each subsystem by heart.\" \"They know each subsystem by heart.\"\n\n# False negatives (accepted gaps)\n\ntest \"I think off, at least in theory, four options remain.\" \"I think off, at least in theory, four options remain.\"\ntest \"I know off, maybe two people, who can debug this.\" \"I know off, maybe two people, who can debug this.\"\ntest \"I thought off, frankly, a simpler way.\" \"I thought off, frankly, a simpler way.\"\n"
  },
  {
    "path": "weir_rules/TomorrowPossessiveModifier.weir",
    "content": "expr main <(tomorrows [NOUN, PROPN, (ADJ NOUN), (ADJ PROPN), (ADJ ADJ NOUN), (NUM NOUN)]), tomorrows>\n\nlet message \"Use the possessive form when this time word modifies a following noun phrase.\"\nlet description \"Flags `tomorrows` in attributive contexts and suggests the possessive form instead.\"\nlet kind \"Grammar\"\nlet becomes \"tomorrow's\"\nlet strategy \"MatchCase\"\n\n# true positives\n\ntest \"Tomorrows meeting starts at noon.\" \"Tomorrow's meeting starts at noon.\"\ntest \"tomorrows agenda is already packed.\" \"tomorrow's agenda is already packed.\"\ntest \"We need tomorrows report before lunch.\" \"We need tomorrow's report before lunch.\"\ntest \"I reviewed tomorrows final draft.\" \"I reviewed tomorrow's final draft.\"\ntest \"TOMORROWS launch is delayed.\" \"TOMORROW'S launch is delayed.\"\ntest \"Did you read tomorrows policy update?\" \"Did you read tomorrow's policy update?\"\ntest \"Please confirm tomorrows weekly session.\" \"Please confirm tomorrow's weekly session.\"\ntest \"They posted tomorrows product roadmap.\" \"They posted tomorrow's product roadmap.\"\n\n# false positives / true negatives\n\ntest \"Many tomorrows will come and go.\" \"Many tomorrows will come and go.\"\ntest \"The novel imagines several tomorrows in parallel.\" \"The novel imagines several tomorrows in parallel.\"\ntest \"We talked about tomorrows.\" \"We talked about tomorrows.\"\ntest \"No tomorrows remain for that timeline.\" \"No tomorrows remain for that timeline.\"\ntest \"Tomorrow's meeting starts at noon.\" \"Tomorrow's meeting starts at noon.\"\ntest \"I will finish this tomorrow morning.\" \"I will finish this tomorrow morning.\"\ntest \"Tomorrow we ship the update.\" \"Tomorrow we ship the update.\"\ntest \"These tomorrows are uncertain.\" \"These tomorrows are uncertain.\"\n"
  },
  {
    "path": "weir_rules/WasComprisedOf.weir",
    "content": "expr main (was comprised of)\n\nlet message \"Many style guides treat this wording as nonstandard; consider a clearer construction.\"\nlet description \"Rewrites the fixed phrase `was comprised of` to a more widely accepted form.\"\nlet kind \"Style\"\nlet becomes \"consisted of\"\nlet strategy \"MatchCase\"\n\n# True positives\n\ntest \"The proposal was comprised of faulty assumptions.\" \"The proposal consisted of faulty assumptions.\"\ntest \"Our team was comprised of volunteers and staff.\" \"Our team consisted of volunteers and staff.\"\ntest \"The panel was comprised of three judges.\" \"The panel consisted of three judges.\"\ntest \"His schedule was comprised of back-to-back meetings.\" \"His schedule consisted of back-to-back meetings.\"\ntest \"The box was comprised of recycled cardboard.\" \"The box consisted of recycled cardboard.\"\ntest \"The fleet was comprised of electric vans.\" \"The fleet consisted of electric vans.\"\ntest \"The package WAS COMPRISED OF spare parts.\" \"The package CONSISTED OF spare parts.\"\ntest \"The report was comprised of six appendices.\" \"The report consisted of six appendices.\"\ntest \"Their committee was comprised of alumni.\" \"Their committee consisted of alumni.\"\ntest \"The meal was comprised of rice and beans.\" \"The meal consisted of rice and beans.\"\n\n# False positives / true negatives\n\nallows \"The proposal comprised faulty assumptions.\"\nallows \"The proposal was composed of faulty assumptions.\"\nallows \"The proposal consisted of faulty assumptions.\"\nallows \"The word comprised appears in this sentence.\"\nallows \"She said it was, comprised of errors, according to the draft.\"\nallows \"They were comprised of different backgrounds.\"\n\n# False negatives (accepted limits)\n\nallows \"The proposal is comprised of faulty assumptions.\"\nallows \"The proposal was largely comprised of faulty assumptions.\"\nallows \"The proposal had been comprised of faulty assumptions.\"\n"
  },
  {
    "path": "weir_rules/WokVerbTypo.weir",
    "content": "expr main <([([i, you, we, they, he, she, it] wok), ([i, you, we, they, he, she, it] ADV wok), (to wok), ([can, could, should, would, will, might, must, may] wok), ([can, could, should, would, will, might, must, may] ADV wok), ([do, does, did] wok), ([do, does, did] ADV wok), ([don't, doesn't, didn't] wok), ([don't, doesn't, didn't] ADV wok)]), wok>\n\nlet message \"Did you mean `work`?\"\nlet description \"Flags likely typo cases where `wok` appears where the verb `work` is expected.\"\nlet kind \"Typo\"\nlet becomes \"work\"\nlet strategy \"MatchCase\"\n\ntest \"I wok from home.\" \"I work from home.\"\ntest \"We wok all weekend on this patch.\" \"We work all weekend on this patch.\"\ntest \"They wok better in small teams.\" \"They work better in small teams.\"\ntest \"He wok nights.\" \"He work nights.\"\ntest \"She wok remotely now.\" \"She work remotely now.\"\ntest \"It wok for me yesterday.\" \"It work for me yesterday.\"\ntest \"I usually wok late.\" \"I usually work late.\"\ntest \"You really wok fast.\" \"You really work fast.\"\ntest \"They still wok on legacy systems.\" \"They still work on legacy systems.\"\ntest \"To wok here, you need a badge.\" \"To work here, you need a badge.\"\ntest \"We can wok around that bug.\" \"We can work around that bug.\"\ntest \"I should wok fewer hours.\" \"I should work fewer hours.\"\ntest \"It might wok this time.\" \"It might work this time.\"\ntest \"These settings do wok.\" \"These settings do work.\"\ntest \"The workaround doesn't wok.\" \"The workaround doesn't work.\"\ntest \"We didn't really wok on Friday.\" \"We didn't really work on Friday.\"\ntest \"I WOK from home.\" \"I WORK from home.\"\n\nallows \"This stir-fry cooks well in a wok.\"\nallows \"We bought a new wok yesterday.\"\nallows \"The wok hei flavor was intense.\"\nallows \"Wok cooking takes practice.\"\nallows \"I work from home.\"\nallows \"They worked all day.\"\n"
  },
  {
    "path": "weir_rules/YourOutClauseAgreement.weir",
    "content": "expr clause_start [when, if, since, because, but, as, unless, once, until, till, while, before, after]\nexpr place_link [of, in, on, with, under, over, at, around, inside, outside]\nexpr main <([([when, if, since, because, but, as, unless, once, until, till, while, before, after] your out [of, in, on, with, under, over, at, around, inside, outside]), ([when, if, since, because, but, as, unless, once, until, till, while, before, after] your ADV out [of, in, on, with, under, over, at, around, inside, outside])]), your>\n\nlet message \"Use the contraction for `you are` in this clause.\"\nlet description \"Corrects `your` when it appears where a subject-plus-verb contraction is intended before `out` and a following preposition.\"\nlet kind \"Grammar\"\nlet becomes \"you're\"\n\n# True positives\n\ntest \"Let me know when your out of the meeting.\" \"Let me know when you're out of the meeting.\"\ntest \"Ping me if your out in January.\" \"Ping me if you're out in January.\"\ntest \"Since your out on leave, I'll cover support.\" \"Since you're out on leave, I'll cover support.\"\ntest \"Because your out of credits, checkout failed.\" \"Because you're out of credits, checkout failed.\"\ntest \"As your out at lunch, I left a note.\" \"As you're out at lunch, I left a note.\"\ntest \"Before your out with clients, review this doc.\" \"Before you're out with clients, review this doc.\"\ntest \"After your out under the canopy, call me.\" \"After you're out under the canopy, call me.\"\ntest \"If your completely out of ideas, start from the template.\" \"If you're completely out of ideas, start from the template.\"\n\n# True negatives / false positives\n\ntest \"Let me know when you're out of the meeting.\" \"Let me know when you're out of the meeting.\"\ntest \"Tell me when your outage is resolved.\" \"Tell me when your outage is resolved.\"\ntest \"If your outbox is full, archive old mail.\" \"If your outbox is full, archive old mail.\"\ntest \"Because your outdoor camera failed, we replaced it.\" \"Because your outdoor camera failed, we replaced it.\"\ntest \"When your outfit is ready, send a photo.\" \"When your outfit is ready, send a photo.\"\n\n# False negatives (accepted gaps)\n\ntest \"Whenever your out of office, I can help.\" \"Whenever your out of office, I can help.\"\ntest \"Wherever your out of office, someone can cover.\" \"Wherever your out of office, someone can cover.\"\ntest \"If your way out of this is patience, wait.\" \"If your way out of this is patience, wait.\"\ntest \"Tell me your out of office hours.\" \"Tell me your out of office hours.\"\n"
  }
]